From fd6a1f41721011ec8067c809d8f2cc43a83b6483 Mon Sep 17 00:00:00 2001 From: Eduard Kuzmenko Date: Sat, 9 Nov 2024 14:32:44 +0400 Subject: [PATCH] Build --- .env | 4 +- public/appDialogsManager-C5QjjsuM.js.map | 1 - ...jjsuM.js => appDialogsManager-CU2tx6sj.js} | 117 +++++++++--------- public/appDialogsManager-CU2tx6sj.js.map | 1 + ...{avatar-DBIqplSQ.js => avatar-CgCgq19o.js} | 4 +- ...DBIqplSQ.js.map => avatar-CgCgq19o.js.map} | 2 +- ...{button-DNOYFSTy.js => button-3f1j2I1C.js} | 4 +- ...DNOYFSTy.js.map => button-3f1j2I1C.js.map} | 2 +- ...DxzYbP49.js => codeInputField-CNuG4jhl.js} | 4 +- ....js.map => codeInputField-CNuG4jhl.js.map} | 2 +- ...tBLc-.js => countryInputField-CRALI02l.js} | 4 +- ....map => countryInputField-CRALI02l.js.map} | 2 +- ...pan-bTFVYoGn.js => htmlToSpan-CebCyFv7.js} | 4 +- ...YoGn.js.map => htmlToSpan-CebCyFv7.js.map} | 2 +- public/index-BWSv4yyN.js | 3 + public/index-BWSv4yyN.js.map | 1 + public/index-e-jlGVAF.js | 3 - public/index-e-jlGVAF.js.map | 1 - public/index.html | 2 +- ...Page-DczjgmIm.js => loginPage-BCZQXimI.js} | 4 +- ...jgmIm.js.map => loginPage-BCZQXimI.js.map} | 2 +- public/mtproto.worker-ByDWDGLw.js.map | 1 - ...ByDWDGLw.js => mtproto.worker-P52RgNUJ.js} | 10 +- public/mtproto.worker-P52RgNUJ.js.map | 1 + public/{page-BMz-rky6.js => page-uJBByU88.js} | 4 +- ...e-BMz-rky6.js.map => page-uJBByU88.js.map} | 2 +- ...e-CtKP0tAV.js => pageAuthCode-DpKCfu5j.js} | 6 +- ...AV.js.map => pageAuthCode-DpKCfu5j.js.map} | 2 +- ...{pageIm-BMBxnxPr.js => pageIm-BRYuy2RC.js} | 6 +- ...BMBxnxPr.js.map => pageIm-BRYuy2RC.js.map} | 2 +- ...d-DB-3f9E_.js => pagePassword-DLa5C580.js} | 6 +- ...E_.js.map => pagePassword-DLa5C580.js.map} | 2 +- public/pageSignImport-B8wDO6Zx.js | 3 + ....js.map => pageSignImport-B8wDO6Zx.js.map} | 2 +- public/pageSignImport-aG1X3ySG.js | 3 - ...nIn-_al3L2XE.js => pageSignIn-DlOYqfSO.js} | 6 +- ...L2XE.js.map => pageSignIn-DlOYqfSO.js.map} | 2 +- ...nQR-C3lXUpHx.js => pageSignQR-kLt9tsWo.js} | 6 +- ...UpHx.js.map => pageSignQR-kLt9tsWo.js.map} | 2 +- ...nUp-BQX8EEbq.js => pageSignUp-CM0PdIyd.js} | 6 +- ...EEbq.js.map => pageSignUp-CM0PdIyd.js.map} | 2 +- ...r-CByTF1BW.js => putPreloader-D4mKDX79.js} | 4 +- ...BW.js.map => putPreloader-D4mKDX79.js.map} | 2 +- ...ble-BxUBKXlA.js => scrollable-aRSV2NLC.js} | 4 +- ...KXlA.js.map => scrollable-aRSV2NLC.js.map} | 2 +- public/version | 2 +- ...-DsWC8Ajl.js => wrapEmojiText-C-QYHn8O.js} | 4 +- ...l.js.map => wrapEmojiText-C-QYHn8O.js.map} | 2 +- 48 files changed, 132 insertions(+), 131 deletions(-) delete mode 100644 public/appDialogsManager-C5QjjsuM.js.map rename public/{appDialogsManager-C5QjjsuM.js => appDialogsManager-CU2tx6sj.js} (63%) create mode 100644 public/appDialogsManager-CU2tx6sj.js.map rename public/{avatar-DBIqplSQ.js => avatar-CgCgq19o.js} (98%) rename public/{avatar-DBIqplSQ.js.map => avatar-CgCgq19o.js.map} (99%) rename public/{button-DNOYFSTy.js => button-3f1j2I1C.js} (98%) rename public/{button-DNOYFSTy.js.map => button-3f1j2I1C.js.map} (99%) rename public/{codeInputField-DxzYbP49.js => codeInputField-CNuG4jhl.js} (95%) rename public/{codeInputField-DxzYbP49.js.map => codeInputField-CNuG4jhl.js.map} (99%) rename public/{countryInputField-BcftBLc-.js => countryInputField-CRALI02l.js} (95%) rename public/{countryInputField-BcftBLc-.js.map => countryInputField-CRALI02l.js.map} (99%) rename public/{htmlToSpan-bTFVYoGn.js => htmlToSpan-CebCyFv7.js} (89%) rename public/{htmlToSpan-bTFVYoGn.js.map => htmlToSpan-CebCyFv7.js.map} (99%) create mode 100644 public/index-BWSv4yyN.js create mode 100644 public/index-BWSv4yyN.js.map delete mode 100644 public/index-e-jlGVAF.js delete mode 100644 public/index-e-jlGVAF.js.map rename public/{loginPage-DczjgmIm.js => loginPage-BCZQXimI.js} (86%) rename public/{loginPage-DczjgmIm.js.map => loginPage-BCZQXimI.js.map} (97%) delete mode 100644 public/mtproto.worker-ByDWDGLw.js.map rename public/{mtproto.worker-ByDWDGLw.js => mtproto.worker-P52RgNUJ.js} (69%) create mode 100644 public/mtproto.worker-P52RgNUJ.js.map rename public/{page-BMz-rky6.js => page-uJBByU88.js} (98%) rename public/{page-BMz-rky6.js.map => page-uJBByU88.js.map} (99%) rename public/{pageAuthCode-CtKP0tAV.js => pageAuthCode-DpKCfu5j.js} (68%) rename public/{pageAuthCode-CtKP0tAV.js.map => pageAuthCode-DpKCfu5j.js.map} (99%) rename public/{pageIm-BMBxnxPr.js => pageIm-BRYuy2RC.js} (52%) rename public/{pageIm-BMBxnxPr.js.map => pageIm-BRYuy2RC.js.map} (99%) rename public/{pagePassword-DB-3f9E_.js => pagePassword-DLa5C580.js} (70%) rename public/{pagePassword-DB-3f9E_.js.map => pagePassword-DLa5C580.js.map} (99%) create mode 100644 public/pageSignImport-B8wDO6Zx.js rename public/{pageSignImport-aG1X3ySG.js.map => pageSignImport-B8wDO6Zx.js.map} (99%) delete mode 100644 public/pageSignImport-aG1X3ySG.js rename public/{pageSignIn-_al3L2XE.js => pageSignIn-DlOYqfSO.js} (75%) rename public/{pageSignIn-_al3L2XE.js.map => pageSignIn-DlOYqfSO.js.map} (99%) rename public/{pageSignQR-C3lXUpHx.js => pageSignQR-kLt9tsWo.js} (84%) rename public/{pageSignQR-C3lXUpHx.js.map => pageSignQR-kLt9tsWo.js.map} (99%) rename public/{pageSignUp-BQX8EEbq.js => pageSignUp-CM0PdIyd.js} (76%) rename public/{pageSignUp-BQX8EEbq.js.map => pageSignUp-CM0PdIyd.js.map} (99%) rename public/{putPreloader-CByTF1BW.js => putPreloader-D4mKDX79.js} (83%) rename public/{putPreloader-CByTF1BW.js.map => putPreloader-D4mKDX79.js.map} (97%) rename public/{scrollable-BxUBKXlA.js => scrollable-aRSV2NLC.js} (98%) rename public/{scrollable-BxUBKXlA.js.map => scrollable-aRSV2NLC.js.map} (99%) rename public/{wrapEmojiText-DsWC8Ajl.js => wrapEmojiText-C-QYHn8O.js} (99%) rename public/{wrapEmojiText-DsWC8Ajl.js.map => wrapEmojiText-C-QYHn8O.js.map} (99%) diff --git a/.env b/.env index 44d2b5d9e..2b835fd90 100644 --- a/.env +++ b/.env @@ -1,8 +1,8 @@ VITE_API_ID=1025907 VITE_API_HASH=452b0359b988148995f22ff0f4229750 VITE_VERSION=2.1.0 -VITE_VERSION_FULL=2.1.0 (525) -VITE_BUILD=525 +VITE_VERSION_FULL=2.1.0 (526) +VITE_BUILD=526 VITE_MTPROTO_WORKER=1 VITE_MTPROTO_SW= VITE_MTPROTO_HTTP= diff --git a/public/appDialogsManager-C5QjjsuM.js.map b/public/appDialogsManager-C5QjjsuM.js.map deleted file mode 100644 index e62b1c7af..000000000 --- a/public/appDialogsManager-C5QjjsuM.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"mappings":"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,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,KAAM,IAAK,IAAK,IAAK,KAAM,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,KAAM,IAAK,KAAM,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,IAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,IAAK,EAAK,IAAK,IAAK,IAAK,EAAK,KAAM,EAAK,MAAO,EAAK,MAAO,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,MAAO,EAAK,IAAK,EAAK,IAAK,EAAK,GAAI,EAAK,KAAM,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,MAAO,EAAK,IAAK,EAAK,IAAK,EAAK,GAAI,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,KAAM,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,GAAI,EAAK,IAAK,EAAK,KAAM,EAAK,KAAM,EAAK,KAAM,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,IAAK,EAAK,GAAI,EAAK,IAAK,EAAK,IAAI,ECCl0RC,GAAa,4CACpBC,GAAS,YAETC,GAA6B,CACjC,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,EAAK,IACL,IAAK,GACP,EAEO,SAASC,GAAqB1yF,EAAc,CACjD,OAAOA,EAAK,QAAQuyF,GAAY,EAAE,EAAE,QAAQC,GAAQ,EAAE,CACxD,CAEO,SAASG,GAAY3yF,EAAc,CACxC,OAAOA,EAAK,YAAY,EAAE,QAAQ,WAAa4yF,GAC1BH,GAAIG,CAAE,GACJA,CACtB,CACH,CAEO,SAASC,GAAe7yF,EAAc,CAC3C,OAAOA,EAAK,QAAQ,gBAAkB4yF,GACjBN,GAAYM,CAAE,GACZA,CACtB,CACH,CAiBO,SAASE,GAAkB9yF,EAAO,GAAI9G,EAAoC,GAAI,CACnF,MAAM65F,EAAS75F,EAAQ,YAAc8G,EAAK,OAAO,CAAC,IAAM,IAClDwJ,EAAexJ,EACrB,OAAG9G,EAAQ,gBAAe8G,EAAO0yF,GAAqB1yF,CAAI,GACvD9G,EAAQ,WAAU8G,EAAO6yF,GAAe7yF,CAAI,GAC5C9G,EAAQ,aAAY8G,EAAOA,EAAK,eAChC+yF,IAAQ/yF,EAAO,IAAMA,GACrB9G,EAAQ,WAAkB8G,GAAA,IAAS2yF,GAAYnpF,CAAY,GACvDxJ,CACT,CCvDA5G,EAAU,iBAAiB,uBAAyBgJ,GAAU,CAC3C,MAAM,KAAK,SAAS,iBAAiB,0BAA0BA,CAAK,IAAI,CAAC,EACjF,QAASuL,GAAY,CACzBA,EAAQ,cAAc,6BAA6B,GACpD8hC,GAAmB9hC,CAAO,CAC5B,CACD,CACH,CAAC,EAE6B,eAAAqlF,GAAa,CAAC,QAAAvwF,EAAS,SAAAqwD,EAAU,WAAAmgC,EAAY,aAAAC,EAAc,WAAAC,EAAY,cAAAl8D,EAAe,aAAA57B,EAAc,iBAAA6d,EAAkB,cAAAhX,EAAe,SAAAkxF,EAAU,SAAA75F,EAAWH,EAAU,SAAU,aAAA2d,EAAc,SAAAw3C,EAAU,QAAAN,EAAS,mBAAAolC,EAAoB,MAAAr6E,EAAO,kBAAAQ,GAkB/O,CACRy5E,MAAA,KACFG,MAAA,IACA7kC,MAAA,IACb,MAAM10C,EAAiBX,IAAqB,EAEtC9d,EAAQqH,EAAQ,MAA4C,UAAcA,EAAQ,MAA2C,QAA4B,SAE5J,GADmB+W,MAAA/W,GAAS,oBAAoB,CAAC,GACjDrH,EAAI,OAAS,SAAWA,EAAI,OAAS,SAAWA,EAAI,OAAS,QAAS,CACjE,MAAAk4F,EAAe,IAAIx/B,GACzB,OAAAw/B,EAAa,SAAWxgC,EACxBwgC,EAAa,QAAU7wF,EACvB6wF,EAAa,eAAiBz5E,EAC9By5E,EAAa,cAAgBpxF,EAC7BoxF,EAAa,aAAej4F,EAC5Bi4F,EAAa,kBAAoB95E,EAC9B65E,GAAsBj4F,EAAI,OAAS,UAASk4F,EAAa,mBAAqB,GAChFA,EAAqB,QAAUrlC,EAE7BilC,IAAcI,EAAa,aAAeJ,GAC1Cj8D,IAAeq8D,EAAa,cAAgBr8D,GAC5Ck8D,IAAYG,EAAa,WAAaH,GAE5BG,EAAA,QAAQ,WAAa,GAAKL,EAC1BK,EAAA,QAAQ,SAAW,GAAK/kC,EACrC+kC,EAAa,QAAQ,SAAWF,EAC7Bp6E,GAAoBs6E,EAAA,UAAU,IAAI,QAAQ,EAC7C,MAAMA,EAAa,SACZA,CACT,CAEA,MAAMC,EAAcn4F,EAAI,UAAYA,EAAI,UAAU,MAAM,GAAG,EAAI,GAC/D,IAAIo4F,EAAM,GACVA,EAAMD,EAAY,OAAS,GAAK,MAAM,QAAQA,CAAW,EACvDb,GAAqBa,EAAY,MAAM,MAAM,IAAK,CAAC,EAAE,CAAC,EAAE,aAAa,EACrE,OAEI,MAAAE,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,UAAU,IAAI,WAAY,OAAOD,CAAG,EAAE,EACtCC,EAAA,QAAQ,MAAQ,GAAKr4F,EAAI,GAC/Bq4F,EAAe,IAAMr4F,EAIhB,MAAAs4F,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAc,EAC/B,IAAAC,EAEE,MAAAC,EAAa,CAAC,CAAC78E,EAKrBA,EAHS68E,EAAa78E,EAAepd,GAAgB,gBAAgByB,CAAG,EAIxE,IAAIy4F,EAAW,GACX,GAAAz4F,EAAI,QAAQ,QAAWqH,EAAQ,OAAO,aAAesU,EAAa,KAAO3b,EAAI,OAAS,QAAkD,CACnIq4F,EAAA,UAAU,IAAI,qBAAqB,EAC/BI,EAAA,GAEX,MAAMt/B,EAAoE,GAE1E,GAAG9xD,EAAQ,OAAO,aAAe,CAAC,QAAS,OAAO,EAAE,SAASrH,EAAI,IAAI,GAAK2b,EAAa,IAC9E28E,EAAA,UAAY,aAAa38E,EAAa,GAAG,KAC3Cw9C,EAAA,KAAKm/B,EAAO,iBAAqC,MACjD,CACQ,YAAY,IAAI,EACvB,MAAAnxF,GAAU,MAAMuW,GAAU,CAC9B,MAAO1d,EACP,QAAS,KACT,UAAWs4F,EACX,SAAU,GACV,UAAW,GACX,aAAAr4F,EACA,iBAAkB,GAClB,cAAA6G,EACA,KAAMoW,GAAgBld,EAAK,GAAI,GAAI,EAAI,EACvC,SAAA7B,CAAA,CACD,EAEDm6F,EAAO,MAAM,MAAQA,EAAO,MAAM,OAAS,GACxCnxF,GAAQ,OAAO,OAAYgyD,EAAA,KAAKhyD,GAAQ,OAAO,KAAK,EACpDA,GAAQ,OAAO,MAAWgyD,EAAA,KAAKhyD,GAAQ,OAAO,IAAI,CACvD,CAEAgyD,EAAK,QAASnP,IAAQA,GAAI,UAAU,IAAI,gBAAgB,CAAC,OAE7CuuC,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,UAAU,IAAI,mBAAmB,EAC3CA,EAAU,UAAYH,EACtBE,EAAO,OAAOC,CAAS,EAIzB,MAAMG,EAAW14F,EAAI,UAAY2E,GAAc3E,EAAI,SAAS,EAAI,eAC1C,SAAS,cAAc,KAAK,EACpC,UAAU,IAAI,sBAAsB,EAC5C,MAAA24F,EAAiB,SAAS,cAAc,MAAM,EAC9CC,EAAUj/D,GAAY35B,EAAI,IAAI,EAC9B64F,EAAc,MAEdC,EAAgE,CAACF,CAAO,EAU3E,GARAlhC,GACDohC,EAAiB,KAAKjhC,GAAmBxwD,EAAQ,IAAI,CAAC,EAGrD0wF,GACDe,EAAiB,KAAK,MAAMlkC,GAAiBvtD,CAAO,CAAC,EAGpD,CAACqwD,GAAY,CAACqgC,EAAY,CACrB,MAAA9kE,EAAI,SAAS,cAAc,MAAM,EACjC8lE,GAAap/D,GAAY35B,EAAI,IAAI,EACrCizB,EAAA,OAAO4lE,EAAaE,EAAU,EAChC9lE,EAAE,MAAM,WAAa,SACrB6lE,EAAiB,KAAK7lE,CAAC,CACzB,CAEAolE,EAAO,UAAY;AAAA,IAChB18E,EAAa,YAAc,CAACyC,GAAsB,CAAC/W,EAAQ,KAAO,CAACoxF,EAAW,GAAK,uCAAuC;AAAA;AAAA;AAAA,IAKvH,MAAAO,EAAUX,EAAO,cAAc,gBAAgB,EAC/CtgC,EAAmB,IAAIhE,GACZgE,EAAA,QAAQ,WAAa,GAAK8/B,EAC1B9/B,EAAA,QAAQ,SAAW,GAAK5E,EACzC4E,EAAiB,QAAQ,SAAWigC,EACnCjgC,EAAyB,QAAUlF,EACpCkF,EAAiB,YAAc2gC,EAI3BrxF,EAAQ,KACHgxF,EAAA,UAAU,IAAI,YAAY,EAGnCW,EAAQ,OAAOjhC,CAAgB,EAE5BggC,GACOiB,EAAA,OAAOjkC,GAAa1tD,CAAO,CAAC,EAGhC,MAAA4xF,EAAUZ,EAAO,cAAc,gBAAgB,EAMrD,GALAM,EAAe,OAAO,GAAG/1D,GAAiBk2D,EAAkB,KAAK,CAAC,EAClEG,EAAQ,OAAON,CAAc,EAE7BN,EAAO,QAAQC,CAAM,EAElB,CAACl6E,GAAqB/W,EAAQ,OAAO,aAAe,CAACA,EAAQ,IACvD,OAAAgxF,EAGH,MAAAa,EAAiBl5F,EAAI,MAAQm5F,GAEnC,IAAIrgC,EAA0Bj6C,EAAkC,KAChE,MAAMK,EAAS,IAAM,CAGnB,GAFOm5E,EAAA,UAAU,OAAO,aAAa,EAEdr4F,EAAI,KAAOm5F,IAAsB,CAAC/6E,EAAoB,CAC3ES,EAAU,UAAU,EACpBA,EAAU,OAAOi6C,CAAW,EAClBj6C,EAAA,UAAU,UAAU,IAAI,QAAQ,EAC1CA,EAAU,oBAAoBS,CAAI,EAClC,MACF,CAMA,GAJG45E,GACMb,EAAA,UAAU,IAAI,YAAY,EAGhCv/B,EAAa,CACd,GAAGA,IAAgBw/B,EAAQ,CACzB,MAAMc,EAAetgC,EACrB,WAAW,IAAM,CACfsgC,EAAa,OAAO,GACnB,GAAG,CACR,CAEctgC,EAAA,IAChB,CAEGj6C,IACWA,EAAA,KACd,EAGIw6E,EAAmB3vF,GAAqC,CACrD2uF,EAAA,UAAU,IAAI,aAAa,EAE5B,MAAAiB,GAAgB,SAAS,cAAc,MAAM,EAC7CC,GAAkB5/D,GAAY35B,EAAI,IAAI,EAC5Cs5F,GAAc,MAAM,SAAW,WAC/BA,GAAc,MAAM,KAAO,IAC3B5vF,EAAQ,KAAKwV,EAAQM,EAAI,EAAE,QAAQ,IAAM,CAEvCm5E,EAAe,MAAM,WAAa,GAClCW,GAAc,OAAO,EAEtB,EAID,MAAME,GAAU5/D,IAAkBD,GAAYC,EAAK,EAC/C,IAAA14B,GAAIs4F,GAAO,CAAC,EAChBb,EAAe,MAAM,WAAa,SAEpBW,GAAA,OAAOp4F,GAAG23F,EAAaU,EAAe,EACrCZ,EAAA,cAAc,OAAOW,EAAa,EACzC5vF,EAAA,kBAAmB0vB,IAAuB,CAC1C,MAAAqgE,EAAKD,GAAOpgE,GAAS,IAAI,EAC/Bl4B,GAAE,YAAYu4F,CAAE,EACZv4F,GAAAu4F,CAAA,CACL,GAIGn6E,EAAQhV,GAAc,CACpB,MAAAqzC,GAAO,CAACrzC,GAAKA,EAAE,UACftK,GAAOq4F,EAAe,IAExB,IAAA54E,GACE,MAAAi6E,GAAUv3D,GAAa,KAAK,QAAUA,GAAa,KAAK,QAAQ,cAAc,QAAU,OAC1Fwb,IAEM39C,GAAI,KAYZ25F,GAA2B,IAAI35F,GAAI,SAAS,GAC5CA,GAAI,QAAQ,QACZk5F,EAEAz5E,GAAWX,GAAmB,iBAAiB,CAAC,MAAO9e,GAAK,QAAA05F,GAAQ,GAEpEj6E,GAAWX,GAAmB,eAAe,CAAC,MAAO9e,GAAK,QAAA05F,GAAQ,EAE/D15F,GAAI,YAAc,iBACDqqC,GAAA,CAChB,mBAAoB,0BACpB,OAAQ,CACN,QAAS,KACT,SAAU,EACZ,EACD,IA5BH5qB,GAAWX,GAAmB,eAAe,CAAC,MAAO9e,GAAK,QAAA05F,EAAA,EAAU,EAAI,EAgC1Ej6E,GAAS,MAAM,IAAM,CACZ44E,EAAA,UAAU,OAAO,aAAa,EACtC,EAEEv/B,IACSj6C,EAAA,OAAOi6C,EAAa,GAAMr5C,EAAQ,EAC5C45E,EAAgB55E,EAAQ,EAC1B,EAGI,CAAC,SAAUm6E,CAAA,EAAoBC,GAAwB,CAAC,MAAO75F,EAAK,WAAY,IAAI,EAC1F,GAAG,MAAM7B,EAAS,eAAe,cAAcy7F,CAAgB,EAAG,CAClD9gC,EAAAu/B,EAAO,cAAc,oBAAoB,GAAKC,EAC5D,MAAM5uF,EAAUoV,GAAmB,eAAe,CAAC,MAAO9e,CAAA,EAAM,EAAI,EAEpE6e,EAAY,IAAInE,GACNmE,EAAA,OAAOi6C,EAAa,GAAOpvD,CAAO,EAC5CmV,EAAU,oBAAoBS,CAAI,EAClC+5E,EAAgB3vF,CAAO,CACf,UAACiS,EAAa,YAAcyC,EAMpC,GALc06C,EAAAu/B,EAAO,cAAc,oBAAoB,GAAKC,EAC5Dz5E,EAAY,IAAInE,GAAqB,CACnC,SAAU,CAAC,CAAC0D,CAAA,CACb,EAEE,CAACA,EACFS,EAAU,UAAU,EACpBA,EAAU,UAAU,EACpBA,EAAU,OAAOi6C,CAAW,EAC5Bj6C,EAAU,oBAAoBS,CAAI,EAE/BxB,IAAqB,QAAaA,GAAoB9d,EAAI,MAC3Dq0C,GAAmBx1B,EAAU,SAAS,MAEnC,CACC,MAAAi7E,EAAgBh7E,GAAmB,UAAUV,CAAiB,EACpES,EAAU,cAAci7E,CAAa,EACrCj7E,EAAU,OAAOi6C,CAAW,EAC5BugC,EAAgBS,CAAa,CAC/B,CAGe,OAAAl/E,EAAAy9E,EAAS/tF,GAAM,CAC3BgZ,EAAgBhZ,EAAE,OAAQ,MAAM,IAIhCuU,EACDA,EAAU,QAAQvU,CAAC,EAEnBgV,EAAKhV,CAAC,EACR,CACD,EAEM+tF,CACT,CCxXA,SAAwB0B,GAA4B1yF,EAA0B,CAC5E,GAAG,CAACA,EAAgB,OACd,MAAArH,EAAOqH,EAAQ,OAA6C,SAE3D,MADY,CAAC,QAAS,QAAS,OAAO,EAAkC,SAASrH,GAAK,IAAI,GAAKA,EAAI,UAAa,MAEzH,CCWA,eAA8Bg6F,GAAqB,CACjD,wBAAAC,EACA,QAAA5yF,EACA,OAAA67C,EACA,WAAA0+B,EACA,KAAAz8C,EACA,aAAAllC,EACA,iBAAA6d,EACA,cAAAhX,EACA,cAAA+0B,EACA,UAAAq+D,EACA,SAAAlC,EACA,SAAA75F,EACA,WAAA05F,EACA,SAAA1kC,EACA,iBAAAgnC,EACA,gBAAArJ,EACA,mBAAAmH,EACA,mBAAAmC,EACA,aAAAC,EACA,MAAAz8E,CACF,EAsBG,CACG,IAAA08E,EACE,MAAC,OAAAv8F,CAAU,EAAAsJ,EACX4I,EAAOgqF,EAA0B,MAAM90D,EAAK,aAAa99B,EAAQ,OAAQA,EAAQ,GAAG,EAAI,CAACA,EAAQ,GAAG,EAKpG+C,EAAW6F,EAAK,IAAI,MAAMvE,EAAKrK,EAAKsG,IAAQ,CAChD,MAAMN,EAAU89B,EAAK,iBAAiBpnC,EAAQ2N,CAAG,EAC3C6c,EAAM,MAAMqvE,GAAa,CAC7B,QAAAvwF,EACA,aAAApH,EACA,iBAAA6d,EACA,cAAAhX,EACA,cAAA+0B,EACA,SAAAm8D,EACA,SAAA75F,EACA,WAAA05F,EACA,SAAA1kC,EACA,mBAAA8kC,EACA,MAAAr6E,CAAA,CACD,EAEK/d,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAClCA,EAAA,QAAQ,IAAM,GAAK6L,EACnB7L,EAAA,QAAQ,OAAS,GAAKwH,EAAQ,OAElC,MAAAq1D,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,kBAAkB,EAExC,MAAM69B,EAAUl5F,IAAQ,EAClBwhC,EAASxhC,IAASsG,EAAI,OAAS,EAElC4yF,GAAmB16F,EAAA,UAAU,IAAI,UAAU,EAC3CgjC,GAAkBhjC,EAAA,UAAU,IAAI,SAAS,EAGxC+hF,MAMJ,IALGv6E,EAAQ,SAAYw7B,GAAUw3D,KAC/BzY,EAAa,SAAS,cAAc,KAAK,EACzCA,EAAW,UAAU,IAAI,kBAAkB,GAG1Cv6E,EAAQ,QAAS,CAClB,IAAI9E,EAAW43F,EACX53F,IACC63F,EACD73F,EAAWwM,GAAoB,CAC7B,GAAGqrF,EACH,QAAA/yF,EACA,gBAAiB,CACf,GAAG+yF,EAAmB,gBACtB,kBAAmBL,GAA4B1yF,CAAO,CACxD,EACD,EAEU9E,EAAA0E,GAAaI,EAAQ,QAAS,CACvC,GAAGypF,EACH,SAAUzpF,EAAQ,cAClB,kBAAmB0yF,GAA4B1yF,CAAO,EACvD,GAILoL,GAAamvE,EAAYr/E,CAAQ,CACnC,CAMG,GAJA83F,GAAgBzY,GAAc/+C,GAC/B++C,EAAW,OAAOyY,CAAY,EAG7BpqF,EAAK,OAAS,EAAG,CACZ,MAAAs2B,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAC5C1mC,EAAU,OAAO0mC,CAAS,EAEhB1mC,EAAA,UAAU,IAAI,cAAc,EAEnCwB,IAAQ,IACOi5F,EAAA59B,EAEpB,CAEQ,OAAAA,EAAA,OAAO,GAAG,CAACn0C,EAAKq5D,CAAU,EAAE,OAAO,OAAO,CAAC,EACnD/hF,EAAU,OAAO68D,CAAO,EACjB78D,CAAA,CACR,EAEK0lE,EAAa,MAAM,QAAQ,IAAIn7D,CAAQ,EAClC,OAAAw3E,EAAA,OAAO,GAAGrc,CAAU,EAE5Bt1D,EAAK,OAAS,GACRizC,EAAA,UAAU,IAAI,wBAAyB,YAAY,EAGrDo3C,CACT,CCjJA,SAAwBE,GAAS,CAC/B,QAAAnzF,EACA,SAAAlJ,EAAWH,EAAU,SACrB,WAAA0B,EACA,mBAAA06F,EACA,gBAAAtJ,CACF,EAMG,CACK,MAAAx1E,EAAO,IAAI6oE,GACjB,OAAA7oE,EAAK,QAAUjU,EACfiU,EAAK,SAAWnd,EAChBmd,EAAK,mBAAqB8+E,EAC1B9+E,EAAK,gBAAkBw1E,EACvBx1E,EAAK,aAAa,UAAW,GAAKjU,EAAQ,MAAM,EAChDiU,EAAK,aAAa,UAAW,GAAMjU,EAAQ,MAAwC,KAAK,EAAE,EAC1FiU,EAAK,aAAa,aAAc,GAAKjU,EAAQ,GAAG,EAC3CiU,EAAA,iBAAmB5b,EAAW,SACnC4b,EAAK,OAAO,EACLA,CACT,CCrCA,MACEm/E,GAAgB,YAEhBC,GAAoB,IAAI,OAAO,IAAID,GAAS,GAAG,EAEzB,SAAAE,GAAMr3F,EAAWs3F,EAAmB,CAC1D,OAAiBF,GAAgB,KAAKp3F,CAAC,CACzC,CAEO,SAASu3F,GAAYv3F,EAAW,CACrC,OAAOo3F,GAAgB,KAAKp3F,GAAG,MAAM,EAAE,CAAC,CAC1C,CCAA,eAA8Bw3F,GAC5Bh9F,EAIA,CACA,KAAM,CAAC,OAAAC,EAAQ,SAAAK,EAAU,UAAA28F,CAAA,EAAaj9F,EAElC,IAAAshB,EAA4B,QAAQ,UACpC7M,EACJ,GAAGzU,EAAQ,OAAQ,CACPyU,EAAA,SAAS,cAAc,MAAM,EACvCA,EAAQ,QAAQ,UAAY,GAAGzU,EAAQ,MAAM,IAAIA,EAAQ,SAAS,GAC1DyU,EAAA,UAAU,IAAI,YAAY,EAElC,MAAMkP,EAASkM,GAAU,CACvB,OAAQ7vB,EAAQ,OAChB,SAAU,GACV,WAAYA,EAAQ,YAAY,WAChC,KAAM,GACP,EAEM2jB,EAAA,KAAK,UAAU,IAAI,0BAA0B,EAEpDlP,EAAQ,OAAOkP,EAAO,KAAMziB,GAAK,OAAQ,yBAAyB,CAAC,EAEnEogB,EAAcqC,EAAO,kBAErB3jB,EAAQ,UAAY,QAEpByU,EAAUyoF,GAAwB,UAAYj9F,EAAO,YAAcK,EAAW,IAAM68F,GAAmB78F,CAAQ,EAAI,KAAO28F,EAAY,IAAME,GAAmBF,CAAS,EAAI,GAAG,EAGzK,OAAAxoF,EAAA,UAAU,IAAI,aAAc,mBAAmB,EAQvDA,EAAQ,OAAO,MAAM7B,GAAc5S,CAAO,CAAC,EAGpC,CACL,OAAQ,GACR,QAAAyU,EACA,YAAA6M,CAAA,CAEJ,CCzCA,MAAMorB,GAAa,wBACnB,MAAqB0wD,WAAgCrtE,EAAa,CAQhE,YAAY/vB,EAMR,CACF,MAAM,iBAAmB0sC,GAAY,CACnC,SAAU,GACV,gBAAiB,GACjB,KAAM,GACN,OAAQ,GACR,MAAO,GACP,YAAa,GACd,EAEDz1B,GAAW,KAAMjX,CAAO,EAExB,KAAK,UAAU,CACjB,CAEA,MAAa,WAAY,CACjB,MAAAoF,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,4BAA4B,EAEtC,MAAAi4F,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qBAAqB,EAEvC,KAAM,CAAC,eAAAC,EAAgB,SAAA10C,EAAU,SAAA20C,CAAA,EAAY,KACvCC,EAAYF,GAAgB,IAAM,kCAClCG,EAAYD,GAAa,CAAC,CAACF,EAAe,cAAc,OACxDx0E,EAAS,KAAK,SAAL,KAAK,OAAW00E,EAAY,MAAM,KAAK,SAAS,eAAe,UAAUF,EAAe,SAAS,EAAyC,QAEpJ,WAAM,OAAO94F,EAAKokD,EAAW,gCAAmC60C,EAAY,6BAA+B,yBAA0B,CAAC,EAEvI,IAAAC,EACD90C,IAED80C,GADc,MAAM,KAAK,SAAS,eAAe,4BAA4B,KAAK,OAAO,EAAE,GAC3D,IAAK99F,GAAS0G,GAAU1G,CAAI,CAAC,GAG/D,MAAM+9F,EAAW,IAAM,CACf,MAAA1zF,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,0BAA0B,EACvC,MAAAlJ,EAAO,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAI,+BAA+B,EAClDkJ,EAAK,OAAOlJ,CAAI,EAChBs8F,EAAI,OAAOpzF,CAAI,EACRlJ,CAAA,EAGT48F,EAAW,SAAOn5F,EAAK,gBAAgB,CAAC,EACxC,MAAMo5F,EAAaD,IACRC,EAAA,cAAc,UAAU,IAAI,QAAQ,EACpCA,EAAA,OACTh9F,GAAckoB,EAASA,EAAO,MAASw0E,EAAmE,KAAK,EAC/G,SAAS,cAAc,GAAG,GAE5BK,EAAW,SAAOn5F,EAAK,gBAAgB,CAAC,EAElC,MAAAq5F,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAgB,oBAAoB,EAEvDz4F,EAAA,OAAOi4F,EAAKQ,CAAM,EAEd,MAAA1sE,EAAc,SAAS,cAAc,KAAK,EAChDA,EAAY,UAAU,IAAIub,GAAa,eAAgB,UAAU,EAC7D,IAAAoxD,EACDl1C,EACD5nD,GAAMmwB,EAAa,sCAAuC,CAACvwB,GAAckoB,EAAO,KAAK,CAAC,CAAC,EAC9E20E,EAGYK,EAAA,IAAIp9F,GAAK,YAFxBM,GAAAmwB,EAAaqsE,EAAY,uCAAyC,+BAA+B,EAKnG,MAAAO,EAAc,IAAIr9F,GAAK,YAEvBs9F,EAAqBv+F,GAAmB,CACzCw+F,GAAkBR,IACnBh+F,EAAS,KAAK,IAAI,EAAGA,EAASw+F,EAAe,MAAM,GAGrDF,EAAY,OAAO,CACjB,IAAKn1C,EAAW,gCAAmC60C,EAAY,6BAAgCD,EAAY,iCAAmC,0BAC9I,KAAM,CAACh5F,EAAK,QAAS,CAAC/E,CAAM,CAAC,CAAC,EAC/B,EAEDy+F,GAAe,OAAO,CACpB,KAAMC,EAAiB1+F,IAAWsV,EAAQ,QAAU,cAAgB,YACrE,EAED+oF,GAAoB,OAAO,CACzB,IAAK,mCACL,KAAM,CAACt5F,EAAK,QAAS,CAAC/E,CAAM,CAAC,EAAGmB,GAAckoB,EAAO,KAAK,CAAC,EAC5D,EAEEo1E,IACEz+F,IAAsB2+F,EAAA,QAAQ,MAAQ,GAAK3+F,GAC9C2+F,EAAc,UAAU,OAAO,YAAa,CAAC,CAAC3+F,CAAM,GAGnDmpD,GACDy1C,EAAc,OAAO,CACnB,IAAK5+F,EAAS,2BAA6B,gCAC5C,EAGCmpD,GACFp4B,GAAiB,CAAC,KAAK,UAAU,EAAG,CAAC/wB,CAAM,CAC7C,EAGE,IAAA0+F,EACC,cAAW,IAAI3oD,GAAe,CACjC,WAAY,KAAK,iBAAiB,IAAI,EACtC,SAAU,KAAK,KACf,SAAUwoD,EACV,cAAe,IAAM,CACnB,KAAK,KAAK,EACV,KAAK,SAAS,kBAChB,EACA,YAAa,GACb,SAAU,GACV,uBAAwBD,EAAY,QACpC,WAAY,aACZ,SAAU,KAAK,SACf,SAAU,CAAC,EACX,sBAAuB,MAAM99F,GAAW,CACnC,GAAAg+F,GAAgB,SAASh+F,CAAM,EAAG,CACnC,MAAMqV,EAAc,MAAM,KAAK,SAAS,gBAAgB,YAAYrV,CAAM,EACnE,OAAAuE,EAAK8Q,EAAc,mCAAqC,+BAA+B,CAChG,CACF,EACA,oBAAqB,CAACrV,EAAQ2+B,IAAkB,CAC3Cq/D,GAAgB,SAASh+F,CAAM,GAChC2+B,EAAc,IAAI,YAAY,UAAU,IAAI,SAAS,CAEzD,EACD,EAEG,IAAAs/D,GACD,CAACV,GAAaC,KACCS,EAAA,IAAIx9F,GAAK,YACXw9F,EAAA,QAAQ,UAAU,IAAI,iCAAiC,EACrE,KAAK,SAAS,QAAQ,MAAM,OAAOA,EAAc,OAAO,EAEvCphF,EAAAohF,EAAc,QAAS,IAAM,CACzCC,EACI,cAAS,YAAYppF,CAAO,EAE5B,cAAS,SAASA,CAAO,CAE/B,GAAC,eAAgB,KAAK,cAAe,IAGtC,IAAAA,EACDuoF,EAEDvoF,GADc0oF,EAAYH,EAAe,cAAiBE,EAAYF,EAAe,cAAgBA,EAAe,OACpG,IAAK19F,GAAS0G,GAAU1G,CAAI,CAAC,EAE7CmV,EAAU+T,EAAO,eAGf,IAAAm1E,EAKJ,GAJGT,IACDS,EAAiBX,EAAe,cAAc,IAAK19F,GAAS0G,GAAU1G,CAAI,CAAC,GAG1Eq+F,EAAgB,CACjB,MAAMK,EAAU,KAAK,SAAS,OAAO,KAAK,KAAK,QAAQ,EAClD,cAAS,OAAS,IAAIxsF,IAAS,CAClC,MAAM7R,EAAS6R,EAAK,CAAC,EAAE,SAAS,EAC7B,GAAAmsF,EAAe,SAASh+F,CAAM,EAAG,CAClC,MAAM8B,EAAY,KAAK,SAAS,mBAAmB9B,CAAM,EACzD,OAAA8hD,GAAMhgD,CAAS,EACR,EACT,CAEO,OAAAu8F,EAAQ,GAAGxsF,CAAI,EAE1B,CAEK,gBAAa,KAAK,SAAS,WAChC,KAAK,0BAA0B,EAE1B,gBAAW,QAAQ1M,EAAG+rB,CAAW,EAEtC,KAAK,WAAW,UAAU,IAAI,GAAGub,EAAU,SAAS,EAC9C,MAAA2xD,EAAgB,IAAI39F,GAAK,YAAY,CACzC,IAAKkoD,EAAW,2BAA8B60C,EAAY,yBAA4BD,EAAY,KAAO,0BAC1G,EACKY,EAAgBC,EAAc,QACpCD,EAAc,UAAU,IAAI,GAAG1xD,EAAU,cAAc,EAClD,gBAAW,OAAO0xD,CAAa,EAC/B,YAAO,OAAO,KAAK,UAAU,EAEjBthF,EAAA,KAAK,WAAY,IAAM,CACnC,GAAA0gF,GAAa,CAACC,EAAW,CAC1B,KAAK,KAAK,EACV,MACF,CAEI,IAAA7xF,EAEJ,MAAMguB,EAASpJ,GAAiB,CAAC,KAAK,UAAU,EAAG,EAAI,EAEjDzb,EAAU,CAAC,GAAG,KAAK,SAAS,QAAQ,EACvCwoF,EACD3xF,EAAU,KAAK,SAAS,eAAe,oBAAoB,KAAK,OAAO,GAAImJ,CAAO,EAC1EuoF,EACE1xF,EAAA,KAAK,SAAS,eAAe,mBACrC,KAAK,KACLmJ,CAAA,EACA,MAAOowB,GAAoB,CACxB,GAAAA,EAAM,OAAS,0BAChBo5D,GAAe,SAAS,EACxB,KAAK,KAAK,MAEJ,OAAAp5D,CACR,CACD,EAEDv5B,EAAU,KAAK,SAAS,eAAe,cAAc,KAAK,OAAO,GAAImJ,CAAO,EAG9EnJ,EAAQ,KAAK,IAAM,CACjB,KAAK,KAAK,CACZ,EAAIu5B,GAAoB,CACf,MAAAvL,IACDuL,CAAA,CACP,CACA,GAAC,eAAgB,KAAK,cAAe,GAExC,MAAMq5D,EAAeP,EAAiBlpF,EAAQ,OAAOkpF,CAAc,EAAIlpF,EACjE0pF,EAAU71C,EAAW80C,EAA0Bc,EAChD,cAAS,WAAWC,CAAO,EAC3B,cAAS,kBAAkB71C,EAAWrX,GAAamsD,EAAwB,OAAOc,CAAY,CAAC,EAAIA,CAAY,EAEhHC,EAAQ,QACVT,EAAkB,CAAC,EAMhB,UAAK,MAAM,KAAK,MAAM,CAC7B,CACF,CC9PA,MAAMU,GAAkBC,GACnBA,EAAW,IAAM,iBACJA,EAAyC,KACzB,OAAO,UAAY,yBAA2B,uBAG3EA,EAAW,OAAO,eACZ,qBAGNA,EAAW,OAAO,UACZ,yBAGF,uBAGa,eAAAC,GACpBD,EACA/8F,EACA,CACM,MAAArB,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAc,YAAY,EAExC,MAAAoX,EAAQ,MAAMlV,GAAmB,CACrC,OAAQiE,GACR,eAAgB,GAChB,WAAY,GACZ,cAAe,GACf,KAAM,CACJ,EAAG,UACH,OAAQ,CACN,SAAUi4F,EAAW,OAAO,SAC5B,KAAMA,EAAW,OAAO,KACxB,KAAMA,EAAW,OAAO,IAC1B,EACA,KAAM,EACN,GAAI,EACJ,MAAO,OACP,MAAO,EACT,EACA,YAAa,CACX,WAAA/8F,CACF,EACD,EAEKi9F,EAAgBj+F,GAAc+9F,EAAW,KAAK,EACpD,GAAGhnF,EAAM,OAAQ,CACTpX,EAAA,UAAU,IAAI,YAAY,EAC1B,MAAAu+F,EAAa,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,kBAAkB,EAC3CA,EAAW,OAAOD,CAAa,EACzBt+F,EAAA,OAAOu+F,EAAY,GAAGnnF,CAAK,OAEjChD,GAAapU,EAAOs+F,CAAa,EAG5B,OAAAt+F,CACT,CAEsB,eAAAw+F,GAAqBJ,EAAmC/8F,EAAwBR,EAAc,CAClH,MAAM6kB,EAAa4J,GAAU,CAC3B,WAAAjuB,EACA,KAAAR,EACA,SAAU,GACV,aAAc,CAAC,CAACu9F,EAAW,sBAAwB,OACpD,EACE,OAAAA,EAAW,OAAO,IAAM,SACnB,MAAA34E,GAAkBC,EAAY04E,EAAW,KAAK,EACjDA,EAAW,sBACZ14E,EAAW,gBAAgB,EAAI,IAGjCA,EAAW,OAAO,CAChB,UAAW04E,EAAW,MACvB,EACD,MAAM14E,EAAW,mBAGZA,CACT,CAEA,MAAqB+4E,WAA4BlvE,EAAU,CACzD,YACUmvE,EACAN,EACR,CACA,MAAM,yBAA0B,CAC9B,SAAU,GACV,gBAAiB,GACjB,KAAM,GACN,QAAS3uE,GAAgB,CAAC,CACxB,QAAS0uE,GAAeC,CAAU,EAClC,SAAU,IAAM,CACdK,GAAoB,OAAOC,CAAI,CACjC,EACD,CAAC,EACF,YAAa,GACd,EAdO,UAAAA,EACA,gBAAAN,EAeR,KAAK,UAAU,CACjB,CAEA,OAAc,SAASl4F,EAAgB,CAC/B,MAAAxG,EAASwG,EAAO,SAAS,EAAI,EACtB49B,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,CACpC,CAEA,OAAc,OAAOg/F,EAAc,CACjC/+F,EAAU,SAAS,sBAAsB,iBAAiB++F,CAAI,EAC7D,KAAMx4F,GAAW,CAChB,KAAK,SAASA,CAAM,CACtB,EAAI0+B,GAAU,CACTA,EAAM,OAAS,uBACP1S,GAAA,CAAC,YAAa,oBAAoB,CAC7C,CACD,CACH,CAEA,aAAoB,KAAKwsE,EAAcN,EAAwB,CAC1DA,EAAW,IAAM,qBAElB,MAAMz+F,EAAU,SAAS,sBAAsB,gBAAgB++F,CAAI,EAC9D,cAASN,EAAW,KAAK,EAAE,GACxBA,EAAW,IAAM,iBACpB,cAASA,EAAW,KAAK,EAAE,EAEnB5uE,GAAA,YAAYivE,GAAqBC,EAAMN,CAAU,CAElE,CAEA,MAAc,WAAY,CACxB,KAAK,OAAO,SAcN,MAAC,WAAAA,CAAc,OAEf14E,EAAa,MAAM84E,GAAqBJ,EAAY,KAAK,iBAAiB,MAAO,GAAG,EACpFp+F,EAAQ,MAAMq+F,GAAoBD,EAAY,KAAK,iBAAiB,KAAK,EAG5EA,EAAW,MACZ,KAAK,YAAY,gBAAgB/9F,GAAc+9F,EAAW,KAAK,CAAC,GAEhE,KAAK,YAAY,SACjB,KAAK,YAAc,QAGf,MAAArpF,EAAcqpF,EAAW,OAAO,UAChCO,EAAc16F,EAAK8Q,EAAc,cAAgB,UAAW,CAACqtB,GAAuBg8D,EAAW,kBAAkB,CAAC,CAAC,EAKtH,GAJSO,EAAA,UAAU,IAAI,yBAAyB,EAEnD,KAAK,KAAK,OAAO,GAAG,CAACj5E,EAAW,KAAM1lB,EAAO2+F,EAAa,KAAK,WAAW,EAAE,OAAO,OAAO,CAAC,EAExFP,EAAW,OAAO,eAAgB,CAC7B,MAAAl7D,EAAU,SAAS,cAAc,KAAK,EACtCziC,GAAAyiC,EAASnuB,EAAc,kCAAoC,+BAA+B,EACxFmuB,EAAA,UAAU,IAAI,0BAA2B,iBAAiB,EAE7D,UAAK,OAAOA,CAAO,CAC1B,CAEA,KAAK,KAAK,CACZ,CACF,CCtLa,MAAA07D,OAA4D,IAAI,CAC3E,kBACA,gBACF,CAAC,EAED,SAAwBC,GAA0Ep/F,EAO/F,CACA,QAAgBA,EAAQ,SAAWA,EAAQ,SAAW,IAAM,IAAMA,EAAQ,IAAI,EAAI,CAACyU,EAA6BjI,IAAc,CAC5H,CAAAxM,EAAQ,eAAiB6c,GAAY,IAAI,EAE1C,IAAIwiF,EAAO5qF,EAAQ,KACnB,GAAG,CAAC4qF,EACF,OAGE,IAAAC,EACAC,EAEE,MAAAC,EAAI,IAAI,IAAIH,CAAI,EAChBv0F,EAAQ00F,EAAE,KAAK,MAAM,0BAA0B,EAClD10F,GAAS,CAAC20F,GAAc,IAAI30F,EAAM,CAAC,CAAC,IACnC00F,EAAA,SAAW10F,EAAM,CAAC,GAAK00F,EAAE,WAAa,IAAM,GAAKA,EAAE,UACrDH,EAAOG,EAAE,YAGPx/F,EAAQ,mBAAmCs/F,EAAA,IAAI,IAAID,CAAI,EAAE,SAAS,MAAM,GAAG,EAAE,MAAM,CAAC,GACpFr/F,EAAQ,cAAau/F,EAAYG,GAAeL,CAAI,GAElD,MAAAM,EAASlrF,EAAQ,OAAS9K,GAAQ8K,EAAQ,WAAW,EAAE,KAAOA,EAAQ,aAAa,MAAM,IAAM,KAC/FzS,EAAShC,EAAQ,SACrB,CAAC,eAAAs/F,EAAgB,UAAAC,CAAS,EAC1B9qF,EACAkrF,CAAA,EAGC,IAACnzF,GAAG,UACE,OAAAxK,CACT,CAEJ,CC7DwB,SAAA49F,GAAYvS,EAAqBjsF,EAAc8G,EAAe,CAC9E,MAAA2sB,EAAQ,SAAS,cAAcw4D,CAAG,EACxC,OAAAx4D,EAAM,UAAY,eAAezzB,CAAI,UAAU8G,CAAK,kBAC7C2sB,CACT,CCQA,MAAMgrE,GAAa,IAAM,CACjB,MAAAhtF,MAAW,KAEjB,OAAAA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EACjBA,CACT,EAEMitF,GAAa,IAAM,CACjB,MAAAjtF,MAAW,KACjB,OAAAA,EAAK,YAAYA,EAAK,YAAY,EAAI,CAAC,EACvCA,EAAK,QAAQA,EAAK,QAAQ,EAAI,CAAC,EACxBA,CACT,EAEMktF,GAAY,CAACltF,EAAYmtF,IAAwB,CAC/C,MAAAzwF,EAAMsD,EAAK,UAAYitF,KAAa,UAAgB,SAASjtF,EACnE,OAAGmtF,GACDzwF,EAAI,WAAWA,EAAI,WAAW,EAAIywF,CAAU,EAEvCzwF,CACT,EAEA,MAAqB0wF,WAAsB5hB,EAAgB,CAIzD,YAAYr+E,EAOT,CA0BD,GAzBA,MACE+/F,GAAU//F,EAAQ,SAAUA,EAAQ,oBAAsB,OAAY,GAAK,MAAS,EACpFA,EAAQ,OACR,CACE,UAAW,GACX,QAAS,GACT,SAAU,GACV,YAAa,GACb,QAASA,EAAQ,SAAW6/F,GAAW,EACvC,QAAS7/F,EAAQ,SAAW8/F,GAAW,EACvC,SAAU,GACV,mBAAoB,GACpB,8BAA+B,GAC/B,MAAO,EACT,GAGF,KAAK,kBAAoB9/F,EAAQ,kBAC5B,wBAAqB,CAAC,CAACA,EAAQ,kBAE/B,aAAQ,UAAU,IAAI,gBAAgB,EACtC,YAAO,OAAO,KAAK,WAAW,EAC9B,WAAM,YAAY,KAAK,UAAU,EACjC,UAAK,OAAO,KAAK,UAAU,EAE7BA,EAAQ,kBAAmB,CAC5B,MAAMkgG,EAAoBzmE,GAAO,qFAAsF,CAAC,KAAM,0BAA0B,EACnJ,UAAK,OAAOymE,CAAiB,EAElCpjF,EAAiBojF,EAAmB,IAAM,CACxClgG,EAAQ,OAAOmgG,EAA0B,EACzC,KAAK,KAAK,EACX,CACH,CAEGngG,EAAQ,oBACT,KAAK,WAAW,gBAAgBwE,EAAKxE,EAAQ,iBAAiB,CAAC,EAC1D,gBAAW,UAAU,IAAI,gBAAgB,EAElD,CAEO,cAAe,CAOpB,GANA,MAAM,aAAa,EAEhB,EAAE,KAAK,YAAc,KAAK,eAI1B,KAAK,mBACN,OAGE,IAAAiW,EACJ,MAAMnE,EAA2B,GAC3Be,MAAW,KACjBA,EAAK,SAAS,EAAG,EAAG,EAAG,CAAC,EAExB,MAAMutF,EAA0C,CAC9C,OAAQ,UACR,KAAM,WAGFC,EAAW,IAAI,KAAK,KAAK,aAAa,SAAS,EAGrD,GAFSA,EAAA,SAAS,CAAC,KAAK,gBAAgB,MAAO,CAAC,KAAK,kBAAkB,KAAK,EAEzE,KAAK,aAAa,QAAc,IAAAxtF,EAAK,UAChCoD,EAAA,yBAGE,CACFA,EAAA,oBAEN,MAAMqqF,EAA0C,CAC9C,MAAO,QACP,IAAK,WAGJD,EAAS,gBAAkBxtF,EAAK,gBACjCytF,EAAY,KAAO,WAGhBxuF,EAAA,KAAK,IAAIpR,GAAK,gBAAgB,CACjC,KAAM2/F,EACN,QAASC,CAAA,CACV,EAAE,OAAO,CACZ,CAEKxuF,EAAA,KAAK,IAAIpR,GAAK,gBAAgB,CACjC,KAAM2/F,EACN,QAASD,CAAA,CACV,EAAE,OAAO,EAEV,KAAK,WAAW,gBAAgB57F,EAAKyR,EAAKnE,CAAI,CAAC,CACjD,CACF,sBCxHA,IAAIyuF,GAAa,GACjB,MAAMC,GAAcA,IAAM,CACxB,GAAGD,GAAY,OACf,MAAMj0F,EAA+B,GACrCm0F,GAAe/5E,QAAQ,CAAC+B,EAAKxoB,IAAW,CACtC,MAAMqxE,EAAM,CAAC,GAAG7oD,EAAIk8B,KAAM,GACpB/4C,EAAU1L,EAAUG,SAASkkB,kBAAkBm8E,eAAezgG,EAAQqxE,EAAK,EAAI,EAAEprD,KAAK,IAAM,CAChGorD,EAAI5qD,QAASqb,GAAO,CACdtZ,EAAI/E,IAAIqe,CAAE,EAAE4+D,UACdl4E,EAAI+B,OAAOuX,CAAE,EACTtZ,EAAIrnB,MACNq/F,GAAej2E,OAAOvqB,CAAM,EAGlC,CAAC,CACH,CAAC,EAEDqM,EAAS8hB,KAAKxiB,CAAO,CACvB,CAAC,EAED8Y,QAAQya,IAAI7yB,CAAQ,EAAE4Z,KAAK,IAAM,CAC/Bq6E,GAAa,EACf,CAAC,CACH,EAEME,GAA8D,IAAIr9E,IACvEiuE,OAAeoP,eAAiBA,GACjCG,YAAYJ,GAAa,GAAK,EAgBvB,MAAMK,GAAkB/wF,GASN,CACvB,KAAM,CAACwO,EAAOgL,CAAQ,EAAIva,GAAY,EAChC,CAACsD,EAAOgX,CAAQ,EAAIta,GAAY,EAChC,CAACka,EAAOC,CAAQ,EAAIna,GAAa,EAAK,EAE5C,IAAI0Z,EAAMg4E,GAAe/8E,IAAI5T,EAAM7P,MAAM,EACrCwoB,GACFg4E,GAAezvF,IAAIlB,EAAM7P,OAAQwoB,EAAM,IAAIrF,GAAK,EAGlD,IAAIlK,EAAIuP,EAAI/E,IAAI5T,EAAMkwE,UAAUj+C,EAAE,EAC9B7oB,GACFuP,EAAIzX,IAAIlB,EAAMkwE,UAAUj+C,GAAI7oB,EAAI,CAACynF,QAAS,CAAC,CAAC,EAE9C,EAAEznF,EAAEynF,QACJ/xF,GAAU,IAAM,CACd,EAAEsK,EAAEynF,OACN,CAAC,EAED,MAAM1uC,EAAe6uC,GAAOhxF,EAAMkwE,UAAU3tE,KAAK,EAC3CzQ,EAAa8N,KAAmBgU,MAEtC,IAAI+G,EACJ,MAAM1oB,GAAS,WAAAogB,EAAAC,KAAAqN,EAAahF,EAAG,cAAAgF,GAAAC,cAAAD,EAAAtN,CAAA,EAAHsI,EAAGtI,EAAAwN,GAAAxN,EAAAyN,GAAA,IAAO9f,EAAMixF,gBAAkB,EAAE,SAAA5+E,MAE1D6+E,EAAuBA,CAAC33F,EAA4D6S,IAAsB,CAC9G,CACE7S,EAAQmd,OAAOlI,MACfjV,EAAQmd,OAAOC,IAAI,EACnBqC,OAAO2F,OAAO,EAAE/H,QAASC,GAAU,CACnCA,EAAMR,UAAUS,IAAI1K,CAAS,CAC/B,CAAC,GAGG+kF,EAAW,CACfrjF,MAAQq0C,GAAqF,CAC3F,MAAMr0C,EAASq0C,EAAmDz/C,UAAkCy/C,EAAgDr0C,MAC9I5b,EAAS4d,GAAU,CACvB,GAAG9P,EACH/N,UAAW0oB,EACX7M,QACAhc,aACA,GAAIkO,EAAMoxF,YAAc,CACtB,GAAIpxF,EAAMqxF,YAAc,CACtB//F,KAAMge,GAAgBxB,EAAO,IAAK,GAAG,CACtC,EAEDhC,eAAgB,EACjB,EACD,GAAI9L,EAAMsxF,WAAa,CACrBhgG,KAAMge,GAAgBxB,EAAOyjF,IAAUA,GAAQ,EAE/ClhF,SAAU,EAEX,EACDJ,iBAAkB,CAACjQ,EAAMwxF,aAC3B,CAAC,EAEDt/F,SAAOkkB,KAAK,MAAMlkB,GAAW,CACvBJ,EAAU,IACXkO,EAAMyxF,mBAAmBP,EAAqBh/F,EAAQ8N,EAAMyxF,iBAAiB,EAChF,MAAMv/F,EAAOG,aAAamc,MACtB1c,EAAU,IACd0nB,EAAStnB,EAAOwkB,OAAOlI,KAAK,EAC5B4K,EAAS,EAAI,EACb,MAAMlnB,EAAOG,aAAaskB,KACtB7kB,EAAU,GACdynB,EAASrnB,EAAOwkB,OAAOC,IAAI,GAC7B,CAAC,EAEMzkB,CACR,EAED8wD,MAAQb,GAAoD,CAC1D,MAAMz/C,EAAWy/C,EAAaz/C,SACxBgvF,EAAcvvC,EAAawvC,aAC3Bz/F,EAASs+D,GAAU,CACvB,GAAGxwD,EACH/N,UAAW0oB,EACXvoB,IAAKsQ,EACL+tD,OAAQihC,EAER5/F,aACA,GAAIkO,EAAMsxF,WAAa,CAErB5gC,OAAQ,GAERK,oBAAqB,EACtB,EACD,GAAI/wD,EAAMoxF,YAAc,CACtB,GAAIpxF,EAAMqxF,YAAc,CACtBniF,UAAWI,GAAgB5M,EAAU,IAAK,IAAK,EAAK,CACrD,EACDiuD,YAAa,EACd,EACD1gD,iBAAkB,CAACjQ,EAAMwxF,aAC3B,CAAC,EAEDt/F,SAAOkkB,KAAK,MAAMlkB,GAAW,CAO3B,GANG,CAACJ,EAAU,IACXkO,EAAMyxF,oBACJv/F,GAAQsc,OAAO0iF,EAAqBh/F,EAAOsc,MAAOxO,EAAMyxF,iBAAiB,EACzEv/F,GAAQ8wD,OAAO9wD,EAAO8wD,MAAM3sC,UAAUS,IAAI9W,EAAMyxF,iBAAiB,GAEnEv/F,GAAQsc,OAAO,MAAMtc,EAAOsc,MAAMnc,aAAamc,MAC/C,CAAC1c,EAAU,GAAI,OACfI,GAAQsc,OAAOgL,EAAStnB,EAAOsc,MAAMkI,OAAOC,MAAezkB,EAAOsc,MAAMkI,OAAOlI,KAAK,EACvF4K,EAAS,EAAI,EACb,MAAM4pC,EAAQ9wD,GAAQ8wD,MACnBA,GAAShjD,EAAMsxF,YAChBtuC,EAAM7gB,KAAO,GACb6gB,EAAMM,MAAQ,GAEXvN,IACDiN,EAAMtxC,KAAI,GAGd,MAAMxf,GAAQsf,YACV1f,EAAU,GAEdynB,EAASypC,CAAK,CAChB,CAAC,EAEM9wD,CACT,GAGF,IAAI0/F,EACJ,OAAOzvC,EAAar9C,EAAC,CACnB,IAAK,oBAAqB,CACxB8sF,EAAcT,EAASrjF,MAAMq0C,CAAY,EACzC,KACF,CAEA,IAAK,uBAAwB,CAI3ByvC,EAAcT,EAASnuC,MAAMb,CAAY,EAGzC,KACF,CACF,CAEA,MAAO,CAAClwD,YAAW0oB,MAAKpY,QAAOqvF,cAAapjF,QAAO2K,QACrD,EAEa04E,GAAgB7xF,GAIJ,CACvB,GAAI,CAAC3N,cAAa,EAAG2N,EAClB3N,GACD,OAAO2N,EAAM3N,aAGf,MAAMmf,EAAwCnf,GAAgBwK,KAC9DxK,GAAcisB,KAAK9M,CAAW,EAC9Bnf,EAAe+kB,OAEf,KAAM,CAAC84D,EAAW4hB,CAAY,EAAI7yF,GAAkCmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EACxF,CAACtvF,EAAGuvF,CAAI,EAAI/yF,GAAY,EAE9B7O,SAAUG,SAASukB,aAAaL,kBAAkBw9E,aAAajyF,EAAM7P,OAAQ6P,EAAMsU,OAAO,EACzF8B,KAAK,MAAMlkB,GAAW,CACjBA,EAAOyiB,QACTnD,GAAaqD,QAAO,EAGtB,MAAMq7D,EAAY,MAAMh+E,EAAOA,OAC/B4/F,EAAa5hB,CAAS,CACxB,CAAC,EAyCD7yE,GACEC,GACE,IAAM4yE,EAAS,EAzCEA,GAAmC,CACtD,GAAG,CAACA,EAAW,CACblwE,EAAMkyF,iBAAc,EACpB1gF,EAAYqD,QAAO,EACnB,MACF,CAEA/V,GAAU,IAAM,CACd0S,GAAa6nB,OAAM,CACrB,CAAC,EAYD,KAAM,CAACpnC,YAAWknB,OAAM,EAAG43E,GAAe,CACxC,GAAG/wF,EACHkwE,YACAkhB,WAAY,EACd,CAAC,EAED/zF,GACEC,GACE,IAAM6b,EAAK,EACX,IAAM,CACJ3H,GAAaqD,QAAO,EACpBm9E,EAAK//F,CAAS,CAChB,EACA,CAACyqB,MAAO,EACV,EACF,GAOE,CAACA,MAAO,EACV,EACF,EAGKja,CAEP,wTC1PM0vF,GAAmG,CACvGC,aAAc,mBACdC,gBAAiB,sBACjBC,WAAY,gBACZC,gBAAiB,qBACjBC,sBAAuB,0BACvBC,8BAA+B,iCAC/BC,gBAAiB,sBACjBC,mBAAoB,yBACpBC,sBAAuB,2BACvBC,2BAA4B,+BAC5BC,yBAA0B,8BAC1BC,iCAAkC,mCACpC,EAEMC,GAAgG,CACpGZ,aAAc,mBACda,cAAe,yBACfC,4BAA6B,+BAC7BR,gBAAiB,4BACjBS,eAAgB,qBAChBC,cAAe,oBACfb,gBAAiB,qBACjBc,eAAgB,yBAClB,EAEMC,GAAgG,CACpGC,YAAa,2BACbV,2BAA4B,8BAC9B,EAEMW,GAAqBF,GAErBG,GAAkI,CACtIC,UAAW,sBACXC,sBAAuB,uBACvBC,eAAgB,eAChBC,gBAAiB,gBACjBC,gBAAiB,gBACjBC,iBAAkB,iBAClBC,mBAAoB,mBACpBC,oBAAqB,mBACvB,EAEMC,GAAgI,CACpIC,QAAS,uBACT5kE,SAAU,mBACV6kE,QAAS,iBACTC,QAAS,gBACX,EAEMC,GAAgI,CACpIC,MAAO,iBACPC,cAAe,eACfxS,UAAW,YACXyS,eAAgB,eAClB,EAEMC,GAAuBJ,GAE7B,IAAIK,GACAC,GACJ,SAASC,IAAe,CACtB,OAAOF,QAAkBG,GAAA,WAAO,qBAA2B,0CAAE1+E,KAAM2+E,GAAW,CAC5EH,GAAUG,EAAOC,OACnB,CAAC,EACH,CAEA,SAASC,GAAa78F,EAAuB,CAC3C,OAAOA,EAAM88F,UAAU98F,EAAM+8F,QAAQ,GAAG,CAAC,CAC3C,CAEO,MAAMC,GAAeA,CAAChuF,EAAeiuF,KACnC,CACLvwF,EAAG,uBACHtH,QAAS4J,EACTpJ,SAAU,EACVq3F,gBAKSC,GAAqBA,CAAsBt1F,EAAkC,KACjFf,GAA8B,CACnCqpC,SAAU,CAAE,EACZje,OAAQ,CAAE,EACVlD,KAAM,EACNmI,MAAO,EACP,GAAGtvB,CACL,EAAG,CAAC+xF,OAAQ,EAAK,CAAC,EAGPwD,GAAmBA,CAC9BjmE,EACAt1B,EACAmrB,EACAhf,EAAmB,yBAChB,CACH,MAAMma,EAASqJ,GAAO,0CAA2C,CAACtQ,KAAM,OAAQriB,KAAMmP,EAAKqvF,SAAU,CAAClmE,CAAK,CAAC,CAAC,EAC7GtiB,SAAiBsT,EAAQ,IAAM,CAC7BtmB,EAASsmB,CAAM,CACjB,EAAG,CAAC6E,gBAAc,CAAC,EACZ7E,CACT,EAEMm1E,GAAyBA,CAAC,CAC9BruF,QACA3W,QACAilG,mBACAC,oBAMF,IAAM,CACJ,MAAMC,EAAexuF,EAAMtC,IAAM,oBACjC,IAAIqmB,EACJ,GAAGyqE,EAEDzqE,EAAK,IADM/jB,EAAMrF,KAAOqF,EAAMyuF,MAAQ,KAAKC,QAAQ,CAAC,CAC3C,IAENH,IACDxqE,GAAClY,EAAA,IAEK,IAAG7L,EAAMrF,IAAK,GAAE,cAAAsQ,EAAAC,KAAAS,SAAAV,EAEf8Y,CAAC,EAAA9Y,CAGP,WAEE,CAOL,GANA8Y,EAAIykD,GAAaxoE,EAAM5J,QAAS,CAAC,EAE9B4J,EAAMiuF,cACPlqE,EAAI,IAAMA,GAGT,CAAC/jB,EAAM5J,SAAW,CAAC4J,EAAMpJ,UAAY,CAAC03F,EACvC,OAGF,GAAGtuF,EAAM5J,UAAY4J,EAAMpJ,UAAYoJ,EAAMpJ,SAAU,CACrD,MAAMk1B,EAAO9rB,EAAM5J,QAAU4J,EAAMpJ,SAC7B+3F,EAAUlgF,KAAKmgF,IAAI9iE,CAAI,EACvB+iE,EAAM,GAAE/iE,EAAO,EAAI,IAAM,GAAI,GAAE08C,GAAammB,EAAS,CAAC,CAAE,GACxDrjG,EAAI,EAAEmjB,KAAKmgF,IAAI,EAAI5uF,EAAM5J,QAAU4J,EAAMpJ,QAAQ,EAAI,KAAK83F,QAAQ,CAAC,EACnEpmG,EAAO,GAAEumG,CAAG,KAAIvjG,CAAE,KACxBy4B,EAAC,CAEIA,EAAG,KAAG,WAAAxY,EAAAC,KAAAG,SAAAJ,EAIJjjB,CAAG,EAAA6iB,OAAAiN,GAAA7M,EAFGjI,GAAW,6CAA8CwoB,EAAO,EAAI,QAAU,KAAK,CAAC,GAAAvgB,CAKhG,KACH,CACF,CAEA,kBAAAE,EAAAsM,GAAA,EAAA6hE,EAAAnuE,EAAAC,WAAA2M,EAAAuhE,EAAAxT,YAAAz6D,SAAAiuE,EAGO71D,CAAC,EAAApY,EAAA0M,EAAA,IAGD/qB,EAAKjE,CAAK,CAAC,EAAAoiB,CAAA,IAIpB,EAEaqjF,GAA2Bl2F,IAGtC,WAAA8zC,EAAAp0B,KAAA3M,SAAA+gC,EAAA5gC,EAEK2pD,GAAG,KAACC,MAAI,QAAE98D,EAAMslB,KAAK,EAAArG,SAAGw2E,EAAsB,IAAA3hD,CAAA,KAKtC,MAAMqiD,WAAyBpkE,EAAwB,CAAvD,kCAogBLqkE,qBAAa,MAAMtmG,GAA4F,CACrH,MAAMK,EAASL,EAAKgV,IAAM,UAAYhV,EAAKK,OAASL,EAAKumG,QAAQC,SAAS,EAAK,EACzEjkG,EAA+B,GAC/B,CAACuiC,KAAG,EAAI/F,GAAkB0nE,aAAa,CAC3CpmG,OAAQA,EACR8B,UAAW,GACXukG,cAAe,GACftxD,WAAY,aACZ7yC,eACAV,YAAa,CACXG,WAAY,KAAKsoB,iBAAiBxG,IAAI,CACvC,EACDo0B,UAAW,EACb,CAAC,EAED,IAAIyuD,EACJ,OAAG3mG,EAAKgV,IAAM,WACZ2xF,EAAS,CACP,MAAMj/D,GAAqBrnC,EAAOumG,SAAQ,CAAE,EAC5ChiG,EAAK,QAAS,CAACk7E,GAAa9/E,EAAKykG,MAAO,CAAC,CAAC,CAAC,CAAC,EAE9C3/D,EAAI+hE,OAAO14E,QAAQngB,IAAM,GAAKhO,EAAKgO,KAC3BhO,EAAKgV,IAAM,sBACnB2xF,EAAS,CACP3mG,EAAKy/B,UAAY76B,EAAK,WAAY,CAAC5E,EAAKy/B,QAAQ,CAAC,EACjDz/B,EAAK8mG,WAAaliG,EAAK,uBAAwB,CAACA,EAAK,aAAc,CAAC5E,EAAK8mG,SAAS,CAAC,CAAC,CAAC,CAAC,EAEhF9mG,EAAKgV,IAAM,qBACnB2xF,EAAS,CACP3mG,EAAKmtB,SAAWvoB,EAAK,YAAa,CAAC5E,EAAKmtB,OAAO,CAAC,EAChDntB,EAAK+mG,QAAUniG,EAAK,OAAQ,CAAC5E,EAAK+mG,MAAM,CAAC,EACzC/mG,EAAKgnG,QAAUpiG,EAAK,eAAgB,CAAC5E,EAAKgnG,MAAM,CAAC,CAAC,EAGpDL,EAAS,CACP3mG,EAAKinG,aAAeriG,EAAK,cAAe,CAAC5E,EAAKinG,WAAW,CAAC,CAAC,EAI/DN,EAASA,EAAOz9E,OAAO2F,OAAO,EAC3B83E,EAAO9mG,QACRilC,EAAIoiE,gBAAgBC,gBAAgB,GAAGxiG,GAAKgiG,EAAQ,EAAK,CAAC,EAG5D,MAAM7hF,QAAQya,IAAIh9B,CAAY,EACvB,CAACJ,UAAW2iC,EAAI+hE,OAAQxmG,YAGzB+mG,8BAAsB,MAAMC,GAAiC,CACnE,GAAGA,EAAcryF,IAAM,uBAAwB,CAC7C,MAAMrL,EAAU09F,EAAc19F,QAC9B,OAAO,KAAK29F,iBAAiB,CAC3BtyF,EAAG,iCACHuH,SAAU5S,EAAQ4S,SAClBgrF,OAAQ59F,EAAQqE,IAChBy2F,MAAO96F,EAAQ86F,MACfvS,UAAWvoF,EAAQuoF,UAAYvoF,EAAQuoF,UAAUt0D,QAAQ7U,OAAO,CAAC5N,EAAKkgB,IAAMlgB,EAAMkgB,EAAEmE,MAAO,CAAC,EAAI,CAClG,EAAG71B,EAAQtJ,OAAQsJ,CAAO,CAC5B,CAEA,MAAMy2E,EAAYinB,EAAcG,MAChC,GAAG,CAACpnB,EACF,OAGF,MAAMqnB,EAAarnB,EAAUqkB,MAC7B,OAAO,KAAK6C,iBAAiB,CAC3BtyF,EAAG,+BACHuH,SAAUkrF,GAAYC,gBAAkB,EACxCC,SAAUvnB,EAAUj+C,GACpBsiE,MAAOgD,GAAYG,aAAe,EAClC1V,UAAWuV,GAAYI,iBAAmB,GACzCnhG,GAAU2gG,EAAcrnG,IAAI,EAAGsnB,OAAW84D,CAAS,IA9jB9C0nB,oBAA2B,CACnC,KAAKC,YAAYhjF,SACnB,CAEQijF,WACNC,EACAC,EACAC,EACAC,EACAC,EACAC,EACA,OAAAC,EAAA,KACMC,EAAc,IAAI1nG,GAAK2nG,gBAAgB,CAACroG,QAAS,CAAC,CAAC,CAAC,EACpDsoG,EAA2CA,CAACpxF,EAAOlX,EAAU,KAAO,CACxEA,EAAQuoG,cAARvoG,EAAQuoG,YAAgB,IACxBvoG,EAAQwoG,eAARxoG,EAAQwoG,aAAiB,IAEzB,MAAM31F,EAAO,IAAI41F,KAAKvxF,CAAK,EAC3BkxF,SAAY1xD,OAAO,CACjB7jC,OACA7S,QAAS,CACP0oG,QAAS1oG,EAAQ2oG,eAAiB3oG,EAAQ4oG,QAAU,QAAU,OAAS1hF,OACvEiiC,KAAMnpD,EAAQuoG,YAAc,UAAYrhF,OACxC2hF,KAAM7oG,EAAQ8oG,aAAe,UAAY5hF,OACzC6hF,OAAQ/oG,EAAQ8oG,aAAe,UAAY5hF,OAC3CkiC,MAAOppD,EAAQwoG,aAAe,QAAU,OACxCxpB,IAAK,SACP,CACF,CAAC,EAEMopB,EAAY3zF,QAAQu0F,aAGvBC,EAA4C/xF,GAAkB,CAClE,MAAMrE,EAAO,IAAI41F,KAAKvxF,CAAK,EAC3BkxF,SAAY1xD,OAAO,CACjB7jC,OACA7S,QAAS,CACP6oG,KAAM,UACNE,OAAQ,SACV,CACF,CAAC,EAEMX,EAAY3zF,QAAQu0F,aAGvBE,EAAaA,IAAM,CACvB,MAAMC,EAAUhkF,GAAiBC,YAAY,eAAe,EACtDgkF,EAAUjkF,GAAiBC,YAAY,eAAe,EACtDikF,EAAYlkF,GAAiBC,YAAY,iBAAiB,EAC1DkkF,EAAavvF,GAASovF,CAAO,EAE7BI,EAAWC,GACfzvF,GAASsvF,CAAS,EAClBG,GACEzvF,GAASqvF,CAAO,EAChBE,EACA,EACF,EACA,EACF,EAEMG,EAAYD,GAChBzvF,GAASsvF,CAAS,EAClBG,GACEzvF,GAASqvF,CAAO,EAChBE,EACA,EACF,EACA,EACF,EAmBA,MAjB8E,CAC5EF,QAASjkF,GAAiBC,YAAY,eAAe,EACrDikF,UAAWlkF,GAAiBC,YAAY,iBAAiB,EACzDskF,WAAYP,EACZQ,cAAeL,EACfxiG,KAAMqe,GAAiBC,YAAY,oBAAoB,EACvDwkF,MAAOzkF,GAAiBC,YAAY,sBAAsB,EAC1DykF,KAAO,QAAO9vF,GAASoL,GAAiBC,YAAY,sBAAsB,CAAC,EAAE7gB,KAAK,IAAI,CAAE,SACxFwnE,KAAM,CACJ35C,EAAGjN,GAAiBC,YAAY,sBAAsB,EACtDkmB,EAAGnmB,GAAiBC,YAAY,sBAAsB,CACvD,EACD0kF,wBAA0B,QAAOR,EAAW/kG,KAAK,IAAI,CAAE,SACvDglG,SAAW,QAAOA,EAAShlG,KAAK,IAAI,CAAE,SACtCklG,UAAY,OAAMA,EAAUllG,KAAK,IAAI,CAAE,MAK3C,IAAI0U,EAASiwF,IACb,KAAKj0E,eAAerO,IAAI1mB,CAAS,EAAE,gBAAiB,IAAM,CACxD+Y,EAASiwF,EAAU,CACrB,CAAC,EAED,MAAM5nD,EAAS,KAAKhsC,YAAc2sF,GAAyB,KAAK8H,YAAcjH,GAAsB,KAAKkH,QAAU1G,GAAqBF,GAClI6G,EAAyFj8E,OAAO22B,KAAKrD,CAAM,EAAE74B,IAAKxS,GAAQ,CAC9H,MAAMi0F,EAAa,KAAKC,MAAMl0F,CAAG,EACjC,OAAOi0F,GAAc,CACnBA,aACA3pG,MAAO+gD,EAAOrrC,CAAG,EACjBm0F,WAAan0F,IAAgC,kBAEjD,CAAC,EAAE6S,OAAO2F,OAAO,EACX47E,EAAcA,CAAC,CAACH,aAAY3pG,QAAO6pG,YAA4B,IAAM,CACzEnZ,GAAQ,IAAM,CACZ,IAAIjtE,EAA0BsmF,KAAKC,MAAML,EAAW3f,KAAKvmE,IAAI,EAG7D,MAAMwmF,EAAcA,CAACxmF,EAAyBomF,IAAyB,CACrE,UAAUzmG,KAAKqgB,EAAK/K,OAAQ,CAC1B,MAAM/Q,EAAQ8b,EAAK/K,OAAOtV,CAAC,EAC3BqgB,EAAK/K,OAAOtV,CAAC,EAAIohG,GAAa78F,CAAK,CACrC,CAEA,GAAGkiG,EAAY,UAAUzmG,KAAKqgB,EAAK8yB,MAC9B9yB,EAAK8yB,MAAMnzC,CAAC,IAAM,QACnBqgB,EAAK8yB,MAAMnzC,CAAC,EAAI,QAIpB,OAAOqgB,GAGTA,EAAOwmF,EAAYxmF,EAAMomF,CAAU,EAGnC,MAAMK,EAAyB,CAC7BnC,eACAW,eACAyB,eAAgB,IAGZC,EAAYT,EAAWU,WACvBC,EAASnG,GAAQ9gF,OAAO,CAC5B7hB,YACAiiB,KAAM,CACJ,GAAGA,EACH,GAAGymF,EACHK,UAAWH,EAAY,MAAMv4E,GAAM,CACjC,MAAM83E,EAAa,MAAM,KAAK7pG,SAAS0qG,qBAAqBC,eAAeL,EAAWv4E,EAAG,KAAK64E,IAAI,EAClG,GAAGf,EAAWt1F,IAAM,kBAMpB,MAAO,CACL,GAAG41F,EAAYF,KAAKC,MAAOL,EAAqC3f,KAAKvmE,IAAI,EAAGomF,CAAU,EACtF,GAAGK,EAEP,EAAIvjF,MACA,EACNoF,SAAU,CACR4+E,SAAUxxF,GAAgBsI,QAAS,EACnCmpF,UAAWzqG,GAAKg7F,OAAO,oBAAqB,EAAI,EAChD0P,WAAY,OACZC,aAAc,SACdC,gBAAiB,GACjBC,UAAW7qG,GAAKg7F,OAAO,UAAW,EAAI,EACtC8P,KAAM,CACJC,OAAQj2C,GACRk2C,KAAM,MACNC,OAAQ,KACT,EACDC,OAAQ3yF,CACV,CACF,CAAC,EAEK4yF,EAAYA,IAAM,CACyB,CAC7C,CAAC,gBAAiB5yF,EAAOmwF,OAAO,EAChC,CAAC,mBAAoBnwF,EAAOywF,UAAU,EACtC,CAAC,uBAAwBzwF,EAAO0wF,cAAcplG,KAAK,IAAI,CAAC,EACxD,CAAC,aAAc0U,EAAOnS,IAAI,EAC1B,CAAC,kBAAmBmS,EAAOowF,SAAS,EACpC,CAAC,cAAe7zC,EAAU,CAAC,EAG3B9uC,QAAQ,CAAC,CAACif,EAAUzuB,CAAK,IAAM,CAC/B2zF,EAAOiB,SAASzlF,MAAMkC,YAAa,YAAWod,CAAS,GAAGzuB,CAAK,CACjE,CAAC,GAGH20F,IAEA,KAAK52E,eAAerO,IAAI1mB,CAAS,EAAE,gBAAiB,IAAM,CACxD2qG,EAAOkB,YAAYryF,GAAgBsI,UAAW,CAAC,GAAG/I,CAAM,CAAC,EACzD4yF,GACF,CAAC,CACH,CAAC,EAED,MAAMz1F,EAAe5D,SAAS6Y,cAAc,KAAK,EAC3C2gF,EAAiBx5F,SAAS6Y,cAAc,KAAK,EACnDjV,EAAa+P,UAAUS,IAAI,kBAAkB,EAC7C,MAAMvjB,EAAImB,EAAKjE,CAAK,EACpB8C,EAAE8iB,UAAUS,IAAI,uBAAuB,EACvCxQ,EAAa0/B,OAAOzyC,CAAC,EAQrB,IAAItB,EACJ,OAAAihB,EACGkgC,GAAO,CAAC7oB,KAAMjkB,EAAcutC,UAAWqoD,EAAc,IAAAj9E,UAAA,OAAAk9E,EAAAC,KAAAz8E,EACjB1tB,EAAS,cAAA0tB,GAAAC,cAAAD,EAAAw8E,CAAA,EAATlqG,EAASkqG,GAAA,KAK5CE,EAAiB,KAAKhC,MAAMv1F,IAAM,uBAAyB2uF,GAA0B,KAAKwG,YAAc/F,GAAwB,KAAKgG,QAAUxF,GAAuBJ,GACtKgI,EAAyFp+E,OAAO22B,KAAKwnD,CAAc,EAAE1jF,IAAKxS,GAAQ,CACtI,MAAMiB,EAAQ,KAAKizF,MAAMl0F,CAAG,EAC5B,OAAOiB,GAAS,CACdA,QACA3W,MAAO4rG,EAAel2F,CAAG,EAE7B,CAAC,EAAE6S,OAAO2F,OAAO,EAEX49E,EAAkBA,CAAC/vD,EAAaC,IAC7BzX,GAAiB,CAACwX,EAAKC,CAAG,EAAE9zB,IAAKozC,GAC/B,IAAIn7D,GAAK2nG,gBAAgB,CAC9Bx1F,KAAM,IAAI41F,KAAK5sC,EAAY,GAAG,EAC9B77D,QAAS,CACPopD,MAAO,QACP41B,IAAK,UACL71B,KAAM,SACR,CACD,GAAE10C,OACJ,EAAG,KAAK,EAGL6yE,EAAU,KAAK6iB,MAA8B7iB,OAC7CglB,EAA0D,CAAC,aAAc,YAAa,aAAa,EACzG,IAAIC,EACJ,MAAMh9F,EAED24F,IAAWllF,EAAKkgC,GAAO,KAAAn0B,UAAA,QAAEm5E,EAAYnmG,SAAS,EAAW,EAAAihB,EACzDkgC,GAAO,CAAC7oB,KAAI,wBAAqBspB,WAAS,QAAE2jC,GAAU+kB,EAAgB/kB,EAAOklB,SAAUllB,EAAOmlB,QAAQ,CAAC,MAAA19E,UAAA,QAAA/L,EACrGgjF,GAAuB,CAAC5wE,MAAOg3E,CAAa,IAAAppF,IAE9C2pD,GAAG,CAACC,KAAMq9B,EAAMl7E,SAAGs7E,CAAW,GAAAtnF,GAAA,WAAAD,EAAAC,EAC9B8kF,QAAYpoG,MAAM,YAAlBqjB,EAAA,GAAAE,EAAuBkgC,GAAO,CAAAG,IAAAgpB,EAAA,OAAAF,EAAMogC,EAAc,OAAApgC,gBAAAE,CAAA,EAAdkgC,EAAclgC,CAAA,EAAEhyC,KAAI,kBAAAtL,UAAA,QACtD84E,EAAYp/E,IAAI,CAAC,CAAC1mB,WAAU,IAAKA,CAAS,CAAC,EACpC,KAAAihB,IACT2pD,GAAG,CAACC,KAAM,CAACk7B,EAAYC,EAAWC,CAAW,EAACj5E,SAAGA,CAAC29E,EAAUnpG,IAAQ,CACnE,GAAG,CAACmpG,EAASjtG,OACX,OAGFitG,EAAWA,EAASzjB,QAEpB,MAAM9mC,EAAWxjB,GAAkBguE,iBACnCxqD,EAASrM,OAAO,GAAG42D,EAASE,OAAO,EAAG,EAAE,EAAEnkF,IAAI,CAAC,CAAC1mB,eAAeA,CAAS,CAAC,EACzE,IAAI8qG,EACJ,OAAGH,EAASjtG,SACVotG,EAAaxH,GAAiBqH,EAASjtG,OAAQ,IAAM,CACnDotG,EAAWhhF,OAAM,EACjBs2B,EAASrM,OAAO,GAAG42D,EAASjkF,IAAI,CAAC,CAAC1mB,eAAeA,CAAS,CAAC,CAC7D,EAAGomG,EAAKlzE,cAAc,GAExBjS,EACGkgC,GAAO,KAAC7oB,MAAI,QAAEiyE,EAAe/oG,EAAG,CAAE,CAAC,MAAEogD,WAAS,QAAE2jC,GAAU+kB,EAAgB/kB,EAAOklB,SAAUllB,EAAOmlB,QAAQ,CAAC,MAAA19E,UAAA,OACzGozB,GACA0qD,CAAU,IAGjB,CAAC,GAAA9pF,GAAA,WAAA2L,EAAA3L,EAAA,MACAklF,EAAc,EAAG7oE,KAAK,YAAtB1Q,EAAA,GAAA1L,EAA2BkgC,GAAO,CAAC7oB,KAAI,wBAAqBopB,UAAQ,OAAE,CAACwkD,IAAiB7oE,KAAK,CAAC,MAAArQ,UAAA,oBAAA+9E,EAAAC,KAAAr9E,UAErF3d,GAAO,CACX4sB,GAAkBquE,qBAAqB,CACrCzoE,KAAMxyB,EACN0sB,QAAUlZ,GAAW,CAEnB,GADgBA,EAAOwI,QAAQ3J,QAE7B6oF,UAA4B,CAC1B1nF,OAAQA,IAAMA,EAAO2nF,cAAc,SAAS,EAC5CjtG,OAAQslB,EAAOwI,QAAQ9tB,OAAOmmG,SAAU,EACxCrkE,GAAI,CAACxc,EAAOwI,QAAQ3J,OACtB,CAAC,EACM,EAEV,EACD+oF,YAAajmF,OACbsX,WAAYtX,OACZkmF,UAAW,EACb,CAAC,CACF,EAAAN,CAAA,EAAAjqF,EAAAiqF,EAAA,IAEA7E,EAAgB,EAAC7vD,QAAQ,EAAA00D,IAAA/pF,IAE3BA,MAAAklF,QAAgB,EAACoF,QAAQ,EAAIhI,MAC5B4C,EAAgB,EAAC7oE,MAAQ6oE,EAAgB,EAAC7vD,SAAS34C,OAClD2wB,GAAW,CACV,MAAMwJ,EAASpJ,GAAiBJ,EAAQ,EAAI,EAC5B63E,IAAiBoF,WACzBC,QAAQ,IAAM1zE,EAAM,CAAE,CAChC,EACAuuE,EAAKlzE,cACP,CAAC,IACO,CAEb,OAED,GAAGs3E,EAAgB,CACjB,MAAM9jF,EAAiD,IAAIrF,IAC3DykF,EAAYnhF,QAAQ,CAAC,CAAC3kB,YAAWwrG,yBAAuB,IAAM,CAC5D9kF,EAAIzX,IAAIjP,EAAWwrG,CAAuB,CAC5C,CAAC,EAED,MAAMlpC,EAAc73D,GAA+BgZ,EAAgBhZ,EAAE+Y,OAAQ,iBAAiB,EAC9F,IAAIioF,EAEJ,MAAMC,EAAcA,IAAM,CACxB,KAAK9rE,OAAO+rE,UAAUzH,EAAgB,EAAE5zE,KACtC,KAAK5rB,OACJ+mG,EAAoErG,OACpEqG,EAAkEjG,QACrE,GAGFzqF,EAAiByvF,EAAiB//F,GAAM,CACtCghG,EAAW/kF,EAAI/E,IAAI2gD,EAAW73D,CAAC,CAAC,EAC5BghG,GAIJC,GACF,EAAG,CAACx4E,eAAgB,KAAKA,cAAc,CAAC,EAExCyC,GAAkB,CAChBrG,QAAS,CAAC,CACRlI,KAAM,aACNriB,KAAM,iBACNwtB,QAASm5E,CACX,EAAG,CACDtkF,KAAM,UACNriB,KAAM,uBACNwtB,QAASA,IAAM,CACb+P,GAAaspE,aAAa,CACxB1tG,OAAQ,KAAKwG,OAAO2/F,SAAS,EAAI,EACjCnJ,UAAYuQ,EAAoErG,MAClF,CAAC,CACF,EACD30C,OAAQA,IAAMg7C,EAAS54F,IAAM,gCAC/B,EAAG,CACDuU,KAAM,UACNriB,KAAM,YACNwtB,QAASA,IAAM,CACb24E,GAA4B,CAC1BhtG,OAAQ,KAAKwG,OAAO2/F,SAAS,EAAI,EACjCrkE,GAAKyrE,EAAkEjG,QACzE,CAAC,CACF,EACD/0C,OAAQA,IAAMg7C,EAAS54F,IAAM,8BAC/B,CAAC,EACDgjB,SAAU20E,EACVt3E,eAAgB,KAAKA,eACrB0C,YAAcnrB,GAAM,CAClB,MAAM+Y,EAAS8+C,EAAW73D,CAAC,EAC3BghG,SAAW/kF,EAAI/E,IAAI6B,CAAM,EAClBA,CACR,EACD3jB,WAAY,KAAKsoB,iBAAiBxG,IAAI,CACxC,CAAC,CACH,CAEA,OAAOnU,CACT,CAEA,MAAc23F,iBACZqG,EACAttG,EAAiB,KAAKwG,OAAO2/F,SAAS,EAAI,EAC1C78F,EACAy2E,EACA4tB,EACA,CACA,MAAMC,EAAwBr7F,SAASs7F,yBACjCnlG,EAAsB,CAC1B,CAAC,YAAa4kG,EAAwBzb,SAAS,EAC/C,CAAC,QAASyb,EAAwBpxF,QAAQ,CAAC,EAG7C,CAACyxF,GAAYjlG,EAAE+d,QAAQ,CAAC,CAACyC,EAAMiW,CAAK,IAAM,CACxC,GAAG,CAACA,EACF,OAGF,MAAMz7B,EAAIzC,GAAKioB,EAAM,8BAA8B,EAChDA,IAAS,SACVxlB,EAAEwiB,UAAUS,IAAI,cAAc,EAGhC,MAAMpa,EAAIgG,SAAS6Y,cAAc,MAAM,EACvC7e,EAAE2Z,UAAUS,IAAI,yBAAyB,EACzCpa,EAAEspC,OAAOnyC,EAAG+7E,GAAatgD,EAAO,CAAC,CAAC,EAClCyuE,EAAsB/3D,OAAOtpC,CAAC,CAChC,CAAC,EAED,MAAM+tB,EAAM,IAAI5B,GAAI,CAClBp4B,MAAO,GACP64B,WAAYw0E,EAAW1mF,OAAY1iB,EAAK,QAAS,CAACm+B,GAAuB4qE,EAAwBlJ,KAAK,CAAC,CAAC,EACxGxrE,SAAU,GACVC,cAAe80E,EAAW1mF,OAAY2mF,EACtCtvE,UAAW,GACXwvE,OAAQ,GACRC,OAAQ,CAAC,EAAEzkG,GAAWy2E,EACxB,CAAC,EAEK,CAACj+E,WAAU,EAAGw4B,EACpBx4B,EAAUokB,UAAUS,IAAI,iBAAiB,EAEzC2T,EAAIh6B,MAAM4lB,UAAUS,IAAI,uBAAuB,EAE/C,MAAMhlB,EAAa,KAAKsoB,iBAAiBxG,IAAG,EACtCo8D,EAAUttE,SAAS6Y,cAAc,KAAK,EAE5C,GADAy0D,EAAQ35D,UAAUS,IAAI,uBAAuB,EAC1Crd,GAAWy2E,EAAW,CACvB,KAAM,CAACrlE,OAAMsP,oBAAmBlD,oBAAmB,EAAG8I,GAAU,CAC9DjuB,aACAR,KAAM,GACN6qB,SAAU,GACVhsB,QACF,CAAC,EAEDs6B,EAAIx4B,UAAUgsB,QAAQ9tB,OAAS,GAAKA,EACjC+/E,GACDj5D,EAAmB,CAAC,CAACtnB,OAAQ,EAAG6kB,KAAM,QAAS,EAAC,EAChDiW,EAAIx4B,UAAUgsB,QAAQ3J,QAAU,GAAK47D,EAAUj+C,IAE/CxH,EAAIx4B,UAAUgsB,QAAQngB,IAAM,GAAKrE,EAAQqE,IAG3CkyE,EAAQhqC,OAAOn7B,CAAI,EACnB,MAAMsP,EACNsQ,EAAIh6B,MAAMu1C,OAAO,MAAMljC,GAAc,CAAC3S,QAAO,EAAC,EAC9Cs6B,EAAI1B,SAASid,OAAOikB,GAAmBxwD,GAASsJ,MAAQmtE,GAAWntE,IAAI,CAAC,EACxE0nB,EAAI0zE,kBAAkBnuB,EAAS,YAAY,CAC7C,SAAUytB,EAAwB34F,IAAM,iCAAkC,CAaxE,GAZA7S,EAAUokB,UAAUS,IAAI,yBAAyB,EACjDrd,MAAY,KAAK81B,SAAS3b,IAAI6pF,EAAwBpG,MAAM,GAWzD,CAVgB,MAAMtnB,GAAuB,CAC9C7lB,QAASz/B,EAAI1B,SACbt4B,MAAOw5D,GAAmBxwD,EAAQsJ,IAAI,EACtC+kC,WAAYrd,EAAIh6B,MAChBgJ,UACAu2E,UACAl+E,aACA4P,iBAAkB,EACpB,CAAC,EAEe,CACd,KAAM,CAACmJ,OAAMsP,mBAAkB,EAAG4F,GAAU,CAACjuB,aAAY3B,SAAQmB,KAAM,EAAE,CAAC,EAC1E0+E,EAAQhqC,OAAOn7B,CAAI,EACnB,MAAMsP,CACR,CAEAsQ,EAAI0zE,kBAAkBnuB,EAAS,YAAY,CAC7C,KAAO,CACL/9E,EAAUokB,UAAUS,IAAI,uBAAuB,EAC/Co5D,MAAc,KAAK5jD,QAAQ1Y,IAAI6pF,EAAwBhG,QAAQ,GAC/DhtE,EAAIh6B,MAAMu1C,OAAOtxC,EAAK,OAAO,CAAC,EAC9B+1B,EAAI1B,SAASid,OAAOikB,GAAmBimB,EAAUntE,IAAI,CAAC,EAEtD,MAAMq7F,EAAS17F,SAAS6Y,cAAc,KAAK,EAC3C6iF,EAAO/nF,UAAUS,IAAI,wBAAyB,WAAW,EACzDk5D,EAAQhqC,OAAOo4D,CAAM,EAErB,MAAMlhG,GAAY2B,GAAY,CAC5B/M,EAAW6qB,UAAU9d,CAAO,EAC5B,KAAM,CAACsa,QAAOwB,KAAI,EAAGo2E,GAAe,CAClC7gB,YACA//E,OAAQ,KAAKwG,OAAO2/F,SAAS,EAAI,EACjClF,WAAY,GACZ1gC,OAAQ,GACR8gC,cAAe,GACfH,WAAY,EACd,CAAC,EAEKz0F,EAAWC,KAEjBQ,UAAa,IAAM,CACd8b,EAAK,IACN62D,EAAQhqC,OAAOrrB,CAAG,EAClB/d,EAASiY,QAAO,EAEpB,CAAC,EAEMjY,CACT,CAAC,EAED6tB,EAAI0zE,kBAAkBnuB,EAAS,YAAY,CAC7C,CAEA,MAAO,CAAC/9E,YAAWwrG,0BACrB,CA6EA,MAAcY,WAAY,CACxB,MAAMluG,EAAS,KAAKwG,OAAO2/F,SAAS,EAAI,EAClCgI,EAAU,KAAK/tG,SAAS0qG,qBACxBsD,EAAY,IACZtxF,EAAO,KAAKzH,YAAc84F,EAAQE,kBAAqB,KAAKvE,YAAcqE,EAAQG,kBAAqB,KAAKvE,QAAUoE,EAAQI,cAAgBJ,EAAQK,gBACtJC,EAAc,KAAKtrB,UAAY,KAAK/iF,SAAS2R,mBAAmB28F,eAAe1uG,EAAQ,KAAK2N,GAAG,EAAIsZ,OACnG0nF,EAA4B,KAAKxrB,UAAYgrB,EAAQS,yBAAyB,CAAC5uG,SAAQ2N,IAAK,KAAKA,IAAKwtB,MAAOizE,CAAU,GAAInnF,OAC3H4nF,EAAe,KAAK9E,QAAU,KAAK3pG,SAASkkB,kBAAkBw9E,aAAa9hG,EAAQ,KAAKmkB,OAAO,EAAI8C,OACnG6nF,EAA6B,KAAK/E,QAAUoE,EAAQY,uBAAuB,CAAC/uG,SAAQ8hC,GAAI,KAAK3d,QAASgX,MAAOizE,CAAU,GAAInnF,OAC3H,CAACijF,QAAOc,MAAK,EAAG,MAAMluF,EAAK,CAC/B9c,SACA8Y,KAAMW,GAAgBsI,QAAS,EAC/BoC,QAAS,KAAKA,QACdxW,IAAK,KAAKA,GACZ,CAAC,EACD,KAAKu8F,MAAQA,EACb,KAAKc,KAAOA,EAEZ,MAAM3+F,EAA+B,GACrC,UAAU2J,KAAOk0F,EAAO,CACtB,MAAMjzF,EAAQizF,EAAMl0F,CAAG,EACvB,GAAGiB,EAAMtC,IAAM,kBAAmB,CAChC,MAAMhJ,EAAUwiG,EAAQpD,eACtB9zF,EAAM+3F,MACN/nF,OACA+jF,CACF,EAAE/kF,KAAMgkF,GAAe,CACrB,GAAGA,EAAWt1F,IAAM,kBAAmB,CACrC,OAAOu1F,EAAMl0F,CAAG,EAChB,MACF,CAEAk0F,EAAMl0F,CAAG,EAA0Bi0F,CACrC,CAAC,EACD59F,EAAS8hB,KAAKxiB,CAAO,CACvB,MAAUsL,EAAMtC,IAAM,mBACpB,OAAOu1F,EAAMl0F,CAAG,CAEpB,CAEA,MAAM4xF,EAAesC,EAA8B+E,2BAA6B,GAChFrH,EAAYnhF,QAAS6mF,GAA4B,CAC/C,IAAI3hG,EACD2hG,EAAwB34F,IAAM,iCAC/BhJ,EAAU,KAAKvL,SAAS2R,mBAAmB28F,eAAe1uG,EAAQstG,EAAwBpG,MAAM,EAC/FjhF,KAAM3c,GAAY,CACjB,GAAG,CAACA,EAAS,CACX2L,GAAiB2yF,EAAa0F,CAAuB,EACrD,MACF,CAEA,KAAKluE,SAASruB,IAAIzH,EAAQqE,IAAKrE,CAA0B,CAC3D,CAAC,EAEDqC,EAAU,KAAKvL,SAASkkB,kBAAkBw9E,aAAa9hG,EAAQstG,EAAwBhG,QAAQ,EAC9FrhF,KAAM85D,GAAc,CACnB,GAAG,CAACA,EAAW,CACb9qE,GAAiB2yF,EAAa0F,CAAuB,EACrD,MACF,CAEA,KAAKnxE,QAAQprB,IAAIgvE,EAAUj+C,GAAIi+C,CAAS,CAC1C,CAAC,EAGH1zE,EAAS8hB,KAAKxiB,CAAO,CACvB,CAAC,EAED,MAAMujG,EAAyBzqF,QAAQya,IAAI,CACzCuvE,EACAE,EACAE,EACAC,CAA0B,CAC3B,EAAE7oF,KAAK,MAAM,CAAC3c,EAAS6lG,EAAuBpvB,EAAWqvB,CAAmB,IAAM,CACjF,KAAM,CAAC98F,EAAGuvF,CAAI,EAAIsD,GAAkB,EACpC,GAAG,CAAC77F,GAAW,CAACy2E,EACd,OAAOztE,EAKT,GAAGhJ,EAAS,CAEV,KAAK81B,SAASruB,IAAIzH,EAAQqE,IAAKrE,CAAO,EACtC,MAAM+lG,EAAsBF,EAAsBhwE,MAClD+qE,EAAM9F,MAAQa,GAAa37F,EAAQ86F,KAAK,EACxC8F,EAAMrY,UAAYoT,GAAa37F,EAAQuoF,UAAYvoF,EAAQuoF,UAAUt0D,QAAQ7U,OAAO,CAAC5N,EAAKkgB,IAAMlgB,EAAMkgB,EAAEmE,MAAO,CAAC,EAAI,CAAC,EACrH+qE,EAAM7F,cAAgBY,GAAaoK,CAAmB,EACtDnF,EAAM5F,eAAiBW,GAAa37F,EAAQ4S,SAAWmzF,EAAqB,EAAI,EAEhFxN,EAAM5qF,IAAWA,EAAMkoB,MAAQkwE,EAAqBp4F,EAAM,EAE1D,IAAInM,EACJ,MAAMgG,EAAI,MAAMw+F,GAAiE,CAC/ExkG,EAASwkG,EAAoBr5B,YAE7B,MAAM5pE,EAAWijG,EAAoBpzF,SAASsM,IAAI,KAAKu+E,mBAAmB,EACpE5uD,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EAC3Cw1F,EAAM5qF,IACJA,EAAMkhC,SAAShqB,KAAK,GAAGgqB,EAAS3vB,IAAI,CAAC,CAAC1mB,eAAeA,CAAS,CAAC,EAC/DmV,EAAMm2F,SAAWtiG,EAAS,IACjBqjG,EAAQS,yBAAyB,CACtC5uG,SACA2N,IAAK,KAAKA,IACVwtB,MAAOizE,EACPtjG,QACF,CAAC,EAAEmb,KAAKnV,CAAC,EACPmW,OACGhQ,EACR,GAGH,MAAMnG,EAAEq+F,CAAqB,CAC/B,KAAO,CACL,MAAME,EAAsBD,EAAoBjwE,MAC1CioE,EAAarnB,EAAUqkB,MAC7B8F,EAAM9F,MAAQa,GAAamC,EAAWG,WAAW,EACjD2C,EAAMrY,UAAYoT,GAAamC,EAAWI,iBAAmB,CAAC,EAC9D0C,EAAM7F,cAAgBY,GAAaoK,CAAmB,EACtDnF,EAAM5F,eAAiBW,GAAav/E,KAAKmgF,KAAKuB,EAAWC,gBAAkB,GAAKgI,CAAmB,EAAG,EAAI,EAE1GxN,EAAM5qF,IAAWA,EAAMkoB,MAAQkwE,EAAqBp4F,EAAM,EAE1D,IAAInM,EACJ,MAAMgG,EAAI,MAAMw+F,GAAiE,CAC/ExkG,EAASwkG,EAAoBr5B,YAE7B,MAAM5pE,EAAWijG,EAAoBpzF,SAASsM,IAAI,KAAKu+E,mBAAmB,EACpE5uD,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EAC3Cw1F,EAAM5qF,IACJA,EAAMkhC,SAAShqB,KAAK,GAAGgqB,EAAS3vB,IAAI,CAAC,CAAC1mB,eAAeA,CAAS,CAAC,EAC/DmV,EAAMm2F,SAAWtiG,EAAS,IACjBqjG,EAAQY,uBAAuB,CACpC/uG,SACA8hC,GAAIi+C,EAAUj+C,GACd3G,MAAOizE,EACPtjG,QACF,CAAC,EAAEmb,KAAKnV,CAAC,EACPmW,OACGhQ,EACR,GAGH,MAAMnG,EAAEs+F,CAAmB,CAC7B,CAEA,OAAO98F,CACT,CAAC,EACDjG,EAAS8hB,KAAK+gF,CAAsB,EAEpC,MAAMrH,EAAcqC,EAA8BqF,aAAe,GAC3DzH,EAAaoC,EAA8BsF,YAAc,GACzDC,EAAcvF,EAA8BwF,cAAgB,GAC5DC,EAAqB9H,EAAWr/E,IAAI,KAAKy9E,UAAU,EACnD2J,EAAoB9H,EAAUt/E,IAAI,KAAKy9E,UAAU,EACjD4J,EAAsBJ,EAAWjnF,IAAI,KAAKy9E,UAAU,EAE1D,OAAOxhF,QAAQya,IAAI7yB,CAAQ,EAAE4Z,KAAK,IAAM,CACtC,MAAM6pF,EAAsBlI,EAAYp/E,IAAK8kF,GACpC,KAAKrG,iBAAiBqG,CAAuB,CACrD,EAEKyC,EAAqB,KAAK5sB,UAAY,KAAK8jB,iBAAiB,CAChEtyF,EAAG,iCACHuyF,OAAQ,KAAKv5F,IACbuO,SAAU,EACV21E,UAAW,EACXuS,MAAO,CACR,EAAEn9E,OAAWA,OAAWA,OAAW,EAAI,EAAIA,OAEtC5a,EAAW,CACfoY,QAAQya,IAAI4wE,CAAmB,EAC/BrrF,QAAQya,IAAIywE,CAAkB,EAC9BlrF,QAAQya,IAAI0wE,CAAiB,EAC7BnrF,QAAQya,IAAI2wE,CAAmB,EAC/BX,EACAa,CAAkB,EAGpB,OAAOtrF,QAAQya,IAAI7yB,CAAQ,CAC7B,CAAC,CACH,CAEA,MAAaisB,KAAK9xB,EAAgBmH,EAAcwW,EAAkB,CAChE,KAAKriB,UAAUokB,UAAUS,IAAI,sBAAsB,EAEnD,KAAKngB,OAASA,EACd,KAAKmH,IAAMA,EACX,KAAKwW,QAAUA,EACf,KAAKib,SAAW,IAAIjc,IACpB,KAAKgZ,QAAU,IAAIhZ,IACnB,KAAKukF,YAAch7F,KAEhBiB,EACD,KAAKw1E,UAAY,GACTh/D,EACR,KAAK4lF,QAAU,IAEf,KAAK10F,YAAc,MAAM,KAAKjV,SAAS4vG,gBAAgB36F,YAAY7O,CAAM,EACzE,KAAKsjG,YAAc,MAAM,KAAK1pG,SAAS4vG,gBAAgBlG,YAAYtjG,CAAM,GAG3E,KAAK8mF,SAAS,KAAKj4E,YAAc,aAAgB,KAAKy0F,YAAc,mBAAsB,KAAKC,QAAU,kBAAoB,gBAAkB,EAE/I,MAAMp+F,EAAU8Y,QAAQya,IAAI,CAC1BwlE,GAAY,EACZ,KAAKgD,YACL,KAAKwG,UAAS,CAAE,CACjB,EAEK,CAAC77D,EAAMuD,CAAO,EAAI9mC,GAAa,EAAK,EAEpC0F,EAAU,MAAM49B,GAAiB,CACrC9xC,MAAOA,IAAMiE,EAAK,cAAc,EAChC2sB,YAAaA,IAAM3sB,EAAK,yBAAyB,EACjDwtC,UAAW,aACXpwC,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvC4uB,OACAC,WAAY,EACd,CAAC,EAED,KAAK0S,WAAWnP,OAAOrhC,CAAO,EAC9B7I,EAAQsa,KAAK,MAAM,CAACtR,EAAGs7F,EAAIC,CAAM,IAAM,CACrCC,QAAQ7pE,IAAI,KAAK4jE,MAAO,KAAK9qE,SAAU,KAAKjD,OAAO,EACnD,MAAM3R,EAAMjY,SAAS6Y,cAAc,KAAK,EACxC,KAAK45B,WAAWnP,OAAOrrB,CAAG,EAC1B,MAAM9b,EAAUiV,GAAO,IAAM,KAAKgkF,WAAW,GAAGuI,CAAM,EAAG1lF,CAAG,EAG5D,GAFA,KAAK+O,cAAczV,iBAAiB,UAAWpV,CAAO,EAEnD8N,GAAS2O,YAAY,YAAY,EAAG,CACrC,MAAM42B,EAAwB,CAAC,CAAC0oB,QAAS,GAAG,EAAG,CAACA,QAAS,GAAG,CAAC,EACvD1qE,EAAoC,CAACkD,SAAU,IAAKyvC,KAAM,WAAYm4B,OAAQ,eAC9EulC,EAAa,CACjB57F,EAAQ0W,QAAQ62B,EAAWhiD,CAAO,EAClCyqB,EAAIU,QAAQ62B,EAAUinC,MAAO,EAACnsD,QAAO,EAAI98B,CAAO,CAAC,EAGnD,MAAM0kB,QAAQya,IAAIkxE,EAAW5nF,IAAK2pB,GAAcA,EAAUk+D,QAAQ,CAAC,CACrE,CAEAz6D,EAAQ,EAAI,CACd,CAAC,CACH,CACF,CCrgCO,MAAM06D,EAAW,CAStB,YAAY,CACV,QAAAl/E,EACA,OAAAjB,EACA,cAAAogF,EACA,eAAAv7E,EACA,IAAAvrB,EACA,cAAA+mG,EACA,QAAAn8E,CAAA,EASC,CA8DH,KAAO,SAAW,CAAC5qB,EAAc,KAAK,MAAQ,CAC5Ci/B,GAAoBj/B,CAAG,EACd+oB,GAAA,CAAC,YAAa,aAAa,GAGtC,KAAO,UAAY,CAAC/oB,EAAc,KAAK,MAAQ,CAC7C8uC,GAAc,oBAAoB,CAChC,SAAWv4C,GAAW,CACpBC,EAAU,SAAS,mBAAmB,SAAS,CAAC,OAAAD,EAAQ,KAAMyJ,EAAI,EACrD26B,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,CACpC,EACD,GAxED,KAAK,cAAgBuwG,EAErB,MAAME,EAAgB,KAAK,UAAY,SAAS,cAAc,KAAK,EACrDA,EAAA,UAAU,IAAI,uBAAuB,EAE7C,MAAAthE,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAe,aAAa,EAE/C,MAAMtoC,EAAO,KAAK,YAAc,SAAS,cAAc,KAAK,EACvDA,EAAA,UAAU,IAAI,kBAAkB,EAEjC,IAAA6pG,EACDt/E,EACDs/E,EAAc10C,GAAiB,CAC7B,QAAA5qC,EACA,UAAW,cACX,cAAe,CAAC,SAAU,EAAI,EAC9B,eAAA4D,CAAA,CACD,EACQw7E,IACTE,EAAcnvE,GAAW,OAAQ,CAAC,SAAU,EAAK,GACjD1kB,EAAiB6zF,EAAa,IAAM,KAAK,WAAY,CAAC,eAAA17E,EAAe,GAGpE07E,GAAyBA,EAAA,UAAU,IAAI,kBAAkB,EAEzD,CAACvgF,GAAUA,IAAW,KACvBA,EAASqJ,GAAO,GAAI,CAAC,KAAM,WAAY,GACvC,KAAK,WAAarJ,EAAO,iBACzBtT,EAAiBsT,EAAQ,IAAM,CAC1B,KAAK,cAAe,KAAK,cAAc,EACrC,KAAK,UAAU,GACnB,CAAC,eAAA6E,CAAA,CAAe,GAGlB7E,IACD,KAAK,OAASA,EACdA,EAAO,UAAY,oDAGlB1mB,GAAK,KAAK,OAAOA,CAAG,EACvBgrB,GAAO0a,CAAI,EACXA,EAAK,OAAO,GAAG,CACbtoC,EACA6pG,CAAA,EACA,OAAO,OAAO,CAAC,EAEHD,EAAA,OAAOthE,EAAMhf,GAAU,EAAE,EAEtBtT,EAAAsyB,EAAM9a,IAAY,IAAM,KAAK,YAAa,CAAC,eAAAW,EAAe,CAC7E,CAEO,OAAOvrB,EAAa,CACzB,IAAIlE,EAAIkE,EACLlE,EAAE,SAAS,IAAI,IACZA,EAAAkE,EAAI,MAAM,IAAI,EAAE,MAAM,CAAC,EAAE,KAAK,IAAI,GAExC,KAAK,YAAY,gBAAgB7C,GAAcrB,CAAC,CAAC,EACjD,KAAK,IAAMkE,CACb,CAeF,CAEA,MAAqBknG,WAA2B/uE,EAG7C,CAHH,kCAmBE,KAAO,4BAA8B,IAAM,CACzC,GAAG,MAAK,WAAW,UAAU,SAAS,MAAM,EAC5C,OAAO0K,GAAkB,CACvB,mBAAoB,iCACpB,OAAQ,CACN,SAAU,GACV,QAAS,uBACX,EACD,GAuLH,mBAAiB3sC,GACZ,CAACA,GAAQ,CAAC,KAAK,gBAIfA,EAAK,IAAM,OACL,GAGF,CAAC,CAACD,GAAuBC,CAAI,EAAE,QAAUsxC,GAAUtxC,EAAkC,cAAc,EAG5G,oBAAkBH,GAAmB,CAEhC,GADH,KAAK,kBAAkBA,CAAM,EAC1B,CAAC,KAAK,eACP,OAGF,MAAMsV,EAAU,CAAC,GAAG,KAAK,SAAS,QAAQ,EACpC5E,EAAO,KAAK,eAAe,MAAM,IAAKvQ,GAAS0G,GAAU1G,CAAI,CAAC,EAC9DixG,EAAS1gG,EAAK,SAAW4E,EAAQ,QAAU5E,EAAK,MAAOlQ,GAAW8U,EAAQ,SAAS9U,CAAM,CAAC,EAChG,KAAK,WAAW,UAAU,OAAO,OAAQ4wG,CAAM,GAGjD,mBAAgB,MAAM97F,GAAsB,CAC1C,MAAMzI,EAAWyI,EAAQ,IAAI,MAAM9U,GAAW,CAC5C,MAAML,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQK,CAAM,EAEzD2+B,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,UAAW,KAAK,SAAS,KACzB,cAAe,GACf,WAAY,aACZ,UAAW,GACX,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEK,CAAC,IAAAykC,CAAO,EAAA9F,EAET,gBAAW,IAAI3+B,EAAQ2+B,CAAa,EAEzC,MAAM+Y,EAAW,KAAK,SAAS,SAAS,IAAI13C,CAAM,EAClDykC,EAAI,YAAY,OAAO,KAAK,SAAS,SAASiT,CAAQ,CAAC,EAGjD,MAAAm5D,EAAY,KAAK,cAAclxG,CAAI,EACrCkxG,GACEpsE,EAAA,YAAY,UAAU,IAAI,aAAa,EAGzC,IAAA7L,EACDj5B,EAAK,IAAM,OACZi5B,EAAWr0B,EAAK5E,EAAK,OAAO,IAAM,8BAAgC,8BAA8B,EACvFkxG,EAGTj4E,EAAW,MAAMyO,GAAqB1nC,EAAK,GAAI,OAAWA,CAAI,EAF9Di5B,EAAWr0B,EAAK,yBAAyB,EAKvCkgC,EAAA,gBAAgB,OAAO7L,CAAQ,EACpC,EAED,OAAO,QAAQ,IAAIvsB,CAAQ,EAAE,KAAK,IAAM,EAAE,EAC5C,CArPA,OAAc,aAAc,CACnB,OACL,cAAe0L,GAAa,6BAA6B,gBAAgB,EAE7E,CAEA,MAAa,KAAKxV,EAA0DouG,GAAmB,cAAe,CAC5G,KAAK,UAAU,UAAU,IAAI,wBAAyB,yBAAyB,EAC1E,aAAU,SAAS,cAAc,KAAK,EACtC,aAAQ,UAAU,IAAI,SAAS,EAC/B,qBAAkB,IAAIlwG,GAAK,YAChC,KAAK,QAAQ,OAAO,KAAK,gBAAgB,OAAO,EAC3C,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,mBAAmB,EAClD,gBAAa8gC,GAAW,6BAA6B,EAErD,YAAO,OAAO,KAAK,UAAU,EAE7B,oBAAiB,IAEtB,KAAK,QAAQ,SAEb,KAAK,SAAS,yBAAyB,EAEvC,KAAK,eAAe,IAAIthC,CAAS,EAAE,gBAAkB4oB,GAAW,CAC3D,KAAK,OAAO,KAAOA,EAAO,KAC3B,KAAK,OAASA,EAChB,CACD,EAEG,IAAAioF,EACJ,GAAG,KAAK,eAAgB,CACtB,MAAM/1F,EAAU+1F,EAAc,IAAIztE,GAAe,CAAC,KAAM,aAAa,EAE/D0tE,EAAyB,IAAIT,GAAW,CAC5C,QAAS,CAAC,CACR,KAAM,OACN,KAAM,WACN,QAAS,IAAMS,EAAW,SAAS,GAClC,CACD,KAAM,SACN,UAAW,SACX,KAAM,aACN,QAAS,IAAM,CACb,KAAK,SAAS,eAAe,qBAC3B,KAAK,OAAO,GACZ,KAAK,eAAe,GACtB,EAAE,KAAK,IAAM,CACN,mBAAc,cAAc,QAAQ,EACzC,KAAK,MAAM,EACZ,CACH,EACD,EACD,eAAgB,KAAK,eACrB,IAAK,KAAK,eAAe,IAC1B,EAEOh2F,EAAA,QAAQ,OAAOg2F,EAAW,SAAS,CAC7C,CAEA,CACE,MAAMC,EAAY,KAAK,eAAiB,IAAIvwG,GAAK,YAE5C,cAAW,IAAI80C,GAAe,CACjC,WAAY,KAAK,iBAAiB,IAAI,EACtC,SAAU,KAAK,UACf,SAAU,KAAK,eACf,SAAU,CAAC,EACX,kBAAmB,KAAK,cACxB,uBAAwBy7D,EAAU,QAClC,eAAgB,6BAChB,SAAU,KAAK,SACf,SAAU,GACV,YAAa,GACd,EAED,KAAK,SAAS,WAAW,sBAAsB,KAAK,SAAS,EAG7D,MAAMC,GADgB,KAAK,gBAAgB,OAAS,IAChB,IAAKtxG,GAAS0G,GAAU1G,CAAI,CAAC,EAC5D,cAAS,WAAWsxG,CAAa,EAEtC,MAAMC,EAAkB5/D,GAAa2/D,EAAc,OAAO,KAAK,OAAO,cAAc,CAAC,EAE/EE,EAAQ,MAAM,QAAQ,IAAID,EAAgB,IAAKlxG,GAAW,KAAK,SAAS,gBAAgB,QAAQA,CAAM,CAAC,CAAC,EACxGoxG,MAA4C,IAC5Ct8F,MAA4C,IAC5Cu8F,MAA6C,IAC7CF,EAAA,QAASxxG,GAAS,CACtB,MAAMK,EAASL,EAAK,GAAG,SAASA,EAAK,IAAM,MAAM,EACzCmV,EAAA,IAAInV,EAAMK,CAAM,EACfqxG,EAAA,IAAIrxG,EAAQL,CAAI,EAEzB,IAAI2xG,EAAS,EACT,KAAK,cAAc3xG,CAAI,EAEjB,KAAK,SAAS,SAAS,IAAIK,CAAM,IAChCsxG,EAAA,GAFAA,EAAA,GAKHF,EAAA,IAAIzxG,EAAM2xG,CAAM,EACzB,EACKH,EAAA,KAAK,CAACzoG,EAAGwsB,IAAMk8E,EAAQ,IAAIl8E,CAAC,EAAIk8E,EAAQ,IAAI1oG,CAAC,CAAC,EAC/C,cAAS,kBAAkByoG,EAAM,IAAKxxG,GAASmV,EAAQ,IAAInV,CAAI,CAAC,CAAC,EAEtE,MAAM4xG,EAAO,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,EAC5C,cAAS,IAAOxxG,GAAY,CACzB,MAAAC,EAASD,EAAQ,IAAI,SAAS,EAC9B4+B,EAAgB,KAAK,WAAW,IAAI3+B,CAAgB,EACpD,CAAC,UAAA8B,CAAa,EAAA68B,EACpB,GAAG78B,EAAU,UAAU,SAAS,aAAa,EAAG,CAC1C,IAAAgR,EACD9S,EAAO,SACM8S,EAAA,+BAGCA,EADFu+F,EAAS,IAAIrxG,CAAM,EACK,OAAO,UAAY,oCAAsC,kCAGvFwyB,GAAA,CAAC,YAAA1f,EAAY,EACtBgvC,GAAMhgD,CAAS,EACf,MACF,CAEA,OAAOyvG,EAAKxxG,CAAO,GAGrB,MAAMs+F,EAAU,KAAK,SAAS,OAAO,KAAK,KAAK,QAAQ,EAClD,cAAS,OAAS,IAAIxsF,IAAS,CAClC,MAAM7R,EAAS6R,EAAK,CAAC,EAAE,SAAS,EAChC,OAAG,KAAK,SAAS,SAAS,MAAQ,GAChCiwC,GAAM,KAAK,WAAW,IAAI9hD,CAAM,EAAE,SAAS,EACpC,IAGFq+F,EAAQ,GAAGxsF,CAAI,EAE1B,CAEiB,OAAAgL,EAAA,KAAK,WAAY,IAAM,CACtC,MAAM8c,EAASpJ,GAAiB,CAAC,KAAK,UAAU,EAAG,EAAI,EACvD,KAAK,SAAS,eAAe,mBAC3B,KAAK,OAAO,GACZ,KAAK,eAAe,IACpB,CAAC,GAAG,KAAK,SAAS,QAAQ,EAC1B,KAAK,OAAO,OACZ,KAAM8sE,GAAmB,CACpB,mBAAc,cAAc,OAAQA,CAAc,EACvD,KAAK,MAAM,CACb,EAAIn4D,GAAoB,CACf,MAAAvL,IACDuL,CAAA,CACP,CACA,GAAC,eAAgB,KAAK,cAAe,GAEnC,cAAS,WAAW,QAAQ,GAAG,CAClC,KAAK,iBACL,KAAK,QACL4rE,GAAa,WACb,OAAO,OAAO,CAAC,EAEjB,KAAK,kBAAkB,EAEhB,QAAQ,IAAI,CACjB,KAAK,qBAAuBvuG,EAAE,cAAc,KAAK,MAAMi+B,GAAO,CACtD,MAAA1oB,EAAS,MAAM0oB,EAAG,CACtB,UAAW,KAAK,iBAChB,KAAM,GACN,SAAU,GACV,MAAO,GACP,OAAQ,GACT,EAED,YAAK,UAAY1oB,EAEVC,GAAa,kBAAkBD,CAAM,EAC7C,EACF,CACH,CAqEQ,kBAAkBtY,EAAS,KAAK,eAAiB,KAAK,eAAe,MAAM,OAAS,OAAW,CACjG,KAAK,gBAIP,KAAK,gBAAgB,OAAO,CAC1B,IAAK,gCACL,KAAM,CACJmB,GAAc,KAAK,OAAO,KAAK,EAC/B4D,EAAK,QAAS,CAAC/E,CAAM,CAAC,CACxB,EACD,EAED,KAAK,eAAe,OAAO,CACzB,IAAK,gBACL,KAAM,CAACA,CAAM,EACd,IAdD,KAAK,gBAAgB,iBAAiB,CAAC,IAAK,sBAAuB,GACnE,KAAK,eAAe,iBAAiB,CAAC,IAAK,4BAA6B,GAe5E,CAEA,oBAAqB,CACd,0BAAqB,KAAK,IAAM,CACnC,KAAK,UAAU,SAAW,GAC1B,KAAK,UAAU,MAAK,CACrB,CACH,CACF,6OCvZe,MAAMgyG,WAAsB1hF,EAAa,CAGtD2hF,YACUC,EACAC,EACAC,EACR,CACA,MAAM,+BAAgC,CACpCC,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACNkiB,YAAa,GACb/sD,WAAY,GACZgtD,eAAgB,GAChBC,OAAQ,GACR3xG,MAAO,EACT,CAAC,EAAE,KAbKoxG,OAAY,KACZC,QAAmC,KACnCC,kBAaR,KAAKM,SAAW,CAAC,CAACN,EAClB,KAAKO,UAAS,CAChB,CAEQxK,WAAWyK,EAAyB,OAAAC,EAAA,KACpCC,EAAS,CAAC,CAAC,KAAKV,gBAAgBW,UAChChlE,EAA4B+kE,EAAS,uBAAyB,mBACpE,KAAKhyG,MAAMwmG,gBAAgBviG,EAAKgpC,CAAY,CAAC,EAE7C,MAAM9jC,EAAM,KAAKyoG,UAAY,CAACI,EAAS,GAAK,yBAA2B,KAAKZ,KAEtEX,EAAa,IAAIT,GAAW,CAChCngF,OAAQ,GACR6E,eAAgB,KAAKA,eACrBvrB,MACA+mG,cAAe,CAAC/mG,EAChB4qB,QAAS,CAAC5qB,IAAQ,IAAM,CACtB+oB,GAAS,CAAC1f,YAAa,2BAA2B,CAAC,GAEvD,CAAC,EAEEs/F,IACDA,EAAWlsF,UAAUS,IAAI,kBAAkB,EAC3CoqF,EAAWjvG,UAAU0wG,YAAYJ,CAAU,GAG7C,MAAMK,EAAYzyG,GAAc,OAAAkoG,EAAA,YAAAnlF,EAC7B2vF,GAAS,CACR1yG,OAAQA,EACRq0B,QAASA,IAAM,CACb6zE,EAAKyK,iBAAiB,IAAM,CAC1BvuE,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,CACpC,CAAC,CACH,CAAC,IAIC4yG,EAAa,KAAKhB,gBAAgB/kF,OAAOgmF,aAEzCtzB,EAAal5E,GAAU,KAAKurG,gBAAgBkB,OAAO,EACnD3M,EAAW,KAAKyL,gBAAgBmB,OAAS1sG,GAAU,KAAKurG,gBAAgBmB,KAAK,EAE7EC,EAAiB,KAAKpB,gBAAgBqB,iBAAmBL,EAAargG,SAAS6Y,cAAc,GAAG,EAAInE,OACvG+rF,IACDA,EAAe5T,KAAO,IACtB4T,EAAen9D,OAAOtxC,EAAK,4BAA4B,CAAC,EACxDsY,EAAiBm2F,EAAgB,IAAM,CACrC,KAAKL,iBAAiB,IAAM,CAC1BvuE,GAAaspE,aAAa,CACxB1tG,OAAQu/E,EACRyd,UAAW,KAAK4U,gBAAgBqB,eAClC,CAAC,CACH,CAAC,CACH,EAAG,CAACj+E,eAAgB,KAAKA,cAAc,CAAC,GAG1C,MAAMk+E,EAAc/M,EAClBA,IAAalmG,EAAU+U,KACrBzQ,EAAK,yBAAyB,EAC9BA,EAAK,0BAA2B,CAAC,IAAIwS,GAAU,CAAC/W,OAAQmmG,CAAQ,CAAC,EAAE3xF,OAAO,CAAC,EAC3Ew+F,EAEJ,IAAI9qG,EAAwC,CAC1C,CAAC,eAAgBuqG,EAASlzB,CAAU,CAAC,EACrC,CAAC,aAAc4mB,EAAWsM,EAAStM,CAAQ,EAAI5hG,EAAK,qBAAqB,CAAC,EAC1E,CAAC,eAAgBA,EAAK,6BAA8B,CAAC4uG,GAAqB,KAAKvB,gBAAgBwB,MAAM,CAAC,CAAC,CAAC,EACxG,CAAC,KAAKlB,UAAY,CAAC,iBAAkBgB,CAAW,EAChD,CAAC,eAAgBp5C,GAAmB,KAAK83C,gBAAgBh/F,KAAMqU,OAAW,EAAI,CAAC,CAAC,EAElF/e,EAAUA,EAAQ2gB,OAAO2F,OAAO,EAEhC,MAAM6kF,EAAYh+D,GAAgB9oC,GAAM,CACtCqQ,GAAYrQ,CAAC,EACb,KAAKomG,iBAAiB,IAAM,CAC1BnB,GAAc8B,cAAc7pG,EAAK,EAAI,CACvC,CAAC,CACH,CAAC,EAED,IAAIwiD,EACJ,MAAM38C,GAAG,WAAA4S,EAAAC,GAAA,EAAAK,EAAAN,EAAAS,WAAAD,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAA26D,YAAA/tD,EAAAuhE,EAAAxT,YAAA7tD,EAGOy8B,EAAG,cAAAz8B,GAAAC,cAAAD,EAAA9M,CAAA,EAAHupC,EAAGvpC,EAAAE,EAAAiuE,EAAA,IACuBtsF,EAAKgpC,CAAY,CAAC,EAAA3qB,EAAA0M,EAGlDgjF,MACE/tG,EAAK,kBAAkB,EACvBA,EACE4hG,IAAalmG,EAAU+U,KAAO,qBAAwBmxF,EAAW,2BAA6B,2BAC9FA,EAAW,CAAC,IAAIpvF,GAAU,CAAC/W,OAAQmmG,CAAS,GAAE3xF,OAAO,EAAIyS,MAC3D,CAAC,EAAArE,EAAAV,EAIR6uF,MAAWjvG,UAAS,MAAA8gB,EAAAV,EAAAa,EACpBwwF,GAAK,CAACrrG,QAASA,CAAO,SAAA0a,EAAAV,GAAA,WAAAW,EAAAC,EACrB,KAACuvF,EAAKH,UAAY,CAACI,CAAM,YAA1BzvF,EAAA,eAAA8gC,EAAAlhC,KAAAG,SAAA+gC,EAAA,IAEI2uD,EACC/tG,EAAK,uBAAwB,CAACu1D,GAAmBu4C,EAAKT,gBAAgBW,UAAWtrF,OAAW,EAAI,CAAC,CAAC,EAClGorF,EAAKH,UAAY,CAACG,EAAKT,gBAAgBF,KACrCntG,EAAK,0BAA0B,EAC/BA,EAAK4hG,EAAW,4BAA8B,4BAA6B,CAACkN,CAAS,CAAC,CAAC,EAAA1vD,KAG9F,WAAAzhC,MAIL4J,GAAmBmgC,EAAM,0BAAyBmlC,OAAOoiB,iBAAmB,EAAI,MAAQ,EAAG,MAAK,EAEhG,MAAMC,EAAa,CAAC,KAAKvB,UAAY,CAACI,EACtC,YAAKoB,WAAW79D,OAAOtxC,EAAMkvG,EAAoB,kBAAP,IAAwB,CAAC,EACnE,KAAKC,WAAWxtF,UAAUS,IAAI,qBAAqB,EACnD,KAAKsrF,OAAOp8D,OAAO,KAAK69D,UAAU,EAClC,KAAK7jB,KAAKjjB,MAAM,KAAKqlC,MAAM,EAC3B,KAAKA,OAAO/rF,UAAUS,IAAI,YAAY,EAEtC9J,EAAiB,KAAK62F,WAAY,IAAM,CACtC,GAAG,CAACD,EAAY,CACd,KAAKphE,KAAI,EACT,MACF,CAEAm/D,GAAcmC,cAAc,KAAKjC,KAAM,KAAKgC,WAAY,IAAI,CAC9D,EAAG,CAAC1+E,eAAgB,KAAKA,cAAc,CAAC,EAEjC1lB,CACT,CAEA,MAAc6iG,WAAY,CAExB,GADA,KAAKP,kBAAL,KAAKA,gBAAoB,MAAM,KAAKxxG,SAASwzG,mBAAmBC,cAAc,KAAKnC,IAAI,GACpFj+F,GAA4B,KAAKm+F,eAAe,EAAG,CACpD,KAAKvnF,QAAO,EACZmsB,GAAakmB,KAAK,CAChBo3C,KAAM,KAAKlC,gBACXD,MAAO,KAAKA,KACd,CAAC,EACD,MACF,CAEA,IAAIS,EACJ,GAAG,KAAKF,UAAY,CAAC,KAAKN,gBAAgBW,UAAW,CACnD,KAAM,CAACvqF,SAAQqwE,aAAW,EAAIP,GAAY5tE,OAAO,CAC/C7D,MAAO,IACPC,OAAQ,GACR3kB,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvC7hB,eAAgB,iBAChBm1F,OAAQ,CACNgd,eAAgB,IAChB9rG,MAAOwR,GAAgBsI,QAAS,EAAG,SAAW,CAChD,CACF,CAAC,EAED,MAAMs2E,EACN+Z,EAAapqF,CACf,CAEA,MAAMwC,EAAMjY,SAAS6Y,cAAc,KAAK,EACxC,KAAK45B,WAAWnP,OAAOrrB,EAAK,KAAKkpF,UAAU,EAC3C,MAAMhlG,EAAUiV,GAAO,IAAM,KAAKgkF,WAAWyK,CAAU,EAAG5nF,CAAG,EAC7D,KAAK1G,iBAAiB,oBAAqBpV,CAAO,EAClD,KAAKguD,KAAI,CACX,CAEA,aAAoB42C,cAAc7pG,EAAao6B,EAAqB,CAClE,MAAM7jC,EAAS,MAAMu4C,GAAcy7D,uBACnC/zG,EAAUG,SAAS2R,mBAAmBkiG,SAAS,CAC7Cj0G,SACA6G,KAAM4C,CACR,CAAC,EAEEo6B,EACDO,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,EAElCwyB,GAAS,CACP1f,YAAa7S,EAAU+U,OAAShV,EAC9B,sCACA,8BACFk0G,kBAAmB,CAAC,MAAMvhG,GAAc,CAAC3S,QAAM,CAAC,CAAC,CACnD,CAAC,CAEL,CAEA,aAAoB2zG,cAAcjC,EAAcvhF,EAAqBqc,EAAqB,CACxF,MAAM7S,EAASpJ,GAAiBJ,EAAQ,EAAI,EAC5C,GAAI,CACF,MAAML,GAAaqkF,SAASP,mBAAmBD,cAAcjC,CAAI,EACjEllE,EAAM6F,KAAI,EACV7f,GAAS,CAAC1f,YAAa,qBAAqB,CAAC,CAC9C,OAAO3B,EAAK,CACX,GAAIA,EAAiBkT,KAAK+vF,SAAS,2BAA2B,EAAG,CAC/D5nE,EAAM6F,KAAI,EACV,MAAMupB,EAAY,CAAEzqD,EAAiBkT,KAAKgwF,MAAM,GAAG,EAAEC,MACrD,IAAInkF,EACJmc,GAAkB,CAChBiB,aAAc,gCACdC,mBAAoB,4BACpB4T,oBAAqB,CACnB0Y,GAAmB8B,CAAS,EAC5BvmB,GAAe,IAAM,CACnBiB,GAAmBnmB,EAAO3b,OAAO,EACjCg4B,EAAM6F,KAAI,EACV,KAAKihE,cAAc,yBAA2B5B,CAAI,CACpD,CAAC,CAAC,EAEJvhF,OAAQA,EAAS,CACfxe,QAAS,KACT4iG,SAAU,EACZ,CACF,CAAC,CACH,CAEApE,QAAQjrE,MAAM,iBAAkB/zB,CAAG,EACnCwoB,GACF,CACF,CACF,sSC1OM66E,GAAoBpB,GACjBA,IAAW,GAAK,MAASA,IAAW,EAAI,QAAU,OAGrDqB,GAAiBA,CAACpmF,EAAci3B,IAAe,CACnD,MAAMovD,GAAQpvD,EAAKj3B,GAAQ,MAC3B,OAAO3I,KAAKC,MAAM+uF,EAAO,EAAE,CAC7B,EAEaC,GAAoB9kG,GAK3B,CACJ,KAAM,CAAC+kG,YAAY/kG,EAAMglG,SACnBC,EAASjlG,EAAMglG,SAAkDC,MACjE1B,EAAUvjG,EAAMglG,SAA6CzB,OAC7D2B,EAASD,EAASjlG,EAAMglG,SAAkDE,QAAUllG,EAAM4wC,UAAUu0D,6BAA+B,GAAKJ,EACxIt6E,EAAM,IAAI5B,GAAI,CAClB6U,aAAcunE,EAAQ,QAAU,iCAChC3zD,cAAe,CAAC2zD,GAASF,CAAQ,EACjCK,gBAAiBH,EAAQ,uBAAyB,4BAClDI,iBAAkB,CAACN,EAAUrwG,EAAK,0BAA2B,CAAC6uG,CAAM,CAAC,CAAC,EACtE90E,UAAWzuB,EAAMyuB,UACjBtJ,eAAgBnlB,EAAMmlB,eACtB+lB,aAAco6D,GAAY,CAACJ,SAAO,CACpC,CAAC,EAEDz6E,EAAIh6B,MAAM4lB,UAAUS,IAAI,WAAW,EACnC,MAAMvU,EAAQkoB,EAAI86E,YAAY,YAAY,EACpC1xF,EAASqF,GAAU,CAAC5nB,KAAM,EAAE,CAAC,EACnC,OAAG2zG,EACDpxF,EAAO3S,IAAI,CAACmY,KAAM,OAAQjhB,MAAO,OAAO,CAAC,EAEzCyb,EAAO3S,IAAI,CAACmY,KAAM,eAAgBjhB,MAAOusG,GAAiBpB,CAAM,CAAC,CAAC,EAEpEhhG,EAAMyjC,OAAOnyB,EAAOhJ,IAAI,EAEjB4f,EAAIx4B,SACb,EAEO,SAASuzG,GAAKxlG,EAMlB,CACD,MAAMoM,EAAYpM,EAAMmT,MAElBsyF,EAAWzlG,IAGf,WAAAqS,EAAAC,GAAA,EAAAK,EAAAN,EAAAS,WAAAD,EAAAF,EAAAG,WAAAC,SAAAJ,EAAA,IAGO3S,EAAMif,SAAQpM,CAAA,EAAAN,GAAAiN,OAAAnN,EAFP3H,GAAW,2BAA6B,GAAE0B,CAAU,MAAK,CAAC,GAAAiG,CAAA,KASpEqzF,EAAc1lG,IAIlB,WAAAghF,EAAApuE,KAAAG,SAAAiuE,EAIKhhF,MAAMif,QAAQ,EAAA1M,OAAAiN,GAAAwhE,EAFRt2E,GAAY,GAAE0B,CAAU,WAAWpM,EAAMwiC,MAAQ,MAAM,CAAC,GAAAw+C,CAAA,KAOrE,IAAI2kB,EAAsBttG,EAC1B,MAAMoH,EAAG,aAAAggB,EAAA7M,KAAA+M,EAEKgmF,EAAI,cAAAhmF,GAAAC,cAAAD,EAAAF,CAAA,EAAJkmF,EAAIlmF,EAAA1M,EAAA0M,EAAAvM,EACX2pD,GAAG,KAACC,MAAI,QAAE98D,EAAMilB,IAAI,EAAAhG,SAAI9kB,GACvB+Y,EACGuyF,EAAO,CAAAxmF,SAAE9kB,CAAI,EAEjB,IAAAoY,GAAAiN,OAAAC,EALoB/U,GAAW,sBAAwB,GAAE0B,CAAU,OAAM,CAAC,GAAAqT,CAAA,iBAAAq0B,EAAAlhC,KAAAypD,EAOnEhkE,EAAO,cAAAgkE,GAAAz8C,cAAAy8C,EAAAvoB,CAAA,EAAPz7C,EAAOy7C,EAAA/gC,EAAA+gC,EAAA5gC,EACd2pD,GAAG,KAACC,MAAI,QAAE98D,EAAM3H,OAAO,EAAA4mB,SAAGA,CAAC9kB,EAAM0P,IAChCqJ,EACGwyF,EAAU,KAACljE,MAAI,QAAE34B,EAAO,IAAK7J,EAAMypB,KAAK,EAAAxK,SAAG9kB,CAAI,EAEnD,IAAAoY,GAAA,IAAAiN,GAAAs0B,EALuBppC,GAAY,GAAE0B,CAAU,WAAU,CAAC,GAAA0nC,CAQhE,MAEK3uB,EAAiB,IAAImD,GAC3BxpB,UAAU,IAAM,CACdqmB,EAAeygF,UAAS,CAC1B,CAAC,EAEiBz7B,GAChBw7B,EACAttG,EACCoxB,GAAQ,CACPzpB,EAAMygB,SAASgJ,CAAG,CACnB,EACDrS,OACAA,OACAA,OACA+N,CACF,EACUnlB,EAAMypB,IAAG,CAAE,EAEdhqB,CACT,CAEe,MAAMomG,WAAqB9zE,EAAwB,CAAnD,kCA4OL+zE,sBAAc,MAAMC,GAAiB,CAC3C,MAAMb,EAAS,GAAKa,EAAM/vF,YAAc,GAClCutF,EAASqB,GAAemB,EAAMhjG,KAAMgjG,EAAMC,OAAO,EACvD,IAAI71G,EAAS41G,EAAM1P,SAASC,SAAS,EAAK,EACvCnmG,IAAWC,EAAU+U,MAAQ4gG,EAAM/oF,OAAOipF,YAC3C91G,EAASinB,QAGX,IAAI2N,EACDmgF,EAAS,IACVngF,EAAQriB,SAAS6Y,cAAc,MAAM,EACrCwJ,EAAM1O,UAAUS,IAAI,qBAAsB,mBAAmB,EAC7DiO,EAAMihB,OAAO50C,GAAK,OAAO,EAAI,IAAG8zG,CAAO,EAAC,GAG1C,IAAIz0G,EACDN,GACDM,EAAQ,MAAMqS,GAAc,CAAC3S,QAAM,CAAC,EACpCM,EAAM4lB,UAAUS,IAAI,kBAAkB,GAC9BivF,EAAMd,MACdx0G,EAAQiE,EAAK,QAAS,CAACqxG,EAAMd,KAAK,CAAC,EAEnCx0G,EAAQiE,EAAKqxG,EAAM/oF,OAAOipF,UAAY,oBAAsB,yBAAyB,EAGvF,IAAIl9E,EACD54B,GAAU41G,EAAMd,MACjBl8E,EAAWr0B,EAAK,mBAAoB,CAACwwG,EAAQj7C,GAAmB87C,EAAMC,QAAS5uF,OAAW,EAAI,CAAC,CAAC,GAEhG2R,EAAWrmB,SAAS6Y,cAAc,MAAM,EACxCwN,EAASid,OACP,GAAGhR,GAAiB,CAClBtgC,EAAK,sBAAuB,CAAC6uG,CAAM,CAAC,EACpCt5C,GAAmB87C,EAAMC,QAAS5uF,OAAW,EAAI,CAAC,EACjD,KAAK,CACV,GAGF,IAAI8zB,GACD66D,EAAM/oF,OAAOgoF,UAAYe,EAAM/oF,OAAOinF,QACvC/4D,EAAexoC,SAAS6Y,cAAc,MAAM,EAC5C2vB,EAAa70B,UAAUS,IAAI,0BAA2B,mBAAmB,EACzEo0B,EAAalF,OACX50C,GAAK20G,EAAM/oF,OAAOgoF,SAAW,eAAiB,MAAM,EACpDtwG,EAAKqxG,EAAM/oF,OAAOgoF,SAAW,mBAAqB,cAAc,CAClE,EAEA95D,EAAa70B,UAAUyT,OAAO,UAAW,CAACi8E,EAAM/oF,OAAOgoF,UAAY,CAAC,CAACe,EAAM/oF,OAAOinF,IAAI,GAGxF,MAAMx5E,EAAM,IAAI5B,GAAI,CAClBp4B,MAAO,GACPs4B,WACA0F,UAAW,GACXwvE,OAAQ,GACR/yD,cACF,CAAC,EAEE/6C,IACDs6B,EAAIx4B,UAAUgsB,QAAQ9tB,OAAS,GAAKA,GAGtCs6B,EAAIh6B,MAAM4lB,UAAUS,IAAI,mBAAmB,EAC3C2T,EAAIh6B,MAAMu1C,OAAO,GAAG,CAACv1C,EAAOs0B,CAAK,EAAE/L,OAAO2F,OAAO,CAAC,EAClD,MAAMpc,EAAQkoB,EAAI86E,YAAY,YAAY,EACpC1xF,EAASkM,GAAU,CACvB5vB,SACAmB,KAAM,GACNQ,WAAY,KAAKsoB,iBAAiBxG,IAAI,CACxC,CAAC,EACDrR,SAAMyjC,OAAOnyB,EAAOhJ,IAAI,EAErB1a,EACD,MAAM0jB,EAAOsG,kBACL4rF,EAAMd,MACdpxF,EAAO3S,IAAI,CACTmY,KAAM,OACNjhB,MAAO,OACT,CAAC,EAEDyb,EAAO3S,IAAI,CACTmY,KAAM0sF,EAAM/oF,OAAOipF,UAAY,aAAe,cAC9C7tG,MAAOusG,GAAiBpB,CAAM,CAChC,CAAC,EAGH,KAAKp1E,QAAQjtB,IAAIupB,EAAIx4B,UAAW8zG,CAAK,EAC9Bt7E,EAAIx4B,YA9TL6lG,WACNoO,EACAt1D,EACAu1D,EACAC,EACA,OAAA5D,EAAA,KACM6D,EAAY,IAAIj7E,GAAU,CAC9BI,SAAU,GACVH,KAAM,CACJhS,KAAM,QACNitF,WAAY,EACd,CACF,CAAC,EAGK96E,EADa06E,EAAaK,oBAAsBnvF,OAEpD,GACC8uF,EAAahB,OAASgB,EAAaM,uBAAyBN,EAAaK,kBAAoBL,EAAaM,sBAE7GH,EAAUI,YACRj7E,EACA,GAAK06E,EAAahB,OAClB,CACEwB,MAAOhyG,EAAK,cAAe,CAACwxG,EAAaS,KAAK,CAAC,EAC/CC,IAAKlyG,EAAK,cAAe,CAACwxG,EAAaS,MAAQ,CAAC,CAAC,EACjDE,MAAOnyG,EAAK,cAAe,CAACwxG,EAAaS,KAAK,CAAC,EAC/CG,IAAKpyG,EAAK,cAAe,CAACwxG,EAAaS,MAAQ,CAAC,CAAC,CACnD,CACF,EAEAN,EAAUU,eAAc,EAExB,MAAMntG,EAAMssG,EAAac,UAEnB9F,EAAa,IAAIT,GAAW,CAChCt7E,eAAgB,KAAKA,eACrBvrB,KACF,CAAC,EAEKqtG,EAAuBt9E,GAAO,sCAAuC,CAACtQ,KAAM,eAAgBriB,KAAM,2BAA2B,CAAC,EACpIgW,EAAiBi6F,EAAsB,IAAM,CAC3ChnF,GAAainF,YAAYC,GAAqB,KAAKh3G,MAAM,CAC3D,EAAG,CAACg1B,eAAgB,KAAKA,cAAc,CAAC,EAExC,MAAMiiF,EAAiB1yG,EAAK,gBAAgB,EAC5C0yG,EAAe/wF,UAAUS,IAAI,oBAAoB,EAEjD,IAAI6uF,EAAsBttG,EAE1B,MAAMotG,EAAWzlG,IAIf,WAAAm8F,EAAAh9E,GAAA,EAAA69E,EAAAb,EAAArpF,WAAAu0F,EAAArK,EAAAlqF,WAAAC,SAAAiqF,EAAA,IAGOtoG,EAAKsL,EAAMmG,IAAK,CAACnG,EAAMsvB,KAAK,CAAC,EAAC+3E,CAAA,EAAAlL,CAAA,KAOjCuJ,EAAc1lG,GAId,OAAAq4F,EAAA,KACJ,kBAAAiP,EAAA10F,KAAAG,SAAAu0F,GAAA,WAAAt0F,EAAAC,EAAA,MAIKjT,EAAMy0B,KAAKnF,KAAK,QAAhBtc,QAAAC,GAEIjT,MAAMy0B,KAAK6T,QAAQ,EAAAr1B,GAAA,WAAA2L,EAAA3L,EAAA,MACnBjT,EAAMy0B,KAAK8oE,QAAQ,YAAnB3+E,EAAA,GAAuB22E,GACtBv1F,EAAMy0B,KAAKnF,MAAQtvB,EAAMy0B,KAAK6T,SAAS34C,OACtC2wB,GAAW,CACV,MAAMwJ,EAASpJ,GAAiBJ,EAAQ,EAAI,EAC5BtgB,EAAMy0B,KAAK8oE,SAAQ,EAC3BC,QAAQ,IAAM1zE,EAAM,CAAE,CAC/B,EACDuuE,EAAKlzE,eACLnlB,EAAMunG,OACR,CAAC,OAEDH,CAAc,MAAA70F,GAAA,IAAAiN,GAAA8nF,EAhBX58F,GAAW,uBAAwB,CAAC1K,EAAMy0B,KAAKnF,OAAS,WAAYtvB,EAAMwiC,MAAQ,MAAM,CAAC,GAAA8kE,CAAA,MAqBhG,CAAC79E,EAAK+9E,CAAM,EAAIvoG,GAAa,CAAC,EAC9B,CAACwoG,EAAkBC,CAAmB,EAAIzoG,GAAainG,EAAayB,mBAAmBxuB,MAAO,GAAI,GAAI,CAAC4Y,OAAQ,EAAK,CAAC,EACrH6V,EAAmBtrG,EAAW,IAAM4pG,EAAa2B,cAAgB3B,EAAahB,MAAM,EACpF4C,EAAYxrG,EAAW,IAAM,CAACsrG,EAAkB,GAAI,CAAC,CAACxB,IAAkB92E,KAAK,EAE7E7vB,EAAG,CAAAyT,EAEJkgC,GAAO,KAAAn0B,UAAA,OAAAhM,OACLozF,EAAUp0G,SAAS,EAAAihB,EACnBgjF,GAAuB,KAAC5wE,OAAK,OAAE,CAAC,CAC/B70B,MAAO,eACP2W,MAAOguF,GAAa8Q,EAAaS,KAAK,EACtCjR,iBAAkB,EACpB,EAAG,CACDjlG,MAAO,qBACP2W,MAAO8+F,EAAa6B,iBACpBrS,iBAAkB,GAClBC,mBAAoB,EACtB,EAAG,CACDllG,MAAO,iBACP2W,MAAOguF,GAAa8Q,EAAahB,MAAM,EACvCxP,iBAAkB,EACpB,EAAG,CACDjlG,MAAO,gBACP2W,MAAOguF,GAAa8Q,EAAaK,kBAAoBL,EAAahB,MAAM,CAC1E,CAAC,CAAC,QAAAjyF,GAAA,WAAAiM,EAAAjM,EAAA,OAEHuvF,EAAKwF,mBAAqBP,EAAgB,EAAG93G,OAAM,YAAnDuvB,EAAA,GAAAhM,EACEkgC,GAAO,CAAC7oB,KAAI,mBAAoBopB,SAAU,CAAC,CAAC,EAAGhgB,QAAO,iCAAA1U,UAAA,QAAA/L,EACpD2pD,GAAG,KAACC,MAAI,QAAE2qC,EAAgB,CAAE,EAAAxoF,SAAIgpF,GAC/B/0F,EACG4xF,GAAgB,CACfE,SAAUiD,EACVr3D,UAAWA,EACXniB,UAAWA,IAAM,CACfxO,GAAainF,YACXC,GACA3E,EAAKryG,OACL83G,EACA,IAAM,CACJP,EAAqBQ,IACnB9iG,GAAiB8iG,EAAWD,CAAe,EACpCC,EACR,CACH,CACF,CACD,MACD/iF,gBAAc,QAAEq9E,EAAKr9E,cAAc,GAGxC,IAEJ,KAAAjS,IACAkgC,GAAO,oCAAAn0B,UAAA,oBAAAkpF,EAAAzoF,KAAA88C,EACImpC,EAAI,cAAAnpC,GAAA58C,cAAA48C,EAAA2rC,CAAA,EAAJxC,EAAIwC,EAAAp1F,EAAAo1F,EAAAj1F,EACXuyF,EAAO,CAACt/F,IAAG,0BAAuBmpB,OAAK,QAAE62E,EAAY,EAAC72E,KAAK,UAAAvc,EAAAo1F,GAAA,WAAAn0D,EAAA/gC,EAC3D60F,QAAW,aAAX9zD,EAAA,GAAA9gC,EAAgBuyF,EAAO,CAACt/F,IAAG,yBAAsBmpB,OAAK,QAAE82E,EAAiB,EAAC92E,KAAK,EAAI,YAAA64E,CAAA,iBAAAC,EAAAhM,KAAAgM,EAAAjsC,QAE5B,MAAMz/D,GAAM,CACpE,MAAM+Y,EAASC,EAAgBhZ,EAAE+Y,OAAQ,KAAK,EACxCswF,EAAQvD,EAAKr0E,QAAQva,IAAI6B,CAAM,EACrC,GAAG,CAACswF,EACF,OAGF,GAAGA,EAAMd,MAAO,CACdoD,GAAahuF,OAAO,CAClBiuF,cAAe,GACfC,YAAa,CACXzjG,EAAG,mBACH/B,KAAMgjG,EAAMhjG,KACZkvB,GAAI,GACJniC,KAAM,CACJgV,EAAG,uBACHhV,KAAM,CACJgV,EAAG,cACH0jG,WAAYhG,EAAKryG,OAAOumG,SAAS,CACnC,CACD,EACD15E,OAAQ,CAAE,EACVioF,MAAOc,EAAMd,MACbwD,iBAAkB1C,EAAM3C,eACzB,EACD2C,OACF,CAAC,EACD,MACF,CAEA,MAAMlE,EAAOkE,EAAM2C,eACbv4G,EAAS41G,EAAM1P,SAASC,SAAS,EAAK,EACzCnmG,GAAU,CAAC41G,EAAM/oF,OAAOinF,MAAQ,CAAC8B,EAAM/oF,OAAOipF,WAAa,CAACF,EAAM/oF,OAAOgoF,SAC1EzwE,GAAaspE,aAAa,CAAC1tG,OAAQ41G,EAAM1P,QAAQC,SAAS,EAAK,CAAC,CAAC,EACzDnmG,GAAUA,IAAWC,EAAU+U,KACvC8a,GAAainF,YACXvF,GACAE,EACAzqF,OACA,CACEtS,EAAG,2BACHiuC,MAAO,CAAE,EACThwC,KAAMgjG,EAAMhjG,KACZwgG,OAAQqB,GAAemB,EAAMhjG,KAAMgjG,EAAMC,OAAO,EAChDhpF,OAAQ,CAACgmF,aAAc+C,EAAM/oF,OAAOgoF,UAAY5tF,MAAU,EAC1DxR,MAAO,CAAE,EACTq9F,QAAS,MAAMT,EAAKjyG,SAASo4G,gBAAgBC,cAAcpG,EAAKryG,MAAM,EACtEizG,gBAAiB2C,EAAM3C,gBACvBvB,OACAqB,MAAO/yG,EAAO04G,SAAU,EACxBnG,UAAWb,EAAO,EAAIzqF,MACxB,CACF,EACQyqF,EACR5hF,GAAainF,YAAYvF,GAAeE,CAAI,EAE5Cl/E,GAAS,CAAC1f,YAAa,iCAAiC,CAAC,GAE5D,MAAA6lG,EA1DSzwG,EAAO,cAAAywG,GAAAlpF,cAAAkpF,EAAAV,CAAA,EAAP/vG,EAAO+vG,EAAAr1F,EAAAq1F,EAAAl1F,EA2DdwyF,EAAU,KAACjxE,MAAI,QAAE0xE,EAAU,CAAE,MAAE3jE,MAAI,QAAE/Y,EAAK,IAAK,CAAC,EAAE89E,QAAO,iCAAAx0F,EAAAq1F,GAAA,WAAA10D,EAAAzgC,EACzD60F,QAAW,aAAXp0D,EAAA,GAAAxgC,EAAgBwyF,EAAU,KAACjxE,MAAI,QAAE2xE,EAAe,CAAE,MAAE5jE,MAAI,QAAE/Y,EAAK,IAAK,CAAC,EAAE89E,QAAO,wBAA2B,YAAAa,CAAA,OAAAl1F,IAG7GkgC,GAAO,CAAC7oB,KAAI,kBAAmBoJ,QAAO,4BAAA1U,UAAA,QACpCiiF,EAAWjvG,SAAS,IAAAghB,GAAA,WAAA2gC,EAAA3gC,EAEtBuvF,QAAKwF,iBAAiB,YAAtBp0D,EAAA,GAAA1gC,EACEkgC,GAAO,CAACzf,QAAO,wBAAA1U,SACbgoF,EAEJ,CAEJ,OAKD8B,OAHkB5+B,GAAew7B,EAAMttG,EAAUwR,GAAU,CACzD29F,EAAO39F,CAAK,CACb,EAAEuN,OAAWA,OAAWA,OAAW,KAAK+N,cAAc,EAC7CsE,EAAG,CAAE,EAERhqB,CACT,CA4FA,MAAagpB,KAAKt4B,EAAgB,CAChC,KAAK8B,UAAUokB,UAAUS,IAAI,kBAAkB,EAE/C,KAAK3mB,OAASA,EACd,KAAKg+B,QAAU,IAAI7a,IAEnB,KAAKmqE,SAAS,QAAQ,EAEtB,MAAMurB,EAAgBC,GAAoB,CACxC,MAAMn3G,EAAa,KAAKsoB,iBAAiBxG,IAAG,EAC5C,IAAI3Y,EAAS,GAAI0xF,EAAU,GAC3B,MAAM4Q,EAAW,SAAW,CAC1B,MAAMjyE,EAAQqhE,EAAU,GAAK,IAC7BA,EAAU,GACV,MAAMwZ,EAAa,MAAM,KAAK51G,SAAS24G,iBAAiBC,cAAc,CAACh5G,SAAQ8K,SAAQqwB,QAAO29E,OAAK,CAAC,EACpG,GAAG,CAACn3G,EAAU,EAAI,OAElB,MAAM0K,EAAW2pG,EAAWjB,OAAOvsF,IAAI,KAAKmtF,WAAW,EACjDx9D,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EAE3Cw1F,EAAM5qF,IACJA,EAAMkoB,MAAQ62E,EAAW72E,MACzBr0B,EAASkrG,EAAW//B,YAChBnrE,IACFmM,EAAMm2F,SAAWnmF,QAGnBhQ,EAAMkhC,SAAShqB,KAAK,GAAGgqB,CAAQ,EACxBlhC,EACR,GAGG,CAAC3E,EAAGuvF,CAAI,EAAIsD,GAAmB,CAACiI,UAAQ,CAAC,EAC/C,OAAO96F,GAGH,CAAC0jG,EAAYC,CAAe,EAAIlpG,GAAY2B,IAC7B,KAAKub,iBAAiBxG,IAAG,EACjC+I,UAAU9d,CAAO,EACrB,CAACmqG,EAAa,EAAK,EAAGA,EAAa,EAAI,CAAC,EAChD,EAEK,CAAC9C,EAAct1D,EAAW9rC,EAAGs7F,EAAI4H,CAAiB,EAAI,MAAMpzF,QAAQya,IAAI,CAC5E,KAAK9+B,SAAS24G,iBAAiBE,gBAAgBj5G,CAAM,EACrD,KAAKI,SAAS84G,WAAWC,aAAY,EACrCnD,IAAa5I,SAAU,EACvB6I,EAAe,EAAG7I,WAClB,KAAKhtG,SAAS4vG,gBAAgB/+D,UAAUjxC,EAAOumG,SAAQ,EAAI,iBAAiB,CAAC,CAC9E,EAED,KAAKsR,kBAAoBA,EAEzB,MAAMrtF,EAAMjY,SAAS6Y,cAAc,KAAK,EACxC,KAAK45B,WAAWnP,OAAOrrB,CAAG,EAC1B,MAAM9b,EAAUiV,GAAO,IAAM,KAAKgkF,WAAWoO,EAAct1D,EAAWu1D,EAAYC,CAAe,EAAGzrF,CAAG,EACvG,KAAK+O,cAAczV,iBAAiB,UAAWpV,CAAO,CACxD,CACF,CAACs/D,GAAA,WChhBM,MAAMorC,GAAUvpG,GAAuB,CAC5C,KAAM,CAAChG,WAAUoT,OAAM,EAAGpN,EACpB2E,EAAUw1D,GAAa,IAAMn6D,EAAMif,QAAQ,EACjD5hB,UAAa,IAAM,CACjB,KAAM,CAACwB,UAAS8F,QAAS6kG,CAAa,EAAI5kF,GAAOjgB,EAAS,EAAiB3K,EAAUoT,EAAO,EAAI,EAChGtO,GAAU,IAAM,CACdD,IACA2qG,EAAcztF,OAAM,CACtB,CAAC,CACH,CAAC,EAEM/b,EAAMif,QACf,wECGe,SAAS+K,GAAOhqB,EA+B1B,GAAI,CACP,MAAMypG,EAAczpG,GAGd,CACJ,GAAIA,EAAM+B,KAIV,kBAAAsQ,EAAAC,KAAAS,SAAAV,EAEKrS,MAAM+B,IAAI,EAAAwQ,OAAAiN,GAAAnN,EADD3H,GAAW,OAAS1K,EAAMmT,MAAO8qF,EAAM,GAAM,SAAS,CAAC,GAAA5rF,CAAA,MAMjEq3F,EAAU1pG,GAKV,CACJ,MAAM+B,EAAImR,EAAIu2F,EAAU,oBAAQzpG,EAAMmT,KAAK,MAAEpR,MAAI,QAAE/B,EAAMmnB,IAAI,EAAI,EACjE,OAAInnB,EAAMurB,OAIV,WAAA5Y,EAAAC,KAAAG,SAAAJ,EAEK5Q,EAAI,MAAAgR,EAAAJ,EAAAO,EACJu2F,EAAU,mBACD,GAAEzpG,EAAMmT,KAAM,QAAOnT,EAAMmT,KAAM,SAAQnT,EAAM2pG,eAAkB,QAAO3pG,EAAMmT,KAAM,mBAAoB,EAAG,EAAC,MACpHpR,MAAI,QAAE/B,EAAMurB,KAAK,UAAAhZ,GAAAiN,OAAA7M,EAJTjI,GAAW,UAAY,OAAM1K,EAAMmT,KAAM,MAAK,CAAC,GAAAR,CAAA,KAJpD5Q,GAcLk8F,EAASA,IAAMj+F,EAAMi+F,OACrB2L,EAAQ12F,EAAIw2F,EAAM,mBAAeviF,MAAI,QAAEnnB,EAAMvP,KAAK,MAAE86B,OAAK,QAAEvrB,EAAMspB,YAActpB,EAAM6pG,mBAAmB,MAAEF,gBAAc,QAAE3pG,EAAM8pG,mBAAmB,EAAI,EACvJC,EAAW72F,EAAIw2F,EAAM,sBAAkBviF,MAAI,QAAEnnB,EAAM+oB,QAAQ,MAAEwC,OAAK,QAAEvrB,EAAMgpB,aAAa,EAAI,EAE3FghF,EAAaA,IAAM,CAAC,EAAEhqG,EAAMogB,eAAiBpgB,EAAM6pG,qBAAuB7pG,EAAMiqG,YAChFC,EAAcA,IAAM,CAAC,EAAElqG,EAAMyuB,WAAau7E,EAAU,GACpDG,EAAaA,IAAM,CAAC,EAAE,CAACnqG,EAAMoqG,UAAYF,EAAW,GACpDjhF,EAAcA,IAAM,CAAC,EACzBjpB,EAAMipB,aACNjpB,EAAMqZ,MACNrZ,EAAMogB,eACNpgB,EAAMiqG,YACNjqG,EAAMuC,OAGF9C,EAAGyT,EACNmoD,GAAO,CAAA9nB,IAAAgpB,EAAA,OAAA58C,EACD3f,EAAMuzC,IAAG,OAAA5zB,gBAAA48C,CAAA,EAATv8D,EAAMuzC,IAAGgpB,CAAA,MACdjB,WAAS,QAAEroD,EAAAjT,QAAMk+F,MAAM,IAAG,IAAOl+F,EAAMqqG,SAAWL,IAAe,QAAU,KAAM,MACjF3zF,WAAS,OAAE,CACT,IAAO,GACP,cAAe,CAAC0zF,EAChB,UAAW/pG,EAAMi+F,OACjB,gBAAiB,CAAC,CAACj+F,EAAMqZ,KACzB,mBAAoB4P,EAAa,EACjC,CAAE,uBAAsBjpB,EAAM5H,MAAQ4H,EAAM5H,MAAQ,IAAM,EAAG,QAAO,EAAG8xG,EAAa,EACpF,cAAelqG,EAAM8uE,SACrB,mBAAoB9uE,EAAMsqG,aAC1B,WAAY,CAAC,CAACtqG,EAAMkrC,aACpB,gBAAiB,CAAC,CAAClrC,EAAM4pB,SACzB,GAAI5pB,EAAMqW,WAAa,CAAE,EAC1B,MACDmO,SAAO,QAAE,OAAOxkB,EAAMyuB,WAAe,WAAazuB,EAAMyuB,SAAS,MAAAxP,UAAA,QAEhE2qF,EAAQ32F,EAAA,IACRA,EAAA,MAAAjT,EAAM4pB,QAAQ,KAAA1W,EAAKw2F,EAAM,sBAAkBviF,MAAI,QAAEnnB,EAAM4pB,QAAQ,GAAI,EACnEmgF,EAAW92F,EACXA,MAAAjT,QAAMqZ,IAAI,KAAAnG,EACRosE,GAAO,KAACjmE,MAAI,QAAErZ,EAAMqZ,IAAI,qBAAS3O,GAAW,WAAY,GAAI1K,EAAMuqG,aAAe,CAAE,EAAE,GACvF,EAAAt3F,EAAA,IACAjT,EAAMogB,eAAiBpgB,EAAMiqG,UAAU,EAAAh3F,EAAA,IACvCA,EAAAjT,QAAMkrC,YAAY,iBAAAr4B,EAAAsM,KAAApM,SAAAF,EAA6B7S,MAAMkrC,YAAY,EAAAr4B,CAAA,IAAQ,EAAAI,EAAA,IACzEA,EAAAjT,QAAMuC,KAAK,iBAAAy+E,EAAApuE,KAAAG,SAAAiuE,EAA8FhhF,MAAMuC,KAAK,EAAAgQ,OAAAiN,GAAAwhE,EAAxFt2E,GAAW,YAAa1K,EAAMwqG,WAAc,aAAYxqG,EAAMwqG,SAAU,EAAC,CAAC,GAAAxpB,CAAsB,QAEhI,EAED,OAAA/tE,GAAA,WAAAD,EAAAC,EAEKk3F,QAAY,aAAZn3F,EAAA,EAAAE,EAAgBq2F,GAAM,CAAAtqF,SAAExf,CAAG,GAAaA,CAAG,KAGlD,uiBC7Fa6lG,GAAetlG,IAC1B,WAAAqS,EAAAC,KAAAS,SAAAV,EAAAa,EAEKosE,GAAO,CAACjmE,KAAI,gDAAAtG,EAAAV,EACZrS,MAAMklG,OAAM,MAAA7yF,CAAA,KAKNo4F,GAAuBzqG,GAK9B,CACJ,IAAItK,EAAoBg1G,GAChB,WAAA/3F,EAAAC,KAAA+M,EAAejqB,EAAC,cAAAiqB,GAAAC,cAAAD,EAAAhN,CAAA,EAADjd,EAACid,EAAAI,EAAAJ,EAAA,IAAoCje,EAAKsL,EAAM8B,QAAO,EAAI9B,EAAM2qG,WAAY,EAAC,EAAAh4F,IAAS,GACrG,WAAAE,EAAAsM,KAAAk9C,EAAequC,EAAI,cAAAruC,GAAAz8C,cAAAy8C,EAAAxpD,CAAA,EAAJ63F,EAAI73F,EAAAE,EAAAF,EAAAK,EAA8EosE,GAAO,CAACjmE,KAAI,uDAAAtG,EAAAF,EAAA,IAAmD7S,EAAMklG,OAAQ,QAAA3yF,OAAAiN,GAAA3M,EAAlJnI,GAAW,4BAA6B,CAAC1K,EAAMklG,OAAM,GAAM,MAAM,CAAC,GAAAryF,IAAyF,EAChM7S,EAAMsgB,OAAOjK,UAAUS,IAAI,qBAAqB,EAChD9W,EAAMsgB,OAAO0lB,OAAOtwC,EAAGg1G,CAAI,CAC7B,EAEe,MAAMvD,WAA4BlnF,EAAa,CAQ5D2hF,YACUzxG,EACA83G,EACA2C,EACR,CACA,MAAM,eAAgB,CACpB5I,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACN7qC,WAAY,GACZ1kD,MAAO,uBACP0xG,eAAgB,GAChBC,OAAQ,GACRF,YAAa,EACf,CAAC,EAAE,KAbK/xG,SAAc,KACd83G,kBAAiC,KACjC2C,YAaR,KAAKtI,UAAS,CAChB,CAEQxK,YAAa,OAAAO,EAAA,KAAAmK,EAAA,KAAAqI,EAAA,KACb,CAACC,EAAoBC,CAAqB,EAAI9rG,GAAa,EAAE,EAC7D,CAAC+rG,EAAYC,CAAa,EAAIhsG,GAAa8rB,GAAM,EAAI,EAAI,EAAI,KAAK,EAClE,CAAC9lB,EAASimG,CAAU,EAAIjsG,GAAuB,CAAC,KAAK9O,MAAM,CAAC,EAC5D,CAACg7G,EAAiBC,CAAkB,EAAInsG,GAAuB,CAAE,GACjE,CAACgmG,EAAOoG,CAAQ,EAAIpsG,GAAa,KAAKgpG,iBAAiBnjG,IAAM,sBAAsB,EACnF,CAACwmG,EAAaC,CAAc,EAAItsG,GAAkC,KAAKusG,eAAe,CAAC,CAAC,EACxF,CAACC,EAAaC,CAAc,EAAIzsG,GAAyCqsG,KAAiBA,IAAcK,QAAQ,CAAC,CAAC,EAClH,CAACC,EAAUC,CAAW,EAAI5sG,GAAa,EAAK,EAC5C,CAAC6sG,EAAcC,CAAe,EAAI9sG,GAAY,EAC9C,CAAC8tC,EAAQi/D,CAAS,EAAI/sG,GAAY,EAClC,CAACgtG,EAAWC,CAAY,EAAIjtG,GAAY,EACxC,CAACktG,EAAoBC,CAAqB,EAAIntG,GAAa,EAAK,EAChE,CAACotG,EAAkBC,CAAmB,EAAIrtG,GAAa,EAAK,EAC5D,CAACstG,EAAiBC,CAAkB,EAAIvtG,GAAa,EAAE,EACvD,CAACwtG,EAAYC,CAAa,EAAIztG,GAAa,EAAI,EAC/C0tG,EAAYrwG,EAAW,IAAM,CAAC,CAAC,KAAK2rG,eAAe,EACnD34E,EAAQhzB,EAAW,IAAM2oG,EAAK,EAAKwG,IAAc7lG,MAAQklG,EAAkB,CAAE,EAC7E5F,EAAS5oG,EAAW,IAAM2oG,EAAO,EAAGqG,EAAW,EAAGsB,cAAgBt9E,EAAK,GAAM,KAAKshB,UAAUu0D,6BAA+B,EAAE,EAEnI,IAAIvsE,EACA+zE,EAAS,EAoCX5B,EAAsB,KAAK9C,gBAAgBlD,QAAQ,GAnCnDnsE,EAAQ,IAAIiU,GAAmB,CAC7BggE,aAAezlG,IAAU,CAAC,GAAKA,GAAOA,EAAK,EAC3Cw2D,QAAUx2D,IAAU,CACf69F,EAAK,EACNyG,EAAeJ,IAAcK,QAAQj0F,KAAMo1F,IAAWA,GAAOlnG,QAAUwB,EAAK,CAAC,EAE7E2jG,EAAsB3jG,EAAK,CAE9B,EACDtV,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCm5F,YAAa,EACf,CAAC,EAED1vG,GAAa,IAAM,CACjB,GAAG4nG,EAAK,EAAI,CACV,MAAM+H,GAAa1B,EAAW,EAAGK,QAAQhzF,IAAKm0F,IAAWA,GAAOlnG,KAAK,EAC/DonC,GAAQpU,EAAMq0E,cAAcD,EAAU,EACtCF,GAASlvG,GAAQ6tG,CAAW,EAClC,IAAI5hG,GAAQmjG,GAAWE,UAAW/hF,IAAMA,IAAK2hF,GAAOlnG,KAAK,EACtDiE,KAAU,GACXA,GAAQmjG,GAAWr9G,OAAS,EACpBq9G,GAAWnjG,EAAK,IAAMijG,GAAOlnG,QACrCiE,GAAQgM,KAAK42B,IAAI,EAAG5iC,GAAQ,CAAC,GAE/B+uB,EAAMu0E,SAASngE,GAAOnjC,EAAK,EAC3B,MACF,CAGA,MAAMmjG,GAAa,CAAC,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GAAI,GAAG,EAAEh0F,OAAQmS,IAAM,KAAKiiF,uBAAuBC,KAAM75G,IAAMA,GAAEoS,QAAUulB,EAAC,CAAC,EAC/G6hB,GAAQpU,EAAMq0E,cAAcD,EAAU,EACtCM,GAAa1vG,GAAQktG,CAAkB,EAC7ClyE,EAAMu0E,SAASngE,GAAOggE,GAAW7X,QAAQmY,EAAU,CAAC,CACtD,CAAC,GAKH,MAAMC,EAA+D,CACnEz3F,MAAO,GACP03F,QAAS,IAGLC,EAAgB,IAAI5kF,GAAI,CAC5B6U,aAAc,OACdosE,oBAAqB,GACrBr7E,UAAWA,IAAM,CACf,MAAMi/E,GAAU,IAAI/U,KAAKA,KAAKloE,IAAK,GAAI,KAAKmgB,UAAU+8D,qBAAuB,QAAU,GAAI,EACrFn/B,GAAW,IAAImqB,KAAKqS,EAAY,EAAG,GAAI,EAC/B,IAAI7a,GAAc,CAC9B3hB,YACAC,OAAS1iB,IAAc,CACrBk/C,EAAcl/C,EAAS,CACxB,EACD6hD,kBAAmB,OACnBF,UACF,CAAC,EACK7gD,KAAI,CACX,EACD1nC,eAAgB,KAAKA,cACvB,CAAC,EAEDsoF,EAAcnkF,WAAWjT,UAAUS,IAAI,SAAS,EAEhDzZ,GAAa,IAAM,CACjBowG,EAAcnkF,WAAW2tE,gBAAgBhtC,GAAmB+gD,EAAU,CAAE,CAAC,CAC3E,CAAC,EAED,MAAM6C,EAAkBjC,IAAsB,CAC5Cb,EAAiCI,EAAe,EAAGx7G,MAAqB,EACxEk8G,EAAYD,EAAQ,EACpB,KAAKz2D,WAAW24D,eAGlB,IAAI1xD,EAEA2xD,EACFC,EACAC,GACF,GAAG,KAAKhG,gBACN8F,EAAsBjJ,GAAiB,CACrCE,SAAU,KAAKiD,gBACfr3D,UAAW,KAAKA,SAClB,CAAC,MACI,CACL,MAAMs9D,GAAY,IAAIrlF,GAAI,CACxB6U,aAAc,kBACd3U,SAAU,GACV0F,UAAY/xB,IAAM,CAChB,GAAGuoG,EAAK,EAAI,CACVoG,EAAS,EAAK,EACd,MACF,CAEAt+F,GAAYrQ,EAAC,EACCujB,GAAainF,YACzBx+D,GACA,CACE9nB,SAAU,CAAC,qBAAqB,EAChCzwB,OAAQ,KAAKA,OACbg+G,cAAgBlpG,IAAY,CAC1BmmG,EAAmBnmG,EAAO,EAC1B4oG,EAAe,EAAI,EACnBO,GAAShuF,cAAciuF,iBAAiB,EAAI,CAC7C,EACD7uE,YAAa,oBACb8uE,WAAY,GACZ5wE,aAAc,2CACdixD,QAASwc,EAAgB,CAC3B,CACF,EAEMr6D,SAASy9D,SAAS,KAAKC,iBAAkB,IAAM,CACnD7rF,GAAS,CAAC1f,YAAa,8BAA+BohG,kBAAmB,CAAC,KAAKmK,gBAAgB,CAAC,CAAC,CACnG,CAAC,CACF,EACDpuF,cAAe,IAAIC,GAAc,CAC/B,GAAGktF,EACHvsF,QAAS,CAACikF,EAAO,EACjB16E,KAAM,eACR,CAAC,EACDpF,eAAgB,KAAKA,cACvB,CAAC,EAEKogF,GAAc2I,GAAU3I,YAAY,YAAY,EAChDkJ,GAAev1F,GAAU,CAAC5nB,KAAM,EAAE,CAAC,EACzCm9G,GAAavtG,IAAI,CAACmY,KAAM,eAAgBjhB,MAAO,SAAS,CAAC,EACzDmtG,GAAYv/D,OAAOyoE,GAAa5jG,IAAI,EACpCmjG,EAAqBE,GAAUj8G,UAE/B,MAAMm8G,GAAW,IAAIvlF,GAAI,CACvB6U,aAAc,gBACd0nE,gBAAiB,gCACjB32E,UAAY/xB,IAAM,CAChB2uG,EAAS,EAAI,CACd,EACDjrF,cAAe,IAAIC,GAAc,CAC/B,GAAGktF,EACHvsF,QAASikF,EAAO,EAChB16E,KAAM,eACR,CAAC,EACDpF,eAAgB,KAAKA,cACvB,CAAC,EAED9nB,GAAa,IAAM,CACjB,MAAM4H,GAAUkmG,IACVuD,GAAa,EAAE,CAACzpG,GAAQtV,QAAUsV,GAAQtV,OAAS,GAEzD,GADAu+G,GAAUnlF,SAAS1S,UAAUyT,OAAO,UAAW,CAAC4kF,EAAU,EACvD,CAACA,GACFR,GAAUnlF,SAASkuE,gBACjBviG,EAAKuQ,GAAQtV,OAAS,EAAI,YAAc,gCAAiC,CAACsV,GAAQtV,MAAM,CAAC,EACzFg/G,GACF,OACK,CACLT,GAAUnlF,SAAS1S,UAAU0F,OAAO,SAAS,EAC7C,MAAMy1B,GAASvsC,GAAQ0T,IAAKxoB,IACR,IAAI+W,GAAU,CAC9B/W,SACF,CAAC,EAEgBwU,OAClB,EAEDupG,GAAUnlF,SAASkuE,gBAAgB,GAAGxiG,GAAK+8C,GAAQ,EAAK,CAAC,CAC3D,CACF,CAAC,EAED08D,GAAUnlF,SAAS1S,UAAUS,IAAI,SAAS,EAE1C,MAAM83F,GAAgBR,GAAS7I,YAAY,YAAY,EACjDsJ,GAAiB31F,GAAU,CAAC5nB,KAAM,EAAE,CAAC,EAC3Cu9G,GAAe3tG,IAAI,CAACmY,KAAM,OAAQjhB,MAAO,OAAO,CAAC,EACjDw2G,GAAc5oE,OAAO6oE,GAAehkG,IAAI,EACxCojG,GAAoBG,GAASn8G,UAE7Bg8G,GAAkB53F,UAAUS,IAAI,mBAAmB,EACnDk3F,EAAmB33F,UAAUS,IAAI,oBAAqB,uBAAuB,CAC/E,CAEA,MAAM63F,GAAiBA,IAAMv9G,GAAK,OAAQ,4BAA4B,EAEhE09G,GAAqBtpE,GAAe,IAAM,CAC9CmB,GAAakmB,KAAI,CACnB,CAAC,EAED,IAAIkiD,GACJ1xG,GAAa,IAAM,CACjB,MAAM2xG,GAASlE,IACTmE,GAAU,IAAI37F,IACpB,KAAK85F,uBAAuBx2F,QAAQ,CAACm2B,GAAQjoC,GAAG/K,KAAQ,CACtD,MAAMwpG,GAASx2D,GAAOw2D,OACtB,GAAG0L,GAAQ5wF,IAAIklF,EAAM,EACnB,OAGF,MAAMtgC,GAASlpE,GAAIif,OAAQxlB,IAAMA,GAAE+vG,SAAWA,EAAM,EAAE2L,KAAK,CAACr2G,GAAGwsB,KAAMxsB,GAAE+M,MAAQyf,GAAEzf,KAAK,EAChFnS,GAAMwvE,GAAOiqC,UAAW15G,IAAMA,GAAEoS,OAASopG,EAAM,EAC/CG,GAAgBlsC,GAAOxvE,EAAG,GAAKwvE,GAAOA,GAAOtzE,OAAS,CAAC,EAC7Ds/G,GAAQ/tG,IAAIqiG,GAAQ4L,EAAa,CACnC,CAAC,EAED,MAAMj/G,GAAU,CAAC,GAAG++G,GAAQ5kF,OAAM,CAAE,EAAE6kF,KAAK,CAACr2G,GAAGwsB,KAAMA,GAAEk+E,OAAS1qG,GAAE0qG,MAAM,EAClEuI,GAAesD,GAAmB,CACtCC,cAAen/G,GACfo/G,SAAWviE,IAAW,CACpBgiE,GAAkB7+G,GAAQilG,QAAQpoD,EAAM,EACxCi/D,EAAUj/D,EAAM,CACjB,EACD/rB,QAAS+tF,GACTnpG,MAAOopG,GACPO,gBAAiB,EACnB,CAAC,EAEDxD,EAAgBD,EAAY,CAC9B,CAAC,EAED,MAAM0D,GAAmB7lF,GAAO,0CAA2C,CACzEtQ,KAAM,MACNriB,KAAM,YACR,CAAC,EAEDgW,EAAiBwiG,GAAkB,SAAW,CAC5C,MAAM1lF,GAASpJ,GAAiB8uF,GAAkB,EAAI,EAChD7yE,GAAQ1c,GAAainF,YACzBx+D,GACA,CACEU,iBAAkB,CAAC,aAAa,EAChC+kE,cAAgBlpG,IAAY,CAC1BimG,EAAW,CAAC,KAAK/6G,OAAQ,GAAG8U,EAAO,CAAC,CACrC,EACDu6B,YAAa,oBACb9B,aAAc,cACdixD,QAAS1pF,EAAO,EAAG+T,OAAQ7oB,IAAWA,KAAW,KAAKA,MAAM,EAC5Ds/G,eAAgB,IAAIh8F,IAAI,CAAC,KAAKtjB,MAAM,CAAC,CACvC,CACF,EAEAwsC,GAAMmU,SAASy9D,SAAS,KAAKmB,cAAe,IAAM,CAChD/sF,GAAS,CAAC1f,YAAa,0CAA2CohG,kBAAmB,CAAC,KAAKqL,aAAa,CAAC,CAAC,CAC5G,CAAC,EAED/yE,GAAM1oB,iBAAiB,oBAAqB,IAAM6V,GAAM,EAAI,CAAC03D,KAAM,EAAI,CAAC,EAExE,MAAMkgB,GAAO/kE,GAAMmU,SAASh6B,IAAI64F,KAAKhzE,GAAMmU,QAAQ,EACnD,IAAI8+D,GACJjzE,GAAMmU,SAASh6B,IAAO5mB,IAAY,CAChC,MAAMC,GAASD,GAAQiW,IAAImwF,SAAQ,EAC7B/+D,GAAO5mC,GAAgBk/G,QAAQ1/G,GAAOumG,SAAU,GACtD,MACE,CAAC7mG,GAAuB0nC,EAAI,EAAE,CAAC,GAC/Bq4E,KAAwBz/G,IACxBwsC,GAAMmU,SAASg/D,YAAW,EAAGngH,OAAS,KAAK+/G,eAE3CjzE,GAAkB,CAChBiB,aAAc,iCACdC,mBAAoB,wCACpBrd,OAAQ,CACNxe,QAAS,KACX,CACF,CAAC,EAAEsU,KAAK,IAAM,CACZw5F,GAAsBz/G,GACtBwsC,GAAMmU,SAASh6B,IAAI,CAAC3Q,IAAKhW,EAAM,CAAC,EAChCwsC,GAAMmU,SAASi/D,8BAA8B5/G,GAAQ,EAAI,EACzDy/G,GAAsBx4F,MACxB,CAAC,EACM,IAGFsqF,GAAKxxG,EAAO,EAEvB,EAAG,CAACi1B,eAAgB,KAAKA,cAAc,CAAC,EAExC,MAAM6qF,EAAuBA,KAC3B,WAAAhvB,GAAAthE,GAAA,EAAAD,GAAAuhE,GAAAluE,WAAAC,SAAAiuE,GAEKtsF,MAAKu3G,EAAW,EAAG,6BAA+B,2BAA4B,CAACA,EAAS,GAAIt8G,MAAM,CAAC,EAAC8vB,EAAA,EAAA1M,EAAAiuE,GAAG2tB,GAAc,MAAA3tB,EAAA,KAKtHivB,GAAoBvzG,IAAkB,CAI1C,GAAG,CAHegZ,EAAgBhZ,GAAE+Y,OAAQ,KAAK,EACtB2nF,cAAc,uBAAuB,EAEnDp8E,QACX,OAGF,IAAIkvF,GACJ,MAAMvzE,GAAQ1c,GAAainF,YACzBx+D,GACA,CACE9nB,SAAU,CAAC,QAAQ,EACnBuvF,kBAAoBC,IAAU,CAC5BA,GAAMx5F,QAASuhC,IAAS,CACtB,MAAMgD,GAAU+0D,GAAat8F,IAAIukC,EAAqB,EAChD9gD,GAAQg5G,GAAgBl1D,GAAQhD,IAAI,EACpC1nD,GAAQiS,SAASs7F,yBACjBsS,GAAiB5tG,SAAS6Y,cAAc,MAAM,EACpD+0F,GAAej6F,UAAUS,IAAI,0BAA0B,EACvDw5F,GAAetqE,OAAOl1C,GAAcuG,EAAK,CAAC,EAC1C5G,GAAMu1C,OAAOsqE,GAAgB,IAAK57G,EAAKymD,GAAQo1D,YAAmB,CAAC,EACnE,MAAM9lF,GAAM,IAAI5B,GAAI,CAClBp4B,SACAg+B,UAAW,GACXxF,YAAa,EACf,CAAC,EAEDwB,GAAIx4B,UAAU+zC,OAAOrJ,GAAMmU,SAAStwB,SAASmc,GAAMmU,SAASjJ,SAASxpB,IAAI85B,EAAI,CAAC,CAAC,EAC/E1tB,GAAIx4B,UAAUgsB,QAAQ9tB,OAAS,GAAKgoD,GACpCxb,GAAMmU,SAASrc,KAAKuR,OAAOvb,GAAIx4B,SAAS,CAC1C,CAAC,CACF,EACDutC,YAAa,SACb2uE,cAAgBiC,IAAU,CACxBlE,EAAakE,EAAwB,CACtC,EACDI,cAAe,MAAMvnE,IAAM,CACzB,MAAM/a,GAAWuiF,GAAgBxnE,GAAG,EAAI,EACxCinE,UAAe,IAAI58F,IACZ,CACLphB,OAAQg8B,GAASvV,IAAKwiC,KACpB+0D,GAAahvG,IAAIi6C,GAAQhD,KAAMgD,EAAO,EAC/BA,GAAQhD,KAChB,EACDvQ,MAAO,GAEV,EACDlK,aAAc,wBACdgzE,aAAc,OACdC,cAAe,EACjB,CACF,EAEMjP,GAAO/kE,GAAMmU,SAASh6B,IAAI64F,KAAKhzE,GAAMmU,QAAQ,EACnDnU,GAAMmU,SAASh6B,IAAM,CAAC,CAAC3Q,OAAKiiC,SAAM,IAAM,CACtC,MAAM+S,GAAUvqD,GAAKggH,cAAcl5F,KAAMyjC,IAAYA,GAAQhD,OAAShyC,EAAG,EACnE1G,GAAMiiG,GAAK,CACfv7F,IAAKA,GACL1V,MAAOiE,EAAKymD,GAAQo1D,YAAmB,EACvCnoE,SACF,CAAC,EACD,OAAG3xC,GAASgJ,EAAG,GACbA,GAAIoU,OAAOC,OAAO,CAAC3L,UAAWkoG,GAAgBl1D,GAAQhD,IAAI,CAAC,CAAC,EAEvD14C,IAGTk9B,GAAMmU,SAAS+/D,cAAc5+G,UAAUokB,UAAUS,IAAI,cAAc,EACnE6lB,GAAMmU,SAAS7+C,UAAUokB,UAAUS,IAAI,cAAc,EACrD6lB,GAAMmU,SAASggE,WAAW7E,EAAW,GACrCtvE,GAAMmU,SAASy9D,SAAS,KAAKwC,eAAgB,IAAM,CACjDpuF,GAAS,CAAC1f,YAAa,2CAA4CohG,kBAAmB,CAAC,KAAK0M,cAAc,CAAC,CAAC,CAC9G,CAAC,GAGGC,IAAW/9F,GAAA,WAAAD,GAAAC,EAEZ,QAAC05F,KAAe1H,EAAO,cAAvBjyF,GAAA,GAAAE,EACEkgC,GAAO,CACN7oB,KAAI,uBACJoJ,QAAO,2BACPogB,WAAY,GAAI,IAAA90B,UAAA,OAAAk9E,GAAAC,KAAArpF,SAAAopF,GAAAjpF,EAGb2pD,GAAG,KAACC,MAAI,QAAEu7B,EAAKmT,YAAY,EAAAvsF,SACxB8tB,IAAW,CACX,MAAM3sB,GAAgB,IAAIC,GAAc,CACtC,GAAGktF,EACHvsF,QAASsqF,EAAW,IAAOv+D,GAC3BxiB,KAAM,yBACR,CAAC,EAEKxB,GAAWzsB,EAAW,IAAM,CAChC,MAAMwwG,GAAS//D,GAAO4+D,QAAQj0F,KAAMo1F,IAAWA,GAAOlnG,QAAU6lG,IAAc7lG,KAAK,EACnF,GAAIknG,GAIJ,OAAOp4G,EAAK,4BAA6B,CAACs+B,GAA+B,CAAC85E,GAAOmE,cAAc,CAAC,CAAC,CACnG,CAAC,EAED,OAAA/9F,EACG8W,GAAM,CACL3T,UAAW,CAAC,yBAA0B,EAAK,MAC3C5lB,OAAK,mBAAAusG,GAAAC,GAAA,EAAAoK,GAAArK,GAAAlqF,WAAAC,SAAAiqF,GAAA9pF,EAEAg+F,GAAiB,KAACjM,OAAK,OAAE,CAACl4D,GAAOk4D,KAAK,EAAE3zG,KAAM,EAAE,GAAA+1G,EAAA,EAAAt0F,EAAAiqF,GAAA,IAEhDtoG,EAAK,QAAS,CAACs+B,GAA+B,CAAC+Z,GAAOk4D,KAAK,CAAC,CAAC,EAAC,MAAAjI,EAAA,UAGnEj0E,UAAQ,QAAEA,GAAQ,CAAE,MACpBmiB,cAAY,QAAEr1C,GAA2Bk3C,GAAOj3C,OAAQi3C,GAAOh3C,QAAQ,CAAC,MACxEqqB,eAAa,QAAEA,GAAcyC,KAAK,EAClCunF,SAAQ,GACR37E,UAAWA,IAAM,CACf88E,EAAex+D,EAAM,CACvB,CAAC,EAGP,CAAC,IAAAovD,EAAA,EAIR,OAAAlpF,GAAA,WAAA2L,GAAA3L,OACC05F,EAAW,aAAZ/tF,GAAA,GAAA1L,EACEkgC,GAAO,KACN7oB,MAAI,QAAE06E,EAAK,EAAK,8BAAgC,yBAAyB,MACzEpxD,WAAS,QAAE5gC,OAACgyF,EAAK,CAAE,EAAA/xF,KAAKoyF,GAAW,KAACJ,QAAM,QAAEA,EAAM,CAAE,EAAI,OACxDvxE,SAAO,QAAEsxE,EAAK,EAAK,kCAAoC,iCAAiC,EACxFlxD,WAAY,GAAI,IAAA90B,UAAA,QAEf2Z,EAAM3mC,SAAS,EAEnB,KAAAihB,IACAkgC,GAAO,CAAC7oB,KAAI,8BAAAtL,UAAA,OAAA/L,GACV2pD,GAAG,KAACC,MAAI,QAAE73D,EAAO,CAAE,EAAAga,SAAGA,CAAC9uB,GAAQsD,KAAQ,CACtC,MAAM0U,GAAY,IAAIjB,GACtBiB,GAAUy+B,OAAO,CAACz2C,SAAM,CAAC,EACzBgY,GAAUxD,QAAQ0R,UAAUS,IAAI,WAAW,EAC3C,IAAI6oE,IACJ,WAAA2nB,GAAAnoF,KAAAq9C,GACamjB,GAAe,cAAAnjB,IAAA58C,cAAA48C,GAAA8qC,EAAA,EAAf3nB,GAAe2nB,GAAAv0F,EAAAu0F,IAAA,WAAApoF,GAAAjM,EAAA,IACvBxf,GAAK,IAAK,CAAC,QAAXyrB,OAAA,GAAexqB,EAAK,qCAAsC,CAACwwG,EAAQ,EAAC,CAAC,WAAAnyF,EAAAu0F,IAAA,WAAAtzD,GAAA/gC,EAAA,IACrExf,GAAK,IAAK,CAAC,YAAXugD,MAAexc,GAAqBrnC,GAAOumG,SAAQ,EAAIt/E,OAAWA,OAAW,EAAI,CAAgB,WAAAkwF,EAAA,KAGtG,MAAM78E,GAAM,IAAI5B,GAAI,CAClBp4B,MAAO0X,GAAUxD,QACjBokB,SAAU42D,GACV,GAAIxvF,KAAWkoG,EAAKloG,QAAU,CAC5Bs+B,UAAY/xB,IAAM,CAChB+tB,GAAI0mF,gBAAgBz0G,EAAC,CACtB,EACD00G,YAAa,CACX7vF,QAAS,CAAC,CACRlI,KAAM,SACNg4F,OAAQ,GACRr6G,KAAM,SACNwtB,QAASA,IAAM,CACb0mF,EAAYjmG,IAAYA,GAAQ+T,OAAQ1a,IAAYA,KAAYnO,EAAM,CAAC,CACzE,EACD,CACH,CACD,CACH,CAAC,EACDs6B,UAAIx4B,UAAUokB,UAAUS,IAAI,sBAAsB,EAClD2T,GAAI86E,YAAY,YAAY,EAAEv/D,OAAO9sB,GAAU,CAAC/oB,UAAQmB,KAAM,GAAG,EAAEuZ,IAAI,EAChE4f,GAAIx4B,SACb,CAAC,GACqDu9G,EAAgB,GAAAt8F,IAEvEkgC,GAAO,CACN7oB,KAAI,uBACJoJ,QAAO,+BACPogB,WAAY,GAAI,IAAA90B,UAAA,OAAA60B,GAAAsoD,KAAArpF,SAAA+gC,GAGb,QAAIjrB,GAAI,CACP6U,aAAc,iBACdjP,UAAY/xB,KAAO0vG,EAAsB,EAAK,EAAG6D,GAAiBvzG,EAAC,GACnE0jB,cAAe,IAAIC,GAAc,CAC/B,GAAGktF,EACHvsF,QAAS,GACTuJ,KAAM,gBACR,CAAC,EACDxB,SAAUinF,EAAsB,EAChC7qF,eAAgBkzE,EAAKlzE,eACtB,EAAElzB,UAAS,MAAA8gB,EAAA+gC,GACX,QAAIjrB,GAAI,CACP6U,aAAc,qBACdjP,UAAY/xB,KAAO0vG,EAAsB,EAAI,EAAG6D,GAAiBvzG,EAAC,GAClE0jB,cAAe,IAAIC,GAAc,CAC/B,GAAGktF,EAEHhjF,KAAM,gBACR,CAAC,EACDxB,SAAUinF,EAAsB,EAChC7qF,eAAgBkzE,EAAKlzE,eACtB,EAAElzB,UAAS,MAAA6hD,EAAA,CAInB,IAEKw9D,IAAkB,WAAAnJ,GAAAoJ,GAAA,EAAAnJ,GAAAD,GAAAr1F,WAAA0+F,GAAApJ,GAAA56B,YAAAz6D,SAAAq1F,GAE4B94E,CAAK,EAAAkiF,GAAAC,QAMzC/0G,IAAM,CACd,MAAM+Y,GAAS/Y,GAAE+Y,OACjB,IAAIrO,GAAQqO,GAAOrO,MACnB,MAAMsqG,GAAatqG,GAAMzX,OAAS,IAC/B+hH,KACDj8F,GAAOrO,MAAQA,GAAQA,GAAM+xE,MAAM,EAAG,GAAG,GAG3CqzB,EAAmBplG,EAAK,EACrBsqG,IACDz/D,GAAMx8B,EAAM,GAEfmK,GAhBK3d,IAAO,CACX/Q,GAAM+Q,GAAI,sCAAuCmV,OAAW,aAAa,CAC1E,EAAAo6F,EAAA,EAAArJ,OAmBDwJ,GAAY,CAAAz+F,EAEbkgC,GAAO,KACNzf,SAAO,QAAE1gB,EAAA,MAAAo5F,EAAkB,KAAG,0CAA6CpH,EAAK,EAAK,yCAA2C,4CAA6C,MAC7K9xD,aAAW,QAAElgC,EAAAo5F,QAAkB,KAAIp5F,EAAAgyF,SAAQ,IAAG,CAC5CvwG,EACE63G,IAAoB,mDAAqD,+CACzE,CAACjB,EAAW,EAAGrG,MAAO31E,EAAO,EAAEi9E,EAAiB,GAAEvzF,OAAO2F,OAAO,CAClE,CAAC,EACC,CACFjqB,EACE63G,EAAiB,EAAG,8CAAgD,0CACpE,CAACzB,IAAsByB,EAAiB,EAAEjJ,GAAqBv2D,IAASw2D,OAAQ,EAAI,CAAC,EAAEvqF,OAAO2F,OAAO,CACvG,CAAC,EACEvH,MAAS,EACd28B,WAAY,GAAI,IAAA90B,UAAA,QAAAhM,EAAA,IAEf,IAAI4V,GAAI,CACP6U,aAAc,kCACdjP,UAAWA,IAAM,CACf69E,EAAqBllG,IAAU,CAACA,EAAK,CACtC,EACDgZ,cAAe,IAAIC,GAAc,CAC/ByJ,OAAQ,GACR9I,QAASpjB,GAAQyuG,CAAgB,CACnC,CAAC,EACDlnF,eAAgBq9E,EAAKr9E,eACtB,EAAElzB,SAAS,EAAAghB,MACXo5F,EAAkB,GAAIiF,EAAkB,IAAAp+F,IAE1CkgC,GAAO,CACNzf,QAAO,qCACPogB,WAAY,GAAI,IAAA90B,UAAA,QAEf,IAAI4J,GAAI,CACP6U,aAAc,6BACdjP,UAAWA,IAAM,CACfi+E,EAAetlG,IAAU,CAACA,EAAK,CAChC,EACDgZ,cAAe,IAAIC,GAAc,CAC/ByJ,OAAQ,GACR9I,QAASpjB,GAAQ6uG,CAAU,CAC7B,CAAC,EACDtnF,eAAgBq9E,EAAKr9E,cACtB,GAAElzB,SAAS,EAAAihB,IAEbkgC,GAAO,CACN7oB,KAAI,yBACJoJ,SAAO,QAAEsxE,EAAK,EAAK,mCAAqC,4BAA4B,MACpF9xD,aAAW,OAAE,CAAC7jB,EAAK,CAAE,CAAC,EACtBykB,WAAY,GAAI,IAAA90B,UAAA,QAEfwuF,EAAcx7G,SAAS,CAG7B,IAEKwN,GAAG,CAAAyT,EAEJkgC,GAAO,CAACK,YAAa,GAAI,IAAAx0B,UAAA,oBAAA2yF,GAAAC,GAAA,EAAAC,GAAAF,GAAA9+F,WAAAg2F,GACqD1sD,EAAG,cAAA0sD,IAAAlpF,cAAAkpF,GAAAgJ,EAAA,EAAH11D,EAAG01D,GAAAF,EAAA,iBAAAG,GAAAC,KAAAj/F,SAAAg/F,GAAA,IAC/Cr9G,EAAK,sBAAsB,CAAC,EAAAq9G,EAAA,iBAAAE,GAAAC,KAAAn/F,SAAAk/F,GACzBv9G,MAAKi4G,EAAS,GAAM9B,EAAK5C,gBAAgBnjG,IAAM,kBAAoB,wBAA0B,wBAAwB,CAAC,EAAAmtG,EAAA,KAAAh/F,EAAA,IACzJ05F,EAAS,GAAMoB,CAAmB,EAAA96F,EAClCA,MAAC05F,OAAS,CAAE,iBAAAwF,GAAA/V,KAAArpF,SAAAo/F,GAERnE,EAAkB,MAAAj7F,EAAAo/F,GAClBlE,GAAiB,MAAAkE,EAErB,QAAAl/F,QAEF,CAAC24F,EAAU,GAAIoF,EAAW,EAAA/9F,GAAA,WAAAygC,GAAAzgC,EAAA,IAC1B,CAAC05F,KAAe,CAAC1H,EAAO,aAAxBvxD,GAAA,GAAAxgC,EACEkgC,GAAO,CACN7oB,KAAI,0BACJoJ,QAAO,kCACPwf,YAAa,CAAC27D,EAAkB,EAChC/6D,WAAY,GAAI,IAAA90B,UAAA,QAEf6sF,EAAY,CAAE,EAElB,IAAA74F,SACA,CAAC24F,EAAU,GAAI+F,EAAY,CAE/B,EAED11F,GAAmBmgC,EAAM,+BAA8BmlC,OAAOoiB,iBAAmB,EAAI,MAAQ,EAAG,MAAK,EAErG8G,GAAoB,CAClBnqF,OAAQ,KAAKujF,WACb/hG,QAASA,IAAM,uBACfojG,QACF,CAAC,EACD,KAAK9C,OAAOp8D,OAAO,KAAK69D,UAAU,EAClC,KAAK7jB,KAAKjjB,MAAM,KAAKqlC,MAAM,EAC3B,KAAKA,OAAO/rF,UAAUS,IAAI,YAAY,EAEtC,MAAMs7F,GAA2B,SAA8C,CAC7E,MAAM9Q,GAAQ,MAAM1sF,QAAQya,IAAIpqB,EAAS,EAAC0T,IAAKxoB,IAAW,KAAKI,SAASo4G,gBAAgB0J,iBAAiBliH,EAAM,CAAC,CAAC,EAE3GmiH,GAAS,CACbt1F,OAAQ,CACNu1F,qBAAsBpG,EAAkB,GAAM/0F,OAC9Co7F,oBAAqB/F,EAAU,GAAMr1F,MACtC,EACDq7F,WAAYnR,GAAM,CAAC,EACnBoR,UAAW9zE,GAAY,EACvB+zE,WAAY3H,EAAY,EACxB4H,iBAAkBtR,GAAM3xG,OAAS,EAAI2xG,GAAMnoB,MAAM,CAAC,EAAI/hE,OACtDy7F,eAAgB5G,EAAW,GAAEt8G,OAASs8G,EAAW,EAAG70F,OACpD07F,kBAAoBzG,EAAgB,GAAME,EAAe,GAAOn1F,QAGlE,OAAG6tF,EAAK,EACC,CACL,GAAGqG,EAAa,EAChB,GAAGgH,GACHxtG,EAAG,iCACHc,MAAO6lG,EAAW,EAAG7lG,OAIlB,CACL,GAAGmnC,EAAQ,EACX,GAAGulE,GACHxtG,EAAG,qCAIDiuG,GAA2B,SAA8C,CAC7E,KAAM,CAACj9G,UAAQC,WAAS,EAAGg3C,EAAM,EAC3BnnC,GAAQ,MAAMgP,QAAQya,IAAI87E,EAAe,EAAGxyF,IAAKxoB,IAAW,KAAKI,SAASyiH,gBAAgBC,aAAa9iH,GAAO04G,SAAQ,CAAE,CAAC,CAAC,EAChI,MAAO,CACL/jG,EAAG,mCACHhP,UACAC,YACA08G,WAAY,MAAM,KAAKliH,SAASo4G,gBAAgB0J,iBAAiB,KAAKliH,MAAM,EAC5EyV,WAIEstG,GAAsB,MAAMC,KAChC,MAAM12E,GAAkB,CACtBiB,aAAc,oCACdC,mBAAoB,mCACpBrd,OAAQ,CAACxe,QAAS,OAAO,CAC3B,CAAC,EAEM,KAAKvR,SAASwzG,mBAAmBqP,sBACtC,KAAKjjH,OACL,KAAK83G,gBAAgBh2E,GACrBkhF,EACF,GAGIE,GAAuB,MAAMF,IAAsC,CACvE,MAAMh1D,GAA6Bg1D,GAAQruG,IAAM,iCAAmC,CAClFA,EAAG,oBACHquG,UACF,EAAI,CACFruG,EAAG,8BACHquG,WACApmE,OAAQA,EAAO,GAGXpQ,GAAQ,MAAM0rE,GAAahuF,OAAO,CAAC8jC,eAAY,CAAC,EACtD,MAAM,IAAIvpC,QAAc,CAACC,GAASwkB,KAAW,CAC3CsD,GAAM1oB,iBAAiB,SAAW/hB,IAAW,CACxCA,KAAW,aAAeA,KAAW,SACtCmnC,KAEAxkB,IAEJ,CAAC,CACH,CAAC,GAGH7H,SAAiB,KAAK62F,WAAY,SAAW,CAC3C,MAAM/5E,GAASpJ,GAAiB,KAAKmjF,WAAY,EAAI,EAErD,GAAI,CACF,MAAMsP,GAAU,MAAOvH,EAAU,EAAGmH,GAA2BX,IAAwB,EACvF,IAAIt2G,GACD6wG,EAAS,EACV7wG,GAAUo3G,GAAoBC,EAAO,EAErCr3G,GAAUu3G,GAAqBF,EAAO,EAGxC,MAAMr3G,GAEN,KAAK8uG,YAAS,EACd,KAAKpoE,KAAI,CACV,OAAOlhC,GAAK,CACXg/F,QAAQjrE,MAAM,yBAA0B/zB,EAAG,EAC3CwoB,IACF,CACF,EAAG,CAAC3E,eAAgB,KAAKA,cAAc,CAAC,EAEjC1lB,EACT,CAEA,MAAc6iG,WAAY,CACxB,KAAM,CAACgR,EAAiB1iE,EAAW46D,CAAY,EAAI,MAAM52F,QAAQya,IAAI,CACnE,KAAK9+B,SAASwzG,mBAAmBwP,0BAA0B,KAAKpjH,MAAM,EACtE,KAAKI,SAAS84G,WAAWC,aAAY,EACrC,KAAK/4G,SAASwzG,mBAAmByP,wBAAuB,CAAE,CAC3D,EACD,KAAKpG,uBAAyBkG,EAC9B,KAAK1iE,UAAYA,EACjB,KAAK46D,aAAeA,EACpB,KAAKgD,iBAAmB,KAAKkB,cAAgB9+D,EAAU6iE,wBAA0B,GACjF,KAAK1C,eAAiBngE,EAAU8iE,wBAA0B,GAC1D,KAAKC,YAAY,IAAM,KAAK7b,WAAY,GACxC,KAAKjrC,KAAI,CACX,CACF,CAACsR,GAAA,gOClzBK/xD,GAAY,cAEH,MAAMwnG,WAA2B5zF,EAAU,CAGxD4hF,YACUzxG,EACA0jH,EACAjjE,EACR,CACA,MAAM,uCAAyCxkC,GAAW,CACxD41F,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACN3+D,YAAa,GACb+gF,OAAQ,GACRF,YAAa,EACf,CAAC,EAAE,KAXK/xG,SAAc,KACd0jH,WAAyB,KACzBjjE,YAWR,KAAKkjE,SAAS/3F,SACd,KAAKwqD,OAAOxqD,SAEZ7e,GAAY2B,GAAY,CACtB,KAAKub,iBAAiBxG,IAAK,EAAC+I,UAAU9d,CAAO,EAC7C,KAAKyjG,UAAS,CAChB,CAAC,CACH,CAEA,MAAcA,WAAY,CACxB,KAAM,CAACz6D,EAAU6zB,CAAW,EAAIz8D,GAAwB,CAAE,GACpD,CAACqwB,EAAOykF,CAAQ,EAAI90G,GAAa,CAAC,EAClC0Z,EAAM,IAAIrF,IAEV0gG,EAAUA,IAAM,CACpB,MAAMvF,EAAgBzuG,GAGhB,CACJ,MAAM6T,EAASjW,GAAQ,IACdsb,GAAU,CACf/oB,OAAQ6P,EAAM7P,OACdmB,KAAM,EACR,CAAC,CACF,EAEDuiB,SAAOhJ,KAAKwL,UAAUS,IAAK,GAAE1K,EAAU,iBAAgB,EACvDyH,EAAOhJ,KAAKm7B,SACLnyB,GAGHA,EAAS46F,EAAa,CAACt+G,OAAQ,KAAKA,OAAQo7B,MAAO,EAAI,CAAC,EACxDtmB,EAAU3I,EAAsB0B,GAAa,CACjD,MAAMi2G,EAAsC,IAAI3gG,IAChDtV,GAAU4Y,QAAQ,CAACzmB,EAAQ0Z,IAAU,CACnCoqG,EAAe/yG,IAAI/Q,EAAQ0Z,CAAK,CAClC,CAAC,EACD,MAAMrM,EAAUikC,GAAaoG,EAAQ,EAAGlvB,IAAKu7F,GAAY19G,GAAU09G,EAAQpkH,IAAI,CAAC,EAAEk9B,QAAS,GAC3FxvB,SAAQ0xG,KAAK,CAACr2G,EAAGwsB,KAAO4uF,EAAergG,IAAI/a,CAAC,GAAK,IAAMo7G,EAAergG,IAAIyR,CAAC,GAAK,EAAE,EAC3E7nB,CACT,CAAC,EAEKvC,EAAS,GAETk5G,EAAQjhG,EACX2pD,GAAG,KAACC,MAAI,QAAE73D,EAAO,CAAE,EAAAga,SAAGA,CAAC9uB,EAAQ0Z,IAAU,CACxC,KAAM,CAAClF,SAAQ,EAAG8pG,EAAa,CAACt+G,QAAM,CAAC,EACjC+iC,EAAO52B,EAAW,IAAM2I,EAAO,EAAGtV,OAASka,EAAK,EAAK,CAAC,EAC5D,kBAAAwI,EAAAC,KAAAS,SAAAV,EAKK1N,EAAO,MAAAoO,EAAAV,EAAAa,EACPosE,GAAO,CAACjmE,KAAI,iCAAsB3O,GAAY,GAAE0B,EAAU,uBAAuB,CAAC8mB,EAAI,GAAM,YAAY,CAAC,UAAA3gB,GAAAqF,GAAAqpE,GAAA5uE,EAHlG,aAAY6gB,EAAM,EAAG,CAACj4B,CAAO,KAAG2c,CAAA,GAAAvF,CAAA,IAM9C,EACD,EAEK+hG,EAAiB57C,GAAqBsB,GAAgB,IAAMq6C,CAAQ,EAAE/xD,QAAS,CACnFiyD,WAAY,aACZ5zF,SAAUA,CAAC,CAACy2C,QAAOqC,UAASP,eAAa,IAAM,CAC7C,MAAM9oE,EAAoC,CAACkD,SAAUuZ,GAAS2O,YAAY,YAAY,EAAI,IAAM,EAA2B0/C,OAAQ,eAC7H9oB,EAAwB,CAAC,CAACoiE,UAAW,oCAAoC,EAAG,CAACA,UAAW,oCAAoC,CAAC,EACnIC,eAAe,IAAM,CACnB,UAAU5vG,KAAWuyD,EACnBvyD,EAAQ0W,QAAQ62B,EAAWhiD,CAAO,EAGpC,MAAMwqE,EAAoBxoB,EAAUinC,MAAO,EAACnsD,QAAO,EAC7CxwB,EAA2B,GACjC,UAAUmI,KAAW40D,EAAS,CAC5B,MAAMj3B,EAAY39B,EAAQ0W,QAAQq/C,EAAmBxqE,CAAO,EAC5DsM,EAAS8hB,KAAKgkB,EAAUk+D,QAAQ,CAClC,CAEA5rF,QAAQya,IAAI7yB,CAAQ,EAAE4Z,KAAK,IAAM4iD,EAAcO,CAAO,CAAC,CACzD,CAAC,CACH,CACF,CAAC,EAED,kBAAA5mD,EAAAC,GAAA,EAAAC,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAA26D,YAAAz6D,SAAAF,EAMOuhG,CAAc,EAAArhG,EAAAJ,EAAAO,EAEhBosE,GAAO,CAACjmE,KAAI,aAAgB,GAAEjN,EAAU,gBAAe,GAAA40E,CAAA,EAAAjuE,EAAAiuE,EAErDntE,MAAOlP,OAAO,EAAA4N,GAAA6M,GAAA,OAAAC,EARV3U,GAAY,GAAE0B,EAAU,WAAWnH,EAAO,EAAGtV,QAAU,UAAU,EAAC2vB,EACjE,yBAAwBzJ,KAAK42B,IAAI,EAAGxnC,EAAO,EAAGtV,OAAS,CAAC,GAAKsL,EAAS,EAAG,MAAIokB,WAAAD,EAAAC,KAAAG,GAAA7M,EAAAyM,EAAAC,KAAA,EAAAD,EAAAE,KAAA2hE,GAAAtuE,EAAA2M,EAAAF,EAAAE,IAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAAzE,CAAA,MAa3F,KAAK0O,YAAYmzF,OACfR,EAAO,GAAE,WAAAv0F,EAAAN,KAAApM,SAAA0M,EAAA,IAC2B/qB,EAAK,eAAe,CAAC,EAAA+qB,CAAA,IAC3D,EAEA,MAAMg1F,EAAY,IAAInhG,IAEtB,KAAKw9B,SAAW,IAAIpL,GAAe,CACjC5zC,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCmU,SAAU,KAAKi4D,KACfv/D,SAAW9wB,GAAW,CACpB+rE,EAAY,KAAK5qB,SAASg/D,cAAcn3F,IAAKxS,GAAQwS,EAAI/E,IAAIzN,CAAoB,CAAC,CAAC,EACnF4tG,EAASpkH,CAAM,CAChB,EACD+kH,cAAeA,IAAM,CACnB,KAAK7nD,KAAI,CACV,EACDvjB,YAAa,GACbqrE,SAAU,GACVC,uBAAwB,0BACxB1vE,WAAY,aACZ30C,SAAU,KAAKA,SACfqwB,SAAU,CAAE,EACZi0F,sBAAwB1uG,GAAQ,CAC9B,MAAM+tG,EAAUv7F,EAAI/E,IAAIzN,CAAoB,EAC5C,OAAOjJ,GAAY2B,GAAY,CAC7B,KAAKub,iBAAiBxG,IAAK,EAAC+I,UAAU,IAAM,CAC1C9d,IACAi2G,cAAcpkF,CAAQ,CACxB,CAAC,EAED,MAAMqkF,EAAiBrgH,EAAK,mBAAoB,CAAC,EAAGu1D,GAAmBiqD,EAAQlO,QAAS5uF,OAAW,EAAI,CAAC,CAAC,EAEnG,CAAC20C,EAAWipD,CAAY,EAAI/1G,GAAa8rB,GAAM,EAAI,CAAC,EACpDkqF,EAAW34G,EAAoB+D,GAAS,CAC5C,MAAM8mB,EAAOtR,KAAK42B,IAAI,GAAIynE,EAAQgB,qBAAuB,GAAKnpD,EAAS,CAAE,EACzE,MAAG,CAAC5kC,GAAQ9mB,IAAS+W,QACnB09F,cAAcpkF,CAAQ,EAGjBvJ,CACT,CAAC,EAEDstF,EAAUvzG,IAAIiF,EAAsB8uG,CAAQ,EAE5C,MAAMvkF,EAAmBukF,EAAQ,EAAK1zB,OAAOuP,YAAY,IAAM,CAC7DkkB,EAAajqF,GAAM,EAAI,CAAC,CAC1B,EAAG,GAAG,EAAI3T,OAEV,kBAAA08B,EAAAp0B,KAAA3M,SAAA+gC,GAAA,WAAA9gC,EAAAC,EAEKgiG,QAAU,aAAVjiG,IAAate,EAAK,sBAAuB,CAACG,GAAiBogH,EAAU,EAAC,CAAC,EAAIF,CAAc,MAAAjhE,CAAA,IAGhG,CAAC,CACF,EACDqhE,iBAAmBhvG,GAASA,EAAsBq+F,MAAM,GAAG,EAAE,CAAC,EAAElO,SAAU,EAC1E8e,oBAAqBA,CAACjvG,EAAK2oB,IAAkB,CAC3C,MAAMmmF,EAAWR,EAAU7gG,IAAIzN,CAAoB,EACnDjJ,GAAY2B,GAAY,CACtB,KAAKub,iBAAiBxG,IAAK,EAAC+I,UAAU9d,CAAO,EAC7CxB,GAAa,IAAM,CACjByxB,EAAc78B,UAAUokB,UAAUyT,OAAO,iBAAkB,CAAC,CAACmrF,EAAQ,CAAE,CACzE,CAAC,CACH,CAAC,CACH,CACF,CAAC,EAED,MAAMvT,EAAO,KAAK5wD,SAASh6B,IAAI64F,KAAK,KAAK7+D,QAAQ,EACjD,KAAKA,SAASh6B,IAAM,IAAI9U,IACN,KAAK8uC,SAASukE,mBAAmBrzG,EAAK,CAAC,EAAEmE,GAAU,EACxDkQ,UAAUi/F,SAAS,gBAAgB,GAC5C3yF,GAAS,CACP1f,YAAa,sBACbohG,kBAAmB,CACjB3vG,EAAK,aAAc,CAAC,KAAKk8C,UAAU2kE,sBAAwB,CAAC,CAAC,EAC7D/vE,GAAe,IAAM,CACnBhjB,KACA,KAAKsgF,iBAAiB,IAAM,CAC1BvuE,GAAaihF,YAAW,CAC1B,CAAC,CACH,CAAC,CAAC,CAEN,CAAC,EACM,IAGF9T,EAAK,GAAG1/F,CAAI,EAGrB,MAAM6yC,EAAO,KAAKg/D,SAAS4B,UAAU98F,IAAKu7F,GAAY,CACpD,MAAM/jH,EAASqG,GAAU09G,EAAQpkH,IAAI,EACrC,GAAGK,IAAW,KAAKA,OACjB,OAGF,MAAMgW,EAAM,IAAM+tG,EAAQwB,KAAO,IAAMvlH,EACvCwoB,SAAIzX,IAAIiF,EAAK+tG,CAAO,EACb/tG,CACT,CAAC,EAAE6S,OAAO2F,OAAO,EACjB,KAAKw2B,WAAa,KAAKrE,SAASqE,WAChC,KAAKwgE,0BAAyB,EAC9B,KAAK7kE,SAASq/D,kBAAkBt7D,CAAuB,EAEvD,IAAI47C,EAAa,GACjB,MAAMjsE,EAAU,MAAM9nB,GAAkB,CACtCqQ,GAAYrQ,CAAC,EACb+zF,EAAa,GACb,MAAM3mE,EAASpJ,GAAiB,KAAKmjF,WAAY,EAAI,EACrD,GAAI,CACF,MAAM+R,EAAQ/tE,IAAWlvB,IAAKu7F,GAAYA,EAAQwB,IAAI,EAChDG,EAAcp0E,GAAaoG,EAAQ,EAAGlvB,IAAKu7F,GAAY19G,GAAU09G,EAAQpkH,IAAI,CAAC,CAAC,EACrF,MAAM,KAAKS,SAAS24G,iBAAiB4M,WAAW,KAAK3lH,OAAQylH,CAAK,EAClE,KAAKpzE,KAAI,EACT7f,GAAS,CACP1f,YAAa,+BACbohG,kBAAmB,CAACuR,EAAMjmH,OAAQ+E,EAAK,2BAA4B,CAACmhH,EAAYlmH,MAAM,CAAC,CAAC,CAC1F,CAAC,CACF,OAAO2R,EAAK,CACXg/F,QAAQjrE,MAAM,yBAA0B/zB,CAAG,EAC3CwoB,GACF,CACA2mE,EAAa,IAGfzjF,EAAiB,KAAK62F,WAAYr/E,EAAS,CAACW,eAAgB,KAAKA,cAAc,CAAC,EAEhFslF,GAAoB,CAClBnqF,OAAQ,KAAKujF,WACb/hG,QAASA,IAAM,iBACf6oG,SAAUA,IAAM,CAACr7E,EAAO,GAAI,CAAC,EAC7B41E,OAAQ51E,CACV,CAAC,EAEDjyB,GAAa,IAAM,CACdozF,GAIH/vE,GAAiB,KAAKmjF,WAAY,CAACv0E,EAAO,EAC5C,CAAC,EAED,KAAKjO,YAAY2kB,OACftxC,EACE,6BACA,CACE,MAAMoO,GAAc,CAAC3S,OAAQ,KAAKA,MAAO,GACzCuE,EACE,oBACA,CACE8wC,GAAe,IAAM,CACnB,KAAKs9D,iBAAiB,IAAM,CAC1BvuE,GAAaihF,YAAW,CAC1B,CAAC,CACF,EAAC,CAEN,EACA9gH,EAAK,mBAAoB,CAAC,KAAKk8C,UAAU2kE,sBAAwB,CAAC,CAAC,CAAC,CAExE,CACF,EAEA,KAAKnT,OAAOp8D,OAAO,KAAK69D,UAAU,EAClC,KAAK7jB,KAAKjjB,MAAM,KAAKqlC,MAAM,CAC7B,CACF,CChSA,MAAMh2F,GAAY,cAElB,MAAqB2pG,WAAmB/1F,EAAU,CAChD,YACU7vB,EACR,CACA,MAAMic,GAAW,CACf,SAAU,GACV,gBAAiB,GACjB,YAAa,GACd,EANO,YAAAjc,EAQR,KAAK,SAAS,SACd,KAAK,OAAO,SAEZ,KAAK,UAAU,CACjB,CAEA,MAAc,WAAY,CACpB,IAAC+1G,EAAc2N,EAAUjjE,EAAWolE,CAAwB,EAAI,MAAM,QAAQ,IAAI,CACpF,KAAK,SAAS,iBAAiB,gBAAgB,KAAK,MAAM,EAC1D,KAAK,SAAS,iBAAiB,YAAY,EAC3C,KAAK,SAAS,WAAW,aAAa,EACtCrlH,GAAgB,yBAAyB,EAC1C,EAEK,MAAAuG,EAASwuC,GAAe,aAAa,CACzC,IAAK,KAAK,OACV,WAAY,KAAK,iBAAiB,IAAI,EACtC,WAAY,GACb,EAEDxuC,EAAO,QAAQ,UAAU,IAAI,GAAGkV,EAAS,UAAW,sBAAuB,eAAe,EAE1F,MAAM6pG,EAAenmB,GAAY,OAAQ,GAAI,SAAS,EACtDmmB,EAAa,UAAU,IAAI,GAAG7pG,EAAS,eAAe,EAC/ClV,EAAA,QAAQ,OAAO++G,CAAY,EAEjBjpG,EAAA9V,EAAO,QAAS,IAAM,CACrC,KAAK,iBAAiB,IAAM,CAC1Bq9B,GAAa,aAAa,CAAC,OAAQ,KAAK,MAAO,GAChD,CACA,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAA9jC,EAAQ,SAAS,cAAc,KAAK,EAC1CA,EAAM,UAAU,IAAI,GAAG2b,EAAS,QAAQ,EAExC,MAAM8pG,EAAuB,MAAMpzG,GAAc,CAAC,OAAQ,KAAK,OAAO,EACtE,MAAM5L,EAAO,OAAO,kBAEpB,IAAIi/G,EACFC,EACAC,EACAC,EACAC,EAAU,GAEN,MAAAC,EAAmBC,GAAuC,CAC/CvQ,EAAAuQ,EACfN,EAAajQ,EAAa,MAAQ,GAAKA,EAAa,oBAAsBA,EAAa,OAC9DkQ,EAAAlQ,EAAa,kBAAoBA,EAAa,OACvEmQ,EAAanQ,EAAa,oBAAsB,OACnCoQ,EAAA,CAAC,CAACpQ,EAAa,OAAO,UAG/BzoB,EAAW,IAAM,CAClB64B,EACK7lH,EAAA,gBAAgBiE,EAAK,mBAAmB,CAAC,EACvC2hH,EACF5lH,EAAA,gBAAgBiE,EAAK,uBAAuB,CAAC,EAC3CyhH,EACF1lH,EAAA,gBAAgBiE,EAAK,oBAAoB,CAAC,EAE1CjE,EAAA,gBAAgBiE,EAAK,wBAAwB,CAAC,CACtD,EAGIoxC,EAAiB,IAAM,CACxBywE,GAAWrQ,EAAa,QAAU,GAAKiQ,EACxC,KAAK,YAAY,gBACfzhH,EACE,oCACF,GAEM2hH,GAAeE,GAAWrQ,EAAa,MAAQ,EACvD,KAAK,YAAY,gBACfxxG,EACE,oCACA,CACEwxG,EAAa,MACbxxG,EAAK,qBAAsB,CAACwxG,EAAa,MAAQ,CAAC,CAAC,CACrD,CACF,GAEMiQ,EACR,KAAK,YAAY,gBACfzhH,EACE,6CACA,CACEwhH,EACAxhH,EAAK,aAAc,CAAC0hH,CAAsB,CAAC,CAC7C,CACF,GAGF,KAAK,YAAY,gBACf1hH,EACE,qCACA,CACEA,EAAK,aAAc,CAAC0hH,CAAsB,CAAC,CAC7C,CACF,EAEJ,EAGI/P,EAAY,IAAIj7E,GAAU,CAC9B,SAAU,GACV,KAAM,CACJ,KAAM,QACN,WAAY,EACd,EACD,EACD,KAAK,YAAY,OAAOi7E,EAAU,UAAW51G,EAAOyG,EAAO,OAAO,EAElE,MAAMw/G,EAAiB,IACd7C,EAAS,UAAU,OAAQK,GAAY19G,GAAU09G,EAAQ,IAAI,IAAM,KAAK,MAAM,EAGjFyC,EAAU,IAAM,CACd,MAAAnrF,EAAW6qF,EACf,GACCnQ,EAAa,OAASA,EAAa,uBAAyBA,EAAa,kBAAoBA,EAAa,sBAEnGG,EAAA,YACR76E,EACA,GAAK06E,EAAa,OAClB,CACE,MAAOxxG,EAAK,cAAe,CAACwxG,EAAa,KAAK,CAAC,EAC/C,IAAKxxG,EAAK,cAAe,CAACwxG,EAAa,MAAQ,CAAC,CAAC,EACjD,MAAOxxG,EAAK,cAAe,CAACwxG,EAAa,KAAK,CAAC,EAC/C,IAAKxxG,EAAK,cAAe,CAACwxG,EAAa,MAAQ,CAAC,CAAC,CACnD,GAEOzoB,IACM33C,IACJ8wE,IACXX,EAAa,YAAc,IAAIS,EAAe,EAAE,MAAM,GACtDT,EAAa,UAAU,OAAO,iBAAkB,CAACK,CAAU,GAGvDM,EAAa,IAAM,CAClB,gBAAW12F,GAAgB,CAACm2F,GAAeK,IAAiB,SAAW7C,EAAS,UAAU,QAAUmC,EAA4B,CACnI,QAAS,KACT,SAAU,IACR,CACF,QAAS,eACT,SAAU,QACV,SAAUxxF,CACX,EAAC,CAAC,GAGCqyF,EAAmBriG,GAA2B,CAClD,GAAGA,IAAS,2BACQsiG,YAGPtiG,EAAK,SAAS,YAAY,EAAG,CACxC,MAAMuiG,EAAO,CAACviG,EAAK,MAAM,GAAG,EAAE,CAAC,EACbioB,GAAA,CAChB,aAAc,oBACd,mBAAoB,+BACpB,oBAAqB,CAACpoC,GAAsBlB,GAAe4jH,EAAM,CAAC,EAAG,EAAK,CAAC,EAC3E,OAAQ,CACN,QAAS,KACT,SAAU,EACZ,EACD,OACOviG,IAAS,8BACCioB,GAAA,CAChB,aAAc,6BACd,mBAAoB,wCACpB,OAAQ,CACN,QAAS,KACT,SAAU,EACZ,EACD,CACH,EAGIq6E,EAAoB,IAAM,CACZr6E,GAAA,CAChB,aAAc,gBACd,mBAAoB,2BACpB,OAAQ,CACN,QAAS,KACX,EACD,EAAE,KAAK,IAAM,CACZkK,GAAa,KAAK,EACnB,GAcGniB,EAAU,MAAM9nB,GAAkB,CACtCqQ,GAAYrQ,CAAC,EACT,IACF,MAAMs6G,EAAcN,IACdO,EAAiBpD,EAAS,UAAU,KAAMK,GAAY,CAACA,EAAQ,IAAI,EACrE,IAAA1/F,EACD,IAACpkB,EAAU,QACLokB,EAAA,mCACCwiG,EAAY,SAAWnD,EAAS,UAAU,OAAQ,CAC1D,MAAMp3E,GAAkB,CACtB,aAAc,2BACd,mBAAoB,sBACpB,oBAAqB,CACnB,MAAM35B,GAAc,CAAC,OAAQ,KAAK,OAAO,EACzC8tC,EAAU,sBAAwB,CACpC,EACA,OAAQ,CACN,QAAS,aACX,EACD,EAED,KAAK,iBAAiB,IAAM,CAC1Brc,GAAa,YAAY,EAC1B,EACD,eACQ,CAAC0iF,EAAgB,CACzB,KAAK,KAAK,EACVh3F,GAAa,YAAY2zF,GAAoB,KAAK,OAAQC,EAAUjjE,CAAS,EAC7E,MACF,CAIA,GAAGp8B,EACD,KAAM,CAAC,KAAAA,CAAI,EAIP,WAAK,SAAS,iBAAiB,WACnC,KAAK,OACL,CAACyiG,EAAe,IAAI,GAGtB,CAACpD,EAAU3N,CAAY,EAAI,MAAM,QAAQ,IAAI,CAC3C,KAAK,SAAS,iBAAiB,YAAY,EAC3C,KAAK,SAAS,iBAAiB,gBAAgB,KAAK,MAAM,EAC3D,EAESqQ,EAAA,GACVC,EAAgBtQ,CAAY,EACpByQ,UACFr1G,EAAK,CACXu1G,EAAiBv1G,EAAiB,IAAI,CACxC,CAEO,UAGTk1G,EAAgBtQ,CAAY,EACpByQ,IACRtQ,EAAU,eAAe,EAEzB,KAAK,KAAK,CACZ,CACF,CCzSA,KAAM,CAACpB,GAAOoG,EAAQ,EAAIpsG,KACpB,CAACi4G,GAAeC,EAAgB,EAAIl4G,GAAqB,CAAC,EAE1Dm4G,GAAa,IAAMhnH,EAAU,SAAS,mBAAmB,eAAe,EAAI,EAAE,KAAMinH,GAAgBhM,GAASgM,EAAY,OAAO,CAAC,EAEhI,SAASC,GAAcxlH,EAAwB,CAC7C,OAAAoL,GAAY2B,GAAY,CAC7B/M,EAAW,QAAQ+M,CAAO,EAC1B,MAAMomG,EAAQsS,KACXtS,aAAY,OACNA,EAAM,EAGR,IAAI,QAAepwF,GAAY,CACpC2iG,GAAe,IAAM3iG,EAAQowF,EAAO,EAAC,EAAEA,CAAK,EAC7C,EACF,CACH,CAIA,IAAItwF,GACJ,SAAS8iG,IAAY,CACnB,OAAG9iG,IAIInW,GAAsB,IAAMi5G,GAAU,KAAM,KACtCL,KACDhnH,EAAA,iBAAiB,gBAAiBi7G,EAAQ,EAMpDvsG,GAAU,IAAM,CAEJ1O,EAAA,oBAAoB,gBAAiBi7G,EAAQ,EACxD,EAGM/uG,EAAW,IAAM,CAAC2oG,GAAU,GAACiS,GAAe,GACpD,GACH,CAGA,SAAwBK,IAAW,CACjC,OAAO5iG,QAAWzX,GAAW,IAAMu6G,GAAW,GAChD,CCdO,MAAMC,EAAsB,CAA5B,cAmgBE,wBAAsBp4E,GAA2C,CACtE,MAAMq4E,EAASr4E,EAAK,KAAO,CAACA,EAAK,KAAO,OAClCs4E,EAAYt4E,EAAK,QAAU,CAACA,EAAK,QAAU,OAC3C9uC,EAAW8uC,EAAK,OAAS,CAACA,EAAK,OAAS,OAE9C,OAAO/K,GAAa,aAAa,CAC/B,SAAU+K,EAAK,OACf,UAAWq4E,EACX,UAAAC,EACA,WAAYt4E,EAAK,MACjB,MAAOA,EAAK,MACZ,SAAA9uC,EACA,eAAgB8uC,EAAK,GAAK,CAACA,EAAK,EAChC,KAAMA,EAAK,KACZ,GAGI,4BAAyB,MAAMA,GAA+C,CAC7E,MAAA3oC,EAAS2oC,EAAK,QAAQ,SAAS,EAE/B/H,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQ5gC,CAAM,EAC/D,GAAG,CAAC4gC,EACE,IACF,MAAM,KAAK,SAAS,gBAAgB,eAAe5gC,CAAM,QACnD2K,EAAK,CACF,MAAAqhB,GAAA,CAAC,YAAa,eAAe,EAChCrhB,CACR,CAGI,MAAAq2G,EAAS,CAACr4E,EAAK,KACf9uC,EAAW8uC,EAAK,OAAS,CAACA,EAAK,OAAS,OAE9C,OAAO/K,GAAa,GAAG,CACrB,KAAMgD,EACN,UAAWogF,EACX,SAAAnnH,EACA,MAAO8uC,EAAK,MACZ,eAAgBA,EAAK,GAAK,CAACA,EAAK,EACjC,GAGI,2BAAyBA,GAAkF,CAChH,MAAM3C,EAAQ1c,GAAa,YAAY6hC,GAAe,CAAC,GAAIxiB,EAAK,GAAM,EAAAA,EAAK,IAAM07C,GAAmB,SAAS,EAC7G,OAAAr+C,EAAM,KAAK,EACJA,CAAA,EAGF,yBAAuB2C,GACrB,KAAK,SAAS,sBAAsB,gBAAgBA,EAAK,MAAM,EAAE,KAAK,MAAMuvD,GAAe,CAChG,GAAGA,EAAW,IAAM,qBAClBA,EAAW,IAAM,iBAA4D,CAC7Et6D,GAAa,aAAa,CACxB,OAAQs6D,EAAW,KAAK,GAAG,SAAS,EAAI,EACzC,EACD,MACF,CAEA,GAAGA,EAAW,sBAAwB,CAACA,EAAW,OAAO,2BAA4B,CACnF,MAAM1wC,EAA6B,CACjC,EAAG,qCACH,KAAM7e,EAAK,QAGP3C,EAAQ,MAAM0rE,GAAa,OAAO,CACtC,aAAAlqD,EACA,WAAA0wC,EACA,cAAe,GAChB,EAEK,OAAAlyD,EAAA,iBAAiB,SAAWzqC,GAAW,CACxCA,IAAW,QACZ,KAAK,oBAAoBotC,CAAI,CAC/B,CACD,EAEM3C,CACT,CAEA,OAAO1c,GAAa,YAAYivE,GAAqB5vD,EAAK,OAAQuvD,CAAU,CAC9E,EAAIvtF,GAAkB,CACjBA,EAAI,OAAS,uBACRmhB,GAAA/tB,EAAK,eAAe,CAAC,CAC7B,CACD,EAGI,0BAAuB,MAAM4qC,GAA6C,CACzE,MAAAu4E,EAAc1nH,GAAmB,CAClC,GAAAokC,GAAa,KAAK,SAAWpkC,EAC9B,OAAOokC,GAAa,aAAa,CAAC,OAAApkC,CAAO,EAC3C,EAGC,GAAAmvC,EAAK,aAAe,OAAW,CAEhC,MAAMnvC,GADO,MAAM,KAAK,SAAS,gBAAgB,gBAAgBmvC,EAAK,MAAM,GACxD,GAAG,SAAS,EAAI,EACpC,aAAMu4E,EAAW1nH,CAAM,EAChBokC,GAAa,eAAepkC,CAAM,CAC3C,CAEA,GAAI2nH,IAIDx4E,EAAK,GAAI,CACV,MAAMnvC,EAASmvC,EAAK,QAAQ,SAAS,EAAI,EACzC,aAAMu4E,EAAW1nH,CAAM,EAChBokC,GAAa,cAAcpkC,EAAQmvC,EAAK,EAAE,CACnD,GAGK,gCAA8BA,GAC5B,KAAK,SAAS,gBAAgB,aAAaA,EAAK,KAAK,EAAE,KAAM5uC,GAC3D6jC,GAAa,aAAa,CAC/B,OAAQ7jC,EAAK,GAAG,SAAS,EAAK,EAC9B,KAAM4uC,EAAK,KACZ,CACF,EAAE,MAAOh+B,GAAkB,CACvBA,EAAI,OAAS,sBACLqhB,GAAA,CAAC,YAAa,yBAAyB,CAClD,CACD,EAGI,wBAAsB2c,GACpB,KAAK,SAAS,mBAAmB,sBAAsBA,EAAK,IAAI,EAAE,KAAM6e,GACtE,KAAK,SAAS,mBAAmB,eAAeA,CAAY,EAAE,KAAMzC,GAelE2sD,GAAa,OAAO,CAAC,aAAAlqD,EAAc,YAAAzC,CAAY,GACpDp6C,GAAQ,CACN,MAAAA,EAAiB,OAAS,gBACnBqhB,GAAA,CAAC,YAAa,4BAA4B,EAG/CrhB,CAAA,CACP,CACF,EAGI,8BAA2B,MAAMg+B,GAAiD,CACvF,MAAMy4E,EAAcz4E,EAAK,QAAUA,EAAK,QAAWA,EAAK,WAAgD,OAClG5uC,EAAO,MAAM,KAAK,SAAS,gBAAgB,sBAAsBqnH,CAAW,EAAE,MAAM,IAAM,EAAsB,EAElH,IAAAC,EACD14E,EAAK,SAAW,SACW04E,EAAA,KAAK,oBAAoB14E,EAAK,UAAU,GAGlE,IAAA24E,EASJ,GARIvnH,EAEOA,EAAK,OAAO,kBACFunH,EAAA,0BAFAA,EAAA,yBAOlBA,EAAkB,CACVt1F,GAAA,CAAC,YAAas1F,CAAA,CAAiB,EACxC,MACF,CAEAD,GAA6B,MAAMA,EACnC,MAAME,EAAgB,MAAM3jF,GAAa,sBAAsB7jC,EAAK,GAAI,EAAI,EAE5E,GAAG4uC,EAAK,OAAQ,CAEd,MAAM64E,EAAS74E,EAAK,OAAO,MAAM,GAAG,EAC9B84E,EAEF,CACF,KAAM,0BACN,MAAO,uBACP,OAAQ,yBACR,SAAU,+BAGNC,EAAgBF,EAAO,OAAQ3jG,GAAS,CACtC,MAAA8jG,EAAoBF,EAAU5jG,CAAI,EACxC,OAAO0jG,EAAc,WAAW,KAAMt3F,GAAaA,EAAS,IAAM03F,CAAiB,EACpF,EAEKC,EAAe,MAAM7vE,GAAc,aAAa2vE,CAAa,EACnE,MAAM9jF,GAAa,aAAa,CAAC,OAAQgkF,CAAa,EACxD,CAEAhkF,GAAa,KAAK,WAAW,CAAC,cAAA2jF,EAAe,WAAY54E,EAAK,YAAY,GAGrE,uBAAoB,MAAMA,GAA0C,CACnE,MAAA5uC,EAAO,MAAM,KAAK,SAAS,gBAAgB,sBAAsB4uC,EAAK,MAAM,EAAE,MAAM,IAAM,EAAsB,EACtH,GAAG,CAAC5uC,EAAM,CACCiyB,GAAA,CAAC,YAAa,yBAAyB,EAChD,MACF,CAEA,MAAMua,EAAQxsC,EAAK,GACb8nH,EAAgD,CACpD,QAASl5E,EAAK,OAAS,UACvB,WAAYA,EAAK,SACjB,MAAApC,CAAA,EAGC,IAACoC,EAAK,QAAS,CACb,IAAC5uC,EAAK,OAAO,iBAAkB,CACvBiyB,GAAA,CAAC,YAAa,0BAA0B,EACjD,MACF,CAEG2c,EAAK,QACN,MAAM/K,GAAa,uBAAuB,CACxC,MAAA2I,CAAA,CACD,EAGH3I,GAAa,KAAK,WAAW,CAC3B,GAAGikF,EACH,KAAM,GACP,EAED,MACF,CAEI,IAAAC,EACA,IACFA,EAAiB,MAAM,KAAK,SAAS,yBAAyB,UAAUv7E,EAAOoC,EAAK,OAAO,QACrFh+B,EAAK,CACP,GAAAA,EAAiB,OAAS,kBAAmB,CACtCqhB,GAAA,CAAC,YAAa,0BAA0B,EACjD,WAEM,OAAArhB,CAEV,CAEM,MAAA42G,EAAgBxnH,EAAK,OAAO,iBAAmB,MAAM6jC,GAAa,sBAAsB2I,EAAO,EAAI,EAErG,IAAAw7E,EACDR,IAEO54E,EAAK,QAAUm5E,EAAe,OAAO,YAC3BC,EAAA,MAAMnkF,GAAa,uBAAuB,CAC1D,MAAA2I,EACA,mBAAoBu7E,EAAe,OAAO,qBAC1C,eAAgB/nH,EAAK,OAAO,iBAAmB+nH,EAAe,OAAO,SACtE,GAGHlkF,GAAa,KAAK,WAAW,CAC3B,GAAGikF,EACH,cAAAN,EACA,aAAcQ,EACd,IAAKD,EAAe,IACpB,eAAgB,CAACP,EACjB,YAAaO,EAAe,OAAO,aACpC,GAGI,qBAAkB,MAAMn5E,GAA2C,CACpE,IAAAkuD,EACA,IACFA,EAAiB,MAAM,KAAK,SAAS,eAAe,oBAAoBluD,EAAK,IAAI,QAC3Eh+B,EAAK,CACP,GAAAA,EAAiB,OAAS,sBAAuB,CAC1CqhB,GAAA,CAAC,YAAa,4BAA4B,EACnD,MACF,CAEM,MAAArhB,CACR,CAEA2e,GAAa,YAAYqtE,GAAyB,CAChD,eAAAE,EACA,KAAMluD,EAAK,KACZ,GAGI,sBAAmB,MAAMA,GAAyC,CACvE,MAAMttB,EAAQ,OAAO,MACfsjC,EAAS5/B,EAAgB1D,EAAM,OAAuB,QAAQ,EACpE,GAAGsjC,GAAUA,EAAO,UAAU,SAAS,OAAO,EAAG,CAC/C7O,GAAmB6O,EAAO,cAAc,kBAAkB,EAAE,cAAc,YAAY,CAAC,EACvF,MACF,CAEI,IAAAxlD,EACA,IACFA,EAAO,MAAM,KAAK,SAAS,gBAAgB,gBAAgBwvC,EAAK,MAAM,QAChEh+B,EAAK,CACPA,EAAiB,OAAS,wBACnBqhB,GAAA,CAAC,YAAa,kBAAkB,EAEzC,QAAQ,MAAMrhB,CAAG,EAGnB,MACF,CAEA,MAAMnR,EAASL,EAAK,GAAG,SAASA,EAAK,IAAM,MAAM,EAEjD,GAAG,CADe,MAAM,KAAK,SAAS,kBAAkB,aAAaK,EAAQ,CAACmvC,EAAK,KAAK,EACzE,CACJ3c,GAAA,CAAC,YAAa,eAAe,EACtC,MACF,CAE4Bw6E,GAAA,CAC1B,OAAAhtG,EACA,GAAI,CAACmvC,EAAK,MACX,GAGI,sBAAmB,MAAMA,GAAyC,CACvE,IAAInvC,EAASmvC,EAAK,QAAUA,EAAK,QAAQ,SAAS,EAAI,EAAI,OACvDnvC,IAAW,SAEHA,GADI,MAAM,KAAK,SAAS,gBAAgB,gBAAgBmvC,EAAK,MAAM,GAC9D,GAAG,SAAS,EAAI,GAGnBrf,GAAA,YAAY81F,GAAY5lH,CAAM,GAGtC,gCAA6B,MAAMmvC,GAAmD,CAC3F,GAAGlvC,EAAU,QAAS,CACXuyB,GAAA,CAAC,YAAa,6BAA6B,EACpD,MACF,CAEAgkB,GAAa,KAAK,GAGb,yBAAuBrH,GAA4C,CACxErf,GAAa,YAAY0hF,GAAeriE,EAAK,KAAMA,EAAK,KAAK,GAGxD,6BAA0B,MAAMA,GAAgD,CACrF,MAAMkK,EAAW,MAAM,KAAK,SAAS,mBAAmB,wBAAwBlK,EAAK,IAAI,EACzF/K,GAAa,aAAa,CACxB,OAAQiV,EAAS,OACjB,KAAMA,EAAS,QACf,SAAUA,EAAS,SACpB,GAGI,2BAAwB,MAAMlK,GAA8C,CACjF,MAAMllB,EAAmBva,KACnB84G,EAAU,CAAE,MAAMrB,GAAcl9F,EAAiB,IAAK,GAC5DA,EAAiB,QAAQ,EAEnB,MAAA+4F,EAAU7zE,EAAK,SAAW,QAE1Bs5E,EAAY,CAACt5E,EAAK,QACxB,GAAGq5E,GAAWC,EAAW,CACdj2F,GAAA,CACP,YAAa,qBACb,kBAAmB,CACjB6iB,GAAe,IAAM,CACThjB,KACJma,QAAQ1c,GAAa,YAAY44F,GAAY,CACjD,QAAS,IAAM,CACbl8E,EAAM,KAAK,CACb,EACA,QAAAw2E,CAAA,CACD,EACF,CACH,EACD,EACD,MACF,CAEM,MAAAx2E,EAAQ1c,GAAa,YAAY44F,GAAY,CACjD,UAAAD,EACA,QAAS,IAAM,CACbj8E,EAAM,KAAK,CACb,EACA,QAAAw2E,CAAA,CACD,EACH,CAt4BO,UAAU5iH,EAAuB,CACtC,KAAK,SAAWA,EAEM++F,GAAA,CACpB,KAAM,kBACN,SAAU,CAAC9xC,EAAQ74C,IAAY,CAC7B,MAAM4qF,EAAO5qF,EAAQ,KAEf9L,EAAI8L,EAAQ,UAAU,EAAI,EAChC9L,EAAE,UAAY,aACdA,EAAE,UAAY02F,EACd12F,EAAE,gBAAgB,SAAS,EAE3B,MAAM8jC,EAAQ1c,GAAa,YAAYD,GAAW,mBAAoB,CACpE,aAAc,eACd,mBAAoB,gBACpB,oBAAqB,CAACnnB,CAAC,EACvB,QAAS,CAAC,CACR,QAAS,OACT,SAAU,IAAM,CACdA,EAAE,MAAM,CACV,EACD,EACF,EAED,OAAA8jC,EAAM,KAAK,EACJA,CACT,EACD,EAE8D2yD,GAAA,CAC7D,KAAM,iBACN,SAAU,CAAC,CAAC,UAAAG,KAAe,CACnB,MAAC,QAAAqpB,EAAS,IAAAC,CAAO,EAAAtpB,EAOhB,YAAK,SAAS,mBAAmB,SAAS,CAC/C,OAAQl7D,GAAa,KAAK,OAC1B,KAAM,IAAMukF,GAAWC,EAAM,IAAMA,EAAM,IAC1C,CACH,EACD,EAEiDzpB,GAAA,CAChD,KAAM,kBACN,SAAU,CAAC,CAAC,UAAAG,KAAe,CACnB,MAAC,QAAAupB,CAAW,EAAAvpB,EAClB,GAAIupB,EAIG,OAAAzkF,GAAa,KAAK,WAAW,CAAC,MAAO,IAAMykF,EAAU,IAAI,CAClE,EACD,EAEqB1pB,GAAA,CACpB,KAAM,oBACN,SAAU,CAACxqF,EAAGH,IAAY,CAClB,MAAAonD,EAAY,CAACpnD,EAAQ,QAAQ,UAEnC,GADe+Q,EAAgB/Q,EAAS,QAAQ,EACrC,CACT4vB,GAAa,KAAK,QAAQ,uBAAuB5vB,EAASonD,CAAS,EACnE,MACF,CAEG,GAAAr2C,EAAgB/Q,EAAS,sBAAsB,EAEzC,OADiB,OAAe,eACjB,kBAAkBonD,CAAS,CAErD,EACD,EAEA,CACC,CAAC,cAAeivB,GAAmB,WAAW,EAC9C,CAAC,WAAYA,GAAmB,SAAS,GAItC,QAAQ,CAAC,CAACzwD,EAAM/V,CAAI,IAAM,CAC8B86E,GAAA,CACzD,KAAA/kE,EACA,SAAU,CAAC,CAAC,eAAAilE,KAAoB,CAC3B,IAACA,EAAe,CAAC,EAClB,OAGF,MAAMlwD,EAAqB,CACzB,EAAG9qB,EACH,IAAKg7E,EAAe,CAAC,GAGhB,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAMEgwD,GAAA,CACD,KAAA/kE,EACA,SAAU,KACV,SAAU,CAAC,CAAC,UAAAklE,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS9qB,EAAMi7E,CAAS,EACnC,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EACF,EAIiEgwD,GAAA,CAChE,KAAM,UACN,SAAU,CAAC,CAAC,eAAAE,KAAoB,CAC9B,MAAMlwD,EAAqB,CACzB,EAAG07C,GAAmB,QACtB,KAAMwU,EAAe,OAAS,EAAIA,EAAe,CAAC,EAAIA,EAAe,CAAC,EAAE,MAAM,CAAC,GAG1E,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAGuDgwD,GAAA,CACtD,KAAM,UACN,SAAU,CAAC,CAAC,eAAAE,KAAoB,CAC9B,MAAMlwD,EAAqB,CACzB,EAAG07C,GAAmB,SACtB,KAAMwU,EAAe,CAAC,GAGjB,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAGyDgwD,GAAA,CACxD,KAAM,WACN,SAAU,CAAC,CAAC,eAAAE,KAAoB,CAC9B,MAAMlwD,EAAqB,CACzB,EAAG07C,GAAmB,UACtB,OAAQwU,EAAe,CAAC,GAAK,mBAAmBA,EAAe,CAAC,CAAC,EAAE,MAAM,CAAC,GAGrE,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAEEw4E,IAGExoB,GAAA,CACD,KAAM,YACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,WAAYyU,CAAS,EAC5D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAoBAgwD,GAAA,CACD,KAAM,KACN,SAAU,MAAM,CAAC,eAAAE,EAAgB,UAAAC,CAAS,EAAG9qF,EAASkrF,IAAW,CAC3D,IAAAvwD,EACJ,GAAG,cAAemwD,GAAa,cAAeA,GAAa,eAAgBA,EAElEnwD,EAAA,CACL,EAAG07C,GAAmB,WACtB,OAAQwU,EAAe,CAAC,EACxB,GAAGC,CAAA,UAEG,UAAWA,GAAaD,IAAiB,CAAC,IAAM,QAAS,CAC3D,MAAAypB,EAAUzpB,IAAiB,CAAC,IAAM,IAAMA,EAAe,CAAC,EAAKC,EAAkB,EAC9EnwD,EAAA,CACL,EAAG07C,GAAmB,MACtB,OAAQi+B,EAAU,OAAa,UAAWxpB,EAAYD,EAAe,CAAC,EAAIA,EAAe,CAAC,EAC1F,QAAAypB,CAAA,CAEM,SAAAzpB,IAAiB,CAAC,IAAM,IACzBlwD,EAAA,CACL,EAAG07C,GAAmB,MACtB,OAAQwU,EAAe,CAAC,EACxB,MAAOA,EAAe,CAAC,WAEjB0pB,GAAqB,KAAK1pB,EAAe,CAAC,CAAC,EAC5ClwD,EAAA,CACL,EAAG07C,GAAmB,kBACtB,MAAOwU,EAAe,CAAC,EACvB,KAAOC,EAAiB,cAElBD,EAAe,CAAC,IAAM,IAAK,CAEnCA,EAAe,MAAM,EACf,MAAA2pB,EAAS,WAAY1pB,EAAYA,EAAU,OAASD,EAAe,CAAC,GAAKA,EAAe,CAAC,EACxFlwD,EAAA,CACL,EAAG07C,GAAmB,aACtB,QAASwU,EAAe,CAAC,EACzB,KAAMA,EAAe,CAAC,GAAKA,EAAe,CAAC,EAC3C,OAAA2pB,EACA,QAAS1pB,EAAU,QACnB,MAAOl7D,GAAa,oBAAoB5vB,CAAO,EAC/C,EAAG8qF,EAAU,EAEjB,SAAUD,EAAe,CAAC,EAAI31D,GAAkB21D,EAAe,CAAC,CAAC,EAAKC,EAAiB,WAAa,OAE3FnwD,EAAA,CACL,EAAG07C,GAAmB,QACtB,OAAQwU,EAAe,CAAC,EACxB,QAASA,EAAe,CAAC,EACzB,SAAUC,EAAU,SACpB,OAAAI,EACA,KAAMJ,EAAU,UAEb,CAEC,MAAA0pB,EAAS,WAAY1pB,EAAYA,EAAU,OAASD,EAAe,CAAC,GAAKA,EAAe,CAAC,EACxFlwD,EAAA,CACL,EAAG07C,GAAmB,QACtB,OAAQwU,EAAe,CAAC,EACxB,KAAMA,EAAe,CAAC,GAAKA,EAAe,CAAC,EAC3C,OAAA2pB,EACA,QAAS1pB,EAAU,QACnB,MAAO,UAAWA,EAAYA,EAAU,MAAQ,OAChD,MAAOl7D,GAAa,oBAAoB5vB,CAAO,EAC/C,EAAG8qF,EAAU,EACb,KAAMA,EAAU,KAEpB,CAEG,uBAAiBA,GAAa,WAAYA,KAEpCnwD,EAAA,CACL,EAAG07C,GAAmB,gBACtB,WAAY17C,EACZ,GAAGmwD,CAAA,GAIA,KAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAkCEgwD,GAAA,CACD,KAAM,UACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,GAAY9qF,EAASkrF,IAAW,CACtC,IAAAvwD,EAqBJ,GApBGmwD,EAAU,YAAc,QAAaA,EAAU,YAAc,QAAaA,EAAU,aAAe,OACpGnwD,EAAO,KAAK,SAAS07C,GAAmB,WAAYyU,CAAuC,EACnFA,EAAU,MAClBnwD,EAAO,KAAK,SAAS07C,GAAmB,MAAOyU,CAAuC,EAC9EA,EAAU,MAClBnwD,EAAO,KAAK,SAAS07C,GAAmB,kBAAmByU,CAAuC,EAC1FA,EAAU,SAAW,sBAEpBA,EAAU,SAAWA,EAAU,YAAc,OAC/CnwD,EAAA,KAAK,SAAS07C,GAAmB,QAAS,CAC/C,OAAA6U,EACA,GAAGJ,CAAA,CACJ,EAEMnwD,EAAA,KAAK,SAAS07C,GAAmB,QAAS,CAC/C,GAAGyU,EACH,MAAOl7D,GAAa,oBAAoB5vB,CAAO,EAChD,GAGA8qF,EAAU,SAAW,QAAaA,EAAU,cAAgB,OAAW,CACxE,MAAM2pB,EAAa95E,EACnBA,EAAO,KAAK,SAAS07C,GAAmB,gBAAiByU,CAAuC,EAChGnwD,EAAK,WAAa85E,CACpB,CAEO,YAAK,oBAAoB95E,CAAI,CACtC,EACD,EASEgwD,GAAA,CACD,KAAM,cACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,aAAcyU,CAAS,EAC9D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAOEgwD,GAAA,CACD,KAAM,UACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,QAASyU,CAAS,EACzD,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAOEgwD,GAAA,CACD,KAAM,UACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,SAAUyU,CAAS,EAC1D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAED,CAAC,WAAqB,MAAe,EAAE,QAAS/U,GAAS,CAKpD+kE,GAAA,CACD,KAAA/kE,EACA,SAAU,KACV,SAAU,CAAC,CAAC,UAAAklE,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,UAAWyU,CAAS,EAC3D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EACF,EAQEgwD,GAAA,CACD,KAAM,QACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,MAAOyU,CAAS,EACvD,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAGsDgwD,GAAA,CACrD,KAAM,QACN,SAAU,CAAC,CAAC,eAAAE,KAAoB,CAC9B,MAAMlwD,EAAqB,CACzB,EAAG07C,GAAmB,MACtB,OAAQwU,EAAe,CAAC,GAGnB,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAOEgwD,GAAA,CACD,KAAM,gBACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,iBAAkByU,CAAS,EAClE,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAGyDgwD,GAAA,CACxD,KAAM,WACN,SAAU,CAAC,CAAC,eAAAE,GAAiB7qF,IAAY,CACvC,MAAM26B,EAAqB,CACzB,EAAG07C,GAAmB,UACtB,KAAMwU,EAAe,CAAC,EACtB,MAAOj7D,GAAa,oBAAoB5vB,CAAO,GAG1C,YAAK,oBAAoB26B,CAAI,CACtC,EACD,EAOEgwD,GAAA,CACD,KAAM,WACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,GAAY9qF,IAAY,CAClC,MAAM26B,EAAO,KAAK,SAAS07C,GAAmB,UAAWyU,CAAS,EAC7D,OAAAnwD,EAAA,MAAQ/K,GAAa,oBAAoB5vB,CAAO,EAC9C,KAAK,oBAAoB26B,CAAI,CACtC,EACD,EAGkDgwD,GAAA,CACjD,KAAM,IACN,SAAU,CAAC,CAAC,eAAAE,KAAoB,CAC9B,MAAMlwD,EAAqB,CACzB,EAAG07C,GAAmB,cACtB,KAAMwU,EAAe,CAAC,GAGjB,YAAK,oBAAoBlwD,CAAI,CACtC,EACD,EAOEgwD,GAAA,CACD,KAAM,UACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,cAAeyU,CAAS,EAC/D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,EAQEgwD,GAAA,CACD,KAAM,cACN,SAAU,KACV,SAAU,CAAC,CAAC,UAAAG,KAAe,CACzB,MAAMnwD,EAAO,KAAK,SAAS07C,GAAmB,YAAayU,CAAS,EAC7D,YAAK,oBAAoBnwD,CAAI,CACtC,EACD,CACH,CAEQ,SAAuC9qB,EAASi7E,EAA8C,CAC7F,OACL,EAAGj7E,EACH,GAAGi7E,CAAA,CAEP,CA0YO,oBAAoBnwD,EAAoB,CAuBvC,MAAA+5E,EApBF,CACF,CAACr+B,GAAmB,OAAO,EAAG,KAAK,mBACnC,CAACA,GAAmB,YAAY,EAAG,KAAK,uBACxC,CAACA,GAAmB,SAAS,EAAG,KAAK,sBACrC,CAACA,GAAmB,WAAW,EAAG,KAAK,sBACvC,CAACA,GAAmB,SAAS,EAAG,KAAK,oBACrC,CAACA,GAAmB,UAAU,EAAG,KAAK,qBACtC,CAACA,GAAmB,iBAAiB,EAAG,KAAK,2BAC7C,CAACA,GAAmB,OAAO,EAAG,KAAK,mBACnC,CAACA,GAAmB,eAAe,EAAG,KAAK,yBAC3C,CAACA,GAAmB,OAAO,EAAG,KAAK,kBACnC,CAACA,GAAmB,QAAQ,EAAG,KAAK,gBACpC,CAACA,GAAmB,KAAK,EAAG,KAAK,iBACjC,CAACA,GAAmB,KAAK,EAAG,KAAK,iBACjC,CAACA,GAAmB,gBAAgB,EAAG,KAAK,2BAC5C,CAACA,GAAmB,SAAS,EAAG,KAAK,oBACrC,CAACA,GAAmB,aAAa,EAAG,KAAK,wBACzC,CAACA,GAAmB,WAAW,EAAG,KAAK,uBAGnB17C,EAAK,CAAC,EAC5B,GAAG,CAAC+5E,EAAW,CACL,aAAK,+BAAgC/5E,CAAI,EACjD,MACF,CAEA,OAAO+5E,EAAU/5E,CAAI,CACvB,CACF,CAEA,MAAMg6E,GAAwB,IAAI5B,GAClCzhE,KAAmBA,GAAe,sBAAwBqjE,IC98B1D,SAAwBC,IAA0B,CAChD,OAAG,OAAO,aACD,OAAO,eAAe,WAErB,SAAS,UAEV,SAAS,UAAU,cAAc,KAGnC,EACT,2nBCWO,SAASC,GAAiBjW,EAAiB,CAOhD,MAN2D,CACzD,EAAG,QACH,EAAG,QACH,GAAI,UAGkB53E,GAAM43E,GAAU,EAAG,EAAG,EAAE,CAAC,CACnD,CAEO,SAASkW,GAAkBz5G,EAA+B,CAC/D,kBAAAqS,EAAAC,GAAA,EAAAK,EAAAN,EAAAS,WAAAD,EAAAF,EAAA66D,YAAAz6D,SAAAV,EAAA,IAGK3d,EAAKsL,EAAM8B,OAAO,EAAC+Q,CAAA,EAAAR,CAAA,IAI1B,CAEO,eAAeqnG,GAAgBjgH,EAA0B,CAC9D,MAAMurG,EAAWvrG,EAAQ8I,MACnBo3G,EAAe,MAAMvpH,EAAUG,SAASwzG,mBAAmB6V,gBAAgBngH,EAAQtJ,OAAQsJ,EAAQqE,GAAG,EACtGxK,EAAIoP,SAASs7F,yBACb5qG,EAAWkwG,GAAqB0B,EAASzB,OAAQ,EAAI,EACrDsW,EAAkBpgH,EAA4B6yE,WAAa7yE,EAAQtJ,OAEnE2pH,EAAiB9U,EAASlgG,IAAM,8BAChCi1G,EAAYJ,EAAa70G,IAAM,+BAC/Bk1G,EAAaD,GAAaJ,EAAa38F,OAAOi9F,SAC9CC,EAAW,CAACF,GAAcD,GAAaJ,EAAa38F,OAAO8vF,OAC3DqN,EAAkB,CAACJ,GAAaJ,EAAa38F,OAAOo9F,cACpDC,EAAU,CAAC,CAACrV,EAASC,MACrBkH,EAAqBnH,EAAShoF,OAAOu1F,qBACrCxN,EAAW+U,EAAiB9U,EAASsV,cAAgBtV,EAASuV,gBAAkBvV,EAASD,SACzFyV,EAAwBV,EAAiB9U,EAASyV,wBAA0B,EAAIzV,EAAS0V,SAAS/qH,OAAS,EAE3GqT,EAAc+oD,GAAsB9B,GAAmB8B,EAAW30C,OAAW,EAAI,EAEvF,IAAIujG,EAA2B,gBAC/B,MAAMC,EAAmC,CACvC53G,EAAW+2G,EAAYJ,EAAakB,YAAc7V,EAAS2N,UAAU,EACrEj+G,EAAK,sBAAuB,CAACqwG,CAAQ,CAAC,EACtC,MAAMjiG,GAAc,CAAC3S,OAAQ0pH,CAAe,EAAC,EAG5CW,IACDG,GAAe,WACfC,EAAat8F,KAAK5pB,EAAK,8BAA+B,CAAC8lH,CAAqB,CAAC,CAAC,GAE7ErO,IACDwO,GAAe,QACfC,EAAat8F,KAAKtb,EAAW22G,EAAamB,UAAU,CAAC,GAEpDf,IAAWY,GAAe,QAE7B,IAAII,EACFC,EACAC,EACCjB,EACDe,EAAiB,oCACTb,GACRa,EAAiB,eACjBC,EAAkB,CAChBlqH,GAAc,IAAI,CAAC,EAErBmqH,EAAmB,IACXlB,GACRgB,EAAiB,4BACjBE,EAAmB,IACXtB,EAAauB,uBACrBH,EAAiB,8BACjBC,EAAkB,CAChBh4G,EAAW22G,EAAauB,qBAAqB,CAAC,GAExCvB,EAAawB,mBACrBJ,EAAiB,qCACTpB,EAAayB,0BACrBL,EAAiB,mCACjBC,EAAkB,CAChB,MAAMl4G,GAAc,CAAC3S,OAAQwpH,EAAayB,yBAAyB9kB,SAAS,EAAI,CAAE,EAAC,IAGrFykB,EAAiBZ,EAAkB,yBAA2B,oBAC9Da,EAAkB,CAChB,MAAMl4G,GAAc,CAAC3S,OAAQ0pH,CAAe,EAAC,EAG5CW,IACDO,GAAkB,SAClBC,EAAgB18F,KAAK5pB,EAAK,8BAA+B,CAAC8lH,CAAqB,CAAC,CAAC,GAGhF,CAACL,GAAmBR,EAAamB,YAClCE,EAAgB18F,KAAKtb,EAAWgiG,EAAS2N,UAAU,CAAC,GAIxD,IAAI5uC,EACDs2C,EACDt2C,EAAmBg2C,EAAY,yCAA2C,sCAE1Eh2C,EAAmBg2C,EAAY,oCAAsC,iCAGvE,MAAMtpH,EAAQiE,EACZqvE,EACA,CACEihC,EAASC,OAASF,EAClB,MAAMjiG,GAAc,CAAC3S,OAAQ0pH,CAAc,CAAC,EAC5C9U,EACA3xG,CAAQ,CAEZ,EAEM21B,EAAWr0B,EAAKimH,EAA4BC,CAAY,EACxDS,EAAc3mH,EAAKqmH,EAA+BC,CAAe,GAEpEC,GAAoBjB,IACrBqB,EAAYhlG,UAAUS,IAAI,0BAA0B,EAGnDkjG,GACDqB,EAAYhlG,UAAUS,IAAI,0BAA0B,EAGtDxjB,EAAE0yC,OAAO,GAAG,CACV,GAAIi1E,EAAmB,CACrBI,EACA34G,SAAS6Y,cAAc,IAAI,CAAC,EAC1B,GACJ9qB,EACAiS,SAAS6Y,cAAc,IAAI,EAC3B7Y,SAAS6Y,cAAc,IAAI,EAC3B,GAAIypF,EAAS8N,kBAAoB,CAC/Bp+G,EAAK,sBAAuB,CAC1B,MAAMoO,GAAc,CAAC3S,OAAQ0pH,CAAe,GAC5C9U,EACAj0G,GAAck0G,EAAS8N,iBAAiB,EACxCp+G,EAAK,uBAAwB,CAACqwG,CAAQ,CAAC,CAAC,CACzC,EACDriG,SAAS6Y,cAAc,IAAI,EAC3B7Y,SAAS6Y,cAAc,IAAI,CAAC,EAC1B,GACJwN,EACA,GAAIgxF,GAAaJ,EAAa2B,gBAAkB,CAC9C,IACA5mH,EAAK,kCAAmC,CAACilH,EAAa2B,eAAe,CAAC,CAAC,EACrE,CAAE,EACN,GAAKL,EAID,GAJoB,CACtBv4G,SAAS6Y,cAAc,IAAI,EAC3B7Y,SAAS6Y,cAAc,IAAI,EAC3B8/F,CAAW,CAEd,EAACriG,OAAO2F,OAAO,CAAC,EAEjB,MAAM8d,GAAkB,CACtBiB,aAAcq8E,EAAY,sBAAwB,wBAClD14F,YAAa/tB,EACbgtB,OAAQ45F,EAAW,CACjBp4G,QAAS,2BACX,EAAI,CACFA,QAAS,KACT4iG,SAAU,EACZ,CACF,CAAC,EAEEwV,GACDj6F,GAAainF,YAAYvF,GAAegY,EAAa4B,cAAc,CAEvE,CAEe,SAASC,GAASx7G,EAG9B,CAGD,MAAMlO,EAAa8N,KAAmBgU,MAChCoxF,EAAWhlG,EAAMglG,SACjB+U,EAAY/U,EAASlgG,IAAM,8BAC3BigG,EAAWgV,EAAY/U,EAASsV,cAAgBtV,EAASC,OAASD,EAASD,SAC3E0W,EAAoB,CAAC1B,GAAa/U,EAAS6N,gBAAgBl6F,IAAKw/B,GAAS,CAC7E,MAAMlnD,EAAOyR,SAAS6Y,cAAc,MAAM,EAC1CtqB,EAAKolB,UAAUS,IAAI,yBAAyB,EAC5C,MAAMqkC,EAAUvqD,GAAKggH,cAAcl5F,KAAMyjC,GAAYA,EAAQhD,OAASA,CAAI,EAC1ElnD,SAAK+0C,OAAOl1C,GAAcu/G,GAAgBl4D,CAAI,EAAI,KAAOgD,EAAQ5wB,MAAQ4wB,EAAQo1D,aAAa,CAAC,EACxFt/G,CACT,CAAC,EAEKyqH,EAAiBpY,GAAqB0B,EAASzB,OAAQ,EAAI,EACjE,IAAIh9B,EACJ,GAAGwzC,EAAW,CACZ,IAAIlhH,GACJ,WAAAmoF,EAAApuE,KAAA+M,EAES9mB,EAAC,cAAA8mB,GAAAC,cAAAD,EAAAqhE,CAAA,EAADnoF,EAACmoF,EAAAzuE,OAAAC,GAAAwuE,EAEY,qBAAEgkB,EAASwD,WAAWlS,SAAS,EAAI,CAAE,IAAG0O,EAAS2W,aAAc,EAAC,GAAA36B,CAAA,KAGtFza,EAAMtzD,EAEDve,MAAK,4BAA6B,CAACqwG,EAAUlsG,CAAC,CAAC,CAAC,CAGvD,MACE0tE,EAASy+B,EAAS8N,kBAAiB,aAAArzF,EAAAN,KAAApM,SAAA0M,EAE1B,GAAEslF,CAAS,GAAE,EAAAtlF,MAAAxM,EACjBniB,OAAck0G,EAAS8N,iBAAiB,CAAC,EAAA5/F,EACzCumG,GAAiB,CAAC33G,QAAO,kBAAAmR,GAAA,WAAAD,EAAAC,EACzB+xF,QAASC,KAAK,YAAdjyF,IACCte,EAAK,qBAAsB,CAACswG,EAASD,SAAUrwG,EAAK,2BAA4B,CAAC,CAACswG,EAASC,KAAK,CAAC,CAAC,CAAC,EACnGvwG,EAAKqwG,EAAW,EAAI,mCAAqC,mCAAoC,CAAC2W,CAAc,CAAC,CAAC,QAAAzoG,EAI/Gve,MAAKswG,EAASC,MAAQ,sCAAwC,iCAAkC,CAACF,CAAQ,CAAC,CAAC,EAAArlF,KAAAzM,EAAA,IAE3Gve,EAAKswG,EAASC,MAAQ,sCAAwC,iCAAkC,CAACD,EAASC,MAAQD,EAASD,SAAW2W,CAAc,CAAC,CAAC,CAE1J,EAGH,MAAME,EAAgBzrH,GAAmB,CACvC,MAAM+G,EAASwuC,GAAek2E,aAAa,CACzCz1G,IAAKhW,EACL2B,aACAozC,WAAY,GACZ8C,UAAW,EACb,CAAC,EAEDzT,UAAasnF,sBAAsB,CAAC1rH,SAAQwU,QAASzN,EAAOyN,OAAO,CAAC,EAEpEzN,EAAOyN,QAAQ0R,UAAUS,IAAI,0BAA2B,eAAe,EAEhE5f,EAAOyN,SAGVm3G,EAAkB,CAAC/B,IAAS,WAAA5d,EAAAC,KAAArpF,SAAAopF,EAAAjpF,EAE7B2pD,GAAG,KAACC,MAAI,QAAEkoC,EAAS0V,QAAQ,EAAAz7F,SACxBtoB,GAAWilH,EAAajlH,EAAO2/F,SAAS,EAAI,CAAC,CAAC,IAAA6F,MAKhD4f,EAAmBN,IAAiB,WAAAze,EAAAC,KAAAlqF,SAAAiqF,EAErCtoG,MACC,gCACA,CAACD,GAAKgnH,CAAiB,CAAC,CAC1B,CAAC,EAAAze,MAIL,IAAIgf,EACDjC,EACDiC,EAAM,aAAA3U,EAAAjL,KAAArpF,SAAAs0F,EAAAn0F,EAGC2pD,GAAG,KAACC,MAAI,QAAEkoC,EAAS2G,OAAO,EAAA1sF,SACvBvoB,GAAWklH,EAAallH,EAAO4/F,SAAS,EAAK,CAAC,CAAC,IAAA+Q,CAAA,KAAAp0F,GAAA,WAAA2L,EAAA3L,EAAA,IAGpD+xF,EAASsV,cAAgBtV,EAAS2G,QAAQh8G,MAAM,YAAhDivB,EAAA,eAAA0oF,EAAAiK,KAAAx+F,SAAAu0F,EAAA,IAEI5yG,EAAK,2BAA4B,CAACswG,EAASsV,cAAgBtV,EAAS2G,QAAQh8G,MAAM,CAAC,CAAC,EAAA23G,KAI5F,OAED0U,EAAM,CAAA/oG,EAAA,IAEDve,EACCswG,EAAShoF,OAAOu1F,qBACd,mCACA,mCACF,CAACvN,EAAS0V,SAAS/qH,MAAM,CAC3B,CAAC,EACAmsH,EACAC,CAAgB,EAKvB,IAAIr1C,EACJ,MAAMjnE,GAAG,WAAA0oG,EAAA0J,GAAA,EAAAzJ,EAAAD,EAAAr1F,WAAA0+F,EAAApJ,EAAAt1F,WAAA8+F,EAAAxJ,EAAA56B,YAAAskC,EAAAF,EAAA9+F,WAAAi/F,EAAAH,EAAApkC,YAAAykC,EAAAF,EAAAj/F,WAAAq/F,EAAAJ,EAAAvkC,YAAAyuC,EAAA9J,EAAAr/F,WAAAupD,EAEKqK,EAAU,cAAArK,GAAAz8C,cAAAy8C,EAAA+rC,CAAA,EAAV1hC,EAAU0hC,EAAAr1F,EAAAy+F,GAAA,WAAAtyF,EAAAjM,EAEf+xF,QAASC,KAAK,YAAd/lF,EAAA,GAAAhM,EAAmBosE,GAAO,CAACjmE,KAAI,OAAU,YAAAtG,EAAAy+F,EACzCxM,MAASC,MAAS,IAAGF,CAAS,GAAK,IAAGA,CAAS,GAAC,MAAAhyF,EAAA++F,EAIXp9G,MAAKqlH,EAAY,yBAA2B,yBAA0B,CAAChV,CAAQ,CAAC,CAAC,EAAAhyF,EAAA6+F,EACxHrrC,EAAM,MAAAxzD,EAAAk/F,EAGiCv9G,MAAKqlH,EAAY,oCAAsC,kCAAmC,CAAChV,CAAQ,CAAC,CAAC,EAAAhyF,EAAAg/F,EAC5IiK,EAAM,MAAAjpG,EAAAkpG,EAGiCvnH,MAAKqlH,EAAY,0BAA4B,sBAAuB,CAAChV,CAAQ,CAAC,CAAC,EAAAhyF,EAAAo/F,EAAA,IACtH,CAAC4H,GAAa9vD,GAAmB+6C,EAAS2N,UAAU,EAAC,MAAApgG,GAAA6M,GAAA,OAAAC,EAjB9C3U,GAAW,kBAAmB,YAAa,gBAAiBqvG,GAAa,yBAAyB,EAACz6F,EAE/F5U,GAAW,kCAAmCs6F,EAASC,OAAS,uCAAuC,EAAC5lF,WAAAD,EAAAC,KAAAG,GAAA2oF,EAAA/oF,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAAgyF,EAAApyF,EAAAE,MAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA+wF,MAoBpH72G,EAAOyoH,EAAY,GAAK,IACxBj+G,EAAUmmC,GAAiB,CAC/BzrB,MAAOllB,EACPmlB,OAAQnlB,EACR4wC,UAAW63E,EAAY,kBAAoBP,GAAiBxU,EAASzB,MAAM,EAC3EzxG,aACAqwC,KAAM,GACNC,SAAUz1B,GAAS2O,YAAY,eAAe,CAChD,CAAC,EAAElF,KAAK,CAAC,CAACnkB,YAAW6J,SAAO,KAC1B4qE,EAAWnwD,MAAMylD,SAAW,WAC5B0K,EAAWnwD,MAAMC,MAAQkwD,EAAWnwD,MAAME,OAASnlB,EAAO,KAC1Do1E,EAAW1gC,OAAO/zC,CAAS,EACpB6J,EACR,EAEDkE,SAAM3N,aAAaisB,KAAKxiB,CAAO,EAExB2D,CACT,CCrWwB,SAAAy8G,GAAWxuG,EAAmBojC,EAAmB,CACvE,MAAMqrE,EAAyB,GAC/B,KAAMzuG,EAAK,eAAiBA,EAAK,gBAAkB,SAAS,OAC1DA,EAAOA,EAAK,cACZyuG,EAAQ,KAAKzuG,CAAI,EAEd,EAAAojC,GAAYpjC,EAAK,QAAQojC,CAAQ,KAApC,CAKK,OAAAqrE,CACT,yBCPaC,GAAiBp8G,GAA2F,CACvH,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,OAAQ,UAAU,CAAC,EAEjDitD,GAAG,WAAA56C,EAAAC,KAAAuN,UAAAxN,EAAAyN,GAEDuzB,EAAI,oBACD3oC,GAAW,WAAY1K,EAAMmT,KAAK,CAAC,WAChC,EAAE,UAAAJ,EAAAV,GAAA,WAAAW,EAAAC,EAEXjT,QAAMqZ,IAAI,YAAVrG,EAAc5hB,MAAK4O,EAAMqZ,IAAI,CAAC,WAAAtG,EAAAV,EAC9BrS,MAAMif,SAAQ,MAAA5M,MAInB,OAAIrS,EAAMoqG,UAAUxlF,GAAOqoC,CAAkB,EAEtCA,CACT,w1BCSA,IAAI90C,GAA2BlD,GACxB,SAASonG,GAAYr8G,EAUzB,CACGmY,KACFA,GAASzV,SAAS6Y,cAAc,QAAQ,EACxCpD,GAAO3B,MAAQ,GACf2B,GAAO1B,OAAS,GAChBxB,GAAUkD,GAAOmkG,WAAW,KAAM,CAAClrC,MAAO,GAAOmrC,mBAAoB,EAAI,CAAC,GAG5E,KAAM,CAACnkH,EAAOuhB,CAAQ,EAAI1a,GAAY,EAChC,CAACu9G,EAAoBC,CAAqB,EAAIx9G,GAAY,EAC1Dy9G,EAAe7lG,GAA4B,CAC5CA,EAAM8lG,aAAe,MAKxB1nG,GAAQ2nG,UAAU/lG,EAAO,EAAG,EAAGsB,GAAO3B,MAAO2B,GAAO1B,MAAM,EAC1DgmG,EAAsBI,GAAiB1kG,EAAM,CAAC,IAI1CtE,EAASjW,GAAQ,IACdsb,GAAU,CACf/oB,OAAQ6P,EAAM7P,OACdmB,KAAM0O,EAAMklC,WACZrpB,mBAAoB6gG,CACtB,CAAC,CACF,EACD7oG,EAAOhJ,KAAKwL,UAAUS,IAAI,iCAAiC,EAC3D,MAAMta,EAA2B,GACjCA,EAAS8hB,KAAKzK,EAAOsG,iBAAiB,EACnCna,EAAMi1B,QACPphB,EAAOhJ,KAAKwL,UAAUS,IAAI,6CAA6C,EAGzEjD,EAAOsG,kBAAkB/D,KAAK,IAAM,CAClCuD,EAAS9F,EAAOzb,MAAK,CAAE,CACzB,CAAC,EAED,IAAI0kH,EACJ,GAAI98G,EAAMi1B,OAKR6nF,EAAcpoH,EAAK,aAAa,MALhB,CAChB,MAAMyT,EAAY,IAAIjB,GACtB1K,EAAS8hB,KAAKnW,EAAUy+B,OAAO,CAACz2C,OAAQyN,GAAQ,IAAMoC,EAAM7P,MAAM,CAAE,EAAC,EACrE2sH,EAAc30G,EAAUxD,OAC1B,CAGAm4G,EAAYzmG,UAAUS,IAAI,+BAA+B,EAEzD,MAAMuC,EAAInG,EACPosE,GAAO,KACNjmE,MAAI,QAAErZ,EAAMi1B,OAAS,eAAiB,mBAAmB,8CAG5D,EAEEj1B,EAAMxD,UACPwD,EAAMxD,SAAS8hB,KAAK,GAAG9hB,CAAQ,EAGjC,MAAM1M,EAAOitH,GAAQ/8G,EAAM7P,MAAM,EAC3B40B,GAAK,WAAA1S,EAAAC,KAAAS,SAAAV,GAAA,WAAAW,EAAAC,EAKNjT,QAAMi1B,MAAM,QAAZjiB,MAAA,GAAAC,EAAA,IAEK,IAAGjT,EAAMsvB,MAAQtvB,EAAMg9G,YAAa,EAAC,EAAA/pG,EAAA,IACtC,CAACrV,GAAQ,IAAMoC,EAAMjB,OAAO,GAAKsa,CAAI,CAIrCA,KAAIpG,EAAA,IACJ28D,GAAc9/E,EAAmBmtH,kBAAqBntH,EAAsBotH,oBAAsB,EAAG,CAAC,CAAC,CAE3G,OAAA3qG,GAAAqF,GAAAqpE,GAAA5uE,EAZMmqG,EAAkB,EAAK,CAAC,mBAAqB,OAAMA,EAAkB,CAAG,GAAE,EAAI,CAAC,mBAAqB,qBAAoBpkH,EAAK,CAAG,UAAS,EAACwf,CAAA,GAAAvF,MAgB/I8qG,EAAe7gH,EAAW,IAAOxM,EAAmBgV,IAAM,QAAWhV,EAAmBmtH,mBAAqB7lG,MAAS,EAE5H,kBAAAzE,EAAAC,KAAA+M,EAGS3f,EAAMuzC,IAAG,cAAA5zB,GAAA,WAAAC,GAAAD,EAAAhN,CAAA,EAAT3S,EAAMuzC,IAAG5gC,EAAAI,EAAAJ,GAAA,WAAAiM,EAAA3L,EAEbjT,QAAMi1B,MAAM,YAAZrW,EAAA,cAAA/L,EAAAsM,GAAA,EAAA6hE,EAAAnuE,EAAAC,WAAAC,SAAAF,EAAA,IAEIgB,EAAOlP,QAAOq8E,CAAA,EAAAnuE,IAIfgB,IAAOlP,OAAO,WAAAoO,EAAAJ,EAAA,IACjBwqG,EAAc,GAAIp4F,EAAK,MAAAhS,EAAAJ,EACvBmqG,EAAW,MAAAvqG,GAAA,IAAAiN,GAAA7M,EAXLjI,GAAW,2BAA4B1K,EAAMi1B,QAAU,UAAW,CAACkoF,EAAc,GAAI,UAAU,CAAC,GAAAxqG,CAAA,IAc7G,CAEe,SAASyqG,GAAgBp9G,EAMrC,CACD,KAAM,CAACjB,EAASC,CAAU,EAAIC,GAAa7O,EAAU2O,OAAO,EACtD,CAACyO,EAAS6vG,CAAU,EAAIp+G,GAAY,EACpC,CAACw1B,EAAM6oF,CAAO,EAAIr+G,GAAY,EAEpC,GAAI,CAACs+G,UAASC,UAASC,SAAQ,EAAGz9G,EAElC,MAAMmY,EAASzV,SAAS6Y,cAAc,QAAQ,EAC9CpD,EAAO3B,MAAQ,GACf2B,EAAO1B,OAAS,GACA0B,EAAOmkG,WAAW,KAAM,CAAClrC,MAAO,GAAOmrC,mBAAoB,EAAI,CAAC,EAEhFnsH,EAAU6jB,iBAAiB,iBAAkBjV,CAAU,EAEvD,MAAM0+G,EAAa,SAAW,CAC5B,MAAMz8G,EAAItQ,GAAgBqC,0BACpB06B,EAAU,MAAM9Y,QAAQya,IAAI,CAChCj/B,EAAUG,SAASukB,aAAaqrF,gBAAgBwd,0BAA0B39G,EAAMrJ,MAAM,EACtFvG,EAAUG,SAASukB,aAAau0F,WAAWuU,SAAS,sBAAuB,EAAK,EAChFxtH,EAAUG,SAASukB,aAAau0F,WAAWuU,SAAS,sBAAuB,EAAI,EAC/E,CAACjpG,OAAQ,EAAE1T,aAAa2T,SAAU1iB,OAAQ0iB,QAAQC,QAAQ5T,CAAC,CAAE,EAC9D,EAED,MAAO,CACL0T,OAAQ+Y,EAAQmwF,MAAO3rH,GAAWA,EAAOyiB,MAAM,EAC/C+Y,QAAS9Y,QAAQya,IAAI3B,EAAQ/U,IAAKzmB,GAAWA,EAAOA,MAAM,CAAC,IAI/DmL,UAAa,SAAW,CACtB0B,IACA,MAAMjN,EAAa8N,KAAmBgU,MAChC,CAACe,SAAQ+Y,SAAO,EAAI,MAAMgwF,EAAU,EAG1C,GAFAH,IAAU5oG,CAAM,EAChB4oG,EAAUnmG,OACP,CAACtlB,EAAU,EACZ,OAGF,MAAM0b,EAAU,MAAMkgB,EACtB,GAAI57B,EAAU,EAId,IAAG,CAAC0b,EAAQ,CAAC,EAAEulC,MAAMpjD,OAAQ,CAC3BqQ,EAAMy9G,UAAO,EACb,MACF,CAEAJ,EAAW7vG,CAAO,EACpB,CAAC,EAEDnQ,GAAa,SAAW,CACtB,MAAM/J,EAAIka,IACV,GAAG,CAACla,EACF,OAGF,KAAM,CAACwqH,EAAed,EAAce,EAAc/qH,CAAuB,EAAIM,EACvEg8B,EAASwuF,EAAmDxuF,OAASwuF,EAAc/qE,MAAMpjD,OACzFquH,EAAU1uF,EAAQ0tF,GAAgB,CAAChqH,EACnCs1C,EAA2C,IAAIh1B,IAgF/CxhB,EAAa8N,KAAmBgU,MAChCpX,EAA2B,GACjC,IAAI+2C,EACJ,MAAM9e,GAAI,WAAA4yE,EAAAjL,KAAA//B,EACE9oB,EAAG,cAAA8oB,GAAAz8C,cAAAy8C,EAAAgrC,CAAA,EAAH9zD,EAAG8zD,EAAAt0F,EAAAs0F,EAAAn0F,EACV2pD,GAAG,KAACC,MAAI,QAAGghD,EAAc/qE,MAAyBomC,MAAM,EAAG6jC,CAAY,CAAC,EAAA/9F,SACtEA,CAACsY,EAAM9jC,IAAQ,CACd,MAAMwhC,EAAS+oF,GAAWvqH,EAAG,IAAOupH,EAAe,EACnD,OAAA9pG,EACGmpG,GAAW,KACVlsH,QAAM,QAAEonC,EAAKtF,GAAGqkE,SAAS,EAAI,CAAC,EAC9B95F,SAAUA,EACVy4B,OAAQA,EAAMse,IACRtxC,GAAOqmC,EAASpnC,IAAIe,EAAIgzB,EAAS7d,OAAYmgB,CAAI,EACvDjI,MAAOA,EACP0tF,aAAcA,EAAY,IAC1Bj+G,SAAO,QAAEnB,GAAQmB,CAAO,CAAC,EACzBmmC,WAAY,EAAE,EAGpB,CAAC,IAAAmiE,MAKD4W,EAASjxG,EAAiBumC,EAAM72C,GAAM,CAC1C,MAAM+Y,EAASC,EAAgBhZ,EAAE+Y,OAAQ,0BAA0B,EACnE,GAAG,CAACA,EACF,OAGF1I,GAAYrQ,CAAC,EACb,MAAM66B,EAAO+Q,EAAS10B,IAAI6B,CAAM,EAChC,GAAG8hB,EAAM,CACPhD,GAAaspE,aAAa,CAAC1tG,OAAQonC,EAAKtF,GAAGqkE,SAAS,EAAI,CAAC,CAAC,EAC1D,MACF,CAEA,GAAGv3F,EAAO,EAAI,CACZkhB,GAAainF,YAAYx+D,GAAe,CACtC7nB,SAAW1wB,GAAW,CACpBokC,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,CACnC,EACDywB,SAAU,CAAC,QAAQ,EACnB4vF,cAAe,UACN,CACLt+G,OAAQ4rH,EAAc/qE,MAAMp6B,IAAK4e,GAASA,EAAKtF,GAAGqkE,SAAS,EAAI,CAAC,EAChE1uD,MAAO,KAGXs2E,kBAAmB,iBACrB,CAAC,EACD,MACF,CAEA,MAAM3wF,EAASiY,GAAe,IAAM,CAClC46C,IACAz5C,GAAakmB,KAAI,CACnB,CAAC,EACDt/B,EAAOlX,UAAUS,IAAI,SAAS,EAE9B,KAAM,CAACspE,OAAM,EAAGX,GAAY,CAC1B96E,QAAS8Q,EAAO2nF,cAAc,0EAA0E,EACxGnrG,UAAWwjB,EAAO23D,cAClBsS,SAAU,MACV76D,YAAanwB,EACX,yBACA,CACE64B,EACAwwF,CAAY,CAEhB,EACA1kG,KAAM,MACR,CAAC,CACH,CAAC,EACDva,GAAUm/G,CAAM,EAEhB,MAAMrpG,QAAQya,IAAI7yB,CAAQ,EACtB1K,EAAU,IAIdwrH,EAAQ7oF,CAAI,EACZ+oF,MACAA,EAAUpmG,OACZ,CAAC,GAED,WAAAkwF,EAAAiK,GAAA,EAAApJ,EAAAb,EAAAx0F,WAAAs1F,EAAAD,EAAA36B,YAAAz6D,SAAAq1F,EAAA,IAMO1zG,EAAK,iBAAiB,EAAC,MAAAqe,EAAAq1F,EAAAl1F,EACvBkpG,GAAa,CAAC/iG,KAAI,YAASmL,SAAO,QAAExkB,EAAM0iB,OAAO,UAAA3P,EAAAu0F,EAAAp0F,EAEnDopD,GAAc,KAAAr9C,UAAA,OAAAg+E,IAAA,EAAAhqF,EAAA,IAEZwhB,GAAM,EAAAwoE,GAAA,YAAAqK,CAAA,IAKf,CCrYO,SAAS6W,GAAap8E,EAAyC,CACpE,OAAOA,GAAQ,IAAM,YACvB,CAEO,SAAS5hB,GAAc4hB,EAA0C,CACtE,OAAOA,GAAQ,IAAM,aACvB,CAEO,SAAS5lB,GAAS4lB,EAAqC,CAC5D,OAAOA,GAAQ,IAAM,QACvB,CCTA,SAAwBq8E,GAAmB3kH,EAAkB,CAC3D,MAAMqtD,EAAWrtD,EAA4B,SAC7C,GAAG,CAACqtD,EACK,SAGH,MAAAylB,EAAc1lB,GAAeC,CAAO,EACpCwlB,EAAY91E,GAAUswD,EAAQ,OAAO,EAC3C,MAAO,CAAC,EAAEylB,IAAgBD,GAAcxlB,EAAQ,WAAaA,EAAQ,iBAAmBA,EAAQ,YAAcA,EAAQ,mBACpH,CAAC,CAAEA,EAAQ,aACf,CCZA,SAAwBu3D,GAAsB9uF,EAA6B,CACzE,OAAOA,EAAS,CAAC,CACnB,CCFA,SAAwB+uF,GAA4B5hH,EAAU,CACzD,GAAAA,EAAE,OAAS,QAAS,CACrBqQ,GAAYrQ,CAAC,EACb,MACF,CAES,cAAK,iBAAiB,QAASqQ,GAAa,CAAC,KAAM,GAAM,QAAS,GAAK,CAClF,CCPA,SAAwBwxG,GAAmB9kH,EAAkB,CAE3D,MAAMikF,EADajkF,GAA6B,WACb,iBACnC,GAAG,CAACikF,EACF,OAGF,MAAM3jF,EAAM2jF,EAAgB,OAAQruC,GAAaA,EAAS,OAAO,MAAM,EACpE,GAACt1C,EAAI,OAID,OAAAA,CACT,4QCFe,MAAMykH,WAAqBv+F,EAAa,CACrD2hF,aAAc,CACZ,MAAM,iBAAkB,CACtBK,gBAAiB,GACjBjiB,KAAM,GACN7qC,WAAY,GACZ+sD,YAAa,+BACbE,OAAQ,EACV,CAAC,EAED,KAAK77B,OAAOxqD,SACZ,KAAKqmF,OAAOp8D,OAAO,KAAK69D,UAAU,EAClC72F,EAAiB,KAAK62F,WAAY,IAAM,CACtC,KAAKrhE,KAAI,CACX,CAAC,EACD,KAAK8/D,UAAS,CAChB,CAEQxK,YAAa,CACnB,mBAAAzlF,EAAAC,KAAAS,SAAAV,EAAAa,EAEsCosE,GAAO,CAACjmE,KAAI,SAAAhH,CAAA,iBAAAM,EAAAC,KAAAG,SAAAJ,EAAA,IACXje,EAAK,wBAAwB,CAAC,EAAAie,CAAA,iBAAAE,EAAAsM,KAAApM,SAAAF,EAAA,IAC3Bne,EAAK,gCAAgC,CAAC,EAAAme,IAAAK,IAC3E8W,GAAM,CAAC3Q,KAAI,WAAQ5oB,OAAK,QAAEiE,EAAK,6BAA6B,CAAC,MAAEq0B,UAAQ,QAAEr0B,EAAK,gCAAgC,CAAC,EAAAwe,IAC/G8W,GAAM,CAAC3Q,KAAI,cAAW5oB,OAAK,QAAEiE,EAAK,6BAA6B,CAAC,MAAEq0B,UAAQ,QAAEr0B,EAAK,gCAAgC,CAAC,EAAAwe,IAClH8W,GAAM,CAAC3Q,KAAI,gBAAa5oB,OAAK,QAAEiE,EAAK,6BAA6B,CAAC,MAAEq0B,UAAQ,QAAEr0B,EAAK,gCAAgC,CAAC,gBAAAssF,EAAAthE,GAAA,EAAAD,EAAAuhE,EAAAluE,WAAAghC,EAAAr0B,EAAA+tD,YAAAz6D,SAAA0M,EAAA,IAExE/qB,EAAK,6BAA6B,CAAC,EAAAqe,EAAA+gC,EAChCp/C,MAAK,kCAAmC,CAACA,EAAK,0CAA0C,CAAC,CAAC,CAAC,EAAAssF,CAAA,KAIjJ,CAEA,MAAcshB,WAAY,CACxB,MAAM3nF,EAAMjY,SAAS6Y,cAAc,KAAK,EACxC,KAAK45B,WAAWnP,OAAOrrB,CAAG,EAC1B,MAAM9b,EAAUiV,GAAO,IAAM,KAAKgkF,WAAU,EAAIn9E,CAAG,EACnD,KAAK1G,iBAAiB,oBAAqBpV,CAAO,EAClD,KAAKguD,KAAI,CACX,CACF,CCrDA,SAAwB4xD,GACtBC,EACAloG,EACAC,EACAkoG,EACmD,CAC5C,OACL,EAAG,+BACH,YAAaD,EAAI,YACjB,UAAW,CACT,EAAG,gBACH,IAAKA,EAAI,IACT,KAAMA,EAAI,IACZ,EACA,EAAGloG,EACH,EAAGC,EACH,MAAO,OAAO,iBACd,KAAAkoG,CAAA,CAEJ,CCnBA,SAAwBC,GAAkBF,EAAwB,CAChE,MAAO,kCAAoCA,EAAI,IAAM,IAAMA,EAAI,IACjE,CCiBA,SAAwBG,GAAQ,CAC9B,aAAA18D,EACA,cAAAwmC,EACA,OAAArzC,EACA,SAAAu+B,EACA,YAAAliF,EACA,QAAA8H,EACA,WAAA3H,EACA,aAAAO,EACA,WAAA2hF,EACA,qBAAA8qC,CACF,EAWG,CACMxpE,EAAA,UAAU,IAAI,OAAO,EAEtB,MAAArjD,EAAY,SAAS,cAAc,GAAG,EAClCA,EAAA,UAAU,IAAI,gBAAiB,gBAAgB,EAEnD,MAAA8sH,EAAU58D,EAAa,IAAM,oBAC7B68D,EAAS78D,EAAa,IAAM,sBAC5B,CAAC,IAAAu8D,CAAO,EAAAv8D,EAGR88D,EAAW,IACXC,EAAY,IAElBjtH,EAAU,UAAY;AAAA,gCACQgtH,CAAQ,eAAeC,CAAS;AAAA;AAAA;AAAA;AAAA,UAK9DlhF,GAAiB/rC,CAAS,EAE1B,MAAMktH,EAAiBltH,EAAU,kBAEjC02F,EAAc,OAAO12F,CAAS,EAE9B,MAAM0sH,EAAO,GAEPS,EAAgBV,GAA2B,CACrCzsH,EAAA,KAAO2sH,GAAkBF,CAAG,GAGlCloG,EAAQ3kB,GAAW,SAAWotH,EAAW,IAE/C,IAAII,EAAa,EACXR,QAAU,CACdt8G,EACAlQ,IACG,CACH,MAAMqsH,EAAMn8G,EAAM,IACZ+8G,EAAc,EAAED,EAEhBE,EAAoBttH,EAAU,cAAc,sBAAsB,EACrEstH,IACE5yG,GAAS,YAAY,YAAY,EAChB4yG,EAAA,UAAU,IAAI,UAAU,EAE1CA,EAAkB,OAAO,GAInBttH,EAAA,UAAU,IAAI,SAAS,EACjCA,EAAU,QAAQktH,CAAc,EAEhC,MAAMK,EAAuC,CAC3C,GAAG7tH,EACH,GAAI2tH,IAAgB,EAAI,CAAC,cAAe,QAAa,CAAC,GAGlDG,EAAiB,SAAS,cAAc,KAAK,EAEnD,GADeA,EAAA,UAAU,IAAI,qBAAqB,EAC/CT,EAAQ,CACH,MAAAU,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAc,EAE1B,MAAAC,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sBAAsB,EAC5CD,EAAI,OAAOC,CAAO,EAElBD,EAAI,mBAAmB,YAAa;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWnC,EAED,MAAM7rG,EAASkM,GAAU,CACvB,WAAAjuB,EACA,KAAM,GACN,OAAQ2H,EAAQ,OAChB,SAAU,GACV,YAAa+lH,CAAA,CACd,EACM3rG,EAAA,KAAK,UAAU,IAAI,qBAAqB,EAC/CxhB,GAAc,KAAKwhB,EAAO,iBAAiB,EAEvC6rG,EAAA,OAAO7rG,EAAO,IAAI,EAEtB4rG,EAAe,OAAOC,CAAG,OAEzBD,EAAe,UAAY;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,QAUnB3vG,GAAA,CACR,MAAO2uG,GAAmBC,EAAKloG,EAAOA,GAASyoG,EAAWC,GAAYP,CAAI,EAC1E,UAAWc,EACX,cAAeA,EACf,SAAU,IAAM,CACXH,IAAgBD,GACnBptH,EAAU,OAAOwtH,CAAc,CACjC,EACA,eAAgB,IAAM,CACjBH,IAAgBD,IACTptH,EAAA,UAAU,OAAO,SAAS,EACpCktH,EAAe,OAAO,EACtBI,GAAmB,OAAO,EAC5B,EACA,aAAAltH,EACA,GAAGmtH,CAAA,CACJ,GAGM,SAAAI,EAAkBC,EAAalB,EAAc,CAE5C,oBAAe,KAAK,IAAIkB,GAAO,KAAK,GAAK,IAAI,EAAK,GAAKlB,CACjE,CAEAS,EAAaV,CAAG,EAChBG,EAAQ18D,EAAc9vD,CAAY,EAElC,IAAIytH,EAAiBd,GAAUvlH,EAAQ,KAAQ0oD,EAAkD,QAAU,IAAO,OAClH,MAAM49D,EAAgBf,GAAU,KAAK,OAASc,EAE1C,IAAA1d,EAAqB3xG,EAAoBuvH,EAAsBC,EAwBnE,GAvBGlB,GAAYC,GAAU,CAACe,GACjBzqE,EAAA,UAAU,OAAO,kBAAkB,EAEjC8sD,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,YAAY,EAEzB3xG,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,kBAAkB,EAE5BuvH,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,oBAAoB,EAEnC5d,EAAA,OAAO3xG,EAAOuvH,CAAO,EAC5BhsC,EAAW,OAAOouB,CAAM,GAEV6d,EAAA,GAGbjB,IACS/sH,EAAA,UAAU,IAAI,SAAS,EACvBA,EAAA,UAAU,OAAO,aAAc8tH,CAAa,GAGrDhB,EACDtuH,EAAM,OAAOK,GAAeqxD,EAAgD,KAAK,CAAC,EAClF69D,EAAQ,OAAOlvH,GAAeqxD,EAAgD,OAAO,CAAC,UAC9E68D,GAAU,CAACe,EAAe,CACzBlsC,EAAA,UAAU,IAAI,MAAM,EACvBpjF,EAAA,UAAU,IAAI,eAAe,EAC3BuvH,EAAA,UAAU,IAAI,eAAe,EAC9B5d,EAAA,UAAU,IAAI,SAAS,EAExB,MAAA8d,EAAc,IAAItvH,GAAK,YACvBH,EAAA,OAAOiE,EAAK,oBAAoB,CAAC,EAC/BsrH,EAAA,OAAOE,EAAY,OAAO,EAE5B,MAAAC,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,kBAAkB,EAEtC,MAAM5nG,EAAS,GACTjnB,GAAQinB,EAAS,GAAK,EACtBg/D,EAAgBh/D,EAAS,EAAI,KAAK,GAElC6nG,EAAgB,IAAIxvH,GAAK,YACzBuvH,EAAA,OAAOC,EAAc,OAAO,EAClCD,EAAM,mBAAmB,YAAa;AAAA,iDACO7uH,CAAI,eAAeA,CAAI;AAAA,sBAClDA,EAAO,CAAC,SAASA,EAAO,CAAC,QAAQinB,CAAM,4DAA4DjnB,EAAO,CAAC,KAAKA,EAAO,CAAC,wBAAwBimF,CAAa,IAAIA,CAAa;AAAA;AAAA,KAE/L,EACK,MAAA8oC,EAAcF,EAAM,iBAAiB,kBACrCG,EAAoBD,EAAY,UAAU,EAAI,EAClCC,EAAA,UAAU,IAAI,gCAAgC,EAC1DH,EAAA,iBAAiB,OAAOG,CAAiB,EAE/Cle,EAAO,OAAO+d,CAAK,EAEf,IAAAI,EAAc9mH,EAA4B0nE,EAAU,GACxD,MAAMv6B,EAAS,CAACntC,EAAU8mH,EAAaC,IAAwB,CAC7D,GAAGr/C,EACD,OAGF,MAAMhf,GAAe1oD,EAAQ,MACvB,CAAC,OAAA+9E,EAAUr1B,KACXs+D,GAASt+D,GAAa,IAYzB,GAXH29D,EAAiBU,EAAY,GAAK/mH,EAAQ,KAAO+9E,IAAU,IAExD+oC,IAAgB9mH,IACd8mH,IAAgB7B,EAAI,MAAQ+B,GAAO,KAAO/B,EAAI,OAAS+B,GAAO,QAC/DrB,EAAaqB,EAAM,EACnB5B,EAAQ18D,EAAY,GAGR1oD,KAGb,KAAK,IAAI,GAAKqmH,EAAgB,CACxBxqE,EAAA,UAAU,IAAI,kBAAkB,EAC7BrjD,EAAA,UAAU,IAAI,YAAY,EAC3B4hF,EAAA,UAAU,OAAO,MAAM,EAChCuuB,EAAO,YAAYvuB,CAAQ,EACrBz1D,IACN,MACF,CAIG,GAFHnsB,EAAU,MAAM,YAAY,YAAa,GAAGkwD,GAAa,OAAO,KAAK,EAElEs+D,GAAO,kBAAoB,OAAW,CACvC,MAAMC,GAAmBD,GAAO,gBAAkBb,EAAkBa,GAAO,IAAK9B,CAAI,EACpF1sH,EAAU,MAAM,YAAY,kBAAmB,GAAGyuH,GAAmB,CAAC,IAAI,CAC5E,CAEA,IAAIz9G,GAA0B09G,GAC1B51F,GAAM,EAAI,GAAKtxB,EAAQ,WAAaA,EAAQ,MAAS,GACzCwJ,GAAA,0BAEAA,GAAA,iBACC09G,GAAA,CAAC,KAAK,OAAO51F,GAAM,EAAI,EAAItxB,EAAQ,WAAa,EAAE,CAAC,GAGpE,MAAM3E,GAAYgrH,EAAiB,KAAK,OAAS,IAC3Cc,IAAoB,EAAI9rH,EAAW0iF,IAAUD,EACnD8oC,EAAY,aAAa,oBAAqB,IAAIO,EAAgB,EAAE,EAEpEV,EAAY,iBAAiB,CAC3B,IAAKj9G,GACL,KAAM09G,EAAA,CACP,EAEDP,EAAc,iBAAiB,CAC7B,IAAKtrH,EAAW,KAAO,eAAiB,0BACxC,KAAM,CAAC,KAAK,MAAMA,EAAW,KAAOA,EAAW,GAAKA,EAAW,IAAI,CAAC,EACrE,GAGG47B,EAAW,YAAYkW,EAAQ,GAAI,EAClCA,IAEP,MAAMxoB,EAAQ,IAAM,CACR+iD,EAAA,GACV29C,EAAqB,OAAOxpE,CAAM,EAClC,cAAc5kB,CAAQ,GAGHouF,EAAA,IAAIxpE,EAAQ1O,CAAM,EACvC90C,EAAW,QAAQssB,CAAK,CAC1B,CAEA,OAAG4hG,GACDA,EAAQ,OAAOnsC,CAAQ,EAGlBosC,CACT,CClSA,SAAwBY,GAAmB,CACzC,OAAAvgG,EACA,KAAAiX,EACA,QAAA99B,EACA,aAAAqnH,EACA,YAAAC,CACF,EAMG,CACG,IAAA/pH,EAAuCqC,GAAainB,EAAO,KAAM,CAAC,QAAS,GAAM,aAAc,GAAK,EACpG0gG,EACAC,EACAz8F,EAEE,MAAC,OAAAr0B,CAAU,EAAAonC,EACX4qB,EAAe1oD,GAAS,MACxBynH,EAAcH,GAAiD,KAAOtnH,GAAS,IAC/EyjC,EAAS6jF,GAAiD,QAAUtnH,GAAS,UAAYA,GAAS,OAExG,OAAO6mB,EAAO,EAAG,CACf,IAAK,oBAAqB,CAClB,MAAArf,EAAI5H,GAAa,IAAK,CAC1B,SAAU,CAAC,CACT,EAAG,uBACH,OAAQ,EACR,OAAQ,EACR,IAAKinB,EAAO,IACb,EACF,EAEU0gG,EAAA5mH,GAAuB6G,CAAC,EAAE,kBAC5B+/G,EAAA,UAAU,IAAI,SAAS,EAChCC,EAAa7vH,GAAK,YAAY,EAE9B,KACF,CAEA,IAAK,6BAA8B,CACtB4vH,EAAA,SAAS,cAAc,QAAQ,EACjCA,EAAA,UAAU,IAAI,kBAAkB,EACzCC,EAAa7vH,GAAK,gBAAgB,EAClCozB,EAAW9nB,GAAM,CACfqQ,GAAYrQ,CAAC,EAET,IAAAZ,EACDwkB,EAAO,OAAO,UAAqBxkB,EAAA,QAAQ,QAAQ3L,CAAM,EAC7C2L,EAAA1L,EAAU,SAAS,qBAAqB,kBAAkB8sC,CAAK,EAAE,KAAM/sC,GAAW,CAC/F,GAAGA,EACMA,SAGL,IAAA62C,EACJ,GAAG1mB,EAAO,WAAY,CACpB,MAAM3H,EAAqE,CACzE,sBAAuB,QACvB,yBAA0B,OAC1B,6BAA8B,WAC9B,wBAAyB,SACzB,6BAA8B,UAGxBquB,EAAA1mB,EAAO,WAAW,IAAK9L,GAASmE,EAAInE,EAAK,CAAC,CAAC,CACrD,CAEA,OAAOk0B,GAAc,aAAa1B,EAAO,CAAC,aAAa,CAAC,EACzD,EAEOlrC,EAAA,KAAK,MAAMy8G,GAAiB,CAClC,MAAM/nH,EAAWL,IAAWooH,EAAehhF,EAAK,SAAW,OAC3D,MAAMA,EAAK,aAAa,aAAa,CAAC,OAAQghF,EAAc,SAAA/nH,EAAS,EACrEJ,EAAU,SAAS,qBAAqB,kBAAkBmoH,EAAc/nH,EAAU0sC,EAAO5c,EAAO,KAAK,EACtG,GAEH,KACF,CAEA,IAAK,oBAAqB,CACxB,MAAM6gG,EAAeh/D,EAAa,IAAM,sBAAwBA,EAAe,OAC/E,GAAGg/D,GAAc,eACf,MAGSH,EAAA,SAAS,cAAc,QAAQ,EACjCA,EAAA,UAAU,IAAI,QAAQ,EAC/BC,EAAa7vH,GAAK,MAAM,EAErB+vH,GAAc,iBACfnqH,EAAOtC,EAAK,sCAAsC,GAGpD,KACF,CAEA,IAAK,wBAAyB,CACjBssH,EAAA,SAAS,cAAc,QAAQ,EACjCA,EAAA,UAAU,IAAI,aAAa,EAE9B,MAAC,IAAApnH,EAAK,UAAAwnH,CAAa,EAAA9gG,EAEzBkE,EAAU,IAAM,CACd,MAAMsF,EAASpJ,GAAiB,CAACsgG,CAAQ,EAAG,EAAI,EAChDzpF,EAAK,aAAa,cAAc,CAC9B,OAAApnC,EACA,IAAK+wH,EACL,IAAAtnH,EACA,SAAUwnH,CAAA,CACX,EAAE,KAAK,IAAM,CACLt3F,GAAA,CACR,GAEH,KACF,CAEA,IAAK,8BACL,IAAK,wBAAyB,CACjBk3F,EAAA,SAAS,cAAc,QAAQ,EACjCA,EAAA,UAAU,IAAI,aAAa,EACpCC,EAAa7vH,GAAK,SAAS,EAE3BozB,EAAU,IAAM,CACd,MAAMsF,EAASpJ,GAAiB,CAACsgG,CAAQ,EAAG,EAAI,EAChDzpF,EAAK,WAAW,CACd,MAAA2F,EACA,IAAK5c,EAAO,IACZ,gBAAiBA,EAAO,IAAM,8BAC9B,WAAYA,EAAO,KACpB,EAAE,QAAQ,IAAM,CACRwJ,GAAA,CACR,GAEH,KACF,CAEA,IAAK,6BAA8B,CACtBk3F,EAAA,SAAS,cAAc,QAAQ,EACjCA,EAAA,UAAU,IAAI,kBAAkB,EAEzCx8F,EAAU,IAAM,CACT+S,EAAA,aAAa,aAAapnC,CAAM,GAEvC,KACF,CAEA,IAAK,yBAA0B,CAClB6wH,EAAA,SAAS,cAAc,QAAQ,EAC1Cx8F,EAAU,IAAM,CACJp0B,EAAA,SAAS,qBAAqB,oBAAoBD,EAAQ+wH,EAAY5gG,CAAM,EACrF,KAAM+gG,GAAmB,CACrB,OAAOA,EAAe,SAAY,UAAYA,EAAe,QAAQ,QAChE5+F,GAAAppB,GAAagoH,EAAe,QAAS,CAAC,QAAS,GAAM,aAAc,EAAK,EAAC,CACjF,CACD,GAGH,KACF,CAEA,IAAK,4BAA6B,CACrBL,EAAA,SAAS,cAAc,QAAQ,EAC1Cx8F,EAAU,SAAW,CACf,IAAA4kB,EACJ,MAAMxoB,EAAWN,EAAO,UAElBghG,EAAmB1gG,EAAS,IAAM,sBAClC2gG,EAAsB3gG,EAAS,IAAM,2BACrC4gG,EAAoB5gG,EAAS,IAAM,sBAEnC6gG,EAAoC,CAAC,SAAS,EACpD,GAAGH,EACDl4E,EAAoBt5C,GACf,EAAAA,EAAK,IAAM,QAIX8wB,EAAS,MAAQ,QAAaA,EAAS,MAAQ,CAAC,CAAC9wB,EAAK,OAAO,KAI7D8wB,EAAS,UAAY,QAAaA,EAAS,UAAY,CAAC,CAAC9wB,EAAK,OAAO,SAO1E2xH,EAAU,KAAK,UAAU,MACpB,CACD,IAAAC,EACDF,IAEDE,GADsB,MAAMtxH,EAAU,SAAS,gBAAgB,eAAeD,EAAQ,GAAG,GAC3D,MAAM,IAAKonC,GAASA,EAAK,EAAE,GAG3D6R,EAAoBt5C,GAAS,CAiBvB,GAhBDA,EAAK,IAAM,YAAcyxH,GAA6BzxH,EAAK,IAAM,SAIjE,CAAC,CAAEA,EAAwB,OAAO,YAAcyxH,GAIhD3gG,EAAS,OAAO,SAAW,CAAE9wB,EAAqB,OAAO,SAIzD8wB,EAAS,eAAiB,QAAa,CAAC,CAAC/wB,GAAuBC,CAAI,EAAE,CAAC,GAAM,CAAC,CAAC8wB,EAAS,cAIvFA,EAAiD,QAAU,QAC5DA,EAAiD,QAAU,CAAC,CAAE9wB,EAAwB,OAAO,MACvF,SAGT,GAAG8wB,EAAS,mBACA,UAAAlnB,KAAUknB,EAAS,kBAAkB,OAC7C,GAAG,CAACwgB,GAAUtxC,EAAwB4J,CAAoB,EACjD,SAKT,QAAAknB,EAAiD,OAAO,iBACvD,CAAC8gG,EAAc,SAAS5xH,EAAK,EAAE,GAAK,CAACsxC,GAAUtxC,EAAqB,cAAc,EAehF,CAEX,CAEM,MAAA6xH,EAAmB,MAAMj5E,GAAc,cAAc,CACzD,SAAU+4E,EACV,iBAAAr4E,EACA,YAAa,GACb,MAAO9oB,EAAO,aACd,cAAe,IAAM,CACVqC,GAAA,CACP,YAAa,4BACb,kBAAmB,CACjBjuB,EACE4sH,EAAmB,kCAAqCC,EAAsB,qCAAuC,mCACrH,CAACjhG,EAAO,YAAY,CACtB,CACF,EACD,CACH,EACA,aAAcghG,EAAmB,0BAA6BC,EAAsB,6BAA+B,2BACpH,EAED,GAAG,CAACD,EAAkB,CAEpB,MAAMM,EAAsB,MAAM,QAAQ,IAAID,EAAiB,IAAKxxH,GAAW2S,GAAc,CAAC,OAAA3S,CAAO,EAAC,CAAC,EACjG0xH,EAAeptH,GAAKmtH,EAAqB,EAAK,EAChD,IAAAE,EACDD,EAAa,SAAW,EACzBC,EAAsBD,EAAa,CAAC,GAEdC,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,OAAO,GAAGD,CAAY,GAE5C,MAAMtwE,EAAgD,CACpDuwE,EACA,MAAMh/G,GAAc,CAAC,OAAA3S,EAAO,GAa9B,MAAMssC,GAAkB,CACtB,mBAXkD,yCAYlD,oBAAA8U,EACA,OAAQ,CACN,QAAS,qCACX,EACD,CACH,CAEAnhD,EAAU,SAAS,mBAAmB,qBACpCD,EACA+wH,EACA5gG,EAAO,UACPqhG,CAAA,EACA,MAAOrgH,GAAkB,CACtBA,EAAI,OAAS,8BACLqhB,GAAA,CACP,YAAa4+F,EAAsB,qCAAuC,mCAC3E,CACH,CACD,GAGH,KACF,CAEA,QAAS,CACIP,EAAA,SAAS,cAAc,QAAQ,EAEtCvnH,IACF+qB,EAAU,IAAM,CACJp0B,EAAA,SAAS,mBAAmB,SAAS,CAAC,OAAAD,EAAQ,KAAMmwB,EAAO,KAAK,IAI9E,KACF,CACF,CAEA,OAAG2gG,GACUA,EAAA,UAAU,IAAI,0BAA0B,EAGjDH,GACFE,GAAU,OAAOhqH,CAAI,EAGhB,CAAC,KAAAA,EAAM,SAAAgqH,EAAU,WAAAC,EAAY,QAAAz8F,CAAO,CAC7C,iOC/VMpY,GAAY,UAElB,SAAS21G,GAAc/hH,EAKpB,CACD,OAAOA,GAAO3H,UAAO,WAAAga,EAAAC,KAAAqN,EAIZ3f,EAAMuzC,IAAG,cAAA5zB,GAAA,WAAAC,GAAAD,EAAAtN,CAAA,EAATrS,EAAMuzC,IAAGlhC,EAAAU,EAAAV,EAEbrS,MAAM3H,QAAO,MAAA0a,EAAAV,GAAA,WAAAW,EAAAC,EACbjT,QAAMs/B,IAAI,YAAVtsB,EAAA,GAAAE,EAAeosE,GAAO,CAACjmE,KAAI,mBAAsB,GAAEjN,EAAU,eAAiB,YAAAmG,GAAA6M,GAAA,OAAAC,EAL1E2iG,GAAc,EAAA1iG,EACZ5U,GAAY,GAAE0B,EAAU,UAAUpM,EAAMs/B,MAAQ,UAAWt/B,EAAMhJ,MAAQ,UAAW,CAACgJ,EAAMhJ,MAAQ,WAAW,EAACqoB,WAAAD,EAAAC,KAAA7M,GAAAH,EAAA+M,QAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAAnN,EAAA+M,EAAAE,MAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA/E,KAO5H,CAEA,SAAS4vG,GAAYjiH,EAMlB,CACD,OAAOA,GAAO3H,UAAO,WAAAsa,EAAAC,GAAA,EAAAC,EAAAF,EAAAG,WAAAC,SAAAF,EAGd7S,MAAM3H,OAAO,EAAA0a,EAAAJ,GAAA,WAAAiM,EAAA3L,EAEfjT,QAAMkiH,GAAG,YAATtjG,EAAA,eAAAoiE,EAAA7hE,KAAAgjG,UAAAnhC,EAAA,QACgDhhF,EAAMkiH,IAAI19F,QAAO,IAAAzR,EAAAiuE,EAAA,IAC7DhhF,EAAMkiH,IAAI7pH,OAAO,EAAA2oF,KAErB,WAAAzuE,OAAAC,GAAAG,EAROqvG,SAAc,IAAArvG,KAW5B,CAEA,SAASyvG,GAAaprH,EAAmB,CACvC,OAAOA,IAAI,WAAAyoB,EAAAC,GAAA,EAAAo0B,EAAAr0B,EAAA3M,WAAAC,SAAA+gC,EAGJ98C,CAAI,EAAAub,OAAAC,GAAAiN,EAFCuiG,SAAc,IAAAviG,KAM5B,CAEA,SAAS4iG,GAAYriH,EAElB,CACD,kBAAAm8F,EAAAC,KAAArpF,SAAAopF,EAEKn8F,MAAMif,QAAQ,EAAA1M,OAAAC,GAAA2pF,EADP6lB,SAAc,IAAA7lB,CAAA,IAI5B,CAEA,SAASmmB,GAAatiH,EAMnB,CACD,GAAG,CAACA,EACF,OAGF,MAAMuiH,EAAc,GAAEn2G,EAAU,WAC1Bo2G,EAAexiH,EAAMyiH,aAAgB,GAAEF,CAAW,iBACxD,OAAGviH,EAAM3H,SACP2H,EAAM3H,QAAQge,UAAUS,IAAI,GAAG,CAACyrG,EAAYC,CAAY,EAAExpG,OAAO2F,OAAO,CAAC,GAG3E,WAAAq+E,EAAAC,KAAAlqF,SAAAiqF,EAEKh9F,MAAM3H,UAAO,WAAAgvG,EAAA/0F,KAAA+pD,EAAcr8D,EAAMuzC,IAAG,cAAA8oB,GAAA,WAAAz8C,GAAAy8C,EAAAgrC,CAAA,EAATrnG,EAAMuzC,IAAG8zD,EAAA90F,GAAA,IAAAiN,GAAA6nF,EAAS38F,GAAW63G,EAAYC,CAAY,CAAC,GAAAnb,CAAQ,MAAArK,CAAA,IAGhG,CAEe,SAAS0lB,GAAW1iH,EAShC,CACD,MAAM2iH,EAAaZ,GAAc/hH,EAAMoiG,MAAM,EACvCwgB,EAAWX,GAAYjiH,EAAMuqB,IAAI,EACjCs4F,EAAWT,GAAapiH,EAAMvP,KAAK,EACnCqyH,EAAiBR,GAAatiH,EAAMuC,KAAK,EAEzCwgH,GAAU,WAAAzb,EAAAh1F,KAAAS,SAAAu0F,EAAA,IAEXtnG,EAAMuC,OAAOy5D,WAAa,OAAS8mD,EAAc,MAAA/vG,EAAAu0F,EACjDsb,EAAQ,MAAA7vG,EAAAu0F,EACRub,EAAQ,MAAA9vG,EAAAu0F,GAAA,WAAApoF,EAAAjM,EACRjT,QAAMhJ,IAAI,YAAVkoB,EAAA,GAAAhM,EAAemvG,GAAW,KAAApjG,UAAA,QAAEjf,EAAMhJ,IAAI,EAAe,YAAA+b,EAAAu0F,EAAA,IACrDtnG,EAAMuC,OAAOy5D,WAAa,UAAY8mD,EAAc,MAAA/vG,EAAAu0F,EACpDqb,EAAU,MAAApwG,GAAA,IAAAiN,GAAA8nF,EAND58F,GAAY,GAAE0B,EAAU,WAAWpM,EAAMuC,OAAOkgH,aAAe,eAAgBziH,EAAMgjH,YAAc,aAAa,CAAC,GAAA1b,MAUzHn3B,GAAK,WAAAg4B,EAAA71F,KAAAS,SAAAo1F,EAON4a,CAAU,EAAAxwG,GAAAiN,OAAA2oF,EALJz9F,GACJ,GAAE0B,EAAU,SACb,mBACF,CAAC,GAAA+7F,MAMC1oG,EAAGyT,EACNmoD,GAAO,KACNC,WAAS,QAAEt7D,EAAMyuB,UAAY,IAAM,KAAK,EAAA8kB,IAAAgpB,EAAA,OAAAC,EACnCx8D,EAAMuzC,IAAG,OAAAipB,gBAAAD,CAAA,EAATv8D,EAAMuzC,IAAGgpB,CAAA,qBACP7xD,GACL0B,GACA,aACApM,EAAMyuB,WAAa,uBACnBzuB,EAAMuC,OAAO2M,WAAc,OAAMlP,EAAMuC,MAAM2M,SAAU,QACzD,CAAC,EAAA+P,SAEAkxD,EAEJ,EAED,OAAInwE,EAAMyuB,UAIVvb,EACGq2F,GAAM,CAAAtqF,SAAExf,CAAG,GAJLA,CAMX,CAAC0+D,GAAA,WC7JD,SAAwB8kD,IAAW,CAC3B,MAAAt+G,EAAU,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAI,UAAU,EACzBA,CACT,CCuLO,MAAMu+G,GAAwB,GACxBC,GAAwB,GAC/BC,GAAkB,GAIlBC,GAAmE,CACvE,CAAC,4BAA6B,EAAI,EAClC,CAAC,0BAA4B5pH,GAAYA,EAAQ,OAAO,GAAG,EAC3D,CAAC,kCAAmC,EAAI,EACxC,CAAC,6BAA8B,EAAI,EACnC,CAAC,6BAA8B,EAAI,CACrC,EACM6pH,GAAiB,IAAI,IAAID,EAAoB,EAEtCj1C,OAAmD,IAE7Dm1C,IACDn1C,GAAmB,IAAI,wBAAwB,EAMjD,IAAI0d,GAAU,EAId,MAAM03B,GAA8B,EACvBv2C,GAAgB,EACvBw2C,GAA0B,IAC1BC,GAAqB,IAAI,MAAM,cAAc,EAE7CC,GAAwB,GAExBC,GAAkC7tE,GAIlC8tE,GAAc,GAEdC,GAA4C,CAChD,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,GACH,EAAG,EACL,EACMC,GAAyB,OAAO,KAAKD,EAAe,EAAE,OAEtDE,GAAkE,CACtE,iBAAkB,2BAClB,mBAAoB,YACpB,aAAc,uBACd,gBAAiB,uBACjB,cAAe,2BACf,kBAAmB,eACnB,eAAgB,YAChB,uBAAwB,kBACxB,kBAAmB,OACnB,cAAe,YACf,oBAAqB,6BACvB,EAEMC,GAA2E,CAC/E,oBAAqB,4BACvB,EAUA,SAASC,GAAqB7hH,EAAgB,CACrC,YAAK,IAAI,GAAGA,CAAI,CACzB,CAEA,MAAM8hH,GAAqBC,GAClBA,EAAiB,MAqBV,SAAAC,GAAYl0H,EAA2D2N,EAAuB,CACzG,cAAO3N,GAAY,WACpB2N,EAAM3N,EAAO,IACbA,EAASA,EAAO,QAGX,GAAGA,CAAM,IAAI2N,CAAG,EACzB,CAEA,SAASwmH,GAAiBhvE,EAAqB,CAG7C,GAFG,GAACA,GACQA,EAAO,QAAQ,MAChB,QACJ,OAAA+uE,GAAY/uE,EAAO,QAAQ,OAAO,SAAY,GAACA,EAAO,QAAQ,GAAG,CAC1E,CAEO,SAASivE,GAAaC,EAAkB,CAC7C,KAAM,CAACr0H,EAAQ2N,CAAG,EAAI0mH,EAAQ,MAAM,GAAG,EACvC,MAAO,CAAC,OAAQr0H,EAAO,SAAY,MAAK,CAAC2N,EAC3C,CAEA,MAAM2mH,GAAiBJ,GAAYztH,GAAc,CAAC,EAElD,SAAS8tH,GAAiBpvE,EAAqB3wC,EAAsB3K,EAAsB,EACxFs7C,EAAO,gBAAPA,EAAO,cAAkB,CAAC,IAAG,QAAQ,CAAC,QAAA3wC,EAAS,SAAA3K,EAAS,EAChDA,GACX,CAEA,MAAqB2qH,EAAY,CA8H/B,YACUptF,EACAhnC,EACR,CAFQ,UAAAgnC,EACA,cAAAhnC,EAtHF,mBAAgB,IACxB,KAAQ,WAA+G,GAEvH,KAAQ,QAA4C,GAC7C,qBAA+B,IACtC,KAAO,sBAAqD,GAC5D,KAAO,WAAsC,GAC7C,KAAQ,aAMH,GAEL,KAAQ,aAAe,GACvB,KAAQ,mBAAqB,EAIrB,kBAAyC,IACzC,yBAAgD,IAChD,sBAAgC,IAChC,6BAAuC,IAM/C,KAAQ,UAAkC,KAG1C,KAAQ,gCAA8C,KAEtD,KAAQ,kBAAiC,KAKzC,KAAQ,iBAAmBsP,KAM3B,KAAQ,YAAyB,GAEjC,KAAQ,2BAA6B,GAGrC,KAAQ,YAAc,GAKtB,KAAQ,aAEH,GAOG,mBAA8B,IAGtC,KAAQ,gBAAkB,GAclB,2BAAsC,IAItC,wBAAuC,IACvC,0BAAsD,IAI9D,KAAQ,cAAwB,EAExB,2BAA2C,IAG3C,+BAAyC,IAUzC,8BAAiF,IA4wCjF,8BAA4BjB,GAAqC,CACvE,GAAGA,EAAM,eAAgB,CACvB,MAAM6W,EAAS7W,EAAM,OACfd,EAAM,KAAK,SAAS,IAAI2X,CAAqB,EAC9C,0BAAqB,UAAWA,EAAQ3X,CAAG,CAClD,GAGM,qCAAmCc,GAAqC,CAC9E,GAAGA,EAAM,eAAgB,CACvB,MAAM6W,EAAS7W,EAAM,OACfd,EAAM,KAAK,gBAAgB,IAAI2X,CAAqB,EACrD,0BAAqB,UAAWA,EAAQ3X,CAAG,CAClD,GAGM,2BAAyBc,GAAqC,CACpE,GAAGA,EAAM,eAAgB,CACjB,MAAA4lH,EAAUF,GAAiB1lH,EAAM,MAAqB,EAG5D,GAFA,KAAK,SAAS,UAAUA,EAAM,OAAQ,KAAK,qBAAqB,EAE7D4lH,EACI,eAAU,IAAIA,CAAO,EAC1B,KAAK,0BAA0B,MAC1B,CACC,MAAC,iBAAAJ,CAAoB,OACxB,IAACA,GAAoBA,EAAiB,OACvC,OAGFA,EAAiB,OAAS,GACrB,cAAS,gBAAgB,qBAAqB,KAAK,OAAO,SAAS,EAAGA,EAAiB,SAAS,CACvG,CACF,GAGF,KAAQ,+BAAiC,CAACxlH,EAAkC5E,EAAgC82C,IAAqB,CAC/H,GAAGlyC,EAAM,eAAgB,CACvB,KAAK,SAAS,UAAUA,EAAM,OAAQ5E,CAAQ,EAE9C,MAAM2uF,EAA6B/pF,EAAM,OAAO,cAAckyC,CAAQ,EAC7C9Y,GAAA,EAAE,KAAK,IAAM,CACjCpqB,GAAQ+6E,CAAa,GACtBliD,GAAmBkiD,CAAa,CAClC,CACD,CACH,GAGM,mCAAiC/pF,GAAqC,CAC5E,KAAK,+BAA+BA,EAAO,KAAK,8BAA+B,aAAa,GAGtF,mCAAiCA,GAAqC,CAC5E,KAAK,+BAA+BA,EAAO,KAAK,8BAA+B,0BAA0B,GAyHnG,wBAAqB,MAAMlC,GAAkB,CACvBgZ,EAAgBhZ,EAAE,OAAQ,kBAAkB,GAC1C,cAAcA,CAAC,EAE7C,MAAMrE,EAAUqd,EAAgBhZ,EAAE,OAAQ,gBAAgB,EACvD,KACD,KAAK,KAAK,OAASywE,GAAS,WAC5B90E,GACA,CAAC,KAAK,KAAK,UAAU,aACrB,CAACqd,EAAgBhZ,EAAE,OAAQ,SAAS,GACpC,CAACgZ,EAAgBhZ,EAAE,OAAQ,sBAAsB,GACjD,KAAK,SAAWtM,EAAU,MACzB,CACD,KAAK,gBAAgB,EACrB,MACF,CAEM,MAAAklD,EAAS5/B,EAAgBrd,EAAS,QAAQ,EAChD,GAAG,CAAC,KAAK,KAAK,UAAU,gBAAgBi9C,CAAM,EAAG,CAC/C,KAAK,gBAAgB,EACrB,MACF,CAEI,IAAC,YAAAsvE,EAAa,cAAAC,CAAiB,OACnC,GAAGvvE,IAAWsvE,EACZ,OAQF,GALA,KAAK,gBAAgB,EAErBA,EAAc,KAAK,YAActvE,EACjCuvE,EAAgB,KAAK,cAElBA,EAAe,CACbA,EAAc,QAAQ,QAClB,qBAAgBA,EAAe,EAAI,EAG1C,MACF,CAEAA,EAAgB,KAAK,cAAgB,SAAS,cAAc,KAAK,EACnDA,EAAA,UAAU,IAAI,uBAAuB,EAEnD,MAAM/yH,GADmB+yH,EAAc,iBAAmB,KAAK,gBAAgB,UAC3C,IAAI,IAAM,KAAK,gBAAkBA,CAAa,EAE5EC,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,+BAA+B,EAC5DD,EAAc,OAAOC,CAAc,EAEnCzsH,EAAQ,OAAOwsH,CAAa,EAE5B,IAAIprH,EAAU,KAAK,KAAK,WAAW6qH,GAAiBhvE,CAAM,CAAC,EACxD,GAAA77C,GAAS,IAAM,UAAW,CAC3B,KAAK,gBAAgB,EACrB,MACF,CAEAA,EAAU,MAAM,KAAK,SAAS,mBAAmB,sBAAsBA,CAAO,EAE9E,QAAQ,IAAI,CACV,KAAK,SAAS,oBAAoB,+BAA+BA,EAAS,EAAI,EAC9E9I,GAAgB,sBAAsB,EACtComC,GAAM,GAAG,EACV,EAAE,KAAK,MAAM,CAAC,CAAC,UAAAirD,CAAY,EAAA/yC,CAAkB,IAAM,CAC5C,MAAAI,EAAW2yC,EAAU,CAAC,EAC5B,GAAG,CAAC3yC,EAAU,CACZw1E,EAAc,OAAO,EACrB,MACF,CAGM,MAAAzyH,GADoBi9C,EAAS,IAAM,gBAAkBJ,EAAmB,KAAMhuC,GAAMA,EAAE,WAAaouC,EAAS,QAAQ,EAAI,SAC/F,kBAAoB,MAAM,KAAK,SAAS,gBAAgB,uBAAwBA,EAA0C,WAAW,EAChKv9C,KAIQU,GAAA,CACV,IAAKsyH,EACL,IAAA1yH,EACA,MAAO,GACP,OAAQ,GACR,YAAa,GACb,WAAAN,EACA,MAAO,KAAK,KAAK,eACjB,UAAW,GACX,WAAY,GACb,EAAE,KAAK,CAAC,CAAC,OAAAgiB,CAAM,IAAMA,CAAM,EAAE,KAAM7L,GAAW,CAG7C,MAAM88G,EAAe,IAAM,CACrBjzH,MAKJ+yH,EAAc,QAAQ,OAAS,IAC1B,qBAAgBA,EAAe,EAAI,IAGvC,MAAM,QAAQ58G,CAAM,EACR88G,IAEb98G,EAAO,iBAAiB,aAAc88G,EAAc,CAAC,KAAM,GAAK,EAGjD/3G,EAAA63G,EAAgBnoH,GAAM,CACrCqQ,GAAYrQ,CAAC,EAEb,KAAK,KAAK,aAAa,CACrB,QAAAjD,EACA,SAAA41C,CAAA,CACD,EACD,KAAK,gBAAgB,CACpB,GAAC,eAAgB,KAAK,cAAe,IACvCz9B,EAAI,EACR,GA4BH,KAAQ,gBAAkB,IAAM,CACxB,MAAC,YAAAgzG,EAAa,cAAAC,CAAiB,OAClCD,IACI,qBAAgBC,EAAe,EAAK,EACpC,iBACH,KAAK,cACL,OACJ,EAyIK,oBAAiB,MAAMnoH,GAAa,CACzC,IAAI+Y,EAAS/Y,EAAE,OACX44C,EAAsB,KAAM0vE,EAC5B,IACO1vE,EAAA5/B,EAAgBD,EAAQ,QAAQ,EACtC6/B,IACD0vE,EAAgBV,GAAiBhvE,CAAM,QAE9B,CAAC,CAEd,GAAG,CAACA,GAAU,CAAC,KAAK,KAAK,UAAU,YAAa,CACxC,MAAAzhC,EAAS6B,EAAgBD,EAAQ,aAAa,EACpD,GAAG,CAAC5B,EACF,OAWF,MAAM1jB,EAAS0jB,EAAO,QAAQ,OAAO,SAAS,EAC3C1jB,IAAWyG,GACZ,KAAK,KAAK,aAAa,aAAa,CAAC,OAAAzG,CAAO,GAE5CsyB,GAAM7xB,GAAK,OAAO,aAAc,EAAI,CAAC,EAEvC,MACF,CAEA,GAAG,CAAC0kD,EACF,OAGC,GAAAA,EAAO,UAAU,SAAS,SAAS,GAAK5/B,EAAgBD,EAAQ,gBAAgB,EAAG,CAKjF,GAJA6/B,EAAO,UAAU,SAAS,SAAS,IACpCA,EAASA,EAAO,wBAGfA,EAAO,UAAU,SAAS,WAAW,GAAK,CAAC,KAAK,UAAU,UAAU,SAAS,cAAc,EAC5F,OAGQ,UAAAyW,KAAa,KAAK,aAEvB,GADO,KAAK,aAAaA,CAAS,EAChC,MAAQzW,EAAQ,CACNr1B,GAAA,YAAYsuD,GAAiB,IAAI,KAAK,CAACxiB,CAAS,EAAG,KAAK,UAAU,EAAE,OACjF,KACF,CAGF,MACF,CAEM,MAAAonB,EAAaz9D,EAAgBD,EAAQ,aAAa,EACxD,GAAG09D,EAAY,CACbD,GAA0B,CAAC,WAAAC,EAAY,OAAA79B,EAAQ,EAAA54C,EAAG,WAAY,KAAK,WAAW,EAC9E,MACF,CAEA,GAAG,CAAColB,IAAsBpM,EAAgBD,EAAQ,MAAM,EAAG,CACpD,UAAK,UAAU,gBAAgB6/B,CAAM,EAC1C,MACF,CAGA,GAAG,KAAK,KAAK,UAAU,aAAe54C,EAAE,UAAW,CACjD,GAAG44C,EAAO,UAAU,SAAS,SAAS,GAAK0vE,IAAkB,OAC3D,OAMF,GAHAj4G,GAAYrQ,CAAC,EAGVolB,IAAsB,KAAK,KAAK,UAAU,aAAc,CACpD,UAAK,UAAU,aAAe,OACnC,MACF,CAGA,KAAK,KAAK,UAAU,gBAAgBpM,EAAgBD,EAAQ,cAAc,GAAK6/B,CAAM,EACrF,MACF,CAEM,MAAA2vE,EAA0BvvG,EAAgBD,EAAQ,SAAS,EACjE,GAAGwvG,EAAY,CACb,MAAM90H,EAAS80H,EAAW,QAAQ,OAAO,SAAS,EAClD,GAAG90H,EACI,UAAK,aAAa,aAAa,CAClC,OAAAA,CAAA,CACD,MACI,CACC,MAAA+0H,EAAQD,EAAW,cAA2B,iBAAiB,EACrEpsF,GAAoBqsF,EAAM,UAAU,QAAQ,MAAO,EAAE,CAAC,EAC7CviG,GAAA,CAAC,YAAa,cAAc,EACrC5V,GAAYrQ,CAAC,CACf,CAEA,MACF,CAEM,MAAAyoH,EAAuBzvG,EAAgBD,EAAQ,aAAa,EAClE,GAAG0vG,EAAS,CACL,UAAK,aAAa,SAAS,KAAK,OAAO,WAAYA,EAAQ,QAAQ,IAAW,EACnF,MACF,CAGA,GAD+BzvG,EAAgBD,EAAQ,QAAQ,EACjD,CACZ1I,GAAYrQ,CAAC,EAEb,MAAMjD,EAAU,KAAK,KAAK,WAAWurH,CAAa,EAClD,GAAG,CAACvrH,EACF,OAGF,MAAM8I,EAAS9I,EAA4B,MACrC2rH,EAAY7iH,GAAO,IAAM,wBAA0BA,EAAQ,OAE3Do6B,EAAQ,MAAM0rE,GAAa,OAAO,CACtC,QAAA5uG,EACA,aAAc,MAAM,KAAK,SAAS,mBAAmB,wBAAwBA,EAAQ,OAAQA,EAAQ,GAAG,EACxG,UAAA2rH,CAAA,CACD,EAEEA,GACKzoF,EAAA,iBAAiB,SAAU,MAAMzqC,GAAW,CAC7CA,IAAW,QACA4kF,GAAA,CACV,KAAM,cACN,MAAOpiF,EAAK,6BAA6B,EACzC,YAAaA,EAAK,kCAAmC,CACnD0wH,EAAU,aACV,MAAMtiH,GAAc,CAAC,OAASrJ,EAA4B,WAAaA,EAAQ,OAAO,EACvF,EACD,SAAU,KAAK,UACf,KAAM,MACN,SAAU,IACX,CACH,CACD,EAEH,MACF,CAEM,MAAA0uF,EAA4BzyE,EAAgBD,EAAQ,yBAAyB,EACnF,GAAG0yE,EAAc,CACKG,GAAA,CAClB,MAAO5rF,EACP,aAAAyrF,CAAA,CACD,EACD,MACF,CAEM,MAAApG,EAAkB9zC,GAAUx4B,EAAQ,kBAAkB,EAC5D,GAAGssE,EAAiB,CAElB,GADAh1E,GAAYrQ,CAAC,EACVqlF,EAAgB,UAAU,SAAS,aAAa,EACjD,OAGF,MAAMF,EAAmBE,EAAgB,cACnC9E,EAAgB4E,EAAiB,iBAAiBE,CAAe,EACjE,CAAC,SAAA1yC,CAAY,EAAA4tC,EAEnB,GAAG4E,EAAiB,YAActG,GAAmB,IAAK,CACrD,IAACnrF,EAAU,QAAS,CACrBu2C,GAAa,KAAK,CAAC,QAAS,YAAa,GACzC,MACF,CAEM,MAAA0+E,EAAS,KAAK,KAAK,aAAa,EACtC,GAAGjqC,GAAeiqC,GAAQ,SAAUh2E,CAAQ,EAAG,CACxC,UAAK,YAAY,cAAc3yC,CAAe,EACnD,MACF,CAEA,KAAK,KAAK,WAAW,CAAC,SAAA2yC,CAAmB,OACpC,CACC,MAAA51C,EAAUooF,EAAiB,aACjC,KAAK,KAAK,aAAa,CAAC,QAAApoF,EAAS,SAAA41C,CAAS,EAC5C,CAEA,MACF,CAEM,MAAAi2E,EAAiB5+E,GAAgBjxB,EAAQ,oBAAoB,EACnE,GACE6vG,GACAA,EAAe,cAAc,iBAAiB,sBAAsB,EAAE,SAAW,GACjFhwE,EAAO,UAAU,SAAS,WAAW,EACrC,CACK,UAAK,aAAa,oBAAoB,CACzC,MAAO54C,EACP,UAAW4oH,EACX,SAAU,KAAK,SACf,WAAY,KAAK,cAAc,EAC/B,OAAQ,KAAK,OACd,EAAE,KAAMC,GAAmB,CACvBA,GAIH,KAAK,sBAAsBD,CAAc,EAC1C,EAED,eACQA,EAAgB,CACxB,KAAK,sBAAsBA,CAAc,EACzC,MACF,CAEM,MAAAE,EAAwB9vG,EAAgBD,EAAQ,wBAAwB,EAC9E,GAAG+vG,EAAU,CACX,MAAMC,EAAcD,EAAS,UAAU,SAAS,cAAc,EACxDE,EAAaF,EAAS,UAAU,SAAS,aAAa,EAE5D,IADeC,GAAeC,IACjB,OAAO,aAAa,EAAE,YAAa,CAC9C34G,GAAYrQ,CAAC,EAEP,MAAAipH,EAAgBh5G,GAAS,YAAY,YAAY,EACpDg5G,IACAH,EAAiB,kBAAoB,KAGlC,MAAAI,EAAc,KAAK,kBAAkB,EAAK,EAChDA,EAAY,KAAK,EAEb,IAAAt5G,EAEE,MAAAu5G,EAAmBF,EAAgB,QAAQ,KAAK,CACpD5uF,GAAM,GAAI,EAAE,KAAK,IAAM,CACZyuF,EAAA,oBAAoB,gBAAiBl5G,CAAe,EAC9D,EACD,IAAI,QAAeuI,GAAY,CAC7BvI,EAAmB5P,GAAuB,CACrCA,EAAE,SAAW8oH,IACN3wG,IACR,OAAQ2wG,EAAiB,kBAC3B,EAGFA,EAAS,iBAAiB,gBAAiBl5G,EAAiB,CAAC,KAAM,GAAK,EACzE,EACF,EAAI,QAAQ,UAER,gCAA2Bu5G,EAAkBD,CAAW,EACpDJ,EAAA,UAAU,OAAO,aAAa,EAC9BA,EAAA,UAAU,OAAO,eAAgBE,CAAU,EACpD,MACF,CACF,CAGA,GADiChwG,EAAgBD,EAAQ,SAAS,EAClD,CACX,QAAK,SAAWkI,GAAiB,CAClC,MAAMlkB,EAAU,KAAK,KAAK,WAAWurH,CAAa,EAC5C70H,EAASqG,GAAWiD,EAAQ,SAAmD,gBAAgB,EAC/FjJ,EAAYiJ,EAAQ,SAAmD,gBACvE0zF,EAAY1zF,EAAQ,SAAS,kBAC9B,UAAK,aAAa,WAAW,CAChC,OAAAtJ,EACA,UAAAg9F,EACA,SAAA38F,CAAA,CACD,MACI,CACL,MAAMs1H,EAAW,KAAK,KAAK,WAAWd,CAAa,EAC7CvrH,EAAU,MAAM,KAAK,SAAS,mBAAmB,sBAAsBqsH,CAA2B,EAClG/zC,EAAUt4E,EAAQ,QACrBs4E,GACI,cAAS,mBAAmB,qBAAqB,KAAK,OAAQt4E,EAAQ,GAAG,EAAE,KAAMA,GAAY,CAC3F,UAAK,aAAa,aAAa,CAClC,OAAQs4E,EAAQ,WAAW,SAAS,EAAI,EACxC,KAAM5E,GAAS,WACf,SAAW1zE,EAAsB,IAClC,EACF,CAEL,CAEA,MACF,CAEM,MAAAssH,EAAMrwG,EAAgBD,EAAQ,QAAQ,EAC5C,GAAGswG,EAAK,CACA,MAAA9jH,EAAK8jH,EAAI,cAAc,aAAa,EAC1C,GAAGtwG,IAAWxT,GAAM4f,GAAcpM,EAAQxT,CAAE,EAAG,CAC7C,GAAG,KAAK,KAAK,MAAM,eAAgB,CAC3B,MAAAxI,EAAUwI,EAAG,UAAY,IAC1B,cAAS,iBAAiB,SAAS,KAAK,OAAQ,KAAK,KAAK,SAAUxI,CAAO,CAClF,CAEAsT,GAAYrQ,CAAC,EACb,MACF,CACF,CAEA,MAAM0uF,EAAU11E,EAAgBD,EAAQ,YAAY,GAAKD,GAAaC,CAAM,GAAKC,EAAgBD,EAAQ,eAAe,GAAKixB,GAAgBjxB,EAAQ,iBAAiB,EACnK,GAAA21E,GAAWA,IAAY91C,EAAQ,CAChC7/B,EAAS21E,GAAW31E,EACd,MAAAuwG,EAAYvwG,EAAO,QAAQ,QAAUA,EAAO,aAAa,MAAM,GAAKA,EAAO,QAAQ,IACnFwwG,EAAYxwG,EAAO,QAAQ,UAC9B,UAAOuwG,GAAe,UAAYC,EACnC,GAAGA,EAAW,CACZ,KAAM,CAAC,OAAA91H,EAAQ,IAAA2N,CAAG,EAAIymH,GAAa0B,CAAS,EAC5C,GAAGxwG,EAAO,UAAU,SAAS,iBAAiB,EAAG,CACzC,MAAAhc,EAAU,MAAM,KAAK,SAAS,mBAAmB,iBAAiBtJ,EAAO,WAAY,CAAC2N,CAAG,EAC/F,GAAGrE,EAAS,CACJ,MAAA0kD,EAAe,MAAM,KAAK,SAAS,mBAAmB,wBAAwB1kD,EAAQ,OAAQA,EAAQ,GAAG,EAC/G4uG,GAAa,OAAO,CAClB,QAAA5uG,EACA,aAAA0kD,EACA,UAAW,GACZ,CACH,OAEK,UAAK,aAAa,aAAa,CAClC,OAAQhuD,EAAO,SAAS,EACxB,UAAW,CAAC2N,EACZ,MAAO,KAAK,KAAK,aAAa,oBAAoB2X,CAAM,EACzD,CACH,KACK,CACC,MAAAtlB,EAAS61H,EAAU,WACtB71H,IAAWyG,IACZ,KAAK,KAAK,aAAa,aAAa,CAAC,OAAAzG,CAAO,GAC5C,KAAK,KAAK,aAAa,wBAAyBmlD,EAAe,OAAO,GAEtE7yB,GAAM7xB,GAAK,OAAO,aAAc,EAAI,CAAC,CAEzC,CAGF,MACF,CAYG,GAAA0kD,EAAO,UAAU,SAAS,SAAS,GAAK7/B,EAAO,cAAc,UAAU,SAAS,YAAY,EAAG,CAG1F,MAAArjB,EAFU,KAAK,KAAK,WAAW4yH,CAAa,EAER,OAA6C,SAEpF5yH,GAAK,iBACO6tB,GAAA,YAAY6hC,GAAe1vD,EAAI,gBAAiB,OAAW,KAAK,KAAK,KAAK,EAAE,KAAK,EAGhG,MACF,CAEM,MAAA8zH,EAAYxwG,EAAgBD,EAAQ,kBAAkB,EAqB5D,GAAG,KAAK,0BAA0BA,EAAQ/Y,CAAC,EAAG,CAC5C4hH,GAA4B5hH,CAAC,EAC7B,MACF,CAEM,MAAAypH,EAAmBzwG,EAAgBD,EAAQ,SAAS,EAC1D,GAAG0wG,EAAkB,CAChB,GAAAzwG,EAAgBD,EAAQ,kBAAkB,EAC3C,OAGC,GAAAC,EAAgBD,EAAQ,yBAAyB,EAAG,CACrD/Y,EAAE,eAAe,EACjB,MACF,CAEM,MAAA1C,EAAWmsH,EAAiB,QAAQ,SACvCnsH,GACA,OAAeA,CAAQ,EAAEi0C,GAAUx4B,EAAQ,GAAG,EAAG/Y,CAAC,EAGrD,MAAM0pH,EAAqBD,EAAyB,SAChCC,MAEpB,MACF,CAIG,GAFA,CAAC,MAAO,MAAO,MAAmB,UAAQ3wG,EAAO,OAAO,IAAM,KAAaA,EAAAw4B,GAAUx4B,EAAQ,KAAK,GAElG,CAAC,MAAO,MAAM,EAAE,QAAQA,EAAO,OAAO,IAAM,GAAoC,CACjF,GAAGA,EAAO,UAAU,SAAS,eAAe,EAAG,CACvC,MAAAwwG,EAAY3wE,EAAO,QAAQ,UAC3B,CAAC,OAAAnlD,EAAQ,IAAA2N,CAAG,EAAIymH,GAAa0B,CAAS,EACvC,UAAK,aAAa,aAAa,CAClC,OAAQ91H,EAAO,SAAS,EACxB,UAAW,CAAC2N,CAAA,CACb,EACD,MACQ,SAAA2X,EAAO,UAAU,SAAS,SAAS,EAAG,CAC9C,MAAMhc,EAAU,KAAK,KAAK,WAAWurH,CAAa,EAClD/kG,GAAa,YAAYqvD,GAAc,CACrC,CAAC,KAAK,MAAM,EAAG,MAAM,KAAK,SAAS,mBAAmB,iBAAiB71E,CAAO,EAC/E,EAED,MACF,CAEA,IAAI4sH,EAAe,GAEf,IACFA,EAAe,CAAC,CAAC3wG,EAAgBhZ,EAAE,OAAQ,OAAO,OACvC,CAAC,CAEd,GAAG2pH,GAAgB/wE,EAAO,UAAU,SAAS,UAAU,EAAmD,CACxG,MAAM77C,EAAU,KAAK,KAAK,WAAWurH,CAAa,EAC5Ch/G,EAAUvM,EAAQ,SAErB,GAAAuM,EAAQ,IAAM,0BAA2B,CACpCyP,QAAS6/B,EAAO,cAAc,cAAc,EAC5CnlD,EAASqG,GAAUwP,EAAQ,IAAI,EACTm3F,GAAA,CAC1B,OAAQ,IAAM1nF,EACd,OAAAtlB,EACA,GAAI6V,EAAQ,SACb,EACD,MACF,CAEA,IAAIsgH,EAAatgH,EAAQ,gBACzB,GAAG,CAACsgH,EAAY,CACd3jG,GAAS,CAAC,YAAa3c,EAAQ,OAAO,MAAQ,eAAiB,eAAe,EAC9E,MACF,CAEA,IAAIyuE,EAAgBzuE,EAAQ,iBAAmBxP,GAAUwP,EAAQ,gBAAgB,EAAIvM,EAAQ,OAC1F,QAAK,KAAK,OAAS0zE,GAAS,YAAc,CAAC,KAAK,KAAK,QAAS,CAC/D,MAAMo5C,EAAgB,MAAM,KAAK,SAAS,mBAAmB,WAAW,CACtE,OAAQ9xC,EACR,SAAU,KAAK,KAAK,SACpB,MAAO,EACP,SAAU,EACV,UAAW,GACZ,EAEKh7E,EAAU,KAAK,KAAK,iBAAiBg7E,EAAe8xC,EAAc,QAAQ,CAAC,CAAC,EAClE9sH,EAAQ,UACZ,eAAiB6sH,IAC3BA,EAAa7sH,EAAQ,IACrBg7E,EAAgBh7E,EAAQ,OAE5B,CAEK,iBAAY,KAAKurH,CAAa,EAE9B,UAAK,aAAa,aAAa,CAClC,OAAQvwC,EACR,UAAW6xC,EACX,KAAM,KAAK,KAAK,KAChB,SAAU,KAAK,KAAK,SACrB,CACH,CACF,GA+XF,KAAQ,SAAW,CAACE,EAAgCC,EAAkDC,IAAwB,CAG5H,GAAG,KAAK,4BAIH,GAHH,KAAK,wBAAwB,eAG1B,KAAK,cAAgB,CAACF,EACvB,YAGF,KAAK,KAAK,OAAO,eAAe,yBAAyB,KAAK,WAAW,mBAAmB,EAC5F,KAAK,yBAAyB,EAC9B,KAAK,sBAAsB,EAK7B,GAAGC,GAAoBA,EAAiB,cAAgBhD,IAA2B,KAAK,aACtF,OAGI,MAAAkD,EAAe,KAAK,UAAU,gBAAgB,EACpD,GAAGA,EAAc,CACT,MAAAtjH,EAAS,MAAM,KAAKsjH,CAAY,EAAE,OAAQ1kH,GAAOA,aAAc,kBAAqBA,EAAW,IAAI,EACnG2kH,EAAU/qF,GAAW,OAAS,EAOhC,IAAAgrF,EANcxjH,EAAO,IAAK2/C,GAAU,CAEhC,MAAAv/B,EAAOu/B,EAAM,wBACb8jE,EAA2B,KAAK,IAAIrjG,EAAK,IAAMA,EAAK,OAAS,EAAImjG,CAAO,EAC9E,MAAO,CAAC,MAAA5jE,EAAqB,SAAU8jE,CAAwB,EAChE,EAAE,KAAK,CAACjuH,EAAGwsB,IAAMxsB,EAAE,SAAWwsB,EAAE,QAAQ,EACjB,CAAC,EACtBwhG,GAAWA,EAAQ,SAAW,MACrBA,EAAA,QAGZ,MAAM7jE,EAAQ6jE,GAAS,MACpB,QAAK,mBAAqB7jE,EAAO,CAClC,MAAM8Q,EAAgB1Q,GAAqB,cAAc,KAAK,gBAAgB,EAAE,CAAC,EAQjF,GAPG0Q,IACoB1Q,GAAA,eAAe0Q,EAAe,EAAI,EACvD,KAAK,iBAAiB,SAGxB,KAAK,iBAAmB9Q,EAErBA,EAAO,CAER,MAAM8Q,EAAgB1Q,GAAqB,cAAcJ,CAAK,EAAE,CAAC,EAC5CI,GAAA,eAAe0Q,EAAe,EAAK,EACxDxN,GAAStD,CAAK,CAChB,CACF,CACF,CAEA,MAAM+jE,EAAgBL,EAAY,EAAID,GAAkB,eAAiB,KAAK,WAAW,oBACxD,KAAK,WAAW,sBAAwB,GAAKM,EAAgB,GAAMN,GAAoBC,KAEnH,KAAK,mBACN,aAAa,KAAK,kBAAkB,EAC3B,KAAK,UAAU,UAAU,SAAS,cAAc,GACpD,eAAU,UAAU,IAAI,cAAc,EAGxC,wBAAqB,OAAO,WAAW,IAAM,CAC3C,eAAU,UAAU,OAAO,cAAc,EAC9C,KAAK,mBAAqB,CACzB,QAAQD,GAAkB,UAAY,EAAE,GAG1CM,EAAgBtD,KAA4BiD,GAAa,KAAK,WAAW,UAAU,QAAU,KAAK,KAAK,gBAAkB,CAAC,KAAK,SAC3H,eAAU,UAAU,IAAI,eAAe,EAC5C,KAAK,aAAe,IACZ,KAAK,UAAU,UAAU,SAAS,eAAe,IACpD,eAAU,UAAU,OAAO,eAAe,EAC/C,KAAK,aAAe,GACtB,EAy+CM,kBAAe,SAAS1kH,IAA+D,CAC7F,GAAI,CAACglH,EAAWtwF,EAAGD,CAAG,EAAIz0B,EAEpB,MAAAilH,EAAerwF,GACZA,EAAM,OAAQppB,GAEZA,GACL,KAAK,UAAU62G,GAAY72G,EAAQ,OAAO,CAAC,IAAMA,EAAQ,QACzD,CAAC,KAAK,YAAY,IAAIA,EAAQ,QAAQ,GAAG,CAC5C,EAGHw5G,EAAYC,EAAYD,CAAS,EAEjCvwF,EAAI,mBAAmB,EAEvB,KAAM,CAAC,WAAAywF,EAAY,UAAAC,GAAa,KAAK,aAC/BC,EAAWF,GAAY,SACvBG,EAAUF,GAAW,QAErB,CAAC,OAAA/6C,EAAQ,eAAAk7C,CAAc,EAAI,KAAK,aAAaN,EAAU,OAAQx5G,GAAYA,EAAQ,cAAc,CAAC,EAElG,CAAC,WAAY+5G,EAAe,UAAWC,GAAgB,KAAK,aAC5DC,EAAcF,GAAe,SACnC,IAAIG,EAAaF,GAAc,QAGzB,MAAAG,EAAgBX,EAAU,KAAK,CAAC,CAAC,QAAAvtH,CAAO,IAAOA,EAA4B,OAAO,SAAS,EAC9FkuH,IACDD,EAAaC,EAAc,QAAQ,KAGrC,MAAMC,EAAaR,IAAaK,EAC1BI,EAAgB,CAAC,CAACV,GAAaE,IAAYK,EAG3CI,EADYd,IAAY,CAAC,GACC,QAG1Bh6F,EAFYg6F,EAAU,MAAM,CAAC,CAAC,QAAAh6F,CAAaA,QAAY86F,CAAY,EAE7CA,EAAeF,GAAc,CAACC,EAEtDpxF,EAAA,eAAgBmxF,EAAYC,CAAa,EAM7C,MAAMrrH,EAAWwqH,EAAU,OAAO,CAAC/7G,EAAKuC,IAAY,CAC5C,MAAAqpB,EAAO,YAAY,MAEnBr6B,EAAWgR,EAAQ,SAAS,MAAM,EAClCu6G,EAAevrH,EAAS,IAAI,MAAMV,IAAa,MAAMA,EAAS,YAAY,MAAQ+6B,EAAK,EAC7F,eAAQ,IAAIkxF,CAAY,EAAE,KAAMp9F,GAAU,CACxC8L,EAAI,eAAe,qBAAsB,YAAY,MAAQI,EAAMrpB,EAASmd,CAAK,EAC3EA,EAAA,QAAQ,CAACE,EAAMp3B,IAAQ,CAC3BgjC,EAAI,qBAAsB5L,EAAMp3B,EAAK+I,EAAS/I,CAAG,CAAC,EACnD,EACDgjC,EAAI,SAAS,EACd,EAWGxrB,EAAA,KAAK,GAAGuC,EAAQ,QAAQ,EACrBvC,CACT,EAAG,CAAoB,GAEdzO,EAAA,KAAK,GAAG8qH,CAAc,EAMtB9qH,EAAA,KAAKw7B,IAA0B,EAExCvB,EAAI,yBAA0Bj6B,EAAUwqH,EAAW,KAAK,0BAA0B,EAClF,MAAMtwF,EAAE,QAAQ,IAAI,CAAC,GAAGl6B,EAAU,KAAK,mBAAoB,EAAC,EAAE,MAAMoV,EAAI,CAAC,EACnE,MAAA8kB,EAAEsxF,IAAgB,EACxBvxF,EAAI,oBAAoB,EAExBuwF,EAAYC,EAAYD,CAAS,EAEjC,KAAM,CAAC,cAAAiB,EAAe,YAAArC,CAAW,EAAI,KAAK,oBACxC54F,EACAo6F,IAAaK,EACbJ,IAAYK,CAAA,EAMXV,EAAU,KAAMx5G,GAAYA,EAAQ,gBAAgB,GACrD,KAAK,kCAAkC,EAGzC,KAAK,aAAa,EAClB,SAAU,CAAC8nC,EAAQ4yE,CAAS,IAAK,KAAK,iBAAkB,CAKnD,GAJAtC,GACWA,EAAA,aAAasC,EAAW5yE,CAAM,EAGzC,CAAC0xE,EAAU,KAAMx5G,GAAYA,EAAQ,SAAW8nC,CAAM,EACvD,SAGF,MAAMn7C,EAAO,KAAK,aAAa,gBAAgBm7C,CAAM,EACjDn7C,GAGFA,EAAK,QAAU,GACXiyE,EAAO,SAASjyE,EAAK,KAAK,GACrBiyE,EAAA,KAAKjyE,EAAK,KAAK,GAJnB,SAAI,MAAM,oBAAqBm7C,CAAM,EAQvC,sBAAiB,OAAOA,CAAM,CACrC,CAEG,KAAK,KAAK,UAAU,aACrB0xE,EAAU,QAAQ,CAAC,CAAC,OAAA1xE,KAAY,CAC9B,KAAK,KAAK,UAAU,sBAAsBA,EAAQ,EAAI,EACvD,EAGH0xE,EAAU,QAAQ,CAAC,CAAC,QAAAvtH,EAAS,OAAA67C,EAAQ,eAAA6yE,KAAoB,CACpD,GAAA1uH,EAAQ,OAAO,OAAS0uH,EAAgB,CACzC,KAAK,UAAW1uH,EAA4B,OAAO,UAAY,SAAW,SAAS,EAAE67C,CAAM,EAC3F,MACF,EACD,EAEI,kBAAa,mBAAmB82B,CAAM,EAG3C,KAAK,4BAA4B,EAEjB67C,MAEhBvxF,EAAEK,GAAO,KAAK,KAAK,eAAqB,IAAJ,CAAQ,CAAC,EAC5C,KAAK,IAAML,EAAEsB,GAAA,CAA0B,CAAC,EACxC,KAAK,IAAM,CACV,KAAK,cAAc,YAAW,CAC/B,EAAE,MAAMpmB,EAAI,GA8QP,kBAAe,MAAM5X,GAAyB,CAC9C,MAAAouH,EAAW,CAAC,KAAK,mBACtB,KAAK,oBAAL,KAAK,kBAAsB,CAAC,IAAG,KAAKpuH,CAAQ,EAC1CouH,GACKrxF,GAAA,CAAC,EAAE,KAAK,SAAW,CACvB,MAAMiB,GAAyB,EAC/B,MAAM8qD,EAAY,KAAK,kBACjB8iC,EAAc,KAAK,kBAAkB,EAAK,EAChDA,EAAY,KAAK,EACjB9iC,EAAU,QAAS9oF,GAAaA,EAAU,GAC1C4rH,EAAY,QAAQ,EACpB,KAAK,kBAAoB,OAC1B,CACH,EA4sFK,gBAAc75D,GAAsB,CACzC,MAAM57D,EAAS,KAAK,OACf,cAAS,mBAAmB,eAAe,CAC9C,GAAG,KAAK,KAAK,0BACb,SAAU,EACV,MAAO,EACP,UAAW,GACX,WAAY47D,CAAA,CACb,EAAE,KAAMv8B,GAAY,CAChB,GAACA,GAAS,UAAU,QAGvB,GAAU,KAAK,SAAWr/B,EACxB,WAJ6B,CACxB,SAAI,MAAM,aAAa,EAC5B,OAKG,UAAK,aAAa,CAAC,UAAYq/B,EAAQ,SAAS,CAAC,EAAgB,IAAI,EAE3E,GAjvOI,SAAM,KAAK,KAAK,IAGhB,oBAAiB,IAAIlH,GAE1B,KAAK,iBAAiB,EAIjB,oBAAiB,IAAI+N,GAAe,CACvC,IAAK,KAAK,IACV,QAAS,KAAK,aACd,cAAeqtF,EAAA,CAChB,EACI,eAAY,IAAI52G,GAAqB,CACxC,WAAY,GACb,EACD,KAAK,cAAgB,IAAIyqD,GAAc,OAAW,EAAI,EACjD,mBAAc,QAAU,EAAEu0B,GAE1B,qBAAkB,IAOlB,oBAAe,IAAI17F,CAAS,EAAE,iBAAkB,MAAM,CAAC,WAAAg+B,EAAY,WAAAi6F,EAAY,QAAA5uH,KAAa,CAC5F,QAAK,KAAK,qBAAuB20B,GAAc,KAAK,KAAK,OAAS++C,GAAS,UAC5E,OAGI,MAAC,IAAArvE,CAAO,EAAArE,EAIR+qH,EAAUH,GAAY5qH,CAAO,EAC7B67C,EAAS,KAAK,UAAUkvE,CAAO,EAalC,GAZA,CAAClvE,IAED,KAAK,kBAAkB,MAExB,MAAM,QAAQ,IAAI,MAAM,KAAK,KAAK,iBAAiB,CAAC,EAGnD,KAAK,sBAEN,MAAM,KAAK,qBAGV,KAAK,UAAUkvE,CAAO,IAAMlvE,GAAQ,OAIvC,MAAMn7C,EAAO,KAAK,aAAa,gBAAgBm7C,CAAM,EACrD,GAAIn7C,GAGJ,GAAUA,EAAK,MAAQ2D,EAErB,WAHA,QAMF,GAAGuqH,EAAY,CACb,MAAM9iG,EAAQprB,EAAK,MACbmuH,EAAU,KAAK,aAAa,WAAWhzE,EAAQ77C,EAASU,EAAK,OAAO,EAEpEouH,EAAS,KAAK,aAAa,SAAS,MAAM,EAChDnjH,GAAiBmjH,EAAQpuH,CAAI,EAC7B,MAAMquH,EAAY,KAAK,aAAa,uBAAuBF,EAASC,CAAM,EAExE,GAAAhjG,IAAUijG,GAAW,OACpBjjG,IAAU,KAAK,aAAa,WAAaA,EAAM,MAAM,SAAW,GAAK+iG,EAAQ,gBAAkBnuH,EAAK,eACpG,KAAK,SAAW/J,EAAU,MAAQi4H,GAAcC,EAAQ,gBAAkBnuH,EAAK,cAChF,CAEK,kBAAa,oBAAoBm7C,EAAQ77C,CAAO,EACrD,MACF,CACF,CAQK,kBAAa,uBAAuB67C,CAAM,EAoC/C,KAAM,CAAC,OAAA82B,CAAA,EAAU,KAAK,aAAa,CAAC,CAAC,OAAA92B,EAAQ,QAAA77C,EAAS,QAASU,EAAK,QAAQ,CAAC,EACxE,kBAAa,mBAAmBiyE,CAAM,EAExC,KAAK,mBACN,KAAK,YAAY,CAGH,CAGjB,EAEI,oBAAe,IAAIh8E,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAAD,KAAY,CAC5D,KAAK,SAAWA,GACjB,KAAK,oBAAoB,KAAK,mBAAmB,KAAK,CAAC,CACzD,CACD,EAGD,KAAK,eAAe,IAAIC,CAAS,EAAE,eAAiBsM,GAAM,CACxD,KAAM,CAAC,WAAA0xB,EAAY,OAAAlhB,EAAQ,YAAAu7G,EAAa,IAAA3qH,EAAK,QAAArE,CAAW,EAAAiD,EAGrD,QAAK,KAAK,qBAAuB0xB,EAClC,OAGG,iBAAY,IAAIlhB,EAAQpP,CAAG,EAE1B,MAAA4qH,EAAcrE,GAAYoE,CAAW,EACrCjE,EAAUH,GAAY5qH,CAAO,EAE/B,IAAAkvH,EAAU,KAAK,UAAUD,CAAW,EACxC,GAAGC,EAAS,CACV,MAAMrzE,EAASqzE,EACR,YAAK,QAAQD,CAAW,EAC1B,aAAQlE,CAAO,EAAIlvE,EACjBA,EAAA,QAAQ,IAAM,GAAKx3C,EAE1ByP,GAAQ,IAAM,CACNzP,QAAM,CAACw3C,EAAO,QAAQ,IACzB,QAAK,UAAUkvE,CAAO,IAAMlvE,GAAU,CAACA,EAAO,UAAU,SAAS,aAAa,EAC/E,OAGKA,EAAA,UAAU,OAAO,aAAa,EAEjC,IAAA79B,EACD69B,EAAO,UAAU,SAAS,QAAQ,IACnC79B,EAAU,KAAK,SAAWrnB,EAAU,MAAQ,KAAK,KAAK,OAAS+8E,GAAS,WAAc,CAAC,KAAK,UAAU,IAAIrvE,CAAG,EAC3G,OACA,QAGC,4BACHw3C,EACA79B,CAAA,CACF,CACD,CACH,CAQA,GANG,KAAK,UAAU,IAAIvK,CAAM,IACrB,eAAU,OAAOA,CAAM,EACvB,eAAU,IAAIpP,CAAG,GAIrB,KAAK,KAAK,OAASqvE,GAAS,UAAW,CACxC,MAAMphB,EAAY,KAAK,IAAI,EAAI,IAAO,EAChC68D,EAAeH,EAAY,KAAO,GACrC18D,GAAa68D,GACT,yBAAoB,CAACpE,CAAO,CAAC,CAEtC,CAEA,IAAIj1F,EAAwDs5F,EAC5D,MAAMC,EAAarvH,EAA4B,WAC/C,GAAGqvH,EAAW,CACDv5F,EAAA5+B,GAAgB,uBAAuBm4H,CAAS,EACrD,MAAAzmH,EAAOktB,EAAS,IAAI,CAAC,CAAC,IAAAzxB,KAASA,CAAG,EAClCupH,EAAUhlH,EAAKA,EAAK,OAAS,CAAC,EACpC,GAAGglH,IAAYvpH,EACb,OAGF6qH,EAAU,KAAK,UAAUlvH,EAAQ,OAAQyqH,GAAqB7hH,CAAI,CAAC,EACnEwmH,EAAW,MAAM,KAAKF,EAAQ,iBAAiB,eAAe,CAAC,EAAoB,IAAK1mH,GAAO,CAACA,EAAG,QAAQ,GAAG,EAC7G0mH,EAAgB,aAAetB,CAAA,MAEhC93F,EAAW,CAAC91B,CAAO,EACnBovH,EAAU,CAAC37G,CAAM,EACdy7G,IACAA,EAAgB,aAAe7qH,GAIpC,GAAG,CAAC6qH,EACF,OAGF,MAAMI,EAAoB,MAAM,KAAKJ,EAAQ,iBAAiB,mBAAmB,CAAC,EAClF,GAAGI,EAAkB,OAAQ,CACrB,MAAAC,EAAcr4H,GAAgB,sBAAsB8I,CAA0B,EAClEsvH,EAAA,QAASlnC,GAAqB,CAC9CA,EAAiB,cAAcmnC,CAAW,EAC3C,CACH,CAECz5F,EAA+B,QAAQ,CAAC91B,EAAShG,IAAQ,CACxD,GAAG,CAACgG,EACF,OAGIyT,QAAS27G,EAAQp1H,CAAG,EACpBqK,EAAMrE,EAAQ,IACd67C,EAAsBqzE,EAAQ,cAAc,iCAAiC7qH,CAAG,IAAI,GAAK6qH,EAE5FlvH,KAAQ,IAAM,UACf,OAGF,GAAGA,EAAQ,QAAS,CACZ,MAAAwvH,EAAiBN,EAAQ,cAAc,iBAAiB,EAC3DM,IACDA,EAAe,QAAUxvH,EACzBwvH,EAAe,KAAK,EAExB,CAEM,MAAA1mH,EAAQ9I,EAAQ,OAAS,GACzBrH,EAAOmQ,EAA4C,SACnD6yE,EAAQ7yE,EAAwC,KAChD0gF,EAAW1gF,EAA2C,QAC5D,GAAGnQ,EAAK,CACN,MAAM82H,EAAoB5zE,EAAO,cAA2B,iCAAiCpoC,CAAM,IAAI,EACjGyN,EAAMuuG,GAAmB,cAAc,WAAW,EACrDvuG,GAAO,CAAC8tG,EAAY,OAAO,UAAU,QAAQ,QAAUr2H,EAAI,QAAQ,QAC3C4lC,GAAA,EAAE,KAAK,SAAW,CACnC,MAAA67C,EAAWl5D,EAAI,cAAc,OAAO,EACpCwuG,EAAS,MAAMn/B,GAAa,CAAC,QAAAvwF,EAAS,SAAUrJ,EAAU,SAAS,iBAAiB,EAC1FuqB,EAAI,YAAYwuG,CAAM,EAEnBt1C,IACAs1C,EAAO,cAAc,WAAW,GAAKA,GAAQ,OAAOt1C,CAAQ,CAC/D,CACD,EAGAq1C,IACiBA,EAAA,QAAQ,IAAM,GAAKprH,GAGjC,MAAA6G,EAAU2wC,EAAO,cAAc,2BAA2BpoC,CAAM,8BAA8BA,CAAM,8BAA8BA,CAAM,IAAI,EAC/IvI,IACEA,aAAmBmmD,IAAgBnmD,EAAQ,UAAU,SAAS,aAAa,GACpEA,EAAA,QAAQ,IAAM,GAAKlL,EAAQ,IACnC,OAAOkL,EAAQ,QAAQ,WACtBA,EAAyB,QAAUlL,EACnCkL,EAAyB,OAAO,EAAI,IAE7BA,EAAA,QAAQ,MAAQ,GAAKvS,EAAI,GAChCuS,EAAgB,IAAMvS,YAGnBgjF,EAAM,CACR,MAAAkB,EAAchhC,EAAO,cAAc,cAAc,EACpDghC,IACDA,EAAY,QAAU78E,EACtB68E,EAAY,aAAa,UAAW,GAAKlB,EAAK,EAAE,EACpCkB,EAAA,aAAa,aAAc,GAAKx4E,CAAG,QAEzCmlF,GAAW,CAAC3tC,EAAO,cAAc,MAAM,GACtBtd,GAAA,EAAE,KAAK,IAAM,CACpC,KAAK,kBAAkB,CACrB,QAAAv+B,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,EACD,KAAK,qBAAqBA,CAAM,EACjC,EAIH,GAAGwzE,EAAW,CACZ,MAAM3uH,EAAQm7C,EAAO,cAAc,2BAA2BpoC,CAAM,IAAI,IACrEooC,EAAO,UAAU,SAAS,oBAAoB,EAAIA,EAAS,QAC3Dn7C,IACIA,EAAA,QAAQ,IAAM,GAAK2D,EAE5B,EACD,EACF,EAEI,oBAAe,IAAI1N,CAAS,EAAE,eAAgB,MAAM,CAAC,WAAAg+B,EAAY,QAAA30B,KAAa,CAC9E,GAAA20B,IAAe,KAAK,KAAK,mBAAoB,OAE1C,MAAAo2F,EAAUH,GAAY5qH,CAAO,EAC7B67C,EAAS,KAAK,UAAUkvE,CAAO,EAIlC,GAHA,CAAClvE,IAEJ,MAAMtd,GAAyB,EAC5B,KAAK,UAAUwsF,CAAO,IAAMlvE,GAAQ,OAEvC,MAAM8zE,EAAoB,KAAK,qBAAqB,IAAI9zE,CAAM,EAC9D,GAAG8zE,EAAmB,CACpBA,EAAkB3vH,CAA0B,EAC5C,MACF,CAGG67C,EAAO,cAAc,gBAAgB,GAIxC,KAAK,kBAAkB,CACrB,QAAA77C,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,EACF,EAEI,oBAAe,IAAIllD,CAAS,EAAE,gBAAiB,MAAM,CAAC,WAAAg+B,EAAY,OAAAlhB,EAAQ,OAAA/c,KAAY,CACtF,GAAAi+B,IAAe,KAAK,KAAK,mBAAoB,OAE1C,MAAAs6F,EAAcrE,GAAYl0H,EAAQ+c,CAAM,EACxCooC,EAAS,KAAK,UAAUozE,CAAW,EACrCpzE,IAEJ,MAAMtd,GAAyB,EAC5B,KAAK,UAAU0wF,CAAW,IAAMpzE,IAE5BA,EAAA,UAAU,OAAO,aAAa,EAChC,4BAAuBA,EAAQ,OAAO,IAC5C,EAED,KAAK,eAAe,IAAIllD,CAAS,EAAE,uBAAyBqJ,GAAY,CACnE,QAAK,SAAWA,EAAQ,OAAQ,OACnC,MAAM67C,EAAS,KAAK,UAAU+uE,GAAY5qH,CAAO,CAAC,EAC9C67C,GACJ,KAAK,sBAAsBA,EAAQ77C,EAAQ,QAAQ,OAAO,EAC3D,EAEI,oBAAe,IAAIrJ,CAAS,EAAE,sBAAuB,CAAC,CAAC,OAAAD,EAAQ,IAAA2N,EAAK,KAAA9G,EAAM,QAAAyrF,CAAA,IAAa,CAC1F,GAAGtyF,IAAW,KAAK,OAAQ,OAE3B,MAAMmlD,EAAS,KAAK,UAAU+uE,GAAYl0H,EAAQ2N,CAAG,CAAC,EACtD,GAAG,CAACw3C,EAAQ,OAGN,MAAAg1C,EAAeh1C,EAAO,cAAc,eAAe,EACzD,GAAG,CAACg1C,EACF,OAMI,MAAArhC,EAAgB3T,EAAO,cAAc,6CAA6C,EAClFyT,EAAwBuhC,EAAa,cAAc,4BAA4B,EAC/EthC,EAA0BshC,EAAa,cAAc,SAAS,EACpE,GAAGrhC,GAAiBF,EAAuB,CACrC,IAAAsgE,EAAkBpgE,EAAc,cAAc,yBAAyB,EAC3E,GAAIogE,EAgBO5mC,GACI4mC,EAAgB,cAAc,0BAA0B,GAC/D,OAAO,UAjBKA,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,wBAAwB,EACtDA,EAAgB,OAAO,SAAS,eAAe,EAAE,CAAC,EAE/CpgE,EAAc,UAAU,SAAS,kBAAkB,EACpDqhC,EAAa,MAAM++B,CAAe,EAElCpgE,EAAc,OAAOogE,CAAe,EAGnC5mC,EAAS,CACJ,MAAA6mC,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,yBAAyB,EAC5CD,EAAgB,OAAOC,CAAI,CAC7B,CAMC,CAACtyH,GAAQ,CAACyrF,GACK4mC,EAAA,gBAAgB30H,EAAK,4BAA4B,CAAC,EAClD20H,EAAA,UAAU,IAAI,UAAU,GAChCryH,IAERqyH,EAAgB,WAAW,YAAcryH,GAG3C+xD,EAAsB,UAAU,OAAOG,GAAO,YAAY,CAAC,EAC3DH,EAAsB,UAAU,IAAIG,GAAO,IAAI,CAAC,EAE7C,CAACu5B,GAAWz5B,IACWA,EAAA,UAAU,OAAO,QAAQ,EACjD,WAAW,IAAM,CACfA,EAAwB,OAAO,GAC9B,GAAG,GAGRshC,EAAa,mBAAqB,CACpC,EAGD,EAEI,oBAAe,IAAIl6F,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAAD,EAAQ,SAAAo/B,EAAU,YAAAg6F,KAAiB,CACtF,GAAGp5H,IAAW,KAAK,OAAQ,OAE3B,MAAMkS,EAAOktB,EAAS,IAAI,CAAC,CAAC,IAAAzxB,CAAA,IAASA,CAAG,EAClC0rH,EAAUnnH,EAAK,OAAO,MAAM,KAAKknH,CAAW,CAAC,EAC7CE,EAAavF,GAAqBsF,CAAO,EACzCE,EAAarF,GAAYl0H,EAAQs5H,CAAU,EAC3Cn0E,EAAS,KAAK,UAAUo0E,CAAU,EACxC,GAAG,CAACp0E,EACF,OAGK,YAAK,QAAQo0E,CAAU,EACxB,MAAAC,EAAUzF,GAAqB7hH,CAAI,EACnC5I,EAAU81B,EAAS,KAAM91B,GAAYA,EAAQ,MAAQkwH,CAAO,EAClE,KAAK,kBAAkB,CACrB,QAAAlwH,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,EACF,EAkBC,KAAK,eAAe,IAAIllD,CAAS,EAAE,qBAAsB,MAAM2J,GAAQ,CACrE,GAAG,KAAK,KAAK,OAASozE,GAAS,UAC7B,OAGE,IAAAy4C,EAEJ,MAAM/sH,EAAIkB,EAAI,IAAI,MAAM,CAAC,QAAAN,EAAS,eAAA0oF,KAAoB,CACpD,GAAG,KAAK,SAAW1oF,EAAQ,QAAU,CAACoqH,GACpC,OAGF,MAAM3xH,EAAS,MAAM,KAAK,iBAAiBuH,CAAO,EAClD,GAAIvH,EAKG,OAAC,OAAQwjB,EAAgBxjB,EAAO,OAAQ,QAAQ,EAAG,QAAAuH,EAAS,eAAA0oF,EAAc,CAClF,EAEKxE,EAAc9gF,MACnB,MAAM,QAAQ,IAAIhE,CAAC,GAAG,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAAy8C,EAAQ,QAAA77C,EAAS,eAAA0oF,KAAoB,CAChFyjC,IACYA,EAAA,KAAK,kBAAkB,EAAK,EAC1CA,EAAY,KAAK,GAGhBtwE,EAAO,QAAQ,kBAChB,OAAOA,EAAO,QAAQ,gBACtB6sC,EAAiB,IAGb,MAAAynC,EAAkBrL,GAAmB9kH,CAAO,EAC/CmwH,IACDznC,EAAiB,IAGnB,MAAMh8E,EAAM1M,EAAQ,OAAS,IAAMA,EAAQ,IACrCyH,EAAMugF,GAAmB,IAAIt7E,CAAG,EACtC,GAAGjF,GACD,UAAUyD,KAAWzD,EAEnB,GADQyD,EAAA,OAAOlL,EAAS0oF,EAAgBxE,CAAW,EAChD,CAAClkF,EAAQ,WAAa,CAACA,EAAQ,UAAU,QAAQ,OAAQ,CAC1D,MAAM2zE,EAAgBzoE,EAAQ,cAC9BA,EAAQ,OAAO,EAEEA,EAAQ,cAAc,OAAO,IAE9B0iC,GAAAiO,EAAO,cAAe,CAAC,CAAC,QAASrzC,CAAE,IAAMA,IAAO0C,CAAO,EAC9D2wC,EAAA,cAAc,CAAC,EAAE,SAAS,GAGhC83B,EAAc,UAAU,SAAS,kBAAkB,GAAK,CAACA,EAAc,WAAW,QACnFA,EAAc,OAAO,CAEzB,MAEJ,IAAU,CAAC3zE,EAAQ,WAAa,CAACA,EAAQ,UAAU,QAAQ,OACzD,OAEA,KAAK,+BAA+B67C,EAAQ77C,EAASA,EAAS0oF,CAAc,EAG3EynC,GACD,KAAK,kBAAkB,UAAWt0E,EAAQ77C,EAAQ,GAAG,CACvD,CACD,EAEDmsH,GAAa,QAAQ,EACrBjoC,EAAY,QAAQ,EACrB,EAGG,MAAAksC,EAAqB,MAAM35H,GAI3B,CACE4B,QAAa,KAAK,gBAExB,GADA,MAAMkmC,GAAyB,EAC5B,CAAClmC,EAAW,EAAG,OAElB,MAAMgxF,EAAoC,GAEpC3yF,EAASD,EAAQ,OACjBsxE,EAAMtxE,EAAQ,MAAQA,EAAQ,IAC9BkkF,EAAa,KAAK,WAClBv+C,EAAuC3lC,EAAQ,KAAO,WAAa,eACnEsM,EAAWglE,EAAI,IAAKvvC,GAAO,CAC/B,MAAM/D,EAAmC,GAC1BrB,GAAAunD,EAAY,CAACriE,EAAKte,IAAQ,CACpCse,EAAI8jB,CAAQ,IAAM5D,IAAOlgB,EAAI,gBAAkB5hB,GAAU,CAACA,KAC3DikF,EAAW,OAAO3gF,EAAK,CAAC,EAAE,CAAC,EAC3By6B,EAAS,KAAKnc,CAAG,EACnB,CACD,EAEKvV,QAAW0xB,EAAS,IAAI,MAAM,CAAC,OAAA/9B,EAAQ,IAAA2N,EAAK,SAAAgsH,EAAU,cAAAr1C,KAAmB,CACvE,MAAA+vC,EAAUH,GAAYl0H,EAAQ2N,CAAG,EACjCw3C,EAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAG,CAAClvE,EAAQ,OAEZ,KAAM,CAAC77C,EAASi7E,CAAe,EAAI,MAAM,QAAQ,IAAI,CACnD,KAAK,KAAK,WAAW8vC,CAAO,EAC5BsF,GAAY,KAAK,SAAS,mBAAmB,iBAAiBr1C,EAAeq1C,CAAQ,EACtF,EAEDhnC,EAAU,KAAK,SAAW,CAClB,MAAAhnF,EAAUs3E,GAAc,SAAS,CACrC,KAAM,KAAK,KACX,OAAA99B,EACA,QAAA77C,EACA,WAAY67C,EAAO,iBAAiB,IAAI,EACxC,cAAe,KAAK,cACpB,WAAY,KAAK,WACjB,kBAAmBA,EAAO,UAAU,SAAS,YAAY,EACzD,MAAOA,EAAO,UAAU,SAAS,QAAQ,EAC1C,EAED,GAAG,CAACo/B,EACK,OAAA54E,EAGH,MAAAA,EAEF,IAAAiuH,EACE,MAAAC,EAAa10E,EAAO,iBAAoC,YAAY,GACvEy0E,EAAoB59B,GAA4BzX,CAAe,IACrDs1C,EAAA,QAASj+D,GAAc,CAClB,CAACA,EAAU,QAAQ,UACtBg+D,EACCh+D,EAAA,UAAU,OAAO,aAAa,EAExCA,EAAU,gBAAgB,MAAM,CAClC,CACD,CACH,CACD,EACF,EAEM,eAAQ,IAAIvvD,CAAQ,EAC5B,EAGD,GADM,cAAQ,IAAIA,CAAQ,EACvB,CAAC1K,KAAgB,CAACgxF,EAAU,OAAQ,OAEjC,MAAA8iC,EAAc,KAAK,kBAAkB,EAAI,EAC/CA,EAAY,KAAK,EACX,cAAQ,IAAI9iC,EAAU,IAAK9oF,GAAaA,EAAU,EAAC,EACzD4rH,EAAY,QAAQ,GAGU,KAAK,eAAe,IAAIx1H,CAAS,EAAE,sBAAuBy5H,CAAkB,EAC5E,KAAK,eAAe,IAAIz5H,CAAS,EAAE,qBAAsBy5H,CAAkB,EAE9Ez1D,GAAA,CAC3B,SAAU,KAAK,WAAW,UAC1B,eAAgB,KAAK,eACrB,WAAa13D,GAAM,CACjB,MAAM+Y,EAAS/Y,EAAE,OAEV,OADO+Y,EAAO,QAAQ,kEAAkE,GAAMC,EAAgBD,EAAQ,YAAY,GAAKA,EAAO,QAAQ,eAAe,CAE9K,EACD,EACgBzI,EAAA,KAAK,WAAW,UAAW,KAAK,eAAgB,CAAC,eAAgB,KAAK,eAAe,EAGjG,oBAAe,IAAI,KAAK,WAAW,SAAS,EAAE,YAActQ,GAAM,CACrE,GAAGA,EAAE,SAAW,EAAG,OAEb,MAAAutH,EAAgBv0G,EAAgBhZ,EAAE,OAAQ,aAAa,GAAKgZ,EAAgBhZ,EAAE,OAAQ,MAAM,EAC5Fw8C,EAAoB+wE,GAAe,cAA2B,YAAY,GAAKv0G,EAAgBhZ,EAAE,OAAQ,gBAAgB,EAC/H,GAAGw8C,EAAM,CACP,MAAMgxE,EAAiB,CAAC,CAACx0G,EAAgBhZ,EAAE,OAAQ,yBAAyB,EAC5EqQ,GAAYrQ,CAAC,EACTwtH,GACFnnC,GAAgB7pC,CAAI,EAyBtB,MAAM+kE,EAASjxG,EACb,OAvBetQ,GAAkB,CAGjC,GAFAqQ,GAAYrQ,CAAC,EAEVwtH,EAAgB,CAGjB,MAAMC,EAAUF,EAAc,UAAU,OAAO,eAAe,EAGzD/wE,EAAA,UAAU,OAAO,eAAgBixE,CAAO,EAE7C,MACF,CAESxnG,GAAA,CACP,YAAa,aACb,QAAS,IAAM,CACNs7F,GACT,EACD,GAMD,CACE,eAAgB,KAAK,eACrB,KAAM,GACN,QAAS,GACT,WAAY,EACd,GAEF,MACF,EACD,EAEoB,uBAAoB,IAAI59D,GAAkB,KAAK,WAAW,UAAW,CAACqrB,EAAOj2D,IAAW,CACjG,UAAAs2C,KAAa,KAAK,aAAc,CAClC,MAAAq+D,EAAc,KAAK,aAAar+D,CAAS,EAC5C,GAAAq+D,EAAY,YAAc30G,EAAQ,CACnC,MAAM40G,EAAaD,EAAY,IASpBC,EAAA,UAAU,OAAO,YAAa3+C,CAAK,EAC3CA,IACD,KAAK,mBAAqB2+C,GAG5B,KACF,CACF,CAEG,KAAK,kBAIR,CACD,EAEGzG,KACG,4BAAyB9qF,GAAS,KAAK,cAAc,KAAK,IAAI,EAAG,IAAM,GAAO,EAAI,GAGrF,IAAAhnC,EACJw4H,GAAuB,IAAM,CAC3B,KAAK,2BAA6B,GAClC,KAAK,cAAc,OACnBx4H,EAAa,KAAK,eAAc,EAK/B,IAAM,CACP,KAAK,2BAA6B,GAE/BA,OACD,KAAK,cAAc,mBAORA,EAAA,MACZ,KAAK,cAAc,CACxB,CAEQ,kBAAmB,CACzB,MAAMG,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EACrDA,EAAA,UAAU,IAAI,UAAW,eAAe,GAEhC,KAAK,UAAY,SAAS,cAAc,KAAK,GACrD,UAAU,IAAI,eAAe,EAEjC,MAAAs4H,EAAmB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,2BAA2B,EAC1D,MAAMC,EAAU,KAAK,QAAU,SAAS,cAAc,KAAK,EACnDA,EAAA,UAAU,IAAI,kBAAmB,eAAe,EACxDD,EAAiB,OAAOC,CAAO,EAE/B,KAAK,UAAU,EAEfv4H,EAAU,OAAOs4H,EAAkB,KAAK,WAAW,SAAS,CAC9D,CAEO,0BAA2B,CAChC,MAAMt4H,EAAY,KAAK,UAqBpB,GAnBE,UAAK,YAAY,SAASA,CAAS,EACxC,KAAK,KAAK,UAAU,gBAAgBA,EAAW,IAAIq2B,EAAgB,EAEhE6H,IACD,KAAK,eAAe,IAAIl+B,CAAS,EAAE,WAAayK,GAAM,CAC9C,MAAA44C,EAAS5/B,EAAgBhZ,EAAE,OAAQ,cAAc,GAAKgZ,EAAgBhZ,EAAE,OAAQ,QAAQ,EAC9F,GAAG44C,EAAQ,CACH,MAAAkvE,EAAUF,GAAiBhvE,CAAM,EAMvC,KAAK,IAAI,iBAAkB,KAAK,KAAK,WAAWkvE,CAAO,CAAC,EACxD,KAAK,gBAAgBlvE,CAAM,CAC7B,EACD,EAGA,CAAC3wB,IAAa,CAACw+F,GAChB,KAAK,eAAe,IAAIlxH,CAAS,EAAE,WAAY,MAAMyK,GAAM,CASzD,GAPE,KAAK,KAAK,OAASywE,GAAS,QAC5B,KAAK,KAAK,UAAU,aACpB,CAAC,KAAK,KAAK,MAAM,gBAMjBz3D,EAAgBhZ,EAAE,OAAQ,YAAY,GACtCgZ,EAAgBhZ,EAAE,OAAQ,OAAO,GACjCgZ,EAAgBhZ,EAAE,OAAQ,UAAU,GACpCgZ,EAAgBhZ,EAAE,OAAQ,SAAS,GACnCgZ,EAAgBhZ,EAAE,OAAQ,MAAM,GAChCgZ,EAAgBhZ,EAAE,OAAQ,oBAAoB,GAC9CgZ,EAAgBhZ,EAAE,OAAQ,UAAU,EAEpC,OAGF,MAAM+Y,EAAS/Y,EAAE,OACjB,IAAI44C,EAAS7/B,EAAO,UAAU,SAAS,QAAQ,EAC7CA,EACCA,EAAO,UAAU,SAAS,oBAAoB,EAAIA,EAAO,cAAgB,KAE5E,MAAMg1G,EAAelR,KAOrB,GANG,CAACjkE,IAAW,CAACm1E,EAAa,KAAU,SAAM,KAAKA,CAAY,KACnDn1E,EAAA5/B,EAAgBD,EAAQ,QAAQ,GAKxC6/B,GAAU,CAACA,EAAO,UAAU,SAAS,cAAc,EAAG,CACvD,MAAM77C,EAAU,KAAK,KAAK,WAAW6qH,GAAiBhvE,CAAM,CAAC,EAC7D,GAAG77C,EAAQ,OAAO,aAAeA,EAAQ,SAAW,KAAK,OACvD,OAGF,KAAK,KAAK,MAAM,iBAAiB,CAAC,aAAcA,EAAQ,IAAI,CAC9D,EACD,UACOqoB,GAAoB,CAC5B,MAAM1V,EAAY,qBAGlB,IAAIs+G,EAAc,GACdj1G,EACA4D,EACAsxG,EACJ,KAAK,kBAAoB9vC,GAAsB,CAC7C,QAAS5oF,EACT,kBAAmB,MAAMyK,GAAM,CAS1B,GARA,KAAK,KAAK,OAASywE,GAAS,QAC7B,KAAK,KAAK,UAAU,aACpB,CAAE,MAAM,KAAK,KAAK,YAKX13D,EAAAC,EAAgBhZ,EAAE,OAAQ,QAAQ,EACxC,CAAC+Y,GACFA,EAAO,UAAU,SAAS,SAAS,GACnCA,EAAO,UAAU,SAAS,YAAY,GAC/B,SAGT,GAAGA,EAAQ,CACL,IACF,MAAM5B,EAAS4B,EAAO,cAAc,cAAc,uBAAuB,EACtE5B,GACmB2hC,GAAe3hC,EAAQ4B,CAAM,IAEjCk1G,EAAA92G,QAGP,CAAC,CAEb,CAAA4B,EAAQk1G,CAAW,EAAE,OAAO,OAAO,EAAE,QAAShmH,GAAY,CAC3CwH,GAAA,CACZ,QAAAxH,EACA,UAAAyH,EACA,SAAU,GACV,SAAU,IACX,EACIzH,EAAQ,WACd,EAEG0U,GAGFA,EAAK,UAAU,OAAO,YAAY,EAClCA,EAAK,MAAM,QAAU,IAHrBA,EAAOjoB,GAAK,eAAgB,2BAA2B,EAMzDqkB,EAA8C,OAAO4D,CAAI,CAC3D,CAEA,MAAO,CAAC,CAAC5D,CACX,EACA,QAAUylB,GAAU,CAClBwvF,EAAcxvF,GAAS,GAEpBwvF,GAAe,CAACrxG,EAAK,UAAU,SAAS,YAAY,GACrDA,EAAK,UAAU,IAAI,YAAY,EAEjCA,EAAK,MAAM,QAAU,GAAK,KAAK,IAAI,EAAG6hB,EAAQ,EAAU,EAGlD,MAAAo5E,EAAY,cADR,CAAC,KAAK,IAAI,EAAG,KAAK,IAAI,GAAKp5E,CAAK,CAAC,CACV,MACjCzlB,EAAO,MAAM,UAAY6+F,EACtBqW,IACDA,EAAY,MAAM,UAAYrW,GAEP/sF,IAC3B,EACA,QAAS,IAAM,CACb,MAAMqjG,EAAUn1G,EACVo1G,EAAeF,EACrBl1G,EAASk1G,EAAc,OAEvB,MAAMr+G,EAAkB,IAAM,CACzB+M,EAAK,gBAAkBuxG,IACxBvxG,EAAK,UAAU,OAAO,YAAY,EAClCA,EAAK,OAAO,EACd,EAGD,CAAAuxG,EAASC,CAAY,EAAE,OAAO,OAAO,EAAE,QAAQ,CAAClmH,EAASlR,IAAQ,CAClD0Y,GAAA,CACZ,QAAAxH,EACA,UAAAyH,EACA,SAAU,GACV,SAAU,IACV,gBAAiB3Y,IAAQ,EAAI6Y,EAAkB,OAChD,EACF,EAEDiB,GAAQ,IAAM,CAMZ,GALAq9G,EAAQ,MAAM,UAAY,GACvBC,IACDA,EAAa,MAAM,UAAY,IAG9BH,EAAa,CACR,MAAC,IAAA5sH,CAAG,EAAI8sH,EAAQ,QACtB,KAAK,KAAK,MAAM,iBAAiB,CAAC,aAAc,CAAC9sH,EAAI,EACvC4sH,EAAA,EAChB,EACD,CACH,EACA,gBAAiB,CAAC,QAAS,EAAI,EAChC,CACH,CACF,CAEO,sBAAuB,CAEvB,oBAAe,IAAIt6H,CAAS,EAAE,iBAAkB,MAAM,CAAC,WAAAg+B,EAAY,QAAA30B,KAAa,CACnF,GAAG,EAAA20B,IAAe,KAAK,KAAK,oBAAsB,KAAK,KAAK,OAAS++C,GAAS,aAE3ExgE,GAAS,YAAY,iBAAiB,IACvC,KAAK,eAAiB,IAGrB,OAAK,KAAK,UAAYo/D,GAAmBtyE,EAAS,KAAK,KAAK,OAAO,IAAM,KAAK,KAAK,WAMpF,KAAC,KAAK,KAAK,UACX,KAAK,KAAK,aAAa,MAAM,KAAM89B,GAAS,KAAK,OAASA,GAAQA,EAAK,SAAW,KAAK,QAAUA,EAAK,QAAQ,EAC9G,CACA,KAAK,iBAAiB99B,CAAO,EAC7B,MACF,CAEI,KAAK,WAAW,UAAU,OAGvB,sBAAiBA,EAAS,EAAI,EAFnC,KAAK,KAAK,eAGZ,CACD,EAED,KAAK,eAAe,IAAIrJ,CAAS,EAAE,sBAAwBqJ,GAAY,CAClE,KAAK,SAAWA,EAAQ,QAAU,KAAK,KAAK,OAAS0zE,GAAS,WACjE,KAAK,iBAAiB1zE,CAAO,EAC9B,EAEI,oBAAe,IAAIrJ,CAAS,EAAE,iBAAkB,CAAC,CAAC,OAAAD,EAAQ,KAAA49B,KAAU,CACnE59B,IAAW,KAAK,QAAU,CAAC0zH,IAAgB,KAAK,KAAK,OAAS12C,GAAS,WAI3E,KAAK,oBAAoB,CAAC,GAAGp/C,EAAK,MAAM,EAAE,IAAKjwB,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,CAAC,EACjF,EAEI,oBAAe,IAAI1N,CAAS,EAAE,qBAAsB,CAAC,CAAC,WAAA06H,EAAY,IAAAhtH,KAAS,CAC3E,KAAK,KAAK,oBAAsBgtH,GAInC,KAAK,oBAAoB,CAACzG,GAAY,KAAK,OAAQvmH,CAAG,CAAC,CAAC,EACzD,EAEI,oBAAe,IAAI1N,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAAD,KAAY,CAC7DA,IAAW,KAAK,SACZ,UAAK,MAAM,iBAES6nC,GAAA,EAAE,KAAK,IAAM,CACpC,KAAK,qBAAqB,EAC3B,EACH,CACD,EAED,KAAK,eAAe,IAAI5nC,CAAS,EAAE,sBAAwB+2C,GAAY,CAClE,CAACA,EAAQ,IAAI,KAAK,MAAM,GAAK,KAAK,KAAK,OAASgmC,GAAS,WAAa,KAAK,KAAK,OAASA,GAAS,OAIhG,UAAK,MAAM,gBAAe,CAChC,EAED,KAAK,eAAe,IAAI/8E,CAAS,EAAE,yBAA2B2xC,GAAW,CACpE,KAAK,SAAWA,EAAO,QAAU,KAAK,KAAK,OAASorC,GAAS,WAAa,KAAK,KAAK,OAASA,GAAS,OAIpG,UAAK,MAAM,gBAAe,CAChC,EAED,MAAM49C,EAAe,SAAW,EACZ,MAAM,QAAQ,IAAI,CAClC,KAAK,iBAAiB,EACtB,KAAK,KAAK,MAAM,iBAAiB,CAAC,OAAQ,KAAK,OAAQ,WAAY,KAAK,cAAc,EAAE,EACzF,GAES,QAAS/wH,GAAaA,EAAU,IAG5C,KAAK,eAAe,IAAI5J,CAAS,EAAE,mBAAoB,MAAMsG,GAAW,CAEnE,GADYA,EAAO,SAAS,EAAK,IACtB,KAAK,OACjB,OAGI,MAAA5E,EAAa,KAAK,gBAClB,CAACk5H,EAAeC,CAAiB,EAAI,MAAM,QAAQ,IAAI,CAC3D,KAAK,SAAS,kBAAkB,oBAAoBv0H,CAAM,EAC1D,KAAK,KAAK,2BAA2B,EACtC,EACD,GAAG,CAAC5E,EAAW,EAAG,OAEZ,MAAAo5H,EAAiB,KAAK,KAAK,cAC3BC,EAAqB,KAAK,KAAK,kBACrC,IAAIC,EAAa,IAEdF,IAAmB,OAAYF,EAAgBE,IAAmBF,KACnE,KAAK,KAAK,cAAgBA,EACbI,EAAA,KAGZD,IAAuB,OAAYF,EAAoBE,IAAuBF,KAC/E,KAAK,KAAK,kBAAoBA,EACjBG,EAAA,GACb,KAAK,oBAAoB,EACzB,KAAK,8BAA8B,GAGlCA,GACYL,GACf,CACD,EAED,KAAK,eAAe,IAAI36H,CAAS,EAAE,cAAe,MAAMuG,GAAW,CAC3D,MAAC,OAAAxG,CAAU,OACjB,GAAGA,IAAWwG,EAAO,SAAS,EAAI,EAChC,OAGI,MAAA7E,EAAa,KAAK,gBAClBylC,EAAO5mC,GAAgB,QAAQgG,CAAM,EACrC00H,EAAY,KAAK,UAAU,UAAU,SAAS,YAAY,EAC1DC,EAAiB,KAAK,KAAK,MAAM,aAAa,EAC9C,CAAClqF,EAAWmqF,EAAgBC,CAAa,EAAI,MAAM,QAAQ,IAAI,CACnE,KAAK,KAAK,QAAQ,eAAe,EACjC,KAAK,KAAK,QAAQ,YAAY,EAC9B,KAAK,KAAK,QAAQ,aAAa,EAChC,EACG15H,EAAW,KAEZu5H,IAAcjqF,GAAakqF,IAAmBC,IAC/C,MAAMR,EAAa,EAGjBj5H,EAAW,KAEX05H,GAAiB,CAAC,KAAK,KAAK,MAAM,iBAAqB,CAACA,GAAiB,KAAK,KAAK,MAAM,mBACtF,UAAK,MAAM,QAAU,GACrB,UAAK,MAAM,kBAGf,CAAC,CAAEj0F,EAAwB,OAAO,QAAU,KAAK,KAAK,SAAW,KAAK,KAAK,OAAS41C,GAAS,OAC9F,KAAK,KAAK,OAAS,EACnB,KAAK,KAAK,aAAa,QAAQ,CAAC,OAAAh9E,CAAO,KACzC,CACD,EAED,KAAK,eAAe,IAAIC,CAAS,EAAE,iBAAkB,MAAMD,GAAW,CACjE,GAAAA,IAAW,KAAK,OACjB,OAGI,MAAAs7H,EAAe,KAAK,KAAK,YAC/B,KAAK,KAAK,YAAc,MAAM,KAAK,KAAK,aAAat7H,CAAM,EAC3D,MAAMu7H,EAAmBD,IAAiB,KAAK,KAAK,aAAgB,MAAM,KAAK,mBAGzEE,EAAW,KAAK,mBAAmB,OAAQ,EAAI,EAC/CtpH,EAAOspH,EAAS,IAAKnH,GAAYD,GAAaC,CAAO,EAAE,GAAG,EAC1D1yH,EAAa,KAAK,gBACnB,cAAS,mBAAmB,eAAe3B,EAAQkS,CAAI,EAAE,KAAMktB,GAAa,CAC/E,GAAG,CAACz9B,EAAW,EAAG,OAElB,MAAM85H,EAAsB,GACnBr8F,EAAA,QAAQ,CAAC91B,EAAShG,IAAQ,CAC3B,MAAA+wH,EAAUmH,EAASl4H,CAAG,EAC5B,GAAGgG,EAAS,CACV,MAAM67C,EAAS,KAAK,UAAUnlD,EAAQsJ,EAAQ,GAAG,EACjD,GAAG,CAAC67C,EAAQ,OAEZ,KAAK,kBAAkB,CACrB,QAAA77C,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,OAEDs2E,EAAS,KAAKpH,CAAO,CACvB,CACD,EAEkBkH,MAChBA,GACD,KAAK,aAAa,OAAO,QAASnmG,GAAU,CACtC,KAAK,KAAK,YAEJ,KAAK,KAAK,eAAeA,EAAM,UAAU,OAAO,GAClDA,EAAA,aAAaA,EAAM,UAAU,OAAO,EAF1CA,EAAM,cAAc,CAGtB,CACD,EAGH,KAAK,oBAAoBqmG,CAAQ,EAE5B,eAAU,MAAO,EAAK,EACtB,eAAU,SAAU,EAAK,EAC9B,KAAK,WAAW,kBAAiB,CAClC,EACF,EAEI,oBAAe,IAAIx7H,CAAS,EAAE,mBAAoB,CAAC,CAAC,IAAA+V,KAAS,CAC7DA,IAAQ,sBAEQ,KAAK,mBAAmB,MAAM,EAC5B,IAAKq+G,GAAY,CAC5B,MAAAlvE,EAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAGlvE,EAAO,UAAU,SAAS,oBAAoB,EAAG,CAClD,KAAM,CAAC,OAAAnlD,EAAQ,IAAA2N,CAAG,EAAIymH,GAAaC,CAAO,EACnC,OAAC,OAAAlvE,EAAQ,QAAS,KAAK,KAAK,iBAAiBnlD,EAAQ2N,CAAG,EAAG,QAAA0mH,EACpE,EACD,EAOC,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,OAAAlvE,EAAQ,QAAA77C,EAAS,QAAA+qH,KAAa,CACrD,KAAK,UAAUA,CAAO,IAAMlvE,GAI/B,KAAK,kBAAkB,CACrB,QAAA77C,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,EACF,CACH,CACD,EAE+B,KAAK,eAAe,IAAIllD,CAAS,EAAE,iBAAmB2J,GAAQ,CACzF,KAAK,KAAK,OAASozE,GAAS,WAE/B5/D,GAAQ,IAAM,CACR,IAAAq4G,EACJ,SAAU,CAAC,OAAAz1H,EAAQ,MAAAokG,EAAO,IAAAz2F,CAAA,IAAQ/D,EAAK,CAClC,QAAK,SAAW5J,GAAU,CAAC0zH,GAAa,SAE3C,MAAMvuE,EAAS,KAAK,UAAUnlD,EAAQ2N,CAAG,EACzC,GAAG,CAACw3C,EAAQ,SAEZ,MAAMu2E,EAAoB,MAAM,KAAKv2E,EAAO,iBAAiB,aAAa,CAAC,EAC3E,GAAG,CAACu2E,EAAkB,OAAQ,SAExB,MAAAn8H,EAAMkgF,GAAa2kB,EAAO,CAAC,EACjC,IAAIu3B,EAAY,GACED,EAAA,QAASE,GAAc,EACpCD,GAAaC,EAAU,cAAgBr8H,KACpCk2H,IACYA,EAAA,KAAK,kBAAkB,EAAI,EACzCA,EAAY,KAAK,GAGPkG,EAAA,GACZC,EAAU,YAAcr8H,EAC1B,CACD,CACH,CAEAk2H,GAAa,QAAQ,EACtB,EACF,EAEI,cAAW,IAAIhjC,GAA0B,CAAC,KAAM,KAAK,WAAW,UAAU,EAE1E,+BAA4B9pD,GAAS,IAAM,CAC9C,MAAM6yF,EAAW,CAAC,GAAG,KAAK,SAAS,EACnC,KAAK,UAAU,QAET,MAAAK,MAAqC,IAClCL,EAAA,QAASnH,GAAY,CAC5B,KAAM,CAAC,OAAAr0H,EAAQ,IAAA2N,CAAG,EAAIymH,GAAaC,CAAO,EACtC,IAAAniH,EAAO2pH,EAAQ,IAAI77H,CAAM,EACzBkS,GACF2pH,EAAQ,IAAI77H,EAAQkS,EAAO,CAAE,GAG/BA,EAAK,KAAKvE,CAAG,EACd,EAEOkuH,EAAA,QAAQ,CAAC3pH,EAAMlS,IAAW,CAChC,KAAK,SAAS,mBAAmB,sBAAsBA,EAAQkS,CAAI,EACpE,GACA,IAAM,GAAO,EAAI,EAGf,oBAAe,IAAIjS,CAAS,EAAE,uBAAwB,CAAC,CAAC,OAAAD,EAAQ,KAAAkS,EAAM,OAAA4pH,KAAY,CAClF,KAAK,KAAK,OAAS9+C,GAAS,QAAUh9E,IAAW,KAAK,QAItDkS,IACG4pH,GACG,yBAAoB5pH,EAAK,IAAKvE,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,CAAC,EAExE,CACD,EAID,MAAMouH,EAAW,SAAW,CACrB,UAAK,OAAO,UAAU,MAAM,KAAK,SAAS,mBAAmB,4BAA4B,KAAK,MAAM,GAAG,IAAI,GAGlH,KAAK,eAAe,IAAI97H,CAAS,EAAE,gBAAkBqJ,GAAY,CAC5D,KAAK,KAAK,OAAS0zE,GAAS,WAAa1zE,EAAQ,SAAW,KAAK,SAEpE,KAAK,iBAAiBA,CAAO,EACpByyH,IAAA,CACV,EAEI,oBAAe,IAAI97H,CAAS,EAAE,mBAAoB,CAAC,CAAC,OAAAD,EAAQ,KAAAkS,KAAU,CACtE,KAAK,KAAK,OAAS8qE,GAAS,WAAah9E,IAAW,KAAK,SAEvD,yBAAoBkS,EAAK,IAAKvE,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,CAAC,EAC3DouH,IAAA,CACV,CAEH,CAEA,IAAY,QAAS,CACnB,OAAO,KAAK,KAAK,MACnB,CAEA,IAAW,sBAAuB,CAChC,OAAO,KAAK,eAAe,YAC7B,CAEO,kBAAkBl/F,EAAU,GAAM,CAEhC,OADa,IAAIkoB,GAAY,KAAK,WAAY,wBAAyBloB,CAAO,CAEvF,CA2DQ,sBAAuB,CAC7B,GAAG,EAAE,mBAAoB,SAAW,KAAK,eACvC,OAGI,MAAA/6B,EAAY,KAAK,WAAW,UAClC,IAAIk6H,EAAY,EACZC,EAAW,GACXC,EAAO,GAEPtqH,EAAO,EACPuqH,EAAM,EAGV,MAAMC,EAAc,IAAM,CACxB,MAAM91G,EAASxkB,EAAU,aACnBu6H,EAAiB,KAAK,WAAW,gBACpC/1G,IAAW01G,IAAc,CAACE,GAAQ,CAACG,KACpCzqH,GAAQoqH,EAAY11G,GAOnB1U,GACI,gBAAW,0BAA0B,KAAK,WAAW,eAAiB,KAAK,MAAMA,CAAI,CAAC,EAGjFoqH,EAAA11G,EAEN61G,EAAA,EACCvqH,EAAA,EACIqqH,EAAA,GACJC,EAAA,IAGHI,EAAat+C,GAAoB,CAClCm+C,GAAK,OAAO,qBAAqBA,CAAG,EACvCA,EAAM,OAAO,sBAA6C,IAAM,CACxDA,EAAA,OAAO,sBAAsBC,CAAW,EAE/C,GAGGG,EAA0CnsE,GAAY,CAM1D,GAAG8rE,EAAM,CACPI,EAAe,EACf,MACF,CAGM,MAAAh2G,EADQ8pC,EAAQ,CAAC,EACF,YAAY,OAEjC,GAAG,CAAC4rE,EAAW,CACDA,EAAA11G,EACZ,MACF,CAEA,MAAMk2G,EAAWR,EAAY11G,EAC7B,IAAIyc,EAAOy5F,EAAW5qH,EACtB,MAAM6qH,EAAQ15F,EAAO,EAGrB,GAFQA,GAAA05F,EAEL,CAACR,IACSA,EAAA,GAMRO,EAAW,GAAK,KAAK,WAAW,iBAAiB,CAElD5qH,EAAO,CAAC4qH,EAGDN,EAAA,GACPI,EAAe,EACf,MACF,CASF,GAAGv5F,EAAM,CACD,MAAA25F,EAAgB,KAAK,WAAW,eAAiB35F,EAClD,gBAAW,0BAA0B25F,CAAa,CACzD,CAEAJ,EAAe,EAER1qH,EAAA6qH,EACKT,EAAA11G,CAAA,GAGS,KAAK,eAAiB,IAAI,eAAei2G,CAAc,GAC/D,QAAQz6H,CAAS,CAClC,CAEQ,uBAAwB,CAC9B,MAAM66H,EAAiB,KAAK,eACxBA,IAIJA,EAAe,WAAW,EAC1B,KAAK,eAAiB,OACxB,CAyHO,4BAA6B,CAClC,KAAK,eAAe,IAAI/oG,EAAqB,EAAE,SAAU,KAAK,eAAe,EAC7E,KAAK,eAAe,IAAID,EAAc,EAAE,SAAU,KAAK,eAAe,EACjE,oBAAe,IAAI,KAAK,KAAK,SAAS,EAAE,SAAU,KAAK,eAAe,EAC3E,KAAK,eAAe,IAAI,KAAK,SAAS,EAAE,YAAa,KAAK,kBAAkB,CAC9E,CAEQ,gBAAgB+gG,EAA4B3kH,EAAkB,CACjE2kH,EAAc,eACfA,EAAc,cAAc,UAAU,OAAO,yBAA0B3kH,CAAO,EAGlEiM,GAAA,CACZ,QAAS04G,EACT,UAAW,aACX,SAAU3kH,EACV,SAAU,IACV,gBAAiBA,EAAU,OAAY,IAAM,CAC3C2kH,EAAc,OAAO,EACrBA,EAAc,iBAAiB,SACjC,EACA,QAAS3kH,EAAU,EAAI,EACxB,CACH,CAYO,uBAAwB,CA2C/B,CAEO,mBAAoB,CAClB,YAAK,mBAAqB,QACnC,CAEQ,qBAAqBsU,EAA6BiB,EAAqB3X,EAAa,CAC1F,GAAI,CAAC,aAAAivH,EAAc,yBAAAC,EAA0B,SAAAC,CAAA,EAAY,KACtDz4G,IAAS,YACVu4G,EAAe,KAAK,oBACpBC,EAA2B,KAAK,gCAChCC,EAAW,KAAK,iBAGlBF,EAAa,IAAIjvH,CAAG,EACf,cAAS,UAAU2X,EAAQu3G,CAAwB,EACxDC,EAAS,OAAOx3G,CAAM,EACtB,KAAK,aAAajB,CAAI,CACxB,CAEQ,aAAaA,EAA6B,CAC1C,MAAA04G,EAAiB14G,IAAS,UAAY,cAAgB,qBAC5D,GAAG,KAAK04G,CAAc,EAAG,OAEnB,MAAAC,EAAkB34G,IAAS,UAAY,eAAiB,sBAExD1iB,EAAa,KAAK,gBACxB,KAAKo7H,CAAc,EAAIE,GAAe,gBAAgB,EAAE,KAAK,SAAW,CACtE,GAAG,CAACt7H,EAAW,EAAG,OAClB,KAAM,CAAC,OAAA3B,EAAQ,SAAAK,GAAY,KAAK,KAE5B,IAAAwJ,EACJ,GAAGwa,IAAS,UAAW,CACjB,IAAAulE,EAAQ,KAAK,IAAI,GAAG,MAAM,KAAK,KAAKozC,CAAe,CAAC,CAAC,EAGtD,QAAK,WAAW,UAAU,OAAQ,CACnC,MAAM7kF,EAAW,KAAK,mBAAmB,OAAQ,EAAI,EAC/C+kF,EAAe/kF,EAAWi8E,GAAaj8E,EAAS,CAAC,CAAC,EAAE,IAAM,GAChE,GAAGyxC,GAASszC,IACFtzC,EAAA,KAAK,IAAK,MAAM,KAAK,KAAK,gBAAgB,GAAM,EAAGA,CAAK,EAC7D,CAACjoF,EAAW,GAAG,MAEtB,CAEA,KAAK,SAAS,QAAQ,CAACgM,EAAK2X,IAAW,CAClC3X,GAAOi8E,GACH,0BAAqB,UAAWtkE,EAAQ3X,CAAG,CAClD,CACD,EAEEqyB,IACI,SAAI,6BAA8B4pD,CAAK,EAG9C//E,EAAW,IAAM,KAAK,SAAS,mBAAmB,YAAY7J,EAAQ4pF,EAAOvpF,CAAQ,MAChF,CACL,MAAM88H,EAAyB,GACrB,UAAAxvH,KAAO,KAAK,oBAAqB,CACzC,MAAMrE,EAAqB,KAAK,KAAK,WAAWqE,CAAG,GAChDylF,GAAgB9pF,CAAO,GAAK8kH,GAAmB9kH,CAAO,IACvD6zH,EAAa,KAAKxvH,CAAG,CAEzB,CAEGqyB,IACI,SAAI,oBAAqBm9F,CAAY,EAG5CtzH,EAAW,IAAM,KAAK,SAAS,mBAAmB,aAAa7J,EAAQm9H,CAAY,CACrF,CAEK,YAAAH,CAAe,EAAE,QAGNnzH,IAED,MAAOsH,GAAa,CACjC,KAAK,IAAI,MAAM,YAAakT,EAAMlT,CAAG,EAC5BtH,GAAA,CACV,EAAE,QAAQ,IAAM,CACXlI,EAAW,IACf,KAAKo7H,CAAc,EAAI,OAEpB,KAAKC,CAAe,EAAE,MACvB,KAAK,aAAa34G,CAAI,EACxB,CACD,EACF,CACH,CAweQ,sBAAsB8wG,EAA6B,CACpD,cAAS,gBAAgB,uBAAuBA,EAAe,QAAQ,KAAK,EAAE,KAAMlzH,GAAQ,CACzF,MAAAE,EAAYF,EAAI,WAAW,KAAME,GAAcA,EAAU,IAAM,8BAA8B,EACnG,GAAG,CAACA,EACF,OAGF,MAAMuvD,EAAkBvvD,EAAU,WACrB2tB,GAAA,YACX6hC,GACAD,EACA,GACA,KAAK,KAAK,OACV,KAAK,EACR,CACH,CAEO,0BAA0BpsC,EAAqB/Y,EAAW6wH,EAAyB,CAClF,MAAAj4E,EAAS5/B,EAAgBD,EAAQ,QAAQ,EACzC+3G,EAAc93G,EAAgBD,EAAQ,qBAAqB,EAG9D,GAAAA,EAAO,UAAY,OAAS,CAACA,EAAO,UAAU,SAAS,OAAO,GAAK,CAACA,EAAO,UAAU,SAAS,gBAAgB,GAC/GA,EAAO,UAAU,SAAS,YAAY,GACtCA,EAAO,UAAU,SAAS,kBAAkB,GAE3CA,EAAO,UAAY,SAAW,CAAC6/B,EAAO,UAAU,SAAS,OAAO,GAChEk4E,GAAe,CAACA,EAAY,cAAc,sBAAsB,GACjE/3G,EAAO,UAAU,SAAS,kBAAkB,EAC5C,CACA,MAAMg4G,EAAc/3G,EAAgBD,EAAQ,YAAY,GAAKC,EAAgBD,EAAQ,oBAAoB,EACnGxE,GAAaw8G,GAAen4E,GAAQ,cAA2B,sBAAsB,EAC3F,GAAGrkC,GAAavU,EAAG,CACjB+pC,GAAmBx1B,CAAS,EAC5BlE,GAAYrQ,CAAC,EACb,MACF,CAEAqQ,GAAYrQ,CAAC,EACb,MAAMgxH,EAAmBD,EAAc,EAAEA,EAAY,QAAQ,OAAS,IAAM,GACtEE,EAAgBrJ,GAAiBoJ,IAAqB,GAAKp4E,EAASm4E,GAAen4E,CAAM,EAC/F,IAAI77C,EAAU,KAAK,KAAK,WAAWk0H,CAAa,EAAGC,EAAc,GACjE,GAAG,CAACn0H,EACF,GAAG8qH,GAAaoJ,CAAa,EAAE,IAAM,EACnCl0H,EAAW67C,EAAe,QACZs4E,EAAA,OACT,CACA,SAAI,KAAK,2BAA4BD,CAAa,EACvD,MACF,CAGF,GAAGr4E,EAAO,UAAU,SAAS,OAAO,EAAG,CAC/B,MAAArjD,EAAYy0C,GAAgBjxB,EAAQ,oBAAoB,EACxD7S,EAAc3Q,EAAU,QAAQ,YAAY,SAAS,EACrDqiB,EAAU,CAACriB,EAAU,QAAQ,QACPkrG,GAAA,CAC1B,OAAQ,IAAMlrG,EAAU,cAAc,2BAA2B,GAAKwjB,EACtE,OAAQ7S,EACR,GAAI0R,CAAA,CACL,EACD,MACF,CAEA,MAAMu5G,EAAyB,eACzBC,EAAgBx4E,EAAO,UAAU,SAASu4E,CAAsB,EAEhEprH,EAAI+qH,EAAejrH,GAChBwrH,GAAe,mCAAmCxrH,CAAK,EAC3DA,GACIA,EAAM,IAAM,SAAW,CAAC,QAAS,KAAK,EAAE,SAASA,EAAM,IAAI,EAG9D4rB,EAAkG,GAClGw9F,EAAWmC,EAAgB,CAACH,CAAa,EAAI,KAAK,mBAAmB,KAAK,EAAE,IAAKnJ,GAAY,CAC3FlvE,QAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAG,CAACsJ,GAAiBx4E,EAAO,UAAU,SAASu4E,CAAsB,EACnE,OAGF,MAAMp0H,EAAU,KAAK,KAAK,WAAW+qH,CAAO,EACtCjiH,EAAQ0/C,GAAoBxoD,CAAO,EAElC,OAAA8I,GAASE,EAAEF,CAAK,GAAKiiH,CAAA,CAC7B,EAAE,OAAO,OAAO,EAERmH,EAAA,QAASnH,GAAY,CACxBlvE,MAAS,KAAK,YAAY,IAAIkvE,CAAO,EAAI,OAAY,KAAK,UAAUA,CAAO,EAQ/E,GAPIlvE,IACFA,EAAS,KAAK,UAAU,cAAc,4CAA4CkvE,CAAO,IAAI,EAC1FlvE,IACDA,EAAS5/B,EAAgB4/B,EAAQ,QAAQ,IAI1C,CAACA,EACF,OAGE,IAAAxE,EACJ,GAAG08E,EACU18E,EAAA,0BACN,CACL,MAAM/gC,EAAWulC,EAAO,UAAU,SAAS,iBAAiB,EAEjDxE,EAAA,kCAER/gC,EACW+gC,GAAA,2BAEAA,GAAA,aAEhB,CAEA,MAAM/9C,EAAW,MAAM,KAAKuiD,EAAO,iBAAiBxE,CAAQ,CAAC,EACvDqrE,MAAgC,IACtC,GAAGqR,EACQz6H,EAAA,QAAS4R,GAAY,CAC5BwpB,EAAQ,KAAK,CACX,QAASxpB,EAAQ,cAAc,eAAe,EAC9C,IAAK,CAACA,EAAQ,QAAQ,IACtB,OAAQ,KAAK,OACb,QAAS2/G,GAAiB3/G,CAAO,EAClC,EACF,MACI,CACL,MAAMqpH,EAAc,CAAC,CAAC14E,EAAO,cAAc,2BAA2B,EAC7DviD,EAAA,QAAS4R,GAAY,CAE5B,GADUA,IAAQ,cAAc,YAAY,GAAKA,EAC9CqpH,GAAe,CAACt4G,EAAgB/Q,EAAS,0BAA0B,EAAG,OACnE,MAAAspH,EAAYv4G,EAAgB/Q,EAAS,YAAY,EACjDupH,EAASD,GAAatpH,EAAQ,cACjC,GAAAw3G,EAAQ,IAAI+R,CAAM,EAAG,OACxB/R,EAAQ,IAAI+R,CAAM,EAClB,MAAMC,EAAWT,IAAqB,GAAKlJ,EAAUF,GAAiB2J,GAAatpH,CAAO,GAAK6/G,EAC/Fr2F,EAAQ,KAAK,CACX,QAAAxpB,EACA,IAAK4/G,GAAa4J,CAAQ,EAAE,IAC5B,OAAQ,KAAK,OACb,QAASA,EACT,MAAOF,GAAa,EAAEA,EAAU,QAAQ,OAAS,IAClD,EACF,CACH,EACD,EAGDphG,GAAesB,EAAS,CAAC1Y,EAAQhiB,EAAKsG,IAAQ,CACtC,MAAAo9E,EAAap9E,EAAI,UAAWxG,GAAMA,EAAE,UAAYkiB,EAAO,OAAO,EACjE0hE,IAAe1jF,GACZsG,EAAA,OAAOo9E,EAAY,CAAC,CAC1B,CACD,EAID,MAAM1jF,EAAMi6H,IAAqB,GAAKv/F,EAAQ,UAAW56B,GAAMA,EAAE,UAAYo6H,CAAa,EAAIx/F,EAAQ,UAAW56B,GAAMA,EAAE,QAAUm6H,CAAgB,EAMhJ,GAJAv9F,IACD,KAAK,IAAI,oCAAqCw7F,EAAUl4H,EAAK06B,CAAO,EAGnE,CAACA,EAAQ16B,CAAG,EAAG,CACX,SAAI,8BAA+BgiB,CAAM,EAC9C,MACF,CAEA,WAAIs4G,GAAe,OAAWH,CAAW,EACxC,iBAAiB,CAChB,SAAU,KAAK,KAAK,SACpB,OAAQ,KAAK,OACb,YAAa,CAAC,EAAGJ,EAAc,8BAAgC,+BAA+B,EAC9F,UAAW,KAAK,KAAK,OAASrgD,GAAS,WAAa,CAAC2gD,EACrD,YAAa,KAAK,KAAK,OAAS3gD,GAAS,SAC1C,GACA,UAAU,CACT,QAAA1zE,EACA,MAAO00B,EAAQ16B,CAAG,EAAE,MACpB,OAAQ06B,EAAQ16B,CAAG,EAAE,QACrB,UAAW,EACX,QAAS,GACT,YAAa06B,EAAQ,MAAM,EAAG16B,CAAG,EACjC,YAAa06B,EAAQ,MAAM16B,EAAM,CAAC,EAClC,eAAA85H,CAAA,CACD,EACM,EACT,CACF,CAEA,MAAa,eAAgB,CACxB,IAAC,KAAK,YAAY,OAAQ,CAE3B,KAAK,KAAK,eAUV,MACF,CAEM,MAAAz7H,EAAa,KAAK,gBAClBqnF,EAAQ,KAAK,YAAY,MAAM,EAC/B5pD,EAAW,MAAM,QAAQ,IAAI4pD,EAAM,IAAKqrC,GAAY,KAAK,KAAK,WAAWA,CAAO,CAAC,CAAC,EACxF,GAAG,CAAC1yH,EAAW,EAAG,OAEZqnF,EAAA,QAAQ,CAACqrC,EAAS/wH,IAAQ,CACxB,MAAAgG,EAAU81B,EAAS97B,CAAG,EAEtB6hD,EAAS,KAAK,UAAUkvE,CAAO,EACrC,IAAItqH,EAAM,GACV,GAAGo7C,EAAQ,CACH,MAAA7xB,EAAO6xB,EAAO,wBACbp7C,EAAA2hC,GAAW,OAAS,EAAKpY,EAAK,SAC7BhqB,IACFS,EAAA,IAGLA,GACD,KAAK,YAAY,OAAO,KAAK,YAAY,QAAQsqH,CAAO,EAAG,CAAC,CAC9D,CACD,EAGD,KAAK,YAAY,KAAK,CAAC,EAAGn/F,IAAMk/F,GAAal/F,CAAC,EAAE,IAAMk/F,GAAa,CAAC,EAAE,GAAG,EAEnE,MAAAC,EAAU,KAAK,YAAY,IAAI,EAC/B,CAAC,IAAA1mH,CAAA,EAAOymH,GAAaC,CAAO,EAClC,KAAK,KAAK,aAAa,CAAC,UAAW1mH,CAAI,EACzC,CAEO,iBAAiB+oB,EAAgC,CAChD,MAAAsyD,EAAQ,KAAK,mBAEnB,OADaA,EAAM,QAAQtyD,IAAiB,MAAQ,EAAIsyD,EAAM,QAAQ,OAAS,CAAC,GACnE,OACf,CAEA,MAAa,iBAAiBhpF,EAAgBi+H,EAAiB,CAC7D,MAAM/rH,EAAO,MAAM,KAAK,SAAS,mBAAmB,mBAAmB+rH,CAAO,EAC9E,UAAUtwH,KAAOuE,EAAM,CACf,MAAAmiH,EAAUH,GAAYl0H,EAAQ2N,CAAG,EACjCw3C,EAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAGlvE,GAAU,CAAC,KAAK,YAAY,IAAIkvE,CAAO,EAEjC,OACL,OAAAlvE,EACA,OAAAnlD,EACA,IAAA2N,CAAA,CAIN,CACF,CAEO,sBAAsBw3C,EAAqB,CAChD,OAAO,MAAM,KAAKA,EAAO,iBAAiB,eAAe,CAAC,CAC5D,CAEA,MAAa,iBAAiBkvE,EAA6D,CACzF,IAAI/qH,EAAmDtJ,EAAgB2N,EACpE,UAAO0mH,GAAa,SAAU,CACzB,MAAAlxH,EAAIixH,GAAaC,CAAO,EAC9Br0H,EAASmD,EAAE,OACXwK,EAAMxK,EAAE,IACRmG,EAAU,KAAK,KAAK,iBAAiBtJ,EAAQ2N,CAAG,OAEtCrE,EAAA+qH,EACVr0H,EAASsJ,EAAQ,OACjBqE,EAAMrE,EAAQ,IACJ+qH,EAAAH,GAAYl0H,EAAQ2N,CAAG,EAGnC,GAAG,CAACrE,EACF,OAGF,MAAMqvH,EAAarvH,EAA4B,WAC/C,GAAGqvH,EAAW,CACZ,MAAMjwH,EAAI,MAAM,KAAK,iBAAiB1I,EAAQ24H,CAAS,EACvD,GAAGjwH,EACC,OAAAA,EAAA,OAASA,EAAE,OAAO,cAAc,iCAAiCiF,CAAG,IAAI,GAAKjF,EAAE,OAC1EA,CAEX,CAEM,MAAAy8C,EAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAG,GAAClvE,GAAU,KAAK,YAAY,IAAIkvE,CAAO,GAEnC,OAAC,OAAAlvE,EAAQ,OAAAnlD,EAAQ,IAAA2N,EAC1B,CAEQ,6BAA6B0mH,EAAkBnkH,EAAgB,CACrE,GAAG,KAAK,KAAK,OAAS8sE,GAAS,OAAQ,CACrC,MAAMw+C,EAAW,KAAK,mBAAmB,OAAQ,EAAI,EAC/Cl4H,EAAMk4H,EAAS,QAAQnH,CAAO,EACpC,GAAG/wH,IAAQ,GAAI,OACf,MAAM46H,EAAc1C,EAASl4H,GAAO4M,EAAO,GAAK,EAAE,EAC3C,YAAK,UAAUguH,CAAW,CACnC,CAEA,MAAM1C,EAAW,KAAK,mBAAmBtrH,EAAO,OAAS,KAAK,EAE1D,IAAAiuH,EACDjuH,EAAuBiuH,EAACC,GAAShK,GAAagK,CAAI,EAAE,IAAMhK,GAAaC,CAAO,EAAE,IAC7D8J,EAACC,GAAShK,GAAaC,CAAO,EAAE,IAAMD,GAAagK,CAAI,EAAE,IAE/E,MAAMC,EAAW7C,EAAS,KAAMnH,GAC1B8J,EAAe9J,CAAO,EACnB,CAAC,CAAC,KAAK,UAAUA,CAAO,GAAG,cADE,EAErC,EAEM,YAAK,UAAUgK,CAAQ,CAChC,CAEO,mBAAmBtf,EAAuB,OAAQuf,EAAoB,CAC3E,IAAIj/F,EAAUlM,GACZ,KAAK,aAAa,OAAO,IAAKiC,GAAUA,EAAM,MAAM,IAAKprB,GAASkqH,GAAYlqH,EAAK,OAAO,CAAC,CAAC,GAG9F,OAAG+0G,IAAS,OACV1/E,EAAQ,QAAQ,EAGfi/F,IACSj/F,IAAQ,OAAQg1F,GAAY,CACpC,KAAM,CAAC,IAAA1mH,CAAA,EAAOymH,GAAaC,CAAO,EAClC,OAAO1mH,EAAM,GAAK4wH,GAAe5wH,EAAK,EAAK,IAAMA,CAAA,CAClD,GAGI0xB,CACT,CAEO,gBAAgBpI,EAAcunG,EAAW,GAAO,CAErD,GACE,CAAC,KAAK,QAEN,KAAK,KAAK,gBACV,KAAK,4BACJvnG,IAAQ,KAAK,sBAAwB,KAAK,WAAW,UAAU,MAC/D,CAACA,IAAQ,KAAK,yBAA2B,KAAK,WAAW,UAAU,QAEpE,OAGI,MAAAoI,EAAU,KAAK,mBAAmB,KAAK,EAEzCA,EAAQ,QACVA,EAAQ,KAAKi1F,EAAc,EAG1Br9F,GACE+I,IACI,SAAI,qCAAsCX,EAAQ,CAAC,EAAG,SAAUA,EAAQA,EAAQ,OAAS,CAAC,EAAGm/F,CAAA,EAGpG,KAAK,YAAYn/F,EAAQ,CAAC,EAAG,GAAM,OAAW,OAAWm/F,CAAQ,IAW9Dx+F,IACI,SAAI,uCAAwCX,EAAQA,EAAQ,OAAS,CAAC,EAAGm/F,CAAA,EAG3E,iBAAYn/F,EAAQA,EAAQ,OAAS,CAAC,EAAG,GAAO,GAAM,OAAWm/F,CAAQ,EAElF,CAkFO,WAAY,CACd,KAAK,YACN,KAAK,kBAAkB,EAGzB,KAAK,WAAa,IAAIv/F,GAAW,KAAM,KAAiB,KACnD,eAAU,MAAO,GAAO,EAAK,EAC7B,eAAU,SAAU,GAAO,EAAK,EAErC,KAAK,WAAW,UAAU,OAAO,KAAK,SAAS,EAa1C,gBAAW,mBAAqB,KAAK,SAC1C,KAAK,WAAW,cAAgB,IAAM,KAAK,gBAAgB,EAAI,EAC/D,KAAK,WAAW,iBAAmB,IAAM,KAAK,gBAAgB,EAAK,EAGhEtN,EAwBL,CAEA,MAAa,sBAAuB,CAClC,MAAM8sG,EAAiB,MAAM,KAAK,KAAK,kBAAkB,EACnD70C,EAAQ,KAAK,SAAW3pF,EAAU,KAAOw+H,EAAe,UAAYA,EAAe,gBAE/E,UAAA9wH,KAAO,KAAK,UACjB,GAAAA,EAAM,GAAKA,GAAOi8E,EAAO,CAC1B,MAAMyqC,EAAUH,GAAY,KAAK,OAAQvmH,CAAG,EACtCw3C,EAAS,KAAK,UAAUkvE,CAAO,EAOlC,GANA,CAAClvE,IAIC,eAAU,OAAOx3C,CAAG,EAEtBw3C,EAAO,UAAU,SAAS,aAAa,GAAKA,EAAO,UAAU,SAAS,UAAU,GACjF,SAGG,4BAAuBA,EAAQ,MAAM,CAC5C,CAEJ,CAEO,cACLA,EACAj6B,EACAmpG,EAAUF,GAAiBhvE,CAAM,EACjC,CACI,IAAA9V,EAA0BqvF,EAQzBC,EAAuBC,EACzB,GAAA1zG,GAAWi6B,EAAO,YAAa,CAChC,MAAM05E,EAA0B,CAAC,sBAAuB,iBAAkB,SAAS,EACnFH,EAAe,CAACv5E,EAAQ,GAAG4mE,GAAW5mE,EAAQ05E,EAAc,CAAC,CAAC,CAAC,EAAE,IAAI,CAACrqH,EAASlR,EAAKsG,IAAQ,CAC1F,MAAMpK,EAASoK,EAAI,OACb6wD,EAAYokE,EAAc,MAAM,EAAGr/H,EAAS8D,CAAG,EAC/Cw7H,EAAW,MAAM,KAAKl1H,EAAIpK,EAAS,CAAC,EAAE,cAAc,iBAA8Bi7D,EAAU,KAAK,GAAG,CAAC,CAAC,EACtGskE,EAA0BD,EAASA,EAAS,QAAQtqH,CAAO,EAAI,CAAC,EAC/D,OACL,QAAAA,EACA,cAAeA,EAAQ,cACvB,MAAO8wB,GAAW9wB,EAAS,EAAK,EAChC,KAAMA,EAAQ,sBAAsB,EACpC,gBAAiBA,EAAQ,uBACzB,aAAc,SAAS,OAAO,iBAAiBA,CAAO,EAAE,YAAY,EACpE,wBAAAuqH,CAAA,CACF,CACD,EAEDH,EAAU,KAAK,gBACfD,EAAgB,KAAK,WAAW,WAClBtvF,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,2BAA2B,CACvD,CAOG,KAAK,UAAUglF,CAAO,IAAMlvE,GACtB,YAAK,QAAQkvE,CAAO,EAGxB,iBAAY,OAAOA,CAAO,EAE5B,KAAK,oBAAsBlvE,IAC5B,KAAK,kBAAoB,MAG3B,MAAMswE,EAAciJ,GAAgB,KAAK,kBAAkB,EAAK,EAoBhE,GAnBAjJ,GAAa,KAAK,EAEb,kBAAa,uBAAuBtwE,CAAM,EAC5C,KAAK,WACN,KAAK,SAAS,UAAUA,EAAQ,KAAK,wBAAwB,EACxD,cAAS,OAAOA,CAAM,EAE3B,KAAK,SAAS,UAAUA,EAAQ,KAAK,+BAA+B,EAC/D,qBAAgB,OAAOA,CAAM,EAElC,KAAK,SAAS,UAAUA,EAAQ,KAAK,qBAAqB,EACrD,eAAU,OAAOkvE,CAAO,EAE7B,KAAK,SAAS,UAAUlvE,EAAQ,KAAK,6BAA6B,EAClE,KAAK,SAAS,UAAUA,EAAQ,KAAK,6BAA6B,GAG7DA,EAAA,cAAgBA,EAAO,SAAW,OAEtCu5E,EAAc,CACX,IAAAM,EACSN,EAAA,QAAS10H,GAAS,CACzBA,EAAK,QAAQ,gBACAg1H,EAAAh1H,EACjB,CACD,EAEK,MAAAsc,EAASq4G,EAAgB,KAAK,WAAW,WACzCM,EAAuBD,IAAiBN,EAAa,CAAC,EACtDQ,EAAoB/5E,EAAO,UAAU,SAAS,eAAe,EAC7Dg6E,EAAqBh6E,EAAO,UAAU,SAAS,gBAAgB,EAEzD9V,EAAA,MAAM,QAAU,wBAAwB/oB,CAAM,MAC7C04G,EAAA,QAAQ,MAAM,QAAU,2DAA2DA,EAAa,KAAK,IAAM,EAAE,eAAeA,EAAa,KAAK,MAAM,MAE5J,aAAQ,OAAOA,EAAa,OAAO,EAE3BN,EAAA,QAAS10H,GAAS,CACzBA,EAAK,QAAQ,eACfm7B,GAAuBn7B,EAAK,QAASA,EAAK,cAAeA,EAAK,MAAO,EAAE,CACzE,CACD,EAGEg1H,EAAa,iBAAmB,CAACA,EAAa,gBAAgB,eAAiBN,EAAa,CAAC,EAAE,wBAChGA,EAAa,CAAC,EAAE,wBAAwB,MAAMrvF,CAAW,EAEzDlK,GAAuBkK,EAAa2vF,EAAa,cAAeA,EAAa,MAAO,EAAE,EAexFvJ,EAAY,QAAQ,EACpBA,EAAY,KAAK,EAEjB,MAAM11H,EAAoC,CAAC,SAAU,IAAK,KAAM,WAAY,OAAQ,+BAM9E+3C,EAAkBmnF,GAAwBC,GAAqB,CAACC,GAAsBH,EAAa,cAAc,cAA2B,uBAAuB,EAMnKI,EAAuB/vF,EAAY,QAAQ,CAAqC,CAAC,OAAQ,SAAU,aAAc,KAAK,GAAItvC,CAAO,EACjIs/H,EAAoBL,EAAa,QAAQ,QAAQ,CAAqB,CAA4B,QAAS,CAA8D,GAAIj/H,CAAO,EAIpLu/H,EAAkBxnF,EAAkBA,EAAgB,QAAQ,CAAC,CAAC,UAAW,eAAeknF,EAAa,YAAY,OAAQ,CAAC,UAAW,eAAeA,EAAa,YAAY,KAAK,CAAC,EAAGj/H,CAAO,EAAI,OAEjMsM,EAAW,CAAC+yH,EAAsBC,EAAmBC,CAAA,EAAyE,OAAO,OAAO,EAAE,IAAKntF,GAAcA,EAAU,QAAQ,EACnLxmC,EAAU,QAAQ,IAAIU,CAAQ,EAAE,KAAK,IAAM,CAC/CgjC,EAAY,OAAO,EACnB2vF,EAAa,QAAQ,SACrBM,GAAiB,OAAO,EACxBn6E,EAAO,iBAAiB,UACCtd,GAAA,EAAE,KAAK,IAAM,CACpC+2F,EAAQ,eAAe,EACxB,EACF,EAEI,gCAA2BjzH,EAAS8pH,CAAW,OAEpDtwE,EAAO,iBAAiB,SAI5B,CAEQ,2BAA2Bx5C,EAAuB8pH,EAA2B,CAC/EA,IACYA,EAAA,KAAK,kBAAkB,EAAI,EACzCA,EAAY,KAAK,GAGnB,IAAIplB,EAAW,GACf1kG,EAAQ,KAAK,IAAM,CACN0kG,EAAA,GACZ,EAEDkvB,GAA4B5zH,CAAO,EAEnC8pH,GAAe/5F,GAAc,IACxB20E,EACM,IAGTolB,EAAY,QAAQ,EACb,IACN,KAAK,WAAW,SAAS,CAC9B,CAEO,oBAAoB+F,EAAqBgE,EAAY,GAAMC,EAA0B,CAKvF,GAJQjE,IAAS,OAAQnH,GACnB,CAAC,CAAC,KAAK,UAAUA,CAAO,CAChC,EAEE,CAACmH,EAAS,OACX,OAGI,MAAArjF,EAAW,KAAK,mBAAmB,MAAM,EACzCwvC,EAAmC,GAYzC,GAXAxvC,EAAS,QAAQ,CAACxqC,EAAKrK,IAAQqkF,EAAQh6E,CAAG,EAAIrK,CAAG,EAEjDk4H,EACC,QACA,KAAK,CAAC,EAAGtmG,KAAOyyD,EAAQ,CAAC,GAAK,IAAMA,EAAQzyD,CAAC,GAAK,EAAE,EACpD,QAASm/F,GAAY,CACd,MAAAlvE,EAAS,KAAK,UAAUkvE,CAAO,EACrC,KAAK,cAAclvE,EAAQq6E,GAAahjH,GAAS,YAAY,YAAY,CAAC,EAC3E,EAED,KAAK,WAAW,wBACbgjH,GAAa,KAAK,KAAK,UAAU,YAAa,CAC3C,IAAAE,EACKlE,EAAA,QAASnH,GAAY,CAC5B,KAAM,CAAC,OAAAr0H,EAAQ,IAAA2N,CAAG,EAAIymH,GAAaC,CAAO,EAC3BqL,EAAA,KAAK,KAAK,UAAU,mBAAmB1/H,EAAQ,CAAC2N,CAAG,EAAG,EAAI,EAC1E,EACc+xH,KACjB,CAEAzsE,GAAqB,gBAAgB,GAAO,KAAK,KAAK,cAAc,EACpE,KAAK,sBAAsB,EAEvBwsE,GACF,KAAK,WAAW,UAGpB,CAEQ,2BAA4B,CAClC,MAAMvtH,EAAO,MAAM,KAAK,KAAK,qBAAqB,EAClD,OAAO,KAAK,SAAS,mBAAmB,iBAAiB,KAAK,OAAQA,CAAI,CAC5E,CAEQ,sCAAuC,CAC1C,KAAK,kCAAoC,CAAC,KAAK,sBAAsB,OAIxE,KAAK,iCAAmC00B,GAAM,GAAK,EAClD,KAAK,IAAM,KAAK,0BAA0B,CAAC,EAC3C,KAAK,IAAM,KAAK,qCAAsC,GACzD,CAEQ,cAAcjlC,EAAa,KAAK,gBAAiB,CACvD,IAAIg+H,EAAkB,GAClBC,EACJ,GAAG,CAAC,KAAK,iBAAmB,KAAK,KAAK,OAAS5iD,GAAS,UAAW,CACjE,KAAM,CAAC,aAAAv3B,EAAc,aAAAD,CAAY,EAAI,KAAK,WAAW,UACrDm6E,EAAkBl6E,IAAiBD,EAShCm6E,IAIDC,EAAe,KAAK,UACPA,EAAA,MAAM,WAAan6E,EAAe,KAC1C,gBAAW,0BAA0BD,CAAY,EACtD,KAAK,gBAAkB,GAE3B,CAEO,OACL,gBAAAm6E,EACA,aAAcA,EAAkB,IAAM,CAChCh+H,MAIJi+H,EAAa,MAAM,WAAa,GAChC,KAAK,gBAAkB,GACrB,SAER,CAEQ,iBAAiBt2H,EAAoBu2H,EAAwB,CACnE,MAAMl0H,EAAU,KAAK,kBAAkBrC,EAASu2H,CAAY,EACvD,8BAAkB,IAAIl0H,CAAO,EAClCA,EAAQ,MAAM8V,EAAI,EAAE,QAAQ,IAAM,CAC3B,uBAAkB,OAAO9V,CAAO,EACtC,EACMA,CACT,CAEA,MAAc,kBAAkBrC,EAAoBu2H,EAAwB,CAC1E,GAAG,CAAC,KAAK,WAAW,UAAU,OAAQ,CAE9B,MAAAC,EAAiB,KAAK,KAAK,eACjC,GAAGA,EAAgB,CACXn+H,QAAa,KAAK,gBACxBm+H,EAAe,KAAK,IAAM,CACxB,GAAG,CAACn+H,EAAW,EAAG,OAClB,MAAMo+H,EAAa,KAAK,KAAK,iBAAiBz2H,EAAQ,OAAQA,EAAQ,GAAG,EACzE,KAAK,iBAAiBy2H,CAAU,EACjC,CACH,CAEA,MACF,CAEG,QAAK,KAAK,UAAYnkD,GAAmBtyE,EAAS,KAAK,KAAK,OAAO,IAAM,KAAK,KAAK,SACpF,OAGI,MAAC,cAAA02H,CAAa,EAAI,KAAK,KAC7B,GAAGA,GAAe,OAAQ,CAClB,MAAC,UAAAnuC,CAAa,EAAAvoF,EAKpB,GAAG,EAJmBuoF,GAAW,SAAWmuC,EAAc,MAAO9gF,GACxD2yC,EAAU,QAAQ,KAAM/E,GAAkB7B,GAAe6B,EAAc,SAAU5tC,CAAQ,CAAC,CAClG,GAGC,MAEJ,CAEM,MAAAm1E,EAAUH,GAAY5qH,CAAO,EAChC,QAAK,UAAU+qH,CAAO,EACvB,OAOEwL,IACFA,EAAe,KAAK,eAClB,CAAC,KAAK,mBACN,KAAK,oBAAsB,KAAK,cAAc,GAC9C,KAAK,oBAAsB,KAAK,YAI9B,MAAAl+H,EAAa,KAAK,gBAClB,CAAC,gBAAAg+H,EAAiB,aAAAM,CAAA,EAAgB,KAAK,cAAct+H,CAAU,EAE/DgK,EAAU,KAAK,qBAAqB,CAAC,QAAS,CAACrC,CAAO,GAAI,EAAK,EACrE,OAAGu2H,GACDl0H,EAAQ,KAAK,IAAM,CACjB,GAAG,CAAChK,EAAW,EAAG,OAId,IAAAwjD,EACD,KAAK,KAAK,OAAS63B,GAAS,YACpB73B,EAAA,KAAK,UAAUkvE,CAAO,GAGjC,MAAM1oH,EAAUw5C,EAAS,KAAK,kBAAkBA,CAAM,EAAI,KAAK,cAC5Dw6E,GAEDh0H,EAAQ,KAAKs0H,CAAY,CAC3B,CAOD,EAGIt0H,CACT,CAEO,eAAgB,CAErB,OADc,KAAK,aAAa,WAClB,UAAU,MAC1B,CAEO,eACL6I,EACAq3D,EACAq0D,EACAC,EACA,CACM,MAAAh7E,EAAS5/B,EAAgB/Q,EAAS,QAAQ,EAE5CA,EAAQ,eACL,SAAI,MAAM,2BAA4B2wC,CAAM,EAG/C,IAAAi7E,EAED,GAAAj7E,GAAU0mB,IAAa,MAAO,CAC/B,MAAM7hE,EAAO,KAAK,aAAa,gBAAgBm7C,CAAM,EAClDn7C,GAAQA,EAAK,MAAM,YAAcA,GAAQs7B,GAAWt7B,EAAK,MAAM,SAAS,KAAO,KAAK,kBAAoB8yE,GAAgB,KAGnFsjD,EAFpBp2H,EAAK,MAAM,UAAU,cAO3C,CAOA,MAAMs7D,EAAS,EAKT+6D,EAAoB,KAAK,KAAK,MAAM,cAAgB,KAAK,KAAK,MAAM,aAAa,UAAU,SAAS,oBAAoB,GAAM,KAAK,KAAK,UAAU,UAAU,SAAS,oBAAoB,EACzL10H,EAAU,KAAK,WAAW,kBAAkB,CAChD,QAAA6I,EACA,SAAAq3D,EACA,OAAAvG,EACA,eAAA46D,EACA,cAAAC,EACA,KAAM,IACN,cAAeE,EAAmB,CAAC,CAAC,KAAA/sG,KAAU,CAG5C,IAAIhN,EAASolB,GAAW,OAExB,OAAAplB,GAAU,KAAK,UAAU,UACzBA,GAAU5kB,GAAW,UAAYgqC,GAAW,OAAS,IAAM,GAAK,GACzDplB,CAKL,SACJ,oCAAA85G,EACA,cAAgBj5G,GAAe,CAI7B,GAFK,cAAS,GAAMA,CAAU,EAE3B,KAAK,eAAgB,CAChB,MAAC,iBAAAm5G,CAAgB,EAAI,KAAK,KACdA,GAAA,eAAen5G,EAAW,WAAW,EACvD,KAAK,eAAiB,MACxB,CACF,EACD,EAGE,OAAA+4G,IAAmB7nF,GAAe,SAC9B,gBAAW,mBAAqB,KAAK,WAAW,gBAGhD1sC,CACT,CAEO,aAAc,CACZ,YAAK,kBAAkB,KAAK,SAAS,CAC9C,CAEA,MAAa,kBAAkBw5C,EAAqB,CAKlD,GAAGA,EAAQ,CACT,KAAK,kBAAoBA,EACnB,MAAAxjD,EAAa,KAAK,gBAExB,GADA,MAAM,KAAK,eAAewjD,EAAQ,MAAO,OAAW,MAAS,EAC1D,CAACxjD,EAAW,EAAG,OAClB,KAAK,kBAAoB,MAC3B,CACF,CAgBA,MAAa,qBAAqBwjD,EAAqB,CAClD,QAAK,cAAc,IAAMA,EAE1B,OAAO,KAAK,aAEhB,CAEO,gBAAgB3wC,EAAsB,CAC3C,MAAM+rH,EAAa,mBAChB/rH,EAAQ,QAAQ+rH,CAAU,IAC3B,aAAa,CAAC/rH,EAAQ,QAAQ+rH,CAAU,CAAC,EACjC/rH,EAAA,UAAU,OAAO,gBAAgB,EACpCA,EAAQ,aAGPA,EAAA,UAAU,IAAI,gBAAgB,EACtCA,EAAQ,QAAQ+rH,CAAU,EAAI,GAAK,WAAW,IAAM,CAC1C/rH,EAAA,UAAU,OAAO,gBAAgB,EAClC,OAAAA,EAAQ,QAAQ+rH,CAAU,GAChC,GAAI,CACT,CAEQ,iBAAiB3kE,EAAmBhpD,EAAa,IAAI,KAAKgpD,EAAY,GAAI,EAAG,CAC/E,IAAAusC,EAEE,MAAAjzF,MAAY,KAClBA,EAAM,SAAS,EAAG,EAAG,EAAG,CAAC,EAEzB,MAAM09C,EAAc,KAAK,KAAK,OAASoqB,GAAS,UAE7C9nE,EAAM,YAActC,EAAK,UACZu1F,EAAA5jG,EAAKquD,EAAc,8BAAgC,YAAY,EACrEA,GAAegJ,IAAcskC,GACrCiI,EAAc5jG,EAAK,6BAA6B,GAElC4jG,EAAAt1F,GAAWD,EAAMsC,CAAK,EAEjC09C,IACDu1C,EAAc5jG,EAAK,yBAA0B,CAAC4jG,CAAW,CAAC,IAIxD,MAAAhjD,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,UAAY,yBACb,MAAAq7E,EAAgB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gBAAgB,EACtC,MAAAC,EAAa,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,aAAa,EAEtCA,EAAW,OAAOt4B,CAAW,EAE7Bq4B,EAAc,OAAOC,CAAU,EAC/Bt7E,EAAO,OAAOq7E,CAAa,EAEpBr7E,CACT,CAEO,wBAAwByW,EAAmB,CAChD,MAAMhpD,EAAO,IAAI,KAAKgpD,EAAY,GAAI,EACtC,OAAGA,IAAcskC,IACVttF,EAAA,SAAS,EAAG,EAAG,CAAC,EAEhB,CAAC,KAAAA,EAAM,cAAeA,EAAK,QAAS,EAC7C,CAEO,4BAA4BgpD,EAAmB,CACpD,KAAM,CAAC,KAAAhpD,EAAM,cAAAspE,CAAA,EAAiB,KAAK,wBAAwBtgB,CAAS,EAChE,IAAAtsD,EAAM,KAAK,aAAa4sE,CAAa,EACzC,GAAG5sE,EACM,OAAAA,EAGT,MAAM61C,EAAS,KAAK,iBAAiByW,EAAWhpD,CAAI,EAE9C8tH,EAAa,KAAK,iBAAiB9kE,EAAWhpD,CAAI,EAC7C8tH,EAAA,UAAU,IAAI,SAAS,EAE5B,MAAA5+H,EAAY,SAAS,cAAc,SAAS,EAClDA,EAAU,UAAY,qBACZA,EAAA,OAAOqjD,EAAQu7E,CAAU,EAE7BpxH,EAAA,KAAK,aAAa4sE,CAAa,EAAI,CACvC,IAAK/2B,EACL,UAAArjD,EACA,eAAgB8Q,EAAK,QAAQ,EAC7B,aAAc,GAGhB,MAAM+tH,EAAiBC,GAAqB,KAAK,aAAc,KAAK,EAC9DphI,EAASmhI,EAAe,OAC9B,IAAIj9H,EAAI,EAAGm9H,EACX,KAAMn9H,EAAIi9H,EAAe,OAAQ,EAAEj9H,EAAG,CAC9B,MAAAN,EAAIu9H,EAAej9H,CAAC,EAE1B,GADem9H,EAAA,KAAK,aAAaz9H,CAAC,EAAE,UACjC84E,EAAgB94E,EACjB,KAEJ,CAEG,OAAAM,IAAMlE,GAAUqhI,IACjBA,EAAeA,EAAa,oBAG1BA,EAGG,eAAU,aAAa/+H,EAAW++H,CAAY,EAF9C,eAAU,OAAO/+H,CAAS,EAK5B,wBAAmB,2BAA2BA,CAAS,EAEzD,KAAK,UAAU,eACX,eAAU,UAAU,IAAI,YAAY,EAGpCwN,CACT,CAEQ,mBAAoB,CAC1B,KAAK,WAAW,SAClB,CAEO,SAAU,CAGf,KAAK,kBAAkB,EAEvB,KAAK,eAAe,YAEpB,KAAK,cAAc,QACd,eAAY,KAAK,SAAS,WAAW,EACrC,wBAAqB,KAAK,kBAAkB,WAAW,EAE5D,OAAO,KAAK,cACP,eAAY,OAAO,KAAK,SACxB,wBAAqB,OAAO,KAAK,iBACxC,CAEO,QAAQwxH,EAAa,GAAO,CACjC,KAAK,IAAI,SAAS,EAElB,KAAK,QAAU,GAEV,eAAU,MAAO,GAAO,EAAK,EAC7B,eAAU,SAAU,GAAO,EAAK,EAGhBC,GAAA,KAAK,WAAW,SAAS,EAGtBC,KAMxB,KAAK,YAAY,QACjB,KAAK,aAAe,GACpB,KAAK,cAAc,UACnB,KAAK,aAAe,IAAIjkD,GAAa,KAAK,IAAI,EAC9C,KAAK,UAAU,QACf,KAAK,WAAa,GAClB,KAAK,cAAc,QACnB,KAAK,kBAAkB,QACvB,KAAK,YAAY,QAGd+jD,IACD,KAAK,WAAW,kBAChB,KAAK,UAAU,kBACf,KAAK,oBAAoB,GAG3B,KAAK,kBAAoB,KACzB,KAAK,qBAAuB,GAE5B,KAAK,eAAe,QAEf,0BAAuB,KAAK,wBAA0B,OAC3D,KAAK,gBAAkB,OACvB,KAAK,2BAA6B,OAClC,KAAK,eAAiB,OAEnB,KAAK,mBACN,KAAK,kBAAkB,aAGtB,KAAK,WACN,KAAK,SAAS,aAEd,KAAK,SAAS,QACd,KAAK,gBAAgB,QACrB,KAAK,aAAa,QAClB,KAAK,oBAAoB,QACzB,KAAK,YAAc,OACnB,KAAK,mBAAqB,OAE1B,KAAK,UAAU,SAGjB,KAAK,iBAAiB,QAEtB,KAAK,gBAAkB,OACvB,KAAK,uBAAyB,OAC9B,KAAK,0BAA4B,OACjC,KAAK,uBAAyB,OAC9B,KAAK,iBAAmB,OACxB,KAAK,mBAAqB,OAE1B,KAAK,kBAAoB,OAGzB,KAAK,gBAAkB,GAEvB,KAAK,kBAAkB,QACvB,KAAK,eAAe,QACpB,KAAK,iBAAiB,QAInB,KAAK,qBACN,aAAa,KAAK,kBAAkB,EACpC,KAAK,mBAAqB,GAGvB,eAAU,UAAU,OAAO,kBAAkB,EAClD,KAAK,WAAW,eAClB,CAEQ,oBAAoB37E,EAAS,KAAK,uBAAwB,CAC7DA,GACD,KAAK,cAAcA,CAAM,CAE7B,CAEQ,qBAAqBxjD,EAA2B,CAEhD,MAAAs/H,EAAa,KAAK,KAAK,MAAM,WAChCA,IAAe,QAIlB,KAAK,KAAK,oBAAsB,OAAMC,GAAa,CAC9C,CAACv/H,EAAgB,GAAAu/H,GAAY,KAAK,KAAK,MAAM,aAAeD,GAI1D,UAAK,MAAM,UAAS,CAC1B,CACH,CAEA,MAAa,QAAQlhI,EAAsI,CACzJ,KAAM,CAAC,SAAAohI,EAAU,WAAAC,EAAY,OAAAphI,EAAQ,MAAA2xG,GAAS5xG,EAC9C,GAAI,CAAC,UAAAi9F,EAAW,cAAAqkC,EAAe,WAAAJ,CAAA,EAAclhI,EACvC,MAAAgd,EAAS,EAAE,KAAK,cAEtB,IAAIukH,EAAyBC,EAE7B,GAAG,CAACvhI,EACF,YAAK,QAAQ,EAAI,EACjB,KAAK,UAAU,SACR,KAGH,MAAA0mC,EAAO,YAAY,MACnBJ,EAAM,KAAK,IAAI,WAAW,SAAS,EACzCA,EAAI,KAAK,OAAO,EAEhB,MAAM3kC,EAAa,IACV,KAAK,gBAAkBob,EAG1BwpB,EAAIP,GAAkBrkC,EAAY4xH,EAAkB,EAEtD4N,GAEF,MAAM56F,EAAE,KAAK,KAAK,aAAaxmC,EAASwmC,CAAC,CAAC,EAOtC,MAAA28C,EAAW,KAAK,KAAK,KAExBA,IAAalG,GAAS,WAAa,KAAK,KAAK,aAC7BskD,EAAAhN,GACTt3B,EACSskC,EAAApN,GAAYmN,GAAiBrhI,EAAQg9F,CAAS,EAE9CskC,EAAAhN,GAGnB,MAAMmK,EAAiB,MAAMl4F,EAAE,KAAK,KAAK,mBAAmB,EACzD28C,IAAalG,GAAS,OACvBukD,EAAoBrN,GAAYl0H,EAAQ,MAAMumC,EAAE,KAAK,SAAS,mBAAmB,uBAAuBvmC,EAAQ,KAAK,KAAK,QAAQ,CAAC,CAAC,EAC5Hy+H,EAAe,cACvB8C,EAAqB9C,EAAe,cAAc,MAAM,CAAC,GAAiBnK,GAE1EiN,EAAoB9C,EAAe,MAAQvK,GAAYl0H,EAAQy+H,EAAe,KAAK,EAAInK,GAEzF,MAAMkN,EAAWF,IAAmBhN,GAOjC3iB,GACD,KAAK,KAAK,aAAa,wBAAwBA,EAAM,OAAO,EAG1D,IAAA8vB,EACAC,EAAY,EAAGC,EAAiEC,EACpF,GAAG,CAACJ,IACEL,IACFQ,EAAgB,KAAK,KAAK,aAAa,qBAAqB,KAAK,IAAI,GAGpE,CAAAA,IAEO,QAAK,KAAK,OAAS3kD,GAAS,OACnBskD,EAAAC,UACTA,IAAsBjN,GAAgB,CAC1C,IAAA1iF,EAQJ,GAPI7xC,EAAQ,gBACV,CAAC2hI,EAAW9vF,CAAM,EAAI,MAAMrL,EAAE,QAAQ,IAAI,CACxC,KAAK,SAAS,mBAAmB,qBAAqBvmC,EAAQ,KAAK,KAAK,QAAQ,EAChF,KAAK,KAAK,iBAAiB,CAC5B,EAAC,GAIF0hI,GACA,CAACP,IACA,CAACvvF,GAAW,CAAC5hB,GAAc4hB,CAAM,GAAKA,EAAO,eAAiB,GAC/D,CACA,MAAMy3C,EAAao1C,EAAe,QAAQ,gBAAgBiD,CAAS,EAChEr4C,GAAcA,EAAW,MAAM,MAAMR,GAAS,MAAM,IAC7B+4C,EAAAv4C,EAAW,MAAMA,EAAW,OAAS,EAAE,GAAKA,EAAW,MAAM,CAAC,GAAKq4C,GAG7FD,EAAkB,CAACD,EACFF,EAAApN,GAAYl0H,EAAQ0hI,CAAS,OAE7BJ,EAAAC,CAErB,EAGF,MAAMM,EAAqBP,IAAmBC,GAAsBD,IAAmBhN,IAAkB,CAACmN,EACpGK,EAASR,IAAmBC,EAclC,GAZGM,GAAsBP,IAAmBhN,KAC1B,KAAK,KAAK,WAAWgN,CAAc,IAE5C,SAAI,mDAAoDA,CAAc,EAC1DA,EAAAhN,KAIlB2M,IAAe,QAAa,MAAM16F,EAAE,KAAK,KAAK,qBAAqB,IACvD06F,EAAAc,IAGZZ,GAAYC,EAAY,CACtBzvB,GAAS2vB,IAAmBhN,IAC7B,KAAK,YAAY,KAAKJ,GAAYviB,EAAM,OAAQA,EAAM,GAAG,CAAC,EAI5D,IAAIxsD,GADY,MAAM5e,EAAE,KAAK,iBAAiB+6F,CAAc,CAAC,IACvC,OAKtB,GAJG,CAACn8E,GAAU,KAAK,YAAY,IAAIm8E,CAAc,IACtCn8E,EAAA,KAAK,6BAA6Bm8E,EAAgB,EAAK,GAAK,KAAK,6BAA6BA,EAAgB,EAAI,GAG1Hn8E,EACD,OAAGq8E,GACI,oBAAer8E,EAAQ,QAAQ,EACpC,KAAK,gBAAgBA,CAAM,EAC3B,KAAK,KAAK,cAAc,UAAW63C,EAAW,EAAK,GAC3CukC,IAAsBjN,IAAkB,CAACwN,IAGjD,KAAK,YAAY,EACjB,KAAK,KAAK,cAAc,UAAW9kC,EAAW,EAAI,GAGjDikC,IAAe,SACX,UAAK,MAAM,cAAcA,CAAU,EACxC,KAAK,qBAAqBt/H,CAAU,GAGnC5B,EAAQ,gBACgB8nC,GAAA,EAAE,KAAK,IAAM,CACpC,KAAK,6BAA6B,CAChC,eAAAy5F,EACA,WAAA3/H,EACA,eAAgB5B,EAAQ,eACzB,EACF,EAGI,IACT,MAEG,KAAK,SACD,mBAAc,QAAU,EAAE47F,GAC/B,KAAK,SAAS,eAAe,WAAW,KAAK,KAAK,QAAQ,cAAc,OAAO,GAGjF,KAAK,YAAY,OAAS,EAE1B,KAAK,aAAe,CAClB,wBAAyB,MAAMp1D,EAAE,KAAK,SAAS,gBAAgB,WAAWvmC,CAAM,CAAC,GAAK,KAAK,KAAK,OAIjGggC,IACDsG,EAAI,kBAAmBtmC,EAAQy+H,EAAgB6C,EAAgBC,CAAiB,EAIlF,MAAMS,EAAgBF,GAAU,CAAC9kD,GAAS,OAAQA,GAAS,SAAS,EAAE,SAASkG,CAAQ,GAAK,KAAK,KAAK,aAAe,OAAY0+C,GAAyBxN,GAAamN,CAAiB,EAAE,IACpLU,EAAoBD,EAAgB9N,GAAYl0H,EAAQgiI,CAAa,EAAI,OAE/E,IAAIE,EAAmB5N,GACvB,GAAG6M,EAAU,CACL,MAAArvH,EAAK,KAAK,iBAAiB,QAAQ,EAEtCA,IACDowH,EAAmB/N,GAAiBriH,CAAE,GAGpCowH,IAEiBA,EADF,KAAK,mBAAmB,OAAQ,EAAI,EACzB,CAAC,GAAK5N,GACpC,MAEA,KAAK,YAAc,GACnB,KAAK,sBAAsB,EAG7B,MAAM6N,EAAe,KAAK,UACpBC,EAAuB,KAAK,uBAClC,KAAK,QAAQ,EACb,MAAMC,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EAC5DlB,GACDkB,EAAU,UAAYF,EAAa,UACzBE,EAAA,UAAU,OAAO,gBAAiB,cAAc,GAEhDA,EAAA,UAAU,IAAI,eAAe,EAGzC,KAAK,cAAc,OAEnB,MAAMC,EAAYnB,GAAYC,EAExBmB,EAAuBD,GAAcf,IAAsBjN,IAAkBwN,GAAWN,EACxFgB,EAASN,IAAqB5N,KAAmBgN,IAAmBhN,IAAyC,MAAO,SAAW,CACnI,MAAMmK,EAAiB,MAAM,KAAK,KAAK,kBAAkB,EACnD11C,EAAc01C,EAAe,eAAiBA,EAAe,QAChE,GAAA11C,IAAgB01C,EAAe,cAAe,CAC/C,MAAMgE,EAAY15C,EAAY,MAAM,QAAQu4C,CAAc,EACpD3kF,GAAWosC,EAAY,MAAM,QAAQm5C,CAAgB,EAC3D,OAAOO,EAAY9lF,EAAA,KAEnB,QAAOy3E,GAAa8N,CAAgB,EAAE,IAAM9N,GAAakN,CAAc,EAAE,GAE1E,MACGoB,EAAiB,CAACF,GAAUF,EAC5BK,EAAe,CAACD,GAAkBF,GAAUF,EASlD,GARA,KAAK,iBAAmBI,GAAkBC,EAE1C,KAAK,eAAiB,CACpB,eAAArB,EACA,kBAAAC,EACA,cAAAI,CAAA,EAGC,CAACR,EAAU,CACZ,KAAK,MAAQ,OACb,KAAK,aAAe,OACpB,KAAK,aAAe,GAEpB,IAAIyB,EAAe,KAAK,KAAK,YAAap8H,EAAS,KAAK,OAAO,WAM/D,GALG,KAAK,KAAK,OAASw2E,GAAS,OAAS,CAAC,KAAK,KAAK,SAAS,WAE1D4lD,EADapiI,GAAgB,QAAQgG,EAAS,KAAK,KAAK,SAAS,UAAU,GACtD,IAAM,WAG1Bo8H,EAAc,CACf,KAAK,aAAe,GACpB,MAAMC,EAAe,KAAK,aAAe,IAAI,IAEvCl3H,GAAU,KAAK,SAAS,aAAa,kBAAkB,gBAAgB,CAC3E,GAAInF,EACJ,OAAQ,CAAC,EAAG,2BAA2B,EACvC,MAAO,IACR,EACKs8H,GAAc,MAAMv8F,EAAE56B,EAAO,EAC7Bo3H,GAAkBD,GAAY,OAAO,KAAME,IAAwB,CACpE,QAAK,eAAiBH,EACvB,OAGF,MAAMrrF,GAAewrF,GAAoB,aACpC,eAAY,IACJxrF,GAAA,QAAShQ,GAAgB,CAC9B,MAAAE,GAAOH,GAAmBC,CAAW,EAC3C,KAAK,MAAM,IAAIA,EAAY,QAAQ,WAAYE,EAAI,EACpD,EAEwBG,GAAA,EAAE,KAAK,IAAM,CACjC,KAAK,eAAiBg7F,IAIzBA,EAAa,QAASh5H,GAAaA,EAAU,GAC7C,KAAK,aAAe,QACrB,CACH,EAAIsH,IAAQ,CACNA,GAAiB,OAAS,uBACvB,SAAI,MAAM,cAAeA,EAAG,EAG9B,eAAY,GAAI,CACtB,EAEE2xH,GAAY,QACb,MAAMv8F,EAAEw8F,EAAe,CAE3B,CACF,CAEI,IAAAhhI,EACA4/H,EAQO5/H,EAAA,CACP,QAAS8lC,KAA2B,KAAK,IAChC,KAAK,qBAAqB,CAAC,QAAS85F,EAAc,MAAO,EAAI,CACrE,EACD,OAAQ,GACR,YAAa,QAAQ,QAAQ,GAZtB5/H,EAAA,MAAMwkC,EAAE,KAAK,YACpB,CAACu7F,GAAU,CAACG,GAAqBX,IAAmBC,EAAoBjN,GAAiBgN,EACzF,GACAQ,EACAG,CAAA,CACD,EAWH,KAAK,cAAgBlgI,EAAO,OAE5BukC,EAAI,KAAK,aAAa,EAEhB,MAAC,QAAA36B,EAAS,OAAA6Y,CAAU,EAAAziB,EACpBkhI,EAAmE,CACvE,OAAAjjI,EACA,SAAAwhI,EACA,OAAAM,EACA,UAAA9kC,EACA,WAAAikC,EACA,WAAAt/H,EACA,KAAM5B,EAAQ,KACd,SAAUA,EAAQ,UAGjB,CAACykB,GAAU,CAAC28G,IACb,MAAM56F,EAAE,KAAK,KAAK,iBAAiB08F,CAAuB,CAAC,EAC3D,KAAK,WAAW,kBACX,eAAU,OAAO,KAAK,SAAS,GAGjBhwE,GAAA,UAAU,KAAK,KAAK,cAAc,EACvD,MAAM6sE,EAAiBv5F,EAAE56B,CAAO,EAAE,KAAK,SAAW,CAChD26B,EAAI,KAAK,mBAAmB,EAE5B,MAAM48F,EAAqBX,EAAuB,MAAMh8F,EAAE+6F,IAAmBhN,GAAiB,KAAK,iBAAiBgN,CAAc,EAAI,CAAC,OAAQ,KAAK,cAAc,CAAE,GAAI,OACrK98G,GAAU,CAAC28G,IACZ76F,EAAI,KAAK,uBAAuB,EAChC,MAAMC,EAAE,KAAK,KAAK,iBAAiB08F,CAAuB,CAAC,EAC3D38F,EAAI,KAAK,sBAAsB,GAGjC,KAAK,UAAU,SAEZ,KAAK,yBACN,KAAK,uBAAuB,EAC5B,KAAK,uBAAyB,QAGhC,KAAK,cAAgB,OAErB,MAAM0e,EAAa,KAAK,WACxBA,EAAW,oBAAsB,EACjCA,EAAW,mBAAqB,EAChCA,EAAW,gBAAgBq9E,CAAS,EAEjCD,GACD,KAAK,oBAAoBA,CAAoB,EAG/C,KAAK,4BAA4B,EAE9B,CAACZ,GAAY,KAAK,KAAK,0BACxB,KAAK,KAAK,OAAO,eAAe,gBAAgB,CAAC,EAG9C,eAAU,UAAU,OAAO,aAAc,CAAC,CAAC,OAAO,KAAK,KAAK,YAAY,EAAE,MAAM,EAEjFl7F,EAAA,KAAK,eAAgB,KAAK,YAAc+7F,EAAW,KAAK,UAAU,cAAe,YAAY,IAAI,EAAI37F,CAAI,EAExFusB,GAAA,YAAY,KAAK,KAAK,cAAc,EACpCA,GAAA,gBAAgB,GAAO,KAAK,KAAK,gBAGtD,KAAK,cAAc,SAGb,MAAAkwE,EAAkB,QAAQ,IAAI,CAClCrD,EACAj4F,GAAyB,EAC1B,EAGD,GAAG85F,EACU38E,EAAA,0BAA0B28E,EAAc,GAAG,UAC9CY,EAAsB,CAC1B,IAAAtC,GACJ,GAAGyC,EACD19E,EAAW,0BAA0B,KAAK,UAClC29E,EAAc,CAChB,MAAA5xH,GAAM,KAAK,gBACdA,GAAI,kBACLkvH,GAAelvH,GAAI,cAGrBi0C,EAAW,0BAA0B,CAAC,CACxC,CAGA,IAAIG,GAAuBs8E,GAAmB,KAAK,mBAAsByB,GAAoB,OACvF,MAAAE,GAAc,CAAC,CAACj+E,IAAQ,cAC1Bi+E,KACOj+E,GAAA,KAAK,6BAA6Bm8E,EAAgB,EAAK,GAAK,KAAK,6BAA6BA,EAAgB,EAAI,GAGzH31H,OAEJ,GAAGw5C,GAAQ,CACH,MAAAk+E,GAAa,KAAK,gBAClBx3D,EAAkC41D,EAAkB,QAAW,CAACK,GAAU,CAACN,GAAY6B,KAAel+E,GAAS,MAAQ,SAE1H0mB,IAAa,OAASw3D,KAAel+E,IAAUg8E,EAChDx1H,GAAU,KAAK,cAEfA,GAAU,KAAK,eAAew5C,GAAQ0mB,EAAWs1D,EAAmC,OAAxB9oF,GAAe,MAAkB,EAG5F,CAACopF,GAAmBD,GAAY4B,IACjC,KAAK,gBAAgBj+E,EAAM,CAE/B,CAEGq8E,GAAY,CAAC4B,IACdD,EAAgB,KAAK,IAAM,CAChB3wG,GAAA,CAAC,YAAa,kBAAkB,EAC1C,EAGAytG,KACAt0H,IAAW,QAAQ,QAAQ,GAAG,KAAK,IAAM,CAC3Bs0H,IAAA,CACd,CACH,MAEAj7E,EAAW,0BAA0B,KAAK,EAGjCA,EAAA,YAAYA,EAAW,kBAAkB,EAGpD,KAAK,kBAAkB,EAGvB,KAAK,SAAS,EAEdm+E,EAAgB,KAAK,IAAM,CACrBxhI,MAKJqjD,EAAW,SAAS,EAEjBjlD,EAAQ,iBAAmB,SAElBykB,GAAU,CAAC28G,GAAY3kH,GAAS,YAAY,YAAY,GAAK,KAAK,KAAK,aAAa,MAAM,OAAS,EAC3GoqB,GAAM,GAAG,EACT,QAAQ,WACR,KAAK,IACE,KAAK,6BAA6B,CACvC,eAAA06F,EACA,WAAA3/H,EACA,eAAgB5B,EAAQ,eACzB,CACF,EAGH,KAAK,qBAAqB4B,CAAU,GAKrC,EAED,KAAK,KAAK,cAAc,UAAWq7F,EAAW,CAAC8kC,CAAM,EAErD,QAAQ,IAAI,CACV,KAAK,0BAA0BqB,CAAe,EAC9C,KAAK,wBAAwB,CAC3B,gBAAAA,EACA,SAAAhC,EACA,cAAAQ,CAAA,CACD,EACF,EAAE,KAAK,IAAM,CACRr7F,EAAA,mBAAoB0e,EAAW,UAAU,MAAM,EAChDA,EAAW,UAAU,QAAUu8E,IAAsBjN,IAAkB,CAAC,KAAK,SAAS,MACvF,KAAK,kBAAkB,CACzB,CACD,EAEEpxC,IAAalG,GAAS,MAAQ,CAAC,KAAK,KAAK,eAC3B,MAAMz2C,EAAE,KAAK,SAAS,mBAAmB,cAAcvmC,CAAM,CAAC,IAClE,OAAO,aAChB,KAAK,SAAS,mBAAmB,iBAAiBA,EAAQ,EAAI,CAElE,CAGD,EAAE,MAAOmR,GAAQ,CACZ,MAAAm1B,EAAA,MAAM,yBAA0Bn1B,CAAG,EACnCxP,KACF,KAAK,UAAU,SAGXwP,CAAA,CACP,EAEM,OAAC,OAAAqT,EAAQ,QAASs7G,EAC3B,CAEO,6BAA6B,CAClC,WAAAn+H,EACA,eAAA2/H,EACA,eAAAlE,CAAA,EAKC,CACD,KAAK,iBAAiBkE,CAAc,EAAE,KAAM5gC,GAAY,CACnD,CAAC/+F,KAAgB,CAAC++F,GAIhB,4BAAuBA,EAAQ,OAAQ08B,CAAc,EAC3D,CACH,CAEO,uBAAuB5oH,EAAsBonD,EAAmB,CAC/D,MAAAzW,EAAS5/B,EAAgB/Q,EAAS,QAAQ,EAC1C8oH,EAAc/3G,EAAgB/Q,EAAS,cAAc,EACrD8uH,EAAiBhG,EAAc,CAACA,EAAY,QAAQ,IAAM,CAACn4E,EAAO,QAAQ,QAC5E,IAAAo+E,EAAap+E,EAAO,cAA2B,aAAa,EAChE,GAAGo+E,EAAY,CACVD,IACDC,EAAaA,EAAW,cAAc,cAAcD,CAAc,IAAI,GAGlE,MAAAlxH,EAAQmxH,EAAW,cAA2B,oBAAoB,EACnE,+BAA0BnxH,EAAO,OAAWwpD,CAAS,EAC1D,MACF,CAEA,MAAM3C,GAASqkE,GAAen4E,GAAQ,cAA4B,QAAQ,EAC1E,GAAG8T,EAAO,CACRA,EAAM,kBAAkB2C,CAAS,EACjC,MACF,CAEA,MAAM0oB,EAAgBn/B,EAAO,QAAQ,cAAc,SAAS,EACtDgxE,EAAa,CAAChxE,EAAO,QAAQ,WAChCm/B,GAAiB6xC,IACf7xC,IAAkB,KAAK,OACxB,KAAK,KAAK,aAAa,CAAC,UAAW6xC,EAAY,eAAgBv6D,EAAU,EAEpE,UAAK,aAAa,aAAa,CAClC,OAAQ0oB,EACR,eAAgB1oB,CAAA,CACjB,EAGP,CAEA,MAAc,0BAA0BunE,EAA+B,CAC/D,MAAAxhI,EAAa,KAAK,gBAExB,GAD8B,KAAK,KAAK,UACd,CACxB,MAAM6hI,EAAiB,IAAM,CAC3B,GAAG,CAAC7hI,EAAW,EAAG,OAElB,MAAMw2C,EAAW,KAAK,mBAAmB,OAAW,EAAI,EAClD3vB,MAAoC,IAC1C,UAAU6rG,KAAWl8E,EAAU,CAC7B,IAAI7uC,EAAU,KAAK,KAAK,WAAW+qH,CAAO,EACvC,GAAA/qH,GAAS,IAAM,UAChB,SAGQA,EAAA9I,GAAgB,sBAAsB8I,CAAO,EACjD,MAAC,OAAAtJ,EAAQ,IAAA2N,CAAO,EAAArE,EAElB,IAAA4I,EAAOsW,EAAI,IAAIxoB,CAAM,EACrBkS,GACFsW,EAAI,IAAIxoB,EAAQkS,EAAO,IAAI,GAAK,EAGlCA,EAAK,IAAIvE,CAAG,CACd,CAEA,MAAMtB,EAAW,CAAC,GAAGmc,EAAI,QAAQ,CAAC,EAAE,IAAI,CAAC,CAACxoB,EAAQkS,CAAI,IAC7C,KAAK,SAAS,oBAAoB,qBAAqBlS,EAAQ,CAAC,GAAGkS,CAAI,CAAC,CAChF,EAEe,QAAQ,IAAI7F,CAAQ,EAC5B,KAAK,IAAM,CACjB,WAAWm3H,EAAgB,GAAI,EAChC,GAGK,YAAI,CAACL,EAAiBt7F,GAAyB,EAAGjB,GAAM,GAAG,CAAC,CAAC,EAAE,KAAK,IAAM,CACjE48F,GAAA,CAChB,CACH,CACF,CAEA,MAAc,wBAAwB,CAGpC,gBAAAL,EACA,cAAAxB,EACA,SAAAR,CAAA,EAOC,CACD,MAAMnhI,EAAS,KAAK,OACjB,GAAAA,EAAO,SACR,OAGI,MAAA2B,EAAa,KAAK,gBAClB8hI,EAAoB,MAAM,KAAK,SAAS,mBAAmB,sBAAsBzjI,CAAM,EAO1F,GALA,EADkB2hI,GAAiB8B,KAKhC,MAAAN,EACH,CAACxhI,KACF,OAGI,MAAA6E,EAASxG,EAAO,WACtB2B,EAAW,QAAQ,IAAM,CAClB,cAAS,kBAAkB,8BAA8B6E,CAAM,EACrE,EAEI,cAAS,kBAAkB,0BAA0BA,CAAM,CA0ClE,CAEA,MAAa,mBAAoB,CAC5B,QAAK,KAAK,OAASw2E,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,WAAY,CAC7E,KAAM,CAAC,OAAAh9E,EAAQ,SAAAK,GAAY,KAAK,KAC1BqjI,EAAe,MAAM,KAAK,KAAK,gBAAgB,EACrD,KAAK,SAAS,mBAAmB,YAAY1jI,EAAQ0jI,EAAcrjI,EAAU,EAAI,CACnF,CACF,CAEA,MAAa,kBAAmB,CAC9B,KAAM,CAACgV,EAAasuH,EAAUC,CAAW,EAAI,MAAM,QAAQ,IAAI,CAC7D,KAAK,KAAK,YACV,KAAK,KAAK,QAAQ,EAClB,KAAK,KAAK,YACX,EAED,MAAO,IAAM,CACX,KAAK,UAAU,UAAU,OAAO,aAAcD,CAAQ,EACtD,KAAK,UAAU,UAAU,OAAO,uBAAwB,CAACA,CAAQ,EAEjE,CAAC,KAAK,UAAW,KAAK,OAAO,EAAE,QAASnvH,GAAY,CAC1CA,EAAA,UAAU,OAAO,UAAWovH,CAAW,EACvCpvH,EAAA,UAAU,OAAO,eAAgBa,CAAW,EACrD,EAED,KAAK,qBAAqB,EAE9B,CA2JO,oBAAoBtV,EAAuD,CACzE,YAAK,eAAe,WAAWA,CAAO,CAC/C,CAEQ,cAAe,CACX,UAAAolD,KAAU,KAAK,eACvBA,EAAO,OAAO,EAIhB,KAAK,eAAe,OACtB,CAEO,aAAahwB,EAOb,CACD,IAAAgoD,EAED,KAAK,KAAK,OAASH,GAAS,YAC7BG,MAAqB,IACrBhoD,EAAM,QAAQ,CAAC,CAAC,OAAAgwB,EAAQ,QAAA77C,KAAa,CACnC,MAAMU,EAAO,KAAK,aAAa,gBAAgBm7C,CAAM,EAC/C/vB,EAAQprB,GAAM,MACjBorB,GAASprB,EAAK,QAAQ,OAASV,EAAQ,OACnC,kBAAa,WAAWU,CAAI,EACjCmzE,EAAe,IAAI/nD,CAAK,EAC1B,CACD,GAGHD,EAAM,QAAQ,CAAC,CAAC,OAAAgwB,EAAQ,QAAA77C,EAAS,QAAAuzB,KAAa,CAC5C,KAAK,aAAa,mBAAmBsoB,EAAQ77C,EAASuzB,CAAO,EAC9D,EAEK,MAAAo/C,EAAS,KAAK,aAAa,eAAe,EAE1Ck7C,EAAiB,MAAM,KAAKl7C,CAAM,EAAE,IAAK7mD,GAAU,CACvD,MAAMyuG,EAAYzuG,EAAM,UACxB,GAAG,CAACyuG,EACF,OAIF,GADyB,KAAK,KAAK,eAAeA,EAAU,OAAO,EAEjE,OAAGzuG,EAAM,OACP,OAGKA,EAAM,aAAayuG,EAAU,OAAO,CAC7C,CACD,EAAE,OAAO,OAAO,EAEjB,GAAG1mD,EACD,UAAU/nD,KAAS+nD,EACjBlB,EAAO,IAAI7mD,CAAK,EAIb,OACL,OAAQ,CAAC,GAAG6mD,CAAM,EAClB,eAAAk7C,CAAA,CAEJ,CAEO,cAAc2M,EAAoC,CAChD,YAAK,iBAAiB,IAAIA,CAAkB,CACrD,CAEA,MAAc,iBAAiB,CAC7B,MAAA1xH,EACA,QAAAzG,EACA,WAAAhK,EACA,cAAA62F,CAAA,EAMC,CAEE,GADG,MAAA7sF,EACH,CAAChK,IACF,OAGF,KAAM,CAAC,MAAA0kB,EAAO,OAAAC,GAAUkyE,EAAc,MAChC12F,EAAY,MAAMw2F,GAAiB,CACvC,MAAAlmF,EACA,MAAO,SAASiU,CAAK,EACrB,OAAQ,SAASC,CAAM,EACvB,WAAA3kB,EACA,eAAgB,KAAK,KAAK,eAC3B,EAEGA,KAIJ62F,EAAc,OAAO12F,CAAS,CAChC,CAEO,UAAU9B,EAAyB2N,EAAc,CAClD,IAAA0mH,EACJ,OAAG1mH,EACS0mH,EAAAH,GAAYl0H,EAAkB2N,CAAG,EAEjC0mH,EAAAr0H,EAGL,KAAK,QAAQq0H,CAAO,CAC7B,CAEA,MAAc,kBAAkB,CAC9B,QAAA/qH,EACA,QAAAuzB,EACA,OAAAsoB,EACA,eAAA6yE,EAAiB,GACjB,cAAApqG,EACA,iBAAAm2G,CAAA,EAQC,CACK,MAAA1P,EAAUH,GAAY5qH,CAAO,EACnC,GAAG,CAACA,GAAW,KAAK,kBAAkB,IAAI+qH,CAAO,GAAM,KAAK,UAAUA,CAAO,GAAK,CAAClvE,EACjF,OAGF,MAAMl7B,EAAmBva,KACnB/N,EAAasoB,EAAiB,MAC9B+5G,EAAiB,KAAK,gBAC5BA,EAAe,QAAQ,IAAM,EAC1B,KAAK,KAAK,gBAAkB,KAAK,KAAK,gBAAkB,QAAQ,WAAW,KAAK,IAAM,CACrF/5G,EAAiB,QAAQ,EAC1B,EACF,EAEG,IAAAloB,EAIA,IACG,uBAAkB,IAAIsyH,CAAO,EAG5B,MAAA4P,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,iBAAmBh6G,EACnBg6G,EAAA,QAAQ,IAAM,GAAK36H,EAAQ,IAC3B26H,EAAA,QAAQ,OAAS,GAAK36H,EAAQ,OAC9B26H,EAAA,QAAQ,UAAY,GAAK36H,EAAQ,KAUxC67C,IACDA,EAAO,iBAAiB,UACnB,iBAAY,OAAOkvE,CAAO,EAE1B,oBAAe,IAAIlvE,CAAM,EACzB,sBAAiB,OAAOA,CAAM,EAC9B,sBAAiB,IAAI8+E,EAAW9+E,CAAM,EACtC,kBAAa,qBAAqBA,EAAQ8+E,CAAS,GAGjD9+E,EAAA,KAAK,QAAQkvE,CAAO,EAAI4P,EACjC,IAAI/vG,EAAkB,KAAK,cAAc5qB,EAASuzB,EAASsoB,EAAQxjD,CAAU,EAC1EisB,IACiBsG,EAAAtG,EAAcsG,EAAiBixB,CAAM,GAGzD,MAAMx5C,EAAUuoB,EAAgB,KAAMpjB,GAAQA,GAAKkzH,EAAmB,GAAC,GAAGlzH,EAAG,eAAAknH,EAAgB,iBAAA+L,CAAA,EAAoB,MAA4B,EAK1I,GAHH,KAAK,oBAAoBp4H,EAAQ,MAAM,IAAM,EAAS,CAAC,EAEvD5J,EAAS,MAAM4J,EACZ,CAACq4H,IACF,OAGEjiI,GACG,iBAAY,IAAIsyH,CAAO,QAExBljH,EAAK,CACN,SAAI,MAAM,uBAAwBA,CAAG,CAC5C,CAEG,GAAC6yH,IAIC,8BAAkB,OAAO3P,CAAO,EAC9BtyH,CACT,CAEQ,uBAAuBojD,EAAqB79B,EAAgD5f,EAAiB,CACnH,CAACA,GAASy9C,EAAO,UAAU,OAAO,aAAc,WAAY,UAAW,SAAS,EAChF79B,GAAU69B,EAAO,UAAU,IAAI,MAAQ79B,CAAM,EAC7C69B,EAAO,iBAAiB,oBAAoB,EAAE,QAAS3wC,GAAY,CACjE,MAAM0vH,EAAmB,CAAC,CAAC1vH,EAAQ,cAAc,sBAAsB,EACvE,GAAG,CAAC8S,EAAQ,CACP48G,GACD1vH,EAAQ,kBAAkB,SAG5B,MACF,CAEI0U,MACD5B,IAAW,QAAS4B,EAAO,eACtB5B,IAAW,UAAW4B,EAAO,UAC7B5B,IAAW,OAAQ4B,EAAO,QAC7BA,EAAO,SAEN,MAAA05C,EAAU3hE,GAAKioB,EAAM,qBAAqB,EAC7Cg7G,EACO1vH,EAAA,kBAAkB,YAAYouD,CAAO,EAE7CpuD,EAAQ,QAAQouD,CAAO,CACzB,CACD,CACH,CAEQ,sBAAsBzd,EAAqBhmB,EAAe,CAC7D,KAAK,KAAK,UACbgmB,EAAO,iBAAiB,oBAAoB,EAAE,QAAS3wC,GAAY,CAC7D,IAAA3G,EAAW2G,EAAQ,cAAc,eAAe,EACpD,GAAG,CAAC2qB,EAAO,CACTtxB,GAAU,OAAO,EACjB,MACF,CAEIA,IACSA,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,UAAU,IAAI,cAAc,EAC5BA,EAAA,OAAO,SAAS,eAAe,EAAE,EAAG5M,GAAK,eAAgB,oBAAqB,WAAW,CAAC,GAG5F4M,EAAA,WAAW,YAAc60B,GAAuBvD,CAAK,EAE1DtxB,EAAS,eACX2G,EAAQ,QAAQ3G,CAAQ,CAC1B,CACD,CACH,CAEQ,kBAAkBwW,EAA6B8gC,EAAqBx3C,EAAc6G,EAAuB2wC,EAAQ,CACvHx3C,MAASw3C,EAAe,cAEnB,cAAS,QAAQ3wC,EAAS6P,IAAS,UAAY,KAAK,yBAA2B,KAAK,+BAA+B,GACvHA,IAAS,UAAY,KAAK,SAAW,KAAK,iBAAiB,IAAI7P,EAAS7G,CAAG,CAC9E,CAmBA,MAAc,cACZrE,EACAuzB,EAAU,GACVsoB,EACAxjD,EACA,CAWM,MAAAwhF,EAAY75E,EAAQ,IAAM,UAC1BqvH,EAAYx1C,GAAa75E,EAAQ,WACvC,IAAI66H,EAAuBC,EAC3B,MAAMC,EAAkB1L,EAAYn4H,GAAgB,uBAAuBm4H,CAAS,EAAI,OAElF2L,EAA4B,KAAK,KAAK,OAAStnD,GAAS,OAE9D,GAAG27C,GAAa2L,EAA2B,CACzCH,EAAcE,EAAgB,IAAK/6H,IAAYA,GAAQ,GAAG,EACpD,MAAAuvH,GAAc3K,GAAsBmW,CAAe,EACtD,GAAA/6H,EAAQ,MAAQuvH,GAAY,IAC7B,MAEJ,CAEA,MAAM0L,EAAeJ,EAAc,KAAK,IAAI,GAAGA,CAAW,EAAI76H,EAAQ,IACrE67C,EAAe,aAAeo/E,EAE5BphD,IACkBihD,EAAAzL,EAAYzK,GAAsBmW,CAAe,EAAI/6H,GAI1E,MAAMk7H,EAAM,KAAK,KAAK,aAAal7H,CAAO,EAEpCu6E,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,UAAW,oBAAoB,EAElD,MAAA4gD,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,wBAAwB,EAE/C,MAAA7gD,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gBAAgB,EAEvCz+B,EAAA,UAAU,IAAI,QAAQ,EAC7Bs/E,EAAe,OAAO7gD,CAAe,EACrCz+B,EAAO,OAAOs/E,CAAc,EAGxB,IAAAC,EAAa,CAACF,GAChB,CAACl7H,EAAQ,OAAO,KAChBA,EAAQ,OAAO,OAEX,MAAAq7H,EAAgBvxC,GAAgB9pF,CAAO,EACvCmwH,EAAkBrL,GAAmB9kH,CAAO,EAElD,GAAG,CAACo7H,GAAc,KAAK,KAAK,OAAO,YAAa,CACxC,MAAAhD,GAAY,MAAM,KAAK,SAAS,mBAAmB,qBAAqB,KAAK,KAAK,OAAQ,KAAK,KAAK,QAAQ,EAC/GA,KAAc,QAAaA,GAAY6C,IAC3BG,EAAA,GAEjB,CAEA,MAAMxiI,EAA+B,GAC/BoN,EAAM,CACV,OAAA61C,EACA,SAAUjjD,EACV,QAAAoH,EACA,QAAAuzB,CAAA,EAGIr7B,EAAoC,CACxC,cAAe,KAAK,cACpB,WAAAG,EACA,gBAAiB,KAAK,KAAK,aAAa,gBACxC,eAAgB,KAAK,KAAK,gBAGtBijI,EAAiBzhD,GAAc75E,EAAQ,OAA0C,QAAQ,YACzFu7H,EAAmB,CAAC,CAACD,EACvB,IAAAE,EACJ,GAAGD,GAAqB,CAAC1hD,IAAc,CAAC75E,EAAQ,QAAU,CAAC20E,GAAmB,IAAI30E,EAAQ,OAAO,CAAC,GAAK,CACrG,MAAMC,GAAUD,EAAmC,OACnD,GAAGC,GAAQ,CACT,MAAMoL,GAAIpL,GAAO,EAEXw7H,GAAe5R,GAAe,IAAIx+G,EAAC,EAKzC,GAJGowH,KAAiBA,KAAiB,IAAQA,GAAaz7H,CAAiC,IAIxFqN,GAAS,eAAehC,EAAC,GAAK,CAACgC,GAAShC,EAAC,EAC1C,MAEJ,CAEAwwC,EAAO,UAAY,iBAEnBy+B,EAAgB,gBAAgB,EAC1B,MAAAr+E,GAAI,SAAS,cAAc,KAAK,EAEtC,GADEA,GAAA,UAAU,IAAI,aAAa,EAC1BgE,GAAQ,CACH,MAAAmN,GAAanN,GAAO,IAAM,wBAC5B,IAAAoC,GACJ,GAAGpC,GAAO,IAAM,0BAA4BA,GAAO,IAAM,0BAA2B,CAC5E,MAAArB,EAAU07E,EAAgB,UAAU,EAAK,EACvC17E,EAAA,UAAU,IAAI,oBAAoB,EACpC,MAAA88H,GAAUz/H,GAAE,UAAU,EAAK,EAGjCA,GAAE,OAAO,MAAM0L,GAAyB,CAAC,QAAA3H,EAAS,WAAA3H,CAAW,EAAC,EAExD,MAAAsjI,GAAS37H,EAAQ,SAAWrJ,EAAU,KACtCilI,GAAU37H,GAAO,IAAM,0BAEzB,IAAAqvB,GACDssG,GACUtsG,GAAAr0B,EACT,2BACA,CAAC,CAACgF,GAAO,MAAO,MAAMoJ,GAAc,CAAC,OAAQtM,GAAUkD,GAAO,UAAU,EAAE,CAAC,GAG7EqvB,GAAWr0B,EAAK0gI,GAAS,0BAA4B,6BAA8B,CAAC,MAAMtyH,GAAc,CAAC,OAAQrJ,EAAQ,MAAO,EAAC,CAAC,EAG9H,MAAAhJ,GAAQiE,EAAK2gI,GAAU,0BAA4B,uBAAwB,CAAC37H,GAAO,KAAK,CAAC,EACzFjJ,GAAA,UAAU,IAAI,WAAW,EAC/B,KAAK,SAAS,CACZ,QAAA4H,EACA,QAAA88H,GACA,WAAArjI,EACA,aAAAO,EACA,UAAW,QACX,MAAA5B,GACA,SAAAs4B,GACA,WAAY,wBACZ,eAAgB,SAAW,CACzBs/E,GAAa,OAAO,CAClB,QAAA5uG,EACA,cAAe,GACf,YAAa,CACX,EAAG,mBACH,KAAMA,EAAQ,KACd,GAAIC,GAAO,iBAAmB07H,GAAS,GAAK,KAC5C,KAAM,CACJ,EAAG,uBACH,KAAMC,GAAU37H,GAAO,WAAa,CAClC,EAAG,WACH,QAAS07H,GAAS37H,EAAQ,OAASrJ,EAAU,IAC/C,CACF,EACA,OAAQ,CACN,KAAMilI,GAAU,OAAY,EAC9B,EACA,MAAO37H,GAAO,MACd,iBAAkB27H,GAAU37H,GAAO,gBAAkB,MACvD,EACD,CACH,EACD,EAEDrB,EAAQ,OAAO88H,EAAO,EACtBphD,EAAgB,MAAM17E,CAAO,CACrB,SAAAwO,IAAc,CAACjD,GAA4BlK,EAAM,EAAG,CACtD,MAAA47H,EAAc57H,GAAO,OAAO,UAC5BqpG,GAAarpG,GAAO,OAAO,aAC3BjJ,GAAQiE,EAAK4gI,EAAc,yBAA2B,yBAAyB,EAC/EvsG,GAAW,SAAS,cAAc,MAAM,EACrCA,GAAA,OACPr0B,EACE4gI,EAAc,gCAAmCvyB,GAAa,4BAA+BrpG,GAAO,WAAa,2BAA6B,6BAC9IA,GAAO,WAAa,CAAC,MAAMoJ,GAAc,CAAC,OAAQtM,GAAUkD,GAAO,UAAU,EAAE,CAAC,EAAI,MACtF,EACA,SAAS,cAAc,IAAI,EAC3B,SAAS,cAAc,IAAI,EAC3BhF,EACE4gI,EAAc,iCAAoCvyB,GAAa,gCAAkC,+BACjG,CAACO,GAAqB5pG,GAAO,OAAQ,EAAI,CAAC,CAC5C,GAGI,MAAAwoC,GAAYs3E,GAAiB9/G,GAAO,MAAM,EAEhD,KAAK,SAAS,CACZ,QAASq6E,EACT,QAASr+E,GACT,WAAA5D,EACA,aAAAO,EACA,UAAA6vC,GACA,MAAAzxC,GACA,SAAAs4B,GACA,WAAY,8BACZ,eAAgB,IAAM,CACP9I,GAAA,YAAY0hF,GAAejoG,GAAO,IAAI,CACrD,EACD,UACOA,GAAO,IAAM,kCAAmC,CAClD,MAAAyO,EAAY,IAAIjB,GACZpL,GAAAqM,EAAU,OAAO,CAAC,OAAQzO,GAAO,QAAQ,SAAS,EAAI,EAAG,YAAA/H,CAAY,GAC/E+D,GAAE,OAAOhB,EAAK,qBAAsB,CAACyT,EAAU,OAAO,CAAC,CAAC,UAChDzO,GAAO,IAAM,6BAA8B,CAC7C,MAAAyO,EAAY,IAAIjB,GACZpL,GAAAqM,EAAU,OAAO,CAAC,OAAQzO,GAAO,WAAW,SAAS,EAAI,EAAG,YAAA/H,CAAY,GAClF+D,GAAE,OAAOhB,EAAK,mBAAoB,CAACyT,EAAU,OAAO,CAAC,CAAC,OAEtDrM,GAAUsF,GAAyB,CACjC,QAAA3H,EACA,GAAG9H,CAAA,CACJ,EAAE,KAAMsQ,GAAOvM,GAAE,OAAOuM,CAAE,CAAC,EAG9B,GAAGvI,GAAO,IAAM,4BAA+BmN,IAAcjD,GAA4BlK,EAAM,EAAI,CAC3F,MAAArB,EAAU07E,EAAgB,UAAU,EAAK,EACvC17E,EAAA,UAAU,IAAI,oBAAoB,EACpC,MAAA88H,GAAUz/H,GAAE,UAAU,EAAK,EAE3B6tG,GAAS7pG,GAAO,OAChBwoC,GAAYs3E,GAAiBjW,EAAM,EAEnC9yG,GAAQiE,EAAK,wBAAwB,EACrCq0B,GAAWr0B,EAAK,4BAA6B,CAAC4uG,GAAqBC,GAAQ,EAAK,CAAC,CAAC,EAExF,KAAK,SAAS,CACZ,QAAAlrG,EACA,QAAA88H,GACA,WAAArjI,EACA,aAAAO,EACA,UAAA6vC,GACA,MAAAzxC,GACA,SAAAs4B,GACA,WAAYliB,IAAcpN,EAAQ,SAAWA,EAAQ,OAAS,wBAA0B,wBACxF,eAAgB,IAAM,CACpB,GAAGoN,GAAY,CACb,MAAMy4B,GAA0C,CAC9C,EAAG07C,GAAmB,UACtB,KAAMthF,GAAO,KACb,MAAO,KAAK,KAAK,aAAa,oBAAoB47C,CAAM,GAG1DgkE,GAAsB,oBAAoBh6E,EAAI,EAC9C,MACF,CAEAqH,GAAa,KAAK,CAChB,KAAMjtC,GACN,OAAQ,KAAK,OACb,MAAO,CAAC,CAACD,EAAQ,OAAO,IACzB,CACH,EACD,EAEDpB,EAAQ,OAAO88H,EAAO,EACtBphD,EAAgB,MAAM17E,CAAO,UACrBqB,GAAO,IAAM,6BAA8B,CAC5C47C,EAAA,UAAU,IAAI,qBAAqB,EAEpC,MAAAlsC,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EAEzC,IAAIlJ,GAAU,GACd,MAAM4pB,GAAS,CAAC+4B,GAAQ,CAAC3iD,GAAS2/C,KAA0B,CAC1D,GAAGgD,KAAU3iD,GACX,OAGQA,GAAA2iD,GAEPA,IAAS,CAACz5C,EAAE,eACb2qE,EAAgB,MAAM3qE,CAAC,EAGrBuD,GAAS,YAAY,YAAY,IACrBkzC,GAAA,IAGZ,IAAA+lE,GACDtwE,EAAO,cACMswE,GAAA,KAAK,kBAAkB,EAAI,EACzCA,GAAY,KAAK,GAGb,MAAA11H,GAAoC,CAAC,SAAU2vD,GAAc,EAAI,IAAK,KAAM,WAAY,OAAQ,+BAChG3N,GAAwB,CAAC,CAAC,OAAQ,KAAiD,CAAC,OAAQ,WAAsD,EACpJ2Q,IAAO3Q,GAAU,QAAQ,EAC7B,MAAM5P,GAAYl5B,EAAE,QAAQ8oC,GAAWhiD,EAAO,EAC3C01H,IAAkB,gCAA2BtjF,GAAU,SAAUsjF,EAAW,EAC3E/iE,IAAiBvgB,GAAA,SAAS,KAAK,IAAM,CACpCpiC,KAAY2iD,IACbz5C,EAAE,OAAO,CACX,CACD,EAEDmsH,GAAa,CAAC1yE,EAAK,GAGfjmD,GAAWC,KAEX04H,GAAe,MAAMC,IAAoB,CACvC,MAAAz5H,GAAQ,MAAMpL,GAAgB,WACjC6kI,GAAcz5H,GAAA,sBAAsB,KAAK5L,EAAM,EAC5BiV,GAAArJ,GAAM,sBAAuB5L,EAAM,EACzD,MAAM,KAAK,SAAS,gBAAgB,YAAY,wBAAyB4L,GAAM,qBAAqB,GAGhG5L,GAAS,KAAK,KAAK,OACrB,IAAAwkB,GACC,mBACH,IAAMyoG,GAAgB,CACpB,OAAQjtH,GAAO,SAAS,EACxB,QAAS,IAAM,CACb25B,GAAO,EAAK,CACd,EACA,QAAU2rG,IAAY,CACX9gH,GAAA8gH,GACL9gH,IACF/X,GAAS,QAAQ,CAErB,EACA,QAAS,SAAW,CACFm3E,EAAA,UAAU,IAAI,cAAc,EAC5C,MAAM/7C,GAAyB,GAEjB,MAAMrnC,GAAgB,YAC1B,sBAAsB,SAASR,EAAM,GAC7C25B,GAAO,GAAMnV,EAAM,EAGlBA,IACD/X,GAAS,QAAQ,EAGnBoQ,EAAiB+mE,EAAiB,IAAM,CAC/BjqD,IAAA,CACR,CACH,EACA,QAAS,IAAM,CACVltB,GAAS,aACVktB,GAAO,EAAK,EAGdltB,GAAS,QAAQ,CACnB,EACD,EACDwM,EACAtX,CAAA,EAGFO,EAAa,KAAKuK,EAAQ,CAC5B,CAEAvK,EAAa,KAAKyJ,EAAO,UACjBi5H,EAAgB,CACxB,MAAM5yE,GAAe1oD,EAAQ,MACvBmJ,GAAcpM,GAAU2rD,GAAa,IAAI,EACzC7tC,EAAU6tC,GAAa,GACvBt/C,GAAYD,KAAgBxS,EAAU,KAEtC8B,GAAS,MAAM2J,GAAmB,KAAK,SAAS,aAAa,kBAAkB,aAAa+G,GAAa0R,CAAO,CAAC,EACpH,IAACpiB,GAAO,OACPwD,GAAA,OAAOhB,EAAK,SAAS,CAAC,EACvBxC,GAAO,OAAwB,KAAK,IAAM,CACzC,KAAK,kBAAkB,CACrB,QAAAuH,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,EACF,UACQpjD,GAAO,OAMX,CACHwD,GAAA,UAAU,IAAI,8BAA8B,EAExC,MAAAuyC,GAAkB,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,uCAAuC,EAErE,MAAMp0B,GAASkM,GAAU,CACvB,WAAAjuB,EACA,KAAM,IACN,OAAQ8Q,GACR,cAAe,KAAK,cACpB,YAAa,GACb,QAAA0R,EACA,YAAa,CACX,KAAM,yBACR,EACD,EACMT,GAAA,KAAK,QAAQ,QAAU,GAAKS,EACtBjiB,EAAA,KAAKwhB,GAAO,iBAAiB,EAE1C,MAAMjX,GAAWC,KACjBxK,EAAa,KAAKuK,EAAQ,EACdof,GAAA9pB,GAAO,OAASg+E,IAAc,CACxC,GAAG,CAACp+E,EAAW,GAAK,CAACo+E,IAAaA,GAAU,OAAO,WAAY,CAC7DtzE,GAAS,QAAQ,EACjB,MACF,CAEAM,GAAY2B,IAAY,CACtB/M,EAAW,QAAQ,IAAM,CACvB8K,GAAS,QAAQ,EACTiC,IAAA,CACT,EAED,KAAM,CAAC,UAAA5M,GAAW,MAAAknB,EAAK,EAAI43E,GAAe,CACxC,OAAQnuF,GACR,UAAAstE,GACA,WAAY,GACZ,OAAQ,GACR,cAAe,KAAK,cACpB,cAAe,GACf,WAAY,GACb,EAED7yE,GAAa,IAAM,CACd8b,OACDvc,GAAS,QAAQ,EAChB3K,GAA0B,UAAU,IAAI,8BAA8B,EACtD+a,EAAAi7B,GAAkBvrC,IAAM,CACvCqQ,GAAYrQ,EAAC,EACeygG,GAAA,CAAC,OAAQv6F,GAAa,GAAI0R,EAAS,OAAQ,IAAMriB,GAAyB,CACrG,GAAC,eAAgB,KAAK,cAAe,GACxCg2C,GAAgB,OAAOh2C,EAAwB,EACjD,CACD,EACF,EACF,EAEeg2C,GAAA,OAAOp0B,GAAO,IAAI,EAElC,MAAM7c,GAAOtC,EACXmO,GAAY,kBAAoB,eAChC,CAAC,MAAMC,GAAc,CAAC,OAAQD,GAAYpJ,EAAQ,OAASmJ,EAAW,CAAC,CAAC,GAErE5L,GAAA,UAAU,IAAI,2BAA2B,EAExC,MAAAspB,GAASqJ,GAAO,oDAAqD,CAAC,SAAU,GAAM,KAAM,mBAAmB,EACrH3c,EAAiBsT,GAAQ,IAAM,CAC7BmmB,GAAmB5yB,GAAO,IAAI,CAE7B,GAAC,eAAgB,KAAK,cAAe,GAEtCne,GAAA,OAAOuyC,GAAiBjxC,GAAMspB,EAAM,CACxC,KA/E0B,CACpB,IAAA5S,GACD7K,GAAkB6K,GAAAhZ,EAAK,yBAA0B,CAAC,MAAMoO,GAAc,CAAC,OAAQrJ,EAAQ,OAAO,CAAC,CAAC,EAC9FiU,GAAOhZ,EAAK,qBAAqB,EAChC2kB,SAAOjoB,GAAK,OAAQ,oBAAoB,EAC5CsE,GAAA,OAAO2jB,GAAM3L,EAAI,EA2EvB,CACAqmE,EAAgB,OAAOr+E,EAAC,EAEpB+D,EAAmC,OAAO,WACrC67C,EAAA,UAAU,IAAI,eAAe,EAGtB2/E,EAAA,EAClB,CAEM,MAAAS,EAAoBb,GAAc,KAAK,SAAW,KAAK,kBAAkB,KAAK,KAAM,UAAWv/E,EAAQo/E,CAAY,EAAI,OAEvHlvH,EAAc,KAAK,KAAK,YAC9B,GAAGyvH,EACmB,OAAAS,MACbj2H,EAGL+F,GACkBkwH,MAGnB,KAAK,WAAaZ,GAAiBlL,IACpC,KAAK,kBAAkB,UAAWt0E,EAAQi/E,EAAiB,GAAG,EAG1D,MAAA3G,EAAen0H,EAA4B,OAAO,UAClD2qH,EAAoB3qH,EAA4B,iBAChDk8H,EAAyDriD,GAAa75E,EAAQ,UAEhF,IAAA0oD,EAA6BmxB,GAAa75E,EAAQ,MAClDm8H,EAAgB,GAChBC,EAAwBt6H,EAAgCu6H,EAAqCC,EACjG,GAAGziD,EAAW,CACZ,GAAGw1C,GAAa2L,EAA2B,CACnC,MAAAlhI,GAAIwiI,EAAqBvyC,GAAegxC,CAAe,EAC7DqB,EAAiBtiI,IAAG,SAAW,GAEfgI,EAAAhI,IAAG,eAAiB,GACfuiI,EAAAC,CAAA,MAErBF,EAAiBp8H,EAAQ,QAEzB8B,EAAgB9B,EAAQ,cACHq8H,EAAAr8H,EAGvB,MAAMiJ,GAAYy/C,GAAoD,SACnEz/C,KACEA,IAAU,OAAS,UACpBmzH,EAAiBt6H,EAAgB,OACxB,CAAC,QAAS,KAAK,EAAE,SAASmH,GAAS,IAAI,IAChCkzH,EAAA,IAEpB,MAEGn8H,EAAQ,OAAO,IAAM,2BACP0oD,EAAA,CACb,EAAG,mBACH,OAAQ1oD,EAAQ,SAKtB,IAAIu8H,EAAY,EAAG78H,EACnB,GAAGoC,GAAiB,CAAC4mD,GAAgB,CAACwzE,EAAW,CAC/C,MAAMM,GAA+F,GAC7F,QAAApiI,GAAI,EAAGlE,EAAS4L,EAAc,OAAQ1H,GAAIlE,EAAQ,EAAEkE,GAAG,CACvD,MAAAqD,GAASqE,EAAc1H,EAAC,EAC3BqD,GAAO,IAAM,4BACZ,EAAArD,GACFoiI,GAAc,KAAK/+H,EAAM,GACjBA,GAAO,IAAM,sBACrB++H,GAAc,KAAK/+H,EAAM,CAE7B,CAEA,MAAMg/H,GAAYL,EAAe,QAAQ,MAAO,EAAE,EAAE,OAGpD,GAFuBI,GAAc,OAAO,CAAChrH,GAAKkrH,IAASlrH,GAAMkrH,EAAK,OAAQ,CAAC,IAEzDD,GAAqG,CACzHF,EAAY,KAAK,IAAIjS,GAAwBkS,GAAc,MAAM,EAEjE98H,EAAkBtH,GAAW,OAAO,YAE9B,MAAAP,GAAOwyH,GAAgBkS,CAAS,EACnC1kI,KACiB6H,EAAAqW,GAAcle,GAAMA,EAAI,EAC1CgkD,EAAO,MAAM,YAAY,eAAgBhkD,GAAO,IAAI,EAExD,CACF,CAEoB6H,MAAA,KAAK,KAAK,aAAa,iBAEvC,IAAA4wH,EAAoB59B,GAA4B4pC,GAAsBt8H,CAA0B,EACjGs8H,GAAsBH,IAChBtgF,EAAA,QAAQ,QAAU,GAAKygF,EAAmB,KAGnD,IAAI/vH,EAAUvM,EAAQ,SACnB,GAAAuM,GAAS,IAAM,qBAAsB,CACtC,MAAMyuE,GAAgBzuE,EAAQ,iBAAmBxP,GAAUwP,EAAQ,gBAAgB,EAAI,KAAK,OAI5F,GAHOsvC,EAAA,QAAQ,cAAgB,GAAKm/B,GAC7Bn/B,EAAA,QAAQ,WAAa,GAAK77C,EAAQ,aAEtCswH,IAAsB,OAAW,CAClC,MAAMr1C,GAAkB/jF,GAAgB,iBAAiB8jF,GAAeh7E,EAAQ,YAAY,EACzFi7E,GACDq1C,EAAoB59B,GAA4BzX,EAAkC,EAI9Dq1C,EAAA,GAExB,OACQ/jH,IACRsvC,EAAO,QAAQ,cAAgB,GAAK9+C,GAAUwP,EAAQ,IAAI,EACnDsvC,EAAA,QAAQ,eAAiB,GAAKtvC,EAAQ,UAGzC,MAAAowH,EAAsBn/H,KAAoE,CAC9F,SAAAA,GACA,aAAc,KAAK,aACnB,aAAA5E,EACA,cAAe,KAAK,cACpB,gBAAA8G,EACA,WAAArH,EACA,eAAgB,KAAK,KAAK,eAC1B,kBAAAi4H,EACA,UAAW,qBACX,gBAAiB,CAAC,CAAEtwH,EAA4B,mBAG5C48H,EAAe,CAACL,GAAa,CAACrB,GAAO,KAAK,KAAK,OAASxnD,GAAS,OACjEqf,EAAgE6pC,EAAe,CACnF,OAAQ58H,EAAQ,OAChB,WAAA3H,EACA,eAAgBwjD,EAChB,SAAU,KAAK,SACf,cAAe,KAAK,aACpB,gBAAiB8gF,EAAmB,CAClC,SAEEE,EAAWT,EACdQ,EAECl1H,GAAoB,CAClB,QAAS20H,EACT,GAAGtpC,CAAA,CACJ,EAJDnzF,GAAaw8H,EAAgBO,EAAmB76H,CAAa,CAAC,EAK5D,OAEN,IAAIg7H,GAAiB,CAACV,GAAkB,CAACjI,GAAe,CAAC+H,EACrDa,GAA0B,GAE1BvW,GAAc,GACdwW,GAAwB,GACxBpiD,GAAoB,GACpBsU,EACJ,GAAGqtC,EAAW,CACT,GAAA5lI,EAAU,SAAS,MAAM,IAAK,CAC/B,MAAMozE,GAAUwyD,IAAc,GAC5B,CAACz6H,EAAc,KAAMrE,IAAWA,GAAO,IAAM,0BAA0B,GACvE,MAAM,KAAK,SAAS,mBAAmB,wBAAwB2+H,CAAc,EAC5EG,IAAc,GAAK,CAAC7zE,GAAgBqhB,GACtBrhB,EAAA,CACb,EAAG,uBACH,SAAUqhB,GACV,OAAQ,CAAC,IAGKmlB,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,aAAc,oBAAoB,EAE9D9jF,GAAa8jF,EAAe2tC,CAAQ,EAEpCviD,EAAgB,OAAO4U,CAAa,GAGrB4tC,GAAA,GACVjhF,EAAA,UAAU,IAAI,WAAW,EACZ++B,GAAA,GACN4rC,GAAA,GACE2V,EAAA,EAClB,CAEOtgF,EAAA,UAAU,IAAI,oBAAoB,CAC3C,CAEGsgF,GACD/wH,GAAamvE,EAAYsiD,CAAQ,EAGnC,MAAMtmH,GAAQ,KAAK,KAAK,aAAavW,CAAO,EACtCi9H,GAAc3pC,GAAM8oC,CAAoB,EAE9C,IAAIhiD,GAAuB8iD,GAC3B,GAAI/I,EAwBKt4E,EAAA,UAAU,IAAI,cAAc,MAxBpB,CACJu+B,GAAAv+B,EAAO,SAAW89B,GAAc,QAAQ,CACjD,KAAM,KAAK,KACX,SAAU,KAAK,KAAK,KACpB,QAAA35E,EACA,iBAAA86H,EACA,MAAAvkH,GACA,WAAAle,EACA,aAAAO,CAAA,CACD,EAEGskI,OACajS,GAAApvE,EAAQ0+B,EAAY,IAAM,CACzCA,EAAW,OAAOH,GAAU8iD,QAAc1T,GAAU,IACrD,GAEEryH,GAAK,MAAQ,CAACq8F,GAAY4oC,CAAc,EAAIa,KACpC7iD,GAAA,UAAU,IAAI,UAAU,EAGhCruE,GACDkwH,IAAoB7hD,EAAQ,CAC9B,CAKFE,EAAgB,QAAQC,CAAU,EAE9B,IAAA4iD,GACD,GAAAtjD,IAAc,KAAK,KAAK,oBAAuB,KAAK,KAAK,cAAgB,MAAQtjE,IAAS,CACrF,MAAA9d,GAAS,MAAMg7F,GAAoB,CACvC,OAAQzzF,EAAQ,OAChB,SAAUsyE,GAAmBtyE,EAAS,KAAK,KAAK,OAAO,EACvD,UAAWA,EAAQ,IACnB,YAAa,CACX,WAAA3H,CACF,EACA,UAAW,GACX,OAAQ,GACR,OAAQ,KAAK,KAAK,OAASq7E,GAAS,OACrC,EAEK,CAAC,QAAAxoE,EAAW,EAAAzS,GAKS0kI,GAAA,SAAS,cAAc,KAAK,EACvDA,GAAyB,UAAU,IAAkB,+BACrDA,GAAyB,OAAOjyH,EAAO,CACzC,CAEG,GAAA2uE,GAAa75E,EAAQ,MAAO,CAG1B,GAFI67C,EAAA,UAAU,IAAI,cAAc,EAEhC,CAAC77C,EAAQ,UAAU,mBAAqB,KAAK,KAAK,OAAS0zE,GAAS,OAAQ,CACvE,MAAA0pD,GAAU,SAAS,cAAc,KAAK,EAC5CA,GAAQ,UAAU,IAAI,uBAAwB,aAAc,SAAS,EAC7DA,GAAA,OAAOzlI,GAAK,gBAAgB,CAAC,EACrC2iF,EAAgB,OAAO8iD,EAAO,EACvBvhF,EAAA,UAAU,IAAI,oBAAoB,CAC3C,CAEG,CAAC77C,EAAQ,OAAO,aAAe,KAAK,UACrC,KAAK,SAAS,QAAQ67C,EAAQ,KAAK,qBAAqB,CAE5D,CAEM,MAAAyrE,GAAcztC,GAAa75E,EAAQ,aACzC,IAAIq9H,GAAkB/V,IAAa,IAAM,qBAAuBA,GAAY,KAK5E,GAJG+V,KACDA,GAAkBA,GAAgB,OAAQrsG,IAAQA,GAAI,QAAQ,MAAM,GAGnEqsG,GAAiB,CACZ,MAAAC,GAAe,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,cAAc,EACnC,MAAAC,OAAuD,IAC7DF,GAAgB,QAAQ,CAACrsG,GAAKh3B,EAAKsG,KAAQ,CACzC,MAAMwnB,GAAUkJ,GAAI,QACdwsG,GAAYxjI,IAAQsG,GAAI,OAAS,EAEjCm9H,GAAS,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,kBAAkB,EAEvC31G,GAAQ,QAAQ,CAACjB,GAAQ7sB,GAAKsG,KAAQ,CACpC,MAAM4yF,GAAUl5F,KAAQ,EAClBwhC,GAASxhC,KAAQsG,GAAI,OAAS,EAC9B,CAAC,KAAA/C,GAAM,SAAAgqH,GAAU,WAAAC,GAAY,QAAAz8F,EAAA,EAAWq8F,GAAmB,CAC/D,OAAAvgG,GACA,KAAM,KAAK,KACX,QAAA7mB,EACA,aAAc,GACf,EAED,GAAG,CAACunH,GACF,OAGCx8F,IACUwyG,GAAA,IAAIhW,GAAUx8F,EAAO,EAG/ByyG,KACEtqC,IACQq0B,GAAA,UAAU,IAAI,UAAU,EAGhC/rF,IACQ+rF,GAAA,UAAU,IAAI,SAAS,GAI3BA,GAAA,UAAU,IAAI,sBAAuB,IAAI,EAC5C,MAAAztH,GAAI,SAAS,cAAc,MAAM,EACrCA,GAAA,UAAU,IAAI,0BAA0B,EAC1CA,GAAE,OAAOyD,EAAI,EAKb4tB,GAAOo8F,EAAQ,EACfA,GAAS,OAAO,GAAG,CAACC,GAAY1tH,EAAA,EAAgB,OAAO,OAAO,CAAC,EAE/D2jI,GAAO,OAAOlW,EAAQ,EACvB,EAEGkW,GAAO,mBAIXH,GAAa,OAAOG,EAAM,EAC3B,EAEK,MAAAC,GAAc,CAAC,CAACJ,GAAa,kBAEpBI,IAAAnqH,EAAiB+pH,GAAer6H,IAAM,CACnD,IAAI+Y,EAAS/Y,GAAE,OACN+Y,EAAAC,EAAgBD,EAAQ,qBAAqB,EAChD,MAAA+O,GAAUwyG,GAAW,IAAIvhH,CAAM,EAClC+O,KACDA,GAAQ9nB,EAAC,EACTqQ,GAAYrQ,EAAC,EACf,CACD,EAEEy6H,KAEM7hF,EAAA,UAAU,IAAI,mBAAmB,EACxCs/E,EAAe,OAAOmC,EAAY,EAEtC,CAEM,MAAA/rE,GAAavxD,EAAQ,OAAO,YAE/BuxD,IAAc,CAACvxD,EAAQ,QACjB67C,EAAA,UAAU,IAAI,aAAa,EAC9B77C,EAA4B,YAC9B67C,EAAO,QAAQ,gBAAkB,MAIrC,MAAM8hF,GAAqB9jD,GAAa,MAAM,KAAK,SAAS,mBAAmB,6BAA6B75E,CAAO,EAC7G49H,GAAc,CAAC,CAACD,IAAsB39H,EAAQ,IAAM,EAEvD49H,IACM/hF,EAAA,UAAU,IAAI,cAAc,EAG/B,MAAAwR,GAAUwsB,GAAa75E,EAAQ,SAC/B6yE,GAAYgH,GAAa75E,EAAQ,UACjC69H,GAAsB,KAAK,KAAK,mBAAmB79H,CAAO,EAEhE,IAAIizF,GAA6B3Y,EAEjC,MAAMwjD,GAAgBjkD,GAAa75E,EAAQ,aAAe,CAAC,KAAK,KAAK,YAC/D+9H,GAAqB,CAAC/9H,EAAQ,WACjCA,EAAQ,SAAWrJ,EAAU,MAAQ,CAACqJ,EAAQ,OAAO,OACrD,CAAC89H,IAAiB,CAACzwE,KACpB,CAACwwE,GAIGG,GAAcnkD,GAAa75E,EAAQ,OAAO,aAC7Cg+H,IACMniF,EAAA,UAAU,IAAI,cAAc,EAGjC,IAAAm3C,GACDkpC,IACDz4H,GAAY2B,IAAY,CACtB/M,EAAW,UAAU+M,EAAO,EAEtB,MAAA64H,GAAa,IAAM9mI,GAAK,cAAc,KAAMuqD,IAAYA,GAAQ,OAASw6E,EAAU,OAAO,EAC1FgC,GAAiB,IAAM,CAC3B,MAAMx8E,GAAUu8E,KACT,OAAAv8E,GAAQ,MAAQA,GAAQ,cAG3B,CAACz/C,EAAkB4E,EAAmB,EAAIrB,GAA+B,EAEzE24H,GAAejC,IAAyB,CAC5Cr1H,GAAoBq1H,GAAU,IAAI,GAGhCA,EAAU,KAQZiC,GAAYjC,CAAS,EAPhB,cAAS,mBAAmB,aAAal8H,EAAQ,OAAQA,EAAQ,GAAG,EACxE,KAAMk8H,IAAc,CACnB,KAAK,aAAa,IAAM,CACtBiC,GAAYjC,EAAS,EACtB,EACF,EAKQjT,GAAA,CACT,OAAQ,CACN,QAAShuH,EAAK,kBAAmB,CAACijI,GAAgB,EAAC,EACnD,KAAM,EACR,EACA,KAAM,CACJ,QAASjjI,EAAK,WAAW,EACzB,IAAK,CACH,QAASA,EAAK,eAAe,EAC7B,QAAUgI,IAAM,CACF+iF,GAAA,CACV,QAAS/iF,GAAE,OACX,UAAW,KAAK,UAChB,SAAU,MACV,YAAahI,EAAK,iBAAkB,CAACijI,GAAgB,EAAC,EACvD,CACH,CACF,CACF,EACA,IAAI,MAAO,CACN,IAACj8H,IACF,OAAOhH,EAAK,SAAS,EAGvB,KAAM,CAAC,KAAAsC,GAAM,SAAAC,EAAA,EAAYwE,GAAqBC,EAAkB,GAChE,OAAOrC,GAAarC,GAAM,CAAC,SAAAC,EAAS,EACtC,EACA,IAAM4gI,IAAQ,CACGA,MACZhkD,GACDA,GAAS,OAAOgkD,EAAG,EAEnB7jD,EAAW,OAAO6jD,EAAG,CAEzB,EACA,WAAY,GACb,EACF,EACW,SAAS,cAAc,KAAK,EACpC,UAAU,IAAI,oBAAqB,aAAc,sBAAsB,GAG7E,MAAMC,GAAgCvB,IAAkBkB,GAEpD,IAAAM,GAAyBC,GAAwB,GAAOC,GAAmB,GAE/E,GAAG91E,EAAc,CAIf,OAHgBwmC,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,YAAY,EAEjCxmC,EAAa,EAAG,CACrB,IAAK,4BACL,IAAK,oBAAqB,CACxB,MAAMr0C,GAAQq0C,EAAa,MAU3B,GARwBs0E,GAAAqB,GAErBN,IACMliF,EAAA,UAAU,IAAI,WAAW,EAG3BA,EAAA,UAAU,IAAI,OAAO,EAEzBm/E,GAA6B3L,GAAawL,EAAY,SAAW,EAAG,CAC9Dh/E,EAAA,UAAU,IAAI,WAAY,YAAY,EACnCozC,GAAA,CACR,SAAU8rC,EACV,cAAA7rC,EACA,WAAY,KAAK,cAAc,EAC/B,MAAOgsC,EACP,cAAe,KAAK,cACpB,KAAM,KAAK,KACX,aAAAtiI,EACA,aAAc,KAAK,KAAK,aACzB,EAED,KACF,CAEA,MAAM0d,GAAW,CAACqoC,IAAc6nE,IAAe,CAACoX,IAAejU,GAC5DrzG,IAAiBulC,EAAA,UAAU,IAAI,iBAAiB,EACnD,MAAM5iD,GAAIod,GAAU,CAClB,MAAAhC,GACA,QAAArU,EACA,UAAWkvF,EACX,SAAA54E,GACA,MAAAC,GACA,cAAe,KAAK,cACpB,WAAY,KAAK,cAAc,EAC/B,aAAA3d,EACA,iBAAkB,KAAK,KAAK,aAAa,MAC1C,EAEG8vD,EAAgD,QAAQ,SAC7C9vD,EAAA,KAAK,KAAK,iBAAiB,CACtC,MAAOyb,GACP,QAASpb,GACT,WAAAZ,EACA,cAAA62F,CACD,EAAC,EAGJ,KACF,CAEA,IAAK,sBAAuB,CACFqvC,GAAA,GACRrvC,EAAA,OAEhB,MAAM1F,GAAmB9gC,EAAa,QACnC,GAAA8gC,GAAQ,IAAM,UACf,MAGiBg1C,GAAA,GACb,MAAAC,GAAiBj1C,GAAQ,YAAY,KAAM3wF,IAAcA,GAAU,IAAM,uBAAuB,EAChGsQ,GAAcs1H,IAAkB1hI,GAAU0hI,GAAe,IAAI,EAC7D5jH,GAAU4jH,IAAgB,GAEhC,GAAGA,IACsB,MAAM,KAAK,uBAAuBt1H,GAAa0R,GAAS,EAAI,IAC7D,KAIpB,MAIJ,MAAMtU,EAA0C,GAC1Cm4H,GAAgD,GAEhD5+H,GAAUM,GAAQopF,GAAQ,GAAG,EAEnC,GADoB1pF,GAAQ,SAAW,CAAC81F,GAAyB,IAAI91F,GAAQ,OAAO,GAAMq0H,EAMxF,GAJQuK,GAAA,KAAMN,IAAQ,CAChBA,GAAA,aAAa,OAAQ,GAAG,EAC7B,EAEEjK,EAAa,CACH55C,EAAA,UAAU,IAAI,eAAe,EAClCz6E,SAAUM,GAAQuqH,EAAiB,GAAG,EAE5CpkH,EAAM,OAAS,CACb,QAASlP,GAAcszH,EAAiB,WAAW,EACnD,KAAM,CAAC7qH,GAAQ,QACf,IAAMopH,IAAe,KAAK,SAAS,QAAQA,GAAY,KAAK,qBAAqB,GAG3EwV,GAAA,KAAMN,IAAQ,CAMnBA,GAAY,SAAW,IAAM,CACvB,UAAK,aAAa,oBAAoBp+H,CAA0B,EACvE,CACD,MACI,CACL,MAAMwJ,GAAc+gH,GAAa/gC,GAAQ,IAAI,GAAK,cAElDjjF,EAAM,OAAS,CACb,QAAStL,EAAKuO,EAAW,GAGnBk1H,GAAA,KAAMN,IAAQ,CAChBA,GAAA,QAAQ,SAAWt+H,GAAQ,QAChC,CACH,KACK,CACC,MAAA6+H,GAAW,CAACj2E,EAAa,OAAO,KAC9Bg2E,GAAA,KAAMN,IAAQ,CACpB75F,GAAiB65F,EAAG,EAEjBO,KACDP,GAAI,QAAQ,SAAW,kBACzB,CACD,CACH,CAEGt+H,IAAS,KAAO,CAACq0H,GACVuK,GAAA,KAAMN,IAAQ,CACpBA,GAAI,KAAOt+H,GAAQ,IACpB,EAGI+7C,EAAA,UAAU,IAAI,cAAe,cAAc,EAElD,MAAM+iF,GAAiBjU,GAAkB,MAErC,IAAAkU,GACJ,MAAMlmI,GAAM6wF,GAAQ,SACds1C,GAAgB,CAAC,CAACt1C,GAAQ,OAAO,gBACjCu1C,GAAgB,CAAC,EAAED,IAAiBp2E,EAAa,OAAO,mBACxDs2E,GAAiBrU,GAAoBD,GAAkBC,CAAgB,EACvEt2G,GAAS2qH,IAAkBx1C,GAAQ,MAGnCy1C,GAAyB,CAAC,CAACD,GACX,CAAC,EAAE3qH,IAAS1b,IAAO8lI,IAAkBQ,MAE/CJ,GAAA,SAAS,cAAc,KAAK,EACtCt4H,EAAM,MAAQ,CACZ,QAASs4H,GACT,SAAU,QAIR,MAAAp/H,GAAgBm/H,GAAiB,OAAY,KAAK,cAExD,GAAGjmI,GACE,GAAAA,GAAI,OAAS,OAASA,GAAI,OAAS,SAAWA,GAAI,OAAS,QAAS,CAC/D,MAAAo4G,GAAYp4G,GAAI,OAAS,QAAUP,GAAW,OAAO,MAAQA,GAAW,OAAO,QAClFO,GAAI,OAAS,SACPkjD,EAAA,UAAU,IAAI,OAAO,EACpBgjF,GAAA,UAAU,IAAI,UAAU,GAEzBhjF,EAAA,UAAU,IAAI,OAAO,EAGpBkb,GAAA,CACR,IAAAp+D,GACA,UAAWkmI,GACX,QAAA7+H,EACA,SAAU+wG,GAAU,MACpB,UAAWA,GAAU,OACrB,cAAAtxG,GACA,WAAY,KAAK,cAAc,EAC/B,MAAA8W,GACA,MAAO,KAAK,KAAK,eACjB,aAAA3d,EACA,aAAc,KAAK,KAAK,aACxB,OAAQoH,EAAQ,IAAM,GAAK,CAAC4+H,GAC5B,SAAU,KAAK,SACf,kBAAmB/iF,CAAA,CACpB,MACI,CACC,MAAAm1C,GAAS,MAAMT,GAAa,CAChC,QAAAvwF,EACA,iBAAkB,KAAK,KAAK,aAAa,KACzC,cAAAP,GACA,aAAA7G,EACA,SAAU,eACV,cAAe,CACb,UAAW,GACX,OAAQ,KAAK,OACb,YAAa,CACX,EAAG,0BACL,CACF,EACA,SAAUjC,EAAU,SAAS,iBAC7B,mBAAoB,GACrB,EACDkoI,GAAQ,OAAO7tC,EAAM,EACrBzqF,EAAM,MAAM,YAAc,EAC5B,CAGC,GAAAijF,GAAQ,WAAamhC,EAAkB,CACpC,IAAAuU,GAUJ,GATGvU,GACDuU,GAAOjkI,EAAK0vH,EAAiB,OAAO,YAAc,8BAAgC,kBAAkB,EAC/FuU,GAAA,UAAU,IAAI,iBAAiB,GAC5B1U,GAAsBhhC,GAAQ,IAAI,EAC1C01C,GAAOjkI,EAAKuvH,GAAsBhhC,GAAQ,IAAI,CAAC,EAExC01C,GAAA7nI,GAAcmyF,GAAQ,SAAS,EAGrC,CAACmhC,EAAkB,CACd,MAAA/pH,GAAOhB,GAAa4pF,GAAQ,GAAG,EAC/BpqF,GAAIuB,GAAuBC,EAAI,EAAE,kBACvCxB,GAAE,gBAAgB8/H,EAAI,EACfA,GAAA9/H,EACT,CAEAmH,EAAM,KAAO,CACX,QAAS24H,GACT,IAAKvU,GAAoBA,EAAiB,OAAO,YAAc,CAC7D,QAAS1vH,EAAK,8BAA8B,EAC5C,QAAUgI,IAAM,CACdqQ,GAAYrQ,EAAC,EACbujB,GAAa,YAAYu+F,EAAY,CACvC,CACF,EAEJ,CAEM,MAAA/tH,GAAQ4yF,GAAiBJ,EAAO,GACnCxyF,GAAM,aAAe2zH,KACtBpkH,EAAM,MAAQokH,EAAmBtzH,GAAcszH,EAAiB,KAAK,EAAI3zH,IAG3E,MAAM4wB,GAAc2hE,GAAuBC,GAASmzC,EAAmBnzC,GAAQ,QAAQ,EAAG2qC,CAAW,EAClGvsG,GAAY,cACbrhB,EAAM,KAAOqhB,IAGf,IAAIu3G,GAAW,GACZ,GAAAF,IAA2B5qH,IAAS,CAAC1b,GAAM,CACrCkjD,EAAA,UAAU,IAAI,OAAO,EAE5B,MAAMujF,GAAgB,GAChBvnI,IAA6B,CAAC8yH,GAAoBiU,KAAmBvqH,GAAM,MAAMA,GAAM,MAAM,OAAS,CAAC,GACzG,CAACxc,IAASA,GAAK,IAAMA,GAAK,GAAK,CAACinI,IAAkBC,MAAmBx4H,EAAM,MAAQA,EAAM,OAASA,EAAM,OACnGs1C,EAAA,UAAU,IAAI,iBAAiB,EACtCt1C,EAAM,MAAM,UAAY,SACb44H,GAAA,GACXN,GAAQ,MAAM,MAAQA,GAAQ,MAAM,OAAS,GAAGO,EAAa,MAQrDvnI,GAAK,EAAIA,GAAK,GAAK,CAACinI,KACrBjjF,EAAA,UAAU,IAAI,mBAAmB,EACxCt1C,EAAM,MAAM,UAAY,YAiBN8P,GAAA,CAClB,MAAAhC,GACA,QAAArU,EACA,UAAW6+H,GACX,SAAUM,GAAW,EAAI/mI,GAAW,OAAO,QAAQ,MACnD,UAAW+mI,GAAW,EAAI/mI,GAAW,OAAO,QAAQ,OACpD,MAAAme,GACA,cAAA9W,GACA,WAAApH,EACA,aAAAO,EACA,iBAAkBumI,GAClB,iBAAkB,KAAK,KAAK,aAAa,MAC1C,CACH,CAEA,GAAGV,GAAgB,CACV5iF,EAAA,UAAU,IAAI,QAAS,OAAO,EAC/B,MAAAhkD,GAAOO,GAAW,OAAO,QAGbgd,GAAA,CAChB,MAAO,CACL,EAAG,QACH,GAAI,EACJ,MAAO,CAAC,CACN,EAAG,YACH,EAAG,IACH,EAAG,IACH,KAAM,IACN,KAAM,EACP,EACD,OAAQ,CAAC,EACT,YAAa,EACb,eAAgB,CAAC,EACjB,KAAM,EACN,MAAO,CACT,EACA,QAASypH,GACT,SAAUhnI,GAAK,MACf,UAAWA,GAAK,OAChB,QAAAmI,CAAA,CACD,EAED,KAAK,UAAU,CACb,QAAAA,EACA,OAAA67C,EACA,YAAA1yC,GACA,QAAA0R,GACA,UAAWgkH,GACX,WAAAxmI,EACA,aAAAO,EACA,SAAUf,GAAK,MACf,UAAWA,GAAK,OACjB,CACH,CAEGgnI,KACDt4H,EAAM,MAAM,SAAWy3H,IAAemB,GAAW,MAAQ,UAG3D17H,GAAY2B,IAAY,CACtB/M,EAAW,UAAU+M,EAAO,EACjB6jH,GAAA,CACT,GAAG1iH,EACH,IAAM63H,IAAQ,CACZM,GAAQ,QAAS5kF,IAAQA,GAAIskF,EAAG,CAAC,EAC9BprC,IAAgB,CAACgrC,GAClBhrC,GAAa,OAAOorC,EAAG,EACfhkD,GACL4jD,IACQ5jD,GAAA,cAAc,QAAQgkD,EAAG,EAC9BA,GAAA,cAAc,UAAU,IAAI,WAAW,GACtChkD,GAAS,OAAOgkD,EAAG,EAE1B7jD,EAAW,OAAO6jD,EAAG,CAEzB,EACA,UAAW,GACZ,EACF,EAED,KACF,CAEA,IAAK,uBAAwB,CAC3B,MAAMzlI,GAAM+vD,EAAa,SAEzB,GAAG/vD,GAAI,QAAkC,CAChCkjD,EAAA,UAAU,IAAI,SAAS,EAChB2qE,GAAA,GACM5rC,GAAA,GAEjBjiF,GAAI,UACEkjD,EAAA,UAAU,IAAI,kBAAkB,EAGzC,MAAMjnC,GAAQxc,GAAW,OACnBinI,GAAUxjF,EAAO,UAAU,SAAS,WAAW,EAC/C7lC,GAAUqpH,GAAUzqH,GAAM,aAAgBjc,GAAI,SAAWic,GAAM,gBAAkBA,GAAM,cAC3EQ,GAAA,CAChB,MAAOzc,GACP,QAASu2F,EACT,SAAUl5E,GAAQ,MAClB,UAAWA,GAAQ,OACpB,EAEeskE,EAAA,MAAM,SAAW4U,EAAc,MAAM,MACrC5U,EAAA,MAAM,UAAY4U,EAAc,MAAM,OAEhD,MAAAowC,EAAY52E,GAAc,QAAQ,UAC5B3vD,GAAA,CACV,IAAAJ,GACA,IAAKu2F,EACL,WAAA72F,EACA,cAAe,KAAK,cACpB,MAAO,KAAK,KAAK,eAEjB,KAAM,GACN,YAAa,gBACb,KAAM,GACN,MAAOgnI,GAAUjD,EAAiB,OAClC,UAAW,GACX,aAAAxjI,EACA,MAAA2d,GACA,UAAA+oH,EACA,WAAY,KAAK,WACjB,gBAAiB,IAAM,CACf,MAAAlgI,GAAI2sC,GAAe,IAAM,CACnBhjB,KACGvC,GAAA,YAAY6hC,GAAe1vD,GAAI,gBAAiB,OAAW,KAAK,KAAK,KAAK,EAAE,KAAK,EAC/F,EAEQuwB,GAAA,CACP,YAAa,6BACb,kBAAmB,CAAC9pB,EAAC,EACtB,CACH,EACD,GAEmBu8D,GAAsBhjE,EAAG,GAC1B0mI,MAAajE,GAAc7pE,KAC5C,KAAK,SAAS,QAAQ1V,EAAQ,KAAK,6BAA6B,CAClE,SACQljD,GAAI,OAAS,SAAWA,GAAI,OAAS,OAASA,GAAI,OAAS,QAAmC,CAGhG,MAAAk+E,GAAUl+E,GAAI,OAAS,QAgB7B,GAfGk+E,KACmB+D,GAAA,IAGnB/D,GACa2vC,GAAA,GAEUwW,GAAAqB,GAGvBN,IACMliF,EAAA,UAAU,IAAI,WAAW,EAGlCA,EAAO,UAAU,IAAIg7B,GAAU,QAAU,OAAO,EAC7CmkD,GAA6B3L,GAAawL,EAAY,SAAW,EAC3Dh/E,EAAA,UAAU,IAAI,WAAY,YAAY,EAEnCozC,GAAA,CACR,SAAU8rC,EACV,cAAA7rC,EACA,WAAA72F,EACA,MAAO6iI,EACP,cAAe,KAAK,cACpB,KAAM,KAAK,KACX,aAAAtiI,EACA,aAAc,KAAK,KAAK,aACzB,MACI,CACC,MAAA0d,GAAW,CAACqoC,IAAc,CAAC1wB,IAAY,CAAC4oD,IAAW2vC,IAAe,CAACoX,IAAejU,GACrFrzG,IAAiBulC,EAAA,UAAU,IAAI,iBAAiB,EACnD,MAAM5iD,GAAI89D,GAAU,CAClB,IAAAp+D,GACA,UAAWu2F,EACX,QAAAlvF,EACA,SAAU5H,GAAW,OAAO,QAAQ,MACpC,UAAWA,GAAW,OAAO,QAAQ,OACrC,SAAAke,GACA,MAAAC,GACA,cAAe,KAAK,cACpB,WAAAle,EACA,MAAO,KAAK,KAAK,eACjB,aAAAO,EACA,aAAc,KAAK,KAAK,aACxB,cAAei+E,GAAU,CACvB,OAAQ,KAAK,OACb,YAAa,CAAC,EAAG,+BAA+B,EAChD,SAAU,KAAK,KAAK,SACpB,UAAW,CAAE72E,EAA4B,OAAO,aAChD,YAAcA,EAA4B,OAAO,YAC/C,SACJ,OAAQA,EAAQ,KAAO,EACvB,oBAAqB,CAAC,CAAC0oD,EAAa,OAAO,QAC3C,SAAU,KAAK,SACf,kBAAmB7M,CAAA,CACpB,EAEE6M,EAAa,OAAO,SACR9vD,EAAA,KAAK,KAAK,iBAAiB,CACtC,MAAOD,GACP,QAASM,GACT,WAAAZ,EACA,cAAA62F,CACD,EAAC,CAEN,MACK,CACC,MAAAqwC,GAAmB,MAAM5sC,GAAqB,CAClD,wBAAyBqoC,EACzB,QAAAh7H,EACA,OAAA67C,EACA,WAAA0+B,EACA,KAAM,KAAK,KACX,aAAA3hF,EACA,iBAAkB,KAAK,KAAK,aAAa,KACzC,cAAe,KAAK,cACpB,cAAeD,GAAI,OAAS,SAAWA,GAAI,OAAS,QAAU,CAC5D,OAAQ,KAAK,OACb,YAAa,CAAC,EAAGA,GAAI,OAAS,QAAU,gCAAkC,0BAA0B,EACpG,SAAU,KAAK,KAAK,SACpB,UAAW,CAAEqH,EAA4B,OAAO,aAChD,YAAcA,EAA4B,OAAO,YAC/C,SACJ,SAAU,eACV,SAAUrJ,EAAU,SAAS,iBAC7B,iBAAkBkmI,EAClB,gBAAiBF,EAAmB,EACpC,mBAAoB,GACpB,mBAAA5pC,EACA,aAAAC,GACA,MAAAz8E,EAAA,CACD,EAEKipH,GAAmB,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,2BAA2B,EAC1DllD,EAAgB,QAAQklD,EAAgB,EAErCD,KACetsC,GAAAssC,IAGZ,MAAAE,GAAgBllD,EAAW,iBAAiB,cAAc,mBAAmB,GAAKA,EAAW,iBAAiB,cAAc,mBAAmB,EAClJklD,IACDxU,GACEpvE,EACA4jF,GACA,IAAMA,GAAc,OAAOrlD,GAAU8iD,QAAc1T,KAAU,GAIvCuT,GAAA,GAC1B,MAAMl8D,GAAkB,CAAC,QAAS,KAAK,EAA2B,SAASloE,GAAI,IAAI,EAA6B,WAAzBA,GAAI,MAAQ,YAA2B,WACvHkjD,EAAA,UAAU,IAAIglB,CAAY,EAE9BA,IAAiB,oBACXhlB,EAAA,UAAU,IAAI,aAAa,EAGhCA,EAAO,UAAU,SAAS,uBAAuB,GAC5CA,EAAA,UAAU,IAAI,oBAAoB,EAGnB0iF,GAAA,EAC1B,CAEA,KACF,CAEA,IAAK,mBAAoB,CACvB,MAAMt+H,GAASyoD,EAAa,OACtBxnC,GAAM,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,aAAa,EAC3BA,GAAA,OAAOvpB,GAAKsI,GAAO,OAAO,MAAQ,cAAgB,QAAS,kBAAkB,CAAC,EAElF,MAAM8a,GAAiB9a,GAAO,OAAO,MAAQ,QAAU,QACvDihB,GAAI,QAAQ,KAAOnG,GAEb,MAAA/jB,GAAQ,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,mBAAmB,EAEjCS,GAAAT,GAAOuf,GACVtW,GAAO,OAAO,MAAQ,2BAA6B,sBACnDA,GAAO,OAAO,MAAQ,2BAA6B,qBAAsB,EAEtE,MAAAqvB,EAAW,SAAS,cAAc,KAAK,EAG1C,GAFMA,EAAA,UAAU,IAAI,sBAAsB,EAE1CrvB,GAAO,WAAa,OACrBqvB,EAAS,OAAOn0B,GAAiB8E,GAAO,QAAQ,CAAC,MAC5C,CACD,IAAAuJ,GACG,OAAAvJ,GAAO,OAAO,EAAG,CACtB,IAAK,6BACWuJ,GAAA,kBACd,MACF,IAAK,+BACWA,GAAA,2BACd,MAEF,QACgBA,GAAA,8BACd,KACJ,CAES8lB,EAAA,UAAU,IAAI,WAAW,EAClC73B,GAAM63B,EAAU9lB,EAAW,CAC7B,CAES8lB,EAAA,QAAQ33B,GAAK,aAAc,oBAAqB,sBAAwBsI,GAAO,WAAa,OAAY,QAAU,MAAM,CAAC,EAElIgrH,GAAiBpvE,EAAQvsB,EAAU,IAAMA,EAAS,OAAO8qD,EAAQ,CAAC,EAE9Dl5D,GAAA,OAAOlqB,GAAOs4B,CAAQ,EAEFivG,GAAA,GAEExB,GAAA,GACnBlhF,EAAA,UAAU,IAAI,cAAc,EACnC0+B,EAAW,OAAOr5D,EAAG,EAErB,KACF,CAEA,IAAK,sBAAuB,CAC1B,MAAMw+G,GAAUh3E,EACV8iE,GAAa,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,SAAS,EACvBA,GAAA,QAAQ,OAAS,GAAKkU,GAAQ,QAEjBnB,GAAA,GAElB,MAAAoB,GAAiB,SAAS,cAAc,KAAK,EACnDA,GAAe,UAAY,kBACrB,MAAAC,GAAiB,SAAS,cAAc,KAAK,EACnDA,GAAe,UAAY,eAC3B,MAAMC,EAAW,CACfH,GAAQ,WACRA,GAAQ,SACR,SAAO,OAAO,EAAE,KAAK,GAAG,EACXE,GAAA,OACbC,EAAS,KAAK,EAAIxoI,GAAcwoI,CAAQ,EAAI5kI,EAAK,eAAe,GAG5D,MAAA6kI,GAAmB,SAAS,cAAc,KAAK,EACrDA,GAAiB,UAAY,iBACZA,GAAA,YAAcJ,GAAQ,aAAe,IAAM18E,GAAkB08E,GAAQ,YAAY,EAAE,UAAY,uBAEhHlU,GAAW,OAAOmU,EAAc,EACjBA,GAAA,OAAOC,GAAgBE,EAAgB,EAEtD,MAAMpjH,GAAa4J,GAAU,CAC3B,WAAAjuB,EACA,KAAM,GACN,cAAe,KAAK,cACpB,OAAQqnI,GAAQ,QAAQ,SAAS,EACjC,UAAWA,GAAQ,QAAU,OAAaG,EAAS,OAASA,EAAW1oI,GAAK,OAAO,gBAAiB,EAAI,EAAE,CAAC,EAC5G,EAEUq0H,GAAA,QAAQ9uG,GAAW,IAAI,EAERqgH,GAAA,GACnBlhF,EAAA,UAAU,IAAI,iBAAiB,EACtC0+B,EAAW,OAAOixC,EAAU,EAE5B,KACF,CAEA,IAAK,mBAAoB,CACGuR,GAAA,GAE1B,MAAMlgD,GAAcsW,GAAS,CAC3B,QAAAnzF,EACA,SAAU,KAAK,SACf,WAAA3H,EACA,mBAAA06F,EACA,gBAAiB4pC,EAAmB,EACrC,EACDpiD,EAAW,QAAQsC,EAAW,EACvBhhC,EAAA,UAAU,IAAI,cAAc,EAEnC,KACF,CAEA,IAAK,wBACL,IAAK,sBAAuB,CAK1B,MAAMkkF,IADUr3E,EAAmB,QAAU,IACvB,KAChBs3E,GAAYt3E,EAAa,IAAM,sBAC/Bh/C,IAAiB,MAAM,QAAQg/C,EAAa,cAAc,EAAIA,EAAa,eAAiB,CAACA,EAAa,cAAc,GAAG,OAAO,OAAO,EACzIu3E,EAAgBv2H,GAAc,CAAC,GAAG,IAAM,uBACxCw2H,GAAYx2H,GAAc,CAAC,GAAG,IAAM,8BAEtCs2H,KACKnkF,EAAA,UAAU,IAAI,cAAc,EAChCkiF,IACMliF,EAAA,UAAU,IAAI,WAAW,EAGVmhF,GAAAqB,IAG1B,IAAI8B,GAAqB9wC,GACtB2wC,GACDG,GAAcz3E,EAAmB,MACzBu3E,IACKE,GAAAz2H,GAAc,IAAKZ,IACvB0/C,GAAoB1/C,EAA+B,CAC3D,GAGG,MAAAs3H,GAAeJ,GACnB5jI,GAA4BssD,EAAmB,aAAeA,EAAmB,QAAQ,EACzFtsD,GAA4BssD,EAAmB,aAAcjsD,EAAc,EACzE,IAAA4jI,GACJ,GAAG,CAAC32H,GAAc,QAAW,CAACs2H,IAAaC,EAAgB,CACzDI,GAAU,SAAS,cAAcF,GAAa,OAAS,KAAK,EACtD,MAAAn3H,GAAI,SAAS,yBACbs3H,GAAIrlI,EAAMytD,EAAmB,eAAiB,iBAAoBq3E,GAAS,qBAAuB,gBAAiB,EACvHO,GAAA,UAAU,IAAI,gBAAgB,EAChC,MAAMjnG,GAAS,IAAMimB,GACfrmD,GAAI,SAAS,cAAc,MAAM,EAUpC,GATDA,GAAA,UAAU,IAAI,WAAW,EAC3BA,GAAE,OAAOmnI,EAAY,EACrBp3H,GAAE,OAAO/P,EAAC,EACP+mI,IACD/mI,GAAE,OAAOogC,EAAM,EACfrwB,GAAE,OAAOs3H,EAAC,GAEFD,GAAA,UAAU,IAAI,YAAY,EAEjCN,IAAWr3E,EAAmB,eAAgB,CACzC,MAAAtpD,GAAI,SAAS,cAAc,MAAM,EACrCA,GAAA,UAAU,IAAI,iBAAkB,UAAU,EAC1CA,GAAA,OAAOi6B,GAAS,QAAQ,EAC1BrwB,GAAE,OAAO5J,EAAC,CACZ,CACAgM,GAAai1H,GAASr3H,EAAC,OACfk3H,KACMhxC,EAAA,UAAU,IAAI,QAAQ,EAC1BmxC,GAAA,SAAS,cAAc,MAAM,EAC/BA,GAAA,UAAU,IAAI,oBAAoB,EACvCL,GACOK,GAAA,OACN1oI,GAAK,eAAgB,yBAAyB,EAC9CsD,EAAK,oBAAqB,CAACmlI,EAAY,CAAC,GAG1CC,GAAQ,OAAOplI,EAAK,mBAAoB,CAACmlI,EAAY,CAAC,CAAC,EAG5C/wC,GAAA3lF,GAAc,IAAKA,IAAkB,CAChD,MAAM62H,GAAiB72H,GAAmE,eAC1F,GAAG62H,KAAkB,OACnB,OAGI,MAAA3wC,GAAY,SAAS,cAAc,MAAM,EACrC,OAAAA,GAAA,UAAU,IAAI,YAAY,EAC1BA,GAAA,YAAcv1F,GAASkmI,GAAe,EAAK,EAC9C3wC,EAAA,CACR,EAEEP,GAAW,SAAW,GAAKA,GAAW,CAAC,GAC1BH,EAAA,OAAOG,GAAW,CAAC,CAAC,GAetC,GAXG6wC,KAEYC,GAAAz2H,GAAc,IAAKA,IACvB6+C,GAAqC7+C,EAAkB,CAC/D,GAGA,MAAM,QAAQy2H,EAAU,GAAKA,GAAW,SAAW,IACpDA,GAAaA,GAAW,CAAC,GAGxBA,GAAY,CACb,MAAMpvB,GAAYrnG,GAAc,OAAStR,GAAW,OAAO,gBAAkBA,GAAW,OAAO,QAC5F,MAAM,QAAQ+nI,EAAU,GAClBtkF,EAAA,UAAU,IAAI,WAAY,OAAO,EAC9BozC,GAAA,CACR,MAAOkxC,GACP,cAAAjxC,EACA,WAAY,KAAK,cAAc,EAC/B,MAAOgsC,EACP,cAAe,KAAK,cACpB,KAAM,KAAK,KACX,aAAAtiI,EACA,aAAc,KAAK,KAAK,aACxB,UAAW,CAACqnI,EACZ,WAAA5wC,GACA,kBAAoBrvF,EAA4B,kBACjD,GACOmgI,GAAW,IAAM,YACfppE,GAAA,CACR,IAAKopE,GACL,UAAWjxC,EACX,SAAU,GACV,MAAA34E,GACA,cAAe,KAAK,cACpB,WAAAle,EACA,aAAAO,EACA,SAAUm4G,GAAU,MACpB,UAAWA,GAAU,OACrB,MAAO,KAAK,KAAK,eACjB,QAAA/wG,EACA,SAAU,KAAK,SACf,kBAAmB67C,EACnB,kBAAoB77C,EAA4B,kBAAkB,CAAC,EACpE,EACM67C,EAAA,UAAU,IAAI,OAAO,IAElBxlC,GAAA,CACR,MAAO8pH,GACP,UAAWjxC,EACX,SAAU,GACV,MAAA34E,GACA,cAAe,KAAK,cACpB,WAAAle,EACA,aAAAO,EACA,SAAUm4G,GAAU,MACpB,UAAWA,GAAU,OACrB,QAASkvB,EAAgBjgI,EAAU,OACpC,EACM67C,EAAA,UAAU,IAAI,OAAO,GAG3BwkF,MACE,CAAC32H,GAAc,QAAW,CAACs2H,IAAaC,IACjCI,GAAA,UAAU,IAAI,YAAY,EAGpCnxC,EAAc,OAAOmxC,EAAO,EAC9B,MAEgBnxC,EAAA,OAGlB,GAAGgxC,GAAW,CACN,MAAC,IAAA77H,EAAO,EAAArE,EAOX,GANE,2BAAsB,IAAIqE,EAAG,EAClChM,EAAW,QAAQ,IAAM,CAClB,2BAAsB,OAAOgM,EAAG,EACtC,EACD,KAAK,qCAAqC,EAEvCqF,GAAc,SAAW,EAAG,CAC7B,KAAM,CAAC,MAAAqT,GAAO,OAAAC,IAAUkyE,EAAc,MAChC,CAAC,OAAAxwE,GAAQ,YAAAqwE,IAAeP,GAAY,OAAO,CAC/C,MAAO,SAASzxE,EAAK,EACrB,OAAQ,SAASC,EAAM,EACvB,WAAA3kB,EACA,eAAgB,KAAK,KAAK,eAC3B,EACDO,GAAc,KAAKm2F,EAA2B,EAC9CG,EAAc,OAAOxwE,EAAM,CAC7B,CACF,CAEI,IAAA0qG,GACD4W,KACU5W,GAAA,SAAS,cAAc,KAAK,EAC9BA,GAAA,UAAU,IAAI,sBAAsB,EAC7Ch+G,GAAag+G,GAAU/xH,GAAeqxD,EAAmB,KAAK,CAAC,GAG7Dm0E,OACDmD,KACDnD,GAAWoD,EAAgB,OAAY5oI,GAAeqxD,EAAmB,WAAW,GAG3E6xB,EAAA,QAAQ,GAAG,CAAC6uC,GAAUyT,EAAQ,EAAE,OAAO,OAAO,CAAC,EAC5C3tC,EAAA,OAAO,GAAG,EAAE,CAACixC,IAAc,CAACH,KAAcK,EAAO,EAAE,OAAO,OAAO,CAAC,EAE5EL,KACKnD,GACsBE,GAAA,GADEvW,GAAA,IAE1B3qE,EAAA,UAAU,IAAI,YAAY,EAEjC,KACF,CAEA,IAAK,sBACL,IAAK,oBACL,IAAK,kBAAmB,CACtB,MAAM2kF,GAAepb,GAAQ,CAC3B,cAAAl2B,EACA,OAAArzC,EACA,aAAAjjD,EACA,QAAAoH,EACA,WAAAu6E,EACA,aAAA7xB,EACA,WAAArwD,EACA,SAAA+hF,GACA,qBAAsB,KAAK,qBAC3B,YAAAliF,CAAA,CACD,EAEEsoI,KAAiB,SACJha,GAAAga,IAGhB,KACF,CAEA,IAAK,oBAAqB,CACxB,MAAM3lH,GAAU6tC,EAAa,GACvBv/C,GAAcpM,GAAU2rD,EAAa,IAAI,EAEzCovB,GAAiB,MAAM,KAAK,uBAAuB3uE,GAAa0R,GAAS,GAAO,EAAI,EAC1F,GAAGi9D,GAAgB,CACVj8B,EAAA,UAAU,IAAI,kBAAkB,EAEbkhF,GAAA,GAC1BxiD,EAAW,OAAOzC,EAAc,EACrByC,EAAA,UAAU,IAAI,wBAAyB,UAAU,EAC5D,KACF,CAEO1+B,EAAA,UAAU,IAAI,QAAS,OAAO,EAClC+hF,GACiBxoH,GAAA,CAChB,KAAMW,GAAcf,GAAmB5c,GAAW,OAAO,QAAQ,MAAM,EACvE,SAAUA,GAAW,OAAO,QAAQ,MACpC,UAAWA,GAAW,OAAO,QAAQ,OACrC,QAAA4H,EACA,QAASkvF,CAAA,CACV,EAED,KAAK,4BAA4BA,CAAa,EAG7C4tC,KACatW,GAAA,IAGE8X,GAAAn1H,GAClB,KAAK,UAAU,CACb,QAAAnJ,EACA,OAAA67C,EACA,YAAA1yC,GACA,QAAA0R,GACA,UAAWq0E,EACX,WAAA72F,EACA,aAAAO,CAAA,CACD,EAED,KACF,CAEA,IAAK,8BACL,IAAK,uBAAwB,CAC3B,MAAM2yG,GAAW7iD,EAEd6iD,GAAS,IAAM,gCACNh/F,EAAA,QAGcwwH,GAAA,GACnBlhF,EAAA,UAAU,IAAI,aAAa,EACV0iF,GAAA,GACxB,MAAM13G,GAAS,KAAK,eAAe,CAAC,KAAM,oBAAoB,EACxDruB,GAAY,SAAS,cAAc,KAAK,EACnC+hF,EAAA,OAAO/hF,GAAWquB,EAAM,EACnCtT,EAAiBsT,GAAQ,IAAM,CAC7Bo5F,GAAgBjgH,CAA0B,EAC3C,EACI,mBACH,IAAM+hH,GAAS,CACb,SAAAxW,GACA,aAAA3yG,CAAA,CACD,EACDJ,GACAH,CAAA,EAEF,KACF,CAEA,QACkB62F,EAAA,OACU6tC,GAAA,GACFwB,GAAA,GACbhkD,EAAA,gBAAgBt/E,EAAKiO,EAAyB,CAAC,EACnD2yC,EAAA,cAAc,CAAC,EAAE,SAAS,EACjC,KAAK,IAAI,KAAK,2BAA4B6M,EAAa,EAAG1oD,CAAO,EACjE,KACJ,CAEA,GAAGu+H,GACervC,EAAA,WACX,CACF8uC,GAAazjD,EAAW,MAAM2U,CAAa,EACzC3U,EAAW,OAAO2U,CAAa,EAE9B,MAAAnyE,GAAQmyE,EAAc,MAAM,MAC/BnyE,KACeu9D,EAAA,MAAM,SAAW,aAAav9D,EAAK,IAEvD,CAEGigH,IAAyB,CAACY,IACpB/hF,EAAA,UAAU,IAAI,sBAAsB,CAE/C,CAEA,MAAM4kF,GAAiBrmD,KAAc0iD,IAAkB,CAACC,IAA6BiB,IAAe,CAACQ,IAsBrG,GArBG1B,IAAkB,CAACC,IACpBxiD,EAAW,OAAO,EACX1+B,EAAA,UAAU,IAAI,kBAAkB,GAEpCqzC,IACDA,EAAc,UAAU,IAAI8uC,GAAc,SAAW,QAAQ,EAC7DzjD,EAAW,UAAU,IAAIyjD,GAAc,aAAe,YAAY,GAInEyC,KACQrmD,GAAA,UAAU,IAAI,aAAa,EAC7Bv+B,EAAA,UAAU,IAAI,mBAAmB,EAExCovE,GAAiBpvE,EAAQy+B,EAAiB,IAAMA,EAAgB,OAAOF,EAAQ,CAAC,GAG/EQ,IACM/+B,EAAA,UAAU,IAAI,YAAY,EAGhC8uE,EAAkB,CACb,MAAA+V,GAAY/V,EAAiB,OAAO,WACpC7iG,GAAU,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,uBAAwB,0BAA0B,EACpE,IAAA64G,GACJ,GAAGD,GAAW,CACJ54G,GAAA,UAAU,IAAI,0BAA0B,EAChD64G,GAAa1oG,GAAW,wCAAyC,CAAC,SAAU,EAAK,GAC3E,MAAAlM,GAAK,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,oCAAoC,EACrD,MAAMP,EAAOyM,GAAW,uCAAwC,CAAC,SAAU,GAAK,EACxEnQ,GAAA,OAAO64G,GAAY50G,GAAIP,CAAI,EAElBjY,EAAAiY,EAAOvoB,IAAM,CACvB,UAAK,YAAY,cAAcA,EAAe,EACpD,OAEY09H,GAAA74G,GACF64G,GAAA,OAAOhpI,GAAK,OAAO,CAAC,EACvBmwB,GAAA,UAAU,IAAI,uBAAuB,EAE/CwyD,EAAgB,QAAQxyD,EAAO,EACxB+zB,EAAA,UAAU,IAAI,oBAAoB,EACzCtoC,EAAiBotH,GAAY,IAAM,CACjCzzF,GAAa,KAAK,CAAC,QAAS,QAAS,GACtC,CACH,CAEA,IAAIs/E,GAAY,IAEb5xC,IAAqB,CAACrkE,IAAUvW,EAA4B,YACxD,UAAK,aAAa,sBAAsB,CAC3C,OAASA,EAA4B,WAAaA,EAAQ,OAC1D,QAAS67C,EACT,oBAAqB++B,GACrB,WAAYrkE,GACZ,MAAOo0G,GAAkB,MAC1B,EAIG,MAAAiW,IAAa5gI,EAAQ,SAAWrJ,EAAU,MAAQ,CAAC4f,KAAU,KAAK,KAAK,aAC3EvW,EAAQ,UACRs+H,GACC,GAAAsC,IAAYvzE,IAAW9gD,GAAW4wH,GAA0B,CACzD,IAAAnmI,GACA6pI,GAEJ,MAAMC,GAAiB9gI,EAAQ,OAEzB+yE,GAAuB/yE,EAAQ,SAAS,IAAM,eAAiBA,EAAQ,SAAW6yE,GAClFC,EAAc1lB,GAAeC,EAAO,EACpC0zE,GAAelD,IAAuB,CAACtnH,IAAS82C,GAAQ,WAAaA,GAAQ,gBAEnF,IAAI2zE,GAAe,CAAC,CAAEhhI,EAAQ,UAA+Cs+H,GAC7E,MAAM2C,GAAW,CAAC,EAAE5zE,KAAY,CAACA,GAAQ,SAAWylB,IACjD9yE,EAAQ,WACE6gI,GAAA,SAAS,cAAc,MAAM,EAC/BA,GAAA,UAAY,IAAO,MAAM,KAAK,SAAS,gBAAgB,gBAAgB7gI,EAAQ,QAAQ,EACvF6gI,GAAA,UAAU,IAAI,YAAY,GAGrC,IAAIK,GAAY,CAAC,EAAE5C,IAAmBzrD,IAAaxlB,IAKhD,GAJA6zE,IAAa,KAAK,KAAK,OAASxtD,GAAS,OAASb,KAAcl8E,EAAU,OAC/DuqI,GAAA,IAGXD,IAAY,CAACpuD,GACN77E,GAAA,SAAS,cAAc,MAAM,EAC/BA,GAAA,UAAU,IAAI,YAAY,EAChCoU,GAAapU,GAAOK,GAAcg2D,GAAQ,WAAaylB,CAAW,CAAC,EAC5Dj3B,EAAA,UAAU,IAAI,gBAAgB,MAChC,CACC,MAAAw/B,GAAcijD,IAAmBzrD,IAAa7yE,EAAQ,OAC5DhJ,GAAQ,KAAK,YAAYqkF,GAAanjF,EAAagpI,EAAS,EAAE,OAChE,CAEI,IAAAppD,GAEF+B,IAEEttE,GAAS,IAAM,2BACbvM,EAAQ,cACRA,EAAQ,eAAiB,KAAK,KAAK,UAChCuM,GAAS,cAEf,CAAC,KAAK,KAAK,oBAAuBA,EAAkD,mBAEpEurE,GAAA,MAAM6B,GAAc,SAAS,CAC5C,KAAM,KAAK,KACX,OAAA99B,EACA,gBAAAy+B,EACA,QAAAt6E,EACA,eAAiBxH,IAAc,CAC7By6F,GAAc,QAAQz6F,EAAS,EAC5B,CAACskI,KAAmB,CAAC5tC,GAAiB8uC,KAC7BxlI,GAAA,UAAU,IAAI,YAAY,EAGnC02F,GACaA,EAAA,UAAU,IAAI,QAAQ,CAExC,EACA,WAAA72F,EACA,cAAe,KAAK,cACpB,WAAY,KAAK,WACjB,kBAAAuiF,GACA,MAAArkE,EAAA,CACD,GAKC,IAAAo7E,GACJ,GAAGuvC,GAAW,CACN,MAAAC,GAAiB,KAAK,SAAWxqI,EAAU,OAAS,CAAC,KAAK,KAAK,UAAY,CAACguH,GAAmB3kH,CAAO,GACzG,CAACmhI,IAAkB,CAACpuD,IACdl3B,EAAA,UAAU,IAAI,WAAW,EAG9B77C,EAA4B,YAC9BwsH,GAAaxsH,EAA4B,UACzChJ,GAAM,QAAQ,UAAYw1H,IAGlB76B,GAAA,SAAS,cAAc,KAAK,EACtC,MAAMtW,GAAcijD,IAAmBzrD,GAGvC,GAFM77E,GAAA,QAAQ,OAAS,GAAKqkF,IAGzB8lD,IAAkB,KAAK,SAAWj9G,IAAmB6uD,KACtD,CAAC6H,IACD,CAACmmD,IACD,CAAClD,IACD,CAACS,GAEO3sC,GAAA,UAAU,IAAI,cAAc,EACpCA,GAAQ,OAAO36F,EAAK,MACf,CACYgqI,QAAA,IACVnlF,EAAA,UAAU,OAAO,WAAW,EAC7B,MAAAulF,GAAgC,CAACpqI,EAAK,EAE5C,GAAGqkF,GAAa,CACd,MAAMjhE,GAASkM,GAAU,CACvB,WAAAjuB,EACA,KAAM,GACN,cAAe,KAAK,cACpB,OAAQgjF,GACR,SAAU,GACX,EAEMjhE,GAAA,KAAK,UAAU,IAAI,8BAA8B,EAE9CgnH,GAAA,QAAQhnH,GAAO,IAAI,OAEvBpjB,GAAA,UAAU,IAAI,aAAa,EAGL,CACtB,MAAAgiD,GAAK,SAAS,cAAc,IAAI,EACnCA,GAAA,UAAU,IAAI,SAAS,EAC1BooF,GAAU,QAAQpoF,EAAE,CACtB,CAEI,IAAAqoF,GACE,MAAAnnF,GAA+B,CAACknF,EAAS,EAC/C,GAAG/zE,IAAS,YAAa,CACvBg0E,GAAU/C,GAAkB,4BAA8B,sBACpD,MAAAriI,GAAI,SAAS,cAAc,MAAM,EACvCA,GAAE,OAAO5E,GAAcg2D,GAAQ,WAAW,CAAC,EAC3CnT,GAAS,KAAKj+C,EAAC,OAEfolI,GAAU/C,GAAkB,sBAAwB,gBAGhD,MAAA9mI,GAAOyD,EAAKomI,GAASnnF,EAAQ,EAInC,GAHK1iD,GAAA,UAAU,IAAI,uBAAuB,EAC1Cm6F,GAAQ,OAAOn6F,EAAI,EAEhBupI,GAAc,CACX/pI,OACJ,GAAG87E,EACD97E,GAAQ,SAAS,cAAc,MAAM,EACrCA,GAAM,UAAU,IAAI,YAAY,EAChCA,GAAM,MAAM,MAAQ,+BACpBA,GAAM,QAAQ,OAAS,GAAKmG,GAC5BnG,GAAM,OAAOK,GAAcy7E,CAAW,CAAC,MAClC,CACC,MAAAp8E,GAASqG,GAAUswD,GAAQ,aAAa,EACxC,CAAC,QAAAniD,GAAS,kBAAAo2H,IAAqB,KAAK,YAAY5qI,GAAQwB,EAAa,EAAK,EACxEgT,GAAA,MAAM,MAAQ,aAAao2H,EAAiB,KACpDtqI,GAAQkU,EACV,CAEM,MAAAuhF,GAAO,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,iBAAiB,EACpCA,GAAK,OAAOz1F,EAAK,EACjB26F,GAAQ,QAAQlF,EAAI,CACtB,CACF,UACQ,CAACzsF,EAAQ,SACd,IAAC46E,IAAqBgmD,GAAU,CACvBjvC,GAAA,SAAS,cAAc,KAAK,EACtCA,GAAQ,OAAO36F,EAAK,EAEP,CAEX,MAAMusB,GADOrsB,GAAgB,QAAQ4pI,EAAc,GACf,OACjCv9G,KAAWA,GAAO,MAAQA,GAAO,OAClCouE,GAAQ,OAAOr6F,GAAiBisB,GAAO,IAAI,CAAC,EAG1C23G,GACMvpC,GAAA,UAAU,IAAI,cAAc,EAG9BA,GAAA,QAAQ,OAAS,GAAKmvC,EAChC,OAEOjlF,EAAA,UAAU,IAAI,WAAW,EAIpC,GAAG77C,EAAQ,SAAU,CACf2xF,GAGFA,GAAQ,OAAO,GAAG,EAFRA,GAAA,SAAS,cAAc,KAAK,EAKlC,MAAAn6F,GAAO,SAAS,cAAc,MAAM,EAC1CA,GAAK,OAAOyD,EAAK,QAAQ,EAAG,IAAK4lI,EAAQ,EACpCrpI,GAAA,UAAU,IAAI,QAAQ,EAE3Bm6F,GAAQ,OAAOn6F,EAAI,CACrB,CAgBA,GAdG2lI,KACEviD,GACwBuiD,GAAA,UAAU,IAAI,eAAe,GAElDxrC,KACQA,GAAA,SAAS,cAAc,KAAK,GAGxCA,GAAQ,OAAOwrC,EAAwB,EAEhCthF,EAAA,UAAU,OAAO,WAAW,IAIpC81C,IAAW,CAAC91C,EAAO,UAAU,SAAS,WAAW,EAAG,CAC7C81C,GAAA,UAAU,IAAI,MAAM,EAC5BtnF,GAAasnF,EAAO,EAEd,MAAA4vC,GAAoBC,IAAiC,CACtDjnD,GAAcinD,GAAgB,qBAAuBjnD,GACtCinD,GAAA,UAAU,IAAI,iBAAiB,CACjD,EAGF,GAAG5mD,GAAmB,CACd,MAAA2kD,GAAmB,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAI,kBAAmB,eAAe,EACjEtsC,GAAc,QAAQssC,EAAgB,EACtCgC,GAAiBhC,EAAgB,EACjBtsC,GAAAssC,EAAA,MAER5tC,GAAA,UAAU,IAAI,eAAe,EAGvCsB,GAAc,QAAQtB,EAAO,EACzB/W,IACF2mD,GAAiB5vC,EAAO,EAGvB/W,IAAqB9C,IACtB6Z,GAAQ,MAAM7Z,EAAc,CAC9B,MACQ8C,IAAqB9C,IACdA,GAAA,UAAU,IAAI,eAAe,EAGxC,MAAA2pD,GAAe9vC,IAAS,mBAAoC36F,GAClE,GACE,KAAK,cACLA,IACA,CAACiqI,IACD,CAACpuD,GAED,CACA,MAAM6uD,GAAc,IAAM,CACxB,MAAMtjG,GAAO,KAAK,MAAM,IAAIp+B,EAAQ,MAAM,EACtCo+B,IAIC,sBAAiBqjG,GAAcrjG,EAAI,GAGpC87C,GAAa4jD,IAAkB99H,EAA4B,YACjE,GAAGk6E,GACI,sBAAiBunD,GAAcvnD,EAAU,UACtC,KAAK,MACDwnD,SACP,CACL,MAAMnI,GAAe,KAAK,aAC1BA,GAAa,IAAImI,EAAW,EAE5BrpI,EAAW,UAAU,IAAM,CACzBkhI,GAAa,OAAOmI,EAAW,EAChC,CACH,OACQ,KAAK,KAAK,aAAe,CAAC1hI,EAAQ,OAAO,UAAaA,EAA4B,OACrF,sBAAiByhI,GAAc,CAAC,EAGvC,GAAGtE,IAA4BviD,GAC7B,GAAIsU,EAIFA,EAAc,MAAMiuC,EAAwB,MAJ3B,CACjB,KAAK,IAAI,MAAM,qBAAsBthF,EAAQ77C,CAAO,EACpD,SAMDghI,IACMnlF,EAAA,UAAU,IAAI,gBAAgB,CACvC,MAEOA,EAAA,UAAU,IAAI,WAAW,EAY/B,GATA,KAAK,KAAK,OAAS63B,GAAS,SAC7B84C,GAAY5B,GAAY,KAAK,KAAK,OAAQ5qH,EAAQ,GAAG,GAG/B29H,IAAsBA,GAAmB,MAAQ,KAAK,KAAK,UAE1E9hF,EAAA,UAAU,IAAI,oBAAqB,eAAe,EAGxD2wE,KAAc,KAAK,KAAK,OAAS94C,GAAS,QAAUrmB,GAAQ,oBAAsB,KAAK,SAAWnpC,GAAiB,CAC9G,MAAAy9G,GAAO,SAAS,cAAc,KAAK,EACzCA,GAAK,UAAU,IAAI,uBAAwB,aAAc,eAAe,EACnEA,GAAA,OAAOhqI,GAAK,YAAY,CAAC,EAC9B2iF,EAAgB,OAAOqnD,EAAI,EAC3B9lF,EAAO,QAAQ,UAAY2wE,GACpB3wE,EAAA,UAAU,IAAI,oBAAoB,CAC3C,CAIA,GAFAA,EAAO,UAAU,IAAItlC,GAAQ,SAAW,OAAO,EAE5CqnH,GACgBjkD,GAAc,cAAc,CAC3C,OAAA99B,EACA,gBAAAy+B,EACA,QAASqjD,GACT,WAAApjD,EACA,aAAA3hF,EACA,cAAe,KAAK,cACpB,WAAAP,CAAA,CACD,EAGemuH,GAAA,GAEP3qE,EAAA,UAAU,IAAI,qBAAqB,UAEpCg+B,GAAa75E,EAAQ,SAAW,KAAK,KAAK,WAAY,CAC9D,MAAMs4E,GAAUt4E,EAAQ,QACnB,2BAAsB67C,EAAQy8B,GAAQ,OAAO,CACpD,CAYA,GAVGuB,GACD,KAAK,+BAA+Bh+B,EAAQ77C,EAAS86H,EAAkB,OAAWliI,CAAY,EAG7F4tH,KACM3qE,EAAA,UAAU,IAAI,eAAe,EAEpBy+B,EAAA,OAAOsnD,IAAc,GAGpC1G,IAAQ,KAAK,SAAWvkI,EAAU,MAAQ4f,IAAQ,EAChDvW,EAAQ,OAAO,QAAUuxD,KAAiB,eAAU,IAAIvxD,EAAQ,GAAG,EAClE,IAAAge,GACDhe,EAAQ,MAAgBge,GAAA,QACnBuzC,GAAqBvzC,GAAA,UACxBA,GAAShe,EAAQ,OAAO,QAAWA,EAA4B,OAAO,aAAe,OAAS,QAEhGuW,IAAUyH,KAAW,QAAUA,KAAW,SACtC,4BAAuB69B,EAAQ79B,GAAQ,EAAI,CAEpD,CAEA,OAAG67D,GACDp2E,GAAY2B,IAAY,CACtB/M,EAAW,UAAU+M,EAAO,EAE5BxB,GAAa,IAAM,CACjBi4C,EAAO,UAAU,OAAO,cAAe,CAAC,KAAK,WAAW77C,CAAO,CAAC,EACjE,EACF,EAGA65E,GAAa75E,EAAQ,SAAWo7H,GAAc7pE,KAC/C,KAAK,SAAS,QAAQ1V,EAAQ,KAAK,6BAA6B,EAG3D71C,CACT,CAEO,WAAWhG,EAAmD,CACnE,OAAGA,GAAS,IAAM,WAAaA,EAAQ,OAAO,WACrC,GAGNA,EAAQ,OAAO,SACT,GAGL,CAAAsjH,GAAQtjH,EAAQ,MAAM,EAAqB,OAAO,UAKxD,CAEQ,+BACN67C,EACA77C,EACA86H,EACApyC,EACA9vF,EACA,CAKA,GAJG,KAAK,OAAO,OAAO,GAAK6wH,IAIxB,CAACqR,GAAkB,WAAa,CAACA,EAAiB,UAAU,QAAQ,OACrE,OAKI,MAAA1yC,EAAmB,IAAIC,GAU7B,GATAD,EAAiB,KAAK,CACpB,QAAS0yC,EACT,KAAMh5C,GAAmB,MACzB,WAAYjmC,EAAO,iBAAiB,IAAI,EACxC,eAAgB,KAAK,KAAK,eAC1B,cAAe,KAAK,cACrB,EACDusC,EAAiB,OAAOM,CAAc,EAEnC7sC,EAAO,UAAU,SAAS,mBAAmB,EAC9CA,EAAO,cAAc,yBAAyB,EAAE,OAAOusC,CAAgB,MAClE,CACL,MAAMhO,EAAWv+B,EAAO,SAClB0+B,EAAa1+B,EAAO,cAAc,UAAU,EAIlD,GAFAovE,GAAiBpvE,EAAQusC,EAAkB,IAAMA,EAAiB,OAAOhO,CAAQ,CAAC,EAE/Ev+B,EAAO,UAAU,SAAS,uBAAuB,EAAG,CACrD,MAAM4zE,EAAoBl1C,EAAW,iBACjC,IAAAsnD,EAAqBpS,EAAkB,cAAc,mBAAmB,EAExEoS,IACmBA,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,kBAAkB,EACnDpS,EAAkB,cAAc,mBAAmB,EAAE,OAAOoS,CAAkB,GAGhFA,EAAmB,OAAOz5C,CAAgB,OAE1C7N,EAAW,OAAO6N,CAAgB,CAEtC,CACF,CAEQ,4BAA4B5vF,EAAwB,CAIhDA,EAAA,MAAM,MAAQ,QACdA,EAAA,MAAM,OAAS,OAC3B,CAEA,MAAc,uBAAuB2Q,EAAqB0R,EAAiBinH,EAAoBx9D,EAAoB,CAC3G,MAAA7rE,EAAS,MAAM,KAAK,SAAS,aAAa,kBAAkB,aAAa0Q,EAAa0R,CAAO,EACnG,GAAGpiB,EAAO,QAAU,CAAE,MAAMA,EAAO,OAAS,CAC1C,GAAGqpI,EACM,YAGT,MAAMpzH,EAAY,MAAMrF,GAAc,CAAC,OAAQF,CAAY,GACrD,CAAC,UAAA3Q,EAAW,YAAAu/E,CAAW,EAAIF,GAAU,CACzC,MAAOiqD,EAAYpzH,EAAY,OAC/B,SAAUozH,EAAY,OAAY7mI,EAAK,uBAAwB,CAACyT,CAAS,CAAC,EAC1E,eAAgB,GAChB,SAAA41D,CAAA,CACD,EAEM,OAAA9rE,CACT,CACF,CAEQ,SAAS,CACf,QAAAoG,EACA,QAAA88H,EACA,WAAArjI,EACA,aAAAO,EACA,UAAA6vC,EACA,MAAAzxC,EACA,SAAAs4B,EACA,WAAAyyG,EACA,eAAAC,CAAA,EAWC,CACOpjI,EAAA,UAAU,IAAI,+BAA+B,EAC7C88H,EAAA,UAAU,IAAI,6BAA6B,EAC7C1kI,EAAA,UAAU,IAAI,WAAW,EAE/B,MAAMa,EAAO,IAEPwK,EAAUmmC,GAAiB,CAC/B,MAAO3wC,EACP,OAAQA,EACR,UAAA4wC,EACA,WAAApwC,EACA,KAAM,GACN,SAAU6a,GAAS,YAAY,eAAe,EAC/C,EAAE,KAAK,CAAC,CAAC,UAAA1a,EAAW,QAAA6J,MACT7J,EAAA,UAAU,IAAI,6BAA6B,EACrDA,EAAU,MAAM,SAAW,WAC3BA,EAAU,MAAM,MAAQA,EAAU,MAAM,OAASX,EAAO,KACxD6jI,EAAQ,QAAQljI,CAAS,EAClB6J,EACR,EAEKwkB,EAASk7G,GACb7xG,GAAO,wBAAyB,CAAC,SAAU,GAAM,KAAM6xG,CAAA,CAAW,EAEjEl7G,GAAUm7G,GACXzuH,EAAiBsT,EAAQm7G,CAAc,EAGjCtG,EAAA,OAAO1kI,EAAOs4B,CAAQ,EACpBzI,GAAA60G,EAAQ,OAAO70G,CAAM,EAC/BjuB,EAAa,KAAKyJ,CAAO,CAC3B,CAEQ,cAAcmR,EAAyBhb,EAAwBH,EAAwB,CACvF,MAAA+M,EAAUiV,GAAO7G,EAAMhb,CAAS,EACtCH,EAAW,QAAQ+M,CAAO,CAC5B,CAEQ,UAAU,CAChB,QAAApF,EACA,OAAA67C,EACA,YAAanlD,EACb,QAAAmkB,EACA,UAAAriB,EACA,WAAAH,EACA,aAAAO,EACA,SAAAyc,EACA,UAAAC,CAAA,EAWC,CACS9c,EAAA,QAAQ,YAAc,GAAK9B,EAC3B8B,EAAA,QAAQ,QAAU,GAAKqiB,EACjC,KAAK,cAAc,IACVu9E,GAAa,CAClB,QAAAp4F,EACA,OAAAtJ,EACA,QAAAmkB,EACA,SAAAxF,EACA,UAAAC,EACA,cAAe,KAAK,cAEpB,aAAc,KAAK,KAAK,aACxB,aAAA1c,EACA,YAAa,GACb,eAAgB,SAAW,CACzB,MAAM2lC,GAAyB,EAC/Bv+B,EAAU,KAAK,KAAK,iBAAiBA,EAAQ,OAAQA,EAAQ,GAAG,EAChE,KAAK,kBAAkB,CACrB,QAAAA,EACA,QAAS,GACT,OAAA67C,CAAA,CACD,CACH,EACA,cAAe,GAChB,EACArjD,EAAWH,CAAU,CAC1B,CAEQ,iBAAiBrB,EAAoBonC,EAAiD,CACtF,MAAA6jG,EAAc,KAAK,qBAAqB7jG,CAAI,EAE5C5lC,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,YAAY,EACpCxB,EAAM,YAAYwB,CAAS,EACjBA,EAAA,OAAOxB,EAAOirI,CAAW,CACrC,CAEQ,qBAAqB7jG,EAAiD,CACtE,MAAA5mC,EAAO,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAI,kBAAkB,EAChCA,EAAA,OAAO2mC,GAAoBC,CAAI,CAAC,EAC9B5mC,CACT,CAEQ,YAAYd,EAAgBwB,EAAmCgpI,EAAqB,CAC1F,MAAM9xH,EAAaJ,GAAwB9X,GAAgB,QAAQR,CAAM,CAAC,EACtE,IAAA4qI,EACJ,OAAGlyH,IAAe,KAChBkyH,EAAoB,QAAQlyH,CAAU,cAGjC,CACL,QAAS,IAAI3B,GAAU,CACrB,OAAA/W,EACA,gBAAiB,CAACwqI,EAClB,YAAa,CACX,GAAGhpI,EACH,UAAWopI,CACb,CACD,GAAE,QACH,kBAAAA,CAAA,CAEJ,CAEQ,oBAAoB/tG,EAAmB2uG,EAAoBC,EAAuB,CAExF,GAAG,CADe,CAAC,CAAC,KAAK,UAAU,cAEjC,MAAO,GAGT,MAAMnlG,EAAM,KAAK,IAAI,WAAW,qBAAqB,EACrDA,EAAI,MAAM,EACJ,MAAAmvF,EAAc,KAAK,kBAAkB54F,CAAO,EAG9C,GAFJ44F,EAAY,KAAK,GAEb+V,GAAYC,IAAgB,KAAK,qBAAuB,CAAC,KAAK,KAAK,eAAgB,CAC/E,MAAAC,EAAgB,KAAK,iBAAiB,EAAI,EAC5CF,IAAUE,EAAc,aAAa,OAAS,GAC9CD,IAAaC,EAAc,gBAAgB,OAAS,GACnD,yBAAoBA,EAAe,EAAI,CAC9C,CAMO,OACL,cAAe,IAAM,CACnBplG,EAAI,SAAS,EAEbmvF,EAAY,QAAQ54F,CAAO,EACtB,uBAAkB44F,EAAY,SAAU,EAC/C,EACA,YAAAA,CAAA,CAEJ,CAEA,MAAa,qBACXW,EACAv5F,EACA,CACM,MAAAyJ,EAAsB,KAAK,IAAI,WAAW,YAAc,KAAK,SAAW,IAAO,EAAE,EACvFA,IAAM,QAAS,KAAK,UAAU,cAAe8vF,CAAa,EAEtD,IAAA/2F,EAAW+2F,EAAgC,UAAYA,EAAc,QACzE/2F,EAAUA,EAAQ,QAEf,KAAK,mBACkBorD,GAAA,KAAK,WAAW,SAAS,EACjD,KAAK,iBAAmB,IAGpB,MAAAjqD,EAAMl3B,GAAsD,CAChE,GAAIA,EAEJ,OAAUA,EAAQ,OAAO,MAChB,KAAK,0BAA0BA,CAAO,EAEtC,KAAK,kBAAkB,CAC5B,QAAAA,EACA,QAAAuzB,EACA,iBAAkB,GACnB,CACH,EAGIuC,EAAmCC,EAAQ,IAAK1xB,GAC7C,OAAOA,GAAS,SAAW,KAAK,KAAK,WAAWA,CAAG,EAAIA,CAC/D,EAEKg+H,EAAoC,GACvC,IAAC,KAAK,WAAW,UAAU,QAAa,CAAC,KAAK,WAAW,UAAU,IAAQ,CAC5E,IAAIl0F,EAAS2+E,EAAgC,MAC7C,GAAG,CAAC3+E,EAAO,CACT,MAAMgnF,EAAiB,MAAM,KAAK,KAAK,kBAAkB,EACnDmN,EAAanN,EAAe,QAAQ,MACpCoN,EAAYpN,EAAe,QAAQ,KACzChnF,EAAQ,CAAC,IAAK,GAAO,OAAQ,GAAO,KAAM,IACvCm0F,EAAW,MAAM/iD,GAAS,MAAM,IAAM,CAAC+iD,EAAW,QAAUvsG,EAAQ,SAASusG,EAAW,CAAC,CAAC,KAC3Fn0F,EAAM,OAAS,IAGdo0F,EAAU,MAAMhjD,GAAS,GAAG,IAAM,CAACgjD,EAAU,QAAUxsG,EAAQ,SAASwsG,EAAUA,EAAU,OAAS,CAAC,CAAC,KACxGp0F,EAAM,IAAM,GAEhB,CAEA,GAAG,CAACA,EAAM,QAAU,KAAK,eAAgB,CACvC,KAAM,CAAC,eAAA6pF,EAAgB,kBAAAC,EAAmB,cAAAI,CAAA,EAAiB,KAAK,eAChE,KAAK,eAAiB,QAElBL,IAAmBhN,IAAkB,CAACqN,GAAmBJ,IAAsBjN,IAAkB,KAAK,UAAUiN,CAAiB,GAAMD,IAAmBC,KAC5J9pF,EAAM,OAAS,GAEnB,CAEGA,EAAM,KAAKk0F,EAAkB,KAAK,KAAK,UAAU,MAAO,EAAI,CAAC,EAC7Dl0F,EAAM,QAAQk0F,EAAkB,KAAK,KAAK,UAAU,SAAU,EAAI,CAAC,CACxE,CAEGA,EAAkB,QACb,cAAQ,IAAIA,CAAiB,EAGrC,IAAIt/H,EAA2B,GAC5B,KAAK,KAAK,KAAS2wE,GAAS,OAKlB3wE,EAAA+yB,EAAS,IAAIoB,CAAE,EAI5Bn0B,EAAS,QAAU,MAAM,QAAQ,IAAIA,CAAQ,EAC7C,MAAM,KAAK,qBAGL,MAAAy/H,EAAqB,KAAK,gCAChCA,GAAsB,MAAMA,EACvB,2BAAwB,MAAM,KAAK,qBAErC,KAAK,WAAW,UAAU,KAAO,KAAK,kCACvC,KAAK,gCAAgC,EACrC,KAAK,kCAAkC,GAGzCxlG,IAAM,0BAA0B,CAClC,CAEQ,kBAAkB16B,EAAsD,CAC9E,MAAMqQ,EAAY,mBAClB,GAAG,CAAC,KAAK,UAAU,UAAU,SAASA,CAAS,IAC3B,CAAC,KAAK,UAAU,WAI9BrQ,MAAU,CACR,aAAc,KAAK,WAAW,WAC9B,aAAc,KAAK,WAAW,UAEhC,GAAAA,EAAM,eAAiBA,EAAM,eAE/B,CAMM,MAAAjK,EAAa,KAAK,gBAClBkI,EAAW,IAAM,CACjBlI,EAAW,GACV,eAAU,UAAU,IAAIsa,CAAS,GAGrC,KAAK,iBACGpS,IAET,WAAWA,EAAU,GAAG,EAG1B,MACF,CAGF,KAAK,iBAAmB,MAC1B,CAuBO,eAAe8zB,EAA4BxC,EAAeuC,EAAyD,CACpH,IAAAquG,EACD,UAAOpuG,GAAc,SAAU,CAChC,KAAM,CAAC,OAAA39B,EAAQ,IAAA2N,CAAG,EAAIymH,GAAaz2F,CAAQ,EAC5BouG,EAAA/rI,EACJ29B,EAAAhwB,CACb,CAGA,GAAG,CAACqvE,GAAS,KAAMA,GAAS,WAAYA,GAAS,MAAOA,GAAS,MAAM,EAAE,SAAS,KAAK,KAAK,IAAI,EAC9F,OAAO,KAAK,SAAS,aAAa,mBAAmB,WAAW,CAC9D,GAAG,KAAK,KAAK,0BACb,aAAA+uD,EACA,SAAApuG,EACA,MAAAxC,EACA,UAAAuC,CAAA,CACD,EACO,QAAK,KAAK,OAASs/C,GAAS,OACpC,OAAO,KAAK,SAAS,aAAa,mBAAmB,WAAW,CAC9D,OAAQ,KAAK,OACb,YAAa,CAAC,EAAG,2BAA2B,EAC5C,aAAA+uD,EACA,SAAApuG,EACA,MAAAxC,EACA,UAAAuC,CAAA,CACD,EACO,QAAK,KAAK,OAASs/C,GAAS,UAC7B,YAAK,SAAS,aAAa,mBAAmB,qBAAqB,KAAK,MAAM,EAAE,KAAM8lD,IACpF,CACL,OAAQA,EAAY,OACpB,OAAQ,QAAQ,QAAQA,EAAY,MAAM,EAAE,KAAM5wH,IACzC,CACL,QAASA,EAAK,MAAM,EAAE,QAAQ,EAC9B,MAAOA,EAAK,OACZ,MAAO,CACL,KAAM,GACN,OAAQ,GACR,IAAK,EACP,GAEH,GAEJ,CAEL,CAEA,MAAc,gBAAgB+vH,EAA4B+J,EAA+BC,EAA6BvuG,EAAmBksD,EAAgB,CAIvJ,MAAMtjD,EAAM,KAAK,IAAI,WAAW,QAAQ,EACxC,GAAG,KAAK,KAAK,gBAAkB,CAAC,KAAK,uBAAwB,CAC3DA,EAAI,KAAK,iBAAiB,EAErB,4BAAyB,KAAK,gBAAgB,KAAK,KAAM27F,EAAmB+J,EAAoBC,EAAoBvuG,EAAWksD,CAAK,EACzI,MACF,CAMM,MAAA4xC,EAAW,KAAK,mBAAmB,MAAM,EAE5C,IAACA,EAAS,OAAQ,CACnBl1F,EAAI,KAAK,YAAY,EACrB,MACF,CAEI,IAAA4lG,EAAiB1Q,EAAS,QAE3ByQ,GAAsBD,EAAmB,SACzBE,IAAe,OAAQ7X,GAAY,CAAC2X,EAAmB,SAAS3X,CAAO,CAAC,GAGvF,IAAA8X,EACDzuG,EACWyuG,EAAAviD,GAASsiD,EAAe,CAAC,EAElCjK,EACWkK,EAAAlK,EAEZkK,EAAYD,EAAe,CAAC,EAI1B,MAAAE,EAASF,EAAe,MAAMA,EAAe,UAAWv+H,GAAQw+H,EAAYx+H,CAAG,CAAC,EAChF0+H,EAAYJ,EAAqB,GAAK,CAACE,CAAS,EAChDG,EAAYL,EAAqB,GAAKC,EAAe,MAAM,EAAGA,EAAe,UAAWv+H,GAAQw+H,GAAax+H,CAAG,CAAC,EAAE,QAAQ,EAE9HqyB,IACDsG,EAAI,iBAAkB6lG,EAAWviD,EAAOq4C,EAAmBmK,EAAQE,CAAS,EAG9E,MAAMC,EAA4B,GAE7B,eAAU,UAAU,IAAI,aAAa,EACpC,MAAApvH,EAAQ8uH,EAAqB,GAAK,GAClCtzF,EAAcszF,EAAqB,EAAI,EACvCO,EAAkB,CAAChR,EAAoB7iF,EAAc,IAAM,CAC/D,MAAM+8E,EAAmBhpH,KACzB,IAAI+/H,EAAc,EAClBjR,SAAS,QAAQ,CAACnH,EAAS/wH,IAAQ,CAC3B,MAAA6hD,EAAS,KAAK,UAAUkvE,CAAO,EACrC,GAAG,CAAClvE,GAAU,KAAK,YAAY,IAAIkvE,CAAO,EAAG,CACvC/tF,EAAA,KAAK,oBAAqB+tF,CAAO,EACrC,MACF,CAEgBoY,GAAAnpI,EAAMq1C,GAAgB,IAAOx7B,EAI7C,MAAMsnH,EAAiBt/E,EAAO,iBAC9B,GAAG,CAACs/E,EAAgB,CAClBn+F,EAAI,KAAK,uBAAwB+tF,EAAS,KAAK,cAAc,EAC7D,MACF,CAEM,MAAAqY,EAAmC,CAACjI,CAAc,EAClDz6H,EAAO,KAAK,aAAa,gBAAgBm7C,CAAM,EAUlD,GATAn7C,GAAQA,EAAK,MAAM,QAAUA,EAAK,MAAM,WAAaA,GACtD0iI,EAAkB,KAAK1iI,EAAK,MAAM,OAAO,IAAI,EAG7B0iI,EAAA,QAASl4H,GAAY,CAC7BA,EAAA,UAAU,IAAI,YAAa,eAAe,EAClDA,EAAQ,MAAM,YAAY,mBAAoBi4H,EAAc,KAAM,WAAW,EAC9E,EAEEnpI,IAASk4H,EAAS,OAAS,EAAI,CAC1B,MAAAr/G,EAAmB5P,GAAuB,CAC3CA,EAAE,SAAWk4H,IAIhB/O,EAAiB,QAAQ,EACV+O,EAAA,oBAAoB,gBAAiBtoH,CAAe,IAGtDsoH,EAAA,iBAAiB,gBAAiBtoH,CAAe,CAClE,CAEWowH,EAAA,KAAK,GAAGG,CAAiB,EACrC,EAEGlR,EAAS,QACX9F,EAAiB,QAAQ,EAGpB,CAAC,YAAA+W,EAAa,iBAAA/W,EAAgB,EAGjCiX,EAASH,EAAgBJ,EAAQzzF,CAAW,EAC5Ci0F,EAAYJ,EAAgBH,CAAS,EACrCQ,EAAYL,EAAgBF,EAAW3zF,CAAW,EAClDtsC,EAAW,CAACsgI,EAAO,iBAAkBC,EAAU,iBAAkBC,EAAU,gBAAgB,EAC3FC,EAAmB,CAACH,EAAO,YAAaC,EAAU,YAAaC,EAAU,WAAW,EAEvF,KAAK,iBACN,MAAM,KAAK,kBAGbzvH,GAAQ,IAAM,CACZ,KAAK,sBAAsB,EAEhBmvH,EAAA,QAAS/3H,GAAY,CACtBA,EAAA,UAAU,OAAO,WAAW,EACrC,EACF,EAEG,IAAA7I,EACJ,GAAGygI,EAAO,QAAUC,EAAU,QAAUC,EAAU,OAAQ,CAC9C3gI,EAAA,QAAQ,IAAIU,CAAQ,EAG9B,MAAMiQ,EAAU,KAAK,IAAI,GAAGwwH,CAAM,EADV,IAExBvN,GAA4B5zH,EAAS2Q,CAAO,EAC3C,KAAK,IAAM,CACVc,GAAQ,IAAM,CACDmvH,EAAA,QAAS/3H,GAAY,CAC9BA,EAAQ,MAAM,gBAAkB,GACxBA,EAAA,UAAU,OAAO,eAAe,EACzC,EAEI,eAAU,UAAU,OAAO,aAAa,EAC9C,EAOF,CACH,CAEO,OAAA7I,CACT,CAEA,MAAc,uBACZ0Y,EACA8gC,EACA77C,EACA1G,EACA,CACA,MAAMmqI,EAAa,2BACnB5nF,EAAO,UAAU,IAAI4nF,EAAYA,EAAa,IAAM1oH,CAAI,EAEpD,IAAA/jB,EACD+jB,IAAS,QAAS/jB,EAAQiE,EAAK,kBAAkB,EAC5C8f,IAAS,QAAS/jB,EAAQiE,EAAK,mBAAmB,EAClD8f,IAAS,cAAgBA,IAAS,WAAY/jB,EAAQiE,EAAK,YAAY,EACvE8f,IAAS,sBAAuB/jB,EAAQiE,EAAK,qBAAqB,EAClE8f,IAAS,eACP/jB,EAAA,SAAS,cAAc,MAAM,EACrCA,EAAM,UAAY,MAAM,KAAK,SAAS,gBAAgB,yBAAyB,KAAK,MAAM,GAGzFA,IACDA,EAAM,UAAU,IAAI,SAAUysI,EAAa,QAAQ,EACnDnqI,EAAS,KAAKtC,CAAK,GAGjB,IAAA0sI,EACJ,GAAG3oH,IAAS,QACDzhB,EAAA,KAAK2B,EAAK,kBAAkB,CAAC,EACvByoI,EAAA,CACbzoI,EAAK,mBAAmB,EACxBA,EAAK,mBAAmB,EACxBA,EAAK,mBAAmB,EACxBA,EAAK,mBAAmB,WAElB8f,IAAS,QACF2oH,EAAA,CACbzoI,EAAK,0BAA0B,EAC/BA,EAAK,0BAA0B,EAC/BA,EAAK,0BAA0B,EAC/BA,EAAK,0BAA0B,WAEzB8f,IAAS,WAAY,CACzB,IAAAuU,EAAWr0B,EAAK,gCAAgC,EAI9C,MAAAgyE,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIw2D,EAAa,UAAU,EAE1C,MAAAprI,EAAa,KAAK,gBAMxB,MAJiB,QAAQ,IAAI,CAC3B,KAAK,SAAS,mBAAmB,mBAAmB,EACpD,KAAK,SAAS,kBAAkB,WAAW2H,EAAQ,OAAO,UAAU,EACrE,EACc,KAAK,MAAM,CAACrH,EAAKisC,CAAQ,IAAM,CAC5C,GAAG,CAACvsC,EAAW,EAAG,OAElB,MAAMsrI,EAAQ/+F,EAAS,eACvB,GAAG++F,EAAO,CACR,GAAGA,EAAM,MAAO,CACR,MAAAC,EAAS,SAAS,cAAc,MAAM,EAC5CA,EAAO,OAAOvsI,GAAcssI,EAAM,KAAK,CAAC,EACxCC,EAAO,UAAY5sI,EAAM,UACzBsC,EAASA,EAAS,QAAQtC,CAAK,CAAC,EAAI4sI,CACtC,CAEGD,EAAM,cACIr0G,EAAA,SAAS,cAAc,MAAM,EACxCA,EAAS,OAAOj4B,GAAcssI,EAAM,WAAW,CAAC,GAG/CA,EAAM,UACPhrI,EAAMgrI,EAAM,SAGR,MAAArpD,EAAkBz+B,EAAO,cAAc,iBAAiB,EACxDj9C,EAAU07E,EAAgB,UAAU,EAAK,EACzCohD,EAAUphD,EAAgB,cAAc,cAAc,EAAE,UAAU,EAAK,EAE7EohD,EAAQ,OAAOzgI,EACb0oI,EAAM,OAASA,EAAM,YAAc,8BAAgC,sCACnE,CACE,MAAMt6H,GAAc,CAAC,OAAQrJ,EAAQ,OAAQ,cAAe,GAAK,EACjE+rC,GAAe,IAAM,CACnBmB,GAAa,KAAK,EACnB,CACH,EACD,EAEOtuC,EAAA,UAAU,IAAI,oBAAoB,EAC1CA,EAAQ,OAAO88H,CAAO,EACtBphD,EAAgB,MAAM17E,CAAO,EACtBi9C,EAAA,UAAU,IAAI,OAAO,CAC9B,CAEA,MAAMjjD,EAA+B,GACrC,aAAMG,GAAY,CAChB,IAAAJ,EAEA,IAAKs0E,EACL,WAAA50E,EACA,cAAe,KAAK,cACpB,MAAO,KAAK,KAAK,eAEjB,KAAM,GACN,KAAM,GACN,UAAW,GACX,aAAAO,EACA,YAAa,gBACd,EAEgB2a,EAAA05D,EAAahqE,GAAM,CAClCqQ,GAAYrQ,CAAC,EACR,UAAK,MAAM,kBAAkB,aAAa,CAAC,OAAQA,EAAE,MAAM,EAAG,OAAW,OAAW,EAAI,EAC9F,EAEM,QAAQ,IAAIrK,CAAY,EAChC,EASD02B,EAAS,UAAU,IAAI,SAAUm0G,EAAa,WAAW,EAEhDnqI,EAAA,KAAKg2B,EAAU29C,CAAU,UAC1BlyD,IAAS,kBAAmB,CAC9B,MAAAkyD,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIw2D,EAAa,UAAU,EACrCx2D,EAAA,OAAOt1E,GAAK,kBAAkB,CAAC,EAE1C,MAAM23B,EAAWr0B,EAAK,uBAAwB,CAAC,MAAMoO,GAAc,CAAC,OAAQ,KAAK,OAAQ,cAAe,EAAK,EAAC,CAAC,EAC/GimB,EAAS,UAAU,IAAI,SAAUm0G,EAAa,WAAW,EAEnD,MAAA58G,EAASqJ,GAAO,wBAAyB,CAAC,SAAU,GAAM,KAAM,6BAA6B,EACnG3c,EAAiBsT,EAAQ,IAAM,CAC7BqmB,GAAa,KAAK,EACnB,EAEQ5zC,EAAA,KAAK2zE,EAAY39C,EAAUzI,CAAM,CAC5C,CAEG68G,IACQpqI,EAAA,KACP,GAAGoqI,EAAa,IAAKzvH,GAAS,CACtB,MAAAzc,EAAO,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAIisI,EAAa,YAAY,EAC5CjsI,EAAK,OAAOyc,CAAI,EACTzc,CAAA,CACR,GAGAujB,IAAS,QACG2oH,EAAA,QAASzvH,GAAS,CAC7B,MAAM7Z,EAAIzC,GAAK,QAAS8rI,EAAa,aAAa,EAClDxvH,EAAK,QAAQ7Z,CAAC,EACf,EACO2gB,IAAS,SACJ2oH,EAAA,QAASzvH,GAAS,CACvB,MAAA7Z,EAAI,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAIqpI,EAAa,cAAc,EAC3CrpI,EAAE,UAAY,IACd6Z,EAAK,QAAQ7Z,CAAC,EACf,GAIFd,EAAS,OAAS,GACZuiD,EAAA,UAAU,IAAI,iBAAiB,EAG/BviD,EAAA,QAAS4R,GAAiBA,EAAQ,UAAU,IAAIu4H,EAAa,OAAO,CAAC,CAChF,CAEA,MAAc,0BACZzjI,EACA4hB,EACA,CACA,MAAMuyG,EAAc,CAAC,CAAEn0H,EAA4B,OAAO,UAEpD6jI,EAAkB,IAAM,CACvB,SAAI,KAAK,0CAA2C7jI,CAAO,GAG5D/G,EAAsE,MAAMR,GAAW,CACrF,MAAC,OAAAojD,GAAU,MAAMpjD,EACvB,GAAG,CAACojD,EACc,OAAAgoF,IACTprI,EAGH,MAAAsyH,EAAUH,GAAY5qH,CAAO,EAE7B3H,EAAawjD,EAAO,iBAAiB,IAAI,EACzC5e,EAAIP,GAAkBrkC,CAAU,EAErCwjD,EAAe,QAAU77C,EAEnB67C,EAAA,UAAU,IAAI,gBAAiB,gBAAgB,EAEtD,MAAM6yE,EAAiB,IAAM,CAK3B,GAJG,KAAK,4BAA8BA,IACpC,KAAK,0BAA4B,QAGhC,CAACr2H,EAAW,GAAK,KAAK,UAAU0yH,CAAO,IAAMlvE,EAAQ,CACtCgoF,IAChB,MACF,CAESv1G,EAAAqe,CAAM,EAAEm3F,CAAU,GAGzB3P,IACKt4E,EAAA,UAAU,IAAI,cAAc,EAC5BA,EAAA,UAAU,OAAO,gBAAiB,OAAO,GAGlD,MAAMviD,EAA8B,GAC9ByqI,EAAQ,KAAK,KAAK,MAClBD,EAAajoF,EACnB,IAAI3jC,EACFoW,EAAW,KAAK,UAChBqe,EAA+B,SAC9B,QAAK,KAAK,aACXz0B,EAAgB,KAAK,uBAAuB,aAAc2jC,EAAQ77C,EAAS1G,CAAQ,UAC3E66H,EACDt4E,EAAA,UAAU,IAAI,iBAAiB,EAEP,KAAK,iBAAoB77C,EAA4B,iBAyBpFsuB,EAAW,KAAK,UACPqe,EAAA,SACC/qB,EAAA,WAGFmiH,GAAS/jI,EAAQ,IAAM,UAAW,CACpC,QAAI,SAAS,cAAc,GAAG,EAClC,SAAO/E,EAAK,cAAc,CAAC,EACpB3B,EAAA,KAAK,EAAG;AAAA;AAAA,CAAM,EACvBg1B,EAAW,KAAK,UACPqe,EAAA,SACX,MAAU,KAAK,KAAK,YAAez1C,GAAgB,QAAQ,KAAK,MAAM,EAAkB,OAAO,QAC7FghB,EAAgB,KAAK,uBAAuB,QAAS2jC,EAAQ77C,EAAS1G,CAAQ,EACtE,KAAK,KAAK,OAASo6E,GAAS,UACpCx7D,EAAgB,KAAK,uBAAuB,sBAAuB2jC,EAAQ77C,EAAS1G,CAAQ,EACpF3C,EAAU,OAAS,KAAK,OAChCuhB,EAAgB,KAAK,uBAAuB,QAAS2jC,EAAQ77C,EAAS1G,CAAQ,EACtE,KAAK,OAAO,OAAY,IAACyqI,GAAS,MAAM9mG,EAAE,KAAK,KAAK,QAAS,IAAK,KAAK,KAAK,OAASy2C,GAAS,KACnG,MAAM,KAAK,SAAS,gBAAgB,2BAA2B,KAAK,OAAO,SAAS,CAAC,EACtFx7D,EAAgB,KAAK,uBAAuB,kBAAmB2jC,EAAQ77C,EAAS1G,CAAQ,EAExF4e,EAAgB,KAAK,uBAAuB,WAAY2jC,EAAQ77C,EAAS1G,CAAQ,EAGnF4e,EAAgB,KAAK,uBAAuB,aAAc2jC,EAAQ77C,EAAS1G,CAAQ,EAGlF4e,GACK,MAAAA,EAGL5e,EAAS,QACSuiD,EAAO,cAAc,wBAAwB,EACrD,QAAQ,GAAGviD,CAAQ,EAG1B,MAAA0qI,EAAwB,CAAC,CAAC,KAAK,gCAC/BC,EAAe,KAAK,eAAiB,CAACD,EAC5C,GAAGC,EAAc,CACf,MAAMC,EAAQroF,EAAO,kBACfqoF,EAAA,UAAU,IAAI,eAAe,EAEhC,KAAK,KAAK,gBACX,KAAK,KAAK,eAAe,MAAM/rH,EAAI,EAAE,QAAQ,IAAM,CAC3C+rH,EAAA,UAAU,OAAO,eAAe,EACvC,CAEL,CA6BG,GA3BAtiH,IAAY,QAAa,CAACqiH,IACjBriH,EAAA,IAGToiH,GAAyBpiH,GAC1B,KAAK,0BAA4B8sG,EAEjC,KAAK,gBAAkB,IAAM,CAKxB,GAHH,KAAK,gBAAkB,OAGpB,CAAC,KAAK,qBACP,OAAOH,GAAe,CACxB,GAEM,KAAK,KAAK,eAClB,KAAK,0BAA4B,IAAM,CACrC,KAAK,0BAA4B,OAClBG,GAAA,EAIjB,KAAK,0BAA4BA,EAIhC,CAACsV,GAAyBpiH,EAAS,CAC9B,MAAAqb,EAAEsB,IAA0B,EAC5B,MAAAmkG,EAAqB,KAAK,mBAAmB,KAAK,EACxD/2H,GAAiB+2H,EAAoB3X,CAAO,EAC5C,KAAK,gBAAgBA,EAAS2X,EAAoB,GAAO,EAAG1X,EAAc,CAC5E,CAEO,OAAAnvE,EAAA,iBAAiB,UAAU,IAAM,CACnC,KAAK,yBAA2BA,IACjC,KAAK,uBAAyB,OAChC,CACD,EAED,KAAK,uBAAyBA,EAEvBpjD,CAAA,EAGT,OAAO,KAAK,kBAAkB,CAC5B,QAAAuH,EACA,QAAS,CAACm0H,EACV,eAAgB,GAChB,cAAel7H,EACf,iBAAkB,GACnB,CACH,CAEQ,eAAuDxC,EAAY,CACnE,MAAAowB,EAASqJ,GAAO,yDAA0Dz5B,CAAO,EACjF8G,EAAOspB,EAAO,cAAc,OAAO,EACzC,OAAGtpB,GACIA,EAAA,UAAU,IAAI,yBAAyB,EAEvCspB,CACT,CAEQ,uBAAuB05D,EAAY,EAAG,CAE5C,MAAM/+E,GAAU,KAAK,KAAK,OAASkyE,GAAS,UAAY,GAAK,GAAK6M,EAG5D/nD,EAAK,CAAC,KAAK,IAAIh3B,CAAM,EAGpB,OAAC,GAAAg3B,EAAI,IADAA,EAEd,CAEA,MAAc,0BACZkjG,EACAtyF,EACAm3C,EAAY,EAC0B,CACtC,KAAM,CAAC,GAAA/nD,EAAI,IAAAn0B,CAAA,EAAO,KAAK,uBAAuBk8E,CAAS,EACvD,IAAIvgF,EAA0F,CAC5F,EAAG07H,EAAU,iBAAmB,UAChC,KAAM,EACN,GAAAljG,EACA,IAAAn0B,EACA,QAAS,MAAM,KAAK,SAAS,gBAAgB,cAAc,KAAK,MAAM,EACtE,OAAQ,CACN,MAAO,EACT,GAGF,OAAIq3H,IACF17H,EAAQ,QAAU,IAOpBopC,IAAOppC,CAAO,EAGdA,GADsB,MAAM,KAAK,SAAS,mBAAmB,aAAa,CAACA,CAAO,EAAG,CAAC,QAAa,OAAa,IACxF,CAAC,EACzBA,EAAQ,IAAMqE,EACPrE,CACT,CAEO,iBAAiBmkI,EAAoB,CAE1C,OAAOC,GAAiB,CACtB,gBAAiB,KAAK,WAAW,UACjC,SAAU,4CACV,UAAWD,EAAW,KAAK,IAAI,IAAK/hG,GAAW,MAAM,EAAI,EAAI,OAC7D,eAAgB+hG,EAAW,EAAI,OAChC,CACH,CAEO,oBAAoBzkD,EAAoD2kD,EAA8B,CAKrG,MAAC,aAAAC,EAAc,gBAAAC,CAAmB,EAAA7kD,EAClC8kD,EAAYF,EAAa,OAAOC,CAAe,EAClD,IAACC,EAAU,OACZ,OAGF,MAAMxnG,EAAM,KAAK,IAAI,WAAW,gBAAgB,EAE7CsnG,EAAa,SACT,eAAU,MAAO,EAAK,EAC3B,KAAK,qBAAuB,OAC5BtnG,EAAI,iBAAkBwnG,CAAS,GAG9BD,EAAgB,SACZ,eAAU,SAAU,EAAK,EAC9B,KAAK,wBAA0B,OAC/BvnG,EAAI,oBAAqBwnG,CAAS,GAG9B,MAAAtS,EAAWsS,EAAU,IAAI,CAAC,CAAC,QAAAt5H,KAAa2/G,GAAiB3/G,CAAO,CAAC,EAEnE,IAAAihH,EAC4DkY,IAC9DlY,EAAc,KAAK,kBAAkB,CAAC,CAACmY,EAAa,MAAM,EAC1DnY,EAAY,KAAK,GAGnBnvF,EAAI,eAAgBk1F,CAAQ,EACvB,yBAAoBA,EAAU,GAAO,EAAI,EAE3C/F,EACDA,EAAY,QAAQ,EACZmY,EAAa,SAChB,gBAAW,mBAAqB,KAAK,WAAW,eAEzD,CAEO,cAAcvX,EAAgC,CAEnD,GAAGzwE,IAAc,KAAK,4BAA8B,CAACywE,GAAyB7C,GAC5E,OAKI,MAAAxqC,EAAQ,KAAK,iBAAiB,EAAI,EAExC,KAAK,oBAAoBA,CAAK,CAEhC,CAEA,MAAc,UAAUnzD,EAAkB5e,EAAgB82H,EAAoB,GAAM,CAiBlF,GAfG,IADgB,KAAK,WAAW,UAAUl4G,CAAI,IAAM5e,KAK3C,KAAK,IAAI,WAAW,WAAW,EACvC,SAAU4e,EAAM5e,CAAK,EAEpB,gBAAW,UAAU4e,CAAI,EAAI5e,EAClC,KAAK,WAAW,WAGb,KAAK,WAAW,UAAU,QAAU,KAAK,WAAW,UAAU,KAC/DzJ,GAAsB,KAAK,MAAM,EAGhC,CAACugI,IAID,OAAC,KAAK,KAAK,eACTl4G,IAAS,UAAY,KAAK,KAAK,aAAe,KAAK,KAAK,OAASmnD,GAAS,MAC3E,KAAK,uBAAuB/lE,CAAK,EAGhC4e,IAAS,OAAS5e,GAAS,KAAK,KAAK,OAC/B,KAAK,uBAIT,KAAK,+BACd,CAEA,MAAc,uBAAuBA,EAAgB,CAC7C,MAAAqvB,EAAM,KAAK,IAAI,WAAW,cAAgB,KAAK,OAAW,MAAO,EAAE,EACzEA,EAAI,WAAYrvB,CAAK,EACrB,KAAM,CAAC,IAAAtJ,CAAO,OAAK,uBAAuB0lH,EAA2B,EAC/DgB,EAAUH,GAAY,KAAK,OAAQvmH,CAAG,EAC5C,GAAGsJ,EAAO,CACF,MAAAtV,EAAa,KAAK,cAAc,IAC7B,KAAK,WAAW,UAAU,QAAU,KAAK,6BAA+BgK,CAChF,EAEKA,EAAU,KAAK,2BAA6B,KAAK,SAAS,gBAAgB,oBAAoB,KAAK,OAAO,SAAS,CAAC,EACzH,KAAMqiI,GAAsB,CAC3B,GAAG,CAACrsI,EAAgB,GAAAqsI,EAAkB,IAAM,kCAC1C,OAGI,MAAA/Z,EAAmB+Z,EAAkB,SAAS,CAAC,EACrD,GAAG,CAAC/Z,EAAkB,CACpB3tF,EAAI,YAAY,EAChB,MACF,CAEA,MAAM2nG,EAAiB,KAAK,0BAA0B,GAAQ3kI,GAAY,CACxEA,EAAQ,QAAU,GAClBA,EAAQ,QAAU,CAAC,EAAG,WAAY,QAAS7C,IAC3C6C,EAAQ,OAAO,UAAY,GAC3BA,EAAQ,OAAO,aAAe,GAC9BA,EAAQ,iBAAmB2qH,EAE3B,MAAMiU,EAAiBjU,EAAiB,MAElCia,EAAgC,CACpC,EAAG,UACH,GAAI5kI,EAAQ,IACZ,OAAQ,CACN,gBAAiB,CAAC,CAAC4+H,GAAkB,MACvC,EACA,IAAK,GACL,YAAa,GACb,KAAM,EACN,YAAajU,EAAiB,QAC9B,SAAUA,EAAiB,SAC3B,SAAWiU,GAAsD,SACjE,MAAQA,GAAmD,OAG7D5+H,EAAQ,MAAQ,CACd,EAAG,sBACH,OAAQ,CACN,kBAAmB,CAAC,CAAC4+H,GAAkB,MACzC,EACA,QAASgG,CAAA,GAEV7a,EAA2B,EAE9B,OAAO,QAAQ,IAAI,CACjB4a,EACA,KAAK,qBACL,KAAK,oBACN,GAAE,KAAK,CAAC,CAAC3kI,CAAO,IAAM,CACrB,GAAI3H,EAAW,EAEf,OAAA2kC,EAAI,YAAah9B,CAAO,EACjB,KAAK,qBAAqB,CAAC,QAAS,CAACA,CAAO,GAAI,EAAK,EAC7D,EACF,EAAE,QAAQ,IAAM,CACZ,KAAK,6BAA+BqC,IACrC,KAAK,2BAA6B,OACpC,CACD,OAED26B,EAAI,oBAAqB34B,CAAG,EAC5B,KAAK,2BAA6B,OAClC,KAAK,oBAAoB,CAAC0mH,CAAO,EAAG,EAAK,CAE7C,CAEA,MAAc,sBAAuB,CACnC,MAAM8Z,EAAO,KAAK,IAAI,WAAW,iBAAiB,EAE5CxsI,EAAa,KAAK,gBAClBI,EAAS,MAAM,KAAK,SAAS,aAAa,kBAAkB,WAAW,KAAK,OAAO,SAAU,GAC9FosI,EAAA,2BAA4BpsI,EAAO,MAAM,EAC9C,MAAMqsI,EAAiBrsI,EAAO,OAAO,KAAK,MAAMmsC,GAAa,CACxD,IAACvsC,IACF,OAGC,IAACusC,EAAS,UAAU,YACrB,OAAAigG,EAAK,KAAK,gBAAgB,EACnB,KAAK,gCAGd,MAAM7kI,EAAU,MAAM,KAAK,0BAA0B,GAAQA,GAAY,CACvE,MAAM+kI,EAAUngG,EAAS,SACzB5kC,EAAQ,QAAU+kI,EAAQ,YACvBA,EAAQ,uBAAsB/kI,EAAQ,MAAQ,CAAC,EAAG,uBAAwB,SAAU+kI,EAAQ,qBAAsB,OAAQ,KAC1HA,EAAQ,oBAAmB/kI,EAAQ,MAAQ,CAAC,EAAG,oBAAqB,MAAO+kI,EAAQ,kBAAmB,OAAQ,IAAE,CACpH,EAEE,OAAC1sI,KAIJwsI,EAAK,WAAW,EAKT,CAAC,cAJc,KAAK,0BAA0B7kI,EAAS,CAACvH,EAAO,MAAM,EAAE,KAAK,IAAM,CACvFosI,EAAK,MAAM,EACZ,CAEoB,GARnB,MAQmB,CACtB,EAEE,GAACpsI,EAAO,OAIJ,OAAAqsI,CACT,CAEA,MAAa,+BAAgC,CAC3C,GAAG,KAAK,WAAW,UAAU,KAC3B,KAAK,WAAW,UAAU,QAC1B,KAAK,yBAA2B,SAE9B,KAAK,KAAK,cAER,OAAO,KAAK,KAAK,OAAO,EAAE,QAC1B,CAAC,KAAK,kBAAkB,GAEzB,KAAK,KAAK,OAASpxD,GAAS,WAAa,CAAC,KAAK,qBAChD,EAAE,MAAM,KAAK,KAAK,qBAAqB,OAEzC,CACA,KAAK,IAAI,+BAA+B,EAExC,MAAM1zE,EAAU,MAAM,KAAK,0BAA0B,EAAI,EACzD,MAAO,CAAC,cAAe,KAAK,0BAA0BA,CAAO,CAAC,CAChE,CACF,CAEO,YAAYsgF,EAAiB/sD,EAAmByxG,EAAuBrM,EAA6BzD,EAAoB,CAC7H,MAAM78H,EAAa,KAAK,cAAc68H,EAAW,OAAY,KACnD3hG,EAAU,KAAK,qBAAuB,KAAK,2BAA6B2wD,CACjF,EAEKzrF,EAAS,KAAK,WAAW6nF,EAAO/sD,EAASyxG,EAAarM,EAAmBzD,EAAU78H,CAAU,EAC7F6rF,EAAczrF,EAAO,KAAMwpB,GAAQA,IAAQA,EAAI,aAAeA,EAAI,QAAQ,EAE/E,OAAAsR,EAAU,KAAK,qBAAuB2wD,EAAc,KAAK,wBAA0BA,EACpFA,EAAY,KAAK,IAAM,CACjB7rF,MAIHk7B,EAAU,KAAK,qBAAuB,OAAY,KAAK,wBAA0B,OAE9E2hG,GAGC,KAAK,KAAK,OAASxhD,GAAS,MAI7B,WAAW,IAAM,CACZngD,EACI,qBAAgB,GAAM,EAAI,EAE1B,qBAAgB,GAAO,EAAI,GAEjC,CAAC,EAMR,CACD,EAEM96B,CACT,CAeA,MAAa,WACX6nF,EAAiB0qC,GACjBz3F,EAAU,GACVyxG,EAAc,GACdrM,EACAzD,EAAW,GACX78H,EAC+E,CAC/E,MAAM3B,EAAS,KAAK,OAEdqV,EAAc,KAAK,KAAK,YAExB0hC,EAAY,KAAK,IAAI,GAAIrL,GAAW,OAAS,GAAkB,CAAC,EAItE,IAAIjO,EAFkBpoB,EAAc,GAAM,KAAK,mBAAmB,OAAW,EAAI,EAAE,OAAS,EAAI,KAAK,IAAI,GAAI0hC,CAAS,EAAIA,EAqBtHrZ,EAAY,EACb4wG,IACW5wG,EAAAD,EAERZ,IACUY,EAAA,IAKZ,IAAAuuG,EACD,GAAA/J,GAAqB,CAACqM,EACvB,GAAG,KAAK,KAAK,OAAStxD,GAAS,OAC7BgvD,EAAqB,CAAC/J,CAAiB,MAClC,CAEL,MAAMl5C,GADiB,MAAM,KAAK,KAAK,kBAAkB,GACtB,QAC7BC,EAAQD,EAAY,MACvB,GAAAC,EAAM,MAAMH,GAAS,MAAM,GAAK,CAACG,EAAM,MAAMH,GAAS,IAAI,EAAG,CAC9D,KAAM,CAAC,IAAAl7E,EAAK,OAAA3N,CAAM,EAAIo0H,GAAa6N,CAAiB,EAC9C7xD,EAAS2Y,EAAY,QAAQp7E,EAAK,EAAG8vB,CAAS,EACjD2yC,EACD47D,EAAqB,CAAC/J,EAAmB,GAAG7xD,EAAO,MAAM,IAAKziE,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,CAAC,EAE1Eq+H,EAAAhjD,EAAM,MAAM,EAAGvrD,CAAS,EAAE,IAAK9vB,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,EAItF,QAAQjK,EAAIsoI,EAAmB,OAAS,EAAGtoI,GAAK,GAC9B,KAAK,KAAK,WAAWsoI,EAAmBtoI,CAAC,CAAC,GACzB,WAFgB,EAAEA,EAEasoI,EAAA,OAAOtoI,EAAG,CAAC,EAI7E+5B,EAAY,KAAK,IAAI,EAAGA,EAAYuuG,EAAmB,MAAM,EAC7DpiD,EAAQoiD,EAAmBA,EAAmB,OAAS,CAAC,GAAKpiD,CAC/D,CACF,CAMF,IAAI7nF,EAAuC,MAAM,KAAK,eAAe6nF,EAAOnsD,EAAWC,CAAS,EAC5F6wG,EAEJ,KAAK,IAAI,gBAAiBxsI,EAAQ6nF,EAAOnsD,EAAWC,CAAS,EAIvD,MAAA8wG,EAAmB,CAAC,CAACxC,GAAoB,OAEzCyC,EAAuB,KAAK,aAAe,CAAC1sI,EAAO,SAAWysI,GAAoB/wG,EAAY,GACjG+wG,IACDD,EAAgBxsI,EAAO,OAEdA,EAAA,CACP,OAAQ,GACR,OAAQ,QAAQ,QAAQ,CAAC,QAASiqI,EAAmB,IAAK3X,GAAYD,GAAaC,CAAO,EAAE,GAAG,EAAE,IAMrG,KAAK,YAAc,GAEb,MAAAzmG,EAAgB,MAAMwoG,GAAoD,CAC1EA,EAAgC,OAAO,KAEzC,MAAM,KAAK,SAAS,kBAAkB,mBAAmBp2H,CAAM,CAGjE,EAGI0uI,EAAOtY,GACJvuF,GAAA,EAA2B,KAAK,IAC9Bja,EAAcwoG,CAAa,CACnC,EAAE,KAAK,KACH,CAACoY,GAAoBvM,GACtB7L,EAAc,QAAQ,QAAQhC,GAAa6N,CAAiB,EAAE,GAAG,EAG5D,KAAK,qBAAqB7L,EAAev5F,CAAO,EACxD,EAGGuxG,EAAkBO,GACN,QAAQ,QAAQA,CAAQ,EAAE,KAAM5sI,GAAW,CACtD,GAAAJ,GAAc,CAACA,IACV,MAAA4xH,GAGR,GAAGiL,EAAU,CAEX,KAAK,WAAW,WAIhB,MACF,CAEA,OAAOkQ,EAAI3sI,CAAM,CACnB,EAAIoP,GAAQ,CACL,eAAI,MAAM,oBAAqBA,CAAG,EACjCA,CAAA,CACP,EAKH,IAAIxF,EAAwB6Y,EACzB,IAACziB,EAAO,OACAyiB,EAAA,GACC7Y,EAAAyiI,EAAersI,EAAO,MAAM,UAC9By8H,EAER,YAAK,WAAW,WACT,KAEEh6G,EAAA,GACC7Y,EAAA+iI,EAAI,MAAM3sI,EAAO,MAAM,EAGnC,MAAMyrF,EAAcghD,EAAmBJ,EAAeG,CAAa,EAAI5iI,EAEvE,GAAG8iI,GAAwBjyH,GAAS,YAAY,YAAY,EAAkB,CACxE,IAAAge,EAAQg0G,EAAmB,EAAI,EACnC,KAAK,gCAAkC,IAAM,CAG3C,GAFA,KAAK,IAAI,iCAAiC,EAEvC,EAAEh0G,EAAO,OAEZ,KAAK,gCAAkC,OAEvB,KAAK,gBAAgBynG,EAAmB+J,EAAoBwC,EAAkB9wG,EAAWksD,CAAK,EACtG,KAAK,IAAM,CACjB,WAAW,IAAM,CACV,qBAAgB/sD,EAAS,EAAI,GACjC,CAAC,EACL,EACH,MAEA,KAAK,gCAAkC,OAGzC,OAAG2hG,EACM,KAGF,CAAC,OAAAh6G,EAAQ,QAAA7Y,EAAS,YAAA6hF,EAC3B,CAEA,MAAa,oBAAqB,CAKhC,GAJG,EAAE,KAAK,KAAK,OAASxQ,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,aAIlE,KAAK,qBACN,OAGI,MAAAr7E,EAAa,KAAK,gBAElB,CAAC,OAAA3B,EAAQ,SAAAK,GAAY,KAAK,KAE1BqjI,EAAe,MAAM,KAAK,KAAK,gBAAgB,EACrD,IAAIhC,EAAY,MAAM,KAAK,SAAS,mBAAmB,qBAAqB1hI,EAAQK,CAAQ,EAQ5F,GAPG,CAACqhI,GAAa,CAAC//H,EAAW,IAE7B+/H,EAAY,KAAK,mBAAmB,MAAO,EAAI,EAC9C,OAAQrN,GAAY,CAAC,KAAK,UAAUA,CAAO,EAAE,UAAU,SAAS,QAAQ,CAAC,EACzE,IAAKA,GAAYD,GAAaC,CAAO,EAAE,GAAG,EAC1C,KAAM1mH,GAAQA,EAAM+zH,CAAS,EAE3B,CAACA,GACF,OAGF,MAAMv8E,EAAS,KAAK,UAAUnlD,EAAQ0hI,CAAS,EAC3Cv8E,IAID,KAAK,mBAAqB,KAAK,oBAAsBA,IACjD,uBAAkB,UAAU,OAAO,iBAAiB,EACzD,KAAK,kBAAoB,MAGxBu8E,IAAcgC,GACRv+E,EAAA,UAAU,IAAI,iBAAiB,EAGxC,KAAK,kBAAoBA,EACzB,KAAK,qBAAuB,GAC9B,CAEO,uBAAwB,CAC7B,IAAIr4B,EAAU,GACJ,UAAAppB,KAAK,KAAK,aAAc,CAC1B,MAAAu2H,EAAc,KAAK,aAAav2H,CAAC,EAEpCu2H,EAAY,eAIfA,EAAY,UAAU,SACtB,KAAK,mBAAmB,UAAUA,EAAY,UAAWA,EAAY,GAAG,EACjE,YAAK,aAAav2H,CAAC,EAChBopB,EAAA,GAMZ,CAEIA,IAIA,OAAO,KAAK,KAAK,YAAY,EAAE,QAC5B,eAAU,UAAU,OAAO,YAAY,EAG9C,KAAK,8BAA8B,EACnC,KAAK,sBAAsB,EAC7B,CACF,CAEO,SAASo+G,GAAa0D,EAAkB,CAC7C,GAAGA,EAAQ,CACH,MAAA9tI,EAAO,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAI,aAAa,EACzBA,CACT,CAEA,MAAMM,EAAM,SAAS,gBAAgB,6BAA8B,KAAK,EACpEA,EAAA,eAAe,KAAM,UAAW,WAAW,EAC3CA,EAAA,eAAe,KAAM,QAAS,IAAI,EAClCA,EAAA,eAAe,KAAM,SAAU,IAAI,EACnCA,EAAA,UAAU,IAAI,aAAa,EAE/B,MAAMC,EAAM,SAAS,gBAAgB,6BAA8B,KAAK,EACpE,OAAAA,EAAA,eAAe,KAAM,OAAQ,sBAAsB,EAGvDD,EAAI,OAAOC,CAAG,EAEPD,CACT,CCr1RA,MAAqBytI,WAAqBh/G,EAAU,CAClD,YAAY7vB,EAAgBkS,EAAgB48H,EAAwB,CAClE,MAAM,oBAAqB,CACzB,MAAO,eAAe58H,EAAK,OAAS,EAAI,IAAM,EAAE,OAChD,YAAaA,EAAK,OAAS,EAAI,QAAUA,EAAK,OAAS,iBAAmB,oBAC1E,QAAS,CAAC,CACR,QAAS,OACT,SAAU,IAAM,CACd48H,GAAaA,EAAU,EACvB,KAAK,SAAS,mBAAmB,sBAAsB9uI,EAAQkS,CAAI,CACrE,EACD,EACF,EAED,KAAK,KAAK,CACZ,CACF,CClBA,SAAwB68H,IAAkB,CACrC,OAAO,aACL,OAAO,aAAa,EAAE,MAChB,sBAAe,QACd,OAAO,aAAa,EAAE,iBACvB,sBAAe,kBAGhB,SAAS,WAEjB,SAAS,UAAU,OAEvB,CClBA,MAAMC,GAAgB,OAAO,WAAW,4BAA4B,EAAE,QC+ChEC,GAAoBzmH,GACjB,CAAC,GAAGA,EAAI,OAAQ,GAAE,OAAO,CAAC1N,EAAKkgB,IAAMlgB,EAAMkgB,EAAE,KAAM,CAAC,EAK7D,MAAMk0G,WAAqB59G,EAExB,CAgCD,YAAYvxB,EAUT,CACD,MAAM,EAAK,EA1CN,sBAA6C,IACpD,KAAO,YAAc,GAsGb,iBAAewM,GAAkB,CAEvC,MAAMiI,EAAU+Q,EAAgBhZ,EAAE,OAAQ,KAAK,qBAAqB,EAKpE,GAJGA,EAAE,SAAW,GAIb,KAAK,cAAgB,CAAC,KAAK,aAAaA,EAAGiI,CAAO,EACnD,OAGI,MAAA6O,MAAyC,IAC3C,IAAA8rH,EAaAC,EAAc56H,EAElB,MAAM66H,EAAiB,CAAC76H,EAAsB86H,EAAe,KAAS,CAC9D,MAAA3hI,EAAM,CAAC6G,EAAQ,QAAQ,IAC7B,GAAG,CAAC7G,GAAO,CAAC6G,EAAQ,QAAQ,OAAQ,OACpC,MAAMxU,EAASwU,EAAQ,QAAQ,OAAO,SAAS,EAE3CiJ,GAAQ2xH,CAAW,IACP56H,KAGZ,IAAA+6H,EAAUlsH,EAAK,IAAIrjB,CAAM,EAK1B,GAJCuvI,GACFlsH,EAAK,IAAIrjB,EAAQuvI,EAAU,IAAI,GAAK,EAGnCA,EAAQ,IAAI5hI,CAAG,EAChB,OAGF,MAAM6hI,EAAa,KAAK,cAAcxvI,EAAQ2N,CAAG,EAQjD,GAPGwhI,IAAc,SAEfA,EAAY,CAACK,GAGfD,EAAQ,IAAI5hI,CAAG,EAEXwhI,GAAa,CAACK,GAAgB,CAACL,GAAaK,EAAa,CACrD,MAAAC,EAAaR,GAAiB5rH,CAAI,EACrC,QAAK,iBAAmBisH,EAAc,CACpCG,EAAa,GACX/9G,GAAcld,EAAS46H,CAAW,IACrB56H,KAIlB,MAAMk7H,EAAkB,KAAK,mBAAmBN,EAAa56H,CAAO,EAEjEk7H,EAAgB,QACDA,EAAA,QAASl7H,GAAY,CACnC66H,EAAe76H,EAAS,EAAK,EAC9B,CAEL,CAEG,GAAC,KAAK,aAAa,KAQZ,KAAK,iBACb,KAAK,gBAAgBA,CAAO,UARzBi7H,IAAe,GAAK,KAAK,YAC1B,SAAU,CAACzvI,EAAQkS,CAAI,IAAKmR,EAC1B,UAAU1V,KAAOuE,EACV,iBAAYlS,EAAQ2N,CAAG,CAOtC,GAIF,IAAIgiI,EAAoB,GAClB,MAAAh0F,EAAepvC,GAAkB,CACjCojI,IACcZ,KACIY,EAAA,GACX,cAAK,UAAU,IAAI,WAAW,GAczC,MAAMn7H,EAAU,KAAK,qBAAqBjI,EAAE,MAAqB,EACjE,GAAIiI,EAKD,SAAK,uBAAyB,CAAC,KAAK,sBAAsBjI,EAAGiI,EAAS26H,CAAS,EAAG,CACnF,KAAK,eAAe,aAAa,KAAK,cAAe,YAAaxzF,CAAW,EAC7E,KAAK,eAAe,aAAa,SAAU,UAAWC,EAAWg0F,CAAuB,EACxF,MACF,CAEAP,EAAe76H,CAAO,IAGlBonC,EAAarvC,GAAkB,CAC1B,cAAK,UAAU,OAAO,WAAW,EAEvC8W,EAAK,MACWxG,EAAA,OAAQD,GAAa,CAAC,QAAS,GAAM,KAAM,GAAM,QAAS,GAAM,EAGnF,KAAK,eAAe,aAAa,KAAK,cAAe,YAAa++B,CAAW,EAI7DozF,IAAA,EAGZa,EAA0B,CAAC,KAAM,IACvC,KAAK,eAAe,IAAI,KAAK,aAAa,EAAE,YAAaj0F,CAAW,EACpE,KAAK,eAAe,IAAI,QAAQ,EAAE,UAAWC,EAAWg0F,CAAuB,GAGzE,wBAAqB,CAACloI,EAAoBE,IAAsB,CACtE,GAAGF,IAAUE,EACX,MAAO,GAGH,MAAAioI,EAAYnoI,EAAM,wBAClBooI,EAAWloI,EAAK,wBAEhBmoI,GADcF,EAAU,IAAMC,EAAS,KAASD,EAAU,KAAOC,EAAS,MAClD,EAExB/R,EAASx4G,EAAgB7d,EAAO,KAAK,4BAA4B,EACvE,GAAG,CAACq2H,EACF,MAAO,GAGT,MAAMn7H,EAAW,MAAM,KAAKm7H,EAAO,iBAAiB,KAAK,0BAA0B,CAAC,EAChF,IAAAiS,EAAaptI,EAAS,QAAQ8E,CAAK,EACnC+6H,EAAY7/H,EAAS,QAAQgF,CAAI,EAErC,OAAImoI,IACF,CAACtN,EAAWuN,CAAU,EAAI,CAACA,EAAYvN,CAAS,GAGpC7/H,EAAS,MAAMotI,EAAa,EAAGvN,CAAS,CAI/C,EA8JF,qBAAmBwN,GAA2B,CAChDA,IAAc,KAAK,aAAe,IACrC,KAAK,oBAAoB,EACzB,KAAK,aAAa,QAClB,KAAK,gBAAgB,EACLlB,KACbkB,IAAc,KAAK,aAAe,SArYrCj5H,GAAW,KAAMjX,CAAO,EAEnB,oBAAiB,eAAiB0uC,IACzC,CAEO,gBAAgByhG,EAA4Bl7G,EAAgC,CAQjF,GAPG,KAAK,eACN,KAAK,eAAe,YAGtB,KAAK,cAAgBk7G,EACrB,KAAK,eAAiBl7G,EAEnB,EAACk7G,EAIJ,IAAGv+G,GAAoB,CACrBqD,EAAe,IAAIk7G,CAAa,EAAE,WAAY,IAAM,CAC9C,KAAK,cACT,KAAK,aAAe9mB,KAAgB,CACrC,EAEyB/xF,GAAA,CACxB,QAAS64G,EACT,SAAW3jI,GAAM,CACf,GAAG,KAAK,aAAgB,KAAK,sBAAwB,CAAC,KAAK,qBAAqB,EAAI,OAEpF,KAAK,mBAAmBA,CAAC,EAGhB,cAAK,UAAU,IAAI,WAAW,EACzB2jI,EAAA,iBAAiB,WAAa3jI,GAAM,CAChDqQ,GAAYrQ,CAAC,EACJ,cAAK,UAAU,OAAO,WAAW,GAGzC,CAAC,KAAM,GAAM,QAAS,EAAK,GAE3BslB,IAAoBm9G,IACPkB,EAAA,iBAAiB,YAAatzH,GAAa,CAAC,KAAM,GAAM,QAAS,GAAK,EAGtEmyH,KAChBnyH,GAAYrQ,CAAQ,EACpB,MAAMiI,EAAU,KAAK,qBAAqBjI,EAAE,MAAqB,EAC9DiI,GACD,KAAK,gBAAgBA,CAAO,CAEhC,EACA,eAAAwgB,CAAA,CACD,EAED,MACF,CAEAA,EAAe,IAAIk7G,CAAa,EAAE,YAAa,KAAK,WAAW,EACjE,CA2KU,0BAA0B17H,EAAsB,CACjD,YAAK,cAAcA,EAAQ,QAAQ,OAAO,WAAY,CAACA,EAAQ,QAAQ,GAAG,CACnF,CAEU,eAAeA,EAAsByb,EAA8B,CACnEzb,EAAA,QAAQyb,EAAc,KAAK,CACrC,CAEO,sBAAsBzb,EAAsBkoD,EAAe,CAChE,MAAMyzE,EAAc,CAAC,CAAC,KAAK,4BAA4B37H,CAAO,EAC9D,GAAGkoD,EAAM,CACP,GAAGyzE,EACM,SAGH,MAAAlgH,EAAgB,IAAIC,GAAc,CACtC,KAAM1b,EAAQ,QAAQ,IACtB,MAAO,GACR,EAGE,KAAK,aACH,KAAK,0BAA0BA,CAAO,IACvCyb,EAAc,MAAM,QAAU,GACtBzb,EAAA,UAAU,IAAI,aAAa,GAIlC,oBAAeA,EAASyb,CAAa,OAClCkgH,IACR,KAAK,4BAA4B37H,CAAO,EAAE,cAAc,OAAO,EACjDwH,GAAA,CACZ,QAAAxH,EACA,UAAW,cACX,SAAU,GACV,SAAU,IACX,GAGI,QACT,CAEU,4BAA4BA,EAAwC,CAC5E,OAAOA,EAAQ,mBAAmB,UAAY,SAC5CA,EAAQ,kBAAkB,iBAC9B,CAEA,MAAgB,gBAAgB47H,EAAiB,GAAO,CAChD,MAAAjvI,EAAO,KAAK,aAAa,KAC5B,IAACA,GAAQ,CAACivI,EAAgB,OAEzB,IAAAC,EAAc,CAAClvI,EACjBmvI,EAAa,CAACnvI,EACdovI,EAAW,CAACpvI,EACZqvI,EAAU,CAACrvI,EAEb,GAAG,KAAK,UAAW,CACHkvI,EAAA,GACHE,EAAA,GACX,MAAMvwI,EAAS,KAAK,aAAa,KAAK,EAAE,KAAO,QACzC8Q,EAAI,MAAM,KAAK,SAAS,kBAAkB,qBAAqB9Q,EAAQ,MAAM,KAAK,KAAK,aAAa,IAAIA,CAAM,CAAC,CAAC,EACtHwwI,EAAU1/H,EAAE,QACZw/H,EAAax/H,EAAE,UACjB,KAAO,UAAU,CAAC9Q,EAAQkS,CAAI,IAAK,KAAK,aAAc,CAC9C,MAAA+rB,EAAa,KAAK,cAAcj+B,CAAM,EACtC8Q,EAAI,MAAM,KAAK,SAAS,mBAAmB,sBAAsBmtB,EAAY,MAAM,KAAK/rB,CAAI,CAAC,EAInG,GAHAm+H,EAAcv/H,EAAE,YAChBw/H,EAAax/H,EAAE,WAEZu/H,GAAeC,EAAY,KAChC,CAEA,KAAK,oBAAoBD,EAAaC,EAAYC,EAAUC,CAAO,CACrE,CAEQ,cAAcxwI,EAAoC,CACxD,MAAO,GAAGA,CAAM,IAAI,KAAK,YAAc,YAAc,SAAS,EAChE,CAEO,iBAAkB,CAChB,OAAAmzB,GAAQ,CAAC,GAAG,KAAK,aAAa,QAAQ,EAAE,IAAKpiB,GAAQ,CAAC,GAAGA,CAAG,CAAC,CAAC,EAAE,KAAK,CAACrI,EAAGwsB,IAAMxsB,EAAIwsB,CAAC,CAC7F,CAEO,qBAAsB,CAC3B,MAAMu7G,EAAgF,GACtF,YAAK,aAAa,QAAQ,CAACv+H,EAAMlS,IAAW,CACpC,MAAAi+B,EAAa,KAAK,cAAcj+B,CAAM,EACtCuC,EAAI,MAAM,KAAK2P,CAAI,EAAE,IAAKvE,GAAQ,KAAK,SAAS,mBAAmB,sBAAsBswB,EAAYtwB,CAAG,CAAC,EACtF8iI,EAAA,KAAK,GAAGluI,CAAC,EACnC,EACM,QAAQ,IAAIkuI,CAAwB,CAC7C,CAEO,gBAAgBC,EAAmB,GAAMN,EAAiB,GAAO,CACtE,MAAMO,EAAe,KAAK,YACpBxvI,EAAO,KAAK,aAAa,KAG/B,GAFK,iBAAc,CAAC,CAACA,GAAQivI,EAE1BO,IAAiB,KAAK,YAAoB,SAExC,mBAAc,SAAU,KAAK,WAAW,EAYzCh/G,KACF,KAAK,cAAc,UAAU,OAAO,YAAa,KAAK,WAAW,EAE9Dg/G,GAEe5B,MAaFz7D,KAEZ,MAAAp3D,EAAW,CAAC,CAAC/a,GAAQivI,EACrBQ,EAAe,KAAK,oBAAoB10H,EAAU,CAAC,KAAK,YAAY,EAE1E,OAAI2V,KACC3V,EACD4V,GAAwB,SAAS,CAC/B,KAAM,KAAK,eACX,MAAO,IAAM,CACX,KAAK,gBAAgB,CACvB,EACD,EAEuBA,GAAA,aAAa,KAAK,cAAc,GAIzDs+G,IACAQ,GAAgB,QAAQ,WAAW,KAAK,IAAM,KAAK,gBAAgBR,CAAc,CAAC,EAG9E,EACT,CAWO,SAAU,CACf,KAAK,aAAe,GACpB,KAAK,aAAa,QAClB,KAAK,gBAAgB,EAAK,EAC1B,KAAK,aAAe,MACtB,CAEU,uBAAuB57H,EAAsBg7H,EAAqB,CACrE,2BAAsBh7H,EAAS,EAAI,EAClC,MAAAme,EAAQ,KAAK,4BAA4Bne,CAAO,EACtDme,EAAM,QAAU68G,EAEhB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACPxzH,GAAA,CACZ,QAAAxH,EACA,UAAW,cACX,SAAUg7H,EACV,SAAU,IACX,CACH,CAEO,cAAcxvI,EAAgB2N,EAAa,CAEhD,MAAO,CAAC,CADI,KAAK,aAAa,IAAI3N,CAAM,GAC1B,IAAI2N,CAAG,CACvB,CAEO,QAAS,CACP,OAAAshI,GAAiB,KAAK,YAAY,CAC3C,CAEU,UAAUjvI,EAAgB2N,EAAakjI,EAAoB,CACnE,IAAI9/H,EAAM,KAAK,aAAa,IAAI/Q,CAAM,EACtC,OAAG6wI,GAAaA,IAAa,QAAa9/H,GAAK,IAAIpD,CAAG,EACjDoD,IACDA,EAAI,OAAOpD,CAAG,EAEVoD,EAAI,MACD,kBAAa,OAAO/Q,CAAM,IAuB/B+Q,IACFA,MAAU,IACL,kBAAa,IAAI/Q,EAAQ+Q,CAAG,GAGnCA,EAAI,IAAIpD,CAAG,GAGN,EACT,CAKO,mBAAmB3N,EAAgBkS,EAAgB9E,EAAiB,CACzE,MAAM2D,EAAM,KAAK,aAAa,IAAI/Q,CAAM,EACxC,GAAG,CAAC+Q,EACF,OAGGmB,EAAA,QAASvE,GAAQ,CACpBoD,EAAI,OAAOpD,CAAG,EACf,EAEGoD,EAAI,MACD,kBAAa,OAAO/Q,CAAM,EAGjC,MAAM4sE,EAAQ,IAAM,CAClB,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,GAGvB,OAAIx/D,GAAaw/D,IACVA,CACT,CACF,CAEO,MAAMkkE,WAAwB5B,EAAa,CAWhD,YACU6B,EACR3wI,EACA40B,EACA,CACM,OACJ,SAAA50B,EACA,aAAc,CAACmM,EAAG+Y,IAAW,CAAC,CAACA,GAAU,KAAK,YAC9C,qBAAuBA,GAAWC,EAAgBD,EAAQ,mBAAmB,EAC7E,sBAAuB,oBACvB,6BAA8B,WAC9B,2BAA4B,qBAC7B,EAXO,iBAAAyrH,EAwCH,qBAAmBv8H,GAAyB,CAC3C,MAAA7G,EAAM,CAAC6G,EAAQ,QAAQ,IACvBxU,EAASwU,EAAQ,QAAQ,OAAO,SAAS,EAE3C,KAAK,UAAUxU,EAAQ2N,CAAG,GAI9B,KAAK,uBAAuB6G,EAAS,KAAK,cAAcxU,EAAQ2N,CAAG,CAAC,GAG/D,iBAAc,CAAC3N,EAAgB2N,IAAgB,CAC9C,MAAA6G,EAAU,KAAK,YAAY,SAAS,WAAW,cAAc,oCAAoCxU,CAAM,gBAAgB2N,CAAG,IAAI,EACpI,KAAK,gBAAgB6G,CAAO,GAGvB,0BAAuB,MAAM68D,GAAmB,CAC/C,MAAArxE,EAAS,CAAC,GAAG,KAAK,aAAa,KAAM,GAAE,CAAC,EAC9CqxE,MAAQ,CAAC,GAAG,KAAK,aAAa,IAAIrxE,CAAM,CAAC,GACzC,MAAMssC,GAAkB,CACtB,aAAc+kC,EAAI,SAAW,EAAI,mBAAqB,qBACtD,mBAAoBA,EAAI,SAAW,EAAI,sBAAwB,wBAC/D,oBAAqB,CAACA,EAAI,MAAM,EAChC,OAAQ,CACN,QAAS,SACT,SAAU,EACZ,EACD,EACD,KAAK,gBAAgB,EACrB,KAAK,SAAS,kBAAkB,cAAcrxE,EAAQqxE,CAAG,GAGpD,gBAAa,CAACA,EAAek+C,IAAiB,CAC7C,MAAAvvH,EAAS,CAAC,GAAG,KAAK,aAAa,KAAM,GAAE,CAAC,EAC9CqxE,MAAQ,CAAC,GAAG,KAAK,aAAa,IAAIrxE,CAAM,CAAC,GACzC,MAAM2L,EAAU,KAAK,SAAS,kBAAkB,aAAa3L,EAAQqxE,EAAKk+C,CAAG,EAC7E,KAAK,gBAAgB,EACrB5jH,EAAQ,KAAK,IAAM,CACd0lE,EAAI,SAAW,EAChB7+C,GAAS,CAAC,YAAa+8F,EAAM,uBAAyB,0BAA2B,GAExE/8F,GAAA,CAAC,YAAa+8F,EAAM,kBAAoB,gBAAiB,kBAAmB,CAACl+C,EAAI,MAAM,EAAE,CACpG,CACD,GAGI,qBAAkB,CAACA,EAAek+C,IAAiB,CACxD,MAAMvvH,EAAS,CAAC,GAAG,KAAK,aAAa,MAAM,EAAE,CAAC,GAAK,KAAK,YAAY,cAAc,OAC5E2L,EAAU,KAAK,SAAS,kBAAkB,kBAAkB3L,EAAQqxE,EAAKk+C,CAAG,EAClF,KAAK,gBAAgB,EACb5jH,EAAA,MAAOwF,GAAQ,CACjBA,EAAiB,OAAS,qBACnBqhB,GAAA,CAAC,YAAa,kBAAmB,kBAAmB,CAAErhB,EAAiB,KAAK,EAAE,CACzF,CACD,GAGH,KAAU,kBAAoB,CAACk/H,EAAsBC,EAAqBC,EAAmBC,IAAqB,CAC1G,MAAAhxI,EAAS,KAAK,SACL6X,GAAA,KAAK,iBAAkB9S,EAAK,KAAK,UAAY,eAAiB,WAAY,CAAC/E,CAAM,CAAC,CAAC,EAClG,KAAK,gBAAgB,UAAU,OAAO,OAAQ,CAAC,KAAK,WAAagxI,CAAO,EACxE,KAAK,iBAAiB,UAAU,OAAO,OAAQ,KAAK,WAAahxI,IAAW,CAAC,EAC7E,KAAK,oBAAoB,UAAU,OAAO,OAAQ6wI,CAAW,EAC7D,KAAK,oBAAsB,KAAK,mBAAmB,UAAU,OAAO,OAAQC,CAAU,GAG9E,uBAAoB,CAACp0H,EAAmBgP,IAAqB,CAyBrE,GAxBclP,GAAA,CACZ,QAAS,KAAK,YAAY,uBAC1B,UAAW,eACX,SAAAE,EACA,SAAUgP,EAAU,IAAM,EAC1B,gBAAiB,IAAM,CACjB,KAAK,cACP,KAAK,mBAAmB,SACxB,KAAK,mBACH,KAAK,oBACL,KAAK,mBACL,KACF,KAAK,aAAe,OAExB,EACD,EAEalP,GAAA,CACZ,QAAS,KAAK,YAAY,UAC1B,UAAW,eACX,SAAAE,EACA,SAAU,IACX,EAEE,KAAK,aACH,CAAC,KAAK,mBAAoB,CAC3B,MAAM6wH,EAAa,yBACd,wBAAqB,SAAS,cAAc,KAAK,EACtD,KAAK,mBAAmB,UAAU,IAAIA,EAAa,YAAY,EAEzD,MAAAiE,EAAYzvG,GAAW,SAASwrG,CAAU,UAAW,CAAC,SAAU,GAAK,EAC1DlwH,EAAAm0H,EAAW,IAAM,KAAK,gBAAgB,EAAG,CAAC,eAAgB,KAAK,eAAgB,KAAM,EAAK,GAEtG,sBAAmB,SAAS,cAAc,KAAK,EACpD,KAAK,iBAAiB,UAAU,IAAIjE,EAAa,QAAQ,EAEzD,MAAMkE,EAAyC,CAAC,eAAgB,KAAK,cAAc,EAE9E,qBAAkB1vG,GAAW,GAAG,KAAK,iBAAmB,MAAQ,OAAO,IAAIwrG,CAAU,MAAM,EAC/ElwH,EAAA,KAAK,gBAAiB,IAAM,KAAK,WAAW,OAAW,KAAK,gBAAgB,EAAGo0H,CAAkB,EAElH,KAAK,iBAAmB1vG,GAAW,WAAWwrG,CAAU,OAAO,EAC9ClwH,EAAA,KAAK,iBAAkB,IAAM,CACtC,MAAA7c,EAAS,CAAC,GAAG,KAAK,aAAa,KAAM,GAAE,CAAC,EACxC2N,EAAM,CAAC,GAAG,KAAK,aAAa,IAAI3N,CAAM,CAAC,EAAE,CAAC,EAChD,KAAK,gBAAgB,EAErBokC,GAAa,aAAa,CACxB,OAAApkC,EACA,UAAW2N,EACX,SAAU,KAAK,YAAY,SAAS,OAAS,QAAU,KAAK,YAAY,cAAc,OAAS,KAAK,YAAY,cAAc,SAC/H,GACAsjI,CAAkB,EAErB,KAAK,oBAAsB1vG,GAAW,WAAWwrG,CAAU,UAAU,EACpDlwH,EAAA,KAAK,oBAAqB,IAAM,CAC/C,MAAM+E,EAAwC,GAC9C,SAAU,CAAC29D,EAAYrtE,CAAI,IAAK,KAAK,aAC/B0P,EAAA29D,CAAU,EAAI,MAAM,KAAKrtE,CAAI,EAAE,KAAK,CAACxJ,EAAGwsB,IAAMxsB,EAAIwsB,CAAC,EAG5CpF,GAAA,YAAYqvD,GAAcv9D,EAAK,IAAM,CAChD,KAAK,gBAAgB,EACtB,GACAqvH,CAAkB,EAElB,KAAK,YACN,KAAK,mBAAqB1vG,GAAW,iBAAiBwrG,CAAU,SAAS,EACxDlwH,EAAA,KAAK,mBAAoB,IAAM,CAC9C,GAAG,KAAK,UAAW,CACjB,KAAK,qBAAqB,EAC1B,MACF,CAEM,MAAA7c,EAAS,KAAK,YAAY,cAAc,OACjC8vB,GAAA,YACXohH,GACAlxI,EACA,KAAK,gBAAgB,EACrBg9E,GAAS,KACT,IAAM,CACJ,KAAK,gBAAgB,CACvB,IAEDi0D,CAAkB,GAGlB,wBAAmB,OAAO,GAAG,CAChCD,EACA,KAAK,iBACL,KAAK,gBACL,KAAK,iBACL,KAAK,oBACL,KAAK,oBACL,OAAO,OAAO,CAAC,EAEjB,MAAMG,EAAoB,KAAK,mBAC/BA,EAAkB,MAAM,QAAU,IAC7B,iBAAY,uBAAuB,OAAOA,CAAiB,EAE3DA,EAAkB,WACvBA,EAAkB,MAAM,QAAU,EACpC,CACF,EArMK,eAAY,CAACJ,EAAY,WAC9B,CAACp/G,IAAsB,KAAK,gBAAgBo/G,EAAY,UAAW/7G,CAAc,CACnF,CAYO,gBAAgB07G,EAAmB,GAAMN,EAAiB,GAAO,CACtE,MAAM9gI,EAAM,MAAM,gBAAgBohI,EAAkBN,CAAc,EAElE,OAAG9gI,GAAOohI,GACS,MAAM,KAAK,KAAK,YAAY,cAAc,iBAAiB,oBAAoB,CAAC,EACxF,QAASl8H,GAAY,CACvB,2BAAsBA,EAAS,KAAK,WAAW,EACrD,EAGIlF,CACT,CA8KF,CAEA,MAAqB8hI,WAAsBlC,EAAa,CAUtD,YACU9nG,EACA8d,EACAvyB,EACRvyB,EACA,CACM,OACJ,SAAAA,EACA,qBAAuBklB,GAAWC,EAAgBD,EAAQ,cAAc,GAAKC,EAAgBD,EAAQ,QAAQ,EAC7G,aAAc,CAAC/Y,EAAG+Y,IAQT,EALK,CAAC,KAAK,aAAa,MAC7B,CAAE/Y,EAAE,OAAuB,UAAU,SAAS,QAAQ,GACtD,CAAEA,EAAE,OAAuB,UAAU,SAAS,oBAAoB,GAClE+Y,GAIJ,sBAAuB,CAAC/Y,EAAGiI,EAAS26H,IAK3B,EAJK5iI,EAAE,SAAWiI,GACvB,CAAEjI,EAAE,OAAuB,UAAU,SAAS,oBAAoB,GAClE4iI,IAAc,QACd,CAAC,KAAK,aAAa,MAGvB,qBAAsB,IAAM,CAAC,KAAK,KAAK,MAAM,UAC7C,sBAAuB,SACvB,6BAA8B,gBAC9B,2BAA4B,qDAC5B,iBAAkB,IAAM,CACtB,KAAM,CAAC,kBAAAkC,CAAqB,OAAK,KAAK,QACtCA,GAAmB,MAAM,CAC3B,EACD,EAjCO,UAAAjqG,EACA,aAAA8d,EACA,WAAAvyB,EA4EH,qBAAmBwyB,GAAuC,CAC5D,IAAC,KAAK,gBAAgBA,CAAM,EAAG,OAE5B,MAAAx3C,EAAM,CAACw3C,EAAO,QAAQ,IACtBnlD,EAASmlD,EAAO,QAAQ,OAAO,SAAS,EAG9C,GADkBA,EAAO,UAAU,SAAS,YAAY,EAC1C,CACZ,GAAG,CAAC,KAAK,wBAAwBA,CAAM,EAAG,CACxC,MAAMp0C,EAAM,KAAK,aAAa,IAAI/Q,CAAM,EACrC+Q,GAEY,KAAK,0BAA0Bo0C,CAAM,EAC7C,QAAQ,CAAC,CAAC,IAAAx3C,CAAS,IAAAoD,EAAI,OAAOpD,CAAG,CAAC,CAE3C,CAEuB,KAAK,QAAQ,sBAAsBw3C,CAAM,EAAE,IAAI,KAAK,eAAe,EAE1F,MACF,CAEA,GAAG,CAAC,KAAK,UAAUnlD,EAAQ2N,CAAG,EAC5B,OAIF,GADsBw3C,EAAO,UAAU,SAAS,cAAc,EAC5C,CACV,MAAAmsF,EAAiB/rH,EAAgB4/B,EAAQ,QAAQ,EACjDosF,EAAoB,KAAK,wBAAwBD,CAAc,EAC/DE,EAAwB,KAAK,sBAAsBF,CAAc,GAEpDE,GAAyBD,IAErC,4BAAuBD,EAAgBE,CAAqB,CAErE,CAEA,KAAK,uBAAuBrsF,EAAQ,KAAK,cAAcnlD,EAAQ2N,CAAG,CAAC,GAG3D,iBAAc,MAAM3N,EAAgB2N,IAAgB,CACtD,MAAA+yF,EAAU,MAAM,KAAK,QAAQ,iBAAiBwzB,GAAYl0H,EAAQ2N,CAAG,CAAC,EACzE+yF,GACI,qBAAgBA,EAAQ,MAAM,CACrC,EA+DQ,uBAAoB,MAAMxkF,EAAmBgP,IAAqB,CACpE,MAAC,eAAAumH,EAAgB,UAAAC,EAAW,QAAAC,GAAW,MAAM,KAAK,KAAK,MAAM,OAAOzmH,CAAO,EAEnElP,GAAA,CACZ,QAAS,KAAK,cACd,UAAW,eACX,SAAAE,EACA,SAAUgP,EAAU,IAAM,EAC1B,gBAAiB,IAAM,CACjB,KAAK,cACP,KAAK,sBAAsB,SAC3B,KAAK,sBACH,KAAK,mBACL,KAAK,oBACL,KAAK,oBACL,KAAK,mBACL,KAAK,cACL,KAAK,eACL,KACF,KAAK,aAAe,OAMxB,EACD,EAID,MAAM0mH,EAAoBF,EAAYC,EAAU,OAAYF,EAAiB,EAC7E,GAAG,KAAK,YAAa,CAChB,IAAC,KAAK,mBAAoB,CACtB,2BAAwB,SAAS,cAAc,KAAK,EACzD,KAAK,sBAAsB,UAAU,IAAI,qBAAsB,mBAAmB,EAK7E,wBAAqB,SAAS,cAAc,KAAK,EACjD,wBAAmB,UAAU,IAAI,qBAAqB,EAE3D,MAAMR,EAAyC,CAAC,eAAgB,KAAK,cAAc,EAC7ED,EAAYzvG,GAAW,QAAS,CAAC,SAAU,GAAK,EACrC1kB,EAAAm0H,EAAW,IAAM,KAAK,gBAAgB,EAAG,CAAC,KAAM,GAAM,eAAgB,KAAK,cAAe,GAEtG,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,2BAA2B,EAE5D,KAAK,KAAK,OAASh0D,GAAS,WAC7B,KAAK,oBAAsBxjD,GAAO,2EAA4E,CAAC,KAAM,QAAQ,EAC7H,KAAK,oBAAoB,OAAOj1B,EAAK,qBAAqB,CAAC,EAC1CsY,EAAA,KAAK,oBAAqB,IAAM,CAC/CiT,GAAa,YAAY++G,GAAc,KAAK,KAAK,OAAQ,CAAC,GAAG,KAAK,aAAa,IAAI,KAAK,KAAK,MAAM,CAAC,EAAG,IAAM,CAC3G,KAAK,gBAAgB,EACtB,GACAoC,CAAkB,IAErB,KAAK,oBAAsBz3G,GAAO,oEAAqE,CAAC,KAAM,UAAU,EACxH,KAAK,oBAAoB,OAAOj1B,EAAK,SAAS,CAAC,EAC9BsY,EAAA,KAAK,oBAAqB,IAAM,CAC/C,MAAM+E,EAAwC,GAC9C,SAAU,CAAC29D,EAAYrtE,CAAI,IAAK,KAAK,aAC/B0P,EAAA29D,CAAU,EAAI,MAAM,KAAKrtE,CAAI,EAAE,KAAK,CAACxJ,EAAGwsB,IAAMxsB,EAAIwsB,CAAC,EAG5CpF,GAAA,YAAYqvD,GAAcv9D,EAAK,IAAM,CAChD,KAAK,gBAAgB,EACtB,GACAqvH,CAAkB,GAGvB,KAAK,mBAAqBz3G,GAAO,0EAA2E,CAAC,KAAM,SAAS,EAC5H,KAAK,mBAAmB,OAAOj1B,EAAK,QAAQ,CAAC,EAC5BsY,EAAA,KAAK,mBAAoB,IAAM,CAKjCiT,GAAA,YACXohH,GACA,KAAK,KAAK,OACV,KAAK,gBAAgB,EACrB,KAAK,KAAK,KACV,IAAM,CACJ,KAAK,gBAAgB,CACvB,IAEDD,CAAkB,EAErB,MAAMj6G,EAAO,KAAK,cAAgB,SAAS,cAAc,KAAK,EACzDA,EAAA,UAAU,IAAI,0BAA0B,EACxCA,EAAA,OAAOg6G,EAAW,KAAK,gBAAgB,EAE5C,MAAM51G,EAAQ,KAAK,eAAiB,SAAS,cAAc,KAAK,EAC1DA,EAAA,UAAU,IAAI,2BAA2B,EAC/CA,EAAM,OAAO,GAAG,CACd,KAAK,oBACL,KAAK,oBACL,KAAK,oBACL,OAAO,OAAO,CAAC,EAEdw2G,IAAsB,SACvB56G,EAAK,MAAM,UAAY,cAAc,CAAC46G,CAAiB,MACjDx2G,EAAA,MAAM,UAAY,cAAcw2G,CAAiB,OAGpD,wBAAmB,OAAO56G,EAAMoE,CAAK,EAGrC,2BAAsB,MAAM,QAAU,IAC3C,KAAK,sBAAsB,OAAyB,KAAK,oBACzD,KAAK,MAAM,eAAe,OAAO,KAAK,qBAAqB,EAEtD,KAAK,sBAAsB,WAE3B,2BAAsB,MAAM,QAAU,EAC7C,CAEK,mBAAc,MAAM,UAAY,GAChC,oBAAe,MAAM,UAAY,EAC9B,WAAK,eAAiBw2G,IAAsB,SACpD,KAAK,cAAc,MAAM,UAAY,eAAeA,CAAiB,MACrE,KAAK,eAAe,MAAM,UAAY,cAAcA,CAAiB,MACvE,EAGF,KAAU,kBAAoB,CAACvB,EAAsBC,EAAqBC,IAAsB,CAC/El5H,GAAA,KAAK,iBAAkB9S,EAAK,WAAY,CAAC,KAAK,QAAQ,CAAC,CAAC,EAClE,0BAAqB,gBAAgB,WAAYgsI,CAAQ,EACzD,0BAAqB,gBAAgB,WAAYF,CAAW,EAC5D,yBAAoB,gBAAgB,WAAYC,CAAU,GAGjE,KAAU,kBAAoB,SAAW,EA9RzC,CAEO,eAAenrF,EAAqBl1B,EAA8B,CACzDA,EAAA,MAAM,UAAU,IAAI,wBAAwB,EAEvDk1B,EAAO,UAAU,SAAS,oBAAoB,EAC/CA,EAAO,cAAc,0BAA0B,EAAE,OAAOl1B,EAAc,KAAK,EAErE,qBAAek1B,EAAQl1B,CAAa,CAE9C,CAEO,gBAAgBygH,EAAmB,GAAMN,EAAiB,GAAO,CACtE,MAAM9gI,EAAM,MAAM,gBAAgBohI,EAAkBN,CAAc,EAElE,GAAG9gI,GAAOohI,EAAkB,CAC1B,MAAMrxG,EAAU,KAAK,QAAQ,mBAAmB,KAAK,EACrD,UAAUg1F,KAAWh1F,EAAS,CAC5B,GAAG,KAAK,QAAQ,YAAY,IAAIg1F,CAAO,EACrC,SAGF,MAAMlvE,EAAS,KAAK,QAAQ,UAAUkvE,CAAO,EACxC,2BAAsBlvE,EAAQ,KAAK,WAAW,CACrD,CACF,CAEO,OAAA71C,CACT,CAEO,sBAAsB61C,EAAqBuX,EAAe,CAC5D,IAAC,KAAK,gBAAgBvX,CAAM,EAAG,OAElC,MAAM71C,EAAM,MAAM,sBAAsB61C,EAAQuX,CAAI,EACpD,OAAGptD,GACiB61C,EAAO,UAAU,SAAS,YAAY,GAEjD,aAAQ,sBAAsBA,CAAM,EAAE,QAASn7C,GAAS,KAAK,sBAAsBA,EAAM0yD,CAAI,CAAC,EAIhGptD,CACT,CAkDO,0BAA0BkF,EAAsB,CACrD,MAAMq9H,EAAYr9H,EAAQ,UAAU,SAAS,YAAY,EAClD,aAAM,0BAA0BA,CAAO,IAAM,CAACq9H,GAAa,KAAK,sBAAsBr9H,CAAO,EACtG,CAEU,wBAAwB2wC,EAAqB,CAErD,OAD6B,KAAK,4BAA4BA,CAAM,GACvC,OAC/B,CAEU,0BAA0BmsF,EAA6B,CAC/D,MAAM1uI,EAAW,KAAK,KAAK,QAAQ,sBAAsB0uI,CAAc,EACpE,OAAC1uI,EAAS,QACXA,EAAS,KAAK0uI,CAAc,EAGvB1uI,EAAS,IAAK4R,IACZ,CACL,IAAK,CAACA,EAAQ,QAAQ,IACtB,OAAQA,EAAQ,QAAQ,OAAO,SAAS,GAE3C,CACH,CAEU,sBAAsB88H,EAA6B,CACrD,MAAAp/H,EAAO,KAAK,0BAA0Bo/H,CAAc,EACpDQ,EAAe5/H,EAAK,OAAO,CAAC,CAAC,OAAAlS,EAAQ,IAAA2N,CAAG,IAAM,KAAK,cAAc3N,EAAQ2N,CAAG,CAAC,EAC5E,OAAAuE,EAAK,SAAW4/H,EAAa,MACtC,CAEU,4BAA4B3sF,EAAqB,CAgBlD,OAAAA,EAAO,UAAU,SAAS,oBAAoB,EACnDA,EAAO,cAAc,aAAa,EAClC,MAAM,4BAA4BA,CAAM,CAC5C,CAEO,gBAAgBA,EAAqB,CAC1C,OAAOA,GACL,CAACA,EAAO,UAAU,SAAS,SAAS,GACpC,CAACA,EAAO,UAAU,SAAS,aAAa,GACxC,CAACA,EAAO,UAAU,SAAS,UAAU,GACrC,CAACA,EAAO,UAAU,SAAS,cAAc,GACzC,CAACA,EAAO,UAAU,SAAS,iBAAiB,CAChD,CAsJF,CCvnCA,MAAM4sF,GAAiB,mBASvB,MAAqBC,EAAgB,CAkBnC,YAAYjyI,EAST,CAfH,KAAU,SAAW,GAgBnBiX,GAAW,KAAMjX,CAAO,EAElB,MAAC,cAAAkyI,EAAe,UAAAh2H,CAAa,OAChCg2H,GACD,KAAK,UAAYA,EAAc,UAC/BA,EAAc,MAAM,UAAU,IAAIF,GAAiB,QAAQ,EAC3DE,EAAc,SAAS,UAAU,IAAIF,GAAiB,WAAW,EACjEE,EAAc,QAAQ,UAAU,IAAIF,GAAiB,UAAU,IAE1D,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,UAAY,KAAK,SAAS,GAGzD,KAAK,UAAU,UAAU,IAAIA,GAAgB,MAAM,EAE9C,cAAWxwG,GAAW,SAASwwG,GAAiB,QAAQ,WAAW91H,CAAS,SAAU,CAAC,SAAU,EAAK,GAEtG,aAAU,SAAS,cAAc,KAAK,EAC3C,KAAK,QAAQ,UAAU,IAAI81H,GAAiB,WAAY,UAAU91H,CAAS,UAAU,EACrFwY,GAAO,KAAK,OAAO,EAEd,kBAAe,SAAS,cAAc,KAAK,EAChD,KAAK,aAAa,UAAU,IAAIs9G,GAAiB,iBAAkB,UAAU91H,CAAS,gBAAgB,EACjG,kBAAa,OAAO,KAAK,QAAQ,EAEtC,KAAK,QAAQ,OAAO,GAAIg2H,EAAgB,MAAM,KAAKA,EAAc,UAAU,QAAQ,EAAI,CAAC,EAAI,KAAK,YAAY,EAE7GA,GAAiBA,EAAc,UAAU,OAAO,KAAK,SAEhD,wBAAmB,KAAK,QAAQ,CACvC,CAEO,SAAU,CAAC,CAEX,mBAAmB10H,EAAmB,CAC1BV,EAAAU,EAAOhR,GAAM,CAC5BqQ,GAAYrQ,CAAC,IAEX,KAAK,QAAU,KAAK,UAAY,OAAS,QAAQ,QAAQ,EAAI,GAAG,KAAM2lI,GAAc,CACjFA,GACD,KAAK,OAAO,EAAI,CAClB,CACD,CACA,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEO,OAAO7/F,EAAgB,CAC5B,MAAMk4F,EAAW,KAAK,UAAU,UAAU,SAAS,MAAM,EACzD,GAAGl4F,IAAS,OACVA,EAAO,CAACk4F,UACAl4F,IAASk4F,EACjB,OAKF,MAAM4H,GAAc,KAAK,UAAYzwI,GAAW,WAAa,CAAC2wC,EAG9D,KAAK,UAAU,UAAU,OAAO,cAAe8/F,CAAU,EACzD,KAAK,UAAU,UAAU,OAAO,OAAQ9/F,CAAI,EAEvC,YAAO,UAAU,UAAU,OAAO,aAAa,KAAK,SAAS,SAAU,CAACA,CAAI,EAUjF,KAAK,OAAO,cACZ,KAAK,OAAO,eACd,CAEO,WAAY,CACjB,MAAO,CAAC,KAAK,UAAU,UAAU,SAAS,MAAM,CAClD,CAEO,YAAa,CAClB,OAAO,KAAK,UAAU,UAAU,SAAS,aAAa,CACxD,CAEO,KAAKtyC,EAAqC,CACzC,MAAC,QAAAuJ,CAAW,EAAAvJ,EAClB,KAAK,UAAU,QAAQ,OAAS,GAAKuJ,EAAQ,OAC7C,KAAK,UAAU,QAAQ,IAAM,GAAKA,EAAQ,IACrC,mBAAc,KAAKvJ,CAAO,EAC/B,KAAK,OAAO,eACd,CACF,CCtHA,MAAqBqyI,WAAkBJ,EAAgB,CASrD,YAAsBK,EAA8BjrG,EAAsBhnC,EAAuB,CACzF,OACJ,OAAAiyI,EACA,KAAAjrG,EACA,eAAgBirG,EAAO,eACvB,UAAW,QACX,cAAe,IAAI3yD,GACjB,eACC3/E,GAAY,CACXsX,GAAe,KAAK,cAAc,MAAOtX,EAAQ,KAAK,EACtD,KAAK,cAAc,SAAS,gBAC1B,KAAK,KACL,MACAA,EAAQ,SAEZ,CACF,EACA,QAAS,IAAM,CACcu0D,GAAA,KAAK,OAAW,EAAI,CACjD,EACA,SAAU,GACV,OAAQ,GACT,EAtBmB,YAAA+9E,EAA8B,UAAAjrG,EAAsB,cAAAhnC,EAgHlE,sBAAoBkyI,GAAgF,CAC1G,KAAK,mBAAmB,UACxB,KAAK,mBAAmB,QAAQ,UAAU,OAAO,SAAUA,EAAe,eAAiB,CAAC,EAEvF,cAAS,cAAc,cAAc,EAAE,YAAYrxI,GAAKqxI,EAAe,KAAO,sBAAwB,eAAgB,aAAa,CAAC,EACzI,KAAK,SAAS,UAAU,OAAO,SAAUA,EAAe,MAAQA,EAAe,KAAK,GAOtF,KAAQ,QAAU,IAAM,CACtB,KAAK,YAAY,EAAI,GAGvB,KAAQ,OAAS,IAAM,CACrB,KAAK,OAAO,EAAI,GAGlB,KAAQ,YAAc,CAAC,CAAC,IAAArwI,EAAK,QAAAqH,EAAS,MAAA8I,EAAO,eAAAkgI,KAAiF,CAC5H,IAAIhyI,EAAgDs4B,EACpD,MAAM25G,EAAUtwI,EAAI,OAAS,SAAWA,EAAI,OAAS,QACrD,GAAG,CAACswI,EACFjyI,EAAQ,IAAIyW,GAAU,CAAC,OAAQzN,EAAQ,OAAQ,SAAUotD,GAAeptD,EAAQ,QAAQ,CAAE,GAAE,QAGjFsvB,EAAAkhC,GAAmBxwD,EAAQ,IAAI,MACrC,CACC,MAAAuwD,EAAiB53D,EAAI,WAAW,KAAMG,GAASA,EAAK,IAAM,wBAAwB,EACxF9B,EAAQK,GAAck5D,GAAgB,OAAS53D,EAAI,SAAS,EAC5D22B,EAAWihC,GAAgB,UAAYl5D,GAAck5D,EAAe,SAAS,EAAIt1D,EAAK,oBAAoB,CAC5G,CAGA,KAAK,SAAS,UAAU,OAAO,OAAQ,CAACguI,CAAO,EAE/C,KAAK,iBAAiBD,CAAc,EACpC,KAAK,eAAe,kBAEpB,KAAK,aAAa,SAAS,CACzB,MAAAlgI,EACA,SAAU,KAAK,SAAWnQ,EAAI,SAC/B,EAED,KAAK,KAAK,CACR,MAAA3B,EACA,SAAAs4B,EACA,QAAAtvB,CAAA,CACD,EACI,iBAAY8I,EAAM,MAAM,EAC7B,KAAK,OAAO,EAAK,GA3IZ,mBAAc,OAAO,SAE1B,MAAMogI,EAASjxG,GAAW,qBAAsB,CAAC,SAAU,GAAK,EAC1DkxG,EAASlxG,GAAW,sBAAuB,CAAC,SAAU,GAAK,EAE5D,UAAO,SAAS,cAAc,MAAM,EACpC,UAAK,UAAU,IAAI,mBAAmB,EAErC,MAAAmxG,EAAc,CAACn1H,EAAmB1T,IAAyB,CAC9CgT,EAAAU,EAAOhR,GAAM,CAC5BqQ,GAAYrQ,CAAC,EACJ1C,KACR,CAAC,eAAgB,KAAK,OAAO,cAAe,IAGjD6oI,EAAYF,EAAQ,IAAM,CACxBl+E,GAA2B,SAAS,EACrC,EAEDo+E,EAAYD,EAAQ,IAAM,CACxBn+E,GAA2B,KAAK,EACjC,EAED,KAAK,SAAW/yB,GAAW,GAAI,CAAC,SAAU,GAAK,EAC/C,KAAK,SAAS,UAAU,IAAI,SAAU,kBAAkB,EAC5CmxG,EAAA,KAAK,SAAU,IAAM,CAC/Bp+E,GAA2B,OAAO,EACnC,EACI,aAAQ,QAAQ,KAAK,QAAQ,kBAAmBk+E,EAAQ,KAAK,SAAUC,CAAM,EAE7E,oBAAiB,IAAI11E,GAAe,CAAC,eAAgB,KAAK,eAAgB,SAAU,GAAM,gBAAiB,MAAO,GACjH,MAAA41E,EAA8B,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EACvCA,EAAA,OAAO,KAAK,eAAe,SAAS,EAC1D,MAAAC,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,4BAA4B,EACjD,KAAK,eAAe,IAAI,UAAU,IAAI,sBAAuB,QAAQ,EAChE,oBAAe,IAAI,QAAQA,CAAM,EACjC,oBAAe,IAAI,OAAOD,CAA2B,EAE1D,KAAK,SAAWpxG,GAAW,eAAgB,CAAC,SAAU,GAAK,EAC/CmxG,EAAA,KAAK,SAAU,IAAM,CACzB,MAAArlF,EAASiH,GAA2B,oBACtCjH,EAAO,MAEDA,EAAO,MACfiH,GAA2B,MAAQ,GACnCA,GAA2B,KAAO,IAEPA,GAAA,KAAO,CAACA,GAA2B,KAL9DA,GAA2B,MAAQ,EAMrC,CACD,EAED,KAAK,mBAAqB4I,GAAmB,CAAC,UAAW,aAAc,GAElE,kBAAa,QAAQ,KAAK,eAAe,IAAK,KAAK,mBAAmB,QAAS,KAAK,QAAQ,EAE3F,MAAA21E,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,+BAA+B,EAExD,kBAAe,IAAI58E,GAAkB,CACxC,eAAgB,GAChB,aAAc,GACd,aAAev7B,GAAS,CACtB,KAAK,KAAK,YAAc/2B,GAAS+2B,EAAM,EAAI,CAC7C,EACD,EACD,KAAK,aAAa,UAAU,UAAU,IAAI,uBAAuB,EACjDm4G,EAAA,OAAO,KAAK,aAAa,SAAS,EAClD,KAAK,QAAQ,aAAaA,EAAiB,KAAK,YAAY,EAE5D,KAAK,OAAO,eAAe,IAAIv+E,EAA0B,EAAE,OAAQ,KAAK,WAAW,EACnF,KAAK,OAAO,eAAe,IAAIA,EAA0B,EAAE,QAAS,KAAK,OAAO,EAChF,KAAK,OAAO,eAAe,IAAIA,EAA0B,EAAE,OAAQ,KAAK,MAAM,EAC9E,KAAK,OAAO,eAAe,IAAIA,EAA0B,EAAE,iBAAkB,KAAK,gBAAgB,EAE5F,MAAAw+E,EAAiBx+E,GAA2B,oBAC/Cw+E,IACD,KAAK,YAAYA,CAAc,EAC1B,sBAAiBA,EAAe,cAAc,EAEvD,CAEO,SAAU,CACf,MAAM,QAAQ,EACd,KAAK,cAAc,iBACrB,CAUQ,YAAYp3E,EAAiB,CACnCmB,GAAkB,KAAK,SAAUnB,EAAS,OAAS,OAAO,CAC5D,CA2CF,CC/LA,MAAqBq3E,EAAgB,CACnC,YAAoB/yI,EAAwB2N,EAAqBqlI,EAAsBlE,EAAwB,CAA3F,YAAA9uI,EAAwB,SAAA2N,EAAqB,WAAAqlI,EAAsB,eAAAlE,EACrF,KAAK,UAAU,CACjB,CAEA,MAAc,WAAY,CACxB,KAAM,CAAC,OAAA9uI,EAAQ,IAAA2N,EAAK,MAAAqlI,EAAO,UAAAlE,GAAa,KACxC,IAAIxuI,EAAoB4wB,EAA0BC,EAClD,MAAMC,EAAuC,GAAIL,EAA6C,GAExF3wB,EAAW0vB,GAAa,SAExBmjH,EAAW,MAAM7yI,EAAS,gBAAgB,cAAcJ,CAAM,EAE9D6J,EAAW,CAAC0C,EAAeskB,EAA4CqiH,EAAmBr5D,IAAqB,CACnH,WAAW,IAAM,CACX,IAAAluE,EACDqnI,GAAS,CAACrlI,EACRslI,EACStnI,EAAAvL,EAAS,mBAAmB,iBAAiBJ,CAAM,EAEnD2L,EAAAvL,EAAS,mBAAmB,mBAAmBJ,CAAM,EAGjE2L,EAAUvL,EAAS,mBAAmB,oBAAoBJ,EAAQ2N,EAAKqlI,EAAOn5D,EAAQq5D,CAAO,EAG5FpE,GACDnjI,EAAQ,KAAKmjI,CAAS,GAEvB,GAAG,GAGR,GAAGkE,EAAO,CACR,IAAI3H,EAA0B,eAC1B19H,GAWMrN,EAAA,yBACM4wB,EAAA,sBAXX+hH,GACO3yI,EAAA,uBACM4wB,EAAA,oCACIC,EAAA,CAAC,IAAO,MAAM/wB,EAAS,mBAAmB,uBAAuBJ,CAAM,GAAM,EAAE,IAEzFM,EAAA,wBACM4wB,EAAA,8BACDm6G,EAAA,oBAOjBj6G,EAAQ,KAAK,CACX,QAASi6G,EACT,SAAU,GACV,SAAAxhI,CAAA,CACD,MACI,CACGvJ,EAAA,uBACR,MAAM6yI,EAA6B,aAEhCnzI,EAAO,aACRoxB,EAAQ,KAAK,CACX,QAAS+hH,EACT,SAAU,CAAC5mI,EAAGskB,IAAYhnB,EAAS0C,EAAGskB,EAAS,GAAO,CAACA,EAAQ,IAAI,EACpE,EAEE,MAAMzwB,EAAS,gBAAgB,YAAYJ,EAAO,UAAU,EAC/CkxB,EAAA,0BAEAA,EAAA,kBAEdH,EAAW,KAAK,CACd,KAAM,YACN,QAAS,GACV,KAGWG,EAAA,sBAEXlxB,IAAWC,EAAU,KACtBmxB,EAAQ,KAAK,CACX,QAAS+hH,EACT,SAAAtpI,CAAA,CACD,GAEDunB,EAAQ,KAAK,CACX,QAAS+hH,EACT,SAAU,CAAC5mI,EAAGskB,IAAYhnB,EAAS0C,EAAGskB,EAAS,CAACA,EAAQ,IAAI,EAC7D,EAEDE,EAAW,KAAK,CACd,KAAM,aACN,SAAU,CAAC,MAAMpe,GAAc,CAAC,OAAA3S,CAAO,EAAC,EACxC,QAAS,GACV,GAGP,CAEA+vB,GAAgBqB,CAAO,EAETtB,GAAa,YAAYD,GAAW,oBAAqB,CACrE,OAAA7vB,EACA,aAAcM,EACd,mBAAoB4wB,EACpB,oBAAqBC,EACrB,QAAAC,EACA,WAAAL,CAAA,CACD,EAEK,KAAK,CACb,CACF,CCjHA,MAAMqiH,GAAM,EACNC,GAAQ,EACRtG,GAAa,wBAEnB,MAAqBuG,EAAoB,CAAzC,cAYE,KAAQ,SAAW,CAACnhH,EAAWkZ,EAAWhlB,EAAeC,EAAgB8B,IAChE,IAAI+J,CAAC,IAAIkZ,EAAIjjB,CAAM,IAAIA,CAAM,IAAIA,CAAM,UAAU/B,CAAK,MAAMC,EAAS,EAAI8B,CAAM,IAAIA,CAAM,IAAIA,CAAM,UAAU,CAAC/B,CAAK,MAG5H,KAAQ,YAAc,CAACyb,EAAYyxG,EAAmBp0G,IAAkB,CAGtE,IAAIh8B,EAAI,GAKJ,GAAGg8B,IAAU,EACfh8B,EAAI,KAAK,SAAS,EAAG,EAAGkwI,GAAOE,EAAW,CAAM,EAAI,KAAK,SAAS,EAAGA,EAAYH,GAAM,EAAGC,GAAOE,EAAW,CAAM,MAElH,SAAQ7vI,EAAI,EAAGA,EAAIy7B,EAAO,EAAEz7B,EACrBP,GAAA,KAAK,SAAS,GAAIowI,EAAYH,IAAO1vI,EAAG2vI,GAAOE,EAAW,CAAM,EAItE,OAAC,KAAK,WACP,KAAK,SAAW,SAAS,gBAAgB,6BAA8B,UAAU,EACjF,KAAK,KAAO,SAAS,gBAAgB,6BAA8B,MAAM,EAEpE,cAAS,OAAO,KAAK,IAAI,GAGhC,KAAK,SAAS,GAAKzxG,EACnB,KAAK,KAAK,eAAe,KAAM,IAAK3+B,CAAC,EAE9B,KAAK,UAGN,kBAAe,CAACg8B,EAAezlB,IAAkB,CACnD,IAAA65H,EACJ,OAAGp0G,GAAS,EACEo0G,EAAA,GACJp0G,IAAU,EACNo0G,EAAA,GACJp0G,IAAU,EACNo0G,EAAA,IACJp0G,IAAU,GAEVA,EAAQ,KACJo0G,EAAA,GAGPA,CAAA,EAGD,mBAAgB,CAACp0G,EAAezlB,IAAkB,CACpD,IAAA85H,EACJ,OAAGr0G,GAAS,EACGq0G,EAAA,GACLr0G,IAAU,EACLq0G,EAAA,GACLr0G,IAAU,EACLq0G,EAAA,IACLr0G,IAAU,GAEVA,EAAQ,KACHq0G,EAAA,GAGRA,CAAA,EAGT,KAAQ,kBAAoB,CAAC95H,EAAe65H,EAAmBp0G,IAAkB,CAC/E,GAAGA,IAAU,EACJ,SACT,GAAUA,IAAU,EACX,OAACzlB,EAAY65H,EAAYH,GAAhB,EAGlB,GAAGj0G,IAAU,EAAG,CACd,GAAIzlB,GAEJ,GAAUA,IAAU,EAClB,OAAO65H,EAAYH,OAFZ,UAKF,OAAAG,EAAY,EAAIH,GAAM,EAAI,MAEjC,QAAQG,EAAYH,IAAO15H,CAC7B,EAGF,KAAQ,mBAAqB,CAACA,EAAeylB,EAAeo0G,EAAmBE,IAC1Et0G,GAAS,GAITzlB,GAAS,EACH,EACCA,GAAUylB,EAAQ,EACnBs0G,EAAc,GAAkBF,GAIjC75H,EAAQ,GAAK65H,EAAY75H,EAAQ05H,GAInC,oBAAiB,CAACj0G,EAAeo0G,IAChCp0G,GAAS,EAAI,GAAkBo0G,EAAYp0G,EAAQi0G,IAAOj0G,EAAQ,EAC3E,CAEO,OAAOA,EAAezlB,EAAe,CAS1C,GARI,KAAK,SACF,YAAS,SAAS,cAAc,KAAK,EACrC,YAAO,UAAU,IAAIqzH,EAAU,EAE/B,aAAU,SAAS,cAAc,KAAK,EACtC,YAAO,OAAO,KAAK,OAAO,GAG9B5tG,IAAU,EACR,YAAK,QAAUA,IACX,aAAQ,UAAY4tG,GAAa,aACtC,KAAK,OAAO,UAAU,OAAOA,GAAa,OAAO,EACjD,KAAK,QAAQ,kBACR,aAAQ,MAAM,QAAU,IAGxB,KAAK,OAGd,MAAMwG,EAAY,KAAK,aAAap0G,EAAOzlB,CAAK,EAC1C85H,EAAa,KAAK,cAAcr0G,EAAOzlB,CAAK,EAC5C+5H,EAAc,KAAK,eAAet0G,EAAOo0G,CAAS,EAElDG,EAAa,YAAYv0G,CAAK,GAC9Bw0G,EAAW,KAAK,YAAYD,EAAYH,EAAWp0G,CAAK,EAExDy0G,EAAiB,KAAK,kBAAkBl6H,EAAO65H,EAAWp0G,CAAK,EAC/D00G,EAAkB,KAAK,mBAAmBn6H,EAAOylB,EAAOo0G,EAAWE,CAAW,EAEpF,YAAK,OAAO,UAAU,OAAO1G,GAAa,QAAS5tG,EAAQ,CAAC,EAEzDzlB,GAAS,GACL,YAAO,UAAU,IAAI,aAAa,EAClC,YAAO,UAAU,OAAO,UAAU,GAC/BA,GAAUylB,EAAQ,GACrB,YAAO,UAAU,IAAI,UAAU,EAC/B,YAAO,UAAU,OAAO,aAAa,GAE1C,KAAK,OAAO,UAAU,IAAI,WAAY,aAAa,EAGhD,aAAQ,UAAY4tG,GAAa,WACjC,aAAQ,MAAM,QAAU,mBAAmB2G,CAAU,0BAA0BD,CAAW,8BAA8BI,CAAe,OAExI,KAAK,MACP,KAAK,IAAM,SAAS,gBAAgB,6BAA8B,KAAK,EACvE,KAAK,IAAI,eAAe,KAAM,SAAU,GAAG,EAC3C,KAAK,IAAI,eAAe,KAAM,QAAS,GAAG,EAE1C,KAAK,KAAO,SAAS,gBAAgB,6BAA8B,MAAM,EACpE,UAAK,OAAOF,CAAQ,EAEpB,SAAI,OAAO,KAAK,IAAI,EAEpB,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAI5G,GAAa,OAAO,GAG1C,KAAK,IAAI,eACX,KAAK,QAAQ,OAAO,KAAK,IAAK,KAAK,IAAI,EAGzC,KAAK,KAAK,MAAM,QAAU,WAAWyG,CAAU,6BAA6BI,CAAc,OAE1F,KAAK,MAAQz0G,EACb,KAAK,MAAQzlB,EAEN,KAAK,MACd,CACF,CClMA,SAAwBo6H,GAAsBv2H,EAAmBsY,EAAwBhsB,EAAsBmrB,EAAgC,CAC7I,GAAGrD,GAAoB,CACjB,IAAAoiH,EACE,MAAAh0I,EAAU,CAAC,QAAS,IAC1Bi1B,EAAe,IAAIzX,CAAI,EAAE,aAAehR,GAAM,CACzC,GAAAA,EAAE,QAAQ,OAAS,EAAG,CACZwvC,IACX,MACF,CAEQg4F,EAAAxnI,EAAE,QAAQ,CAAC,EAAE,QAErByoB,EAAe,IAAIzX,CAAI,EAAE,YAAau+B,EAAa/7C,CAAO,EAC1Di1B,EAAe,IAAIzX,CAAI,EAAE,WAAYw+B,EAAYh8C,CAAO,GACvDA,CAAO,EAEJ,MAAA+7C,EAAevvC,GAAkB,CACrC,MAAMinB,EAAUjnB,EAAE,QAAQ,CAAC,EAAE,QAEdinB,EAAUugH,GACgBlqI,IAEjCkqI,EAAAvgH,CAAA,EAIJuoB,EAAa,IAAM,CACvB/mB,EAAe,aAAazX,EAAM,YAAau+B,EAAa/7C,CAAO,EACnEi1B,EAAe,aAAazX,EAAM,WAAYw+B,EAAYh8C,CAAO,EACnE,MAEAi1B,EAAe,IAAIzX,CAAI,EAAE,QAAUhR,GAAM,CACxBA,EAAE,OAAS,GAEe1C,GACG,EAC3C,CAAC,QAAS,GAAK,CAEtB,CCnBA,MAAMmqI,GAAN,MAAMA,EAAc,CAOlB,aAAc,CAHd,UAA8G,GAIvG,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAYA,GAAc,UAC3C,CAEO,OAAOt6H,EAAeu6H,EAAe,GAAO,CAC9C,QAAK,KAAKv6H,CAAK,EAAU,YAAK,KAAKA,CAAK,EAAE,QACvC,MAAA4gB,EAAM,SAAS,cAAc,KAAK,EAClCkiE,EAAU,CAAC,OAAO,KAAK,KAAK,IAAI,EAAE,QAAU,CAACy3C,EACnD,OAAA35G,EAAI,UAAY05G,GAAc,WAAa,QAAUx3C,EAAU,GAAK,mBACpE,KAAK,KAAK9iF,CAAK,EAAI,CAAC,QAAS4gB,EAAK,WAAYA,EAAI,iBAAmB5qB,GAAiB,MAAK,EAAI,EAC1F,eAAU,OAAO4qB,CAAG,EAClBA,CACT,CAEO,SAAS5gB,EAAe,CACzB,KAAK,KAAKA,CAAK,IACnB,KAAK,KAAKA,CAAK,EAAE,QAAQ,OAAO,EAChC,KAAK,KAAKA,CAAK,EAAE,WAAW,QAAQ,EAC7B,YAAK,KAAKA,CAAK,EACxB,CAEO,UAAUw6H,EAAuB,CACnC,KAAK,cAAc,aAAa,KAAK,YAAY,EAC/C,kBAAe,OAAO,WAAW,IAAM,CAChC,UAAAxwI,KAAK,KAAK,KACf,CAACA,IAAMwwI,GACL,cAAS,CAACxwI,CAAC,CAClB,EACCswI,GAAc,QAAQ,CAC3B,CAEO,UAAUt6H,EAAey6H,EAAS,GAAO,CACxC,MAAA75G,EAAM,KAAK,KAAK5gB,CAAK,EACxB4gB,EAAI,MACF65G,GACG75G,EAAA,QAAQ,UAAU,OAAO,MAAM,EAC9BA,EAAI,QAAQ,YAEjBA,EAAI,QAAQ,UAAU,OAAO,YAAa,MAAM,EAGlD,OAAOA,EAAI,KAGb,KAAK,UAAU5gB,CAAK,CACtB,CAEO,QAAQA,EAAe06H,EAAuBC,EAAU36H,EAAQ06H,EAAeE,EAAiB,GAAO,CAC5G,GAAG56H,IAAU06H,EACJ,YAAK,UAAU16H,CAAK,EAGvB,MAAA4gB,EAAM,KAAK,KAAK5gB,CAAK,EACrB66H,EAAc,KAAK,KAAKH,CAAa,EACxC,IAACG,GAAe,CAACD,EACX,YAAK,UAAU56H,CAAK,EAGvB,MAAAod,EAAQ,CAAC,WAAY,aAAa,EACpCu9G,GAASv9G,EAAM,QAAQ,EAE3BwD,EAAI,QAAQ,UAAU,IAAIxD,EAAM,CAAC,CAAC,EAClCwD,EAAI,QAAQ,UAAU,OAAOxD,EAAM,CAAC,CAAC,EAClCy9G,IACDA,EAAY,QAAQ,UAAU,IAAIz9G,EAAM,CAAC,CAAC,EAC1Cy9G,EAAY,QAAQ,UAAU,OAAOz9G,EAAM,CAAC,CAAC,GAG5CwD,EAAI,KACA,eAAU5gB,EAAO,EAAI,EAG5B4gB,EAAI,QAAQ,UAAU,OAAO,YAAa,EAAK,EAC/Ci6G,GAAeA,EAAY,QAAQ,UAAU,OAAO,YAAa,EAAI,EAarE,KAAK,UAAU76H,CAAK,CACtB,CAEO,SAAU,CACL,UAAAhW,KAAK,KAAK,KACb,cAAS,CAACA,CAAC,CAEpB,CACF,EArGEswI,GAAO,SAAW,IAClBA,GAAO,WAAa,iBAFtB,IAAMQ,GAANR,GAwGA,MAAMS,GAAN,MAAMA,EAAgB,CAYpB,YAAoB53G,EAAU,GAAO,CAAjB,aAAAA,EARpB,cAIM,GACW,sBAIV,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAY43G,GAAgB,UAC7C,CAEA,WAAW/6H,EAAe,CACrB,QAAK,SAASA,CAAK,EAAU,YAAK,SAASA,CAAK,EAC7C,MAAA1P,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAYyqI,GAAgB,WAAa,WAExC,MAAAplG,EAAc,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAYolG,GAAgB,WAAa,uBAE/C,MAAAC,EAAgB,IAAIF,GACZ,OAAAE,EAAA,UAAU,UAAYD,GAAgB,WAAa,mBAE5DzqI,EAAA,OAAOqlC,EAAaqlG,EAAc,SAAS,EAE3C,eAAU,OAAO1qI,CAAI,EAEnB,KAAK,SAAS0P,CAAK,EAAI,CAAC,UAAW1P,EAAM,YAAAqlC,EAAa,cAAAqlG,EAC/D,CAEA,MAAM3vI,EAAgB,CACjB,KAAK,cAAc,aAAa,KAAK,YAAY,EAE9C,MAAAC,GAAY,GAAKD,GAAQ,OAC5BC,GAAY,KAAK,SAAS,SAIxB,kBAAe,OAAO,WAAW,IAAM,CACxB,KAAK,SAAS,OAAOA,EAAU,KAAK,SAAS,OAASA,CAAQ,EACtE,QAAS2vI,GAAY,CAC7BA,EAAQ,UAAU,QAAO,CAC1B,GACAH,GAAc,QAAQ,EAC3B,CAWA,SAASzvI,EAAgB,CACjB,MAAAC,GAAY,GAAKD,GAAQ,OACb,KAAK,SAAS,MAAMC,CAAQ,EACpC,QAAS2vI,GAAY,CAC7B,MAAMC,EAAwB,CAACD,EAAQ,YAAY,WAAa,EACpDA,EAAQ,cAAc,OAAOF,GAAgB,YAAa,EAAI,EAC1EE,EAAQ,cAAc,QAAQF,GAAgB,YAAaG,EAAuB,KAAK,QAAU7vI,EAAS,KAAK,eAAiBA,EAAS,KAAK,eAAgB,EAAI,EACnK,EAED,KAAK,MAAMA,CAAM,CACnB,CAEA,SAASA,EAAgB,CAGjB,MAAA8vI,EAAoB,MAAM,KAAK,GAAK,KAAK,cAAc,EAAE,IAAK1vI,GAAM,CAACA,CAAC,EAC1D,MAAM,KAAK,GAAKJ,CAAM,EAAE,IAAKI,GAAM,CAACA,CAAC,EAC7C,QAAQ,CAAC2vI,EAAexxI,IAAQ,CAClC,MAAAqxI,EAAU,KAAK,WAAWrxI,CAAG,EAE7Bg3B,EAAMq6G,EAAQ,cAAc,OAAOG,EAAe,EAAI,EACtDF,EAAwBC,EAAkBvxI,CAAG,GAAKmxI,GAAgB,YACxEn6G,EAAI,UAAYq6G,EAAQ,YAAY,UAAY,GAAKG,EAErDH,EAAQ,cAAc,QAAQG,EAAeF,EAAuB,KAAK,QAAU7vI,EAAS,KAAK,eAAiBA,EAAS,KAAK,eAAgB,EAAI,EACrJ,EAED,KAAK,SAASA,CAAM,EAEpB,KAAK,eAAiBA,CACxB,CAEA,SAAU,CACH,cAAS,QAAS4vI,GAAY,CACjCA,EAAQ,cAAc,SAAQ,CAC/B,CACH,CACF,EAhGEF,GAAO,YAAc,GACrBA,GAAO,WAAa,mBAFtB,IAAMM,GAANN,GAmGA,MAAMO,GAAkB,GAEHC,GAArB,MAAqBA,EAAkB,CA8CrC,YAAoB5C,EAA4BjrG,EAAoBhnC,EAAuB,CAAvE,YAAAiyI,EAA4B,UAAAjrG,EAAoB,cAAAhnC,EAvCpE,KAAQ,aAAe,EACvB,KAAO,UAAY,EACnB,KAAO,YAAc,GACrB,KAAQ,eAAiB,EACzB,KAAQ,oBAAsB,EAE9B,KAAO,OAAS,GAChB,KAAQ,oBAAsB,GAE9B,KAAO,MAAQ,EACf,KAAQ,KAAiB,GACzB,KAAQ,YAAc,EAEtB,KAAQ,QAAU,GAClB,KAAQ,aAAe,GACvB,KAAQ,UAAY,GASpB,KAAO,OAAS,GAgBT,oBAAiB,IAAI+3B,GACrB,SAAMyI,GAAO,IAAI,EACtB,KAAK,MAAQ,GACb,KAAK,SAAW,GAEV,MAAAs0G,EAAM,IAAI50D,GAAe,gBAAgB,EAC1C,4BAAyB,IAAI0xD,GAAgB,CAChD,OAAAK,EACA,KAAAjrG,EACA,eAAgB,KAAK,eACrB,UAAW,UACX,cAAe8tG,EACf,QAAS,UACJ,MAAM90I,EAAS,gBAAgB,cAAc,KAAK,KAAK,MAAM,EAC9D0vB,GAAa,YAAYijH,GAAiB,KAAK,KAAK,OAAQ,KAAK,UAAW,EAAI,EAEhFjjH,GAAa,YAAYijH,GAAiB,KAAK,KAAK,OAAQ,EAAG,EAAI,EAG9D,IAET,SAAUiC,GACV,OAAQ,GACT,EAEI,yBAAsB,IAAI1B,GAC/B4B,EAAI,OAAO,YAAY,KAAK,oBAAoB,OAAO,EAAG,CAAC,CAAC,EAEvD,sBAAmB,IAAIV,GAC5BU,EAAI,SAAS,OAAO,KAAK,iBAAiB,SAAS,EAE9C,mBAAgB,IAAIV,GACzB,KAAK,cAAc,UAAU,UAAU,IAAI,gCAAgC,EAC3EU,EAAI,QAAQ,QAAQ,KAAK,cAAc,SAAS,EAE3C,qBAAkB,IAAIH,GAAgB,EAAI,EAC3CG,EAAA,MAAM,OAAO3wI,EAAK,eAAe,EAAG,IAAK,KAAK,gBAAgB,SAAS,EAE3E,MAAMo/G,EAAW,KAAK,uBAAuB,SAAS,UAAU,EAAI,EAC/D,4BAAuB,mBAAmBA,CAAQ,EACnDuxB,EAAA,UAAU,QAAQvxB,CAAQ,EAE9B,KAAK,QAAUpiF,GAAW,wDAAyD,CAAC,SAAU,GAAK,EAEnG,KAAK,uBAAuB,aAAa,QAAQ,KAAK,OAAO,EAE5C1kB,EAAA,KAAK,QAAUtQ,GAAM,CACpCqQ,GAAYrQ,CAAC,EACR,YAAO,WAAW,EAAI,CAC1B,GAAC,eAAgB,KAAK,cAAe,GAEnC,oBAAe,IAAItM,CAAS,EAAE,uBAAwB,CAAC,CAAC,OAAAD,KAAY,CACpEA,IAAW,KAAK,KAAK,SAGnB,KAAK,QACN,KAAK,uBAAuB,OAAO,KAAK,OAAS,EAAK,EAGnD,eAAY,KAAK,aAAe,GACrC,KAAK,YAAc,GACnB,KAAK,UAAY,EACjB,KAAK,MAAQ,EACb,KAAK,KAAO,GACZ,KAAK,YAAc,EACnB,KAAK,aAAe,EACpB,KAAK,gBAAgB,CAAC,EAExB,CACD,EAEI,oBAAe,IAAIC,CAAS,EAAE,qBAAsB,CAAC,CAAC,OAAAD,KAAY,CAClEA,IAAW,KAAK,KAAK,QACtB,KAAK,uBAAuB,OAAO,KAAK,OAAS,EAAI,CACvD,CACD,EAII,sBAAmB2oC,GAAS,IAAM,KAAK,oBAAqB,IAAK,GAAM,EAAI,EAC3E,8BAA2Bs5B,GAAS,KAAK,gBAAgB,KAAK,IAAI,EAAG,IAAK,EAAK,EAEpF,KAAK,SAAW,CAAC,KAAK,KAAK,uBAAuB,CACpD,CAEO,SAAU,CACf,KAAK,cAAc,UACnB,KAAK,iBAAiB,UACtB,KAAK,gBAAgB,UAChB,4BAAuB,UAAU,SACjC,4BAAuB,OAAO,EAAI,EACvC,KAAK,eAAe,YACpB,KAAK,wBAAwB,EAAK,CACpC,CAEO,gBAAgBkzE,EAA8B,CAUnD,GATG,KAAK,WAGR,KAAK,OAAS,KAAK,IAAI,kBAAmBA,CAAmB,EAE1D,KAAK,QAAU,KAAK,UAInB,KAAK,cAAgB,KAAK,YAAc,CAAC,KAAK,MAChD,OAIF,MAAMrjI,EAAK,KAAK,KAAK,QAAQ,iBAAiB,QAAQ,EAEtD,GAAG,CAACA,EAAI,OAIF,MAAAnE,EAAMmE,EAAG,QAAQ,IACpBnE,IAAQ,QAEJ,aAAQ,CAACA,EAAKwnI,CAAmB,CAE1C,CAEO,QAAQxnI,EAAawnI,EAA8B,CAIxD,GAHG,KAAK,UAGL,KAAK,OAAQ,OAIhB,IAAIjB,EAAuB,KAAK,KAAK,UAAW9V,GAASA,GAAQzwH,CAAG,EACpE,GAAGumI,IAAiB,IAAM,CAAC,KAAK,aAAaA,CAAY,EACvDA,GAAgB,KAAK,oBACb,KAAK,WAAavmI,EAAM,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,EAE9DumI,EAAe,KAAK,KAAK,OAAS,EAAI,KAAK,gBAE3C,QAAO,KAAK,yBAAL,KAAK,uBAA2B,KAAK,gBAAgBvmI,EAAKwnI,IAAwB,MAAS,GAYpG,GADgB,KAAK,cAAgBjB,EAEhC,YAAK,qBAAuBiB,IAAwB,SAClD,KAAK,cAAgB,GAAK,KAAK,YAAcjB,GAC9C,QAIJ,KAAK,YAAcA,EACnB,KAAK,UAAY,KAAK,KAAK,KAAM9V,GAASA,GAAQzwH,CAAG,GAAK,KAAK,KAAK,KAAK,KAAK,OAAS,CAAC,EACjF,KAAK,mBAEhB,CAEQ,aAAaumI,EAAsB,CACzC,OAAQ,KAAK,MAAQe,GAAkB,aAElC,CAAC,KAAK,cAAgBf,GAAgBe,GAAkB,aACxD,CAAC,KAAK,WAAc,KAAK,MAAQ,EAAIf,GAAiBe,GAAkB,YAG/E,CAEA,MAAc,gBAAgBtnI,EAAaynI,EAAe,GAAM,CAC9D,GAAG,MAAK,QACR,MAAK,QAAU,GAEX,IACF,MAAM9uG,EAAM,KAAK,MAAQ,KAAK,IAAI,WAAW,iBAAiB,EAAI,OAC3DA,KAAI,QAAS34B,EAAKynI,CAAY,EAErC,IAAIC,EAAU,GACd,MAAMhpI,EAAW,CACf,KAAK,SAAS,mBAAmB,WAAW,CAC1C,OAAQ,KAAK,KAAK,OAClB,YAAa,CAAC,EAAG,2BAA2B,EAC5C,SAAUsB,EACV,MAAOsnI,GAAkB,WACzB,UAAWA,GAAkB,WAC7B,SAAU,KAAK,KAAK,SACpB,uBAAwB,GACzB,EAAE,KAAMnkI,IACGukI,EAAA,GACHvkI,EACR,GAGA,IAAC,KAAK,aAAc,CACf,MAAAnF,EAAU,KAAK,SAAS,mBAAmB,iBAC/C,KAAK,KAAK,OACV,KAAK,KAAK,UACV,KAAMpJ,GAAM,CACRA,EAAE,QACN,KAAK,aAAeA,EAAE,MAEnB,CAAC8yI,GAAWD,IACR,UAAO,CAAC,KAAK,YAAY,EAC9B,KAAK,MAAQ7yI,EAAE,MACf,KAAK,YAAc,EACd,eAAY,KAAK,KAAK,CAAC,EAC5B,KAAK,iBAAiB,GAExB,CACD,EAED8J,EAAS,KAAKV,CAAc,CAC9B,CAEA,MAAM5J,GAAU,MAAM,QAAQ,IAAIsK,CAAQ,GAAG,CAAC,EAExCgzB,EAAUt9B,EAAO,QAEvB,IAAIuzI,EAAcj2G,EAAQ,UAAW++F,GAASA,GAAQzwH,CAAG,EACtD2nI,IAAgB,KACjBA,EAAcj2G,EAAQ,QAKnB,iBAAc,KAAK,IAAI,EAAGt9B,EAAO,cAAc,EAAIA,EAAO,eAAiBuzI,EAAc,EACzF,UAAOj2G,EAAQ,QACpB,KAAK,MAAQt9B,EAAO,MAEhB,KAAK,OACF,4BAAuB,OAAO,EAAI,EAGzC,KAAK,UAAa,KAAK,YAAc,KAAK,KAAK,SAAY,KAAK,MAC3D,kBAAe,CAAC,KAAK,YAEnBukC,KAAI,SAAU34B,EAAK5L,EAAQuzI,EAAa,KAAK,YAAa,KAAK,UAAW,KAAK,YAAY,QAC5FnkI,EAAK,CACN,SAAI,MAAM,wBAAyBA,CAAG,CAC7C,CAEA,KAAK,QAAU,GAEZ,KAAK,OACN,KAAK,QAAQxD,CAAG,EACRynI,GACR,KAAK,gBAAgB,CAAC,EAGxB,KAAK,uBAAyB,OAEhC,CAEQ,uBAAwB,CAC9B,KAAK,oBAAsB,GAEvB,KAAK,2BACF,8BAA2B,IAAIj9G,GACpC27G,GAAsB,KAAK,KAAK,QAAQ,WAAW,UAAW,SAAU,IAAM,CAC5E,KAAK,wBAAwB,GAC5B,KAAK,wBAAwB,EAEpC,CAEO,wBAAwByB,EAAkB,GAAM,CACrD,KAAK,oBAAsB,GAExB,KAAK,2BACN,KAAK,yBAAyB,YAC9B,KAAK,yBAA2B,QAG/BA,GACD,KAAK,gBAAgB,CAAC,CAE1B,CAEA,MAAa,8BAA+B,CAC1C,KAAK,OAAS,GAET,YAAS,KAAK,IAAI,8BAA8B,EACjD,IACF,KAAK,sBAAsB,EAErB,MAAAzV,EAAiB,KAAK,KAAK,eAC9BA,aAA0B,SACrB,MAAAA,EAIR,MAAMj4F,GAAyB,EAE1B,6BAA0B,MAAM,KAAK,uBAErC,YAAS,KAAK,IAAI,sCAAsC,EAC7D,KAAK,OAAS,SAOR12B,EAAK,CACN,SAAI,MAAM,sCAAuCA,CAAG,EAEzD,KAAK,OAAS,GACd,KAAK,oBAAsB,GAC3B,KAAK,gBAAgB,CAAC,CACxB,CACF,CAEO,oBAAoBxD,EAAa,CACtB,KAAK,KAAK,WAAWA,CAAG,IAKxC,KAAK,KAAK,aAAa,CAAC,UAAWA,CAAI,IACtC,KAAK,KAAK,gBAAkB,QAAQ,QAAQ,GAAG,KAAK,IAAM,CACzD,KAAK,6BAA6B,EAC7B,aAAQ,KAAK,aAAgB,KAAK,MAAQ,EAAK,KAAK,aAAeA,EAAM,CAAC,EAChF,EACH,CAEA,MAAa,mBAAoB,CAQ/B,MAAMwxB,EAAQ,KAAK,MACnB,GAAGA,EAAO,CACR,MAAMq2G,EAAc,KAAK,YACnBlsI,EAAU,KAAK,KAAK,WAAW,KAAK,SAAS,EAK7Cw7B,EAAS0wG,IAAgB,EAC/B,KAAK,gBAAgB,UAAU,UAAU,OAAO,UAAW1wG,CAAM,EAE7DA,GACG,qBAAgB,SAAS3F,EAAQq2G,CAAW,EAK9C,4BAAuB,OAAO,EAAK,EAElC,MAAAnB,EAAUmB,EAAc,KAAK,eAEnC,KAAK,OAAS,KAAK,IAAI,4BAA6BnB,EAASmB,EAAa,KAAK,cAAc,EAE7F,MAAMC,EAAU,KAAK,iBAAiB,OAAOD,CAAW,EAClDE,EAAe,KAAK,cAAc,OAAOF,CAAW,EAC7CE,EAAA,UAAU,IAAI,sBAAsB,EAEjD,MAAMxzI,EAA+B,GAC/Bq+E,EAAa,MAAMX,GAAuB,CAC9C,QAAS,KACT,WAAY61D,EACZ,QAAAnsI,EACA,QAASosI,EACT,aAAAxzI,EACA,eAAgB,KAAK,KAAK,eAC1B,UAAW,qBACX,aAAc,CAACoH,EAAQ,OAAO,IAC9B,WAAY,KAAK,iBAAiB,OAAOksI,CAAW,EAAE,iBAAiB,IAAI,EAC5E,EAEK,cAAQ,IAAItzI,CAAY,EAE9B,KAAK,uBAAuB,UAAU,UAAU,OAAO,WAAYq+E,CAAU,EAG7E,KAAK,iBAAiB,QAAQi1D,EAAa,KAAK,cAAc,EAC3Dj1D,GACD,KAAK,cAAc,QAAQi1D,EAAa,KAAK,mBAAmB,EAChE,KAAK,oBAAsBA,GAE3B,KAAK,cAAc,YAIrB,KAAK,oBAAoB,OAAOr2G,EAAOA,EAAQq2G,EAAc,CAAC,EAC9D,KAAK,eAAiBA,EACtB,KAAK,uBAAuB,UAAU,QAAQ,IAAM,GAAKlsI,EAAQ,SAE5D,4BAAuB,OAAO,EAAI,EACvC,KAAK,eAAiB,EAGxB,KAAK,uBAAuB,UAAU,UAAU,OAAO,UAAW,KAAK,MAAQ,CAAC,CAElF,CACF,EA9bE2rI,GAAe,WAAa,GAC5BA,GAAe,YAAc,EAF/B,IAAqBU,GAArBV,GCjOA,SAAwBW,GAAgB7gB,EAAe,CAC9C,UAAMzoE,GAAkByoE,CAAK,EAAE,SACxC,CCcA,MAAqB8gB,WAA0Bp0G,EAAe,CAO5D,MAAa,MAAO,CACZ,MAAC,OAAAzhC,CAAU,OACXuG,EAASvG,EAAO,WACtB,KAAK,UAAU,UAAU,IAAI,sBAAuB,wBAAwB,EAC5E,KAAM,CAAC81I,EAAWC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC7C,KAAK,SAAS,gBAAgB,UAAUxvI,CAAM,EAC9C,KAAK,SAAS,kBAAkB,WAAW,4BAA4B,EACxE,EACKyvI,EAAQ,CAACF,EACV,cAASE,EAAQ,kBAAoB,MAAM,EAEhD,CACE,MAAMj7H,EAAU,IAAIsoB,GAAe,CAAC,YAAa,EAAK,GAChD2K,EAA4B,GAE5BhK,EAAe,SAAS,cAAc,KAAK,EAejD,GAdaA,EAAA,UAAU,IAAI,eAAe,EAErC,oBAAiB,IAAI5C,GAAW,CACnC,MAAO,YACP,KAAM,eACN,UAAW,GACX,SAAU,GACX,EACI,wBAAqB,IAAIA,GAAW,CACvC,MAAO,WACP,KAAM,mBACN,UAAW,GACZ,EAEE76B,EAAQ,CACT,MAAMhG,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQgG,CAAM,EAE5DyvI,GACI,oBAAe,cAAcz1I,EAAK,UAAU,EAC5C,wBAAmB,cAAcA,EAAK,SAAS,IAE/C,oBAAe,iBAAiBA,EAAK,UAAU,EAC/C,wBAAmB,iBAAiBA,EAAK,SAAS,EAE3D,CAcA,GAZAyjC,EAAa,OAAO,KAAK,eAAe,UAAW,KAAK,mBAAmB,SAAS,EACpFgK,EAAY,KAAK,KAAK,eAAgB,KAAK,kBAAkB,EAExD,cAAW,IAAIhG,GAAS,CAC3B,OAAAhoC,EACA,YAAAguC,EACA,eAAgB,KAAK,eACrB,gBAAiB,GACjB,WAAY,KAAK,iBAAiB,IAAI,EACvC,EACD,KAAK,QAAQ,OAAO,KAAK,SAAS,OAAO,EAEtChuC,EAAQ,CACH,MAAAwqB,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAa,EAC/BA,EAAI,OAAO,KAAK,SAAS,WAAW,IAAI,EAElC,MAAAyrH,EAA6B,IAAI/lH,GAAc,CACnD,KAAM,gBACP,EAED+lH,EAA2B,MAAM,iBAAiB,SAAW1pI,GAAM,CAC7DA,EAAE,WAIN,KAAK,SAAS,mBAAmB,eAAe,CAAC,OAAAvM,CAAO,GACzD,EAED,KAAK,eAAe,IAAIC,CAAS,EAAE,kBAAmB,MAAMw2C,GAAW,CAClE,GAAAA,EAAO,KAAK,IAAM,aAAc,OACnC,MAAMz2C,EAASqG,GAAUowC,EAAO,KAAK,IAAI,EACzC,GAAGz2C,IAAWA,EAAQ,CACd,MAAAuP,EAAU,CAAE,MAAM,KAAK,SAAS,wBAAwB,QAAQknC,EAAO,eAAe,EACzFlnC,IAAY0mI,EAA2B,UACxCA,EAA2B,QAAU1mI,EAEzC,EACD,EAEK,MAAA2mI,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAc,EAC5BA,EAAA,OAAO,IAAIn/H,GAAU,CAClC,OAAA/W,CAAA,CACD,EAAE,OAAO,EAEJ,MAAAm2I,EAAqB,SAAS,cAAc,KAAK,EAMvD,GALmBA,EAAA,UAAU,IAAI,kBAAkB,EAChCA,EAAA,OAAO5xI,EAAK,0BAA0B,CAAC,EAE1DwW,EAAQ,QAAQ,OAAOyP,EAAK0rH,EAAgBC,EAAoBnyG,CAAY,EAExEgyG,EAWG,CACL,MAAMz1I,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQgG,CAAM,EAEzD6vI,EAAW,IAAI19G,GAAI,CACvB,KAAM,QACN,aAAcn4B,EAAK,MAAQ,OAAY,eACvC,MAAOA,EAAK,MAAQq1I,GAAgBr1I,EAAK,KAAK,EAAK,OACnD,gBAAiBA,EAAK,MAAQ,QAAU,4BACxC,iBAAkBA,EAAK,MAAQ,OAAY,CAAC,IAAIwW,GAAU,CAAC,OAAA/W,EAAe,EAAE,OAAO,EACpF,EAEO+a,EAAA,QAAQ,OAAOq7H,EAAS,SAAS,CAC3C,KAvBW,CACH,MAAAC,EAAmB,IAAI39G,GAAI,CAC/B,cAAeu9G,EACf,qBAAsB,GACtB,eAAgB,KAAK,eACtB,EAEK1mI,EAAU,CAAE,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAAvP,EAAQ,YAAa,EAAM,GAC3Gi2I,EAA2B,QAAU1mI,EAE7BwL,EAAA,QAAQ,OAAOs7H,EAAiB,SAAS,EAanD,MAEQt7H,EAAA,QAAQ,OAAOipB,CAAY,EAGhC,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,GAAIi7H,GA6BJ,GACED,EAAQ,KAAMO,GAAgBA,EAAY,IAAM,yBAAyB,GACzE,CAACP,EAAQ,KAAMO,GAAgBA,EAAY,IAAM,0BAA4BA,EAAY,MAAM,SAAS/vI,CAAM,CAAC,EAC/G,CACM,MAAAwU,EAAU,IAAIsoB,GAAe,CACjC,QAAS,+CACT,YAAa,CAAC,MAAM1wB,GAAc,CAAC,OAAQ,KAAK,MAAM,CAAC,CAAC,EACzD,EACKsd,EAAgB,KAAK,wBAA0B,IAAIC,GAAc,CACrE,KAAM,0CACN,QAAS,GACV,EACKoK,EAAMR,GAA2B7J,CAAa,EAE5ClV,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAE/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,MA9CW,CACH,MAAAA,EAAU,IAAIsoB,GAEdkX,EAAY/gB,GAAO,qCAAsC,CAAC,KAAM,SAAU,KAAM,yBAAyB,EAE/G3c,EAAiB09B,EAAW,IAAM,CACnBzqB,GAAA,YAAYD,GAAW,uBAAwB,CAC1D,OAAA7vB,EACA,aAAc,gBACd,mBAAoB,0BACpB,QAAS+vB,GAAgB,CAAC,CACxB,QAAS,SACT,SAAU,IAAM,CACd,MAAM4J,EAASpJ,GAAiB,CAACgqB,CAAS,EAAG,EAAI,EAE5C,cAAS,gBAAgB,eAAe,CAACh0C,CAAM,CAAC,EAAE,KAAK,IAAM,CAChE,KAAK,MAAM,GACV,IAAM,CACAozB,GAAA,CACR,CACH,EACA,SAAU,GACX,CAAC,EACH,EAAE,KAAK,CACP,GAAC,eAAgB,KAAK,cAAe,GAEhC5e,EAAA,QAAQ,OAAOw/B,CAAS,EAE3B,gBAAW,OAAOx/B,EAAQ,SAAS,EAoBzB8B,EAAA,KAAK,SAAS,QAAS,SAAW,CAC5C,cAAS,QAAQ,SAAW,GAEjC,KAAK,SAAS,gBAAgB,WAC5BtW,EACA,KAAK,eAAe,MACpB,KAAK,mBAAmB,OACvB,MAAM,KAAK,SAAS,gBAAgB,QAAQA,CAAM,GAAG,MACtD,KAAK,yBAAyB,OAChC,EAAE,QAAQ,IAAM,CACT,cAAS,QAAQ,gBAAgB,UAAU,EAChD,KAAK,MAAM,EACZ,CACA,GAAC,eAAgB,KAAK,cAAe,EAC1C,CACF,CCnNA,MAAMgwI,GAAc,gBAEpB,MAAqBC,EAA2C,CAK9D,YAAoBC,EAAqB,CAArB,YAAAA,EAClB,KAAK,OAAS,CAChB,CAEO,UAAUr8G,EAAiB4X,EAAO,GAAO,CAC9C,EAAE,KAAK,OACP,KAAK,UAAY5X,EAEb,IACI,MAAA6+B,EAAQ,KAAK,cACnBA,EAAM,SAAW,GACjBA,EAAM,IAAMs9E,GAAcn8G,EAC1B6+B,EAAM,KAAOjnB,EACbmkB,GAAS8C,CAAK,QACR1sD,EAAG,CACD,cAAM,YAAa6tB,EAAM7tB,CAAC,CACpC,CACF,CAEO,qBAAqB6tB,EAAiB4X,EAAgB,CACxD,KAAK,YAAc5X,GACf,eAAUA,EAAM4X,CAAI,CAE7B,CAEO,aAAc,CACf,IAAC,MAAAinB,CAAS,OACd,OAAGA,IAIKA,EAAA,KAAK,MAAQ,IAAI,MACzB9C,GAAS8C,CAAK,EACPA,EACT,CAEO,WAAY,CACb,KAAK,OAIT,KAAK,MAAM,OACb,CAEO,mBAAoB,CACzB,EAAE,KAAK,MACT,CAEO,qBAAqB7+B,EAAiB4X,EAAe11B,EAAiB,CAErE,MAAAS,EAAS,EAAE,KAAK,OACtB,WAAW,IAAM,CACZ,KAAK,SAAWA,GAId,eAAUqd,EAAM4X,CAAI,GACxB11B,CAAO,CACZ,CACF,CChEA,IAAIo6H,GACJ,SAAwBC,IAAyB,CACxC,OAAAD,QAAe,IAAIF,GAAiB,CACzC,yBACA,qBACA,uBACA,uBACD,EACH,CCbA,SAAwBI,GAAoBC,EAAoD,CAC9F,OAAQ,CAAC,CAAC,WAAW,cAAc,2BAAsEA,CAAU,CACrH,CCLA,SAAwBC,IAA6C,CACnE,MAAMC,EAAqC,CACzC,aAAc,GASN,MANoD,CAC5D,mBACA,mBACA,mBAGQ,QAASF,GAAe,CAC7BD,GAAoBC,CAAU,IAE/BE,EAAYF,CAAU,EAAI,GAC5B,CACD,EAEME,CACT,CCrBA,SAAwBC,GAAqBC,EAAqB,CAChE,MAAMF,EAAyC,CAC7C,MAAO,CAGL,MAAO,CAAC,IAAK,IAAI,EACjB,OAAQ,CAAC,IAAK,IAAI,EAClB,UAAW,CAAC,IAAK,EAAE,CACrB,GAGF,OAAIE,IACFF,EAAY,MAAQ,IAGfA,CACT,CChBA,eAA8BG,GAAgBH,EAAwC,CACpF,MAAMI,EAAe,MAAM,UAAU,aAAa,gBAAgBJ,CAAW,EACvEK,EAAQD,EAAa,eAAe,EAAE,CAAC,EAC7C,OAAAC,EAAM,YAAc,OACbD,CACT,CCL8B,eAAAE,GAAUN,EAAqC5jF,EAAgB,CAG3F,MAAM8J,EAAS,MAAM,UAAU,aAAa,aAAa85E,CAAW,EACpE,OAAA95E,EAAO,UAAU,EAAE,QAAS9qC,GAAM,CAChCA,EAAE,QAAU,CAACghC,CAAA,CACd,EAGM8J,CACT,CAEC,OAAe,UAAYo6E,GCA5B,SAAwBC,IAAkB,CACxC,MAAMC,EASF,CACF,KAAM,CAAC,EACP,OAAQ,CAAC,GAGX,MAAO,OAAMx3I,GAOP,CACE,MAAC,SAAAy3I,EAAU,YAAAT,CAAe,EAAAh3I,EAC1BqO,EAAQmpI,EAAOC,EAAW,SAAW,MAAM,EACjD,IAAI7rI,EAAgCyC,EAAM2oI,EAAY,MAAQ,QAAU,OAAO,EAE3EprI,IACFA,GAAW6rI,EAAWN,GAAkBG,IAAWN,EAAch3I,EAAgB,KAAK,EACnFg3I,EAAY,OAAS,CAAC3oI,EAAM,QAAOA,EAAM,MAAQzC,EAAQ,QAAQ,IAAMyC,EAAM,MAAQ,MAAS,GAC9F2oI,EAAY,OAAS,CAAC3oI,EAAM,QAAOA,EAAM,MAAQzC,EAAQ,QAAQ,IAAMyC,EAAM,MAAQ,MAAS,IAG/F,IACF,OAAO,MAAMzC,QAYPwF,EAAK,CACL,MAAAA,CACR,EAEJ,CAEC,OAAe,gBAAkBmmI,GChElC,SAAwBG,IAA6C,CAC5D,OACL,MAAO,CAAC,IAAK,KAAM,IAAK,IAAuB,EAC/C,OAAQ,CAAC,IAAK,IAAK,IAAK,IAAuB,EAC/C,UAAW,CAAC,IAAK,GAAI,IAAK,EAAE,EAEhC,CCJA,SAAwBC,GAAUN,EAAyB,CACzDA,EAAM,KAAK,EACXtkH,GAAcskH,EAAO,OAAO,CAC9B,CCLO,MAAMO,GAAyC,GACzCC,GAA2C,IAS3CC,GAA0B,EAC1BC,GAAuB,ECApC,MAAqBC,EAAsB,CAIzC,YAAoBp1G,EAAS;AAAA,EAAQ,CAAjB,YAAAA,EAClB,KAAK,MAAQ,GACb,KAAK,QAAU,EACjB,CAEO,OAAOylB,EAAgB,CACvB,kBAAM,KAAK,GAAGA,CAAI,EAChB,IACT,CAEO,KAAK4vF,EAAc,CACnB,oBAAQ,KAAKA,CAAI,EACf,IACT,CAEO,UAAUC,EAAY,GAAI,CAC/B,YAAK,IAAI,KAAK,QAAQ,KAAKA,CAAS,CAAC,EACrC,KAAK,QAAU,GACR,IACT,CAEO,MAAO,CACZ,OAAO,KAAK,MAAM,KAAK,KAAK,MAAM,CACpC,CAEO,UAAW,CACT,YAAK,OAAS,KAAK,MAC5B,CACF,CC9BO,SAASC,GAAiBh1E,EAAgB,CAC/C,OAAOA,GAAU,CACnB,CAIO,SAASi1E,GAAmBj1E,EAAgB,CACjD,OAAOA,IAAW,CACpB,CAEgB,SAAAk1E,GAAa5yG,EAAmB+mD,EAAQ,EAAG,CACzD,GAAG,CAAC/mD,EAAc,SAEZ,MAAC,OAAAhmC,CAAU,EAAAgmC,EACjB,IAAIkgE,EAAQ,EACZ,QAAQhiG,EAAI,EAAGA,EAAIlE,EAAQ,EAAEkE,EAC3BgiG,GAASlgE,EAAM9hC,CAAC,EAAI8hC,EAAM9hC,CAAC,EAE7B,MAAM20I,EAAM,KAAK,KAAK3yC,EAAQlmG,CAAM,EAAI,IAExC,OAAO,KAAK,IAAI,EAAG64I,EAAM9rD,CAAK,CAChC,CCbO,MAAM+rD,GAAoB,IAE1B,SAASC,GAAiBtkF,EAA2B,CACnD,OAAAA,IAAc,aAAe,QAAUA,CAChD,CAEO,SAASukF,GAAiBv/H,EAAkD,CACjF,MAAMrP,EAAgB,GACtB,OAAAA,EAAI,KAAK,cAAc,EACnBA,EAAA,KAAK,GAAGqP,EAAE,UAAU,IAAIA,EAAE,SAAS,IAAIA,EAAE,SAAS,YAAa,KAAIA,EAAE,QAAQ,IAAIA,EAAE,EAAE,IAAIA,EAAE,IAAI,QAAQA,EAAE,IAAI,EAAE,EAChHA,EAAE,UAAU,IAAM,QACfrP,EAAA,KAAK,UAAUqP,EAAE,UAAU,CAAC,UAAUA,EAAE,UAAU,CAAC,EAAE,EAE3DrP,EAAI,KAAK,eAAeqP,EAAE,UAAU,EAAE,EAC/BrP,EAAI,KAAK,EAAE,CACpB,CAEO,SAAS6uI,GAA8BxkF,EAA2B,CAEhE,OAAAA,IAAc,cAAgB,YAAc,mBACrD,CAEO,SAASykF,GAAuBzkF,EAA2B0kF,EAAOL,GAAmBM,EAAiC,CACrH,MAAAC,EAAiBJ,GAA8BxkF,CAAS,EAC9D,MAAO,KAAKskF,GAAiBtkF,CAAS,CAAC,IAAI0kF,CAAI,IAAIE,CAAc,IAAID,EAAW,KAAK,GAAG,CAAC,EAC3F,CAMO,MAAME,WAAmBf,EAAsB,CAC7C,aAAa9+H,EAAkD,CACpE,OAAO,KAAK,IAAIu/H,GAAiBv/H,CAAC,CAAC,CACrC,CAsBO,UAAU8/H,EAAaC,EAAsB,CAC5C,MAAAC,EAASD,EAAW,KAAK,GAAG,EAClC,OAAO,KAAK,IACV,MACA,OAAOD,CAAG,oBACV,MACA,QACA,uBACA,kBAAkBE,CAAM,GACxB,wBAEA,wBAEJ,CAEO,aAAaC,EAAyCC,EAA0B,CAChF,SACH,eAAeD,EAAU,KAAK,GAC9B,aAAaA,EAAU,GAAG,GAC1B,yBAGQ,UAAAE,KAAeF,EAAU,aAC5B,SACH,iBAAiBE,EAAY,IAAI,IAAIA,EAAY,WAAW,GAC5D,WAAWA,EAAY,KAAK,IAI7B,IAACD,GAAkBD,EAAU,WACpB,UAAAG,KAAaH,EAAU,WAC/B,KAAK,aAAaG,CAAS,EAIxB,WACT,CAEO,QAAQ5qI,EAAwB,CACrC,IAAI6qI,EAAa,SACb,CAAC,KAAAj1H,EAAM,aAAAk1H,CAAgB,EAAA9qI,EAIrB,MAAAy0D,EAASi1E,GAAmB1pI,EAAM,MAAM,EAEhC6qI,GAAAp2E,EACN7+C,GAAA6+C,EAOR,MAAMs2E,EAAU,IAAM,CACpB,KAAK,IAAI,UAAUF,CAAU,IAAIj1H,CAAI,EAAE,GAGnCo1H,EAAaC,GAAiB,CAC7B,SACH,UAAUA,CAAI,UAAUJ,CAAU,GAClC,UAAUI,CAAI,SAASJ,CAAU,IAAIj1H,CAAI,GACzC,UAAUq1H,CAAI,YAAYJ,CAAU,GACpC,UAAUI,CAAI,UAAUr1H,CAAI,GAC9B,EAGM,OAAAm1H,IACLD,GAAc,OACFA,EAAA,QAASI,GAAc,CAC/B,GAAAA,EAAU,QAAQ,OAAQ,CAC3B,MAAM12E,EAAU02E,EAAU,QAAQ,IAAIxB,EAAkB,EACnD,SAAI,gBAAgBwB,EAAU,SAAS,IAAI12E,EAAQ,KAAK,GAAG,CAAC,EAAE,EACnEA,EAAQ,QAAQw2E,CAAS,CAC3B,EACD,EAEDA,EAAUv2E,CAAM,EAGX,IACT,CAEO,aAAaz0D,EAAwBsV,EAAsB61H,EAAoB,CACpF,MAAMjzH,EAAM,IAAIwL,IAAgB,KAAK,IAAI,GAAGA,CAAC,EAEvC,CAAC,KAAA9N,EAAM,IAAA1W,EAAK,UAAAuuD,EAAW,KAAAy8E,GAAQlqI,EAC/ByqI,EAAYn1H,EAAK,UAMjB81H,EAAgBx1H,IAAS,cACzBy1H,EAAQD,EAAgB,OAAY91H,EAAKM,CAAI,EAE7C01H,EAAa79E,IAAc,WAC9B,GAAAztD,EAAM,gBAAgBmrI,CAAQ,EACxB,OAAAjzH,EACL,KAAK4xH,GAAiBl0H,CAAI,CAAC,MAAMo0H,GAA8Bp0H,CAAI,CAAC,KACpE,mBACA,aACA,SAAS1W,CAAG,IAIV,MAAAqsI,EAAgBH,EAAyC,CAAC,CAAC,GAAI,IAAoB,EAAnDC,EAAM,eAAe,EACrDzoE,EAAM2oE,EAAa,IAAK31H,GAASA,EAAK,EAAE,EAC9CsC,EACE+xH,GAAuBr0H,EAAMs0H,EAAMtnE,CAAG,EACtC,mBACA,UAAUsnE,CAAI,mBAGbO,EAAU,UAAU,GACrBvyH,EAAI,YAAY,EAGdA,EAAA,SAAShZ,CAAG,EAAE,EAKlB,IAAIgG,EAAeuoD,EAWnB,GAVGA,IAAc,YAAc09E,GAAY,EAAEG,GAAcF,KAC1ClmI,EAAAuoD,IAAc,WAAa,WAAa,YAIrDv1C,EAAA,KAAKhT,CAAY,EAAE,EAGvB,KAAK,aAAaulI,CAAS,EAEvBW,EAgCFlzH,EAAI,aAAaqzH,EAAa,CAAC,EAAE,EAAE,yBAAyB,MAhC3C,CACX,MAAAC,EAAUH,EAAM,aAAa,EAChCG,GAAS,QACFA,EAAA,QAASC,GAAW,CAC1BvzH,EAAI,YAAYuzH,EAAO,EAAE,IAAIA,EAAO,GAAG,EAAE,EAC1C,EAGUF,EAAA,QAAS31H,GAAS,CACzBsC,EAAA,YAAYtC,EAAK,EAAE,IAAIA,EAAK,IAAI,IAAIA,EAAK,SAAS,GAAGA,EAAK,UAAYA,EAAK,SAAW,EAAI,IAAIA,EAAK,QAAQ,GAAK,EAAE,EAAE,EAExH,MAAM81H,EAAa91H,EAAK,WACrB,SAAM,QAAQ81H,CAAU,EACtBA,EAAW,QACJ,cAAM,yBAA0BA,CAAU,UAE5CA,GAAc,OAAO,KAAKA,CAAU,EAAE,OAAQ,CACtD,MAAM53I,EAAc,GACpB,UAAUmB,KAAKy2I,EACb53I,EAAE,KAAK,GAAGmB,CAAC,IAAIy2I,EAAWz2I,CAAC,CAAC,EAAE,EAE5BijB,EAAA,UAAUtC,EAAK,EAAE,IAAI9hB,EAAE,KAAK,GAAG,CAAC,EAAE,CACxC,CAEM,MAAA63I,EAAM/1H,EAAK,UAAU,EACxB+1H,GAAK,QACFA,EAAA,QAASC,GAAO,CAClB1zH,EAAI,aAAatC,EAAK,EAAE,IAAIg2H,EAAG,IAAI,GAAGA,EAAG,QAAU,IAAMA,EAAG,QAAU,EAAE,EAAE,EAC3E,CACH,CACD,EAKH,OAAG5rI,EAAM,SAAWkF,IAAiB,YAAcA,IAAiB,aAClE,KAAK,QAAQlF,CAAK,EAGb,IACT,CAEO,cAAc1O,EAKlB,CACD,KAAM,CAAC,WAAAu6I,EAAY,QAAAlqF,EAAS,OAAA6oF,EAAQ,SAAAW,GAAY75I,EAC3C,eAAUu6I,EAAW,UAAWrB,CAAM,EAExCsB,IACI,kBAAaD,EAAW,SAAS,EAGxC,UAAU7rI,KAAS2hD,EAEjB,KAAK,cAAcwpF,EAAWnrI,EAAM,WAAaA,EAAM,UAAYA,EAAM,WAAaA,EAAM,YAAcA,EAAO6rI,EAAYV,CAAQ,EAGhI,WACT,CAEA,OAAc,eAAe75I,EAAqD,CAChF,OAAO,IAAI+4I,GAAW,EAAE,cAAc/4I,CAAO,EAAE,SAAS,CAC1D,CACF,CC7OA,MAAMy6I,EAAoB,CAKxB,YAAY11H,EAAuBm4C,EAAqB,CACtD,MAAMw9E,EAAe,KAAK,aAAe31H,EAAQ,wBAAwBm4C,CAAM,EACzEy9E,EAAW,KAAK,SAAW51H,EAAQ,eAAe,EAC3C,KAAK,KAAOA,EAAQ,WAAW,EAG5C41H,EAAS,YAAc,KACvBA,EAAS,YAAc,IACvBA,EAAS,sBAAwB,IACjCA,EAAS,QAAU,KAGnBD,EAAa,QAAQC,CAAQ,CAE/B,CACF,CAEA,MAAqBC,GAArB,MAAqBA,EAAc,CAkBjC,YAAoBp6G,EAAmB,CAAnB,cAAAA,EA0Ib,kBAAgBv2B,GAA2C,CAChE,KAAM,CAAC,eAAA4wI,EAAgB,OAAA39E,EAAQ,MAAAm6E,EAAO,OAAAl0E,EAAQ,KAAA7+C,CAAQ,EAAAra,EAChD0wI,EAAWE,EAAe,SAChC,GAAG,CAACF,EAAU,OAEd,MAAMl1G,EAAQ,IAAI,WAAWk1G,EAAS,iBAAiB,EACvDA,EAAS,qBAAqBl1G,CAAK,EAC7B,MAAAvuB,EAAQmhI,GAAa5yG,CAAK,EAEzB,OACL,KAAAnhB,EACA,OAAA6+C,EACA,OAAAjG,EACA,MAAAm6E,EACA,MAAAngI,CAAA,CACF,EAGF,KAAO,QAAU,IAAM,CACf,MAAAioB,EAAM,KAAK,QAAU,IAAM,EAG3B27G,GAFgB37G,EAAM,KAAK,MAAQ,KAAK,MAAM,OAAQ/M,GAAMA,EAAE,OAAS,OAAO,GACnD,OAAQA,GAAMA,EAAE,OAAS,OAAO,EACnC,MAAM,EAAGwlH,EAAsC,EAAE,IAAI,KAAK,YAAY,EACjG,EAAE,KAAK,SAAW,MACnB,KAAK,QAAU,GAGHgD,GAAA,kBAAkB,cAAc,YAAa,CACzD,WAAAE,EACA,KAAM37G,EAAM,MAAQ,QACrB,GAvKD,KAAK,QAAU,IAAK,OAAO,cAAiB,OAAe,oBAC3D,KAAK,MAAQ,GACR,kBAAe,IAAI,YACnB,iBAAc,IAAI,YACvB,KAAK,QAAU,EACV,SAAM0B,GAAO,IAAI,EACtB,KAAK,UAAY,WACjB,KAAK,yBAA2B,GAE3B,WAAQ,CAAC,QAAS,OAAO,CAChC,CAEO,UAAUq8B,EAAqB54C,EAA0B,CAC9D44C,EAAO,UAAU,EAAE,QAASm6E,GAAU,CAC/B,cAASn6E,EAAQm6E,EAAO/yH,CAAI,EAClC,CACH,CAEO,SAAS44C,EAAqBm6E,EAAyB/yH,EAA0B,CACtF,KAAK,IAAI,WAAYA,EAAM+yH,EAAOn6E,CAAM,EAExC,KAAM,CAAC,QAAAn4C,EAAS,MAAAqQ,EAAO,YAAA2lH,EAAa,aAAAC,GAAgB,KAC9CC,EAA2B5D,EAAM,KACjCl0E,EAASy3E,GAAc,UAAU19E,EAAQ54C,CAAI,EAGnD,OAAOA,EAAM,CACX,IAAK,QAAS,CACRy2H,EAGFA,EAAY,SAAS1D,CAAK,EAF1B,KAAK,YAAcn6E,EAKrB,KACF,CAEA,IAAK,SAAU,CACb,QAAQv5D,EAAI,EAAGA,EAAIyxB,EAAM,OAAQ,EAAEzxB,EAAG,CAC9B,MAAC,MAAON,EAAG,KAAAihB,EAAM,OAAQ42H,CAAc,EAAA9lH,EAAMzxB,CAAC,EACjD,GAAAu3I,IAAe/3E,GAAU7+C,IAAS,QAAS,CACtC8Q,EAAA,OAAOzxB,EAAG,CAAC,EACjBq3I,EAAa,YAAY33I,CAAC,EAC1B,KACF,CACF,CAEG43I,IAAS,SACVD,EAAa,SAAS3D,CAAK,EAG7B,KACF,CACF,CAEA,KAAK,oBAAoB,CACvB,KAAA/yH,EACA,OAAA6+C,EACA,OAAAjG,EACA,MAAAm6E,EACA,KAAA4D,EACA,eAAgBA,IAAS,QAAU,IAAIR,GAAoB11H,EAASm4C,CAAM,EAAI,OAC/E,EAEE+9E,IAAS,SAAW,KAAK,UAC1B,KAAK,YAAY,CAErB,CAEQ,oBAAoBhxI,EAAkB,CACtC,MAAC,MAAAotI,CAAS,EAAAptI,EACVotI,EAAA,iBAAiB,QAAS,IAAM,CACpC,KAAK,YAAYA,CAAK,GACrB,CAAC,KAAM,GAAK,EAEV,WAAM,KAAKptI,CAAI,CACtB,CAEO,kBAAkBgxI,EAA0B,CAC1C,YAAK,MAAM,KAAMhxI,GAASA,EAAK,OAAS,SAAWA,EAAK,OAASgxI,CAAI,CAC9E,CAEA,OAAc,UAAU/9E,EAAqB54C,EAA0B,CACrE,OAAOA,IAAS,QAAW44C,EAAO,QAAUA,EAAO,GAAM,GAAKi7E,GAAiB,CAACj7E,EAAO,GAAG,UAAU,CAAC,CAAC,CACxG,CAEO,YAAYm6E,EAAyB,CACrC,SAAI,cAAeA,CAAK,EAEvB,MAAC,MAAAjiH,CAAS,OAEhB,IAAI+lH,EAAU,GACN,UAAI,EAAG17I,EAAS21B,EAAM,OAAQ,CAAC+lH,GAAW,EAAI17I,EAAQ,EAAE,EAAG,CACjE,KAAM,CAAC,MAAO4D,EAAG,KAAAihB,CAAI,EAAI8Q,EAAM,CAAC,EAChC,OAAO9Q,EAAM,CACX,IAAK,SAAU,CACVjhB,IAAMg0I,IACDjiH,EAAA,OAAO,EAAG,CAAC,EACZ,kBAAa,YAAYiiH,CAAK,EACzB8D,EAAA,IAGZ,KACF,CAEA,IAAK,QAAS,CACT93I,IAAMg0I,IACDjiH,EAAA,OAAO,EAAG,CAAC,EACZ,iBAAY,YAAYiiH,CAAK,EACxB8D,EAAA,IAGZ,KACF,CACF,CACF,CAEG9D,EAAM,OAAS,SAAW,KAAK,UAChC,KAAK,YAAY,CAErB,CAEO,kBAAkBn6E,EAAqBk+E,EAA4B,CACxE,KAAK,YAAYA,CAAQ,EACpB,eAAUl+E,EAAQ,OAAO,CAChC,CAEQ,aAAc,CACjB,KAAK,QAAU,QAChB,cAAc,KAAK,KAAK,EAGvB,KAAK,MAAM,SACZ,KAAK,MAAQ,OAAO,YAAY,KAAK,QAAS,KAAK,QAAQ,EAE/D,CAgDO,mBAAmBq9E,EAAwC,CAChE,GAAG,KAAK,OACN,OAGF,KAAM,CAAC,YAAAQ,EAAa,UAAA5+E,EAAW,yBAAAk/E,CAAA,EAA4B,KACrDC,EAAyC,CAAC,UAAAn/E,EAAW,QAAS,CAAC4+E,CAAW,CAAC,EAC3EjkG,EAAQ,KAAK,MAAM,IAAKxyB,GACrB,CACLA,EAGAg3H,CAAA,CAEH,EAEKC,EAASR,EAAY,YAE3B,SAAU,CAACz2H,EAAMg3H,CAAe,IAAKxkG,EAAO,CACtC,IAAApoC,EAAQ6rI,EAAW,UAAW7rI,GAAUA,EAAM,YAAcytD,GAAaztD,EAAM,OAAS4V,CAAI,EAChG,GAAG,CAAC5V,EAAO,CACT,GAAG,CAAC2sI,EACF,SAGM3sI,EAAA6rI,EAAW,YAAYj2H,CAAI,CACrC,CAMI,IAAC,YAAAk3H,CAAe,EAAA9sI,EAChB8sI,IACFA,EAAc9sI,EAAM,kBAAkB6rI,EAAW,WAAYe,CAAe,GAU3E5sI,EAAM,YAAc8sI,EAAY,YACjCA,EAAY,UAAY9sI,EAAM,WAG1B,MAAA+sI,EAAiBjD,GAAiBl0H,CAAI,EACtCo3H,EAAWH,EAAO,UAAWlE,GAAUA,EAAM,OAASoE,CAAc,EACpEpE,EAAQqE,IAAa,GAAKH,EAAO,OAAOG,EAAU,CAAC,EAAE,CAAC,EAAI,OAC1DC,EAASH,EAAY,OACxBG,EAAO,QAAUtE,GAKRsE,EAAO,aAAatE,CAAK,EAAE,MAAOjmI,GAAQ,CAC/C,SAAI,MAAMA,CAAG,EACnB,CAIH,CACF,CAEO,MAAO,CACR,IACa,KAAK,YAAY,YAAY,OAAO,KAAK,aAAa,WAAW,EACzE,QAASimI,GAAU,CACxBM,GAAUN,CAAK,EAChB,QACK,EAAG,CACJ,SAAI,MAAM,CAAC,CAClB,CACF,CACF,EArRgBuD,GAAA,kBAAoB,IAAIrpH,GADxC,IAAqBqqH,GAArBhB,GCrCA,MAA8BiB,WAA2DtqH,EAAqB,CAY5G,aAAc,CACZ,MAAM,EAAK,EAEX,MAAMxZ,EAAS,KAAK,OAAS,SAAS,cAAc,KAAK,EAClDA,EAAA,UAAU,IAAI,aAAa,EAClCA,EAAO,MAAM,QAAU,OACd,cAAK,OAAOA,CAAM,EAEtB,kBAAe,IAGpB,MAAMmhD,EAAQ,KAAK,MAAQ,IAAI,MAC/BA,EAAM,SAAW,GACjBA,EAAM,OAAS,EACV,YAAO,OAAOA,CAAK,EACnB,cAAS,IAAI,QAASA,CAAK,EAEhC,KAAK,eAAe,EAEpB,KAAK,UAAYq+E,IACnB,CAEA,IAAW,gBAAiB,CAC1B,MAAO,CAAC,CAAC,KAAK,cAAc,kBAAkB,OAAO,CACvD,CAEA,IAAW,gBAAiB,CAC1B,MAAO,CAAC,CAAC,KAAK,cAAc,kBAAkB,OAAO,CACvD,CAKO,gBAAiB,CAEtBnhF,GAAS,KAAK,KAAK,CAErB,CAEO,mBAAmBhD,EAAgB,CACxC,OAAO,KAAK,mBAAmB,GAAM,GAAOA,CAAK,CACnD,CAEO,mBAAmB8F,EAAgBpG,EAAgBM,EAAgB,CAClE,MAAC,cAAA0oF,CAAiB,OACxB,GAAGA,EAAe,CACV,MAAAC,EAAc,CAAC7iF,GAAS,KAAK,eAC7B8iF,EAAc,CAAClpF,GAAS,KAAK,eACnC,GAAGipF,GAAeC,EAChB,OAAO,QAAQ,SAEnB,CAEA,MAAMhF,EAAsC,CAC1C,MAAO99E,GAAS69E,GAAoB,EACpC,MAAOjkF,GAAS4kF,GAAoB,GAGtC,OAAO,KAAK,UAAU,CACpB,YAAAV,EACA,MAAA5jF,CAAA,CACD,EAAE,KAAM8J,GAAW,CAClB,KAAK,cAAcA,CAAM,EAC1B,CACH,CAEO,eAAgB,CACrB,OAAO,KAAK,UAAU,CACpB,SAAU,GACV,YAAa+5E,GAAqB,EAAI,EACvC,EAAE,KAAM/5E,GAAW,CAClB,KAAK,cAAcA,CAAM,EAC1B,CACH,CAEO,WAAW++E,EAA2B,CAC3C,OAAO,KAAK,SAAS,IAAI,GAAKA,CAAQ,CACxC,CAMO,SAAU,CACf,KAAK,OAAO,YAAc,GAC1B,KAAK,OAAO,SACZ,KAAK,SAAS,QAGd,KAAK,cAAc,OAEnB,MAAM,QAAQ,CAChB,CAEO,QAAQn6H,EAAsB,CACnC,KAAK,YAAY,CACf,OAAQA,EAAM,QAAQ,CAAC,EACvB,MAAOA,EAAM,MACb,KAAM,SACP,CACH,CAEO,qBAAqBo7C,EAAqB54C,EAAe,CAC9D,MAAM+yH,EAAQn6E,EAAO,eAAe,EAAE,CAAC,EACvC,KAAK,YAAY,CACf,OAAAA,EACA,MAAAm6E,EACA,KAAM,QACN,OAAQ/yH,GAAQ,OACjB,CACH,CAEO,YAAY,CAAC,OAAA44C,EAAQ,MAAAm6E,EAAO,KAAA/yH,EAAM,OAAA6+C,GAA6B,CAChEA,IACOA,EAAAy4E,GAAc,UAAU1+E,EAAQ54C,CAAI,GAG/C,KAAK,IAAI,cAAe44C,EAAQm6E,EAAO/yH,EAAM6+C,CAAM,EAEnD,MAAM+4E,EAAW53H,IAAS,SAEpB,CAAC,OAAAvM,EAAQ,SAAAlV,EAAU,cAAAi5I,CAAA,EAAiB,KAEpCljH,EAAUy+G,EAAM,KAChBp5H,EAAU2a,IAAY,QAEtBujH,EAAkBl+H,EAAUklD,EAASvqC,EACvC,IAAAnkB,EAAU5R,EAAS,IAAIs5I,CAAe,EAEvCl+H,GACKo5H,EAAA,iBAAiB,QAAS,IAAM,CACpC,KAAK,IAAI,iBAAiB,EAC1Bx0I,EAAS,OAAOs5I,CAAe,GAE9B,CAAC,KAAM,GAAK,EAGdD,GACaJ,EAAA,SAAS5+E,EAAQm6E,EAAO/yH,CAAI,EAGtC,MAAA83H,EAAYn+H,EAAUi/C,EAAS4+E,EAAc,aACnD,GAAIrnI,EAuBCA,EAAQ,QACT2hD,GAAS3hD,CAAO,EAKlBA,EAAQ,UAAY2nI,MA7BT,CAMP,GALM3nI,EAAA,SAAS,cAAcmkB,CAAO,EACxCnkB,EAAQ,SAAW,GACnBA,EAAQ,UAAY2nI,EACpB3nI,EAAQ,OAAS,EAEbA,EAAgB,SAAW,YAAa,CACpC,MAAC,eAAA4nI,CAAkB,OACtBA,GACA5nI,EAAgB,UAAU4nI,CAAc,CAE7C,CAEIp+H,GAGMxJ,EAAA,aAAa,cAAe,MAAM,EAC1CA,EAAQ,MAAQ,IAHhBsD,EAAO,YAAYtD,CAAO,EAOnB5R,EAAA,IAAIs5I,EAAiB1nI,CAAO,EAYhC,OAAA0uD,CACT,CAEO,SAAS/P,EAAiB,CAC/B,KAAK,cAAc,YAAY,iBAAiB,QAASikF,GAAU,CAC9DA,GAAO,OAAS,UACjBA,EAAM,QAAUjkF,IAAU,OAAY,CAACikF,EAAM,QAAU,CAACjkF,EAC1D,CACD,CACH,CAEU,cAAc8J,EAA2B,CAC9C,GAAC,KAAK,UAaPA,EAAO,UAAU,EAAE,QAASm6E,GAAU,CACpCM,GAAUN,CAAK,EAChB,MAfiB,CACEn6E,EAAO,iBACZ,QACR,0BAAqBA,EAAQ,MAAM,EAGpC,MAAC,cAAA4+E,EAAe,YAAA3qH,CAAe,OACvB2qH,EAAA,UAAU5+E,EAAQ,OAAO,EAEpC/rC,GACD2qH,EAAc,mBAAmB3qH,CAAW,CAC9C,CAMJ,CACF,CC1OwB,SAAAmrH,GAAkBC,EAA+B7oG,EAA2BnN,EAAc,CAG5GA,IACFA,EAAM1F,GAAO,gBAAgB,GAG/B,MAAMkoF,EAAUwzB,EAAW,kBAAkB,OAAQ7oG,CAAI,EAEjD,OAAAq1E,EAAA,iBAAiB,UAAYv8G,GAAM,CACzC+5B,EAAI,YAAa/5B,CAAC,EACnB,EACOu8G,EAAA,iBAAiB,OAAQ,IAAM,CACrCxiF,EAAI,QAAQ,EACb,EACOwiF,EAAA,iBAAiB,QAAS,IAAM,CACtCxiF,EAAI,SAAS,EACd,EAEDwiF,EAAQ,IAAMxiF,EAEPwiF,CACT,CCtBwB,SAAAyzB,GAAqBxlD,EAA0BzwD,EAAc,CAC/EA,IACFA,EAAM1F,GAAO,mBAAmB,GAGlC0F,EAAI,aAAa,EAGX,MAAAg2G,EAAa,IAAI,kBAAkBvlD,CAAM,EACpC,OAAAulD,EAAA,iBAAiB,QAAUz6H,GAAU,CAC9CykB,EAAI,UAAWzkB,CAAK,EACrB,EACUy6H,EAAA,iBAAiB,uBAAwB,IAAM,CACpDh2G,EAAA,yBAA0Bg2G,EAAW,cAAc,EACxD,EACUA,EAAA,iBAAiB,wBAAyB,IAAM,CACrDh2G,EAAA,0BAA2Bg2G,EAAW,eAAe,EAC1D,EACUA,EAAA,iBAAiB,oBAAqB,IAAM,CACjDh2G,EAAA,sBAAuBg2G,EAAW,cAAc,EACrD,EACUA,EAAA,iBAAiB,eAAiBz6H,GAAU,CACrDykB,EAAI,iBAAkBzkB,CAAK,EAC5B,EACUy6H,EAAA,iBAAiB,2BAA4B,IAAM,CACxDh2G,EAAA,6BAA8Bg2G,EAAW,kBAAkB,EAChE,EACUA,EAAA,iBAAiB,cAAe,IAAM,CAC/Ch2G,EAAI,eAAe,EACpB,EAEDg2G,EAAW,IAAMh2G,EAEV,CAAC,WAAAg2G,CAAU,CACpB,CCzBO,MAAME,EAAgB,CAa3B,YAAmB7uI,EAAoB0W,EAAsB,CAA1C,SAAA1W,EAAoB,UAAA0W,EACrC,KAAK,KAAOi0H,EACd,CAEO,aAAap8E,EAAuC,CACtD,OAAC,KAAK,oBACP,KAAK,kBAAoBA,GAGpB,KAAK,UAAYA,CAC1B,CAEO,QAAQy8E,EAAc,CAC3B,OAAO,KAAK,KAAOA,CACrB,CAEO,YAAYqD,EAAkB,CACnC,OAAO,KAAK,SAAWA,CACzB,CAEO,UAAUh8I,EAAgB,CAC/B,OAAO,KAAK,OAASA,CACvB,CAEO,kBAAkBs8I,EAA+BhkH,EAA8B,CACpF,OAAGA,GAAM,WACF,kBAAaA,EAAK,SAAS,EAG3B,KAAK,YAAcgkH,EAAW,eAAe/D,GAAiB,KAAK,IAAI,EAAGjgH,CAAI,CACvF,CAEO,UAAU4qC,EAAyD,CACpE,IAAAq2E,EACD,SAAM,QAAQr2E,CAAM,EAAG,CACrB,IAACA,EAAO,CAAC,EAAG,OACAq2E,EAAAr2E,EACfA,EAASq2E,EAAa,CAAC,EAAE,QAAQ,CAAC,CACpC,CAEA,YAAK,aAAeA,EACb,KAAK,OAASr2E,CACvB,CAEO,gBAAgB02E,EAAoB,CAClC,OAAAA,GAAY,KAAK,YAAc,UACxC,CACF,CAEgB,SAAA6C,GAAap4H,EAAsB6+C,EAAyD84E,EAAyB,CAC/H,IAAAzC,EACD,SAAM,QAAQr2E,CAAM,EAAG,CACrB,IAACA,EAAO,CAAC,EAAG,OACAq2E,EAAAr2E,EACfA,EAASq2E,EAAa,CAAC,EAAE,QAAQ,CAAC,CACpC,CAEO,OACL,SAAAyC,EACA,KAAA33H,EACA,OAAA6+C,EACA,aAAAq2E,CAAA,CAEJ,CAEA,MAAqBmD,EAAoE,CAcvF,YAAmBJ,EAA+B,CAA/B,gBAAAA,EACZ,eAAY,GAAK,KAAK,IAAI,EAE/B,KAAK,UAAY,GACjB,KAAK,QAAU,GACV,sBAAmB,IACnB,yBAAsB,IACtB,yBAAsB,GAC7B,CAEO,QAAQv4H,EAAqC,CAC3C,OAAA/M,GAAW,KAAM+M,CAAI,CAC9B,CAEO,YAAYM,EAAsB,CACjC,MAAA1W,EAAM,IAAK,EAAE,KAAK,UAClBc,EAAQ,IAAI+tI,GAAgB7uI,EAAK0W,CAAI,EACtC,oBAAQ,KAAK5V,CAAK,EAClB,kBAAa,IAAId,EAAKc,CAAK,EACzBA,CACT,CAEO,YAAYA,EAAwB,CACxBwG,GAAA,KAAK,QAASxG,CAAK,EAC/B,kBAAa,OAAOA,EAAM,GAAG,EAC7B,qBAAgB,OAAOA,EAAM,MAAM,EAExC,MAAMsC,EAAM,KAAK,gBAAgB,IAAItC,EAAM,MAAM,EAC9CsC,IACDA,EAAI,OAAOtC,CAAK,EACZsC,EAAI,MACD,qBAAgB,OAAOtC,EAAM,MAAM,EAG9C,CAEO,eAAeA,EAAwBy0D,EAAqD,CACjGz0D,EAAM,UAAUy0D,CAAM,EACtB,KAAK,gBAAgB,IAAIz0D,EAAM,OAAQA,CAAK,CAC9C,CAEO,eAAeA,EAAwBzO,EAAmC,CAC/EyO,EAAM,UAAUzO,CAAM,EACtB,IAAI+Q,EAAM,KAAK,gBAAgB,IAAI/Q,CAAM,EACrC+Q,GACF,KAAK,gBAAgB,IAAI/Q,EAAQ+Q,EAAM,IAAI,GAAK,EAGlDA,EAAI,IAAItC,CAAK,CACf,CAEO,UAAU8jD,EAAsE,CAC9E,YAAK,QAAQ,KAAKA,CAAM,CACjC,CAEO,sBAAsBluC,EAAsBs4H,EAAoB,CACrE,IAAIluI,EAAQ,KAAK,QAAQ,KAAMA,GACtBA,EAAM,YAAc,YAAcA,EAAM,OAAS4V,GAAQ,EAAEs4H,EAAYluI,EAAM,UAAYA,EAAM,UACvG,EAED,OAAIA,IACMA,EAAA,KAAK,YAAY4V,CAAI,EAC7B5V,EAAM,aAAa,UAAU,GAGxBA,CACT,CAEO,cAAcd,EAA6B,CACzC,YAAK,aAAa,IAAIA,CAAG,CAClC,CAEO,iBAAiBu1D,EAAmC,CAClD,YAAK,gBAAgB,IAAIA,CAAM,CACxC,CAEO,mBAAmBljE,EAAmC,CACpD,YAAK,gBAAgB,IAAIA,CAAM,CACxC,CAEO,YAAYD,EAAyE,CAC1F,OAAO+4I,GAAW,eAAe,CAC/B,WAAY,KACZ,GAAG/4I,CAAA,CACJ,CACH,CACF,CC/KA,MAA8B68I,EAA2B,CAYvD,YAAY78I,EAAwC,CAClDiX,GAAW,KAAMjX,CAAO,EAEpB,KAAK,MACP,KAAK,IAAM,KAAK,YAAY,KAAO6gC,GAAO,sBAAsB,GAGlE,KAAK,QAAU,EACjB,CAEO,qBAAqBm2D,EAA2B,CAC9C,YAAK,aAAe,KAAK,WAAawlD,GAAqBxlD,EAAQ,KAAK,IAAI,WAAW,YAAY,CAAC,EAAE,WAC/G,CAEO,kBAAkBtjD,EAA2B,CAClD,OAAO,KAAK,cAAgB,KAAK,YAAc4oG,GAAkB,KAAK,WAAY5oG,EAAM,KAAK,IAAI,WAAW,MAAM,CAAC,EACrH,CAEO,mBAAoB,CACzB,OAAO,KAAK,cAAgB,KAAK,YAAc,IAAIipG,GAA2B,KAAK,UAAU,EAC/F,CAEO,0BAA2B,CAChC,OAAO,KAAK,cAAc,mBAAmB,KAAK,WAAW,CAC/D,CAEO,iBAAkB,CACjB,MAAC,WAAAJ,CAAc,OACrB,GAAIA,EAIA,IACFA,EAAW,IAAI,OAAO,EACtBA,EAAW,MAAM,QACX/vI,EAAG,CACJ,SAAI,MAAMA,CAAC,CAClB,CACF,CAEO,yBAAyBswI,EAAqB,CACnD,KAAK,gBAAgB,EACPA,GAAA,KAAK,cAAc,MACnC,CAIO,WAAY,CACjB,MAAMlxI,EAAU,KAAK,YACrB,OAAGA,IAII,KAAK,YAAc,KAAK,kBAAkB,EAAE,QAAQ,IAAM,CAC/D,KAAK,YAAc,OACpB,EACH,CAEO,oBAAoBoY,EAAW,CACjC,KAAK,YAAY,aAAe,QAInC,KAAK,YAAY,KAAK,KAAK,UAAUA,CAAI,CAAC,CAC5C,CACF,CCvFwB,SAAA+4H,GAAmBC,EAAiCh5H,EAAqC,CAEzG,MAAAi5H,EAAiBl0B,GAAoC,CACzD,MAAMrlH,EAA8B,GAE7B,OADQqlH,EAAQ,WAAW,IAAI,QAAQ,EACvC,QAASm0B,GAAW,CACzB,MAAMn7G,EAAKm7G,EAAO,IAAI,MAAM,IAAK,CAAC,EAAE,CAAC,EACjCx5I,EAAAq+B,CAAE,EAAIm7G,EAAO,MAClB,EAEMx5I,CAAA,EAIG,CAAC,QAAkB,OAAgB,EAAE,OAAQ4gB,GAASN,EAAKM,CAAI,CAAC,EAAE,IAAKA,GAAU,CAACN,EAAKM,CAAI,EAAGA,CAAI,CAAE,EAGhG,QAAQ,CAAC,CAACy1H,EAAOz1H,CAAI,IAAM,CACzC,MAAMykG,EAAUi0B,EAAa,KAAMhnD,GAASA,EAAK,YAAc1xE,CAAI,EACnE,GAAG,CAACykG,EACF,OAGI,MAAAm0B,EAASD,EAAcl0B,CAAO,EACpCpsF,GAAeo9G,EAAM,aAAa,EAAG,CAAC7iI,EAAOyC,EAAO9P,IAAQ,CACvDqzI,EAAOhmI,EAAM,EAAE,IAAMA,EAAM,MACxBrN,EAAA,OAAO8P,EAAO,CAAC,EACnB,QAAQ,IAAI,yBAA0BzC,EAAOyC,EAAO2K,CAAI,EAC1D,CACD,EACF,CACH,WCxBA,MAAqB64H,EAAI,CAIvB,YAAYC,EAAyBC,EAA6B,CAHlEC,GAAA,KAAAC,GAAA,QACAD,GAAA,KAAAE,GAAA,QAGEC,GAAA,KAAKF,GAAWH,GAChBK,GAAA,KAAKD,GAASH,EAChB,CAEA,IAAW,SAAU,CACnB,OAAOK,GAAA,KAAKH,GACd,CAEA,IAAW,OAAQ,CACjB,OAAOG,GAAA,KAAKF,GACd,CAEA,IAAW,QAAS,CAElB,OADmB,KAAK,QAAQ,MAAM,KAAMxnD,GAASA,EAAK,QAAQ,MAAQ,OAAO,EAC/D,MAAM,MAAM,GAAG,EAAE,MAAM,CAAC,CAC5C,CAEA,UAAW,CACF,YAAK,QAAQ,MACnB,OAAO,GAAG,KAAK,MAAM,IAAKh7E,GAAYA,EAAQ,KAAK,CAAC,EACpD,IAAKg7E,GAASA,EAAK,SAAU,GAAE,KAAK;AAAA,CAAM,EAAI;AAAA,CACjD,CA0BF,CAnDEunD,GAAA,YACAC,GAAA,YCbsB,SAAAG,GAA2Bn+I,EAAa04I,EAAmB98G,EAAe,CAC1F,MAAA3zB,EAAWjI,EAAI,MAAM04I,CAAS,EAC9Bx0I,EAAgB,GAEhB,KAAA03B,EAAQ,GAAK3zB,EAAS,QACtB/D,EAAA,KAAK+D,EAAS,MAAO,GACvB,EAAA2zB,EAGJ,OAAG3zB,EAAS,QACV/D,EAAI,KAAK+D,EAAS,KAAKywI,CAAS,CAAC,EAG5Bx0I,CACT,cCdA,MAAqBk6I,EAAsB,CAKzC,YAAYthG,EAAaC,EAAa,CAJtC+gG,GAAA,KAAA12E,GAAA,QACA02E,GAAA,KAAAO,GAAA,QACAP,GAAA,KAAAQ,GAAA,QAGOL,GAAA,KAAA72E,OAAW,KAChB62E,GAAA,KAAKI,GAAOvhG,GACZmhG,GAAA,KAAKK,GAAOvhG,EACd,CAEO,UAAW,CAChB,MAAMD,EAAMohG,GAAA,KAAKG,IACXthG,EAAMmhG,GAAA,KAAKI,IACX9sI,EAAM0sI,GAAA,KAAK92E,IAEXm3E,EAAWxhG,EAAMD,EAAM,EACzB,IAAAplC,EAAQ,KAAK,MAAMolC,EAAMyhG,EAAW,KAAK,OAAQ,GAAGC,EAAO,EACzD,KAAAhtI,EAAI,IAAIkG,CAAK,GAOd,GANAA,EAAQqlC,EACP,EAAArlC,EAEMA,EAAAolC,EAGP,EAAE0hG,GAAQD,EACJ,YAIX,OAAA/sI,EAAI,IAAIkG,CAAK,EACNA,CACT,CAEO,IAAIA,EAAe,CACnBwmI,GAAA,KAAA92E,IAAK,IAAI1vD,CAAK,CACrB,CACF,CApCE0vD,GAAA,YACAi3E,GAAA,YACAC,GAAA,sBCDF,MAAqBG,EAAqB,CAKxC,YAAYhoI,EAAmBiB,EAAe,CAJ9ComI,GAAA,KAAArqF,GAAA,QACAqqF,GAAA,KAAAt9F,GAAA,QAIEy9F,GAAA,KAAKxqF,GAAOh9C,GACZwnI,GAAA,KAAKz9F,GAAS9oC,EAChB,CAEA,IAAW,KAAM,CACf,OAAOwmI,GAAA,KAAKzqF,GACd,CAEA,IAAW,OAAQ,CACjB,OAAOyqF,GAAA,KAAK19F,GACd,CACF,CAhBEiT,GAAA,YACAjT,GAAA,4BCJF,MAAqBk+F,EAAkB,CAMrC,YACE55H,EACAs0H,EACAuF,EACA7sE,EACA,CAVFgsE,GAAA,KAAAc,GAAA,QACAd,GAAA,KAAAe,GAAA,QACAf,GAAA,KAAAgB,GAAA,QACAhB,GAAA,KAAAiB,GAAA,QAQEd,GAAA,KAAKW,GAAQ95H,GACbm5H,GAAA,KAAKY,GAAQzF,GACb6E,GAAA,KAAKa,GAAYH,GACjBV,GAAA,KAAKc,GAAOjtE,EACd,CAEA,IAAW,MAAO,CAChB,OAAOosE,GAAA,KAAKU,GACd,CAEA,IAAW,MAAO,CAChB,OAAOV,GAAA,KAAKW,GACd,CAEA,IAAW,UAAW,CACpB,OAAOX,GAAA,KAAKY,GACd,CAEA,IAAW,KAAM,CACf,OAAOZ,GAAA,KAAKa,GACd,CAEA,UAAW,CACT,OAAO,KAAK,KAAO,IAAM,KAAK,KAAO,IAAM,KAAK,SAAW,IAAM,KAAK,IAAI,KAAK,GAAG,CACpF,CACF,CApCEH,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,4BCAF,MAAqBC,EAAQ,CAO3B,YAAYvoI,EAAqBiB,EAA0D,CAN3FomI,GAAA,KAAArqF,GAAA,QACAqqF,GAAA,KAAAt9F,GAAA,QACAs9F,GAAA,KAAAmB,GAAA,QACAnB,GAAA,KAAAoB,GAAA,QAMK,GAFHjB,GAAA,KAAKxqF,GAAOh9C,GAET,OAAOiB,GAAW,UAGnB,GAFAumI,GAAA,KAAKz9F,GAAS9oC,GAEXjB,IAAQ,IAAK,CACR,MAAAxO,EAAWyP,EAAM,MAAM,GAAG,EAChCumI,GAAA,KAAKgB,GAAkB,IAAIP,GAAkBz2I,EAAS,CAAC,EAAUA,EAAS,CAAC,EAAGA,EAAS,CAAC,EAAGA,EAAS,MAAM,CAAC,CAAC,WAEzGwO,IAAQ,IAAK,CACd,MAAMjU,EAAS27I,GAA2BzmI,EAAO,IAAK,CAAC,EACvDA,EAAQlV,EAAO,CAAC,EAChBy7I,GAAA,KAAKiB,GAAU18I,EAAO,SAAW,EAAI,IAAIi8I,GAAqB/mI,EAAc,IAAI,EAAI,IAAI+mI,GAAqB/mI,EAAclV,EAAO,CAAC,CAAC,EACtI,OAGCkV,aAAiBgnI,IAClBT,GAAA,KAAKgB,GAAkBvnI,GAClBumI,GAAA,KAAAz9F,GAAS9oC,EAAM,aACZA,aAAiB+mI,KACzBR,GAAA,KAAKiB,GAAUxnI,GACVumI,GAAA,KAAAz9F,GAAS9oC,EAAM,MAAQ,GAAGA,EAAM,GAAG,IAAIA,EAAM,KAAK,GAAKA,EAAM,KAGxE,CAEA,IAAW,KAAM,CACf,OAAOwmI,GAAA,KAAKzqF,GACd,CAEA,IAAW,OAAQ,CACjB,OAAOyqF,GAAA,KAAK19F,GACd,CAEA,IAAW,QAAS,CAClB,OAAO09F,GAAA,KAAKgB,GACd,CAEA,IAAW,gBAAiB,CAC1B,OAAOhB,GAAA,KAAKe,GACd,CAEA,UAAW,CACT,MAAO,GAAG,KAAK,GAAG,IAAI,KAAK,KAAK,EAClC,CACF,CApDExrF,GAAA,YACAjT,GAAA,YACAy+F,GAAA,YACAC,GAAA,kCCNF,MAAqBC,GAArB,MAAqBA,EAAkB,CAQrC,YAAY1oI,EAA+B+5C,EAAmC5pB,EAAiB,IAAKw4G,EAAS,GAAO,CAPpHtB,GAAA,KAAArqF,GAAA,QACAqqF,GAAA,KAAAuB,GAAA,QACAvB,GAAA,KAAAwB,GAAA,QACAxB,GAAA,KAAAyB,GAAA,QACAzB,GAAA,KAAA0B,GAAA,QACA1B,GAAA,KAAA2B,GAAA,QAGExB,GAAA,KAAKxqF,GAAOh9C,GACZwnI,GAAA,KAAKoB,GAAS7uF,GACdytF,GAAA,KAAKqB,GAAU14G,GACfq3G,GAAA,KAAKuB,GAAUJ,GACfnB,GAAA,KAAKsB,GAAaH,EAAa,QAAQ,MAClCnB,GAAA,KAAAwB,GAAQL,EAAS,GAAK,KAC7B,CAEA,IAAW,OAAQ,CACjB,OAAOlB,GAAA,KAAKmB,GACd,CAEA,IAAW,OAAQ,CACV,OAAAnB,GAAA,KAAKsB,KAAW,CAAC,KAAK,MAAM,OAAS,KAAO,KAAK,MAAM,CAAC,CACjE,CAEA,IAAW,QAAS,CAClB,MAAO,CAACtB,GAAA,KAAKsB,GACf,CAEA,IAAW,KAAM,CACf,OAAOtB,GAAA,KAAKzqF,GACd,CAEA,IAAW,MAAO,CAChB,OAAA0rF,GAAkB,KAAK,IAAI,EACpBjB,GAAA,KAAKuB,GACd,CAEO,QAAQn1I,EAAoE,CACjF60I,GAAkB,KAAK,IAAI,EACtBjB,GAAA,KAAAqB,IAAW,QAAQj1I,CAAQ,CAClC,CAEO,IAAImM,EAAa,CACtB,OAAA0oI,GAAkB,KAAK,IAAI,EACpBjB,GAAA,KAAKqB,IAAW,IAAI9oI,CAAG,GAAK,IAAI0oI,GAAkB1oI,EAAK,GAAI,IAAK,EAAI,CAC7E,CAEA,OAAe,KAAK7T,EAA8B,CAC7C,GAAAs7I,GAAAt7I,EAAU28I,MAAe,KAC1B,OAGI,MAAAt2H,MAAsC,IAClCrmB,EAAA,MAAM,QAAS5C,GAAQ,CACzB,MAACyW,EAAKktC,CAAI,EAAIw6F,GAA2Bn+I,EAAKk+I,GAAAt7I,EAAU08I,IAAS,CAAC,EAClE3kH,EAAS1R,EAAI,IAAIxS,CAAG,GAAK,GAC/BwS,EAAI,IAAIxS,EAAK,CAAC,GAAGkkB,EAAQgpB,GAAQ,EAAE,CAAC,EACrC,EAED,MAAM+7F,EAAYzB,GAAAr7I,EAAU28I,GAAaJ,GAAkB,eAAel2H,CAAG,GAC7Eg1H,GAAAr7I,EAAU68I,GAAQ,MAAM,KAAKC,EAAU,MAAM,EAC/C,CAEA,OAAe,eAAeC,EAAwC,CAC9D,MAAAz7I,MAA0C,IAErC,OAAAy7I,EAAA,QAAQ,CAACnvF,EAAO/5C,IAAQ,CACjCvS,EAAI,IAAIuS,EAAK,IAAI0oI,GAAkB1oI,EAAK+5C,CAAK,CAAC,EAC/C,EAEMtsD,CACT,CACF,EAxEEuvD,GAAA,YACA4rF,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YACAC,GAAA,YANF,IAAqBG,GAArBT,aCCA,MAAqBU,GAArB,MAAqBA,EAAc,CAIjC,YAAYrvF,EAAkB,CAH9BstF,GAAA,KAAAuB,GAAA,QACAvB,GAAA,KAAAgC,GAAA,QAGE7B,GAAA,KAAKoB,GAAS7uF,GACTytF,GAAA,KAAA6B,OAAkB,KACvBD,GAAc,eAAe,IAAI,CACnC,CAEO,IAAIppI,EAAa,CACf,OAAAynI,GAAA,KAAK4B,IAAY,IAAIrpI,CAAG,GAAK,IAAImpI,GAAkBnpI,EAAK,GAAI,IAAK,EAAI,CAC9E,CAEA,OAAe,eAAespI,EAA2B,CACjD,MAAAC,MAAgD,IAC3C9B,GAAA6B,EAAAV,IAAO,QAAS7oD,GAAS,CAC/B,GAAAA,EAAK,MAAQ,IAAK,CACnB,KAAM,CAAC,IAAA//E,EAAK,MAAAiB,GAAS8+E,EAAK,OAEtB,IAAAypD,EAAaD,EAAc,IAAIvpI,CAAG,EAClCwpI,IACFA,EAAa,GACCD,EAAA,IAAIvpI,EAAKwpI,CAAU,GAGxBA,EAAA,KAAKvoI,GAAS,EAAE,CAC7B,EACD,EAEasoI,EAAA,QAAQ,CAACC,EAAYxpI,IAAQ,CAC9BynI,GAAA6B,EAAAD,IAAY,IAAIrpI,EAAK,IAAImpI,GAAkBnpI,EAAKwpI,EAAY,IAAK,EAAK,CAAC,EACnF,CACH,CACF,EAjCEZ,GAAA,YACAS,GAAA,YAFF,IAAqBI,GAArBL,mBCGA,MAAqBM,EAAgB,CAMnC,YAAY3vF,EAAuB,CALnCstF,GAAA,KAAAuB,GAAA,QACAvB,GAAA,KAAAsC,GAAA,QACAtC,GAAA,KAAAgC,GAAA,QACAhC,GAAA,KAAAuC,GAAA,QAGEpC,GAAA,KAAKoB,GAAS7uF,GACTytF,GAAA,KAAAmC,GAAa5vF,EAAM,CAAC,GACpBytF,GAAA,KAAA6B,GAAc7B,GAAA,KAAKoC,GAAa,MACvC,CAEA,IAAW,OAAQ,CACjB,OAAOnC,GAAA,KAAKmB,GACd,CAEA,IAAW,WAAY,CACrB,OAAOnB,GAAA,KAAKkC,GACd,CAEA,IAAW,gBAAiB,CAC1B,OAAOlC,GAAA,KAAKkC,IAAW,cACzB,CAEA,IAAW,WAAY,CACrB,OAAO,KAAK,eAAe,IAC7B,CAEA,IAAW,WAAY,CAClB,IAAClC,GAAA,KAAKmC,IAAY,CACnB,MAAMN,EAAa,KAAK,WAEpB,IAAApjF,EACDojF,EAAW,IAAI,UAAU,EAAE,OAAoBpjF,EAAA,WAC1CojF,EAAW,IAAI,UAAU,EAAE,OAAoBpjF,EAAA,WAC/CojF,EAAW,IAAI,UAAU,EAAE,OAAoBpjF,EAAA,WACtCA,EAAA,WAEjBshF,GAAA,KAAKoC,GAAa1jF,EACpB,CAEA,OAAOuhF,GAAA,KAAKmC,GACd,CAEA,IAAW,WAAY,CACrB,OAAO,KAAK,YAAc,YAAc,KAAK,YAAc,UAC7D,CAEA,IAAW,aAAc,CACvB,OAAO,KAAK,YAAc,YAAc,KAAK,YAAc,UAC7D,CAEA,IAAW,YAAa,CACtB,OAAAnC,GAAA,KAAK4B,KAAgB7B,GAAA,KAAK6B,GAAc,IAAII,GAAc,KAAK,KAAK,GAC7DhC,GAAA,KAAK4B,GACd,CAEA,IAAW,KAAM,CACf,OAAO,KAAK,WAAW,IAAI,KAAK,EAAE,KACpC,CAEO,oBAA4C36F,EAAmG,CACpJ,MAAMjhD,EAAW,GAEjB,UAAUuS,KAAO0uC,EAAM,CACrB,MAAM3iD,EAAS,KAAK,WAAW,IAAIiU,CAAG,EAEhC6pI,EAAsB,CAACn7F,EAAK1uC,CAAG,EACjCjU,EAGF0B,EAAIuS,CAAG,EAAI6pI,EAAsB99I,EAAO,MAAQA,EAAO,MAFvD0B,EAAIuS,CAAG,EAAI6pI,EAAsB,CAAK,QAI1C,CAEO,OAAAp8I,CACT,CACF,CA5EEm7I,GAAA,YACAe,GAAA,YACAN,GAAA,YACAO,GAAA,sBCRF,MAAqBE,EAAkB,CAIrC,YAAY/vF,EAAkB,CAH9BstF,GAAA,KAAAuB,GAAA,QACAvB,GAAA,KAAA0C,GAAA,QAGEvC,GAAA,KAAKoB,GAAS7uF,GACTytF,GAAA,KAAAuC,GAAahwF,EAAM,OAAQgmC,GAASA,EAAK,MAAQ,GAAG,EAAE,IAAKA,GAASA,EAAK,MAAM,MAAM,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,EACtG,CAEA,IAAW,OAAQ,CACjB,OAAO0nD,GAAA,KAAKmB,GACd,CAEA,IAAW,WAAY,CACrB,OAAOnB,GAAA,KAAKsC,GACd,CACF,CAfEnB,GAAA,YACAmB,GAAA,YCGK,SAASC,GAASzgJ,EAAa,CACpC,SAAS0gJ,GAAgB,CACpBC,EACD9C,EAAc,KAAK,IAAIsC,GAAgB3vF,CAAK,CAAC,EAE5BmwF,EAAA,IAAIJ,GAAkB/vF,CAAK,CAEhD,CAEI,IAAAmwF,EAAoC,KAAMnwF,EAAmB,GACjE,MAAMqtF,EAAmC,GACzC,OAAA79I,EAAI,MAAM,OAAO,EAAE,QAAS4gJ,GAAY,CACnC,IAACC,GAAmBD,CAAO,EAAG,CACzB,MAAApqD,EAAOsqD,GAAaF,CAAO,EAC9BpqD,EAAK,MAAQ,MACAkqD,IACdlwF,EAAQ,IAGVA,EAAM,KAAKgmC,CAAI,CACjB,EACD,EAEakqD,IACP,IAAI/C,GAAIgD,EAAgB9C,CAAa,CAC9C,CAEO,SAASgD,GAAmB7gJ,EAAa,CACvC,oBAAc,KAAKA,CAAG,CAC/B,CAEO,SAAS8gJ,GAAa9gJ,EAAa,CACxC,MAAMiI,EAAWk2I,GAA2Bn+I,EAAK,IAAK,CAAC,EACvD,OAAO,IAAIg/I,GAAQ/2I,EAAS,CAAC,EAAUA,EAAS,CAAC,CAAC,CACpD,CAEO,SAAS84I,GAAaC,EAAU,CACjC,IAAAC,EACJ,OAAAD,EAAI,MAAM,QAAQ,CAACxlI,EAASzX,IAAQ,CAClC,GAAGyX,EAAQ,YAAc,SAAWA,EAAQ,WAAa,CAACA,EAAQ,WAAW,IAAI,YAAY,EAAE,IAAI,KAAK,EAAE,OAAQ,CAC5GylI,IACUA,EAAA,IAAI7C,GAAsB,EAAG,UAAU,GAG/C,MAAA8C,EAAgB1lI,EAAQ,WAAW,IAAI,YAAY,EAAE,IAAI,KAAK,EAAE,MAAM,MAAM,GAAG,EAC/Eg1C,EAAQh1C,EAAQ,MACtB0lI,EAAc,QAAS/G,GAAS8G,EAAU,IAAI,CAAC9G,CAAI,CAAC,EAC9C,MAAAgH,EAAQ,CAACD,EAAc,CAAC,EAAGD,EAAU,WAAYA,EAAU,UAAU,EACrEG,EAAS,CAACF,EAAc,CAAC,EAAGD,EAAU,WAAYA,EAAU,UAAU,EAE5EzwF,EAAM,KAAKswF,GAAa,oBAAsBK,EAAM,KAAK,GAAG,CAAC,CAAC,EAExD,MAAAE,EAAgB7lI,EAAQ,WAAW,IAAI,MAAM,EAAE,IAAI0lI,EAAc,CAAC,CAAC,EAAE,MAErEC,EAAA,QAAQ,CAAChH,EAAMp2I,IAAQ,CACrB,MAAAu9I,EAAQF,EAAOr9I,CAAG,EACrBA,EAAM,IACPysD,EAAM,KAAKswF,GAAa,oBAAsB3G,EAAO,IAAMmH,CAAK,CAAC,EAEnDD,EAAA,QAAS5lH,GAAM,CAC3B+0B,EAAM,KAAKswF,GAAa,UAAY3G,EAAO,IAAM1+G,CAAC,CAAC,EACpD,EAEa4lH,EAAA,QAAS5lH,GAAM,CAC3B+0B,EAAM,KAAKswF,GAAa,UAAYQ,EAAQ,IAAM7lH,CAAC,CAAC,EACrD,EACH,CACD,EAEDulH,EAAI,MAAMj9I,CAAG,EAAI,IAAIo8I,GAAgB3vF,CAAK,CAC5C,EACD,EAEM,CAAC,CAACywF,CACX,CC9EO,SAASM,GAAkBC,EAAoB,CACpD,MAAMC,EAAuBD,EAAS,IAAKxhJ,GAAQ,CACjD,KAAM,CAAC0hJ,EAAW,GAAG/9F,CAAI,EAAI3jD,EAAI,MAAM,GAAG,EASnC,MAPmD,CACxD,EAAG,uCACH,UAAA0hJ,EAEA,QAAS/9F,EAAK,IAAKw2F,GAASxB,GAAiB,CAACwB,CAAI,CAAC,EAG9C,CACR,EAQM,OAAAsH,EAAqB,OAASA,EAAuB,MAC9D,CCnBwB,SAAAE,GAAsBX,EAAUz3B,EAA0B,CAC1E,MAAAq4B,EAAar4B,EAAQ,oBAAoB,CAC7C,YAAa,GACb,UAAW,GACX,YAAe,GACf,MAAS,GACT,KAAQ,GACR,IAAO,GACP,aAAc,GACf,EAEE,IAACq4B,EAAW,YAAa,CACpB,MAAAprD,EAAOwqD,EAAI,QAAQ,MAAM,KAAMxqD,GAASA,EAAK,QAAQ,MAAQ,aAAa,EACrEorD,EAAA,YAAcprD,EAAK,OAAO,KACvC,CAEA,MAAMirD,EAAuBF,GAAkBK,EAAW,YAAY,CAAC,EACjE,CAACniD,EAAMo6C,CAAW,EAAI+H,EAAW,YAAY,MAAM,IAAK,CAAC,EACzDzH,EAAOyH,EAAW,MAAQjJ,GAAiB,CAACiJ,EAAW,KAAK,MAAM,IAAK,CAAC,EAAE,CAAC,CAAC,EAG3E,OACL,IAAKA,EACL,MAAOA,EAAW,WAAW,EAC7B,IAAKA,EAAW,SAAS,EACzB,YAAa,CACX,YAAA/H,EACA,MAAO+H,EAAW,MAClB,KAAAniD,CACF,EACA,OAAQ06C,EACR,aAAcsH,EACd,IAAKG,EAAW,IAEpB,CC/BA,SAAwBC,GAAcrhJ,EAKnC,CACK,MAAC,MAAAshJ,EAAO,KAAAt9H,CAAQ,EAAAhkB,EAChBwgJ,EAAMP,GAASqB,EAAM,GAAG,EAC9B,IAAIC,EAAY,GAwEhB,GAtEIvhJ,EAAQ,sBACEuhJ,EAAAhB,GAAaC,CAAG,GAAKe,GAMnC5kH,GAAe6jH,EAAI,MAAO,CAACxlI,EAASzX,EAAKsG,IAAQ,CAgB5C,GAJuCmR,EAAQ,WAI/CA,EAAQ,YAAc,cACvB,OAGF,MAAMwmI,EAAYxmI,EAAQ,UACpBymI,EAAiBD,EAAU,eACXC,EAAe,IAC/B,MAAAC,EAAaF,EAAU,WAavBG,EAXQ39H,EAAKhJ,EAAQ,SAAS,EACT,eAAe,EAUZ,IAAK4mI,GAAY,GAAKA,EAAQ,EAAE,EACxDC,EAAelJ,GAAuB39H,EAAQ,UAAW,OAAW2mI,CAAQ,EAElF,GAAGD,IAAeG,EAAc,CACxB,MAAAC,EAAcX,GAAsBX,EAAKxlI,CAAO,EAEhD+mI,EAAU,CAAC,GAAG/9H,GACZ+9H,EAAA,UAAY/wG,GAAK+wG,EAAQ,SAAS,EAClCA,EAAA,UAAU,MAAQD,EAAY,MAC9BC,EAAA,UAAU,IAAMD,EAAY,IACpCC,EAAQ,UAAU,aAAe,CAACD,EAAY,WAAW,EACjDC,EAAA,UAAU,WAAa,GAE/B,MAAMrzI,EAAQ,IAAI+tI,GAAgBqF,EAAY,IAAKL,EAAe,IAAI,EAChE/yI,EAAA,QAAQ+yI,EAAe,IAAI,EACjCK,EAAY,QAAUpzI,EAAM,UAAUozI,EAAY,cAAgBA,EAAY,MAAM,EAC9EpzI,EAAA,aAAasM,EAAQ,SAAS,EAE9B,MAAAgnI,EAAS,IAAIjJ,KAAa,aAAarqI,EAAOqzI,CAAO,EAAE,WAEvDE,EAAahC,GAAS+B,CAAM,EAAE,MAAM,CAAC,EAC3Cn4I,EAAItG,CAAG,EAAI0+I,EAECV,EAAA,EACd,EACD,EAEEA,EAAW,CACN,MAAAW,EAAY1B,EAAI,WACtBc,EAAM,IAAMY,CACd,CAEO,OAAC,MAAAZ,EAAO,IAAAd,CAAA,CACjB,CCxFwB,SAAA2B,GAAoB3B,EAAUnuI,EAAwB,CACtE,MAAAyvI,EAAcX,GAAsBX,EAAKnuI,CAAK,EAE9C6hD,EAA+D7hD,EAAM,UACrE3D,EAAc,CAClB,OAAQozI,EAAY,OACpB,aAAcA,EAAY,aAC1B,KAAM5tF,CAAA,EAIR4tF,EAAY,YAAY,MAAQ,SAChC,MAAMF,EAAoC,CACxC,aAAgB,CAACE,EAAY,WAAW,EACxC,IAAOA,EAAY,IACnB,KAAQA,EAAY,OACpB,cAAeA,EAAY,cAAgB,CAAC,EAC5C,MAASA,EAAY,OAShB,OACL,OANuB,CACvB,EAAG,WACH,KAJqB,KAAK,UAAUF,CAAO,CAIrC,EAKN,OAAQE,EAAY,OACpB,MAAAzvI,EACA,aAAcyvI,EAAY,aAC1B,MAAApzI,CAAA,CAEJ,CCvBA,MAAqB0zI,WAAoCvF,EAA2B,CAkBlF,YAAY78I,EAKT,CACD,MAAMA,CAAO,EAER,wBAAqBkiE,GAAS,KAAK,UAAU,KAAK,IAAI,EAAG,EAAG,EAAK,CACxE,CAEO,sBAAuB,CACrB,YAAK,YAAc,MAAM,qBAAqB,CACnD,WAAY,CAAC,EACb,mBAAoB,MACpB,aAAc,aACd,cAAe,UACf,qBAAsB,EAGvB,CACH,CAEO,mBAAoB,CACzB,GAAG,KAAK,YACN,OAAO,KAAK,YAGR,MAAAmgF,EAAc,MAAM,oBAEd,OAAAA,EAAA,iBAAiB,OAAQ,IAAM,CACzC,KAAK,kCAAkC,EACxC,EAEWA,EAAA,iBAAiB,QAAS,IAAM,CACvC,KAAK,4BACN,cAAc,KAAK,yBAAyB,EAC5C,KAAK,0BAA4B,OACnC,CACD,EAEMA,CACT,CAEO,mBAAoB,CACzB,OAAG,KAAK,YACC,KAAK,YAGM,MAAM,mBAa5B,CAEO,0BAA2B,CAChC,MAAM,yBAAyB,CAQjC,CAEA,MAAc,oBAAoBC,EAAetF,EAAiCh9I,EAAiD,CAC3H,MAAC,UAAAuiJ,EAAW,YAAApxH,CAAe,OAC3BqxH,EAAcD,EAAU,GAExBE,EAAoBzF,EAAa,IAAKhiI,GAAY,CAChD,MAAAuiB,EAAY4kH,GAAoBG,EAAUtnI,CAAO,EAEvD,YAAK,QAAQuiB,EAAU,MAAM,IAAyB,EAAIA,EAAU,MAE7DA,CAAA,CACR,EAEKmlH,EAAeD,EAAkB,KAAM15B,GAAYA,EAAQ,MAAM,YAAc,OAAO,EACtF45B,EAAeF,EAAkB,KAAM15B,GAAYA,EAAQ,MAAM,YAAc,OAAO,EAC5F,GAAI,CAAC,OAAA5lD,EAAQ,OAAA7V,GAAUo1F,GAAgB,GACvC,MAAME,EAAaD,GAAgBD,EAE7Bl4B,EAA6D,CACjE,MAAOk4B,EACP,MAAOC,CAAA,EAcN,GAXSxxH,EAAA,QAAQ,QAASziB,GAAU,CAClC,GAAAA,EAAM,YAAc,WAAY,CAC3B,MAAAq6G,EAAUyB,EAAS97G,EAAM,IAAI,EACnC,GAAG,CAACq6G,EAAS,OAEb53F,EAAY,eAAeziB,EAAOq6G,EAAQ,cAAgBA,EAAQ,MAAM,EAC5D53F,EAAA,eAAeziB,EAAOxO,EAAU,IAAI,CAClD,EACD,EAGEotD,IAAWs1F,EAAW,OAAQ,CAC/B,MAAM5+H,EAAiC,KAAK,MAAM4+H,EAAW,OAAO,IAAI,EAErEz/E,EAAQn/C,EAAK,KAAOm/C,EAClB,OAAOn/C,EAAK,KACRspC,EAAA,CACP,EAAG,WACH,KAAM,KAAK,UAAUtpC,CAAI,EAE7B,CAEM,MAAA0yB,EAAS,MAAM,KAAK,SAAS,qBAAqB,cAAc8rG,EAAal1F,EAAQttD,CAAO,EAE5FgkB,EAAsC,KAAK,MAAM0yB,EAAO,OAAO,IAAI,EAEzE,OAAA1yB,EAAK,MAAQA,EAAK,OAASu+H,EAAU,YAAY,KAAK,YAAY,MAClEpxH,EAAY,QAAQnN,CAAI,EACxB+4H,GAAmBC,EAAch5H,CAAI,EAE9BA,CACT,CAEA,MAAgB,mBAAoB,CAC5B,MAAC,WAAAu4H,EAAY,YAAAprH,CAAe,OAC5B0xH,EAAkBtG,EAAW,qBAAuB,OAAS,CAACprH,EAAY,cAAc,GAAG,EAAE,OAC7FoV,EAAM,KAAK,IAAI,WAAW,kBAAkB,EAClDA,EAAI,OAAO,EAEX,MAAMu8G,EAAgB,MAAMvG,EAAW,YAAY,CAAC,WAAY,GAAM,EAEnEsG,GAAmB,KAAK,aACA1xH,EAAY,YAAY,aAAa,EAC7C,aAAa,UAAU,EAG1C,KAAM,CAAC,IAAKmxH,EAAU,MAAAhB,CAAA,EAASD,GAAc,CAC3C,MAAOyB,EACP,KAAM3xH,CAAA,CACP,EAEGoV,EAAA,4BAA6B+6G,EAAM,GAAG,EACpC,MAAA/E,EAAW,oBAAoB+E,CAAK,EAE1C,MAAMtE,EAAesF,EAAS,MAAM,OAAQjwI,GACnCA,EAAM,YAAc,eAAiBA,EAAM,SACnD,EAED,GAAGwwI,EACG,IACF,MAAM,KAAK,oBAAoBP,EAAUtF,EAAc,KAAK,OAAO,QAC7DxwI,EAAG,CACJ,SAAI,MAAM,8BAA+BA,CAAC,CACjD,CAoBF,MAAMqtI,EAAW,GAEXkJ,EAAqC,GACrC7J,EAASoJ,EAAS,OACxB3lH,GAAeu8G,EAAQ,CAACtrI,EAAKrK,EAAKsG,IAAQ,CAClC,MAAA6E,EAAQyiB,EAAY,cAAcvjB,CAAG,EACxCc,EAAM,gBAAgBmrI,CAAQ,IAC3BhwI,EAAA,OAAOtG,EAAK,CAAC,EACjBw/I,EAAgB,KAAKr0I,CAAK,EAC5B,CACD,EAWD,MAAM2hD,EAAUiyF,EAAS,MAAM,IAAKtnI,GAAY,CAC9C,MAAMpN,EAAMoN,EAAQ,IAChB,IAAAtM,EAAQyiB,EAAY,cAAcvjB,CAAG,EACzC,OAAIc,IACFA,EAAQ,IAAI+tI,GAAgB7uI,EAAKoN,EAAQ,SAAS,EAClDtM,EAAM,aAAa,UAAU,GAGxBA,CAAA,CACR,EAEKs0I,EAA+C,CACnD,KAAM,SACN,IAAK7xH,EAAY,YAAY,CAC3B,OAAA+nH,EACA,QAAA7oF,EACA,SAAAwpF,CAAA,CACD,GAGakJ,EAAA,QAASr0I,GAAU,CACjCyiB,EAAY,YAAYziB,CAAK,EAC9B,EAED63B,EAAI,wCAAwCg2G,EAAW,cAAc,QAAQA,EAAW,kBAAkB,cAAcA,EAAW,iBAAiB,eAAeA,EAAW,eAAe,GAAIyG,EAAkB,GAAG,EAChN,MAAAzG,EAAW,qBAAqByG,CAAiB,EAEvDz8G,EAAI,KAAK,CACX,CAEO,WAAY,CACjB,IAAI36B,EAAU,KAAK,YACnB,OAAGA,IAIHA,EAAU,MAAM,YAEb,KAAK,mBACNA,EAAQ,KAAK,IAAM,CACjB,KAAK,kCAAkC,EACvC,KAAK,kBAAoB,GAC1B,EAGA,KAAK,QAAQ,OAAS,gBACvBA,EAAQ,KAAK,IAAM,CACjB,KAAK,WAAW,gBAAkB,OAAM4vI,GAAgB,CACnDA,EAAY,QAAQ,OAAO,OAAS,SACrCA,EAAY,OAAO,cAAc,CAC/B,GAAGA,EAAY,OAAO,cAAc,EACpC,sBAAuB,sBACxB,CACH,CACD,EACF,EAGI5vI,EACT,CAEO,mCAAoC,CACtC,QAAK,YAAY,aAAe,OACjC,OAGF,KAAK,IAAI,mCAAmC,EAI5C,MAAMiW,EAKF,CACF,aAAc,2BACd,YAAa,CAAC,EACd,mBAAoB,CAAC,UAAW,CAAC,EACjC,iBAAkB,CAAC,GAGX,UAAAnT,KAAS,KAAK,YAAY,QAAS,CAC3C,GAAGA,EAAM,YAAc,YAAcA,EAAM,OAAS,QAClD,SAGI,MAAC,SAAAutI,CAAY,EAAAvtI,EACfmT,EAAA,iBAAiB,KAAKo6H,CAAQ,EAC9Bp6H,EAAA,YAAYo6H,CAAQ,EAAI,CAC1B,UAAW,IACX,UAAW,IAEf,CAEA,KAAK,oBAAoBp6H,CAAG,EAExBA,EAAI,iBAAiB,OAKd,KAAK,4BACT,+BAA4B,OAAO,YAAY,KAAK,kCAAkC,KAAK,IAAI,EAAG,GAAI,GALxG,KAAK,4BACN,cAAc,KAAK,yBAAyB,EAC5C,KAAK,0BAA4B,OAKvC,CAEO,oBAAoBq7C,EAAqB,CAK9C,KAAK,UAAU,qBAAqBA,EAAQ,KAAK,IAAI,EAGhD,mBAAc,UAAUA,EAAQ,OAAO,EAC5C,KAAK,yBAAyB,CAChC,CACF,CCjWA,IAAK+lF,QACHA,EAAAC,EAAA,qBACAD,EAAAC,EAAA,iBACAD,EAAAC,EAAA,mCACAD,EAAAC,EAAA,2BACAD,EAAAC,EAAA,mBALGD,QAAA,ICyBL,MAAqBE,WAA0BtH,EAG5C,CAsBD,YAAY77I,EAMT,CACK,QAENiX,GAAW,KAAMjX,CAAO,EAEpB,KAAK,MACF,SAAM6gC,GAAO,YAAY,GAG5B,KAAK,cACP,KAAK,YAAc,IAGjB,KAAK,gBACF,uBAAoB,KAG3B,KAAK,cAAgB,GAChB,2BAAwB,IACxB,8BAA2B,IAC3B,6BAA0BqhC,GAAS,IAAM,CACvC,mBAAc,SAAU,KAAK,YAAY,GAC7C,EAAG,EAAK,EAEN,sBAAiB,QAAUr2D,GAAU,CACrCA,IAAUo3I,GAAiB,QAC5B,KAAK,QAAQ,CACf,CACD,CACH,CAEA,IAAI,iBAAkB,CACb,YAAK,YAAY,KAAK,WAAW,kBAC1C,CAEA,IAAI,OAAQ,CACJ,MAAC,gBAAAG,CAAmB,OAC1B,GAAGA,IAAoB,SACrB,OAAOH,GAAiB,UAChBG,IAAoB,cAAgB,CAACv9F,IAAau9F,IAAoB,aAC9E,OAAOH,GAAiB,WACnB,CACC,MAAC,YAAAx7G,CAAe,OACnB,OAACA,EAAY,OAAO,gBAEbA,EAAY,OAAO,MACpBw7G,GAAiB,MAEjBA,GAAiB,QAJjBA,GAAiB,cAM5B,CACF,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,SAAS,qBAAqB,sBAAsB,KAAK,EAAE,CACzE,CAEA,IAAI,iBAAkB,CACb,OAAC,CAAC,KAAK,YAAY,YAC5B,CAEA,IAAI,cAAe,CACjB,OAAO,KAAK,cAAc,KAAK,cAAc,OAAS,CAAC,CACzD,CAEA,IAAW,SAAU,CACZ,YAAK,QAAUA,GAAiB,OACzC,CAEA,IAAW,WAAY,CACf,MAAC,MAAAp3I,CAAS,OAChB,OAAOA,IAAUo3I,GAAiB,MACpC,CAEA,IAAW,eAA+B,CACjC,YAAK,YAAY,KAAK,aAC/B,CAEA,IAAW,aAA0C,CAC5C,YAAK,YAAY,KAAK,WAC/B,CAEO,UAAU9/E,EAA+B,CAC7BjuD,GAAA,KAAK,cAAeiuD,CAAM,EACtC,mBAAc,KAAKA,CAAM,EAC9B,KAAK,wBAAwB,CAC/B,CAEO,YAAYA,EAA+B,CAC3C,0BAAqB,OAAOA,CAAM,EACtBjuD,GAAA,KAAK,cAAeiuD,CAAM,EAC3C,KAAK,wBAAwB,CAC/B,CAEO,UAAW,CAChB,KAAK,cAAc,OAAS,EAC5B,KAAK,wBAAwB,CAC/B,CAEA,MAAa,uBAAuBljE,EAAgB,CAC3C,OAAAyG,KAAiBzG,EAAS,KAAK,aAAe,MAAM,KAAK,cAAc,IAAIA,CAAM,CAC1F,CAEO,aAAc,CACZ,YAAK,mBAAmB,EAAI,EAAE,KAAK,IAAM,KAAK,gBAAgByG,EAAY,CAAC,CACpF,CAEA,MAAa,gBAAgBzG,EAAgBmzD,EAAiB,CAC5D,MAAM3rB,EAAc,MAAM,KAAK,uBAAuBxnC,CAAM,EAC5D,OAAGyG,KAAiBzG,GAAUwnC,EAAY,OAAO,kBAC/C2rB,EAAQA,IAAU,OAAY,CAAC3rB,EAAY,OAAO,MAAQ2rB,GAGrD,KAAK,gBAAgB3rB,EAAa,CAAC,MAAA2rB,CAAM,EAClD,CAEO,WAAW6oF,EAAiC,CAC1C,aAAM,WAAWA,CAAQ,CAClC,CAEO,qCAAqCx0G,EAAmCnjB,EAAgC,CACzG,IAAA6+C,EACD17B,EAAY,OAAO,KAEX07B,EADuC7+C,IAAS,QAAU,OAAS,eAI5E6+C,EADc17B,EAAYnjB,CAAI,EACf,cAAc,CAAC,EAAE,QAAQ,CAAC,EAGrC,MAAA7P,EAAU,KAAK,WAAW0uD,CAAM,EACtC,GAAG,CAAC1uD,EAAS,OAEP,MAAA5L,EAAQ4L,EAAQ,YACtB,OAAA5L,EAAM,UAAY4L,EAAQ,UACnB,CAAC,MAAO5L,EAAO,OAAAs6D,EACxB,CAEO,yBAAyBnjE,EAI7B,CACD,OAAO,KAAK,YAAYA,EAAQ,IAAI,EAAI,IAAIoiJ,GAA4B,CACtE,UAAW,KACX,IAAK,KAAK,IAAI,WAAWpiJ,EAAQ,IAAI,EACrC,SAAU,KAAK,SACf,GAAGA,CAAA,CACJ,CACH,CAEO,gBAAgBqjJ,EAAgB,CACrC,OAAO,KAAK,gBAAgB,KAAK,YAAa,CAAC,UAAWA,EAAM,CAClE,CAEA,MAAa,4BAA6B,CACpC,IACF,MAAM/+H,EAAgC,eAEhC44C,EAAS,MAAMi6E,GAAgBF,GAAsB,GACrD6E,EAAgB,IAAIF,GAEpB0H,EAAqB,KAAK,yBAAyB,CACvD,cAAAxH,EACA,KAAAx3H,EACA,QAAS,CACP,KAAAA,CACF,EACD,EAEkBg/H,EAAmB,uBAC3B,iBAAiB,oBAAqB,IAAM,CACrDA,EAAmB,UAAU,EAC9B,EAEDpmF,EAAO,iBAAiB,CAAC,EAAE,iBAAiB,QAAS,IAAM,CACtD,KAAK,YAAY,cAClB,KAAK,kBAAkB,CACzB,EACC,CAAC,KAAM,GAAK,EAEfomF,EAAmB,kBAAkB,EACrCA,EAAmB,oBAAoBpmF,CAAM,QACvC9rD,EAAK,CACN,SAAI,MAAM,6BAA8BA,CAAG,CAClD,CACF,CAEO,oBAAqB,CAC1B,OAAO,KAAK,4BAAL,KAAK,0BAA8B,KAAK,2BAA2B,EAAE,QAAQ,IAAM,CACxF,KAAK,0BAA4B,OAClC,EACH,CAEO,mBAAoB,CACnB,MAAAkyI,EAAqB,KAAK,YAAY,aAC5C,OAAIA,GAIJ,OAAO,KAAK,YAAY,aACxB,KAAK,YAAY,cAAc,EAC/BA,EAAmB,yBAAyB,EAAI,EAEhD,OAAO,KAAK,YAAY,aACxB,KAAK,SAAS,qBAAqB,mBAAmB,KAAK,GAAI,KAAK,WAAW,EAExE,KAAK,SAAS,qBAAqB,2BAA2B,KAAK,EAAE,GAVnE,QAAQ,SAWnB,CAEO,qBAAsB,CAC3B,OAAG,KAAK,gBACC,KAAK,oBAEL,KAAK,oBAEhB,CAEA,MAAa,2BAA4B,CACvC,MAAMtM,EAAsC,CAC1C,MAAOU,GAAoB,GAGzB,IACF,MAAMx6E,EAAS,MAAMo6E,GAAUN,EAAa,EAAK,EACtB,KAAK,YAAY,KACzB,oBAAoB95E,CAAM,EAEvC,WAAK,gBAAgB,KAAK,YAAa,CAC3C,YAAa,GACb,aAAc,GACf,QACK9rD,EAAK,CACX,KAAK,IAAI,MAAM,0BAA2BA,EAAK4lI,CAAW,CAC5D,CACF,CAEO,mBAAoB,CACzB,OAAO,KAAK,2BAAL,KAAK,yBAA6B,KAAK,0BAA0B,EAAE,QAAQ,IAAM,CACtF,KAAK,yBAA2B,OACjC,EACH,CAEA,MAAa,kBAAmB,CACxB,MAAAsM,EAAqB,KAAK,YAAY,KACtCjM,EAAQiM,EAAmB,cAAc,YAAY,iBAAiB,CAAC,EACzEjM,IAIJM,GAAUN,CAAK,EACIiM,EAAA,cAAc,mBAAmBA,EAAmB,WAAW,EAE5E,WAAK,gBAAgB,KAAK,YAAa,CAC3C,aAAc,GACf,EACH,CAEO,oBAAqB,CAC1B,OAAG,KAAK,eACC,KAAK,mBAEL,KAAK,mBAEhB,CAEA,MAAa,OAAOC,EAAU,GAAOC,EAAS,GAAOC,EAAc,GAAO,CAC9D,UAAAn/H,KAAQ,KAAK,YACF,KAAK,YAAYA,CAA+B,EACxD,yBAAyB,CAACk/H,CAAM,EAK7C,GAFK,mBAAc,QAAS,KAAK,KAAK,EAEnC,CAAAC,GAIA,CAACD,EAAQ,CACJ,MAAApgJ,EAAImgJ,IAAY,KAAK,OAAS,KAAK,YAAY,KAAK,QAAQ,MAAM,OAAS,QACjF,KAAK,SAAS,qBAAqB,OAAO,KAAK,GAAIngJ,CAAC,CACtD,CACF,CAEO,YAAYpD,EAAoD,CAC/D,MAAC,YAAAmxB,CAAe,OAChBgyC,EAAS,MAAM,YAAYnjE,CAAO,EAErC,GAAAA,EAAQ,OAAS,SAAU,CAC5B,MAAM0O,EAAQyiB,EAAY,iBAAiB,CAACgyC,CAAM,EAClD,KAAK,uBAAuBz0D,EAAM,MAAM,EAAE,KAAM+4B,GAAgB,CAC3DA,GACDvnC,EAAU,cAAc,yBAA0B,CAAC,YAAa,KAAK,GAAI,YAAAunC,EAAY,CACvF,CACD,CACH,CAEO,OAAA07B,CACT,CAEA,MAAa,gBAAgB17B,EAAmCznC,EAO5D,CACF,GAAI,OAAO,KAAKA,CAAO,EAAE,OAKzB,IAAGynC,EAAa,CAIR,MAAAi8G,EAA6Cj8G,EAAY,OAAO,KAEtE,GAAGi8G,GACE1jJ,EAAQ,QAAU,QAAa,CAAC,KAAK,iBACtC,OAAOA,EAAQ,MAEZ,CAAC,OAAO,KAAKA,CAAO,EAAE,QACvB,OAMN,MAAMozD,EAAQpzD,EAAQ,MACnBozD,IAAU,QASI3rB,EAAY,OAAO,OAC7B2rB,EACD3rB,EAAY,OAAO,MAAQ,GACnBA,EAAY,OAAO,iBAC3B,OAAOA,EAAY,OAAO,OA6B7BznC,EAAQ,YAAc,SACpBA,EAAQ,UAAWynC,EAAY,kBAAoB,IACjD,OAAOA,EAAY,mBAGvBi8G,IACE1jJ,EAAQ,eAAiB,SACvBA,EAAQ,aAAc,OAAOynC,EAAY,MACvCA,EAAY,MAAQk8G,GAAkB,KAAK,YAAY,KAAK,QAAQ,KAAK,GAG7E,CAACl8G,EAAY,OAAO,OAASA,EAAY,OAAO,iBACjD,KAAK,SAAS,EAAK,EAGhB,mBAAc,QAAS,KAAK,KAAK,EAQ1C,CAEA,OAAO,KAAK,SAAS,qBAAqB,gBAAgB,KAAK,GAAIA,EAAaznC,CAAO,EACzF,CAEO,oBAAoBynC,EAAmCm8G,EAAyC,CAC/F,MAAAN,EAAqB,KAAK,YAAY,KACtC,CAAC,WAAA/G,EAAY,YAAAprH,CAAe,EAAAmyH,EAE5BrjJ,EAASqG,GAAUmhC,EAAY,IAAI,EACnCo8G,EAAU,CAAC,CAACp8G,EAAY,OAAO,KAC/Bq8G,EAAW,KAAK,kBAAkB,IAAI7jJ,CAAM,GAAK,GAEpD,GAAAwnC,EAAY,cAAgB,CAACo8G,EAAS,CACjC,MAAC,OAAA1gF,CAAM,EAAI4gF,GAAwBt8G,EAAa,QAASA,EAAY,aAAa,cAAeA,EAAY,aAAa,QAAQ,EACpI,KAAK,qBAAqB,IAAI07B,CAAM,IACjC,0BAAqB,IAAIA,CAAM,EACpC,KAAK,UAAU17B,EAAY,OAAO,KAAO,eAAiB07B,CAAM,EAEpE,CAEG,GAAA17B,EAAY,OAAO,KAAM,CAC1B,KAAK,YAAcA,EAEhB67G,EAAmB,QAAQ,MAAM,SAAW77G,EAAY,QACzD,KAAK,OAAO,EAGd,IAAIu8G,EAAO,GACPv8G,EAAY,OAAO,gBAIbA,EAAY,OAAO,QACpBu8G,EAAA,KAJP,KAAK,kBAAkB,EACvB,KAAK,iBAAiB,EACfA,EAAA,IAKNA,GACD,KAAK,SAAS,EAAI,EAGjBJ,IAAmC3jJ,GAC/B,mBAAc,QAAS,KAAK,KAAK,EAGxC,MACF,CAEA,MAAM0gJ,EAAQkD,EAAU,CAAC,EAAII,GAAyBx8G,CAAW,EAE7Do8G,EAGG,uBAAkB,OAAO5jJ,CAAM,EAF/B,uBAAkB,IAAIA,EAAQ0gJ,CAAK,EAOpC,MAAAuD,MAAyC,IACtCJ,EAAA,QAASK,GAAY,CAC5B,MAAMC,EAAYD,EAAQ,OAE1B,GAAG,CADaxD,EAAM,KAAMhH,GAASA,EAAK,SAAWyK,CAAS,EACjD,CACX,KAAK,YAAYA,CAAS,EAEpB,MAAAC,EAAWlzH,EAAY,iBAAiBizH,CAAS,EACpDC,GAAYA,EAAS,YAAc,aACpCA,EAAS,aAAa,UAAU,EAClBH,EAAA,IAAIG,EAAS,IAAI,EAEnC,EACD,EAEK1D,EAAA,QAAShH,GAAS,CACtB,IAAIjrI,EAAQyiB,EAAY,iBAAiBwoH,EAAK,MAAM,EACpD,GAAGjrI,EAAO,CACLA,EAAM,YAAc,aACfA,EAAA,aAAaA,EAAM,iBAAiB,EAC5Bw1I,EAAA,IAAIx1I,EAAM,IAAI,GAG9B,MACF,CAEQA,EAAAyiB,EAAY,YAAYwoH,EAAK,IAAI,EACzCxoH,EAAY,eAAeziB,EAAOirI,EAAK,cAAgBA,EAAK,MAAM,EACtDxoH,EAAA,eAAeziB,EAAOzO,CAAM,EAMxC05I,EAAK,OAAS,SAAWjrI,EAAM,YAAYirI,EAAK,QAAQ,EACxDjrI,EAAM,kBAAkB6tI,EAAY,CAAC,UAAW,UAAW,GAG7C2H,EAAA,IAAIx1I,EAAM,IAAI,EAC7B,EAQYw1I,EAAc,OACtBA,EAAc,IAAI,OAAO,IAC1BZ,EAAmB,kBAAoB,IAGzCA,EAAmB,mBAAmB,EAE1C,CACF,CC/iB8B,eAAAgB,GAAwBlxF,EAAiBmxF,EAAqB,CAC1F,MAAMvN,EAAsC,CAC1C,MAAOD,GAAoB,EAC3B,MAAOwN,GAAa7M,GAAoB,GAGpCoE,EAAgB,IAAIF,GAAc/D,EAAwC,EAE5E,IACF,MAAM36E,EAAS,MAAMo6E,GAAUN,EAAa5jF,CAAK,EACnC0oF,EAAA,UAAU5+E,EAAQ,OAAO,QACjC9rD,EAAK,CACH,cAAM,gCAAiCA,EAAK4lI,CAAW,EACjD8E,EAAA,YAAc,IAAI,WAClC,CAEO,OAAAA,CACT,CCPA,MAAM0I,GAAW,GAEV,SAASP,GAAyBx8G,EAAmC,CACnE,OACLs8G,GAAwBt8G,EAAa,QAASA,EAAY,MAAM,EAChEA,EAAY,OAAO,cAAgBs8G,GAAwBt8G,EAAa,QAASA,EAAY,MAAM,YAAY,EAC/GA,EAAY,OAASs8G,GAAwBt8G,EAAa,QAASA,EAAY,MAAM,cAAeA,EAAY,MAAM,QAAQ,EAC9HA,EAAY,cAAc,cAAgBs8G,GAAwBt8G,EAAa,QAASA,EAAY,aAAa,YAAY,EAC7HA,EAAY,cAAgBs8G,GAAwBt8G,EAAa,QAASA,EAAY,aAAa,cAAeA,EAAY,aAAa,QAAQ,GACnJ,OAAO,OAAO,CAClB,CAEO,SAASs8G,GAAwBt8G,EAAmCnjB,EAAsB6+C,EAA0D84E,EAAyB,CAC3K,OAAAS,GAAap4H,EAAM6+C,EAAQ84E,CAAQ,CAC5C,CAEgB,SAAA0H,GAAkBxgF,EAAcshF,EAAiD,CAC/F,OAAOthF,GAAU,CACf,EAAG,4BACH,OAAQ,CAAC,EACT,SAAU,GACV,cAAeA,EAAO,aACtB,aAAcshF,CAAA,CAElB,CAEO,MAAMC,WAA6BnzH,EAEvC,CAMM,UAAUlxB,EAAuB,CACtC,KAAK,SAAWA,EAChB,KAAK,WAAau2I,KACb,SAAM/1G,GAAO,KAAK,EAEb3gC,EAAA,iBAAiB,oBAAsBqiJ,GAAc,CACvD,MAAC,iBAAAoC,CAAoB,OACxBA,GAAkB,KAAOpC,EAAU,KACpCoC,EAAiB,UAAYpC,EAE1BA,EAAU,IAAM,sBACAoC,EAAA,OAAO,GAAO,GAAO,EAAI,EAE9C,CACD,EAEDzkJ,EAAU,iBAAiB,yBAA0B,CAAC,CAAC,YAAAsiJ,EAAa,YAAA/6G,KAAiB,CAC7E,MAAC,iBAAAk9G,CAAoB,OACxBA,GAAkB,KAAOnC,GACTmC,EAAA,oBAAoBl9G,CAAA,CACvC,CACD,CACH,CAEA,IAAI,WAAY,CACd,OAAO,KAAK,gBACd,CAEO,oBAAoB86G,EAA8B,CACvD,KAAK,iBAAmBA,EAErBA,GACI,mBAAc,WAAYA,CAAS,CAE5C,CAEO,sBAAuB,CAC5B,KAAK,oBAAoB,EACzB,KAAK,WAAW,qBAAqB,yBAA0B,GAAM,IAAI,CAC3E,CAEO,qBAAsB,CAC3B,KAAK,WAAW,YAChB,KAAK,WAAW,mBAClB,CAEA,MAAa,cAAc97I,EAAgB+7I,EAA0BpvF,EAAQoxF,GAAUhB,EAAkBe,EAAqB,CAC5H,KAAK,WAAW,cAEX,SAAI,wBAAwB99I,CAAM,OAAO+7I,CAAW,UAAUpvF,CAAK,WAAWowF,CAAM,EAAE,EAEvF,IAAA1H,EACJ,OAAG0H,EACe1H,EAAA,KAAK,iBAAiB,YAAY,KAAK,cAEvCA,EAAA,MAAMwI,GAAwBlxF,EAAOmxF,CAAS,EAGzD,KAAK,sBAAsB99I,EAAQ+7I,EAAa1G,EAAe1oF,EAAOowF,EAAQe,CAAS,EAC7F,KAAK,IAAM,CAEJ,MAAC,iBAAAI,CAAoB,OACVA,EAAA,aAAa,KAAMltG,GAAiB,CAChD,KAAK,mBAAqBktG,GAAoBA,EAAiB,QAAU1B,GAAiB,QAIhFxrG,EAAA,QAAShQ,GAAgB,CAChCA,EAAY,OAAO,MACrBk9G,EAAiB,oBAAoBl9G,CAAW,CAClD,CACD,EACF,EACF,CACH,CAEA,MAAc,sBAAsBhhC,EAAgB+7I,EAA0B1G,EAA8B1oF,EAAgBowF,EAAS,GAAOe,EAAqB,CAC/J,MAAMh+G,EAAM,KAAK,IAAI,WAAW,uBAAuB,EACvDA,EAAI,QAASi8G,CAAW,EAExB,MAAMl+H,EAAgC,OAElC,IAAC,iBAAAqgI,CAAoB,OACzB,GAAGA,GAAoBnB,EAErBmB,EAAiB,kCAAoC,GACrDA,EAAiB,YAAc,GAC3Bp+G,EAAA,0BAA2Bi8G,EAAamC,CAAgB,MACvD,CACLA,EAAmB,IAAIxB,GAAkB,CACvC,OAAA18I,EACA,GAAI+7I,EACJ,SAAU,KAAK,SAChB,EAEDmC,EAAiB,eAAe,EAEfA,EAAA,iBAAiB,QAAU94I,GAAU,CACjD,KAAK,mBAAqB84I,GAAoB94I,IAAUo3I,GAAiB,SAC1E,KAAK,oBAAoB,IAAI,EAC7B,KAAK,oBAAoB,EACpB,gBAAW,UAAU,oBAAoB,EACpC/iJ,EAAA,cAAc,cAAeykJ,EAAiB,MAAM,EAChE,CACD,EAEDA,EAAiB,UAAY,MAAM,KAAK,SAAS,qBAAqB,iBAAiBnC,CAAW,EAE5F,MAAAc,EAAqBqB,EAAiB,yBAAyB,CACnE,cAAA7I,EACA,KAAAx3H,EACA,QAAS,CACP,KAAAA,EACA,QAAS8uC,EACT,UAAAmxF,EACA,OAAAf,CACF,EACD,EAEKjH,EAAa+G,EAAmB,uBAC3B,OAAA/G,EAAA,iBAAiB,oBAAqB,IAAM,CACrD+G,EAAmB,UAAU,EAC9B,EAEU/G,EAAA,iBAAiB,QAAUz6H,GAAU,CAC9CykB,EAAI,UAAWzkB,CAAK,EACpB6iI,EAAiB,QAAQ7iI,CAAK,EAC/B,EAEUy6H,EAAA,iBAAiB,2BAA4B,IAAM,CAC3CoI,EAAA,cAAc,QAASA,EAAiB,KAAK,EAExD,MAAC,mBAAAC,CAAsB,EAAArI,EAO7B,OANGqI,IAAuB,gBAAkBA,IAAuB,YAAcA,IAAuB,MACtG,KAAK,qBAAqB,EAE1B,KAAK,oBAAoB,EAGpBA,EAAoB,CACzB,IAAK,WACH,MAGF,IAAK,SAAU,CACbD,EAAiB,OAAO,EACxB,KACF,CAEA,IAAK,YACH,MAGF,IAAK,YAAa,CACZA,EAAiB,SACnBA,EAAiB,OAAS,GACrB,gBAAW,UAAU,sBAAsB,EAC3C,cAAS,qBAAqB,yBAAyBnC,CAAW,GAGzE,KACF,CAEA,IAAK,eACH,MAGF,IAAK,SAAU,CAEbmC,EAAiB,OAAO,EAExB,KACF,CAKF,EACD,EAEDrB,EAAmB,kBAAkB,EACrCA,EAAmB,kBAAkB,EAErCA,EAAmB,yBAAyB,EAE5C,KAAK,oBAAoBqB,CAAgB,EACrCp+G,EAAA,uBAAwBi8G,EAAamC,CAAgB,EAEzD,KAAK,qBAAqB,EAEnBrB,EAAmB,WAC5B,CACF,CACF,CAEA,MAAMuB,GAAuB,IAAIH,GACjC3+F,KAAmBA,GAAe,oBAAsB8+F,IChOjD,SAASC,GAAmB,CACjC,OAAAr+I,EACA,SAAApG,EACA,KAAA+uC,EACA,UAAA21G,CACF,EAKG,CACD,MAAMC,EAAkC,GAClCC,MAAoD,IAC1D,IAAIpsG,EAAY,GAqCT,OACL,UAAAmsG,EACA,aAAAC,EACA,KAvC4C,MAAMlsG,GAAM,CACrDF,IAAcE,IACfisG,EAAU,OAAS,EACnBC,EAAa,MAAM,EACPpsG,EAAAE,GAGd,MAAM3d,EAAQ,GACR8pH,EAAeF,EAAUA,EAAU,OAAS,CAAC,EAC7ChjJ,EAAS,MAAM3B,EAAS,sBAAsB,uBAAuB,CACzE,OAAAoG,EACA,MAAA20B,EACA,KAAAgU,EACA,UAAA21G,EACA,WAAYG,GAAc,KAC1B,aAAcA,GAAc,QAC5B,EAAAnsG,CAAA,CACD,EAES,OAAAisG,EAAA,KAAK,GAAGhjJ,EAAO,SAAS,EAE3B,CACL,OAAQA,EAAO,UAAU,IAAKmjJ,GAAa,CACzC,MAAMllJ,EAASklJ,EAAS,QAAQ,SAAS,EAAK,EACjC,OAAAF,EAAA,IAAIhlJ,EAAQklJ,CAAQ,EAC1BllJ,CAAA,CACR,EACD,MAAO+B,EAAO,UAAU,OAASo5B,CAAA,CACnC,EAYA,eATsBn7B,GAAmB,CACzC+kJ,EAAU,OAAOA,EAAU,UAAWG,GAAaA,EAAS,QAAQ,SAAS,EAAK,IAAMllJ,CAAM,EAAG,CAAC,EAClGglJ,EAAa,OAAOhlJ,CAAM,EAO1B,CAEJ,CAEA,MAAqBmlJ,WAA6BvjH,EAAwB,CACxE,MAAa,KACXp7B,EACAk4F,EACA0mD,EACArpB,EACA,CACA,MAAM1mH,EAAc,MAAM,KAAK,SAAS,gBAAgB,YAAY7O,CAAM,EACvEk4F,EAAW,MACZ,KAAK,MAAM,gBAAgB/9F,GAAc+9F,EAAW,KAAK,CAAC,EAE1D,KAAK,SAAS,YAAY,EAG5B,CACE,MAAM2mD,EAAa3mD,EAAW,aAAeA,EAAW,YAAc9jE,GAAM,EAAI,EAC1E0qH,EAAe5mD,EAAW,aAAeA,EAAW,cAAgBA,EAAW,OAAS,GACxF3jF,EAAU,IAAIsoB,GAAe,CACjC,KAAM,aACN,QAASiiH,EAAe,4BAA+BD,EAAa,6BAAgC3mD,EAAW,YAAc,gBAAkB,OAC/I,YAAa2mD,EAAa,CAACvrF,GAAmB4kC,EAAW,WAAW,CAAC,EAAI,OAC1E,EAEKqS,EAAa,IAAIw0C,GAAe,CACpC,QAASH,EAAmB,YAC5B,eAAgB,KAAK,eACrB,IAAK1mD,EAAW,KAChB,QAAS0mD,EAAmB,QAC7B,EAEDr0C,EAAW,cAAcrS,CAAU,EAE3B3jF,EAAA,QAAQ,OAAOg2F,EAAW,SAAS,EACtC,gBAAW,OAAOh2F,EAAQ,SAAS,CAC1C,CAEA,CACE,MAAMA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,gBAAiB,GAErD7Y,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAC9BzP,EAAA,QAAQ,OAAOyP,CAAG,EAE1B,MAAM8Z,EAAO5F,GAAkB,eAAe,CAAC,IAAK,GAAK,EACzDlU,EAAI,OAAO8Z,CAAI,EAEf,MAAMtkC,EAAS0+F,EAAW,SAAS,SAAS,EAAK,EAC3C,CAAC,IAAAj6D,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAA1+B,EACA,UAAWskC,EACX,cAAe,GACf,WAAY,aACZ,UAAW,GACX,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEGG,EAAA,UAAU,UAAU,IAAI,WAAW,EACtB5nB,EAAA4nB,EAAI,OAAQ,IAAM,CACpBL,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,CACjC,GAAC,eAAgB,KAAK,cAAe,GAExCykC,EAAI,gBAAgB,OAAOq1B,GAAmB4kC,EAAW,IAAI,CAAC,EACzD,gBAAW,OAAO3jF,EAAQ,SAAS,CAC1C,CAEA,GAAG2jF,EAAW,qBAAsB,CAClC,MAAM3jF,EAAU,IAAIsoB,GAAe,CAAC,KAAM,wBAAyB,GAE7D/I,EAAM,IAAIoS,GAAY,GAAM,YAAa,OAAO,EAEhDooE,EAAQpW,EAAW,qBAAqB,OACxC8mD,EAAQ9mD,EAAW,OAAS,EAC5Bp+F,EAAQiE,EAAK,+BAAgC,CAACkhJ,GAAY,CAAC,MAAA3wC,CAAM,GAAkB0wC,CAAK,CAAC,EACzF5sH,EAAWr0B,EAAK,kCAAmC,CAAC,KAAOihJ,EAAQ,CAAC1wC,EAAQ,KAAM,QAAQ,CAAC,CAAC,CAAC,EAC/Fx6E,EAAA,MAAM,OAAOh6B,CAAK,EAClBg6B,EAAA,SAAS,OAAO1B,CAAQ,EAEpB7d,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAE/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAEA,GAAG2jF,EAAW,aAAe,CAACA,EAAW,QAAU,CAACA,EAAW,aAAeA,EAAW,YAAc9jE,GAAM,EAAI,GAAI,CACnH,MAAM7f,EAAU,IAAIsoB,GAAe,EAAE,EAC/B/I,EAAM,IAAI5B,GAAI,CAClB,MAAOn0B,EAAK,4BAA6B,CAACm6F,EAAW,WAAW,CAAC,EAClE,EACO3jF,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAC/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAEA,MAAM1O,EAA2B,GACjC,GAAGqyF,EAAW,UAAW,CACjB,MAAA3jF,EAAU,IAAIsoB,GAAe,CACjC,KAAM,eACN,SAAU,CAACq7D,EAAW,SAAS,EAChC,EAqBK,CAAC,aAAAsmD,EAAc,KAAAzjI,CAAI,EAAIsjI,GAAmB,CAC9C,OAAAr+I,EACA,SAAU,KAAK,SACf,KAAMk4F,EAAW,KACjB,UAAW,GACZ,EAEKgnD,MAAiD,IACjDC,EAAW,MAAM5jJ,GAA6C,CAClE,MAAMG,EAA+B,GAC9B,OAAAH,EAAA,OAAO,QAAS/B,GAAW,CAC1B,MAAA2+B,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,UAAWkiD,EACX,cAAe,GACf,WAAY,aACZ,OAAQ,GACR,aAAAhgD,EACA,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEcwjJ,EAAA,IAAI1lJ,EAAQ2+B,CAAa,EAC1BA,EAAA,IAAI,gBAAgB,OAAOm7B,GAAmBkrF,EAAa,IAAIhlJ,CAAM,EAAE,IAAI,CAAC,EAC3F,EAEM,QAAQ,IAAIkC,CAAY,GAG3BggD,EAAWxjB,GAAkB,iBAC3B3jB,EAAA,QAAQ,OAAOmnC,CAAQ,EAC1B,gBAAW,OAAOnnC,EAAQ,SAAS,EAEpC,IAAAuK,EACE,MAAAsgI,EAAgB,MAAMj/H,GAAiB,CAC3C,MAAM3mB,EAASslB,EAAO,QAAQ,OAAO,SAAS,EACxCqZ,EAAgB+mH,EAAe,IAAI1lJ,CAAM,EACzC25B,EAASgF,EAAc,iBAAiB,EAAI,EAC9C,IACF,MAAM,KAAK,SAAS,gBAAgB,oBAAoBn4B,EAAQxG,EAAQ2mB,CAAG,EAC3EgY,EAAc,OAAO,EACrB+mH,EAAe,OAAO1lJ,CAAM,EAEzB2mB,IACU+3E,EAAA,OAASA,EAAW,OAAS,GAAK,GAG3C,EAAEA,EAAW,YACf,OAAOA,EAAW,UAClB3jF,EAAQ,UAAU,UAGpBghH,IAAWr9B,CAAU,OACV,CACJ/kE,GACT,GAGgBlC,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,UACN,KAAMpiB,EAAc,eAAiB,aACrC,QAAS,IAAMuwI,EAAc,EAAI,GAChC,CACD,KAAM,aACN,KAAM,UACN,QAAS,IAAMA,EAAc,EAAK,EACnC,EACD,SAAU1jG,EACV,eAAgB,KAAK,eACrB,WAAY,KAAK,iBAAiB,IAAI,EACtC,YAAc31C,GAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,eAAe,EACvE,EAEQF,EAAA,KAAKkV,EAAK,GAAI,IAAM,EAAI,EAAE,KAAKokI,CAAQ,CAAC,CACnD,CAEA,GAAGjnD,EAAW,MAAO,CACnB,KAAM,CAAC,aAAAsmD,EAAc,KAAAzjI,CAAI,EAAIsjI,GAAmB,CAC9C,OAAAr+I,EACA,SAAU,KAAK,SACf,KAAMk4F,EAAW,KACjB,UAAW,GACZ,EAEKjyF,EAAWC,KACXi0C,EAAW,IAAIpL,GAAe,CAClC,WAAY,KAAK,iBAAiB,IAAI,EACtC,SAAU,KAAK,UACf,SAAWv1C,GAAW,CACPokC,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,CACpC,EAEA,SAAU,CAAC,QAAQ,EACnB,cAAeuhB,EACf,sBAAwBvhB,GAAW85D,GAAmBkrF,EAAa,IAAIhlJ,CAAM,GAAG,IAAI,EACpF,uBAAwBuE,EAAK,eAAgB,CAACm6F,EAAW,KAAK,CAAC,EAC/D,cAAe,IAAM,CACnBjyF,EAAS,QAAQ,CACnB,EACA,SAAU,KAAK,SACf,SAAU,GACV,YAAa,GACd,EAMD,GAJA,KAAK,QAAQ,SACJk0C,EAAA,WAAW,sBAAsB,KAAK,SAAS,EAC/CA,EAAA,WAAW,QAAQ,GAAG,MAAM,KAAK,KAAK,WAAW,UAAU,QAAQ,CAAC,EAE1E+9C,EAAW,YAAa,CACnB,MAAAh7F,EAAIa,EAAK,wBAAyB,CAACm6F,EAAW,YAAcA,EAAW,KAAK,CAAC,EACjFh7F,EAAA,UAAU,IAAI,iCAAiC,EACxCi9C,EAAA,QAAQ,MAAM,OAAOj9C,CAAC,CACjC,CAEA2I,EAAS,KAAKI,CAAQ,CACxB,CAEO,eAAQ,IAAIJ,CAAQ,CAC7B,CACF,CCrTA,MAAqBw5I,WAA2BjkH,EAE7C,CACD,MAAa,KAAKp7B,EAAgB2oC,EAAe,CAC/C,MAAM95B,EAAc,MAAM,KAAK,SAAS,gBAAgB,YAAY7O,CAAM,EAC1E,KAAK,UAAU,UAAU,IAAI,sBAAuB,yBAA0B,yBAAyB,EAClG,cAAS6O,EAAc,oBAAsB,gBAAgB,EAElE,KAAM,CAAC,aAAA2vI,EAAc,eAAAc,EAAgB,KAAAvkI,CAAA,EAAQsjI,GAAmB,CAC9D,OAAAr+I,EACA,SAAU,KAAK,SACf,UAAW,GACX,KAAA2oC,CAAA,CACD,EAEKu2G,MAAiD,IACjD,CAAC,SAAA/kG,EAAU,YAAAt/B,CAAW,EAAIkgC,GAAqB,CACnD,SAAU,KAAK,QACf,SAAU,KAAK,SACf,WAAY,KAAK,iBAAiB,IAAI,EACtC,OAAQ/6C,EAAO,SAAS,EAAI,EAC5B,SAAU,CAAC,QAAQ,EACnB,cAAe+a,EACf,sBAAwBvhB,GAAWuE,EAAK,oBAAqB,CAACu1D,GAAmBkrF,EAAa,IAAIhlJ,CAAM,GAAG,IAAI,CAAC,CAAC,EACjH,oBAAqB,CAACA,EAAQ2+B,IAAkB,CACxC,MAAAvN,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAuB,EACvC,MAAAjB,EAASqJ,GAAO,kDAAmD,CAAC,KAAMnkB,EAAc,eAAiB,aAAa,EACtH0wI,EAAUvsH,GAAO,4CAA6C,CAAC,KAAM,UAAU,EAC7EpI,EAAA,OAAOjB,EAAQ41H,CAAO,EAChBpnH,EAAA,UAAU,OAAOvN,CAAO,EACvBs0H,EAAA,IAAI1lJ,EAAQ2+B,CAAa,CAC1C,EACA,uBAAwB,GACzB,EAED,IAAIsJ,EAAgB,EACpB,OAAAprB,EAAiB8jC,EAAS,WAAW,UAAW,MAAMp0C,GAAM,CAC1D,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAuB,eAAe,EACvE,GAAG,CAAC+Y,EACF,OAGF,MAAMtlB,EAASslB,EAAO,QAAQ,OAAO,SAAS,EACxCqZ,EAAgB+mH,EAAe,IAAI1lJ,CAAM,EAEzCgmJ,EAAYzgI,EAAgBhZ,EAAE,OAAQ,mBAAmB,EACzD05I,EAAgB1gI,EAAgBhZ,EAAE,OAAQ,iBAAiB,EAC3Doa,EAAMq/H,EAAY,GAAQC,EAAgB,GAAQ,OAExD,GAAGt/H,IAAQ,OAAW,CACPyd,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,EAClC,MACF,CAEM,MAAA25B,EAASgF,EAAc,iBAAiB,EAAI,EAC9C,IACF,MAAM,KAAK,SAAS,gBAAgB,oBAAoBn4B,EAAQxG,EAAQ2mB,CAAG,EACzE,EAAAshB,EACF0Y,EAAS,aAAa3gD,CAAM,EAC5B0lJ,EAAe,OAAO1lJ,CAAM,EAC5B8lJ,EAAe9lJ,CAAM,OACV,CACJ25B,GACT,CACC,GAAC,eAAgB,KAAK,cAAe,GAEnC,mBAAc,iBAAiB,QAAS,IAAM,CAC5C,mBAAc,cAAc,SAAUsO,CAAa,EACzD,EAEM5mB,CACT,CACF,CCnEA,MAAqB6kI,WAAqBlU,EAAgB,CAOxD,YAAsBK,EAA8BjrG,EAAsBhnC,EAAuB,CACzF,OACJ,OAAAiyI,EACA,KAAAjrG,EACA,eAAgBirG,EAAO,eACvB,UAAW,WACX,cAAe,IAAI3yD,GACjB,kBACC3/E,GAAY,CAGb,CACF,EACA,QAAS,IAAM,CACbS,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACzCA,EAAM,qBAAqB,KAAK,MAAM,EAAI,KAAK,MAC/C,KAAK,SAAS,gBAAgB,YAAY,uBAAwBA,EAAM,oBAAoB,EAC7F,CACH,EACA,SAAU,GACV,OAAQ,GACT,EArBmB,YAAAymI,EAA8B,UAAAjrG,EAAsB,cAAAhnC,EAyBvDyc,EAAA,KAAK,QAAS,MAAMtQ,GAAM,CAEtC,GADHqQ,GAAYrQ,CAAC,EACVwpE,GAAgB,YAAY8vE,EAAkB,EAC/C,OAIF,MADY9vE,GAAgB,UAAU8vE,EAAkB,EAC9C,KAAK,KAAK,KAAK,OAAO,UAAU,EAC1C9vE,GAAgB,cAAc,EAAI,GACjC,CAAC,eAAgB,KAAK,OAAO,cAAe,GAE1C,mBAAc,OAAO,SACrB,mBAAc,QAAQ,SAEtB,kBAAe,IAAIt1E,GAAK,YAAY,CACvC,IAAK,4BACL,KAAM,CAAC,CAAC,EACR,QAAS,KAAK,cAAc,MAC7B,CACH,CAEO,MAAMT,EAAgB,CAC3B,KAAK,OAASA,EACX,KAAK,iBACD,oBAAe,UAAU,SAC9B,KAAK,+BAA+B,WAEtC,KAAK,OAAO,EAAI,CAClB,CAEA,MAAa,IAAIA,EAAgB8U,EAAmBtV,EAAgB,CAC/D,IAACsV,EAAQ,OACH,UAAM,KAAK,MAAM9U,CAAM,EAGhC,MAAMmmJ,EAAoB,KAAK,eACzBC,EAAoC,KAAK,+BAC/C,KAAK,+BAAiC12I,KACtC,MAAM22I,EAAU,KAAK,eAAiB,IAAI5kE,GAAe,CAAC,WAAY,GAAI,WAAY,KAAK,+BAA+B,KAAM,GAC1Hv/E,EAA+B,GAC7B,OAAAmkJ,EAAA,OAAOvxI,EAAS5S,CAAY,EAC9B,cAAQ,IAAIA,CAAY,EAEvB,IAAM,CACX,KAAK,OAASlC,EACd,KAAK,aAAa,iBAAiB,CAAC,KAAM,CAACR,CAAM,EAAE,EACnD,KAAK,aAAa,OAAO6mJ,EAAQ,UAAW,KAAK,aAAa,OAAO,EAClEF,IACDA,EAAkB,UAAU,SAC5BC,GAAmC,QAAQ,GAE7C,KAAK,OAAO,EAAK,EAErB,CAOO,UAAUpmJ,EAAgB,CAE/B,OAAO,QAAQ,IAAI,CACjB,KAAK,KAAK,SAAS,aAAa,kBAAkB,mBAAmBA,CAAM,EAC3EQ,GAAgB,SAAS,CAC1B,GAAE,KAAK,CAAC,CAAC8lJ,EAAe16I,CAAK,KACrB,CACL,OAAQ06I,EAAc,OACtB,OAAQz6H,GAAYy6H,EAAc,OAASC,GAAa,CACtD,MAAMC,EAAoBD,GAAmC,kBAC7D,OAAGC,IACA,CAAC56I,EAAM,qBAAqB5L,CAAM,GAAM,KAAK,MAAQ4L,EAAM,qBAAqB5L,CAAM,GAAMiW,IACtF,KAAK,IACVjW,EACAwmJ,EAAiB,MAAM,EAAG,CAAC,EAAE,IAAKjgJ,GAAWA,EAAO,SAAS,EAAK,CAAC,EAClEggJ,EAAkC,kBAG9B,KAAK,IAAIvmJ,EAAQ,GAAI,CAAC,CAC/B,CACD,GAEJ,CACH,CAMF,CC5HA,MAAqBymJ,WAAoBzU,EAAgB,CAMvD,YAAsBK,EAA8BjrG,EAAsBhnC,EAAuB,CACzF,OACJ,OAAAiyI,EACA,KAAAjrG,EACA,eAAgBirG,EAAO,eACvB,UAAW,UACX,cAAe,IAAI3yD,GACjB,iBACC3/E,GAAY,CAGb,CACF,EACA,QAAS,IAAM,CACb,KAAK,SAAS,kBAAkB,oBAAoB,KAAK,MAAM,CACjE,EACA,SAAU,GACV,OAAQ,GACT,EAlBmB,YAAAsyI,EAA8B,UAAAjrG,EAAsB,cAAAhnC,EAsBnE,aAAQ,kBAAkB,SAE1B,mBAAc,OAAO,SACrB,mBAAc,QAAQ,UAEP,CAACmd,EAAmB1T,IAAsC,CAC3DgT,EAAAU,EAAOhR,GAAM,CAC5BqQ,GAAYrQ,CAAC,EACb1C,EAAS0C,CAAC,GACT,CAAC,eAAgB,KAAK,OAAO,cAAe,KAGrC,KAAK,QAAUA,GAAM,CAC/B,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,uBAAuB,EAChE,GAAG,CAAC+Y,EACF,OAGI,MAAAtP,EAAMsP,EAAO,QAAQ,IACZ,KAAK,QAAQ,KAAM/b,GAAWA,EAAO,MAAQyM,CAAG,EACxD,QAAQ,EAChB,EAED,KAAK,QAAU,CAAC,CACd,IAAK,eACL,QAAS,SAAW,CACZ,MAAArK,EAAU,KAAK,SAAS,mBAAmB,gBAAgB,CAAC,KAAK,MAAM,EAAG,CAAC,EACjF,KAAK,OAAOA,CAAO,CACrB,GACC,CACD,IAAK,gBACL,QAAS,IAAM,CACb,KAAK,KAAK,OAAO,UACf,KAAK,gBAAgB,KAAMpC,GAAWA,EAAO,MAAQ,aAAa,EAClE,GACCoC,GAAY,CACX,KAAK,OAAOA,CAAO,CACrB,EAEJ,EACA,OAAQ,IACP,CACD,IAAK,cACL,QAAS,IAAM,CACR,UAAK,OAAO,YACnB,GACC,CACD,IAAK,cACL,QAAS,SAAW,CAClB,MAAM3L,EAAS,KAAK,OACjB,GAAAA,EAAO,SACH,aAAQ,KAAMuJ,GAAWA,EAAO,MAAQ,eAAe,EAAE,cACzD,CACL,MAAM+iC,GAAkB,CACtB,aAAc,iCACd,mBAAoB,KAAK,SAAS,gBAAgB,YAAYtsC,CAAM,EAAI,kCAAoC,gCAC5G,OAAQ,CACN,QAAS,YACX,EACD,EAEK,MAAA2L,EAAU,QAAQ,IAAI,CAC1B,KAAK,SAAS,mBAAmB,WAAW3L,CAAM,EAClD,KAAK,SAAS,gBAAgB,MAAMA,EAAO,UAAU,EACtD,EACD,KAAK,OAAO2L,CAAO,CACrB,CACF,EACA,OAAQ,GACT,CACH,CAEA,MAAc,OAAOA,EAAuB,CACrC,aAAQ,UAAU,IAAI,aAAa,EACpC,IACI,MAAAA,OACK,CAEb,CAEK,aAAQ,UAAU,OAAO,aAAa,CAC7C,CAEO,MAAM3L,EAAgB,CAC3B,KAAK,OAASA,EACd,KAAK,OAAO,EAAI,CAClB,CAEO,IAAIA,EAAgBqsB,EAAwB,CACjD,MAAMq6H,EAAmBr6H,GAAU,OACjC,KAAK,QAAQ,OAAQ9iB,GAAW8iB,EAAS,OAAO9iB,EAAO,GAAG,CAAC,EAC3D,GACC,OAACm9I,EAAiB,OAId,IAAM,CACX,KAAK,OAAS1mJ,EACd,KAAK,gBAAkB0mJ,EACvB,MAAMC,EAEF,CACF,YAAa,aACb,aAAc,YACd,cAAe,YACf,YAAa,oBAGTv1H,EAAyB,GAC/B,QAAQ1tB,EAAI,EAAGlE,EAAS,KAAK,IAAI,EAAGknJ,EAAiB,MAAM,EAAGhjJ,EAAIlE,EAAQ,EAAEkE,EAAG,CACvE,MAAA6F,EAASm9I,EAAiBhjJ,CAAC,EAC3BysB,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,UAAU,IACf,wBACA5mB,EAAO,OAAS,SAAW,WAG1B/J,EAAS,GACV2wB,EAAO,UAAU,IAAI,OAAQzsB,IAAM,EAAI,WAAa,SAAS,EAGxDysB,EAAA,QAAQ,IAAM5mB,EAAO,IAC5B6nB,EAAQ,KAAKjB,CAAM,EAEnB,MAAMtpB,EAAOtC,EAAKoiJ,EAAep9I,EAAO,GAAG,CAAC,EACvC1C,EAAA,UAAU,IAAI,4BAA4B,EAC/C4tB,GAAOtE,CAAM,EACbA,EAAO,OAAOtpB,CAAI,CACpB,CAEA,KAAK,QAAQ,gBAAgB,GAAGuqB,EAAS,KAAK,YAAY,EAC1D,KAAK,OAAO,EAAK,GAtCV,IAAM,KAAK,MAAMpxB,CAAM,CAwClC,CAOO,UAAUA,EAAgB,CAE/B,OAAO,QAAQ,IAAI,CACjB,KAAK,KAAK,SAAS,aAAa,kBAAkB,gBAAgBA,CAAM,CACzE,GAAE,KAAK,CAAC,CAAC4mJ,CAAiB,KAClB,CACL,OAAQA,EAAkB,OAC1B,OAAQ/6H,GAAY+6H,EAAkB,OAASC,GACtC,KAAK,IAAI7mJ,EAAQ6mJ,CAAY,CACrC,GAEJ,CACH,CAMF,CC5MwB,SAAAC,GAAgBlyH,EAAoB1sB,EAA+C,CACzGmP,GAAeud,EAAO1sB,CAAO,EAC7B0sB,EAAM,UAAU,OAAO,iBAAkB,CAAC1sB,CAAO,CACnD,CCLO,MAAM6+I,GAAe,CAAC9qI,EAAY,KAAO,cAAcA,CAAS,yCCU1D+qI,GAAoBn3I,GAAiC,CAChE,MAAMi6B,EAAYttB,GAAS2O,YAAY,YAAY,EAC7C,CAAC87H,EAAWC,CAAY,EAAIp4I,GAAag7B,CAAS,EAExDA,UAAa58B,GACXC,GACE0C,EAAMs3I,iBACN,IAAM,CACJD,EAAa,EAAI,CAErB,EACF,GAEA,WAAAhlI,EAAAO,GAAA,EAAAC,EAAAR,EAAAS,WAAA6M,EACe3f,EAAMuzC,IAAG,cAAA5zB,GAAA,WAAAC,GAAAD,EAAAtN,CAAA,EAATrS,EAAMuzC,IAAGlhC,EAAAU,EAAAV,EAAAa,EACnB4L,GAAI,KAACC,MAAI,QAAEq4H,EAAS,CAAE,MAAAn4H,UAAA,OAAAtM,EAAAL,KAAAK,SAAAsB,iBAAA,eAGH,IAAMojI,EAAa,EAAK,CAAC,EAAA9kI,GAAA,IAAAiN,GAAA7M,EADlCukI,GAAa,mBAAmB,CAAC,GAAAvkI,CAAA,IAAAE,CAAA,EAAAE,EAAAF,EAAA,IAKNne,EAAK,kBAAkB,CAAC,EAAA6d,GAAA6M,GAAA,OAAAC,EARjC63H,GAAa,cAAc,EAAC53H,EAQ7C43H,GAAa,SAAS,EAAC73H,WAAAD,EAAAC,KAAAG,GAAAnN,EAAA+M,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAA3M,EAAAuM,EAAAE,MAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA/E,CAAA,IAGzC,EC7BO,SAASklI,GAAiBv3I,EAAqD,CACpF,OAAO1D,EAAW,IAAM,CAChB,MAAAiuB,EAAOvqB,EAAM,MAAQ,IACpB,OACL,aAAcA,EAAM,kBAAoBuqB,EAAO,iBAAiB,MAAM,GAAG,EACzE,OAAQvqB,EAAM,YAAcuqB,EAAO,UAAU,MAAM,GAAG,EACtD,SAAUvqB,EAAM,cAAgBuqB,EAAO,aAAa,MAAM,GAAG,EAC7D,YAAavqB,EAAM,iBAAmBuqB,EAAO,gBAAgB,MAAM,GAAG,EACtE,MAAOvqB,EAAM,WAAauqB,EAAO,SAAS,MAAM,GAAG,EACnD,QAASvqB,EAAM,aAAeuqB,EAAO,YAAY,MAAM,GAAG,EAE5D,CACD,CACH,CAKO,SAASitH,GAAUz+G,EAAgB,CAClB,0BAAM,sBAAsBA,CAAE,CAAC,CACvD,CAKO,SAAS0+G,GACdC,EACAhrG,EACAzqC,EACA8+B,EACA3tC,EACA,CACA,KAAM,CAAC,cAAAukJ,EAAe,QAAAC,EAAS,aAAAC,CAAA,EAAgBnrG,EAE3C,IAAAjgC,EAGJkrI,IAAgB11I,CAAE,EAElBA,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,KAAK,EACjCz1I,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,WAAW,EAIvC,eAAe,IAAM,CAGnB,GAAG,CAACz1I,EAAG,WAAY,OAAO8+B,IAAO,EAEvB62G,IAAA31I,EAAI,IAAM61I,EAAA,CAAe,EACpC,EAEDN,GAAU,IAAM,CACdv1I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,KAAK,EACpCz1I,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,OAAO,GAEhC,CAACE,GAAWA,EAAQ,OAAS,KAC3B31I,EAAA,iBAAiB,gBAAiB61I,CAAa,EAC/C71I,EAAA,iBAAiB,eAAgB61I,CAAa,EAE9C1kJ,IAAa,SACdqZ,EAAU,OAAO,WAAW,IAAMqrI,IAAiB1kJ,CAAQ,GAE/D,CACD,EAED,SAAS0kJ,EAAcp7I,EAAW,EAC7B,CAACA,GAAKA,EAAE,SAAWuF,KACpB,aAAawK,CAAO,EACbs0B,MACJ9+B,EAAA,oBAAoB,gBAAiB61I,CAAa,EAClD71I,EAAA,oBAAoB,eAAgB61I,CAAa,EACpD71I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,WAAW,EAC1Cz1I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,OAAO,EACtCG,IAAe51I,CAAE,EAErB,CACF,CAKO,SAAS81I,GACdL,EACAhrG,EACAzqC,EACA8+B,EACA3tC,EACA,CACA,KAAM,CAAC,aAAA4kJ,EAAc,OAAAC,EAAQ,YAAAC,CAAA,EAAexrG,EAI5C,GAAG,CAACzqC,EAAG,WAAY,OAAO8+B,IAAO,EAE7B,IAAAt0B,EAEJurI,IAAe/1I,CAAE,EAEjBA,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,IAAI,EAChCz1I,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,UAAU,EAE7BO,IAAAh2I,EAAI,IAAM61I,EAAA,CAAe,EAElCN,GAAU,IAAM,CACdv1I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,IAAI,EACnCz1I,EAAG,UAAU,IAAI,GAAGy1I,EAAQ,MAAM,GAE/B,CAACO,GAAUA,EAAO,OAAS,KACzBh2I,EAAA,iBAAiB,gBAAiB61I,CAAa,EAC/C71I,EAAA,iBAAiB,eAAgB61I,CAAa,EAE9C1kJ,IAAa,SACdqZ,EAAU,OAAO,WAAW,IAAMqrI,IAAiB1kJ,CAAQ,GAE/D,CACD,EAED,SAAS0kJ,EAAcp7I,EAAW,EAC7B,CAACA,GAAKA,EAAE,SAAWuF,KAKpB,aAAawK,CAAO,EACbs0B,MACJ9+B,EAAA,oBAAoB,gBAAiB61I,CAAa,EAClD71I,EAAA,oBAAoB,eAAgB61I,CAAa,EACpD71I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,UAAU,EACzCz1I,EAAG,UAAU,OAAO,GAAGy1I,EAAQ,MAAM,EACrCQ,IAAcj2I,CAAE,EAEpB,CACF,CCvIA,IAAI2P,GAAO,IAAM,CACjB,EACIumI,GAAiB,CAACl2I,EAAI8+B,IAASA,EAAI,EACvC,SAASq3G,GAAuB/kF,EAAQnjE,EAAS,CAC/C,MAAMuoE,EAAa76D,GAAQy1D,CAAM,EAC3BglF,EAAe5/E,EAAa,CAACA,CAAU,EAAI,GAI3C,CAAE,QAAAm/E,EAAUO,GAAgB,OAAAF,EAASE,EAAc,EAAKjoJ,EACxD,CAACooJ,EAAUC,CAAW,EAAIt5I,GAC9B/O,EAAQ,OAAS,GAAKmoJ,CAC1B,EACQ,CAACv/E,CAAmB,EAAIC,KAC9B,IAAIhsC,EACAyrH,EAAY,GAChB,SAAST,EAAe91I,EAAI86D,EAAO,CACjC,GAAI,CAAC96D,EACH,OAAO86D,GAASA,IAClBy7E,EAAY,GACZP,EAAOh2I,EAAI,IAAM,CACf1E,GAAM,IAAM,CACVi7I,EAAY,GACZD,EAAa7lJ,GAAMA,EAAE,OAAQgK,GAAMA,IAAMuF,CAAE,CAAC,EAC5C86D,GAASA,EAAK,CACtB,CAAO,CACP,CAAK,CACF,CACD,SAAS06E,EAAgB16E,EAAO,CAC9B,MAAM96D,EAAK8qB,EACX,GAAI,CAAC9qB,EACH,OAAO86D,GAASA,IAClBhwC,EAAO,OACPwrH,EAAa7lJ,GAAM,CAACuP,EAAI,GAAGvP,CAAC,CAAC,EAC7BklJ,EAAQ31I,EAAI86D,GAASnrD,EAAI,CAC1B,CACD,MAAM6mI,EAAqBvoJ,EAAQ,OAAS,SAEzCmQ,GAASm4I,GAAaT,EAAe13I,EAAMo3I,CAAe,EACzDvnJ,EAAQ,OAAS,SAElBmQ,GAASo3I,EAAgB,IAAMM,EAAe13I,CAAI,CAAC,EAGnDA,GAAS,CACR03I,EAAe13I,CAAI,EACnBo3I,GACD,EAEH,OAAAiB,GACGr4I,GAAS,CACR,MAAM4B,EAAKoxD,IACX,OAAIz1D,GAAQk7D,CAAmB,GAC7BA,IACOz4D,IAEL4B,IAAO5B,IACT0sB,EAAO9qB,EACP1E,GAAM,IAAMK,GAAQ,IAAM66I,EAAmBp4I,CAAI,CAAC,CAAC,GAE9C4B,EACR,EACD/R,EAAQ,OAAS,OAASuoE,CAC9B,EACS6/E,CACT,CCqCA,MAAMK,GAAsB,CAC1B,MAAO,SACP,MAAO,QACT,EASaC,GAAsD54I,GAAA,CAC3D,MAAA64I,EAAatB,GAAiBv3I,CAAK,EAElC,OAAAo4I,GACLj+E,GAAa,IAAMn6D,EAAM,QAAQ,EACjC,CACE,KAAM24I,GAAoB34I,EAAM,IAAK,EACrC,OAAQA,EAAM,OACd,QAAQiC,EAAI8+B,EAAM,CAChB02G,GAAgBoB,IAAc74I,EAAOiC,EAAI8+B,EAAM/gC,EAAM,QAAQ,CAC/D,EACA,OAAOiC,EAAI8+B,EAAM,CACfg3G,GAAec,IAAc74I,EAAOiC,EAAI8+B,EAAM/gC,EAAM,QAAQ,CAC9D,CACF,EAEJ,qDC3Ha84I,GAAY94I,GAAyB,CAChD,MAAMif,EAAWA,IAAM,OAAOjf,EAAMif,UAAc,WAAajf,EAAMif,SAAQ,EAAKjf,EAAMif,SAClFne,EAAUA,IAAM,OAAOd,EAAMc,SAAa,WAAad,EAAMc,QAAO,EAAKd,EAAMc,QAC/EiH,EAAKmL,EACR4L,GAAI,KAACC,MAAI,QAAEje,EAAO,CAAE,MAAEke,UAAQ,QAAE/L,EAAA,MAAAgM,EAAQ,CAAE,iBAAAtM,EAAAC,KAAAG,SAAAJ,EACZsM,CAAQ,EAAAtM,KACtC,MAAAsM,UAAA,OAAA5M,EAAAC,KAAAC,UAAA,IAAAiN,GAAAnN,EACc,YAAWrS,EAAMmT,OAAS,EAAG,EAAC,GAAAd,CAAA,EAE9C,EAED,OAAAa,EACG0lI,GAAU,CAACruH,KAAI,OAAQ0wC,KAAI,QAAS7nE,SAAU,IAAG6rB,SAC/ClX,CAAK,EAGZ,iBCTagxI,GAAc/4I,GAA2B,CACpD,MAAMg5I,EAAWA,IAAMh5I,EAAMg5I,SAAW,EACtCtkJ,EAAK,gBAAiB,CAACq+B,GAAkCld,KAAK42B,IAAI,EAAGzsC,EAAMg5I,QAAQ,CAAC,CAAC,CAAC,EACtFtkJ,EAAK,uBAAuB,EAExBq0B,GAAQ,WAAA1W,EAAAC,KAAAS,SAAAV,EAAAa,EAET4lI,GAAQ,KAACh4I,SAAO,QAAEd,EAAMg5I,WAAa5hI,MAAS,MAAA6H,UAAA,QAC5C+5H,EAAQ,CAAE,KAAA3mI,MAKX,CAACpgB,WAAU,EAAGq/E,GAAU,CAC5B7gF,MAAOiE,EAAK,mBAAmB,EAC/Bq0B,SAAUA,CACZ,CAAC,EAEK6wE,EAAal3F,SAAS6Y,cAAc,KAAK,EAC/Cq+E,EAAWvjF,UAAUS,IAAIogI,GAAc,EAAG,aAAa,EAEvDjlJ,EAAUkuE,QAAQy5B,CAAU,EAC5B3nG,EAAUokB,UAAU0F,OAAO,sBAAsB,EACjD9pB,EAAUokB,UAAUS,IAAIogI,GAAc,EAAG,UAAU,EAEnDp4I,GAAUkO,EAAiB/a,EAAW+N,EAAMi5I,MAAM,CAAC,EAEnD,IAAI34H,EACJpN,SAACikI,GAAgB,CAAA5jG,IAAAgpB,EAAA,OAAA58C,EAAMW,EAAM,OAAAX,gBAAA48C,CAAA,EAANj8C,EAAMi8C,CAAA,MAAE+6E,kBAAgB,QAAEt3I,EAAMs3I,gBAAgB,IACvErlJ,EAAU+zC,OAAO1lB,CAAM,EAEhBruB,CACT,EC5CA,IAAKinJ,QACHA,EAAAC,EAAA,qBACAD,EAAAC,EAAA,yBACAD,EAAAC,EAAA,2BACAD,EAAAC,EAAA,mBAJGD,QAAA,ICKE,MAAME,WAAyB33H,EAEnC,CAYD,YAAY+7B,EAST,CACD,MAAM,EAAK,EACJ,cAAO,KAAMA,CAAM,EAC1B,KAAK,OAAS07F,GAAW,UAC3B,CAEO,SAAU,CACf,MAAM,QAAQ,CAChB,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,MACd,CAEA,IAAW,MAAM9xI,EAAmB,CAClC,KAAK,OAASA,EACT,mBAAc,QAASA,CAAK,CACnC,CACF,CAEO,MAAMiyI,WAA4B53H,EAGtC,CAHI,kCAiCG,uBAAqBmlB,GAAsB,CACjD,GAAGA,EAAO,KAAO,KAAK,aAAa,KAAK,GAErC,IAAAA,EAAO,IAAM,qBAAsB,CACpC,KAAK,YAAc,OACnB,MACF,CAEA,KAAK,YAAY,KAAOA,EACnB,mBAAc,qBAAsB,KAAK,WAAW,GAC3D,CAnCO,UAAUr2C,EAAuB,CACtC,KAAK,SAAWA,EAENH,EAAA,iBAAiB,oBAAqB,KAAK,iBAAiB,EAEtEO,GAAgB,mBAAmB,iBAAiB,iBAAkB,CAAC,CAAC,OAAA2oJ,EAAQ,KAAAzuH,KAAU,CACrF,KAAK,aAAa,KAAK,KAAOyuH,IAC/B,KAAK,YAAY,cAAgBzuH,EACnC,CACD,CACH,CAEA,IAAW,aAAc,CACvB,OAAO,KAAK,YACd,CAEA,IAAY,YAAYzjB,EAAqC,CACxD,KAAK,cAAgBA,IAIxB,KAAK,cAAc,UACnB,KAAK,cAAc,qBAAsB,KAAK,aAAeA,CAAK,EACpE,CAcQ,YAAa,CAEnB,OAAQ,KAAK,OAAO,EAAI,GAAM,GAAK,GAAKmyI,GAAe,EAAE,CAC3D,CAEQ,eAAe1P,EAAwB,CAStC,OACL,EAAG,WACH,KAAM,KAAK,UAV+B,CAC1C,aAAgB,CAAC,EACjB,IAAO,GACP,KAAQA,EACR,cAAe,CAAC,EAChB,MAAS,GAKqB,EAElC,CAEA,MAAa,SAASlzI,EAAgB,CACpC,GAAG,KAAK,YACA,UAAI,MAAM,sBAAsB,EAGlC,MAAAxG,EAASwG,EAAO,SAAS,EAAI,EAC9B,mBAAc,iBAAkBxG,CAAM,EAErC,MAAA05I,EAAO,KAAK,aACZ31H,EAAO,KAAK,eAAe21H,CAAI,EAE/BtyG,EAAO,MAAM,KAAK,SAAS,kBAAkB,YAAY5gC,CAAM,EAClE,GAAA4gC,EAAK,IAAM,cACN,UAAI,MAAM,YAAY,EAGxB,MAAAiiH,EAAO,MAAM,KAAK,SAAS,qBAAqB,iBAAiBjiH,EAAK,KAAK,EAAE,EAChF,GAAAiiH,EAAK,IAAM,YACN,UAAI,MAAM,kBAAkB,EAGpC,MAAM5yG,EAAS,MAAM,KAAK,SAAS,qBAAqB,cAAcrP,EAAK,KAAK,GAAIrjB,EAAM,CAAC,KAAM,MAAO,GAErG,GADgB,KAAK,MAAM0yB,EAAO,OAAO,IAAI,EAClC,OAAS,GACf,UAAI,MAAM,kBAAkB,EAG/B,iBAAc,IAAIwyG,GAAiB,CACtC,KAAAI,EACA,UAAW,CACT,EAAG,iBACH,GAAIA,EAAK,GACT,YAAaA,EAAK,WACpB,EACA,OAAA7iJ,EACA,OAAAxG,EACA,KAAA05I,EACA,IAAK,GACL,MAAO,EAAQtyG,EAAK,QAAQ,mBAC5B,cAAe,IAChB,CACH,CAEA,MAAa,UAAUk8G,EAAU,GAAO,CACtC,GAAG,CAAC,KAAK,YAAa,OACtB,MAAMgG,EAAc,KAAK,YAEzB,KAAK,YAAc,OACH9oJ,GAAA,mBAAmB,WAAW,gBAAiB,CAAC8oJ,EAAY,KAAK,GAAI,EAAI,CAAC,EACpF,WAAK,SAAS,qBAAqB,OAAOA,EAAY,KAAK,GAAIhG,EAAU,GAAOgG,EAAY,IAAI,CACxG,CAEA,MAAa,kBAAkBC,EAAc,GAAOC,EAAc,GAA4C,CAC5G,GAAG,CAAC,KAAK,YAAoB,aAEvB,MAAA59I,EAAQ,MAAM,KAAK,SAAS,qBAAqB,eAAe,KAAK,YAAY,SAAS,EAChG,GAAG,CAAC29I,EAAa,OAAO39I,EAAM,SAAS,SAAW,EAAI,OAAS,QAGzD,MAAAioE,EAAUjoE,EAAM,SAAS,KAAM69I,GAAOA,EAAG,UAAY5R,EAAuB,EAClF,GAAG,CAAChkE,EAAgB,aAChB,IACI,MAAAn5C,EAAO,KAAK,YAAY,gBAAkB,IAAMm5C,EAAQ,kBAAoB,KAAK,YAAY,cAC7F,kBAAK,SAAS,qBAAqB,cAAc,CACrD,EAAG,uBACH,KAAM,KAAK,YAAY,UACvB,cAAegkE,GACf,cAAeC,GACf,MAAOjkE,EAAQ,MACf,QAASn5C,CAAA,EACR9uB,EAAM,IAAI,EACN,cACDW,EAAQ,CACd,GAAIA,EAAe,OAAS,0BAA4B,CAACi9I,EACnD,IACF,aAAM,KAAK,aACJ,KAAK,kBAAkB,GAAM,EAAI,OAC/B,CAAC,CAEhB,CAEO,aACT,CAEA,MAAa,YAAa,CACxB,GAAG,CAAC,KAAK,YAAa,OACjB,iBAAY,KAAO,KAAK,WAAW,EACxC,MAAMzlI,EAAO,KAAK,eAAe,KAAK,YAAY,IAAI,EACtD,MAAM,KAAK,SAAS,qBAAqB,cAAc,KAAK,YAAY,KAAK,GAAIA,EAAM,CAAC,KAAM,MAAO,EACvG,CACF,CAEA,MAAM2lI,GAAsB,IAAIR,GAChCpjG,KAAmBA,GAAe,oBAAsB4jG,IC/MjD,SAASC,IAAqB,CAC7B,MAACN,EAAMO,CAAO,EAAI96I,GAA+B46I,GAAoB,YAAa,CAAC,OAAQ,GAAM,EACjG,CAAC1pJ,EAAQ6pJ,CAAS,EAAI/6I,GAAqBrI,EAAY,EAE7D,OAAAkb,GAAY+nI,EAAmB,EAAE,qBAAuBL,GAAS,CAC/DO,EAAQP,CAAI,EACZQ,EAAUR,GAAM,MAAM,EACvB,EAED1nI,GAAY+nI,EAAmB,EAAE,iBAAmB1pJ,GAAW,CAC7D6pJ,EAAU7pJ,CAAM,EACjB,EAEM,CAAC,KAAAqpJ,EAAM,OAAArpJ,EAChB,CCJe,MAAM8pJ,WAAiB9X,EAAgB,CAKpDvgC,YAAsB4gC,EAA8BjrG,EAAsBhnC,EAAuB,CAC/F,MAAM,CACJiyI,SACAjrG,OACApS,eAAgBq9G,EAAOr9G,eACvB/Y,UAAW,OACX8tI,SAAU,GACVzjI,OAAQ,EACV,CAAC,EAAE,KARiB+rH,SAAkB,KAAYjrG,OAAU,KAAYhnC,WAUxE,CAAC,KAAKJ,OAAQ,KAAK6pJ,SAAS,EAAI/6I,GAAqBrI,EAAY,EACjE,KAAKiI,QAAUiV,GAAO,IAAM,KAAK2U,OAAQ,KAAKx2B,SAAS,CACzD,CAEQw2B,MAAO,CACb,KAAM,CAACt4B,QAAO,EAAG,KAEX,CAAC6oJ,EAAUmB,CAAW,EAAIl7I,GAAY,EACtCs4B,EAAO6iH,GAAQ,IAAMjqJ,EAAM,EAAGumG,SAAU,GACxC+iD,EAAcK,KACdO,EAAoB/9I,EAAW,IAAM,CACzC,MAAMg+I,EAAQ/iH,IAEd,MAAO,CAAC,EACN+iH,GACCA,EAAyBt9H,OAAOu9H,WAChCD,EAAyBt9H,OAAOw9H,aAChCF,EAAyBt9H,OAAOy9H,eAErC,CAAC,EACKj7I,EAAalD,EAAW,IAAM+9I,EAAiB,GAAMZ,EAAYtpJ,OAAM,IAAOA,EAAM,CAAE,EAEtFuqJ,EAAcA,IAAMtqJ,EAAUG,SAASoqJ,kBAAkBC,YAAYzqJ,EAAM,EAAGumG,SAAQ,CAAE,EAE9F5kF,GAAY1hB,CAAS,EAAE,oBAAqB,MAAMopJ,GAAS,CACzD,GAAG,CAACa,EAAmB,GAAIb,EAAK10I,IAAM,YAAa,OACnD,MAAM+1I,EAAW,MAAMH,IACpBG,GAAU/1I,IAAM,eAEhB00I,EAAKvnH,KAAO4oH,EAASrB,MAAMvnH,IAE9BkoH,EAAYX,EAAKt8B,kBAAkB,CACrC,CAAC,EAED7/G,GAAsBy9I,GAAc,CAClC,GAAG,GAACvjH,EAAI,GAAM,CAAEA,EAAI,EAAsBva,OAAOu9H,WAIjD,OAAGO,IAAc3qJ,KACfgqJ,IAGF98I,GAAa,SAAW,CAClBg9I,EAAiB,GACnBF,IAGF,MAAMU,EAAW,MAAMH,IACvB,GAAGG,GAAU/1I,IAAM,eAAiB,CAAC+1I,EAASrB,KAAM,OAEpD,MAAMA,EAAO,MAAMppJ,EAAUG,SAASwqJ,qBAAqBC,iBAAiBH,EAASrB,KAAKvnH,EAAE,EACzFunH,GAAM10I,IAAM,aAEfq1I,EAAYX,EAAKt8B,kBAAkB,CACrC,CAAC,EAEM/sH,EAAM,CACf,CAAC,EAEDkN,GAAa,IAAM,CACjB,KAAKysB,OAAO,CAACtqB,EAAU,CAAE,CAC3B,CAAC,EAED,MAAMy7I,EAAgBA,IAAM,CAC1B1mH,GAAa2mH,eAAe/qJ,EAAM,CAAE,GAGtC,OAAA+iB,EACG4L,GAAI,KAACC,MAAI,QAAEvf,EAAU,CAAE,MAAAyf,UAAA,QAAA/L,EACrB6lI,GAAU,KACTC,UAAQ,QAAEA,EAAQ,CAAE,EACpB1B,iBAAkBnnJ,EAClB8oJ,OAAQgC,CAAa,KAI7B,CAEOzgI,SAAU,CACf,MAAMA,QAAO,EACb,KAAK3b,QAAO,CACd,CACF,qHC9FMs8I,GAAaA,CAAC/uI,EAAY,KAAQ,YAAWA,CAAU,GAEhDgvI,GAAYp7I,GAAyB,CAChD,KAAM,CAACq7I,EAAYC,CAAa,EAAIr8I,GAAa,EAAK,EAEhDs8I,EAAaA,IACdF,EAAY,EAASr7I,EAAMmG,IACvBnG,EAAMmG,IAAIgzE,MAAM,EAAG,EAAE,EAAE7iE,QAAQ,KAAM,GAAG,EAE3CklI,EAAoB9+I,GAAkB,CAC1CA,EAAE++I,gBAAe,EACjBH,EAAc,CAACD,EAAU,CAAE,GAGvBK,EAASA,CAAChsJ,EAAauT,IAA6B,CACxD41B,GAAoBnpC,CAAG,EACvBizB,GAAS,CACP1f,aACF,CAAC,GAGH,kBAAAoP,EAAAO,GAAA,EAAAD,EAAAN,EAAAS,WAAAD,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAAC,WAAA2M,EAAAuhE,EAAAxT,YAAA15B,EAAAnhC,EAAA66D,YAAA2uB,EAAAroD,EAAAhhC,WAAAkqF,EAAAb,EAAArpF,WAAAu0F,EAAArK,EAAAxvB,YAAA76D,SAAAwpD,QAMe,IAAMu/E,EAAO17I,EAAMpG,IAAK,4BAA4B,EAACmZ,EAAAJ,EAAAO,EAG7DosE,GAAO,CAACjmE,KAAI,0BAAe8hI,GAAW,WAAW,CAAC,IAAAtoI,CAAA,EAAAE,EAAAiuE,EAAA9tE,EAG9C4lI,GAAQ,KAACh4I,SAAO,QAAEd,EAAMc,OAAO,MAAAme,UAAA,QAC7Bjf,EAAMpG,GAAG,KAAAmZ,EAAA0M,EAAA,IAIX/qB,EAAK,4BAA4B,CAAC,EAAAqe,EAAAJ,EAAAO,EAGtCosE,GAAO,CAACjmE,KAAI,0BAAe8hI,GAAW,WAAW,CAAC,UAAArnG,EAAAqoB,QAI1C,IAAMu/E,EAAO17I,EAAMmG,IAAK,4BAA4B,EAAC4M,EAAA+gC,EAAA5gC,EAG7DosE,GAAO,CAACjmE,KAAI,0BAAe8hI,GAAW,WAAW,CAAC,IAAAh/C,CAAA,EAAAppF,EAAAiqF,EAAA9pF,EAM9C4lI,GAAQ,KAACh4I,SAAO,QAAEd,EAAMc,OAAO,MAAAme,UAAA,QAC7Bs8H,EAAU,CAAE,KAAAxoI,EAAAs0F,EAAA,IAId3yG,EAAK,4BAA4B,EAAC,MAAAqe,EAAAs0F,EAAAn0F,EAElCkpG,GAAa,KACZ/iG,MAAI,QAAEgiI,EAAU,EAAK,OAAS,MAAM,EACpC72H,QAASg3H,EAAgB,mBAClBL,GAAW,gBAAgB,CAAC,UAAApoI,EAAA+gC,EAAA5gC,EAIxCosE,GAAO,CAACjmE,KAAI,0BAAe8hI,GAAW,WAAW,CAAC,UAAApoI,EAAAV,EAAAa,EAGpD4L,GAAI,KAACC,MAAI,QAAE/e,EAAM27I,UAAU,MAAA18H,UAAA,OAAAqoF,EAAAh1F,GAAA,EAAA61F,EAAAb,EAAAx0F,WAAAs1F,EAAAD,EAAAr1F,WAAAqvG,UAAA7a,EAEftnG,UAAM47I,SAAQ,IAAA7oI,EAAAu0F,EAAAp0F,EAGtBosE,GAAO,CAACjmE,KAAI,iCAAsB8hI,GAAW,WAAW,CAAC,IAAAhzC,CAAA,EAAAp1F,EAAAq1F,EAAA,IAGrD1zG,EAAK,kCAAkC,CAAC,EAAA6d,GAAA6M,GAAA,OAAAC,EALtC3U,GAAWywI,GAAW,MAAM,EAAGA,GAAW,aAAa,CAAC,EAAC77H,EAGpD67H,GAAW,WAAW,EAAC57H,EACrB47H,GAAW,iBAAiB,EAAC97H,WAAAD,EAAAC,KAAAG,GAAA8nF,EAAAloF,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAA2oF,EAAA/oF,EAAAE,MAAA,EAAAC,IAAAH,EAAAG,MAAAC,GAAA4oF,EAAAhpF,EAAAG,MAAA,EAAAH,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,MAAA,GAAAkwF,CAAA,UAAA/0F,GAAA6M,GAAA,OAAAy8H,EAxDjC,CACd,CAACV,GAAY,GAAG,GAChB,CAACA,GAAW,WAAW,CAAC,EAAGn7I,EAAM87I,QAClC,EAAAC,EAGUZ,GAAW,MAAM,EAACa,EAGbb,GAAW,WAAW,EAACc,EACrBd,GAAW,gBAAgB,EAACe,EAK5Bf,GAAW,iBAAiB,EAACgB,EASpChB,GAAW,MAAM,EAACiB,EAGbjB,GAAW,WAAW,EAACkB,EACjB,CACd,CAAClB,GAAW,gBAAgB,CAAC,EAAG,GAChC,CAACA,GAAW,uBAAuB,CAAC,EAAG,CAACE,EAAW,CACpD,EAAAiB,EAKWnB,GAAW,iBAAiB,EAAC/7H,SAAAy8H,KAAAhkI,GAAAxF,EAAAwpI,EAAAz8H,EAAAy8H,IAAA,EAAAE,IAAA38H,EAAA28H,MAAAv8H,GAAA7M,EAAAyM,EAAA28H,MAAA,EAAAC,IAAA58H,EAAA48H,MAAAx8H,GAAA3M,EAAAuM,EAAA48H,MAAA,EAAAC,IAAA78H,EAAA68H,MAAAz8H,GAAAwhE,EAAA5hE,EAAA68H,MAAA,EAAAC,IAAA98H,EAAA88H,MAAA18H,GAAAC,EAAAL,EAAA88H,MAAA,EAAAC,IAAA/8H,EAAA+8H,MAAA38H,GAAAs0B,EAAA10B,EAAA+8H,MAAA,EAAAC,IAAAh9H,EAAAg9H,OAAA58H,GAAA28E,EAAA/8E,EAAAg9H,OAAA,EAAAh9H,EAAAi9H,MAAAxkI,GAAAmlF,EAAAq/C,EAAAj9H,EAAAi9H,KAAA,EAAAC,IAAAl9H,EAAAk9H,OAAA98H,GAAA6nF,EAAAjoF,EAAAk9H,OAAA,EAAAl9H,CAAA,GAAAy8H,KAAAzkI,OAAA2kI,KAAA3kI,OAAA4kI,KAAA5kI,OAAA6kI,KAAA7kI,OAAA8kI,KAAA9kI,OAAA+kI,KAAA/kI,OAAAglI,MAAAhlI,OAAAilI,MAAAjlI,OAAAklI,MAAAllI,MAAA,GAAA/E,CAAA,IA4BnD,EAAE8rD,GAAA,sEC7FIo+E,GAAUA,CAACnwI,EAAY,KAAQ,aAAYA,CAAU,GAQpD,MAAMowI,WAA6Bv8H,EAAa,CAOrD2hF,YAAqB5hG,EAA4B,CAC/C,MAAMu8I,GAAO,EAAI,CACft6C,gBAAiB,GACjBD,SAAU,GACVvxG,MAAO,GACPuvF,KAAM,EACR,CAAC,EAAE,KANgBhgF,QAQnB,KAAM,CAACs9B,QAAO,EAAGt9B,EAEbs9B,IACF,KAAKm/G,QAAUtwF,GAAiB,CAC9B5qC,QAAS,CAAC,CACRlI,KAAM,OACNqjI,YAAa,SACbrrC,OAAQ,GACR7sF,QAASA,IAAM,KAAKm4H,WAAW,CACjC,CAAC,EACDtwF,UAAW,aACb,CAAC,EACD,KAAKka,OAAOvgC,OAAO,KAAKy2G,OAAO,GAGjC,KAAKhsJ,MAAMu1C,OAAO1I,EAAS5oC,EAAK,gCAAgC,EAAIA,EAAK,wBAAwB,CAAC,EAIlG,KAAK0nB,QAAO,CACd,CAEQA,SAAU,CAChB,KAAKwgI,SAAW1/I,GAAY2B,GAAY,CACtC,KAAM,CAACjF,EAAKijJ,CAAM,EAAI59I,GAAa,EAAE,EAC/B,CAACkH,EAAK22I,CAAM,EAAI79I,GAAa,EAAE,EAC/B,CAAC6B,EAASi8I,CAAU,EAAI99I,GAAa,EAAI,EAE/C,KAAK+9I,YAAcD,EACnB,KAAKE,QAAUJ,EACf,KAAKK,QAAUJ,EAEf,MAAMK,EAAWrpI,GAAO,WAAAukF,EAAA,YAAAnlF,EACrBkqI,GAA2B,KAC1BxjJ,KAAG,QAAEA,EAAG,CAAE,MACVuM,KAAG,QAAEA,EAAG,CAAE,MACVrF,SAAO,QAAEA,EAAO,CAAE,MAClBw8B,QAAM,OAAE3e,EAAQ05E,EAAKr4F,MAAMs9B,MAAO,EAClC+/G,cAAeA,IAAMhlD,EAAKilD,eAAgB,EAC1CC,UAAWA,IAAMllD,EAAKskD,WAAW,CAAC,IAEnC,KAAK38D,IAAI,EAEZ,YAAKw9D,WAAU,EAER,IAAM,CACXX,EAAO,EAAE,EACTC,EAAO,EAAE,EACTC,EAAW,EAAK,EAChBI,IACAt+I,IAEJ,CAAC,CACH,CAEQ89I,YAAa,CACnB,KAAKK,YAAY,EAAI,EACrB,KAAKQ,WAAW,EAAI,CACtB,CAEQA,WAAWC,EAAS,GAAO,CACjC,KAAKltJ,SAASwqJ,qBAAqB2C,aAAa,KAAK19I,MAAM7P,OAAQstJ,CAAM,EAAErnI,KAAK,CAAC,CAACxc,MAAKuM,KAAG,IAAM,CAC9F,KAAK82I,QAAQrjJ,CAAG,EAChB,KAAKsjJ,QAAQ/2I,CAAG,EAChB,KAAK62I,YAAY,EAAK,CACxB,CAAC,EAAEW,MAAM,IAAM,CACbh7H,GAAS,CACP1f,YAAa,eACf,CAAC,EACD,KAAK26I,UAAS,CAChB,CAAC,CACH,CAEQN,gBAAiB,CAEvB,GADA,KAAKM,UAAS,EACX,KAAK59I,MAAMs9B,OAAQ,CACpB,KAAKt9B,MAAM69I,cACX,MACF,CACA,MAAMlnJ,EAAS,KAAKqJ,MAAM7P,OAAOumG,SAAQ,EACzC,KAAKnmG,SAASwqJ,qBAAqB+C,gBAAgBnnJ,EAAQygB,OAAWA,OAAW,EAAI,EAAEhB,KAAK,IAAM,CAChGyjI,GAAoBkE,SAASpnJ,CAAM,CACrC,CAAC,CACH,CAEA+xB,SAAU,CACR,MAAMA,QAAO,EACb,KAAKk0H,SAAQ,CACf,CACF,CAWA,MAAMQ,GAA+Bp9I,IACnC,WAAAqS,EAAA8M,GAAA,EAAAxM,EAAAN,EAAAS,WAAAC,SAAAJ,EAAA,IAGOje,EAAK,8BAA8B,CAAC,EAAAqe,EAAAV,EAAAa,EAGtCkoI,GAAQ,KACPj1I,KAAG,QAAEnG,EAAMmG,GAAG,MACdvM,KAAG,QAAEoG,EAAMpG,GAAG,MACdkH,SAAO,QAAEd,EAAMc,OAAO,MACtB66I,YAAU,QAAE37I,EAAMs9B,MAAM,MACxBs+G,UAAQ,QAAE57I,EAAMu9I,SAAS,UAAAxqI,EAAAV,EAAAa,EAG1B4L,GAAI,KAACC,MAAI,OAAE,CAAC/e,EAAMs9B,MAAM,MAAAre,UAAA,OAAApM,EAAAP,KAAAS,SAAAF,EAAA,IAEpBne,EAAK,uBAAuB,CAAC,EAAA6d,GAAA,IAAAiN,GAAA3M,EADpB0pI,GAAQ,OAAO,CAAC,GAAA1pI,CAAA,UAAAE,EAAAV,EAAAa,EAK7Bq2F,GAAM,KAAAtqF,UAAA,OAAA+hE,EAAApuE,KAAAuvG,UAAAnhC,EACYhhF,UAAMq9I,cAAa,IAAAtqI,EAAAiuE,GAAA,WAAAhuE,EAAAC,EAMjCjT,QAAMs9B,MAAM,QAAZtqB,MAAA,EAAete,EAAK,gCAAgC,EAAIA,EAAK,iCAAiC,CAAC,MAAA6d,GAAAqF,GAAAC,GAAAmpE,EALrF,CACT,CAACu7D,GAAQ,SAAS,CAAC,EAAG,GACtB,CAACA,GAAQ,gBAAgB,CAAC,EAAGv8I,EAAMs9B,MACrC,EAAC1lB,CAAA,GAAAopE,CAAA,UAAAzuE,GAAA6M,GAAA,OAAAC,EAxBKk9H,GAAQ,UAAU,EAACj9H,EACjBi9H,GAAQ,OAAO,EAACl9H,WAAAD,EAAAC,KAAAG,GAAAnN,EAAA+M,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAA7M,EAAAyM,EAAAE,MAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA/E,CAAA,KA8BhC8rD,GAAA,WCrJF,MAAqB6/E,EAAwB,CAI3C,YAAoB9tJ,EAA8B,GAAI,CAAlC,aAAAA,EAHZ,mBAAyC,IAI/CA,EAAQ,WAARA,EAAQ,SAAa,EACvB,CAEO,YAAY+hC,EAAgBgsH,EAAoB,CASrD,GAJGA,EAAW,SACCA,EAAA,KAAK,kBAAkBA,CAAU,GAG7C,CAACA,EACG,sBAAU,OAAOhsH,CAAE,EACjB,GAGJ,eAAU,IAAIA,EAAIgsH,CAAU,CAenC,CAEO,iBAAiBhsH,EAAgBgsH,EAAsB,CAC5D,OAAO,KAAK,YAAYhsH,EAAIgsH,EAAW,KAAK,GAAG,CAAC,CAClD,CAEQ,QACNh3I,EACAi3I,EAAaj3I,EAAM,MAAM,GAAG,EAAE,OAAQkhI,GAASA,EAAK,MAAM,EAC1DgW,EAAW,KAAK,QAAQ,SACxB,CACA,MAAMC,EAA6H,GAC7HC,EAAY,KAAK,UACjBC,EAAmBJ,EAAW,OAC1B,OAAAG,EAAA,QAAQ,CAACE,EAAU56I,IAAS,CACpC,IAAIJ,EAAQ,GACRi7I,EAAa,EAEjB,QAAQ3qJ,EAAI,EAAGA,EAAIyqJ,EAAkB,EAAEzqJ,EAAG,CAClC,MAAAs0I,EAAO+V,EAAWrqJ,CAAC,EACnBJ,EAAM8qJ,EAAS,QAAQpW,CAAI,EAC3BsW,EAAa5qJ,IAAOyqJ,EAAmB,EAC7C,GACE7qJ,IAAQ,IACP,KAAK,QAAQ,WAAa,CAACgrJ,GAAcF,EAAS9qJ,EAAM00I,EAAK,MAAM,IAAM,KACzE10I,IAAQ,GAAK8qJ,EAAS9qJ,EAAM,CAAC,IAAM,IACpC,CACQ8P,EAAA,GACR,KACF,CAEAi7I,GAAcrW,EAAK,MAMrB,CAEA,GAAG5kI,EAAO,CACRi7I,GAAcF,EAAmB,EACjC,MAAMI,EAAiBH,EAAS,QAC7BJ,GAAYK,GAAcE,GAAkBF,IAC7CJ,EAAa,KAAK,CAAC,SAAAG,EAAU,eAAAG,EAAkC,KAAA/6I,EAAM,WAAA66I,EAAW,CAEpF,EACD,EAEMJ,CACT,CAEO,OAAOn3I,EAAek3I,EAAmB,CACtCl3I,EAAA,KAAK,kBAAkBA,CAAK,EAG9B,MAAAymB,EADUzmB,EAAM,MAAM,GAAM,EACV,IAAKA,GAAU,KAAK,QAAQA,EAAO,OAAWk3I,CAAQ,CAAC,EACzEC,EAAe96H,GAAQoK,CAAO,EAEvB,OAAA0wH,EAAA,KAAK,CAACvlJ,EAAGwsB,IAAM,CACpB,MAAAs5H,EAAa9lJ,EAAE,eAAiBA,EAAE,WAClC+lJ,EAAav5H,EAAE,eAAiBA,EAAE,WACxC,OAAOs5H,EAAaC,GAAc/lJ,EAAE,eAAiBwsB,EAAE,eACxD,EAEsC,IAAI,IAAI+4H,EAAa,IAAK5qJ,GAAMA,EAAE,IAAI,CAAC,CAEhF,CAEO,kBAAkByT,EAAe,CACtC,OAAO,KAAK,QAAU6iF,GAAkB7iF,EAAO,KAAK,OAAO,EAAIA,CACjE,CACF,CC/HA,MAAM43I,GAAY,CAChB,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,MAAM,EACb,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,iBAAiB,EACxB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,QAAQ,EACf,CAAC,MAAO,SAAS,EACjB,CAAC,QAAS,MAAM,EAChB,CAAC,KAAM,IAAI,EACX,CAAC,QAAS,MAAM,EAChB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,gBAAgB,EACvB,CAAC,KAAM,OAAO,EACd,CAAC,MAAO,gBAAgB,EACxB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,QAAQ,EACf,CAAC,MAAO,OAAO,EACf,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,MAAM,EACb,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,KAAK,EACZ,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,aAAa,EACpB,CAAC,KAAM,KAAK,EACZ,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,KAAK,EACZ,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,gBAAgB,EACvB,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,eAAe,EACtB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,KAAK,EACZ,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,MAAM,EACb,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,mBAAoB,EAC3B,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,MAAM,EACb,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,aAAa,EACpB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,WAAW,EAClB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,OAAO,EACd,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,KAAK,EACZ,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,MAAM,EACb,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,YAAY,EACnB,CAAC,KAAM,SAAS,EAChB,CAAC,KAAM,UAAU,EACjB,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,QAAQ,EACf,CAAC,KAAM,SAAS,CAClB,iDCpFO,SAASC,GACdC,EACAl3G,EACwF,CACxF,MAAMjrC,EAAWC,KAEXgN,EAAQ,IAAIm0I,GAAY,CAACgB,WAAY,EAAI,CAAC,EAC1CrmI,EAAqC,IAAIrF,IAC/CurI,GAAUjoI,QAAQ,CAAC,CAACuhC,EAAM5tB,CAAI,IAAM,CAClC,MAAM00H,EAAaruJ,GAAKg7F,OAAQ,YAAWzzC,CAAK,GAAG,EAAI,EACvDx/B,EAAIzX,IAAIi3C,EAAM,CAAC5tB,EAAM00H,CAAU,CAAC,EAChCp1I,EAAMq1I,iBAAiB/mG,EAAM,CAACA,EAAM5tB,EAAM00H,CAAU,CAAC,CACvD,CAAC,EAED,MAAMtiH,EAAQ1c,GAAainF,YACzBx+D,GACA,CACE9nB,SAAU,CAAC,QAAQ,EACnBuvF,kBAAoBC,GAAU,CAC5BA,EAAMx5F,QAASuhC,GAAS,CACtB,KAAM,CAAC5tB,EAAM00H,CAAU,EAAItmI,EAAI/E,IAAIukC,CAAqB,EAClD1tB,EAAM,IAAI5B,GAAI,CAClBp4B,MAAOwuJ,EACPl2H,SAAUwB,EACVkE,UAAW,GACXxF,YAAa81H,CACf,CAAC,EAEEA,GACDt0H,EAAIx4B,UAAU+zC,OAAOrJ,EAAMmU,SAAStwB,SAASmc,EAAMmU,SAASjJ,SAASxpB,IAAI85B,CAAI,CAAC,CAAC,EAEjF1tB,EAAIx4B,UAAUgsB,QAAQ9tB,OAAS,GAAKgoD,EACpCxb,EAAMmU,SAASrc,KAAKuR,OAAOvb,EAAIx4B,SAAS,CAC1C,CAAC,CACF,EACDutC,YAAa,SACbgxE,cAAe,MAAMvnE,IAEZ,CACL/2C,OAFe+2C,EAAI,CAAC,GAAGp/B,EAAMw7G,OAAOp8E,CAAC,CAAC,EAAI41G,GAAUlmI,IAAI,CAAC,CAACw/B,CAAI,IAAMA,CAAI,EAGxEvQ,MAAO,KAGX/mB,SAAWk+H,EAAiD3nI,OAAzCxa,EAASiY,QAAQ86F,KAAK/yG,CAAQ,EACjDuxG,cAAe4wC,EAAQniJ,EAASiY,QAAQ86F,KAAK/yG,CAAQ,EAAWwa,OAChEsmB,aAAcqhH,EAAQ,kCAAoC3nI,OAC1Ds5F,aAAc,OACdC,cAAe,EACjB,CACF,EAMA,GAJAh0E,EAAM1oB,iBAAiB,QAAS,IAAM,CACpCrX,EAASy8B,OAAM,CACjB,CAAC,EAEEwO,EAAU,CACX,MAAM65D,EAAO/kE,EAAMmU,SAASh6B,IAAI64F,KAAKhzE,EAAMmU,QAAQ,EACnDnU,EAAMmU,SAASh6B,IAAM,CAAC,CAAC3Q,MAAKiiC,QAAM,IACpBs5D,EAAK,CACfv7F,IAAKA,EACL1V,MAAOiE,EAAM,YAAWyR,CAA+B,EAAC,EACxDiiC,SAEAL,aAAc,OAChB,CAAC,EAIHpL,EAAMmU,SAASggE,WAAWjpE,CAAQ,CACpC,CAEA,OAAOjrC,CACT,CAEe,MAAMuiJ,WAAwBhd,EAAgB,CAK3DvgC,YAAsB4gC,EAA8BjrG,EAAsBhnC,EAAuB,CAC/F,MAAM,CACJiyI,SACAjrG,OACApS,eAAgBq9G,EAAOr9G,eACvB/Y,UAAW,cACX8tI,SAAU,GACVzjI,OAAQ,EACV,CAAC,EAAE,KARiB+rH,SAAkB,KAAYjrG,OAAU,KAAYhnC,WAUxE,CAAC,KAAKJ,OAAQ,KAAK6pJ,SAAS,EAAI/6I,GAAqBrI,EAAY,EACjE,KAAKiI,QAAUiV,GAAO,IAAM,KAAK2U,OAAQ,KAAKx2B,SAAS,CACzD,CAEQw2B,MAAO,CACb,KAAM,CAACt4B,QAAO,EAAG,KAEX0D,EAAI,IAAIjD,GAAKwuJ,YAAY,CAC7Bj5I,IAAK,wBACP,CAAC,EAEKk5I,EAAkB/iJ,EAAW,IAAMqD,GAAmBxP,EAAM,CAAE,CAAC,EAC/DoP,EAAYJ,KAElB9B,GAAa,IAAM,CACjBxJ,EAAEyrJ,iBAAiB,CAACt9I,KAAM,CACxBtN,EAAM,YAAW2qJ,EAAe,EAAG//I,aAAY,CAAG,EAAC,CAAC,CACrD,CAAC,CACJ,CAAC,EAEDjC,GAAa,IAAM,CACjB,KAAKysB,OAAO,CAACu1H,EAAe,EAAG7/I,WAAY,EAC7C,CAAC,EAED,MAAM2lB,EAAiB,IAAImD,GAC3BxpB,GAAU,IAAMqmB,EAAeygF,UAAS,CAAE,EAC1C,MAAM3gF,EAAOknC,GAAiB,CAC5BE,UAAW,cACX9qC,QAAS,CAAC,CACRlI,KAAM,oBACNriB,KAAM,yBACNwtB,QAAS,SAAW,CAClB,MAAM2zB,EAAO,MAAM2mG,GAAa,EAAK,EACrCO,EAAiB,EAACE,YAAYpnG,CAAI,CACnC,EACDuK,OAAQnjD,CACV,EAAG,CACD8Z,KAAM,OACNwL,YAAahxB,EAAE8Q,QACf6f,QAASA,IAAM,CACb,KAAM,CAAC1f,EAAGzF,CAAW,EAAIjC,GAAW,EACpCiC,EAAY,eAAgB,iBAAmBtF,GAAQ,CAAC,GAAGA,EAAKslJ,EAAiB,EAAC//I,aAAc,EAAC,CAClG,EACDojD,OAAQnjD,EACRigJ,cAAe,EACjB,EAAG,CACDnmI,KAAM,aACNriB,KAAM,OACNwtB,QAASA,IAAM,CACb,KAAKj0B,SAASkvJ,uBAAuBC,uBAAuBvvJ,EAAM,EAAI,EAAI,CAC5E,CACF,CAAC,EACDg1B,gBACF,CAAC,EACDF,SAAK5O,UAAUS,IAAI,0BAA2B,SAAS,EACvD,aAAAzE,EAAAC,KAAAD,SAAA8pD,QAIe,IAAM,CACb,GAAG,CAAC58D,EAAS,EAAI,CACfonC,GAAakmB,KAAK,CAAC8yF,QAAS,cAAc,CAAC,EAC3C,MACF,CAEA,MAAMp/I,EAAc8+I,IACpB9+I,EAAYupB,OAAO,CAACvpB,EAAYb,QAAS,IAC1CqT,EAAAV,EAEAjhB,OAAK,oBAAqB,gCAAgC,EAAC,MAAA2hB,EAAAV,GAAA,WAAAW,EAAAC,EAC3DosI,QAAiB,EAAC3/I,QAAO,CAAE,QAA3BsT,MAAA,EACCte,EAAK,oBAAoB,EACzBA,EAAK,oBAAqB,CAACA,EAAM,YAAW2qJ,EAAiB,EAACO,SAAQ,CAAG,EAAC,CAAC,CAAC,CAAC,WAAAvtI,CAAA,KAGhF4S,CAAI,CAGX,CAEOzK,SAAU,CACf,MAAMA,QAAO,EACb,KAAK3b,QAAO,CACd,CACF,CAACs/D,GAAA,WCnID,MAAM0hF,GAAyB,GAE/B,MAAqBC,EAAW,CAuC9B,YACUvoH,EACD2uC,EACC31E,EACR,CAHQ,UAAAgnC,EACD,qBAAA2uC,EACC,cAAA31E,EA+MF,mBAAiBmM,GAAc,CACrC,MAAMoxD,EAAa,CAAC,CAACpxD,GAAK,CAAC,EAAE,KAAK,SAAW,KAAK,QAAQ,UAAU,SAAS,WAAW,GAExFA,GAAKqQ,GAAYrQ,CAAC,GAER,SAAW,CACb,MAAA6kB,EAAU,KAAK,gBAAgB,OAAOusC,EAAa,KAAK,YAAqB,EAAE,GACrE,MAAM,QAAQ,IAAIvsC,EAAQ,IAAI,MAAMjB,IAC3C,CACL,OAAQ,MAAMA,EAAO,OAAO,EAC5B,OAAAA,CAAA,EAEH,CAAC,GAEM,QAAQ,CAAC,CAAC,OAAAA,EAAQ,OAAApuB,KAAY,CACpCouB,EAAO,QAAQ,UAAU,OAAO,OAAQ,CAACpuB,CAAM,EAChD,KAGD,EAGI,2BAAwB,MAAMsiB,GAAwD,CAC5F,GAAG,CAACsjG,IAA2B,KAAK,OAAO,OAAO,GAAK,KAAK,KAAK,OAAS3qC,GAAS,MAAQ,KAAK,KAAK,SAAiB,SAEtH,MAAM0nE,EAAmBE,GAAqB,UACxCp+I,EAAS,KAAK,OAAO,SAAS,EAKpC,GAJGk+I,GAAkB,SAAWl+I,GAI7B6d,IACIA,IAAS,SAAW,MAAM,KAAK,SAAS,gBAAgB,YAAY,KAAK,MAAM,GAChFA,IAAS,aAAe,MAAM,KAAK,SAAS,gBAAgB,WAAW,KAAK,MAAM,GAC7E,SAIL,MAAA+iB,EAAO5mC,GAAgB,QAAQgG,CAAM,EACxC,GAAAyqC,GAAU7J,EAAM,aAAa,GAC3B/iB,IAAS,QAAgB,OAAE+iB,EAAqB,QAAQ,YAE1D,IAAEA,EAAqB,QAAQ,YAAoB,SAEtD,MAAMsjH,EAAW,MAAM,KAAK,SAAS,kBAAkB,YAAYlkJ,CAAM,EACnE87I,EAAY,MAAM,KAAK,SAAS,qBAAqB,iBAAiBoI,EAAS,KAAK,EAAE,EAC5F,OAAGpI,GAAW,IAAM,YAAoB,GAEjC,CAACA,EAAU,OAAO,aAGnB,sBAAmB,MAAMj+H,GAAoB,CAChD,IAAC+uG,IAAqB,CAAC,KAAK,OAAO,UAAY,KAAK,KAAK,OAASp2C,GAAS,KAAa,SACrF,MAAAz2E,EAAS,KAAK,OAAO,SAAS,EAC9B2nC,EAAW,MAAM,KAAK,SAAS,kBAAkB,kBAAkB3nC,CAAM,EAExE,OAAC,CAAC2nC,GAAY,CAAC,EAAE7pB,IAAS,QAAU6pB,EAAS,OAAO,sBAAwBA,EAAS,OAAO,wBAkSrG,KAAQ,qBAAuB,IAAM,CACnC,KAAK,KAAK,aAAa,cAAc,KAAK,MAAM,GA4J3C,iBAAc,MAAM/d,GAAwB,CACjD,MAAMxuB,EAAa,KAAK,KAAK,QAAQ,cAAc,EAC5CwuB,EAAA,aAAa,WAAY,MAAM,EAEhC,MAAA3pB,EAAS,KAAK,OAAO,SAAS,EAChC,IAAAmF,EACD,MAAM,KAAK,SAAS,gBAAgB,UAAUnF,CAAM,EACrDmF,EAAU,KAAK,SAAS,gBAAgB,YAAYnF,CAAM,EAE1DmF,EAAU,KAAK,SAAS,gBAAgB,YAAYnF,EAAQvG,EAAU,IAAI,EAGpE0L,EAAA,MAAOwF,GAAQ,CAErB,OAAOA,EAAI,KAAM,CACf,IAAK,sBAAuB,CACjBqhB,GAAA,CAAC,YAAa,4BAA4B,EACnD,MACF,CACF,CAEM,MAAArhB,CAAA,CACP,EAAE,QAAQ,IAAM,CACXxP,KAIJwuB,EAAO,gBAAgB,UAAU,EAClC,GAGH,KAAQ,YAAc,IAAM,CACbL,GAAA,YAAY2K,GAAW,KAAK,MAAM,GAGjD,KAAQ,cAAgB,IAAM,CACvB,cAAS,mBAAmB,eAAe,CAAC,OAAQ,KAAK,OAAQ,SAAU,KAAK,KAAK,QAAS,IAGrG,KAAQ,SAAW,IAAM,CACvB,KAAK,cAAc,EAAI,EACvB,KAAK,YAAY,GAGX,oBAAiB,CAACpM,EAAkBi3B,IAAmB,CACvD,MAAA6sF,EAAa7sF,IAAO4a,GAAW,QAAUwvF,GAE1C,oBAAiB,KAAK,cAAc,uBAAuB,UAAU,UAAU,OAAO,cAAevd,CAAU,EACpH,KAAK,SAAS,GAyST,mBAAgB,CAACyd,EAAS,KAAU,CAEtC,KAAK,aAAoB,4BAAqB,KAAK,WAAW,EAE9DhqG,IAAagqG,GACT,eAAU,UAAU,IAAI,MAAM,EAGhC,iBAAc,OAAO,sBAAsB,IAAM,CACjDhqG,IAAagqG,GACT,eAAU,UAAU,OAAO,MAAM,EAGlC,MAAAvpI,EAAmC,KAAK,UAAU,wBAAwB,MAC3E,UAAK,IAAI,eAAgBA,CAAK,EACnC,KAAK,UAAU,MAAM,YAAY,gBAAiBA,EAAQ,IAAI,EAE9D,KAAK,YAAc,EACpB,GAGH,KAAO,YAAc,IAAM,CACzB,MAAMmhD,EAAa,CACjB,GAAI,KAAK,kBAAoB,CAAC,EAC9B,KAAK,eAAe,wBACpB,OAAO,OAAO,EACZ,IAAAvwC,EAAM,GAAI44H,EAAiB,EAC/B,MAAM1wH,EAAQqoC,EAAW,OAAO,CAAC1sD,EAAKhZ,IAAc,CAC5C,MAAAqwI,EAAarwI,EAAU,aAG1B,OAFH,KAAK,UAAU,UAAU,OAAO,aAAaA,EAAU,SAAS,YAAaqwI,CAAU,EAEnFrwI,EAAU,aAIXqwI,GACD0d,GAAkB/tJ,EAAU,OAClBA,EAAA,UAAU,MAAM,IAAMm1B,EAAM,KACtCA,GAAOn1B,EAAU,QAEPA,EAAA,UAAU,MAAM,IAAM,GAG3BgZ,GAAM,CAACq3H,GAXLr3H,GAYR,CAAC,EACC,eAAU,QAAQ,SAAW,GAAKqkB,EACvC,KAAK,UAAU,MAAM,YAAY,2BAA4B,QAAQ0wH,CAAc,yCAAyC,GA3kCvH,oBAAiB,IAAI13H,GAE1B,KAAK,YAAc,GACnB,KAAK,gBAAkB,EACzB,CAEO,WAAY,CAGZ,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,iBAAkB,SAAU,MAAM,EAC1D,eAAU,QAAQ,SAAW,IAElC,KAAK,QAAUoJ,GAAW,4BAA6B,CAAC,SAAU,GAAK,EACvE,KAAK,aAAeo+D,GAAY,OAAQ,GAAI,SAAS,EAChD,kBAAa,UAAU,IAAI,mBAAmB,EAC9C,aAAQ,OAAO,KAAK,YAAY,EAGhC,uBAAoB,SAAS,cAAc,KAAK,EAChD,uBAAkB,UAAU,IAAI,qBAAqB,EAErD,cAAW,SAAS,cAAc,KAAK,EACvC,cAAS,UAAU,IAAI,WAAW,EAEvC,MAAMmwD,EAAS,KAAK,OAAS,SAAS,cAAc,KAAK,EAClDA,EAAA,UAAU,IAAI,QAAQ,EAEvB,MAAA5nJ,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EAEzB,MAAA+uB,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,KAAK,EAElB,WAAQ,SAAS,cAAc,KAAK,EACpC,WAAM,UAAU,IAAI,YAAY,EAEjCA,EAAA,OAAO,KAAK,KAAK,EAEf,MAAAy5D,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,QAAQ,EAE1B,KAAK,UACCA,EAAA,OAAO,KAAK,QAAQ,EAGrBxoF,EAAA,OAAO+uB,EAAKy5D,CAAM,EAE1Bo/D,EAAO,OAAO5nJ,CAAO,EAChB,cAAS,OAAO4nJ,CAAM,EAGtB,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,YAAY,EAEzC,KAAK,UAAY,IAAI1d,GAAU,KAAM,KAAK,KAAM,KAAK,QAAQ,EAC7D,KAAK,aAAe,IAAI8T,GAAa,KAAM,KAAK,KAAM,KAAK,QAAQ,EACnE,KAAK,YAAc,IAAIO,GAAY,KAAM,KAAK,KAAM,KAAK,QAAQ,EAC9DsJ,KAA0B,KAAK,SAAW,IAAIjG,GAAS,KAAM,KAAK,KAAM,KAAK,QAAQ,GACxF,KAAK,gBAAkB,IAAIkF,GAAgB,KAAM,KAAK,KAAM,KAAK,QAAQ,EAEtE,KAAK,YAAY,SAClB,KAAK,QAAUhzF,GAAiB,CAC9B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,KAAK,YACd,OAAQ,MAAMzvD,EAAGiI,IAAY,CAC3B,MAAMw7I,EAAe,KAAK,YAAY,KAAK,YAAY,OAAS,CAAC,EACjE,GAAGA,GAAc,QAAS,CACxB,MAAMC,EAAmB,MAAM,KAAK,SAAS,gBAAgB,oBAAoB,KAAK,MAAM,EAC5FD,EAAa,QAAQ,UAAU,YAAYzrJ,EAAK0rJ,CAAgB,CAAC,CACnE,CACF,EACD,GAGE,eAAU,OAAO,GAAG,CAGvB,KAAK,QACL,KAAK,UACL,KAAK,QACL,KAAK,aACL,KAAK,iBACL,KAAK,QACL,KAAK,UACL,KAAK,SACL,OAAO,OAAO,CAAC,EAEZ,wBAAmB,KAAK,QAAS,KAAK,iBAAiB,KAAK,KAAM,OAAO,CAAC,EAC1E,wBAAmB,KAAK,aAAc,KAAK,sBAAsB,KAAK,KAAM,UAAU,CAAC,EACvF,wBAAmB,KAAK,iBAAkB,KAAK,sBAAsB,KAAK,KAAM,OAAO,CAAC,EAE7F,KAAK,kBAAkB,OAAO,KAAK,QAAS,KAAK,SAAU,KAAK,SAAS,EACpE,eAAU,OAAO,KAAK,iBAAiB,EAEzC,KAAK,eACD,yBAAoB,KAAK,aAAa,EAGvC,MAAAC,EAAmB,KAAK,iBAAmB,CAC/C,KAAK,UACL,KAAK,aACL,KAAK,YACL,KAAK,SACL,KAAK,iBACL,OAAO,OAAO,EACX,eAAU,OAAO,GAAGA,EAAiB,IAAKC,GAAoBA,EAAgB,SAAS,CAAC,EAM7F,KAAK,eAAe,IAAI,MAAM,EAAE,SAAU,KAAK,QAAQ,EACvD,KAAK,eAAe,IAAIzuJ,EAAU,EAAE,eAAgB,KAAK,cAAc,EAEtDmb,EAAA,KAAK,UAAYtQ,GAAM,CACtC,GACEgZ,EAAgBhZ,EAAE,OAAQ,yBAAyB,GACnD,CAAEA,EAAE,OAAuB,aAC3BgZ,EAAgBhZ,EAAE,OAAQ,oBAAoB,GAC9CgZ,EAAgBhZ,EAAE,OAAQ,iBAAiB,EAE3C,OAGF,MAAMzK,EAAYyjB,EAAgBhZ,EAAE,OAAQ,kBAAkB,EAE9D,GADkB+mE,KACfxxE,EAAW,CAGT,GAFH8a,GAAYrQ,CAAC,EAEVgZ,EAAgBhZ,EAAE,OAAQ,eAAe,GAAKgZ,EAAgBhZ,EAAE,OAAQ,gCAAgC,EACzG,OAGI,MAAAoB,EAAM,CAAC7L,EAAU,QAAQ,IAC/B,GAAGA,EAAU,UAAU,SAAS,gBAAgB,EAEzC,mBAAc,oBAAoB6L,CAAG,UAElC7L,EAAU,QAAQ,OAAQ,CAClC,MAAM9B,EAAS8B,EAAU,QAAQ,OAAO,SAAS,EAC3Cg8B,EAAgBw2B,GAA2B,mBAC5C,UAAK,aAAa,aAAa,CAClC,OAAAt0D,EACA,UAAW2N,EACX,KAAMmwB,EAAc,YAAck/C,GAAS,UAAY,OACvD,SAAUl/C,EAAc,SACzB,CACH,MACK,CACC,MAAApa,EAAS2B,GAAa9Y,EAAE,MAAM,EACjC,GAAA7K,GAAW,eAAiBw+D,GAAW,QAAU,SAAS,KAAK,UAAU,SAASkwF,EAA4B,EAChGC,YACP3sI,EAAQ,CAChB,GAAGA,EAAO,UAAU,SAAS,aAAa,EACxC,OAGG,qBAAgB,cAAc,CAAC,SAAS,KAAK,UAAU,SAAS4sI,EAA6B,CAAC,OAE9F,qBAAgB,cAAc,EAAI,CAE3C,CACC,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAAD,EAAkB9jJ,GAAc,CAKpC,GAJGA,GACDqQ,GAAYrQ,CAAC,EAGZ,KAAK,KAAK,OAASywE,GAAS,OAAQ,CACrC,KAAK,KAAK,cACV,MACF,CAIG,GAAAt7E,GAAW,eAAiBw+D,GAAW,QAAU,SAAS,KAAK,UAAU,SAASkwF,EAA4B,EAC/G,KAAK,KAAK,aAAa,QAAQ,CAAC,OAAQ,KAAK,OAAO,MAC/C,CACC,MAAAG,EAAc,KAAK,KAAK,aAAa,MAAM,QAAQ,KAAK,IAAI,IAAM,EAChDz+H,GAAA,KAAKy+H,EAAc,KAAO,MAAM,CAS1D,GAGF1zI,EAAiB,KAAK,QAASwzI,EAAgB,CAAC,eAAgB,KAAK,eAAe,CACtF,CAEQ,mBAAmB77I,EAAsB+9C,EAAkC,CAC7E/9C,GAIJ,KAAK,gBAAgB,KAAK,CAAC,QAAAA,EAAS,OAAA+9C,CAAO,EAC7C,CA6DO,gBAAiB,CACtB,KAAK,YAAc,CAAC,CAClB,KAAM,SACN,KAAM,SACN,QAAS,IAAM,CACb,KAAK,KAAK,YACZ,EACA,OAAQ,IAAM7wD,GAAW,QAC3B,EAKK,CACH,KAAM,OACN,KAAM,wBACN,QAAS,KAAK,YACd,OAAQ,SAAW,KAAK,KAAK,OAASs7E,GAAS,MAAQ/8E,EAAU,OAAS,KAAK,QAAU,CAAE,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAQ,YAAa,GAAO,SAAU,KAAK,KAAK,SAAS,CACjO,EAAG,CACD,KAAM,SACN,KAAM,0BACN,QAAS,KAAK,cACd,OAAQ,IAAM,KAAK,KAAK,OAAS+8E,GAAS,MAAQ/8E,EAAU,OAAS,KAAK,QAAU,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAQ,YAAa,GAAO,SAAU,KAAK,KAAK,SAAS,CACpN,EAAG,CACD,KAAM,WACN,KAAM,iBACN,QAAS,IAAM,CACb,MAAM0B,EAAa,KAAK,KAAK,QAAQ,cAAc,EACnD,QAAQ,QAAQ,KAAK,SAAS,kBAAkB,eAAe,KAAK,OAAO,SAAU,EAAC,EAAE,KAAM8/C,GAAgB,CACzG9/C,EAAA,GAAgB8/C,EAAY,gBACxB,UAAK,aAAa,aAAa,CAClC,OAAQA,EAAY,eAAe,SAAS,EAAI,EACjD,CACH,CACD,CACH,EACA,OAAQ,SAAW,CACX,MAAAva,EAAW,MAAM,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,OAAO,UAAU,EAC/F,OAAO,KAAK,KAAK,OAAS81C,GAAS,MAAQ,CAAC,CAAE91C,GAAmC,cACnF,CACF,EAAG,CACD,KAAM,QACN,KAAM,OACN,QAAS,KAAK,YAAY,KAAK,KAAM,OAAO,EAC5C,OAAQ,KAAK,iBAAiB,KAAK,KAAM,OAAO,CAClD,EAAG,CACD,KAAM,cACN,KAAM,YACN,QAAS,KAAK,YAAY,KAAK,KAAM,OAAO,EAC5C,OAAQ,KAAK,iBAAiB,KAAK,KAAM,OAAO,CAClD,EAAG,CACD,KAAM,YACN,KAAM,6BACN,QAAS,KAAK,qBACd,OAAQ,KAAK,sBAAsB,KAAK,KAAM,WAAW,CAC3D,EAAG,CACD,KAAM,YACN,KAAM,4BACN,QAAS,KAAK,qBACd,OAAQ,KAAK,sBAAsB,KAAK,KAAM,OAAO,CACvD,EAAG,CACD,KAAM,SACN,KAAM,oBACN,QAAS,IAAM,CACb,KAAK,KAAK,aAAa,qBAAqB,KAAK,OAAQ,EAAK,CAChE,EACA,OAAQ,SAAW,CACjB,MAAM0K,EAAS,MAAM,KAAK,SAAS,mBAAmB,cAAc,KAAK,MAAM,EAC/E,MAAO,CAAC,EAAEA,GAAWA,EAAyB,OAAO,uBACvD,CACF,EAAG,CACD,KAAM,SACN,KAAM,mBACN,QAAS,IAAM,CACb,KAAK,KAAK,aAAa,qBAAqB,KAAK,OAAQ,EAAK,CAChE,EACA,OAAQ,IAAM,KAAK,SAAW3xC,EAAU,MAAQ,CAAC,KAAK,KAAK,UAAY,CAAC+M,GAAS,SAAS,YAC5F,EAAG,CACD,KAAM,SACN,KAAM,2BACN,QAAS,IAAM,CACP,MAAAw7B,EAAY,KAAK,KAAK,UAClBA,EAAA,gBAAgB,GAAM,EAAI,EACpChoC,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACzC,GAAGA,EAAM,4BACP,OAGF,MAAMwkB,EAAWoY,EAAU,gBAAgB,KAAKA,CAAS,EAC/CA,EAAA,gBAAkB,MAAM2c,GAAW,CAC3C,KAAK,SAAS,gBAAgB,YAAY,8BAA+B,EAAI,EACvE7yB,GAAA/tB,EAAK,gBAAgB,CAAC,EAE5BikC,EAAU,gBAAkBpY,EAC5BoY,EAAU,gBAAgB2c,CAAM,EAClC,CACD,CACH,EACA,OAAQ,IAAM,CAAC,KAAK,KAAK,UAAU,aAAe,CAAC,CAAC,KAAK,KAAK,QAAQ,kBAAkB,CAC1F,EAAG,CACD,KAAM,SACN,KAAM,2BACN,QAAS,IAAM,CACR,UAAK,UAAU,iBACtB,EACA,OAAQ,IAAM,KAAK,KAAK,UAAU,WACpC,EAAG,CACD,KAAM,UACN,KAAM,aACN,QAAS,IAAM,CACb,KAAK,WAAW,CAClB,EACA,OAAQ,SAAW,KAAK,OAAO,OAAO,GAAK,CAAE,MAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,MAAM,CACxG,EAAG,CACD,KAAM,UACN,KAAM,eACN,QAAS,IAAM,CACb,MAAMqrG,EAAgB,KAAK,OAC3Bj4G,GAAc,oBAAoB,CAChC,SAAWv4C,GACF,IAAI,QAAQ,CAAC0kB,EAASwkB,IAAW,CACzBpZ,GAAA,YAAYD,GAAW,GAAI,CACtC,aAAc,mBACd,mBAAoB,yBACpB,oBAAqB,CAAC,IAAI9Y,GAAU,CAAC,OAAA/W,EAAQ,OAAQ,GAAK,EAAE,OAAO,EACnE,QAAS,CAAC,CACR,QAAS,OACT,SAAU,IAAM,CACN0kB,IAER,KAAK,SAAS,mBAAmB,YAAY1kB,EAAQwwJ,CAAa,EAClE,KAAK,KAAK,aAAa,aAAa,CAAC,OAAAxwJ,CAAO,EAC9C,GACC,CACD,QAAS,SACT,SAAU,IAAM,CACPkpC,GACT,EACA,SAAU,GACX,EACD,OAAAlpC,EACA,gBAAiB,GAClB,EAAE,KAAK,EACT,CACH,CACD,CACH,EACA,OAAQ,SAAWC,EAAU,OAAS,KAAK,QAAU,KAAK,OAAO,OAAO,GAAM,MAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,MAAM,GAAM,CAAC,EAAE,MAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,OAAO,UAAU,GAAG,KACvN,EAAG,CACD,KAAM,OACN,KAAM,cACN,QAAS,IAAM,KAAK,KAAK,aAAa,YAAY,KAAK,MAAM,EAC7D,OAAQ,IAAM,KAAK,KAAK,eAAe,CACzC,EAAG,CACD,KAAM,aACN,KAAM,aACN,QAAS,IAAM,CACR,qBAAgB,UAAU+lG,EAAgB,EAAE,KAAK,KAAK,OAAO,UAAU,EACvE,qBAAgB,cAAc,EAAI,CACzC,EACA,OAAQ,IAAM,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,MAAM,CAC7E,EAAG,CACD,KAAM,WACN,KAAM,SACN,QAAS,IAAM,CACb,KAAK,gBAAgB,UAAU0P,EAAY,EAAE,KAAK,KAAK,MAAM,EACxD,qBAAgB,cAAc,EAAI,CACzC,EACA,OAAQ,IAAM,KAAK,KAAK,aAAe,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,MAAM,CACtG,EAAG,CACD,KAAM,OACN,KAAM,WACN,QAAS,IAAM,CACR,cAAS,mBAAmB,SAAS,CAAC,OAAQ,KAAK,OAAQ,KAAM,YAAY,CACpF,EACA,OAAQ,SAAW,CACb,IAEK,OAAC,EADc,MAAM,KAAK,SAAS,yBAAyB,iBAAiB,KAAK,OAAO,UAAU,IAClF,QAAQ,kBACrB,CACJ,QACT,CACF,CACF,EAAG,CACD,KAAM,OACN,KAAM,YACN,QAAS,IAAM,CACb,KAAK,UAAU,CACjB,EACA,OAAQ,SAAW,CACd,IAAC,KAAK,OAAO,OAAO,EAAU,SAC3B,MAAAxnE,EAAW,MAAM,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,OAAO,UAAU,EAC/F,OAAO,KAAK,SAAWjuC,EAAU,MAAQiuC,GAAY,CAACA,EAAS,QAAQ,OACzE,CACF,EAAG,CACD,KAAM,UACN,KAAM,UACN,QAAS,IAAM,CACR,cAAS,gBAAgB,YAAY,KAAK,OAAQ,EAAK,EAAE,KAAK,IAAM,CAC9D1b,GAAA,CAAC,YAAa,gBAAgB,EACxC,CACH,EACA,OAAQ,SAEC,CAAC,EADS,MAAM,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,OAAO,UAAU,IAC5E,QAAQ,OAE/B,EAAG,CACD,KAAM,SACN,OAAQ,GACR,KAAM,SACN,QAAS,IAAM,CACA1C,GAAA,YAAYU,GAAmB,KAAK,OAAQ,OAAW,OAAW,KAAK,KAAK,QAAQ,CACnG,EACA,OAAQ,SAAW,KAAK,KAAK,OAASwsD,GAAS,OAC7C,KAAK,KAAK,OAASA,GAAS,MAC5B,CAAC,CAAE,MAAM,KAAK,SAAS,mBAAmB,cAAc,KAAK,MAAM,CAEvE,GAEK,eAAYz7C,GAAW,QAAQ,EACpC,KAAK,iBAAiB,KAAK,UAAY,GAAM,CAC3C,KAAK,KAAK,cACT,EAAI,CACT,CAEO,YAAa,CAClB,GAAG,CAAC,KAAK,gBAAgB,YAAYs0G,EAAiB,EAAG,CACvD,MAAMv8G,EAAM,KAAK,gBAAgB,UAAUu8G,EAAiB,EAC5Dv8G,EAAI,OAAS,KAAK,OAClBA,EAAI,KAAK,EAEJ,qBAAgB,cAAc,EAAI,CACzC,CACF,CAEA,MAAa,UAAUm3H,EAAsBC,EAAsBC,EAA+C,CAChH,MAAM3wJ,EAAS,KAAK,OACd+wB,EAAyC,CAC7C0/H,GAAc,CACZ,KAAM,mBACN,QAAS,EACX,EACAC,GAAc,CACZ,KAAM,iBACN,QAAS,EACX,GAGI7/H,EAAU,MAAMyb,GAAkB,CACtC,OAAAtsC,EACA,aAAc,YACd,mBAAoB,0BACpB,oBAAqB,CAAC,IAAI+W,GAAU,CAAC,OAAA/W,CAAO,GAAE,OAAO,EACrD,OAAQ,CACN,QAAS,YACT,SAAU,EACZ,EACA,WAAY+wB,EAAW,OAAO,OAAO,EACtC,EAEK,CAAC6/H,EAAYC,CAAU,EAAI,MAAM,QAAQhgI,CAAO,EAAIA,EAAU,GAE9DllB,EAAU,QAAQ,IAAI,CAC1BilJ,GAAc,KAAK,SAAS,mBAAmB,WAAW5wJ,CAAM,EAChE6wJ,GAAc,KAAK,SAAS,mBAAmB,aAAa7wJ,EAAQ,GAAO,EAAI,EAC/E,KAAK,SAAS,gBAAgB,YAAYA,EAAQ,EAAI,EACvD,EAED2wJ,IAAchlJ,CAAO,EAEf,MAAAA,EAEG6mB,GAAA,CAAC,YAAa,cAAc,CACvC,CAEO,iBAAiB1gB,EAAiB0uB,EAA6BxgB,EAAkB,CACrEnD,EAAA/K,EAAKvF,GAAM,CAC1BqQ,GAAYrQ,CAAC,EACb,CAACyT,GAAUszD,KACX9yC,EAAGj0B,CAAC,CACH,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEQ,YAAY8X,EAAgB,CAClC,KAAK,KAAK,aAAa,SAAS,KAAK,OAAO,WAAYA,CAAI,CAC9D,CAMA,IAAY,QAAS,CACnB,OAAO,KAAK,KAAK,MACnB,CAEO,sBAAuB,CACvB,qBAAW,SAAS,cAAc,KAAK,EACvC,cAAS,UAAU,IAAI,MAAM,EAElC,KAAK,cAAgB,IAAIsxH,GAAkB,KAAM,KAAK,KAAM,KAAK,QAAQ,EAEpE,aAAUn8G,GAAO,8CAA8C,EAC/D,aAAU+H,GAAW,OAAO,EAC5B,kBAAeA,GAAW,WAAW,EAC1C,KAAK,iBAAmBy6B,GAAiB,CACvC,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,YACN,KAAM,6BACN,QAAS,KAAK,sBACb,CACD,KAAM,OACN,KAAM,yBACN,QAAS,IAAM,CACAlsC,GAAA,YAAYu8H,GAAsB,CAAC,OAAQ,KAAK,MAAM,CAAC,EAAE,MACxE,EACA,OAAQ,IAAM0D,EAAA,CACf,EACD,KAAM,YACP,EACI,eAAYxuH,GAAW,sBAAsB,EAC7C,aAAUA,GAAW,MAAM,EAE3B,sBAAiB,KAAK,QAAS,KAAK,YAAY,KAAK,KAAM,OAAO,CAAC,EACxE,KAAK,iBAAiB,KAAK,aAAc,KAAK,oBAAoB,EAE7D,sBAAiB,KAAK,UAAW,IAAM,CAC1C,KAAK,WAAW,EAAI,EACrB,EAEI,sBAAiB,KAAK,QAAS,IAAM,CAC1B,CAAC,CAAC,CAAC,KAAK,QAAQ,QAAQ,MAEpC,KAAK,cAAc,EAEnB,KAAK,YAAY,CACnB,CACD,EAEI,sBAAiB,KAAK,QAAS,KAAK,YAAY,KAAK,KAAM,KAAK,OAAO,CAAC,EAE7E,KAAK,eAAe,IAAIthC,CAAS,EAAE,gBAAkB6wJ,GAAW,CAC3D,GAAAA,EAAO,KAAOC,GACf,OAGI,MAAA5vJ,EAAO2vJ,EAAO,qBAAqB,KACzBhK,GAAA,KAAK,aAAc3lJ,EAAO,GAAKs+E,GAAat+E,EAAM,CAAC,EAAI,EAAE,EAG1E,EAED,KAAK,eAAe,IAAIlB,CAAS,EAAE,cAAgBuG,GAAW,CAC5D,GAAG,KAAK,SAAWA,EAAO,SAAS,EAAI,EAAG,CAClC,MAAA4gC,EAAO5mC,GAAgB,QAAQgG,CAAM,EACxC,IAAC4gC,EAAK,OAAO,UACd,OAGF,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAAEA,GAAkB,QAAQ,IAAI,EACtE,KAAK,cAAc,EACnB,KAAK,cAAc,CACrB,EACD,EAED,KAAK,eAAe,IAAInnC,CAAS,EAAE,yBAA2B2xC,GAAW,CACpEA,EAAO,SAAW,KAAK,QACxB,KAAK,cAAc,CACrB,CACD,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,mBAAqBD,GAAW,CAC9D,KAAK,SAAWA,GACjB,KAAK,cAAc,CACrB,CACD,EAEI,oBAAe,IAAIC,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAAuG,EAAQ,iBAAAggJ,EAAkB,gBAAAwK,KAAqB,CACnG,GAAG,KAAK,SAAWxqJ,EAAO,SAAS,EAAI,EACrC,OAGF,MAAM7E,EAAa,KAAK,KAAK,QAAQ,cAAc,EACnD,KAAK,aAAa,IAChB,KAAK,OACL6kJ,EAAiB,IAAKjgJ,GAAWA,EAAO,SAAS,EAAK,CAAC,EACvDyqJ,CAAA,EACA,KAAMnnJ,GAAa,CACflI,KAIKkI,GAAA,CACV,EACF,EAEI,oBAAe,IAAI5J,CAAS,EAAE,gBAAiB,MAAM,CAAC,OAAAD,EAAQ,SAAAqsB,KAAc,CAC5E,QAAK,SAAWrsB,EACjB,OAGe,KAAK,YAAY,IAAIA,EAAQqsB,CAAQ,GAC7C,CACV,EAED,KAAK,KAAK,iBAAiB,UAAW,CAAC1e,EAAKsjJ,IAAiB,CAC3D,MAAMtvJ,EAAa,KAAK,KAAK,QAAQ,cAAc,EACnDnB,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACtC,CAACjK,EAAA,GAAgB,CAAC,KAAK,gBAErB,mBAAc,OAAS,CAAC,CAACiK,EAAM,qBAAqB,KAAK,KAAK,MAAM,EAEtEqlJ,GACD,KAAK,cAAc,0BACd,mBAAc,QAAQtjJ,EAAK,CAAC,GACxB,KAAK,cAAc,SAC5B,KAAK,cAAc,+BACd,mBAAc,QAAQA,CAAG,GAChC,CACD,EACF,EAEI,oBAAe,IAAI1N,CAAS,EAAE,uBAAwB,CAAC,CAAC,OAAAD,EAAQ,KAAAkS,KAAU,CAC1E,KAAK,KAAK,OAAS8qE,GAAS,QAAUh9E,IAAW,KAAK,QAItDkS,GACD,KAAK,SAAS,CAChB,CACD,EAEM,IACT,CAEO,WAAWg/I,EAAoB,CAC/B,UAAK,aAAa,aAAa,CAClC,OAAQ,KAAK,OACb,UAAWA,EAAY,CAAC,KAAK,cAAc,uBAAuB,UAAU,QAAQ,IAAM,EAC1F,KAAMl0E,GAAS,OAChB,CACH,CAqDO,SAAU,CAEf,KAAK,eAAe,YAEpB,KAAK,QAAQ,UACb,KAAK,uBAAuB,UAC5B,KAAK,wBAAwB,UAC7B,KAAK,eAAe,UACpB,KAAK,kBAAkB,QAASmzE,GAAoBA,EAAgB,SAAS,EAE7E,OAAO,KAAK,cACZ,OAAO,KAAK,UACZ,OAAO,KAAK,aACZ,OAAO,KAAK,YACZ,OAAO,KAAK,SACZ,OAAO,KAAK,eACd,CAEO,SAAU,CACX,KAAK,KAAK,QACP,eAAU,UAAU,IAAI,MAAM,CAEvC,CAEQ,oBAAoB36I,EAAkC,CACtD,MAAA1T,EAAY0T,EAAc,uBAAuB,UACpD,KAAK,eAAiB,KAAK,gBAAkBA,EAC9C,KAAK,cAAc,uBAAuB,UAAU,YAAY1T,CAAS,EAKlE,eAAU,QAAQA,CAAS,CAGtC,CAEA,MAAa,iBAAiB/B,EAAkD,CAC9E,KAAM,CAAC,OAAAC,EAAQ,SAAAK,GAAY,KAAK,KAC1B,CAAC,WAAAsB,CAAc,EAAA5B,EAErB,IAAIoxJ,EAAiCC,EACrC,MAAMC,EAAU,KAAK,KAAK,OAASr0E,GAAS,MACtCs0E,EAAgB,KAAK,KAAK,OAASt0E,GAAS,OAC/C,IAACA,GAAS,IAAI,EAAE,SAAS,KAAK,KAAK,IAAI,GAAKq0E,EAAS,CAChD,MAAAE,EAAYF,EAAUhxJ,EAAWL,EACjCwxJ,EAAcH,EAAU,OAAYhxJ,EACpCqjB,EAAS,KAAK,OAElB,CAACA,GACDA,EAAO,KAAK,QAAQ,OAAO,aAAe6tI,GAC1C7tI,EAAO,KAAK,QAAQ,YAAc8tI,EAAc,GAAKA,EAAc,SACnExxJ,IAAWC,EAAU,MAErBkxJ,EAAYvhI,GAAU,CACpB,YAAawhI,EAA4B1hJ,GAAc,GAAG,IAAI,EAC9D,SAAU,GACV,KAAM,GACN,OAAQ6hJ,EACR,SAAUC,EACV,YAAa,CAAC,gBAAiBnyI,GAAc,GAAI,EAAE,CAAC,EACpD,YAAa,GACb,UAAWgyI,CAAA,CACZ,EACSF,EAAA,KAAK,UAAU,IAAI,eAAe,GAE5CA,EAAY,KAAK,MAErB,CAEA,KAAK,QAAQ,UACb,MAAM7pI,EAAS,KAAK,OAAS,KAAK,aAAa,EAEzCjb,EAAW,CACf,KAAK,SAAS,gBAAgB,YAAYrM,CAAM,EAChD,KAAK,SAAS,gBAAgB,UAAUA,CAAM,EAC9CA,EAAO,UAAc,EAAAQ,GAAgB,QAAQR,EAAO,UAAU,EAAI,OAClEmxJ,GAAW,kBACX,KAAK,eAAe,EACpB7pI,GAAQ,QAAQ,EAAI,EACpB9mB,GAAgB,SAAS,EACzBkL,GAAmB,KAAK,cAAc,UAAU1L,CAAM,CAAC,EACvD0L,GAAmB,KAAK,aAAa,UAAU1L,CAAM,CAAC,GAGlD,CACJqV,EACAo8I,EACArqH,EACAzyB,EACA+8I,EACAC,EACA/lJ,EACAgmJ,EACAC,CACE,QAAM,QAAQ,IAAIxlJ,CAAQ,EAE3B,OAAC1K,EAAW,GAAKyvJ,GAClBA,EAA0B,QAAQ,EAG7B,IAAM,CACL,MAAAU,EAAqB,EAAE,KAAK,KAAK,OAAS90E,GAAS,QAAU,KAAK,KAAK,OAASA,GAAS,WAC1F,cAAW,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAAC3nE,GAAe,CAACy8I,CAAkB,EACtF,KAAK,UACHz8I,GAAe,CAAC,KAAK,KAAK,cAAgBy8I,GAC3Cz6I,GAAe,KAAK,QAAS9S,EAAK8Q,EAAc,iBAAmB,aAAa,CAAC,EACjF,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAAE+xB,GAAsB,QAAQ,IAAI,GAErE,aAAQ,UAAU,IAAI,MAAM,GAIlC,KAAK,WACN,KAAK,UAAU,UAAU,OAAO,OAAQ,CAAC0qH,CAAkB,EAG1D,KAAK,WACN,KAAK,UAAU,UAAU,OAAO,OAAQ,CAACA,CAAkB,EAG1D,KAAK,SAAWX,IACdA,GACI,YAAO,QAAQA,EAAU,IAAI,EAGjC,KAAK,SACN,KAAK,uBAAuB,UACvB,YAAO,KAAK,UAGnB,KAAK,OAASA,EACd,KAAK,uBAAyBC,EAC9B,KAAK,UAAU,UAAU,OAAO,aAAc,CAAC,CAACD,CAAS,GAG3D,KAAK,cAAc,EAEnB,KAAK,cAAc,EAEhB,KAAK,SACN,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAACW,CAAkB,EAGrD,MAAAC,EAAyB,KAAK,KAAK,uBAAuB,EAChE,GAAGA,GAA0B,KAAK,KAAK,OAAS/0E,GAAS,WAAY,CACnE,GAAG,KAAK,KAAK,gBAAkB,CAAC,KAAK,cAAe,CAClD,MAAMg1E,EAAmB,IAAIrc,GAAkB,KAAM,KAAK,KAAM,KAAK,QAAQ,EAC7E,KAAK,oBAAoBqc,CAAgB,EACzC,KAAK,eAAe,UACpB,KAAK,cAAgBA,CACvB,CAEGD,EACD,KAAK,cAAc,OAAS,CAAC,CAACnmJ,EAAM,qBAAqB5L,CAAM,EACvD,KAAK,KAAK,OAASg9E,GAAS,aAC/B,mBAAc,UAAY,KAAK,KAAK,SACzC,KAAK,cAAc,MAAQ,EAC3B,KAAK,cAAc,YAAc,EACjC,KAAK,cAAc,oBACrB,MACQ,KAAK,gBACb,KAAK,cAAc,UACnB,KAAK,cAAgB,QAGN00E,IACGC,MACpB,KAAK,SAAS,UAAU,OAAO,OAAQ,CAACA,CAAiB,EACzD,KAAK,cAAc,EAEd,eAAU,UAAU,OAAO,MAAM,EAEnCC,EAAoB,kBAAkB,SAClC,kBAAa,MAAM5xJ,CAAM,EAG7B6xJ,EAAmB,kBAAkB,SACjC,iBAAY,MAAM7xJ,CAAM,EAG1B,eAAU,UAAUA,CAAM,EAC1B,sBAAiB,UAAUA,CAAM,EAE1B6rB,GAAA+lI,EAAoB,OAAS/nJ,GAAa,CAChDlI,KAIKkI,GAAA,CACV,EAEWgiB,GAAAgmI,EAAmB,OAAShoJ,GAAa,CAC/ClI,KAIKkI,GAAA,CACV,EAED,KAAK,UAAU,UAAU,OAAO,mBAAoBynJ,CAAa,EAErE,CAEA,MAAa,eAAenyH,EAAgB,CAC1C,KAAM,CAAC,OAAAn/B,EAAQ,SAAAK,GAAY,KAAK,KAChC,IAAI05D,EACwB,KAAK,uBACZ,QAAQ,EAEvB,MAAAp4D,GADmB,KAAK,sBAAwB+N,GAAc,GAChC,MACpC,GAAG,KAAK,KAAK,OAASstE,GAAS,OAC1B79C,IAAU,OAAW46B,EAAUx1D,EAAK,SAAS,EAC3Cw1D,EAAUx1D,EAAK,sBAAuB,CAAC46B,CAAK,CAAC,EAE/CA,IAAU,QACX,KAAK,SAAS,mBAAmB,kBAC/Bn/B,EACA,CAAC,CAAC,EAAG,4BAA4B,EACjC,IACA,KAAM+B,GAAW,CACjB,GAAG,CAACJ,EAAW,EAAG,OACZw9B,QAAQp9B,EAAO,CAAC,EAAE,MAIxB,GAHA,KAAK,SAASo9B,CAAK,EAGhB,CAACA,EAAO,CACJ,UAAK,aAAa,UAGjB,MAAA8yH,EAAe,KAAK,KAAK,aAAa,KACzCA,EAAa,OAAO,eACrBA,EAAa,OAAO,cAAc,uBAAuB,OAAO,EAAI,CAExE,EACD,UAEK,KAAK,KAAK,OAASj1E,GAAS,UACpCjjB,EAAUx1D,EAAKvE,IAAWC,EAAU,KAAO,YAAc,mBAAmB,UACpE,KAAK,KAAK,OAAS+8E,GAAS,WAAY,CAChD,MAAMlrE,EAAK,KAAK,gBAAgBnQ,EAAY,sBAAuB,KAAK,KAAK,OAAO,EACpF,GAAGw9B,IAAU,OAAW,CACtB,MAAMs/F,EAAiB,MAAM,KAAK,KAAK,kBAAkB,EACzD,GAAG,CAAC98H,EAAW,EAAG,OACfmQ,EAAA,iBAAiB2sH,EAAe,QAAU,KAAO,CAAC,IAAK,UAAW,KAAM,MAAS,EAAI,CAAC,KAAM,CAACA,EAAe,OAAS,KAAK,KAAK,QAAU,EAAI,EAAE,EAAE,CACtJ,CAEA1kE,EAAUjoD,EAAG,OACf,SAAU,KAAK,KAAK,OAASkrE,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,MAAO,CAC/E,MAAMu0E,EAAY,KAAK,KAAK,OAASv0E,GAAS,MAAQ38E,EAAWL,EAa9D,GAZH,CAAC+5D,CAAA,EAAwB,MAAM,QAAQ,IAAI,CACzCpnD,GAAc,CACZ,OAAQ4+I,EACR,OAAQ,GACR,UAAW,CAAClxJ,EACZ,SAAAA,EACA,YAAa,CAAC,WAAAsB,CAAU,EACxB,UAAW,KAAK,KAAK,OAASq7E,GAAS,MACxC,EAEF,EAEE,CAACr7E,IACF,MAEJ,CAEA,MAAO,IAAM,CACI0V,GAAA,KAAK,MAAO0iD,CAAO,EAKtC,CAEO,SAAS56B,EAAgB,CAC9B,KAAK,eAAeA,CAAK,EAAE,KAAMuyH,GAAqBA,GAAkB,CAC1E,CAEA,MAAa,eAAgB,CAC3B,GAAG,CAAC,KAAK,QAAS,OAElB,MAAM1xJ,EAAS,KAAK,OACdmzD,EAAQ,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAAnzD,EAAQ,YAAa,GAAO,SAAU,KAAK,KAAK,QAAS,GAC/HqV,EAAc,MAAM,KAAK,SAAS,gBAAgB,YAAYrV,CAAM,EACvEqV,IACDwnD,GAAkB,KAAK,QAAS1J,EAAQ,SAAW,MAAM,EACzD,KAAK,QAAQ,QAAQ,MAAQ,IAAK,CAACA,GAGrC,KAAK,QAAQ,MAAM,QAAU99C,EAAc,GAAK,MAClD,CAoDQ,gBAAgB1T,EAAwBqU,EAAkBk8I,EAAsB,CAChF,MAAApgJ,EAAK,IAAIrR,GAAK,YAAY,CAC9B,IAAAuV,EACA,KAAM,CAAC,CAAC,EACT,EAEKm8I,EAAoB,KAAK,KAAK,kBAC9BC,EAAmE,CAAC,CAAC,WAAAz3B,EAAY,MAAAx7F,KAAW,CAC7FgzH,IAAsBx3B,GACpB7oH,EAAA,iBAAiB,CAAC,IAAAkE,EAAK,KAAM,CAACmpB,GAAS+yH,EAAa,EAAI,EAAE,CAAE,EACjE,EAGQ,OAAAjyJ,EAAA,iBAAiB,gBAAiBmyJ,CAAc,EAC1D,KAAK,SAAS,mBAAmB,6BAA6BD,EAAmB,EAAI,EACrFxwJ,EAAW,UAAU,IAAM,CACf1B,EAAA,oBAAoB,gBAAiBmyJ,CAAc,EAC7D,KAAK,SAAS,mBAAmB,6BAA6BD,EAAmB,EAAK,EACvF,EAEMrgJ,CACT,CAEQ,cAAe,CAClB,IAAC,KAAK,UAAa,KAAK,KAAK,OAASkrE,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,MAAQ,OAC9F,MAAM/yD,EAAmBva,KACnB/N,EAAasoB,EAAiB,MAC9B+K,EAAiB,IAAImD,GAEvB,IAAAhQ,EACJ,GAAG,KAAK,KAAK,OAAS60D,GAAS,MAAO,CACpC,MAAMlrE,EAAK,KAAK,gBAAgBnQ,EAAY,UAAU,EAEtDwmB,EAAU,SAAW,CACnB,MAAMs2G,EAAiB,MAAM,KAAK,KAAK,kBAAkB,EACzD,OAAA3sH,EAAG,iBAAiB,CAAC,KAAM,CAAC2sH,EAAe,KAAK,EAAE,EAC3C,IAAMpnH,GAAe,KAAK,SAAUvF,EAAG,OAAO,EACvD,SACQ,KAAK,KAAK,SAClBqW,EAAU,SAAW,CACb,MAAA7nB,EAAQ,MAAMqS,GAAc,CAAC,OAAQ,KAAK,OAAQ,OAAQ,GAAK,EAC/D7R,EAAOyD,EAAK,qBAAsB,CAACjE,CAAK,CAAC,EAE/C,MAAO,IAAM+W,GAAe,KAAK,SAAUvW,CAAI,OAE5C,CACL,MAAMd,EAAS,KAAK,OAELg1B,EAAA,IAAI/0B,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAQkO,KAAa,CAChEnO,IAAWmO,GACJkkJ,GACV,CACD,EAEDr9H,EAAe,IAAI/0B,CAAS,EAAE,cAAgBsG,GAAW,CACpDvG,IAAWuG,EAAO,YACX8rJ,GACV,CACD,EAED,MAAM9xH,EAAW,OAAO,YAAY,IAAM8xH,EAAA,EAAW,GAAI,EAEzD1wJ,EAAW,UAAU,IAAM,CACzB,cAAc4+B,CAAQ,EACvB,EAEDpY,EAAWmqI,GACF,KAAK,KAAK,aAAa,cAAc,CAC1C,OAAAtyJ,EACA,QAAS,KAAK,SACd,UAAAsyJ,EACA,cAAe,GACf,WAAA3wJ,CAAA,CACD,CAEL,CAEAA,EAAW,UAAU,IAAM,CACzBqzB,EAAe,UAAU,EAC1B,EAED,MAAMq9H,EAAU,IAAM,CACZlqI,EAAA,EAAK,EAAE,KAAMte,GAAalI,EAAW,GAAKkI,KAAY,GAGzD,OACL,QAAAse,EACA,QAAS,IAAM8B,EAAiB,QAAQ,EAE5C,CACF,CC5wCA,MAAqBsoI,WAA4B9wH,EAAe,CAAhE,kCAME,KAAQ,SAAW,EACnB,KAAQ,MAAQ,GAGhB,oBAAqB,CACnB,KAAK,UAAU,YAAY,KAAK,OAAQ,KAAK,SAAU,KAAK,KAAK,CACnE,CAEO,KACLzhC,EACAK,EACAmyJ,EACA17I,EACA,CACA,KAAK,UAAU,GAAK,2BACf,eAAU,UAAU,IAAI,oBAAoB,EACjD,KAAK,YAAc,IAAIgqB,GAAY,CAAC,YAAa,SAAS,EAC1D,KAAK,MAAM,YAAY,KAAK,YAAY,SAAS,EAE5C,iBAAcS,GAAW,+BAA+B,EACxD,YAAO,OAAO,KAAK,WAAW,EAE7B,MAAAtoB,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAC/B,gBAAW,UAAU,YAAYA,CAAC,EACvC,KAAK,UAAY,IAAI2lB,GACnB3lB,EACA,KAAK,YACL,CACE,SAAU,IAAImlB,GAAY,4BAA6B,UAAU,CACnE,EACA,KAAK,iBAAiB,IAAI,EAC1B,OACA,OACA,CAAC,EAAEp+B,IAAWC,EAAU,MAAQI,EAAA,EAG9B,KAAK,OAiBP,KAAK,UAAU,YAAY,KAAK,OAAQ,KAAK,SAAUyW,CAAK,GAhB5D,KAAK,MAAQA,EACb,KAAK,OAAS9W,EACd,KAAK,SAAWK,EAChB,KAAK,WAAamyJ,EAElB,KAAK,YAAY,UAAU,OAAO,OAAQ,CAAC,KAAK,UAAU,EACvD,KAAK,YACW31I,EAAA,KAAK,YAAa,IAAM,CAC1BiT,GAAA,YAAYsuD,GAAqB,SAAQ,KAAK,UAAU,EAAE,MACtE,GAAC,eAAgB,KAAK,cAAe,GAG1CtnE,GAAS,KAAK,UAAU,YAAY,WAAW,iBAAiBA,CAAK,EAErEi/D,GAAgB,cAAc,EAAI,EAItC,CACF,CChEA,eAA8B08E,GAAgCzyJ,EAAmD,CAC3G,IAAAqkB,EAEAquI,EAAe,EAAGC,EAAe,EAAGC,EAAc,EACtD,MAAMvmI,EAAWpsB,EAAU,SACrBu4G,EAAkBv4G,EAAU,SAAS,gBAC3C,MAAG,CAACosB,EAAS,gBAAgB,OAAO,UAAYrsB,IAC3CA,EAAO,SACL,MAAMw4G,EAAgB,UAAUx4G,CAAM,EAChCqkB,EAAA,WAEAA,EAAA,UAED,MAAMm0F,EAAgB,YAAYx4G,CAAM,EACzCqkB,EAAA,WAEAA,EAAA,SAGNgI,EAAS,aAAa,MAAMhI,CAAI,IAAGquI,EAAermI,EAAS,gBAAgB,gBAC3EA,EAAS,aAAa,MAAMhI,CAAI,IAAGsuI,EAAetmI,EAAS,gBAAgB,gBAC3EA,EAAS,aAAa,KAAKhI,CAAI,IAAGuuI,EAAcvmI,EAAS,gBAAgB,gBAGvE,CACL,MAAOqmI,EACP,MAAOC,EACP,KAAMC,CAAA,CAEV,CCxCgB,SAAAC,GAAiB73H,EAAW/hB,EAAW,CAC9C,OAACA,EAAI+hB,GAAKA,EAAI,EACvB,CCIA,MAAMq4G,GAAQ,GACRyf,GAASzf,GAIf,MAAqB0f,EAA+B,CA8ClD,aAAc,CA7Cd,KAAiB,OAAS1f,GAC1B,KAAiB,QAAUyf,GAG3B,KAAiB,OAAS,GAI1B,KAAiB,OAAS,CACxB,EAAG,IAAM,GAAM,IAAM,EAAG,IAAK,EAAG,IAAK,EAAG,IAAK,EAAG,EAAG,EAAG,EAAG,EAAG,EAAG,GAAI,GAAI,GACvE,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,GAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,GAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAG1E,KAAiB,WAAsB,CACrC,CAAC,EAAG,GAAM,EAAG,EAAI,EACjB,CAAC,EAAG,GAAM,EAAG,EAAI,EACjB,CAAC,EAAG,IAAM,EAAG,GAAI,EACjB,CAAC,EAAG,IAAM,EAAG,EAAI,EACjB,CAAC,EAAG,GAAM,EAAG,EAAI,EACjB,CAAC,EAAG,GAAM,EAAG,EAAI,EACjB,CAAC,EAAG,IAAM,EAAG,GAAI,EACjB,CAAC,EAAG,IAAM,EAAG,EAAI,GAEF,aAAU,KAAK,WAAW,OA4HnC,8BAA4BE,GAA+B,CACjE,IAAIpiH,EAAe9O,EACnB,GAAGkxH,EAAa,CACd,MAAM/7I,EAAQ+7I,IACdpiH,EAAO35B,GAAS,EACV,MAAAg8I,EAAkBJ,GAAiB57I,EAAO,CAAC,EAC3Ci8I,EAAmB,KAAK,mBAAqB,EAE7CnwH,GADO,KAAK,kBAAoB,KAAK,mBAAqBkwH,GAC5CC,EACjBnwH,IACD,KAAK,mBAAqBA,EACrB,uBAAkB,CAACA,CAAI,EAC9B,KACK,CACL,MAAMowH,EAAS,KAAK,QACpBrxH,EAAKqxH,EAAO,QACZviH,EAAO,CAACuiH,EAAO,MACjB,CAEA,OAAGrxH,GACD,KAAK,cAAcA,CAAE,EAGpB8O,IACD,KAAK,kBAAoB,OACzB,KAAK,mBAAqB,OAC1B,KAAK,kBAAoB,OACzB,KAAK,yBAA2B,QAG3B,CAACA,CAAA,EArIF,MAAA7N,EAAO,KAAK,OAAS,KAAK,OAAO,KAAK,OAAO,OAAS,CAAC,EAErD,QAAAr/B,EAAI,EAAGlE,EAAS,KAAK,OAAO,OAAQkE,EAAIlE,EAAQ,EAAEkE,EACxD,KAAK,OAAOA,CAAC,EAAI,KAAK,OAAOA,CAAC,EAAIq/B,EAGpC,KAAK,kBAAoB,KAAK,OAAO,IAAI,CAAC/H,EAAGt3B,EAAGkG,IACvCoxB,GAAKpxB,EAAIlG,EAAI,CAAC,GAAK,EAC3B,CACH,CAEQ,SAAS4E,EAAa,CACtB,MAAAvG,EAAS+X,GAASxR,CAAG,EAC3B,MAAO,CAAC,EAAGvG,EAAO,CAAC,EAAG,EAAGA,EAAO,CAAC,EAAG,EAAGA,EAAO,CAAC,CAAC,CAClD,CAEQ,aAAaqxJ,EAAe,CAC5B,MAAAzyE,EAAY,KAAK,WAAW,MAAM,EACxCA,EAAU,KAAK,GAAGA,EAAU,OAAO,EAAGyyE,CAAK,CAAC,EAE5C,MAAMrxJ,EAA2B,GACjC,QAAQ,EAAI,EAAG,EAAI4+E,EAAU,OAAQ,GAAK,EACjC5+E,EAAA,KAAK4+E,EAAU,CAAC,CAAC,EAEnB,OAAA5+E,CACT,CAEQ,iBAAiBsxJ,EAAeC,EAAkBC,EAAiB,CACnE,MAAAnuH,EAAM,KAAK,aAAaiuH,CAAK,EACnC,GAAG,CAACE,EAAM,CAAC,GAAKA,EAAM,SAAW,EAC/B,MAAO,CAACnuH,CAAG,EAIb,MAAMouH,EADU,KAAK,aAAa,EAAEH,EAAQ,KAAK,OAAO,EAC9B,IAAI,CAACI,EAASnwJ,KAC/B,CACL,GAAImwJ,EAAQ,EAAIruH,EAAI9hC,CAAG,EAAE,GAAKgwJ,EAC9B,GAAIG,EAAQ,EAAIruH,EAAI9hC,CAAG,EAAE,GAAKgwJ,CAAA,EAEjC,EAWM,OATWC,EAAM,IAAKt8I,GACpBu8I,EAAU,IAAI,CAACE,EAAUpwJ,KACvB,CACL,EAAG8hC,EAAI9hC,CAAG,EAAE,EAAIowJ,EAAS,EAAIz8I,EAC7B,EAAGmuB,EAAI9hC,CAAG,EAAE,EAAIowJ,EAAS,EAAIz8I,CAAA,EAEhC,CACF,CAGH,CAEQ,YAAYo8I,EAAeM,EAAc,CAE/C,OADkB,KAAK,iBAAiBN,EAAO,KAAK,OAAQ,CAACM,CAAI,CAAC,EACjD,CAAC,CACpB,CAEQ,WAAW5wH,EAAc,CAGzB,IAFN,KAAK,OAASA,EAER,KAAK,OAAS,KAAK,QACvB,KAAK,OAAS,KAAK,OAChB,EAAE,KAAK,QAAU,KAAK,UACvB,KAAK,QAAU,KAAK,SAIlB,UAAK,MAAQ,GACjB,KAAK,OAAS,KAAK,OAChB,EAAE,KAAK,OAAS,IACjB,KAAK,QAAU,KAAK,QAG1B,CAaQ,kBAAkBA,EAAc,CACtC,KAAK,WAAWA,CAAI,EACpB,MAAM6wH,EAAS,KAAK,YAAY,KAAK,OAAQ,KAAK,KAAK,EACvD,KAAK,aAAaA,CAAM,CAC1B,CA6CQ,qBAAqBjzE,EAAoB0yE,EAAQ,KAAK,OAAQh4H,EAAW,EAAI,KAAK,MAAQ,KAAK,OAAQ,CAC7G,MAAMyG,EAAK,KAAK,MAAM,gBAAgB,KAAK,OAAQ,KAAK,OAAO,EACzD+xH,EAAS/xH,EAAG,KACZgyH,EAAe,KAAK,QAAQ,OAE5BC,EAAqBV,GAAkB,CAC3C,MAAMtxJ,EAA2B,GACjC,QAAQ2B,EAAI,EAAGA,GAAK,EAAG,EAAEA,EACvB3B,EAAO2B,CAAC,EAAI,CAAC,GAAG,KAAK,YAAY2vJ,EAAQ3vJ,EAAI,GAAK,KAAK,WAAW,MAAM,CAAC,EACzE3B,EAAO2B,CAAC,EAAE,EAAI,EAAM3B,EAAO2B,CAAC,EAAE,EAEzB,OAAA3B,CAAA,EAGHiyJ,GAAiBX,EAAQ,GAAK,KAAK,WAAW,OAC9CxlJ,EAAWkmJ,EAAkBC,CAAa,EAC1C3mJ,EAAU0mJ,EAAkBV,CAAK,EAEvC,IAAIvoJ,EAAS,EACb,QAAQugC,EAAI,EAAGA,EAAI,KAAK,QAAS,EAAEA,EAAG,CAEpC,MAAM4oH,EADe5oH,EAAI,KAAK,QACS,GACjC6oH,EAAmBD,EAAkBA,EAC3C,QAAQ9hI,EAAI,EAAGA,EAAI,KAAK,OAAQ,EAAEA,EAAG,CAEnC,MAAMgiI,EADehiI,EAAI,KAAK,OACS,GAGjCiiI,EAAc,IAFG,KAAK,KAAKD,EAAkBA,EAAkBD,CAAgB,EAG/EG,EAAQD,EAAcA,EAAc,GAAM,EAC1CE,EAAW,KAAK,IAAID,CAAK,EACzBE,EAAW,KAAK,IAAIF,CAAK,EAEzBG,EAAS,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,GAAML,EAAkBI,EAAWN,EAAkBK,CAAQ,CAAC,EACnGG,EAAS,KAAK,IAAI,EAAK,KAAK,IAAI,EAAK,GAAMN,EAAkBG,EAAWL,EAAkBM,CAAQ,CAAC,EAEzG,IAAIG,EAAc,EACd5jJ,EAAI,EACJuoB,EAAI,EACJnE,EAAI,EACR,QAAQxxB,EAAI,EAAGA,EAAIowJ,EAAc,EAAEpwJ,EAAG,CACpC,MAAMixJ,EAAS9mJ,EAASnK,CAAC,EAAE,GAAK2J,EAAQ3J,CAAC,EAAE,EAAImK,EAASnK,CAAC,EAAE,GAAK23B,EAC1Du5H,EAAS/mJ,EAASnK,CAAC,EAAE,GAAK2J,EAAQ3J,CAAC,EAAE,EAAImK,EAASnK,CAAC,EAAE,GAAK23B,EAE1Dw5H,EAAYL,EAASG,EACrBG,EAAYL,EAASG,EAEvB,IAAAlB,EAAW,KAAK,IAAI,EAAK,GAAM,KAAK,KAAKmB,EAAYA,EAAYC,EAAYA,CAAS,CAAC,EAChFpB,IAAWA,EAAWA,EAAWA,EAC7BgB,GAAAhB,EAEf5iJ,GAAK4iJ,EAAW,KAAK,QAAQhwJ,CAAC,EAAE,EAChC21B,GAAKq6H,EAAW,KAAK,QAAQhwJ,CAAC,EAAE,EAChCwxB,GAAKw+H,EAAW,KAAK,QAAQhwJ,CAAC,EAAE,CAClC,CAEOmwJ,EAAA/oJ,GAAQ,EAAIgG,EAAI4jJ,EAChBb,EAAA/oJ,GAAQ,EAAIuuB,EAAIq7H,EAChBb,EAAA/oJ,GAAQ,EAAIoqB,EAAIw/H,EACvBb,EAAO/oJ,GAAQ,EAAI,GACrB,CACF,CACO,OAAAg3B,CACT,CAEQ,cAAcA,EAAe,CACnC,KAAK,MAAM,aAAaA,EAAI,EAAG,CAAC,EAC3B,UAAK,UAAU,KAAK,IAAK,EAAG,EAAG,KAAK,OAAQ,KAAK,OAAO,CAC/D,CAEQ,aAAa6+C,EAAoB,CACvC,KAAK,cAAc,KAAK,qBAAqBA,CAAS,CAAC,CACzD,CAwBO,KAAK7uE,EAAuB,CACjC,KAAK,QAAU,GACf,KAAK,OAAS,EACd,KAAK,MAAQ,EAOb,MAAMkH,EAASlH,EAAG,aAAa,aAAa,EAAE,MAAM,GAAG,EACvD,KAAK,QAAUkH,EAAO,IAAK/Q,GAClB,KAAK,SAASA,CAAK,CAC3B,EAEG,KAAK,MACF,SAAM,SAAS,cAAc,QAAQ,EACrC,SAAI,MAAQ,KAAK,OACjB,SAAI,OAAS,KAAK,QAClB,WAAQ,KAAK,IAAI,WAAW,KAAM,CAAC,MAAO,GAAM,GAGvD,KAAK,QAAU6J,EACV,UAAO,KAAK,QAAQ,WAAW,KAAM,CAAC,MAAO,GAAM,EACxD,KAAK,OAAO,CACd,CAEQ,QAAS,CACZ,QAAK,QAAQ,OAAS,EAAG,CACpB,MAAA7J,EAAQ,KAAK,QAAQ,CAAC,EACvB,UAAK,UAAY,OAAOA,EAAM,CAAC,KAAKA,EAAM,CAAC,KAAKA,EAAM,CAAC,IAC5D,KAAK,KAAK,SAAS,EAAG,EAAG,KAAK,OAAQ,KAAK,OAAO,EAClD,MACF,CAEA,MAAM4jE,EAAW,KAAK,YAAY,KAAK,OAAQ,KAAK,KAAK,EACzD,KAAK,aAAaA,CAAQ,CAC5B,CAEO,eAAemnF,EAA4B,CAC7C,QAAK,QAAQ,OAAS,EACvB,OAGF,GAAGA,EAAa,CACd,KAAK,kBAAoB,KAAK,QAAU,KAAK,mBAAqB,GAClE,KAAK,mBAAqB,KAAK,kBAC/B,KAAK,kBAAoB,OACzB,KAAK,yBAA2B,GAChCt3H,GAAc,KAAK,yBAAyB,KAAK,KAAMs3H,CAAW,EAAG,IAAI,EACzE,MACF,CAEA,MAAMW,EAAO,KAAK,MACZoB,EAAQ,KAAK,OAEf,IAAAC,EAEJ,MAAMzB,EAAkB,GAChB,QAAA7vJ,EAAI,EAAGlE,EAAS,KAAK,kBAAkB,OAAQkE,EAAIlE,EAAQ,EAAEkE,EAAG,CAChE,MAAAuxJ,EAAM,KAAK,kBAAkBvxJ,CAAC,EACpC,IAAIuT,GAASs8I,EAAM7vJ,EAAI,CAAC,GAAKiwJ,GAAQsB,EAElC,CAACh+I,EAAM,QAAQ,CAAC,EAAI89I,GAASC,IAAmB,SAChCA,EAAAtxJ,EACRuT,GAAA89I,GAGXxB,EAAM,KAAKt8I,CAAK,CAClB,CAEA,MAAMi+I,EAAoB3B,EAAM,MAAM,EAAGyB,CAAc,EACjDG,EAAiBH,IAAmB,OAAYzB,EAAM,MAAMyB,CAAc,EAAI,GAEpF,CAACE,EAAmBC,CAAc,EAAE,QAAQ,CAAC5B,EAAOjwJ,EAAK8xJ,IAAW,CAClE,MAAMxtJ,EAAO2rJ,EAAMA,EAAM,OAAS,CAAC,EAOhC,GANA3rJ,IAAS,QAAaA,EAAOmtJ,IAC9BxB,EAAMA,EAAM,OAAS,CAAC,EAAI,CAAC3rJ,EAAK,QAAQ,CAAC,GAG3C,KAAK,MAAQA,GAAQ,EAElB,CAAC2rJ,EAAM,OACR,OAGF,MAAM5yE,EAAY,KAAK,iBAAiB,KAAK,OAAQo0E,EAAOxB,CAAK,EAC9DjwJ,IAAS8xJ,EAAO,OAAS,GACvB,EAAE,KAAK,QAAU,KAAK,UACvB,KAAK,QAAU,KAAK,SAIxB,MAAM/jF,EAAMsP,EAAU,IAAKv7C,GAClB,KAAK,qBAAqBA,CAAG,CACrC,EAEI,aAAQ,KAAK,GAAGisC,CAAG,EACzB,EAED,KAAK,yBAA2B,GAClB31C,GAAA,KAAK,yBAA0B,IAAI,CACnD,CAoBO,SAAU,CAGjB,CAEA,OAAc,aAAa1iB,EAAiB,CACpC,MAAAgP,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,MAAQqrH,GACfrrH,EAAO,OAAS8qI,GACb95I,IAAW,SACZgP,EAAO,QAAQ,OAAShP,GAGnBgP,CACT,CAEA,OAAc,OAAOhP,EAAiB,CAC9B,MAAAgP,EAAS,KAAK,aAAahP,CAAM,EACjCsnH,EAAmB,IAAIyyB,GAC7B,OAAAzyB,EAAiB,KAAKt4G,CAAM,EAErB,CAAC,iBAAAs4G,EAAkB,OAAAt4G,EAC5B,CACF,CCzaA,MAAMqtI,GAAgB,GAChBC,GAAaC,IAA6Bhb,GAS3Bib,GAArB,MAAqBA,EAA8B,CAajD,aAAc,CACP,kBAAe,GACtB,CAEA,OAAc,YAAYz1J,EAAmD,CAC3E,IAAIg6E,EAAW,KAAK,UAAU,KAAMA,GAC3B7/B,GAAU6/B,EAAS,QAASh6E,CAAO,CAC3C,EAED,OAAIg6E,IACFA,EAAW,IAAIy7E,GACfz7E,EAAS,KAAKh6E,CAAO,EAChB,eAAU,KAAKg6E,CAAQ,GAGvBA,CACT,CAEO,KAAKh6E,EAAmD,CAU7D,KAAK,QAAUA,CACjB,CAEO,eAAeioB,EAA2B,CAK/C,OAAO,KAAK,mBAAmB,KAAK,QAAQ,GAAG,EAAE,KAAK,IAC7C,KAAK,WAAWA,CAAM,CAC9B,CACH,CAEQ,mBAAmBve,EAAa,CACtC,GAAG,KAAK,0BAA2B,OAAO,KAAK,0BAC/C,MAAMwiD,EAAM,KAAK,MAAQ,SAAS,cAAc,KAAK,EACrD,OAAAA,EAAI,YAAc,YACX,KAAK,0BAA4BrwC,GAA0BqwC,EAAKxiD,EAAK,EAAK,EAAE,KAAK,IACnF,CAAC8rJ,IAA6B,CAACD,GACzBrpG,EAGF,kBAAkBA,EAAK,CAC5B,YAAa,KACb,aAAc,KACf,EAAE,KAAMwpG,IACP,KAAK,YAAcA,EACZxpG,EACR,CACF,CACH,CAkCO,QAAQjkC,EAA2B,CACnC,cAAS,OAAOA,CAAM,EAEvB,KAAK,SAAS,OACC/S,GAAAugJ,GAA8B,UAAW,IAAI,EAE9D,KAAK,aAAa,QAKtB,CAEO,WAAWxtI,EAA2B,CACrC,MAAAlD,EAAUkD,EAAO,WAAW,IAAI,EAChC,CAAC,MAAA3B,EAAO,OAAAC,CAAU,EAAA0B,EAMlBk7C,EAAS,KAAK,aAAe,KAAK,MAExC,IAAIwyF,EAAaxyF,EAAO,MAAOyyF,EAAczyF,EAAO,OAGpD,MAAM0yF,GAAiB,IAAOlqH,GAAW,OAAS,KAAQ1jB,EAAO,IAC3D6sE,EAAQ+gE,EAAgBD,EAChBD,GAAA7gE,EACA8gE,EAAAC,EAEX,KAAK,QAAQ,MACd9wI,EAAQ,UAAY,OACpBA,EAAQ,SAAS,EAAG,EAAGuB,EAAOC,CAAM,EACpCxB,EAAQ,yBAA2B,mBAEnCA,EAAQ,yBAA2B,cAG/B,QAAKumB,GAAc,CACvB,QAAQlZ,EAAI,EAAGA,EAAI9L,EAAO8L,GAAKujI,EAC7B5wI,EAAQ,UAAUo+C,EAAQ/wC,EAAGkZ,EAAGqqH,EAAYC,CAAW,CACzD,EAGIl/B,GAAWnwG,EAASqvI,GAAe,EAGzC,GAFA,EAAEl/B,CAAO,EAENA,EAAU,EAAG,CACd,IAAIo/B,EAAOp/B,EACR,GACD,EAAEo/B,GAAQF,CAAW,QACfE,GAAQ,EAClB,CAEA,MAAMC,EAAOxvI,EAAS,EACtB,QAAQyvI,EAAUt/B,EAAUk/B,EAAaI,EAAUD,EAAMC,GAAWJ,EAClE,EAAEI,CAAO,CAWb,CAEO,oBAAoB/tI,EAA2B,CACpD,MAAMwrF,EAAmB,KAAK,IAAI,EAAG,OAAO,gBAAgB,EACtDntF,EAAQ,KAAK,QAAQ,MAAQmtF,EAC/B,IAAAltF,EAAS,KAAK,QAAQ,OAASktF,EAEnCxrF,EAAO,IAAMwrF,EACNxrF,EAAA,QAAQ,eAAiB,GAAK1B,EAClC5kB,GAAW,eAAiBw+D,GAAW,OAASm1F,KAAyB/uI,GAAA,KAC5E0B,EAAO,MAAQ3B,EACf2B,EAAO,OAAS1B,CAClB,CAEO,cAAe,CACd,MAAA0B,EAAS,SAAS,cAAc,QAAQ,EACzC,qBAAS,IAAIA,CAAM,EACxB,KAAK,oBAAoBA,CAAM,EACxBA,CACT,CAEO,OAAO3B,EAAeC,EAAgB,CAC3C,KAAK,KAAK,CACR,GAAG,KAAK,QACR,MAAAD,EACA,OAAAC,CAAA,CACD,EAED,MAAMja,EAA2B,GACvB,UAAA2b,KAAU,KAAK,SACvB,KAAK,oBAAoBA,CAAM,EAC/B3b,EAAS,KAAK,KAAK,eAAe2b,CAAM,CAAC,EAGpC,eAAQ,IAAI3b,CAAQ,CAC7B,CAEA,OAAc,gBAAgBga,EAAeC,EAAgB,CAC3D,OAAO,QAAQ,IAAI,KAAK,UAAU,IAAKyzD,GAAaA,EAAS,OAAO1zD,EAAOC,CAAM,CAAC,CAAC,CACrF,CAWF,EA9NEkvI,GAAe,UAA6C,GAD9D,IAAqBQ,GAArBR,GCrBA,SAAwBS,GAAarkH,EAAmB,CAClD,IAAA57B,EACD,OAAAgW,GAAS4lB,CAAM,EAChB57B,EAAM47B,EAAO,OACLo8E,GAAap8E,CAAM,EAC3B57B,EAAM47B,EAAO,GACL5hB,GAAc4hB,CAAM,IAC5B57B,EAAM47B,EAAO,aAGR57B,CACT,CCZA,SAAwBkgJ,GAAcn2J,EAAqE,CAIzG,GADoBA,EAAQ,aAAeA,EAAQ,eAAiBA,EAAQ,OAASA,EAAQ,gBAK7F,OAAGA,EAAQ,kBACF,SAGFA,EAAQ,OAAS,CAACA,EAAQ,QAAUA,EAAQ,WAAa,WAAa,QAC/E,CCXA,SAAwBo2J,GAAqBp2J,EAAiE,CAC5G,KAAM,CAAC,KAAAskB,EAAM,OAAArkB,EAAQ,SAAAK,CAAA,EAAYN,EAC3B8oB,EAASutI,GAA0Br2J,CAAO,EACzC,OAACskB,EAAMrkB,EAAQ6oB,EAAQxoB,CAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CAClE,CAEO,SAAS+1J,GAA0B,CACxC,YAAAC,EACA,cAAAr2B,EACA,MAAAlpH,EACA,YAAAw/I,CACF,EAAuE,CACjE,IAAAC,EACJ,OAAGv2B,IAIDu2B,EAAgB,OAHHv2B,EAAc,IAAK9gF,GACtBA,EAA0C,aAAgBA,EAAoC,QACvG,EAAE,KAAK,GAAG,CACgB,GACXm3G,MAAA,CAAC,EAAG,8BAIf,CADgCA,GAAa,EACpCC,IAAgB,QAAUA,EAAax/I,EAAOy/I,CAAa,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,CACvG,CAEO,SAASC,GAAsBz2J,EAAwD,CAC5F,OAAOm2J,GAAcn2J,CAAO,EAAI,SAAYA,EAAQ,SAAW,UAAY,SAC7E,CClBA,MAAM02J,GAAe,UACfC,GAAoB,SAEpBC,GAA0B,CAAC,UAAW,WAAW,EACjDC,GAA0B,CAAC,YAAa,YAAY,EAa1D,SAAwBC,GAAqB,CAC3C,KAAAvyH,EACA,KAAAjgB,EACA,SAAAqM,EACA,KAAA2gE,EACA,WAAAylE,EACA,gBAAAC,EAAkBL,GAClB,gBAAAM,EACA,OAAA1xI,CACF,EAA0B,CACxB,IAAI2xI,EAAgBH,GAAY,OAAS,IAAI,IAAIA,CAAU,EAAI,OAC/D,MAAMI,EAAW,IAAI,IAAI7yI,IAAS,KAAOsyI,GAAY,OAAOC,EAAW,EAAKvyI,IAAS,IAAMuyI,GAAcD,EAAY,EAE/GQ,EAAmB,IAChB7xI,GAAUgf,EAAK,cAAc,IAAMyyH,CAAe,GAAKzyH,EAAK,kBAG/D8yH,EAAmB,CAAC38B,EAAkB48B,IAAsB,CAChE,GAAG/xI,IAAWm1G,EACZ,OAGF,IAAI68B,EAAY,GACbhyI,IACWgyI,EAAA,GACLhyI,EAAA,UAAU,OAAOyxI,CAAe,GAGhCzxI,EAAAm1G,EACLn1G,IACGA,EAAA,UAAU,IAAIyxI,CAAe,EAEjCO,GAAatyG,GAAcqyG,GACX1rF,GAAA,CACf,UAAW3mB,EACX,QAAS1/B,EACT,SAAU,SACV,cAAe,IACf,KAAMjB,IAAS,IAAM,IAAM,IAC5B,EACH,EAGIkzI,EAAiB,CAACC,EAAwBC,IAAoB,CAC9D,IAAAC,EACD,OAAAD,EAAqBC,EAAAF,EAAc,oBAAsBlzH,EAAK,kBAC/CozH,EAAAF,EAAc,wBAA0BlzH,EAAK,iBAExDozH,CAAA,EAGHC,EAAiB,CAACH,EAAwBC,IAAoB,CAC5D,MAAA/xH,EAAW+xH,EAAS,qBAAuB,yBAC3CG,EAAcH,EAAS,oBAAsB,mBAC7CI,EAAcL,EAAc,wBAElC,IAAIE,EAAaF,EAAc9xH,CAAQ,GAAKpB,EAAKszH,CAAW,EAC5D,KAAMF,IAAeF,GAAe,CAC5B,MAAAM,EAAaJ,EAAW,wBAC9B,GAAGI,EAAW,IAAMD,EAAY,GAAKC,EAAW,IAAMD,EAAY,EAChE,MAGFH,EAAaA,EAAWhyH,CAAQ,GAAKpB,EAAKszH,CAAW,CACvD,CAEO,OAAAF,CAAA,EAGL,IAAAK,EACD1zI,IAAS,KACO0zI,EAAA,CAACP,EAAexhJ,IAC5BA,IAAQ,WAAaA,IAAQ,YAAoB2hJ,EAAeH,EAAexhJ,IAAQ,WAAW,EACzFuhJ,EAAeC,EAAexhJ,IAAQ,YAAY,EAG/C+hJ,EAAA,CAACP,EAAexhJ,IAAQuhJ,EAAeC,EAAexhJ,IAAQ,cAAgBA,IAAQ,WAAW,EAGhH,IAAA02C,EAAangD,GAAqB,CACpC,MAAMyJ,EAAMzJ,EAAE,IACd,GAAG,CAAC2qJ,EAAS,IAAIlhJ,CAAU,EAAG,EACzBA,IAAQ,SAAYqO,IAAS,MAAQrO,IAAQ,SAC9C4G,GAAYrQ,CAAC,EACbyrJ,EAAWb,GAAkB,GAG/B,MACF,CAIG,GAFHv6I,GAAYrQ,CAAC,EAEV+3B,EAAK,kBAAoB,EAAG,CAC7B,IAAIkzH,EAAgBL,IACJK,EAAAO,EAAeP,EAAexhJ,CAAU,EACxDohJ,EAAiBI,EAAe,EAAI,CACtC,GAGI,MAAAxyG,EAAaz/B,EAAgB+e,EAAM,YAAY,EAChDA,EAAA,UAAU,IAAI,gBAAgB,EAE7B,MAAAqX,EAAepvC,GAAkB,CACrC,MAAM+Y,EAASoM,GAAcnlB,EAAE,OAAuB+3B,CAAI,EACtDhf,GAIJ8xI,EAAiB9xI,EAAQ,EAAK,GAG1B+O,EAAW9nB,GAAa,CAC5BqQ,GAAYrQ,CAAC,EAEb,MAAM+Y,EAASoM,GAAcnlB,EAAE,OAAuB+3B,CAAI,EACtDhf,IAIJ8xI,EAAiB9xI,EAAQ,EAAK,EAC9B0yI,EAAWb,GAAkB,IAGzBa,EAAa,MAAM1yI,GAAoB,CACrC,MAAA2yI,EAAc,MAAMvnI,EAASpL,CAAM,GACtC2yI,IAAgB,OAAY,CAACA,EAAc5mE,IACrCy8B,GACT,EAGF,IAAIoqC,EAAW,GAAOnrF,EACtB,MAAMqI,EAAS,IAAM,CAChB8iF,IACQA,EAAA,GAGF,0BAAiBzB,GAAc/pG,EAAW,CAAC,QAAS,GAAM,QAAS,GAAM,EAClFpoB,EAAK,iBAAiB,YAAaqX,EAAa,CAAC,QAAS,GAAK,EAC5Dq7G,GAAsB1yH,EAAA,iBAAiB,YAAa1nB,EAAW,EAClEmwD,EAAmBlwD,EAAiBynB,EAAMjQ,EAAS,CAAC,WAAY2iI,EAAgB,IAG5ElpC,EAAS,IAAM,CACfoqC,IACOA,EAAA,GAEX,SAAS,oBAAoBzB,GAAc/pG,EAAW,CAAC,QAAS,GAAK,EAChEpoB,EAAA,oBAAoB,YAAaqX,CAAW,EAC9Cq7G,GAAsB1yH,EAAA,oBAAoB,YAAa1nB,EAAW,EACpDmwD,IACEA,EAAA,SAGforF,EAAc,IAAM,CACrBlB,GACcG,EAAA9yH,EAAK,kBAAmB,EAAK,GAGhD,GAAG2yH,EAAe,CAChB,MAAMmB,EAAa1rG,EACnBA,EAAangD,GAAM,CACd0qJ,EAAc,IAAI1qJ,EAAE,GAAG,IACxBqQ,GAAYrQ,CAAC,EAEb,SAAS,oBAAoBkqJ,GAAc/pG,EAAW,CAAC,QAAS,GAAK,EACzDA,EAAA0rG,EACH,0BAAiB3B,GAAc/pG,EAAW,CAAC,QAAS,GAAM,QAAS,GAAM,EAElEuqG,EAAA,OACJkB,IACd,CACF,MACS7yI,GACG6yI,IAGP,OAAA/iF,IAEA,CACL,OAAAA,EACA,OAAA04C,EACA,YAAAqqC,CAAA,CAEJ,CCrNwB,SAAAE,GAAqB94J,EAAaqoD,EAAmB,CAC3E,OAAOroD,EAAI,OAASqoD,EAAYroD,EAAI,MAAM,EAAGqoD,EAAY,EAAI,CAAC,EAAI,MAAQroD,EAAI,MAAM,CAAC,KAAK,MAAMqoD,EAAY,CAAC,CAAC,EAAIroD,CACpH,CCEA,SAAwB+4J,IAAgB,CACtC,KAAM,CAACC,EAAYC,CAAa,EAAI1pJ,GAAyBpN,GAAW,YAAY,EACxE,OAAAigB,GAAAjgB,EAAU,EAAE,eAAgB,CAAC2sB,EAAMi3B,IAAOkzG,EAAclzG,CAAE,CAAC,EAChEizG,CACT,g4BCqDaE,GAAkB5oJ,GAIY,CACzC,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,mBAAoB,eAAe,CAAC,EACxE,IAAI/N,EACJ,MAAMwN,GAAG,WAAA4S,EAAAC,KAAAqN,EACG1tB,EAAS,cAAA0tB,GAAAC,cAAAD,EAAAtN,CAAA,EAATpgB,EAASogB,EAAAwN,GAAAxN,EAAMghC,EAAI,OAAAtgC,EAAAV,EAC1BrS,MAAMif,QAAQ,EAAA5M,MAIb8iC,EAAa,IAAI/lB,GAAWhY,OAAWA,OAAWA,OAAWA,OAAWnlB,CAAS,EACvFkjD,SAAW0zG,iBAAmB7oJ,EAAM6oJ,iBACpC1zG,EAAW2zG,cAAgB9oJ,EAAM8oJ,cAEjChqJ,GAAU,IAAM,CACdq2C,EAAW36B,QAAO,CACpB,CAAC,EAEM/a,CACT,EAGMspJ,GAA6B,CAAC,OAAQ,KAAM,QAAQ,EACpDC,GAAkC5xI,OAYlC6xI,GAAsBA,CAAC,CAACn3J,aAAY3B,SAAQg/B,kBAAiBI,WAAUtoB,QAAOiiJ,YAA8H,IAAM,CACtN,MAAM1sJ,EAAW+yB,EAAS5W,IAAI,MAAMlf,GAAY,CAC9C,MAAMi2E,EAAaj2E,EAAQy0E,OACrB77E,EAA+B,GAC/B,CAACuiC,KAAG,EAAI/F,GAAkBs6H,2BAA2B,CACzDh5J,OAAQg/B,EAAkB/+B,EAAU+U,KAAQuqE,GAAcv/E,EAC1D8B,UAAW,GACXizC,WAAY,aACZ8C,UAAWkhH,IAAe,KAC1BzvJ,UACAwN,QAEAtV,YAAa,CACXG,YACD,EACDO,eACA7B,SAAU2+B,EAAoB11B,EAA4B2vJ,cAAgB5yJ,GAAWiD,EAA4B2vJ,aAAa,EAAIh5J,EAAU+U,KAAQiS,OACpJsX,WAAY,EACd,CAAC,EAED,aAAM9Z,QAAQya,IAAIh9B,CAAY,EACvBuiC,EAAIy0H,WACb,CAAC,EAED,OAAOz0I,QAAQya,IAAI7yB,CAAQ,CAC7B,EAEM8sJ,GAAsBp5J,GAAyB,CACnD,KAAM,CAAC4B,aAAY3B,SAAQK,WAAUyW,QAAOyoE,aAAYrgC,WAAU65G,YAAW,EAAGh5J,EAC1Ei/B,EAAkB,CAAC,EAAEh/B,IAAWC,EAAU+U,MAAQ3U,GACxD,IAAI+vH,EAAuDz/G,EAAU,GAAOyoJ,EAC5E,MAAMhsD,EAAW,SAAW,CAC1B,GAAGz8F,EACD,OAEFA,EAAU,GAEV,MAAMgtB,EAAWyyF,GAAaziH,KAAO,EAC/Bo+H,EAAe3b,GAAapwH,QAAUyG,GACtC4yJ,EAA+C,CACnDr5J,OAAQ+4J,IAAe,QAAU,CAACA,EAAa/4J,EAASyG,GACxDpG,SAAU04J,IAAe,QAAU,CAACA,EAAa14J,EAAW4mB,OAC5DnQ,QACAu/I,YAAa,CAAC1hJ,EAAG,0BAA2B,EAC5CgpB,WACAouG,eACA5wG,MAAO,GACPokD,aACAygD,cAAe9gF,EAAW,CAACA,CAAQ,EAA8Bj4B,OACjEmyI,WACAE,gBAAiBP,IAAe,SAChCQ,kBAAmB,CAAC,CAACR,EACrBzC,YAAayC,GAGT/iJ,EAAMmgJ,GAAqB,CAAC9xI,KAAMmyI,GAAsB6C,CAAqB,EAAG,GAAGA,CAAqB,CAAC,EAC/Gp5J,EAAUG,SAAS2R,mBAAmBynJ,6BAA6BxjJ,EAAK,EAAI,EAC5ErH,GAAU,IAAM,CACd1O,EAAUG,SAAS2R,mBAAmBynJ,6BAA6BxjJ,EAAK,EAAK,CAC/E,CAAC,EAED,MAAMjU,EAAS,MAAM9B,EAAUG,SAAS2R,mBAAmB0nJ,WAAWJ,CAAqB,EAC3F,GAAG,CAAC13J,EAAU,EACZ,OAGF,IAAIy9B,EACDr9B,EAAOq9B,UACRA,EAAWr9B,EAAOq9B,SAClBg6H,EAAWr3J,EAAOq3J,UAElBh6H,EAAWr9B,EAAOs9B,QAAQ7W,IAAK7a,GAAQnN,GAAgBk5J,iBAAiB15J,EAAQ2N,CAAG,CAAC,EAGtF,MAAMwqC,EAAW,MAAM2gH,GAAoB,CAAC,GAAG/4J,EAASi/B,kBAAiBI,UAAQ,CAAC,EAC9Ez9B,EAAU,IAIdkgG,EAAM5qF,IACJA,EAAMkoB,MAAQp9B,EAAOo9B,MACrBloB,EAAMijB,OAAO/L,KAAK,GAAGiR,CAAQ,EAC7BgxF,EAAchxF,EAASA,EAAS5/B,OAAS,CAAC,EACvCuC,EAAO01C,MAAMxgB,MACdhgB,EAAMm2F,SAAWnmF,QAGnBhQ,EAAMkhC,SAAShqB,KAAK,GAAGgqB,CAAQ,EACxBlhC,EACR,EACDtG,EAAU,KAGN,CAAC2B,EAAGuvF,CAAI,EAAIsD,GAA6D,CAACiI,UAAQ,CAAC,EACzF,OAAO96F,CACT,EAEMqnJ,GAA4B55J,GAAyB,CACzD,KAAM,CAAC4B,aAAY3B,SAAQ8W,OAAM,EAAG/W,EACpC,IAAI4Q,EAAU,GAAO7F,EAAS,EAC9B,MAAMsiG,EAAW,SAAW,CAC1B,GAAGz8F,EACD,OAEFA,EAAU,GAEV,MAAM5O,EAAS,MAAM9B,EAAUG,SAASoqJ,kBAAkBoP,gBAAgB,CACxE93H,GAAI9hC,EAAOumG,SAAU,EACrB19E,OAAQ,CAAClU,EAAG,4BAA6BmkC,EAAGhiC,CAAM,EAClDqkB,MAAO,GACPrwB,SACA+uJ,kBAAmB,EACrB,CAAC,EACD,GAAG,CAACl4J,EAAU,EACZ,OAGF,MAAMmT,EAAU/S,EAAOy1C,aAAahvB,IAAI+oB,EAAoB,EACtDllC,EAAWyI,EAAQ0T,IAAI,MAAMxoB,GAAW,CAC5C,MAAMM,EAAQ,MAAMqS,GAAc,CAAC3S,QAAM,CAAC,EACpCL,EAAOa,GAAgBisB,QAAQzsB,CAAM,EACrCH,EAAWH,GAAuBC,CAAI,EAAE,CAAC,EACzC26B,EAAM,IAAI5B,GAAI,CAClBp4B,OAAK,KAAAkiB,QAAAC,KAAAC,EAAAF,EAAAG,WAAAD,SAAA26D,YAAAz6D,EAAAF,EAEGpiB,CAAK,EAAAsiB,EAAAJ,EAAO3iB,IAAQ,WAAAyvB,EAAAN,KAAApM,SAAA0M,EAA8B,IAAGzvB,CAAS,EAAC,EAAAyvB,IAAQ,QAAA9M,IAE/D,EAChB8b,UAAW,EACb,CAAC,EAEDhE,EAAIx4B,UAAUokB,UAAUS,IAAI,2BAA2B,EAEvD,MAAMxlB,EAAO,GACPuiB,EAASkM,GAAU,CAAC5vB,SAAQmB,OAAMQ,YAAU,CAAC,EACnD24B,SAAI86E,YAAa,GAAEj0G,CAAK,EAAC,EAAE00C,OAAOnyB,EAAOhJ,IAAI,EAC7C,MAAMgJ,EAAOsG,kBAENsQ,EAAIx4B,SACb,CAAC,EAEKq2C,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EACvC1K,EAAU,IAIdkgG,EAAM5qF,GAAU,CACdA,EAAMkoB,MAASp9B,EAAmEo9B,OAASrqB,EAAQtV,OACnG,MAAMs6J,EAAY7iJ,EAAMijB,OAAO/L,KAAK,GAAGrZ,CAAO,EAC9ChK,SAASgvJ,EACNA,GAAa7iJ,EAAMkoB,QACpBloB,EAAMm2F,SAAWnmF,QAGnBhQ,EAAMkhC,SAAShqB,KAAK,GAAGgqB,CAAQ,EACxBlhC,CACT,CAAC,EACDtG,EAAU,KAGN,CAAC2B,EAAGuvF,CAAI,EAAIsD,GAA2B,CAACiI,UAAQ,CAAC,EACvD,OAAO96F,CACT,EAEA,SAASynJ,GAAalqJ,EAQnB,CACD,kBAAA8zC,EAAAp0B,GAAA,EAAAy8E,EAAAroD,EAAAhhC,WAAAkqF,EAAAb,EAAArpF,WAAAu0F,EAAAlL,EAAA3uB,YAAA85B,EAAAD,EAAAv0F,WAAAC,SAAAopF,EAAA,IAGOn8F,EAAMmqJ,YAAWntD,CAAA,EAAAjqF,EAAAopF,EAAA,IACjBn8F,EAAMoqJ,YAAWptD,CAAA,EAAAjqF,EAAAiqF,GAAA,WAAAhqF,EAAAC,EAGdjT,MAAMsvB,MAAK,IAAO,CAAC,YAAnBtc,EAAA,EACEte,EAAK,UAAU,GAAC,WAAAkqB,EAAA3L,EAAA,MAChBjT,EAAMqqJ,aAAY,CAAE,YAApBzrI,EAAA,EAAuBlqB,EAAK,WAAY,CAACsL,EAAMsvB,MAAK,CAAE,CAAC,EAAI56B,EAAK,KAAM,CAACsL,EAAM6J,MAAO,EAAG,EAAG7J,EAAMsvB,MAAO,EAAC,CAAC,UAAAg4E,EAAAnrC,QAOpG,IAAMn8D,EAAMqhF,SAAQ,EAAEtuE,EAAAu0F,EAE9B5yG,MAAKsL,EAAMqqJ,eAAiB,eAAiB,cAAc,CAAC,EAAA93I,GAAA6M,GAAA,OAAAC,EAjBvD3U,GAAW,qBAAsB1K,EAAMsqJ,eAAgB,GAAI,MAAM,EAAChrI,EAI7D5U,GAAW,2BAA4B1K,EAAMsvB,MAAO,IAAKlY,QAAa,MAAM,EAACmI,EAQhF7U,GAAW,2BAA4B,CAAC1K,EAAMsvB,MAAK,GAAM,MAAM,EAACjQ,WAAAD,EAAAC,KAAAG,GAAAs0B,EAAA10B,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAAw9E,EAAA59E,EAAAE,MAAA,EAAAC,IAAAH,EAAAG,MAAAC,GAAA6nF,EAAAjoF,EAAAG,MAAA,EAAAH,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,MAAA,GAAA08B,CAAA,IAUlF,CAEA,SAASy2G,GAAoBvqJ,EAE1B,CACD,kBAAAmoG,EAAA/L,KAAArpF,SAAAo1F,EAEKnoG,MAAMm1C,UAAU,EAAAgzD,CAAA,IAGvB,CAEA,SAASqiD,GAAgBxqJ,EAKtB,CACD,kBAAAooG,EAAAnL,KAAAlqF,SAAAq1F,EAEKpoG,MAAMyqJ,eAAc,EAAKzqJ,EAAM0qJ,sBAAwB1qJ,EAAM2qJ,mBAAmB,EAAAviD,CAAA,IAGvF,CAEA,SAASwiD,GAAoB5qJ,EAK1B,CACD,MAAM6qJ,EAAaA,CAACxxI,EAAqBmL,IAAwB,CAC/D,MAAMyoC,EAAMr6B,GAAa,CAACvZ,OAAMjN,UAAW,6EAA+EiN,CAAI,CAAC,EACzH4kG,EAASjxG,EAAiBigD,EAAKzoC,CAAO,EAC5C1lB,GAAUm/G,CAAM,EAEhB,MAAMr2E,EAAQtrC,EAAW,IACpB+c,IAAS,OACHrZ,EAAM6J,MAAO,IAAK,EAElB7J,EAAM6J,MAAO,IAAK7J,EAAMsvB,MAAK,EAAK,CAE5C,EAEDjyB,UAAa,IAAM,CACjB4vD,EAAI52C,UAAUyT,OAAO,SAAU8d,EAAO,GACtCqlB,EAAI52C,UAAUyT,OAAO,QAAS9pB,EAAMsvB,MAAO,GAAI,GAAK,CAAC,CACvD,CAAC,EAEM29B,GAGH1rC,EAAU,CACdspI,EAAW,KAAM7qJ,EAAM8qJ,mBAAmBn7C,KAAK,KAAM,IAAI,CAAC,EAC1Dk7C,EAAW,OAAQ7qJ,EAAM8qJ,mBAAmBn7C,KAAK,KAAM,MAAM,CAAC,CAAC,EAGjE3vG,EAAMu3B,KAAK8d,QAAQpjD,UAAU8qE,MAAM,GAAGx7C,CAAO,EAC7CziB,GAAU,IAAM,CACdyiB,EAAQ3K,QAAS0J,GAAW,CAC1BA,EAAOvE,OAAM,CACf,CAAC,CACH,CAAC,CACH,CAEe,SAASgvI,GAAa/qJ,EAalC,CACD,MAAM0oJ,EAAaD,KACbuC,EAAgB1uJ,EAAW,IAAMosJ,EAAU,IAAOr4F,GAAW46F,MAAM,EACnE,CAACC,EAAgBC,CAAiB,EAAIlsJ,GAAa,EAAK,EACxD,CAACmI,EAAOgkJ,CAAQ,EAAInsJ,GAAqB,EAAE,EAC3C,CAACqwB,EAAOykF,CAAQ,EAAI90G,GAAY,EAChC,CAACosJ,EAAYC,CAAa,EAAIrsJ,GAAY,EAC1C,CAACw1B,EAAM6oF,CAAO,EAAIr+G,GAAY,EAC9B,CAACswB,EAAUg8H,CAAW,EAAItsJ,GAAY,EACtC,CAACusJ,EAAgBC,CAAiB,EAAIxsJ,GAAY,EAClD,CAACs+F,EAAUmuD,CAAW,EAAIzsJ,GAAY,EACtC,CAACwW,EAAQk2I,CAAS,EAAI1sJ,GAA0BmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EAC1E,CAAC65D,EAAiBC,CAAkB,EAAI5sJ,GAAsB,EAAK,EACnE,CAAC6sJ,EAAcC,CAAe,EAAI9sJ,GAAY,EAC9C,CAAC+sJ,EAAmBC,CAAoB,EAAIhtJ,GAAY,EACxD,CAACq+E,EAAmB4uE,CAAoB,EAAIjtJ,GAAiCmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EACvG,CAAClQ,EAAkBsqE,CAAmB,EAAIltJ,GAAY,EACtD,CAACowC,EAAU+8G,CAAW,EAAIntJ,GAAuBmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EAC3E,CAACm3D,EAAYmD,CAAa,EAAIptJ,GAAyB+pJ,EAAmB,EAC1E,CAACsD,EAAqBC,CAAsB,EAAIttJ,GAAa,EAAK,EAClEqrJ,EAAiBhuJ,EAAW,IAAMsvJ,EAAe,GAAM,CAACE,EAAY,CAAE,EACtEU,EAAoBlwJ,EAAW,IAAM0uJ,EAAe,EAAGsB,EAAqB,EAAGpB,EAAc,CAAE,EAC/FuB,EAA2BnwJ,EAAW,IAAOkwJ,EAAiB,GAAMl9H,KAAWmF,KAAWrd,MAAS,EACnGs1I,EAAiBpwJ,EAAW,IAAM,CACtC,GAAGsvJ,EAAe,GAAMv8G,EAAQ,EAAI,OACpC,MAAMa,EAAS9oC,IACf,OAAO8oC,EAAOy8G,WAAW,GAAG,EAAIz8G,EAAOipC,MAAM,CAAC,EAAI/hE,MACpD,CAAC,EACKw1I,EAAYtwJ,EAAW,IAAMowJ,EAAgB,IAAKt1I,MAAS,EAC3Dy1I,EAAsBvwJ,EAAW,IAAM,CAC3C,GAAGswJ,EAAS,EAAI,MAAO,GACvB,MAAMjoJ,EAAUk9E,IACVD,GAAOtE,IACb,MAAO,CAAC,EAAE34E,GAAWi9E,IAAMjyF,OAC7B,CAAC,EACKm9J,EAAwBxwJ,EAAW,IAAMswJ,EAAW,GACpDG,GAA4BzwJ,EAAW,KAAO,CAAC0uJ,EAAe,GAAI,CAACc,EAAY,IAAOF,EAAe,CAAE,EACvG/gF,GAAWvuE,EAAW,IAAM0uJ,EAAe,GAAI6B,EAAqB,GAAqCL,EAAiB,CAAE,EAC5HjtJ,GAAYJ,KAEfa,EAAMgtJ,WACP3vJ,GAAa,IAAM,CACjB2C,EAAMgtJ,SAASniF,GAAQ,EAAIgiF,EAAqB,EAAE7B,EAAa,CAAE,CACnE,CAAC,EAEDlsJ,GAAU,IAAM,CACdkB,EAAMgtJ,SAAS,GAAO,GAAOhC,EAAe,EAC9C,CAAC,GAIH3tJ,GAAa,IAAM,CACjByzB,EAAYrQ,SAASqQ,EAAY1pB,MAAQpH,EAAMiH,MAAK,CAAE,EACtD4kJ,EAAmB,CAAC,CAAC7rJ,EAAM8rJ,aAAc,GACzCC,EAAgB/rJ,EAAM8rJ,aAAY,CAAE,EACpCM,EAAYpsJ,EAAMqvC,SAAQ,CAAE,EAE5B8xC,GAAQ,IAAM,CACZ1jD,GAAgB3M,EAAYhO,KAAK,CACnC,CAAC,CACH,CAAC,EAGDzlB,GAAa,IAAM,CACjB,KAAM,CAACsH,SAAO,EAAI8nJ,EAA0B,GAAI,GAChD,GAAG,CAAC9nJ,EACF,OAGF,MAAM8vB,GAAO9vB,EAAQg+D,kBACfukF,GAAkB,YAClBjlJ,GAAKwyB,GAAK2oE,cAAe,IAAG8pD,EAAgB,EAAC,EACnDjlJ,IAAMA,GAAGoU,UAAU0F,OAAOmrI,EAAe,EACzC,KAAM,CAACjpC,SAAO,EAAG+oC,GAAqB,CACpCvyH,QACAjgB,KAAM,IACNqM,SAAWpL,IAAW,CACpB,MAAMw3I,GAAa,CAAC,EAAE,CAACrB,EAAe,GAAME,EAAc,GAC1DH,EAAUl2I,EAAqB,EAC5Bw3I,IACDxpF,IAEH,EACDyjF,mBACAC,gBAAiB,GACjB1xI,OAAQ7X,GAAQ6X,CAAM,CACxB,CAAC,EAED3W,GAAU,IAAM,CACdm/G,IACF,CAAC,CACH,CAAC,EAED,MAAM5rF,GAAiC,CACrC7d,KAAM,gBACN04I,MAAOA,IAAM,CACX,GAAGhC,EAAc,GAAM9jJ,IACrBq8D,YACO,GAGTzjE,EAAM0iB,UAAO,CACf,GAEFT,GAAwBkrI,SAAS96H,EAAc,EAC/CvzB,GAAU,IAAM,CACdmjB,GAAwBmrI,WAAW/6H,EAAc,CACnD,CAAC,EAED,MAAMg7H,GAA6DA,CAAC3wJ,EAAG4wJ,GAAWx8H,EAAYyH,WAAWlH,YAAc,CACrH,GAAGy6H,EAAY,EAAI,CACjBpvJ,GAAKqQ,GAAYrQ,CAAC,EAClB4wJ,IAAYvB,EAAgB30I,MAAS,EACrC,MACF,CAEA,GAAGw0I,EAAe,EAAI,CACpBlvJ,GAAKqQ,GAAYrQ,CAAC,EAClB4wJ,IAAYzB,EAAmB,EAAK,EACpC,MACF,CAEA,GAAGyB,GAAU,CACX,GAAGtC,EAAa,EACd,OAGFhrJ,EAAM0iB,UAAO,CACf,GAGIoO,EAA2B,IAAIG,GAAY,CAC/CuO,YAAa,SACb/e,SAAU2qI,EACVmC,QAASF,GACTxvF,cAAestF,EACfqC,OAAQA,IAAM,CACZxtJ,EAAM0iB,UAAO,CACd,EACD+qI,gBAAiB,GACjB1vF,SAAU,GACV2vF,eAAiBtmJ,GACRA,IAAU,KACf,CAAC0pB,EAAY7+B,UAAUokB,UAAUi/F,SAAS,kBAAkB,GAC5D,CAAC,CAACluG,EAAMu2D,KAAI,EAEhBzsC,UAAW85H,EAAc,CAC3B,CAAC,EACDl6H,EAAY7+B,UAAUokB,UAAUS,IAAI,+BAA+B,EACnEga,EAAYhO,MAAMzM,UAAUS,IAAI,qBAAqB,EACrD,MAAM+lC,GAAangD,GAAqB,CACtC,GAAGA,EAAEyJ,MAAQ,YACX,OAGF,MAAMkrB,GAAUP,EAAYyH,WAAWlH,QAAO,EAC3CA,KAAYy6H,KAAkBF,EAAiB,IAChDyB,GAAaj2I,OAAWia,EAAO,GAGnCvf,GAAYgf,EAAYhO,KAAK,EAAE,UAAW+5B,EAAS,EACnD/9C,GAAU,IAAM,CACdgyB,EAAY/U,OAAM,CACpB,CAAC,EAED,MAAM4xI,GAAYx5G,GAAa,IAAKy5G,EAAQ,EACtCC,GAAWj9J,GAAKg7F,OAAO,cAAe,EAAI,EAAI,IAC9CkiE,GAAY35G,GAAa05G,GAAUD,EAAQ,EAC3CG,IAAQ,WAAAv8C,EAAAD,KAAAx+F,SAAAy+F,EAAuGq8C,EAAQ,EAAAt7I,GAAAiN,OAAAgyF,EAA9F9mG,GAAW,2BAA4BqiJ,GAA2B,GAAI,YAAY,CAAC,GAAAv7C,MAClH1gF,EAAY7+B,UAAU+zC,OAAO+nH,EAAuB,EACpD1wJ,GAA2BkrB,GAAa,CACtC,MAAMylI,GAAYpC,IACZqC,GAAarB,IAChBrkI,IACDA,EAASlS,UAAU0F,OAAO,UAAU,EAC/BwM,EAAS2lI,YACd3lI,EAASlS,UAAUS,IAAI,WAAW,EAClCgF,WAAW,IAAM,CACfyM,EAASxM,OAAM,CAChB,EAAE,GAAG,GAGR,MAAMpX,GAAUqnJ,IAChB,GAAGrnJ,GAAS,CACVA,GAAQ0R,UAAUS,IAAI,6BAA8B,UAAU,EAC9D,MAAMmnG,GAASjxG,EAAiBrI,GAAUjI,IAAM,CAC9CqQ,GAAYrQ,EAAC,EACVuxJ,GACD5B,IAEAN,GAEJ,EAAG,CAAC5E,gBAAiB,EAAI,CAAC,EAC1BroJ,GAAUm/G,EAAM,EAChBntF,EAAY7+B,UAAU+zC,OAAOrhC,EAAO,CACtC,CAEAmsB,SAAY7+B,UAAUskB,MAAMkC,YAAY,yBAA0Bs0I,GAAyB,EAAKe,GAAY,GAAK,IAAI,EACrHh9H,EAAY7+B,UAAUskB,MAAMkC,YAAY,qBAAsBw1I,GAAaN,GAAY,GAAK,IAAI,EAChG78H,EAAY7+B,UAAUskB,MAAMkC,YAAY,oBAAqB9T,GAAUA,GAAQupJ,YAAc,EAAI,GAAK,IAAI,EAC1Gp9H,EAAYq9H,eAAeH,IAAa,CAACrpJ,GAAU,gBAAmBspJ,GAAa,iBAAmB,QAAS,EACxGtpJ,EACT,CAAC,EAGDtH,GAAa,IAAM,CACjByzB,EAAY7+B,UAAUokB,UAAUyT,OAAO,mBAAsC4iI,EAAc,IAAO,EAAE,CACtG,CAAC,EAED,MAAM0B,GAAcpuJ,GAOd,CACJ,MAAMlO,GAAa8N,KAAmBgU,MAChC1c,GAAS0G,GAAQ,IAAM8nC,GAAek2E,aAAa,CACvDz1G,IAAKnG,EAAM7P,OACXM,MAAOuP,EAAMvP,MACbs3C,aAAc/nC,EAAM+nC,aACpBj2C,cACAozC,WAAY,GACZ8C,UAAW,EACZ,EAAC,EAQF,GANGhoC,EAAMs9B,SAAWlmB,QAClB/Z,GAAa,IAAM,CACjBnG,GAAOyN,QAAQ0R,UAAUyT,OAAO,SAAU9pB,EAAMs9B,OAAM,CAAE,CAC1D,CAAC,EAGAt9B,EAAMwkB,QAAS,CAChB,MAAMy5F,GAASjxG,EAAiB9V,GAAOyN,QAAUjI,IAAM,CACrDqQ,GAAYrQ,EAAC,EACbsD,EAAMwkB,QAAO,CACf,EAAG,CAAC2iI,gBAAiB,EAAI,CAAC,EAC1BroJ,GAAUm/G,EAAM,CAClB,CAEA,OAAGj+G,EAAMquJ,YACPruJ,EAAMquJ,WAAWn3J,GAAOsF,QAAQ,EAG3BtF,GAAOyN,SAGV2pJ,GAAoBtwI,GAIpB,CACJ,MAAM7tB,GAAS6tB,EAAOxJ,OAAS,OAASxU,EAAM7P,OAAU6tB,EAAOxJ,OAAS,KAAOpkB,EAAU+U,KAAO,SAC1F1U,GAAQiE,EAAM,gBAAespB,EAAOxJ,OAAS,OAAS,WAAawJ,EAAOxJ,OAAS,KAAO,aAAe,aAAc,EAAC,EAC9H,OAAAtB,EACGk7I,GAAUtuI,GAAA,CACT3vB,OAAQA,GACRM,MAAOA,EAAK,MACP,CAACutB,EAAOuwI,SAAW,CACtBjxH,OAAQA,IAAM4rH,MAAiBlrI,EAAOxJ,KACtCgQ,QAASA,IAAM6nI,EAAe73I,IAASA,KAASwJ,EAAOxJ,KAAOw0I,GAAsBhrI,EAAOxJ,IAAI,GAChG,KACDuzB,cAAY,QAAE/pB,EAAOxJ,OAAS,SAAW,oBAAsB4C,MAAS,MACxEi3I,YAAU,QAAErwI,EAAOqwI,UAAU,MAMnChxJ,GAAa,SAAW,CACtB,MAAMlN,EAAS27J,IACT0C,GAActF,IACdp3J,GAAa8N,KAAmBgU,MACtC,IAAIjP,IACDxU,GAAUq+J,MACX7pJ,GAAU,MAAM,IAAIiQ,QAASC,IAAY,CACvC,IAAIlQ,GACJ,MAAM0pJ,GAAa,MAAM7xJ,KACvB,MAAMoY,QAAQya,IAAI7yB,EAAQ,EACnBqY,GAAQlQ,EAAO,GAGrB6pJ,GACD7pJ,GAAU2pJ,GAAiB,CACzB95I,KAAMg6I,GACND,QAAS,GACTF,aACF,CAAC,EAED1pJ,GAAUypJ,GAAW,CACnBj+J,SACAk+J,aACF,CAAC,CAEL,CAAC,EACE,CAACv8J,GAAU,IAKhBm6J,EAAqBtnJ,EAAO,CAC9B,CAAC,EAED,MAAM8pJ,GAAa,GACbC,GAAa,IAEb5D,GAAsBz+F,GAA6B,CAEvD,IAAIu+D,GAAUn1G,IACd,GAAG,CAACm1G,GAAS,CACXA,GAAU+jC,GAAcvxD,cAA2B,gBAAgB,EACnEuuD,EAAU/gC,EAAO,EACjB,MACF,CAQA,GANGv+D,IAAc,OACfu+D,GAAUA,GAAQgkC,uBAElBhkC,GAAUA,GAAQikC,mBAGjB,CAACjkC,IAAW,CAACA,GAAQv0G,UAAUi/F,SAAS,eAAe,EACxD,OAIF,MAAMluF,GAAMwjG,GAAQh/C,UACdh2B,GAAe84G,GACrBC,GAAcj5G,UAAYtuB,GAAMwuB,GAAe,EAAIg1E,GAAQh1E,aAAe,EAE1E+1G,EAAU/gC,EAAO,GAGbkkC,GAAcA,CAAC,CAACziG,WAAqC,IACzDn5C,EACGkpG,GAAa,CACZ/iG,KAAMgzC,EAAS,mBACR3hD,GACL,oBACA,6BACC,CAAC4kB,KAAYs8H,KAAqB,CAACE,EAAe,IAAK,MAC1D,CAAC,EACD1hD,SAAQ,GACR5lF,QAASA,IAAM,CACbsmI,GAAmBz+F,CAAS,CAC9B,CAAC,GAKDhnC,GAAIyL,EAAYW,SAAS87C,gBAC/B,IAAIwhF,IACJ,WAAAn9C,EAAAC,KAAAx1C,GAAW0yF,GAAgB,cAAA1yF,IAAAz8C,cAAAy8C,GAAAu1C,CAAA,EAAhBm9C,GAAgBn9C,EAAA7+F,EAAA6+F,GAAA,WAAA1yF,GAAAjM,OACvB+3I,EAAe,aAAhB9rI,GAAA,IAAAhM,EAEI47I,GAAW,CAACziG,UAAS,KAAAn5C,IACrB47I,GAAW,CAACziG,UAAS,MAEzB,cAAAt5C,EAAA6+F,EACA9gF,MAAYW,SAAQ,MAAAmgF,CAAA,KAEvBvsF,GAAE03C,MAAMgyF,EAAgB,EAExB,MAAMC,GAA0BA,CAAC9F,EAAwBjiJ,KAAkB,CACzEstB,GAAagD,KAAK03H,aAAa,CAC7BhoJ,MAAOiiJ,GAAcjiJ,IAASmQ,OAC9BqyI,gBAAiBP,IAAe,UAAY9xI,OAC5CsyI,kBAAmB,CAAC,CAACR,GAAc9xI,OACnCovI,YAAav/I,IAASiiJ,EAAa,CAACpkJ,EAAG,0BAA0B,EAAIsS,OACrE5C,KAAMvN,IAASiiJ,EAAa/7E,GAAS+hF,OAASlvJ,EAAMqzE,SACpDozE,YAAayC,CACf,CAAC,GAIH7rJ,GAAgEgD,GAAS,CACvEA,MAAS,IACT,KAAM,CAAClQ,UAAQK,WAAS,EAAGwP,EACrBiH,GAAQG,IACRsoE,GAAao8E,IACbqD,GAAW7E,IACXx4J,GAAa8N,KAAmBgU,MAChCw7I,GAAe,CAACnoJ,GAAM02D,KAAI,GAAM12D,KAAU,IAC1CgnJ,GAAarB,IACbyC,GAAY,CAACF,IAAY9/G,IACzBm/G,GAActF,IAGpB,GAAGsF,IAAe,CAACvnJ,GAAO,CACxBolJ,IACA2C,GAAwB53I,OAAWA,MAAS,EAC5C,MACF,CAEAs0I,EAAY,IAAMt0I,EAAS,EAC3Bm0I,IACAE,IACAE,IAEA,MAAMl9G,IAAU0gH,GAAWrF,GAA2BR,IAAoB,CACxEx3J,cACA3B,UACAK,YACAyW,SACAyoE,cACArgC,SAAUggH,GACVnG,WAAYsF,EACd,CAAC,EAEKn9H,GAAU/0B,EAAW,IAAMgzB,EAAO,IAAK,GAAM2+H,IAAc3+H,MAAYlY,MAAU,EAEvF,IAAIm8B,IACM,WAAAu+D,GAAAx/F,KAAAkqD,GAEDjpB,GAAG,cAAAipB,IAAA58C,cAAA48C,GAAAs1C,EAAA,EAAHv+D,GAAGu+D,GAAA/+F,EAAA++F,IAAA,WAAA99D,GAAA/gC,EAGPoe,SAAS,aAAT2iB,GAAA,cAAA+9D,GAAAC,KAAAj/F,SAAAg/F,GAEIk8C,SAAe3+H,EAAO,IAAKlY,OAC1B1iB,EAAK,oBAAoB,EACzBA,EAAK,sBAAuB,CAAC5D,GAAc03J,GAAqBvhJ,GAAO,EAAE,CAAC,CAAC,CAAC,GAAE,MAAA8L,EAAAg/F,GAC/E,KAACk8C,KAAev+E,GACfh7E,EAAK,mBAAoB,CACL,IAAIwS,GAAU,CAAC/W,OAAQu/E,EAAU,CAAC,EACnC/qE,OACf,CAAC,EACLjQ,EAAK,eAAgB,CAAC5D,GAAc03J,GAAqBvhJ,GAAO,EAAE,CAAC,CAAC,CAAC,GACtE,MAAA8qG,EAAA,kBAAAE,GAAA3/F,KAAAS,SAAAk/F,GAAA,IAKExjE,GAAQ,EAACnG,QAAQ,EAAA2pE,EAAA,KAAAh/F,GAAA,WAAAygC,GAAAzgC,EAAA,MAEnBw7B,GAAM,EAAGnG,QAAQ,QAAjBoL,UAAAw+D,IAEJ,YAAA3/F,GAAA,IAAAiN,GAAAsyF,GAtBMpnG,GAAW,CAAC9M,GAAQotJ,CAAa,GAAK,8BAA+B,WAAY35H,GAAS,GAAI,UAAU,CAAC,GAAAygF,KAwBnH,EAED,IAAIj6G,GAAQ,GACZ,MAAMyZ,GAAU4pH,IAA+B,CAC1CrjI,KACDi5B,EAAYotC,cAAc,EAAK,EAC/Bo/C,EAAQ,CAAC34G,QAAS4uC,GAAK/+B,KAAM26I,GAAW,UAAY,UAAU,CAAC,EAC/DR,GAAcj5G,UAAY,EAC1B79C,GAAQ,GAGL+F,GAAQotJ,CAAa,GAAK,CAACmE,IAC5BxD,EAAU/tJ,GAAQ2xB,CAAQ,GAAK2rG,EAAY,KAK9CszB,KAAgBnuJ,EAAK6oJ,YAAesF,IAAevnJ,KAAU5G,EAAK4G,SACnEjH,EAAMsvJ,qBAAkB,EACxBN,GAAwBR,GAAavnJ,EAAK,GAG5C,MAAMzJ,GAAU,CAAC0rJ,WAAYsF,GAAavnJ,UAE1C,MAAG,CAACkoJ,IAAY,CAACz/E,IAAc,CAAC2/E,IAAaD,IAC3Cr7C,IACAu3C,IACAh6I,KACO9T,KAGTH,GACEC,GACE,IAAMmxC,GAAM,EACZ,CAAC,CAACnG,YAAUje,UAAQiF,SAAOiuE,WAAQ,IAAM,CACvCwW,EAASzrE,GAAS34C,MAAM,EACxB27J,EAAch8H,EAAK,EACnBo8H,EAAY,IAAMnuD,EAAQ,EACvB4xD,GAAU1D,EAAkBphI,EAAa,EACvCkhI,EAAYlhI,EAAa,EAC9B/Y,GAAQg3B,GAA2B,CAAC,CAAC,CACvC,EACA,CAAC5rB,MAAO,EACV,EACF,EAEAoU,EAAYotC,cAAc,EAAI,EAC9BtgE,GAAQ,IAAM6wC,KAAS8uD,SAAU,GAC1B//F,GACT,CAAC,EAGDH,GACEC,GACEmY,EACCA,GAAW,CACV,MAAMhiB,GAAMgiC,GAAWhgB,CAAM,EAC7B,GAAGhiB,KAAQ,GACT,OAGF,GAAG62J,EAAc,EAAI,CACnB,MAAMn6J,GAASq7J,IAAiB/3J,EAAG,EACnC8J,GAAM,IAAM,CACVwuJ,EAAgB57J,EAAM,EACtB2gC,EAAYrQ,SAASqQ,EAAY1pB,MAAQ,EAAE,CAC7C,CAAC,EACD,MACF,CAEA,MAAMmoJ,GAAiB95I,EAAO23D,cAAcgwB,cAAc,SAAS,EAChEmyD,IACDA,GAAel5I,UAAU0F,OAAO,QAAQ,EAG1CtG,EAAOY,UAAUS,IAAI,QAAQ,EAE7By1I,EAAuB,EAAK,EAE5B,MAAM9yJ,GAAU81B,IAAW97B,EAAG,EAC9B8gC,GAAagD,KAAK03H,aAAa,CAAC9hE,UAAW1zF,GAAQqE,IAAK0zH,cAAe/3H,GAAQtJ,MAAM,CAAC,CACxF,EACA,CAACusB,MAAO,EACV,EACF,EAEA,MAAM8yI,GAAsBjyE,IACnB,CACLz4E,EAAG,gBACHwqB,MAAOiuD,EAAIjuD,MACX+f,SAAUkuC,EAAIluC,WAIZogH,GAA0B7tE,IACvB,CACL98E,EAAG,mBACHkY,OAAQ,CAAC0yI,kBAAmB,EAAK,EACjChiI,QAASk0D,EAAKjpE,IAAI62I,EAAkB,IAIlCG,GAAcA,CAAC,CAAC3jF,cAAa4V,OAAmC,IAAM,CACvE5V,IAAgBhsE,EAAMxP,UAIzB07J,EAAqBtqE,EAAI,GAE3B9vE,GAAY1hB,CAAS,EAAE,aAAcu/J,EAAW,EAGhDtyJ,GAA2BuyJ,GAAiB,CAC1C,MAAMhuE,GAAOtE,IACP34E,GAAUk9E,IAChB,GAAG,CAACD,IAAQ,CAACj9E,GACX,OAAOirJ,EAGT,MAAMC,GAAqC,CACzC,GAAGlrJ,GAAQ23G,WAAY,EACvBt6B,UAAWytE,GAAuB7tE,EAAI,GAIlCytE,GAAYhgH,IAClB,IAAIygH,GACJ,GAAGT,GAAW,CACZ,MAAMpyE,GAAgB4yE,GAAiB7tE,UAAUt0D,QAAQhW,KAAMulE,IAAkB7B,GAAe6B,GAAc5tC,SAAUggH,EAAS,CAAC,EAC/HpyE,KACD6yE,GAAsB7yE,GACtBA,GAAc8yE,aAAe,EAEjC,CAKA,GAHAH,GAAc7zI,OAAM,EACpBpX,GAAQiiC,OAAOipH,EAAgB,EAE5BC,GAAqB,CACtB,MAAM/tE,GAAkBp9E,GAAQqrJ,UAAS,EAAGt4I,KAAM/S,IAAYy2E,GAAez2E,GAAQs4E,cAAc5tC,SAAUggH,EAAS,CAAC,EACvHvzF,GAAiB,CACf7pE,UAAWg+J,GACXtrJ,QAASo9E,GACT/lB,SAAU,SACVC,KAAM,GACR,CAAC,CACH,CAEA,MAAMl9D,GAAUQ,KAEhB,GADAoF,GAAQ0R,UAAUyT,OAAO,YAAa,CAAC/qB,EAAO,EAC3C,CAACA,GAAS,CACX,MAAMsa,GAAa,eACbg2B,GAAW,IAAI2tC,GACrB3tC,GAAS5mB,KAAK8yD,GAAmB20E,IAAKtwJ,GAAkB,EAACgU,IAAG,CAAE,EAC9Dy7B,GAAS4tC,cAAgB,CACvBn4E,EAAG,gBACHwqB,MAAO,EACP+f,SAAUh2B,IAEZg2B,GAAS8gH,oBAAoB,EAAK,EAClC9gH,GAAS+gH,cAAch5I,OAAW1iB,EAAK,QAAQ,CAAC,EAChD26C,GAASh5B,UAAUS,IAAI,mBAAmB,EAE1C,MAAMu5I,GAAsB3tJ,SAAS6Y,cAAc,KAAK,EACxD80I,UAAoBh6I,UAAUS,IAAI,mBAAoB,uBAAuB,EAC7Eu5I,GAAoBrqH,OAAO50C,GAAKioB,EAAI,CAAC,EACrCg2B,GAASihH,iBAAiB97C,OAAO67C,EAAmB,EAEpD1rJ,GAAQw7D,QAAQ9wB,EAAQ,EACjBA,EACT,CACF,CAAC,EAGDhyC,GAAa,IAAM,CACjB,GAAG2C,EAAM7P,SAAWC,EAAU+U,KAAM,CAClCgnJ,IACAD,IACA,MACF,CAEA,MAAM/3B,EAAiBv0H,KAAmBgU,MACpCwG,GAAmBva,KACzBf,GAAU,IAAM,CACdgd,WAAW,IAAM,CACf1B,GAAiBI,QAAO,CACzB,EAAE,GAAG,CACR,CAAC,EACD,MAAMqnE,GAAmB,IAAIC,GAC7BD,GAAiBp5D,KAAK,CACpBxT,QAAS,CAAC9kB,OAAQ6P,EAAM7P,OAAQ2N,IAAK,EAAGkkF,UAAWytE,GAAuB,EAAE,CAAE,EAC9Ej7I,KAAM+mE,GAAmBg1E,MACzBz+J,WAAYsoB,GAAiBxG,IAAK,EAClCsuE,aAAc,EAChB,CAAC,EACDL,GAAiBxrE,UAAU0F,OAAO,kBAAkB,EACpD8lE,GAAiBxrE,UAAUS,IAAI,8BAA8B,EAG7D,MAAMmnG,GAASjxG,EAAiB60E,GAAmBnlF,IAAM,CACvD,MAAMqlF,GAAkBrsE,EAAgBhZ,GAAE+Y,OAAQ,cAAc,EAChE,GAAG,CAACssE,GACF,OAGF,GAAG,CAACxiF,GAAS,EAAI,CACfonC,GAAakmB,KAAK,CAAC8yF,QAAS,YAAY,CAAC,EACzC,MACF,CAEA,KAAM,CAAC1iE,gBAAc,EAAG8E,GAClB,CAAC1yC,WAAS,EAAG4tC,GACnBmvE,EAAa/rJ,IAAS,CACpB,GAAG+6E,IAAe/6E,GAAMgvC,EAAQ,EAIhC,OAAOA,EACT,CAAC,EAED5R,GAAgB3M,EAAYhO,KAAK,CACnC,EAAG,CAACqkI,gBAAiB,EAAI,CAAC,EAC1BroJ,GAAUm/G,EAAM,EAEhB,MAAMrqG,GAAMA,IAAM,CAChBxjB,EAAUG,SAASigK,oBAAoBC,qBAAqBzwJ,EAAMxP,QAAQ,EAAE4lB,KAAMwrE,IAAS,CAErFuyC,EAAc,IAIlBg4B,EAAoBtqE,EAAgB,EACpCqqE,EAAqBtqE,EAAI,EAC3B,CAAC,GAGHhuE,KACAxjB,EAAU6jB,iBAAiB,mBAAoBL,EAAG,EAClD9U,GAAU,IAAM,CACd1O,EAAUsgK,oBAAoB,mBAAoB98I,EAAG,CACvD,CAAC,CACH,CAAC,EAGD,IAAI/b,GAAQ,GACZwF,GAAaC,GACX+xC,EACCA,GAAa,CACTx3C,KACDA,GAAQ,GAEL,CAACw3C,IAKN9a,GAAagD,KAAK03H,aAAa,CAC7B9+B,cAAe9gF,EAAW,CAACA,CAAQ,EAA6Dj4B,MAClG,CAAC,CAEL,EAAC,EAGDtY,GAAU,IAAM,CACVuwC,EAAQ,GAIZ9a,GAAagD,KAAK03H,aAAa,CAAC9hE,UAAW/1E,OAAWo6G,cAAep6G,OAAWm2G,eAAgBn2G,OAAW+4G,cAAe/4G,MAAS,CAAC,CACtI,CAAC,EAGDtY,GAAU,IAAM,CACXy1B,GAAagD,KAAK/iB,OAAS24D,GAAS+hF,QAIvCF,GAAwB53I,OAAWA,MAAS,CAC9C,CAAC,EAGD/Z,GAAa,IAAM,CAEjB,GADAyzB,EAAY6/H,aAAa3F,EAAa,CAAE,EACrC,CAACA,EAAa,EACf,OAGF,MAAMnhJ,EAAQA,IAAM4rB,GAAWhgB,EAAQ,GAEjCm7I,GAAgB1G,GAAa,CACjCrgJ,QACAylB,MAAO+7H,EACPjB,eACAD,eACAE,aAAcmC,EACdnrE,SAAUA,IAAM,CACdkrE,EAAwBlsJ,IAAS,CAACA,EAAI,CACvC,EACDiqJ,gBACF,CAAC,EAEKuG,GAAiBtG,GAAoB,CACzCp1G,aACF,CAAC,EAEK27G,GAAatG,GAAgB,CACjCG,uBACAD,yBACAtoE,aAAcA,IAAM,CAAC,CAAC2uE,GAA0B,EAChDtG,eAAgBA,IAAM,CAAC,CAACuG,GAA2B,CACrD,CAAC,EAEDpG,GAAoB,CAClB/gJ,QACAylB,MAAO+7H,EACP9zH,KAAMv3B,EAAMu3B,KACZuzH,qBACF,CAAC,EAED,MAAMmG,GAA8BA,CAAC7pJ,GAAQklJ,MAA0B,CACrEtsJ,EAAMu3B,KAAK8d,QAAQpjD,UAAUokB,UAAUyT,OAAO,wBAAyB1iB,EAAK,EAC5EypJ,GAAex6I,UAAUyT,OAAO,SAAU1iB,EAAK,GAG3C8pJ,GAAe9pJ,IAAoB,CACvCA,QAAU,CAAC,EAAE2pJ,MAA8BC,GAA4B,IACvEhxJ,EAAMu3B,KAAKirG,OAAOvwI,UAAUokB,UAAUyT,OAAO,oBAAqB1iB,EAAK,EACvEypJ,GAAex6I,UAAUyT,OAAO,oBAAqB1iB,EAAK,EACvDA,GAAOnV,GAAU8qE,MAAM+zF,EAAU,EAC/BA,GAAW/0I,UAGlB1e,GAAa,IAAM4zJ,GAA2B,CAAE,EAChD5zJ,GAAa,IAAM6zJ,GAAW,CAAE,EAEhC7zJ,GAAa,IAAM,CACditJ,EAAc,EACfiC,EAAuB,EAAI,EAClBX,KACTW,EAAuB,EAAK,CAEhC,CAAC,EAEDztJ,GAAU,IAAM,CACd8xJ,GAAc70I,OAAM,EACpBwwI,EAAuB,EAAK,EAC5B0E,KACAC,GAAY,EAAK,EAEjBp1I,WAAW,IAAM,CACf+0I,GAAe90I,OAAM,CACtB,EAAE,GAAG,CACR,CAAC,EAED/b,EAAMu3B,KAAKzU,MAAMi+B,UAAUyzD,OAAOq8C,GAAgBD,EAAa,CACjE,CAAC,EAED,MAAMO,GAAyB70J,EAAW,IAAM,CAC9C,GAAG,CAACkwJ,EAAiB,EACnB,MAAO,GAGT,MAAM78J,EAAS2/B,IACf,GAAG3/B,IAAWynB,QAAa,CAACw1I,IAC1B,MAAO,GAGT,MAAMwE,GAAkB,EAAI,EAC5B,IAAI36I,GACJ,OAAI9mB,EAEM8kC,EAAI,EAAGjgB,OAAS,UACxBiC,GAAS,EAAI26I,GAAkBzhK,EAAS,GAExC8mB,GAAS,EAAI26I,GAAkBzhK,EAAS,GAJxC8mB,GAASg4I,GAOJ54I,KAAK22B,IAAIkiH,GAAYj4I,EAAM,CACpC,CAAC,EAEKs6I,GAA2Bz0J,EAAW,IACtCuuE,GAAQ,GAILgiF,EAAmB,EAAK,GAHtB,CAIV,EAEKmE,GAA6B10J,EAAW,IACxCuuE,GAAQ,GAILiiF,EAAqB,EAAK,GAHxB,CAIV,EAEK1C,GAAcpqJ,EAAMqxJ,iBAAen+I,EACtCkpG,GAAa,oBACL1xG,GAAW,CAACsgJ,EAAe,GAAI,mCAAmC,CAAC,EAC1E3xI,KAAI,aAAAk6B,IACE5uC,GAAY,CAChB,MAAMs5G,GAASjxG,EAAiBrI,EAAUjI,IAAM,CAC9CqQ,GAAYrQ,EAAC,EACbo0B,EAAYrQ,SAASqQ,EAAY1pB,MAAQ,EAAE,EAC3CykJ,EAAmB,EAAI,EACvBpuH,GAAgB3M,EAAYhO,MAAO,EAAI,CACzC,EAAG,CAACqkI,gBAAiB,EAAI,CAAC,EAC1BroJ,GAAUm/G,EAAM,CAClB,EAEH,EAEKksC,GAAcnqJ,EAAM2iJ,YAAUzvI,EACjCkpG,GAAa,CACZ/iG,KAAI,WACJmL,QAASA,IAAM,CACbvE,GAAainF,YACX34B,GACA,IAAIoqB,KACJ34F,EAAM2iJ,UACR,EAAE91F,MACJ,EAEH,EAED,IAAI8hG,GACJ,MAAMx5G,GAAUjiC,EACb01I,GAAc9oI,GAAA,CAAAyzB,IAAAgpB,EAAA,OAAAusC,GACR6lD,GAAa,OAAA7lD,kBAAAvsC,CAAA,EAAboyF,GAAapyF,CAAA,OACb,CAACyuF,KAAmB,CACvB73I,MAAO,4DACPoD,MAAO46I,GAAsB,EAAK,CAAC16I,OAAQ06I,GAAsB,EAAK,IAAI,EAAI/5I,QAC/E,CACDyxI,iBAAkBA,IAAM,CACtBtrD,EAAU,KACX,MAAAt+E,UAAA,QAAAhM,EAAA,IAEAA,EAAA,KAAC+3I,EAAe,MAAAsG,GAAA,CAAoD,EAAAp+I,EACpEkoD,GAAQ,CAAC5mD,KAAI,iBAAAyK,UAAA,QACXwV,EAAM,GAAE9vB,OAAO,KAGrB,IAED,IAAIsrJ,GACJ,MAAMtF,GAAmBz3I,EACtBopD,GAAc,CAAA/oB,IAAAgpB,EAAA,OAAAg1F,GAAMtB,GAAsB,OAAAsB,kBAAAh1F,CAAA,EAAtB0zF,GAAsB1zF,CAAA,sDAAAt9C,UAAA,OAAAuyI,IAAA,EAAAv+I,EAAA,IAExC4uE,GAAkB,EAAA2vE,GAAA,IAGtB,EAED,IAAIC,GACJ,MAAM/G,GAAqBx3I,EACxBopD,GAAc,CAAA/oB,IAAAgpB,EAAA,OAAAm1F,GAAMD,GAAwB,OAAAC,kBAAAn1F,CAAA,EAAxBk1F,GAAwBl1F,CAAA,sDAAAt9C,UAAA,QAAAuyI,GAAA,cAAAG,EAAAC,KAAA7+I,SAAA4+I,EAAA,IAGxC5I,GAAapwI,IAAKnE,IAAItB,EAAOo7I,GAAgB,CAAC95I,KAAMA,EAAI,EAAK,CAAC,EAAAm9I,CAAA,KAAAH,GAAA,IAIpE,EAED,IAAIv/J,GACJ,YAAA4/J,QAAAC,KAAAC,GAAAF,EAAA/+I,WAAAi/I,GAAAj/I,WAAA,MAAAk/I,GACY//J,GAAS,cAAA+/J,IAAApyI,cAAAoyI,GAAAH,CAAA,EAAT5/J,GAAS4/J,EAAA9+I,EAAAg/I,GAQdjhI,MAAY7+B,UAAS,MAAA8gB,EAAAg/I,IAAA,WAAAn+G,GAAA3gC,OACW+3I,EAAe,aAAhBp3G,GAAA,SAAAq+G,SAAAC,KAAAD,UAAAn/I,WAAAC,EAAAk/I,GAM3BtH,GAAmB,MAAAp4I,GAAAqF,IAAAqpE,GAAAgxE,GAHblB,GAAwB,EAAK,CAACt6I,OAAQs6I,GAAwB,EAAK,MAAQ35I,OAASQ,EAAA,GAAAq6I,MAK9F,WAAAl/I,EAAAg/I,IAAA,WAAAI,GAAAl/I,OACgC+3I,EAAe,aAAhBmH,GAAA,SAAAC,SAAAF,KAAAE,UAAAt/I,WAAAC,EAAAq/I,GAM3B1H,GAAqB,MAAAn4I,GAAAqF,IAAAqpE,GAAAmxE,GAHfpB,GAA0B,EAAK,CAACv6I,OAAQu6I,GAA0B,EAAK,MAAQ55I,OAASQ,EAAA,GAAAw6I,MAKlG,WAAAr/I,EAAAg/I,GACA,KAAC/G,EAAa,GAAM71G,GAAU,MAAApiC,EAAA8+I,GAAA,WAAAQ,GAAAp/I,OAE/B+3I,EAAe,aAAhBqH,GAAA,eAAAC,GAAAC,KAAAx/I,SAAAu/I,GAEIlI,KAAW,WAAAoI,GAAAlgJ,KAAAS,SAAAy/I,GAEPpI,EAAW,EAAA73I,OAAAiN,GAAAgzI,GADF9nJ,GAAW,8BAA+BkhJ,EAAe,GAAMgB,EAAS,IAAO,WAAW,CAAC,GAAA4F,KAGxG,QAAAz/I,EAAAu/I,GACAnI,KAAW,WAAAsI,GAAAngJ,KAAAS,SAAA0/I,GAEPtI,EAAW,EAAA53I,GAAAiN,OAAAizI,GADF/nJ,GAAW,6BAA8BkiJ,EAAW,GAAI,WAAW,CAAC,GAAA6F,KAGjF,QAAAH,MAEJ,WAAA//I,GAAAiN,OAAAuyI,GAxCQrnJ,GAAW,+BAAgCmgE,GAAU,GAAI,YAAY,CAAC,GAAAgnF,CAAA,IA2CrF,CAAC1zF,GAAA,WCpyCM,SAASu0F,GAAuBv6I,EAA2B,CAC1D,MAAAlD,EAAUkD,EAAO,WAAW,IAAI,EAEhCw6I,EAAQ,IAAI,MAAM,CAAC,EAAE,KAAK,CAAC,EAC3B3O,EAAS/uI,EAAQ,aAAa,EAAG,EAAGkD,EAAO,MAAOA,EAAO,MAAM,EAAE,KACjEy6I,EAAe5O,EAAO,OAAS,EACrC,QAAQnwJ,EAAI,EAAGA,EAAImwJ,EAAO,OAAQnwJ,GAAK,EAE/B8+J,EAAA,CAAC,GAAK3O,EAAOnwJ,CAAC,EACpB8+J,EAAM,CAAC,GAAK3O,EAAOnwJ,EAAI,CAAC,EACxB8+J,EAAM,CAAC,GAAK3O,EAAOnwJ,EAAI,CAAC,EACxB8+J,EAAM,CAAC,GAAK3O,EAAOnwJ,EAAI,CAAC,EAGpB,MAAAg/J,EAAW,IAAI,kBAAkB,CAAC,EACxC,OAAAA,EAAS,CAAC,EAAIF,EAAM,CAAC,EAAIC,EACzBC,EAAS,CAAC,EAAIF,EAAM,CAAC,EAAIC,EACzBC,EAAS,CAAC,EAAIF,EAAM,CAAC,EAAIC,EACzBC,EAAS,CAAC,EAAIF,EAAM,CAAC,EAAIC,EAElBC,CACT,CAEgB,SAAAC,GAA4BC,EAAgCv8I,EAAeC,EAAgB,CACnG,MAAA0B,EAAS,SAAS,cAAc,QAAQ,EACxC6sE,EAAQxuE,EAAQC,EAChBu8I,EAAa,GACnB,OAAGhuE,IAAU,GACX7sE,EAAO,MAAQ66I,EACR76I,EAAA,OAASA,EAAO,MAAQ6sE,GACvBA,EAAQ,GAChB7sE,EAAO,OAAS66I,EACT76I,EAAA,MAAQA,EAAO,OAAS6sE,GAExB7sE,EAAA,MAAQA,EAAO,OAAS66I,EAGjB76I,EAAO,WAAW,IAAI,EAC9B,UAAU46I,EAAa,EAAG,EAAGv8I,EAAOC,EAAQ,EAAG,EAAG0B,EAAO,MAAOA,EAAO,MAAM,EAC9Eu6I,GAAuBv6I,CAAM,CACtC,CAEO,SAAS86I,GAAsBp8I,EAAyB,CAC7D,OAAOi8I,GAA4Bj8I,EAAOA,EAAM,aAAcA,EAAM,aAAa,CACnF,CAEA,eAAsBq8I,GAAaC,EAAkB,CAC7C,MAAA/2G,EAAM,SAAS,cAAc,KAAK,EAClC,aAAArwC,GAA0BqwC,EAAK+2G,EAAU,EAAK,EAC7CF,GAAsB72G,CAAG,CAClC,CCvDA,SAAwBg3G,GAAkBC,EAAyC,CACjF,GAAI,CAAC,EAAAz6J,EAAG,EAAAlD,EAAG,EAAAqkI,GAAKu5B,GAAWD,EAAK,CAAC,EAAGA,EAAK,CAAC,EAAGA,EAAK,CAAC,CAAC,EACpD,OAAG39J,EAAI,IACLA,EAAI,KAAK,IAAI,IAAKA,EAAI,EAAI,IAAO,IAAMA,EAAE,GAE3CqkI,EAAI,KAAK,IAAI,EAAGA,EAAI,GAAG,EAEV,QAAQnhI,CAAC,KAAKlD,CAAC,MAAMqkI,CAAC,QAErC,CCwDY,IAAA5sD,QACVA,EAAA,KAAO,OACPA,EAAA,OAAS,SACTA,EAAA,WAAa,aACbA,EAAA,UAAY,YACZA,EAAA,QAAU,UACVA,EAAA,MAAQ,QACRA,EAAA,OAAS,SAPCA,QAAA,IAWC,MAAAomF,GAA6C,CAAC,QAAS,oBAAqB,kBAAmB,gBAAiB,aAAc,cAAe,aAAa,EAEvK,MAAqBC,WAAa/xI,EAE/B,CAiFD,YACS8S,EACAhkC,EACAkjK,EACAC,EAGF,GACL,CACM,QARC,kBAAAn/H,EACA,cAAAhkC,EACA,gBAAAkjK,EACA,kBAAAC,EAOF,SAAM3iI,GAAO,OAAQyF,GAAS,IAAMA,GAAS,KAAOA,GAAS,MAAQA,GAAS,KAAK,EAEnF,SAAI,KAAK,aAAa,EAE3B,KAAK,KAAO,OACP,oBAAiB,QAAQ,KAAK,MAAM,KAAK,OAAO,EAAI,KAAK,CAAC,GAC/D,KAAK,iBAAmB32B,KACxB,KAAK,wBAA0BA,KAE/B,KAAK,iBAAmB,GAEpB,KAAK,aAAa,WACf,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,OAAQ,UAAU,EAE1C,kBAAe,SAAS,cAAc,KAAK,EAC3C,kBAAa,UAAU,IAAI,iBAAiB,EAE5C,eAAU,OAAO,KAAK,YAAY,GAGzC,KAAK,OAASjJ,GAEd,KAAK,iBAAmB,EACxB,KAAK,gBAAkB,EACzB,CAEO,kBAAmB,CACxB,MAAO,CAAC,EAAE,KAAK,OAAS,KAAK,UAC/B,CAEA,MAAa,cAAc,CACzB,IAAAgD,EACA,MAAA+5J,EACA,UAAAC,EACA,cAAAC,EACA,OAAA3vI,EACA,eAAA4vI,CAAA,EAQsB,CACtB,KAAK,iBAAmB,GACxB,MAAMr9H,EAAM,KAAK,IAAI,WAAW,eAAe,EAC/CA,EAAI,OAAO,EACX,MAAMs9H,EAAgB,CAACJ,EACjBK,EAAcpqJ,GAAgB,WAC9BqqJ,EAAkBrqJ,GAAgB,iBAAiBoqJ,CAAW,EAAE,UAChEE,EAAWP,GAASK,EACpBG,EAAiC,CAAC,EAAED,GAAY,CAACH,GAAiBH,GAMxE,GALIA,IAEFA,EADsBhqJ,GAAgB,iBAAiBsqJ,CAAQ,EACrC,WAGzB,KAAK,YAAcN,GAAa,KAAK,QAAUM,EAAU,CAC1Dz9H,EAAI,iBAAiB,EACrBq9H,IAAiB,EAAI,EACrB,MACF,CAEM,MAAA3qJ,EAASirJ,GAAuBR,CAAS,EACzC/xD,EAAQ+xD,GAAmC,KAEjD,IAAIz5J,EAAmB0c,EACjB,MAAAw9I,EAAoB,CAAC,CAAClrJ,GAAU,CAAC04F,GAAQ,CAAC+xD,EAAU,SAAS,UAEjE,GAAAS,GACA,SAAS,gBAAgB,MAAM,SAAW,YAC1C,KAAK,kBACL,CAAC,KAAK,gBACN,CACA59H,EAAI,qBAAqB,EACpB,oBAAe,QAAQ,OAASttB,EAChC,sBAAiB,KAAK,KAAK,cAAc,EAC9C2qJ,IAAiB,EAAI,EACrB,MACF,CAEM,MAAA5mJ,EAAS,EAAE,KAAK,iBAEnB,IAACtT,GAAO,CAACy6J,EAAmB,CAC7B,MAAM73I,EAAWo3I,EAAU,SACrB3yJ,EAAI,KAAK,aAAa,cAAc,CACxC,KAAA4gG,EACA,YAAa,GACb,KAAMrlF,GAAYA,EAAS,OAAO,KACnC,EAEK7H,EAAkB,EAAE1T,aAAa,SAMpC,GALHw1B,EAAI,6BAA8B9hB,CAAM,EACxCm/I,IAAiBn/I,CAAM,EACLk/I,MAAAl/I,GACdA,IAAiBuP,EAAA,QACrBtqB,EAAM,MAAMqH,EACT,KAAK,mBAAqBiM,EAC3B,MACF,MAEAupB,EAAI,mBAAmB,EACvBq9H,IAAiB,EAAI,EAGvB,MAAMQ,EAA2B,KAAK,iBAChCC,EAA0B,KAAK,gBACN,KAAK,eACpC,MAAMC,EAAwB,KAAK,cACb,KAAK,MACD,KAAK,UAE1B,sBACH,KAAK,gBACL,KAAK,eACL,KAAK,cACL,KAAK,MACL,KAAK,UACL,OAECN,IAAaF,IACd,KAAK,MAAQL,GAGZC,IAAcK,IACf,KAAK,UAAYL,GAGnB,MAAMa,EAAY,CAAC,CAAEb,EAAkC,OAAO,QACxDc,EAAYd,EAAU,UAAU,WAAaA,EAAU,SAAS,UAAY,IAC5Ee,EAAgB,CAAC,CAACD,GAAaA,EAAY,EAE7C,IAAAE,EACAnwH,EAAgBtqC,GAAM,kBACtB06J,EACJ,GAAG,CAAC16J,EAIF,GAHOA,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,sBAAsB,EAEtCP,EACD,GAAG66J,EAAW,CACPt6J,EAAA,UAAU,IAAI,YAAY,EAE/B,MAAMspB,EAAO,KAAK,aAAa,eAAe,sBAAsB,EAClDmxI,EAAA,KAAK,gBAAkBzO,GAA8B,YAAY,CACjF,IAAAvsJ,EACA,MAAO6pB,EAAK,MACZ,OAAQA,EAAK,OACb,KAAMkxI,CAAA,CACP,EAEelwH,EAAA,KAAK,cAAgBmwH,EAAgB,aAAa,EACpDnwH,EAAA,UAAU,IAAI,8BAA+B,qCAAqC,EAE7FkwH,GACIx6J,EAAA,UAAU,IAAI,SAAS,CAC9B,MAEQ0c,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,4BAA4B,EAC3C1c,EAAA,UAAU,IAAI,WAAY,+BAA+B,EAC9DA,EAAK,OAAO0c,CAAK,OAGd1c,EAAA,UAAU,IAAI,UAAU,EAI7B,IAAAs2H,EACJ,GAAGtnH,EAAQ,CAET,KAAM,CAAC,OAAAgP,EAAQ,iBAAkB28I,CAAqB,EAAA5R,GAA+B,OAAO/5I,CAAM,EAClGsnH,EAAmB,KAAK,iBAAmBqkC,EAC3CD,EAAiB,KAAK,eAAiB18I,EACxB08I,EAAA,UAAU,IAAI,8BAA+B,mCAAmC,EAChFA,EAAA,UAAU,IAAI,+BAA+B,CAS9D,CAEA,GAAGH,IAAc,CAAC79I,GAASjN,GAAgB,QAAY,IACjD,IAAAmrJ,EACDl+I,EACck+I,EAAAl+I,EAEfk+I,EAAeJ,EAAgBE,EAAiBpwH,EAGlD,IAAIuwH,EAAa,KAAK,IAAIN,CAAS,GAAKC,EAAgB,GAAK,GAC1D99I,EACDm+I,EAAa,KAAK,IAAI,GAAK,EAAIN,CAAS,EAChCC,IACKK,EAAA,KAAK,IAAI,GAAKA,CAAU,GAGvCD,EAAa,MAAM,YAAY,gBAAiB,GAAKC,CAAU,CACjE,CAEA,MAAMl5J,EAAU,IAAI,QAAqB+Y,GAAY,CACnD,MAAM8b,EAAK,IAAM,CACZ,QAAK,mBAAqBzjB,EAAQ,CACnC0nJ,GAAiB,QAAQnwH,CAAa,EACtCgsF,GAAkB,QAAQ,EAC1B,MACF,CAEM,MAAApwH,EAAO,KAAK,aAAa,iBAC/B,GAAGA,IAASlG,EACV,OAGF,MAAM86J,EAAwB,IAAM,CAC5Bp+H,QAAO,YAAY,MACrB,IAAA87H,EACD97I,EACD87I,EAAQM,GAAsBp8I,CAAK,EAEnC87I,EAAQD,GAAuBmC,CAAc,EAG/C,MAAMK,EAAO9B,GAAkB,MAAM,KAAKT,CAAK,CAAQ,EACvD,OAAAl8H,EAAI,wBAAyBy+H,EAAM,YAAY,MAAQr+H,CAAI,EACpDq+H,CAAA,EAGHlvH,EAAS,CACb6uH,EACApwH,CAAA,EACA,OAAO,OAAO,EACbuB,EAAO,QACH7rC,EAAA,OAAO,GAAG6rC,CAAM,EAGlB,kBAAa,OAAO7rC,CAAI,EAEfgS,GAAA,CACZ,QAAShS,EACT,UAAW,aACX,SAAU,GACV,SAAW05J,EAAsB,EAAN,IAC3B,kBAAmB,IAAM,CACjBh9H,QAAO,YAAY,MACtBq9H,GACetqJ,GAAA,WAAWsqJ,EAAU,KAAK,SAAS,EAGlDC,GACevqJ,GAAA,uBAAuB,CAAC,KAAMqrJ,IAAyB,QAAS,KAAK,UAAU,EAEjGx+H,EAAI,wBAAyB,YAAY,IAAI,EAAII,CAAI,CACvD,EACA,gBAAiBx2B,EAAO,IAAM,CAC5Bk0J,GAAyB,QAAQC,CAAqB,EACtDF,GAA0B,QAAQ,EAElCj0J,EAAK,OAAO,GACV,KACJ,QAAS,EACV,GAGG80J,EAAkB,IAAM,CAC5B1+H,EAAI,sBAAuB,YAAY,IAAI,EAAII,CAAI,EAChD3S,EACDrP,EAAQ8b,CAAE,GAEPA,IACH9b,EAAQ,MAAS,EACnB,EAGIgiB,EAAO,YAAY,MACtB+9H,EACDA,EAAgB,eAAenwH,CAAa,EAAE,KAAK0wH,CAAe,EAC1Dv7J,EACWqiB,GAAApF,EAAOjd,EAAKu7J,EAAiB,EAAK,EAErCA,GAClB,CACD,EAED,OAAGjxI,EACMpoB,EAGF,KAAK,qBAAuB,QAAQ,KAAK,CAC9Ci7B,GAAM,GAAG,EACTj7B,CAAA,CACD,EAAE,KAAK,IAAM,EAAE,CAClB,CAEO,sBAAsB5L,EAA+C,CACvE,SAAK,mBAID,YAAK,cAAcA,CAAO,CACnC,CAEQ,oBAAqB,CAC3B,MAAMumC,EAAM,KAAK,IAAI,WAAW,mBAAmB,EAC7C75B,EAAWC,KACjB,IAAIqnB,EAAS,GAEP,MAAAkxI,EAAiBllK,GAA2D,CAC1E,MAAA4L,EAAU,KAAK,cAAc,CACjC,OAAAooB,EACA,eAAiBvP,GAAW,CACtBA,GACF/X,EAAS,QAAQ,MAAS,CAE9B,EACA,GAAG1M,CAAA,CACJ,EAED,OAAAmlK,GAAsBv5J,EAASc,CAAQ,EAChCd,CAAA,EAGHw5J,EAAsB/lH,GAAqB,CAC/C,GAAG,CAACA,EACF,OAGI,MAAC,cAAAgmH,CAAiB,EAAAp4J,EACxB,OAAOo4J,EAAc,QAAQ,KAAM5B,GAAUA,EAAM,WAAapkH,CAAQ,GAGpEimH,EAAuB,IAAM,CACjC,GAAG,CAAC,KAAK,oBAAsB,KAAK,iBAAkB,CACpD/+H,EAAI,eAAe,EACnB75B,EAAS,QAAQ,MAAS,EAC1B,MACF,CAEA65B,EAAI,sBAAsB,EACZ2+H,EAAA,KAAK,2BAA2B,GAG1CxuH,EAAS,IAAM,CACnB,MAAM6uH,EAAYt5J,IAClB,GAAG,CAACs5J,EAAW,CACQD,IACrB,MACF,CAEI,IAAA5B,EAAY5iE,GAAQykE,EAAmC,SAAS,EACpE,MAAMlmH,EAAWkmH,EAAU,gBAAmB7B,GAAaA,EAAU,UAAU,SAEzED,EAAQ3iE,GAAOskE,EAAmB/lH,CAAQ,CAAC,EAC9C,IAACokH,GAAS,CAACC,EAAW,CACF4B,IACrB,MACF,CAGGjmH,GAAYokH,IACDC,EAAA,QAGVn9H,EAAA,WAAYg/H,EAAW9B,EAAOC,CAAS,EAE7BwB,EAAA,CACZ,MAAAzB,EACA,UAAAC,EACA,cAAe1vI,CAAA,CAChB,EAED,MAAMjL,EAAehH,KACrB5U,GAAaC,GAAG2b,EAAc2tB,EAAQ,CAAC,MAAO,EAAK,EAAC,GAGhDzqC,EAAWE,GAAY,IAAM,KAAK,MAAM,EACxC,CAACc,CAAQ,EAAIC,KACnB,OAAAC,GAAa,IAAM,CACVupC,IACE1iB,EAAA,GACV,EAEMtnB,CACT,CAEQ,mBAAoB,CACvB,YAAK,OAAS,UACR,QAAQ,QAAQgV,EAAI,EAGtB1U,GAAY2B,IACjB,KAAK,iBAAiB,IAAM,UAAQA,CAAO,EACpC,KAAK,qBACb,CACH,CAEO,QAAQ2V,EAAgB,CAC7B,KAAK,KAAOA,CACd,CAEO,MAA2B,CAGhC,KAAK,OAAS,IAAIsrI,GAAW,KAAM55E,GAAiB,KAAK,QAAQ,EACjE,KAAK,QAAU,IAAIy+C,GAAY,KAAM,KAAK,QAAQ,EAC7C,WAAQ,IAAI+wC,GAAU,KAAM,KAAK,aAAc,KAAK,SAAU,iBAAiB,EACpF,KAAK,YAAc,IAAIC,GAAgB,KAAM,KAAK,QAAQ,EACrD,eAAY,IAAIp0B,GAAc,KAAM,KAAK,QAAS,KAAK,MAAO,KAAK,QAAQ,EAEhF,KAAK,OAAO,iBACZ,KAAK,OAAO,uBAEZ,KAAK,OAAO,YACZ,KAAK,MAAM,YAEX,KAAK,QAAQ,uBACb,KAAK,MAAM,uBAEPz/G,IACF,KAAK,QAAQ,6BAGf,KAAK,QAAQ,2BAER,eAAU,OAAO,KAAK,OAAO,UAAW,KAAK,QAAQ,UAAW,KAAK,MAAM,SAAS,EAEpF,aAAQ,eAAe,IAAI1xB,CAAS,EAAE,iBAAkB,CAAC,CAAC,YAAAu+C,EAAa,UAAAC,KAAe,CACtF,KAAK,SAAWD,GACjB,KAAK,QAAQ,CAAC,OAAQC,CAAU,EAClC,CACD,EAED,KAAK,QAAQ,eAAe,IAAIx+C,CAAS,EAAE,cAAgB2xC,GAAW,CACjEA,EAAO,SAAW,KAAK,SAAW5lB,GAAS4lB,CAAM,GAAK,KAAK,WAAaqkH,GAAarkH,CAAM,IAC5F,KAAK,aAAa,SACpB,CACD,EAED,KAAK,QAAQ,eAAe,IAAI3xC,CAAS,EAAE,cAAe,MAAMuG,GAAW,CACnE,MAAC,OAAAxG,CAAU,OACjB,GAAGA,EAAO,UAAU,GAAKA,EAAO,aAAewG,EAAQ,CACrD,MAAMi/J,EAAqB,MAAM,KAAK,SAAS,mBAAmB,mBAAmBzlK,CAAM,EACxFA,IAAW,KAAK,SACjB,KAAK,mBAAqBylK,EAE9B,EACD,EAEK,MAAAC,EAAmBC,GAAoB,CAC3C,MAAMnlI,EAAK,IAAM,CACV,aAAQ,UAAU,mBAAmBmlI,CAAM,EAC3B1yG,GAAA,wBAAwB,KAAK,eAAgB0yG,CAAM,EACrEA,GACoB1yG,GAAA,gBAAgB0yG,EAAQ,KAAK,cAAc,CAClE,EAGEA,EAKCnlI,IAJH,WAAW,IAAM,CACZA,KACF,GAAG,CAGR,EAGG,aAAQ,eAAe,IAAI,KAAK,YAAY,EAAE,gBAAiB,CAAC,CAAC,GAAA8kB,KAAQ,CAC5EogH,EAAgBpgH,IAAO,IAAI,EAC5B,EAEI,aAAQ,eAAe,IAAI,KAAK,YAAY,EAAE,eAAiBk0B,GAAU,CAC5DksF,EAAA,KAAK,aAAa,OAAS,MAASlsF,IAAUosF,GAAS,MAAQlkK,GAAW,eAAiBw+D,GAAW,MAAO,EAC9H,EAED,KAAK,aAAe2lG,KACpB94J,GAAY2B,GAAY,CACtB,KAAK,iBAAiB,IAAM,YAAUA,CAAO,EAEvC,MAAAo3J,EAAkB,MAAMC,EAA2Bh2J,IAAqB,CACtE,MAAAmb,EAAU1O,GAAS,YAAY,YAAY,EAC3CulC,EAAwB,CAAC,CAAC,QAAS,CAAI,GAAC,QAAS,EAAE,EACnDhiD,EAAoC,CAAC,KAAM,WAAY,SAAUmrB,EAAU,IAAM,EAAG,OAAQ,eAC9Fnb,GACFgyC,EAAU,QAAQ,EAGpB,MAAMn/C,EAAW,KAAK,OAAO,UAAU,iBAA8B,uBAAuB,EAEtFyJ,EAA2B,GAC3BV,EAAUo6J,EAAa,QAAQhkH,EAAWhiD,CAAO,EAAE,SACzDgiD,EAAU,QAAQ,EAClB,MAAMikH,EAAgB,MAAM,KAAKpjK,CAAQ,EAAE,IAAK4R,GAAYA,EAAQ,QAAQutC,EAAWhiD,CAAO,EAAE,QAAQ,EAC/F,OAAAsM,EAAA,KAAKV,EAAS,GAAGq6J,CAAa,EAChC,QAAQ,IAAI35J,CAAQ,GAGvB,CAAC45J,EAAYC,CAAa,EAAIp3J,GAAa,EAAK,EAChD,CAACgI,EAAO4+B,CAAQ,EAAI5mC,GAAa,GAAI,CAAC,OAAQ,GAAM,EACpD,CAAC6sJ,EAAcC,CAAe,EAAI9sJ,GAAqB,OAAW,CAAC,OAAQ,GAAM,EACjF,CAACowC,EAAU+8G,CAAW,EAAIntJ,GAAuB,OAAW,CAAC,OAAQ,GAAM,EACjF5B,GAA2B64J,GAAiB,CACvC,IAACE,IAAc,CAChB,GAAG,CAACF,EACF,OAGFD,EAAgBC,EAAc,EAAK,EAAE,KAAK,IAAM,CAC9CA,EAAa,OAAO,EACrB,EACD,MACF,CAEe,OAAAA,EAAAt4J,GAAQ,IAAMmtJ,GAAa,CACxC,KAAM,KACN,SAAU,KAAK,KACf,OAAQ,KAAK,OACb,SAAU,KAAK,SACf,gBAAiB,KAAK,WACtB,MAAA9jJ,EACA,aAAA6kJ,EACA,SAAAz8G,EACA,QAAS,IAAM,CACb,KAAK,aAAa,MAAS,CAC7B,EACA,WAAa0c,GAAc,CACpB,aAAQ,WAAWA,CAAS,CACnC,EACA,SAAU,CAACzuB,EAAQg5H,EAAkBtL,IAAkB,CACrD,MAAM5+I,EAAY,mBACZy+D,EAAW,CAAC,EAAEvtC,IAAWg5H,GAAoBtL,IAEnD,GADkB,KAAK,UAAU,UAAU,SAAS5+I,CAAS,IAC5Cy+D,EACf,OAGI,MAAA+6C,EAAc,KAAK,QAAQ,kBAAkB,EACnDA,EAAY,KAAK,EACjB,KAAK,UAAU,UAAU,OAAOx5G,EAAW,CAAC4+I,GAAiBngF,CAAQ,EACrE,KAAK,OAAO,UAAU,UAAU,OAAO,cAAemgF,CAAa,EACnEplC,EAAY,QAAQ,CACtB,EACA,mBAAoB,IAAM,CACxB,KAAK,qBAAuB,EAC9B,CACD,EAAC,EACG,YAAO,UAAU,OAAOswC,CAAY,EACzCD,EAAgBC,EAAc,EAAI,EAC3BA,CAAA,CACR,EAED74J,GAAa,IAAM,CACX,MAAA3H,EAAI,KAAK,eACfmwC,EAASnwC,GAAG,KAAK,EACjBq2J,EAAgBr2J,GAAG,YAAY,EAC/B02J,EAAY12J,GAAG,QAAQ,EACT2gK,EAAA,CAAC,CAAC3gK,CAAC,EAClB,EACF,EAEDwH,GAAY2B,GAAY,CACtB,KAAK,iBAAiB,IAAM,YAAUA,CAAO,EAC7C,KAAK,MAAQ04G,IAAS,CACvB,CACH,CAEO,eAAgB,CACrB,KAAK,eAAiB16G,KACtB,KAAK,QAAQ,UACb,KAAK,eAAe,MAAS,CAC/B,CAEQ,mBAAoB,CAC1B,EAAE,KAAK,iBACF,sBAAiB,QAAQ,KAAK,aAAa,EAChD,KAAK,kBAAkB,UAClB,qBAAkB,KAAK,iBAAmB,MACjD,CAEO,SAAU,CAGf,KAAK,gBAAgB,UACrB,KAAK,sBAAsB,EAC3B,KAAK,QAAQ,UACb,KAAK,SAAS,UACd,KAAK,OAAO,UACZ,KAAK,aAAa,UACb,gBAAW,gBAAgB,OAAW,MAAS,EACpD,KAAK,wBAAwB,UAE7B,KAAK,kBAAkB,EAElB,YACH,KAAK,QACL,KAAK,MACL,KAAK,YACL,KAAK,UACL,OAEF,KAAK,WAAW,SAEhB,KAAK,wBAAwB,MAAS,CAGxC,CAEO,QAAQ05J,EAAY,GAAM,CAC1B,YAAO,QAAQA,CAAS,EAC7B,KAAK,QAAQ,UACb,KAAK,WAAW,UAEb,KAAK,qBAAsB,KAAK,qBAAuB,OACrD,KAAK,eAAe,MAAS,CACpC,CAEA,IAAW,cAAe,CACxB,MAAO,CAAC,EAAE,KAAK,SAAW,KAAK,SACjC,CAEA,MAAa,aAAarmK,EAA6BwmC,EAAyC,CACxF,MAAC,OAAAvmC,EAAQ,SAAAK,CAAY,EAAAN,EAEvB,KAAK,aAAa,UACFg2E,GAAgB,OAAOw8E,EAAmB,GACjD,MAAM,EAGb,MAAAh7I,EAAU/W,GAAgB,QAAQR,CAAM,EAE3CK,GAAY,CAACkX,IACdxX,EAAQ,KAAOA,EAAQ,SAAWE,EAAU,KAAO,QAAiB,cAGnEF,EAAQ,QACTA,EAAQ,KAAO,UAGX,MAAAskB,EAAOtkB,EAAQ,MAAQ,OAC7B,KAAK,QAAQskB,CAAI,EAEX,MACJgiJ,EACA57J,EACAm5H,EACA0iC,EACA3xJ,EACAm1F,EACAz0F,EACAskC,EACA0zF,EACAo4B,EACA5qC,EACAC,CAAA,EACE,MAAMv0F,EAAE,QAAQ,IAAI,CACtB,KAAK,SAAS,gBAAgB,WAAWvmC,CAAM,EAC/C,KAAK,SAAS,gBAAgB,iBAAiBA,CAAM,EACrD,KAAK,aAAaA,CAAM,EACxB,KAAK,SAAS,gBAAgB,WAAWA,CAAM,EAC/C,KAAK,qBAAqB,EAC1B,KAAK,SAAS,gBAAgB,YAAYA,CAAM,EAChD,KAAK,SAAS,gBAAgB,YAAYA,CAAM,EAChD,KAAK,SAAS,gBAAgB,UAAUA,CAAM,EAC9C,KAAK,SAAS,gBAAgB,MAAMA,CAAM,EAC1C,KAAK,SAAS,mBAAmB,mBAAmBA,CAAM,EAC1DA,EAAO,OAAO,GAAK,KAAK,SAAS,kBAAkB,oBAAoBA,CAAM,EAC7EA,EAAO,UAAY,KAAK,SAAS,gBAAgB,2BAA2BA,EAAO,SAAS,EAAG,EAAI,CACpG,EAAC,EAGCuX,GAAWlX,GACZ,MAAMkmC,EAAE,KAAK,SAAS,eAAe,sBAAsBvmC,EAAQK,CAAQ,CAAC,EAG9E,KAAK,WAAagmK,EAClB,KAAK,aAAe57J,EACpB,KAAK,YAAcm5H,EACnB,KAAK,WAAa0iC,EAClB,KAAK,YAAcx8D,EACnB,KAAK,YAAcz0F,EACnB,KAAK,UAAYskC,EACjB,KAAK,MAAQ0zF,EACb,KAAK,QAAU91H,EACV,wBAAqBA,GAAW,CAAClX,EACtC,KAAK,mBAAqBolK,EAC1B,KAAK,cAAgB5qC,EACrB,KAAK,kBAAoBC,EAEtB,KAAK,YACD,eAAU,YAAcz2G,IAAS,aAGnC,wBAAqB,GAAG,KAAK,MAAM,IAAI,KAAK,OAAS,YAAqB,YAAc,SAAS,GAIlG,KAAK,aAAa,cACf,oBAAiB0xD,GAAgB,uBACjC,qBAAgB,KAAK,KAAK,cAAc,EACxC,oBAAe,QAAQ/1E,EAAQK,CAAQ,GAG9C,KAAK,OAAO,cACZ,KAAK,WAAW,SAClB,CAEA,IAAW,2BAAmD,CAC5D,MAAMN,EAAiC,CACrC,OAAQ,KAAK,OACb,SAAU,KAAK,UAGA,OAAAqjK,GAAA,QAASptJ,GAAQ,CAExBjW,EAAAiW,CAAG,EAAI,KAAKA,CAAG,EACxB,EAEE,KAAK,aAAe,KAAK,cAAgB,SAC1CjW,EAAQ,OAAS0G,GACjB1G,EAAQ,SAAW,QAGdA,CACT,CAEO,QAAQA,EAA6B,CACpC,MAAC,OAAAC,EAAQ,SAAAK,CAAY,EAAAN,EACvBC,EAEO,KAAK,SACX,KAAK,OACD,YACL,KAAK,KAAO,MAGd,KAAK,OAAS,IAPd,KAAK,OAAS,OAUhB,MAAMmhI,EAAW,KAAK,aAAa,WAAW,KAAMphI,CAAO,EAC3D,GAAG,CAACohI,EACG,kBAAa,cAAc,gBAAiB,IAAI,EACrD,KAAK,OAASnhI,GAAUyG,GACxB,KAAK,SAAWpG,EAChB,KAAK,iBAAiB,gBACd,KAAK,eACb,OAGF,GAAG,CAACL,EAAQ,CACV,KAAK,OAAS,EACV,IAAA2L,EAED,KAAK,oBAAsB,OAAS,KAAK,aAAa,MAAM,CAAC,IAC9DA,EAAU,KAAK,cAAc,KAAK,0BAA2B,IAG/DkgB,GAAYlgB,EAAS,IAAM,CACzBoqE,GAAgB,cAAc,EAAK,EACnC,KAAK,QAAQ,EAAI,EACZ,aAAQ,QAAQ,CAAC,OAAA/1E,EAAQ,SAAU,GAAO,WAAY,GAAM,EAC5D,kBAAa,cAAc,eAAgB,IAAI,EAEhD,KAAK,aAAa,cACpB+1E,GAAgB,sBAAsB,EACtC,KAAK,sBAAsB,EAC3B,KAAK,eAAiB,OACxB,CACD,EAED,MACF,CAEA,KAAK,YAAcorD,EAEnB,IAAIC,EAAa,IACd,CAACD,GAAYiiC,GAAiB,KAAMptJ,GAAQjW,EAAQ,eAAeiW,CAAG,CAAC,KACvDotJ,GAAA,QAASptJ,GAAQ,CAE3B,KAAAA,CAAG,EAAIjW,EAAQiW,CAAG,EACxB,EACYorH,EAAA,IAGT,MAAC,0BAAAmlC,CAA6B,OAC9BC,EAASrQ,GAAqB,CAClC,KAAMK,GAAsB+P,CAAyB,EACrD,GAAGA,CAAA,CACJ,EACD,KAAK,wBAAwBC,CAAM,EAE7B,MAAAC,EAAwB,KAAK,QAAQ,QAAQ,CAAC,GAAG1mK,EAAS,SAAAohI,EAAU,WAAAC,CAAA,CAAW,EAC/EtB,EAAiB,KAAK,eAAiB2mC,EAAsB,KAAM1kK,GAChEA,EAAO,OACf,EAAE,MAAM0f,EAAI,EAAE,QAAQ,IAAM,CACxB,KAAK,iBAAmBq+G,IACzB,KAAK,eAAiB,KACxB,CACD,EAEM,OAAA2mC,CACT,CAEQ,wBAAwBzwJ,EAAwB,CACnD,KAAK,oBAAsBA,IAI3B,KAAK,mBACN,KAAK,SAAS,mBAAmB,6BAA6B,KAAK,kBAAmB,EAAK,EAG7F,KAAK,kBAAoBA,EACtB,KAAK,mBACN,KAAK,SAAS,mBAAmB,6BAA6B,KAAK,kBAAmB,EAAI,EAE9F,CAEQ,2BAA2E,CAC1E,OACL,IAAK,KAAK,aAAa,kBACvB,cAAe,GAEnB,CAEO,sBAAsBsjB,EAAM,KAAK,eAAgB,CAClDA,IAIarkB,GAAA,KAAK,gBAAiBqkB,CAAG,EAC1CA,EAAI,QAAQ,EACd,CAEA,MAAa,sBAAuB,CAClC,KAAK,aAAe,MAAMm5H,GAAgC,KAAK,MAAM,CACvE,CAEO,aAAa1yJ,EAKE,GAAI,CACxB,OAAO,KAAK,QAAQ,CAClB,OAAQ,KAAK,OACb,SAAU,KAAK,SACf,GAAGA,CAAA,CACJ,CACH,CAEA,MAAa,iBAAiBA,EAS3B,CACD,GAAG,KAAK,YAAa,OAErB,MAAMC,EAAS,KAAK,OACpB,KAAK,YAAc,GACnB,KAAK,eAAiB,GAEhB,MAAC,WAAA2B,CAAc,EAAA5B,EAErB,KAAK,QAAQ,EAAK,EAElB,MAAM2mK,EAAiB,KAAK,eAEtBr6J,EAAW,CACf,KAAK,QAAQ,iBAAiBtM,CAAO,EACrC,KAAK,SAAS,iBAAiB,EAC/B,KAAK,OAAO,iBAAiBA,CAAO,EACpC2mK,GAAgB,oBAAoB,EACpC,KAAK,kBAAkB,GAKnB/zE,EAAY,MAFO,QAAQ,IAAItmF,CAAQ,EAG7Cq6J,GAAgB,iBAAiB,EAAI,EAEjC/kK,MAIMgxF,EAAA,QAAS9oF,GAAa,CACnBA,KAAA,CACZ,EAEE68J,IACD3wF,GAAgB,sBAAsB2wF,CAAc,EACpD,KAAK,gBAAgB,OAAQptI,GAAQA,IAAQotI,CAAc,EAAE,QAASptI,GAAQ,KAAK,sBAAsBA,CAAG,CAAC,GAG5G,KAAK,YACN,KAAK,UAAU,QAAQ,KAAO,KAAK,OAAS,SAAkB,OAAS,KAAK,KAC5E,KAAK,UAAU,UAAU,OAAO,iBAAkB,CAAC,OAAe,aAAqB,SAAgB,SAAS,KAAK,IAAI,CAAC,GAG5H,KAAK,IAAI,UAAU,QAAUt5B,EAAS,IAAM,KAAK,IAAI,EAElD,KAAK,YACD,kBAAa,cAAc,eAAgB,IAAI,EAExD,CAEO,WAAW2N,EAAuB,CACpC,UAAOA,GAAS,SAAU,CAC3B,KAAM,CAAC,OAAA3N,EAAQ,IAAKo+H,CAAI,EAAIhK,GAAazmH,CAAG,EACrC,OAAAnN,GAAgB,iBAAiBR,EAAQo+H,CAAI,CACtD,CAEA,OAAO59H,GAAgB,sBAAsB,KAAK,mBAAoBmN,CAAG,CAC3E,CAEO,iBAAiB3N,EAAgB2N,EAAa,CAChD,OAAC,KAAK,MAIFnN,GAAgB,iBAAiBR,EAAQ2N,CAAG,EAH1C,KAAK,WAAWA,CAAG,CAI9B,CAEA,MAAa,aAAa3N,EAAgB2N,EAAa,CAC9C,YAAK,SAAS,mBAAmB,iBAAiB,KAAK,iBAAiB3N,EAAQ2N,CAAG,CAAC,CAC7F,CAEO,kBAAkBg5J,EAA0B,CAC1C,YAAK,SAAS,mBAAmB,8BAA8B,CACpE,GAAG,KAAK,0BACR,SAAUA,EAAiB,OAAY,KAAK,SAC7C,EAAE,KAAMC,IACA,CACL,GAAGA,EACH,QAAS99E,GAAY,SAAiB89E,EAA2B,iBAAiB,EAClF,cAAeA,EAA2B,yBAA2B99E,GAAY,SAAiB89E,EAA2B,uBAAuB,GAEvJ,CACH,CAEO,kBAAmB,CACxB,OAAO,KAAK,SAAS,eAAe,aAAa,KAAK,QAAS,KAAK,SAAW,KAAK,OAAS,UAAmB,KAAK,QAAQ,CAC/H,CAEO,iBAAkB,CACvB,OAAO,KAAK,oBAAoB,KAAMnoC,GAAmBA,EAAe,KAAK,CAC/E,CAGO,aAAaz+H,EAAgB,CAClC,OAAOA,IAAWC,EAAU,MAC1BD,IAAWwtB,IACV,KAAK,OAAS,UAAmB,KAAK,cAAgB,QACvD,KAAK,SAAS,gBAAgB,YAAYxtB,CAAM,CACpD,CAEO,aAAc,CACnB,KAAK,eAAe,MAAS,CAC/B,CAEO,WAAWD,EAAwE,GAAU,CAC9F,KAAK,SACTA,EAAQ,QAARA,EAAQ,MAAU,IAClB,KAAK,aAAaA,CAAO,EAC3B,CAEO,QAAQwJ,EAAqB,CAClC,OAAG,KAAK,OAAS,SAAkB,KAAK,WAAa,KAAK,OACjD,QAAQ,QAAQ,EAAK,EAGvB,KAAK,SAAS,mBAAmB,cAAc,KAAK,OAAQ,KAAK,SAAUA,CAAM,CAC1F,CAEO,qBAAsB,CAC3B,OAAO,QAAQ,IAAI,CACjB,KAAK,SAAS,gBAAgB,MAAM,KAAK,MAAM,EAC/C,KAAK,SAAS,mBAAmB,cAAc,KAAK,MAAM,EAC1D,KAAK,kBAAkB,EAAI,EAC3B,KAAK,OAAO,SAAW,KAAK,SAAS,kBAAkB,oBAAoB,KAAK,OAAO,SAAU,GAAI,OACtG,EAAE,KAAK,CAAC,CAAC8jI,EAAOz7F,EAAQ6sF,EAAgB5D,CAAa,IAChDwS,EAII,CAACz7F,GAAU,CAAC6sF,EAAe,QAAQ,QAAW5D,EAH7C,EAIV,CACH,CAEO,4BAA6B,CAClC,OAAI,KAAK,OAAO,SAIT,KAAK,SAAS,gBAAgB,2BAA2B,KAAK,OAAO,WAAY,EAAI,EAHnF,QAAQ,QAAQ,EAAK,CAIhC,CAEO,yBAAgD,CAC9C,OACL,OAAQ,KAAK,OACb,SAAU,KAAK,SACf,sBAAuB56H,EAAU,SAAS,SAAS,iBACnD,GAAI,KAAK,OAAS,CAChB,GAAI,KAAK,MAAM,cAAgB,GAC/B,aAAc,KAAK,MAAM,aACzB,OAAQ,KAAK,MAAM,WACnB,aAAc,KAAK,MAAM,aACzB,OAAQ,KAAK,MAAM,OAAO,CAC5B,EACA,cAAe,KAAK,cAExB,CAEO,aAAaqJ,EAAmD,CACrE,OAAG,KAAK,YACC,CAAC,CAACA,EAAQ,OAAO,IAGvB,GAAAA,EAAQ,SAAWrJ,EAAU,MAAQ,CAACqJ,EAAQ,OAAO,MAIpDA,EAA4B,UAAU,QAAQ,UAOpD,CAEO,aAAaA,EAAmD,CACrE,MAAMqtD,EAAWrtD,EAA4B,SAE7C,MAAO,CAAC,EADM,KAAK,aAAaA,CAAO,IAAM,CAACqtD,GAAW,KAAK,SAAW12D,EAAU,MAAQ,KAAK,UAElG,CAEO,eAAeqJ,EAAmD,CACvE,OAAO,KAAK,aAAe,CAAC,KAAK,aAAaA,CAAO,CACvD,CAEO,wBAAyB,CACvB,YAAK,OAAS,QAAiB,KAAK,OAC7C,CAEO,mBAAmBA,EAAkB,CAEtC,IAAAu9J,EAAK54C,GAAmB3kH,CAAO,EACnC,MAAMqtD,EAAWrtD,EAA4B,SAC7C,OACEu9J,GACAlwG,EAAQ,eACR,KAAK,OAAS,SAAiBtwD,GAAUswD,EAAQ,aAAa,IAAM,KAAK,WAGpEkwG,EAAA,IAGAA,CACT,CAEO,cAAcv9J,EAA0B,CAC7C,GAAG,KAAK,YACN,OAGF,MAAMqtD,EAAUrtD,EAAQ,SAExB,GADkBA,EAAQ,OAAO,MAASqtD,GAAS,aAAe,CAAC,KAAK,aAAartD,CAAO,EAUrF,OAAAA,EAAQ,aAAeqtD,GAAS,WACzC,CAEA,MAAa,gBAAiB,CAC5B,MAAM32D,EAAS,KAAK,OACjB,IAACA,EAAO,SACF,SAGT,KAAM,CAAC8mK,EAAgBjhD,CAAwB,EAAI,MAAM,QAAQ,IAAI,CACnE,KAAK,SAAS,kBAAkB,eAAe,KAAK,OAAO,UAAU,EACrErlH,GAAgB,yBAAyB,EAC1C,EAED,OAAOR,EAAO,UAAY8mK,GAAkB,CAACjhD,CAC/C,CAEA,MAAa,WAAW9lH,EAAyC,CAC/D,cAAO,OAAOA,EAAS,KAAK,wBAAyB,GACrDA,EAAQ,SAARA,EAAQ,OAAW,KAAK,QACjB,KAAK,aAAa,WAAWA,CAAO,CAC7C,CAEA,MAAa,aAAaA,EAA8B,CAChD,MAAAgnK,EAAiBhnK,EAAQ,SAAS,IAAM,eACxCo/B,EAAQp/B,EAAQ,OAAS,EAC/B,GAAGgnK,EAAgB,CACd,IAAC,KAAK,QAAS,CAChBj3I,GAAa,YAAY44F,GAAY,CACnC,UAAW,EACX,QAAS,IAAM,CACb,KAAK,aAAa3oH,CAAO,CAC3B,EACA,QAAS,WACT,OAAQ,KAAK,OACd,EAED,MACF,CAEA,MAAMk0C,EAAQ,EAERj+B,EAAMw7E,GAA0BzxF,EAAQ,OAA0B,EACpE,IAAAuyF,EAAUf,GAAuB,IAAIv7E,CAAG,EACxCs8E,EAiBF,aAAaA,EAAQ,WAAW,EAhBTf,GAAA,IAAIv7E,EAAKs8E,EAAU,CACxC,MAAO,EACP,cAAe,EACf,YAAa,EACb,OAAQ,IAAM,CACZ,aAAaA,EAAQ,WAAW,EAChCf,GAAuB,OAAOv7E,CAAG,EACjCgxG,GAAkBD,GAAkBA,EAAgBz0B,EAAQ,KAAK,EACvDryF,EAAA,oBAAoB,qBAAsB,CAAC,CACnD,QAAS,KAAK,iBAAiBF,EAAQ,QAAQ,OAAQA,EAAQ,QAAQ,GAAG,EAC1E,eAAgB,CAAC,EACjB,eAAgB,CAAC,CAClB,EAAC,CACJ,EACD,EAKHuyF,EAAQ,OAASnzD,EACTmzD,EAAA,cAAgB13D,GAAM,EAAI,EAAIqZ,EAC9Bq+C,EAAA,YAAc,OAAO,WAAW,IAAM,CAC5CA,EAAQ,OAAO,EACf,MAAM,MAAM,GACXr+C,EAAQ,GAAG,EAEG+yE,GAACD,GAAkBA,EAAgB5nF,CAAK,CAC3D,CAEA,MAAM6nI,EAAmB,MAAM,KAAK,SAAS,oBAAoB,aAAa,CAC5E,aAAc,KAAK,0BAA0B,aAC7C,GAAGjnK,EACH,MAAOgnK,EAAiB,EAAI5nI,EAC5B,WAAY4nI,CAAA,CACb,EAED,GAAGA,EAAgB,CACX,MAAC,QAAAz9J,CAAW,EAAAvJ,EAClBuJ,EAAQ,UAAY09J,EACV/mK,EAAA,oBAAoB,qBAAsB,CAAC,CACnD,QAAAqJ,EACA,eAAgB,CAAC09J,EAAiB,QAAQ,CAAC,CAAC,EAC5C,eAAgB,CAAC,CAClB,EAAC,CACJ,CACF,CACF,sBC/yCM/qJ,GAAY,kCAOH,MAAMgrJ,WAAqCn3I,EAAa,CAOrE2hF,YAAY1xG,EAGT,CACD,MAAMkc,GAAW,CACf4zE,KAAM,GACN7qC,WAAY,GACZ1kD,MAAOiE,EAAK,qBAAsB,CAACxE,EAAQq/B,SAAS5/B,MAAM,CAAC,EAC3DsyG,gBAAiB,GACjB1gF,QAASrB,GAAgB,CAAC,CACxBpe,QAAS,mBACTu1J,SAAU,GACVr9J,SAAUA,IAAM,KAAKs9J,eAAgB,EACrCC,SAAU,eACZ,CAAC,CAAC,CACJ,CAAC,EAED,KAAKhoI,SAAWr/B,EAAQq/B,SACxB,KAAK0vG,UAAY/uI,EAAQ+uI,UAEzB,KAAK38B,UAAS,CAChB,CAEA,MAAcg1D,gBAAiB,CAC7B,MAAMtrC,EAAU,KAAKwrC,OAAO3+I,OAAO,CAAC5N,EAAKm/B,IAAU,CACjD,IAAIlpC,EAAM+J,EAAI2I,IAAIw2B,EAAMj6C,MAAM,EAC9B,OAAI+Q,GACF+J,EAAI/J,IAAIkpC,EAAMj6C,OAAQ+Q,EAAM,IAAIuS,GAAK,EAGpC22B,EAAMppB,SACP9f,EAAI4V,IAAIszB,EAAM1wC,MAAM,EAEfuR,CACT,EAAG,IAAIqI,GAAuD,EAExDjR,EAAO,KAAKktB,SAAS5W,IAAI,CAAC,CAAC7a,KAAI,IAAKA,CAAG,EACvC3N,EAAS,KAAKo/B,SAAS,CAAC,EAAEp/B,OAC1B,CAACsnK,cAAalnK,UAAS,EAAG,KAChC,SAAU,CAAC29E,EAAQjrB,CAAO,IAAK+oE,EAAS,CACtC,MAAMxvH,EAA2B,GACjC,GAAGymD,EAAQ5kC,IAAI,KAAK,GAAKo5I,EAAa,CACpC,MAAMx2H,EAAS,KAAK2M,gBAAgB8pH,QAAO,EAC3Cl7J,EAAS8hB,KAAK/tB,EAAS4vG,gBAAgBw3D,WAAWxnK,EAAOumG,WAAYxoB,EAAQjtC,CAAM,CAAC,CACrF,MAASgiB,EAAQ5kC,IAAI,KAAK,GACzB7hB,EAAS8hB,KAAK/tB,EAAS4vG,gBAAgBy3D,gBAAgBznK,EAAOumG,SAAQ,EAAIxoB,CAAM,CAAC,EAGhFjrB,EAAQ5kC,IAAI,QAAQ,GACrB7hB,EAAS8hB,KAAK/tB,EAAS2R,mBAAmB21J,eAAe1nK,EAAQkS,EAAM,uBAAuB,CAAC,EAG9F4gD,EAAQ5kC,IAAI,QAAQ,GACrB7hB,EAAS8hB,KAAK/tB,EAAS2R,mBAAmB41J,eAAe3nK,EAAQ,GAAO,GAAMinB,OAAW82D,CAAM,CAAC,CAEpG,CAEA39E,SAAS2R,mBAAmB61J,eAAe5nK,EAAQkS,EAAM,EAAI,EAE7D,KAAK48H,YAAS,EACP,EACT,CAEA,MAAc38B,WAAY,CACxB,MAAM01D,EAAcv2H,GAAa,KAAKlS,SAAS5W,IAAI,CAAC,CAACu1D,YAAYA,CAAM,CAAC,EAClE/9E,EAAS,KAAKo/B,SAAS,CAAC,EAAEp/B,OAE1B8nF,EAAiB,IAAIrG,GAAe,CACxC9/E,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCsxB,WAAY,EACd,CAAC,EAEK7yC,EAA+B,GACrC4lF,EAAenkE,OAAOkkJ,EAAY7+E,MAAM,EAAG,CAAC,EAAG9mF,CAAY,EAC3D4lF,EAAehmF,UAAUokB,UAAUS,IAAK,GAAE1K,EAAU,UAAS,EAC7D,KAAKm6D,OAAOpG,QAAQ8X,EAAehmF,SAAS,EAE5C,MAAMgmK,EAAeD,EAAYroK,SAAW,EAEtCszD,EAMA,CAAC,CACLvpD,OAAQ,SACRuL,QAAS+yJ,EACTl2J,QAAS,kBACX,EAAG,CACDpI,OAAQ,SACRuL,QAAS+yJ,EACTl2J,QAASm2J,EAAe,gBAAkB,qBAC1CttD,SAAUstD,EAAe,CAAC,MAAMn1J,GAAc,CAAC3S,OAAQ6nK,EAAY,CAAC,EAAG1nK,cAAe,EAAK,EAAC,EAAI8mB,MAClG,EAAG,CACD1d,OAAQ,MACRuL,QAAS+yJ,EACTl2J,QAASm2J,EAAe,YAAc,iBACtCttD,SAAUstD,EAAe,CAAC,MAAMn1J,GAAc,CAAC3S,OAAQ6nK,EAAY,CAAC,EAAG1nK,cAAe,EAAK,EAAC,EAAI8mB,MAClG,CAAC,EAEK8gJ,EAAY,gBAEZzjK,EAAOA,IAAIuN,IAAmB,CAACk2J,EAAW,GAAGl2J,CAAI,EAAEvN,KAAK,GAAG,EAE3DtC,EAAQgI,GAA8D,CAC1E,MAAMsxC,EAASwsH,EAAe,CAAE,EAAG99J,EAAK8K,QAAQ0T,IAAKxoB,GAAW,CAC9D,MAAMo6B,EAAO91B,EAAK0F,EAAKT,OAAQ,GAAKvJ,CAAM,EAO1C,MANyC,CACvCuJ,OAAQS,EAAKT,OACb6wB,OACAp6B,SAIJ,CAAC,EAED,MAAO,CAAC,CACNuJ,OAAQS,EAAKT,OACb1C,KAAMmD,EAAK2H,QACX0zF,SAAUr7F,EAAKwwG,SACfl/D,OAAQwsH,EAAe7gJ,OAAYq0B,EACnClhB,KAAM0tI,EAAexjK,EAAK0F,EAAKT,OAAQ,GAAKvJ,CAAM,EAAIsE,EAAK0F,EAAKT,MAAM,EACtEvJ,OAAQ8nK,EAAe99J,EAAK8K,QAAQ,CAAC,EAAImS,QACxC,GAAGq0B,CAAM,GAGR+rH,EAAS,KAAKA,OAASl0I,GAAQ2/B,EAAQtqC,IAAIxmB,CAAI,CAAC,EAChD69C,EAAiB,IAAInF,GAAe,CACxC2sH,SACAryI,eAAgB,KAAKA,eACrBrP,MAAO,GACPqiJ,cAAeA,CAAC1tI,EAAKqgB,IAAS,CAC5B,GAAG,CAACA,EAAKstH,SACP,OAGF3tI,EAAIx4B,UAAUokB,UAAUS,IAAK,GAAE1K,EAAU,MAAK,EAE9C,MAAMuO,EAAMjY,SAAS6Y,cAAc,KAAK,EACxCZ,EAAItE,UAAUS,IAAK,GAAE1K,EAAU,YAAW,EAC1C,MAAM3b,EAAQg6B,EAAI4tI,cAEZxkJ,EAASkM,GAAU,CACvB5vB,OAAQ26C,EAAK36C,OACb2B,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCtiB,KAAM,EACR,CAAC,EAEK6W,EAAY,IAAIjB,GAChBoxJ,EAAmBnwJ,EAAUy+B,OAAO,CACxCz2C,OAAQ26C,EAAK36C,OACbG,cAAe,EACjB,CAAC,EAEDG,EAAMu1C,OAAO79B,EAAUxD,OAAO,EAE9BtS,EAAaisB,KAAKzK,EAAOsG,kBAAmBm+I,CAAgB,EAC5D39I,EAAIqrB,OAAOnyB,EAAOhJ,KAAMpa,CAAK,EAC7Bg6B,EAAIx4B,UAAU+zC,OAAOrrB,CAAG,CACzB,EACD49I,gBAAiB,eACjBC,YAAaA,IAAM,CACjBA,GACD,EACDC,SAAUA,IAAM,CAEd,MAAMtrJ,EAAYwrF,KAAKloE,MACvBpV,GAAQ,KACN,KAAK85B,WAAWujH,WACC7iJ,KAAK22B,KAAKmsD,KAAKloE,IAAG,EAAKtjB,GAAa/Z,IAAU,CAAC,EAC9C,EACnB,CACH,CACF,CAAC,EAEKulK,EAAgBnB,EAAO7+I,IAAKyxB,GAChB4F,EAAe4oH,YAAYxuH,CAAK,GAChCx/B,KACjB,EAAEoO,OAAO2F,OAAO,EAEXk6I,EAA2Bn2J,SAAS6Y,cAAc,KAAK,EAC7D,KAAKqyB,gBAAkB,IAAIrD,GAAgB,CACzCxiB,SAAU8wI,EACVliK,OAAQxG,EAAOumG,SAAU,EACzBvxE,eAAgB,KAAKA,cACvB,EAAG,KAAK50B,QAAQ,EAEhB,IAAIioK,EACJ,KAAK7kD,YAAY,IAAM,CACrB,KAAM,CAACmlD,EAASC,CAAU,EAAI95J,GAAuB,CAAE,GACjD,CAAC+5J,EAAWC,CAAY,EAAIh6J,GAAa,EAAI,EAC7Ci6J,EAAgBA,IAAMF,EAAS,EAClCF,EAAS,EAACnpK,SAAW,EAAI,2BAA6B,4BACtDmpK,EAAO,EAAGnpK,SAAW,EAAI,sBAAwB,uBAEpD6oK,SAAcA,IAAM,CAClB,MAAMvzJ,EAAUuyJ,EACfx+I,OAAQoxB,GAAUA,EAAM1wC,SAAW,OAAS0wC,EAAMhqB,cAAcY,SAAWopB,EAAMj6C,MAAM,EACvFwoB,IAAI,CAAC,CAACxoB,QAAO,IAAKA,CAAM,EACzB4oK,EAAW9zJ,CAAO,GAGpB5H,GAAa,IAAM,CACby7J,EAAS,EAACnpK,QACZspK,EAAa,EAAI,CAErB,CAAC,EAED57J,GAAa,IAAM,CACjB,MAAM+sC,EAAQotH,EAAO9/I,KAAM0yB,GAAUA,EAAM1wC,SAAW,QAAUu+J,EAAe,GAAO,CAAC7tH,EAAMj6C,OAAO,EAC9FgpK,EAAcvoK,GAAKoW,QAAQ4M,IAAIw2B,EAAM3f,IAAIh6B,MAAMkyE,iBAAgC,EACrF,KAAK80F,YAAc,CAACuB,IACpBG,EAAY7Z,iBAAiB,CAC3Bn5I,IAAK6yJ,EAAS,EACXf,EAAe,YAAc,iBAC7BA,EAAe,iBAAmB,qBACvC,CAAC,CACH,CAAC,EAED56J,GAAa,IAAM,CACjB,GAAG,CAAC27J,EAAS,EAAI,CAEf,MAAM7rJ,EAAYwrF,KAAKloE,MACjB2oI,EAAiB,KAAKjkH,WAAWikH,eAAiB,KAAKjkH,WAAWkkH,WAElEl1I,EAAO,IADQ,KAAKgxB,WAAWmkH,WACHF,EAClC/9I,GAAQ,IAAM,CACZ,MAAMmQ,EAAW3V,KAAK22B,KAAKmsD,KAAKloE,IAAG,EAAKtjB,GAAa/Z,IAAU,CAAC,EAC1DmmK,EAAoBH,EAAiBj1I,EAAOqH,EAClD,YAAK2pB,WAAWikH,eAAiBG,EAC1B/tI,EAAW,CACpB,CAAC,CACH,CACF,CAAC,EAGDtY,GAEKkgC,GAAO,CAAC7oB,KAAI,0BAA2B0pB,SAAQ,GAACR,YAAW,OAAAx0B,UAAA,QACzDqE,GAAQq1I,CAAa,CAAC,EAAAzlJ,IAExBkgC,GAAO,OACE,GAAEhnC,EAAU,eACpBme,KAAI,iCACJopB,UAAQ,OAAE,CAACmlH,IAAUnpK,MAAM,CAAC,EAC5BskD,SAAQ,OACR19B,OAAK,OAAE,CAEL,aAAcyiJ,IAAc,MAAQ,QACrC,EAAA/5I,SAEA45I,EAAwB3lJ,IAE1BkgC,GAAO,KACN/8B,WAAS,OAAE,CAACmsB,KAAM,CAACs2H,EAAO,EAAGnpK,OAAO,MAAAsvB,UAAA,QAAA/L,EAEnC8W,GAAM,CAAAupB,IACC72C,GAAM,CAEVA,EAAE2Z,UAAUS,IAAI,SAAS,CAC1B,MACDrmB,OAAK,mBAAA4hB,EAAAC,KAAAS,SAAAV,EAEA3d,MAAKwkK,EAAe,GAAC,MAAAnmJ,EAAAV,EAAAa,EACrBosE,GAAO,CAACjmE,KAAI,aAAgB,GAAEjN,EAAU,kBAAiB,SAAAmG,OAAAiN,GAAAnN,EAFhD3H,GAAY,GAAE0B,EAAU,cAAc,CAAC4sJ,EAAS,GAAM,aAAa,CAAC,GAAA3mJ,CAAA,MAKlFoc,UAAWA,IAAM,CACfwqI,EAAc9tI,GAAM,CAACA,CAAC,CACvB,EACD/yB,MAAK,eAKf,CAAC,EAED,MAAMwc,QAAQya,IAAIh9B,CAAY,EAE9B,KAAKw6D,KAAI,CACX,CACF,CC7SA,MAAqBw0E,EAAoB,CACvC,YACUlxI,EACAkS,EACAmS,EACAyqH,EACAzuI,EACR,CALQ,YAAAL,EACA,UAAAkS,EACA,UAAAmS,EACA,eAAAyqH,EACA,cAAAzuI,EAER,KAAK,UAAU,CACjB,CAEA,MAAc,WAAY,CACxB,GAAI,CAAC,OAAAL,EAAQ,KAAAkS,EAAM,KAAAmS,EAAM,UAAAyqH,EAAW,SAAAzuI,CAAY,OAEhD6R,EAAOA,EAAK,QAEZ,MAAM9R,EAAW0vB,GAAa,SACxBa,EAAmB,MAAMhe,GAAc,CAAC,OAAA3S,EAAQ,SAAAK,EAAU,cAAe,GAAK,EAC9E++B,EAAW,MAAM,QAAQ,IAAIltB,EAAK,IAAKvE,GAAQvN,EAAS,mBAAmB,iBAAiBJ,EAAQ2N,CAAG,CAAC,CAAC,EAEzGm8F,EAAc,MAAM1pG,EAAS,gBAAgB,YAAYJ,CAAM,EAClE,GAAA8pG,GAAe,CAAC1qE,EAAS,KAAM91B,GAAYA,EAAQ,OAAO,GAAG,EAAG,CACjE,MAAMkuC,EAAe,MAAMp3C,EAAS,kBAAkB,gBAAgB,CACpE,GAAIJ,EAAO,SAAS,EACpB,OAAQ,CAAC,EAAG,2BAA2B,EACvC,MAAO,IACR,EAMD,GAAG,CAJgBo/B,EAAS,KAAM91B,GACzBkuC,EAAa,aAAa,KAAMhQ,GAAgB+J,GAAqB/J,CAAW,IAAMl+B,EAAQ,MAAM,CAC5G,EAEe,CACdwmB,GAAa,YAAYm3I,GAA8B,CACrD,SAAA7nI,EACA,UAAW,KAAK,UACjB,EACD,MACF,CACF,CAEA,MAAMv1B,EAAW,CAAC0C,EAAeskB,EAA4Cy8H,IAAqB,CACpFxe,MACTzqH,IAAS24D,GAAS,UACV58E,EAAA,mBAAmB,wBAAwBJ,EAAQkS,CAAI,EAEvD9R,EAAA,mBAAmB,eAAeJ,EAAQkS,EAAM,CAAC,CAAC2e,EAAQ,MAAQy8H,CAAM,CACnF,EAGIl8H,EAAuC,CAAC,CAC5C,QAAS,SACT,SAAU,GACV,SAAAvnB,CAAA,CACD,EACKknB,EAA6C,GAC/C,IAAAzwB,EAAoB2wB,EAAkBC,EAA0BC,EAcpE,GAbGjf,EAAK,SAAW,EACT5R,EAAA,6BAEAA,EAAA,sBACR2wB,EAAY,CAAC1sB,EAAK,WAAY,CAAC2N,EAAK,MAAM,CAAC,CAAC,GAG3C43F,EACa54E,EAAAhf,EAAK,SAAW,EAAI,oCAAsC,kCAE1Dgf,EAAAhf,EAAK,SAAW,EAAI,gCAAkC,8BAGnE,EAAAlS,IAAWC,EAAU,MAAQokB,IAAS24D,GAAS,WAElD,GAAUh9E,EAAO,SACf+wB,EAAW,KAAK,CACd,KAAM,2BACN,SAAU,CAACJ,CAAgB,EAC5B,MACI,CACL,MAAMyW,EAAO,MAAMhnC,EAAS,gBAAgB,QAAQJ,EAAO,UAAU,EAE/DqpK,EAAap4H,GAAU7J,EAAM,iBAAiB,EACjD,GAAAA,EAAK,IAAM,OAAQ,CACd,MAAAkiI,EAAYD,EAAan3J,EAAK,QAAUA,EAAK,OAAO,CAACvE,EAAKrK,IAC9C87B,EAAS97B,CAAG,EACb,SAAWrD,EAAU,IACrC,EAEEqpK,EAAU,SACRA,EAAU,SAAWp3J,EAAK,OAC3B6e,EAAW,KAAK,CACd,KAAM,eACP,GAEDA,EAAW,KAAK,CACd,KAAM,uBACP,EAEaG,EAAA,0BACdC,EAAkB,CAAC5sB,EAAK,WAAY,CAAC+kK,EAAU,MAAM,CAAC,CAAC,GAE3D,KACK,CACD,IAAAC,EACKnqI,EAAA,KAAM91B,GACNA,GACJA,EAA4B,OAAO,IAAM,wBAC1C,CAAEA,EAA4B,YAC7BigK,EAAiBjgK,EAA4B,MACjD,EAEEigK,GAAiBA,EAAc,YAAc3uI,GAAM,EAAI,IAChDt6B,EAAA,iCACM4wB,EAAA,gCACdC,EAAkB,CAAC2oC,GAAmByvG,EAAc,WAAY,OAAW,EAAI,CAAC,GAG1En4I,EAAA,CAAC,EAAE,SAAW,CAAC7kB,EAAGskB,IAAYhnB,EAAS0C,EAAGskB,EAAS,EAAI,CACjE,CACF,CAEAd,GAAgBqB,CAAO,EAETtB,GAAa,YAAYD,GAAW,oBAAqB,CACrE,OAAA7vB,EACA,SAAAK,EACA,aAAcC,EACd,cAAe2wB,EACf,mBAAoBC,EACpB,oBAAqBC,EACrB,QAAAC,EACA,WAAAL,CAAA,CACD,EAEK,KAAK,CACb,CACF,CCpJA,SAAwBy4I,GAAiBhhI,EAAY,OAAO,eAAgB,CACvE,IAACA,GAAW,WACN,SAGH,MAAAihI,EAAiBjhI,EAAU,WAAW,CAAC,EAC7C,MAAG,GAAAihI,EAAe,WAAa,CAACA,EAAe,aAKjD,CCHwB,SAAAC,GAA4BxiK,EAAemf,EAAgBC,EAAiB,CAC3F,OAAArmB,EAAU,SAAS,mBAAmB,4BAA4BiH,CAAK,EAAE,KAAK,CAAC,CAAC,IAAAjF,KAAS,CAC9F,GAAIA,EAIG,OAAA8e,GAAmB,cAAc,CAAC,MAAO9e,EAAI,EACnD,KAAK,MAAMksE,GAAS,CACb,MAAAksC,EAAY34G,GAAW,OAAO,aAC9BioK,EAAYC,GAAkB1iK,CAAK,EACnC+iB,EAAmBva,KACnByiC,EAAY,MAAMp6B,GAAa,oBAAoB,CACvD,UAAW,OACX,cAAeo2D,EACf,MAAgBksC,EAAU,MAC1B,OAAkBA,EAAU,OAC5B,KAAM,MAAQp4G,EAAI,GAClB,SAAU,GACV,KAAM,GACN,UAAA0nK,EACA,MAAO,OACP,WAAY1/I,EAAiB,IAAI,EAClC,EAESkoB,EAAA,iBAAiB,aAAc,IAAM,CAC7C03H,GAAkB5nK,EAAKkwC,EAAU,OAAO,CAAC,EAAGw3H,CAAS,EACrD1/I,EAAiB,QAAQ,GACxB,CAAC,KAAM,GAAK,EAChB,EACF,CACH,CClCA,eAA8B6/I,GAAiB/pK,EAI3C,CACI,MACJ,MAAAmH,EACA,IAAAsjB,EACA,SAAApqB,EAAWH,EAAU,QACnB,EAAAF,EACEkC,EAAM,MAAM7B,EAAS,mBAAmB,wBAAwB8G,CAAK,EAC3E,GAAG,CAACjF,EACE,MAAAuoB,EAAA,UAAU,IAAI,uBAAuB,EACnC,IAAI,MAAM,YAAY,EAG9B,OAAOnoB,GAAY,CACjB,IAAAJ,EACA,KAAM,GACN,KAAM,GACN,GAAGlC,CAAA,CACJ,CACH,CCpBA,MAAqBgqK,GAArB,MAAqBA,WAAmCl6I,EAAU,CAGhE,YACE7vB,EACAkS,EACA1H,EACAw/J,EACAjgE,EACA,CACA,MAAM,gCAAiC,CACrC,QAAS,GACT,mBAAoB,aACpB,QAAS,CAAC,CACR,QAAS,aACT,SAAU,IAAM,CACX,IAAC3hE,EAAW,UACb,OAGKt+B,EAAA,GACIkgK,MACP,IAAAr+J,EACDo+F,EACSp+F,EAAA,KAAK,SAAS,kBAAkB,OAAO3L,EAAQkS,EAAM1H,EAAQ49B,EAAW,KAAK,EAE7Ez8B,EAAA,KAAK,SAAS,mBAAmB,eAAe3L,EAAQkS,EAAM1H,EAAQ49B,EAAW,KAAK,EAGlGz8B,EAAQ,KAAK,IAAM,CACR6mB,GAAA,CACP,YAAa,iBACd,EACF,CACH,EACD,EACD,KAAM,GACP,EAEK,MAAAhI,EAAM,SAAS,cAAc,KAAK,EAClCrpB,EAAO,IACI2oK,GAAA,CACf,IAAAt/I,EACA,MAAOu/I,GAA2B,cAClC,MAAO5oK,EACP,OAAQA,CAAA,CACT,EAAE,KAAK,CAAC,CAAC,OAAAwiB,CAAY,IAAAA,CAAM,EAAE,QAAQ,IAAM,CAC1C,KAAK,KAAK,EACX,EAEI,YAAO,YAAY6G,CAAG,EAErB,MAAA4d,EAAa,IAAIhH,GAAW,CAChC,MAAO,aACP,UAAW,IACX,YAAa,wBACd,EAEUgH,EAAA,MAAM,iBAAiB,QAAS,IAAM,CAC1C,aAAQ,CAAC,EAAE,QAAQ,gBAAgB,WAAY,CAACA,EAAW,SAAS,EAC1E,EAED,IAAIt+B,EAAO,GACCkgK,GAAA,KAAK,iBAAiB,QAAS,IAAM,CAC3ClgK,GACOkgK,GACX,EACC,CAAC,KAAM,GAAK,EAEV,UAAK,OAAO5hI,EAAW,SAAS,CACvC,CACF,EAtEE2hI,GAAc,cAAgB,QADhC,IAAqBE,GAArBF,GCKA,MAAqBG,WAA4Br6I,EAAU,CACzD,YACE7vB,EACAkS,EACA83J,EACAjgE,EACA,CACA,MAAM,wBAAyB,CAC7B,aAAcA,EAAU,oBAAsB,2BAC9C,QAAS,CAAC,EACV,KAAM,GACP,EAED73F,EAAOA,EAAK,QAEZ,MAAMkf,EAA8C,CAClD,CAAC,iBAAkB,uBAAuB,EAC1C,CAAC,qBAAsB,2BAA2B,EAClD,CAAC,kBAAmB,6BAA6B,EACjD,CAAC,wBAAyB,8BAA8B,EACxD,CAAC,kBAAmB,wBAAwB,EAC5C,CAAC,4BAA6B,kCAAkC,EAChE,CAAC,yBAA0B,+BAA+B,GAGtDnV,EAAY,8BACVmV,EAAA,QAAS8D,GAAM,CACf,MAAA/E,EAASqJ,GAAOvd,EAAW,CAAqB,KAAMiZ,EAAE,CAAC,EAAE,EAC5D,UAAK,OAAO/E,CAAM,EACxB,EAEK,MAAAg6I,EAAwBT,GAA4BO,GAA2B,aAAa,EAElG,IAAIG,EAAY,GACCvtJ,EAAA,KAAK,KAAOtQ,GAAM,CACjC,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,aAAa,EAChD/B,EAAS4mB,EAAQkU,GAAWhgB,CAAM,CAAC,EAAE,CAAC,EAE5C6kJ,EAAsB,KAAK,IAAM,CACnBC,EAAA,GACZ,KAAK,KAAK,EAEGt6I,GAAA,YACXm6I,GACAjqK,EACAkS,EACA1H,EACAw/J,EACAjgE,CAAA,CACF,CACD,CACA,GAAC,eAAgB,KAAK,cAAe,GAE5BigE,GAAA,KAAK,iBAAiB,QAAS,IAAM,CAC3CI,GACOJ,GACX,EACC,CAAC,KAAM,GAAK,EAGV,eAAU,MAAM,UAAY,QAEjC,KAAK,KAAK,CACZ,CACF,CCjFA,SAAwBK,GAAe5gK,EAAa,CAC3C,YAAKA,EAAK,SAAU,YAAY,CACzC,CCQA,MAAqB6gK,WAAuBz6I,EAAU,CACpD,aAAc,CACZ,MAAM,kBAAmB,CACvB,aAAc,8BACd,mBAAoB,uBACpB,oBAAqB,CAACtrB,EAAK,6BAA6B,CAAC,EACzD,QAAS,CAAC,CACR,QAAS,KACT,SAAU,IACT,CACD,QAAS,2BACT,SAAU,IAAM,CACd8lK,GAAe5pK,GAAK,OAAO,8BAA+B,EAAI,CAAC,CACjE,EACA,SAAU,GACX,EACD,WAAY,GACb,EAEI,gBAAW,OAAO,KAAK,WAAW,EAEvC,KAAK,KAAK,CACZ,CACF,CCRA,MAAMU,GAAO,GACPopK,GAAalrJ,GAAcle,GAAMA,EAAI,EAC3C,eAAsBqpK,GAAgC,CACpD,OAAAxqK,EACA,cAAA2+B,EACA,SAAAugB,EACA,WAAAv9C,EACA,OAAA8oK,EACA,KAAA73J,EACA,UAAAynG,EAAYkwD,EACd,EAQG,CACK,MAAC,IAAA9lI,CAAO,EAAA9F,EACd,GAAGugB,EAAU,CACL,MAAA+C,EAAmB,SAAS,cAAc,KAAK,EAGlD,GAFcA,EAAA,UAAU,IAAI,4BAA4B,EAExD/C,EAAS,IAAM,gBAAiB,CACjC,MAAMc,EAAoB,MAAM//C,EAAU,SAAS,oBAAoB,YAAYi/C,EAAS,QAAQ,EAExF78C,GAAA,CACV,IAAK29C,EAAkB,YACvB,IAAKiC,EACL,MAAO,GACP,OAAQ,GACR,WAAAtgD,CAAA,CACD,OACOu9C,EAAS,IAAM,uBACvB+C,EAAiB,OAAOp5C,GAAgB,CACtC,OAAQ,CAACq2C,EAAS,WAAW,EAC7B,gBAAiBm7D,EACjB,WAAA14G,CACD,EAAC,EAGA8iC,EAAA,OAAO,OAAOwd,CAAgB,CACpC,CAEA,GAAGrvC,GAAQ63J,EAAQ,CACX,MAAAxxJ,EAAI,SAAS,cAAc,MAAM,EACnCwrB,EAAA,gBAAgB,MAAM,QAAU,iDACpC,MAAM3jC,EAAOG,GAAKi+C,EAAW,YAAc,SAAU,qBAAqB,EACpE16C,EAAW,SAAS,yBAC1ByU,EAAE,OAAO6gD,GAAmBlnD,EAAM,EAAK,CAAC,EAC/BpO,EAAA,OAAO1D,EAAMmY,CAAC,EACR5B,GAAAotB,EAAI,gBAAiBjgC,CAAQ,MACvC,CACC,MAAAjE,EAAO,MAAMN,EAAU,SAAS,gBAAgB,QAAQD,EAAO,UAAU,EAC/EqX,GAAeotB,EAAI,gBAAiB3B,GAAoBviC,CAAI,CAAC,CAC/D,CACF,CAEA,MAAqBmqK,WAAyB56I,EAAa,CACzD,YACUxmB,EACR,CACM,2BAAsB,CAAC,SAAU,GAAM,gBAAiB,GAAM,KAAM,GAAK,EAFvE,aAAAA,EAIR,KAAK,KAAK,CACZ,CAEA,MAAc,MAAO,CACb,MAAA3H,EAAa,KAAK,iBAAiB,IAAI,EACvC2H,EAAU,MAAM,KAAK,SAAS,mBAAmB,sBAAsB,KAAK,OAAO,EACzF,GAAG,CAAC3H,EAAW,EAAG,OAClB,MAAMgpK,EAA0B,MAAM,KAAK,SAAS,mBAAmB,+BAA+BrhK,CAAO,EAC7G,GAAG,CAAC3H,EAAW,EAAG,OAGZ,MAAA+vF,EAAmB,IAAIC,GACvBouC,EAA8B,CAClC,GAAGz2H,EACH,IAAK,EACL,GAAI,EACJ,UAAW,CACT,EAAG,mBACH,QAAS,CAAC,EAEV,GAAGA,EAAQ,UAEX,OAAQ,CAAC,EACT,iBAAkB,CAAC,CACrB,GAGFy2H,EAAW,UAAU,QAAUA,EAAW,UAAU,QAAQ,IAAKjzC,IACxD,CACL,GAAGA,EACH,aAAc,OACd,OAAQ,CAAC,GAEZ,EAED4E,EAAiB,KAAK,CACpB,QAASquC,EACT,KAAM30C,GAAmB,MACzB,WAAY,KAAK,iBAAiB,IAAI,EACvC,EACDsG,EAAiB,OAAO,EACPA,EAAA,UAAU,IAAI,WAAW,EACzBA,EAAA,UAAU,OAAO,kBAAkB,EAEnCA,EAAA,OAAO,KAAK,QAAQ,EAEhC,YAAO,OAAOA,CAAgB,EAE7B,MAAAh5C,EAAgB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gBAAgB,EAC5CA,EAAc,QAAQ,UAAY,OAE5B,MAAAkyH,MAAkD,IAGrD,GAAA7qC,EAAW,UAAU,QAAQ,OAAQ,CACtC,MAAM7gF,EAAW,KAAK,mBAAmB,YAAa6gF,EAAW,UAAU,QAAQ,OAAO,CAACjlH,EAAKhK,IAAMgK,EAAMhK,EAAE,MAAO,CAAC,CAAC,EAEvH4gF,EAAiB,QAAQxyC,CAAQ,EACjC6gF,EAAW,UAAU,QAAQ,QAAQ7gF,EAAS,aAAa,CAE7D,CAEA,IAAI2rH,EAAsB,GAC1B,GAAGF,EACG,IACI,MAAAG,EAAc,MAAM,KAAK,SAAS,mBAAmB,2BAA2BxhK,EAAQ,OAAQA,EAAQ,GAAG,EACjH,GAAG,CAAC3H,EAAW,EAAG,OACf,IAACmpK,EAAY,OACR,QAGR,MAAM5rH,EAAW,KAAK,mBAAmB,SAAU4rH,EAAY,MAAM,EAErEp5E,EAAiB,QAAQxyC,CAAQ,EACjC6gF,EAAW,UAAU,QAAQ,QAAQ7gF,EAAS,aAAa,EACrC2rH,EAAA,QACX,CAEb,CAGCn5E,EAAiB,qBACDA,EAAA,OAAOA,EAAiB,mBAAmB,EAG9DquC,EAAW,UAAU,QAAQ,QAASjzC,GAAkB,CAChD,MAAA9nC,EAAa,IAAI/lB,GAAW,MAAS,EAChC+lB,EAAA,UAAU,UAAU,IAAI,UAAU,EAEvC,MAAAjqC,EAAU,IAAIsoB,GAAe,CACjC,SAAU,GACV,YAAa,GACd,EAEK6e,EAAWxjB,GAAkB,eAAe,CAChD,WAAY,GACb,EAEDA,GAAkB,qBAAqB,CACrC,KAAMwjB,EACN,QAAS,IAAM,CACb,KAAK,KAAK,CACZ,EACA,YAAa,OACb,WAAY,GACZ,UAAW,GACZ,EAEOnnC,EAAA,QAAQ,OAAOmnC,CAAQ,EACpB8C,EAAA,OAAOjqC,EAAQ,SAAS,EAE7B,MAAAgwJ,EAAwBj+E,EAAc,WAAqB,SAC3Dk+E,EAAqBl+E,EAAc,WAAqB,SAC3D,CAAC,SAAU,WAAW,EAAE,SAASA,EAAc,QAAe,IAC/DA,EAAc,SAAW,QAGvB,IAAAvX,EACE,MAAAj3B,EAAS,IAAI3N,GAAiB,CAClC,WAAAqU,EACA,WAAY,SAAW,CACrB,MAAMjjD,EAAS,MAAM,KAAK,SAAS,mBAAmB,2CAA2CuH,EAAS,OAAWwjF,EAAc,SAAUvX,EAAYw1F,EAAsBC,CAAiB,EAChM,OAAAz1F,EAAaxzE,EAAO,WAEd,cAAQ,IAAIA,EAAO,SAAS,IAAI,MAAM,CAAC,OAAA/B,EAAQ,SAAAk/C,EAAU,KAAAtsC,KAAU,CACjE,MAAA+rB,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,WAAY,GACZ,UAAWkiD,EACX,WAAY,aACZ,cAAe,GACf,UAAW,GACX,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAED,MAAMsoH,GAAgC,CACpC,cAAA7rI,EACA,KAAA/rB,EACA,OAAQtJ,EAAQ,OAAO,IACvB,WAAA3H,EACA,OAAA3B,EACA,SAAAk/C,CAAA,CACD,CACF,EAAC,EAEK,CAACq2B,CACV,EACD,EAEOq1F,EAAA,IAAI5lH,EAAW,UAAW1G,CAAM,EAE1B5F,EAAA,OAAOsM,EAAW,SAAS,EAC1C,EAEI,UAAK,OAAOtM,CAAa,EAE9B,MAAMkgE,EAAY5+B,GAAe0X,EAAkBh5C,EAAe,CAAC5W,EAAImpI,IAAe,CACpF,GAAGnpI,GAAO4vD,EAAiB,mBAAqBA,EAAiB,oBAAsB,EAAI,GAClF,SAGH,MAAAxyC,EAAWwyC,EAAiB,SAAS5vD,CAAE,EACvCopI,EAAStyD,EAAU,SACtBsyD,IAAW,IACXx5E,EAAiB,SAASw5E,CAAM,EAAsB,YAAY,EAAK,EAG1EhsH,EAAS,YAAY,EAAI,EAEV0rH,EAAQ,IAAIK,CAAU,EAC9B,KAAK,GACX,OAAW,OAAW,OAAW,KAAK,cAAc,EAGvDryD,EAAU,EAAG,EAAK,EAElB,KAAK,KAAK,CACZ,CAEQ,mBAAmB1vF,EAAYiW,EAAe,CAC9C,MAAA+f,EAAW,IAAI2tC,GACrB3tC,EAAS,KAAKksC,GAAmB,MAAO,KAAK,iBAAiB,KAAK,EACnElsC,EAAS,cAAgB,CACvB,EAAG,gBACH,MAAA/f,EACA,SAAUjW,CAAA,EAEZg2B,EAAS,oBAAoB,EAAK,EAClCA,EAAS,cAAc,EAEjB,MAAAghH,EAAsB,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,mBAAoB,uBAAuB,EACzDA,EAAA,OAAOj/J,GAAKioB,CAAI,CAAC,EACrCg2B,EAAS,QAAQghH,CAAmB,EAE7BhhH,CACT,CACF,CC3PA,MAAMisH,GAAuB,qBACvBC,GAAsBD,GAAuB,YAE7CE,GAAuB,EACvBC,GAAgB,GAChBC,GAAU,EACHC,GAA0BF,GAAgBC,GAAU,EAE3DE,GAAoB,CAAC7lH,GACrB8lH,GAAiBD,IAAqB,GASrC,MAAME,EAAkB,CAuB7B,YAAY5rK,EAWT,CAiFK,YAAS,MAAM6rK,EAAgC/9C,IAAqB,CACpE,MAAAlsH,EAAa,KAAK,iBAAiB,IAAI,EAE1C,GADG,cAAQ,IAAIiqK,CAAc,EAC7B,CAACjqK,IACF,OAGC,GAAAksH,GAAW,CAAC,KAAK,aAAc,CAChC,MAAMjhB,EAAarrE,GAAW,GAAG,KAAK,WAAa,SAAW,OAAS,IAAI,IAAI4pI,EAAoB,QAAS,CAAC,SAAU,GAAK,EACvH,eAAU,OAAOv+D,CAAU,EAChC/vF,EACE+vF,EACA,KAAK,YACL,CAAC,eAAgB,KAAK,cAAc,EAExC,CAMO,MAJY,IAAM,CAClB,oBAAe,UAAU,IAAI,YAAY,EAGzC,EAwHD,qBAAmB1tD,GAAuB,CAChD,IAAIj2C,EAASi2C,EAA0C,YACvD,OAAIj2C,IAEFA,EAD0B,KAAK,mBAAmB,KAAMi2J,GAAcA,EAAU,WAAchgH,EAAoC,QAAQ,EAChH,iBAAiB,IAGtCj2C,CAAA,EAGD,uBAAqB4oF,GACpBA,EAAU,IAAI,KAAK,eAAe,EAG3C,KAAQ,SAAW,IAGV,CAFkB,KAAK,SAAS,oBAAoB,kBAC1D,KAAK,KAAK,iBAAiB,CACJ,EAG1B,KAAQ,YAAc,IAOb,CANkB,KAAK,SAAS,oBAAoB,sBAC1D,KAAMg6E,GACEA,EAAiB,OAAQtpF,GACvB,CAAC,CAACA,EAAgB,mBAC1B,EAAE,IAAKA,GAAoBA,EAAgB,iBAAiB,CAC9D,CACuB,EAG1B,KAAQ,cAAgB,IAAM,CACtB,MAAAupF,EAAsB,QAAQ,QAAQ,KAAK,SAAS,EAEzD,KAAK,KAAK,iBAAiB,EAEtBC,EAA4B,KAAK,SAAS,oBAAoB,qBACnE,KAAK,KAAK,iBAAiB,EAEtBC,EAA4BF,EAAoB,KAAMhjK,GAAW,KAAK,QAAUA,EAASA,EAAO,MAAM,EAAG,EAAE,CAAC,EAE5GmjK,EAAyB,KAAK,QAAU,OAAY,QAAQ,IAAI,CACpEH,EACAC,EACAC,CAAA,CACD,EAAE,KAAK,CAAC,CAACE,EAAWC,EAAcC,CAAe,KAEjCD,IAAa,OAAQljK,GAAU,CAACmjK,EAAgB,SAASnjK,CAAK,CAAC,EAC9EkjK,EAAa,KAAK,GAAGD,EAAU,MAAM,EAAE,CAAC,EACjC56H,GAAa66H,CAAY,EACjC,EAED,MAAO,CAACH,EAA2BC,CAAsB,EAAE,OAAO,OAAO,GAGnE,iBAAe1/J,GAAkB,CACvCqQ,GAAYrQ,CAAC,EAEP,MAAA8/J,EAAY,KAAK,SAAW,KAAK,SAEjC1yF,EAAW,IAAI1G,GAAS,CAC5B,eAAgB,GAChB,QAAS,KAAK,QACd,SAAU,KAAK,SACf,SAAU,KAAK,SACf,SAAU,KAAK,OAAS,KAAK,SAAY,KAAK,UAAY,KAAK,YAAc,KAAK,cAClF,0BAA2B,KAAK,UAAY,SAAW,CACrD,MAAM44F,EAAmB,MAAM,KAAK,SAAS,oBAAoB,oBAAoB,EACrF,OAAQ,MAAM,KAAK,sBAAsBA,CAAgB,GAAG,eAC1D,SACJ,QAAS,MAAM3kK,GAAU,CACpB,GAAAA,EAAM,OAASA,EAAM,MAAO,CAEvB,MAAAolK,GADqB,MAAM9rK,GAAgB,yBACJ,KAAM0+J,GAAcA,EAAU,kBAAkB,KAAOh4J,EAAM,KAAK,EAC5GolK,IACDplK,EAAM,MAAQolK,EAAkB,SAChC,OAAOplK,EAAM,MAEjB,CAEM,MAAAg4C,EAAqBh4C,EAAM,MAAQ,CACvC,EAAG,sBACH,YAAaA,EAAM,OACjB,CACF,EAAG,gBACH,SAAUA,EAAM,OAElBuF,EAAS,QAAQyyC,CAAQ,EACzBsnB,EAAkB,eAAe,CACnC,EACA,gBAAiB,KAAK,gBACtB,QAAS,IAAM,CACP,MAAAhyD,EAAUgyD,EAAkB,aAElC,GAAG6lG,EAAW,CACN,MAAAvqK,EAAY0S,EAAQ,cAA2B,iCAAiC,EACtFA,EAAQ,MAAM,YAAY,WAAY1S,EAAU,aAAe,IAAI,CACrE,CACF,EACA,cAAe,KAAK,UAAY,MAAMg3C,GAAM,CACpC,MAAA+yH,EAAmB,MAAM,KAAK,SAAS,oBAAoB,uBAAuB,CAAC,EAAA/yH,EAAE,EACpF,YAAK,sBAAsB+yH,CAAgB,CAChD,SACJ,aAAc,KAAK,UAAY,MAAMU,GAAe,CAC5C,MAAAV,EAAmB,MAAM,KAAK,SAAS,oBAAoB,uBAAuB,CAAC,SAAWU,EAAqC,UAAU,EAC5I,YAAK,sBAAsBV,CAAgB,CAChD,SACJ,UAAW,KAAK,UACjB,EAEKrlG,EAAoB,IAAI2K,GAAkB,CAC9C,aAAc,CAACwI,CAAQ,EACvB,oBAAqB,SAAS,KAC9B,gBAAiB,IAAM,KAAK,gBAAgB,CAAC,KAAK,OAAO,EAC1D,EAEE0yF,GACD7lG,EAAkB,WAAW,EAAE,UAAU,IAAI,QAAQ,EAGpD,KAAK,WACNA,EAAkB,WAAW,EAAE,UAAU,IAAI,SAAS,EAGxD,MAAM/5D,EAAWC,KACjB,KAAK,SAASD,CAAQ,EACJ+5D,EAAA,iBAAiB,SAAU,IAAM,CACjD/5D,EAAS,QAAQ,MAAS,EAC1B+5D,EAAkB,eAAe,EAClC,EAEDA,EAAkB,cAAc,GAmL1B,iBAAej6D,GAAkB,CACvC,MAAMigK,EAAcjnJ,EAAgBhZ,EAAE,OAAQ6+J,EAAmB,EACjE,GAAG,CAACoB,EACF,OAGF,MAAMC,EAAU,KAAK,aAAa,IAAID,CAAW,EAM9C,GALA,CAACC,GAKD,CAACA,EAAQ,QAAQ,OAClB,OAGF,MAAM30J,EAAS20J,EAAQ,OACnB30J,GAIDA,EAAO,SACRA,EAAO,SAAW,GAClBA,EAAO,QAAQ,EACjB,EA1iBA,KAAK,SAAW/X,EAAQ,SACxB,KAAK,iBAAmBA,EAAQ,WAAaA,EAAQ,WAAW,SAAW2P,KAC3E,KAAK,SAAW3P,EAAQ,SACnB,oBAAiB,IAAIo4B,GACrB,UAAOp4B,EAAQ,MAAQurK,GACvB,cAAWvrK,EAAQ,UAAY,SACpC,KAAK,gBAAkBA,EAAQ,gBAC/B,KAAK,aAAeA,EAAQ,aAC5B,KAAK,OAASA,EAAQ,OACtB,KAAK,UAAYA,EAAQ,UAEzB,KAAK,iBAAiB,IAAM,YAAU,IAAM,CAC1C,KAAK,eAAe,WAAU,CAC/B,EAED,MAAM2sK,EAAiB,KAAK,eAAiB,SAAS,cAAc,KAAK,EAOtE,GANHA,EAAe,UAAU,IACvBvB,GAAuB,aACvBA,GAAuB,cAAgBprK,EAAQ,KAC/C,uBAGC,KAAK,QAAU,KAAK,UAAW,CACjB2sK,EAAA,UAAU,IAAIvB,GAAuB,iBAAsB,EAC1E,MAAMj6I,EAAc,KAAK,UAAY3sB,EAAK,sBAAsB,EAAIA,EAClEtE,EAAU,QAAU,4BAA8B,4BAClD,CACEo1C,GAAe,IAAM,CACnBzhB,GAAsB,MAAM,EAC5B4iB,GAAa,KAAK,CAAC,QAAS,YAAa,GAC1C,CACH,GAEUtlB,EAAA,UAAU,IAAIi6I,GAAuB,cAAc,EAC/DuB,EAAe,OAAOx7I,CAAW,CACnC,CAEA,MAAMy7I,EAAqB,KAAK,UAAY,SAAS,cAAc,KAAK,EACxEA,EAAmB,UAAU,IAAIxB,EAAA,EAWjC,CAAC,KAAK,EAAE,QAAS9mJ,GAAS,CAClB,MAAA8gC,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,UAAU,IACfgmH,GAAuB,UACvBA,GAAuB,WAAa9mJ,CAAA,EAGtCqoJ,EAAe,OAAOvnH,CAAM,EAC7B,EAEI,sBAAmB,IACxB,KAAK,eAAiB,uBAAuB,KAAK,IAAK,IAClC8N,GAAA,qBAAqB,KAAK,eAAgB,EAAI,EAE/DthC,IACiBg7I,EAAA,iBAAiB,YAAa,KAAK,WAAW,EAGlD9vJ,EAAA8vJ,EAAqBpgK,GAAM,CAC1C,MAAMigK,EAAcjnJ,EAAgBhZ,EAAE,OAAQ6+J,EAAmB,EACjE,GAAG,CAACoB,EAAa,OAEjB,MAAMC,EAAU,KAAK,aAAa,IAAID,CAAW,EAC7CC,GAEC,cAASA,EAAQ,QAAQ,CAC7B,GAAC,eAAgB,KAAK,cAAe,GAExCC,EAAe,OAAOC,CAAkB,CAC1C,CA0BQ,gBACN,CAAC,KAAAtoJ,EAAM,UAAAwtE,CAAA,EACP/yC,EACA,CACGA,IACD,KAAK,mBAAqBA,EACrB,qBAAkB,IAAI,IAAI,KAAK,mBAAmB,IAAKkB,GAAsBA,EAAkB,iBAAiB,EAAE,CAAC,GAGpH,MAAA4rH,EAAiB/5E,EAAU,MAAM,EAAGw5E,EAAoB,EAAE,IAAKnsH,GAAa,CAChF,MAAMc,EAAoBd,EAAS,IAAM,gBAAkBJ,EAAmB,KAAMogH,GAAcA,EAAU,WAAahgH,EAAS,QAAQ,EAAI,OACvI,YAAK,eAAeA,EAAUc,CAAiB,EACvD,EAED,OAAO,KAAK,OAAO4rH,EAAgB/5E,EAAU,OAASw5E,EAAoB,CAC5E,CAEQ,cAAcQ,EAAqC,CACnD,MAAAD,EAAiBC,EAAiB,MAAM,EAAGR,EAAoB,EAAE,IAAK9oF,GACnE,KAAK,eAAe,CAAC,EAAG,sBAAuB,YAAaA,EAAgB,kBAAkB,CACtG,EAED,OAAO,KAAK,OAAOqpF,EAAgBC,EAAiB,OAASR,EAAoB,CACnF,CAEA,MAAc,iBAAiB/hK,EAA2B,CAClD,MAAA3H,EAAa,KAAK,iBAAiB,IAAI,EACvCirK,EAA2BpsK,GAAgB,wBAC3CqsK,EAA+B,MAAM,KAAK,SAAS,aAAa,oBAAoB,+BAA+BvjK,CAAO,EAC1Hkb,EAAS,EAAEooJ,aAAoC,UAAYC,EAA6B,OACxFrrJ,EAAgBupE,GAAe,CACnC8hF,EAA6B,OAC7BD,CAAA,EACC,MAAM,CAACE,EAAwBhuH,CAAkB,IAAM,CACrD,GAACn9C,KAIDmrK,EAAuB,OAAS,oBAInC,YAAK,UAAYA,EAAuB,UACxC,KAAK,QAAU,KAAK,SAAWA,EAAuB,OAAS,mBACxD,KAAK,gBAAgBA,EAAwBhuH,CAAkB,EACvE,EAEM,OAACt6B,EAAQhD,CAAa,CAC/B,CAEA,MAAc,gBAAiB,CACvB,MAAA7f,EAAa,KAAK,iBAAiB,IAAI,EACvCkqK,EAAmB,MAAM,KAAK,SAAS,aAAa,oBAAoB,sBACxE,CAAC,OAAArnJ,CAAU,EAAAqnJ,EACXrqJ,EAAgBqK,GACpBggJ,EAAiB,OACjB,MAAMA,GAAqB,CACtB,GAAClqK,IAIJ,YAAK,gBAAkB,IAAI,IACzBkqK,EACC,OAAQtpF,GAAoB,CAACA,EAAgB,OAAO,gBAAgB,EACpE,IAAKA,GAAoBA,EAAgB,iBAAiB,GAG7D,KAAK,QAAU,GAER,KAAK,cAAcspF,CAAgB,CAC5C,GAGK,OAACrnJ,EAAQhD,CAAa,CAC/B,CAEA,MAAa,KAAKlY,EAA2B,CAC3C,IAAIkb,EAAiBhD,EAClB,KAAK,UACN,CAACgD,EAAQhD,CAAa,EAAI,MAAM,KAAK,eAAe,EAEpD,CAACgD,EAAQhD,CAAa,EAAI,MAAM,KAAK,iBAAiBlY,CAAO,EAG5Dkb,GACK,MAAAhD,EAGMA,EAAA,KAAM3X,GAAa,CAC3BA,IAID2a,EACQ3a,IAETuT,GAAQvT,CAAQ,EAClB,CACD,EAED,KAAK,OAAS,EAChB,CAEO,SAAU,CACf,KAAK,iBAAiB,QAEtB,KAAK,aAAa,QACGopD,GAAA,qBAAqB,KAAK,eAAgB,EAAK,EACpEA,GAAqB,gBAAgB,GAAM,KAAK,eAAgB,EAAI,CACtE,CA6IA,MAAc,sBAAsB44G,EAA4E,CACxG,MAAC/6F,EAAU2C,CAAY,EAAI9pE,GAAUkiK,EAAmBtpF,GAAoB,CAACA,EAAgB,mBAAmB,EAChHz5E,EAASgoE,EAAS,IAAKyR,GAAoBA,EAAgB,iBAAiB,EAC5Ehb,EAAO,MAAM,QAAQ,IAAIz+D,EAAO,IAAKG,GAAU,KAAK,SAAS,eAAe,OAAOA,CAAK,CAAC,CAAC,EACzF,OACL,OAAQwqE,EAAa,IAAK8O,IACjB,CACL,MAAO,GACP,MAAOA,EAAgB,mBAE1B,EACD,gBAAiB,CACf,MAAO,iBACP,SAAUhb,CACZ,EAEJ,CAEQ,kBAAmB,CAClB,OAAA/qD,GAAS,YAAY,YAAY,GAAKA,GAAS,YAAY,eAAe,GAAK,CAACgY,EACzF,CAEA,MAAc,eAAe0qB,EAAoBc,EAAuC,CAChF,MAAAwsH,EAAc,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIpB,EAAmB,EAEvC,MAAA2B,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI3B,GAAsB,QAAQ,EAErD,MAAA4B,EAAgB,SAAS,cAAc,KAAK,EAC9C,IAAAC,EACUD,EAAA,UAAU,IAAI5B,GAAsB,SAAS,EAExD,KAAK,qBACU6B,EAAA,SAAS,cAAc,KAAK,EAC5CA,EAAc,UAAU,IAAI7B,GAAsB,UAAW,MAAM,GAGrE,MAAMqB,EAAoC,CACxC,cAAAQ,EACA,cAAAD,EACA,SAAA9tH,CAAA,EAEG,kBAAa,IAAIstH,EAAaC,CAAO,EAEpC,MAAA9qK,EAAa,KAAK,iBAAiB,IAAI,EAGvCR,EAAOmqK,IADM35I,IAAsB,CAAC+5I,GAAiB,EAAI,MAGzDxpK,EAA+B,GAC/BnC,EAAU,CACd,MAAOoB,EACP,OAAQA,EACR,UAAW,EACX,WAAY,GACZ,UAAW,GACX,MAAO,KAAK,eACZ,WAAAQ,EACA,aAAAO,CAAA,EAIF,GADK,eAAU,OAAOsqK,CAAW,EAC9B,CAAC,KAAK,iBAAiB,GAAK,CAACxsH,EAAmB,CACjD,OAAOjgD,EAAQ,WACf,OAAOA,EAAQ,UAEf,MAAMiC,EAAO,IAAM,CACLK,GAAA,CACV,IAAAJ,EACA,IAAK+qK,EACL,YAAa,GACb,KAAMhtH,IAAsB,OAAY,GAAO,OAC/C,GAAGjgD,CAAA,CACJ,GAGC,IAAAkC,EAAM+9C,GAAmB,YAAa7iC,EAAQ,GAClD,GAAG,CAAClb,EAAK,CACD,MAAAF,EAAS,MAAM,KAAK,SAAS,aAAa,gBAAgB,uBAAwBm9C,EAA0C,WAAW,EAC1In9C,EAAO,OACRE,EAAM,MAAMF,EAAO,QAEnB,OAAOhC,EAAQ,aACPod,EAAA,GACRpb,EAAO,OAAO,KAAMuvD,IAAUrvD,EAAMqvD,EAAMtvD,EAAO,IAErD,CAEImb,GACGnb,GACP,KACK,CACL,IAAIw6F,EAAU,GACFn6F,GAAA,CACV,IAAK29C,EAAkB,iBACvB,IAAKgtH,EACL,KAAM,GACN,YAAa,GACb,GAAGjtK,CAAA,CACJ,EAAE,KAAK,CAAC,CAAC,OAAA4jB,CAAM,IAAMA,CAAM,EAAE,KAAM7L,GAAW,CAG7C20J,EAAQ,OAAS30J,EAEVA,EAAA,iBAAiB,aAAe22E,GAAY,CAC9C32E,EAAO,WAAa22E,GACHy+E,EAAA,KAAMC,GAAiB,CAEzBH,EAAA,UAAU,IAAI,MAAM,EACpBC,EAAA,UAAU,OAAO,MAAM,EAElCzwE,IACDiwE,EAAQ,OAASU,EACP3wE,EAAA,KAEX/6E,EAAI,CACT,CACD,GACAA,EAAI,EAEP,MAAMyrJ,EAAoB7qK,GAAY,CACpC,IAAK29C,EAAkB,iBACvB,IAAKitH,EACL,YAAa,GACb,GAAGltK,CAAA,CACJ,EAAE,KAAK,CAAC,CAAC,OAAA4jB,CAAM,IAAMA,CAAM,EAAE,KAAM7L,GAG3BC,GAAa,kBAAkBD,CAAM,CAC7C,EAAE,MAAM2J,EAAI,CACf,CAEA,OAAAsrJ,EAAe,OAAOC,CAAa,EAClBC,GAAAF,EAAe,OAAOE,CAAa,EACpDT,EAAY,OAAOO,CAAc,EAG1B,QAAQ,IAAI7qK,CAAY,CACjC,CA+DF,CCtoBA,SAAwBkrK,GAAoB9jK,EAAmD,CACtF,OAAAA,GACL,CAACA,EAAQ,OAAO,aAChB,CAAEA,EAA4B,OAAO,YACrC,CAAGA,EAA4B,OAA4C,cAC/E,CCPA,SAAwB+jK,GAAa/5I,EAAgC,CAC5D,OACL,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,IAAKA,EAAK,IACV,MAAOA,EAAK,MACZ,OAAQA,EAAK,OACb,KAAMA,EAAK,KAEf,oLCUe,MAAMg6I,WAA4Bx9I,EAAa,CAK5D2hF,YACUzxG,EACAqkB,EACR,CACA,MAAM,yBAA0B,CAC9BwtF,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,EACR,CAAC,EAAE,KAPK7vF,SAAc,KACdqkB,OAQR,KAAK8tF,UAAS,CAChB,CAEQxK,YAAa,OAAAO,EAAA,KACbqlE,EAAQ19J,GAMR,CACJ,IAAIsgB,EACJ,mBAAAjO,EAAAC,KAAAS,SAAAV,EAE+CrS,MAAMvP,KAAK,EAAA4hB,CAAA,iBAAAM,EAAAC,KAAAG,SAAAJ,EACR3S,MAAMhJ,IAAI,EAAA2b,CAAA,iBAAAE,EAAAsM,KAAAtM,EAAAspD,QAI7C,IAAM,CACEn8D,EAAMwkB,oBACA5P,SACnB8L,GAAiBJ,EAAQ,EAAI,GAEhC,MAAAX,EAPIW,EAAM,cAAAX,GAAAC,cAAAD,EAAA9M,CAAA,EAANyN,EAAMzN,EAAAE,EAAAF,EASVne,MAAKsL,EAAMw7H,UAAU,CAAC,EAAAjpH,GAAAiN,OAAA3M,EARhB,+DAAiE7S,EAAMT,UAAY,sCAAwC,GAAG,GAAAsT,CAAA,OAgEvIrF,EAzCD,CACHmwJ,SAAU,CACRC,OAAQ,yBACRC,MAAO,uBACPC,WAAY,6BACZC,YAAa,yBACbv5I,QAAS,SAAW,CAClB,MAAM,KAAKj0B,SAASytK,kBAAkBC,WACpC,iCACA,CAAC,CAACn5J,EAAG,2BAA4B,EACnC,EACA,KAAK09B,KAAI,EACT7f,GAAS,CAAC1f,YAAa,oBAAoB,CAAC,CAC7C,EACDi7J,OAAQ,yBACRC,MAAO,uBACPC,YAAa,wBACd,EACDC,SAAU,CACRT,OAAQ,qBACRC,MAAO,mBACPC,WAAY,yBACZC,YAAa,qBACbv5I,QAAS,SAAW,CAClB,MAAM85I,EAAgB,MAAM,KAAK/tK,SAASytK,kBAAkBO,yBAAwB,EACpF,MAAM,KAAKhuK,SAASytK,kBAAkBQ,yBAAyB,CAC7D15J,EAAG,wBACHkY,OAAQ,CACN,GAAGshJ,EAActhJ,OACjByhJ,gBAAiBrnJ,MACnB,CACF,CAAC,EACD,KAAKorB,KAAI,EACT7f,GAAS,CAAC1f,YAAa,gBAAgB,CAAC,CACzC,EACDi7J,OAAQ,qBACRC,MAAO,mBACPC,YAAa,oBACf,GAGkB,KAAK5pJ,IAAI,EAE7B,mBAAAwsE,EAAAthE,KAAA3M,SAAAiuE,EAGOqX,MAAKjmD,gBAAgB,EAAA4uC,IAAA9tE,IAEvBwqJ,EAAI,KACHjtK,OAAK,QAAEiE,EAAK8Y,EAAQowJ,MAAM,CAAC,MAC3B5mK,MAAI,QAAEtC,EAAK2jG,EAAK2d,yBAA2BxoG,EAAQswJ,WAAatwJ,EAAQqwJ,MAAO,CAACxlE,EAAK7mD,OAAO,CAAC,CAAC,CAAC,CAAC,MAChGgqF,YAAU,QAAEhuH,EAAQuwJ,WAAW,MAC/Bv5I,SAAO,QAAEhX,EAAQgX,OAAO,IAAAvR,GAAA,WAAAD,EAAAC,OAExBolF,EAAK2d,wBAAwB,YAA9BhjG,EAAA,IAAAE,EAEIumG,GAAiB,CAAC33G,QAAO,YAAAoR,IACzBwqJ,EAAI,KACHjtK,OAAK,QAAEiE,EAAK8Y,EAAQ0wJ,MAAM,CAAC,MAC3BlnK,MAAI,QAAEtC,EAAK8Y,EAAQ2wJ,MAAO,CAAC9lE,EAAK7mD,OAAO,CAAC,CAAC,CAAC,CAAC,MAC3CgqF,YAAU,QAAEhuH,EAAQ4wJ,WAAW,EAC/B55I,QAASA,IAAM,CACb6zE,EAAK71D,KAAI,EACTmE,GAAakmB,KAAI,CAClB,EACDttD,UAAS,EAGd,SAGP,CAEA,MAAc+iG,WAAY,CACxB,KAAM,CAAC9wD,EAAQwkE,EAA0B5jE,CAAgB,EAAI,MAAMx9B,QAAQya,IAAI,CAC7Eza,QAAQya,IAAI,IAAI9Q,MAAM,CAAC,EAAEskB,KAAK,CAAC,EAAElqB,IAAI,IAAM7V,GAAc,CAAC3S,OAAQ,KAAKA,OAAQG,cAAe,EAAK,EAAC,CAAC,EACrGK,GAAgBqlH,yBAAwB,EACxC/zE,GAAiB,CACfzrB,MAAO,GACPC,OAAQ,GACRyrB,UAAW,KAAK1tB,OAAS,WAAa,iBAAmB,iBACzD1iB,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCuuB,KAAM,GACNC,SAAUz1B,GAAS2O,YAAY,eAAe,CAChD,CAAC,EAAElF,KAAK,MAAM,CAACnkB,YAAW6J,SAAO,KAC/B,MAAMA,EACC7J,EACR,CAAC,CACH,EACD,KAAKu/C,OAASA,EACd,KAAKwkE,yBAA2BA,EAChC,KAAK5jE,iBAAmBA,EAExB,KAAKuhE,YAAY,IAAM,KAAK7b,WAAY,GACxC,KAAKjrC,KAAI,CACX,CACF,CAACsR,GAAA,kMCtJc,MAAMugG,WAAuBz+I,EAAa,CACvD2hF,YAAoB1xG,EAKjB,CACD,MAAM,kBAAmB,CACvBqxB,QAAS,CAAC,CACRzf,QAAS,KACT4iG,SAAU,EACZ,EAAG,CACD5iG,QAAS,kCACT9H,SAAUA,KACR8kJ,GAAa,EAAK,EAAE1oI,KAAMwpI,GAAa,CACrCjgJ,GAAmB,KAAKzP,QAAQC,MAAM,EAAEovJ,YAAYK,CAAQ,CAC9D,CAAC,EACM,GAEX,CAAC,EACDzqG,WAAY,GACZ6qC,KAAM,GACNiiB,gBAAiB,EACnB,CAAC,EAAE,KAtBe/xG,UAwBlB,KAAKq2E,OAAOxqD,SAEZ,MAAMld,EAAUiV,GAAO,IAAM,KAAKxgB,EAAC,EAAI,KAAK6hD,WAAWljD,SAAS,EAChE,KAAKgiB,iBAAiB,oBAAqBpV,CAAO,CACpD,CAEQvL,GAAI,OAAAkvG,EAAA,KAAAqI,EAAA,KACV1pB,GAAQ,IAAM,CACZrlE,WAAW,IAAM,CACf,KAAK+wC,KAAI,CACV,EAAE,CAAC,CACN,CAAC,EAED,IAAI8xG,EAA6C,KAAKzuK,QAAQwL,iBAC3D,KAAKxL,QAAQuJ,UACdklK,EAA2B,CACzB75J,EAAG,mBACH9N,KAAM,KAAK9G,QAAQuJ,QAAQA,QAC3BxC,SAAU,KAAK/G,QAAQuJ,QAAQ8B,gBAInC,MAAM2nF,EAAuC,CAC3CpxF,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvC5hB,UAAW,sBAGP4sK,EAAkB5+J,GAAsD,CAC5E,IAAI2a,EACJ,MAAMlb,GAAG,WAAA4S,EAAAC,KAAAqN,EAEAhF,EAAG,cAAAgF,GAAAC,cAAAD,EAAAtN,CAAA,EAAHsI,EAAGtI,EAAAU,EAAAV,EAIPrS,MAAMif,QAAQ,EAAA1M,OAAAiN,GAAAnN,EAHR3H,GAAW,uBAAwB,qBAAsB1K,EAAM6+J,SAAW,YAAY,CAAC,GAAAxsJ,MAO5FmS,EAAW9nB,GAAkB,CACjC,MAAM1C,EAAW2gB,GAAOq8C,GAAoBr8C,EAAKje,CAAC,EAC9C1C,IAIJ2gB,EAAI+1I,oBAAoB,QAASlsI,EAAS,CAACs6I,QAAS,EAAI,CAAC,EACzD,KAAKh8D,iBAAiB9oG,CAAQ,IAGhC2gB,SAAI1G,iBAAiB,QAASuQ,EAAS,CAACs6I,QAAS,EAAI,CAAC,EAC/Cr/J,GAGHtN,EAAOA,CAACuJ,EAAoC4vB,IAAmB,OAAA+sE,EAAA,KAC7D,CAAC0mE,EAAUC,CAAW,EAAI//J,GAAwBvD,EAAiB1E,KAAKrH,OAAS27B,CAAK,EACtF,CAACt0B,EAAMq5B,CAAO,EAAIpxB,GAAY,EAEpC5B,UAAa,IAAM,CAEjB,MAAMrG,EAAOqC,GAAaqC,EAAiB1E,KAAM,CAC/C,GAAGksF,EACHjsF,SAAUyE,EAAiBzE,SAC3BgoK,aAAcF,EAAS,CAEzB,CAAC,EAED1uI,EAAQ1lB,GAAwB3T,CAAI,CAAC,CACvC,CAAC,EAEDkc,EACG0rJ,EAAc,KAACC,SAAO,QAAEE,EAAQ,CAAE,MAAA9/I,UAAA,QAAA/L,EAChC4L,GAAI,KAACC,MAAI,QAAEggJ,EAAQ,CAAE,MAAE//I,UAAQ,QAAEhoB,EAAI,CAAE,MAAAioB,UAAA,oBAAAtM,EAAAC,KAAAG,SAAAJ,EAEnC3b,CAAI,EAAA2b,CAAA,iBAAAE,EAAAsM,KAAAtM,SAAAspD,QAII,IAAM,CACb6iG,EAAY,EAAK,EACjBljJ,WAAW,IAAM,CACfu8E,EAAKljD,WAAWujH,UACjB,EAAE,CAAC,GACL3lJ,EAAAF,EAAA,IAEAne,EAAK,MAAM,CAAC,EAAAme,CAAA,aAOjBvT,EAAeK,GAAmB,KAAKzP,QAAQC,MAAM,EACrD8gB,EAAY2lD,GAAax/C,OAAW,EAAI,EAExC,CAACtW,EAASi8I,CAAU,EAAI99I,GAAa,EAAI,EACzC5M,EAAgC,GAChC6sK,EAAYhsJ,EACfnT,GAAsB,KACrB5P,QAAM,QAAEqyG,EAAKtyG,QAAQC,MAAM,MAC3BsJ,SAAO,QAAE+oG,EAAKtyG,QAAQuJ,OAAO,MAC7BiC,kBAAgB,QAAE8mG,EAAKtyG,QAAQwL,gBAAgB,MAC/CwnF,iBAAe,OAAE,CAAC,GAAGA,EAAiB7wF,eAAa,EACnDqN,QAAO,GAEV,EAEDkV,eAAQya,IAAIh9B,CAAY,EAAE+jB,KAAK,IAAM,CACnC2mI,EAAW,EAAK,EAChBjhI,WAAW,IAAM,CACf,KAAKq5B,WAAWujH,UACjB,EAAE,CAAC,CACN,CAAC,EAEDxlJ,GAEKkgC,GAAO,CAACa,SAAQ,OAAC1pB,MAAI,OAAG,YAAWsgF,EAAK36G,QAAQivK,gBAAiB,EAAC,MAAAlgJ,UAAA,QAChE9sB,EAAKwsK,EAA0B,GAAG,CAAC,EAAAzrJ,IAErCkgC,GAAO,CAACa,SAAQ,OAAC1pB,MAAI,OAAG,YAAWjrB,EAAasgJ,SAAQ,CAAG,EAAC,EAAEpsG,sBAAqB,OAAAv0B,UAAA,QAAA/L,EACjF4L,GAAI,KAACC,MAAI,OAAE,CAACje,EAAO,CAAE,MAAEke,UAAQ,mBAAAgiE,EAAAthE,KAAA3M,SAAAiuE,EAE3B/vE,CAAS,EAAA+vE,CAAA,UAAA/hE,UAAA,QAAA/L,EAGX0rJ,EAAc,CAAA3/I,SAAEigJ,CAAY,SAKvC,CACF,CAAC/gG,GAAA,WCpKD,SAAwBihG,GAAiB3pJ,EAAqB,CAEtD,MAAAmjB,EADY,SAAS,eACH,WAAW,CAAC,EAC9B,CAAC,eAAAymI,EAAgB,YAAAC,EAAa,aAAAC,EAAc,UAAAC,GAAa5mI,EACzDpvB,EAAa61J,EAAe,UAC5B51J,EAAW81J,EAAa,UAGxBE,EAAS,IACTxtK,EAAYyjB,EAAgBD,EAAQ,oBAAoB,EAExD/f,EAD0B,CAAC,QAAQ,EACjB,IAAKo7C,GAAa,CAClC,MAAAnsC,EAAU1S,EAAU,cAAc6+C,CAAQ,EAChD,GAAGnsC,EAAS,CACJ,MAAA+6J,EAAW,SAAS,eAAe,EAAE,EAC3C,OAAA/6J,EAAQ,YAAY+6J,CAAQ,EACrB,CAACA,EAAU/6J,CAAO,CAC3B,EACD,EAAE,OAAO,OAAO,EAEjB,IAAIg7J,EAAyBC,EAC1Bp2J,IAAe,MAChB61J,EAAe,WAAW,aACxBM,EAAoB,SAAS,eAAeF,CAAM,EAClDH,IAAgB,EAAID,EAAiBA,EAAe,aAIrD51J,IAAa,MACd81J,EAAa,WAAW,aACtBK,EAAkB,SAAS,eAAeH,CAAM,EAChDD,IAAc,EAAID,EAAeA,EAAa,aAI/CF,IAAmBE,GAAgB,CAACI,EACrCN,EAAe,UAAY71J,EAAW,MAAM,EAAG81J,CAAW,EAAIG,EAASj2J,EAAW,MAAM81J,EAAaE,CAAS,EAAIC,EAASj2J,EAAW,MAAMg2J,CAAS,GAEjJI,IAA8BL,EAAA,UAAY91J,EAAS,MAAM,EAAG+1J,CAAS,EAAIC,EAASh2J,EAAS,MAAM+1J,CAAS,GAC1GG,IAAkCN,EAAA,UAAY71J,EAAW,MAAM,EAAG81J,CAAW,EAAIG,EAASj2J,EAAW,MAAM81J,CAAW,IAE5H,KAAM,CAAC,MAAOO,CAAW,EAAIC,GAAsB7tK,CAAS,EACtD8tK,EAAaF,EAAY,QAAQJ,CAAM,EACvCO,EAAWH,EAAY,QAAQJ,EAAQM,EAAa,CAAC,EAAI,EAC5DJ,EAAmBA,EAAkB,OAAO,EAC1CN,EAAe,UAAY71J,EAC7Bo2J,EAAiBA,EAAgB,OAAO,EACtCL,EAAa,UAAY91J,EAGxB,MAAAw2J,MAAyB,IAAwB,CACrD,oBACA,sBACA,yBACA,sBACA,uBACA,2BACA,qBACD,EACK,CAAC,MAAOC,EAAY,SAAAjpK,CAAY,EAAA6oK,GAAsB7tK,EAAW,EAAI,EACrEmV,EAAQ84J,EAAW,MAAMH,EAAYC,CAAQ,EACnD,QAAQnsK,EAAI,EAAGA,EAAIoD,EAAS,OAAQ,EAAEpD,EAAG,CACjC,MAAAqD,EAASD,EAASpD,CAAC,EACnByrK,EAAcpoK,EAAO,OAExBsoK,GADeF,EAAcpoK,EAAO,OACxB6oK,GAAcT,GAAeU,GAAY,CAACC,EAAmB,IAAI/oK,EAAO,CAAC,EAAG,CAChFD,EAAA,OAAOpD,IAAK,CAAC,EACtB,QACF,CAEAqD,EAAO,OAAS,KAAK,IAAIooK,EAAcS,EAAY,CAAC,EACpD,MAAMlc,EAAW,KAAK,IAAIkc,EAAaT,EAAa,CAAC,EAC/CvnH,EAAYioH,EAAWD,EAAa7oK,EAAO,OACjDA,EAAO,OAAS,KAAK,IAAIA,EAAO,OAAS2sJ,EAAU9rG,CAAS,CAC9D,CAEE,OAAAriD,EAAA,QAAQ,CAAC,CAACgqK,EAAU/6J,CAAO,IAAM+6J,EAAS,YAAY/6J,CAAO,CAAC,EAChDu6H,KAEgC,CAC9C,KAAM93H,EACN,SAAUnQ,EAAS,OAASA,EAAW,OACvC,OAAQ8oK,CAAA,CAIZ,CC/FA,eAA8BI,GAA6BnpK,EAAgD,CACnG,MAACmG,CAAQ,EAAIC,KACnB,GAAG,CAACpG,GAAQ,CAACmG,EAAS,aAAa,WAAY,OACzC,MAAAyiJ,EAAW,MAAMnjJ,GAAezF,CAAI,EAC1C,GAAG,CAACmG,EAAS,aAAa,eAAe,SAASyiJ,CAAQ,EACjD,OAAAA,CAEX,CCLa,MAAAwgB,GAGPpgK,GAAU,CACR,MAAAqgK,EAAiB,CAAC17J,EAAkB3K,IAAyB,CACjE,MAAMsmK,EAAatgK,EAAM,YAAY,IAAI2E,CAAO,EAChDtH,GAAcgD,GAAS,CACrB,MAAM9M,EAAI+sK,IACV,GAAGjgK,GAAQ9M,EACT,OAAIA,GACOyG,IAGJ,EACT,CACD,GAGGumK,MAA0C,IAC1CC,EAAc,CAAC77J,EAAkB3K,IAAyB,CAC9DkD,GAAY2B,GAAY,CACZ0hK,EAAA,IAAI57J,EAAS9F,CAAO,EAE9BwhK,EAAe17J,EAAS,IAAM,CACpB9F,IACC7E,GAAA,CACV,EAED8E,GAAU,IAAM,CACXyhK,EAAU,IAAI57J,CAAO,IAAM9F,GAC5B0hK,EAAU,OAAO57J,CAAO,CAC1B,CACD,EACF,GAGH,OAAA7F,GAAU,IAAM,CACdyhK,EAAU,QAAS1hK,GAAYA,EAAS,GACzC,EAEsB25D,GAAqBsB,GAAgB,IAAM95D,EAAM,QAAQ,EAAE,QAAS,CACzF,WAAY,gBACZ,SAAU,CAAC,CAAC,MAAAk3D,EAAO,QAAAqC,EAAS,cAAAP,KAAmB,CAC7C,UAAUr0D,KAAWuyD,EACHqpG,EAAU,IAAI57J,CAAO,MAIvC,GAAG3E,EAAM,SAAS,GAAK,CAAC2M,GAAS,YAAY,YAAY,EAAG,CAC1DqsD,EAAcO,CAAO,EACrB,MACF,CAEA,MAAMrrC,EAAsB,GAC5B,UAAUvpB,KAAW40D,EAAS,CAC5B,GAAG,CAACv5D,EAAM,YAAY,IAAI2E,CAAO,EAAG,CAClCupB,EAAS,KAAKvpB,CAAO,EACrB,QACF,CAEA67J,EAAY77J,EAAS,IAAM,CACXq0D,EAAA,CAACr0D,CAAO,CAAC,EACxB,CACH,CAEGupB,EAAS,QACV8qC,EAAc9qC,CAAQ,CAE1B,EACD,CAGH,uVC1De,MAAMuyI,WAAsBxgJ,EAAa,CAOtD2hF,YACUzxG,EACAi0H,EACAs8C,EACR,CACA,MAAM,kBAAmB,CACvB1+D,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACN2gF,YAAaA,KACX,KAAKC,YAAa71J,GAAaA,EAASouE,MAAM,EAAG,EAAE,CAAC,EAC7C,IAET1oF,MAAO,GACP0kD,WAAY,EACd,CAAC,EAsJK0rH,iBAAU9zH,GACT,KAAKx8C,SAAS4vG,gBAAgB2gE,uBAAuB,KAAK3wK,OAAOumG,SAAQ,EAAI,KAAK0tB,iBAAiB1R,UAAW3lE,CAAM,GAvJxH,KAdK58C,SAAc,KACdi0H,mBAAkC,KAClCs8C,WAcR,KAAKp+D,UAAS,CAChB,CAEQy+D,cAAc7uK,EAA+F8uK,EAAmB,CACtI,KAAM,CAACj0H,EAAQi/D,CAAS,EAAI/sG,GAA2CmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EAC3F,CAAC79E,CAAI,EAAIurD,GAAe,IAAM1yB,EAAM,GAAIA,OAAQ,KAAK8zH,MAAM,EAEjExjK,GAAa,IAAM,CACjB,MAAM4jK,EAAQ/sJ,IACd,GAAG,CAAC+sJ,EACF,OAGF,MAAMC,EAAcD,EAAMn8J,IAAM,gDAC1Bq8J,EAAYF,EAAMn8J,IAAM,iDAC9B,GAAGo8J,GAAeC,EAAW,CAC3B,KAAK3+H,KAAI,EACT,KAAKk+H,WAAQ,EACb/9I,GAAS,CAAC1f,YAAai+J,EAAc,eAAiB,UAAU,CAAC,EACjE,MACF,CAEA,KAAKN,YAAa71J,GAAa,CAC7B,GAAGA,EACH,KAAKg2J,cAAcE,EAAgGrjK,GAAQmvC,CAAM,EAAE/1C,IAAI,CAAC,CACzI,EACDg1G,GACF,CAAC,EAED,KAAM,CAACs0D,EAAYc,CAAa,EAAIniK,GAAa,EAAK,EAEtD,IAAIwN,EACJ,MAAM40J,EAAgB3kK,GAAuB,CAC3C,GAAGA,EAAE+Y,SAAWxjB,EACd,OAGF,MAAMqvK,EAAU5kK,EAAE8X,OAAS,kBAC3B4sJ,EAAcE,CAAO,EACrBhgF,aAAa70E,CAAO,EACjB60J,IACD70J,EAAU80E,OAAOzlE,WAAW,IAAM,CAChCslJ,EAAc,EAAK,CACpB,EAAE,GAAG,IAIJt9E,EAAY,GAAK5xF,EAAOhC,QAAQP,OACtC,IAAIsC,EACJ,MAAMsvK,EAAejlK,EAAW,IAAM,KAAKklK,cAAa,GAAI19E,SAAS,EACrE5wE,SACGkgC,GAAO,CAAAG,IAAAgpB,EAAA,OAAA58C,EACD1tB,EAAS,OAAA0tB,gBAAA48C,CAAA,EAATtqE,EAASsqE,CAAA,MACdhyC,MAAI,QAAEz5B,GAAcoB,EAAOzB,KAAK,CAAC,EACjCkjC,QAAO,yDAEPsgB,SAAQ,GACRR,YAAW,GACXlnC,kBAAmB80J,EACnB/0J,gBAAiB+0J,EAAY,IAAApiJ,UAAA,OAAA5M,EAAAC,KAAAS,SAAAV,EAAAa,EAG1B2pD,GAAG,KAACC,MAAI,QAAE5qE,EAAOhC,OAAO,EAAA+uB,SACrB8tB,GACA75B,EACG8W,GAAM,KACLv5B,OAAK,QAAEK,GAAci8C,EAAO/1C,IAAI,CAAC,EACjCy3B,UAAWA,IAAMu9E,EAAUj/D,CAAM,EAAC,IAClC7B,cAAY,QAAE95C,GAAK,OAAQ,mCAAmC,CAAC,GAGpE,IAAAmhB,GAVoD,KAACgvJ,KAAkBz9E,GAAa,MAAI,KAAAzxE,EAAAkE,MAAAkC,YAAA,UAAnC8oJ,EAAY,GAAMz9E,GAAa,IAAI,EAAAzxE,EAAAkE,MAAAkrJ,eAAA,WAAApvJ,CAAA,IAgBjG,KAAKqvJ,YAAYxgK,IAAIjP,EAAWquK,CAAU,EAC1CxhK,GAAU,IAAM,KAAK4iK,YAAYhnJ,OAAOzoB,CAAS,CAAC,EAE3C,CAACA,YAAWquK,aAAYx8E,YAAWk9E,WAC5C,CAEQlpE,YAAa,OAAAO,EAAA,KACb,CAACttF,EAAU61J,CAAW,EAAI3hK,GAA2D,CAAE,GACvF,CAACuiK,EAAeG,CAAgB,EAAI1iK,GAAY,EACtD,KAAK8L,SAAWA,EAChB,KAAK61J,YAAcA,EACnB,KAAKY,cAAgBA,EAErBZ,EAAY,CACV,KAAKG,cAAc,KAAKa,YAAqG,CAAC,CAC/H,EAEDvkK,GAAa,IAAM,CACjB,MAAMwkK,EAAY92J,IAClB,KAAK+2J,qBAAqBzrJ,UAAUyT,OAAO,aAAc+3I,EAAUlyK,OAAS,CAAC,EAC7E2wK,EAAWuB,EAAUlyK,OAAS,CAAC,EAC/BoyK,EAAiBF,EAAUlyK,SAAW,EAAI,EAAI,CAAC,EAC3CiO,GAAQ4jK,CAAa,GACvBG,EAAiBE,EAAUA,EAAUlyK,OAAS,CAAC,CAAC,CAEpD,CAAC,EAED,IAAIsC,EACJ,MAAMwN,GAAG,WAAAkT,EAAAC,KAAAypD,EACGpqE,EAAS,cAAAoqE,GAAAz8C,cAAAy8C,EAAA1pD,CAAA,EAAT1gB,EAAS0gB,EAAAI,EAAAJ,EAAAO,EAChBktJ,GAAe,KAACsB,aAAW,QAAErpE,EAAKqpE,WAAW,MAAAziJ,UAAA,QAC3ClU,EAAQ,EAAG4N,IAAI,CAAC,CAAC1mB,WAAU,IAAKA,CAAS,CAAC,KAAA0gB,MAK3C2tJ,EAAaluI,GAAiB,CAClC/5B,QAASpG,EACTuiB,KAAM,OACNwtJ,eAAgB,IAChB59B,aAAc,GACd69B,uBAAwBA,IAAM,CAC5BN,EAAiB52J,EAAQ,EAAGA,EAAU,EAACpb,OAAS,CAAC,CAAC,CACpD,CACF,CAAC,EAEKqxK,EAAW1kK,EAAoB+D,GAASmhK,EAAa,GAAIR,UAAY3gK,CAAI,EAE/E,IAAI6hK,EACJ,KAAKzxK,MAAMu1C,QAAM,WAAAnzB,EAAAsM,GAAA,EAAA6hE,EAAAnuE,EAAAC,WAAA2M,EAAAuhE,EAAAxT,YAAA15B,EAAAr0B,EAAA3M,WAAAqpF,EAAAroD,EAAAhhC,WAAAkqF,EAAAb,EAAA3uB,YAAAhR,EACL0lG,EAAQ,cAAA1lG,GAAA58C,cAAA48C,EAAA3pD,CAAA,EAARqvJ,EAAQrvJ,EAAAE,EAAAiuE,EAAA,IACctsF,EAAK,UAAU,CAAC,EAAAqe,EAAAopF,EAAA,IAGCznG,EAAK,UAAU,CAAC,EAAAqe,EAAAiqF,EACblsG,OAAckwK,EAAQ,CAAE,CAAC,EAAAnuJ,CAAA,IAI/D,EAEhB,MAAMkvJ,EAAmB3vI,GAAiB,CACxC/5B,QAAS6pK,EACT1tJ,KAAM,aACNwtJ,eAAgB,IAChBG,QAAS,EACX,CAAC,EAED,OAAO1iK,CACT,CAMA,MAAc6iG,WAAY,CACxB,KAAKo/D,YAAc,IAAIU,QACvB,KAAKR,aAAe,MAAM,KAAKf,OAAO,IAAIwB,UAAU,EACpD,KAAK1uD,YAAY,IAAM,KAAK7b,WAAY,GACxC,KAAKjrC,KAAI,CACX,CACF,CCnHA,MAAqB8oG,EAAgB,CA4CnC,YACUp+H,EACAhnC,EACR,CAFQ,UAAAgnC,EACA,cAAAhnC,EAoDH,mBAAiBmM,GAAuC,CAC7D,IAAI44C,EAAqBs/E,EAA6B/gH,EAElD,IACe+gH,EAAAl/G,EAAgBhZ,EAAE,OAAQ,wBAAwB,EACnE44C,EAASs/E,EAAiBA,EAAe,cAAgBl/G,EAAgBhZ,EAAE,OAAQ,QAAQ,EAC3FmX,EAAS6B,EAAgBhZ,EAAE,OAAQ,sBAAsB,GAAoB,YACpE,CAAC,CAGZ,IAAI,CAAC44C,GAAUA,EAAO,UAAU,SAAS,cAAc,IAAM,CAACzhC,EAAQ,OAEtE,IAAIlP,EAAU,KAAK,QAEnB,IADGjI,aAAa,YAAcA,EAAE,eAAe,gBAAgB,IAAIA,EAAU,eAAe,EACzFiI,GAAWA,EAAQ,UAAU,SAAS,QAAQ,EACxC,UAENjI,aAAa,YAAcA,EAAE,eAAe,cAAc,KAAIA,EAAU,aAAe,IAE1F,IAAIoB,EAAM+V,EAAS,EAAI,CAACyhC,EAAO,QAAQ,IACpC,IAACx3C,GAAOA,IAAQ,EACjB,OAGF,GAAG+V,GAAU,CAACA,EAAO,QAAQ,OAAQ,CAC1B8O,GAAA,CAAC,YAAa,aAAa,EACpC,MACF,CAEA,MAAM2/I,EAAqB5sJ,EAAgBhZ,EAAE,OAAQ,cAAc,GAEzD,SAAW,CACb,MAAAkxH,EAAc,KAAK,YAAc9vH,EAAM,EAc7C,GAbA,KAAK,aAAe,KAAK,KAAK,UAAU,gBAAgBw3C,CAAM,EAC9D,KAAK,cAAgBA,EAASA,EAAO,QAAQ,OAAO,WAAa,OACjE,KAAK,OAAS,KAAK,eAAiB,KAAK,KAAK,OAC9C,KAAK,OAAS54C,EAAE,OACX,oBAAiB,CAACi9J,KACvB,KAAK,eAAiB,KAAK,OAAO,UAAY,MAC3C,KAAK,OAA6B,SAAW,UAC9C,KAAK,OAAO,UAAU,SAAS,YAAY,GAExC,sBAAmB,KAAK,OAAO,UAAY,KAAO,KAAK,OAAO,UAAU,SAAS,SAAS,EAC1F,WAAQ,CAAC,CAAC2I,EACf,KAAK,gBAAkBA,EAEpB,KAAK,OAAS,CAAClyK,EAAU,QAAS,CACnCu2C,GAAa,KAAK,CAAC,QAAS,YAAa,GACzC,MACF,CAEA,GAAG,KAAK,eAAgB,CACtB,MAAM/N,EAAQ,SAAS,aAAa,EAAE,WAAW,CAAC,EAC7C,wCAAqCljB,EAAgBkjB,EAAM,eAAe,cAAe,oBAAoB,IAAMljB,EAAgBkjB,EAAM,aAAa,cAAe,oBAAoB,OAE9L,KAAK,mCAAqC,GAG5C,KAAK,iBAAmBg1F,EAAet4E,EAAe,QAAQ,iBAAmB,OAE3E,MAAAjzC,EAAOwR,EAAS,CAAK,QAAM,KAAK,KAAK,aAAa,KAAK,cAAe/V,CAAG,EAE/E,GAAG,KAAK,KAAK,UAAU,aAAe,CAAC82H,GAAkB92H,EAAK,CAC5D,GAAG8vH,EACD,OAGC,GAAAvrH,EAAK,OAAS,EAAG,CACZ,MAAAkgK,EAAc,KAAK,KAAK,UAAU,cAAc,KAAK,cAAezkK,CAAG,EAC3EA,EACAuE,EAAK,KAAMvE,GAAQ,KAAK,KAAK,UAAU,cAAc,KAAK,cAAeA,CAAG,CAAC,EAC5EykK,IACKzkK,EAAAykK,EAEV,CACF,CAEK,kBAAe,CAAC,CAAC3tC,EAEtB,KAAK,aAAe/gH,GAAUA,EAAO,QAAQ,OAAO,WAEpD,MAAM45G,EAAc/3G,EAAgB,KAAK,OAAQ,cAAc,EAC1D,0BAAuB,CAAC,CAAC+3G,EAC3BA,EACI,SAAM,CAACA,EAAY,QAAQ,IAEhC,KAAK,IAAM3vH,EAGb,KAAK,SAAW,KAAK,eAAiB,KAAK,gBAAkB,KAAK,OAC7D,gBAAa,KAAK,KAAK,UAAU,cAAc,KAAK,cAAe,KAAK,GAAG,EAC3E,aAAU+V,EAAS,OAAayhC,EAAe,SAAW,KAAK,KAAK,iBAAiB,KAAK,cAAe,KAAK,GAAG,EACtH,KAAK,gBAAmB,KAAK,SAA6B,WAAa,MAAM,KAAK,SAAS,mBAAmB,uBAAwB,KAAK,QAA4B,UAAU,EAAI,OAClL,CAACm4E,GAAe,KAAK,kBAAsB,aAAUpP,GAAsB,KAAK,eAAe,GAClG,KAAK,YAAc,KAAK,gBAAkBA,GAAsB,KAAK,eAAe,EAAI,KAAK,QAC7F,KAAK,iBAAmB,KAAK,KAAK,UAAU,aAAe,CAACxqG,EAAS,MAAM,KAAK,KAAK,UAAU,oBAAwB,SAClH,gBAAa,KAAK,SAAW,CAAC+5G,GAAe,EAAE,MAAM,QAAQ,KAAK,KAAK,kBAAoB,CAAC,KAAK,OAAO,GAAG,IAAKn0H,GAAY,KAAK,SAAS,mBAAmB,WAAWA,CAAO,CAAC,CAAC,GAAG,MAAM,OAAO,EACtM,KAAK,aAAe,OACpB,KAAK,mBAAqB,OACrB,mBAAgB,MAAM,KAAK,gBAAgB,EAC3C,0BAAuB,MAAM,KAAK,wBAAwB,EAC1D,qBAAkB,KAAK,kBAAoB,CAAC,KAAK,QAAU,OAAY,MAAM0mK,GAA8B,KAAK,QAA4B,OAAO,EAElJ,MAAA33I,EAAa,MAAM,KAAK,OAC9B,GAAG,CAACA,EACF,OAGF7jB,EAAU6jB,EAAW,QACrB,KAAM,CAAC,QAAAE,EAAS,QAAAlO,EAAS,YAAAgoJ,EAAa,cAAAC,EAAe,sBAAAC,CAAyB,EAAAl6I,EACxEm6I,EAAqBF,GAAiB9M,GAAgB,oBAAoB,CAAC,QAAAhxJ,EAAS,cAAA89J,EAAe,sBAAAC,EAAsB,EAEzH18I,EAAyB,CAACsvB,GAAUA,EAAO,UAAU,SAAS,OAAO,EAAI,OAAS,QAG1EvvB,GAAArpB,EAAiB,QAAWA,EAAiB,QAAQ,CAAC,EAAIA,EAAiBiI,EAASqhB,EAAMw8I,CAAW,EAU7Fz+I,GAAA,YAAYpf,EAAS,IAAM,CAC/Cg+J,GAAoB,QAAQ,EAE5B,KAAK,IAAM,EACX,KAAK,OAAS,OACd,KAAK,OAAS,KACd,KAAK,aAAe,OACpB,KAAK,mBAAqB,OAClBj6I,IAER,WAAW,IAAM,CACPlO,KACP,GAAG,EACP,EAEDmoJ,GAAoB,YAAY,KAGhC,EAk8BJ,KAAQ,qBAAuB,SAAW,CACrC,KAAK,KAAK,UAAU,YACFl8H,GAAA,KAAK,KAAK,UAAU,mBAAmB,EAE1DxmB,GAAa,YAAY++G,GAAc,KAAK,OAAQ,MAAM,KAAK,KAAK,aAAa,KAAK,cAAe,KAAK,GAAG,CAAC,CAChH,EAGF,KAAQ,aAAe,SAAW,CAC1B,MAAC,IAAAlhI,EAAK,OAAA3N,CAAU,OAChB6V,EAA4B,CAAC,aAAclI,GACjD,GAAG,CAAC,MAAM,KAAK,KAAK,UAAW,CAC7BkI,EAAQ,cAAgB7V,EACnB,UAAK,MAAM,kBAAkB6V,CAAO,EACzC,MACF,CAEK,UAAK,MAAM,iBAAiBA,CAAO,GAGlC,wBAAsB48J,GAAqB,CAC3ClgK,QAAa,KAAK,QAA4B,MAA4C,SAC1FtJ,EAAQsJ,EAAS,GACpBA,EAAS,OAAS,MACnB,KAAK,SAAS,eAAe,QAAQtJ,EAAOwpK,CAAM,EAElD,KAAK,SAAS,mBAAmB,YAAYxpK,EAAOwpK,CAAM,CAC5D,EAGF,KAAQ,YAAc,IAAM,CACpB,MAAAnpK,EAAU,KAAK,qBAChB,UAAK,MAAM,mBAAmB,KAAK,qBAAuB,KAAK,IAAMA,EAAQ,GAAG,GAGvF,KAAQ,qBAAuB,SAAW,CAClC,MAAC,YAAaA,CAAW,OACzBk8H,EAAal8H,EAA4B,UACzCopK,EAAoB,IAAIjyK,GAAK,YAAY,CAAC,IAAK,OAAO,EACtDw7D,EAAoD,CACxD,KAAMy2G,EAAkB,SAGpBtqI,EAAa,IAAIhH,GAAW,CAChC,YAAa,uBACb,eAAgB,GAChB,WAAYokG,EAAavuH,GAAU,CACjCy7J,EAAkB,iBAAiB,CAAC,IAAKz7J,EAAQ,OAAS,SAAS,EAC/DglD,EAAc,UAIlBA,EAAc,QAAQ,UAAU,OAAO,UAAW,CAAC,CAAChlD,CAAK,EACzDglD,EAAc,QAAQ,UAAU,OAAO,SAAU,CAAChlD,CAAK,EACrD,SACJ,kBAAmB,CAAC,OAAQ,SAAU,MAAM,EAC7C,EAEEuuH,GACUp9F,EAAA,iBAAiBuqI,GAAcntC,EAAU,KAAK,KAAM,CAAC,SAAUA,EAAU,KAAK,QAAQ,CAAC,CAAC,EAGjG,IACF,MAAMl5F,GAAkB,CACtB,aAAc,kBACd,WAAAlE,EACA,OAAQ6zB,EACR,8BAA+B,GAChC,OACU,CACX,MACF,CAEM,MAAC,MAAOp1D,EAAM,SAAAC,GAAY6oK,GAAsBvnI,EAAW,MAAO,GAAM,EAAK,EAC7EwqI,EAAwC/rK,EAAO,CAAC,EAAG,mBAAoB,KAAAA,EAAM,SAAAC,GAAY,OAC5F0+H,GAAatrF,GAAUsrF,EAAU,KAAMotC,CAAmB,GAI7D,KAAK,SAAS,mBAAmB,gBAC/BtpK,EAAQ,OACRA,EAAQ,IACRspK,CACF,EAAE,KAAK,IAAM,CACFpgJ,GAAA,CACP,YAAa3rB,EAAO,kBAAoB,mBACzC,EACF,GAGH,KAAQ,YAAc,SAAW,CAC/B,GAAG2iK,KAAoB,CACrB,KAAM,CAAC,KAAA3iK,EAAM,KAAAqD,GAAQ,KAAK,qBAC1Bw+B,GAAoB7hC,EAAMqD,CAAI,OAE9B,SAAS,YAAY,MAAM,CAE7B,EAGF,KAAQ,sBAAwB,IAAM,CAChC,IAAAk1F,EAAQ,KAAK,OAA6B,KACvCA,IAAK,QAAQ,WAAY,EAAE,EAClC12D,GAAoB02D,CAAI,GAG1B,KAAQ,gBAAkB,IAAM,CAC9B,KAAM,CAAC,IAAA31F,EAAK,UAAAopK,GAAa,KAAK,cACxB78J,EAAmB68J,EAAY,wBAA0B,aAC/DvgJ,GAAM7xB,GAAK,OAAOuV,EAAK,EAAI,CAAC,EAC5B0yB,GAAoBj/B,CAAG,GAGzB,KAAQ,WAAa,IAAM,CACzBqmB,GAAa,YAAYijH,GAAiB,KAAK,cAAe,KAAK,GAAG,GAGxE,KAAQ,aAAe,IAAM,CAC3BjjH,GAAa,YAAYijH,GAAiB,KAAK,cAAe,KAAK,IAAK,EAAI,GAG9E,KAAQ,cAAgB,IAAM,CAC5B,KAAK,SAAS,gBAAgB,SAAS,KAAK,QAA4B,EAAE,GAG5E,KAAQ,WAAa,IAAM,CACzB,KAAK,SAAS,gBAAgB,SAAS,KAAK,OAA0B,GAGxE,KAAQ,eAAiB,SAAW,CAC/B,QAAK,KAAK,UAAU,YACFz8F,GAAA,KAAK,KAAK,UAAU,mBAAmB,MACrD,CACL,MAAMt2C,EAAS,KAAK,cACdkS,EAAO,KAAK,qBAAuB,CAAC,KAAK,GAAG,EAAI,MAAM,KAAK,KAAK,aAAalS,EAAQ,KAAK,GAAG,EACnGm/E,GAAa,OAAO,CAClB,CAACn/E,CAAM,EAAGkS,CAAA,CACX,CACH,GAGF,KAAQ,cAAgB,IAAM,CAC5B,KAAK,KAAK,UAAU,gBAAgBqT,EAAgB,KAAK,OAAQ,cAAc,GAAKA,EAAgB,KAAK,OAAQ,QAAQ,CAAC,GAG5H,KAAQ,sBAAwB,IAAM,CAC/B,UAAK,UAAU,iBAAgB,EAGtC,KAAQ,cAAgB,SAAW,CAC9B,QAAK,KAAK,UAAU,YAAa,CACf+wB,GAAA,KAAK,KAAK,UAAU,kBAAkB,EACzD,MACF,CAEM,MAAC,QAAAhtC,CAAW,OACZ,CAAC,OAAAtJ,EAAQ,IAAA2N,CAAO,EAAArE,EAKTwmB,GAAA,YACXohH,GACAlxI,EACA,KAAK,qBAAuB,CAAC2N,CAAG,EAAI,MAAM,KAAK,KAAK,aAAa3N,EAAQ2N,CAAG,EAC5E,KAAK,KAAK,KACZ,EAOF,KAAQ,aAAe,SAAW,CAC1B,MAAAmlK,EAAkB,KAAK,qBACvB,CAAC,OAAA9yK,EAAQ,IAAA2N,CAAO,EAAAmlK,EAClB,IAAC,KAAM77J,EAAO,SAAAnQ,EAAW,GAAI,OAAQ8oK,CAAc,OAAK,gBAGxDhoH,GADc,MAAM,KAAK,SAAS,WAAW,aAAa,GACpC,kBAAoB,KAC9C,MAAMmrH,EAAmB97J,EAAM,OAASA,EAAM,QAAU,SACrD87J,IACDnrH,EAAY,KAAK,IAAI3wC,EAAM,OAAS87J,EAAkBnrH,CAAS,GAE9D3wC,EAAM,OAAS2wC,IACR3wC,IAAM,MAAM,EAAG2wC,CAAS,EACrB9gD,IACV,OAAQC,GAAWA,EAAO,OAAS6gD,CAAS,EAC5C,IAAK7gD,IACAA,EAAO,OAASA,EAAO,OAAU6gD,IAC5B7gD,EAAA,OAAS6gD,EAAY7gD,EAAO,QAG9BA,EACR,GAGH,MAAMi5E,EAA0C,CAC9C,KAAM/oE,EACN,SAAUnQ,EAAS,OAASA,EAAW,OACvC,OAAQ8oK,CAAA,EAGJ/5J,EAA4B,CAChC,aAAclI,EACd,aAAcqyE,CAAA,EAGhB,GAAG,CAAC,MAAM,KAAK,KAAK,UAAW,CAC7BnqE,EAAQ,cAAgB7V,EACnB,UAAK,MAAM,kBAAkB6V,CAAO,EACzC,MACF,CAEK,UAAK,MAAM,iBAAiBA,CAAO,GAG1C,KAAQ,kBAAoB,IAAM,CAChC,KAAK,KAAK,OAAO,gBAAgB,UAAUmwF,EAAgB,EAAE,KAAK,KAAK,cAAc,SAAY,OAAK,GAAG,EACzG,KAAK,KAAK,OAAO,gBAAgB,cAAc,EAAI,GA91C9C,oBAAiB,IAAI7tE,GACrB,0BAAuB,IAAIA,GAChC,KAAK,WAAazoB,IACpB,CAEO,SAAS8E,EAAsB,CACpC,KAAK,qBAAqB,YAEvBmd,GACgB9U,EAAArI,EAAUjI,GAAM,CAC5B,QAAK,KAAK,UAAU,YACrB,OAGG,UAAK,IAAI,WAAYA,CAAC,EAE3B,MAAMymK,EAAe,CACnB,QACA,cACA,SACA,YACA,gBAEA,IACA,wBACA,kBACA,iCACA,eACA,cACA,uBACA,sBACA,WACA,wBACA,0BAEW,CAAEzmK,EAAE,OAAuB,QAAQymK,EAAa,KAAK,IAAI,CAAC,IAErEp2J,GAAYrQ,CAAC,EAGb,KAAK,cAAcA,CAAC,EAErB,GAAC,eAAgB,KAAK,oBAAqB,GACf8qB,GAAA,CAC/B,QAAA7iB,EACA,SAAU,KAAK,cACf,eAAgB,KAAK,qBACtB,CACH,CAoJO,SAAU,CACf,KAAK,eAAe,YACf,oBAAiB,KAAK,cAAc,QAAQ,EACjD,KAAK,WAAW,OAClB,CAEO,SAAU,CACf,KAAK,QAAQ,EACb,KAAK,qBAAqB,WAC5B,CAEA,MAAc,cAAc4c,EAAqC,CACxD,OAAAmE,GAAYnE,EAAS,MAAMjB,GAAW,CACvC,IAAArmB,EAEA,YAAK,aAAe,CAACqmB,EAAO,aAAiB,CAAC,KAAK,aAAeA,EAAO,YACpE,IAIN,KAAK,KAAK,UAAU,aAAe,CAACA,EAAO,cACrCrmB,EAAA,GAEPA,GAAO,KAAK,cAAgB6nB,GAC1B,MAAMxB,EAAO,UAIV,CAAC,CAACrmB,EAAA,CACV,CACH,CAEQ,YAAa,CACnB,GAAG,KAAK,MAAO,CACP,MAAAmpK,EAAW,KAAK,gBAAgB,UAAU,EAC1CnmF,EAAgB,KAAK,gBAAgB,cACrComF,EAA2BD,EAAW,oBAAsB,mBAClE,KAAK,QAAU,CAAC,CACd,KAAM,aACN,KAAM,sBACN,QAAS,IAAM,CACb,KAAK,KAAK,WAAW,CAAC,SAAUnmF,EAAc,SAAS,CACzD,EACA,OAAQ,IAAM,IACb,CACD,KAAM,WACN,KAAMomF,EACN,QAAS,SAAW,CACZ,MAAA9qI,EAAa,IAAIhH,GAAW,CAChC,UAAW,GACX,MAAO,2BACR,EAEW6xI,GAAA7qI,EAAW,iBAAiB6qI,CAAQ,EAEhD,MAAM3mI,GAAkB,CACtB,aAAc4mI,EACd,mBAAoB,uBACpB,OAAQ,CACN,QAAS,MACX,EACA,WAAA9qI,CAAA,CACD,EAED,KAAK,SAAS,oBAAoB,uBAChC0kD,EAAc,SACd1kD,EAAW,MAEf,EACA,OAAQ,IAAM,IACb,CACD,KAAM,cACN,KAAM,oBACN,QAAS,IAAM,CACR,UAAK,aAAa,CAAC,QAAS,KAAK,QAAS,SAAU0kD,EAAc,SAAS,CAClF,EACA,OAAQ,IAAM,GACd,OAAQ,IACP,CAED,KAAM,UACN,QAAS,IAAM,CACR,wBAAmB,KAAMqmF,GAAW,CAC1BrjJ,GAAA,YAAY6hC,GAAewhH,EAAQ,GAAM,KAAK,KAAK,KAAK,EAAE,MAAK,CAC7E,CACH,EACA,OAAQ,IAAMrmF,EAAc,SAAS,IAAM,sBAC3C,UAAW,SACZ,EACD,MACF,CAEG,QAAK,eAAiB,OAAW,CAClC,MAAMsmF,EAAW,IAAM,CACrB,KAAK,KAAK,aAAa,aAAa,CAAC,OAAQ,KAAK,aAAa,GAEjE,KAAK,QAAU,CAAC,CACd,KAAM,UACN,KAAM,cACN,QAASA,EACT,OAAQ,IAAM,KAAK,KAAK,SAAW,KAAK,cAAgB,KAAK,aAAa,OAAO,GAChF,CACD,KAAM,WACN,KAAM,aACN,QAASA,EACT,OAAQ,IAAM,KAAK,KAAK,SAAW,KAAK,cAAgB,KAAK,SAAS,gBAAgB,WAAW,KAAK,YAAY,GACjH,CACD,KAAM,aACN,KAAM,eACN,QAASA,EACT,OAAQ,IAAM,KAAK,KAAK,SAAW,KAAK,cAAgB,KAAK,SAAS,gBAAgB,YAAY,KAAK,YAAY,GAClH,CACD,KAAM,UACN,KAAM,UACN,QAAS,IAAM,CACb,KAAK,KAAK,MAAM,YAAY,KAAK,aAAc,EAAK,CACtD,EACA,OAAQ,IAA0C,KAAK,KAAK,QAAQ,YAAY,GAC/E,CACD,KAAM,SACN,KAAM,SACN,QAAS,IAAM,CACb,KAAK,KAAK,WAAW,CAAC,aAAc,KAAK,aAAa,CACxD,EACA,OAAQ,IAAM,KAAK,KAAK,WACzB,EACD,MACF,CAEA,MAAMpiH,EACU,KAAK,QAA4B,OAA6C,UACzD,OAAS,MAIxCI,EAAwB,MAAM31B,GAAmB,CAC/C,MAAAx5B,EAAQ,KAAK,QAA4B,OAA6C,SAC5F,GAAG,CAAEA,GAAoB,SAAW,CAAC+uD,EAC5B,SAGT,MAAMK,EAAgB,MAAOL,EAAQ,KAAK,SAAS,aAAa,eAAe,UAAY,KAAK,SAAS,aAAa,mBAAmB,yBAAyB,GAC/J,IAACK,EAAc,OACT,SAGH,MAAAj+C,GAAS,MAAMi+C,EAAc,QAAQ,KAAMC,GAASA,EAAK,KAAOrvD,EAAI,EAAE,EACrE,OAAAw5B,EAAQ,CAACroB,EAAQA,CAAA,EAG1B,KAAK,QAAU,CAAC,CAEd,QAAS,IAAM,CACV,KAAK,kBAAoB,IAC1B0c,GAAa,YAAYw9I,GAAqB,KAAK,OAAQ,UAAU,CAEzE,EACA,OAAQ,IAAM,KAAK,OAAO,OAAY,QAAK,SAAS,mBAAmB,+BAA+B,KAAK,OAAO,EAClH,UAAW,IAAM,GACjB,UAAW,QACX,cAAe,IACN,KAAK,kBAAoB,MAClC,EACC,CACD,KAAM,QACN,KAAM,sBACN,QAAS,KAAK,qBACd,OAAQ,IAAM,KAAK,KAAK,OAAStwF,GAAS,WAAa,CAAC,KAAK,QAAQ,OAAO,aAC3E,CACD,KAAM,QACN,KAAM,oCACN,QAAS,KAAK,qBACd,OAAQ,IAAM,KAAK,KAAK,OAASA,GAAS,WACxC,KAAK,YACL,CAAC,KAAK,KAAK,UAAU,oBAAoB,aAAa,UAAU,EAClE,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,WACN,KAAM,0BACN,QAAS,IAAM,CACR,UAAK,MAAM,gBAAgB,IAAM,CACR,KAAK,QACjC,KAAK,SAAS,mBAAmB,YAAY,KAAK,QAAS,KAAK,QAAQ,QAAS,CAC/E,aAAc,KAAK,KAAK,MAAM,aAC9B,SAAU,KAAK,QAAQ,SACxB,EAED,KAAK,KAAK,MAAM,cAAc,GAAO,EAAK,GACzC,IAAI,KAAK,KAAK,QAAQ,KAAO,GAAI,CAAC,CACvC,EACA,OAAQ,IAAM,KAAK,KAAK,OAASA,GAAS,WACzC,CACD,KAAM,gBACN,KAAM,QACN,QAAS,KAAK,aACd,OAAQ,SACN,CAAC,KAAK,QAAQ,OAAO,aACrB,CAAC,CAAC,KAAK,KAAK,MAAM,cAClB,CAAC,CAAE,KAAK,QAA4B,SACpC,KAAK,gBACL,CAAC,KAAK,qCACL,CAACxtE,GAAmB,KAAK,MAAM,EAAE,QAAQ,GAAK,KAAK,QAAQ,OAAO,OAClE,KAAK,KAAK,QAAQ,WAAW,KAAK,OAAO,GAAK,KAAK,KAAK,UAAQ,EAClE,CACD,KAAM,QACN,KAAM,QACN,QAAS,KAAK,aACd,OAAQ,SAAW,CAAC,KAAK,UAEvB,CAAC,KAAK,QAAQ,OAAO,aACrB,CAAC,CAAC,KAAK,KAAK,MAAM,cAClB,KAAK,KAAK,OAASwtE,GAAS,YAC3B,KAAK,KAAK,QAAQ,WAAW,KAAK,OAAO,GAAK,KAAK,KAAK,QAAQ,IAElE,CACD,KAAM,cACN,KAAM,cACN,SAAU,CAAE,KAAK,SAA6B,SAAS,OAAO,EAC9D,QAAS,IAAM,CACR,UAAK,aAAa,WAAW,CAChC,OAAQ,KAAK,QAAQ,OACrB,SAAU,KAAK,QAAQ,IACvB,UAAW,EACZ,CACH,EACA,OAAQ,IAAM,CACZ,GAAG,KAAK,KAAK,SAAiB,SACxB,MAAA4E,EAAW,KAAK,SAA6B,QACnD,MAAO,CAAC,EAAEA,GAAW,CAACA,EAAQ,OAAO,UAAYA,EAAQ,QAC3D,GACC,CACD,KAAM5wB,EAAQ,OAAS,aACvB,KAAMA,EAAQ,aAAe,iBAC7B,QAAS,KAAK,mBAAmB,KAAK,KAAM,EAAK,EACjD,OAAQ,IAAMI,EAAsB,EAAI,GACvC,CACD,KAAMJ,EAAQ,WAAa,YAC3B,KAAMA,EAAQ,4BAA8B,sBAC5C,QAAS,KAAK,mBAAmB,KAAK,KAAM,EAAI,EAChD,OAAQ,IAAMI,EAAsB,EAAK,GACxC,CACD,KAAM,OACN,KAAM,OACN,QAAS,KAAK,YACd,OAAQ,SAAY,MAAM,KAAK,SAAS,mBAAmB,eAAe,KAAK,QAAS,MAAM,GAC5F,CAAC,CAAC,KAAK,KAAK,MAAM,cACnB,CACD,KAAM,YACN,KAAO,KAAK,aAAiC,UAAY,gBAAkB,eAC3E,QAAS,KAAK,qBACd,OAAQ,IAAM,KAAK,aAAe,KAAK,SAAS,mBAAmB,mBAAmB,KAAK,YAAY,OAAQ,KAAK,YAAY,GAAG,GAClI,CACD,KAAM,OACN,KAAM,OACN,QAAS,KAAK,YACd,OAAQ,IAAM,CAAC,KAAK,YAClB,CAAC,CAAE,KAAK,QAA4B,SACpC,CAAC,KAAK,iBACL,CAAC,KAAK,gBAAmB,KAAK,QAA4B,UAAY,KAAK,OAAO,YACpF,CACD,KAAM,OACN,KAAM,wBACN,QAAS,KAAK,YACd,OAAQ,IAAM,CAAC,KAAK,YAAc,CAAC,CAAE,KAAK,QAA4B,SAAW,KAAK,gBACrF,CACD,KAAM,SACN,KAAM,sBACN,QAAS,IAAM,CACP,MAAA5oB,EAAY,SAAS,eAC3B,KAAK,KAAK,WAAW,CAAC,MAAOA,EAAU,WAAW,CACpD,EACA,OAAQ,IAAM,CAAC,CAAE,KAAK,QAA4B,SAAW,KAAK,gBACjE,CACD,KAAM,OACN,KAAM,iCACN,QAAS,KAAK,YACd,OAAQ,SAAW,CACjB,GAAG,CAAC,KAAK,YAAc,KAAK,WACnB,SAGT,SAAU,CAACxoC,EAAQkS,CAAI,IAAK,KAAK,KAAK,UAAU,aAAc,CACtD,MAAA+rB,EAAiC,GAAGj+B,CAAM,IAAI,KAAK,KAAK,OAASg9E,GAAS,UAAY,YAAc,SAAS,GACnH,UAAUrvE,KAAOuE,EAEZ,IADc,MAAM,KAAK,SAAS,mBAAmB,sBAAsB+rB,EAAYtwB,CAAG,GAChF,QACJ,QAGb,CAEO,QACT,EACA,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,OACN,KAAM,WACN,QAAS,KAAK,sBACd,OAAQ,IAAM,KAAK,eACnB,cAAe,IACd,CACD,KAAM,OACN,KAAM,6BACN,QAAS,IAAM,CACO+6B,GAAA,KAAK,OAAO,WAAW,CAC7C,EACA,OAAQ,IAAM,KAAK,iBACnB,cAAe,IACd,CACD,KAAM,OACN,KAAM,4BACN,QAAS,IAAM,CACOA,GAAA,KAAK,OAAO,WAAW,CAC7C,EACA,OAAQ,IAAM,KAAK,OAAO,UAAU,SAAS,gBAAgB,EAC7D,cAAe,IACd,CACD,KAAM,oBACN,KAAM,mBACN,QAAS,IAAM,CACV,IAACzoC,EAAU,QACZu2C,GAAa,KAAK,CAAC,QAAS,cAAe,OACtC,CACD,IAAAjrC,EACJ,GAAG,KAAK,eAAgB,CACtB,KAAM,CAAC,KAAA1E,EAAM,SAAAC,CAAQ,EAAI,KAAK,cAAc,EAC5CyE,EAAmB,CAAC,EAAG,mBAAoB,KAAA1E,EAAM,SAAAC,CAAQ,CAC3D,CAEAgpB,GAAa,YAAYy+I,GAAgB,CACvC,OAAQhjK,EAAmB,KAAK,OAAS,KAAK,QAAQ,OACtD,iBAAAA,EACA,QAASA,EAAmB,OAAY,KAAK,QAC7C,iBAAkB,KAAK,gBACxB,CACH,CACF,EACA,OAAQ,IAAM,CAAC,CAAC,KAAK,iBACpB,CACD,KAAM,OACN,KAAM,kCACN,QAAS,KAAK,gBACd,OAAQ,SAAW,CAAC,KAAK,UAAY,MAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,MAAM,GAAK,CAAC,KAAK,QAAQ,OAAO,aACvH,CACD,KAAM,MACN,KAAM,sBACN,QAAS,KAAK,WACd,OAAQ,SAAW,CAAC,KAAK,UACvB,CAAC,KAAK,QAAQ,OAAO,aACrB,KAAK,QAAQ,IAAM,kBACnB,CAAC,KAAK,QAAQ,OAAO,QACrB,MAAM,KAAK,SAAS,gBAAgB,cAAc,KAAK,QAAQ,MAAM,GACrE,KAAK,KAAK,OAASyxE,GAAS,WAC7B,CACD,KAAM,QACN,KAAM,wBACN,QAAS,KAAK,aACd,OAAQ,IAAO,KAAK,QAA4B,OAAO,QAAU,KAAK,SAAS,gBAAgB,cAAc,KAAK,QAAQ,MAAM,GAC/H,CACD,KAAM,WACN,KAAM,+BACN,QAAS,IAAMwoF,GAAgB,gBAAgB,KAAK,QAAS,KAAK,UAAU,EAC5E,OAAQ,IAAMA,GAAgB,YAAY,KAAK,QAAS,KAAK,OAAQ,KAAK,UAAU,GACnF,CACD,KAAM,eACN,KAAM,mBACN,QAAS,KAAK,cACd,OAAQ,IAAM,CACN,MAAAvgF,EAAQ,KAAK,QAAgB,OAAO,KACnC,OAAAA,GAAQA,EAAK,cAAc,QAAU,CAACA,EAAK,OAAO,QAAU,CAACA,EAAK,OAAO,IAClF,GAEC,CACD,KAAM,OACN,KAAM,iBACN,QAAS,KAAK,WACd,OAAQ,SAAW,CACX,MAAAA,EAAQ,KAAK,QAAgB,OAAO,KAC1C,OAAO,MAAM,KAAK,SAAS,mBAAmB,eAAe,KAAK,QAAS,MAAM,GAC/EA,GACA,CAACA,EAAK,OAAO,QACb,CAAC,KAAK,QAAQ,OAAO,WACzB,GAEC,CACD,KAAM,aACN,KAAM,iBACN,QAAS,KAAK,kBACd,OAAQ,SAAW,MAAM,KAAK,SAAS,gBAAgB,YAAY,KAAK,aAAa,GACnF,MAAM,KAAK,SAAS,kBAAkB,kBAAkB,KAAK,aAAa,GAC1E,CAAC,KAAK,QAAQ,OAAO,aACtB,CACD,KAAM,UACN,KAAM,UACN,QAAS,KAAK,eACd,OAAQ,IAAM,CAAC,KAAK,YAClB,KAAK,KAAK,OAASjI,GAAS,YAC3B,CAAC,KAAK,QAAQ,OAAO,aAAe,KAAK,QAAQ,SAAWzpE,KAC7D,KAAK,QAAQ,IAAM,kBACpB,CACD,KAAM,UACN,KAAM,oCACN,QAAS,KAAK,eACd,OAAQ,IAAM,KAAK,KAAK,UAAU,qBAChC,KAAK,YACL,CAAC,KAAK,KAAK,UAAU,oBAAoB,aAAa,UAAU,EAClE,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,WACN,KAAM,qCACN,QAAS,IAAMiyJ,GAAgB,gBAAgB,KAAK,iBAAkB,KAAK,UAAU,EACrF,OAAQ,IAAM,KAAK,kBAAoBA,GAAgB,YAAY,KAAK,iBAAkB,OAAW,KAAK,UAAU,EACpH,cAAe,IACd,CACD,KAAM,OACN,KAAM,aACN,QAAS,IAAM,CACb11I,GAAa,YAAYo6I,GAAqB,KAAK,cAAe,CAAC,KAAK,GAAG,CAAC,CAC9E,EACA,OAAQ,IAAM,CAAC,KAAK,QAAQ,OAAO,KACjC,KAAK,QAAQ,IAAM,WACnB,CAAC,KAAK,QAAQ,OAAO,aACrB,KAAK,SAAS,gBAAgB,UAAU,KAAK,aAAa,EAC5D,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,SACN,KAAM,yBACN,QAAS,KAAK,cACd,OAAQ,IAAM,CAAE,KAAK,QAAmC,QAAU,CAAC,KAAK,YAAc,KAAK,aAC3F,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,SACN,KAAM,kCACN,QAAS,KAAK,sBACd,OAAQ,IAAM,KAAK,WACnB,UAAW,IAAM,GACjB,cAAe,IACd,CACD,QAAS,IAAM,CAKb,GAJG,KAAK,aAIE,KAAK,mBACAp6I,GAAA,YAAY46I,GAAkB,KAAK,OAA0B,MAEnE,SAEX,EACA,OAAQ,IAAM,CAAC,KAAK,OAAO,WACxB,CAAC,CAAE,KAAK,QAA4B,WAAW,kBAAkB,QAAU,KAAK,SAAS,mBAAmB,+BAA+B,KAAK,OAAO,GAC1J,UAAW,IAAM,GACjB,UAAW,SACV,CACD,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,KAAK,cACd,OAAQ,SAAW,KAAK,SAAS,mBAAmB,iBAAiB,KAAK,OAAO,GAChF,CACD,KAAM,SACN,UAAW,SACX,KAAM,mCACN,QAAS,KAAK,cACd,OAAQ,IAAM,KAAK,YAAc,CAAC,KAAK,KAAK,UAAU,mBAAmB,aAAa,UAAU,EAChG,UAAW,IAAM,GACjB,cAAe,IACd,CACD,KAAM,OACN,KAAM,8BACN,QAAS,IAAM,CACb56I,GAAa,YAAYw6I,EAAc,CACzC,EACA,OAAQ,IAAM,KAAK,aAAe,CAAC,KAAK,iBAAiB,OAAO,WAChE,YAAa,IACZ,CACD,KAAM,OACN,KAAM,yBACN,QAAS,IAAM,CACbx6I,GAAa,YAAYu+F,EAAY,CACvC,EACA,OAAQ,IAAM,KAAK,aAAe,CAAC,CAAC,KAAK,iBAAiB,OAAO,WACjE,YAAa,IACZ,CACD,KAAM,OACN,KAAM,SACN,QAAS,IAAM,CACb73E,GAAa,KAAK,CAAC,QAAS,QAAS,EACvC,EACA,OAAQ,IAAM,KAAK,aAAe,CAAC,KAAK,iBAAiB,OAAO,WAChE,YAAa,IACZ,CACD,KAAM,OACN,KAAM,WACN,QAAS,IAAM,CACA1mB,GAAA,YACXwgJ,GACA,KAAK,OACL,KAAK,iBACL,IAAM,CACJ,KAAK,KAAK,QAAQ,oBAAoB,CAACp8C,GAAY,KAAK,QAAQ,OAAQ,KAAK,QAAQ,GAAG,CAAC,EAAG,EAAI,CAClG,EAEJ,EACA,OAAQ,IAAM,KAAK,aAAe,CAAC,CAAC,KAAK,iBAAiB,OAAO,WACjE,YAAa,IACZ,CACD,KAAM,aACN,KAAM,YACN,QAAS,IAAM,CACb19E,GAAa,KAAK,CAAC,QAAS,QAAS,EACvC,EACA,OAAQ,IAAM,KAAK,aAAe,CAAC,CAAC,KAAK,iBAAiB,OAAO,WACjE,YAAa,IACZ,CACD,KAAM,OACN,KAAM,OACN,QAAS,KAAK,YACd,OAAQ,IAAM,KAAK,YACnB,YAAa,IACZ,CAED,KAAM,UACN,QAAS,IAAM,CACR,wBAAmB,KAAM28H,GAAW,CAC1BrjJ,GAAA,YAAY6hC,GAAewhH,EAAQ,GAAM,KAAK,KAAK,KAAK,EAAE,MAAK,CAC7E,CACH,EACA,OAAQ,IAAM,CAAC,CAAC,KAAK,iCAAmC,SACxD,UAAW,IAAM,GACjB,UAAW,UACV,CACD,YAAa,KAAK,kBAAkB,aAAexyK,GAAc,KAAK,iBAAiB,YAAY,EAAI,OACvG,UAAW,GACX,UAAW,GACX,QAAS,IAAM+nC,GAAoB,KAAK,iBAAiB,YAAY,EACrE,OAAQ,IAAM,CAAC,CAAC,KAAK,iBAAiB,aACtC,YAAa,IACZ,CACD,YAAa,KAAK,kBAAkB,gBAAkB/nC,GAAc,KAAK,iBAAiB,eAAe,EAAI,OAC7G,UAAW,GACX,UAAW,GACX,QAAS,IAAM+nC,GAAoB,KAAK,iBAAiB,eAAe,EACxE,OAAQ,IAAM,CAAC,CAAC,KAAK,iBAAiB,gBACtC,YAAa,GACd,CACH,CAEA,OAAc,YAAYp/B,EAAkC+pK,EAA0BhN,EAA+B,CAChH,SAAM,QAAQ/8J,CAAO,EACf,OAAAA,EAAQ,KAAMA,GAAYk8J,GAAgB,YAAYl8J,EAAS+pK,EAAYhN,CAAU,CAAC,EAG/F,GAAG,CAAC+G,GAAoB9jK,CAAO,GAAK+8J,EAC3B,SAGT,MAAMvtE,EAAmB,CAAC,CAAGxvF,EAA4B,OAA0C,MACnG,IAAIgqK,EAAa,GAEjB,GAAGx6E,EACYw6E,EAAA,OACR,CAEL,GAAG,CADuBhqK,EAA4B,OAA6C,SACnF,SAEHgqK,EAAA,EACf,CAEA,IAAIC,EAAY,CAACF,GAAc,CAAC,CAAC1hJ,GAEjC,OAAG2hJ,GAAcD,IACDE,MAAA,CAAC,EAAEhuJ,EAAgB8tJ,EAAY,UAAU,GACrD9tJ,EAAgB8tJ,EAAY,OAAO,GACnC9tJ,EAAgB8tJ,EAAY,uBAAuB,GACnD9tJ,EAAgB8tJ,EAAY,aAAa,GACzC9tJ,EAAgB8tJ,EAAY,aAAa,KAGtCC,GAAcC,CACvB,CAEQ,oBAAqB,CAC3B,OAAQ,KAAK,iBAAmBlgF,GAAe,KAAK,eAAe,GAAM,KAAK,OAChF,CAEQ,kCAAmC,CACzC,MAAMvqF,EAAkB,GAElBQ,EAAU,KAAK,qBAEfxC,EAAYwC,EAA4B,SAC9C,GAAGxC,EAAU,CACX,MAAMi3B,EAAWj3B,EAAS,OAAQC,GAAWA,EAAO,IAAM,0BAA0B,EAC7E+B,EAAA,KAAK,GAAGi1B,EAAS,IAAKh3B,GAAWA,EAAO,WAAW,CAAC,CAC7D,CAEA,MAAM8qF,EAAavoF,EAA4B,UAC/C,GAAGuoF,EAAW,CACN,MAAAt0D,EAAUs0D,EAAU,QAAQ,OAAQ/E,GAAkBA,EAAc,SAAS,IAAM,qBAAqB,EACvGhkF,EAAA,KAAK,GAAGy0B,EAAQ,IAAKuvD,GAAmBA,EAAc,SAA0C,WAAW,CAAC,CACrH,CAEA,OAAOx7C,GAAaxoC,CAAM,CAC5B,CAEA,MAAc,MAAO,CACnB,KAAK,QAAQ,EACb,KAAK,WAAW,EAEhB,MAAM0vB,EAAkB,MAAM,KAAK,cAAc,KAAK,OAAO,EAC1D,IAACA,EAAgB,OAClB,OAGF,MAAMhkB,EAAU,KAAK,QAAU,MAAM8gB,GAAW,CAC9C,QAASkD,EACT,eAAgB,KAAK,eACtB,EACDhkB,EAAQ,GAAK,qBACLA,EAAA,UAAU,IAAI,aAAa,EAEnC,MAAMg/J,EAAch7I,EAAgB,KAAMrI,GAAWA,EAAO,YAAc,OAAO,EACjF,GAAGqjJ,GAAe,KAAK,OAAO,SAAU,CACtCA,EAAY,QAAQ,QAAQvyK,GAAK,SAAU,oBAAoB,CAAC,EAC1D,MAAAq9C,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAwB,SAAS,EAC1Ck1H,EAAA,YAAY,OAAOl1H,CAAM,EAGrCk1H,EAAY,QAAQ,MAAM,SAAS,cAAc,IAAI,CAAC,EAChD,MAAApwI,EAAYowI,EAAY,QAAQ,mBAEhC7xK,EAAa,KAAK,WAAW,IAAI,EACvC,KAAK,SAAS,mBAAmB,kBAAkB,KAAK,QAAQ,OAAQ,KAAK,QAAQ,GAAG,EAAE,KAAM8xK,GAAmB,CAC7G9xK,MAIJ,KAAK,gBAAkB,GAGvB28C,EAAO,YAAYwb,GAAmB25G,EAAe,KAAM,GAAM,EAAK,CAAC,EACzE,EAAItiK,GAAQ,CACP,IAACxP,IACF,OAGE,GAAAwP,EAAiB,OAAS,0BAA2B,CACvDiyB,EAAU,OAAO,EACjBowI,EAAY,QAAQ,SACpB,MACF,CAEA,KAAK,gBAAkB,GACjB,MAAA5kJ,EAAOrqB,EAAK,gBAAgB,EAC7BqqB,EAAA,UAAU,IAAI,WAAW,EAC9B0vB,EAAO,YAAY/5C,EAAK,uBAAuB,EAAG,IAAKqqB,CAAI,EAC5D,UACO4kJ,EAAa,CACf,MAAA3hF,EAAa,KAAK,QAA4B,UAC9CtE,EAAkBsE,GAAW,iBAC7B6hF,EAAqB,CAAC,CAACnmF,GAAiB,OACxC7rC,EAAoB,MAAM,KAAK,SAAS,mBAAmB,+BAA+B,KAAK,OAAO,GACxG,MAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,GAAmB,mBAC5E,OACIiyH,EAAgB9hF,EAAYA,EAAU,QAAQ,OAAO,CAAC/2E,EAAKhK,IAAMgK,EAAMhK,EAAE,MAAO,CAAC,EAAI,OAE3F0iK,EAAY,QAAQ,QAAQvyK,GAAKyyK,EAAqB,YAAc,SAAU,oBAAoB,CAAC,EAC7F,MAAAE,EAAW,IAAInzK,GAAK,YAAY,CACpC,IAAKizK,EACHhyH,IAAsB,OAAY,2BAA6B,uBAC7D,eACJ,KAAMgyH,EACJhyH,IAAsB,OAAY,CAACiyH,CAAa,EAAI,CAACjyH,EAAmBA,CAAiB,EACvF,OACJ,QAAS8xH,EAAY,YACtB,EAEG,IAAAK,EACDH,EACEhyH,IAAsB,OACvBmyH,EAAWtvK,EAAK,2BAA4B,CAACovK,CAAa,CAAC,EAEhDE,EAAAtvK,EACTgpF,EAAgB,SAAW7rC,EAAoB,2BAA6B,uBAC5E,CAAC6rC,EAAgB,OAAQ7rC,CAAiB,GAI9CmyH,EAAWtvK,EAAK,SAAS,EAGlBsvK,EAAA,UAAU,IAAI,yBAAyB,EACpCL,EAAA,QAAQ,OAAOK,CAAQ,EAEnC,MAAMC,EAAc,GACdC,EAAc,EACdC,EAAqB,MAClBJ,EAAA,QAAQ,MAAM,WAAa,SAC3BA,EAAA,QAAQ,MAAM,aAAeF,EAAqBM,EAAqB,KAAK,IAAID,EAAaxmF,EAAgB,MAAM,EAAI,MAAQ,OAClI,MAAA5rF,EAAa,KAAK,WAAW,IAAI,EAClC,cAAS,mBAAmB,2CAA2C,KAAK,OAA0B,EAAE,KAAMI,GAAW,CACzH,IAACJ,IACF,OAGFkyK,GAAU,OAAO,EAEjB,MAAMhiF,EAAY9vF,EAAO,SACnB4xK,EAAgBjyH,IAAsB,OAC1C3/C,EAAO,eAEL2xK,EACE7hF,EAAU,OAAQ3yC,GAAaA,EAAS,QAAQ,EAAE,OAClD2yC,EAAU,OAGZ,IAAAoiF,EACDpiF,KAAU,SAAW,EACtBoiF,EAAW,IAAIl9J,GAAU,CACvB,OAAQ86E,EAAU,CAAC,EAAE,OACrB,cAAe,GACf,OAAQ,EACT,GAAE,SAEA,CAAC6hF,GAAsB3xK,EAAO,qBAAqB,QAAU,KACzD,kBAAe8vF,EAAU,CAAC,EAAE,gBAE3B6hF,EAAoB,CAC5B,MAAM3zG,EAAS4zG,IAAkB9hF,EAAU,QAAUnwC,IAAsB,OAChEuyH,EAAA1vK,EACTw7D,EAAS,2BAA6B,uBACtCA,EAAS,CAAC4zG,CAAa,EAAI,CAACA,EAAe9hF,EAAU,MAAM,EAC7D,MAEIA,EAAU,OAGZoiF,EAAW1vK,EAAK,cAAe,CAACstF,EAAU,MAAM,CAAC,EAFxC+hF,EAAA,QAAQ,MAAM,WAAa,GAYxC,GANGK,IACDA,EAAS,MAAM,aAAeD,EAAqB,KAAK,IAAID,EAAaJ,CAAa,EAAI,MACjFM,EAAA,UAAU,IAAI,yBAAyB,EACpCT,EAAA,QAAQ,OAAOS,CAAQ,GAGlCpiF,EAAU,OAAQ,CACnB,MAAMw0D,EAAU,IAAI5kE,GAAe,CAAC,WAAYqyF,EAAa,WAAAnyK,EAAW,EACxE0kJ,EAAQ,OAAO94D,EAAkBA,EAAgB,IAAKz8E,GAAMzK,GAAUyK,EAAE,OAAO,CAAC,EAAI+gF,EAAU,IAAK3yC,GAAaA,EAAS,MAAM,CAAC,EACpHs0H,EAAA,QAAQ,OAAOntB,EAAQ,SAAS,EAI5C,KAAK,mBAAqB,EAE5B,EACD,CACH,CAEI,IAAAgsB,EACAC,EACAC,EAEF,QAAK,SAAS,IAAM,WACpB,CAAC,KAAK,KAAK,UAAU,aACrB,CAAC,KAAK,QAAQ,OAAO,aACrB,CAAC,KAAK,QAAQ,OAAO,cACrB,CAAC,KAAK,QAAQ,OAAO,OACrB,CAAC,KAAK,gBACN,CACM,MAAA1gF,EAAY,KAAK,QAAQ,UACzBJ,EAAO,KAAK,QAAQ,SAAWxxF,EAAU,OAAS,CAAC4xF,GAAaA,EAAU,OAAO,mBACjFuyC,EAAmB,MAAM,KAAK,SAAS,mBAAmB,sBAAsB,KAAK,OAAO,EACzEmuC,GAAAh7I,IAAY5F,GAA6C,cAClE2gJ,EAAA,KAAK,cAAgB,IAAI3G,GAAkB,CACzD,SAAU,KAAK,SACf,KAAM4G,EACN,WAAY,KAAK,WAAW,IAAI,EAChC,SAAU,MAAMrzH,GAAa,CAG3B,GAFAtrB,GAAsB,MAAM,EAC5BsrB,EAAW,MAAMA,EACd,EAACA,EAID,KAACj/C,EAAU,SAAWwxF,EAAM,CAC7Bj7C,GAAa,KAAK,CAAC,QAAS,YAAa,GACzC,MACF,CAEA,KAAK,KAAK,aAAa,CAAC,QAAS4tF,EAAkB,SAAAllF,EAAS,EAC9D,EACA,gBAAkBg1H,GAAY1O,GAAgB,yBAAyB8M,EAAe4B,CAAO,EAC7F,OAAQziF,CAAA,CACT,EACK,MAAA6gF,EAAc,KAAKluC,CAAgB,EAG3BiuC,EAAA7M,GAAgB,wBAAwB+M,CAAqB,CAC7E,CAEA,MAAM4B,EAAe37I,EAAgB,KAAMrI,GAAWA,EAAO,YAAc,QAAQ,EACnF,GAAGgkJ,EAAc,CACFA,EAAA,QAAQ,UAAU,IAAI,cAAc,EACpCA,EAAA,QAAQ,cAAc,aAAa,SAAS,cAAc,IAAI,EAAGA,EAAa,OAAO,EAElG,MAAMC,EAAa,IAAM,CACvB/B,MAAgB,IAChBA,EAAY,OAAS,IAGjBvpK,EAAS,KAAK,gBAClB,CAAE,KAAK,gBAAgB,cAAc,SAA0C,WAAW,EAC1F,KAAK,iCAAiC,EAClCurK,EAAgB,KAAK,mBAAqB3nK,GAAgB,EAE1D,WAAK,SAAS,gBAAgB,8BAA8B5D,CAAM,EAAE,KAAK,MAAMy+D,GAAS,CACtF,MAAAhlE,EAAI,MAAMglE,GAA8B,CACtC,MAAAhiE,MAAkE,IACxEgiE,EAAK,QAAStlE,GAAQ,CACjB,CAACA,GAAOsD,EAAE,IAAItD,EAAI,gBAAgB,EAAE,GAIvCsD,EAAE,IAAItD,EAAI,gBAAgB,GAAIA,EAAI,eAAe,EAClD,EAED,MAAMkxK,EAAS,CAAC,GAAG5tK,EAAE,OAAQ,GAE1B,GADH8uK,EAAc,QAAQlB,CAAM,EACzB5tK,EAAE,OAAS,EAAG,CACT,MAAAxD,EAAS,MAAM,KAAK,SAAS,aAAa,mBAAmB,cAAcoxK,EAAO,CAAC,CAAC,EACpFxnK,EAAU5J,EAAO,OAAO,KAAMgP,GAAQ,CAC1C,MAAMe,EAAKvN,EACT,KAAK,MAAQ,oBAAuB,KAAK,gBAAkB,8BAAgC,2BAC3F,CAAC5D,GAAcoQ,EAAI,IAAI,KAAK,CAAC,GAEhBsG,GAAA88J,EAAa,YAAariK,CAAE,EAC5C,EAED,OAAO/P,EAAO,OAAS4J,GAAWyoK,EAAc,SAClD,CAEe/8J,GAAA88J,EAAa,YAAa5vK,EAAK,4BAA6B,CAACgB,EAAE,IAAI,CAAC,CAAC,GAGtF,GAAGgiE,EAAK,KAAMtlE,GAAQ,CAACA,CAAG,EACbmyK,IACX,KAAK,SAAS,gBAAgB,wBAAwBtrK,CAAM,EAAE,KAAKvG,CAAC,MAEpE,QAAOA,EAAEglE,CAAI,CACf,CACD,CAEH,CAEK,iBAAK,UAAU,OAAO/yD,CAAO,EAE3B,CACL,QAAAA,EACA,QAAS,IAAM,CACb,KAAK,QAAQ,EACb89J,GAAiBA,EAAc,SACjC,EACA,QAAS,IAAM,CACb99J,EAAQ,OAAO,EACE89J,KAAc,eAAe,QAChD,EACA,YAAAD,EACA,cAAAC,EACA,sBAAAC,CAAA,CAEJ,CAEA,MAAc,iBAAkB,CAC9B,GAAG,CAAC,KAAK,SAAW,KAAK,cAAc,SACrC,OAGE,IAAA+B,EACJ,KAAM,CAAC,OAAAt0K,EAAQ,IAAA2N,GAAO,KAAK,QACrBtN,EAAW,KAAK,KAAK,SACxB,KAAK,KAAK,OAAS28E,GAAS,aAC7Bs3F,EAAiB,MAAM,KAAK,SAAS,mBAAmB,iBAAiBt0K,EAAQK,CAAQ,GAGrF,MAAAR,EAAW,MAAM,KAAK,SAAS,gBAAgB,gBAAgBy0K,EAAgBA,EAAc,OAASt0K,CAAM,EAC5Gu0K,EAAQr3E,GAAmBvvF,CAAG,EACpC,IAAIlE,EAAM,gBACV,OAAG5J,GACM4J,GAAA5J,EACJy0K,EAAe7qK,GAAO,IAAIyzF,GAAmBo3E,EAAc,SAAS,YAAY,CAAC,YAAYC,CAAK,GAC7Fl0K,EAAUoJ,GAAO,IAAIyzF,GAAmB78F,CAAQ,CAAC,IAAIk0K,CAAK,GAC7D9qK,GAAO,IAAM8qK,IAEX9qK,GAAA,KAAOzJ,EAAO,WAClBs0K,EAAe7qK,GAAO,IAAI8qK,CAAK,WAAWr3E,GAAmBo3E,EAAc,GAAG,CAAC,GAC1Ej0K,EAAUoJ,GAAO,IAAIyzF,GAAmB78F,CAAQ,CAAC,IAAIk0K,CAAK,GAC7D9qK,GAAO,IAAM8qK,GAGb,CAAC,IAAA9qK,EAAK,UAAW,CAAC5J,CAAQ,CACnC,CAEA,MAAc,yBAA0B,CACtC,GAAG,KAAK,cAAgB,CAAC2pK,KACvB,OAGE,IAAAhuC,EACJ,GAAI,KAAK,KAAK,UAAU,YAOjB,CAEL,MAAMlpH,EADI,CAAC,GAAG,KAAK,KAAK,UAAU,aAAa,SAAS,EAC5C,IAAI,CAAC,CAACtS,EAAQkS,CAAI,IAAM,CAAC,GAAGA,CAAI,EAAE,IAAKvE,GAAQumH,GAAYl0H,EAAQ2N,CAAG,CAAC,CAAC,EACpF6tH,EAAWroG,GAAQ7gB,CAAC,CACtB,KAXqC,CAC7B,MAAAhJ,EAAU,KAAK,qBACrB,GAAG,CAACA,EACF,OAGFkyH,EAAW,CAACtH,GAAY5qH,EAAQ,OAAQA,EAAQ,GAAG,CAAC,EAOlD,IAAA81B,EACD,KAAK,YACKA,EAAA,CAAC,KAAK,gBAAgB,EAEtBA,EAAAo8F,EAAS,IAAKnH,GAAY,KAAK,KAAK,WAAWA,CAAO,CAAoB,EAGvF,MAAMmgD,EAAYp1I,EAAS,IAAK91B,GAAY,CACvC,IAACA,GAAS,QACX,OAGI,MAAAF,EAAUF,GAAaI,EAAQ,QAAS,CAC5C,SAAWA,EAA4B,eAAiBA,EAAQ,SAChE,cAAe,GAChB,EACD,OAAOmrK,GAAuBrrK,CAAO,EACtC,EAMM,OACL,KALsBg2B,EAAS,IAAK91B,GAC7BA,GAAS,OACjB,EAGa,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI,EACrC,KAAMkrK,EAAU,OAAO,OAAO,EAAE,KAAK;AAAA,CAAI,EAE7C,CA2KQ,eAAgB,CACf,OAAAvF,GAAiB,KAAK,MAAM,CACrC,CAmDA,OAAc,gBAAgB7vI,EAAmCinI,EAAqD,CACjH,SAAM,QAAQjnI,CAAQ,EAChB,OAAAA,EAAS,IAAK91B,GACZ,KAAK,gBAAgBA,CAAO,CACpC,EAGH,GAAI,KAAK,YAAY81B,EAAU,OAAWinI,CAAU,EAI7C,OAAAtlJ,GAAmB,eAAe,CAAC,MAAO+wC,GAAoB1yB,EAAU,EAAI,EAAE,CACvF,CAEA,OAAc,wBAAwBysC,EAAqC,CAIzE,IAAIp1C,EAAc,GAClB,MAAMF,EAAe,GAClB5E,KACc8E,GAAA,IAGb,IAAA47I,EACJ,OAAGxmG,IAAa,WACAwmG,EAAA,CACZ,IAAK57I,EAEL,KAAM,IAGM47I,EAAA,CACZ,IAAK,GACL,MAAO97I,EACP,KAAME,CAAA,EAIH47I,CACT,CAEA,OAAc,yBAAyBC,EAAkC4B,EAAkB,CACnF,MAAA5gJ,EAAOg/I,EAAc,UAAU,sBAAsB,EACrDoC,EAAUrH,GAAa/5I,CAAI,EACjC,OAAAohJ,EAAQ,MAAQ,GAAK,EACrBA,EAAQ,KAAO,IAAM,EACjBR,IAASQ,EAAQ,KAAO,IACrBA,CACT,CAEA,OAAc,oBAAoB,CAAC,QAAAlgK,EAAS,cAAA89J,EAAe,sBAAAC,GAIxD,CACD,IAAIoC,EAAyB,GAC7B,GAAGrC,EAAe,CAChB,MAAMr2J,EAAY,aAIlB,GAHA04J,EAAyBrC,EAAc,UAAU,UAAU,SAASr2J,CAAS,EAC1E04J,GAAsCrC,EAAA,UAAU,UAAU,OAAOr2J,CAAS,EAE1Es2J,IAA0B,aAAc,CACzC,MAAMqC,EAAapgK,EAAsE,YAInFqgK,GADiBD,EADS,GAC+BpJ,GACvB,EAClCsJ,EAAwB,IAC9B,GAAGD,EAAkBC,EAAuB,CAC1C,MAAMC,EAAWH,GAAcE,EAAwBD,GAAmBrJ,GAA2B,EAC7Fh3J,EAAA,MAAiE,SAAcugK,EAAU,IACnG,CAEF,CACF,CAEA,GAAGzC,EAAe,CAChB,MAAMxwK,EAAYwwK,EAAc,eAChC,GAAI99I,GAOFhgB,EAAQ,QAAQ1S,CAAS,MAPZ,CACP,MAAA4B,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAkB,qBAAqB,EACvDA,EAAE,OAAO,GAAG,MAAM,KAAK8Q,EAAQ,UAAU,CAAC,EAClCA,EAAA,UAAU,IAAI,mBAAmB,EACjCA,EAAA,OAAO1S,EAAW4B,CAAC,EAK7B5B,EAAU,MAAM,YAAY,WAAYA,EAAU,aAAe,IAAI,CACvE,CAEO,OACL,YAAa,IAAM,CACd6yK,GACarC,EAAA,UAAU,UAAU,IAAI,YAAY,CAEtD,EACA,QAAS,IAAM,CACVA,GACaA,EAAA,UAAU,UAAU,OAAO,YAAY,CAEzD,EAEJ,CACF,CC9jDA,MAAqB0C,EAAS,CAI5B,YAAoBj1K,EAajB,CAbiB,aAAAA,EAcb,sBAAmBA,EAAQ,WAAW,OAAO,EAClD,KAAK,WAAW,CAClB,CAEO,UAAUC,EAAgB,CAC/B,KAAK,KAAOA,IAAWC,EAAU,KAAO,WAAa,UACvD,CAEQ,eAAmD,CACzD,MAAO,CAAC,CACN,KAAM,OACN,KAAM,yBACN,QAAS,KAAK,QAAQ,cACtB,OAAQ,IAAM,KAAK,OAAS,YAC3B,CACD,KAAM,WACN,KAAM,6BACN,QAAS,KAAK,QAAQ,gBACtB,OAAQ,IAAM,KAAK,OAAS,YAC3B,CACD,KAAM,WACN,KAAM,wBACN,QAAS,KAAK,QAAQ,gBACtB,OAAQ,IAAM,KAAK,OAAS,YAC3B,CACD,KAAM,SACN,KAAM,0BACN,QAAS,KAAK,QAAQ,sBACtB,OAAQ,IAAM,KAAK,OAAS,YAAc,KAAK,QAAQ,oBAAoB,GAC1E,CACD,KAAM,aACN,KAAM,gBACN,OAAQ,GACR,QAAS,IAAM,KAAK,QAAQ,SAAS,MAAS,EAC9C,OAAQ,IAAM,CAAC,CAAC,KAAK,QAAQ,SAAS,EACvC,CACH,CAEQ,YAAa,CACnB,KAAK,iBAAiB,QAChB,MAAA0B,EAAa,KAAK,iBAAiB,IAAI,EAEvCqzB,EAAiB,IAAImD,GAC3Bx2B,EAAW,QAAQ,IAAM,CACvBqzB,EAAe,UAAU,EAC1B,EAED,KAAK,cAAc,EACb,MAAA5D,EAAU,KAAK,gBACf5c,EAAUugB,GAAe,CAAC,QAAA3D,EAAS,eAAA4D,CAAe,GACxDxgB,EAAQ,UAAU,IAAI,YAAa,KAAK,QAAQ,QAAQ,EACnD,aAAQ,MAAMA,CAAO,EAEA6iB,GAAA,CACxB,QAAS,KAAK,QAAQ,iBACtB,SAAU,MAAM9qB,GAAM,CACpB,GAAG,KAAK,QAAQ,QAAU,CAAC,KAAK,QAAQ,SACtC,OAGFqQ,GAAYrQ,CAAC,EACb,MAAM,QAAQ,IAAI6kB,EAAQ,IAAI,MAAMjB,GAAW,CACvC,MAAApuB,EAAS,MAAMouB,EAAO,SAC5BA,EAAO,QAAQ,UAAU,OAAO,OAAQ,CAACpuB,CAAM,CAChD,EAAC,EAEF,MAAMkoB,EAAmBva,KACnB/N,EAAasoB,EAAiB,MAE9BsoJ,EAAwB,aAC1B,IAAAD,EACD,KAAK,QAAQ,kBACdA,EAAgB,IAAI3G,GAAkB,CACpC,SAAU1rK,EAAU,SACpB,KAAMsyK,EACN,WAAA5wK,EACA,SAAU,MAAMu9C,GAAa,CAG3B,GAFAtrB,GAAsB,MAAM,EAC5BsrB,EAAW,MAAMA,EACd,CAACA,EACF,OAGF,MAAM+1H,EAAgB/1H,EAA0C,YAC7D,IAACj/C,EAAU,SAAW,CAACqyK,EAAc,gBAAgB,IAAI2C,CAAY,EAAG,CACzEz+H,GAAa,KAAK,CAAC,QAAS,kBAAmB,GAC/C,MACF,CAGA,MAAM+rC,GADmB,MAAMtiF,EAAU,SAAS,oBAAoB,oBAAoB,GACjD,KAAMi1K,GAAWA,EAAO,oBAAsBD,CAAY,EAC9F,aAAQ,SAAS1yF,EAAgB,EAAE,CAC1C,EACA,gBAAkB2xF,GAAY1O,GAAgB,yBAAyB8M,EAAe4B,CAAO,EAC7F,UAAW,GACZ,EAED,MAAM5B,EAAc,QAKhB,MAAAE,EAAqBF,GAAiB9M,GAAgB,oBAAoB,CAAC,QAAAhxJ,EAAkB,cAAA89J,EAAe,sBAAAC,EAAsB,EAElH3+I,GAAA,YAAYpf,EAAS,IAAM,CAC/Cg+J,GAAoB,QAAQ,EAC5BvoJ,EAAiB,QAAQ,EACzB,KAAK,WAAW,EAChB,WAAW,IAAM,CACfzV,EAAQ,OAAO,GACd,GAAG,EACP,EAEDg+J,GAAoB,YAAY,CAClC,EACA,eAAAx9I,CAAA,CACD,CACH,CACF,CCjIA,MAAMmgJ,GAAsB,IACtBC,GAAoB,IACpBC,GAAsB,IAE5B,MAAqBC,WAAwBxlJ,EAAa,CAexD,YAAoBsX,EAAY,CAC9B,MAAM,oCAAqC,CACzC,SAAU,GACV,gBAAiB,GACjB,YAAa,SACb,KAAM,GACN,MAAO,UACP,4BAA6B,IAAM,CACjC,GAAG,GAAC,KAAK,mBAAmB,QAAU,KAAK,MAI3C,OAAOkF,GAAkB,CACvB,aAAc,uBACd,mBAAoB,sBACpB,OAAQ,CACN,QAAS,UACT,SAAU,EACZ,EACD,CACH,EACD,EArBiB,UAAAlF,EAXpB,KAAQ,OAAS,EAwLjB,KAAQ,cAAgB,IAAM,CAC5B,KAAK,KAAK,GAmHZ,aAAW76B,GAAa,CACtB,MAAM+Y,EAAS/Y,EAAE,OAEXgpK,EAAaz3H,GAAUx4B,EAAQ,OAAO,EACtC4b,EAAUs0I,GAAalwJ,CAAM,EAC/B4b,IACK5b,EAAA,cAAc,UAAU,IAAI,WAAW,EACnCiwJ,EAAA,UAAU,OAAO,eAAe,EAChCA,EAAA,kBAAkB,gBAAgB,UAAU,GAG1C,CAACA,EAAW,oBACd,CAACr0I,GAAW,KAAK,UAAU,kBAAoB,IAC1D,KAAK,gBAAgB,EAGvB,KAAK,aAAa,GAGpB,mBAAiB30B,GAAkB,CACjC,MAAM+Y,EAAS/Y,EAAE,OACXmmB,EAAQorB,GAAUx4B,EAAQ,OAAO,EACjChiB,EAAMgiC,GAAW5S,CAAK,EAEzB,KAAK,gBAAkB,KAAK,eAAe,CAAC,EAAE,CAAC,IAAMpvB,IACtD,KAAK,eAAiB,QAGxBovB,EAAM,OAAO,EACR,uBAAkB,OAAOpvB,EAAK,CAAC,EAEpC,KAAK,kBAAkB,QAAQ,CAAC8kC,EAAY9kC,IAAQ,CACvC8kC,EAAA,QAAQ,aAAa,OAAS,EACzCA,EAAW,QAAQ,aAAa,KAAK9kC,EAAM,CAAC,EACxB7C,GAAK,QAAQ,IAAI2nC,EAAW,MAAM,iBAAgC,EAC1E,OAAO,EACpB,EAED,KAAK,aAAa,GAhTlB,KAAK,UAAU,CACjB,CAEA,MAAc,WAAY,CACnB,wBAAqB,IAAIhH,GAAW,CACvC,YAAa,eACb,MAAO,eACP,KAAM,WACN,UAAW+zI,EAAA,CACZ,EAED,KAAK,eAAe,IAAI,KAAK,mBAAmB,KAAK,EAAE,QAAS,IAAM,CACpE,KAAK,aAAa,EACnB,EAED,KAAK,kBAAoB,GAEtB,KAAK,KAAK,OAASn4F,GAAS,WACZ,IAAIy4F,GAAgB,CACnC,cAAe,IAAM,CACd,UAAK,MAAM,WAAa,GAC7B,KAAK,KAAK,CACZ,EACA,gBAAiB,IAAM,CAChB,UAAK,MAAM,gBAAgB,IAAM,CACpC,KAAK,KAAK,EACX,CACH,EACA,SAAU,cACV,iBAAkB,KAAK,WACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,MAAQjhK,GAAY,CACb,YAAO,OAAOA,CAAO,CAC5B,EACD,EAEQ,UAAU,KAAK,KAAK,MAAM,EAGrC,KAAK,OAAO,OAAO,KAAK,mBAAmB,SAAS,EAE9C,MAAA6gB,EAAK,SAAS,cAAc,IAAI,EAChClyB,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EACzBpC,GAAMoC,EAAG,aAAa,EAEjB,eAAY,SAAS,cAAc,MAAM,EACzC,eAAU,UAAU,IAAI,uBAAuB,EAE9C,MAAAI,EAAK,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sBAAsB,EAEjC,MAAAmyK,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EACvC30K,GAAM20K,EAAiB,UAAU,EAE5B,MAAM,KAAK,KAAK,SAAS,gBAAgB,YAAY,KAAK,KAAK,MAAM,IACnE,4BAAyB,IAAIxlJ,GAAc,CAC9C,KAAM,oBACN,KAAM,YACP,EACI,4BAAuB,MAAM,QAAU,GACzC3sB,EAAA,OAAO,KAAK,uBAAuB,KAAK,GAGxC,2BAAwB,IAAI2sB,GAAc,CAC7C,KAAM,yBACN,KAAM,WACP,EACI,uBAAoB,IAAIA,GAAc,CACzC,KAAM,eACN,KAAM,OACP,EAED,KAAK,eAAe,IAAI,KAAK,sBAAsB,KAAK,EAAE,SAAU,IAAM,CAClE,MAAAW,EAAU,KAAK,sBAAsB,QAC3C,KAAK,kBAAkB,MAAM,gBAAgB,WAAYA,CAAO,EACjE,EAED,KAAK,eAAe,IAAI,KAAK,kBAAkB,KAAK,EAAE,SAAU,IAAM,CAC9D,MAAAA,EAAU,KAAK,kBAAkB,QAEtC,MAAM,KAAK,KAAK,UAAU,QAAQ,EAAoB,IAAK/e,GAAO,CAC9DA,EAAA,UAAU,OAAO,cAAe+e,CAAO,EAC3C,EAEGA,IACF,KAAK,eAAiB,OACjB,uBAAkB,iBAAiB,EAAE,GAG/B8kJ,EAAA,QAAS7jK,GAAOA,EAAG,UAAU,OAAO,OAAQ,CAAC+e,CAAO,CAAC,EAElE,KAAK,sBAAsB,MAAM,gBAAgB,WAAYA,CAAO,EACpE,KAAK,aAAa,EACnB,EAEDttB,EAAG,OAAO,KAAK,sBAAsB,MAAO,KAAK,kBAAkB,KAAK,EAExE,MAAMoyK,EAA8B,GAE9BC,EAAsB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EAC3C70K,GAAM60K,EAAqB,yBAAyB,EAE9C,MAAAC,EAAS,SAAS,cAAc,IAAI,EAEpCC,EAAwB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAuB,EAEtD,uBAAoB,IAAI10I,GAAW,CACtC,YAAa,kCACb,MAAO,kCACP,KAAM,WACN,UAAWi0I,EAAA,CACZ,EAED,KAAK,eAAe,IAAI,KAAK,mBAAmB,KAAK,EAAE,QAAS,IAAM,CACpE,KAAK,aAAa,EACnB,EAEK,MAAAU,EAAuB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,UAAU,EAC7Ch1K,GAAMg1K,EAAsB,sBAAsB,EAElDD,EAAsB,OAAO,KAAK,kBAAkB,UAAWC,CAAoB,EAEtEJ,EAAA,KAAKE,EAAQD,EAAqBE,CAAqB,EACpEH,EAAa,QAAS7jK,GAAOA,EAAG,UAAU,IAAI,MAAM,CAAC,EAErD,KAAK,KAAK,cAAc,aAAaujB,EAAI,KAAK,IAAI,EAClD,KAAK,KAAK,OAAOlyB,EAAG,KAAK,UAAW,SAAS,cAAc,IAAI,EAAGuyK,EAAiBnyK,EAAI,GAAGoyK,CAAY,EAErF94J,EAAA,KAAK,WAAY,KAAK,cAAe,CAAC,eAAgB,KAAK,eAAe,EAE3F,KAAK,WAAa,IAAIoiB,GAAW,KAAK,IAAI,EAC1C,KAAK,gBAAgB,EAErB,KAAK,aAAa,CACpB,CAEQ,kBAAmB,CAMlB,OALS,MAAM,KAAK,KAAK,UAAU,QAAQ,EAAE,IAAI,CAACntB,EAAIxO,IAAQ,CAC7D,MAAAqvB,EAAQ7gB,EAAG,cAAc,oBAAoB,EAC5C,OAAA6gB,aAAiB,iBAAmBA,EAAM,MAAQg9I,GAAsBh9I,EAAO,GAAO,EAAK,EAAE,MACrG,EAAE,OAAQqI,GAAM,CAAC,CAACA,EAAE,MAAM,CAG7B,CAMQ,UAAW,CACX,MAAAg7I,EAAW,KAAK,mBAAmB,MASzC,GARG,CAACA,GAIDA,EAAS,OAASb,IAIlB,KAAK,kBAAkB,SAAW,CAAC,KAAK,gBAAgB,OAClD,SAGH,MAAAc,EAAU,KAAK,mBAMrB,GALGA,EAAQ,OAAS,GAIEA,EAAQ,KAAMvtK,GAAMA,EAAE,OAAS0sK,EAAiB,EAE7D,SAGH,MAAC,MAAOc,CAAY,EAAIvG,GAAsB,KAAK,kBAAkB,MAAO,GAAO,EAAK,EAC3F,QAAAuG,EAAa,OAASb,GAK3B,CAEQ,cAAe,CACf,MAAAvqH,EAAQ,KAAK,WACnB,KAAK,WAAW,gBAAgB,WAAY,CAACA,CAAK,CACpD,CAEA,MAAa,KAAK4H,EAAQ,GAAO,CACzB,MAAAsjH,EAAW,KAAK,mBAAmB,MAEnCC,EAAU,KAAK,mBAEf,CAAC,MAAOC,EAAc,SAAUC,CAAwB,EAAAxG,GAAsB,KAAK,kBAAkB,MAAO,GAAM,EAAK,EAE7H,GAAG,KAAK,KAAK,OAAS3yF,GAAS,WAAa,CAACtqB,EAAO,CAC7C,UAAK,MAAM,gBAAgB,IAAM,CACpC,KAAK,KAAK,EAAI,EACf,EAED,MACF,CAEA,KAAK,KAAO,GACZ,KAAK,KAAK,EAKV,MAAM7lC,EAAyB,GAE5B,KAAK,wBAA0B,CAAC,KAAK,uBAAuB,UAC7DA,EAAO,cAAgB,IAGtB,KAAK,sBAAsB,UAC5BA,EAAO,gBAAkB,IAGxB,KAAK,kBAAkB,UACxBA,EAAO,KAAO,IAGhB,MAAMo4D,EAAa,CACjB,EAAG,OACH,OAAAp4D,EACA,SAAU,CAAC,EAAG,mBAAoB,KAAMmpJ,EAAU,SAAU,EAAE,EAC9D,QAASC,EAAQ,IAAI,CAACh/J,EAAO3T,KACpB,CACL,EAAG,aACH,KAAM,CACJ,EAAG,mBACH,KAAM2T,EACN,SAAU,CAAC,CACb,EACA,OAAQ,IAAI,WAAW,CAAC3T,CAAG,CAAC,GAE/B,EACD,GAAI,QAIA8yK,EAAiB,MAAM,KAAK,KAAK,SAAS,gBAAgB,kBAC9DnxF,EACA,KAAK,eACLixF,EACAC,CAAA,EAKG,UAAK,SAAS,mBAAmB,UAAU,CAC9C,GAAG,KAAK,KAAK,wBAAwB,EACrC,WAAYC,CAAA,CACb,EAEE,KAAK,KAAK,MAAM,aAAe,SAC3B,UAAK,MAAM,cAGlB,KAAK,KAAK,MAAM,cAAc,GAAO,EAAK,CAC5C,CA2CQ,iBAAkB,CACxB,MAAMr5J,EAAS,KAAK,SACdzZ,EAAM,KAAK,UAAU,kBAAoB,EACzC+yK,EAAgB,IAAIj1I,GAAW,CACnC,YAAa,2BACb,MAAO,sBACP,aAAc,CAAC99B,CAAG,EAClB,KAAM,YAAcyZ,EACpB,UAAWq4J,EAAA,CACZ,EACD,KAAK,eAAe,IAAIiB,EAAc,KAAK,EAAE,QAAS,KAAK,OAAO,EAE5D,MAAAv8D,EAAa,IAAIrnF,GAAW,CAChC,KAAM,GACN,KAAM,WACP,EACUqnF,EAAA,KAAK,OAAOu8D,EAAc,SAAS,EAC9Cx5J,EAAiBw5J,EAAc,MAAOz5J,GAAa,CAAC,eAAgB,KAAK,eAAe,EAC7Ek9F,EAAA,MAAM,UAAU,IAAI,eAAe,EAC9CA,EAAW,MAAM,SAAW,GACxB,KAAK,kBAAkB,SACdA,EAAA,MAAM,UAAU,OAAO,aAAa,EAEjD,KAAK,eAAe,IAAIA,EAAW,KAAK,EAAE,SAAU,IAAM,CAExD,GADgBA,EAAW,MAAM,QACrB,CACJx2G,QAAMgiC,GAAWw0E,EAAW,KAAK,EACvC,KAAK,eAAiB,CAAC,IAAI,WAAW,CAACx2G,CAAG,CAAC,CAAC,EAC5C,KAAK,aAAa,CACpB,EACD,EAEK,MAAAgzK,EAAY/0I,GAAW,OAAO,EACtB80I,EAAA,UAAU,OAAOC,CAAS,EAEvBz5J,EAAAy5J,EAAW,KAAK,cAAe,CAAC,eAAgB,KAAK,eAAgB,KAAM,GAAK,EAE5F,eAAU,OAAOx8D,EAAW,KAAK,EAEtC,KAAK,WAAW,kBAAkB,CAChC,QAAS,KAAK,UAAU,iBACxB,SAAU,SACX,EAGI,uBAAkB,KAAKu8D,CAAa,CAC3C,CACF,CClaA,SAAwBE,GAQrBx2K,EAAmH,CAC7G,WAAI,QAAQ,MAAM2kB,GAAY,CAC7B,MAAAsD,EAAS,SAAS,cAAc,QAAQ,EACxC7mB,EAAOpB,EAAQ,MAAQA,EAAQ,UAAU,aAAaA,EAAQ,OAAO,EACrEglB,EAAM,OAAO,kBAAoB,EAChCiD,EAAA,MAAQ7mB,EAAK,MAAQ4jB,EACrBiD,EAAA,OAAS7mB,EAAK,OAAS4jB,EACxB,MAAAykB,EAAMxhB,EAAO,WAAW,IAAI,EAE9B,IAAAk7C,EACDqyF,GACQryF,EAAA,MAAM,kBAAkBnjE,EAAQ,MAAO,CAAC,YAAaoB,EAAK,MAAO,aAAcA,EAAK,MAAO,GAEpG+hE,EAASnjE,EAAQ,MAGnBypC,EAAI,UAAU05B,EAAQ,EAAG,EAAGl7C,EAAO,MAAOA,EAAO,MAAM,EAEpDutI,IACAryF,GAAwB,MAAM,EAG3B,MAAAszG,EAAWz2K,EAAQ,UAAY,aAC/B02K,EAAU12K,EAAQ,SAAW,EACnC,GAAGA,EAAQ,UAAW,CACpB,MAAM0J,EAAMue,EAAO,UAAUwuJ,EAAUC,CAAO,EACtC/xJ,EAAA,CAAC,IAAAjb,EAAK,KAAAtI,CAAA,CAAY,OAEnB6mB,EAAA,OAAQmmD,GAAS,CACdzpD,EAAA,CAAC,KAAAypD,EAAM,KAAAhtE,CAAA,CAAY,GAC1Bq1K,EAAUC,CAAO,CACtB,CACD,CACH,CChCO,SAASC,GAAsBtkK,EAA4C,CAChF,IAAIiU,EAAeC,EACnB,OAAGlU,aAAiB,kBAClBiU,EAAQjU,EAAM,WACdkU,EAASlU,EAAM,cAEfiU,EAAQjU,EAAM,aACdkU,EAASlU,EAAM,eAGVmkK,GAAkB,CACvB,MAAAnkK,EACA,UAAWiN,GAAcgH,EAAOC,CAAM,EACtC,QAASjH,GAAc,IAAK,GAAG,EAC/B,QAAS,GACV,CACH,CAEO,SAASs3J,GAAsB9jH,EAAmE,CACvG,OAAO,IAAI,QAAQ,CAACnuC,EAASwkB,IAAW,CACtC2pB,EAAM,SAAW,IAAM,CACrBA,EAAM,SAAW,IAAM,CACC6jH,GAAA7jH,CAAK,EAAE,KAAKnuC,CAAO,EAEzCmuC,EAAM,SAAW,QAGnBR,GAAeQ,EAAO,CAAC,GAGzBA,EAAM,QAAU3pB,EAChBmpB,GAAeQ,EAAO,KAAK,IAAIA,EAAM,SAAU,CAAC,CAAC,EAClD,CACH,CC1CA,SAAwB+jH,GAAelwJ,EAAyB,CAC9D,MAAMmwJ,EAAMnwJ,EAAM,IAElB,OAAO,MAAMmwJ,CAAG,EACf,KAAM5xI,GAAaA,EAAS,YAAa,GACzC,KAAM6xI,GAAgB,CACf,MAAA3zK,EAAI,IAAI,WAAW2zK,CAAW,EAGpC,IAAI7zK,EAAW,EACP,QAAAS,EAAI,EAAGlE,EAAS2D,EAAE,OAAQO,EAAIlE,EAAQ,EAAEkE,EAE9C,GAAGP,EAAEO,CAAC,GAAK,IACVP,EAAEO,EAAI,CAAC,GAAK,KACZP,EAAEO,EAAI,CAAC,GAAK,GACZP,EAAEO,EAAI,CAAC,GAAK,EAAM,CAEX,MAAAyZ,EAASha,EAAEO,EAAI,CAAC,GAAK,EAAMP,EAAEO,EAAI,CAAC,EAAI,IAIhCT,GAAAka,EAAQ,EAAI,GAAKA,CAC/B,CAGF,OAAOla,EAAW,IACnB,CACH,CC9BwB,SAAA8zK,GAA4Cn1J,EAAQgjB,EAAoB,CAE9F,MAAM/0B,EAAQ,CAAC,SAAU,GAAM,aAAc,EAAI,EAC3CpM,EAA0C,GAC1CmhC,EAAA,QAASxK,GAAS,CAClBxY,EAAI,eAAewY,CAAI,IACzB32B,EAAI22B,CAAI,EAAIvqB,EACd,CACD,EACM,wBAAiB+R,EAAKne,CAAG,CAElC,CCVA,MAAMuzK,OAAuD,IAAI,CAC/D,aACA,YACA,WACF,CAAC,ECMuB,SAAAC,GACtBC,EACAn3K,EACA,CACM,MAAAmL,EAAaC,GAAc+rK,EAAM,OAAO,EACxCC,EAAcD,EAAM,UAAY,GAChC9rK,EAAgBC,GAAc8rK,EAAajsK,CAAU,EAEpD,OAAAynK,GAAcuE,EAAM,QAAS,CAAC,GAAGn3K,EAAS,SAAUqL,EAAc,CAC3E,2DCNe,SAASgsK,GAAevnK,EAEpC,CACD,KAAM,CAAC2E,EAAS6iK,CAAU,EAAIvoK,GAAY,EACpCwoK,EAAcnrK,EAAyB+D,GAASsE,EAAS,GAAItE,CAAI,EACjE,CAAC27J,CAAgB,EAAIv8F,GAAe,SACjCrvE,EAAUG,SAASigK,oBAAoBkX,oBAAmB,CAClE,EAEDrqK,UAAa,SAAW,CACtB,MAAMgoK,EAASrlK,EAAMqlK,SACrB,GAAG,CAACA,GAAU,CAACrJ,IAAoB,CACjCwL,IACA,MACF,CAEA,MAAM90F,EAAkBspF,EAAgB,EAAGtkJ,KAAMg7D,GAAoBA,EAAgBzgD,KAAOozI,CAAM,EAElG,IAAI9xH,EACJ,MAAM5uC,GAAO,WAAA0N,EAAAC,KAAAqN,EAAsC4zB,EAAG,cAAA5zB,GAAAC,cAAAD,EAAAtN,CAAA,EAAHkhC,EAAGlhC,QAGhDvgB,EADmB8N,KACWgU,MAC9BvhB,EAA+B,GACrCG,GAAY,CACVJ,IAAK,MAAMhC,EAAUG,SAASo3K,eAAeC,OAAOl1F,EAAgBm1F,cAAc,EAClFltJ,IAAK44B,EACLzhD,aACAO,eACAmkB,MAAO,GACPC,OAAQ,EACV,CAAC,EAED,MAAM7B,QAAQya,IAAIh9B,CAAY,EAE3BP,EAAU,GACX01K,EAAW7iK,CAAO,EAGpBkuE,GAAkB,CAChB7iE,MAAO,GACP8iE,SAAUuyF,EACV1gK,QAAS4uC,EACTzhD,YACF,CAAC,CACH,CAAC,GAED,WAAA6gB,EAAAC,KAAAG,SAAAJ,EAAAO,EAEKkoD,GAAQ,CAAC5mD,KAAI,iBAAAyK,UAAA,QACXwoJ,EAAW,CAAE,KAAAl1J,GAAAiN,OAAA7M,EAFNjI,GAAW,4BAA6B/F,EAAS,GAAI,YAAY,CAAC,GAAAgO,CAAA,IAMlF,CCjDO,SAASm1J,GAAgB53K,EAM7B,CACD,MAAMqoC,EAAa,IAAIhH,GAAW,CAChCw2I,UAAW,UACXllJ,MAAO3yB,EAAQ2yB,MACf2c,YAAatvC,EAAQsvC,YACrBnvC,UAAW,GACX23K,eAAgB,EAClB,CAAC,EAEDzvI,EAAWtmC,UAAUokB,UAAUS,IAAI,uBAAuB,EAE1D,MAAMmxJ,EAAOv1J,KACbu1J,EAAK5xJ,UAAUS,IAAI,sBAAsB,EACzCyhB,EAAWtmC,UAAU+zC,OAAOiiI,CAAI,EAEhC,MAAMpqH,EAAUA,IAAM,CAEpB,IAAImW,GADU,IAAK,CAACz7B,EAAWnxB,OACVkP,QAAQ,UAAW,EAAE,EACvC,CAAC09C,EAAW9jE,EAAQu8C,MACrBunB,EAAW,GAAK9jE,EAAQu8C,KAE1BlU,EAAW81E,iBAAiBr6C,CAAQ,EACpC9jE,EAAQ0tE,UAAU,CAAC5J,CAAQ,GAG7Bz7B,SAAWzV,MAAM7O,iBAAiB,QAAS4pC,CAAO,EAClD3tD,EAAQ4B,WAAW6qB,UAAU,IAAM,CACjC4b,EAAWzV,MAAM4tI,oBAAoB,QAAS7yG,CAAO,CACvD,CAAC,EAEMtlB,CACT,CAEe,MAAM2vI,WAAsBjoJ,EAAa,CAGtD2hF,YAAYumE,EAAyCC,EAAsB,CAuBzE,GAtBA,MAAM,kBAAmB,CACvBpmE,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACNvvF,MAAO,kBACPyxG,YAAa,mBACbE,OAAQ,GACRimE,kBAAmB,EACrB,CAAC,EAAE,KATgDD,cAWnD,KAAKhmE,OAAO/rF,UAAUS,IAAI,YAAY,EAEtC9J,EAAiB,KAAK62F,WAAY,IAAM,CACtC,MAAMz8F,EAAQkhK,SAAS,KAAK/vI,WAAWnxB,OAAS,GAAG,EAChDA,EAAQ,GACT+gK,EAAO/gK,CAAK,EACZ,KAAKo7B,KAAI,GAETyP,GAAM,KAAK1Z,WAAWtmC,SAAS,CAEnC,EAAG,CAACkzB,eAAgB,KAAKA,cAAc,CAAC,EAErCijJ,EAAa,CACd,MAAM9nJ,EAASqJ,GAAO,8CAA+C,CAAC3yB,KAAM,oBAAoB,CAAC,EACjGgW,EAAiBsT,EAAQ,IAAM,CAC7B6nJ,EAAO,CAAC,EACR,KAAK3lI,KAAI,CACX,EAAG,CAACrd,eAAgB,KAAKA,cAAc,CAAC,EACxC,KAAK0+E,WAAW9mC,MAAMz8C,CAAM,CAC9B,CAEA,KAAKhtB,EAAC,CACR,CAEA,MAAcA,GAAI,CAChB,MAAMs9C,EAAY,MAAM,KAAKrgD,SAAS84G,WAAWC,aAAY,EAC7D,KAAKqK,YAAY,IAAM,CACrB,MAAMp7E,EAAa,KAAKA,WAAauvI,GAAgB,CACnDh2K,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCiP,MAAO,kBACP4pB,IAAKmE,EAAU23H,0BACjB,CAAC,EAED,OAAG,KAAKH,cACN7vI,EAAWnxB,MAAQ,GAAK,KAAKghK,aAG/BtsJ,WAAW,IAAM,CACf,KAAK+wC,KAAI,EACTpvB,GAAgBlF,EAAWzV,KAAK,CACjC,EAAE,CAAC,EAEJ5P,EACGkgC,GAAO,CACNzf,QAAO,wBACPwf,aAAW,OAAE,CACX3N,GAAe,IAAM,CACnBvlB,GAAainF,YAAY2R,EAAU,CACpC,EAAC,CACH,EACD5kE,SAAQ,GACRR,YAAW,OAAAx0B,UAAA,QAEVsZ,EAAWtmC,SAAS,GAG3B,CAAC,CACH,CACF,CC7DA,IAAIu2K,GAEJ,MAAMC,GAAY,IAEX,SAASC,IAA0B,CACjC,OAAAF,EACT,CAEA,MAAqBG,WAAsB1oJ,EAAa,CAmBtD,YACUsX,EACAqxI,EACRC,EACQC,EACR,CACA,MAAM,mCAAoC,CACxC,SAAU,GACV,YAAa,aACb,8BAA+B,GAC/B,KAAM,GACN,MAAO,GACP,WAAY,GACb,EAZO,UAAAvxI,EACA,WAAAqxI,EAEA,sBAAAE,EAmUV,KAAQ,SAAW,IAAM,CACjB,MAAC,MAAAhmJ,CAAK,EAAI,KAAK,kBACrB,KAAK,WAAW,qBACbA,EAAM,UAAY,GAAKA,EAAM,aAAe,KAC7C,KAAK,WAAW,UAAU,UAAU,OAAO,iBAAiB,CAC9D,EAkNM,eAAapmB,GAAqB,CACxC,MAAM+Y,EAAS/Y,EAAE,OACX,CAAC,MAAAomB,CAAK,EAAI,KAAK,kBACrB,GAAGrN,IAAWqN,EAAO,CACnB,GAAGrN,EAAO,UAAY,SAAWA,EAAO,kBACtC,OAGFqN,EAAM,MAAM,EACZ2a,GAAgB3a,CAAK,CACvB,GAoVM,gBAAcimJ,GAAe,CACnC,MAAMC,EAAa,KAAK,WAClBC,EAAiB,KAAK,eAAeF,EAAK,IAAI,EAE9CG,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,YAAY,EAElC,MAAM1rH,EAAyB,CAC7B,KAAAurH,CAAA,EAIF7B,GAA6B1pH,EAAQ,CAAC,aAAc,mBAAoB,UAAW,cAAc,CAAC,EAElGA,EAAO,iBAAmB,KAAK,iBAAiB,MAAM,SACtDA,EAAO,QAAU0rH,EAEX,MAAAptK,EAAUmtK,EAAiB,KAAK,YAAYzrH,CAAM,EAAI,KAAK,eAAeA,CAAM,EAC3E,OAAAwrH,EAAA,gBAAgB,KAAKxrH,CAAM,EAC/B1hD,EAAQ,MAAOwF,GAAQ,CAC5B4nK,EAAQ,MAAM,gBAAkB,OACxB,cAAM,uBAAwB5nK,CAAG,EAC1C,GAn4BD,KAAK,eAAiB,YACtB,KAAK,UAAUunK,CAAc,CAC/B,CAEA,aAAoB,QAAQ,CAAC,OAAA14K,EAAQ,YAAAg5K,EAAa,SAAA34K,GAAwE,CACxH,MAAMyyD,EAAwB,CAC5B,cACA,cACA,YACA,cACA,aAGImmH,EAAkBnmH,EAAQ,IAAKvpD,GAC5BvJ,EAAO,UAAU,GAAK,CAACg5K,EAAc/4K,EAAU,SAAS,gBAAgB,UAAUD,EAAO,WAAYuJ,EAAQ,OAAWlJ,EAAW,GAAO,MAAS,EAAI,EAC/J,EAEKoD,EAA0C,GAE1C85B,EAAU,MAAM,QAAQ,IAAI07I,CAAe,EACzC,OAAAnmH,EAAA,QAAQ,CAACvpD,EAAQjG,IAAQ,CAC3BG,EAAA8F,CAAM,EAAIg0B,EAAQj6B,CAAG,EAC1B,EAEMG,CACT,CAEA,MAAc,UAAUi1K,EAAqD,CAC3E,KAAK,WAAa,CAChB,KAAMA,EACN,gBAAiB,CAAC,EAClB,MAAO,IAGT,MAAMQ,EAAmB,MAAM,KAAK,SAAS,WAAW,SAAS,SAAS,EAC1E,KAAK,iBAAmBA,EAElB,MAAAC,EAAU,MAAMX,GAAc,QAAQ,CAC1C,GAAG,KAAK,KAAK,wBAAwB,EACrC,YAAa,GACd,EAEKY,EAAgBD,EAAQ,YACxBE,EAAgBF,EAAQ,YACxBG,EAAcH,EAAQ,UAE5Bt8J,EAAiB,KAAK,WAAY,UAAY,MAAM+pB,GAAM,CAAC,EAAG,KAAK,QAAS,CAAC,eAAgB,KAAK,cAAe,GAEjH,MAAM42B,EAAUxB,GAAiB,CAC/B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,YACN,KAAM,MACN,QAAS,IAAM,CACb,KAAK,KAAK,MAAM,cAAc,GAAO,GAAO,EAAK,CACnD,EACA,OAAQ,IAAM,IACb,CACD,KAAM,QACN,KAAM,uBACN,QAAS,IAAM,KAAK,WAAW,OAAO,EACtC,OAAQ,IAAM,CAKT,GAJA,CAAC,KAAK,eAAiB,KAAK,WAAW,OAAS,YAIhD,CAACo9G,GAAiB,CAACC,EACb,SAGN,IAACD,GAAiB,CAACC,EAAe,CAC7B,MAAAE,EAAYH,EAAgBI,GAA6BC,GACzD,CAAC,MAAArnK,EAAO,MAAAqmK,CAAA,EAAS,KAAK,UAAUc,CAAS,EAC/C,GAAGd,EAAM,OACA,QAEX,CAEO,QACT,GACC,CACD,KAAM,WACN,KAAM,aACN,QAAS,IAAM,KAAK,WAAW,UAAU,EACzC,OAAQ,IAAM,KAAK,MAAM,SAAW,GAAK,KAAK,WAAW,OAAS,YAAca,CAAA,EAC/E,CACD,KAAM,WACN,KAAM,cACN,QAAS,IAAM,KAAK,WAAW,UAAU,EACzC,OAAQ,IAAM,KAAK,MAAM,OAAS,GAAK,KAAK,WAAW,OAAS,YAAcA,CAAA,EAC7E,CACD,KAAM,aACN,KAAM,0BACN,QAAS,IAAM,KAAK,YAAY,EAAI,EACpC,OAAQ,IAAM,CAAC,KAAK,WAAW,OAAS,KAAK,kBAAkB,GAC9D,CACD,KAAM,gBACN,KAAM,4BACN,QAAS,IAAM,KAAK,YAAY,EAAK,EACrC,OAAQ,IAAM,KAAK,WAAW,OAAS,KAAK,kBAAkB,GAC7D,CACD,KAAM,eACN,KAAM,qBACN,QAAS,IAAM,KAAK,eAAe,EAAI,EACvC,OAAQ,IAAM,KAAK,kBAAkB,GAAM,EAAI,GAC9C,CACD,KAAM,eACN,KAAM,8BACN,QAAS,IAAM,KAAK,eAAe,EAAI,EACvC,OAAQ,IAAM,KAAK,kBAAkB,GAAM,EAAK,GAC/C,CACD,KAAM,kBACN,KAAM,sBACN,QAAS,IAAM,KAAK,eAAe,EAAK,EACxC,OAAQ,IAAM,KAAK,kBAAkB,GAAO,EAAI,GAC/C,CACD,KAAM,kBACN,KAAM,8BACN,QAAS,IAAM,KAAK,eAAe,EAAK,EACxC,OAAQ,IAAM,KAAK,kBAAkB,GAAO,EAAK,GAChD,CACD,KAAM,YACN,KAAM,eACN,QAAS,IAAM,KAAK,YAAY,EAAI,EACpC,OAAQ,IAAM,KAAK,eAAoB,IAAC,KAAK,WAAW,aACvD,CACD,KAAM,cACN,KAAM,eACN,QAAS,IAAM,KAAK,YAAY,EAAK,EACrC,OAAQ,IAAM,KAAK,kBAAoB,CAAC,CAAC,KAAK,WAAW,aACxD,CACD,KAAM,cACN,KAAM,sBACN,QAAS,IAAM,CACAxpJ,GAAA,YAAYioJ,GAAgB9gK,GAAU,CACjD,KAAK,aAAaA,CAAK,GACtB,KAAK,WAAW,KAAK,CAC1B,EACA,OAAQ,IAAM,CAAC,CAAC,KAAK,WAAW,OAAS,KAAK,iBAAiB,GAC9D,CACD,KAAM,cACN,KAAM,iBACN,QAAS,IAAM,CACA6Y,GAAA,YAAYioJ,GAAgB9gK,GAAU,CACjD,KAAK,aAAaA,CAAK,EACxB,CACH,EACA,OAAQ,IAAM,CAAC,KAAK,WAAW,OAAS,KAAK,iBAAiB,EAC/D,EACF,EAEI,YAAO,OAAOumD,CAAO,EAE1B,KAAK,WAAW,SAEX,oBAAiB,SAAS,cAAc,KAAK,EAC7C,oBAAe,UAAU,IAAI,aAAa,EAC/C,KAAK,WAAW,UAAU,OAAO,KAAK,cAAc,EAE9C,MAAAk8G,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAuB,EAE9C,QAAI,SAAS,cAAc,KAAK,EAoBtC,GAnBE,YAAU,IAAI,qBAAsB,yBAAyB,EAE1D,uBAAoB,IAAIlqH,GAAmB,CAC9C,YAAa,mCACb,KAAM,UACN,eAAgB,GAChB,UAAW,KAAK,iBACjB,EAED,KAAK,kBAAkB,MAAM,QAAQ,eAAiB,KAAK,eACtD,oBAAe,IAAI,KAAK,WAAW,SAAS,EAAE,SAAU,KAAK,QAAQ,EACrE,oBAAe,IAAI,KAAK,kBAAkB,KAAK,EAAE,SAAU,KAAK,QAAQ,EAE7E,KAAK,kBAAkB,MAAM,UAAU,QAAQ,oBAAqB,qBAAqB,EACzF,KAAK,kBAAkB,UAAU,UAAU,QAAQ,oBAAqB,qBAAqB,EAE3F,SAAO,KAAK,kBAAkB,MAAO,KAAK,kBAAkB,YAAa,KAAK,kBAAkB,SAAS,EAC5FkqH,EAAA,OAAO,EAAG,KAAK,UAAU,EAErC,CAAC,KAAK,kBAAoB,CAAC,KAAK,KAAK,MAAM,YAC5C,KAAK,SAAW,KAAK,KAAK,MAAM,uBAAuB,EACpD,KAAK,UAAU,CACV,MAAAC,EAAe1C,GAAU,KAAK,SAAU,CAC5C,kBAAmB,KAAK,KAAK,OAC7B,eAAgB,KAAK,eACtB,EAEI,uBAAkB,iBAAiB0C,CAAY,EAC/C,UAAK,MAAM,kBAAkB,MAAQ,EAC5C,CAGG,eAAU,OAAOD,CAAc,EAEpC,KAAK,YAAY,EAEZ,sBAAiB,QAAS,IAAM,CACnC,KAAK,MAAM,OAAS,EACf,gBAAW,gBAAgB,OAAS,EAEtCrB,KAAiB,OACHA,GAAA,OACjB,CACD,EAED,IAAI/yJ,EAAqBs0J,EAAkB5vK,EACzBytB,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,eACN,KAAM,qBACN,QAAS,IAAM,CACb,KAAK,kBAAkBztB,CAAI,CAC7B,EACA,OAAQ,IAAM4vK,GAAW,CAAC5vK,EAAK,cAAgB,CAAC,KAAK,WAAW,OAC/D,CACD,KAAM,kBACN,KAAM,sBACN,QAAS,IAAM,CACb,KAAK,mBAAmBA,CAAI,CAC9B,EACA,OAAQ,IAAM,CAAC,EAAE4vK,GAAW5vK,EAAK,eAAiB,CAAC,KAAK,WAAW,MACpE,EACD,SAAU,KAAK,eACf,eAAgB,KAAK,eACrB,YAAcuC,IACH+Y,EAAAC,EAAgBhZ,EAAE,OAAQ,YAAY,EACrCqtK,EAAAt0J,EAAO,UAAU,SAAS,kBAAkB,EAC/Ctb,EAAA,KAAK,WAAW,gBAAgB,KAAMtG,GAAMA,EAAE,UAAY4hB,CAAM,EAChEA,EACT,CACD,EAEE,KAAK,KAAK,OAAS03D,GAAS,YAC7BjwE,GAAY2B,GAAY,CACjB,UAAK,wBAAwB,UAAUA,CAAO,EACnD,KAAM,CAACwmK,EAAQ2E,CAAS,EAAI/qK,GAAoB,KAAK,UAAU,MAAM,EACrE,KAAK,OAASomK,EACd,KAAK,UAAY2E,EACZ,gBAAW,OAAOzC,GAAe,CAAC,OAAQ,KAAK,MAAO,EAAgB,EAC5E,EAEgB,IAAI3B,GAAgB,CACnC,cAAe,IAAM,CACd,UAAK,MAAM,WAAa,GAC7B,KAAK,KAAK,CACZ,EACA,gBAAiB,IAAM,CAChB,UAAK,MAAM,gBAAgB,IAAM,CACpC,KAAK,KAAK,EACX,CACH,EACA,sBAAuB,IAAM,CAC3B,KAAK,KAAK,MAAM,qBAAqBv1E,GAA4B,IAAM,CACrE,KAAK,KAAK,EACX,CACH,EACA,SAAU,WACV,iBAAkB,KAAK,WACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,kBAAmB,KAAK,KAAK,MAAM,kBACnC,MAAQ1rF,GAAY,CACb,eAAU,OAAOA,CAAO,CAC/B,EACA,YAAa,IAAM,KAAK,KAAK,OAAO,UAAY,KAAK,KAAK,SAAWvU,EAAU,KAC/E,OAAQ,KAAK,OACb,SAAU,KAAK,UAChB,EAEQ,UAAU,KAAK,KAAK,MAAM,GAGtBo4K,GAAA,IACjB,CAEA,MAAc,kBAAmB,CACxB,aAAM,KAAK,SAAS,gBAAgB,YAAY,KAAK,KAAK,MAAM,GACrE,CAAC,EAAE,MAAM,KAAK,SAAS,kBAAkB,eAAe,KAAK,KAAK,OAAO,SAAU,IAAG,OAAO,kBACjG,CAEO,mBAAoB,CAClB,YAAK,WAAW,OACrB,KAAK,WAAW,OAAS,SACzB,KAAK,WAAW,gBAAgB,QAAU,EAC9C,CAEO,aAAavjE,EAAe,CACjC,KAAK,WAAW,MAAQA,EACnB,oBAAe,CAAC,CAACA,CAAK,EAC3B,KAAK,sBAAsB,CAC7B,CAEQ,uBAAwB,CACxB,MAAC,MAAAA,CAAK,EAAI,KAAK,WACrB,KAAK,eAAe,iBAAiB,yDAAyD,EAAE,QAAStgG,GAAY,CACnH,MAAMyH,EAAY,qBAGf,GAFHzH,EAAQ,cAAc,IAAIyH,CAAS,EAAE,GAAG,SAErC,CAAC,KAAK,oBACP,OAGI,MAAA0tH,EAAU,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI1tH,CAAS,EACvB0tH,EAAA,OAAOplI,EAAK,mBAAoB,CAACmB,GAA2BovG,EAAO/uG,EAAc,CAAC,CAAC,CAAC,EAC5FyO,EAAQ,OAAOm1H,CAAO,EACvB,CACH,CAUA,MAAc,kBAAkB3/H,EAAsB0lD,EAAuB,CACrE,MAAA/tD,EAAaqI,EAAK,iBAAiB,IAAI,EACvC,CAAC,MAAO8vK,EAAU,OAAQC,CAAS,EAAI/vK,EAAK,QAAQ,MAE1D,IAAIqc,EAAeC,EACnB,GAAGtc,EAAK,QAAQ,UAAU,SAAS,YAAY,EAAG,CAC1C,MAAC,MAAOgwK,EAAmB,OAAQC,CAAsB,EAAAjwK,EAAK,QAAQ,cAAc,MACpFk+D,EAAiB,SAAS8xG,CAAiB,EAC3CphF,EAAkB,SAASqhF,CAAkB,EAEnD5zJ,EAAQ,CAACyzJ,EAAS,MAAM,EAAG,EAAE,EAAI,IAAM5xG,EACvC5hD,EAAS,CAACyzJ,EAAU,MAAM,EAAG,EAAE,EAAI,IAAMnhF,CAAA,MAEzCvyE,EAAQ,SAASyzJ,CAAQ,EACzBxzJ,EAAS,SAASyzJ,CAAS,EAG7B,KAAM,CAAC,IAAAtwK,GAAO,MAAM8sK,GAAkB,CACpC,MAAOvsK,EAAK,QAAQ,kBACpB,QAASqV,GAAc,GAAI,EAAE,EAC7B,UAAWA,GAAcgH,EAAOC,CAAM,EACtC,UAAW,GACX,QAAS,GACV,EAEK4zJ,EAAgBC,GAAuB1wK,CAAG,EAC1CsV,EAAyC,CAC7C,EAAG,oBACH,MAAOm7J,EACP,KAAM,KAGRlwK,EAAK,cAAgBkwK,EAErB,MAAMv8J,EAAqB,CACzB,EAAG,QACH,MAAO,CACLoB,CACF,EACA,GAAI,EACJ,YAAa,EACb,KAAM,EACN,MAAO,EACP,eAAgB,CAAC,EACjB,OAAQ,CAAC,GAGLi5E,EAAe,MAAMM,GAAiB,CAC1C,WAAA32F,EACA,MAAA0kB,EACA,OAAAC,EACA,eAAgB,KAAK,eACrB,MAAO3I,CAAA,CACR,EAEGhc,MAIA+tD,GACWsoC,EAAA,UAAU,IAAI,cAAc,EAG3ChuF,EAAK,aAAeguF,EACfhuF,EAAA,QAAQ,OAAOguF,CAAY,EAEhC,MAAMr8D,GAAU,EACZh6B,KAIeo2F,GAAA,CACjB,aAAAC,EACA,OAAQ,GACT,EACH,CAEQ,mBAAmBhuF,EAAsB,CAC5B+tF,GAAA,CACjB,aAAc/tF,EAAK,aACnB,OAAQ,GACR,aAAc,GACf,EAEDA,EAAK,aAAe,MACtB,CAEO,YAAYwK,EAAsB,CAClC,UAAK,OAAOA,CAAO,CAC1B,CAEQ,UAAU+kK,EAAY39E,GAA4B,CACxD,MAAMxpF,EAA0B,GAAIqmK,EAA0B,GAAIx/G,EAA0B,GAC5F,YAAK,WAAW,gBAAgB,QAAS91D,GAAM,CAC1Co2K,EAAU,IAAIp2K,EAAE,KAAK,IAAI,EAC1BiP,EAAM,KAAKjP,CAAC,EACJ6zK,GAA2B,IAAI7zK,EAAE,KAAK,IAAW,EACzD81D,EAAM,KAAK91D,CAAC,EAEZs1K,EAAM,KAAKt1K,CAAC,CACd,CACD,EAEM,CACL,MAAAiP,EACA,MAAAqmK,EACA,MAAAx/G,CAAA,CAEJ,CAEQ,YAAa,CACZ,YAAK,YAAY,MAAM,MAChC,CAEQ,aAAc,CACb,YAAK,WAAe,GAC7B,CAEQ,eAAgB,CACtB,IAAI95B,EAAQ,EACZ,YAAK,QAAQ,IAAM,CACf,EAAAA,CAAA,CACH,EAEMA,CACT,CAEQ,mBAAoB,CAC1B,KAAM,CAAC,MAAA/sB,EAAO,MAAAqmK,EAAO,MAAAx/G,CAAK,EAAI,KAAK,YACnC,OAAO7mD,EAAM,OAAS,GAAKqmK,EAAM,OAAS,GAAKx/G,EAAM,OAAS,CAChE,CAEQ,kBAAkBt/B,EAAiBqkD,EAAiB,CAC1D,GAAG,KAAK,kBAAkB,EAAU,SAEpC,IAAIl0E,EAAO,KAAK,WAAW,OAAS,SAAW,KAAK,cAKpD,GAJGk0E,GAAUl0E,IACJA,EAAA,KAAK,MAAM,SAAW,GAG5BA,EAAM,CACP,MAAMsI,EAAQ,KAAK,WAAW,gBAC7B,OAAQjP,GAAMy4F,GAA2B,IAAIz4F,EAAE,KAAK,IAAI,CAAC,EACpDi3K,EAAoBhoK,EAAM,OAAQjP,GAAMA,EAAE,YAAY,EAErD2G,EAAAk0E,EAAS,GAAO5rE,EAAM,OAAS,EAEnCtI,IACDA,EAAO6vB,EAASvnB,EAAM,SAAWgoK,EAAkB,OAAShoK,EAAM,SAAWgoK,EAAkB,OAEnG,CAEO,OAAAtwK,CACT,CAEQ,WAAWua,EAA2C,CACzDA,IAAS,YACV,KAAK,YAAY,EAAK,EAGxB,KAAK,WAAW,KAAOA,EACvB,KAAK,YAAY,CACnB,CAEO,YAAY+Q,EAAgB,CACjC,KAAK,WAAW,MAAQA,EACxB,KAAK,YAAY,CACnB,CAEO,eAAeuE,EAAiB,CACrC,KAAK,UAAU,EAAE,MAAM,QAAS3vB,GAAS,CACpC2vB,GAAU,CAAC3vB,EAAK,aACjB,KAAK,kBAAkBA,CAAI,EACnB,CAAC2vB,GAAU3vB,EAAK,cACxB,KAAK,mBAAmBA,CAAI,CAC9B,CACD,CACH,CAEO,gBAAiB,CACtB,MAAO,CAAC,KAAK,kBAAkB,WAAa,KAAK,WAAW,OAAS,OACvE,CAEO,YAAYqwK,EAAgB,CAC5B,gBAAW,YAAcA,GAAS,MACzC,CAEO,SAAS5B,EAAe,CAC7B,MAAM6B,EAAS7B,EAAM,OAAQG,GAKpB,CAJO,KAAK,MAAM,KAAM2B,GACtBA,EAAM,eAAiB3B,EAAK,cAAgB2B,EAAM,OAAS3B,EAAK,MAAQ2B,EAAM,OAAS3B,EAAK,IACpG,CAGF,EAEE0B,EAAO,SACH,WAAM,KAAK,GAAGA,CAAM,EAEtB,KAAK,kBAAkB,GAAK,KAAK,MAAM,OAAS,IACjD,KAAK,eAAe,EAAK,EAG3B,KAAK,YAAY,EAErB,CAeA,MAAc,KAAK5nH,EAAQ,GAAO,CAC5B,IAAC,MAAOlvB,EAAS,SAAA18B,GAAY6oK,GAAsB,KAAK,kBAAkB,MAAO,GAAM,EAAK,EAC7F,GAAAnsI,EAAQ,OAAS,KAAK,iBAAkB,CACzClR,GAAM7xB,GAAK,OAAO,qCAAsC,EAAI,CAAC,EAC7D,MACF,CAOA,GALyB,MAAM,KAAK,KAAK,MAAM,4BAA4B,CACzE,WAAY,KAAK,gBAAkB,EACnC,UAAW,KAAK,WAAW,cAC3B,QAAS,KAAK,WACf,EAEC,OAGI,MAAC,MAAAkyB,CAAK,EAAI,KAAK,KAEfwmJ,EAAU,MAAMX,GAAc,QAAQ,KAAK,KAAK,yBAAyB,EACzEK,EAAa,KAAK,WACbA,EAAA,QAAUA,EAAW,OAAS,SAAW,OAC9C,MAAC,gBAAA2B,EAAiB,QAAAZ,CAAW,EAAAf,EAEnC,IAAI4B,EAAW,GA6Cf,GA5CK,aAASC,GAAmB,CAC/B,GAAGD,EACD,OA4BF,MAAMzkK,EAzBmC0kK,EAAe,IAAKrtH,GAAW,CACtE,MAAM3kD,EAAgE,CACpE,CAACsuK,GAA4B,8BAA+B,aAAa,EACzE,CAAC,IAAM,CAACp7E,GAA2B,IAAIvuC,EAAO,KAAK,IAAI,EAAG,kCAAmC,WAAW,GAGvGusH,GACClxK,EAAA,QACA,CAAC8wK,GAA4B,8BAA+B,aAAa,EACzE,CAAC,IAAMC,GAA2B,IAAIpsH,EAAO,KAAK,IAAW,GAAKA,EAAO,QAAS,4BAA6B,WAAW,EAC1H,CAACosH,GAA4B,8BAA+B,aAAa,GAI7E,MAAMrmK,EAAQ1K,EAAE,KAAK,CAAC,CAAC6pD,CAAM,IACpB,OAAOA,GAAY,WAAaA,IAAWA,EAAO,IAAIlF,EAAO,KAAK,IAAI,CAC9E,EAED,OAAGj6C,EACM+lK,EAAQ/lK,EAAM,CAAC,CAAC,EAAI,OAAYA,EAAM,CAAC,EAGxC,CAACwmK,GAAW,CAACT,EAAQ,WAAa,mCAAsC,OACjF,EAEiB,KAAMz1K,GAAM,OAAOA,GAAO,QAAQ,EACjDsS,IACQwc,GAAA,CACP,YAAaxc,CAAA,CACd,EAEEwG,GAAS,YAAY,YAAY,GAClCslC,GAAM,KAAK,IAAI,GAInB24H,MAAa,CAAC,CAACzkK,EAAA,CAChB,EAEEykK,EACD,OAGF,GAAG,KAAK,KAAK,OAASz9F,GAAS,WAAa,CAACtqB,EAAO,CAC7C,UAAK,MAAM,gBAAgB,IAAM,CACpC,KAAK,KAAK,EAAI,EACf,EAED,MACF,CAEM,MAAC,OAAAlzD,CAAU,EAAAg7K,EACXG,EAAgB,KAAK,KAAK,wBAAwB,EACpD,IAAAzF,EAAS,KAAK,SACb,aAASwF,GAAmB,CAC5Bl3I,GAAWk3I,EAAe,SAAWl7K,IACjC,cAAS,mBAAmB,SAAS,CACxC,GAAGm7K,EACH,KAAMn3I,EACN,SAAA18B,EACA,OAAAouK,CAAA,CAED,EAED1xI,EAAU18B,EAAWouK,EAAS,QAG1B,MAAA0F,EAAoB,KAAK,oBAEzBz3K,EAAuBu3K,EAAe,IAAKrtH,IACxC,CACL,GAAGA,EACH,KAAMA,EAAO,YAAcA,EAAO,KAClC,QAASutH,EAAoB,OAAY,CAAC,CAACvtH,EAAO,cAErD,EAEKkG,EAAI,CACR,GAAGslH,EACH,gBAAiB11K,CAAA,EAGfy3K,GACF,OAAOrnH,EAAE,MAGN,cAAS,mBAAmB,YAAY,CAC3C,GAAGonH,EACH,QAAAn3I,EACA,SAAA18B,EACA,OAAAouK,EACA,QAAA0E,EAEA,GAAGrmH,CAAA,CACJ,EAED/vB,EAAU18B,EAAWouK,EAAS,OAC/B,EAEEyF,EAAc,cACfhoJ,EAAM,eAAe,EAIvB,KAAK,SAAW,OAEhB,KAAK,KAAK,CACZ,CAEQ,0BAA0B6jJ,EAAkC,CAClE,OAAOqE,GAAwB,IAAIrE,CAAQ,EAAI,aAAeA,CAChE,CAEA,MAAc,sBAAsB9vJ,EAAyB8vJ,EAAsBsE,EAA+B,CAE5G,IAAArxK,EAAMid,EAAM,IAAKq0J,EACrB,GACEvE,IAAa,cACZ,KAAK,IAAI9vJ,EAAM,aAAcA,EAAM,aAAa,EAAI,MAAqBo0J,GAAuB,CAACD,GAAwB,IAAIrE,CAAQ,GACtI,CACA,KAAM,CAAC,KAAAroG,GAAQ,MAAMooG,GAAkB,CACrC,MAAO7vJ,EACP,QAASrH,GAAc,KAAkB,IAAgB,EACzD,UAAWA,GAAcqH,EAAM,aAAcA,EAAM,aAAa,EAChE,SAAU,KAAK,0BAA0B8vJ,CAAQ,EAClD,EAEYuE,EAAA5sG,EACb,IAAI,gBAAgB1kE,CAAG,EACvBA,EAAM,MAAMjJ,GAAgB,OAAO,kBAAmB2tE,CAAI,EACpD,MAAAvyD,GAA0B8K,EAAOjd,CAAG,CAC5C,CAEA,OAAOsxK,GAAc,CAAC,IAAAtxK,EAAK,KAAMsxK,CAAU,CAC7C,CAEA,MAAc,YAAY1tH,EAAwB,CAC1C,MAAC,QAAA0rH,CAAW,EAAA1rH,EACV0rH,EAAA,UAAU,IAAI,kBAAkB,EAExC,MAAMH,EAAOvrH,EAAO,KAGpB,GAFgBurH,EAAK,KAAK,WAAW,QAAQ,EAEjC,CACJ,MAAA/lH,EAAQhyC,GAAY,CAAC,WAAYwsC,EAAO,iBAAiB,MAAM,EACrEwF,EAAM,IAAMxF,EAAO,UAAY,MAAM7sD,GAAgB,OAAO,kBAAmBo4K,CAAI,EACnF/lH,EAAM,SAAW,GACjBA,EAAM,SAAW,GACjBA,EAAM,MAAQ,GAERA,EAAA,iBAAiB,aAAc,IAAM,CACzCA,EAAM,MAAM,GACX,CAAC,KAAM,GAAK,EAEfkmH,EAAQ,OAAOlmH,CAAK,EAEhB,IAAA3tB,EACA,IACI,MAAAv5B,EAAUgoD,GAAYd,CAAK,EAC3B,MAAAkQ,GAAgBlQ,EAAOlnD,CAAO,QAC9BwF,EAAK,CACH+zB,EAAA/zB,CACV,CAMA,GAJAk8C,EAAO,MAAQwF,EAAM,WACrBxF,EAAO,OAASwF,EAAM,YACtBxF,EAAO,SAAW,KAAK,MAAMwF,EAAM,QAAQ,EAExC3tB,EACK,MAAAA,EAGR,MAAM81I,EAAyBnoH,EAAc,4BAC1CmoH,IAA0B,SAC3B3tH,EAAO,QAAU,CAAC2tH,GAGd,MAAA38J,EAAQ,MAAMs4J,GAAsB9jH,CAAK,EAC/CxF,EAAO,MAAQ,CACb,IAAK,MAAM7sD,GAAgB,OAAO,kBAAmB6d,EAAM,IAAI,EAC/D,GAAGA,CAAA,CACL,KACK,CACC,MAAA4tC,EAAM,IAAI,MAChB8sH,EAAQ,OAAO9sH,CAAG,EAClB,MAAMxiD,EAAM4jD,EAAO,UAAY,MAAM7sD,GAAgB,OAAO,kBAAmBo4K,CAAI,EAE7E,MAAAh9J,GAA0BqwC,EAAKxiD,CAAG,EAClC,MAAA+sK,EAAWnpH,EAAO,KAAK,KACvB4tH,EAAS,MAAM,KAAK,sBAAsBhvH,EAAKuqH,EAAU,EAAI,EAShE,GARAyE,IACD5tH,EAAO,UAAY4tH,EAAO,IAC1B5tH,EAAO,WAAa4tH,EAAO,MAG7B5tH,EAAO,MAAQpB,EAAI,aACnBoB,EAAO,OAASpB,EAAI,cAEjB2sH,EAAK,OAAS,YACf,OAAAvrH,EAAO,QAAU,GAEV,QAAQ,IAAI,CACjBupH,GAAe3qH,CAAG,EAAE,KAAMhpD,GAAa,CAC9BoqD,EAAA,SAAW,KAAK,KAAKpqD,CAAQ,EACrC,EAEDyzK,GAAsBzqH,CAAG,EAAE,KAAK,MAAM5tC,GAAU,CAC9CgvC,EAAO,MAAQ,CACb,IAAK,MAAM7sD,GAAgB,OAAO,kBAAmB6d,EAAM,IAAI,EAC/D,GAAGA,CAAA,CACL,CACD,EACF,EAAE,KAAK,IAAM,EAAE,CAEpB,CACF,CAEA,MAAc,eAAegvC,EAAkE,CACvF,MAAC,QAAA0rH,CAAW,EAAA1rH,EACV0rH,EAAA,UAAU,IAAI,qBAAqB,EAC3C,MAAMH,EAAOvrH,EAAO,KAEdyrC,EAAU8/E,EAAK,KAAK,WAAW,QAAQ,EACvCsC,EAAUlE,GAA2B,IAAI4B,EAAK,IAAW,GAC5D9/E,GAAWoiF,GAAWtC,EAAK,KAAO,OACnCvrH,EAAO,YAAPA,EAAO,UAAc,MAAM7sD,GAAgB,OAAO,kBAAmBo4K,CAAI,IAG3E,MAAMt5B,EAAkC,GAEpC,IAAArzF,EACD,GAAA6sC,GAAWzrC,EAAO,UAAW,CAC9BpB,EAAM,IAAI,MACJ,MAAArwC,GAA0BqwC,EAAKoB,EAAO,SAAS,EACrD,MAAM4tH,EAAS,MAAM,KAAK,sBAAsBhvH,EAAKoB,EAAO,KAAK,IAAkB,EAChF4tH,IACD5tH,EAAO,UAAY4tH,EAAO,IAE9B,CAEG,GAAAC,GAAW7tH,EAAO,UACf,IAEI,MAAA4L,EAAQ,IAAI,MAClBA,EAAM,IAAM5L,EAAO,UACnB4L,EAAM,MAAQ,GACdA,EAAM,SAAW,GACjB,MAAMtF,GAAYsF,CAAK,EACvB5L,EAAO,SAAW4L,EAAM,SACxBqmF,EAAW,KAAK,CACd,EAAG,yBACH,SAAUjyF,EAAO,SACjB,OAAQ,CAAC,EACV,QACKl8C,EAAK,CACH,cAAM,sBAAuBA,CAAG,CAC1C,CAGF,MAAMlP,EAAkB,CACtB,EAAG,WACH,KAAA22K,EACA,UAAWA,EAAK,MAAQ,GACxB,KAAMA,EAAK,KACX,KAAMsC,EAAU,QAAWpiF,EAAU,QAAU,OAC/C,YAAa,EACb,WAAAwmD,EACA,KAAM,EACN,MAAO,EACP,eAAgB,CAAC,EACjB,GAAI,EACJ,OAAQ,CAAC,EACT,SAAUjyF,EAAO,UAGf,IAAAzvC,EACDyvC,EAAO,YACOzvC,EAAA,CACb,IAAKyvC,EAAO,UACZ,WAAYurH,EAAK,KACjB,KAAM36J,EAAA,GAIJ,MAAAq8E,EAAS,MAAMT,GAAa,CAChC,QAAS,CACP,EAAG,UACH,OAAQ,CACN,YAAa,EACf,EACA,IAAK,EACL,OAAQ,EACR,MAAO,CACL,EAAG,uBACH,SAAU53F,CACZ,CACF,EACA,aAAA2b,CAAA,CACD,EAEEk7E,IACDzrC,EAAO,MAAQpB,EAAI,aACnBoB,EAAO,OAASpB,EAAI,eAGtB8sH,EAAQ,OAAOz+E,CAAM,CACvB,CA2BQ,eAAek8E,EAAkB,CACvC,OAAO,KAAK,WAAW,OAAS,SAAW56E,GAA2B,IAAI46E,CAAQ,CACpF,CAEQ,UAAW,CAEd,KAAK,QAAQ,UAAU,SAAS,QAAQ,IAI3C,KAAK,eAAe,IAAI,SAAS,IAAI,EAAE,UAAW,KAAK,SAAS,EAC3CvjH,GAAA,wBAAwB,KAAK,cAAc,EAC3D,sBAAiB,QAAS,IAAM,CACnCA,GAAqB,wBAAwB,EAE1C,CAAC,KAAK,kBAAoB,KAAK,UAChC,KAAK,KAAK,MAAM,SAAS,KAAK,SAAU,GAAO,EAAI,CACrD,CACD,EACD,KAAK,KAAK,EACZ,CAEQ,UAAW,CACjB,KAAM,CAAC,WAAA4lH,EAAY,MAAAv4K,EAAO,MAAAm4K,CAAA,EAAS,KAC/B,IAAAziK,EACJ,MAAMnE,EAA2B,GAC9B,GAAAgnK,EAAW,OAAS,WACf7iK,EAAA,yBACDnE,EAAA,KAAK4mK,EAAM,MAAM,MACjB,CACL,IAAI0C,EAAc,EAAGC,EAAc,EAAGC,EAAa,EAC7C5C,EAAA,QAASG,GAAS,CACnBA,EAAK,KAAK,WAAW,QAAQ,EAAK,EAAAuC,EAC7BvC,EAAK,KAAK,WAAW,QAAQ,EAAK,EAAAwC,EACnC,EAAAC,CAAA,CACR,EAEE,CAACF,EAAaC,EAAaC,CAAU,EAAE,OAAQl2K,GAAMA,EAAI,CAAC,EAAE,OAAS,GAChE6Q,EAAA,yBACDnE,EAAA,KAAK4mK,EAAM,MAAM,GACd0C,GACFnlK,EAAA,0BACNnE,EAAK,KAAKspK,CAAW,GACbC,IACFplK,EAAA,0BACNnE,EAAK,KAAKupK,CAAW,EAEzB,CAEA/jK,GAAe/W,EAAOiE,EAAKyR,EAAKnE,CAAI,CAAC,CACvC,CAEQ,uBAAuBw7C,EAAwB,CACrD,GAAG,KAAK,eAAeA,EAAO,KAAK,IAAI,EAAG,CACxC,MAAMlsD,EAAOm6K,GAAejuH,EAAO,MAAOA,EAAO,OAAQirH,GAAW,GAAG,EACvEjrH,EAAO,QAAQ,MAAM,MAAQlsD,EAAK,MAAQ,KAC1CksD,EAAO,QAAQ,MAAM,OAASlsD,EAAK,OAAS,IAC9C,CAEK,oBAAe,OAAOksD,EAAO,OAAO,CAC3C,CAEQ,QAAQ7sB,EAAiD,CACzD,MAAC,gBAAAg6I,CAAe,EAAI,KAAK,WAC5B,IAAC,KAAK,WAAW,MAAO,CACzBA,EAAgB,QAASj4K,GAAMi+B,EAAG,CAACj+B,CAAC,CAAC,CAAC,EACtC,MACF,CAEA,MAAM/C,EAASg7K,EAAgB,OACvB,UAAI,EAAG,EAAIh7K,GAAS,CAC1B,MAAM+7K,EAAYf,EAAgB,CAAC,EAAE,KAAK,KAC1C,IAAI/0K,EAAI,EAAGy1K,EACX,KAAMz1K,EAAI,IAAM,EAAIjG,EAAQ,EAAE,EAAG,EAAEiG,EAAG,CACpC,MAAM4e,EAAOm2J,EAAgB,CAAC,EAAE,KAAK,KAC/BgB,EAAWxE,GAA2B,IAAI3yJ,CAAW,EAExD,GADS62J,MAAAM,GACTA,IAAaN,GAAW,KAAK,eAAeK,CAAS,IAAM,KAAK,eAAel3J,CAAI,EACpF,KAEJ,CAEAmc,EAAGg6I,EAAgB,MAAM,EAAI/0K,EAAG,CAAC,CAAC,CACpC,CACF,CAEQ,aAAc,CACpB,KAAM,CAAC,MAAAgzK,EAAO,WAAAI,EAAY,eAAAv0G,CAAA,EAAkB,KAEtCm3G,EAAqB5C,EAAW,gBAAgB,OAAO,EAAGA,EAAW,gBAAgB,MAAM,EAC9E4C,EAAA,QAASpuH,GAAW,CACrCA,EAAO,iBAAiB,SAAQ,CACjC,EAEK,MAAAhhD,EAAWosK,EAAM,IAAKG,GAAS,KAAK,WAAWA,CAAI,CAAC,EAE1D,QAAQ,IAAIvsK,CAAQ,EAAE,KAAK,IAAM,CAC/Bi4D,EAAe,gBAAgB,EAE3Bm0G,EAAM,SAIV,KAAK,SAAS,EAET,aAAS+B,GAAoB,CAChC,MAAM1B,EAAiB,KAAK,eAAe0B,EAAgB,CAAC,EAAE,KAAK,IAAI,EACpE,GAAA1B,GAAkB0B,EAAgB,OAAS,EAAG,CACzC,MAAAkB,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,mBAAoB,YAAY,EAC9CA,EAAA,OAAO,GAAGlB,EAAgB,IAAKj1K,GAAMA,EAAE,OAAO,CAAC,EAEjD8wF,GAAA,CACX,UAAWqlF,EACX,MAAOlB,EAAgB,IAAKn3K,IAAO,CAAC,EAAGA,EAAE,MAAO,EAAGA,EAAE,MAAQ,IAC7D,SAAUi1K,GACV,SAAU,IACV,QAAS,EACV,EAEDh0G,EAAe,OAAOo3G,CAAc,OAEpBlB,EAAA,QAASntH,GAAW,CAClC,KAAK,uBAAuBA,CAAM,EACnC,EAGCyrH,GAIY0B,EAAA,QAASntH,GAAW,EAChBouH,EAAmB,KAAMp4K,GAAMA,EAAE,OAASgqD,EAAO,IAAI,GACzD,cAAgB,KAAK,sBAC5B,uBAAkBA,EAAQ,EAAI,CACrC,CACD,EACF,EAED,KAAK,sBAAsB,GAC5B,EAAE,KAAK,IAAM,CACZ,KAAK,SAAS,EACd,KAAK,SAAS,EACf,CACH,CACF,CAEC,OAAe,cAAgBmrH,GCxnChC,MAAqBmD,WAA2BrqJ,EAI7C,CAgBD,YAAYvxB,EAMT,CACD,MAAM,EAAK,EAtBb,KAAU,OAAS,GA4CnB,KAAU,UAAY,IAAM,CAC1B,KAAK,SAAS,EAEd,MAAMukC,EAAO,KAAK,KACZ,CAAC,OAAA8wC,EAAQ,OAAA04C,EAAQ,YAAAqqC,CAAA,EAAetB,GAAqB,CACzD,KAAAvyH,EACA,KAAM,KAAK,SACX,SAAU,KAAK,SACf,KAAM,GACN,WAAY,KAAK,WAClB,EAED,KAAK,OAAS8wC,EACd,KAAK,OAAS04C,EACd,KAAK,YAAcqqC,EAChB,CAAC3jI,IAAa,CAAC,KAAK,iBACrB,KAAK,eAAiB,CACpB,KAAM,sBACN,MAAO,IAAM,CACX,KAAK,eAAiB,OACtB,KAAK,OAAO,EAAI,CAClB,EACA,YAAa,IAGS1C,GAAA,SAAS,KAAK,cAAc,GAGjD,sBAAiB,SAAU,IAAM,CACpC,KAAK,YAAc,OACnB,KAAK,OAAS,OACd,KAAK,OAAS,OAEdwS,EAAK,gBAAgB,EACdwpF,IAEJ,KAAK,iBACkBh8F,GAAA,WAAW,KAAK,cAAc,EACtD,KAAK,eAAiB,OACxB,EACC,CAAC,KAAM,GAAK,GA5Df9a,GAAW,KAAMjX,CAAO,EAEnB,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,sBAAuB,WAAW,EAEvDA,EAAA,SAAS,OAAO,KAAK,SAAS,EAEtC,KAAK,iBAAiB,EAEjB,iBAAY,UAAU,IAAI,CACjC,CAEO,qBAAqBwP,EAAkB,CACzCA,EACD,KAAK,SAAS,EAEd,KAAK,SAAS,CAElB,CA6CU,kBAAmB,CACtB,sBAAiB,UAAW,KAAK,SAAS,CACjD,CAEO,OAAO8iC,EAAgBupI,EAAiB,GAAOlY,EAAyB,CAC7E,GAAG,KAAK,KACN,OAOC,GAJArxH,IAAS,SACHA,EAAA,KAAK,UAAU,UAAU,SAAS,YAAY,GAAK,CAAC,KAAK,UAAU,UAAU,SAAS,WAAW,GAGvG,KAAK,SAAWA,EAAM,CACnBA,GACF,KAAK,cAAc,SAAS,EAG9B,MACF,CAEA,KAAK,OAASA,EAEVA,GAIC,KAAK,iBACkBvgB,GAAA,WAAW,KAAK,cAAc,EACtD,KAAK,eAAiB,QAGrB,CAAC8pJ,GAAkB,KAAK,YACzB,KAAK,WAAW,mBAGlB,KAAK,SAAS,IAZd,KAAK,YAAc,KAAK,WAAW,iBAAiB,IAAI,EACxD,KAAK,cAAc,SAAS,GAc9B,MAAMv/J,EAAU,KAAK,YAAcg2B,EAAO,EAAI,EAE3CA,GACD,KAAK,cAAc,QAAQ,EAGfr2B,GAAA,CACZ,QAAS,KAAK,UACd,UAAW,aACX,SAAU,CAACq2B,EACX,SAAU71B,GAAS,YAAY,YAAY,GAAK,CAACknJ,EAAgB,IAAM,EACvE,gBAAiB,IAAM,CAChB,aAAU,KAAK,cAAc,QAAQ,CAC5C,EACA,QAAArnJ,CAAA,CACD,CACH,CACF,CChJA,MAAqBw/J,WAAuBF,EAAmB,CAO7D,YACE/jJ,EACAkkJ,EACQ10I,EACAhnC,EACR,CACM,OACJ,SAAAw3B,EACA,WAAAkkJ,EACA,SAAU,KACV,SAAU,MAAMx2J,GACP,CAAE,MAAM,KAAK,KAAK,MAAM,kBAAkB,aAAa,CAAC,OAAAA,GAAS,EAAI,EAE9E,WAAY,CAAC,UAAW,WAAW,EACpC,EAXO,UAAA8hB,EACA,cAAAhnC,EAYH,eAAU,UAAU,IAAI,iBAAiB,EAEzC,sBAAiB,UAAW,IAAM,CACrC,WAAW,IAAM,CACf,KAAK,WAAW,eAAiB,GAChC,CAAC,EAEMH,EAAA,cAAc,mBAAoB,EAAI,EACjD,EAEI,sBAAiB,SAAU,IAAM,CACjC,KAAK,iBACKyB,GAAA,oBAAoB,eAAgB,KAAK,cAAc,EAClE,KAAK,eAAiB,OAEtB,KAAK,eAAe,YACpB,KAAK,eAAiB,QAGdzB,EAAA,cAAc,mBAAoB,EAAK,EAClD,CACH,CAEO,cAAcm/C,EAAkB,CAC/B,MAAAz9C,EAAa,KAAK,WAAW,cAAc,EAEjD,KAAK,eAAe,QAEpB+nK,GAA4BtqH,CAAQ,EAC/B,cAAS,mBAAmB,sBAAsB,CACrD,SAAAA,EACA,mBAAoB,GACpB,sBAAuBn/C,EAAU,SAAS,SAAS,UAAY,MAChE,EAAE,KAAM6wE,GAAa,CACjB,IAACnvE,IACF,OAGC,KAAK,OACN,KAAK,KAAK,EACV,KAAK,KAAO,MAGR,MAAAG,EAAY,KAAK,KAAK,UAAU,EAElC,IAAAknB,EAEJ,KAAK,cAAc,QAChB8nD,EAAS,QACF9nD,EAAA,IAAI,QAAetE,GAAY,CACrC,MAAMrY,EAA2B,GACxBykE,EAAA,QAASuC,GAAY,CAC5BvxE,EAAU,OAAO,KAAK,qBAAqB,cAAcuxE,EAAuB,OAAWhnE,CAAQ,CAAC,EACrG,EAEA,QAAQ,IAAIA,CAAQ,EAAmB,QAAQqY,CAAO,EACxD,EAED/iB,EAAW,QAAQ,IAAM,CACvB,KAAK,qBAAqB,OAAM,CACjC,GAEDqnB,EAAQ,QAAQ,UAGlBA,EAAM,KAAK,IAAM,CACV,UAAK,YAAYlnB,CAAS,EAC/B,KAAK,KAAOA,EAER,KAAK,iBACP,KAAK,eAAiB,IAAM,CACpB,MAAAukB,EAAS,KAAK,KAAK,kBAAoB3kB,GAAW,OAAO,WAAW,OAAU,KAAK,KAAK,kBAAoB,GAC7G,UAAK,MAAM,MAAQ2kB,EAAQ,MAEvB3kB,GAAA,iBAAiB,eAAgB,KAAK,cAAc,EAE1D,oBAAiB,IAAIy2B,GAC1B8rC,GAA6B,CAAC,SAAU,KAAK,UAAW,eAAgB,KAAK,eAAe,GAG9F,KAAK,eAAe,EAEf,YAAO,CAAC6M,EAAS,MAAM,EAC5B,KAAK,WAAW,eAAiB,EAClC,EACF,CACH,CAEO,MAAO,CACP,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAI,2BAA4B,gBAAgB,EAE/D,eAAU,OAAO,KAAK,IAAI,EAE/B,KAAK,WAAa,IAAI7xC,GAAW,KAAK,SAAS,EAC1C,mBAAgB,IAAImoC,GACpB,0BAAuB,IAAIwH,GAAqB,CACnD,qBAAsB,KAAK,cAC3B,MAAO,KAAK,KAAK,eACjB,SAAU,KAAK,SAChB,CACH,CACF,CC7HA,MAAqBmtG,WAAoBJ,EAAmB,CAG1D,YACE/jJ,EACAkkJ,EACQlrH,EACAxwD,EACR,CACM,OACJ,SAAAw3B,EACA,WAAAkkJ,EACA,SAAU,IACV,SAAWx2J,GAAW,CACpBsrC,EAAU,gBAAgBa,GAAoBnsC,CAAa,EAAG,EAAI,CACpE,EACD,EAVO,eAAAsrC,EACA,cAAAxwD,EAWH,eAAU,UAAU,IAAI,cAAc,CAC7C,CAEO,MAAO,CACP,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAI,sBAAuB,cAAc,EAExD,eAAU,OAAO,KAAK,IAAI,EAE/B,KAAK,WAAa,IAAI2uE,GAAY,KAAK,SAAS,EAE3C,sBAAiB,UAAW,IAAM,CACrC,WAAW,IAAM,CACf,KAAK,WAAW,eAAiB,GAChC,CAAC,EACL,CACH,CAEQ,aAAamE,EAAoBvxE,EAAwB,CACzD,MAAA8xE,MAAwF,IAmB9F,GAlBA,KAAK,KAAK,kBAENxzE,EAAU,UACHizE,IAAO,OAAQhsE,GAAU,KAAK,UAAU,kBAAkB,YAAYA,EAAO,EAAK,CAAC,GAGvFgsE,EAAA,QAAShsE,GAAU,CAClB,MAAAkC,EAAU4yK,GAAa90K,EAAO,EAAI,EAGxC,GAFK,UAAK,OAAOkC,CAAO,EAErBlC,EAAM,MAAO,CACd,MAAMkrE,EAAqBhpE,EAAQ,kBAGtBqqE,EAAA,IAAIrB,EAAmB,MAAO,IAAI,IAAI,CAACA,CAAkB,CAAC,CAAC,CAC1E,EACD,EAEEqB,EAAa,KAAM,CACd,MAAAwoG,EAAsBnnG,GAA2B,OAAO,CAC5D,eAAgB,gBAChB,gBAAiBpzE,GAAW,OAAO,eACnC,UAAW,qBACX,qBAAsB,GACtB,WAAYC,EAAW,OAAO,EAAE,IAAI,EACrC,EAEI,UAAK,QAAQs6K,CAAmB,EAErCA,EAAoB,sBAAsB,CACxC,MAAQ/oG,EAAO,OAAS,GAAM,EAC9B,OAAQ,GACT,EAED+oG,EAAoB,IAAI,CACtB,gBAAiBxoG,CAAA,CAClB,EAEK,MAAAz+C,EAAiB,IAAImD,GAC3Bx2B,EAAW,QAAQ,IAAMqzB,EAAe,UAAW,GACnDivC,GAA6B,CAAC,SAAU,KAAK,UAAW,eAAAjvC,CAAe,EACzE,CACF,CAEO,OAAOk+C,EAAoB4jF,EAAqBn1J,EAAwB,CAC7E,GAAG,KAAK,KAAM,CACT,IAACuxE,EAAO,OACT,OAGF,KAAK,KAAK,EACV,KAAK,KAAO,IACd,CAESA,IAAO,MAAM,EAAG,EAAE,EAExBA,EAAO,QACH,kBAAaA,EAAQvxE,CAAU,EAGtC,KAAK,WAAam1J,EAAa,CAAC,UAAW,WAAW,EAAI,OACrD,YAAO,CAAC5jF,EAAO,MAAM,CAK5B,CAEO,WAAWp8D,EAAeolK,EAAmB,CAC5C,MAAAv6K,EAAa,KAAK,WAAW,cAAc,EAC3Cm3C,EAAIhiC,EAAM,QAAQ,KAAM,EAAE,EAC3B,cAAS,gBAAgB,uBAAuB,CAAC,EAAAgiC,EAAG,UAAW,EAAK,GAAE,KAAK,MAAMo6B,GAAW,CAC3FvxE,KAIJ,KAAK,OAAOuxE,EAAQgpG,IAAc,IAAKv6K,CAAU,EAElD,CACH,CACF,CC3HA,MAAqBw6K,GAArB,MAAqBA,WAA+BR,EAAmB,CAKrE,YACE/jJ,EACAkkJ,EACU7/J,EACVyU,EACA,CACM,OACJ,SAAAkH,EACA,WAAAkkJ,EACA,SAAU,IACV,SAAAprJ,CAAA,CACD,EARS,eAAAzU,EAUV,KAAK,UAAU,UAAU,IAAIkgK,GAAuB,WAAYlgK,CAAS,CAC3E,CAEO,MAAO,CACP,UAAO,SAAS,cAAc,KAAK,EACnC,UAAK,UAAU,IAAIkgK,GAAuB,WAAa,QAAS,KAAK,UAAY,OAAO,EAExF,eAAU,OAAO,KAAK,IAAI,EAE/B,KAAK,WAAa,IAAIl9I,GAAW,KAAK,SAAS,EAE1C,sBAAiB,UAAW,IAAM,CACrC,WAAW,IAAM,CACf,KAAK,WAAW,eAAiB,GAChC,CAAC,EACL,CACH,CAEO,OACLlb,EACApiB,EACAy6K,EACA,CACA,GAAG,KAAK,KAAM,CACT,IAACr4J,EAAK,OACP,OAGF,KAAK,KAAK,EACV,KAAK,KAAO,IACd,CAEGA,EAAK,SACN,KAAK,KAAK,kBACLA,EAAA,QAAS5gB,GAAM,CACZ,MAAAqnB,EAAM2xJ,GAAuB,YAAY,CAC7C,UAAW,KAAK,UAChB,OAAQh5K,EAAE,OACV,KAAMA,EAAE,KACR,YAAaA,EAAE,YACf,WAAAxB,CAAA,CACD,EAEI,UAAK,OAAO6oB,CAAG,EACrB,GAGC4xJ,GACG,YAAO,CAACr4J,EAAK,MAAM,CAE5B,CAEA,OAAc,YAAYhkB,EAMvB,CACD,MAAMs8K,EAAOF,GAAuB,wBACpCp8K,EAAQ,WAAa,gBAEf,MAAAyqB,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAU,IAAI6xJ,EAAMt8K,EAAQ,SAAS,EACrCyqB,EAAA,QAAQ,OAAS,GAAKzqB,EAAQ,OAE5B,MAAC,KAAA2a,CAAI,EAAIkV,GAAU,CACvB,WAAY7vB,EAAQ,WACpB,MAAO,GACP,KAAM,GACN,OAAQA,EAAQ,OACjB,EACD2a,EAAK,UAAU,IAAI2hK,EAAO,UAAWt8K,EAAQ,UAAY,SAAS,EAE5D,MAAAq6B,EAAO,SAAS,cAAc,KAAK,EAezC,GAdAA,EAAK,UAAU,IAAIiiJ,EAAO,QAASt8K,EAAQ,UAAY,OAAO,EAC1DA,EAAQ,KAQV2U,GAAa0lB,EAAMz5B,GAAcZ,EAAQ,IAAI,CAAC,EAPzCq6B,EAAA,OAAO,IAAIrjB,GAAU,CACxB,OAAQhX,EAAQ,OAChB,OAAQ,GACR,cAAe,GACf,UAAW,GACZ,EAAE,OAAO,EAKRyqB,EAAA,OAAO9P,EAAM0f,CAAI,EAElBr6B,EAAQ,YAAa,CAChB,MAAAmxB,EAAc,SAAS,cAAc,KAAK,EAChDA,EAAY,UAAU,IAAImrJ,EAAO,eAAgBt8K,EAAQ,UAAY,cAAc,EACnF2U,GAAawc,EAAavwB,GAAcZ,EAAQ,WAAW,CAAC,EAC5DyqB,EAAI,OAAO0G,CAAW,CACxB,CAEO,OAAA1G,CACT,CACF,EAnHE2xJ,GAAiB,WAAa,2BACbA,GAAA,wBAA0BA,GAAuB,WAAa,gBAFjF,IAAqBG,GAArBH,GCFgB,SAAAI,GAA2Bv8K,EAAgBwmB,EAAoE1P,EAAgB,CAC7I,MAAM0lK,EAA8B,CAAG,SAAOh2J,EAAK,QAAQ,EACvD,IAAA9M,EAED5C,IAAU,SACX4C,EAAQ,IAAIm0I,GAAoB,CAC9B,WAAY,GACb,GAIG,MAAA4uB,MAA+B,IAC5BD,EAAA,QAASnuC,GAAY,CACxBA,EAAQ,UAIZA,EAAQ,SAAS,QAAQ,CAAC,CAAC,QAAA1lB,EAAS,YAAAz3F,GAAc5tB,IAAQ,CACxD,MAAM2V,EAAI,IAAM0vG,EAChB8zD,EAAS,IAAI9zD,EAAS,CACpB,OAAQ0lB,EAAQ,QAAUA,EAAQ,QAAQ,SAAS,EAAK,EAAIruI,EAC5D,QAAA2oH,EACA,KAAM1vG,EACN,YAAAiY,EACA,MAAO5tB,CAAA,CACR,EAEEoW,GACKA,EAAA,YAAYivG,EAAS1vG,CAAC,CAC9B,CACD,EACF,EAEG,IAAAxV,EACJ,GAAG,CAACiW,EACFjW,EAAM,CAAC,GAAGg5K,EAAS,OAAQ,OACtB,CACC,MAAArpK,EAAQsG,EAAM,OAAO5C,CAAK,EAC1BrT,EAAA,MAAM,KAAK2P,CAAK,EAAE,IAAKu1G,GAAY8zD,EAAS,IAAI9zD,CAAO,CAAC,CAChE,CAEA,OAAAllH,EAAMA,EAAI,KAAK,CAACiF,EAAGwsB,IAAMunJ,EAAS,IAAI/zK,EAAE,OAAO,EAAE,MAAQ+zK,EAAS,IAAIvnJ,EAAE,OAAO,EAAE,KAAK,EAE/EzxB,CACT,CAEA,MAAqBi5K,WAAuBJ,EAAuB,CACjE,YACE1kJ,EACAkkJ,EACAlrH,EACQxwD,EACR,CACA,MAAMw3B,EACJkkJ,EACA,kBACCx2J,GAAW,CACV,MAAM0qC,EAAY1qC,EAAO,cAAc,IAAIg3J,GAAuB,uBAAuB,OAAO,EAAE,UAC3F,OAAA1rH,EAAU,eAAe,IAAM,CACpCA,EAAU,aAAa,UAAYZ,EACnCY,EAAU,YAAY,EAAI,EAC3B,CACH,GAXM,cAAAxwD,CAaV,CAEA,MAAa,WAAW0W,EAAe9W,EAAgB,CACrD,GAAG,CAAE,MAAM,KAAK,SAAS,gBAAgB,MAAMA,CAAM,EAC5C,SAGH,MAAA2B,EAAa,KAAK,WAAW,cAAc,EACjD,YAAK,SAAS,kBAAkB,mBAAmB3B,CAAM,EAAE,KAAMwmB,GAAS,CACrE,IAAC7kB,IACF,OAGF,MAAMo8B,EAAWw+I,GAA2Bv8K,EAAQwmB,EAAM1P,CAAK,EAC1D,YAAOinB,EAAUp8B,CAAU,EAEjC,EAEM,EACT,CACF,CCxFA,MAAqBg7K,EAA6B,CAAlD,cACU,iBAAuC,IAC/C,KAAQ,WAAajtK,IAAc,CAW5B,qBAAqBH,EAAkB,CAClC,UAAAqtK,KAAU,KAAK,QACvBA,EAAO,qBAAqBrtK,CAAO,CAEvC,CAEO,eAAgB,CACrB,YAAK,WAAW,QACT,KAAK,WAAW,KACzB,CAEO,UAAUqtK,EAA4B,CACtC,aAAQ,IAAIA,CAAM,CACzB,CAEO,iBAAiBC,EAAqC,CACtD,aAAQ,QAASD,GAAW,CAC5BA,IAAWC,GACLD,EAAA,OAAO,GAAM,EAAI,CAC1B,CACD,EAEGC,GACF,KAAK,WAAW,OAEpB,CACF,CCnCA,MAAqBC,WAAuBR,EAAuB,CACjE,YACE1kJ,EACAkkJ,EACAlrH,EACQxwD,EACR,CACA,MACEw3B,EACAkkJ,EACA,kBACCx2J,GAAW,CACV,MAAMtlB,EAAUslB,EAAuB,QAAQ,OAAO,SAAS,EACrDsrC,EAAA,YAAY5wD,EAAQ,EAAI,CACpC,GATM,cAAAI,CAWV,CAEO,WACL0W,EACA9W,EACA+8K,EACAC,EACA,CACM,MAAAC,EAAUnmK,EAAM,OACnB,GAAAA,EAAM,SAAWmmK,EAAQ,OAAe,SAErC,MAAAt7K,EAAa,KAAK,WAAW,cAAc,EACjD,YAAK,SAAS,kBAAkB,YAC9B3B,GAAUA,EAAO,SAAS,EAC1Bi9K,EACAF,EACAC,CAAA,EACA,KAAK,MAAMloK,GAAY,CACvB,GAAG,CAACnT,EAAW,EAAG,OAElBmT,EAAUA,EAAQ,OAAQ9U,GAAWA,IAAWC,EAAU,IAAI,EAI9D,MAAMsC,EAAIuS,EAAQ,IAAI,MAAM9U,GAAW,CACrC,MAAMO,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQP,CAAM,EACzDJ,EAAYF,GAAuBa,CAAI,EAKtC,OACL,OAAAP,EACA,YAAaJ,EAAU,CAAC,EAAI,IAAMA,EAAU,CAAC,EAAI,OACnD,CACD,EAEK6D,GAAO,MAAM,QAAQ,IAAIlB,CAAC,GAAG,OAAO,OAAO,EAC7CZ,EAAW,GACV,YAAO8B,EAAK9B,CAAU,EAC5B,EAEM,EACT,CACF,CCnDA,MAAqBu7K,GAArB,MAAqBA,WAAsBtmG,EAAc,CAYvD,YAAY72E,EAMT,CACK,OACJ,QAAS,SAAS,cAAc,KAAK,EACtC,EAsDK,sBAAoBwM,GAAkB,CAC5C,MAAM+Y,EAAS/Y,EAAE,QAAQ,CAAC,EAAE,OACzB,CAACmlB,GAAcpM,EAAQ,KAAK,OAAO,GAAKA,IAAW,KAAK,WACzD1I,GAAYrQ,CAAC,EACb,KAAK,OAAO,EAAK,EACnB,EAzDAyK,GAAW,KAAMjX,CAAO,EAExB,KAAK,QAAQ,UAAU,IAAIm9K,GAAc,UAAU,EAC9C,aAAQ,MAAM,QAAU,OAExB,oBAAiB,IACjB,gBAAa,IAAIj+I,GACtB,KAAK,QAAQ,OAAO,KAAK,WAAW,SAAS,EAE7C,KAAK,qBAAqB,KAAK,SAAU,KAAK,cAAc,EACvD,oBAAe,IAAIh/B,CAAS,EAAE,uBAAwB,MAAM,CAAC,OAAAD,KAAY,CACzE,KAAK,SAAWA,IACd,KAAK,qBAAuB,KAAK,YAClC,MAAM,KAAK,SAGY6nC,GAAA,EAAE,KAAK,IAAM,CACpC,KAAK,gBAAgB,EACtB,EACH,CACD,CACH,CAEO,MAAO,CACP,qBAAS,OAAO,KAAK,OAAO,EAEjC,KAAK,eAAe,IAAI,IAAI,EAAE,OAAQ,SAAW,CAC/C,MAAM,KAAK,SAERlW,KACD,KAAK,cAAgB,KAAK,eAAe,IAAI,SAAS,IAAI,EAAE,aAAc,KAAK,iBAAkB,CAAC,QAAS,GAAO,QAAS,GAAK,EAChI,KAAK,eAAe,IAAI,IAAI,EAAE,QAAS,IAAM,CACtC,oBAAe,OAAO,KAAK,aAAa,GAC5C,CAAC,KAAM,GAAK,EACjB,CACD,EAEgB9U,EAAA,KAAK,QAAU,GAAM,CACpC,MAAMyI,EAASC,EAAgB,EAAE,OAAQ,KAAK,EAC9C,GAAG,CAACD,EACF,OAGc,KAAK,WAAW,IAAIA,CAAM,IAChC,CAAC,EAEX,KAAK,OAAO,EAAK,CAChB,GAAC,eAAgB,KAAK,cAAe,GAEjC,MAAM,MACf,CAUA,MAAa,iBAAkB,CACvB,MAAAsrG,EAAc,MAAM,KAAK,iBAC5BA,EAAY,IAAM,2BACnB,CAACA,EAAY,OAAO,QACpB,CAACA,EAAY,OAAO,OACpBA,EAAY,OAAO,KAAO,GAC1B,KAAK,UAAU,iBAAiB,CAAC,aAAcA,EAAY,IAAI,EAEnE,CAEA,MAAc,gBAAuC,CAC3C,aAAM,KAAK,SAAS,mBAAmB,8BAA8B,CAAC,OAAQ,KAAK,MAAO,IAAG,aAAe,CAClH,EAAG,oBACH,OAAQ,CAAC,EAEb,CAEA,MAAa,OAAOA,EAA+C,CAC9DA,IAAgB,SACHA,EAAA,MAAM,KAAK,kBAG3B,KAAK,WAAW,QAChB,KAAK,WAAW,kBAEN,UAAAt2F,KAAOs2F,EAAY,KAAM,CAC3B,MAAApmG,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAU,IAAI0yJ,GAAc,WAAa,MAAM,EAEzC,UAAA/sJ,KAAUmK,EAAI,QAAS,CAC/B,KAAM,CAAC,SAAAu2F,EAAU,QAAAx8F,CAAO,EAAIq8F,GAAmB,CAAC,OAAAvgG,EAAQ,KAAM,KAAK,UAAU,KAAM,YAAAygG,CAAY,GAC1F,gBAAW,IAAIC,EAAUx8F,CAAO,EACrCw8F,EAAS,UAAU,IAAIqsD,GAAc,WAAa,UAAW,KAAK,EAClE1yJ,EAAI,OAAOqmG,CAAQ,CACrB,CAEK,gBAAW,OAAOrmG,CAAG,CAC5B,CACF,CAEA,MAAa,kBAAkBomG,EAA2B,CACrDA,IAAgB,SACHA,EAAA,MAAM,KAAK,kBAG3B,MAAMv+E,EAAOu+E,EAAY,IAAM,qBAAuB,CAAEA,EAA8C,MAAM,OAC5G,YAAK,SAAS,UAAU,OAAO,OAAQv+E,CAAI,EAExCA,GACD,KAAK,OAAO,EAAK,EAGZ,CAACA,CACV,CAEO,QAAQryC,EAAgB,CAC7B,KAAK,OAASA,EAEd,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,CACvB,CACF,EA/IEk9K,GAAe,WAAa,iBAD9B,IAAqBC,GAArBD,GCpBwB,SAAAE,GAAYC,EAA4DC,EAAkB,CAChH,OAAOD,EAAU,IAAMC,CACzB,CC+BA,MAAMh3G,GAAsC,gBAG5C,MAAqBi3G,WAAqB5B,EAAmB,CAQ3D,YACE/jJ,EACAkkJ,EACQ10I,EACAhnC,EACR,CACM,OACJ,SAAAw3B,EACA,WAAAkkJ,EACA,SAAU,KACV,WAAY,CAAC,UAAW,WAAW,EACnC,SAAWx2J,GAAW,CACpB,GAAG,CAACA,EAAe,SACnB,KAAM,CAAC,OAAAtlB,EAAQ,MAAA+sC,EAAO,QAAAswI,CAAO,EAAI,KAAK,KAAK,QAC3C,OAAO,KAAK,KAAK,MAAM,eAAe,IAAM,CAC1C,MAAMG,EAAoBJ,GAAYC,EAAU/3J,EAAuB,QAAQ,QAAQ,EACvF,KAAK,SAAS,qBAAqB,iBAAiBtlB,EAAO,SAAS,EAAG+sC,EAAOywI,EAAmB,CAC/F,GAAG,KAAK,KAAK,wBAAwB,EACrC,WAAY,GACb,EAED,KAAK,KAAK,MAAM,cAAc,GAAM,EAAI,EACzC,CACH,EACD,EArBO,UAAAp2I,EACA,cAAAhnC,EAwCV,KAAO,YAAc,MAAMJ,EAAgBH,EAAkBiX,EAAe2mK,IAA2B,CAC/F,MAAA97K,EAAa,KAAK,WAAW,cAAc,EAE3ChC,EAAO,MAAM,KAAK,SAAS,gBAAgB,gBAAgBE,CAAQ,EACtE,IAAC8B,IACI,oBAGR,GAAGhC,EAAK,IAAM,QAAU,CAACA,EAAK,OAAO,IAC7B,iBAGR,GAAG,CAAC89K,EACC,MAAC97K,KAID,KAAK,OACN,KAAK,KAAK,EACV,KAAK,KAAO,MAGT,eAAU,UAAU,IAAI,WAAW,EACxC,KAAK,OAAO,EAAK,EACX,cAVE,eAaV,MAAMorC,EAAQptC,EAAK,GAEb6hB,EAAgB,KAAK,SAAS,qBAAqB,iBAAiBxhB,EAAQ+sC,EAAOj2B,CAAK,EAAE,KAAM4mK,GAAe,CAChH,IAAC/7K,IACI,oBAGL,KAAK,OACN,KAAK,KAAK,EACV,KAAK,KAAO,MAGR,MAAA2iC,EAAO,KAAK,KAAK,UAAU,EAC5BA,EAAA,QAAQ,OAAS,GAAKtkC,EACtBskC,EAAA,QAAQ,MAAQ,GAAKyI,EACrBzI,EAAA,QAAQ,QAAU,GAAKo5I,EAAW,SAEvC,MAAMC,EAAc,IAAIxoG,GAAY,KAAM7O,GAAiB,KAAK,WAAY,EAAK,EAEjF,KAAK,cAAc,QACnB,KAAK,qBAAqB,QAE1B,MAAMpkE,EAA+B,GAC/B07K,EAAY,CAAC,CAACF,EAAW,OAAO,QAE5B,UAAA1zK,KAAQ0zK,EAAW,QAAS,CAC9B,MAAA57K,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sBAAsB,EACpCA,EAAA,QAAQ,SAAWkI,EAAK,GAElC,MAAMm+H,EAAUy1C,EAAY,OAAY,SAAS,cAAc,KAAK,EASpE,GARGz1C,IACOA,EAAA,UAAU,IAAI,8BAA8B,EAEpDrmI,EAAU,OAAOqmI,CAAO,GAG1B7jG,EAAK,OAAOxiC,CAAS,EAEjB87K,EAsBQ97K,EAAA,UAAU,IAAI,WAAW,MAtBtB,CACLqmI,EAAA,UAAU,IAAI,OAAO,EAChBzzH,GAAAyzH,EAASxnI,GAAc,CAAC,GAAGqJ,EAAK,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAExD,MAAA1J,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,4BAA4B,EAChDoU,GAAapU,EAAOK,GAAcqJ,EAAK,KAAK,CAAC,EAEvC,MAAAknB,EAAc,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,kCAAkC,EAC/Cxc,GAAAwc,EAAahoB,GAAac,EAAK,YAAa,CACvD,WAAY,GACZ,QAAS,EACV,EAAC,EAEQlI,EAAA,OAAOxB,EAAO4wB,CAAW,EAE7B,MAAA+mH,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EAEjD3zG,EAAK,OAAO2zG,CAAS,EAKpB,GAAAjuI,EAAK,IAAM,mBAET,GAAAA,EAAK,OAASA,EAAK,MAAM,UAAU,QAAQ,QAAQ,IAAM,EAAG,CACzD,IAAAs6D,EACD6jE,GACgB7jE,EAAA,SAAS,cAAc,KAAK,EAC7C6jE,EAAQ,OAAO7jE,CAAc,GAEZA,EAAAxiE,EAGJwiE,EAAA,UAAU,IAAI,iBAAiB,EACjCs5G,GAAAt5G,EAAe,UAAU,IAAI,kBAAkB,EAE5D,KAAK,cAAc,KAAK,CACtB,IAAKxiE,EACL,KAAM,IACGif,GAAmB,SAAS,CACjC,KAAM,EACN,SAAU,CACR,EAAG,uBACH,YAAc/W,EAAK,MAAkC,YACrD,IAAKA,EAAK,MAAM,GAClB,EACA,KAAMA,EAAK,MAAM,KACjB,SAAUA,EAAK,MAAM,UACtB,EAAE,KAAMmkE,GAAS,CACV,MAAAznD,EAAQ,IAAI,MACZA,EAAA,UAAU,IAAI,aAAa,EACjCm3J,GAAkB1vG,CAAI,EAAE,KAAM2vG,GAAY,CAClB1iK,GAAA,CACpB,UAAWkpD,EACX,MAAO59C,EACP,IAAKo3J,EACL,WAAYthK,GAAS,YAAY,YAAY,EAC9C,EACF,EACF,CACH,CACD,CACH,MACK,CACC,MAAApK,EAAQpI,EAAK,UAA0BA,EAAK,MAC9C,IAAC,UAAW,KAAK,EAA2B,SAAUoI,GAAsB,IAAI,GAAKwrK,EAGpFxrK,EAAM,OAAS,MACJurK,EAAA,IAAIvrK,EAAOtQ,CAAS,EACxBsQ,EAAM,OAAS,YACbtQ,EAAA,UAAU,IAAI,eAAe,EACvC,KAAK,qBAAqB,cAAcsQ,EAAOtQ,EAAWI,CAAY,EACnEkQ,EAAM,UACF,0BAAqB,gBAAgBtQ,CAAS,WAG/CsQ,EAAO,CACT,MAAAjR,EAAOy8K,EAAY,GAAK,OACjBA,GAAA97K,EAAU,UAAU,IAAI,kBAAkB,EAC7C6d,GAAA,CACR,MAAOvN,EACP,UAAWwrK,EAAY97K,EAAYqmI,EACnC,SAAUhnI,EACV,UAAWA,EACX,WAAAQ,EACA,cAAe,KAAK,cACpB,aAAAO,CAAA,CACD,CACH,CACF,CACF,CAEA,OAAO,QAAQ,IAAIA,CAAY,EAAE,KAAK,IAAM,CACvC,IAACP,IAAc,CAChBg8K,EAAY,MAAM,EAClB,MACF,CAEKr5I,EAAA,UAAU,OAAO,aAAcs5I,CAAS,EACxCt5I,EAAA,UAAU,OAAO,iBAAkBs5I,CAAS,EACjD,KAAK,UAAU,UAAU,OAAO,aAAcA,CAAS,EAQjD,MAAA7/C,EAAS,KAAK,KAAK,cACzBA,EAAO,YAAc,GACf,MAAAggD,EAAWL,EAAW,WAAaA,EAAW,eACpD,GAAGK,EAAU,CACL,MAAAC,EAAcxkJ,GAAO,2DAA2D,EACtF9kB,GAAaspK,EAAar9K,GAAco9K,EAAS,IAAI,CAAC,EACrClhK,EAAAmhK,EAAa,MAAMzxK,GAAM,CACrCwxK,EAAS,IAAM,qBAChB,MAAM,KAAK,KAAK,aAAa,aAAa,CAAC,OAAA/9K,EAAO,EAClD,KAAK,SAAS,qBAAqB,WAAWA,EAAQ+sC,EAAOgxI,EAAS,WAAW,GAEjF,KAAK,KAAK,WAAW,CACnB,MAAAhxI,EACA,IAAKgxI,EAAS,IACd,gBAAiB,GACjB,WAAYA,EAAS,KACrB,kBAAmB,GACpB,CACH,CACD,EACDhgD,EAAO,OAAOigD,CAAW,CAC3B,CACOjgD,EAAA,OAAO,KAAK,KAAOz5F,CAAI,EACzB,eAAU,UAAU,OAAO,WAAW,EAE3C,KAAK,aAAa,SAClB,KAAK,YAAcq5I,EACnBA,EAAY,OAAO,EAEf,KAAK,iBACP,KAAK,eAAiB,IAAM,CAC1B,GAAG,KAAK,KAAK,UAAU,SAAS,YAAY,EAAG,CACvC,MAAAt3J,EAAS,KAAK,KAAK,kBAAoB3kB,GAAW,OAAO,aAAa,OAAU,KAAK,KAAK,kBAAoB,GAC/G,UAAK,MAAM,MAAQ2kB,EAAQ,UAE3B,UAAK,MAAM,MAAQ,EAC1B,EAES3kB,GAAA,iBAAiB,eAAgB,KAAK,cAAc,GAGjE,KAAK,eAAe,EAEpB,KAAK,OAAO,CAACg8K,EAAW,QAAQ,QAAU,CAACK,CAAQ,EACnD,KAAK,WAAW,eAAiB,EAClC,EACF,EAEM,OAAC,KAAMp+K,EAAM,cAAA6hB,EAAa,EApP5B,eAAU,UAAU,IAAI,eAAe,EAEvC,sBAAiB,UAAW,IAAM,CACrC,WAAW,IAAM,CACf,KAAK,WAAW,eAAiB,GAChC,CAAC,EACL,EAED,KAAK,WAAamnB,GAAS,KAAK,YAAa,IAAK,GAAM,EAAI,EAEvD,sBAAiB,SAAU,IAAM,CACjC,KAAK,iBACKjnC,GAAA,oBAAoB,eAAgB,KAAK,cAAc,EAClE,KAAK,eAAiB,OACxB,CACD,CACH,CAuOO,MAAO,CACP,UAAO,SAAS,cAAc,KAAK,EACnC,UAAK,UAAU,IAAI,uBAAuB,EAE1C,eAAU,OAAO,KAAK,IAAI,EAE/B,KAAK,WAAa,IAAIu9B,GAAW,KAAK,SAAS,EAC1C,mBAAgB,IAAImoC,GACpB,0BAAuB,IAAIwH,GAAqB,CACnD,qBAAsB,KAAK,cAC3B,MAAOtI,GACP,SAAU,KAAK,SAChB,EAED,MAAMxlE,EAAOyD,EAAKm1E,GAAwB,WAAc,EACnD54E,EAAA,UAAU,IAAI,yBAAyB,EACvC,eAAU,OAAOA,CAAI,CAC5B,CACF,CCpUA,MAAM2rC,GAAa,eACnB,MAAqBwxI,WAAwB3B,EAAuB,CAGlE,YACE1kJ,EACAg5B,EACQxwD,EACR,CACA,MAAMw3B,EAAU,OAAW6U,GAAannB,GAAW,CACjD,MAAM0qC,EAAY1qC,EAAO,cAAc,IAAIg3J,GAAuB,uBAAuB,OAAO,EAAE,UAC3F,OAAA1rH,EAAU,eAAe,IAAM,CACpCA,EAAU,aAAa,UAAYZ,EACnCY,EAAU,YAAY,EAAI,EAC1B,KAAK,OAAO,EAAI,EACjB,EACF,EATO,cAAAxwD,CAUV,CAEO,UAAUmG,EAAgB5E,EAAwB,CACvD,GAAG,KAAK,SAAW4E,GAAU,KAAK,MAAM,kBAAmB,CACzD,KAAK,OAAO,EAAK,EACjB,MACF,CAEA,YAAK,OAASA,EACPslB,GAAY,KAAK,SAAS,kBAAkB,WAAWtlB,CAAM,EAAIigB,GAAS,CAC/E,GAAG,CAAC7kB,EAAW,EAAG,OAClB,MAAMo8B,EAAWw+I,GAA2Bh2K,EAAO,SAAS,EAAK,EAAGigB,CAAI,EAKlEF,EAASyX,EAAS,OAAS,GAHb,EAEG,GAEvB,KAAK,UAAU,MAAM,YAAY,WAAYzX,EAAS,IAAI,EAErD,YAAOyX,EAAUp8B,CAAU,EAGjC,CACH,CACF,CCrCA,SAAwBu8K,GAAcC,EAAaC,EAAmC,GAAIC,EAAkB,CAK1G,MAAMv3K,EAA4B,GAClC,IAAIw3K,EAAe,GACnB,MAAMC,EAAcx3K,GAA2By3K,GAAsBJ,EAAiBr3K,CAAM,EAAmDu3K,EAAe,IAA7Dx3K,EAAS,KAAKC,CAAM,EAAGu3K,EAAe,IAEjIG,EAAyB,GAC/B,IAAIC,EAAY,EAAG7zK,EACnB,KAAMA,EAAQszK,EAAI,MAAMQ,EAAgB,GAAG,CACnC,MAAAC,EAAaF,EAAY7zK,EAAM,MAC/Bg0K,EAAwBh0K,EAAM,MAAQA,EAAM,CAAC,EAAE,OAC/Ci0K,EAAcj0K,EAAM,MAAQ,GAAKszK,EAAI,MAAM,EAAGtzK,EAAM,KAAK,EAChDi0K,GAAAL,EAAa,KAAKK,CAAW,EACtC,MAAAj4K,EAAOgE,EAAM,CAAC,GAAKA,EAAM,CAAC,GAAKA,EAAM,EAAE,GAAKA,EAAM,EAAE,EAKtD,IAAA9D,EAED,GADYu3K,EAAA,GACZz3K,EAAK,MAAM,MAAM,EACL43K,EAAA,KAAK5zK,EAAM,CAAC,CAAC,UAClBA,EAAM,CAAC,EAAG,CAClB,IAAIk0K,EAAgBl0K,EAAM,CAAC,EAAE,MAAM,SAAS,EACxCk0K,IAAgB,CAAC,IACHA,EAAA,QAGlB,IAAIh2H,EAAOg2H,EAAgBl0K,EAAM,CAAC,EAAE,MAAMk0K,EAAc,CAAC,EAAE,MAAM,EAAIl0K,EAAM,CAAC,EAC5E,MAAM+kK,EAAa7mH,EAAK,CAAC,IAAM;AAAA,EAAO,EAAI,EACpC8mH,EAAW9mH,EAAKA,EAAK,OAAS,CAAC,IAAM;AAAA,EAAO,GAAK,OASpD,GARIA,IAAK,MAAM6mH,EAAYC,CAAQ,EAC7B9oK,EAAA,CACP,EAAG,mBACH,SAAUg4K,IAAgB,CAAC,GAAK,GAChC,OAAQH,EAAa/zK,EAAM,CAAC,EAAE,OAC9B,OAAQk+C,EAAK,QAGZw1H,EAAWx3K,CAAM,EAAG,CAClB8oK,IACY6O,GAAA,GAGZK,IACYL,GAAAK,EAAc,CAAC,EAAE,QAGhC,IAAIC,EAAa,GACd,GAAAn0K,EAAM,CAAC,EACRm0K,EAAan0K,EAAM,CAAC,MACf,CACL,MAAMo0K,EAAeR,EAAaA,EAAa,OAAS,CAAC,EACtDQ,GAAgB,CAAC,KAAK,KAAKA,EAAaA,EAAa,OAAS,CAAC,CAAC,IACpDD,EAAA;AAAA,EAEjB,CAEAP,EAAa,KAAKO,EAAYj2H,EAAMl+C,EAAM,CAAC,CAAC,EAE5C6zK,GAAa7zK,EAAM,CAAC,EAAE,OAASA,EAAM,CAAC,EAAE,MAC1C,UACQA,EAAM,CAAC,EAAG,CACZ,MAAAq0K,EAAQr0K,EAAM,CAAC,IAAM,IAElB9D,EAAA,CACP,EAAGo4K,GAAkBt0K,EAAM,CAAC,CAAC,EAE7B,OAAQ+zK,GAAcM,EAAQ,EAAIr0K,EAAM,CAAC,EAAE,QAC3C,OAAQhE,EAAK,QAGZ03K,EAAWx3K,CAAM,IACdm4K,EAGFT,EAAa,KAAK53K,CAAI,EAFtB43K,EAAa,KAAK5zK,EAAM,CAAC,EAAIhE,EAAOgE,EAAM,CAAC,CAAC,EAK9C6zK,GAAa7zK,EAAM,CAAC,EAAE,OAAS,GAAKq0K,EAAQ,EAAI,GAClD,MACQr0K,EAAM,EAAE,GACP9D,EAAA,CACP,EAAG,2BACH,QAAS8D,EAAM,EAAE,EAAE,SAAS,EAC5B,OAAQ+zK,EACR,OAAQ/3K,EAAK,QAGZ03K,EAAWx3K,CAAM,IAClB03K,EAAa,KAAK53K,CAAI,EAEtB63K,GAAa7zK,EAAM,CAAC,EAAE,OAAShE,EAAK,SAE9BgE,EAAM,EAAE,IACP9D,EAAA,CACP,EAAG,uBACH,IAAK8D,EAAM,EAAE,EACb,OAAQ+zK,EACR,OAAQ/3K,EAAK,QAGZ03K,EAAWx3K,CAAM,IAClB03K,EAAa,KAAK53K,CAAI,EAEtB63K,GAAa7zK,EAAM,EAAE,EAAE,OAAShE,EAAK,SAIrCy3K,GACWG,EAAA,KAAK5zK,EAAM,CAAC,CAAC,EAG5BszK,EAAMA,EAAI,OAAOtzK,EAAM,MAAQA,EAAM,CAAC,EAAE,MAAM,EAC9C6zK,GAAa7zK,EAAM,MAAQA,EAAM,CAAC,EAAE,OAEpC,MAAMu0K,EAAgBV,EAAYG,EAC/BO,GACehB,EAAA,QAASr3K,GAAW,CAC/BA,EAAO,QAAU63K,IAClB73K,EAAO,QAAUq4K,EACnB,CACD,CAEL,CAEOjB,GAAAM,EAAa,KAAKN,CAAG,EACxB,IAAAkB,EAAUZ,EAAa,KAAK,EAAE,EAClC,OAAIY,EAAQ,QAAQ,OAAQ,EAAE,EAAE,SACpBA,EAAAlB,EACDr3K,EAAA,OAAO,EAAGA,EAAS,MAAM,GAQlBs3K,EAAA/yK,GAAc+yK,EAAiBt3K,CAAQ,EACzDw4K,GAAoBlB,CAAe,EAEtBiB,EAAQ,OAyBd,CAACA,EAASjB,CAAe,CAClC,CC/JA,MAAMmB,GAA6B,IAEnC,MAAqBC,EAAW,CAc9B,YACUp/K,EACAitH,EACA/8F,EACR,CAHQ,cAAAlwB,EACA,aAAAitH,EACA,cAAA/8F,EAER,KAAK,iBAAmB5gB,KACnB,oBAAiB,IAAIyoB,GAC1B,KAAK,UAAU,CACjB,CAEQ,WAAY,CACb,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,+BAA+B,EAEvD,cAAW,SAAS,cAAc,KAAK,EAC5C,KAAK,SAAS,UAAU,IAAI,4BAA6B,4BAA4B,EACrF,KAAK,SAAS,OAAOl3B,GAAK,OAAO,CAAC,EAElC,MAAMw+K,EAAyC,CAAC,CAC9C,KAAM,qBACN,QAAS,OACV,EAED,KAAK,QAAU,GAEX,IAAAC,EACE,MAAAC,EAAsB5vK,GAAqB,CAC5CA,IACD2vK,EAAiB,KAAK,QAGlB,MAAAE,EAAY,KAAK,SAAWF,EAC5BrjK,EAAU,CAACtM,GAAW6vK,EAAY,EAAI,EAE9B5jK,GAAA,CACZ,QAAS,KAAK,SACd,UAAW,aACX,SAAUjM,EACV,SAAUwvK,GACV,QAAAljK,CAAA,CACD,EACGujK,GACY5jK,GAAA,CACZ,QAAS0jK,EAAe,KACxB,UAAW,aACX,SAAU,CAAC3vK,EACX,SAAUwvK,GACV,QAAAljK,CAAA,CACD,CACH,EAGe2/C,GAAA,CACf,cAAe,CAAC,SAAU,EAAI,EAC9B,eAAgB,KAAK,eACrB,UAAW,KAAK,UAChB,UAAW,YACX,QAASyjH,EACT,aAAc,IAAM,CAClBE,EAAmB,EAAI,CACzB,EACA,OAAQ,CAACpzK,EAAGixD,IAAY,CACtBiiH,EAAc,CAAC,EAAE,QAAQ,UAAU,IAAI,sBAAsB,EAC7D,KAAK,QAAUjiH,EACf,KAAK,QAAQ,UAAU,IAAI,aAAc,cAAc,EAClD,aAAQ,OAAO,GAAG,KAAK,QAAQ,IAAKrtC,GAAWA,EAAO,OAAO,CAAC,CACrE,EACA,QAAS,IAAM,CACbwvJ,EAAmB,EAAK,CAC1B,EACA,aAAc,IAAM,CAClB,KAAK,QAAU,MACjB,EACD,EAEI,eAAU,OAAO,KAAK,QAAQ,CACrC,CAEA,MAAc,cAAcxuE,EAAkC,CAC5D,MAAM9kG,EAA6C8kG,EAAM,IAAI,MAAM0uE,EAAYv8K,IAAQ,CAC/E,MAAAoxB,EAAc,SAAS,cAAc,KAAK,EAE1C,CAAC,OAAQorJ,EAAc,YAAAC,CAAA,EAAeF,EAEtCjnJ,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,wBAAwB,EAC5CknJ,EAAa,SACLlnJ,EAAA,OAAOr0B,EAAK,6BAA6B,CAAC,EAC3Cu7K,IAAiB,KAAK,QAAWt/K,GAAgB,QAAQ,KAAK,MAAM,EAAmB,OAAO,UAC7Fo4B,EAAA,OAAOr0B,EAAK,2BAA2B,CAAC,EAEjDq0B,EAAS,OAAO,MAAMyO,GAAqBy4I,EAAa,SAAU,EAAC,EAG/D,MAAAx/K,EAAQ,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,OAAO,IAAIyW,GAAU,CAAC,OAAQ+oK,CAAa,GAAE,OAAO,EAEvDC,GACDz/K,EAAM,OAAOW,GAAK,eAAgB,0BAA0B,CAAC,EAGnDyzB,EAAA,OACVp0B,EACAs4B,CAAA,EAGK,CACL,QAASt1B,EAAM,SAAW,CACxB,GAAGu8K,EAAW,aAAe,CAAC5/K,EAAU,QAAS,CAC/Cu2C,GAAa,KAAK,EAClB,MACF,CAEA,MAAM8lC,EAAgB,KAAK,OAC3B,KAAK,mBAAmBwjG,CAAY,EAE9B,MAAAn+K,EAAa,KAAK,iBAAiB,IAAI,EACvCq+K,EAAuB,IAAM,CACjC,GAAG,KAAK,eAAiBF,GAAgB,CAACn+K,EAAW,EAAG,OAClDwvG,QAAQ,KAAK,YAAY,MAAM,EAC/B7tG,EAAM6tG,EAAM,UAAWxxG,GAASA,EAAK,SAAWmgL,CAAY,EAC/Dx8K,IAAQ,IAAI6tG,EAAM,OAAO7tG,EAAK,CAAC,EAClC6tG,EAAM,QAAQ0uE,CAAU,EACxB,KAAK,cAAc1uE,CAAK,GAGvB30F,GAAS,YAAY,YAAY,EAClC,WAAWwjK,EAAsB,GAAG,EAEfA,IAIvB,KAAK,SAAS,mBAAmB,kBAAkB1jG,EAAewjG,CAAY,CAC5E,SACJ,YAAAprJ,CAAA,CACF,CACD,EAEKtD,EAAU,MAAM,QAAQ,IAAI/kB,CAAQ,EAC1B0oB,GAAe,CAAC,QAAA3D,CAAO,CAA4B,EAC3DA,EAAA,QAAQ,CAACjB,EAAQ7sB,IAAQ,CAC/B,KAAM,CAAC,OAAAtD,CAAA,EAAUmxG,EAAM7tG,CAAG,EACpBogB,EAASkM,GAAU,CACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,GACN,OAAA5vB,CAAA,CACD,EACM0jB,EAAA,KAAK,UAAU,IAAI,oBAAoB,EAE1CpgB,GACKogB,EAAA,KAAK,UAAU,IAAI,QAAQ,EAG7ByM,EAAA,QAAQ,QAAQzM,EAAO,IAAI,EACnC,EAED,KAAK,QAAU0N,EAGV,cAAS,OAAO,GAAG,KAAK,QAAQ,IAAKjB,GAAWA,EAAO,OAAO,CAAC,CACtE,CAEA,MAAc,aAAa2vJ,EAAsBpc,EAAyB,CACxE,MAAMgc,EAAiB,KAAK,OAC5B,GAAGA,GACEA,EAAe,KAAK,QAAQ,OAAO,aAAeI,EACnD,OAIAJ,IACchc,EAAA,IAGZ,MAAArnJ,EAAUqnJ,EAAgB,EAAI,EAC9BzgK,EAAWygK,EAAgB,EAAI6b,GAC/B77J,EAAS,KAAK,OAASkM,GAAU,CACrC,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,GACN,SAAU,GACV,OAAQkwJ,CAAA,CACT,EACMp8J,EAAA,KAAK,UAAU,IAAI,4BAA4B,EACtD,MAAMA,EAAO,kBAEC1H,GAAA,CACZ,QAAS0H,EAAO,KAChB,UAAW,aACX,SAAU,GACV,SAAAzgB,EACA,QAAAoZ,CAAA,CACD,EACEqjK,GACa1jK,GAAA,CACZ,QAAS0jK,EAAe,KACxB,UAAW,aACX,SAAU,GACV,SAAAz8K,EACA,gBAAiB,IAAM,CACrBy8K,EAAe,KAAK,QACtB,EACA,QAAArjK,CAAA,CACD,EAGE,eAAU,OAAOqH,EAAO,IAAI,CACnC,CAEQ,mBAAmBo8J,EAAsBpc,EAAyB,CACxE,YAAK,aAAeoc,EACpB,KAAK,SAASA,CAAY,EACnB,KAAK,aAAaA,EAAcpc,CAAa,CACtD,CAEQ,kBAAiD,CAEvD,OAAO,KAAK,SAAS,aAAa,kBAAkB,eAAe,KAAK,OAAO,SAAU,GAAE,KAAMj4J,IACxF,CACL,OAAQA,EAAM,OACd,OAAQA,EAAM,OAAO,KAAMg2C,GAClBA,EAAY,gBAAkBp7C,GAAUo7C,EAAY,eAAe,EAAI,MAC/E,GAEJ,CACH,CAEA,MAAa,aAAaiiH,EAA8C,CACtE,MAAM1jK,EAAS,KAAK,OACjB,QAAK,iBAAmB,CAAE,MAAM,KAAK,SAAS,gBAAgB,UAAUA,CAAM,EAC/E,OAGF,MAAM2B,EAAa,KAAK,iBAAiB,IAAI,IACpC,CAAC,KAAK,iBAAmB,KAAK,kBAAoBs+K,CAC1D,EAEK,CAAC,UAAAn+K,CAAa,OACd0E,EAASxG,EAAO,WAChB+B,GAAU,MAAM2J,GAAmB,KAAK,kBAAkB,GAAG,OAG7Dw0K,EAAuBxc,EAC1B3hK,aAAkB,UACH2hK,EAAA,QAGZ,MAAA/zE,EAAOuwF,GAAwB,CAACxc,EAEhCuc,EAAkB,KAAK,gBAAkBp0J,GAAY9pB,EAAQ,MAAM+9K,GAAiB,CAIxF,GAHG,CAACn+K,EAAW,GAAKm+K,IAAiB,SAE/B,WAAK,mBAAmBA,EAAcpc,CAAa,EACtD,CAAC/hK,EAAW,GAAG,OAElB,QAAQ,IAAI,CACV,KAAK,SAAS,gBAAgB,UAAU6E,CAAM,EAC9ChG,GAAgB,wBAAwB,CACzC,GAAE,KAAK,CAAC,CAAC2/K,EAAat9K,CAAuB,IAAM,CAClD,GAAG,CAAClB,EAAW,EAAG,OAEfkB,IACDs9K,EAAcA,EAAY,OAAQN,GAAe,CAACA,EAAW,OAAO,gBAAgB,GAGtF,MAAM1uE,EAAmCgvE,EAAY,IAAKN,IACjD,CACL,OAAQx5K,GAAUw5K,EAAW,IAAI,EACjC,YAAaA,EAAW,OAAO,kBAElC,EACI,iBAAc1uE,EAAM,QAEzB,MAAM7tG,EAAM6tG,EAAM,UAAWxxG,GAASA,EAAK,SAAWmgL,CAAY,EAClE,GAAGx8K,IAAQ,GAAI,CACb,MAAM3D,EAAOwxG,EAAM,OAAO7tG,EAAK,CAAC,EAAE,CAAC,EACnC6tG,EAAM,QAAQxxG,CAAI,OAElBwxG,EAAM,QAAQ,CAAC,OAAQ2uE,CAAa,GAGtC,KAAK,cAAc3uE,CAAK,EACzB,EAED,MAAMtnG,EAAW,IAAM,CAChB,aAAQ/H,EAAW4hK,CAAa,EAEjC,KAAK,gBACP,KAAK,eAAe,IAAIzjK,CAAS,EAAE,mBAAqBD,GAAW,CAC9D,KAAK,SAAWA,GACjB,KAAK,OAAO,CACd,CACD,EAED,KAAK,cAAgB,GACvB,EAGF,GAAG2vF,EAAM,CACE9lF,IACT,MACF,CAEO,OAAAA,CAAA,CACR,EAQD,GANAo2K,EAAgB,QAAQ,IAAM,CACzB,KAAK,kBAAoBA,IAC1B,KAAK,gBAAkB,OACzB,CACD,EAEE,CAACtwF,EACK,OAAAswF,CAEX,CAEO,OAAOvc,EAAyB,CAC9B,YAAK,aAAaA,CAAa,EAAE,KAAM75J,GAAaA,KAAY,CACzE,CAEO,UAAU7J,EAAiB,CAMhC,KAAK,iBAAiB,QACtB,KAAK,gBAAkB,OACvB,KAAK,OAASA,CAChB,CAEO,SAAU,CACf,KAAK,UAAU,SACf,KAAK,UAAU,EACf,KAAK,eAAe,WACtB,CACF,CC1XwB,SAAAogL,GAAgBC,EAA2CC,EAA2C,CACrH,OAAApmI,GAAUmmI,EAAQC,CAAM,CACjC,CCDwB,SAAAC,GAAeC,EAAsBC,EAAsB,CACjF,OAAOvmI,GAAUsmI,EAAqCC,EAAqC,CAAC,OAAQ,UAAU,CAAC,GAC7GL,GAAiBI,GAAsC,SAAWC,GAAsC,QAAQ,CACpH,CCJA,SAAwBC,GAAqB34D,EAA8B,CACzE,GAAIA,EAIJ,OAAOA,EAAc,MAAM,KAAM7+F,GAASA,EAAK,OAASy3J,EAAyB,CACnF,CCPA,SAAwBC,GAAS/5K,EAAc,CAC7C,OAAQA,EAAcA,EAAK,MAAMg6K,EAAW,EAA7B,IACjB,CCIwB,SAAAC,GAA6CjqI,EAAYkqI,EAAoB,CACnG,MAAMh/K,EAAgE,GACtE80C,EAAM,QAASu2C,GAAQrrF,EAAOqrF,CAAG,EAAI,CAAC,SAAU,CAAC,EAAG,OAAQ,EAAM,GAC5D,MAAA5kD,EAAY,OAAO,eACzB,GAAGA,EAAU,YACJ,OAAAzmC,EAGH,MAAA0mC,EAAQD,EAAU,WAAW,CAAC,EAC9Bw4I,EAAiBv4I,EAAM,wBAIvBw4I,GAHOD,EAAe,WAAaA,EAAe,aACtDA,EACCA,EAA6B,eACH,QAAQ,0BAA0B,EAC/D,GAAG,CAACC,EACK,OAAAl/K,EAGT,MAAMm/K,EAAa,SAAS,iBAC1BD,EACA,WAAW,aAAe,WAAW,UACrC,CAAC,WAAavmK,GAAS+tB,EAAM,eAAe/tB,CAAI,EAAI,WAAW,cAAgB,WAAW,aAAa,GAGzG,IAAeA,EACT,KAAAA,EAAOwmK,EAAW,YAEtB,UAAU78J,KAAQwyB,EAAO,CACjB,MAAAu2C,EAAM+zF,GAAa98J,CAAI,EACvB+8J,EAAQ1mK,EAAK,WAAaA,EAAK,aAAeA,EAAsBA,EAAK,cAC/D0mK,EAAM,QAAQh0F,EAAI,KAAK,GAErCrrF,EAAOsiB,CAAI,EAAE,SAAS,KAAK+8J,CAAK,CAEpC,CAGF,UAAU/8J,KAAQwyB,EACT90C,EAAAsiB,CAAI,EAAE,OAAStiB,EAAOsiB,CAAI,EAAE,SAAS,QAA8B,EAGrE,OAAAtiB,CACT,CCxBA,MAAqBs/K,EAAc,CAiBjC,aAAc,CAZd,KAAQ,QAAuD,GAI/D,KAAQ,cAAgB,GACxB,KAAQ,kBAAoB,GAG5B,KAAQ,eAAyB,EA0VzB,qBAAmB,GAAc,CAIvC,GAFA,KAAK,kBAAoB,GAEtB1vJ,GAEE,GADH,GAAK/U,GAAY,CAAC,EACf,KAAK,mBAAqB,EACtB,oBAAe,KAAK,UAAU,MAC9B,CACL,KAAK,KAAK,EACV,MACF,CAGF,KAAK,KAAK,EAlWZ,CAEA,OAAc,aAAc,CACnB,YAAK,WAAL,KAAK,SAAa,IAAIykK,GAC/B,CAEQ,MAAO,CACR,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,iBAAkB,YAAa,MAAM,EAE7D,aAAU,SAAS,cAAc,KAAK,EACtC,aAAQ,UAAU,IAAI,wBAAwB,EAE7C,MAAAC,EAAS,SAAS,cAAc,KAAK,EACrCC,EAAS,SAAS,cAAc,KAAK,EACpCD,EAAA,UAAU,IAAI,uBAAwB,8BAA8B,EACpEC,EAAA,UAAU,IAAI,uBAAwB,2BAA2B,EAEoB,CAC1F,OACA,SACA,YACA,gBACA,YACA,UACA,CAAC,QAAS,eAAe,EACzB,QAEE,QAAStoK,GAAM,CACjB,MAAMoL,EAAO,OAAOpL,GAAO,SAAWA,EAAIA,EAAE,CAAC,EACvCiQ,EAAO,OAAOjQ,GAAO,SAAWA,EAAIA,EAAE,CAAC,EACvCkX,EAASoR,GAAWrY,EAAM,CAAC,SAAU,GAAK,EAChDo4J,EAAO,OAAO,KAAK,QAAQj9J,CAAI,EAAI8L,CAAM,EAEtClX,IAAM,OACAkX,EAAA,iBAAiB,YAAc5jB,GAAM,CAC1CqQ,GAAYrQ,CAAC,EACCi1K,GAAA,KAAK,MAAOn9J,CAAI,EAC9B,KAAK,gBAAgB,EAKtB,EAEgBxH,EAAAsT,EAAS5jB,GAAM,CAC9BqQ,GAAYrQ,CAAC,EACb,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACtB,CACH,CACD,EAED,KAAK,eAAiBg1B,GAAW,OAAQ,CAAC,SAAU,GAAK,EACpD,eAAY,SAAS,cAAc,OAAO,EAC/CxgC,GAAM,KAAK,UAAW,gCAAiC,OAAW,aAAa,EAC1E,eAAU,UAAU,IAAI,aAAa,EAC1C,KAAK,UAAU,iBAAiB,UAAYwL,GAAM,CAC1C,MAAAu+C,EAAQ,CAAC,KAAK,UAAU,MAAM,QAAU,CAAC,CAAC81H,GAAS,KAAK,UAAU,KAAK,EAE1Er0K,EAAE,MAAQ,UACPu+C,EAQF,KAAK,UAAUv+C,CAAC,GAPb,KAAK,UAAU,UAAU,SAAS,OAAO,IACrC,eAAU,UAAU,OAAO,OAAO,EAClC,KAAK,UAAU,YAGjB,eAAU,UAAU,IAAI,OAAO,GAIxC,CACD,EAED,KAAK,UAAU,iBAAiB,QAAUA,GAAM,CACxC,MAAAu+C,EAAQ,KAAK,cAEnB,KAAK,UAAU,UAAU,OAAO,WAAYA,CAAK,EAC5C,eAAU,UAAU,OAAO,OAAO,EACxC,EAED,KAAK,eAAe,iBAAiB,YAAcv+C,GAAM,CAEvDqQ,GAAYrQ,CAAC,EACR,eAAU,UAAU,OAAO,SAAS,EAEzC,KAAK,eAAe,EACpB,KAAK,mBAAmB,EACxB,KAAK,gBAAgB,EACtB,EAED,KAAK,gBAAkBg1B,GAAW,kCAAmC,CAAC,SAAU,GAAK,EACrF,KAAK,gBAAgB,iBAAiB,YAAch1B,GAAM,CAExD,KAAK,UAAUA,CAAC,EACjB,EAEK,MAAAk1K,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qCAAqC,EAEtD,MAAAC,EAAa,SAAS,cAAc,MAAM,EAC1CC,EAAa,SAAS,cAAc,MAAM,EAC1CC,EAAa,SAAS,cAAc,MAAM,EACrCF,EAAA,UAAU,IAAI,0BAA0B,EACxCC,EAAA,UAAU,IAAI,0BAA0B,EACxCC,EAAA,UAAU,IAAI,0BAA0B,EACnDN,EAAO,aAAaI,EAAY,KAAK,QAAQ,IAAI,EACxCD,EAAA,OAAOG,EAAY,KAAK,eAAe,EAChDL,EAAO,OAAO,KAAK,eAAgBI,EAAY,KAAK,UAAWF,CAAQ,EAGlE,aAAQ,OAAOH,EAAQC,CAAM,EAC7B,eAAU,OAAO,KAAK,OAAO,EACzB,cAAK,OAAO,KAAK,SAAS,EAE5B,wBAAiB,SAAU,IAAM,CACtC,KAAK,KAAK,EACX,CACH,CAEO,gBAAiB,EACnB,CAAC,KAAK,WAAa,CAAC,KAAK,UAAU,UAAU,SAAS,YAAY,IACnE,KAAK,KAAK,EAGN,MAAApxJ,EAAS,KAAK,QAAQ,KACvB,eAAU,UAAU,IAAI,SAAS,EAEhC,MAAAqY,EAAY,SAAS,eACtB,gBAAaA,EAAU,WAAW,CAAC,EAGlC,MAAApL,EADS0jJ,GAAqB,CAAC,MAAM,CAAC,EACtB,KAAQ,SAAS,KAAMtsK,GAAYA,EAAQ,UAAY,GAAG,EAE7E2b,EAAO,UAAU,SAAS,QAAQ,EAC9B,eAAU,MAAQiN,EAAO,KAE9B,KAAK,UAAU,MAAQ,GAGzB,KAAK,mBAAmB,EAAI,EAE5B,WAAW,IAAM,CACf,KAAK,UAAU,SACd,GAAG,EACN,KAAK,UAAU,UAAU,OAAO,WAAY,KAAK,aAAa,CAChE,CAEQ,UAAU,EAAU,CAC1BxgB,GAAY,CAAC,EACb,KAAK,eAAe,EAChB,IAAAnT,EAAM,KAAK,UAAU,MACtBA,GAAO,CAACo4K,GAAiBp4K,CAAG,IAC7BA,EAAM,WAAaA,GAEP+3K,GAAA,KAAK,MAAO,OAAQ/3K,CAAG,EACrC,WAAW,IAAM,CACf,KAAK,KAAK,GACT,CAAC,CACN,CAEQ,aAAc,CACb,OAAC,KAAK,UAAU,MAAM,QAAU,CAAC,CAACm3K,GAAS,KAAK,UAAU,KAAK,CACxE,CAEQ,eAAen4I,EAAe,KAAK,WAAY,CAC/C,MAAAD,EAAY,OAAO,eACzBA,EAAU,gBAAgB,EAC1BA,EAAU,SAASC,CAAK,EACxB,KAAK,MAAM,OACb,CAEO,MAAO,CAGT,KAAK,OAER,KAAK,MAAQ,OACR,eAAU,UAAU,OAAO,YAAY,EAEnC,6BAAoB,UAAW,KAAK,eAAe,EAC5D,KAAK,kBAAoB,GAEzB3W,GAAwB,aAAa,QAAQ,EAE1C,KAAK,aAAa,aAAa,KAAK,WAAW,EAC7C,iBAAc,OAAO,WAAW,IAAM,CACzC,KAAK,YAAc,OACd,eAAU,UAAU,IAAI,MAAM,EAC9B,eAAU,UAAU,OAAO,SAAS,GACxC,GAAG,EACR,CAEO,uBAAwB,CACvB,MAAAgwJ,MAAuC,IAgBvCjrI,EAAQ,OAAO,KAAK,KAAK,OAAO,EAChCkrI,EAASjB,GAAqBjqI,CAAK,EACnC,OAAAA,EAAA,QAASxyB,GAAS,CACnB09J,EAAO19J,CAAI,EAAE,QACdy9J,EAAe,IAAI,KAAK,QAAQz9J,CAA0B,CAAC,CAC7D,CACD,EAEM,CAAC,GAAGy9J,CAAc,CAC3B,CAEO,uBAAwB,CACvB,MAAAE,EAAgB,KAAK,wBAEjB,UAAAt+K,KAAK,KAAK,QAAS,CAErB,MAAAysB,EAAS,KAAK,QAAQzsB,CAAC,EAC7BysB,EAAO,UAAU,OAAO,SAAU6xJ,EAAc,SAAS7xJ,CAAM,CAAC,CAClE,CACF,CAEQ,mBAAmB8xJ,EAAe,GAAO,CAEzC,MAAAx5I,EADY,SAAS,eACH,WAAW,CAAC,EAE9By5I,EAAc38J,EAAgB,KAAK,MAAO,cAAc,GAC5DA,EAAgB,KAAK,MAAO,yBAAyB,GACrDA,EAAgB,KAAK,MAAO,aAAa,EACrC48J,EAAe,KAAK,UAAU,UAAU,SAAS,SAAS,EAAI,KAAK,QAAQ,iBAAmB,KAAK,QAAQ,kBAC3GC,EAAW,SAAS,KAAK,sBAAsB,EAC/CC,EAAgB55I,EAAM,wBACtB65I,EAAYJ,EAAY,wBACxBK,EAAYJ,EAAa,wBAE/B,KAAK,UAAU,MAAM,SAAWG,EAAU,MAAQ,KAElD,MAAM78G,EAAcpgB,GAClB,OACA,KAAK,MACL,GACAg9H,CAAA,EAGI,CAAC,UAAA1yH,EAAY,EAAG,UAAA6yH,EAAY7yH,GAAa,KAAK,MAEpD,GAAG,CAAC8V,EACF,OAKF,MAAMxuC,GAFgBwuC,EAAcA,EAAY,KAAK,IAAM68G,EAAU,KAAgCF,EAAS,IAAM,GAEzFG,EAAU,OAAS,GAAYC,EAAY7yH,GAEhE2gC,EAAOgyF,EAAU,KACjB/xF,EAAQ+xF,EAAU,KAAOA,EAAU,MAAS,KAAK,IAAIA,EAAU,MAAOC,EAAU,KAAK,EACvF,IAAAvrJ,EACJ,GAAGirJ,EAAc,CACT,MAAAh9H,EAAgB,KAAK,UAAU,sBAAsB,EAC3DjuB,EAAOwE,GAAMypB,EAAc,KAAMqrC,EAAMC,CAAI,MACtC,CACL,MAAMp+D,EAAIkwJ,EAAc,MAAQA,EAAc,MAAQE,EAAU,OAAS,EAClEvrJ,EAAAwE,GAAMrJ,EAAGm+D,EAAMC,CAAI,CAC5B,CAMA,KAAK,UAAU,MAAM,UAAY,eAAev5D,CAAI,OAAOC,CAAG,QAChE,CAEO,MAAO,CAMZ,GALG,KAAK,OACN,KAAK,KAAK,EACV,KAAK,KAAO,MAGXuyI,KAAoB,CACrB,KAAK,KAAK,EACV,MACF,CAMA,GAJG,KAAK,cAAgB,QACtB,aAAa,KAAK,WAAW,EAG5B,KAAK,UAAU,UAAU,SAAS,YAAY,EAC/C,OAGF,KAAK,UAAU,UAAU,OAAO,QAAS71I,GAAe,mBAAmB,EAE3E,KAAK,sBAAsB,EAEtB,eAAU,UAAU,OAAO,SAAS,EACzC,MAAM8uJ,EAAc,KAAK,UAAU,UAAU,SAAS,MAAM,EACzDA,IACI,eAAU,UAAU,OAAO,MAAM,EACjC,eAAU,UAAU,IAAI,eAAe,GAG9C,KAAK,mBAAmB,EAErBA,IACI,KAAK,UAAU,WACf,eAAU,UAAU,OAAO,eAAe,GAG5C,eAAU,UAAU,IAAI,YAAY,EAErCjuJ,IACF1C,GAAwB,SAAS,CAC/B,KAAM,SACN,MAAO,IAAM,CACX,KAAK,KAAK,CACZ,EACD,CAIL,CA6BO,iBAAkB,CACpB,KAAK,oBACR,KAAK,kBAAoB,GAIzB,SAAS,iBAAiB,UAAW,KAAK,gBAAiB,CAAC,KAAM,GAAK,EACzE,CAEO,iBAAkB,CACpBH,IAAsB,CAAC4F,KACf,6BAAoB,UAAW,KAAK,eAAe,EACnD,0BAAiB,UAAY,GAAM,CAC1C3a,GAAY,CAAC,EACb,KAAK,eAAiB,EACtB,KAAK,kBAAoB,GACzB,KAAK,gBAAgB,GACpB,CAAC,KAAM,GAAK,EAEnB,CAEO,eAAe+V,EAAgB,CACpC,OAAOA,EAAM,UAAU,SAAS,qBAAqB,GAAKA,EAAM,aAAa,YAAY,CAC3F,CAEO,iBAAkB,CACpB,KAAK,gBACR,KAAK,cAAgB,GACZ,0BAAiB,kBAAoB,GAAM,CAG/C,YAAS,gBAAkB,KAAK,UACjC,OAGF,MAAM+vJ,EAAgB,SAAS,cAC5B,QAAK,MAAQA,IAAkB,KAAK,MAAQ,CAAC,KAAK,eAAeA,CAAa,EAAG,CAClF,KAAK,KAAK,EACV,MACF,CAEM,MAAAl6I,EAAY,SAAS,eACxB,GAAAghI,GAAiBhhI,CAAS,EAAG,CAC9B,KAAK,KAAK,EACV,MACF,CAIA,GAFA,KAAK,MAAQk6I,EAEV/wJ,GACD,GAAG4F,GACD,KAAK,KAAK,EACV,KAAK,mBAAmB,MACnB,CACF,QAAK,iBAAmB,EAAG,CAC5B,KAAK,eAAiB,EACtB,MACF,CAEK,gBAAaiR,EAAU,WAAW,CAAC,EACxC,KAAK,gBAAgB,CAMvB,MACQ,KAAK,WAAa,KAAK,UAAU,UAAU,SAAS,YAAY,GACxE,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,GAChB,KAAK,MAAM,QAAQ,SAAS,EACpC,KAAK,gBAAgB,EAErB,KAAK,KAAK,CACZ,CACD,EAEQ,0BAAiB,cAAgB,GAAM,EAC3C,EAAE,YAAc,eAAiB,EAAE,YAAc,gBAChD,SAAO,iBAAiB,QAAS,IAAM,KAAK,wBAAyB,CAAC,KAAM,GAAK,CACrF,CACD,EACH,CACF,CCveA,SAAwBm6I,GAAkBl6I,EAAsB,CAExD,MAAAyxC,EAAW,SAAS,cAGvB,GAAAzxC,EAAM,aAAa,WAAa,KAAK,WAAaA,EAAM,UAAYA,EAAM,aAAa,UAAW,OACnG,OAAAyxC,EAAS,SAASzxC,EAAM,aAAcA,EAAM,SAAS,EACrDyxC,EAAS,OAAOzxC,EAAM,aAAcA,EAAM,UAAY,CAAC,EAChDyxC,EAAS,WAIZ,MAAA0oG,EAAeC,GAAiBp6I,EAAM,YAAY,EACxD,GAAGm6I,EACQ,OAAA1oG,EAAA,SAAS0oG,EAAc,CAAC,EACxB1oG,EAAA,OAAO0oG,EAAc,KAAK,IAAIA,EAAa,UAAU,OAAQ,CAAC,CAAC,EACjE1oG,EAAS,UAEpB,CAEA,SAAS2oG,GAAiBnoK,EAAkB,CACpC,KAAAA,GAAQ,CAACA,EAAK,aAClBA,EAAOA,EAAK,WAGX,GAAAA,GAAQA,EAAK,YACP,OAAAooK,GAAkBpoK,EAAK,WAAW,CAE7C,CAEA,SAASooK,GAAkBpoK,EAAkB,CACxC,GAAAA,EAAK,WAAa,KAAK,UACjB,OAAAA,EAGT,QAAQhX,EAAI,EAAGA,EAAIgX,EAAK,WAAW,OAAQhX,IAAK,CACxC,MAAA2oC,EAAQ3xB,EAAK,WAAWhX,CAAC,EACzB3B,EAAS+gL,GAAkBz2I,CAAK,EACtC,GAAGtqC,EACM,OAAAA,CAEX,CACF,CCxBA,MAAMghL,OAAe,QAyBd,SAASC,GAAwBrwJ,EAAoB,CACpD,MAAAvkB,EAAQ20K,GAAS,IAAIpwJ,CAAK,EAC5BvkB,IAIJA,EAAM,gBAAkB,GACxBA,EAAM,YAAY,OAAS,EAC3BA,EAAM,gBAAgB,OAAS,EAC/BA,EAAM,gBAAkB,GAC1B,CAEO,SAAS60K,GAAsBtwJ,EAAoB,CAClD,MAAAvkB,EAAQ20K,GAAS,IAAIpwJ,CAAK,EAC5BvkB,GAIDA,EAAM,iBAAmB,CAACA,EAAM,UAAYukB,EAAM,YAAcvkB,EAAM,kBACvEA,EAAM,gBAAkB,GACxBA,EAAM,YAAY,OAAS,EAE/B,CA0CgB,SAAAozK,GAAc7uJ,EAAoBtO,EAAoB+6E,EAAe,CAGnF,MAAM8jF,EAAsE,CAM1E,KAAM9jF,EAAO,IAAM,SAAS,YAAY,aAAc,GAAOA,CAAI,EAAI,IAAM,SAAS,YAAY,SAAU,GAAO,IAAI,GAKjHnmF,EAAKoL,GAAuB,CACpBA,GAAI,EAAI,IAAM,CACxB,MAAM5e,GAAK09K,EAAW,SAAS9+J,CAAI,EAAI8+J,EAAa,CAAC9+J,CAAI,GAAG,OAAQA,GAAS++J,EAAU/+J,CAAI,GAAG,MAAM,EAKpG,GAJIpP,GAAiBxP,EAAG4e,CAAI,GAC1B5e,EAAE,KAAK4e,CAAI,EAGVA,IAAS,QAAmC,CACvC,MAAAmkB,EAAY,SAAS,eACxBA,EAAU,YAAcm6I,GAAkBn6I,EAAU,WAAW,CAAC,CAAC,IAAM;AAAA,GAE9DA,EAAA,OAAOA,EAAU,YAAc,OAAS,SAAgC,UAAW,WAAW,CAE5G,CAEI,IAAAl5B,EACD,OAAC7J,EAAE,OAGE6J,EAAA,SAAS,YAAY,WAAY,GAAO,UAAY7J,EAAE,KAAK,GAAG,CAAC,EAFrE6J,EAAM+zK,GAA2B,EAKnCC,GAAyB3wJ,CAAK,EAEvBrjB,CAAA,CACT,EAGI6zK,EAA8B,CAAC,OAAQ,SAAU,YAAa,gBAAiB,UAAW,OAAO,EAOpG,GANQA,EAAA,QAAS9+J,GAAS,CAC3BpL,EAAEoL,CAAI,EACP,EAEDpL,EAAE,WAAW,EAEV,CAACiqK,EAAY7+J,CAAI,EACX,SAGH,MAAAskG,EAAUu6D,EAAY7+J,CAAI,EAK1Bk/J,EAAkB,GA0DlBC,EADmBvpG,GAAiB,cACT,0BAE3B3iD,EAA2C,CAAC,QAAS,GAAM,QAAS,EAAK,EACzE3E,EAAA,iBAAiB,QAAS/V,GAAa0a,CAAe,EAE5DisJ,EAAS,KAAK,SAAS,YAAY,eAAgB,GAAO,MAAM,CAAC,EAEjE,MAAMH,EAAYtC,GAAqB,OAAO,KAAKoC,CAAW,CAAoB,EAmBhF,OAAGE,EAAU,WAAc,QAAU/+J,IAAS,QACnCk/J,EAAA,KAAKE,IAAwB,EAG/BF,EAAA,KAAK,OAAO56D,GAAa,WAAaA,EAAA,EAAY,SAAS,YAAYA,EAAS,GAAO,IAAI,CAAC,EAGvG46D,EAAS,KAAK,SAAS,YAAY,eAAgB,GAAO,OAAO,CAAC,EAE1DC,IAIMnC,GAAA,cAAc,wBAOtB1uJ,EAAA,oBAAoB,QAAS/V,GAAa0a,CAAe,EAC/DxE,GAAcH,EAAO,OAAO,EAErB,EACT,CAEO,SAAS2wJ,GAAyB3wJ,EAAoB,CAE1DA,EAAM,iBAAiB,wBAAwB,EAA8B,QAASne,GAAY,CAC9F,GAAAA,EAAQ,MAAM,WAAY,CAC3BA,EAAQ,MAAM,QAAU,GACxB,MACF,CAEM,MAAAkvK,EAAalvK,EAAQ,MAAM,WAC9BkvK,IAAeC,KAIVnvK,EAAA,UAAU,IAAI,WAAW,EACjCA,EAAQ,QAAQ,OAASkvK,EACzB/vK,GAAaa,CAAO,EAEjBkvK,EAAW,SAAS,OAAO,GAC5BlvK,EAAQ,UAAU,IAAI,aAAc,kBAAmB,mBAAmB,EAC5E,CACD,EAEAme,EAAM,iBAAiB,YAAY,EAA8B,QAASne,GAAY,CAC/E,MAAAkvK,EAAalvK,EAAQ,MAAM,WAC9BkvK,GAAcA,IAAeC,KAI5BD,EAAW,SAAS,OAAO,GAC7BlvK,EAAQ,UAAU,OAAO,aAAc,kBAAmB,mBAAmB,EAGvEA,EAAA,UAAU,OAAO,WAAW,EACpC,OAAOA,EAAQ,QAAQ,QACxB,CAEH,CAEO,SAASivK,IAAyB,CACvC,OAAO,SAAS,YAAY,eAAgB,GAAO,IAAI,CACzD,CAEO,SAASJ,IAA6B,CAC3C,OAAO,SAAS,YAAY,WAAY,GAAOM,EAAc,CAC/D,CAEgB,SAAAC,GAAuBjxJ,EAAoB,EAAkB,CAE3E,MAAMkxJ,EAA4C,CAChD,KAAQ,OACR,KAAQ,SACR,KAAQ,YACR,KAAQ,gBACR,KAAQ,YACR,KAAQ,WAIRA,EAAW,KAAU,OAGvB,MAAM96H,EAAO,EAAE,KACT+6H,EAAeD,EAAW96H,CAAI,EAE9BvgB,EAAY,SAAS,eACxB,CAACghI,GAAiBhhI,CAAS,GAAKs7I,IAE9B/6H,IAAS,OACIs4H,GAAA,cAAc,iBAE5BG,GAAc7uJ,EAAOmxJ,CAAY,EAGnClnK,GAAY,CAAC,EA4BjB,CC9WA,SAAwBmnK,GAAYl6K,EAAqBm6K,EAA8BC,EAAW,GAAM,CACtG,MAAMhzG,EAAS,IAAM,CACnB,aAAa30D,CAAO,GAIhB4nK,EAAYr6K,EACdo6K,IACSp6K,EAAA4X,IAGT,IAAAnF,EACJ,OAAC,SAAS6nK,GAAM,CACLt6K,IACCyS,EAAAktB,GAAI,WAAW26I,EAAK,KAAK,IAAI,EAAGH,EAAgB,EAAC,KAGlDn6K,EAAAq6K,EAEJjzG,CACT,CCrBwB,SAAAmzG,GAAWv6K,EAAqBo6K,EAAoB,CACnE,OAAAF,GAAYl6K,EAAU,IAAM,QAAW,OAAO,kBAAmBo6K,CAAQ,CAClF,CCyHA,MAAMI,GAAkB,IAClBC,GAAiB,GAEV5qG,GAAkE,CAC7E,YAAa,8BACb,cAAe,iCACf,UAAW,4BACX,WAAY,8BACZ,WAAY,8BACZ,WAAY,8BACZ,YAAa,8BACf,EAMMjtC,GAAa,aACb83I,GAAsB,QAAc,CAACvnG,GAAS,UAAWA,GAAS,QAASA,GAAS,KAAK,CAAC,EAE3EwnG,GAArB,MAAqBA,EAAU,CA8L7B,YACSp9I,EACChD,EACAhkC,EACA6b,EACR,CAJO,UAAAmrB,EACC,kBAAAhD,EACA,cAAAhkC,EACA,eAAA6b,EAxLV,KAAO,QAAU,GACjB,KAAQ,aAAe,EAkBvB,KAAQ,cAQJ,GAyBJ,KAAO,gBAA2B,KAClC,KAAO,eAAkF,GAkBzF,KAAO,UAAY,GACnB,KAAQ,eAAiB,GAGzB,KAAQ,gBAAkB,EA2kC1B,KAAO,cAAgB,MAAM41D,EAAqB5+D,EAAkBC,IAAqB,CACpF,SAAM,KAAK,4BAA4B,CACxC,QAAS,KAAK,WACf,EACC,OAGI,MAAAvH,EAAU,KAAK,qBAAuBe,GAAgB,EAC5D,KAAK,UAAU,MAAQ,GAEvBf,EAAQ,QAAQ,IAAM,CACLsxH,GAAA,oBAAoB,SAAUwnD,CAAY,EAC1C,KAAK,oBAEpB,CACD,EAEK,MAAAA,EAAgBC,GAAkB,CACnC,GAAA/4K,IAAY,KAAK,qBAAsB,CACxCA,EAAQ,OAAO,EACf,MACF,CAEI+4K,GACF,WAAW,IAAM,CACf/4K,EAAQ,OAAO,GACd,GAAI,CACT,EAIF,GAFesxH,GAAA,iBAAiB,SAAUwnD,CAAY,EAEnD5yG,EACI,eAAU,gBAAgB,QAAQ,EACvC,KAAK,eAAiB,eACjB,CACL,MAAM8yG,EAAS,CACb,GAAI1xK,EAASumK,GAA6B,CAAC,EAC3C,GAAItmK,EAASumK,GAA6B,CAAC,GAC3C,KAAK,IAAI,EAEX,KAAK,UAAU,aAAa,SAAUkL,GAAU,KAAK,EACrD,KAAK,eAAiB,OACxB,CAEA,KAAK,UAAU,QACV,uBAAkB,KAAK,oBAAoB,GA6FlD,KAAO,YAAc,IAAM,CACnB,MAAAhrJ,EAAS,KAAK,8BAAgCpJ,GAAiB,CAAC,KAAK,UAAU,EAAG,EAAI,EACtFvwB,EAAS,KAAK,KAAK,OACnB2B,EAAa,KAAK,cAAc,IAC7B,KAAK,KAAK,SAAW3B,GAAU,KAAK,gCAAkC25B,CAC9E,EAED,KAAK,SAAS,gBAAgB,YAAY35B,EAAQ,EAAK,EAAE,KAAK,IAAM,CAC/D2B,MACMg4B,IACP,KAAK,8BAAgC,OACvC,CACD,GAGH,KAAO,SAAW,IAAM,CAChB,MAAC,WAAAsnG,CAAc,OAEftnG,EAAS,KAAK,8BAAgCpJ,GAAiB,CAAC,KAAK,WAAW,EAAG,EAAI,EACvFvwB,EAAS,KAAK,KAAK,OACnB2B,EAAa,KAAK,cAAc,IAC7B,KAAK,KAAK,SAAW3B,GAC1B,KAAK,aAAeihI,GACpB,KAAK,gCAAkCtnG,CAC1C,EAEI,cAAS,mBAAmB,SAAS35B,EAAO,WAAY,OAAWihI,CAAU,EAAE,KAAK,IAAM,CAC1Ft/H,MACMg4B,IACP,KAAK,8BAAgC,OACrC,KAAK,cAAc,EACrB,CACD,GAiEK,yBAAuBptB,GAAc,CACxCA,GACDqQ,GAAYrQ,CAAC,EAGf,KAAK,eAAiB,GACtB,KAAK,SAAS,OACdq4K,GAAqB,aAAa,EAAK,GAGjC,uBAAqBxyJ,GAAkB,CACzC,KAAK,qBAILT,GAGFkrC,GAAkB,KAAK,mBAAoBzqC,EAAO,WAAa,OAAO,EAFtE,KAAK,mBAAmB,UAAU,OAAO,SAAUA,CAAI,EAGzD,EAGF,KAAQ,gBAAkB,IAAM,CAC9B,KAAK,kBAAkB,EAAI,GAG7B,KAAQ,iBAAmB,IAAM,CAC/B,KAAK,kBAAkB,EAAK,GAO9B,KAAO,kBAAoB,SAAW,CAC9B,MAAApyB,EAAS,KAAK,KAAK,OAKzB,OAJGC,EAAU,OAASD,GAAU,CAACA,EAAO,UAIrC,CAAE,MAAM,KAAK,SAAS,gBAAgB,oBAAoBA,CAAM,EAC1D,IAGI,MAAM,KAAK,SAAS,gBAAgB,QAAQA,CAAM,GACnD,QAAQ,IAAM,oBA+B5B,KAAO,gBAAkB,MACvB6J,EAAuB,KAAK,YAAY,KAAK,KAAM,EAAI,EACvDw0E,EAAe,WACZ,CACG,MAAA18E,EAAa,KAAK,gBAClBkjL,EAAoB,MAAM,KAAK,oBACjCljL,KAIJmuB,GAAa,YAAYkwE,GAAe,CACtC,SAAA3hB,EACA,OAASziB,GAAc,CACjBj6D,KAIC,0BAAqBi6D,EAAW/xD,CAAQ,CAC/C,EACA,kBAAAg7K,CAAA,CACD,EAAE,KAAK,GAiyBH,oBAAkBt4K,GAAc,CAe/B,MAAC,MAAOu4K,EAAW,SAAUC,EAAmB,SAAAC,CAAY,EAAArV,GAAsB,KAAK,kBAAkB,KAAK,EAG9G,CAAC14J,EAAOguK,CAAgB,EAAI/G,GAAc4G,EAAWC,CAAuB,EAC5Ej+K,EAAWuE,GAAc45K,EAAkB95K,GAAc8L,CAAK,CAAC,EASrE,GALAgsK,GAAsB,KAAK,YAAY,EAElC,oBAAe6B,EAAWh+K,CAAQ,EAEvB,CAACg+K,EAAU,OAEtB,KAAK,cACN,KAAK,SAAS,mBAAmB,UAAU,KAAK,KAAK,OAAQ,CAAC,EAAG,yBAAyB,EAAG,OAAW,KAAK,KAAK,QAAQ,EAG9GzD,GAAA,cAAc,OAIzB,SAAS,gBAAkB,KAAK,cAAgB,CAAC7sJ,IAClD,WAAW,IAAM,CACZ,SAAS,gBAAkB,KAAK,eACjC,KAAK,aAAa,YAAc,IAChC8Y,GAAgB,KAAK,YAAY,EACjC,KAAK,aAAa,YAAc,KAEjC,CAAC,MAED,CACC,MAAA5S,EAAO,KAAK,MACdA,EAAO,KAAK,cAAiB,KAAQnuB,GAAG,YAC1C,KAAK,aAAemuB,EACpB,KAAK,SAAS,mBAAmB,UAAU,KAAK,KAAK,OAAQ,CAAC,EAAG,yBAAyB,EAAG,OAAW,KAAK,KAAK,QAAQ,GAGvH,kBAAa,OAAO,EAAI,CAC/B,CAEG,KAAK,aACN,KAAK,wBAAwB,EAG5B,CAAC,KAAK,WAAa,CAAC,KAAK,wBAC1B,KAAK,mBAAmB,EAGrB,uBAAkBoqJ,EAAWE,EAAUl+K,CAAQ,EAEpDw8K,GAAyB,KAAK,YAAY,EAE1C,KAAK,cAAc,GAgOd,qBAAkB,CAACp8K,EAA+Cg+K,IAA0B,CAC3F,MAAAn+K,EAAwBG,EAAM,MAAQ,CAC1C,EAAG,2BACH,YAAaA,EAAM,MACnB,OAAQA,EAAM,MAAM,OACpB,OAAQ,GACND,GAAwBC,EAAM,KAAK,EACvC,YAAK,cAAcA,EAAM,MAAOH,EAAQm+K,CAAY,EAC7C,IAgPD,oBAAiB,MAAM34K,GAAa,CAC1CqQ,GAAYrQ,CAAC,EAEPipK,QAAe,KAAK,eACvB,QAAK,KAAK,OAASx4F,GAAS,SAAWw4F,GAAgB,CAAC,KAAK,gBAAkB,KAAK,gBAAiB,CACtG,KAAK,uBAAuBjpK,CAAe,EAC3C,MACF,SAAU,CAAC,KAAK,UAAY,KAAK,WAAa,CAACipK,GAAgB,KAAK,YAAc,KAAK,UAClF,KAAK,UACF,KAAK,MAAQ,KAAK,gBAAmB6O,GACvC,KAAK,oBAAoB,EAEzB,KAAK,SAAS,OAGhB,KAAK,YAAY,MAEd,CACL,MAAM5yB,EAAY,KAAK,KAAK,OAAO,UAAU,EACvCv0G,EAAmB,cACzB,GAAGu0G,GAAa,CAAE,MAAM,KAAK,KAAK,QAAQv0G,CAAI,EAAI,CAChD1qB,GAAS,CAAC,YAAaknD,GAAwBx8B,CAAI,CAAE,GACrD,MACF,CAEG,SAAM,KAAK,8BACZ,OAGG,eAAU,UAAU,IAAI,WAAW,EACtBo2B,KAElB,IAAI6xG,EAAa,GAYjB,GAXI1zB,IACe,MAAM,KAAK,SAAS,kBAAkB,WAAW,KAAK,KAAK,OAAO,SAAU,KAChF,OAAO,2BACTj/H,GAAA,CACP,YAAa,8BACb,kBAAmB,CAAC,MAAM7f,GAAc,CAAC,OAAQ,KAAK,KAAK,MAAM,CAAC,CAAC,EACpE,EACYwyK,EAAA,IAIdA,EAAY,CACR,eAAU,UAAU,OAAO,WAAW,EAC3C,MACF,CAEA,KAAK,SAAS,MAAQ,OAAK,IAAM,CAC1B,0BAAuB7wH,GAA2B,iBACvD,KAAK,eAAiB,GAEtB,KAAK,aAAa,EAAI,EACtBswH,GAAqB,aAAa,EAAI,EAEtC,MAAMQ,EAAmB,IAAM,CAChBt1J,GAAA,YAAYD,GAAW,sBAAuB,CACzD,aAAc,2BACd,mBAAoB,iCACpB,QAAS,CAAC,CACR,QAAS,4BACT,SAAU,IAAM,CACdymB,GAAmB,KAAK,eAAe,CACzC,GACC,CACD,QAAS,WACT,SAAU,GACX,EACF,EAAE,KAAK,GAGL,8BAA2B,KAAK,eAAe,IAAI,SAAS,IAAI,EAAE,YAAc/pC,GAAM,CACtF,CAACgZ,EAAgBhZ,EAAE,OAAQkgC,EAAU,GAAK,CAAClnB,EAAgBhZ,EAAE,OAAQ,qBAAqB,IAC3FqQ,GAAYrQ,CAAC,EACI64K,MAElB,CAAC,QAAS,GAAM,QAAS,EAAM,GAEVtzJ,GAAA,SAAS,KAAK,wBAA0B,CAC9D,KAAM,QACN,MAAO,KACL,WAAW,IAAM,CACEszJ,KAChB,CAAC,EAEG,GACT,CACD,EAEI,qBAAkB,KAAK,MAEtB,MAAAC,EAAyC,KAAK,SAAS,WAGvD3qC,EAFU2qC,EAAW,QAEF,iBACzBA,EAAW,QAAQ3qC,CAAQ,EAE3BA,EAAS,QAAU,GAEnB,MAAM4qC,EAAgB,IAAI,WAAW5qC,EAAS,iBAAiB,EACzDp+F,EAAMgpI,EAAc,OAAS,IAC7BjpI,EAAM,GAAK,IACXvrC,EAAI,IAAM,CACd,GAAG,CAAC,KAAK,UAAW,OAEpB4pI,EAAS,qBAAqB4qC,CAAa,EAE3C,IAAI38J,EAAM,EACI28J,EAAA,QAASruK,GAAU,CACxB0R,GAAA1R,CAAA,CACR,EAED,MAAMqG,EAAW,KAAK,IAAI,EAAIqL,EAAM2zB,EAAOD,CAAG,EAG9C,KAAK,eAAe,MAAM,UAAY,SAAS/+B,CAAQ,IAGvD,MAAMylB,EAAO,KAAK,IAAI,EAAI,KAAK,gBACzB8F,EAAK9F,EAAO,IAEZ5+B,EAAYR,GAASo/B,EAAO,GAAI,EAAI,KAAO,KAAO,KAAK,MAAM8F,EAAK,EAAE,GAAG,MAAM,EAAE,EAErF,KAAK,aAAa,YAAc1kC,EAEhCiZ,GAAQtM,CAAC,GAGTA,GAAA,CACH,EAAE,MAAOvE,GAAa,CACrB,OAAOA,EAAE,KAAgB,CACvB,IAAK,kBAAmB,CACtB+lB,GAAM,wCAAwC,EAC9C,KACF,CAEA,IAAK,mBAAoB,CACvBA,GAAM/lB,EAAE,OAAO,EACf,KACF,CAEA,QACE,QAAQ,MAAM,wBAAyBA,EAAGA,EAAE,KAAMA,EAAE,OAAO,EAC3D+lB,GAAM/lB,EAAE,OAAO,EACf,KACJ,CAEA,KAAK,aAAa,EAAK,EAClB,eAAU,UAAU,OAAO,WAAW,EAC5C,CACH,GAGK,oBAAiB,MAAMA,EAAWmmD,IAAoB,CAK3D,GAJGnmD,GACDqQ,GAAYrQ,CAAC,EAGZ,KAAK,gBAAiB,CACvB,MAAMg5K,EAAU,KAAK,QACrB,IAAIC,EAAa,GAcd,GAbA,KAAK,aAEN,MAAM,KAAK,aAGEA,EAAA,IAIf,KAAK,QAAUD,EACf,KAAK,UAAY,GACjB,KAAK,gBAAkB,KAEpBC,EAAY,MACjB,CAEA,GAAG,KAAK,aAAe,QAAU,CAAC9yH,EAAO,CACvC,MAAMppD,EAAU,KAAK,YACf4tK,EAAQ,KAAK,uBAAuB,EAAI,EAC3CA,GACD,OAAOA,EAAM,OAAO,WAGtB,MAAMrhK,EAAUvM,EAAQ,UAAU,IAAM,qBAAuBA,EAAQ,SAAW,OAC5E0oD,EAAe1oD,GAAS,OAAO,IAAM,sBAAwBA,EAAQ,MAAQ,OAC7E8+H,EAAiBp2E,GAAc,SAA6B,QAAQ,gBACpEyzH,EAA2C,CAC/C,EAAG,eACH,KAAMvO,GAAO,KACb,QAAS5tK,EAAQ,QACjB,SAAUA,EAAQ,SAClB,OAAQ,CACN,aAAcA,EAAQ,OAAO,YAC/B,EACA,MAAO0oD,GAAgB,CACrB,EAAG,oBACH,OAAQ,CACN,kBAAmBo2E,GAAiBp2E,EAAa,OAAO,mBAAqB,OAC7E,kBAAmBo2E,GAAiBp2E,EAAa,OAAO,mBAAqB,OAC7E,SAAU,EACZ,EACA,IAAMA,EAAa,QAA4B,GACjD,EACA,SAAUn8C,GAAW,CACnB,EAAG,sBACH,gBAAiBA,EAAQ,eAC3B,GAGF,GAAG4vK,EAAc,UAAU,QAAUvO,GAAO,UAAU,OAAQ,CAC5D,MAAMwO,EAAuB,IAAI,IAAI,OAAO,OAAOvG,EAAiB,CAAC,EACrEuG,EAAqB,IAAI,0BAA0B,EAEhDD,GAAe,WACFA,EAAA,SAAWA,EAAc,SAAS,MAAM,GAGxD,CAACA,EAAevO,CAAK,EAAE,QAASA,GAAU,CACpCA,GAAO,WAIXx6I,GAAew6I,EAAM,SAAU,CAACnwK,EAAQzD,EAAKsG,IAAQ,CAC/C87K,EAAqB,IAAI3+K,EAAO,CAAC,GAC/B6C,EAAA,OAAOtG,EAAK,CAAC,CACnB,CACD,EAEG4zK,EAAM,SAAS,QACjB,OAAOA,EAAM,SACf,CACD,CACH,CAEA,GAAG,CAACqJ,GAAerJ,EAAOuO,CAAa,EAAG,CAC3B31J,GAAA,YAAYD,GAAW,kBAAmB,CACrD,QAAS,CAAC,CACR,QAAS,wBACT,SAAU,IAAM,CACT,oBAAe,OAAW,EAAI,CACrC,EACD,EACD,mBAAoB,wBACrB,EAAE,KAAK,EAER,MACF,OACQ,KAAK,aAAe,SAC5B,KAAK,mBAAmB,EAG1B,KAAK,YAAY,EACjB,KAAK,cAAc,GAGb,mBAAiBtjB,GAAc,CAGrC,GAFAA,GAAKqQ,GAAYrQ,CAAC,EAEfA,GAAK,CAACgZ,EAAgBhZ,EAAE,OAAQ,OAAO,EAAG,OACzC,IAAAo5K,EACD,KAAK,aAAe,UACrBA,EAA2B,KAAK,iBAAiB,UACzC,KAAK,aAAe,SAC5B,KAAK,KAAK,aAAa,CAAC,UAAW,KAAK,aAAa,EACrDA,EAA2B,KAAK,eAAe,eACvC,KAAK,aAAe,OAC5B,KAAK,KAAK,aAAa,CAAC,UAAW,KAAK,UAAU,EACzC,KAAK,aACdA,EAA2B,KAAK,iBAAiB,WAGhDh0J,IAAsBg0J,GAA4B,CAACA,EAAyB,UAAU,SAAS,QAAQ,GACxG/xJ,GAAsB,YAAY+xJ,CAAwB,CAC5D,EAv3FK,oBAAiB,IAAIxtJ,GACrB,yBAAsB,IAAIA,GAC/B,KAAK,aAAe,GACpB,KAAK,UAAY,GACjB,KAAK,kBAAoBquC,EAC3B,CAEO,WAAY,CACjB,MAAMo/G,EAAa,KAAK,UAEnB,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAIn5I,GAAYm5I,EAAY,MAAM,EAEtD,oBAAiB,SAAS,cAAc,KAAK,EAC7C,oBAAe,UAAU,IAAI,GAAGn5I,EAAU,aAAc,GAAGm5I,CAAU,YAAY,EAEjF,wBAAqB,SAAS,cAAc,KAAK,EACjD,wBAAmB,UAAU,IAAI,sBAAsB,EAEvD,iBAAc,SAAS,cAAc,KAAK,EAC1C,iBAAY,UAAU,IAAI,GAAG,CAChC,eACA,GAAGn5I,EAAU,WACb,GAAGm5I,CAAU,WACb,KAAK,KAAK,OAAS5oG,GAAS,SAAW,qBACvC,OAAO,OAAO,CAAC,EAEZ,wBAAmB,OAAO,KAAK,WAAW,EAE/C,MAAM22E,EAAOzoB,GAAa,CAAC,KAAK,KAAK,UAAU,EAC1C,iBAAY,OAAOyoB,CAAI,EAE5B,MAAMkyB,EAAkB,KAAK,gBAAkB,SAAS,cAAc,KAAK,EAC3DA,EAAA,UAAU,IAAI,eAAgB,mBAAmB,EAEjE,MAAMC,EAAuB,KAAK,qBAAuB,SAAS,cAAc,KAAK,EAChEA,EAAA,UAAU,IAAI,eAAgB,wBAAwB,EAE3E,KAAK,eAAe,OAAO,KAAK,mBAAoBD,EAAiBC,CAAoB,EACpF,eAAU,OAAO,KAAK,cAAc,EAErC,KAAK,aAAa,YACpB,KAAK,sBAAsB,EAsE7B,MAAM7sK,EAAI,KAAK,iBAAmB,SAAS,cAAc,KAAK,EAC5DA,EAAA,UAAU,IAAI,qBAAsB,oBAAoB,EACrD,oBAAe,OAAOA,CAAC,CAC9B,CAEO,cAAci2D,EAAkB,CAClC,KAAK,iBAAmBA,IAI3B,KAAK,eAAiBA,EACtB,KAAK,cAAc,EACrB,CAEO,oBAAoBr9D,EAAqC,CAC3D,KAAK,WACDA,EAAA,KAAAA,EAAA,GAAO,IACPA,EAAA,CAAC,EAAE,SAAW,IAGf,MAAAse,EAASoR,GAAW,GAAG1vB,CAAI,EACjC,OAAAse,EAAO,SAAW,GACXA,CACT,CAEQ,uBAAwB,CAC9B,KAAK,UAAYsS,GAAa,CAAC,KAAM,aAAc,UAAW,mEAAmE,EAC5H,oBAAe,OAAO,KAAK,SAAS,EAExB5lB,EAAA,KAAK,UAAY,GAAM,CACtCD,GAAY,CAAC,EACR,UAAK,QAAQ,eACjB,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEQ,wBAAyB,CAC/B,KAAK,cAAc,UAAY,SAAS,cAAc,KAAK,EAC3D,KAAK,cAAc,UAAU,UAAU,IAAI,gBAAiB,kBAAkB,EAE9E,KAAK,cAAc,QAAU,KAAK,iBAAiB,EAAE,EAChD,mBAAc,UAAY,KAAK,iBAAiB,qBAAsB,CAAC,SAAU,GAAK,EAEtF,mBAAc,UAAU,OAAO,KAAK,cAAc,QAAS,KAAK,cAAc,SAAS,EAE3EC,EAAA,KAAK,cAAc,UAAW,KAAK,eAAgB,CAAC,eAAgB,KAAK,eAAe,EACxFA,EAAA,KAAK,cAAc,UAAW,KAAK,cAAe,CAAC,eAAgB,KAAK,eAAe,EAExG,MAAMuU,EAAmC,CAAC,CACxC,KAAM,eACN,KAAM,cACN,QAAS,IAAM,CACb,KAAK,cAAc,EACd,gBAAW,OAAO,EAAK,CAC9B,GACC,KAAK,cAAc,eAAiB,CACrC,KAAM,UACN,KAAM,qBACN,QAAS,IAAM,KAAK,qBAAqB,GACxC,KAAK,cAAc,WAAa,CACjC,KAAM,SACN,KAAM,aACN,QAAS,KAAK,eACd,OAAQ,IAEP,KAAK,cAAc,WAAa,CACjC,KAAM,SACN,KAAM,aACN,QAAS,KAAK,eACd,OAAQ,GACT,EACKosC,EAAU,KAAK,cAAc,cAAgBzoC,GAAe,CAChE,QAAA3D,EACA,eAAgB,KAAK,eACtB,EAEGO,KACF,KAAK,WAAa,IAAIilD,GAAc,CAAC,QAASpZ,EAAQ,GAGnD,mBAAc,UAAU,OAAOA,CAAO,CAC7C,CAEQ,0BAA2B,CACjC,MAAMuoH,EAAoB,IAAM,CACXC,EAAA,IAGfC,EAAqB,IAAM,CACZD,EAAA,IAGfE,EAAgD,KAAK,gBAAkB,GAC7E,IAAIF,EAAmB,GACvB,MAAMG,EAA0C,CAC9CD,EAAgB,WAAa,CAC3B,KAAM,kCACN,QAASH,EACT,cAAe,IAAM,KAAK,oBAAoB,EAC9C,WAAY,QACd,EACAG,EAAgB,WAAa,CAC3B,KAAM,kCACN,QAASH,EACT,cAAe,IAAM,KAAK,oBAAoB,EAC9C,WAAY,QACd,EACAG,EAAgB,YAAc,CAC5B,KAAM,wCACN,QAASD,EACT,WAAY,SACd,EACAC,EAAgB,YAAc,CAC5B,KAAM,wCACN,QAASD,EACT,WAAY,SACd,EACAC,EAAgB,WAAa,CAC3B,KAAM,oCACN,QAAS,IAAM,CACb,KAAK,uBAAuB,CAC9B,EACA,KAAM,SACR,EACA,CACE,KAAM,SACN,KAAM,eACN,QAAS,KAAK,eACd,OAAQ,EACV,GAEIE,EAAiBF,EAAgB,UAAYnxJ,GAAe,CAChE,QAASoxJ,EACT,YAAa,CAAC,CACZ,KAAM,SACN,SAAWlvK,GAAU,CACb,MAAA4Z,EAAU,CAAC,CAAC,CAAC5Z,EAChB+uK,IACD,KAAK,yBAA2B,CAACn1J,GAGnC,MAAMw1J,EAAa,KAAK,cAAc,UAAU,cAAc,cAAc,EAC5E,GAAGA,EAAY,CACb,MAAMv0K,EAAKu0K,EAAW,kBAChB3iL,EAAIjD,GAAK,QAAQ,IAAIqR,CAAE,EACvBgB,EAA2BozK,EAAgB,WAAW,cAAc,QAAU,yBAA2B,wBAC/GxiL,EAAE,IAAMoP,EACRpP,EAAE,OAAO,CACX,CACF,EACA,QAAS,GACR,CACD,KAAM,UACN,SAAWuT,GAAU,CACb,MAAA4Z,EAAU,CAAC,CAAC,CAAC5Z,EACf,IAAAie,EACDrE,GAAW,KAAK,2BAA6B,OAC9CqE,EAAI,KAAK,yBAA2BgxJ,EAAgB,WAAaA,EAAgB,WAE7EhxJ,EAAArE,EAAUq1J,EAAgB,WAAaA,EAAgB,WAG7DhxJ,EAAE,cAAc,QAAU,EAC5B,EACA,QAAS,EACV,EACD,eAAgB,KAAK,eACtB,EAEGvD,KACF,KAAK,aAAe,IAAIilD,GAAc,CAAC,QAASwvG,EAAe,GAGjEF,EAAgB,WAAaC,EAAe,MAAM,EAAG,EAAE,EAClD,mBAAc,UAAU,OAAOC,CAAc,CACpD,CAEQ,0BAA2B,CACjC,KAAK,gBAAkB,GACvB,MAAMh1J,EAAmC,CAAC,KAAK,gBAAgB,MAAQ,CACrE,KAAM,eACN,QAAS,IAAM,CAAC,EAChB,WAAY,YACX,KAAK,gBAAgB,MAAQ,CAC9B,KAAM,eACN,QAAS,IAAM,CAAC,EAChB,WAAY,YACX,KAAK,gBAAgB,OAAS,CAC/B,KAAM,cACN,QAAS,IAAM,CAAC,EAChB,WAAY,QACX,KAAK,gBAAgB,QAAU,CAChC,KAAM,eACN,QAAS,IAAM,CAAC,EAChB,WAAY,QACX,CACD,KAAM,wBACN,QAAS,IAAM,CACb,KAAK,eAAe,CACtB,EACA,KAAM,SACN,OAAQ,GACT,EACKosC,EAAU,KAAK,gBAAgB,UAAYzoC,GAAe,CAC9D,QAAA3D,EACA,YAAa,CAAC,CACZ,KAAM,WACN,SAAWna,GAAU,CACd,iBAAc,CAAC,CAAC,CAACA,EACtB,KAAK,qBAAqB,CAC5B,EACA,QAAS,GACR,CACD,KAAM,OACN,SAAWA,GAAU,CACnB,KAAK,eAAe,WAAa,CAAC,CAAC,CAACA,EAC/B,oBAAe,WAAa,CAAC,CAACA,EACnC,KAAK,qBAAqB,CAC5B,EACA,QAAS,EACV,EACD,eAAgB,KAAK,eACtB,EAEG0a,KACF,KAAK,aAAe,IAAIilD,GAAc,CAAC,QAASpZ,EAAQ,GAGrD,mBAAc,UAAU,OAAOA,CAAO,CAC7C,CAEQ,uBAAuB8oH,EAAsB,CAC7C,MAAAxpH,EAAMr6B,GAAa,CAAC,KAAM6jJ,EAAa,YAAc,UAAW,UAAW,qFAAqF,EAChK1xJ,EAAQ+qE,GAAY,OAAQ,GAAI,SAAS,EAC/C7iC,EAAI,OAAOloC,CAAK,EACX,oBAAe,OAAOkoC,CAAG,EAEbjgD,EAAAigD,EAAMvwD,GAAM,CAC3BqQ,GAAYrQ,CAAC,EACP,MAAA5K,EAAa,KAAK,gBACxB,KAAK,SAAS,mBAAmB,gBAAgB,CAAC,OAAQ,KAAK,KAAK,OAAQ,SAAU,KAAK,KAAK,SAAU,WAAA2kL,CAAA,CAAW,EAAE,KAAM34K,GAAQ,CAC/HhM,KAIDgM,GACD,KAAK,KAAK,aAAa,CAAC,UAAWA,CAAI,EACzC,CACD,CACA,GAAC,eAAgB,KAAK,cAAe,GAEtB8pB,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,YACN,KAAM6uJ,EAAa,mBAAqB,kBACxC,QAAS,IAAM,CACR,cAAS,mBAAmB,aAAa,KAAK,KAAK,OAAQ,KAAK,KAAK,SAAUA,CAAU,CAChG,EACD,EACD,SAAUxpH,EACV,eAAgB,KAAK,eACtB,EAEEwpH,GACD,KAAK,sBAAwB1xJ,EAC7B,KAAK,cAAgBkoC,IAErB,KAAK,qBAAuBloC,EAC5B,KAAK,aAAekoC,EAExB,CAEQ,0BAA2B,CACjC,KAAK,aAAe,KAAK,iBAAiB,qCAAsC,CAAC,SAAU,GAAK,EAE/EjgD,EAAA,KAAK,aAAe,GAAM,CACzC,KAAK,aAAa,cAAc,KAAK,KAAK,MAAM,CAC/C,GAAC,eAAgB,KAAK,cAAe,GAEnC,oBAAe,IAAI5c,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAAD,KAAY,CAC7D,KAAK,KAAK,SAAWA,GAInB,kBAAa,UAAU,OAAO,MAAM,EAC1C,EAEI,oBAAe,IAAIC,CAAS,EAAE,mBAAoB,CAAC,CAAC,OAAAD,KAAY,CAChE,KAAK,KAAK,SAAWA,GAInB,cAAS,mBAAmB,qBAAqB,KAAK,KAAK,MAAM,EAAE,KAAMiX,GAAU,CACtF,KAAK,aAAa,UAAU,OAAO,OAAQ,CAACA,EAAM,MAAM,EACzD,EACF,CACH,CAEQ,sBAAuB,CAC7B,KAAK,qBAAuB,KAAK,iBAAiB,wCAAyC,CAAC,SAAU,GAAK,EACtG,mBAAgB,IAAIkmK,GAAc,CACrC,SAAU,KAAK,YACf,eAAgB,KAAK,eACrB,SAAU,KAAK,SACf,SAAU,KAAK,qBACf,UAAW,KACZ,EACD,KAAK,eAAe,IAAI,KAAK,aAAa,EAAE,OAAQ,IAAM,KAAK,qBAAqB,UAAU,IAAI,QAAQ,CAAC,EAC3G,KAAK,eAAe,IAAI,KAAK,aAAa,EAAE,QAAS,IAAM,KAAK,qBAAqB,UAAU,OAAO,QAAQ,CAAC,CACjH,CAEQ,sBAAuB,CAC7B,KAAK,YAAc,IAAIc,GAAgB,KAAK,YAAa,KAAM,KAAK,QAAQ,EACvE,uBAAoB,SAAS,cAAc,KAAK,EAChD,uBAAkB,UAAU,IAAI,0BAA0B,EAC/D,KAAK,kBAAkB,OAAOh9K,GAAK,UAAW,oCAAoC,CAAC,EAE7E,MAAAslL,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qCAAqC,EAE1D,MAAMr9J,EAAO,KAAK,gBAAkB,SAAS,cAAc,KAAK,EAC3DA,EAAA,UAAU,IAAI,qBAAsB,0BAA0B,EACnEq9J,EAAO,OAAOr9J,CAAI,EAEb,qBAAkB,SAAS,cAAc,KAAK,EAC9C,qBAAgB,UAAU,IAAI,+BAA+B,EAClE,KAAK,kBAAkB,OAAOq9J,EAAQ,KAAK,eAAe,EAEtD,IAAAC,EAAgB,EAAGC,EAAoB,GAC1B5pK,EAAA,KAAK,kBAAoBtQ,GAAM,CAC9CqQ,GAAYrQ,CAAC,EACb,MAAMwgC,EAAQ,KAAK,KAAK,OAAO,SAAS,EAClC,CAAC,cAAA25I,CAAiB,OACxB,GAAGA,EAAe,CAChB,GAAGD,EACD,OAGF,MAAM1pK,EAAS,EAAEypK,EACGC,EAAA,GAEZ,kBAAU,KAAK,IAAM,CAC3B,GAAGD,IAAkBzpK,EAId,YAAK,KAAK,WAAW,CAC1B,MAAAgwB,EACA,IAAK25I,EAAc,IACnB,WAAYA,EAAc,KAC1B,YAAa,GACd,EACF,EAAE,QAAQ,IAAM,CACZF,IAAkBzpK,IACC0pK,EAAA,GACtB,CACD,EACD,MACF,CAEM,MAAA9kL,EAAa,KAAK,gBACRunB,EAAK,UAAU,SAAS,YAAY,EAE7C,iBAAY,OAAO,EAAI,EAGvB,iBAAY,UAAU6jB,EAAOprC,CAAU,CAG7C,GAAC,eAAgB,KAAK,cAAe,GAEnC,iBAAY,iBAAiB,UAAW,IAAM,CAC5CunB,EAAA,UAAU,IAAI,YAAY,EAChC,EAEI,iBAAY,iBAAiB,SAAU,IAAM,CAC3CA,EAAA,UAAU,OAAO,YAAY,EACnC,CACH,CAEQ,mBAAoB,CAC1B,MAAMy9J,EAAY,OAAe,SAC9B,GAAAA,EAAc,IACV,cAAW,IAAIA,EAAS,CAG3B,kBAAmB,KACnB,YAAa,EACb,iBAAkB,EAClB,cAAe,EACf,YAAa,GACd,QACKx1K,EAAK,CACH,cAAM,8BAA+BA,CAAG,CAClD,CAEI,KAAK,WAIQ0L,EAAA,KAAK,gBAAiB,KAAK,oBAAqB,CAAC,eAAgB,KAAK,eAAe,EAEjG,cAAS,OAAS,IAAM,CAC3B,KAAK,aAAa,EAAK,EAClB,eAAU,UAAU,OAAO,WAAW,EACtC,oBAAe,MAAM,UAAY,IAGnC,cAAS,gBAAmB+pK,GAA2B,CAgB1D,GAfG,KAAK,uBACN,KAAK,qBAAqB,EAC1B,KAAK,qBAAuB,QAG3B,KAAK,2BACD,oBAAe,OAAO,KAAK,wBAAwB,EACxD,KAAK,yBAA2B,QAG/B,KAAK,0BACkB90J,GAAA,WAAW,KAAK,uBAAuB,EAC/D,KAAK,wBAA0B,QAG9B,KAAK,eACN,OAGI,MAAA6oJ,EAAgB,KAAK,KAAK,wBAAwB,EAClD13K,GAAY,KAAK,MAAQ,KAAK,iBAAmB,IAAO,EACxD4jL,EAAW,IAAI,KAAK,CAACD,CAAU,EAAG,CAAC,KAAM,YAAY,EAC3DhC,GAAqB,OAAOgC,EAAY,EAAI,EAAE,KAAM7kL,GAAW,CAC7D6iL,GAAqB,aAAa,EAAK,EAGlC,cAAS,mBAAmB,SAAS,CACxC,GAAGjK,EACH,KAAMkM,EACN,eAAgB,GAChB,QAAS,GACT,SAAA5jL,EACA,SAAUlB,EAAO,SACjB,UAAWA,EAAO,IAClB,WAAY,GACb,EAEI,mBAAc,GAAO,EAAI,EAC/B,GAEL,CAEO,sBAAuB,CACxB,KAAK,aAAa,QACpB,KAAK,uBAAuB,EAExB,KAAK,aAAa,iBACpB,KAAK,yBAAyB,EAC9B,KAAK,yBAAyB,IAI7B,uBAAoB,SAAS,cAAc,KAAK,EACrD,KAAK,kBAAkB,UAAU,IAAI,sBAAuB,kBAAkB,EAQ1E,KAAK,aAAa,YAAW,KAAK,mBAAqB,KAAK,iBAAiB,yBAA0B,CAAC,SAAU,GAAK,GAEtH,2BAAwB,SAAS,cAAc,KAAK,EACpD,2BAAsB,UAAU,IAAI,yBAAyB,EAE/D,KAAK,YACN,KAAK,kBAAoB49F,GAAY,OAAQ,GAAI,SAAS,EACrD,eAAU,OAAO,KAAK,iBAAiB,GAG1C,KAAK,aAAa,gBACpB,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAAI,GAG9B,KAAK,aAAa,WACpB,KAAK,yBAAyB,EAG5B,KAAK,aAAa,aACpB,KAAK,qBAAqB,EAGxB,KAAK,aAAa,aACpB,KAAK,qBAAqB,EAK5B,KAAK,kBAAoB,CAAC,CACxB,KAAM,QACN,KAAM,iCACN,QAAS,IAAM,KAAK,cAAc,GAAO,GAAM,EAAI,CAErD,EAUM,CACJ,KAAM,WACN,KAAM,6BACN,QAAS,IAAM,KAAK,cAAc,EAAI,CAExC,EAAG,CACD,KAAM,OACN,KAAM,cACN,QAAS,IAAM,KAAK,KAAK,aAAa,YAAY,KAAK,KAAK,MAAM,EAClE,OAAQ,IACC,KAAK,MAAQ,QAAQ,IAAI,CAC9B,KAAK,KAAK,eAAe,EACzB,KAAK,SAAS,WAAW,aAAa,EACvC,EAAE,KAAK,CAAC,CAACmnF,EAAS,CAAC,8BAAAC,EAA8B,IAAMD,GAAWC,CAA6B,CAEpG,EAAG,CACD,KAAM,OACN,KAAM,OACN,QAAS,SAAW,CAClB,MAAMx9K,EAAqB,aAC3B,GAAG,CAAE,MAAM,KAAK,KAAK,QAAQA,CAAM,EAAI,CACrCipB,GAAS,CAAC,YAAaknD,GAAwBnwE,CAAM,CAAE,GACvD,MACF,CAEAumB,GAAa,YAAYwlJ,GAAiB,KAAK,IAAI,EAAE,MACvD,EACA,OAAQ,IAAM,KAAK,KAAK,OAAO,aAAe,KAAK,KAAK,KAC1D,GAEM,MAAA0R,EAAoB,KAAK,kBAAkB,MAAM,EACvD,KAAK,WAAahrH,GAAiB,CACjC,cAAe,CAAC,SAAU,EAAI,EAC9B,eAAgB,KAAK,eACrB,UAAW,WACX,QAAS,KAAK,kBACd,aAAc,KAAK,aAAa,WAAa,OAAY,SAAW,CAClE,MAAMirH,EAAiB,MAAM,KAAK,SAAS,yBAAyB,kBAAkB,EAChF71J,EAAU41J,EAAkB,QAC5BE,EAAwBD,EAAe,OAAQl/D,GAC5CA,EAAc,OAAO,mBAC7B,EAAE,IAAKA,GAAkB,CAClB,MAAA7+F,EAAOw3J,GAAqB34D,CAAa,EAgCxC,MA/B2B,CAChC,YAAapnH,GAAconH,EAAc,UAAU,EACnD,QAAS,IAAM,CACb,KAAK,KAAK,WAAW,CAAC,cAAAA,EAAe,eAAgB,GAAK,CAC5D,EACA,QAAS7+F,GAAM,KACf,OAAQ,SAAW,CACjB,IAAI9V,EAAQ,GAEZ,MAAM60G,EAEF,CACF,4BAA6B,IAAM,KAAK,KAAK,OAAO,aAAeF,EAAc,OACjF,wBAAyB,IAAM,KAAK,KAAK,MACzC,qBAAsB,IAAM,KAAK,KAAK,OAAO,OAAO,EACpD,uBAAwB,IAAM,KAAK,KAAK,WACxC,4BAA6B,IAAM,KAAK,KAAK,aAGrC,UAAAt3F,KAAYs3F,EAAc,WAAY,CACxC,MAAAx1D,EAAS01D,EAAUx3F,EAAS,CAAC,EAEnC,GADArd,EAAQ,MAAMm/C,IACXn/C,EACD,KAEJ,CAEO,OAAAA,CACT,EAGK,CACR,EAEDge,EAAQ,OAAOA,EAAQ,OAAQ,EAAG,GAAG81J,CAAqB,EAC1D,KAAK,kBAAkB,OAAO,EAAG,KAAK,kBAAkB,OAAQ,GAAG91J,CAAO,CAC5E,EACA,OAAQ,IAAM,CACP,wBAAmB,OAAO,EAAK,EACpC,KAAK,eAAe,EAAI,CAC1B,EACA,QAAS,IAAM,CACb,KAAK,eAAe,EAAK,CAC3B,EACD,EACI,gBAAW,UAAU,IAAI,aAAa,EAC3C,KAAK,WAAW,kBAAkB,YAAYnwB,GAAK,QAAQ,CAAC,EAIvD,kBAAe,SAAS,cAAc,KAAK,EAC3C,kBAAa,UAAU,IAAI,aAAa,EAExC,eAAY,SAAS,cAAc,OAAO,EAC/C,KAAK,UAAU,KAAO,OACtB,KAAK,UAAU,SAAW,GACrB,eAAU,MAAM,QAAU,OAE1B,uBAAkB,OAAO,GAAG,CAC/B,KAAK,kBACL,KAAK,mBACL,KAAK,sBACL,KAAK,aACL,KAAK,qBACL,KAAK,WACL,KAAK,aACL,KAAK,WACL,OAAO,OAAO,CAAC,EAEd,KAAK,eAAe,WAAW,KAAK,YAAY,OAAO,KAAK,cAAc,SAAS,EACjF,kCAA+B,IAAI07K,GACnC,oBAAiB,IAAId,GAAe,KAAK,YAAa,KAAK,6BAA8B,KAAK,KAAM,KAAK,QAAQ,EACjH,iBAAc,IAAIE,GAAY,KAAK,YAAa,KAAK,6BAA8B,KAAM,KAAK,QAAQ,EACvG,KAAK,aAAa,iBAAqB,oBAAiB,IAAIW,GAAe,KAAK,YAAa,KAAK,6BAA8B,KAAM,KAAK,QAAQ,GAClJ,oBAAiB,IAAII,GAAe,KAAK,YAAa,KAAK,6BAA8B,KAAM,KAAK,QAAQ,EAC5G,kBAAe,IAAIS,GAAa,KAAK,YAAa,KAAK,6BAA8B,KAAK,KAAM,KAAK,QAAQ,EAC7G,iBAAY,OAAO,KAAK,iBAAiB,EAEzC,qBAAkB,KAAK,iBAAiB,0FAA0F,EAElI,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,oBAAoB,EAEnD,oBAAiB,SAAS,cAAc,KAAK,EAC7C,oBAAe,UAAU,IAAI,eAAe,EAE5C,aAAU,KAAK,mBACpB,KAAK,QAAQ,UAAU,IAAI,aAAc,WAAY,sBAAsB,EAC3E,MAAM7lK,EAA0B,CAC9B,CAAC,OAAQ,MAAM,EACf,CAAC,WAAY,UAAU,EACvB,CAAC,QAAS,MAAM,EAChB,CAAC,oBAAqB,QAAQ,EAC9B,CAAC,iBAAkB,SAAS,GAE9B,KAAK,QAAQ,OAAO,GAAGA,EAAM,IAAI,CAAC,CAAC0iB,EAAM/V,CAAI,IAAMpjB,GAAKm5B,EAAM,4BAA6B,iBAAmB/V,CAAI,CAAC,CAAC,EAEpH,KAAK,iBAAiB,OAAO,KAAK,eAAgB,KAAK,OAAO,EAE9DtX,GAAY2B,GAAY,CACjB,UAAK,wBAAwB,UAAUA,CAAO,EACnD,KAAM,CAACwmK,EAAQ2E,CAAS,EAAI/qK,GAAoB,EAChD,KAAK,OAASomK,EACd,KAAK,UAAY2E,EACZ,sBAAiB,OAAOzC,GAAe,CAAC,OAAQ,KAAK,MAAO,EAAgB,EAClF,EAEI,cAAW,IAAIpC,GAAS,CAC3B,cAAe,IAAM,CACnB,KAAK,WAAa,GAClB,KAAK,YAAY,CACnB,EACA,gBAAiB,IAAM,CACrB,KAAK,gBAAgB,MAAS,CAChC,EACA,sBAAuB,IAAM,CAC3B,KAAK,qBAAqB90E,GAA4B,KAAK,YAAY,KAAK,KAAM,EAAI,CAAC,CACzF,EACA,WAAY,KAAK,KAAK,wBAAwB,IAAI,EAClD,SAAU,WACV,iBAAkB,KAAK,QACvB,OAAQ,IAAM,CACZ,MAAMp2F,EAAO,KAAK,KAAK,OAASkzE,GAAS,YAAc,CAAC,KAAK,gBAAkB,CAAC,CAAC,OAAO,KAAK,KAAK,UAAU,EAAE,SAAW,CAAC,KAAK,UAC/H,OAAGlzE,GACI,wBAAmB,OAAO,EAAK,EAG/BA,CACT,EACA,kBAAmB,KAAK,kBACxB,MAAQ0K,GAAY,CACb,sBAAiB,OAAOA,CAAO,CACtC,EACA,YAAa,IAAM,KAAK,KAAK,OAAO,UAAY,KAAK,KAAK,SAAWvU,EAAU,KAC/E,OAAQ,KAAK,OACb,SAAU,KAAK,UAChB,EAED,KAAK,eAAe,OAAO,GAAG,CAAC,KAAK,YAAa,KAAK,gBAAiB,KAAK,gBAAgB,EAAE,OAAO,OAAO,CAAC,EAE1G,KAAK,qBACN,KAAK,kBAAkB,qBAAqB,KAAK,mBAAoB,KAAK,cAAc,EACxF,KAAK,eAAe,IAAI,KAAK,iBAAiB,EAAE,OAAQ,KAAK,eAAe,EAC5E,KAAK,eAAe,IAAI,KAAK,iBAAiB,EAAE,QAAS,KAAK,gBAAgB,EAE3EumE,KAAsB,KAAK,mBAC5Bz5D,GAAY2B,GAAY,CACjB,UAAK,wBAAwB,UAAUA,CAAO,EACnDxB,GAAa,IAAM,CACjB,MAAMi6K,EAAcz7I,GAAW,QAAU,KAAOA,GAAW,MAAQ,IACnE,KAAK,kBAAkB,aAAa,UAAU,OAAO,WAAY,CAACy7I,CAAW,EAC9E,EACF,GAIL,KAAK,wBAAwB,EAW7B,KAAK,eAAe,IAAIlnL,CAAS,EAAE,mBAAoB,IAAM,EACxD,KAAK,gBAAkB,KAAK,eAE7B,KAAK,cAAgB,GACrB,KAAK,kBAAkB,GAQzB,KAAK,mBAAmB,aAAY,CACrC,EAEE,KAAK,MACN,KAAK,iBAAiB,EAGxB,KAAK,kBAAkB,EAEvB,KAAK,cAAc,EAEnB,KAAK,eAAe,IAAI,KAAK,SAAS,EAAE,SAAWsM,GAAM,CACjD,MAAA66K,EAAY76K,EAAE,OAA0C,MACxDksK,EAAQ,MAAM,KAAK2O,CAAQ,EAAE,MAAM,EAEtC,GADE,0BAAqB,QAAQ3O,CAAK,EACpC,CAACA,EAAM,OACR,OAGF,MAAM4O,EAAgB9O,KACnB8O,EACDA,EAAc,SAAS5O,CAAK,EAE5B3oJ,GAAa,YAAY0oJ,GAAe,KAAK,KAAMC,EAAO,KAAK,cAAc,EAG/E,KAAK,UAAU,MAAQ,IACtB,EAAK,EAES57J,EAAA,KAAK,QAAS,KAAK,eAAgB,CAAC,eAAgB,KAAK,eAAgB,eAAgB,EAAK,GAE1G,wBAAqB8rB,GAAS,IAAM,KAAK,YAAa,KAAM,GAAO,EAAI,EAEtE,MAAA2+I,EAAqB31K,GAAuC,CAC1D,MAAAwe,EAASqJ,GAAO,iEAAiE,EACvF,OAAArJ,EAAO,OAAOxe,aAAmB,YAAcA,EAAUpN,EAAKoN,CAAO,CAAC,EAC/Dwe,CAAA,EAGJ,iBAAcm3J,EAAkB,UAAU,EAC1C,gBAAaA,EAAkB,SAAS,EAC7C,KAAK,QAAU,KAAK,KAAK,QAAUA,EAAkB,aAAa,EAClE,KAAK,mBAAqB,IAAI7mL,GAAK,YAAY,CAAC,IAAK,mCAAoC,KAAM,CAAC,EAAG,SAAS,cAAc,GAAG,CAAC,CAAE,GAChI,KAAK,eAAiB6mL,EAAkB,KAAK,mBAAmB,OAAO,EAEtDzqK,EAAA,KAAK,YAAa,KAAK,SAAU,CAAC,eAAgB,KAAK,eAAe,EACtEA,EAAA,KAAK,WAAY,KAAK,YAAa,CAAC,eAAgB,KAAK,eAAe,EACxEA,EAAA,KAAK,eAAgB,IAAM,CAC1C25B,GAAa,KAAK,CACjB,GAAC,eAAgB,KAAK,cAAe,GACxC,KAAK,SAAW35B,EAAiB,KAAK,QAAS,KAAK,KAAK,OAAO,YAAY,KAAK,KAAK,KAAK,OAAQ,KAAK,OAAO,EAAG,CAAC,eAAgB,KAAK,eAAe,EAGvJ,KAAK,iBAAmB2c,GAAO,kEAAmE,CAAC,KAAM,QAAQ,EAEjH,KAAK,eAAe,IAAI,KAAK,gBAAgB,EAAE,QAAS,IAAM,CACtD,MAAAx5B,EAAS,KAAK,KAAK,OAEzB8vB,GAAa,YAAYijH,GAAiB/yI,EAAQ,EAAG,GAAM,IAAM,CAC1D,UAAK,aAAa,UAGjB,MAAAiyJ,EAAe,KAAK,KAAK,aAAa,KACzCA,EAAa,OAAO,eACrBA,EAAa,OAAO,cAAc,uBAAuB,OAAO,EAAI,CACtE,CACD,EACF,EAGI,iBAAcq1B,EAAkB,UAAU,EAC9BzqK,EAAA,KAAK,YAAa,IAAM,CAClC,UAAK,aAAa,aAAa,CAClC,OAAQ,KAAK,KAAK,SACnB,CACA,GAAC,eAAgB,KAAK,cAAe,GAEnC,sBAAiB,OAAO,GAAG,CAC9B,KAAK,YACL,KAAK,WACL,KAAK,QACL,KAAK,eACL,KAAK,oBACL,KAAK,iBACL,KAAK,aACL,OAAO,OAAO,CAAC,CACnB,CAEQ,kBAAmB,CACpB,oBAAe,IAAI5c,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAAD,EAAQ,SAAAK,EAAU,MAAA62K,EAAO,MAAAxkH,CAAA,IAAW,CACrF,KAAK,KAAK,WAAaryD,GAAY,KAAK,KAAK,SAAWL,GAAUukL,GAAgB,IAAI,KAAK,KAAK,IAAI,GAClG,cAASrN,EAAO,GAAMxkH,CAAK,EACjC,EAED,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,gBAAkBtrB,GAAS,CACjE,KAAK,OAASA,IAAS,KAAK,KAAK,OAAS41C,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,aACxF,KAAK,UAAU,CACjB,CACD,EAEI,oBAAe,IAAI,KAAK,YAAY,EAAE,gBAAiB,CAAC,CAAC,KAAA3uD,EAAM,GAAAi3B,KAAQ,CACvE,KAAK,OAASj3B,EACV,kCAA6B,qBAAqB,EAAK,EACpD,KAAK,OAASi3B,GACjB,kCAA6B,qBAAqB,EAAI,CAC7D,CACD,EAEI,oBAAe,IAAIrlD,CAAS,EAAE,mBAAoB,CAAC,CAAC,OAAAD,EAAQ,KAAAkS,KAAU,CACtE,KAAK,KAAK,OAAS8qE,GAAS,WAAa,KAAK,KAAK,SAAWh9E,GAAUkS,EAAK,SAAS,KAAK,SAAS,GACrG,KAAK,cAAc,CACrB,CACD,EAEI,oBAAe,IAAIjS,CAAS,EAAE,iBAAkB,CAAC,CAAC,OAAAD,EAAQ,KAAA49B,KAAU,CACpE,KAAK,KAAK,SAAW59B,GAAU,CAACukL,GAAgB,IAAI,KAAK,KAAK,IAAI,IAChE3mJ,EAAK,IAAI,KAAK,SAAS,GACxB,KAAK,cAAc,EAGlB,KAAK,cAAgBA,EAAK,IAAI,KAAK,YAAY,GAChD,KAAK,YAAY,OAAO,EAM5B,CACD,EAED,KAAK,eAAe,IAAI39B,CAAS,EAAE,sBAAwB+2C,GAAY,CAClEA,EAAQ,IAAI,KAAK,KAAK,MAAM,IAAM,KAAK,KAAK,OAASgmC,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,cAChG,KAAK,aAAe+kD,GACrB,KAAK,cAAc,EAEnB,KAAK,OAAO,EAAI,EAEpB,CACD,CACH,CAkDO,QAAQwlD,EAAkCr8J,EAAmB,CAK/D,GAJA,CAACq8J,GAAuB,CAAC,KAAK,eAAe,UAAU,SAAS,cAAc,GAI9EA,IAAwB,KAAK,cAC9B,OAUI,MAAAzB,EAAuByB,GAAuB,KAAK,cACnDrrK,EAAW,CAAC,CAACqrK,EACbC,EAAmB,KAAK,cAC1B,IAAArjE,EAAY,GAAIsjE,EAAe,GAAIh2C,EAEjC,MAAAi2C,EAAoB5B,EAAqB,wBACzC6B,EAAe,KAAK,gBAAgB,sBAAsB,EAC1Dj2C,EAAYi2C,EAAa,MACzBh2C,EAAU+1C,EAAkB,MAElC,GAAGh2C,IAAcC,EAAS,CACxB,MAAMplD,EAASolD,EAAqBD,EAC9Bk2C,GAAkBl2C,EAAYC,GAAW,EAC9BF,EAAAi2C,EAAkB,KAAOC,EAAa,KAAOC,EAE3D1rK,IACWioG,EAAA,cAAcstB,CAAc,cAAcllD,CAAK,IAGxDA,EAAQ,IAETk7F,EAAe,IAAM,GAAK,IAAM,EAAIl7F,IAAU,MAIpD,CAGA,KAAK,cAAgBg7F,EAEf,MAAAtkL,EAAWioB,EAAU,IAAM,EACnB,OAAAlP,GAAA,CACZ,QAAS,KAAK,eACd,UAAW,eACX,SAAAE,EACA,SAAAjZ,CAAA,CACD,EACa+Y,GAAA,CACZ,QAAS,KAAK,mBACd,UAAW,0BACX,SAAU,CAAC,EAAEE,GAAYqrK,GAAuBA,EAAoB,UAAU,SAAS,oBAAoB,GAC3G,SAAAtkL,CAAA,CACD,EACI,iBAAY,MAAM,UAAYkhH,EAC9B,iBAAY,MAAM,aAAesjE,EAE/B,CACL,UAAAtjE,EACA,aAAAsjE,EACA,eAAgBD,IAEVD,GACAA,EAAoB,UAAU,SAAS,oBAAoB,GAC3DC,IAAqB,KAAK,sBACvBA,EAAiB,UAAU,SAAS,oBAAoB,GAC3D/1C,EAAiB,IAAMA,EAC7B,UAAAC,EACA,QAAAC,CAAA,CAEJ,CAEA,MAAa,OAAOzmH,EAAU,GAAO,CACnC,OAAO,KAAK,QAAQ,MAAM,KAAK,yBAA0BA,CAAO,CAClE,CAEO,cAAc+1G,EAAqB,CACrC,KAAK,aAAeA,IAIvB,KAAK,WAAaA,EAClB,KAAK,OAAO,EAAI,EAClB,CAqCO,6BAA8B,CACnC,OAAOqjD,EAKT,CAEO,mBAAoB,CACzB,KAAM,CAAC,OAAAtkL,EAAQ,SAAAK,GAAY,KAAK,KAC7B,GAAAL,EAAO,SACR,OAGF,MAAMonC,EAAO5mC,GAAgB,QAAQR,EAAO,SAAU,GACnD,MAAConC,GAAQ,CAAEA,EAAwB,OAAO,MAASA,EAAwB,OAAO,WAIjF,IAAAA,EAAwB,OAAO,aAC1B,gBAGT,GAAIA,EAAwB,OAAO,cAAgB,CAAC/mC,EAC3C,aAEX,CAEA,MAAa,uBAAuB4gI,EAAa,KAAK,WAAY,CAC7D,QAAK,KAAK,WAAW,YACtB,OAAO,KAAK,qBACd,GAGE,KAAK,KAAK,OAASjkD,GAAS,QAC3B,KAAK,KAAK,OAASA,GAAS,OAAS,KAAK,KAAK,WAAa,KAAK,KAAK,QACvE,MAAM,KAAK,KAAK,uBAChB,KAAK,+BACJ,KAAK,KAAK,OAAO,WAAa,KAAK,KAAK,eAAiB,KAAK,KAAK,oBACpE,KAAK,kBAAkB,EAEvB,OAAO,KAAK,gBAEhB,CAiDO,eAAenzE,EAAsB,CACnC,YAAK,KAAK,OAASmzE,GAAS,WAAa,KAAK,gBAAgBnzE,CAAQ,EAAG,KAASA,EAAY,KACvG,CAgBO,qBAAqB+xD,EAAmB/xD,EAAsB,CAC7D,MAAAlI,EAAa,KAAK,gBAClBkmL,GAAgB,KAAK,IAAI,EAAI,IAAO,GAAK,GAC5CjsH,GAAaisH,IACFjsH,EAAA,QAGd,KAAK,aAAeA,EACX/xD,IAEN,KAAK,KAAK,OAASmzE,GAAS,WAAa,KAAK,KAAK,OAASA,GAAS,SAAWphB,GACjF,WAAW,IAAM,CACZ,IAACj6D,IACF,OAGamuB,GAAa,UAAU6hC,EAAa,EAC5C,QAASnlB,GAAUA,EAAM,KAAM,GAEtC,KAAK,aAAa,cAAc,KAAK,KAAK,MAAM,GAC/C,CAAC,CAER,CAEO,iBAAiB36B,EAAoD,CAC1E,OAAO,KAAK,KAAK,QAAQ,cAAc,GAAGA,CAAI,CAChD,CAyBA,MAAa,gBAAiB,CACzB,IAAC,KAAK,kBACP,OAGF,MAAM+/B,EAAS,MAAM,KAAK,SAAS,eAAe,aAChD,KAAK,KAAK,OACV,KAAK,KAAK,OAASorC,GAAS,WAAa,OAAY,KAAK,KAAK,UAG9D,GAAAhtD,GAAc4hB,CAAM,EACrB,OAGF,MAAMzS,EAAQyS,GAAQ,aACtBk1G,GAAgB,KAAK,kBAAmB,IAAM3nH,GAAS,GAAG,EAC1D,MAAM2oJ,EAAmB,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CACpF,OAAQ,KAAK,KAAK,OAClB,YAAa,GACb,SAAU,KAAK,KAAK,SACrB,EAGD,GAFA,KAAK,kBAAkB,UAAU,OAAO,aAAcA,CAAgB,EAEnE,KAAK,sBAAwB,KAAK,KAAK,OAAS9qG,GAAS,KAAM,CAChE,MAAM+qG,EAAc,CAAC,EAAEn2I,GAAQ,uBAAyBA,EAAO,cAC/Dk1G,GAAgB,KAAK,qBAAsBihC,EAAc,GAAMn2I,EAAO,sBAAyB,EAAE,EACjG,KAAK,aAAa,UAAU,OAAO,aAAcm2I,CAAW,CAC9D,CAEA,GAAG,KAAK,uBAAyB,KAAK,KAAK,OAAS/qG,GAAS,KAAM,CAC3D,MAAAiV,EAAe,CAAC,CAACrgD,GAAQ,uBAC/Bk1G,GAAgB,KAAK,sBAAuB70D,EAAe,GAAMrgD,EAAO,uBAA0B,EAAE,EACpG,KAAK,cAAc,UAAU,OAAO,aAAcqgD,CAAY,CAChE,CACF,CAEO,uBAAuB+1F,EAA4B,CAClD,MAAC,MAAA/wK,EAAO,SAAAnQ,CAAQ,EAAI6oK,GAAsB,KAAK,kBAAkB,MAAO,GAAM,EAAK,EAErF,IAAAuH,EACJ,GAAIjgK,EAAM,QAAU+wK,GAAqB,KAAK,cAAgB,KAAK,gBAAiB,CAClF,MAAMl1F,EAAU,KAAK,gBACfm1F,EAAiB,KAAK,eACtB7/C,EAAgB,CAAC,CAACt1C,GAAS,QAAQ,gBACnCj9E,EAAU,KAAK,aACbqhK,EAAA,CACN,EAAG,eACH,KAAMt8I,GAAM,EAAI,EAChB,QAAS3jB,EAAM,KAAK,EACpB,SAAUnQ,EAAS,OAASA,EAAW,OACvC,OAAQ,CACN,WAAY,KAAK,UACjB,aAAc,KAAK,aAAe,MACpC,EACA,SAAU+O,EAAU,CAClB,EAAG,sBACH,gBAAiBA,EAAQ,aACzB,WAAY,KAAK,KAAK,SACtB,iBAAkBA,EAAQ,cAC1B,GAAIA,EAAQ,cAAgB,CAC1B,WAAYA,EAAQ,aAAa,KACjC,eAAgBA,EAAQ,aAAa,SACrC,aAAcA,EAAQ,aAAa,MACrC,CACE,SACJ,MAAOi9E,EAAU,CACf,EAAG,oBACH,OAAQ,CACN,kBAAmBs1C,GAAiB6/C,GAAgB,YAAc,OAClE,kBAAmB7/C,GAAiB6/C,GAAgB,YAAc,OAClE,SAAU,EACZ,EACA,IAAKn1F,EAAQ,GACX,SACJ,OAAQ,KAAK,OAAO,EAExB,CAEO,OAAAokF,CACT,CAEO,WAAY,CAEf,IAAC,KAAK,KAAK,QACX,KAAK,WACLqN,GAAgB,IAAI,KAAK,KAAK,IAAI,EAElC,OAGI,MAAArN,EAAQ,KAAK,yBACd,cAAS,iBAAiB,UAAU,KAAK,KAAK,OAAQ,KAAK,KAAK,SAAUA,CAAK,CACtF,CAEO,YAAYl3K,EAAgBkoL,EAAoB,CAC7C,gBAAQ,KAAK,SAAS,gBAAgB,QAAQloL,CAAM,CAAC,EAAE,KAAML,GAAS,CAC5E,IAAIJ,EAAM,GAAIwH,EACR,MAAAnH,EAAYF,GAAuBC,CAAI,EAC1CC,EAAU,CAAC,EACNL,EAAA,IAAMK,EAAU,CAAC,GAEpBI,EAAO,SACDT,EAAAI,EAAmB,YAAeA,EAAmB,UAE5DJ,EAAOI,EAAwB,MAGxBoH,EAAA,CACP,EAAG,2BACH,OAAQxH,EAAI,OACZ,OAAQ,EACR,QAASI,EAAK,KAIXJ,GAAA,IACF,mBAAcA,EAAKwH,EAAQmhL,CAAQ,EACzC,CACH,CAEO,SAAU,CAGf,KAAK,eAAe,YACpB,KAAK,gBAAgB,CACvB,CAEO,QAAQ9hB,EAAY,GAAM,CAC5B,KAAK,MAAQ,CAAC,KAAK,KAAK,SACpB,eAAU,UAAU,IAAI,MAAM,EAC9B,eAAU,UAAU,IAAI,MAAM,GAGrBr3B,KAEhB,KAAK,aAAe,EACpB,KAAK,WAAa,OAEf,KAAK,gCACN,KAAK,8BAA8B,EACnC,KAAK,8BAAgC,QAGpC,KAAK,eACN,KAAK,WAAW,EAChBq3B,GAAa,KAAK,cAEtB,CAEA,MAAa,SAAS8Q,EAAwBiR,EAAa,GAAMz1H,EAAQ,GAAO,CAC9E,GACG,CAACA,GAAS,CAAC8iH,GAAa,KAAK,YAAY,GAC1C+O,GAAgB,IAAI,KAAK,KAAK,IAAI,EAE3B,SAGT,GAAG,CAACrN,IACMA,EAAA,MAAM,KAAK,SAAS,iBAAiB,SAAS,KAAK,KAAK,OAAQ,KAAK,KAAK,QAAQ,EAEvF,CAACA,GACF,OAAGxkH,IAIE,KAAK,KAAK,UAAU,UAAU,SAAS,kBAAkB,GAC1D,KAAK,EAAE,EAGJ,uBAAkB,UAAU,YAAc,GAC1C,uBAAkB,YAAY,EAAK,GAEtC,KAAK,KAAK,QAAQ,sBAAwB,QAAQ,QAAQ,GAAoB,KAAK,IAAM,CACzFt1C,GAAQ,IAAM,CACZ,KAAK,cAAc,EACpB,EACF,GAGI,GAIL,MAAAu8J,EAAe1C,GAAUC,EAAO,CAAC,kBAAmB,KAAK,KAAK,OAAO,EACrEkR,EAAe,KAAK,yBAEpBvyK,EAAUqhK,EAAM,SAChBmR,EAAoBxyK,GAAS,gBAChC,OAAA0qK,GAAerJ,EAAOkR,CAAY,EAC5B,IAGND,GACD,KAAK,YAAY,EAGd,eAAYjR,EAAM,OAAO,WAC3BmR,GACD,KAAK,iBAAiB,CACpB,aAAcA,EACd,cAAexyK,EAAQ,kBAAoBxP,GAAUwP,EAAQ,gBAAgB,EAC7E,aAAcA,EAAQ,YAAc,CAClC,KAAMA,EAAQ,WACd,SAAUA,EAAQ,eAClB,OAAQA,EAAQ,YAClB,EACD,EAGH,KAAK,cAAc8jK,EAAcwO,EAAYA,EAAYjR,CAAK,EACvD,GACT,CAEQ,cAAe,CAGlB,GAFH,KAAK,aAAe,OAEjB,KAAK,OAAS,KAAK,KAAK,OAASl6F,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,YAAa,CAC5F,IAAIsrG,EAAc,GAClB,KAAK,OAAS,IAAI9I,GAChB,KAAK,SACL,CAAC19K,EAAW4hK,IAAkB,CAC5B,IAAIrnJ,EAAU,EACVva,EAAU,gBACP,uBAAkB,QAAQA,CAAS,EAC9Bua,EAAA,GAGZ,KAAK,aAAa,KAAM,GAAMqnJ,EAAernJ,CAAO,CACtD,EACCyjK,GAAiB,CAIhB,GAHA,KAAK,aAAeA,EAGjBwI,EAAa,CACAA,EAAA,GACd,MACF,CAEA,KAAK,qBAAqB,EAAE,KAAMj7H,GAAW,CAC3C,KAAK,8BAA8BA,CAAM,EAC1C,CACH,EACF,MAEA,KAAK,OAAS,OAGhB,OAAO,KAAK,MACd,CAEA,MAAa,iBAAiBttD,EAAkD,CAC9E,KAAM,CAAC,OAAAC,EAAQ,WAAAihI,EAAY,WAAAt/H,CAAA,EAAc5B,EAEnC,CACJ,gBAAAmmL,EACA,aAAAqC,EACA,cAAAC,EACA,SAAAC,EACA,UAAAC,EACA,UAAA93H,EACA,kBAAA+3H,EACA,WAAAC,CACE,OAEEC,EAAiB,KAAK,OACtBC,EAAS,KAAK,eACdC,EAA4B,KAAK,0BAEjC,CACJ1zK,EACA2zK,EACA37C,EACA8rC,EACA8P,EACA1B,EACA2B,EACAC,EACAC,EACAC,EACAvuD,CAAA,EACE,MAAM,QAAQ,IAAI,CACpB,KAAK,SAAS,gBAAgB,YAAY96H,CAAM,EAChD,KAAK,SAAS,gBAAgB,cAAcA,CAAM,EAClD,KAAK,SAAS,gBAAgB,MAAMA,CAAM,EAC1C,KAAK,MAAM,QAAQ,eAAe,GAAK,GACvC,KAAK,MAAM,QAAQ,YAAY,GAAK,GACpC,KAAK,uBAAuBihI,CAAU,EACtCv1H,GAAmB,KAAK,SAAS,aAAa,kBAAkB,mBAAmB1L,CAAM,CAAC,EAC1FuoL,EAAe78K,GAAmB,KAAK,SAAS,aAAa,mBAAmB,qBAAqB1L,CAAM,CAAC,EAAI,OAChH8oL,GAAUA,EAAO,UAAU9oL,CAAM,EAAG8oL,EAAO,aAAa,EAAI,GAAK,OACjEn2K,GAAc,CAAC,OAAA3S,EAAQ,cAAe,GAAK,EAC3C,KAAK,KAAK,2BAA2B,EACtC,EAEKspL,EAAoB,KAAK,aAAe,MAAM,KAAK,qBAAqBL,CAAY,EAAI,OAE9F,MAAO,IAAM,CAoCX,GAjCUr4H,EAAA,UAAU,OAAO,MAAM,EAC9B83H,IACSA,EAAA,UAAU,OAAO,eAAgBrzK,CAAW,EAC5CqzK,EAAA,UAAU,OAAO,MAAM,GAGhC,KAAK,mBACN,KAAK,eAAe,EAGnB,KAAK,MAAM,OAAS1rG,GAAS,QACpBpsB,EAAA,UAAU,OAAO,UAAWo4H,CAAa,EAIlD9C,IACD,KAAK,yBAA2B,GAChBA,EAAA,YAAY,cAAc,iBAAiB,EAAI,EAC/CA,EAAA,WAAW,cAAc,iBAAiB,EAAI,GAG7DqC,GAAgBY,IACJZ,EAAA,UAAU,IAAI,MAAM,EACrB18J,GAAAs9J,EAAmB,OAASj3K,GAAS,CAC5C,CAACvQ,EAAW,GAAK,CAACuQ,GACrBq2K,EAAa,UAAU,OAAO,OAAQ,CAACr2K,EAAK,MAAM,EACnD,GAGA,KAAK,mBACD,kBAAa,KAAM,GAAO,EAAI,EAGlCy2K,IACD,KAAK,eAAiB,OACtB,KAAK,cAAgB,OACrB,KAAK,YAAY,OAAO,GAAM,OAAW,EAAI,EAC7C,KAAK,wBAAwB,EAAI,EACjCA,EAAkB,OAAO,EACtBt7C,GAAO,CACR,MAAMtrI,EAASmnL,EAAc,OACjBr9J,GAAA9pB,EAASmsC,GAAa,CAC5BvsC,EAAW,GACf,KAAK,kBAAkBusC,EAA+B,EAAEnsC,aAAkB,QAAQ,EACnF,CACH,CAGF8mL,GAAgB,QAAQ,EACJO,MACpBZ,GAAe,QAAQxoL,CAAM,EAC7ByoL,GAAU,UAAUzoL,CAAM,EAE1B,IAAIupL,EAAyB,GAC1B,QAAK,MAAQ,KAAK,QAAS,CACtB,MAAAllK,EAAO,KAAK,oBACZva,EAAO,CAACy/K,GAA0B,CAAC,CAACllK,EACfklK,MAAAz/K,GAC3B,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAACA,CAAI,EAC3C,KAAK,QAAQ,gBAAgBvF,EAAK8f,IAAS,UAAY,qBAAuB,aAAa,CAAC,CAC9F,CAEG,QAAK,MAAQ,KAAK,iBAAkB,CACrC,MAAMva,EAAO,CAACy/K,GAA0B,KAAK,KAAK,OAASvsG,GAAS,OACzCusG,MAAAz/K,GAC3B,KAAK,iBAAiB,UAAU,OAAO,OAAQ,CAACA,CAAI,EACpD,KAAK,iBAAiB,gBAAgBvF,EAAKykL,EAAgB,sBAAwB,sBAAsB,CAAC,CAC5G,CAEG,QAAK,MAAQ,KAAK,YAAa,CAChC,MAAMl/K,EAAO,CAACy/K,GAA0B,KAAK,KAAK,OAASvsG,GAAS,MAEpE,GAD2BusG,MAAAz/K,GACxBA,EAAM,CACD,MAAA+xE,EAAc,KAAK,KAAK,SACxBl8E,EAAOa,GAAgB,QAAQq7E,CAAW,EAC1C7lE,EAAoBrW,EAAwB,OAAO,UAAY,eAAkBk8E,EAAY,OAAO,EAAMl8E,EAAmB,OAAO,IAAM,oBAAsB,WAAc,aAC9KmB,EAAOyD,EAAKyR,CAAG,EACrB,KAAK,YAAY,cAAc,OAAO,EAAE,YAAYlV,CAAI,CAC1D,CACA,KAAK,YAAY,UAAU,OAAO,OAAQ,CAACgJ,CAAI,CACjD,CAQG,QAAK,MAAQ,KAAK,eAAgB,CACnC,MAAMA,EAAO,CAACy/K,GAA0B,CAACl8C,GAASrtI,EAAO,OAAY,GAAA86H,EAC1CyuD,MAAAz/K,GAC3B,KAAK,mBAAmB,iBAAiB,CACvC,KAAM,CAACu/K,EAAgB,KAAK,mBAAmB,KAAK,CAAC,CAAC,EACvD,EACD,KAAK,eAAe,UAAU,OAAO,OAAQ,CAACv/K,CAAI,CACpD,CAEA,GAAG,KAAK,KAAM,CACZ,MAAMA,EAAO,CAACy/K,GAA0B,CAACl8C,GAASrtI,EAAO,SAC9BupL,MAAAz/K,GAC3B,KAAK,WAAW,UAAU,OAAO,OAAQ,CAACA,CAAI,CAChD,CAEA,KAAK,YAAY,UAAU,OAAO,OAAQy/K,CAAsB,EAE7D,KAAK,eACD,wBACHpQ,GAAWoQ,EACXN,EACAK,EACAtpL,EAAO,OAAW,EAAAD,EAAQ,KAAO,OACjCC,EAAO,OAAW,EAAAD,EAAQ,SAAW,QAElC,kBAAa,QAAQ,OAAS,GAAKC,EAErC+oL,GAA6BH,GACJG,EAAA,KAAMh5K,GAAY,CACtCpO,MAIJinL,EAAW,gBAAgB,WAAY,CAAC74K,EAAQ,MAAM,EACtD64K,EAAW,UAAU,OAAO,eAAgB,CAAC74K,EAAQ,MAAM,GAC5D,GAIA,wBAAmB,YAAY,OAAW,EAAI,EAKnD,KAAK,WAAakxH,EAEb,aAAQsmD,EAAqB,EAAK,EAI3C,CAEQ,aACNljK,EACAnI,EACAwnJ,EACArnJ,EACAmtK,EACA,CACA,MAAMC,EAAa,KAAK,UAClBpvG,EAAoC,CAAC,KAAAh2D,EAAM,SAAAnI,GAC9Cg+B,GAAUuvI,EAAYpvG,CAAS,GAAK,CAACmvG,IAIxC,KAAK,UAAYnvG,EAEdh2D,EACI,uBAAkB,QAAQ,OAASA,EAEjC,YAAK,kBAAkB,QAAQ,OAGrC,EAAAolK,GAAY,WAAapvG,EAAU,UAAY,CAACmvG,IAIrCxtK,GAAA,CACZ,QAAS,KAAK,kBACd,UAAW,aACX,SAAAE,EACA,SAAUwnJ,EAAgB,EAAI,IAC9B,QAAArnJ,CAAA,CACD,EACH,CAEQ,kBAAkB6xB,EAA6Bw1H,EAAyB,CAC9E,MAAMr1B,EAAUngG,EAAS,SACnBw7I,EAAar7C,GAAS,YAC5B,KAAK,eAAiB,CAAC,CAACA,GAAS,UAAU,OAC3C,KAAK,cAAgBq7C,GAAY,IAAM,gBAAkBA,EAAa,OACvDryK,GAAA,KAAK,gBAAiB,KAAK,cAAgB1W,GAAc,KAAK,cAAc,IAAI,EAAI,EAAE,EACrG,KAAK,gBAAgB,UAAU,OAAO,OAAQ,CAAC,CAAC,KAAK,aAAa,EAClE,KAAK,gBAAgB,UAAU,OAAO,OAAQ,CAAC,KAAK,aAAa,EACjE,KAAK,kBAAkB,UAAU,OAAO,UAAW,CAAC,CAAC,KAAK,aAAa,EACvE,KAAK,wBAAwB+iK,CAAa,CAC5C,CAEQ,wBAAwBA,EAAyB,CACvD,KAAM,CAAC,kBAAAilB,EAAmB,eAAAgB,EAAgB,cAAAjD,CAAA,EAAiB,KAErDxlD,EAAW,CAAC,EAAEyoD,GAAkBjD,GAEhClR,EAAe,KAAK,eACpB94G,EAAOwkE,IAAas0C,GAAgB,CAAC,CAACkR,GAC5C,GAAG,CAACxlD,EAAU,CACT,IAACynD,EAAkB,cACpB,OAGFA,EAAkB,OAAO,CAC3B,CAEA,MAAMzsK,EAAWwgD,EACXrgD,EAAUssK,EAAkB,cAAgB,EAAI,EAEtD,GAAGjC,GAAiBlR,EAAc,CAEhC,MAAMnvJ,EAAQ29B,GAAa0iI,EAAc,KAAMjpB,EAAQ,EAAI,GAAK,GAAK,EAChE,uBAAkB,MAAM,YAAY,kBAAmB,GAAG,KAAK,KAAKp3I,CAAK,CAAC,IAAI,OAG9E,uBAAkB,MAAM,eAAe,iBAAiB,EAG3DsiK,EAAkB,eACf,uBAAkB,QAAQA,CAAiB,EAGlD,KAAK,aAAa,WAAYzsK,EAAUwnJ,EAAernJ,EAAS,EAAI,CACtE,CAEA,MAAc,qBAAqB88J,EAAuF,CACxHA,MAAY,MAAM,KAAK,KAAK,QAAQ,YAAY,GAChD,KAAM,CAAC,OAAAn5K,EAAQ,SAAAK,EAAU,QAAAkX,EAAS,KAAA8M,GAAQ,KAAK,KAC/C,IAAIrO,EAAkBnE,EACtB,GAAG,CAACsnK,EACInjK,EAAA,2CACE3V,GAAY,CAACkX,GAAW,CAACvX,EAAO,SAClCgW,EAAA,kBACE,MAAM,KAAK,SAAS,gBAAgB,YAAYhW,CAAM,EACxDgW,EAAA,2BAEL,KAAK,eAAiB,QAAa,KAAK,eAAiB/V,EAAU,MACpE,MAAM,KAAK,SAAS,mBAAmB,mBAAmBD,CAAM,EAE1DgW,EAAA,0BACEqO,IAAS24D,GAAS,QACpBhnE,EAAA,iCACEuB,GAAW8M,IAAS24D,GAAS,MAAQ,CAAC38E,EAAU,CACxD,MAAM0T,EAAQ,MAAM,KAAK,SAAS,eAAe,cAAc/T,EAAQiU,EAAgB,EACpFF,GACKiC,EAAA,gBACNnE,EAAO,CAAClR,GAAcoT,EAAM,KAAK,CAAC,GAE5BiC,EAAA,SACR,MAEMA,EAAA,UAGD,OAAC,IAAAA,EAAK,KAAAnE,EACf,CAEQ,8BAA8B,CAAC,IAAAmE,EAAK,KAAAnE,EAAO,IAAoD,CAGrG,MAAMnO,EAAIjD,GAAK,QAAQ,IAAI,KAAK,kBAAkB,WAAW,EAC7D,GAAG,CAACiD,EACF,OAGF,MAAMkmL,EAASlmL,EAAE,IACXmmL,EAAUnmL,EAAE,KAClB,OAAAA,EAAE,iBAAiB,CAAC,IAAAsS,EAAK,KAAAnE,CAAK,GAEvB,CAAC,OAAA+3K,EAAQ,QAAAC,EAClB,CAEQ,yBAA0B,CAChC,GAAI,KAAK,kBACT,OAAOt0J,GAAY,KAAK,kBAAoBpF,GACnCA,EAAO,OAASA,EAAO,SAAW,EAC1C,CACH,CAEO,mBACLgpJ,EACA8P,EACAK,EACAziL,EACAC,EACA,CACM,MAAC,UAAA8pD,EAAW,aAAAk5H,CAAgB,OACjBl5H,EAAU,UAAU,SAAS,WAAW,IACpC,CAACuoH,IAEVvoH,EAAA,UAAU,IAAI,eAAe,EACvCA,EAAU,UAAU,OAAO,YAAa,CAACuoH,CAAO,EAC3CvoH,EAAU,WACLA,EAAA,UAAU,OAAO,eAAe,GAG5C,MAAMm5H,EAAqB5Q,GAAW,CAAC8P,GAAgB,KAAK,iBAE3D,CAAAc,GAAsB,KAAK,8BAA8BT,CAAiB,EAExES,EACD,KAAK,iBAAmB,IAAM,CAC5B,KAAK,8BAA8BT,CAAiB,EACpD,KAAK,aAAa,gBAAkB,SAE9B,CAACnQ,GAAW,CAAC8P,GACrBa,EAAa,gBAAkB,QAE3Bb,GACG,uBAAkB,YAAY,OAAW,EAAI,IAGpD,KAAK,iBAAmB,OACxBa,EAAa,gBAAkB,OAC5BjjL,GACI,cAAS,iBAAiB,SAAS,KAAK,KAAK,OAAQ,OAAWA,EAAMC,CAAQ,EAEhF,cAAS,OAAW,EAAK,EAE1BgjL,EAAa,WACV,uBAAkB,YAAY,OAAW,EAAI,GAItD,KAAK,cAAc,CACrB,CAEQ,yBAA0B,CAChC,MAAME,EAAgB,KAAK,kBACtB,uBAAoB,IAAIx6H,GAAmB,CAC9C,YAAa,UAEb,KAAM,UACN,eAAgB,GACjB,EAEI,uBAAkB,MAAM,SAAW,GACxC,KAAK,kBAAkB,MAAM,UAAU,QAAQ,oBAAqB,qBAAqB,EACzF,KAAK,kBAAkB,UAAU,UAAU,QAAQ,oBAAqB,qBAAqB,EACxF,kBAAe,KAAK,kBAAkB,MAC3C,KAAK,4BAA4B,EACb,KAAK,aAEtBy6H,IACDC,GAA6B,KAAK,YAAY,EAG7CF,GACDA,EAAc,MAAM,YAAY,KAAK,kBAAkB,KAAK,EAC5DA,EAAc,YAAY,YAAY,KAAK,kBAAkB,WAAW,EACxEA,EAAc,UAAU,YAAY,KAAK,kBAAkB,SAAS,GAE/D,2BAAsB,OAAO,KAAK,kBAAkB,MAAO,KAAK,kBAAkB,YAAa,KAAK,kBAAkB,SAAS,CAExI,CAEQ,6BAA8B,CACpC,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,UAAY,GAAM,CAC3D,MAAMh0K,EAAM,EAAE,IAEX,GAAAm0K,GAAsB,CAAC,EACxBvtK,GAAY,CAAC,EACb,KAAK,YAAY,UACT,EAAE,SAAW,EAAE,QACAgnK,GAAA,KAAK,aAAc,CAAC,WAClC5tK,IAAQ,UAAYA,IAAQ,aAAe,CAAC,EAAE,SAGvD,GAFA,EAAE,eAAe,EAEdA,IAAQ,SAAU,CACb,MAAAyyB,EAAQ,SAAS,cACjBqY,EAAM,OAAO,eAEbrY,EAAA,SAAS,KAAK,aAAa,WAAW,CAAC,GAAK,KAAK,aAAc,CAAC,EACtEA,EAAM,SAAS,EAAI,EAEnBqY,EAAI,gBAAgB,EACpBA,EAAI,SAASrY,CAAK,OAElB6E,GAAgB,KAAK,YAAY,CAErC,CACD,EAEgBzwB,EAAA,KAAK,aAAe,GAAM,CACtC,IAAC,KAAK,eAAgB,CACd2V,GAAA,CACP,YAAaknD,GAAwB,UAAY,CAClD,EACD,MACF,CAoBM,MAAA0wG,EAAiB,CAAC79K,EAAeyzE,IAAuB,CACtD,MAAA1sD,EAAO0sD,EAAM,wBACbqqG,EAAK99K,EAAE,QACP+9K,EAAK/9K,EAAE,QAGb,OAAG89K,EAAM/2J,EAAK,MAFO,IAEkB+2J,EAAK/2J,EAAK,OAASg3J,EAAKh3J,EAAK,KAAOg3J,EAAMh3J,EAAK,IADhE,EAKf,EAGH0sD,EAAQz6D,EAAgB,EAAE,OAAQ,oBAAoB,EAC5D,GAAGy6D,GAASoqG,EAAe,EAAGpqG,CAAK,EAAG,CACjCA,EAAM,QAAQ,UAAW,OAAOA,EAAM,QAAQ,UAC5CA,EAAM,QAAQ,UAAY,IAC/BxtD,GAAS,CAAC,YAAawtD,EAAM,QAAQ,UAAY,wBAA0B,uBAAuB,EAClG,MACF,CACC,GAAC,eAAgB,KAAK,cAAe,GAErCruD,IACgB9U,EAAA,KAAK,aAAe,GAAM,CACtC,QAAK,kBAAkB,WAAY,CAC/B,uBAAkB,OAAO,EAAK,EACjBy2D,KAClB12D,GAAY,CAAC,EAEb,MACF,CAEI,KAAK,KAAK,cACP,kBAAa,UAAUgpJ,GAAS,IAAI,CAG1C,GAAC,eAAgB,KAAK,cAAe,GA8B1C,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,QAAS,KAAK,cAAc,EACvE,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,QAAS,IAAM,CACxD,KAAK,kBAAkB,EACxB,EAED,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,UAAW,IAAM,CAC1D,KAAK,UAAY,IAGb,KAAK,KAAK,OAAS5oF,GAAS,MAAQ,KAAK,KAAK,OAASA,GAAS,aAClE,KAAK,KAAK,QAAQ,WAAW,UAAU,QAClC,cAAS,mBAAmB,eAAe,KAAK,KAAK,OAAQ,KAAK,KAAK,QAAQ,EAGtF,KAAK,gBAAgB,EAAI,EAC1B,EAED,KAAK,eAAe,IAAI,KAAK,YAAY,EAAE,WAAY,IAAM,CAC3D,KAAK,UAAY,GAGjB,KAAK,gBAAgB,EAAK,EAC3B,CACH,CAEO,cAAe,CACb,YAAK,aAAa,mBAAqB,CAAC,KAAK,UAAU,UAAU,SAAS,WAAW,CAC9F,CAyEQ,eACN8nG,EACAh+K,EACAwC,EAAuD,KAAK,wBAA0B,KAAK,YAC3F,CACA,MAAM0oD,EAAe1oD,GAAS,MACxBg+H,EAAch+H,GAAS,QAAQ,aAC/BihL,EAAav4H,GAAc,IAAM,oBACrCA,EAAa,IACXA,GAAmD,SAA6B,IAC9Ew4H,GACH,CAACx4H,GAAgBu4H,IAClBzjL,EAAS,OAAQyF,GAAMA,EAAE,IAAM,oBAAsBA,EAAE,IAAM,sBAAsB,EAClF,IAACi+K,GAAa,OAAQ,CACpB,KAAK,UACN,KAAK,QAAU,GACf,OAAO,KAAK,UACZ,KAAK,gBAAkB,KAEpB,KAAK,WACN,KAAK,WAAW,EAEhB,KAAK,YAAY,GAIrB,MACF,CAEA,IAAIC,EAAWF,EACf,GAAG,CAACE,EAAU,UAAU1jL,KAAUyjL,EAAa,CACzC,IAAA/gL,EACD,GAAA1C,EAAO,IAAM,uBACd0C,EAAM1C,EAAO,YAEb0C,EAAMq7K,EAAU,MAAM/9K,EAAO,OAAQA,EAAO,OAASA,EAAO,MAAM,EAE/D,EAAE0C,EAAI,SAAS,SAAS,GAAKA,EAAI,SAAS,UAAU,GACrD,SAIOghL,EAAAhhL,EACX,KACF,CAEG,QAAK,UAAYghL,EAClB,OAGF,GAAG,CAACA,EAAU,CACT,KAAK,iBACN,KAAK,eAAe,EAGtB,MACF,CAEA,KAAK,QAAUA,EACf,MAAMC,EAAaH,EACb5+K,EAAU,KAAK,kBAAoB,QAAQ,IAAI,CACnD,KAAK,SAAS,mBAAmB,WAAW8+K,CAAQ,EACpD,KAAK,KAAK,QAAQ,aAAa,CAChC,GAAE,KAAK,CAAC,CAAC33F,EAASuoC,CAAa,IAAM,CAEpC,GADG,KAAK,oBAAsB1vH,IAAS,KAAK,kBAAoB,QAC7D,KAAK,UAAY8+K,EACjB,GAAA33F,GAAS,IAAO,WAAauoC,EAAe,CACvC,MAAAsvD,EAAW,KAAK,WAAW,CAC/B,KAAM,UACN,WAAY,IAAM,CAAC,EACnB,MAAO73F,EAAQ,WAAaA,EAAQ,OAAS,UAC7C,SAAUA,EAAQ,aAAeA,EAAQ,KAAO,GACjD,EAMD,GAJK,qBAAgB,KAAK,aAAc63F,CAAQ,EAChD,OAAO,KAAK,UACZ,KAAK,gBAAkB73F,EAEpB,KAAK,gBAAiB,CACvB,MAAM83F,EAAkBF,GAAcpjD,EAAc,KAAK,gBAAgB,MAAQ,KAAK,gBAAgB,MACtGsjD,EAAgB,cAAc,QAAU,GAElC,MAAAC,EAAcH,GAAe14H,EAAkD,OAAO,kBAAoB,KAAK,gBAAgB,QAAU,KAAK,gBAAgB,OACpK64H,EAAY,cAAc,QAAU,GAETA,EAAY,QAAQ,cAC5B,UAAU,OAAO,OAAQ,CAAC/3F,EAAQ,OAAO,eAAe,CAC7E,CAEA,KAAK,eAAiB,CACpB,SAAU,GACV,GAAI43F,EAAa,CACf,WAAYA,GAAe14H,EAAkD,OAAO,mBAAqB,OACzG,WAAY04H,GAAe14H,EAAkD,OAAO,mBAAqB,QACvG,CAAC,EACP,MACQ,KAAK,iBACb,KAAK,eAAe,CACtB,CACD,CACH,CAEO,cAAc84H,EAAoBC,EAA8B7C,EAAW,GAAM,CACnF,IAAC,KAAK,eAAgB,CACd11J,GAAA,CACP,YAAaknD,GAAwB,UAAY,CAClD,EACD,MACF,CAEAO,GAAiB,YAAY,EAAE,YAAY,KAAK,YAAY,EAEtD,MAAC,MAAO+wG,EAAW,SAAAhG,EAAU,SAAAl+K,GAAY6oK,GAAsB,KAAK,YAAY,EAChFvqI,EAAM4/I,GAAY,EAAIA,EAAWgG,EAAU,OAC3C7kJ,EAAS6kJ,EAAU,OAAO,EAAG5lJ,CAAG,EACvB4lJ,EAAU,OAAO5lJ,CAAG,EAEnC,MAAM6lJ,EAAU/C,EAAW/hJ,EAAO,MAAMq+I,GAAU,qBAAqB,EAAI,KAErE5F,EAAaqM,EAAUA,EAAQ,OAASA,EAAQ,CAAC,EAAE,OAASA,EAAQ,CAAC,EAAE,QAAU9kJ,EAAO,OAI3F,GAHeA,EAAO,MAAM,EAAGy4I,CAAU,EAGzCsJ,GAAYlD,IAAa,GAAI,CAC9B,MAAMn6K,EAAQogL,EAAUA,EAAQ,CAAC,EAAID,EAG/BxiJ,EAAY,SAAS,eAE3B,IAAI0iJ,EAAU,EACR,KAAA1iJ,EAAU,SAAS,IAAM39B,GAAO,CACjC,KAAEqgL,GAAW,IACR,UAAI,MAAM,SAAS,EAIjB1iJ,EAAA,OAAO,SAAU,WAAY,WAAW,CACpD,CACF,CAIuB2iJ,GAAA,KAAK,aAAcL,EAAYC,EAAe,CAACA,CAAY,EAAI,OAAW,KAAK,KAAK,MAAM,CA6EnH,CAaA,MAAc,kBAAkB9zK,EAAgB+tK,EAAmBl+K,EAA4B,CAG7F,MAAMskL,EAAWn0K,IAAU,OAC3B,GAAG,CAACm0K,EAAU,CACZ,MAAMt6K,EAAI6+J,GAAsB,KAAK,kBAAkB,MAAO,GAAM,EAAI,EACxE14J,EAAQnG,EAAE,MACVk0K,EAAWl0K,EAAE,SACbhK,EAAWgK,EAAE,QACf,CAMG,GAJAk0K,IAAa,KACdA,EAAW/tK,EAAM,QAGhBnQ,IAAa,QAAa,CAACskL,EAAU,CACtC,KAAM,CAACrrI,EAAQsrI,CAAW,EAAInN,GAAcjnK,EAAOnQ,CAAc,EACjEA,EAAWuE,GAAcggL,EAAalgL,GAAc40C,CAAM,CAAC,CAC7D,CAIG,GAFK9oC,IAAM,MAAM,EAAG+tK,CAAQ,EAE5B,KAAK,gBAAkB/tK,EACxB,OAGF,KAAK,cAAgBA,EAErB,MAAMg0K,EAAUh0K,EAAM,MAAMutK,GAAU,qBAAqB,EACvD,IAAA8G,EACJ,GAAGL,EAAS,CACJ,MAAAlkL,EAASD,EAAS,CAAC,EAErB,IAAAgQ,EAAQm0K,EAAQ,CAAC,EACf,MAAA/O,EAAYplK,EAAM,CAAC,EAGvB,QAAK,gBACL7W,EAAU,SAAS,SAAS,UAAY,QACxC,MAAM,KAAK,KAAK,QAAQ,eAAe,GACtC,CAAC,qBAAsB,0BAA0B,EAA2B,SAAS8G,GAAQ,CAAC,GAC/FA,EAAO,SAAWkQ,EAAM,QACxB,CAAClQ,EAAO,OAERukL,EAAc,KAAK,eACd,oBAAe,cAAcr0K,CAAK,UAC/BilK,IAAc,IAAK,CACrB,MAAAa,EAAW,KAAK,KAAK,SAAW7/E,GAAmB,KAAK,KAAK,QAAQ,EAAI,OAChE,KAAK,eAAe,WACjCpmF,EACA,KAAK,KAAK,OAAO,OAAW,EAAArQ,GAAe,KAAK,KAAK,OACrDs2K,EACA,KAAK,kBAGLuO,EAAc,KAAK,oBAEb,CAACL,EAAQ,CAAC,GAAK/O,IAAc,IAClC,KAAK,gBAAkB,MAAM,KAAK,eAAe,WAAWplK,EAAO,KAAK,KAAK,MAAM,IACpFw0K,EAAc,KAAK,gBAEbrrL,EAAU,SAAS,MAAM,UACzB6W,IAAM,QAAQ,OAAQ,EAAE,EAC7B,CAACG,EAAM,MAAM,gBAAgB,GAAK,CAACA,EAAM,MAAM,mBAAmB,GAAKH,IACxEw0K,EAAc,KAAK,YACd,iBAAY,WAAWx0K,EAAOolK,CAAS,GAGlD,CAEI,IAAAuB,EACA6N,IACF7N,EAAgB,MAAM,KAAK,KAAK,QAAQ,aAAa,GAGvD6N,EAAc,KAAK,wBAAwBr0K,EAAOwmK,EAAe6N,CAAW,EAEvE,kCAA6B,iBAAiBA,CAAW,CAChE,CAEQ,wBAAwBr0K,EAAewmK,EAAwB6N,EAAsD,CAC3H,IAAIC,EAAkB,GAEhB,MAAAC,EAAoB9uH,GAAkB,CACtC,KAAK,eAINA,GAAQ,CAAC+gH,IACH/gH,EAAA,IAGK1gD,GAAA,CACZ,QAAS,KAAK,aACd,UAAW,OACX,SAAU0gD,EACV,SAAU,IACX,IAGH,GAAG,CAAC4uH,EAAa,CACT,MAAAG,EAAcx0K,EAAM,MAAM,0BAA0B,EAC1D,GAAGw0K,EAAa,CACR,MAAA5rL,EAAW4rL,EAAY,CAAC,EACxB30K,EAAQG,EAAM,MAAMw0K,EAAY,CAAC,EAAE,MAAM,EAC/CF,EAAkBE,EAAY,CAAC,EAAE,SAAWx0K,EAAM,OAElDq0K,EAAc,KAAK,aAEf,KAAK,aAKPE,EAAiB,EAAI,GAJrB,KAAK,aAAe,KAAK,iBAAiB,8CAA+C,CAAC,SAAU,GAAK,EAC5F/kH,GAAA,KAAK,aAAc,EAAI,EACpC,KAAK,sBAAsB,cAAc,aAAa,KAAK,aAAc,KAAK,sBAAsB,WAAW,GAKjH,KAAK,aAAa,WAAW,KAAK,KAAK,OAAQ5mE,EAAUiX,EAAO2mK,CAAa,EAAE,KAAK,CAAC,CAAC,KAAAl9K,EAAM,cAAAihB,KAAmB,CAC1G+pK,GAAmBhrL,EAAK,yBACpB,kBAAa,QAAQ,kBAAoBA,EAAK,wBAGrDihB,EAAc,KAAK,IAAM,CACvBgqK,EAAiB,EAAK,EACvB,EACF,EAAE,MAAOr6K,GAAkB,CAC1Bq6K,EAAiB,EAAK,EACvB,CACH,CACF,CAEA,OAAID,GACK,YAAK,aAAa,QAAQ,kBAGhCD,IAAgB,KAAK,cACtBE,EAAiB,EAAK,EAGjBF,CACT,CAEQ,aAAar0K,EAAgB,CAChC,KAAK,YAAcA,IAItB,KAAK,UAAYA,EACjB,KAAK,aAAa,KAAK,UAAW,CAAC,cAAc,CAAC,EAClD,KAAK,cAAc,EACnB,KAAK,cAAcA,CAAK,EAC1B,CAEO,aAAaA,EAAiBsD,EAAuB,CAC1DtD,MAAU,KAAK,WACD+E,GAAA,CACZ,QAAS,KAAK,UACd,UAAW,gBAAkBzB,EAAa,IAAMA,EAAW,KAAK,GAAG,EAAI,IACvE,SAAUtD,EACV,SAAU,IACX,CACH,CAEO,mBAAmBA,EAAgB,CAGxC,KAAK,gBAAkBA,GAAS,GAChC,KAAK,cAAc,CACrB,CAEA,MAAa,4BAA4B,CACvC,UAAAnV,EACA,QAAA0S,EACA,WAAAk3K,EACA,aAAAC,CACF,EAKI,GAAI,CACA,MAAC,OAAA3rL,CAAM,EAAI,KAAK,KACnB,GAAAA,EAAO,SACD,SAGH,MAAAwG,EAASxG,EAAO,WAEnB,IADUQ,GAAgB,QAAQgG,CAAM,EAClC,OAAO,iBACP,SAGT,IAAIkuB,EAA0BnC,EAC9B,GAAGo5J,EACDj3J,EAAcnwB,EAAK,0BAA0B,UACrCmnL,EACRh3J,EAAcnwB,EAAK,mBAAmB,UAC9B,MAAM,KAAK,SAAS,mBAAmB,mBAAmBvE,CAAM,EACxE00B,EAAcnwB,EAAK,mBAAmB,MACjC,CACL,MAAM2iC,EAAW,MAAM,KAAK,SAAS,kBAAkB,YAAY1gC,CAAM,EAEnEolL,EAAkB,IAAM,KAAK,IAAI,GAAI1kJ,EAAS,yBAA2B,GAAKtM,GAAM,EAAI,CAAC,EAC5F,IAACgxJ,IACK,SAGH,MAAArmL,EAAI,SAAS,cAAc,MAAM,EACvCgtB,EAAU6xJ,GAAW,IAAM,CACzB,MAAMyH,EAAeD,IACnBrmL,EAAA,gBAAgBX,GAAyBinL,CAAY,CAAC,EAEpDA,GACI57F,KAEP,EAAI,EAEPv7D,EAAcnwB,EAAK,eAAgB,CAACgB,CAAC,CAAC,CACxC,CAEM,MAAC,MAAA0qF,CAAK,EAAIX,GAAY,CAC1B,QAAS96E,GAAW,KAAK,iBACzB,SAAU,MACV,UAAW1S,GAAa,KAAK,iBAAiB,cAC9C,YAAA4yB,EACA,QAAS,IAAM,CACHnC,MACL,uBAAkB,kBAAkB,UAAW,EAAK,CAC3D,EACA,KAAM,GACP,EAEI,8BAAkB,kBAAkB,UAAW,EAAI,EAEjD,EACT,CAwRQ,wBAAyB,CAC5B,QAAK,sBAAwB,CAAC,KAAK,WAAY,OAClD,KAAK,qBAAuB,GAEtB,MAAAu5J,EAAa/6I,GAAK,KAAK,UAAU,EACjCg7I,EAAa,KAAK,WACxB,KAAK,YAAY,EACjB,KAAK,cAAc,EACnB,IAAIr0I,EAAW,GACD5nB,GAAa,YACzBqvD,GACA2sG,EACA,IAAM,CACOp0I,EAAA,EACb,GAGI,iBAAiB,QAAS,IAAM,CACpC,KAAK,qBAAuB,GAExBA,GACSq0I,GACb,CACD,CACH,CAEA,MAAc,sBAAuB,CACnC,GAAG,KAAK,mBAAoB,OAC5B,KAAK,mBAAqB,GAEpB,MAAAl2K,EAAU,KAAK,aACbA,EAAA,gBAAAA,EAAA,cAAkB,KAAK,KAAK,QACpC,MAAMk2K,EAAa,KAAK,WACxB,KAAK,YAAY,EACjB,KAAK,cAAc,EAEf,IACI,WAAK,kBAAkBl2K,CAAO,OACzB,CACAk2K,GACb,CAEA,KAAK,mBAAqB,EAC5B,CAEA,MAAa,kBAAkBl2K,EAA2B,CAClD,MAAA7V,EAAS,MAAMu4C,GAAc,oBACnC,KAAK,aAAa,aAAa,CAAC,OAAAv4C,CAAO,GAAE,KAAK,IAAM,CAClD,KAAK,aAAa,KAAK,MAAM,iBAAiB6V,CAAO,EACtD,CACH,CAEO,YAA+B,CACpC,GAAG,CAAC,KAAK,cAAgB,CAAC,KAAK,eAC7B,OAGF,KAAM,CAAC,aAAAm2K,EAAc,eAAAC,EAAgB,aAAAC,EAAc,cAAA5nG,GAAiB,KACpE,MAAO,CAAC,aAAA0nG,EAAc,eAAAC,EAAgB,aAAAC,EAAc,cAAA5nG,CAAa,CACnE,CAEA,MAAa,WAAW6nG,EAAc,GAAMC,EAAY,GAAMC,EAAa,GAAI,CAC7E,GAAG,SAAS,gBAAkB,KAAK,cAAgBx6J,GAAkB,CAC7D,MAAAnuB,EAAI,SAAS,cAAc,OAAO,EAC/B,cAAK,OAAOA,CAAC,EACtB4oL,GAAqB5oL,CAAC,EACjB,uBAAkB,iBAAiB2oL,CAAU,EAClDC,GAAqB,KAAK,YAAY,EACtC5oL,EAAE,OAAO,OAEJ,uBAAkB,iBAAiB2oL,CAAU,EAGjD16J,IAMDqxJ,GAAwB,KAAK,YAAY,EAG3C,KAAK,UAAU,EAEf,IAAIjyK,EAAM,GACPo7K,IACDp7K,EAAM,MAAM,KAAK,SAAS,OAAW,EAAK,GAGzC,CAACA,GAAOq7K,GACT,KAAK,eAAe,CAExB,CAEO,cAAe,CACb,OAAA5W,GAAa,KAAK,YAAY,CACvC,CAEO,eAAgB,CACjB,IAAAtsJ,EAEEssJ,QAAe,KAAK,eAEvB,KAAK,KAAK,OAASx4F,GAAS,SAAWw4F,GAAgB,CAAC,KAAK,gBAAkB,KAAK,gBAAwBtsJ,EAAA,UACvG,KAAK,UAAkBA,EAAA,OACvB,CAAC,KAAK,UAAY,KAAK,WAAa,CAACssJ,GAAgB,KAAK,WAAYtsJ,EAAO,KAAK,KAAK,OAAS8zD,GAAS,UAAY,WAAa,OAC9H9zD,EAAA,SAEX,QAAQ,SAAU,OAAQ,WAAY,SAAS,EAAE,QAASxlB,GAAM,CAC/D,KAAK,QAAQ,UAAU,OAAOA,EAAGwlB,IAASxlB,CAAC,EAC5C,EAEE,KAAK,cACD,kBAAa,UAAU,OAAO,OAAQ8xK,GAAgB,KAAK,KAAK,OAASx4F,GAAS,SAAS,EAG/F,KAAK,sBACD,0BAAqB,UAAU,OAAO,OAAQw4F,GAAgB,KAAK,KAAK,OAASx4F,GAAS,SAAS,EAG1G,KAAK,kBAAkB9zD,CAAI,CAC7B,CAEQ,oBAAoByJ,EAAoB,CACxC,MAAC,SAAUwkJ,EAAa,MAAAlgK,CAAA,EAAS04J,GAAsBh9I,EAAO,GAAM,EAAK,EACzEznB,EAAaC,GAAc8L,CAAK,EAChC7L,EAAgBC,GAAc8rK,EAAajsK,CAAU,EAEpD,OAAC,MAAA+L,EAAO,cAAA7L,EACjB,CAEO,cAAcmhL,EAAa,GAAMC,EAAsB,CACxDjI,GAAgB,IAAI,KAAK,KAAK,IAAI,GAC/B,cAAS,mBAAmB,eAAe,KAAK,KAAK,OAAQ,KAAK,KAAK,SAAU,EAAI,EAG5F,KAAK,aAAe,OACpB,KAAK,WAAa,OAElB,KAAM,CAAC,cAAAn5K,CAAa,EAAI,KAAK,oBAAoB,KAAK,YAAY,EAClE,IAAImqE,EAAa,EACoFnqE,EAAc,OAAQrE,GAAW,CACpI,GAAGA,EAAO,IAAM,sBAAwBA,EAAO,IAAM,2BAA4B,CACzE,MAAAsoK,EAAYtoK,EAAO,OAASA,EAAO,OACzC,OAAOsoK,GAAa95F,EAAa,IAASA,EAAa85F,EAAW,GACpE,CAEO,SACR,EACa,QAAStoK,GAAW,CAChC,MAAMG,EAAkBH,EAAO,IAAM,qBAAuB,CAAC,MAAO+sE,GAAoB/sE,EAAO,OAAO,GAAK,CAAC,MAAOA,EAAO,YAAa,MAAO,IACzI,cAAS,gBAAgB,gBAAgBG,CAAK,EACpD,EAEEqlL,IACD,KAAK,QAAU,GACf,OAAO,KAAK,UACZ,KAAK,gBAAkB,KACvB,KAAK,WAAW,IAGfC,GAAcD,IACf,KAAK,YAAY,EAGnB,KAAK,cAAc,EACnB,KAAK,iBAAiB,CACxB,CAEA,MAAa,YAAY75H,EAAQ,GAAO,CAChC,MAAC,UAAA+5H,EAAW,KAAArlJ,CAAQ,OAC1B,GAAGA,EAAK,OAAS41C,GAAS,WAAa,CAACtqB,GAAS,CAAC+5H,EAAW,CAC3D,KAAK,gBAAgB,EACrB,MACF,CAEM,MAAC,OAAAzsL,CAAU,EAAAonC,EACX,CAAC,UAAAslJ,CAAa,OACd/R,EAAgB,KAAK,KAAK,wBAAwB,EAElD,CAAC,MAAA1jK,EAAO,SAAAnQ,CAAQ,EAAI6oK,GAAsB,KAAK,kBAAkB,MAAO,GAAM,EAAK,EACnFgd,EAAe11K,EAAM,OAE3B,GAAGmwB,EAAK,OAAS41C,GAAS,WAAa,CAACyvG,EAAW,CACjD,IAAIttJ,EAAQ,EACZ,GAAG,KAAK,WACI,UAAAogD,KAAc,KAAK,WAClBpgD,GAAA,KAAK,WAAWogD,CAAU,EAAE,OAIhCpgD,GAAA,CAAC,CAAC,CAACwtJ,EAGZ,MAAMC,GADS,MAAM,KAAK,SAAS,WAAW,UAAU,GAC9B,mBACpBjB,EAAe10K,EAAM,OAAS21K,EAKjC,GAJAjB,GACC,EAAAxsJ,EAGD,MAAM,KAAK,4BAA4B,CACxC,WAAYA,EAAQ,EACpB,aAAAwsJ,CAAA,CACD,EACC,MAEJ,CAGA,GAAGc,EAAW,CACZ,MAAMnjL,EAAU,KAAK,YAClB,GAAAqjL,GAAgBrjL,EAAQ,MACzB,KAAK,SAAS,mBAAmB,YAC/BA,EACA2N,EACA,CACE,SAAAnQ,EACA,UAAA4lL,EACA,QAAS,KAAK,kBAAoB,OAAY,KAAK,gBACnD,eAAgB,KAAK,eACrB,YAAa,KAAK,gBAAkB,KAAK,YAAc,MACzD,GAGF,KAAK,cAAc,MACd,CACL58J,GAAa,YAAYohH,GAAqBlxI,EAAQ,CAACysL,CAAS,EAAGrlJ,EAAK,IAAI,EAE5E,MACF,OACQulJ,IACH,cAAS,mBAAmB,SAAS,CACxC,GAAGhS,EACH,KAAM1jK,EACN,SAAAnQ,EACA,UAAA4lL,EACA,QAAS,KAAK,kBAAoB,OAAY,KAAK,gBACnD,eAAgB,KAAK,eACrB,YAAa,KAAK,gBAAkB,KAAK,YAAc,OACvD,WAAY,GACb,EAEEnI,GAAgB,IAAI,KAAK,KAAK,IAAI,EACnC,KAAK,cAAc,EAAI,EAElB,mBAAc,GAAO,EAAK,GAMnC,GAAG,KAAK,WAAY,CACZ,MAAAuH,EAAa/6I,GAAK,KAAK,UAAU,EAEvC,UAAUwuC,KAAcusG,EACjB,cAAS,mBAAmB,gBAAgB,CAC/C,GAAGnR,EACH,WAAYp7F,EAAW,SAAS,EAChC,KAAMusG,EAAWvsG,CAAU,EAC3B,WAAY,KAAK,iBAAmB,KAAK,gBAAgB,WAAW,cAAc,QAClF,aAAc,KAAK,mBAAmB,EACvC,EAAE,MAAM,MAAMpuE,GAAkB,CAC5BA,EAAI,OAAS,4BACLqhB,GAAA,CACP,YAAa,8BACb,kBAAmB,CAAC,MAAM7f,GAAc,CAAC,OAAA3S,CAAO,EAAC,EAClD,CACH,CACD,EAGCiX,GACF,KAAK,cAAc,CAGvB,CAGF,CAEA,MAAa,wBAAwB,CACnC,SAAA1E,EACA,MAAAmgD,EAAQ,GACR,WAAAknB,EAAa,GACb,OAAAC,EAAS,GACT,OAAAv0D,EACA,gBAAAw0D,CAAA,EAQC,CACDvnE,EAAW,MAAM,KAAK,SAAS,eAAe,OAAOA,CAAQ,EAEvD,MAAA2qC,EAAO3qC,EAAS,OAAS,UAAY,gBAAmBA,EAAS,OAAS,MAAQ,YAAc,aACnG,YAAK,KAAK,OAAO,UAAU,GAAK,CAAE,MAAM,KAAK,KAAK,QAAQ2qC,CAAI,GAC/D1qB,GAAS,CAAC,YAAaknD,GAAwBx8B,CAAI,CAAE,GAC9C,IAGN,KAAK,KAAK,OAAS8/B,GAAS,WAAa,CAACtqB,GAC3C,KAAK,gBAAgB,IAAM,KAAK,wBAAwB,CAAC,SAAAngD,EAAU,MAAO,GAAM,WAAAqnE,EAAY,OAAAC,EAAQ,OAAAv0D,CAAA,CAAO,CAAC,EACrG,IAGL/S,EAIDA,EAAS,SAAW0yD,GAAsB1yD,CAAQ,GAAK,CAACtS,EAAU,SAAW,CAAC65E,GAC/EtjC,GAAa,KAAK,CAAC,QAAS,kBAAmB,GACxC,IAGN,MAAM,KAAK,4BAA4B,CAAC,QAASlxB,CAAO,GAClD,IAGJ,cAAS,mBAAmB,SAAS,CACxC,GAAG,KAAK,KAAK,wBAAwB,EACrC,KAAM/S,EACN,QAAS,GACT,WAAAqnE,EACA,OAAAC,CAAA,CACD,EACI,mBAAcD,EAAY,EAAI,EAEhCrnE,EAAS,OAAS,WACnB,KAAK,SAAS,mBAAmB,kBAAkBA,EAAS,EAAE,EAGzD,IAzBE,EA0BX,CAEQ,qBAAsB,CACtB,MAAC,gBAAA2zK,CAAmB,OAC1B,GAAG,CAACA,EAAwB,SACtB,MAAA2G,EAA2B3G,EAAgB,YAAY,cACtD,OAAC2G,EAAyB,SAC/B/uI,GAAU+uI,EAAyB,MAAO,MAAM,EAAE,UAAU,SAAS,MAAM,CAC/E,CAEQ,oBAAqB,CACpB,OAAC,KAAK,qBACf,CAcO,mBAAmBl/K,EAAa,CACrC,MAAMrE,EAAU,KAAK,KAAK,WAAWqE,CAAG,EAExC,IAAIglB,EAAQggJ,GAAcrpK,EAAQ,QAAS,CAAC,SAAUA,EAAQ,cAAe,kBAAmB,KAAK,KAAK,MAAO,GACjH,MAAMgJ,EAAI,SAAW,CACf,IAAAw6K,EACD,IAAC,KAAK,aAAa,kBAAmB,CACvC,MAAMxD,EAAoB,MAAM,KAAK,qBAAqB,EAAI,EACxD,CAAC,gBAAArI,CAAe,EAAI,KAAK,aAC/B,KAAK,aAAa,gBAAkB,OACpC,KAAM,CAAC,OAAA2I,EAAQ,QAAAC,CAAA,EAAW,KAAK,8BAA8BP,CAAiB,EAE9EwD,EAAmB,IAAM,CACvB,KAAK,aAAa,gBAAkB7L,EACpC,KAAK,8BAA8B,CAAC,IAAK2I,EAAQ,KAAMC,EAAQ,EAEnE,CAEM,MAAAkD,EAAgB,MAAM37K,GAAoB,CAAC,QAAA9H,EAAS,UAAW,CAACA,EAAQ,GAAG,EAAE,EACnF,KAAK,WAAW,CACd,KAAM,OACN,WAAYgJ,EACZ,MAAO/N,EAAK,iBAAiB,EAC7B,SAAUwoL,EACV,MAAAp6J,EACA,QAAArpB,CAAA,CACD,EAED,KAAK,UAAYqE,EACjB,KAAK,YAAcrE,EACXqpB,EAAA,OAER,KAAK,iBAAmBm6J,CAAA,EAExBx6K,GACJ,CAEO,oBAAoB06K,EAAmD,CAC5E,MAAM16K,EAAI,SAAW,CAEb,MAAAu1J,EAAc,OAAO,KAAKmlB,CAAe,EAAE,IAAKztG,GAAeA,EAAW,UAAU,EACpFipD,MAAwB,IAC1B,IAAAhpI,EAAS,EAAGytL,EAA6B,EAE7C,MAAM1qL,EAAIslK,EAAY,IAAI,MAAMtoF,GAAe,CACvC,MAAArtE,EAAO86K,EAAgBztG,CAAU,EACjClzE,EAAW6F,EAAK,IAAI,MAAMvE,GAAQ,CACtC,MAAMrE,EAAW,MAAM,KAAK,SAAS,mBAAmB,iBAAiBi2E,EAAY5xE,CAAG,EACrF+oD,GAAeptD,EAAQ,QAAQ,GAAK,CAACA,EAAQ,QAAU,CAACA,EAAQ,UACjEk/H,EAAK,IAAI,IAAM9xE,GAAeptD,EAAQ,QAAQ,CAAC,EAE1Ck/H,EAAA,IAAI,IAAMl/H,EAAQ,MAAM,EAI7BA,EAAQ,OACR,CAAE,CAAC,qBAAqB,EAA0B,SAASA,EAAQ,MAAM,CAAC,GAC1EA,EAAQ,SAEN,EAAA2jL,CACJ,CACD,EAEK,cAAQ,IAAI5gL,CAAQ,EAE1B7M,GAAU0S,EAAK,OAChB,EAEK,cAAQ,IAAI3P,CAAC,EAEb,MAAApC,EAAgBqoI,EAAK,KAAO,EAC5B0kD,EAAa,CAAC,GAAG1kD,CAAI,EAAE,IAAKA,GAAS,CACnC,MAAAnkH,EAAOmkH,EAAK,CAAC,EAEnB,GADAA,EAAOA,EAAK,MAAM,CAAC,EAChBnkH,IAAS,IAAK,CACT,MAAArkB,EAASwoI,EAAK,WACpB,OAAOxoI,IAAWC,EAAU,KAAOsE,EAAK,4BAA4B,EAAI,IAAIwS,GAAU,CAAC,OAAA/W,EAAQ,OAAQ,GAAO,cAAAG,CAAc,GAAE,YAE9H,QAAOA,EAAgBqoI,EAAK,MAAM,GAAG,EAAE,CAAC,EAAIA,CAC9C,CACD,EAEK,CAAC,gBAAA09C,CAAmB,OACbpoI,GAAUooI,EAAgB,YAAY,cAAc,MAAO,MAAM,EACzE,UAAU,OAAO,OAAQ,CAAC+G,CAA0B,EACnD,MAAAE,EAAcjH,EAAgB,YAAY,cAAc,QAC3D+G,GAA8BE,EACfjH,EAAA,WAAW,cAAc,iBAAiB,EAAI,EACtD,KAAK,2BAA6B,SACzC,KAAK,yBAA2BA,EAAgB,WAAaA,EAAgB,YAAY,cAAc,iBAAiB,EAAI,EAG/H,MAAMkH,EAAwBlH,EAAgB,WAAW,cAAc,QAAU,yBAA2B,wBACtG5lL,EAAQiE,EAAK6oL,EAAU,CAAC5tL,CAAM,CAAC,EAE/B6tL,EAAe,SAAS,yBAC3BH,EAAW,OAAS,EACrBG,EAAa,OAAO,GAAG/oL,GAAK4oL,EAAY,EAAK,CAAC,EAEjCG,EAAA,OAAOH,EAAW,CAAC,EAAG3oL,EAAK,WAAY,CAAC2oL,EAAW,OAAS,CAAC,CAAC,CAAC,EAG9E,IAAII,EAA+BC,EAChC,GAAA1lB,EAAY,SAAW,EAAG,CACrB,MAAAtoF,EAAasoF,EAAY,CAAC,EAC1B31J,EAAO86K,EAAgBztG,CAAU,EAIvC,GAHgB+tG,EAAA,MAAM,KAAK,SAAS,mBAAmB,iBAAiB/tG,EAAYrtE,EAAK,CAAC,CAAC,EAExEq7K,EAAA,CAAC,CAACD,EAAa,WAC/BC,EAAkB,CACnB,MAAMppD,EAAc,MAAM,KAAK,SAAS,mBAAmB,iBAAiBmpD,CAAY,GACrFnpD,EAAY,SAAW3kI,GAAU2kI,EAAY,KAAMx2H,GAAQ,CAACuE,EAAK,SAASvE,CAAG,CAAC,KAC5D4/K,EAAA,GAEvB,CACF,CAEM,MAAAC,EAAmB,SAAS,yBAC5BpqJ,EAAY,KACf,GAAAmqJ,GAAoB/tL,IAAW,EAAG,CACnC,MAAM0S,EAAO86K,EAAgBnlB,EAAY,CAAC,CAAC,EACrCklB,EAAgB,MAAM37K,GAAoB,CAAC,QAASk8K,EAAc,UAAWp7K,EAAK,EACvEs7K,EAAA,OACfH,EACAjqJ,EACA2pJ,CAAA,CACF,MAEiBS,EAAA,OACfjpL,EAAK,6BAA6B,EAClC6+B,EACAiqJ,CAAA,EAIE,MAAA1C,EAAW,KAAK,WAAW,CAC/B,KAAM,UACN,WAAYr4K,EACZ,MAAAhS,EACA,SAAUktL,CAAA,CACX,EAEDtH,EAAgB,WAAW,QAAQ,CAAChxJ,EAAG5xB,IAAQ,CAC7C,MAAMuD,EAAOquB,EAAE,YACTu4J,EAAyBhtL,GAAK,QAAQ,IAAIoG,CAAI,EACpD4mL,EAAK,KAAO,CAACnqL,EAAM,EAAIukK,EAAY,OAASolB,CAA0B,EACtEQ,EAAK,OAAO,EACb,EAEI,qBAAgB,KAAK,aAAc9C,CAAQ,EAChD,KAAK,WAAaqC,CAAA,EAGlB16K,GACJ,CAEA,MAAa,iBAAiBuD,EAA8C,CAC1E,GAAGqkC,GAAU,KAAK,WAAW,EAAGrkC,CAAO,EACrC,OAGF,GAAI,CAAC,aAAAm2K,EAAc,aAAAE,EAAc,cAAA5nG,CAAA,EAAiBzuE,EAClDyuE,MAAkB,KAAK,KAAK,QAC5B,IAAIh7E,EAAU,MACZg7E,EACE,KAAK,SAAS,mBAAmB,iBAAiBA,EAAe0nG,CAAY,EAC7E,KAAK,KAAK,WAAWA,CAAY,GAErC,MAAM15K,EAAI,IAAM,CACd,IAAIhS,EAAoBs4B,EACxB,GAAG,CAACtvB,EACFhJ,EAAQiE,EAAK,SAAS,EAEjB,cAAS,mBAAmB,eAAe+/E,EAAe0nG,CAAY,EAAE,KAAM0B,GAAa,CAC1FxzI,GAAU,KAAK,WAAW,EAAGrkC,CAAO,IAI9BvM,EAAAokL,EACNpkL,EAGAgJ,IAFF,KAAK,YAAY,OAAO,EAG1B,CACD,MACI,CACL,MAAMtS,EAASsJ,EAAQ,OACvBhJ,EAAQ,IAAIyW,GAAU,CACpB,OAAQzN,EAAQ,OAChB,OAAQ,GACR,SAAWtJ,EAAiE,OAAxD02D,GAAgBptD,EAA4B,QAAQ,CACzE,GAAE,QAEHhJ,EAAQiE,EAAK2nL,EAAe,eAAiB,UAAW,CAAC5rL,CAAK,CAAC,CACjE,CAEM,MAAAqqL,EAAW,KAAK,WAAW,CAC/B,KAAM,QACN,WAAYr4K,EACZ,MAAAhS,EACA,SAAAs4B,EACA,QAAAtvB,EACA,eAAgBA,GAAS,OACzB,MAAOA,EAAU4iL,EAAe,OACjC,EACD,KAAK,WAAWr2K,CAAO,EAEvB,KAAK,cAAc,eAAe,QAAQ,UAAU,OAAO,OAAQ,CAAC,KAAK,KAAK,QAAQ,WAAWvM,CAA0B,CAAC,EACvH,mBAAc,WAAW,QAAQ,UAAU,OAAO,OAAQ,CAAC,CAAC4iL,CAAY,EAC7E,KAAK,cAAc,WAAW,QAAQ,UAAU,OAAO,OAAQ,CAACA,CAAY,EACvE,qBAAgB,KAAK,WAAYvB,CAAQ,GAE9Cr4K,GACJ,CAEQ,gBAAgBq7K,EAA+BhD,EAAwB,CAC1E,KAAK,cACD,kBAAa,OAAO,EAAK,EAGhC,KAAK,oBAAoB,YACzB,KAAK,aAAegD,EACLA,GAAA,qBAAqBhD,EAAU,KAAK,cAAc,CACnE,CAEO,WAAW90K,EAA2B,CAC3C,KAAM,CAAC,aAAAm2K,EAAc,aAAAE,EAAc,cAAA5nG,EAAe,eAAA2nG,CAAc,EAAIp2K,GAAW,GAC/E,KAAK,aAAem2K,EACpB,KAAK,eAAiBC,EACtB,KAAK,aAAeC,EACpB,KAAK,cAAgB5nG,EACrB,KAAK,OAAO,EAAI,CAClB,CAEO,YAAYjgE,EAA4B,CAC1C,KAAK,aAAe,QAAUA,IAAS,QACxC,KAAK,WAAW,EAGfA,IACD,KAAK,QAAU,GACf,OAAO,KAAK,UACZ,KAAK,gBAAkB,MAGtBA,IAAS,UACV,KAAK,WAAW,MAAS,EACzB,KAAK,WAAa,QAGf,eAAY,KAAK,YAAc,OAC/B,gBAAa,KAAK,WAAa,OACpC,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EAErB,KAAK,mBACN,KAAK,iBAAiB,EACtB,KAAK,iBAAmB,QAGvB,KAAK,KAAK,WAAa,KAAK,KAAK,UAAU,UAAU,SAAS,kBAAkB,IACjFyN,GAAwB,aAAa,cAAc,EACnD,KAAK,KAAK,UAAU,UAAU,OAAO,kBAAkB,EACvD,KAAK,EAAE,EAEX,CAEQ,GAAI,CACV,MAAM7V,EAAY,qBACJD,GAAA,CACZ,QAAS,KAAK,KAAK,UACnB,UAAAC,EACA,SAAU,GACV,SAAU,IACV,gBAAiB,IAAM,CACrB,KAAK,KAAK,UAAU,UAAU,OAAOA,CAAS,CAChD,EACD,CACH,CAEO,cACLhF,EACA4qD,EAAQ,GACR5T,EAAQ,GACR2/H,EACA,CACU32K,MAAA,IAEP4qD,EAAY,gBAAW,GAAO,GAAO5qD,CAAe,EAC7C,uBAAkB,iBAAiBA,CAAK,EAElDmG,GAAQ,IAAM,CACH6wC,GAAA3gB,GAAgB,KAAK,YAAY,EAC1C,KAAK,uBAAyBsgJ,EACzB,eAAUA,EAAa,MAAM,EAClC,KAAK,eAAe,EACpB,KAAK,uBAAyB,OACzB,kBAAa,UAAY,KAAK,aAAa,aACjD,CACH,CAEO,WAAW,CAChB,KAAAvpK,EACA,WAAAwpK,EACA,MAAAvtL,EACA,SAAAs4B,EACA,eAAA0oD,EACA,MAAA3uD,EACA,QAAArpB,EACA,MAAA02E,CAAA,EAM4F,CACzF,QAAK,iBAAmB37D,IAAS,QAClC,OAGCA,IAAS,YACV,KAAK,YAAYA,CAAI,EACrB,KAAK,WAAaA,EAClB,KAAK,WAAawpK,GAGd,MAAAC,EAAc,KAAK,cAAc,UACjCC,EAAWD,EAAY,iBAAiB,uBACxCE,EAAYD,EAAS,UAAU,SAAS,OAAO,EAErD,KAAK,cAAc,QAAQ,YAAY,KAAK,cAAc,QAAU,KAAK,kBAAkB1pK,IAAS,UAAY,OAASA,GAAQ,cAAe,CAAC,SAAU,EAAK,EAAC,EAC3J,MAAC,UAAAviB,CAAS,EAAIq/E,GAAU,CAC5B,MAAA7gF,EACA,SAAAs4B,EACA,eAAA0oD,EACA,eAAgB,KAAK,KAAK,eAC1B,QAAAh4E,EACA,UAAW,uBACX,MAAA02E,CAAA,CACD,EAED,YAAK,aAAa,sBAAsB,CAAC,OAAQsB,EAAgB,QAASwsG,EAAY,EAEnFE,EACDD,EAAS,YAAYjsL,CAAS,EAElBgsL,EAAA,iBAAiB,OAAOhsL,CAAS,EAG3C,KAAK,KAAK,UAAU,UAAU,SAAS,kBAAkB,IAC3D,KAAK,KAAK,UAAU,UAAU,IAAI,kBAAkB,EACpD,KAAK,EAAE,GAGL0yB,IACF1C,GAAwB,SAAS,CAC/B,KAAM,eACN,MAAO,IAAM,CACX,KAAK,eAAe,CACtB,EACD,EAGAa,IAAU,QACX,KAAK,cAAcA,CAAK,EAG1B,WAAW,IAAM,CACf,KAAK,cAAc,GAClB,CAAC,EAEG7wB,CACT,CACF,EA1xHE0iL,GAAe,sBAAwB,yDAFzC,IAAqBjf,GAArBif,GCpJA,SAAwByJ,GAAoB9mF,EAA4B,CAClE,IAAA+mF,EACD,OAAA/mF,EAAM,OAAO,cACA+mF,EAAA,QACN/mF,EAAM,OAAO,OACP+mF,EAAA,SACN/mF,EAAM,OAAO,kBACP+mF,EAAA,WACN/mF,EAAM,OAAO,SACP+mF,EAAA,WACN/mF,EAAM,UACXA,EAAM,QAAQ,KAAMmvC,GAAgBA,EAAY,IAAM,2BAA2B,EACpE43C,EAAA,WAEAA,EAAA,YAIXA,CACT,CCrBwB,SAAAC,GAAWx7J,EAAoB,EAAmB,CAIxE,GAHAA,EAAM,MAAM,EACZ2a,GAAgB3a,CAAK,EAElB,EAAG,CAEJ,MAAMy7J,EAAW,IAAI,cAAc,EAAE,KAAM,CAAC,EAC5Cz7J,EAAM,cAAcy7J,CAAQ,CAC9B,CACF,CCXA,IAAKC,QACHA,EAAA,QAAU,UACVA,EAAA,OAAS,gBACTA,EAAA,QAAU,iBAHPA,QAAA,ICIL,SAAwBC,GAAY9oJ,EAAcu6C,EAAsBwuG,EAAiBC,EAA6BC,EAAmC,CACjJ,MAAAC,EAAwC3uG,EAC3C,OAAAyuG,IAAcH,GAAiB,OACzB9oJ,GACLC,EACAkpJ,EACCC,GAAe,CACR,MAAAxqK,EAA2CwqK,EAAyB,GACpEn5C,EAAmDm5C,EAAmC,YACrF,OAAAn5C,IAAgB,OAAY,WAAaA,EAAcrxH,CAChE,GAEMqqK,IAAcH,GAAiB,QAChC9oJ,GACLC,EACAkpJ,EAC2C3uG,GAAeA,EAAwB,IAG7Ex6C,GACLC,EACAkpJ,EAC0D3uG,GAAc,WAAcA,EAAwB,GAGpH,CC1BA,SAAwB6uG,GAAsD97H,EAAY,CACxF,UAAUvpD,KAAUupD,EAAS,CAErB,MAAAjpD,EAAWipD,EAAQvpD,CAAM,EAEvBupD,EAAAvpD,CAAM,EAAI,IAAIsI,IAEbpE,GAAQ,IAAM5D,EAAS,GAAGgI,CAAI,CAAC,CAE1C,CAEO,OAAAihD,CACT,CC8EA,MAAM+7H,GAAkBA,CAACluG,EAA8C,IAAIx9D,OAYlE,CAACw9D,YAAWmuG,WAVAA,CAAC,CAAC9uL,SAAQ6rE,UAA6C,IAAM,CAC1EA,EAIF8U,EAAU5vE,IAAI/Q,EAAQ6rE,CAAQ,EAH9B8U,EAAUp2D,OAAOvqB,CAAM,KAWvB,CAAC2gF,UAAWouG,GAAiBD,aAAU,EAAID,GAAe,EAChE5uL,EAAU6jB,iBAAiB,mBAAoBgrK,EAAU,EAEzD,MAAME,GAAsBn/K,GAQD,CACzB,MAAMo/K,EAAkBA,CACtBryJ,EACAoV,EACA2G,EAAc/sC,EAAM8N,MACpBw1K,EAAatjL,EAAMulG,MAAMx4D,CAAW,IACd,CACtB,MAAM7tC,EAAS8xB,EAAO,EAAI,GACpBuyJ,EAAgBD,EAAWx1K,MAAQ5O,EACnCskL,EAAYxyJ,EAAOuyJ,GAAiBD,EAAW/yJ,QAAQ38B,OAAS2vL,EAAgB,EAChFE,EAAazyJ,EAAO+b,GAAgB/sC,EAAMulG,MAAM3xG,OAAS,EAAKm5C,GAAe,EACnF,GAAIy2I,EAKG,GAAIC,GAMJ,GAAGr9I,EAAM,CACd,MAAMs9I,EAAU1jL,EAAMulG,MAAMv0E,EAAO,EAAIhxB,EAAMulG,MAAM3xG,OAAS,CAAC,EAC7D,MAAO,CACLG,KAAM2vL,EACN51K,MAAO41K,EAAQ51K,MAEnB,MAZuB,CACrB,MAAM41K,EAAU1jL,EAAMulG,MAAMx4D,EAAc7tC,CAAM,EAChD,MAAO,CACLnL,KAAM2vL,EACN51K,MAAO41K,EAAQ51K,MAElB,KAVC,OAAO,CACL/Z,KAAMuvL,EACNx1K,MAAOy1K,IAiBPI,EAAoC,CACxC71K,MAAO7J,EAAM6J,OAAS,EACtBgiD,OAAQ,GACR8zH,MAAO,GACPr8H,MAAO,GACPnhB,KAAM,GACNy9I,UAAW,GACXC,cAAe,GACfC,iBAAkB,GAClB3mK,MAAO,CAAC,CAACnZ,EAAMshG,MACfntC,UAAW,GACXhnD,UAAW,EACX,IAAIE,aAAc,CAChB,OAAOtR,EAAMgkL,oBAAsBpnF,KAAKloE,IAAK,EAAG10B,EAAMoR,SACvD,EACD4yK,mBAAoB,EACpBC,cAAe,EACfC,cAAe,EACfzpK,MAAO,EACPC,OAAQ,EACRw1G,OAAQjsH,EAAMisH,OACdi0D,QAASlgL,EAAMkgL,QACf5+E,MAAOthG,EAAMshG,OAAS,CAAE,EACxB,IAAIxxG,MAAO,CACT,OAAOiM,EAAMulG,MAAMvlG,EAAM8N,KAAK,CAC/B,EACDs2K,eAAgB,IAAI1sK,IACpB2rK,mBAGF,IAAIgB,EAAmB//E,EACvB,KAAM,CAACtkG,EAAOC,CAAQ,EAAIC,GAAYyjL,CAAY,EAC5CW,EAAergL,EAAM7P,QAAW6P,EAAMshG,OAASthG,EAAMshG,MAAM,CAAC,EAAEnxG,OAC9DmwL,EAAmCtgL,EAAMkgL,QAAU,UAAY,UAC/D,CAACpvG,YAAWmuG,YAAW,EAAGD,GAAgB,IAAI1rK,IAAI4rK,EAAe,CAAC,EAClEqB,EAAiE,GAEjEC,EAAuB1wL,GAA0C,CACrE,MAAM2wL,EAAY3wL,EAAK2wL,WAAa,EAC9BC,EAAc5wL,EAAKw8B,QAAQ4gF,UAAWh9B,GAAcA,EAAUj+C,GAAKwuJ,CAAS,EAClF,OAAO5qK,KAAK42B,IAAI,EAAGi0I,CAAW,GAG1BC,EAAoBA,CAAC5zJ,EAAeuC,EAAe6S,IAAwC,CAC/F,IAAIy+I,EACJ,MAAMhtL,EAA2B,GACjC,QAAQC,EAAI,EAAGA,EAAIy7B,IACjBsxJ,EAAe7kL,EAAMqjL,gBACnBryJ,EACAoV,EACAy+I,GAAc9wL,KAAOiM,EAAMulG,MAAMnM,QAAQyrF,EAAa9wL,IAAI,EAAIsnB,MAChE,EAEG,EAACwpK,GAPoB,EAAE/sL,EAW1BD,EAAI0qB,KAAKsiK,CAAY,EAGvB,OAAOhtL,GAGHitL,EAAyBA,IAAM,CACnC,CACE,GAAGF,EAAkB,GAAM,EAAG,EAAK,EACnC,GAAGA,EAAkB,GAAO,EAAG,EAAK,CAAC,EACrC/pK,QAAS4mC,GAAW,CACpB,MAAM0yB,EAAY1yB,EAAO1tD,KAAKw8B,QAAQkxB,EAAO3zC,KAAK,EAC/CqmE,GAAWprE,IAAM,oBAClB1U,EAAUG,SAASkkB,kBAAkBw9E,aAAaz0C,EAAO1tD,KAAKK,OAAQ+/E,EAAUj+C,EAAE,CAEtF,CAAC,GAGGvgB,EAAOA,IAAM,CACjB,KAAM,CAACvhB,SAAQ87H,SAAQi0D,SAAQ,EAAGlgL,EAClC,GAAG7P,EAAQ,CACT,GAAG87H,GAAUi0D,EAAS,CACpB,KAAM,CAACpwL,MAAK,EAAGiM,EACT+xB,EAAWh+B,EAAOA,EAAKw8B,QAAQx8B,EAAKw8B,QAAQ38B,OAAS,CAAC,EAAEsiC,GAAK,EAC7DrE,EAAY,GAClB,IAAI9xB,EACJ,OAAGmwH,EACDnwH,EAAU1L,EAAUG,SAASkkB,kBAAkBqsK,iBAAiB3wL,EAAQy9B,EAAWE,CAAQ,EAE3FhyB,EAAU1L,EAAUG,SAASkkB,kBAAkBssK,kBAAkB5wL,EAAQy9B,EAAWE,CAAQ,EAEvFhyB,EAAQsa,KAAK,CAAC,CAACkZ,QAAOhD,QAAS00J,EAAYpC,cAAW,KACvD9wJ,GAWF9xB,EAAS,QAAS,EAAG,UAAYswB,IAAY,CAAC,GAAGA,GAAS,GAAG00J,CAAU,CAAC,EACxEhlL,EAAS,QAAS,EAAG,QAASszB,CAAK,IAJnC2xJ,EAAS,CAP6B,CACpCp3K,MAAO,EACP1Z,SACAm8B,QAAS00J,EACT1xJ,QAGY,CAAC,EACftzB,EAAS,CAACmd,MAAO,EAAI,CAAC,GAMjBknF,EAAS2gF,EAAWrxL,OAASi+B,EACrC,CACH,CAEA,OAAOx9B,EAAUG,SAASkkB,kBAAkBysK,eAAe/wL,CAAM,EAAEimB,KAAM+qK,IACvEC,EAAe,CAACD,CAAW,CAAC,EACrB9gF,EAAS,GACjB,CACH,CAEA,OAAOjwG,EAAUG,SAASkkB,kBAAkB4sK,cAC1CjB,EAAY,GAAOhpK,OACnBgpK,EACAF,CACF,EAAE9pK,KAAMkrK,IACNlB,EAAYkB,EAAkBvlL,MAC9BskG,EAAS,CAACihF,EAAkBtkK,OAAOukK,SACnCH,EAAeE,EAAkBE,YAAY,EAEzCnhF,GAEF3uF,IAGK2uF,EACR,GAGGp9C,EAAiC,CACrC/hD,IAAMs8C,GAAW,CACf,GAAG,CAACA,EAAQ,CACVxhD,EAAS,CAAC2jL,MAAO,EAAI,CAAC,EACtB,MACF,CAEA,MAAM8B,EAAY1lL,EAAMulG,MAAMnM,QAAQ33C,EAAO1tD,IAAI,EAG9C0tD,EAAO3zC,QAAUuN,QAClBpb,EAAS,QAASylL,EAAW,QAASjkI,EAAO3zC,KAAK,EAGpDo5C,EAAQy+H,KAAI,EAET3lL,EAAMjM,OAAS0tD,EAAO1tD,MACvBkM,EAAS,CAAC6N,MAAO43K,CAAS,CAAC,EAM7BZ,GAED,EAED9pJ,MAAQ8oJ,GAAkB,CACxB7jL,EAAS,CAAC6vD,OAAQ,GAAMi0H,iBAAkBD,GAAiB,CAAC9jL,EAAM8vD,MAAM,CAAC,EACzE5I,EAAQ0+H,gBAAgB9B,CAAa,CACtC,EAED17H,KAAMA,CAAC87H,EAAgBlkL,EAAMkkL,gBAAkB,CAC1ClkL,EAAM6jL,WAAa,CAAC7jL,EAAMo4D,YAI7Bn4D,EAAS,CAAC6vD,OAAQ,GAAOo0H,eAAa,CAAC,EACvCh9H,EAAQ0+H,gBAAgB,EAAK,EAC9B,EAEDD,KAAMA,IAAM,CAEVz+H,EAAQlsB,MAAK,EACb/6B,EAAS,CAACmR,UAAW,EAAG4yK,mBAAoB,CAAC,CAAC,CAC/C,EAED6B,QAASA,IAAM,CACb5lL,EAAS,CAAC4jL,UAAW,EAAK,CAAC,EAC3B38H,EAAQy+H,KAAI,EACZz+H,EAAQkB,KAAI,CACb,EAEDr6B,OAAQA,CAACq6B,EAAOpoD,EAAM8vD,SAAW,CAC5B1H,EACDlB,EAAQkB,KAAI,EAEZlB,EAAQlsB,MAAK,CAEhB,EAED/4B,SAAUA,IAAMilD,EAAQ4+H,iBAAiB,EAAK,EAC9C90J,KAAMA,IAAMk2B,EAAQ4+H,iBAAiB,EAAI,EACzCC,qBAAuB/0J,GAAkB,CACvC,GAAGA,EAAM,CACPk2B,EAAQl2B,KAAI,EACZ,MACF,CAEA,MAAMuqE,EAAQv7F,EAAMqjL,gBAAgBryJ,CAAI,EACrC,CAACuqE,GAAUv7F,EAAMkkL,gBAAkB8B,IAAmBhmL,EAAMsR,YAActR,EAAMkkL,cAAiB,GAClGh9H,EAAQ2+H,QAAO,EAEf3+H,EAAQ/hD,IAAIo2F,CAAK,CAEpB,EACDuqF,iBAAmB90J,GAAkB,CACnC,MAAMuqE,EAAQv7F,EAAMqjL,gBAAgBryJ,CAAI,EACxCk2B,EAAQ/hD,IAAIo2F,CAAK,CAClB,EAED0qF,YAAc7oK,GAAU,CACtBnd,EAAS,CAACm4D,UAAWh7C,EAAOwmK,MAAO,EAAK,CAAC,CAC1C,EAEDsC,aAAcA,IAAM,CAClBjmL,EAAS,QAAS,CAAE,EAAGlM,IACd,CAAC+Z,MAAO22K,EAAoB1wL,CAAI,GACxC,CACF,EAEDoyL,WAAYA,IAAM,CAChBlmL,EAAS,CAACsnD,MAAO,CAACvnD,EAAMunD,KAAK,CAAC,CAC/B,EAEDq+H,gBAAkBn/I,GAAS,CACzBxmC,EAAS,CAAC6jL,cAAer9I,CAAI,CAAC,CAC/B,EAED2/I,cAAeA,CAAC3tK,EAAMshJ,IAAW,CAC5BA,EAAQ/5J,EAAMokL,eAAerpK,IAAItC,CAAI,GAEtCzY,EAAMokL,eAAezlK,OAAOlG,CAAI,EAE5BzY,EAAMokL,eAAe7uL,KAEfkjB,IAAS,UACjBqY,GAAe0zJ,EAAoB,CAACrsK,EAAMzgB,IAAQ,CAC7CygB,EAAK8nD,UAAY9nD,EAAK8nD,SAASxnD,OAAS8rK,IACzCC,EAAmBzjF,OAAOrpG,EAAK,CAAC,EAChC2uL,EAAkBluK,EAAM,EAAI,EAEhC,CAAC,EAPDqsK,EAAmBzjF,OAAO,EAAGvL,GAAQ,EAAE36E,QAAS1C,GAASkuK,EAAkBluK,EAAM,EAAI,CAAC,EAU3F,EAEDxC,OAEA2wK,aAAezC,GAAc,CAC3B5jL,EAAS,CAAC4jL,WAAS,CAAC,CACrB,EAED0C,QAAUngJ,GAAS,CACjBnmC,EAAS,CAACmmC,MAAI,CAAC,CACjB,GAGF48I,GAAe97H,CAAO,EAEtB,MAAMs/H,EAAmBA,IAAM,CAC7BjhG,aAAavlF,EAAMikL,aAAa,EAChChkL,EAAS,CACPmR,UAAWwrF,KAAKloE,IAAK,EAAG10B,EAAMgkL,mBAC9BC,cAAez+F,OAAOzlE,WAAW,IAAM,CAClC/f,EAAMomC,KACP8gB,EAAQ2+H,QAAO,EAEf3+H,EAAQl2B,KAAI,CAEf,EAAEhxB,EAAMkkL,cAAgBlkL,EAAMgkL,kBAAkB,CACnD,CAAC,GAGH1iL,GACEC,GACEhB,EAAW,IAAMP,EAAM8vD,QAAU9vD,EAAM6jL,SAAS,EAC/C/zH,GAAW,CACPA,GACDy1B,aAAavlF,EAAMikL,aAAa,EAChChkL,EAAS,CAAC+jL,mBAAoBpnF,KAAKloE,IAAK,EAAG10B,EAAMoR,SAAS,CAAC,GAE3Do1K,GAEJ,EACA,CAAC7lK,MAAO,EACV,EACF,EAEA,MAAMyI,EAAiBq9J,KAGjBC,EAAuBA,IACpB5mJ,GAAWplB,OAAS,GAAK,EAAI,EAAI,EAAI,EAGxCisK,EAAsBA,CAACjsK,EAASgsK,MAE7B5sK,KAAK22B,IAAI3Q,GAAWrlB,MAAOC,EAASuuE,KAAK,EAG5C29F,EAAgBA,IAAM,CAC1B,MAAMlsK,EAASgsK,IACf,MAAO,CAACjsK,MAAOksK,EAAoBjsK,CAAM,EAAGA,WAO9CpZ,GAJiBulL,IAAM,CACrB5mL,EAAS2mL,EAAa,CAAE,EAGL,EAGrB,MAAME,EAAeA,CAAC1yL,EAAgBmxG,EAAQvlG,EAAMulG,QAC3CA,EAAM4L,UAAWp9G,GAASA,EAAKK,SAAWA,CAAM,EAGnD2yL,EAAqB3B,GAAsD,CAC/E,MAAMrxL,EAAgC,CAEpCK,OAAQqG,GAAU2qL,EAAYrxL,IAAI,EAClCw8B,QAAS60J,EAAY70J,QACrBm0J,UAAWU,EAAY4B,YACvBzzJ,MAAO6xJ,EAAY70J,QAAQ38B,QAG7BG,SAAK+Z,MAAQ22K,EAAoB1wL,CAAI,EAC9BA,GAGHmxL,EAAYA,GAAwC,CACxD,MAAM+B,EAAmD,GACzD,IAAIC,EAAqBlnL,EAAM8N,MAE/B,MAAMy3F,EAAQvlG,EAAMulG,MAAMnoB,MAAK,EACzB+pG,EAAgB,IAAI5vK,IAAIguF,EAAM3oF,IAAI,CAAC7oB,EAAM2D,IAAQ,CAAC3D,EAAKK,OAAQsD,CAAG,CAAC,CAAC,EACpEg5E,EAAgB1wE,EAAMjM,MAAMK,OAC5Bk0I,EAAe6+C,EAActvK,IAAI64D,CAAa,GAAK,GACzD,UAAU38E,KAAQmxL,EAAU,CAM1B,MAAMkC,EAAkBD,EAActvK,IAAI9jB,EAAKK,MAAM,GAAK,GACpDizL,GAAe9hF,EAAM6hF,CAAe,EACpCE,GAAW13J,GAAMy3J,IAAcv5K,OAAS22K,EAAoB1wL,CAAI,EAAG,EAAGA,EAAKw8B,QAAQ38B,OAAS,CAAC,EAEhGG,EAAK+Z,QAAUw5K,IAChBL,EAAc1kK,KAAK,CAACnuB,OAAQL,EAAKK,OAAQ0Z,MAAOw5K,EAAQ,CAAC,EAIxDF,IAAoB,KACrB7hF,EAAM6hF,CAAe,EAAIrzL,GAG3B4lC,GAA2B4rE,EAAOxxG,EAAOA,IACtBghF,EAAUl9D,IAAI9jB,GAAKK,MAAM,GACzB0Z,OAAS,EACzBs5K,CAAe,CACpB,CAEA,GAAG9+C,IAAiB,GAAI,CACtB,MAAMi/C,EAAkBT,EAAap2G,EAAe60B,CAAK,EACtDgiF,IAAoBj/C,IACrB4+C,EAAqBK,EAEzB,CAEA/lL,GAAM,IAAM,CACVvB,EAAS,QAASI,GAAUklG,EAAO,CAACn7F,IAAK,SAAUo9K,MAAO,EAAK,EAAC,EAChEvnL,EAAS,CAEP6N,MAAOo5K,CACT,CAAC,EAED,SAAU,CAAC9yL,SAAQ0Z,OAAM,IAAIm5K,EAAe,CAC1C,MAAMvB,GAAYoB,EAAa1yL,EAAQmxG,CAAK,EAC5CtlG,EAAS,QAASylL,GAAW,QAAS53K,CAAK,CAC7C,CACF,CAAC,GAGG25K,EAAcrzL,GAAmB,CACrC,GAAGkwL,EACD,OAAOA,IAAiBlwL,EAG1B,MAAM6rE,EAAW8U,EAAUl9D,IAAIzjB,CAAM,EACrC,OAAI6rE,EAIGA,EAASxnD,OAAS8rK,EAHhB,IAMLc,EAAkBD,GAA+B,CACrD,MAAM7/E,EAAQ6/E,EAAYxoK,IAAImqK,CAAiB,EAC/C7B,EAAS3/E,CAAK,EACdtlG,EAAS,CAACmd,MAAO,EAAI,CAAC,GAGlBsqK,EAAaA,CAACtzL,EAAgBsxL,EAAYoB,EAAa1yL,CAAM,IAAM,CACvE,GAAGsxL,IAAc,GACf,OAGF,MAAM52G,EAAW9uE,EAAM8N,QAAU43K,EACjClkL,GAAM,IAAM,CACV,MAAMmmL,EAAW3nL,EAAMulG,MAAMnoB,MAAK,EAClCuqG,EAAS5mF,OAAO2kF,EAAW,CAAC,EAC5B,MAAM4B,EAAWtnL,EAAM8N,MAAQ43K,EAAY1lL,EAAM8N,MAAQ,EAAI9N,EAAM8N,MACnE7N,EAAS,CACPslG,MAAOoiF,EACP,GAAIA,EAAS/zL,OAAS,GAAK,CAACgwL,MAAO,EAAK,EACxC,GAAI0D,EAAWK,EAAS/zL,OAAS,CAACka,MAAOw5K,CAAQ,EAAI,CAAC1D,MAAO,EAAK,CACpE,CAAC,EAEE90G,GACD5nB,EAAQ2+H,QAAO,CAEnB,CAAC,GAIG+B,EAAgBA,CAAC,CAACxzL,SAAQmnG,QAAOssF,iBAAgBC,kBAAiBC,qBAAoD,IAAM,CAChI,MAAMrC,EAAYoB,EAAa1yL,CAAM,EACrC,GAAGsxL,IAAc,GACf,OAGF,MAAM3xL,EAAOiM,EAAMulG,MAAMmgF,CAAS,EAC5BsC,EAAaj0L,EAAKw8B,QAAQ4gF,UAAWx3G,GAAMA,EAAEu8B,KAAOqlE,EAAMrlE,EAAE,EAElE,GAAGjyB,EAAMisH,QAAU23D,EAAgB,CAC5BtsF,EAA8Bt6E,OAAOivG,OAGxC+3D,EAAW,CAAC7zL,SAAQmnG,QAAOqnF,UAAWH,GAAiByF,OAAQxD,UAAW3wL,EAAK2wL,SAAS,CAAC,EAFzFyD,EAAe,CAAC/zL,SAAQ8hC,GAAIqlE,EAAMrlE,EAAE,CAAC,EAKvC,MACF,CAGA,GAAGjyB,EAAMisH,QAAU63D,EAAqB,CAEtC,GADqBxsF,EAA8BquC,cAEjCvuH,QAChBkgF,EAAMrlE,GAAKniC,EAAKw8B,QAAQx8B,EAAKw8B,QAAQ38B,OAAS,CAAC,EAAEsiC,IACjD,CAACouE,EACD,CACA6jF,EAAe,CAAC/zL,SAAQ8hC,GAAIqlE,EAAMrlE,EAAE,CAAC,EACrC,MACF,CAEG8xJ,IAAe,GAChBC,EAAW,CAAC7zL,SAAQmnG,QAAOqnF,UAAWH,GAAiByF,OAAQxD,UAAW3wL,EAAK2wL,SAAS,CAAC,EAEzFzkL,EAAS,QAASylL,EAAW,UAAWrlL,IAAYkwB,KAClDA,GAAUA,GAAQ6sD,QAClB7sD,GAAQwwE,OAAOinF,EAAY,CAAC,EAC5BtF,GAAYnyJ,GAASgrE,EAAO,GAAOknF,GAAiByF,MAAM,EACnD33J,KACNx8B,EAAKw8B,OAAO,EAAG,CAACnmB,IAAK,KAAMo9K,MAAO,EAAK,EAAC,EAE7C,MACF,CAEA,GAAGQ,IAAe,GAAI,CACjB/jL,EAAMkgL,SAAWG,GAAgBwD,GAClCG,EAAW,CAAC7zL,SAAQmnG,QAAOqnF,UAAWH,GAAiB2F,QAAS1D,UAAW3wL,EAAK2wL,SAAS,CAAC,EAG5F,MACF,CAEAzkL,EAAS,QAASylL,EAAW,UAAWsC,EAAY3nL,GAAUk7F,CAAK,CAAC,GAGhE8sF,EAAoBjD,GAA6B,CACrD,MAAMhxL,EAASqG,GAAU2qL,EAAYrxL,IAAI,EACrC0zL,EAAWrzL,CAAM,GAIrBixL,EAAe,CAACD,CAAW,CAAC,GAGxB6C,EAAaA,CAAC,CAAC7zL,SAAQmnG,QAAOqnF,YAAW8B,WAAuC,IAAM,CAK1F,GAJG,CAAC+C,EAAWrzL,CAAM,GAIlB6P,EAAMisH,QAAU,CAAE30B,EAA8Bt6E,QAAQivG,OACzD,OAGF,MAAMw1D,EAAYoB,EAAa1yL,CAAM,EACrC,GAAGsxL,IAAc,GAAI,CACnB,MAAM3xL,EAAgC,CACpCK,SACAm8B,QAAS,CAACgrE,CAAK,EACfmpF,YACAnxJ,MAAO,GAETx/B,EAAK+Z,MAAQ22K,EAAoB1wL,CAAI,EACrCmxL,EAAS,CAACnxL,CAAI,CAAC,EACf,MACF,CAIA,MAAMi0L,EAFOhoL,EAAMulG,MAAMmgF,CAAS,EACbn1J,QACM4gF,UAAWx3G,GAAMA,EAAEu8B,KAAOqlE,EAAMrlE,EAAE,EAC7D,GAAG8xJ,IAAe,GAAI,CACpB/nL,EAAS,QAASylL,EAAW,UAAWsC,EAAYzsF,CAAK,EACzD,MACF,CAEA/5F,GAAM,IAAM,CACV,MAAM8mL,EAAoBtoL,EAAMjM,KAAK+Z,MACrC,IAAIy6K,GACJtoL,EAAS,QAASylL,EAAW,UAAYn1J,KACvCA,GAAUA,GAAQ6sD,QAClBmrG,GAAa7F,GAAYnyJ,GAASgrE,EAAO,GAAOqnF,CAAS,EAClDryJ,GACR,EAEDtwB,EAAS,QAASylL,EAAW,QAAUnyJ,IAAUA,GAAQ,CAAC,EAEvDg1J,IAAcD,GACfroL,EAAS,QAASylL,EAAW,QAAU53K,IAAUA,GAAQ,CAAC,CAE9D,CAAC,GAGGq6K,EAAiBA,CAAC,CAAC/zL,SAAQ8hC,IAAgC,IAAM,CACrE,MAAMwvJ,EAAYoB,EAAa1yL,CAAM,EACrC,GAAGsxL,IAAc,GACf,OAGF,MAAM3xL,EAAOiM,EAAMulG,MAAMmgF,CAAS,EAC5Bn1J,EAAUx8B,EAAKw8B,QACfy3J,EAAaz3J,EAAQ4gF,UAAWx3G,GAAMA,EAAEu8B,KAAOA,CAAE,EACvD,GAAG8xJ,IAAe,GAIlB,IAAGz3J,EAAQ38B,SAAW,EAAG,CACvB8zL,EAAWtzL,EAAQsxL,CAAS,EAC5B,MACF,CAEAlkL,GAAM,IAAM,CACPxB,EAAMjM,OAASA,GAAQA,EAAK+Z,QAAUk6K,GACvC9gI,EAAQl2B,KAAI,EAGd/wB,EAAS,QAASylL,EAAW,UAAYn1J,IACvCA,EAAUA,EAAQ6sD,QAClB7sD,EAAQwwE,OAAOinF,EAAY,CAAC,EACrBz3J,EACR,EAEDtwB,EAAS,QAASylL,EAAW,QAAUnyJ,GAAUA,EAAQ,CAAC,EAEvDx/B,EAAK+Z,OAASk6K,GACf/nL,EAAS,QAASylL,EAAW,QAAS3xL,EAAK+Z,MAAQ,CAAC,CAExD,CAAC,IAGG06K,EAAgBA,CAAC,CAACp0L,SAAQswL,WAA0C,IAAM,CAC9E,MAAMgB,EAAYoB,EAAa1yL,CAAM,EAClCsxL,IAAc,IAIjBzlL,EAAS,QAASylL,EAAW,YAAahB,CAAS,GAe/C2B,EAAoBA,CAACluK,EAA2CswK,IAA4B,CAChG,KAAM,CAACr0L,SAAQ6rE,UAAS,EAAG9nD,EAC3B,GAAGnY,EAAMokL,eAAe7uL,MAAQ,CAACkzL,EAAe,CAC9C,MAAMC,EAAmB3zG,EAAUl9D,IAAIzjB,CAAM,EAC7C,GAAGs0L,GAAkBjwK,OAASwnD,GAAUxnD,MAASzY,EAAMo4D,WAAaswH,GAAoBzoH,EAAW,CACjG30B,GAAck5I,EAAqBrsK,GAASA,EAAK/jB,SAAWA,CAAM,EAClEowL,EAAmBjiK,KAAKpK,CAAI,EAC5B,MACF,CACF,CAIA,GAFA+qK,EAAW/qK,CAAI,EAEZ,CAACsvK,EAAWrzL,CAAM,EAAG,CACtBszL,EAAWtzL,CAAM,EACjB,MACF,CAEA,MAAML,EAAOiM,EAAMulG,MAAM5pF,KAAMhlB,GAAMA,EAAEvC,SAAWA,CAAM,EACpDL,GAIJmxL,EAAS,CAACnxL,CAAI,CAAC,GAGjBq1B,SAAerO,IAAI1mB,CAAS,EAAE,eAAgBuzL,CAAa,EAC3Dx+J,EAAerO,IAAI1mB,CAAS,EAAE,gBAAiB8zL,CAAc,EAC1D,CAAClkL,EAAMkgL,SAAW,CAAClgL,EAAMisH,QAC1B9mG,EAAerO,IAAI1mB,CAAS,EAAE,gBAAiB8zL,CAAc,EAE3DlkL,EAAM0kL,aACRv/J,EAAerO,IAAI1mB,CAAS,EAAE,YAAa4zL,CAAU,EAEnD3D,IACFl7J,EAAerO,IAAI1mB,CAAS,EAAE,kBAAmBg0L,CAAgB,EACjEj/J,EAAerO,IAAI1mB,CAAS,EAAE,eAAgBm0L,CAAa,EAE3Dp/J,EAAerO,IAAI1mB,CAAS,EAAE,mBAAoBgyL,CAAiB,GAIlEpiL,EAAM2kL,eACP3kL,EAAM2kL,eAAe1hI,EAAQvxC,IAAI,EACxB3V,EAAMod,MAEPpd,EAAMjM,KAAK+Z,QAAUuN,QAC7B6rC,EAAQg/H,aAAY,EAFpBh/H,EAAQvxC,KAAI,EAKP,CAAC3V,EAAOknD,CAAO,CACxB,EAGM2hI,GAAiBC,GAAa,EACvBC,GAA8E9kL,IACxEszC,GAAWtzC,EAAO,CAAC,QAAS,QAAS,SAAU,SAAU,SAAS,CAAC,EACpFkT,EACG0xK,GAAeG,SAAQ,KAAC39K,OAAK,QAAE+3K,GAAmBn/K,CAAK,CAAC,MAAAif,UAAA,QACtDjf,EAAMif,QAAQ,KAKR+lK,GAAaA,IAAMC,GAAWL,EAAc,EC3yBzD,SAAwBM,GAAgBzvK,EAAqB,CAC3D,MAAO,CAAC,CAACA,GAAWA,EAAO,UAAY,SAAW,CAAC,CAAC,WAAY,OAAO,EAAE,SAAUA,EAA4B,IAAI,GAAMA,EAAO,iBAClI,CCAA,SAAwB0vK,GAAmB7tF,EAA4B,CACrE,MAAMxwC,EAAUwwC,EAAM,SAClB,IAAA8tF,EACJ,GAAG,GAACt+H,IACsBs+H,GAAA9tF,EAAM,aAAe,IAAI,KAAM+tF,GAAcA,EAAU,IAAM,sBAAsB,EACxG,CAACD,IAKC,OAAC,QAAAt+H,EAAS,qBAAAs+H,EACnB,6QC+FarD,GAAiB,IACxBuD,GAA2B,GAC3BC,GAAoB,IACpBC,GAAmB,EACnBC,GAA0B,EAC1BC,GAA0B,cAChC,IAAIC,GAAoBjiL,GAExBtT,EAAU6jB,iBAAiB,aAAe28B,GAAc,CACtD,MAAMl6C,EAASk6C,EAAUg1I,0BACzBD,GAAoBjvL,EAASA,EAAO4/F,SAAS,EAAK,EAAI5yF,EACxD,CAAC,EAED,MAAM4e,GAAI,IAAId,GAAoBpK,OAAW,EAAI,EAoB1C,SAASorK,IAAuB,CACrC,MAAMr9J,EAAiB,IAAImD,GAC3BxpB,UAAU,IAAMqmB,EAAeygF,UAAS,CAAE,EACnCzgF,CACT,CAEA,MAAM0gK,GAAe7lL,GAKf,CACJ,IAAI+jL,EAA8B+B,EAClC,GAAG9lL,EAAM+lL,YAAa,CACpB,MAAMC,EAAyB91G,GAAmC,CAChE,MAAMnkB,EAAYmkB,EAAUntE,KACtBA,EAAO,IAAI41F,KAAK5sC,EAAY,GAAI,EACtChpD,SAAKkjL,SAAS,EAAG,EAAG,CAAC,EACdljL,EAAKmjL,WAGRC,EAAwB7pL,EAAW,IAAM,CAC7C,MAAMgwB,EAAUtsB,EAAMjE,MAAMuwB,QACtBu4E,EAAoC,GACzCv4E,SAAkC1V,QAAS0gF,GAAU,CACpD,MAAMjrB,EAAgB25G,EAAsB1uF,CAAK,GAChDuN,YAAwB,CAAE,IAAEvmF,KAAKg5E,CAAK,CACzC,CAAC,EACMuN,CACT,CAAC,EAEDihF,EAAmBxpL,EAAW,IAAM,CAClC,MAAMuoG,EAAOshF,IACP7uF,EAAQt3F,EAAMomL,eACd/5G,EAAgB25G,EAAsB1uF,CAA4B,EACxE,OAAOuN,EAAKx4B,CAAa,CAC3B,CAAC,EAED03G,EAAaznL,EAAW,IAAM,CAC5B,MAAMg7F,EAAQt3F,EAAMomL,eAGpB,OAFgBN,IAED3wF,QAAQmC,CAAK,CAC9B,CAAC,CACH,MACEwuF,EAAmBA,IAAM9lL,EAAMjE,MAAMuwB,QACrCy3J,EAAaA,IAAM/jL,EAAMjE,MAAM8N,MASjC,OANYqJ,EACT2pD,GAAG,KAACC,MAAI,QAAEgpH,EAAgB,CAAE,EAAA7mK,SAC1BA,CAACna,EAAGjR,IAACqf,EAAMmzK,GAAUvmK,GAAA,IAAKwmK,GAAWtmL,EAAO,CAACumL,WAAY1yL,EAAGkwL,YAAW,EAAC,GAE5E,CAGH,EAEMsC,GAAcrmL,GAKd,CACJ,KAAM,CAACwrB,EAAUi7E,CAAW,EAAIxnG,GAAa,CAAC,EACxC,CAACqtB,CAAO,EAAI04J,KAEZwB,EAA0BA,IAAM,CAEpC,MAAMh7J,GADcmtE,KAAKloE,IAAG,EAAKnE,EAAQnf,WACVmf,EAAQ2zJ,cACvCx5E,EAAYj7E,CAAQ,GAGhBi7J,EAASA,IAEXn6J,EAAQx8B,OAASkQ,EAAMjE,OACvBiE,EAAM+jL,WAAY,IAAK/jL,EAAMumL,cAC7Bj6J,EAAQu/B,QAER6C,IACO,KAOT83H,IACO,IAGH93H,EAAUA,IAAM,CACpBwiE,GAAqBzxH,CAAG,GAGpB8kD,EAASA,IAAM,CACnB14B,GAAc46J,EAAQhnL,CAAG,GAG3BpC,GAAa,IAAM,CACjB,GAAGivB,EAAQx8B,OAASkQ,EAAMjE,MAAO,CAC/B2yD,IACA,MACF,CAEArxD,GAAaC,GACX,IAAM,CAAC0C,EAAM+jL,WAAU,EAAI/jL,EAAMumL,WAAY,GAC7C,CAAC,CAACxC,EAAYwC,CAAU,IAAM,CACXxC,IAAewC,GAE9B9/E,EAAYrvF,MAAS,EAErB/Z,GAAa,IAAM,CACdivB,EAAQu/B,QAAUv/B,EAAQszJ,UAC3BlxH,IAEAnK,GAEJ,CAAC,IAEDmK,IACA+3C,EAAYs9E,EAAawC,EAAa,EAAInvK,MAAS,EAEtD,EACH,CACF,CAAC,EAED,MAAM3X,GAAG,WAAAkT,EAAAC,KAAAL,UAAA6M,GAAA,OAAAC,EAEE4gD,GAAOymH,uBAAsBpnK,EAE7BkM,EAAU,IAAKpU,OAAY,CAAC,aAAcvB,KAAK22B,IAAI,IAAKhhB,EAAU,EAAG,GAAG,EAAI,GAAI,EAAG,GAAEnM,WAAAD,EAAAC,KAAAG,GAAA7M,EAAAyM,EAAAC,KAAA,EAAAD,EAAAE,KAAA2hE,GAAAtuE,EAAA2M,EAAAF,EAAAE,IAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAAzE,MAIhG,OAAOlT,CACT,EAEMknL,GAA4B,IAC5BC,GAAqBv3I,GAAwBA,GAAqCE,WAAao3I,GAE/FE,GAAc7mL,GAed,CACJ,KAAM,CAACssB,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAAC3lH,EAASC,CAAU,EAAIt/D,EAAM8mL,cAC9B,CAACC,EAAYC,CAAa,EAAIhnL,EAAMinL,iBACpC,CAACC,EAAeC,CAAgB,EAAInnL,EAAMonL,oBAC1C,CAACC,EAAWC,CAAY,EAAIroL,GAAa,EAAK,EAC9Cmb,EAAmBxa,KACnB9N,EAAasoB,EAAiBxG,MAE9B2jB,EAAO,IAAIi8H,GAAKj/H,GAAcnkC,EAAUG,SAAU,GAAO,CAACwC,SAAU,GAAMw0L,YAAa,EAAI,CAAC,EAClGhwJ,EAAKiwJ,QAAQr6G,GAASs6G,OAAO,EAC7BlwJ,EAAKmwJ,aAAe,GAEpB,MAAMC,EAAkB,SAAW,CAGjC,MAAMt4I,EADgB,CADRrvC,EAAMomL,eACSwB,cAC2B,CAAC9iL,EAAG,gBAAiByqC,SAAUo3I,IAA3CvvK,OAC5CpX,EAAM6nL,aAAa,CAACx4I,WAAU55B,OAAQqyK,CAAa,CAAC,GAGtD,IAAIA,EACa50K,EACdkpG,GAAa,CAAA7oE,IAAAgpB,EAAA,OAAA58C,EACPmoK,EAAa,OAAAnoK,gBAAA48C,CAAA,EAAburH,EAAavrH,CAAA,EAClB/3C,QAASmjK,EACTI,SAAU,GAAE,kFAEZ39E,SAAU,GAAI,IAAAnrF,UAAA,QAEbjf,EAAMqvC,UAAU,EAEpB,EAED,MAAMvsB,EAAQyU,EAAKzU,MAAQ,IAAI4yI,GAAUn+H,EAAMhD,GAAcnkC,EAAUG,SAAU,eAAe,EAChGuyB,EAAMsnF,SAAW,GACjBtnF,EAAMklK,YAAcF,EACpBhlK,EAAM4wI,aAAe,CACnB3yC,YAAa,GACbknE,UAAW,GACXC,WAAY,GACZC,MAAO,GACPC,eAAgB,GAChBC,cAAe,GACftP,WAAY,GACZuP,eAAgB,GAChBC,YAAa,GACbn5I,UAAWzqB,IAEb7B,EAAM0lK,eAAiB,GACvB1lK,EAAMjjB,cAAgB,IAAImC,IAASlQ,EAAWuoB,SAASzG,IAAI,GAAG5R,CAAI,EAgBlE,MAAMwiB,EAAW9nB,GAAkB,CAKjC,MAAM+Y,EAAS/Y,EAAE+Y,OACJ,CAACC,EAAgBD,EAAQwqD,GAAOwoH,oBAAoB,IAC/D/yK,EAAgBD,EAAQwqD,GAAOyoH,WAAW,GAC1CjzK,EAAOY,UAAUi/F,SAASr1C,GAAO0oH,MAAM,KAMzC57K,GAAYrQ,CAAC,EACb4iE,EAAW,EAAK,IAGlBxgE,GAAU,IAAM,CACXuzB,IACDpQ,GAAwBmrI,WAAW/6H,CAAc,EACjDA,EAAiBjb,OAErB,CAAC,EAED,IAAIib,EACJh1B,GACEC,GACE,IAAM+hE,EAAO,EACZA,GAAY,CACRA,GACDupH,EAAiBhrL,GAAQ,IAAM,CAAC0uB,EAAQu/B,MAAM,EAE9CnpD,SAASuR,iBAAiB,QAASuQ,EAAS,CAACs6I,QAAS,EAAI,CAAC,EAC3D78I,GAAwBkrI,SAAS96H,EAAiB,CAChD7d,KAAM,gBACN04I,MAAOA,IAAM,CACX5tF,EAAW,EAAK,CAClB,CACF,CAAC,IAGD58D,SAASguJ,oBAAoB,QAASlsI,EAAS,CAACs6I,QAAS,EAAI,CAAC,EAC9D78I,GAAwBmrI,WAAW/6H,CAAc,EACjDA,EAAiBjb,QAGnB6rC,EAAQn5B,OAAOu1C,EAAU,GAAQupH,CAAc,EAC/C9lK,EAAM+lK,cAAcxpH,CAAO,EAC3Bv8C,EAAMi+B,UAAU1qC,UAAUyT,OAAO,aAAcu1C,CAAO,CAExD,EACA,CAAC3iD,MAAO,EACV,EACF,EAEA,IAAIksK,EAAiB,GACrB9lK,EAAM+6C,cAAiBirH,GAAsB,CACxChmK,EAAM6zC,kBAAkBkU,YAIvBi+G,GAIJxpH,EAAWwpH,CAAQ,GAGrB,IAAIC,EAAY,GAChB,MAAMC,EAAgBzmK,GAAkB,CACnCA,IACDwmK,EAAY,CAACz8J,EAAQu/B,QAGvB5I,EAAQn5B,OAAOvH,EAAO,GAAQwmK,CAAS,EACvC5B,EAAiB5kK,CAAI,GAEvBO,EAAMkmK,aAAyCA,EAC/ClmK,EAAMw/E,UAAS,EACfx/E,EAAMmmK,qBAAoB,EAI1BnmK,EAAMm3J,aAAah8J,QAAQjsB,UAAY,QAEvCqL,GAAa,IAAM,CACjB,GAAG2C,EAAM6qE,WAAY,CACnB,MAAM5iD,EAASA,KAAa+gK,EAAa,EAAI,EAA2B5xK,QAClEsL,EAAUA,KAAasmK,EAAa,EAAK,EAA4B5xK,QAC3Eu/C,GAAkB1iD,iBAAiB,OAAQgU,CAAM,EACjD0uC,GAAkB1iD,iBAAiB,QAASyO,CAAO,EACnDi0C,GAAkB5V,UAAYj+B,EAE9BhkB,GAAU,IAAM,CACd63D,GAAkB+5F,oBAAoB,OAAQzoI,CAAM,EACpD0uC,GAAkB+5F,oBAAoB,QAAShuI,CAAO,CACxD,CAAC,CACH,CACF,CAAC,EAEDrlB,GAAa,IAAM,CACjBylB,EAAMi+B,UAAU1qC,UAAUyT,OAAO,aAAc,CAAC9pB,EAAMkpL,SAAQ,CAAE,EAChEpmK,EAAMqmK,mBAAmBnpL,EAAMkpL,SAAU,EAC3C,CAAC,EAED7rL,GAAa,IAAM,CACjB,KAAM,CAACyrL,EAAUM,EAAYF,CAAQ,EAAI,CAAC7pH,EAAS,EAAEgoH,EAAW,EAAErnL,EAAMkpL,SAAU,GAI5EG,EAAiBxzK,KAAK22B,IAAI,EAAG,CAHH,CAACs8I,EACLA,EAAW,GAAOI,EACbE,CAIP,EACxBvwK,OAAO,CAAC5N,EAAKkgB,IAAMlgB,GAAM,CAACkgB,EAAG,CAAC,CAAC,EAC3Bm+J,EAAgB,GAChBC,EAAyB,EACzBC,EAAmBxpL,EAAMkwD,OAAM,EAAK,EAAI,EACxCu5H,EAAczpL,EAAMkwD,OAAM,EAAK,EAAI,IACnC15C,EAAQ8V,EAAQ9V,OAAS8yK,EAAgBC,GAA0BF,GAAkBP,EAAWW,EAAc,GAAKD,EAAmB,EAC5I1mK,EAAMuvJ,YAAY97J,MAAMkC,YAAY,QAASjC,EAAQ,KAAM,WAAW,EACtEsM,EAAMi+B,UAAU1qC,UAAUyT,OAAO,aAAcg/J,CAAQ,CACzD,CAAC,EAED,MAAMY,EAAQC,KAEdpyJ,SAAKpnC,OAAS6P,EAAMjE,MAAM5L,OAC1BonC,EAAKqyJ,aAAa,CAChBz5L,OAAQonC,EAAKpnC,OACbqkB,KAAM24D,GAASs6G,OAChB,EAAEtxJ,GAAkBrkC,CAAU,CAAC,EAAEskB,KAAK,IAAM,CAC3C,GAAItkB,EAAU,EACd,OAAOylC,EAAKm0F,iBAAiB,CAC3Bv7H,OAAQonC,EAAKpnC,OACb2B,YACF,CAAC,CACH,CAAC,EAAEskB,KAAK,IAAM,CACRtkB,EAAU,IACdkO,EAAM6pL,cAAc,EAAI,EAExBC,GAAaJ,EAAO,IAAM,CACxBrsL,GAAa,IAAM,CACjBylB,EAAMinK,WAAW,CACf3N,eAAgBp8K,EAAMomL,aAAY,EAAGn0J,EACvC,CAAC,CACH,CAAC,CACH,CAAC,EACH,CAAC,EAEDnzB,GAAU,IAAM,CACdgkB,EAAM+6C,cACJ/6C,EAAMknK,gBACNlnK,EAAMkmK,aACNlmK,EAAMmnK,YACNnnK,EAAMonK,gBACNpnK,EAAMqnK,eACNrnK,EAAMsnK,qBACNhzK,OACFgD,EAAiBI,QAAO,EACxB+c,EAAK/c,QAAO,CACd,CAAC,EAEDsI,EAAMknK,gBAAmBluL,GAAY,CACnCktL,EAAa,EAAI,EACjBltL,EAAQ0hG,QAAQ,IAAM,CACpBwrF,EAAa,EAAK,CACpB,CAAC,GAGHlmK,EAAMonK,gBAAmB7wK,GAAS,CAChC2tK,EAAc3tK,IAAS,UAAYA,IAAS,SAAS,GAGvDyJ,EAAMqnK,eAAiB,IAAM,CAC3B1mH,KACAnE,EAAW,EAAK,EAChBt/D,EAAMqqL,cAAa,GAGrBvnK,EAAMsnK,qBAAwB1tL,GAAM,CAClCsD,EAAMsqL,mBAAmB5tL,EAAGomB,EAAMynK,gBAAgB,GAGpDznK,EAAMmnK,YAAe5C,GAAc,CACjCC,EAAaD,CAAS,GAGjBvkK,EAAMi+B,SACf,EAEMypI,GAAS,MAETC,GAAsB,MAAMzqL,GAO5B,CACJ,IAAI5N,EACJ,KAAM,CAACi9C,WAAU10B,MAAKrpB,OAAMU,YAAWmyD,OAAMumI,WAAU,EAAG1qL,EACpD2qL,EAAgBt7I,EAASvqC,IAAM,sBAC/BhT,EAAa8N,KAAmBgU,MACtC82K,EAAU,IAAI,EACd,IAAIv6I,EACJ,GAAGw6I,EAAe,CAChB,MAAMz4L,EAAS,MAAM9B,EAAUG,SAASukB,aAAauoD,gBAAgButH,uBAAuBv7I,EAASw7I,WAAW,EAChH,GAAG,CAAC/4L,EAAU,EAAI,OACdI,EAAOyiB,QACT+1K,IAGFt4L,EAAM,MAAMF,EAAOA,OACnBi+C,EAAoBx/C,GAAgBm6L,YAAY14L,EAAI24L,eAAe,CACrE,KAAO,CACL,MAAMhuB,EAA2BpsK,GAAgBq6L,wBAC9CjuB,aAAoCnoJ,SACrC81K,IAEF,MAAMz7I,EAAqB,MAAM8tH,EACjC,GAAG,CAACjrK,EAAU,EAAI,OAClBq+C,EAAoBlB,EAAmBv3B,KAAMy4B,GAAsBirC,GAAe/rC,EAAUc,CAAiB,CAAC,EAC9G/9C,EAA6C+xD,EAAOhU,EAAkB86I,iBAAmB96I,EAAkB+6I,WAC7G,CAGA/6I,GAAqBn0B,GAAYm0B,EAAoBA,GAAsB,CACtEA,GAAmBg7I,kBACpBj6K,GAAmBk6K,cAAc,CAC/B7oL,MAAO4tC,EAAkBg7I,gBAC3B,CAAC,CAEL,CAAC,EAED,MAAM94L,EAA+B,GACrC,MAAMG,GAAY,CAChBmoB,MACAvoB,MACAokB,MAAOllB,EACPmlB,OAAQnlB,EACR6yD,OAEAnyD,YACAF,aACAO,eACA8vC,KAAMgiB,GAAQ/sC,MAChB,CAAC,EAED,MAAMxC,QAAQya,IAAIh9B,CAAY,EAC1BP,EAAU,GACd44L,EAAU/vK,CAAG,CACf,EAEM0wK,GAAkBrrL,GAQlB,CACJ,KAAM,CAACssB,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAAC1iK,IAAGkZ,IAAGkoB,IAAG9qD,IAAG0yL,UAAQ,EAAItrL,EAAMqlL,UAAUkG,YAIzCC,EAAclvL,EAAY+D,GAASA,GAASL,EAAM6qE,SAAU,GAAIv+C,EAAQnf,SAAU,EAClF,CAAC8R,EAAUwsK,CAAW,EAAIxsL,GAAY,EACtCysL,EAAapvL,EAAW,IAAM0D,EAAMqlL,UAAUvgL,IAAM,qBAAuB9E,EAAMqlL,UAAUvgL,IAAM,gBAAgB,EACjH2xK,EAAan6K,EAAW,IAAM0D,EAAMqlL,UAAUvgL,IAAM,4BAA4B,EAChF6mL,EAASrvL,EAAW,IAAM0D,EAAMqlL,UAAUvgL,IAAM,sBAAsB,EACtEg4B,EAASxgC,EAAW,IAAM0D,EAAMqlL,UAAUvgL,IAAM,cAAc,EAE9D8mL,EAAkB,SAAW,CACjC,MAAMC,EAAY7rL,EAAMqlL,UAA0C3mE,IAC5DnvB,EAAOqvB,GAAkBitE,CAAQ,EAEjCC,EAAgB,MAAMpvL,GAAkB,CAC5C,GAAGqvL,EAAkB,CACnBA,EAAmB,GACnB,MACF,CAEAC,EAAW,GACXj/K,GAAYrQ,CAAC,EACb,GAAI,CACF,MAAM+/B,GAAkB,CACtBkB,mBAAoB,yBACpBrd,OAAQ,CACNxe,QAAS,MACX,CACF,CAAC,CACF,MAAY,CACRwiD,GACDrB,EAAQkB,KAAI,EAGd,MACF,CAEA4nI,EAAmB,GACnBlzL,EAAEozL,MAAK,GAGT,IAAIpzL,EAAsBkzL,EAAmB,GAAOC,GACpD,WAAAn5K,EAAAsM,KAAAtM,EAAAspD,QAIa2vH,EAAa,MAAAzvH,EAFjBxjE,EAAC,cAAAwjE,GAAAz8C,cAAAy8C,EAAAxpD,CAAA,EAADha,EAACga,EAAAL,GAAAK,EAAA,OACA08E,CAAI,EAAAx8E,EAAAF,EAAA,IAGTne,EAAK,mBAAmB,CAAC,EAAAme,CAAA,KAG9BmrB,GAAiBnlC,CAAC,EAClB,MAAMyrD,EAAa,CAACh4B,EAAQu/B,OAC5B5I,EAAQlsB,MAAK,EACb,KAAM,CAACqpD,OAAM,EAAGX,GAAY,CAC1B96E,QAASgW,EACT+kE,SAAU,MACV76D,YAAahsB,EACbgnF,iBAAkB,CAAC,CAACyrG,EACpB5oK,QAASA,IAAM,CACb,GAAGspK,EAAU,CACXA,EAAW,GACX,MACF,CAEG1nI,GACDrB,EAAQkB,KAAI,CAEhB,CACF,CAAC,EACDnkD,EAAMksL,wBAAwB,IAAM9rG,CAAK,GAGrCunG,EAAkBA,IAAM,CAC5B,MAAMtC,EAAYrlL,EAAMqlL,UAClB/zL,EAAOg7B,EAAQ9V,MAAQktC,EAAI,IAEjC1jD,EAAM6nL,aAAa,CACjBx4I,SAAUg2I,EAAUh2I,SACpB55B,OAAQkF,EACRtM,MAAO,CACLwvE,cAAevsF,EAAO,KACtBysF,kBAAmBzsF,EAAO,IAC1BA,OACA66L,WAAY76L,EARG,MAShB,EACDU,UAAWqzL,EAAUroK,OAAO/T,KAAO,QAAUmO,OAC7Cg1K,SAAU,EACZ,CAAC,GAGGC,EAA0BruK,GAG1B,CACJ,MAAMnlB,EAAI2sC,GAAe,IAAM,CAC7B46C,IACApiE,EAAOhkB,SAAQ,CACjB,CAAC,EACDnB,EAAEmtC,OAAOhoB,EAAOhnB,IAAI,EACpB,MAAMstD,EAAa,CAACh4B,EAAQu/B,OAC5B5I,EAAQlsB,MAAK,EACb,KAAM,CAACqpD,OAAM,EAAGX,GAAY,CAC1B96E,QAASgW,EACT+kE,SAAU,MACV76D,YAAahsB,EACbgnF,iBAAkB,GAClBn9D,QAASA,IAAM,CACV4hC,GACDrB,EAAQkB,KAAI,CAEhB,CACF,CAAC,EACDnkD,EAAMksL,wBAAwB,IAAM9rG,CAAK,GAGrCksG,EAAcA,IAAM,CAWxBD,EAAuB,CACrBryL,SAXeuyL,IAAM,CACrBvsL,EAAMogF,MAAM,IAAM,CAChB,MAAMilG,EAAYrlL,EAAMqlL,UACxB9wJ,GAAaspE,aAAa,CACxB1tG,OAAQk1L,EAAU78E,WAAWlS,SAAS,EAAI,EAC1CnJ,UAAWk4F,EAAUhuF,MACvB,CAAC,CACH,CAAC,GAKDrgG,KAAMtC,EAAK,gBAAgB,CAC7B,CAAC,GAGG83L,EAAcA,IAAM,CACxBH,EAAuB,CACrBryL,SAAUA,IAAM,CACd,MAAMJ,EAAOoG,EAAMqlL,UAAqCzrL,IACrDC,GAAQD,CAAG,EAAED,QACdqG,EAAMogF,MAAM,IAAM,CAChB7rD,GAAak4J,QAAQ7yL,CAAG,CAC1B,CAAC,EAED4gK,GAAe5gK,CAAG,CAErB,EACD5C,KAAMtC,EAAK,cAAc,CAC3B,CAAC,GAGG8vB,EAAW9nB,GAAkB,CAC7BsD,EAAM6qE,aAIV99D,GAAYrQ,CAAC,EACbgwL,EAAYhwL,CAAC,IAGTiwL,EAAkBtH,GAAoD,CAC1E,MAAMh2I,EAAWg2I,EAAUh2I,SACrB,CAAC/f,EAAOykF,CAAQ,EAAI90G,GAAqB,CAAC,EAC1CyrL,EAAY10B,KACZ1kK,EAAOg7B,EAAQ9V,MAAQktC,EAAI,IAAM,IAEvC,IAAI/oC,GACJ,WAAAqmE,EAAApuE,KAAA4pD,EACO7hD,EAAG,cAAA6hD,GAAA58C,cAAA48C,EAAAwkB,CAAA,EAAHrmE,EAAGqmE,EAAAzuE,OAAAiN,GAAAwhE,EACDt2E,GACLu1D,GAAO2sH,kCACPt9J,KAAW2wC,GAAO4sH,QACpB,CAAC,GAAA7rG,CAAA,KAGHypG,GAAoB,CAClBp7I,WACAq7I,YACA/vK,MACArpB,OACAU,UAAWqzL,EAAUroK,OAAO/T,KAAO,QAAUmO,OAC7C+sC,KAAM,EACR,CAAC,EAED2oI,GAAmB,IAAM,CAGvB,MAAM7vG,EAFQj9E,EAAMs3F,MAAM/C,OACDvS,WACQtqE,KAAMulE,GAAkB7B,GAAe6B,EAAc5tC,SAAUA,CAAQ,CAAC,EACzG0kE,EAAS92B,GAAe3tD,OAAS,CAAC,CACpC,CAAC,EAEDjyB,GAAa,IAAM,CACjB,MAAMsH,EAAU+lL,IACb/lL,IAAY,OAIf8mL,EAAW,aAAAhsK,EAAAC,GAAA,EAAAo0B,EAAAr0B,EAAA3M,WAAAqpF,EAAAroD,EAAA05B,YAAAj7D,UAAA6M,GAAA,OAAAG,EAGE7U,GACLu1D,GAAO8sH,oCACP1H,EAAUroK,OAAO/T,MAAQg3D,GAAOh3D,KAChCqmB,EAAK,GAAM2wC,GAAO4sH,QACpB,EAAChxC,EAEW57E,GAAO+sH,mCAAkCjxC,EACzCrxI,GAAWu1D,GAAO+sH,mCAAoC/sH,GAAOgtH,KAAK,EAAC1tK,WAAAH,EAAAG,MAAAC,GAAAC,EAAAL,EAAAG,MAAA,EAAAs8H,IAAAz8H,EAAAy8H,MAAAr8H,GAAAs0B,EAAA10B,EAAAy8H,MAAA,EAAAE,IAAA38H,EAAA28H,MAAAv8H,GAAA28E,EAAA/8E,EAAA28H,MAAA,EAAA38H,CAAA,GAAAG,KAAAnI,OAAAykI,KAAAzkI,OAAA2kI,KAAA3kI,MAAA,GAAAqI,CAAA,KAEhF9a,GAAO,WAAAq4F,EAAApqF,KAQgB,qCAA8B8wC,EAAI,IAAM,IAAO,IAAK,KAAEs5C,OAAAzmF,MAAAkC,YAAtD,2CAA8BirC,EAAI,IAAM,IAAO,IAAK,GAAE,EAAAs5C,EAAAzmF,MAAAkrJ,eAAA,aAAA1uJ,EAAAiqF,GAAA,WAAAhqF,EAAAC,EAE3Eqc,QAAO,SAAPtc,MAAA,EAAU48D,GAAatgD,EAAK,EAAI,CAAC,EAAI,EAAE,MAAA/c,GAAAiN,OAAAw9E,EARjCtyF,GACLu1D,GAAOitH,kCACP7H,EAAUroK,OAAO/T,MAAQg3D,GAAOh3D,KAChCqmB,EAAK,GAAM2wC,GAAO4sH,QACpB,CAAC,GAAA7vF,CAAA,KAON,EACDh9F,EAAMoZ,SAAS,EAAI,EACrB,CAAC,GAGH,IAAIszK,EACDjW,EAAU,GACXiW,EAAc/E,EACdgF,EAAe3sL,EAAMqlL,SAAiD,GAC9DqG,EAAU,GAClBgB,EAAcd,EACd5rL,EAAMoZ,SAAS,EAAI,GACXuyK,EAAM,GACde,EAAcJ,EACdtsL,EAAMoZ,SAAS,EAAI,IACX0jB,EAAM,IACd4vJ,EAAcF,GACdxsL,EAAMoZ,SAAS,EAAI,GAKrB,IAAIuB,EACJ,kBAAA0sF,EAAAz0F,KAAAy0F,EAAAlrC,QAea33C,EAAO,MAAAskF,EAbXnuF,EAAG,cAAAmuF,GAAAlpF,cAAAkpF,EAAAzB,CAAA,EAAH1sF,EAAG0sF,EAAAt0F,EAAAs0F,EAePpoF,CAAQ,EAAA1M,GAAA6M,GAAA,OAAA48H,EAdFtxI,GACLu1D,GAAOktH,qBACP,GAAIzB,EAAY,EAAG,CACjBF,KAAiB,UACjB,iBACA,cAAc,EACZ,GACJ,GAAI/U,EAAY,EAAG,CACjBx2G,GAAOmtH,4BAA4B,EACjC,EACL,EAAAnxC,EACO,SAAQ35H,CAAE,WAAUkZ,CAAE,aAAYkoB,CAAE,cAAa9qD,CAAE,gBAAe0yL,CAAS,MAAItvC,WAAA58H,EAAA48H,MAAAx8H,GAAA6nF,EAAAjoF,EAAA48H,MAAA,EAAA58H,EAAA68H,KAAAh7D,GAAAomB,EAAA40C,EAAA78H,EAAA68H,IAAA,EAAA78H,CAAA,GAAA48H,KAAA5kI,OAAA6kI,KAAA7kI,MAAA,GAAAiwF,CAAA,IAM7F,EAWMogF,GAAWznL,GAUX,CACJ,MAAM6T,EAASqF,GAAU,CACvB5nB,KAAMg0L,GACNn1L,OAAQ6P,EAAMjE,MAAM5L,OACpBgsB,SAAU,EACZ,CAAC,EACDtI,EAAOhJ,KAAKwL,UAAUS,IAAImpD,GAAOotH,uBAAuB,EACxD,MAAM7mL,EAAOpW,EAAU+U,OAASnF,EAAMjE,MAAM5L,OACtCgY,EAAY,CAAC3B,GAAQ,IAAIU,GAC/B,IAAI4Z,EACD3Y,GACDA,EAAUy+B,OAAO,CAACz2C,OAAQ6P,EAAMjE,MAAM5L,OAAQ4xC,OAAQ,EAAK,CAAC,EAC5DjhB,EAAmB3Y,EAAUxD,SAE7Bmc,EAAmBpsB,EAAK,WAAW,EAGrCosB,EAAiBzK,UAAUS,IAAImpD,GAAOqtH,qBAAqB,EAE3D,MAAMC,EAAsBA,CAACjpI,EAAa,CAACh4B,EAAQu/B,SAAW,IAAM2hI,EAAgBlpI,CAAU,EACxFkpI,EAAmBlpI,GAAwB,CAC5CA,GACDrB,EAAQkB,KAAI,GAIVspI,EAAeA,CAACnpI,EAAa,CAACh4B,EAAQu/B,SAAW,CACrD5I,EAAQlsB,MAAK,EACC2R,GAAcglJ,oBAAoB,CAC9C7sK,SAAU,MAAM1wB,IAAW,CACzB,MAAMyS,GAAc5C,EAAMjE,MAAM5L,OAC1Bw9L,GAAY,MAAMv9L,EAAUG,SAASo4G,gBAAgB0J,iBAAiBzvG,EAAW,EACvFxS,EAAUG,SAAS2R,mBAAmB0rL,UAAU,CAC9Cz9L,UACA09L,WAAY,CACV/oL,EAAG,kBACHmtB,GAAIm0J,GAAY,EAAGn0J,GACnBniC,KAAM69L,EACR,CACF,CAAC,EAEDG,GACEp5L,EACEvE,KAAWC,EAAU+U,KAAO,6BAA+B,gBAC3D,CAAC,MAAMrC,GAAc,CAAC3S,UAAO,CAAC,CAChC,CACF,CACD,EACDk5C,kBAAmB,CAAC,YAAY,CAClC,CAAC,EAEKp1B,iBAAiB,oBAAqBs5K,EAAoBjpI,CAAU,CAAC,GAGvEgmI,EAAqBA,CAAC5tL,EAAeorB,KAA0B,CAEnE,GADcs+J,KACLppK,OAAO+wK,WAAY,CAC1B,KAAM,CAACxrK,OAAK,EAAGqF,GAAkB,CAC/BrG,QAAS,CAAC,CACRlI,KAAM,OACNriB,KAAM,WACNwtB,QAASwpK,EACX,CAAC,EACDlmK,SAAUA,GACV,GAAGmmK,EACL,CAAC,EACD1rK,GAAK7lB,CAAC,CACR,MACE+wL,KAIES,EAAah1K,GAAU,CAC3B5nB,KAAM,IACNnB,OAAQ6P,EAAMjE,MAAM5L,OACpBgsB,SAAU,GACVD,YAAa,GACbjC,YAAa,CACXjC,KAAM,yBACR,CACF,CAAC,EACDk2K,EAAWrjL,KAAKwL,UAAUS,IAAImpD,GAAOkuH,qBAAqB,EAC1D,IAAIC,EACJ,GAAG5nL,EACD4nL,EAAuB15L,EAAK,SAAS,MAChC,CACL,MAAM25L,EAAgB,IAAInnL,GAC1BmnL,EAAcznJ,OAAO,CAACz2C,OAAQ6P,EAAMjE,MAAM5L,OAAQ4xC,OAAQ,GAAOzxC,cAAe,EAAI,CAAC,EACrF89L,EAAuBC,EAAc1pL,OACvC,CACAypL,EAAqB/3K,UAAUS,IAAImpD,GAAOquH,mBAAmB,EAE7D,KAAM,CAAChiK,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAAC3sL,EAASuwB,CAAU,EAAI3pB,GAAY,EACpC,CAAC+6H,EAAeu0D,CAAgB,EAAItvL,GAAY,EAChD,CAAC00B,EAAS66J,CAAU,EAAIvvL,GAAY,EACpC,CAACwvL,EAAQC,CAAS,EAAIzvL,GAAY,EAClC,CAACowC,EAAU+8G,CAAW,EAAIntJ,GAAY,EACtC,CAAC0vL,EAAgBC,CAAiB,EAAI3vL,GAAa,CAAC,EACpD,CAAC4vL,EAAeC,CAAgB,EAAI7vL,GAAa,EAAK,EACtD,CAAC8D,EAAMgsL,CAAO,EAAI9vL,GAAY,EAC9B,CAAC6B,EAASi8I,CAAU,EAAI99I,GAAa,EAAK,EAC1C,CAAC+vL,EAAeC,CAAgB,EAAIhwL,GAAY,EAChD6nL,EAAgB7nL,GAAa,EAAK,EAClCiwL,EAAwBjwL,KACxBgoL,EAAmBhoL,GAAa,EAAI,EACpCmoL,EAAsBnoL,GAAa,EAAK,EACxCkwL,EAAiBlwL,GAAa,EAAK,EACnC,CAACogE,EAASC,CAAU,EAAIwnH,EACxB,CAACsI,EAAiBC,CAAkB,EAAIH,EACxC,CAACnI,CAAU,EAAIE,EACf,CAACC,CAAa,EAAIE,EAClB,CAAC8B,GAAUoG,EAAW,EAAIH,EAC1B,CAACI,GAASC,EAAU,EAAIvwL,GAAa,EAAK,EAC1C,CAACwwL,GAASC,CAAU,EAAI1vL,EAAM2vL,iBAC9B,CAACtR,GAAauR,EAAc,EAAI3wL,GAAY,EAC5C,CAAC4wL,GAAYC,EAAa,EAAI7wL,GAAY,EAC1C,CAACg5E,GAAgB83G,EAAiB,EAAI9wL,GAAY,EAClD,CAAC+wL,GAAsB9D,EAAuB,EAAIjtL,GAAY,EAC9D,CAACwjK,GAAewtB,EAAgB,EAAIhxL,GAAY,EAChDmnL,GAAe9pL,EAAW,IAAM0D,EAAMjE,MAAMuwB,QAAQtsB,EAAMjE,MAAM8N,KAAK,CAAC,EACtE22G,GAAYlkH,EAAW,IAAM,CAEjC,MAAM4zL,GADQ9J,KACoC+J,YAClD,OAAID,GACGA,IAAcnlK,GAAM,EAAI,EADR,EAEzB,CAAC,EACK8/C,GAAWvuE,EAAW,IAAMgwB,EAAQx8B,OAASkQ,EAAMjE,KAAK,EACxD,CAACq0L,GAAeC,EAAgB,EAAIpxL,GAAa,GAAO,CAAC8yF,OAAQ,EAAK,CAAC,EAE7E,IAAIu+F,GACJjzL,GAAa,IAAM,CACjB+oL,KACAkK,GAAyB1wL,KAAmBgU,KAC9C,CAAC,EAED,MAAM28K,GAAwBA,CAAClhJ,EAAoBmO,GAAS5/C,GAAQ,IAAMwxL,EAAe,CAAE,IAAM,CAC/F,GAAG,CAAC5xI,IAAUA,GAAO/nC,SAAW+6K,GAC9B,OAGF,MAAMniL,GAAQmvC,GAAOnvC,OAAS,CAC5BwvE,cAAe,GACfE,kBAAmB,IACnBzsF,KAAM,GACN66L,WAAY,IAGdnvG,GAAgByzG,oBAAoB,CAClC3+L,WAAY0rD,GAAO4uI,SAAWkE,GAAyB1wL,GAAgB,EAAGgU,IAAK,EAC/Ey7B,WACAhhC,SACA+jC,iBAAkBoL,GAAO/nC,OACzBlX,MAAOi/C,GAAO4uI,SAAW,CAAE,EAAG5uI,GAAO/nC,OACrCzjB,UAAWwrD,GAAOxrD,SACpB,CAAC,GAGHqL,GAAa,IAAM,CACjB,MAAMgyC,EAAY+2I,GAAc,EAAyBwB,cACrDv4I,IAKHA,GAA2Cw7I,YAC5CuF,KACAG,GAAsBlhJ,CAAQ,EAChC,CAAC,EAED,MAAMw4I,GAAkC,MAAMrqI,GAAW,CACvD,GAAI,CAACnO,WAAS,EAAGmO,EACjB,MAAMrtD,GAAS6P,EAAMjE,MAAM5L,OACrBmnG,GAAQ8uF,KACR9xK,GAAUgjF,GAAMrlE,GAChBy+J,GAAep5F,GAAMswF,cAG3B,GAAGv4I,cAAoBz6B,UACrBy6B,GAAW,MAAMA,GACd,CAACA,IACF,OAIJ,MAAMshJ,GAAgB,CAACv1G,GAAes1G,GAAcrhJ,EAAQ,EACzD,CAACshJ,IAAiB,CAACnzI,EAAO4uI,WAC3B/8I,GAAWj4B,QAGbkoD,EAAW,EAAK,EAChB+vH,EAAmB7xI,CAAM,EAEtB,CAACmzI,IAAiBnzI,EAAO4uI,UAC1BiE,GAAiB,EAAI,EAGvB,MAAMjgM,EAAUG,SAASukB,aAAaL,kBAAkBozK,aACtD13L,GACAmkB,GACA08E,GAAO3hD,EAAoB,CAC7B,EACAggJ,KAGIuB,GAAsBA,IAAM,CAChC,KAAM,CAACC,EAAQC,EAAS,EAAI7xL,GAAa,EAAK,EACxCnN,GAAa8N,KAAmBgU,MAChCqR,GAAO,IAAI62I,GAAkB,CACjCvrK,SAAUH,EAAUG,SACpBikB,KAAM,aACN1iB,cACAqoK,SAAW9qH,IAAaw4I,GAAa,CAACx4I,YAAU55B,OAAQ+6K,EAAQ,CAAC,EACjEl/L,KAAM,GACNy/L,SAAU,MACVC,gBAAiBA,OACjBC,aAAc,EAChB,CAAC,EAEDhsK,GAAK43I,eAAexmJ,UAAUS,IAAImpD,GAAOwoH,oBAAoB,EAE7DxjK,GAAKwD,OAAO+0E,QAAQ,IAAM,CACxBszF,GAAU,EAAI,CAChB,CAAC,EAED,IAAIrkL,GACJpP,GAAa,IAAM,CACjB,GAAG,CAACwzL,EAAM,EACR,OAGF,MAAM5uH,GAAYivH,KAClBjsK,GAAK43I,eAAexmJ,UAAUyT,OAAO,aAAcm4C,EAAS,EAExDA,GAMFqf,aAAa70E,EAAO,EALpBA,GAAU80E,OAAOzlE,WAAW,IAAM,CAChCm0K,KACAhrK,GAAKyD,QAAO,GACX/b,GAAS2O,YAAY,YAAY,EAAI,IAAM,CAAC,CAInD,CAAC,EAED20K,GAAiBhrK,EAAI,GAGjBisK,GAAsBA,IAAM7xH,EAAO,GAAM0nH,EAAY,GAAI,CAACG,IAC1DiK,GAAmB70L,EAAW,IAC3BmmK,GAAe,EAAG,GAAOyuB,IACjC,EAED7zL,GAAa,IAAM,CACd8zL,GAAgB,GACjBP,IAEJ,CAAC,EAED,MAAMQ,GAAqBpuI,GAA4B,CACrD,IAAIme,GAAU,GACdriE,GAAU,IAAM,CACdqiE,GAAU,GACVne,EAAMjsB,MAAK,EAGXisB,EAAM0tG,oBAAoB,UAAW2gC,EAAS,EAC9CruI,EAAM0tG,oBAAoB,UAAW4gC,EAAS,CAChD,CAAC,EAED,MAAMA,GAAYA,IAAM,CACtBv0C,EAAW,EAAK,EACblyE,GAAQ,GACT5nB,EAAQo/H,aAAa,EAAK,GAIxBgP,GAAYA,IAAM,CACtB,MAAMvwL,GAAUkiD,EAAMuuI,eAAiBvuI,EAAMwuI,gBACvCC,GAAiBzuI,EAAM0uI,WAAa1uI,EAAM2uI,iBAE7C7wL,IAAW2wL,KACZ10C,EAAW,EAAI,EACZlyE,GAAQ,GACT5nB,EAAQo/H,aAAa,EAAI,EAE3Br/H,EAAM/uC,iBAAiB,UAAWq9K,GAAW,CAAC9vG,KAAM,EAAI,CAAC,IAIvD7zE,GAAQA,IAAM,CACdq1C,EAAMY,aAIVpB,GAAeQ,EAAO,CAAC,GAGzBA,EAAM/uC,iBAAiB,UAAWo9K,EAAS,EAE3CvyL,GAAU,IAAM,CACXwtB,EAAQszJ,WACT38H,EAAQo/H,aAAa,EAAK,CAE9B,CAAC,EAGDhlL,GAAa,IAAM,CACdivB,EAAQu/B,QAAU,CAACgf,KACpB7nB,EAAMjsB,MAAK,EAEXisB,EAAMmB,KAAI,CAEd,CAAC,EAED,MAAMytI,GAAgBA,IAAM,CAE1Bv0L,GAAaC,GACX,IAAM,CAA0ButE,GAAU,GAC1C,CAAC,CAAcA,EAAQ,IAAM,CACxBA,IAIHl9D,IAEJ,EAAC,EAEDtQ,GAAa,IAAM,CACjB2lD,EAAMM,MAAQh3B,EAAQg3B,KACxB,CAAC,GAGAunB,GAAQ,EACT+mH,KAEAp6E,GAAeo6E,EAAa,EAAE,IAAM/mH,GAAU,GAGhD,MAAMysB,GAAQ15F,GAAQ,IAAMwoL,GAAc,GAC1C/oL,GAAa,IAAM,CACdwtE,GAAU,GAAI,CAACv+C,EAAQnf,WAAai5K,GAAc,IAAK9uF,IACxD3pF,IAEJ,CAAC,EAEG/P,GAAQ2xL,EAAO,GAAG5+L,GAAgBkhM,SAAU,EAACz7K,KAAMra,IAAU,CAC5D,CAAColE,IAAW,CAACplE,GAAM+1L,aAAaC,aACjCjI,GAAaJ,GAAO,IAAM,CACxB,MAAM8B,GAAclvL,EAAY+D,IAASA,IAASwqE,MAAcv+C,EAAQnf,SAAU,EAClF9P,GAAa,IAAM,CACjB,GAAGmuL,GAAW,EAAI,CAChB,KAAM,CAACprG,QAAM,EAAGX,GAAY,CAC1B,GAAGuyG,GACHntK,YAAanwB,EAAK,oBAAoB,CACxC,CAAC,EACDw3L,GAAwB,IAAM9rG,EAAK,CACrC,CACF,CAAC,CACH,CAAC,EAEDhwF,EAAUG,SAAS0hM,gBAAgBC,SAASC,GAAa,eAAgB,YAAY,EAAG,EAAI,EAEhG,CAAC,EAED,MAAMzI,GAAQC,MAGVyI,GAAgB96F,GAA4D,CAChF,IAAI+mF,GAAcD,GAAoB9mF,CAA4B,EAChD+mF,KAAgB,WAChCA,GAAcjnK,QAIhB,MAAM1U,GADesuF,GAAQsG,EAA8B/0F,KAAK,GACMG,SAChE2vL,GAAiB3vL,IAAYA,GAAS+sI,WAAW/3H,KAAMplB,IAAcA,GAAUwS,IAAM,wBAAwB,EAC7GyqL,GAAU8C,GAAiB,CAAC,CAACA,GAAer1K,OAAOs1K,QAAU,GAC7Dt4D,GAAgBq4D,IAAgBj/L,SAChC2P,GAAOu0F,EAAMv0F,KACbuvE,GAAUglB,EAA8Bt6E,OAAOs1D,OAC/C42G,GAAW,CAAC,CAAE5xF,EAA8Bt6E,OAAOu1K,OACnDziM,GAAOa,GAAgBisB,QAAQ5c,EAAMjE,MAAM5L,MAAM,EACjDJ,GAAYF,GAAuBC,EAAI,EAE7C8/L,GAAevR,EAAW,EAC1B0Q,EAAQ,CAAChjI,UAAWhpD,GAAMuvE,SAAM,CAAC,EACjCk9G,GAAWD,EAAO,EAClBhB,EAAiBv0D,IAAkBA,GAAgB,GAAK,EACxDs1D,GAAYpG,EAAQ,EACpB+F,EAAiB/F,KAAa,CAAE5xF,EAA8Bt6E,OAAO+wK,YAAc,CAAC,CAACh+L,GAAU,CAAC,EAAE,GAI9FyiM,GAAW,MAAMl7F,GAAqB,CAE1C,GADAylD,EAAW,EAAI,EACZzlD,EAAMxyF,IAAM,YAAa,CAC1BirL,KACAnnK,IACA4lK,IACApiC,IACA0jC,KACApB,IACA0D,GAAa96F,CAAmC,EAChDlnG,EAAUG,SAASkkB,kBAAkBw9E,aAAajyF,EAAMjE,MAAM5L,OAAQmnG,EAAMrlE,EAAE,EAC9EjyB,EAAMw9G,UAAO,EACb,MACF,CAEA,MAAM1rH,GAAa8N,KAAmBgU,MAChC6+K,GAAkBjsL,EAAOwvJ,GAAmB,EAAqB5+I,OACjEs7K,GAAW18B,KACX28B,GAAW38B,KACX00B,GAAY10B,KACZ48B,GAAc58B,KACd68B,GAAU78B,KACV88B,GAAoBtsL,EAAOlK,EAAsBy2L,IAA0B,CAE/E,MAAMC,GADQ17F,EAAM/C,OACS0+F,eAC7B,OAAGF,IAAuBt+L,KAAI,IAAOu+L,IAAev+L,KAAI,EAC/Cs+L,GAEFC,EACR,GAAI57K,OAECg/G,GAAqBA,CACzBjmI,GACA8G,GACA5E,MAEO,CACL4E,YACAnF,cACAE,UAAW,QACXK,gBACA6gM,gBAAiBvN,KAAsBx1L,KAI3CqW,GAAQnJ,GAAa,SAAW,CAC9B,IAAI46E,GACJ,MAAM+6G,GAAgBF,KACtB,GAAGE,IAAerjM,OAAQ,CACxBsoF,GAAiB,IAAIrG,GAAe,CAClC1sC,WAAY,GACZpzC,aACF,CAAC,EAED,MAAMmT,GAAU+tL,GAAcr6K,IAAKjiB,IAC1BA,GAAO4/F,SAAS,EAAK,CAC7B,EAID,GAFAm8F,GAAgB,IAAI,EACpB,MAAMx6G,GAAenkE,OAAO7O,EAAO,EAChC,CAACnT,GAAU,EACZ,MAEJ,CAEA2gM,GAAgBx6G,EAAc,CAChC,CAAC,EAED56E,GAAa,SAAW,CACtB,IAAI81L,GACJ,KAAM,CAACx/J,WAAS18B,WAAS,EAAGqgG,EAC5B,GAAG3jE,IAASgqC,OAAQ,CAClB,MAAMtrE,GAA+B,GAC/B,CAACoH,WAAS8B,gBAAc,EAAGH,GAAoBu4B,GAAS18B,IAAUkiF,MAAO,GACzE5/E,GAAUF,GACdI,GACA28H,GAAmBp2H,EAAMjE,MAAM5L,OAAQoL,GAAelJ,EAAY,CACpE,EAIA,GAFAqgM,GAAS,IAAI,EACb,MAAM99K,QAAQya,IAAIh9B,EAAY,EAC3B,CAACP,GAAU,EACZ,OAGFqhM,GAAcxoL,GAAwBpR,EAAO,CAC/C,CAEAm5L,GAASS,EAAW,CACtB,CAAC,EAED91L,GAAa,IAAM,CAGjB,GAAG,CAFWO,GAAQ,IAAMqkD,GAAoBq1C,CAAK,CAAC,EAChCrlE,GACT,CACX0gK,KACA,MACF,CAEAA,GAAS,IAAI,EAEb,MAAMp5L,GAAUw3F,GAAe,CAC7B5gG,OAAQ6P,EAAMjE,MAAM5L,OACpB+/E,UAAW8gB,GAAOsG,CAAK,EACvBhG,UAAW,GACXL,eAAgB,CACd99E,MAAO8sD,GAAOmzH,gCACf,EACD3hG,kBAAmBxxB,GAAOozH,wBAC1BrlL,QAAS,EACX,CAAC,EAEKwvG,GAAUA,IAAM,CACpBm1E,GAASp5L,GAAQtH,SAAS,GAGtBqf,GAASA,IAAM,CACfxf,GAAU,IAIdirJ,EAAW,EAAK,EAChBn/I,GAAQ,IAAM01L,EAAU,CAAE,IAItBC,GAAUA,IAAM,CACpB,MAAMhxL,GAAQhJ,GAAQgJ,QAEnBA,cAAiBixL,kBAClBpC,GAAkB7uL,EAAK,EACvBuhD,GAAYvhD,EAAK,EAAE6T,KAAK9E,EAAM,GAE9BA,MAIJkmG,GAAegG,EAAO,EAAE,IAAMjkH,GAAQ4f,MAAO,GAC7Cq+F,GAAe+7E,EAAO,EAAE,IAAMh6L,GAAQgJ,MAAO,EAC/C,CAAC,EAEDlF,GAAa,IAAM,CACjB,IAAIo2L,GACJ,MAAM/C,GAAep5F,EAAMswF,cACrB8L,GAAY9M,GAAkB8J,EAAY,EAChD,GAAG,CAACA,IAAgBgD,GAClBD,GAAeriM,GAAK,mBAAoB,GAAG,CAAC,oBAAqBsiM,IAAa,sBAAsB,EAAE16K,OAAO2F,OAAO,CAAC,EACrH+rK,GAAU+I,EAAY,MACjB,CACL,MAAM94K,GAAMjY,SAAS6Y,cAAc,KAAK,EACxCZ,GAAItE,UAAUS,IAAI,uBAAwB,OAAO,EACjD2zK,GAAoB,CAClBp7I,SAAUqhJ,GACVhG,aACA/vK,OACArpB,KAAM,GACNU,UAAW,QACXmyD,KAAM,EACR,CAAC,CACH,CACF,CAAC,EAED9mD,GAAa,IAAM,CACjB,GAAG,CAAEi6F,EAA8Bq8F,aAAahkM,OAAQ,CACtDijM,KACA,MACF,CAEAA,GAAY,IAAI,EAEhB,KAAM,CAACgB,GAAUC,EAAW,EAAI50L,GAAa,EAAK,EAC5C,CAAC60L,GAAYC,EAAa,EAAI90L,GAAa,CAAC,EAC5C4wL,GAAU38K,EACb2pD,GAAG,KAACC,MAAI,QAAGw6B,EAA8Bq8F,WAAW,EAAA10K,SACjDomK,IAAc,CACd,KAAM,CAAClsK,GAAOC,EAAQ,EAAIna,GAAa,EAAK,EAE5Cu4G,UAAe,IAAM,CACnBu8E,GAAezkK,IAAUA,GAAQ,CAAC,EAC/BwkK,GAAY,IAAMx8F,EAA8Bq8F,YAAYhkM,QAC7DkkM,GAAY,EAAI,EAEnB,EAAE16K,EAAK,EAERjG,EACGm4K,GAAc,CACb/zF,MAAOA,EACP+tF,UAAWA,GACXx6G,SAAUA,GACVqhH,wBAAyBA,GACzB9yK,SAAUA,GACVyuK,aAAcA,GAAY,IAC1BznG,OAAK,QAAEpgF,EAAMogF,KAAK,GAGxB,EAEH,EAEDo3B,GAAe,IAAM,CACnBo7E,GAAY/C,EAAU,EACvB,EAAE+D,EAAQ,CACb,CAAC,EAEDv2L,GAAa,SAAW,CACtB,MAAM22L,GAAa7O,GAAmB7tF,CAAK,EAC3C,GAAG,CAAC08F,GAAY,CACdnB,KACA,MACF,CAEA,KAAM,CAAC/rI,WAASs+H,uBAAqB,EAAG4O,GACxCnB,GAAQ,IAAI,EAEZ,KAAM,CAACoB,GAAeC,EAAgB,EAAIj1L,GAAY,EAChD,CAAC8pB,GAAUolB,EAAW,EAAIlvC,GAAY,EAEtCQ,GAAiD,CACrD8mE,QAAM,WAAA+gC,GAAAlL,KAAArpF,SAAAu0F,GAED2sF,EAAa,EAAA1hL,OAAAiN,GAAA8nF,GADHrnC,GAAOk0H,uBAAuB,GAAA7sF,EAAA,MAM/C,IAAI8sF,GAAuB7nH,GAAqB8nH,GAC7CvtI,IACDstI,GAAgBttI,GAAQtoC,MAAQhoB,GAAUswD,GAAQtoC,IAAI,EACtD+tD,GAAczlB,GAAQwtI,UACtBD,GAAiBvtI,GAAQ2wC,UAEzB28F,GAAgBhP,GAAqB58E,WAAWlS,SAAS,EAAI,EAG/D,MAAMi+F,GAAwD,CAC5DpkM,OAAQikM,GACR9sL,SAAUilE,IAGN,CAAC1hE,QAAMsP,oBAAkB,EAAG4F,GAAU,CAC1C5vB,OAAQikM,GACRjsL,UAAWokE,GACXj7E,KAAM,GAINQ,aACF,CAAC,EAEK6tF,IAAe,WAAAwoB,GAAA/L,KAAArpF,SAAAo1F,GACZp/E,EAAQ,EAAAo/E,OAGXqsF,GAAsB,MAAM14L,GAAuC6Y,KAAoB,CAC3F,MAAMu7D,GAAY,MAAMp0E,GACxB,GAAG,CAAChK,GAAU,EACZ,OAGF,GAAG6iB,IAAU,CAACu7D,GAAUv8C,QAAS,CAC/Bwa,GAAYz5C,EAAK,OAAO,CAAC,EACzB,MACF,CAEA,MAAMrC,GAA+B,GAC/B,CAACoH,WAAS8B,gBAAa,EAAIH,GAAoB80E,GAAUv8C,QAASu8C,GAAUj5E,UAAUkiF,MAAK,CAAE,EAC7F5/E,GAAUF,GACdI,GACA28H,GAAmBg+D,GAAe74L,GAAelJ,EAAY,CAC/D,EACA,MAAMuiB,QAAQya,IAAIh9B,EAAY,EAC1BP,GAAU,GAIdq8C,GAAYxjC,GAAwBpR,EAAO,CAAC,GAGxCylG,GAAeq1F,IAAkBjkM,EAAUG,SAASukB,aAAaL,kBAAkBw9E,aACvFmiG,GACAC,EACF,EAAEj+K,KAAK,MAAM68G,IAAgB,CAC3B,MAAMn3H,GAAU04L,GAAoBvhE,GAAY/gI,OAAQ+gI,GAAYt+G,MAAM,EAC1E,GAAG,CAACs+G,GAAYt+G,OAAQ,CACtBw5B,GAAYz5C,EAAK,OAAO,CAAC,EACzB,MACF,CAEA,OAAOoH,EACT,CAAC,EAEK,CAACqsL,GAAOsM,GAAiBC,EAAY,EAAI,MAAM9/K,QAAQya,IAAI,CAC/DvsB,GAAcyxL,EAAgB,EAAEn+K,KAAK,MAAMjO,IAAc,CACvD,MAAM1X,GAAQiS,SAASs7F,yBACvB,GAAGo2F,GAAe,CAChB,MAAM5uL,GAAc,MAAMpV,EAAUG,SAASo4G,gBAAgBnjG,YAAY4uL,EAAa,EAChF/6K,GAAOjoB,GACXoU,GAAc,oBAAuB4uL,GAAcv9L,SAAW,oBAAsB,eACpF,cACA,mBACA,aACF,EACApG,GAAMu1C,OAAO3sB,EAAI,CACnB,CAIA,GAFA5oB,GAAMu1C,OAAO79B,EAAS,EAEnBokE,IAAe64G,GAAsB,CACtC,MAAMnzL,GAAYyQ,SAAS6Y,cAAc,KAAK,EAC9CtpB,UAAUokB,UAAUS,IAAImpD,GAAO00H,sBAAsB,EACrD1iM,GAAU+zC,OAAOv1C,EAAK,EACfwB,EACT,CAEA,KAAM,CAACA,aAAWu/E,cAAY,EAAGF,GAAU,CACzC7gF,SACAs4B,SAAU42D,GACV/O,qBAAsB,GACtBa,eAAgB2iH,EAClB,CAAC,EAED,aAAM5iH,GACCv/E,EACT,CAAC,EACD6Q,GAAcyxL,EAAgB,EAC9Bp6K,GAAkB/D,KAAK,IAAMvL,EAAI,EACjCm0F,EAAY,CACb,EACGltG,GAAU,IAEd2iM,GAAgBp+K,UAAUS,IAAImpD,GAAO20H,4BAA4B,EAEjEzM,GAAM9xK,UAAUS,IAAImpD,GAAO40H,iBAAiB,EAC5Cp1L,GAAI0oL,MAAQA,GACZ+L,GAAiB,CACf9iM,GAAKs0L,GAAmBzlH,GAAO60H,2BAA2B,EAC1DJ,GACAD,EAAe,CAChB,EAED5B,GAAQpzL,EAAG,EACb,CAAC,EAEDpC,GACEC,GACE,IAAM,CAACy3L,GAAY,EAAEtC,KAAmB,EAAEC,GAAQ,EAAIC,GAAQ,EAAIjI,OAAekI,GAAa,EAAEC,GAAS,GACzG,CAAC,CAACkC,GAAerlG,KAAC,IAAM,CACtB,GAAG,CAACqlG,IAAcrlG,GAAE2d,KAAMliF,IAAMA,KAAM,IAAI,EACxC,OAGF,KAAM,CAAC8sD,GAAgBtkD,GAASt7B,GAASg3C,GAAUwgJ,GAAYpB,EAAM,EAAI/+F,GACzEqgG,GAAkB93G,EAAc,EAChCu2G,EAAW76J,EAAO,EAClB/K,EAAWvwB,EAAO,EAClB+zJ,EAAY/8G,EAAQ,EACpBygJ,GAAcD,EAAU,EACxBnB,EAAUD,EAAM,EAChBzuL,EAAMw9G,UAAO,EAEbngH,GAAa,IAAM,CACjB+0L,GAAa96F,CAAK,CACpB,CAAC,CACH,EACA,CAAC56E,MAAO,EACV,EACF,GAGFrf,GAAa,IAAM,CACjB,MAAMi6F,EAAQ8uF,KACdwI,EAAkB,CAAC,EACnBE,EAAiB,EAAK,EAEtBzxL,GAAa,IAAM,CACjBm1L,GAASl7F,CAAK,CAChB,CAAC,CAOH,CAAC,EAED,MAAM09F,GAAoBA,IAAM,CAC9B,GAAG,CAACC,GAAqB3jM,KACvB,OAGF,MAAMkwE,EAAMjjD,MAAMC,KAAKy2K,EAAoB,EAC3CA,GAAqBjjI,MAAK,EAC1B5hE,EAAUG,SAASkkB,kBAAkBm8E,eAAe5wF,EAAMjE,MAAM5L,OAAQqxE,EAAK,EAAI,GAE7EyzH,GAAoC,IAAIxhL,IAC9C,IAAIyhL,GACJ73L,GAAa,IAAM,CACdwtE,GAAQ,GACTqqH,GAA4B3zG,OAAOuP,YAAYkkG,GAAmB,GAAI,EAEtE33L,GAAa,IAAM,CACjB43L,GAAqBn+K,IAAIsvK,GAAc,EAACn0J,EAAE,CAC5C,CAAC,GAED6iF,cAAcogF,EAAyB,CAE3C,CAAC,EAED,MAAMC,GAAep7G,GAAkB,CAClCq7G,GAAc9jM,OACflB,EAAUG,SAASkkB,kBAAkB4gL,oBAAoBr1L,EAAMjE,MAAM5L,OAAQouB,MAAMC,KAAK42K,EAAa,CAAC,EACtGA,GAAcpjI,MAAK,GAGrB5hE,EAAUG,SAASkkB,kBAAkB0gL,YAAYn1L,EAAMjE,MAAM5L,OAAQ4pF,CAAK,GAGtEq7G,GAA6B,IAAI3hL,IACjC6hL,GAAgBx8J,GAASq8J,GAAa,IAAK,GAAM,EAAI,EAC3D93L,GAAa,IAAM,CACjB,GAAG,CAACwtE,GAAQ,EACV,OAGF,IAAI0qH,EACJl4L,GAAa,IAAM,CACjB,MAAMi6F,GAAQ8uF,KACXpmL,EAAMisH,QAAUruH,GAAQ,IAAM4iH,GAAS,CAAE,GAAG40E,GAAct+K,IAAIwgF,GAAMrlE,EAAE,EACzEqjK,GAAcC,EAASj+F,GAAMrlE,EAAE,CACjC,CAAC,EAEDnzB,GAAU,IAAM,CACVw2L,GAAcE,gBAIlBF,GAAch0G,aAAY,EAC1B6zG,GAAYI,CAAM,EACpB,CAAC,CACH,CAAC,EAED,MAAMjC,EAAaA,IAAM,CACpB,CAAChnK,EAAQ6nC,WAAav2D,GAAQ,IAAM,CAACitE,GAAQ,CAAE,GAIlD4qH,MAGFp4L,GAAai2L,CAAU,EAEvB,MAAMoC,GAAMxiL,EAAI2yK,GAAW/lK,GAAKwmK,OAAWtmL,EAAO,CAAComL,eAAa,EAAC,CAAI,EAErE,IAAIuP,GAAsB,GAC1B,MAAMC,GAAsBA,IAAM,CAChC,IAAI1iK,EAAO2iK,KACX,GAAG,CAAC3iK,EACF,MAAO,MAIP1zB,GAAY,GACZ8sB,EAAQ6nC,WACR2hI,GAAM,GACNH,KAEGziK,EAAO,EAAG,EAAEA,EACV,EAAEA,GAGT,MAAM6iK,GAAazpK,EAAQ9V,MACrBw/K,GAAS,GACThgL,GAAakd,EAAO,EAAI,EAAI,GAC5B+iK,GAAkBF,GAAaxQ,GACrC,IAAItqL,GAAS86L,GAAa//K,GAC1B,MAAM6tI,IAAYkyC,GAAaE,IAAmB,EAAID,GAEtD,GADA/6L,IAAU86L,GAAalyC,IAAY7tI,GAChCH,KAAKmgF,IAAI9iE,CAAI,IAAM,EAAG,CACvB,MAAM5/B,GAAI4/B,EAAO,EAAIld,GACrB/a,IAAU3H,GAAI2iM,GAAkBD,GAAS1iM,EAC3C,CACA,OAAO2H,GAAS,MAGZw6L,GAAcA,IAAM,CACxB,GAAG73L,GAAQ,IAAMkD,EAAO,CAAE,EACxB,OAGF,MAAMo1L,EAAsBt4L,GAAQ,IAAMo8H,EAAe,GAEnDimD,GAAgBiW,EAAsBA,EAAsB,KAAQnU,GAC1E9+H,EAAQkB,KAAK87H,EAAa,GAItB1zK,GAAqB7P,GAAwB,CAC9CA,GAAKA,EAAE+Y,SAAWkF,IAIrB+0K,EAAW,EAAI,GAIXpjL,GAAmB5P,GAAwB,CAC5CA,GAAKA,EAAE+Y,SAAWkF,KAIrBg7K,GAAsB,GACtBjG,EAAW,EAAK,EAEZ7kH,GAAQ,GAIZ4qH,OAGIvT,GAAcxlL,GAAkB,CACpC,GAAG6yL,GAAO,EAAI,CACZ,KAAM,CAACnvG,QAAM,EAAGX,GAAY,CAC1B,GAAGuyG,GACHntK,YAAanwB,EAAK,eAAe,CACnC,CAAC,EACDw3L,GAAwB,IAAM9rG,EAAK,EACnC,MACF,CAEAn9B,EAAQi/H,WAAU,GAGpB,IAAIiU,GACJ,MAAMC,GAAUljL,EACbkpG,GAAa,CAAA7oE,IAAAgpB,EAAA,OAAAg1F,GACP4kC,GAAgB,OAAA5kC,kBAAAh1F,CAAA,EAAhB45H,GAAgB55H,CAAA,MACrBlmD,WAAS,OAAE,CAAC,CAAC4pD,GAAOsvH,OAAO,EAAGA,GAAQ,EAAE,MACxCl2K,MAAI,QAAEiT,EAAQg3B,OAASisI,GAAO,EAAK,mBAAqB,eAAe,EACvE/qK,QAAS09J,GAEZ,EAEK8L,GAAWA,IAAM,CACrBn1J,GAAqB,gBAAehpC,GAAuBC,EAAI,EAAE,CAAC,CAAE,MAAKs2L,GAAY,EAAGn0J,EAAG,EAAC,EAC5FtP,GAAS,CACP1f,YAAa,YACf,CAAC,GAGGgrL,GAAmE,CACvE9lK,aAAc,SAAW,CACvBr4B,GAAO,MAAMM,EAAUG,SAASkkB,kBAAkBmI,QAAQ5c,EAAMjE,MAAM5L,MAAM,EAC5EmnG,GAAQ8uF,GAAY,EACpBj2L,GAAS6P,EAAMjE,MAAM5L,MACtB,EACD83B,OAAQA,IAAM,CACZq8B,GAAa,CAACh4B,EAAQu/B,OACtB5I,EAAQlsB,MAAK,CACd,EACD7O,aAAcA,IAAM,CACfo8B,IAAc,CAAC+xI,IAChBpzI,EAAQkB,KAAI,EAGdkyI,GAAgB,EAClB,GAKIC,GAA2B,GACjCj5L,GAAa,IAAM,CACbwtE,GAAQ,GAIZ5nB,EAAQq/H,QAAQtoD,EAAa,IAAO5iH,QAAay3K,EAAe,EAClE,CAAC,EAED,IAAI0H,GACJ,MAAMC,GAAsB9gJ,GAAsB,CAChD,MAAMlqB,GAAW3V,KAAK22B,IAAI,EAAGkJ,EAAY,GAAG,EACtCpY,GAAS9R,IAAY8qK,GAC3B1H,EAAkBpjK,EAAQ,EAC1BsjK,EAAiBxxJ,EAAM,EAGpB08F,EAAe,IAAK5iH,SAIpBkmB,GACEi5J,KAA4Bn/K,SAC7Bm/K,GAA0B,CAACjqK,EAAQu/B,OACnC5I,EAAQlsB,MAAK,GAEPw/J,KACRA,GAA0Bn/K,OAC1B6rC,EAAQkB,KAAI,KAIhB,IAAIsyI,GAAmCC,GAA6BC,GAAY,GAChF,MAAMC,GAAkBA,IAAM,CAC5B,GAAGD,GACD,OAGF,MAAMjhJ,EAAY+gJ,GAAkB/gJ,UACpC8gJ,GAAmB9gJ,CAAS,GAGxBmhJ,GAAc1yK,GAAiB,CACnC,MAAM1O,GAASI,KAAK42B,IAAI,EAAGtoB,CAAI,EACzBhX,GAAYwrF,KAAKloE,MACvBkmK,GAAY,GAEZ,MAAMr/F,GAAQ8uF,KACdv6J,GAAc,IAAM,CAClB,GAAGu6J,GAAc,IAAK9uF,GACpB,MAAO,GAGT,MAAM/jG,GAAIsiB,KAAK22B,IAAI,GAAImsD,KAAKloE,IAAK,EAAGtjB,IAAa,GAAG,EAC9C/F,GAAQs4C,GAAkBnsD,GAAG,CAAC,EAC9BujM,GAAc3yK,GAAQ,EAAI/c,IAC1BsuC,GAAY7/B,KAAKC,MAAML,GAASqhL,EAAW,EACjDL,UAAkB/gJ,UAAYA,GAC9B8gJ,GAAmB9gJ,EAAS,EAErBniD,GAAI,CACb,EAAGkjM,EAAiB,EAAEj5F,QAAQ,IAAM,CAClCm5F,GAAY,EACd,CAAC,GAGGI,GAAkBr6L,GAAkB,CACxC,GAAI+5L,GAAkB9gJ,cAAgB8gJ,GAAkB7gJ,cAAiB6gJ,GAAkB/gJ,UACzF,OAGF3oC,GAAYrQ,CAAC,EAGb,MAAMynB,GAAOtO,KAAK22B,IAAIkqJ,GAAY/gJ,aADR,GAC0C8gJ,GAAkB7gJ,aAAe,EAAE,EACvGihJ,GAAW1yK,EAAI,GAGX6yK,IAAgB,WAAA5uF,EAAAnL,GAAA,EAAAuU,GAAApJ,EAAAt1F,WAAA8+F,GAAAJ,GAAA1+F,WAAAs1F,EAAAn0F,iBAAA,SAUR2iL,EAAe,QAAAllC,GARpB+kC,GAAiB,OAAA/kC,IAAA9xI,cAAA8xI,GAAAtpD,CAAA,EAAjBquF,GAAiBruF,EAAAoJ,GAAAr1C,QAaX46H,GAAc,MAAA/kC,GAFlB0kC,GAAW,cAAA1kC,IAAApyI,cAAAoyI,GAAAxgD,EAAA,EAAXklF,GAAWllF,GAAAz+F,EAAA6+F,GAAA,IAKb68E,EAAQ,GAAEtG,MAAK,MAAAp1K,EAAA6+F,GACfj+E,EAAO,MAAAphB,GAAA6M,IAAA,OAAA88H,GAhBLxxI,GACL,aACA,eACA,eACAu1D,GAAOg3H,mBACPxI,EAAM,GAAM96J,KAAassC,GAAOi3H,QAClC,EAAC/6C,GAKQzxI,GAAW,qBAAsBu1D,GAAOk3H,sBAAsB,EAAC/6C,GAG1Dn8E,GAAOm3H,2BAA0Bl7C,YAAA98H,GAAA88H,MAAA18H,GAAA4oF,EAAAhpF,GAAA88H,OAAA,EAAAC,KAAA/8H,GAAA+8H,MAAA38H,GAAAgyF,GAAApyF,GAAA+8H,OAAA,EAAAC,KAAAh9H,GAAAg9H,OAAA58H,GAAAoyF,GAAAxyF,GAAAg9H,QAAA,EAAAh9H,EAAA,GAAA88H,KAAA9kI,OAAA+kI,KAAA/kI,OAAAglI,MAAAhlI,MAAA,GAAAgxF,MAU7CivF,IAAW,WAAAvlF,EAAAl/F,KAAAG,SAAA++F,EAKZz5G,CAAO,EAAAka,GAAA6M,IAAA,OAAAi9H,GAHDp8E,GAAOq3H,uBAAsBh7C,GAC7BqyC,EAAc,GAAM,CAAC/zH,QAAS,EAAI+zH,EAAc,EAAK,IAAItyC,YAAAj9H,GAAAi9H,OAAA78H,GAAAsyF,EAAA1yF,GAAAi9H,QAAA,EAAAj9H,GAAAk9H,MAAAr7D,GAAA6wB,EAAAwqC,GAAAl9H,GAAAk9H,KAAA,EAAAl9H,EAAA,GAAAi9H,MAAAjlI,OAAAklI,MAAAllI,MAAA,GAAA06F,MAM9DylF,GAAcA,IAAM,CACxB,KAAM,CAACxrI,YAAWumB,SAAM,EAAIvvE,EAAM,GAAI,GACtC,GAAG,CAACgpD,EACF,OAGF,MAAM1+C,GAAc0d,GAAM,EAAI,EAAIghC,EAC5Bz3D,GAAYnB,GAAeka,EAAW,EACtCsL,GAA8C,CAClD,CAAC1lB,GAAaukM,OAAO,EAAG,eACxB,CAACvkM,GAAawkM,OAAO,EAAG,kBACxB,CAACxkM,GAAaykM,KAAK,EAAG,iBAWlB7/L,GAAQvD,GAAU,CAAC,EACnB6R,GAAMwS,GAAI9gB,GAAM2c,IAAI,EACpBzhB,GAAkD,GACpDoT,GAIMtO,GAAM2c,OAASvhB,GAAa0kM,MAAQ9/L,GAAMzE,WAAa,EAC/DL,GAASurB,KAAK8oC,GAA8B,IAAIuxC,KAAK5sC,EAAY,GAAI,CAAC,CAAC,EAEvEh5D,GAASurB,KAAK5pB,EAAKyR,GAAK,CAACtO,GAAMzE,QAAQ,CAAC,CAAC,EAJzCL,GAASurB,MAAI,WAAAyzF,GAAA3V,KAAArpF,SAAAg/F,GAAQpnG,OAAwBs/C,GAAmB8B,CAAS,CAAC,CAAC,EAAAgmD,EAAA,IAAe,EAOzFz/B,IACDv/E,GAASurB,KAAK5pB,EAAK,eAAe,CAAC,EAGlC+5L,EAAM,GACP17L,GAAS6kM,QAAQnJ,EAAQ,EAACloH,MAAqB,EAGjD,IAAIrhE,GAAwB8vB,GAAiBjiC,GAAUy3L,EAAM,EAC7D,OAAGiE,EAAM,IACPvpL,GAAS,CACPA,GAAO,CAAC,GAAC,WAAA+sG,GAAA7V,KAAArpF,SAAAk/F,GACwC/sG,OAAOi0E,MAAM,CAAC,CAAC,EAAA5mE,OAAAiN,GAAAyyF,GAAnDhyC,GAAO43H,0BAA0B,GAAA5lF,EAC/C,OAGI/sG,IAGH4oL,GAAyBA,CAACjpK,EAA0B10B,KAAoB,CAC5E,IAAI0I,GACD1I,KACD0I,GAAI6J,SAAS6Y,cAAc,GAAG,EAC9B1iB,GAAE02F,KAAO,IACT12F,GAAEob,iBAAiB,QAAUvX,IAAM,CACjCqQ,GAAYrQ,EAAC,EACbsD,EAAMogF,MAAM,IAAM,CAChB7rD,GAAaspE,aAAa,CAAC1tG,SAAM,CAAC,CACpC,CAAC,CACH,EAAG,CAAC2uK,QAAS,GAAMg5B,QAAS,EAAK,CAAC,EAClCj/L,GAAEmtC,OAAOtxC,EAAK,YAAY,CAAC,GAG7BoiF,GAAY,CACVjyD,cACAkzK,UAAWl/L,GACXkvB,SAAUyoK,GACVhyK,KAAM,SACNprB,SAAU,IACVimB,KAAM,mBACR,CAAC,GAGG2+K,GAAiBh4L,EAAMjE,MAAM5L,SAAWw1L,IAC5C3lL,EAAMjE,MAAM5L,SAAWC,EAAU+U,MACjCnF,EAAMjE,MAAM5L,OAAO0G,SACf,CAACk+L,GAAYlL,EAAa,EAAI5qL,GAAa,CAAC+4L,EAAc,EAC1DC,GAAaD,IAAc9kL,EAC9B2zK,GAAU/mK,GAAA,IAEJwmK,GAAWtmL,EAAO,CACnBomL,gBACAv7G,YACAi8G,gBACAG,mBACAG,sBACAS,gBACAqB,YACAgP,WAAYzK,EACZp+I,WACAi7I,qBACAD,cAAeA,IAAM,CACnByD,GAAuBp5L,EAAK,2BAA2B,EAAGsL,EAAMjE,MAAM5L,MAAM,CAC7E,EACD05L,gBACD,EAAC,CAEJ,EAIEsO,GAAiB,MAAMj4L,GAAqB,CAChD,MAAM/P,GAAS6P,EAAMjE,MAAM5L,OAC3B,GAAGA,KAAWC,EAAU+U,MAAQhV,KAAWw1L,GACzC,MAAO,GAGT,KAAM,CAAC71L,GAAMiqB,EAAY,EAAI,MAAMnF,QAAQya,IAAI,CAC7Cj/B,EAAUG,SAASkkB,kBAAkBmI,QAAQzsB,EAAM,EACnDC,EAAUG,SAASkkB,kBAAkB2jL,kBAAkBjoM,EAAM,CAAC,CAC/D,EACKuqI,GAAW,CAAC,CAAC5qI,GAAKktB,OAAOq7K,eAC/B,OAAQn4L,EAAU,CAACw6H,GAAWA,KAAa3gH,IAGvCu+K,GAAmB,MAAM9iE,GAAoB,CACjD,MAAMrlI,GAAS6P,EAAMjE,MAAM5L,OAC3BC,EAAUG,SAASkkB,kBAAkB8jL,oBAAoBpoM,GAAQqlI,CAAM,EACvE7yG,GAAS,CACP1f,YAAauyH,EAAS,yBAA2B,wBACjDnxB,kBAAmB,CAAC,MAAMvhG,GAAc,CAAC3S,SAAM,CAAC,CAAC,CACnD,CAAC,GAGGqoM,GAAe,MAAMvsE,GAAoB,CAC7C,MAAM97H,GAAS6P,EAAMjE,MAAM5L,OAC3BC,EAAUG,SAASkkB,kBAAkB+jL,aAAaroM,GAAQi2L,GAAc,EAACn0J,GAAIg6F,CAAM,EAAE71G,KAAK,IAAM,CAC9FuM,GAAS,CACP1f,YAAagpH,EACV97H,GAAO0G,SAAW,uBAAyB,qBAC3C1G,GAAO0G,SAAW,2BAA6B,wBACpD,CAAC,CACH,CAAC,GAGH,IAAIytD,GAAa,GACfx0D,GACAK,GACAmnG,GACA++F,GAAgB,GAClB,MAAM1oI,GAAUxB,GAAiB,CAC/B5qC,QAAS,CAAC,CACRlI,KAAM,YACNriB,KAAM,qBACNwtB,QAASA,IAAMg0K,GAAa,EAAI,EAChC91I,OAAQA,IAAMvyD,KAAWC,EAAU+U,MAAQ,CAAEmyF,GAA8Bt6E,QAAQivG,MACrF,EAAG,CACD5yG,KAAM,aACNriB,KAAM,0BACNwtB,QAASA,IAAMg0K,GAAa,EAAK,EACjC91I,OAAQA,IAAMvyD,KAAWC,EAAU+U,MAAQ,CAAC,CAAEmyF,GAA8Bt6E,QAAQivG,MACtF,EAAG,CACD5yG,KAAM,YACNriB,KAAM,cACNwtB,QAASA,IAAMg0K,GAAa,EAAI,EAChC91I,OAAQA,IAAM,CAACvyD,GAAO0G,OAAM,GAAM,CAAEygG,GAA8Bt6E,QAAQivG,QAAU77H,EAAUG,SAASkkB,kBAAkB2sB,UAAUjxC,GAAQmnG,GAAMrlE,GAAI,KAAK,CAC5J,EAAG,CACD5Y,KAAM,aACNriB,KAAM,kBACNwtB,QAASA,IAAMg0K,GAAa,EAAK,EACjC91I,OAAQA,IAAM,CAACvyD,GAAO0G,OAAQ,GAAI,CAAC,CAAEygG,GAA8Bt6E,QAAQivG,QAAU77H,EAAUG,SAASkkB,kBAAkB2sB,UAAUjxC,GAAQmnG,GAAMrlE,GAAI,KAAK,CAC7J,EAAG,CACD5Y,KAAM,UACNriB,KAAM,YACNwtB,QAASA,IAAM,CACb6xK,GAAgB,GAChB5I,EAAanpI,EAAU,CACxB,EACD5B,OAAQA,IACC,CAAC,CAAE40C,IAA+Bt6E,QAAQu1K,QAAU,CAAEj7F,GAA8Bt6E,OAAO+wK,UAEtG,EAAG,CACD10K,KAAM,OACNriB,KAAM,WACNwtB,QAASwpK,GACTtrI,OAAQA,IACH40C,GAAMxyF,IAAM,YACN,GAIDwyF,GAAMt6E,OAAOu1K,QAA2D,CAAC,CAAC1iM,GAAuBC,EAAI,EAAE,CAAC,CAEpH,EAAG,CACDupB,KAAM,WACNriB,KAAM,+BACNwtB,QAASA,IAAM,CACb,MAAM8yE,EAAQ8uF,KACR7jL,GAAQ0/C,GAAoBq1C,EAA8B,EAAI,EAChE/0F,IAGJ2O,GAAmBunL,eAAe,CAACl2L,MAAOyuF,GAAOzuF,EAAK,CAAC,CAAC,CACzD,EACDmgD,OAAQA,IAAM,CACZ,GAAG1iD,EAAMjE,MAAM5L,SAAWC,EAAU+U,KAClC,MAAO,GAGT,MAAMmyF,EAAQ8uF,KACd,MAAO,CAAC,EAAE9uF,GAAOxyF,IAAM,aAAe,CAACwyF,EAAMt6E,OAAO+wK,YAAc39L,EAAU2O,QAC9E,CACF,EAAG,CACDsa,KAAM,UACNriB,KAAM,qBACNwtB,QAASA,IAAM8zK,GAAiB,EAAI,EACpC51I,OAAQA,IAAMy1I,GAAe,EAAI,CACnC,EAAG,CACD9+K,KAAM,YACNriB,KAAM,mBACNwtB,QAASA,IAAM8zK,GAAiB,EAAK,EACrC51I,OAAQA,IAAMy1I,GAAe,EAAK,CACpC,EAAG,CACD9+K,KAAM,aACNriB,KAAM,iBACNwtB,QAASA,IAAM,CACb,MAAMlQ,EAAU8xK,GAAc,EAACn0J,GAC/BjyB,EAAMogF,MAAM,IAAM,CAChBtkE,WAAW,IAAM,CACfoqD,GAAgB03B,UAAUzH,EAAgB,EAAE5zE,KAAKpyB,GAAOumG,SAAU,EAAEt/E,OAAW9C,CAAO,EACtF4xD,GAAgBwyH,cAAc,EAAI,CACnC,EAAE,CAAC,CACN,CAAC,CACF,EACDh2I,OAAQA,IAAMtyD,EAAUG,SAASoqJ,kBAAkBg+C,kBAAkBxoM,EAAM,CAC7E,EAAG,CACDkpB,KAAM,gBACNriB,KAAM,SACNwtB,QAAS,SAAW,CAClB,MAAMyN,EAAKm0J,GAAc,EAACn0J,GACpB9hC,GAAS6P,EAAMjE,MAAM5L,OAC3BkmM,GAAgB,GAChB,MAAM7I,GAAkBD,EAAoBjpI,EAAU,EACtD,GAAI,CACF,MAAM7nB,GAAkB,CACtBiB,aAAc,mBACdC,mBAAoB,sBACpBrd,OAAQ,CACNxe,QAAS,SACTu1J,SAAU,EACZ,CACF,CAAC,CACF,MAAY,CACXm2B,KACA,MACF,CAEAp9L,EAAUG,SAASkkB,kBAAkBmkL,cAAczoM,GAAQ,CAAC8hC,CAAE,CAAC,CAChE,EACDywB,OAAQA,IAAMtyD,EAAUG,SAASkkB,kBAAkB2sB,UAAUjxC,GAAQmnG,GAAMrlE,GAAI,QAAQ,CACzF,EAAG,CACD5Y,KAAM,OACNjN,UAAW,SACXpV,KAAM,aACNwtB,QAASA,IAAM,CACb6xK,GAAgB,GAChB,MAAM7I,EAAkBD,EAAoBjpI,EAAU,EACtDrkC,GAAainF,YACXmzD,GACAr6J,EAAMjE,MAAM5L,OACZ,CAACi2L,GAAc,EAACn0J,EAAE,EAClBu7J,EACA,EACF,CACD,EACD9qI,OAAQA,IAAM,CAAE40C,GAA8Bt6E,QAAQppB,KAAOoM,EAAMjE,MAAM5L,SAAWw1L,EAEtF,CAAC,EACDt5H,UAAW,cACX,GAAG4hI,EACL,CAAC,EACDtgI,GAAQt3C,UAAUS,IAAI,OAAO,EAM7B,MAAM+hL,GAAoD,CACxDz4G,MAAO,cACP04G,SAAU,oBACVvG,OAAQ,oBACR1qJ,SAAU,mBAGNkxJ,GAAqB,SAAW,CACpC,MAAMvkL,EAAO6pK,KACPl2K,GAAY,MAAMrF,GAAc,CAAC3S,OAAQ6P,EAAMjE,MAAM5L,OAAQG,cAAe,EAAI,CAAC,EACjF,CAAC8vF,QAAM,EAAGX,GAAY,CAC1BxtF,UAAW+mM,GACXr0L,QAASs0L,GACTv5G,SAAU,SACV76D,YAAanwB,EACX8f,IAAS,QAAU,wBAA2BA,IAAS,WAAa,4BAA8B,oBAClG,CAACrM,EAAS,CACZ,EACAy3E,SAAU,EACZ,CAAC,EAEDssG,GAAwB,IAAM9rG,EAAK,GAGrC/iF,GAAa,IAAM,CACjB,MAAM+iF,EAAQ4vG,KACV5vG,IAIJthF,GAAUshF,CAAK,EAEf/iF,GACEC,GACE,IAAM,CAACutE,GAAQ,EAAIu7G,GAAc,GACjC,IAAM,CACJhmG,IACA8rG,IACF,EACA,CAACxvK,MAAO,EACV,EACF,EACF,CAAC,EAED,IAAIu8K,GACJ,MAAMC,IAAW,WAAA/mF,EAAAv/F,KAAAu/F,EAAAh2C,QAQJ,IAAM48H,KAAoB,MAAAI,GAN9BF,GAAkB,cAAAE,IAAAv5K,cAAAu5K,GAAAhnF,CAAA,EAAlB8mF,GAAkB9mF,EAAAp/F,EAAAo/F,EAAA,IAQtB/gH,GAAKynM,GAAexa,GAAW,CAAE,CAAC,CAAC,EAAA9rK,OAAAiN,GAAA2yF,EAP7BznG,GACLu1D,GAAOm5H,mBACP,aACC,cAAa/a,GAAc,GAC9B,CAAC,GAAAlsE,MAWCknF,GAAW7yL,IAAS,IAAM,CAC9B,MAAM8wF,EAAQ8uF,KACd,GAAG9uF,EAAMxyF,IAAM,YACb,OAGF,MAAMw0L,GAAahiG,EAAM/C,OAAOmD,aAAe,EAC/C,OAAI4hG,GAQK5kM,EAAK,QAAS,CAAC4kM,EAAU,CAAC,EAPfhiG,EAAM64F,aAAeplK,GAAM,EAAI,EAExCr2B,EAAK,qBAAqB,EAE1BA,EAAK,aAAa,CAK/B,GAEM6kM,GAAgB/yL,IAAS,IAAM,CACnC,IAAIk/D,EACJ,MAAM8zH,GAA6C,IAAIlmL,IACjDqpB,GAAuB1c,GAAainF,YACxCx+D,GACA,CACE9nB,SAAU,CAAC,QAAQ,EACnB4vF,cAAgBvnE,IAEP74C,EAAUG,SAASkkB,kBAAkBglL,kBAC1Cz5L,EAAMjE,MAAM5L,OACZi2L,GAAc,EAACn0J,GACfrE,GACA83C,EACAz8B,EACF,EAAE7yB,KAAK,CAAC,CAACsvD,WAAYg0H,GAAanlG,QAAK,KACrC7uB,EAAag0H,GACN,CACLxnM,OAAQqiG,GAAM57E,IAAKghL,IAAc,CAC/B,MAAMxpM,GAASwpM,GAAUtjG,QAAQC,SAAS,EAAK,EAC/CkjG,UAASt4L,IAAI/Q,GAAQwpM,EAAS,EACvBxpM,EACT,CAAC,EACDy3C,MAAO,CAAC89B,GAEX,EAEH0vC,oBAAqBA,CAACjlH,GAAQ2+B,KAAkB,CAC9C,MAAM8qK,GAAOJ,GAAS5lL,IAAIzjB,EAAM,EAChC,OAAOwqK,GAAgC,CACrC7rI,iBACA3+B,UACA4S,KAAM62L,GAAK72L,KACX63J,OAAQ,GACR9oK,WAAY6qC,GAAMmU,SAAS+oJ,uBAAuBjmL,IAAK,EACvDy7B,SAAUuqJ,GAAKvqJ,QACjB,CAAC,CACF,EACDxuB,SAAW1wB,IAAW,CACpB6P,EAAMogF,MAAM,IAAM,CAChB7rD,GAAaspE,aAAa,CAAC1tG,SAAM,CAAC,CACpC,CAAC,CACF,EACDqvC,YAAa,oBACb8uE,WAAY,GACZtmE,UAAW,EACb,CACF,CACF,GAEM8xJ,GAAgBtzL,IAAS,SAAW,CACxC,MAAMrW,EAAS6P,EAAMjE,MAAM5L,OACrBmkB,GAAU8xK,GAAc,EAACn0J,GAC/B,MAAMwK,GAAkB,CACtBiB,aAAc,mBACdC,mBAAoB,sBACpBrd,OAAQ,CACN+2I,SAAU,GACVv1J,QAAS,QACX,CACF,CAAC,EAED1R,EAAUG,SAASkkB,kBAAkBmkL,cAAczoM,EAAQ,CAACmkB,EAAO,CAAC,CACtE,GAEA,GAAG9N,EAAM,CACP,MAAM4uL,EAA6B,IAAI3hL,IACjCsmL,GAAY,EAClB,IAAIj+L,GACJ,MAAMk+L,GAAkB,SAAW,CACjC,GAAGl+L,GACD,OAGF,MAAMw7F,GAAQ8uF,KACRv8K,GAAQ7J,EAAMjE,MAAMuwB,QAAQ6oE,QAAQmC,EAAK,EACjCt3F,EAAMjE,MAAMuwB,QAAQ6sD,MAAMtjE,KAAK42B,IAAI,EAAG5iC,GAAQkwL,EAAS,EAAGlwL,GAAQkwL,EAAS,EACnFnjL,QAAS0gF,IAAU,CACvB89F,EAAct+K,IAAIwgF,GAAMrlE,EAAE,CAC5B,CAAC,EAED,MAAMuvC,GAAMjjD,MAAMC,KAAK42K,CAAa,EACpCA,EAAcpjI,MAAK,EACnBl2D,GAAU1L,EAAUG,SAASkkB,kBAAkBulL,gBAAgBh6L,EAAMjE,MAAM5L,OAAQqxE,EAAG,EAAEprD,KAAK,IAAM,CACjGta,GAAUsb,MACZ,CAAC,EAGE+pD,IACD2zC,cAAcpkF,EAAQ,GAGpBA,GAAWogE,YAAYkpG,GAAiB,GAAI,EAElD38L,GAAa,IAAM,CACjB,MAAMi6F,GAAQ8uF,KACdgP,EAAct+K,IAAIwgF,GAAMrlE,EAAE,CAC5B,CAAC,EAED,IAAIkvC,GAAU,GACdriE,GAAU,IAAM,CACdqiE,GAAU,EACZ,CAAC,EAEDggB,GAAQ,IAAM,CACZ64G,IACF,CAAC,CACH,CAEA,IAAIC,GACJ,MAAM73F,IAAU57F,GAAQm/K,KAAsB3lL,EAAMjE,MAAM5L,QAAU,CAAC6P,EAAMjE,MAAM5L,OAAO0G,OAAM,KAAE,WAAAolH,EAAArpG,KAAAG,SAAAkpG,EAAA,IAS3Fz1G,EAAI,aAAA0zL,GAAAtnL,KAAAuvG,UAAA+3E,GAAA,QAEkDX,GAAa,IAAAxmL,EAAAmnL,IAAA,WAAAt7K,GAAA3L,EAC7DglE,SAAgB,aAAhBr5D,GAAA,GAAoBq5D,GAAc,EAAGhmF,SAAS,WAAA8gB,EAAAmnL,GAC9Cb,GAAQ,MAAA9mL,OAAAiN,GAAA06K,GAFCj6H,GAAOk6H,qBAAqB,GAAAD,EAAA,iBAAAE,GAAAxnL,KAAAG,SAAAqnL,GAAAlnL,EAKrCkpG,GAAa,CAAC/iG,KAAI,SAAUmL,QAASs1K,EAAa,IAAAvnL,OAAAiN,GAAA46K,GADzCn6H,GAAOo6H,sBAAsB,GAAAD,KAIxC,GAACp6L,EAAMjE,MAAM5L,OAAO0G,OAAM,EA+B3BnC,EAAK,gBAAgB,EA/BQ,aAAA4lM,GAAA/oF,GAAA,EAAAogD,GAAA2oC,GAAAxnL,WAAAC,SAAA4+I,GAAA,IAIxBvgK,GAAK,OAAQ6uE,GAAOs6H,yBAAyB,EAAC,MAAAxnL,EAAA4+I,GAAA,IAC9C/hF,GAAcw2G,GAAc,EAAyB7xF,OAAOmD,aAAe,EAAG,CAAC,EAAC,MAAAnlF,GAAA6M,IAAA,OAAAo7K,GAHzEv6H,GAAOk6H,sBAAqBM,GACzBx6H,GAAOy6H,sBAAqBF,YAAAp7K,GAAAo7K,OAAAh7K,GAAA86K,GAAAl7K,GAAAo7K,QAAA,EAAAC,KAAAr7K,GAAAq7K,OAAAj7K,GAAAmyI,GAAAvyI,GAAAq7K,QAAA,EAAAr7K,EAAA,GAAAo7K,MAAApjL,OAAAqjL,MAAArjL,MAAA,GAAAkjL,EAAA,iBAAAK,GAAAppF,GAAA,EAAAsgD,GAAA8oC,GAAA7nL,WAAAC,EAAA4nL,IAAA,WAAAz7K,GAAAjM,EAMxC+7K,QAAe,aAAf9vK,GAAA,GAAAhM,EACEkpG,GAAa,CACZ/iG,KAAI,UACJmL,QAAU9nB,IAAM,CACd4tL,EAAmB5tL,GAAGA,GAAE+Y,MAAqB,CAC/C,EAEH,MAAAo8I,EAAA,EAAAA,GAAA11F,QAQWz/D,IAAMmrL,GAAa,CAACx4I,SAAU,CAACvqC,EAAG,gBAAiByqC,SAAUo3I,EAA0B,EAAElxK,OAAQwkL,GAAsBt3H,iBAAgC,CAAC,EAAC,MAAAi4H,GAN9JX,GAAqB,cAAAW,IAAAh7K,cAAAg7K,GAAA/oC,EAAA,EAArBooC,GAAqBpoC,GAAA9+I,EAAA8+I,GAAA3+I,EAQzBosE,GAAO,KAACjmE,MAAI,QAAG+sK,GAAc,EAAyBwB,cAAgB,mBAAqB,WAAW,qBAAS3nH,GAAOs6H,yBAAyB,UAAAxnL,EAAA8+I,GAAA,IAC9Iu0B,GAAc,EAAyB7xF,OAAOoD,iBAAmB,EAAC,MAAAplF,GAAA6M,IAAA,OAAAy7K,GAnB5D56H,GAAOo6H,uBAAsBS,GAW9BpwL,GACLu1D,GAAOy6H,sBACPz6H,GAAO86H,0BACN3U,KAAuCwB,eAAiB3nH,GAAO+6H,SAClE,EAACH,YAAAz7K,GAAAy7K,OAAAr7K,GAAAm7K,GAAAv7K,GAAAy7K,QAAA,EAAAC,KAAA17K,GAAA07K,OAAAt7K,GAAAqyI,GAAAzyI,GAAA07K,QAAA,EAAA17K,EAAA,GAAAy7K,MAAAzjL,OAAA0jL,MAAA1jL,MAAA,GAAAujL,EAQLjmM,KAAuB,EAAA6d,OAAAiN,GAAAy8F,EAhDpBvxG,GACLu1D,GAAOg7H,kBACPh7H,GAAOi7H,YACP9qM,EAAU+U,OAASnF,EAAMjE,MAAM5L,QAAU8vE,GAAOz5D,KAChDm/K,KAAsB3lL,EAAMjE,MAAM5L,QAAU8vE,GAAOk7H,WACrD,CAAC,GAAAl/E,MAiDL5+G,GACEC,GACE,IAAM,CAACutE,GAAQ,EAAIu7G,GAAc,GACjC,IAAM,CACDz5K,GAAS2O,YAAY,YAAY,GAIpC1d,GAAQ,IAAM,CACZ2O,KACAD,IACF,CAAC,CAEL,EACF,EAWA,MAAM8uL,GAAiBA,IAAM,CAC3B,MAAMjrM,EAAS6P,EAAMjE,MAAM5L,OAC3B6P,EAAMogF,MAAM,IAAM,CAChB7rD,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,CACpC,CAAC,GAGG0lM,GAAev5L,EAAW,IACvB0D,EAAM6J,MAAK,EAAK7J,EAAMshG,MAAMnM,QAAQ7oE,EAAQx8B,IAAI,CACxD,EAEKurM,GAAW/+L,EAAqB+D,GAC7BovL,GAAO,EAAKpvL,EAAOw1L,GAAY,EAAK,CAC5C,EAEKyF,GAAYh/L,EAAqB+D,GAC9BovL,GAAO,EAAKpvL,EAAOw1L,GAAY,EAAK,CAC5C,EAEK,CAACC,GAAQyF,EAAS,EAAIt8L,GAAa,EAAK,EAExCO,GAAalD,EAAW,IAAgB,CAC5C,MAAM42B,EAAOrd,KAAKmgF,IAAI6/F,GAAc,GACpC,IAAI2F,GACJ,OAA4BlvK,EAAQ6nC,UAOlCqnI,GAAkBtoK,GAAQsyJ,IAN1BgW,GAAkBtoK,IAAS,EAExB,CAAClzB,EAAMkwD,UAAYh9B,GAAQsyJ,KAC5BmQ,GAAsB,KAUnB6F,EACT,CAAC,EAEDn+L,GAAuBgD,GAAS,CAC9B,GAAIb,GAAU,GAMP,GAAGa,EACRk7L,UAAU,EAAI,EAEdzvK,GAAS,EAAG1V,KAAK,IAAM,CACrBmlL,GAAU,EAAK,CACjB,CAAC,EAEM,OAXPA,WAAU,EAAI,EAGP,EAUX,CAAC,EAED,IAAI5gL,GAAqB61K,GAA0BwI,GACnD,MAAMv5L,IAAG,WAAAsyJ,EAAAlgD,GAAA,EAAA4pF,GAAA1pC,EAAAj/I,WAAAm/I,GAAAwpC,GAAA3oL,WAAA4oL,GAAAzpC,GAAAzkF,YAAA4kF,GAAAspC,GAAA5oL,WAAA6oL,GAAAvpC,GAAA5kF,YAAA8kF,GAAAqpC,GAAAnuH,YAAAglF,GAAAF,GAAAx/I,WAAA2/I,GAAAD,GAAA1/I,WAAA8oL,GAAAnpC,GAAA3/I,WAAA+oL,GAAAD,GAAApuH,YAAAsuH,GAAAtpC,GAAAhlF,YAAAukF,EAAA99I,iBAAA,gBAsEY3H,EAAe,EAAAylJ,EAAA99I,iBAAA,kBADb1H,EAAiB,EAAAwlJ,EAAA51F,QAlD1Bz/D,IAAM,CACd,GAAG,CAACmuE,GAAQ,EACV5nB,EAAQ/hD,IAAI,CAACpR,KAAMkQ,EAAMjE,MAAO8N,MAAO7J,EAAMjE,MAAM8N,KAAK,CAAC,UACjD6L,EAAgBhZ,GAAE+Y,OAAQwqD,GAAO40H,iBAAiB,EAAG,CAC7D,MAAMv9F,GAAQ8uF,KACR4N,GAAa7O,GAAmB7tF,EAA4B,EAClE,GAAG,CAAC08F,GAAY,CACdrxK,GAAS,CACP1f,YAAa,YACf,CAAC,EACD,MACF,CAEA,KAAM,CAAC6jD,WAASs+H,uBAAqB,EAAG4O,IACrCltI,IAAStoC,MAAQ4mK,KAClBplL,EAAMogF,MAAM,IAAM,CAChB,MAAMjwF,GAAS22D,GAAUtwD,GAAUswD,GAAQtoC,IAAI,EAAI4mK,GAAqB58E,WAAWlS,SAAS,EAAI,EAC7FxvC,IAAS2wC,SACV0F,GAA4B,CAC1BhtG,UACA8hC,GAAI60B,GAAQ2wC,QACd,CAAC,EAEDljE,GAAaspE,aAAa,CACxB1tG,UACAg9F,UAAWi4F,IAAsB/tF,MACnC,CAAC,CAEL,CAAC,CAEJ,SACCo/F,GAAkB/gJ,WAClB,CAAC7zB,GAAcnlB,GAAE+Y,OAAQihL,EAAW,GACpC,CAAChhL,EAAgBhZ,GAAE+Y,OAAQwqD,GAAO87H,iBAAiB,EAEnDlF,GAAW,CAACJ,GAAkB/gJ,SAAS,UAEvC,CAACppB,EAAQu/B,QACT,CAACv/B,EAAQuzJ,eACT,CAACh+J,GAAcnlB,GAAE+Y,OAAQihL,EAAW,GACpC,CAAChhL,EAAgBhZ,GAAE+Y,OAAQwqD,GAAO87H,iBAAiB,GACnD,CAACrmL,EAAgBhZ,GAAE+Y,OAAQ,eAAe,GAC1C,CAACC,EAAgBhZ,GAAE+Y,OAAQwqD,GAAOwoH,oBAAoB,GACtD/yK,EAAgBhZ,GAAE+Y,OAAQwqD,GAAOyoH,WAAW,EAC5C,CACA,MAAMjlK,GAAO9I,GAAIulE,wBACXnzD,GAAOrwB,GAAEgnB,QAAWD,GAAK0D,KAAO1D,GAAKjN,MAAQ,EACnDysC,EAAQ6+H,qBAAqB/0J,EAAI,CACnC,GACD,MAAAivK,GAlEIrhL,GAAG,OAAAqhL,IAAAp8K,cAAAo8K,GAAAjqC,CAAA,EAAHp3I,GAAGo3I,EAAA,MAAAkqC,GAsEEzL,GAAQ,OAAAyL,IAAAr8K,cAAAq8K,GAAAR,EAAA,EAARjL,GAAQiL,GAAA1oL,EAAAk/I,GAEbolC,EAAW,EAAAtkL,EAAA4oL,GAKTjG,EAAM,QAAAwG,GAEClD,GAAS,cAAAkD,IAAAt8K,cAAAs8K,GAAA5pC,EAAA,EAAT0mC,GAAS1mC,GAAAE,GAAAr2F,QACkCi/H,GAAcroL,EAAAy/I,GAAA,IAC9D3+I,EAAOlP,QAAO8tJ,EAAA,EAAA1/I,EAAA6oL,GAGV96K,EAAgB,MAAA/N,EAAA6oL,IAAA,WAAA5nJ,GAAA/gC,EAChBjT,QAAM+lL,WAAW,YAAjB/xI,GAAA,eAAAmoJ,GAAA//F,KAAArpF,SAAAopL,GAEK,OAAE3R,EAAO,GAAExqL,EAAMjE,MAAM8N,MAAQ,CAAE,IAAG7J,EAAMjE,MAAMuwB,QAAQ38B,MAAO,EAAC,EAAA4iB,OAAAiN,GAAA28K,GADvDl8H,GAAO43H,0BAA0B,GAAAsE,MAG/C,WAAAppL,EAAA8oL,GASAtE,EAAW,EAAAxkL,EAAA+oL,GAAA,IAKfzd,GAAa,GAAI6a,GAAW,MAAAnmL,EAAA+oL,GAAA5oL,EAC5BkpG,GAAa,KACZ/iG,MAAI,QAAEiT,EAAQu/B,QAAU,CAACv/B,EAAQwzJ,iBAAmB,OAAS,OAAO,EACpEt7J,QAASA,IAAMy+B,EAAQn5B,OAAO,CAAC,SAAA/W,EAAA+oL,GAAA,IAEhC9hE,EAAe,GAAIo8D,GAAU,MAAArjL,EAAA+oL,GAE7BnuI,GAAO,MAAA56C,EAAA+oL,IAAA,WAAApoJ,GAAAzgC,EAAA,MACPjT,EAAMkwD,OAAM,CAAE,YAAdxc,GAAA,GAAAxgC,EACEkpG,GAAa,CACZ/iG,KAAM,QACNmL,QAASA,IAAMxkB,EAAMogF,MAAM,EAE9B,YAAArtE,EAAA2oL,GAGJ,KAAC/nK,EAAO,GAAM86J,MAAauI,GAAgB,MAAAjkL,EAAA2oL,IAAA,WAAA9nJ,GAAA3gC,EAC3C48K,SAAY,aAAZj8I,GAAA,eAAAwoJ,GAAAxpL,KAAAG,SAAAqpL,GAKIvM,EAAU,EAAAt9K,GAAA6M,IAAA,OAAAi9K,GAHJp8H,GAAOq8H,sBAAqBC,GAC5B5N,EAAc,GAAM,CAAC,QAAW,EAAIA,EAAc,EAAK,GAAK,UAAW,GAAE0N,YAAAj9K,GAAAi9K,OAAA78K,GAAA48K,GAAAh9K,GAAAi9K,QAAA,EAAAj9K,GAAAm9K,MAAAt7G,GAAAm7G,GAAAG,GAAAn9K,GAAAm9K,KAAA,EAAAn9K,EAAA,GAAAi9K,MAAAjlL,OAAAmlL,MAAAnlL,MAAA,GAAAglL,MAInF,WAAArpL,EAAA2oL,GAAA,IACAj5B,GAAe,GAAE5F,eAAc,MAAA9pJ,EAAA0oL,IAAA,WAAAtpC,GAAAl/I,EAAA,KAEhCjT,EAAMkwD,OAAM,CAAE,YAAfiiG,GAAA,eAAAqqC,GAAA5pL,KAAAG,SAAAypL,GAEItO,MAAWrjL,KAAI,MAAAkI,EAAAypL,GACfpO,EAAoB,MAAA77K,OAAAiN,GAAAg9K,GAFXv8H,GAAOw8H,eAAe,GAAAD,MAInC,WAAAzpL,EAAAg/I,EAEFkmC,IAAc71F,GAAM,MAAA7vF,GAAA6M,IAAA,OAAAs9K,GAxIdz8H,GAAO08H,qBAAoBC,GACvB,CACT,GAAI58L,EAAMkwD,SAAW,CACnB,CAAC+P,GAAOo7H,QAAQ,EAAGA,GAAU,EAC7B,CAACp7H,GAAOziE,OAAO,EAAGqtE,GAAU,EAC5B,CAAC5K,GAAOq7H,SAAS,EAAGA,GAAU,CAChC,EAAI,CACF,CAACr7H,GAAOgtH,KAAK,EAAG,CAACpiH,GAAS,CAC3B,EACD,CAAC5K,GAAO48H,IAAI,EAAGvwK,EAAQuzJ,eAAiBh1G,GAAU,EAClD,CAAC5K,GAAOZ,OAAO,EAAGA,EAAS,EAC3B,CAACY,GAAO61H,MAAM,EAAGA,GAAO,CACzB,EAAAgH,GACM,CAAC98L,EAAMkwD,UAAY,CACxB,eAAgB0lI,GAAoB,CACrC,EAAAmH,GAsD0BryL,GAAWu1D,GAAOyoH,YAAa5nL,KAAa+pE,GAAU,GAAI,SAAS,EAACmyH,GACjF/8H,GAAOg9H,mBAAkBC,GAGzBj9H,GAAOi7H,YAAWiC,GAChBzyL,GAAWu1D,GAAOm9H,kBAAmBzpK,EAAS,GAAIssC,GAAOo9H,UAAU,EAACC,GACpEr9H,GAAOs9H,kBAAiBC,GAGR9yL,GAAWu1D,GAAO87H,kBAAmB,OAAO,EAAC0B,GAC3Dx9H,GAAOy9H,sBAAqBC,GAE1B19H,GAAO29H,sBAAqBC,GAC1B59H,GAAO69H,qBAAoBC,GAS9BrzL,GAEL+jL,EAAM,EAAKxuH,GAAO+9H,UAAY/9H,GAAO43H,2BACrC53H,GAAOg+H,qBACT,EAACC,GAMKj+H,GAAOk+H,uBAAsBzB,YAAAt9K,GAAAs9K,OAAAl9K,GAAAuyI,EAAA3yI,GAAAs9K,QAAA,EAAAt9K,GAAAw9K,MAAA/kL,GAAAk6I,EAAA6qC,GAAAx9K,GAAAw9K,KAAA,EAAAx9K,GAAA09K,MAAA77G,GAAA8wE,EAAA+qC,GAAA19K,GAAA09K,KAAA,EAAAC,KAAA39K,GAAA29K,OAAAv9K,GAAAi8K,GAAAr8K,GAAA29K,QAAA,EAAAC,KAAA59K,GAAA49K,OAAAx9K,GAAAyyI,GAAA7yI,GAAA49K,QAAA,EAAAE,KAAA99K,GAAA89K,OAAA19K,GAAAk8K,GAAAt8K,GAAA89K,QAAA,EAAAC,KAAA/9K,GAAA+9K,OAAA39K,GAAA4yI,GAAAhzI,GAAA+9K,QAAA,EAAAG,KAAAl+K,GAAAk+K,OAAA99K,GAAAm8K,GAAAv8K,GAAAk+K,QAAA,EAAAE,KAAAp+K,GAAAo+K,OAAAh+K,GAAA8yI,GAAAlzI,GAAAo+K,QAAA,EAAAC,KAAAr+K,GAAAq+K,OAAAj+K,GAAAgzI,GAAApzI,GAAAq+K,QAAA,EAAAE,KAAAv+K,GAAAu+K,OAAAn+K,GAAAizI,GAAArzI,GAAAu+K,QAAA,EAAAE,KAAAz+K,GAAAy+K,OAAAr+K,GAAAo8K,GAAAx8K,GAAAy+K,QAAA,EAAAE,KAAA3+K,GAAA2+K,OAAAv+K,GAAAq8K,GAAAz8K,GAAA2+K,QAAA,EAAAG,KAAA9+K,GAAA8+K,OAAA1+K,GAAAs8K,GAAA18K,GAAA8+K,QAAA,EAAA9+K,EAAA,GAAAs9K,MAAAtlL,OAAAwlL,MAAAxlL,OAAA0lL,MAAA1lL,OAAA2lL,MAAA3lL,OAAA4lL,MAAA5lL,OAAA8lL,MAAA9lL,OAAA+lL,MAAA/lL,OAAAkmL,MAAAlmL,OAAAomL,MAAApmL,OAAAqmL,MAAArmL,OAAAumL,MAAAvmL,OAAAymL,MAAAzmL,OAAA2mL,MAAA3mL,OAAA8mL,MAAA9mL,MAAA,GAAA26I,MAwC7CigC,GAAwD,CAC5D//L,UAAW+mM,GACXr0L,QAASwxL,GACTz2G,SAAU,SACVE,SAAU,IAGZ,OAAA1sE,EACG4L,GAAI,KAACC,MAAI,QAAEvf,GAAU,CAAE,EAAAyf,SACrBxf,EAAG,EAGV,EAiBe,SAAS2+L,GAAcp+L,EAKnC,CACD,KAAM,CAACssB,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAACn4H,EAAMwxI,CAAO,EAAIp/L,GAAa,EAAK,EACpCixD,EAAS5zD,EAAW,IACjBu/B,GAAWplB,OAASolB,GAAWrlB,OACpCqlB,GAAWrlB,MAAS8V,EAAQ9V,MAAQ,IAAM,EAAI,GAC9C8V,EAAQ9V,QAAUqlB,GAAWrlB,KAChC,EACK8nL,EAAWhiM,EAAYiiM,GAAUA,GAAS1xI,EAAM,GAGtD5J,EAAQ++H,YAAY,EAAK,EAEzB,MAAMwc,EAA+B,IAAI/qL,IAAI,CAC3C,aACA,YACA,YACA,OAAO,CACR,EAEKopC,EAAangD,GAAqB,CACtC,GAAGwoL,GAAgBxiL,SAASmwK,aAA4B,EAAG,CACzD4rB,EAAiBzsI,MAAK,EACtB,MACF,CAEA,MAAM0sI,EAAuBC,IAC7B,GAAGvnD,GAAesnD,EAAqBthG,cAAc,eAAe,EAAG,CACrEqhG,EAAiBzsI,MAAK,EACtBjlD,GAAYrQ,CAAC,EACb,MACF,CAEA,GAAG8hM,EAAgBngL,IAAI3hB,EAAEyJ,GAAG,GAAKq4L,EAAgBngL,IAAI3hB,EAAEw8C,IAAI,EACzDnsC,GAAYrQ,CAAC,MACR,CACL,MAAMomB,EAAQ47K,EAAqBthG,cAA2B,sBAAsB,EAElFt6E,GACA,CAAChB,IACDgB,EAAM87K,mBACN96K,GAAe+6K,iBAAmBA,GAElCvgB,GAAWx7J,EAAOpmB,CAAC,CAEvB,CAEA,GAAGA,EAAEyJ,MAAQ,YAAa,CACxBs4L,EAAiBzsI,MAAK,EACtBouB,IACA,MACF,CAEAq+G,EAAiB/hM,CAAC,GAGd+hM,EAAmBrsI,GAAU11D,GAAqB,CACnDA,EAAEyJ,MAAQ,aACX88C,EAAQ6+H,qBAAqB,EAAI,EACzBplL,EAAEyJ,MAAQ,YAClB88C,EAAQ6+H,qBAAqB,EAAK,EAC1BplL,EAAEw8C,OAAS,SACnB+J,EAAQn5B,OAAM,CAElB,EAAG,IAAK,EAAI,EAEZ6sC,GAAkBmoI,WAAY,EAACzoL,UAAUS,IAAI,OAAO,EACpD6/C,GAAkBooI,aAAa,OAAO,EAEtCjgM,GAAU,IAAM,CACd4D,SAASs9E,KAAK0wE,oBAAoB,UAAW7zG,CAAS,EACtDmiJ,EAAc,EAAK,EACnBC,EAAaC,gBAAe,EAC5Bj9K,GAAwBmrI,WAAW/6H,CAAc,EAEjDskC,GAAkBmoI,WAAY,EAACzoL,UAAU0F,OAAO,OAAO,EACvD46C,GAAkBooI,aAAY,EAC9BpoI,GAAkB5V,UAAY3pC,MAChC,CAAC,EAED,MAAMgpE,EAASpmF,GAA0B,CACvCA,GAAY8vL,GAAaJ,EAAO,IAAM,CACpC5qL,GAAU,IAAM,CACd9E,GACF,CAAC,CACH,CAAC,EAEDipD,EAAQ++H,YAAY,EAAK,EACtBnjL,IACDjC,EAAWC,GAAe,EAC1B6yH,GAA4B9yH,EAAU,GAAI,EAC1CiC,IACAA,EAAUuY,QAEZ6rC,EAAQlsB,MAAK,EACb0nK,EAAiBzsI,MAAK,EACtBqsI,EAAQ,EAAK,EACb1jL,EAAI+1I,oBAAoB,QAASyuC,EAAY,CAACrgC,QAAS,EAAI,CAAC,GAG9D,IAAInkJ,EAAqBykL,EAA+BC,EACpDxgM,EACJ,MAAMY,EAAMvC,GAAY0/I,GAAa,CACnC/9I,EAAU+9I,EAEVv/I,GAAa,IAAM,CACdivB,EAAQqzJ,OACTv/F,GAEJ,CAAC,EAED,MAAMk/G,EAAgC,IAAI7rL,IACpC8rL,EAAoC,IAAI9rL,IACxCojB,EAAO2oK,YAAY/uK,MACzB,IAAIgvK,EAAW,GAEf,MAAMC,EAAcA,IAAM,CACxBp+G,aAAa70E,CAAO,EACpBgzL,EAAW,GACXn/F,QAAQ7pE,IAAI,QAAS+oK,YAAY/uK,IAAG,EAAKoG,CAAI,EAC7CizJ,GAAaJ,EAAO,IAAM,CACxBvoG,GAAQ,IAAM,CACZ5+D,GACF,CAAC,CACH,CAAC,GAGG9V,EAAUqP,WAAW,IAAM,CAC/BwkF,QAAQjrE,MAAM,iBAAiB,EAC/B/I,EAAQg1E,MACPtoF,OAAQlpB,IAASyvM,EAAqBlhL,IAAIvuB,GAAKK,MAAM,GAAK,CAACmvM,EAAiBjhL,IAAIvuB,GAAKK,MAAM,CAAC,EAC5FymB,QAAS9mB,IAAS,CACjBwwG,QAAQjrE,MAAM,oBAAqBvlC,EAAI,CACzC,CAAC,EACD4vM,GACD,EAAE,GAAG,EAEAC,EAAgBA,CAAC7vM,GAA+B+Z,KAA4B,CAChF,MAAM2zG,GAAUA,IAAM,CACpB8hF,EAAiBxoL,IAAIhnB,GAAKK,MAAM,EAE7BsvM,IAMAH,EAAiBhuM,OAASiuM,EAAqBjuM,MAChDouM,KAIJH,EAAqBzoL,IAAIhnB,GAAKK,MAAM,EAEpC,MAAMw/L,GAAmB1wL,GAAa,EAAK,EACrCQ,EAAGyT,EACNu0K,GAAO,CACN1rL,MAAOjM,GACP+Z,MAAOA,GAAK,IACZk8K,aAAW,QAAE/lL,EAAM+lL,WAAW,MAC9B95D,QAAM,QAAEjsH,EAAMisH,MAAM,EACpBzO,QAASA,GACTp9B,MAAOA,EAAK,IACZkhB,OAAK,QAAEs+F,EAAa,CAAE,EACtB1vI,OAAQA,EACRy/H,iBAAkBA,GAErB,EAEKp8I,GAAM4mB,GAAa,IAAM16D,CAAG,EAClCpC,UAAa,IAAM,CACjB,MAAMsH,GAAU4uC,KACZ5uC,KAIJ+8J,GAAYxgK,IAAIyD,GAASgrL,GAAiB,CAAC,CAAC,EAE5C7wL,GAAU,IAAM,CACd4iK,GAAYhnJ,OAAO/V,EAAO,CAC5B,CAAC,EACH,CAAC,EAEMlF,GAGHogM,EAAWra,GAAmBC,GAC9Bqa,EAAoBj2L,IAAkByiB,EAAQg1E,MAAMnoB,MAAMtjE,KAAK42B,IAAI5iC,GAAQg2L,EAAU,CAAC,EAAGhqL,KAAK22B,IAAI3iC,GAAQg2L,EAAW,EAAGvzK,EAAQg1E,MAAM3xG,MAAM,CAAC,EAC7IiwM,EAAgBtjM,EAAW,IAAMwjM,EAAiBxzK,EAAQziB,KAAK,CAAC,EAChEiqG,EAAQ5gG,EAAIkpG,GAAa,CAAA7oE,IAAAgpB,GAAA,OAAAwjI,GAAMV,EAAW,OAAAU,kBAAAxjI,EAAA,EAAX8iI,EAAW9iI,EAAA,EAAEljD,KAAM,QAAO,mBAAS4mD,GAAO+/H,WAAW,EAAEx7K,QAASA,IAAM47D,EAAM,EAAK,EAChHshF,GAAmD,IAAIU,QAE7D,kBAAA69B,GAAAjuF,GAAA,EAAAkuF,GAAAD,GAAAntL,WAAAmtL,GAAA9jI,QAScz/D,GAAM,CACd,GAAG06I,EAAW,CACZrqI,GAAYrQ,CAAC,EACb,MACF,CAEGA,EAAE+Y,SAAWkF,GACdylE,KAEH,MAAA+/G,GAhBIxlL,EAAG,OAAAwlL,IAAAvgL,cAAAugL,GAAAF,EAAA,EAAHtlL,EAAGslL,GAAA,MAAAG,GAsBEhB,EAAa,cAAAgB,IAAAxgL,cAAAwgL,GAAAF,EAAA,EAAbd,EAAac,GAAAntL,EAAAktL,GACtB,KAAC/vI,EAAM,GAAM4jD,EAAQ,MAAA/gG,EAAAktL,GAAA/sL,EAErBktJ,GAAe,CAACigC,OAAQA,IAAMnwI,EAAQ,EAA8BwxG,YAAaA,GAAW,IAAAziJ,UAAA,QAAA/L,EAC1F2pD,GAAG,KAACC,MAAI,QAAE8iI,EAAa,CAAE,EAAA3gL,SAAG0gL,CAAa,YAAAptL,GAAA6M,GAAA,OAAAkhL,GAzBrC51L,GACLu1D,GAAO0oH,OACP,CAAC97H,EAAI,GAAMoT,GAAOsgI,YAClBrwI,EAAM,GAAM+P,GAAO/P,OACnB5jC,EAAQ6nC,WAAa8L,GAAOugI,OAC9B,EAACC,GAYoBn0K,EAAQ9V,MAAQ,KAAIkqL,GACnBp0K,EAAQ7V,OAAS,KAAIkqL,GAGX1gI,GAAO2gI,iBAAgBN,YAAAlhL,EAAAkhL,OAAA9gL,GAAAygL,GAAA7gL,EAAAkhL,QAAA,EAAAG,KAAArhL,EAAAqhL,SAAArhL,EAAAqhL,WAAA,KAAAR,GAAA1pL,MAAAkC,YAAAgoL,oBAAA,EAAAR,GAAA1pL,MAAAkrJ,eAAA,oBAAAi/B,KAAAthL,EAAAshL,SAAAthL,EAAAshL,WAAA,KAAAT,GAAA1pL,MAAAkC,YAAAioL,qBAAA,EAAAT,GAAA1pL,MAAAkrJ,eAAA,qBAAAk/B,KAAAvhL,EAAAuhL,OAAAnhL,GAAA0gL,GAAA9gL,EAAAuhL,QAAA,EAAAvhL,CAAA,GAAAkhL,MAAAlpL,OAAAqpL,MAAArpL,OAAAspL,MAAAtpL,OAAAupL,MAAAvpL,MAAA,GAAA6oL,EAAA,IAQ7D,CAAC,EAED,IAAIY,EACJ,MAAM5B,EAAe,IAAIvkK,GAAa,CACpC/1B,QAASgW,EACTmmL,QAASA,CAAC5lK,EAAOC,EAAOz+B,IAAM,CAC5B,GAAG,EAAEA,aAAaqkM,YAChB,OAGF,MAAMC,EAASnrL,KAAK22B,IAAI,IAAK3Q,GAAWrlB,MAAQ,CAAC,EAC3CyqL,EAAUprL,KAAK22B,IAAI,IAAK3Q,GAAWplB,OAAS,EAAG,EACrD,GAAG0kB,EAAQ8lK,EACT7gH,WACO,GAGT,GAAGvqE,KAAKmgF,IAAI96D,CAAK,EAAI8lK,EACnB,MAAO,GAIT,MAAME,EADY50K,EAAQg1E,MAAMnM,QAAQ7oE,EAAQx8B,IAAI,GAChBorC,EAAQ,EAAI,EAAI,IAC9CimK,EAAY70K,EAAQg1E,MAAM4/F,CAAc,EAC9C,OAAIC,EAGFl+I,EAAQ/hD,IAAI,CAACpR,KAAMqxM,CAAS,CAAC,EAF7B/gH,IAKK,EACR,EACDghH,kBAAoB1kM,GACX,CAACgZ,EAAgBhZ,EAAE+Y,OAAQ,UAAU,GAC1C,CAACC,EAAgBhZ,EAAE+Y,OAAQ,YAAY,GACvC,CAACC,EAAgBhZ,EAAE+Y,OAAQwqD,GAAO40H,iBAAiB,GACnD,CAACn/K,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOktH,oBAAoB,GACtD,CAACz3K,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOm5H,kBAAkB,GACpD,CAAC1jL,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOk3H,sBAAsB,GACxD,CAACzhL,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOwoH,oBAAoB,GACtD,CAAC,CAAC/yK,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOyoH,WAAW,GAC9C,CAAChzK,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOgtH,KAAK,GACvC,CAACv3K,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOZ,OAAO,EAE7CzzB,QAASA,IAAM,CAKbi1J,EAAet/G,OAAOzlE,WAAW,IAAM,CACrCmnC,EAAQlsB,MAAM,EAAI,CACnB,EAAE,GAAG,CACP,EACDsqK,QAAU3kM,GAAM,CAEd,GADA6kF,OAAOD,aAAau/G,CAAY,EAC7B,CAACnkM,GACF,CAAC4vB,EAAQu/B,QACTn2C,EAAgBhZ,EAAE+Y,OAAQ,UAAU,GACpCC,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOm5H,kBAAkB,GACnD1jL,EAAgBhZ,EAAE+Y,OAAQ,YAAY,GACtCC,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOwoH,oBAAoB,EACrD,OAGF,MAAMnxF,EAAQ5hF,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOyoH,WAAW,EAE1D,GADgBpxF,GAAO8F,cAAc,IAAMn9B,GAAOg3H,kBAAkB,GACxDvhJ,UACV,OAGC4hD,GAAShrE,EAAQuzJ,eAClBn9K,SAASuR,iBAAiB,QAASlH,GAAa,CAAC+xJ,QAAS,GAAMt9E,KAAM,EAAI,CAAC,EAG7E,MAAM8/G,EAAch1K,EAAQwzJ,kBAAoB,CAACxzJ,EAAQuzJ,cACzD58H,EAAQ0+H,gBAAgB,EAAK,EAC1B2f,GACDr+I,EAAQkB,KAAI,CAEhB,CACF,CAAC,EAED,IAAIo9I,EACJ,MAAMh/K,EAAOA,IAAM,CACjB,MAAM9M,EAASzV,EAAMyV,WACrB,GAAG,CAACA,GAAU,CAACA,EAAOY,UAAUi/F,SAAS,QAAQ,EAAG,CAClD+oF,EAAQ,EAAI,EACZ,MACF,CAEAkD,EAAaroL,GAAU,CACrB5nB,KAAMg0L,GACNnpK,SAAU,GACVhB,SAAU,EACZ,CAAC,EAEDomL,EAAW12L,KAAK0L,MAAMirL,QAAW,qFACjC9+L,SAASs9E,KAAKh6C,OAAOu7J,EAAW12L,IAAI,EAEhCjN,GAAQ,IAAMivD,EAAI,CAAE,GACtBxvD,GAAa,IAAM,CACdkkM,EAAWpoL,SACZklL,EAAQ,EAAI,CAEhB,CAAC,EAGHhhM,GAAa,IAAM,CACjB,MAAMlN,EAASm8B,EAAQx8B,MAAMK,OAC1B,CAACA,GAAU,CAACoxM,GAIf3jM,GAAQ,IAAM,CACZ2jM,EAAWztL,OAAO,CAAC3jB,QAAM,CAAC,CAC5B,CAAC,CACH,CAAC,EAED2O,GAAU,IAAM,CACVyiM,GAIJA,EAAW12L,KAAKkR,QAClB,CAAC,GAGGojL,EAAcziM,GAAkB,CACjC06I,GACDrqI,GAAYrQ,CAAC,EAIf,MAAMi3B,EADQje,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOyoH,WAAW,GACnCtrF,cAAc,IAAMn9B,GAAOk3H,sBAAsB,EAClEn9L,EAAW25B,GAAWqjC,GAAoBrjC,EAASj3B,CAAC,EAC1D,GAAI1C,EAIJomF,SAAMpmF,CAAQ,EACP,IAGT2gB,EAAI1G,iBAAiB,QAASkrL,EAAY,CAACrgC,QAAS,EAAI,CAAC,EAEzD,MAAM4qB,EAAQC,KAERt3J,EAAiC,CACrC7d,KAAM,UACN04I,MAAOA,IAAM,CACX,GAAG9V,EACD,MAAO,GAGTh3D,GACF,GAGFn+D,GAAwBkrI,SAAS96H,CAAc,EAE/C,MAAMssK,EAA0BA,CAAC18L,EAAc0Y,IACtC1Y,EAAGm7F,cAAe,IAAGn9B,GAAO08H,oBAAqB,SAAQ18H,GAAOgtH,KAAM,GAAE,EAG3E5xK,EAAUA,CAACpZ,EAAaoK,EAAmB00B,IAAqB,CACpE,MAAM9uC,EAAY0sM,EAAwB18L,CAAE,EAC5C,GAAG,CAAC0K,GAAS2O,YAAY,YAAY,GAAK,CAACrpB,EAAW,CACpD8uC,IACA,MACF,CAEA,MAAM42B,EAAap5C,MAAMC,KAAKvc,EAAGw/L,iBAAkB,IAAGxhI,GAAO08H,oBAAqB,EAAC,CAAC,EACpF,IAAI+E,EACJ,MAAMjsL,EAAS7X,GAAQ,IAAM,CAC3B,MAAM6X,GAASzV,EAAMyV,WACrB,GAAG,CAACA,GACF,OAGF,MAAMkgD,GAAkBjgD,EAAgBD,GAAQ,YAAY,EAC5D,GAAG,CAACkgD,GACF,OAAOlgD,GAGT,MAAMmgD,GAAcpgB,GAAe//B,GAAuBkgD,EAAe,EACzE,GAAG,CAACC,GAAa,CACZ2rI,IACDA,EAAW12L,KAAKkR,SAChBwlL,EAAanqL,QAGf,MACF,CAEA,OAAGmqL,IAAe3rI,GAAY+rI,SAASC,YAAchsI,GAAY+rI,SAASjiH,YACxEgiH,EAAoB,IAGfjsL,EACT,CAAC,EACKosL,EAAWpsL,IAAWA,EAAO2nF,cAAc,SAAS,GAAK3nF,GAAQyqE,wBACjE4hH,EAAS7vM,EAAUiuF,wBACnB03F,EAAe2pB,EAAa,MAAQhgH,OAAOwgH,iBAAiB9vM,CAAS,EAAE2lL,aAGvEoqB,EAAiB9vJ,KACjB7lC,GACF6lC,GAAUllB,QAAO,EAGZklB,IAGHhiD,EAAoC,CACxCkD,SAAU,IACV4nE,OAAQ,kCAKV,IAAIy0D,GAA4B57G,GAChC,GAAG0tL,EAAY,CACb1tL,GAAS5hB,EAAUmrG,cAA4B,IAAGn9B,GAAOotH,uBAAwB,EAAC,EAClFx5K,GAAO0C,MAAM0rL,WAAa,SAE1B,MAAMH,GAASjuL,GAAOqsE,wBACtBqhH,EAAW12L,KAAK0L,MAAM6Q,IAAO,GAAEy6K,EAASz6K,GAAI,KAC5Cm6K,EAAW12L,KAAK0L,MAAM4Q,KAAQ,GAAE06K,EAAS16K,IAAK,KAC9Co6K,EAAW12L,KAAK0L,MAAM0rL,WAAa,GAC/BV,EAAW12L,KAAKuiE,eAClB1qE,SAASs9E,KAAKh6C,OAAOu7J,EAAW12L,IAAI,EAEtC,MAAMq3L,GAAaJ,GAAO36K,KAAO06K,EAAS16K,KACpCg7K,GAAaL,GAAO16K,IAAMy6K,EAASz6K,IAEnC8qB,GAAwB8vJ,EAAc,CAAC,CAC3C1tF,UAAY,yBAAwButF,EAASrrL,MAAQ8uK,EAAyB,GAChF,EAAG,CACDhxE,UAAY,aAAY4tF,EAAW,OAAMC,EAAW,cACrD,EAAC,EAECT,IACDxvJ,GAAU,CAAC,EAAE0oB,QAAU,EACvB1oB,GAAU,CAAC,EAAE0oB,QAAU,GAGzB60D,GAAkB8xE,EAAW12L,KAAKwQ,QAAQ62B,GAAWhiD,CAAO,CAC9D,CAWA,MAAMgyM,GAAaL,GAAYA,EAAS16K,KAAQ0U,GAAWrlB,MAAQ,EAAKqrL,EAASrrL,MAAQ,EACnF2rL,GAAaN,GAAYA,EAASz6K,IAAOyU,GAAWplB,OAAS,EAAKorL,EAASprL,OAAS,EACpF2rL,GAAqBP,GAAY5vM,EAAUopB,QAAQ2mL,EAAc,CAAC,CACtEpqB,eACAtjE,UAAY,eAAc4tF,EAAW,OAAMC,EAAW,kBAAiBN,EAASrrL,MAAQsrL,EAAOtrL,KAAM,KAAIqrL,EAASprL,OAASqrL,EAAOrrL,MAAO,OACzImkD,QAAS,CACX,EAAG,CACDA,QAAS,EACT3/D,OAAQ,EACV,EAAG,CACD28K,aAAc,KACdtjE,UAAY,uCACd,CAAC,CAAC,EAAGpkH,CAAO,EAGNmyM,GAAqBD,GACzB,CAAChD,EAAe,CAAClvI,EAAM,GAAMmvI,CAAW,EAAErmL,OAAO2F,OAAO,EACxD,CAAC1sB,EAAWgQ,CAAE,GACd0W,IAAKhU,IACEA,GAAQ0W,QAAQ2mL,EAAc,CAAC,CAACpnI,QAAS,CAAC,EAAG,CAACA,QAAS,CAAC,CAAC,CAAC,EAAG1qE,CAAO,CAC5E,EAGKoyM,GAAc3qI,EAAWw9B,QAAQljG,CAAS,EAChD0lE,EAAWmlC,OAAOwlG,GAAa,CAAC,EAChC,MAAM9tF,GAAS78C,EAAWwhB,MAAM,EAAGmpH,EAAW,EACxCvlI,GAAQpF,EAAWwhB,MAAMmpH,EAAW,EACpCC,GAAyBA,CAAC5qI,GAAuB5qC,KACjD80K,EAMGlqI,GAAWh/C,IAAI,CAAC1mB,GAAWwB,GAAKsG,KAAQ,CAC7C,MAAM6vD,IAAW78B,GAAOt5B,GAAM,EAAKsG,GAAIpK,OAAS8D,IAAQ,IAAMs5B,GAAO,GAAK,GAC1E,OAAO96B,GAAUopB,QAAQ2mL,EAAc,CAAC,CACtC1tF,UAAY,wCAAuC1qD,EAAQ,sBAAqB27H,GAAoB,CAAE,KAAIA,GAAoB,CAAE,OAChI3qH,QAAS,IACX,EAAG,CACDA,QAAS,KACT3/D,OAAQ,EACV,EAAG,CACDq5G,UAAY,gDAA+CixE,EAAkB,KAAIA,EAAkB,OACnG3qH,QAAS,CACX,CAAC,CAAC,EAAG1qE,CAAO,CACd,CAAC,EAjBQynE,GAAWh/C,IAAK1mB,IACdA,GAAUopB,QAAQ2mL,EAAc,CAAC,CAACpnI,QAAS,CAAC,EAAG,CAACA,QAAS,CAAC,CAAC,CAAC,EAAG1qE,CAAO,CAC9E,EA0BCsM,GARa,CACjB,GAAG6lM,EACHD,GACA3yE,GACA,GAAG8yE,GAAuB/tF,GAAQ,EAAK,EACvC,GAAG+tF,GAAuBxlI,GAAO,EAAI,CAAC,EAGZpkD,IAAK2pB,IAAcA,IAAWk+D,QAAQ,EAClE,OAAO5rF,QAAQya,IAAI7yB,EAAQ,EAAE4Z,KAAK,IAAM,CACnCmrL,IACDA,EAAW12L,KAAKkR,SAChBlI,GAAO0C,MAAM0rL,WAAa,IAO5BlhK,GACF,CAAC,GAGH,IAAI89J,EACJ,MAAMG,EAAiB1hK,GAAoB,CACzC2lB,EAAQk/H,cAAc,SAAU7kJ,CAAM,EACtCxZ,GAAe0+K,oBAAsBllK,EACrC8lB,GAAqBq/I,iBAAiBnlK,CAAM,EAEzCA,IACDuhK,EAAiB/6K,GAAe+6K,iBAI9B15K,EAAiBq9J,KACvB,IAAIkgB,EACJv9K,EAAerO,IAAIs2G,EAAc,EAAE,SAAWynD,GAAS,CACrD,GAAGA,EAAM,CACP6tB,EAAuB,CAACp2K,EAAQu/B,OAChC5I,EAAQlsB,MAAK,EACbzU,GAAEC,KAAI,EACN,MACF,CAEA,MAAMypB,EAAcA,IAAM,CACxBs1C,aAAa70E,CAAO,GAGtB/J,SAASs9E,KAAK/rE,iBAAiB,YAAa+3B,EAAa,CAACw1C,KAAM,EAAI,CAAC,EACrE,MAAM/0E,EAAUqP,WAAW,IAAM,CAC/BpZ,SAASs9E,KAAK0wE,oBAAoB,YAAa1kH,CAAW,EAC1D1pB,GAAE89D,MAAK,CACR,EAAE,GAAG,EAEHsiH,GACDz/I,EAAQkB,KAAI,CAEhB,CAAC,EAED,IAAIw+I,EACJx9K,EAAerO,IAAIgN,EAAc,EAAE,SAAU,IAAM,CACjD,MAAMwZ,EAASxZ,GAAe+6K,eAC3BvhK,EAASuhK,GACV8D,EAA0B,CAACr2K,EAAQu/B,OACnC5I,EAAQlsB,MAAK,GACLuG,IAAWuhK,GAAkB8D,GACrC1/I,EAAQkB,KAAI,CAEhB,CAAC,EAED,IAAIvnD,EAAqCC,KAErCu6I,EAAY,GAChB,OAAAlkI,EACG4L,GAAI,KAACC,MAAI,QAAEu/K,EAAQ,CAAE,EAAEt/K,SAAUvf,EAAG,IAAAwf,UAAA,QAAA/L,EAClC0lI,GAAU,CACThB,QAASA,CAAC31I,EAAI8+B,IAAS,CACrB2uF,GAA4B9yH,EAAU,GAAI,EAC1C8F,SAASs9E,KAAK/rE,iBAAiB,UAAW4oC,CAAS,EACnDmiJ,EAAc,EAAI,EAClB3jL,EAAQpZ,EAAI,GAAM8+B,CAAI,CACvB,EACD82G,aAAcA,IAAM,CAClBT,EAAY,GACZn0F,EAAQ++H,YAAY,EAAI,EACxBplL,EAASiY,QAAO,CAEjB,EACDojI,OAAQA,CAACh2I,EAAI8+B,IAAS,CACpBq2G,EAAY,GACZn0F,EAAQ++H,YAAY,EAAK,EACzB3mK,EAAQpZ,EAAI,GAAO8+B,CAAI,CACxB,EACDm3G,YAAaA,IAAM,CACjBd,EAAY,GACZp3I,EAAMi4I,SAAM,EACZypC,OACA9kL,EAASiY,QAAO,CACjB,EACDsmD,OAAM,OAAAl8C,UAAA,QAEL4tC,EAAM,GAAIptD,CAAG,MAItB,CAEO,MAAMmjM,GACX5iM,GAEGA,EAAMshG,OAAS,CAACthG,EAAMi4I,OAChB/6I,GAAY2B,IACjBmB,EAAMi4I,OAAS,IAAMp5I,IACrBqU,EACG4xK,GAAe,KAACxjF,OAAK,QAAEthG,EAAMshG,KAAK,MAAEz3F,OAAK,QAAE7J,EAAM6J,KAAK,MAAAoV,UAAA,QACpD2jL,GAAoB5iM,CAAK,CAAC,IAGhC,EAGHkT,EACG2sD,GAAM,KAACqhB,OAAK,QAAEx+E,SAASmgM,eAAe,gBAAgB,CAAC,MAAA5jL,UAAA,QAAA/L,EACrDkrL,GAAkBp+L,CAAK,KAKjB8iM,GACX9iM,GAIG,CACH,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,SAAU,WAAW,CAAC,EAC1D,OAAO4iM,GAAoB,CACzB,GAAGvvJ,EACHiuD,MAAO,CAAC,CACNnxG,OAAQ6P,EAAM7P,OACdm8B,QAAS,CAACtsB,EAAMkwE,SAAS,EACzBrmE,MAAO,EACPylB,MAAO,CACT,CAAC,EACDzlB,MAAO,CACT,CAAC,CACH,EAEaszF,GAA8B,MACzCn9F,GAIkB,CAClB,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,SAAU,IAAI,CAAC,EAC7CmhL,EAAc,MAAM/wL,EAAUG,SAASkkB,kBAAkBysK,eAAelhL,EAAM7P,MAAM,EACpF4zL,EAAa/jL,EAAMiyB,GAAKkvJ,EAAY70J,QAAQ4gF,UAAW5V,GAAUA,EAAMrlE,KAAOjyB,EAAMiyB,EAAE,EAAI7a,OAChG,GAAGpX,EAAMiyB,GAAI,CACX,MAAMi+C,EAAY,MAAM9/E,EAAUG,SAASkkB,kBAAkBw9E,aAAajyF,EAAM7P,OAAQ6P,EAAMiyB,EAAE,EAChG,GAAG,CAACi+C,EAAW,CACbvtD,GAAS,CAAC1f,YAAa,oBAAoB,CAAC,EAC5C,MACF,CAKA6/L,GAA6B,CAC3B,GAAGzvJ,EACHljD,OAAQ6P,EAAM7P,OACd+/E,YACAw0G,YAAa,EACf,CAAC,EACD,MACF,CAEAke,GAAoB,CAClB,GAAGvvJ,EACHiuD,MAAO,CAAC,CACNnxG,OAAQ6P,EAAM7P,OACdm8B,QAAS60J,EAAY70J,QACrBm0J,UAAWU,EAAY4B,YACvBl5K,MAAOk6K,EACPz0J,MAAO6xJ,EAAY70J,QAAQ38B,MAC7B,CAAC,EACDka,MAAO,CACT,CAAC,CACH,EAWAs0D,GAAA,4UCt6GA,MAAqB4kI,WAAwBnxK,EAAe,CAQ1D,OAAc,aAAc,CACnB,OACL,cAAe1pB,GAAa,6BAA6B,cAAc,EAE3E,CAEO,KAAKxV,EAAuDqwM,GAAgB,cAAe,CAC3F,YAAO,UAAU,IAAI,aAAa,EAClC,eAAU,UAAU,IAAI,yBAA0B,GAAG,KAAK,UAAY,UAAY,IAAI,oBAAoB,EAC/G,KAAK,SAAS,KAAK,UAAY,oBAAsB,iBAAiB,EAEtE,MAAMC,EAAc,IAAM,CACxB,MAAMv5K,EAAM,KAAK,OAAO,UAAUs5K,EAAe,EACjDt5K,EAAI,UAAY,GAChBA,EAAI,KAAK,GAGX,IAAI+V,EAA0Bt0B,EAC9B,GAAG,KAAK,UACNA,EAAU,IAAIsoB,GAAe,CAC3B,QAAS,4BACV,EACDtoB,EAAQ,eAAe,aAClB,CACSs0B,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,yBAA0B,MAAM,EAErD,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,mBAAmB,EAEjD,MAAA7L,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EAC/BD,GAAM,CAAC,QAASC,EAAS,IAAK,oBAAqB,GAE9C,oBAAiBhK,GAAO,4CAA6C,CACxE,KAAM,wBACP,EAED3c,EAAiB,KAAK,eAAgBg2L,EAAa,CAAC,eAAgB,KAAK,eAAe,EAE5ExjK,EAAA,OACV,KAAK,iBACL7L,EACA,KAAK,eAET,CAEA,MAAMsvK,EAAU92I,GAAiB,CAC/B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,UACN,KAAM,wBACN,QAAS62I,EACT,OAAQ,IAAM,CAAC,KAAK,WACnB,CACD,KAAM,SACN,KAAM,yBACN,QAAS,IAAM,CACD9hE,EAAA,UAAU,gBAAgB,GAAM,EAAI,CAClD,EACA,OAAQ,IAAM,CAAC,EAAEgiE,GAAc,CAAChiE,EAAY,UAAU,cACrD,CACD,KAAM,SACN,KAAM,kCACN,QAAS,IAAM,CACbA,EAAY,UAAU,iBACxB,EACA,OAAQ,IAAMA,EAAY,UAAU,YACrC,EACF,EAEI,YAAO,OAAO+hE,CAAO,EAEtB,IAAAC,EACJ,MAAMhiE,EAAc,KAAK,YAAc,IAAIiiE,GAAe,CACxD,UAAW,CAAC,CACV,YAAa,2BACb,KAAM,UACN,KAAM,UACP,EACD,WAAY,KAAK,WACjB,cAAe,GACf,SAAU,KAAK,SACf,eAAgB,KAAK,UACtB,EACWjiE,EAAA,sBAAyBvxI,GAAW,CACjCuzM,EAAAvzM,EACV6vC,GACDA,EAAY,UAAU,OAAO,OAAQ7vC,EAAS,CAAC,CACjD,EAEFuxI,EAAY,SAAS,CAAC,OAAQ9wI,EAAU,IAAK,GAC7C8wI,EAAY,UAAU,CAAC,EAElB,sBAAiB,UAAU,IAAM,CACpCA,EAAY,QAAQ,EACrB,EAEI,gBAAW,OAAO,GAAG,CACxBh2H,GAAS,UACTg2H,EAAY,UACZ1hG,CAAA,EACA,OAAO,OAAO,CAAC,EAEX,MAAA1tC,EAAa,KAAK,iBAAiB,IAAI,EAC7C,OAAO,QAAQ,IAAI,CACjB,KAAK,qBAAuB,CAAC,KAAK,WAAaY,EAAE,cAAc,KAAK,MAAMi+B,GAAO,CACzE,MAAA1oB,EAAS,MAAM0oB,EAAG,CACtB,UAAW,KAAK,iBAChB,KAAM,GACN,SAAU,GACV,MAAO,IACP,OAAQ,IACR,WAAA7+B,CAAA,CACD,EAED,YAAK,UAAYmW,EAEVC,GAAa,kBAAkBD,CAAM,EAC7C,EAEDi5H,EAAY,KAAK,EAAI,EACtB,CACH,CACF,CC1IA,MAAMkiE,GAAe,EACfC,GAAiB,EAEhB,SAASC,GAAetjM,EAO5B,CACD,KAAM,CAACwrB,EAAU+3K,CAAY,EAAItkM,GAAamkM,EAAY,EACpD,CAACI,EAAcC,CAAe,EAAIxkM,GAAa,EAAK,EACpDykM,EAASpnM,EAAW,IAAMkvB,MAAe43K,EAAY,EAErD38F,EAAc,CAACj7E,EAAkBqoI,IAA4B,CAC9DlnJ,GAAS,YAAY,YAAY,GAAK,CAACknJ,GAAe4vC,EAAgB,EAAI,EAC7EF,EAAa/3K,CAAQ,GAGjBg8H,EAAW,CAACm8C,EAAqBphL,IAAmB,CAClD,MAAApV,EAAY,KAAK,MACjBy2L,EAAathK,EAAYzW,GAAc,IAAM,CAC3C,MAAAzkB,EAAQukB,IAAO,KAAK,MAAQxe,GAAa,IAAK,EAAG,CAAC,EAExD,IAAIqe,EAAWm4K,EACf,OAAIA,EAAc,IAAOphL,IAAS,KAAUA,IAAS,IACnDiJ,IAAa,EAAIm4K,GAAev8L,EACby8L,EAAA,KAEAA,EAAA,GACnBr4K,GAAYm4K,EAAcv8L,GAG5Bq/F,EAAYj7E,CAAQ,EACbpkB,EAAQ,GACdpH,EAAM,WAAW,EAAE,QAAQ,IAAM,CAC/B4jM,IAAethK,IACJA,EAAA,OACd,CACD,GAGGwhK,EAAiB,IAAM,CACN5yE,GAAAlxH,EAAM,WAAW,GAGxC,IAAIsiC,EAAqCuhK,EAYzC,MAAMpmI,EAAY3kC,GAXC,IAAM,CAQH,EAGiB,GAAI,GAAO,EAAI,EAEhD+S,EAAS,CAAClQ,EAAej/B,IAAgC,CACvD,MAAAg5C,EAAY11C,EAAM,aAAa,UAC/B+jM,EAAUrnM,aAAa,WACT,CACZ,MAAAsnM,EAAWroK,EAAQ,EAAI0nK,GAAiBD,GAC9C,GAAI1tJ,GAAalqB,EAAS,IAAM63K,IAAmB5lI,EAAU,cAAe,CAChEA,IACV,MACF,CAEG,GAAAjyC,MAAew4K,EAChB,OAGFtnM,GAAKqQ,GAAYrQ,CAAC,EAClB+pG,EAAYu9F,CAAQ,EACpB,MACF,CAEA,MAAML,EAAcn4K,IAIjB,GAHHxrB,EAAM,UAAU,EAAE,UAAU,IAAIA,EAAM,sBAAsB,EAGzD27B,EAAQ,GAAK2G,GAAauhK,EAAkB,CAC7CpmI,EAAU,aAAa,EACvB+pF,EAASm8C,EAAa,EAAK,EAC3B,MACF,CAGE,GAAArhK,GACCqhK,GAAeP,IAAgBznK,EAAQ,GACvCgoK,GAAeN,IAAkB1nK,GAAS,EAG3C,OAQF,IAAIv0B,EAAQu0B,EAAQ,IACpBv0B,EAAQukB,GAAMg4K,EAAcv8L,EAAO,EAAG,CAAC,EAC/B,YAAI,QAASA,CAAK,EAC1Bq/F,EAAYr/F,CAAK,EACdA,GAAS,GAAKA,GAAS,EACxBq2D,EAAU,aAAa,GAGvB/gE,GAAKqQ,GAAYrQ,CAAC,EACR+gE,IACZ,EAGIwmI,EAAWvnM,GAAkB,CAC9B,GAAAsD,EAAM,iBACP,OAIF,MAAM27B,EAAgB,CADDj/B,EAAU,YAE/BmvC,EAAOlQ,EAAOj/B,CAAC,GAIjB,GAFYoV,GAAA9R,EAAM,aAAa,EAAE,QAASikM,EAAS,CAAC,QAAS,GAAM,EAEhEniL,GAAoB,CACf,MAAAm9K,EAAe,IAAIvkK,GAAa,CACpC,QAAS16B,EAAM,cACf,QAAS,CAACk7B,EAAOC,EAAOz+B,IAAM,CAC5B,MAAMi/B,EAAQ,CAACR,EACf0Q,EAAOlQ,EAAOj/B,CAAsB,CACtC,EACA,YAAa,GACb,OAAQ,GACR,kBAAoBA,GACXA,aAAa,YAAc,CAACsD,EAAM,kBAAoB,CAAC0V,EAAgBhZ,EAAE,OAAQ,yBAAyB,CACnH,CACD,EAEDoC,GAAU,IAAM,CACdmgM,EAAa,gBAAgB,EAC9B,CACH,CAEM,MAAAiF,EAAUxnM,GAAmB,CACb8uB,MACD63K,KAEFS,IACfr9F,EAAY48F,EAAc,EAC1B3mM,GAAKqQ,GAAYrQ,CAAC,EACpB,EAGIynM,EAAO,IAAM,CACR38C,EAAAh8H,IAAY,EAAK,GAG5B,OAAAnuB,GAAa,IAAM,CACX,MAAApL,EAAY+N,EAAM,YACpB/N,IAIMA,EAAA,UAAU,OAAO,iBAAkB+N,EAAM,uBAAyB0jM,EAAO,EAAI,KAAUF,EAAc,GACzGxjM,EAAA,wBAA0B/N,EAAU,UAAU,OAAO+N,EAAM,uBAAwB0jM,EAAO,GAAK,CAACF,EAAc,IACrH,EAEDnmM,GAAa,IAAM,CACX,MAAApL,EAAY+N,EAAM,YACpB/N,IAIQ6f,GAAA7f,CAAS,EAAE,kBAAoByK,GAAMA,EAAE,SAAWzK,GAAawxM,EAAgB,EAAI,CAAC,EACpF3xL,GAAA7f,CAAS,EAAE,gBAAkByK,GAAMA,EAAE,SAAWzK,GAAawxM,EAAgB,EAAK,CAAC,GAChG,EAEM,CAAC,OAAAC,EAAQ,OAAAQ,EAAQ,KAAAC,EAAM,SAAA34K,EAAU,eAAAs4K,EAAgB,aAAAN,EAAc,aAAAJ,GAAc,eAAAC,GACtF,0CClKa/mI,GAAkBt8D,GAGY,CACzC,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,oBAAoB,CAAC,EACzD,IAAI/N,EACJ,MAAMwN,GAAG,WAAA4S,EAAAC,KAAAqN,EACG1tB,EAAS,cAAA0tB,GAAAC,cAAAD,EAAAtN,CAAA,EAATpgB,EAASogB,EAAAwN,GAAAxN,EAAMghC,EAAI,OAAAtgC,EAAAV,EAC1BrS,MAAMif,QAAQ,EAAA5M,MAIb8iC,EAAa,IAAI+pB,GAAY9nD,OAAWA,OAAWA,OAAWA,OAAWnlB,CAAS,EAExF,OAAG+N,EAAM28D,qBACPxnB,EAAWivJ,aAAY,EACvBjvJ,EAAWwnB,mBAAqB38D,EAAM28D,oBAGxC79D,GAAU,IAAM,CACdq2C,EAAW36B,QAAO,CACpB,CAAC,EAEM/a,CACT,EAEa4kM,GAAgBrkM,GAGvB,CACJ,MAAMmI,EAAY,IAAIjB,GAEhB,CAACm5F,CAAM,EAAI5gC,GACf,IAAMz/D,EAAM7P,OACXA,GAIQgY,EAAUy+B,OAAO,CAACz2C,SAAQ4xC,OAAQ,GAAOzxC,cAAe0P,EAAM1P,aAAa,CAAC,EAAE8lB,KAAK,IAAM,EAAI,CAGxG,EAEA,OAAAnD,MAEKotF,EAAQ,GAAIl4F,EAAUxD,OAAO,CAGpC,EAEA,SAAS2/L,GAAatkM,EAQnB,CAED,KAAM,CAACssB,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAACuf,EAAYC,CAAa,EAAIvlM,GAAY,EAC1C,CAACm2C,EAAeqvJ,CAAgB,EAAIxlM,GAAY,EAChDqiG,EAAQhlG,EAAW,IACTgwB,EAAQg1E,KAKvB,EAED,IAAIojG,EAAiBC,EACrB,MAAMC,EAAUtoM,EAAW,IAAMglG,EAAO,EAAC4L,UAAWp9G,GAASA,EAAKK,SAAWC,EAAU+U,IAAI,CAAC,EACtF0/L,EAAcvoM,EAAW,IAAM,CACnC,MAAMmnB,EAAO2xB,IACb,OAAG3xB,GAAQA,EAAKjN,MAAS8qF,EAAO,EAAC3xG,OAASm1M,GAChCrhL,EAAKjN,MAAS8qF,IAAQ3xG,OAASm1M,IAAgBxjG,EAAO,EAAC3xG,OAAS,GAGnE,CACT,CAAC,EACK21B,EAAQ,IAAI88I,QACZ2iC,EAAc,IAAI3iC,QAElB4iC,EAAoBtoM,GAAkBwnM,EAAOxnM,CAAC,EAEpDW,GAAa,IAAM,CAEjB,GAAG,CADUknM,IAEX,OAGF,MAAMtsD,EAASA,IAAM,CACnBusD,EAAcptL,MAAS,GAGnB3B,EAASnZ,EAAW,IACXgpB,EAAM1R,IAAI0Y,EAAQx8B,IAAI,GACtBstG,cAAc,SAAS,CACrC,EAEDwlG,GAAoB,CAAC3qD,SAAQxiI,QAAM,CAAC,CACtC,CAAC,EAED,MAAMwvL,EAAcA,CAACn1M,EAAmB4M,IAAkB,CACxD,GAAG8uB,EAAU,IAAK63K,EAChB,OAAO2B,EAAiBtoM,CAAC,EAG3BumD,EAAQg/H,aAAY,EACpBh/H,EAAQ/hD,IAAI,CAACpR,MAAI,CAAC,EAClB00M,EAAc10M,CAAI,GAIdg1M,EAAa,GADC,EACkB,EAChCI,EAAmB,GACnBC,EAAiB,EAEjBC,EAAe9oM,EAAW,IAAMuZ,KAAK22B,IAAI24J,EAAgB7jG,EAAK,EAAG3xG,QAAUi1M,EAAS,IAAK,GAAK,EAAI,EAAE,CAAC,EACrG9sH,EAAUx7E,EAAW,KAClB,CACLkwC,IAAKo4J,EAAS,IAAK,GAAKtjG,EAAO,EAAC3xG,OAAS,EAAI,EAAI,EACjD88C,IAAKm4J,EAAO,IAAO,EAAIQ,EAAc,EAAGA,EAAY,EAAK,GAE5D,EAEKC,EAAYA,CAACx7L,EAAey7L,EAAuCxtH,EAAO,IAAO,CACrF,KAAM,CAACtrC,IAAK2pC,EAAU1pC,IAAKK,CAAS,EAAGw4J,EACvC,OAAOz7L,EAAQssE,GAAYtsE,EAAQijC,GAG/By4J,EAAOA,CAACz1M,EAAmB2D,IAA0B,CACzD,MAAM+wB,EAAUygL,EAAYt1F,KAAK,KAAM7/G,CAAI,EAErC01M,EAAoBlpM,EAAW,IAAM,CACzC,MAAMmnB,GAAO2xB,IACPhuC,GAAQokB,IACR3hB,EAAQpW,IACRgyM,GAAeZ,IACfa,GAAmBD,GAAe,EAAIE,EAEtCL,GAAWxtH,IACX9nE,GAAQq1L,EAAUx7L,EAAOy7L,EAAQ,EAEjCn+K,GADWw9K,EAASx9K,KAAOu+K,GACT77L,EAAQi7L,EAAaW,IAAgB57L,EAAQ,GAErE,GADiB4Z,GAAK0D,KAAOu+K,GAAmB77L,EAAQi7L,EAAaW,IAAgB57L,EAAQ,GAC/E4Z,GAAK8H,MACjB,OAGF,MAAMq6K,GAAmC,GACtC51L,GACD41L,GAAc,SAAS,EAAI,IAAM/7L,EAEjC+7L,GAAc,SAAS,EAAI,IAAMR,EAAc,EAAG,EAAIv7L,EAOxD,MAAMg8L,GAAWnB,EAAOn5K,OAASvrB,EAAM4pD,SAAW,GAC5Ck8I,GAAe91L,GAAQ,GAAKs1L,GAAS74J,IAAM5iC,GAAS,GAC1D,IAAIm7I,GAAY6gD,GAAW1+K,GAAO,EAAI2+K,GAElCC,GACD/1L,IACD41L,GAAc,kBAAkB,EAAI,gBACpC5gD,IAAa,GAAKn7I,EAAQy7L,GAAS94J,IAAM,EAAI,IAC7Cu5J,GAAS,IAETA,GAAS,MAAQ,GAInB,MAAMplM,GAAa,cADAqkJ,GAAY59I,IACexW,GAAKm8F,MAAQ,GAAK,EAAG,MAE7DrQ,GAAS,SADI,EAAKt1E,IAAS,EAAI2+L,GACH,IAClCH,UAActxF,UAAa,GAAE3zG,EAAU,IAAG+7E,EAAM,GACzC,CACL1sE,SACAg2L,SAAU,CAACh2L,IAASnG,IAAUy7L,GAAS74J,IACvCm5J,iBAEJ,CAAC,EAEK/xL,GAASqF,GAAU,CACvB/oB,OAAQL,EAAKK,OACbmB,KAAM4zM,EACNllM,MAAO,CACLwkB,SACD,EACDrI,SAAU,GACVD,YAAa,GACb1E,cAAeyuL,CACjB,CAAC,EAEKpjM,GAAY/S,EAAKK,SAAWC,EAAU+U,KAEtC1F,IAAG,WAAAkT,GAAAC,GAAA,EAAAC,GAAAF,GAAAG,WAAAqvG,UAAAxvG,GAAA,QAWI6R,EAAO,IAAA5E,GATV3d,IAAQqjB,EAAMpkB,IAAIpR,EAAMmS,CAAE,EAAG8iM,EAAY7jM,IAAIe,EAAInS,CAAI,GAAE6iB,EAAA,EAAAI,EAAAJ,GAAA,IAY5DkB,GAAOlP,QAAOkO,EAAA,EAAAE,EAAAF,GAEZhQ,OAAYnO,EAAK,SAAS,EAACwe,EAAImxL,GAAY,KAACl0M,QAAM,QAAEL,EAAKK,MAAM,EAAEG,cAAa,EAAG,IAAAiiB,GAAA6M,GAAA,OAAAC,GAb7E4gD,GAAOimI,SAAQ5mL,GACX,CACT,CAAC2gD,GAAOkmI,MAAM,EAAG,CAACtjM,IAAa/S,EAAK2wL,WAAa3wL,EAAK2wL,WAAa3wL,EAAKw8B,QAAQx8B,EAAKw8B,QAAQ38B,OAAS,CAAC,EAAEsiC,GACzG,CAACguC,GAAOmmI,QAAQ,GAAI,IAAM,CACxB,MAAMC,GAAWb,IACjB,OAAOa,IAAY,CAACA,GAASr2L,OAAS,CAACq2L,GAASL,QAClD,GAAG,CACJ,EAAAzmL,GAEMimL,EAAiB,GAAII,cAAa/pD,GAG7B57E,GAAOqmI,aAAYjnL,YAAAD,EAAAC,KAAAG,GAAA7M,GAAAyM,EAAAC,MAAA,EAAAD,EAAAE,KAAAzH,GAAAlF,GAAA2M,GAAAF,EAAAE,IAAA,EAAAF,EAAAG,KAAA0hE,GAAAtuE,GAAA4M,GAAAH,EAAAG,IAAA,EAAAs8H,KAAAz8H,EAAAy8H,MAAAr8H,GAAA3M,GAAAuM,EAAAy8H,OAAA,EAAAz8H,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,OAAAykI,KAAAzkI,MAAA,GAAAzE,OAMnC,OAAAO,EACG4L,GAAI,KAACC,MAAI,QAA0BymL,EAAiB,GAAM,CAAC9B,GAAQ,EAAAzkL,SACjExf,EAAG,IAKJ8mM,EAAS,IAAKZ,EAAoB,EAAGa,EAAmB,GAC9D,IAAI7P,EAAY,GAChB,MAAM6O,EAAoBA,IAAyB,CACjD,MAAMp+L,EAAQokB,IAERi7K,EAAc,CAAC9P,GAAa+P,IAC/BD,GAAa7pI,aACd+5H,EAAY,GACZv5H,GAAwBqpI,CAAgB,EAAErwL,KAAK,IAAM,CACnDugL,EAAY,EACd,CAAC,GAIH,MAAMh2L,EAAa,cADAyG,EAAQm/L,CACgB,MAC3CvmM,SAAM2mM,cAAcpwL,MAAMkC,YAAY,qBAAuBrR,EAAQo/L,EAAoB,IAAI,EAEtF,CAEL,UAAa7lM,EACb,aAAcyG,IAMlB/J,GACEC,GACE,IAAMgkG,EAAK,EAAG3xG,OACbA,GAAW,CACNA,GACFw0M,GAEJ,EACA,CAACznL,MAAO,EACV,EACF,EAEA,MAAMgqL,EAAoBA,IAAMz0M,EAAU0wE,kBAG1CtlE,GAAa,IAAM,CACjB,GAAGqmM,EAAM,GAAMF,IAAgB,CAC7B,MAAMS,EAAUl3L,GACV05L,EAAcC,IACpB50L,GAAY20L,CAAW,EAAE,QAASxC,EAAS,CAACnlC,QAAS,EAAI,CAAC,CAC5D,CACF,CAAC,EAEDzhK,GAAa,IAAM,CACdmmM,EAAY,GAIfvgJ,EAAQk/H,cAAc,OAAQ,CAACuhB,EAAQ,EACzC,CAAC,EAED,MAAM9gB,EAAWA,IAAM,CACrB8hB,EAAS1kM,EAAM4mM,SAAS1mH,wBACxBykH,EAAW3kM,EAAM4mM,SAASx5H,cAAc8S,sBAAqB,EAC7DukH,EAAiBzkM,EAAM4mM,SAASx5H,cAAcA,cAAc8S,sBAAqB,CAAE,GAErFpuE,GAAYjgB,EAAU,EAAE,SAAU+wL,CAAQ,EAC1CA,IACA5iL,EAAM6mM,iBAAiBjkB,CAAQ,EAE/B,IAAI3wL,EAEJ,KAAM,CAACyxM,SAAQQ,SAAQC,OAAMX,eAAch4K,WAAU63K,gBAAe,EAAGC,GAAe,CACpFnuJ,WAAYn1C,EAAM8mM,cAClB70M,UAAWA,IAAMA,EACjB80M,cAAe/mM,EAAM+mM,cACrBC,aAAcA,IAAM,CAAC1lG,EAAK,EAAG3xG,OAC7Bs3M,uBAAwB,EAC1B,CAAC,EAEKhmM,GAAC,WAAA+/E,EAAA1uE,KAAA+pD,EAEEpqE,EAAS,cAAAoqE,GAAAz8C,cAAAy8C,EAAA2kB,CAAA,EAAT/uF,EAAS+uF,EAAAjuE,EAAAiuE,EAAA9tE,EAIbopD,GAAc,KAAAr9C,UAAA,OAAAQ,EAAAnN,KAAAS,SAAA0M,EAAAvM,EAOV2pD,GAAG,KAACC,MAAI,QAAEwkC,EAAK,CAAE,EAAAriF,SAAGsmL,CAAI,IAAAhzL,GAAA6M,GAAA,OAAA28H,GALlB97E,GAAOinI,KAAIlrD,GACP,CACT,CAAC/7E,GAAO,cAAc,CAAC,EAAG,CAAC,CAAC4kI,EAAY,GACzC9oD,YAAA38H,EAAA28H,MAAAv8H,GAAAC,EAAAL,EAAA28H,OAAA,EAAA38H,EAAA48H,KAAAnkI,GAAA4H,EAAAu8H,GAAA58H,EAAA48H,IAAA,EAAA58H,CAAA,GAAA28H,KAAA3kI,OAAA4kI,KAAA5kI,MAAA,GAAAqI,CAAA,KAAAlN,GAAA6M,GAAA,OAAA68H,EAREh8E,GAAOknI,cAAajrD,GACpBspD,EAAiB,EAAEvpD,WAAA78H,EAAA68H,MAAAz8H,GAAAwhE,EAAA5hE,EAAA68H,MAAA,EAAA78H,EAAA88H,KAAAj7D,GAAAD,EAAAk7D,GAAA98H,EAAA88H,IAAA,EAAA98H,CAAA,GAAA68H,KAAA7kI,OAAA8kI,KAAA9kI,MAAA,GAAA4pE,MAe9BG,GAAQ,IAAM,CACZ,MAAM+gG,EAAa,MAAMhuC,IAAkB,CACzC9jJ,EAAUG,SAAS62M,wBAAwBC,kBAAkBv3M,EAAKK,OAAQ+jJ,EAAI,EAE9EvxH,GAAS,CACP1f,YAAaixI,GAAO,8BAAgC,gCACpD7vC,kBAAmB,CAAC,MAAMvhG,GAAc,CAAC3S,OAAQL,EAAKK,MAAM,CAAC,CAAC,CAChE,CAAC,GAGGm3M,EAAe,MAAM9xE,IAAoB,CAC7CplI,EAAUG,SAASkkB,kBAAkB8jL,oBAAoBzoM,EAAKK,OAAQqlI,EAAM,EAE5E7yG,GAAS,CACP1f,YAAauyH,GAAS,yBAA2B,wBACjDnxB,kBAAmB,CAAC,MAAMvhG,GAAc,CAAC3S,OAAQL,EAAKK,MAAM,CAAC,CAAC,CAChE,CAAC,GAGH,IAAIL,EAAmBy3M,EACvB3/K,GAAkB,CAChBrG,QAAS,CAAC,CACRlI,KAAM,UACNriB,KAAM,eACNwtB,QAASA,IAAM,CACbgjL,GAAe5pG,UAAUmlG,EAAe,EAAExgL,KAAI,CAC/C,EACDmgC,OAAQA,IAAM6kJ,CAChB,EAAG,CACDluL,KAAM,UACNriB,KAAM,kBACNwtB,QAASA,IAAM,CACb,MAAMiF,GAAM+9K,GAAe5pG,UAAUmlG,EAAe,EACpDt5K,GAAIg+K,UAAY,GAChBh+K,GAAIlH,KAAI,CACT,EACDmgC,OAAQA,IAAM6kJ,CAChB,EAAG,CACDluL,KAAM,UACNriB,KAAM,cACNwtB,QAASA,IAAM,CACb+P,GAAaspE,aAAa,CACxB1tG,OAAQL,EAAKK,OACbqkB,KAAM24D,GAASqmF,IACjB,CAAC,CACF,EACD9wG,OAAQA,IAAM,CAAC6kJ,GAAUz3M,EAAKK,OAAO0G,OAAO,CAC9C,EAAG,CACDwiB,KAAM,UACNriB,KAAM,eACNwtB,QAASA,IAAM,CACb+P,GAAaspE,aAAa,CACxB1tG,OAAQL,EAAKK,OACbqkB,KAAM24D,GAASqmF,IACjB,CAAC,CACF,EACD9wG,OAAQA,IAAM,CAAC5yD,EAAKK,OAAO0G,OAAO,CACpC,EAAG,CACDwiB,KAAM,OACNriB,KAAM,0BACNwtB,QAASA,IAAM09J,EAAW,EAAI,EAC9Bx/H,OAAQA,IAAM,CAAC6kJ,GAAUn3M,EAAUG,SAAS62M,wBAAwBM,mBAAmB53M,EAAKK,MAAM,EAAEimB,KAAMuxL,IAAY,CAACA,EAAO,EAC9HC,UAAW,EACb,EAAG,CACDvuL,KAAM,SACNriB,KAAM,4BACNwtB,QAASA,IAAM09J,EAAW,EAAK,EAC/Bx/H,OAAQA,IAAM,CAAC6kJ,GAAUn3M,EAAUG,SAAS62M,wBAAwBM,mBAAmB53M,EAAKK,MAAM,EAClGy3M,UAAW,EACb,EAAG,CACDvuL,KAAM,UACNriB,KAAM,qBACNwtB,QAASA,IAAM8iL,EAAa,EAAI,EAChC5kJ,OAAQA,IAAM,CAAC6kJ,GAAU,CAACvnM,EAAMkgL,OAClC,EAAG,CACD7mK,KAAM,YACNriB,KAAM,mBACNwtB,QAASA,IAAM8iL,EAAa,EAAK,EACjC5kJ,OAAQA,IAAM,CAAC6kJ,GAAU,CAAC,CAACvnM,EAAMkgL,OACnC,CAAC,EACDp4J,SAAU71B,EACVH,WAAY8N,GAAkB,EAACgU,IAAK,EACpCiU,YAAcnrB,IACL,CAACgnM,EAAM,GAAMhuL,EAAgBhZ,GAAE+Y,OAAQwqD,GAAOimI,QAAQ,EAE/Dj+K,OAAQA,CAACvrB,GAAG+Y,KAAW,CACrB3lB,EAAOi1M,EAAYnxL,IAAI6B,EAAwB,EAC/C8xL,EAASz3M,EAAKK,SAAWC,EAAU+U,IACpC,EACDud,QAASA,IAAM,CACb5yB,EAAOsnB,MACT,CACF,CAAC,CACH,CAAC,EAED,MAAM6uL,EAAgC3pM,EAAW,IAAMkvB,EAAU,IAAK63K,CAAc,EAEpF,OAAApwL,EAEKqZ,MAAQnT,OAASlY,CAAC,CAGzB,CAEe,SAAS4mM,GAAY7nM,EAAmF,CACrH,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,WAAY,gBAAiB,gBAAiB,gBAAiB,UAAW,gBAAgB,CAAC,EAE/H,OAAAkT,EACG4xK,GAAehlK,GAAKuzB,EAAI,KAAAp0B,UAAA,QAAA/L,EACtBoxL,GAAiBtkM,CAAK,KAG7B,CAACm+D,GAAA,uKC9cc,SAASulC,GAAM1jG,EAE3B,CACD,kBAAAqS,EAAAC,KAAAS,SAAAV,EAAAa,EAEK2pD,GAAG,KAACC,MAAI,QAAE98D,EAAM3H,OAAO,EAAA4mB,SACrBA,CAAC,CAAC9Y,EAAKiB,CAAK,KACX,WAAAuL,EAAAC,GAAA,EAAAC,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAA26D,YAAAz6D,SAAAF,EAAA,IAEsCne,EAAKyR,CAAG,CAAC,EAAA4M,EAAAiuE,EACnB55E,CAAK,EAAAuL,CAAA,IAGlC,IAAAN,CAAA,IAIT,CAEO,SAASwwF,GAAU7iG,EAA8C,CACtE,MAAM6T,EAASjW,GAAQ,IAAMsb,GAAU,CAAC/oB,OAAQ6P,EAAM7P,OAAQmB,KAAM,EAAG,EAAC,EACxE,kBAAAmuB,EAAAN,KAAAgjG,UAAA1iG,EAGazf,UAAMwkB,QAAO,IAAAzR,EAAA0M,EAErB5L,MAAOlP,QAAO,MAAAoO,EAAA0M,EAAAvM,EACdmxL,GAAY,KAACl0M,QAAM,QAAE6P,EAAM7P,MAAM,UAAAsvB,CAAA,IAGxC,CAAC0+C,GAAA,gSCOc,MAAM2pI,WAAsB7nL,EAExC,CAeD2hF,YAAY1xG,EAAwD,CAClE,MAAM,8BAA+B,CACnC8xG,SAAU,GACVC,gBAAiB,GACjBjiB,KAAM,GACN7qC,WAAY,GACZitD,OAAQ,GACRF,YAAa,GACbzxG,MAAO,EACT,CAAC,EAED0W,GAAW,KAAMjX,CAAO,EACxB,KAAKkyG,OAAO/rF,UAAUS,IAAI,YAAY,EACtC,KAAK5kB,OAAS,YAEd,MAAM+sI,EAAY,SAAW,CAC3B,KAAM,CAACvjF,aAAY,EAAG,KACtB,GAAG,KAAKqsJ,WAAc,CAACrsJ,GAAe,CAAC,KAAKmzC,YAAc,CAAC,KAAKm5G,aAAe,CAC7E,KAAKxlK,KAAI,EACT,MACF,CAEA,MAAMlvC,EAAIsjE,GAAa,KAAKitC,UAAU,EAChC/5E,EAASpJ,GAAiB,CAAC,KAAKmjF,UAAU,EAAG,EAAI,EACvD,KAAK3xG,OAAS,UAEd,IAAIA,EACD,KAAK81M,aACN91M,EAAS,KAAK3B,SAASwzG,mBAAmBkkG,wBACxC,KAAKD,aAAa/1K,GAClB,CAAC,KAAK+1K,aAAahrL,OAAOkrL,QAC5B,EAEAh2M,EAAS,KAAK3B,SAASwzG,mBAAmBokG,cACxC,KAAKhqJ,aACJzC,GAA8D0sJ,SAAW,KAAKv5G,WAAWw5G,oBAC5F,EAGF,GAAI,CACF,MAAMn2M,EACN,KAAKA,OAAS,OACd,KAAKswC,KAAI,CACV,OAAOlhC,EAAK,CACX,IAAIgnM,EAAc,GACdhnM,EAAiBkT,OAAS,kBAC5ByL,GAAainF,YAAY2R,GAAY,CACnCD,UAAWl9D,EAAc,CAACA,EAAY2C,QAAQkqJ,OAAO,CAAC,EAAEzyM,OAAU,KAAK+4F,WAAa,CAAC,KAAKA,WAAW25G,qBAAqB1yM,OAAS,CAAC,KAAKkyM,aAAaS,QAAQ3yM,OAC9J4lD,YAAaA,EACbgtJ,QAAS,SAAW,CAClB,MAAM,KAAKC,aACX1pE,GACF,CACF,CAAC,EACQ39H,EAAiBkT,OAAS,gBACnC,MAAM,KAAKm0L,aACXL,EAAc,IAEd,KAAKp2M,OAAS,SAGhB43B,IACAx2B,EAAEyoB,OAAM,EAELusL,GACDrpE,GAEJ,GAGFjyH,EAAiB,KAAK62F,WAAYo7B,EAAW,CAAC95G,eAAgB,KAAKA,cAAc,CAAC,CACpF,CAEA,IAAY9B,MAAO,CACjB,OAAO,KAAKq4B,aAAe,KAAK6sD,WAClC,CAEO/lE,MAAO,CACZ,YAAKomK,cAAc,SAAU,KAAK12M,MAAM,EACjC,MAAMswC,MACf,CAEA,MAAcmmK,YAAa,CACrB,KAAKjtJ,cAIT,KAAKA,YAAc,MAAM,KAAKnrD,SAASwzG,mBAAmB8kG,eAAe,KAAK1qJ,YAAY,EAC5F,CAEO2qJ,eAAeptJ,EAA2C,CAC/D,KAAKA,YAAcA,EACnB,KAAKqsJ,UAAY,CAAC,CAAC,KAAKx/F,aAAe7sD,GAAa52C,IAAM,+BAC1D,KAAKikM,UAAY,CAAC,CAAC,KAAKxgG,aAAe,CAAC,KAAKA,YAAYt2E,GACzD,KAAKqwE,UAAS,CAChB,CAEQxK,WACNjhF,EACAwmH,EACAxpH,EACAyrB,EACA,OAAA+4D,EAAA,KAAAmK,EAAA,KACG,CAAC,KAAKulG,YAAc,CAAC,KAAKC,cAAgBj9K,GAAM,EAAI,EAAI,KAAKi9K,aAAar1F,aAC3E,KAAKpsC,OAAOvgC,OAAOgjK,GAA6B,GAGlD,KAAK5mG,OAAOp8D,OAAO,KAAK69D,UAAU,EAClC,KAAK7jB,KAAKjjB,MAAM,KAAKqlC,MAAM,EAC3B,IAAItsG,EAYJ,GAXG,KAAK4lD,YAEN5lD,EADqB,KAAK4lD,YAAY2C,QAAQkqJ,OAAO,CAAC,EAChCzyM,OACd,KAAK+4F,WACb/4F,EAAS,KAAK+4F,WAAW25G,qBAAqB1yM,OACtC,KAAKkyM,aACblyM,EAAS,KAAKkyM,aAAaS,QAAQ3yM,OAEnCA,EAAS,KAAKyyG,YAAYtD,MAGzB,KAAK8iG,UACN,KAAKlkG,WAAW79D,OAAOtxC,EAAK,IAAI,CAAC,UACzB,KAAKm6F,WAAY,CACzB,KAAKgV,WAAW79D,OAAOtxC,EAAK,wBAAwB,CAAC,EACrD,MAAMu0M,EAAQv0M,EAAK,uBAAuB,EAC1Cu0M,EAAM5yL,UAAUS,IAAI,sBAAsB,EAC1C,KAAK+sF,WAAW9mC,MAAMksI,CAAK,CAC7B,SAAU,KAAKjB,cAQb,GAPG,KAAKA,aAAahrL,OAAOkrL,SAC1B,KAAKrkG,WAAW79D,OAAOtxC,EAAK,0BAA0B,CAAC,GAEvD,KAAKmvG,WAAWz3F,UAAY,2DAC5B,KAAKy3F,WAAW79D,OAAOtxC,EAAK,2BAA2B,CAAC,GAGvD,KAAKszM,aAAar1F,WAAa5nF,GAAM,EAAI,GAC7BqvH,GAAQ,KAAKjqJ,OAAOumG,SAAU,GACjB15E,OAAOmK,KAAM,CACrC,MAAM+hL,EAAaxmM,SAAS6Y,cAAc,QAAQ,EAClD2tL,EAAW7yL,UAAUS,IAAI,cAAe,mBAAmB,EAC3DoyL,EAAWljK,OAAOtxC,EAAK,4BAA4B,CAAC,EACpDw0M,EAAW3yL,MAAM4yL,UAAY,QAC7Bn8L,EAAiBk8L,EAAY,SAAW,CACtC,MAAMp/K,EAASpJ,GAAiB,CAAC,KAAKmjF,WAAYqlG,CAAU,EAAG,EAAI,EACnE,GAAI,CACF,MAAM,KAAK34M,SAASwzG,mBAAmBqlG,yBAAyB,KAAKpB,aAAa/1K,EAAE,EACpFo3K,EAAuB,IAAM,CAC3B90K,GAAaspE,aAAa,CAAC1tG,OAAQ,KAAKA,MAAM,CAAC,CACjD,CAAC,CACF,OAAOmR,EAAK,CACXg/F,QAAQjrE,MAAM,gBAAiB/zB,CAAG,EAClCwoB,GACF,CACF,EAAG,CAAC3E,eAAgB,KAAKA,cAAc,CAAC,EACxC,KAAK0+E,WAAW9mC,MAAMmsI,CAAU,CAClC,OAGF,KAAKrlG,WAAW79D,OAAOtxC,EAAK,8BAA+B,CAACoB,CAAM,CAAC,CAAC,EACpEk3D,GAAkB,KAAK62C,WAAY,MAAM,EAG3C,MAAMwlG,EAAyBA,CAACrvM,EAAsB0C,IAAc,CAClEqQ,GAAYrQ,CAAC,EACb,KAAK8lC,KAAI,EACWviB,GAAaqpL,UAAUzwF,EAAU,IACvC,CAAC,GAAGr2E,OAClB,KAAKsgE,iBAAiB9oG,CAAQ,GAGhC,IAAIuvM,EAAgB,GAChB94M,EAAoBs4B,EACxB,GAAG,KAAKw/E,aAAe,KAAKA,YAAYvrF,OAAOinF,KAAM,CACnDxzG,EAAQiE,EAAK,KAAKq0M,UAAY,gBAAkB,mBAAmB,EACnEhgL,EAAWrmB,SAASs7F,yBACpB,MAAMzwE,EAASi8K,GAAkBH,CAAsB,EACjDzrC,EAAS,IAAI12J,GACnB02J,EAAOh3H,OAAO,CAACz2C,OAAQ,KAAKA,OAAQwB,YAAa,CAACG,WAAY,KAAKsoB,iBAAiBxG,IAAI,CAAC,CAAC,CAAC,EAC1FmV,EAA8Bid,OAC7BtxC,EAAK,KAAKq0M,UAAY,0BAA4B,6BAA8B,CAACnrC,EAAOj5J,OAAO,CAAC,EAChG,IACA4oB,CACF,CACF,SAAU,KAAKg7E,aAAakhG,eAC1Bh5M,EAAQiE,EAAK,mBAAmB,UACxB,KAAK0wH,UAAW,CACxB,KAAM,CAAChiH,EAAQC,CAAM,EAAIvJ,GAAU,KAAKsrH,UAAUqkF,eAAiBtmM,GAC9DA,EAAc2B,IAAM,uBACd3B,EAAcZ,MAAMuC,IAAM,uBAE1B3B,EAAcumM,iBAAmBtyL,MAE3C,EAEKuyL,EAAqBj1M,EAAK,sBAAuB,CAAC0O,EAAOzT,MAAM,CAAC,EAChEi6M,EAAqBl1M,EAAK,sBAAuB,CAAC2O,EAAO1T,MAAM,CAAC,EAEtEc,EAAQiE,EAAK,2BAA2B,EACxCq0B,EAAWr0B,EAAK,KAAKvE,OAAO0G,OAAM,EAAK,uBAAyB,eAAgB,CAC9EuM,EAAOzT,QAAU0T,EAAO1T,OACtB+E,EAAK,qBAAsB,CAACi1M,EAAoBC,CAAkB,CAAC,GAClExmM,EAAOzT,QAAU0T,EAAO1T,UAAY,EAAI+E,EAAK0O,EAAOzT,OAAS,qBAAuB,oBAAoB,EAAKyT,EAAOzT,OAASg6M,EAAqBC,EACrJvsE,EACA3oI,EAAK,qBAAsB,CAACoB,CAAM,CAAC,CAAC,CACrC,CACH,MAAU,KAAKyyG,aAAe,KAAKA,YAAYvrF,OAAOqyB,SACpD5+C,EAAQiE,EAAK,oBAAoB,EACzB,KAAK6zG,aAAaE,kBAC1Bh4G,EAAQiE,EAAM,KAAK6zG,YAAYt2E,GAAe,6BAAV,QAAwC,CAAC,KAAKs2E,YAAYtD,KAAK,CAAC,EAChG,KAAKsD,YAAYt2E,KACnBlJ,GAAQ,WAAA1W,EAAAC,KAAAS,SAAAV,EAAAa,EAEHosE,GAAO,CAACjmE,KAAI,gBAAAtG,EAAAV,EAAA,IACZ3d,EAAK,2BAA4B,CAAC2jG,EAAK0N,MAAM/vF,YAAc,CAAC,CAAC,EAAC,MAAA3D,MAGnEk3L,EAAgB,KAEV,KAAKhhG,aAAe,CAAC,KAAKllF,KAAK5yB,MACvCA,EAAQiE,EAAK,KAAK6zG,YAAYshG,oBAAsB,2BAA6B,aAAa,EACtF,KAAKh7G,YACbp+F,EAAQiE,EAAK,uBAAuB,EACpC2oI,EAAO9mH,MAAMuzL,QAAU,SACvB/gL,EAAWr0B,EAAK,8BAA+B,CAAC2oI,EAAQ3oI,EAAK,qBAAsB,CAACoB,CAAM,CAAC,CAAC,CAAC,GACrF,KAAKkyM,cACbv3M,EAAQiE,EAAK,oBAAoB,EACjCq0B,EAAWr0B,EAAK,yBAA0B,CAACkhJ,GAAY,CAAC3wC,MAAOnvG,CAAO,EAAC,CAAgB,EACtFizB,EAAyB1S,UAAUS,IAAI,WAAW,IAEnDrmB,EAAQ,KAAKs3M,UAAYj3M,GAAc,KAAKuyB,KAAK5yB,KAAK,EAAIiE,EAAK,2BAA2B,EAC1Fq0B,EAAW,KAAKg/K,UAAYj3M,GAAc,KAAKuyB,KAAKhC,WAAW,EAAI3sB,EAAK,2BAA4B,CAACoB,EAAQhF,GAAc,KAAK4qD,YAAYjrD,KAAK,EAAG4sI,CAAM,CAAC,GAG7J,MAAM0sE,EAAgB,KAAKxhG,aAAat2E,IAAO,KAAKypB,aAAoEsuJ,eAClHC,EAAqBA,IAAM,CAC/BpxK,GAAoBkxK,CAAa,EACjCpnL,GAAS,CAAC1f,YAAa,0BAA0B,CAAC,GAG9CinM,EAAgB5qK,GAAQ8tD,GAAwB9tD,CAAI,EACvD4qK,IACDA,EAAchxG,YAAc55D,EAAKhpB,QAAQ,WAAY,EAAE,EACvD4zL,EAAcvwM,QAAW+C,GAAM2sM,EAAuB,IAAM90K,GAAak4J,QAAQntJ,CAAI,EAAG5iC,CAAC,GAG3F,MAAMytM,EAAiBh6M,GAAmB0yG,GAAU,CAClD1yG,SACAq0B,QAASA,IAAM,CACb6kL,EAAuB,IAAM,CAC3B90K,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,CACpC,CAAC,CACH,CACF,CAAC,EAEKi6M,GAAa,KAAKrC,WAAa,KAAKC,eAAiBmC,EAAc,KAAKh6M,MAAM,EAE9Ek6M,EAAoBN,IAAa,WAAAp3L,EAAAC,KAAAD,SAAAwpD,QAAoB8tI,EAAkBl3L,EAAAJ,EAAA,IAAGtZ,GAAa0wM,EAAe,CAAC9yM,SAAU,CAAC,CAAC6N,EAAG,oBAAqBnV,OAAQo6M,EAAcp6M,OAAQsL,OAAQ,EAAE,CAAE,EAAC,EAAA0X,MAE5L,IAAI23L,EACJ,OAAG,KAAKtC,aACNsC,EAAe,CACb,CAAC,qBAAsBF,CAAS,EAChC,CAAC,gCAAiCngJ,GAAmB,KAAK+9I,aAAar1F,WAAa,KAAKq1F,aAAaS,QAAQjxH,MAAM,CAAC,EACrH,CAAC,4BAA6BvtB,GAAmB,KAAK+9I,aAAar1F,UAAU,CAAC,CAAC,EAEzE,KAAKpK,aAAaE,kBAC1ByhG,EAAcjzG,gBAAgBviG,EAAK,kBAAkB,CAAC,EACtD41M,EAAe,CACb,CAAC,eAAgBF,CAAS,EAC1B,KAAK7hG,YAAYt2E,IAAM,CAAC,aAAck4K,EAAc/5M,EAAU+U,IAAI,CAAC,EACnE,CAAC,KAAKojG,YAAYt2E,GAAK,eAAiB,iBAAkBv9B,EAAK,QAAS,CAAC,CAAC,KAAK6zG,YAAYtD,KAAK,CAAC,CAAC,EAClG,CAAC,iBAAkBilG,CAAa,EAChC,KAAK3hG,YAAYt2E,IAAM,CAAC,qBAAsBo4K,CAAiB,EAC/D,CAAC,uBAAyBpgJ,GAAoB,KAAK5mC,KAA4DtgB,KAAMqU,OAAW,EAAI,CAAC,CAAC,GAEhI,KAAKmxF,aAAe,KAAKA,YAAYvrF,OAAOinF,KACpDqmG,EAAe,CACb,CAAC,KAAKvB,UAAY,aAAe,eAAgBqB,CAAS,EAC1D,CAAC,uBAAyBngJ,GAAoB,KAAK5mC,KAA4DtgB,KAAMqU,OAAW,EAAI,CAAC,CAAC,EAEhI,KAAK2wL,YACbuC,EAAe,CACb,KAAKn6M,OAAS,CACZ,KAAKo4G,aAAashG,oBAAsB,qBAAuB,aAC/DO,CAAS,EACP,CAAC,YAAa/sE,CAAM,EACxB,KAAK90B,cAAgB,KAAKA,YAAYkhG,gBAAkB,KAAKlhG,YAAYvrF,OAAOqyB,WAAa66J,GAAiB,CAAC,KAAK3hG,YAAYvrF,OAAOqyB,SAAW,UAAY,wBAAyB66J,CAAa,EACpM,CAAC,qBAAsBG,CAAiB,EACxC,CAAC,uBAAwBpgJ,GAAoB,KAAK5mC,KAA4DtgB,KAAMqU,OAAW,EAAI,CAAC,CAAC,IAIzI,WAAAvE,EAAAsM,GAAA,EAAA6hE,EAAAnuE,EAAAC,WAAA2M,EAAAuhE,EAAAluE,WAAAghC,EAAAktC,EAAAxT,YAAAz6D,SAAAF,EAEKgE,EAAKmqE,CAAA,EAAAvhE,EAAA08C,QAIO,SAAW,CAClB,GAAG,CAACqmC,EAAKulG,WAAa,CAACvlG,EAAK+F,YAAYkhG,eACtC,OAGF,MAAMtmM,EAAgBq/F,EAAK+F,YAAYkhG,eACjClnM,EAAQY,EAAcwV,IAAKwpC,GACvBA,EAAgDr0C,OACrDq0C,EAAmDz/C,QACvD,EAEKjJ,EAAU,MAAM+oG,EAAKjyG,SAAS2R,mBAAmBqoM,kCAAkC/nG,EAAKryG,MAAM,EACpGsJ,EAAQ8I,MAAQ,CACduC,EAAG,wBACH2kM,eAAgBtmM,EAAcwV,IAAKwpC,IAC1B,CAACr9C,EAAG,uBAAwBvC,MAAO4/C,GAC3C,EACDqoJ,aAAc,GAEhB/wM,EAAQw4B,GAAKo7D,GAAmBmV,EAAK+F,YAAYlR,MAAM,EACvD59F,EAAQqE,IAAM0kG,EAAK+F,YAAYlR,OAE/B,MAAMlpE,EAAsC5rB,EAAMoW,IAAI,CAACpW,EAAOsH,KACrD,CAAClF,QAAS,KAAM7G,IAAK,EAAG3N,OAAQ,EAAG0Z,QAAOpQ,WAClD,EAED00B,EAAQ,CAAC,EAAExpB,QAAUkP,EAErB,IAAIk6G,GAAe,EAAI,EACtB08E,iBAAiB,CAACt6M,OAAQ,EAAGq2J,YAAa,CAAC1hJ,EAAG,0BAA2B,EAAEwnF,UAAW,EAAM,GAC5Fo+G,UAAU,CACTjxM,UACAgc,OAAQ0Y,EAAQ,CAAC,EAAExpB,QACnB22L,UAAW,EACXtuK,QAAS,GACT29K,YAAa,CAAE,EACfC,YAAaz8K,EAAQgrD,MAAM,CAAC,CAC9B,CAAC,GACFpmE,EAAA0M,EACD5L,CAAM,EAAAd,EAAA+gC,EAEsBrjD,CAAK,EAAAsiB,EAAAF,GAAA,WAAAG,EAAAC,EAAA,OACpCq3L,GAAgB,CAAC9nG,EAAKwlG,cAAgB,CAACuB,EAAa,YAApDv2L,EAAA,GAAAE,EAAyD23L,GAAW,KAAC5lG,OAAK,QAAGzC,EAAK+F,YAAyBzyG,EAAX,CAAC,CAACA,CAAe,MAAEg1M,UAAQ,OAAE,CAAC,CAACtoG,EAAK+F,aAAavrF,QAAQ+tL,MAAM,MAAEC,QAAM,QAAExoG,EAAKumG,SAAS,EAAI,YAAAh2L,EAAAF,EAC3LkW,IAAQ,WAAAozE,EAAAz8E,KAAA3M,SAAAopF,EAAgHpzE,CAAQ,EAAAxW,GAAA,IAAAiN,GAAA28E,EAAxGzxF,GAAW,uBAAwB4/L,GAAgB,CAAC9nG,EAAKwlG,cAAgB,CAACxlG,EAAKuD,OAAS,IAAI,CAAC,GAAA5J,IAAkB,QAAAppF,EAAAF,EACvIy3L,GAAYp3L,GAERwwF,GAAK,KAACrrG,SAAO,QAAEiyM,EAAatxL,OAAO2F,OAAO,CAAC,gBAAAq+E,EAAAZ,KAAArpF,SAAAiqF,EAAA,IACVtoG,EAAK,sBAAsB,CAAC,EAAAsoG,CAAA,KAAA/pF,GAAA,WAAA2L,EAAA3L,EAC7DuvF,QAAKwlG,YAAY,YAAjBppL,EAAA,eAAAyoF,EAAA3nF,KAAA3M,SAAAs0F,EAAA,IAEG3yG,EACE8tG,EAAKwlG,aAAahrL,OAAOkrL,SACvB,+BACA,4BACF,CAACj+I,GAAmBu4C,EAAKwlG,aAAar1F,UAAU,CAAC,CACnD,CAAC,EAAApgG,GAAA,IAAAiN,GAAA6nF,EANS38F,GAAW,sBAAuB,uBAAwB83F,EAAKwlG,aAAahrL,OAAOkrL,UAAY,QAAQ,CAAC,GAAA7gG,SAUzH,SAAAx0F,CAAA,IAGP,CAEA,MAAcyvF,WAAY,CACrB,KAAKzT,WACN,KAAK1+F,OAASyG,GACN,KAAK8kD,YACb,KAAKvrD,OAAS,KAAKurD,YAAYuvJ,OAAO30G,SAAS,EAAK,EAC5C,KAAK0xG,aACb,KAAK73M,OAASqG,GAAU,KAAKwxM,aAAal4M,IAAI,EACtC,KAAKy4G,YAAYz4G,KAAKgV,IAAM,yBACpC,KAAK3U,OAASqG,GAAU,KAAK+xG,YAAYz4G,KAAKA,IAAI,GAGpD,KAAM,CAAC+mB,EAAO,CAACpmB,QAAO8R,OAAM,EAAE+8B,CAAI,EAAI,MAAM1qB,QAAQya,IAAI,EACrD,SAAW,CACV,MAAM+sB,EAAM15C,SAAS6Y,cAAc,KAAK,EACxC6gC,SAAI/lC,UAAUS,IAAI,mBAAmB,EACrC,MAAM/K,GAA0BqwC,EAAM,cAAapJ,GAAQ,KAAK+yD,MAAQ,QAAU,WAAW,CAAE,MAAK,EAC7F3pD,CACR,MACA,SAAW,CACV,MAAMlqD,EAAS,MAAMg5M,GAAiC,CACpD3iG,YAAa,KAAKA,YAClBz2G,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCtiB,KAAM,GACN8zH,UAAW,KAAKA,UAChB+lF,gBAAiB,KAAK1xM,QAAU,KAAKA,QAAQ6yE,WAAa,KAAK7yE,QAAQy0E,OAAS,KAAK/9E,OACrF0+F,WAAY,KAAKA,WACjBm5G,aAAc,KAAKA,aACnBl6L,MAAO,KAAKuV,MAAMvV,KACpB,CAAC,EAED,OAAG,KAAKi4F,MACN7zG,EAAOqQ,MAAQ6U,OAKP,KAAKmxF,cAAgB,KAAKA,YAAYvrF,OAAOinF,MAAQ,KAAKsE,YAAYE,kBAE9Ev2G,EAAOqQ,MAAQ,MAAM0/B,GAAiB,CACpCzrB,MAAOllB,IACPmlB,OAAQnlB,IACR4wC,UAAW,QACXpwC,WAAY,KAAKsoB,iBAAiBxG,IAAK,EACvCuuB,KAAM,GACNC,SAAUz1B,GAAS2O,YAAY,eAAe,CAChD,CAAC,EAAElF,KAAK,MAAM,CAACnkB,YAAW6J,SAAO,KAC/B7J,EAAUokB,UAAUS,IAAI,yBAAyB,EACjD,MAAMhb,EACC7J,EACR,EAEDC,EAAOqQ,MAAM8T,UAAUS,IAAI,sBAAsB,EAG5C5kB,CACR,MACA,SAAW,CACV,GACG,GAAC,KAAKq2G,aAAgB,CAAC,KAAKA,YAAYkhG,gBAAkB,CAAC,KAAKlhG,YAAYvrF,OAAOqyB,UAAY,CAAC,KAAKk5D,YAAYE,kBAClH,CAAC,KAAKt4G,QACN,KAAKA,OAAO0G,UAKd,OAAO,KAAKtG,SAAS84G,WAAW+hG,UAAU,6BAA8B,CACtEnyF,QAAS,MAAM,KAAK1oH,SAAS4vG,gBAAgBkrG,gBAAgB,KAAKl7M,OAAOumG,UAAU,EACnFzkE,GAAIo7D,GAAmB,KAAKkb,YAAYlR,QAAU,KAAKkR,YAAYE,gBAAgB,CACrF,CAAC,EAAEryF,KAAMk1L,GACAA,EAAoBhsK,KAC1B,MAAyB,CAC7B,IAAG,CACL,EACD,KAAK0gD,KAAK3pE,UAAUyT,OAAO,aAAc,KAAKi+K,SAAS,EACvD,KAAKp0F,YAAY,IAAM,KAAK7b,WAAWjhF,EAAOpmB,EAAO8R,EAAO+8B,CAAI,CAAC,EACjE,KAAKutB,KAAI,CACX,CACF,CAACsR,GAAA,WClcD,MAAMotI,GAAoB,GACpBC,GAAW,cACX3jM,GAAQ,CACZ,OACA,OACA,SACA,WACA,MACA,aACA,OACA,WACA,MACA,MACF,EAEO,SAASs0C,GAAwBpH,EAAe,CACrD,GAAIltC,GAAM,SAASktC,CAAK,EAIjB,SAAGy2J,EAAQ,GAAGz2J,CAAK,MAC5B,CAEO,SAASuI,GAAcptD,EAI3B,CACK,MAAA6mF,EAAS7mF,EAAQ,QAAU,IAAIU,GAAK,YAAY,CAAC,IAAKV,EAAQ,KAAO,kBAAmB,GACxFiW,EAAM4wE,EAAO,IACb15B,EAAY1zB,GAAO,gDAAgD,EAC/D,OAAA0zB,EAAA,OAAO05B,EAAO,OAAO,EAC/B/pE,EAAiBqwC,EAAW,SAAW,CAC/B,MAAAnrD,EAAShC,EAAQ,UACpB,KAAEgC,aAAkB,SACrB,OAGI,MAAAoB,EAAIsjE,GAAavZ,CAAS,EAC1BvzB,EAASpJ,GAAiB,CAAC28B,CAAS,EAAG,EAAI,EACjD05B,EAAO,iBAAiB,CAAC,IAAK,YAAa,GACvC,IACI,MAAA7kF,QACAoP,EAAK,CACNA,EAAiB,SACZ,cAAM,uBAAwBA,CAAG,EAGpCwoB,IACAitD,EAAA,iBAAiB,CAAC,IAAA5wE,CAAA,CAAI,EAC7B7S,EAAE,OAAO,CACX,EACD,EACM+pD,CACT,CAMO,MAAMouJ,EAAiB,CAG5B,YAAmBv7M,EAEf,GAAI,CAFW,aAAAA,EAGjB,MAAM4yB,EAAQ,KAAK,MAAQ,SAAS,cAAc,OAAO,EACzDA,EAAM,KAAO,MAGPA,EAAA,UAAU,IAAI,aAAa,EAE3B,MAAA4oL,EAAqB5oL,aAAiB,iBAAmB,EAAI,EAC7DorE,EAAoB,IAAM,CAC9B,GAAGy9G,EAA2B,CAC1B,EAAAA,EACF,MACF,CAG4BA,EAAAD,EAC5BjuK,GAAgB3a,CAAK,GAIjB8oL,EAAU,IAAM,CAEpB,WAAW,IAAM,CACaD,EAAAD,EAC5BjuK,GAAgB3a,CAAK,EACZ,0BAAiB,kBAAmBorE,CAAiB,GAC7D,CAAC,GAGA29G,EAAa,IAAM,CACvB/oL,EAAM,iBAAiB,QAAS8oL,EAAS,CAAC,KAAM,GAAK,EAC5C,6BAAoB,kBAAmB19G,CAAiB,GAG/D,IAAAy9G,EACE7oL,EAAA,iBAAiB,WAAY+oL,CAAU,EAClCA,GACb,CAEA,IAAW,OAAQ,CAEjB,OAAO,KAAK,MAAM,KACpB,CAEA,IAAW,MAAMzkM,EAAe,CAC9B,KAAK,MAAM,MAAQA,EAEnB,KAAK,QAAQ,CACf,CAEO,SAAU,CACZ,SAAS,gBAAkB,KAAK,OACjCq2B,GAAgB,KAAK,KAAK,EAG5B,KAAK,SAAS,CAChB,CAEO,UAAW,CAChB,MAAMjnB,EAAQ29B,GAAa,KAAK,MAAO,KAAK,SAAS,WAAa,GAAG,KAAK,QAAQ,UAAU,IAAIsR,EAAQ,IAAIC,EAAU,GAAKkoG,EAAQ,EAC9H,WAAM,MAAM,MAAQp3I,EAAQ,IACnC,CACF,CAEA,MAAqB6xF,WAAqBpoF,EAEvC,CAQD,YAAY/vB,EAeT,CACD,MAAM,gBAAiB,CACrB,SAAU,GACV,gBAAiB,GACjB,KAAM,GACN,WAAY,GACZ,MAAO,GACR,EAEDiX,GAAW,KAAMjX,CAAO,EAExB,KAAK,OAAS,YAET,uBAAoB,GAC3B,CAEO,MAAO,CACP,0BAAc,SAAU,KAAK,MAAM,EACjC,MAAM,MACf,CAEO,eAAewrD,EAA2D,CAC/E,KAAK,YAAcA,EACnB,KAAK,EAAE,EAAE,MAAOp6C,GAAQ,CACd,cAAM,sBAAuBA,CAAG,EACxC,KAAK,KAAK,EACX,CACH,CAEA,MAAc,GAAI,CACX,aAAQ,UAAU,IAAI,YAAY,EACvC,KAAK,KAAK,EAEV,IAAIwqM,EAAY,GAChB,MAAMhrD,EAAc,IAAM,CACrBgrD,IAIH,KAAK,OAAS,OACFA,EAAA,GACTC,IACDA,GAAyB,KAAK,EAGhC,KAAK,KAAK,IAGN,CAAC,YAAArwJ,EAAa,QAAAjiD,CAAW,OAE5BA,GACI,oBAAe,IAAIrJ,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAAD,GAAQ,IAAA2N,MAAS,CACjErE,EAAQ,SAAWtJ,IAAUsJ,EAAQ,MAAQqE,IAClCgjJ,GACd,CACD,EAGH,MAAM3/B,EAAe1nH,GAAS,MACxBsuM,EAAY,KAAK,YAEnB5mF,EACE,CAAC,CAACA,EAAa,gBAAkBA,EAAa,gBAAgB,IAAM,uBACpEzlE,EAAY,IAAM,2BAElB89E,EAASrY,EAAeA,EAAa,OAAO,KAAOzlE,EAAY,QAAQ,OAAO,KAC9E2+D,EAAU3+D,EAAY,IAAM,4BAE5B5tC,EAAQqzG,EAAeA,EAAa,MAAQzlE,EAAY,MACxDjrD,EAAQ0wH,EAAeA,EAAa,MAAQzlE,EAAY,MACxDr6B,EAAc8/F,EAAeA,EAAa,YAAczlE,EAAY,YAE1ExqD,GAAM,KAAK,MAAO62M,EAAY,iBAAmB,iBAAiB,EAC/DvuE,GACI,WAAM,OAAO,SAAS,EAG7B,MAAMptH,EAAY,eAEZ4/L,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI5/L,CAAS,EAE9B,MAAM6/L,EAAmB7/L,EAAY,WAC/BoB,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIy+L,CAAgB,EAElC,IAAAC,EACJ,GAAGp+L,EAAO,CACEo+L,EAAA,SAAS,cAAc,KAAK,EACtCA,EAAQ,UAAU,IAAID,EAAmB,SAAU,yBAAyB,EACtE,MAAAE,GAAgBr+L,EAAM,WAAW,KAAMxb,GAAcA,EAAU,IAAM,4BAA4B,EACjGmd,GAAUD,GAAc,IAAK,GAAG,EACtC,GAAG28L,GAAe,CAEV,MAAAC,GADY58L,GAAc28L,GAAc,EAAGA,GAAc,CAAC,EACnC,aAAa18L,EAAO,EACzCy8L,EAAA,MAAM,MAAQE,GAAW,MAAQ,KACjCF,EAAA,MAAM,OAASE,GAAW,OAAS,IAC7C,CAEUt8L,GAAA,CACR,MAAAhC,EACA,UAAWo+L,EACX,SAAUz8L,GAAQ,MAClB,UAAWA,GAAQ,OACnB,KAAM,CAAC,EAAG,iBAAkB,KAAM,EAAE,EACrC,EACDjC,EAAQ,OAAO0+L,CAAO,CACxB,CAEA,MAAMG,EAAiBJ,EAAmB,SACpCK,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAID,CAAc,EAE9B,MAAAniJ,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAImiJ,EAAiB,QAAQ,EAEzC,MAAAtiJ,EAAgB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIsiJ,EAAiB,cAAc,EAErD,MAAAE,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIF,EAAiB,WAAW,EAE1CC,EAAA,OAAOpiJ,EAASH,EAAewiJ,CAAO,EAEjC1nM,GAAAqlD,EAASp5D,GAAcL,CAAK,CAAC,EAC7BoU,GAAAklD,EAAej5D,GAAcuwB,CAAW,CAAC,EAEhD,MAAAlZ,EAAY,IAAIjB,GACdqlM,EAAA,OAAOpkM,EAAU,OAAO,EAEhCqF,EAAQ,OAAO8+L,CAAO,EACtBN,EAAO,OAAOx+L,CAAO,EAChB,gBAAW,OAAOw+L,CAAM,EAEvB,MAAAQ,EAAqB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIpgM,EAAY,sBAAsB,EACjDwqD,GAAa41I,EAAoB,EAAI,EAClD,gBAAW,OAAOA,CAAkB,EAEzC,MAAMruJ,EAAe,KAAK,aAEtB,IAAAG,EAAa5C,EAAwD,YAAeA,EAA8D,KAChJ,MAAA+wJ,EAAoB/wJ,EAAwD,oBAAoB,CAAC,EACnG,IACFgxJ,EACAhvJ,EACAivJ,CAAA,EACE,MAAM,QAAQ,IAAI,CACpB,CAAC5E,GAAazpJ,GAAa,KAAK,SAAS,mBAAmB,sBAAsBH,EAAcG,CAAS,EAAE,MAAOh9C,IAAkB,CAC1H,cAAM,wBAAyBA,GAAKg9C,CAAS,CAE9C,CACR,EACDmuJ,GAAoB,KAAK,SAAS,gBAAgB,SAAS,EAC3D3pM,GAAc,CAAC,OAAQu3G,EAAUzjH,GAAgB8kD,EAAwD,YAAY,SAAS,EAAE,EACjI,EAIK,MAAAvzC,EAAU,OAAO,CAAC,OAAQuzC,EAAY,OAAO,WAAW,EAC9D8wJ,EAAmB,OAAO,EACrB,aAAQ,UAAU,OAAO,YAAY,EAEpC,MAAAI,EAAa,CAAC92M,GAAyBE,KACpCH,GAA2BC,GAAQC,EAAUC,GAAYu1M,GAAmB,EAAI,EAGnF,CAAC,QAAAltJ,CAAW,EAAA3C,EACZ3lD,EAAWsoD,EAAQ,SAEnBwuJ,EAAcxuJ,EAAQ,OAAO,WAAa,CAAC0pJ,EAC3C+E,EAAW,CAAC,CAACzuJ,EAAQ,UAErB,MAAAl2C,EAAU,OAAO,CAAC,OAAQuzC,EAAY,OAAO,WAAW,EAC9D,MAAMqxJ,EAAaF,GAAeC,EAAW,MAAMhqM,GAAc,CAAC,OAAQ44C,EAAY,OAAO,WAAW,EAAI,OAC5G8wJ,EAAmB,OAAO,EACrB,aAAQ,UAAU,OAAO,YAAY,EAE1C,MAAMQ,EAAY,IAAM,CAChB,MAAAC,GAAU,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAIC,EAAkB,QAAQ,EAE1C,MAAA/lL,GAAO,SAAS,cAAc,MAAM,EACpCoE,EAAQ,SAAS,cAAc,MAAM,EACnC,OAAA0hL,GAAA,OAAO9lL,GAAMoE,CAAK,EACnB,CAAC,MAAO0hL,GAAS,KAAA9lL,GAAM,MAAAoE,CAAK,GAG/B2hL,EAAkB9gM,EAAY,UAC9Bm8L,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI2E,CAAe,EAC9B,MAAAC,EAAsB5E,IACnBA,GAAO,IAAKriM,IAAU,CACrB,MAAC,OAAApQ,EAAQ,MAAA+sB,EAAS,EAAA3c,GAElBknM,GAASJ,IACfI,GAAO,KAAK,OAAOt8M,GAAc+xB,EAAK,CAAC,EAEjC,MAAAwqL,GAAgBT,EAAW92M,CAAM,EACvC,OAAAs3M,GAAO,MAAM,YAAcC,GAEpBD,GAAO,MACf,EAGGE,EAAiBH,EAAmB9uJ,EAAQ,MAAM,EAExD,IAAIkvJ,EAAgB,IAAc,EAC9BC,EAAiB,EAErB,MAAMC,EAAgB,IAAMC,GAAcH,EAAA,EAAkBC,EACtDG,GAAW,IAAM,CACf,MAAAp0M,GAAUqzM,EAAWa,EAAA,CAAe,EAC1CG,GAAW,MAAM,YAAcr0M,GAC/Bs0M,GAAQ,iBAAiB,CACvB,IAAK,qBACL,KAAM,CAACt0M,EAAO,EACf,GAGGs0M,GAAU,IAAIj9M,GAAK,YAEnBg9M,GAAaZ,IACRY,GAAA,MAAM,UAAU,IAAI,UAAU,EACnC18M,GAAA08M,GAAW,KAAM,yBAAyB,EAChD,MAAMF,GAAcx5J,GAAWmK,EAAQ,OAAO,IAAI,CAAC,CAAC,OAAAvoD,MAAY,CAACA,EAAM,EAAG,CAAC,EAErEg4M,GAAUzvJ,EAAQ,iBAAmB,QAAa,CAAC0pJ,GAAc,CAAC,CAAErsJ,EAA8D,WACxI,GAAGoyJ,GAAQ,CACT,MAAMC,GAAgB3hM,EAAY,QAE5BhW,GAAepB,GAAWe,CAAQ,EAExCw3M,EAAgB,IAAM,CAACS,GAAiB,MAAM,QAAQ,MAAO,EAAE,EAEzD,MAAAC,EAAiBn4M,IAA4B,CACjDA,GAAS,KAAK,IAAI,CAACA,GAAQ,CAACuoD,EAAQ,cAAc,EAC5C,MAAA9kD,GAAUqzM,EAAW92M,GAAQ,EAAI,EAEvCk4M,GAAiB,MAAQz0M,GAER20M,OACjB,MAAMC,GAAQ,KAAK,cAAc,IAAIr4M,EAAM,EACxCq4M,IACKA,GAAA,UAAU,IAAI,QAAQ,EAGrBR,IAAA,EAGLS,GAAYpB,IAClB97M,GAAMk9M,GAAU,KAAMrG,EAAY,aAAe,oBAAoB,EACrE,MAAMiG,GAAmB,IAAIvC,GAAiB,CAAC,WAAY,GAAI,GACzD,CAAC,MAAA3oL,EAAS,EAAAkrL,GAChBlrL,GAAM,UAAU,IAAI,cAAeirL,GAAgB,QAAQ,EACjDK,GAAA,MAAM,OAAOtrL,EAAK,EAExBilL,EAGQqG,GAAA,MAAM,UAAU,IAAI,eAAe,EAFnCA,GAAA,MAAM,MAAM,OAAS,OAKjCA,GAAU,MAAM,iBAAiB,YAAc1xM,IAAM,CAC/CmlB,GAAcnlB,GAAE,OAAuBomB,EAAK,GAC9C2a,GAAgB3a,EAAK,CACvB,CACD,EAEKA,GAAA,iBAAiB,QAAS,IAAM,CACpCmrL,EAAcV,GAAe,EAC9B,EAED,MAAM73M,GAAI,CACYU,GAAa,QAAUA,GAAa,OACxDA,GAAa,cAAgB,IAAM,IAEjCA,GAAa,aAAaV,GAAE,QAAQ,EAC9B04M,GAAA,MAAMh4M,GAAa,YAAc,UAAY,QAAQ,EAAEV,GAAE,KAAK,EAAE,CAAC,EAE5D43M,EAAA,KAAKc,GAAU,KAAK,EAG/B,IAAAF,GACJ,GAAInG,EAiDFkG,EAAevyJ,EAA8D,UAAU,MAjD1E,CACP,MAAA2yJ,GAAS,SAAS,cAAc,KAAK,EACpCA,GAAA,UAAU,IAAIN,EAAa,EAElC,MAAMO,GAAeP,GAAgB,OAC/BQ,GAAalwJ,EAAQ,sBAAsB,IAAKmwJ,IAAc,CAClE,MAAMluL,GAASqJ,GAAO2kL,GAAc,CAAC,SAAU,GAAK,EAC7C,OAAAhuL,GAAA,YAAcssL,EAAW4B,EAAS,EAEzC,KAAK,cAAc,IAAI,CAACA,GAAWluL,EAAM,EAClCA,EAAA,CACR,EAED4tL,GAAiB,IAAM,CACf,MAAAO,GAAYJ,GAAO,cAAc,SAAS,EAC7CI,IACSA,GAAA,UAAU,OAAO,QAAQ,CACrC,EAGezhM,EAAAqhM,GAAS3xM,IAAM,CAC9B,MAAMyxM,GAAQz4L,EAAgBhZ,GAAE,OAAQ4xM,EAAY,EACpD,GAAG,CAACH,GACF,OAGF,IAAIK,GAAY,EAChB,GAAGL,GAAM,UAAU,SAAS,QAAQ,EAC5BA,GAAA,UAAU,OAAO,QAAQ,MAC1B,CACUD,KACTC,GAAA,UAAU,IAAI,QAAQ,EAE5B,SAAU,CAACr4M,GAAQmM,EAAE,IAAK,KAAK,cAC7B,GAAGA,KAAOksM,GAAO,CACHK,GAAA14M,GACZ,KACF,CAEJ,CAEAm4M,EAAcO,EAAS,EACxB,EAEDP,EAAc,CAAC,EAERI,GAAA,OAAO,GAAGE,EAAU,EAC3BjB,EAAe,KAAKe,EAAM,EAG5B,MAESV,KAGIL,EAAA,KAAKM,GAAW,KAAK,EAE7BrF,EAAA,OAAO,GAAG+E,CAAc,EAC/BtB,EAAO,OAAOzD,CAAM,EAId,MAAAmG,EAAa,MAAMjkL,GAAUpR,KAAkB,CAC7C,MAAA+iC,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAa,EAC/B,MAAMrwC,GAA0BqwC,EAAKD,GAAwB9iC,EAAI,CAAC,EAClE,IAAIpnB,GAAYw4B,GAAI,MAChBx4B,GAKFuV,GAAevV,GAAWmqD,CAAG,GAJjBnqD,GAAAw4B,GAAI,YAAY,OAAO,EACzBx4B,GAAA,UAAU,IAAI,uBAAuB,EAC/CA,GAAU,OAAOmqD,CAAG,GAKlB3xB,GAAA,UAAU,UAAU,OAAO,eAAe,GAG1CyjF,GAAah+G,IAAkD,CAChEA,GAAQ,eACTA,GAAQ,gBAAkBA,GAAQ,cAGpCA,GAAQ,OAAS,GACX,MAAAu6B,GAAM,IAAI5B,GAAI34B,EAAO,EAC3B,OAAAu6B,GAAI,UAAU,UAAU,IAAIre,EAAY,MAAM,EAE3Clc,GAAQ,cACLu6B,GAAA,SAAS,UAAU,IAAI,MAAM,EAG5BA,EAAA,EAGHkkL,GAAc,CAAClkL,GAAUyuE,KAAwB,CAErD,GADAzuE,GAAI,MAAM,YAAcyuE,GACrB,CAACA,GAAa,CACf,MAAMx8F,EAAI9L,GAAK,QAAQ,IAAI65B,GAAI,SAAS,iBAAgC,EACxEA,GAAI,MAAM,OAAO/1B,EAAKgI,EAAE,GAAG,CAAC,CAC9B,CAEA+tB,GAAI,SAAS,UAAU,OAAO,OAAQ,CAACyuE,EAAW,GAG9C01G,GAAmBh6J,IAAmC,CACtD,IAAAG,GACArlD,EACA2pB,GACD,UAAWu7B,IACZG,GAAQH,GAAK,MAAM,MAAM,GAAG,EAAE,QAC9BllD,EAAMklD,GAAK,MACXv7B,GAAOu7B,GAAK,OAEJG,GAAAE,GAAuBL,GAAK,UAAU,EAC9CllD,EAAMqlD,GAAQ,KAAOH,GAAK,WAAW,MAAM,GAAG,EAAE,OAG9Bi6J,GAAU,UAAU,cAAc,IAAI3lJ,GAAO,cAAc,CAAC,EAAE,GACrE,OAAO,EACpBwlJ,EAAWG,GAAWx1L,IAAQ07B,GAAM,YAAa,GACjD45J,GAAYE,GAAWn/M,CAAG,GAGtBo/M,GAAgB,SAAW,CAClB7uL,GAAA,YACXw7B,GACAC,EACA,MAAM,KAAK,SAAS,gBAAgB,QAAQ,EAC5CqzJ,IACA,iBAAiB,SAAU,CAAC,CAAC,MAAA5vG,GAAO,KAAAvqD,MAAU,CAC9Co6J,GAAgB7vG,GAAO4vG,GAAsBn6J,GAE7Cg6J,GAAgBh6J,EAAI,EACrB,GAGH,IAAIm6J,GAA+CC,GACnD,MAAMH,GAAY3gG,GAAU,CAC1B,aAAc,wBACd,UAAW65F,EAAY,OAAY+G,GACnC,KAAM,eACP,EAEDD,GAAU,UAAU,UAAU,IAAIziM,EAAY,aAAa,EAExDqgM,EACDmC,GAAgBnC,CAAgB,EACvB/wJ,EAA8D,mBACvEkzJ,GAAgB,CAAC,MAAQlzJ,EAA8D,iBAAkB,GAG3G,MAAMuzJ,GAAc/gG,GAAU,CAC5B,MAAOy+F,EACP,gBAAiB,0BAClB,EAEKuC,GAAiBnvL,GAAU,CAC/B,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,GACN,OAAQs6F,EAAUzjH,GAAgB8kD,EAAwD,YAAY,SAAS,EAChH,EACDuzJ,GAAY,YAAY,OAAO,EAAE,OAAOC,GAAe,IAAI,EAEvD,IAAAC,GAAyBC,GAAsBC,GAAuBC,GAAuBC,GAC7FC,GAAoCC,GAAiGC,GACzI,MAAMC,GAAmBtxJ,EAAQ,OAAO,2BAA8Be,IAA6C,CACjH,GAAG,CAACA,GAAiB,CACDmwJ,GAAA,SAAS,UAAU,IAAI,MAAM,EAC/C/nM,GAAe+nM,GAAkB,MAAO76M,EAAK,wBAAwB,CAAC,EACtE,MACF,CAEA,MAAMk7M,GAAcxwJ,GAAgB,iBACpCuvJ,GAAYQ,GAAoB,CAC9BS,GAAY,KACZA,GAAY,aACZA,GAAY,cACZ,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC,EAEVL,GAAA,UAAU,UAAU,OAAO,OAAQ,CAAC7C,GAAmB,kBAAoB,CAAC3E,CAAS,CACrG,SAEE8H,GAAmB/kK,IAA+B,CACtD6kK,IAAoBA,KAAmB7kK,EAAI,EACxBskK,IAAAT,GAAYS,GAAiBtkK,GAAK,IAAI,EACrCukK,IAAAV,GAAYU,GAAkBvkK,GAAK,KAAK,EACxCwkK,IAAAX,GAAYW,GAAkBxkK,GAAK,OAAU,IAAM2R,GAAkB3R,GAAK,KAAK,EAAE,SAAU,GAkB9G,GAfCi9J,IACF0H,GAA0BrxJ,IAAU,CACrBn+B,GAAA,YACXi+B,GACAxC,EACAyC,EACAC,IACA,iBAAiB,SAAU,CAAC,CAAC,gBAAAgB,GAAiB,cAAAD,KAAmB,CAC7CutJ,EAAAvtJ,EACpBb,EAAa5C,EAAwD,WAAa0D,GAClFywJ,GAAgBzwJ,EAAe,EAChC,IAIFf,EAAQ,OAAO,2BAA4B,CACtC,MAAAyxJ,GAAqBtwJ,IAAoC,CAC7D,MAAMomE,GAAc,IAAI1wE,GAAY,KAAK,WAAY,OAAW,EAAI,EAMpE,GALA0wE,GAAY,KAAK,EACdmqF,IACDA,GAA2B,QAASllM,IAASA,GAAK,OAAQ,GAGzD,CAAC20C,GAAgB,CACDguJ,EAAA,EAERG,KACT/nF,GAAY,QAAQ,EACpB,KAAK,gBAAgB,EACrB,MACF,CAEqBpmE,MACTmvJ,GAAAY,GAAmB/vJ,GAAe,KAAK,EAElCguJ,EAAAt5J,GAAWsL,GAAe,OAAO,IAAI,CAAC,CAAC,OAAA1pD,MAAY,CAACA,EAAM,EAAG,CAAC,EAClDi6M,GAAA5C,EAAmB3tJ,GAAe,MAAM,EACrE,IAAIu6E,GAAI6zE,GAAW,MAChBE,KACD/zE,GAAIA,GAAE,uBACFguE,IACFhuE,GAAIA,GAAE,yBAIiBg2E,GAAA,QAASprM,IAAYo1H,GAAE,cAAc,aAAap1H,GAASo1H,EAAC,CAAC,EAE/E4zE,KACT/nF,GAAY,QAAQ,EACpB,KAAK,gBAAgB,GAGvBupF,GAAqBjhG,GAAU,CAC7B,KAAM,WACN,aAAc,yBACd,UAAW,CAAC65F,GAAa0H,GAAuB,KAAK,KAAM,MAAS,EACrE,EAEG,IAAAM,GACJR,GAAoBrhG,GAAU,CAC5B,KAAM,WACN,aAAc,gCACd,UAAW,CAAC65F,IAAc2H,GAAwB,IAAM,CACzCzvL,GAAA,YACXs/B,GACA7D,EACAgxJ,EACA8C,EAAA,EACA,iBAAiB,SAAWhwJ,IAAmB,CAC/CswJ,GAAkBtwJ,EAAc,EACjC,GACH,CACD,EAEiB+vJ,GAAA,UAAU,UAAU,IAAI,MAAM,EAEhD,MAAM/vJ,EAAkB9D,EAA8D,SACnF8D,GACDswJ,GAAkBtwJ,CAAc,CAEpC,CAEGnB,EAAQ,OAAO,iBAChB+wJ,GAAkBlhG,GAAU,CAC1B,KAAM,aACN,aAAc,sBACd,UAAW,CAAC65F,GAAa0H,GAAuB,KAAK,KAAM,MAAM,EAClE,GAGApxJ,EAAQ,OAAO,kBAChBgxJ,GAAmBnhG,GAAU,CAC3B,KAAM,UACN,aAAc,kCACd,UAAW,CAAC65F,GAAa0H,GAAuB,KAAK,KAAM,OAAO,EACnE,GAGApxJ,EAAQ,OAAO,kBAChBixJ,GAAmBphG,GAAU,CAC3B,KAAM,QACN,aAAc,6BACd,UAAW,CAAC65F,GAAa0H,GAAuB,KAAK,KAAM,OAAO,EACnE,GAGAnxJ,GACDuxJ,GAAgBvxJ,CAAS,EAG3B,MAAMn0B,GAAO,CACX0kL,GACAI,GACAE,GACAI,GACAH,GACAC,GACAC,EAAA,EACA,OAAO,OAAO,EAEVU,IAA4BnD,GAAeC,IAAa,IAAIzsL,GAAc,CAC9E,KAAMwsL,EAAc,4BAA8B,wBAClD,SAAU,CAACxzM,GAAaglD,EAAQ,SAAS,EAAG0uJ,CAAU,EACvD,EAEKkD,GAAiBD,IAA4B9hG,GAAU,CAC3D,cAAe8hG,EAAA,CAChB,EAEKE,GAAoBF,GAA2B,CAAC,SAAS,cAAc,IAAI,EAAGC,GAAe,SAAS,EAAI,GAE3G,gBAAW,OAAO,GAAG,CACxB,SAAS,cAAc,IAAI,EAC3B,GAAG9lL,GAAK,IAAKM,IAAQA,GAAI,SAAS,EAClC,GAAGylL,EAAA,EACH,OAAO,OAAO,CAAC,EAGjB,IAAInE,GAAoDoE,GACxD,MAAM3rL,GAAU,IAAM,CACd,MAAA4rL,GAAc/xJ,EAAQ,OAAO,gBAAkB,CAACC,GAAW,KAAO,OAAUD,EAAQ,OAAO,iBAAmB,CAACC,GAAW,MAAQ,QAAWD,EAAQ,OAAO,iBAAmB,CAACC,GAAW,MAAQ,QAAU,OAChN,GAAAD,EAAQ,OAAO,2BAChB,GAAIquJ,GAGM,IAAC8C,IAAsB9C,EAAkB,iBAAkB,CAC7CgD,KACtB,MACF,MANuB,CACED,KACvB,MACQ,SAIFW,GAAa,CACrBX,GAAuBW,EAAW,EAClC,MACF,CAEG,IAACrB,IAAuB,CAACoB,GAAgB,CAC1C,GAAG,CAAC1D,EAAkB,CACNqC,KACd,MACF,CAEQ,gBAAQpxJ,GAAiB,KAAK,SAAS,gBAAgB,UAAU,EAAE,KAAM2yJ,IAAmB,CACrFpwL,GAAA,YACXw9B,GACAgvJ,EAAiB,MACjB4D,EAAA,EACA,iBAAiB,SAAWtyJ,GAAgB,CAC5BL,EAAA,OACCyyJ,GAAApyJ,EACjBtX,GAAmB4W,EAAS,EAG5B,MAAMnqB,GAAO6qB,EAAY,YAAchzB,GAAM,EAAI,EAAI,EACrD,WAAW,IAAM,CACZolL,KAAmBpyJ,IACHoyJ,GAAA,OACnB,EACCj9K,GAAO,GAAI,EACf,EACF,EAED,MACF,CAEA,OAAO,QAAQ,UAAU,KAAK,SAAW,CACvC,MAAMo9K,GAAuCH,GAAiB,CAC5D,EAAG,+BACH,GAAI1D,EAAiB,GACrB,aAAc0D,GAAe,cAC3B,CACF,EAAG,0BACH,KAAM,CACJ,EAAG,WACH,KAAM,KAAK,UAAUnB,GAAc,MAAQA,GAAgB,CAAC,KAAMA,GAAc,KAAM,GAAIA,GAAc,GAAG,CAC7G,EACA,OAAQ,CACN,KAAMD,GAAoB,MAAQ,MACpC,GAGE,IACF,KAAK,OAAS,UACd,MAAMwB,EAAgB,MAAM,KAAK,SAAS,mBAAmB,gBAC3DpyJ,EACCzC,EAAoC,QACrCgxJ,GAAmB,GACnB8C,IAAoB,GACpBc,GACA/C,EAAc,GAGbgD,EAAc,IAAM,yBACTzvD,KAEZirD,GAA2B9rL,GAAa,YACtCw6B,GACA81J,EAAc,IACd,CAACpvF,GAAc,gBAEQ4qF,GAAA,iBAAiB,SAAU,IAAM,CAC7BA,GAAA,OAEfjrD,GAAA,CACb,EACD,MAAM,IAAI,QAAc,CAACjsI,GAASwkB,KAAW,CAClB0yK,GAAA,iBAAiB,QAAS,IAAM,CAEvD,GAD2BA,GAAA,OACxBD,EACOj3L,SACH,CACC,MAAAvT,GAAM,IAAI,MAAM,sBAAsB,EAC3CA,GAAiB,QAAU,GAC5B+3B,GAAO/3B,EAAG,EACV,KAAK,OAAS,QAChB,EACD,EACF,SAEGA,EAAK,CACP,MAAAA,EAAiB,OAAS,2BACnBqhB,GAAA,CAAC,YAAa,gBAAgB,EACtCrhB,EAAiB,QAAU,IACnBA,EAAiB,OAAS,wBACnCo8C,EAAgByyJ,GAAiB,OACjC1pK,GAAmB4W,EAAS,EAC3B/7C,EAAiB,QAAU,IAE5B,KAAK,OAAS,SAGVA,CACR,EACD,GAGGmf,GAAW,IAAM,CACrB48B,GAAU,SAAW,CAAC,EAAE2yJ,IAA4B,CAACA,GAAyB,UAG5E,IAAA3yJ,GACD0qJ,EACD1qJ,GAAYC,GAAc,CACxB,QAAS,IAAM,KAAK,KAAK,EACzB,IAAK,OACN,EAEDD,GAAYC,GAAc,CACxB,QAAA94B,GACA,OAAQqpL,EAAA,CACT,EAGMptL,KACNuvL,IACwBA,GAAA,MAAM,iBAAiB,SAAUvvL,EAAQ,EAGpE,KAAK,KAAK,OAAO,KAAK,kBAAoB48B,EAAS,EAEnD,KAAK,gBAAgB,CACvB,CAEA,aAAoB,OAAOntD,EAAwD,CAC7E,IAAA4L,EACD,CAAC5L,EAAQ,aAAe,CAACA,EAAQ,aAAe,CAACA,EAAQ,cACvDA,EAAQ,UAAW4L,EAAU1L,EAAU,SAAS,mBAAmB,kBAAkBF,EAAQ,QAAQ,OAASA,EAAQ,QAAQ,MAA2C,gBAAmBA,EAAQ,aAAkD,MAAM,EAC1P4L,EAAU1L,EAAU,SAAS,mBAAmB,eAAeF,EAAQ,YAAY,EAE9E4L,EAAA,QAAQ,QAAQ5L,EAAQ,WAAW,EAG/C,MAAMwrD,EAAc,MAAM5/C,EACpB8lG,EAAc1xG,EAAQ,eAC1BA,EAAQ,aACRA,EAAQ,YACRwrD,EAAY,IAAM,6BAClBA,EAAY,IAAM,+BAAiCosJ,GAAgBz/F,GAE/D1rE,EAAQ1c,GAAa,YAAY2hF,EAAoB1xG,CAAO,EAClE,OAAAysC,EAAM,eAAe+e,CAAkB,EAEhC/e,CACT,CACF,CC78Be,SAAShT,GAAO3pB,EAU1B,GAAiB,CACpB,OAAAkT,EACGmoD,GAAO,KACNC,WAAS,QAAEt7D,EAAMk+F,OAAS,IAAOl+F,EAAMwwM,MAAQ,MAAQ,QAAS,qBACzDxwM,EAAMmT,KAAK,MAClB27D,UAAQ,QAAE9uE,EAAM8uE,QAAQ,MACxBtqD,SAAO,QAAExkB,EAAMwkB,OAAO,MAAAvF,UAAA,OAAAhM,GAErBA,MAAAjT,QAAMqZ,IAAI,KAAAnG,EAAKosE,GAAO,KAACjmE,MAAI,QAAErZ,EAAMqZ,IAAI,sBAAwB,GAAApG,EAC/DA,YAAAjT,EAAMhJ,IAAI,IAAGtC,EAAKsL,EAAMhJ,KAAMgJ,EAAMw1F,QAAQ,EAAIx1F,EAAMif,QAAQ,KAGrE,+/JCmBO,SAASwxL,GAAgBzwM,EAAgF,CAC9G,kBAAAqS,EAAAC,GAAA,EAAAK,EAAAN,EAAAS,WAAAC,SAAAV,GAAA,WAAAW,EAAAC,EAEKjT,QAAMyS,MAAM,QAAZO,SAAAJ,IAA8nC,KAAAD,CAAA,EAAAJ,GAAA6M,GAAA,OAAAC,EADrnC3U,GAAW,kBAAmB1K,EAAMyS,QAAU,wBAAwB,EAAC6M,EAAmGtf,EAAMuW,MAAK8I,WAAAD,EAAAC,KAAA7M,GAAAH,EAAA+M,UAAAC,KAAA,EAAAD,EAAAE,KAAA2hE,GAAA5uE,EAAAiN,EAAAF,EAAAE,IAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA/E,CAAA,IAwBrM,CAEO,SAAS6+F,GAAkBlxG,EAAsC,CACtE,IAAI6H,EAAQ,EACT7H,EAAMilG,OAAS,KAAMp9F,EAAQ,EACxB7H,EAAMilG,OAAS,IAAMp9F,EAAQ,EAC7B7H,EAAMilG,OAAS,IAAKp9F,EAAQ,EAC5B7H,EAAMilG,OAAS,IAAKp9F,EAAQ,EAC5B7H,EAAMilG,OAAS,KAAIp9F,EAAQ,GACnC,IAAI6oM,EACJ,MAAMh6K,EAAI12B,EAAM1O,MAAQ0O,EAAM1O,OAAS,GAAK,EAAI,GAChD,GAAGuW,EAAQ,EAAG,CACZ6oM,EAAgB,GAChB,QAAQ78M,EAAI,EAAGA,EAAIgU,EAAO,EAAEhU,EAAG68M,EAAcpyL,KAAIpL,EAC9Cu9L,GAAe,CACdh+L,OAAQ5e,IAAOgU,EAAQ,EAAE,IACzB0O,OAAK,OAAE,CACL,eAAiBV,KAAK22B,IAAI34C,EAAG,CAAC,EAAI,CAAC6iC,EAAK,KACzC,GAEJ,CACH,MACEg6K,EAAax9L,EAAIu9L,GAAkB,IAGrCC,UAAa,WAAA1vH,EAAA7hE,KAAApM,SAAAiuE,EAQR0vH,CAAa,EAAAn+L,GAAA6M,GAAA,OAAAG,EAJF,GAAEvf,EAAM1O,MAAQuW,EAAQ,GAAK,CAAE,KAAGg0I,EAClC77I,EAAM1O,KAAO,KAAIiuB,WAAAH,EAAAG,QAAAH,EAAAG,SAAA,KAAAyhE,EAAAzqE,MAAAkC,YAAA8G,SAAA,EAAAyhE,EAAAzqE,MAAAkrJ,eAAA,UAAA5lB,IAAAz8H,EAAAy8H,QAAAz8H,EAAAy8H,SAAA,KAAA76D,EAAAzqE,MAAAkC,YAAAojI,UAAA,EAAA76D,EAAAzqE,MAAAkrJ,eAAA,WAAAriJ,CAAA,GAAAG,KAAAnI,OAAAykI,KAAAzkI,MAAA,GAAA4pE,MAM1B0vH,CACT,CAEO,SAASC,IAAY,CAC1B,OAAOj+L,GAAgB,CACzB,CAEO,SAASs2L,IAAe,CAC7B,MAAM/jG,EAAQsS,KACd,kBAAA93F,EAAAC,GAAA,EAAAo0B,EAAAr0B,EAAA3M,WAAAqpF,EAAAroD,EAAA05B,YAAAz6D,SAAA+gC,EAAA,IAEsCp/C,EAAK,cAAc,CAAC,EAAAqe,EAAAopF,EAAAjpF,EACjBy9L,GAAS,UAAA59L,EAAAopF,EAAA,IAAI,IAAM8I,EAAK,GAAM,GAAE,MAAAxlF,CAAA,IAG3E,CAEO,SAASm2H,GAAY51I,EAAsB,CAChD,kBAAAg9F,EAAAZ,KAAArpF,SAAAiqF,EAAA9pF,EAEKy9L,GAAS,UAAA59L,EAAAiqF,EACTh9F,MAAMilG,MAAK,MAAA1yF,GAAA,IAAAiN,GAAAw9E,EAFFtyF,GAAW,yBAA0B,8BAA8B,CAAC,GAAAsyF,CAAA,IAKpF,CAEO,SAAS6tG,GAAY7qM,EAA4D,CACtF,kBAAAqnG,EAAAjL,KAAArpF,SAAAs0F,EAEM,OAAE,CAACrnG,EAAMilG,MAAQ,GAAK,CAACjlG,EAAMgrM,OAAS,IAAM,EAAG,GAAEhrM,EAAMilG,KAAM,GAAC,MAAAlyF,EAAAs0F,EAAAn0F,EAC/Dy9L,GAAS,UAAA59L,EAAAs0F,GAAA,WAAAzoF,EAAA3L,EACTjT,QAAM8qM,QAAQ,YAAdlsL,EAAA,eAAA0oF,EAAArK,KAAAlqF,SAAAu0F,EAAA,IAA+D5yG,EAAK,eAAe,CAAC,EAAA4yG,KAAQ,WAAA/0F,OAAAiN,GAAA6nF,EAHnF38F,GAAW,yBAA0B,CAAC1K,EAAMilG,MAAQ,EAAI,QAAU,QAAQ,CAAC,GAAAoC,CAAA,IAM3F,CAEO,SAASupG,GAAyBroG,EAA+B,CACtE,GAAGA,EAAYshG,oBACb,OAAOn1M,EAAK,0BAA0B,EAGxC,GAAG6zG,EAAYvrF,OAAOinF,KACpB,OAAOvvG,EAAK,mBAAmB,EAUjC,MAAMyR,EAP0D,CAC9D0qM,6BAA8B,qBAC9BC,+BAAgC,gBAChCC,6BAA8B,gBAC9BC,+BAAgC,iBAGlBzoG,EAAYz4G,KAAKgV,CAAC,GAAK,wBACvC,OAAOpQ,EAAKyR,CAAG,CACjB,CAEO,SAASqjM,GAAkBhnK,EAAsC,CACtE,IAAI1hC,EAAU,GACd,MAAMmwM,EAAwB7gN,EAAUG,SAAS2gN,yBAAyBC,kBAAiB,EACrF5jL,EAASiY,GAAe,SAAW,CACvC,GAAG1kC,EAAS,OACZA,EAAU,GACV,KAAM,CAACuzB,QAAS+8K,CAAO,EAAG,MAAMH,EAChCnwM,EAAU,GACVmf,GAAainF,YAAYx+D,GAAe,CACtC7nB,SAAW1wB,GAAW,CACpBqyC,EAAK,IAAM,CACTjO,GAAaspE,aAAa,CAAC1tG,QAAM,CAAC,CACpC,CAAC,CACF,EACDywB,SAAU,CAAC,QAAQ,EACnB4vF,cAAe,UACN,CACLt+G,OAAQk/M,EAAOz4L,IAAKukB,GAAUA,EAAMo5D,SAAS,EAAK,CAAC,EACnD1uD,MAAO,KAGXs2E,kBAAmB,oBACrB,CAAC,CACH,CAAC,EACD3wF,SAAOyY,OAAOtxC,EAAK,2BAA2B,CAAC,EACxC64B,CACT,CAEO,eAAe29K,GAAiC,CACrD3iG,cACAz2G,aACAR,OACA8zH,YACA+lF,kBACAt8G,aACAm5G,eACAl6L,OAUF,EAAG,CACD,KAAM,CAACrd,EAAO8R,CAAK,EAAI,MAAMqS,QAAQya,IAAI,CAElC24K,EACMllM,GAAc,CAAC3S,OAAQqG,GAAUwxM,EAAal4M,IAAI,CAAC,CAAC,EAG1D++F,EACMC,GAAoBD,EAAY/8F,CAAU,EAGhDszH,GAAa7c,GAAakhG,eACpB3mM,GAAc,CAAC3S,OAAQg7M,GAAmB30M,GAAW+xG,EAAYz4G,KAAmDA,IAAI,CAAC,CAAC,EAGhI,CAACy4G,GAAeA,EAAYz4G,KAAKgV,IAAM,uBACjChC,GAAc,CACnB3S,OAAQo4G,EAAc/xG,GAAW+xG,EAAYz4G,KAAmDA,IAAI,EAAIq7M,CAC1G,CAAC,EAGIyF,GAAyBroG,CAAW,GAE5C,SAAW,CACV,MAAM8oG,EAAa,MAAMp/M,EAAwB6b,IAAoD,CACnG,MAAMzb,EAA+B,GACrCyd,GAAU,CACR7d,YACA6b,QACAgB,SAAUxd,EACVyd,UAAWzd,EACXQ,aACAO,eACA4d,iBAAkB,GAClB3e,KAAMwc,EAAMhJ,IAAM,cAAgB,CAACA,EAAG,iBAAkB0P,KAAM,EAAE,EAAI4C,MACtE,CAAC,EAED,MAAMxC,QAAQya,IAAIh9B,CAAY,GAGhC,GAAGyb,EAAO,CACR,MAAM7b,EAAYyQ,SAAS6Y,cAAc,KAAK,EAC9CtpB,SAAUokB,UAAUS,IAAI,sBAAsB,EAC9C,MAAMu6L,EAAWp/M,EAAW6b,CAAK,EAC1B7b,CACT,CAEA,GAAG48F,EAED,OADe,MAAMI,GAAqBJ,EAAY/8F,EAAY,EAAE,GACtD+Y,KAGhB,GAAGu6G,GAAa7c,GAAakhG,eAAgB,CAC3C,MAAM9zK,EAAQyvF,GAAWqkF,gBAAkBlhG,EAAYkhG,eACvD,IAAIlnM,EAEJ,GAAG6iH,EAAW,CACZ,MAAMjiH,EAAgBiiH,EAAUqkF,eAAe,CAAC,EAChDlnM,EAAQy/C,GAAqC7+C,CAAa,CAC5D,KAAO,CACL,MAAMA,EAAgBolG,EAAYkhG,eAAe,CAAC,EAClDlnM,EAASY,EAAiD2K,OACvD3K,EAAoDT,QACzD,CAEA,MAAMzQ,EAAYyQ,SAAS6Y,cAAc,KAAK,EAG9C,GAFAtpB,EAAUokB,UAAUS,IAAI,gCAAiC,eAAe,EAErEsuG,EAAW,CACZ,MAAMksF,EAAmB,MAAM7oH,GAAiB,CAC9ClmF,QACAxQ,eAAgB,OAChBD,aACA0kB,MAAOllB,EACPmlB,OAAQnlB,CACV,CAAC,EACDW,EAAU+zC,OAAOsrK,CAAgB,CACnC,MACE,MAAMD,EAAWp/M,EAAWsQ,CAAK,EAGnC,MAAM5S,EAASgmC,EAAMhmC,OACrB,GAAGA,EAAS,EAAG,CACb,MAAM0rL,EAAU34K,SAAS6Y,cAAc,MAAM,EAC7C8/J,EAAQhlK,UAAUS,IAAI,uCAAuC,EAC7DukK,EAAQniF,YAAc,GAAKvpG,EAC3BsC,EAAU+zC,OAAOq1I,CAAO,CAC1B,CAEA,OAAOppL,CACT,CAEA,GAAGs2G,GAAaz6F,MAAO,CACrB,MAAM7b,EAAYyQ,SAAS6Y,cAAc,KAAK,EAC9CtpB,SAAUokB,UAAUS,IAAI,gCAAiC,eAAe,EACxE,MAAMu6L,EAAWp/M,EAAWs2G,GAAaz6F,KAAK,EACvC7b,CACT,CAEA,IAAI9B,EASJ,GARG63M,EACD73M,EAASqG,GAAUwxM,EAAal4M,IAAI,EAC5By4G,GAAeA,EAAYz4G,KAAKgV,IAAM,uBAC9C3U,EAASqG,GAAU+xG,EAAYz4G,KAAKA,IAAI,EAChCq7M,IACRh7M,EAASg7M,GAGRh7M,EAAQ,CACT,MAAM0jB,EAASkM,GAAU,CAAC5vB,SAAQmB,OAAMQ,YAAU,CAAC,EACnD,aAAM+hB,EAAOsG,kBACNtG,EAAOhJ,IAChB,CAEA,MAAM8P,EAAMjY,SAAS6Y,cAAc,KAAK,EACxCZ,SAAItE,UAAUS,IAAI,+BAA+B,EACjD6D,EAAIqrB,OAAO50C,GAAK,MAAM,CAAC,EAChBupB,CACR,IAAG,CACL,EAED,MAAO,CAAClqB,QAAO8R,QACjB,CAEe,MAAMs2G,WAAmB54F,EAAa,CAUnD2hF,YAAY1xG,EAOR,GAAI,CACN,MAAM,cAAe,CACnB8xG,SAAU,GACVC,gBAAiB,GACjBE,eAAgB,GAChBniB,KAAM,GACNvvF,MAAO,gBACP0kD,WAAY,EACd,CAAC,EAOKo8J,4BAAoB,MAAMhpG,GAAkC,CAClE,MAAMz2G,EAAa,KAAKsoB,iBAAiBxG,IAAG,EACtC,CAACnjB,QAAO8R,OAAM,EAAG,MAAM2oM,GAAiC,CAC5D3iG,cACAz2G,aACAR,KAAM,EACR,CAAC,EAED,OAAO4L,GAAY2B,GAAY,CAC7B/M,EAAW6qB,UAAU9d,CAAO,EAE5B,MAAMw+H,EAAS90B,EAAYkhG,eAAiB/0M,EAAK,mBAAmB,EAAIjE,EACxE,IAAIm5B,EACD2+E,EAAYkhG,eACb7/K,EAAWn5B,EACH83G,EAAYlnF,YACpBuI,EAAW94B,GAAcy3G,EAAYlnF,WAAW,EACxCknF,EAAYvrF,OAAOqyB,SAC3BzlB,EAAWl1B,EAAK,oBAAoB,EAC5B6zG,EAAYE,iBACpB7+E,EAAWl1B,EAAK,4BAA4B,EACpC,CAAC6zG,EAAYtD,MAAQ,EAC7Br7E,EAAW2+E,EAAYvrF,OAAOinF,KAAOvvG,EAAK,mBAAmB,EAAIA,EAAK,aAAa,EAC3E6zG,EAAYshG,sBACpBjgL,EAAWl1B,EAAK,0BAA0B,GAG5C,MAAMq0B,EAAWkhC,GAAmBs+C,EAAYxlG,IAAI,EAEpD,IAAIyuM,EACDjpG,EAAYvrF,OAAO+tL,OAAQyG,EAAiB98M,EAAK,eAAe,EAC3D6zG,EAAYvrF,OAAOy0L,OAAQD,EAAiB98M,EAAK,aAAa,EAC9D6zG,EAAYvrF,OAAOylE,UAAS+uH,EAAiB98M,EAAK,cAAc,GAExE,IAAIzC,EACJihB,SACG8W,GAAM,CAAAupB,IAAAgpB,EAAA,OAAA58C,EACA1tB,EAAS,OAAA0tB,gBAAA48C,CAAA,EAATtqE,EAASsqE,CAAA,MACd9rE,OAAK,mBAAA03G,EAAAoJ,KAAAx+F,SAAAo1F,EAAMk1B,CAAM,EAAAl1B,CAAA,MACjBv+E,SAAUA,EACVb,SAAUyoL,EAAiB,CAACzoL,EAAU,MAAOyoL,CAAc,EAAIzoL,EAC/DxmB,MAAOA,EACPioG,UAAS,aACT/7E,UAAWA,IAAM,CACf45E,GAAahuF,OAAO,CAClBkuF,aACF,CAAC,CACF,MACDr9D,cAAY,QAAAh4B,EAAG23L,GAAW,KAAC5lG,OAAK,QAAEsD,EAAYtD,KAAK,OAIhDhzG,CACT,CAAC,IAGKy/M,6BAAqB,MAAM1J,GAAoC,CACrE,MAAMl2M,EAAa,KAAKsoB,iBAAiBxG,IAAG,EAEtCzjB,EAASqG,GAAUwxM,EAAal4M,IAAI,EACpCW,EAAQ,MAAMqS,GAAc,CAAC3S,QAAM,CAAC,EAC1CM,EAAM4lB,UAAUS,IAAI,WAAW,EAC/B,MAAMjD,EAASjW,GAAQ,IAAMmiB,GAAU,CAAC5vB,SAAQmB,KAAM,GAAIQ,YAAW,EAAC,EACtE,MAAM+hB,EAAOsG,kBAEb,MAAMw3L,EAAc,CAAC,CAAC3J,EAAahrL,OAAOkrL,SACpC1nF,EAAYz1F,GAAM,EAAI,EAAIi9K,EAAar1F,WAE7C,OAAOz1G,GAAY2B,GAAY,OAAAw5F,EAAA,KAC7BvmG,EAAW6qB,UAAU9d,CAAO,EAE5B,IAAI5M,EACJihB,SACG8W,GAAM,CAAAupB,IAAAgpB,EAAA,OAAAF,EACApqE,EAAS,OAAAoqE,gBAAAE,CAAA,EAATtqE,EAASsqE,CAAA,EACd9rE,MAAOA,EAAK,IACZ64B,YAAU,OAAE,CAACqoL,GAAWz+L,EAAM0iI,GAAW,KAAC3wC,OAAK,QAAE+iG,EAAaS,QAAQ3yM,MAAM,EAAK,OACjFizB,UAAQ,QAAEr0B,EACR8rH,EAAY,8BAAgCmxF,EAC1C,8BACA,6BACF,CAAC1nJ,GAAmB+9I,EAAar1F,WAAYv7F,OAAW,EAAI,CAAC,CAC/D,CAAC,MACD4R,eAAa,OAAE,CAAC2oL,GAAej9M,EAAK,8BAA8B,CAAC,MACnEw2C,cAAY,QAAEymK,IAAW,WAAAvpG,EAAAyJ,KAAA9+F,SAAAq1F,EAAA,IAAiD1zG,EAAK,+BAA+B,CAAC,EAAA0zG,KAAS,MACxH7lG,OAAK,QAAEsR,EAAOhJ,IAAI,EAClB2/F,UAAS,aACT/7E,UAAW,SAAW,EACN,MAAM45E,GAAahuF,OAAO,CACtC2tL,eACA1/F,cAAe,EACjB,CAAC,GAEKr0F,iBAAiB,SAAW/hB,GAAW,CACxCA,IAAW,QACZmmG,EAAK71D,KAAI,CAEb,CAAC,CACH,CAAC,GAIEvwC,CACT,CAAC,IA5GDkV,GAAW,KAAMjX,CAAO,EAExB,KAAKoyG,UAAS,CAChB,CA4GQxK,WACNjhF,EACA1O,EACA0L,EACA,OAAA2uF,EAAA,KAAAqI,EAAA,KAAA+mG,EAAA,KAAAC,EAAA,KAAAC,EAAA,KACA,KAAKvrI,OAAOvgC,OAAOgjK,GAA6B,GAEhD,MAAM/jG,EAAQsS,KACRw6F,EAAcz1M,EAAW,IAAM,KAAKs8G,UAAY,KAAKA,UAAY,CAAC3T,IAAU,CAAC,EAC7E+sG,EAAe11M,EAAW,IAAM,CACpC,GAAG,KAAKs8G,UAAW,CACjB,MAAM1qF,EAAW,KAAKh+B,QAAQ8oB,OAAQ+zB,GAAW,CAACA,EAAOk4D,OAAS8sG,EAAW,CAAE,EAC/E,OAAI7jL,EAASv+B,OAINu+B,EAHE,CAAC,KAAKh+B,QAAQ,KAAKA,QAAQP,OAAS,CAAC,CAAC,CAIjD,CAEA,OAAO,KAAKO,OACd,CAAC,EACK+hN,EAAgBD,EAAY,EAAGriN,OAAS,EAAIqiN,EAAc,EAACh5L,OAAQ+zB,GAAW,CAACA,EAAO/vB,OAAOk1L,QAAQ,EAAIF,EAAY,EACrH,CAACE,EAAUC,CAAW,EAAIlzM,GAAa+yM,IAAeriN,QAAU,CAAC,EACjEyiN,EAAiB91M,EAAW,IAAMuZ,KAAKw8L,MAAMH,EAAQ,EAAKF,EAAY,EAAGriN,OAASsiN,EAActiN,QAAU,CAAC,CAAC,EAElH,IAAI2iN,EAAO,GAEP7hN,EACD,KAAK8hN,WACN9hN,EAAQiE,EAAK,gBAAgB,EACrB,KAAKkkH,UACbnoH,EAAQiE,EAAK,mBAAoB,CAACq9M,EAAW,CAAE,CAAC,EAEhDthN,EAAQiE,EAAK,eAAe,EAG9B,IAAIq0B,EACJ,GAAG,KAAKwpL,WACNxpL,EAAQ,CAAA9V,EAEHve,MAAK,oBAAqB,CAACyT,CAAS,CAAC,CAAC,EACtC,IAAG8K,EACHu2L,OAAkBhnG,EAAKM,gBAAgB,CAAC,CAE5C,UACO,KAAKqQ,QAAS,CACtB,IAAIlwG,EACJ,GAAG,KAAKkwG,UAAY,WAClBlwG,EAAc,2BACT,CACL,MAAMkD,EAAO,qBAEVvV,GAAK4D,QAAQof,IAAIzN,EAAM,KAAKgtG,OAAO,EAEpClwG,EAAckD,EAAM,KAAKgtG,QAGzBlwG,EAAckD,EAAM,SAExB,CAEA4iB,EAAWr0B,EAAKuO,EAAa,CAACkF,CAAS,CAAC,CAC1C,MAAU,KAAKywG,UACb7vF,EAAWr0B,EAAK,KAAKgnD,YAAc,kBAAoB,uBAAwB,CAACvzC,CAAS,CAAC,EAE1F4gB,EAAWr0B,EAAK,mBAAmB,EAGrC,MAAM89M,EAAYt/L,EACfkgC,GAAO,CAACzf,QAAO,gBAAA1U,UAAA,OACbpI,GACAhD,GAAM,WAAA29F,EAAAQ,KAAAj/F,SAAAy+F,EACyB/gH,CAAK,EAAA+gH,CAAA,iBAAAI,EAAAM,KAAAn/F,SAAA6+F,EACF7oF,CAAQ,EAAA6oF,CAAA,iBAAAE,EAAAw/C,KAAAv+I,SAAA++F,EAAA5+F,EAExC2pD,GAAG,KAACC,MAAI,QAAEk1I,EAAY,CAAE,EAAA/yL,SAAGA,CAAC8tB,EAAQt5C,IAAQ,CAC3C,MAAMoW,EAAQvN,EAAW,IAAM41M,EAAQ,GAAMnlK,EAAO/vB,OAAOk1L,SAAWz+M,EAAG,EAAKw+M,EAAc98G,QAAQpoD,CAAM,CAAC,EACrGm1J,EAAa5lM,EAAW,IAAOuN,EAAO,EAAG,EAAK,qBAAuB,GAAG,EACxEs4L,EAAa7lM,EAAW,IAAOuZ,KAAKkD,MAAMlP,EAAO,EAAG,CAAC,EAAI,GAAKgM,KAAKkD,MAAMlP,EAAO,EAAG,CAAC,EAAI,EAAK,IAAI,EACjG4oM,EAAcn2M,EAAW,KACvB41M,IAAaF,EAAc,EAAGC,GAAetiN,OAAS,EAIzDuiN,EAAU,GAAInlK,EAAO/vB,OAAOk1L,SACtBroM,EAAK,IAAQmoM,IAAeriN,OAAS,EAGvCka,EAAO,IAAMooM,EAActiN,OAAS,EAPlC,EAQV,EAEK+gN,EAAgBx/F,GAAkB,CAACjM,MAAO,CAACl4D,EAAOk4D,MAAO3zG,KAAM,EAAE,CAAC,EAExE,kBAAAygH,EAAAy/C,GAAA,EAAAv/C,EAAAF,EAAAj/F,WAAAq/F,EAAAF,EAAAzkC,YAAAukC,SAAA51C,QAKa,SAAW,CAClB,GAAGm2I,EACD,OAGFA,EAAO,GAeP,MAAMn0J,GAA6B,CACjCr5C,EAAG,oBACHquG,QAfwCtI,EAAK0nG,WAAa,CAC1DztM,EAAG,6BACHhP,OAAQi3C,EAAOj3C,OACfC,SAAUg3C,EAAOh3C,SACjBkvG,MAAOl4D,EAAOk4D,MACd5O,QAAS,MAAMwU,EAAKt6G,SAASyiH,gBAAgBC,aAAapI,EAAK0nG,WAAW1pG,UAAU,CACtF,EAAI,CACF/jG,EAAG,8BACHhP,OAAQi3C,EAAOj3C,OACfC,SAAUg3C,EAAOh3C,SACjBkvG,MAAOl4D,EAAOk4D,QAOhB,GAAI,CACF,MAAMvpD,GAAc,MAAMmvD,EAAKt6G,SAASwzG,mBAAmB8kG,eAAe1qJ,EAAY,GACxE,MAAMkqD,GAAahuF,OAAO,CACtC8jC,gBACAzC,cACF,CAAC,GAEKznC,iBAAiB,SAAW/hB,IAAW,CACxCA,KAAW,QACT24G,EAAK69F,UACN79F,EAAKroE,KAAI,EACTqoE,EAAK69F,QAAQ,CAAC37J,EAAOj3C,MAAM,EAGjC,CAAC,CACF,OAAOwL,GAAK,CACXg/F,QAAQjrE,MAAM,cAAe/zB,EAAG,CAClC,CAEAgxM,EAAO,IACRv/L,EAAAk/F,EAAA,IAEuC,IAAGllE,EAAOk4D,KAAM,GAAC,MAAAlyF,EAAAk/F,EAAEy+F,EAAa,MAAA39L,EAAAo/F,EAC9Bt8G,OAA2Bk3C,EAAOj3C,OAAQi3C,EAAOh3C,QAAQ,CAAC,EAAAwc,GAAA6M,IAAA,OAAA28H,GAjD7EhvG,KAAO/vB,OAAOk1L,UAAY,CAACA,KAAUl2D,GAAA,EAAQy2D,EAAa,EAAAx2D,GAC7D,aAAYimD,EAAU,CAAG,KAAIC,EAAU,CAAG,IAAEpmD,YAAA38H,GAAA28H,MAAAhqC,EAAA17F,UAAAyT,OAAA1K,eAAA28H,OAAA,EAAAC,KAAA58H,GAAA48H,MAAAjqC,EAAA17F,UAAAyT,OAAA1K,UAAA48H,OAAA,EAAAC,KAAA78H,GAAA68H,QAAA78H,GAAA68H,UAAA,KAAAlqC,EAAAx7F,MAAAkC,YAAAwjI,cAAA,EAAAlqC,EAAAx7F,MAAAkrJ,eAAA,cAAAriJ,EAAA,GAAA28H,KAAA3kI,OAAA4kI,KAAA5kI,OAAA6kI,KAAA7kI,MAAA,GAAA26F,CAAA,IAmDtE,CAAC,IAAAx/F,GAAA,IA1E+C6/L,EAAc,EAAK,IAAMA,EAAgB,EAAG,GAAK,EAAK,MAAItgG,OAAAv7F,MAAAkC,YAA1D25L,WAAgB,EAAG,IAAMA,EAAc,EAAK,GAAK,EAAK,IAAI,EAAAtgG,EAAAv7F,MAAAkrJ,eAAA,WAAA3vD,IAAA5+F,IA4E3GyW,GAAM,oBACEjf,GAAW,uDAAwD,CAACwnM,EAAU,GAAI,YAAY,CAAC,EACtG74L,KAAI,OACJriB,KAAI,kBACJwtB,QAASA,IAAM2tL,EAAahnL,GAAM,CAACA,CAAC,CAAC,KAG1C,EAEK69E,EAAgB0pG,GAAsB,CAC1C,MAAM5gN,EAAa,KAAKsoB,iBAAiBxG,IAAG,EAC5C,IAAI3Y,EAAS,GAAI6F,EAAU,GAC3B,MAAMy8F,EAAW,SAAW,CAC1B,GAAGz8F,EACD,OAGFA,EAAU,GACV,MAAMu2G,EAAc,MAAM,KAAK9mH,SAASwzG,mBAAmB4uG,qBAAqB13M,EAAQy3M,CAAO,EAC/F,GAAG,CAAC5gN,EAAU,EAAI,OAElB,MAAM0K,GAAY66G,EAAY7nF,SAAW,CAAE,GAAE7W,IAAI,KAAK44L,iBAAiB,EACjEjpK,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EACvC1K,EAAU,IAEdkgG,EAAM5qF,IAEJnM,EAASo8G,EAAYjxC,YACjBnrE,IACFmM,EAAMm2F,SAAWnmF,QAGnBhQ,EAAMkhC,SAAShqB,KAAK,GAAGgqB,CAAQ,EACxBlhC,EACR,EAEDtG,EAAU,KAGN,CAAC2B,EAAGuvF,CAAI,EAAIsD,GAAmB,CAACiI,UAAQ,CAAC,EAC/C,OAAO96F,GAGHmwM,EAAQ,CAACx7L,OAAW,GAAM,EAAK,EAAEuB,IAAK+5L,GAAY,CACtD,MAAMj+K,EAAOu0E,EAAa0pG,CAAO,EACjCj+K,SAAI,EAAG8oE,WACA9oE,CACT,CAAC,EAEK,CAAChL,EAAK+9E,CAAM,EAAIvoG,GAAa,CAAC,EAEpC,KAAKk2C,WAAW0zG,iBAAmB,IAAM,CACvC,MAAMp0H,EAAOm+K,EAAMnpL,EAAG,CAAE,EACxBgL,EAAI,EAAG8oE,cAGT,MAAMzrG,EAAa,KAAKsoB,iBAAiBxG,IAAG,EAC5C,IAAIi/L,EACJ,MAAMC,EAAwB,SAAW,CACvC,MAAMz7F,EAAc,MAAM,KAAK9mH,SAASwzG,mBAAmBgvG,sBAAsBF,CAAmB,EACpG,GAAG,CAAC/gN,EAAU,EACZ,OAGF,MAAM0K,GAAY66G,EAAY27F,eAAiB,CAAE,GAAEr6L,IAAI,KAAK+4L,kBAAkB,EACxEppK,EAAW,MAAM1zB,QAAQya,IAAI7yB,CAAQ,EACvC1K,EAAU,GAEdmhN,EAAwB7rM,IACtBA,EAAMkoB,OAASgZ,EAAS34C,OACxBkjN,EAAsBx7F,EAAY67F,0BAC9BL,IACFzrM,EAAMm2F,SAAWnmF,QAGnBhQ,EAAMkhC,SAAShqB,KAAK,GAAGgqB,CAAQ,EACxBlhC,EACR,GAGG,CAAC+rM,EAAqBF,CAAsB,EAAI39G,GAAmB,CACvEiI,SAAUu1G,CACZ,CAAC,EAEDK,EAAmB,EAAG51G,WACtB,MAAM61G,EAAoBlgM,EACvBkgC,GAAO,2CAA2C7oB,KAAI,0BAAAtL,UAAA,oBAAAg9F,EAAA7f,KAAArpF,SAAAkpG,EAAA,IAC/Ck3F,EAAqB,EAAC7qK,QAAQ,EAAA2zE,IAAAhpG,IACnCA,MAAAkgM,QAAqB,EAAC51G,QAAQ,EAAIhI,MACjC49G,EAAqB,EAAC7jL,MAAQ6jL,EAAqB,EAAC7qK,SAAS34C,OAC5D2wB,GAAW,CACV,MAAMwJ,EAASpJ,GAAiBJ,EAAQ,EAAI,EAC5B6yL,IAAsB51G,WAC9BC,QAAQ,IAAM1zE,EAAM,CAAE,CAChC,EACA8nL,EAAKzsL,cACP,CAAC,IAEJ,EAEKkuL,EAAmBngM,EACtBkgC,GAAO,8CAAAn0B,UAAA,QAAA/L,EACLsyF,GAAI,CACH/7E,IAAKA,EACLhJ,SAAU+mF,EAAM,qCAEhBviF,MAAI,OAAE,CACJvwB,EAAK,sBAAsB,EAC3BA,EAAK,2BAA2B,EAChCA,EAAK,2BAA2B,CAAC,CAClC,MACD2D,SAAO,QAAEu6M,EAAMj6L,IAAK8b,IAClB,WAAAylK,EAAA99F,KAAArpF,SAAAmnL,EAAA,IAAazlK,EAAM,EAAC6T,QAAQ,EAAA4xJ,CAAA,IAC7B,CAAC,KAGP,EAEKoZ,GAAWrgM,GAAA,WAAAiM,EAAAjM,EAAA,MAEZ4+L,EAAKjhK,UAAU2iK,mBAAmB,YAAlCr0L,EAAA,GAAAhM,EACEkgC,GAAO,KAAAn0B,UAAA,QAAA/L,EACLyW,GAAM,6CAEL3yB,KAAI,oBACJwtB,QAAS,SAAW,CAClBqtL,EAAKrvK,KAAI,EACT,MAAMryC,EAAS,MAAMu4C,GAAc8qK,sBACnCvzL,GAAainF,YAAY2R,GAAY,CACnC05F,WAAYpiN,EACZu4M,QAAS,MAAMzjG,GAAU,CACvBtiF,GAAS,CACP1f,YAAa,yBACbohG,kBAAmB,CAACY,EAAO,MAAMniG,GAAc,CAAC3S,QAAM,CAAC,CAAC,CAC1D,CAAC,CACH,CACF,CAAC,CACH,CAAC,IAGN,OAAA8iB,EAAA,IACA,CAAC,CAACkgM,EAAqB,EAAC7jL,OAAS8jL,CAAoB,EACrDC,CAAmB,EAIxB,OAEKb,EAAYv/L,EAAA,IACZ,CAAC8+L,KAAiB,CAACD,EAAKS,YAAce,CAAW,EAGxD,CAEA,MAAchxG,WAAY,CACxB,KAAM,CAACzrF,EAAO1O,EAAWjY,EAAS2jB,EAAQ+8B,EAAW9rC,CAAC,EAAI,MAAM8P,QAAQya,IAAI,EACzE,SAAW,CACV,MAAM+sB,EAAM15C,SAAS6Y,cAAc,KAAK,EACxC6gC,SAAI/lC,UAAUS,IAAI,mBAAmB,EACrC,MAAM/K,GAA0BqwC,EAAM,cAAapJ,GAAQ,KAAKu/J,WAAa,YAAc,OAAO,CAAE,MAAK,EAClGn2J,CACT,GAAI,EACJ,KAAKjsD,QAAU,KAAKurD,aAAe,KAAK62J,WAAazvM,GAAc,CAAC3S,OAAQ,KAAKA,QAAU,KAAKoiN,YAAc,KAAK72J,YAAYuvJ,OAAO30G,SAAS,EAAK,CAAC,CAAC,EAAIl/E,OAC1J,KAAKm7L,WAAa,KAAKhiN,SAASwzG,mBAAmB0vG,oBAAoB,KAAKlB,WAAW1pG,UAAU,EAAI,KAAKt4G,SAASwzG,mBAAmB2vG,uBACtI,KAAKnB,aAAe,SAAW,CAC7B,MAAM1+L,EAASkM,GAAU,CAAC5vB,OAAQ,KAAKoiN,WAAYjhN,KAAM,IAAKQ,WAAY,KAAKsoB,iBAAiBxG,IAAI,CAAC,CAAC,EACtG,aAAMC,EAAOsG,kBACbtG,EAAOhJ,KAAKwL,UAAUS,IAAI,yBAAyB,EAC5CjD,EAAOhJ,IACf,KACD,KAAKta,SAAS84G,WAAWC,aAAc,EACvC,KAAKsP,WAAatB,GAAc,KAAKl9F,iBAAiBxG,IAAK,EAAC,CAC7D,EACD,KAAK1jB,QAAUA,EACf,KAAK0gD,UAAYA,EACjB,KAAK+iE,YAAY,IAAM,KAAK7b,WAAWjhF,EAAO1O,EAAW0L,CAAM,CAAC,EAChE,KAAKg5C,KAAI,CACX,CACF,CAACsR,GAAA,WC/vBe,SAAAw1I,GAAsBh+K,EAAsBi+K,EAAoB,CAKvE,OAJaj+K,EAAM,IAAI,CAACvuB,EAAO3T,KAC7B,CAAC,IAAAA,EAAK,KAAM,KAAK,IAAI2T,EAAQwsM,CAAU,GAC/C,EAEkB,KAAK,CAAC/6M,EAAGwsB,IAAMxsB,EAAE,KAAOwsB,EAAE,IAAI,EAAE,CAAC,CACtD,CAEA,MAAqBwuL,WAA8B9hL,EAEhD,CAGD,MAAa,KAAK,CAAC,OAAAp7B,EAAQ,OAAAm9M,GAGxB,CACI,cAASA,EAAS,mBAAqB,SAAS,EAErD,KAAK,WAAalhL,GAAa,CAAC,UAAW,aAAc,KAAM,QAAQ,EAClE,aAAQ,OAAO,KAAK,UAAU,EAElB5lB,EAAA,KAAK,WAAY,SAAW,CACtByzB,GAAgB,KAAK,UAAU,EACpD,MAAMszK,EAAkBC,EAAmB,MACrC9jB,EAAa6jB,aAA2B,KAAOA,EAAgB,QAAQ,EAAI,IAAO,EAAKA,EAAkBhpL,GAAM,EAAI,EAAIgpL,EAAkB,EACzItjN,EAAQ+rD,EAAe,MACvBy3J,EAAgBC,EAA+B,QAC/CC,EAAaF,EAAgB,EAAKG,EAAmB,OAAS,EAEhE,IAAAvlH,EACDilH,EAUDjlH,GATe,MAAM,KAAK,SAAS,sBAAsB,uBAAuB,CAC9E,OAAAl4F,EACA,KAAMm9M,EAAO,KACb,WAAA5jB,EACA,cAAA+jB,EACA,MAAAxjN,EACA,WAAA0jN,CAAA,CACD,GAEmB,OAEpBtlH,EAAa,MAAM,KAAK,SAAS,sBAAsB,iBAAiB,CACtE,OAAAl4F,EACA,MAAAlG,EACA,cAAAwjN,EACA,WAAAE,EACA,WAAAjkB,EACA,MAAOmkB,GAAuB,QAAU,CAACC,EAAmB,MAAQ,OACrE,EAGE,mBAAc,cAAc,SAAUzlH,CAAU,EACrD,KAAK,MAAM,CAEV,GAAC,eAAgB,KAAK,cAAe,GAEpC,IAAAryC,EACJ,CACE,MAAMtxC,EAAU,IAAIsoB,GAAe,CAAC,QAAS,cAAe,GAEtDW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1CqoB,EAAiB,IAAIjrB,GAAW,CAC9B,MAAO,eACP,UAAW,GACZ,EAEEuiL,GAAQ,OACMt3J,EAAA,iBAAiBs3J,EAAO,KAAK,EAGjC3/K,EAAA,OAAOqoB,EAAe,SAAS,EACpCtxC,EAAA,QAAQ,OAAOipB,CAAY,EAE9B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,MAAM1F,EAAc,MAAM,KAAK,SAAS,gBAAgB,YAAY7O,CAAM,EACpEi6C,EAAY,MAAM,KAAK,SAAS,WAAW,aAAa,EAE9D,IAAIyjK,EAAsCC,EAC1C,GAAG9uM,EAAa,CACR,MAAA0F,EAAU,IAAIsoB,GAAe,CAAC,QAASsgL,EAAS,+BAAiC,kCAAkC,EAEnHrpL,EAAM,IAAI5B,GAAI,CAClB,aAAc,gCACd,cAAewrL,EAAwB,IAAIh0L,GAAc,CAAC,OAAQ,GAAK,EACxE,EAED,KAAK,eAAe,IAAIg0L,EAAsB,KAAK,EAAE,SAAU,IAAM,CACnE,MAAMrzL,EAAUqzL,EAAsB,QACtCH,EAA+B,iBAAiBlzL,CAAO,EACvDuzL,EAAyB,QAAQ,gBAAgB7/M,EAAKssB,EAAU,+BAAiC,mCAAmC,CAAC,EACrI8tC,EAAQ,UAAU,OAAO,OAAQ,CAAC9tC,CAAO,EAC1C,EAEK,MAAA8tC,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAC/B,MAAAv2B,EAAa+7K,EAAqBxsC,GAAgB,CACtD,MAAO,sCACP,IAAKl3H,EAAU,8BACf,WAAY,KAAK,iBAAiB,IAAI,EACtC,QAAUq0D,GAAU,CACPuvG,EAAA,gBAAgB,GAAIvvG,EAAQ,CACrCvwG,EAAK,gCAAiC,CAAC,KAAOk8C,EAAU,0BAA4B,IAAOq0D,EAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,CACrH,EAAI,CAAG,EACT,EACD,EAEKuvG,EAAa,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,yBAAyB,EACvCj8K,EAAA,UAAU,OAAOi8K,CAAU,EAEtC,KAAK,eAAe,IAAIj8K,EAAW,KAAK,EAAE,QAAS,IAAM,EAAE,EAEnDu2B,EAAA,OAAOv2B,EAAW,SAAS,EAEnCrtB,EAAQ,QAAQ,OAAOuf,EAAI,UAAWqkC,CAAO,EAE7Cv2B,EAAW,MAAQ,MAEd,gBAAW,OAAOrtB,EAAQ,SAAS,CAC1C,CAEA,IAAIgpM,EAA+CK,EACnD,GAAG/uM,EAAa,CACd,MAAM0F,EAAUqpM,EAA2B,IAAI/gL,GAAe,CAAC,QAAS,GAAK,EAEvE/I,EAAM,IAAI5B,GAAI,CAClB,aAAc,oBACd,cAAeqrL,EAAiC,IAAI7zL,GAAc,CAAC,OAAQ,GAAK,EACjF,EAEOnV,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAE/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAEI,IAAA8oM,EACJ,CACQ,MAAA9oM,EAAU,IAAIsoB,GAAe,CAAC,KAAM,gBAAiB,QAAS,gBAAgB,EAE9EoF,EAAmCo7K,EAAqB,IAAInnK,GAAmB,CACnF,aAAezlC,GAAU,CACvB,MAAM9S,EAAYnB,GAAeiU,aAAiB,MAAQA,EAAM,UAAY,IAAO,GAAK2jB,GAAM,EAAI,EAAI3jB,EAAO,CAAC,EAC9G,MAAO,CAAC/S,GAAsBC,EAAW,EAAK,EAAG8S,CAAK,CACxD,EACA,cAAgBijB,GACP,CACL,GAAGA,EAAO,IAAIuO,EAAM,YAAY,EAChC,CAAC,IAAK,MAAS,GAGnB,QAAUxxB,GAAU,CAClB,GAAG,CAACA,EACQqtM,QACL,CACD,IAAA1xM,EACDqE,aAAiB,KACXrE,EAAAqE,GAEPrE,MAAW,KACXA,EAAK,WAAWA,EAAK,WAAW,EAAIqE,CAAK,GAGjCqtM,EAAA1xM,EAAK,QAAQ,EAAI,GAAI,CACjC,CACF,EACA,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEK0nB,EAAM,IAAI5B,GAAI,CAClB,aAAc,4BACd,oBAAqB,GACrB,UAAW,IAAM,CACX,IAAA2lD,EACJ,MAAMpnE,EAAQwxB,EAAM,MACjBxxB,EACUonE,EAAA,IAAI,KAAKpnE,aAAiB,KAAOA,EAAQ2jB,GAAM,EAAI3jB,EAAQ,GAAI,GAE1EonE,MAAe,KACfA,EAAS,QAAQA,EAAS,QAAQ,EAAI,CAAC,GAG3B,IAAI2hB,GAAc,CAC9B,SAAA3hB,EACA,OAAQkmI,EACR,kBAAmB,OACpB,EACK,KAAK,CACb,EACA,eAAgB,KAAK,eACtB,EAEKA,EAAsB3oJ,GAAsB,CAC1C,MAAA6nJ,EAAa7nJ,EAAYhhC,GAAM,EAAI,EACnC87F,EAAU8sF,GAAsB3mG,EAAY4mG,CAAU,EACtDe,EAAW3nK,EAAM,QACd2nK,EAAA9tF,EAAQ,GAAG,EAAIjuF,EAAM,aAAa,IAAI,KAAKmzB,EAAY,GAAI,CAAC,EAC/DnzB,EAAA,SAAS+7K,EAAU9tF,EAAQ,GAAG,GAGhC4tF,EAAa1oJ,GAAuB,CACpCA,EAGFthC,EAAI,WAAW,gBAAgBw/B,GAAmB8B,CAAS,CAAC,EAF5DthC,EAAI,WAAW,gBAAgB/1B,EAAK,sBAAsB,CAAC,CAG7D,EAGIs4G,EAAuB,CAAC,KAAM,MAAO,MAAQ,CAAC,EAC9ChgE,EAAQpU,EAAM,cAAco0E,CAAU,EAC5Cp0E,EAAM,SAASoU,EAAOA,EAAM,OAAS,CAAC,EAEnC8mK,GAAUA,EAAO,aAAeA,EAAO,YAAc/oL,GAAM,EAAI,GAChE2pL,EAAmBZ,EAAO,WAAW,EAGvC5oM,EAAQ,QAAQ,OAAO0tB,EAAM,UAAWnO,EAAI,SAAS,EAChD,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAEA,IAAIkpM,EAAgDQ,EACpD,CACQ,MAAA1pM,EAAU0pM,EAAoB,IAAIphL,GAAe,CAAC,KAAM,oBAAqB,QAAS,gBAAgB,EAEtGoF,EAAmCw7K,EAAqB,IAAIvnK,GAAmB,CACnF,aAAezlC,GAAU,CAAC,GAAKA,EAAOA,CAAK,EAC3C,cAAgBijB,GACP,CACL,GAAGA,EAAO,IAAIuO,EAAM,YAAY,EAChC,CAAC,IAAK,MAAS,GAGnB,QAAUxxB,GAAU,CAClBytM,EAAUztM,CAAK,CACjB,EACA,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEKqjB,EAAM,IAAI5B,GAAI,CAClB,aAAc,+BACd,oBAAqB,GACrB,UAAW,GACX,eAAgB,KAAK,eAErB,SAAU,GACX,EAEKmlL,EAAmB,IAAIvC,GACvB,CAAC,MAAA3oL,CAAS,EAAAkrL,EAEhB,KAAK,eAAe,IAAIvjL,EAAI,SAAS,EAAE,YAAc/tB,GAAM,CACrDk8B,EAAM,OACQk8K,EAAA9nG,EAAW,CAAC,CAAC,EAG3BnrF,GAAcnlB,EAAE,OAAuBomB,CAAK,GAC9C2a,GAAgB3a,CAAK,CACvB,CACD,EAED,MAAM+6B,EAAU,IAAM,CACpB,IAAIje,EAAgBouK,EAAiB,MAC/B,MAAA38K,EAAU,CAACuO,EAAc,OACfA,IAAc,QAAQ,MAAO,EAAE,EAEzC,MAAAx4B,EAAQukB,GAAM0F,EAAU,EAAI,CAACuO,EAAeotE,EAAW,CAAC,EAAG,IAAI,EACjE37E,IAAS28K,EAAiB,MAAQ,GAAK5mM,GAC3B2tM,EAAA,GAChBD,EAAgB1tM,CAAK,GAGvB,KAAK,eAAe,IAAI0b,CAAK,EAAE,QAAS+6B,CAAO,EAEzC,MAAAi3J,EAAmB1tM,GAAkB,CACnC,MAAAy/G,EAAU8sF,GAAsB3mG,EAAY5lG,CAAK,EACjDutM,EAAW3nK,EAAM,QACvB2nK,EAAS9tF,EAAQ,GAAG,EAAIjuF,EAAM,aAAaxxB,CAAK,EAC1CwxB,EAAA,SAAS+7K,EAAU9tF,EAAQ,GAAG,GAGtC,IAAIkuF,EAAgB,GACd,MAAAF,EAAaztM,GAAmB,CACpC,GAAG2tM,EAAe,CACAA,EAAA,GAChB,MACF,CAEI3tM,GAGF4mM,EAAiB,MAAQ,GAAK5mM,EAC1BqjB,EAAA,WAAW,gBAAgB3H,CAAK,GAHpC2H,EAAI,WAAW,gBAAgB/1B,EAAK,0BAA0B,CAAC,CAIjE,EAGIs4G,EAAa,CAAC,EAAG,GAAI,GAAI,GAAG,EAC5BhgE,EAAQpU,EAAM,cAAco0E,CAAU,EAG5C,GAFAp0E,EAAM,SAASoU,EAAOA,EAAM,OAAS,CAAC,EAEnC8mK,GAAQ,YAAa,CAChB,MAAA1sM,EAAQ,KAAK,IAAI4lG,EAAW,CAAC,EAAG8mG,EAAO,aAAeA,EAAO,OAAS,EAAE,EAC9Ee,EAAUztM,CAAK,EACf0tM,EAAgB1tM,CAAK,CAGvB,CAEA8D,EAAQ,QAAQ,OAAO0tB,EAAM,UAAWnO,EAAI,SAAS,EAChD,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAYA,GAVGgpM,IACD,KAAK,eAAe,IAAIA,EAA+B,KAAK,EAAE,SAAU,IAAM,CAC5EU,EAAkB,UAAU,UAAU,OAAO,OAAQV,EAA+B,OAAO,EAC5F,EAEEJ,IAC8BI,EAAA,QAAUJ,GAAQ,QAAQ,iBAI1DO,EAAuB,CAClB,MAAAjtM,EAAQ,CAAC,CAAC0sM,GAAQ,qBACFO,EAAA,iBAAiB,CAACjtM,CAAK,EAC7CitM,EAAsB,QAAUjtM,EAE7BA,IACkBktM,EAAA,MAAQ,GAAKR,EAAO,sBAAsB,QAG5DA,IACDO,EAAsB,iBAAiB,EAAI,EACxBC,EAAA,UAAU,UAAU,IAAI,eAAe,EAG9D,CACF,CACF,CClVA,SAASU,GAAelB,EAAoB,CAS1C,MARG,EAAAA,EAAO,OAAO,SAIdA,EAAO,aAAeA,EAAO,aAAe/oL,GAAM,EAAI,GAItD+oL,EAAO,aAAeA,EAAO,cAAgBA,EAAO,OAAS,GAKlE,CAEO,MAAMp+D,WAAuBj1C,EAAW,CAG7C,YAAmBvwG,EAGhB,CACK,OACJ,GAAGA,CAAA,CACJ,EANgB,aAAAA,EAQdA,EAAQ,eACJ,cAAW,SAAS,cAAc,KAAK,EAC5C,KAAK,SAAS,UAAU,IAAI,uBAAwB,MAAM,EACrD,eAAU,OAAO,KAAK,QAAQ,EAEvC,CAEO,cAAc2+F,EAAiC,CAC9C,MAAAomH,EAAa,OAAOpmH,GAAgB,SACpC7+F,EAAW,OAAO6+F,GAAgB,SAAWA,EAAa,OAChE,KAAK,OAAOomH,EAAa,QAAUjlN,EAAW6+F,EAAW,IAAI,EAE1D,KAAK,WACH,CAAComH,GAAcpmH,GAAY,OACvB,cAAS,gBAAgBn6F,EAAK,uBAAwB,CAACm6F,EAAW,KAAK,CAAC,CAAC,EAGhF,KAAK,SAAS,UAAU,OAAO,OAAQomH,GAAc,CAACpmH,GAAY,KAAK,GAGrE,IAAAqmH,EACAD,IACCpmH,EAAW,OAAO,SACnB,KAAK,cAAgB,IAAM,KAAK,QAAQ,QAAQ,aACjCqmH,EAAA,cACNF,GAAenmH,CAAU,IAClC,KAAK,cAAgB,IAAM,KAAK,QAAQ,QAAQ,WACjCqmH,EAAA,2BAIfA,IACaA,EAAA,YACf,KAAK,cAAgB,QAGvB,KAAK,WAAW,gBAAgBxgN,EAAKwgN,CAAY,CAAC,CACpD,CACF,CAEA,MAAqBC,WAA8BpjL,EAAwB,CAUzE,OAAc,YAAYp7B,EAAgBy+M,EAAkB,CACnD,OACL,cAAe,CAACA,GAAWltM,GAAa,6BAA6B,YAAY,EACjF,QAAS9X,EAAU,SAAS,sBAAsB,uBAAuB,CAAC,OAAAuG,EAAQ,QAAAy+M,EAAQ,EAC1F,eAAgBhlN,EAAU,SAAS,sBAAsB,uBAAuB,CAAC,OAAAuG,EAAQ,QAAAy+M,EAAS,QAAS,GAAK,EAChH,cAAe,CAACA,GAAWhlN,EAAU,SAAS,sBAAsB,qBAAqBuG,CAAM,EAC/F,SAAUvG,EAAU,SAAS,kBAAkB,YAAYuG,CAAM,EAErE,CAEA,MAAa,KAAK,CAChB,OAAAA,EACA,QAAAy+M,EACA,EAAA1iN,EAAIyiN,GAAsB,YAAYx+M,EAAQy+M,CAAO,GAKpD,CACD,KAAK,OAASz+M,EACd,KAAK,QAAUy+M,EACf,KAAK,QAAU,GACf,MAAM/iN,EAA+B,GAC/BP,EAAa,KAAK,iBAAiB,IAAI,EACvC,CAACylC,EAAMF,CAAQ,EAAI,MAAM,QAAQ,IAAI,CACzC,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,EACjD3kC,EAAE,SACH,EAEK3C,EAAYF,GAAuB0nC,CAAI,EAE7C,KAAK,SAAS,aAAa,EAC3B,KAAK,UAAU,UAAU,IAAI,yBAA0B,2BAA2B,EAElF,IAAI6a,EAA+Bze,EAC/B,KAAK,UACYye,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,mBAAmB,EAExCze,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,SAAS,EACvBA,EAAA,OAAOj/B,EAAK,iBAAiB,CAAC,GAGlC,MAAA2gN,EAAmBvB,GAChBA,EAAO,MAAQhjN,GAAcgjN,EAAO,KAAK,EAAI/8M,GAAc+8M,EAAO,KAAK,MAAM,KAAK,EAAE,IAAK,GAG9F,IAAA5yG,EACFo0G,EACAC,EACAC,EACAC,EACI,MAAAC,EAAiD,KAAK,YAAc,CAAC,CACzE,KAAM,OACN,KAAM,WACN,QAAS,IAAMx0G,EAAW,SAASo0G,GAAY,IAAI,EACnD,OAAQ,IAAM,CAACA,GAAY,QAAQ,SAClC,CACD,KAAM,UACN,KAAM,YACN,QAAS,IAAM,CACP,MAAA17M,EAAM07M,GAAY,MAAQp0G,EAAW,IAC3CA,EAAW,UAAUtnG,CAAG,CAC1B,EACA,OAAQ,IAAO07M,EAAoBN,GAAeM,CAAU,EAAhC,EAAgC,EAC3D,CACD,KAAM,OACN,KAAM,mBACN,QAAS,KAAK,QAAQ,SAAW,SAAW,CAC1C,MAAMK,EAAYJ,EACZ9rL,EAAM,KAAK,OAAO,UAAUoqL,EAAqB,EACvDpqL,EAAI,cAAc,iBAAiB,SAAWqqL,GAAW,CACvD6B,EAAU,QAAQ,EAClBA,EAAU,IAAI,UAAU,YAAYznG,EAAU4lG,CAAM,EAAE,SAAS,EAChE,EACD,MAAMrqL,EAAI,KAAK,CACb,OAAQ,KAAK,OACb,OAAQ6rL,CAAA,CACT,EACEG,GACI,YAAO,qBAAqBA,CAAiB,CAEtD,EACA,OAAQ,IAAMH,GAAc,CAACA,EAAW,OAAO,SAC9C,CACD,KAAM,SACN,UAAW,SACX,KAAM,aACN,QAAS,KAAK,QAAQ,WAAa,SAAW,CAC5C,MAAMK,EAAYJ,EAClB,MAAM94K,GAAkB,CACtB,aAAc,aACd,mBAAoB,cACpB,OAAQ,CACN,QAAS,eACT,SAAU,EACZ,EACD,EAEK,MAAAq3K,EAAS6B,GAAW,QAAUH,EAE9B3mH,EAAa,MAAM,KAAK,SAAS,sBAAsB,uBAAuB,CAClF,OAAQ,KAAK,OACb,KAAMilH,EAAO,KACb,QAAS,GACV,EAEK8B,EAAe/mH,EAAW,OAC1BgnH,EAAahnH,EAA6E,WAEhG,GAAG8mH,EACEE,GACDF,EAAU,IAAI,UAAU,YAAYznG,EAAU2nG,CAAS,EAAE,SAAS,EAGpEC,EAAa,QAAQ,QAAQH,EAAU,IAAI,SAAS,EACpDA,EAAU,OAAOC,CAAY,MACxB,CACC,MAAAnrL,EAAMyjF,EAAU0nG,CAAY,EACrBE,EAAA,QAAQ,QAAQrrL,EAAI,SAAS,EAC1B+qL,EAAAK,EAChB30G,EAAW,cAAcs0G,CAAa,CACxC,CAEqBO,IAErBN,GAAmB,MAAM,CAC3B,EACA,OAAQ,IAAMH,EAAa,CAACA,EAAW,OAAO,QAAU,CAAC,CAACE,CAAA,EACzD,CACD,KAAM,SACN,UAAW,SACX,KAAM,aACN,QAAS,KAAK,QAAQ,WAAa,IAAM,CACvC,MAAMG,EAAYJ,EAClB,KAAK,SAAS,sBAAsB,yBAClC,KAAK,OACLI,EAAU,OAAO,IACnB,EAAE,KAAK,IAAM,CACXA,EAAU,QAAQ,EAAI,EACDI,IAErBN,GAAmB,MAAM,EAC1B,CACH,EACA,OAAQ,IAAM,CAAC,CAACH,GAAY,QAAQ,QACrC,EAEG,IAAAU,EACJ,CACQ,MAAA9qM,EAAU8qM,EAAoB,IAAIxiL,GAAe,CACrD,KAAM,aACN,QAAS,KAAK,QAAU,mCAAqC,OAC7D,YAAa,KAAK,QAAU,MAAM,QAAQ,IAAI,CAC5C1wB,GAAc,CAAC,OAAQ,KAAK,QAAQ,SAAS,EAAK,EAAE,EACpDA,GAAc,CAAC,OAAQ,KAAK,OAAO,SAAS,EAAI,EAAE,CACnD,GAAI,OACN,EAEDo+F,EAAa,IAAIw0C,GAAe,CAC9B,QAASggE,EACT,eAAgB,KAAK,eACrB,QAAS,KAAK,QACd,aAAc,GACf,EAEgB1oM,EAAAk0F,EAAW,SAAU,IAAM,CAE1C+0G,EAAST,CAAa,CACrB,GAAC,eAAgB,KAAK,cAAe,GAEhCtqM,EAAA,QAAQ,OAAOg2F,EAAW,SAAS,CAC7C,CAEI,IAAAg1G,EACJ,CACQ,MAAAhrM,EAAUgrM,EAAkB,IAAI1iL,GAAe,CACnD,KAAM,KAAK,QAAU,0BAA4B,yBACjD,QAAS,KAAK,QAAU,OAAY,0BACrC,EAEE,IAAC,KAAK,QAAS,CACV,MAAAy5B,EAAMtjC,GAAO,sCAAuC,CAAC,KAAM,OAAQ,KAAM,gBAAgB,EAE/F3c,EAAiBigD,EAAK,IAAM,CAC1B,MAAMxjC,EAAM,KAAK,OAAO,UAAUoqL,EAAqB,EACvDpqL,EAAI,cAAc,iBAAiB,SAAWolE,GAAe,CACrD,MAAApkE,EAAMyjF,EAAUrf,CAAU,EAC7B2mH,EACOtqM,EAAA,QAAQ,QAAQuf,EAAI,SAAS,EAErCvf,EAAQ,QAAQ,kBAAkB,MAAMuf,EAAI,SAAS,CACvD,CACD,EACDhB,EAAI,KAAK,CAAC,OAAQ,KAAK,MAAO,EAC7B,GAAC,eAAgB,KAAK,cAAe,GAEhCve,EAAA,QAAQ,OAAO+hD,CAAG,EAClB/hD,EAAA,QAAUA,EAAQ,wBAC5B,CACF,CAEI,IAAAirM,EACD,IAAC,KAAK,QAAS,CAChB,MAAMjrM,EAAUirM,EAAc,IAAI3iL,GAAe,CAAC,KAAM,4BAA4B,EAE9E13B,EAAUpJ,EAAE,cAAc,KAAM0jN,GAAkB,CAClD,IAAC,OAAAC,CAAU,EAAAD,EAEZ,GADMC,IAAO,OAAQC,GAAUA,EAAM,SAAS,SAAS,EAAK,IAAMlmN,EAAU,IAAI,EAChF,CAACimN,EAAO,OAAQ,CACTnrM,EAAA,UAAU,UAAU,IAAI,MAAM,EACtC,MACF,CAEM,MAAAmnC,EAAWxjB,GAAkB,iBAC7Bx8B,EAA+B,GAC9B,OAAAgkN,EAAA,QAASC,GAAU,CACxB,MAAMnmN,EAASmmN,EAAM,SAAS,SAAS,EAAK,EACtC,CAAC,IAAA1hL,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAA1+B,EACA,UAAWkiD,EACX,cAAe,GACf,WAAY,aACZ,OAAQ,GACR,aAAAhgD,EACA,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEGuiC,EAAA,gBAAgB,OAAOlgC,EAAK,kBAAmB,CAAC4hN,EAAM,aAAa,CAAC,CAAC,EAC1E,EAEgBtpM,EAAAqlC,EAAW31C,GAAM,CAChC,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,eAAe,EACxD,GAAG,CAAC+Y,EACF,OAGF,MAAMtlB,EAASslB,EAAO,QAAQ,OAAO,SAAS,EAClC,KAAK,OAAO,UAAU0/L,EAAqB,EACnD,KAAK,CACP,OAAQ,KAAK,OACb,QAAShlN,EAAO,SAAS,EAC1B,CACA,GAAC,eAAgB,KAAK,cAAe,GAEhC+a,EAAA,QAAQ,OAAOmnC,CAAQ,EAExB,QAAQ,IAAIhgD,CAAY,GAC9B,IAAM,CACP6Y,EAAQ,UAAU,QAAO,CAC1B,EAED7Y,EAAa,KAAKyJ,CAAO,CAC3B,CAEI,IAAAg6M,EACJ,CACE,MAAM5qM,EAAU4qM,EAAe,IAAItiL,GAAe,CAAC,KAAM,eAAe,EAElEy5B,EAAMtjC,GAAO,qCAAsC,CAAC,KAAM,SAAU,KAAM,wBAAwB,EAExG3c,EAAiBigD,EAAK,SAAW,CAC/B,MAAMxwB,GAAkB,CACtB,aAAc,wBACd,mBAAoB,gCACpB,OAAQ,CACN,QAAS,SACT,SAAU,EACZ,EACD,EAEK,MAAA3S,EAASpJ,GAAiBusC,EAAK,EAAI,EACzC,MAAM,KAAK,SAAS,sBAAsB,iCAAiC,KAAK,OAAQ,KAAK,OAAO,EAC7FnjC,IAEP,MAAM,KAAK5e,EAAQ,QAAQ,QAAQ,EAAE,QAASjJ,GAAO,CACrCs0M,EAAW,IAAIt0M,CAAiB,EACxC,QAAQ,EAAI,EACnB,EACoB8zM,GACpB,GAAC,eAAgB,KAAK,cAAe,GAEhC7qM,EAAA,QAAQ,OAAO+hD,CAAG,EAClB/hD,EAAA,QAAUA,EAAQ,wBAC5B,CAEK,gBAAW,OAAO,GAAG,CACxBknC,EACAze,EACAqiL,EAAkB,UAClBE,EAAgB,UAChBC,GAAa,UACbL,EAAa,WACb,OAAO,OAAO,CAAC,EAEX,MAAAG,EAAYnC,GAAuB,CACvC,MAAMrqL,EAAMgsL,EAAoB,KAAK,OAAO,UAAUngE,EAAoB,EACtE7rH,EAAA,cAAc,iBAAiB,QAAS,IAAM,CAChDgsL,EAAoBF,EAAWD,EAAa,OAC7C,EACD7rL,EAAI,KAAK,KAAK,OAAQqqL,EAAQ,KAAMyB,GAAU,MAAM,GAGtDvoM,EAAiB,KAAK,WAAW,UAAYtQ,GAAM,CACjD,MAAMzK,EAAYyjB,EAAgBhZ,EAAE,OAAQ,SAAS,EACjDzK,IAIOsjN,EAAAgB,EAAW,IAAItkN,CAAS,EACnCqjN,EAAaC,EAAS,OACtBU,EAASX,CAAU,EAClB,GAAC,eAAgB,KAAK,cAAe,GAEtB1tL,GAAA,CAChB,QAAS8tL,EACT,SAAU,KAAK,WAAW,UAC1B,YAAch5M,GAAM,CAClB,MAAMzK,EAAYyjB,EAAgBhZ,EAAE,OAAQ,SAAS,EACrD,OAAGzK,IACUsjN,EAAAgB,EAAW,IAAItkN,CAAS,EACnCqjN,EAAaC,EAAS,QAGjBtjN,CACT,EACA,QAAS,IAAMsjN,EAAWD,EAAa,OACvC,WAAAxjN,EACA,eAAgB,KAAK,eACtB,EAED,MAAM+gD,EAAuBT,GAAoB1/C,EAAE,cAAc,KAAK,MAAMi+B,GAAO,CAC3E,MAAA1oB,EAAS,MAAM0oB,EAAG,CACtB,UAAWyhB,EACX,KAAM,GACN,SAAU,GACV,MAAO,IACP,OAAQ,IACT,EAEM,OAAAlqC,GAAa,kBAAkBD,CAAM,EAC7C,EAQKsuM,MAAsC,IACtCC,MAAuC,IAEvCtoG,EAAa4lG,GAAuB,CACxC,IAAI2C,EAA2BztL,EAC5B8qL,EAAO,uBACR2C,EAAe7gE,GAAY,CACzB,MAAOk+D,EAAO,qBAAqB,OACpC,EACD9qL,EAAgBt0B,EAAK,8BAA8B,GAGrD,MAAM+1B,EAAM,IAAIoS,GACd,GACAi3K,EAAO,qBAAuB,YAAc,OAC5CA,EAAO,qBAAuB,QAAU,OACxC2C,EACAztL,CAAA,EAEFyB,EAAI,MAAM,gBAAgB4qL,EAAgBvB,CAAM,CAAC,EAE9C,CAACA,EAAO,aAAe,CAACA,EAAO,OAAO,SAAW,CAACA,EAAO,sBACnD,OAAArpL,EAAI,MAAM,QAAQ,MAGvB,IAAAkY,EAEE,MAAAnoB,EAAWk8L,GAAsB,CAC3B/zK,MACC4zK,EAAA,OAAO9rL,EAAI,SAAS,EAC5BisL,GACDjsL,EAAI,UAAU,QAChB,EAGImc,EAAUivK,GAA2B,CACtCA,IACD/B,EAASv1M,EAAM,OAASs3M,GAG1B,MAAM9iN,EAA0B,GAC1BmS,EAAS4uM,EAAO,OAAS,EACzB7+D,EAAY6+D,EAAO,WAAa,EAChCjpL,EAAOE,GAAM,EAAI,EACjBmlK,GAAa4jB,EAAO,YACpBtzF,GAAY0vE,IAAcA,IAAcrlK,EACxC8rL,GAAUzxM,GAAUA,GAAU4uM,EAAO,YACrCh/M,GAAWo7L,GAAa,KAAK,IAAI,EAAGA,GAAarlK,CAAI,EAAI,OA6C5D,GA3CAipL,EAAO,OAAO,SACN/gN,EAAA,KACP2B,EAAK,0BAA0B,EAC/BA,EAAK,mCAAmC,GAGtC+1B,EAAA,MAAM,QAAQ,MAAQ,UACvB2gB,IACDA,EAAO,cAAc,SACZA,EAAA,QAEDzI,OAEPz9B,GACDnS,EAAS,KAAK2B,EAAK,uBAAwB,CAACwQ,CAAM,CAAC,CAAC,EAEjDyxM,IACQ5jN,EAAA,KAAK2B,EAAK,0BAA0B,CAAC,EAC1C+1B,EAAA,MAAM,QAAQ,MAAQ,OAClBqpL,EAAO,YACN/gN,EAAA,KAAK2B,EAAK,wBAAyB,CAACo/M,EAAO,YAAc5uM,CAAM,CAAC,CAAC,EAClE+vI,GACRliJ,EAAS,KAAK2B,EAAK,eAAgB,CAACugJ,CAAS,CAAC,CAAC,GAEzCA,EACRliJ,EAAS,KAAK2B,EAAK,eAAgB,CAACugJ,CAAS,CAAC,CAAC,EACvC6+D,EAAO,aAAe,CAACtzF,GAC/BztH,EAAS,KAAK2B,EAAK,UAAW,CAACo/M,EAAO,WAAW,CAAC,CAAC,EAEnD/gN,EAAS,KAAK2B,EAAK8rH,GAAY,2BAA6B,sDAAsD,CAAC,EAIpH,CAACszF,EAAO,OAAO,SAAW5jB,KACvB1vE,IAGE/1F,EAAA,MAAM,QAAQ,MAAQ,MACjB13B,EAAA,KAAK2B,EAAK,mCAAmC,CAAC,EAC7CiuC,OAJD5vC,EAAA,KAAK2B,EAAK,8BAA+B,CAACG,GAAiBC,EAAQ,CAAC,CAAC,CAAC,GAQhF,CAACg/M,EAAO,OAAO,UAAa5jB,IAAc,CAAC1vE,IAAeszF,EAAO,aAAe,CAAC6C,IAAW,CAC7F,MAAMC,GAAgB9C,EAAO,YAAc5uM,EAAS4uM,EAAO,YAAc,OACnE+C,EAAe3mB,GAAa,EAAIp7L,IAAYo7L,IAAc4jB,EAAO,YAAcA,EAAO,OAAS,OAC/FtoL,GAAW,KAAK,IAAIorL,IAAiB,EAAGC,GAAgB,CAAC,EAEzDC,GAAS7sM,GAASoL,GAAiB,YAAY,aAAa,CAAC,EAC7D0hM,GAAS9sM,GAASoL,GAAiB,YAAY,cAAc,CAAC,EAC9D2hM,GAAat9G,GAAUq9G,GAAQD,GAAQtrL,EAAQ,EAC/C0pI,GAAO5B,GAAW,GAAG0jD,EAAU,EAIrC,GAHA9hD,GAAK,EAAI,KAAK,IAAI,GAAIA,GAAK,CAAC,EAC5BzqI,EAAI,MAAM,MAAM,YAAY,UAAWwsL,GAAa/hD,EAAI,CAAC,EAEtD9pH,IACDxyB,MAAgBwyB,EAAO,kBACvBA,EAAO,MAAM,gBAAkB,GAAGxyB,GAAe,EAAI4S,GAAS,KAAK5S,CAAW,GAE3E4nG,IAAW,CACZ,MAAMp3G,GAAI,IAAM,CACd8tM,GAAQ,cAAc,QAAO,EAGzBA,GAAU9rK,EACPA,EAAA,OAET,WAAWhiC,GAAG,GAAG,CACnB,CAEJ,CAEAqhB,EAAI,SAAS,gBAAgB,GAAGuK,GAAiBjiC,EAAU,KAAK,CAAC,GAG7DwL,EAAW,CAAC,IAAAksB,EAAK,OAAAqpL,EAAQ,OAAAltK,EAAQ,QAAApsB,CAAO,EACnC+7L,EAAA,IAAI9rL,EAAI,UAAWlsB,CAAK,EAEnC,IAAI6sC,EAA0BxyB,EAAc,mBAC5C,OAAIk7L,EAAO,aAAeA,EAAO,cAAgBkB,GAAelB,CAAM,IACjEA,EAAO,cACRnxK,EAAU,IAAM,CAEd6zK,EAAgB,OAAO5vK,CAAM,GAE/B4vK,EAAgB,IAAI5vK,CAAM,EAC1B90C,EAAW,UAAU6wC,CAAO,GAG1BlY,EAAA,MAAM,mBAAmB,YAAa;AAAA;AAAA;AAAA;AAAA,SAIzC,EAEQ2gB,EAAA3gB,EAAI,MAAM,iBAAiB,mBAG/Bmc,IAEAnc,CAAA,EAGHsrL,EAAuB,IAAM,CACjCD,EAAa,UAAU,UAAU,OAAO,OAAQ,CAACA,EAAa,QAAQ,iBAAiB,GAGnFqB,EAAmB,QAAQ,IAAI,CAACzkN,EAAE,QAASA,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC0kN,EAAaC,CAAkB,IAAM,CAC3G,KAAK,QACU7B,EAAA4B,EAAY,QAAQ,CAAC,EAC5BrnN,EAAU,SACnBylN,EAAgBn+K,EAAS,iBAG3B6pE,EAAW,cAAcs0G,GAAiBzlN,EAAU,CAAC,CAAC,EAErD,CACC,CAACqnN,EAAalB,CAAe,EAC7B,CAACmB,EAAoBvB,CAAY,GACwB,QAAQ,CAAC,CAACsB,EAAalsM,CAAO,IAAM,CAC5FksM,EAAY,QAAyB,QAAStD,GAAW,CACrD,GAAA0B,GAAe,OAAS1B,EAAO,KAChC,OAGI,MAAArpL,EAAMyjF,EAAU4lG,CAAM,EACpB5oM,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EACrC,EACF,EAEoBsrL,IAMf,MAAAuB,EAAiB,YAJR,IAAM,CACnBd,EAAgB,QAAS7lL,GAAOA,EAAI,IAGK,GAAI,EAC/C7+B,EAAW,UAAU,IAAM,CACzBykN,EAAW,QAAQ,CAAC,CAAC,QAAA/7L,CAAO,IAAMA,EAAS,GAC3C,cAAc88L,CAAc,EAC7B,EACD,KAAK,eAAe,IAAIlnN,CAAS,EAAE,gBAAiB,IAAM,CACxDmmN,EAAW,QAAQ,CAAC,CAAC,OAAA3vK,CAAM,IAAMA,GAAQ,EAC1C,EACF,EAEY,OAAAv0C,EAAA,KAAKwgD,EAAsBskK,CAAgB,EACjD,QAAQ,IAAI9kN,CAAY,CACjC,CACF,CCjnBA,MAAqBklN,WAAuB3lL,EAAe,CAMzD,MAAgB,OAAQ,CAEtB,KAAK,eAAe,YAEpB,KAAK,UAAU,UAAU,IAAI,sBAAuB,sBAAsB,EAC1E,KAAK,SAAS,MAAM,EAEhB,IACFyF,EACAE,EACA/xB,EACAskC,EACA0tK,EACAhnK,EACAinK,EACAhnK,EACAinK,EACAC,EACAC,EACAC,EACAC,EACAlnK,EACA3B,CAAA,EACE,MAAM,QAAQ,IAAI,CACpB,KAAK,SAAS,kBAAkB,YAAY,KAAK,OAAQ,EAAI,EAC7D,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,EACjD,KAAK,SAAS,gBAAgB,YAAY,KAAK,MAAM,EACrD,KAAK,SAAS,gBAAgB,UAAU,KAAK,MAAM,EACnD,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,aAAa,EAClE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,oBAAoB,EACzE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,eAAe,EACpE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,oBAAoB,EACzE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,aAAa,EAClE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,aAAa,EAClE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,eAAe,EACpE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,cAAc,EACnE,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,cAAc,EACnE,KAAK,SAAS,WAAW,aAAa,EACtC,KAAK,SAAS,oBAAoB,sBAAsB,EACzD,EAED,KAAK,WAAW,kBAEhB,MAAM/P,EAAoE,CAAC,KAAM,CAAI,QAAO,CAAE,GACxFC,EAAwB,CAACnlC,EAAsBwa,EAAyB,UAAY,CACpE0qB,EAAA1qB,CAAI,EAAE,KAAKxa,CAAQ,GAGzC,KAAK,eAAe,IAAI5J,CAAS,EAAE,cAAe,MAAMuG,GAAW,CAC9D,KAAK,SAAWA,IACjB4gC,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,EAC9D2H,EAAoB,MAAS,QAASllC,GAAaA,GAAU,EAC/D,CACD,EAED,KAAK,eAAe,IAAI5J,CAAS,EAAE,mBAAoB,MAAMuG,GAAW,CACnE,KAAK,SAAWA,IACjB0gC,EAAW,MAAM,KAAK,SAAS,kBAAkB,kBAAkB1gC,CAAM,GACvE0gC,GACA,MAAM,KAAK,SAAS,kBAAkB,YAAY1gC,CAAM,EAC1DuoC,EAAoB,KAAQ,QAASllC,GAAaA,GAAU,EAC9D,CACD,EAED,MAAM7J,EAAS,KAAK,OAAO,SAAS,EAAI,EAClCqxC,EAAU,CAAC,CAACjK,EAAK,aAEvB,CACQ,MAAArsB,EAAU,IAAIsoB,GAAe,CAAC,YAAa,GAAM,QAAS,+BAA+B,EACzF2K,EAA4B,GAE5BhK,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAErC,wBAAqB,IAAI5C,GAAW,CACvC,MAAO/rB,EAAc,mBAAqB,yBAC1C,KAAM,YACN,UAAW,IACX,SAAU,GACV,YAAakyM,CAAA,CACd,EACI,2BAAwB,IAAInmL,GAAW,CAC1C,MAAO,yBACP,KAAM,mBACN,UAAW,IACX,eAAgB,GAChB,YAAammL,CAAA,CACd,EAEI,wBAAmB,iBAAiBngL,EAAK,KAAK,EAC9C,2BAAsB,iBAAiBF,EAAS,KAAK,EAE1DlD,EAAa,OAAO,KAAK,mBAAmB,UAAW,KAAK,sBAAsB,SAAS,EAE3FgK,EAAY,KAAK,KAAK,mBAAoB,KAAK,qBAAqB,EAE/D,cAAW,IAAIhG,GAAS,CAC3B,OAAAhoC,EACA,YAAAguC,EACA,eAAgB,KAAK,eACrB,aAAc,CAAC,QAAU5G,EAAsB,OAAO,KAAK,EAC3D,WAAY,KAAK,iBAAiB,IAAI,EACvC,EACD,KAAK,QAAQ,OAAO,KAAK,SAAS,OAAO,EAErCmgL,IACF,KAAK,SAAS,WAAW,KAAK,UAAU,OAAO,oBAAoB,EACnE,KAAK,SAAS,WAAW,UAAU,gBAAgB,KAAK,SAAS,WAAW,IAAI,EAChF,KAAK,SAAS,WAAW,UAAU,UAAU,IAAI,eAAe,GAGlExsM,EAAQ,QAAQ,OAAO,KAAK,SAAS,WAAW,UAAWipB,CAAY,EAClE,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,CACE,MAAMA,EAAU,IAAIsoB,GAAe,CAAC,QAAS,EAAK,GAElD,GAAGgkL,EAAe,CACV,MAAAO,EAAc,IAAIlvL,GAAI,CAC1B,aAAcrjB,EAAc,cAAgB,YAC5C,UAAW,IAAM,CACf,MAAMikB,EAAM,KAAK,OAAO,UAAUgV,EAAc,EAChDhV,EAAI,OAAS,KAAK,OAClBA,EAAI,SAAW4N,EACf5N,EAAI,KAAK,CACX,EACA,KAAM,OACN,eAAgB,KAAK,eACtB,EAEKuuL,EAAsB,IAAM,CAC5B,IAAA7xM,EACJ,MAAMnW,EAAWH,GAAuB0nC,CAAoB,EAAE,CAAC,EAC5D/xB,EACDW,EAAMnW,EAAW,aAAe,cAEhCmW,EAAMnW,EAAW,kBAAoB,mBAGvC+nN,EAAY,SAAS,gBAAgBrjN,EAAKyR,CAAG,CAAC,GAG5B6xM,IACpB74K,EAAsB64K,CAAmB,EACjC9sM,EAAA,QAAQ,OAAO6sM,EAAY,SAAS,CAC9C,CAEA,GAAGF,EAAsB,CACjB,MAAAI,EAAiB,IAAIpvL,GAAI,CAC7B,aAAc,cACd,cAAe,CACb,YAAassL,GACb,OAAQ,KAAK,OACb,YAAa,KAAO,CAClB,OAAQ,KAAK,OACb,EAAGA,GAAsB,YAAY,KAAK,MAAM,GAEpD,EACA,KAAM,OACN,eAAgB,KAAK,eACrB,SAAU,GACX,EAEK+C,EAAsB,IAAM,CAChCD,EAAe,SAAS,YAAc,KAGpBC,IACpB/4K,EAAsB+4K,EAAqB,MAAM,EAEzChtM,EAAA,QAAQ,OAAO+sM,EAAe,SAAS,CACjD,CAEA,GAAGH,GAAkBt2K,EAAS,CACtB,MAAA22K,EAAc,IAAItvL,GAAI,CAC1B,aAAcrjB,EAAc,oBAAsB,iBAClD,cAAe,CACb,YAAawwI,GACb,YAAa,IAAM,KAAK,OACxB,OAAQ,KAAK,MACf,EACA,KAAM,UACN,eAAgB,KAAK,eACrB,SAAU,GACX,EAEKoiE,EAAmB,IAAM,CAC7B,MAAM9oL,EAAQ+H,EAAS,iBACX8gL,EAAA,SAAS,YAAc,GAAK7oL,EACxC6oL,EAAY,UAAU,UAAU,OAAO,OAAQ,CAAC7oL,CAAK,GAGtC8oL,IACjBj5K,EAAsBi5K,EAAkB,MAAM,EAEtCltM,EAAA,QAAQ,OAAOitM,EAAY,SAAS,CAC9C,CAGA,GAAGT,GAAiBl2K,EAAS,CACrB,MAAA62K,EAAe,IAAIxvL,GAAI,CAC3B,aAAc,YACd,KAAM,YACN,cAAe,CACb,YAAammB,GACb,OAAQ,KAAK,OACb,YAAa,KAAO,CAClB,OAAQ,KAAK,OACb,EAAGA,GAAoB,YAAY,KAAK,MAAM,GAElD,EACA,eAAgB,KAAK,eACtB,EAEKspK,EAA2BrpK,EAAmB,OAAQkB,GAAsB,CAACA,EAAkB,OAAO,QAAQ,EAAE,OAChHooK,EAAqB,IAAM,CAC/B,MAAMC,EAAyBnhL,EAAS,qBAAuB,CAAC,EAAG,mBAAmB,EACnF,GAAAmhL,EAAuB,IAAM,oBAAqB,CAC7C,MAAA7oN,EAAS6oN,EAAuB,UAAU,OAC7C7oN,IAAW2oN,EACZ9wM,GAAe6wM,EAAa,SAAU3jN,EAAK,cAAc,CAAC,EAE7C2jN,EAAA,SAAS,YAAc1oN,EAAS,IAAM2oN,CACrD,MAEe9wM,GAAA6wM,EAAa,SAAU3jN,EAAK8jN,EAAuB,IAAM,mBAAqB,eAAiB,mBAAmB,CAAC,CACpI,EAGiBD,IACnBp5K,EAAsBo5K,EAAoB,MAAM,EACxCrtM,EAAA,QAAQ,OAAOmtM,EAAa,SAAS,CAC/C,CAEG,GAAA7nK,GAAwB,CAAChrC,EAAa,CACvC,MAAMizM,EAAQ,CACZ,gBACA,aACA,cACA,cACA,mBACA,cACA,cACA,YACA,aACA,cACA,eACA,eACA,eAGIC,EAAiB,IAAI7vL,GAAI,CAC7B,aAAc,qBACd,UAAW,IAAM,CACf,MAAMY,EAAM,KAAK,OAAO,UAAUkkB,EAAsB,EACxDlkB,EAAI,OAAS,KAAK,OAClBA,EAAI,KAAK,CACX,EACA,KAAM,cACN,eAAgB,KAAK,eACtB,EAEKkvL,EAAuB,IAAM,CACjCD,EAAe,SAAS,YAAcD,EAAM,OAAO,CAACxtM,EAAKxI,IAAMwI,GAAM,CAACm2B,GAAU7J,EAAM90B,EAAI80B,EAAmB,qBAAqB,EAAG,CAAC,EAAI,IAAMkhL,EAAM,QAGnIE,IACrBx5K,EAAsBw5K,CAAoB,EAClCztM,EAAA,QAAQ,OAAOwtM,EAAe,SAAS,CACjD,CAEA,GAAGhB,GAAiBl2K,EAAS,CACrB,MAAAo3K,EAAgB,IAAI/vL,GAAI,CAC5B,KAAM,WACN,aAAcrjB,EAAc,sBAAwB,gBACpD,SAAU,GACV,cAAe,CACb,YAAa2sC,GACb,YAAa,KAAO,CAClB,OAAQ,KAAK,OACb,aAAe9a,EAAkC,eACjD,EAAG8a,GAAqB,YAAY,IAEtC,OAAQ,KAAK,MACf,EACA,eAAgB,KAAK,eACtB,EAEKhE,EAAc,SAAW,CAC7B,MAAMzP,EAAgBrH,EAAkC,eACpD,IAAAp1B,EACDy8B,EACIz8B,EAAA,MAAMa,GAAc,CAAC,OAAQ47B,EAAa,SAAS,EAAI,EAAE,EAE9Dz8B,EAAKvN,EAAK,yBAAyB,EAGjC8Q,GACFozM,EAAc,UAAU,UAAU,OAAO,OAAQ,CAACl6K,CAAY,EAGlDk6K,EAAA,SAAS,gBAAgB32M,CAAE,GAG3C,MAAMksC,EAAY,EAClBhP,EAAsBgP,EAAa,MAAM,EAEzCjjC,EAAQ,QAAQ,gBAAgBxW,EAAK,gBAAgB,CAAC,EAC9CwW,EAAA,QAAQ,OAAO0tM,EAAc,SAAS,CAChD,CAEG,GAAAnB,GAAmBj2K,IAAYjK,EAAK,oBAAsBqZ,EAAU,gCAAmCrZ,EAAsB,OAAO,QAAU,CAAC/xB,EAAa,CACvJ,MAAAqzM,EAAY,IAAIhwL,GAAI,CACxB,cAAe,IAAIxI,GAAc,CAAC,OAAQ,GAAK,EAC/C,aAAc,SACd,UAAY3jB,GAAM,CAChB,GAAI26B,EAAkC,eAAgB,CAC3C1U,GAAA,CAAC,YAAa,mCAAmC,EAC1D5V,GAAYrQ,CAAC,EACb,MACF,CACF,EACA,KAAM,SACN,eAAgB,KAAK,eACtB,EAEKo8M,EAAY,IAAM,CACtB,MAAMpxM,EAAU,CAAC,CAAE6vB,EAAsB,OAAO,MAChD,KAAK,SAAS,WAAW,KAAK,cAAc,UAAU,OAAO,WAAY7vB,CAAO,EACtEmxM,EAAA,cAAc,iBAAiBnxM,CAAO,GAM7C,oBAAe,IAAImxM,EAAU,cAAc,KAAK,EAAE,SAAWn8M,GAAM,CACnE,IAACA,EAAE,UACJ,OAGI,MAAAZ,EAAU,KAAK,SAAS,gBAAgB,YAAY,KAAK,OAAQ+8M,EAAU,cAAc,OAAO,EACtGA,EAAU,mBAAmB/8M,CAAO,EACrC,EAESg9M,IACV35K,EAAsB25K,CAAS,EAC/B35K,EAAsB25K,EAAW,MAAM,EAEvC5tM,EAAQ,QAAQ,gBAAgBxW,EAAK,wBAAwB,CAAC,EACtDwW,EAAA,QAAQ,OAAO2tM,EAAU,SAAS,CAC5C,CAEA3tM,EAAQ,QAAQ,UAAU,OAAO,OAAQ,CAACA,EAAQ,QAAQ,iBAAiB,EAExEA,EAAQ,QAAQ,mBAAwB,gBAAW,OAAOA,EAAQ,SAAS,EAE7D8B,EAAA,KAAK,SAAS,QAAS,IAAM,CACvC,cAAS,QAAQ,SAAW,GAEjC,MAAMxQ,EAA2B,GAE3By1B,EAAK,KAAK,OACb,KAAK,mBAAmB,mBAChBz1B,EAAA,KAAK,KAAK,SAAS,gBAAgB,UAAUy1B,EAAI,KAAK,mBAAmB,KAAK,CAAC,EAGvF,KAAK,sBAAsB,mBACnBz1B,EAAA,KAAK,KAAK,SAAS,gBAAgB,UAAUy1B,EAAI,KAAK,sBAAsB,KAAK,CAAC,EAG1F,KAAK,SAAS,cACfz1B,EAAS,KAAK,KAAK,SAAS,eAAe,KAAM83B,GACxC,KAAK,SAAS,gBAAgB,UAAUrC,EAAIqC,CAAS,CAC7D,CAAC,EAGJ,QAAQ,KAAK93B,CAAQ,EAAE,QAAQ,IAAM,CAC9B,cAAS,QAAQ,gBAAgB,UAAU,EAChD,KAAK,MAAM,EACZ,CACA,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEA,CACE,MAAM0O,EAAU,IAAIsoB,GAAe,EAAE,EAErC,GAAGid,EAAiB,CACZ,MAAAsoK,EAAoB,IAAIlwL,GAAI,CAChC,aAAc,0BACd,SAAU,GACV,KAAM,QACN,cAAe,CACb,YAAa8nB,GACb,OAAQ,KAAK,OACb,YAAa,KAAO,CAClB,OAAQ,KAAK,OACb,EAAGA,GAAyB,YAAY,KAAK,MAAM,GAEvD,EACA,eAAgB,KAAK,eACtB,EAEKqoK,EAA0B,IAAM,CACpCD,EAAkB,SAAS,YAAc,IAAO1hL,EAAkC,cAAgB,IAG5E2hL,IACxB75K,EAAsB65K,EAAyB,MAAM,EAE7C9tM,EAAA,QAAQ,OAAO6tM,EAAkB,SAAS,CACpD,CAEA,CACQ,MAAAE,EAAa,IAAIpwL,GAAI,CACzB,aAAcrjB,EAAc,uBAAyB,eACrD,KAAM,WACN,UAAW,IAAM,CACf,KAAK,OAAO,UAAUmsC,EAAiB,EAAE,KAAK,KAAK,MAAM,CAC3D,EACA,eAAgB,KAAK,eACrB,SAAU,GACX,EAKKunK,EAAmB,IAAM,CACvB,MAAAvxK,EAAevQ,GAAqBC,CAAQ,EACvC4hL,EAAA,SAAS,YAAcpmL,GAAuB8U,CAAY,GAOtDuxK,IACjB/5K,EAAsB+5K,EAAkB,MAAM,EAEtChuM,EAAA,QAAQ,OAAO+tM,EAAW,SAAS,CAC7C,CAEA,GAAGzoK,EAAsB,CACjB,MAAA2oK,EAAkB,IAAItwL,GAAI,CAC9B,aAAc,sBACd,SAAU,GACV,KAAM,aACN,UAAW,IAAM,CACH,KAAK,OAAO,UAAUkpB,EAAkB,EAChD,KAAK,KAAK,MAAM,CACtB,EACA,eAAgB,KAAK,eACtB,EAEKqnK,EAAwB,IAAM,CAC5B,MAAAC,EAAehiL,EAAkC,cAAgB,EACpEgiL,EACeF,EAAA,SAAS,YAActmL,GAAuBwmL,CAAW,EAEzEF,EAAgB,SAAS,gBAAgBzkN,EAAK,gBAAgB,CAAC,CACjE,EAGoB0kN,IACtBj6K,EAAsBi6K,EAAuB,MAAM,EAE3CluM,EAAA,QAAQ,OAAOiuM,EAAgB,SAAS,CAClD,CAEK,gBAAW,OAAOjuM,EAAQ,SAAS,CAC1C,CAEA,GAAG1F,GAAeoyM,EAAiB,CACjC,MAAM1sM,EAAU,IAAIsoB,GAAe,CAAC,QAAS,EAAK,GAC5C8lL,EAA4B,IAAIj5L,GAAc,CAClD,KAAM,sBACP,EAEKk5L,EAA4B,IAAIl5L,GAAc,CAClD,KAAM,iCACP,EAED,KAAK,eAAe,IAAIi5L,EAA0B,KAAK,EAAE,SAAU,IAAM,CACjE,MAAAxvL,EAASwvL,EAA0B,iBAAiB,EAAI,EAC9D,KAAK,SAAS,gBAAgB,iBAAiB,KAAK,OAAQA,EAA0B,QAASA,EAA0B,SAAWC,EAA0B,OAAO,EAAE,KAAK,IAAM,CACzKzvL,GAAA,CACR,EACF,EAED,KAAK,eAAe,IAAIyvL,EAA0B,KAAK,EAAE,SAAU,IAAM,CACjE,MAAAzvL,EAASyvL,EAA0B,iBAAiB,EAAI,EACzD,cAAS,gBAAgB,iBAAiB,KAAK,OAAQD,EAA0B,QAASC,EAA0B,OAAO,EAAE,KAAK,IAAM,CACpIzvL,GAAA,CACR,EACF,EAED,MAAM8c,EAAS,IAAM,CACnB0yK,EAA0B,iBAAiB,CAAC,CAAE/hL,EAAsB,OAAO,UAAU,EACrFgiL,EAA0B,iBAAiBD,EAA0B,SAAW,CAAC,CAAE/hL,EAAsB,OAAO,kBAAkB,EAClIiiL,EAAK,UAAU,UAAU,OAAO,OAAQ,CAACF,EAA0B,OAAO,EAC1EpuM,EAAQ,QAAQ,gBAAgBxW,EAAK6kN,EAA0B,QAAU,0BAA4B,yBAAyB,CAAC,GAG3HC,EAAOvvL,GAA2BsvL,CAAyB,EAE1D3yK,IACPzH,EAAsByH,CAAM,EAE5B17B,EAAQ,QAAQ,OAAO+e,GAA2BqvL,CAAyB,EAAE,UAAWE,EAAK,SAAS,EACjG,gBAAW,OAAOtuM,EAAQ,SAAS,CAC1C,CAEA,GAAG,CAAC1F,EAAa,CACf,MAAM0F,EAAU,IAAIsoB,GAAe,EAElC,EAEE,IAAChuB,GAAegyM,EAAe,CAC1B,MAAAiC,EAA+B,IAAIp5L,GAAc,CACrD,KAAM,cACP,EAED,KAAK,eAAe,IAAIo5L,EAA6B,KAAK,EAAE,SAAU,IAAM,CACpE,MAAA3vL,EAAS2vL,EAA6B,iBAAiB,EAAI,EAC5D,cAAS,gBAAgB,uBAAuB,KAAK,OAAQ,CAACA,EAA6B,OAAO,EAAE,KAAK,IAAM,CAC3G3vL,GAAA,CACR,EACF,EAGD,MAAM+W,EAAe,IAAM,CACzB44K,EAA6B,iBAAiB3vK,GAAa,CAAEzS,EAAkC,OAAO,iBAAiB,GAG5GwJ,IACb1B,EAAsB0B,CAAY,EAElC31B,EAAQ,QAAQ,OAAO+e,GAA2BwvL,CAA4B,EAAE,SAAS,CAC3F,CAEGvuM,EAAQ,QAAQ,mBACZ,gBAAW,OAAOA,EAAQ,SAAS,CAE5C,CAEA,GAAGysM,EAAe,CAChB,MAAMzsM,EAAU,IAAIsoB,GAAe,EAAE,EAE/BkX,EAAY/gB,GAAO,qCAAsC,CAAC,KAAM,SAAU,KAAMnkB,EAAc,yBAA2B,qBAAsB,GAErJwH,EAAiB09B,EAAW,IAAM,CAChCzqB,GAAa,YAAYU,GAAmBxwB,EAAwB,OAAY2L,GAAY,CAC1F,MAAMguB,EAASpJ,GAAiB,CAACgqB,CAAS,EAAG,EAAI,EACjD5uC,EAAQ,KAAK,IAAM,CACjB,KAAK,MAAM,GACV,IAAM,CACAguB,GAAA,CACR,EACF,CACA,GAAC,eAAgB,KAAK,cAAe,GAEhC5e,EAAA,QAAQ,OAAOw/B,CAAS,EAE3B,gBAAW,OAAOx/B,EAAQ,SAAS,CAC1C,CAEI4+B,GAEG,oBAAe,IAAI15C,CAAS,EAAE,iBAAkB,CAAC,CAAC,YAAAu+C,EAAa,UAAAC,KAAe,CAC9Ez+C,IAAWw+C,IACP,YAASC,EAAU,WACxB,KAAK,MAAM,EACb,CACD,CAEL,CAEO,MAAO,CACZ,OAAO,KAAK,OACd,CACF,CCrmBA,MAAM8qK,GAAO,gBACW,SAAAC,GAAWzpN,EAI9B,GAAI,CACD,MAAAq9B,EAAS,SAAS,cAAc,GAAG,EAClCA,EAAA,UAAU,IAAI,aAAa,EAElC,IAAIqsL,EAAkBC,EAAwB,aAC9C,GAAG3pN,EAAQ,OAAQ,CACX,MAAAq/F,EAAOmqH,GAAOxpN,EAAQ,OACjB0pN,EAAArsL,EAAO,KAAOA,EAAO,UAAYgiE,CAC9C,CAEA,GAAGr/F,EAAQ,SAAU,CACb,MAAAq/F,EAAOmqH,GAAOxpN,EAAQ,SAC5Bq9B,EAAO,KAAOgiE,EACHqqH,EAAArsL,EAAO,UAAY,IAAMr9B,EAAQ,SACjC2pN,EAAA,gBACb,CAEiB,OAAA7sM,EAAAugB,EAAS7wB,GAAM,CAC9BqQ,GAAYrQ,CAAC,EACOm8B,GAAA+gL,GAAYrsL,EAAO,IAAI,EAClC5K,GAAA,CAAC,YAAak3L,CAAA,CAAS,EACjC,EAEMtsL,CACT,CCpCA,MAAMusL,EAAO,CAEX,YAAmBnzJ,EAAsBxrD,EAAa,CAAnC,WAAAwrD,EAAsB,SAAAxrD,CACzC,CAEO,UAAW,CACT,OAAA2+M,GAAO,aAAa,KAAK,KAAK,EAAI,MAAQA,GAAO,aAAa,KAAK,GAAG,CAC/E,CAEA,OAAc,aAAajvL,EAAckvL,EAAiB,GAAM,CAC9D,MAAMvtK,EAAM3hB,EAAO,GACb52B,GAAS42B,EAAO2hB,GAAO,GAAK,GAC5BwtK,MAAe,KACZA,EAAA,SAAS/lN,EAAOu4C,CAAG,EACtB,MAAA98C,EAAMgW,GAAWs0M,CAAQ,EAAE,YAC9B,OAAAnvL,EAAOovL,IAAmBF,EACpBnpN,GAAK,OAAO,uBAAwB,GAAM,CAAClB,CAAG,CAAC,EAEjDA,CACT,CACF,CAEA,MAAqBwqN,GAArB,MAAqBA,EAAa,CAIhC,OAAO,gBAAgBjmN,EAA6BkmN,EAAmB,CAC/D,MAAAxkL,EAA8BuL,GAAKjtC,CAAK,EAExCmmN,EAA+B,IAAI,MACzC,QAAQvmN,EAAI,EAAGA,EAAI8hC,EAAM,OAAQ,EAAE9hC,EAAG,CAC9B,MAAAwmN,EAAS1kL,EAAM9hC,CAAC,EAClB,IAAAymN,EAAgC,CAAC,GAAGD,GAExC,GAAGF,IAAc,EAAG,CACZ,MAAAxzJ,EAAQ0zJ,EAAO,aAAeJ,GAC9B9+M,EAAMwrD,GAAS0zJ,EAAO,WAAaA,EAAO,cAChD,GAAG1zJ,IAAU,IAAMxrD,IAAQ8+M,IAAmB9+M,IAAS8+M,GAAkB,GAAK,CAC5EK,EAAU,aAAeD,EAAO,aAChCC,EAAU,WAAaD,EAAO,WAC9BD,EAAO,KAAKE,CAAS,EACrB,QACF,CACF,CAEUA,EAAA,aAAeD,EAAO,aAAeF,EACrCG,EAAA,WAAaD,EAAO,WAAaF,EAC3CC,EAAO,KAAKE,CAAS,EAElBA,EAAU,aAAe,EACvBA,EAAU,WAAa,GACxBA,EAAU,cAAgBC,GAC1BD,EAAU,YAAcC,KAExBD,EAAU,aAAe,EAEbA,EAAA,CAAC,GAAGD,GACNC,EAAA,aAAeC,GAAmBF,EAAO,aAAeF,EAClEG,EAAU,WAAcC,GAAmB,EAC3CH,EAAO,KAAKE,CAAS,GAEfA,EAAU,WAAaC,IAC5BD,EAAU,aAAeC,KAC1BD,EAAU,cAAgBC,GAC1BD,EAAU,YAAcC,GAU9B,CAEA,OAAAH,EAAO,KAAK,CAACvhN,EAAGwsB,IAAMxsB,EAAE,aAAewsB,EAAE,YAAY,EAC9C+0L,CACT,CAKA,OAAO,aAAanmN,EAA6B,CACzC,MAAA4wG,EAAmB,IAAI,MAAM,CAAC,EACpC,QAAQhxG,EAAI,EAAGA,EAAIgxG,EAAK,OAAQ,EAAEhxG,EAC3BgxG,EAAAhxG,CAAC,EAAI,GAEZ,QAAQA,EAAI,EAAGA,EAAII,EAAM,OAAQ,EAAEJ,EAAG,CAC9B,MAAA2jF,EAASvjF,EAAMJ,CAAC,EAChBq7E,EAAM,KAAK,MAAOsI,EAAO,aAAeyiI,GAAmB,CAAC,EAC5DtzJ,EAAQ6wB,EAAO,aAAeyiI,GAC9B9+M,EAAMwrD,GAAS6wB,EAAO,WAAaA,EAAO,cAChDqtB,EAAK31B,CAAG,EAAE,KAAK,IAAI4qI,GAAOnzJ,EAAOxrD,CAAG,CAAC,CACvC,CACA,QAAQtH,EAAI,EAAGA,EAAI,EAAG,EAAEA,EAAG,CACzB,MAAM8yD,EAAQszJ,GAAkBpmN,EAC1BsH,EAAM8+M,IAAmBpmN,EAAI,GAEnC,IAAI6iC,EAAIiwB,EACR,QAAQ6zJ,EAAI,EAAGA,EAAIvmN,EAAM,OAAQ,EAAEumN,EAAG,CAC9B,MAAAhjI,EAASvjF,EAAMumN,CAAC,EACnBhjI,EAAO,cAAgB9gD,GAAK8gD,EAAO,YAAc9gD,IAClDA,EAAI8gD,EAAO,WAAa,EAE5B,CAGA,GADe9gD,GAAKv7B,EACT,CACH,MAAAs/M,GAAW,EAAI5mN,EAAI,GAAK,EAC3BgxG,EAAK41G,CAAO,EAAE,QAAU51G,EAAK41G,CAAO,EAAE51G,EAAK41G,CAAO,EAAE,OAAS,CAAC,EAAE,KAAOR,KACnEp1G,EAAA41G,CAAO,EAAE51G,EAAK41G,CAAO,EAAE,OAAS,CAAC,EAAE,IAAMR,GAAkB,GAE7Dp1G,EAAAhxG,CAAC,EAAE,OAAS,EACZgxG,EAAAhxG,CAAC,EAAE,KAAK,IAAIimN,GAAO,EAAGG,GAAkB,CAAC,CAAC,MAC1C,CACC,MAAAS,GAAW7mN,EAAI,GAAK,EAC1B,GAAGgxG,EAAKhxG,CAAC,EAAE,QAAUgxG,EAAK61G,CAAO,EAAE,OAAQ,CACnC,MAAAC,EAAY91G,EAAKhxG,CAAC,EAAEgxG,EAAKhxG,CAAC,EAAE,OAAS,CAAC,EACtC+mN,EAAgB/1G,EAAK61G,CAAO,EAAE,CAAC,EAClCC,EAAU,IAAMV,IAAmBU,EAAU,IAAMV,GAAkB,IAAMW,EAAc,QAC1FD,EAAU,IAAMV,GAAkB,EAClCW,EAAc,MAAQ,EAE1B,CACF,CACF,CACO,OAAA/1G,CACT,CAEA,OAAO,OAAO5wG,EAA0B,CACtC,GAAG,CAACA,GAAS,CAACA,EAAM,YAAY,OAAe,SAC/C,IAAI8D,EAAO,EACX,QAAQlE,EAAI,EAAGA,EAAII,EAAM,YAAY,OAAQ,EAAEJ,EAAG,CAC1C,MAAA2jF,EAASvjF,EAAM,YAAYJ,CAAC,EAC/B,GAAA2jF,EAAO,aAAez/E,EAAO,EAAU,SAC1CA,EAAOy/E,EAAO,UAChB,CACA,OAAOz/E,GAAQwiN,GAAmB,CACpC,CAEA,OAAO,UAAUM,EAA2C,CACpD,MAAA93M,MAAW,KAEX+3M,GAAc,EAAI/3M,EAAK,SAAW,GAAK,EACvCg4M,EAAWh4M,EAAK,WAChBi4M,EAAaj4M,EAAK,aAExB,IAAIk4M,EAAU,GACd,MAAMC,EAAgBF,EAAaD,EAAW,GAAKD,EAAab,GAChE,QAAQpmN,EAAI,EAAGA,EAAIgnN,EAAoB,OAAQ,EAAEhnN,EAAG,CAC5C,MAAAsnN,EAAeN,EAAoBhnN,CAAC,EAExC,GAAAqnN,GAAiBC,EAAa,cAAgBD,GAAiBC,EAAa,YAC3ED,EAAgBX,IAAqBY,EAAa,cAAiBD,EAAgBX,IAAqBY,EAAa,YACrHD,EAAgBX,IAAqBY,EAAa,cAAiBD,EAAgBX,IAAqBY,EAAa,WACtH,CACUF,EAAA,GACV,KACF,CACF,CAEA,MAAO,CAAC,QAAAA,EAAS,WAAAH,EAAY,SAAAC,EAAU,cAAAG,CAAa,CACtD,CAEA,OAAO,OAAOjsG,EAAmB,CAC5B,IAACA,GAAW,CAACA,EAAQ,OAAe,SACvC,IAAImsG,EAAW,EACf,QAAQvnN,EAAI,EAAGA,EAAIo7G,EAAQ,OAAQ,EAAEp7G,EAAG,CAChC,MAAAnB,EAAIu8G,EAAQp7G,CAAC,EAChB,GAAAunN,EAAW1oN,EAAE,MACP,SAET0oN,EAAW1oN,EAAE,GACf,CACO,OAAA0oN,IAAcnB,GAAkB,GAAMmB,IAAanB,EAC5D,CACF,EA1JEC,GAAO,OAASJ,GADlB,IAAqBuB,GAArBnB,GC3BwB,SAAAoB,GAAe3lL,EAAYrgC,EAAW,CACtD,MAAAimN,EAAQ5lL,EAAM,MAAMrgC,CAAC,EACrBkmN,EAAO7lL,EAAM,MAAM,EAAGrgC,CAAC,EACtB,OAAAimN,EAAM,OAAOC,CAAI,CAC1B,8KCiBe,SAASC,GAAcz7M,EAGnC,CACD,KAAM,CAAC07M,EAAUC,CAAW,EAAI18M,GAAa,EAAK,EAC5C,CAAC28M,EAAQC,CAAO,EAAI58M,GAAa,EAAK,EACtC,CAAC8b,EAAS+gM,CAAU,EAAI78M,GAAY,EACpC,CAAC0F,EAAS6iK,CAAU,EAAIvoK,GAAY,EACpC,CAAC88M,EAAkBC,CAAmB,EAAI/8M,GAAY,EACtD,CAACjI,EAAMq5B,CAAO,EAAIpxB,GAAY,EAE9BkmB,EAAiB,IAAImD,GAC3BxpB,GAAU,IAAMqmB,EAAeygF,UAAS,CAAE,EAE1C,MAAM8jF,EAAQC,KAEd,IAAIsyB,EACJ,MAAMxxL,EAAM,IAAI5B,GAAI,CAClBp4B,MAAO,GACP64B,YAAU,WAAAjX,EAAAC,KAAAqN,EAEDs8L,EAAa,cAAAt8L,GAAAC,cAAAD,EAAAtN,CAAA,EAAb4pM,EAAa5pM,EAAAU,EAAAV,GAAA,WAAAW,EAAAC,EAAA,IAGjB8oM,EAAkB,IAAK3kM,MAAS,QAAhCpE,MAAA,GAAoCte,EAAKqnN,EAAgB,EAAK,+BAAiC,iCAAiC,CAAC,MAAAxpM,OAAAiN,GAAAnN,EAF3H3H,GAAW,6BAA8BqxM,EAAgB,IAAO3kM,QAAa,MAAM,CAAC,GAAA/E,IAI/E,EAChB+yF,gBAAiB,uBACjBp8E,cAAe,GACf3P,KAAM,UACNoV,UAAY/xB,GAAM,CAChB,GAAGmlB,GAAcnlB,EAAE+Y,OAAuBwmM,CAAa,EAAG,CACxDD,EAAqB50M,GAAU,CAACA,CAAK,EACrC0iL,GAAaJ,EAAO,IAAM,CACxB9iJ,GACF,CAAC,EACD+0K,EAAY,EAAI,EAChB,MACF,CAEIC,EAAM,GACRD,EAAav0M,GAAU,CAACA,CAAK,CAEhC,EACDgqG,YAAa,CACX7vF,QAAS,CAAC,CACRlI,KAAM,OACNriB,KAAM,OACNwtB,QAASA,IAAM,CACbqU,GAAoB7hC,EAAI,CAAE,EAC1B2rB,GAAS,CAAC1f,YAAa,qBAAqB,CAAC,CAC/C,EACD,CACF,EACDkiB,gBACF,CAAC,EAaD9nB,GAAaC,GACXo+M,EAZ4BQ,IAAM,CAClC,IAAIzlM,EACDilM,EAAQ,GAAM,CAACE,MAEhBnlM,EADagU,EAAIx4B,UAAUmrG,cAAc,iBAAiB,EAAEld,wBAC9CzpE,QAGhBgU,EAAIx4B,UAAUskB,MAAMoQ,cAAgBlQ,EAAU,GAAE,GAAQA,CAAO,KAAM,GACrEgU,EAAIx4B,UAAUokB,UAAUyT,OAAO,cAAe4xL,EAAQ,CAAE,GAMxD,CAACh/L,MAAO,EACV,EAAC,EAED,MAAMy/L,EAAeA,IAAM,CACzB,MAAMC,EAAYp8M,EAAM/L,QAElBooN,EADgBr8M,EAAMs8M,aACI5kM,KAAM2kM,GAAaA,EAASpqL,KAAOmqL,EAAUG,WAAW,EAElFC,EAAmB,CADZ,IAAI7jH,OACc8jH,oBAEzBC,EAAkBL,EAAeA,EAASM,WAAa,GAA1B,EAEnC,OADkBH,EAAmBE,GAIjC91K,EAASA,IAAM,CACnB,MAAMw1K,EAAYp8M,EAAM/L,QACxB,GAAG,CAACmoN,GAAa,CAACp8M,EAAMs8M,UAAS,EAC/B,OAGF,MAAMV,EAASP,GAAaO,OAAOQ,CAAS,EAC5CP,EAAQD,CAAM,EAEd,MAAMgB,EAAaR,EAAUS,YAEvB1C,EAAYgC,IACZW,EAAsB,CAAC,CAAC3C,EACxB4C,EAAoBD,EAAsBl/M,GAAQm+M,CAAgB,GAAK,GAAQ,GAC/EiB,EAAoB3B,GAAa4B,gBAAgBL,EAAYzC,CAAS,EACtE,CAACc,UAASC,gBAAeJ,YAAU,EAAIO,GAAa6B,UAAUF,CAAiB,EAErFhB,EAAoBc,EAAsBC,EAAoB3lM,MAAS,EAEvE,MAAM+lM,EAAYA,CAACjuI,EAAmDrlE,IAAkB,CACtF,GAAGwxM,GAAanrJ,OAAOgf,CAAG,EACxB,MAAO,CAACt+E,GAAKg7F,OAAO,2BAA4B,EAAI,CAAC,EAGvD,GAAG,CAAC/hF,GAAS,CAACoxM,GAAW,CAACS,EAAQ,EAAI,CACpC,IAAI0B,GAAkB,GACtB,QAAQ5C,GAAI,EAAGA,GAAIwC,EAAkBrtN,OAAQ,EAAE6qN,GAAG,CAChD,MAAMH,GAAS2C,EAAkBxC,EAAC,EAClC,GAAGU,EAAgBb,GAAOgD,aAAc,CACtCD,GAAkB/C,GAAOgD,aACzB,KACF,CACF,CAIA,GAHGD,KAAoB,IAAMJ,EAAkBrtN,SAC7CytN,GAAkBJ,EAAkB,CAAC,EAAEK,cAEtCD,KAAoB,GACrB,MAAO,CAACxsN,GAAKg7F,OAAO,4BAA6B,EAAI,CAAC,EACjD,CACL,MAAM14D,GAAOkqL,GAAkBlC,EAAgBkC,IAAmB7C,GAAmBW,GAAiBkC,GAAkBlC,EACxH,OAAGhoL,GAAO,GACD,CAACtiC,GAAKg7F,OAAO,qCAAsC,GAAM,CAAC14D,EAAI,CAAC,CAAC,EAC/DA,GAAO+mL,GACR,CAACrpN,GAAKg7F,OAAO,mCAAoC,GAAM,CAAC/1E,KAAKw8L,KAAKn/K,GAAO,EAAE,CAAC,CAAC,CAAC,EAE9E,CAACtiC,GAAKg7F,OAAO,kCAAmC,GAAM,CAAC/1E,KAAKw8L,KAAKn/K,GAAO+mL,EAAe,CAAC,CAAC,CAAC,CAErG,CACF,CAEA,MAAM/nN,EAASg9E,EAAIv2D,IAAK6+D,IAAWA,GAAO8lI,SAAQ,CAAE,EACpD,OAAIprN,EAAOvC,OAIJuC,EAHE,CAACtB,GAAKg7F,OAAO,4BAA6B,EAAI,CAAC,GAMpD2xH,EAAc14G,GACXy2G,GAAYz2G,EAAMi2G,CAAU,EAAEniM,IAAIwkM,CAAS,EAG9CK,EAAYnC,GAAaoC,aAAab,CAAU,EAChDc,EAAqBH,EAAWC,CAAS,EAEzCG,EAAStC,GAAaoC,aAAaT,CAAiB,EACpDY,EAAkBL,EAAWI,CAAM,EAEnCE,EAAqBd,EAAoBa,EAAkBF,EAUjE,GARAjzL,EAAIh6B,MAAMwmG,gBAAgBviG,EAAKumN,EAAU,8BAAgC,+BAA+B,CAAC,EACzGxwL,EAAIh6B,MAAM4lB,UAAUyT,OAAO,QAASmxL,CAAO,EAC3CxwL,EAAIh6B,MAAM4lB,UAAUyT,OAAO,SAAU,CAACmxL,CAAO,EAI7CxwL,EAAIzB,cAAckwE,YAAc0iH,EAAShrN,GAAKg7F,OAAO,+BAAgC,EAAI,EAAIiyH,EAAmB,CAAC,EAAE,CAAC,EAEjHjC,EACD,OAGF,MAAMkC,EAAWxC,GAAYyC,GAAa,EAAEjD,CAAU,EAChD30M,EAAM03M,EAAmBllM,IAAKu2D,GAAQA,EAAIz6E,KAAK,EAAE,CAAC,EAAEA,KAAK,EAAE,EACjE,GAAGmJ,GAAQmd,CAAO,IAAM5U,EACtB,OAGF,MAAM63M,EAAsB,GAE5BlC,EAAW31M,CAAG,EACd,MAAMgkB,EAAO0zL,EAAmBllM,IAAI,CAACu2D,EAAKr7E,IAAM,CAC9C,MAAMoqN,EAAUH,EAASjqN,CAAC,EAE1B,IAAIqqN,GAAWD,EAAU,KACzB,MAAME,GAAwBjvI,EAE3Br7E,IAAM,IACPq7E,EAAMA,EAAIiK,MAAM,CAAC,GAGnB,MAAM15E,GAAGyT,EAAK2pD,GAAG,CAACC,KAAMoS,EAAGjwD,SAAGA,CAACu4D,GAAQ/jF,MACrC,WAAAkf,EAAAC,GAAA,EAAAC,GAAAF,EAAAG,WAAAkuE,GAAAnuE,GAAA26D,YAAAz6D,SAAAF,GAEyChf,QAAM,GAAKJ,GAAG,IAAO,EAAIwqN,EAAU,EAAE,EAAAlrM,EAAAiuE,GACpCxJ,EAAM,EAAA7kE,CAAA,KAGzC,EAETurM,WAAYC,GAAY1pN,KAAK,IAAI,EACjCupN,EAAU1/L,KAAK4/L,EAAQ,EAEhBz+M,EACT,CAAC,EAED4wB,EAAQirL,GAAY0C,EAAW,CAAClD,CAAU,EAAErmN,KAAK;AAAA,CAAI,CAAC,EAEtD+yK,GAAU,WAAA/nJ,EAAAN,KAAApM,SAAA0M,EAEL0K,CAAI,EAAA1K,CAAA,IAET,GAGFpiB,UAAaupC,CAAM,EAEnBnc,EAAIx4B,UAAUokB,UAAUS,IAAI,0BAA0B,EAEtD5D,EAAC2sD,GAAM,KAACqhB,OAAK,QAAEz2D,EAAIx4B,SAAS,MAAAgtB,UAAA,QAAA/L,EACzBkoD,GAAQ,CAAC5mD,KAAI,iBAAAyK,UAAA,QACXta,EAAO,CAAE,OAIP8lB,CACT,CCzOA,MAAqB2zL,WAAoEtxL,EAAsB,CAI7G,YAAY58B,EAAmG,CACvG,OACJ,GAAGA,EACH,SAAU,CAACq9B,EAAQD,EAAOM,IAAc,CACtC,GAAG,KAAK,OAAO,UAAU,GAAK,CAACN,EAAc,eAAQ,QAAQ,CAAC,MAAO,EAAG,MAAO,GAAG,EAElF,MAAMysD,EAAQxsD,GAAQ,QACf,YAAK,SAAS,iBAAiB,cAAc,KAAK,OAAQwsD,EAAOnsD,CAAS,EAAE,KAAMxmB,GAAU,CACjG,MAAMke,EAAQle,EAAM,OAAO,IAAKi3M,IACvB,CAAC,QAAS,KAAqB,QAAAA,GACvC,EAED,MAAO,CAAC,MAAOj3M,EAAM,MAAO,MAAAke,CAAK,EAClC,CACH,EACD,EAED,KAAK,YAAc,GACnB,KAAK,OAASp1B,EAAQ,MACxB,CACF,CC5BA,SAAwBouN,GAAkB5uN,EAAa,CAC/C,MAAAiI,EAAWjI,EAAI,MAAM,GAAG,EAC3B,GAAAiI,EAAS,SAAW,EAAG,CACpBA,EAAS,CAAC,IAAGA,EAAS,CAAC,EAAI,OAC/B,QAAQ9D,EAAI8D,EAAS,OAAQ9D,EAAI,EAAG,EAAEA,EAC3B8D,EAAA9D,CAAC,EAAI8D,EAAS9D,EAAI,CAAC,GAAK8D,EAAS,CAAC,GAAK,KAEpD,CAEO,OAAAA,CACT,CCLA,SAAS4mN,GAAaC,EAAYC,EAAYC,EAAuBC,EAAsBC,EAAmBt8L,EAAWkZ,EAAW,CAC3H,OAACgjL,EAAI,IAAKC,EAAI,IACnBC,EAAe,IACfC,EAAc,IACdC,EAAW,IACXt8L,EAAG,IAAKkZ,CAAA,EAAG,KAAK,EAAE,CACtB,CAEwB,SAAAqjL,GAAiBv8L,EAAWkZ,EAAWhlB,EAAeC,EAAgBqoM,EAAYC,EAAYtsK,EAAYusK,EAAY,CAC5I,MAAM9qM,EAAiB,GAGvB,OAAAA,EAAK,KAAK,KAAOoO,EAAI9L,EAAQ,GAAK,IAAMglB,CAAC,EAGzCtnB,EAAK,KAAK,KAAOoO,EAAI9L,EAAQuoM,EAAG,EAE7BA,EAAK,GAEN7qM,EAAK,KAAK,IAAMqqM,GAAaQ,EAAIA,EAAI,EAAG,EAAG,EAAIz8L,EAAI9L,EAASglB,EAAIujL,CAAG,CAAC,EAItE7qM,EAAK,KAAK,KAAOsnB,EAAI/kB,EAASg8B,EAAG,EAE9BA,EAAK,GAENv+B,EAAK,KAAK,IAAMqqM,GAAa9rK,EAAIA,EAAI,EAAG,EAAG,EAAInwB,EAAI9L,EAAQi8B,EAAMjX,EAAI/kB,CAAO,CAAC,EAI1EvC,EAAA,KAAK,KAAOoO,EAAI08L,EAAG,EAErBA,EAAK,GAEN9qM,EAAK,KAAK,IAAMqqM,GAAaS,EAAIA,EAAI,EAAG,EAAG,EAAI18L,EAAI,EAAKkZ,EAAI/kB,EAASuoM,CAAG,CAAC,EAItE9qM,EAAA,KAAK,KAAOsnB,EAAIsjL,EAAG,EAErBA,EAAK,GAEN5qM,EAAK,KAAK,IAAMqqM,GAAaO,EAAIA,EAAI,EAAG,EAAG,EAAIx8L,EAAIw8L,EAAMtjL,EAAI,CAAE,CAAC,EAIlEtnB,EAAK,KAAK,GAAG,EAENA,EAAK,KAAK,GAAG,CACtB,CAEA+hC,GAAe,iBAAmB4oK,GC/DV,SAAAI,GAAUC,EAAa1yK,EAAaC,EAAa,CAChE,OAAAyyK,GAAO1yK,GAAO0yK,GAAOzyK,CAC9B,CCEO,SAAS0yK,GAAiB3lE,EAA8B,CAC7D,MAAMtiH,EAAO,SAAS,mBAAmB,KAAK,UAAUsiH,CAAI,CAAC,CAAC,GAE3D,OAAAzjG,GAAkB,GAAG7e,CAAI,mBAAmB,KAAK,IAAK,IAClD,GAAGA,CAAI,MAAM,KAAK,IAAK,GAChC,CAEO,SAASkoL,GAAgBjvN,EAAgB,CACxC,MAAAonC,EAAO5mC,GAAgB,QAAQR,CAAM,EAC3C,GAAGonC,EAAK,IAAM,UAAiB,UAAI,MAAM,eAAe,EAExD,OAAGA,EAAK,UAAYA,EAAK,WAAW,OAE3B,gBADUA,EAAK,UAAYA,EAAK,UAAU,CAAC,CACnB,cAG1B,kBAAkBA,EAAK,EAAE,aAClC,CCmDA,MAAM8nL,GAAY,GACZC,GAAqB,EACrBC,GAAiB,GACjBC,GAAiB,EAEjBC,GAAuB,IACvBC,GAAuB,IAEhBC,GAAyB,eAQtC,MAAqBC,WAIVn+L,EAGR,CAqFD,YACYkhC,EACVk9J,EACUC,EAAqB,EAC/B,CACA,MAAM,EAAK,EAJD,gBAAAn9J,EAEA,wBAAAm9J,EArFZ,KAAU,OAMN,GACJ,KAAU,QAAgG,GAC1G,KAAU,QAA0H,GAIpI,KAAU,OAAS,EACnB,KAAU,UAAkC,KAC5C,KAAU,oBAA4C,KAItD,KAAU,YAAc,GAWxB,KAAU,YAAuB,GAWjC,KAAU,aAKN,GACJ,KAAU,UAAuB,CAAC,EAAG,EAAG,EAAG,EAAG,MAAOR,IAgBrD,KAAU,cAA2B,KAAK,UAC1C,KAAU,eAAyC,KAAK,UACxD,KAAU,eAAyC,KAAK,UACxD,KAAU,cAAwC,KAAK,UAqS7C,kBAAgB5iN,GAA6C,CACrE,KAAK,eAAiB,KAAK,cAAgB,CAAC,EAAG,EAAG,EAAG,GACrD,KAAK,cAAgB,CAAC,GAAG,KAAK,SAAS,GACpCA,GAAG,OAAS,SAAW,CAAC,KAAK,eACzB,qBAAgB,UAAU,IAAI,eAAe,EAClD,KAAK,aAAa,cAAc,UAAU,UAAU,OAAO,iBAAiB,GAE9E,KAAK,eAAiB,GACjB,qBAAkB,KAAK,MAC5B,KAAK,mBAAmB,eAErB,CAAC,KAAK,cAAc,GAAK,CAAC,KAAK,cAAc,GAAK,CAAC,KAAK,YACzD,KAAK,mBAAqB,KAAK,QAAQ,MAAM,sBAAsB,EACrE,EAGQ,kBAAgBA,GAAc,CAEjC,qBAAgB,UAAU,OAAO,eAAe,EACrD,KAAK,aAAa,cAAc,UAAU,UAAU,IAAI,iBAAiB,EACzE,KAAK,mBAAmB,eAErBA,GAAG,OAAS,WAAa,KAAK,eAAiB,cAChD,KAAK,gBAAkB,IAGnB,MAAC,aAAAqjN,CAAgB,OAKvB,GAJA,KAAK,aAAe,GACpB,KAAK,eAAiB,GACtB,KAAK,aAAe,OAEjB,MAAK,QAIL,QAAK,UAAU,MAAQT,GAAoB,CAE5C,MAAMU,EAAK,KAAK,IAAI,KAAK,UAAU,MAAOR,EAAc,EAClDS,EAAcD,EAAK,KAAK,UAAU,MAIpC,IAAAE,EAAK,KAAK,UAAU,EAAID,GAAe,KAAK,eAAe,EAAIA,EAAc,KAAK,eAAe,GACjGE,EAAK,KAAK,UAAU,EAAIF,GAAe,KAAK,eAAe,EAAIA,EAAc,KAAK,eAAe,GAGlG,GAAAF,GAAgBA,IAAiB,SAAW,KAAK,cAAc,QAAU,KAAK,UAAU,MAAO,CAK1F,MAAA1yM,EAAc,KAAK,IAAI,EAAG,KAAK,IAAI,EAAI,KAAK,eAAe,EAC3D+yM,EAAK,KAAK,IAAI,KAAK,eAAe,CAAC,EAAI/yM,EACvCgzM,EAAK,KAAK,IAAI,KAAK,eAAe,CAAC,EAAIhzM,EAGvC6yM,GAAA,KAAK,IAAI,KAAK,eAAe,CAAC,EAAIE,EAAK,GAAI,CAAC,KAAK,cAAc,EAC/DD,GAAA,KAAK,IAAI,KAAK,eAAe,CAAC,EAAIE,EAAK,GAAI,CAAC,KAAK,cAAc,CACvE,CAEA,KAAM,CAAC/rG,CAAS,EAAI,KAAK,0BAA0B,CAAC,EAAG4rG,EAAI,EAAGC,EAAI,MAAOH,CAAG,GAC5E,KAAK,cAAgB1rG,EACrB,KAAK,aAAaA,CAAS,CACnB,WAAK,UAAU,MAAQgrG,IAC/B,KAAK,UAAU,CACjB,EAGF,KAAU,OAAS,CAAC,CAClB,eAAAgB,EACA,eAAAC,EACA,KAAA5hG,EACA,QAAA6hG,EACA,eAAAC,EACA,eAAAC,EACA,YAAAplL,EACA,YAAAC,EACA,WAAAolL,CAAA,IACiB,CACjBL,MAAmBzkL,GAAW,MAAQ,GACtC0kL,MAAmB1kL,GAAW,OAAS,GACvC4kL,MAAmB5kL,GAAW,MAAQ,GACtC6kL,MAAmB7kL,GAAW,OAAS,GAEvC,KAAK,aAAe,GAEpB,MAAM+kL,EAAqBpB,GAAiB,EACtC9iI,EAAQ8jI,IAAY,OAAY70L,GAAM,KAAK,cAAc,MAAQ60L,EAASjB,GAAgBqB,CAAkB,EAAKjiG,GAAQhzF,GAAM,KAAK,cAAc,MAAQg1L,EAAYpB,GAAgBqB,CAAkB,EACxMX,EAAcvjI,EAAQ,KAAK,cAAc,MACzC9yB,EAAU,KAAK,IAAI,KAAK,IAAI,KAAK,cAAc,EAAG,CAAC,CAAC,EACpDi3J,EAAU,KAAK,IAAI,KAAK,IAAI,KAAK,cAAc,EAAG,CAAC,CAAC,EAG1D,KAAK,eAAiB,CACpB,EAAGJ,EACH,EAAGC,CAAA,EAIL,MAAMI,EAAgBl3J,EAAU02J,EAC1BS,EAAgBF,EAAUN,EAE1B,CAAC,aAAAS,EAAc,aAAAC,GAAgB,KAAK,qBAAqB,CAAC,EAAGH,EAAe,EAAGC,EAAe,MAAOd,CAAY,GAEjH,CAAC3rG,CAAS,EAAI,KAAK,0BAA0B,CACjD,EAAG,KAAK,cAAc,EAAI0sG,EAAe1lL,EACzC,EAAG,KAAK,cAAc,EAAI2lL,EAAe1lL,EACzC,MAAAmhD,CAAA,CACD,EAED,KAAK,aAAa43B,CAAS,GAgGnB,+BAA4B,CACpC,CAAC,EAAAhyF,EAAG,EAAAkZ,EAAG,MAAAkhD,CAAK,EACZ9Q,EAAY,IACsB,CAClC,GAAG,CAAC,KAAK,mBAAoB,MAAO,CAAC,CAAC,EAAAtpD,EAAG,EAAAkZ,EAAG,MAAAkhD,CAAK,EAAG,GAAM,EAAI,EAE9D,IAAIwkI,EAAY,GACZC,EAAY,GAEV,MAAC,KAAA1gI,EAAM,KAAAC,EAAM,KAAA0gI,EAAM,KAAAC,GAAQ,KAAK,kBAAkB3kI,EAAO9Q,CAAS,EAE5D,OAAAs1I,EAAAjC,GAAU38L,EAAGo+D,EAAMD,CAAI,EAC/Bn+D,EAAAqJ,GAAMrJ,EAAGo+D,EAAMD,CAAI,EAEX0gI,EAAAlC,GAAUzjL,EAAG6lL,EAAMD,CAAI,EAC/B5lL,EAAA7P,GAAM6P,EAAG6lL,EAAMD,CAAI,EAEhB,CAAC,CAAC,EAAA9+L,EAAG,EAAAkZ,EAAG,MAAAkhD,CAAK,EAAGwkI,EAAWC,CAAS,GAsB7C,KAAU,aAAe,CAAC/5M,EAAQ,KAAK,UAAU,QAAU,CACzD,KAAK,qBAAL,KAAK,mBAAuB,KAAK,QAAQ,MAAM,sBAAsB,GAGlEA,IAAUk4M,KACX,KAAK,UAAU,EAAI,EACnB,KAAK,UAAU,EAAI,GAGhB,qBAAgB,MAAM,UAAY,eAAe,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,KAAK,UAAU,EAAE,QAAQ,CAAC,CAAC,kBAAkBl4M,EAAM,QAAQ,CAAC,CAAC,IAErJ,KAAK,aAAa,OAAO,UAAU,OAAO,WAAYA,GAASm4M,EAAc,EAC7E,KAAK,aAAa,MAAM,UAAU,OAAO,WAAYn4M,GAASo4M,EAAc,EAEvE,gBAAWp4M,IAAUk4M,EAAkB,GAuF9C,aAAW5iN,GAAkB,CAC3B,MAAM+Y,EAAS/Y,EAAE,OACd,GAAAgZ,EAAgBD,EAAQ,OAAO,EAChC,OAGF,GAAG,KAAK,gBAAiB,CACvB,KAAK,gBAAkB,OACvB,MACF,CAIA,GAFG,KAAK,0BAELA,EAAO,UAAY,IAAK,OAK3B,GAJIC,EAAgBD,EAAQ,uBAAuB,GACjD1I,GAAYrQ,CAAC,EAGZolB,GAAoB,CAClB,KAAK,0BACN,aAAa,KAAK,yBAAyB,EAEtC,cAAS,UAAU,IAAI,qBAAqB,EAG9C,+BAA4B,OAAO,WAAW,IAAM,CAClD,cAAS,UAAU,OAAO,qBAAqB,EACpD,KAAK,0BAA4B,GAChC,GAAG,EAEN,MACF,CAEG,GAAAF,GAAuBllB,CAAC,EACzB,OAGI,MAAA4kN,EAAY,KAAK,WAAa,GAC9B52M,EAAa,CAAC,wBAAyB,eAAgB,uBAAwB,sBAAuB,uBAAwB,gBAAgB,EACjJ42M,GACD52M,EAAW,KAAK,qBAAqB,EAGjC,MAAA62M,EAAsB72M,EAAW,KAAMhV,GAAM,CAAC,CAACggB,EAAgBD,EAAQ/f,CAAC,CAAC,EAC/E,GAAG,CAAC6rN,GAAuB,KAAK,MAAQ,SAAS,wBAAyB,CACxE,KAAK,YAAY,0BACjB,MACF,EAEuC,CAACA,GAAwB,CAACD,IAAc7rM,EAAO,UAAY,OAASA,EAAO,UAAY,WAC5H,KAAK,MAAM,CACb,EAGM,eAAa/Y,GAAqB,CAErC,GAAAonB,GAAe,eAAiB,EACjC,OAGF,MAAM3d,EAAMzJ,EAAE,IAEd,IAAIzC,EAAO,GACRkM,IAAQ,aACT,CAAC,KAAK,WAAa,KAAK,QAAQ,KAAK,QAC7BA,IAAQ,YAChB,CAAC,KAAK,WAAa,KAAK,QAAQ,KAAK,QAC7BA,IAAQ,KAAOA,IAAQ,IAC5B,KAAK,aACD,iBAAYA,IAAQ,GAAG,EAGvBlM,EAAA,IAGNyC,EAAE,SAAWA,EAAE,WAChB,KAAK,YAAc,IAGlBzC,GACD8S,GAAYrQ,CAAC,CACf,EAGM,aAAWA,GAAqB,CACnConB,GAAe,eAAiB,GAI9BpnB,EAAE,SAAWA,EAAE,UAClB,KAAK,YAAc,GAEhB,KAAK,WACN,KAAK,aAAa,EAEtB,EAtsBA,KAAK,SAAWtM,EAAU,SAC1B,KAAK,iBAAmByP,KAEnB,SAAMkxB,GAAO,KAAK,EAClB,eAAY,IAAIjkB,GAChB,yBAAsB,IAAIA,GAAqB,CAClD,WAAY,GACZ,WAAY,GACb,EACD,KAAK,UAAU,YACf,KAAK,oBAAoB,YACpB,mBAAgB,IAAI00M,GAEpB,cAAW,SAAS,cAAc,KAAK,EAC5C,KAAK,SAAS,UAAU,IAAI7B,GAAyB,QAAQ,EAExD,iBAAc,SAAS,cAAc,KAAK,EAC1C,iBAAY,UAAU,IAAI,UAAU,EACzC,KAAK,cAAgB,GAEf,MAAA8B,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI9B,EAAsB,EAE5C,MAAMn9E,EAAS,KAAK,OAAS,SAAS,cAAc,KAAK,EACzDA,EAAO,UAAU,IAAIm9E,GAAyB,UAAWA,GAAyB,SAAS,EAErF,MAAA+B,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI/B,GAAyB,cAAc,EAE3D,aAAQ,cAAc,EAAIjuL,GAAW,QAAS,CAAC,WAAY,GAAK,EAGrE,KAAK,OAAO,UAAY,SAAS,cAAc,KAAK,EACpD,KAAK,OAAO,UAAU,UAAU,IAAIiuL,GAAyB,UAAW,WAAW,EAC7E,MAAAgC,EAAc,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIhC,GAAyB,eAAe,EAElE,KAAK,OAAO,OAAS,SAAS,cAAc,KAAK,EACjD,KAAK,OAAO,OAAO,UAAU,IAAIA,GAAyB,OAAO,EAEjE,KAAK,OAAO,KAAO,SAAS,cAAc,KAAK,EAC/C,KAAK,OAAO,KAAK,UAAU,IAAIA,GAAyB,OAAO,EAE/DgC,EAAY,OAAO,KAAK,OAAO,OAAQ,KAAK,OAAO,IAAI,EAElD,YAAO,UAAU,OAAOA,CAAW,EAGlC,MAAAC,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIjC,GAAyB,UAAU,EAEjDE,EAAA,OAAO,CAAC,WAAY,SAAU,OAAO,CAAC,EAAE,QAASt1L,GAAS,CACnE,MAAMjK,EAASoR,GAAWnH,EAAc,CAAC,SAAU,GAAK,EACnD,aAAQA,CAAI,EAAIjK,EACrBshM,EAAW,OAAOthM,CAAM,EACzB,EAGD,KAAK,aAAa,UAAY,SAAS,cAAc,KAAK,EAC1D,KAAK,aAAa,UAAU,UAAU,IAAI,gBAAgB,EAE1D,KAAK,aAAa,OAASoR,GAAW,UAAW,CAAC,SAAU,GAAK,EACjE1kB,EAAiB,KAAK,aAAa,OAAQ,IAAM,KAAK,YAAY,EAAK,CAAC,EACxE,KAAK,aAAa,MAAQ0kB,GAAW,SAAU,CAAC,SAAU,GAAK,EAC/D1kB,EAAiB,KAAK,aAAa,MAAO,IAAM,KAAK,YAAY,EAAI,CAAC,EAEjE,kBAAa,cAAgB,IAAIq/B,GAAc,CAClD,KAAM,IACN,IAAKkzK,GACL,IAAKC,GACL,eAAgB,IACfF,EAAkB,EAChB,kBAAa,cAAc,eAC3B,kBAAa,cAAc,YAAY,CAC1C,QAAUl4M,GAAU,CACZ,MAAA0P,EAAM1P,EAAQ,KAAK,UAAU,MACnC,KAAK,QAAQ0P,CAAG,EAChB,KAAK,oBAAoB,cAC3B,EACA,YAAa,IAAM,CACjB,KAAK,aAAa,CACpB,EACA,UAAW,IAAM,CACf,KAAK,aAAa,CACpB,EACD,EAED,KAAK,aAAa,UAAU,OAAO,KAAK,aAAa,OAAQ,KAAK,aAAa,cAAc,UAAW,KAAK,aAAa,KAAK,EAE3HgL,IACF,KAAK,SAAS,OAAO,KAAK,aAAa,SAAS,EAIlD,KAAK,QAAQ,KAAO,SAAS,cAAc,KAAK,EAChD,KAAK,QAAQ,KAAK,UAAU,IAAI69L,GAAyB,UAAU,EAEnE,KAAK,QAAQ,UAAY,SAAS,cAAc,KAAK,EACrD,KAAK,QAAQ,UAAU,UAAU,IAAIA,GAAyB,YAAY,EAE1E,KAAK,QAAQ,MAAQ,SAAS,cAAc,KAAK,EACjD,KAAK,QAAQ,MAAM,UAAU,IAAIA,GAAyB,QAAQ,EAElE,KAAK,QAAQ,UAAU,OAAO,KAAK,QAAQ,KAAK,EAEhD,KAAK,QAAQ,KAAK,OAAO,KAAK,QAAQ,SAAS,EACvC8B,EAAA,OAAO,KAAK,QAAQ,IAAI,EAC3B,iBAAY,OAAOA,CAAO,EAG/BC,EAAW,OAAO,KAAK,QAAQ,cAAc,EAAG,KAAK,OAAO,SAAS,EAC9Dl/E,EAAA,OAAOk/E,EAAYE,CAAU,EAEpC,KAAK,QAAQ,KAAO,SAAS,cAAc,KAAK,EAChD,KAAK,QAAQ,KAAK,UAAY,GAAGjC,EAAsB,aAAaA,EAAsB,iBACrF,aAAQ,KAAK,OAAOvuN,GAAK,WAAY,GAAGuuN,EAAsB,kBAAmB,GAAGA,EAAsB,cAAc,CAAC,EAE9H,KAAK,QAAQ,KAAO,SAAS,cAAc,KAAK,EAChD,KAAK,QAAQ,KAAK,UAAY,GAAGA,EAAsB,aAAaA,EAAsB,kBACrF,aAAQ,KAAK,OAAOvuN,GAAK,OAAQ,GAAGuuN,EAAsB,kBAAmB,GAAGA,EAAsB,cAAc,CAAC,EAErH,qBAAkB,SAAS,cAAc,KAAK,EACnD,KAAK,gBAAgB,UAAU,IAAIA,GAAyB,SAAS,EAErE,KAAK,gBAAgB,OAAO,KAAK,QAAQ,KAAM,KAAK,QAAQ,IAAI,EAEhE,KAAK,SAAS,OAAO,KAAK,YAAyD,KAAK,OAAQ,KAAK,iBAIhG,gBAAW,aAAe,IAAM,CAC9B,aAAQ,KAAK,UAAU,OAAO,OAAQ,CAAC,KAAK,WAAW,SAAS,MAAM,EACtE,aAAQ,KAAK,UAAU,OAAO,OAAQ,CAAC,KAAK,WAAW,KAAK,MAAM,GAGzE,KAAK,YAAY,CACnB,CAvJA,IAAI,QAAS,CACX,OAAO,KAAK,WAAW,OACzB,CAEA,IAAI,OAAOv4M,EAAO,CAChB,KAAK,WAAW,QAAUA,CAC5B,CAmJU,cAAe,CACvB4F,EAAiB,KAAK,QAAQ,SAAU,KAAK,eAAe,EAC5D,CAAC,KAAK,QAAQ,MAAO,KAAK,QAAQ,cAAc,EAAG,KAAK,oBAAoB,SAAS,EAAE,QAAS/K,GAAO,CACrG+K,EAAiB/K,EAAI,KAAK,MAAM,KAAK,IAAI,CAAC,EAC3C,EAEA,CAAC,CAAC,GAAI,KAAK,QAAQ,IAAI,EAAG,CAAC,EAAG,KAAK,QAAQ,IAAI,CAAC,EAA8B,QAAQ,CAAC,CAAC4/M,EAAYvhM,CAAM,IAAM,CAExGA,EAAA,iBAAiB,QAAU5jB,GAAM,CACtCqQ,GAAYrQ,CAAC,EACV,MAAK,iBAEH,gBAAW,GAAGmlN,CAAU,EAC9B,EACF,EAEgB70M,EAAA,KAAK,QAAQ,OAAQ,IAAM,CACvC,KAAK,UAAW,KAAK,UAAU,EAEhC,KAAK,YAAY,EAAI,CACvB,CACD,EAID,KAAK,SAAS,iBAAiB,QAAS,KAAK,OAAO,EAEpD,KAAK,WAAW,OAAS,CAAC7S,EAAMmzB,IAAU,CACrCA,EAAO,KAAK,YAAYnzB,CAAI,EAC1B,KAAK,YAAYA,CAAI,GAGtB,MAAA2nN,EAAiB,CAAC5mL,EAAeC,IAAkB,CACvD,KAAM,CAAC7Y,EAAGkZ,CAAC,EAAI,CAACN,EAAQ,KAAK,eAAe,EAAGC,EAAQ,KAAK,eAAe,CAAC,EACtE,CAACm5E,EAAW4sG,EAAWC,CAAS,EAAI,KAAK,0BAA0B,CACvE,EAAG,KAAK,UAAU,EAAI7+L,EACtB,EAAG,KAAK,UAAU,EAAIkZ,EACtB,MAAO,KAAK,UAAU,MACvB,EAED,YAAK,cAAgB,CACnB,EAAAlZ,EACA,EAAAkZ,CAAA,EAGF,KAAK,eAAiB,CACpB,EAAGN,EACH,EAAGC,CAAA,EAGL,KAAK,aAAam5E,CAAS,EAEpB,CAAC,UAAA4sG,EAAW,UAAAC,EAAS,EAGxBY,EAAqBjpL,GAAS,IAAM,CACnC,qBAAkB,KAAK,KAAI,EAC/B,IAAK,GAAO,EAAI,EAEd,wBAAqBA,GAAS,IAAM,CACvC,KAAK,aAAa,GACjB,IAAK,GAAO,EAAI,EAEd,kBAAe,IAAI4B,GAAa,CACnC,QAAS,KAAK,SACd,QAAS,KAAK,aACd,aAAc,KAAK,aACnB,QAAS,CAACQ,EAAOC,EAAOz+B,EAAGslN,IAAe,CACxC,GAAGlyJ,KACD,OAGF,GAAG,KAAK,WAAa,CAAC,KAAK,aAAc,CACpBiyJ,IAEnB,KAAK,aAAerlN,EAAE,KACtB,KAAM,CAAC,UAAAwkN,EAAW,UAAAC,CAAA,EAAaW,EAAe5mL,EAAOC,CAAK,EAC7C6mL,IAAA,CAACd,EAAW,CAACC,CAAS,EAEnC,MACF,CAEG,YAAK,cAAgB,CAACr/L,GACvB,OAGe,KAAK,IAAIoZ,CAAK,EAAIW,GAAW,MAChC,IAAM,KAAK,IAAIX,CAAK,EAAI,KACjCA,EAAQ,EACJ,aAAQ,KAAK,QAEb,aAAQ,KAAK,QAGb,IAGS,KAAK,IAAIC,CAAK,EAAIU,GAAW,OAChC,IAAM,KAAK,IAAIV,CAAK,EAAI,KACrC,KAAK,MAAM,EACJ,IAGF,EACT,EACA,OAAQ,KAAK,OACb,cAAe,CAAC,CAAC,QAAAwlD,EAAS,QAAAimC,KAAa,CACrC,GAAG,KAAK,UACN,KAAK,UAAU,MACV,CACL,MAAMlqC,EAAQ4iI,GAAqB,EAC9B,0BAAqB3+H,EAASimC,EAASlqC,CAAK,CACnD,CACF,EACA,kBAAoBhgF,GAEf,EAAAozD,GACD,GAAAjuC,GAAcnlB,EAAE,OAAuB,KAAK,aAAa,SAAS,GAClEgZ,EAAgBhZ,EAAE,OAAQ,gBAAgB,GAC1CgZ,EAAgBhZ,EAAE,OAAQ,sBAAsB,GAC/CgZ,EAAgBhZ,EAAE,OAAQ,qBAAqB,GAAKA,EAAE,OAAS,SAMpE,OAAQ,GAET,CACH,CAmHU,qBAAqB4lB,EAAWkZ,EAAWkhD,EAAe,CAC5D,MAAC,aAAAskI,EAAc,aAAAC,CAAA,EAAgB,KAAK,qBAAqB,CAAC,EAAA3+L,EAAG,EAAAkZ,EAAG,MAAAkhD,CAAA,CAAM,EACtE43B,EAAY,KAAK,0BAA0B,CAC/C,EAAG0sG,EACH,EAAGC,EACH,MAAAvkI,CAAA,CACD,EAAE,CAAC,EAEJ,KAAK,aAAa43B,CAAS,CAC7B,CAEU,aAAaA,EAAsB,CAC3C,KAAK,UAAYA,EACZ,gBAAWA,EAAU,KAAK,CACjC,CAGU,qBAAqB,CAAC,EAAAhyF,EAAG,EAAAkZ,EAAG,MAAAkhD,GAInC,CACM,OACL,aAAcp6D,EAAIo6D,EAAQp6D,EAC1B,aAAckZ,EAAIkhD,EAAQlhD,CAAA,CAE9B,CAEU,WAAWyrC,EAAkB,CACrC,MAAMhF,EAAY,KAAK,UACjB6d,EAAO7Y,IAAW,OAOxB,IANG,KAAK,aAAa,cAAc,WAAa,KAAK,eAC1CA,EAAA,IAGXA,MAAW,CAAChF,GAETA,IAAcgF,EAQd,IAJHja,GAAkB,KAAK,QAAQ,OAASia,EAAoB,UAAX,QAAoB,EACrE,KAAK,aAAa,UAAU,UAAU,OAAO,aAAc,KAAK,UAAYA,CAAM,EAClF,KAAK,SAAS,UAAU,OAAO,aAAcA,CAAM,EAEhD6Y,GAAQ,CAAC7Y,EAAQ,CAClB,MAAMg7I,EAAYh7I,EAAS,KAAK,UAAU,MAAQq4I,GAClD,KAAK,aAAa2C,CAAS,EACtB,kBAAa,cAAc,YAAYA,CAAS,CACvD,CAEG,KAAK,aACN,KAAK,YAAY,aAAah7I,EAAS,GAAQ,MAAS,EAE5D,CAEU,YAAYnwD,EAAc,CAClC,KAAK,QAAQuoM,IAAavoM,EAAM,EAAI,GAAG,CACzC,CAEU,WAAY,CACpB,KAAK,aAAa,CAChB,EAAG,EACH,EAAG,EACH,MAAOwoM,EAAA,CACR,CACH,CAEU,WAAWl4M,EAAQ,KAAK,UAAU,MAAO,CACjD,KAAK,UAAU,MAAQA,EAClB,kBAAa,cAAc,YAAYA,CAAK,EACjD,KAAK,aAAaA,CAAK,CACzB,CAEU,QAAQA,EAAe,CAC/B,KAAK,cAAgB,KAAK,UAC1B,KAAK,OAAO,CACV,QAASA,EACT,eAAgB,EAChB,eAAgB,EAChB,eAAgB,EAChB,eAAgB,EAChB,YAAa,EACb,YAAa,EACd,EACD,KAAK,cAAgB,KAAK,UAC1B,KAAK,mBAAmB,CAC1B,CAEU,eAAgB,CACjB,YAAK,gBAAkB0a,GAAqB,GAAK,CAC1D,CAsBU,kBAAkB46D,EAAQ,KAAK,UAAU,MAAO9Q,EAAY,EAAG,CACpE,IAAC,KAAK,mBACA,OAAC,KAAM,EAAG,KAAM,EAAG,KAAM,EAAG,KAAM,GAG3C,MAAM+U,GAAW9kD,GAAW,MAAQA,GAAW,MAAQ6gD,GAAS,EAC1DkqC,GAAW/qF,GAAW,OAASA,GAAW,OAAS6gD,GAAS,EAI5D+D,EAAO,KAAK,IAAI,CAAC,KAAK,mBAAmB,KAAO/D,EAAOiE,CAAO,EAC9DD,EAAO7kD,GAAW,MAAQ,KAAK,mBAAmB,MAAQ6gD,EAE1D0kI,EAAO,KAAK,IAAI,CAAC,KAAK,mBAAmB,IAAM1kI,EAAQ9Q,EAAWg7C,CAAO,EACzEy6F,EAAOxlL,GAAW,OAAS,KAAK,mBAAmB,OAAS6gD,EAElE,MAAO,CAAC,KAAA+D,EAAM,KAAAC,EAAM,KAAA0gI,EAAM,KAAAC,CAAI,CAChC,CAmBU,iBAAiB9/L,EAAkC,CACrD,MAAA2gM,EAAgB/1J,GAAiB,CAAC,cAAe,CAAC,WAAY,IAAO,UAAW,cAAe,QAAA5qC,CAAQ,GACxG,YAAO,OAAO2gM,CAAa,CAClC,CAEO,MAAM,EAAgB,CAO3B,GANA,KAAK,eAAe,EAEjB,GACDn1M,GAAY,CAAC,EAGZ,KAAK,QACN,OAAO,KAAK,yBAGd,GAAG,KAAK,yBAA0B,OAAO,QAAQ,SAEjD,KAAK,QAAU,GACf,KAAK,cAAc,kBAEhB,KAAK,gBACkBkV,GAAA,WAAW,KAAK,cAAc,EAGxD,KAAK,cAAc,QACd,YAAO,wBAAwB,UAEpC,MAAMnmB,EAAU,KAAK,iBAAiB,KAAK,QAAQ,QAAS,EAAI,EAAE,KAAK,CAAC,CAAC,eAAAysC,KAAoBA,CAAc,EAE3G,YAAK,WAAW,QACf,KAAK,WAAqC,SAAY,KAAK,WAAqC,QAAQ,EACzG,KAAK,gBAAkB,KACvB,KAAK,OAAS,GACV,OAAe,iBAAmB,OACnC,OAAe,eAAiB,QASnC,KAAK,sBAAsB,EAE3BzsC,EAAQ,QAAQ,IAAM,CACpB,KAAK,SAAS,SACd,KAAK,cAAc,EAAK,EACxB,KAAK,iBAAiB,SAAQ,CAC/B,EAEMA,CACT,CAEU,cAAcwhC,EAAiB,CACpC,KAAK,gBAAkBA,IAI1B,KAAK,cAAgBA,EACrBxZ,GAAe,oBAAsBwZ,EACrC8lB,GAAqB,iBAAiB9lB,CAAM,EAC9C,CAEU,sBAAsBA,EAAiB,CAC5CA,EAAQ,KAAK,mBAAmB,EAC9B,KAAK,sBAAsB,CAClC,CAEU,uBAAwB,CACzB,2BAAoB,UAAW,KAAK,SAAS,EAC7C,2BAAoB,QAAS,KAAK,OAAO,CAClD,CAEU,oBAAqB,CACtB,wBAAiB,UAAW,KAAK,SAAS,EAC1C,wBAAiB,QAAS,KAAK,OAAO,CAC/C,CAEO,kBAAkByuB,EAAmB,CACrC,kBAAa,aAAaA,CAAS,CAC1C,CAoGA,MAAgB,iBAAiBt2C,EAAqB0sM,EAAU,GAAO7mB,EAAY,EAAG,CACpF,KAAK,cAAc,gBAAgB,EAE7B,MAAA8mB,EAAQ,KAAK,QAAQ,MAEvBD,GACFC,EAAM,gBAAgB,EAIxB,MAAMH,EAAY,KAAK,WAAaE,EAAyB,KAAK,UAAU,MAAQ7C,GAC9C,KAAK,sBAAsB8C,CAAK,EACnED,IACIC,EAAM,WACX,MAAMt2L,GAAU,GAGlB,MAAMu2L,EAAY/mB,IAAc,EAE1BhuL,EAAQX,GAAS,YAAY,YAAY,EAAK01M,EAAY3C,GAAuBD,GAAwB,EAY3G,IAAA6C,EAEA7+L,EACDhO,IACED,GAAaC,CAAM,GAAKA,EAAO,UAAU,SAAS,WAAW,GACjD6sM,EAAA7sM,EACbgO,EAAOhO,EAAO,yBACNA,aAAkB,iBAAmBA,EAAO,yBAAyB,yBAChE6sM,EAAA5sM,EAAgBD,EAAQ,YAAY,EACjDgO,EAAO6+L,EAAW,yBACV7sM,EAAO,UAAU,SAAS,wBAAwB,IAC7C6sM,EAAA5sM,EAAgBD,EAAQ,2BAA2B,EAChEgO,EAAO6+L,EAAW,wBAGfH,GAAW1sM,EAAO,sBAAwB,SAASgO,EAAK,OACzDhO,EAAS6sM,EAAa7+L,EAAO,UAK/BhO,IACFA,EAAS,KAAK,QAAQ,OAGpBgO,IACF6+L,EAAa7sM,EAAO,cACpBgO,EAAOhO,EAAO,yBAGhB,IAAI8sM,EAAc,GACf,GAAA9sM,IAAW,KAAK,QAAQ,MACX8sM,EAAA,WACN,CAAC9sM,EAAO,UAAU,SAAS,wBAAwB,EAAG,CACxD,MAAAkgD,EAAkBjgD,EAAgB4sM,EAAY,YAAY,EAC1D1sJ,EAAcpgB,GAAe8sK,EAAY3sJ,EAAiB,EAAI,EAEjEwsJ,GAAWvsJ,IAAgBA,EAAY,SAAS,WAAa,GAAKA,EAAY,SAAS,aAAe,IACvGngD,EAAS,KAAK,QAAQ,MACtB6sM,EAAa7sM,EAAO,cACpBgO,EAAOhO,EAAO,yBACNmgD,IAAgBA,EAAY,SAAS,WAAa,GAAKA,EAAY,SAAS,aAAe,KACrF2sJ,EAAA,GAElB,CAEA,MAAMntK,EAAgB,KAAK,QAAQ,MAAM,sBAAsB,EAE/D,IAAIk/D,EAAY,GACZntF,EACAC,EAEDi7L,GACDl7L,EAAOm0K,IAAc,EAAIz/J,GAAW,MAAQ,CAACuZ,EAAc,MAC3DhuB,EAAMguB,EAAc,MAEpBjuB,EAAO1D,EAAK,KACZ2D,EAAM3D,EAAK,KAWA6wF,GAAA,eAAentF,CAAI,MAAMC,CAAG,SAWrC,IAAA3b,EACJ,GAAGgK,aAAkB,kBAAoBA,aAAkB,kBAAoBA,EAAO,UAAY,MAAO,CACvG,GAAG2sM,EAAM,mBAAqBA,EAAM,kBAAkB,UAAU,SAAS,uBAAuB,EAAG,CACjG32M,EAAW22M,EAAM,kBAEX,MAAAn6M,EAASwD,EAAS,cAAc,eAAe,EAClD,GAAAxD,GAAU,CAACs6M,EAAa,CACnB,MAAAv/J,EAAQ/6C,EAAO,cAAc,OAAO,EACvC+6C,IACDA,EAAM,MAAM,EACZ/6C,EAAO,YAAY+6C,CAAK,EAE5B,CAEIv3C,EAAS,MAAM,UACX22M,EAAA,UAAU,OAAO,QAAQ,EAC1B,mBAAc32M,EAAU2pC,EAAe3xB,CAAI,EAC3C2+L,EAAM,WACLA,EAAA,UAAU,IAAI,QAAQ,EAC9B,MAEW32M,EAAA,SAAS,cAAc,KAAK,EACvCA,EAAS,UAAU,IAAI,yBACvB22M,EAAM,QAAQ32M,CAAQ,EAGxBA,EAAS,MAAM,QAAU,UAAUgY,EAAK,KAAK,eAAeA,EAAK,MAAM,0BAA0B2xB,EAAc,MAAQ3xB,EAAK,KAAK,KAAK2xB,EAAc,OAAS3xB,EAAK,MAAM,OAC1K,CAEM2+L,EAAA,MAAM,MAAQhtK,EAAc,MAAQ,KACpCgtK,EAAA,MAAM,OAAShtK,EAAc,OAAS,KAItC,MAAAygB,EAASpyC,EAAK,MAAQ2xB,EAAc,MACpC0gB,EAASryC,EAAK,OAAS2xB,EAAc,OACvCitK,IACW/tG,GAAA,WAAWz+C,CAAM,IAAIC,CAAM,QAG1C,IAAI8hH,EAAe,OAAO,iBAAiB0qC,CAAU,EAAE,iBAAiB,eAAe,EAQpF,GANY1qC,EADI0mC,GAAkB1mC,CAAY,EACvB,IAAK32K,GAAO,SAASA,CAAC,EAAI40D,EAAU,IAAI,EAAE,KAAK,GAAG,EACxEwsJ,IACFD,EAAM,MAAM,aAAexqC,GAI1BuqC,GAAWF,IAAc,EAAG,CAC7B,MAAM96L,EAAO1D,EAAK,MAAQoY,GAAW,MAAQg6B,EAASpyC,EAAK,OAAS,EAC9D2D,EAAM3D,EAAK,KAAOoY,GAAW,OAASi6B,EAASryC,EAAK,QAAU,EAC/D,qBAAgB,MAAM,UAAY,UAAUoyC,CAAM,WAAWC,CAAM,KAAK3uC,CAAI,KAAKC,CAAG,SAEzFg7L,EAAM,MAAM,UAAY9tG,EAGViuG,IAAAH,EAAM,MAAM,QAAU,KAMlC,IAAAj+L,EACJ,MAAMnU,EAAQyF,EAAO,UAAU,SAAS,QAAQ,EAE1C7Y,EAAW,KAAK,yBAA2BC,GAAsB,EACjE4C,EAAM,CAAC,eAAgB7C,GAEvB6P,EAAU,WAAW,IAAM,CAC5B,CAAC7P,EAAS,aAAe,CAACA,EAAS,YACpCA,EAAS,QAAQ,GAElB,GAAI,EAYP,GAVAA,EAAS,QAAQ,IAAM,CACrB,KAAK,cAAc,eAAe,EAE/B,KAAK,2BAA6BA,IACnC,KAAK,yBAA2B,MAGlC,aAAa6P,CAAO,EACrB,EAEG01M,EAuJF,OAAG1sM,aAAkB,gBACZ0O,EAAAi+L,EAAM,cAAc,MAAM,EAE9Bj+L,GACD,KAAK,aAAaA,EAAMixB,EAAeygB,EAAQvoD,EAAO,GAAO0C,EAAO4nK,CAAY,GAIpF,KAAK,kBAAkB,EAAK,EAI5B,WAAW,IAAM,CACfwqC,EAAM,MAAM,aAAexqC,EAExBwqC,EAAM,oBACNA,EAAM,kBAAkC,MAAM,aAAexqC,EAChE,EACCtqK,EAAQ,CAAC,EAEZ,WAAW,IAAM,CACf80M,EAAM,gBAAgB,EACtBA,EAAM,UAAU,OAAO,SAAU,SAAU,QAAQ,EACnDA,EAAM,MAAM,QAAU,iBAEtBxlN,EAAS,QAAQ,GAChB0Q,CAAK,EAEF80M,EAAA,UAAU,OAAO,SAAS,EAEzB3iN,EArLI,CACP,IAAA+iN,EACAx7C,EAGJ,MAAMl2H,EAAW,gCACX2xK,EAAYhtM,EAAO,QAAQq7B,CAAQ,EAAIr7B,EAAO,cAAgBA,EAC9D1iB,EAAW,MAAM,KAAK0vN,EAAU,iBAAiB3xK,CAAQ,CAAC,EAChE,GAAG/9C,EAAS,OAAQ,CAClB0iB,EAAS1iB,EAAS,MACZ,MAAAolB,EAAS,SAAS,cAAc,QAAQ,EACxClD,EAAUkD,EAAO,WAAW,IAAI,EACnC1C,aAAkB,kBACnB0C,EAAO,MAAQ1C,EAAO,aACtB0C,EAAO,OAAS1C,EAAO,eACfA,aAAkB,kBAC1B0C,EAAO,MAAQ1C,EAAO,WACtB0C,EAAO,OAAS1C,EAAO,aACfA,aAAkB,oBAC1B0C,EAAO,MAAQ1C,EAAO,MACtB0C,EAAO,OAAS1C,EAAO,QAGzB0C,EAAO,UAAY,yCACXlD,EAAA,UAAUQ,EAAgD,EAAG,CAAC,EACnE,KAAK,MACWitM,GAAAztM,EAAS,EAAG,EAAGkD,EAAO,MAAOA,EAAO,OAAQ,EAAG,CAAC,EAE1D1C,EAAA0C,CACX,CAGA,GAAG1C,EAAO,UAAY,OAASD,GAAaC,CAAM,EAAG,CAE7C,MAAAoB,EADS,MAAM,KAAKpB,EAAO,iBAAiB,KAAK,CAAC,EACnC,MACrB,GAAGoB,EACD2rM,EAAe,IAAI,MACnBx7C,EAAMnwJ,EAAM,IACZurM,EAAM,OAAOI,CAAY,MACpB,CACC,MAAAvgN,EAAKwT,EAAO,cAAc,qBAAqB,EACrD,GAAGxT,EAAI,CACC,MAAA0gN,EAAM1gN,EAAG,UAAU,EAAI,EAC7B0gN,EAAI,YAAc,GAClBl3M,EAAS,OAAOk3M,CAAG,CACrB,CACF,UAGQltM,aAAkB,iBAC1B+sM,EAAe,IAAI,MACnBx7C,EAAMvxJ,EAAO,YACLA,aAAkB,iBAC1B+sM,EAAexxM,GAAY,CAAC,WAAYoxM,EAAM,iBAAiB,MAAM,EACrEI,EAAa,IAAM/sM,EAAO,YAClBA,aAAkB,cAAe,CACnC,MAAAmtM,EAASntM,EAAO,QAAQ,OACxBotM,EAAYD,EAAS,MAErB,CAAC,MAAApsM,EAAO,OAAAC,CAAU,EAAA2+B,EAElB0tK,EAAS,SAAS,gBAAgB,6BAA8B,KAAK,EAC3EA,EAAO,eAAe,KAAM,QAAS,GAAKtsM,CAAK,EAC/CssM,EAAO,eAAe,KAAM,SAAU,GAAKrsM,CAAM,EAGjDqsM,EAAO,eAAe,KAAM,UAAW,OAAOtsM,CAAK,IAAIC,CAAM,EAAE,EACxDqsM,EAAA,eAAe,KAAM,sBAAuB,eAAe,EAE3DA,EAAA,mBAAmB,YAAartM,EAAO,kBAAkB,UAAU,QAAQmtM,EAAQC,CAAS,CAAC,EAC7FC,EAAA,mBAAmB,YAAartM,EAAO,iBAAiB,UAAU,QAAQmtM,EAAQC,CAAS,CAAC,EAGnG,MAAM5qN,EAAO6qN,EAAO,kBACdtxN,EAAMyG,EAAK,kBAAkB,kBACnC,GAAGzG,aAAe,cAAe,CAC/B,IAAI8iH,EAAY9iH,EAAI,eAAe,KAAM,WAAW,EACpD8iH,EAAYA,EAAU,QAAQ,kDAAmD,CAACt5G,EAAOsnB,EAAGkZ,EAAGunL,GAAIC,MACjG1gM,EAAI,CAACA,EACFA,IAAM,EACPA,EAAI9L,EAAS,EAAIq/C,EAEjBvzC,EAAI,EAAIuzC,EAGNr6B,EAAA/kB,EAEG,aAAa6L,CAAC,KAAKkZ,CAAC,WAAW,CAACunL,GAAKltJ,CAAM,KAAK,CAACmtJ,GAAKltJ,CAAM,IACpE,EACGtkE,EAAA,eAAe,KAAM,YAAa8iH,CAAS,EAG/CnwF,EAAOlsB,EAAK,kBAAkB,iBAG1B,IAAA3E,EACE,MAAAm/C,EAAuCmlI,EAAa,MAAM,GAAG,EAAE,IAAKzsJ,GAAM,SAASA,CAAC,CAAC,EACxFnb,EAAW1c,EAAAurN,GAAiB,EAAG,EAAGroM,EAAQ,EAAIq/C,EAAQp/C,EAAQ,GAAGg8B,CAAE,EAC7Dn/C,EAAAurN,GAAiB,EAAIhpJ,EAAQ,EAAGr/C,EAAQ,EAAIq/C,EAAQp/C,EAAQ,GAAGg8B,CAAE,EACrEtuB,EAAA,eAAe,KAAM,IAAK7wB,CAAC,CAClC,CAEA,MAAMi/D,EAAgBuwJ,EAAO,iBAC7BvwJ,EAAc,eAAe,KAAM,QAAS,GAAKnd,EAAc,KAAK,EACpEmd,EAAc,eAAe,KAAM,SAAU,GAAKnd,EAAc,MAAM,EAEtEgtK,EAAM,QAAQU,CAAM,OACZrtM,aAAkB,oBACX+sM,EAAA/sM,GAGdhK,IACDA,EAAS,MAAM,aAAemsK,EAE3B4qC,GACD/2M,EAAS,OAAO+2M,CAAY,GAIjBA,EAAAJ,EAAM,cAAc,YAAY,EAC5CI,aAAwB,mBACZA,EAAA,UAAU,IAAI,WAAW,EAClC/2M,IACW+2M,EAAA,MAAM,MAAQptK,EAAc,MAAQ,KACpCotK,EAAA,MAAM,OAASptK,EAAc,OAAS,MAGlD4xH,GACK,MAAAj7J,GAA0By2M,EAAcx7C,CAAG,GAYrDo7C,EAAM,MAAM,QAAU,GAEtB70M,GAAQ,IAAM,CACZ60M,EAAM,UAAU,IAAIC,EAAY,SAAW,QAAQ,EACpD,EAwCG,OAAAD,EAAA,UAAU,IAAI,SAAS,EAK7B,MAAMt2L,GAAU,EAOhBs2L,EAAM,MAAM,UAAY,eAAehtK,EAAc,IAAI,MAAMA,EAAc,GAAG,uBAEhEmtK,IAAAH,EAAM,MAAM,QAAU,IAEnC32M,GACI,mBAAcA,EAAU2pC,EAAe3xB,CAAI,EAKlD,WAAW,IAAM,CACf2+L,EAAM,MAAM,aAAe,GAExBA,EAAM,oBACNA,EAAM,kBAAkC,MAAM,aAAe,GAElE,EAAG,GAEHA,EAAM,QAAQ,QAAU,GAAK,WAAW,IAAM,CACtCA,EAAA,UAAU,OAAO,SAAU,SAAS,EAEvC32M,IACE22M,EAAM,cAAc,OAAO,EACtBA,EAAA,UAAU,OAAO,QAAQ,EAC/B32M,EAAS,MAAM,QAAU,GACpB22M,EAAM,YAOTA,EAAA,UAAU,IAAI,SAAU,eAAe,EAMvCA,EAAA,UAAU,IAAI,QAAQ,EAC5B,OAAOA,EAAM,QAAQ,QAErBxlN,EAAS,QAAQ,GAChB0Q,CAAK,EAEL6W,GACD,KAAK,aAAaA,EAAMixB,EAAeygB,EAAQvoD,EAAO,GAAM0C,EAAO4nK,CAAY,EAG1En4K,CACT,CAEU,kBAAkB69B,EAAiB,CACxCA,EACI,cAAS,UAAU,IAAI,QAAQ,GAE/B,cAAS,UAAU,IAAI,WAAW,EACvC,WAAW,IAAM,CACV,cAAS,UAAU,OAAO,QAAQ,GACtC,CAAC,EAER,CAEU,cAAc7xB,EAA0B2pC,EAAwB3xB,EAAe,CAQjF,MAAAw/L,EAAa7tK,EAAc,MAAQA,EAAc,OAEnD,IAAC,MAAA5+B,EAAO,OAAAC,CAAU,EAAAgN,EAInBw/L,EAAa,EACdzsM,EAAQC,EAASwsM,EAEjBxsM,EAASD,EAAQysM,EAKnBx3M,EAAS,MAAM,QAAU,UAAU+K,CAAK,eAAeC,CAAM,0BAA0B2+B,EAAc,MAAQ5+B,CAAK,KAAK4+B,EAAc,OAAS3+B,CAAM,OAEtJ,CAEU,aAAa0N,EAAsBV,EAAeoyC,EAAgBvoD,EAAe41M,EAAkBlzM,EAAgB4nK,EAAsB,CAC3I,MAAAjxH,EAAQ,KAAK,MACb,CAAC,MAAAnwC,EAAO,OAAAC,CAAU,EAAAgN,EACxBnW,EAAQA,EAAQ,EAEV,MAAAmlC,EAAKmlI,EAAa,MAAM,GAAG,EAAE,IAAKzsJ,GAAM,SAASA,CAAC,CAAC,EAEnDg4L,EAAO,IAAM,CACX,MAAAjwL,EAAO,KAAK,MAAQyzB,EAEtB,IAAAn7B,EAAWle,EAAQ4lB,EAAO5lB,EAAQ,EACnCke,EAAW,IAAcA,EAAA,GACzB03L,IAAS13L,EAAW,EAAIA,GAE3B,MAAM43L,EAAwC3wK,EAAG,IAAK,GAAM,EAAIjnB,CAAQ,EAEpE,IAAAl4B,EACD0c,EAAW1c,EAAAurN,GAAiB,EAAG,EAAGroM,EAAS,EAAIq/C,EAASrqC,EAAW/U,EAAQ,GAAG2sM,CAAG,EAC3E9vN,EAAAurN,GAAiB,EAAIhpJ,EAASrqC,EAAU,EAAGhV,EAA4CC,EAAQ,GAAG2sM,CAAG,EACzGj/L,EAAA,eAAe,KAAM,IAAK7wB,CAAC,EAE7B4/B,EAAO5lB,GAAOC,GAAQ41M,CAAI,GAI1BA,GACP,CAEU,sBAAsBf,EAAoB,CAClD,GAAGA,EAAM,UAAU,SAAS,QAAQ,EAAG,CAErC,MAAM3+L,EAAO,KAAK,QAAQ,MAAM,sBAAsB,EACtD2+L,EAAM,MAAM,UAAY,eAAe3+L,EAAK,IAAI,MAAMA,EAAK,GAAG,QACxD2+L,EAAA,UAAU,OAAO,QAAQ,EAC1BA,EAAM,WACLA,EAAA,UAAU,OAAO,eAAe,CACxC,CACF,CAEU,aAAaA,EAAoBiB,EAAS,GAAM,CACxD,MAAMC,EAAUznL,GAAW,MAE3B,KAAK,sBAAsBumL,CAAK,EAG1BA,EAAA,UAAU,IAAI,QAAQ,EAEzBA,EAAM,QAAQ,SACF,cAACA,EAAM,QAAQ,OAAO,EAG/B,MAAA3+L,EAAO2+L,EAAM,wBAEbmB,EAAenB,EAAM,MAAM,UAAU,QAAQ,sBAAuB,CAACpnN,EAAOwoN,IAAO,CACvF,MAAMlhM,EAAI+gM,EAAS,CAAC5/L,EAAK,MAAQ6/L,EAGjC,OAAOtoN,EAAM,QAAQwoN,EAAIlhM,EAAI,IAAI,EAClC,EAGD8/L,EAAM,MAAM,UAAYmB,EAExB,WAAW,IAAM,CACfnB,EAAM,iBAAiB,UACvBA,EAAM,OAAO,GACZ,GAAG,CACR,CAEU,aAAc,CAChB,MAAAqB,EAAW,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,oBAAoB,EAC3CA,EAAS,MAAM,QAAU,OACzBA,EAAS,iBAAmB,KAAK,iBAAiB,MAAM,SAErD,KAAK,QAAQ,MACG,KAAK,QAAQ,MACrB,cAAc,OAAOA,CAAQ,EAEjC,qBAAgB,OAAOA,CAAQ,EAG/B,KAAK,QAAQ,MAAQA,CAC9B,CAEU,kBAAkBhuM,EAAqB7b,EAAakvB,EAA0B,CAEhF,MAAA7mB,EAAKwT,EAAO,QAAQ,gBAAkBqT,EAAUrT,EAASA,EAAO,cAAcqT,CAAO,EAC3F,GAAG7mB,GAAM,CAACyT,EAAgBD,EAAQ,UAAU,EAAG,CAC1C,GAAAC,EAAgBD,EAAQ,YAAY,EAAG,CAExC,MAAMxE,EAAYwE,EAAO,cAAc,cAAc,cAAc,sBAAsB,EACzF,GAAGxE,EAAW,CACZ,GAAG6X,IAAY,QAAS,CACnB7X,EAAU,UAAU,SAAS,QAAQ,GACtCA,EAAU,MAAM,EAIlB,MACF,CAEAA,EAAU,OAAO,CACnB,CACF,CAEIhP,EAAwB,aAAa,KAAK,IAAMrI,GAClDqiB,GAAmBha,EAAIrI,CAAG,EAIzBqI,EAAG,UAAU,SAAS,WAAW,GAAKA,EAAG,cAAc,UAAU,SAAS,0BAA0B,GAClGA,EAAA,UAAU,OAAO,WAAW,CAEnC,CAIF,CAEU,cAAcisE,EAAyBniB,EAAmB,CAC5D,MAAA23J,EAAWx1I,EAAO,WACpB,IAAAy1I,EACJ,GAAGD,EACDC,EAAmB7gN,GAAc,CAC/B,OAAQorE,EACR,OAAQ,GACR,cAAe,GACf,UAAW,GACZ,MACI,CACL,MAAMz9E,EAAQkzN,EAAmB,SAAS,cAAc,MAAM,EACxDlzN,EAAA,OAAOK,GAAco9E,CAAM,CAAC,EAC5Bz9E,EAAA,UAAU,IAAI,YAAY,CAClC,CAEM,MAAAmzN,EAAY,KAAK,OAAO,SACxBC,EAA4B,KAAK,OAAO,uBACxCviE,EAAY,KAAK,OAAO,SAAWvhI,GAAU,CACjD,YAAa,KAAK,OAAO,uBAAyB,KAAK,iBAAiB,IAAI,EAAE,OAAO,GAAG,IAAI,EAC5F,KAAM,GACN,OAAQmuD,GAAoBt3E,GAC5B,UAAW8sN,EAAW,OAAY,GAAKx1I,CAAA,CACxC,EAED,OAAAozE,EAAU,KAAK,UAAU,IAAIq+D,GAAyB,UAAU,EAEzD,QAAQ,IAAI,CACjBr+D,EAAU,kBACVqiE,CACD,GAAE,KAAK,CAAC,CAAC7+M,EAAGrU,CAAK,IAAM,CACP+W,GAAA,KAAK,OAAO,KAAM,KAAK,KAAO9S,EAAK,4BAA4B,EAAIu1D,GAAmB8B,CAAS,CAAC,EAChGvkD,GAAA,KAAK,OAAO,OAAQ/W,CAAK,EAErCmzN,GAAW,MAAQA,EAAU,KAAK,cACnCA,EAAU,KAAK,YAAY,KAAK,OAAO,SAAS,IAAI,EAEpD,KAAK,OAAO,UAAU,QAAQ,KAAK,OAAO,SAAS,IAAI,EAGtDA,IACDA,EAAU,KAAK,SACfC,EAA0B,QAAQ,EACpC,CACD,CACH,CAEA,IAAc,cAA0B,CAChC,MAAC,MAAArtM,EAAO,OAAAC,CAAU,EAAAolB,GACxB,OAAO,IAAIioL,GACTttM,EACAC,EAAS,KAAO5kB,GAAW,UAAY,KAAK,KAAO,EAAI,KAAO,KAAK,mBAEvE,CAEA,MAAgB,WAAW,CACzB,MAAA0Q,EACA,eAAAwhN,EACA,UAAAh4J,EACA,OAAAmiB,EACA,UAAAotH,EACA,OAAA7lL,EACA,QAAAuX,EAAU,GACV,YAAA29K,EAAc,CAAC,EACf,YAAAC,EAAc,CAAC,EACf,QAAAnxM,EACA,eAAA8zH,EACA,YAAAy2F,EACA,UAAA1yB,EACA,WAAA2yB,EACA,YAAAC,EACA,SAAAC,CAAA,EAmBC,CACD,GAAG,KAAK,gBAAiB,OAAO,KAAK,gBAE/B,MAAAC,EAAmBD,EAAW,QAAQ,UAAY,KAAK,cAAcj2I,EAAQniB,CAAS,EAEtFs4J,EAAe9hN,EAAM,IAAM,iBAC3BgN,EAAahN,EAAM,IAAM,WACzB4L,EAAUoB,GAAchN,EAAM,YAAe,CAAC,QAAS,KAAK,EAA2B,SAASA,EAAM,IAAI,GAAKA,EAAM,UAAU,QAAQ,QAAQ,IAAM,GAEtJ,SAAI,YAAaA,EAAO2rE,EAAQy8H,EAAaC,EAAayZ,EAAc90M,EAAYpB,CAAO,EAEhG,KAAK,KAAOk2M,EAET,KAAK,cAGN,KAAK,YAAc,GACnB,KAAK,WAAW,WAAW1Z,EAAaC,EAAa59K,CAAO,EAC3D,OAAe,eAAiB,MAIhC,KAAK,WAAW,KAAK,OAAS,IAC/B,WAAW,IAAM,CACV,gBAAW,KAAK,EAAI,GACxB,CAAC,EAMD,aAAQ,KAAK,UAAU,OAAO,OAAQ,CAAC,KAAK,WAAW,SAAS,MAAM,EACtE,aAAQ,KAAK,UAAU,OAAO,OAAQ,CAAC,KAAK,WAAW,KAAK,MAAM,EAEjE,MAAA/6B,EAAY,KAAK,QAAQ,MACzBqyN,EAAuB,CAAC7uM,GAAUA,IAAWxjB,EAChDqyN,IAA+B7uM,EAAAxjB,GAE7B,YAAS,CAAC,QAASwjB,CAAM,EACxB,MAAAvI,EAAS,EAAE,KAAK,OAEnBjb,EAAU,mBACXA,EAAU,gBAAgB,EAKVqpM,IAAc,GAE9B,KAAK,aAAa,KAAK,QAAQ,MAAOA,IAAc,CAAC,EACrD,KAAK,YAAY,IAEjB,KAAK,eAAiB,CACpB,KAAM,QACN,MAAQp5K,GAAe,CACrB,GAAG,KAAK,yBACC,SAGN,CAACA,GAAcF,IAChB,KAAK,SAAS,SAGhB,KAAK,MAAM,CACb,GAGsBC,GAAA,SAAS,KAAK,cAAc,EAEpD,KAAK,cAAc,EAAI,EACvB,KAAK,mBAAmB,EAClB,MAAAmiM,EAEF,KAAK,SAAS,gBACP,cAAK,OAAO,KAAK,QAAQ,EAC7B,KAAK,SAAS,YAGrB,KAAK,kBAAkB,EAAI,GAGvB,MAAAhC,EAAQ,KAAK,QAAQ,MAErBmC,EAAe,KAAK,aACpB/5G,EAAuB65G,EAAe,IAAIP,GAAU,KAAM,GAAG,EAAI,OACnE,IAAA56H,EAA6B,QAAQ,UACnC,MAAA53F,EAAOud,GAAkBw1M,EAAe,CAC5C,SAAUE,EAAa,MACvB,UAAWA,EAAa,OACxB,QAAStyN,EACT,KAAMu4G,CAAA,EACJ,CACF,MAAOjoG,EACP,QAAStQ,EACT,SAAUsyN,EAAa,MACvB,UAAWA,EAAa,OACxB,OAAQ,CAAA1yN,GAAW,SACnB,iBAAkB,CAAC,EAAE0d,GAAchN,EAAM,GAAKA,EAAM,EACrD,GAAE,UACA,GAAA+hN,GAAwB,CAACD,EAAc,CAClC,MAAAt2M,EAAe,MAAM,KAAK,SAAS,cAAc,gBAAgBxL,EAAOjR,GAAM,IAAI,EACpF,IAAA8qD,EACJ,GAAGruC,EAAa,WACdquC,EAAM,IAAI,MACVA,EAAI,IAAMruC,EAAa,QAClB,CACL,MAAMgD,EAAWlD,GAAsB,CACrC,MAAOtL,EACP,aAAAwL,EACA,QAAS,GACT,aAAc,GACf,EACEgD,IACDm4E,EAAen4E,EAAS,YACxBqrC,EAAMrrC,EAAS,MAEnB,CAEGqrC,IACGA,EAAA,UAAU,IAAI,WAAW,EAC7BnqD,EAAU,OAAOmqD,CAAG,EAExB,CAEA,GAAGioK,EACD,GAAGN,EAAgB,CACX,MAAA3nK,EAAM,IAAI,MACZA,EAAA,UAAU,IAAI,WAAW,EAC7BnqD,EAAU,OAAOmqD,CAAG,EACd,MAAArwC,GAA0BqwC,EAAK2nK,EAAgB,EAAK,MACrD,CACL,MAAMlwM,EAASkM,GAAU,CACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,OAAQmuD,EAAO,SAAS,EACxB,KAAM,OACP,EACMr6D,EAAA,KAAK,UAAU,IAAI,kBAAkB,EAClC5hB,EAAA,OAAO4hB,EAAO,IAAI,EAC5B,MAAMA,EAAO,iBACf,CAQF,MAAMu9C,EAA6B,CAAC,EAAE7hD,GAAchN,EAAM,mBACpD0O,EAAYozM,EAAe,OAAYjzJ,EAAoB,KAAK,oBAAsB,KAAK,UAE3FsB,EAAkB,CAACl+C,EAAOljB,GAAM,OACjC+yN,EAAqB,CAAC,IAAKlF,GAAiB58M,CAAK,CAAC,EAC9C,KAAK,SAAS,cAAc,gBAAgBA,EAAOiS,CAAI,EAG5D,IAAAgwM,EACJ,GAAGr2M,GAAWk2M,EAAc,CACpB,MAAAvyN,EAAaswN,EAAM,iBAAiB,IAAI,EAExCqC,EAAsChrN,GAAY8I,EAAqB,OAAS,MAChFygD,EAEDhyC,GAAY,CAAC,IAAKyzM,GAAiBJ,EAAc,WAAAvyN,EAAW,EAE9DuyN,IACDrhK,EAAM,WAAa,KAGlB,KAAK,SAAS,UAAU,SAAS,aAAa,GAAKqhK,IAC9CrhK,EAAA,iBAAiB,cAAej2C,EAAW,EAGnD,MAAM7L,EAAM,IAAM,KAAK,iBAAiBuU,EAAQ,GAAO6lL,CAAS,EAAE,KAAK,CAAC,CAAC,eAAA/yJ,CAAA,IAAoB,CAK9E07K,MAEP,MAAAtpM,EAAMynM,EAAM,mBAAqBA,EAAM,kBAAkB,UAAU,SAAS,uBAAuB,EAAIA,EAAM,kBAAoBA,EAE/GA,EAAM,cAAc,OAAO,GAClC,OAAO,EAElBp/J,EAAA,aAAa,cAAe,MAAM,EAKxCA,EAAM,SAAW,GAGdzgD,EAAM,IAAM,iBACbygD,EAAM,SAAW,GACTzgD,EAAM,OAAS,OACvBygD,EAAM,MAAQ,GACdA,EAAM,SAAW,GACjBA,EAAM,KAAO,IACLzgD,EAAM,SAAW,KACzBygD,EAAM,KAAO,IAGZuqE,IAAmB,QACpB/qE,GAAeQ,EAAOuqE,CAAc,EAItC5yG,EAAI,OAAOqoC,CAAK,EAEhB,MAAM0hK,EAAiB,IAAI,QAAS7vM,IAAY,CAC9CmuC,EAAM,iBAAiB,UAAWnuC,GAAS,CAAC,KAAM,GAAK,EACxD,EAEK8vM,EAAiB,IAAM,CACxBN,IAGI,wBAAqB5/J,GAA2B,eAAe,CAClE,MAAOzB,EACP,QAAAvpD,CAAA,CACD,EACH,EAGImrN,EAAe,SAAW,CAC1B,GAAAriN,EAAqB,OAAS,MAChC,OAGF,MAAM2X,GAAe,QAAQ,IAAI,CAACwqM,EAAgBn8K,CAAc,CAAC,EACjE,GAAG,CAAC87K,IACI,MAAAnqM,GACH,KAAK,SAAWhN,GACjB,OAKJ,MAAMi3C,GAAO,CAACkgK,GACC,KAAK,YAAc,IAAIt2J,GAAY,CAChD,MAAA/K,EACA,KAAAmB,GACA,WAAYiN,EACZ,KAAMizJ,EACN,MAAO75G,GAAW,MAClB,OAAQA,GAAW,OACnB,yBAA2BjoF,IAAS,CAClC,KAAK,SAAS,UAAU,OAAO,eAAgB,CAAC,CAACA,EAAI,CACvD,EACA,MAAQkgC,IAAQ,CACd,MAAMoiK,EAAoB,OAAe,eACzC,GAAG,CAACpiK,IAAOoiK,GAAoBA,IAAqB,KAAM,CACxD,KAAK,mBAAqB,OAC1B,KAAK,MAAM,EACX,MACF,CAEc,KAAK,gBAAgB,iBAC7B,UAAU,OAAO,SAAUpiK,EAAG,EAC/B,uBAAkB,CAACA,EAAG,EACtB,mBAAc,CAACA,EAAG,EAClB,2BAAsB,CAACA,EAAG,EAE5B,KAAK,iBACHA,GAA6BxgC,GAAA,WAAW,KAAK,cAAc,EACjCA,GAAA,SAAS,KAAK,cAAc,GAGxDwiM,IACEhiK,IAGD,KAAK,qBAAqB,EAAK,EAC/B,KAAK,mBAAqB,OAE1BgC,GAA2B,oBAAoBzB,CAAK,GAErC2hK,IAGrB,EACA,WAAY,IAAM,CAIhB,KAAK,MAAM,CACb,EACA,qBAAsB,SACtB,gBAAiB,OAClB,GACM,iBAAiB,iBAAmB93J,IAAS,CAClD,KAAK,SAAS,UAAU,OAAO,qBAAsBA,EAAI,EAC1D,EAEI,sBAAiB,iBAAkB,IAAM,CACvC,cAAS,UAAU,OAAO,oBAAoB,EACnD,KAAK,YAAY,UACjB,KAAK,YAAc,QAClB,CAAC,KAAM,GAAK,EAEZ,KAAK,UACD,iBAAY,aAAa,EAAK,EAC3Bw3J,GACH,iBAAY,aAAa,EAAI,EAGtBL,IAAA,KAAK,YAAa9pM,EAAY,GAG9C,GAAGk3C,GAAqBizJ,EAAc,CAChC,IAAAS,GAAkB,GAAOllC,GAAY,GAEnC,MAAAmlC,GAAgBC,GAAwB,CACzCplC,KAISA,GAAA,GACEskC,MACd,CAACc,GAAaC,KACHh0M,GAAA,OAAOmxM,EAAO,EAAI,EAGvBp/J,EAAA,cAAc,UAAU,IAAI,cAAc,IAGlDza,EAAe,KAAK,IAAM,CACrBya,EAAM,WAAaA,EAAM,kBAC1B+hK,GAAa,EAAI,CACnB,CACD,EAED,MAAME,GAAgB,IAAM,CACvBH,KAIeA,GAAA,GACZ9hK,EAAA,iBAAiB,UAAW,IAAM,CACpB8hK,GAAA,GACNllC,GAAA,GACA0R,MACZrgL,GAAW,OAAO,EACZ+xC,EAAA,cAAc,UAAU,OAAO,cAAc,EAE/C,KAAK,WACF,kBAAa,aAAa,MAAS,CAC1C,EACC,CAAC,KAAM,GAAK,IAGXA,EAAA,iBAAiB,UAAW,IAAM,CAChC,MAAAliD,EAAUkiD,EAAM,eAAiBA,EAAM,gBACvCyuI,GAAiBzuI,EAAM,WAAaA,EAAM,iBAG7CliD,GAAW2wL,IACCszB,IACf,CACD,EAEE,KAAK,SAAS,UAAU,SAAS,aAAa,GACzC/hK,EAAA,iBAAiB,cAAgBtmD,GAAM,CAC3CqQ,GAAYrQ,CAAC,EACd,EAGWuoN,IAChB,CAGA,MAAMvzM,GAAO,SAAW,CAKhB,MAAA5V,GAAwBs1D,GAAqBizJ,EAAe,QAAQ,UAAYnzM,GAAmB,iBAAiB,CAAC,MAAA3O,CAAA,CAAM,EAEjI,OAAI6uD,GACF7oB,EAAe,KAAK,SAAW,EACxB,MAAMmqB,EAAgB,GAAG,KACjBzhD,GAAA,OAAOmxM,EAAO,GAAMtmN,EAAO,CACxC,CACD,EAGH,QAAQ,IAAI,CACVA,GACAuoN,EAAe,OAAY97K,CAAA,CAC5B,EAAE,KAAK,SAAW,CACd,QAAK,SAAWr7B,EAAQ,CACpB,SAAI,KAAK,4BAA4B,EAC1C,MACF,CAEM,MAAAtT,IAAO,MAAM84D,EAAA,GAAmB,IAEhCjhB,GAAW/0C,GAAkB,CAC9B,GAAAk2D,GAAuBl2D,CAAC,GAAK2nN,EAC9B,OAGO1hM,GAAA,CACP,YAAagC,GAAY,2BAA6B,4BACvD,EAED,MAAM0Q,GAAQ2tB,EAAM,MACjB3tB,IAASA,GAAM,OAAS,GACzB,KAAK,IAAI,MAAM,SAAWA,GAAM,KAAO,cAAgBA,GAAM,OAAO,EAGtEpkB,GAAW,OAAO,GAGd+hD,GAAqBlP,GAAYd,CAAK,EACxCqhK,GACFnxJ,GAAgBlQ,EAAOgQ,EAAkB,EAAE,MAAMvhB,EAAO,EAG1DuR,EAAM,iBAAiB,QAASvR,GAAS,CAAC,KAAM,GAAK,EACrD3/C,EAAW,QAAQ,IAAM,CACjBkxD,EAAA,oBAAoB,QAASvR,EAAO,EAC3C,EAEEh8B,aAAkB,cAEfkF,EAAA,kBAAkB,iBAAiB,OAAOqoC,CAAK,EAGnD/mC,GAAmB+mC,EAAOppD,EAAG,EAK5B6qN,IACcE,IAEV,sBAAiB,iBAAkB,IAAM,CAC5C,KAAK,qBAAqB,EAC1B,KAAK,mBAAqB,QACzB,CAAC,KAAM,GAAK,GAGZ,uBAAkBlvM,EAAQ7b,GAAK,OAAO,EAExCyqN,EACYO,IACR5xJ,GAAmB,KAAK,IAAM,CACtB4xJ,GAAA,CACd,EACF,EAEM9oN,EAAA,EAGT,KAAK,cAAc,QAAQ,CAAC,KAAA4V,EAAK,GAElC,EAEiB8yM,EAAAt7H,EAAa,KAAKhoF,CAAG,MAClC,CACL,MAAMA,EAAM,IAAM,KAAK,iBAAiBuU,EAAQ,GAAO6lL,CAAS,EAAE,KAAK,CAAC,CAAC,eAAA/yJ,CAAA,IAAoB,CAK3F,MAAM72B,EAAO,SAAW,CACtB,MAAMwzM,EAAqB31M,EAAa2B,GAAmB,iBAAiB,CAAC,MAAA3O,CAAM,GAAI2O,GAAmB,iBAAiB,CAAC,MAAA3O,EAAO,MAAOjR,CAAK,GAEzI6zN,EAAa,CAAC51M,GAAchN,EAAM,MAAM,QAAQ,OAAQjR,GAAUA,EAA6B,CAAC,EACxF6zN,KAAW,KAAK,CAACtsN,EAAGwsB,IAAMA,EAAE,KAAOxsB,EAAE,IAAI,EACjD,MAAAusN,EAAgBD,IAAa,CAAC,EAC9BE,EAAyB,CAAC91M,GAAc61M,IAAkB9zN,GAAQ4f,GAAmB,iBAAiB,CAAC,MAAA3O,EAAO,MAAO6iN,CAAc,GAEzI,OAAA78K,EAAe,KAAK,SAAW,EACxB,MAAMmqB,EAAgB,GAAG,KACvB,eAAU,cAAcwyJ,CAAkB,CAEjD,CACD,EAED,QAAQ,IAAI,CAAC38K,EAAgB28K,CAAkB,CAAC,EAAE,KAAK,SAAW,CAC7D,QAAK,SAAWh4M,EAAQ,CACpB,SAAI,KAAK,4BAA4B,EAC1C,MACF,CAEM,MAAAtT,GAAO,MAAM84D,EAAA,GAAmB,IACtC,GAAGj9C,aAAkB,cACd,uBAAkBA,EAAQ7b,EAAK,KAAK,EACpC,uBAAkBwoN,EAAOxoN,EAAK,KAAK,EAErC/H,GAAW,UACCuwN,EAAM,iBAAiB,KAAK,EACpC,QAAShmK,GAAQ,CAChBA,EAAA,UAAU,OAAO,WAAW,EACjC,MAEE,CACC,MAAAzhC,EAAMynM,EAAM,mBAAqBA,EAAM,kBAAkB,UAAU,SAAS,uBAAuB,EAAIA,EAAM,kBAAoBA,EACjIkD,EAAY,CAAC,SAAU,KAAK,EAAE,SAAS3qM,EAAI,mBAAmB,OAAO,EAAIA,EAAI,kBAAmC,KAClH,GAAA2qM,GAAgC,MAAQ1rN,EAAM,CAC1C,MAAAid,GAAQ,IAAI,MACZA,GAAA,UAAU,IAAI,WAAW,EAEZoF,GAAApF,GAAOjd,EAAK,IAAM,CACnC2T,GAAQ,IAAM,CACP,uBAAkBkI,EAAQ7b,EAAK,KAAK,EAEtC0rN,GACD/3M,GAAQ,IAAM,CACZ+3M,EAAU,OAAO,EAClB,EAGH3qM,EAAI,OAAO9D,EAAK,EACjB,GACA,EAAK,EAEkBwuM,KAAuB,KAAMzrN,IAAQ,CACvD,MAAA2rN,GAAY,IAAI,MACZA,GAAA,UAAU,IAAI,WAAW,EAChBtpM,GAAAspM,GAAW3rN,GAAK,IAAM,CACvC2T,GAAQ,IAAM,CACZsJ,GAAM,YAAY0uM,EAAS,EAC5B,GACA,EAAK,EACT,CACH,CACF,EAGD,EAAE,MAAOjkN,GAAQ,CACX,SAAI,MAAMA,CAAG,EACb,eAAU,OAAO8gN,CAAK,EAC3B,KAAK,UAAU,WAAU,CAC1B,EAEM8C,CAAA,EAGT,KAAK,cAAc,QAAQ,CAAC,KAAAxzM,CAAK,GAClC,EAEiB8yM,EAAAt7H,EAAa,KAAKhoF,CAAG,CACzC,CAEA,OAAO,KAAK,gBAAkBsjN,EAAgB,MAAM,IAAM,CACxD,KAAK,yBAA2B,KACjC,EAAE,QAAQ,IAAM,CACf,KAAK,gBAAkB,KACxB,CACH,CACF,CC/kEA,MAAqBgB,WAA6B5F,EAAiE,CAGjH,YAAYzvN,EAAgB,CACpB,UAAIiuN,GAAiB,CAAC,OAAAjuN,EAAQ,SAAUC,EAAU,SAAS,EAAG,EAAgB,EAmBtF,iBAAeqlB,GAA2C,CACxD,KAAK,UAAU,CACb,QAASA,EAAO,QAChB,OAAQA,EAAO,QACf,UAAW,GACZ,GAGH,iBAAeA,GAA2C,CACxD,KAAK,UAAU,CACb,QAASA,EAAO,QAChB,OAAQA,EAAO,QACf,UAAW,EACZ,GAGH,qBAAkB,IAAM,CACtBvE,GAAmB,eAAe,CAChC,MAAO,KAAK,OAAO,MACnB,QAASqjB,GAAa,KAAK,QAAQ,cAAc,QAClD,GArCD,KAAK,OAASpkC,EAEd,KAAK,iBAAiB,CAAC,CACrB,KAAM,WACN,KAAM,+BACN,QAAS,KAAK,eAChB,EAIK,EAIL,KAAK,aAAa,CACpB,CAyBA,MAAa,UAAU,CACrB,QAAAkuN,EACA,OAAA5oM,EACA,UAAA6lL,EAAY,EACZ,YAAAqP,EACA,YAAAC,CAAA,EAOC,CACD,GAAG,KAAK,gBAAiB,OAAO,KAAK,gBAErC,MAAM98L,EAAQ,MAAM,KAAK,SAAS,iBAAiB,SAASuwM,CAAO,EAC7D5+M,EAAM,MAAM,WAAW,CAC3B,MAAOqO,EACP,UAAWA,EAAM,KACjB,OAAQ,KAAK,OACb,UAAAwtL,EACA,OAAA7lL,EACA,QAAS,GACT,YAAAk1L,EACA,YAAAC,CAAA,CACD,EACI,mBAAO,QAAU98L,EAAM,GAC5B,KAAK,OAAO,MAAQA,EAEbrO,CACT,CACF,CC9EA,eAA8BgmN,GAC5BhwM,EACAtlB,EACA2B,EACA2H,EACAkxM,EACAC,EACA,CACA,IAAI98L,EAAQ,MAAM1d,EAAU,SAAS,kBAAkB,aAAaD,CAAM,EAC1E,GAAG,CAAC2B,KAAgB,CAACgc,EACnB,OAGF,MAAM43M,EAAY,IACH,MAAM,KAAKjwM,EAAO,iBAAiB,KAAK,CAAC,EAAE,KAAM2mC,GAAQ,CAACA,EAAI,UAAU,SAAS,OAAO,CAAC,EACxF3mC,EAAS,KAGtB,GAAAtlB,EAAO,YAAa,CACf,MAAAw1N,EAAa,CAAC,CAAClsN,EACf+sJ,EAAc,gCACpB,GAAG,CAAC/sJ,IACFA,EAAU,MAAMrJ,EAAU,SAAS,mBAAmB,WAAW,CAC/D,OAAAD,EACA,YAAa,CAAC,EAAGq2J,CAAW,EAC5B,SAAU,EACV,MAAO,EACR,EAAE,KAAMp/I,GAAU,CACX,MAAAtJ,EAAMsJ,EAAM,QAAQ,CAAC,EACpB,OAAAzW,GAAgB,iBAAiBR,EAAQ2N,CAAG,EACpD,EAEE,CAAChM,KACF,OAIJ,GAAG2H,EAAS,CAEYA,EAAQ,OAAuD,MACrE,KAAOqU,EAAM,KACvB63M,IACFlsN,EAAU,MAAMrJ,EAAU,SAAS,mBAAmB,0BAA0BD,EAAQ2d,CAAK,IAMjG,MAAMrL,EAAK1I,GAA4BA,EAAI,IAAKkI,IAAQ,CACtD,QAASA,EAAG,QACZ,IAAMA,EAAG,KAAgC,IACzC,OAASA,EAAG,KAAgC,MAC5C,IAEE,IAAA8rH,KACH,iBAAiB,CAChB,OAAA59H,EACA,YAAa,CAAC,EAAGq2J,CAAW,CAC7B,GACA,UAAU,CACT,QAAA/sJ,EACA,OAAQisN,EAAU,EAClB,YAAa/a,EAAcloM,EAAEkoM,CAAW,EAAI,OAC5C,YAAaC,EAAcnoM,EAAEmoM,CAAW,EAAI,OAC7C,EAED,MACF,CACF,CAEA,GAAG98L,EAAO,CACL,CAACrX,GAASgD,CAAO,GAAKA,IACvBqU,EAAQ,MAAM1d,EAAU,SAAS,iBAAiB,SAASqJ,CAAO,GAGpE,MAAMgJ,EAAK1I,GAA4BA,EAAI,IAAKkI,IAAQ,CACtD,QAASA,EAAG,QACZ,QAASA,EAAG,IACZ,IAEE,IAAAujN,GAAqBr1N,CAAM,EAAE,UAAU,CACzC,QAAS2d,EAAM,GACf,OAAQ43M,EAAU,EAClB,YAAa/a,EAAcloM,EAAEkoM,CAAW,EAAI,OAC5C,YAAaC,EAAcnoM,EAAEmoM,CAAW,EAAI,OAC7C,CACH,CACF,CC/FA,IAAIgb,GACJ,SAAwBC,IAAmB,CACzC,OAAOD,QAAW3mN,KACpB,CAEO,SAAS6mN,GAAyB31N,EAAgB,CACvD,KAAM,CAAC41N,EAAUC,CAAW,EAAI/mN,GAAuD,EACjF,CAACgnN,EAAmBC,CAAoB,EAAIjnN,GAAoB,EAChE,CAACknN,CAAY,EAAIN,KACjB5sM,EAAehH,KACfniB,EAAOitH,GAAQ,IAAM5sH,CAAM,EAEjC,OAAAkN,GAAa,IAAM,CAEjB,MAAM+oN,EADQt2N,KAC6B,cAC3C,GAAG,CAACs2N,EAAc,CACJJ,IACSE,IACrB,MACF,CAEM,MAAAG,EAAcF,EAAgB,QAAME,GAAgBA,EAAY,WAAaD,EAAa,KAAK,EACrGJ,EAAa/sM,EAAkB,GAAAotM,GAAa,YAAcA,EAAY,YAAcA,GAAa,MAAmD,EACpJH,EAAqBE,EAAa,mBAAmB,EACtD,EAEM,CAAC,SAAAL,EAAU,kBAAAE,EACpB,CCMA,MAAMK,GAAe,EACRC,GAAiB,GAETC,GAArB,MAAqBA,EAAmB,CAyBtC,YACUrxK,EACA5kD,EACAk2N,EACR,CAHQ,gBAAAtxK,EACA,cAAA5kD,EACA,oBAAAk2N,EA0hBH,iBAAc,MAAMpI,GAAwD,CAC3E,MAAAvsN,EAAa,KAAK,iBAAiB,IAAI,EACvC+hB,EAAS,SAAS,cAAc,KAAK,EAC3CA,EAAO,UAAU,IAAI2yM,GAAmB,WAAa,UAAW,kBAAmB,MAAM,EAEnF,MAAA75H,EAAU,KAAK,QAAQ,oBAAsB,EAC9C,aAAQ,OAAO94E,CAAM,EAEtB,IAAA/F,EACDuwM,IACOvwM,EAAA,OAAOuwM,GAAa,SAC1B,MAAM,KAAK,SAAS,iBAAiB,SAASA,CAAO,EACpDA,EAAQ,OAAuD,OAGpE,MAAMqI,EAAe,SAAW,CAC9B,MAAMvwM,EAAa4J,GAAU,CAC3B,WAAAjuB,EACA,KAAM,OACN,SAAU,GACV,MAAO,GAGR,EAMD,GAJG66F,GACUx2E,EAAA,KAAK,UAAU,IAAI,8BAA8B,EAG3DrI,EAAO,CAER,MAAMoB,EAAYI,GAAgBxB,EAAO,IAAS,IAAS,EAAK,EAChE,MAAMoI,GAAkBC,EAAYrI,EAAO,IAASoB,CAAS,OAE7DiH,EAAW,OAAO,CAChB,OAAQ,KAAK,OACd,EAED,MAAMA,EAAW,kBAGZtC,EAAA,OAAOsC,EAAW,IAAI,EACtBtC,EAAA,UAAU,OAAO,MAAM,CAyBA,EAG7B,YAAK,QAAQ,mBAAqByyM,GACnC,MAAMI,EAAa,GAEd,0BAAqB,QAAQ7yM,CAAM,EACnC,mBAAc,IAAIA,EAAQ6yM,CAAY,GAG7C,KAAK,OAAO,EAET,KAAK,KAAK,oBAAsB,GAC1B7yM,EAAA,UAAU,IAAI,QAAQ,EAGxBwqM,CAAA,EA3mBF,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAImI,GAAmB,WAAa,YAAY,EAEpE,aAAU,SAAS,cAAc,KAAK,EAC3C,KAAK,QAAQ,UAAU,IAAIA,GAAmB,WAAa,UAAU,EAEhE,cAAW,SAAS,cAAc,KAAK,EAC5C,KAAK,SAAS,UAAU,IAAIA,GAAmB,WAAa,WAAW,EAElE,iBAAc,KAAK,SAAS,UAAU,EAC3C,KAAK,YAAY,UAAU,IAAIA,GAAmB,WAAa,eAAe,EAEzE,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAIA,GAAmB,WAAa,OAAO,EAE1D,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAIA,GAAmB,WAAa,OAAO,EAE1D,mBAAgB,SAAS,cAAc,KAAK,EACjD,KAAK,cAAc,UAAU,IAAIA,GAAmB,WAAa,QAAQ,EACzE,KAAK,cAAc,OAAOp1N,GAAK,iBAAkBo1N,GAAmB,WAAa,aAAa,CAAC,EAE/F,KAAK,iBAAmB3mN,KAEnB,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI2mN,GAAmB,WAAa,SAAUA,GAAmB,WAAa,aAAa,EACpH,KAAK,UAAU,OAAOp1N,GAAK,aAAco1N,GAAmB,WAAa,aAAa,CAAC,EAEvF,KAAK,UAAU,OAAO,KAAK,QAAS,KAAK,SAAU,KAAK,YAAa,KAAK,KAAM,KAAK,KAAM,KAAK,cAAe,KAAK,SAAS,EAExH,uBAAoB,IACpB,oBAAiB,IAAIl+L,GAE1B,MAAMq+L,EAAiB,IAClB,KAAK,WAAW,iBAAmB,GACpC,KAAK,WAAW,kBAAkB,CAChC,QAAS,KAAK,WAAW,kBACzB,SAAU,QACX,EACM,IAGF,GAGHC,EAAc,EAAI,EACxB,IAAIxlJ,EAAS,GACT00F,EAAS,GACI9oJ,EAAA,KAAK,UAAW,MAAM2tB,GAAO,CAC5C,GAAGm7H,EAAQ,CACT/oJ,GAAY4tB,CAAE,EACd,MACF,CAEA,GAAGymC,EAAQ,CACAA,EAAA,GACT,MACF,CAMA,GAJG,CAACulJ,KAID,KAAK,WACN,OAGF,GAAG,KAAK,eAAiB,KAAK,OAAQ,CACjC,GAAAjxM,EAAgBilB,EAAG,OAAQ,QAAQ,GAAK,KAAK,UAAU,UAAU,SAAS,aAAa,EAAG,CAClFymC,EAAA,GACU36B,GAAA,KAAK,WAAW,IAAI,EACvC,MACF,CAEA,KAAK,OAAO9L,CAAE,EACd,MACF,CAEM,MAAAlX,EAAO,KAAK,UAAU,sBAAsB,EAI5CnB,EADIqY,EACE,MAENksL,EAASvkM,EAAImB,EAAK,KACxB,GAAI,CAAC,KAAK,WAAW,SAAS,QAAU,CAAC,KAAK,WAAW,KAAK,QAC3DojM,EAAUpjM,EAAK,MAAQmjM,GAAgBC,EAAUpjM,EAAK,MAAQA,EAAK,MAAQmjM,EAAe,CAC3F,MAAMz2N,EAAS,KAAK,OAEdg+B,EAAsF,GAC5F,KAAK,WAAW,SAAS,OAAO,KAAK,WAAW,QAAS,KAAK,WAAW,IAAI,EAAE,QAAQ,CAACh0B,EAAM1G,IAAQ,CACpG06B,EAAQ,KAAK,CACX,QAAmB,KAAK,QAAQ,SAAS16B,CAAG,EAC5C,KAAA0G,CAAA,CACD,EACF,EAED,MAAMwwM,EAAcx8K,EAAQ,MAAM,EAAG,KAAK,WAAW,SAAS,MAAM,EAC9Dy8K,EAAcz8K,EAAQ,MAAM,KAAK,WAAW,SAAS,OAAS,CAAC,EAE/D1Y,EAAS,KAAK,QAAQ,SAAS,KAAK,WAAW,SAAS,MAAM,EAC3DqgJ,EAAA,GACT2vD,GACEhwM,EACAtlB,EACA,IAAMA,IAAW,KAAK,OACtB,KAAK,WAAW,QAChBw6M,EACAC,CAAA,EAEO90C,EAAA,OACJ,CACL,MAAMn1E,EAAUl9D,EAAK,MAASA,EAAK,MAAQ,EACrCqjM,EAAUxkM,EAAIq+D,EAEhB,IAAAkjE,EACD,KAAK,WAAW,QAAU,GAAK,CAACijE,EAAoBjjE,EAAA,KAAK,WAAW,MAAQ,EACvE,KAAK,WAAW,QAAW,KAAK,WAAW,MAAQ,GAAMijE,EAAoBjjE,EAAA,EAAE,KAAK,WAAW,MAAQ,GAC1GA,EAAWijE,EAAU,EAAI,GAE9B,KAAK,oBAAoBjjE,CAAQ,CACnC,CACC,GAAC,eAAgB,KAAK,cAAe,GAExC,MAAMkjE,EAAkB,IAAM,CACnB3lJ,EAAA,GACT,SAAS,KAAK,iBAAiBt/C,GAAqB,WAAa,QAAUplB,GAAM,CACtE0kE,EAAA,IACR,CAAC,KAAM,GAAK,GAGjB,IAAI5qD,EAAQ,EAAG8L,EAAI,EAAG0kM,EAAY,EAAwBvmI,EAAO,EAC5C,KAAK,aAAe,IAAI/lD,GAAa,CACxD,QAAS,KAAK,QACd,QAAS,CAACQ,EAAOC,IAAU,CAChBD,GAAA,GAGG8rL,EAAA9rL,EACZ,IAAI+rL,EAAQ3kM,EAAI4Y,EAAQ,CAACsrL,GAAmB,MAC5C,OAAGS,EAAQ,EAAWA,EAAA,EACdA,EAAQxmI,IAAcwmI,EAAAxmI,GAEzB,aAAQ,MAAM,UAAY+lI,GAAmB,mBAAmB,QAAQ,MAAOS,EAAQ,IAAI,EAEzF,EACT,EACA,kBAAoBvqN,GAAM,CACrB,GAACiqN,IAIJ,IAAU,KAAK,cACN,YACC,KAAK,UAAU,UAAU,SAAS,WAAW,GAAK7wD,EACnD,aANS,QAAAixD,IAChBh6M,GAAYrQ,CAAiB,EACtB,GAOF,QACT,EACA,aAAc,IAAM,CACZ,MAAA+mB,EAAO,KAAK,QAAQ,sBAAsB,EAChDjN,EAAQiN,EAAK,MACbg9D,EAAO,CAACjqE,GAAS,KAAK,KAAK,kBAAoB,GAI/C8L,EAAImB,EAAK,KAAO,KAAK,UAAU,sBAAwB,OAElD,aAAQ,MAAM,UAAY+iM,GAAmB,mBAAmB,QAAQ,MAAOlkM,EAAI,IAAI,EAEvF,eAAU,UAAU,IAAI,YAAY,EACpC,aAAQ,UAAU,IAAI,eAAe,EACrC,KAAK,QAAQ,UACpB,EACA,QAAS,IAAM,CACb,MAAM4kM,EAAW,KAAK,KAAK,KAAK,IAAIF,CAAS,GAAKxwM,EAAQgwM,GAAmB,MAAM,GAAKQ,GAAa,EAAI,EAAI,IAC7FD,IAIX,aAAQ,UAAU,OAAO,eAAe,EAC7Cx5M,GAAQ,IAAM,CACP,gBAAW,GAAG25M,CAAQ,EACtB,eAAU,UAAU,OAAO,YAAY,EAC7C,CACH,EACD,EAED,KAAK,qBAAuB,IAAI,qBAAsB3mK,GAAY,CACxDA,EAAA,QAAS3hD,GAAU,CACrBA,EAAM,gBAIL,yBAAoBA,EAAM,MAAM,EACtC,EACF,EAED,KAAK,aAAa,EAAI,EAEtB,MAAMpL,EAAI2hD,EAAW,mBACrBA,EAAW,mBAAqB,IAAM,CAChC3hD,MACJ,KAAK,mBAAmB,GAGrB,sBAAiB,UAAU,IAAM,CACpC2hD,EAAW,mBAAqB3hD,CAAA,CACjC,EAED0J,GAAY2B,GAAY,CACjB,sBAAiB,UAAU,IAAM,CAC5BA,IACR,KAAK,OAAS,OACf,EAED,KAAM,CAAC,OAAA6kM,EAAQ,OAAAQ,EAAQ,KAAAC,CAAA,EAAQb,GAAe,CAC5C,UAAW,IAAM,KAAK,UACtB,cAAe,KAAK,eACpB,WAAY,IAAMnuJ,EAAW,UAC7B,uBAAwB,GACzB,EAED,KAAK,OAAS+uJ,EAEd7mM,GAAa,IAAM,CACjB,GAAG,KAAK,YAAc,CAACqmM,IAAU,CAC1BS,IACL,MACF,CAEK,kBAAaT,GAAQ,EAC3B,EACF,CAeH,CAEO,oBAAoB7/C,EAAkB,CACtC,aAAQ,UAAU,IAAI,eAAe,EACrC,KAAK,QAAQ,WAEb,gBAAW,GAAGA,CAAQ,EAE3Bt2I,GAAQ,IAAM,CACP,aAAQ,UAAU,OAAO,eAAe,EAC9C,CACH,CAEA,MAAa,QAAQpd,EAAgB,CACnC,KAAK,OAASA,EACd,KAAK,iBAAiB,QAEtB,MAAM2d,EAAQ,MAAM,KAAK,SAAS,gBAAgB,aAAa3d,CAAM,EAClE,IAAC2d,GAAS,CAACy4M,GACZ,OAGF,KAAK,WAAa,CAACz4M,EAEnB,MAAM,KAAK,kBAER,KAAK,YACD,gBAAW,KAAK,SAEvB,KAAK,WAAaiS,GAAU,CAC1B,OAAA5vB,EACA,MAAO,GACP,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,IACN,YAAa,GACb,gBAAkBkuB,GAAQ,CACxB,KAAK,UAAU,UAAU,OAAO,cAAeA,CAAG,CACpD,EACA,YAAa,CACX,KAAM,yBACR,EACD,EACD,KAAK,WAAW,KAAK,UAAU,IAAI,6BAA6B,EAChE,MAAM,KAAK,WAAW,kBACtB,KAAK,QAAQ,OAAO,KAAK,WAAW,IAAI,EAExC,MAAMskC,EAA+C,KAAK,WAAa,IAAI71B,GAAW,CACpF,UAAW,GACX,SAAU,CAACS,EAAQD,EAAOM,IAAc,CACtC,GAAG,CAACN,EAAc,eAAQ,QAAQ,CAAC,MAAO,OAAW,MAAO,GAAG,EAE5D,GAAAn9B,EAAO,SAAU,CAClB,MAAM4pF,EAA2BxsD,EAC1B,YAAK,SAAS,iBAAiB,cAAcp9B,EAAQ4pF,EAAOnsD,CAAS,EAAE,KAAMxmB,IAC3E,CACL,MAAOA,EAAM,MACb,MAAOA,EAAM,QAEhB,MACI,CACL,MAAM5K,EAAyF,GAC5F,OAACmmD,EAAW,SACJnmD,EAAA,KAAK,KAAK,SAAS,kBAAkB,YAAYrM,EAAO,SAAU,EAAC,EAG9EqM,EAAS,KAAK,KAAK,SAAS,mBAAmB,WAAW,CACxD,OAAArM,EACA,SAAU,OAAO,iBACjB,YAAa,CACX,EAAG,+BACL,EACA,MAAOy9B,EACP,UAAW,CACZ,EAAC,EAEK,QAAQ,IAAIpxB,CAAQ,EAAE,KAAK,MAAMtK,GAAW,CAC3C,MAAAkV,EAAQlV,EAAO,MAEjB,IAAC,SAAAq9B,EAAU,QAAAC,CAAW,EAAApoB,EAOvB,GANCmoB,IACSA,EAAAnoB,EAAM,SAAWooB,EAAQ,IAAK1xB,GAAQnN,GAAgB,iBAAiBR,EAAQ2N,CAAG,CAAC,GAGhG8uB,GAAyBxlB,CAAK,EAE3B,CAACu7C,EAAW,QAAS,CAChB,MAAAtrB,EAAWnlC,EAAO,CAAC,EACnBuH,EAAU4tC,GAAc9X,EAAW91B,GAC9BA,EAAmC,OAAuD,MAAM,KAAO49B,EAAS,WAAW,EACrI,EAEUsrB,EAAA,QAAUlpD,GAAW,MAAM,KAAK,SAAS,mBAAmB,0BAA0B,KAAK,OAAQ49B,EAAS,UAAU,CACnI,CAGO,OACL,MAAOjwB,EAAM,MACb,MAAOmoB,CAAA,CACT,CACD,CACH,CACF,EACA,YAAa,KAAK,YAClB,OAAQ,CAACp1B,EAAMmzB,IAAU,CACjB,MAAA2E,EAAK,KAAK,WAAW,MAErB3P,EAAI,IAAMkkM,GAAmB,MAAQv0L,EACtC,aAAQ,MAAM,UAAYu0L,GAAmB,mBAAmB,QAAQ,MAAO,IAAIlkM,CAAC,GAAG,EAE5F,CAAC,KAAK,KAAM,KAAK,OAAO,EAAE,QAASrwB,GAAc,CACzC,MAAAk1N,EAAYl1N,EAAU,cAAc,SAAS,EAChDk1N,GAAqBA,EAAA,UAAU,OAAO,QAAQ,EAErCl1N,EAAU,SAASggC,CAAE,EAC7B,UAAU,IAAI,QAAQ,EAC3B,EAED,KAAK,oBAAoB,KAAK,QAAQ,SAASA,CAAE,CAAC,CACpD,EACD,EAEEnkB,GAAO,IAAM,qBACd60C,EAAW,QAAU70C,EAAM,UAGvB,WAAK,YAAY60C,EAAW,OAAO,EAGzCA,EAAW,KAAK,EAAI,CACtB,CAEQ,kBAAmB,CACnB,MAAA7wD,EAAa,KAAK,iBAAiB,IAAI,EACvCs1N,EAAwB,CAAChuN,EAAciuN,IAAwB,CAInE,GAHA,KAAK,oBAAoB,SACzB,KAAK,mBAAqB,OAEvB,CAACjuN,EACF,OAGF,MAAMkuN,EAAe,IACfC,EAAgB,IAEhBpvM,EAAS,KAAK,mBAAqB,SAAS,cAAc,QAAQ,EACjEA,EAAA,UAAU,IAAI,yBAAyB,EACxC,MAAAwhB,EAAMxhB,EAAO,WAAW,IAAI,EAE5BjD,EAAM,OAAO,iBACnBiD,EAAO,MAAQmvM,EAAepyM,EAC9BiD,EAAO,OAASovM,EAAgBryM,EACzBiD,EAAA,MAAM,MAAQ,GAAGmvM,CAAY,KAC7BnvM,EAAA,MAAM,OAAS,GAAGovM,CAAa,KAmBnCF,GAjBc,IAAM,CACf,MAAA1mI,EAAUxoE,EAAO,MAAQ,EACzByuG,EAAUzuG,EAAO,OAAS,EAE1BI,EAAS,IAAMrD,EAEfhL,EAAWyvB,EAAI,qBAAqBgnD,EAASimC,EAAS,EAAGjmC,EAASimC,EAASruG,CAAM,EAC9ErO,EAAA,aAAa,EAAG,2BAA2B,EAC3CA,EAAA,aAAa,EAAG,wBAAwB,EAEjDyvB,EAAI,UAAYzvB,EAEhByvB,EAAI,UAAU,EACdA,EAAI,IAAIgnD,EAASimC,EAASruG,EAAQ,EAAG,EAAI,KAAK,EAAE,EAChDohB,EAAI,KAAK,MAMTxhB,EAAO,MAAM,aAAe,QAG9B,MAAMvb,EAAWC,KACX2qN,EAAW,GACXC,EAAc,GACdC,EAAW,GACXC,EAAc,IACdC,EAAiB,GACjB9rN,EAAU60E,GAAiB,CAC/B,MAAAv3E,EACA,YAAakuN,EACb,aAAcC,EACd,UAAW,GACX,WAAAz1N,EACA,UAAW,CACT,CAAC,IAAK,IAAK01N,EAAUG,CAAW,EAChC,CAAC,GAAI,IAAKH,EAAUG,CAAW,EAC/B,CAAC,IAAK,GAAIH,EAAUG,CAAW,EAC/B,CAAC,GAAI,GAAIH,EAAUG,CAAW,EAC9B,CAAC,IAAK,GAAIH,EAAUG,CAAW,EAC/B,CAAC,GAAI,GAAIH,EAAUG,CAAW,EAC9B,CAAC,IAAK,IAAKH,EAAUI,CAAc,EACnC,CAAC,IAAK,IAAKJ,EAAUI,CAAc,EACnC,CAAC,IAAK,IAAKJ,EAAUG,CAAW,EAChC,CAAC,IAAK,IAAKH,EAAUG,CAAW,EAChC,CAAC,IAAK,IAAKF,EAAaG,CAAc,EACtC,CAAC,IAAK,IAAKH,EAAaG,CAAc,EACtC,CAAC,IAAK,GAAIJ,EAAUI,CAAc,EAClC,CAAC,IAAK,GAAIJ,EAAUI,CAAc,EAClC,CAAC,IAAK,IAAKF,EAAUE,CAAc,EACnC,CAAC,IAAK,IAAKF,EAAUE,CAAc,EACnC,CAAC,IAAK,GAAIH,EAAaG,CAAc,EACrC,CAAC,IAAK,GAAIH,EAAaG,CAAc,EACrC,CAAC,MAAO,GAAIJ,EAAUI,CAAc,CACtC,EACA,MAAOvyM,GAAiB,YAAY,oBAAoB,EACxD,cAAgBV,GAAW,CACtBA,EACD7Y,EAAQ,KAAKc,EAAS,QAAQ,KAAKA,CAAQ,CAAC,EAE5CA,EAAS,QAAQ,CAErB,EACD,EAAE,KAAMirN,GAAY,CACf/1N,EAAW,GAEX6nC,EAAA,UAAUkuL,EAAS,EAAG,CAAC,EAC5B,EAEI,sBAAU,QAAQ,KAAK,kBAAkB,EAEvCjrN,CAAA,EAGHkrN,EAAuBC,GAAuB,CAC9C,IAAAC,EACJ,GAAGD,EAAU,CACX,MAAM5+M,EAAS4+M,EAAS,IAAK3vN,GAAUiR,GAA6BjR,CAAK,CAAC,EACvE+Q,EAAO,SAAW,EACnB6+M,EAAgB7+M,EAAO,CAAC,EAExB6+M,EAAgB,2BAA2B7+M,EAAO,KAAK,IAAI,CAAC,GAEhE,CACK,eAAU,MAAM,WAAa6+M,EAC7B,wBAAqB,CAAC,CAACA,CAAA,EAGxB,CAAC,SAAAjC,EAAU,kBAAAE,CAAA,EAAqBH,GAAyB,KAAK,MAAM,EACpElpN,EAAWC,KACjB,OAAAQ,GAAa,IAAM,CACX,MAAA0qN,EAAWhC,EAAY,aACvB3sN,EAAQ6sN,IAGd6B,EAAoBC,CAAQ,EACvB,kBAAa,KAAK,YAAa,GAEpC,MAAM9uM,EAAehH,KACR5U,GAAAC,GACX2b,EACA,IAAM,CACJ,MAAMnd,EAAUsrN,EAAsBhuN,EAAO,CAAC,CAAC2uN,CAAQ,EACpDjsN,EAASA,EAAQ,KAAKc,EAAS,QAAQ,KAAKA,CAAQ,CAAC,EACnDA,EAAS,QAAQ,CACxB,EACD,EACF,EAEMA,CACT,CAEQ,iBAAkB,CAClB,MAAA9K,EAAa,KAAK,iBAAiB,IAAI,EACtC,OAAAoL,GAAY2B,IACjB/M,EAAW,UAAU+M,CAAO,EACrB,KAAK,mBACb,CACH,CAEO,QAAS,CACR,MAAA4qB,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAU,IAAI+8L,GAAmB,WAAa,MAAM,EACnD,UAAK,OAAO/8L,CAAG,EAEjB,KAAK,KAAK,oBAAsB,GAC7BA,EAAA,UAAU,IAAI,QAAQ,EAG5B,KAAK,UAAU,UAAU,OAAO,YAAa,KAAK,KAAK,mBAAqB,CAAC,CAC/E,CAwFQ,oBAAoBhU,EAAiB,CAC3C,MAAMwJ,EAAW,MAAM,KAAKxJ,EAAO,cAAc,QAAQ,EACnDhiB,EAAMwrB,EAAS,QAAQxJ,CAAM,EACrBwJ,EAAS,MAAM,KAAK,IAAI,EAAGxrB,EAAM6yN,EAAY,EAAG,KAAK,IAAIrnM,EAAS,OAAQxrB,EAAM6yN,EAAY,CAAC,EAErG,QAAS7wM,GAAW,CACxB,MAAMzb,EAAW,KAAK,cAAc,IAAIyb,CAAM,EAC3Czb,IACQA,IACJ,mBAAc,OAAOyb,CAAM,EAC3B,0BAAqB,UAAUA,CAAM,EAC5C,CACD,CACH,CAEQ,aAAaujJ,EAAoB,CAEpC,CAAC,KAAK,eAAiBA,GAAa,KAAK,YAAY,OACtD,KAAK,oBAAoB,CAAC,KAAK,WAAW,KAAK,EAGjD,KAAK,eAAe,UAAU,OAAO,eAAgBA,CAAS,EACxD,MAAAivD,EAAY,KAAK,oBAAsB,CAACjvD,EAC3C,KAAK,eAAe,UAAU,SAAS,YAAY,IAAMivD,IAC1D,KAAK,eAAe,UAAU,OAAO,aAAcA,CAAS,EAC5DjgN,GAAsB,KAAK,KAAMigN,EAAY,QAAU,eAAe,GAExE,KAAK,mBAAmB,CAC1B,CAEQ,aAAc,CACpB,OAAO,KAAK,eAAe,UAAU,SAAS,cAAc,CAC9D,CAEO,oBAAqB,CAC1B,KAAK,eAAe,UAAU,OAC5B,gBACC,CAAC,KAAK,oBAAsB,KAAK,YAAY,GAAK,KAAK,WAAW,gBAAkB,GACnF,KAAK,WAAW,gBAAkB,IAExC,CAEO,SAAU,CACf,KAAK,eAAe,YACpB,KAAK,aAAa,kBAClB,KAAK,sBAAsB,aAC3B,KAAK,iBAAiB,SACxB,CACF,EA3rBEzB,GAAe,WAAa,kBACbA,GAAA,MAAQ0B,GAAwB,EAAI,EACnD1B,GAAe,mBAAqB0B,GAAwB,mCAAmC1B,GAAmB,KAAK,IAAM,oBAH/H,IAAqB2B,GAArB3B,GCmBA,MAAMn2L,GAAU,CAACr5B,EAA0CyzB,IAAa,CACzD5lB,GAAA4lB,EAAI,MAAOzzB,GAAQ,MAAS,EACzCyzB,EAAI,UAAU,MAAM,QAAUzzB,EAAO,GAAK,MAC5C,EAEA,MAAqBoxN,EAAY,CAqC/B,YACU73N,EACA4kD,EACAhwB,EACAhJ,EAAW,GACXsqM,EACA4B,EACR,CANQ,cAAA93N,EACA,gBAAA4kD,EACA,oBAAAhwB,EACA,cAAAhJ,EACA,oBAAAsqM,EACA,uBAAA4B,EAEJH,IACF,KAAK,WAAW,UAAU,UAAU,IAAI,aAAa,EAGnD/iM,IACG,oBAAiB,IAAImD,IAG5B,KAAK,iBAAmBzoB,IAC1B,CAEO,MAAO,CACZ,KAAK,KAAO,KAEP,aAAU,SAAS,cAAc,KAAK,EACtC,aAAQ,UAAU,IAAI,iBAAiB,EAEtC,MAAAyoN,EAAsB,SAAS,cAAc,MAAM,EACrCA,EAAA,OAAO5zN,EAAK,iBAAiB,CAAC,EAC9B4zN,EAAA,UAAU,IAAI,uBAAuB,EACpD,4BAAyB,SAAS,cAAc,MAAM,EACtD,4BAAuB,UAAU,IAAI,0BAA0B,EAChDA,EAAA,OAAO,KAAK,sBAAsB,EACjD,4BAAyB,IAAI90L,GAAe,CAC/C,KAAM80L,CAAA,CACP,EAEDz5L,GAAkB,qBAAqB,CACrC,KAAM,KAAK,uBAAuB,QAClC,WAAY,GACZ,UAAW,GACZ,EAKI,aAAU,IAAI2E,GAAe,CAChC,YAAa,GACd,EAEI,UAAO,SAAS,cAAc,KAAK,EACnC,UAAK,UAAU,IAAI,cAAc,EAEjC,cAAW,SAAS,cAAc,KAAK,EACvC,cAAS,UAAU,IAAI,kBAAkB,EAEzC,oBAAe,UAAU,IAAI,mBAAmB,EAEhD,SAAM,IAAI3K,GAAI,CACjB,MAAO,IACP,SAAU,GACV,KAAM,OACN,UAAYnsB,GAAM,CACZA,EAAE,OAAuB,UAAY,MAIrBm8B,GAAA,KAAK,IAAI,MAAM,WAAW,EAC9CpW,GAAM7xB,GAAK,OAAO,YAAa,EAAI,CAAC,EACtC,EACA,eAAgB,KAAK,eACrB,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,uBACN,QAAS,IAAM,CACM61C,GAAA,KAAK,IAAI,SAAS,CACvC,EACA,OAAQ,IAAM,CAAC,KAAK,OAAO,OAAO,GACjC,CACD,KAAM,OACN,KAAM,qBACN,QAAS,IAAM,CACMA,GAAA,KAAK,IAAI,SAAS,CACvC,EACA,OAAQ,IAAM,KAAK,OAAO,OAAO,GAChC,CACD,KAAM,oBACN,KAAM,mBACN,QAAS,SAAW,CACdr2C,EAAU,QAGZ6vB,GAAa,YAAYy+I,GAAgB,CACvC,OAAQ,KAAK,OACb,iBAAkB,CAChB,EAAG,mBACH,KAAM,KAAK,QACX,SAAU,CAAC,CACb,EACA,iBAAkB,MAAM,KAAK,YAC9B,EAVD/3H,GAAa,KAAK,CAAC,QAAS,cAAe,EAY/C,EACA,OAAQ,SAAW,CAAC,CAAE,MAAM,KAAK,YAClC,CACH,EACD,EAED,KAAK,IAAI,MAAM,UAAU,IAAI,UAAU,EAElC,cAAW,IAAI9d,GAAI,CACtB,MAAO,IACP,gBAAiB,WACjB,KAAM,WACN,UAAW,IAAM,CAEfgQ,GAAoB,IAAM,KAAK,SAAS,MAAM,WAAW,EACzDpW,GAAM7xB,GAAK,OAAO,iBAAkB,EAAI,CAAC,CAC3C,EACA,eAAgB,KAAK,eACrB,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,0BACN,QAAS,IAAM,CACM61C,GAAA,KAAK,SAAS,SAAS,CAC5C,EACD,CACH,EACD,EAEI,WAAQ,IAAI5d,GAAI,CACnB,MAAO,IACP,SAAU,GACV,KAAM,QACN,UAAW,IAAM,CACfgQ,GAAoB,KAAK,MAAM,MAAM,YAAY,QAAQ,MAAO,EAAE,CAAC,EACnEpW,GAAM7xB,GAAK,OAAO,cAAe,EAAI,CAAC,CACxC,EACA,eAAgB,KAAK,eACrB,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,6BACN,QAAS,IAAM,CACM61C,GAAA,KAAK,MAAM,SAAS,CACzC,GACC,CACD,KAAM,OACN,KAAM,+BACN,SAAU,CACE,SAAS,cAAc,GAAG,CAElC,EACJ,QAAS,IAAM,CACb+zH,GAAe,8BAA8B,CAC/C,EACA,UAAW,GACX,UAAW,GACX,OAAQ,SAAW,CACjB,KAAM,CAAC,YAAA+tD,CAAA,EAAe,MAAM,KAAK,SAAS,gBAAgB,aAAa,KAAK,OAAO,SAAU,IAAK,GAC3F,OAAAA,CACT,EACD,CACH,EACD,EAEI,UAAO,IAAI1/L,GAAI,CAClB,MAAO,IACP,gBAAiB,oBACjB,KAAM,OACN,UAAW,IAAM,CACf,MAAMjvB,EAAM,WAAa,KAAK,KAAK,MAAM,YACzCi/B,GAAoBj/B,CAAG,EAGjB,MAAAopK,EAAYppK,EAAI,SAAS,KAAK,EACpC6oB,GAAM7xB,GAAK,OAAOoyK,EAAY,wBAA0B,aAAc,EAAI,CAAC,CAE7E,EACA,eAAgB,KAAK,eACrB,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,2BACN,QAAS,IAAM,CACMv8H,GAAA,KAAK,KAAK,SAAS,CACxC,EACD,CACH,EACD,EAEI,cAAW,IAAI5d,GAAI,CACtB,MAAO,IACP,gBAAiB,eACjB,KAAM,WACP,EAEI,mBAAgB3rB,GAAY2B,GAAY,CACtC,sBAAiB,UAAUA,CAAO,EACvC,KAAM,CAAC5K,EAAOgyL,CAAQ,EAAIhnL,GAAgC,EACpD,CAACq9M,EAAWkM,CAAY,EAAIvpN,GAAyB,EAC3D,YAAK,iBAAmBgnL,EACxB,KAAK,aAAeuiC,EACb/M,GAAc,CAAC,MAAAxnN,EAAO,UAAAqoN,CAAU,GACxC,EAED,MAAMmM,EAAsB,IAAM,CACZ5vL,GAAA,KAAK,kBAAkB,OAAO,EACzClW,GAAA,CAAC,YAAa,yBAAyB,GAG7C,sBAAmB,IAAIkG,GAAI,CAC9B,MAAO,GACP,gBAAiB,0BACjB,KAAM,WACN,UAAW,SAAW,CACpB,MAAMqM,EAAW,KAAK,kBACnB,IAACA,EAAS,UAAW,CACFuzL,IACpB,MACF,CAEA,MAAMhsL,GAAkB,CACtB,mBAAoB,yBACpB,OAAQ,CACN,QAAS,MACX,EACD,EAEc+9H,GAAA57C,GAAkB1pF,EAAS,SAA8B,CAAC,CAC3E,EACA,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,OACN,QAASuzL,CAAA,CACV,CACH,EACA,eAAgB,KAAK,eACtB,EAED,KAAK,iBAAiB,UAAU,UAAU,IAAI,mBAAmB,EAEjE,KAAK,QAAQ,QAAQ,OACnB,KAAK,MAAM,UACX,KAAK,SAAS,UACd,KAAK,SAAS,UACd,KAAK,IAAI,UACT,KAAK,KAAK,UACV,KAAK,cAAc,UACnB,KAAK,iBAAiB,WAGlB,MAAC,eAAAtjM,CAAkB,OACtB,KAAK,WACD,mBAAgB,IAAI0D,GAAI,CAC3B,cAAe,IAAIxI,GAAc,CAAC,OAAQ,GAAK,EAC/C,aAAc,gBACd,KAAM,SACN,eAAgB,KAAK,eACtB,EAEc8E,EAAA,IAAI,KAAK,cAAc,cAAc,KAAK,EAAE,SAAWzoB,GAAM,CACtEA,EAAE,WAKD,cAAS,mBAAmB,eAAe,CAAC,OAAQ,KAAK,OAAQ,SAAU,KAAK,QAAS,GAC/F,EAEDyoB,EAAe,IAAI/0B,CAAS,EAAE,yBAA0B,MAAM2xC,GAAW,CACpE,QAAK,SAAWA,EAAO,OAAQ,CAChC,MAAMuhB,EAAQ,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAQ,YAAa,GAAO,SAAU,KAAK,SAAS,EACxI,mBAAc,cAAc,QAAU,CAACA,CAC9C,EACD,EAED,KAAK,QAAQ,QAAQ,OAAO,KAAK,cAAc,SAAS,GAG1D,KAAK,QAAQ,OAAO,KAAK,uBAAuB,UAAW,KAAK,QAAQ,SAAS,EAE9E4kK,IACI,aAAQ,OAAO50L,GAAmB,GAGzCnO,EAAe,IAAI/0B,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAAD,KAAY,CACvD,KAAK,SAAWA,GACjB,KAAK,cAAc,CACrB,CACD,EAEDg1B,EAAe,IAAI/0B,CAAS,EAAE,gBAAkBD,GAAW,CACtDA,IAAW,KAAK,QACjB,KAAK,eAAe,EAAI,CAC1B,CACD,EAED,MAAMmF,EAAI,MAAM,CAAC,OAAAnF,EAAQ,SAAAK,KACpB,KAAK,SAAWL,EACV,GAIN,GADa,KAAK,OAAO,UAAc,QAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,EAAI,KACvF,KAAK,WAAW,KAAK,WAAaK,EAOlD20B,EAAe,IAAI/0B,CAAS,EAAE,kBAAmB,MAAM8jB,GAAS,CACxD,MAAApiB,EAAa,KAAK,iBAAiB,IAAI,EAC1C,SAAMwD,EAAE4e,CAAI,EAAG,CAChB,GAAG,CAACpiB,EAAW,EAAG,OAClB,KAAK,aAAa,EAAE,KAAMkI,GAAa,CACjClI,EAAW,GACJkI,KAAA,CACZ,EACD,KAAK,eAAe,EAAI,CAC1B,EACD,EAEDmrB,EAAe,IAAI/0B,CAAS,EAAE,cAAgBsG,GAAW,CACpD,KAAK,SAAWA,EAAO,YACxB,KAAK,cAAc,CACrB,CACD,EAEDyuB,EAAe,IAAI/0B,CAAS,EAAE,kBAAmB,MAAMsG,GAAW,CAC7D,KAAK,SAAWA,EAAO,aAErB,EADU,MAAM,KAAK,SAAS,gBAAgB,QAAQA,CAAM,GACtD,OAAO,MAAQ,CAAC,KAAK,WAC5B,KAAK,cAAc,CAEvB,CACD,EAEDyuB,EAAe,IAAI/0B,CAAS,EAAE,gBAAiB,MAAM8jB,GAAS,CACzD,MAAM5e,EAAE4e,CAAI,GACb,KAAK,UAAU,CACjB,CACD,EAED,MAAMw0M,EAAqB,IAAM,CAC5B,KAAK,OAAO,UACR,cAAS,gBAAgB,YAAY,CAAC,KAAK,OAAO,SAAU,EAAC,CACpE,EAIFvjM,EAAe,IAAI/0B,CAAS,EAAE,iBAAkBs4N,CAAkB,EAClEvjM,EAAe,IAAI/0B,CAAS,EAAE,iBAAmBu4N,GAAkB,CAC9DA,EAAc,IAAI,IAAM,6BACND,GACrB,CACD,EAED,KAAK,sBAAwB,OAAO,YAAY,IAAM,KAAK,gBAAiB,GAAI,CAClF,CAEA,MAAc,cACZjmE,EAAY,GACZv+H,EAC6C,CAC7C,MAAM/zB,EAAS,KAAK,OAEd2yF,EAA+B,GACrCA,EAAU,KAAK,IAAM,CAEhB,GADH,KAAK,QAAQ,UAAU,OAAO,QAAS3yF,IAAWC,EAAU,IAAI,EAC7DD,EAAO,UACKQ,GAAgB,QAAQR,EAAO,SAAU,GAC7C,QAA0C,QAAQ,MAAO,CAEhE,GAAG,KAAK,SAAS,cAAc,YAAY,EACzC,OAGI,MAAA4uB,EAAOrqB,EAAK,kBAAkB,EAC/BqqB,EAAA,UAAU,IAAI,WAAW,EACb/R,EAAA+R,EAAOriB,GAAM,CAC5BqQ,GAAYrQ,CAAC,EACAujB,GAAA,YAAYw9I,GAAqBttK,EAAQ,UAAU,EACjE,EACI,cAAS,OAAO4uB,CAAI,CAC3B,CACF,CACD,EAEG,IAAAjjB,EAAwC,QAAQ,UACjD,KAAE,CAAC3L,GAAWC,EAAU,OAASD,GAAU,KAAK,WAAcA,IAAWsX,GAAgB,CAC1F,MAAMC,EAAU,MAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,MAAM,EACjE5V,EAAa,KAAK,iBAAiB,IAAI,EAC1C4V,GAAW,KAAK,SACjB5L,EAAUoxF,GAAoB,CAC5B,OAAA/8F,EACA,YAAa,CACX,WAAA2B,CACF,CACD,GAAE,KAAK,CAAC,CAAC,QAAA6S,KAAa,CAChB,cAAS,gBAAgBA,CAAO,EACtC,EAED7I,EAAUy4B,GAAa,cAAc,CACnC,OAAApkC,EACA,QAAS,KAAK,SACd,UAAAsyJ,EACA,cAAe,GACf,WAAA3wJ,EACA,WAAY,CAAC,KAAK,SACnB,EAGHgK,EAAQ,KAAM9B,GAAaA,GAAY8oF,EAAU,QAAQ9oF,CAAQ,CAAC,CACpE,CAEA,MAAMA,EAAW,IAAM8oF,EAAU,QAAS9oF,GAAaA,GAAU,EAE1D,OAAA8B,EAAQ,KAAK,IAAM,CACxB,GAAGooB,EACM,OAAAlqB,EAGAA,GAAA,CACV,CACH,CAEO,aAAc,CACnB,CACE,KAAK,IACL,KAAK,MACL,KAAK,SACL,KAAK,SACL,KAAK,KACL,KAAK,cACL,KAAK,iBACL,KAAK,wBACL,QAASywB,GAAQ,CACbA,EAAA,UAAU,MAAM,QAAU,OAC/B,EAEE,KAAK,gBACD,mBAAc,UAAU,MAAM,QAAU,GACxC,mBAAc,cAAc,QAAU,IAG7C,KAAK,2BAA2B,CAClC,CAEQ,eAAgB,CACtB,MAAO,CAAC,EAAE,KAAK,SAAWr6B,EAAU,MAAQ,KAAK,SACnD,CAEQ,kBAAmB,CACnB,MAAC,OAAAD,EAAQ,SAAAK,CAAY,OACpB,YAAK,gBAAkB,CAC5B,OAAQA,EACR,SAAU,QACR,CACF,OAAAL,EACA,SAAAK,CAAA,CAEJ,CAEQ,eAAgB,CACtB,OAAO,KAAK,SAAWJ,EAAU,MAAQ,CAAC,KAAK,QACjD,CAEA,MAAc,YAAa,CACnB,MAAA0B,EAAa,KAAK,iBAAiB,IAAI,EACvC,CAAC,OAAA3B,EAAQ,SAAAK,CAAQ,EAAI,KAAK,iBAAiB,EAC3CqpB,EAAU,CAAC,EAAErpB,GAAY,MAAM,KAAK,SAAS,gBAAgB,QAAQL,CAAM,GACjF,GAAiC,CAAC0pB,IAClB,MAAM,KAAK,SAAS,gBAAgB,aAAa1pB,CAAM,GAEzDo2N,IAAgB,CAC1B,MAAMqC,EAAa,KAAK,QACnB,aAAU,IAAIT,GAAmB,KAAK,WAAY,KAAK,SAAU,KAAK,cAAc,EACnF,WAAK,QAAQ,QAAQh4N,CAAM,EAC3B04N,QAAe,MAAM,KAAK,SAAS/2N,EAAY,KAAK,eAAe,UAAU,SAAS,YAAY,CAAC,EAEzG,MAAO,IAAM,CACX+2N,IAEA,KAAK,QAAQ,KAAK,OAAO,KAAK,KAAM,KAAK,QAAQ,EAE9C,KAAK,QAAa,YAAO,KAAK,SACjC,KAAK,OAAS,OAEXD,EAAYA,EAAW,UAAU,YAAY,KAAK,QAAQ,SAAS,EACjE,KAAK,QAAQ,QAAQ,KAAK,QAAQ,SAAS,EAE7CV,IACD,KAAK,WAAW,UAAU,UAAU,IAAI,UAAU,EAGpD,KAAK,QAAQ,QAAQ,UAAU,OAAO,mBAAmB,EAE7D,CAGF,MAAMr0M,EAASkM,GAAU,CACvB,WAAAjuB,EACA,KAAM,IACN,SAAU,KAAK,SACf,OAAA3B,EACA,SAAU0pB,EAAUrpB,EAAW,OAC/B,YAAa,CACX,gBAAiBgf,GAAc,IAAK,GAAG,EACvC,WAAA1d,CACF,EACA,YAAa,GACb,UAAW,CAAC,EAAE3B,IAAWC,EAAU,MAAQ,KAAK,UACjD,EACDyjB,EAAO,KAAK,UAAU,IAAI,iBAAkB,YAAY,EACxD,KAAM,CAACg1M,CAAY,EAAI,MAAM,QAAQ,IAAI,CACvC,KAAK,SAAS/2N,EAAY,EAAK,EAC/B+hB,EAAO,kBACR,EAED,MAAO,IAAM,CACEg1M,IAEVX,IACD,KAAK,WAAW,UAAU,UAAU,OAAO,UAAU,EAGpD,KAAK,UACD,aAAQ,UAAU,SACvB,KAAK,QAAQ,UACb,KAAK,QAAU,QAGd,KAAK,QAAa,YAAO,KAAK,SACjC,KAAK,OAASr0M,EAEd,KAAK,QAAQ,QAAQ,UAAU,IAAI,mBAAmB,EACjD,aAAQ,QAAQ,QAAQ,KAAK,OAAO,KAAM,KAAK,KAAM,KAAK,QAAQ,EAE3E,CAEQ,UAA6BqQ,EAAkE,CAC/F,MAAApoB,EAAU,KAAK,aACrB,OAAOooB,EAASpoB,EAAUA,EAAQ,KAAM9B,GAAaA,GAAU,CACjE,CAEQ,iBAAiBjK,EAAqB,CACtC,MAAA+4N,EAAO/4N,EAAU,MAAM,CAAC,EAC9B,GAAG+4N,EAAK,OAAQ,CACR,MAAAjwN,EAAIiwN,EAAK,IAAK94N,GAAa2pN,GAAW,CAAC,SAAA3pN,CAAS,EAAC,EAEhD,OADG0E,EAAK,eAAgB,CAACD,GAAKoE,EAAG,EAAK,CAAC,CAAC,CAEjD,CACF,CAEA,MAAc,cAAe,CACrB,MAAC,OAAA1I,CAAU,OACjB,GAAGA,EAAO,UAAY,KAAK,gBAAiB,CAC1C,MAAMJ,EAAY,MAAM,KAAK,SAAS,gBAAgB,uBAAuBI,CAAM,EAC7E24N,EAAO,KAAK,iBAAiB/4N,CAAS,EAE5C,MAAO,IAAM,CACX,KAAK,SAAS,SAAS,gBAAgB+4N,GAAQp0N,EAAK,UAAU,CAAC,EAC/D27B,GAAQtgC,EAAU,CAAC,EAAG,KAAK,QAAQ,EAEvC,CACF,CAEA,MAAc,eAAgB,CACtB,MAAC,OAAAI,CAAU,OACjB,GAAGA,EAAO,UAAY,KAAK,gBAAiB,CAC1C,KAAM,CAAC,MAAA+0H,EAAO,YAAAqjG,CAAW,EAAI,MAAM,KAAK,SAAS,gBAAgB,aAAap4N,EAAO,SAAU,IAAK,GAEpG,MAAO,IAAM,CACX,KAAK,MAAM,SAAS,gBAAgBuE,EAAK6zN,EAAc,kBAAoB,OAAO,CAAC,EACnFl4L,GAAQ60F,EAAQ6gB,GAAgB7gB,CAAK,EAAI,OAAW,KAAK,KAAK,EAElE,CACF,CAEA,MAAc,mBAAoB,CAChC,MAAMshB,EAAmB,KAAK,cAC9B,GAAIA,EAID,QAAK,gBAAiB,CACvB,MAAMljF,EAAQ,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAQ,YAAa,GAAO,SAAU,KAAK,SAAS,EAC7I,MAAO,IAAM,CACMkjF,EAAA,cAAc,QAAU,CAACljF,CAAA,CAC5C,KAEA,OAAO,IAAM,CAEMkjF,EAAA,UAAU,MAAM,QAAU,OAIjD,CAEA,MAAc,SAAS10I,EAAwBi3N,EAAiB,CAC9D,KAAM,CAAC,OAAA54N,CAAA,EAAU,KAAK,iBAAiB,EACjC,CAACwU,CAAA,EAAwB,MAAM,QAAQ,IAAI,CAC/C7B,GAAc,CACZ,OAAA3S,EACA,OAAQ,KAAK,SACb,UAAW,CAAC,KAAK,SACjB,SAAU,KAAK,SACf,YAAa,CACX,WAAA2B,EACA,UAAWi3N,EAAQ,QAAU,MAC/B,EACA,UAAW,CAAC,EAAE54N,IAAWC,EAAU,MAAQ,KAAK,UACjD,EAGF,EAED,MAAO,IAAM,CACIoX,GAAA,KAAK,KAAM7C,CAAO,EAGrC,CAEA,MAAc,SAASuf,EAAsB,CAC3C,OAAO,QAAQ,IAAI,CACjB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,kBAAkB,EACvB,KAAK,eAAe,OAAWA,CAAM,EACrC,KAAK,cAAc,GAAM,EAAI,EAC9B,EAAE,KAAM4+D,GACA,IAAM,CACXA,EAAU,QAAS9oF,GAAaA,IAAY,GAE/C,CACH,CAEA,MAAa,qBAAsB,CACjC,GAAG,CAAC,KAAK,QAAS,OAClB,KAAK,QAAU,GAEf,KAAK,YAAY,EACjB,MAAM4C,EAAWC,KACE,KAAK,iBAAiB,IAAI,EAClC,QAAQ,IAAM,CACvBD,EAAS,OAAO,EACjB,EAEK,MAAAkmF,EAAY,MAAM,QAAQ,IAAI,CAClC,KAAK,UAAU,EAAI,EACnB,KAAK,SAASlmF,CAAQ,EACvB,EAED,MAAO,IAAM,CACXA,EAAS,QAAQ,EACjBkmF,EAAU,QAAS9oF,GAAaA,IAAY,GAEhD,CAEA,MAAc,gBACZ7J,EACAumJ,EACA9lG,EACA0rK,EACA,CACA,MAAMxqN,EAAa,KAAK,iBAAiB,MAAM,SAAS,MAClD4kC,EAAI,KAAK,uBACT7c,EAAU,CAAC,EAAE,KAAK,UAAY,MAAM6c,EAAE,KAAK,SAAS,gBAAgB,QAAQvmC,CAAM,CAAC,GACnFoP,EAAYpP,EAAO,OAAO,EAAI,MAAMumC,EAAE,KAAK,SAAS,gBAAgB,UAAUvmC,EAAO,SAAU,EAAC,EAAI,OAC1G,GAAG0pB,EAAS,CACV,IAAIjgB,EAAM,QACJ,MAAApJ,EAAW68F,GAAmB,KAAK,QAAQ,EAC3Cr9F,EAAW,MAAM0mC,EAAE,KAAK,SAAS,gBAAgB,gBAAgBvmC,CAAM,CAAC,EAC9E,OAAGH,EACM4J,GAAA,GAAG5J,CAAQ,IAAIQ,CAAQ,GAE9BoJ,GAAO,KAAKzJ,EAAO,SAAS,CAAC,IAAIK,CAAQ,GAGpC,IAAM,CACH6/B,GAAAz2B,EAAK,KAAK,IAAI,EAE1B,CAEA,MAAMkpF,EAA4B,GAW/B,GATHA,EAAU,KAAK,IAAM,CACd,SAAI,SAAS,gBAAgBpuF,EAAKvE,EAAO,SAAW,UAAY,MAAM,CAAC,EAC5EkgC,GAAQqmH,EAAS,MAAQr9I,GAAaq9I,EAAS,MAAO,CACpD,mBAAoBn3I,EAAY,OAAYqxC,EAAU,mBACvD,GAAI,OAAW,KAAK,GAAG,EACxB,KAAK,YAAcuvH,GAA6B,KAAK,QAAUzpB,EAAS,KAAK,EAC9E,EAGE,CAACvmJ,EAAO,SAAU,CACb,MAAAonC,EAAO,MAAMb,EAAE,KAAK,SAAS,gBAAgB,QAAQvmC,EAAO,SAAU,EAAC,EACvEJ,EAAYF,GAAuB0nC,CAAI,EACzC,IAAAuxL,EACJ,GAAG/4N,EAAU,OACJ+4N,EAAA,KAAK,iBAAiB/4N,CAAS,EAC5B+yF,EAAA,KAAK,IAAMzyD,GAAQ,QAAUtgC,EAAU,CAAC,EAAG,KAAK,IAAI,CAAC,MAC1D,CACL,MAAMi5N,EAAkBtyE,EAAkC,gBACvDsyE,GAAgB,IAAM,sBACvBlmI,EAAU,KAAK,IAAMzyD,GAAQ24L,EAAe,KAAK,MAAMA,EAAe,KAAK,QAAQ,OAAO,CAAC,EAAG,KAAK,IAAI,CAAC,CAE5G,CAEUlmI,EAAA,KAAK,IAAM,KAAK,KAAK,SAAS,gBAAgBgmI,GAAQp0N,EAAK,mBAAmB,CAAC,CAAC,CAC5F,CAEA,MAAMwgC,EAAYwhH,EAAkC,SACjDxhH,GAAU,GAAK,mBAChB4tD,EAAU,KAAK,IAAMzyD,GAAQ6E,EAAS,QAAS,KAAK,QAAQ,CAAC,EAG/D,MAAMknL,EAAa1lE,EAAsB,oBACtC0lE,GACD7+M,GAAM,IAAM,CACV,KAAK,iBAAiB6+M,CAAS,EAC/B,KAAK,aAAaE,CAAS,EAC5B,EAGHx5H,EAAU,KAAK,IAAM,CACnB,KAAK,cAAc,UAAU,MAAM,QAAUs5H,EAAY,GAAK,OAC/D,EAED,MAAM6M,EAAoBvyE,EAAsB,kBAEhD,GADA,KAAK,kBAAoBuyE,EACtBA,EAAkB,CACnB,MAAMvqG,EAAMuqG,EAAiB,UAQ7B,GAPAnmI,EAAU,KAAK,IAAM,CACnBzyD,GAAQv/B,GAAcm4N,EAAiB,OAAO,EAAG,KAAK,gBAAgB,EAClEvqG,GACG,sBAAiB,OAAO,QAC/B,CACD,EAEEA,EAAK,CACN,MAAMn8G,EAAQ,KAAK,iBAAiB,YAAY,KAAK,EACrDA,EAAM,OAAO,EACb,MAAMlQ,EAA+B,GAC3Byd,GAAA,CACR,MAAO2uG,GAAmBC,EAAK,GAAI,GAAI,EAAE,EACzC,UAAWn8G,EACX,WAAAzQ,EACA,SAAU,IAAM,CACX,CAACA,EAAgB,QAAK,oBAAsBm3N,GAI1C,sBAAiB,UAAU,OAAO1mN,CAAK,CAC9C,EACA,aAAAlQ,CAAA,CACD,EAEK,cAAQ,IAAIA,CAAY,CAChC,CACF,CAEAywF,EAAU,KAAK,IAAM,CACnB,KAAK,iBAAiB,UAAU,MAAM,QAAUmmI,EAAmB,GAAK,OACzE,EAED,MAAMC,EAAqBxyE,EAAsB,oBACjD,GAAGwyE,EAAmB,CACd/4N,QAAS+4N,EAAkB,SAAS,EAAI,EACxCprN,EAAO44I,EAAsB,yBAC7Bn/G,EAAO5mC,GAAgB,QAAQu4N,CAAiB,EAEhD72N,EAA+B,GAC/BoiC,EAAO5F,GAAkB,iBACzBC,EAAgBD,GAAkB,aAAa,CACnD,OAAQ1+B,EACR,UAAWskC,EACX,cAAe,GACf,WAAY,aACZ,OAAQ,GACR,YAAa,CAAC,WAAA3iC,CAAU,EACxB,YAAa,GACb,aAAAO,CAAA,CACD,EAEay8B,EAAA,UAAU,UAAU,IAAI,kBAAkB,EAElD,MAAAq6L,EAAgBnpN,GAGhB,CACJ,KAAM,CAACif,EAAUwsK,CAAW,EAAIxsL,GAA0B,EACpDJ,EAAUiV,GAAO,IACdglI,GAAS,CACd,SAAA75H,EACA,QAAS3iB,EAAW,IAAM,CAAC2iB,GAAU,EACtC,EACAjf,EAAM,OAAO,EAEV,OAAAA,EAAA,QAAQ,UAAU,IAAI,oBAAoB,EAC1CA,EAAA,WAAW,UAAUnB,CAAO,EAE3B4sL,CAAA,EAIH29B,EAAW,CAAC,CAACz4N,GAAgB,iBAAiBR,EAAQ2N,CAAG,GAAK,CADvD,GAGPoc,EADiB,KAAK,SAAS,mBAAmB,eAAe/pB,EAAQ2N,CAAG,EAC9C,KAAK,MAAMrE,GAAY,CAEzD,MAAMo1B,GAAkB,gBAAgB,CACtC,OAAQ,CACN,EAAG,SACH,OAAA1+B,CACF,EACA,YAAasJ,EACb,cAAAq1B,CAAA,CACD,EAEDu6L,IAAsBv6L,EAAc,QAAQ,EAC1Bw6L,IAAAx6L,EAAc,IAAI,YAAY,EACjD,EAED,IAAIu6L,EAAsDC,EAC1D,GAAG,CAACF,EAAU,CACZ,MAAMG,EAAYz6L,EAAc,SAAS,UAAU,EAAI,EACzCA,EAAA,SAAS,YAAYy6L,CAAS,EAC5CF,EAAsBF,EAAa,CACjC,QAASI,EACT,WAAAz3N,CAAA,CACD,EAED,MAAM+hF,EAAW/kD,EAAc,IAAI,aAAa,UAAU,EAAI,EAChDA,EAAA,IAAI,aAAa,YAAY+kD,CAAQ,EACnDy1I,EAAkBH,EAAa,CAC7B,QAASt1I,EACT,WAAA/hF,CAAA,CACD,CACH,CAEGs3N,GACD/2N,EAAa,KAAK6nB,CAAY,EAGhC4oE,EAAU,KAAK,IAAM,CACd,4BAAuB,gBAAgBpuF,EAAK,cAAe,CAACm+B,GAAuB0E,EAAK,kBAAkB,CAAC,CAAC,CAAC,EAClG,KAAK,uBAAuB,QAAQ,cAAc,WAAW,GACpE,OAAO,EACX,4BAAuB,QAAQ,OAAO9C,CAAI,EAChD,EAEK,cAAQ,IAAIpiC,CAAY,CAChC,CAEA,OAAAywF,EAAU,KAAK,IAAM,CACnB,KAAK,uBAAuB,UAAU,MAAM,QAAUomI,EAAoB,GAAK,OAC1E,yBAAoB,CAAC,CAACA,CAAiB,EAC7C,EAEI,2BAAwB,OAAO,WAAW,IAAM,KAAK,eAAe,EAAI,EAAG,GAAI,EAE7E,IAAM,CACXpmI,EAAU,QAAS9oF,GAAaA,EAAU,GAE9C,CAEA,MAAc,eAAewvN,EAAiBtlM,EAAuB,CACnE,KAAK,2BAA2B,EAE1B,MAAC,OAAA/zB,CAAU,OACXumC,EAAI,KAAK,uBAEf,GAAG,CAACvmC,GAAU,CAAC,KAAK,cAAmB,SAAMumC,EAAE,KAAK,SAAS,gBAAgB,iBAAiBvmC,CAAM,CAAC,EACnG,OAGF,MAAMu9B,EAAU,MAAMgJ,EAAE,QAAQ,IAAI,CAClC,KAAK,SAAS,aAAa,kBAAkB,mBAAmBvmC,EAAQq5N,CAAQ,EAChF,KAAK,SAAS,aAAa,WAAW,aAAa,EACnD,KAAK,SAAS,aAAa,WAAW,iBAAiB,CACxD,EAAC,EACIhtN,EAAWkxB,EAAQ,IAAKx7B,GAAWA,EAAO,MAAM,EAChDu3N,EAAa/yL,EAAE,QAAQ,IAAIl6B,CAAQ,CAAC,EAAE,KAAK,MAAM,CAACk6I,EAAU9lG,EAAW84K,CAAa,IAAM,CAC3F,UAAMhzL,EAAE,KAAK,SAAS,gBAAgB,iBAAiBvmC,CAAM,CAAC,EAK1D,OAAAumC,EAAE,KAAK,gBAAgBvmC,EAAQumJ,EAAU9lG,EAAW84K,EAAc,SAAS,CAAC,EACpF,EAED,GAAGh8L,EAAQ,MAAOx7B,GAAWA,EAAO,MAAM,GAAKgyB,EACtC,OAAAulM,GAENvlM,GAAU,QAAQ,WAClB,KAAK,IAAMulM,CAAU,EACrB,KAAMzvN,GAAa,CACPA,KAAA,CACZ,CAEL,CAEQ,sBAAuB,CAC7B,OAAOm8B,GAAkB,KAAK,iBAAiB,MAAOD,GAAU,YAAY,CAAC,CAC/E,CAEO,QAAQ/lC,EAAgBK,EAAmB,CAC7C,KAAK,SAAWL,GAAU,KAAK,WAAaK,IAE/C,KAAK,OAAO,EAEZ,KAAK,OAASL,EACd,KAAK,SAAWK,EAEhB,KAAK,iBAAiB,QACtB,KAAK,QAAU,GACjB,CAEO,4BAA6B,CAC/B,KAAK,wBAA0B,SAChC,aAAa,KAAK,qBAAqB,EACvC,KAAK,sBAAwB,OAEjC,CAEO,SAAU,CACV,YAAS,KAAK,SAAW,OAC9B,KAAK,2BAA2B,EAChC,cAAc,KAAK,qBAAqB,EACxC,KAAK,SAAS,UACd,KAAK,iBAAiB,SACxB,CACF,CCn/BA,MAAMc,GAAO,GACPk5G,GAAYh7F,GAAcle,GAAMA,EAAI,EAE1C,MAAqBq4N,WAAwB/3L,EAAe,CAS1D,MAAa,KAAKzhC,EAAgBK,EAAmB,CACnD,KAAK,WAAa,EAClB,MAAM21I,EAAQ,CAAC31I,EACTo5N,EAAYp5N,IAAa4T,GAC1B,eAAU,UAAU,IAAI,sBAAsB,EAC9C,cAAS+hI,EAAQ,WAAa,uBAAuB,EACpD,MAAAxvI,EAASxG,EAAO,WAEnBK,IACI,WAAQ,KAAK,cAAgB0wC,GAAK,MAAM,KAAK,SAAS,eAAe,cAAc/wC,EAAQK,CAAQ,CAAC,GAG3G,CACQ,MAAA0a,EAAU,IAAIsoB,GAAe,CACjC,KAAMo2L,EAAY,0BAA4B,mBAC/C,EAEKC,EAAU,KAAK,QAAU,SAAS,cAAc,KAAK,EACnDA,EAAA,UAAU,IAAI,2BAA2B,EAEhD,CAAAr5N,GAAYwc,EAAiB68M,EAAS,IAAM,CACxC,KAAK,MAAM,gBAId,KAAK,YAAc,KAAK,WAAa,GAAKrxN,GAAa,OACvD,KAAK,QAAQ,EACZ,GAAC,eAAgB,KAAK,cAAe,GAErChI,GACOq5N,EAAA,UAAU,IAAI,eAAe,EAGjC,MAAA11L,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMqoB,EAAiB,KAAK,eAAiB,IAAIjrB,GAAW,CAC1D,MAAO,8BACP,eAAgB,GAChB,KAAM,aACN,UAAW,GACX,SAAU,GACX,EAEE,KAAK,OACNirB,EAAe,iBAAiB,KAAK,MAAM,MAAO,EAAI,EAGlD,MAAAstK,EAAa,KAAK,WAAap4L,GAAW,8BAA+B,CAAC,SAAU,GAAK,EAC1F,YAAO,OAAOo4L,CAAU,EAE7B98M,EAAiB88M,EAAY,IAAM,CACjC,MAAMhgM,EAASpJ,GAAiB,CAACopM,CAAU,EAAG,EAAI,EAC/Ct5N,EACI,cAAS,gBAAgB,eAAe,CAC3C,OAAAmG,EACA,QAASnG,EACT,MAAOgsD,EAAe,MACtB,YAAa,KAAK,MAAM,eAAiB,EAC1C,EAAE,KAAK,IAAM,CACZ,KAAK,MAAM,EACZ,EAAE,MAAOl7C,GAAQ,CACR,cAAM,mBAAoBA,CAAG,EAC9BwoB,GAAA,CACR,EAEI,cAAS,gBAAgB,iBAAiB,CAC7C,OAAAnzB,EACA,UAAW6B,GAAa,KAAK,UAAU,EACvC,YAAa,KAAK,MAAM,cACxB,MAAOgkD,EAAe,MACvB,EAAE,KAAMhsD,GAAa,CACpB,KAAK,MAAM,EACX+jC,GAAa,aAAa,CACxB,OAAApkC,EACA,SAAAK,CAAA,CACD,EACF,EAAE,MAAO8Q,GAAQ,CACR,cAAM,qBAAsBA,CAAG,EAChCwoB,GAAA,CACR,CAEF,GAAC,eAAgB,KAAK,cAAe,GAExC,KAAK,eAAe,IAAI0yB,EAAe,KAAK,EAAE,QAAS,IAAM,CAC3D,KAAK,SAAS,EACT,aAAQ,KAAK,OAAO,aAAa,EACvC,EAEYroB,EAAA,OAAOqoB,EAAe,SAAS,EAEpCtxC,EAAA,QAAQ,OAAO2+M,EAAS11L,CAAY,EAEvC,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,MAAM1O,EAA2B,GAEjC,GAAIotN,EAmDG,CACL,MAAM1+M,EAAU,IAAIsoB,GAAe,CAAC,QAAS,mBAAoB,GAE3DpT,EAAgB,IAAIC,GAAc,CAEtC,QAAS,CAAE,KAAK,MAAgC,OAAO,OACvD,KAAM,gBACP,EAED,KAAK,eAAe,IAAID,EAAc,KAAK,EAAE,SAAU,IAAM,CAC3D,MAAMtkB,EAAU,KAAK,SAAS,gBAAgB,eAAe,CAC3D,OAAAnF,EACA,QAASnG,EACT,OAAQ,CAAC4vB,EAAc,QACxB,EAEDqK,EAAI,mBAAmB3uB,CAAO,EAC/B,EAEK,MAAA2uB,EAAM,IAAI5B,GAAI,CAClB,cAAAzI,CAAA,CACD,EAEOlV,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAE/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,KA7Ee,CACb,MAAMA,EAAU,IAAIsoB,GAAe,EAAE,EAC7BtoB,EAAA,UAAU,UAAU,IAAI,gCAAgC,EAC1D,MAAA4+D,EAAW,IAAI1G,GAAS,CAC5B,SAAU,KAAK,SACf,aAAc,GACd,eAAgB,GAChB,SAAU,IACD,KAAK,SAAS,mBAAmB,mBAAmB,uCAAuC,EACjG,KAAM2mJ,GAAuBA,EAAmB,UAAU,IAAK33N,GAAQA,EAAI,EAAE,CAAC,EAEjF,QAAUiF,GAAU,CACTyyE,EAAA,UAAWzyE,EAAM,MAA+CA,EAAvC,CAAC,MAAO,OAAW,MAAO,MAAS,CAAS,EACzE,aAAQA,EAAM,KAAK,CAC1B,EACD,EACDyyE,EAAS,iBAAmB,KAAO,CACjC,MAAO09H,GAAe,KAAK,MAC3B,OAAQ,MAGL,sBAAiB,UAAU,IAAM,CACpC19H,EAAS,QAAQ,EAClB,EAEQA,EAAA,UAAU,UAAU,OAAO,UAAU,EAEzC,kBAAe,SAAS,cAAc,MAAM,EAC5C,kBAAa,UAAU,IAAI,wBAAwB,EAExD,MAAMhuE,EAAUguE,EAAS,KAAK,EAAE,KAAK,SAAW,CACxC,MAAA7K,EAAW6K,EAAS,oBAEpB3lE,EAAc,KAAK,OAAO,cAChC2lE,EAAS,mBAAmB,CAC1B,SAAA7K,EACA,QAAS,KAAK,aACd,MAAO,GACP,QAAS,GACT,OAAQ,CAAC96D,CAAA,CACV,EAEEA,GACD2lE,EAAS,UAAU,CAAC,MAAO3lE,EAAa,MAAO,GAAG,CACpD,CACD,EAED3H,EAAS,KAAKV,CAAO,EAEboP,EAAA,QAAQ,YAAY4+D,EAAS,SAAS,EACzC,gBAAW,OAAO5+D,EAAQ,SAAS,EA6B1C,OAAO,QAAQ,IAAI1O,CAAQ,EAAE,KAAK,IACzB,KAAK,GACb,CACH,CAEQ,UAAW,CACb,IAAAuzK,EAAY,KAAK,eAAe,gBAAgB,EACjD,CAACA,GAAa,KAAK,gBACpBA,EAAY,KAAK,MAAM,gBAAkB,KAAK,cAAc,eAG9D,KAAK,WAAW,UAAU,OAAO,OAAQ,CAACA,CAAS,CACrD,CAEQ,GAAI,CACP,YAAK,OAAO,aACb,KAAK,WAAav3K,GAAa,QAAQ,KAAK,MAAM,UAAU,GAGvD,KAAK,QAAQ,KAAK,OAAO,cAAe,OAAW,EAAI,CAChE,CAEA,MAAc,QAAQ2L,EAAoB4jB,EAAW,KAAK,QAAS86B,EAAiB,CAC5E,MAAApyD,EAAQ,KAAK,eAAe,MAE5Bu5N,EAAajiM,IAAa,KAAK,QAErC,GAAGiiM,EAAY,CACb,MAAMC,EAAqC,CACzC,GAAI,KAAK,OAAO,GAChB,WAAYzxN,GAAa,KAAK,UAAU,EACxC,MAAOf,GAAgBhH,EAAO,EAAI,EAAE,MAAQ,IAC5C,cAAe0T,CAAA,EAGX+lN,EAAW,KAAK,MAYtB,GAXA,KAAK,MAAQD,GAGXpnK,GACA,CAACqnK,GACDA,EAAS,aAAeD,EAAS,YACjCC,EAAS,QAAUD,EAAS,QAEvB,aAAQ,OAAW,KAAK,YAAY,EAGxC5/K,GAAU6/K,EAAUD,CAAQ,GAAK,CAACpnK,EACnC,OAGF,KAAK,SAAS,CAChB,CAEM,MAAA5gD,EAAK,MAAMgC,GAAc,CAC7B,MAAO+lN,EAAa,KAAK,MAAQ,CAAC,GAAG,KAAK,MAAO,cAAe,MAAS,EACzE,gBAAiBx/G,GACjB,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEKv5G,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EACpCA,EAAK,OAAOgR,CAAE,EAEd,MAAMkoN,EAAQpiM,EAAS,iBACvBA,EAAS,OAAO92B,CAAI,EAEd,MAAAm5N,EAAqB,CAACnoN,EAAiB6zL,IAAoB,CAC/D,MAAMxyC,EAAqB,CACzB,CAAC,QAAS,IAAK,UAAW,YAAY,EACtC,CAAC,QAAS,IAAK,UAAW,UAAU,GAGhChhH,EAAYrgC,EAAG,QAAQqhJ,EAAQ,CACnC,SAAU,IACV,WAAY,EACZ,OAAQ,cACR,KAAM,WACN,UAAWwyC,EAAS,SAAW,UAChC,EAEM,WAAI,QAAejhL,GAAY,CAC1BytB,EAAA,iBAAiB,SAAU,IAAM,CACjCztB,GAAA,EACP,CAAC,KAAM,GAAK,EAChB,GAGAs1M,GACDC,EAAmBD,EAAO,EAAK,EAAE,KAAK,IAAMA,EAAM,QAAQ,EAG5DC,EAAmBn5N,EAAM,EAAI,CAC/B,CACF,CC/RA,MAAqBo5N,WAAsBz4L,EAAe,CAOxD,MAAa,KAAKzhC,EAAgB,CAC1B,MAAA+sC,EAAQ/sC,EAAO,WAChB,eAAU,UAAU,IAAI,wBAAwB,EACrD,KAAK,SAAS,eAAe,EAE7B,MAAMguC,EAA4B,GAE5B,CAACC,EAAc1tC,EAAM8tI,CAAO,EAAI,MAAM,QAAQ,IAAI,CACtD,KAAK,SAAS,WAAW,SAAS,KAAK,EACvC,KAAK,SAAS,gBAAgB,QAAQthG,CAAK,EAC3C,KAAK,SAAS,kBAAkB,WAAWA,CAAK,EACjD,EAED,CACE,MAAMhyB,EAAU0oB,GAAgB,KAAK,WAAY,MAAS,EACpDO,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAErC,yBAAsB,IAAI5C,GAAW,CACxC,MAAO,6BACP,KAAM,aACN,UAAW,GACZ,EACI,qBAAkB,IAAIA,GAAW,CACpC,MAAO,yBACP,KAAM,MACN,UAAW6M,CAAA,CACZ,EAEDjK,EAAa,OAAO,KAAK,oBAAoB,UAAW,KAAK,gBAAgB,SAAS,EAEtFgK,EAAY,KAAK,KAAK,oBAAqB,KAAK,eAAe,EAE1D,cAAW,IAAIhG,GAAS,CAC3B,OAAAhoC,EACA,YAAAguC,EACA,eAAgB,KAAK,eACrB,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAED,KAAK,QAAQ,OAAO,KAAK,SAAS,OAAO,EAEzCjzB,EAAQ,OAAO,KAAK,SAAS,WAAW,UAAWipB,CAAY,CACjE,CAEA,CACE,MAAMjpB,EAAU0oB,GAAgB,KAAK,WAAY,OAAW,yBAAyB,EAE/E02L,EAAW3gM,GAAO,8BAA+B,CAAC,KAAM,OAAQ,KAAM,wBAAyB,OAAQ,EAAK,GAC5G4gM,EAAc5gM,GAAO,8BAA+B,CAAC,KAAM,SAAU,KAAM,2BAA4B,OAAQ,EAAK,GACpH6gM,EAAc7gM,GAAO,8BAA+B,CAAC,KAAM,OAAQ,KAAM,2BAA4B,OAAQ,EAAK,GAElH/vB,EAAM,wBAA0BikC,GAAwBntC,CAAI,EACvB,CACzC,CAAC45N,EAAU,OAAO,EAClB,CAACC,EAAa,UAAU,EACxB,CAACC,EAAa,EAAE,GAGd,QAAQ,CAAC,CAACj9L,EAAQk9L,CAAM,IAAM,CAChC,MAAMlxN,EAAUM,GAAQD,GAAO6wN,EAAS,IAAMA,EAAS,GAAG,EAC1Dl9L,EAAO,KAAOh0B,EAAQ,IACtBg0B,EAAO,aAAa,UAAWh0B,EAAQ,QAAU,QAAQ,EAC1D,EAEO2R,EAAA,OAAOo/M,EAAUC,EAAaC,CAAW,CACnD,CAEA,CACQ,MAAAt/M,EAAU,IAAIsoB,GAAe,CACjC,KAAM,uBACN,QAAS,GACV,EAEKW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAErC,wBAAqB,IAAI2F,GAAmB,CAC/C,MAAO,WACP,KAAM,WACN,UAAW,GACX,eAAgB,KAAK,eACrB,SAAU,IAAM,CACd,KAAK,SAAS,eAER,MAAC,MAAAzE,CAAK,EAAI,KAAK,mBACfiJ,EAAajJ,GAAO,OAAS,8BACnCkJ,EAAYD,EAAa,KAAK,mBAAmB,MAAQ,MAAS,CACpE,EACA,cAAe,iCACf,UAAW,6BACX,YAAa,gCACZ,KAAK,QAAQ,EAEHnK,EAAA,OAAO,KAAK,mBAAmB,SAAS,EAErD,MAAMR,EAAUzoB,EAAQ,QAElB,CAAC,YAAAqzB,EAAa,QAAS7rC,GAAKorC,GAAwB,EAElDnK,EAAA,OACNj/B,EAAK,0BAA0B,EAC/BhC,CAAA,EAGUyrC,EAAA,KAAK,KAAK,kBAAkB,EAChCjzB,EAAA,QAAQ,OAAOipB,CAAY,EAC9B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAI6xB,GAAiB,CACnC,OAAA5sC,EACA,KAAMO,EACN,eAAgB,KAAK,eACrB,mBAAoB,KAAK,mBACzB,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEI,gBAAW,OAAOwa,EAAQ,SAAS,CAC1C,CAEiB8B,EAAA,KAAK,SAAS,QAAS,IAAM,CACvC,cAAS,QAAQ,SAAW,GAEjC,MAAMxQ,EAA2B,GAE3BgiC,EAAiB,KAAK,SAAS,kBAAkB,WACrDtB,EACA,KAAK,oBAAoB,MACzB,KAAK,gBAAgB,OAEd1gC,EAAA,KAAKgiC,EAAe,KAAK,IAAM,CACtC,KAAK,MAAM,CACb,EAAIl9B,GAAQ,CACF,cAAM,uBAAwBA,CAAG,CAC1C,EAAC,EAEC,KAAK,SAAS,cACf9E,EAAS,KAAK,KAAK,SAAS,eAAe,KAAM83B,GACxC,KAAK,SAAS,kBAAkB,mBAAmBA,EAAW4I,CAAK,CAC3E,CAAC,EAGD,KAAK,mBAAmB,mBAChB1gC,EAAA,KAAK,KAAK,SAAS,gBAAgB,eAAe,KAAK,mBAAmB,KAAK,CAAC,EAG3F,QAAQ,KAAKA,CAAQ,EAAE,QAAQ,IAAM,CAC9B,cAAS,QAAQ,gBAAgB,UAAU,EACjD,CACA,GAAC,eAAgB,KAAK,cAAe,GAExC,KAAK,oBAAoB,iBAAiB9L,EAAK,WAAY,EAAI,EAC/D,KAAK,gBAAgB,iBAAiB8tI,EAAQ,MAAO,EAAI,EACzD,KAAK,mBAAmB,iBAAiB3gG,GAAwBntC,CAAI,EAAG,EAAI,EAE5E,KAAK,SAAS,cAChB,CACF,CCzJA,MAAMg6N,GAIF,GAGJ,MAAqBC,WAA0B/4L,EAAe,CAoBrD,MAAO,CACZ,KAAK,KAAO,KAGP,eAAU,UAAU,IAAI,wBAAwB,EAGrD,MAAMg5L,EAAcjhM,GAAO,gCAAiC,CAAC,SAAU,GAAK,EACvE,cAAS,YAAYihM,CAAW,EACrC,KAAK,SAAWA,EAEV,MAAAC,EAAoB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qBAAqB,EACrDD,EAAY,OAAOC,CAAiB,EAEjC,KAAK,SACYA,EAAA,UAAU,IAAI,YAAY,EAG9C,MAAMC,EAA4B,IAAM,CAChCC,QAAsB,SAAS,cAAc,KAAK,EACxDA,SAAoB,UAAY,wBACzBA,CAAA,EAGHA,EAAsBD,IAEtBE,EAAqB,CAACh8H,EAA0Bi8H,EAAqBx6N,IAAwB,CAC3F,MAAAkU,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EAE7BlU,MAAA,KAAK,MAAM,aACrBA,EAAM,OAAOu+F,CAAU,EAEnB,IAAAjmE,EACJ,GAAGkiM,EACDtmN,EAAQ,OAAOlU,CAAK,MACf,CACC,MAAA05B,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sBAAsB,EAC9BpB,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,0BAA0B,EAC5CoB,EAAA,OAAO15B,EAAOs4B,CAAQ,EAC3BpkB,EAAQ,OAAOwlB,CAAI,CACrB,CAEO,OAAC,QAAAxlB,EAAS,MAAAlU,EAAO,SAAAs4B,EAAQ,EAG7B,eAAY,IAAIn4B,GAAK,YAC1B,MAAMs6N,EAAsBF,EAAmB,KAAK,UAAU,QAAS,GAAM,KAAK,KAAK,EAClF,aAAUt5L,GAAW,MAAM,EAE1B,MAAAi8B,EAAU,KAAK,QAAUxB,GAAiB,CAC9C,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,UACN,KAAM,sBACN,QAAS,IAAM,CACA53B,GAAA,qBAAqBnkC,EAAU,KAAM,EAAI,CACxD,EACA,OAAQ,IAAM,KAAK,SAAWA,EAAU,MAAQ,KAAK,QACtD,EACF,EAEmB86N,EAAA,QAAQ,OAAO,KAAK,OAAO,EAE1C,IAAAC,MAAL,CACEA,IAAA,QAAU,CAAV,YACAA,IAAA,MAAQ,CAAR,SAFG,GAAAA,MAAA,KAKL,MAAMC,EAAwBJ,EAAmBt2N,EAAK,sBAAsB,CAAC,EAC7E,KAAK,iBAAmB02N,EAAsB,MAE9C,MAAMC,EAAiCP,IACjBM,EAAA,SAAS,OAAOC,CAA8B,EAEpE,MAAMjiN,EAAqE,CACzE,CAAC,eAAgB,sBAAsB,EACvC,CAAC,UAAW,cAAc,EAC1B,CAAC,UAAW,SAAS,EACrB,CAAC,QAAS,YAAY,EACtB,CAAC,QAAS,oBAAoB,EAC9B,CAAC,QAAS,OAAO,EACjB,CAAC,QAAS,OAAO,EACjB,CAAC,QAAS,YAAY,EACtB,CAAC,QAAS,OAAO,EACjB,CAAC,SAAU,cAAc,EACzB,CAAC,UAAW,sBAAsB,GAGpCiiN,EAA+B,OAAO,GAAGjiN,EAAE,IAAKjP,GAAS,CAClDA,EAAA,CAAC,EAAI,IAAIvJ,GAAK,YAAY,CAAC,IAAK,UAAU,EACzC,MAAA+T,EAAU,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,iBAAiB,EACvCA,EAAQ,OAAOxK,EAAK,CAAC,EAAE,OAAO,EACvBwK,CACR,EAAC,EAEFomN,EAAoB,OAAO,GAAG,CAC5BG,EACAE,GACA,IAAI,CAAC,CAAC,QAAAzmN,CAAO,IAAMA,CAAO,CAAC,EAExB,YAAO,OAAOomN,EAAqBp9J,CAAO,EAI3C,KAAK,YACF,aAAU,IAAIy6J,GAAY,KAAK,SAAU,KAAK,WAAY,KAAK,eAAgB,GAAM,KAAK,SAAS,EACxG,KAAK,QAAQ,OACb,KAAK,WAAW,OAAO,KAAK,QAAQ,OAAO,GAG7C,MAAMkD,EAAgB,GACjB,gBAAW,mBAAqB,IAAM,CACzC,MAAM7nM,EAAO,KAAK,YAAY,IAAI,sBAAsB,EACxD,GAAG,CAACA,EAAK,MAAO,OAEV,MAAA2D,EAAM3D,EAAK,IAAM,EACvB8nM,EAAiBnkM,GAAOkkM,CAAa,GAGvC,MAAME,EAAgB,CAACC,EAAgBnrD,EAAW,WAAa,IAAuB,CACpF,IAAIz2J,EAAQ,EACZ,OAAG4hN,IACO5hN,EAAA,GAGHA,CAAA,EAGH0hN,EAAoBE,GAA2B,CACnDZ,EAAkB,UAAU,OAAO,aAAc,KAAK,SAAWY,CAAa,EAC9E,KAAK,YAAY,UAAU,UAAU,OAAO,mBAAoBA,CAAa,EAElEnrD,EAAAkrD,EAAcC,CAAa,CAAC,EAEnCA,GACF,KAAK,YAAY,sBACnB,EAGInrD,EAAaluI,GAAiB,CAClC,QAAS24L,EACT,KAAM,aACN,eAAgB,IAChB,QAAS,GACV,EAEUzqD,EAAA,KAAK,QAAU,EAAqB,CAAgB,EAE/D,MAAMorD,EAAqBt5L,GAAiB,CAC1C,QAASi5L,EACT,KAAM,aACN,eAAgB,IAChB,QAAS,GACV,EAEDK,EAAmB,CAAC,EAEH1+M,EAAA,KAAK,SAAWtQ,GAAM,CAClC4jK,EAAW,UAAY,KAAK,SAC7B,KAAK,WAAW,kBAAkB,CAChC,QAAS,KAAK,WAAW,UAAU,cAAc,kBAAkB,EACnE,SAAU,QACX,EACDA,EAAW,CAAkB,EAEzB,KAAK,UACWuqD,EAAA,UAAU,OAAO,YAAY,EAC1C,eAAU,UAAU,OAAO,eAAe,IAExC,KAAK,WAAW,4BACzB,KAAK,OAAO,iBAEb,GAAC,eAAgB,KAAK,cAAe,GAEvB79M,EAAA,KAAK,QAAS,SAAW,CACpC,IAAAyc,EACE,MAAC,OAAAt5B,EAAQ,SAAAK,CAAY,OACxBA,GAAY,MAAM,KAAK,SAAS,gBAAgB,QAAQL,CAAM,EACzDs5B,EAAA,KAAK,OAAO,UAAUkgM,EAAe,EACnCx5N,EAAO,YACTs5B,EAAA,KAAK,OAAO,UAAU8tL,EAAc,EAClC,MAAM,KAAK,SAAS,gBAAgB,MAAMpnN,CAAM,EAClDs5B,EAAA,KAAK,OAAO,UAAU4gM,EAAa,EAEnC5gM,EAAA,KAAK,OAAO,UAAUu8G,EAAiB,EAG3Cv8G,IAIDA,aAAekgM,GACZlgM,EAAA,KAAKt5B,EAAQ,KAAK,QAAQ,EACtBs5B,aAAe4gM,GACvB5gM,EAAI,KAAKt5B,CAAM,GAEZs5B,aAAe8tL,GACZ9tL,EAAA,OAASt5B,EAAO,WAEpBs5B,EAAI,OAASt5B,EAGfs5B,EAAI,KAAK,GAEV,GAAC,eAAgB,KAAK,cAAe,GAExC,KAAK,eAAe,IAAIr5B,CAAS,EAAE,kBAAoBsG,GAAW,CAC7D,KAAK,SAAWA,EAAO,SAAS,EAAK,GACtC,KAAK,cAAc,CACrB,CACD,EAED,KAAK,eAAe,IAAItG,CAAS,EAAE,cAAgBuG,GAAW,CACzD,KAAK,SAAWA,EAAO,SAAS,EAAI,GACrC,KAAK,cAAc,CACrB,CACD,EAED,KAAK,eAAe,IAAIvG,CAAS,EAAE,sBAAwBqJ,GAAY,CACrE,KAAK,iBAAiBA,CAAO,EAC9B,EAEI,oBAAe,IAAIrJ,CAAS,EAAE,iBAAkB,CAAC,CAAC,OAAAD,EAAQ,KAAA49B,KAAU,CAClE,2BAAsB59B,EAAQ49B,CAAI,EACxC,EAUI,iBAAc,IAAIo1K,GAAe,CACpC,UAAW,CAAC,CACV,KAAM,2BACN,KAAM,gBACL,CACD,KAAM,UACN,KAAM,WACL,CACD,KAAM,oBACN,KAAM,WACL,CACD,YAAa,gCACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,2BACb,KAAM,oBACN,KAAM,SACL,CACD,YAAa,8BACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,yBACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,2BACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,gCACb,KAAM,kBACN,KAAM,SACL,CACD,KAAM,yBACN,KAAM,UACL,CACD,KAAM,kBACN,KAAM,UACP,EACD,WAAY,KAAK,WACjB,YAAcwoB,GAAa,CAEND,EAAAtiN,EAAE,UAAWjP,GAASA,EAAK,CAAC,IAAMwxN,EAAS,IAAI,CAAC,EAE7D,MAAAl/M,EAAUk/M,EAAS,OAAS,WAAah/M,GAAS,YAAY,YAAY,EAAI,IAAM,EAC1F,WAAW,IAAM,CACfi/M,EAAc,UAAU,OAAO,YAAaD,EAAS,OAAS,SAAS,GACtEl/M,CAAO,CACZ,EACA,SAAU,KAAK,SACf,eAAgB,CAAC+H,EAAM7kB,IAAW,CAC1B,MAAAwK,EAAOiP,EAAE,KAAMjP,GAASA,EAAK,CAAC,IAAMqa,CAAI,EAC1Cra,GAIJA,EAAK,CAAC,EAAE,iBAAiB,CAAC,IAAKA,EAAK,CAAC,EAAG,KAAM,CAACxK,CAAM,CAAE,EACzD,EACA,sBAAuB,CAAC,KAAK,QAC7B,OAAQ,KAAK,OACd,EAEI,iBAAY,oBAAsB,IAAM,CAC3C47N,EAAiB,EAAI,EAChB,eAAU,UAAU,IAAI,eAAe,GAI9C,KAAK,YAAY,aAAe,GAE7B,KAAK,QACN,KAAK,QAAQ,QAAQ,OAAO,KAAK,YAAY,SAAS,EAEtD,KAAK,WAAW,OAAO,KAAK,YAAY,SAAS,EAGnD,MAAMK,EAAgBh5L,GAAa,CAAC,KAAM,kBAAmB,GACxD,aAAQ,OAAOg5L,CAAa,EAEjC5+M,EAAiB4+M,EAAe,IAAM,CACvBx6K,GAAA,CACX,OAAQ,KAAK,OACb,OAAQ,KAAK,OACd,CACA,GAAC,eAAgB,KAAK,cAAe,EAG1C,CAEQ,kBAAkB33C,EAAmDtJ,EAASsJ,EAAQ,OAAQjJ,EAAmB,CACvH,MAAMo+H,EAAiB87F,GAAiBv6N,CAAM,IAAIK,CAAQ,EAC1D,GAAIo+H,EAEM,UAAA+8F,KAAY,KAAK,YAAY,UAAW,CAChD,MAAMnlE,EAAcmlE,EAAS,YACvBn8L,EAAUo/F,EAAe43B,CAAW,EAC1C,GAAG,CAACh3H,EACF,SAGE,IAAAtB,EAYD,GAXAy9L,EAAS,OAAS,QACnBz9L,EAAW,CAACz0B,CAAO,EAAE,OAAQA,GAAY,CACvC,MAAMuyE,EAAevyE,EAA4B,cACjD,OAAOuyE,GACLx1E,GAAUw1E,CAAW,IAAM,KAAK,YAAY,cAAc,QAC1D,CAACx8C,EAAQ,KAAMkH,GAAMA,EAAE,MAAQj9B,EAAQ,GAAG,EAC7C,EAEDy0B,EAAW,KAAK,YAAY,qBAAqB,CAACz0B,CAAO,EAAG+sJ,CAAW,EAGtE,CAACt4H,EAAS,OACX,SAGF,MAAM29L,EAAW39L,EAChB,OAAQz0B,GAAY,CAAC+1B,EAAQ,KAAMkH,GAAMA,EAAE,MAAQj9B,EAAQ,KAAOi9B,EAAE,SAAWj9B,EAAQ,MAAM,CAAC,EAC9F,IAAKA,IAAa,CAAC,IAAKA,EAAQ,IAAK,OAAQA,EAAQ,QAAQ,EACtD+1B,EAAA,QAAQ,GAAGq8L,CAAQ,GAGxBF,EAAS,OAAS,QAAU,KAAK,SAAWn7N,EAAW,KAAK,SAAWL,IACxE,KAAK,YAAY,gBAAgBq2J,CAAW,IAAM,IAClD,KAAK,WAAah2J,IAElB,KAAK,YAAY,gBAAgBg2J,CAAW,GAAKt4H,EAAS,OAC1D,KAAK,YAAY,oBAAoBA,EAAUy9L,EAAU,EAAK,EACzD,iBAAY,WAAWA,EAAS,KAAM,KAAK,YAAY,SAASA,EAAS,IAAI,EAAIz9L,EAAS,MAAM,EAEzG,CACF,CAEA,MAAc,iBAAiBz0B,EAAmD,CAChF,GAAG,KAAK,KAAM,OAER,MAAC,OAAAtJ,CAAU,EAAAsJ,EACXiO,EAAU,MAAM,KAAK,SAAS,gBAAgB,QAAQvX,CAAM,EAC5DK,EAAWu7E,GAAmBtyE,EAASiO,CAAO,EAEpD,KAAK,kBAAkBjO,CAAO,EAC3BjJ,GACI,uBAAkBiJ,EAAS,OAAWjJ,CAAQ,CAEvD,CAEO,uBAAuBo+H,EAA2Cz+H,EAAgBkS,EAAgB7R,EAAmB,CAC1H,UAAUsN,KAAOuE,EACL,UAAAspN,KAAY,KAAK,YAAY,UAAW,CAChD,MAAMnlE,EAAcmlE,EAAS,YAEvBn8L,EAAUo/F,EAAe43B,CAAW,EAC1C,GAAG,CAACh3H,EAAS,SAEP,MAAAs8L,EAASH,EAAS,OAAS,QAC/B,KAAK,SAAWn7N,EAChB,KAAK,SAAWL,GAAU,KAAK,WAAaK,EAC3Cs7N,GACI,iBAAY,WAAWH,EAAS,KAAM,KAAK,YAAY,SAASA,EAAS,IAAI,EAAItpN,EAAK,MAAM,EAGnG,MAAM5O,EAAM+7B,EAAQ,UAAWkH,GAAMA,EAAE,MAAQ54B,CAAG,EAKlD,GAJGrK,IAAQ,IACD+7B,EAAA,OAAO/7B,EAAK,CAAC,EAGpBq4N,EAAQ,CACT,MAAM75N,EAAY,KAAK,YAAY,KAAKu0J,CAAW,EAC7C7rI,EAAM1oB,EAAU,cAAc,cAAc6L,CAAG,oBAAoB3N,CAAM,IAAI,EACnF,GAAGwqB,EAAK,CACH,KAAK,YAAY,UAAU,aACvB,iBAAY,UAAU,gBAAgBA,CAAG,EAG1C,MAAA88C,EAAOxlE,EAAU,iBAA8B,0BAA0B,EACzEwB,EAAM,MAAM,KAAKgkE,CAAI,EAAE,QAAQ98C,CAAG,EACxCA,EAAI,OAAO,EAERlnB,IAAQ,IAAM,KAAK,YAAY,gBAAgB+yJ,CAAW,GAAM/yJ,EAAM,GACrE,OAAK,YAAY,gBAAgB+yJ,CAAW,CAElD,CACF,CAIF,CAEJ,CAEO,sBAAsBr2J,EAAgB49B,EAAiD,CAC5F,GAAG,KAAK,KAAM,OAER,MAAAn1B,EAAI8xN,GAAiBv6N,CAAM,EACjC,GAAG,CAACyI,EAAG,OACP,MAAMyJ,EAAO,CAAC,GAAG0rB,EAAK,KAAM,GAE5B,UAAUv9B,KAAYoI,EACpB,KAAK,uBAAuBA,EAAEpI,CAAQ,EAAGL,EAAQkS,EAAM,MAAM,CAAC7R,CAAQ,EAAI,OAAY,CAACA,CAAQ,EAGjG,KAAK,WAAW,UAClB,CAEA,MAAc,aAAc,CAEpB,MAAAoxJ,EAAY,KAAK,OAAO,UAAU,EAClC,CAACmqE,EAAgB3qL,CAAS,EAAI,MAAM,QAAQ,IAAI,CACpDwgH,EAAY,KAAK,YAAY,eAAmB,KAChDA,EAAY,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAO,WAAY,cAAc,EAAI,GAC/F,EAED,MAAO,IAAM,CACX,KAAK,SAAS,cACT,aAAQ,UAAU,IAAI,MAAM,EAC5B,iBAAY,YAAY,EAAI,EACjC,KAAK,UAAU,UAAU,OAAO,kBAAmBmqE,GAAkB3qL,CAAS,EAGlF,CAEO,aAAatlC,EAAuB,CACzC,KAAK,YAAY,UAAYA,CAC/B,CAEQ,kBAAkB3L,EAAgBK,EAAmB,OAC3D,OAAQ+W,EAAAmjN,GAAAv6N,KAAAu6N,GAAAv6N,GAA6B,KAA7BK,KAAA+W,EAAA/W,GAA+C,GACzD,CAEO,QAAQL,EAAgBK,EAAmB,OAChD,GAAG,KAAK,SAAWL,GAAU,KAAK,WAAaK,EAAiB,SAEhE,KAAK,OAASL,EACd,KAAK,SAAWK,EACX,gCAAcL,IAAWC,EAAU,MACxC,KAAK,YAAc,GAEhB,KAAK,MACN,KAAK,KAAK,EAGZ,MAAMw+H,EAAiB,KAAK,kBAAkBz+H,EAAQK,CAAQ,EAC/C,OAAAo+H,EAAA,0BAA2BrnH,EAAA,KAAK,kBAAkBnX,EAAU,KAAMD,CAAM,GAAE,2BAA/CoX,EAA+C,yBAA6B,IAEtH,KAAK,YAAY,SAAS,CACxB,OAAApX,EACA,SAAAK,EACA,eAAAo+H,CAAA,CACD,EAEI,cAAS,QAAQz+H,EAAQK,CAAQ,EAE/B,EACT,CAEA,MAAc,gBAAiB,CACvB,MAAC,OAAAL,EAAQ,SAAAK,CAAY,OACrB2vB,EAAgB,CAAC,EAAEhwB,IAAWC,EAAU,MAAQI,GAChDkxJ,EAAYvhI,EAAgB3vB,EAAWL,EACvC,CAACuX,EAASlC,EAAag4H,EAAOr1H,CAAS,EAAI,MAAM,QAAQ,IAAI,CACjE,KAAK,SAAS,gBAAgB,QAAQu5I,CAAS,EAC/C,KAAK,SAAS,gBAAgB,YAAYA,CAAS,EACnD,KAAK,SAAS,gBAAgB,MAAMA,CAAS,EAC7C5+I,GAAc,CACZ,OAAA3S,EACA,SAAUgwB,EAAgB,OAAY3vB,EACtC,UAAW2vB,GAAiB3vB,IAAaJ,EAAU,KACnD,OAAQ,GACT,EACF,EAED,MAAO,IAAM,CACX,KAAK,UAAU,iBAAiB,CAC9B,IAAKotI,EAAQ,mBAAsBh4H,EAAc,uBAA0BhV,GAAYkX,EAAU,qBAAwBg6I,EAAU,OAAO,EAAI,oBAAsB,qBACrK,EACI,sBAAiB,gBAAgBv5I,CAAS,EAC1C,aAAQ,UAAU,OAAO,OAAQ,CAAC,KAAK,SAAWgY,GAAiBhwB,IAAWC,EAAU,IAAI,EAErG,CAEA,MAAa,qBAAsB,CAC9B,IAAC,KAAK,YACP,OAGF,KAAK,YAAc,GACb,MAAA0yF,EAAY,MAAM,QAAQ,IAAI,CAClC,KAAK,YAAY,EACjB,KAAK,cAAc,EAAI,EACvB,KAAK,SAAS,oBAAoB,EAClC,KAAK,eAAe,EACrB,EAED,MAAO,IAAM,CACDA,EAAA,QAAS9oF,GAAa,CACnBA,KAAA,CACZ,EAEL,CAEA,MAAc,cAAiCkqB,EAAyD,CAChG,MAAC,OAAA/zB,CAAU,OACb,IAAA08D,EACD,GAAA18D,EAAO,SACD08D,EAAA18D,IAAWC,EAAU,MAAQ,MAAM,KAAK,SAAS,gBAAgB,QAAQD,EAAO,SAAU,OAC5F,CACC,MAAAwG,EAASxG,EAAO,WACN,KAAK,UAAYQ,GAAgB,QAAQR,CAAM,EAE7D08D,EAAO,MAAM,KAAK,SAAS,eAAe,eAAe,MAAM,KAAK,SAAS,eAAe,cAAc18D,EAAQ,KAAK,QAAQ,CAAC,EAGzH08D,EAAA,CAAC,CADKl8D,GAAgB,QAAQgG,CAAM,EACX,cAAgB,MAAM,KAAK,SAAS,gBAAgB,UAAUA,EAAQ,aAAa,CAEvH,CAEA,MAAMqD,EAAW,IAAM,CACrB,KAAK,QAAQ,UAAU,OAAO,OAAQ,CAAC6yD,CAAI,GAGtC,OAAA3oC,EAASlqB,EAAWA,GAC7B,CAEO,iBAAiBm0E,EAAiBwgD,EAAoB,CAC3D,OAAO,KAAK,YAAY,KAAKxgD,EAAQwgD,CAAQ,CAC/C,CAEA,oBAAqB,CACnB,MAAM,mBAAmB,EAEzB,KAAK,WAAW,UAClB,CAEA,qBAAsB,CACpB,MAAM,oBAAoB,EAEvB,KAAK,cACN,KAAK,SAAS,UACd,KAAK,YAAY,UAErB,CAEO,SAAU,CACf,KAAK,YAAc,GACnB,KAAK,oBAAoB,CAC3B,CAEA,aAAoB,KAAK98F,EAAuB1hC,EAAgB67N,EAAqB,CACnF,MAAMviM,EAAMoI,EAAO,UAAU84L,GAAmB,EAAI,EACpD,OAAAlhM,EAAI,UAAYuiM,EAChBviM,EAAI,QAAU,GACdA,EAAI,QAAQt5B,CAAM,GACjB,MAAMs5B,EAAI,yBACL,MAAAA,EAAI,iBAAiB,EAAI,EACxBA,EAAI,MACb,CACF,CCroBO,MAAMg3H,GAAgC,wBAEtC,MAAMwrE,WAAwBj6L,EAAc,CAKjD,aAAc,CACN,OACJ,UAAW,SAAS,eAAe,cAAc,EACjD,aAAc,GACd,eAAgB,QACjB,EATH,KAAQ,sBAAwB,EAUhC,CAEA,UAAUzhC,EAAuB,CAC/B,KAAK,SAAWA,EAEhBsB,GAAW,iBAAiB,eAAgB,CAAC2sB,EAAMi3B,IAAO,CACrDA,IAAO4a,GAAW,QAAU7xC,IAAS6xC,GAAW,QACjD,KAAK,cAAc,EAAK,CAC1B,CACD,EAEUx+D,GAAA,iBAAiB,SAAU,IAAM,CAC1C,KAAK,oBAAoB,EAC1B,CACH,CAEO,sBAAuB,CAC5B,MAAM43B,EAAM,KAAK,UAAUkhM,GAAmB,GAAO,EAAI,EACzD,OAAAlhM,EAAI,OAAS,KAENA,CACT,CAEO,sBAAsBA,EAAyB,CACpD,MAAMyiM,EAAc,KAAK,eACzB,GAAGA,EAAa,CACd,MAAMz4N,EAAM,KAAK,cAAc,QAAQy4N,CAAW,EAE/C,KAAK,WAAW,QAAQ,IAAMA,EAAY,WACtC,gBAAW,QAAQziM,GAAK,SAAS,EAGrCA,GACEh2B,IAAQ,KACJ,mBAAcA,CAAG,EAAIg2B,GAGVyiM,EAAY,UAAU,UAAU,SAAS,QAAQ,GAE7DziM,EAAA,UAAU,UAAU,IAAI,QAAQ,EAG1ByiM,EAAA,UAAU,YAAYziM,EAAI,SAAS,IAE5Ch2B,IAAQ,IACJ,mBAAc,OAAOA,EAAK,CAAC,EAGlCy4N,EAAY,UAAU,SACxB,MAEK,mBAAc,QAAQziM,EAAI,SAAS,EAG1C,KAAK,eAAiBA,CACxB,CAEO,WAAWwI,EAAY5W,EAAkB6W,EAAwB,CAClE,KAAK,cAAc,QAChB,mBAAc,GAAO7W,CAAO,EAG7B,iBAAW4W,EAAI5W,EAAS6W,CAAY,CAC5C,CAEQ,qBAAsB,CACtB,MAAAi6L,EAAc,KAAK,UAAU,uBAAuB,YACpDlJ,EAAa,KAAK,UAAU,YAAckJ,EAChD,SAAS,gBAAgB,MAAM,YAAY,4BAA6B,GAAKlJ,CAAU,EACvF,SAAS,gBAAgB,MAAM,YAAY,wBAAyBkJ,EAAc,IAAI,EACtF,SAAS,gBAAgB,MAAM,YAAY,8BAA+B,GAAKA,CAAW,CAE5F,CAEO,MAAO,CACH,cAAK,UAAU,OAAO1rE,EAA6B,EAC5Dx+H,GAAwB,aAAa,OAAO,CAC9C,CAEO,cAAcglD,EAAkB5rD,EAAmB,CACxD,MAAMiiB,EAAS,SAAS,KAAK,UAAU,SAASmjH,EAA6B,EACzE,IAAA2rE,EAaJ,GAZGnlJ,IAAW,OACTA,EACG3pC,IACW8uL,EAAA,IAEP9uL,IACK8uL,EAAA,IAGFA,EAAA,GAGZ,CAACA,EAAY,OAAO,QAAQ,UAE5B,CAAC9uL,GAAU,CAAC,KAAK,cAAc,QAChC,KAAK,eAAe,OAGlB,KAAK,wBACP,KAAK,oBAAoB,EACzB,KAAK,sBAAwB,IAGzB,MAAAuoF,EAAmBtxF,GAAa,UAAU+I,EAASy4H,GAAS,KAAOA,GAAS,QAAS16I,CAAO,EAClG,OAAI4rD,GAEO,cAAK,UAAU,IAAIw5E,EAA6B,EACrDx+H,GAAwB,eAAe,OAAO,GAC3C,wBAAmB,KAAK,cAAc,GAJnC,KAAK,KAAK,EAOf4jG,CA4CT,CACF,CAEA,MAAM3/C,GAAkB,IAAI+lJ,GAC5Bh2K,GAAe,gBAAkBiwB,GACjC,MAAAmmJ,GAAenmJ,GCpLf,SAAwBomJ,GAAep8N,EAAwC,CAC7E,OAAO2qF,GAAsB,CAC3B,GAAG3qF,EACH,QAAS,CAACgrC,EAAOC,EAAOz+B,IAAM,CAI5B,GAHSw+B,GAAA,GACAC,GAAA,GAEN,KAAK,IAAID,CAAK,EAAI,GACX,OAAAhrC,EAAA,QAAQgrC,EAAOC,EAAOz+B,CAAC,EACN6qB,KAElB,EAEX,EACD,CACH,CChBA,SAAwBglM,GAAgBt6N,EAAwB,CACxD,MAAAg6C,EAAevvC,GAAkB,CACrCqQ,GAAYrQ,CAAC,GAGf,IAAI8vN,EAAU,EACd,MAAM77L,EAAK,IAAM,CACX,EAAE67L,GACJv6N,EAAU,oBAAoB,YAAag6C,EAAa,CAAC,QAAS,GAAK,CACzE,EAGQ,OAAAh6C,EAAA,iBAAiB,YAAag6C,EAAa,CAAC,QAAS,GAAM,QAAS,GAAM,EACpFh6C,EAAU,iBAAiB,WAAY0+B,EAAI,CAAC,KAAM,GAAK,EAEhDA,CACT,CCZA,SAAwB87L,GAA4B,CAClD,YAAAjmE,EACA,SAAAj3H,EACA,MAAAjE,EACA,cAAA6kG,CACF,EAKG,CACE,GAAAq2B,IAAgB,4BAA8B,CAACr2B,EACzC,OAAA5gG,EAAS,MAAM,EAAGjE,CAAK,EAGhC,MAAMohM,EAAyB,GAC5B,IAACn9L,EAAS,OACJ,OAAAm9L,EAGT,IAAI1+D,EAAY,GAChB,MAAM2+D,EAKD,GACHC,EAAuC,GAEvCC,EAAmD,GAErD,OAAOrmE,EAAa,CAClB,IAAK,4BACHmmE,EAAe,kBAAuB,GACtC,MAEF,IAAK,gCACHA,EAAe,kBAAuB,GACtCA,EAAe,qBAA0B,GACzCC,EAAe,KAAK,OAAO,EAC3B,MAEF,IAAK,2BACHD,EAAe,qBAA0B,GACzCC,EAAe,KAAK,OAAO,EAC3B,MAEF,IAAK,8BACHD,EAAe,qBAA0B,GAE1BC,EAAA,KAAK,OAAW,QAAS,KAAK,EAC7C,MAEF,IAAK,2BACHD,EAAe,qBAA0B,GACzCC,EAAe,KAAK,OAAO,EAC3B,MAEF,IAAK,gCACHD,EAAe,qBAA0B,GAC1BC,EAAA,KAAK,QAAS,OAAO,EACpC,MAEF,IAAK,gCACHD,EAAe,qBAA0B,GACzCC,EAAe,KAAK,OAAO,EAC3B,MAEF,IAAK,2BACHD,EAAe,qBAA0B,GACzCC,EAAe,KAAK,OAAO,EAC3B,MAEF,IAAK,yBACHD,EAAe,IAAS,GACxB,MAEF,IAAK,gCACHA,EAAe,OAAY,GAC3B,MAEF,IAAK,4BACHE,EAAY,KAAK,QAAQ,EACzB,MAMF,QACc7+D,EAAA,GACZ,KAMJ,CAEA,GAAG,CAACA,GAAa,CAAC79B,GAAe,OACxB,OAAAu8F,EAGD,QAAA74N,EAAI,EAAGlE,EAAS4/B,EAAS,OAAQ17B,EAAIlE,EAAQ,EAAEkE,EAAG,CAClD,MAAA4F,EAAoD81B,EAAS17B,CAAC,EACpE,GAAG,CAAC4F,EAAS,SAIb,IAAI8J,EAAQ,CAACyqJ,EACV,GAAA6+D,GAAa,KAAMx/K,GAAU5zC,EAAmC,OAAO4zC,CAAI,CAAC,EACrE9pC,EAAA,WACA9J,EAAQ,IAAM,UAAW,CACjC,GAAGA,EAAQ,OAASkzN,EAAelzN,EAAQ,MAAM,CAAC,EAA8B,CACxE,MAAArH,EAAOqH,EAAQ,MAA4C,SAC9D,GAAArH,GAEEw6N,EAAe,QAAU,CAACA,EAAe,SAASx6N,EAAI,IAAI,EAI7D,SAGMmR,EAAA,EACA,SAAAopN,EAAe,KAAUlzN,EAAQ,QAAS,CAC5C,MAAAqzN,EAAe,CAAC,uBAAwB,kBAAkB,GAC5DrzN,EAAQ,cAAkC,KAAMiD,GAAMowN,EAAa,SAASpwN,EAAE,CAAC,CAAC,GAAKq0K,GAASt3K,EAAQ,OAAO,KACvG8J,EAAA,GAEZ,CAEA,GAAGA,GAAS4sH,EAAe,CACnB,MAAAziG,EAAUj0B,EAAQ,WAAW,QACnC8J,EAAQmqB,EAAUyiG,EAAc,MAAO9gF,GAC9B3hB,EAAQ,KAAMuvD,GAAkB7B,GAAe6B,EAAc,SAAU5tC,CAAQ,CAAC,CACxF,EAAI,EACP,CAEA,MAAAs9K,EAAe,QACflzN,EAAQ,QACP,CACC,gCACA,6BACA,gCACA,4BACyB,WAASA,EAAQ,OAAO,CAAC,IAE5C8J,EAAA,IAGV,GAAGA,GAASmpN,EAAU,KAAKjzN,CAAO,GAAK6xB,EACrC,KAEJ,CAEO,OAAAohM,CACT,iCCvJA,SAASK,GAAoB/sN,EAK1B,CACD,KAAM,CAACssB,EAAS22B,CAAO,EAAI+hI,GAAU,EAC/B,CAACvwJ,EAAM6oF,CAAO,EAAIr+G,GAAY,EAC9B,CAACtP,EAAQ6+C,CAAS,EAAIvvC,GAAa,CAAC,EACpC,CAAC+tN,EAAUC,CAAW,EAAIhuN,GAAY,EACtCqmB,EAAQ,IAAIhS,IAsBlBkkG,GApBgBgG,IAAM,CACpB,MAAM/oF,EAAIvhB,EAAI2pD,GAAG,KAACC,MAAI,QAAExwC,EAAQx8B,KAAKw8B,OAAO,EAAArN,SAAGsmL,EAAW,EAE1DloM,GAAa,IAAM,CACjB,MAAMtK,EAA2B0hC,IAG3B9kC,EAASoD,EAASpD,OACxB6+C,EAAU7+C,CAAM,EAChB2tH,EAAQvqH,CAAQ,EAChBiN,EAAMktN,iBAAiBv9N,CAAM,CAC/B,CAAC,EAEDqQ,EAAMktN,gBAAkB7vN,GAAa,IAAM,CACzC2C,EAAMktN,eAAe5gM,EAAQx8B,MAAMw/B,KAAK,CAC1C,CAAC,EAEDtvB,EAAMw9G,UAAO,EAGO,EAAE,IAAMlxF,EAAQnT,KAAK,EAE3C9b,GAAa,IAAM,CACjB,MAAM40B,EAAK+6L,IACX,GAAG,CAAC/6L,EACF,OAGF,MAAMgmH,EAASA,IAAM,CACnBg1E,EAAY71M,MAAS,GAGjB3B,EAASnZ,EAAW,IAAM,CAC9B,MAAMgY,EAAUgY,EAAQx8B,KAAKw8B,QAAQA,EAAQx8B,KAAK+Z,KAAK,EAAEooB,GACzD,OAAO3M,EAAM1R,IAAIU,CAAO,CAC1B,CAAC,EAED1W,GAAQ,IAAM,CACZ,MAAM9N,EAAOw8B,EAAQx8B,KACf+Z,EAAQ/Z,EAAKw8B,QAAQ4gF,UAAW5V,GAAUA,EAAMrlE,KAAOA,CAAE,EAC/DgxB,EAAQ/hD,IAAI,CAACpR,OAAM+Z,OAAK,CAAC,CAC3B,CAAC,EAED+4L,GAAoB,CAClB3qD,SACAxiI,SACAswK,YAAa,EACf,CAAC,CACH,CAAC,EAED,MAAMwf,EAAQr1H,GAAyB,CACrC,KAAM,CAACj+E,YAAW0oB,MAAKpY,QAAOiM,OAAM,EAAGuiF,GAAe,CACpD5gG,OAAQm8B,EAAQx8B,KAAKK,OACrB+/E,UAAWA,EACXkhB,WAAY,GACZC,WAAY,GACZJ,eAAgB,CAEd,WAAY/gB,EAAUj+C,GACtB,eAAgB3F,EAAQx8B,KAAKK,OAC7B,MAAS,8BACT,QAAYuM,GAAM,CAChBuwN,EAAY/8I,EAAUj+C,EAAE,CAC1B,CACD,EACDw/D,kBAAmB,kBACnB5gC,aAAc,EAChB,CAAC,EAED,IAAIx3C,EACJhc,UAAa,IAAM,CACjB,MAAM9J,EAAIib,IAEJ7J,EADIpC,KACWhP,EACrB,GAAIoR,EASJ,IALA2gB,EAAMpkB,IAAIgvE,EAAUj+C,GAAIttB,CAAO,EAC/B7F,GAAU,IAAM,CACdwmB,EAAM5K,OAAOw1D,EAAUj+C,EAAE,CAC3B,CAAC,EAEEtiC,EAAQ,IAAK,EAAG,CACjB,MAAMwyD,EAAgB+tB,EAAkC3tE,MAClDA,EAAS4/C,EAAgDr0C,OAAyBq0C,EAAmDz/C,SAQrI8L,EAPWX,GAAsB,CACrCC,MAAOvL,EACPwL,aAAc,CAACyG,KAAM,IAAK5a,IAAK,GAAIu3E,WAAY,CAAE,EACjDnjE,QAAS,GACTC,YAAa,GACbC,aAAc,EAChB,CAAC,EACsB2I,MACvBlS,EAAQyoE,cAAcjN,QAAQ3xD,CAAK,EAEnC1P,GAAU,IAAM,CACd0P,EAAMuN,OAAM,CACd,CAAC,CACH,CAEGpX,EAAQyoE,eAAiBptE,EAAMisH,QAAW/7C,EAAkCy1D,cAAgBvuH,QAC7FiC,MAASjoB,GAAK,OAAQ,eAAe,GACrCuT,EAAQyoE,cAAcpnC,OAAO3sB,CAAI,GACzBA,GACRA,EAAK0C,OAAM,EAEf,CAAC,EAEE/b,EAAM24B,WAAWw0L,aAClBntN,EAAM24B,UAAUy0L,sBAAsBzyM,EAAK,EAAI,EAG1C1oB,GAGT,kBAAAogB,EAAAC,KAAAS,SAAAV,EAKKoiB,CAAI,EAAAliB,GAAA6M,GAAA,OAAAC,EAFY1vB,EAAM,IAAO,EAAC2vB,EAAO3vB,EAAQ,IAAK,EAAC0vB,WAAAD,EAAAC,KAAAhN,EAAAgE,UAAAyT,OAAA1K,QAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAjN,EAAAgE,UAAAyT,OAAA1K,QAAAE,MAAA,EAAAF,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,MAAA,GAAA/E,CAAA,IAK1D,CAEe,SAASg7M,GAAmBrtN,EAA0F,CACnI,KAAM,CAAGqzC,EAAI,EAAIC,GAAWtzC,EAAO,CAAC,UAAW,iBAAkB,WAAW,CAAC,EAC7E,OAAAkT,EACG4xK,GAAehlK,GAAKuzB,EAAI,KAAAp0B,UAAA,QAAA/L,EACtB65M,GAAmBjtM,GAAK9f,EAAK,KAAEisH,QAAM,QAAE54E,EAAK44E,MAAM,QAGzD,CChCA,MAAMqhG,EAAkB,CActB,YACUC,EACArsF,EACA/7G,EACAqoM,EACR,CAJQ,cAAAD,EACA,iBAAArsF,EACA,oBAAA/7G,EACA,mBAAAqoM,EAgKV,KAAQ,YAAc,IAAM,CAC1Bj5L,GAAa,aAAa,CACxB,OAAQ,KAAK,OACb,UAAW,KAAK,IAChB,SAAU,KAAK,YAAY,SAAS,OAAS,QAAU,KAAK,YAAY,cAAc,OAAS,KAAK,YAAY,cAAc,SAC/H,GAGH,KAAQ,eAAiB,IAAM,CAC1B,KAAK,YAAY,UAAU,YACTkS,GAAA,KAAK,YAAY,UAAU,mBAAmB,EAEjExmB,GAAa,YAAYqvD,GAAc,CACrC,CAAC,KAAK,MAAM,EAAG,CAAC,KAAK,GAAG,EACzB,CACH,EAGF,KAAQ,cAAgB,IAAM,CAC5B,KAAK,YAAY,UAAU,gBAAgB,KAAK,MAAM,GAGxD,KAAQ,sBAAwB,IAAM,CAC/B,iBAAY,UAAU,iBAAgB,EAG7C,KAAQ,cAAgB,IAAM,CACzB,KAAK,UACN,KAAK,YAAY,UAAU,qBAAqB,CAAC,KAAK,UAAU,EAAE,CAAC,EAC3D,KAAK,YAAY,UAAU,YAChB7oC,GAAA,KAAK,YAAY,UAAU,kBAAkB,EAEnDxmB,GAAA,YACXohH,GACA,KAAK,OACL,CAAC,KAAK,GAAG,EACTl0D,GAAS,KAEb,EAGM,2BAAyBuyC,GAAiB,CAC3C,iBAAY,UAAU,WAAW,CAAC,KAAK,UAAU,EAAE,EAAGA,CAAG,GAGxD,6BAA2BA,GAAiB,CAC7C,iBAAY,UAAU,gBAAgB,CAAC,KAAK,UAAU,EAAE,EAAGA,CAAG,GA5MnE,KAAK,SAAWwhB,EAAY,SAgEF15G,GAAA,CACxB,QAAS+lM,EACT,SAhEkF7wN,GAAM,CACrF,KAAK,OACN,KAAK,KAAK,EACV,KAAK,KAAO,MAGV,IAAAvC,EACA,IACKA,EAAAub,EAAgBhZ,EAAE,OAAQ,mBAAmB,OAC3C,CAAC,CAEZ,MAAMw9F,EAAU,CAAC,CAACxkF,EAAgBhZ,EAAE,OAAQ,8BAA8B,EAE1E,GAAG,CAACvC,EAAM,OAGV,GADGuC,aAAa,YAAYA,EAAE,eAAe,EAC1C,KAAK,QAAQ,UAAU,SAAS,QAAQ,EAClC,SAENA,aAAa,aAAYA,EAAE,aAAe,KAEnC,SAAW,CACnB,KAAK,OAASvC,EACd,KAAK,OAASA,EAAK,QAAQ,OAAO,SAAS,EACtC,SAAM,CAACA,EAAK,QAAQ,IACzB,KAAK,WAAa+mI,EAAY,UAAU,cAAc,KAAK,OAAQ,KAAK,GAAG,EACtE,aAAUhnC,EAAU,OAAY,MAAM,KAAK,SAAS,mBAAmB,iBAAiB,KAAK,OAAQ,KAAK,GAAG,EAC7G,eAAYA,EAAU,MAAM,KAAK,SAAS,kBAAkB,aAAa,KAAK,OAAQ,KAAK,GAAG,EAAI,OAClG,gBAAaA,IAAYgnC,EAAY,UAAU,YAClD,KAAK,YAAY,UAAU,oBAAoB,UAAU,SAAS,MAAM,EACxE,CAAE,MAAM,KAAK,SAAS,mBAAmB,WAAW,KAAK,OAAO,GAC7D,sBAAmB,CAAChnC,GAAWgnC,EAAY,UAAU,YAAc,MAAMA,EAAY,UAAU,oBAAwB,UAGlH,MAAM,QAAQ,IAAI,KAAK,QAAQ,IAAI,MAAM5gH,GAAW,CACxD,IAAArmB,EAEJ,OAAG,KAAK,YAAY,UAAU,aAAe,CAACqmB,EAAO,cAC5CrmB,EAAA,GAEPA,EAAOqmB,EAAO,OAAS,CAAC,CAAE,MAAMA,EAAO,OAAY,KAGrDA,EAAO,QAAQ,UAAU,OAAO,OAAQ,CAACrmB,CAAI,EACtCA,CACR,EAAC,GAEI,KAAMkxB,GAAMA,CAAC,IAIdhxB,EAAA,UAAU,IAAI,WAAW,EAEjB4rB,GAAArpB,EAAG,KAAK,OAAO,EACNqnB,GAAA,YAAY,KAAK,QAAS,IAAM,CAC/C5pB,EAAA,UAAU,OAAO,WAAW,EAClC,MAGD,EAMF,eAAAgrB,CAAA,CACD,CACH,CAEQ,MAAO,CACb,KAAK,QAAU,CAAC,CACd,KAAM,UACN,KAAM,UACN,QAAS,KAAK,eACd,OAAQ,IAAM,CAAC,KAAK,YACnB,CACD,KAAM,UACN,KAAM,oCACN,QAAS,KAAK,eACd,OAAQ,IAAM,KAAK,YAAY,UAAU,aAAe,CAAC,KAAK,WAC9D,cAAe,IACd,CACD,KAAM,WACN,KAAM,+BACN,QAAS,IAAMwwI,GAAgB,gBAAgB,KAAK,QAAS,KAAK,UAAU,EAC5E,OAAQ,IAAM,CAAC,KAAK,YAAY,UAAU,aAAeA,GAAgB,YAAY,KAAK,QAAS,OAAW,KAAK,UAAU,GAC5H,CACD,KAAM,WACN,KAAM,qCACN,QAAS,IAAMA,GAAgB,gBAAgB,KAAK,iBAAkB,KAAK,UAAU,EACrF,OAAQ,IAAM,KAAK,YAAY,UAAU,aAAeA,GAAgB,YAAY,KAAK,iBAAkB,OAAW,KAAK,UAAU,EACrI,cAAe,IACd,CACD,KAAM,UACN,KAAM,uBACN,QAAS,KAAK,YACd,OAAQ,IAAM,CAAC,KAAK,UACpB,cAAe,IACd,CACD,KAAM,UACN,KAAM,UACN,QAAS,IAAM,KAAK,sBAAsB,EAAK,EAC/C,OAAQ,IAAM,KAAK,WAAa,KAAK,UAAU,OAAO,QAAU,KAAK,SAAS,kBAAkB,UAAU,KAAK,OAAQ,KAAK,UAAU,GAAI,KAAK,GAC9I,CACD,KAAM,YACN,KAAM,YACN,QAAS,IAAM,KAAK,sBAAsB,EAAI,EAC9C,OAAQ,IAAM,KAAK,WAAa,CAAC,KAAK,UAAU,OAAO,QAAU,KAAK,SAAS,kBAAkB,UAAU,KAAK,OAAQ,KAAK,UAAU,GAAI,KAAK,GAC/I,CACD,KAAM,MACN,KAAM,uBACN,QAAS,IAAM,KAAK,wBAAwB,EAAI,EAChD,OAAQ,IAAM,KAAK,eAAiB,KAAK,WAAa,KAAK,UAAU,cAAgB,QAAa,KAAK,SAAS,kBAAkB,UAAU,KAAK,OAAQ,KAAK,UAAU,GAAI,KAAK,GAChL,CACD,KAAM,QACN,KAAM,yBACN,QAAS,IAAM,KAAK,wBAAwB,EAAK,EACjD,OAAQ,IAAM,KAAK,eAAiB,KAAK,WAAa,KAAK,UAAU,cAAgB,QAAa,KAAK,SAAS,kBAAkB,UAAU,KAAK,OAAQ,KAAK,UAAU,GAAI,KAAK,GAChL,CACD,KAAM,SACN,KAAM,yBACN,QAAS,KAAK,cACd,OAAQ,IAAM,CAAC,KAAK,aAAe,CAAC,KAAK,WAAa,KAAK,UAAU,OAAO,KAC5E,cAAe,IACd,CACD,KAAM,SACN,KAAM,kCACN,QAAS,KAAK,sBACd,OAAQ,IAAM,KAAK,WACnB,cAAe,IACd,CACD,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,KAAK,cACd,OAAQ,IACH,KAAK,UACC,KAAK,SAAS,kBAAkB,UAAU,KAAK,OAAQ,KAAK,UAAU,GAAI,QAAQ,EAGpF,CAAC,KAAK,YAAY,UAAU,aAAe,KAAK,SAAS,mBAAmB,iBAAiB,KAAK,OAAO,CAClH,EACC,CACD,KAAM,SACN,UAAW,SACX,KAAM,mCACN,QAAS,KAAK,cACd,OAAQ,IAAM,KAAK,YAAY,UAAU,aAAe,KAAK,YAAY,UAAU,oBAAsB,CAAC,KAAK,YAAY,UAAU,mBAAmB,UAAU,SAAS,MAAM,EACjL,cAAe,GAChB,EAEI,aAAUzwI,GAAe,CAAC,QAAS,KAAK,QAAS,eAAgB,KAAK,eAAe,EAC1F,KAAK,QAAQ,UAAU,IAAI,qBAAsB,aAAa,EAC9D,SAAS,eAAe,YAAY,EAAE,OAAO,KAAK,OAAO,CAC3D,CAkDF,CAYA,MAAqBi+K,EAAe,CAqFlC,YAAYjzM,EAWiG,CA/F7G,KAAO,KAAiD,GAUxD,KAAQ,UAAY,GAEZ,mBAAgB,IAAIqnE,GAC5B,KAAO,WAAa13D,KAEpB,KAAO,eAAwF,GAC/F,KAAO,gBAAgE,GAKvE,KAAQ,UAA+D,GACvE,KAAQ,aAAyE,GACjF,KAAQ,OAA6D,GACrE,KAAQ,YAAc,GACtB,KAAQ,UAAY,GAEZ,SAAMkxB,GAAO,cAAc,EAGnC,KAAQ,gBAOH,GAIE,sBAAmE,IAe1E,KAAO,WAAc,GACrB,KAAO,aAAgB,GACvB,KAAO,cAAiB,GAExB,KAAO,WAAc,GAiBrB,KAAO,SAA8D,GAyUrE,KAAQ,kBAAoB,IAAM,CAC3B,eAAU,UAAU,IAAI,SAAS,GAGxC,KAAQ,gBAAkB,IAAM,CACzB,eAAU,UAAU,OAAO,SAAS,GA3TzC5pB,GAAW,KAAMjX,CAAO,EAExB,KAAK,SAAL,KAAK,OAAWg2E,IAEX,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,cAAc,EAEtC,oBAAiB,IAAI59C,GACrB,uBAAoB,IAAIglM,GAAkB,KAAK,UAAW,KAAM,KAAK,eAAgB,CAAC,KAAK,cAAc,EAC9G,KAAK,UAAY,IAAIrsF,GAAgB,KAAM,KAAK,SAAU,KAAK,cAAc,EAC1E,KAAK,iBACN,KAAK,UAAU,iBAAmB,IAGpC,MAAMwsF,EAAyB,KAAK,uBAAyB,SAAS,cAAc,KAAK,EACzFA,EAAuB,UAAU,IAAI,+BAAgC,6BAA8B,QAAQ,EAE3G,MAAMC,EAAgB,KAAK,cAAgB,IAAIxuJ,GAAYuuJ,CAAsB,EACnEC,EAAA,UAAU,UAAU,IAAI,6BAA6B,EAEnE,MAAMngI,EAAM,KAAK,IAAM,SAAS,cAAc,KAAK,EAC/CA,EAAA,UAAU,IAAI,oBAAqB,qBAAqB,EAC5D,KAAK,SAAWA,EAEFmgI,EAAA,UAAU,OAAOngI,CAAG,EAExB,UAAAo+H,KAAY,KAAK,UAAW,CAC9B,MAAAzzJ,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,0BAA0B,EAC1C,MAAAjnE,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,+BAA+B,EAC5C,MAAA4C,EAAI,SAAS,cAAc,GAAG,EAEpC5C,EAAK,OAAO06N,EAAS,YAAcj3N,EAAKi3N,EAAS,IAAI,CAAC,EACtD16N,EAAK,OAAO4C,CAAC,EAEbqkE,EAAQ,OAAOjnE,CAAI,EAEnB2zB,GAAOszC,CAAO,EAET,cAAS,OAAOA,CAAO,EAE5B,KAAK,aAAa,IAAIyzJ,EAAS,KAAMA,CAAQ,EAE7CA,EAAS,QAAUzzJ,CACrB,CAEK,mBAAgB,SAAS,cAAc,KAAK,EACjD,KAAK,cAAc,UAAU,IAAI,8BAA+B,gBAAgB,EAE5E,IAAAy1J,EACD7rM,KACD,KAAK,aAAewqM,GAAe,CACjC,QAAS,KAAK,cACd,QAAS,CAACpxL,EAAOC,EAAOz+B,IAAM,CACnBw+B,GAAA,GAEH,MAAAmgI,EAAS,KAAK,UAAU,OAAO,EAC/Bp8I,EAAW,MAAM,KAAK,KAAK,SAAS,QAAQ,EAC9C,IAAAxrB,EACJ,GAAGynC,EAAQ,GACT,QAAQrnC,EAAIwnK,EAAS,EAAGxnK,EAAIorB,EAAS,OAAQ,EAAEprB,EAC7C,GAAG,CAACorB,EAASprB,CAAC,EAAE,UAAU,SAAS,MAAM,EAAG,CACpCJ,EAAAI,EACN,KACF,MAGF,SAAQA,EAAIwnK,EAAS,EAAGxnK,GAAK,EAAG,EAAEA,EAChC,GAAG,CAACorB,EAASprB,CAAC,EAAE,UAAU,SAAS,MAAM,EAAG,CACpCJ,EAAAI,EACN,KACF,CAIDJ,IAAQ,SACMk6N,EAAApB,GAAgB,KAAK,aAAa,EACjD,KAAK,UAAU94N,CAAG,EAEtB,EACA,kBAAoBiJ,GACX,CAACgZ,EAAgBhZ,EAAE,OAAQ,cAAc,CAClD,CACD,GAGO,UAAAivN,KAAY,KAAK,UAAW,CAC9B,MAAA15N,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAI,6BAA8B,0BAA4B05N,EAAS,KAAM,UAAU,EAErG,MAAAtzN,EAAU,SAAS,cAAc,KAAK,EAC5CA,EAAQ,UAAU,IAAI,iCAAkC,wBAA0BszN,EAAS,IAAI,EAE/F15N,EAAU,OAAOoG,CAAO,EAEnB,mBAAc,OAAOpG,CAAS,EAE7B,MAAC,YAAAu0J,CAAe,EAAAmlE,EACnBnlE,IACI,UAAKA,CAAW,EAAInuJ,GAG3BszN,EAAS,WAAatzN,CACxB,CAEA,KAAK,UAAU,OAAOo1N,EAAwB,KAAK,aAAa,EAIhE,KAAK,iBAAmB,IAAIl/L,GAAY,GAAO,WAAY,EAAI,EAS1D,gBAAW,iBAAmB,IAAM,CACpC,KAAK,SAAS,YAAc,KAAK,gBAAgB,KAAK,QAAQ,GAE1D,UAAK,GAAM,OAAW,QAAQ,CACrC,EAIG,eAAY47C,GAAe,KAAK,SAAU,KAAK,cAAe,CAACl4C,EAAImpI,EAAY//I,IAAY,CAC9F,GAAG,KAAK,YAAc4W,GAAM,CAAC,KAAK,WAAY,CAC5C,KAAK,cAAc,EACnB,MACF,CAEM,MAAA27L,EAAc,KAAK,UAAU37L,CAAE,EACrC,KAAK,cAAc27L,CAAW,EAE3B,KAAK,YACD,eAAU,UAAYA,EAAY,OAAS,WAGlD,MAAMC,EAAe,KAAK,SAO1B,GANA,KAAK,SAAWD,EAEb,KAAK,YAAc,IAAMvyM,GAC1B,KAAK,kBAAkB,EAGtB,KAAK,WACN,KAAK,WAAa,OACb,CACL,MAAMuwD,EAAY,KAAK,UAAU,WAAa,KAAK,cAAgB,GAC/D,IAAAl2B,EAAY,KAAK,WAAW,eAQ7B,GAPAA,EAAYk2B,IACb,KAAK,cAAc,EACPl2B,EAAAk2B,GAGdiiJ,EAAa,OAAS,CAAC,UAAAn4K,EAAsB,aAAc,KAAK,WAAW,YAExEk4K,EAAY,SAAW,OAAW,CAC7B,MAAAnqM,EAAO,KAAK,UAAU,sBAAsB,EAC5CqqM,EAAQ,KAAK,UAAU,cAAc,sBAAsB,EAC3D56L,EAAOzP,EAAK,EAAIqqM,EAAM,EAEzBp4K,EAAYxiB,IACb06L,EAAY,OAAS,CAAC,UAAW16L,EAAM,aAAc,GAEzD,CAEA,GAAG06L,EAAY,OAAQ,CACrB,MAAM16L,EAAO26L,EAAa,OAAO,UAAYD,EAAY,OAAO,UAI7D16L,IAKD06L,EAAY,WAAW,MAAM,UAAY,cAAc16L,CAAI,MAG/D,CACF,CASG,KAAK,YAAc,IAAM,CAAC06L,EAAY,WAAW,mBAElD,KAAK,KAAK,EAAI,EAGhB,KAAK,UAAY37L,CAAA,EAChB,IAAM,CACP,KAAK,WAAW,WAGb,KAAK,SAAS,SAAW,SACrB,cAAS,WAAW,MAAM,UAAY,GAC3C,KAAK,WAAW,eAAiB,KAAK,SAAS,OAAO,WAGrD07L,IACYA,IACEA,EAAA,QAGjB,KAAK,gBAAgB,CACpB,SAAWD,EAAe,KAAK,cAAc,EAE/B1gN,EAAA,KAAK,cAAgBtQ,GAAM,CACvC,KAAK,UAAU,cAChB4hH,GAA4B5hH,CAAC,EAC7B,KAAK,UAAU,gBAAgBgZ,EAAgBhZ,EAAE,OAAQ,mBAAmB,CAAC,EAC/E,EACC,CAAC,QAAS,GAAM,QAAS,GAAO,eAAgB,KAAK,eAAe,EAEvE,MAAMqxN,EAAe,MAAM3hN,EAAmB4hN,EAAyBxnE,EAAoC9pJ,IAAkB,CAC3H,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAA0B0P,CAAS,EACpE,GAAG,CAACqJ,EAAQ,OAEN,MAAA3X,EAAM,CAAC2X,EAAO,QAAQ,IAC5B,GAAG,CAAC3X,EAAK,CACF,SAAI,KAAK,mCAAoC2X,CAAM,EACxD,MACF,CAEM,MAAA0yE,EAA4B1yE,EAAO,cAAc,0BAA0B,EACjF,GAAG0yE,EAAc,CACKG,GAAA,CAClB,MAAO5rF,EACP,aAAAyrF,CAAA,CACD,EACD,MACF,CAEA,MAAMh4F,EAASslB,EAAO,QAAQ,OAAO,SAAS,EAExC0Y,EAAW,MAAM,KAAK,KAAK,KAAKq4H,CAAW,EAAE,iBAAiB,IAAMwnE,CAAe,CAAC,EAAoB,IAAK/rN,GAAO,CAClH,MAAAonJ,EAAc3zI,EAAgBzT,EAAImK,CAAS,EAC1C,OACL,QAASnK,EACT,IAAK,CAAConJ,EAAY,QAAQ,IAC1B,OAAQA,EAAY,QAAQ,OAAO,SAAS,EAC9C,CACD,EAGK51J,EAAM06B,EAAQ,UAAWh0B,GAASA,EAAK,MAAQ2D,GAAO3D,EAAK,SAAWhK,CAAM,EAE5Ew7N,EAAW,KAAK,UAAU,KAAMA,GAAaA,EAAS,cAAgBnlE,CAAW,EACjF/sJ,EAAU,MAAM,KAAK,SAAS,mBAAmB,iBAAiBtJ,EAAQ2N,CAAG,EACnF,IAAIiwH,GAAe,EAClB,iBAAiB,KAAK,kBAAkBy4B,EAAa,KAAK,UAAUmlE,EAAS,IAAI,CAAC,CAAC,EACnF,UAAU,CACT,QAAAlyN,EACA,OAAQ00B,EAAQ16B,CAAG,EAAE,QACrB,UAAW,EACX,QAAS,GACT,YAAa06B,EAAQ,MAAM,EAAG16B,CAAG,EACjC,YAAa06B,EAAQ,MAAM16B,EAAM,CAAC,EACnC,GAGH,KAAK,KAAK,+BAAiCuZ,EACzC,KAAK,KAAK,8BACV+gN,EAAa,KAAK,KAAM,YAAa,YAAa,+BAA+B,EACjF,CAAC,eAAgB,KAAK,cAAc,GAEtC,KAAK,KAAK,6BAA+B/gN,EACvC,KAAK,KAAK,4BACV+gN,EAAa,KAAK,KAAM,sBAAuB,kBAAmB,6BAA6B,EAC/F,CAAC,eAAgB,KAAK,cAAc,GAejC,cAAW,KAAK,UAAU,CAAC,EAEhCzjG,GAAuB,IAAM,CAC3B,KAAK,cAAc,MAAK,EACvB,IAAM,CACP,KAAK,cAAc,kBAAiB,EACnC,KAAK,cAAc,CACxB,CAEQ,eAAgB,CACtB,KAAK,WAAW,kBAAkB,CAChC,QAAS,KAAK,UACd,SAAU,QACV,cAAe,KAAK,oBACpB,mBAAoB,KAAK,aAAe,CAAC,CAAC,gBAAAj/C,CAAA,IAAqB,KAAK,IAAI,EAAGA,EAAkB,KAAK,YAAY,EAAI,OACnH,CACH,CAUO,WAAW72D,EAA4B8a,EAAe,CACtD,cAAS9a,CAAI,EAAI8a,EACjB,sBAAiB9a,EAAM8a,CAAK,CACnC,CAEO,qBAAqBC,EAAuB/a,EAAoC,CAC9E,OAAAi4M,GAA4B,CAAC,YAAaj4M,EAAM,SAAA+a,EAAoB,MAAOA,EAAS,OAAO,CACpG,CAEA,MAAc,mBAAmB,CAAC,QAAA91B,EAAS,YAAAg2B,EAAa,SAAAk8L,GAAqC,CACrF,MAAAnqE,EAAUmqE,EAAS,OAAS,QAElC,IAAIx7N,EAASsJ,EAAQ,OAClB+nJ,IACDrxJ,EAASsJ,EAAQ,QAEnBtJ,EAAS,MAAM,KAAK,SAAS,gBAAgB,kBAAkBA,CAAM,GAAKA,EAEpE,MAAA2B,EAAa,KAAK,WAAW,IAAI,EAEjCO,EAA+B,GAC/By8B,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,UAAWs/B,GAAa,MAAQ,GAChC,WAAY,SACZ,aAAAp9B,EACA,YAAa,CACX,WAAAP,CACF,EACA,YAAa,GACb,UAAW,CAAC0vJ,EACZ,WAAYA,EACZ,SAAWrxJ,EAA4C,OAAnC02D,GAAeptD,EAAQ,QAAQ,CAAI,CACxD,EAEKw0N,EAAwBp/L,GAAkB,gBAAgB,CAC9D,OAAQ,CACN,EAAG,SACH,OAAA1+B,CACF,EACA,YAAasJ,EACb,cAAAq1B,EACA,cAAe,KAAK,cAAc,MAClC,cAAe0yH,CAAA,CAChB,EAED,OAAAnvJ,EAAa,KAAK47N,CAAqB,EAChC,QAAQ,IAAI57N,CAAY,EAAE,KAAK,IAAM,CAC1C,GAAG,CAAAo9B,EAIH,MAAO,CAAC,QAASX,EAAc,UAAW,QAAAr1B,CAAO,EAClD,CACH,CAEA,MAAc,wBAAwB,CAAC,QAAAA,EAAS,SAAA+C,EAAU,WAAA1K,GAAuC,CACzF,MAAAyQ,EAAQ0/C,GAAoBxoD,EAAS,EAAI,EAEzCkhB,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,WAAW,EAGzB,IAAAphB,EACJ,MAAMjI,EAAOge,GAAgB/M,EAAO,IAAK,GAAG,EA8BxC,GA7BDA,EAAM,IAAM,QACbhJ,GAAW,MAAMi3D,GAAU,CACzB,IAAKjuD,EACL,QAAA9I,EACA,UAAWkhB,EACX,SAAU,EACV,UAAW,EACX,cAAe,KAAK,cACpB,WAAA7oB,EACA,YAAa,GACb,iBAAkB,GAClB,aAAc,GACd,UAAWR,CACZ,IAAG,MAEJiI,EAAU,MAAMuW,GAAU,CACxB,MAAOvN,EACP,QAAA9I,EACA,UAAWkhB,EACX,SAAU,EACV,UAAW,EACX,cAAe,KAAK,cACpB,WAAA7oB,EACA,iBAAkB,GAClB,OAAQ,GACR,KAAAR,CAAA,CACD,EAGCmI,EAAQ,MAAyC,OAAO,QAAS,CAC7D,MAAA0uF,EAAe,MAAMM,GAAiB,CAC1C,eAAgB,OAChB,MAAAlmF,EACA,WAAAzQ,EACA,MAAO,IACP,OAAQ,IACR,SAAU,GACX,EAED6oB,EAAI,OAAOwtE,CAAY,CACzB,CAEA,OACE5uF,EAAQ,OAAO,MACfA,EAAQ,OAAO,MACf,OAAO,OAAO,EAAE,QAASsd,GAAU,CAC7BA,EAAA,UAAU,IAAI,iBAAiB,EACtC,EAEQra,EAAA,KAAKjD,EAAQ,aAAa,KAAK,EAEjC,CAAC,QAASohB,EAAK,QAAAlhB,EACxB,CAEA,MAAc,sBAAsB,CAAC,QAAAA,EAAS,YAAA+sJ,GAAwC,CAC9E9jJ,QAAWu/C,GAAoBxoD,EAAS,EAAI,EAC5C0wF,EAAa,KAAK,YAAe,CAAC,QAAS,OAAO,EAA2B,SAASznF,EAAS,IAAI,EAEnGiY,EAAM,MAAMqvE,GAAa,CAC7B,QAAAvwF,EACA,SAAU,CAAC0wF,EACX,WAAY,IACZ,aAAc,GACd,WAAAA,EACA,cAAe,KAAK,kBAAkBq8D,EAAa,KAAK,UAAU,KAAK,EACvE,cAAe,KAAK,cACpB,iBAAkB,EAClB,QAAS,IAAM,IAChB,EAEG,OAAC,QAAS,QAAS,OAAO,EAA2B,SAAS9jJ,EAAS,IAAI,GACzEiY,EAAA,UAAU,IAAI,UAAU,EAGvB,CAAC,QAAAlhB,EAAS,QAASkhB,EAC5B,CAEA,MAAc,iBAAiB,CAAC,QAAAlhB,EAAS,SAAA+C,EAAU,WAAA1K,GAAuC,CACpF,IAAAmxF,EAAWxpF,EAAQ,OAA4C,QAEnE,GAAG,CAACwpF,EAAS,CACX,MAAM/rF,EAASuC,EAAQ,cAAgBA,EAAQ,cAAc,KAAMiD,GAAWA,EAAE,IAAM,oBAAsBA,EAAE,IAAM,sBAAsB,EAAI,KAC9I,IAAI9C,EAAas0N,EAAqB3tJ,EAEtC,GAAIrpE,EAQOqpE,EAAA9mE,EAAQ,QAAQ,MAAMvC,EAAO,OAAQA,EAAO,OAASA,EAAO,MAAM,MARjE,CACJ,MAAA8D,EAAQ+1K,GAASt3K,EAAQ,OAAO,EACtC,GAAG,CAACuB,EACF,OAGFpB,EAAMoB,EAAM,CAAC,EAKZ9D,GAAQ,IAAM,uBACf0C,EAAM1C,EAAO,IAGb0C,EAAMA,GAAO2mE,EAGD2tJ,EAAAt0N,EAER,MAAAu0N,EAAO10N,EAAQ,UAAYG,EAC7BA,EAAI,MAAM,wBAAwB,IACpCs0N,EAAc,WAAat0N,EAC3BA,EAAMA,EAAI,SAAS,GAAG,EAAIA,EAAM,WAAaA,GAGjCs0N,EAAA,IAAI,IAAIA,CAAW,EAAE,SAEzBjrI,EAAA,CACR,EAAG,UACH,OAAQ,CAAC,EACT,IAAArpF,EACA,YAAAs0N,EACA,GAAI,GACJ,KAAM,GAGJC,IACFlrI,EAAQ,YAAcxpF,EAAQ,QAElC,CAEG,GAAAwpF,EAAQ,IAAM,eACf,OAGI,MAAAmrI,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EAI/BnrI,EAAQ,MACGnzE,GAAU,CACpB,UAAWs+M,EACX,QAAS,KACT,MAAOnrI,EAAQ,MACf,SAAU,EACV,UAAW,EACX,iBAAkB,GAClB,cAAe,KAAK,cACpB,WAAAnxF,EACA,KAAMwd,GAAgB2zE,EAAQ,MAAsB,GAAI,GAAI,EAAK,EACjE,aAAczmF,EACd,OAAQ,GACT,GAEU4xN,EAAA,UAAU,IAAI,OAAO,EACnBvpN,GAAAupN,EAAYp2N,GAAiBirF,EAAQ,OAASA,EAAQ,aAAeA,EAAQ,aAAeA,EAAQ,IAAK,EAAI,CAAC,GAGvH,MAAAxyF,EAAQ4yF,GAAiBJ,CAAO,EAEhC06F,EAAmB36F,GAAuBC,CAAO,EAEjDpqF,EADYuB,GAAuBf,GAAa4pF,EAAQ,KAAO,EAAE,CAAC,EACpD,kBACdorI,EAAYx1N,aAAa,kBAC/B,GAAGw1N,EACG,IACAx1N,EAAA,UAAY,mBAAmBA,EAAE,IAAI,OAC5B,CAEb,CAGC8kL,EAAiB,YAClBA,EAAiB,OAAO;AAAA,CAAI,EAG9BA,EAAiB,OAAO9kL,CAAC,EAEtB,KAAK,YACN8kL,EAAiB,OAAO;AAAA,EAAM,MAAM32H,GAAiBvtD,CAAO,CAAC,EAG3DhJ,EAAM,aAEFA,EAAA,OAAOsG,GAAcksF,EAAQ,YAAY,MAAM,IAAK,CAAC,EAAE,CAAC,CAAC,CAAC,EAG5D,MAAAx4D,EAAM,IAAI5B,GAAI,CAClB,MAAAp4B,EACA,WAAY02D,GAAa1tD,CAAO,EAChC,SAAUkkL,EACV,YAAa,GACb,UAAW,GACX,SAAU,GACV,OAAQ0wC,CAAA,CACT,EAED,GAAGA,EAAW,CACX5jM,EAAI,UAAgC,KAAO5xB,EAAE,KACxC,MAAA2rB,EAAU3rB,EAAE,aAAa,SAAS,EACxC2rB,GAAWiG,EAAI,UAAU,aAAa,UAAWjG,CAAO,EACrD3rB,EAAE,SAAW,UACdmlC,GAAiBvT,EAAI,SAA8B,CAEvD,CAIA,GAFIA,EAAA,kBAAkB2jM,EAAY,KAAK,EAEpC3jM,EAAI,UAAU,UAAU,OAAO,OAChC,MAAO,CAAC,QAAAhxB,EAAS,QAASgxB,EAAI,SAAS,CAE3C,CAEA,MAAa,oBAAoB8E,EAAwDo8L,EAA+B3lL,EAAS,GAAM,CACrI,MAAMsoL,EAAwD,GACxDC,EAA8B5C,EAAS,WACvCnvN,EAA2B,GAC3B1K,EAAa,KAAK,WAAW,IAAI,EACjC0vJ,EAAUmqE,EAAS,OAAS,QAClC,IAAInlE,EAAcmlE,EAAS,YAE3B,MAAM3zL,GAAyB,EAE3B,IAAAvI,EACD+2H,IAAgB,iCAAqC,KAAK,cAAc,MAAM,QACjEA,EAAA,2BACd/2H,EAAc,KAAK,iBACJ8+L,EAAA,OAAO9+L,EAAY,SAAS,GACnC+2H,IAAgB,4BAA8B,CAAChF,IACvD/xH,EAAc,KAAK,aAAa,UAGlC,MAAMv/B,EAAoC,CACxC,cAAAo+N,EACA,YAAA9nE,EACA,QAAS,OACT,WAAA10J,EACA,SAAA0K,EACA,YAAAizB,EACA,SAAAk8L,CAAA,EAGE,IAAA6C,EAGJ,OAAOhoE,EAAa,CAClB,IAAK,2BAA4B,CAC/BgoE,EAAkB,KAAK,mBACvB,KACF,CAEA,IAAK,gCAAiC,CACpCA,EAAkB,KAAK,wBACvB,KACF,CAEA,IAAK,2BACL,IAAK,gCACL,IAAK,2BACL,IAAK,8BAA+B,CAClCA,EAAkB,KAAK,sBACvB,KACF,CAEA,IAAK,yBAA0B,CAC7BA,EAAkB,KAAK,iBACvB,KACF,CAKF,CAEA,GAAGA,EAAiB,CACAA,IAAgB,KAAK,IAAI,EAG3C,MAAM9gM,EAA8B6B,EAAS,IAAI,MAAM91B,GAAY,CAC7D,IACF,OAAAvJ,EAAQ,QAAUuJ,EACX,MAAM+0N,EAAgBt+N,CAAO,QAC9BoR,EAAK,CACX,KAAK,IAAI,MAAM,yBAA0BklJ,EAAat2J,EAASuJ,EAAS6H,CAAG,CAC7E,EACD,EAEKmtN,GAAW,MAAM,QAAQ,IAAI/gM,CAAO,GAAG,OAAO,OAAO,EAC7C4gM,EAAA,KAAK,GAAGG,CAAO,CAC/B,CAUA,GARGh/L,GAAeA,EAAY,KAAK,mBACjCA,EAAY,UAAU,EAGrB,KAAK,WACGjzB,EAAA,KAAK,KAAK,SAAS,EAG3BA,EAAS,SACJ,cAAQ,IAAIA,CAAQ,EACvB,CAAC1K,KAEF,OAIJ,MAAMnC,EAAS2+N,EAAc,OAC7B,GAAG3+N,EAAQ,CACH,MAAAy2C,EAASJ,EAAS,SAAW,UAC7B0oL,EAAe,KAAK,cAAgB,CAACltE,EACrChxJ,EAAWgxJ,EAAU,KAAK,cAAc,OAAS,OAmBvD,GAlBc8sE,EAAA,QAAS9gN,GAAY,CAC3B,MAAC,QAAA7I,EAAS,QAAAlL,CAAW,EAAA+T,EAC3B,GAAG,CAAC/T,EACF,SAGF,MAAMk1N,EAAiB,KAAK,6BAA6BD,EAAej1N,EAAQ,KAAO,EAAG+sJ,CAAW,EAC7F7hJ,EAAA,UAAU,IAAI,mBAAmB,EACjCA,EAAA,QAAQ,IAAM,GAAKlL,EAAQ,IAC3BkL,EAAA,QAAQ,OAAS,GAAKlL,EAAQ,OACzBjJ,IAAAmU,EAAQ,QAAQ,SAAW,GAAKnU,GAC9Bm+N,EAAA,MAAMvoL,CAAM,EAAEzhC,CAAO,EAEjC,KAAK,WAAW,aACZ,eAAU,sBAAsBA,EAAS,EAAI,CACpD,CACD,EAEE68I,EAAS,CACN,IAAAnvG,EAAWk8K,EAAe,cAA2B,WAAW,EACpE,GAAG,CAACl8K,EAAU,CACZA,EAAWxjB,GAAkB,eAAe,CAAC,IAAK,EAAK,GACvD,MAAM8/L,EAAiB,KAAK,6BAA6B,EAAGnoE,CAAW,EAAE,UACzEmoE,EAAe,YAAYt8K,CAAQ,EACnCA,EAAS,OAAOs8K,CAAc,EAE9B9/L,GAAkB,qBAAqB,CACrC,KAAMwjB,EACN,QAAS,IAAM,CACV,QAAK,UAAU,YACT,QAEX,EACA,YAAa,OACb,WAAY,GACZ,UAAW,GACZ,CACH,CACF,CACF,CAGA,KAAK,gBAAgBm0G,IAAgB,2BAA6B,EAAI72J,EAAQ4+N,CAAc,CAE9F,CAEQ,gBAAgB5+N,EAAgBi/N,EAAyB,CAC/D,GAAG,CAACA,EACF,OAGF,MAAM1gG,EAAS0gG,EAAW,cAO1B,GANM,WAAK1gG,EAAO,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAS1xF,GAAU,CACtDA,EAAM,OAAO,EACd,EAIE,CAAC7sC,GAAU,CAACi/N,EAAW,kBAAmB,CACrC,MAAAj0M,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAY,kCAChBA,EAAI,UAAU,IAAI,kBAAmB,cAAe,gBAAiB,WAAW,EAEhFuzG,EAAO,OAAOvzG,CAAG,CACnB,CACF,CAEQ,WAAY,CACZ,MAAAk0M,MAAmC,IACnC/8N,EAAa,KAAK,WAAW,IAAI,EAE7B,eAAK,KAAK,aAAc,CAC1B,MAAAyzB,EAAQ,KAAK,aAAa,CAAoB,EACpD,KAAK,KAAK,yBAAyB,OAAOA,EAAM,SAAS,EACzDA,EAAM,MAAM,CACd,CAEM,MAAAte,EAAQ,KAAK,cAAc,MACjC,GAAGA,EAAO,CACR,MAAM6nN,EAAa,CAACphM,EAAmBnI,EAAoBwpM,EAAmB,KAAU,CAC9ErhM,EAAA,IAAKv9B,GAAW,CACnB,GAAA0+N,EAAgB,IAAI1+N,CAAM,EAC3B,OAGF0+N,EAAgB,IAAI1+N,CAAM,EAE1B,KAAM,CAAC,IAAAykC,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAA1+B,EACA,UAAWo1B,EAAM,KACjB,WAAY,aACZ,WAAYA,EAAM,WAClB,YAAa,CACX,WAAAzzB,CACF,EACA,YAAa,GACd,EAEM,OAAC,IAAA8iC,EAAK,OAAAzkC,EAAM,CACpB,EAAE,OAAO,OAAO,EAAE,QAAQ,MAAM,CAAC,IAAAykC,EAAK,OAAAzkC,KAAY,CACjD,MAAML,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQK,CAAM,EAC5D,GAAAA,IAAWC,EAAU,KACtBwkC,EAAI,gBAAgB,OAAOlgC,EAAK,mBAAmB,CAAC,MAC/C,CACL,IAAI1E,EAAW,MAAM,KAAK,SAAS,gBAAgB,gBAAgBG,CAAM,EACzE,GAAIH,EAMFA,EAAW,IAAMA,MANL,CACZ,MAAMU,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQP,CAAM,EAC5DO,GAAM,QACPV,EAAW,IAAMysD,GAAkB/rD,EAAK,KAAK,EAAE,UACjD,CAUF,MAAM+lG,EAA4B,CAChCzmG,CAAA,GAG6BF,EAAsB,oBAAuBA,EAAa,eACvF2mG,EAAO,KAAK,MAAMj/D,GAAqBrnC,EAAO,SAAU,EAAC,EAGvDykC,EAAA,gBAAgB,OAAO,GAAGngC,GAAKgiG,EAAO,OAAO,OAAO,EAAG,EAAK,CAAC,CACnE,EACD,EAEDlxE,EAAM,OAAO,GAGTjU,EAAa09M,GAAW,CACzB,GAACl9N,IAMG,OAAAk9N,CAAA,EAGT,OAAO,QAAQ,IAAI,CACjB,KAAK,SAAS,gBAAgB,mBAAmB/nN,EAAO,GAAM,OAAW,EAAE,EAC1E,KAAKqK,CAAM,EACX,KAAMwnL,GAAa,CACfA,GACDg2B,EAAWh2B,EAAU,KAAK,aAAa,SAAU,EAAI,CACvD,CACD,EAED,KAAK,SAAS,gBAAgB,eAAe7xL,EAAO,EAAE,EACrD,KAAKqK,CAAM,EACX,KAAMwnL,GAAa,CAClB,GAAGA,IACDg2B,EAAWh2B,EAAS,WAAY,KAAK,aAAa,SAAU,EAAI,EAChEg2B,EAAWh2B,EAAS,QAA4E,KAAK,aAAa,cAAc,EAEhI,KAAK,aAAa,eAAe,UAAU,UAAU,IAAI,UAAU,EAEhE,KAAK,aAAa,eAAe,OAAO,mBAAqB,KAAK,aAAa,eAAe,OAAO,mBACtG,KAAK,aAAa,eAAe,OAAO,iBAAiB,OAAO,EAG/D,KAAK,aAAa,eAAe,KAAK,kBAAoB,GAAG,CACxD,MAAAhjH,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EAC1C,MAAAm5I,EAAc,IAAIr+N,GAAK,YAAY,CACvC,IAAK,qBACN,EACQklF,EAAA,OAAOm5I,EAAY,OAAO,EACnC,KAAK,aAAa,eAAe,OAAO,OAAOn5I,CAAQ,EACvD9oE,EAAiB8oE,EAAU,IAAM,CAC/B,MAAMgjB,EAAU,KAAK,aAAa,eAAe,UAAU,UAAU,OAAO,UAAU,EAC1Em2H,EAAA,IAAMn2H,EAAU,qBAAuB,qBACnDm2H,EAAY,OAAO,EACpB,CACH,CACF,CACD,EAED,KAAK,SAAS,eAAe,WAAW,CAAC,MAAAhoN,EAAO,YAAa,EAAG,MAAO,GAAI,SAAU,EAAE,EACtF,KAAKqK,CAAM,EACX,KAAMlK,GAAU,CACZA,GACU0nN,EAAA1nN,EAAM,QAAQ,IAAK9T,GAAMA,EAAE,MAAM,EAAG,KAAK,aAAa,SAAU,EAAI,CACjF,CACD,EACF,UACO,CAAC,KAAK,cAAc,QAAU,CAAC,KAAK,cAAc,QAAS,CAC7D,MAAA47N,EAAqB,CAAC5jJ,EAAY,KAC/B36E,GAAgB,WAAW,KAAMoL,GAAU,CAC5CjK,MAIC,kBAAa,OAAO,KAAK,gBAAgB,EAE9CiK,EAAM,aAAa,MAAM,EAAG,EAAE,EAAE,QAAQ,MAAM5L,GAAW,CACvD,KAAM,CAAC,IAAAykC,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAA1+B,EACA,UAAW,KAAK,aAAa,OAAO,KACpC,UAAW,GACX,WAAY,aACZ,WAAY,GACZ,YAAa,CACX,WAAA2B,CACF,EACA,YAAa,GACd,EAEG8iC,EAAA,gBAAgB,OAAO,MAAOzkC,EAAO,SACvC,QAAQ,QAAQ8iC,GAAoB,MAAM,KAAK,SAAS,gBAAgB,QAAQ9iC,EAAO,SAAS,CAAC,CAAC,CAAC,EACnGqnC,GAAqBrnC,EAAO,UAAU,EAAE,EAC3C,EAEG4L,EAAM,aAAa,OAEbuvE,GACH,kBAAa,OAAO,YAFpB,kBAAa,OAAO,QAG3B,CACD,EAGH,OAAO,QAAQ,IAAI,CACjB,KAAK,SAAS,gBAAgB,YAAY,gBAAgB,EAAE,KAAMg2B,GAAU,CAC1E,GAAG,CAACxvG,EAAW,EAAG,OAEVwvG,IAAM,MAAM,EAAG,EAAE,EACnB,MAAA7tG,EAAM6tG,EAAM,UAAWxxG,GAASA,EAAK,KAAOM,EAAU,IAAI,EAC7DqD,IAAQ,KACT6tG,EAAQA,EAAM,QACRA,EAAA,OAAO7tG,EAAK,CAAC,GAGf6tG,EAAA,QAASxxG,GAAS,CACtB,KAAM,CAAC,IAAA8kC,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAQ/+B,EAAK,GACb,UAAW,KAAK,aAAa,OAAO,KACpC,cAAe,GACf,WAAY,SACZ,WAAY,GACZ,QAAS,KAAK,aAAa,OAAO,QAClC,YAAa,CACX,WAAAgC,CACF,EACA,YAAa,GACd,EAED8iC,EAAI,WAAW,QAAO,CACvB,EAEI,kBAAa,OAAO,QAAO,CACjC,EAEDs6L,EAAmB,EACpB,CACH,KAAO,QAAO,QAAQ,SACxB,CAEA,MAAc,YAAY,CAAC,SAAAvD,GAAuC,CAC1D,MAAAh1N,EAASg1N,EAAS,OAAS,UAAY,KAAK,cAAc,OAAO,WAAa,OAC9Ej1N,EAASi1N,EAAS,OAAS,SAAW,KAAK,cAAc,OAAO,WAAa,OAC7E75N,EAAa,KAAK,WAAW,IAAI,EACnC,IAAAgK,EAEE,MAAAqzN,EAAqB,MAAMxnL,GAAkE,CACjG,GAAG,KAAK,YACN,MAAM,KAAK,UAER,CAAC71C,KACF,OAIJ,IAAIs9N,EAAc,KAAK,YACrBC,EAAwB,KAAK,sBAC7BC,EAA0B,KAAK,wBACjC,GAAG,CAACF,IACsBC,EAAA,KAAK,sBAAwB,IAAI,IAC/BC,EAAA,KAAK,wBAA0BzvN,KAC3CuvN,EAAA,KAAK,YAAc,IAAIl3L,GAAe,CAClD,cAAe,KAAK,cACpB,cAAe,GACf,SAAU,KAAK,SACf,WAAApmC,CAAA,CACD,EACgBkb,EAAAoiN,EAAY,KAAO1yN,GAAM,CACxC,GAAGgZ,EAAgBhZ,EAAE,OAAQ,aAAa,EACxC,OAGF,MAAM8pC,EAAKyH,GAAUvxC,EAAE,OAAQwxC,EAAuB,EACtD,GAAG,CAAC1H,EACF,OAGF,MAAMr2C,EAASq2C,EAAG,QAAQ,OAAO,SAAS,EACtC1qC,MAAwB,QAAQ,UACjC,KAAK,SAAWoqE,IAAmBr0E,GAAW,WAC/CiK,EAAW,KAAK,OAAkC,cAAc,EAAK,GAGvEA,EAAQ,KAAK,IAAM,CACJy4B,GAAA,aAAa,CAAC,OAAApkC,CAAA,CAAO,EACnC,EACF,EACQw7N,EAAA,WAAW,OAAOyD,EAAY,IAAI,EACtC,qBAAgB,EAAGzD,EAAS,UAAU,EAExCh1N,GAAQ,CACH7E,QAAaw9N,EAAwB,MACdj/K,GAAA,CAC3B,OAAA15C,EACA,SAAUy4N,EAAY,KACtB,aAAc,KAAK,sBACnB,OAAQ,KAAK,OACb,WAAAt9N,CAAA,CACD,EAEK,MAAAy9N,EAAuB3oL,GAA4C,CACvE,MAAMz2C,EAASuxC,GAAqBkF,EAAO,kBAAoBA,EAAO,eAAe,EAC/E4oL,EAAcJ,EAAY,IAAIj/N,CAAM,GACvCq/N,GAAgB5oL,EAAO,gBAAgE,QAAQ,QACpFwoL,EAAA,MAAM,OAAOj/N,CAAM,EAC/Bi/N,EAAY,OAAOj/N,CAAM,EACzBk/N,EAAsB,OAAOl/N,CAAM,EAC9B,gBAAWw7N,EAAS,KAAM,KAAK,SAASA,EAAS,IAAI,EAAI,CAAC,IAG7D,CAAC/kL,EAAO,kBAAoB4oL,IAAgB5oL,EAAO,kBAClCuoL,EAAA,CAACvoL,EAAO,eAAe,CAAC,EACtC,gBAAW+kL,EAAS,KAAM,KAAK,SAASA,EAAS,IAAI,EAAI,CAAC,EACjE,EAGQv7N,EAAA,iBAAiB,mBAAoBm/N,CAAmB,EAClEz9N,EAAW,QAAQ,IAAM,CACb1B,EAAA,oBAAoB,mBAAoBm/N,CAAmB,EACtE,CACH,CAGF,MAAMtqN,EAIA0iC,EAAa,IAAKhQ,GAAgB,CAChC,MAAAxnC,EAASuG,EAAUihC,EAA0B,GAAG,SAAS,EAAI,EAAI+J,GAAqB/J,CAAiC,EAC7H,GAAG,EAAAhhC,EAASxG,EAAO,UAAc,EAAAA,EAAO,UAIjC,OACL,OAAAA,EACA,KAAMunC,GAAmBC,CAAiC,EAC1D,YAAAA,CAAA,CACF,CACD,EAAE,OAAO,OAAO,EAEXzJ,EAAW,MAAMxI,GAAYzgB,EAAS,MAAM,CAAC,OAAA9U,KAAY,CAC7D,MAAML,EAAoB,MAAM,KAAK,SAAS,gBAAgB,QAAQK,CAAM,EAK5E,MAJG,GAAC2B,KAID,CAAChC,GAASA,EAAmB,OAAO,QAIhC,CACR,EAED,SAAU,CAAC,OAAAK,EAAQ,KAAA0nC,EAAM,YAAAF,CAAA,IAAgBzJ,EACpC2J,GACWu3L,EAAA,MAAM,IAAIj/N,EAAQ0nC,CAAI,EAGdw3L,EAAA,IAAIl/N,EAAQwnC,CAAiC,EACnEy3L,EAAY,IAAIj/N,CAAM,CACxB,EAGF,GAAGuG,EAAQ,CACT,MAAM+4N,EAAc,KAAK,YAAmB,IAAL,GACvC3zN,EAAU,KAAK,SAAS,gBAAgB,eAAepF,EAAQ+4N,EAAY,KAAK,UAAU9D,EAAS,IAAI,CAAC,EAAE,KAAM7tG,GAAkB,CAC7H,IAAChsH,IACF,OAGF,MAAMw9B,EAASwuF,EAAmD,OAASA,EAAc,MAAM,OAC3F,KAAK,SAAS6tG,EAAS,IAAI,GACxB,gBAAWA,EAAS,KAAMr8L,CAAK,EAItC,MAAMogM,EAAW5xG,EAAc,MAAMA,EAAc,MAAM,OAAS,CAAC,EACnE,YAAK,UAAU6tG,EAAS,IAAI,EAAI+D,GAAU,GAEvC5xG,EAAc,MAAM,OAAS2xG,IACzB,YAAO9D,EAAS,IAAI,EAAI,IAGxBwD,EAAmBrxG,EAAc,KAAK,EAC9C,UACO,MAAM,KAAK,SAAS,gBAAgB,UAAUnnH,CAAM,EAAG,CAC/D,MAAM84N,EAAc,KAAK,YAAmB,IAAL,GAC7B3zN,EAAA,KAAK,SAAS,kBAAkB,uBAAuB,CAC/D,GAAInF,EACJ,MAAO84N,EACP,OAAQ,KAAK,UAAU9D,EAAS,IAAI,EACrC,EAAE,KAAMhkL,GAAiB,CACrB,IAAC71C,IACF,OAGI,MAAA2iC,EAAOk3L,EAAS,WAAW,kBAC5B,sBAAUA,EAAS,IAAI,GAAKl3L,EAAOA,EAAK,kBAAoB,GAAKkT,EAAa,aAAa,OAE7FA,EAAa,aAAa,OAAS8nL,IAC/B,YAAO9D,EAAS,IAAI,EAAI,IAG/B,KAAK,WAAWA,EAAS,KAAMhkL,EAAa,KAAK,EAE1CwnL,EAAmBxnL,EAAa,YAAY,EACpD,OAES7rC,EAAA,KAAK,SAAS,kBAAkB,YAAYnF,CAAM,EAAE,KAAM0gC,GAAa,CAC5E,IAACvlC,IACF,OAIG,YAAO65N,EAAS,IAAI,EAAI,GAC7B,MAAMhkL,EAAgBtQ,EAA+B,aAClD,GAAAsQ,EAAa,IAAM,4BAItB,YAAK,WAAWgkL,EAAS,KAAMhkL,EAAa,aAAa,MAAM,EAExDwnL,EAAmBxnL,EAAa,YAAY,EACpD,EAGI,OAAA7rC,CACT,CAEA,MAAc,YAAY,CAAC,SAAA6vN,GAAuC,CAChE,GAAG,KAAK,aACN,OAAO,KAAK,eAGR,MAAA75N,EAAa,KAAK,WAAW,IAAI,EACjCgK,EAAUe,KAChB,OAAAK,GAAY2B,GAAY,CACtB/M,EAAW,QAAQ,IAAM,CACvB,KAAK,aAAe,OACZ+M,IACR/C,EAAQ,OAAO,EAChB,EAED,MAAM6zN,EAActC,GAAmB,CACrC,OAAQ,KAAK,cAAc,OAC3B,OAAQ,CAAC,KAAK,eACd,QAAS,KAAK,eACd,QAAS,IAAM,CACbvxN,EAAQ,QAAQ,EAEhB,MAAM4f,EAAOi0M,IACbhE,EAAS,WAAW,OAAO,OAAOjwM,GAAS,WAAaA,EAAA,EAAQA,CAAG,EAC9D,qBAAgB,EAAGiwM,EAAS,UAAU,CAC7C,EACA,eAAiB3xN,GAAa,CAC5B,KAAK,aAAe,SAAW,CAE7B,MAAMqmG,EAAS,MADCrmG,IAEZlI,KAIDuuG,IACI,YAAOsrH,EAAS,IAAI,EAAI,GAC/B,CAEJ,EACA,eAAiBh8N,GAAW,CAC1B,KAAK,wBAAwBA,CAAM,EAC9B,gBAAWg8N,EAAS,KAAMh8N,CAAM,CACvC,EACA,UAAW,KAAK,UACjB,EAED,KAAK,aAAa,EACnB,EACMmM,CACT,CAEA,MAAc,oBAAoB,CAAC,SAAA6vN,GAAuC,CACxE,MAAMvxM,EAAmB,KAAK,WAAW,MAAM,OAAO,EAEhDw1M,EAAc,MAAM78K,EAAejhD,IAA2B,CAClE,MAAMugD,EAAWxjB,GAAkB,eAAe,CAAC,IAAK,GAAK,EAEvDryB,EAAWu2C,EAAM,IAAI,MAAMxb,GAAS,CACxC,MAAMllC,EAA+B,GAC/B,CAAC,IAAAuiC,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAQ0I,EAAK,GAAG,SAAS,EAAI,EAC7B,UAAW8a,EACX,WAAY,aACZ,WAAY,GACZ,YAAa,CACX,WAAAvgD,CACF,EACA,aAAAO,CAAA,CACD,EAEG,OAAAuiC,EAAA,gBAAgB,OAAO,MAAM4C,GAAqBD,EAAK,GAAI,KAAK,SAAUA,CAAI,CAAC,EAE5E,QAAQ,IAAIllC,CAAY,EAChC,EAEK,qBAAQ,IAAImK,CAAQ,EACnB61C,CAAA,EAGHw9K,EAAiBvkM,GAAkB,CACjC,MAAAwkM,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,0BAA0B,EACvC,MAAA7iK,EAAMtjC,GAAO,gCAAiC,CAAC,KAAM,iBAAkB,KAAM,gBAAgB,EAC/FsjC,EAAA,UAAU,IAAI,iCAAiC,EAC7C,MAAAzoC,EAAU,IAAMmiB,GAAa,OAC7BpZ,EAASiY,GAAehhB,CAAO,EACrCxX,EAAiBigD,EAAKzoC,CAAO,EACtB+I,EAAA,UAAU,IAAI,SAAS,EAC9B,MAAMxE,EAAWr0B,EAAK,yBAA0B,CAAC64B,EAAQjC,CAAK,CAAC,EACtD,OAAAvC,EAAA,UAAU,IAAI,mCAAmC,EACrD+mM,EAAA,OAAO7iK,EAAKlkC,CAAQ,EAClB+mM,CAAA,EAGT,IAAIC,EAAsBC,EACpB,MAAAC,EAAY,MAAM1wN,GAAuB,CAC7C,GAAGywN,IAAezwN,EAChB,OAGF6a,EAAiB,MAAM,EACjB,MAAAtoB,EAAasoB,EAAiB,MAE9B,CAAC0jG,EAAeC,EAAc/qH,CAAuB,EAAI,MAAM,QAAQ,IAAI,CAC/E,KAAK,SAAS,gBAAgB,0BAA0B,KAAK,cAAc,OAAO,UAAU,EAC5F,KAAK,SAAS,WAAW,SAAS,sBAAuB,EAAI,EAC7DrC,GAAgB,wBAAwB,EACzC,EAEK0hD,EAAW,MAAMu9K,EAAY9xG,EAAc,MAAOhsH,CAAU,EAC/D,IAACA,IACF,OAGO65N,EAAA,WAAW,gBAAgBt5K,CAAQ,EACvC,qBAAgB,EAAGs5K,EAAS,UAAU,EACtC,YAAOA,EAAS,IAAI,EAAI,GAE7B,MAAMr8L,EAASwuF,EAAmD,OAASA,EAAc,MAAM,OAC1F,gBAAW6tG,EAAS,KAAMr8L,CAAK,EAEjC,CAAC/vB,GAAa,CAACvM,IAChB+8N,MAAYF,EAAc9xG,CAAY,GAC7B4tG,EAAA,WAAW,OAAOoE,CAAO,EACpC,EAGQ,OAAA3/N,EAAA,iBAAiB,iBAAkB6/N,CAAS,EACtD,KAAK,WAAW,IAAM,UAAQ,IAAM,CACxB7/N,EAAA,oBAAoB,iBAAkB6/N,CAAS,EAC1D,EAEMA,EAAU7/N,EAAU,OAAO,CACpC,CAEA,MAAc,iBAAiB,CAAC,SAAAu7N,EAAU,WAAA75N,EAAY,KAAAk0B,GAAmC,CACvF,GAAG,KAAK,kBACC,YAAK,kBAAkBA,CAAI,EAG9B,MAAAyO,EAAO5F,GAAkB,iBAC/BA,GAAkB,qBAAqB,CACrC,KAAA4F,EACA,YAAa,GACb,UAAW,KAAK,sBACjB,EAEK,MAAAy7L,EAAK,IAAIC,GACfD,EAAG,WAAa,KAAK,WAClBA,EAAA,WAAa,IAAIE,GAAiB,CACnC,SAAU,KAAK,SACf,IAAK,KAAK,IACV,KAAA37L,EACA,SAAU,UACV,gBAAiBrkC,EAAU,KAC5B,EAED,MAAMigO,EAAW,UACA,MAAM,KAAK,SAAS,eAAe,WAAW,CAAC,SAAUjgO,EAAU,KAAK,GACzE,MASJ,OANQ8/N,EAAG,YAAc,SAAW,CAC9C,GAAG,CAACp+N,EAAW,EAAG,OACZ,MAAAw9B,EAAQ,MAAM+gM,IACf,gBAAW1E,EAAS,KAAMr8L,CAAK,MAK7Bq8L,EAAA,WAAW,OAAOl3L,CAAI,EAC1B,qBAAgB,EAAGk3L,EAAS,UAAU,EAE3C,KAAK,kBAAoBuE,EAAG,cAAc,KAAKA,CAAE,EACjDp+N,EAAW,QAAQ,IAAM,CACvBo+N,EAAG,QAAQ,EACX,KAAK,kBAAoB,OAC1B,EAEMA,EAAG,eACZ,CAEQ,SAAShgO,EAAqC,OAC9C,MACJ,SAAAy7N,EACA,SAAAh9F,EACA,UAAA/gG,EACA,WAAA97B,EACA,KAAAk0B,CACE,EAAA91B,EACE,CAAC,KAAAskB,EAAM,YAAAgyI,CAAe,EAAAmlE,EAExB,IAAA7vN,EAAU,KAAK,aAAa0Y,CAAI,EACpC,GAAG1Y,EACM,OAAAA,EAaT,GAVG0Y,IAAS,WAAaA,IAAS,SACtB1Y,EAAA,KAAK,YAAY5L,CAAO,EAC1BskB,IAAS,UACP1Y,EAAA,KAAK,YAAY5L,CAAO,EAC1BskB,IAAS,UACP1Y,EAAA,KAAK,oBAAoB5L,CAAO,EAClCskB,IAAS,iBACP1Y,EAAA,KAAK,iBAAiB5L,CAAO,GAGtC4L,EACD,OAAO,KAAK,aAAa0Y,CAAI,EAAI1Y,EAAQ,QAAQ,IAAM,CACjDhK,MAIC,kBAAa0iB,CAAI,EAAI,MAC3B,EAGH,MAAMgb,GAAUjoB,EAAA,KAAK,gBAALi/I,KAAAj/I,EAAAi/I,GAAqC,IAErD,OAAGA,IAAgB,4BAA8B,CAACh3H,EAAQ,QAAUhb,IAAS,UACvE,KAAK,cACP,KAAK,UAAU,EACf,KAAK,YAAc,IAGlB,CAAC,KAAK,cAAc,MAAM,KAAK,GAAK,CAAC,KAAK,cAAc,QAAU,CAAC,KAAK,cAAc,UAClF,YAAOA,CAAI,EAAI,GACb,QAAQ,YAIT1Y,EAAA,KAAK,aAAa0Y,CAAI,EAAI,QAAQ,QAAQ,EAAE,KAAK,SAAW,OAEjE,GAAAgb,EAAQ,QAAU,KAAK,gBAAgBg3H,CAAW,EAAIh3H,EAAQ,QAAU,CAACm/F,EAAU,CACpF,MAAMp/F,EAAkB,GACxB,IAAI+gM,EAAO,KAAK,IAAI,EAAG,KAAK,gBAAgB9pE,CAAW,CAAC,EACpD+pE,EAAe,EAEhB,GACD,MAAM/uJ,EAAMhyC,EAAQ,MAAM8gM,EAAMA,EAAO1iM,CAAS,EAChD0iM,GAAQ9uJ,EAAI,OACZ+uJ,GAAgB/uJ,EAAI,OAEd,MAAAgvJ,EAAsBhvJ,EAAI,IAAK9qC,GAAM/lC,GAAgB,iBAAiB+lC,EAAE,OAAQA,EAAE,GAAG,CAAC,EAG5FnH,EAAS,KAAK,GAAG,KAAK,qBAAqBihM,EAAqBhqE,CAAW,CAAC,CACtE,OAAA+pE,EAAe3iM,GAAa0iM,EAAO9gM,EAAQ,QAS9C,4BAAgBg3H,CAAW,EAAI8pE,EAE7B,KAAK,oBAAoB/gM,EAAUo8L,CAAQ,EAAE,QAAQ,IAAM,CAChE,WAAW,IAAM,CACf,KAAK,WAAW,oBACf,CAAC,EACL,CAEH,CAEA,MAAM8E,EAAWjhM,EAAQA,EAAQ,OAAS,CAAC,EACrC1B,EAAW2iM,GAAU,KAAO,EAC5Bv0F,EAAeu0F,GAAU,QAAU75N,GAEnC1G,EAA2D,CAC/D,GAAG,KAAK,cACR,YAAa,CAAC,EAAGs2J,CAAW,EAC5B,SAAA14H,EACA,aAAAouG,EACA,MAAOtuG,EACP,UAAUrmB,EAAA,KAAK,WAALiN,KAAAjN,EAAAiN,GAAyB,GACnC,GAAIA,IAAS,QAAU,CAAC,YAAa,OAAW,OAAQpkB,EAAU,KAAM,SAAU,KAAK,cAAc,QAAU,CAAC,GAE5GgX,EAAQ,MAAM,KAAK,SAAS,mBAAmB,WAAWlX,CAAO,EAEvE,IAAIq/B,EAAWnoB,EAAM,SAWlB,GAVA,CAACmoB,GAAYnoB,EAAM,UACTmoB,EAAAnoB,EAAM,QAAQ,IAAKtJ,GAAQnN,GAAgB,iBAAiBT,EAAQ,OAAQ4N,CAAG,CAAC,GAG7F0xB,EAAQ,KAAK,GAAGD,EAAS,IAAKmH,IAAO,CAAC,IAAKA,EAAE,IAAK,OAAQA,EAAE,QAAQ,CAAC,EAEjE,KAAK,SAASliB,CAAI,GACf,gBAAWA,EAAMpN,EAAM,KAAK,EAGhC,EAACtV,OAOFsV,EAAM,QAAQ,OAASwmB,GACtB,KAAK,cAAc,WAAa,QAAa,CAACxmB,EAAM,UAErDA,EAAM,MAAM,OAIP,YAAOoN,CAAI,EAAI,IAGjB,eAAUA,CAAI,EAAIpN,EAAM,SAE1B,CAAAunH,GAIE,4BAAgB63B,CAAW,EAAIh3H,EAAQ,OAExC,KAAK,OAAOhb,CAAI,GAClB1Y,EAAQ,KAAK,IAAM,CACjB,WAAW,IAAM,CACf,GAAIhK,EAAW,GAEZ,KAAK,WAAa65N,EAAU,CAC7B,MAAM7vN,EAAU,KAAK,KAAK,GAAM,EAAI,EACjCA,GACDA,EAAQ,KAAK,IAAM,CACbhK,EAAW,GAEf,WAAW,IAAM,CACf,KAAK,WAAW,oBACf,CAAC,EACL,CAEL,GACC,CAAC,EACL,EAII,KAAK,oBAAoB,KAAK,qBAAqBy9B,EAAUi3H,CAAW,EAAGmlE,CAAQ,EAE3F,EAAE,MAAOrqN,GAAQ,CACX,SAAI,MAAM,cAAeA,CAAG,EAClC,EAAE,QAAQ,IAAM,CACV,kBAAakT,CAAI,EAAI,KAC3B,EAEM1Y,EACT,CAEQ,gBAAgB6vN,EAA+B,CACrD,MAAMnlE,EAAcmlE,EAAS,YAC7B,MAAO,CAAC,KAAK,OAAOA,EAAS,IAAI,GAAM,KAAK,eAAenlE,CAAW,GAAK,KAAK,gBAAgBA,CAAW,EAAI,KAAK,eAAeA,CAAW,EAAE,MAClJ,CAEA,MAAc,eAAgB,CACtB,MAAA10J,EAAa,KAAK,WAAW,IAAI,EACjC,CAAC,OAAA3B,EAAQ,SAAAK,GAAY,KAAK,cAC7B,IAAC,KAAK,cACP,OAGI,MAAAkgO,EAAY,KAAK,UAAU,OAAQ/E,GAAaA,EAAS,aAAeA,EAAS,cAAgB,0BAA0B,EAC3HgF,EAAUD,EAAU,IAAK/E,IAAc,CAAC,EAAGA,EAAS,WAAa,IAEjE,CACJjuH,EACAkzH,EACAC,EACA9E,EACA+E,EACAC,EACAC,CAAA,EACE,MAAM,QAAQ,IAAI,CACpB,KAAK,SAAS,mBAAmB,kBAAkB7gO,EAAQwgO,EAAS,OAAWngO,CAAQ,EACvF,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,eAAe,EACpB,KAAK,eAAe,EACrB,EAMD,GAJG,CAACsB,KAID,KAAK,YACN,MAAM,KAAK,UAER,CAACA,KACF,OAIA,IAAAm/N,EACA3hM,EAAQ,EACFohM,EAAA,QAAS/E,GAAa,CACxB,MAAAtwC,EAAU39E,EAAS,KAAMt0F,GAAMA,EAAE,OAAO,IAAMuiN,EAAS,WAAW,EAExEA,EAAS,QAAQ,UAAU,OAAO,OAAQ,CAACtwC,EAAQ,KAAK,EAC/CswC,EAAA,QAAQ,UAAU,OAAO,QAAQ,EAG1C,KAAK,WAAWA,EAAS,KAAMtwC,EAAQ,KAAK,EAEzCA,EAAQ,QACN41C,IAAkB,SACHA,EAAAtF,GAGhB,EAAAr8L,EACJ,CACD,EAED,MAAM4hM,EAAkB,KAAK,aAAa,IAAI,cAAc,EACtDC,EAAW,KAAK,aAAa,IAAI,OAAO,EACxCC,EAAa,KAAK,aAAa,IAAI,SAAS,EAC5CC,EAAa,KAAK,aAAa,IAAI,SAAS,EAC5CC,EAAY,KAAK,aAAa,IAAI,QAAQ,EAC1CC,EAAa,KAAK,aAAa,IAAI,SAAS,EAuBlD,GArB4C,CAC1C,CAACL,EAAiBN,CAAmB,EACrC,CAACO,EAAUN,CAAY,EACvB,CAACQ,EAAYN,CAAc,EAC3B,CAACK,EAAYrF,CAAc,EAC3B,CAACuF,EAAWR,CAAa,EACzB,CAACS,EAAYP,CAAc,GAG3B,QAAQ,CAAC,CAACvnM,EAAKriB,CAAK,IAAM,CACtBqiB,IAIJA,EAAI,QAAQ,UAAU,OAAO,OAAQ,CAACriB,CAAK,EAExCA,GACC,EAAAkoB,EACJ,CACD,EAEEyhM,EAAgB,CACDE,EAAAI,EAEhB,MAAMG,EAAW98N,EAAKvE,EAAO,OAAO,EAAI,UAAY,gBAAgB,EACpEkhO,EAAW,YAAY,YAAYA,EAAW,YAAcG,CAAQ,CACtE,CAEGzF,IACekF,EAAAG,GAGfR,IACeK,EAAAC,GAGlB,KAAK,UAAU,UAAU,OAAO,OAAQ,CAACD,CAAa,EACtD,KAAK,UAAU,cAAc,UAAU,OAAO,eAAgB,CAACA,CAAa,EACzEA,IACD,KAAK,WAAa,GAClB,KAAK,UAAU,KAAK,UAAU,QAAQA,CAAa,EAAG,EAAK,EAG3D,KAAK,uBAAuB,UAAU,OAAO,YAAa3hM,GAAS,CAAC,EAExE,CAEA,MAAa,KAAK6+C,EAAS,GAAOwgD,EAAW,GAAO3oG,EAAyB,SAAU,CAC/E,MAAA71B,EAAS,KAAK,cAAc,OAClC,KAAK,IAAI,OAAQg+E,EAAQh+E,EAAQ,KAAK,YAAY,EAC5C,MAAA2B,EAAa,KAAK,WAAW,IAAI,EAEvC,GAAG,KAAK,UAAW,CAEd,GADI,WAAK,uBAAL,KAAK,qBAAyB,KAAK,cAAc,IACrD,CAACA,IACF,OAGF,KAAK,qBAAuB,OAC5B,KAAK,UAAY,EACnB,CAEA,IAAI2/N,EAAStjJ,EAAS,CAAC,KAAK,QAAQ,EAAI,KAAK,UAAU,OAAQ56E,GAAMA,IAAM,KAAK,QAAQ,EAWrF,GAVMk+N,IAAO,OAAQ9F,GACf,KAAK,gBAAgBA,CAAQ,CACrC,EAEEx7N,EAAO,SACRk3C,GAAcoqL,EAAS9F,GAAaA,EAAS,OAAS,SAAS,EAE/DtmJ,GAAiBosJ,EAAS9F,GAAaA,EAAS,OAAS,QAAQ,EAGhE,CAAC8F,EAAO,OACT,OAGI,MAAA7jM,EAAY+gG,EAAW,GAAK,KAAK,OAAO9yF,GAAW,OAAS,IAAM,GAAK,EAAI,IAAI,EAE/Er/B,EAA2Bi1N,EAAO,IAAK9F,GACpC,KAAK,SAAS,CACnB,SAAAA,EACA,SAAAh9F,EACA,UAAA/gG,EACA,WAAA97B,EACA,KAAAk0B,CAAA,CACD,CACF,EAED,OAAO,QAAQ,IAAIxpB,CAAQ,EAAE,MAAO8E,GAAQ,CACrC,SAAI,MAAM,2BAA4BA,CAAG,EAC/C,CACH,CAEQ,6BAA6ByqD,EAAmBv3C,EAAuB,CAC7E,MAAMzR,EAAO,IAAI,KAAKgpD,EAAY,GAAI,EACjChpD,EAAA,SAAS,EAAG,EAAG,CAAC,EACrBA,EAAK,QAAQ,CAAC,EACR,MAAAspE,EAAgBtpE,EAAK,UACrB40D,EAAa,KAAK,gBAAgBnjD,CAAI,IAAM,KAAK,gBAAgBA,CAAI,EAAI,IAC5E,KAAE63D,KAAiB1U,GAAa,CAC3B,MAAA1lE,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAY,qBAEhB,MAAAs4B,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EAE5C,MAAMr6B,EAAsC,CAC1C,MAAO,QAGN6S,EAAK,YAAY,QAAU,KAAK,EAAE,gBACnC7S,EAAQ,KAAO,WAGX,MAAAooG,EAAc,IAAI1nG,GAAK,gBAAgB,CAC3C,KAAAmS,EACA,QAAA7S,CACD,GAAE,QACHq6B,EAAK,OAAO+tE,CAAW,EAEvBrmG,EAAU,OAAOs4B,CAAI,EAEf,MAAAjF,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,0BAA0B,EAEpCrzB,EAAA,OAAOs4B,EAAMjF,CAAK,EAEtB,MAAAwrG,EAAiBC,GAAqBp5D,EAAY,MAAM,EAC9D,IAAI9jE,EAAI,EACR,KAAMA,EAAIi9H,EAAe,OAAQ,EAAEj9H,EAAG,CAC9B,MAAAN,EAAIu9H,EAAej9H,CAAC,EAC1B,GAAGw4E,EAAgB94E,EACjB,KAEJ,CAEAokE,EAAW0U,CAAa,EAAI,CAAC,UAAAp6E,EAAW,MAAAqzB,CAAK,EAC7CgQ,GAAuBrjC,EAAW,KAAK,KAAKuiB,CAAI,EAAG3gB,CAAC,CACtD,CAEA,OAAO8jE,EAAW0U,CAAa,CACjC,CAEA,MAAa,qBAAsB,CACjC,GAAG,KAAK,cAAc,SAAWj8E,EAAU,MAAQ,KAAK,cAAc,UAAY,CAAC,KAAK,aAAa,IAAI,cAAc,EAC9G,SAGL,IACI,kBAAK,SAAS,eAAe,WAAW,CAC5C,SAAUA,EAAU,KACrB,EAEM,QACI,CACJ,QACT,CACF,CAEO,cAAe,CACpB,KAAM,CAAC,OAAAD,EAAQ,SAAAK,GAAY,KAAK,cAC7B,OAAAA,GAAYJ,EAAU,OAASD,EACzB,GAGF,KAAK,SAAS,mBAAmB,WAAW,CACjD,OAAQC,EAAU,KAClB,SAAU,KAAK,cAAc,OAC7B,MAAO,GACR,EAAE,KAAMm2H,GACA,CAAC,CAACA,EAAc,KACxB,EAAE,MAAM,IACA,EACR,CACH,CAEO,gBAAiB,CAChB,MAAC,OAAAp2H,CAAM,EAAI,KAAK,cAEtB,GAAG,CADeA,EAAO,aACR,CAAC,KAAK,aAAa,IAAI,SAAS,EAAU,eAAQ,QAAQ,EAAK,EAC1E,MAAAwG,EAASxG,EAAO,WACtB,OAAO,QAAQ,IAAI,CACjB,KAAK,SAAS,gBAAgB,YAAYwG,CAAM,EAChD,KAAK,SAAS,gBAAgB,UAAUA,EAAQ,mBAAmB,EACnE,KAAK,SAAS,gBAAgB,QAAQA,CAAM,EAC7C,EAAE,KAAK,CAAC,CAAC6O,EAAa47B,EAAW15B,CAAO,IAChC,CAAClC,GAAe47B,IAAc,CAAC,KAAK,cAAc,UAAY,CAAC15B,EACvE,CACH,CAEA,MAAa,eAAgB,CACrB,MAAC,OAAAvX,CAAM,EAAI,KAAK,cACnB,OAACA,EAAO,OAAO,GAAK,CAAC,KAAK,aAAa,IAAI,QAAQ,EAAU,GAEzD,CAAC,EADS,MAAM,KAAK,SAAS,kBAAkB,WAAWA,EAAO,UAAU,GACjE,kBACpB,CAEA,MAAa,gBAAiB,CAC5B,KAAM,CAAC,OAAAA,EAAQ,SAAAK,GAAY,KAAK,cAKhC,MAJG,CAAC,KAAK,aAAa,IAAI,SAAS,GAAKA,GAIrCL,IAAWC,EAAU,MAAQ,CAAC,KAAK,sBAC7B,GAGND,EAAO,UACQ,KAAK,eACnB,KAAK,SAAS,kBAAkB,kBAAkBA,EAAQ,CAAC,EAC3D,KAAK,SAAS,kBAAkB,iBAAiBA,EAAQ,CAAC,GAC7C,KAAK,CAAC,CAAC,MAAAm/B,CAAK,IAAM,CAAC,CAACA,CAAK,EAAE,MAAM,IAAM,EAAK,EAItD,CAAC,EADS,MAAM,KAAK,SAAS,kBAAkB,YAAYn/B,EAAO,UAAU,GACxC,OAAO,wBACrD,CAEA,MAAa,gBAAiB,CACtB,MAAC,OAAAA,CAAM,EAAI,KAAK,cACnB,GAAAA,EAAO,SACD,SAGL,IAEK,OAAC,EADc,MAAM,KAAK,SAAS,gBAAgB,0BAA0BA,EAAO,UAAU,GAC9E,MAAM,YAClB,CACJ,QACT,CACF,CAEO,SAAU,CACf,KAAK,aAAe,GACpB,KAAK,OAAS,GACd,KAAK,YAAc,GACnB,KAAK,UAAY,GACjB,KAAK,UAAY,GACjB,KAAK,UAAY,GACjB,KAAK,SAAW,GAEhB,KAAK,cAAc,QAEd,eAAU,QAASw7N,GAAa,CAC7B,MAAC,YAAAnlE,CAAe,EAAAmlE,EAClBnlE,IAIC,qBAAgBA,CAAW,EAAI,IACrC,EAEE,KAAK,WAAW,aACjB,KAAK,UAAU,kBAUjB,KAAK,WAAW,QAChB,KAAK,qBAAuB,OAC5B,KAAK,qBAAqB,EAE1B,KAAK,YAAc,OACnB,KAAK,sBAAwB,OAC7B,KAAK,yBAAyB,UAC9B,KAAK,wBAA0B,MACjC,CAEO,sBAAuB,CACvB,eAAU,QAASmlE,GAAa,CACnCA,EAAS,OAAS,OACnB,CACH,CAEO,YAAY+F,EAAU,GAAO,CAC7B,eAAU,QAASjoM,GAAQ,CAS3B,GARHA,EAAI,WAAW,kBAEZ,KAAK,gBAED,eAAU,UAAU,IAAI,MAAM,EACnC,KAAK,UAAU,cAAc,UAAU,IAAI,cAAc,GAGxDA,EAAI,OAAS,SAIb,CAAC,KAAK,eAAeA,EAAI,WAAW,EAAG,CAClC,MAAAykG,EAASzkG,EAAI,WAAW,cAE1BykG,EAAO,cAAc,YAAY,GACnCt3D,GAAas3D,EAAQ,EAAI,EAIbA,EAAO,cAAc,gBAAgB,GAC5C,OAAO,CAChB,EACD,EAcD,KAAK,gBAAkB,GACvB,KAAK,iBAAiB,QACtB,KAAK,WAAW,eAAiB,CAYnC,CAEQ,kBAAkByjG,EAAuCpoE,EAAkB,CAC3E,MAAAt0I,EAAUisB,GAAK,KAAK,aAAa,EAC/B,OAAAjsB,EAAA,YAAc,CAAC,EAAG08M,CAAc,EACxC18M,EAAQ,SAAWs0I,EACZt0I,CACT,CAEO,SAAS,CAAC,OAAA9kB,EAAQ,MAAA8W,EAAO,SAAAzW,EAAU,eAAAo+H,EAAgB,SAAAgjG,EAAU,QAAAC,EAAS,QAAAnkH,GAQ1E,CACD,KAAK,cAAgB,CACnB,OAAAv9G,EACA,MAAO8W,GAAS,GAChB,YAAa,CAAC,EAAG,KAAK,SAAS,WAAW,EAC1C,SAAAzW,EACA,SAAAohO,EACA,QAAAC,EACA,QAAAnkH,CAAA,EAGG,oBAAiBkhB,GAAkB,GAExC,KAAK,QAAQ,CACf,CAEO,SAAU,CACf,KAAK,QAAQ,EACb,KAAK,eAAe,YACpB,KAAK,WAAW,UAChB,KAAK,cAAc,kBACnB,KAAK,WAAW,UAEX,yBACH,KAAK,YACL,KAAK,UACL,KAAK,kBACL,KAAK,aACL,KAAK,UACL,MACJ,CACF,CC12EA,IAAKkjG,QACHA,IAAA,UAAY,CAAZ,cACAA,IAAA,SAAW,CAAX,aACAA,IAAA,OAAS,CAAT,WAHGA,QAAA,ICSL,SAAwBC,GAAuBC,EAAsB,CACnE,MAAMhrL,EAAuB,GAGvBirL,EAAoB,CAAC,MAAO,CAAC,EAAG,MAAO,CAAC,GAAIC,EAAuB,CAAC,MAAO,GAAI,MAAO,CAAE,GACxF,OAAAF,EAAA,QAASG,GAAS,CACtB,OAAOA,EAAK,EAAG,CACb,IAAK,uBACGnrL,EAAA,KAAK8qL,GAAY,SAAS,EAChC,MACF,IAAK,0BACG9qL,EAAA,KAAK8qL,GAAY,MAAM,EAC7B,MACF,IAAK,4BACG9qL,EAAA,KAAK8qL,GAAY,QAAQ,EAC/B,MAIF,IAAK,oCACHG,EAAW,MAAM,KAAK,GAAGE,EAAK,KAAK,EACnC,MACF,IAAK,yBACHF,EAAW,MAAM,KAAK,GAAGE,EAAK,KAAK,EACnC,MACF,IAAK,uCACHD,EAAc,MAAM,KAAK,GAAGC,EAAK,KAAK,EACtC,MACF,IAAK,4BACHD,EAAc,MAAM,KAAK,GAAGC,EAAK,KAAK,EACtC,KACJ,EACD,EAEM,CAAC,KAAMnrL,EAAM,CAAC,EAAG,cAAAkrL,EAAe,WAAAD,EACzC,CCdA,MAAqBG,EAAe,CAkBlC,YAAmBliO,EAgBhB,CAhBgB,aAAAA,EA8LnB,KAAO,aAAe,SAAW,CAK5B,GAJA,KAAK,YAIL,CAAC,KAAK,QAAQ,SACf,OAGF,MAAM8hO,EAA4B,GAElC,OAAO,KAAK,KAAM,CAChB,KAAKF,GAAY,UACfE,EAAM,KAAK,CAAC,EAAG,2BAA4B,GAC3C,MACF,KAAKF,GAAY,SACfE,EAAM,KAAK,CAAC,EAAG,gCAAiC,GAChD,MACF,KAAKF,GAAY,OACfE,EAAM,KAAK,CAAC,EAAG,8BAA+B,GAC9C,KACJ,CAEA,GAAG,KAAK,WAAY,CAClB,MAAMn5N,EAAK,CACT,CAAC,QAAa,yCAA8C,6BAA6B,EACzF,CAAC,WAAa,4CAA8C,gCAAgC,GAM9F,SAAU,CAACjD,EAAGy8N,EAASC,CAAQ,IAAKz5N,EAAG,CAClC,QAAK,WAAW,IAAIjD,CAAC,EAAE,IAAI,UAAU,UAAU,SAAS,MAAM,EAC/D,SAGI,MAAA28N,EAAW,KAAK,QAAQ38N,CAAC,EAC/B,GAAG,CAAC28N,EACF,SAGI,MAAA56N,EAAW,KAAK,iBAAiB46N,CAAQ,EAC5C56N,EAAS,MAAM,QAChBq6N,EAAM,KAAK,CAAC,EAAGK,EAAS,MAAO16N,EAAS,MAAM,EAG7CA,EAAS,MAAM,QAChBq6N,EAAM,KAAK,CACT,EAAGM,EACH,MAAO,MAAM,QAAQ,IAAI36N,EAAS,MAAM,IAAKs6B,GAAO7hC,EAAU,SAAS,gBAAgB,aAAa6hC,CAAE,CAAC,CAAC,EACzG,CAEL,CACF,CAEA7hC,EAAU,SAAS,kBAAkB,WAAW,KAAK,QAAQ,SAAU4hO,CAAK,GAetE,mBAAiB5qN,GAA2C,CAClEA,EAAQ,CAACA,EACT,KAAK,KAAOA,EAEZ,KAAK,eAAe,EAEjB,KAAK,aACN,KAAK,WAAW,IAAI,OAAO,EAAE,IAAI,UAAU,UAAU,OAAO,OAAQ,KAAK,OAAS0qN,GAAY,SAAS,EACvG,KAAK,WAAW,IAAI,UAAU,EAAE,IAAI,UAAU,UAAU,OAAO,OAAQ,KAAK,OAASA,GAAY,MAAM,GAGzG,KAAK,QAAQ,eAAiB,KAAK,QAAQ,cAAc1qN,CAAK,GA/P3DlX,EAAQ,UACTA,EAAQ,SAAS,UAGnB,MAAMK,EAAWL,EAAQ,SAEpB,kBAAe,IAAIsjC,GAAe,CAAC,KAAMtjC,EAAQ,MAAO,QAAS,GAAK,EAEtE,mBAAgB,IAErB,IAAI+Q,EAAsD,CAAC,CACzD,KAAM6wN,GAAY,UAClB,QAAS,sCACR,CACD,KAAMA,GAAY,SAClB,QAAS,wCACR,CACD,KAAMA,GAAY,OAClB,QAAS,mCACV,EAED,GAAG5hO,EAAQ,qBAAsB,CACzB,MAAAsiO,EAAKvxN,EAAE,KAAMA,GAAMA,EAAE,OAAS6wN,GAAY,QAAQ,EACxDU,EAAG,QAAU,mCACf,CAEGtiO,EAAQ,YACL+Q,IAAE,OAAQA,GAAM,CAAC/Q,EAAQ,UAAU,SAAS+Q,EAAE,IAAI,CAAC,GAGzD,MAAM09B,EAASC,KACf39B,EAAE,QAAQ,CAAC,CAAC,KAAAuT,EAAM,QAAA1S,KAAa,CACvB,MAAA2oB,EAAM,IAAI5B,GAAI,CAClB,WAAY,IAAIjG,GAAW,CACzB,QAAA9gB,EACA,KAAM68B,EACN,MAAO,GAAKnqB,CAAA,CACb,EACD,UAAY9X,GAAM,CACb+tB,EAAI,WAAW,SAChB1d,GAAYrQ,CAAC,EACJimB,GAAA,CACP,YAAazyB,EAAQ,aACrB,kBAAmB,CACjBs1C,GAAe,IAAM,CACThjB,KACVmkB,GAAa,KAAK,EACnB,CACH,EACD,EAEL,EACA,eAAgBz2C,EAAQ,IAAI,eAC7B,EAEI,eAAU,IAAIskB,EAAMiW,CAAG,EAC7B,EAEK,MAAApH,EAAO6G,GAAkB,CAAC,GAAG,KAAK,UAAU,QAAQ,EAAG,KAAK,aAAa,EAO5E,GALE,kBAAa,QAAQ,OAAO7G,CAAI,EAClCnzB,EAAQ,UACTA,EAAQ,SAAS,OAAO,KAAK,aAAa,SAAS,EAGlD,CAACA,EAAQ,aAAc,CAClB,MAAAgb,EAAU,KAAK,kBAAoB,IAAIsoB,GAAe,CAAC,KAAM,oBAAqB,QAAS,qCAAqC,EAEjI,gBAAiB,QAAI,CAAC,CACzB,WACA,CACE,aAActjC,EAAQ,eAAe,CAAC,EACtC,IAAK,WACL,IAAK,KACL,KAAM,aACN,gBAAiB,qCACjB,UAAW,EACb,GACC,CACD,QACA,CACE,aAAcA,EAAQ,eAAe,CAAC,EACtC,IAAK,QACL,IAAK,KACL,KAAM,UACN,gBAAiB,qCACjB,UAAW,EACb,CACD,EAAC,EAEG,gBAAW,QAASuiO,GAAc,CAC3BA,EAAA,IAAM,IAAI5pM,GAAI4pM,CAAS,EAEhBzlN,EAAAylN,EAAU,IAAI,UAAW,IAAM,CAC9C32N,EAAQ,KAAK,IAAM,CACjB,MAAMy2N,EAAW,KAAK,QAAQE,EAAU,GAAG,EAC3CviO,EAAQ,IAAI,OAAO,UAAU8gD,EAAgB,EAAE,KAAK,CAClD,KAAM,UACN,UAAW,GACX,MAAOyhL,EAAU,aACjB,YAAa,kCACb,QAAUC,GAAe,CACvBH,EAAS,OAAS,EACTA,EAAA,KAAK,GAAGG,CAAU,EACjBD,EAAA,IAAI,SAAS,gBAAgB,GAAG,KAAK,YAAY,KAAK,iBAAiBC,CAAU,CAAC,CAAC,EACxF,mBAAc,KAAK,IAAI,CAC9B,EACA,gBAAiBH,CAAA,CAClB,EACF,GACA,CAAC,eAAgBriO,EAAQ,IAAI,cAAe,GAE/Cgb,EAAQ,QAAQ,OAAOunN,EAAU,IAAI,SAAS,EAC/C,EAEEviO,EAAQ,UACDA,EAAA,SAAS,OAAOgb,EAAQ,SAAS,CAE7C,CAMA,MAAMpP,GAAW5L,EAAQ,SAAWK,EAAS,kBAAkB,WAAWL,EAAQ,QAAQ,EAAI,QAAQ,QAAW,QAAM8hO,GAAU,CAC/H,MAAMxkN,EAAUwkN,EAAQD,GAAuBC,CAAK,EAAI,OAClDW,EAAeziO,EAAQ,aAAesd,GAAS,KAgBrD,GAdG,KAAK,aACN,KAAK,QAAU,GACf,CAAC,QAAkB,UAAmB,EAAE,QAAS5X,GAAM,CACrD,MAAMmE,EAAM,GACNykB,EAAO5oB,IAAM,QAAU4X,EAAQ,WAAaA,EAAQ,cACtDzT,EAAA,KAAK,GAAGykB,EAAK,MAAM,IAAKyT,GAAOA,EAAG,SAAU,EAAC,EAC7Cl4B,EAAA,KAAK,GAAGykB,EAAK,MAAM,IAAKyT,GAAOA,EAAG,SAAS,EAAI,CAAC,CAAC,EAChD,aAAQr8B,CAAC,EAAImE,EAClB,MAAMrE,EAAI,KAAK,WAAW,IAAIE,CAAC,EAAE,IAAI,SACrCF,EAAE,gBAAgB,EAClBA,EAAE,OAAO,GAAG,KAAK,YAAY8oB,CAAI,CAAC,EACnC,GAGAtuB,EAAQ,YAAa,CACtB,MAAM0iO,EAAa,IAAM,CACjB,MAAA1vM,EAAS,KAAK,WACpB,KAAK,UAAU,QAAQ,CAACuH,EAAK4zJ,IAAgB,CACxCA,IAAgByzC,GAAY,YAI/BrnM,EAAI,WAAW,OAASvH,EAAA,CACzB,EAED,KAAK,SAAS,KAAK,SAAa,EAAA4uM,GAAY,UAAYa,CAAY,EACjE,KAAK,mBACN,KAAK,kBAAkB,UAAU,UAAU,OAAO,OAAQzvM,CAAM,CAClE,EAGS0vM,IACX1iO,EAAQ,IAAI,eAAe,IAAIE,CAAS,EAAE,iBAAkBwiO,CAAU,OAEtE,KAAK,SAAS,KAAK,SAAa,EAAAd,GAAY,UAAYa,CAAY,EAG9DziO,EAAA,IAAI,cAAc,iBAAiB,UAAW,KAAK,aAAc,CAAC,KAAM,GAAK,EACtF,CACH,CAEO,UAAW,CAChB,OAAO,KAAK,QAAQ,aAAe,CAACE,EAAU,OAChD,CA6DQ,eAAeujC,EAA6B,KAAK,WAAa,KAAK,QAAQ,eAAiB,KAAK,QAAQ,SAAS,KAAK,IAAI,EAAG,CAC9H,MAAAuoE,EAAiB,KAAK,aAAa,QACrCvoE,EAEMA,aAAmB,YAC3BnsB,GAAe00F,EAAgBvoE,CAAO,EAEtCziC,GAAMgrG,EAAgBvoE,CAAO,EAJ7BuoE,EAAe,gBAAgB,EAMjCA,EAAe,UAAU,OAAO,OAAQ,CAACvoE,CAAO,CAClD,CAgBO,SAASnf,EAA8B,CAC5C,MAAMiW,EAAM,KAAK,UAAU,IAAIjW,CAAI,EACnC,KAAK,cAAcA,CAAI,EACnBiW,EAAA,WAAW,MAAM,QAAU,EACjC,CAEQ,iBAAiBxlB,EAAmB,CAC1C,MAAMq8F,EAAQ,CAAC,MAAO,CAAgB,QAAO,CAAc,GACnD,OAAAr8F,EAAA,QAAS9U,GAAW,CAC1BmxG,EAAMnxG,EAAO,UAAc,UAAU,OAAO,EAAE,KAAKA,EAAO,UAAU,EAAIA,EAAO,WAAaA,CAAM,EACnG,EAEMmxG,CACT,CAEQ,YAAYA,EAA2C,CAC7D,MAAG,CAACA,EAAM,MAAM,QAAU,CAACA,EAAM,MAAM,OAC9B,CAAC5sG,EAAK,oCAAoC,CAAC,EAG7CD,GAAK,CACV6sG,EAAM,MAAM,OAAS5sG,EAAK,QAAS,CAAC4sG,EAAM,MAAM,MAAM,CAAC,EAAI,KAC3DA,EAAM,MAAM,OAAS5sG,EAAK,QAAS,CAAC4sG,EAAM,MAAM,MAAM,CAAC,EAAI,IAC3D,SAAO,OAAO,EAAG,EAAK,CAC1B,CACF,CChVA,MAAqBuxH,WAAiC9gM,EAAwB,CAC5E,MAAa,MAAO,CAClB,KAAK,UAAU,UAAU,IAAI,cAAe,sBAAsB,EAClE,KAAK,SAAS,cAAc,EAE5B,MAAMz9B,EAAY,KAAO,MAAM,KAAK,SAAS,gBAAgB,QAAW,SAClEw+N,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,OACRp+N,EAAK,kBAAkB,EACvB,SAAS,cAAc,IAAI,EAC3B,SAAS,cAAc,IAAI,EAC3BA,EAAK,mBAAmB,EACxB,SAAS,cAAc,IAAI,EAC3BilN,GAAW,CACT,OAAQrlN,CAAA,CACT,GAGG,MAAAy+N,EAAe,IAAIX,GAAe,CACtC,IAAK,KACL,MAAO,oBACP,SAAU,6BACV,SAAU,CAACU,EAAWA,EAAW,EAAE,EACnC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,cAAgBt+M,GAAS,CACrB9e,EAAA,SAASo8N,GAAY,SAAS,EAChCp8N,EAAE,aAAa,UAAU,UAAU,OAAO,OAAQ8e,IAASs9M,GAAY,MAAM,CAC/E,EACA,SAAU,KAAK,SAChB,EAEKkB,EAAwB,oBACxBt9N,EAAI,IAAI08N,GAAe,CAC3B,IAAK,KACL,MAAO,qBACP,SAAU,8BACV,SAAU,CAACY,EAAUA,EAAU,EAAE,EACjC,aAAc,GACd,UAAW,CAAClB,GAAY,MAAM,EAC9B,SAAU,KAAK,SAChB,EAEI,gBAAW,UAAU,aAAap8N,EAAE,aAAa,UAAWq9N,EAAa,aAAa,UAAU,WAAW,CAClH,CACF,CC5CA,MAAqBE,WAAqCrhM,EAAe,CAChE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,2BAA2B,EACjF,KAAK,SAAS,gCAAgC,EAExC,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,WAAY,qCACZ,YAAa,GACd,EAEKn8B,EAAQ,KACR+6C,EAAmB,SAAS,cAAc,KAAK,EAEpC6nH,GAAA,CACf,MAAA5iK,EACA,IAAK+6C,EACL,MAAO,IACP,OAAQ,IACT,EAEOlnC,EAAA,QAAQ,OAAOknC,CAAgB,EAEjC,MAAA8gL,EAAehoN,EAAQ,yBAEvBipB,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMg/L,EAAYxpM,GAAO,gCAAiC,CAAC,KAAM,4CAA4C,EAE5F3c,EAAAmmN,EAAYz2N,GAAM,CACjC,KAAK,MAAM,EACZ,EAEI,YAAO,kBAAkB02N,GAAgB,IAAI,EAElDj/L,EAAa,OAAOg/L,CAAS,EAE7BD,EAAa,OAAO/+L,CAAY,EAE3B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CACF,CC9CO,SAASmoN,GAASC,EAAuB,CACvC,OAACtxM,IAAoB,CAACsxM,CAC/B,CCWA,MAAqBC,WAAmD3hM,EAAe,CAAvF,kCAKE,KAAO,QAAU,GAEV,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,0CAA0C,EAChG,KAAK,SAAS,2BAA2B,EAEnC,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,WAAY,GACZ,YAAa,GACd,EAEDtiC,GAAMga,EAAQ,QAAS,mCAAoC,CAAC,KAAK,KAAK,CAAC,EAEvE,MAAM7T,EAAQ,KACR+6C,EAAmB,SAAS,cAAc,KAAK,EAEpC6nH,GAAA,CACf,IAAK7nH,EACL,MAAO,IACP,OAAQ,IACR,MAAA/6C,CAAA,CACD,EAEO6T,EAAA,QAAQ,OAAOknC,CAAgB,EAEjC,MAAA8gL,EAAehoN,EAAQ,yBAEvBipB,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMoE,EAAa,KAAK,eAAiB,IAAIi7L,GAAe,CAC1D,KAAM,sBACN,MAAO,2BACP,OAAQ,KAAK,OACb,OAASt6K,GAAS,CAChB48G,EAAO,EAAI,EAEN,cAAS,gBAAgB,qBAAqB,GAAK58G,CAAI,EAC3D,KAAM9xC,GAAU,CAKRqsN,GAAA,CACR,EACA,MAAOnyN,GAAQ,CACd,OAAOA,EAAI,KAAM,CACf,IAAK,eACQi3B,EAAA,MAAM,UAAU,IAAI,OAAO,EACtC/wB,GAAe+wB,EAAW,MAAO7jC,EAAK,iCAAiC,CAAC,EACxE,MAEF,IAAK,qBACQ6jC,EAAA,MAAM,UAAU,IAAI,OAAO,EACtC/wB,GAAe+wB,EAAW,MAAO7jC,EAAK,iCAAiC,CAAC,EACxE,MAEF,QACU,cAAM,gBAAiB4M,CAAG,EAClC,KACJ,CAEAw0J,EAAO,EAAK,EACb,CACH,EACD,EAEK49D,EAAY/pM,GAAO,8CAA+C,CAAC,KAAM,mCAAmC,EAC5GgqM,EAAYhqM,GAAO,4DAA6D,CAAC,KAAM,aAAa,EAEpG8pM,EAAS,IAAM,CACnB,KAAK,OAAO,UAAUR,EAA4B,EAAE,KAAK,GAGrDn9D,EAAUjsI,GAAqB,CACnCnJ,GAAiB,CAAC6X,EAAW,MAAOm7L,EAAWC,CAAS,EAAG9pM,CAAO,GAGnD7c,EAAA0mN,EAAYh3N,GAAM,CACjCo5J,EAAO,EAAI,EACX,KAAK,SAAS,gBAAgB,sBAAsB,KAAM1uJ,GAAU,CAC7D,YAAO,kBAAkBwsN,GAAgC,IAAI,EAClE,KAAK,MAAM,GACV,IAAM,CACP99D,EAAO,EAAK,EACb,EACF,EAEgB9oJ,EAAA2mN,EAAYj3N,GAAM,CACjCo5J,EAAO,EAAI,EACL,MAAAxiK,EAAIsjE,GAAa+8J,CAAS,EAChC,KAAK,SAAS,gBAAgB,sBAAsB,KAAMvsN,GAAU,CAClE9T,EAAE,OAAO,EACTwiK,EAAO,EAAK,EACb,EACF,EAED3hI,EAAa,OAAOoE,EAAW,UAAWm7L,EAAWC,CAAS,EAE9DT,EAAa,OAAO/+L,CAAY,EAE3B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,oBAAqB,CACfmoN,GAAS,KAAK,OAAO,GACpB,oBAAe,MAAM,OAC5B,CACF,CChHA,MAAqBO,WAAuChiM,EAAe,CAA3E,kCAME,KAAO,QAAU,GAEV,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,6BAA6B,EACnF,KAAK,SAAS,oBAAoB,EAE5B,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,WAAY,GACZ,YAAa,GACd,EAEKn8B,EAAQ,KACR+6C,EAAmB,SAAS,cAAc,KAAK,EAEpC6nH,GAAA,CACf,IAAK7nH,EACL,MAAO,IACP,OAAQ,IACR,MAAA/6C,CAAA,CACD,EAEO6T,EAAA,QAAQ,OAAOknC,CAAgB,EAEjC,MAAA8gL,EAAehoN,EAAQ,yBAEvBipB,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMoE,EAAa,KAAK,WAAa,IAAIhH,GAAW,CAClD,KAAM,iBACN,MAAO,gBACP,UAAW,GACZ,EAEDgH,EAAW,MAAM,iBAAiB,WAAa77B,GAAM,CAChD,GAAAA,EAAE,MAAQ,QACX,OAAAqQ,GAAYrQ,CAAC,EACNm3N,EAAgB,CACzB,CACD,EAEDt7L,EAAW,MAAM,iBAAiB,QAAU77B,GAAM,CACrC67B,EAAA,MAAM,UAAU,OAAO,OAAO,EAC1C,EAED,MAAMu7L,EAAcnqM,GAAO,gCAAiC,CAAC,KAAM,WAAW,EACxEoqM,EAAUpqM,GAAO,4DAA6D,CAAC,KAAM,gBAAgB,EAErG8pM,EAAS,IAAM,CACnB,KAAK,OAAO,UAAUR,EAA4B,EAAE,KAAK,GAGrDY,EAAkB,IAAM,CACtB,MAAAG,EAAQz7L,EAAW,MAAM,KAAK,EAC9Bv9B,EAAQgjD,GAAWg2K,CAAK,EAC9B,GAAG,CAACh5N,GAASA,EAAM,CAAC,EAAE,SAAWg5N,EAAM,OAAQ,CAClCz7L,EAAA,MAAM,UAAU,IAAI,OAAO,EACtC,MACF,CAEA07L,EAAc,EAAI,EACZ,MAAA3gO,EAAIsjE,GAAak9J,CAAW,EAE7B,cAAS,gBAAgB,eAAe,CAC3C,KAAM,KAAK,KACX,gBAAiB,KAAK,cACtB,YAAa,KAAK,YAClB,MAAAE,CAAA,CACD,EAAE,KAAM5sN,GAAU,CACVqsN,GACT,EAAInyN,GAAQ,CACV,GAAGA,EAAI,KAAK,SAAS,mBAAmB,EAAG,CACzC,MAAM4yN,EAAU,CAAC5yN,EAAI,KAAK,MAAM,0BAA0B,EAAE,CAAC,EAEvDmoB,EAAM,KAAK,OAAO,UAAU8pM,EAA0C,EAC5E9pM,EAAI,MAAQ,KAAK,MACjBA,EAAI,MAAQuqM,EACZvqM,EAAI,OAASyqM,EACbzqM,EAAI,KAAK,OAED,YAAI,qBAAsBnoB,CAAG,EAGvC2yN,EAAc,EAAK,EACnB3gO,EAAE,OAAO,EACV,GAEH0Z,EAAiB8mN,EAAaD,CAAe,EAEvC,MAAAI,EAAiBn+D,GAAoB,CACtCA,GACWg+D,EAAA,aAAa,WAAY,MAAM,EACnCC,EAAA,aAAa,WAAY,MAAM,IAEvCD,EAAY,gBAAgB,UAAU,EACtCC,EAAQ,gBAAgB,UAAU,EACpC,EAGe/mN,EAAA+mN,EAAUr3N,GAAM,CACjBujB,GAAa,YAAYD,GAAW,mBAAoB,CACpE,QAAS,CAAC,CACR,QAAS,SACT,SAAU,IACT,CACD,QAAS,gBACT,SAAU,IAAM,CAEdi0M,EAAc,EAAI,EAClBr9J,GAAam9J,CAAO,EACf,cAAS,gBAAgB,eAAe,CAC3C,KAAM,KAAK,KACX,gBAAiB,KAAK,cACtB,YAAa,KAAK,YAClB,MAAO,GACR,EAAE,KAAK,IAAM,CACLN,GACT,EAAInyN,GAAQ,CACV2yN,EAAc,EAAK,EACpB,CACH,EACA,SAAU,GACX,EACD,aAAc,uBACd,mBAAoB,2BACrB,EAEK,KAAK,EACZ,EAED9/L,EAAa,OAAOoE,EAAW,UAAWu7L,EAAaC,CAAO,EAE9Db,EAAa,OAAO/+L,CAAY,EAE3B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,oBAAqB,CACfmoN,GAAS,KAAK,OAAO,GACpB,gBAAW,MAAM,OACxB,CACF,CCvJA,MAAqBc,WAAsCviM,EAAe,CAMjE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,4BAA4B,EAClF,KAAK,SAAS,4BAA4B,EAEpC,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,YAAa,GACd,EAEKn8B,EAAQ,KACR+6C,EAAmB,SAAS,cAAc,KAAK,EACpC6nH,GAAA,CACf,IAAK7nH,EACL,MAAO,IACP,OAAQ,IACR,MAAA/6C,CAAA,CACD,EAEO6T,EAAA,QAAQ,OAAOknC,CAAgB,EAEjC,MAAAje,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMoE,EAAa,KAAK,WAAa,IAAIhH,GAAW,CAClD,KAAM,OACN,MAAO,mCACR,EAEDgH,EAAW,MAAM,iBAAiB,WAAa77B,GAAM,CAChD,GAAAA,EAAE,MAAQ,QACX,OAAAqQ,GAAYrQ,CAAC,EACN67B,EAAW,MAAQs7L,EAAgB,EAAIO,EAAY,CAC5D,CACD,EAEK,MAAAX,EAAS,CAAC/2N,EAAW23N,IAAuB,CAC7C33N,GACDqQ,GAAYrQ,CAAC,EAGT,MAAA2uB,EAAOgpM,EAAW97L,EAAW,MAAQ,OACxC,GAAAlN,GAAQ,KAAK,cAAgBA,EAAM,CACpC5I,GAAM7xB,GAAK,OAAO,sBAAuB,EAAI,CAAC,EAC9C,MACF,CAEA,MAAM64B,EAAM,KAAK,OAAO,UAAUmqM,EAA8B,EAChEnqM,EAAI,MAAQ,KAAK,MACjBA,EAAI,cAAgB,KAAK,cACzBA,EAAI,YAAc,KAAK,YACvBA,EAAI,KAAO4B,EAEX5B,EAAI,KAAK,GAGLqqM,EAAcnqM,GAAO,gCAAiC,CAAC,KAAM,WAAW,EACxEoqM,EAAUpqM,GAAO,4DAA6D,CAAC,KAAM,gBAAgB,EAErGkqM,EAAmBn3N,GAAc+2N,EAAO/2N,EAAG,EAAI,EAC/C03N,EAAe13N,GAAc+2N,EAAO/2N,EAAG,EAAK,EAClDsQ,EAAiB8mN,EAAaD,CAAe,EAC7C7mN,EAAiB+mN,EAASK,CAAW,EAErCjgM,EAAa,OAAOoE,EAAW,UAAWu7L,EAAaC,CAAO,EAEtD7oN,EAAA,QAAQ,OAAOipB,CAAY,EAE9B,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEA,oBAAqB,CACd,gBAAW,MAAM,OACxB,CACF,CC/EA,MAAqBopN,WAAiD1iM,EAAe,CAM5E,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,uCAAwC,yCAAyC,EACvI,KAAK,SAAS,uBAAuB,EAE/B,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,YAAa,GACd,EAEKW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMwpB,EAAqB,KAAK,mBAAqB,IAAIC,GAAmB,CAC1E,KAAM,oBACN,MAAO,wBACR,EAEK22K,EAAS,IAAIC,GAAe72K,EAAoB,GAAG,EAEnDm2K,EAAcnqM,GAAO,gCAAiC,CAAC,KAAM,WAAW,EAEjEwK,EAAA,OAAOwpB,EAAmB,UAAWm2K,CAAW,EAC7D5oN,EAAQ,QAAQ,OAAOqpN,EAAO,UAAWpgM,CAAY,EAEhD,gBAAW,OAAOjpB,EAAQ,SAAS,EAExCyyC,EAAmB,MAAM,iBAAiB,WAAajhD,GAAM,CAKxD,GAJAihD,EAAmB,MAAM,UAAU,SAAS,OAAO,GACjCA,EAAA,SAAS5jB,GAAW,OAAO,EAG7Cr9B,EAAE,MAAQ,QACX,OAAOm3N,EAAgB,CACzB,CACD,EAED,MAAMY,EAAc,IACf,KAAK,cAAgB92K,EAAmB,OACzCA,EAAmB,SAAS,EACrB,IAGF,GAGHk2K,EAAmBn3N,GAAc,CAKrC,GAJGA,GACDqQ,GAAYrQ,CAAC,EAGZ,CAAC+3N,EAAY,EAAG,OAEnB,MAAMhrM,EAAM,KAAK,OAAO,UAAU0qM,EAA6B,EAC/D1qM,EAAI,MAAQ,KAAK,MACjBA,EAAI,cAAgB,KAAK,cACzBA,EAAI,YAAc,KAAK,YACvBA,EAAI,KAAK,GAEX,OAAAzc,EAAiB8mN,EAAaD,CAAe,EAEtCU,EAAO,MAChB,CAEA,oBAAqB,CACd,wBAAmB,MAAM,OAChC,CACF,CCjEA,MAAqBG,WAA+C9iM,EAAe,CAAnF,kCAIE,KAAO,QAAU,GAEV,MAAO,CACZ,MAAMu0G,EAAQ,CAAC,KAAK,MAAM,OAAO,cAAgB,KAAK,cACtD,KAAK,UAAU,UAAU,IAAI,wBAAyB,sCAAsC,EACvF,cAASA,EAAQ,2BAA6B,4BAA4B,EAEzE,MAAAj7H,EAAU,IAAIsoB,GAAe,CACjC,YAAa,GACd,EAEKW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMwpB,EAAqB,KAAK,mBAAqB,IAAIC,GAAmB,CAC1E,KAAM,iBACN,MAAOuoF,EAAQ,2BAA8B,KAAK,MAAM,KAAO,OAAY,gBAC3E,UAAW,CAACA,GAAS,KAAK,MAAM,KAAOr1I,GAAc,KAAK,MAAM,IAAI,EAAI,OACzE,EAEKyjO,EAAS,IAAII,GAAeh3K,EAAoB,GAAG,EAEnDm2K,EAAcnqM,GAAO,+BAA+B,EACpDotD,EAAS,IAAInmF,GAAK,YAAY,CAAC,IAAK,WAAW,EAEzCkjO,EAAA,OAAO/8I,EAAO,OAAO,EAEpB5iD,EAAA,OAAOwpB,EAAmB,UAAWm2K,CAAW,EAC7D5oN,EAAQ,QAAQ,OAAOqpN,EAAO,UAAWpgM,CAAY,EAEhD,gBAAW,OAAOjpB,EAAQ,SAAS,EAExCyyC,EAAmB,MAAM,iBAAiB,WAAajhD,GAAM,CAOxD,GANAihD,EAAmB,MAAM,UAAU,SAAS,OAAO,IACjCA,EAAA,MAAM,UAAU,OAAO,OAAO,EACjDo5B,EAAO,IAAM,WACbA,EAAO,OAAO,GAGbr6E,EAAE,MAAQ,QACX,OAAOm3N,EAAgB,CACzB,CACD,EAED,MAAMY,EAAc,IACd92K,EAAmB,MAAM,OAKtB,IAJcA,EAAA,MAAM,UAAU,IAAI,OAAO,EACvC,IAMP,IAAAk2K,EACJ,GAAI1tF,EAkEF0tF,EAAmBn3N,GAAM,CAKvB,GAJGA,GACDqQ,GAAYrQ,CAAC,EAGZ,CAAC+3N,EAAY,EAAG,OAEnB,MAAMhrM,EAAM,KAAK,OAAO,UAAU6qM,EAAwC,EAC1E7qM,EAAI,MAAQ,KAAK,MACjBA,EAAI,YAAck0B,EAAmB,MACrCl0B,EAAI,cAAgB,KAAK,cACzBA,EAAI,KAAK,OA7EF,CACL,IAAAmrM,EAEJ,MAAM/iC,EAAW,KAEX+iC,IACiBA,EAAA,OAAO,YAAY/iC,EAAU,GAAI,GAG/C,KAAK,SAAS,gBAAgB,WAAW,KAAMgjC,GAAW,CAC/D,KAAK,MAAQA,EAEV,KAAK,MAAM,KACZhwN,GAAa84C,EAAmB,MAAO7sD,GAAc,KAAK,MAAM,IAAI,CAAC,EAErE0W,GAAem2C,EAAmB,MAAOjpD,EAAK,eAAe,CAAC,CAChE,CACD,GA6Cem/N,EA1CFn3N,GAAc,CACzB,IAAC+3N,IAAe,CACjB1nN,GAAYrQ,CAAC,EACb,MACF,CAEYo3N,EAAA,aAAa,WAAY,MAAM,EAC3C/8I,EAAO,IAAM,aACbA,EAAO,OAAO,EACR,MAAA9lE,EAAY2lD,GAAak9J,CAAW,EAEpCgB,EAAgBn3K,EAAmB,MACpC,cAAS,gBAAgB,MAAMA,EAAmB,MAAO,KAAK,KAAK,EAAE,KAAMo3K,GAAS,CAGpF,GAFH,QAAQ,IAAIA,CAAI,EAEbA,EAAK,IAAM,qBAAsB,CAClC,cAAcH,CAAgB,EAC3BL,GAAQA,EAAO,OAAO,EACzB,MAAM9qM,EAAM,KAAK,OAAO,UAAUurM,EAAyB,EAC3DvrM,EAAI,MAAQ,KAAK,MACjBA,EAAI,cAAgBqrM,EACpBrrM,EAAI,KAAK,EACJ,YAAO,qBAAqB,IAAI,CACvC,CACF,EAAInoB,GAAQ,CAIV,OAHAwyN,EAAY,gBAAgB,UAAU,EACnBn2K,EAAA,MAAM,UAAU,IAAI,OAAO,EAEvCr8C,EAAI,KAAM,CACf,QAEEy1E,EAAO,IAAM,wBACbA,EAAO,OAAO,EACd9lE,EAAU,OAAO,EACjB0sC,EAAmB,OAAO,EAC1B,KACJ,CAESk0I,GAAA,CACV,GAKMA,GAAA,CAiBX,OAAA7kL,EAAiB8mN,EAAaD,CAAe,EAEtCU,EAAO,MAChB,CAEA,oBAAqB,CACflB,GAAS,KAAK,OAAO,GACpB,wBAAmB,MAAM,OAChC,CACF,CCxJA,MAAqB2B,WAAkCpjM,EAAe,CAI7D,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,wBAAyB,4BAA4B,EAClF,KAAK,SAAS,0BAA0B,EAElC,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,WAAY,GACZ,YAAa,GACd,EAEKn8B,EAAQ,KACR+6C,EAAmB,SAAS,cAAc,KAAK,EAEpC6nH,GAAA,CACf,IAAK7nH,EACL,MAAO,IACP,OAAQ,IACR,MAAA/6C,CAAA,CACD,EAEO6T,EAAA,QAAQ,OAAOknC,CAAgB,EAEjC,MAAAhpC,EAAI8B,EAAQ,yBACf,QAAK,MAAM,OAAO,aAAc,CAC3Bha,GAAAga,EAAQ,QAAS,yBAAyB,EAE1C,MAAA+pN,EAAoBtrM,GAAO,8BAA+B,CAAC,KAAM,OAAQ,KAAM,6BAA6B,EAC5GurM,EAAqBvrM,GAAO,8BAA+B,CAAC,KAAM,cAAe,KAAM,6BAA6B,EACpHwrM,EAAsBxrM,GAAO,8BAA+B,CAAC,KAAM,QAAS,KAAM,KAAK,MAAM,OAAO,aAAe,0BAA4B,wBAAyB,GAE9K3c,EAAiBioN,EAAmB,IAAM,CACxC,MAAMxrM,EAAM,KAAK,OAAO,UAAUirM,EAAsC,EACxEjrM,EAAI,MAAQ,KAAK,MACjBA,EAAI,cAAgB,KAAK,cACzBA,EAAI,KAAK,EACV,EAEDzc,EAAiBkoN,EAAoB,IAAM,CAC3Bj1M,GAAa,YAAYD,GAAW,yBAA0B,CAC1E,QAAS,CAAC,CACR,QAAS,UACT,SAAU,IAAM,CACT,cAAS,gBAAgB,eAAe,CAAC,gBAAiB,KAAK,aAAa,CAAC,EAAE,KAAK,IAAM,CACxF,YAAO,kBAAkBozM,GAAgB,IAAI,EAClD,KAAK,MAAM,EACZ,CACH,EACA,SAAU,GACX,EACD,aAAc,+BACd,mBAAoB,0BACrB,EAEK,KAAK,EACZ,EAEDpmN,EAAiBmoN,EAAqB,IAAM,CAC1C,MAAM1rM,EAAM,KAAK,OAAO,UAAUmqM,EAA8B,EAChEnqM,EAAI,MAAQ,KAAK,MACbA,EAAA,KAAO,KAAK,MAAM,KACtBA,EAAI,cAAgB,KAAK,cACzBA,EAAI,YAAc,KAAK,cACvBA,EAAI,QAAU,GACdA,EAAI,KAAK,EACV,EAECrgB,EAAA,OAAO6rN,EAAmBC,EAAoBC,CAAmB,MAC9D,CACCjkO,GAAAga,EAAQ,QAAS,6BAA6B,EAE9C,MAAAipB,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAE1C,MAAMihM,EAAiBzrM,GAAO,gCAAiC,CAAC,KAAM,iCAAiC,EAEvGwK,EAAa,OAAOihM,CAAc,EAClChsN,EAAE,OAAO+qB,CAAY,EAEJnnB,EAAAooN,EAAiB14N,GAAM,CACtC,MAAM+sB,EAAM,KAAK,OAAO,UAAUirM,EAAsC,EACxEjrM,EAAI,MAAQ,KAAK,MACjBA,EAAI,KAAK,EACV,CACH,CAEK,gBAAW,OAAOve,EAAQ,SAAS,CAC1C,CACF,CC1FA,MAAqBmqN,WAA8BtjM,EAEhD,CACM,KAAKusI,EAAsC,CAChD,KAAK,UAAU,UAAU,IAAI,cAAe,mBAAmB,EAC/D,KAAK,SAAS,iBAAiB,EAE/B,MAAMg3D,EAAkB,IACfC,EAAe,OAASzD,GAAY,WAAa,CAAC,CAACyD,EAAe,QAAQ,SAAS,OAGtF5hM,EAAuB,gDACvB4hM,EAAiB,IAAInD,GAAe,CACxC,IAAK,KACL,MAAO,gBACP,SAAU,iCACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,cAAe,IAAM,CACnB,CAAC6hM,EAAqBC,CAAc,EAAE,QAASvqN,GAAY,CACzDA,EAAQ,UAAU,UAAU,OAAO,OAAQ,CAACoqN,GAAiB,EAC9D,CACH,EACA,SAAU,KAAK,SAChB,EAEG,IAAAE,EACJ,CACQ,MAAAtqN,EAAUsqN,EAAsB,IAAIhiM,GAAe,CACvD,QAAS,mBACV,EAEK/I,EAAM,IAAI5B,GAAI,CAClB,aAAc,eACd,cAAe,IAAIxI,GAAc,CAAC,OAAQ,GAAM,QAAS,CAAC,CAACi+I,EAAc,OAAO,gBAAgB,EAChG,eAAgB,KAAK,eACtB,EAEI,mBAAc,iBAAiB,UAAW,IAAM,CACnD,MAAM97H,EAAO/X,EAAI,cAAc,SAAW6qM,EAAgB,EAC1D,GAAG,CAAC,CAACh3D,EAAc,OAAO,kBAAoB97H,EAC5C,OAGF,MAAM1mC,EAAU,KAAK,SAAS,kBAAkB,yBAAyB,CACvE,EAAG,wBACH,OAAQ,CACN,GAAGwiK,EAAc,OACjB,gBAAiB97H,GAAQ,MAC3B,EACD,EACI,0BAAc,cAAc,UAAW1mC,CAAO,EAC5CA,CAAA,CACR,EAEOoP,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAC/B,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CAEI,IAAAuqN,EACJ,CACQ,MAAAvqN,EAAUuqN,EAAiB,IAAIjiM,GAAe,CAClD,QAAS,GACV,EAEKkiM,EAAe,IAAM,CACnB,MAAAzoK,EAAMtjC,GAAO,sCAAuC,CACxD,KAAMv5B,EAAU,QAAU,mCAAqC,yBAChE,EAED,OAAA4c,EAAiBigD,EAAK,IAAM,CAC1BtmB,GAAa,KAAK,CACjB,GAAC,eAAgB,KAAK,cAAe,GAEjCsmB,CAAA,EAGHgjK,EAAY,IAAM,CACd/kN,EAAA,QAAQ,gBAAgBwqN,EAAc,GAC9CxqN,EAAQ,QAAQ,gBAAgBxW,EAAKtE,EAAU,QAAU,uCAAyC,4BAA4B,CAAC,GAGvH6/N,IACV,KAAK,eAAe,IAAI7/N,CAAS,EAAE,iBAAkB6/N,CAAS,EAEzD,gBAAW,OAAO/kN,EAAQ,SAAS,CAC1C,CACF,CACF,CCjGA,MAAqByqN,WAAkC5jM,EAAwB,CACtE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,uBAAuB,EACnE,KAAK,SAAS,qBAAqB,EAEnC,MAAM4B,EAAuB,oDAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,2BACP,SAAU,8BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,UAAW,CAACm+L,GAAY,MAAM,EAC9B,SAAU,KAAK,SAChB,CACH,CACF,CClBA,MAAqB8D,WAAqC7jM,EAAwB,CACzE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,0BAA0B,EACtE,KAAK,SAAS,0BAA0B,EAExC,MAAM4B,EAAuB,gDAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,uBACP,SAAU,0BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,SAAU,KAAK,SAChB,CACH,CACF,CCfA,MAAqBkiM,WAAiC9jM,EAAwB,CACrE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,uBAAuB,EACnE,KAAK,SAAS,wBAAwB,EAEtC,MAAM4B,EAAuB,6CAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,cACP,SAAU,4BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WAEf,SAAU,KAAK,SAChB,CACH,CACF,CClBA,MAAqBmiM,WAA2B/jM,EAAwB,CAC/D,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,eAAe,EAC3D,KAAK,SAAS,4BAA4B,EAE1C,MAAM4B,EAAuB,iDAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,eACP,SAAU,2BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,SAAU,KAAK,SAChB,EAED,CACE,MAAMA,EAAuB,qCAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,mBACP,SAAU,0BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,SAAU,KAAK,SAChB,CACH,CACF,CACF,CCdA,MAAqBoiM,WAA6BhkM,EAAwB,CAIjE,MAAO,CACP,eAAU,UAAU,IAAI,2BAA2B,EACxD,KAAK,SAAS,eAAe,EAEvB,MAAAikM,EAAWjB,GAAsC,CAC/C,MAAAtqM,EAAM,IAAI5B,GAAI,CAClB,MAAO,CAACksM,EAAK,SAAUA,EAAK,WAAW,EAAE,KAAK,GAAG,EACjD,SAAU,CAACA,EAAK,GAAIA,EAAK,OAAO,EAAE,OAAO,OAAO,EAAE,KAAK,KAAK,EAC5D,UAAW,GACX,WAAYA,EAAK,OAAO,QAAU,OAAY3tK,GAA8B,IAAI,KAAK,KAAK,IAAI2tK,EAAK,YAAaA,EAAK,YAAY,EAAI,GAAI,CAAC,EAC3I,EAED,OAAAtqM,EAAI,UAAU,QAAQ,KAAO,GAAKsqM,EAAK,KAEvCtqM,EAAI,SAAS,YAAc,CAACsqM,EAAK,aAAcA,EAAK,gBAAkBA,EAAK,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,EAEvGtqM,CAAA,EAGHwrM,EAAiB,KAAK,eAAe,MAAM,EAEjD,CACQ,MAAA/qN,EAAU,IAAIsoB,GAAe,CACjC,KAAM,iBACN,QAAS,yBACV,EAEKuhM,EAAO1tL,GAAc4uL,EAAgBlB,GAAQA,EAAK,OAAO,OAAO,EAChEznF,EAAU0oF,EAAQjB,CAAI,EAI5B,GAFQ7pN,EAAA,QAAQ,OAAOoiI,EAAQ,SAAS,EAErC2oF,EAAe,OAAQ,CAClB,MAAAC,EAAevsM,GAAO,qCAAsC,CAAC,KAAM,OAAQ,KAAM,uBAAuB,EAC7F3c,EAAAkpN,EAAex5N,GAAM,CACvBujB,GAAA,YAAYD,GAAW,iBAAkB,CACpD,QAAS,CAAC,CACR,QAAS,YACT,SAAU,GACV,SAAU,IAAM,CACd,MAAM8J,EAASpJ,GAAiB,CAACw1M,CAAY,EAAG,EAAI,EACpD,KAAK,SAAS,WAAW,UAAU,0BAA0B,EAAE,KAAM9uN,GAAU,CAE7E8uN,EAAa,OAAO,EACpBC,EAAa,UAAU,QAAO,EAC7B1kL,CAAO,EAAE,QAAQ,IAAM,CACjB3nB,GAAA,CACR,CACH,EACD,EACD,aAAc,0BACd,mBAAoB,qBACrB,EAAE,KAAK,CACP,GAAC,eAAgB,KAAK,cAAe,GAEhC5e,EAAA,QAAQ,OAAOgrN,CAAY,CACrC,CAEK,gBAAW,OAAOhrN,EAAQ,SAAS,CAC1C,CAEG,IAAC+qN,EAAe,OACjB,OAGI,MAAAE,EAAe,IAAI3iM,GAAe,CACtC,KAAM,gBACN,QAAS,mBACV,EAEcyiM,EAAA,QAASlB,GAAS,CAC/BoB,EAAa,QAAQ,OAAOH,EAAQjB,CAAI,EAAE,SAAS,EACpD,EAEI,gBAAW,OAAOoB,EAAa,SAAS,EAEvC,MAAA1kL,EAAWnwC,GAAkB,CAC9BA,EAAI,OAAS,uCACdmhB,GAAM7xB,GAAK,OAAO,kCAAmC,EAAI,CAAC,CAC5D,EAGE,IAAA6kB,EACJ,MAAM2gN,EAAmB,IAAM,CACvB,MAAAjnI,EAAO15E,EAAO,QAAQ,KAEfwK,GAAA,YAAYD,GAAW,iBAAkB,CACpD,QAAS,CAAC,CACR,QAAS,YACT,SAAU,GACV,SAAU,IAAM,CACT,cAAS,WAAW,UAAU,6BAA8B,CAAC,KAAAmvE,EAAK,EACtE,KAAM/nF,GAAU,CACZA,GACDqO,EAAO,OAAO,GAEfg8B,CAAO,CACZ,EACD,EACD,aAAc,yBACd,mBAAoB,uBACrB,EAAE,KAAK,GAGJ9sC,EAAU,KAAK,YAAcugB,GAAe,CAChD,QAAS,CAAC,CACR,KAAM,OACN,KAAM,YACN,QAASkxM,CAAA,CACV,EACF,EACDzxN,EAAQ,GAAK,8BACLA,EAAA,UAAU,IAAI,aAAa,EAEnC,SAAS,eAAe,YAAY,EAAE,OAAOA,CAAO,EAE1B6iB,GAAA,CACxB,QAAS,KAAK,WAAW,UACzB,SAAW9qB,GAAM,CACN+Y,EAAAC,EAAgBhZ,EAAE,OAAQ,KAAK,EACrC,GAAC+Y,GAAUA,EAAO,QAAQ,OAAS,OAInC/Y,aAAa,YAAYA,EAAE,eAAe,EAE1CA,aAAa,aAAYA,EAAE,aAAe,IAE7CqpB,GAAarpB,EAAGiI,CAAO,EACvBof,GAAsB,YAAYpf,CAAO,EAC3C,EACA,eAAgB,KAAK,eACtB,EAEDqI,EAAiB,KAAK,WAAW,UAAYtQ,GAAM,CACxC+Y,EAAAC,EAAgBhZ,EAAE,OAAQ,KAAK,EACrC,GAAC+Y,GAAUA,EAAO,QAAQ,OAAS,MAIrB2gN,GAChB,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEA,qBAAsB,CACpB,YAAK,aAAa,SACX,MAAM,qBACf,CACF,CC1JA,MAAqBC,WAA2BzkM,EAAe,CAItD,MAAO,CACP,eAAU,UAAU,IAAI,yBAAyB,EACtD,KAAK,SAAS,cAAc,EAEtB,MAAA1mB,EAAU,IAAIsoB,GAAe,CACjC,QAAS,mBACV,EAEDtoB,EAAQ,QAAQ,cAAc,QAAQA,EAAQ,OAAO,EAEhD,gBAAW,OAAOA,EAAQ,SAAS,EAExC,MAAMorN,EAAS1jM,GAAa,CAAC,KAAM,MAAO,UAAW,aAAa,EAC7D,aAAQ,OAAO0jM,CAAM,EAETtpN,EAAAspN,EAAS55N,GAAM,CAC9BujB,GAAa,YAAYyoB,GAAe,CACtC,SAAU,CAAC,UAAU,EACrB,YAAa,gCACb,SAAWv4C,GAAW,CAEpB,KAAK,SAAS,gBAAgB,YAAYA,EAAQ,EAAI,CACxD,EACD,CACA,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAAskC,EAAO5F,GAAkB,iBAC/B,KAAK,WAAW,UAAU,UAAU,IAAI,oBAAoB,EACpD3jB,EAAA,QAAQ,OAAOupB,CAAI,EAErB,MAAA3d,EAAM,MAAM3mB,EAAgB61C,IAAoB,CAC9C,MAAAlX,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,UAAWskC,EACX,cAAe,GACf,WAAY,aACZ,OAAAuR,EACA,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEAlX,EAAc,UAAkB,cAAgBA,EAC3C,MAAC,IAAA8F,CAAO,EAAA9F,EAERp+B,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQP,EAAO,UAAU,EAC1E,GAAG,CAACO,EACF,OAII,MAAAV,EADYH,GAAuBa,CAAI,EAClB,CAAC,EACzBA,EAAK,OAAO,IACTkkC,EAAA,gBAAgB,OAAO,IAAM5kC,CAAQ,EAEtCU,EAAK,MAAOkkC,EAAI,gBAAgB,YAAcmxG,GAAgBr1I,EAAK,KAAK,EACtEkkC,EAAI,gBAAgB,OAAO5kC,EAAW,IAAMA,EAAWijC,GAAoBviC,CAAI,CAAC,CACvF,EAGQ,UAAAP,KAAU,KAAK,QACvB2mB,EAAI3mB,EAAQ,EAAI,EAGd,IAAAslB,EACJ,MAAM8gN,EAAY,IAAM,CACtB,MAAMpmO,EAASslB,EAAO,QAAQ,OAAO,SAAS,EAC9C,KAAK,SAAS,gBAAgB,YAAYtlB,EAAQ,EAAK,GAGnDwU,EAAU,KAAK,YAAcugB,GAAe,CAChD,QAAS,CAAC,CACR,KAAM,UACN,KAAM,UACN,QAASqxM,EACT,QAAS,CAAC,eAAgB,KAAK,cAAc,EAC9C,EACF,EACD5xN,EAAQ,GAAK,4BACLA,EAAA,UAAU,IAAI,aAAa,EAEnC,SAAS,eAAe,YAAY,EAAE,OAAOA,CAAO,EAE1B6iB,GAAA,CACxB,QAAS,KAAK,WAAW,UACzB,SAAW9qB,GAAM,CACN+Y,EAAAw4B,GAAUvxC,EAAE,OAAQwxC,EAAuB,EAChDz4B,IAID/Y,aAAa,YAAYA,EAAE,eAAe,EAE1CA,aAAa,aAAYA,EAAE,aAAe,IAE7CqpB,GAAarpB,EAAGiI,CAAO,EACvBof,GAAsB,YAAYpf,CAAO,EAC3C,EACA,eAAgB,KAAK,eACtB,EAED,KAAK,eAAe,IAAIvU,CAAS,EAAE,aAAew2C,GAAW,CAC3D,KAAM,CAAC,OAAAz2C,EAAQ,QAAAqmO,EAAS,qBAAAC,CAAA,EAAwB7vL,EAChD,GAAG6vL,EACD,OAGF,MAAMjwL,EAAK/R,EAAK,cAAc,kBAAkBtkC,CAAM,IAAI,EACvDqmO,EACGhwL,GACF1vB,EAAI3mB,EAAQ,EAAK,EAEXq2C,GACPA,EAAW,cAAc,QAC5B,CACD,EAED,MAAMipL,EAAa,GACnB,IAAI3uN,EAAU,GACT,gBAAW,iBAAmB,IAAM,CACpCA,IAIOA,EAAA,GACL,cAAS,gBAAgB,WAAW2zB,EAAK,kBAAmBg7L,CAAU,EAAE,KAAM/zM,GAAQ,CAC/E,UAAAvrB,KAAUurB,EAAI,QACtB5E,EAAI3mB,EAAQ,EAAI,GAGfurB,EAAI,QAAQ,OAAS+zM,GAAch7L,EAAK,oBAAsB/Y,EAAI,SACnE,KAAK,WAAW,iBAAmB,MAGrC,KAAK,WAAW,kBAAiB,CAClC,EAAE,QAAQ,IAAM,CACL5a,EAAA,GACX,GAEL,CAEA,oBAAqB,CACnB,KAAK,WAAW,UAClB,CAEA,qBAAsB,CACpB,OAAG,KAAK,aACN,KAAK,YAAY,SAGZ,MAAM,qBACf,CACF,CCnLA,SAAwB41N,GAAqBvwN,EAAa,CACxD,OAAAA,EAAMA,EAAI,CAAC,EAAE,YAAgB,EAAAA,EAAI,MAAM,CAAC,EACxCA,EAAM,QAAUA,EACTA,CACT,CCQA,MAAqBwwN,WAA4B5kM,EAAwB,CAChE,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,gBAAgB,EAC5D,KAAK,SAAS,sBAAsB,EAEpC,MAAM4B,EAAuB,2BAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,4BACP,SAAU,+BACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,SAAU,KAAK,SACf,YAAa,GACb,eAAgBj/B,EAAK,sCAAuC,CAAC8wC,GAAe,IAAM,CAChFmB,GAAa,KAAK,CACnB,EAAC,CAAC,EACH,aAAc,qCACf,CACH,CACF,CCdA,MAAqBiwL,WAAgC7kM,EAAwB,CAC3E,MAAa,KAAK8kM,EAA8B,CACzC,eAAU,UAAU,IAAI,2BAA2B,EACxD,KAAK,SAAS,kBAAkB,EAE1B,MAAAb,EAAU,MAAMjB,GAA2B,CACzC,MAAA5kO,EAAS4kO,EAAK,OAAO,SAAS,EAC9BtqM,EAAM,IAAI5B,GAAI,CAClB,MAAO,MAAM/lB,GAAc,CAAC,OAAA3S,EAAO,EACnC,SAAU,CAAC4kO,EAAK,GAAIA,EAAK,MAAM,EAAE,KAAK,KAAK,EAC3C,UAAW,GACX,WAAY3tK,GAA8B,IAAI,KAAK,KAAK,IAAI2tK,EAAK,YAAaA,EAAK,YAAY,EAAI,GAAI,CAAC,EACzG,EAEKxyN,EAAQkoB,EAAI,YAAY,KAAK,EAC7B5W,EAASkM,GAAU,CACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,GACN,OAAA5vB,CAAA,CACD,EACD,aAAM0jB,EAAO,kBACPtR,EAAA,OAAOsR,EAAO,IAAI,EAExB4W,EAAI,UAAU,QAAQ,KAAO,GAAKsqM,EAAK,KACnCtqM,EAAA,UAAU,QAAQ,OAAS,GAAKt6B,EAEpCs6B,EAAI,SAAS,YAAc,CAACsqM,EAAK,OAAQA,EAAK,QAASA,EAAK,QAAQ,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,EAExFtqM,CAAA,EAGT,CACQ,MAAAvf,EAAU,IAAIsoB,GAAe,CACjC,QAAS,4BACV,EAEK0iM,EAAevsM,GAAO,qCAAsC,CAAC,KAAM,OAAQ,KAAM,0BAA0B,EAEjH3c,EAAiBkpN,EAAc,SAAW,CACxC,MAAMz5L,GAAkB,CACtB,mBAAoB,wBACpB,OAAQ,CACN,QAAS,aACT,SAAU,EACZ,EACD,EAEc/b,GAAiB,CAACw1M,CAAY,EAAG,EAAI,EACpD,KAAK,SAAS,wBAAwB,uBAAuB,EAAE,KAAK,IAAM,CACxE,KAAK,MAAM,EACZ,CACA,GAAC,eAAgB,KAAK,cAAe,GAEhChrN,EAAA,QAAQ,OAAOgrN,CAAY,EAE9B,gBAAW,OAAOhrN,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAIsoB,GAAe,CACjC,KAAM,mBACN,QAAS,0BACV,EAEKrJ,EAAO,MAAM,QAAQ,IAAI0sM,EAAS,IAAIb,CAAO,CAAC,EAC5C9qN,EAAA,QAAQ,OAAO,GAAGif,EAAK,IAAKM,GAAQA,EAAI,SAAS,CAAC,EAE1D,IAAI2C,EAAajD,EAAK,OACLnd,EAAA9B,EAAQ,QAAS,MAAMxO,GAAM,CAC5C,MAAM+tB,EAAM/U,EAAgBhZ,EAAE,OAAQ,KAAK,EAC3C,GAAG,CAAC+tB,EACF,OAGF,MAAMgS,GAAkB,CACtB,mBAAoB,0BACpB,oBAAqB,CAAC,MAAM35B,GAAc,CAAC,OAAQ2nB,EAAI,QAAQ,OAAO,SAAU,EAAC,CAAC,EAClF,OAAQ,CACN,QAAS,aACT,SAAU,EACZ,EACD,EAEK,MAAA0kE,EAAO1kE,EAAI,QAAQ,KACrBA,EAAA,UAAU,IAAI,aAAa,EAC/B,KAAK,SAAS,wBAAwB,sBAAsB0kE,CAAI,EAAE,KAAK,IAAM,CACvE,EAAE/hE,EAGJ3C,EAAI,OAAO,EAFX,KAAK,MAAM,CAGb,CACD,CACA,GAAC,eAAgB,KAAK,cAAe,GAEnC,gBAAW,OAAOvf,EAAQ,SAAS,CAC1C,CACF,CACF,CCzGA,MAAqB4rN,WAA2B/kM,EAAwB,CAC/D,MAAO,CACZ,KAAK,UAAU,UAAU,IAAI,cAAe,eAAe,EAC3D,KAAK,SAAS,SAAS,EAEvB,MAAM4B,EAAuB,qBAC7B,IAAIy+L,GAAe,CACjB,IAAK,KACL,MAAO,cACP,SAAU,uBACV,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,eAAgB,CAAC,uCAAwC,uCAAuC,EAChG,SAAU,KAAK,WACf,UAAW,CAACm+L,GAAY,MAAM,EAC9B,SAAU,KAAK,SAChB,CACH,CACF,CCdA,MAAqBiF,WAA8BhlM,EAEhD,CACD,MAAa,KAAKusI,EAAsC,CACtD,KAAK,UAAU,UAAU,IAAI,cAAe,kBAAkB,EAC9D,KAAK,SAAS,iBAAiB,EAE/B,MAAM3qI,EAAUj/B,EAAK,uBAAwB,CAAC8wC,GAAe,IAAM,CACjEmB,GAAa,KAAK,CACnB,EAAC,CAAC,EAGGqwL,EAAc,EADF,MAAM,KAAK,SAAS,WAAW,aAAa,GAC/B,wDAEzBzB,EAAiB,IAAInD,GAAe,CACxC,IAAK,KACL,MAAO,uBACP,SAAU,CAACz+L,EAASA,EAASA,CAAO,EACpC,aAAc,GACd,SAAU,KAAK,WACf,SAAU,KAAK,SACf,UAAW,CAACm+L,GAAY,MAAM,EAC9B,qBAAsB,GACtB,YAAAkF,EACA,eAAgBrjM,EAChB,aAAc,wCACd,YAAa2qI,EAAc,OAAO,qCAAuCwzD,GAAY,SAAWA,GAAY,UAC7G,EAEI,mBAAc,iBAAiB,UAAW,IAAM,CAC7C,MAAAtvL,EAAO+yL,EAAe,OAASzD,GAAY,SACjD,GAAG,CAAC,CAACxzD,EAAc,OAAO,uCAAyC97H,EACjE,OAGF,MAAM1mC,EAAU,KAAK,SAAS,kBAAkB,yBAAyB,CACvE,EAAG,wBACH,OAAQ,CACN,GAAGwiK,EAAc,OACjB,qCAAsC97H,GAAQ,MAChD,EACD,EACI,0BAAc,cAAc,UAAW1mC,CAAO,EAC5CA,CAAA,CACR,CACH,CACF,CCjBA,MAAqBm7N,WAAiCllM,EAAwB,CAO5E,OAAc,YAAYmlM,EAAyB,CAC1C,OACL,UAAWA,EAAQ,SAAS,WAAW,aAAa,EACpD,cAAeA,EAAQ,SAAS,kBAAkB,yBAAyB,EAC3E,gBAAiBA,EAAQ,SAAS,WAAW,UAAU,4BAA4B,EACnF,kBAAmBA,EAAQ,SAAS,wBAAwB,qBAAqB,EAErF,CAEA,MAAa,KAAKxkO,EAA+D,CAC1E,eAAU,UAAU,IAAI,sBAAsB,EACnD,KAAK,SAAS,iBAAiB,EAE/B,MAAMykO,EAAwB,UACxB36N,EAA2B,GAEjC,CACQ,MAAA0O,EAAU,IAAIsoB,GAAe,CAAC,YAAa,GAAM,QAAS,eAAe,EAE3E,IAAA4jM,EACE,MAAAC,EAAkB,IAAIxuM,GAAI,CAC9B,KAAM,aACN,aAAc,eACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,MAAM1tM,EAAM,KAAK,OAAO,UAAU4sM,EAAkB,EACpD5sM,EAAI,QAAU2tM,EACd3tM,EAAI,KAAK,CACX,EACA,eAAgB,KAAK,eACtB,EACD4tM,EAAgB,QAAU,GAEtB,IAAA35K,EACJ,MAAM45K,EAA4D,CAChE,KAAM,OACN,aAAc,sBACd,gBAAiBH,EACjB,UAAYz6N,GAAa,CACnB,IAAA+sB,EACDi0B,EAAc,OAAO,aAChBj0B,EAAA,KAAK,OAAO,UAAUirM,EAAsC,EAC1Dh3K,EAAc,2BAChBj0B,EAAA,KAAK,OAAO,UAAU8pM,EAA0C,EACtE9pM,EAAI,MAAQi0B,EAAc,0BAC1Bj0B,EAAI,OAAS,EACbA,EAAI,QAAU,GACT,cAAS,gBAAgB,uBAExBA,EAAA,KAAK,OAAO,UAAUurM,EAAyB,EAGvDvrM,EAAI,MAAQi0B,EACZj0B,EAAI,KAAK,CACX,EACA,eAAgB,KAAK,gBAGjB8tM,EAAe,IAAI1uM,GAAIyuM,CAAmB,EAChDC,EAAa,QAAU,GAEvB,MAAMC,EAAoB,KAAK,kBAAoB,IAAI3uM,GAAI,CACzD,KAAM,iBACN,aAAc,gBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,MAAM1tM,EAAM,KAAK,OAAO,UAAUssM,EAAoB,EACtDtsM,EAAI,eAAiB,KAAK,eACtBA,EAAA,cAAc,iBAAiB,UAAW,IAAM,CAClD,KAAK,qBAAqB,GACzB,CAAC,KAAM,GAAK,EACfA,EAAI,KAAK,CACX,EACA,eAAgB,KAAK,eACtB,EACD+tM,EAAkB,QAAU,GAE5B,MAAMC,EAAc,KAAK,YAAc,IAAI5uM,GAAI,CAC7C,KAAM,UACN,aAAc,mBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,MAAM1tM,EAAM,KAAK,OAAO,UAAUmtM,EAAuB,EACrDntM,EAAA,cAAc,iBAAiB,UAAW,IAAM,CAClD,KAAK,qBAAqB,EAC3B,EACGA,EAAA,KAAK,KAAK,QAAQ,CACxB,EACA,eAAgB,KAAK,eACtB,EACDguM,EAAY,QAAU,GAEdvsN,EAAA,QAAQ,OAAOmsN,EAAgB,UAAWE,EAAa,UAAWC,EAAkB,UAAWC,EAAY,SAAS,EACvH,gBAAW,OAAOvsN,EAAQ,SAAS,EAElC,MAAAwsN,EAAmBpoM,GAAkB,CACtCA,EACD9nB,GAAe6vN,EAAgB,SAAU3iO,EAAK,sCAAuC,CAAC46B,CAAK,CAAC,CAAC,EAE7F9nB,GAAe6vN,EAAgB,SAAU3iO,EAAK,eAAgB,CAAC46B,CAAK,CAAC,CAAC,CACxE,EAGF,KAAK,eAAe,IAAIl/B,CAAS,EAAE,aAAc,IAAM,CAMvCunO,GAAA,CACf,EAED,MAAMA,EAAgB,IAAM,CAC1B,KAAK,SAAS,gBAAgB,aAAa,KAAMj8M,GAAQ,CACvD27M,EAAgB,QAAU,GAC1BK,EAAgBh8M,EAAI,KAAK,EACzB07M,EAAiB17M,EAAI,QACtB,GAGWi8M,IAEd,KAAK,SAAS,gBAAgB,WAAW,KAAM57N,GAAU,CACvC2hD,EAAA3hD,EACDyL,GAAA+vN,EAAa,SAAU7iO,EAAKqH,EAAM,OAAO,aAAe,6BAA+B,6BAA6B,CAAC,EACpIw7N,EAAa,QAAU,GAGxB,EAED,KAAK,qBAAqB,EAC1B/6N,EAAS,KAAK,KAAK,qBAAqB9J,EAAE,iBAAiB,CAAC,CAC9D,CAEA,CACQ,MAAAM,EAA0B,MAAMrC,GAAgB,0BAChDua,EAAU,IAAIsoB,GAAe,CAAC,KAAM,eAAgB,QAASxgC,EAA0B,wBAA0B,0BAA0B,EAEzIkY,EAAA,QAAQ,UAAU,IAAI,8BAA8B,EAI5D,MAAM0sN,EAED,GAECC,EAA2B,MAC/Bj2H,EACAz7F,IACG,CACG,MAAAm4J,EAAgB,MAAM5rK,EAAE,cACxB+2B,EAAM,KAAK,OAAO,UAAUm4E,CAAW,EAC7Cn4E,EAAI,KAAK60I,CAAa,EACtB70I,EAAI,cAAc,iBAAiB,UAAYy8G,GAAY,CACzDxzI,EAAE,cAAgBwzI,EAClB4xF,EAAiB3xN,CAAG,EACrB,GAGG4xN,EAAsBH,EAAW,2BAAgC,IAAI/uM,GAAI,CAC7E,aAAc,oBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUtE,EAAwB,EAAE,KAAK,CACvD,EACA,eAAgB,KAAK,eACtB,EAEKmF,EAAkBJ,EAAW,+BAAoC,IAAI/uM,GAAI,CAC7E,aAAc,gBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACfU,EAAyBxC,GAAuB,gCAAgC,CAClF,EACA,eAAgB,KAAK,eACtB,EAEK4C,EAAqBL,EAAW,4BAAiC,IAAI/uM,GAAI,CAC7E,aAAc,2BACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUxB,EAAyB,EAAE,KAAK,CACxD,EACA,eAAgB,KAAK,eACtB,EAEKuC,EAAWN,EAAW,qBAA0B,IAAI/uM,GAAI,CAC5D,aAAc,iBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUL,EAAkB,EAAE,KAAK,CACjD,EACA,eAAgB,KAAK,eACtB,EAEKqB,EAAUP,EAAW,yBAA8B,IAAI/uM,GAAI,CAC/D,aAAc,eACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUrB,EAAkB,EAAE,KAAK,CACjD,EACA,eAAgB,KAAK,eACtB,EAEKsC,EAAiBR,EAAW,wBAA6B,IAAI/uM,GAAI,CACrE,aAAc,uBACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUvB,EAA4B,EAAE,KAAK,CAC3D,EACA,eAAgB,KAAK,eACtB,EAEKyC,EAAmBT,EAAW,0BAA+B,IAAI/uM,GAAI,CACzE,aAAc,cACd,gBAAiBsuM,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUtB,EAAwB,EAAE,KAAK,CACvD,EACA,eAAgB,KAAK,eACtB,EAEKyC,EAAsBx2N,GAAyB,CAC7C,MAAAnN,EAAW,SAAS,yBACpB0kB,EAAOjoB,GAAK,OAAQ,sBAAsB,EAChDuD,EAAS,OAAOD,EAAKoN,CAAO,EAAGuX,CAAI,EACnC,MAAM42M,EAAY,IAAM,CACtB52M,EAAK,UAAU,OAAO,OAAQ,CAACjpB,EAAU,OAAO,GAExC,OAAA6/N,IACV,KAAK,eAAe,IAAI7/N,CAAS,EAAE,iBAAkB6/N,CAAS,EACvDt7N,CAAA,EAGL,IAAA4jO,EACAvlO,IAAyBulO,EAAYX,EAAW,6BAAkC,IAAI/uM,GAAI,CAC5F,MAAOyvM,EAAmB,2BAA2B,EACrD,gBAAiBnB,EACjB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUR,EAAmB,EAAE,KAAK,CAClD,EACA,eAAgB,KAAK,eACtB,GAEG,IAAA6B,EACAxlO,IAAyBwlO,EAAcZ,EAAW,qCAA0C,IAAI/uM,GAAI,CACtG,MAAOyvM,EAAmB,sBAAsB,EAChD,gBAAiBnB,EACjB,UAAW,IAAM,CACfU,EAAyBd,GAAuB,sCAAsC,CACxF,EACA,eAAgB,KAAK,eACtB,GAEK,MAAAe,EAAoB3xN,GAAgB,CAClC,MAAAskB,EAAMmtM,EAAWzxN,CAAG,EAC1B,GAAG,CAACskB,EACF,OAGF,MAAM9R,EAA2C,CAC/C,CAACm5M,GAAY,SAAS,EAAG,qCACzB,CAACA,GAAY,QAAQ,EAAG,uCACxB,CAACA,GAAY,MAAM,EAAG,oCAGxB,GAAG,CAAC3rN,EAAI,WAAW,cAAc,EAAG,CAChCzT,EAAA,cAAc,KAAM4rK,GAAkB,CACtC,MAAMx8J,EAAUw8J,EAAc,OAAO,qCAAuC,6BAA+B3lJ,EAAIm5M,GAAY,SAAS,EACpIrnM,EAAI,SAAS,gBAAgB/1B,EAAKoN,CAAO,CAAC,EAC3C,EACD,MACF,CAEA,KAAK,SAAS,kBAAkB,WAAWqE,CAA2B,EAAE,KAAM6rN,GAAU,CAChF,MAAAxkN,EAAUukN,GAAuBC,CAAK,EACtClwN,EAAU6W,EAAInL,EAAQ,IAAI,EAC1BirN,EAAiBjrN,EAAQ,cAAc,MAAM,OAASA,EAAQ,cAAc,MAAM,OAClFkrN,EAAclrN,EAAQ,WAAW,MAAM,OAASA,EAAQ,WAAW,MAAM,OAEzE9X,EAAIhB,EAAKoN,CAAO,EAClB2oB,EAAA,SAAS,gBAAgB/0B,CAAC,GAC3B+iO,GAAkBC,IACnBjuM,EAAI,SAAS,OAAO,KAAK,CAAC,CAACguM,EAAgBC,EAAc,IAAMA,EAAc,CAAC,EAAE,OAAO,OAAO,EAAE,KAAK,IAAI,CAAC,GAAG,CAC/G,CACD,GAGKxtN,EAAA,QAAQ,OAAO,GAAG,CACxB6sN,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAE,EACAC,CAAA,EACA,OAAO,OAAO,EAAE,IAAK/tM,GAAQA,EAAI,SAAS,CAAC,EACxC,gBAAW,OAAOvf,EAAQ,SAAS,EAExC,UAAU/E,KAAOyxN,EACfE,EAAiB3xN,CAA8B,EAGvC/V,EAAA,iBAAiB,iBAAmBw2C,GAAW,CACvDkxL,EAAiBpB,GAAqB9vL,EAAO,IAAI,CAAC,CAAQ,EAC3D,CACH,CAEA,CACQ,MAAA17B,EAAU,IAAIsoB,GAAe,CAAC,KAAM,0BAA2B,QAAS,qBAAqB,EAE7FpT,EAAgB,IAAIC,GAAc,CAAC,KAAM,gBAAiB,GAC1DoK,EAAM,IAAI5B,GAAI,CAClB,cAAAzI,CAAA,CACD,EAEOlV,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAEpC,IAAI/qB,EAAkBi5N,EACjB,mBAAc,iBAAiB,UAAW,SAAW,CAErD,GADSA,EAAA,GACT,EAAAj5N,IAAY,QAAaA,IAAY0gB,EAAc,SAC/C,YAAK,SAAS,kBAAkB,yBAAyB,CAC9D,EAAG,wBACH,OAAQ,CACN,IAAI,MAAM1tB,EAAE,eAAe,OAC3B,sCAAuC0tB,EAAc,SAAW,MAClE,EACD,GACA,CAAC,KAAM,GAAK,EAET,MAAAtkB,EAAU,QAAQ,IAAI,CAC1BpJ,EAAE,UACFA,EAAE,aACH,GAAE,KAAK,CAAC,CAACk+C,EAAWp0B,CAAQ,IAAM,CACjC,GAAGm8M,EACD,OAGI,MAAAC,EAAmBr5N,GAAuB,CACtC2L,EAAA,UAAU,UAAU,OAAO,OAAQ,CAAC3L,GAAa,CAACqxC,EAAU,6BAA6B,GAGnG,KAAK,eAAe,IAAIxgD,CAAS,EAAE,iBAAkBwoO,CAAe,EACpEA,EAAgBxoO,EAAU,OAAO,EAEvBsP,EAAA,CAAC,CAAC8c,EAAS,OAAO,sCAE5B4D,EAAc,iBAAiB1gB,CAAO,EACvC,EAEDlD,EAAS,KAAKV,CAAO,EAEhB,gBAAW,OAAOoP,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,2BAA4B,QAAS,mCAAmC,EAC1GtoB,EAAA,UAAU,UAAU,IAAI,MAAM,EAEtC,MAAMkV,EAAgB,IAAIC,GAAc,CAAC,KAAM,kCAAmC,GAC5EoK,EAAM,IAAI5B,GAAI,CAClB,cAAAzI,CAAA,CACD,EAEOlV,EAAA,QAAQ,OAAOuf,EAAI,SAAS,EAEhC,IAAA/qB,EACC,mBAAc,iBAAiB,UAAW,IAAM,CACnD,GAAGA,IAAY,OAAW,OACpB,MAAAm5N,EAAWpuM,EAAI,cAAc,QAEnC,GADkBouM,IAAan5N,EAK/B,OAAO,KAAK,SAAS,WAAW,UAAU,6BAA8B,CACtE,kBAAmBm5N,CAAA,CACpB,GACA,CAAC,KAAM,GAAK,EAEf,MAAM/8N,EAAUpJ,EAAE,gBAAgB,KAAM8pB,GAAa,CAC/CA,EAAS,OAAO,uBAIV9c,EAAA,CAAC,CAAC8c,EAAS,OAAO,kBAC5B4D,EAAc,iBAAiB1gB,CAAO,EAC9BwL,EAAA,UAAU,UAAU,OAAO,MAAM,GAC1C,EAED1O,EAAS,KAAKV,CAAO,EAEhB,gBAAW,OAAOoP,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,kBAAmB,QAAS,2BAA2B,EAE3FslM,EAAe,IAAM,CACzB,MAAM5oO,EAAoC,CACxC,aAAc,iCACd,mBAAoB,gCACpB,OAAQ,CACN,QAAS,OACX,EACA,WAAY,CAAC,CACX,KAAM,uBACN,QAAS,IACR,CACD,KAAM,sBACN,QAAS,GACV,GAGeusC,GAAAvsC,CAAO,EAAE,KAAK,IAAM,CAC9B,MAAC46C,EAAMiuL,CAAO,EAAI7oO,EAAQ,WAAW,IAAKkZ,GAAMA,EAAE,cAAc,OAAO,EACvE0gB,EAASpJ,GAAiB,CAACihD,CAAW,EAAG,EAAI,EACnD,KAAK,SAAS,mBAAmB,eAAe72B,EAAMiuL,CAAO,EAAE,KAAK,IAAM,CACrE,CAACjuL,GAAQ,CAACiuL,IAINjvM,IACEnH,GAAA,CACP,YAAamoB,GAAQiuL,EAAU,wCAA2CjuL,EAAO,qCAAuC,oCACzH,GACF,GACAl5B,EAAI,GAGH+vD,EAAch4C,GAAO,8BAA+B,CAAC,KAAM,SAAU,KAAM,uBAAuB,EACxG,KAAK,eAAe,IAAIg4C,CAAW,EAAE,QAASm3J,CAAY,EAClD5tN,EAAA,QAAQ,OAAOy2D,CAAW,EAE7B,gBAAW,OAAOz2D,EAAQ,SAAS,CAC1C,CAEA,CACE,MAAMA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,aAAc,GAElDsmK,EAAgB,IAAM,CACZ75K,GAAa,YAAYD,GAAW,sBAAuB,CACvE,QAAS,CAAC,CACR,QAAS,SACT,SAAU,IAAM,CACd,MAAM8J,EAASpJ,GAAiB,CAACy/H,CAAY,EAAG,EAAI,EACpD,KAAK,SAAS,iBAAiB,eAAe,EAAE,KAAK,IAAM,CAClDr2H,GAAA,CACR,CACH,EACA,SAAU,GACX,EACD,aAAc,6BACd,mBAAoB,wBACrB,EAEK,KAAK,GAGPq2H,EAAex2H,GAAO,8BAA+B,CAAC,KAAM,SAAU,KAAM,2BAA2B,EAC7G,KAAK,eAAe,IAAIw2H,CAAY,EAAE,QAAS25C,CAAa,EACpD5uL,EAAA,QAAQ,OAAOi1I,CAAY,EAc9B,gBAAW,OAAOj1I,EAAQ,SAAS,CAC1C,CAcO,eAAQ,IAAI1O,CAAQ,CAC7B,CAEO,sBAAuB,CACrB,YAAK,SAAS,WAAW,UAAU,2BAA2B,EAAE,KAAMw8N,GAAU,CACrF,KAAK,kBAAkB,QAAU,GACjC,KAAK,eAAiBA,EAAM,eACtB9nO,GAAA,KAAK,kBAAkB,SAAU,kBAAmB,CAAC,KAAK,eAAe,MAAM,CAAC,EACvF,CACH,CAEO,qBAAqB4K,EAAU,KAAK,SAAS,wBAAwB,uBAAwB,CAC3F,OAAAA,EAAQ,KAAMm6N,GAAmB,CACtC,KAAK,YAAY,QAAU,GAC3B,KAAK,SAAWA,EACV/kO,GAAA,KAAK,YAAY,SAAU,mBAAoB,CAAC,KAAK,SAAS,MAAM,CAAC,EACtE,iBAAY,UAAU,UAAU,OAAO,OAAQ,CAAC,KAAK,SAAS,MAAM,EAC1E,CACH,CACF,CCniBA,MAAqB+nO,GAArB,MAAqBA,EAAY,CAyB/B,aAAc,CAhBd,KAAQ,IAAM,EACd,KAAQ,WAAa,IACrB,KAAQ,UAAY,GACpB,KAAQ,MAAQ,EAChB,KAAQ,SAOJ,GAoGJ,KAAQ,YAAc,IAAM,CAC1B,SAAS,gBAAgB,MAAM,OAAS,KAAK,SAAS,WAAW,MAAM,OAAS,YAGlF,KAAQ,UAAY,IAAM,CACxB,SAAS,gBAAgB,MAAM,OAAS,KAAK,SAAS,WAAW,MAAM,OAAS,IAnG3E,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAIA,GAAY,UAAU,EAEnD,MAAM5+N,EAAO;AAAA,oBACG4+N,GAAY,WAAa,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAgB7BA,GAAY,WAAa,UAAU,IAAIA,GAAY,WAAa,cAAc;AAAA;AAAA;AAAA;AAAA,oBAIhFA,GAAY,WAAa,UAAU;AAAA,sBACjCA,GAAY,WAAa,eAAe;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,wBAatCA,GAAY,WAAa,UAAU,IAAIA,GAAY,WAAa,uBAAuB;AAAA;AAAA;AAAA;AAAA;AAAA,MAO3G,KAAK,UAAU,UAAY5+N,EAEtB,cAAS,IAAM,KAAK,UAAU,kBACnC,KAAK,SAAS,WAAa,KAAK,SAAS,IAAI,iBAC7C,KAAK,SAAS,WAAa,KAAK,SAAS,IAAI,kBAAkB,kBAE/D,KAAK,SAAS,QAAU,KAAK,SAAS,IAAI,mBAE1C,KAAK,SAAS,IAAM,KAAK,SAAS,QAAQ,kBAC1C,KAAK,SAAS,WAAa,KAAK,SAAS,IAAI,iBAExC,mBAAgB,IAAIk3B,GAAW,CAAC,UAAW,GAAM,MAAO,uBAAuB,EAC/E,mBAAgB,IAAIA,GAAW,CAAC,UAAW,GAAM,MAAO,uBAAuB,EAE9E,MAAA+xI,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAY21D,GAAY,WAAa,UAC5C31D,EAAO,OAAO,KAAK,cAAc,UAAW,KAAK,cAAc,SAAS,EACnE,eAAU,OAAOA,CAAM,EAE5B,KAAK,cAAc,MAAM,iBAAiB,QAAS,IAAM,CACnD,IAAAl8J,EAAQ,KAAK,cAAc,MAAM,QAAQ,KAAM,EAAE,EAAE,MAAM,EAAG,CAAC,EAE3D,MAAApM,EAAQoM,EAAM,MAAM,eAAe,EACnC6zC,EAAQjgD,GAASA,EAAM,CAAC,EAAE,SAAWoM,EAAM,QAAU,CAAa,GAAG,SAASA,EAAM,MAAM,EAChG,KAAK,cAAc,SAAS6zC,EAAQlhB,GAAW,QAAUA,GAAW,KAAK,EAEzE3yB,EAAQ,IAAMA,EACT,mBAAc,iBAAiBA,CAAK,EAEtC6zC,GACI,cAAS7zC,EAAO,GAAO,EAAI,CAClC,CACD,EAGD,MAAM8xN,EAAY,wHAClB,KAAK,cAAc,MAAM,iBAAiB,QAAS,IAAM,CACvD,MAAMl+N,EAAQ,KAAK,cAAc,MAAM,MAAMk+N,CAAS,EACtD,KAAK,cAAc,SAASl+N,EAAQ++B,GAAW,QAAUA,GAAW,KAAK,EAEtE/+B,GACD,KAAK,SAASs4J,GAAW,CAACt4J,EAAM,CAAC,EAAG,CAACA,EAAM,CAAC,EAAG,CAACA,EAAM,CAAC,CAAC,EAAG,GAAM,EAAK,CACxE,CACD,EAED,KAAK,mBAAmB,EACxB,KAAK,mBAAmB,CAC1B,CAUQ,oBAAqB,CACP2wC,GAAA,KAAK,SAAS,IAAY,IAAM,CAClD,KAAK,YAAY,EACjB,KAAK,QAAU,KAAK,SAAS,IAAI,sBAAsB,CAEzD,EAAIpW,GAAQ,CACV,KAAK,kBAAkBA,EAAI,EAAGA,EAAI,CAAC,GAClC,IAAM,CACP,KAAK,UAAU,EAChB,CACH,CAEQ,oBAAqB,CACPoW,GAAA,KAAK,SAAS,IAAY,IAAM,CAClD,KAAK,YAAY,EACjB,KAAK,QAAU,KAAK,SAAS,IAAI,sBAAsB,CAEzD,EAAIpW,GAAQ,CACL,gBAAWA,EAAI,CAAC,GACpB,IAAM,CACP,KAAK,UAAU,EAChB,CACH,CAEO,SAASn9B,EAA2B+gO,EAAiB,GAAMC,EAAiB,GAAM,CACvF,GAAGhhO,IAAU,OACHA,EAAA,CACN,EAAG,EACH,EAAG,IACH,EAAG,GACH,EAAG,WAEG,OAAOA,GAAW,SACvB,GAAAA,EAAM,CAAC,IAAM,IACdA,EAAQU,GAAWV,CAAK,MACnB,CACC,MAAAihO,EAAMjhO,EAAM,MAAM,UAAU,EAC1BA,EAAAk7J,GAAW,CAAC+lE,EAAI,CAAC,EAAG,CAACA,EAAI,CAAC,EAAG,CAACA,EAAI,CAAC,EAAGA,EAAI,CAAC,IAAM,OAAY,EAAI,CAACA,EAAI,CAAC,CAAC,CAClF,CAIF,KAAK,QAAU,KAAK,SAAS,IAAI,sBAAsB,EAEvD,MAAMC,EAAO,KAAK,QAAQ,MAAQ,IAAMlhO,EAAM,EACxCmhO,EAAW,IAAOnhO,EAAM,GAAK,IAAMA,EAAM,EAAI,GAAM,IACnDohO,EAAO,KAAK,QAAQ,OAAS,IAAMD,EAEpC,uBAAkB,KAAK,QAAQ,KAAOD,EAAM,KAAK,QAAQ,IAAME,EAAM,EAAK,EAG/E,KAAK,QAAU,KAAK,SAAS,IAAI,sBAAsB,EAEjD,MAAAC,EAAarhO,EAAM,EAAI,IACvBshO,EAAO,KAAK,QAAQ,KAAO,KAAK,QAAQ,MAAQD,EAEjD,gBAAWC,EAAM,EAAK,EAG3B,KAAK,IAAMthO,EAAM,EACjB,KAAK,WAAaA,EAAM,EACxB,KAAK,UAAYA,EAAM,EACvB,KAAK,MAAQA,EAAM,EAEd,kBAAa+gO,EAAgBC,CAAc,CAClD,CAEO,iBAAoC,CACnC,MAAAO,EAAYC,GAAW,KAAK,IAAK,KAAK,WAAY,KAAK,UAAW,KAAK,KAAK,EAC5EC,EAAOC,GAAWH,CAAS,EAC3BlhO,EAAMohO,EAAK,MAAM,EAAG,EAAE,EAErB,OACL,IAAK,OAAO,KAAK,GAAG,KAAK,KAAK,UAAU,MAAM,KAAK,SAAS,KAC5D,IAAK,OAAOF,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,IAC1D,IAAAlhO,EACA,KAAM,QAAQ,KAAK,GAAG,KAAK,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,KAAK,KAAK,IAC9E,KAAM,QAAQkhO,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,KAAKA,EAAU,CAAC,CAAC,IAC7E,KAAAE,EACA,UAAAF,CAAA,CAEJ,CAEO,aAAaR,EAAiB,GAAMC,EAAiB,GAAM,CAC1D,MAAAhhO,EAAQ,KAAK,kBACnB,KAAK,SAAS,WAAW,eAAe,KAAM,OAAQA,EAAM,GAAG,EAE5D+gO,IACI,mBAAc,iBAAiB/gO,EAAM,GAAG,EACxC,mBAAc,SAAS2hC,GAAW,OAAO,GAG7Cq/L,IACI,mBAAc,iBAAiBhhO,EAAM,UAAU,MAAM,EAAG,EAAE,EAAE,KAAK,IAAI,CAAC,EACtE,mBAAc,SAAS2hC,GAAW,OAAO,GAG7C,KAAK,UACN,KAAK,SAAS3hC,CAAK,CAEvB,CAEQ,WAAW8tB,EAAe0gB,EAAS,GAAM,CAGzC,MAAAn5B,EAFSke,GAAMzF,EAAQ,KAAK,QAAQ,KAAM,EAAG,KAAK,QAAQ,KAAK,EAE3C,KAAK,QAAQ,MACvC,KAAK,IAAM,KAAK,MAAM,IAAMzY,CAAQ,EAEpC,MAAMynJ,EAAO,QAAQ,KAAK,GAAG,gBAAgB,KAAK,KAAK,IAEvD,KAAK,SAAS,WAAW,eAAe,KAAM,IAAMznJ,EAAW,IAAO,GAAG,EACzE,KAAK,SAAS,WAAW,eAAe,KAAM,OAAQynJ,CAAI,EAE1D,KAAK,SAAS,WAAW,iBAAiB,eAAe,KAAM,aAAcA,CAAI,EAE9EtuH,GACD,KAAK,aAAa,CAEtB,CAEQ,kBAAkB1gB,EAAeC,EAAeygB,EAAS,GAAM,CAC/D,MAAA85C,EAAO,KAAK,QAAQ,MACpB2gI,EAAO,KAAK,QAAQ,OAEpB0Y,EAASpuM,GAAMzF,EAAQ,KAAK,QAAQ,KAAM,EAAGw6D,CAAI,EACjDs5I,EAASruM,GAAMxF,EAAQ,KAAK,QAAQ,IAAK,EAAGk7L,CAAI,EAEhD4Y,EAAOF,EAASr5I,EAAO,IACvBw5I,EAAOF,EAAS3Y,EAAO,IAEvB8Y,EAAa,KAAK,SAAS,WACjCA,EAAW,eAAe,KAAM,IAAKF,EAAO,GAAG,EAC/CE,EAAW,eAAe,KAAM,IAAKD,EAAO,GAAG,EAE/C,MAAME,EAAazuM,GAAMsuM,EAAM,EAAG,GAAG,EAE/BI,EAAa,IAAMD,EAAa,EAChCE,EAAa,IAAM3uM,GAAMuuM,EAAM,EAAG,GAAG,EAErCK,EAAY5uM,GAAM2uM,EAAa,IAAMD,EAAY,EAAG,GAAG,EAE7D,KAAK,WAAaD,EAClB,KAAK,UAAYG,EAEd3zL,GACD,KAAK,aAAa,CAEtB,CACF,EAnREqyL,GAAe,WAAa,eAD9B,IAAqBuB,GAArBvB,GCKA,MAAqBwB,WAA8B7oM,EAAe,CAAlE,kCA4FE,KAAQ,YAAc,CAACn5B,EAAaiiO,EAAoB,KAAS,CAC/D,GAAGA,EACI,iBAAY,SAASjiO,CAAG,MACxB,CACC,MAAA46J,EAAOsnE,GAAWliO,CAAG,EACrB+jB,EAAW,KAAK,MAAM,SACtB04I,EAAO9B,GAAkBC,CAAI,EAE7BO,EAAuC,CAC3C,EAAG,kBACH,GAAI,EACJ,OAAQ,CAAC,EACT,SAAU,CACR,EAAG,oBACH,iBAAkB,SAASn7J,EAAI,MAAM,CAAC,EAAG,EAAE,EAC3C,OAAQ,CAAC,CACX,GAGF+jB,EAAS,UAAYo3I,EACrBp3I,EAAS,kBAAoB04I,EAE7B,KAAK,SAAS,gBAAgB,YAAY,WAAY9kK,EAAU,QAAQ,EAExEmkC,GAAa,kBAAkB,CAC7B,eAAgB,GACjB,EACD,KAAK,UAAU,CACjB,GAGM,mBAAiBn8B,GAA4B,CAC9C,gBAAWA,EAAM,IAAK,EAAK,EAClC,CAvHA,MAAO,CACL,KAAK,UAAU,UAAU,IAAI,uBAAwB,4BAA4B,EACjF,KAAK,SAAS,UAAU,EAEnB,WAAQwR,GAAgB,WAE7B,MAAMsB,EAAU,IAAIsoB,GAAe,EAAE,EAChC,iBAAc,IAAIgnM,GAEvBtvN,EAAQ,QAAQ,OAAO,KAAK,YAAY,SAAS,EAE5C,gBAAW,OAAOA,EAAQ,SAAS,EAExC,MAAM0vN,EAAc,IAAIpnM,GAAe,EAAE,EAEnCumE,EAAO,KAAK,KAAO,SAAS,cAAc,KAAK,EAChDA,EAAA,UAAU,IAAI,MAAM,EAEV,CACb,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,UACA,WAGK,QAAS3hG,GAAU,CAClB,MAAA+B,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,WAAW,EACzBA,EAAA,QAAQ,MAAQ/B,EAAM,YAAY,EAGjC,MAAAmK,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EACrCA,EAAM,MAAM,gBAAkBnK,EAE9B+B,EAAK,OAAOoI,CAAK,EACjBw3F,EAAK,OAAO5/F,CAAI,EACjB,EAEgB6S,EAAA+sF,EAAOr9F,GAAM,CAC5B,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,WAAW,EACpD,GAAG,CAAC+Y,GAAUA,EAAO,UAAU,SAAS,QAAQ,EAC9C,OAGI,MAAArd,EAAQqd,EAAO,QAAQ,MACzBrd,GAIJ,KAAK,WAAWA,CAAK,CACpB,GAAC,eAAgB,KAAK,cAAe,GAE5BwiO,EAAA,QAAQ,OAAO7gI,CAAI,EAC1B,gBAAW,OAAO6gI,EAAY,SAAS,EAE5C,KAAK,WAAaxoK,GAAS,KAAK,YAAa,GAAI,EAAI,CACvD,CAEQ,WAAY,CAClB,MAAM90B,EAAS,KAAK,KAAK,cAAc,SAAS,EAG1CllC,EAFa,KAAK,MAAM,SACD,UACL,SAAS,iBAC3Bqd,EAASrd,EAAQ,KAAK,KAAK,cAAc,0BAA0BA,CAAK,IAAI,EAAI,KACnFklC,IAAW7nB,IAIX6nB,GACMA,EAAA,UAAU,OAAO,QAAQ,EAG/B7nB,GACMA,EAAA,UAAU,IAAI,QAAQ,EAEjC,CAqCA,QAAS,CACP,WAAW,IAAM,CACT,MAAA+G,EAAW,KAAK,MAAM,SACtBpkB,EAAQokB,GAAU,WAAW,UAAU,iBAEvCq+M,EAAY,CAAC,CAACziO,GAASokB,EAAS,UAAU,IAAM,kBAGnDq+M,IACI,iBAAY,SAAW,KAAK,eAG9B,iBAAY,SAAUziO,GAAS,IAAMA,EAAM,SAAS,EAAE,GAAM,SAAS,EAEtEyiO,IACG,iBAAY,SAAW,KAAK,gBAElC,CAAC,CACN,CAEA,qBAAsB,CACpB,YAAK,YAAY,SAAW,OAC5B,KAAK,YAAc,OAEZ,MAAM,qBACf,CACF,CC7KA,SAAwBC,GAAYhmD,EAAiB,CAC7C,MAAAhyJ,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,KAAO,OACbA,EAAM,MAAM,QAAU,OAGpBA,EAAM,OAASgyJ,EAGR,cAAK,OAAOhyJ,CAAK,EAE1B,MAAMhnB,EAAU,IAAI,QAAc,CAAC+Y,EAASwkB,IAAW,CAC/CvW,EAAA,iBAAiB,SAAWpmB,GAAW,CAC3C,MAAMqsK,EAAarsK,EAAE,OAAO,MAAM,CAAC,EACnC,GAAG,CAACqsK,EAAM,CACR1vI,EAAO,kBAAkB,EACzB,MACF,CAEAxkB,EAAQk0J,CAAI,GACX,CAAC,KAAM,GAAK,EAChB,EAAE,QAAQ,IAAM,CACfjmJ,EAAM,OAAO,EACd,EAED,OAAAA,EAAM,MAAM,EAELhnB,CACT,CCUA,MAAMi/N,GAAW,CAACnnE,EAAsBonE,EAAiB,KAEhD,CAAC,EADMpnE,GAAmC,UAAU,QAAQ,OAChD,CAAConE,GAAkB,CAAEpnE,EAAkC,OAAO,UAG9DqnE,GAArB,MAAqBA,WAAyBrpM,EAAe,CAA7D,kCAGU,iBAA0B,IAG1B,6BAAuD,IACvD,uBAA8C,IAmFtD,KAAQ,cAAgB,IAAM,CAC5BkpM,GAAY,kCAAkC,EAAE,KAAK,MAAM/xD,GAAS,CAClE,GAAGA,EAAK,KAAK,SAAS,MAAM,EAAG,CACvB,MAAA3sH,EAAM,SAAS,cAAc,KAAK,EAClCxiD,EAAM,IAAI,gBAAgBmvK,CAAI,EAC9B,MAAAh9J,GAA0BqwC,EAAKxiD,EAAK,EAAK,EAC/C,MAAM+sK,EAAW,aACX,CAAC,KAAAroG,CAAI,EAAI,MAAMooG,GAAkB,CAAC,MAAOtqH,EAAK,KAAM,IAAI0nK,GAAU1nK,EAAI,aAAcA,EAAI,aAAa,EAAG,SAAAuqH,EAAS,EACvHoC,EAAO,IAAI,KAAK,CAACzqG,CAAI,EAAGyqG,EAAK,KAAK,QAAQ,SAAU,MAAM,EAAG,CAAC,KAAMpC,CAAS,EAC/E,CAEA,MAAM/S,EAAY,MAAM,KAAK,SAAS,eAAe,uBAAuBmV,CAAI,EAC1E78E,EAAgB,KAAK,SAAS,eAAe,gBAAgB0nE,EAAU,EAAE,EACzEsnE,EAA0ChqN,GAAmB,wBAAwB63J,EAAK,KAAM78E,CAAa,EAE7GtvF,EAAWC,KACjBD,EAAS,kBAAoBs+N,EAAe,kBAAkB,KAAKA,CAAc,EACjFt+N,EAAS,OAASs+N,EAAe,OAElBA,EAAA,KAAMtnE,GAAc,CAC5B,aAAQ,OAAOztJ,CAAG,EAClB,mBAAc,OAAOA,CAAG,EACxB,yBAAoB,IAAIlU,EAAW2hK,CAAS,EAC3C,MAAA+C,EAAS,KAAK,gBAAgB/C,CAAS,EACxC,mBAAc,IAAI+C,EAAQ1kK,CAAS,EAExC,KAAK,sBAAsB2hK,CAAS,EAAE,KAAKh3J,EAAS,QAAQ,KAAKA,CAAQ,EAAGA,EAAS,OAAO,KAAKA,CAAQ,CAAC,CACzG,EAAAA,EAAS,OAAO,KAAKA,CAAQ,CAAC,EAE3B,MAAAuJ,EAAM,KAAK,gBAAgBytJ,CAAS,EAC1Ch3J,EAAS,MAAM,IAAM,CACnB3K,EAAU,OAAO,EAClB,EAEK,MAAAgf,EAAY,IAAInE,GAAqB,CACzC,SAAU,GACV,WAAY,GACZ,eAAgB,GACjB,EAEK,CAAC,UAAA7a,CAAS,EAAI,MAAM,KAAK,aAAa2hK,EAAW,EAAK,EACvD,aAAQ,IAAIztJ,CAAG,EAEV8K,EAAA,OAAOhf,EAAW,GAAO2K,CAAQ,EAC5C,GAGH,KAAQ,aAAe,IAAM,CACrB,MAAAu+N,EAAeC,GAAW,SAAS,OAAO,KAAM,GAAM,EAAE,OAAS,KAAK,MAAM,IAAI,EACnFD,IACD,EAAEF,GAAiB,OACnB,KAAK,MAAM,SAAW/5L,GAAKi6L,EAAa,QAAQ,EAChD,KAAK,SAAS,gBAAgB,YAAY,WAAY/qO,EAAU,QAAQ,EACxEmkC,GAAa,kBAAkB,CAC7B,eAAgB,GACjB,EACI,uBAAkB,iBAAiBwmM,GAAS,KAAK,MAAM,UAAU,UAAW,EAAK,CAAC,EACzF,EAqIM,iBAAe,GAA+B,CACpD,MAAMtlN,EAASC,EAAgB,EAAE,OAAQ,WAAW,EACpD,GAAG,CAACD,EAAQ,OAEZ,MAAMm+I,EAAY,KAAK,oBAAoB,IAAIn+I,CAAM,EAClD,GAAAm+I,EAAU,IAAM,kBAAmB,CACpC,KAAK,sBAAsBA,CAAS,EACpC,MACF,CAEM,MAAAztJ,EAAM,KAAK,gBAAgBytJ,CAAS,EACvC,QAAK,QAAQ,IAAIztJ,CAAG,EAAG,OACrB,aAAQ,IAAIA,CAAG,EAEpB,MAAM/T,EAAMwhK,EAAU,SAChB3iJ,EAAY,IAAInE,GAAqB,CACzC,WAAY,GACZ,eAAgB,GACjB,EAEK4E,EAAO,SAAW,CAChB,MAAA5V,EAAU,KAAK,sBAAsB83J,CAAS,GAEjD,EADkB,MAAM,KAAK,SAAS,cAAc,gBAAgBxhK,CAAG,GACzD,KAAO2oO,GAASnnE,CAAS,IAC9B3iJ,EAAA,OAAOwE,EAAQ,GAAM3Z,CAAO,CACxC,EAGFmV,EAAU,UAAU,EAEHjE,EAAAyI,EAAS/Y,GAAM,CAC3BuU,EAAU,UAAU,eACrBA,EAAU,QAAQvU,CAAC,EACnBuU,EAAU,OAAO,GAEZS,GAEN,GAAC,eAAgB,KAAK,cAAe,GAEnCA,GAAA,EAUC,2BAAwB,MAC9BkiJ,EACAynE,KAEI,KAAK,kBAAkB,cACzB,MAAM,KAAK,oBAAoBznE,EAAW,KAAK,kBAAkB,OAAO,EAGnEqnE,GAAiB,sBAAsBrnE,EAAWynE,CAAa,GAmGxE,KAAQ,UAAY,IAAM,CACxB,MAAM/9L,EAAS,KAAK,KAAK,cAAc,SAAS,EAC1C7nB,EAAS,KAAK,cAAc,IAAI,KAAK,yBAAyB,KAAK,KAAK,CAAC,EAC5E6nB,IAAW7nB,IAId,KAAK,mBAAmB,EAErB6nB,GACMA,EAAA,UAAU,OAAO,QAAQ,EAG/B7nB,GACMA,EAAA,UAAU,IAAI,QAAQ,EAC/B,CACF,CA3bA,OAAc,aAAc,CACnB,OACL,YAAarlB,EAAU,SAAS,iBAAiB,cAAc,EAEnE,CAEA,IAAY,OAAQ,CAClB,OAAOwZ,GAAgB,UACzB,CAEO,KAAKlX,EAAwDuoO,GAAiB,cAAe,CAClG,KAAK,UAAU,UAAU,IAAI,uBAAwB,4BAA4B,EACjF,KAAK,SAAS,gBAAgB,EAE9B,CACQ,MAAAhpO,EAAY2hC,GAAgB,KAAK,UAAU,EAE3C0nM,EAAe3xM,GAAO,8BAA+B,CAAC,KAAM,YAAa,KAAM,iCAAiC,EAChH4xM,EAAc5xM,GAAO,8BAA+B,CAAC,KAAM,WAAY,KAAM,WAAW,EACxF6xM,EAAc7xM,GAAO,8BAA+B,CAAC,KAAM,aAAc,KAAM,mBAAmB,EAExG3c,EAAiBsuN,EAAc,KAAK,cAAe,CAAC,eAAgB,KAAK,eAAe,EAExFtuN,EAAiBuuN,EAAa,IAAM,CAClC,KAAK,OAAO,UAAUd,EAAqB,EAAE,KAAK,CACjD,GAAC,eAAgB,KAAK,cAAe,GAExCztN,EAAiBwuN,EAAa,KAAK,aAAc,CAAC,eAAgB,KAAK,eAAe,EAEhF,MAAA5nE,EAAY,KAAK,MAAM,UAAU,UACjC6nE,EAAoB,KAAK,kBAAoB,IAAIp7M,GAAc,CACnE,KAAM,sBACN,KAAM,OACN,QAAS06M,GAASnnE,EAAW,EAAK,EACnC,EAED,KAAK,mBAAmB,EACxB,KAAK,eAAe,IAAI6nE,EAAkB,KAAK,EAAE,SAAU,SAAW,CACpE,MAAM,KAAK,oBAAoB,KAAK,MAAM,SAAS,UAAWA,EAAkB,OAAO,EAGvF,WAAW,IAAM,CACT,MAAAn+L,EAASy8D,EAAK,cAAc,SAAS,EAC3C,GAAG,CAACz8D,EAAQ,OAEZ,MAAMo+L,EAAY,KAAK,oBAAoB,IAAIp+L,CAAM,EACjDo+L,EAAkC,OAAO,SAAWA,EAAU,IAAM,mBAIxE,KAAK,sBAAsBA,CAAS,GACnC,GAAG,EACP,EAESzpO,EAAA,OACRqpO,EACAC,EACAC,EACAvxM,GAA2BwxM,CAAiB,EAAE,UAElD,CAEUrrO,EAAA,iBAAiB,oBAAqB,KAAK,SAAS,EAE9D,MAAM0L,EAAUpJ,EAAE,YAAY,KAAMipO,GAAe,CACjD,MAAMn/N,EAAWm/N,EAAW,IAAK/nE,GACxB,KAAK,aAAaA,CAAS,CACnC,EAEM,eAAQ,IAAIp3J,CAAQ,EAC5B,EAEKo/N,EAAgBhoM,GAAgB,KAAK,UAAU,EAC/CmmE,EAAO,KAAK,KAAO,SAAS,cAAc,KAAK,EAChD,OAAAA,EAAA,UAAU,IAAI,MAAM,EACzB/sF,EAAiB+sF,EAAM,KAAK,YAAa,CAAC,eAAgB,KAAK,eAAe,EAC9E6hI,EAAc,OAAO7hI,CAAI,EAElBj+F,CACT,CA8DQ,gBAAgB83J,EAAsB,CAC5C,MAAO,GAAKA,EAAU,EACxB,CAEQ,yBAAyBD,EAAiB,CAChD,MAAO,IAAM,KAAK,gBAAgBA,EAAM,UAAU,SAAS,GAAK,GAClE,CAEA,OAAc,aACZC,EACA3hK,EAAY,SAAS,cAAc,KAAK,EACxC,CACM,MAAAkX,EAASirJ,GAAuBR,CAAS,EACzCioE,EAAUjoE,EAAU,IAAM,YAChC,GAAIioE,GAAWjoE,EAAU,OAAO,SAAW,CAACzqJ,EAE1C,OAGF,MAAM2yN,EAAS,CAAC,CAACloE,EAAU,OAAO,KAE9B,IAAAxhK,EAA0DypO,EAAUjoE,EAAU,SAAgC,OAC/GioE,GAAW,CAACzpO,IACPA,EAAA,CACJ,EAAG,qBACH,WAAY,CAAC,EACb,KAAM,IACN,IAAK,yBACL,EAAG,KACH,EAAG,KACH,UAAW,kBAILH,EAAA,UAAU,IAAI,iBAAiB,EAC/BA,EAAA,QAAQ,GAAK,GAAK2hK,EAAU,GAEhC,MAAArxJ,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAuB,EAE3C,MAAMlQ,EAA+B,GACrC,IAAIkH,EAAuCjI,EAC3C,GAAGuqO,EAAS,CACHvqO,EAAAge,GAAgBld,EAAK,IAAK,GAAG,EACpCmH,EAAUuW,GAAU,CAClB,MAAO1d,EACP,QAAS,KACT,UAAWmQ,EACX,iBAAkB,GAClB,KAAAjR,EACA,SAAUsiK,EAAU,OAAO,QAC5B,EAEEA,EAAU,OAAO,SACZrxJ,EAAA,UAAU,IAAI,YAAY,EAG5B,MAAAzG,EAAUvC,EAAQ,KAAK,MAAM,CAAC,aAAAlH,EAAc,OAAAqkB,MAC1CrkB,QAAa,OAASA,EAAa,KAClCqkB,EACR,EAAE,KAAMA,IACJk9I,EAAU,OAAO,UACfkoE,GACMplN,EAAA,KAAK,MAAM,QAAU,OACzBA,EAAO,QACDA,EAAA,MAAM,MAAM,QAAU,SAEvBk9I,EAAU,UAAU,YACrBl9I,EAAA,KAAK,MAAM,QAAU,GAAK,KAAK,IAAIk9I,EAAU,SAAS,SAAS,EAAI,MAIvE5nJ,GAAc,OAAO,IAAM,CAChC/Z,EAAU,OAAOsQ,CAAK,EACvB,EACF,EAEDlQ,EAAa,KAAKyJ,CAAO,OAEzB7J,EAAU,OAAOsQ,CAAK,EAGrB,GAAAqxJ,EAAU,UAAU,iBAAkB,CACvC,KAAM,CAAC,OAAAz7I,CAAU,EAAA+qI,GAA+B,OAAO/5I,CAAM,EAG7D,GAFOgP,EAAA,UAAU,IAAI,0BAA0B,EAE5C2jN,GAAUD,EAAS,CACpB,MAAM//N,EAAUvC,EAAQ,KAAK,CAAC,CAAC,aAAAlH,KACtBA,EAAa,KAAK,KAAK,SAAW,CACjC,MAAA0b,EAAe,MAAM3d,EAAU,SAAS,cAAc,gBAAgBgC,EAAKd,EAAK,IAAI,EAC1F6mB,EAAO,MAAM,gBAAkB,OAAOpK,EAAa,GAAG,IACtDoK,EAAO,MAAM,QAAU,IAAMy7I,EAAU,OAAO,KAAO,IAAMA,EAAU,SAAS,UAAYA,EAAU,SAAS,WAAa,IAC1HrxJ,EAAM,OAAO4V,CAAM,EACpB,CACF,EAED9lB,EAAa,KAAKyJ,CAAO,OAEzByG,EAAM,OAAO4V,CAAM,CAEvB,CAEO,OACL,UAAAlmB,EACA,MAAAsQ,EACA,YAAa,QAAQ,IAAIlQ,CAAY,EAEzC,CAEQ,aAAauhK,EAAsB5tH,EAAS,GAAM,CAClD,MAAA9zC,EAAS+oO,GAAiB,aAAarnE,CAAS,EACtD,GAAG1hK,EAAQ,CACH,MAAC,UAAAD,EAAW,MAAAsQ,CAAS,EAAArQ,EACjBD,EAAA,UAAU,IAAI,WAAW,EAC7BsQ,EAAA,UAAU,IAAI,iBAAiB,EAE/B,MAAA4D,EAAM,KAAK,gBAAgBytJ,CAAS,EACrC,yBAAoB,IAAI3hK,EAAW2hK,CAAS,EAC5C,mBAAc,IAAIztJ,EAAKlU,CAAS,EAElC,KAAK,yBAAyB,KAAK,KAAK,IAAMkU,GACrClU,EAAA,UAAU,IAAI,QAAQ,EAGlC,KAAK,KAAK+zC,EAAS,SAAW,SAAS,EAAE/zC,CAAS,CACpD,CAEA,OAAOC,GAAUA,EAAO,YAAY,KAAK,IAAMA,CAAM,CACvD,CA8CA,MAAc,oBAAoB0hK,EAAsBriJ,EAAe,EACpEqiJ,EAAU,WAAVA,EAAU,SAAa,CAAC,EAAG,oBAAqB,OAAQ,CAAE,KAAG,OAAO,KAAOriJ,GAAQ,OACpF,MAAM,KAAK,SAAS,gBAAgB,YAAY,WAAYnhB,EAAU,QAAQ,CAChF,CAwGQ,oBAAqB,CACrB,MAAAwjK,EAAY,KAAK,MAAM,UAAU,UAClC,uBAAkB,iBAAiB,CAACA,GAAaA,EAAU,IAAM,mBAAqB,CAAC,CAACA,GAAW,QAAQ,OAAO,CACzH,CAmBF,EApcEqnE,GAAc,OAAS,EAmVTA,GAAA,sBAAwB,CACpCrnE,EACAynE,IACG,CACG,MAAA5uK,EAAU,EAAEwuK,GAAK,OACjBnpO,EAAa,IAAM26D,IAAYwuK,GAAK,OAEpC7oO,EAAOwhK,EAAkC,SACzCh3J,EAAWC,KACb,IAAAgV,EACJ,OAAGzf,GACDyf,EAAWX,GAAmB,iBAAiB,CAC7C,MAAO9e,EACP,QAASmiC,GAAa,KAAK,QAAUA,GAAa,KAAK,QAAQ,cAAc,QAAU,EACxF,EACD33B,EAAS,kBAAoBiV,EAAS,kBAAkB,KAAKA,CAAQ,EACrEjV,EAAS,OAASiV,EAAS,QAE3BA,EAAW,QAAQ,UAGrBA,EAAS,KAAK,SAAW,CACpB,IAAC/f,IAAc,CAChB8K,EAAS,QAAQ,EACjB,MACF,CAEM,MAAAm/N,EAAc,CAAC,CAACV,EACJA,MAAAzxN,GAAgB,SAAW,YACvC,MAAA4zG,EAAW5jH,GAAiB,CAC5B,IAAAoiO,EACE,MAAAt4L,EAAkB0wH,GAAuBR,CAAS,EACrD,GAAAh6J,GAAO,CAAC8pC,EACTs4L,EAAkB9oE,GAAat5J,CAAG,MAC7B,CACL,KAAM,CAAC,OAAAue,CAAU,EAAA+qI,GAA+B,OAAOx/G,CAAe,EACtEs4L,EAAkB,QAAQ,QAAQtpE,GAAuBv6I,CAAM,CAAC,CAClE,CAEA,MAAM0pF,EAAQ+xD,EAAkC,KAChD,QAAQ,IAAI,CACVooE,EACAznM,GAAa,qBAAqBstE,EAAMjoG,CAAG,CAC5C,GAAE,KAAK,CAAC,CAAC+4J,CAAK,IAAM,CAChB,IAAC7gK,IAAc,CAChB8K,EAAS,QAAQ,EACjB,MACF,CAEA,MAAMs4J,EAAO9B,GAAkB,MAAM,KAAKT,CAAK,CAAQ,EAEvD0oE,EAAc,UAAYznE,EAC1BynE,EAAc,kBAAoBnmE,EAE9B6mE,GACF3rO,EAAU,SAAS,gBAAgB,YAAY,WAAYA,EAAU,QAAQ,EAG/EmkC,GAAa,kBAAkB,CAC7B,KAAAstE,EACA,cAAejoG,EACf,eAAgB,GACjB,EAAE,KAAKgD,EAAS,QAAQ,KAAKA,CAAQ,CAAC,EACxC,GAGH,GAAG,CAACxK,EAAK,CACCorH,IACR,MACF,CAEA,MAAMzvG,EAAe,MAAM3d,EAAU,SAAS,cAAc,gBAAgBgC,CAAG,EAC5E2oO,GAASnnE,CAAS,EACnB,WAAW,IAAM,CACfr/H,GAAa,mBAAmBxmB,EAAa,GAAG,EAAE,KAAMnU,GAAQ,CAC3D,IAAC9H,IAAc,CAChB8K,EAAS,QAAQ,EACjB,MACF,CAEA4gH,EAAQ5jH,CAAG,EACZ,GACA,GAAG,EACE9H,KACR0rH,EAAQzvG,EAAa,GAAG,CAC1B,CACD,EAEMnR,CAAA,EA5aX,IAAqBq/N,GAArBhB,GClCwB,SAAAiB,GAAWliO,EAAqBo6K,EAAoB,CACnE,OAAAF,GAAYl6K,EAAU,KAAO,GAAK,IAAI,OAAO,cAAgB,IAAMo6K,CAAQ,CACpF,CCWA,MAAqB+nD,WAA0BvqM,EAAe,CACrD,MAAO,CACP,eAAU,UAAU,IAAI,wBAAwB,EACrD,KAAK,SAAS,gBAAgB,EAExB,MAAAvO,EAAO,SAAS,cAAc,MAAM,EAEtC,IAAA+4M,EACJ,CACQ,MAAAlxN,EAAUkxN,EAAc,IAAI5oM,GAAe,CAC/C,QAAS,gBACV,EAEInQ,EAAA,OAAOnY,EAAQ,SAAS,CAC/B,CAEA,MAAM2pC,EAA0D,CAC9D,MACA,QACA,MACA,CAAC,WAAY,CAAC,iBAAkB,eAAe,CAAC,EAEhD,CAAC,UAAW,CAAC,oBAAqB,0BAA2B,eAAe,CAAC,EAC7E,CAAC,OAAQ,CAAC,kBAAmB,eAAe,CAAC,EAC7C,cAGF,IAAI2iH,EAA0CxnH,EAC9C,CACE,MAAM9kC,EAAU,IAAIsoB,GAAe,EAAE,EAE/BrhC,EAAQgU,GAA0D,CAChE,MAAAk2N,EAAU,MAAM,QAAQl2N,CAAG,EAC3Bm2N,EAAUD,EAAUl2N,EAAI,CAAC,EAAIA,EAC7BslC,EAAS4wL,EAAU/4M,GAAQnd,EAAI,CAAC,EAAE,IAAIhU,CAAI,CAAC,EAAI,OAC/CiV,EAAQhX,EAAU,SAAS,SAASksO,CAAO,EACjD,MAAO,CAAC,CACN,IAAKA,EACL,KAAMA,IAAY,MAAQ,sBAAwB,gBAAgBA,CAAO,SACzE,QAASA,IAAY,MAAQl1N,EAAQ,CAACA,EACtC,OAAAqkC,EACA,KAAM,gBAAkB6wL,CAAA,EACvB,GAAI7wL,GAAU,EAAG,GAGtB+rH,EAASl0I,GAAQuxB,EAAK,IAAI1iD,CAAI,CAAC,EAE/B69C,EAAiB,IAAInF,GAAe,CAClC,OAAA2sH,EACA,eAAgB,KAAK,eACtB,EAEMA,EAAA,QAAQ,CAACptH,EAAO32C,IAAQ,CACvB,MAAA8oO,EAAUvsL,EAAe,YAAY5F,CAAK,EAChD,GAAG,CAACmyL,EACF,OAGI,MAAC,IAAA9xM,EAAK,MAAA7f,CAAS,EAAA2xN,GACpB9oO,IAAQ,EAAI2oO,EAAclxN,GAAS,QAAQ,OAAO,GAAGN,CAAK,EAC5D,EAEgBoC,EAAA9B,EAAQ,QAAS,IAAM,CACnC9a,EAAU,SAAS,SAAS,KACpBuyB,GAAA,CAAC,YAAa,wBAAwB,CAEhD,GAAC,eAAgB,KAAK,cAAe,GAEnCU,EAAA,OAAOnY,EAAQ,SAAS,CAC/B,CAEM,MAAAsxN,EAAe3yM,GAAqB,CACjC2tI,EAAA,QAASptH,GAAU,CACrBA,EAAM,MAAQ,QAIdA,EAAM,QACP4F,EAAe,iBAAiB5F,EAAOvgB,EAAU,EAAI,MAAS,EAGhEugB,EAAM,cAAc,MAAM,UAAU,OAAO,mBAAoBvgB,CAAO,EAChEugB,EAAA,IAAI,iBAAiBvgB,CAAO,GACnC,GAGH,KAAK,eAAe,IAAIxG,CAAI,EAAE,SAAU,SAAW,CACjD,MAAM1W,EAA0C,GACzC6qJ,EAAA,QAASptH,GAAU,CAClB,MAAAppB,EAAUopB,EAAM,cAAc,QACpCz9B,EAASy9B,EAAM,GAAG,EAAIA,EAAM,MAAQ,MAAQppB,EAAU,CAACA,CAAA,CACxD,EAEK,MAAAy7M,EAASrsO,EAAU,SAAS,SAAS,IACxCqsO,IAAW9vN,EAAS,MACrB6vN,EAAY,CAACC,CAAM,EAEhB9vN,EAAS,KACV,MAAMoqB,GAAM,GAAG,GAIb,WAAK,SAAS,gBAAgB,SAASo7J,GAAa,WAAY,UAAU,EAAG/hM,EAAU,SAAS,SAAWuc,CAAQ,EAC1H,EAEW6vN,EAAApsO,EAAU,SAAS,SAAS,GAAG,EAEtC,gBAAW,OAAOizB,CAAI,CAC7B,CACF,CClGO,MAAMq5M,EAAqB,CAOhC,YACEnyM,EACA44L,EACAr1K,EACA6uL,EACAx0K,EACAy0K,EAAa,GACb,CACA,MAAM1/F,EAAa,yBACd,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAIA,CAAU,EAEjC,MAAA1vH,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI0vH,EAAa,UAAU,EAEvC,MAAA9xC,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI8xC,EAAa,OAAO,EAC1ChsI,GAAMk6F,EAAS7gE,CAAI,EAEnB,MAAMsyM,EAAW,KAAK,eAAiB,SAAS,cAAc,KAAK,EAC1DA,EAAA,UAAU,IAAI3/F,EAAa,QAAQ,EAEzC0/F,IACDC,EAAS,UAAY,GAAK/uL,GAGpBtgC,EAAA,OAAO49E,EAASyxI,CAAQ,EAE3B,WAAQ,IAAIxwL,GAAc,CAC7B,KAAA82K,EACA,IAAKwZ,EACL,IAAKx0K,GACJra,CAAY,EACf,KAAK,MAAM,eACX,KAAK,MAAM,YAAY,CACrB,QAAkB1mC,GAAA,CACb,KAAK,UACN,KAAK,SAASA,CAAK,EAGlBw1N,IAEDC,EAAS,UAAY,GAAKz1N,EAE9B,EACD,EAED,KAAK,UAAU,OAAOoG,EAAS,KAAK,MAAM,SAAS,CACrD,CACF,CAEA,MAAqBsvN,WAA8B/qM,EAAwB,CACzE,OAAc,aAAc,CACnB,OACL,OAAQ3hC,EAAU,SAAS,iBAAiB,UAAU,EAE1D,CAEO,KAAKsC,EAA4D,CACjE,eAAU,UAAU,IAAI,4BAA4B,EACzD,KAAK,SAAS,SAAS,EAEvB,MAAMwY,EAAU0oB,GAAgB,KAAK,KAAM,KAAK,UAAU,EACpDp3B,EAA2B,GAEjC,CACQ,MAAAvK,EAAYiZ,EAAQ,UAAU,EAE9B0tB,EAAQ,IAAI8jM,GAAqB,WAAY,EAAGtsO,EAAU,SAAS,iBAAkB,GAAI,EAAE,EAC3FwoC,EAAA,SAAYxxB,GAAU,CAC1BhX,EAAU,SAAS,gBAAgB,SAAS+hM,GAAa,WAAY,kBAAkB,EAAG/qL,CAAK,GAG3F,MAAA21N,EAAuBpzM,GAAO,8BAA+B,CAAC,KAAM,QAAS,KAAM,iBAAiB,EAEpGqzM,EAAWf,GAAiB,cAClCjvN,EAAiB+vN,EAAsB,IAAM,CAC3C,KAAK,OAAO,UAAUd,EAAgB,EAAE,KAAKe,CAAQ,EACtD,EAED,MAAMC,EAAoB,IAAmB7sO,EAAU,SAAS,SAAS,IAAM,mBAAqB,oBAC9FyD,EAAI,IAAIjD,GAAK,YAEbs7H,EAAW,IAAM,CACrBr4H,EAAE,iBAAiB,CAAC,IAAKopO,EAAA,CAAoB,GAC7CC,EAAwB,iBAAiBvwN,GAAS,YAAY,YAAY,CAAC,EACnDuwN,EAAA,iBAAiBvwN,GAAS,UAAW,IAGzDuwN,EAA0B,IAAI78M,GAAc,CAChD,KAAM,mBACN,KAAM,aACN,SAAU8xK,GAAa,WAAY,WAAY,YAAY,EAC3D,kBAAmB,GACnB,QAAS,GACT,eAAgB,KAAK,eACtB,EAEKgrC,EAAgB,IAAIt0M,GAAI,CAC5B,cAAeq0M,EACf,UAAW,IAAM,CACZA,EAAwB,cAChBv6M,GAAA,CAAC,YAAa,wBAAwB,CAEnD,EACA,eAAgB,KAAK,eACtB,EAEKy6M,EAAc,IAAIv0M,GAAI,CAC1B,KAAM,aACN,aAAc,sBACd,oBAAqBh1B,EAAE,QACvB,UAAW,IAAM,CACf,KAAK,OAAO,UAAUsoO,EAAiB,EAAE,KAAK,CAChD,EACA,eAAgB,KAAK,eACtB,EAEQjwG,IAET,KAAK,eAAe,IAAI97H,CAAS,EAAE,mBAAoB87H,CAAQ,EAErDj6H,EAAA,OACR2mC,EAAM,UACNmkM,EACAI,EAAc,UACdC,EAAY,UAEhB,CAEA,CACQ,MAAAnrO,EAAYiZ,EAAQ,YAAY,EAEhCiqC,EAAa,IAAI+pB,GAAY,IAAI,EACjCm+J,EAAkBloL,EAAW,UACnBkoL,EAAA,UAAU,IAAI,kBAAkB,EAQ1C,MAAAC,MAAgB,IAClB,IAAAC,EAAe3zN,GAAgB,WAC/BsI,EAAUtI,GAAgB,UAExB,MAAA4zN,EAAoBrjO,GAAY,CACpCyP,GAAgB,WAAWzP,EAAK,MAAOA,EAAK,SAAS,EAEpCA,EAAK,UAAU,cAAc,kBAAkB,GACtD,OAAO,EAEjB,MAAMsjO,EAAqBtjO,EAAK,oBAAoB+X,EAAU,iBAAmB,kBAAkB,EAChGurN,GACItjO,EAAA,UAAU,QAAQsjO,CAAkB,CAC3C,EAGE,IAAAC,EAEa1wN,EAAAqwN,EAAiB,MAAM3gO,GAAM,CAC5C,MAAMzK,EAAYyjB,EAAgBhZ,EAAE,OAAQ,iBAAiB,EAC7D,GAAG,CAACzK,EACF,OAGI,MAAA0rO,EAAaN,EAAgB,cAAc,SAAS,EACvDM,GACUA,EAAA,UAAU,OAAO,QAAQ,EAGhC,MAAAxjO,EAAOmjO,EAAU,IAAIrrO,CAAS,EAOpC,GANAA,EAAU,UAAU,IAAI,QAAQ,EAE1B,MAAA2X,GAAgB,cAAczP,EAAK,KAAK,EAE9CujO,IAAgB,EAAE,EAEfvjO,EAAK,QAAUwS,GAAS,YAAY,YAAY,EACjD,GAAGopC,GACE57C,EAAK,OAAO,QACbA,EAAK,OAAO,cAET,CACFA,EAAK,OAAO,QACRA,EAAA,OAAO,KAAK,EAAI,EAGvBA,EAAK,OAAO,GAAG,CAAC,EAAE,MAAM,UAAY,WAE9B,MAAAyjO,EAAYF,EAAiB9+I,GAAY,EAC1CzkF,EAAK,OAAO,WAAaykF,GAAWA,IAAY,MACjDzkF,EAAK,OAAO,GAAG,CAAC,EAAE,MAAM,UAAY,GAC/BA,EAAA,OAAO,oBAAoB,aAAcyjO,CAAS,EAEpDF,IAAkBE,IACHF,EAAA,QAEpB,EAGF,WAAW,IAAM,CACZA,IAAkBE,IAIrBzjO,EAAK,OAAO,OACPA,EAAA,OAAO,iBAAiB,aAAcyjO,CAAS,IACnD,GAAG,CACR,CAED,GAAC,eAAgB,KAAK,cAAe,GAExC,MAAMC,EAA+C,QAAI,CAAC,mBAAoB,gBAAgB,CAAC,EAEzF/hO,EAAUpJ,EAAE,OAAO,KAAK,MAAMorO,GAAW,CAC7C,MAAMC,EAAgBD,EAAO,OAAQnqE,GAAUA,EAAM,OAAO,SAC5DoqE,EAAc,QAAQC,EAAa,EAEnC,MAAMxhO,EAAWuhO,EAAc,IAAI,MAAMpqE,GAAU,CAC3C1hK,QAAY,SAAS,cAAc,KAAK,EACxC2D,EAAO,CACX,UAAA3D,EACA,MAAA0hK,EACA,oBAAqB,CAAC,GAGlBjmI,EAAUimI,EAAM,SACrB,OAAQ0nE,GAAkBwC,EAAoB,IAAIxC,EAAc,WAAW,CAAC,CAAC,EAC7E,IAAKA,GAAkB,CACtB,MAAMznE,EAAYynE,EAAc,UAC1BnpO,EAAS+pO,GAAiB,aAAaroE,CAAS,EACtD,OAAAh+J,EAAE,oBAAoBylO,EAAc,WAAW,CAAC,EAAInpO,EAAO,UACpDA,CAAA,CACR,EAESorO,EAAA,IAAIrrO,EAAW2D,CAAC,EAE1B4nO,EAAiB5nO,CAAC,EAEf+9J,EAAM,KAAO4pE,EAAa,IAC3BtrO,EAAU,UAAU,IAAI,QAAQ,EAGlC,MAAMs9C,EAAWokH,EAAM,SACjBthK,EAA+B,GACjC,IAAA4rO,EACJ,GAAG1uL,EAAU,CACS0uL,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,gBAAgB,EAChD,MAAM3sO,EAAO,GAAK,KACD2oK,GAAA,CACf,IAAKgkE,EACL,MAAO3sO,EACP,OAAQA,EACR,MAAOqiK,EAAM,SACb,SAAU,KAAK,SACf,aAAAthK,EACA,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,GACP,EAAE,KAAK,CAAC,CAAC,OAAAyhB,CAAM,IAAMA,CAAM,EAAE,KAAM7L,GAAW,CAC7CrS,EAAE,OAASqS,CAAA,CACZ,CACH,CAEM,MAAAqtC,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAc,EAE7B,MAAA4oL,EAAW5oL,EAAO,YAEf,OAAA4oL,EAAA,UAAU,IAAI,OAAO,EACvB5oL,EAAA,UAAU,IAAI,QAAQ,EAEhBjjD,EAAA,KAAK,GAAGq7B,EAAQ,IAAKx7B,GAAWA,EAAO,WAAW,CAAC,EAEhED,EAAU,UAAU,IAAI,iBAAiB,EAEnC,cAAQ,IAAII,CAAY,EAE3B4rO,GACDhsO,EAAU,OAAOgsO,CAAiB,EAGpChsO,EAAU,OAAOisO,EAAU5oL,CAAM,EAE1BrjD,CAAA,CACR,EAEK0lE,EAAa,MAAM,QAAQ,IAAIn7D,CAAQ,EAElC24C,EAAA,OAAO,GAAGwiB,CAAU,EAChC,EAEDn7D,EAAS,KAAKV,CAAO,EAEf,MAAAunB,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,MAAM,UAAY,QAEvB,MAAMkH,EAAO,QACP4zM,EAAWhsC,GAAa,WAAY,OAAO,EAE3CisC,EAAS,IAAIv1M,GAAI,CACrB,WAAY,IAAIjG,GAAW,CACzB,QAAS,WACT,KAAA2H,EACA,MAAO,MACP,SAAA4zM,CAAA,CACD,EACF,EAEKE,EAAW,IAAIx1M,GAAI,CACvB,WAAY,IAAIjG,GAAW,CACzB,QAAS,aACT,KAAA2H,EACA,MAAO,QACP,SAAA4zM,CAAA,CACD,EACF,EAEKG,EAAY,IAAIz1M,GAAI,CACxB,WAAY,IAAIjG,GAAW,CACzB,QAAS,yBACT,KAAA2H,EACA,MAAO,SACP,SAAA4zM,CAAA,CACD,EACF,EAEI,oBAAe,IAAI/tO,CAAS,EAAE,mBAAoB,CAAC,CAAC,IAAA+V,EAAK,MAAAiB,EAAO,SAAAoV,KAAc,CAC9ErW,IAAQg4N,GACT/tO,EAAU,cAAc,cAAc,CACxC,CACD,EAED,KAAK,eAAe,IAAIA,CAAS,EAAE,gBAAiB,IAAM,CACxDmtO,EAAe3zN,GAAgB,WACzB,MAAA20N,EAAa30N,GAAgB,UACnC,GAAGsI,IAAYqsN,EACb,OAGQrsN,EAAAqsN,EAEJ,MAAAZ,EAAaN,EAAgB,cAAc,SAAS,EACvDM,GACUA,EAAA,UAAU,OAAO,QAAQ,EAGlC,IAAArgM,EACMggM,EAAA,QAASnjO,GAAS,CAC1BqjO,EAAiBrjO,CAAI,EAElBA,EAAK,MAAM,KAAOojO,EAAa,KAC3BpjO,EAAA,UAAU,UAAU,IAAI,QAAQ,EACrCmjC,EAASnjC,EAAK,UAChB,CACD,EAEEmjC,GACD6X,EAAW,kBAAkB,CAC3B,QAAS7X,EACT,SAAU,SACV,KAAM,IACP,CACH,CACD,EAEDja,EAAK,OAAO+6M,EAAO,UAAWC,EAAS,UAAWC,EAAU,SAAS,EAE3DrsO,EAAA,OACRorO,EACAh6M,CAAA,CAEJ,CAEA,CACQ,MAAApxB,EAAYiZ,EAAQ,kBAAkB,EAEtCmY,EAAO,SAAS,cAAc,MAAM,EAEpCkH,EAAO,gBACP4zM,EAAWhsC,GAAa,WAAY,cAAc,EAElDqsC,EAAW,IAAI31M,GAAI,CACvB,WAAY,IAAIjG,GAAW,CACzB,QAAS,6BACT,KAAA2H,EACA,MAAO,QACP,SAAA4zM,CAAA,CACD,EACD,gBAAiB,0CAClB,EAEKM,EAAe,IAAI51M,GAAI,CAC3B,WAAY,IAAIjG,GAAW,CACzB,KAAA2H,EACA,MAAO,YACP,SAAA4zM,CAAA,CACD,EACD,gBAAiB,qCAClB,EACKjtO,GAAAutO,EAAa,WAAW,KAAM,iCAAkC,CAAC/2M,GAAW,IAAM,MAAM,CAAC,EAE/FrE,EAAK,OAAOm7M,EAAS,UAAWC,EAAa,SAAS,EACtDxsO,EAAU,OAAOoxB,CAAI,CACvB,CAEA,GAAGq7M,GAA0B,CACrB,MAAAzsO,EAAYiZ,EAAQ,oBAAoB,EAExCmY,EAAO,SAAS,cAAc,MAAM,EAEpCkH,EAAO,gBACP4zM,EAAWhsC,GAAa,WAAY,cAAc,EAElDwsC,EAAgB,IAAI91M,GAAI,CAC5B,WAAY,IAAIjG,GAAW,CACzB,QAAS,0BACT,KAAA2H,EACA,MAAO,aACP,SAAA4zM,CAAA,CACD,EACF,EAEKS,EAAW,IAAI/1M,GAAI,CACvB,WAAY,IAAIjG,GAAW,CACzB,QAAS,qBACT,KAAA2H,EACA,MAAO,QACP,SAAA4zM,CAAA,CACD,EACF,EAED96M,EAAK,OAAOs7M,EAAc,UAAWC,EAAS,SAAS,EACvD3sO,EAAU,OAAOoxB,CAAI,CACvB,CAEA,CACQ,MAAApxB,EAAYiZ,EAAQ,oBAAoB,EAExCmY,EAAO,SAAS,cAAc,MAAM,EAEpCkH,EAAO,cACP4zM,EAAWhsC,GAAa,WAAY,YAAY,EAEhD0sC,EAA4D,CAChE,CAAC,MAAO,wBAAwB,EAChC,CAAC,MAAO,wBAAwB,GAG5B10M,EAAO00M,EAAQ,IAAI,CAAC,CAACjzI,EAAQ3oF,CAAW,IAChC,IAAI4lB,GAAI,CAClB,WAAY,IAAIjG,GAAW,CACzB,QAAS3f,EACT,KAAAsnB,EACA,MAAOqhE,EACP,SAAAuyI,CAAA,CACD,EACF,CAGF,EAEK/8J,EAAS86J,GAAW,IAAM,CACxB,MAAAn5N,MAAW,KAEjB87N,EAAQ,QAAQ,CAAC,CAACjzI,CAAM,EAAGn4F,IAAQ,CACjC,MAAM/D,EAAMqT,EAAK,mBAAmB,cAAgB6oF,EAAQ,CAC1D,KAAM,UACN,OAAQ,UACT,EAEIzhE,EAAA12B,CAAG,EAAE,SAAS,YAAc/D,CAAA,CAClC,EACF,EAEI,mBAAc,iBAAiB,UAAW0xE,CAAM,EAEhD/9C,EAAA,OAAO,GAAG8G,EAAK,IAAKM,GAAQA,EAAI,SAAS,CAAC,EAC/Cx4B,EAAU,OAAOoxB,CAAI,CACvB,CAEO,eAAQ,IAAI7mB,CAAQ,CAC7B,CACF,CCjfA,MAAqBsiO,WAA4BltM,EAAe,CAAhE,kCAwHE,mBAAgB,MAAM3sB,GAAsB,CAGpC,WAAK,SAAS,gBAAgB,YAAY,EACxCA,EAAA,QAAS9U,GAAW,CAGpB,MAAA2+B,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,UAAW,KAAK,SAAS,KACzB,cAAe,GACf,WAAY,aACZ,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EAEA2+B,EAAc,UAAkB,cAAgBA,EAC3C,MAAC,IAAA8F,CAAO,EAAA9F,EAER+Y,EAAW,KAAK,SAAS,SAAS,IAAI13C,CAAM,EAClDykC,EAAI,YAAY,OAAO,KAAK,SAAS,SAASiT,CAAQ,CAAC,EAGvD,MAAMk3L,EAAgC,GACtC,KAAK,iBAAiB,QAAQ,CAAC53L,EAASnuB,IAAW,CAC9C,GAAAmuB,EAAQ,IAAIh3C,CAAM,EAAG,CAChB,MAAAc,EAAO,SAAS,cAAc,MAAM,EAC1C4T,GAAa5T,EAAMH,GAAckoB,EAAO,KAAK,CAAC,EAC9C+lN,EAAe,KAAK9tO,CAAI,CAC1B,EACD,EAEcwD,GAAKsqO,EAAgB,EAAK,EAClC,QAAS98N,GAAO,CACjB2yB,EAAA,gBAAgB,OAAO3yB,CAAE,EAC9B,EACF,GAyFH,oBAAkBtS,GAAmB,CAEhC,KAAK,OAAS,aACf,KAAK,WAAW,MAAM,QAAUA,EAAS,GAAK,OAChD,CACF,CA/OO,KACLqpB,EACAxE,EACAwqN,EACA,CACA,KAAK,eAAiBhmN,EACjB,YAASkoB,GAAK,KAAK,cAAc,EACtC,KAAK,KAAO1sB,EACZ,KAAK,cAAgBwqN,EAErB,KAAK,QAAQ,SACR,eAAU,UAAU,IAAI,6BAA6B,EAC1D,KAAK,WAAattM,GAAW,yBAA0B,CAAC,SAAU,GAAK,EAClE,gBAAW,MAAM,QAAU,OAE3B,YAAO,OAAO,KAAK,UAAU,EAEjB1kB,EAAA,KAAK,WAAY,SAAW,CACrC,MAAA66B,EAAW,KAAK,SAAS,YAAY,EAIrC7qB,EAAU,KAAK,OAAqC,OACvD,QAAK,OAAS,YAAcA,EAC7B,UAAU7W,KAAO6W,EACZ7W,EAAI,QAAQ,UAAU,IAAM,GAK/B,OAAO6W,EAAO7W,CAAG,UAEX6W,EACR,UAAU7W,KAAO6W,EACZ7W,EAAI,QAAQ,UAAU,IAAM,GAK/B,OAAO6W,EAAO7W,CAAG,EAIrB,MAAMlB,EAAoB,GAC1B,UAAUkB,KAAO0hC,EACZ1hC,EAAI,WACGlB,EAAA,KAAKkB,EAAI,SAAU,GAGtB,YAAO,OAAOA,CAAG,EAAI,GAI1B,IAAAyvB,EACD,KAAK,OAAS,WACfA,EAAOzlC,GAAW8U,EAAQ,SAAS9U,CAAM,EAEzCylC,EAAOzlC,GAAW,CAAC8U,EAAQ,SAAS9U,CAAM,EAG5C08B,GAAe,KAAK,OAAO,cAAe,CAAC18B,EAAQsD,IAAQ,CACrDmiC,EAAIzlC,CAAM,IACZ,KAAK,OAAO,cAAc,OAAOsD,EAAK,CAAC,EACvC,KAAK,OAAO,aAAa,OAAOA,EAAK,CAAC,EACxC,CACD,EAED,MAAMwrO,EAAQ,KAAK,OAAS,WAAa,iBAAmB,iBACtDC,EAAc,KAAK,OAAS,WAAa,gBAAkB,gBAC3DC,EAAY,KAAK,OAAqCF,CAAK,EAC3DG,EAAkB,KAAK,OAAqCF,CAAW,EAC1EC,GAAyBtyM,GAAAsyM,EAAU,CAAChvO,EAAQsD,IAAQ,CAClDwR,EAAQ,SAAS9U,CAAM,IACfgvO,EAAA,OAAO1rO,EAAK,CAAC,EACP2rO,EAAA,OAAO3rO,EAAK,CAAC,EAC9B,CACD,EAEA,KAAK,OAAqC,KAAK,OAAS,WAAa,iBAAmB,gBAAgB,EAAIwR,EAC5G,KAAK,OAAqC,KAAK,OAAS,WAAa,gBAAkB,eAAe,EAAI,MAAM,QAAQ,IAAIA,EAAQ,IAAK9U,GAAW,KAAK,SAAS,gBAAgB,iBAAiBA,CAAM,CAAC,CAAC,EAG5M,KAAK,cAAc,UAAU,KAAK,OAAQ,EAAK,EAC/C,KAAK,MAAM,CACV,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAAkvO,EAAezuL,GAA2B,CAC9C,KAAK,MAAQxgD,EAAU,QAAUwgD,EAAU,mCAAqCA,EAAU,oCAG5F,YAAK,eAAe,IAAIxgD,CAAS,EAAE,aAAcivO,CAAW,EAEvD,0BAAuB,IACrB,QAAQ,IAAI,CACjB,KAAK,SAAS,eAAe,mBAAmB,KAAK,MAAM1O,GAAY,CACrE,MAAM,QAAQ,IAAIA,EAAQ,OAAQ33M,GAAW,CAACsmN,GAAa,IAAItmN,EAAO,EAAE,CAAC,EAAE,IAAI,MAAMA,GAAW,CAE9F,MAAM/T,GADU,MAAM,KAAK,SAAS,eAAe,iBAAiB+T,EAAO,EAAE,GACrD,IAAK1lB,GAAMA,EAAE,MAAM,EAC3C,KAAK,iBAAiB,IAAI0lB,EAAQ,IAAI,IAAI/T,CAAO,CAAC,CACnD,EAAC,EACH,EAED,KAAK,SAAS,WAAW,eAAe,KAAM2rC,GAAc,CAC1DyuL,EAAYzuL,CAAS,EACtB,EACF,CACH,CA0CA,QAAS,CACP,KAAK,WAAW,MAAM,QAAU,KAAK,OAAS,WAAa,GAAK,OAChE,KAAK,SAAS,KAAK,OAAS,WAAa,mBAAqB,iBAAiB,EAE/E,MAAM53B,EAAS,KAAK,OAEdumN,EAAoB,IAAI/rM,GAAe,CAC3C,YAAa,GACb,KAAM,kBACP,EAEiB+rM,EAAA,UAAU,UAAU,IAAI,mBAAmB,EAEzD,IAAA/xN,EACD,KAAK,OAAS,WACLA,EAAA,CACR,cAAe,CAAC,IAAK,OAAQ,KAAM,4BAA4B,EAC/D,iBAAkB,CAAC,IAAK,UAAW,KAAM,yBAAyB,EAClE,aAAc,CAAC,IAAK,YAAa,KAAM,2BAA2B,GAG1DA,EAAA,CACR,SAAU,CAAC,IAAK,aAAc,KAAM,0BAA0B,EAC9D,aAAc,CAAC,IAAK,cAAe,KAAM,6BAA6B,EACtE,OAAQ,CAAC,IAAK,QAAS,KAAM,wBAAwB,EACrD,WAAY,CAAC,IAAK,aAAc,KAAM,0BAA0B,EAChE,KAAM,CAAC,IAAK,OAAQ,KAAM,sBAAsB,GAI/C,cAAW,IAAIk4B,GAAe,CACjC,WAAY,KAAK,iBAAiB,IAAI,EACtC,SAAU,KAAK,UACf,SAAU,KAAK,eACf,SAAU,CAAC,SAAS,EACpB,kBAAmB,KAAK,cACxB,YAAa,SACb,uBAAwB,cACxB,SAAU,KAAK,SAChB,EAEK,MAAAjjC,EAAI,SAAS,yBACnB,UAAU0D,KAAOqH,EAAS,CACxB,MAAM8S,EAASqJ,GAAO,qDAAsD,CAAC,KAAMnc,EAAQrH,CAAG,EAAE,IAAK,KAAMqH,EAAQrH,CAAG,EAAE,IAAK,GAC7Hma,EAAO,QAAQ,OAASna,EACxBma,EAAO,OAAO,KAAK,SAAS,SAAU,GACtC7d,EAAE,OAAO6d,CAAM,CACjB,CACkBi/M,EAAA,QAAQ,OAAO98N,CAAC,EAI5B,MAAA2+F,GAAiB,KAAK,OAAS,WAAapoF,EAAO,eAAkBA,EAAqC,gBAAgB,QAEhI,KAAK,SAAS,SAAW,IAAI,IAAIooF,CAAa,EAE9C,IAAIo+H,EAAe,GACnB,MAAM99H,EAAO,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,EAC5C,cAAS,IAAM,CAAC,CAAC,IAAKvxG,EAAQ,MAAAM,EAAO,OAAA23C,KACrC,KAAK,SAAS,SAAS,MAAQ,KAAK,OAASo3L,GAAgB,CAAChyN,EAAQrd,CAAM,GAC7Es+F,GAAe,aAAa,EACrB,IAGGiT,EAAK,CACf,IAAKvxG,EACL,MAAOqd,EAAQrd,CAAM,EAAIuE,EAAK8Y,EAAQrd,CAAM,EAAE,IAAI,EAAI,OACtD,OAAAi4C,EACA,aAAc56B,EAAQrd,CAAM,GAAG,IAChC,EAIE,cAAS,WAAW,OAAOovO,EAAkB,UAAW,KAAK,SAAS,WAAW,UAAU,gBAAgB,EAE3G,cAAS,WAAWn+H,CAAa,EACvBo+H,EAAA,GAEf,MAAMxiN,EAAUhE,EAAqC,OAClD,GAAAgE,EAAQ,UAAUqwB,KAAQrwB,EACxBxP,EAAQ,eAAe6/B,CAAI,GAAOrwB,EAAOqwB,CAA2B,GACrE5G,GAAmB84L,EAAkB,QAAQ,cAAc,kBAAkBlyL,CAAI,IAAI,CAAgB,CAG3G,CASA,qBAAsB,CACpB,OAAG,KAAK,WACD,cAAS,UAAU,SACxB,KAAK,SAAW,MAGX,MAAM,qBACf,CACF,CCxPA,MAAMoyL,GAAyB,GAS/B,MAAqBC,WAAyB9tM,EAAe,CAA7D,kCAWE,KAAQ,MAAsJ,EAAC,CAgB/J,OAAc,aAAc,CACnB,OACL,cAAe1pB,GAAa,6BAA6B,WAAW,EAExE,CAEA,aAAoB,aAAay3N,EAAkB,CACjD,MAAM3mN,EAAS,MAAM5oB,EAAU,SAAS,eAAe,UAAUuvO,CAAQ,EACzE,GAAG3mN,GAAQ,IAAM,wBAA0B,CAACA,EAAO,OAAO,eAAgB,CACxEiH,GAAa,YAAYqtE,GAAyB,CAChD,OAAAt0E,EACA,SAAU,GACX,EAED,MACF,CAEA,aAAMyjB,GAAkB,CACtB,aAAc,wCACd,mBAAqBzjB,EAA6C,OAAO,eAAiB,qBAAuB,sCACjH,OAAQ,CACN,QAAS,SACT,SAAU,EACZ,EACD,EAEM5oB,EAAU,SAAS,eAAe,mBACvC,CACE,EAAG,eACH,GAAIuvO,CACN,EACA,GAEJ,CAEO,KAAKjtO,EAAwDgtO,GAAiB,cAAe,CAC7F,eAAU,UAAU,IAAI,uBAAuB,EAC/C,aAAU,SAAS,cAAc,KAAK,EACtC,aAAQ,UAAU,IAAI,SAAS,EACpC,KAAK,QAAQ,OAAOhrO,EAAK,0BAA0B,CAAC,EAC/C,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,mBAAmB,EAEvD,KAAK,OAAS,EACd,KAAK,gBAAkB,GAElB,gBAAag9B,GAAW,6BAA6B,EAC1D,IAAIonB,EAAW,GACf,MAAM8mL,EAA4C,CAChD,KAAM,SACN,UAAW,SACX,KAAM,mBACN,QAAS,IAAM,CACV9mL,GAIH4mL,GAAiB,aAAa,KAAK,OAAO,EAAE,EAAE,KAAK,IAAM,CACvD,KAAK,MAAM,EACZ,EAAE,QAAQ,IAAM,CACJ5mL,EAAA,GACZ,CACH,GAEF,KAAK,QAAUqT,GAAiB,CAC9B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAACyzK,CAAkB,EAC7B,EACI,aAAQ,UAAU,IAAI,MAAM,EAEjC,KAAK,OAAO,OAAO,KAAK,WAAY,KAAK,OAAO,EAEhD,MAAMC,EAAe,IAAIrsM,GAAe,EAAE,EAEpCW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAErC,oBAAiB,IAAI5C,GAAW,CACnC,MAAO,iBACP,UAAWkuM,EAAA,CACZ,EAEYtrM,EAAA,OAAO,KAAK,eAAe,SAAS,EACpC0rM,EAAA,QAAQ,OAAO1rM,CAAY,EAExC,MAAM2rM,EAAe,CACnB1zN,EACA2zN,EACAx+M,EACAk0B,EACA9hB,IACG,CACG,MAAAzoB,EAAU,IAAIsoB,GAAe,CACjC,KAAMusM,EACN,QAAApsM,EACA,YAAa,GACd,EAEDzoB,EAAQ,UAAU,UAAU,IAAI,cAAekB,CAAS,EAElD,MAAA4zN,EAAa90N,EAAQ,yBAChB,OAAA80N,EAAA,UAAU,IAAI,mBAAmB,EAEpCz+M,EAAA,QAAQ,CAAC/tB,EAAGC,IAAQ,CAC1B,MAAM6sB,EAASqJ,GAAO,0DAA4Dl2B,IAAQ,EAAI,WAAa,kBAAmB,CAC5H,KAAMD,EAAE,KACR,KAAMA,EAAE,KACR,SAAUA,EAAE,WAAa,OAAY,GACtC,EAEEA,EAAE,OACAiiD,EAAAjiD,EAAE,IAAI,EAAI8sB,GAGf0/M,EAAW,OAAO1/M,CAAM,EACzB,EAEMpV,CAAA,EAGT,KAAK,eAAiB40N,EAAa,uBAAwB,gBAAiB,KAAK,sBAAwB,CAAC,CACxG,KAAM,MACN,KAAM,kCACN,WAAY,IACX,CACD,KAAM,2BACN,KAAM,aACN,KAAM,YACL,CACD,KAAM,8BACN,KAAM,cACN,KAAM,gBACL,CACD,KAAM,yBACN,KAAM,QACN,KAAM,UACL,CACD,KAAM,2BACN,KAAM,UACN,KAAM,cACL,CACD,KAAM,uBACN,KAAM,OACN,KAAM,MACP,GAAG,KAAK,MAAO,mBAAmB,EAEnC,KAAK,eAAiBA,EAAa,uBAAwB,gBAAiB,KAAK,sBAAwB,CAAC,CACxG,KAAM,QACN,KAAM,oBACN,WAAY,IACX,CACD,KAAM,6BACN,KAAM,OACN,KAAM,iBACL,CACD,KAAM,0BACN,KAAM,UACN,KAAM,oBACL,CACD,KAAM,4BACN,KAAM,YACN,KAAM,cACP,GAAG,KAAK,MAAO,mBAAmB,EAEnC,KAAK,YAAcA,EAAa,oBAAqB,cAAe,CAAC,CACnE,KAAM,MACN,KAAM,0BACN,WAAY,GACb,EAAG,GAAI,0BAA0B,EAElC,KAAK,WAAW,OACd,KAAK,iBACL,KAAK,QACLD,EAAa,UACb,KAAK,eAAe,UACpB,KAAK,eAAe,UACpB,KAAK,YAAY,WAGnB,KAAK,oBAAoB,EACzB,MAAMI,EAAyB,KAAK,eAAe,UAAU,cAAc,oBAAoB,EACzFC,EAAyB,KAAK,eAAe,UAAU,cAAc,oBAAoB,EAC/F,KAAK,kBAAoB,KAAK,YAAY,UAAU,cAAc,MAAM,EAExElzN,EAAiBizN,EAAuB,cAAc,MAAM,EAAkB,IAAM,CAC7E,YAAO,UAAUnB,EAAmB,EAAE,KAAK,KAAK,OAAQ,WAAY,IAAI,CAC5E,GAAC,eAAgB,KAAK,cAAe,GAExC9xN,EAAiBkzN,EAAuB,cAAc,MAAM,EAAkB,IAAM,CAC7E,YAAO,UAAUpB,EAAmB,EAAE,KAAK,KAAK,OAAQ,WAAY,IAAI,CAC5E,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAAqB,EAAkBC,GAAyB,CAC/C,GAAG,KAAK,eAAe,MAAM,UAAU,SAAS,OAAO,EACrD,OAGF,GAAG,CAAC,KAAK,eAAe,MAAM,OAAQ,CACpC,KAAK,eAAe,MAAM,UAAU,IAAI,OAAO,EAC/C,MACF,CAEA,IAAIC,EAAW,MAAM,KAAKJ,EAAuB,QAAQ,EAAoB,MAAM,CAAC,EAAE,OAAO,CAACh1N,EAAKhJ,IAAOgJ,GAAM,CAAC,CAAChJ,EAAG,MAAM,QAAS,CAAC,EAGrI,GAFWo+N,GAAA,KAAK,OAAO,cAAc,OAElC,CAACA,EAAS,CACF19M,GAAA,CAAC,YAAa,8BAA8B,EACrD,MACF,CAEK,gBAAW,aAAa,WAAY,MAAM,EAE3C,IAAA7mB,EACD,OAAC,KAAK,OAAO,IAGXskO,IACsBE,EAAA,IAGzBxkO,EAAU,KAAK,SAAS,eAAe,mBAAmB,KAAK,MAAM,GANrEA,EAAU,KAAK,SAAS,eAAe,mBAAmB,KAAK,MAAM,EAShEA,EAAQ,KAAMykO,IAChBH,GACD,KAAK,MAAM,EAGNG,EACR,EAAE,MAAOj/N,GAAkB,CACH,MAAAg/N,EAAA,GACpBE,IACD,KAAK,aAAaA,CAAqB,EACfA,EAAA,QAGvBl/N,EAAI,OAAS,0BACdmtF,GAAe,SAAS,EAEhB,cAAM,4BAA6BntF,CAAG,EAG1CA,CAAA,CACP,EAAE,QAAQ,IAAM,CACV,gBAAW,gBAAgB,UAAU,EAC3C,GAGc0L,EAAA,KAAK,WAAY,IAAM,CACtCmzN,EAAe,EAAI,CAClB,GAAC,eAAgB,KAAK,cAAe,GAEpC,IAAAK,EACAF,EAAuB,GAE3B,KAAK,eAAe,IAAIlwO,CAAS,EAAE,gBAAkB4oB,GAAW,CAC3D,KAAK,OAAO,KAAOA,EAAO,KACxBsnN,EACuBE,EAAAxnN,EAExB,KAAK,aAAaA,CAAM,EAE5B,CACD,EAED,KAAK,eAAe,IAAI,KAAK,eAAe,KAAK,EAAE,QAAS,IAAM,CAC3D,YAAO,MAAQ,KAAK,eAAe,MACxC,KAAK,mBAAmB,EACzB,EAEK,MAAAynN,EAAwC,KAAK,OAAS,OAAS,CACnE,KAAK,SAAS,eAAe,qBAAqB,KAAK,OAAO,GAAI,cAAc,EAChF,KAAK,SAAS,eAAe,qBAAqB,KAAK,OAAO,GAAI,eAAe,EACjF,KAAK,SAAS,eAAe,qBAAqB,KAAK,OAAO,GAAI,eAAe,GAC/E,GAEJ,OAAO,QAAQ,IAAI,CACjB,KAAK,SAAS,WAAW,SAAS,iBAAiB,EACnD,KAAK,SAAS,WAAW,SAAS,kBAAmB,EAAI,EAEzD,KAAK,qBAAuB/tO,EAAE,cAAc,KAAK,MAAMi+B,GAAO,CACtD,MAAA1oB,EAAS,MAAM0oB,EAAG,CACtB,UAAW,KAAK,iBAChB,KAAM,GACN,SAAU,GACV,MAAO,GACP,OAAQ,GACT,EAED,YAAK,UAAY1oB,EAEVC,GAAa,kBAAkBD,CAAM,EAC7C,EAED,GAAGw4N,CACJ,GAAE,KAAK,CAAC,CAACC,EAAsBC,CAA2B,IAAM,CAC5D,KAAK,OAAS,QACV,eAAU,KAAK,eAAgB,EAAI,EACxC,KAAK,WAAW,IAEhB,KAAK,cAAc,EACnB,KAAK,aAAa,GAGf,cAAS,eAAe,mBAAmB,KAAK,OAAO,EAAE,EAAE,MAAOr/N,GAAkB,CACpF,GAAAA,EAAI,OAAS,uBACd,MAAO,GAGH,MAAAA,CAAA,CACP,EAAE,KAAMs/N,GAAoB,CAC3B,QAAQ,IAAIA,CAAe,EAE3B,MAAMhkM,EAAa,YAEbvkC,EAAU,KAAK,YAAY,uBAAuB,EAClDsgB,MAAoD,IACpD49L,MAAmC,IAEnCsqB,EAAsB,IAAM,CAChC,KAAK,kBAAkB,UAAU,OAAO,OAAQloN,EAAI,MAAQgoN,CAA2B,GAGnFG,EAAkBxhM,GAAiC,CACvD,MAAM7U,EAAM8rL,EAAW,IAAIj3K,EAAK,GAAG,EAChC7U,IACDA,EAAI,UAAU,SACH8rL,EAAA,OAAOj3K,EAAK,GAAG,EACtB3mB,EAAA,OAAO8R,EAAI,SAAS,EACJo2M,IACtB,EAGIE,EAAa,CAACt2M,EAAU+iE,IAA2C,CACvE,MAAM/8F,EAAQ+8F,EAAe,OAASA,EAAe,QAAU,KAAK,OAAO,MACzE18F,GAAc08F,EAAe,KAAK,EAClCA,EAAe,IAAI,QAAQ,aAAc,EAAE,EACvCzkE,EAAWr0B,EAAK,wBAAyB,CAACA,EAAK,QAAS,CAAC84F,EAAe,MAAM,MAAM,CAAC,CAAC,CAAC,EACzF/iE,EAAA,MAAM,gBAAgBh6B,CAAK,EAC3Bg6B,EAAA,SAAS,gBAAgB1B,CAAQ,GAGjCi4M,EAAYxzI,GAA2C,CACrD,MAAA/iE,EAAM,IAAI5B,GAAI,CAClB,MAAO,GACP,SAAU,GACV,UAAW,GACZ,EAEDk4M,EAAWt2M,EAAK+iE,CAAc,EAE9B/iE,EAAI,UAAU,UAAU,IAAImS,EAAa,YAAa,QAAQ,EACxD,MAAAr6B,EAAQkoB,EAAI,YAAY,QAAQ,EAChCloB,EAAA,UAAU,IAAIq6B,EAAa,gBAAgB,EAC3Cr6B,EAAA,OAAOnR,GAAK,MAAM,CAAC,EAEjBiH,EAAA,OAAOoyB,EAAI,SAAS,EACxB9R,EAAA,IAAI8R,EAAI,UAAW+iE,CAAc,EAC1B+oH,EAAA,IAAI/oH,EAAe,IAAK/iE,CAAG,EAClBo2M,GAAA,EAGlB,IAAAprN,EACcmS,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,OACN,KAAM,WACN,QAAS,IAAMiR,GAAoBlgB,EAAI,IAAIlD,CAAM,EAAE,GAAG,GACrD,CACD,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,IAAM,CACP,MAAA+3E,EAAiB70E,EAAI,IAAIlD,CAAM,EACrC,KAAK,SAAS,eAAe,qBAC3B,KAAK,OAAO,GACZ+3E,EAAe,GACjB,EAAE,KAAK,IAAM,CACXszI,EAAetzI,CAAc,EAC9B,CACH,EACD,EACD,SAAUn1F,EACV,eAAgB,KAAK,eACrB,YAAcqE,GAAMgZ,EAAgBhZ,EAAE,OAAQ,KAAK,EACnD,OAAQ,CAACA,EAAGkuH,IAAYn1G,EAASm1G,CAAA,CAClC,EAEgB59G,EAAA,KAAK,kBAAmB,SAAW,CAC/C,GAAA2L,EAAI,MAAQ+nN,EAAsB,CACnCjyI,GAAe,iBAAiB,EAChC,MACF,CAEG,IAAC,KAAK,OAAO,MAAO,CACZ9rE,GAAA,CAAC,YAAa,8BAA8B,EACrD,MACF,CAEM,MAAA3F,EAAU,KAAK,OAAqC,OAC1D,GAAGA,GACa,CAAC,KAAK,sBAAuB,KAAK,qBAAqB,EAAE,KAAMuE,GACpEA,EAAQ,KAAMjB,GAAW,CAAC,CAACtD,EAAOsD,EAAO,IAAI,CAAC,CACtD,EAES,CACCqC,GAAA,CAAC,YAAa,6BAA6B,EACpD,MACF,CAGE,QAAK,OAAqC,gBAAgB,OAAQ,CAC3DA,GAAA,CAAC,YAAa,gCAAgC,EACvD,MACF,CAEA,MAAMmH,EAASpJ,GAAiB,CAAC,KAAK,iBAAiB,EAAG,EAAI,EAC1D,IACI,MAAAxuB,EAASiuO,EAAe,EAAK,EAChC,KAAEjuO,aAAkB,SACf,QAGR,MAAM8mB,EAAS,MAAM9mB,EACrB,KAAK,aAAa8mB,CAAM,EACxB,KAAK,KAAO,OACZ,KAAK,eAAiBA,EACtB,KAAK,mBAAmB,OACb,CACJ8Q,IACP,MACF,CAEK,cAAS,eAAe,qBAAqB,CAChD,GAAG,KAAK,OACR,EAAG,uBACE,OAAQ,KAAK,OAAO,IAAM,eAAiB,CAAC,eAAgB,EAAQ,OAAK,OAAO,MAAM,CAC5F,EAAE,KAAMm3M,GAA2B,CAC3Bn3M,IACPo3M,EAAmBD,EAAuB,MAAM,EAAE,QAAQ,IAAM,CAC9DD,EAASC,EAAuB,MAAM,EACvC,CACH,EAAI3/N,GAAkB,CAEjB,GADIwoB,IACJxoB,EAAI,OAAS,oBAAsBA,EAAI,OAAS,oBAAsBA,EAAI,OAAS,qBAAsB,CAC1GmtF,GAAe,iBAAiB,EAChC,eACQntF,EAAI,OAAS,oBAAsBA,EAAI,OAAS,sBAAuB,CAC5D4/N,IACnB,MACF,CAEM,MAAA5/N,CAAA,CACP,CACA,GAAC,eAAgB,KAAK,cAAe,GAElC,MAAA4/N,EAAsB1zI,GAA4C,CACtE,MAAM/iE,EAAM8rL,EAAW,IAAI/oH,GAAgB,GAAG,EACxC/jE,EAAM,KAAK,OAAO,UAAUq3E,EAAkB,EACpD,OAAAr3E,EAAI,OAAS,KAAK,OAClBA,EAAI,eAAiB+jE,EACjB/jE,EAAA,cAAc,iBAAiB,SAAU,IAAM,CACjDq3M,EAAetzI,CAAc,EAC9B,EACD/jE,EAAI,cAAc,iBAAiB,OAAS+jE,GAAmB,CACzD70E,EAAA,IAAI8R,EAAI,UAAW+iE,CAAc,EACrCuzI,EAAWt2M,EAAK+iE,CAAc,EAC/B,EAEM/jE,EAAI,MAAK,EAGDzc,EAAA3U,EAAUqE,GAAM,CAC/B,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,KAAK,EACxC8wF,EAAiB70E,EAAI,IAAIlD,CAAqB,EAChD+3E,GAIJ0zI,EAAmB1zI,CAAc,CAChC,GAAC,eAAgB,KAAK,cAAe,GAExCozI,EAAgB,QAAQI,CAAQ,EACjC,EACF,CACH,CAEA,oBAAqB,CACd,0BAAqB,KAAK,IAAM,CACnC,KAAK,UAAU,SAAW,GAC1B,KAAK,UAAU,MAAK,CACrB,CACH,CAEQ,cAAe,CAErB,KAAK,SAAS,WAAW,EACpB,aAAQ,UAAU,IAAI,MAAM,EAC5B,gBAAW,UAAU,OAAO,MAAM,EAE7B,UAAA3zL,KAAQ,KAAK,MAErB,KAAK,MAAMA,CAAI,EAAE,MAAM,QAAU,MAErC,CAEQ,YAAa,CACb,MAAAngC,EAAS,EAAE,KAAK,OACtB,KAAK,SAAS,KAAK,OAAS,SAAW,YAAc,kBAAkB,EAEpE,KAAK,OAAS,SACV,aAAQ,UAAU,OAAO,MAAM,EAC/B,gBAAW,UAAU,IAAI,MAAM,GAGtC,MAAM8L,EAAS,KAAK,OACpB,KAAK,eAAe,MAAQ8pJ,GAAc9pJ,EAAO,KAAK,EAEtD,MAAMgE,EAAUhE,EAAqC,OAC3C,UAAAq0B,KAAQ,KAAK,MAAO,CAC5B,MAAMpzC,EAAO,CAAC,CAAC+iB,IAASqwB,CAAuC,EAC/D,KAAK,MAAMA,CAAuC,EAAE,MAAM,QAAUpzC,EAAO,GAAK,MAClF,CAEA,MAAMuC,EAAW,CACf,iBACA,kBACA,IAAI,MAAM2J,GAAQ,CACd,IAAAm7F,EAAStoF,EAAqC7S,CAAG,EACrD,GAAG,CAACm7F,EACF,OAGI,MAAAp2F,EAAU,KAAK/E,CAAG,EAClBg7N,EAAKtyM,GAAkB,eAAe,CAAC,YAAa,GAAK,EAGzDuyM,EAAU,MAAMjxO,GACb,CAAC,CAAE,MAAM,KAAK,SAAS,mBAAmB,cAAcA,CAAM,IAAOA,EAAO,UAAY,MAAM,KAAK,SAAS,gBAAgB,QAAQA,EAAO,SAAU,IAAG,IAAM,OAAS,IAG1K+9B,EAAW,MAAMxI,GAAY47E,EAAQnxG,GAAWixO,EAAQjxO,CAAM,CAAC,EACrEmxG,EAAM,OAAS,EACTA,EAAA,KAAK,GAAGpzE,CAAQ,EAEtBozE,EAAQA,EAAM,QAER,MAAA+/H,EAAa,MAAM30J,GAAoB,CAC3C,MAAMznE,EAAUq8F,EAAM,OAAO,EAAG50B,CAAO,EACjCx+C,EAAW,MAAMxI,GAAYzgB,EAAS,MAAM9U,GACzCA,EAAO,SAAW,GAAO,CAAC,CAAC,MAAM,KAAK,SAAS,mBAAmB,cAAcA,CAAM,CAC9F,EAED,GAAG+c,IAAW,KAAK,OAAQ,OAE3B,MAAM7a,EAA+B,GAC/BslE,EAAazpC,EAAS,IAAK/9B,GAAW,CACpC,MAAA2+B,EAAgBD,GAAkB,aAAa,CACnD,OAAA1+B,EACA,cAAe,GACf,UAAW,GACX,WAAY,QACZ,aAAAkC,EACA,WAAY,GACZ,YAAa,CACX,WAAY,KAAK,iBAAiB,IAAI,CACxC,EACD,EACAy8B,EAAc,UAAkB,cAAgBA,EAC3C,MAAC,IAAA8F,CAAO,EAAA9F,EACV,OAAA8F,EAAA,gBAAgB,cAAc,SAC3BA,EAAI,YACZ,EAEK,cAAQ,IAAIviC,CAAY,EAC3B6a,IAAW,KAAK,SAChBi0N,EAAA,OAAO,GAAGxpK,CAAU,EAEpBme,IACEwrB,EAAM,QACExrB,EAAA,iBAAiB,YAAYphF,EAAK,sBAAuB,CAAC4sG,EAAM,MAAM,CAAC,CAAC,EACxExrB,EAAA,UAAU,OAAO,MAAM,GAEhCA,EAAS,OAAO,GAEpB,EAGE,IAAAA,EACJ,OAAGwrB,EAAM,QAAU,CAAC,KAAK,gBAAgBn7F,CAAG,IAC1C2vE,EAAWnsD,GAAO,8DAA+D,CAAC,KAAM,MAAO,GACtFmsD,EAAA,UAAU,IAAI,YAAa,aAAa,EACjD9oE,EAAiB8oE,EAAU,IAAM,CAC1B,qBAAgB3vE,CAAG,EAAI,GAC5Bk7N,EAAW,GAAQ,CAClB,GAAC,eAAgB,KAAK,cAAe,GACxCvrJ,EAAS,OAAOphF,EAAK,sBAAuB,CAAC4sG,EAAM,MAAM,CAAC,CAAC,GAGtD+/H,EAAW,KAAK,gBAAgBl7N,CAAG,EAAI,IAAW,CAAC,EAAE,KAAK,IAAM,CACrE,GAAG+G,IAAW,KAAK,OAEnB,MAAO,IAAM,CACHhC,EAAA,yBAAyB,OAAOi2N,CAAE,EAEvCrrJ,GAAYwrB,EAAM,QACHp2F,EAAQ,yBAChB,OAAO4qE,CAAQ,CACzB,CACF,CACD,EACF,EAED,OAAO,QAAQ,IAAIt5E,CAAQ,EAAE,KAAMsmF,GAAc,CAC5C51E,IAAW,KAAK,SAEnB,KAAK,oBAAoB,EAEtB,KAAK,WAEN,MAAM,KAAK,KAAK,UAAU,iBAAiB,uBAAuB,CAAC,EAAE,QAASjL,GAAOA,EAAG,cAAc,OAAQ,GAGhH6gF,EAAU,QAAS9oF,GAAaA,IAAY,IAC7C,CACH,CAEA,oBAAqB,CAChB,QAAK,OAAS,OAAQ,CACvB,MAAMs0B,EAAU,CAAC+b,GACf,CAAC,GAAG,KAAK,eAAgB,YAAa,EAAG,QAAS,CAAC,EACnD,CAAC,GAAG,KAAK,OAAQ,YAAa,EAAG,QAAS,CAAC,GAE7C,KAAK,WAAW,UAAU,OAAO,OAAQ,CAAC/b,CAAO,EACjD,KAAK,QAAQ,UAAU,OAAO,OAAQA,CAAO,CAC/C,CACF,CAEA,UAAUtV,EAAwBmsC,EAAoB,CACjDA,GACD,KAAK,eAAiBnsC,EACjB,YAASkoB,GAAKloB,CAAM,IAEzB,KAAK,OAASA,EACd,KAAK,WAAW,EAChB,KAAK,mBAAmB,EAE5B,CAEO,cAAcA,EAAyB,CACzCA,IAAW,QACZ,KAAK,UAAU,CACb,EAAG,eACH,GAAI,EACJ,MAAO,GACP,OAAQ,CAAC,EACT,aAAc,CAAC,EACf,cAAe,CAAC,EAChB,cAAe,CAAC,EAChB,cAAe,CAAC,EAChB,eAAgB,CAAC,EACjB,eAAgB,CAAC,GAChB,EAAI,EACP,KAAK,KAAO,WAEP,eAAUA,EAAQ,EAAI,EAC3B,KAAK,KAAO,OAEhB,CAEQ,qBAAsB,CACvB,oBAAe,UAAU,UAAU,OAAO,OAAQ,KAAK,QAAQ,IAAM,sBAAsB,CAClG,CAEQ,aAAaA,EAAuE,CACrF,eAAUA,EAAQ,EAAK,CAC9B,CACF,CCttBA,MAAqBsoN,WAA0B1vM,EAAe,CAA9D,kCAQE,KAAQ,gBAA6C,EAAC,CAGtD,OAAc,aAAc,CACnB,OACL,cAAe1pB,GAAa,6BAA6B,WAAW,EACpE,QAAS9X,EAAU,SAAS,eAAe,iBAAiB,EAEhE,CAEA,MAAc,aACZmwO,EACAtuO,EACAw4B,EACAub,EACA,CACI,IAAAhtB,EACAqI,EAAc,GAClB,MAAM/tB,EAAmB,GACtB,GAAAitO,EAAa,IAAM,wBACpBvnN,EAASunN,EAAa,OACtBl/M,EAAck/M,EAAa,gBACtB,CACIvnN,EAAAunN,EAEH,MAAAvjN,EAAUhE,EAAqC,QAAU,GAM/D,GALuB,OAAO,KAAKgE,CAAM,EAAE,SAKrB,EAAG,CACnB,IAAApnB,EACDonB,EAAO,SAAcpnB,EAAA,oBAChBonB,EAAO,aAAkBpnB,EAAA,uBACzBonB,EAAO,OAAYpnB,EAAA,kBACnBonB,EAAO,WAAgBpnB,EAAA,oBACvBonB,EAAO,OAAUpnB,EAAA,iBAEtBA,GACCtC,EAAA,KAAKoB,EAAKkB,CAAC,CAAC,CAElB,CAEG,IAACtC,EAAE,OAAQ,CACZ,MAAM2tJ,EAAS,MAAM,KAAK,SAAS,eAAe,iBAAiBjoI,EAAO,EAAE,EAC5E,IAAI+5B,EAAQ,EAAG2nE,EAAW,EAAGtuC,EAAS,EACtC,MAAM,QAAQ,IAAI60E,EAAO,IAAI,MAAMl/G,GAAW,CACzC,MAAM,KAAK,SAAS,gBAAgB,WAAWA,EAAO,MAAM,EAAK,EAAAqqC,EAC5D,MAAM,KAAK,SAAS,gBAAgB,YAAYrqC,EAAO,MAAM,EAAK,EAAA24E,EACnE,EAAA3nE,CACR,EAAC,EAECA,GAAOz/C,EAAE,KAAKoB,EAAK,QAAS,CAACq+C,CAAK,CAAC,CAAC,EACpC2nE,GAAUpnH,EAAE,KAAKoB,EAAK,WAAY,CAACgmH,CAAQ,CAAC,CAAC,EAC7CtuC,GAAQ94E,EAAE,KAAKoB,EAAK,SAAU,CAAC03E,CAAM,CAAC,CAAC,CAC5C,CACF,CAEA,GAAI3hD,EA8BCzR,EAAO,KAAOkoI,IACf15I,GAAeijB,EAAI,MAAO35B,GAAckoB,EAAO,KAAK,CAAC,EAGvDyR,EAAI,SAAS,YAAc,GAC3BA,EAAI,SAAS,OAAO,GAAGh2B,GAAKnB,CAAC,CAAC,MAnCvB,CACD,MAAAiuO,EAAchB,EAAa,IAAM,wBAYvC,GAXA91M,EAAM,IAAI5B,GAAI,CACZ,MAAO7P,EAAO,KAAOkoI,IAAiB,CAACqgF,EAAc7sO,EAAK,gBAAgB,EAAI5D,GAAckoB,EAAO,KAAK,EACxG,SAAUqI,EACV,UAAW,GACX,mBAAoBkgN,EAAc,MAAQ,OAC3C,EAEEjuO,EAAE,QACHm3B,EAAI,SAAS,OAAO,GAAGh2B,GAAKnB,CAAC,CAAC,EAG7B,CAACiuO,EAAa,CACf,MAAM5B,EAAW3mN,EAAO,GACrB,IAAC,KAAK,gBAAgBA,EAAO,EAAE,GAAKA,EAAO,KAAOkoI,GAAe,CAC5D,MAAA87E,EAAW0C,GAAiB,cACjB1yN,EAAAyd,EAAI,UAAW,SAAW,CACzC,MAAMzR,EAAS,MAAM,KAAK,SAAS,eAAe,UAAU2mN,CAAQ,EAC9Dl2M,EAAM,KAAK,OAAO,UAAUi2M,EAAgB,EAClDj2M,EAAI,cAAczQ,CAAM,EACxByQ,EAAI,KAAKuzM,CAAQ,CAChB,GAAC,eAAgB,KAAK,cAAe,EAC1C,CAEK,qBAAgBhkN,EAAO,EAAE,EAAIyR,EAElCA,EAAI,aAAa,CACnB,EAUF,MAAM9P,EAAM8P,EAAI,UAEhB,GAAGub,EAAQ,CACT,MAAMnE,EAAW7oB,EAA0B,QACxC6oB,IAAY,OAEbvM,GAAuB3a,EAAKA,EAAI,eAAiB1oB,EAAW4vC,CAAO,EAC3D5vC,GACRA,EAAU,OAAO0oB,CAAG,CAExB,CAEO,OAAA8P,CACT,CAEO,KAAK/3B,EAAyD4uO,GAAkB,cAAe,CAC/F,eAAU,UAAU,IAAI,wBAAwB,EACrD,KAAK,SAAS,4BAA4B,EAE1C,KAAK,WAAW,UAAU,UAAU,IAAI,cAAc,EAEjD,sBAAmB,SAAS,cAAc,KAAK,EAC/C,sBAAiB,UAAU,IAAI,mBAAmB,EAEjD,MAAA3tM,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,SAAS,EAC/BD,GAAM,CAAC,QAASC,EAAS,IAAK,wBAAyB,GAElD,qBAAkBhK,GAAO,4CAA6C,CACzE,KAAM,2BACN,KAAM,MACP,EAEI,oBAAiB,IAAI6J,GAAe,CACvC,KAAM,UACP,EACD,KAAK,eAAe,UAAU,UAAU,IAAI,MAAM,EAE7C,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,eAAe,QAAQ,OAAO,KAAK,IAAI,EAEvC,sBAAmB,IAAIA,GAAe,CACzC,KAAM,oBACP,EACD,KAAK,iBAAiB,UAAU,UAAU,IAAI,MAAM,EAEpD,KAAK,WAAW,OACd,KAAK,iBACLG,EACA,KAAK,gBACL,KAAK,eAAe,UACpB,KAAK,iBAAiB,WAGP3mB,EAAA,KAAK,gBAAiB,SAAW,CAC3C,MAAM,KAAK,kBAGd,KAAK,OAAO,UAAU0yN,EAAgB,EAAE,KAAK,EAF7CjxI,GAAe,SAAS,CAIzB,GAAC,eAAgB,KAAK,cAAe,GAExC,MAAM+yI,EAA2B,IAAM,CAChC,oBAAe,UAAU,UAAU,OAAO,OAAQ,CAAC,OAAO,KAAK,KAAK,eAAe,EAAE,MAAM,GAG5FnvO,EAA+B,GAC/BovO,EAAuB/uO,EAAE,QAAQ,KAAK,MAAMi+N,GAAY,CAC5D,UAAU33M,KAAU23M,EACf33M,EAAO,KAAO0oN,IAIjB,MAAM,KAAK,aAAa1oN,EAAQ,KAAK,KAAM,OAAW,EAAI,EAG5D,KAAK,eAAe,EAEKwoN,GAAA,CAC1B,EAED,OAAAnvO,EAAa,KAAKovO,CAAoB,EAEtC,KAAK,eAAe,IAAIrxO,CAAS,EAAE,gBAAiB,MAAM4oB,GAAW,CACnE,MAAM2oN,EAAiB,KAAK,gBAAgB3oN,EAAO,EAAE,EAClD2oN,EACD,MAAM,KAAK,aAAa3oN,EAAQ,KAAM2oN,CAAc,EAC5C3oN,EAAO,KAAO0oN,IACtB,MAAM,KAAK,aAAa1oN,EAAQ,KAAK,KAAM,OAAW,EAAI,EAGnCwoN,IAEzB,KAAK,oBAAoB,EAC1B,EAED,KAAK,eAAe,IAAIpxO,CAAS,EAAE,gBAAkB4oB,GAAW,CAC9D,MAAM2oN,EAAiB,KAAK,gBAAgB3oN,EAAO,EAAE,EAClD2oN,IAMD,KAAK,oBAAoB,EAEzBA,EAAe,UAAU,SAClB,YAAK,gBAAgB3oN,EAAO,EAAE,GAGdwoN,GAAA,CAC1B,EAED,KAAK,eAAe,IAAIpxO,CAAS,EAAE,eAAiByxE,GAAU,CAC5DA,EAAM,OAAQ89J,GAAa,CAAC,CAAC,KAAK,gBAAgBA,CAAQ,CAAC,EAAE,QAAQ,CAACA,EAAUlsO,IAAQ,CAEtF,MAAMxB,EADiB,KAAK,gBAAgB0tO,CAAQ,EACnB,UACjCrqM,GAAuBrjC,EAAWA,EAAU,cAAewB,EAAM,CAAC,EACnE,EACF,EAED,KAAK,eAAe,IAAIrD,CAAS,EAAE,iBAAkB,IAAM,CACzD,KAAK,eAAe,EACrB,EAED,KAAK,qBAAuBsC,EAAE,cAAc,KAAK,MAAMi+B,GAAO,CACtD,MAAA1oB,EAAS,MAAM0oB,EAAG,CACtB,UAAW,KAAK,iBAChB,KAAM,GACN,SAAU,GACV,MAAO,GACP,OAAQ,GACT,EAED,YAAK,UAAY1oB,EAEVC,GAAa,kBAAkBD,CAAM,EAC7C,EAEY5V,EAAA,KAAK,KAAK,oBAAoB,EAE3C,IAAI0pC,GAAS,CACX,KAAM,KAAK,KACX,WAAY,KAAK,iBAAiB,IAAI,EACtC,OAAQ,CAAC6lM,EAASrlM,IAAW,CAC3B,IAAIslC,EAAkB,GACZ,UAAA89J,KAAY,KAAK,gBAAiB,CACpC,MAAAl1M,EAAM,KAAK,gBAAgBk1M,CAAQ,EACnClsO,EAAMgiC,GAAWhL,EAAI,SAAS,EAC9Bo3C,EAAApuE,CAAG,EAAI,CAACksO,CAChB,CAEA99J,EAAQA,EAAM,OAAQ89J,GAAaA,IAAa,MAAS,EACrDvvO,EAAU,SACZgV,GAAiBy8D,EAAOq/E,EAAa,EAIlC,cAAS,eAAe,yBAAyBr/E,CAAK,CAC7D,EACA,WAAY,KAAK,WAClB,EAED,KAAK,oBAAoB,EAKlB,QAAQ,IAAIxvE,CAAY,CACjC,CAEA,oBAAqB,CACd,iCAAqB,KAAK,IAAM,CACnC,KAAK,UAAU,SAAW,GAC1B,KAAK,UAAU,MAAK,CACrB,EAEM,MAAM,oBACf,CAEQ,gBAAiB,CACA,KAAK,gBAAgB6uJ,EAAa,EAC1C,UAAU,UAAU,OAAO,OAAQ,CAAC9wJ,EAAU,OAAO,CACtE,CAEA,MAAc,iBAAkB,CAC9B,KAAM,CAACk7B,EAAOqlM,CAAO,EAAI,MAAM,QAAQ,IAAI,CACzC,KAAK,SAAS,WAAW,SAAS,SAAS,EAC3C,KAAK,SAAS,eAAe,iBAAiB,EAC/C,EAGD,OADsBA,EAAQ,OAAQ33M,GAAW,CAACsmN,GAAa,IAAItmN,EAAO,EAAE,CAAC,EAAE,OACxDsS,CACzB,CAEQ,qBAAsB,CAC5B,OAAO,KAAK,SAAS,eAAe,6BAA6B,KAAK,MAAMu2M,GAAqB,CAC/F,KAAK,iBAAiB,UAAU,UAAU,OAAO,OAAQ,CAACA,EAAiB,MAAM,EACjF,MAAM,KAAK,KAAK,iBAAiB,QAAQ,QAAQ,EAAE,MAAM,CAAC,EAAE,QAAS5/N,GAAOA,EAAG,OAAQ,GAEvF,UAAU+W,KAAU6oN,EAAkB,CACpC,MAAMp3M,EAAM,MAAM,KAAK,aAAazR,CAAM,EAC1C,KAAK,iBAAiB,QAAQ,OAAOyR,EAAI,SAAS,EAElD,MAAMnK,EAASmK,EAAI,YACFzd,EAAAsT,EAAQ,MAAM5jB,GAAM,CAGnC,GAFAqQ,GAAYrQ,CAAC,EAEV,CAAE,MAAM,KAAK,kBAAoB,CAClC+xF,GAAe,SAAS,EACxB,MACF,CAEOnuE,EAAA,aAAa,WAAY,MAAM,EAEtC,MAAM7d,EAAIuW,EAAO,OACjBvW,EAAE,eAAiB,GACnBA,EAAE,eAAiB,GACnBA,EAAE,cAAgB,GAElB,KAAK,SAAS,eAAe,mBAAmBA,EAAG,EAAI,EAAE,KAAK,IAAM,CAClEgoB,EAAI,UAAU,SACT,sBAAiB,UAAU,UAAU,OAAO,OAAQ,KAAK,iBAAiB,QAAQ,oBAAsB,CAAC,EAC/G,EAAE,QAAQ,IAAM,CACfnK,EAAO,gBAAgB,UAAU,EAClC,CACA,GAAC,eAAgB,KAAK,cAAe,EAC1C,EACD,CACH,CACF,CCvVA,MAAqBwhN,WAA4B/vM,EAAwB,CAChE,MAAO,CACP,eAAU,UAAU,IAAI,yBAAyB,EACtD,KAAK,SAAS,6CAA6C,EAErD,MAAAgwM,EAAiB7xO,GAIjB,CACE,MAAAgb,EAAU,IAAIsoB,GAAe,CACjC,KAAMtjC,EAAQ,KACf,EAEK8xO,EAAa,IAAIn5M,GAAI,CACzB,cAAe,IAAIxI,GAAc,CAAC,KAAMnwB,EAAQ,SAAU,QAAS,GAAK,EACxE,gBAAiB,UACjB,eAAgB,KAAK,eACrB,qBAAsB,GACvB,EAEK+xO,EAAoB,IAAIp5M,GAAI,CAChC,cAAe,IAAIxI,GAAc,CAAC,KAAM,iBAAkB,QAAS,GAAK,EACxE,gBAAiB,UACjB,eAAgB,KAAK,eACrB,qBAAsB,GACvB,EAEDnV,EAAQ,QAAQ,OAAO82N,EAAW,UAAWC,EAAkB,SAAS,EAEnE,gBAAW,OAAO/2N,EAAQ,SAAS,EAExC,MAAMg3N,EAAkB,CAAC,EAAGhyO,EAAQ,QAAQ,EACtCuP,EAAM,KAAK,SAAS,wBAAwB,kBAAkByiO,CAAe,GAClFziO,aAAe,QAAUA,EAAM,QAAQ,QAAQA,CAAG,GAAG,KAAM0iO,GAAmB,CAC7E,MAAMC,EAAgB,SAAW,CAC/B,MAAM9+K,EAAQ,MAAM,KAAK,SAAS,wBAAwB,QAAQ6+K,CAAc,EACrE,OAAAH,EAAA,cAAc,QAAU,CAAC1+K,EAClB2+K,EAAA,cAAc,QAAUE,EAAe,cAElD7+K,CAAA,EAGK8+K,IAET,mBAAc,iBAAiB,UAAW,SAAW,CAClD,MAAAluF,EAAO,CAAC8tF,EAAW,cAAc,QACjCK,EAAeJ,EAAkB,cAAc,QAElD,GAAA/tF,IAAU,MAAM,KAAK,SAAS,wBAAwB,QAAQiuF,CAAc,GAAME,IAAiBF,EAAe,cACnH,OAGI,MAAAG,EAAyCphM,GAAKihM,CAAc,EAClEG,EAAc,EAAI,0BACJA,EAAA,WAAapuF,EAAOppH,GAAa,EAC/Cw3M,EAAc,cAAgBD,EAE9B,KAAK,SAAS,wBAAwB,qBAAqBH,EAAiBI,CAAa,GACxF,CAAC,KAAM,GAAK,EAEf,KAAK,eAAe,IAAIlyO,CAAS,EAAE,kBAAoBw2C,GAAwC,CAC7F,MAAM27L,EAAW7L,GAAqB9vL,EAAO,KAAK,CAAC,EAChD12C,EAAQ,WAAaqyO,IACtBJ,EAAiBv7L,EAAO,gBACVw7L,IAChB,CACD,EACF,GAGWL,EAAA,CACZ,KAAM,4BACN,SAAU,+BACV,SAAU,mBACX,EAEaA,EAAA,CACZ,KAAM,sBACN,SAAU,yBACV,SAAU,mBACX,EAEaA,EAAA,CACZ,KAAM,wBACN,SAAU,2BACV,SAAU,wBACX,EAED,CACQ,MAAA72N,EAAU,IAAIsoB,GAAe,CACjC,KAAM,qBACP,EAEKgvM,EAAoB,IAAI35M,GAAI,CAChC,cAAe,IAAIxI,GAAc,CAAC,KAAM,gBAAiB,QAAS,GAAK,EACvE,gBAAiB,UACjB,eAAgB,KAAK,eACrB,qBAAsB,GACvB,EAEKoiN,EAAW,IAAI55M,GAAI,CACvB,cAAe,IAAIxI,GAAc,CAC/B,KAAM,sBACN,QAAS,GACT,SAAU8xK,GAAa,WAAY,gBAAiB,OAAO,EAC3D,eAAgB,KAAK,eACtB,EACD,gBAAiB,UACjB,eAAgB,KAAK,eACrB,qBAAsB,GACvB,EAEDxhM,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACzC0mO,EAAS,cAAc,QAAU1mO,EAAM,SAAS,cAAc,MAC/D,EAEDmP,EAAQ,QAAQ,OAAOs3N,EAAkB,UAAWC,EAAS,SAAS,EAEjE,gBAAW,OAAOv3N,EAAQ,SAAS,EAExC,KAAK,SAAS,wBAAwB,+BAA+B,KAAMxL,GAAY,CACrF8iO,EAAkB,cAAc,QAAU9iO,EAErC,mBAAc,iBAAiB,UAAW,IAAM,CAC7C,MAAAm5N,EAAW2J,EAAkB,cAAc,QAC9C9iO,IAAYm5N,GACb,KAAK,SAAS,wBAAwB,6BAA6B,CAACA,CAAQ,CAC9E,EACC,CAAC,KAAM,GAAK,EAChB,CACH,CACF,CACF,CCtJe,SAAS6J,GAAiB1iO,EAKzB,CACd,KAAM,CAACghB,EAAS2hN,CAAU,EAAI3iO,EAAM4lN,QAAU3mN,GAAae,EAAMghB,OAAO,EAElEZ,EAAgB,IAAIC,GAAc,CACtCyJ,OAAQ9pB,EAAM8pB,MAChB,CAAC,EAED,IAAIjyB,EAAQ,GACZwF,UAAa,IAAM,CACjB+iB,EAAciuF,iBAAiBrtF,EAAO,CAAE,EAErC,CAACnpB,GAASmI,EAAMygB,UACjB7iB,GAAQ,IAAMoC,EAAMygB,SAASO,EAAO,CAAE,CAAC,EAEzCnpB,EAAQ,EACV,CAAC,EAEDia,GAAYsO,EAAc0C,KAAK,EAAE,SAAU,IAAM,CAC/C6/M,EAAWviN,EAAc0C,MAAM9B,OAAO,CACxC,CAAC,EAEMZ,EAAcyC,KACvB,CCPe,MAAM+/M,WAAuBhxM,EAAe,CACzD,OAAcrI,aAAc,CAC1B,MAAO,CACLs5M,WAAYzyO,EAAUG,SAAS84G,WAAWy5H,mBAAmB,wBAAyB,CACpFC,UAAW,KACb,CAAC,EAIDC,WAAYpuN,QAAQC,QAAQ,EAAwB,EAExD,CAEO4T,KAAK/1B,EAAqD,CAC/D,KAAK6zE,OAAOlwD,UAAUS,IAAI,aAAa,EACvC,KAAK7kB,UAAUokB,UAAUS,IAAI,oBAAoB,EACjD,KAAK2mE,SAAS,iCAAiC,EAE/C,MAAMwlJ,EAAW/lO,GAAY2B,GAAY,CACvC,KAAKub,iBAAiBxG,IAAK,EAAC+I,UAAU9d,CAAO,EAE7C,KAAM,CAAC1B,EAAUkC,CAAW,EAAIjC,GAAW,EACrCmC,EAAYJ,KACZ+jO,EAAiB5mO,EAAW,IAAM,CACtC,MAAMvC,EAAMoD,EAASgmO,aAAaD,eAClC,OAAInpO,EAAIpK,OAIDoK,EAHE,CAACnJ,GAAKwyO,mBAAkB,CAAE,CAIrC,CAAC,EAED,IAAInxO,EACJihB,SACGkgC,GAAO,CAAAG,IAAAgpB,EAAA,OAAA58C,EACD1tB,EAAS,OAAA0tB,gBAAA48C,CAAA,EAATtqE,EAASsqE,CAAA,EACdhyC,KAAI,wBACJoJ,SAAO,QAAEp0B,EAAS,EAAK,wBAA0B,4CAA4C,MAC7F4zC,aAAW,OAAE,CAAC3N,GAAe,IAAM,CACjCmB,GAAakmB,KAAK,CAAC8yF,QAAS,cAAc,CAAC,CAC5C,EAAC,CAAC,MAAA1gI,UAAA,OAAA/L,GAEF8W,GAAM,KACLv5B,OAAK,QAAEiE,EAAK,qBAAqB,CAAC,MAClCm1G,qBAAmB,QAAA32F,EAChBwvN,GAAgB,KACf1hN,SAAO,QAAE7jB,EAASgmO,aAAaE,UAAU,EACzCv5M,OAAM,GACNrJ,SAAWO,GAAY,CACrB3hB,EAAY,eAAgB,aAAc2hB,CAAO,CACnD,CAAC,IAAA9N,IAIN8W,GAAM,KACLv5B,OAAK,QAAEiE,EAAK,yBAAyB,CAAC,MACtCm1G,qBAAmB,QAAA32F,EAChBwvN,GAAgB,KACf1hN,SAAO,QAAE7jB,EAASgmO,aAAazjO,OAAO,EACtCoqB,OAAM,GACNrJ,SAAWO,GAAY,CACrB3hB,EAAY,eAAgB,UAAW2hB,CAAO,CAChD,CAAC,QAGLspF,cAAY,OAAE,CAAC/qG,EAAS,CAAE,EAC1BkvB,UAAY/xB,GAAM,CACZ6C,EAAS,IACX7C,EAAE4mO,eAAc,EAChB38L,GAAakmB,KAAK,CAAC8yF,QAAS,cAAc,CAAC,EAE/C,CAAC,GAAA1sI,EAAA,IAEFA,EAAA,MAAA9V,EAASgmO,aAAazjO,OAAO,KAAAwT,EAAM8W,GAAM,KACxCv5B,OAAK,QAAEiE,EAAK,gBAAgB,CAAC,MAC7B40B,YAAU,QAAErW,EAAAiwN,MAAgB,EAACvzO,OAAS,CAAC,IACrC8E,GAAKyuO,IAAiBvqN,IAAKhc,GAASjI,EAAM,YAAWiI,CAAK,EAAC,CAAC,EAAG,EAAK,EACpEjI,EAAK,YAAa,CAACwuO,IAAiBvzO,MAAM,CAAC,CAAC,EAE9Cm6G,oBAAmB,GACnBr7E,UAAW,SAAW,CACpB,MAAM80M,EAAY,MAAMzkF,GAAa,GAAMokF,EAAgB,GAC3D7jO,EAAY,eAAgB,iBAAkBkkO,CAAS,CACzD,CACC,QAIAtxO,CACT,CAAC,EAEKiZ,EAAU,IAAIsoB,GAAe,EAAE,EAE/BgwM,EAA8B,IAAIlwN,IAElCxX,EAAU8Y,QAAQya,IAAI,CAC1B38B,EAAEmwO,WACFnwO,EAAEswO,UAAU,CACb,EAAE5sN,KAAK,CAAC,CAACysN,EAAYG,CAAU,IAAM,CACpC,MAAM16L,EAAwB,IAAI70B,IAC5BgwN,EAAeZ,EAAWlqN,IAAKinI,GAAaA,EAAS8jF,SAAS,EAE9D/kM,EAASC,KACfikM,EAAWc,OAAOX,CAAU,EAAEpsN,QAASgpI,GAAa,CAClD,GAAGt3G,EAASjqB,IAAIuhI,EAAS8jF,SAAS,EAAG,OACrCp7L,EAASxxB,IAAI8oI,EAAS8jF,SAAS,EAE/B,MAAMj5M,EAAM,IAAI5B,GAAI,CAClBohF,WAAY,IAAIrnF,GAAW,CACzB5rB,KAAM4oJ,EAASr1H,KACfA,KAAMoU,EACNv3B,MAAOw4I,EAAS8jF,SAClB,CAAC,EACD36M,SAAU62H,EAASgkF,WACrB,CAAC,EAEDJ,EAAUtiO,IAAI0+I,EAAS8jF,UAAWj5M,CAAG,CACvC,CAAC,EAED,MAAMpH,EAAO6G,GAAkB,CAAC,GAAGs5M,EAAUn5M,OAAM,CAAE,EAAIjjB,GAAU,CACjExW,GAAKizO,YAAYz8N,EAAOq8N,EAAal/H,SAASn9F,CAAK,CAAC,CACtD,CAAC,EAEDxW,GAAKkzO,iBAAgB,EAAG1tN,KAAMtP,GAAa,CACzC,MAAM2jB,EAAM+4M,EAAU5vN,IAAI9M,EAAS48N,SAAS,EAC5C,GAAG,CAACj5M,EAAK,CACP61E,QAAQjrE,MAAM,SAAU5K,EAAK3jB,CAAQ,EACrC,MACF,CAEA2jB,EAAIw/E,WAAWoE,iBAAiB,EAAI,CACtC,CAAC,EAEDnjG,EAAQ7S,QAAQ2tC,OAAO3iB,CAAI,CAC7B,CAAC,EAED,YAAK8xB,WAAWnP,OAAOi9L,EAAU/3N,EAAQjZ,SAAS,EAE3C6J,CACT,CACF,CCtJgB,SAAAioO,GAA4BvvN,EAAkC/jB,EAAoB00B,EAAgC,CAChI,MAAMja,EAAU,IAAIsoB,GAAe,CAAC,KAAM/iC,CAAM,GAE1C0V,EAAMgsL,GAAa,WAAY,eAAgB39K,CAAI,EACnDwvN,EAAwB,IAAI3jN,GAAc,CAC9C,KAAM,uBACN,KAAM,WACN,SAAU8xK,GAAahsL,EAAK,UAAU,EACtC,eAAAgf,CAAA,CACD,EACK8+M,EAAuB,IAAI5jN,GAAc,CAC7C,KAAM,2BACN,KAAM,UACN,SAAU8xK,GAAahsL,EAAK,SAAS,EACrC,eAAAgf,CAAA,CACD,EACK++M,EAAsB,IAAI7jN,GAAc,CAC5C,KAAM,yBACN,KAAM,SACN,SAAU8xK,GAAahsL,EAAK,QAAQ,EACpC,eAAAgf,CAAA,CACD,EACKg/M,EAAwB,IAAI9jN,GAAc,CAC9C,KAAM,uBACN,KAAM,WACN,SAAU8xK,GAAahsL,EAAK,UAAU,EACtC,eAAAgf,CAAA,CACD,EAED,OAAAja,EAAQ,QAAQ,OACd+e,GAA2B+5M,CAAqB,EAAE,UAClD/5M,GAA2Bg6M,CAAoB,EAAE,UACjDh6M,GAA2Bi6M,CAAmB,EAAE,UAChDj6M,GAA2Bk6M,CAAqB,EAAE,WAG7Cj5N,CACT,CAEA,MAAqBk5N,WAAgCryM,EAAwB,CACpE,MAAO,CACZ,KAAK,SAAS,oBAAoB,EAElC,MAAM7mB,EAAU64N,GAA4B,QAAS,0BAA2B,KAAK,cAAc,EAC9F,gBAAW,OAAO74N,EAAQ,SAAS,CAC1C,CACF,CC7CA,MAAqBm5N,WAA+BtyM,EAAwB,CACnE,MAAO,CACZ,KAAK,SAAS,mBAAmB,EAE3B,MAAAuyM,EAAgBxrM,GAAUyrM,GAAoB,CAC7C,cAAS,gBAAgB,SAASpyC,GAAa,WAAY,kBAAmB,eAAe,EAAGoyC,CAAO,GAC3G,IAAK,GAAO,EAAI,EAEbr5N,EAAU64N,GAA4B,OAAQ,yBAA0B,KAAK,cAAc,EAE3FS,EAAM,IAAM,KAGZC,EADM,GAAK,KAAO,KACAD,EAElBD,EAAUn0O,EAAU,SAAS,gBAAgB,cAC7CgX,EAAQ,KAAK,KAAK,KAAK,MAAMm9N,EAAUC,GAAOC,CAAS,CAAC,EACxDC,EAAO,IAAI9zO,GAAK,YAAY,CAChC,IAAK,4BACL,KAAM,CAACm7B,GAAYw4M,CAAO,CAAC,EAC5B,EACK3rM,EAAQ,IAAI8jM,GAAqB,0BAA2B,IAAMt1N,EAAO,EAAG,EAAG,EAAK,EACpFwxB,EAAA,SAAYxxB,GAAU,CAC1B,MAAMm9N,EAAWn9N,GAAS,EAAIq9N,EAAYD,EAAO,EAE5CE,EAAA,iBAAiB,CAAC,KAAM,CAAC34M,GAAYw4M,CAAO,CAAC,EAAE,EAEpDD,EAAcC,CAAO,GAGjB3rM,EAAA,eAAe,OAAO8rM,EAAK,OAAO,EAEhCx5N,EAAA,QAAQ,OAAO0tB,EAAM,SAAS,EAEjC,gBAAW,OAAO1tB,EAAQ,SAAS,CAC1C,CACF,CC1CA,MAAqBy5N,WAAgC5yM,EAAwB,CACpE,MAAO,CACZ,KAAK,SAAS,oBAAoB,EAElC,MAAM7mB,EAAU64N,GAA4B,QAAS,0BAA2B,KAAK,cAAc,EAC9F,gBAAW,OAAO74N,EAAQ,SAAS,CAC1C,CACF,CCUA,MAAM05N,GAAmF,CACvF,SAAU,uBACV,QAAS,iBACT,OAAQ,qBACR,SAAU,sBACZ,EAEA,MAAqBC,WAA6B9yM,EAAwB,CACjE,MAAO,CACZ,KAAK,SAAS,cAAc,EAE5B,CACQ,MAAA7mB,EAAU,IAAIsoB,GAAe,CAAC,KAAM,yBAA0B,QAAS,wBAAwB,EAE/FsxM,EAAoB,IAAIzkN,GAAc,CAC1C,KAAM,oBACN,KAAM,OACN,QAAS,CAACjwB,EAAU,SAAS,gBAAgB,OAAO,SACpD,eAAgB,KAAK,eACtB,EAEK20O,EAAU,IAAIl8M,GAAI,CACtB,cAAei8M,EACf,eAAgB,KAAK,eACtB,EAEKrkN,EAAW,IAAM,CACrBC,GAAiB,CAAC86M,CAAW,EAC3BnxL,GAAUj6C,EAAU,SAAS,aAAcgrO,GAAW,SAAS,YAAY,GAC3E/wL,GAAUj6C,EAAU,SAAS,gBAAiBgrO,GAAW,SAAS,eAAe,EAAC,EAGhF4J,EAAe,IAAM,CACpB,6BAAwBC,EAAU70O,EAAU,SAAS,aAAa,OAClE,6BAAwB80O,EAAU90O,EAAU,SAAS,aAAa,OAClE,6BAAwB+0O,EAAS/0O,EAAU,SAAS,aAAa,KAAMA,EAAU,SAAS,gBAAgB,aAAa,GAGxHg1O,EAAW9yM,GAAyD,CACxE,MAAM7I,EAAM,KAAK,OAAO,UAAU6I,CAAc,EAChD7I,EAAI,KAAK,EAET,KAAK,eAAe,IAAIA,EAAI,aAAa,EAAE,UAAW,IAAM,CAC7Cu7M,IACJvkN,GAAA,EACR,CAAC,KAAM,GAAK,GAGXwkN,EAAW,IAAIp8M,GAAI,CACvB,aAAc,qBACd,SAAU,GACV,UAAW,IAAM,CACfu8M,EAAQhB,EAAuB,CACjC,EACA,eAAgB,KAAK,eACtB,EAEKc,EAAW,IAAIr8M,GAAI,CACvB,aAAc,qBACd,SAAU,GACV,UAAW,IAAM,CACfu8M,EAAQT,EAAuB,CACjC,EACA,eAAgB,KAAK,eACtB,EAEKQ,EAAU,IAAIt8M,GAAI,CACtB,aAAc,oBACd,SAAU,GACV,UAAW,IAAM,CACfu8M,EAAQf,EAAsB,CAChC,EACA,eAAgB,KAAK,eACtB,EAEK7I,EAAc7xM,GAAO,sCAAuC,CAAC,KAAM,SAAU,KAAM,8BAA8B,EACvH3c,EAAiBwuN,EAAa,IAAM,CAChB/+L,GAAA,CAChB,aAAc,wCACd,mBAAoB,mCACpB,OAAQ,CACN,QAAS,OACX,EACD,EAAE,KAAK,IAAM,CACZ,MAAMjgB,EAAWpsB,EAAU,SAC3BosB,EAAS,gBAAkB0kB,GAAKk6L,GAAW,SAAS,eAAe,EACnE5+M,EAAS,aAAe0kB,GAAKk6L,GAAW,SAAS,YAAY,EAC7DhrO,EAAU,SAAWosB,EACrB,KAAK,SAAS,gBAAgB,SAAS,WAAYA,CAAQ,EAE9CwoN,IACbF,EAAkB,QAAU,CAAC10O,EAAU,SAAS,gBAAgB,OAAO,SACxE,EACF,EAED,MAAMi1O,EAAmB,IAAM,CACvB,MAAAv2J,EAAW,CAACg2J,EAAkB,QAE9BQ,EAAkBl1O,EAAU,SAAS,gBACxC0+E,EACDw2J,EAAgB,OAAO,SAAW,GAElC,OAAOA,EAAgB,OAAO,SAGhC,CAACL,EAAUC,EAAUC,CAAO,EAAE,QAAS16M,GAAQ,CAC7CA,EAAI,UAAU,UAAU,OAAO,cAAeqkD,CAAQ,EACvD,EAED,KAAK,SAAS,gBAAgB,SAASqjH,GAAa,WAAY,iBAAiB,EAAGmzC,CAAe,EAE1F7kN,GAAA,EAGOqkN,EAAA,MAAM,iBAAiB,SAAUO,CAAgB,EAClDA,IACJL,IAEb95N,EAAQ,QAAQ,OACd65N,EAAQ,UACRE,EAAS,UACTC,EAAS,UACTC,EAAQ,UACR3J,CAAA,EAGG,gBAAW,OAAOtwN,EAAQ,SAAS,CAC1C,CACF,CAEQ,wBAAwBuf,EAAUjO,EAAwC+nN,EAAkB,CAC9F,IAAAp+N,EACJ,MAAMnE,EAA2B,GAE3BujO,EAAW,OAAO,KAAK/oN,CAAQ,EAC/BgpN,EAAcD,EAAS,IAAKp/N,GAAQqW,EAASrW,CAAG,EAAIy+N,GAAuBz+N,CAAG,EAAI,MAAS,EAAE,OAAO,OAAO,EACjH,GAAG,CAACq/N,EAAY,QAAUjB,IAAY,EAC9Bp+N,EAAA,sBACD,CACC,MAAAs/N,EAAQD,EAAY,SAAWD,EAAS,OAQ9C,GAPGhB,IAAY,QACbp+N,EAAMs/N,EAAQ,6BAA+B,wBACxCzjO,EAAA,KAAK+pB,GAAYw4M,CAAO,CAAC,GAE9Bp+N,EAAMs/N,EAAQ,yBAA2B,oBAGxC,CAACA,EAAO,CACH,MAAA9wO,EAAW,SAAS,cAAc,MAAM,EAC9CA,EAAS,OAAO,GAAGF,GAAK+wO,EAAY,IAAKr/N,GAAQzR,EAAKyR,CAAG,CAAC,EAAG,GAAM,EAAK,CAAC,EACzEnE,EAAK,KAAKrN,CAAQ,CACpB,CACF,CAEA6S,GAAeijB,EAAI,SAAU/1B,EAAKyR,EAAKnE,CAAI,CAAC,CAC9C,CACF,CCzKA,MAAqB0jO,WAA4B9zM,EAAe,CACvD,MAAO,CACZ,YAAK,SAAS,kBAAkB,EAC3B,eAAU,UAAU,IAAI,0BAA0B,EAEhD,QAAQ,IAAI,CACjB,KAAK,SAAS,oBAAoB,iBAAiB,EACnD,KAAK,SAAS,oBAAoB,sBAAsB,CACzD,GAAE,KAAK,CAAC,CAAC+zM,EAAe12L,CAAkB,IAAM,CAC/CA,EAAqBA,EAAmB,OAAQI,GAAa,CAACA,EAAS,OAAO,QAAQ,EAEhF,MAAAnkC,EAAU,IAAIsoB,GAEdjJ,EAAO,iBACPJ,EAAO8kB,EAAmB,IAAKkB,GAAsB,CACnD,MAAA85D,EAAa,IAAIrnF,GAAW,CAChC,KAAA2H,EACA,KAAM4lB,EAAkB,MACxB,MAAOA,EAAkB,SACzB,WAAY,GACb,EAEK1lB,EAAM,IAAI5B,GAAI,CAClB,WAAAohF,EACA,YAAa,GACd,EAEU,OAAAA,EAAA,KAAK,UAAU,IAAI,sBAAsB,EAEnCp7D,GAAA,CACf,IAAApkB,EACA,IAAK0lB,EAAkB,YACvB,KAAM,QACP,EAEEA,EAAkB,WAAcw1L,EAAoC,UACrE17H,EAAW,iBAAiB,EAAI,EAG3Bx/E,CAAA,CACR,EAEKpH,EAAO6G,GAAkBC,EAAO/iB,GAAU,CACzC,cAAS,oBAAoB,mBAAmB,CAAC,EAAG,gBAAiB,SAAUA,EAAM,EAC3F,EAEO8D,EAAA,QAAQ,OAAOmY,CAAI,EACtB,gBAAW,OAAOnY,EAAQ,SAAS,EACzC,CACH,CACF,CCpCA,MAAqB06N,WAA+Bh0M,EAAe,CACjE,OAAc,aAAc,CACnB,OACL,YAAaxhC,EAAU,SAAS,mBAAmB,eAAe,EAClE,cAAeA,EAAU,SAAS,oBAAoB,iBAAiB,EAE3E,CAEO,KAAKsC,EAA6D,CAClE,eAAU,UAAU,IAAI,0BAA0B,EACvD,KAAK,SAAS,cAAc,EAE5B,MAAM8J,EAA2B,GAEjC,CACE,MAAM0O,EAAU,IAAIsoB,GAAe,CAAC,QAAS,0BAA2B,GAElEqyM,EAAqB,IAAIh9M,GAAI,CACjC,KAAM,OACN,aAAc,2BACd,UAAW,GACX,eAAgB,KAAK,eACrB,oBAAqB,GACtB,EAEKlQ,EAAwE,CAC5E,IAAK,qBACL,UAAW,2BACX,KAAM,uBAGFmtN,EAAgC,IAAM,CACvBD,EAAA,WAAW,gBAAgBnxO,EAAKikB,EAAIvoB,EAAU,SAAS,SAAS,OAAO,CAAC,CAAC,GAGhE01O,IAExB,MAAAC,EAAsB3+N,GAAsD,CAC7E,GAAAhX,EAAU,SAAS,SAAS,UAAYgX,EACjC,OAAAhX,EAAA,SAAS,SAAS,QAAUgX,EACR0+N,IACvB,KAAK,SAAS,gBAAgB,SAAS3zC,GAAa,WAAY,WAAY,SAAS,EAAG/qL,CAAK,GAGpFwgB,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,gBACN,KAAM,qBACN,QAASm+M,EAAmB,KAAK,KAAM,KAAK,GAC3C,CACD,KAAM,aACN,KAAM,2BACN,QAASA,EAAmB,KAAK,KAAM,WAAW,GACjD,CACD,KAAM,OACN,KAAM,sBACN,QAASA,EAAmB,KAAK,KAAM,MAAM,EAC9C,EACD,SAAUF,EAAmB,UAC7B,WAAY,KAAK,iBAAiB,IAAI,EACtC,eAAgB,GACjB,EAEK,MAAAxtB,EAAe,IAAIxvL,GAAI,CAC3B,aAAc,mBACd,YAAa,GACb,UAAW,IAAM,CACf,KAAK,OAAO,UAAU68M,EAAmB,EAAE,KAAK,CAClD,EACA,eAAgB,KAAK,eACtB,EAEKM,EAAsB,IAAM,CAC9BtzO,EAAA,cAAc,KAAM28C,GACjBA,EAAS,IAAM,oBACTA,EAAS,YAET,KAAK,SAAS,gBAAgB,uBAAuBA,EAAS,WAAW,CAEnF,EAAE,KAAMj9C,GAAQ,CACEy8C,GAAA,CACf,IAAKwpK,EACL,IAAAjmN,EACA,KAAM,QACP,EACF,GAGiB4zO,IAEpB,KAAK,eAAe,IAAI51O,CAAS,EAAE,iBAAkB,IAAM,CACzDsC,EAAIkzO,GAAuB,cACPI,GAAA,CACrB,EAEK,MAAAC,EAAkB,IAAIp9M,GAAI,CAC9B,KAAM,OACN,aAAc,iCACd,cAAe,IAAIxI,GAAc,CAC/B,KAAM,OACN,SAAU8xK,GAAa,WAAY,WAAY,MAAM,EACrD,eAAgB,KAAK,eACrB,OAAQ,GACT,EACD,eAAgB,KAAK,eACtB,EAEDjnL,EAAQ,QAAQ,OACdmtM,EAAa,UACbwtB,EAAmB,UACnBI,EAAgB,WAGb,gBAAW,OAAO/6N,EAAQ,SAAS,CAC1C,CAEA,CACE,MAAMA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,OAAQ,GAE5C0yM,EAAkB,IAAIr9M,GAAI,CAC9B,KAAM,OACN,aAAc,kCACd,cAAe,IAAIxI,GAAc,CAC/B,KAAM,gBACN,SAAU8xK,GAAa,WAAY,QAAS,SAAS,EACrD,eAAgB,KAAK,eACrB,OAAQ,GACT,EACD,eAAgB,KAAK,eACtB,EACKg0C,EAAc,IAAIt9M,GAAI,CAC1B,KAAM,QACN,aAAc,2BACd,cAAe,IAAIxI,GAAc,CAC/B,KAAM,YACN,SAAU8xK,GAAa,WAAY,QAAS,KAAK,EACjD,eAAgB,KAAK,eACrB,OAAQ,GACT,EACD,eAAgB,KAAK,eACtB,EAEDjnL,EAAQ,QAAQ,OACdg7N,EAAgB,UAChBC,EAAY,WAGT,gBAAW,OAAOj7N,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,mBAAoB,QAAS,uBAAuB,EAExF4yM,EAAsB,IAAIv9M,GAAI,CAClC,aAAc,mBACd,KAAM,UACN,cAAe,IAAIxI,GAAc,CAC/B,KAAM,qBACN,SAAU8xK,GAAa,WAAY,WAAY,kBAAkB,EACjE,eAAgB,KAAK,eACrB,OAAQ,GACT,EACD,eAAgB,KAAK,eACtB,EAEDjnL,EAAQ,QAAQ,OACdk7N,EAAoB,WAGjB,gBAAW,OAAOl7N,EAAQ,SAAS,CAC1C,CAEA,CACQ,MAAAA,EAAU,IAAIsoB,GAAe,CAAC,KAAM,2CAA4C,QAAS,kBAAkB,EAE3G6yM,EAAmC,GAEnCC,EAAkBp7N,EAAQ,yBAE1BhS,EAAgB,IAAIq+D,GACpBgvK,EAAmB,CAAC/nK,EAAmCp4B,EAA+B,WAAa,CACjG,MAAA3b,EAAM,IAAI5B,GAAI,CAClB,MAAO/3B,GAAc0tE,EAAW,KAAK,EACrC,gBAAiB,WACjB,iBAAkB,CAACA,EAAW,KAAK,EACnC,YAAa,GACb,UAAW,IAAM,CACFv+C,GAAA,YAAY6hC,GAAe,CAAC,GAAI0c,EAAW,GAAI,YAAaA,EAAW,YAAY,EAAE,KAAK,CACzG,EACA,eAAgB,KAAK,eACtB,EAED/zC,EAAI,UAAU,QAAQ,GAAK,GAAK+zC,EAAW,GAE3C/zC,EAAI,aAAa,EAEL47M,EAAA7nK,EAAW,EAAE,EAAI/zC,EAEvB,MAAA9P,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,WAAW,EAETyjD,GAAA,CAClB,IAAKI,EACL,UAAW7jD,EACX,MAAO,mBACP,cAAAzhB,EACA,MAAO,GACP,OAAQ,GACR,SAAU,GACV,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEGuxB,EAAA,UAAU,OAAO9P,CAAG,EAER2rN,EAAAlgM,CAAM,EAAE3b,EAAI,SAAS,GAGjC3uB,EAAUpJ,EAAE,YAAY,KAAM8zO,GAAgB,CAE5ChqO,QAAWgqO,EAAY,KAAK,IAAKhoK,GAAe+nK,EAAiB/nK,CAAU,CAAC,EAC3E,eAAQ,IAAIhiE,CAAQ,EAC5B,EAEDA,EAAS,KAAKV,CAAO,EAErB,KAAK,eAAe,IAAI1L,CAAS,EAAE,qBAAuB8Q,GAAQ,CAC5DmlO,EAAYnlO,EAAI,EAAE,GACpBqlO,EAAiBrlO,EAAK,SAAS,CACjC,CACD,EAED,KAAK,eAAe,IAAI9Q,CAAS,EAAE,mBAAqB8Q,GAAQ,CAC3DmlO,EAAYnlO,EAAI,EAAE,IACnBmlO,EAAYnlO,EAAI,EAAE,EAAE,UAAU,OAAO,EAC9B,OAAAmlO,EAAYnlO,EAAI,EAAE,EAC3B,CACD,EAEI,oBAAe,IAAI9Q,CAAS,EAAE,iBAAkB,CAAC,CAAC,KAAAokB,EAAM,MAAAqtD,KAAW,CACnErtD,IAAS,YAINqtD,EAAA,QAAQ,CAAC5vC,EAAIx+B,IAAQ,CACnB,MAAAg3B,EAAM47M,EAAYp0M,CAAE,EACtBxH,GAImB6K,GAAA7K,EAAI,UAAW67M,EAAiB7yO,CAAG,EAC3D,EACF,EAED,KAAK,eAAe,IAAIrD,CAAS,EAAE,eAAiB6hC,GAAO,CACnD,MAAAxH,EAAM47M,EAAYp0M,CAAE,EACtBxH,GAImB6K,GAAA7K,EAAI,UAAW67M,EAAiB,CAAC,EACzD,EAED,IAAIvqM,GAAS,CACX,KAAMuqM,EACN,WAAY,KAAK,iBAAiB,IAAI,EACtC,OAAQ,CAAC7yO,EAAK8oC,IAAW,CACjB,MAAAslC,EAAQ,MAAM,KAAKykK,EAAgB,QAAQ,EAAE,IAAKrkO,GAAQA,EAAmB,QAAQ,EAAE,EACxF,cAAS,mBAAmB,mBAAmB4/D,CAAK,CAC3D,EACD,EAEI,gBAAW,OAAO32D,EAAQ,SAAS,CAC1C,CAEO,eAAQ,IAAI1O,CAAQ,CAC7B,CACF,CCzQA,MAAqB42N,WAAuBxhM,EAAe,CAA3D,kCACE,KAAQ,QAOJ,EAAC,CAUL,MAAa,MAAO,CACb,eAAU,UAAU,IAAI,oBAAoB,EACjD,KAAK,SAAS,UAAU,EAExB,MAAM+7B,EAAUxB,GAAiB,CAC/B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,SACN,KAAM,qBACN,QAAS,IAAM,CACAlsC,GAAA,YAAYD,GAAW,SAAU,CAC5C,aAAc,SACd,mBAAoB,qBACpB,QAAS,CAAC,CACR,QAAS,SACT,SAAU,IAAM,CACT,cAAS,WAAW,QAC3B,EACA,SAAU,GACX,EACF,EAAE,KAAK,CACV,EACD,EACF,EAEI,aAAQ,KAAO0R,GAAW,MAAM,EAErC,KAAK,OAAO,OAAO,KAAK,QAAQ,KAAMi8B,CAAO,EAE7C,KAAK,QAAU,IAAIy6J,GACjB,KAAK,SACL,KAAK,WACL,KAAK,eACL,GACA,KAAK,UACJ/pM,GAAQ,CACH,IAAAtmB,EAAO,KAAK,QAAQ,QAAQ,iBAC7BsmB,IACDtmB,EAAOA,EAAK,wBAGTA,EAAA,kBAAkB,OAAO0uO,CAAe,CAC/C,GAEF,KAAK,QAAQ,OACR,aAAQ,QAAQr2O,EAAU,IAAI,EAC7B,MAAAohF,EAAc,KAAK,QAAQ,oBAAoB,EAE/Ci1J,EAAkB7zM,GAAa,CAAC,KAAM,YAAa,UAAW,wBAAwB,EAC5F5lB,EAAiBy5N,EAAiB,IAAM,CAChC,MAAAtuN,EAAS,SAAS,cAAc,QAAQ,EAC9C8H,GAAa,YAAY0S,EAAW,EAAE,KAAKxa,EAASuuN,GAAW,CACtDA,EAAA,EAAE,KAAMpyM,GACN,KAAK,SAAS,kBAAkB,mBAAmBA,CAAS,CACpE,EACF,CACA,GAAC,eAAgB,KAAK,cAAe,GACxC,KAAK,QAAQ,QAAQ,iBAAiB,kBAAkB,OAAOmyM,CAAe,EAE9E,MAAME,EAAwB,SAAW,CACvC,MAAMj2O,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQ,EACzD+1O,EAAgB,UAAU,OAAO,OAAQ/1O,EAAK,OAAO,IAAM,kBAAkB,GAGzDi2O,IACjB,oBAAe,IAAIv2O,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAAD,KAAY,CAC7DC,EAAU,OAASD,GACEw2O,GACxB,CACD,EAEK,MAAA/kB,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EAM1C,MAAMlrL,EAAI,CACRrd,EACAriB,EACAoS,EACAmgB,IAQG,CACH,GAAG,CAACA,EAAa,CACf,MAAMC,EAAKpgB,EAAmC,YAC3CogB,IAEDD,EAAc,IAAM,CAACC,EAAE,IAAI,CAAC,EAEhC,CAEO,OACL,KAAAnQ,EACA,KAAAriB,EACA,eAAgBoS,EAChB,YAAAmgB,EACA,KAAMA,IAAc,EACtB,EAgBIY,EATI,CACRuM,EAAE,SAAU,gCAAiCorM,EAAmB,EAChEprM,EAAE,OAAQ,eAAgBmuM,EAAoB,EAC9CnuM,EAAE,OAAQ,qCAAsCugM,EAAwB,EACxEvgM,EAAE,WAAY,yCAA0ComM,EAAqB,EAC7EpmM,EAAE,SAAU,0BAA2B4qM,EAAiB,EACxD5qM,EAAE,gBAAiB,eAAgBkvM,EAAsB,GAG5C,IAAKzrO,GAAS,CAC3B,KAAM,CAAC,KAAAkf,EAAM,KAAMpW,EAAa,eAAAqvB,EAAgB,YAAA/I,CAAe,EAAApvB,EAC/D,OAAO,IAAI0uB,GAAI,CACb,aAAc5lB,EACd,KAAAoW,EACA,UAAW,SAAW,CACpB,MAAMrX,EAAO7H,EAAK,KAAO,MAAMA,EAAK,KAAO,GACrCsvB,EAAM,KAAK,OAAO,UAAU6I,CAAqB,EACnD7I,EAAA,KAAK,GAAGznB,CAAI,EAEbynB,aAAesI,IAA2BxI,GAC1CE,EAAgC,cAAc,iBAAiB,eAAiB3tB,GAAY,CAC3F3B,EAAK,KAAO2B,EAAQ,KAAK,IAAMytB,EAAoB,GACpD,CAEL,EACA,eAAgB,KAAK,eACtB,EACF,EAEKq9M,EAAehE,GAAe,cAC/Bz4M,EAAA,KACH,KAAK,WAAa,IAAItB,GAAI,CACxB,aAAc,UACd,oBAAqB,IACrB,KAAM,iBACN,UAAW,SAAW,CAChB,KAAK,gBACP,MAAM,KAAK,uBAGb,MAAMY,EAAM,KAAK,OAAO,UAAUssM,EAAoB,EACtDtsM,EAAI,eAAiB,KAAK,eACtBA,EAAA,cAAc,iBAAiB,UAAW,IAAM,CAClD,KAAK,eAAiB,OACtB,KAAK,qBAAqB,EAAI,GAC7B,CAAC,KAAM,GAAK,EACfA,EAAI,KAAK,CACX,EACA,eAAgB,KAAK,eACtB,EACD,KAAK,YAAc,IAAIZ,GAAI,CACzB,aAAc,2BACd,oBAAqBn0B,EAAK,cAAc,EACxC,KAAM,WACN,UAAW,IAAM,CACf,KAAK,OAAO,UAAUkuO,EAAc,EAAE,KAAKgE,CAAY,CACzD,EACA,eAAgB,KAAK,eACtB,GAGQhlB,EAAA,OAAO,GAAGz3L,EAAK,IAAKM,GAAQA,EAAI,SAAS,CAAC,EAKhD,gBAAa,IAAI5B,GAAI,CACxB,aAAc,yBACd,KAAM,OACN,YAAa,CAAC,wBAAwB,EACtC,UAAW,IAAM,CACf8d,GAAa,KAAK,CACpB,EACA,eAAgB,KAAK,eACtB,EAEK,MAAAynE,EAAW,IAAIvlF,GAAI,CACvB,aAAc,oBACd,oBAAqB,GACrB,KAAM,OACN,YAAa,CAAC,sBAAsB,EACpC,UAAW,IAAM,CACf5I,GAAa,YAAY44F,EAAU,CACrC,EACA,eAAgB,KAAK,eACtB,EAED37G,GAAY2B,GAAY,CACjB,sBAAiB,UAAUA,CAAO,EACvC,MAAMomG,EAAQsS,KACdl6G,GAAa,IAAM,CACR+wG,EAAA,WAAW,YAAc,GAAKnJ,EAAM,EAC7CmJ,EAAS,UAAU,UAAU,OAAO,OAAQ,CAACnJ,GAAO,EACrD,EACF,EAEK,MAAA4hI,EAAc,IAAIh+M,GAAI,CAC1B,aAAc,qBACd,KAAM,OACN,UAAW,IAAM,CACf0L,GAAa,YAAY,CAC3B,EACA,eAAgB,KAAK,eACtB,EAEKxP,EAAQrwB,EAAK,KAAK,EAClBqwB,EAAA,UAAU,IAAI,iBAAiB,EACzB8hN,EAAA,MAAM,OAAO9hN,CAAK,EAExB,MAAA+hN,EAAiB,IAAItzM,GACZszM,EAAA,QAAQ,OAAOllB,CAAU,EAEpC,IAAA6T,EACA,MAAM9kO,GAAgB,6BACxB8kO,EAAiB,IAAIjiM,GACNiiM,EAAA,QAAQ,OAAO,KAAK,WAAW,UAAWrnH,EAAS,UAAWy4H,EAAY,SAAS,GAG/F,gBAAW,OAAO,GAAG,CACxB,KAAK,QAAQ,QAEbC,EAAe,UACfrR,GAAgB,WAChB,OAAO,OAAO,CAAC,EAEjB,MAAMsR,EAAqB,IAAM,CAC/BC,EAAkB9oM,GAAkB,aAAY,EAE9C,IAAA8oM,EACah6N,EAAA,KAAK,QAAQ,KAAM,IAAM,CAC5B,KAAK,OAAO,UAAUkxB,EAAiB,EAC/C,KAAK8oM,CAAe,CACvB,GAAC,eAAgB,KAAK,cAAe,GACrBD,IAMnB,KAAK,eAAe,IAAI32O,CAAS,EAAE,cAAgBsG,GAAW,CACzDtG,EAAU,KAAK,SAAS,IAAMsG,GACZqwO,GACrB,CACD,EAED7+N,GAAa,kBAAkB,EAE/B,KAAK,qBAAqB,GAEzB,MAAMspE,GAAa,CACtB,CAEQ,kBAAkBy1J,EAAqB,CAC1C,QAAK,0BAA4B,CAACA,EAAW,OAAO,KAAK,yBAEtD,MAAAnrO,EAAU,KAAK,yBAA2B,KAAK,SAAS,WAAW,UAAU,2BAA2B,EAC7G,QAAQ,IAAM,CACV,KAAK,2BAA6BA,IACnC,KAAK,yBAA2B,OAClC,CACD,EAEM,OAAAA,CACT,CAEO,qBAAqBmrO,EAAqB,CAC/C,OAAO,KAAK,kBAAkBA,CAAS,EAAE,KAAMjO,GAAU,CACvD,KAAK,eAAiBA,EAAM,eAC5B,KAAK,WAAW,WAAW,YAAc,GAAK,KAAK,eAAe,OACnE,CACH,CAEO,qBAAsB,CAC3B,YAAK,QAAQ,UACN,MAAM,qBACf,CACF,CCvUA,MAAqBkO,WAAyBt1M,EAAe,CAA7D,kCACE,KAAQ,aAAyC,KAO1C,MAAO,CACP,eAAU,UAAU,IAAI,uBAAuB,EACpD,KAAK,SAAS,YAAY,EAE1B,KAAK,WAAa,IAAIc,GAAYwB,GAAY,CAC5C,KAAK,aAAeA,CAAA,CACrB,EAEK,MAAAhpB,EAAU,IAAIsoB,GAAe,CACjC,QAAS,sCACV,EAEKW,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAErC,2BAAwB,IAAI5C,GAAW,CAC1C,MAAO,mBACP,UAAW,IACZ,EAEI,kCAA+B,IAAIA,GAAW,CACjD,MAAO,iCACP,UAAW,IACX,eAAgB,GACjB,EAEY4C,EAAA,OACX,KAAK,sBAAsB,UAC3B,KAAK,6BAA6B,WAGpC,MAAM+4L,EAAiB,IAAM,CACtB,aAAQ,UAAU,OAAO,aAAc,CAAC,CAAC,KAAK,sBAAsB,MAAM,QAC7E,CAAC,KAAK,sBAAsB,MAAM,UAAU,SAAS,OAAO,GAC5D,CAAC,KAAK,6BAA6B,MAAM,UAAU,SAAS,OAAO,CAAC,GAGxE,KAAK,sBAAsB,MAAM,iBAAiB,QAASA,CAAc,EACzE,KAAK,6BAA6B,MAAM,iBAAiB,QAASA,CAAc,EAEhF,KAAK,QAAUt6L,GAAa,CAAC,KAAM,YAAa,GAE/B5lB,EAAA,KAAK,QAAS,IAAM,CAC7B,MAAAvc,EAAQ,KAAK,sBAAsB,MACnC02O,EAAQ,KAAK,6BAA6B,MAEhD,KAAK,QAAQ,SAAW,GACnB,cAAS,gBAAgB,cAAc,CAC1C,MAAA12O,EACA,MAAA02O,EACA,UAAW,GACZ,EAAE,KAAMlqM,GAAc,CAClB,KAAK,cACN,KAAK,aAAa,EAAE,KAAM3I,GAAc,CACtC,KAAK,SAAS,gBAAgB,UAAU2I,EAAW3I,CAAS,EAC7D,EAGHC,GAAa,aAAa,CAAC,OAAQ0I,EAAU,SAAS,EAAI,EAAE,EAE5DuqK,GAAe,qBAAqB,IAAI,EACxC,KAAK,OAAO,UAAUx2J,EAAgB,EAAE,KAAK,CAC3C,KAAM,UACN,UAAW,GACX,MAAO,kBACP,YAAa,gBACb,QAAU/rC,GACD,KAAK,SAAS,gBAAgB,gBAAgBg4B,EAAWh4B,CAAO,CACzE,CACD,EACF,CACA,GAAC,eAAgB,KAAK,cAAe,GAEnC,aAAQ,OAAO,KAAK,OAAO,EAChCiG,EAAQ,QAAQ,OAAO,KAAK,WAAW,UAAWipB,CAAY,EACzD,gBAAW,OAAOjpB,EAAQ,SAAS,CAC1C,CAEO,qBAAsB,CAC3B,YAAK,WAAW,QAChB,KAAK,aAAe,KACpB,KAAK,sBAAsB,MAAQ,GACnC,KAAK,6BAA6B,MAAQ,GAC1C,KAAK,QAAQ,SAAW,GACjB,MAAM,qBACf,CACF,CCjGA,MAAqBk8N,WAA2BnnN,EAAa,CAC3D,aAAc,CACN,8DAAyD,CAAC,SAAU,GAAM,YAAa,MAAO,MAAO,kBAAkB,EAC7H,KAAK,UAAU,CACjB,CAEA,MAAc,WAAY,CACPjT,EAAA,KAAK,WAAY,IAAM,CAChC,MAAAlR,EAAU,KAAK,SAAS,gBAAgB,cAAc0gD,EAAe,MAAO6qL,EAAmB,MAAOvoL,EAAc,KAAK,EAE/HhjD,EAAQ,KAAK,IAAM,CACjB,KAAK,KAAK,CACZ,EAAIwF,GAAkB,CACjBA,EAAI,OAAS,YACLqhB,GAAA,CAAC,YAAa,oCAAoC,EAC3D2kN,EAAS,SAAW,GACtB,CACD,EAEDA,EAAS,gBAAgBxrO,CAAO,CAC/B,GAAC,eAAgB,KAAK,cAAe,GAExC,MAAMqiC,EAA4B,GAC5BxjB,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAa,EACzB,MAAA6hC,EAAiB,IAAIjrB,GAAW,CACpC,MAAO,YACP,KAAM,sBACN,UAAW,GACX,SAAU,GACX,EACcirB,EAAA,UAAU,UAAU,IAAI,kBAAkB,EACnD,MAAA6qL,EAAqB,IAAI91M,GAAW,CACxC,MAAO,WACP,KAAM,0BACN,UAAW,GACZ,EACKutB,EAAgB,IAAIG,GAAc,CAAC,SAAU,EAAK,GAC5C9gB,EAAA,KAAKqe,EAAgB6qL,EAAoBvoL,CAAa,EAElE,MAAMjB,EAAU,IAAM,CACpB,MAAMtzB,EAAOiyB,EAAe,MAAQ,IAAM6qL,EAAmB,MAE7DC,EAAS,WAAW,OAAO,CAAC,UAAW/8M,CAAK,IAG9C,KAAK,eAAe,IAAIiyB,EAAe,KAAK,EAAE,QAASqB,CAAO,EAC9D,KAAK,eAAe,IAAIwpL,EAAmB,KAAK,EAAE,QAASxpL,CAAO,EAElEiB,EAAc,SAAW,IAChB,CAAC,CAACA,EAAc,MAAM,MAAM,IAAI,EAGzC,MAAMpuD,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQ,EACnD4D,EAAYmoD,GAAkB/rD,EAAK,KAAK,EAC3C4D,EAAU,OACGwqD,EAAA,MAAQ,IAAMxqD,EAAU,KAAK,cAGvC,MAAAgzO,EAAW,IAAInvM,GAAS,CAC5B,YAAAgG,EACA,eAAgB,KAAK,eACrB,gBAAiB,GACjB,QAAS,KAAK,WACd,WAAY,IACZ,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAEDxjB,EAAI,OAAO6hC,EAAe,UAAW6qL,EAAmB,UAAWC,EAAS,WAAW,IAAI,EAC3F,KAAK,UAAU,OAAO3sN,EAAKmkC,EAAc,SAAS,EAElD,KAAK,KAAK,CACZ,CACF,CCjEA,MAAqByoL,WAAuB31M,EAAe,CAMlD,MAAO,CACZ,KAAK,UAAU,GAAK,qBAIpB,MAAM0kM,EAAS1jM,GAAa,CAAC,KAAM,MAAO,UAAW,aAAa,EAC7D,aAAQ,OAAO0jM,CAAM,EAE1BtpN,EAAiBspN,EAAQ,IAAM,CAC7Br2M,GAAa,YAAYmnN,EAAkB,CAC1C,GAAC,eAAgB,KAAK,cAAe,GAEnC,iBAAc,IAAIn2M,GAAY,CACjC,YAAa,SACb,SAAW7pB,GAAU,CACnB,KAAK,aAAaA,CAAK,CACzB,EACD,EAED,KAAK,eAAe,IAAIhX,CAAS,EAAE,kBAAmB,MAAMsG,GAAW,CACrE,MAAMuvI,EAAY,MAAM,KAAK,SAAS,gBAAgB,UAAUvvI,CAAM,EAChEvG,EAASuG,EAAO,WACnBuvI,EAAgB,oBAAe,IAAI91I,CAAM,EAClC,oBAAe,OAAOA,CAAM,EACvC,EAED,KAAK,MAAM,YAAY,KAAK,YAAY,SAAS,EAEjD,KAAK,qBAAuB0P,KAE5B,MAAM2nO,EAAiB,KAAK,eAAiB,SAAS,cAAc,KAAK,EACpE,gBAAW,OAAOA,CAAc,EAErC,KAAK,aAAa,CAIpB,CAEU,YAAa,CACf,MAAAC,EAAiB,IAAIvvM,GAAe,CACxC,SAAU,KAAK,SACf,WAAY,KAAK,iBAAiB,IAAI,EACvC,EACKzD,EAAOgzM,EAAe,KAC5B,OAAAhzM,EAAK,GAAK,WACLA,EAAA,UAAU,IAAI,oBAAoB,EACvC5F,GAAkB,qBAAqB,CACrC,KAAA4F,EACA,QAAS,IAAM,CACb,KAAK,MAAM,CACb,EACA,YAAa,OACb,WAAY,GACb,EACMgzM,CACT,CAEU,SAAU,CAClB,KAAK,qBAAqB,OAI5B,CAEU,oBAAqB,CAC1B9iN,IAAa,CAAC0uM,GAAS,EAAI,GACzB,iBAAY,MAAM,OACzB,CAEO,aAAapsN,EAAgB,CAClC,KAAK,qBAAqB,QACpB,MAAAnV,EAAa,KAAK,qBAAqB,IAAI,EACjD,KAAK,WAAW,iBAAmB,KACnC,KAAK,eAAe,kBAEf,cAAS,gBAAgB,mBAAmBmV,EAAO,OAAW,QAAQ,EAAE,KAAM6xL,GAAa,CAC3F,IAAChnM,IACF,OAGF,MAAM21O,EAAiB,KAAK,eAAiB,KAAK,WAAW,EAE7D,IAAIC,EAAa,IAAM,CACrB,MAAMxgM,EAAYrL,GAAW,OAAS,GAAK,KAAO,EACtCi9J,EAAS,OAAO,EAAG5xJ,CAAS,EAEpC,QAAS/2C,GAAW,CACtBs3O,EAAe,IAAIt3O,CAAM,EAC1B,EAEG2oM,EAAS,SACE4uC,EAAA,OACb,KAAK,WAAW,iBAAmB,KACrC,EAGSA,IACN,gBAAW,iBAAmB,IAAM,CACpCA,EACUA,IAEX,KAAK,WAAW,iBAAmB,IACrC,EAGalgO,GAAA,KAAK,eAAgBigO,EAAe,IAAI,EACxD,CACH,CACF,CC9HA,MAAqBE,GAArB,MAAqBA,WAAuB/1M,EAAe,CAOlD,MAAO,CASZ,GARA,KAAK,YAAc/C,GAAkB,SAErC,KAAK,UAAU,GAAK,2BACpB,KAAK,SAAS,eAAe,EAExB,YAAO,UAAU,IAAI,gBAAgB,EACrC,aAAQ,UAAU,IAAI,gBAAgB,EAExC,CAACA,GAAkB,IAAI84M,GAAe,QAAQ,EAAG,CAClD,KAAM,CAAC,GAAAxG,EAAI,WAAAhsL,CAAU,EAAItmB,GAAkB,EAAE,CAC3C,MAAO,OACP,GAAI84M,GAAe,SACnB,QAASjG,EAAA,CACV,EACDvsL,EAAW,OAAOgsL,CAAE,CACtB,CAEA,MAAMyG,EAAuB,KAAK,qBAAuB,SAAS,cAAc,KAAK,EAChEA,EAAA,UAAU,IAAI,cAAc,EAE5C,YAAO,MAAMA,CAAoB,EAEtC,MAAMzyL,EAAatmB,GAAkB,IAAI84M,GAAe,QAAQ,EAAE,WAClE,YAAK,WAAW,UAAU,YAAYxyL,EAAW,SAAS,EAC/CA,EAAA,sBAAsB,KAAK,SAAS,EAIxCtmB,GAAkB,wBAAwB84M,GAAe,QAAQ,EAAE,KAAK,CAAC,CAAC,OAAAhzN,EAAQ,cAAAhD,KAAmB,CAC1G,GAAGgD,EACM,OAAAhD,CACT,CACD,CACH,CAEQ,eAAgB,CACjB,oBAAiBmC,GAAO,IACpB+zL,GAAY,CACjB,SAAU,KAAK,OACf,cAAe,KAAK,UACpB,cAAe,IAAMh5K,GAAkB,IAAI84M,GAAe,QAAQ,EAAE,WAAW,UAC/E,cAAe,KAAK,QACpB,QAAS,GACT,QAAS,IACV,EACA,KAAK,oBAAoB,CAC9B,CAGA,oBAAqB,CACnB,KAAK,cAAc,EACnB94M,GAAkB,IAAI,KAAK,WAAW,EAAE,MAAM,CAChD,CAEA,SAAU,CACR,KAAK,WAAW,mBAAqB,OACnBA,GAAA,wBAAwB,KAAK,WAAW,CAC5D,CAEA,qBAAsB,CACpB,YAAK,iBAAiB,EACtB,KAAK,eAAiB,OACtBA,GAAkB,IAAI84M,GAAe,QAAQ,EAAE,MAAM,EAC9C,MAAM,qBACf,CACF,EAxEEA,GAAe,SAA2BjG,GAD5C,IAAqBmG,GAArBF,GCWA,MAAqBG,WAA2Bl2M,EAAe,CAA/D,kCAEE,KAAQ,kBAA6B,GA6I7B,cAAciyH,EAAkB,CACnC,OAAAzzJ,EAAU,SAAS,eAAiB,QAClCyzJ,EAAW,QACLnvJ,EAAK,YAAa,CAAC,KAAK,MAAMmvJ,EAAW,IAAI,CAAC,CAAC,EAE/CnvJ,EAAK,YAAa,CAAC,KAAK,MAAMmvJ,EAAW,KAAK,CAAC,CAAC,EAGtDA,GAAY,IACNnvJ,EAAK,eAAgB,CAACmvJ,EAAW,GAAI,CAAC,EAEtCnvJ,EAAK,cAAe,CAACmvJ,CAAQ,CAAC,CAG3C,CAkDQ,eAAgB,CACnB,CAAC,KAAK,qBAAuB,KAAK,oBACrC,KAAK,kBAAoB,GAEzBphI,GAAM,mFAAmF,EAEzF,KAAK,SAAS,gBAAgB,WAC5B,KAAK,oBAAoB,SACzB,KAAK,oBAAoB,UACzB,KAAK,oBAAoB,SACzB,GACA,YAGQ,sBAAY,cAAevwB,GAAW,CAC9C,MAAM61O,EAAuB71O,EAAO,OAAO,YAAc,KAAK,oBAAoB,UAC5E81O,EAAsB91O,EAAO,OAAO,WAAa,KAAK,oBAAoB,SAC1E+1O,EAAgB,KAAK,kBACzB/1O,EAAO,OAAO,SAAUA,EAAO,OAAO,UACtC,KAAK,oBAAoB,SAAU,KAAK,oBAAoB,SAC1D,OAEA81O,GAAuBD,IAAyBE,IAClD,KAAK,SAAS,gBAAgB,WAC5B/1O,EAAO,OAAO,SACdA,EAAO,OAAO,UACdA,EAAO,OAAO,SACd,GACA,YAEF,KAAK,oBAAsB,CACzB,SAAUA,EAAO,OAAO,SACxB,UAAWA,EAAO,OAAO,UACzB,SAAUA,EAAO,OAAO,UAE5B,CACD,EACH,CAEQ,cAAe,CACjB,KAAK,oBACT,KAAK,kBAAoB,GACzBuwB,GAAM,8FAA8F,EACpG,KAAK,SAAS,gBAAgB,WAC5B,EACA,EACA,EACA,GACA,GAEJ,CAEQ,kBAAkBylN,EAAcC,EAAeC,EAAcC,EAAe,CAClF,MAAM31O,EAAI,oBACV,MACE,OAAQ,KAAK,KACX,KAAK,KACF,GAAM,KAAK,KAAK01O,EAAOF,GAAQx1O,CAAC,EAE/B,KAAK,IAAIw1O,EAAOx1O,CAAC,EAAI,KAAK,IAAI01O,EAAO11O,CAAC,GACrC,EAAI,KAAK,KAAK21O,EAAQF,GAASz1O,CAAC,EAAE,EAEvC,EAGN,CACF,CC5NO,MAAM6tJ,GAA+B,uBAErC,MAAM+nF,WAAuBt2M,EAAc,CAgBhD,aAAc,CACN,OACJ,UAAW,SAAS,eAAe,aAAa,EAChD,eAAgB,OACjB,EAVH,KAAQ,aAAuG,EAW/G,CAEA,UAAUzhC,EAAuB,CAC/B,KAAK,SAAWA,EAGX,iBAAc,IAAI0gC,GACtB,KAAK,YAAY,MAA2B,YAAc,IAC3D,MAAMs3M,EAAgB,KAAK,UAAU,cAAc,4BAA4B,EACjEA,EAAA,OAAO,KAAK,YAAY,SAAS,EAE/C,MAAMC,EAAkB,IAAM,CACvB,eAAUx3L,EAAgB,EAAE,KAAK,CACpC,KAAM,OACN,UAAW,GACX,QAAU/rC,GAAY,KAAK,UAAU4uB,EAAc,EAAE,KAAK,CAAC,QAAA5uB,EAAQ,EACnE,MAAO,kBACP,YAAa,gBACd,GAGGwjO,EAAkB,IAAM,CACvB,eAAUlB,EAAc,EAAE,KAAK,GAItC,KAAK,QAAU,KAAK,UAAU,cAAc,sBAAsB,EAElE,MAAMmB,EAAoC,CACxC,KAAM,UACN,KAAM,gBACN,QAAS,IAAM,CACR,eAAUb,EAAc,EAAE,KAAK,CACtC,EACA,OAAQ,SAAW,CACjB,MAAM5mF,EAAS,MAAM,KAAK,SAAS,eAAe,iBAAiBygF,GAAmB,EAAK,EACrFiH,EAAoB,MAAM,KAAK,SAAS,kBAAkB,WAAW,EACpE,OAAC,CAAC1nF,EAAO,QAAU0nF,GAAqB,CAAE,MAAM,KAAK,SAAS,eAAe,gBAAgBjH,EAAiB,CACvH,GAGIkH,EAAqB,IAAIvoN,GAAc,CAC3C,OAAQ,GACR,QAASzW,GAAgB,SAAS,EAAE,OAAS,QAC9C,EACkBg/N,EAAA,MAAM,iBAAiB,SAAU,IAAM,CAGlD,MAAAnlN,EAFO/N,EAAgBkzN,EAAmB,MAAO,eAAe,EACpD,cAAc,QAAQ,EACtB,wBAClBh/N,GAAgB,YAAYg/N,EAAmB,QAAU,QAAU,MAAO,CACxE,EAAGnlN,EAAK,KAAOA,EAAK,MAAQ,EAC5B,EAAGA,EAAK,IAAMA,EAAK,OAAS,EAC7B,EACF,EAESrzB,EAAA,iBAAiB,gBAAiB,IAAM,CAChDw4O,EAAmB,iBAAiBh/N,GAAgB,SAAS,EAAE,OAAS,OAAO,EAChF,EAkHK,MAAA+e,EAhHuF,CAAC,CAC5F,KAAM,gBACN,KAAM,gBACN,QAAS,IAAM,CACb,WAAW,IAAM,CACf4L,GAAa,QAAQ,CACnB,OAAQA,GAAa,KACtB,GACA,CAAC,CACN,CACF,EAAGm0M,EAAY,CACb,KAAM,UACN,KAAM,kBACN,QAAS,IAAM,CACR,eAAU3lC,EAAe,EAAE,KAAK,CACvC,EACA,OAAQ,IAAM,CAAC8lC,EACjB,EAAG,CACD,KAAM,OACN,KAAM,WACN,QAASJ,CACX,EAAG/J,GAA2B,CAC5B,KAAM,QACN,KAAM,eACN,QAAS,IAAM,CACR,eAAUoJ,EAAkB,EAAE,KAAK,CAC1C,CACE,SAAW,CACb,KAAM,WACN,KAAM,WACN,QAAS,IAAM,CACR,eAAU1U,EAAc,EAAE,KAAK,CACtC,CACF,EAAG,CACD,KAAM,WACN,KAAM,WACN,QAAS,IAAM,CAEf,EACA,cAAewV,CACjB,EAAG,CACD,KAAM,aACN,KAAM,aACN,QAAS,IAAM,CAEf,EACA,cAAe,IAAIvoN,GAAc,CAC/B,OAAQ,GACR,QAAS1T,GAAS,YAAY,YAAY,EAC1C,SAAUwlL,GAAa,WAAY,WAAY,YAAY,EAC3D,kBAAmB,GACpB,EACD,OAAQ,IAAM,CAACxlL,GAAS,UAAU,CACpC,EAAG,CACD,KAAM,aACN,KAAM,iBACN,QAAS,IAAM,CACR,eAAUwvN,EAAiB,EAAE,KAAK,CACzC,EACA,OAAQ,IAAMxvN,GAAS,UAAU,CACnC,EAAG,CACD,KAAM,OACN,KAAM,mBACN,QAAS,IAAM,CACb,MAAM/S,EAAMhJ,GAAK,OAAO,sBAAuB,EAAI,EACnD2jC,GAAa,QAAQ36B,CAAG,CAC1B,CACF,EAAG,CACD,KAAM,MACN,KAAM,YACN,QAAS,IAAM,CACP,MAAAf,EAAI,SAAS,cAAc,GAAG,EACpCmlC,GAAiBnlC,CAAC,EAClBA,EAAE,KAAO,kDACA,cAAK,OAAOA,CAAC,EACtBA,EAAE,MAAM,EACR,WAAW,IAAM,CACfA,EAAE,OAAO,GACR,CAAC,CACN,CACF,EAAG,CACD,KAAM,OACN,UAAW,IACX,KAAM,2BACN,QAAS,IAAM,CACb,QAAQ,IAAI,CACVi3B,GAAe,IAAI,CAAC,WAAY,IAAI,EACpCA,GAAe,OAAO,WAAW,EAClC,EAAE,KAAK,IAAM,CACZ,SAAS,KAAO,8BACjB,CACH,EACA,OAAQ,IAAMG,GAAI,YACpB,EASM,CACJ,KAAM,YACN,KAAM,cACN,QAAS,IAAM,CACS64M,QAExB,EACA,OAAQ,IAAM,CAAC,CAACA,GAAiB,CACnC,GAEoC,OAAO,OAAO,EAC5CC,EAAwBpgN,EAAgB,QAC9C,KAAK,SAAWwjC,GAAiB,CAC/B,UAAW,eACX,QAASxjC,EACT,aAAc,SAAW,CACvB,MAAMyuJ,EAAiB,MAAM,KAAK,SAAS,yBAAyB,kBAAkB,EAChF71J,EAAUwnN,EAAsB,QAChC1xD,EAAwBD,EAAe,OAAQl/D,GAC5CA,EAAc,OAAO,iBAC7B,EAAE,IAAKA,GAAkB,CAClB,MAAA7+F,EAAOw3J,GAAqB34D,CAAa,EAexC,MAd2B,CAChC,YAAapnH,GAAconH,EAAc,UAAU,EACnD,QAAS,IAAM,CACb3jF,GAAa,WAAW,CACtB,cAAA2jF,EACA,MAAOA,EAAc,OACrB,gBAAiB,GACjB,aAAc,GACf,CACH,EACA,QAAS7+F,GAAM,KACf,IAAK6+F,EAAc,OAAO,6BAA+BA,EAAc,OAAO,SAGzE,CACR,EAED32F,EAAQ,OAAO,EAAG,EAAG,GAAG81J,CAAqB,EAC7C1uJ,EAAgB,OAAO,EAAGA,EAAgB,OAAQ,GAAGpH,CAAO,CAC9D,EACA,OAAQ,CAAC7kB,EAAGixD,IAAY,CAChB,MAAAq7K,EAAgB,SAAS,cAAc,GAAG,EAChDA,EAAc,KAAO,iEACrBhrM,GAAiBgrM,CAAa,EAChBA,EAAA,UAAU,IAAI,iBAAiB,EAC/BA,EAAA,iBAAiBjnN,GAAmBrlB,GAAM,CACtDA,EAAE,gBAAgB,EAClBqnB,GAAsB,MAAM,EAC7B,EACK,MAAAxwB,EAAI,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,sBAAsB,EACtCA,EAAE,YAAc,eAAiB08B,GAAI,OAAS,IAAqBA,GAAI,YACvE+4M,EAAc,OAAOz1O,CAAC,EACdo6D,EAAA,UAAU,IAAI,YAAY,EAClCA,EAAQ,OAAOq7K,CAAa,EAEtB,MAAAnwO,EAAI80D,EAAQ,cAAc,wBAAwB,EACrD90D,IAAGA,EAAE,YAAc,KAEX6vO,EAAA,SAAS,OAAO,KAAK,aAAa,CAC/C,EACA,OAAQ,GACT,EACD,KAAK,SAAS,UAAU,IAAI,uBAAwB,YAAY,EAEhE,KAAK,QAAQ,cAAc,aAAa,KAAK,SAAU,KAAK,OAAO,EAEnE,KAAK,WAAav8K,GAAiB,CACjC,UAAW,WACX,QAAS,CAAC,CACR,KAAM,aACN,KAAM,aACN,QAAS,IAAM,CACR,eAAU+6K,EAAgB,EAAE,KAAK,CACxC,GACC,CACD,KAAM,WACN,KAAM,WACN,QAASsB,CAAA,EACR,CACD,KAAM,aACN,KAAM,iBACN,QAASC,CAAA,CACV,EACD,OAAQ,GACT,EACD,KAAK,WAAW,UAAY,0EAC5B,KAAK,WAAW,SAAW,GACrB,MAAA5gO,EAAgB,CAAC,iBAAkB,OAAO,EAChD,KAAK,WAAW,QAAQ,GAAGA,EAAM,IAAI,CAACwR,EAAM5lB,IAAQrC,GAAKioB,EAAM,4BAA6B,8BAAgC5lB,IAAQ,EAAI,QAAU,OAAO,CAAC,CAAC,EAC3J,KAAK,WAAW,GAAK,WACP80O,EAAA,mBAAmB,OAAO,KAAK,UAAU,EAElD,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAY,0DAC3B,KAAK,UAAU,SAAW,GAC1B3jN,GAAO,KAAK,SAAS,EACrB,KAAK,UAAU,OAAOlwB,EAAK,QAAQ,CAAC,EAEnBsY,EAAA,KAAK,UAAW,IAAM,CAClC,KAAK,UAAU,UAAU,SAAS,WAAW,GAIhD,SAAS,OAAO,EACjB,EAEau7N,EAAA,mBAAmB,OAAO,KAAK,SAAS,EAEjD,iBAAY,MAAM,iBAAiB,QAAS,IAAM,KAAK,aAAc,CAAC,KAAM,EAAK,GAEtF,KAAK,cAAgBz4I,GAAY,OAAQ,GAAI,MAAM,EAC9C,mBAAc,UAAU,IAAI,gBAAgB,EAEvC1/F,EAAA,iBAAiB,gBAAkB6wJ,GAAW,CACnD,GAAAA,EAAO,KAAOygF,GAAmB,CAE5B,MAAApyM,EAAQ2xH,EAAO,cAAc,KACnBhK,GAAA,KAAK,cAAe3nH,EAAQ,GAAKsgD,GAAatgD,EAAO,CAAC,EAAI,EAAE,CAC9E,EACD,EAED,IAAI25M,EAA0CC,EAC9C,MAAMC,EAA0B,KAAK,cAAc,EAAE,OAAO,EACtDC,EAAgB13M,GAAW,wBAAyB,CAAC,SAAU,GAAK,EAC1E1kB,EAAiBo8N,EAAe,IAAM,CAC9B,MAAAt/J,EAAW,IAAI1G,GAAS,CAC5B,eAAgB,GAChB,SAAUhzE,EAAU,SACpB,SAAU,IAAM,CACR,MAAAi5O,EAAkB,KAAK,SAAS,mBAAmB,mBAAmB,qCAAqC,EAChH,KAAM7qK,GACEA,EAAW,UAAU,IAAKpsE,GAAQA,EAAI,EAAE,CAChD,EAEKk3O,EAAwBC,GACpBA,EACP,SACA,IAAK9xN,GAAYA,EAAmC,WAAW,EAC/D,OAAO,OAAO,EAGV,OACL,QAAQ,IAAI,CACV4xN,EACA,KAAK,SAAS,gBAAgB,uBAAuB,EAAE,KAAKC,CAAoB,EAChF,KAAK,SAAS,gBAAgB,wBAAwB,EAAE,KAAKA,CAAoB,EACjF,KAAK,SAAS,gBAAgB,gBAAgB,QAAQ,EACvD,EAAE,KAAME,GACA/nM,GAAane,GAAQkmN,CAAM,CAAC,CACpC,EAEL,EACA,QAAS,MAAMnyO,GAAU,CACvBs/D,EAAkB,eAAe,EAEjC,MAAM8yK,EAAWlqJ,GAAe,MAAM,IAAMloF,EAAM,MAC9C,IAAAzF,EACD63O,EACa73O,EAAA,CACZ,EAAG,qBAGSA,EAAA,CACZ,EAAG,cACH,YAAayF,EAAM,OAGT6xO,EAAA,IAGT,cAAS,gBAAgB,kBAAkBt3O,CAAW,CAC7D,EACA,kBAAmB,GACpB,EAEK+kE,EAAoB,IAAI2K,GAAkB,CAC9C,aAAc,CAACwI,CAAQ,EACvB,oBAAqB,SAAS,KAC9B,gBAAiB,IAAM,CACf,MAAArmD,EAAO2lN,EAAc,wBACrBM,EAASlsE,GAAa/5I,CAAI,EAChC,OAAAimN,EAAO,KAAOjmN,EAAK,KAAOA,EAAK,MAAQ,EACvCimN,EAAO,IAAMjmN,EAAK,IAAMA,EAAK,OAAS,EAC/BimN,CACT,EACD,EAEK13O,EAAY,gBAElB2kE,EAAkB,aAAa3kE,CAAS,EAEtB2kE,EAAA,iBAAiB,SAAU,IAAM,CACjDA,EAAkB,eAAe,EAClC,EAEDA,EAAkB,cAAc,EAEvBmT,EAAA,YAAY,KAAK,IAAM,CACxB,MAAA6/J,EAAev4O,GAAK,OAAQ,0BAA0B,EAC/Cu4O,EAAA,MAAM,MAAQ,SAAS33O,CAAS,IAEvC,MAAAitE,EAAW6K,EAAS,oBAE1BA,EAAS,mBAAmB,CAC1B,SAAA7K,EACA,QAAS0qK,EACT,MAAO,GACP,QAAS,GAEV,EAKF,EACF,EAEK,MAAAC,EAAa,MAAM93O,GAA2B,CAElD,MAAMF,EADOjB,GAAgB,QAAQP,EAAU,KAAK,UAAU,EACrC,aACzB,GAAG,CAACwB,EAAa,CACfw3O,EAAc,gBAAgB,EAC9Bp8K,GAAkBo8K,EAAe,MAAM,EACvC,MACF,CAEAF,GAAalsJ,GAAgB,oBAAoB,CAC/C,WAAYisJ,GAAwB,OAAS,KAAK,cAAc,EAChE,SAAU,CACR,EAAG,sBACH,YAAar3O,EAAY,WAC3B,EACA,MAAO,CACL,cAAe,GACf,kBAAmB,IACnB,KAAM,GACN,WAAY,EACd,EACA,iBAAkBw3O,EAClB,MAAOA,EACP,UAAW,gBACZ,EAEWF,EAAA,GAEN,MAAAj3O,EAAY,MAAMP,GAAgB,CACtC,YAAa,CACX,WAAAI,CACF,EACA,YAAAF,EACA,KAAM4d,GAAc,GAAI,EAAE,EAC3B,EAESvd,EAAA,UAAU,QAAQ,eAAgB,4BAA4B,EAExEm3O,EAAc,gBAAgBn3O,CAAS,GAGnCg+N,EAAY,MAAM1wN,GAAuB,CAC7C4pO,EAAwB,MAAM,EACxB,MAAAr3O,EAAaq3O,EAAwB,MAC3C,GAAG5pO,EAAW,CAEZ,GADA,MAAMqqO,GAAYX,EAAyBn3O,EAAW,OAAO,GAAG,KAAK,EAClE,CAACA,EAAW,EAAG,OAClBy2O,EAAc,OAAOa,CAAa,EAElC,MAAMS,EAAsB,IAAM,CAChC,MAAMC,EAA4Bb,EACtBW,GAAAX,EAAyBn3O,EAAW,OAAO,GAAG,IAAK,GAC9D,QAAQ,IAAM,CACbg4O,EAA0B,QAAQ,EACnC,GAGO15O,EAAA,iBAAiB,sBAAuBy5O,CAAmB,EAErE/3O,EAAW,QAAQ,IAAM,CACb1B,EAAA,oBAAoB,sBAAuBy5O,CAAmB,EACzE,OAEDT,EAAc,OAAO,EAGvBv6M,GAAkB,oBAAoB,GAG3B0F,GAAA,iBAAiB,iBAAkB07L,CAAS,EACtD7/N,EAAU,SAAS6/N,EAAU,EAAI,EAE/B,cAAS,gBAAgB,YAAY,gBAAgB,EAG1D,MAAM59L,EAAiC,CACrC,KAAM,sBACN,MAAO,KACL,WAAW,IAAM,CACV,iBAAY,MAAM,SACtB,CAAC,EAEG,IAET,UAAW,IAEbpQ,GAAwB,SAASoQ,CAAc,EAE/C1hC,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACtC,IAACA,EAAM,WACR,OAII,MAAAguO,EAAsB,YAAY,IAAM,CACtC,gBAAW,CAAC,MAAO,WAAW,EACnC,KAAMruN,GAASA,EAAI,SAAW,KAAOA,EAAI,IAAMA,EAAI,KAAW,WAAQ,QAAQ,EAC9E,KAAM1kB,GAAS,CACXA,IAASi5B,GAAI,cACd,KAAK,UAAY,GACjB,cAAc85M,CAAmB,EAE7B,KAAK,WAAW,UAAU,SAAS,WAAW,GAC3C,eAAU,UAAU,OAAO,WAAW,EAE/C,CACD,EACA,MAAMn4N,EAAI,GAdiB,IAeN,EACzB,EAED,MAAMgxK,EAAW,IAAM,CACrB,MAAMn/J,EAAO,KAAK,KAAO,KAAK,cAAc,wBAC5C,SAAS,gBAAgB,MAAM,YAAY,sBAAuBA,EAAK,MAAQ,IAAI,GAGrFlW,GAAQq1K,CAAQ,EACL/wL,GAAA,iBAAiB,SAAU+wL,CAAQ,CAChD,CAEQ,YAAa,CACnB,MAAMzjH,EAAkB,KAAK,UAAU,cAAc,mBAAmB,EAElEhqB,EAAa,IAAI/lB,GAAW+vC,CAAe,EAE3CihB,EAAQ,IAAM,CAElB35C,GAAmB,KAAK,OAAO,GAIjC,KAAK,aAAe,CAClB,SAAU,IAAIlY,GAAY,sBAAuB,WAAY,OAAW,OAAW,OAAW,OAAW6xD,CAAK,EAC9G,eAAgB,IAAI7xD,GAAY,eAAgB,WAAY,OAAW,OAAW,OAAW,OAAW6xD,CAAK,EAC7G,SAAU,IAAI7xD,GAAY,iBAAkB,UAAU,EACtD,OAAQ,IAAIA,GAAY,GAAO,WAAY,GAAM,sBAAuB,GAAM,GAAO6xD,EAAO,EAAI,EAChG,OAAQ,IAAI7xD,GAAY,SAAU,WAAY,GAAM,sBAAuB,GAAM,GAAM6xD,CAAK,GAG9F,MAAM8gD,EAAc,KAAK,YAAc,IAAIiiE,GAAe,CACxD,UAAW,CAAC,CACV,YAAa,2BACb,KAAM,cACN,KAAM,SACL,CACD,YAAa,gCACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,yBACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,8BACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,2BACb,KAAM,kBACN,KAAM,SACL,CACD,YAAa,gCACb,KAAM,kBACN,KAAM,QACP,EACD,WAAAhuJ,EACA,aAAc,KAAK,aACnB,WAAY,GACZ,cAAe,GACf,WAAY,GACZ,SAAU,KAAK,SAChB,EAEDgqB,EAAgB,QAAQ+hE,EAAY,IAAI,cAAc,aAAa,EACxD/rF,EAAA,OAAO+rF,EAAY,SAAS,GAEnB,IAAM,CACxBA,EAAY,SAAS,CACnB,OAAQ,GAAG,SAAS,EACpB,SAAU,EACX,EACDA,EAAY,UAAU,CAAC,EACvBA,EAAY,KAAK,EAAI,MAKvB,MAAM8oG,EAAgC,GAClC,IAAAC,EAAyB,GAAG,WAC5BC,EAAkB,EAClBC,EAAkB,EACtB,MAAMC,EAAe,IAAM,CAEzB,KAAK,YAAY,UAAU,UAAU,OAAO,kBAAmBJ,EAAe,SAAW,CAAC,EACrF,iBAAY,UAAU,UAAU,OAAO,YAAa,CAAC,CAACA,EAAe,MAAM,EACjEA,EAAA,QAAQ,CAACrlO,EAASlR,IAAQ,CAC/BkR,EAAA,UAAU,OAAO,WAAY,SAAS,EAC9CA,EAAQ,UAAU,IAAIlR,IAAQ,EAAI,WAAa,SAAS,EACzD,EAEEu2O,EAAe,OACX,iBAAY,MAAM,MAAM,YAC3B,gBACCA,EAAeA,EAAe,OAAS,CAAC,EAAE,sBAAwB,QAAQ,KAAK,YAAY,MAAM,wBAAwB,KAAQ,MAGpI,KAAK,YAAY,MAAM,MAAM,eAAe,eAAe,CAC7D,EAGIK,EAAyB,KAAK,iBAAiB,MAAM,OAAO,EAC5Dt9D,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gBAAiB,MAAM,EACrCA,EAAA,iBAAiB,QAAUrwK,GAAM,CACtC,MAAM+Y,EAASC,EAAgBhZ,EAAE,OAAQ,eAAe,EACxD,GAAG,CAAC+Y,EACF,OAGI,MAAAtP,EAAMsP,EAAO,QAAQ,IAC3B,GAAGtP,EAAI,QAAQ,OAAO,IAAM,EAAG,CAC7B,KAAM,CAACrB,EAAG+sN,EAASnkH,CAAO,EAAIvnG,EAAI,MAAM,GAAG,EAC3C+jO,EAAkB,CAACrY,EACnBsY,EAAkB,CAACz8H,CAAA,MAEnBu8H,EAAiB9jO,EAAI,WAGhBsP,EAAA,iBAAiB,QAAS,IAAM,CACrC60N,EAAe70N,CAAM,EACtB,EAEI,iBAAY,UAAU,OAAOA,CAAM,EACxC,KAAK,YAAY,SAAS,KAAK,YAAY,MAAQ,EAAE,EACrDu0N,EAAe,KAAKv0N,CAAM,EACb20N,GAAA,CACd,EAEWlpG,EAAA,IAAI,cAAc,OAAO6rC,CAAM,EAErC,MAAAnxD,EAAe,CAACz1G,EAAsB1V,IACnCi1C,GAAe,aAAa,CACjC,IAAAv/B,EACA,MAAA1V,EACA,WAAY45O,EAAuB,IAAI,EACvC,WAAY,GACZ,aAAc,gBACf,GAAE,QAGCC,EAAkB70N,GAAwB,CAClCA,EAAO,QAAQ,IACpB,QAAQ,OAAO,IAAM,EAC1By0N,EAAkBC,EAAkB,EAEpCF,EAAiB,GAAG,WAGtBx0N,EAAO,iBAAiB,UACxBA,EAAO,OAAO,EACdrQ,GAAiB4kO,EAAgBv0N,CAAM,EAEvC,WAAW,IAAM,CACF20N,IACb,KAAK,YAAY,SAAS,KAAK,YAAY,KAAK,GAC/C,CAAC,GAGD,iBAAY,QAAU,IAAM,CAChBJ,EAAA,QAAS/nO,GAAO,CAC7BqoO,EAAeroO,CAAE,EAClB,EAED8qK,EAAO,gBAAgB,EACRw9D,GAAA,EAGjB,MAAMA,EAAiB,CAAC/nM,EAAO,CAACuqI,EAAO,oBAAsB,CACpDA,EAAA,UAAU,OAAO,OAAQvqI,CAAI,EACpC0+F,EAAY,IAAI,UAAU,OAAO,OAAQ,CAAC1+F,CAAI,GAG1CgoM,EAAkBz3O,GAA4B,CAC3Cg6K,EAAA,OAAO,GAAGh6K,CAAQ,EACVw3O,GAAA,EAGZ,iBAAY,SAAYnjO,GAAU,CACrC85H,EAAY,YAAY,EACxBA,EAAY,SAAS,CACnB,OAAQ+oG,EACR,SAAUA,EAAiB,OAAY,EACvC,MAAO7iO,EACP,QAAS8iO,EACT,QAASC,CAAA,CACV,EACDjpG,EAAY,KAAK,EAAI,EAErBmpG,EAAuB,MAAM,EAC7BE,EAAe,EAAI,EAEnB,MAAM/tO,EAA0C,GAEhD,GAAG,CAAC0tO,GAAmB9iO,EAAM,OAAQ,CACnC,MAAM0yF,EAAoB,GAC1B2wI,GAAarjO,EAAO0yF,CAAK,EACzB,MAAM/mG,EAAW+mG,EAAM,IAAK4wI,GACnB9uH,EAAa,QAAU8uH,EAAS,QAAU,IAAMA,EAAS,QAASA,EAAS,KAAK,CACxF,EAEDluO,EAAS,KAAKzJ,CAAQ,CACxB,CAEA,GAAG,CAACk3O,GAAkB7iO,EAAM,OAAQ,CAC5B,MAAAtV,EAAaovI,EAAY,WAAW,IAAI,EACxCplI,EAAU,QAAQ,IAAI,CAC1B,KAAK,SAAS,eAAe,WAAW,CAAC,MAAOsL,CAAA,CAAM,EAAE,KAAK,CAAC,CAAC,QAAA+/B,KAAaA,EAAQ,IAAK7zC,GAAMA,EAAE,MAAM,CAAC,EACxG,KAAK,SAAS,gBAAgB,mBAAmB8T,EAAO,EAAI,EAC7D,EAAE,KAAMsmB,GACH57B,EAAW,EAGR,CAAC,GAFQ,IAAI,IAAI47B,EAAQ,CAAC,EAAE,OAAOA,EAAQ,CAAC,CAAC,EAAE,MAAM,EAAG,EAAE,CAAC,CAEhD,EAAE,IAAKv9B,GAAWyrH,EAAazrH,CAAM,CAAC,EAHtC,MAInB,EAEDqM,EAAS,KAAKV,CAAO,CACvB,CAEA,QAAQ,IAAIU,CAAQ,EAAE,KAAMgtO,GAAW,CACrCz8D,EAAO,gBAAgB,EACjB,MAAA49D,EAAYrnN,GAAQkmN,CAAM,EAChCgB,EAAeG,CAAS,EACzB,GAGHzpG,EAAY,KAAK,yBAAyB,iBAAiB,YAAcxkI,GAAM,CAC7E,MAAM+Y,EAASw4B,GAAUvxC,EAAE,OAAQwxC,EAAuB,EAC1D,GAAG,CAACz4B,EACF,OAGI,MAAAga,EAAc/Z,EAAgBD,EAAQ,cAAc,EACvD,IAACga,GAAeA,EAAY,UAAU,SAAS,qBAAqB,GAAKA,EAAY,UAAU,SAAS,qBAAqB,EAC9H,OAGF,MAAMt/B,EAASslB,EAAO,aAAa,cAAc,EAAE,SAAS,EACvD,cAAS,gBAAgB,iBAAiBtlB,CAAM,GACpD,CAAC,QAAS,GAAK,EAEZ,MAAAy6O,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EACvDA,EAAgB,OAAO,KAAK,aAAa,OAAO,IAAI,EACpD,KAAK,aAAa,OAAO,UAAU,OAAOA,CAAe,EAChC,IAAI1rK,GAAY0rK,CAAe,EAExD,IAAI/yO,EAAQ,GACRgzO,EAEJ,MAAMvqE,EAAaluI,GAAiB,CAClC,QAAS+sC,EAAgB,cACzB,KAAM,YACN,eAAgB,IAChB,kBAAoBltC,GAAO,CACzBktC,EAAgB,cAAc,cAAc,UAAU,OAAO,mBAAoBltC,IAAO,CAAC,CAC3F,EACA,gBAAkBA,GAAO,CACpB44M,GAAuB,aAAaA,CAAqB,EAEzD54M,IAAO,GAAK,CAACp6B,IACFqpI,EAAA,UAAU,EAAG,EAAK,EAC9B,KAAK,YAAY,eACO2pG,EAAA,OAAO,WAAW,IAAM,CACtBA,EAAA,EACnB,gBAAW,UAAU,OAAO,WAAW,EAC5C,KAAK,WAAa,KAAK,UAAU,UAAU,OAAO,WAAW,GAC5D,GAAG,GAGAhzO,EAAA,EACV,EACD,EAEDyoK,EAAW,CAAC,EAEZ,MAAMpZ,EAAkB,aAClB0kD,EAAU,IAAM,CACf,cAAS,UAAU,OAAO1kD,CAAe,EACzC,aAAQ,UAAU,IAAIA,CAAe,EACrC,gBAAW,UAAU,IAAI,WAAW,EACpC,eAAU,UAAU,IAAI,WAAW,EACxC,KAAK,SAAS,cAAc,kBAAkB,UAAU,OAAO,aAAc,EAAI,EAEjF,MAAMxlI,EAAyC,gBAC5C,CAACM,IAAoB,CAACC,GAAwB,eAAeP,CAAc,GAC5EO,GAAwB,SAAS,CAC/B,MAAO,IAAM,CACLm+D,GACR,EACA,KAAM1+D,CAAA,CACP,EAGH4+I,EAAW,CAAC,GAGd,KAAK,YAAY,MAAM,iBAAiB,QAASsrC,CAAO,EAChDA,IAES5+L,EAAA,KAAK,QAAUtQ,GAAM,CAC/B,cAAS,UAAU,IAAIwqJ,CAAe,EACtC,aAAQ,UAAU,OAAOA,CAAe,EAC7C,KAAK,SAAS,cAAc,kBAAkB,UAAU,OAAO,aAAc,EAAK,EAElFjlI,GAAwB,aAAa,eAAe,EAEpDq+I,EAAW,CAAC,EACb,EAEK,MAAAwqE,EAAuBp5M,GAAW,OAAO,EAC/C,KAAK,aAAa,OAAO,OAAO,OAAOo5M,CAAoB,EACtCA,EAAA,iBAAiB,QAAS,IAAM,CACjCruM,GAAA,CAChB,mBAAoB,8BACpB,OAAQ,CACN,QAAS,cACT,SAAU,EACZ,EACD,EAAE,KAAK,IACC,KAAK,SAAS,gBAAgB,kBAAkB,EAAE,KAAK,IAAM,CAC7D,kBAAa,OAAO,OAAM,CAChC,CACF,EACF,CACH,CACF,CAqBA,MAAM+qK,GAAiB,IAAI8gC,GAC3BryL,GAAe,eAAiBuxJ,GAChC,MAAAujC,GAAevjC,GCh6Bf,MAAqBwjC,EAAgB,CAMnC,YAAYjjN,EAA+B73B,EAMxC,CANwC,aAAAA,EAiD3C,gBAAcwM,GAAiB,CACxB,eAAU,UAAU,IAAI,aAAa,GAI5C,iBAAeA,GAAiB,CACzB,eAAU,UAAU,OAAO,aAAa,GAI/C,YAAUA,GAAiB,CACpB,aAAQ,OAAOA,CAAC,GArDhB,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAI,OAAQ,WAAW,EAE3C,oBAAiB,SAAS,cAAc,KAAK,EAC7C,oBAAe,UAAU,IAAI,sBAAsB,EAExD,KAAK,IAAM,SAAS,gBAAgB,6BAA8B,KAAK,EAClE,SAAI,UAAU,IAAI,cAAc,EAErC,KAAK,KAAO,SAAS,gBAAgB,6BAA8B,MAAM,EACpE,UAAK,UAAU,IAAI,mBAAmB,EAEvC,IAAAuuO,EACD/6O,EAAQ,OACE+6O,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,WAAW,EAClCA,EAAS,OAAO75O,GAAKlB,EAAQ,IAAI,CAAC,EAC7B,eAAU,UAAU,IAAI,UAAU,GAGnC,MAAAg7O,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAa,EACtCA,EAAW,OAAOx2O,EAAKxE,EAAQ,OAAQA,EAAQ,UAAU,CAAC,EAEtD,IAAAi7O,EACDj7O,EAAQ,WACMi7O,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,eAAe,EAC1CA,EAAa,OAAOz2O,EAAKxE,EAAQ,QAAQ,CAAC,GAGvC,SAAI,OAAO,KAAK,IAAI,EACpB,oBAAe,OAAO,KAAK,GAAG,EAEnC,KAAK,UAAU,OAAO,GAAG,CAAC+6O,EAAUC,EAAYC,EAAc,KAAK,cAAc,EAAE,OAAO,OAAO,CAAC,EACzFpjN,EAAA,OAAO,KAAK,SAAS,EAE9B,KAAK,UAAU,iBAAiB,WAAY,KAAK,UAAU,EAC3D,KAAK,UAAU,iBAAiB,YAAa,KAAK,WAAW,EAC7D,KAAK,UAAU,iBAAiB,OAAQ,KAAK,MAAM,CACrD,CAgBA,SAAU,CACR,OAAO,KAAK,QACZ,KAAK,UAAU,SACf,KAAK,UAAU,oBAAoB,WAAY,KAAK,UAAU,EAC9D,KAAK,UAAU,oBAAoB,YAAa,KAAK,WAAW,EAChE,KAAK,UAAU,oBAAoB,OAAQ,KAAK,MAAM,CACxD,CAEA,SAAU,CACF,MAAAtE,EAAO,KAAK,eAAe,sBAAsB,EACvD,KAAK,IAAI,eAAe,KAAM,sBAAuB,MAAM,EACtD,SAAI,eAAe,KAAM,UAAW,OAAOA,EAAK,KAAK,IAAIA,EAAK,MAAM,EAAE,EAC3E,KAAK,IAAI,eAAe,KAAM,QAAS,GAAGA,EAAK,KAAK,EAAE,EACtD,KAAK,IAAI,eAAe,KAAM,SAAU,GAAGA,EAAK,MAAM,EAAE,EAExD,MAAMlL,EAAS,GAET6yN,EAAQ3nN,EAAK,MAAQlL,EACrB8yN,EAAQ5nN,EAAK,OAASlL,EACtBgd,EAAMhd,EAAS,EACfjlB,EAAIurN,GAAiBtpL,EAAKA,EAAK61M,EAAOC,EAAO9yN,EAAQA,EAAQA,EAAQA,CAAM,EACjF,KAAK,KAAK,eAAe,KAAM,IAAKjlB,CAAC,CACvC,CACF,CC9FA,SAAwBg4O,GAAkBv4O,EAAyB,CACjEA,EAAS,QAASkP,GAAOA,EAAG,UAAU,IAAI,eAAe,CAAC,EAEhD6pB,GAAA,EAAE,KAAK,IAAM,CACrB/4B,EAAS,QAASkP,GAAOA,EAAG,UAAU,OAAO,eAAe,CAAC,EAC9D,CACH,CCHO,MAAMspO,GAAY,IACZC,GAAY,GAMzB,MAAqBC,EAAiB,CASpC,YAAYn2O,EAAW,CACrB,KAAK,UAAY,GACjB,KAAK,UAAY,EAEjB,KAAK,EAAIA,EACT,KAAK,OAAS,IAAI,MAAMA,EAAI,CAAC,EAE7B,KAAK,WAAa,IAAI,MAAMA,EAAI,CAAC,EACjC,KAAK,SAAW,IAAI,MAAMA,EAAI,CAAC,EAC/B,KAAK,MAAQ,IAAI,MAAMA,EAAI,CAAC,EAE5B,QAAQzB,EAAI,EAAGA,GAAKyB,EAAGzB,IAChB,kBAAa,KAAK,OAAQA,CAAC,EAC3B,kBAAa,KAAK,WAAYA,CAAC,EAC/B,cAASA,CAAC,EAAI,CAEvB,CAEQ,aAAa0kB,EAAgB1kB,EAAW,CAC9C,KAAM,CAAC,UAAA63O,EAAW,UAAAC,EAAW,MAAAC,CAAA,EAAS,KAEhCC,EAASH,EAAYC,EAC3BpzN,EAAO1kB,CAAC,EAAI83O,EAAY,KAAK,OAAW,EAAAE,EACxCD,EAAM/3O,CAAC,EAAI,KAAQ,KAAQ,KAAK,QAClC,CAEQ,kBAAmB,CACzB,KAAM,CAAC,OAAA0kB,EAAQ,WAAAuzN,EAAY,SAAAtgN,EAAU,EAAAugN,GAAK,KAC1C,QAAQl4O,EAAI,EAAGA,EAAIk4O,EAAGl4O,IACf,kBAAa0kB,EAAQ1kB,CAAC,EACtB,kBAAai4O,EAAYj4O,CAAC,EAC/B23B,EAAS33B,CAAC,EAAI,CAElB,CAEO,OAAOm4O,EAAmBC,EAAoB,CACnD,KAAM,CAAC,EAAAF,EAAG,SAAAvgN,EAAU,MAAAogN,EAAO,OAAArzN,EAAQ,WAAAuzN,CAAc,OACjD,QAAQj4O,EAAI,EAAGA,GAAKk4O,EAAGl4O,IACZ23B,EAAA33B,CAAC,GAAM+3O,EAAM/3O,CAAC,EAAI23O,GAAaQ,EAAYJ,EAAM/3O,CAAC,EAAI03O,GAAYU,EACxEzgN,EAAS33B,CAAC,GAAK,IAChB23B,EAAS33B,CAAC,EAAI,EACP0kB,EAAA1kB,CAAC,EAAIi4O,EAAWj4O,CAAC,EACnB,kBAAai4O,EAAYj4O,CAAC,EAGrC,CAEO,KAAKszB,EAAcC,EAAamE,EAAes1D,EAAgB1oE,EAA2B+zN,EAAgDC,EAAmBC,EAA0B,CAC5L,GAAGj0N,EAAO,WAAY,CACd,MAAAwhB,EAAMxhB,EAAO,WAAW,IAAI,EAIlCwhB,EAAI,UAAU,EACVA,EAAA,OAAOpO,EAAOs1D,CAAM,EACpBlnD,EAAA,OAAOxS,EAAM05D,CAAM,EAEvB,KAAM,CAAC,OAAAtoE,EAAQ,WAAAuzN,EAAY,EAAAC,CAAA,EAAK,KAChC,QAAQl4O,EAAI,EAAGA,GAAKk4O,EAAGl4O,IACrB,GAAGA,IAAM,EAAG,CACJ,MAAA23B,EAAW,KAAK,SAAS33B,CAAC,EAC1BwnF,EAAK9iE,EAAO1kB,CAAC,GAAK,EAAM23B,GAAYsgN,EAAWj4O,CAAC,EAAI23B,EACpDgQ,GAAKpU,EAAMi0D,GAAM+wJ,EAAmBD,GAAa,EAAMC,GACzDzyM,EAAA,OAAOxS,EAAMqU,CAAC,MACb,CACL,MAAMhQ,EAAW,KAAK,SAAS33B,EAAI,CAAC,EAC9BwnF,EAAK9iE,EAAO1kB,EAAI,CAAC,GAAK,EAAM23B,GAAYsgN,EAAWj4O,EAAI,CAAC,EAAI23B,EAC5D6gN,EAAe,KAAK,SAASx4O,CAAC,EAC9BynF,EAAK/iE,EAAO1kB,CAAC,GAAK,EAAMw4O,GAAgBP,EAAWj4O,CAAC,EAAIw4O,EACxDnsB,GAAM30L,EAAQpE,GAAQ4kN,GAAKl4O,EAAI,GAC/By4O,GAAM/gN,EAAQpE,GAAQ4kN,EAAIl4O,EAC1B04O,EAAKrsB,GAAMosB,EAAKpsB,GAAM,EAEtBC,GAAM/4L,EAAMi0D,GAAM+wJ,EAAmBD,GAAa,EAAMC,GACxDI,GAAMplN,EAAMk0D,GAAM8wJ,EAAmBD,GAAa,EAAMC,GAC9DzyM,EAAI,cAAc4yM,EAAIpsB,EAAIosB,EAAIC,EAAIF,EAAIE,CAAE,EACrC34O,IAAMk4O,GACHpyM,EAAA,OAAOpO,EAAOs1D,CAAM,CAE5B,CAIFqrJ,EAAMvyM,CAAG,EACTA,EAAI,KAAK,EACTA,EAAI,UAAU,CAChB,CACF,CACF,CChGO,MAAM8yM,EAAa,CAGxB,YAAmBj4N,EAA8BzY,EAAyB,CAAvD,UAAAyY,EAA8B,WAAAzY,EAC/C,KAAK,eAAe,CACtB,CAEQ,gBAAiB,CACvB,KAAK,OAAS,CAAC49B,EAAKxS,EAAMC,EAAKmE,EAAOs1D,IAAW,CAC3ClnD,EAAA,UAAY8yM,GAAa,oBAAoB9yM,EAAK,KAAK,KAAM,KAAK,MAAOxS,EAAMC,EAAKmE,EAAOs1D,CAAM,EAEzG,CAEA,OAAOpqE,EAAgBD,EAAe+wE,EAAYykJ,EAAmB,CAErE,CAEA,OAAc,aAAax3N,EAAuBk4N,EAA4B,CACrE,OAAAA,EAAO,IAAK3wO,GAAU,CAACA,EAAO,IAAI0wO,GAAaj4N,EAAMzY,CAAK,CAAC,CAAU,CAC9E,CAEA,OAAc,oBAAoB49B,EAA+BnlB,EAAuBzY,EAAyB4wO,EAAYC,EAAY1sB,EAAYC,EAAY,CAC/J,MAAMj2M,EAAWyvB,EAAI,qBAAqBgzM,EAAIC,EAAI1sB,EAAIC,CAAE,EAKlD0sB,EAAmC,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,GAAI,SAAS,EAAG,CAAC,EAAG,SAAS,CAAC,EACnFC,EAA4B,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,EAAG,SAAS,CAAC,EAC3DC,EAA0B,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,EAAG,SAAS,CAAC,EACzDC,EAA+B,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,EAAG,SAAS,CAAC,EAC9DC,EAAyB,CAAC,CAAC,EAAG,SAAS,EAAG,CAAC,GAAI,SAAS,EAAG,CAAC,EAAG,SAAS,CAAC,EAezEp0O,EAbsF,CAC1F,MAAO,CACL,CAAC,CAACs6I,GAAiB,cAAc,EAAG05F,CAAoB,EACxD,CAAC,CAAC15F,GAAiB,OAAO,EAAG25F,CAAa,EAC1C,CAAC,CAAC35F,GAAiB,KAAK,EAAG45F,CAAW,EACtC,CAAC,CAAC55F,GAAiB,UAAU,EAAG65F,CAAgB,CAClD,EACA,KAAM,CACJ,CAAC,CAAC9zF,GAAW,OAAO,EAAG+zF,CAAU,EACjC,CAAC,CAAC/zF,GAAW,UAAWA,GAAW,UAAU,EAAG8zF,CAAgB,CAClE,GAGYx4N,CAAI,EAClB,SAAU,CAACk4N,EAAQvjO,CAAM,IAAKtQ,EACzB,GAAA6zO,EAAO,SAAS3wO,CAAK,EAAG,CACzB,SAAU,CAACd,EAAQ7C,CAAK,IAAK+Q,EAClBe,EAAA,aAAajP,EAAQ7C,CAAK,EAE9B,OAAA8R,CACT,CAEJ,CACF,CAEA,MAAqBgjO,EAAY,CAoC/B,aAAc,CAkFN,mCAAiCxwO,GAAa,CACpD,KAAK,QAAQ,EACb,KAAK,YAAY,GAGnB,KAAQ,aAAe,IAAM,CACxB,KAAK,gBACN,aAAa,KAAK,aAAa,EAC/B,KAAK,cAAgB,MAGvB,KAAK,SAAW,GAChB,KAAK,aAAa,EACb,mBAAgB,OAAO,WAAW,IAAM,CAC3C,KAAK,SAAW,GAChB,KAAK,WAAW,GACf,GAAG,GAWR,KAAO,YAAc,IAAM,CACzB,KAAK,QAAU,GACf,KAAK,WAAW,GAGlB,KAAO,WAAa,IAAM,CACxB,KAAK,QAAU,IAGjB,KAAQ,WAAa,IAAM,CACtB,KAAK,KAER,KAAK,KAAK,GAGJ,UAAO,CAACmmD,EAAQ,KAAU,CAE7B,GADH,KAAK,IAAM,KACR,CAAC,KAAK,QACP,OAEF,KAAM,CAAC,IAAAsqL,EAAK,KAAAC,EAAM,KAAAC,EAAM,MAAA3wJ,EAAO,KAAAv1D,EAAM,IAAAC,EAAK,MAAAmE,EAAO,OAAAs1D,EAAQ,aAAAysJ,EAAc,cAAAC,EAAe,QAAAluK,EAAS,SAAA+sD,EAAU,OAAAj0G,CAAU,OACnH,GAAG,CAACknD,GAAW,CAAC+sD,GAAY,KAAK,iBAAmB,EAClD,OAME,IAAA7kC,EADY,KAAK,MACD,KAAK,eACtBA,EAAK,KACDA,EAAA,IAIJ,KAAK,qBAAuB,KAAK,YAC7B,gBAAa,KAAK,qBAAuBA,EAC3C,KAAK,qBAAuB,EAC1B,KAAK,UAAY,KAAK,qBACvB,KAAK,UAAY,KAAK,oBAGrB,KAAK,UAAY,KAAK,qBACvB,KAAK,UAAY,KAAK,qBAKzB,KAAK,qBAAuB,KAAK,aAC7B,iBAAc,KAAK,sBAAwBA,EAC7C,KAAK,sBAAwB,EAC3B,KAAK,WAAa,KAAK,qBACxB,KAAK,WAAa,KAAK,oBAGtB,KAAK,WAAa,KAAK,qBACxB,KAAK,WAAa,KAAK,qBAK1BgmJ,IACD,KAAK,iBAAmBhmJ,EAAK,IAC1B,KAAK,gBAAkB,IACxB,KAAK,gBAAkB,EACvB,KAAK,cAAgB,OAIzB,KAAM,CAAC,UAAAykJ,EAAW,WAAAwB,EAAY,gBAAAC,CAAA,EAAmB,KAE3CC,EAAO,EAAIF,EAAa9wJ,EACxBixJ,EAAO,EAAIH,EAAa9wJ,EAElBvkE,EAAO,WAAW,IAAI,EAC9B,UAAU,EAAG,EAAGA,EAAO,MAAOA,EAAO,MAAM,EAE/Cg1N,EAAI,UAAY,EACZA,EAAA,WAAa,EAAI,EAAInB,GAAatvJ,EACtC0wJ,EAAK,UAAY,EACZA,EAAA,WAAa,EAAI,EAAIpB,GAAatvJ,EACvC2wJ,EAAK,UAAY,EACZA,EAAA,WAAa,EAAI,EAAIrB,GAAatvJ,EAEnCywJ,EAAA,OAAOnB,EAAW,EAAG,EACpBoB,EAAA,OAAOpB,EAAW,EAAG,EACrBqB,EAAA,OAAOrB,EAAW,EAAG,EAE1B,QAAQn4O,EAAI,EAAGA,EAAI,EAAGA,IAAK,CACtB,GAAAA,IAAM,GAAK,CAAC05O,EACb,SAGF,IAAIn8J,EAAQ,EACRr1E,EACDlI,IAAM,GACPu9E,EAAQ,EAAIq8J,EACJ1xO,EAAAwxO,IAGRn8J,EAAQm8J,EAAgBE,EAAkB,EAC1CH,EAAa,OAAOzsJ,EAASz5D,EAAKmE,EAAQpE,EAAMogE,EAAIykJ,CAAS,EACrDjwO,EAAAuxO,GAIJ,MAAAM,EAAUj0M,GAAkC,CAChDA,EAAI,YAAc,GAAMy3C,EACxBr1E,EAAM,OAAO49B,EAAKxS,EAAMC,EAAKmE,EAAOs1D,CAAM,GAEtCqrJ,EAASvyM,GAAkC,CAC/CA,EAAI,YAAc9lC,IAAM,EAAI,EAAIu9E,EAChCr1E,EAAM,OAAO49B,EAAKxS,EAAMC,EAAKmE,EAAOs1D,CAAM,GAGvCusJ,EAAA,KAAKjmN,EAAMC,EAAMsmN,EAAMniN,EAAOs1D,EAAQ1oE,EAAQy1N,EAAQxmN,EAAK,CAAG,EAC9DimN,EAAA,KAAKlmN,EAAMC,EAAMumN,EAAMpiN,EAAOs1D,EAAQ1oE,EAAQy1N,EAAQxmN,EAAK,CAAG,EAC/D+lN,EAAA,KAAKhmN,EAAMC,EAAKmE,EAAOs1D,EAAQ1oE,EAAQ+zN,EAAO9kN,EAAK,CAAG,CAC5D,CAEIy7B,IACF,KAAK,IAAM,sBAAsB,IAAM,KAAK,KAAM,GACpD,EAGF,KAAO,gBAAkB,CAACruC,EAAuBzY,EAAyB8xO,IAAsB,CACxF,MAAC,aAAAP,CAAgB,OAEpBA,GAAc,QAAUvxO,GAASuxO,EAAa,OAAS94N,IAI1D,KAAK,KAAOA,EACP,mBAAgBq5N,EAAWP,EAAe,KAC/C,KAAK,aAAe,KAAK,OAAO,IAAIvxO,CAAK,EACpC,qBAAkB,KAAK,cAAgB,EAAM,IAlPlD,KAAK,QAAU,GACf,KAAK,SAAW,GACX,oBAAiB,KAAK,MAC3B,KAAK,UAAY,EACjB,KAAK,WAAa,EAElB,MAAMrG,EAA6C,CACjD,CAAC,QAAS,CACRy9I,GAAiB,QACjBA,GAAiB,MACjBA,GAAiB,eACjBA,GAAiB,WAClB,EACD,CAAC,OAAQ,CACP+F,GAAW,QACXA,GAAW,UACXA,GAAW,WACZ,GAGE,eAAY,IAAI,IAAIxjJ,EAAE,IAAI,CAAC,CAAC8e,EAAMk4N,CAAM,IAAM,CAACl4N,EAAM,IAAI,IAAIi4N,GAAa,aAAaj4N,EAAMk4N,CAAM,CAAC,CAAC,CAAC,CAAC,EAE5G,KAAK,KAAO,QACZ,KAAK,cAAgB,KACrB,KAAK,aAAe,KAAK,OAAO,IAAIv5F,GAAiB,UAAU,EAC/D,KAAK,gBAAkB,CACzB,CAEA,IAAY,QAAS,CACnB,OAAO,KAAK,UAAU,IAAI,KAAK,IAAI,CACrC,CAEO,mBAAoB,CACtB,KAAK,UAIR,KAAK,QAAU,GAGR,wBAAiB,SAAU,KAAK,YAAY,EAC9C,WAAQ,OAAO,WAAW,oCAAoC,EACnE,KAAK,MAAM,iBAAiB,SAAU,KAAK,6BAA6B,EAExE,KAAK,QAAQ,EACb,KAAK,YAAY,EAEZ,SAAM,IAAIs4F,GAAiB,CAAC,EAC5B,UAAO,IAAIA,GAAiB,CAAC,EAC7B,UAAO,IAAIA,GAAiB,CAAC,EAC7B,kBAAa,KAAK,SAAS,EAEhC,KAAK,KAAK,EACZ,CAEO,sBAAuB,CAC5B,KAAK,QAAU,GAGR,2BAAoB,SAAU,KAAK,YAAY,EACtD,KAAK,MAAM,oBAAoB,SAAU,KAAK,6BAA6B,EAErE,MAAC,OAAAtzN,CAAU,OACLA,EAAO,WAAW,IAAI,EAC9B,UAAU,EAAG,EAAGA,EAAO,MAAOA,EAAO,MAAM,CACjD,CAEQ,SAAU,CAChB,KAAK,MAAQ,OAAO,iBACf,SAAM,GAAK,KAAK,MACrB,KAAK,OAAS,KAAK,QAAU,KAAK,UAAU,YAAc,MAAQ,KAAK,MACvE,KAAK,QAAU,KAAK,QAAU,KAAK,UAAU,aAAe,IAAM,KAAK,MAClE,UAAO,EAAI,KAAK,MACrB,KAAK,cAAc,CACrB,CAEQ,eAAgB,CACjB,YAAO,MAAQ,KAAK,MACpB,YAAO,OAAS,KAAK,MAC5B,CAqBQ,cAAe,CACrB,KAAK,MAAQ,OAAO,iBACpB,KAAK,MAAQ,KAAK,UAAU,YAAc,KAAK,MAE/C,KAAK,YAAY,EACjB,KAAK,WAAW,CAClB,CA2IO,aAAa/Q,EAAe,CAC3B,MAAC,UAAA4kO,CAAa,OACpB,KAAK,mBAAqB5kO,EACrB,2BAAwBA,EAAQ4kO,GAAa,IAC7C,4BAAyB5kO,EAAQ4kO,GAAa,GACrD,CAEQ,aAAc,CACpB,KAAK,cAAc,CACrB,CAEO,OAAO5/N,EAAmB,CAC/B,MAAMna,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EACrDA,EAAA,UAAU,IAAIma,CAAS,EAEjC,MAAM+L,EAAS,KAAK,OAAS,SAAS,cAAc,QAAQ,EACrD,OAAAA,EAAA,UAAU,IAAI/L,EAAY,SAAS,EAE1Cna,EAAU,OAAOkmB,CAAM,EAEhBlmB,CACT,CACF,CCzVO,MAAM67O,EAA0D,CAKrE,YAAmB3zO,EAAuBjK,EAAqC,CAA5D,UAAAiK,EACjBgN,GAAW,KAAMjX,CAAO,CAC1B,CAEO,KAAK8J,EAAuB,CACjC,OAAO,KAAK,KAAK,SAAS,KAAMA,CAAQ,CAC1C,CACF,CAIO,MAAM+zO,EAAkD,CAW7D,YAAmB10N,EAAmBnpB,EAAiC,CAApD,UAAAmpB,EACjB,KAAK,SAAW,GAEhBlS,GAAW,KAAMjX,CAAO,EAEnB,WAAQ,KAAK,MAAM,IAAKA,GAAY,KAAK,WAAWA,CAAO,CAAC,CACnE,CAEO,MAAO,CACZ,IAAIshB,EAAc,KAAK,YACvB,GAAGA,EACM,OAAAA,EAGT,KAAM,CAAC,UAAAvf,EAAW,OAAAkmB,EAAQ,MAAA3B,EAAO,OAAAC,GAAU,KAAK,KAChD,OAAAjF,EAActJ,GAAa,qBAAqB,CAC9C,UAAAjW,EACA,OAAAkmB,EACA,MAAA3B,EACA,OAAAC,EACA,MAAO,OACP,KAAM,GACN,SAAU,KAAK,UAAY,GAC3B,UAAW,KAAK,UAChB,wBAAyB,KAAK,YAAc,OAC5C,MAAO,KAAK,OACX,KAAK,IAAI,EAAE,KAAMxO,GACXC,GAAa,kBAAkBD,CAAM,CAC7C,EAAE,KAAMA,GAAW,CAClB,KAAK,OAASA,EAEX,KAAK,iBACN,KAAK,eAAe,EACpB,KAAK,eAAiB,QAGrB,KAAK,gBACN,KAAK,cAAc,EACnB,KAAK,cAAgB,OACvB,CACD,EAED,KAAK,YAAcuJ,EACnB,KAAK,KAAK,aAAa,IAAI,KAAK,KAAMA,CAAW,EAC1CA,CACT,CAEO,WAAWthB,EAAqC,CAC9C,WAAI49O,GAAoB,KAAM59O,CAAO,CAC9C,CAEO,QAAQ2Z,EAA8C,CAC3D,OAAGA,aAAiBikO,GAA4BjkO,EACxC,OAAOA,GAAW,SAAiB,KAAK,MAAM,KAAM9H,GAASA,EAAK,OAAS8H,CAAK,EAC5E,KAAK,MAAMA,CAAK,CAC9B,CAEO,SAAS9H,EAA2B/H,EAAuB,CAChE,OAAO,KAAK,KAAK,SAAS,KAAM+H,EAAM/H,CAAQ,CAChD,CACF,CAEA,MAAqBg0O,EAAY,CAW/B,YAAY99O,EAA6B,CACvCiX,GAAW,KAAMjX,CAAO,EAEpB,KAAK,YAAgB,eAAY,SAAS,cAAc,KAAK,GAC5D,eAAU,UAAU,IAAI,cAAc,EAErC,MAAC,MAAAsmB,EAAO,OAAAC,CAAU,OACnB,eAAU,MAAM,MAAQD,EAAQ,KAChC,eAAU,MAAM,OAASC,EAAS,KAEvC,MAAM0B,EAAS,KAAK,OAAS,SAAS,cAAc,QAAQ,EACrDA,EAAA,UAAU,IAAI,SAAS,EAC9BA,EAAO,MAAQ3B,EACf2B,EAAO,OAAS1B,EAEX,eAAY,IACZ,sBAAmB,GAC1B,CAEA,IAAW,aAAc,CAChB,eAAQ,IAAI,CAAC,GAAG,KAAK,aAAa,QAAQ,CAAC,EAAE,KAAK7E,EAAI,CAC/D,CAEO,QAAQ2Y,EAAyC,CACtD,MAAO,CAACA,GAAQ,KAAK,MAAM,OAAS,EAAI,KAAK,MAAM,OAAO,EAAE,KAAO,QAAQ,KAAK,MAAM,IAAIA,CAAI,CAChG,CAEO,IAAIr6B,EAAiD,CAC1D,MAAMiK,EAAO,IAAI4zO,GAAgB,KAAM79O,CAAO,EAC9C,YAAK,MAAM,IAAIA,EAAQ,KAAMiK,CAAI,EAE1BA,CACT,CAEO,SAASA,EAAuB0P,EAAkD7P,EAAuB,CAC3G,IAACG,EAAK,OAAQ,CACfA,EAAK,cAAgB,IAAM,CACpB,cAASA,EAAM0P,EAAO7P,CAAQ,GAGrC,MACF,CAEM,MAAA+H,EAAO5H,EAAK,QAAQ0P,CAAK,EAC/B1P,EAAK,OAAO,SAAS,CACnB,KAAMwS,GAAS,YAAY,YAAY,GAAK,CAAC,KAAK,cAAgB5K,EAAK,WAAaA,EAAK,SACzF,GAAIA,EAAK,SACT,SAAA/H,CAAA,CACD,CACH,CAWA,OAAc,mBAAmBrK,EAAgBs+O,EAAkD,CAC1F,WAAI,MAAMt+O,CAAM,EAAE,KAAK,CAAC,EAAE,IAAI,CAACmV,EAAGrR,IAAQ,CAC/C,MAAMy6O,EAAaz6O,EAAMw6O,EACzB,MAAO,CAAC,WAAAC,EAAY,SAAUA,EAAaD,EAAa,CAAC,EAC1D,CACH,CACF,CC5LO,MAAME,WAMFH,EAAY,CAQrB,YAAY99O,EAMT,CACK,OACJ,MAAOA,EAAQ,MACf,OAAQA,EAAQ,OACjB,EAEDiX,GAAW,KAAMjX,CAAO,CAS1B,CAEO,KAAKk+O,EAAiCC,EAAoC,CAC/E,GAAG,KAAK,OACN,OAAO,KAAK,YAGd,KAAK,OAAS,GACd,KAAK,UAAYD,EACjB,KAAK,WAAaC,EAEZ,MAAAtsO,EAAO,KAAK,QAAQqsO,CAAS,EAC7Bh2O,EAAQi2O,IAAe,QAAa,KAAK,UAAY,KAAK,SAASA,CAAU,EAE7El0O,EAAO4H,EAAK,KAClB5H,EAAK,UAAY4H,EAAK,SACtB5H,EAAK,MAAQ/B,EAEb,MAAMoE,EAAW,CAAC,GAAG,KAAK,MAAM,QAAQ,EAAE,IAAKrC,GAASA,EAAK,KAAM,GACnE,OAAO,QAAQ,IAAIqC,CAAQ,EAAE,KAAKoV,EAAI,CACxC,CAKO,SAASw8N,EAAiCC,EAAoCC,EAA2B,CAC1G,KAAK,QAAa,UAAKF,EAAWC,CAAU,EAE5C,IAAAE,EAAmB,GAAOC,EAAoB,GAClD,OAAGJ,IAAc,OAAWG,EAAmB,KAAK,aAAaH,EAAWC,EAAYC,CAAY,EAC5FD,IAAe,SAA+BG,EAAA,KAAK,cAAcH,CAAU,GAE5EE,GAAoBC,CAC7B,CAEO,aAAazyO,EAA6BsyO,EAAoCr0O,EAAuB,CACpG,MAAC,UAAWy0O,CAAa,OAC/B,OAAGA,IAAc1yO,EACRsyO,IAAe,OAAY,KAAK,cAAcA,CAAU,EAAI,IAGlEA,IAAe,QACX,mBAAcA,EAAY,EAAK,EAGtC,KAAK,UAAYtyO,EAEJ,KAAK,QAAQA,EAAO0yO,CAAS,EACrC,KAAKz0O,CAAQ,EAEX,GACT,CAEO,cAAc+B,EAA8B2yO,EAAiB,GAAM,CAClE,MAAC,WAAYD,CAAa,OAChC,GAAGA,IAAc1yO,GAAS,CAAC,KAAK,SACvB,SAGT,KAAK,WAAaA,EAEZ,MAAA5B,EAAO,KAAK,UACZ/B,EAAQ,KAAK,SAAS2D,EAAO0yO,CAAS,EACtCl1M,EAAS,IAAM,CACdp/B,EAAA,OAAO,SAAS/B,EAAOs2O,CAAc,GAG5C,OAAGv0O,EAAK,OACCo/B,IAEPp/B,EAAK,eAAiBo/B,EAGjB,EACT,CAEO,SAAU,CACV,WAAM,QAASp/B,GAAS,CACtBA,EAAA,YAAY,KAAK,IAAM,CAC1BA,EAAK,OAAO,QAAO,CACpB,EACF,CACH,CACF,CC1HA,MAAqBw0O,WAAgCR,EAElD,CACD,aAAc,CACN,OACJ,MAAO,GACP,OAAQ,GACR,QAAS,CAACpyO,EAAO0yO,IAAc,CAC7B,MAAM/B,EAASkC,GACX,IAAAC,EACJ,OAAO9yO,EAAO,CACZ,KAAK2wO,EAAO,KACCmC,EAAAJ,IAAc/B,EAAO,MAAQ,gBAAkB,kBAC1D,MACF,KAAKA,EAAO,MACCmC,EAAAJ,IAAc/B,EAAO,KAAO,gBAAkB,OACzD,MACF,KAAKA,EAAO,QACCmC,EAAA,SACX,KACJ,CAEA,OAAO,KAAK,UAAU,QAAQA,CAAQ,CACxC,EACD,EAGD,KAAK,UAAU,UAAU,IADP,6BACuB,YAAY,EAErD,MAAMltO,EAAsC,CAAC,CAC3C,WAAY,EACZ,SAAU,GACV,KAAM,iBACL,CACD,WAAY,GACZ,SAAU,GACV,KAAM,UACL,CACD,WAAY,GACZ,SAAU,GACV,KAAM,QACL,CACD,WAAY,GACZ,SAAU,IACV,KAAM,iBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,mBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,sBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,sBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,qBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,6BACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,wBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,sBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,gBACP,EAED,KAAK,IAAI,CACP,KAAM,cACN,MAAAA,CAAA,CACD,CACH,CACF,CCpFA,MAAqBmtO,WAAsCX,EAGxD,CACD,YAAoBY,EAAkB,CAC9B,OACJ,MAAO,GACP,OAAQ,GACR,QAAS,CAAChzO,EAAO0yO,IAAc,CAC7B,MAAM/B,EAASsC,GAEX,IAAAnlO,EACJ,OAAO9N,EAAO,CACZ,KAAK2wO,EAAO,KACF7iO,EAAA,EACR,MACF,KAAK6iO,EAAO,MACF7iO,EAAA4kO,IAAc/B,EAAO,KAAO,EAAI,EACxC,MACF,KAAKA,EAAO,QACF7iO,EAAA,EACR,KACJ,CAEA,OAAO,KAAK,UAAU,QAAQA,CAAK,CACrC,EACA,SAAUklO,EAAU,CAAChzO,EAAO0yO,IACnBQ,GAAqBlzO,CAAK,EAC/B,OACL,EAzBiB,aAAAgzO,EA4BlB,KAAK,UAAU,UAAU,IADP,oCACuB,YAAY,EAErD,MAAMptO,EAAQqsO,GAAY,mBAAmB,EAAG,EAAE,EAClD,KAAK,IAAI,CACP,KAAM,kBACN,MAAArsO,CAAA,CACD,CACH,CAEO,SAAS5F,EAA2C,CACzD,OAAO,MAAM,SAASmzO,GAAwBnzO,CAAK,EAAGA,CAAK,CAC7D,CACF,CCvCA,MAAMqQ,GAAY,gCAClB,MAAqB+iO,EAAkC,CAGrD,YAAoBC,EAA4C,CAA5C,eAAAA,EACb,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAIhjO,GAAY,YAAY,CACvD,CAEO,SAASrQ,EAA2C47B,EAAmC,CAC5F,MAAM+0M,EAASsC,GACTnnO,EAAQ,KAAK,UAAU,OAAQ2M,GAAS,CAAC,CAACmjB,EAAYnjB,CAAI,CAAC,EAAE,IAAKA,GAE5DpjB,GADkB,GAAGojB,IAAS,eAAiB,kBAAoB,oBAAoB,GACnEpI,GAAY,QAASA,GAAY,SAAWoI,CAAI,CAE/E,EAED,IAAI66N,EAAuBC,EACxB,GAAAvzO,IAAU2wO,EAAO,aAClB2C,EAAW36O,EAAK,8BAA8B,EAC5B46O,EAAA,mBACVvzO,IAAU2wO,EAAO,QACzB2C,EAAW36O,EAAK,2BAA2B,EACzB46O,EAAA,sBACVvzO,IAAU2wO,EAAO,KACzB2C,EAAW36O,EAAK,6BAA6B,EAC3B46O,EAAA,qBACV33M,EAAY,OAAS,CAAC9vB,EAAM,OAAQ,CAC5ChD,GAAa,KAAK,UAAW/T,GAAc6mC,EAAY,KAAK,CAAC,EAC7D,YAEA03M,EAAW36O,EAAK,4BAA4B,EAC1B46O,EAAA,eAGd,MAAAr+O,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAImb,GAAWkjO,CAAe,EACxCr+O,EAAA,OAAO,GAAG4W,EAAOwnO,CAAQ,EAEf7nO,GAAA,KAAK,UAAWvW,CAAI,CACrC,CACF,CC/BA,MAAqBs+O,WAAkCv4M,EAA8B,CASnF,YAAoBkzC,EAA6B,CACzC,OACJ,SAAU,MAAMvlE,IAAa,MAAM,KAAK,SAAS,uBAAuBA,EAAQ,EAAE,GAAG,KACrF,SAAWA,GAAY,CACbA,EAAA,IAAI,OAAO,SACnB,KAAK,iBAAiBA,CAAO,CAC/B,EACA,SAAU,MAAMA,GAAY,CAC1B,MAAMgzB,EAAc,MAAM,KAAK,SAAS,uBAAuBhzB,EAAQ,EAAE,EACnE5I,EAAQyzO,GAAkC73M,CAAW,EAEnDhzB,EAAA,UAAU,SAAS5I,CAAK,EACxB4I,EAAA,OAAO,SAAS5I,EAAO47B,CAAW,CAC5C,EACA,OAAQ,CAAChzB,EAASlR,IAAQ,CACxB6hC,GAAuB3wB,EAAQ,IAAI,OAAQ,KAAK,KAAMlR,CAAG,CAC3D,EACA,gBAAkByjC,GAAS,CACzB,MAAM9c,EAAmBva,KACnB,CAAC,IAAA+0B,CAAA,EAAO/F,GAAkB,aAAa,CAC3C,OAAQqI,EAAK,GACb,UAAW,GACX,WAAY,KAAK,WACjB,WAAY,KAAK,WACjB,UAAW,GACX,cAAe,KAAK,cACpB,YAAa,CACX,cAAe,KAAK,cACpB,WAAY9c,EAAiB,IAAI,CACnC,EACD,EAGGwa,EAAA,OAAO,UAAU,IADH,wBACgB,EAE5B,MAAA66M,EAAY,IAAIX,GAA8B,EAAI,EAClDr3N,EAAS,IAAI03N,GAAkC,CAAC,eAAgB,OAAO,CAAC,EAC/D,OAAA3nO,GAAAotB,EAAI,gBAAiBnd,EAAO,SAAS,EAChDmd,EAAA,OAAO,OAAO66M,EAAU,SAAS,EACpCv4M,EAA2B,UAAYu4M,EACvCv4M,EAA2B,OAASzf,EACpCyf,EAA2B,iBAAmB9c,EAS9C8c,EAA2B,IAAMtC,EAE3BsC,CACT,EACA,kBAAmB3pB,EAAA,CACpB,EAvDiB,cAAA28D,EALpB,KAAU,WAAgC,aAC1C,KAAU,cAAgB,GAC1B,KAAU,WAAa,GACvB,KAAU,sBAA4E,CAAkB,WAAY,IA2DlH,KAAK,KAAOr7C,GAAkB,eAAe,KAAK,qBAAqB,CACzE,CAEO,SAAU,CACf,MAAM,MAAM,EACP,cAAS,QAASlqB,GAAY,CACjC,KAAK,iBAAiBA,CAAO,EAC9B,CACH,CAEU,iBAAiBA,EAA4B,CACrDA,EAAQ,UAAU,UAClBA,EAAQ,iBAAiB,SAC3B,CACF,CCjGA,SAAwB+qO,GAAoB1sL,EAAyB,CAC7D,MAAA7qC,EAAS,SAAS,cAAc,QAAQ,EACvCA,EAAA,UAAU,IAAI,iBAAiB,EACtC,MAAM7mB,EAAO,GACb6mB,EAAO,MAAQ7mB,EACf6mB,EAAO,OAAS7mB,EAEhB,MAAMqoC,EAAMxhB,EAAO,WAAW,KAAM,CAAC,MAAO,GAAM,EAClDwhB,EAAI,OAAS,YACb,MAAMg2M,EAAc,IAAM,CACxBh2M,EAAI,UAAUqpB,EAAO,EAAG,EAAGA,EAAM,WAAYA,EAAM,YAAa,EAAG,EAAG7qC,EAAO,MAAOA,EAAO,MAAM,GAGnG,OAAAkD,GAAQ,KACMs0N,IACLx3N,EAAO,YACf,EAEWw3N,IAELx3N,CACT,CCTA,MAAM/L,GAAY,+BAGlB,MAAqBwjO,EAAiC,CAWpD,YAAoBr/O,EAA+B25E,EAAoC7W,EAA+B,CAAlG,cAAA9iE,EAA+B,cAAA25E,EAAoC,YAAA7W,EAChF,eAAY,SAAS,cAAc,KAAK,EAC7C,KAAK,UAAU,UAAU,IAAIjnD,GAAY,YAAY,EAEhD,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAIA,GAAY,OAAO,EAEtC,UAAO,SAAS,cAAc,KAAK,EACxC,KAAK,KAAK,UAAU,IAAIA,GAAY,YAAY,EAE3C,WAAQ,SAAS,cAAc,KAAK,EACzC,KAAK,MAAM,UAAU,IAAIA,GAAY,aAAa,EAElD,KAAK,KAAK,OAAO,KAAK,KAAM,KAAK,KAAK,EAEjC,eAAU,OAAO,KAAK,IAAI,CACjC,CAEO,UAAUhF,EAAgB,CAC/B,GAAIA,GAOJ,GAAU,KAAK,OACb,WARS,CACN,KAAK,SACN,KAAK,OAAO,SACZ,KAAK,OAAS,QAGhB,OAMG,YAAS,SAAS,cAAc,KAAK,EAC1C,KAAK,OAAO,UAAU,IAAIgF,GAAY,SAAS,EAEzC,MAAAiN,EAAOjoB,GAAK,MAAO,qBAAqB,EACzC,YAAO,OAAOioB,CAAI,EAElB,eAAU,OAAO,KAAK,MAAM,CAInC,CAEO,eAAese,EAAmCnjB,EAAqCwuC,EAAyB,CACjH,IAAAliC,EACD6W,EAAY,OAAO,MACpB7W,EAAmBpsB,EAAK,sBAAsB,EAC7BosB,EAAA,UAAU,IAAI,YAAY,IAEtC,eAAY,IAAI5Z,GAAU,CAC7B,OAAQ1Q,GAAUmhC,EAAY,IAAI,EACnC,EAED7W,EAAmB,KAAK,UAAU,SAG/B,mCAAgC,IAAIguN,GAA8B,EAAK,EAC5E,KAAK,2BAA6B,IAAIK,GAAkC,CAAC36N,CAAI,CAAC,EAE9E,KAAK,KAAK,OAAOsM,EAAkB,KAAK,2BAA2B,SAAS,EAE5E,KAAK,MAAM,OAAO,KAAK,8BAA8B,SAAS,EAExDkiC,EAAA,UAAU,IAAI52C,GAAW,YAAY,EAExC42C,EAAM,QACPsD,GAAStD,CAAK,EAGV,MAAA7qC,EAASu3N,GAAoB1sL,CAAK,EACjC7qC,EAAA,UAAU,IAAI/L,GAAY,OAAO,EAEnC,eAAU,QAAQ+L,EAAQ6qC,CAAK,EAEpC,KAAK,kBAAkBrrB,CAAW,CACpC,CAEO,kBAAkBA,EAAmC,CACpD,MAAA57B,EAAQyzO,GAAkC73M,CAAW,EAEtD,mCAA8B,SAAS57B,CAAK,EAC5C,gCAA2B,SAASA,EAAO47B,CAAW,CAC7D,CAEO,SAAU,CACf,KAAK,8BAA8B,SACrC,CACF,CCtGA,MAAqBk4M,WAA0CnjL,EAAc,CAS3E,YAAYx8D,EAOT,CACK,QACNiX,GAAW,KAAMjX,CAAO,EAExB,MAAMkc,EAAY,gCACZna,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EAC/D,KAAK,UAAU,UAAU,IAAIma,EAAY,YAAY,EAE7Clc,EAAA,SAAS,OAAO+B,CAAS,EAE5B,8BAA2B,IAC3B,oBAAiB,IAEhB,MAAC,eAAAkzB,CAAkB,OAEVA,EAAA,IAAI/0B,CAAS,EAAE,yBAA0B,CAAC,CAAC,YAAAsiJ,EAAa,YAAA/6G,KAAiB,CACnF,KAAK,SAAS,KAAO+6G,GACtB,KAAK,kBAAkB/6G,CAAW,CACpC,CACD,EAEDxS,EAAe,IAAI,KAAK,QAAQ,EAAE,SAAWkuC,GAAW,CACjD,0BAAqB,QAAS16C,GAAQ,CACrCA,EAAA,QAAShU,GAAY,CAClB,uBAAkBA,EAAS0uD,CAAM,EACvC,EACF,EACF,EAEgBrmD,EAAA,KAAK,UAAYtQ,GAAM,CACtC,MAAMzK,EAAYyjB,EAAgBhZ,EAAE,OAAQ,wCAAwC,EACpF,GAAG,CAACzK,EACF,OAGF,MAAM0S,EAAU,KAAK,WAAW,IAAI1S,CAAS,EAC7C,GAAG,KAAK,SAAS,eAAiB0S,EAAQ,OAAQ,CAChD,KAAK,SAAS,WACd,MACF,CAEK,cAAS,UAAUA,EAAQ,MAAM,GACrC,CAAC,eAAAwgB,CAAA,CAAe,EAEd,iBAAY,KAAK,QAAQ,EAE9B,KAAK,MAAM,CACT,QAASlzB,EACT,eAAAkzB,EACA,uBAAwB,qBACzB,CACH,CAEQ,qBAAqBxgB,EAA2CmrO,EAAqC,CACpG,YAAK,cAAgB,CAACA,GAAgBnrO,EAAQ,SAAWmrO,EAAeA,GAAgBnrO,EAAQ,SAAWmrO,CACpH,CAEQ,kBAAkBnrO,EAA2CmrO,EAAqC,CACxG,MAAMC,EAAgB,KAAK,qBAAqBprO,EAASmrO,CAAY,EACrEnrO,EAAQ,UAAU,UAAU,OAAO,eAAgB,CAACorO,CAAa,EAE3D,MAAAC,EAAWrrO,EAAQ,SAAWmrO,EACpCnrO,EAAQ,UAAUqrO,CAAQ,CAC5B,CAEQ,kBAAkBr4M,EAAmC,CACrD,MAAAxnC,EAASqG,GAAUmhC,EAAY,IAAI,EACnCqP,EAAyC,CAAC,QAAS,cAAc,EACjEipM,EAAcjpM,EAAM,KAAMxyB,GAAS,CAAC,CAACmjB,EAAYnjB,CAAI,CAAC,EAC5D,IAAI07N,EAAsB,KAAK,qBAAqB,IAAI//O,CAAM,EAC3D,CAAC8/O,GAAe,CAACC,IAIhBA,GACF,KAAK,qBAAqB,IAAI//O,EAAQ+/O,EAAsB,IAAI,GAAK,EAGjElpM,EAAA,QAASxyB,GAAS,CAClB,IAAA7P,EAAUurO,EAAoB,IAAI17N,CAAI,EACpC,MAAA27N,EAAmBx4M,EAAYnjB,CAAI,EACzC,GAAG,CAAC,CAAC27N,GAAqB,CAAC,CAACxrO,EAAS,CAChCA,GACDA,EAAQ,kBAAkBgzB,CAAW,EAGvC,MACF,CAEA,GAAGw4M,EAAkB,CACnB,MAAMj+O,EAAS,KAAK,SAAS,qCAAqCylC,EAAanjB,CAAI,EACnF,GAAG,CAACtiB,EACF,OAGI,MAAC,MAAA8wD,EAAO,OAAAqQ,CAAU,EAAAnhE,EAExByS,EAAU,IAAIirO,GAAiC,KAAK,SAAU,KAAK,SAAUv8K,CAAM,EAEnF,KAAK,WAAW,IAAI1uD,EAAQ,UAAWA,CAAO,EAE9C,KAAK,kBAAkBA,EAAS,KAAK,SAAS,YAAY,EACtCurO,EAAA,IAAI17N,EAAM7P,CAAO,EAC7BA,EAAA,eAAegzB,EAAanjB,EAAMwuC,CAAK,EAE1C,eAAU,QAAQr+C,EAAQ,SAAS,OAExCurO,EAAoB,OAAO17N,CAAI,EAC/B7P,EAAQ,UAAU,SAEdurO,EAAoB,OACjB,0BAAqB,OAAO//O,CAAM,EAClC,gBAAW,OAAOwU,EAAQ,SAAS,EACxCA,EAAQ,QAAQ,GAIpB,KAAK,gBAAgB,EACtB,EACH,CAEQ,iBAAkB,CAClB,MAAAhV,EAAS,KAAK,UAAU,kBACzB,eAAU,QAAQ,OAAS,GAAKA,EAChC,eAAU,QAAQ,OAASA,GAAU,EAAI,IAAOA,IAAW,EAAI,IAAM,IAErE,qBAAkB,KAAK,eAAeA,CAAM,CACnD,CAEA,MAAa,YAAYu6E,EAA6B,EACnD,MAAMA,EAAS,cAAc,QAASvyC,GAAgB,CACrD,KAAK,kBAAkBA,CAAW,EACnC,CACH,CAEO,SAAU,CACV,gBAAW,QAAShzB,GAAY,CACnCA,EAAQ,QAAQ,EACjB,CACH,CACF,CC/IO,MAAMyrO,EAAgC,CAU3C,YAAYlgP,EAKT,CA6GH,KAAQ,mBAAqB,IAAM,CACjC,MAAMysC,EAAQ1c,GAAa,UAAUowN,EAAc,EAAE,CAAC,EACnD1zM,GACDA,EAAM,KAAK,EAGbpI,GAAa,aAAa,CAAC,OAAQ,KAAK,YAAa,IAG/C,4BAA0B+uB,GAAmB,CAC9C,cAAS,gBAAgB,KAAK,YAAa,CAC9C,MAAAA,CAAA,CACD,GAxHD,KAAK,QAAU,CAAC,CACd,KAAM,mBACN,KAAM,qBACN,OAAQ,IAAM,KAAK,eAAiB,KAAK,YAAY,OAAO,gBAC5D,QAAS,IAAM,KAAK,uBAAuB,EAAI,GAC9C,CACD,KAAM,gBACN,KAAM,uBACN,OAAQ,IAAM,KAAK,eAAiB,CAAC,KAAK,YAAY,OAAO,gBAC7D,QAAS,IAAM,KAAK,uBAAuB,EAAK,GAC/C,CACD,KAAM,mBACN,KAAM,sBACN,OAAQ,IAAM,CAAC,KAAK,eAAiB,CAAC,KAAK,YAAY,OAAO,aAC9D,QAAS,IAAM,KAAK,uBAAuB,EAAI,GAC9C,CACD,KAAM,gBACN,KAAM,wBACN,OAAQ,IAAM,CAAC,KAAK,eAAiB,KAAK,YAAY,OAAO,aAC7D,QAAS,IAAM,KAAK,uBAAuB,EAAK,GAC/C,CACD,KAAM,aACN,KAAM,wBACN,OAAQ,IAAM,GACd,QAAS,KAAK,oBACb,CACD,KAAM,aACN,UAAW,SACX,KAAM,uBACN,OAAQ,IAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,WAAW,EAC9E,QAAS,SAAW,CACA7mB,GAAA,CAChB,OAAQ,KAAK,aACb,MAAO,IAAIv1B,GAAU,CAAC,OAAQ,KAAK,YAAa,GAAE,QAClD,mBAAoB,MAAM,KAAK,SAAS,gBAAgB,YAAY,KAAK,MAAM,EAAI,uCAAyC,+BAC5H,oBAAqB,CAAC,IAAIA,GAAU,CAAC,OAAQ,KAAK,aAAa,EAAE,OAAO,EACxE,OAAQ,CACN,QAAS,kCACT,SAAU,EACZ,EACD,EAAE,KAAK,IAAM,CACZ,KAAK,SAAS,gBAAgB,aAAa,KAAK,OAAQ,KAAK,YAAY,GACxE0K,EAAI,CACT,EACD,EAEK,MAAC,eAAAuT,CAAkB,EAAAj1B,EACzB,KAAK,SAAWA,EAAQ,SACxB,KAAK,SAAWA,EAAQ,SACnB,YAAS,KAAK,SAAS,OAE5B,KAAK,QAAUg1B,GAAe,CAAC,QAAS,KAAK,QAAS,eAAAC,EAAe,EACrE,KAAK,QAAQ,UAAU,IAAI,8BAA+B,OAAO,EAEvCqC,GAAA,CACxB,QAASt3B,EAAQ,iBACjB,SAAU,MAAMwM,GAAM,CACpB,MAAM8pC,EAAK9wB,EAAgBhZ,EAAE,OAAQ,wBAAwB,EAC7D,GAAG,CAAC8pC,EACF,OAGC,KAAK,QAAQ,gBAAkBze,GACvBA,EAAA,OAAO,KAAK,OAAO,EAG9Bhb,GAAYrQ,CAAC,EAEb,MAAMvM,EAAS,KAAK,aAAeq2C,EAAG,QAAQ,OAAO,WACrD,KAAK,YAAc,MAAM,KAAK,SAAS,uBAAuBr2C,CAAM,EACjE,MAAK,YAAY,OAAO,OAItB,mBAAgB,MAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAQ,aAAa,EAE7F,MAAMu1B,GAAY,KAAK,QAAS,MAAMpF,GAAW,CAC/C,MAAMrmB,EAAO,MAAMqmB,EAAO,OAAOnwB,CAAM,EACvC,OAAAmwB,EAAO,QAAQ,UAAU,OAAO,OAAQ,CAACrmB,CAAI,EACtCA,CAAA,CACR,EAEa8rB,GAAArpB,EAAiB,QAAWA,EAAiB,QAAQ,CAAC,EAAIA,EAAiB,KAAK,QAAS,OAAO,EACxFqnB,GAAA,YAAY,KAAK,OAAO,EAChD,EACA,eAAAoB,CAAA,CACD,EAEcA,EAAA,IAAI/0B,CAAS,EAAE,yBAA0B,CAAC,CAAC,YAAAsiJ,EAAa,YAAA/6G,KAAiB,CACnF,QAAK,SAAS,KAAO+6G,EAAa,CAC7B,MAAAviJ,EAASqG,GAAUmhC,EAAY,IAAI,EACtC,KAAK,eAAiBxnC,GACvB4zB,GAAsB,MAAM,CAEhC,EACD,EAED,IAAIgE,EAAwB,SAAS,KACf2nC,GAAA,SAAS,KAAM,IAAM,CACzC,MAAMQ,EAASJ,KACJ/nC,EAAAmoC,EAASjwC,GAAa,UAAUowN,EAAc,EAAE,CAAC,EAAE,aAAa,EAAG,SAAS,KAEnFngL,GACFnsC,GAAsB,MAAM,GAE7BoB,CAAc,CACnB,CAgBF,CAEA,MAAqBmrN,EAA6B,CAShD,YAAYpgP,EAKT,CACDiX,GAAW,KAAMjX,CAAO,EAExB,MAAMkc,EAAY,0BAEZ+oC,EAAa,IAAI/lB,GAAW,MAAS,EAC3C+lB,EAAW,UAAU,UAAU,IAAI/oC,EAAY,aAAa,EAE5D,MAAMna,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EACrDA,EAAA,UAAU,IAAIma,CAAS,EAIjC,MAAMgxB,EAAa,KAAK,WAAa,IAAImyM,GAA0B,KAAK,QAAQ,EAE1E,CAAC,SAAArlK,EAAU,eAAA/kD,CAAkB,OAC9B,iBAAc,IAAIirN,GAAgC,CACrD,GAAGlgP,EACH,iBAAkBktC,EAAW,KAC7B,eAAAjY,EACA,SAAA+kD,CAAA,CACD,EAEI,gCAA6B,IAAI2lK,GAAkC,CACtE,GAAG3/O,EACH,SAAUilD,EAAW,UACrB,cAAe,GAChB,EAEUA,EAAA,OAAqB/X,EAAW,MACjCnrC,EAAA,OAAOkjD,EAAW,SAAS,EAE7BjlD,EAAA,SAAS,OAAO+B,CAAS,EAElBkzB,EAAA,IAAI/0B,CAAS,EAAE,yBAA0B,CAAC,CAAC,YAAAsiJ,EAAa,YAAA/6G,KAAiB,CACnF,KAAK,SAAS,KAAO+6G,GACtB,KAAK,kBAAkB/6G,CAAW,CACpC,CACD,EAEwB,IAAImJ,GAAiB,CAC5C,WAAAqU,EACA,WAAY,IACH,KAAK,SAAS,qBAAqB,yBAAyB,KAAK,SAAS,EAAE,EAAE,KAAK,CAAC,CAAC,aAAAxN,EAAc,MAAAC,MAC3FD,EAAA,QAAShQ,GAAgB,CACpC,KAAK,kBAAkBA,CAAW,EACnC,EAEMiQ,EACR,CACH,CACD,EAED,KAAK,YAAYsiC,CAAQ,CAC3B,CAEQ,kBAAkBvyC,EAAmC,CACrD,MAAAxnC,EAASqG,GAAUmhC,EAAY,IAAI,EACnCtZ,EAAM,KAAK,WAAW,IAAIluB,CAAM,EACnC,GAAAwnC,EAAY,OAAO,KAAM,CACvBtZ,GACI,gBAAW,OAAOluB,CAAM,EAG/B,MACF,CAEA,GAAG,CAACkuB,EAAK,CACF,gBAAW,IAAIluB,CAAM,EAC1B,MACF,CAEK,gBAAW,OAAOA,CAAM,CAC/B,CAEA,MAAa,YAAY+5E,EAA6B,EAiB/B,MAAMA,EAAS,cACvB,QAASvyC,GAAgB,CACpC,KAAK,kBAAkBA,CAAW,EACnC,CACH,CAEO,SAAU,CACf,KAAK,WAAW,UAChB,KAAK,2BAA2B,SAClC,CACF,CCrRA,MAAqB44M,EAA4B,CAG/C,YAAoBxoN,EAAuB,CAAvB,cAAAA,EACb,qBAAkB,IAAIn3B,GAAK,YAAY,CAC1C,IAAK,8BACN,EAED,KAAK,gBAAgB,QAAQ,UAAU,IAAI,wBAAwB,CACrE,CAEO,QAAS,CACT,qBAAgB,QAAQ,QAC/B,CAEO,OAAOs5E,EAA6B,CACnC,MAAC,MAAAnuE,CAAS,EAAAmuE,EAEhB,IAAI/jE,EAAkBnE,EACnBjG,IAAUo3I,GAAiB,WACtBhtI,EAAA,+BAEAA,EAAA,2BACCnE,EAAA,CAAEkoE,EAAS,UAAkC,kBAAkB,GAGlE,MAAC,gBAAAsmK,CAAmB,OAC1BA,EAAgB,iBAAiB,CAC/B,IAAArqO,EACA,KAAAnE,CAAA,CACD,EAEG,KAAK,gBAAgB,QAAQ,eAC/B,KAAK,SAAS,OAAO,KAAK,gBAAgB,OAAO,CAErD,CACF,CClCA,MAAqByuO,EAAsB,CAGzC,YAAoB1oN,EAAuB,CAAvB,cAAAA,EAClB,KAAK,UAAY,IAAI7gB,GAAU,CAAC,OAAQtQ,GAAa,CACvD,CAEO,OAAOszE,EAA6B,CACnC,MAAC,UAAA/hE,EAAW,SAAA4f,CAAY,OACxB0qH,EAAYvoE,EAAS,UACrB/5E,EAAS+5E,EAAS,OAAO,SAAS,EAAI,EACzCuoE,EAAU,MACX5tI,GAAakjB,EAAUj3B,GAAc2hJ,EAAU,KAAK,CAAC,GAElDtqI,EAAU,QAAQ,SAAWhY,IAC9BgY,EAAU,QAAQ,OAAShY,EAC3BgY,EAAU,OAAO,GAGhBA,EAAU,QAAQ,gBAAkB4f,GAC5BA,EAAA,OAAO5f,EAAU,OAAO,EAGvC,CACF,CCzBwB,SAAA0iJ,GAAWz+I,EAAmB+Y,EAAgCj1B,EAOnF,CACD,MAAMqyH,EAAan2G,EAAY,UACzBskO,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAInuH,EAAY,cAAe,aAAa,EAE7DryH,EAAQ,MACTwgP,EAAU,OAAOt/O,GAAKlB,EAAQ,IAAI,CAAC,EAGjCA,EAAQ,UACV00B,GAAO8rN,CAAS,EAGfxgP,EAAQ,UACCwgP,EAAA,UAAU,IAAInuH,EAAa,MAAM,EAG1CryH,EAAQ,WACCwgP,EAAA,UAAU,IAAInuH,EAAa,QAAQ,EAG5CryH,EAAQ,UACT8c,EAAiB0jO,EAAWxgP,EAAQ,SAAU,CAAC,eAAAi1B,CAAe,GAGhE,IAAI1lB,EAAMixO,EACV,GAAGxgP,EAAQ,KAAM,CACT,MAAAyqB,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAU,IAAI4nG,EAAa,aAAc,uBAAuB,EAE9D,MAAAxrC,EAAS,OAAO7mF,EAAQ,MAAU,SAAWwE,EAAKxE,EAAQ,IAAI,EAAIA,EAAQ,KAChF6mF,EAAO,UAAU,IAAIwrC,EAAa,QAAS,kBAAkB,EAEzD5nG,EAAA,OAAO+1N,EAAW35J,CAAM,EAEtBt3E,EAAAkb,CACR,CAEO,OAAAlb,CACT,CCpCA,MAAM2M,GAAY,kBACZukO,GAAyBvkO,GAAY,kBAW3C,MAAqBwkO,WAAuBnvN,EAEzC,CAiBD,YAAYvxB,EAAgC,CAC1C,MAAM,EAAI,EAYZ,KAAQ,SAAW,IAAM,CACvB,KAAK,cAAc,EAAI,EACvB,KAAK,YAAY,EACjB,KAAK,YAAY,GAdjBiX,GAAW,KAAMjX,CAAO,EAExB,KAAK,IAAM,KAAK,KAAO,KAAK,MAAQ,KAAK,OAAS,EAC7C,aAAQ,UAAU,IAAIkc,EAAS,EAEpC,KAAK,kBAAkB,EACvB,KAAK,gBAAgB,EAEVva,GAAA,iBAAiB,SAAU,KAAK,QAAQ,CACrD,CAQO,gBAAgBuV,EAAgB,CACjCA,EAGF,KAAK,kBAAkB,EAFvB,KAAK,sBAAsB,CAI/B,CAEO,iBAAkB,CAClB,aAAQ,UAAU,OAAOgF,EAAS,EACvC,KAAK,sBAAsB,CAC7B,CAEO,uBAAwB,CAC1B,KAAK,WACD,cAAS,QAASk0C,GAAY,CACjCA,EAAQ,OAAO,EAChB,EAED,KAAK,SAAW,OAEpB,CAEO,SAAU,CACJzuD,GAAA,oBAAoB,SAAU,KAAK,QAAQ,EACtD,KAAK,aAAa,iBACpB,CAEQ,mBAAoB,CAC1B,GAAG,KAAK,SACN,OAGI,MAAAo1B,EAAsB,CAAC,IAAK,IAAK,IAAK,IAAK,KAAM,KAAM,KAAM,IAAI,EACvE,KAAK,SAAWA,EAAM,IAAKjB,GAAS,CAC5B,MAAArL,EAAM,SAAS,cAAc,KAAK,EACxC,OAAAA,EAAI,QAAQ,KAAOqL,EACnBrL,EAAI,UAAU,IAAIg2N,GAAwBA,GAAyB,SAAW3qN,CAAI,EAC7E,aAAQ,OAAOrL,CAAG,EAChBA,CAAA,CACR,CACH,CAEQ,iBAAkB,CACxB,IAAIk2N,EACFC,EACAC,EACAC,EACAC,EACAC,EACAC,EACF,MAAMlyC,EAAe,KAAK,aAAe,IAAIvkK,GAAa,CACxD,QAAS,KAAK,QACd,QAAS,CAACQ,EAAOC,EAAOz+B,IAAM,CAG5B,GAAGy0O,EAAc,CACf,MAAMC,EAAgBD,EAAa,SAAS,GAAG,GAAKA,EAAa,SAAS,GAAG,EACvEE,EAAiBF,EAAa,SAAS,GAAG,GAAKA,EAAa,SAAS,GAAG,EACxEG,EAAmBH,EAAa,SAAS,GAAG,GAAK,CAACC,EAAgBv1M,GAAW,MAAQi1M,EAAYC,EAAaD,EAC9GS,EAAoBJ,EAAa,SAAS,GAAG,GAAK,CAACE,EAAiBx1M,GAAW,OAASg1M,EAAWG,EAAcH,EAEvH,GAAGO,EAAe,CACV,MAAAI,EAAcL,EAAa,SAAS,GAAG,GAAKj2M,EAAQ,GAAKi2M,EAAa,SAAS,GAAG,GAAKj2M,EAAQ,EAC/Fu2M,EAAa,KAAK,IAAIv2M,CAAK,GAAKs2M,EAAc,EAAI,IAExD,KAAK,MAAQ7lN,GAAMolN,EAAaU,EAAY,KAAK,SAAUH,CAAgB,EAExE,KAAK,cACD,YAAS3lN,GAAM,KAAK,MAAQ,KAAK,YAAcslN,EAAkB,KAAK,UAAWM,CAAiB,EACvG,KAAK,MAAQ,KAAK,OAAS,KAAK,YAAcL,EAElD,CAEA,GAAGG,EAAgB,CACX,MAAAG,EAAcL,EAAa,SAAS,GAAG,GAAKh2M,EAAQ,GAAKg2M,EAAa,SAAS,GAAG,GAAKh2M,EAAQ,EAC/Fs2M,EAAa,KAAK,IAAIt2M,CAAK,GAAKq2M,EAAc,EAAI,IAExD,KAAK,OAAS7lN,GAAMqlN,EAAcS,EAAY,KAAK,UAAWF,CAAiB,EAE5E,KAAK,cACD,WAAQ5lN,GAAM,KAAK,OAAS,KAAK,YAAculN,EAAiB,KAAK,SAAUI,CAAgB,EACpG,KAAK,OAAS,KAAK,MAAQ,KAAK,YAAcL,EAElD,CAIGE,EAAa,SAAS,GAAG,IACrB,UAAO,KAAK,IAAIL,EAAYC,EAAa,KAAK,SAAUD,EAAY51M,CAAK,GAG7Ei2M,EAAa,SAAS,GAAG,IACrB,SAAM,KAAK,IAAIN,EAAWG,EAAc,KAAK,UAAWH,EAAW11M,CAAK,EAC/E,MAEA,KAAK,IAAM01M,EAAW11M,EACtB,KAAK,KAAO21M,EAAY51M,EAG1B,KAAK,YAAY,EACjB,KAAK,YAAY,CACnB,EACA,kBAAoBx+B,GAAM,CACxB,MAAM+Y,EAAS/Y,EAAE,OACXg1O,EAAgBh8N,EAAgBD,EAAQk7N,EAAsB,EAEjE,QAAK,mBAAqB,CAAC,KAAK,kBAAkBj0O,EAAGg1O,EAAgB,SAAW,MAAM,EAChF,SAGT,GAAGA,EAAe,CAChBP,EAAeO,EAAc,QAAQ,KACrC,IAAI91M,EAAmD,aACpDu1M,IAAiB,MAAQA,IAAiB,KAClCv1M,EAAA,cACDu1M,IAAiB,MAAQA,IAAiB,KACzCv1M,EAAA,eACDu1M,IAAiB,KAAOA,IAAiB,OACxCv1M,EAAA,cAEXqjK,EAAa,UAAUrjK,CAAM,OAEdu1M,EAAA,OACflyC,EAAa,UAAU,UAAU,EAG5B,QACT,EACA,aAAc,IAAM,CAClB4xC,EAAW,KAAK,IAChBC,EAAY,KAAK,KACjBC,EAAa,KAAK,MAClBC,EAAc,KAAK,OAEf,KAAK,UACF,aAAU,SAAS,cAAc,KAAK,EAC3C,KAAK,QAAQ,UAAU,IAAI5kO,GAAY,UAAU,GAG9C,aAAQ,OAAO,KAAK,OAAO,EAE7B,KAAK,cACN8kO,EAAkB,KAAK,MAAQ,KAAK,OAAS,KAAK,YAClDD,EAAmB,KAAK,OAAS,KAAK,MAAQ,KAAK,aAGlD,KAAK,kBACD,aAAQ,UAAU,IAAI,eAAe,EACrC,KAAK,QAAQ,WAEtB,EACA,QAAS,IAAM,CACV,KAAK,iBACD,aAAQ,UAAU,OAAO,eAAe,EAG/C,KAAK,QAAQ,QACf,EACA,YAAa,SAAS,KACvB,CACH,CAEO,qBAAsB,CAC3B,KAAK,IAAOp1M,GAAW,OAAS,EAAM,KAAK,OAAS,EACpD,KAAK,KAAQA,GAAW,MAAQ,EAAM,KAAK,MAAQ,EACnD,KAAK,YAAY,CACnB,CAEQ,cAAc81M,EAA0B,CAC3C,GAAAA,GAAkB,KAAK,YAAa,CACrC,MAAMC,EAAa,KAAK,MAAQ,KAAK,OAAS,KAAK,YAC7CC,EAAc,KAAK,OAAS,KAAK,MAAQ,KAAK,YAE9CP,EAAmBz1M,GAAW,MAAQ,KAAK,KAC3C01M,EAAoB11M,GAAW,OAAS,KAAK,IAChD,QAAK,MAAQy1M,EACd,KAAK,MAAQA,EACb,KAAK,OAAS,KAAK,MAAQ,KAAK,YAAcO,UACtC,KAAK,OAASN,EACtB,KAAK,OAASA,EACd,KAAK,MAAQ,KAAK,OAAS,KAAK,YAAcK,MAE9C,OAEJ,CAEA,KAAK,MAAQjmN,GAAM,KAAK,MAAO,KAAK,SAAUkQ,GAAW,KAAK,EAC9D,KAAK,OAASlQ,GAAM,KAAK,OAAQ,KAAK,UAAWkQ,GAAW,MAAM,CACpE,CAEQ,aAAc,CACf,SAAMlQ,GAAM,KAAK,IAAK,EAAGkQ,GAAW,OAAS,KAAK,MAAM,EACxD,UAAOlQ,GAAM,KAAK,KAAM,EAAGkQ,GAAW,MAAQ,KAAK,KAAK,CAC/D,CAEQ,aAAc,CACpB,KAAK,QAAQ,MAAM,IAAM,KAAK,IAAM,KACpC,KAAK,QAAQ,MAAM,KAAO,KAAK,KAAO,KACjC,aAAQ,MAAM,MAAQ,OACtB,aAAQ,MAAM,OAAS,OAC5B,KAAK,QAAQ,MAAM,MAAQ,KAAK,MAAQ,KACxC,KAAK,QAAQ,MAAM,OAAS,KAAK,OAAS,KAErC,mBAAc,SAAU,KAAK,KAAK,CACzC,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,MACd,CAEA,IAAW,QAAS,CAClB,OAAO,KAAK,OACd,CAEA,IAAY,MAAMz0B,EAAe,CAC/B,KAAK,OAASA,CAChB,CAEA,IAAY,OAAOA,EAAe,CAChC,KAAK,QAAUA,CACjB,CAEA,IAAW,OAAsB,CAC/B,KAAM,CAAC,IAAAggB,EAAK,KAAAD,EAAM,MAAA3Q,EAAO,OAAAC,GAAU,KAC5B,OACL,IAAA2Q,EACA,KAAAD,EACA,MAAA3Q,EACA,OAAAC,CAAA,CAEJ,CAEA,IAAW,MAAM1a,EAAqB,CACpC,KAAM,CAAC,IAAAqrB,EAAK,KAAAD,EAAM,MAAA3Q,EAAO,OAAAC,GAAU1a,EACnC,KAAK,IAAMqrB,EACX,KAAK,KAAOD,EACZ,KAAK,MAAQ3Q,EACb,KAAK,OAASC,EACd,KAAK,SAAS,CAChB,CAEO,aAAaD,EAAeC,EAAgB,CACjD,KAAK,SAAWD,EAChB,KAAK,UAAYC,CACnB,CACF,QClTA,MAAqBq7N,EAAa,CAOhC,YAAY5hP,EAKT,CAXHs9I,GAAA,KAAAukG,GAAA,QAYE5qO,GAAW,KAAMjX,CAAO,EAEnB,mBAAc,CAAC4xB,EAAkB,EAEtC,KAAK,eAAe,IAAIjwB,EAAU,EAAE,eAAgB,CAAC2sB,EAAMi3B,IAAO,EAC7DA,IAAO4a,GAAW,QAAU7xC,IAAS6xC,GAAW,SAC5C,mBAAc,CAACvuC,EAAkB,CACxC,CACD,CACH,CAEO,SAAU,CACf,MAAMkwN,EAAU,KAAK,QAClBA,GACDA,EAAQ,QAAQ,CAEpB,CAEA,IAAW,SAAU,CACnB,OAAOpkG,GAAA,KAAKmkG,GACd,CAEA,IAAW,OAAQ,CACjB,OAAO,KAAK,QAAU,KAAK,QAAQ,MAAQ,KAAK,aAClD,CAEA,IAAW,MAAMh2O,EAAqB,CACpC,KAAK,cAAgBA,CACvB,CAEQ,cAAc2D,EAAkB,CAClC,IAAC,QAAAsyO,CAAW,OAChB,GAAGtyO,EAAS,CACV,GAAGsyO,EACD,OAGFA,EAAUrkG,GAAA,KAAKokG,GAAW,IAAInB,GAAe,KAAK,cAAc,GAEhEoB,EAAQ,MAAQ,KAAK,cAClB,KAAK,cAAc,MAAQ,QAC5BA,EAAQ,oBAAoB,EAG3B,KAAK,UACN,KAAK,eAAe,IAAIA,CAAO,EAAE,SAAU,KAAK,QAAQ,CAC1D,KACK,CACL,GAAG,CAACA,EACF,OAGF,KAAK,cAAgBA,EAAQ,MAC7BA,EAAQ,gBAAgB,EACxBA,EAAQ,QAAQ,EAChBrkG,GAAA,KAAKokG,GAAW,OAClB,CACF,CACF,CAtEEA,GAAA,YCPsB,SAAAE,GAAgB7lO,EAAmBrZ,EAAyB82B,EAAkB,CAC3F,OAAA92B,EAAA,QAAS4R,GAAY,CACpBA,EAAA,UAAU,OAAOyH,EAAWyd,CAAO,EAC5C,EAEM,IAAMooN,GAAgB7lO,EAAWrZ,EAAU,CAAC82B,CAAO,CAC5D,CCwBY,IAAAmlN,QACVA,EAAAkD,EAAA,qBACAlD,EAAAkD,EAAA,iBACAlD,EAAAkD,EAAA,+BACAlD,EAAAkD,EAAA,mCACAlD,EAAAkD,EAAA,eALUlD,QAAA,IAUL,SAASQ,GAAkC73M,EAAmC,CACnF,MAAM+0M,EAASsC,GACZ,OAAAr3M,EAAY,OAAO,aACb+0M,EAAO,aACN/0M,EAAY,oBAAsB,OACnC+0M,EAAO,KACN/0M,EAAY,OAAO,MACpBA,EAAY,OAAO,gBAAkB+0M,EAAO,MAAQA,EAAO,eAE3DA,EAAO,OAElB,CAEO,SAASwC,GAAwBnzO,EAAuF,CAC7H,MAAM2wO,EAASsC,GACf,OAAOjzO,EAAO,CACZ,KAAK2wO,EAAO,eACZ,KAAKA,EAAO,aACV,OAAOA,EAAO,MAChB,QACS,OAAA3wO,CACX,CACF,CAEO,SAASkzO,GAAqBlzO,EAA2C,CAC9E,MAAM2wO,EAASsC,GACX,IAAAmD,EACJ,OAAOp2O,EAAO,CACZ,KAAK2wO,EAAO,KACCyF,EAAA,OACX,MACF,KAAKzF,EAAO,MACZ,KAAKA,EAAO,aACZ,KAAKA,EAAO,eACCyF,EAAAp2O,IAAU2wO,EAAO,MAAQ,YAAc,MAClD,MACF,KAAKA,EAAO,QACCyF,EAAA,QACX,KACJ,CAEA,MAAMC,EAAgB/8N,GAAiB,YAAY,MAAQ88N,EAAW,aAAa,EAG5E,OAFqBloO,GAASmoO,CAAa,CAGpD,CAEY,IAAAxD,QACVA,EAAAyD,EAAA,eACAzD,EAAAyD,EAAA,iBACAzD,EAAAyD,EAAA,qBAHUzD,QAAA,IAMI,SAAA0D,GAAkC7/F,EAAgC96G,EAAmC,CACnH,MAAM+0M,EAASkC,GACZ,OAACj3M,EAAY,OAAO,gBAEbA,EAAY,OAAO,MACpB+0M,EAAO,MAEPA,EAAO,QAJPA,EAAO,IAMlB,CAEA,IAAIa,GAA8B,CAChC,MAAO,IACP,OAAQ,GACV,EAEA,MAAMnhO,GAAY,aAElB,MAAqBikO,WAAuBpwN,EAAa,CAmBvD,aAAc,CACZ,MAAM,mBAAoB,CACxB,KAAM,GACN,eAAgB,GAChB,SAAU,GACV,MAAO,GACR,EA0LH,KAAQ,kBAAoB,IAAM,CAChC+vC,GAAkB,KAAK,SAAS,GAG1B,sBAAoBnD,GAAkB,CAC5C,KAAK,UAAU,UAAU,OAAO,gBAAiBA,CAAI,EACrD,KAAK,iBAAiB,UAAU,OAAO,gBAAiBA,CAAI,GAG9D,KAAQ,iBAAmBolL,GAAgB,KAAK,KAAM,cAAc,EAEpE,KAAQ,aAAe,IAAM,CAC3B,MAAMnoN,EAAS,KAAK,iBAAiB,CAAC,KAAK,QAAQ,EAAG,EAAI,EAC1D,KAAK,SAAS,mBAAqB,UAAQ,IAAM,CACxCA,GAAA,CACR,GAGH,KAAQ,cAAgB,IAAM,CAC5B,MAAMA,EAAS,KAAK,iBAAiB,CAAC,KAAK,SAAS,EAAG,EAAI,EAC3D,KAAK,SAAS,oBAAsB,UAAQ,IAAM,CACzCA,GAAA,CACR,GAGH,KAAQ,YAAc,IAAM,CACpB,MAAA6N,EAAc,KAAK,SAAS,YAC9BA,EAAY,OAAO,gBAKrB,KAAK,SAAS,cAJXA,EAAY,oBAAsB,QAC9B,cAAS,gBAAgB,EAAI,CAItC,EAGF,KAAQ,aAAe,SAAW,CAC1B,MAAA46M,EAAU9+F,GAAqB,CAC9B,cAAS,OAAOA,CAAO,GAG3B,MAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,SAAS,OAAQ,aAAa,EACrExzH,GAAA,YAAYD,GAAW,uBAAwB,CAC1D,aAAc,sBACd,mBAAoB,qBACpB,WAAY,CAAC,CACX,KAAM,sBACP,EACD,QAAS,CAAC,CACR,QAAS,mBACT,SAAU,CAACtjB,EAAGwkB,IAAe,CACpBqxN,EAAA,CAAC,CAACrxN,EAAW,IAAI,CAC1B,EACA,SAAU,GACX,EACF,EAAE,KAAK,EAERqxN,EAAO,EAAK,CACd,EAOF,KAAQ,mBAAqB,IAAM,CACjC,KAAK,gBAAgB,EACrB,MAAMriL,EAASJ,KAET,CAAC,cAAA0iL,EAAe,kBAAAC,CAAqB,OAErCC,EAAgB,KAAK,UAAU,UAAU,SAAS,gBAAgB,EACxE,KAAK,UAAU,UAAU,OAAO,iBAAkBxiL,CAAM,EACxDsiL,GAAiBA,EAAc,UAAU,OAAO,OAAQtiL,CAAM,EAC9DuiL,GAAqBA,EAAkB,UAAU,OAAO,OAAQ,CAACviL,CAAM,EACvE,KAAK,SAAS,UAAU,OAAO,OAAQA,CAAM,EAE1CA,IAAWwiL,IACZtvL,GAAqB,iBAAiB8M,CAAM,EAE5BtmD,GAAA,cAAcsmD,EAAS,UAAY,MAAS,EAC9D,EAGF,KAAQ,gBAAkB,IAAM,CAC9B,MAAMA,EAASJ,KACTkiL,EAAU,KAAK,cAAc,QAC7B11N,GAAS4zC,GAAU,CAAC,EAAE8hL,GAAWA,EAAQ,OAAS,OAAS,CAAC,CAAC,KAAK,YAOlEW,EAAS,KAAK,UAAU,UAAU,SAAS,eAAe,EAC5D,IAAApxN,EACDjF,GAAS,CAACq2N,IACXpxN,EAAU,MAAM,KAAK,KAAK,iBAAiB,QAAQ,EAC3CA,EAAA,QAAS5c,GAAY,CAC3BA,EAAQ,MAAM,QAAU,IACzB,EAEI,KAAK,iBAAiB,YAG7B,KAAK,UAAU,UAAU,OAAO,gBAAiB2X,CAAK,EACtD,KAAK,UAAU,UAAU,OAAO,OAAQA,CAAK,EAC7C,KAAK,cAAc,UAAU,OAAO,OAAQ,CAACA,CAAK,EAE/CiF,GAEOA,EAAA,QAAS5c,GAAY,CAC3BA,EAAQ,MAAM,QAAU,GACzB,CAEH,EAGF,KAAQ,kBAAoB,IAAM,CAC3B,eAAU,UAAU,OAAO,uBAAuB,GA/SvD,KAAK,YAAc,EACnB,KAAK,UAAU,UAAU,IAAIyH,GAAW,OAAO,EAEzC,MAAA89D,EAAW,KAAK,SAAW6qE,GAAqB,UAChD,CAAC,eAAA5vH,CAAkB,OAEzB,GAAG,CAAC0qC,GAAiB,CACnB,MAAM2iL,EAAgB,KAAK,cAAgB9gN,GAAW,YAAY,EAC5DkhN,EAAiB,KAAK,eAAiBlhN,GAAW,cAAgBtlB,GAAY,MAAM,EACpFqmO,EAAoB,KAAK,kBAAoB/gN,GAAW,aAAa,EAE3E1kB,EAAiBwlO,EAAe,KAAK,kBAAmB,CAAC,eAAArtN,CAAe,GACxEnY,EAAiB4lO,EAAgB,KAAK,kBAAmB,CAAC,eAAAztN,CAAe,GAEzEnY,EAAiBylO,EAAmB,IAAM,CACvB1iL,IAAA,EAChB,CAAC,eAAA5qC,CAAA,CAAe,EAEnBuqC,GAAsB,KAAK,UAAW,KAAK,mBAAoBvqC,CAAc,CAC/E,CAEkB,KAAK,UAAYuM,GAAW,SAAS,EACvD,MAAMmhN,EAAgB,KAAK,cAAgBnhN,GAAW,cAAgBtlB,GAAY,WAAW,EAE7FY,EAAiB6lO,EAAe,KAAK,kBAAmB,CAAC,eAAA1tN,CAAe,GAElE,MAAA2tN,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI1mO,GAAY,cAAc,EAEnD,KAAK,MAAM,UAAU,IAAIA,GAAY,eAAe,EAE9C,MAAA2c,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI3c,GAAY,kBAAkB,EAE1C0mO,EAAA,OAAO,KAAK,MAAO/pN,CAAQ,EAEtC,KAAK,OAAO,UAAU,IAAI3c,GAAY,SAAS,EAC/C,KAAK,OAAO,OAAO,GAAG,CAAC,KAAK,kBAAmB0mO,EAA6B,KAAK,cAAeD,CAAa,EAAE,OAAO,OAAO,CAAC,EAE9H,MAAME,EAAY,KAAK,OAAO,UAAU,EAAK,EACvCC,EAAgBF,EAAW,UAAU,EAAK,EAC1CG,EAAiB,KAAK,MAAM,UAAU,EAAK,EAEjDD,EAAc,OAAOC,CAAc,EAE7B,MAAAC,EAAgBxhN,GAAW,YAAY,EACnCqhN,EAAA,OAAO,GAAG,CAACG,EAAeF,EAAe,KAAK,cAAc,EAAE,OAAO,OAAO,CAAC,EAEvFhmO,EAAiBkmO,EAAe,KAAK,kBAAmB,CAAC,eAAA/tN,CAAe,GAEnE,UAAK,QAAQ4tN,CAAS,EAErB,MAAAI,EAAmB,IAAI/jN,GAAW,MAAS,EAChC+jN,EAAA,UAAU,UAAU,IAAI,gCAAgC,EACpE,eAAU,OAAOA,EAAiB,SAAS,EAEhD,KAAK,eAAiB,IAAI1C,GAAsB,KAAK,KAAK,EACrD,0BAAuB,IAAIF,GAA4BxnN,CAAQ,EAC/D,oCAAiC,IAAIwnN,GAA4B0C,CAAc,EACpF,KAAK,iBAAiB,EAEjB,gCAA6B,IAAIpD,GAAkC,CACtE,SAAUsD,EAAiB,UAC3B,SAAAjpK,EACA,eAAA/kD,EACA,cAAe,GACf,eAAiBx1B,GAAW,CAC1B,KAAK,YAAcA,EACnB,KAAK,gBAAgB,CACvB,EACA,SAAU,KAAK,SAChB,EACI,2BAAwB,IAAI2gP,GAA6B,CAC5D,SAAU,KAAK,KACf,SAAApmK,EACA,eAAA/kD,EACA,SAAU,KAAK,SAChB,EAEI,kBAAe,IAAI2sN,GAAa,CACnC,eAAA3sN,EACA,eAAgB,CACd,SAAU,IACV,UAAW,IACX,QAAS,KAAK,QACd,kBAAoBzoB,GAAM,CACxB,MAAM+Y,EAAS/Y,EAAE,OACjB,MAAG,EAAAgZ,EAAgBD,EAAQ,UAAU,GACnCC,EAAgBD,EAAQ,mBAAmB,GAC3CC,EAAgBD,EAAQ,UAAU,GAClCC,EAAgBD,EAAQ,yCAAyC,GACjEq6C,KAKJ,CACF,EACA,SAAU,IAAM,KAAK,gBAAgB,gBACrCy9K,EAAA,CACD,EAEDpoN,EAAe,IAAI+kD,CAAQ,EAAE,QAAS,IAAM,CAC1C,KAAK,eAAe,EACrB,EAED/kD,EAAe,IAAI/0B,CAAS,EAAE,oBAAsBqiJ,GAAc,CAC7D,KAAK,UAAU,KAAOA,EAAU,IACjC,KAAK,eAAe,CACtB,CACD,EAEDttH,EAAe,IAAI+kD,CAAQ,EAAE,SAAU,IAAM,CAC3C,KAAK,aAAa,EACnB,EAED/kD,EAAe,IAAI,KAAK,0BAA0B,EAAE,iBAAkB,KAAK,gBAAgB,EAEtF,sBAAiB,QAAS,IAAM,CAC7B,MAAC,aAAAiuN,CAAgB,OACvB7F,GAAgB6F,EAAa,MAE7B,KAAK,2BAA2B,UAChC,KAAK,sBAAsB,UAC3B,KAAK,wBAAwB,UAE7BA,EAAa,QAAQ,EACtB,EAED,KAAK,kBAAkB,EACvB,KAAK,mBAAmB,EAExB,KAAK,eAAe,CACtB,CAEQ,kBAAmB,CACzB,MAAM7xN,EAAU,KAAK,iBAAmB,SAAS,cAAc,KAAK,EAC5DA,EAAA,UAAU,IAAInV,GAAY,UAAU,EAE5C,MAAMinO,EAAcxoF,GAAW,KAAK,KAAMz+I,GAAW,KAAK,cAAc,EAElEknO,EAAW,KAAK,SAAWD,EAAY,CAE3C,SAAU,KAAK,aACf,KAAM,qBACP,EAEKE,EAAY,KAAK,UAAYF,EAAY,CAE7C,SAAU,KAAK,cACf,KAAM,qBACP,EAEDE,EAAU,UAAU,OAAO,OAAQ,CAACC,EAA2B,EAE/D,MAAMC,EAAUJ,EAAY,CAC1B,SAAU,GACV,SAAUjhL,GAAS,KAAK,YAAa,IAAK,EAAI,EAC/C,EACOqhL,EAAA,UAAU,IAAIrnO,GAAY,oBAAoB,EAEtD,MAAMsnO,EAAiB,KAAK,wBAA0B,IAAI/E,GAClD8E,EAAA,OAAOC,EAAe,SAAS,EAEvC,MAAMj3F,EAAU42F,EAAY,CAE1B,KAAM,kBACP,EAEO52F,EAAA,UAAU,IAAI,cAAc,EACpCA,EAAQ,UAAU,OAAO,OAAQ,CAAC+2F,EAA2B,EAE7D,MAAMG,EAAWN,EAAY,CAE3B,SAAU,GACV,SAAU,KAAK,aACf,KAAM,QACP,EAED9xN,EAAQ,OAAO+xN,EAAUC,EAAWE,EAASh3F,EAASk3F,CAAQ,EAEzD,eAAU,OAAOpyN,CAAO,CAC/B,CA+DO,cAAe,CACpB,OAAO,KAAK,SACd,CA2DQ,cAAe,CAChB,eAAU,UAAU,OAAO,aAAc,CAAC,CAAC,KAAK,SAAS,YAAY,CAC5E,CAEQ,gBAAiB,CACvB,GAAG,KAAK,SAAS,QAAU4xH,GAAiB,OAAQ,CAC/C,KAAK,UAAU,UAAU,SAAS,gBAAgB,GAClCpjF,KAGnB,KAAK,KAAK,EACV,MACF,CAEA,KAAM,CAAC,YAAAp4B,EAAa,UAAA86G,GAAa,KAAK,SACtC,GAAG,CAAC96G,EACF,OAGF,KAAK,SAAS,EACd,KAAK,eAAe,EACpB,KAAK,aAAa,EAEZ,MAAAi8M,EAAwBtB,GAAkC7/F,EAAkB96G,CAAW,EACxF,eAAU,QAAQ,SAAWi8M,IAA0B,EAA0C,OAAUA,IAA0B,EAA2C,QAAU,UAC1L,6BAAwB,SAASA,CAAqB,CAC7D,CAEQ,UAAW,CACZ,oBAAe,OAAO,KAAK,QAAQ,CAC1C,CAEQ,gBAAiB,CAClB,0BAAqB,OAAO,KAAK,QAAQ,EACzC,oCAA+B,OAAO,KAAK,QAAQ,CAC1D,CACF,CCheA,IAAKC,QACHA,EAAAC,EAAA,yBACAD,EAAAC,EAAA,2BACAD,EAAAC,EAAA,qCACAD,EAAAC,EAAA,qBACAD,EAAAC,EAAA,2BACAD,EAAAC,EAAA,qBACAD,EAAAC,EAAA,mBAPGD,QAAA,ICML,MAAqBE,EAAuB,CAK1C,YAAoBhsN,EAAuB,CAAvB,cAAAA,EACb,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,kBAAkB,CACjD,CAEO,QAAS,CACX,KAAK,WAAa,SACnB,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,QAGlB,KAAK,UAAU,SACf,KAAK,MAAQ,MACf,CAEO,OAAOmiD,EAAwB,CAC9B,MAAC,gBAAAopE,CAAmB,EAAAppE,EAEvB,QAAK,QAAUopE,EAChB,OAGF,KAAK,MAAQA,EAET,IAAA3uI,EACD,GAAA2uI,IAAoBugG,GAAW,UAAW,CACjClvO,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,UAAU,IAAI,2BAA2B,EAEjD,MAAM6rB,EAAU,IAAM,CACpB7rB,EAAQ,UAAY7Q,GAASo2E,EAAS,SAAU,EAAI,GAGtD,KAAK,SAAW,OAAO,YAAY15C,EAAS,GAAI,EACxCA,GAAA,KACH,CACD,IAAAvtB,EACJ,OAAOqwI,EAAiB,CACtB,KAAKugG,GAAW,QACA5wO,EAAAinE,EAAS,WAAa,qBAAuB,qBAC3D,MACF,KAAK2pK,GAAW,WACA5wO,EAAA,wBACd,MACF,KAAK4wO,GAAW,gBACA5wO,EAAA,qBACd,MACF,KAAK4wO,GAAW,OACA5wO,EAAAinE,EAAS,cAAgB,OAAY,mBAAqB,oBACxE,MACF,QACgBjnE,EAAA,wBACd,KACJ,CAEA0B,EAAUjQ,EAAKuO,CAAW,EACvB,KAAK,WAAa,SACnB,cAAc,KAAK,QAAQ,EAC3B,KAAK,SAAW,OAEpB,CAEA,KAAK,UAAU,UAAU,OAAO,eAAgBqwI,IAAoBugG,GAAW,SAAS,EACzErsO,GAAA,KAAK,UAAW7C,CAAO,EAElC,KAAK,UAAU,eACZ,cAAS,OAAO,KAAK,SAAS,CAEvC,CACF,CC9EA,MAAqBqvO,WAAoC7F,EAMtD,CACD,YAAYY,EAAmBl7E,EAAyB,CAChD,OACJ,MAAO,GACP,OAAQ,GACR,QAAU93J,GACD,KAAK,UAAU,QAAQA,EAAQ,SAAW,MAAM,EAEzD,SAAUgzO,EAAWhzO,GACZA,EAAQ,CAAC,IAAK,IAAK,GAAG,EAAI,CAAC,IAAK,IAAK,GAAG,EAC7C,OACJ,cAAA83J,CAAA,CACD,EAED,KAAK,IAAI,CACP,KAAM,aACN,MAAO,CAAC,CACN,WAAY,EACZ,SAAU,GACV,KAAM,iBACL,CACD,WAAY,GACZ,SAAU,GACV,KAAM,UACL,CACD,WAAY,GACZ,SAAU,GACV,KAAM,QACL,CACD,WAAY,GACZ,SAAU,IACV,KAAM,iBACL,CACD,WAAY,IACZ,SAAU,IACV,KAAM,kBACP,EACF,CACH,CACF,CCnBA,MAAMznJ,GAAY,OAEZ6nO,GAAY,IACZxlF,GAAa,IAEbylF,GAA2B,CAC/B,MAAOD,GACP,OAAQxlF,EACV,EAEA,IAAI8+E,GAA8B,CAAC,GAAG2G,IAEtC,MAAqBC,WAAkBl0N,EAAa,CAkClD,YAAoBiqD,EAAwB,CAC1C,MAAM,aAAc,CAClB,eAAgB,GAChB,SAAU,GACX,EAJiB,cAAAA,EAoNpB,KAAQ,kBAAoB,IAAM,CAChCla,GAAkB,KAAK,SAAS,GAGlC,KAAQ,mBAAqB,IAAM,CACjC,MAAME,EAASJ,KAET,CAAC,cAAA0iL,EAAe,kBAAAC,CAAqB,OAErCC,EAAgB,KAAK,UAAU,UAAU,SAAS,gBAAgB,EACxE,KAAK,UAAU,UAAU,OAAO,iBAAkBxiL,CAAM,EACxDsiL,GAAiBA,EAAc,UAAU,OAAO,OAAQtiL,CAAM,EAC9DuiL,GAAqBA,EAAkB,UAAU,OAAO,OAAQ,CAACviL,CAAM,EACvE,KAAK,SAAS,UAAU,OAAO,OAAQA,CAAM,EAE1CA,IAAWwiL,IACZtvL,GAAqB,gBAAgB8M,CAAM,EAE3BtmD,GAAA,cAAcsmD,EAAS,UAAY,MAAS,EAE5D,KAAK,sBAAsB,EAC7B,EAnOA,KAAK,gBAAkB,GAEjB,MAAC,UAAAj+D,EAAW,eAAAkzB,CAAkB,OAC1BlzB,EAAA,UAAU,IAAIma,GAAW,OAAO,EAEpC,MAAA67B,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI77B,GAAY,SAAS,EAEnD,MAAMjc,EAAS,KAAK,OAAS,KAAK,SAAS,mBAAmB,WACxD,CAAC,KAAA0a,CAAI,EAAIkV,GAAU,CACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,MAAO,GACP,OAAA5vB,EACA,KAAM,OACP,EACD83C,EAAgB,OAAOp9B,CAAI,EAErB,MAAApa,EAAQ,IAAIyW,GAAU,CAC1B,OAAA/W,CACD,GAAE,QAEGM,EAAA,UAAU,IAAI2b,GAAY,QAAQ,EAElC,MAAA2c,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI3c,GAAY,WAAW,EAE1B,KAAK,YAAc,IAAI2nO,GAAuBhrN,CAAQ,EAE1E,MAAMqrN,EAAiB,KAAK,eAAiB,SAAS,cAAc,KAAK,EAC1DA,EAAA,UAAU,IAAIhoO,GAAY,SAAS,EAExCna,EAAA,OAAOg2C,EAAiBx3C,EAAOs4B,CAAQ,EAE7CpE,GAWG,YAAO,OAAOyvN,CAAc,GAV5B,mBAAgB1iN,GAAW,YAAY,EACvC,uBAAoBA,GAAW,kBAAkB,EACtD1kB,EAAiB,KAAK,cAAe,KAAK,kBAAmB,CAAC,eAAAmY,EAAe,EAC7EnY,EAAiB,KAAK,kBAAmB,IAAM+iD,KAAoB,CAAC,eAAA5qC,EAAe,EACnFuqC,GAAsB,KAAK,UAAW,KAAK,mBAAoBvqC,CAAc,EACxE,YAAO,QAAQ,KAAK,iBAAiB,EACrC,YAAO,OAAO,KAAK,aAAa,EAErClzB,EAAU,OAAOmiP,CAAc,GAK5B,iBAAc,SAAS,cAAc,KAAK,EAC/C,KAAK,YAAY,UAAU,IAAIhoO,GAAY,eAAe,EAErD,qBAAkB,SAAS,cAAc,KAAK,EACnD,KAAK,gBAAgB,UAAU,IAAIA,GAAY,cAAc,EAC7D,MAAMioO,EAAY3/O,EAAK,0BAA2B,CAAC,IAAIwS,GAAU,CAAC,OAAA/W,EAAQ,cAAe,GAAM,aAAc,EAAG,GAAE,OAAO,CAAC,EAChHkkP,EAAA,UAAU,IAAIjoO,GAAY,mBAAmB,EACvD,MAAMqjO,EAAY,IAAIuE,GAA4B,GAAO,EAAI,EACnDvE,EAAA,SAAS,GAAO,EAAK,EAC/B,KAAK,gBAAgB,OACnBA,EAAU,UACV4E,CAAA,EAGG,iBAAY,OAAO,KAAK,eAAe,EACvC,eAAU,OAAO,KAAK,WAAW,EAEtC,KAAK,WAAaxpF,GAAW,KAAK,KAAMz+I,GAAW,KAAK,cAAc,EACtE,KAAK,sBAAsB,EAC3B,KAAK,uBAAuB,EAE5B+Y,EAAe,IAAI+kD,CAAQ,EAAE,QAAS,IAAM,CAC1C,KAAK,eAAe,EACrB,EAED/kD,EAAe,IAAI+kD,CAAQ,EAAE,aAAc,IAAM,CAC/C,KAAK,eAAe,EACrB,EAEI,kBAAe,IAAI4nK,GAAa,CACnC,eAAA3sN,EACA,eAAgB,CACd,SAAU8uN,GACV,UAAWxlF,GACX,QAAS,KAAK,QACd,kBAAoB/xJ,GAAM,CACxB,MAAM+Y,EAAS/Y,EAAE,OACd,QAAAgZ,EAAgBD,EAAQ,aAAa,GACtCC,EAAgBD,EAAQ,UAAU,GAClCq6C,KAKJ,CACF,EAEA,cAAe,CAAC,KAAK,SAAS,iBAAmB,CAAC,KAAK,SAAS,WAAa,CAAC,GAAGokL,EAAc,EAAA3G,EAAA,CAChG,EAEK,MAAA+G,EAAiB,KAAK,aAAa,QACtCA,GACD,KAAK,eAAe,IAAIA,CAAc,EAAE,SAAU,IAAM,CACtD,KAAK,sBAAsB,EAC5B,EAGH,MAAMC,EAAgB,KAAK,cAAgB,IAAI7nL,GAC/C6nL,EAAc,MAAM,CAClB,QAAS,KAAK,UACd,eAAgB,KAAK,eACrB,uBAAwB,eACzB,EACDA,EAAc,aAAa,EAAK,EAE3B,sBAAiB,QAAS,IAAM,CAC7B,MAAC,aAAAnB,CAAgB,OACvB7F,GAAgB6F,EAAa,MAE7B,KAAK,eAAe,UAEpBA,EAAa,QAAQ,EACtB,EAED,KAAK,eAAe,CACtB,CAEO,iBAAkB,CACvB,OAAO,KAAK,QACd,CAEQ,uBAAwB,CAC9B,MAAM7xN,EAAU,KAAK,gBAAkB,SAAS,cAAc,KAAK,EACnEA,EAAQ,UAAU,IAAInV,GAAY,WAAY,UAAU,EAExD,MAAMsU,EAAmBuxN,GAAgB,KAAK,KAAM,cAAc,EAE5DqB,EAAW,KAAK,SAAW,KAAK,WAAW,CAC/C,KAAM,cACN,KAAM,qBACN,SAAU,IAAM,CACd,MAAMxpN,EAASpJ,EAAiB,CAAC4yN,EAAUC,CAAS,EAAG,EAAI,EAC3D,KAAK,SAAS,mBAAqB,UAAQzpN,CAAM,CACnD,EACD,EAEKypN,EAAY,KAAK,UAAY,KAAK,WAAW,CACjD,KAAM,cACN,KAAM,qBACN,SAAU,IAAM,CACd,MAAMzpN,EAASpJ,EAAiB,CAAC4yN,EAAUC,CAAS,EAAG,EAAI,EAC3D,KAAK,SAAS,oBAAsB,UAAQzpN,CAAM,CACpD,EACD,EAEG0pN,KACQD,EAAA,UAAU,IAAI,MAAM,EACzB,eAAU,UAAU,IAAI,WAAW,GAGrC,qBAAkB,IAAI3iP,GAAK,YAAY,CAC1C,IAAK,YACN,EACD,MAAM6iP,EAAU,KAAK,QAAU,KAAK,WAAW,CAC7C,KAAM,KAAK,gBAAgB,QAC3B,SAAU,IAAM,CACd,KAAK,SAAS,aAChB,EACD,EAEKC,EAAiB,KAAK,eAAiB,IAAIM,GAA4B,GAAM,EAAI,EAC/EP,EAAA,kBAAkB,OAAOC,EAAe,SAAS,EAKjDnyN,EAAA,OAAO+xN,EAAUC,EAAWE,CAAO,EACtC,eAAU,OAAOlyN,CAAO,CAC/B,CAEQ,wBAAyB,CAC/B,MAAMA,EAAU,KAAK,iBAAmB,SAAS,cAAc,KAAK,EACpEA,EAAQ,UAAU,IAAInV,GAAY,WAAY,WAAW,EAEpD,wBAAqB,IAAIxb,GAAK,YAAY,CAC7C,IAAK,eACN,EACD,MAAM4jP,EAAa,KAAK,WAAa,KAAK,WAAW,CACnD,KAAM,KAAK,mBAAmB,QAC9B,KAAM,iBACN,SAAU,IAAM,CACT,cAAS,OAAO,8BAA8B,CACrD,EACA,SAAU,GACX,EAEKC,EAAY,KAAK,UAAY,KAAK,WAAW,CACjD,KAAM,cACN,KAAM,eACN,SAAU,IAAM,CACd,KAAK,SAAS,YAChB,EACA,UAAW,GACZ,EAEOlzN,EAAA,OAAOizN,EAAYC,CAAS,EAC/B,eAAU,OAAOlzN,CAAO,CAC/B,CA0BQ,qBAAqByhC,EAAyB,CACpD,MAAMu/D,EAAan2G,GAAY,SACzBna,EAAY,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIswH,EAAa,YAAY,EAE3Cv/D,EAAA,UAAU,IAAIu/D,CAAU,EAC3Bv/D,EAAM,QACPsD,GAAStD,CAAK,EAGhBh2C,EAAiB/a,EAAW,IAAM,CAChC,GAAG,CAACA,EAAU,UAAU,SAAS,OAAO,EACtC,OAGF,MAAMyiP,EAAM,OAAO,OAAO,KAAK,eAAe,EAAE,KAAMziP,GAAc,CAACA,EAAU,UAAU,SAAS,OAAO,CAAC,EACtGyiP,EAAA,UAAU,IAAI,OAAO,EACrBA,EAAA,MAAM,QAAUziP,EAAU,MAAM,QAC1BA,EAAA,UAAU,OAAO,OAAO,EAClCA,EAAU,MAAM,QAAU,GAE1B,KAAK,sBAAsB,EAC5B,EAEK,MAAAkmB,EAASu3N,GAAoB1sL,CAAK,EACjC,OAAA7qC,EAAA,UAAU,IAAIoqG,EAAa,OAAO,EAE/BtwH,EAAA,OAAOkmB,EAAQ6qC,CAAK,EAEvB/wD,CACT,CAEQ,gBAAiB,CACjB,MAAC,SAAAi4E,CAAY,OACb,CAAC,gBAAAopE,CAAmB,EAAAppE,EACvB,GAAAopE,IAAoBugG,GAAW,OAAQ,CACrC,KAAK,UAAU,UAAU,SAAS,gBAAgB,GAClC9jL,KAGd,cAAS,UAAU,IAAI,UAAU,EAEtC,KAAK,KAAK,EACV,MACF,CAEA,MAAM4kL,EAAoB,CAACzqK,EAAS,YAAcopE,IAAoBugG,GAAW,QACjF,KAAK,mBAAmB,iBAAiB,CACvC,IAAKvgG,IAAoBugG,GAAW,QAAU,eAAiB,WAChE,EACD,KAAK,UAAU,UAAU,OAAO,UAAW,CAACc,CAAiB,EAC7D,KAAK,UAAU,UAAU,OAAO,UAAW,CAACA,CAAiB,EAC7D,KAAK,UAAU,UAAU,OAAO,kBAAmBA,CAAiB,EAEpE,MAAMhtC,EAAUz9H,EAAS,QACnB/X,EAAU,IAAM,CACpB,KAAK,QAAQ,kBAAkB,UAAU,OAAO,SAAUw1I,CAAO,GAG7D1/L,EAAS,KAAK,eAAe,UAAU,OAC7C,KAAK,eAAe,SAAS,CAAC0/L,EAAS,CAACA,EAASx1I,CAAO,EACpDlqD,GACMkqD,IAGV,KAAK,gBAAgB,iBAAiB,CACpC,IAAKw1I,EAAU,aAAe,YAC/B,EAED,MAAMitC,EAAiB1qK,EAAS,eAChC,KAAK,SAAS,kBAAkB,UAAU,OAAO,SAAU0qK,CAAc,EAEzE,MAAMC,EAAkB3qK,EAAS,gBACjC,KAAK,UAAU,kBAAkB,UAAU,OAAO,SAAU2qK,CAAe,EAErE,MAAAC,EAAc5qK,EAAS,cAAc,QAAQ,EAErC/9D,GAAA,CACZ,QAAS,KAAK,gBACd,UAAW,aACX,SAAU,CAAC,CAAC2oO,GAAa,MACzB,SAAU,IACX,EAED,MAAMn9K,EAAa,KAAK,gBAClBo9K,EAAgB,CAAC,GAAGp9K,GAC1B,CAAC,QAAkB,QAAiB,EAAE,QAASnjD,GAAS,CAChD,MAAAwgO,EAAa9qK,EAAS,cAAc11D,CAAI,EACxCwuC,EAAQknB,EAAS,gBAAgB11D,CAAI,EAErCygO,EAAW,CAAC,EAAEjyL,GAASA,EAAM,YAAcA,EAAM,aACpDA,GAAS,CAACiyL,GAAY,CAACjyL,EAAM,QAAQ,aACtCA,EAAM,QAAQ,WAAa,IAEfc,GAAAd,CAAK,EAAE,KAAK,IAAM,CAC5B,OAAOA,EAAM,QAAQ,WACrB,KAAK,eAAe,EAGrB,GAGH,MAAM6nB,EAAW,CAAC,CAAC7nB,GAASiyL,GAAY,CAAC,EAAED,IAAeA,EAAW,aAAe,UAAYA,EAAW,kBAAoB,WAC3H,IAAAE,EAAiBv9K,EAAWnjD,CAAI,EAEjCq2D,GAAY7nB,GAAS,CAACkyL,IACvBA,EAAiBv9K,EAAWnjD,CAAI,EAAI,KAAK,qBAAqBwuC,CAAK,EAC9D,eAAU,OAAOkyL,CAAc,GAGnC,CAACrqK,GAAYqqK,IACdA,EAAe,OAAO,EACtB,OAAOv9K,EAAWnjD,CAAI,EACxB,CACD,EAED,CACE,MAAMsO,EAAQ60C,EAAW,MACnBw9K,EAASx9K,EAAW,OACvB,OAAO,KAAKo9K,CAAa,EAAE,SAAW,OAAO,KAAKp9K,CAAU,EAAE,QAAU70C,GACzEA,EAAM,UAAU,OAAO,QAAS,CAAC,CAACqyN,CAAM,EAGvCA,GAAU,CAACryN,GACLqyN,EAAA,UAAU,OAAO,OAAO,CAEnC,CAEA,KAAK,sBAAsB,EAEtB,eAAU,UAAU,OAAO,WAAY,CAAC,OAAO,KAAKx9K,CAAU,EAAE,MAAM,EAExE,CAAC,KAAK,eAAe,aAAe27E,EAAkBugG,GAAW,iBAClE,QAAQ,QAAQ3pK,EAAS,qBAAsB,GAAE,KAAM7G,GAAW,CAChE77D,GAAe,KAAK,eAAgB1W,GAAcuyE,EAAO,KAAK,EAAE,CAAC,CAAC,EACnE,EAGH,KAAK,eAAe,CACtB,CAEQ,uBAAwB,CAC9B,OAAO,OAAO,KAAK,eAAe,EAAE,QAASpxE,GAAc,CAEzD,GADgBA,EAAU,UAAU,SAAS,OAAO,EACxC,CACJ,MAAA+wD,EAAQ/wD,EAAU,cAAc,OAAO,EACvCmjP,EAAa,KAAK,aAAa,MAC/BC,EAAe,IACfC,EAAgB,IAEhBj5M,EAAa2mB,EAAM,YAAcA,EAAM,WACvC0kK,EAAWrrL,EAAai5M,EAAgBD,EAExCE,EAAkB,EAAI,GAAKzlL,GAAA,EAAiB,MAAUzzB,EAAa+4M,EAAW,OAASA,EAAW,OAClGI,EAAan5M,EAAa2mB,EAAM,WAAaA,EAAM,YAAc,EACjEyyL,EAAcp5M,EAAa,EAAI2mB,EAAM,YAAcA,EAAM,WACrD/wD,EAAA,MAAM,MAAQsjP,EAAkBC,EAAa,KAC7CvjP,EAAA,MAAM,OAASsjP,EAAkBE,EAAc,KAC/CxjP,EAAA,MAAM,SAAWy1N,EAAW8tB,EAAa,KACzCvjP,EAAA,MAAM,UAAYy1N,EAAW+tB,EAAc,UAErDxjP,EAAU,MAAM,QAAU,EAC5B,CACD,CACH,CAEQ,gBAAiB,CAClB,iBAAY,OAAO,KAAK,QAAQ,CACvC,CACF,CC3dA,SAAwByjP,GAAmBhlG,EAAU,CACnD,MAAM5lG,EAAOumG,GAAsBX,EAAKA,EAAI,MAAM,CAAC,CAAC,EAE9Cx8H,EAAuC,CAC3C,QAAS,eACT,aAAgB,CAAC42B,EAAK,WAAW,EACjC,MAASA,EAAK,MACd,IAAOA,EAAK,IACZ,MAAS,OACT,MAAS,OACT,WAAc,QAGV6qM,EAAiBzgP,GAAmB,GAAKA,EAErC,UAAAgW,KAAWwlI,EAAI,MAAO,CAC9B,MAAMtsF,EAAYl5C,EAAQ,UAC1B,GAAGk5C,IAAc,eAAiB,CAACl5C,EAAQ,UACzC,SAGI,MAAA++H,EAAuB/1H,EAAKkwC,IAAc,SAAWlwC,EAAK,MAAW,aAAekwC,CAAS,EAAI,GACjGtZ,EAAOumG,GAAsBX,EAAKxlI,CAAO,EACzC++H,EAAA,KAAO0rG,EAAc7qM,EAAK,MAAM,EAEnCA,EAAK,eACNm/F,EAAM,WAAan/F,EAAK,aAAa,IAAK8qM,IAAiB,CAAC,UAAWA,EAAY,UAAW,MAAOA,EAAY,QAAQ,IAAID,CAAa,CAAG,KAGzI,MAAAE,EAAgD5rG,EAAM,cAAgB,GAC5E/+H,EAAQ,WAAW,IAAI,QAAQ,EAAE,QAAS5Y,GAAc,CACtDujP,EAAc,KAAK,CACjB,GAAI,CAACvjP,EAAU,IACf,IAAKA,EAAU,MAChB,EACF,EAEK,MAAAwjP,MAAqE,IAErEC,EAAkB9jN,GAAe,CACjC,IAAA+jN,EAAcF,EAAgB,IAAI7jN,CAAE,EACxC,OAAI+jN,GACcF,EAAA,IAAI7jN,EAAI+jN,EAAc,CACpC,GAAA/jN,CAAA,CACM,EAGH+jN,CAAA,EAGT9qO,EAAQ,WAAW,IAAI,QAAQ,EAAE,QAAS5Y,GAAc,CAChD,MAAA2/B,EAAK,CAAC3/B,EAAU,IAChB0jP,EAAcD,EAAe9jN,CAAE,EAC/Bt6B,EAAWrF,EAAU,MAAM,MAAM,GAAG,EACpC,CAACi4B,EAAM0rN,EAAWv7H,CAAQ,EAAI/iH,EACpCq+O,EAAY,KAAOzrN,EACnByrN,EAAY,UAAY,CAACC,EACbD,EAAA,SAAWt7H,EAAW,CAACA,EAAW,EAC/C,EAEDxvG,EAAQ,WAAW,IAAI,SAAS,EAAE,QAAS5Y,GAAc,CACjD,MAAA2/B,EAAK,CAAC3/B,EAAU,IAChB0jP,EAAcD,EAAe9jN,CAAE,EACrC+jN,EAAY,cAAgB1jP,EAAU,MAAM,IAAK4zF,GAAS,CAClD,MAAAvuF,EAAWuuF,EAAK,MAAM,GAAG,EACzB,CAAC1xE,EAAM0hO,CAAO,EAAIv+O,EACjB,OACL,KAAA6c,EACA,QAAS0hO,GAAW,GACtB,CACD,EACF,EAEDhrO,EAAQ,WAAW,IAAI,MAAM,EAAE,QAAS5Y,GAAc,CAC9C,MAAA2/B,EAAK,CAAC3/B,EAAU,IAChB0jP,EAAcD,EAAe9jN,CAAE,EAC/Bq4G,EAA6D0rG,EAAY,WAAa,GACtFr+O,EAAWrF,EAAU,MAAM,MAAM,GAAG,EAC1C,UAAU5C,KAAOiI,EAAU,CACzB,KAAM,CAACwO,EAAKiB,CAAK,EAAI1X,EAAI,MAAM,GAAG,EAClC46I,EAAWnkI,CAAG,EAAIiB,CACpB,EACD,EAED6iI,EAAM,aAAe,MAAM,KAAK6rG,EAAgB,QAAQ,CAK1D,CAEO,OAAA5hO,CACT,CC3FA,MAAqBiiO,WAA+BppG,EAA2B,CAG7E,YAAY78I,EAET,CACD,MAAMA,CAAO,CACf,CAEA,MAAgB,mBAAoB,CAC5B,MAAC,WAAAu8I,EAAY,KAAA+M,CAAQ,OAExB,IAAC/M,EAAW,kBAAoB,CAACA,EAAW,mBAAqB,CAAC+M,EAAK,WACxE,OAGE,IAAA48F,EACJ,GAAG58F,EAAK,cAAe,CACrBA,EAAK,cAAgB,GAErB,MAAMjkE,EAAS6gK,EAAkB,MAAM3pG,EAAW,aAAa,EAE/D,KAAK,IAAI,cAAel3D,EAAO,KAAMA,EAAO,GAAG,EACzC,MAAAk3D,EAAW,oBAAoBl3D,CAAM,EAE3C,KAAK,IAAI,uBAAuB,MAC3B,CACL,MAAMi8D,EAAQ4kG,EAAkB,MAAM3pG,EAAW,YAAY,EAExD,SAAI,cAAe+E,EAAM,GAAG,EAC3B,MAAA/E,EAAW,oBAAoB+E,CAAK,EAE1CgI,EAAK,UAAY,GAEjB,KAAK,IAAI,uBAAuB,CAClC,CAEA,MAAM68F,EAAeX,GAAmBvlG,GAASimG,EAAgB,GAAG,CAAC,EACrE58F,EAAK,sBAAsB68F,CAAY,CACzC,CACF,CCzCA,IAAIxvG,GACJ,SAAwByvG,IAAoB,CACnC,OAAAzvG,QAAe,IAAIF,GAAiB,CACzC,gBACA,mBACA,eACA,oBACA,oBACA,kBACD,EACH,CCKA,MAAM4vG,GAAuB,KAEtB,MAAMC,WAAwB/0N,EAIlC,CAQM,UAAUlxB,EAAuB,CACtC,KAAK,SAAWA,EACX,SAAMwgC,GAAO,IAAI,EAElBwyF,KAIJ,KAAK,WAAa+yH,KAClB,KAAK,OAAS,EACT,mBAAgB,IACrB,KAAK,gBAAkB,GAEblmP,EAAA,iBAAiB,cAAe,MAAMopJ,GAAS,CACvD,IAAItvE,EAAW,KAAK,UAAU,IAAIsvE,EAAK,EAAE,EAMzC,OAJGtvE,GACDA,EAAS,aAAasvE,CAAI,EAGrBA,EAAK,EAAG,CACb,IAAK,qBAAsB,CACtBtvE,GACDA,EAAS,OAAOsvE,EAAK,QAAQ,EAAG,EAAI,EAGtC,KACF,CAEA,IAAK,oBAAqB,CACrBtvE,GAODA,EAAS,YAAY,EAGvB,KACF,CAEA,IAAK,qBAAsB,CACrBA,IAMFA,EAAW,KAAK,mBAAmB,CACjC,WAAY,GACZ,mBAAoBsvE,EAAK,SAC1B,EAEQtvE,EAAA,wBAAwB2pK,GAAW,OAAO,EACnD3pK,EAAS,aAAasvE,CAAI,EACjBtvE,EAAA,iBAAiBqsK,GAAsB,8BAA8B,GAGhF,KACF,CAEA,IAAK,YAAa,CACb,IAACrsK,GAAYA,EAAS,cACvB,MAGF,MAAMusK,EAAMvsK,EAAS,GAAG,IAAMsvE,EAAK,SAC7Bk9F,EAAKxsK,EAAS,GACdysK,EAAW,MAAMhmP,GAAgB,aAAa,SAAU8lP,CAAG,EACjE,GAAG,CAACG,GAASF,EAAG,SAAUC,CAAQ,EAAG,CACnC,KAAK,IAAI,MAAM,qBAAsBD,EAAG,SAAUC,CAAQ,EAC1D,KACF,CAEA,KAAM,CAAC,IAAAxwO,EAAK,gBAAA0wO,CAAe,EAAI,MAAM,KAAK,SAAS,gBAAgB,WAAWJ,EAAKC,EAAG,EAAGA,EAAG,CAAC,EAC1F,GAAAl9F,EAAK,kBAAoBq9F,EAAiB,CAC3C,KAAK,IAAI,MAAM,4BAA6Br9F,EAAK,gBAAiBq9F,EAAiBJ,EAAKC,CAAE,EAC1FxsK,EAAS,OAAO,kCAAkC,EAClD,KACF,CAEAA,EAAS,cAAgB/jE,EACzB+jE,EAAS,SAAS,EAElB,KACF,CACF,EACD,EAED95E,EAAU,iBAAiB,iBAAkB,CAAC,CAAC,OAAAkpJ,EAAQ,KAAAplI,KAAU,CAC/D,MAAMg2D,EAAW,KAAK,UAAU,IAAIovE,CAAM,EACvCpvE,GAAU,KAAOovE,GAIpBpvE,EAAS,+BAA+Bh2D,CAAI,EAC7C,EACH,CAEA,IAAW,aAAc,CAChB,YAAK,kBAAkB,CAAC,CACjC,CAEO,gBAAgBxd,EAAgB,CACrC,SAAU,CAAC4iJ,EAAQpvE,CAAQ,IAAK,KAAK,UAChC,GAAAA,EAAS,qBAAuBxzE,EAC1B,OAAAwzE,CAGb,CAEQ,mBAAmBh6E,EAIxB,CACK,MAAAspJ,EAAO,IAAIs9F,GAAa,CAC5B,SAAU,KAAK,SACf,GAAG5mP,CAAA,CACJ,EAEI,OAAAspJ,EAAA,iBAAiB,QAAUz9I,GAAU,CACxC,MAAM09I,EAAc,KAAK,YACtB19I,IAAU83O,GAAW,QACjB,eAAU,OAAOr6F,EAAK,EAAE,EACZp0I,GAAA,KAAK,gBAAiBo0I,CAAI,GAEhB9jH,GAAA,KAAK,gBAAiB8jH,EAAM,WAAW,EAGjEz9I,IAAU83O,GAAW,kBACtBr6F,EAAK,gBAAkB,IAGnB,MAAAu9F,EAAev9F,EAAK,cAAgB,OACvCz9I,IAAU83O,GAAW,iBAAoB93O,IAAU83O,GAAW,YAAckD,EACxEv9F,EAAA,iBAAiB+8F,GAAsB,kCAAkC,EAE9E/8F,EAAK,mBAAmB,GAGvBC,IAAgBD,GAAQ,CAACC,KACvB19I,IAAU83O,GAAW,OACnB,CAACr6F,EAAK,YAAc,CAACA,EAAK,gBAC3B,KAAK,WAAW,YACRA,EAAK,iBAAmB,CAACu9F,EAC5B,gBAAW,UAAU,iBAAiB,EAE3C,KAAK,WAAW,UAAUv9F,EAAK,gBAAkB,6BAA+B,gBAAkB,cAAc,EAE1Gz9I,IAAU83O,GAAW,QAC7B,KAAK,WAAW,UAAUr6F,EAAK,WAAa,oBAAsB,oBAAqB,EAAI,EACnFz9I,IAAU83O,GAAW,gBACxB,gBAAW,qBAAqB,kBAAkB,EAC/C93O,IAAU83O,GAAW,WAC1Br6F,EAAK,UACD,gBAAW,UAAU,sBAAuB,EAAI,EAGvD,KAAK,WAAW,YAEpB,CACD,EAEDA,EAAK,iBAAiB,KAAM,CAACvnH,EAAIopI,IAAW,CACvCA,IAAW,QACP,eAAU,OAAOA,CAAM,EAGxB,MAAA27E,EAAa,CAAC,CAAC,KAAK,YACrB,eAAU,IAAI/kN,EAAIunH,CAAI,EAExB6hB,IAAW,QACZ,KAAK,cAAc,WAAY,CAAC,SAAU7hB,EAAM,WAAAw9F,EAAuB,CACzE,CACD,EAEMx9F,CACT,CAEA,MAAa,kBAAkB9iJ,EAAgByX,EAAkB,CAC1D,SAAI,uBAAwBzX,EAAQyX,CAAO,EAEhD,MAAM8oO,EAAW,MAAM,KAAK,SAAS,kBAAkB,WAAWvgP,CAAM,EACxE,GAAG,CAACugP,EAAU,OAER,MAAC,sBAAAC,CAAqB,EAAID,EAAS,OAEnCz9F,EAAO,KAAK,mBAAmB,CACnC,WAAY,GACZ,mBAAoB9iJ,CAAA,CACrB,EAED8iJ,EAAK,mBAAmB,GAAM,CAAC,EAAErrI,GAAW+oO,GAAwB,EAAK,EAEpE19F,EAAA,wBAAwBq6F,GAAW,UAAU,EAClDr6F,EAAK,aAAa,CAChB,EAAG,mBACH,YAAa,GACb,SAAU5iJ,GACV,KAAMm0B,GAAM,EAAI,EAChB,GAAI,EAAE,KAAK,OACX,eAAgBr0B,EAChB,SAAU8iJ,EAAK,SACf,OAAQ,CACN,MAAOrrI,GAAW,MACpB,EACD,EAGD,KAAK,SAAS,gBAAgB,aAAa,KAAK,MAAMuoO,IACpDl9F,EAAK,GAAKk9F,EAEH,KAAK,SAAS,gBAAgB,YAAYhgP,EAAQ8iJ,EAAK,SAAUA,EAAK,GAAG,SAAUrrI,GAAW+oO,CAAqB,EAC3H,EAAE,KAAMC,GAAc,CAChB39F,EAAA,wBAAwBq6F,GAAW,OAAO,EAC/Cr6F,EAAK,aAAa29F,CAAS,EACtB39F,EAAA,iBAAiB+8F,GAAsB,8BAA8B,EAC3E,CACH,CACF,CAEA,MAAMa,GAAkB,IAAIZ,GAC5BvgM,KAAmBA,GAAe,gBAAkBmhM,IC3PpD,SAAwBC,IAAqC,CACpD,OACL,EAAG,oBACH,OAAQ,CACN,QAAS,GACT,cAAe,EACjB,EACA,UAAW,GACX,UAAW,GACX,iBAAkB,CAAC,OAAO,EAE9B,CCXA,SAAwBC,GAAoB99F,EAA6C,CACvF,MAAM+9F,EAA6B,GAC9B,OAAA/9F,EAAA,YAAY,QAAS/M,GAAe,CACvC,OAAOA,EAAW,EAAG,CAInB,IAAK,wBAAyB,CAC5B,KAAM,CAAC,GAAA+qG,EAAI,KAAAC,EAAM,KAAA3uG,EAAM,SAAA94I,EAAU,SAAA0nP,CAAY,EAAAjrG,EACvCkrG,EAAiB,GACpBlrG,EAAW,OAAO,MAChB+qG,GACDG,EAAK,KAAK,QAAQH,CAAE,IAAI1uG,CAAI,EAAE,EAE7B2uG,GACDE,EAAK,KAAK,SAASF,CAAI,KAAK3uG,CAAI,EAAE,GAE5B2D,EAAW,OAAO,OACvB+qG,GACDG,EAAK,KAAK,QAAQH,CAAE,IAAI1uG,CAAI,EAAE,EAE7B2uG,GACDE,EAAK,KAAK,SAASF,CAAI,KAAK3uG,CAAI,EAAE,GAInC6uG,EAAK,OAAS,GACfJ,EAAW,KAAK,CACd,KAAAI,EACA,SAAA3nP,EACA,WAAY0nP,CAAA,CACb,EAEH,KACF,CACF,EACD,EAEM,CACL,WAAAH,EACA,mBAAoB/9F,EAAK,OAAO,YAAc,MAAQ,QAE1D,CCvDA,MAAMo+F,GAAS,OAAO,OAAY,KAAe,WAAY,OAAS,OAAO,OAAO,OAAS,KAAK,OAAO,OCIzG,SAAwBC,GAAO7rN,EAAkD,CACxE,OAAA4rN,GAAO,OAAO,UAAWE,GAAoB9rN,CAAK,CAAC,EAAE,KAAM3G,GAEzD,IAAI,WAAWA,CAAC,CACxB,CAcH,CCPA,MAAM0yN,GAAyB,IAAM,KAAO,KAE5C,MAAqBC,EAAa,CAKhC,YAAoBhtL,EAA6BitL,EAAoB,CAAjD,gBAAAjtL,EAA6B,YAAAitL,EAC/C,KAAK,KAAO,YACZ,KAAK,QAAU,EACV,gBAAa,GACpB,CAEQ,aAAat2O,EAAqB,CACxC,OAAOk2O,GAAOK,GAAc,GAAGv2O,CAAK,CAAC,CACvC,CAEA,MAAc,gBAAgBw2O,EAAoB,CAChD,MAAMjmP,EAAS,CACb,QAAS,EACT,MAAO,IAAI,WAAW,GAAKimP,EAAO,MAAM,GAGpC71N,GAAK,KAAK,WAAa,EAAI,IAAM,KAAK,OAAS,YAAc,IAAM,GACnEnc,EAAM,KAAK,OAEXiyO,EAAc,MAAM,KAAK,aAAa,CAACjyO,EAAI,SAASmc,EAAI,GAAIA,EAAI,GAAK,EAAE,EAAG61N,CAAM,CAAC,EACjFE,EAASnmP,EAAO,MACtB,QAAQ2B,EAAI,EAAGA,EAAI,GAAI,EAAEA,EACvBwkP,EAAOxkP,CAAC,EAAIukP,EAAYvkP,EAAI,CAAC,EAG/B,MAAMykP,EAAW,MAAM,KAAK,gBAAgBnyO,EAAKkyO,EAAQ/1N,CAAC,EAEpD0J,EAAQ,MAAM,KAAK,cAAcmsN,EAAQA,EAAO,OAAQG,EAAU,EAAI,EAE5E,OAAApmP,EAAO,MAAQ,IAAI,WAAW,CAAC,GAAGA,EAAO,MAAM,SAAS,EAAG,EAAE,EAAG,GAAG85B,CAAK,CAAC,EAElE95B,CACT,CAEO,iBAAiBimP,EAAoB,CACpC,MAAAI,EAAM,EAAE,KAAK,QACbx+O,EAAM,IAAI,YAAY,CAAC,EAChB,IAAI,SAASA,CAAG,EACxB,UAAU,EAAGw+O,IAAQ,EAAG,EAAK,EAE5B,MAAArmP,EAAS,IAAI,WAAW,CAAC,GAAG,IAAI,WAAW6H,CAAG,EAAG,GAAGo+O,CAAM,CAAC,EAE1D,YAAK,gBAAgBjmP,CAAM,CACpC,CAEA,MAAc,gBAAgBiU,EAAiBkyO,EAAoB/1N,EAAW,CAC5E,KAAM,CAACk2N,EAASC,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC3C,KAAK,aAAa,CAChBJ,EAAO,SAAS,EAAG,EAAE,EACrBlyO,EAAI,SAASmc,EAAGA,EAAI,EAAE,EACvB,EAED,KAAK,aAAa,CAChBnc,EAAI,SAAS,GAAKmc,EAAG,GAAKA,EAAI,EAAE,EAChC+1N,EAAO,SAAS,EAAG,EAAE,EACtB,EACF,EAEM,OACL,IAAK,IAAI,WAAW,CAClB,GAAGG,EAAQ,SAAS,EAAG,CAAC,EACxB,GAAGC,EAAQ,SAAS,EAAG,EAAM,EAC7B,GAAGD,EAAQ,SAAS,GAAI,EAAM,EAC/B,EACD,GAAI,IAAI,WAAW,CACjB,GAAGC,EAAQ,SAAS,EAAG,CAAC,EACxB,GAAGD,EAAQ,SAAS,EAAG,EAAK,EAC5B,GAAGC,EAAQ,SAAS,GAAI,EAAM,EAC/B,EAEL,CAEA,MAAc,cAAcC,EAA2BC,EAAkBL,EAA6CM,EAAU,GAAM,CAC9H,MAAAC,EAAY,MAAMjB,GAAO,UAC7B,MACAU,EAAS,IACT,CAAC,KAAM,SAAS,EAChB,GACA,CAACM,EAAU,UAAY,SAAS,GAG5BT,EAAsB,MAAMP,GAAOgB,EAAU,UAAY,SAAS,EAAE,CACxE,KAAM,UACN,QAASN,EAAS,GAClB,OAAQA,EAAS,GAAG,OAAS,CAC/B,EACAO,EACAH,CAAA,EAGO,WAAI,WAAWP,CAAM,CAC9B,CAEQ,qBAAqBt/O,EAAewsB,EAAeiK,EAAe,CACxE,IAAIwpN,EAAe,GACnB,QAAQjlP,EAAI,EAAGA,EAAIy7B,EAAO,EAAEz7B,EACvBgF,EAAEhF,CAAC,IAAMwxB,EAAExxB,CAAC,IACEilP,EAAA,IAInB,MAAO,CAACA,CACV,CAEA,MAAa,iBAAiBX,EAAoB,CAChD,GAAGA,EAAO,OAAS,IAAMA,EAAO,OAASJ,GACvC,OAGI,MAAC,WAAA/sL,EAAY,KAAAx2C,CAAQ,OAErB8N,GAAK0oC,EAAa,EAAI,IAAMx2C,IAAS,YAAc,IAAM,GACzDrO,EAAM,KAAK,OAEXkyO,EAASF,EAAO,SAAS,EAAG,EAAE,EAC9BO,EAAgBP,EAAO,SAAS,EAAE,EAClCY,EAAoBZ,EAAO,OAAS,GAEpCG,EAAW,MAAM,KAAK,gBAAgBnyO,EAAKkyO,EAAQ/1N,CAAC,EAEpD02N,EAAmB,MAAM,KAAK,cAAcN,EAAeK,EAAmBT,EAAU,EAAK,EAE7FF,EAAc,MAAM,KAAK,aAAa,CAC1CjyO,EAAI,SAAS,GAAKmc,EAAG,GAAKA,EAAI,EAAE,EAChC02N,CAAA,CACD,EAEE,QAAK,qBAAqBZ,EAAY,SAAS,CAAC,EAAGC,EAAQ,EAAE,EAC9D,OAII,MAAAE,EADW,IAAI,SAASS,EAAiB,MAAM,EAChC,UAAU,CAAC,EAChC,GAAG,MAAK,OAAO,IAAIT,CAAG,EAGjB,mBAAO,IAAIA,EAAKA,CAAG,EAEjBS,EAAiB,MAAM,CAAC,CACjC,CACF,CCpJA,MAAqBC,EAAoB,CACvC,OAAO,cAAcnuM,EAAW,CAC9B,KAAM,CAAC,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAS,EAAAlY,EACjDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACP,MAAAzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAErBq2L,EAAgB,IAAInxG,GACZmxG,EAAA,IACZ,MACA,2BACA,MACA,SAGCH,GACYA,EAAA,QAAS52N,GAAW,CAC/B,KAAM,CAAC,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAA,EAASh3N,EACrB+2N,EAAA,IACZ,iBAAiBlqJ,CAAI,IAAIo6C,CAAW,GACpC,WAAW+vG,CAAK,GAClB,CACD,EAEAH,GAASC,GACIC,EAAA,IACZ,eAAeF,CAAK,GACpB,aAAaC,CAAG,IAINC,EAAA,IACZ,uBACA,uBACA,0BAEI,MAAA5vG,EAAa,SAAWlnI,EAAM,IAAK+f,GAAMA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC/D,QAAQzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CAC9B,MAAA6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAC,KAAA2gB,EAAM,KAAAq1H,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,cAAA0rG,CAAiB,EAAAn/M,EAC9D,OAAOliB,EAAM,CACX,IAAK,QAAS,CACE6kO,EAAA,IACZ,mCAAmClvG,EAAa,IAAK7nH,GAAWA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,GAC/E,mBACA,0BACA,wBACA,SAASzuB,CAAC,GACV,aACA2lP,GAAU3D,CAAa,GAEtBhsG,GACDwvG,EAAc,IAAI,UAAU5vG,CAAU,SAASI,CAAI,EAAE,EAEzCwvG,EAAA,IACZ,aACAI,GAAgBtvG,CAAY,EAC5BuvG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,GAG5C,KACF,CAEA,IAAK,QAAS,CACE4vG,EAAA,IACZ,mCAAmClvG,EAAa,IAAK7nH,GAAWA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,GAC/E,mBACA,0BACA,wBACA,SAASzuB,CAAC,GACV,aACA2lP,GAAU3D,CAAa,GAEtBhsG,GACDwvG,EAAc,IAAI,UAAU5vG,CAAU,SAASI,CAAI,EAAE,EAEzCwvG,EAAA,IACZ,aACA,eACAI,GAAgBtvG,CAAY,EAC5BuvG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,GAE5C,KACF,CACF,CACF,CACc,OAAA4vG,EAAA,IAAIM,GAAgB,CAAC,EAC5BN,EAAc,UACvB,CAEA,OAAO,eAAevuM,EAAW,CAC/B,KAAM,CAAC,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAS,EAAAlY,EACjDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACP,MAAAzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAErBq2L,EAAgB,IAAInxG,GACZmxG,EAAA,IACZ,MACA,2BACA,MACA,SAGCH,GACYA,EAAA,QAAS52N,GAAW,CAC/B,KAAM,CAAC,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAA,EAASh3N,EACrB+2N,EAAA,IACZ,iBAAiBlqJ,CAAI,IAAIo6C,CAAW,GACpC,WAAW+vG,CAAK,GAClB,CACD,EAEAH,GAASC,GACIC,EAAA,IACZ,eAAeF,CAAK,GACpB,aAAaC,CAAG,IAINC,EAAA,IACZ,uBACA,uBACA,0BAEI,MAAA5vG,EAAa,SAAWlnI,EAAM,IAAK+f,GAAMA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC/D,QAAQzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CAC9B,MAAA6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAC,KAAA2gB,EAAM,KAAAq1H,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,cAAA0rG,CAAiB,EAAAn/M,EAC9D,OAAOliB,EAAM,CACX,IAAK,QAAS,CACE6kO,EAAA,IACZ,mCAAmClvG,EAAa,IAAK7nH,GAAWA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,GAC/E,mBACA,0BACA,wBACA,SAASzuB,CAAC,GACV,aACA2lP,GAAU3D,CAAa,GAEtBhsG,GACDwvG,EAAc,IAAI,UAAU5vG,CAAU,SAASI,CAAI,EAAE,EAEzCwvG,EAAA,IACZ,aACAI,GAAgBtvG,CAAY,EAC5BuvG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,GAE5C,KACF,CAEA,IAAK,QAAS,CACE4vG,EAAA,IACZ,mCAAmClvG,EAAa,IAAK7nH,GAAWA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC,GAC/E,mBACA,0BACA,wBACA,SAASzuB,CAAC,GACV,aACA2lP,GAAU3D,CAAa,GAEtBhsG,GACDwvG,EAAc,IAAI,UAAU5vG,CAAU,SAASI,CAAI,EAAE,EAGzCwvG,EAAA,IACZ,aACA,eACAI,GAAgBtvG,CAAY,EAC5BuvG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,GAE5C,KACF,CACF,CACF,CACc,OAAA4vG,EAAA,IAAIM,GAAgB,CAAC,EAC5BN,EAAc,UACvB,CACF,CCvLO,MAAMO,EAAqB,CAC9B,OAAO,cAAc9uM,EAAM,CACvB,KAAM,CAAE,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAO,EAAGlY,EACnDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACb,MAAMzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAE3B,IAAI0tF,EAAM;AAAA;AAAA;AAAA,OAINwoG,GACAA,EAAa,QAAQ52N,GAAK,CACtB,KAAM,CAAE,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAK,EAAKh3N,EACrCouH,GAAO;AAAA,gBACPvhD,CAAI,IAAIo6C,CAAW;AAAA,UACzB+vG,CAAK,EACf,CAAa,EAEDH,GAASC,IACT1oG,GAAO;AAAA,cACLyoG,CAAK;AAAA,YACPC,CAAG,IAGP1oG,GAAO;AAAA;AAAA;AAAA,uBAIP,MAAMjH,EAAa,SAAWlnI,EAAM,IAAI+f,GAAKA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC7D,QAASzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CACnC,MAAM6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAE,KAAA2gB,EAAM,KAAAq1H,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,cAAA0rG,CAAe,EAAGn/M,EAChE,OAAQliB,EAAI,CACR,IAAK,QAAS,CACVk8H,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,QAE3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC9BnlG,GAAO;AAAA,YAEPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EAEjD,KACH,CACD,IAAK,QAAS,CACViH,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,QAE3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC9BnlG,GAAO;AAAA;AAAA,cAGPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EAEjD,KACH,CACJ,CACJ,CACD,OAAAiH,GAAOipG,GAAgB,EACvBjpG,GAAO;AAAA,EAGAA,CACV,CAED,OAAO,eAAe5lG,EAAM,CACxB,KAAM,CAAE,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAO,EAAGlY,EACnDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACb,MAAMzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAE3B,IAAI0tF,EAAM;AAAA;AAAA;AAAA,OAINwoG,GACAA,EAAa,QAAQ52N,GAAK,CACtB,KAAM,CAAE,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAK,EAAKh3N,EACrCouH,GAAO;AAAA,gBACPvhD,CAAI,IAAIo6C,CAAW;AAAA,UACzB+vG,CAAK,EACf,CAAa,EAEDH,GAASC,IACT1oG,GAAO;AAAA,cACLyoG,CAAK;AAAA,YACPC,CAAG,IAGP1oG,GAAO;AAAA;AAAA;AAAA,uBAIP,MAAMjH,EAAa,SAAWlnI,EAAM,IAAI+f,GAAKA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC7D,QAASzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CACnC,MAAM6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAE,KAAA2gB,EAAM,IAAA1W,EAAK,KAAA+rI,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,IAAA0vG,EAAK,cAAAhE,CAAe,EAAGn/M,EAC1E,OAAQliB,EAAI,CACR,IAAK,QAAS,CACVk8H,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,QAE3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC9BnlG,GAAO;AAAA,YAEPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EAEjD,KACH,CACD,IAAK,QAAS,CACViH,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA,QAE3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC9BnlG,GAAO;AAAA;AAAA,cAGPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EACjD,KACH,CACJ,CACJ,CACD,OAAAiH,GAAOipG,GAAgB,EACvBjpG,GAAO;AAAA,EAGAA,CACV,CACL,CC7IO,MAAMopG,EAAoB,CAC7B,OAAO,cAAchvM,EAAM,CACvB,KAAM,CAAE,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAO,EAAGlY,EACnDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACb,MAAMzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAE3B,GAAI,CAACzgD,EAAM,OACP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,IAAImuI,EAAM;AAAA;AAAA;AAAA,OAINwoG,GACAA,EAAa,QAAQ52N,GAAK,CACtB,KAAM,CAAE,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAK,EAAKh3N,EACrCouH,GAAO;AAAA,gBACPvhD,CAAI,IAAIo6C,CAAW;AAAA,UACzB+vG,CAAK,EACf,CAAa,EAEDH,GAASC,IACT1oG,GAAO;AAAA,cACLyoG,CAAK;AAAA,YACPC,CAAG,IAGP1oG,GAAO;AAAA;AAAA;AAAA,wBAIP,MAAMjH,EAAa,SAAWlnI,EAAM,IAAI+f,GAAKA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC7D,QAASzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CACnC,MAAM6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAE,KAAA2gB,EAAM,KAAAq1H,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,cAAA0rG,CAAe,EAAGn/M,EAChE,OAAQliB,EAAI,CACR,IAAK,QAAS,CACVk8H,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,QAI3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC1BhsG,IACA6G,GAAO;AAAA,SACtBjH,CAAU,SAASI,CAAI,IAEZ6G,GAAO;AAAA,YAEPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EAEjD,KACH,CACD,IAAK,QAAS,CACViH,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,QAI3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC1BhsG,IACA6G,GAAO;AAAA,SACtBjH,CAAU,SAASI,CAAI,IAEZ6G,GAAO;AAAA;AAAA,cAGPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EACjD,KACH,CACJ,CACJ,CACD,OAAAiH,GAAOipG,GAAgB,EACvBjpG,GAAO;AAAA,EAGAA,CACV,CAED,OAAO,eAAe5lG,EAAM,CACxB,KAAM,CAAE,aAAAouM,EAAc,MAAAC,EAAO,IAAAC,EAAK,MAAAhwL,EAAO,MAAApG,CAAO,EAAGlY,EACnDse,EAAM,KAAO,QACbpG,EAAM,KAAO,QACb,MAAMzgD,EAAQ,CAAC6mD,EAAOpG,CAAK,EAE3B,GAAI,CAACzgD,EAAM,OACP,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,EAQX,IAAImuI,EAAM;AAAA;AAAA;AAAA,OAINwoG,GACAA,EAAa,QAAQ52N,GAAK,CACtB,KAAM,CAAE,KAAA6sE,EAAM,YAAAo6C,EAAa,MAAA+vG,CAAK,EAAKh3N,EACrCouH,GAAO;AAAA,gBACPvhD,CAAI,IAAIo6C,CAAW;AAAA,UACzB+vG,CAAK,EACf,CAAa,EAEDH,GAASC,IACT1oG,GAAO;AAAA,cACLyoG,CAAK;AAAA,YACPC,CAAG,IAGP1oG,GAAO;AAAA;AAAA;AAAA,wBAIP,MAAMjH,EAAa,SAAWlnI,EAAM,IAAI+f,GAAKA,EAAE,IAAI,EAAE,KAAK,GAAG,EAC7D,QAASzuB,EAAI,EAAGA,EAAI0O,EAAM,OAAQ1O,IAAK,CACnC,MAAM6iC,EAAIn0B,EAAM1O,CAAC,EACX,CAAE,KAAA2gB,EAAM,KAAAq1H,EAAM,WAAA0vG,EAAY,aAAApvG,EAAc,cAAA0rG,CAAe,EAAGn/M,EAChE,OAAQliB,EAAI,CACR,IAAK,QAAS,CACVk8H,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,QAI3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC1BhsG,IACA6G,GAAO;AAAA,SACtBjH,CAAU,SAASI,CAAI,IAEZ6G,GAAO;AAAA,YAEPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EAEjD,KACH,CACD,IAAK,QAAS,CACViH,GAAO;AAAA,8BACGvG,EAAa,IAAI7nH,GAAKA,EAAE,EAAE,EAAE,KAAK,GAAG,CAAC;AAAA;AAAA;AAAA;AAAA,QAI3DzuB,CAAC;AAAA,YAEW68I,GAAO8oG,GAAU3D,CAAa,EAC1BhsG,IACA6G,GAAO;AAAA,SACtBjH,CAAU,SAASI,CAAI,IAEZ6G,GAAO;AAAA;AAAA,cAGPA,GAAO+oG,GAAgBtvG,CAAY,EACnCuG,GAAOgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,CAAU,EACjD,KACH,CACJ,CACJ,CACD,OAAAiH,GAAOipG,GAAgB,EACvBjpG,GAAO;AAAA,EAGAA,CACV,CACL,CCnLO,SAASqpG,GAAkBvwG,EAAW,CAC3C,GAAG,CAACA,GAAa,CAACA,EAAU,WAAW,YAAY,EACjD,OAGF,MAAMwwG,EAAYxwG,EAClBA,EAAYA,EAAU,OAAO,EAAmB,EAEhD,KAAM,CAACywG,EAAY3+K,EAAW+yE,EAAU6rG,EAAU1C,EAAI1uG,EAAM,GAAGm2F,CAAK,EAAIz1F,EAAU,MAAM,GAAG,EACrF,EAAI,CACR,UAAAwwG,EACA,WAAAC,EACA,UAAA3+K,EACA,SAAA+yE,EACA,SAAA6rG,EACA,QAAS,CAAE,GAAA1C,EAAI,KAAA1uG,CAAM,CACzB,EAEE,QAAQj1I,EAAI,EAAGA,EAAIorO,EAAM,OAAQprO,GAAK,EACpC,OAAOorO,EAAMprO,CAAC,EAAC,CACb,IAAK,MAAO,CACV,EAAE,KAAOorO,EAAMprO,EAAI,CAAC,EACpB,KACD,CACD,IAAK,QAAS,CACR,EAAE,aACJ,EAAE,WAAa,IAGjB,EAAE,WAAW,GAAKorO,EAAMprO,EAAI,CAAC,EAC7B,KACD,CACD,IAAK,QAAS,CACR,EAAE,aACJ,EAAE,WAAa,IAGjB,EAAE,WAAW,KAAOorO,EAAMprO,EAAI,CAAC,EAC/B,KACD,CACD,IAAK,aAAc,CACjB,EAAE,WAAaorO,EAAMprO,EAAI,CAAC,EAC1B,KACD,CACD,IAAK,UAAW,CACd,EAAE,QAAUorO,EAAMprO,EAAI,CAAC,EACvB,KACD,CACD,IAAK,aAAc,CACjB,EAAE,UAAYorO,EAAMprO,EAAI,CAAC,EACzB,KACD,CACD,IAAK,eAAgB,CACnB,EAAE,YAAcorO,EAAMprO,EAAI,CAAC,EAC3B,KACD,CACD,IAAK,QAAS,CACZ,EAAE,SAAWorO,EAAMprO,EAAI,CAAC,EACxB,KACD,CACF,CAGH,OAAO,CACT,CAsKO,SAASsmP,IAAY,CAC1B,OAAO,UAAU,UAAU,YAAW,EAAG,QAAQ,SAAS,EAAI,EAChE,CAEA,SAASC,IAAW,CAClB,OAAO,UAAU,UAAU,YAAa,EAAC,QAAQ,QAAQ,EAAI,IAAM,UAAU,UAAU,YAAa,EAAC,QAAQ,QAAQ,IAAM,EAC7H,CAEO,SAASZ,GAAUpsG,EAAQ,CAChC,IAAIsD,EAAM,GAEV,QAAS8pE,EAAI,EAAGA,EAAIptE,EAAO,OAAQotE,IAAK,CACtC,MAAMhwH,EAAM4iD,EAAOotE,CAAC,EACd,CAAE,GAAAvoL,EAAI,IAAAkD,CAAK,EAAGq1D,EAEpB,QAAQ,IAAI,eAAgBv4D,EAAIkD,CAAG,EACnCu7G,EAAI,KAAK,YAAYz+G,CAAE,IAAIkD,CAAG,EAAE,CACjC,CAED,OAAOu7G,EAAI,KAAK;AAAA,CAAI,CACtB,CAEO,SAAS+oG,GAAgBzyM,EAAO,CACrC,IAAI0pG,EAAM,GACV,QAAQ,IAAI,wBAAyB1pG,CAAK,EAC1C,QAASnzC,EAAI,EAAGA,EAAImzC,EAAM,OAAQnzC,IAAK,CACrC,MAAM2gB,EAAOwyB,EAAMnzC,CAAC,EACd,CAAE,GAAAo+B,EAAI,KAAA1H,EAAM,UAAA0rN,EAAW,SAAAv7H,EAAU,cAAA2/H,EAAe,WAAA/vG,CAAY,EAAG91H,EAQrE,GAPAk8H,EAAI,KAAK,YAAYz+G,CAAE,IAAI1H,CAAI,IAAI0rN,CAAS,GAAGv7H,EAAW,IAAMA,EAAW,EAAE,EAAE,EAC3E2/H,GACFA,EAAc,QAAQ/3N,GAAK,CACzB,KAAM,CAAE,KAAA9N,EAAM,QAAA0hO,CAAS,EAAG5zN,EAC1BouH,EAAI,KAAK,aAAaz+G,CAAE,IAAI,CAACzd,EAAM0hO,CAAO,EAAE,KAAK,GAAG,CAAC,EAAE,CAC/D,CAAO,EAEC5rG,EAAY,CACd,MAAMgwG,EAAO,GACb,OAAO,oBAAoBhwG,CAAU,EAAE,QAAQiwG,GAAS,CACtDD,EAAK,KAAK,GAAGC,CAAK,IAAIjwG,EAAWiwG,CAAK,CAAC,EAAE,CACjD,CAAO,EAED7pG,EAAI,KAAK,UAAUz+G,CAAE,IAAIqoN,EAAK,KAAK,GAAG,CAAC,EAAE,CAC1C,CACF,CAED,OAAO5pG,EAAI,KAAK;AAAA,CAAI,CACtB,CAEO,SAASgpG,GAAQllO,EAAMq1H,EAAM0vG,EAAY9vG,EAAY,CAC1D,IAAIiH,EAAM,GAEV,OAAI6oG,GAAcA,EAAW,OAAS,EACpCA,EAAW,QAAQzvG,GAAa,CAC1BA,GAAaA,EAAU,MAAM,OAAS,IACxC4G,EAAI,KAAK,gBAAgB5G,EAAU,SAAS,IAAIA,EAAU,MAAM,KAAK,GAAG,CAAC,EAAE,EAC3EA,EAAU,MAAM,QAAQD,GAAQ,CAC9B6G,EAAI,KACF,UAAU7G,CAAI,gBAAgBA,CAAI,GAClC,UAAUA,CAAI,SAASJ,CAAU,IAAIj1H,CAAI,GAAGq1H,CAAI,GAChD,UAAUA,CAAI,YAAYr1H,CAAI,GAAGq1H,CAAI,GACrC,UAAUA,CAAI,UAAUr1H,CAAI,GAAGq1H,CAAI,EAC/C,CACA,CAAS,EAET,CAAK,EACQA,GACT6G,EAAI,KACF,UAAU7G,CAAI,gBAAgBA,CAAI,GAClC,UAAUA,CAAI,SAASJ,CAAU,IAAIj1H,CAAI,GAAGq1H,CAAI,GAChD,UAAUA,CAAI,YAAYr1H,CAAI,GAAGq1H,CAAI,GACrC,UAAUA,CAAI,UAAUr1H,CAAI,GAAGq1H,CAAI,EACzC,EAGS6G,EAAI,KAAK;AAAA,CAAI,CACtB,CAEO,SAASipG,GAAe77O,EAAK,CAClC,MAAO;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMT,CAEO,MAAM08O,EAAc,CACzB,OAAO,kBAAkB1vM,EAAM,CAC7B,GAAI,CAACA,EAAM,OAAO,KAElB,KAAM,CAAE,UAAAkvM,EAAW,cAAAS,EAAe,OAAAC,EAAQ,WAAAT,EAAY,UAAA3+K,EAAW,SAAA+yE,EAAU,SAAA6rG,EAAU,QAAAl6H,EAAS,KAAAxrG,EAAM,WAAAmmO,EAAY,WAAAC,EAAY,QAAAC,EAAS,UAAAC,EAAW,YAAAC,EAAa,SAAA/qP,CAAU,EAAG86C,EAExK,GAAIkvM,EACF,MAAO,CACL,UAAWA,EACX,cAAAS,EACA,OAAAC,CACV,EAGI,KAAM,cA+BP,CAED,OAAO,cAAc5vM,EAAM,CACzB,OAAIqvM,GAAS,EACJP,GAAqB,cAAc9uM,CAAI,EACrCsvM,GAAQ,EACVN,GAAoB,cAAchvM,CAAI,EAGxCmuM,GAAoB,cAAcnuM,CAAI,CAC9C,CAED,OAAO,eAAeA,EAAM,CAC1B,OAAIqvM,GAAS,EACJP,GAAqB,eAAe9uM,CAAI,EACtCsvM,GAAQ,EACVN,GAAoB,eAAehvM,CAAI,EAGzCmuM,GAAoB,eAAenuM,CAAI,CAC/C,CACH,CCzWA,MAAqBgsM,WAAqB/qG,EAMvC,CA8CD,YAAY77I,EAKT,CACK,QAED,SAAM6gC,GAAO,MAAM,EAEpB,KAAK,WACP,KAAK,SAAWsmN,MAGlBlwO,GAAW,KAAMjX,CAAO,EAEnB,eAAY,KAAK,MACtB,KAAK,cAAgB,GACrB,KAAK,UAAY,GACjB,KAAK,aAAe,GACpB,KAAK,WAAa,GAEb,sBAAiB,QAAU6L,GAAU,CACxC,KAAK,IAAI,QAAS83O,GAAW93O,CAAK,CAAC,EAEhCA,IAAU83O,GAAW,QACtB,KAAK,QAAQ,CACf,CACD,EAED,MAAM7nG,EAAgB,KAAK,cAAgB,IAAIF,GAAc/D,EAAwC,EACrGiE,EAAc,UAAY,WACZA,EAAA,MAAM,KAAK,YAAY,EACjC,KAAK,aACPA,EAAc,OAAS,GACvBA,EAAc,yBAA2B,IAG3C,IAAIgpG,EAA6B,CAC/B,QAAS,aACT,KAAQ,QACR,WAAc,GACd,MAAS,GACT,gBAAmB,WACnB,cAAiB,EACjB,WAAc,YAGhB,MAAMgG,EAAO,KACAhG,EAAA,IAAI,MAAMA,EAAY,CACjC,IAAK,SAASv/N,EAAQtP,EAAKiB,EAAO,CAEhC,OAAAqO,EAAOtP,CAAG,EAAIiB,EACd4zO,EAAK,cAAchG,CAAU,EAC7BgG,EAAK,eAAe,EACb,EACT,EACD,EAED,KAAK,YAAc,CACjB,MAAOhG,CAAA,EAGJ,oBAAiBl8M,GAAS,KAAK,gBAAgB,KAAK,IAAI,EAAG,EAAG,GAAO,EAAI,CAChF,CAEA,IAAI,iBAAkB,CACd,MAAC,iBAAAmiN,EAAkB,mBAAAznG,CAAsB,OAC/C,GAAGynG,IAAqB,OACf,OAAAA,EACT,GAAWznG,EAEJ,CACC,MAAC,mBAAAsB,CAAkB,EAAItB,EAAmB,WAChD,OAAGsB,IAAuB,SACjB++F,GAAW,OACV/+F,IAAuB,cAAgB,CAAC/+F,IAAa++F,IAAuB,aAC7E++F,GAAW,WAEXA,GAAW,SAEtB,KAVE,QAAOA,GAAW,UAWtB,CAEA,IAAI,WAAY,CACd,MAAMvgG,EAAkB,KAAK,gBAE7B,IAAIzpI,GADUgqO,GAAW,OAASvgG,EAAkB,GAChC,KACpB,OAAAzpI,GAAS,cAAiBypI,IAAoBugG,GAAW,SAAW,KAAK,WAAa,EAAI,KAAK,WACxFhqO,CACT,CAEO,gBAAgB2K,EAA8B,CACnD,GAAGA,IAAS,QAAgB,YAAK,SAAS,IAAI,MAAM,EAC/C,CACG,MAAAwgO,EAAa,KAAK,cAAc,QAAQ,EAC9C,GAAG,CAACA,EACF,OAGIxgO,QAAuBwgO,EAAW,aAAe,SAAW,QAAWA,EAAW,kBAAoB,SAAW,aAAe,OACtI,GAAG,CAACxgO,EACF,OAGI,MAAA5V,EAAQ,KAAK,YAAY,UAAWA,GAAUA,EAAM,OAAS4V,CAAI,EACvE,OAAI5V,EAIG,KAAK,SAAS,IAAI,GAAKA,EAAM,UAAU,MAAM,EAHlD,MAIJ,CACF,CAEA,MAAa,4BAA6B,CACpC,IACF,KAAK,kBAAoB,GACzB,KAAK,iBAAmB,GACxB,KAAK,cAAc,MAAQ,CAAC,QAAS,YAAY,EACjD,MAAM,KAAK,sBACL0C,EAAK,CACN,SAAI,MAAM,2BAA4BA,CAAG,CAChD,CACF,CAEA,MAAa,qBAAsB,CAKjC,OAJG,KAAK,gBACN,MAAM,KAAK,mBAGV,KAAK,gBACC,KAAK,mBAEL,KAAK,4BAEhB,CAEA,MAAa,2BAA4B,CACnC,IACF,KAAK,kBAAoB,GACzB,KAAK,iBAAmB,GACxB,KAAK,cAAc,MAAQ,CAAC,QAAS,OAAO,EAC5C,MAAM,KAAK,mBAAmB,GAAO,GAAM,EAAK,QAC1CA,EAAK,CACN,SAAI,MAAM,0BAA2BA,CAAG,CAC/C,CACF,CAEA,MAAa,kBAAmB,CACxB,MAAA0zO,EAAa,KAAK,cAAc,OAAO,EAClCA,EAAA,WAAaA,EAAW,gBAAkB,WAE/C,MAAC,cAAAhpG,EAAe,YAAA3qH,CAAe,OAC/BkmH,EAAQyE,EAAc,YAAY,iBAAiB,CAAC,EACvDzE,IACDM,GAAUN,CAAK,EACfyE,EAAc,mBAAmB3qH,CAAW,EAEhD,CAEA,MAAa,oBAAqB,CAKhC,OAJG,KAAK,iBACN,MAAM,KAAK,mBAGV,KAAK,eACC,KAAK,mBAEL,KAAK,2BAEhB,CAEO,cAAc7M,EAA8B,CAC1C,YAAK,YAAYA,CAAI,CAC9B,CAEO,cAAcwgO,EAA4B,CAC1C,iBAAYA,EAAW,IAAI,EAAIA,EAC/B,mBAAc,aAAcA,CAAU,CAC7C,CAEO,mBAAmBxgO,EAA8B,CAClD,IAEK,OADe,MAAM,gBACJ,CAAC,EAAG,KAAK,mBAAqBA,IAAS,cAAkB,KAAK,kBAAoBA,IAAS,cAIxG,CACJ,QACT,CACF,CAEA,IAAW,gBAAiB,CACnB,YAAK,mBAAmB,OAAO,CACxC,CAEA,IAAW,iBAAkB,CACpB,YAAK,mBAAmB,YAAY,CAC7C,CAEA,IAAW,SAAU,CAEnB,MAAO,CADY,KAAK,cAAc,YAAY,iBAAiB,CAAC,GAChD,OACtB,CAEA,IAAW,WAAY,CACf,MAAC,gBAAA8+H,CAAmB,OAC1B,OAAOA,IAAoBugG,GAAW,SAAWvgG,IAAoBugG,GAAW,MAClF,CAEA,IAAW,aAA0C,CACnD,OAAO,KAAK,oBAAoB,WAClC,CAEO,iBAAiBpnO,EAAiB9R,EAAqC,CAC5E,KAAK,mBAAmB,EACnB,mBAAgBg/B,GAAI,WAAW,IAAM,CACxC,KAAK,cAAgB,OACrB,KAAK,OAAOh/B,CAAM,GACjB8R,CAAO,CACZ,CAEO,oBAAqB,CACvB,KAAK,gBAAkB,SACxB,aAAa,KAAK,aAAa,EAC/B,KAAK,cAAgB,OAEzB,CAEO,aAAa0qO,EAAsB,CACxC,KAAK,KAAOA,EAEN,MAAC,GAAAllN,CAAM,EAAAklN,EACV,QAAK,KAAOllN,EAAI,CACjB,MAAMopI,EAAS,KAAK,GACpB,KAAK,GAAKppI,EACL,mBAAc,KAAMA,EAAIopI,CAAM,CACrC,CACF,CAEA,MAAa,YAAa,CAClB,MAAA6/E,GAAa,MAAM,QAAQ,IAAI,KAAK,wBAAwB,oBAAoB,CAAC,GAAG,CAAC,GAAK,GAC7F,QAAK,WAAa,CAACA,EACpB,OAIG,6BAAwBrH,GAAW,eAAe,EAEvD,MAAMr6F,EAAO,KAAK,KAClB,KAAK,mBAAmB,GAAM,CAAC,CAACA,EAAK,OAAO,MAAO,EAAK,EAExD,MAAMm9F,EAAWn9F,EAAK,SACtB,KAAK,SAAS,gBAAgB,aAAa,KAAK,MAAMk9F,IACpD,KAAK,GAAK,CACR,SAAAC,EACA,EAAGD,EAAG,EACN,IAAKA,EAAG,IACR,SAAUA,EAAG,SACb,EAAGA,EAAG,GAGD,KAAK,SAAS,WAAW,UAAU,mBAAoB,CAC5D,KAAM,MAAM,KAAK,SAAS,gBAAgB,aAAa,KAAK,EAAE,EAC9D,SAAU,KAAK,SACf,IAAK,KAAK,GAAG,IACd,EACF,EAAE,KAAK,MAAMyE,GAAmB,CAC/B,MAAM,KAAK,SAAS,gBAAgB,mBAAmBA,CAAc,EACtE,EAAE,MAAO75O,GAAQ,CACX,SAAI,MAAM,oBAAqBA,CAAG,EAKvC,KAAK,OAAO,8BAA8B,EAC3C,CACH,CAEO,UAAW,CAChB,KAAK,IAAI,UAAU,EAEnB,KAAK,qBAAqB,EAE1B,KAAK,wBAAwB,EAE7B,KAAM,CAAC,WAAA0pD,EAAY,cAAAowL,EAAe,cAAApvG,CAAA,EAAiB,KAE7CqvG,EAAgB/D,GAAoB,KAAK,IAA2B,EAE1E,GADK,SAAI,yBAA0B+D,CAAa,EAC7C,CAACA,EAAe,OAEnB,MAAM7nG,EAAqB,KAAK,mBAAqB,IAAI2iG,GAAuB,CAC9E,KAAM,KACN,cAAAnqG,EACA,IAAK,KAAK,IAAI,WAAW,YAAY,EACtC,EAEKS,EAAa+G,EAAmB,qBAAqB6nG,CAAa,EAC7D5uG,EAAA,iBAAiB,2BAA4B,IAAM,CAC5D,MAAM1wI,EAAQ,KAAK,gBAChB,KAAK,cAAgB,QAAaA,IAAU83O,GAAW,YACnD,iBAAc,KAAK,OAGrB,mBAAc,QAAS93O,CAAK,EAClC,EACU0wI,EAAA,iBAAiB,oBAAqB,IAAM,CACrD+G,EAAmB,UAAU,EAC9B,EACU/G,EAAA,iBAAiB,eAAiBz6H,GAAU,CAC/C,MAAC,UAAAw3H,CAAa,EAAAx3H,EACTy6H,EAAA,IAAI,iBAAkBjD,CAAS,EACvCA,GAAW,WACZ,KAAK,iBAAiBA,CAAS,CACjC,CACD,EACUiD,EAAA,iBAAiB,QAAUz6H,GAAU,CACxC,MAAC,MAAAu1H,CAAS,EAAAv1H,EACLy6H,EAAA,IAAI,UAAWlF,CAAK,EAC/B,KAAK,QAAQv1H,CAAK,EACnB,EAEmBwhI,EAAmB,kBAAkB,EAEzD,KAAK,UAAY,IAAIwkG,GAAahtL,EAAYowL,CAAa,EAC3D,KAAK,UAAY,IAAIpD,GAAa,CAAChtL,EAAYowL,CAAa,EAEvD,SAAI,cAAe,IAAI,EAEzBpwL,GACDwoF,EAAmB,yBAAyB,EAG9C,KAAK,kBAAkB,EAEvB,KAAK,oBAAoB,CAC3B,CAEQ,wBAAyB,CAC/B,MAAM8nG,EAAmB,KAAK,YAAY,YAAY,aAAa,EACnEA,EAAiB,aAAa,UAAU,EACvBA,EAAA,UAAYA,EAAiB,UAAYA,CAC5D,CAEQ,mBAAoB,CACvB,QAAK,mBAAmB,YACzB,OAGI,MAAAriI,EAAU,KAAK,mBAAmB,kBAAkB,CACxD,GAAI,EACJ,WAAY,GACb,EACOA,EAAA,iBAAiB,UAAYv8G,GAAM,CACzC,KAAK,qBAAqB,KAAK,MAAMA,EAAE,IAAI,CAAC,EAC7C,EACOu8G,EAAA,iBAAiB,OAAQ,IAAM,CACrC,KAAK,eAAe,EACrB,CACH,CAEQ,qBAAqB/kG,EAAsB,CAC1C,OAAAA,EAAK,OAAO,EAAG,CACpB,IAAK,aAAc,CACjBA,EAAK,KAAO,SACP,SAAI,yBAA0BA,CAAI,EACvC,KAAK,cAAcA,CAAI,EACvB,KACF,CAEA,QACO,SAAI,MAAM,6BAA8BA,CAAI,EACjD,KACJ,CACF,CAEQ,iBAAkB,CAClB,MAAC,mBAAAs/H,CAAsB,OAC7B,GAAG,CAACA,EAAoB,OAExB,MAAMwhG,EAAa,CAAC,GAAG,KAAK,cAAc,OAAO,CAAC,EAElD,OAAOA,EAAW,KACb,SAAI,iBAAkBA,CAAU,EAErCxhG,EAAmB,oBAAoBwhG,CAAU,CACnD,CAEA,MAAa,sBAAsB9gO,EAAyB,CAKpD,MAAAumE,EAAO,KAAK,UAAUvmE,CAAI,EAC1Bna,EAAM,IAAI,YAAY,EAAE,OAAO0gF,CAAI,EACnC,CAAC,MAAAzuD,CAAK,EAAI,MAAM,KAAK,UAAU,iBAAiBjyB,CAAG,EAEzD,KAAK,IAAI,wBAAyB,KAAK,GAAI0gF,CAAI,EAC/C,MAAM,KAAK,SAAS,WAAW,UAAU,0BAA2B,CAClE,KAAM,MAAM,KAAK,SAAS,gBAAgB,aAAa,KAAK,EAAE,EAC9D,KAAMzuD,CAAA,CACP,CACH,CAEO,iBAAiBuvN,EAA+B,CAChD,SAAI,mBAAoBA,CAAY,EACnC,MAAC,UAAA/xG,EAAW,cAAAixG,CAAiB,EAAAc,EACnC,GAAGd,IAAkB,EACnB,OAGI,MAAA//J,EAASq/J,GAAkBvwG,CAAS,EAM1C,KAAK,sBAAsB,CACzB,QAAS,aACT,WAAc,CAAC9uD,CAAM,EACtB,CACH,CAEA,MAAa,aAAc,CACzB,KAAM,CAAC,SAAA2zD,EAAU,GAAAp8G,EAAI,KAAAunH,CAAA,EAAQ,KACvBk9F,EAAK,KAAK,GAGX,6BAAwB7C,GAAW,eAAe,EACvD,KAAM,CAAC,IAAA1tO,EAAK,gBAAA0wO,CAAe,EAAI,MAAM,KAAK,SAAS,gBAAgB,WAAYr9F,EAAqC,IAAKk9F,EAAG,EAAGA,EAAG,CAAC,EAE7HyE,EAAiB,MAAM,KAAK,SAAS,WAAW,UAAU,oBAAqB,CACnF,KAAM,MAAM,KAAK,SAAS,gBAAgB,aAAalpN,CAAE,EACzD,SAAAo8G,EACA,IAAKqoG,EAAG,IACR,gBAAAG,CAAA,CACD,EAED,KAAK,cAAgB1wO,EACrB,MAAM,KAAK,SAAS,gBAAgB,mBAAmBg1O,CAAc,EACrE,KAAK,SAAS,CAChB,CAEO,sBAAuB,CAC5B,OAAG,KAAK,kBAA0B,KAAK,kBACpC,KAAK,4BAAoC,KAAK,4BAC1C,KAAK,4BAA8BxqP,GAAgB,aAAa,yBAA0B,KAAK,cAAe,KAAK,GAAG,GAAG,EAAE,KAAM6qP,IACtI,KAAK,4BAA8B,OAC5B,KAAK,kBAAoBA,EAAW,IAAKA,GAAev3K,GAAoBu3K,CAAU,CAAC,EAC/F,CACH,CAEQ,qBAAsB,CACvB,wBAAmB,cAAc,OAAS,GAC/C,KAAK,mBAAmB,0BAC1B,CAEA,MAAc,YAAa,CACzB,KAAK,mBAAmB,2BAElB,MAAA/uG,EAAa,KAAK,mBAAmB,WAEvC,IAAAl3D,EAAS,MAAMk3D,EAAW,eAE9B,KAAK,IAAI,cAAel3D,EAAO,KAAMA,EAAO,GAAG,EACzC,MAAAk3D,EAAW,oBAAoBl3D,CAAM,EAEhCk3D,EAAA,kBAAkB,OAAQf,GAAgBA,EAAY,YAAc,UAAU,EAAE,QAASA,GAAgB,CAClH,MAAM9sI,EAAQ,KAAK,mBAAmB,YAAY,cAAc8sI,EAAY,GAAG,EACzE9sI,EAAA,YAAcA,EAAM,UAAU,YAAc8sI,EAClDA,EAAY,UAAY,WACzB,EAED,MAAM3B,EAAW,GAEX1oH,EAAc,KAAK,YACnB+nH,EAAS/nH,EAAY,QAAQ,IAAKziB,GAAUA,EAAM,GAAG,EACrD68O,EAA4C,CAChD,KAA4B,QAC5B,IAAKp6N,EAAY,YAAY,CAC3B,OAAA+nH,EACA,QAAS/nH,EAAY,QAAQ,OAAQziB,GAAUwqI,EAAO,SAASxqI,EAAM,GAAG,CAAC,EAEzE,SAAU,CAACmrI,CAAA,CACZ,GAGG,MAAA0C,EAAW,qBAAqBgvG,CAAc,EAE3ClmK,EAAA,MAAMk3D,EAAW,eAEpB,MAAAA,EAAW,oBAAoBl3D,CAAM,EAE3C,MAAM8gK,EAAeX,GAAmBvlG,GAAS56D,EAAO,GAAG,CAAC,EAC5D,KAAK,IAAI,uBAAuB,EAChC,KAAK,sBAAsB8gK,CAAY,EAEvC,KAAK,oBAAoB,CAC3B,CAEO,wBAAwBt6O,EAAoB,CACjD,KAAK,iBAAmBA,EACnB,mBAAc,QAAS,KAAK,eAAe,CAClD,CAEA,IAAW,UAAW,CACb,YAAK,cAAgB,QAAa,KAAK,IAAQ,OAAK,aAAe,IAAO,EAAI,CACvF,CAEU,cAAcqxD,EAA2B,CACjD,MAAM,cAAcA,CAAM,EAE1B,MAAMsuL,EAAatuL,EAAO,eAAe,EAAE,CAAC,EAC5C,GAAGsuL,EAAY,CACP,MAAA3/O,EAAQ,KAAK,cAAc,OAAO,EAGrC,CAAC,KAAK,mBAAqB,CAAC,KAAK,mBAClC,KAAK,iBAAmB,IAGvB,KAAK,eACNA,EAAM,WAAa,SACX,KAAK,kBACbA,EAAM,gBAAkB,UAGf2/O,EAAA,iBAAiB,QAAS,IAAM,CACzC,KAAK,iBAAiB,GACrB,CAAC,KAAM,GAAK,CACjB,CAEGtuL,EAAO,eAAe,EAAE,QACzB,KAAK,cAAc,CAEvB,CAEQ,eAAgB,CACtB,MAAMu6I,EAAU,KAAK,QAChB,mBAAc,QAASA,CAAO,EAE7B,MAAA5rM,EAAQ,KAAK,cAAc,OAAO,EACxCA,EAAM,MAAQ4rM,CAChB,CAEO,aAA6B,CAClC,OAAO,KAAK,mBAAmB,EAAI,EAAE,KAAK,IAAM,CAC9C,KAAK,SAAS,EACd,KAAK,cAAc,EACpB,CACH,CAEA,MAAa,OAAOg0C,EAA6CC,EAAiC,CAChG,GAAG,MAAK,YAIR,KAAK,cAAgBD,EAChB,SAAI,SAAUA,CAAa,EAC3B,6BAAwB9H,GAAW,MAAM,EAE3C,KAAK,oBACD,wBAAmB,yBAAyB,EAAI,EAGpD8H,GAAiB,CAACC,GAAuB,CAC1C,IAAIC,EAAW,GACL,UAAArnO,KAAQ,KAAK,YAAa,CAC5B,MAAAwgO,EAAa,KAAK,YAAYxgO,CAA0B,EAC9DqnO,EAAW7G,EAAW,aAAe,UAAYA,EAAW,kBAAoB,UAAY6G,CAC9F,CAEM,WAAK,SAAS,gBAAgB,YAAY,KAAK,GAAI,KAAK,SAAUF,EAAeE,CAAQ,CACjG,CACF,CAEQ,aAAaC,EAAuC,CAC1D,MAAM3xG,EAA4C2xG,EAAO,aAAa,IAAK9F,IAClE,CACL,GAAGA,EACH,WAAYA,EAAY,eAE3B,EAOM,MALmB,CACxB,cAAe8F,EAAO,cACtB,gBAAiB3xG,CAAA,CAIrB,CAEQ,qBAAqBj2H,EAAsC,CACjE,KAAK,YAAY,QAAQ,CACvB,UAAW,CACT,IAAOA,EAAK,IACZ,MAASA,EAAK,MACd,aAAgBA,EAAK,aACrB,WAAY,EACd,EACA,MAAO,KAAK,aAAaA,EAAK,KAAK,EACnC,MAAOA,EAAK,MAAQ,KAAK,aAAaA,EAAK,KAAK,EAAkB,OAClE,WAAYA,EAAK,WAAa,KAAK,aAAaA,EAAK,UAAU,EAAkB,OAClF,CACH,CAEQ,aAAamiO,EAA8C,CAC7D,KAAK,YACN,CAAAA,EAAa,MAAOA,EAAa,UAAU,EAAE,OAAO,OAAO,EAAE,QAASpsG,GAAU,CAC/E,MAAME,EAAeF,EAAM,aACrBx2I,EAAM02I,EAAa,UAAW6rG,GAAgBA,EAAY,OAAS,KAAK,EACxE+F,EAAiB5xG,EAAa12I,CAAG,EACjCuoP,EAAS7xG,EAAa,UAAW6rG,GAAgB,CAACA,EAAY,YAAY,MAAQ+F,EAAe,EAAE,EACzG9xG,EAAM,aAAe,CAACE,EAAa12I,CAAG,EAAG02I,EAAa6xG,CAAM,CAAC,EAC9D,CAEL,CAEA,MAAa,uBAAuB9nO,EAAyB,CACtD,SAAI,yBAA0B,KAAMA,CAAI,EAE7C,KAAM,CAAC,WAAAu4H,EAAY,YAAAprH,GAAe,KAAK,mBAEhC,OAAAnN,EAAK,OAAO,EAAG,CACpB,IAAK,eAAgB,CACd,SAAI,qBAAsBA,CAAI,EAEnC,KAAK,aAAaA,CAAI,EACtB,KAAK,qBAAqBA,CAAI,EAExB,MAAA+nO,EAAqB1C,GAClBA,EAAW,IAAKzvG,IACd,CACL,EAAG,uCACH,UAAWA,EAAU,UACrB,QAASA,EAAU,MAAM,IAAKz2E,GAAW,CAACA,CAAM,GAEnD,EAGW,CACZu5E,GAAa,QAAS,CAAC14H,EAAK,MAAM,IAAI,EACtCA,EAAK,MAAQ04H,GAAa,QAASqvG,EAAkB/nO,EAAK,MAAM,UAAU,CAAC,EAAI,OAC/EA,EAAK,WAAa04H,GAAa,aAAcqvG,EAAkB/nO,EAAK,WAAW,UAAU,CAAC,EAAI,QAC9F,OAAO,OAAO,EAEV,QAAS21H,GAAS,CACtB,IAAIjrI,EAAQyiB,EAAY,iBAAiBwoH,EAAK,MAAM,EACpD,GAAGjrI,EACD,OAGF,MAAMs9O,EAAgB76N,EAAY,sBAAsBwoH,EAAK,KAAM,EAAK,EACxEjrI,EAAQ,IAAI+tI,GAAgBuvG,EAAc,IAAKryG,EAAK,IAAI,EACxDjrI,EAAM,aAAa,UAAU,EAC7Bs9O,EAAc,UAAYt9O,EAE1ByiB,EAAY,eAAeziB,EAAOirI,EAAK,cAAgBA,EAAK,MAAM,EACnE,EAED,KAAK,uBAAuB,EAE5B,MAAME,EAAW,KAAK,UACtB,KAAK,UAAY,GAEjB,MAAMX,EAAS/nH,EAAY,QAAQ,IAAKziB,GAAUA,EAAM,GAAG,EACrD68O,EAA4C,CAChD,KAAM1xG,EAAW,SAAW,QAC5B,IAAK1oH,EAAY,YAAY,CAC3B,OAAA+nH,EACA,QAAS/nH,EAAY,QAAQ,OAAQziB,GAAUwqI,EAAO,SAASxqI,EAAM,GAAG,CAAC,EAEzE,SAAU,CAACmrI,CAAA,CACZ,GAGE,SAAI,eAAgB0xG,EAAe,GAAG,EAErC,MAAAhvG,EAAW,qBAAqBgvG,CAAc,EAEpD,MAAM,KAAK,yBAEP1xG,GACF,MAAM,KAAK,aAGb,KACF,CAEA,IAAK,aAAc,CACP,UAAAP,KAAat1H,EAAK,WAAY,CAChC,MAAAuU,EAA4B+xN,GAAc,kBAAkBhxG,CAAS,EAC3E/gH,EAAK,cAAgB,EACf,MAAA8yN,EAAe,IAAI,gBAAgB9yN,CAAI,EACxC,gBAAW,KAAK8yN,CAAY,CACnC,CAEA,MAAM,KAAK,yBACX,KACF,CAEA,QACO,SAAI,MAAM,8BAA+BrnO,CAAI,CAEtD,CACF,CAEA,MAAa,wBAAyB,CAC9B,MAAC,mBAAAs/H,CAAsB,OAC7B,GAAG,CAACA,EACF,OAGI,MAAC,WAAA/G,CAAc,EAAA+G,EACrB,GAAG/G,EAAW,kBAAmB,CACzB,MAAAjwI,EAA4B,KAAK,WAAW,IAAKgtI,GAAc,KAAK,gBAAgBiD,EAAYjD,CAAS,CAAC,EAChH,KAAK,WAAW,OAAS,EAEnB,cAAQ,IAAIhtI,CAAQ,OAE1B,KAAK,IAAI,uBAAuB,CAEpC,CAEA,MAAc,gBAAgBiwI,EAA+BjD,EAA4B,CAClF,SAAI,oBAAqBA,CAAS,EACnC,IAEI,MAAAiD,EAAW,gBAAgBjD,CAAS,EACrC,SAAI,kBAAmBA,CAAS,QAC/B9sI,EAAG,CACT,KAAK,IAAI,MAAM,oBAAqB8sI,EAAW9sI,CAAC,CAClD,CACF,CAEA,MAAc,qBAAsB,CAC5B,MAAC,UAAAy/O,CAAa,OACpB,GAAG,CAACA,EAAW,CACR,SAAI,KAAK,wDAAwD,EACtE,MACF,CAGA,GAAG,CADY,KAAK,aAAa,OAE/B,OAGI,MAAAvlN,EAAQ,KAAK,aAAa,MAAM,EACtC,KAAK,aAAa,OAAS,EAE3B,UAAU1iB,KAAQ0iB,EAAO,CACvB,MAAMwlN,EAAgB,MAAMD,EAAU,iBAAiBjoO,CAAI,EAC3D,GAAG,CAACkoO,EACF,SAKF,MAAM1sP,EAAM,IAAI,YAAY,EAAE,OAAO0sP,CAAa,EAC9C,IACI,MAAAC,EAAmC,KAAK,MAAM3sP,CAAG,EAClD,SAAI,sCAAuC2sP,CAAa,EAC7D,KAAK,uBAAuBA,CAAa,OAC9B,CACN,SAAI,MAAM,uBAAwB3sP,CAAG,EAC1C,KAAK,OAAO,kCAAkC,EAC9B0nP,GAAA,cAAc,eAAgB,KAAK,kBAAkB,CACvE,CACF,CACF,CAEO,+BAA+BljO,EAAkB,CACjD,kBAAa,KAAKA,CAAI,EAC3B,KAAK,oBAAoB,CAC3B,CACF,CC91BA,eAAsBooO,GAAat5L,EAAwC,CACnE,MAAA7qC,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,MAAQ6qC,EAAM,WACrB7qC,EAAO,OAAS6qC,EAAM,YACV7qC,EAAO,WAAW,IAAI,EAC9B,UAAU6qC,EAAO,EAAG,EAAG7qC,EAAO,MAAOA,EAAO,MAAM,EAE/C,IAAI,QAAQ,CAACtD,EAASwkB,IAAW,CACtClhB,EAAO,OAAemmD,GAAA,CACjBA,EACDzpD,EAAQypD,CAAI,EAELjlC,EAAA,IAAI,MAAM,uBAAuB,CAAC,CAC3C,CACD,EACF,CACH,CCPO,MAAMkjN,WAA0Bt8N,EAAa,CAGlD2hF,YAAqB5+C,EAAyB,CAC5C,MAAM,oBAAqB,CACzBi/C,gBAAiB,GACjBxxG,MAAO,GACPuvF,KAAM,GACNz+D,QAAS,CAAC,CACRzf,QAAS,KACT9H,SAAUA,IAAM,CACdgpD,EAAMw5L,UAAUC,CAAc,CAChC,EACD,CACH,CAAC,EAAE,KAXgBz5L,QAanB,MAAM05L,EAAgB15L,EAAM25L,QAAU,UACtC,IAAIF,EAAiBC,EAErB,KAAKjsP,MAAMu1C,OAAOtxC,EAAK,wBAAwB,CAAC,EAKhDkoP,UAAUC,aAAaC,mBAAmB1mO,KAAM2mO,GAAY,CAC1D,MAAMC,EAAUD,EAAQ/jO,OAAQikO,GAAWA,EAAO9xG,OAAS,aAAa,EAClE9nH,EAAO+G,GACX4yN,EAAQrkO,IAAKskO,IAAY,CACvBp4N,YAAa/zB,GAAcmsP,EAAOp6N,KAAK,EACvCzb,MAAO61O,EAAOC,SACdl8N,QAASi8N,EAAOC,WAAaR,CAC/B,EAAE,EACDzqN,GAAO,CACNwqN,EAAiBxqN,CACnB,CACF,EAEA,KAAK2qH,SAAW9oI,GAAO,IAAAZ,EACpB0lI,GAAU,CAACruH,KAAI,OAAQ0wC,KAAI,YAAAh8C,UAAA,QAAA/L,EACzB4L,GAAI,KAACC,MAAI,QAAEi+N,EAAQrtP,SAAW,CAAC,EAAEqvB,SAAUqE,EAAI,IAAApE,UAAA,QAE5CmL,GACE,CAAC,CACCvF,YAAanwB,EAAK,0BAA0B,EAC5C0S,MAAO,GAEP4Z,QAAS,EACX,CAAC,EACAiR,GAAO,EACV,CAAC,OAIJ,KAAK+tD,IAAI,CAChB,CAAC,CACH,CAEAt3D,SAAU,CACR,KAAKk0H,SAAQ,CACf,CACF,CC5DO,MAAMugG,GAAiBn9O,GAA8B,CAC1D,KAAM,EAAGqzC,CAAI,EAAIC,GAAWtzC,EAAO,CAAC,QAAS,OAAO,CAAC,EAC/C+R,EAAM,IAAIwf,GAAW8hB,CAAI,EAE/Bh2C,UAAaC,GACX,IAAM0C,EAAMmT,MACZ,CAAC/L,EAAO/G,IAAS,CACf0R,EAAI9f,UAAUokB,UAAU0F,OAAO1b,CAAI,EACnC0R,EAAI9f,UAAUokB,UAAUS,IAAI1P,CAAK,CAErC,EAAC,EAED/J,GAAaC,GACX,IAAM0C,EAAMoH,MACXA,GAAU,CACNA,IAAU2K,EAAI3K,QACf2K,EAAI3K,MAAQA,EAGlB,EAAC,EAEM2K,EAAI9f,SACb,EC/BemrP,GAAA,iqECAAC,GAAA,8DCAAC,GAAA,4NCsBT/gG,GAAUA,CAACnwI,EAAY,KAAQ,oBAAmBA,CAAU,GAE3D,MAAMmxO,WAAwBt9N,EAAa,CAGhD2hF,aAAc,CACZ,MAAM26C,GAAO,EAAI,CACft6C,gBAAiB,GACjBD,SAAU,GACVvxG,MAAO,GACPuvF,KAAM,EACR,CAAC,EAWKw9J,oBAAahgM,GAA6B,CAChD,KAAKogG,UAAS,EACd,KAAKrtJ,SAASwqJ,qBAAqB0iG,eACjC5jG,GAAoBJ,YAAYikG,UAChClgM,CACF,EAAEmgG,MAAM,IAAM,CACZh7H,GAAS,CACP1f,YAAa,yBACf,CAAC,CACH,CAAC,IAlBD,KAAKxS,MAAMu1C,OAAOtxC,EAAK,wBAAwB,CAAC,EAChD,KAAKkoJ,SAAW9oI,GAAO,WAAAukF,EAAA,YAAAnlF,EACpByqO,GAAsB,KAACC,UAAQ,QAAEvlJ,EAAKmlJ,SAAS,KAC/C,KAAKx9J,IAAI,CAId,CAcAt3D,SAAU,CACR,MAAMA,QAAO,EACb,KAAKk0H,SAAQ,CACf,CACF,CAMA,MAAMihG,GAAmB,GAEnBF,GAA0B39O,GAAuC,CACrE,KAAM,CAACuqB,EAAMuzN,CAAO,EAAI7+O,GAAa,EAAE,EACjC,CAAC8+O,EAAaC,CAAc,EAAI/+O,GAAa,EAAK,EAClD,CAACg/O,EAAiBC,CAAkB,EAAIj/O,GAAa,EAAI,EAEzDk/O,EAAmB,IAAI99N,GAAc,CACzCyJ,OAAQ,EACV,CAAC,EACDq0N,EAAiBr7N,MAAM7O,iBAAiB,SAAU,IAAM,CACtD+pO,EAAeG,EAAiBn9N,OAAO,CACzC,CAAC,EAED,MAAM48N,EAAWA,IAAM,CACrB59O,EAAM49O,SAAS,CACbrzN,KAAMA,EAAM,EACZwzN,YAAaA,EAAa,EAC1BE,gBAAiBA,EAAgB,CACnC,CAAC,GAGH,YAAA5rO,QAAAqN,KAAA/M,EAAAN,EAAAS,WAAAD,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAAC,WAAAkuE,EAAAxT,kBAAA15B,EAAAnhC,EAAA66D,YAAA2uB,EAAAroD,EAAAhhC,WAAAi/F,EAAAj+D,EAAA05B,YAAAz6D,SAAAJ,EAAAO,EAGOiqO,GAAa,oBACL5gG,GAAQ,cAAc,CAAC,MAC9Bn1I,OAAK,QAAEmjB,EAAI,CAAE,EACb6zN,WAAYN,EAAO,IACnBO,WAAS,QAAE3pP,EAAK,iCAAiC,EAAEq6E,SAAS,EAC5Dh3B,UAAW8lM,EAAgB,GAAAhrO,CAAA,EAAAE,EAAAF,EAI1Bne,MAAK,oCAAoC,EAACssF,CAAA,EAAAjuE,EAAAF,EAAA,IAE1Cne,EAAK,gCAAgC,EAAC,MAAAqe,EAAAJ,EAAAO,EAGxC8W,GAAM,CACL3Q,KAAI,kBACJ5oB,OAAK,QAAEiE,EAAK,kCAAkC,CAAC,EAC/C0rB,cAAe+9N,CAAgB,SAAAprO,EAAA+gC,EAAA5gC,EAMhC0lI,GAAU,CAACruH,KAAI,OAAQ0wC,KAAI,YAAAh8C,UAAA,OAAA/L,GACzB4L,GAAI,KAACC,MAAI,OAAE,CAACg/N,EAAW,CAAE,MAAA9+N,UAAA,OAAA+9E,EAAA1qF,GAAA,EAAA+0F,EAAArK,EAAAlqF,WAAAw0F,EAAAD,EAAA75B,YAAAh7D,UAAA60F,EAAA,MAGf+1I,EAAc,EAAArqO,EAAAu0F,EAAA,IAKlB5yG,EAAK,kCAAkC,CAAC,EAAA6d,GAAA6M,GAAA,OAAAC,EAPjCk9H,GAAQ,eAAe,EAACj9H,EAG3B5qB,EAAK,8BAA8B,EAAEq6E,UAASxvD,EAC5C7U,GAAW6xI,GAAQ,cAAc,EAAGA,GAAQ,oBAAoB,CAAC,EAACV,EAE/DU,GAAQ,gBAAgB,EAACl9H,WAAAD,EAAAC,KAAAG,GAAAw9E,EAAA59E,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAA9M,GAAA60F,EAAAjoF,QAAAE,MAAA,EAAAC,IAAAH,EAAAG,MAAAC,GAAA6nF,EAAAjoF,EAAAG,MAAA,EAAAs8H,IAAAz8H,EAAAy8H,MAAAr8H,GAAA8nF,EAAAloF,EAAAy8H,MAAA,EAAAz8H,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,OAAAykI,KAAAzkI,MAAA,GAAA4lF,CAAA,EAAA9pF,IAKxC4L,GAAI,KAACC,MAAI,QAAEg/N,EAAW,CAAE,MAAA9+N,UAAA,OAAAkpF,EAAAv1F,GAAA,EAAAw1F,EAAAD,EAAAr1F,WAAA0+F,EAAApJ,EAAAt1F,WAAA8+F,EAAAJ,EAAAhkC,YAAAskC,EAAA1J,EAAA56B,YAAAgkC,SAAAr1C,QAWR,IAAM+hL,EAAmB,EAAI,EAAC1rO,GAAAg/F,EAAA,MAPlC8rI,EAAkB,EAAA1rI,EAAAz1C,QAiBd,IAAM+hL,EAAmB,EAAK,EAAC1rO,GAAAo/F,EAAA,MAPnCyrI,EAAgB,EAAAtqO,EAAA++F,EAAA,IAWtBp9G,EAAK,kCAAkC,CAAC,EAAA6d,GAAA6M,GAAA,OAAA28H,EAxBjCQ,GAAQ,eAAe,EAACP,EACtBO,GAAQ,iBAAiB,EAACN,EAG7BvnJ,EAAK,6BAA6B,EAAEq6E,UAASmtE,EACvC,CACT,CAACK,GAAQ,cAAc,CAAC,EAAG,GAC3B,CAACA,GAAQ,qBAAqB,CAAC,EAAG,GAClC,CAACA,GAAQ,qBAAqB,CAAC,EAAG0hG,EAAgB,CACnD,EAAA9hG,EAKIznJ,EAAK,2BAA2B,EAAEq6E,UAASqtE,EACrC,CACT,CAACG,GAAQ,cAAc,CAAC,EAAG,GAC3B,CAACA,GAAQ,qBAAqB,CAAC,EAAG,GAClC,CAACA,GAAQ,qBAAqB,CAAC,EAAG,CAAC0hG,EAAgB,CACpD,EAAA5hG,EAIOE,GAAQ,gBAAgB,EAACR,WAAA38H,EAAA28H,MAAAv8H,GAAA2oF,EAAA/oF,EAAA28H,MAAA,EAAAC,IAAA58H,EAAA48H,MAAAx8H,GAAA4oF,EAAAhpF,EAAA48H,MAAA,EAAAC,IAAA78H,EAAA68H,MAAAzpI,GAAAg/F,EAAApyF,QAAA68H,MAAA,EAAA78H,EAAA88H,KAAArkI,GAAA25F,EAAA0qC,EAAA98H,EAAA88H,IAAA,EAAAC,IAAA/8H,EAAA+8H,MAAA3pI,GAAAo/F,EAAAxyF,QAAA+8H,MAAA,EAAA/8H,EAAAg9H,MAAAvkI,GAAA+5F,EAAAwqC,EAAAh9H,EAAAg9H,KAAA,EAAAC,IAAAj9H,EAAAi9H,OAAA78H,GAAAsyF,EAAA1yF,EAAAi9H,OAAA,EAAAj9H,CAAA,GAAA28H,KAAA3kI,OAAA4kI,KAAA5kI,OAAA6kI,KAAA7kI,OAAA8kI,KAAA9kI,OAAA+kI,KAAA/kI,OAAAglI,MAAAhlI,OAAAilI,MAAAjlI,MAAA,GAAA+wF,CAAA,cAAAp1F,EAAAg/F,EAAA7+F,EAS1Cq2F,GAAM,KAAAtqF,UAAA,OAAAgzF,EAAA9yF,KAAA8yF,SAAA91C,QACYyhL,EAAQ7qO,EAAAk/F,EAAA,IAItBv9G,EAAK,+BAA+B,CAAC,EAAA6d,GAAA6M,GAAA,OAAAk9H,EAH5B/xH,IAAO56B,OAASkuP,GAAgBrjD,EACnCj+C,GAAQ,SAAS,EAACD,WAAAl9H,EAAAk9H,QAAArqC,EAAAnjC,SAAA1vD,EAAAk9H,SAAAk+C,IAAAp7K,EAAAo7K,OAAAh7K,GAAAyyF,EAAA7yF,EAAAo7K,OAAA,EAAAp7K,CAAA,GAAAk9H,MAAAllI,OAAAojL,MAAApjL,MAAA,GAAA66F,CAAA,KAAA1/F,GAAA6M,GAAA,OAAAq7K,EA1ErBl+C,GAAQ,UAAU,EAACs+C,EACjBt+C,GAAQ,SAAS,EAACu+C,EAShBv+C,GAAQ,cAAc,EAACmgD,EAazBngD,GAAQ,UAAU,EAACqgD,EACjBrgD,GAAQ,iBAAiB,EAACk+C,WAAAr7K,EAAAq7K,OAAAj7K,GAAAnN,EAAA+M,EAAAq7K,OAAA,EAAAI,IAAAz7K,EAAAy7K,OAAAr7K,GAAA7M,EAAAyM,EAAAy7K,OAAA,EAAAC,IAAA17K,EAAA07K,OAAAt7K,GAAA3M,EAAAuM,EAAA07K,OAAA,EAAA4B,IAAAt9K,EAAAs9K,OAAAl9K,GAAAs0B,EAAA10B,EAAAs9K,OAAA,EAAAE,IAAAx9K,EAAAw9K,OAAAp9K,GAAA28E,EAAA/8E,EAAAw9K,OAAA,EAAAx9K,CAAA,GAAAq7K,MAAArjL,OAAAyjL,MAAAzjL,OAAA0jL,MAAA1jL,OAAAslL,MAAAtlL,OAAAwlL,MAAAxlL,MAAA,GAAA/E,CAAA,IA0D9C,EAAC8rD,GAAA,2XClKKmgL,GAAWA,CAAClyO,EAAY,KAAQ,cAAaA,CAAU,GAEhDmyO,GAAmBA,CAAC,CAACpuP,QAAwB,IAAM,CAC9D,KAAM,CAACquP,EAASC,CAAU,EAAIx/O,GAAa,EAAE,EACvC,CAACy/O,EAASC,CAAU,EAAI1/O,GAAa,EAAE,EACvC,CAAC2/O,EAAiBC,CAAkB,EAAI5/O,GAAa,EAAI,EAE/DkiF,UAAQ,IAAM,CACZ/wF,EAAUG,SAASwqJ,qBAAqB2C,aAAavtJ,CAAM,EAAEimB,KAAK,MAAMlC,GAAS,CAC/EuqO,EAAWvqO,EAAKta,GAAG,EACnB+kP,EAAWzqO,EAAK/N,GAAG,EACnB04O,EAAmB,EAAK,CAC1B,CAAC,EAAElhG,MAAM,IAAM,CACbh7H,GAAS,CACP1f,YAAa,eACf,CAAC,CACH,CAAC,CACH,CAAC,GAED,WAAAoP,EAAAC,GAAA,EAAAK,EAAAN,EAAAS,WAAAD,EAAAF,EAAAG,WAAAkuE,EAAAnuE,EAAAC,WAAA2M,EAAAuhE,EAAAxT,YAAA15B,EAAAjhC,EAAA26D,YAAAz6D,SAAA0M,EAAA,IAO+C/qB,EAAK,+BAA+B,CAAC,EAAAqe,EAAA+gC,EAAA,IAG3Ep/C,EAAK,qCAAqC,CAAC,EAAAqe,EAAAJ,EAAAO,EAE7CkoI,GAAQ,KACPj1I,KAAG,QAAEu4O,EAAO,CAAE,MACd9kP,KAAG,QAAE4kP,EAAO,CAAE,MACd19O,SAAO,QAAE89O,EAAe,CAAE,EAC1B9iG,SAAQ,WAAAvpI,GAAA6M,GAAA,OAAAC,EAfFi/N,GAAS,QAAQ,EAACh/N,EAChBg/N,GAAS,aAAa,EAAC/+N,EACrB++N,GAAS,eAAe,EAACziG,EACvByiG,GAAS,eAAe,EAACviG,EAGzBuiG,GAAS,cAAc,EAACtiG,EAE1BsiG,GAAS,mBAAmB,EAACj/N,WAAAD,EAAAC,KAAAG,GAAAnN,EAAA+M,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,MAAAE,GAAA7M,EAAAyM,EAAAE,MAAA,EAAAC,IAAAH,EAAAG,MAAAC,GAAA3M,EAAAuM,EAAAG,MAAA,EAAAs8H,IAAAz8H,EAAAy8H,MAAArpI,GAAAwuE,EAAA5hE,UAAAy8H,MAAA,EAAAE,IAAA38H,EAAA28H,MAAAv8H,GAAAC,EAAAL,EAAA28H,MAAA,EAAAC,IAAA58H,EAAA48H,MAAAx8H,GAAAs0B,EAAA10B,EAAA48H,MAAA,EAAA58H,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,OAAAykI,KAAAzkI,OAAA2kI,KAAA3kI,OAAA4kI,KAAA5kI,MAAA,GAAA/E,CAAA,IAYjD,ECtBMysO,GAAkB,KAEXC,GAAN,MAAMA,WAA2Bn/B,EAA4C,CAclF,YAAoBo/B,EAAkB,CACpC,MAAM,IAAIlyN,GAAW,CACnB,SAAU,UACD,CACL,MAAO,EACP,MAAO,CAAC,GAGb,GAAGkyN,EAAW,CAAC,SAAS,EAAI,CAAE,GARb,cAAAA,EARZ,oBAAiB,IAAI12N,GAsD7B,KAAQ,UAAY,SAAW,CACvB,MAAAn4B,EAAS,MAAMu4C,GAAc,uBACzBt4C,EAAA,SAAS,mBAAmB,SAAS,CAC7C,OAAAD,EACA,KAAM,KAAK,SACZ,EAEQwyB,GAAA,CACP,YAAa,uBACb,kBAAmB,CAAC,MAAM7f,GAAc,CAAC,OAAA3S,EAAQ,OAAQ,EAAI,CAAC,CAAC,EAChE,GAyKH,KAAQ,OAAS,IAAM,CAClB0pJ,GAAoB,aACrBA,GAAoB,WAAW,EAAE,MAAOv4I,GAAQ,CACzC,SAAI,MAAM,aAAcA,CAAG,EACjC,EAAE,KAAK,IAAM,CACZ,KAAK,eAAiB,OAAO,WAAW,KAAK,OAAQw9O,EAAe,EACrE,CACH,EAoBF,KAAQ,WAAa,IAAM,CACzB,KAAK,YAAY,MAAM,cAAc,UAAU,IAAI,cAAc,EAE7D,KAAK,kBAAkB,eACP,KAAK,QAAQ,MAAM,cAAc,4CAA4C,EACrF,MAAM,KAAK,kBAAmB,KAAK,UAAU,EAGzD,KAAK,cAAc,OAAO,KAAK,kBAAmB,EAAI,EAEvC,KAAK,QAAQ,MAAM,cAAc,gBAAgB,EACzD,UAAU,OAAO,kBAAkB,EAEtBjlG,GAAA,YAAY,MAAQX,GAAW,WA/P9C,mBAAgB,IAAIpsI,GAAqB,CAC5C,WAAY,GACZ,KAAM,GACP,EACD,KAAK,cAAc,YACd,uBAAoB,SAAS,cAAc,KAAK,EAChD,uBAAkB,UAAU,IAAI,oBAAoB,EAEzD,KAAK,YAAc,EAEhB,KAAK,UAAU,KAAK,iBAAiB,CAAC,CACvC,KAAM,UACN,KAAM,UACN,QAAS,KAAK,SACf,EAAC,EAEF,KAAK,QAAQ,SAAS,UAAU,IAAI,MAAM,EAC1C,KAAK,QAAQ,OAAO,UAAU,IAAI,MAAM,EAEnC,cAAS,UAAU,IAAI,MAAM,EAElC,KAAK,aAAa,CACpB,CAEU,cAAe,CACvB,MAAM,aAAa,EAEFE,EAAA,KAAK,QAAQ,QAAS,KAAK,UAAW,CAAC,eAAgB,KAAK,eAAe,EAE5F,KAAK,eAAe,IAAIrc,GAAgB,kBAAkB,EAAE,sBAAwB2oJ,GAAW,CAC1FO,GAAoB,aAAa,KAAK,KAAOP,GAC9C,KAAK,gBAAgB,KAAK,YAAY,MAAO,eAAe,CAC9D,CACD,CACH,CAeA,MAAa,UAAU97F,EAGpB,CACK,MAAA7mD,EAAS6mD,EAAO,OAAO,SAAS,GACnC,CAACq8F,GAAoB,aAAeA,GAAoB,YAAY,SAAWr8F,EAAO,UACpFq8F,GAAoB,aACrB,MAAMA,GAAoB,YAGtB,MAAAA,GAAoB,SAASljJ,CAAM,GAG3CooP,GAAmB,eAAiB,KACpC,KAAK,OAASvhM,EAAO,OAEf,MAAAjmB,EAAO5mC,GAAgB,QAAQgG,CAAM,EAC3C,GAAI9G,GAAuB0nC,CAAI,EAAE,CAAC,EAI3B,cAAW6nL,GAAgB,KAAK,MAAM,MAJR,CACnC,MAAM/nL,EAAW,MAAM,KAAK,SAAS,kBAAkB,YAAY1gC,CAAM,EACpE,cAAY0gC,EAAS,iBAA2D,KAKvF,MAAM,KAAK,WAAW,CACpB,MAAOwiH,GAAoB,YAAY,UACvC,eAAgBr8F,EAAO,SAAWuhM,GAAmB,eAAiBA,GAAmB,gBAAkB,OAC3G,UAAW,EACX,OAAQvhM,EAAO,OACf,UAAW,EACX,YAAa,CAACv1C,EAAQiS,IAAiB,CACrC,MAAM8oC,EAAQ/6C,EAAO,MAEfg3O,EAAU,IAAMplG,GAAoB,YAE1C5xI,EAAO,uBAAuBg3O,EAAU,OAAK,kBAAkB,GAC5D,CAAClpM,IAAayH,EAAO,UACtBv1C,EAAO,cAAc,CAAC,CACpB,KAAM,YACN,KAAM,qCACN,QAAS,IAAMgY,GAAa,YAAYs8N,GAAmBt0O,EAAO,KAAK,EAAE,KAAK,EAC9E,OAAQ,IAAM,OAAO,UAAU,cAAc,kBAAsB,YAAc,CAAC8tC,EAAA,EACjF,CACD,KAAM,UACN,KAAM,uCACN,OAAQ,IAAMkpM,EAAQ,GAAG,OAAS,CAACA,IAAU,KAAK,OAAO,oBACzD,QAAS,IAAMh/N,GAAa,YAAYs9N,EAAe,EAAE,KAAK,GAC7D,CACD,KAAM,WACN,KAAM,sCACN,OAAQ,IAAM0B,KAAW,OAASA,IAAU,KAAK,OAAO,oBACxD,QAAS,IAAM,CACR,cAAS,qBAAqB,cAAcA,EAAA,EAAU,SAAS,EAAE,MAAM,IAAM,CACvEt8N,GAAA,CACP,YAAa,gBACd,EACF,CACH,GACC,CACD,KAAM,WACN,KAAM,uCACN,OAAQ,IAAMs8N,EAAA,GAAW,MACzB,QAAS,IAAM,CACbh/N,GAAa,YAAYu8H,GAAsB,CAC7C,OAAQ,KAAK,OACb,OAAQ,GACR,YAAa,IAAM,KAAK,MAAM,OAAW,EAAI,EAC9C,EAAE,KAAK,CACV,GACC,CACD,KAAM,aACN,KAAM,sCACN,OAAQ,GACR,OAAQ,IAAMyiG,EAAA,GAAW,MACzB,QAAS,IAAM,KAAK,MAAM,OAAW,EAAI,CAC1C,EAAC,EAYJ,MAAMvwL,EAAU,IAAM,CACjB,CAAC1L,EAAM,OAAS,CAACA,EAAM,OACxBsD,GAAStD,CAAK,CAChB,EAGF,KAAK,eAAe,IAAIA,CAAK,EAAE,QAAS0L,CAAO,EAK/C,MAAMwwL,EAAY,KAAK,QAAQ,MAAM,cADpB,4CAC0C,EAC3Dl8L,EAAM,MAAMk8L,CAAS,EAEf,MAAAC,EAAsBD,EAAU,UAAY,SAAWA,EAAY,KAAK,QAAQ,MAAM,cAAc,KAAK,EAC/Gj3O,EAAO,oBAAsBk3O,EAE7BjlO,EAAa,KAAK,IAAM,CACtBjS,EAAO,cAAc,EACtB,CACH,EACA,WAAY,IAAM,CACb,IAACu1C,EAAO,QACT,OAGI,MAAA4hM,EAAsB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,uBAAuB,EAEzD,KAAK,WAAaA,EACb,gBAAW,UAAU,IAAI,cAAc,EAEvC,kBAAetrO,GAAO,IAAMyqO,GAAiB,CAAC,OAAQ/gM,EAAO,MAAO,GAAG,KAAK,UAAU,CAC7F,EACA,UAAW,IAAM,CAIf,MAAM0hM,EAAY,KAAK,QAAQ,MAAM,cAAc,4CAA4C,EAE3F,KAAK,aACP,KAAK,cAAc,SAGrB,KAAK,YAAY,OAAO,UAAU,IAAI,kBAAkB,EAErD1hM,EAAO,SACMrxC,GAAA,CACZ,QAAS,KAAK,WACd,UAAW,mBACX,SAAU,GACV,SAAU,IACX,EAGWA,GAAA,CACZ,QAAS+yO,EACT,UAAW,iBACX,SAAU,GACV,SAAU,IACX,EAEmBrlG,GAAA,YAAY,MAAQX,GAAW,OACrD,EACA,YAAa,KAAK,WACnB,EAED,KAAK,eAAe,IAAIW,EAAmB,EAAE,qBAAuBL,GAAS,CAC3E,GAAG,CAACA,EAAM,CACH,WAAM,OAAW,EAAI,EAC1B,MACF,CAEA,KAAK,aAAa,uBAAuBA,EAAK,KAAK,kBAAkB,EACtE,EAED,KAAK,eAAiB,OAAO,WAAW,KAAK,OAAQslG,EAAe,CACtE,CAYQ,iBAAiB5+O,EAAkB,CACtCA,GAAW,KAAK,cACjB,KAAK,YAAY,mBACd,KAAK,YAAY,OAClB,SAAS,qBAAqB,GAIlC,KAAK,aAAa,aAAaA,EAAU,GAAO,MAAS,EAC3CiM,GAAA,CACZ,QAAS,KAAK,WACd,UAAW,eACX,SAAU,CAACjM,EACX,SAAU,IACX,CACH,CAkBQ,gBAAgB8iD,EAAyBroD,EAAgB,CACzD,MAAAuS,EAAS,EAAE,KAAK,YAChBupB,EAAM,KAAK,IAAI,WAAW,mBAAmBvpB,CAAM,IAAIvS,CAAM,EAAE,EAC/D0kP,EAAWxlG,GAAoB,aAAa,KAAK,GACvD,GAAG,CAACwlG,EAAU,CACP,WAAM,OAAW,EAAI,EAC1B,MACF,CAEA,IAAI1yJ,EAAU,GACV+sD,EAAc,GACd4lG,EAAS,EAEP,MAAAC,EAAQ,IAAMryO,IAAW,KAAK,YAE9BsyO,EAAQ,IAAM,CACdD,MAIJ,aAAa,KAAK,YAAY,EAE9B1lG,GAAoB,kBAAkBH,CAAW,EAAE,KAAM+lG,GAAU,CACjE,GAAG5lG,GAAoB,aAAa,KAAK,KAAOwlG,GAAY,CAACE,IAE3D,OAMC,GAHC9oN,EAAA,QAASgpN,EAAO9yJ,EAAS+sD,CAAW,EACxCA,EAAc+lG,IAAU,QAErBA,IAAU,QAAUA,IAAU,QAAS,CACrC9yJ,IACD,KAAK,WAAW,EACbktD,GAAoB,aAAa,OAClC,KAAK,iBAAiB,EAAI,EAEzB9jG,IAEeplD,GAAA,mBAAmB,WAAW,gBAAiB,CAACkpJ,GAAoB,YAAY,KAAK,GAAI,EAAK,CAAC,GAGzGltD,EAAA,GACV,KAAK,aAAe,OAAO,WAAW6yJ,EAAO,GAAI,EACjD,MACF,CAEG3lG,GAAoB,aAAa,OAClC,KAAK,iBAAiB,EAAK,EAG7B,MAAMjgJ,EAAMulN,GAAiBtlE,GAAoB,YAAY,SAAS,EACnE72F,EAAM,aAAa,KAAK,IAAMppD,IAC/BopD,EAAM,IAAMppD,EACZopD,EAAM,KAAK,EACXsD,GAAStD,CAAK,EAChB,CACD,EAAE,MAAO1hD,GAAQ,CACbu4I,GAAoB,aAAa,KAAK,KAAOwlG,GAAY,CAACE,MAK1D,EAAED,EAAS,GACZ7oN,EAAI,MAAMn1B,CAAG,EACJqhB,GAAA,CACP,YAAa,gBACd,EACI,WAAM,OAAW,EAAI,GAE1B,KAAK,aAAe,OAAO,WAAW68N,EAAO,GAAI,EACnD,CACD,IAGGA,GACR,CAEA,MAAc,UAAU/rG,EAAU,GAAO,CACvCoG,GAAoB,UAAUpG,CAAO,EAAE,MAAM,IAAM,CACxC9wH,GAAA,CACP,YAAa,gBACd,EACF,CACH,CAEA,MAAa,MAAM,EAAgBxnB,EAAM,GAAO,CACxC,MAAAukP,EAAS,KAAK,aAAa,MAMjC,GAJA,aAAa,KAAK,YAAY,EAC9B,aAAa,KAAK,cAAc,EAChC,EAAE,KAAK,YAEJ,KAAK,YACF,IACF,MAAMC,EAAe,MAAMrD,GAAa,KAAK,YAAY,KAAK,EAC3DyC,GAAmB,iBAChB,oBAAgBA,GAAmB,eAAe,EAErCA,GAAA,gBAAkB,IAAI,gBAAgBY,CAAY,EACrEZ,GAAmB,eAAiB,KAAK,YAChC,CAAC,CAGd,MAAM,MAAM,CAAC,EACbA,GAAmB,eAAiB,OAEjCllG,GAAoB,aACrB,KAAK,UAAU1+I,CAAG,EAGpB,KAAK,eAAe,YACjBukP,GACD,SAAS,qBAAqB,CAElC,CAEA,OAAc,eAAevkP,EAAM,GAAO,CACpC4jP,GAAmB,gBAEpBA,GAAmB,eAAe,aAAa,OAChD,SAAS,qBAAqB,CAElC,CAEA,aAAoB,YAAYpoP,EAAgB,CACxC,MAAA4gC,EAAO5mC,GAAgB,QAAQgG,CAAM,EAC3C,OAAI9G,GAAuB0nC,CAAI,EAAE,CAAC,EAIzB6nL,GAAgBzoN,EAAO,SAAS,EAAI,CAAC,GAH3B,MAAMvG,EAAU,SAAS,kBAAkB,YAAYuG,CAAM,GAC7D,iBAA2D,IAIhF,CACF,EA9ZEooP,GAAO,eAAyBnoP,GAF3B,IAAMgpP,GAANb,GClBP,MAAqBc,EAAuB,CAI1C,YAAoB93N,EAA+B+3N,EAA2B,CAA1D,cAAA/3N,EAA+B,kBAAA+3N,EAC5C,qBAAkB,IAAIlvP,GAAK,YAAY,CAC1C,IAAK,8BACN,EAED,KAAK,gBAAgB,QAAQ,UAAU,IAAI,kBAAkB,EACxD,qBAAkB8D,EAAK,uBAAuB,CACrD,CAEO,QAAS,CACT,qBAAgB,QAAQ,SAC7B,KAAK,gBAAgB,QACvB,CAEO,OAAOw1E,EAA4B,CACxC,IAAI/jE,EAAkBnE,EACnBkoE,EAAS,QAAUgvE,GAAW,QACzB/yI,EAAA,+BAEAA,EAAA,gBACNnE,EAAO,CAAC+wB,GAAkCm3C,EAAS,KAAK,kBAAkB,CAAC,GAGvE,MAAC,gBAAAsmK,CAAmB,OAC1BA,EAAgB,iBAAiB,CAC/B,IAAArqO,EACA,KAAAnE,CAAA,CACD,EAEG,KAAK,gBAAgB,QAAQ,eAC/B,KAAK,SAAS,OAAO,KAAK,gBAAgB,OAAO,EAG/C,KAAK,gBAAgB,eAClB,kBAAa,OAAO,KAAK,eAAe,CAEjD,CACF,CCfA,SAAS+9O,GAA6BhkP,EAAmB4rM,EAAkB,CACzE,OAAO5rM,EAAO,CACZ,KAAK83O,GAAW,QAChB,KAAKA,GAAW,OACd,OAAO1gG,GAAiB,OAC1B,KAAK0gG,GAAW,UACP,OAAAlsC,EAAUx0D,GAAiB,MAAQA,GAAiB,QAC7D,QACE,OAAOA,GAAiB,UAC5B,CACF,CAEA,SAAS6sG,GAA6BjkP,EAAmB,CACvD,OAAOA,EAAO,CACZ,KAAKm9I,GAAW,OACd,OAAO/F,GAAiB,OAC1B,KAAK+F,GAAW,WAChB,KAAKA,GAAW,UACd,OAAO/F,GAAiB,WAC1B,QACE,OAAOA,GAAiB,cAC5B,CACF,CAEA,MAAMv2G,GAAa,cAEnB,MAAqBqjN,EAAW,CAkB9B,YACU1vP,EACR,CADQ,cAAAA,EA6CV,KAAQ,QAAU,IAAM,CACjB,oBAAe,KAAK,QAAQ,GA5CjC,MAAM40B,EAAiB,KAAK,eAAiB,IAAImD,GAEjDnD,EAAe,IAAIiyN,EAAe,EAAE,WAAY,CAAC,CAAC,SAAAltK,KAAc,CAC1D,KAAK,UACP,KAAK,eAAeA,CAAQ,CAC9B,CACD,EAED/kD,EAAe,IAAIiyN,EAAe,EAAE,YAAcltK,GAAa,CAC1D,KAAK,WAAaA,GACnB,KAAK,eAAeA,CAAQ,CAC9B,CACD,EAED/kD,EAAe,IAAI4vH,EAAoB,EAAE,WAAa7qE,GAAa,CACjE,KAAK,eAAeA,CAAQ,EAC7B,EAED/kD,EAAe,IAAI/0B,CAAS,EAAE,oBAAsBqiJ,GAAc,CAChE,MAAMvoE,EAAW6qE,GAAqB,UACnC7qE,GAAU,KAAOuoE,EAAU,IAC5B,KAAK,eAAevoE,CAAQ,CAC9B,CACD,EAED/kD,EAAe,IAAI00H,EAAmB,EAAE,qBAAuBL,GAAS,CACtE,KAAK,eAAeA,CAAI,EACzB,EAEcr0H,EAAA,IAAI2mH,GAAc,iBAAiB,EAAE,YAAa,CAAC,CAAC,WAAAd,EAAY,KAAAx2H,KAAU,CACjF,MAAC,MAAA0rO,CAAS,OACb,IAACl1G,EAAW,QAAU,CAACk1G,EAAiC,OAE3D,IAAIzzM,EAAM,EACV,QAAQ54C,EAAI,EAAGA,EAAIm3I,EAAW,OAAQ,EAAEn3I,EAAG,CACzC,KAAM,CAAC,KAAA2gB,EAAM,MAAApN,CAAK,EAAI4jI,EAAWn3I,CAAC,EAC5B44C,EAAArlC,EAAQqlC,EAAMrlC,EAAQqlC,CAC9B,CAEAyzM,EAAM,aAAazzM,CAAG,EACvB,CACH,CAMQ,sBAAuB,CACzB,KAAK,WACT,KAAK,OAAO,kBAET,KAAK,qBACN,KAAK,mBAAmB,SACxB,KAAK,mBAAqB,QAG5B,KAAK,SAAW,OAChB,KAAK,uBAAuB,YAC9B,CAEQ,eAAey9B,EAAkC,CACpD,KAAK,YACN,KAAK,UAAU,EACf,KAAK,UAAY,QAGnB,MAAM9gE,EAA0B,CAC9B,CAAC,aAAciqI,EAAiB,EAChC,CAAC,OAAQyjG,EAAY,EACrB,CAAC,OAAQ19F,EAAgB,GAGrB+mG,EAAqB,KAAK,WAAaj2K,EAC1Ci2K,IACD,KAAK,qBAAqB,EAE1B,KAAK,SAAWj2K,EACX,4BAAyB,IAAI5hD,GAE/B4hD,IACD,KAAK,uBAAuB,IAAIA,CAA6B,EAAE,QAAS,KAAK,OAAO,EAEjFA,aAAoBmpE,GACrB,KAAK,mBAAqB,KAAK,qBACvBnpE,aAAoB4sK,IAC5B,KAAK,mBAAqB,KAAK,gBAC/B,KAAK,uBAAuB,IAAI5sK,CAAQ,EAAE,QAAS,KAAK,OAAO,GACvDA,aAAoBkvE,KAC5B,KAAK,mBAAqB,KAAK,iBAGjChwI,EAAE,QAAQ,CAAC,CAACgD,EAAWg0O,CAAM,IAAM,CACjC,MAAMnmP,EAAOiwE,aAAoBk2K,EACjC,KAAK,UAAU,UAAU,OAAO,MAAMh0O,CAAS,GAAInS,CAAI,EAEpDA,GACD,SAAS,gBAAgB,MAAM,YAAY,uBAAwB,qBAAqBmS,CAAS,UAAU,CAC7G,CACD,IAIL,MAAMu7L,EAAUz9H,aAAoBkvE,GAAmB,OAAY,CAAClvE,GAAa,KAAK,SAA+B,QACjH,IAAAnuE,EACAmuE,EACIA,aAAoBmpE,GAAmBt3I,EAAQmuE,EAAS,MACxDA,aAAoBkvE,GAA0Br9I,EAAAikP,GAA6B91K,EAAS,KAAK,EACpFnuE,EAAAgkP,GAA6B71K,EAAS,gBAAiBy9H,CAAO,EAH7D5rM,EAAQo3I,GAAiB,OAKjC,MAAC,MAAA+sG,CAAS,OAChBA,EAAM,kBAAkB,EAElB,MAAAG,EAAWtkP,IAAUo3I,GAAiB,QACxC,CAAC,SAAS,KAAK,UAAU,SAAS,YAAY,GAAKgtG,GAAuBE,KACzEA,GACDH,EAAM,aAAa,CAAC,EAGR/zO,GAAA,CACZ,QAAS,SAAS,KAClB,UAAW,aACX,SAAU,CAACk0O,EACX,SAAU,IACV,gBAAiBA,EAAW,IAAM,CAChCH,EAAM,qBAAqB,EAE3B,KAAK,qBAAqB,CACxB,SACL,GAGA,CAAAG,IAIGH,EAAA,gBACJh2K,aAAoBkvE,GAAmB,OAAS,QAChDlvE,aAAoBkvE,GAAmBlvE,EAAS,MAAQnuE,EACxD,IAgBF,KAAK,SAASmuE,CAAQ,EACtB,KAAK,eAAeA,CAAQ,EAC5B,KAAK,WAAW,UAAU,OAAO,OAAQy9H,IAAY,MAAS,EAC3DA,IAAY,QACR,iCAA4B,SAAS,CAACA,CAAO,EAEpD,KAAK,UAAU,UAAU,OAAO,OAAQz9H,aAAoBkvE,EAAgB,EAC9E,CAEQ,eAAelvE,EAAkC,CAChD,YAAK,mBAAmB,OAAOA,CAAe,CACvD,CAEQ,SAASA,EAAkC,CACjD,GAAGA,aAAoBkvE,GACN5xI,GAAA,KAAK,OAAQ,IAAIN,GAAU,CAAC,OAAQgjE,EAAS,OAAO,EAAE,OAAO,MAC9E,IAAUA,aAAoBmpE,GACrB,YAAK,eAAe,OAAOnpE,CAAQ,EAE1C1iE,GAAe,KAAK,OAAQ,IAAIN,GAAU,CAAC,OAAQgjE,EAAS,mBAAmB,SAAS,EAAE,EAAE,OAAO,EAEvG,CAEQ,WAAY,CACZ,MAAC,eAAA/kD,CAAkB,OACnBlzB,EAAY,KAAK,UAAY,SAAS,cAAc,KAAK,EAC/DA,EAAU,UAAU,IAAI,iBAAkB2qC,GAAa,YAAY,EAE7D,MAAAzV,EAAO,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIyV,GAAa,OAAO,EAEvC,MAAM0jN,EAA8B,KAAK,4BAA8B,IAAItM,GAErE9/F,EAAO,KAAK,WAAaxiH,GAAW,EACrCwiH,EAAA,OAAOosG,EAA4B,SAAS,EACjDn5N,EAAK,OAAO+sH,CAAI,EAEV,MAAAqsG,EAAqBnuL,GAAS,IAAM,CACvC,KAAK,SAA8C,aAAY,EAC/D,IAAK,EAAI,EAEKplD,EAAAknI,EAAOx3I,GAAM,CAC5BqQ,GAAYrQ,CAAC,EACM6jP,GAAA,EAClB,CAAC,eAAAp7N,CAAA,CAAe,EAEnB,MAAMq7N,EAAS,KAAK,OAAS,SAAS,cAAc,KAAK,EAClDA,EAAA,UAAU,IAAI5jN,GAAa,SAAS,EAEtC,oBAAiB,IAAI6zM,GAAsB+P,CAAM,EACjD,0BAAuB,IAAIjQ,GAA4BppN,CAAI,EAE3D,qBAAkB,IAAI4sN,GAAuB5sN,CAAI,EAEtD,KAAK,gBAAkB,IAAI04N,GAAuBW,EAAQr5N,CAAI,EAExD,MAAAoE,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAIqR,GAAa,QAAQ,EAEzC,MAAMzhC,EAAM,KAAK,UAAYu2B,GAAW,gBAAgB,EACxDnG,EAAM,OAAOpwB,CAAG,EAEC6R,EAAA7R,EAAMuB,GAAM,CAC3BqQ,GAAYrQ,CAAC,EAEP,MAAC,SAAAwtE,CAAY,OACfA,IAIDA,aAAoBkvE,GACrBS,GAAoB,UAAU,EACtB3vE,aAAoBmpE,GAC5BnpE,EAAS,OAAO,EAEhBA,EAAS,OAAO,8BAA8B,EAChD,EACC,CAAC,eAAA/kD,CAAA,CAAe,EAEnBnY,EAAiB/a,EAAW,IAAM,CAC7B,QAAK,oBAAoBmnJ,GAC1BwmG,GAAmB,eAAe,UAC1B,KAAK,oBAAoBvsG,GAAmB,CACpD,GAAGpzH,GAAa,UAAUowN,EAAc,EAAE,OACxC,OAGWpwN,GAAA,YAAYowN,EAAc,EAAE,KAAK,UACtC,KAAK,oBAAoByG,GAAc,CAE5C,GADY72N,GAAa,UAAUk0N,EAAS,EACrC,KAAMx3M,GAAUA,EAAM,gBAAgB,IAAM,KAAK,QAAQ,EACjE,OAGF1c,GAAa,YAAYk0N,GAAW,KAAK,QAAQ,EAAE,MACrD,GACC,CAAC,eAAAhvN,CAAA,CAAe,EAETlzB,EAAA,OAAOk1B,EAAMq5N,EAAQj1N,CAAK,EAEpC,MAAM20N,EAAQ,KAAK,MAAQ,IAAIhT,GACzBuT,EAAiBP,EAAM,OAAOtjN,GAAa,QAAQ,EACzD3qC,EAAU,QAAQwuP,CAAc,EAEhC,SAAS,eAAe,eAAe,EAAE,QAAQxuP,CAAS,EAC1DiuP,EAAM,kBAAkB,CAC1B,CACF,CCzVO,MAAMQ,GAAyB,qCACzBC,GAA0B,4BC8DhC,MAAMC,EAAuB,CAA7B,cAEL,KAAQ,mBAA6D,GACrE,KAAQ,kBAAoB,EAC5B,KAAQ,mBAAqB,EAC7B,KAAQ,aAAwC,GAChD,KAAQ,eAAiBC,GAIzB,KAAQ,gBAAkB,MAAM,KAAK,SAAS,KAAK,iBAAkC,8CAA8C,CAAC,EAEpI,KAAQ,YAAc,SAAS,MAC/B,KAAQ,aAAe,GAMvB,KAAQ,QAAU,GAIlB,KAAQ,SAAiC,GAGzC,KAAQ,WAAa,GAohBrB,KAAO,oBAAsB,IAAM,CAEjC,MAAMrkP,EADO,CAAC,mBAAoB,gBAAiB,mBAAoB,mBAAoB,eAAe,EACpF,IAAI,IAAM,EAAS,EAEzC,QAAQ,IAAIA,CAAQ,EACnB,KAAMskP,GAAgB,CAOrB,GANK,cAAS,UAAYA,EAAY,CAAC,EAClC,cAAS,OAASA,EAAY,CAAC,IAAM,OAAY,GAAMA,EAAY,CAAC,EACpE,cAAS,UAAYA,EAAY,CAAC,EAClC,cAAS,UAAYA,EAAY,CAAC,EAClC,cAAS,OAASA,EAAY,CAAC,EAEjC,KAAK,WAAY,CACZ,MAAAC,EAAW,CAAC,KAAK,SAAS,QAAU,CAAC,KAAK,SAAS,WAAaC,GAAkB,aAAe,GACjGC,EAAU,KAAK,mBAAqB,GACvCF,IAAaE,IACXF,EACDC,GAAkB,UAAU,EAE5BA,GAAkB,YAAY,EAGpC,CAEkBA,GAAA,YAAY,KAAK,QAAQ,EAC5C,EAEDrwP,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACzC,KAAK,SAAS,QAAU,CAACA,EAAM,SAAS,cAAc,MACvD,GAkBH,KAAQ,kBAAoB,IAAM,CAChC,aAAa,kBAAkB,EACxB,2BAAoB,QAAS,KAAK,iBAAiB,GAkD5D,KAAO,MAAQ,IAAM,CACd,SAAI,KAAK,OAAO,EAEX,UAAAlI,KAAK,KAAK,mBAAoB,CAChC,MAAAqtP,EAAe,KAAK,mBAAmBrtP,CAAC,EAC9C,KAAK,kBAAkBqtP,CAAY,CACrC,CAEA,KAAK,mBAAqB,GAC1B,KAAK,mBAAqB,EAE1BF,GAAkB,sBAAsB,EAC1C,CAtnBA,UAAUzwP,EAAuB,CAC/B,KAAK,SAAWA,EAEX,SAAMwgC,GAAO,eAAe,EAC5B,wBAAqB,IAAIywL,GAAkB,CAAC,EAEjD,UAAU,QAAU,UAAU,SAAY,UAAkB,YAAe,UAAkB,cAC7F,KAAK,YAAe,UAAkB,aAAa,KAAK,SAAS,EACjE,KAAK,cAAc,CAAC,EAEf,4BAA0B,iBAAkB,QAAY,oBAAqB,UAE7E,mBAAgB,SAAS,cAAc,KAAK,EACjD,KAAK,cAAc,GAAK,eACf,cAAK,OAAO,KAAK,aAAa,EAEvC,KAAK,oBAAsB3kN,KAEZuzB,GAAA,iBAAiB,cAAe,IAAM,CACnD,KAAK,KAAK,EACX,EAEcA,GAAA,iBAAiB,YAAa,IAAM,CAC9C,KAAK,SACN,KAAK,MAAM,CACb,CACD,EAEcg9F,GAAA,iBAAiB,SAAWynD,GAAS,CAC/C,KAAK,UAIJA,GACF,KAAK,MAAM,EAGb,KAAK,cAAc,GACpB,EAESzkL,EAAA,iBAAiB,qBAAuB+wP,GAAe,CAC/D,KAAK,WAAWA,CAAU,EAC3B,EAES/wP,EAAA,iBAAiB,sBAAwBV,GAAQ,CACzD,KAAK,OAAOA,CAAG,EAChB,EAEE,KAAK,aACIU,EAAA,iBAAiB,gBAAkB6wJ,GAAW,CACnDA,EAAO,KAAO,GACV,iBAAYA,EAAO,qBAAqB,IAAI,CACnD,CACD,EAGe+/F,GAAA,iBAAiB,YAAcI,GAAc,CAC7D,KAAK,WAAa,GACf,CAAC,KAAK,SAAS,WAAa,CAAC,KAAK,SAAS,OACzCA,EACD,KAAK,eAAeA,CAAS,EAE7BJ,GAAkB,UAAU,EAG9B,KAAK,iBAAiBI,CAAS,CACjC,CACD,EACiBJ,GAAA,iBAAiB,iBAAmBI,GAAc,CAClE,KAAK,eAAeA,CAAS,EAC9B,EACiBJ,GAAA,iBAAiB,mBAAqBI,GAAc,CACpE,KAAK,iBAAiBA,CAAS,EAChC,EAEShxP,EAAA,iBAAiB,sBAAuB,IAAM,CAEtD,KAAK,oBAAoB,SAAQ,EAChC,CAAC,KAAM,GAAK,EAEG4wP,GAAA,iBAAiB,0BAA4BK,GAAqB,CAC/E,GAAAA,EAAiB,SAAW,gBAS7B,OAGC,GAAAA,EAAiB,SAAW,SAAU,CAClC,cAAS,WAAW,UAAU,6BAA8B,CAC/D,OAAQ,MACT,EAAE,KAAK,IAAM,EAUb,EAED,MACF,CAEA,MAAMlxP,EAASkxP,EAAiB,QAAUA,EAAiB,OAAO,OAAO,WACjE,YAAI,QAASA,EAAkBlxP,CAAM,EACzCA,GAIC,yBAAoB,KAAK,SAAW,CACvC,MAAMwG,EAASxG,EAAO,YAAcA,EAAO,WAAa,OACpD,IAAA8sC,EACJ,GAAGtmC,EAAQ,CACT,GAAG,CAAE,MAAM,KAAK,SAAS,gBAAgB,QAAQA,CAAM,EACrD,OAGFsmC,EAAY,MAAM,KAAK,SAAS,gBAAgB,UAAUtmC,CAAM,EAAIA,EAAS,MAC/E,CAEG,CAACA,GAAU,CAAE,MAAM,KAAK,SAAS,gBAAgB,QAAQxG,EAAO,SAAS,CAAC,GAI7EokC,GAAa,aAAa,CACxB,OAAApkC,EACA,UAAW,MAAM,KAAK,SAAS,sBAAsB,kBAAkB,CAACkxP,EAAiB,OAAO,OAAQpkN,CAAS,EAClH,EACF,EACF,CACH,CAEA,MAAa,uBAAuB/sC,EAAqE,CACvG,KAAK,mBAAmB,KAAK,CAC3B,KAAM,IAAM,KAAK,kBAAkBA,CAAO,EAC3C,CACH,CAEA,MAAa,kBAAkB,CAC7B,QAAAuJ,EACA,SAAA6nP,EACA,aAAAC,EACA,uBAAAC,CAAA,EAMC,CACD,MAAMrxP,EAASsJ,EAAQ,OACjBmoJ,EAAYzxJ,EAAO,YACnB+wP,EAA8B,GAC9B,CAACC,EAAYz5O,EAAU,GAAO5X,CAAI,EAAI,MAAM,QAAQ,IAAI,CAC5D,KAAK,SAAS,gBAAgB,cAAcK,CAAM,EAClDyxJ,GAAa,KAAK,SAAS,gBAAgB,QAAQzxJ,CAAM,EACzDQ,GAAgB,QAAQR,CAAM,EAC/B,EACG,IAAAsxP,EACAC,EAAiB,GAErB,GAAGF,EAAuB,cACxB,GAAG/nP,EAAQ,IAAM,WAAaA,EAAQ,UAAY6nP,EAAW,EAC3DG,EAAsB7wP,GAAK,OAAO,0BAA2B,GAAM,CAAC0wP,CAAQ,CAAC,MACxE,CACLG,EAAsB,MAAMlgP,GAAoB,CAAC,QAAA9H,EAAS,MAAO,GAAK,EAEtE,MAAM41C,EAAWkyM,GAAc,SAC5B,GAAAlyM,GAAYA,EAAS,IAAM,gBAAiB,CAC7C,IAAIE,EAAYF,EAAoC,SAChDE,IAEFA,GADY,MAAM,KAAK,SAAS,gBAAgB,uBAAwBF,EAA0C,WAAW,GAC9G,iBAGX,MAAApsC,EAA4E,+BAC5EjB,EAA2B,CAC/BjH,GAASw0C,CAAQ,EACjBkyM,CAAA,EAOFA,EAAsB7wP,GAAK,OAAOqS,EAAa,GAAMjB,CAAI,OAExC0/O,EAAA,EAErB,MAEsBD,EAAA7wP,GAAK,OAAO,oBAAqB,EAAI,EAG1D2wP,IACDL,EAAa,YAAc,GAC3BA,EAAa,OAAS,IAGxB,MAAM3sD,EAAsE,CAC1E,UAAW,GACX,SAAU,KAAK,UAGX/jM,EAAWkX,EAAUqkE,GAAmBtyE,EAASiO,CAAO,EAAI,OAC5Di6O,EAAyBJ,EAAe/qP,GAAU+qP,EAAa,OAAO,EAAI9nP,EAAQ,OAClF0O,EAAY+4O,EAAa,MAAQ,MAAMjxP,GAAa,CAAC,GAAGskM,EAAkB,OAAApkM,EAAQ,SAAAK,CAAA,CAAmB,EAC3G,GAAGkX,EAAS,CACV,MAAMS,EAAY,MAAMlY,GAAa,CAAC,GAAGskM,EAAkB,OAAApkM,EAAO,EACrD+wP,EAAA,OAAS,KAAK/4O,CAAS,IAEjCu5O,GAAkBC,IAA2BloP,EAAQ,SAChCgoP,EAAA,MAAMxxP,GAAa,CAAC,GAAGskM,EAAkB,OAAQotD,CAAuB,GAC5F,KAAOF,EAEH,MAAA7/F,GAAa+/F,IAA2BloP,EAAQ,SAC3CynP,EAAA,MAAQ,MAAMjxP,GAAa,CAAC,GAAGskM,EAAkB,OAAQotD,EAAuB,EAC3F,MACAT,EAAa,OAGJA,EAAA,MAAQnqP,GAAcmqP,EAAa,KAAK,EAErDA,EAAa,QAAU,IAAM,CAC3B3sN,GAAa,aAAa,CAAC,OAAApkC,EAAQ,UAAWsJ,EAAQ,IAAK,SAAAjJ,EAAS,GAGtE0wP,EAAa,QAAUO,EACVP,EAAA,IAAM,MAAQznP,EAAQ,IACnCynP,EAAa,IAAMC,EACnBD,EAAa,OAAS,GAEtB,MAAMU,EAAY,MAAM,KAAK,SAAS,gBAAgB,aAAazxP,CAAM,EACzE,GAAGyxP,EAAW,CACN,MAAAhoP,EAAM,MAAM,KAAK,SAAS,kBAAkB,WAAWzJ,EAAQyxP,EAAW,aAAa,EAE7F,GAAG,CAACL,IACQ9nP,EAAA,MAAM,KAAK,SAAS,mBAAmB,iBAAiBA,EAAQ,OAAQA,EAAQ,GAAG,EAC1F,CAACA,GAAW,CAACA,EAAQ,OAAO,QAAQ,OAGzCynP,EAAa,MAAQtnP,CAAA,KAChB,CACD,IAAC,aAAAioP,EAAc,cAAAC,CAAiB,OACjC,GAAC,KAAK,aAWPA,EAAc,UAAU,EAAG,EAAGD,EAAa,MAAOA,EAAa,MAAM,MAXhD,CACrBA,EAAe,KAAK,aAAe,SAAS,cAAc,QAAQ,EAClEC,EAAgB,KAAK,cAAgBD,EAAa,WAAW,IAAI,EAEjE,MAAME,EAAO,GACP7sO,EAAM,EACZ2sO,EAAa,IAAM3sO,EACN2sO,EAAA,MAAQA,EAAa,OAASE,EAAO7sO,EAElD,KAAK,gBAAkB,EAAC,CAKpB,MAAA9c,EAAQoQ,GAAyB1Y,CAAI,EACvC,IAAAoa,EAAW,KAAK,gBAAgB9R,CAAK,EACzC,GAAG,CAAC8R,EAAU,CACZA,EAAW,KAAK,gBAAgB9R,CAAK,EAAI0pP,EAAc,qBAAqBD,EAAa,MAAQ,EAAG,EAAGA,EAAa,MAAQ,EAAGA,EAAa,MAAM,EAElJ,MAAMG,EAAW3sO,GAAiB,YAAY,eAAejd,CAAK,MAAM,EAClE6pP,EAAc5sO,GAAiB,YAAY,eAAejd,CAAK,SAAS,EACrE8R,EAAA,aAAa,EAAG83O,CAAQ,EACxB93O,EAAA,aAAa,EAAG+3O,CAAW,CACtC,CAEAH,EAAc,UAAY53O,EAEf04B,GAAAk/M,EAAeD,EAAa,MAAQ,EAAGA,EAAa,OAAS,EAAGA,EAAa,MAAQ,CAAC,EACjGC,EAAc,KAAK,EAEb,MAAAv8L,EAAW,GAAKs8L,EAAa,IAC7BK,EAAezqP,GAAgB0Q,CAAS,EAE9C25O,EAAc,KAAO,OAAOv8L,CAAQ,MAAMG,EAAU,GACpDo8L,EAAc,aAAe,SAC7BA,EAAc,UAAY,SAC1BA,EAAc,UAAY,QAC1BA,EAAc,SAASI,EAAa,KAAML,EAAa,MAAQ,EAAGA,EAAa,QAAU,OAAO,iBAAmB,EAAY,MAAW,EAE7HX,EAAA,MAAQW,EAAa,WACpC,CAEA,MAAMM,EAAmC,CACvC,OAAQ,CACN,OAAQ,GAAK1oP,EAAQ,IACrB,OAAQ,GAAKtJ,CACf,EACA,YAAa,GACb,QAAS,GACT,SAAU,CAAC,EACX,KAAM,GACN,UAAW,EACX,MAAO,IAGM,MAAM,KAAK,OAAO+wP,EAAciB,CAAQ,GAC1C,KAAK,kBACEnB,GAAA,gBAAgB7wP,EAAQsJ,EAAQ,GAAG,CAEzD,CAEQ,cAAcwtE,EAASmmD,GAAe,OAAQ,CACjD,GAAAzoG,GAAW,OAER,MAAAy9N,EAAcC,GAAsB,CACxC,KAAK,aAAe,GACpB,SAAS,MAAQ,KAAK,YACtB,KAAK,WAAW,GAGX,qBAAc,KAAK,aAAa,EACvC,KAAK,cAAgB,EAEjBp7K,EAGG,mBAAgB,OAAO,YAAY,IAAM,CAC5C,MAAM33C,EAAQ,KAAK,mBACnB,GAAG,CAACA,EACF,KAAK,cAAc,EAAK,UAChB,KAAK,aACb8yN,EAAe,MACV,CACL,KAAK,aAAe,GACpB,SAAS,MAAQxxP,GAAK,OAAO,sBAAuB,GAAM,CAAC0+B,CAAK,CAAC,EAS3D,MAAAnX,EAAS,SAAS,cAAc,QAAQ,EACvCA,EAAA,MAAQ,GAAK,OAAO,iBAC3BA,EAAO,OAASA,EAAO,MAEjB,MAAAwhB,EAAMxhB,EAAO,WAAW,IAAI,EAClCwhB,EAAI,UAAU,EACdA,EAAI,IAAIxhB,EAAO,MAAQ,EAAGA,EAAO,OAAS,EAAGA,EAAO,MAAQ,EAAG,EAAG,EAAI,KAAK,GAAI,EAAK,EACpFwhB,EAAI,UAAY,UAChBA,EAAI,KAAK,EAET,IAAI4rB,EAAW,GACX71D,EAAM,GAAK4/B,EACZA,EAAQ,GACEi2B,EAAA,GACHj2B,EAAQ,IACLi2B,EAAA,IAEL71D,EAAA,MACK61D,EAAA,IAGbA,GAAY,OAAO,iBAEnB5rB,EAAI,KAAO,OAAO4rB,CAAQ,MAAMG,EAAU,GAC1C/rB,EAAI,aAAe,SACnBA,EAAI,UAAY,SAChBA,EAAI,UAAY,QAChBA,EAAI,SAASjqC,EAAKyoB,EAAO,MAAQ,EAAGA,EAAO,OAAS,KAAK,EAKpD,gBAAWA,EAAO,UAAW,EAEpC,GACC,GAAI,EAtDIiqO,GAwDf,CAEQ,WAAW7yJ,EAAe,CAC7B,KAAK,cAAgBA,IAIxB,KAAK,YAAcA,EACnB,KAAK,gBAAgB,QAAQ,CAAC5qF,EAASlR,EAAKsG,IAAQ,OAC5C,MAAAulC,EAAO36B,EAAQ,aAEhB4C,EAAA+3B,EAAA,SAAQ,OAAR/3B,EAAQ,KAAS+3B,EAAK,MAE3BiwD,MAASjwD,EAAK,QAAQ,MACtBA,EAAK,KAAOiwD,EACZ5qF,EAAQ,YAAY5K,EAAItG,CAAG,EAAI6rC,CAAI,EACpC,EACH,CAEA,MAAa,OAAOprB,EAAqBiuO,EAAkC,CAGzE,GAFK,SAAI,SAAUjuO,EAAMk5G,GAAe,OAAQ,KAAK,uBAAwB,KAAK,OAAO,EAEtF,KAAK,QACN,OAGFl5G,EAAK,QAALA,EAAK,MAAUwsO,IAEXxsO,EAAK,aACP,EAAE,KAAK,mBAGL,KAAK,eACP,KAAK,cAAc,EAGf,MAAAzgB,EAAM,EAAE,KAAK,kBACb0S,EAAM+N,EAAK,KAAO,IAAMzgB,EACzB,wBAAmB0S,CAAG,EAAI,GAE/B,MAAMsqB,EAAM1F,KAYZ,GAXG,KAAK,SAAS,OAAS,GAAK,CAAC,KAAK,SAAS,UAOvC,eAAU,KAAK,SAAS,MAAM,EAC9B,kBAAa7W,EAAK,GAAG,EAAIuc,GAG7B,CAAC,KAAK,wBACP,iBAAkB,QAAU,aAAa,aAAe,UACxD,OAGC,QAAK,SAAS,UAAW,CAC1B,GAAG,KAAK,gBAAkB,CAAC,KAAK,SAAS,UAAW,CAClD,UAAU,QAAQ,CAAC,IAAK,IAAK,GAAG,CAAC,EACjC,MACF,CAEA,MACF,CAEG,KAAE,iBAAkB,QACrB,OAGE,IAAAywN,EAEJ,MAAMoB,EAA2C,CAC/C,MAAO3B,GACP,KAAMzsO,EAAK,OAAS,GACpB,KAAMA,EAAK,SAAW,GACtB,IAAKA,EAAK,KAAO,GACjB,OAAQA,EAAK,QAAU,GACvB,KAAMiuO,CAAA,EAGJ,IACF,GAAGjuO,EAAK,IACI,UAAArgB,KAAK,KAAK,mBAAoB,CAChCqtP,QAAe,KAAK,mBAAmBrtP,CAAC,EAC3C,OAAOqtP,GAAkB,WAAaA,EAAa,MAAQhtO,EAAK,MACjEgtO,EAAa,OAAS,GAE1B,CAIFA,EAAe,IAAI,aAAahtO,EAAK,MAAOouO,CAAmB,OACtD,CACL,IACI,MAAAC,EAAe,MAAM,UAAU,cAAc,MACnD,MAAMA,EAAa,iBAAiBruO,EAAK,MAAOouO,CAAmB,EAC7D,MAAAE,EAAgB,MAAMD,EAAa,iBAAiB,CAAC,IAAKD,EAAoB,IAAI,EACzEpB,EAAAsB,EAAcA,EAAc,OAAS,CAAC,QAC/ClhP,EAAK,CACX,KAAK,IAAI,MAAM,sBAAuBA,EAAK4S,EAAMouO,CAAmB,CACtE,CAEA,GAAG,CAACpB,EAAc,CAChB,KAAK,uBAAyB,GAC9BF,GAAkB,8BAA8B,EAChD,MACF,CACF,CAEA,OAAAE,EAAa,QAAU,IAAM,CAC3B,KAAK,IAAI,sBAAsB,EAC/BA,EAAa,MAAM,EACnBuB,GAAkB,MAAM,EACxB,KAAK,MAAM,EACXvuO,EAAK,UAAU,GAGjBgtO,EAAa,QAAU,IAAM,CAC3B,KAAK,IAAI,sBAAsB,EAC3BA,EAAa,SACR,YAAK,mBAAmB/6O,CAAG,EAClC,KAAK,MAAM,EACb,EAGF+6O,EAAa,OAAO,EACf,wBAAmB/6O,CAAG,EAAI+6O,EAE3Bv8N,IACF,WAAW,IAAM,CACf,KAAK,KAAKxe,CAAG,GACZ,GAAI,EAGF,EACT,CAkCO,kBAAmB,CACxB,OAAO,KAAK,QACd,CAEQ,KAAKA,EAAa,CAClB,MAAA+6O,EAAe,KAAK,mBAAmB/6O,CAAG,EAC7C+6O,GACD,KAAK,kBAAkBA,CAAY,CAEvC,CAEO,WAAW3jK,EAAa,CACtB,YAAK,aAAaA,CAAG,CAC9B,CAOO,UAAUl6B,EAAgB,CAC/B,MAAM5yB,EAAM1F,KACZ,GAAG,KAAK,aAAe0F,EAAM,KAAK,aAAe,KAAK,kBAAoB4yB,EACxE,OAGF,KAAK,YAAc5yB,EAAM,IACzB,KAAK,gBAAkB4yB,EACvB,MAAMq/L,EAAW,gCACXt5L,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,SAAW,GACXA,EAAA,aAAa,kBAAmB,cAAc,EACpDA,EAAM,OAAS/F,EACf+F,EAAM,UAAY;AAAA,qBACDs5L,CAAQ;AAAA,mEACsCr/L,EAAS,GAAG,UAAUq/L,CAAQ;AAAA,MAExF,mBAAc,OAAOt5L,CAAK,EAEzBA,EAAA,iBAAiB,QAAS,IAAM,CACpCA,EAAM,OAAO,GACZ,CAAC,KAAM,GAAK,CACjB,CAEO,OAAOjjD,EAAa,CACnB,MAAA+6O,EAAe,KAAK,mBAAmB/6O,CAAG,EAC3C,SAAI,SAAUA,EAAK+6O,CAAY,EACjCA,IACE,KAAK,mBAAqB,GAC3B,EAAE,KAAK,mBAGT,KAAK,kBAAkBA,CAAY,EAC5B,YAAK,mBAAmB/6O,CAAG,EAEtC,CAEQ,kBAAkB+6O,EAAwC,CAC5D,IACC,OAAOA,GAAkB,WAAaA,EAAa,QAC/C,SAAI,qBAAsBA,CAAY,EAC3CA,EAAa,OAAS,GACtBA,EAAa,MAAM,QAEZ,CAAC,CACd,CAgBO,OAAQ,CAcV,GAbH,KAAK,IAAI,OAAO,EAChB,KAAK,QAAU,GAEf,KAAK,oBAAoB,EACf9wP,EAAA,iBAAiB,mBAAoB,KAAK,mBAAmB,EACvEO,GAAgB,SAAS,EAAE,KAAMoL,GAAU,CACtC,KAAK,SAAW,CAACA,EAAM,YAI1BilP,GAAkB,MAAM,EACzB,EAEE,CAAC,KAAK,uBACA,SAGN,iBAAkB,QAAU,aAAa,aAAe,WAAa,aAAa,aAAe,UAC3F,wBAAiB,QAAS,KAAK,iBAAiB,EAGrD,IACC,mBAAoB,QACd,wBAAiB,eAAgB,KAAK,KAAK,OAE3C,CAAC,CACd,CAEQ,MAAO,CACb,KAAK,IAAI,MAAM,EAEf,KAAK,MAAM,EACJ,qBAAc,KAAK,aAAa,EACvC,KAAK,cAAgB,EACrB,KAAK,WAAW,EAChB,KAAK,QAAU,EACjB,CAEQ,eAAeI,EAAmC,CACxD,GAAG,KAAK,kBAAoB/2M,GAAU,KAAK,iBAAkB+2M,CAAS,EAC7D,SAGJ,cAAS,WAAW,UAAU,yBAA0B,CAC3D,WAAYA,EAAU,UACtB,MAAOA,EAAU,WACjB,WAAY,CAAC,EACb,YAAa,GACb,OAAQ,IAAI,UAAW,CACxB,EAAE,KAAK,IAAM,CACZ,KAAK,IAAI,mBAAmB,EAC5B,KAAK,iBAAmBA,CAC1B,EAAI/rN,GAAU,CACZA,EAAM,QAAU,GACjB,CACH,CAEQ,iBAAiB+rN,EAAmC,CACvD,IAAC,KAAK,iBACA,SAGJ,cAAS,WAAW,UAAU,2BAA4B,CAC7D,WAAYA,EAAU,UACtB,MAAOA,EAAU,WACjB,WAAY,CAAC,EACd,EAAE,KAAK,IAAM,CACZ,KAAK,iBAAmB,EAC1B,EAAI/rN,GAAU,CACZA,EAAM,QAAU,GACjB,CACH,CACF,CAEA,MAAMstN,GAAyB,IAAI/B,GACnC3qM,KAAmBA,GAAe,uBAAyB0sM,IC1yB7B,eAAAC,GAAkBlmP,EAA+BmmP,EAAY,GAAuB,CAChH,MAAMj6E,EAAe,GAEfk6E,EAAY,MAAMlkP,EAAYzE,IAA2B,CAC7D,GAAGyE,EAAM,YAAa,CACd,MAAAmkP,EAAkBnkP,EAAM,eAC9B,MAAM,IAAI,QAAc,CAACiW,EAASwkB,IAAW,CAC3B0pN,EAAA,YAAY,MAAMxiM,GAAiB,CACjD,UAAU3hD,KAAS2hD,EACX,MAAAuiM,EAAUlkP,EAAOzE,CAAI,EAGrB0a,GAAA,CACT,EACF,UACOjW,EACR,GAAGikP,EACKj6E,EAAA,KAAKhqK,EAAM,IAAI,MAChB,CACC,MAAAokP,EAAW7oP,EAAK,YAChB4uK,EAAOnqK,aAAiB,KAC5BA,EAEEA,aAAiB,iBACfA,EAAM,UAAU,EAChB,MAAM,IAAI,QAAQ,CAACiW,EAASwkB,IAAWz6B,EAAM,KAAKiW,EAAUvT,GAAauT,EAAQmuO,CAAQ,CAAC,CAAC,EAOjG,GAAG,CAACj6E,EAAM,OACVH,EAAM,KAAKG,CAAI,CACjB,CACF,EAGC,GAAArsK,aAAa,WAAaA,EAAE,aAAa,OAAS,CAACA,EAAE,aAAa,MACnE,QAAQ,EAAI,EAAG,EAAIA,EAAE,aAAa,MAAM,OAAQ,IAAK,CACnD,MAAMqsK,EAAOrsK,EAAE,aAAa,MAAM,CAAC,EACnCksK,EAAM,KAAKi6E,EAAY95E,EAAK,KAAOA,CAAI,CACzC,KACK,CAEL,MAAMzjJ,GAAS5oB,EAAE,cAAgBA,EAAE,eAAiBA,EAAE,cAAc,eAAe,MAE7EF,EAA2B,GACjC,QAAQ3I,EAAI,EAAGA,EAAIyxB,EAAM,OAAQ,EAAEzxB,EAAG,CAC9B,MAAAsG,EAAyBmrB,EAAMzxB,CAAC,EACnC,GAAAsG,EAAK,OAAS,OAAQ,CACvB,MAAMyE,GAASikP,EAAY1oP,EAAOA,EAAK,iBAAiB,IAAMA,EAAK,YACnEqC,EAAS,KAAKsmP,EAAUlkP,EAAOzE,CAAI,CAAC,CACtC,CACF,CAEM,cAAQ,IAAIqC,CAAQ,CAC5B,CAMO,OAAAosK,CACT,CC9CA,MAAMx8J,GAAY,qBAElB,MAAqB62O,WAAyBhjO,EAAa,CACzD,YACU9vB,EACA+yP,EACR,CACM,MAAA92O,GAAW,CAAC,SAAU,GAAM,gBAAiB,GAAM,KAAM,GAAM,WAAY,EAAK,GAH9E,YAAAjc,EACA,iBAAA+yP,EAIR,KAAK,UAAU,CACjB,CAEA,MAAa,WAAY,CACjB,MAAC,OAAA/yP,EAAQ,YAAA+yP,CAAe,OACxBrvO,EAASkM,GAAU,CACvB,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAM,IACN,OAAA5vB,CAAA,CACD,EACD0jB,EAAO,KAAK,UAAU,IAAIzH,GAAY,SAAS,EAEzC,MAAA3b,EAAQ,SAAS,cAAc,MAAM,EAC3CS,GAAMT,EAAO,0BAA0B,EACjCA,EAAA,UAAU,IAAI2b,GAAY,QAAQ,EAElC,MAAA2c,EAAWr0B,EAAK,iCAAkC,CAAC,MAAMoO,GAAc,CAAC,OAAA3S,EAAO,CAAC,CAAC,EAC9E44B,EAAA,UAAU,IAAI3c,GAAY,WAAW,EAE9C,MAAM+2O,EAAiB,KAAK,YAAY,QAAQ,KAAK,CAACtqP,EAAGwsB,IAAMxsB,EAAE,OAASwsB,EAAE,MAAM,EAAE,CAAC,EAE/E+9N,EAAgBttP,GAA4BD,GAA2BC,EAAQqtP,EAAe,SAAU,GAAO,GAAM,EAAI,EAEzHh5N,EAAO,KAAK,YAAY,IAAI,CAACk5N,EAAY5vP,IAAQ,CACjDs1B,MAAWr0B,EAAK,gBAAiB,CAAC0uP,EAAa,CAACC,EAAW,OAASA,EAAW,MAAM,CAAC,CAAC,EAC3F,GAAGA,IAAeF,EAAgB,CAC1B,MAAAlyP,EAAO,SAAS,cAAc,MAAM,EACpC8zB,EAAQ,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI3Y,GAAY,WAAW,EAC3C,MAAMk3O,EAAiB,CAACH,EAAe,OAASE,EAAW,OAASF,EAAe,OAC7EI,EAAW,KAAK,OAAO,EAAI,CAACF,EAAW,OAASC,GAAkB,GAAG,EACrEv+N,EAAA,YAAc,IAAMw+N,EAAW,IAChCtyP,EAAA,OAAO8zB,EAAOgE,CAAQ,EAC3BA,EAAW93B,CACb,CAEM,MAAAuyP,EAAU,EAAEH,EAAW,OAAS,IAChCjjO,EAAgB,IAAIC,GAAc,CACtC,QAAS5sB,IAAQ,EACjB,MAAO,GACP,KAAM,cACN,QAAS,GACV,EAEKg3B,EAAM,IAAI5B,GAAI,CAClB,MAAOn0B,EAAK8uP,EAAU,QAAU,SAAU,CAACA,EAAUH,EAAW,OAAS,GAAKA,EAAW,MAAM,CAAC,EAChG,cAAAjjO,EACA,UAAW,GACX,SAAA2I,EACA,iBAAkBq6N,EAAaC,EAAW,MAAM,EACjD,EAED,OAAA54N,EAAI,UAAU,UAAU,IAAIre,GAAY,SAAS,EAE1Cqe,CAAA,CACR,EAEKpH,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAIjX,GAAY,UAAU,EACpCiX,EAAA,OAAO,GAAG8G,EAAK,IAAKM,GAAQA,EAAI,SAAS,CAAC,EAE/C,MAAM+wG,EAAa,IAAI5qI,GAAK,YAAY,CAAC,IAAK,sBAAuB,KAAM,CAACwyP,EAAaF,EAAY,CAAC,EAAE,MAAM,CAAC,CAAE,GAE3GO,EAAoB,IAAMP,EAAY/4N,EAAK,UAAWM,GAAQA,EAAI,cAAc,OAAO,CAAC,EAE9F,KAAK,eAAe,IAAIpH,CAAI,EAAE,SAAU,IAAM,CAC5Cm4G,EAAW,iBAAiB,CAC1B,KAAM,CACJ4nH,EAAaK,EAAkB,EAAE,MAAM,CACzC,EACD,EACF,EAED,MAAMC,EAAa/5N,GAAO,eAAevd,EAAS,kBAAkB,EACzDs3O,EAAA,OAAOloH,EAAW,OAAO,EAEpCxuH,EAAiB02O,EAAY,IAAM,CACjC,MAAML,EAAaI,IACNlvN,GAAA,QAAQ8uN,EAAW,OAAO,EACvC,KAAK,KAAK,CACT,GAAC,eAAgB,KAAK,cAAe,GAExC,KAAK,WAAW,OACdxvO,EAAO,KACPpjB,EACAs4B,EACA1F,EACAqgO,CAAA,EAGF,KAAK,KAAK,CACZ,CACF,CCrFA,MAAMC,GAAqB,CACzB,gBACA,oBACA,eACA,cACA,eACA,yCACF,EAAE,KAAK,GAAG,EASV,MAAqBC,EAAO,CA2B1B,YAAY1zP,EAOT,CAgCE,GAUL,KAAO,YAAc,KACd,qBAAgB,qBAAqB,sBAAuB,MAAS,EACnE,IAGT,KAAO,4BAA8B,IAAM,CACtC,GAAC,KAAK,0BAIT,OAAOusC,GAAkB,CACvB,mBAAoB,iCACpB,OAAQ,CACN,SAAU,GACV,QAAS,uBACX,EACD,GA4EH,KAAU,UAAY,IAAM,CACrB,qBAAgB,qBAAqB,gBAAiB,CACzD,aAAc,KAAK,eAAe,EACnC,GAGH,KAAU,eAAiB,CAACrkC,EAAmC,KAAK,kBAAoB,CACtF,KAAK,gBAAkBA,EAEnB,IAAAsrC,EACJ,MAAMjrC,EAAML,EAAM,MAClB,GAAGK,EAAK,CACA,MAAA4gO,EAAMpvN,GAASxR,CAAG,EAClBorP,EAAYC,GAAmBzqB,CAAG,EAClCrnO,EAAYsiE,GAAauvL,CAAS,EAClCE,EAAcC,GAAiBH,EAAW,GAAG,EAC7CI,EAAeC,GAAU,CAAC,GAAGlyP,EAAW+xP,CAAW,EAAG1qB,CAAG,EAE7C31L,EAAAjrC,EAClB,KAAK,MAAM,MAAM,MAAQ,OAAOzG,EAAU,KAAK,GAAG,CAAC,IAC9C,YAAO,MAAM,YAAY,yBAA0B,OAAOiyP,EAAa,KAAK,IAAI,CAAC,GAAG,EACpF,YAAO,MAAM,YAAY,+BAAgC,QAAQjyP,EAAU,KAAK,IAAI,CAAC,KAAK,GAAI,GAAG,EAEjG,YAAO,MAAM,YAAY,iBAAkB,QAAQA,EAAU,KAAK,IAAI,CAAC,KAAK,GAAI,GAAG,OAExF0xC,EAAkB,KAAK,eAAiB,EAAAtrC,EAAM,SAAS,EAClD,WAAM,MAAM,MAAQ,GACpB,YAAO,MAAM,eAAe,wBAAwB,EACpD,YAAO,MAAM,eAAe,8BAA8B,EAC1D,YAAO,MAAM,eAAe,gBAAgB,EAG9C,YAAO,MAAM,gBAAkBsrC,CAAA,EAG5B,kBAAgBtrC,GAAkB,CACrC,UAAK,MAAM,gBAAkBA,CAAA,EAGpC,KAAU,kBAAoB,MAAM,CAClC,MAAA6O,EACA,WAAAk9O,CAAA,IAC4D,CAEzD,IADU,MAAM,KAAK,SAAS,gBAAgB,QAAQ,KAAK,eAAe,KAAK,GAC1E,yBAA2B,OACjC,OAGF,KAAK,UAAU,EAEf,MAAM5sN,EAAOhD,GAAa,KAC1B,IAAIpkC,EAASonC,EAAK,OAAQ/mC,EAAW+mC,EAAK,SAC1C,GAAG4sN,GAAY,OAAQ,CACrB,MAAM5rI,EAAe,MAAM7vE,GAAc,aAAay7M,EAAY,CAAC,aAAa,CAAC,EAC9Eh0P,IAAWooH,IACHpoH,EAAAooH,EACE/nH,EAAA,OACX,MAAM+jC,GAAa,aAAa,CAAC,OAAApkC,CAAO,GAE5C,CAEA,KAAK,SAAS,qBAAqB,kBACjCA,EACAK,EACA,KAAK,eAAe,MACpByW,CAAA,CACF,EAGF,KAAU,gBAAkB,CAAC,CAC3B,WAAAm9O,EACA,UAAAC,EACA,oBAAAC,EACA,MAAAlsP,EACA,KAAApB,EACA,WAAAutP,CAAA,IAC0D,CAC1DH,EAAaA,GAAc,CAAC,CAACptP,GAAM,KAAK,EACrCA,GAAM,KAAK,WAAW,gBAAgBlG,GAAckG,CAAI,CAAC,EACzDoB,GAAOwR,GAAgB,cAAc,CACtC,KAAM,gBACN,QAAS,KAAK,WACd,IAAKxR,EACL,YAAa,IACd,EACEmsP,IAAiB,gBAAW,MAAM,MAAQA,GAE7C,KAAK,OAAO,UAAU,OAAO,aAAcH,CAAU,GAGvD,KAAU,gBAAkB,CAAC,CAC3B,WAAAA,CAAA,IAC0D,CAC1D,KAAK,aAAaA,CAAU,GAG9B,KAAU,oBAAsB,CAAC,CAC/B,WAAAA,CAAA,IAC8D,CAC9D,KAAK,mBAAqBA,CAAA,EAG5B,KAAU,UAAY,MAAM,CAC1B,MAAA3zP,EACA,QAAAgJ,EACA,QAAA8nB,CAAA,IACmD,CACnD,MAAMijO,EAA6E,CACjF,OAAQ,SACR,MAAO,QACP,GAAI,MAGF,IAAAC,EACJ,MAAM9nN,EAAQ1c,GAAa,YACzBD,GACA,qBACA,CACE,MAAOvvB,EAAQK,GAAcL,CAAK,EAAI,OACtC,YAAaK,GAAc2I,CAAO,EAClC,QAAS8nB,EAAQ,IAAI,CAAC,CAAC,KAAA/M,EAAM,KAAAxd,EAAM,GAAAi7B,KAAQ,CACnC,MAAAhvB,EAAcuhP,EAAsBhwO,CAAI,EAWvC,MAVwC,CAC7C,QAASvR,EACT,KAAOA,EAAoC,OAAtBnS,GAAckG,CAAI,EACvC,SAAU,GACV,SAAUwd,IAAS,cACnB,SAAU,IAAM,CACIiwO,EAAAxyN,CACpB,EAGK,CACR,CACH,GAGIn2B,EAAU,IAAI,QAAe+Y,GAAY,CACvC8nB,EAAA,iBAAiB,QAAS,IAAM,CAC/B,qBAAgB,qBAAqB,eAAgB,CACxD,GAAI8nN,IAAoB,OAAY,CAAC,UAAWA,GAAmB,CAAC,EACrE,EACO5vO,GAAA,CACT,EACF,EAED,OAAA8nB,EAAM,KAAK,EAEJ7gC,CAAA,EAzRPqL,GAAW,KAAMjX,CAAO,EAEnB,oBAAiB,IAAIo4B,GAC1B,KAAK,SAAWl4B,EAAU,SAErB,WAAM,UAAU,IAAI,eAAe,EACnC,YAAO,UAAU,IAAI,gBAAgB,EACrC,UAAK,UAAU,IAAI,cAAc,EACjC,YAAO,UAAU,IAAI,gBAAgB,EAE1C,KAAK,WAAau5B,GAAO,+CAAgD,CAAC,SAAU,GAAK,EAIpF,YAAO,OAAO,KAAK,UAAU,EAC7B,UAAK,MAAM,KAAK,MAAM,EAEV3c,EAAA,KAAK,WAAY,IAAM,CACjC,qBAAgB,qBAAqB,sBAAuB,MAAS,CACzE,GAAC,eAAgB,KAAK,cAAe,GAExC,KAAK,eAAe,IAAI5c,CAAS,EAAE,gBAAiB,IAAM,CACxD,KAAK,eAAe,EACpB,KAAK,UAAU,EAChB,EACD,KAAK,eAAe,IAAIA,CAAS,EAAE,kBAAoB8nH,GAAkB,CACpE,KAAK,eAAe,QAAUA,EAAc,SAC7C,KAAK,cAAgBA,EACvB,CACD,EAEE,KAAK,iBAAiB,IAAM,mBAAoB,CAC3C,MAAAs1D,EAAU,KAAK,iBAAiB,SACtC,KAAK,eAAe,IAAIp9K,CAAS,EAAE,uBAAyBs0P,GAAa,CACpEl3E,IAAYk3E,GACb,KAAK,UAAU,CACjB,CACD,CACH,CACF,CAqBO,gBAAoD,CACnD,MAAAxnN,EAAQ,KAAK,eAAe,MAC5BynN,EAAYznN,EAAM,WAEjB,OAAC,CACN,KAAM,WACN,KAAM,cACN,QAAS,IAAM,CACR,qBAAgB,qBAAqB,0BAA2B,MAAS,CAChF,EAEA,OAAQ,IAAM,KAAK,kBACrB,EAAG,CACD,KAAM,OACN,KAAM,oBACN,QAAS,IAAM,CACb,KAAK,UAAU,EACf3I,GAAa,aAAa,CAAC,OAAQowN,CAAU,EAC/C,EACA,OAAQ,IAAM,KAAK,eAAe,SAAWA,CAC/C,EAAG,CACD,KAAM,cACN,KAAM,uBACN,QAAS,IAAM,CACb,MAAMC,EAAiB,IAAM,CAC3B,MAAMC,EAAa,KAAK,gBAClBlqM,EAAkB,KAAK,gBAClBkqM,EAAA,OAAO,YAAYlqM,EAAgB,MAAM,EACpDkqM,EAAW,QAAQ,EACnBlqM,EAAgB,QAAQ,GAGvB,IAAC,KAAK,aAAa,iBAAkB,CACvBiqM,IACf,MACF,CAEK,mBAAgB,OAAO,WAAW,IAAM,CAC3C,KAAK,cAAgB,OACNA,KACd,GAAG,EAED,qBAAgB,qBAAqB,gBAAiB,MAAS,CACtE,EACA,OAAQ,IAAM,EAChB,EASM,CACJ,KAAM,SACN,UAAW,SACX,KAAM,sBACN,QAAS,IAAM,CACbrwN,GAAa,sBAAsB2I,EAAO,EAAK,EAAE,KAAK,MAAMg7E,GAAkB,CAC5E,KAAK,cAAgBA,EACrB,KAAK,UAAU,EAChB,CACH,EACA,OAAQ,IAAM,KAAK,eAAiB,CAAC,KAAK,cAAc,OAAO,SAC/D,UAAW,EACb,EACF,CAEU,gBAAiB,CACzB,OAAOtuG,GAAgB,0BACzB,CAyJO,SAAU,CACf,KAAK,UAAY,GACjB,KAAK,gBAAgB,UACrB,KAAK,eAAe,WACtB,CAEU,oBACR5P,EACA8qP,EACAC,EACA,CACI,IAAAC,EAAS,GAAOC,EAAa,GACjC,MAAQ,UAASjjP,IAAgB,CAC/B,GAAGgjP,EACD,OAGI,MAAC,2BAAAE,CAA0B,EAAI,KAAK,gBAW1C,GAVG,CAACD,GAAcC,GAA4B,OAASJ,GAAcI,EAA2B,OAAS,IAC1FD,EAAA,GACb,WAAW,IAAM,CACZ,KAAK,gBAAgB,6BAA+BC,IAChD,qBAAgB,2BAA2B,MAAQ,GAE7CD,EAAA,IACZ,GAAI,GAGNA,EAAY,CACR,qBAAgB,qBAAqBH,EAAYC,CAAe,EACrE,MACF,CAESC,EAAA,GACL,IACI,MAAAhrP,EAAS,GAAGgI,CAAI,SACtB,CACSgjP,EAAA,EACX,EAEJ,CAEU,eAAgB,CACxB,MAAMrqM,EAAkB,KAAK,gBAAkB,IAAIT,GAAgB,CACjE,IAAK,KAAK,iBAAiB,IAC3B,QAASypM,GACT,MAAO,mCACP,OAAQ,IAAM,CACT,KAAK,cACD,iBAAY,MAAM,QAAU,KAGnBhpM,EAAA,OAAO,MAAM,QAAU,IACvBA,EAAA,OAAO,UAAU,OAAO,eAAe,CACzD,EACD,EAEe,OAAAA,EAAA,OAAO,MAAM,QAAU,IACvBA,EAAA,OAAO,UAAU,IAAI,eAAe,EACpDA,EAAgB,OAAO,gBAAkB,GAEzCA,EAAgB,2BAA2B,CACzC,aAAezoD,GAAW,CACxB,KAAK,YAAcA,CACrB,EACA,mBAAoB,IAAM,CACrB,KAAK,gBACN,aAAa,KAAK,aAAa,EAC/B,KAAK,cAAgB,OAEzB,EACA,kBAAmB,CAAC,CAAC,KAAAgiB,KAAU,CAC1B,CAAC,KAAK,eAAe,iBAAmB,KAAK,eAAe,oBAI/D,KAAK,UAAU,EACV,cAAS,yBAAyB,gBAAgB,KAAK,eAAe,MAAO,KAAK,eAAe,WAAYA,CAAI,EACxH,EACA,cAAe,IAAM,CACnB,KAAK,UAAU,CACjB,EACA,kBAAmB,CAAC,CAAC,IAAAta,KAAS,CAC5B4gK,GAAe5gK,CAAG,CACpB,EACA,qBAAsB,CAAC,CAAC,UAAAurP,KAAe,CACxB5wN,GAAA,QAAQ,eAAiB4wN,CAAS,CAEjD,EACA,qBAAsB,CAAC,CAAC,KAAAtjJ,KAAU,CAChC,MAAMviE,EAAyC,CAC7C,EAAG07C,GAAmB,QACtB,KAAA6mB,CAAA,EAGFyX,GAAsB,mBAAmBh6E,CAAI,EAAE,KAAM8lN,GAAiB,CACvDA,EAAA,iBAAiB,SAAWlzP,GAAW,CAClDyoD,EAAgB,qBAAqB,iBAAkB,CACrD,KAAAknD,EACA,OAAQ3vG,CAAA,CACT,EACF,EACF,CACH,EACA,sBAAuB,KAAK,UAC5B,6BAA8B,CAAC,CAAC,MAAAkG,KAAW,KAAK,aAAaA,CAAK,EAClE,yBAA0B,KAAK,eAC/B,4BAA6B,KAAK,kBAClC,0BAA2B,KAAK,gBAChC,0BAA2B,KAAK,gBAChC,8BAA+B,KAAK,oBACpC,+BAAgC,CAAC,CAAC,kBAAAitP,CAAA,IAAuB,KAAK,0BAA4B,CAAC,CAACA,EAC5F,mBAAoB,KAAK,oBAAoB,KAAK,UAAW,eAAgB,EAAE,EAC/E,2BAA4B,IAAM1qM,EAAgB,qBAAqB,uBAAwB,EAAE,EACjG,iCAAkC,MAAM,CAAC,OAAA2qM,KAAY,CACnD,MAAMpzP,EAAiE,CACrE,OAAAozP,CAAA,EAGE,IAAApxO,EACJ,GAAG,KAAK,eAAiB,CAAC,KAAK,cAAc,OAAO,SAAc,KAC7C,MAAM,UAAU,YAAY,MAAM,CAEnD,KAAM,iBACP,GAEa,QAAU,YACfA,EAAA,MAAM,UAAU,UAAU,SAAS,SAEtCmhB,EAAO,CACL,cAAM,uBAAwBA,CAAK,CAC7C,CAEGnhB,IAAS,SACVhiB,EAAO,KAAOgiB,GAGAymC,EAAA,qBAAqB,0BAA2BzoD,CAAM,CACxE,EACA,6BAA8B,KAAK,oBAAoB,SAAW,CAC1D,MAAAgrC,EAAQ,KAAK,eAAe,MAC5BqoN,EAAiB,MAAM,KAAK,SAAS,eAAe,eAAeroN,CAAK,EACxEzlB,EAAgE,CAAC,OAAQ,WAC/E,GAAG,CAAC8tO,EACE,IACF,MAAM9oN,GAAkB,CACtB,aAAc,2BACd,mBAAoB,iCACpB,oBAAqB,CAAC,MAAM35B,GAAc,CAAC,OAAQo6B,EAAM,SAAS,EAAK,CAAC,CAAC,CAAC,EAC1E,OAAQ,CACN,QAAS,IACX,EACD,EAED,MAAM,KAAK,SAAS,eAAe,iBAAiBA,CAAK,OAC9C,CACXzlB,EAAO,OAAS,WAClB,CAGckjC,EAAA,qBAAqB,yBAA0BljC,CAAM,CACpE,2BAA0B,CAAC,OAAQ,YAAY,EAClD,sBAAuB,KAAK,oBAAoB,SAAW,CACnD,MAAAA,EAAyD,CAAC,OAAQ,QACpE,IACI,MAAAylB,EAAQ,KAAK,eAAe,MAClC,MAAM,KAAK,SAAS,mBAAmB,WAAWA,CAAK,EACvD,MAAM3I,GAAa,aAAa2I,EAAM,SAAS,EAAK,CAAC,OAC1C,CACXzlB,EAAO,OAAS,WAClB,CAEgBkjC,EAAA,qBAAqB,kBAAmBljC,CAAM,CAC7D,oBAAmB,CAAC,OAAQ,YAAY,EAC3C,6BAA8B,MAAM,CAAC,OAAA6tO,EAAQ,OAAAl/M,EAAQ,OAAAoX,KAAY,CAC/D,IAAItrD,EAA2BmjC,EAC3B,IACOnjC,EAAA,MAAM,KAAK,SAAS,yBAAyB,0BACpD,KAAK,eAAe,MACpBk0C,EACAoX,CAAA,QAEIgoM,EAAQ,CACNnwN,EAAAmwN,CACV,CAEA7qM,EAAgB,qBAAqB,wBAAyB,CAC5D,OAAA2qM,EACA,OAAQpzP,GAAU,KAAK,MAAMA,EAAO,IAAI,EACxC,MAAOmjC,GAAO,KACf,CACH,EACD,EAEeslB,EAAA,OAAO,UAAU,IAAI,sBAAsB,EACpDA,CACT,CAEO,WAAY,CACjB,OAAG,KAAK,cACC,KAAK,cAAc,OAAO,SAAS,EAAK,EAExC,KAAK,eAAe,MAAM,SAAS,EAAK,CAEnD,CAEA,MAAa,SAA4BpmD,EAA0D,CAC9F,GAAC,KAAK,cAKJ,OAAAA,EAAc,KAAK,cAAc,WACxBzD,GAAc,KAAK,cAAc,UAAU,EANjC,CAChB,MAAAX,EAAS,KAAK,YACjB,OAAAoE,EAActE,GAAa,CAAC,OAAAE,EAAQ,UAAW,EAAK,GAC3C2S,GAAc,CAAC,OAAA3S,CAAA,CAAO,EAKtC,CAEA,MAAa,KAAKs1P,EAAyC,CACrD,KAAK,eACP,KAAK,MAAM,OAAO,MAAM,KAAK,SAAS,EAAK,CAAC,EAG9C,IAAIC,EAAU,GACT,iBAAc,SAAS,cAAc,MAAM,EAGlC,IACN,MAAAxtI,EAAgB,KAAK,eAAiB,MAAM,KAAK,SAAS,yBAAyB,iBAAiB,KAAK,eAAe,KAAK,EAC7H7+F,EAAOw3J,GAAqB34D,CAAa,EAC5C7+F,IACD,MAAM4K,GAAkB,CACtB,QAAS,KAAK,YACd,IAAK5K,EAAK,KACV,KAAM,GACN,UAAW,IAAM,uBACjB,YAAa,IAAM,GACpB,EAESqsO,EAAA,SAED,CAAC,CAEXA,EACI,iBAAY,UAAU,IAAI,cAAc,EAE7C,KAAK,YAAc,OAGf,MAAA/qM,EAAkB,KAAK,gBAC7B,KAAK,aAAa,KAAK,eAAe,EAAE,QAAQ,EAChD,KAAK,eAAe,CAAC,UAAW,UAAW,GACtC,UAAK,QAAQ,GAAG,CAAC,KAAK,YAAaA,EAAgB,MAAM,EAAE,OAAO,OAAO,CAAC,EAE/E,QAAQ,QAAQ8qM,GAAe,EAAE,KAAK,IAAM,CAC1C9qM,EAAgB,QAAQ,EAErB,CAAC,KAAK,eAAe,iBAAoB,KAAK,iBAAoD,UACnG,WAAW,IAAM,KAAK,eAAe,EAAG,GAAI,CAC9C,CACD,CACH,CAEQ,gBAAiB,CAClB,cAAS,yBAAyB,eAAe,CACpD,QAAU,KAAK,iBAAoD,SACnE,GAAG,KAAK,eACT,EAAE,KAAK,IAAM,CACT,KAAK,WAIR,WAAW,IAAM,CACZ,KAAK,WAIR,KAAK,eAAe,GACnB,GAAI,CACT,EAAIr5C,GAAkB,CACjB,KAAK,YAILA,EAAI,OAAS,mBACd,KAAK,UAAU,EAEP,cAAM,wBAAyBA,CAAG,EAC5C,CACD,CACH,CACF,CCvoBA,MAAqBqkP,WAAoB1lO,EAAa,CAGpD,YAAY/vB,EAIT,CACD,MAAM,yDAA0D,CAC9D,SAAU,GACV,gBAAiB,GACjB,KAAM,GACN,OAAQ,GACR,MAAO,GACP,YAAa,IAAM,KAAK,OAAO,YAAY,EAC3C,4BAA6B,IAAM,KAAK,OAAO,4BAA4B,EAC5E,EAEDiX,GAAW,KAAMjX,CAAO,EAEnB,YAAS,IAAI0zP,GAAO,CACvB,GAAG1zP,EACH,OAAQ,KAAK,OACb,MAAO,KAAK,MACZ,KAAM,KAAK,KACX,OAAQ,KAAK,OACb,UAAW,KAAK,UAChB,aAAegQ,GAAY,KAAK,qBAAqB,UAAU,OAAO,aAAcA,CAAO,EAC5F,EAED,MAAMytD,EAAUxB,GAAiB,CAC/B,eAAgB,KAAK,eACrB,QAAS,KAAK,OAAO,eAAe,EACpC,UAAW,cACZ,EACI,WAAM,MAAMwB,CAAO,EAEnB,YAAO,KAAK,IAAM,CACrB,KAAK,KAAK,EACX,CACH,CAEU,SAAU,CAClB,YAAK,OAAO,UACL,MAAM,SACf,CACF,CCpDA,SAAwBi4L,IAAmB,CACzC,MAAMh7O,EAAgB,GAChB+tB,EAAY,OAAO,eACzB,QAAQ9kC,EAAI,EAAGA,EAAI8kC,EAAU,WAAY,EAAE9kC,EAAG,CACtC,MAAA+kC,EAAQD,EAAU,WAAW9kC,CAAC,EAChC,IAAC,eAAAwrK,EAAgB,aAAAE,CAAgB,EAAA3mI,EAG/B,IAFH2mI,EAAa,WAAaA,EAAa,YAAWA,EAAeA,EAAa,YAE3EF,GAAkBA,IAAmBE,GACzC30J,EAAM,KAAKy0J,EAAe,WAAaE,EAAa,UAAYF,EAAiBA,EAAe,UAAU,EAC1GA,EAAiBA,EAAe,YAG/Bz0J,EAAMA,EAAM,OAAS,CAAC,IAAM20J,GAC7B30J,EAAM,KAAK20J,CAAY,CAE3B,CAGA,OAAO30J,EAAM,OAAQC,GAAS,CAAC,CAACA,CAAI,CACtC,8jDCXMg7O,GAA2C,GAC3CC,GAAiB,CAACC,GAExB,IAAIC,GACFC,GACCH,IACDE,GAAuBhsP,GAAaksP,sBAAsBlsP,CAAQ,EAClEisP,GAAqBh0N,GAAOk0N,qBAAqBl0N,CAAE,IAEnD+zN,GAAuBhsP,GAAaunF,OAAOzlE,WAAW9hB,EAAU6rP,EAAe,EAC/EI,GAAqBh0N,GAAOsvD,OAAOD,aAAarvD,CAAE,GAGrC,SAAS7C,GAAWpvB,EAUhC,CACD,MAAMi8D,EAAOj8D,EAAMi8D,MAAQ,IACrBmqL,EAAqDnqL,IAAS,IAAM,aAAe,YACnFoqL,EAAqDpqL,IAAS,IAAM,cAAgB,eACpFqqL,EAAqDrqL,IAAS,IAAM,cAAgB,eACpFsqL,EAAqDtqL,IAAS,IAAM,cAAgB,eACpFuqL,EAAoCvqL,IAAS,IAAM,UAAY,UAE/Dm9F,EAAiBA,IAAM7lH,EAAI6yM,CAAsB,EACjD9sF,EAAaA,IAAM/lH,EAAI8yM,CAAkB,EACzChtF,EAAaA,IAAM9lH,EAAI+yM,CAAkB,EACzCvhF,EAAaA,IAAMxxH,EAAIgzM,CAAkB,EACzCE,EAAmBA,IAAMntF,IAAezjJ,KAAKC,MAAMsjJ,EAAc,EAAK2L,EAAU,CAAE,EAElF2hF,EAAiBpqP,EAAW,IAAM0D,EAAM0mP,gBAAkB,GAAG,EAEnE,IAAIphH,EAAkC,EAClCqhH,EAAqB,EAErBC,EACAC,EAEAC,EAA6B,GAC7BC,EAA0B,GAE9B,KAAM,CAACC,EAAmBC,CAAoB,EAAIhoP,GAAa,EAAI,EAC7D,CAACioP,EAAiBC,CAAkB,EAAIloP,GAAa,EAAI,EAEzDmoP,EAA+B98H,GAAuB,IAAM,CAChEw8H,EAA6B,GAE1BO,IACDC,IACAP,EAA0B,GAE9B,EAAG,IAAM,CACPD,EAA6B,GAE1BC,IACDruF,IACAquF,EAA0B,GAE9B,CAAC,EAEDjoP,GAAUsoP,CAA4B,EAEtC,IAAIC,EAAkB,EACtB,MAAM3uF,EAAWA,IAAM,CAOrB,GAAGouF,EAA4B,CAC7BQ,IACAP,EAA0B,GAC1B,MACF,CAGI,CAAC/mP,EAAM8oJ,eAAiB,CAAC9oJ,EAAM6oJ,kBAA4C,CAAC0+F,IAAoB53P,QAAU,CAACm2P,IAC5GuB,IACHA,EAAkBrB,GAAoB,IAAM,CAC1CqB,EAAkB,EAElB,MAAMG,EAAkBpuF,IACxB9zB,EAAsBqhH,IAAuBa,EAAkB,EAAKb,EAAqBa,EAAkB,EAAI,GAC/Gb,EAAqBa,EAErB15I,EAAY05I,CAAe,EAIzBD,EAAmB,EAAC3wO,QAAS5c,GAAaA,EAAU,GAGtDytP,GACF,CAAC,IAGGH,EAAgBA,IAAM,CACvBD,IACDpB,GAAkBoB,CAAe,EACjCA,EAAkB,IAIhBI,EAAmBA,IAAM,CAC7B,GAAG,CAACznP,EAAM8oJ,eAAiB,CAAC9oJ,EAAM6oJ,iBAAkB,OAOpD,MAAM6+F,EAAcpuF,IACpB,GAAG,CAACouF,EACF,OAGF,MAAMF,EAAkBpuF,IAClBuuF,EAAc5iF,IACd6iF,EAAkBlB,IAClBmB,EAAoBH,EAAcC,EAIrC3nP,EAAM8oJ,eAAiB0+F,GAAmBI,GAAmBtiH,GAAuB,GACrFtlI,EAAM8oJ,cAAa,EAGlB9oJ,EAAM6oJ,kBAAqBg/F,EAAoBL,GAAoBI,GAAmBtiH,GAAuB,GAC9GtlI,EAAM6oJ,iBAAgB,GAIpBi/F,EAAYA,IAAM,CACtBb,EAAqB,CAAC7tF,EAAc,CAAE,EACtC+tF,EAAmBV,KAAsB,CAAC,GAGtC34I,EAAcA,CAAC05I,EAAkBpuF,MAAqB,CAC1D,GAAG,CAAC0sF,IAAkB,CAACiC,EACrB,OAGF,MAAML,EAAcpuF,IACdquF,EAActuF,IACd2uF,EAAUN,EAAcC,EAAc,IACtCM,EAAYpyO,KAAK42B,IAAI,GAAIk7M,EAAcK,CAAO,EAC9C5gP,GAAQogP,GAAmBE,EAAcC,GAAeA,EAExDtiO,GAAImiO,GAAmBE,EAAcC,GACrCx/L,GAAWw/L,EAAcM,EAC5BN,EAAcD,GACfK,EAASxxO,MAAME,OAASwxO,EAAY,KAEpCF,EAASxxO,MAAM+9F,UAAa,cAAaz+F,KAAK22B,IAAI2b,GAAU/gD,GAAQ6gP,EAAY5iO,EAAC,CAAE,OAEnF0iO,EAASxxO,MAAME,OAAS,OAItB8wO,EAAoBjrP,EAAW,IAAM,CAAC0D,EAAM04J,SAAU14J,EAAMkoP,aAAeJ,CAAS,EAAE9uO,OAAO2F,OAAO,CAAC,EAErGwpO,EAAoBzrP,GAAkB,CAC1CqQ,GAAYrQ,CAAC,EAEb,MAAM0rP,EAAgB9uF,IAChB+uF,EAAiBhvF,IACjBivF,EAAgBP,EAASQ,aACzBC,EAAeJ,EAAgBC,EAE/BI,GAAqBJ,EAAiBC,EAEtCI,IADShsP,EAAE8pP,CAAU,EAAII,GACA6B,GAAsBD,EAC/C1yM,GAAe+wM,EAAsB6B,GAE3Cn1M,EAAI6yM,CAAsB,EAAItwM,IAG1B6yM,EAAoBjsP,GAAkB,CAC1CqQ,GAAYrQ,CAAC,EACbkqP,EAAqBlqP,EAAE8pP,CAAU,EACjCK,EAAsBztF,EAAc,EACnC18J,EAAE+Y,OAAuBY,UAAUS,IAAI,YAAY,EAEpDyqE,OAAOttE,iBAAiB,YAAak0O,CAAgB,EACrD5mK,OAAOttE,iBAAiB,UAAW20O,EAAgB,CAACpnK,KAAM,EAAI,CAAC,GAG3DonK,EAAkBlsP,GAAkB,CACxC6kF,OAAOmvE,oBAAoB,YAAay3F,CAAgB,EACxDJ,EAAS1xO,UAAU0F,OAAO,YAAY,GAGlCkoL,EAAWvnM,GAAkB,CACjCA,EAAE++I,gBAAe,EACjB,MAAMhmI,EAAS/Y,EAAE+Y,OACd,CAAC/Y,EAAEmsP,QAAUpzO,EAAOqzO,YAAcrzO,EAAOolD,cAC1CplD,EAAOmnD,YAAclgE,EAAEqsP,OAAS,EAChCh8O,GAAYrQ,CAAC,IAIXssP,EAAeA,IAAM,CACtBlD,IAAkBiC,GACnBrvF,KAIEz5I,EAAW66C,GAAgB,IAAM95D,EAAMif,QAAQ,EAErD5hB,GAAaC,GAAG2hB,EAAU+pO,CAAY,CAAC,EAEvC,IAAIz1M,EAAqBw0M,EACzB,kBAAA11O,EAAAC,KAAA6vG,UAAA9vG,EAiBc4pD,YAAS,KAAO,CAACn6C,IAAsBmiL,GAAY7sL,MAAS,EAAA/E,EAAA4B,iBAAA,SAD5DykJ,CAAQ,EAAA94I,GAdZqpO,IAAU11M,EAAM01M,EAAOjpP,EAAMuzC,MAAc01M,CAAI,GAAE52O,CAAA,EAAAU,EAAAV,EAiBtDyzO,IAAkB7pL,IAAS,MAAG,WAAAtpD,EAAAC,GAAA,EAAAC,EAAAF,EAAAG,WAAAD,EAAAq2O,YAKZP,EAAgB,MAAAhpO,EADxBooO,EAAQ,cAAApoO,GAAAC,cAAAD,EAAA9M,CAAA,EAARk1O,EAAQl1O,EAAAF,IAIlB,QAAAI,EAAAV,EACA4M,EAAQ,MAAA1M,OAAAiN,GAAAnN,EAzBF3H,GACL,aACC,cAAauxD,CAAK,GACnBj8D,EAAMmT,MACN4iC,IAAa,CAAC/zB,IAAoB,eAClC,GAAIhiB,EAAMkoP,YAAc,CACtBlB,EAAiB,GAAM,iBACvBE,EAAiB,GAAI,eACrBjrL,IAAS,KAAO,yBACfj8D,EAAMkoP,cAAgB,OAASloP,EAAMkoP,cAAgB,SAAW,6BAChEloP,EAAMkoP,cAAgB,UAAYloP,EAAMkoP,cAAgB,SAAW,8BAA8B,EAChG,EACL,IAAA71O,CAAA,IAgBP,CAAC8rD,GAAA,sTCxMD,SAASgrL,GAAoBnpP,EAA0C,CACrE,kBAAAqS,EAAAC,KAAAC,UAAA,IAAAC,GAAAH,UACwG3H,GAAWu1D,GAAOmpL,0BAA2BppP,EAAMmnB,KAAO84C,GAAO94C,KAAO84C,GAAO10C,KAAK,CAAC,GAAAlZ,CAAA,IAI/L,CAEA,SAASg3O,GAAoBrpP,EAA4C,CACvE,OAAAkT,EACGkpG,GAAat8F,GAAK9f,EAAK,oBAAS0K,GAAWu1D,GAAOopL,oBAAqBrpP,EAAMmT,KAAK,CAAC,EAAEi3F,SAAQ,KAElG,CAEA,SAASk/I,GAAiBtpP,EAKvB,CACD,KAAM,CAACjE,EAAOknD,CAAO,EAAIgiI,GAAWskE,EAAc,EAC5C1+K,EAAWvuE,EAAW,IAAM,CAACP,EAAMi9J,WAAaj9J,EAAMytP,OAASxpP,EAAMwpP,IAAI,EACzEl1I,EAAYh4G,EAAW,IAAM,CACjC,GAAG,CAACP,EAAMi9J,UACR,MAAO,GAGT,MAAMnvJ,EAAQ7J,EAAM6J,QACpB,IAAIzC,EAAQ,IAAMyO,KAAK22B,IAAI,EAAG3iC,CAAK,EAAI,IACvC,OAAGA,EAAQ,IACTzC,IAAUyC,EAAQ,GAAK,KAGjB,cAAazC,CAAM,KAC7B,CAAC,EAED,kBAAAuL,EAAAwM,GAAA,EAAA6hE,EAAAruE,EAAAG,WAAA2M,EAAAuhE,EAAAxT,YAAA76D,EAAAwpD,QAaa,IAAMlZ,EAAQwmM,OAAOzpP,EAAMwpP,IAAI,EAAC,MAAA7pO,EAXpC3f,EAAMuzC,IAAG,cAAA5zB,GAAA,WAAAC,GAAAD,EAAAhN,CAAA,EAAT3S,EAAMuzC,IAAG5gC,EAAAI,EAAAJ,EAAAO,EAabm2O,GAAmB,oBAAQppL,GAAOypL,oBAAoB,MAAAzqO,UAAA,oBAAApM,EAAAD,KAAAG,SAAAF,EAAA,IACL7S,EAAMwpP,KAAKnwO,IAAI,EAAA9G,OAAAiN,GAAA3M,EAAlDotD,GAAO0pL,yBAAyB,GAAA92O,IAAAK,IAC5CosE,GAAO,CACNjmE,KAAI,0BACG3O,GAAWu1D,GAAO2pL,sBAAuB3pL,GAAO4pL,oBAAoB,CAAC,MAC5ErlO,SAAO,QAAExkB,EAAM8pP,YAAY,QAAA9oK,CAAA,EAAAjuE,EAAAiuE,EAI5Br2E,OAAwB7Z,GAAckP,EAAMwpP,KAAK/4P,KAAK,CAAC,CAAC,EAAAsiB,EAAAJ,EAAAO,EAG1DkpG,GAAa,CACZ/iG,KAAI,2BACG3O,GAAWu1D,GAAO2pL,sBAAuB3pL,GAAO8pL,qBAAqB,CAAC,EAC7E3/I,SAAQ,GACR5lF,QAAU9nB,GAAM,CACdA,EAAE++I,gBAAe,EACjBx4F,EAAQm9B,MAAMpgF,EAAMwpP,IAAI,CAC1B,CAAC,SAAAj3O,GAAA6M,GAAA,OAAAC,EA/BI3U,GACLu1D,GAAOqpL,iBACPz+K,EAAQ,GAAM5K,GAAO3iC,OACrBvhC,EAAMiuP,MAAM70J,QAAQn1F,EAAMwpP,IAAI,IAAM,GAAKvpL,GAAOpoE,KAClD,EAACynB,EAEiBtf,EAAMwpP,KAAKS,WAAa,GAAK,KAAI1qO,EACtC1J,KAAK42B,IAAI,EAAG,EAAIzsC,EAAM6J,OAAO,EAACgyI,EAC5BvnC,EAAW,EAAAynC,EAYd97E,GAAOiqL,sBAAqBluG,EAG5BtxI,GAAWu1D,GAAO2pL,sBAAuB3pL,GAAOkqL,oBAAoB,EAAC9qO,WAAAD,EAAAC,KAAAG,GAAA7M,EAAAyM,EAAAC,KAAA,EAAAC,IAAAF,EAAAE,QAAAF,EAAAE,SAAA,KAAA3M,EAAA4D,MAAAkC,YAAA6G,gBAAA,EAAA3M,EAAA4D,MAAAkrJ,eAAA,iBAAAliJ,IAAAH,EAAAG,QAAAH,EAAAG,SAAA,KAAA5M,EAAA4D,MAAAkC,YAAA8G,WAAA,EAAA5M,EAAA4D,MAAAkrJ,eAAA,YAAA5lB,IAAAz8H,EAAAy8H,QAAAz8H,EAAAy8H,SAAA,KAAAlpI,EAAA4D,MAAAkC,YAAAojI,aAAA,EAAAlpI,EAAA4D,MAAAkrJ,eAAA,cAAA1lB,IAAA38H,EAAA28H,MAAAv8H,GAAAwhE,EAAA5hE,EAAA28H,MAAA,EAAAC,IAAA58H,EAAA48H,MAAAx8H,GAAAC,EAAAL,EAAA48H,MAAA,EAAA58H,CAAA,GAAAC,IAAAjI,OAAAkI,KAAAlI,OAAAmI,KAAAnI,OAAAykI,KAAAzkI,OAAA2kI,KAAA3kI,OAAA4kI,KAAA5kI,MAAA,GAAAzE,CAAA,IAYvF,CAEA,SAASy3O,GAAcpqP,EACpB,CACD,KAAM,CAACjE,EAAOknD,CAAO,EAAIgiI,GAAWskE,EAAc,EAC5Cc,EAAiB/tP,EAAW,IAAM,CAAC,CAACP,EAAMytP,KAAKa,cAAc,EAC7DC,EAAsC,IAAIh3O,IAEhDjW,GAAa,IAAM,CACjB,MAAMmsP,EAAOztP,EAAMytP,KACbe,EAAiBxuP,EAAMytP,MAAMe,eAC/BA,GAIJzuL,GAAiB,CACf7pE,UAAWu4P,EACX7lP,QAAS2lP,EAAO12O,IAAI41O,EAAKv3N,EAAE,EAC3B+pC,SAAU,SACVC,KAAM,IACNq0D,cAAe,IACfm6H,cAAeA,CAAC,CAAChnO,MAAI,IAAM,CACzB,MAAMyP,EAAOq3N,EAAeN,WAAaT,EAAKS,WAC9C,OAAOxmO,EAAKjN,MAAQ0c,CACtB,CACF,CAAC,CACH,CAAC,EAED,MAAM42N,EAAe,MAAMptP,GAA+B,CACxD,MAAM+Y,EAASC,EAAgBhZ,EAAE+Y,OAAQwqD,GAAOqpL,gBAAgB,EAChE,GAAG,CAAC7zO,EACF,OAGC/Y,aAAaguP,YAAYhuP,EAAE4mO,eAAc,EAEzC5mO,aAAaguP,aAAYhuP,EAAEiuP,aAAe,IAE7C,MAAMnB,EAAOztP,EAAMiuP,MAAMtyO,KAAM8xO,GAASc,EAAO12O,IAAI41O,EAAKv3N,EAAE,IAAMxc,CAAM,EACtE,GAAG,CAAC+zO,GAAM9zC,YACR,OAGF,MAAMvwL,EAAiB,IAAImD,GACrB/G,GAAW,MAAM2qC,GAAsBhrB,GAAKsoN,EAAK9zC,WAAW,CAAC,GAAG/8L,IAAK2H,IACzEA,EAAOpwB,QAAU,CAACi1B,kBACX7E,EACR,EACK3b,EAAUugB,GAAe,CAC7B3D,UACA4D,gBACF,CAAC,EACDxgB,EAAQ0R,UAAUS,IAAI,aAAa,EAEnCpU,SAASmgM,eAAe,YAAY,EAAE78J,OAAOrhC,CAAO,EAEpDohB,GAAarpB,EAAGiI,CAAO,EACvBof,GAAsB6mO,YAAYjmP,EAAS,IAAM,CAC/CmX,WAAW,IAAM,CACfnX,EAAQoX,OAAM,EACdoJ,EAAeygF,UAAS,CACzB,EAAE,GAAG,CACR,CAAC,GAGHzkB,GAAQ,IAAM,CACZ,MAAMh8D,EAAiB,IAAImD,GAC3Bd,GAA0B,CACxB7iB,QAAS6lP,EACTxwP,SAAU8vP,EACV3kO,gBACF,CAAC,EAEDrmB,GAAU,IAAM,CACdqmB,EAAeygF,UAAS,CAC1B,CAAC,CACH,CAAC,EAED,MAAMilJ,EAAiBvuP,EAAW,IAAM,CACtC,MAAMwuP,EAAcd,GAA8BA,EAAMrxO,IAAK6wO,GAAS14P,GAAc04P,EAAK/4P,KAAK,CAAC,EACzFu5P,EAAQjuP,EAAMiuP,MACpB,OAAGA,EAAMr6P,SAAW,EACX+E,EAAK,yBAA0Bo2P,EAAW,CAACd,EAAM,CAAC,CAAC,CAAC,CAAC,EACpDA,EAAMr6P,SAAW,EAClB+E,EAAK,yBAA0Bo2P,EAAWd,EAAM7wK,MAAM,EAAG,CAAC,CAAC,CAAC,EAE5DzkF,EAAK,0BAA2B,CAAC,GAAGo2P,EAAW,CAACd,EAAM,CAAC,CAAC,CAAC,EAAGA,EAAMr6P,OAAS,CAAC,CAAC,CAExF,CAAC,EAED,IAAI66P,EACJ,kBAAA12M,EAAAsoD,GAAA,EAAA+L,EAAAr0D,EAAAhhC,WAAAC,SAAA+gC,EAAA5gC,EAEKm2O,GAAmB,CAClB7kO,QAASA,IAAM,CACV6lO,EAAc,EACftuP,EAAMytP,KAAK7oF,cAEX19G,EAAQm9B,MAAMrkF,EAAMytP,IAAI,CAE3B,MAAAvqO,UAAA,OAAAk9E,EAAAz8E,KAAAnN,UAAAiN,OAAA28E,EAEWzxF,GAAW,sBAAuB2/O,EAAgB,GAAI,YAAY,CAAC,GAAAluJ,CAAA,IAAAgM,CAAA,EAAAp1F,EAAA+gC,EAAA5gC,EAEhFkc,GAAU,oBACF1kB,GAAWu1D,GAAO8qL,4BAA6BhvP,EAAMi9J,WAAa,eAAe,CAAC,EACzF/8F,KAAI,IAAA1oB,IAAAgpB,EAAA,OAAAF,EACCmuL,EAAa,OAAAnuL,gBAAAE,CAAA,EAAbiuL,EAAajuL,CAAA,EAClB2rL,YAAW,aAAAjpO,UAAA,OAAA+9E,EAAAZ,GAAA,EAAAiL,EAAArK,EAAAlqF,WAAAC,SAAAs0F,EAAAn0F,EAUNi2O,GAAmB,CAAChiO,KAAI,WAAApU,EAAAs0F,EAAAn0F,EACxBi2O,GAAmB,CAAC59N,MAAK,WAAAxY,EAAAiqF,EAAA9pF,EAE3BkoD,GAAQ,CAAC5mD,KAAI,aAAcymD,KAAI,iBAAAh8C,UAAA,QAAA/L,EAC7B2pD,GAAG,KAACC,MAAI,QAAE/gE,EAAMiuP,KAAK,EAAA/qO,SAAGA,CAACuqO,EAAM3/O,IAC9BqJ,EACGo2O,GAAgB,CACfE,KAAMA,EACNM,aAAcA,EAAYv2M,IACpBtxC,GAAOqoP,EAAOppP,IAAIsoP,EAAKv3N,GAAIhwB,CAAE,EACnC4H,MAAOA,CAAK,EAGjB,YAAAkJ,EAAAiqF,EAAA9pF,EAGFm2O,GAAmB,oBACX3+O,GAAWu1D,GAAOypL,qBAAsBzpL,GAAO+qL,sBAAsB,CAAC,EAC7ExmO,QAASA,IAAMymO,GAA2B,MAAAhsO,UAAA,OAAAqoF,EAAA10F,KAAAG,SAAAu0F,EAAAp0F,EAEMosE,GAAO,CAACjmE,KAAI,UAAA9G,OAAAiN,GAAA8nF,EAA/CrnC,GAAO0pL,yBAAyB,GAAAriJ,CAAA,UAAA/0F,GAAA6M,GAAA,OAAA68H,EA5BrCh8E,GAAOirL,kBAAiBhvG,EAEzBj8E,GAAOkrL,sBAAqBhvG,EAErB,cAAapgJ,EAAM8N,MAAQ,GAAK,GAAK9N,EAAM8N,OAAS,EAAI,GAAK,EAAG,MAAIuyI,EACzErgJ,EAAMytP,KAAKS,WAAa,GAAK,EAAI,GAAK,KAAIhuG,WAAA78H,EAAA68H,MAAAz8H,GAAAw9E,EAAA59E,EAAA68H,MAAA,EAAAC,IAAA98H,EAAA88H,MAAA18H,GAAA6nF,EAAAjoF,EAAA88H,MAAA,EAAAC,IAAA/8H,EAAA+8H,QAAA/8H,EAAA+8H,SAAA,KAAA90C,EAAA9wF,MAAAkC,YAAA0jI,aAAA,EAAA90C,EAAA9wF,MAAAkrJ,eAAA,cAAArlB,IAAAh9H,EAAAg9H,SAAAh9H,EAAAg9H,UAAA,KAAA/0C,EAAA9wF,MAAAkC,YAAA2jI,SAAA,EAAA/0C,EAAA9wF,MAAAkrJ,eAAA,UAAAriJ,CAAA,GAAA68H,KAAA7kI,OAAA8kI,KAAA9kI,OAAA+kI,KAAA/kI,OAAAglI,MAAAhlI,MAAA,GAAA4lF,CAAA,IAAAmL,CAAA,EAAAp1F,EAAAo1F,EA+BtD0iJ,CAAc,EAAA93O,EAAA+gC,EAAA5gC,EAEhBm2O,GAAmB,KAClBhwO,MAAI,QAAEtd,EAAMi9J,UAAY,aAAe,YAAY,EACnDx0I,QAASA,IAAMy+B,EAAQmoM,gBAAgB,CAAC,SAAA74O,GAAA6M,GAAA,OAAAi9H,EA1DhCp8E,GAAOmqL,cAAa9tG,EAmDrBr8E,GAAOorL,4BAA2B7wD,EACjB3kL,KAAK42B,IAAI,EAAG,EAAI1wC,EAAMiuP,MAAMr6P,MAAM,EAAI,IAAM,KAAI0sJ,WAAAj9H,EAAAi9H,OAAA78H,GAAAs0B,EAAA10B,EAAAi9H,OAAA,EAAAC,IAAAl9H,EAAAk9H,OAAA98H,GAAA2oF,EAAA/oF,EAAAk9H,OAAA,EAAAk+C,IAAAp7K,EAAAo7K,SAAAp7K,EAAAo7K,UAAA,KAAAryF,EAAA5xF,MAAAkC,YAAA+hL,gBAAA,EAAAryF,EAAA5xF,MAAAkrJ,eAAA,iBAAAriJ,CAAA,GAAAi9H,MAAAjlI,OAAAklI,MAAAllI,OAAAojL,MAAApjL,MAAA,GAAA08B,CAAA,IAUhF,CAuBA,SAASw3M,GAAmBtrP,EAEJ,CACtB,MAAM0/K,EAAoC,CACxCsqE,MAAO,CAAE,EACTngP,MAAO,EACP,IAAI2/O,MAAO,CACT,OAAOztP,EAAMiuP,MAAMjuP,EAAM8N,KAAK,CAC/B,EACD8uN,UAAW,GACX3/D,UAAW,IAGP,CAACj9J,EAAOC,CAAQ,EAAIC,GAAiCyjL,CAAY,EAEjEz8H,EAAiC87H,GAAe,CACpDjoK,IAAM0yO,GAAS,CACbA,EAAO+B,GAAgB/B,CAAI,EAC3BxtP,EAAS,QAAUguP,GACV,CAAC,GAAGA,EAAOR,CAAI,CACvB,EACDvmM,EAAQwmM,OAAO1tP,EAAMiuP,MAAMr6P,OAAS,CAAC,CACtC,EACD85P,OAASD,GAAS,CAChB,IAAInmE,EACD,OAAOmmE,GAAU,SACfA,EAAO,GAAKA,GAAQztP,EAAMiuP,MAAMr6P,OACjC0zL,EAAW,GAEXA,EAAWmmE,EAGbnmE,EAAWtnL,EAAMiuP,MAAM70J,QAAQq0J,CAAI,EAGlCnmE,IAAa,IAIhB9lL,GAAM,IAAM,CACV,MAAMiuP,EAAczvP,EAAMytP,KACpBiC,EAAU1vP,EAAMiuP,MAAM3mE,CAAQ,EACpCrnL,EAAS,QAASqnL,CAAQ,EAC1BrnL,EAAS,QAASqnL,EAAU,iBAAkBmoE,CAAW,EAEzDj3I,eAAe,IAAM,CACnB,MAAM1qG,EAAQ9N,EAAMiuP,MAAM70J,QAAQs2J,CAAO,EACzCzvP,EAAS,QAAS6N,EAAO,iBAAkBuN,MAAS,CACtD,CAAC,CACH,CAAC,CACF,EACDgpE,MAAO,MAAMopK,GAAS,CACpB,MAAM3/O,EAAQ9N,EAAMiuP,MAAM98I,UAAWw+I,GAAUA,EAAMz5N,KAAOu3N,EAAKv3N,EAAE,EACnE,GAAGpoB,IAAU,GACX,OAKF,GAFA,MAAM2/O,EAAKmC,gCAER5vP,EAAMiuP,MAAMr6P,SAAW,EAAG,CAC3BszD,EAAQzoC,QAAO,EACf,MACF,CAEA,MAAMwvO,EAAQjuP,EAAMiuP,MAAM7wK,MAAK,EAC/B6wK,EAAMltJ,OAAOjzF,EAAO,CAAC,EAErB,IAAIw5K,EACDx5K,EAAQ9N,EAAM8N,MACfw5K,EAAWtnL,EAAM8N,MAAQ,EACjBA,IAAU9N,EAAM8N,QACxBw5K,EAAWxtK,KAAK22B,IAAIzwC,EAAM8N,MAAOmgP,EAAMr6P,OAAS,CAAC,GAGnDqM,EAAS,CACPguP,QACA,GAAI3mE,IAAajsK,QAAa,CAACvN,MAAOw5K,CAAS,CACjD,CAAC,EAEDmmE,EAAK3qP,QAAO,CACb,EACD2b,QAASA,IAAM,CACVze,EAAM48N,WAIT38N,EAAS,YAAa,EAAI,CAC3B,EACDovP,gBAAiBA,IAAM,CACrBpvP,EAAS,YAAcmvB,GAAM,CAACA,CAAC,CAChC,EACD7U,QAASA,CAACkzO,EAAMoC,IAAiB,CAC/BpC,EAAKv3N,GAAK25N,EAAa35N,GACvBu3N,EAAO+B,GAAgB/B,CAAI,EAC3BoC,EAAa/sP,QAAO,EACpB7C,EAAS,QAASD,EAAMiuP,MAAM98I,UAAWw+I,GAAUA,EAAMz5N,KAAO25N,EAAa35N,EAAE,EAAG71B,GAAUotP,CAAI,CAAC,CACnG,CACF,CAAC,EAEDxpP,SAAMgqP,MAAMpzO,QAAQqsC,EAAQnsC,GAAG,EAC/B9a,EAAS,QAAS,CAAC,EAEnB8C,GAAU,IAAM,CACd/C,EAAMiuP,MAAMpzO,QAAS4yO,GAASA,EAAK3qP,QAAO,CAAE,CAC9C,CAAC,EAEM,CAAC9C,EAAOknD,CAAO,CACxB,CAEA,MAAMsmM,GAAiB1kE,GAAa,EACpC,SAASgnE,GAAQ7rP,EAEd,CAMD,MAAM8rP,EAAYr1O,mBAEZ,CAAC1a,EAAOknD,CAAO,EAAI8oM,GAAc9mE,GAAWskE,EAAc,EAC1D,CAACyC,EAAcC,CAAe,EAAIhtP,GAA2B,CACjEuX,UACAC,OAAQA,GACV,CAAC,EAED0qE,GAAQ,IAAM,CACZ,MAAMh8D,EAAiB,IAAImD,GACrB8qN,EAAe,IAAItB,GAAa,CACpC3sN,iBACA+mO,eAAgB,CACdr8O,aACAi8O,YACAnnP,QAAS4uC,EACT6tJ,kBAAmBA,CAAC1kM,EAAG8X,IAAS,CAC9B,MAAMiB,EAAS/Y,EAAE+Y,OACjB,MAAGjB,MAAS,SACV,CAACkB,EAAgBD,EAAQwqD,GAAOmqL,aAAa,GAC7C10O,EAAgBD,EAAQwqD,GAAOopL,mBAAmB,GAClD3zO,EAAgBD,EAAQwqD,GAAOqpL,gBAAgB,GAMlD,EACD6C,gBACAC,gBAAiB,EAClB,EACDxpE,SAAWopE,GAAiB,CACvBjwP,EAAMi9J,WAITizF,EAAgBD,CAAY,CAC7B,EACDze,cAAeye,EAAa,CAC9B,CAAC,EAED3uP,GAAa,IAAM,CACjB,KAAM,CAAC20O,SAAQ,EAAGoB,EACZ,CAACp6E,WAAU,EAAGj9J,EACdswP,EAAiB,IACjBC,EAAkB,GACxBta,EAAQua,gBAAgB,CAACvzF,CAAS,EAClCg5E,EAAQwa,aACNxzF,EAAYqzF,EAAiBx8O,IAC7BmpJ,EAAYszF,EAAkBR,CAChC,EAEA,MAAMW,EAAuB7uP,GAAQouP,CAAY,EACjDha,EAAQj2O,MAAQi9J,EAAY,CAC1B,GAAGyzF,EACHj2O,MAAO61O,EACP51O,OAAQ61O,CACV,EAAI,CACF,GAAGta,EAAQj2O,MACXya,MAAOi2O,EAAqBj2O,MAC5BC,OAAQg2O,EAAqBh2O,OAEjC,CAAC,EAED3X,GAAU,IAAM,CACdqmB,EAAeygF,UAAS,EACxBwtI,EAAa54N,QAAO,CACtB,CAAC,CACH,CAAC,EAED,IAAI+4B,EACJ,MAAMvwB,GAAI,WAAAolF,EAAAhM,GAAA,EAAAoV,EAAApJ,EAAAt1F,WAAA0pD,EACEjpB,EAAG,cAAAipB,GAAA58C,cAAA48C,EAAA4rC,CAAA,EAAH70D,EAAG60D,EAAAr1F,EAAAq1F,EAAAl1F,EACVk3O,OAAa54I,CAAA,EAAAz+F,EAAAy+F,EAAAt+F,EAQX2pD,GAAG,KAACC,MAAI,QAAE/gE,EAAMiuP,KAAK,EAAA/qO,SAAIuqO,IACxB,WAAA53I,EAAAlyF,KAAA3M,SAAA6+F,EAOK43I,MAAKnxP,OAAO,EAAAka,OAAAiN,GAAAoyF,EALNlnG,GACLu1D,GAAOysL,YACP3wP,EAAMytP,OAASA,GAAQ,MACzB,CAAC,GAAA53I,CAAA,IAKN,IAAAr/F,GAAA6M,GAAA,OAAAq7K,EApBiB/vL,GAAWu1D,GAAO4rL,QAAS9vP,EAAMi9J,WAAa/4F,GAAO+4F,UAAW,iBAAiB,EAAC6hC,EAG7F56H,GAAO0sL,YAAW7xD,EAEhBkxD,IAAex1O,MAAQ,KAAIkmL,EAC1BsvD,EAAc,EAACv1O,OAASm2O,GAAmB,KAAInyD,WAAAr7K,EAAAq7K,OAAAj7K,GAAA4oF,EAAAhpF,EAAAq7K,OAAA,EAAAI,IAAAz7K,EAAAy7K,OAAAr7K,GAAAgyF,EAAApyF,EAAAy7K,OAAA,EAAAC,IAAA17K,EAAA07K,SAAA17K,EAAA07K,UAAA,KAAAtpF,EAAAj7F,MAAAkC,YAAAqiL,SAAA,EAAAtpF,EAAAj7F,MAAAkrJ,eAAA,UAAAi7B,IAAAt9K,EAAAs9K,SAAAt9K,EAAAs9K,UAAA,KAAAlrF,EAAAj7F,MAAAkC,YAAAikL,UAAA,EAAAlrF,EAAAj7F,MAAAkrJ,eAAA,WAAAriJ,CAAA,GAAAq7K,MAAArjL,OAAAyjL,MAAAzjL,OAAA0jL,MAAA1jL,OAAAslL,MAAAtlL,MAAA,GAAAgxF,MAmBzDylI,EAAQ36N,EACXkoD,GAAQ,CAAC5mD,KAAI,aAAcymD,KAAI,aAAcE,OAAM,OAAAl8C,UAAA,OACjD,CAACljB,EAAM48N,WAAa31M,CAAI,EAE5B,EAEKwZ,EAAQ29B,GAAa,IAAM0zK,CAAQ,EACzCxwO,UAAa,IAAM,CACbm/B,EAAK,GACPx8B,EAAMi4I,OAAM,CAEhB,CAAC,EAED/kI,EACG2sD,GAAM,CAAA5gD,SACJ4uN,CAAQ,EAGf,CAEA,SAAS0d,GAAgBvrP,EAA2C,CAClEA,SAAMiqP,aAANjqP,EAAMiqP,WAAe91M,GAAan0C,EAAMvP,MAAOm9J,EAAQ,GACvD5tJ,EAAMiyB,KAANjyB,EAAMiyB,GAAOpc,KAAK8oB,OAAQ,EAAC2+K,SAAS,EAAE,EAAEnkI,MAAM,CAAC,GAC/Cn5E,EAAM01M,cAAN11M,EAAM01M,YAAgB,IACtB11M,EAAM01M,YAAYp3L,KAAK,CACrBjF,KAAM,QACNriB,KAAM,QACNwtB,QAASA,IAAM,CACbunO,GAAY,CAAC,EAAE3rK,MAAMpgF,CAAK,CAC5B,CACF,CAAC,EACMA,CACT,CAEA,IAAI+rP,GACG,SAASc,GAAiBrD,EAAyB,CACxD,GAAGuC,GAAa,CACdA,GAAY,CAAC,EAAEj1O,IAAI0yO,CAAI,EACvB,MACF,CAEAtsP,GAAY2B,GAAY,CAGtB,MAAMiuP,EAAQxB,GAAmB,CAC/BtB,MAHgC,CAACR,CAAI,EAGxBxwO,OAAO2F,OAAO,CAC7B,CAAC,EAED,OAAAzL,EACGq2O,GAAexkE,SAAQ,CAAC39K,MAAO0lP,EAAK,IAAA7tO,UAAA,QAAA/L,EAClC24O,GAAO,CACN5zG,OAAQA,IAAM,CACZ8zG,GAAc30O,OACdvY,GACF,CAAC,KAIT,CAAC,CACH,CAEO,eAAekuP,GAAuB78P,EAA8B,CACzE,GAAG67P,IAAe77P,EAAQuO,SAAU,CAClC,MAAM+qP,EAAOuC,GAAY,CAAC,EAAE/B,MAAMtyO,KAAM8xO,GAASA,EAAK/qP,WAAavO,EAAQuO,QAAQ,EACnF,GAAG+qP,EAAM,CACPuC,GAAY,CAAC,EAAEtC,OAAOD,CAAI,EAC1B,MACF,CACF,CAEA,MAAM5sP,EAAWC,KACX,CAACwtP,EAAgB2C,CAAiB,EAAI/tP,GAAa,EAAK,EACxD,CAACub,EAASyyO,CAAU,EAAIhuP,GAAa,EAAK,EAC1CiuP,EAAS,IAAItJ,GAAO,CACxB,GAAG1zP,EACHq2E,OAAQ7jE,SAAS6Y,cAAc,KAAK,EACpC9qB,MAAOiS,SAAS6Y,cAAc,KAAK,EACnCykE,KAAMt9E,SAAS6Y,cAAc,KAAK,EAClC6mF,OAAQ1/F,SAAS6Y,cAAc,KAAK,EACpCqiI,UAAWA,IAAMqvG,EAAW,EAAI,EAChCE,aAAcH,CAChB,CAAC,EAEKv8P,EAAQ,MAAMy8P,EAAOE,SAAS,EAAI,EACxCF,EAAOzkO,KAAK,IAAM7rB,CAAQ,EAE1B,MAAMwd,EAAmBva,KACnBgU,EAASkM,GAAU,CACvB5vB,OAAQ+8P,EAAO12P,UAAW,EAC1BlF,KAAM,GACNQ,WAAYsoB,EAAiBxG,IAAI,CACnC,CAAC,EACD,aAAMC,EAAOsG,kBAENjd,GAAY2B,GAAY,CAC7B,MAAM6gL,EAAiC,CACrCjvL,QACA4oB,KAAMxF,EAAOhJ,KACb6qM,YAAaw3C,EAAOG,eAAgB,EACpCxuP,UACA8sP,4BAA6BuB,EAAOvB,4BACpCtzP,QAAO4a,GAEFi6O,MAAOltK,IAAI,EAAA/sE,EACXi6O,MAAO9qJ,MAAM,CAEjB,EACD,IAAIioJ,gBAAiB,CACnB,OAAOA,EAAc,CACtB,EACD1pF,YAAausF,EAAOvsF,YACpBliK,SAAUyuP,EAAOzuP,UAGnBK,GAAU,IAAMouP,EAAO1yO,QAAO,CAAE,EAEhCnd,GAAa,IAAM,CACdmd,EAAO,GACRuxO,GAAY,CAAC,EAAE3rK,MAAMs/F,CAAY,CAErC,CAAC,EAEDnrE,eAAe,IAAM33G,EAASiY,QAAO,CAAE,EAEvC,MAAMy4O,EAAYvB,KAAc,CAAC,EAC9BuB,GAAaA,GAAW9D,KAAK+D,YAC9BxB,GAAY,CAAC,EAAEz1O,QAAQopK,EAAcqsE,GAAY,CAAC,EAAEvC,IAAI,EAExDqD,GAAiBntE,CAAY,CAEjC,CAAC,CACH,CAEO,eAAeurE,IAA4B,CAChD,OAAO/tP,GAAY2B,GAAY,CAC7B,KAAM,CAAC6kM,EAAQ8pD,CAAS,EAAIvuP,GAAa,EAAI,EACvC,CAACmI,EAAOgkJ,CAAQ,EAAInsJ,GAAa,EAAE,EACnCkvB,EAAU,IAAIi0I,QACdqrF,EAAc,IAAIzvG,GAAmB,CAACgB,WAAY,EAAI,CAAC,EAEvDluH,EAAc,IAAIG,GAAY,CAClCuO,YAAa,kBACb/e,SAAWrZ,GAAU,CACnBA,EAAQA,EAAMu2D,OACdytF,EAAShkJ,CAAK,CACf,EACD62D,aAAc,IACdyvL,SAAU,EACZ,CAAC,EAED58N,EAAY7+B,UAAUokB,UAAUS,IAAImpD,GAAO0tL,sBAAsB,EAEjE,MAAM75O,EAASA,CAACs9L,EAAiBj4L,IAAsB,CACrD,MAAM3c,EAA2B,GAC3BiD,EAAM2xM,EAAOz4L,IAAKukB,GACtBhqB,EACGmpG,GAAW,CAAA9oE,IACJtxC,GAAOksB,EAAQjtB,IAAIe,EAAIi7B,CAAK,EAAC,IACnC/sC,QAAM,QAAE+sC,EAAMo5D,SAAS,EAAK,CAAC,EAC7B95F,SAAUA,EACV0oC,WAAY,EAAE,EAEnB,EAEDtwB,eAAQya,IAAI7yB,CAAQ,EAAE4Z,KAAK+C,CAAK,EACzB1Z,GAGHwf,EAAWA,CAACqG,EAA8Bo+K,KAC9C,WAAA5xF,EAAApyF,KAAA3M,SAAA++F,EACqFxsF,CAAK,EAAA/S,OAAAiN,GAAAsyF,EAA5EpnG,GAAWu1D,GAAO2tL,qBAAsBlqD,OAAczjI,GAAOyjI,MAAM,CAAC,GAAA5xF,CAAA,KAI9E+7I,EAAiBz8C,IACrBxzM,GAAQ,IAAM,CACZwzM,EAAOx6L,QAASsmB,GAAU,CACxB,MAAMxsC,EAAOo9P,GAAQ5wN,CAAK,EAC1BuwN,EAAYvuG,iBAAiBhiH,EAAO,CAACxsC,EAAKq9P,WAAYr9P,EAAKs9P,UAAW,GAAGn+P,GAAuBa,CAAI,CAAC,EAAEsoB,OAAO2F,OAAO,CAAC,CACxH,CAAC,CACH,CAAC,EAEMyyL,GAGH/rF,EAAMnyG,EACTkgC,GAAO,CAAC7oB,KAAI,sBAAuB0pB,SAAQ,OAAAh1B,UAAA,QAAA/L,EACzC+6O,GAAM,CACLx/M,OAAQA,IAAM,CACZ,MAAMxnC,EAAQG,IACd,MAAO,UAEE,CAAC,GADOqmP,EAAYpoI,OAAOp+G,CAAK,CACtB,CAEpB,EACD6M,OAAQA,EAAMmL,SAEbA,CAAQ,IAGd,EAEK+D,GAAI,WAAA+uF,EAAAryF,KAAA3M,SAAAg/F,EAAA7+F,EAEL+6O,GAAM,CACLx/M,OAAQA,IACC,SAAW,CAChB,MAAMv8C,EAAS,MAAM9B,EAAUG,SAASyiH,gBAAgBk7I,YAAY,UAAU,EAC9E,OAAOL,EAAc37P,EAAOymB,IAAKjoB,GAASA,EAAKuhC,GAAGqkE,SAAS,EAAK,CAAC,CAAC,GAGtExiF,OAAQA,EAAMmL,SAEZqG,GAAU,CACV,MAAMvyB,EAAW+mE,GAAgBx0C,CAAK,EAAE88B,QAClC+rM,EAAmB7xP,EAAW,IAAMvJ,EAAQ,EAAGpD,OAAS,CAAC,EAC/D,OAAIw+P,EAAgB,GAClBX,EAAU,EAAK,EAGjBt6O,EACGkgC,GAAO,CACN7oB,KAAI,oBACJspB,WAAS,QAAE5gC,EAAA,MAAAk7O,EAAgB,CAAE,iBAAAl8I,EAAAr/F,KAAAq/F,SAAA91C,QACZ,IAAMqxL,EAAW9pD,GAAW,CAACA,CAAM,EAAC3wL,EAAAk/F,EAChDv9G,MAAKgvM,EAAM,EAAK,oBAAsB,mBAAmB,CAAC,EAAAzxF,KAE9D,EACDh+D,SAAQ,OAAAh1B,UAAA,QAEPA,EAASqG,EAAOo+K,CAAM,CAAC,GAG9B,CAAC,SAAA3wL,EAAAg/F,EAAA7+F,EAEF+6O,GAAM,CACLx/M,OAAQA,IAAM,CACZ,IAAIxzC,EAAS,GACb,MAAO,UAAW,CAChB,MAAM/I,EAAS,MAAM9B,EAAUG,SAAS2gN,yBAAyBC,kBAAkBl2M,EAAQ,EAAE,EAC7FA,SAAS/I,EAAOwzE,WACTmoL,EAAc37P,EAAOmiC,OAAO,EAEtC,EACDvgB,OAAQA,EAAMmL,SAEZqG,GACOA,EAAK,GAAEpS,EACXkgC,GAAO,CAAC7oB,KAAI,mBAAoB0pB,SAAQ,OAAAh1B,UAAA,QACtCA,EAASqG,CAAK,CAAC,EAEnB,CACF,SAAAysF,MAKD2tE,EAAiC,CACrCjvL,MAAO,WACP4oB,KAAMimE,GAAQ,CAACjmE,KAAM,MAAM,CAAC,EAC5Bxa,UACAxG,QAAO6a,EACJkc,GAAU,oBAAQ6wC,GAAOmuL,0BAA0B,MAAAnvO,UAAA,OAAAkzF,EAAAzyF,KAAAyyF,SAAAh2C,QAGtCz/D,GAAM,CACd,MAAM+Y,EAASC,EAAgBhZ,EAAE+Y,OAAuB,0BAA0B,EAClF,GAAG,CAACA,EACF,OAGF,MAAMynB,EAAQ/O,EAAQva,IAAI6B,CAAM,EAChC6jG,GAAsB+0I,kBAAkB,CACtCvpP,EAAGk2E,GAAmBszK,QACtBC,QAAS,GACTC,OAAQ3+P,GAAuBi+P,GAAQ5wN,CAAK,CAAc,EAAE,CAAC,CAC/D,CAAC,GAEFnqB,EAAAo/F,EAEArhF,MAAY7+B,UAAS,MAAA8gB,EAAAo/F,EAAAj/F,EACrBkoD,GAAQ,CAAC5mD,KAAI,iBAAAyK,UAAA,QACX7X,EAAK,EAAKi+G,EAASriG,CAAI,UAAAzQ,OAAAiN,GAAA2yF,EAlBnBlyC,GAAOwuL,gBAAgB,GAAAt8I,CAAA,EAsBnC,EACDo7I,YAAa,IAGfV,GAAiBntE,CAAY,CAE/B,CAAC,CACH,CAEA,SAASuuE,GAAUjuP,EAKhB,CACD,MAAMyuC,EAASnyC,EAAW0D,EAAMyuC,MAAM,EAChC,CAACt1B,EAAOC,CAAQ,EAAIna,GAAa,EAAK,EACtC,CAACqpC,EAAUomN,CAAW,EAAIzvP,GAA4BmY,OAAW,CAAC26E,OAAQ,EAAK,CAAC,EAEhFwL,EAAY1lG,GAAoB,CACpC,MAAM82P,EAAUlgN,IACV,CAACv8C,EAAQ08P,CAAS,EAAI3vP,GAAY,EACxC0vP,EAAS,EAACv4O,KAAKw4O,CAAS,EAExBp3I,GAAe,IAAM,CACnB,MAAMgG,EAAUA,IAAM,CACpBkxI,EAAavjO,GAEF,CAACmd,CAAQ,CAInB,EAEDtoC,EAAMw9G,UAAO,EACbpkG,EAAS,EAAI,GAGf,IAAIk/H,EAAW,GACf,MAAMhwG,EAAWtoC,EAAM8T,OAAO5hB,EAAQ,EAAE,IAAM,CACzComJ,EACD96B,IAEA86B,EAAW,EAEf,CAAC,EAEEA,EACD96B,IAEA86B,EAAW,GAEd,EAAEpmJ,CAAM,GAGXmL,UAAaC,GAAGmxC,EAAQ,IAAM8uD,EAAa,CAAC,CAAC,EAE7CtqF,GAAA,WAAAD,EAAAC,EAEKkG,QAAO,aAAPnG,EAAWhT,KAAMif,SAASqpB,CAAQ,CAAC,KAG1C,CAAC61B,GAAA,WCltBW,IAAA43F,QACVA,EAAA84F,EAAA,uBACA94F,EAAA84F,EAAA,eACA94F,EAAA84F,EAAA,qBAHU94F,QAAA,IAML,MAAM+4F,WAAqBrtO,EAM/B,CANI,kCAOE,cAAW,SAAS,eAAe,eAAe,EAGzD,KAAO,QAAU,GACjB,KAAO,qBAAuB,EAI9B,KAAO,eAAgC,KAIvC,KAAO,MAAgB,GAYhB,kBAAe,IAAIstO,GAAuB,aAAa,EAyiCtD,kBAAgBC,GAAwB,CAC1C,IACF,KAAK,mBAAmBA,CAAS,QAC3B1tP,EAAK,CACN,SAAI,MAAM,oBAAqBA,CAAG,CACzC,GAGM,wBAAsB0tP,GAAwB,CACpD,MAAM7/J,EAAO,SAAS,KAClB6/J,GACF/sO,GAAwB,aAAa,EAGjC,MAAAtqB,EAAWw3F,EAAK,MAAM,GAAG,EACzB3xC,EAASoyC,GAAeT,EAAMx3F,CAAQ,EAE5C,GADA,KAAK,IAAI,aAAcw3F,EAAMx3F,EAAS,CAAC,EAAG6lD,CAAM,EAC7C,EAAC2xC,EAIJ,IAAG3xC,EAAO,OAAQ,CAChBv7B,GAAwB,aAAa,EAChC,aAAQu7B,EAAO,MAAM,EAC1B,MACF,CAEO,OAAA7lD,EAAS,CAAC,EAAG,CAClB,QACE6lD,EAAO,EAAI7lD,EAAS,CAAC,EAAE,MAAM,CAAC,EAGhC,IAAK,OAAQ,CACX,GAAG,CAAC,OAAO,KAAK6lD,CAAM,EAAE,OACtB,MAGF,MAAM9qD,EAAY8qD,EAAO,EACnBm6D,EAASn6D,EAAO,OAAS,OAAY,CAACA,EAAO,KAAO,OACpDyxM,EAAYt3I,IAAWn6D,EAAO,UAAY,OAAY,CAACA,EAAO,QAAU,QACxEhtD,EAAWgtD,EAAO,SAAW,OAAY,CAACA,EAAO,OAAS,OAEzD,OAAA9qD,EAAE,CAAC,EAAG,CACX,IAAK,IAAK,CACR,KAAK,aAAa,CAChB,SAAUA,EACV,UAAWu8P,EACX,SAAAz+P,CAAA,CACD,EACD,KACF,CAEA,QAAS,CACP,MAAML,EAASwnH,EAASjlH,EAAE,SAAS,EAAI,EAAIA,EAAE,WAC7C,KAAK,SAAS,gBAAgB,QAAQvC,CAAM,EAAE,KAAML,GAAS,CAC3D,KAAK,GAAG,CACN,KAAAA,EACA,UAAWm/P,EACX,SAAAz+P,CAAA,CACD,EACF,EACD,KACF,CACF,CACF,CACF,IAMK,yBAAuBiJ,GAA6B,CACzD,MAAM2qH,EAAmB3qH,EAAQ,iBAC3BF,EAAUM,GAAQuqH,EAAiB,GAAG,EAC5C,KAAK,wBAAwB3qH,CAA0B,EAEpDF,EAAQ,QACT,KAAK,KAAK,aAAa,QAAQ6qH,EAAiB,GAAG,EAEnDo2C,GAAejhK,EAAQ,GAAG,CAC5B,EAycF,KAAQ,YAAc,IAAM,CACpB,MAAC,iBAAA21P,CAAgB,EAAI9+P,EAAU,SAErC,KAAK,gBAAkBof,GAAc0/O,EAAmB,EAAGA,EAAmB,CAAC,EAC/E,SAAS,gBAAgB,MAAM,YAAY,uBAAwBA,EAAmB,IAAI,EAExE,CAAC,KAAK,kBAEG,SAAS,iBAAwC,yBAAyB,EAClF,QAASvqP,GAAY,CACpCA,EAAQ,qBAAqB,EACrBA,EAAA,QAAQ,SAAW,GAAKuqP,EAC7BvqP,EAAQ,QAAOA,EAAQ,YAAcA,EAAQ,OAChDA,EAAQ,kBAAkB,EAC3B,EAEiB,SAAS,iBAA6C,qCAAqC,EACnG,QAAS++D,GAAa,CAC9BA,EAAS,qBAAuB,GACjC,GAGM,cAAK,UAAU,OAAO,oBAAqB,CAAC/2D,GAAS,YAAY,YAAY,CAAC,EACvF,SAAS,KAAK,UAAU,OAAO,oBAAqB,EAAK,EACzD,SAAS,KAAK,UAAU,OAAO,oBAAqBA,GAAS,YAAY,YAAY,CAAC,EAEjF,6BAA0BmsB,GAAS,IAAM,CAC7B,KAAK,KAAK,OAClB,eAAe,gBAAgB,CAAC,EAEvC,KAAK,SAAS,eAAe,WAAW,KAAK,KAAK,QAAQ,cAAc,OAAO,GAC9EnsB,GAAS,YAAY,YAAY,EAAI,IAAM,EAAG,GAAO,EAAI,EAEtD,MAAAvD,EAAmB,CAAC,gBAAiB,gBAAgB,EACrD+lP,EAAc/rM,GAAqB,QAAQhzD,EAAU,SAAS,SAAS,IAAI,EAC3Eg/P,EAAkB,CAAC,CAAChmP,EAAE,OAAQjD,GAAQi9C,GAAqB,YAAYz2C,GAAS,YAAYxG,CAAG,EAAGA,CAAG,CAAC,EAAE,QAC3GgpP,GAAeC,IAChBhsM,GAAqB,iBAAiB,EAAK,EAGnC,UAAA7rB,KAAQ,KAAK,MACrBA,EAAK,qBAAqB,EAGvB3mC,GAAA,cAAcR,EAAU,SAAS,UAAU,EAE3C,iCAA4B,KAAK,IAAI,GA8NpC,qBAAkB,MAAM,EAA+Bi/P,IAAsC,CACnG,MAAM73E,EAAgB9O,KAKtB,GAAG,aAAa,UAAW,CACnB,MAAA4mF,EAAS,EAAE,aAAa,OAEdA,EAAO,SAAWA,EAAO,SAAS,OAAO,EAAIA,EAAO,QAAQ,OAAO,GAAK,IAEtFviP,GAAY,CAAC,CAEjB,CAEM,MAAA67J,EAAQ,MAAMg6E,GAAkB,CAAC,EACvC,GAAG,GAAE,MAAM,KAAK,WAAc,CAACprE,IAC5B5O,EAAM,OAAQ,CACf,GAAG4O,EAAe,CAChBA,EAAc,SAAS5O,CAAK,EAC5B,MACF,CAEM,MAAA7nH,EAAY,KAAK,KAAK,MAClBA,EAAA,eAAiBsuM,IAAetjK,GAA2B,IAAI68E,EAAM,CAAC,EAAE,IAAI,EAAI,QAAU,YACpG3oJ,GAAa,YAAY0oJ,GAAe,KAAK,KAAMC,EAAO7nH,EAAU,cAAc,CACpF,GAuqBK,yBAAsB,MAAM,CAAC,MAAA/uC,EAAO,UAAA/f,EAAW,SAAA1B,EAAU,OAAAJ,EAAQ,WAAA2B,KAMlE,CACJib,GAAYiF,CAAK,EAEX,MAAAsjC,EAAS5/B,EAAgBzjB,EAAW,QAAQ,EAC5CoF,EAAQpF,EAAU,QAAQ,aAE1BqwC,EAAarwC,EAAU,UAAU,SAAS,cAAc,EAA2C,OAAvCiW,GAAa,aAAajW,CAAS,EACrG,GAAGqwC,GAAW,OAAQ,CACpB,MAAMlwC,EAAM,MAAM7B,EAAS,mBAAmB,8BAA8B8G,CAAK,EACjF,GAAGjF,EAAK,CACA,MAAAg3D,EAAQ,SAAS,cAAc,OAAO,EAC5CA,EAAM,MAAM,QAAU,OACZn3D,EAAA,cAAc,OAAOm3D,CAAK,EAEhC,IACF,MAAMxvD,EAAM,MAAMsX,GAAmB,iBAAiB,CAAC,MAAO9e,EAAI,EAElEg3D,EAAM,IAAMxvD,EACZ0sD,GAAS8C,CAAK,EACR,MAAAtF,GAAYsF,EAAO,OAAW,EAAI,EAElCA,EAAA,iBAAiB,QAAS,IAAM,CACpCA,EAAM,IAAM,GACZA,EAAM,OAAO,GACZ,CAAC,KAAM,GAAK,OACJ,CAEb,CACF,CAEA9mB,EAAU,SAAW,GACrBA,EAAU,QAAQ,CACpB,CAEG,IAACnyC,EAAO,OAAO,GAAK,CAACwc,GAAS,YAAY,eAAe,EACnD,SAGT,MAAM4iP,EAA6Bt9P,EAAkB,mBAAlBA,EAAkB,iBAAqB,IAAI,KAC3E,GAAAs9P,EAAiB,MAAQ,EACnB,SAGT,MAAMn9P,EAAM,MAAM7B,EAAS,mBAAmB,wBAAwB8G,EAAO,EAAI,EACjF,GAAG,CAACjF,EACK,SAGH,MAAA8hB,EAAyCjiB,EAAkB,YAAlBA,EAAkB,UAAc,CAC7E,EAAG,CAAC,EACJ,EAAG,IAGCu9P,EAAwCv9P,EAAkB,2BAAlBA,EAAkB,yBAA6BmgE,GAAS,IAAM,CAE1G,GAAG,CADYl+C,EAAK,EAAE,OAEpB,OAGF,MAAMixC,EAAYjxC,EAAK,EAAE,CAAC,EAAE,EAEvBA,EAAA,EAAE,QAASrb,GAAM,CAClBA,EAAA,GAAKA,EAAE,EAAIssD,GAAa,IAC3B,EAED,KAAM,CAAC,OAAAh1D,EAAQ,SAAAK,CAAA,EAAY,KAAK,KAE1B8kD,EAAS5/B,EAAgBzjB,EAAW,QAAQ,EACzC1B,EAAA,mBAAmB,UAAUJ,EAAQ,CAC5C,EAAG,8BACH,OAAQk9F,GAAmB,CAAC/3C,EAAO,QAAQ,GAAG,EAC9C,SAAUj+C,EACV,YAAa,CACX,EAAG,WACH,KAAM,KAAK,UAAU6c,CAAI,CAC3B,GACC,GAAM1jB,CAAQ,EAEjB0jB,EAAK,EAAE,OAAS,GACf,IAAM,EAAK,GAER1gB,EAAI,GACV+7P,EAAiB,IAAI/7P,CAAC,EAEtB,MAAMwc,EAAQslC,EAASA,EAAO,UAAU,SAAS,QAAQ,EAAI,OACvD,CAAC,aAAA09B,CAAY,EAAIC,GAAqB,CAC1C,IAAA7gF,EACA,WAAAN,EACA,KAAMke,EAAQ,QAAU,OACxB,KAAM,IACN,OAAQ/d,EACR,KAAM,GACN,iBAAkB,GAClB,UAAW,IAAM,CACfs9P,EAAiB,OAAO/7P,CAAC,CAC3B,EACA,WAAY,KAAK,KAAK,QAAQ,WAC/B,EAEE,OAAAwc,IAAU,QAAa,CAACA,GACZgjE,EAAA,UAAU,IAAI,WAAW,EAIrChhE,EAAM,YACPkC,EAAK,EAAE,KAAK,CACV,EAAG,EACH,EAAG,KAAK,IAAI,EACb,EAEwBs7O,KAGpB,GAET,CAroFA,IAAI,MAAO,CACT,OAAOp/P,EAAU,IACnB,CAEA,IAAI,MAAa,CACf,OAAO,KAAK,MAAM,KAAK,MAAM,OAAS,CAAC,CACzC,CAEO,UAAUG,EAAuB,CACtC,KAAK,SAAWA,EAChB+oH,GAAsB,UAAU/oH,CAAQ,EAElC,MACJ,kBAAAk/P,CACE,EAAAl/P,EACck/P,EAAA,OAAO7+P,GAAK,qBAAqB,EAEnD6zD,GAA2B,UAAUl0D,CAAQ,EAC7CoyP,GAAuB,UAAUpyP,CAAQ,EACzCoyP,GAAuB,MAAM,EAExB,SAAM5xN,GAAO,KAAMyF,GAAS,IAAMA,GAAS,KAAOA,GAAS,MAAQA,GAAS,KAAK,EAEtF,KAAK,mBAAqB,GAC1B4kM,GAAW,SAAS,OAAO,QAASznE,GAAU,CAC5C,MAAM0nE,EAAgB1nE,EAAM,SAC5B,GAAG,CAAC0nE,EACF,OAGI,MAAC,UAAAK,CAAa,EAAAL,EACdx5H,EAAQ65H,EAAkC,KAChD,GAAG,CAAC75H,EACF,OAGF,MAAMjoG,EAAM,cAAgBioG,EAAO,QAAU6oC,GAAa,KAAO,IACjE,KAAK,wBAAwB,CAAC,KAAA7oC,EAAM,IAAAjoG,CAAI,GACzC,EAED,KAAK,UAAU,GAEAwzH,GAAA,iBAAiB,SAAWynD,GAAS,CAClD,KAAK,QAAUA,EACf,KAAK,aAAa,EACfA,EACD,cAAc,KAAK,oBAAoB,EAEvC,KAAK,qBAAuB,OAAO,YAAY,IAAM,KAAK,eAAgB,GAAI,CAChF,CACD,EAEI,oBAAiB,SAAS,cAAc,KAAK,EAClD,KAAK,eAAe,UAAU,IAAI,kBAAmB,gBAAgB,EAChE,oBAAe,QAAQ,UAAY,aAEnC,mCAA8BhjL,GAAW,YAAY,EAErD,cAAS,OAAO,KAAK,cAAc,EAExC,KAAK,cAAc,EACd,oBAAe,KAAK,KAAK,SAAS,EAEvCowB,GAAwB,aAAe,KAAK,aAG5C,KAAK,YAAY,EACP7xB,EAAA,iBAAiB,mBAAoB,KAAK,WAAW,EAEzD,MAAAwoO,EAAmBr5N,GAAuB,CAC3C,SAAS,KAAK,UAAU,SAAS,YAAY,IAAMA,IAItD,SAAS,KAAK,UAAU,OAAO,aAAcA,CAAS,EACjD,mBAAc,iBAAkBA,CAAS,IAEtCnP,EAAA,iBAAiB,iBAAkBwoO,CAAe,EAC5DA,EAAgBxoO,EAAU,OAAO,EACjC,KAAK,SAAS,UAAU,WAAW,EAAE,KAAKwoO,CAAe,EAEzDtuG,GAAuB,IAAM,CAC3BlnE,GAAqB,wBAAwB,MAAM,EACnDA,GAAqB,iBAAiB,EAAI,GACzC,IAAM,CACPA,GAAqB,wBAAwB,EAC7CA,GAAqB,iBAAiB,EAAK,EAC5C,EAEDx5C,GAAgB,iBAAmBqyN,GAEhCvxF,IAAc/5I,GAAgB,YAAc++P,GAAe/+P,GAAgB,WAAY,OAAO,IAAM,GAChG,0BAAsBykC,GAClBA,EAAS,QAAQ,IAAI,cAAc,IAAM,eACjD,EAAE,KAAK,IAAM,CACZ,KAAK,kBAAkB,CAAC,WAAY,EAAK,GAC1C,EAED,KAAK,kBAAkB,CAAC,WAAY,EAAK,GAI3CvjC,GAAW,iBAAiB,eAAgB,CAAC2sB,EAAMi3B,IAAO,CACrD,SAAS,KAAK,UAAU,SAAS8qG,EAA4B,GAC9D,SAAS,KAAK,UAAU,SAASE,EAA6B,GAC9Dv6E,GAAgB,cAAc,EAAK,EAGrC,KAAK,8BAA8BzwB,CAAE,EACtC,EAEU5jD,GAAA,iBAAiB,SAAU,IAAM,CAEpC,MAAA4xB,EAAO,KAAK,eAAe,sBAAsB,EACvD0iI,GAA8B,gBAAgB1iI,EAAK,MAAOA,EAAK,MAAM,EAAE,KAAK,IAAM,EAOjF,EACF,EAEK,MAAAqnD,EAAkBvzC,GAAe,CACrC,KAAK,iBAAiBA,CAAI,GAGtBwzC,EAAgB,IAAM,CAC1B,KAAK,iBAAiB,gBAAiBD,EAAgB,CAAC,KAAM,GAAK,GAGhE,sBAAiB,eAAgBC,CAAa,EAEzC36E,EAAA,iBAAiB,gBAAiB,IAAM,CAChD,KAAK,kBAAkB,CACrB,eAAgB,GAChB,WAAY,GACZ,cAAe,GAChB,EACF,EAESA,EAAA,iBAAiB,mBAAqBu/P,GAAa,CACtD,8BAAyB,CAACA,CAAQ,EACxC,EAEDv/P,EAAU,iBAAiB,kBAAmB,CAAC,CAAC,OAAAD,EAAQ,SAAAK,KAAc,CACjE,KAAK,MAAM,SAAWL,GAAU,CAACK,GAAY,KAAK,QAAU,QAC7D,KAAK,aAAaL,CAAM,CAC1B,CACD,EAEDC,EAAU,iBAAiB,eAAgB,CAAC,CAAC,OAAAD,EAAQ,QAAAy/P,KAAa,CAChE,MAAMr4N,EAAO,KAAK,KAClB,GACE,CAACA,GACDA,EAAK,SAAWpnC,GAChB2zB,GAAe,iBACbjyB,GAAW,eAAiBw+D,GAAW,QACvC,KAAK,QAAU,EAGjB,OAGI,MAAAw/L,EAASD,EAAQ,KAAMC,GAAWA,EAAO,OAAO,IAAM,6BAA6B,EACtF,GAAAA,GAAQ,QAAQ,IAAM,8BAA+B,CACtD,MAAMn2P,EAASm2P,EAAO,OAChBv6M,EAAS/d,EAAK,QAAQ,UAAUpnC,EAAQ0/P,EAAO,OAAO,MAAM,EAClE,GAAGv6M,GAAUA,EAAO,UAAU,SAAS,WAAW,GAAKE,GAAeF,EAAQ/d,EAAK,QAAQ,WAAW,SAAS,EAAG,CAC1G,MAAAutF,EAA8BxvE,EAAO,cAAc,mFAAmF,EAE9F,KAAK,MAAM57C,EAAO,YAAY,IAAI,EAC3E,EAAE,QAASb,GAAM,CACpB,WAAW,IAAM,CACf4tC,GAAmBq+E,CAAc,GAChCjsH,EAAE,EAAI,GAAI,EACd,EAEI,cAAS,mBAAmB,UAAU1I,EAAQ,CACjD,EAAG,kCACH,SAAUuJ,EAAO,SAClB,CACH,CACF,EACD,EAEDtJ,EAAU,iBAAiB,gBAAiB,CAAC,CAAC,OAAAD,EAAQ,MAAAklC,KAAW,CAC/D,GAAGA,EAAM,KAAK,SAAS,eAAe,EAAG,CACvC,MAAMxK,EAAO,CAACwK,EAAM,KAAK,MAAM,GAAG,EAAE,MAClBoH,GAAA,CAChB,aAAc,WACd,OAAAtsC,EACA,mBAAoB,eACpB,oBAAqB,CAAC4E,GAAyB81B,CAAI,CAAC,EACpD,OAAQ,CACN,QAAS,KACT,SAAU,EACZ,EACD,CACH,EACD,EAEDz6B,EAAU,iBAAiB,qBAAsB,CAAC,CAAC,cAAA0/P,EAAe,SAAAC,KAAc,CACxE,MAAC,KAAAvtN,CAAI,EAAIs0C,GAAY,CACzB,KAAM,gBACN,MAAOpiF,EAAKq7P,EAAW,qBAAuB,sBAAsB,EACpE,YAAar7P,EAAKq7P,EAAW,wBAA0B,0BAA2B,CAChFvqN,GAAe,IAAM,CACdhD,IACLmE,GAAa,KAAK,CAAC,QAAS,iBAAkB,GAC/C,EACDmpN,CAAA,CACD,EACD,SAAU,KAAK,KAAK,QAAQ,UAC5B,KAAM,MACN,SAAU,IACX,EACF,EAEK,MAAAE,EAAyBr1P,GAAqC,CAClE,MAAMs1P,EAAYt1P,IAAW,UACvBgiC,EAAQ1c,GAAa,YAAYA,GAAc,6BAA8B,CAAC,gBAAiB,GAAK,EACpG7W,EAAI,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gCAAgC,EAC/CuzB,EAAc,UAAU,YAAYvzB,CAAC,EAEhC,MAAAm9D,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,QAAQ,EAC7BA,EAAO,OAAO7xE,EAAKu7P,EAAY,4BAA8B,mBAAmB,CAAC,EAE3E,MAAAlnO,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,UAAU,EACjCA,EAAS,OAAOr0B,EAAKu7P,EAAY,+BAAiC,sBAAsB,CAAC,EAEvF7mP,EAAA,OAAOm9D,EAAQx9C,CAAQ,EAEhB,cAAK,UAAU,IAAI,aAAa,EAEnC,MAAArG,EAAUutO,EAAY,IAAM,CAChCxN,GAAkB,OAAO,GACvB,IAAM,CACC,cAAK,UAAU,IAAI,uBAAuB,EAEnDryN,GAAe,iBAAiB,EAEhC,WAAW,IAAM,CACf,SAAS,KAAK,UAAU,OAAO,cAAe,uBAAuB,GACpE,GAAG,GAGFuM,EAAA,iBAAiB,QAASja,CAAO,EACvCia,EAAM,KAAK,GAGEvM,GAAA,iBAAiB,cAAe4/N,CAAqB,EACjE5/N,GAAe,mBAChB4/N,EAAsB5/N,GAAe,iBAAiB,EAIxD,KAAK,iBAAiB,gBAAiB,CAAC,CAAC,GAAAqlB,KAAQ,CAC/C,KAAK,4BAA4BA,CAAE,EACpC,EAESrlD,EAAA,iBAAiB,uBAAyBw2C,GAAW,CAC3CnK,GAAA,CAChB,OAAQ,CAAC,QAAS,KAAM,SAAU,EAAI,EACtC,YAAapjC,GAAautC,EAAO,OAAO,EACzC,EACF,EAEDx2C,EAAU,iBAAiB,eAAgB,MAAM,CAAC,OAAAD,EAAQ,IAAA2N,EAAK,eAAAoyP,KAAoB,CACjF,MAAMz2P,EAAU,MAAM,KAAK,SAAS,mBAAmB,iBAAiBtJ,EAAQ2N,CAAG,EACnF,GAAG,CAACrE,EACF,OAGF,MAAMC,EAASw2P,EAAe,OACrBvtO,GAAA,CACP,YAAa,kBACb,kBAAmB,CACjB9sB,GAA2B6D,EAAO,aAAcA,EAAO,QAAQ,EAC/D5I,GAAgB2I,EAA4B,MAA2C,KAAK,CAC9F,EACD,EACF,EAEA,OAAe,eAAkBiD,GAAkB,CAClD,MAAMyzP,EAAUz6O,EAAgBhZ,EAAE,OAAQ,SAAS,EAC7C0wE,EAAgB13D,EAAgBy6O,EAAS,oBAAoB,GAAKA,EAAQ,cAE1E/jP,EAAY,qBACZ61D,EAAYmL,EAAc,UAAU,SAAShhE,CAAS,EACxD61D,IACFl1D,GAAYrQ,CAAC,EAEVqlB,KAAqB,SACf,wBAAiB,QAAShV,GAAa,CAAC,QAAS,GAAM,KAAM,GAAK,GAI7E,MAAM3Z,EAAW,IAAM,EACjBg9P,EAAe,IACf5jP,EAAWy1D,EAAgB,EAAJ,EAC1Bz1D,GACa4gE,EAAA,UAAU,IAAI,aAAa,EAGrC,MAAAijL,EAAiBjjL,EAAc,QAAQ,eAC1CijL,IAAmB,OACpB,aAAa,CAACA,CAAc,EAC5B,OAAOjjL,EAAc,QAAQ,gBAGjBjhE,GAAA,CACZ,QAASihE,EACT,UAAAhhE,EACA,SAAU,GACV,SAAAhZ,EACA,gBAAiB,IAAM,CACrBg6E,EAAc,QAAQ,eAAiB,GAAK,OAAO,WAAW,IAAM,CACpDjhE,GAAA,CACZ,QAASihE,EACT,UAAAhhE,EACA,SAAU,GACV,SAAAhZ,EACA,gBAAiB,IAAM,CACPg6E,EAAA,UAAU,OAAO,aAAa,EAC5C,OAAOA,EAAc,QAAQ,cAC/B,EACD,GACAgjL,CAAY,CACjB,EACA,QAAA5jP,CAAA,CACD,GAGM,0BAAiB,YAAc9P,GAAM,CAC5C,MAAM4zP,EAAsB56O,EAAgBhZ,EAAE,OAAQ,uBAAuB,EAC1E,IAAC4zP,GACFA,EAAoB,UAAU,SAAS,cAAc,GACrD56O,EAAgBhZ,EAAE,OAAQ,WAAW,EACrC,OAGiB0mD,GAAqB,cAAcktM,CAAmB,GAC7D,QAASx8L,GAAkB,CAC/B,MAAC,YAAAy8L,EAAa,UAAAjuN,CAAa,EAAAwxB,EAC9B,CAACy8L,GAAe,CAACjuN,GAAW,QAAU31B,GAAS,YAAY4jP,CAAW,IAItEjuN,aAAqB6zB,GACtB7zB,EAAU,cAAc,EAExBA,EAAU,KAAK,EACjB,CACD,EACF,EAEDlyC,EAAU,iBAAiB,kBAAmB,CAAC,CAAC,KAAAokB,EAAM,MAAAotD,KAAW,CAC5DptD,IAAS,QACDmO,GAAA,CACP,YAAai/C,EAAQ,mBAAqB,uBAC3C,EACQA,GACAj/C,GAAA,CACP,YAAa,oBACd,CACH,CACD,EAEDvyB,EAAU,iBAAiB,cAAe,CAAC,CAAC,MAAAogQ,KAAW,CACrD7tO,GAAS,CAAC,YAAa6tO,EAAQ,eAAiB,yBAA0B,GAC3E,EAEe7/P,GAAA,iBAAiB,oBAAqB,MAAMT,GAAY,CAChE,MAAAwX,EAAU,MAAM,KAAK,SAAS,gBAAgB,QAAQxX,EAAQ,QAAQ,MAAM,EAC5EM,EAAWu7E,GAAmB77E,EAAQ,QAASwX,CAAO,EACzD,KAAK,KAAK,SAAWxX,EAAQ,QAAQ,QAAU,KAAK,KAAK,WAAaM,GAAY,CAAC48H,GAAe,QAIrGu1H,GAAuB,uBAAuBzyP,CAAO,EACtD,EAED,KAAK,iBAAiB,eAAgB,MAAM,CAAC,OAAAC,KAAY,CACvD,SAAS,KAAK,UAAU,OAAO,WAAY,CAAC,CAACA,CAAM,EAEnDsgQ,GAAwB,YAAc,GAEtC,KAAK,aAAatgQ,CAAM,EAExBQ,GAAgB,eAAe,cAAe,KAAK,MAAM,IAAK4mC,GAASA,EAAK,MAAM,EAAE,OAAO,OAAO,CAAC,EACpG,EAGYm5N,GAAA,WAAW,gBAA4B,CAAC,IAGlDntI,IAAqBzL,MACjB,gBAAa,IAAImoI,GAAW1vP,CAAQ,GAGxCgzH,KACe6zH,GAAA,iBAAiB,WAAY,CAAC,CAAC,SAAAltK,CAAA,IAAgC,CAK7E,MAAMvtC,EAAQ1c,GAAa,YAAYk0N,GAAWjqK,CAAQ,EAEjDA,EAAA,iBAAiB,qBAAsB,IACvC,KAAK,mBAAmBA,EAAS,mBAAmB,WAAY,OAAQ,OAAWA,CAAQ,EACjG,KAAK,KACYktK,GAAA,cAAc,YAAaltK,CAAQ,EAC5C,GACR,EACA,MAAM,IAAM,EAAK,CACnB,EAEKvtC,EAAA,iBAAiB,QAAS,IAAM,CACpC,MAAM88G,EAAc29F,GAAgB,YACjC39F,GAAeA,IAAgBvvE,GAAY,CAACA,EAAS,iBACtDA,EAAS,OAAO,4BAA4B,CAC9C,EACC,CAAC,KAAM,GAAK,EAEfvtC,EAAM,KAAK,EACZ,EAEey6M,GAAA,iBAAiB,eAAgB,MAAM1gP,GAAW,CACvDisB,GAAA,CACP,YAAa,uBACb,kBAAmB,CACjB,MAAM7f,GAAc,CAAC,OAAQpM,EAAO,WAAW,CACjD,EACD,EACF,GAKH05B,GAAe,iBAAiB,EAEhC,MAAMugO,EAAgB,IAAM,CAC1BC,GAAqB,cAAc,EAAI,GAKtCC,IAAsB,0BAAiB,mBAAoB,IAAM,CAClE,GAAG,SAAS,OACV,OAGe,MAAM,KAAK,SAAS,iBAAiB,QAAQ,CAAC,EACtD,QAAS14O,GAAW,CACrB,MAAAlD,EAAUkD,EAAO,WAAW,IAAI,EACtC,GAAG,CAAClD,EACF,OAGF,MAAM67O,EAAe77O,EAAQ,UAC7BA,EAAQ,UAAY,cACpBA,EAAQ,SAAS,EAAG,EAAG,EAAG,CAAC,EAC3BA,EAAQ,UAAY67O,CAAA,CACrB,EACF,EAED,YAAYH,EAAevqP,EAAO,EACpBuqP,IAEd,KAAK,SAAS,oBAAoB,uBAAuB,KAAM/uK,GAAS,CACtEtE,GAAkB,OAAO,EAAGA,GAAkB,OAAQ,GAAGsE,CAAI,EAC9D,EAED,KAAK,aAAa,EAAI,EACtB,KAAK,sBAAsB,EAC3B,KAAK,mBAAmB,EACxB,KAAK,uBAAuB,EAC5B,KAAK,iBAAiB,EACtB,KAAK,cAAc,EACnB,KAAK,KAAK,CAGZ,CAEQ,eAAgB,CACtB,MAAMmvK,EAAQpgQ,GAAgB,MAC3BogQ,IACDpgQ,GAAgB,MAAQ,OACxBsvB,GAAa,YAAYqvD,GAAc,OAAW,MAAMn/E,EAAQK,IAAa,CAExE,GADH,MAAM,KAAK,QAAQ,CAAC,OAAAL,EAAQ,SAAAK,CAAS,GAClCugQ,EAAM,OAAO,OAAQ,CAChB,MAAAC,EAAaD,EAAM,MAAM,KAAMhoF,GAASh9E,GAA2B,IAAIg9E,EAAK,IAAI,CAAC,EAC1E9oJ,GAAA,YAAY0oJ,GAAe,KAAK,KAAMooF,EAAM,MAAOC,EAAa,QAAU,UAAU,OAE5F,cAAS,mBAAmB,SAAS,CAAC,OAAA7gQ,EAAQ,KAAM4gQ,EAAM,KAAK,CACtE,CACD,EAEL,CAEA,MAAa,uBAAuB,CAClC,MAAA7zN,EACA,mBAAA+zN,EACA,eAAAC,CAAA,EACmD,CAC7C,MAAA/gQ,EAAS+sC,EAAM,WACrB,GAAGg0N,EAAgB,CACjB,MAAM1wO,EAAgE,CACpE,KAAM,0BACN,SAAU,CAACnnB,GAAazI,GAAK,OAAO,sBAAuB,EAAI,CAAC,CAAC,GAGnE,OAAO6rC,GAAkB,CACvB,aAAc,aACd,mBAAoB,8BACpB,SAAAjc,EACA,OAAQ,CACN,QAAS,WACT,iBAAkBA,CACpB,EACD,CACH,CAEA,OAAOic,GAAkB,CACvB,MAAO,MAAM35B,GAAc,CAAC,OAAA3S,EAAO,EACnC,mBAAoB,4BACpB,SAAU8gQ,EAAqB,CAC7B,KAAM,iBACN,SAAU,CAAC,MAAMnuP,GAAc,CAAC,OAAA3S,CAAO,EAAC,EACxC,QAAS,EACP,SACJ,OAAQ,CACN,QAAS,0BACX,EACA,OAAAA,CAAA,CACD,CACH,CAEA,MAAa,qBAAqB+sC,EAAc,CACxC,MAAAnhC,EAAQ,MAAMpL,GAAgB,WAC9BoL,EAAA,kBAAkB,KAAKmhC,CAAK,EAClC,MAAM,KAAK,SAAS,gBAAgB,YAAY,oBAAqBnhC,EAAM,iBAAiB,CAC9F,CAEA,MAAa,kBAAkB7L,EAKV,CACb,MAAA6L,EAAQ,MAAMpL,GAAgB,WACjC,GAAAT,EAAQ,sBAAwBA,EAAQ,gBAAkB,CAAC6L,EAAM,kBAAkB,SAAS7L,EAAQ,KAAK,EAAG,CAC7G,MAAMwoH,EAAkB,MAAM,KAAK,uBAAuBxoH,CAAO,EAC3D,kBAAK,qBAAqBA,EAAQ,KAAK,EACtCwoH,CACT,CACF,CAoBA,MAAa,sBACXx7E,EACA+pC,EACAixC,EACA,CAGA,OAFAA,MAAkB,MAAM,KAAK,SAAS,yBAAyB,iBAAiBh7E,CAAK,GAElF,CAAC,CAACg7E,EAAc,OAAO,UAAa,CAACjxC,IAIrCixC,EAAc,OAAO,UAEtB,MAAM,KAAK,uBAAuB,CAAC,MAAAh7E,EAAO,eAAgB,GAAK,EACzD,WAAK,qBAAqBA,CAAK,EAGrC,MAAM,KAAK,SAAS,yBAAyB,sBAAsBA,EAAO,GAFlD,EAEuE,EAE/F,OAAOg7E,EAAc,OAAO,SAEnBv1F,GAAA,CACP,YAAau1F,EAAc,OAAO,qBAAuBA,EAAc,OAAO,kBAC5E,0CACEA,EAAc,OAAO,oBACnB,mCACA,iCAEN,kBAAmB,CAACpnH,GAAconH,EAAc,UAAU,CAAC,EAC5D,IAED,MAAM,KAAK,SAAS,yBAAyB,sBAAsBh7E,EAAO,EAAK,EAC/Eg7E,EAAc,OAAO,SAAW,GAEvBv1F,GAAA,CACP,YAAau1F,EAAc,OAAO,qBAAuBA,EAAc,OAAO,kBAC5E,iCACEA,EAAc,OAAO,oBACnB,8BACA,kCAEN,kBAAmB,CAACpnH,GAAconH,EAAc,UAAU,CAAC,EAC5D,IAGIA,CACT,CAEA,MAAa,WAAWhoH,EAAyC,CAQ7D,GAPMA,EAAA,QAAAA,EAAA,MAAUA,EAAQ,eAAe,QACzCA,EAAQ,cAARA,EAAQ,YAAgB,CACtB,EAAG,WACH,KAAM,KAAK,UAAU0Z,GAAgB,0BAA0B,IAI/D,CAAC1Z,EAAQ,cAGL,IACFA,EAAQ,cAAgB,MAAM,KAAK,SAAS,yBAAyB,iBAAiBA,EAAQ,KAAK,OACxF,CAAC,CAGb,IAACA,EAAQ,eAAgB,CAC1B,MAAMgoH,EAAgBhoH,EAAQ,cAC1B,IAAAihQ,EACDjhQ,EAAQ,aACNgoH,GAAe,QAAQ,4BACPi5I,EAAA,GAEX,WAAK,qBAAqBjhQ,EAAQ,KAAK,EAI/CihQ,EADaxgQ,GAAgB,QAAQT,EAAQ,KAAK,EAC5B,OAAO,iBAAmBgoH,GAAe,QAAQ,SAGtEi5I,EACD,MAAM,KAAK,sBAAsBjhQ,EAAQ,MAAO,GAAMgoH,CAAa,EAEnE,MAAM,KAAK,kBAAkB,CAC3B,MAAOhoH,EAAQ,MAChB,CAEL,CAEI,IACF,MAAMkhQ,EAAc,CAAClhQ,EAAQ,MAAOA,EAAQ,UAAU,GACnDA,EAAQ,aAAeA,EAAQ,cAAgBA,EAAQ,OACxDkhQ,EAAY,KAAK,MAAM,EAGnB,MAAA3yP,EAAW2yP,EAAY,KAAK,GAAG,EAG/BC,EAA8D,CAClE,iBAFuB,MAAM,KAAK,SAAS,yBAAyB,eAAenhQ,CAAgC,EAGnH,eAAgBA,EAChB,cAAeA,EAAQ,cACvB,SAAAuO,CAAA,EAECqjB,GACY7B,GAAA,YAAY0lO,GAAa0L,CAAa,EAEnDtE,GAAuBsE,CAAa,QAEhC/vP,EAAK,CACPA,EAAiB,OAAS,mBAAqBpR,EAAQ,eAChDyyB,GAAA,CACP,YAAa,8BACd,CAEL,CACF,CAEO,cAAczyB,EAKlB,CACD,KAAM,CAAC,OAAAC,EAAQ,IAAA2N,EAAK,SAAAwzP,EAAU,IAAA13P,GAAO1J,EAE/BqhQ,EAAc33P,GAAgB,CAC3B,YAAKA,EAAK,QAAQ,GAGrB43P,EAA2BC,GAAuD,CACtFF,EAAWE,EAAc,GAAG,GAGxBC,EAAkB,MAAMD,GAAgD,CACzE,GAAAA,EAAc,IAAM,uBAAwB,CACvC,MAAApsO,EAAI,SAAS,cAAc,GAAG,EAClCA,EAAA,OAAOosO,EAAc,MAAM,EAC7B,MAAMtpP,EAAY,MAAMrF,GAAc,CAAC,OAAQ1S,EAAU,KAAK,EACxDuhQ,EAAe,MAAM7uP,GAAc,CAAC,OAAQ2uP,EAAc,IAAI,GAAG,SAAS,EAAE,EAE5EG,EAA0C,CAC9C,KAAM,iBACN,SAAU,CAACvsO,EAAE,UAAU,EAAI,EAAGld,CAAS,EACvC,QAAS,IAGL0pP,EAAkDJ,EAAc,OAAO,qBAAuB,CAClG,KAAM,iBACN,SAAU,CAACE,CAAY,EACvB,QAAS,EACP,SAOEG,EAAsBr1N,GAAkB,CAC5C,aAAc,eACd,OAAQ,CACN,QAAS,MACX,EACA,mBAAoB,gBACpB,oBAAqB,CAACpX,CAAC,EACvB,WAZ6C,CAC7CusO,EACAC,CAAA,EAUuB,OAAO,OAAO,EACtC,EAEEA,GACDD,EAAc,cAAc,MAAM,iBAAiB,SAAU,IAAM,CAC3D,MAAA9iL,EAAW,CAAC8iL,EAAc,cAAc,QACxBC,EAAA,cAAc,iBAAiB/iL,CAAQ,EAE1DA,IACD+iL,EAAsB,cAAc,QAAU,GAChD,CACD,EAGH,KAAM,CAACE,EAAcC,CAAoB,EAAI,MAAMF,EAEnD,GAAG,CAACC,EAAc,CAChBR,EAAW33P,CAAG,EACd,MACF,CAEA,MAAM1H,EAAS,MAAM,KAAK,SAAS,wBAAwB,cACzD0H,EACAzJ,EACA2N,EACAwzP,EACAU,CAAA,EAGF,OAAON,EAAgBx/P,CAAM,OACrBu/P,EAAc,IAAM,wBAC5BD,EAAwBC,CAAa,EAErCF,EAAW33P,CAAG,CAChB,EAGK,YAAK,SAAS,wBAAwB,eAC3CA,EACAzJ,EACA2N,EACAwzP,CAAA,EACA,KAAMG,GAAkB,CACxBC,EAAgBD,CAAa,EAC9B,CACH,CAEQ,wBAAyB,CAC/B,IAAI7gN,EAAwBs2C,EAC5B92F,EAAU,iBAAiB,aAAe6hQ,GAAerhN,EAAYqhN,CAAU,EAC/E7hQ,EAAU,iBAAiB,SAAW8hQ,GAAYhrK,EAASgrK,CAAO,EAC7D,cAAS,WAAW,aAAa,EAAE,KAAMD,GAAerhN,EAAYqhN,CAAU,EAC9E,cAAS,WAAW,UAAU,EAAE,KAAMC,GAAYhrK,EAASgrK,CAAO,EAEjE,MAAAC,EAAqBxtP,GAA+B,OACxD,GAAG,CAACisC,EACF,OAGF,MAAMh3C,EAAM,IAAI,IAAI+K,EAAQ,IAAI,EAChC,GAAGisC,EAAU,kBAAkB,SAASh3C,EAAI,QAAQ,EAAG,CACrD,KAAK,cAAc,CAAC,IAAK+K,EAAQ,IAAK,GAC1BoI,KACZ,MACF,CAEA,MAAMqlP,EAAiBlrK,EAAO,gBAC9B,GAAG,CAACkrK,GAAkB,CAACxhN,EAAU,kBAC/B,OAGF,MAAMyhN,GAAc9qP,EAAA5C,EAAQ,SAAQ,cAAhB4C,EAAgB,YAAgB5C,EAAQ,MACzDisC,EAAU,kBAAkB,SAASh3C,EAAI,QAAQ,IAC9CA,EAAA,aAAa,IAAI,kBAAmBw4P,CAAc,EAC9CztP,EAAA,KAAO/K,EAAI,WAEnB,WAAW,IAAM,CACf+K,EAAQ,KAAO0tP,EACf,OAAO1tP,EAAQ,QAAQ,aACtB,CAAC,EACN,EAGI2tP,EAA0B3tP,GAA+B,CACvD,MAAA2wC,EAAS5/B,EAAgB/Q,EAAS,QAAQ,EAChD,GAAG,CAAC2wC,EACF,OAGF,MAAM77C,EAAW67C,EAAe,QAChC,KAAK,wBAAwB77C,CAAO,GAG7B,0BAAiB,QAAS,MAAMiD,GAAM,CAC7C,MAAM6wB,EAAS0gB,GAAUvxC,EAAE,OAAuB,GAAG,EAClD6wB,GAAQ,MACT4kO,EAAkB5kO,CAAM,EAGvBA,GACD+kO,EAAuB/kO,CAAM,EAGzB,MAAA1Z,EAAS2B,GAAa9Y,EAAE,MAAM,EACjCmX,GAAUA,EAAO,UAAU,SAAS,aAAa,GAAK,CAAC6B,EAAgBhZ,EAAE,OAAQ,cAAc,GAChG,KAAK,sBAAsBmX,CAAM,CACnC,CACD,CAWH,CAEQ,kBAAmB,CACrB,IAAA0+O,EACE,MAAAC,EAAmB,CAACC,EAAgDF,IAAuB,CAC/F,MAAM7hQ,EAAOC,GAAgB,QAAQP,EAAU,KAAK,UAAU,EAChDsZ,GAAA+oP,EAAe,OAAQ/hQ,CAAI,EACpB6hQ,EAAAE,CAAA,EAEvBriQ,EAAU,iBAAiB,gBAAiB,IAAMoiQ,EAAkB,GACpE,KAAK,SAAS,WAAW,cAAc,EAAE,KAAKA,CAAgB,EAE9D,KAAM,CAAC1tP,EAAG4tP,CAAgB,EAAI7sC,GAAiB,EAC/C,KAAK,SAAS,WAAW,uBAAuB,KAAM4sC,GAAmB,CACvEC,EAAiBD,EAAe,MAAM,EACvC,CACH,CAEO,wBAAwBh5P,EAA0B,CACvD,MAAM2qH,EAAmB3qH,GAAS,iBAC9B2qH,GAIC,cAAS,gBAAgB,sBAAsB3qH,EAAQ,OAAO,SAAS,EAAG2qH,EAAiB,SAAS,CAC3G,CAEA,MAAa,sBAAsBvwG,EAAqB,CAChD,MAAAS,EAAU,CAACT,EAAO,QAAQ,QACJspF,GAAA,CAC1B,OAAQ,IAAMtpF,EACd,OAAQA,EAAO,QAAQ,OAAO,SAAS,EACvC,GAAIS,GAAW,OAChB,CACH,CAEO,oBAAoB3P,EAAmD,CACtE,MAAAguP,EAAiBj9O,EAAgB/Q,EAAS,QAAQ,EAClDiuP,EAAgBD,GAAkBj9O,EAAgBi9O,EAAgB,MAAM,EAExExiQ,GADOyiQ,GAAiB,KAAK,MAAM,KAAMr7N,GAASA,EAAK,YAAcq7N,CAAa,IACnE,OACf90P,EAAM60P,GAAkB,CAACA,EAAe,QAAQ,IAChDl5P,EAA4Bk5P,GAAwB,SAAYxiQ,GAAUQ,GAAgB,iBAAiBR,EAAQ2N,CAAG,EAC5H,OAAO60P,EAAiB,CACtB,OAAAxiQ,EACA,IAAA2N,EACA,QAAArE,EACA,MAAOA,EAAU,CAAC,CAACA,EAAQ,OAAO,IAAM,MACtC,QACN,CAEQ,qBAAqBO,EAA2C,CACtE,OAAO,KAAK,aAAa,iBAAkBuE,GAAU,CAC7C,MAAAs4B,EAAO,YAAY,MACzB,OAAOt4B,EAAM,OAAO,KAAMs0P,GAAa,CACrC,MAAMr2P,EAAWq2P,EAAS,IAAKC,GACtBv0P,EAAM,MAAMu0P,CAAO,EAAE,KAAM19N,GACzBp7B,EAASo7B,CAAQ,CACzB,CACF,EAED,OAAO,QAAQ,IAAI54B,CAAQ,EAAE,KAAM6tB,IAC1BA,EAAA,IAAI,CAAC0oO,EAAOt/P,IAAQ,CACzB,GAAG,CAACs/P,EACF,OAGI,MAAAD,EAAUD,EAASp/P,CAAG,EACrB,OAAA8K,EAAM,OAAOu0P,CAAO,EAC5B,EAEM,QAAQ,IAAIzoO,EAAO,OAAO,OAAO,CAAC,EAC1C,EACF,EAAE,KAAK,IAAM,CACZ,KAAK,IAAI,gBAAiB,YAAY,MAAQwM,CAAI,EACnD,EACF,CACH,CAEQ,4BAA4Bm8N,EAAsB,CAM1D,CAEQ,8BAA8BC,EAAoB,CACxD,MAAMlrO,EAAWkrO,IAAW5iM,GAAW,OAAS,KAAK,SAAW,SAAS,KACtEogM,GAAwB,gBAAkB1oO,GAC3CA,EAAS,OAAO0oO,EAAuB,CAE3C,CAEQ,uBAAwB,CACxB,MAAAyC,MAAkB,IAAI,CAAC,SAAU,WAAY,OAAQ,SAAS,CAAC,EAC/Dr2M,EAAangD,GAAqB,CACtC,MAAMyJ,EAAMzJ,EAAE,IACRy2P,EAAuB,SAAS,eAAe,YACrD,GAAGrvO,GAAe,iBAAmBovO,EAAY,IAAI/sP,CAAG,EAAG,OAE3D,MAAMsP,EAAS/Y,EAAE,OAEXwoL,EAAmBzvK,EAAO,UAAY,SAAW,CAAC,CAAC,WAAY,OAAO,EAAE,SAAUA,EAA4B,IAAI,GAAMA,EAAO,kBAM/H8hB,EAAO,KAAK,KAEd,MAAApxB,EAAI,WAAW,OAAO,GAAMzJ,EAAE,UAAYyJ,IAAQ,UAAa,CAACgtP,GAEpE,KAAUz2P,EAAE,OAAS,SAAWA,EAAE,SAAWA,EAAE,UAAY,CAACwoL,EAC1D,UACQxoL,EAAE,SAAWyJ,IAAQ,WAAaA,IAAQ,aAClD4G,GAAYrQ,CAAC,EACb,KAAK,SAAS,eAAe,cAAc,KAAK,KAAK,OAAQyJ,IAAQ,YAAa0oB,GAAkB,QAAQ,EAAE,KAAMkT,GAAW,CAC1HA,GACD,KAAK,QAAQ,CAAC,OAAQA,EAAO,MAAO,EACtC,CACD,UACO57B,IAAQ,WAAa,KAAK,KAAK,OAASgnE,GAAS,UACzD,GAAG,CAAC51C,EAAK,MAAM,WAAaA,EAAK,MAAM,eAChC,cAAS,mBAAmB,sBAAsBA,EAAK,OAAQA,EAAK,QAAQ,EAAE,KAAM99B,GAAY,CAChGA,IACI89B,EAAA,MAAM,mBAAmB99B,EAAQ,GAAG,EACzCsT,GAAYrQ,CAAC,EACf,CACD,MAED,gBAEMyJ,IAAQ,YAChB,OAIAoxB,GAAM,OAAO,cACb9hB,IAAW8hB,EAAK,MAAM,cACtB,CAAC2tJ,GACD,CAACpjK,KACA,CAACjwB,GAAW,UAAY,KAAK,QAAU,IACxC,CAAC0lC,EAAK,UAAU,aAChB,CAACA,EAAK,MAAM,WACZA,EAAK,MAAM,aAAa,mBAEb+mJ,GAAA/mJ,EAAK,MAAM,aAAc76B,CAAC,EACvC,EAGO,cAAK,iBAAiB,UAAWmgD,CAAS,CACrD,CAGQ,oBAAqB,CAClB,0BAAiB,OAAS,GAAM,CACzB+oM,KACR,KAAM/6O,GAAS,CACnB,IAAIlG,EAAuBkG,EAK3B,GAJGA,EAAK,WAAaA,EAAK,eACxBlG,EAAUkG,EAAK,eAGd,CAAC6K,EAAgB/Q,EAAS,aAAa,EACjC,SAGH,MAAA2wC,EAAS5/B,EAAgB/Q,EAAS,QAAQ,EAChD,GAAG,CAAC2wC,EACK,SAGT,EAAE,eAAe,EACjB,MAAMnlD,EAASmlD,EAAO,QAAQ,OAAO,SAAS,EACxC/d,EAAO5mC,GAAgB,QAAQR,EAAO,SAAU,GAC7C,OAAAwyB,GAAA,CACP,YAAc4U,EAAwB,OAAO,UAAY,yBAA2B,uBACrF,EAEM,GACR,EACF,CACH,CAEO,QAAQ39B,EAAaw5P,EAA8B,CACxD,KAAM,CAAC,IAAKC,EAAY,QAAA15P,CAAO,EAAIE,GAAQD,CAAG,EAC9C,GAAG,CAACD,EAAS,CACRy5P,GACD54F,GAAe64F,CAAU,EAG3B,MACF,CAEM,MAAAx6P,EAAI,SAAS,cAAc,GAAG,EACpC,OAAAA,EAAE,KAAOw6P,EACD,OAAe15P,CAAO,EAAEd,CAAC,CACnC,CAqFA,MAAa,KAAK3I,EAA6E,CAC7F,OAAO,KAAK,GAAG,CACb,GAAGA,EACH,KAAM,MAAM,KAAK,SAAS,gBAAgB,QAAQA,EAAQ,MAAM,EACjE,CACH,CAEA,MAAa,GAAGA,EAEwB,CACnC,IAACA,EAAQ,KACV,OAGI,MAAA2G,EAAS3G,EAAQ,KAAK,IAAM,OAC5B45C,EAAY55C,EAAQ,KAAK,IAAM,UACrC,IAAIC,EAASD,EAAQ,KAAK,GAAG,SAAS,CAAC2G,CAAM,EAE7C,MAAMg+C,EAAgF,CACpF,YACA,YACA,YAGI5X,EAAY6M,EAAa55C,EAAQ,KAAwB,GAAK,OAC9DwX,EAAU,CAAC,CAAExX,EAAQ,KAAwB,OAAO,MAE1D,MAAM,QAAQ,IAAI2kD,EAAK,IAAI,MAAM1uC,GAAQ,CAC/BjW,EAAAiW,KAAAjW,EAAAiW,GAAS,MAAM,KAAK,SAAS,sBAAsB,kBAAkBjW,EAAQiW,CAAG,EAAG82B,CAAS,EACrG,EAAC,EAEI,MAAAq2N,EAAcpjQ,EAAQ,KAAqB,YACjD,GAAGojQ,EAAY,CACb,MAAMr2N,EAAaq2N,EAAyC,WAC5DpjQ,EAAQ,KAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQ+sC,CAAS,EAC3DA,IAAU,SAAS,EAAI,CAClC,CAEA,GAAI,CAAC,UAAA26E,EAAW,SAAApnH,EAAU,UAAA28F,CAAA,EAAaj9F,EAGvC,GAAG,CAAC0nH,GAAa,CAACpnH,GAAY,CAAC28F,GAAazlF,EAAS,CACjCmnB,GAAA,uBAAuB1+B,EAAQ,GAAM,EAAI,EAC3D,MACF,CAGG,GAAAuX,GAAWylF,GAAa,CAAC38F,EAAU,CACpC,MAAMiJ,EAAU,MAAM,KAAK,SAAS,mBAAmB,eAAetJ,EAAQg9F,CAAS,EACpF1zF,EACDjJ,EAAWN,EAAQ,SAAW67E,GAAmBtyE,EAASiO,CAAO,GAEjElX,EAAWN,EAAQ,SAAWi9F,EAC9BA,EAAYj9F,EAAQ,UAAY,OAEpC,CAEA,OAAGM,EACM,KAAK,WAAW,CACrB,GAAIN,EACJ,OAAAC,CAAA,CACD,EACOynH,EACD,KAAK,YAAY,CACtB,OAAAznH,EACA,MAAOg9F,EACP,UAAAyqB,CAAA,CACD,EAGI,KAAK,aAAa,CACvB,GAAG1nH,EACH,OAAAC,CAAA,CACD,CACH,CAEO,gBAAiB,CACtB,OAAO,KAAK,SAAS,WAAW,eAAe,KAAMygD,GAC5C,KAAK,aAAa,CAAC,SAAUA,EAAU,qBAAqB,CACpE,CACH,CAEO,aAAa1gD,EAEoB,CAChC,MAAC,SAAAqjQ,CAAY,EAAArjQ,EACZ,YAAK,SAAS,gBAAgB,gBAAgBqjQ,CAAQ,EAAE,KAAMzjQ,GAC5D,KAAK,GAAG,CACb,KAAAA,EACA,GAAGI,CAAA,CACJ,EACCoR,GAAkB,CACjBA,EAAI,OAAS,wBACLqhB,GAAA,CAAC,YAAa,kBAAkB,EACjCrhB,EAAI,OAAS,oBACZqhB,GAAA,CAAC,YAAa,yBAAyB,CAClD,CACD,CACH,CAKA,MAAa,WAAWzyB,EAKrB,CACE,aAAM,KAAK,SAAS,gBAAgB,QAAQA,EAAQ,OAAO,SAAS,CAAC,GACtE,MAAM,KAAK,SAAS,eAAe,sBAAsBA,EAAQ,OAAQA,EAAQ,QAAQ,EAClF,KAAK,aAAaA,CAAO,GAG3B,KAAK,SAAS,mBAAmB,eAAeA,EAAQ,OAAQA,EAAQ,QAAQ,EAAE,KAAK,MAAMuJ,IAC9FA,IACFvJ,EAAQ,UAAY,QAGf,KAAK,aAAa,CACvB,GAAGA,EACH,KAAMi9E,GAAS,WAChB,EACF,CACH,CAKO,YAAYj9E,EAIhB,CACM,YAAK,SAAS,mBAAmB,qBAAqBA,EAAQ,OAAQA,EAAQ,KAAK,EAAE,KAAMuJ,GACzF,KAAK,WAAW,CACrB,OAAQA,EAAQ,OAChB,UAAWvJ,EAAQ,UACnB,SAAUuJ,EAAQ,IACnB,CACF,CACH,CAEA,MAAa,SAAS/C,EAAgB8d,EAAgB,CAEpD,GADa4iO,GAAgB,gBAAgB1gP,CAAM,EAEjD,OAIC,IADc,MAAM,KAAK,SAAS,kBAAkB,WAAWA,CAAM,GAC5D,OAAO,oBAAqB,CACxBoM,GAAA,CAAC,OAAQpM,EAAO,WAAW,EAAE,KAAMiO,GACxC83B,GAAkB,CACvB,mBAAoB,2BACpB,oBAAqB,CAAC93B,CAAO,EAC7B,OAAQ,CACN,QAAS,KACT,SAAU,EACZ,EACD,CACF,EAED,MACF,CAEA,MAAM,KAAK,mBAAmBjO,EAAO,WAAY,MAAM,EAEvC0gP,GAAA,kBAAkB1gP,EAAQ8d,IAAS,OAAO,CAC5D,CAEQ,mBAAmB8hF,EAAkBk9J,EAAmCC,EAAqCC,EAA2BC,EAA8C,CACzL,OAAA5+G,GAAqB,WAAaA,GAAqB,YAAc0+G,EAAwB,KAAK,6BAA6Bn9J,EAAUk9J,CAAM,EAC1Ipc,GAAgB,aAAeA,GAAgB,cAAgBsc,EAAmB,KAAK,wBAAwBp9J,EAAUk9J,CAAM,EAC/H35G,GAAoB,aAAeA,GAAoB,cAAgB85G,EAAmB,KAAK,wBAAwBr9J,EAAUk9J,CAAM,EACnI,QAAQ,SACtB,CAEA,MAAc,2BAA2B9jL,EAAoB4mB,EAAkBs9J,EAA6DJ,EAA2D,CACrM,MAAM,QAAQ,IAAI,CAChB1wP,GAAc,CAAC,OAAQ4sE,EAAW,EAClC5sE,GAAc,CAAC,OAAQwzF,EAAS,CACjC,GAAE,KAAK,CAAC,CAACsnE,EAAQM,CAAM,IACfzhI,GAAkB,CACvB,aAAc,wBAAwBm3N,CAAQ,UAC9C,mBAAoB,wBAAwBA,CAAQ,MAAMJ,CAAM,QAChE,oBAAqB,CAAC51F,EAAQM,CAAM,EACpC,OAAQ,CACN,QAAS,IACX,EACD,CACF,CACH,CAEA,MAAc,6BAA6B5nE,EAAkBk9J,EAA2D,CACtH,MAAM/5G,EAAc1E,GAAqB,UACtC0E,IACK,WAAK,2BAA2BA,EAAY,OAAO,SAAS,EAAI,EAAGnjD,EAAU,QAASk9J,CAAM,EAE/Fz+G,GAAqB,YAAc0E,GACpC,MAAMA,EAAY,SAGxB,CAEA,MAAc,wBAAwBnjD,EAAkBk9J,EAA2D,CACjH,MAAM/5G,EAAc29F,GAAgB,YACjC39F,IACK,WAAK,2BAA2BA,EAAY,mBAAmB,SAAS,EAAK,EAAGnjD,EAAU,OAAQk9J,CAAM,EAE1G/5G,EAAY,WACR,MAAAA,EAAY,OAAO,kCAAkC,EAGjE,CAEA,MAAc,wBAAwBnjD,EAAkBk9J,EAA2D,CACjH,MAAM/5G,EAAcI,GAAoB,YACrCJ,IACK,WAAK,2BAA2BA,EAAY,OAAO,SAAS,EAAI,EAAGnjD,EAAU,OAAQk9J,CAAM,EAE9F35G,GAAoB,cAAgBJ,GACrC,MAAMI,GAAoB,YAGhC,CAEA,MAAa,cAAc1pJ,EAAgBuiJ,EAA2B,CAC9D,MAAA/7I,EAASxG,EAAO,WAChBixC,EAAY,KAAK,SAAS,gBAAgB,UAAUzqC,EAAQ,aAAa,EACzEo2B,EAAO,SAAW,CACtB,MAAMsK,EAAW,MAAM,KAAK,SAAS,kBAAkB,YAAY1gC,CAAM,EACrE,IAAA6iJ,EACD,GAACniH,EAAS,KAOXmiH,EAAOniH,EAAS,SAPC,CACjB,GAAG,CAAC+J,EACF,OAGFo4G,EAAO,MAAM,KAAK,SAAS,qBAAqB,gBAAgB7iJ,CAAM,EAKxEo+I,GAAqB,cAAcp+I,EAAQ6iJ,EAAK,GAAI,GAAM,EAAK,GAGjE,GAAG9G,IACiB,MAAM,KAAK,SAAS,qBAAqB,iBAAiBA,CAAW,GAC1E,IAAM,qBAAsB,CACvC,GAAG,CAACtxG,EAAW,CACJze,GAAA,CACP,YAAa,uBACd,EAED,MACF,CAEA,MAAM8Z,GAAkB,CACtB,mBAAoB,0BACpB,OAAQ,CACN,QAAS,4BACX,EACD,CACH,CAGI,WAAK,mBAAmBtsC,EAAQ,OAAO,EAExC48B,GACP,CAEA,MAAa,eAAe58B,EAAgB,CACpC,WAAK,mBAAmBA,EAAQ,MAAM,EAEtC,MAAA0pJ,GAAoB,SAAS1pJ,EAAO,UAAU,EAAE,MAAOmR,GAAQ,CACnE,QAAQ,MAAMA,CAAG,EACRqhB,GAAA,CACP,YAAa,gBACd,EACF,EAED,KAAK,qBAAqBxyB,CAAM,CAClC,CAEA,MAAc,qBAAqBA,EAAgB,CACjD,GAAGyvP,GAAmB,eAAgB,OAEtC,MAAMZ,EAAW,MAAMY,GAAmB,YAAYzvP,EAAO,UAAU,EACnE,IAAAyvP,GAAmBZ,CAAQ,EAAE,UAAU,CACzC,OAAA7uP,EACA,QAAS0pJ,GAAoB,YAAY,MAC1C,CACH,CAEO,qBAAqBg6G,EAAiB,GAAOhgG,EAAoE,CAChH,MAAAF,EAAQ/pJ,GAAgB,WAExBi4F,EAAQ8xD,EAAM,UAAU,WAAmC,KACjE,GAAG9xD,EAAM,CACD,MAAAs5H,EAAeC,GAAW,SAAS,OAAO,KAAM7nO,GAAMA,EAAE,OAASogK,EAAM,IAAI,EAK1E,eAAQ,QAAQ,KAAK,cAAc,CAAC,KAAA9xD,CAAI,CAAC,CAAC,EAAE,KAAMjoG,GAChD,KAAK,cAAcA,EAAKi6P,EAAgBhgG,CAAa,EAC3D,KACKF,EAAA,SAAWzyH,GAAKi6L,EAAa,QAAQ,EACpC,KAAK,qBAAqB,EAAI,EACtC,CAEH,CAEA,OAAO,KAAK,cAAc,GAAI04B,EAAgBhgG,CAAa,CAC7D,CAEQ,uBAAuBhyD,EAActwF,EAAgB,CAC3D,MAAO,eAAeswF,CAAI,GAAGtwF,EAAO,QAAU,EAAE,EAClD,CAEO,qBAAqBswF,EAAcjoG,EAAa2X,EAAgB,CAClE,MAACswF,GAAQA,IAASiyJ,IAIrB,OAAO,MAAMl6P,CAAG,EAAE,KAAMw7B,GACfb,GAAa,aAAa,KAAK,KAAK,uBAAuBstE,EAAMtwF,CAAI,EAAG6jB,CAAQ,CACxF,CACH,CAEO,mBAAmBx7B,EAAa,CACrC,KAAM,CAAC,OAAAue,EAAQ,QAAArc,GAAWyV,GAAK3X,EAAK,GAAI,CAAC,EAClC,OAAAkC,EAAQ,KAAK,IACXqc,EAAO,WACf,CACH,CAEO,wBAAwB,CAAC,KAAA0pF,EAAM,IAAAjoG,EAAK,KAAA2X,GAAoD,CAC7F,KAAK,mBAAmB,KAAK,uBAAuBswF,EAAMtwF,CAAI,CAAC,EAAI3X,CACrE,CAEO,cAAc,CACnB,KAAAioG,EACA,YAAAkyJ,EACA,KAAAxiP,CAAA,EAKC,OACD,MAAMyiP,EAAa,KAAK,uBAAuBnyJ,EAAMtwF,CAAI,EAClD,OAAAhK,EAAA,KAAK,oBAALysP,KAAAzsP,EAAAysP,GAAwC,KAAK,aAAa,QAAQA,CAAU,EAAE,KAAM11L,GAClF,KAAK,mBAAmB01L,CAAU,EAAI,IAAI,gBAAgB11L,CAAI,EACpEy1L,EAAc,MAAMzyP,GAAQ,CACzB,GAAAA,EAAiB,OAAS,iBACtB,MAAAA,EAGR,MAAMsyJ,EAAY,MAAM,KAAK,SAAS,iBAAiB,mBAAmB/xD,CAAI,EAC1E,IAAAjoG,EAAM,MAAMsX,GAAmB,iBAAiB,CAClD,MAAQ0iJ,EAAkC,SAC3C,EAED,OAAGriJ,IACK3X,EAAA,MAAM,KAAK,mBAAmBA,CAAG,GAGpC,0BAAqBioG,EAAMjoG,EAAK2X,CAAI,EAClC,KAAK,mBAAmByiP,CAAU,EAAIp6P,CAAA,EAC3C,MAAS,EACf,CAEO,cAAcA,EAAai6P,EAAiB,GAAMhgG,EAAwC,CAC/F,KAAK,kBAAoBj6J,EACzB,MAAM4C,EAAW,KAAK,MAAM,IAAK+6B,GAASA,EAAK,sBAAsB,CAAC,IAAA39B,EAAK,cAAAi6J,CAAa,CAAC,CAAC,EACnF,eAAQ,QAAQr3J,EAASA,EAAS,OAAS,CAAC,CAAC,EAAE,KAAK,IAAM,CAC5Dq3P,GACDzjQ,EAAU,cAAc,mBAAmB,CAC7C,CACD,CACH,CAEO,iBAAiBmnC,EAAY,CAClC,GAAG,CAAE,CAAC41C,GAAS,KAAMA,GAAS,WAAYA,GAAS,KAAK,EAAiB,SAAS51C,EAAK,IAAI,GAAK,CAACA,EAAK,OACpG,OAMF,MAAM08N,EAAc18N,EAAK,QACnBpxB,EAAMoxB,EAAK,QAAUA,EAAK,SAAW,IAAMA,EAAK,SAAW,IAC3D28N,EAAgBxD,GAAa,aAAa,eAAe,EAE7D,KAAEuD,EAAY,WAAW,oBAAsB,IAAMA,EAAY,WAAW,UAAU,SACtFA,EAAY,kBAAkB,GAC9B,CAAC18N,EAAK,eACN08N,EAAY,iBAAiB,EAAE,gBAAgB,OAC/C,CACAA,EAAY,cAAc,EAAI,EACxB,MAAA7sO,EAAM6sO,EAAY,WAAW,eAE7Bj4L,EAAW,CACf,KAAMi4L,EAAY,mBAAmB,OAAQ,EAAI,EAAE,IAAKzvI,GAAYD,GAAaC,CAAO,EAAE,GAAG,EAC7F,IAAAp9F,CAAA,EAGF8sO,EAAc/tP,CAAG,EAAI61D,EAEhB,SAAI,uBAAwBA,CAAQ,OAEzC,OAAOk4L,EAAc/tP,CAAG,EAExB,KAAK,IAAI,uBAAuB,EAGlCuqP,GAAa,IAAI,CAAC,cAAAwD,CAAa,EAAG,EAAI,CAExC,CAEO,qBAAqB38N,EAA+B,CACzD,GAAG,CAAE,CAAC41C,GAAS,KAAMA,GAAS,WAAYA,GAAS,KAAK,EAAiB,SAAS51C,EAAK,IAAI,GAAK,CAACA,EAAK,OACpG,OAGF,MAAMpxB,EAAMoxB,EAAK,QAAUA,EAAK,SAAW,IAAMA,EAAK,SAAW,IAC3Dh5B,EAAQmyP,GAAa,aAAa,eAAe,EAChD,OAAAnyP,GAASA,EAAM4H,CAAG,CAC3B,CAEO,kBAAkB,CACvB,KAAA07F,EACA,cAAAsyJ,EACA,eAAAN,EACA,WAAAO,EACA,cAAAvgG,CACF,EAMI,GAAI,CACN,OAAGsgG,GACD,KAAK,wBAAwB,CAAC,KAAAtyJ,EAAM,IAAKsyJ,CAAc,GAGxD,CAAAC,GAAcxqP,GAAgB,WAExB,KAAK,qBACViqP,IAAmB,OAAY,CAAC,CAAChyJ,EAAOgyJ,EACxChgG,CAAA,CAEJ,CAqDQ,eAAepqI,EAAkBpO,EAAmB,CACvD,QAAK,UAAYoO,EAQpB,IAJGpO,IAAY,IAAS,KAAK,SAC3BiwN,GAAkB,CAAC7hN,EAAK,KAAK,OAAO,EAAE,OAAO,OAAO,CAAC,EAGpD,KAAK,QAAS,CACV,aAAQ,UAAU,OAAO,QAAQ,EACtC,KAAK,wBAAwB,EAG1B9c,GAAS,YAAY,YAAY,GAAK0O,IAAY,IACnDq0G,GAA4B34F,GAAM,GAAS,EAAG,GAAS,EAGnD,MAAA6qM,EAAUnsM,GAAW,KAAK,OAAO,EAC3BA,GAAWhM,CAAG,EACjBm4M,GACP3/M,GAAwB,SAAS,CAC/B,KAAM,OACN,MAAQC,GAAe,CAChB,aAAQ,GAAIA,CAAU,EACTuhD,IACpB,EACD,CAEL,CAEIh6C,EAAA,UAAU,IAAI,QAAQ,EAC1B,KAAK,QAAUA,EACjB,CAEQ,MAAO,CACb,SAAS,iBAAiB,QAAS,KAAK,gBAAiB,EAAI,EAEzD3H,IACF,KAAK,2BAA2B,EAIpB0vJ,GAAA,cAAc,iBAI9B,CAEQ,4BAA6B,CACnC,MAAM6iF,EAA2B,GAC3BC,EAAgC,GACtC,IAAIzjK,EAAU,GACR,MAAA/mE,EAAS,MAAMptB,EAAcwkF,IAAmB,CACpD,GAAGA,IAAU2P,EAAyB,OAEhC,MAAAy+J,EAAS5yP,EAAE,aAAa,MAExB63P,EAAUjF,EAAO,SAAWA,EAAO,SAAS,OAAO,EAAIA,EAAO,QAAQ,OAAO,GAAK,EAElF93E,EAAgB9O,KAChB1hI,EAAkB,MAAM47M,GAAkBlmP,EAAG,EAAI,EACpD,IAAC63P,GAAY,CAAE,MAAM,KAAK,QAAQ,GAAM,CAAC/8E,EAAgB,CAChD6D,EAAA,EACV,MACF,CAEA,MAAMp6I,EAAS,MAAM0nI,GAAc,QAAQ,CAAC,GAAG,KAAK,KAAK,wBAAwB,EAAG,YAAa,EAAK,GAEhG6rF,EAAkBh9E,EAAgBi9E,EAAsBC,EACxDC,EAASn9E,EAAgB88E,EAAaD,EAEzC,GAAAnzK,GAAS,CAACyzK,EAAO,OAAQ,CACpB,MAAA9xM,EAAQ0xM,GAAW,CAACvtN,EAAM,OAE1B,CAACgqN,EAAY4D,CAAc,EAAI96P,GAAUktC,EAAQzzC,GAAMw4F,GAA2B,IAAIx4F,CAAC,CAAC,EACxF,CAAC+3K,EAAaC,CAAW,EAAIzxK,GAAUk3P,EAAaz9P,GAAMo2K,GAA2B,IAAIp2K,CAAC,CAAC,EAoBjG,GAlBI0tC,EAAO,UAGM2zN,EAAA,KAAK,GAAG5D,CAAU,EAFjC4D,EAAe,OAAS,EAKtB3zN,EAAO,cACTqqI,EAAY,QAAS3E,GAAavhK,GAAiB4rP,EAAYrqF,CAAQ,CAAC,EACxE2E,EAAY,OAAS,GAGnBrqI,EAAO,cACTsqI,EAAY,QAAS5E,GAAavhK,GAAiB4rP,EAAYrqF,CAAQ,CAAC,EACxE4E,EAAY,OAAS,GAGvB,KAAK,IAAI,aAAcvkI,EAAOgqN,EAAY4D,EAAgBtpF,EAAaC,CAAW,EAE/EiM,EAAe,CAChBA,EAAc,YAAYg9E,CAAe,EAEzC,MAAM7kQ,GAAUsxC,EAAO,UAAY,CAAC2zN,CAAc,EAAI,CAACtpF,EAAaC,CAAW,GAAG,OAAO,CAACtgK,EAAKkgB,IAAMlgB,EAAMkgB,EAAE,OAAQ,CAAC,GACnHx7B,GAAUkzD,IACJ8xM,EAAA,KAAK,IAAI3pB,GAAgBwpB,EAAiB,CAC/C,OAAQ,4BACR,WAAY,CAAC7kQ,CAAM,EACnB,OAAS+M,GAAiB,CACxBotB,EAAOptB,EAAG,EAAK,EACV,SAAI,OAAQA,CAAC,EACb,qBAAgBA,EAAG,UAAU,CACpC,CACD,EAAC,CACJ,MAEGk4P,EAAe,QAAU/xM,IACnB8xM,EAAA,KAAK,IAAI3pB,GAAgBwpB,EAAiB,CAC/C,KAAM,YACN,OAAQ,iBACR,SAAU,uBACV,OAAS93P,GAAiB,CACxBotB,EAAOptB,EAAG,EAAK,EACV,SAAI,OAAQA,CAAC,EACb,qBAAgBA,EAAG,UAAU,CACpC,CACD,EAAC,GAGDs0P,EAAW,QAAUnuM,IACf8xM,EAAA,KAAK,IAAI3pB,GAAgBwpB,EAAiB,CAC/C,KAAM,YACN,OAAQ,iBACR,SAAU,qBACV,OAAS93P,GAAiB,CACxBotB,EAAOptB,EAAG,EAAK,EACV,SAAI,OAAQA,CAAC,EACb,qBAAgBA,EAAG,OAAO,CACjC,CACD,EAAC,EAGC,UAAK,UAAU,OAAO83P,CAAe,CAE9C,CAIcroP,GAAA,CACZ,QAASqoP,EACT,UAAW,aACX,SAAUtzK,EACV,SAAU,IACV,gBAAiB,IAAM,CACjBA,IACKyzK,EAAA,QAASE,GAAS,CACvBA,EAAK,QAAQ,EACd,EAEDF,EAAO,OAAS,EAEpB,EACD,EAEEzzK,EACMyzK,EAAA,QAASE,GAAS,CACvBA,EAAK,QAAQ,EACd,EAESx5E,EAAA,EAGZ,SAAS,KAAK,UAAU,OAAO,cAAen6F,CAAK,EACzC2P,EAAA3P,CAAA,EAOZ,IAAIm6F,EAAU,EACd,SAAS,KAAK,iBAAiB,YAAc3+K,GAAM,CAC/C,EAAA2+K,CAAA,CACH,EAED,SAAS,KAAK,iBAAiB,WAAa3+K,GAAM,CAEhDotB,EAAOptB,EAAG,EAAI,EACdqQ,GAAYrQ,CAAC,EACd,EAED,SAAS,KAAK,iBAAiB,YAAcA,GAAM,CAG9C,EAAE2+K,IAAY,GAEfvxJ,EAAOptB,EAAG,EAAK,CACjB,CACD,EAEK,MAAAg4P,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EAExC,MAAAD,EAAsBC,EAAe,UAAU,EAAI,CAC3D,CAEA,MAAc,SAAU,CACtB,MAAMn9N,EAAO,KAAK,KAEZt9B,EAAO,EAAE,CADAs9B,GAAM,QACKzT,GAAe,iBAAmB,CAAE,MAAMyT,EAAK,QAAQ,YAAY,GAC7F,OAAGt9B,GACE,MAAM,KAAK,KAAK,MAAM,4BAA4B,CACnD,QAAS,KAAK,KAAK,MAAM,WAC1B,EACQ,GAIJA,CACT,CA+BA,MAAc,aAAa9J,EAAiB,CACtC,IAAAT,EACJ,GAAGS,EAAQ,CACT,MAAMH,EAAW,MAAM,KAAK,SAAS,gBAAgB,gBAAgBG,CAAM,EACrET,EAAAM,EAAW,IAAMA,EAAW,GAAKG,CACzC,CAEA8xB,GAAwB,aAAavyB,CAAG,CAC1C,CAEO,UAAUuiC,EAAc5W,EAAmB,CAC7CA,IAAY,IACbiwN,GAAkB,CAAC9jC,GAAe,UAAW,KAAK,SAAUthI,GAAgB,SAAS,CAAC,EAGxF,SAAS,KAAK,UAAU,OAAOq6E,GAA8BtuH,IAAO,GAEpE,MAAM6iO,EAAY,KAAK,MACpBA,IAAc,SACf,KAAK,aAAa7iO,EAAK,EAAoB,KAAK,MAAM,OAAS,MAAS,EACnE,mBAAc,eAAgBA,CAAE,GAGlC,SAAI,YAAaA,EAAI6iO,CAAS,EAE/B,IAAAjvI,EAAiCl5G,GAAS,YAAY,YAAY,EAAImf,GAAU,EAAI,QAAQ,UAChG,GACEgpO,IAAc,QACdA,IAAc7iO,GACdtlB,GAAS,YAAY,YAAY,GACjC0O,IAAY,IACZxpB,GAAW,eAAiBw+D,GAAW,MACvC,CACA,MAAM2xG,GAAkBnwK,GAAW,SAAW,IAAM,KAAO,IAC3Dg0H,EAAmB9uF,GAAMirI,CAAc,EACvCtyC,GAA4B7J,EAAkBm8C,CAAc,CAO9D,CAEA,KAAK,MAAQ/vI,EACKwxC,KACf5xE,GAAW,UAAYijQ,IAAc,GAAoB7iO,EAAK,GAC/Di0C,GAAgB,KAAK,EAGpB4uL,IAAc,QAAa7iO,EAAK6iO,IAC9B7iO,EAAK,GAAoB,CAAChQ,GAAwB,eAAe,IAAI,IACtEA,GAAwB,SAAS,CAC/B,KAAM,KACN,MAAQC,GAAe,CAEhB,aAAQ,GAAIA,CAAU,CAC7B,EACD,EAIL,MAAM6yO,EAAiB,OAAe,cACtC,OAAAA,IAAgB9iO,CAAE,EAKX4zF,CACT,CAEO,cAAe,CACpB,OAAO,KAAK,SAAS,gBAAgB,qBAAqB,KAAK,OAAO,CACxE,CAEQ,eAAgB,CACtB,MAAMtuF,EAAO,IAAIi8H,GACf,KACA,KAAK,SACL,IAGG,2BAAe,OAAOj8H,EAAK,SAAS,EAMpC,WAAM,KAAKA,CAAI,EAEbA,CACT,CAEQ,YAAYy9N,EAAmBl6M,EAAa,GAAMz/B,EAAmB+pD,EAAkB,CAC1F,GAAA4vL,GAAa,KAAK,MAAM,OAAQ,OAEnC,MAAMC,EAAW,KAAK,KACnB,KAAK,MAAM,OAAS,GAAKn6M,GACrB,mBAAc,gBAAiB,KAAK,IAAI,EAG3CsqB,IACFA,EAAU,KAAK,MAAM,OAAO4vL,EAAW,KAAK,MAAM,OAASA,CAAS,GAGtE,MAAME,EAAS,KAAK,KACpB,KAAK,cAAc,gBAAiB,CAAC,KAAMD,EAAU,GAAIC,EAAO,EAGhE,QAAQrhQ,EAAI,EAAGA,EAAIuxE,EAAQ,OAAS,EAAG,EAAEvxE,EACfouB,GAAA,aAAa,OAAQ,EAAI,EAIhDmjD,EAAQ,OAAS,GAClBA,EAAQ,MAAM,EAAG,EAAE,EAAE,QAAS7tC,GAAS,CACrCA,EAAK,UAAU,QAAO,CACvB,EAGE,oBAAe29N,EAAO,UAAW75O,CAAO,EAE1Cy/B,IACI,mBAAc,eAAgBo6M,CAAM,EAEvBhvL,GAAgB,OAAOw8E,EAAmB,GACjD,MAAM,EAEDx8E,GAAA,sBAAsBgvL,EAAO,cAAc,GAGrD9vL,EAAA,QAAS7tC,GAAS,CACxBA,EAAK,cAAc,EACpB,EAED,WAAW,IAAM,CAEP6tC,EAAA,QAAS7tC,GAAS,CACxBA,EAAK,QAAQ,EACd,GACA,GAAS,CACd,CAEA,MAAa,QAAQrnC,EAA4C,GAAImrB,EAAqC,CACxGnrB,EAAQ,SAARA,EAAQ,OAAW0G,IACX1G,EAAA,OAAS,MAAM,KAAK,SAAS,gBAAgB,kBAAkBA,EAAQ,MAAM,GAAKA,EAAQ,OAElG,KAAM,CAAC,OAAAC,EAAQ,UAAAg9F,EAAW,SAAA38F,CAAA,EAAYN,EAEhCqnC,EAAO,KAAK,KACZ49N,EAAY,KAAK,MAAM,QAAQ59N,CAAI,EACnC69N,EAAa,KAAK,WAAW79N,EAAMrnC,CAAc,EACvD,GAAIC,MAQMglQ,EAAY,GAAK59N,EAAK,QAAU,CAAC69N,EAAY,CAO/C,MAAAhwL,EAAU,KAAK,MAAM,OAAO,EAAG,KAAK,MAAM,OAAS,CAAC,EACvD,QAAK,KAAK,SAAWj1E,EAAQ,CAC9B,KAAK,YAAY,EAAG,GAAM,GAAMi1E,CAAO,EACvC,WACK,CACC,MAAA3lE,EAAM,KAAK,QAAQvP,CAAO,EAChC,YAAK,YAAY,EAAG,GAAO,GAAOk1E,CAAO,EAClC3lE,CACT,CAMF,UA5BK01P,EAAY,EAAG,CACX,iBAAYA,EAAW,OAAW95O,CAAO,EAC9C,MACQ,SAAAxpB,GAAW,eAAiBw+D,GAAW,OAAQ,CACvD,KAAK,UAAU,CAAC,CAAC,KAAK,MAAOh1C,CAAO,EACpC,MACF,CAyBC,GAAA+5O,GAAcvjQ,GAAW,cAAgBw+D,GAAW,QAAU,SAAS,KAAK,UAAU,SAASkwF,EAA4B,EACvH,sBAAU,EAAellI,CAAO,EAC9B,GAGT,GAAGlrB,GAAU0B,GAAW,eAAiBw+D,GAAW,OAAQ,CAC1D,MAAMn+D,EAAS,MAAMqlC,EAAK,QAAQrnC,CAAgD,EAG5E4L,EAAU5J,GAAQ,OAASA,EAAO,QAAU,QAAQ,UACvD/B,GACD,QAAQ,IAAI,CACV2L,EACAy7B,EAAK,qBACN,EAAE,KAAK,IAAM,CAEZ,WAAW,IAAM,CACf,WAAW,IAAM,CACV,oBAAe,KAAK,KAAK,SAAS,GACtC,CAAC,EACC,eAAU,EAAelc,CAAO,GACpC,CAAC,EACL,CAEL,CAEA,GAAG,CAAClrB,EACG,sBAAU,EAAmBkrB,CAAO,EAClC,EAEX,CAEA,MAAa,aAAanrB,EAAkC,CACtD,IAAC,OAAAC,CAAU,EAAAD,EACZ,GAAAC,IAAWyG,IAAgB,CAACzG,EAC7B,OAGOA,EAAAD,EAAQ,OAAS,MAAM,KAAK,SAAS,gBAAgB,kBAAkBC,CAAM,GAAKA,EAEvFD,EAAQ,OACPA,EAAQ,WACNA,EAAQ,SAAWE,EAAU,KAC9BF,EAAQ,KAAOi9E,GAAS,MACfx8E,GAAgB,QAAQT,EAAQ,MAAM,IAC/CA,EAAQ,KAAOi9E,GAAS,aAI5Bj9E,EAAQ,OAARA,EAAQ,KAASi9E,GAAS,OAI5B,MAAMkoL,EAAgB,KAAK,MAAM,UAAW99N,GAAS,KAAK,WAAWA,EAAMrnC,CAAO,GAAM2B,GAAW,eAAiBw+D,GAAW,QAAU,KAAK,QAAU,CAAE,EAC1J,GAAGglM,IAAkB,GACd,wBAAYA,EAAgB,CAAC,EAC3B,KAAK,QAAQnlQ,CAAO,EAG7B,MAAMolQ,EAAU,KAAK,KACrB,IAAI/9N,EAAO+9N,EACX,OAAGA,EAAQ,SACT/9N,EAAO,KAAK,iBAGd,KAAK,cAAc,gBAAiB,CAAC,KAAM+9N,EAAS,GAAI/9N,EAAK,EAItD,KAAK,QAAQrnC,CAAO,CAC7B,CAEO,cAAcC,EAAgB,CACnC,KAAK,aAAa,CAChB,OAAAA,EACA,KAAMg9E,GAAS,UAChB,CACH,CAEA,MAAa,qBAAqBh9E,EAAgBuP,EAAkB,CAC/DvP,IAAWC,EAAU,KACViP,GAAA,WAAY,eAAgB,CAACK,CAAO,EAEhD,MAAM,KAAK,SAAS,gBAAgB,0BAA0BvP,EAAO,WAAYuP,CAAO,EAG1F,KAAK,UAAU,GACfmvB,GAAkB,uBAAuB1+B,EAAQ,CAACuP,EAAS,EAAK,CAClE,CAEQ,iBAAiBhG,EAA2B,CAC5C,MAAAuI,EAAK,SAAS,cAAc,MAAM,EACxC,IAAImH,EAAI,cAGR,OAFGnH,EAAA,UAAU,IAAImH,CAAC,EACfnH,EAAA,QAAQ,OAASvI,EAAO,EACpBA,EAAO,EAAG,CACf,IAAK,0BAA2B,CAEzB0P,GAAA,QACL,QAAQ,EAAI,EAAG,EAAI,EAAG,EAAE,EAAG,CACzB,MAAMmsP,EAAKnsP,EAAI,OACTosP,EAAM,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAYD,GAAM,IAAM,EAAI,IAAMA,EAAK,SAAY,IAAM,EAAI,IAAMA,EAAK,QAAU,IACtFtzP,EAAG,OAAOuzP,CAAG,CACf,CACA,KACF,CAEA,IAAK,+BACL,IAAK,kCACL,IAAK,+BACL,IAAK,+BACL,IAAK,+BAAgC,CAC9BpsP,GAAA,UAIL,KACF,CAEA,IAAK,+BACL,IAAK,+BACL,IAAK,+BAAgC,CAC9BA,GAAA,UACL,KACF,CAEA,IAAK,kCACL,IAAK,iCAAkC,CAChCA,GAAA,oBACL,QAAQ,EAAI,EAAG,EAAI,EAAG,EAAE,EAAG,CACnB,MAAAqsP,EAAM,SAAS,cAAc,KAAK,EACxCA,EAAI,UAAYrsP,EAAI,OACpBnH,EAAG,OAAOwzP,CAAG,CACf,CACA,KACF,CACF,CAEG,OAAAxzP,EAAA,UAAU,IAAImH,CAAC,EAEXnH,CACT,CAEA,MAAa,cAAc9R,EAAgB8B,EAAyBzB,EAAmB,CAI/E,MAAAqG,EAAS1G,EAAO,SACtB,GAAG0G,GAAU,MAAM,KAAK,SAAS,gBAAgB,MAAM1G,CAAM,EAE3D,OAGF,MAAMy/P,EAAU,MAAM,KAAK,SAAS,kBAAkB,eAAez/P,EAAQK,CAAQ,EAClF,IAACo/P,GAAS,OAEX,OAGI,MAAAC,EAASD,EAAQ,CAAC,EAElB8F,EAEF,CACF,QAAS,CACP,wBAA2B,gCAC3B,6BAAgC,iCAChC,gCAAmC,iCACnC,6BAAgC,kCAChC,6BAAgC,kCAChC,6BAAgC,kCAChC,6BAAgC,oCAChC,6BAAgC,oCAChC,6BAAgC,oCAChC,0BAA6B,iCAC7B,+BAAkC,qCAClC,gCAAmC,uCACrC,EACA,KAAM,CACJ,wBAA2B,gCAC3B,6BAAgC,iCAChC,gCAAmC,iCACnC,6BAAgC,kCAChC,6BAAgC,kCAChC,6BAAgC,kCAChC,6BAAgC,oCAChC,6BAAgC,oCAChC,6BAAgC,oCAChC,0BAA6B,iCAC7B,+BAAkC,qCAClC,gCAAmC,uCACrC,EACA,MAAO,CACL,wBAA2B,uCAC3B,6BAAgC,wCAChC,gCAAmC,wCACnC,6BAAgC,yCAChC,6BAAgC,yCAChC,6BAAgC,yCAChC,6BAAgC,2CAChC,6BAAgC,2CAChC,6BAAgC,2CAChC,0BAA6B,wCAC7B,+BAAkC,2CACpC,GAGIC,EAAO9+P,EAAS6+P,EAAa,QAAW9F,EAAQ,OAAS,EAAI8F,EAAa,MAAQA,EAAa,KACrG,IAAIh8P,EAASm2P,EAAO,OAEjB,GAAAD,EAAQ,OAAS,EAAG,CACrB,MAAMl6P,EAAS,GACPk6P,EAAA,QAASC,GAAW,CACpB,MAAAr7O,EAAOq7O,EAAO,OAAO,EACxBn6P,EAAE8e,CAAI,IAAM,SAAW9e,EAAE8e,CAAI,EAAI,GACpC,EAAE9e,EAAE8e,CAAI,EACT,EAEE,OAAO,KAAK9e,CAAC,EAAE,OAAS,IAChBgE,EAAA,CACP,EAAG,2BAGT,CAEM,MAAAuJ,EAAc0yP,EAAKj8P,EAAO,CAAC,EACjC,GAAG,CAACuJ,EAEF,OAGE,IAAAq1J,EACAt2J,EACD,GAAA7R,EAAO,YAAa,CACf,MAAAgY,EAAY,IAAIjB,GACHoxJ,EAAAnwJ,EAAU,OAAO,CAAC,OAAQ0nP,EAAO,OAAO,SAAS,EAAK,EAAG,cAAe,EAAK,GACzF7tP,EAAA,CACLmG,EAAU,QACVynP,EAAQ,OAAS,GAGb,MAAAt3F,CACR,CAEIrmK,IACUA,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,UAAU,IAAI,SAAU,uBAAuB,GAGjDA,EAAA,UAAU,OAAO,mBAAoByH,EAAO,IAAM,kCAAoCA,EAAO,IAAM,iCAAiC,EAE9I,IAAIk8P,EAAgB3jQ,EAAU,kBAU3B,GATC2jQ,EAICA,EAAc,QAAQ,SAAWl8P,EAAO,GACzCk8P,EAAc,YAAY,KAAK,iBAAiBl8P,CAAM,CAAC,GAJzCk8P,EAAA,KAAK,iBAAiBl8P,CAAM,EAC5CzH,EAAU,QAAQ2jQ,CAAa,GAO9Bl8P,EAAO,IAAM,kCAAmC,CAC9CsI,EACDA,EAAK,IAAI,EAETA,EAAO,GAGT,MAAM/Q,EAAO+S,GAAWlT,GAAc4I,EAAO,QAAQ,CAAC,EACtDsI,EAAK,KAAK/Q,CAAI,CAChB,CAEM,MAAA4kQ,EAAqBnhQ,EAAKuO,EAAajB,CAAI,EAC9B,OAAA6zP,EAAA,UAAU,IAAI,yBAAyB,EAEvD5jQ,EAAU,kBAAoB,EAAaA,EAAA,iBAAiB,YAAY4jQ,CAAkB,EACxF5jQ,EAAU,OAAO4jQ,CAAkB,EAGjC5jQ,CACT,CAEA,MAAc,cAAc0E,EAAgBm/P,EAAuD,CAC3F,MAAAC,EAAWD,EAAW,OAAY,MAAM,KAAK,cAAcn/P,EAAO,SAAS,EAAI,CAAC,EACtF,GAAGo/P,EACD,MAAO,CAAC,OAAQ,GAAM,OAAQ,QAAQ,QAAQA,CAAQ,GAGxD,MAAMC,EAAiB,MAAM,KAAK,SAAS,aAAa,kBAAkB,YAAYr/P,CAAM,EACtFs/P,EAAO,MAAM5+N,GAAuB,CACxC,GAAI,CAACtO,EAAUmtO,CAAa,EAAI,MAAM,QAAQ,IAAI,CAChD1+N,GAAqB7gC,EAAQ,OAAW,OAAW,OAAW0gC,CAAQ,EACtE,KAAK,SAAS,aAAa,kBAAkB,WAAW1gC,CAAM,EAC/D,EAEM,OACL,OAAQu/P,EAAc,OACtB,OAAQA,EAAc,OAAO,KAAMC,GAAY,CAC7C,GAAGA,EAAU,EAAG,CACR,MAAAllQ,EAAO,SAAS,cAAc,MAAM,EAE1CA,EAAK,OAAO,GAAGwD,GAAK,CAACs0B,EAAUr0B,EAAK,cAAe,CAACm+B,GAAuBsjO,CAAO,CAAC,CAAC,CAAC,EAAG,EAAK,CAAC,EACnFptO,EAAA93B,CACb,CAEO,OAAA83B,CAAA,CACR,EACH,EAGI72B,EAAS8jQ,EAAe,OAAO,KAAKC,CAAI,EACvC,OACL,OAAQD,EAAe,QAAU,MAAM9jQ,GAAQ,OAAS8jQ,EAAe,OACvE,OAAQ9jQ,EAAO,KAAM,GAAM,EAAE,MAAM,EAEvC,CAEA,MAAc,cAAcwE,EAAgB0/P,EAAsB,CAChE,MAAMlkQ,EAAmC,CACvC,OAAQ,GACR,OAAQ,QAAQ,QAAQ,MAAwB,GAG5CxB,EAAO,MAAM,KAAK,SAAS,gBAAgB,QAAQgG,CAAM,EAC/D,GAAG,CAAChG,GAASA,EAAK,OAAO,MAAQ,CAAC0lQ,EACzB,OAAAlkQ,EAGH,MAAA62B,EAAWkK,GAAoBviC,CAAI,EAEzC,GAAG,CAACA,EAAK,OAAO,KAAO,CAACA,EAAK,OAAO,QAAS,CAC3C,IAAIqlQ,EAAW,MAAM,KAAK,cAAcr/P,EAAO,UAAU,EAOzD,GANG,CAACq/P,GAAYrlQ,EAAK,QAAQ,IAAM,qBACtBqlQ,EAAA,SAAS,cAAc,MAAM,EAC/BA,EAAA,UAAU,IAAI,QAAQ,EAC/BA,EAAS,OAAOhtO,CAAQ,GAGvBgtO,EACM,OAAA7jQ,EAAA,OAAS,QAAQ,QAAQ6jQ,CAAQ,EACjC7jQ,CAEX,CAEO,OAAAA,EAAA,OAAS,QAAQ,QAAQ62B,CAAQ,EACjC72B,CACT,CAEA,MAAc,cAAc/B,EAAgBimQ,EAAsBN,EAAoB,CACpF,GAAG,CAAC3lQ,EAAQ,OACR,IAAA2L,EACD,OAAA3L,EAAO,YACR2L,EAAU,KAAK,cAAc3L,EAAO,WAAY2lQ,CAAQ,EAExDh6P,EAAU,KAAK,cAAc3L,EAAO,WAAYimQ,CAAU,EAGrDt6P,CACT,CAEA,MAAa,cAAc5L,EAQxB,CAIK,MAAC,OAAAC,EAAQ,QAAAwU,EAAS,UAAA89I,EAAW,cAAA4zG,EAAe,WAAAvkQ,EAAY,WAAAskQ,EAAY,SAAAN,CAAY,EAAA5lQ,EAEtF,GAAG,CAACuyJ,EAAW,CAEP,MAAA6zG,EAAkB3xP,EAAQ,cAAc,wBAAwB,EACtE,GAAG2xP,GAAmB,MAAM,KAAK,cAAcnmQ,EAAQmmQ,CAAe,EAEpE,MAEJ,CAEA,MAAMpkQ,EAAS,MAAM,KAAK,cAAc/B,EAAQimQ,EAAYN,CAAQ,EAEjE,IAAChkQ,IAEF,OAGF,MAAMoP,EAAM,SAAW,CACf,MAAA6nB,EAAW72B,GAAU,MAAMA,EAAO,OACrC,GAACJ,IAIJ,MAAO,IAAM0V,GAAe7C,EAASokB,GAAYyW,CAAW,GAGxDA,EAAc62N,EAAgBt9M,GAAO,GAC3C,GAAG,CAAC7mD,GAAUA,EAAO,QAAUuwJ,IAAc,OAC3C,OAAOvhJ,EAAI,KACHuhJ,EACR,MAAO,KACL99I,EAAQ,YAAc66B,EACft+B,EAAM,OAAMlH,GAAaA,IAAY,GAGlD,CAEO,yBAAyBonE,EAAiB,CAC/C,KAAK,SAAS,mBAAmB,UAAU,KAAK,KAAK,OAAQ,CAAC,EAAGA,EAAS,0BAA4B,kCAAmC,OAAW,KAAK,KAAK,QAAQ,CACxK,CAEO,WAAWm1L,EAAgEC,EAA2B,CAC3G,OAAOD,EAAS,SAAWC,EAAS,QAClCD,EAAS,WAAaC,EAAS,WAC9B,OAAOD,EAAS,MAAU,OAAOC,EAAS,MAASD,EAAS,OAASC,EAAS,KACnF,CAEO,YAAYrmQ,EAAgB,CAC5B,cAAS,kBAAkB,WAAWA,EAAO,UAAU,EAAE,KAAMsmQ,GAAY,CAC9Ex2O,GAAa,YAAYgjO,GAAkB9yP,EAAQsmQ,EAAQ,aAAa,EACzE,CACH,CAEO,aAAatmQ,EAAgB,CAClC,OAAOssC,GAAkB,CACvB,aAAc,2BACd,OAAQ,CACN,QAAS,IACX,EACA,mBAAoB,kCACrB,EAAE,KAAK,IACC,KAAK,SAAS,mBAAmB,YAAYtsC,EAAQC,EAAU,IAAI,CAC3E,CACH,CAEO,sBAAsB,CAC3B,OAAAD,EACA,QAAAwU,EACA,oBAAA+xP,EACA,WAAA7lL,EACA,MAAAz4E,CAAA,EAOC,CACD,MAAMgS,EAAgB,mBAChBL,EAA2B,2BAO3Bja,EAAOa,GAAgB,QAAQR,CAAM,EAC3C,IAAIwmQ,EAA2BC,EAC/B,GAAGF,GAAuB7lL,EAAY,CAEpC,MAAMlhF,EADSiZ,GAAoB9Y,CAAI,EACjB,OAChB+lC,EAAW6gO,EAAsB,gBAAkB,cACzDC,EAAoB,SAAS9gO,CAAQ,sBACrC+gO,EAA4B,SAAS/gO,CAAQ,SAAS,KAAK,IAAI,EAAGlmC,CAAM,CAAC,0BACpE,CACL,MAAMkZ,EAAazQ,GAAO,OAASqQ,GAAwB3Y,CAAI,EAC/D,GAAG+Y,IAAe,GAAI,CACZlE,EAAA,MAAM,eAAeyF,CAAa,EAClCzF,EAAA,MAAM,eAAeoF,CAAwB,EACrD,MACF,CAEA4sP,EAAoB,cAAc9tP,CAAU,cAC5C+tP,EAA4B,cAAc/tP,CAAU,qBACtD,CAEQlE,EAAA,MAAM,YAAYyF,EAAeusP,CAAiB,EAClDhyP,EAAA,MAAM,YAAYoF,EAA0B6sP,CAAyB,CAC/E,CAEA,MAAa,aAAc,CACzB,MAAMhmN,EAAY,MAAM,KAAK,SAAS,WAAW,aAAa,EAExDzgD,GADO,MAAM,KAAK,SAAS,gBAAgB,gBAAgBygD,EAAU,oBAAoB,GAC3E,GAAG,SAAS,EAAK,EACrC,KAAK,SAAS,mBAAmB,SAAS,CAAC,OAAAzgD,EAAQ,KAAM,QAAQ,EAC5D,kBAAa,CAAC,OAAAA,CAAA,CAAO,CAC5B,CA4HF,CAEA,MAAMokC,GAAe,IAAIu6N,GACzB74M,KAAmBA,GAAe,aAAe1hB,IACjD,MAAAsiO,GAAetiO,GC/xFFyiC,GAAsB,CAACrjC,EAAsB,IAAkB,CAC1E,MAAM96B,EAAIo1C,GAAU,EAAE,OAAQ,GAAG,EACjC,GAAG,CAACp1C,GAAKA,EAAE,UAAU,SAAS,WAAW,EACvC,OAGF,MAAMs3P,EAAUz6O,EAAgB,EAAE,OAAQ,SAAS,EAChD,GAAA7c,aAAa,oBAAsB,CAACs3P,GAAWx8N,EAAQ,UAAU,SAAS,oBAAoB,GAAI,CAC7F,MAAAh6B,EAAUd,EAAE,aAAa,SAAS,EACxC,MAAG,CAACc,GAAWA,EAAQ,SAAS,iBAAiB,EAC/C,QAGFoT,GAAY,CAAC,EACN,IAAM,CACXlU,EAAE,MAAM,GAEZ,CACF,EAEA,MAAqBk1H,WAAuB6xF,EAA8E,CAUxH,YAAsBk3C,EAAiBC,EAAqB,CAC1D,MAAM,IAAIppO,GAAiB,CACzB,YAAcxzB,GAAS,CACrB,MAAM68P,EAAgB,KAAK,cAAc,YAAY,IAAM,8BACrD,CAAC,IAAAl5P,EAAK,OAAA3N,CAAU,EAAAgK,EAChBoI,EAAQ0/C,GAAoB9nD,EAAM,EAAI,EAE5C,GAAIoI,GAED,EAAAy0P,GAAiB,CAACjpI,GAAe,mCAAmCxrH,CAAK,GAI5E,MAAO,CAAC,QAAS,KAAqB,IAAAzE,EAAK,OAAA3N,CAAM,CACnD,EACD,EAAG,CAAC,SAAU,SAAS,EAAG4mQ,EAAY,GAAK,CAAC,EAfzB,WAAAD,EAqHtB,iBAAc,MAAMrhP,GAAqC,CACvD,KAAK,UAAU,CACb,QAAS,KAAK,MAAQA,EAAO,QAAU,MAAM,KAAK,iBAAiBA,EAAO,OAAQA,EAAO,GAAG,EAC5F,MAAOA,EAAO,MACd,OAAQA,EAAO,QACf,UAAW,GACZ,GAGH,iBAAc,MAAMA,GAAqC,CACvD,KAAK,UAAU,CACb,QAAS,KAAK,MAAQA,EAAO,QAAU,MAAM,KAAK,iBAAiBA,EAAO,OAAQA,EAAO,GAAG,EAC5F,MAAOA,EAAO,MACd,OAAQA,EAAO,QACf,UAAW,EACZ,GAGH,mBAAgB,IAAM,CACpB,MAAMA,EAAS,KAAK,OACPwK,GAAA,YACXohH,GACA5rH,EAAO,OACP,CAACA,EAAO,GAAG,EACX03D,GAAS,KACT,IAAM,CACJ,KAAK,OAAS,CAAC,QAAS,KAAK,QAAQ,OACrC,KAAK,MAAM,CACb,EACF,EAGF,oBAAiB,IAAM,CACrB,MAAM13D,EAAS,KAAK,OACjBA,EAAO,KAERwK,GAAa,YAAYqvD,GAAc,CACrC,CAAC75D,EAAO,MAAM,EAAG,CAACA,EAAO,GAAG,GAC3B,IACM,KAAK,OACb,CACH,EAGF,mBAAgB,MAAM/Y,GAAkB,CACtC,GAAI,CAAC,IAAAoB,EAAK,OAAA3N,EAAQ,QAAAsJ,CAAA,EAAW,KAAK,OAC/B,GAAAqE,GAAOA,IAAQ,OAAO,iBAAkB,CACnC,MAAAtN,EAAW,KAAK,cAAc,SACpCiJ,MAAY,MAAM,KAAK,iBAAiBtJ,EAAQ2N,CAAG,GACnD,KAAK,MAAMpB,CAAC,EAEX,KAAK,SAAW,CACf,GAAG7K,GAAW,SAAU,CAChB,MAAA43B,EAAMy8C,GAAgB,OAAOykJ,EAAiB,EACjDlhM,GACDA,EAAI,MAAM,CAEd,CAEA8K,GAAa,aAAa,CACxB,OAAQ96B,EAAQ,OAChB,UAAWqE,EACX,SAAAtN,CAAA,CACD,EACF,CACH,GAGF,qBAAkB,IAAM,CACtB,KAAM,CAAC,QAAAiJ,EAAS,MAAAoQ,GAAS,KAAK,OACxBtH,EAAQ0/C,GAAoBxoD,EAAS,GAAMoQ,CAAK,EAClDtH,GACe2O,GAAA,eAAe,CAAC,MAAA3O,EAAO,QAASgyB,GAAa,KAAK,QAAQ,cAAc,QAAQ,GA5K9F,gBAAW,UAAY,IAAM,CAChC,KAAK,MAAM,GAOb,KAAK,QAAQ,QAAU,SAAS,cAAc,KAAK,EAC9C,aAAQ,QAAQ,UAAU,IAAIorL,GAAyB,WAAY,sBAEpE,IAAAs3C,EACJ,MAAMC,EAAoB,IAAM,CAC3BD,GACD,aAAaA,CAAc,EAGZA,EAAA,OAAO,WAAW,IAAM,CACtBA,EAAA,OACjB,KAAK,QAAQ,QAAQ,UAAU,OAAO,YAAY,GACjD,GAAG,GAER,KAAK,QAAQ,QAAQ,iBAAiB,aAAc,IAAM,CACpDplQ,GAAW,WAEf,KAAK,QAAQ,QAAQ,UAAU,IAAI,YAAY,EAE5ColQ,IACD,aAAaA,CAAc,EACVA,EAAA,QAGnB,SAAS,iBAAiB,WAAYC,EAAmB,CAAC,KAAM,GAAK,GACtE,EAED,MAAMzgE,EAAoB,IAAIrnK,GAAW,KAAK,QAAQ,OAAO,EAC7DqnK,EAAkB,mBAAqBygE,EAGvC,KAAK,SAAS,OAAO,KAAK,QAAQ,OAAO,EAEzClqP,EAAiB,KAAK,QAAQ,OAAQ,KAAK,aAAa,EAElD,MAAAuU,EAA6C,CAAC,KAAK,eAAiB,CACxE,KAAM,UACN,KAAM,UACN,QAAS,KAAK,gBACb,KAAK,gBAAkB,CACxB,KAAM,WACN,KAAM,+BACN,QAAS,KAAK,iBACb,KAAK,cAAgB,CACtB,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,KAAK,cACf,EAED,KAAK,iBAAiBA,CAAO,EAI7B,KAAK,aAAa,CACpB,CApFA,IAAI,eAAgB,CAClB,OAAO,KAAK,WAAW,aACzB,CAoFU,cAAe,CACvB,MAAM,aAAa,EACnBvU,EAAiB,KAAK,QAAQ,QAAS,KAAK,cAAc,EAC1DA,EAAiB,KAAK,OAAO,UAAW,KAAK,aAAa,EAEpD,MAAAwX,EAAW9nB,GAAkB,CACjC,MAAM1C,EAAWg9D,GAAoB,KAAK,QAAQ,QAASt6D,CAAC,EAC5D,GAAG1C,EACI,oBAAQ,KAAK,IAAM,CACjB,aAAQ,QAAQ,oBAAoB,QAASwqB,EAAS,CAAC,QAAS,GAAK,EACjExqB,GAAA,CACV,EACM,EACT,EAGG,aAAQ,QAAQ,iBAAiB,QAASwqB,EAAS,CAAC,QAAS,GAAK,CACzE,CAcU,iBAAiBr0B,EAAgB2N,EAAa,CACtD,OAAO,KAAK,cAAc,YAAc,KAAK,SAAS,mBAAmB,0BAA0B3N,EAAQ2N,CAAG,EAAI,KAAK,SAAS,mBAAmB,iBAAiB3N,EAAQ2N,CAAG,CACjL,CA6EQ,WAAWrE,EAAoB,CACrC,MAAMm0H,EAAc,CAAC,CAAEn0H,EAA4B,OAAO,UACvDm0H,GACD,KAAK,OAAO,OAAO,OAAOl5H,EAAK,oBAAoB,CAAC,EAGhD,MAAA6N,EAAQ0/C,GAAoBxoD,EAAS,EAAI,EACzCypF,EAAsD,CAC1D,kBAAqB3gF,GAAsB,OAAS,SAAYA,EAAqB,UAAa,OAClG,UAAW,SAGT,IAAA86L,EACAhjM,EACJ,GAAGuzH,EAAa,CACd,MAAMxJ,EAAoB3qH,EAA4B,iBAChDwpF,EAAYxpF,EAA4B,MAA2C,QAClFY,EAAA,SAAS,cAAc,KAAK,EACtBgjM,EAAA,GACP,MAAAh4K,EAAI,SAAS,cAAc,GAAG,EACpCA,EAAE,OAAOv0B,GAAcszH,EAAiB,KAAK,CAAC,EACzC/pH,EAAA,OACHgrB,EACA;AAAA,EACA29D,GAAuBC,EAAS,CAAC,GAAGC,EAAiB,SAAUD,EAAQ,QAAQ,EAAG,EAAI,GAGxF,MAAM3iE,EAASqJ,GAAO,0CAA2C,CAAC,SAAU,GAAK,EACjFrJ,EAAO,OAAOxvB,GAAcszH,EAAiB,WAAW,CAAC,EACpD,aAAQ,QAAQ,OAAO9jG,CAAM,EAClC,KAAK,QAAQ,QAAQ,UAAU,IAAI,YAAY,EAE/CtT,EAAiBsT,EAAQ,IAAM,CACxB,aAAQ,KAAK,IAAM,CACtBiU,GAAa,oBAAoB96B,CAA0B,EAC5D,EACF,CACO,MAAA4jM,EAAa,CAAC,CAAE5jM,EAA4B,WACpDY,EAAO8G,GAAoB,CACzB,OAAQ1H,EAAQ,OAChB,QAAAA,EACA,WAAY,KAAK,QAAQ,MAAM,iBAAiB,IAAI,EACpD,gBAAAypF,CAAA,CACD,GAGHr+E,GAAa,KAAK,QAAQ,QAAQ,kBAAmBxK,CAAI,EACzD,KAAK,QAAQ,QAAQ,UAAU,OAAO,OAAQ,CAACgjM,CAAU,CAE3D,CAEO,iBAAiBpoL,EAA6B,CAC9C,uBAAW,iBAAiBA,CAAO,EAEjC,IACT,CAEA,MAAa,UAAU,CACrB,QAAAxb,EACA,MAAAoQ,EACA,OAAA4L,EACA,UAAA6lL,EAAY,EACZ,QAAAtuK,EAAU,GACV,YAAA29K,EAAc,CAAC,EACf,YAAAC,EAAc,CAAC,EACf,eAAAr9E,CAAA,EAWC,CACD,GAAG,KAAK,gBAAiB,OAAO,KAAK,gBAErC,MAAMzvH,EAAMrE,EAAQ,IACdy0E,EAAUz0E,EAA4B,UAAY,CAACA,EAAQ,OAASotD,GAAgBptD,EAA4B,QAAQ,EAAIA,EAAQ,OACpI8I,EAAQ0/C,GAAoBxoD,EAAS,GAAMoQ,CAAK,EAEhD+jH,EAAc,CAAC,CAAEn0H,EAA4B,OAAO,UACpD0qN,EAAWv2F,EACX4oC,EAAa,MAAM,KAAK,SAAS,gBAAgB,WAAW/8J,EAAQ,MAAM,EAC1E09P,EAAmB19P,EAAQ,IAAM,iBACjC29P,EAAqBD,GAAoBhzC,GAAY,CAAE,MAAM,KAAK,SAAS,mBAAmB,WAAW1qN,CAAO,EAChH49P,GAAuBF,EAAmB3gG,EAAa4gG,GAAsB,CAACxpI,IAAgB,CAAC2vC,GAAoB9jK,CAAO,EACtD,CACxE,CAAC,CAAC,KAAK,QAAQ,QAAS,KAAK,cAAc,EAAG29P,CAAkB,EAChE,CAAC,CAAC,KAAK,QAAQ,SAAU,KAAK,eAAe,EAAGC,CAAmB,EACnE,CAAC,CAAC,KAAK,QAAQ,OAAQ,KAAK,aAAa,EAAG,CAAE,MAAM,KAAK,SAAS,mBAAmB,iBAAiB59P,CAAO,CAAE,GAG/G,QAAQ,CAAC,CAAC8nB,EAASihB,CAAI,IAAM,CACrBjhB,EAAA,QAASjB,GAAW,CACvBA,aAAkB,YACZA,EAAA,UAAU,OAAO,OAAQkiB,CAAI,EAE7BliB,EAAA,OAAS,IAAM,CAACkiB,CACzB,CACD,EACF,EAED,KAAK,SAAS,UAAU,OAAO,cAAe60N,CAAmB,EAEjE,KAAK,WAAW59P,CAAO,EACjB,MAAAqC,EAAU,MAAM,WAAW,CAC/B,MAAAyG,EACA,UAAW9I,EAAQ,KACnB,OAAAy0E,EACA,UAAAotH,EACA,OAAA7lL,EACA,QAAAuX,EACA,YAAA29K,EACA,YAAAC,EACA,QAAAnxM,EACA,eAAA8zH,EACA,SAAA42F,CAAA,CAED,EACD,YAAK,OAAO,IAAMrmN,EACb,YAAO,OAASrE,EAAQ,OAC7B,KAAK,OAAO,QAAUA,EACtB,KAAK,OAAO,MAAQoQ,EAEb/N,CACT,CAEA,OAAc,mCAAmCyG,EAA6B,CACpE,OAAAA,EAAM,IAAM,SAAWwpF,GAA2B,IAAIxpF,EAAM,SAAS,GAAKA,EAAM,MAAQgpF,EAClG,CACF,CCnXO,SAAS6jB,GAAgF,CAC9F,cAAAC,EACA,SAAAC,EACA,QAAAtuF,EAAU,EACV,MAAApb,EAAQ,EACR,gBAAA2pG,CACF,EAMG,CACD,MAAM1oG,EAAawoG,EAAc,CAAC,EAAE,IAAM,wBACpC8zI,EAAiB9zI,EAAc,MAAM,EAAE,KAAK,CAACx2G,EAAGwsB,IAAMxsB,EAAE,OAASwsB,EAAE,MAAM,EAAE,CAAC,EAC5E+9N,EAAgBttP,GAA4BD,GAA2BC,EAAQqtP,EAAe,SAAU,GAAO,GAAM,EAAI,EACzHtuM,EAAqChuC,EAAa,OAAY,CAClE,GAAI,oBACJ,EAAG,wBACH,EAAG,sBAGCsjB,EAAOklF,EAAc,IAAI,CAACtiE,EAAQt5C,IAAQ,CAC9C,MAAM6jQ,EAAgB,CAACvqN,EAAO,QAAUlmC,EAAckmC,EAAiC,MAAQ,GAC/F,IAAIt8C,EAAQokD,EAAOngD,EAAKmgD,EAAK9H,EAAO,MAAM,GAAK,SAAU,CAACA,EAAO,MAAM,CAAC,EAAIu2D,GAAqBv2D,EAAO,OAAQ,EAAK,EACjHhkB,EAOJ,GANGliB,EACDkiB,EAAWr0B,EAAK,aAAc,CAAC0uP,EAAakU,CAAa,EAAG1xP,CAAK,CAAC,EAC1DmnC,IAAWo2M,IACRp6N,EAAAr0B,EAAK,gBAAiB,CAAC0uP,EAAa,CAACr2M,EAAO,OAASA,EAAO,MAAM,CAAC,CAAC,GAG9EA,IAAWo2M,EAAgB,CACtB,MAAAlyP,EAAO,SAAS,cAAc,MAAM,EACpC8zB,EAAQ,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,6BAA6B,EACjD,MAAMu+N,EAAiB,CAACH,EAAe,OAASp2M,EAAO,OAASo2M,EAAe,OACzEI,EAAW,KAAK,OAAO,EAAI,CAACx2M,EAAO,OAASu2M,GAAkB,GAAG,EACjEv+N,EAAA,YAAc,IAAMw+N,EAAW,IACrCtyP,EAAK,OAAO8zB,EAAOwqF,EAAkB9+G,EAAQs4B,CAAQ,EAClDwmF,EACO9+G,EAAAQ,EAEG83B,EAAA93B,CAEf,CAEM,MAAAmvB,EAAgB,IAAIC,GAAc,CACtC,QAAS5sB,IAAQutB,EACjB,MAAO,GACP,KAAM,iBACN,QAAS,GACV,EAEKyJ,EAAM,IAAI5B,GAAI,CAClB,MAAAp4B,EACA,cAAA2vB,EACA,UAAW,GACX,SAAA2I,EACA,iBAAkBq6N,EAAav8O,EAAaywP,EAAgB1xP,EAAQmnC,EAAO,MAAM,EAClF,EAEG,OAAAtiB,EAAA,UAAU,UAAU,IAAI,2BAA2B,EAEhDA,CAAA,CACR,EAEKpH,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,4BAA4B,EAC1CA,EAAA,OAAO,GAAG8G,EAAK,IAAKM,GAAQA,EAAI,SAAS,CAAC,EAEzC,MAAAg5N,EAAoB,IAAMp0I,EAAcllF,EAAK,UAAWM,GAAQA,EAAI,cAAc,OAAO,CAAC,EAE3F,OAAApH,EAAA,iBAAiB,SAAU,IAAM,CACpCisF,EAASm0I,GAAmB,EAC7B,EAEDn0I,EAASm0I,GAAmB,EAErBpgO,CACT,CAEO,SAASk0O,GAAernQ,EAA4B,CACzD,MAAM+zG,EAAO/zG,EAAQ,KACrB,GAAG,CAAC+zG,EACF,OAGF,IAAIv0B,EAAoB4mB,EACrB2N,EAAK,IAAM,2BACZv0B,EAAal5E,GAAUytG,EAAK,OAAO,GAAK/zG,EAAQ,OAEhDw/E,EAAax/E,EAAQ,MAAQE,EAAU,KAAOF,EAAQ,OAGxDomG,EAAWpmG,EAAQ,MAAQA,EAAQ,OAASE,EAAU,KACtDkmG,MAAalmG,EAAU,MAEjB,MAAAonQ,EAAalhK,IAAalmG,EAAU,KACpCklI,EAAcrxB,EAAK,IAAM,4BAA8B,CAACA,EAAK,UACnE,MAAO,CAAC,WAAAv0B,EAAY,SAAA4mB,EAAU,WAAAkhK,EAAY,YAAAliI,EAAa,KAAArxB,CAAI,CAC7D,CAEA,MAAqBwzJ,EAAc,CAOjC,YAAmBvnQ,EAA+B,CAA/B,aAAAA,EAuLnB,KAAQ,YAAc,IAAM,CACpB,MAAC,IAAAu5B,EAAK,QAAAv5B,CAAW,OACjB,CAAC,UAAAwlD,EAAW,aAAAC,CAAgB,EAAAlsB,EAClCv5B,EAAQ,OAAO,UAAU,OAAO,aAAcwlD,EAAY,GAAG,EAC7DxlD,EAAQ,OAAO,UAAU,OAAO,UAAWwlD,EAAY,CAAC,EACxDjsB,EAAI,UAAU,OAAO,aAAeksB,EAAeD,EAAajsB,EAAI,YAAY,GA3LhF,KAAK,eAAev5B,CAAO,CAC7B,CAEA,MAAc,eAAeA,EAA+B,CAC1D,MAAMu5B,EAAM,KAAK,IAAM,SAAS,cAAc,KAAK,EACnDA,EAAI,OAAOv5B,EAAQ,OAAQA,EAAQ,IAAI,EACvCu5B,EAAI,UAAU,IAAI,oBAAqB,aAAc,aAAc,cAAc,EAC7EA,EAAA,iBAAiB,SAAU,KAAK,WAAW,EAEvCv5B,EAAA,KAAK,OAAO,GAAG,CACrB,KAAK,qBAAqB,EAC1B,MAAM,KAAK,cAAc,EACzBA,EAAQ,OAAS,WAAa,CAACA,EAAQ,iBAAmB,KAAK,kBAAkB,EACjF,KAAK,wBAAwB,GAC7B,OAAO,OAAO,CAAC,EACTA,EAAA,UAAU,UAAU,IAAI,YAAY,CAC9C,CAEA,MAAc,eAAgB,CACtB,MAAAwnQ,EAAuB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sCAAsC,EACnE,MAAAC,EAAmB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,kCAAkC,EAC3D,MAAAC,EAAyB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,wCAAwC,EAEvE,MAAAC,EAAqC,CAAC,cAAe,IAE3D,IAAIpnQ,EAAoB4wB,EAClB,MAAAy2O,EAAcP,GAAe,KAAK,OAAO,EAC/C,GAAGO,EAAa,CACGH,EAAA,UAAU,IAAI,cAAc,EAC7C,KAAM,CAAC,WAAAjoL,EAAY,SAAA4mB,EAAU,WAAAkhK,EAAY,YAAAliI,EAAa,KAAArxB,CAAQ,EAAA6zJ,EACxDC,EAAarjQ,EAAK,aAAc,CAACuvG,EAAK,MAAM,CAAC,EAqBnD,GApBGuzJ,EACO/mQ,EAAAiE,EACN,sBACA,CACE,MAAMoO,GAAc,CAAC,GAAG+0P,EAAkB,OAAQvhK,EAAS,EAC3DyhK,CACF,GAGMtnQ,EAAAiE,EACNg7E,EACE,wDACA,+DACF,CACEA,GAAc,MAAM5sE,GAAc,CAAC,GAAG+0P,EAAkB,OAAQnoL,EAAW,EAC3EqoL,CAAA,EACA,OAAO,OAAO,GAIjBP,EACan2O,EAAA3sB,EACZ,yDACA,CAAC,MAAMoO,GAAc,CAAC,GAAG+0P,EAAkB,OAAQvhK,CAAQ,CAAC,CAAC,WAG5D2N,EAAK,IAAM,2BACZ5iF,EAAc3sB,EAAK,gDAAgD,MAC9D,CACC,MAAAkF,EAAM,yBAA2BqqG,EAAK,KAEtC/C,EAAa,IAAIT,GAAW,CAChC,OAAQ,GACR,eAAgB,KAAK,QAAQ,eAC7B,IAAA7mG,CAAA,CACD,EAEG,IAAA5C,EACAs+H,EAGKt+H,EAAAtC,EACL,yBACA,CACE8wC,GAAe,SAAW,CACxB,KAAK,MAAM,EACXm8D,GAAc,cAAc/nG,CAAG,EAChC,CACH,GATF5C,EAAOtC,EAAK,kBAAkB,EAalB2sB,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,OAAOrqB,EAAMkqG,EAAW,SAAS,CAC/C,CACF,MAEAzwG,EAAQ,KAAK,QAAQ,gBAAkBiE,EAAK,gCAAgC,EAAIA,EAAK,wBAAwB,EAC7G2sB,EAAc,KAAK,QAAQ,gBAAkB3sB,EAAK,mCAAmC,EAAIA,EAAK,uBAAuB,EAGvH,OAAAijQ,EAAiB,OAAOlnQ,CAAK,EAC7BmnQ,EAAuB,OAAOv2O,CAAW,EACpBq2O,EAAA,OAAOC,EAAkBC,CAAsB,EAC7DF,CACT,CAEQ,yBAA0B,CAC1B,MAAAM,EAAoB,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,kCAAkC,EAClEA,EAAkB,OAAO,GAAG,CAC1B,GAAG,KAAK,eAAe,KAAK,QAAQ,SAAU,KAAK,QAAQ,KAAK,EAChE,KAAK,QAAQ,OAAS,WAAa,KAAK,QAAQ,aAAa,aAAe,KAAK,iBAAiB,GAClG,OAAO,OAAO,CAAC,EACVA,CACT,CAEQ,sBAAuB,CACvB,MAAAC,EAAwB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sCAAsC,EACpE,MAAAC,EAAe,SAAS,cAAc,KAAK,EACjD,OAAAA,EAAa,IAAM,0BAA0B,OAAO,iBAAmB,EAAI,MAAQ,EAAE,OACxEA,EAAA,UAAU,IAAI,4BAA4B,EACvDD,EAAsB,OAAOC,CAAY,EAClCD,CACT,CAEQ,kBAAmB,CACnB,MAAAE,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,2BAA2B,EACpD,MAAM5+P,EAAUF,GAAa,KAAK,QAAQ,aAAa,YAAa,CAAC,SAAU,KAAK,QAAQ,aAAa,eAAgB,GACzHwL,GAAaszP,EAAY5+P,CAAO,EAE1B,MAAAirB,EAAW9nB,GAAkB,CAC3B,MAAA1C,EAAWg9D,GAAoBmhM,EAAYz7P,CAAC,EAC9C1C,GAIJ,KAAK,MAAM,IAAM,CACfm+P,EAAW,oBAAoB,QAAS3zO,EAAS,CAAC,QAAS,GAAK,EACvDxqB,GAAA,CACV,GAGH,OAAAm+P,EAAW,iBAAiB,QAAS3zO,EAAS,CAAC,QAAS,GAAK,EACtD2zO,CACT,CAEQ,mBAAoB,CAC1B,OAAO/oJ,GAAmB,CACxB,cAAe,KAAK,QAAQ,aAAa,eACzC,SAAWriE,GAAW,CACpB,KAAK,eAAeA,CAAM,CAC5B,EACD,CACH,CAEQ,eAAeqrN,EAAiCv2L,EAAkC,CACxF,OAAOA,EAAM,IAAI,CAACrtD,EAAM/gB,IAAQ,CAC9B,MAAMgP,EAAI21P,EAAS,KAAMz4G,GAAYA,EAAQ,UAAYnrI,CAAI,EACvDiW,EAAM,IAAI5B,GAAI,CAClB,aAAcpmB,EAAE,aAChB,cAAeA,EAAE,cACjB,gBAAiBA,EAAE,gBACnB,iBAAkBA,EAAE,iBACpB,UAAW,SAAW,CACpB,KAAK,WAAW,CAAC,EACX,WAAK,cAAcA,EAAE,OAAO,CACpC,EACD,EAEKF,EAAQkoB,EAAI,YAAY,OAAO,EAKrC,GAJMloB,EAAA,UAAU,IAAI,wBAAwB,EAC5CA,EAAM,OAAOnR,GAAKqR,EAAE,IAAI,CAAC,EACnBF,EAAA,MAAM,gBAAkB8pB,GAAwB54B,CAAG,EAEtDgP,EAAE,IAAK,CACF,MAAAsiB,EAAQrwB,EAAK,KAAK,EAClBqwB,EAAA,UAAU,IAAI,iBAAiB,EACjC0F,EAAA,MAAM,OAAO1F,CAAK,EAChBA,EAAA,MAAM,gBAAkBsH,GAAwB54B,CAAG,CAC3D,CAEA,OAAOg3B,EAAI,UACZ,CACH,CASF,CClUA,MAAqB4tO,EAAc,CAGjC,MAAa,UAAUnoQ,EAA0E,CAC1F,YAAS,SAAS,cAAc,KAAK,EACrC,YAAO,UAAU,IAAI,aAAa,EACvC,MAAMsM,EAAWtM,EAAQ,OAAO,IAAI,MAAMo7B,EAAOzhB,IAAU,CACnD,MAACyuP,EAAMv5P,CAAO,EAAIusB,EAAM,UAAY,MAAM,QAAQ,IAAI,CAC1Dp7B,EAAQ,SAAS,WAAW,SAASo7B,EAAM,UAAW,EAAK,EAC3Dp7B,EAAQ,SAAS,WAAW,SAASo7B,EAAM,UAAW,EAAI,CAC3D,GAAI,GAECitO,EAAqB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sBAAsB,EACnD1uP,GACiB0uP,EAAA,UAAU,IAAI,WAAW,EAExC,MAAAC,EAAiB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,OAAO,EAC9B,MAAAC,EAAa,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,aAAa,EACtCvnQ,GAAMunQ,EAAYntO,EAAM,aAAcA,EAAM,aAAa,EACnD,MAAAotO,EAAgB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gBAAgB,EAC5CxnQ,GAAMwnQ,EAAeptO,EAAM,gBAAiBA,EAAM,gBAAgB,EAC5D,MAAA+6E,EAAY,IAAIj7E,GAAU,CAC9B,UAAWktO,GAAQhtO,EAAM,KACzB,aAAcvsB,GAAWusB,EAAM,QAC/B,MAAOA,EAAM,gBACd,EACkB,OAAAitO,EAAA,OAAOE,EAAYC,CAAa,EACpCF,EAAA,OAAOD,EAAoBlyJ,EAAU,SAAS,EACtDmyJ,CAAA,CACR,EACK7gM,EAAa,MAAM,QAAQ,IAAIn7D,CAAQ,EACxC,mBAAO,OAAO,GAAGm7D,CAAU,EACzB,KAAK,MACd,CACF,CCrCA,MAAqBghM,EAAuB,CAI1C,YAAYzoQ,EAA6G,CACvH,KAAK,OAAS6vB,GAAU,CACtB,WAAY7vB,EAAQ,WACpB,KAAM,GACN,MAAO,GACP,YAAa,GACb,OAAQA,EAAQ,aAAa,MAAM,CAAC,EAAE,GAAG,SAAS,EAAK,EACxD,EAEK,MAAAkoQ,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qBAAqB,EAC5C,KAAK,SAAWA,EACRloQ,EAAA,SAAS,QAASuS,GAAM,CACxB,MAAAk9I,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,eAAe,EAC/B,MAAAl1H,EAAM,IAAI5B,GAAI,CAClB,aAAcpmB,EAAE,aAChB,cAAeA,EAAE,cACjB,gBAAiBA,EAAE,gBACnB,iBAAkBA,EAAE,iBACpB,KAAMA,EAAE,KACR,YAAa,CAAC,uBAAuB,EACrC,UAAW,GACZ,EAEDgoB,EAAI,UAAU,MAAM,YAAY,sBAAuBhoB,EAAE,SAAS,EAC1Dk9I,EAAA,OAAOl1H,EAAI,SAAS,EAC5B2tO,EAAS,OAAOz4G,CAAO,EACxB,CACH,CACF,CC3BA,MAAqBi5G,EAAwB,CAW3C,YAAY1oQ,EAGT,CACD,KAAK,qBAAqBA,CAAO,CACnC,CAEO,SAAU,CACf,KAAK,UAAY,EACnB,CAEQ,iBAAiB2oQ,EAAyBC,EAA4B,CAC5E,KAAK,UAAU,SAASD,CAAe,EAAE,UAAU,IAAI,SAAS,EAChE,KAAK,UAAU,SAAS,KAAK,kBAAkB,EAAE,UAAU,IAAI,QAAQ,EACvE,KAAK,UAAU,SAASC,CAAkB,EAAE,UAAU,IAAI,SAAS,CACrE,CAEQ,qBAAsB,CACP7lL,GAAA,CACnB,IAAK,KAAK,SAAS,KAAK,kBAAkB,EAC1C,WAAY,KAAK,yBAAyB,IAAI,EAC9C,KAAM,OACN,KAAM,IAAMvd,GACZ,OAAQ,KAAK,UAAU,SAAS,KAAK,kBAAkB,EACvD,KAAM,GACN,UAAWN,GAAsB,KAAK,SAAS,KAAK,kBAAkB,CAAC,EACvE,eAAgB,GAChB,WAAY,GACZ,UAAW,IAAM,CACf,GAAG,KAAK,cAAe,CACrB,KAAK,cAAgB,OACrB,MACF,CACI,KAAK,WACP,KAAK,gBAAgB,CAEzB,EACD,CACH,CAEQ,iBAAkB,CAClB,MAAA2jM,EAAiB,KAAK,SAAS,OACrC,KAAK,yBAAyB,QAC9B,MAAM,KAAK,KAAK,UAAU,QAAQ,EAAE,QAASv8N,GAAUA,EAAM,UAAU,OAAO,cAAe,SAAU,iBAAkB,SAAS,CAAC,EAC/H,KAAK,mBAAqB,EAAK,EACjC,KAAK,mBAAqBu8N,EAAiB,EAE3C,EAAE,KAAK,mBAGT,MAAMF,EAAkB,KAAK,qBAAuB,EAAIE,EAAiB,EAAI,KAAK,mBAAqB,EACjGD,EAAqB,KAAK,qBAAwBC,EAAiB,EAAK,EAAI,KAAK,mBAAqB,EACvG,sBAAiBF,EAAiBC,CAAkB,EACzD,KAAK,eAAe,EACpB,KAAK,oBAAoB,CAC3B,CAEQ,aAAc,CACd,MAAAC,EAAiB,KAAK,SAAS,OACrC,KAAK,yBAAyB,QAC9B,MAAM,KAAK,KAAK,UAAU,QAAQ,EAAE,QAASv8N,GAAUA,EAAM,UAAU,OAAO,cAAe,SAAU,iBAAkB,SAAS,CAAC,EAC/H,KAAK,mBAAqB,IAAOu8N,EACnC,KAAK,mBAAqB,EAE1B,EAAE,KAAK,mBAGH,MAAAF,EAAmB,KAAK,mBAAqB,EAAK,EAAIE,EAAiB,EAAI,KAAK,mBAAqB,EACrGD,EAAqB,KAAK,qBAAwBC,EAAiB,EAAK,EAAI,KAAK,mBAAqB,EACvG,sBAAiBF,EAAiBC,CAAkB,EACzD,KAAK,eAAe,EACpB,KAAK,oBAAoB,CAC3B,CAEQ,gBAAiB,CAGvB,QAAQjlQ,EAAI,GAAgBA,GAAK,EAAe,EAAEA,EAAG,CAC7C,MAAAmlQ,GAAgB,KAAK,mBAAqBnlQ,EAAI,KAAK,SAAS,QAAU,KAAK,SAAS,OACpFolQ,EAAiB,KAAK,UAAU,SAASD,CAAY,EAExDnlQ,EAAI,EACUolQ,EAAA,UAAU,IAAI,aAAa,EAClCplQ,EAAI,GACGolQ,EAAA,UAAU,IAAI,gBAAgB,CAEjD,CACF,CAEA,MAAc,qBAAqB/oQ,EAA2D,CACpFA,EAAA,WAAW,UAAU,IAAI,YAAY,EAC7C,MAAM+wE,EAAW,MAAM/wE,EAAQ,SAAS,mBAAmB,wBAAwB,EACnF,KAAK,yBAA2B2P,KAC3B,mBAAgB,IAAI03D,GACpB,0BAAuB,IAAIwH,GAAqB,CACnD,qBAAsB,KAAK,cAC3B,MAAO,OACP,SAAU7uE,EAAQ,SAClB,qBAAsB,CACpB,SAAU,GACV,MAAO,IACP,OAAQ,GACV,EACD,EACD,KAAK,SAAW+wE,EACX,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,2BAA2B,EACxD,KAAK,mBAAqB,KAAK,MAAM,KAAK,SAAS,OAAS,CAAC,EACpDA,EAAA,QAAQ,CAACuC,EAAS35D,IAAU,CAC7B,MAAAqvP,EAAe,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gCAAgC,EAC3D,MAAMv0P,EAAU,KAAK,qBAAqB,cAAc6+D,CAAO,EAC/D01L,EAAa,OAAOv0P,CAAO,EACdu0P,EAAA,iBAAiB,QAAUx8P,GAAM,CAC5CA,EAAE,gBAAgB,EACfmN,IAAU,KAAK,qBAChB,KAAK,cAAgB,GAClBqvP,EAAa,UAAU,SAAS,gBAAgB,GACjD,KAAK,YAAY,EAEhBA,EAAa,UAAU,SAAS,aAAa,GAC9C,KAAK,gBAAgB,EAEzB,CACD,EACI,eAAU,OAAOA,CAAY,EACnC,EACD,KAAK,iBAAiB,KAAK,mBAAqB,EAAG,KAAK,mBAAqB,CAAC,EAC9E,KAAK,eAAe,EACpB,KAAK,oBAAoB,EAEzBhpQ,EAAQ,WAAW,iBAAiB,QAAUwM,GAAM,CAClDA,EAAE,gBAAgB,EACnB,EACOxM,EAAA,WAAW,OAAO,KAAK,SAAS,CAC1C,CACF,CChJA,MAAqBipQ,EAAiB,CAkBpC,YAAYjpQ,EAET,CA4EI,oBAAkBwM,GAAa,CACpC,MAAM+Y,EAAS/Y,EAAE,OACX,CAAC,UAAAg5C,EAAW,aAAAC,CAAgB,EAAAlgC,EAClCA,EAAO,UAAU,OAAO,aAAcigC,EAAY,CAAC,EACnDjgC,EAAO,UAAU,OAAO,gBAAkBkgC,EAAeD,EAAajgC,EAAO,YAAY,GA/EzF,KAAK,WAAavlB,EAAQ,WAC1B,KAAK,OAASA,EAAQ,OACtB,KAAK,SAAWA,EAAQ,SACxB,KAAK,aAAeA,EAAQ,aAC5B,KAAK,SAAWA,EAAQ,SACnB,eAAY,SAAS,cAAc,KAAK,EACxC,eAAU,UAAU,IAAI,oBAAoB,EACjD,KAAK,cAAgB,KAAK,SAAS,IAAKyvJ,GAAY,CAC5C,MAAA1tJ,EAAY,SAAS,cAAc,KAAK,EAE9C,GADUA,EAAA,UAAU,IAAI,gBAAiB,UAAU,EAChD0tJ,EAAQ,eAAiBA,EAAQ,OAAS,mBAAoB,CACzD,MAAAlvJ,EAAQ,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,6BAA6B,EAC3C,MAAAs4B,EAAW,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gCAAgC,EACjD,MAAAqwO,EAAgB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,sCAAsC,EAClE3oQ,EAAM,OAAOiE,EAAKirJ,EAAQ,aAAcA,EAAQ,aAAa,CAAC,EAC9D52H,EAAS,OAAOr0B,EAAKirJ,EAAQ,gBAAiBA,EAAQ,gBAAgB,CAAC,EACvEy5G,EAAc,OAAO3oQ,CAAK,EAC1B2oQ,EAAc,OAAOrwO,CAAQ,EAC7B92B,EAAU,OAAOmnQ,CAAa,CAChC,CAEO,OAAAnnQ,CAAA,CACR,EAEI,YAAO,UAAU,IAAI,UAAU,EAE/B,4BAAyB,SAAS,cAAc,KAAK,EAC1D,KAAK,uBAAuB,UAAU,IAAI,2BAA4B,gBAAgB,EACtF,KAAK,UAAYmgC,GAAiB,CAChC,QAAS,KAAK,uBACd,KAAM,cACN,eAAgB,IAChB,aAAc,GACf,EACD,KAAK,uBAAuB,OAAO,GAAG,KAAK,aAAa,EACnD,eAAU,OAAO,KAAK,sBAAsB,EAEjD,KAAK,SAAS,QAAQ,CAACutH,EAAS91I,IAAU,CACxC,IAAIwvP,EAA2B,KAAK,cAAcxvP,CAAK,EAAE,cAA2B,oCAAoC,EAOxH,GANIwvP,IACyBA,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,mCAAmC,EAC1E,KAAK,cAAcxvP,CAAK,EAAE,QAAQwvP,CAAwB,GAGzD15G,EAAQ,cAAe,CACxB,KAAK,cAAc91I,CAAK,EACpB,IAAAg1E,EAAQw6K,EAAyB,cAA2B,eAAe,EAC/E,GAAG,CAACx6K,EAAO,CACH,MAAAziC,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,oBAAoB,EAC9ByiC,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,cAAc,EAClCA,EAAM,OAAOziC,CAAG,EAChBngC,GAAmBmgC,EAAK,+BAA+B,EACvDyiC,EAAM,UAAU,OAAO,SAAU8gE,EAAQ,gBAAkB,KAAK,EAChE05G,EAAyB,OAAOx6K,CAAK,CACvC,CACF,EACD,EAED,KAAK,qBAAqB3uF,CAAO,CACnC,CAEO,SAAU,CACf,KAAK,yBAAyB,SAChC,CAEO,MAAMopQ,EAA4C,CACvD,KAAK,mBAAqBA,CAC5B,CASA,MAAc,WAAWC,EAAsB,CACvC,MAAA55G,EAAU,KAAK,SAAS45G,CAAY,EACpCF,EAA2B,KAAK,cAAcE,CAAY,EAAE,cAAc,oCAAoC,EAGpH,GAFyBF,EAAA,oBAAoB,SAAU,KAAK,cAAc,EAC1EA,EAAyB,gBAAgB,OAAO,EAC7C15G,EAAQ,cACH,WAAK,YAAY45G,EAAc,KAAK,cAAcA,CAAY,EAAE,cAAc,eAAe,CAAC,MAMpG,QAJG55G,EAAQ,OAAS,oBACO05G,EAAA,iBAAiB,SAAU,KAAK,cAAc,EAGlE15G,EAAQ,KAAM,CACnB,IAAK,SAAU,CAEb,GAAG,CADe,CAAC,CAAC05G,EAAyB,cAAc,cAAc,EAC1D,CACP,MAAAG,EAAgB,IAAInB,GACpBv8P,EAAU09P,EAAc,UAAU,CAAC,OAAQ75G,EAAQ,QAAS,SAAU,KAAK,QAAS,GACpF85G,EAASD,EAAc,OAC7BH,EAAyB,OAAOI,CAAM,EACtCJ,EAAyB,UAAU,IAAI,aAAc,eAAgB,eAAgB,gBAAiB,YAAY,EAC5G,MAAAv9P,CACR,CACA,KACF,CAEA,IAAK,mBAAoB,CAEvB,GAAG,CADgB,CAAC,CAACu9P,EAAyB,cAAc,sBAAsB,EAClE,CACR,MAAA/sO,EAAU,IAAIqsO,GAAuB,CACzC,WAAY,KAAK,WACjB,SAAUh5G,EAAQ,QAClB,aAAc,KAAK,aACpB,EACK+5G,EAAkB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,mBAAmB,EACjCA,EAAA,QAAQptO,EAAQ,OAAO,IAAI,EACrC,MAAA77B,EAAQiE,EAAKirJ,EAAQ,YAAY,EACjClvJ,EAAA,UAAU,IAAI,yBAAyB,EAC7CipQ,EAAgB,OAAOjpQ,CAAK,EAC5B,KAAK,cAAc8oQ,CAAY,EAAE,QAAQG,CAAe,EACxD,KAAK,cAAcH,CAAY,EAAE,UAAU,IAAI,kBAAkB,EACxCF,EAAA,OAAO/sO,EAAQ,QAAQ,CAClD,CACA+sO,EAAyB,MAAM,SAAW,WAC1CA,EAAyB,UAAU,IAAI,aAAc,eAAgB,eAAgB,eAAe,EACpG,KACF,CAEA,IAAK,mBAAoB,CACH,CAAC,CAACA,EAAyB,cAAc,4BAA4B,IAElF,6BAA0B,IAAIT,GAAwB,CACzD,WAAYS,EACZ,SAAU,KAAK,SAChB,GAEH,KACF,CACF,CAEJ,CAEA,MAAc,oBAAoBE,EAAsB,CACtD,IAAII,EAAa,KAAK,OAAO,cAAc,cAAc,EACzD,MAAMC,EAAa,KAAK,OAAO,cAAc,cAAc,EAErDC,EAAY,CAAC,CAAC,KAAK,SAASN,CAAY,EAAE,cAC7CM,IACDF,EAAW,OAAO,EACLA,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,aAAa,EACtCA,EAAW,OAAOjlQ,EAAK,KAAK,SAAS6kQ,CAAY,EAAE,aAAa,CAAC,EAC5D,YAAO,OAAOI,CAAU,GAG/B,KAAK,OAAO,UAAU,OAAO,aAAc,CAAC,CAACE,CAAS,EAClDA,GACG,YAAO,UAAU,OAAO,SAAS,EAGrC,KAAK,SAASN,CAAY,EAAE,eAAiB,KAAK,SAASA,CAAY,EAAE,OAAS,oBACnFK,EAAW,MAAM,MAAQ,UACzB,KAAK,cAAcL,CAAY,EAAE,UAAU,OAAO,oBAAoB,EACjE,4BAAuB,UAAU,OAAO,MAAM,IAEnDK,EAAW,MAAM,MAAQ,8BACzB,KAAK,cAAcL,CAAY,EAAE,UAAU,IAAI,oBAAoB,EAC9D,4BAAuB,UAAU,IAAI,MAAM,GAG5C,WAAK,WAAWA,CAAY,CACpC,CAEA,MAAa,YAAY/kP,EAA+B,CACtD,KAAK,gBAAkBA,EACjB,MAAA+kP,EAAe,KAAK,SAAS,UAAW92P,GAAMA,EAAE,UAAY+R,CAAI,EAChE,WAAK,oBAAoB+kP,CAAY,EAC3C,MAAMO,EAAY,KAAK,WACvB,KAAK,WAAaP,EACb,0BAAqB,KAAK,SAAS,KAAM55G,GAAYA,EAAQ,UAAYnrI,CAAI,CAAC,EAC9E,UAAKA,EAAM+kP,CAAY,EAEvB,eAAUA,EAAcO,IAAc,MAAS,CACtD,CAEQ,KAAKtlP,EAA+B+kP,EAAsB,CAChE,MAAMjwI,EAAO,KAAK,cAAc,iBAA8B,6BAA6B,EACtFA,EAAA,QAASz+G,GAAS,CAChBA,EAAA,UAAU,OAAO,QAAQ,EAC9BA,EAAK,MAAM,UAAY,GACxB,EAEoB,KAAK,cAAc,cAAc,iBAAiB2J,CAAI,GAAG,GAChE,UAAU,IAAI,QAAQ,EAC9B,MAAAulP,EAAaR,EAAe,EAAI,EAAK,EAAI,EAAI,KAAK,KAAKA,EAAe,CAAC,EACvE5pQ,EAAS,KAAK,SAAS,OACvBijI,EAAYjjI,EAAS,EACrBqqQ,EAAW,KAAK,KAAKrqQ,EAAS,CAAC,EAAI,EACzC,GAAGoqQ,EAAY,EAAG,CAChB,MAAMzkQ,EAAIg0H,EAAKsJ,EAAYonI,EAAWD,CAAS,EAC/CzwI,EAAKsJ,EAAYonI,EAAWD,EAAY,CAAC,EAAE,MAAM,UAAY,aACvDzkQ,MAAE,MAAM,UAAY,YAClB,SAAAykQ,GAAa,GAAKA,EAAYC,EAAU,CAChD,MAAM1kQ,EAAIg0H,EAAKsJ,EAAYonI,EAAWD,CAAS,EAC/CzwI,EAAKywI,EAAY,CAAC,EAAE,MAAM,UAAY,aACjCzwI,EAAAywI,CAAS,EAAE,MAAM,UAAY,YAClCzwI,EAAKsJ,EAAYonI,EAAWD,EAAY,CAAC,EAAE,MAAM,UAAY,aACvDzkQ,MAAE,MAAM,UAAY,kBAE1Bg0H,EAAKywI,EAAY,CAAC,EAAE,MAAM,UAAY,aACjCzwI,EAAAywI,CAAS,EAAE,MAAM,UAAY,YAGpC,KAAK,cAAc,MAAM,YAAY,WAAY,GAAKpqQ,CAAM,EAC5D,KAAK,cAAc,MAAM,YAAY,UAAW,GAAKoqQ,CAAS,CAChE,CAEQ,qBAAqB7pQ,EAA4B,CAClD,uBAAoB,SAAS,cAAc,KAAK,EAChD,uBAAkB,UAAU,IAAI,wBAAwB,EACxD,mBAAgB,SAAS,cAAc,KAAK,EAC5C,mBAAc,UAAU,IAAI,6BAA6B,EACzD,uBAAkB,OAAO,KAAK,aAAa,EAChD,KAAK,SAAS,QAAQ,CAACuS,EAAG5O,IAAM,KAAK,cAAc,OAAO,KAAK,iBAAiB3D,EAASuS,EAAE,QAAS5O,CAAC,CAAC,CAAC,EACtFmZ,EAAA,KAAK,cAAgBtQ,GAAM,CAC1CA,EAAE,gBAAgB,CACjB,GAAC,eAAgBxM,EAAQ,cAAe,GAC1B8c,EAAA,KAAK,UAAYtQ,GAAM,CAChC,MAAA+mB,EAAO,KAAK,UAAU,sBAAsB,EAC5Cw2O,EAAuB,KAAK,SAAS,UAAWx3P,GAAMA,EAAE,UAAY,KAAK,eAAe,EACxFqU,EAAO2M,EAAK,KAAOA,EAAK,MAAQ,EAAK/mB,EAAE,QAAU,EAAI,GACrDijJ,EAAU,KAAK,SAASs6G,EAAuBnjP,CAAG,EAC7C6oI,GAAA,KAAK,YAAYA,EAAQ,OAAO,CAC1C,GAAC,eAAgBzvJ,EAAQ,cAAe,EAC7C,CAEQ,iBAAiBA,EAA4ByvJ,EAAkC91I,EAAe,CAC9F,MAAA2rP,EAAM,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAI,4BAA4B,EAC3C71G,IAAY,KAAK,iBACd61G,EAAA,UAAU,IAAI,QAAQ,EAE5BA,EAAI,QAAQ,QAAU71G,EACL3yI,EAAAwoP,EAAM94P,GAAM,CAC3BqQ,GAAYrQ,CAAC,EACVijJ,IAAY,KAAK,iBAClB,KAAK,YAAYA,CAAO,CAEzB,GAAC,eAAgBzvJ,EAAQ,cAAe,GACpCslQ,CACT,CAEA,MAAc,cAAc+D,EAAsBW,EAAuBh5K,EAAQ,GAAO,CACtF,MAAM9uF,EAAM,KAAK,SAASmnQ,CAAY,EAAE,MACxC,GAAG,CAACnnQ,EACK,OACL,MAAO,OACP,YAAa,IAAI,QAAQ,IAAM,EAAE,GAI/B,MAAA+nQ,EAAe,MAAM3pM,GAAU,CACnC,IAAAp+D,EACA,iBAAkB,GAClB,OAAQ,GACR,aAAc,GACd,WAAY,KAAK,WACjB,GAAI8uF,GAAS,CAAC,UAAWg5K,CAA0B,EACpD,EAED,OAAO,KAAK,SAASX,CAAY,EAAE,aAAeY,CACpD,CAEA,MAAc,YAAYZ,EAAsBW,EAAsB,CACpE,GAAG,KAAK,SAASX,CAAY,EAAE,QAC7B,OAGG,cAASA,CAAY,EAAE,QAAU,GACtC,IAAIh1N,EAAsB61N,EAEtBD,EAAe,KAAK,SAASZ,CAAY,EAAE,aAC3CY,GAAc,SACN51N,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,SAAS,EACjB61N,EAAAhpQ,GAAK,OAAQ,2BAA2B,EACtD8oQ,EAAY,OAAO,GAAG,CAACC,GAAc,OAAO,QAAQ,MAAO51N,EAAS61N,CAAW,EAAE,OAAO,OAAO,CAAC,GAG/FD,EACDD,EAAY,OAAO,KAAK,SAASX,CAAY,EAAE,aAAa,KAAK,GAEjEY,EAAe,MAAM,KAAK,cAAcZ,EAAcW,EAAa,EAAI,EAC1DC,EAAA,YAAY,KAAK,IAAM,CAClCA,EAAa,OAAS,GACvB,GAGA51N,GACY41N,EAAA,YAAY,KAAK,IAAM,CAClC51N,EAAQ,OAAO,EACf61N,EAAY,OAAO,EACpB,CAEL,CACF,CC9UA,MAAqBC,EAAgB,CAMnC,YAAYnqQ,EAAiC,CAC3C,KAAK,QAAUwhC,GAAW,+BAAgC,CAAC,SAAU,GAAK,EAC1E,KAAK,gBAAgBxhC,CAAO,CAC9B,CAEO,SAAU,CACf,KAAK,iBAAiB,SACxB,CAEQ,gBAAgBA,EAAiC,CACjD,MAAAu5B,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,qBAAqB,EACvCv5B,EAAQ,OAAO,cAAc,cAAc,EAAE,YAAY,KAAK,OAAO,EACjEu5B,EAAA,OAAOv5B,EAAQ,MAAM,EACpB,qBAAkB,IAAIipQ,GAAiB,CAC1C,GAAGjpQ,EACH,OAAQA,EAAQ,OACjB,EACDu5B,EAAI,OAAO,KAAK,gBAAgB,UAAW,KAAK,gBAAgB,iBAAiB,EACjF,KAAK,IAAMA,EAEMzc,EAAA,KAAK,QAAS,IAAM,CACnC,KAAK,gBAAgB,WAAa,OAClC,KAAK,WAAW,CAAC,CAChB,GAAC,eAAgB9c,EAAQ,cAAe,EAC7C,CAEO,iBAAiByvJ,EAAkC,CACjD,YAAK,gBAAgB,YAAYA,CAAO,CACjD,CACF,CCXA,MAAqBh5G,WAAqB1mB,EAAa,CAqBrD,YAAY/vB,EAMR,GAAI,CACN,MAAM,gBAAiB,CACrB,gBAAiB,GACjB,SAAU,GACV,KAAM,GACN,MAAO,yBACR,EAYK,sBAAmB,MAAM6hB,GAG3B,CACJ,KAAM,CAACu/B,EAAe+zD,CAAgB,EAAI,MAAM,QAAQ,IAAI,CAC1DtzF,EAAI,eACJA,EAAI,mBACJ,IAAK3I,GAAMA,GAAKA,EAAE,KAAK,QAAQ,CAAC,CAAC,EAE5B,OAAC,cAAAkoC,EAAe,iBAAA+zD,EAAgB,EA0GjC,mBAAgB,MAAMs6C,GAAqC,CAC5D,qBAAkB,KAAK,MAAM,SAAS,KAAMl9I,GAAMA,EAAE,UAAYk9I,CAAO,EACtE,WAAK,gBAAgB,iBAAiBA,CAAO,EAC9C,wBAAmB,KAAK,eAAe,GAiFtC,wBAAsBA,GAAkC,CAC3D,IAAC,KAAK,iBACP,OAGC,QAAK,MAAM,OAAS,OAAQ,CAC7B,KAAM,CAAC,WAAA63G,EAAY,YAAAliI,GAAe,KAAK,YACpC,CAACkiI,GAAcliI,GAChB,KAAK,iBAAiB,iBAAiB,CACrC,IAAK,6BACN,EAGH,MACF,CAEG,QAAK,MAAM,gBACZ,OAGF,KAAK,iBAAiB,iBAAiB,CACrC,IAAKqqB,GAAS,oBAAsB,6BACpC,KAAM,CAAC,KAAK,aAAa,CAAC,KAAK,OAAO,OAAS,KAAK,OAAO,MAAM,CAAC,EACnE,EAED,MAAM7sF,EAAe,KAAK,aAAa,cAAc,QAAQ,EACvDC,EAAU4sF,GAAS,YAAcvuJ,GAAKuuJ,EAAQ,WAAY,WAAY,oBAAoB,EAC5F5sF,EACID,EAAcA,GAAc,YAAYC,CAAO,EAC7C,kBAAa,OAAOA,CAAO,EAFxBD,GAAc,OAAO,CAEG,EAGhC,WAAS94D,GAA0B,CAC5BA,GAAA,KAAK,iBAAiB,oBAAqBA,CAAQ,EAC/D,KAAK,KAAK,GAnPVmN,GAAW,KAAMjX,CAAO,EACxB,KAAK,SAAS,CAChB,CAEO,SAAU,CACf,MAAM,QAAQ,EACd,KAAK,gBAAgB,UAChB,mBAAc,IAAI,QACzB,CAcQ,YAAYoqQ,EAAgCz4L,EAAkC,CACpF,OAAQA,GAAS,IAAI,OAAQ89E,GAAY,CACvC,MAAM46G,EAAa,CAAC,CAAC5tO,GAAiBgzH,CAAO,EAC7C,GAAG,CAAC46G,EAAY,CACN,aAAK,qCAAsC56G,CAAO,EAC1D,MAAM66G,EAAaF,EAAa,eAAe,QAAQ36G,CAAO,EAC3D66G,IAAe,KACHF,EAAA,eAAe,OAAOE,EAAY,CAAC,EACnCF,EAAA,OAAO,OAAOE,EAAY,CAAC,EAE5C,CAEO,OAAAD,CAAA,CACR,CACH,CAEA,MAAc,eAAeD,EAAgCz4L,EAAkC,CAC7F,OAAO,QAAQ,IAAIA,EAAM,IAAI,MAAM89E,GAAY,CACvC,MAAAl9I,EAAIkqB,GAAiBgzH,CAAO,EAElC,IAAItnJ,EAAUoK,EAAE,QACbpK,IACDA,EAAU,MAAM,QAAQ,IAAIA,EAAQ,IAAI,MAAM+Q,IACrC,CACL,GAAI,MAAM,KAAK,iBAAiBA,CAAC,EACjC,GAAGA,CAAA,EAEN,CAAC,GAGJ,MAAM45C,EAAQs3M,EAAa,OAAOA,EAAa,eAAe,QAAQ36G,CAAO,CAAC,EACxE86G,EAAK,CACT,GAAI,MAAM,KAAK,iBAAiBh4P,CAAC,EACjC,GAAGA,EACC,QAAApK,EACJ,MAAA2qD,CAAA,EAEC,OAAAA,IAAOy3M,EAAG,gBAAHA,EAAG,cAAkB,WAExBA,CACR,EAAC,CACJ,CAEA,MAAc,UAAW,CACvB,KAAM,CAACH,EAAc1pN,CAAS,EAAI,MAAM,QAAQ,IAAI,CAClD,KAAK,SAAS,mBAAmB,gBAAgB,EACjD,KAAK,SAAS,WAAW,aAAa,EACvC,EAEKixB,EAAQ,KAAK,YAAYy4L,EAAc1pN,EAAU,mBAAmB,EAEpE8pN,EAAkBtqQ,EAAU,QAClC,KAAK,MAAQ,CACX,MAAAyxE,EACA,SAAU,MAAM,KAAK,eAAey4L,EAAcz4L,CAAK,EACvD,aAAAy4L,EACA,SAAU,KAAK,SACf,WAAY,KAAK,iBAAiB,IAAI,EACtC,UAAA1pN,EACA,gBAAA8pN,EACA,KAAM,KAAK,KACX,OAAQ,KAAK,QAAU,KAAK,OAAO,OACnC,MAAO,KAAK,OAAS,KAAK,OAAO,MACjC,KAAM,KAAK,KAAO,OAAS,UAC3B,MAAO,KAAK,MACZ,eAAgB,KAAK,gBAGlB,iBAAcnD,GAAe,KAAK,KAAK,EAE5C,MAAM1uN,EAAgB,KAAK,cAAgB,SAAS,cAAc,KAAK,EACzDA,EAAA,UAAU,IAAI,iBAAkB,cAAc,EAE5D,KAAK,OAAS,KAAK,MAAM,aAAa,eAAe,CAAC,EACtD,MAAMs6M,EAAiB,KAAK,MAAM,aAAa,eAAe,QAAQ,KAAK,CAACtqP,EAAGwsB,IAAMxsB,EAAE,OAASwsB,EAAE,MAAM,EAAE,CAAC,EACtG,kBAAgBvvB,GAAWD,GAA2BC,EAAQqtP,EAAe,SAAU,GAAO,GAAM,EAAI,EAEvG,MAAAwX,EAAmB,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,yBAAyB,EACnD,YAAO,QAAQA,CAAgB,EAEpC,KAAK,uBAAuB,EAC5B,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,sBAAsB,EAErB,MAAAh1J,EAAO,CAAC,KAAK,cAAc,IAAK,KAAK,gBAAgB,GAAG,EAAE,OAAO,OAAO,EACzEA,EAAA,QAASl8E,GAAQ,CAChBA,EAAA,UAAU,IAAI,WAAY,aAAa,EAC5C,EACaof,EAAA,OAAO,GAAG88D,CAAI,EAEvB,eAAU,OAAO,GAAG,CAAC98D,EAAe,KAAK,qBAAqB,EAAE,OAAO,OAAO,CAAC,EAChF,KAAK,uBACF,eAAU,UAAU,IAAI,WAAW,EAG1C,KAAK,SAAW,MAAM,KAAK,cAAc,KAAK,OAAO,EACrD,KAAK,WAAW,KAAK,QAAU,EAAI,CAAC,EAEpC,KAAK,KAAK,CACZ,CAQQ,wBAAyB,CAC/B,KAAK,WAAazW,GAAiB,CACjC,QAAS,KAAK,cACd,KAAM,aACN,eAAgB,IAChB,aAAc,GACd,gBAAkBH,GAAO,CACvB,KAAK,YAAcA,EAChBA,EACD,KAAK,gBAAgB,gBAAgB,MAAM,KAAK,kBAAkB,EAElE,KAAK,mBAAmB,CAE5B,EACD,CACH,CAEQ,oBAAqB,CACxB,QAAK,MAAM,OAAS,SAClB,KAAK,YAAY,YAAc,CAAC,KAAK,YAAY,aAClD,OAIJ,KAAK,iBAAmB,IAAIrhC,GAAK,YAAY,CAAC,IAAK,KAAK,EACnD,2BAAwB,SAAS,cAAc,KAAK,EACpD,2BAAsB,UAAU,IAAI,yBAAyB,EAC7D,kBAAe+4B,GAAO,8DAA8D,EACzF,KAAK,aAAa,OAAO,KAAK,iBAAiB,OAAO,EAElD,IAAA3vB,EACD,KAAK,MAAM,OAAS,OACrBA,EAAW,IAAM,CACT,MAAAiqG,EAAO,KAAK,MAAM,KACxBtC,GAAc,cAAcsC,EAAK,KAAM,KAAK,aAAc,IAAI,GAGhEjqG,EAAW,IAAM,CACZ,QAAK,MAAM,gBAAiB,CAC7B,KAAK,KAAK,EACV,MACF,CAEA,KAAK,WAAW,GAIHgT,EAAA,KAAK,aAAchT,EAAU,CAAC,eAAgB,KAAK,eAAgB,KAAM,GAAK,EAE1F,2BAAsB,OAAO,KAAK,YAAY,CACrD,CAEQ,qBAAsB,CACvB,mBAAgB,IAAIy9P,GAAc,CACrC,UAAW,KAAK,cAChB,OAAQ,KAAK,OACb,KAAM,KAAK,KACX,GAAG,KAAK,MACT,EAEI,mBAAc,WAAa,KAAK,WAChC,mBAAc,cAAgB,KAAK,cACnC,mBAAc,aAAgB1qN,GAAW,CAC5C,KAAK,OAASA,EACd,KAAK,mBAAmB,GAErB,mBAAc,MAAQ,KAAK,KAClC,CAEQ,uBAAwB,CACzB,qBAAkB,IAAIstN,GAAgB,CACzC,OAAQ,KAAK,OAAO,UAAU,EAAI,EAClC,sBAAuB,KAAK,sBAC5B,GAAG,KAAK,MACT,EACI,qBAAgB,WAAa,KAAK,UACzC,CAuCO,YAAa,CAClB,KAAK,MAAM,IAAM,CACF9lO,GAAA,QAAQ,KAAK,OAAO,OAAO,EACzC,CACH,CAEA,OAAc,QAAQvyB,EAAkD,CACzDie,GAAA,YAAY0mB,GAAc,GAAG3kC,CAAI,CAChD,CACF,CC/TA,MAAMnJ,GAMD,CACH,IAAK,CACH,MAAO,eACP,YAAa,yBACb,mBAAoB,gCACpB,kBAAmB,+BACnB,KAAM,WACR,EACA,QAAS,CACP,MAAO,eACP,YAAa,sBACb,mBAAoB,6BACpB,kBAAmB,4BACnB,KAAM,eACR,EACA,YAAa,CACX,MAAO,eACP,YAAa,4BACb,mBAAoB,mCACpB,kBAAmB,kCACnB,KAAM,eACR,EACA,gBAAiB,CACf,MAAO,eACP,YAAa,kCACb,mBAAoB,yCACpB,kBAAmB,wCACnB,KAAM,YACR,EACA,SAAU,CACR,MAAO,eACP,YAAa,yBACb,mBAAoB,gCACpB,kBAAmB,+BACnB,KAAM,WACR,CACF,EAEA,MAAM+hQ,WAAU56O,EAAU,CACxB,YAAY9vB,EAKTqX,EAA8B,CAC/B,MAAM,cAAe,CACnB,QAASrX,EAAQ,YAAc,OAAY,CAAC,CAC1C,QAAS,kBACT,SAAU,GACX,EAAKA,EAAQ,UAAY,CAAC,CACzB,QAAS,KACT,SAAU,EACX,GAAI,CAAC,CACJ,QAAS,gBACT,SAAU,IAAM,CACdy2C,GAAa,KAAK,CAAC,QAASz2C,EAAQ,OAAQ,EAC9C,EACA,UAAW,kBACV,CACD,QAAS,SACT,SAAU,GACX,EACD,mBAAoBA,EAAQ,YAAc,OAAYqX,EAAG,kBAAqBrX,EAAQ,UAAYqX,EAAG,mBAAqBA,EAAG,YAC7H,oBAAqBrX,EAAQ,UAAY,CAACA,EAAQ,YAAY,EAAI,CAACA,EAAQ,MAAOA,EAAQ,YAAY,EACtG,aAAcqX,EAAG,MAClB,EAEK,MAAA+jB,EAAQ,IAAIF,GAAU,CAC1B,aAAcl7B,EAAQ,aACtB,KAAM,CACJ,KAAMqX,EAAG,KACT,QAAS,IAAMrX,EAAQ,UAAYA,EAAQ,aAAeA,EAAQ,MACpE,EACD,EAEEA,EAAQ,YAAc,OACvBo7B,EAAM,YAAYp7B,EAAQ,UAAY,EAAI,EAAG,EAE3Bo7B,EAAM,UAAU,cAAc,aAAa,GAClD,OAAO,EAGf,iBAAY,OAAOA,EAAM,SAAS,EAMvCA,EAAM,eAAe,CACvB,CACF,CAEA,eAA8BmjE,GAAej6E,EAAsB,CAMjE,MAAMmrI,EAAmC,gBAEnCp4I,EAAK1O,GAAE2b,CAAI,EACX,CAACo8B,EAAWtlB,EAAOuvO,CAAY,EAAI,MAAM,QAAQ,IAAI,CACzDzqQ,EAAU,SAAS,WAAW,aAAa,EAC3C,GAAG,CAAC,GAAO,EAAI,EAAE,IAAK+6B,GAAM/6B,EAAU,SAAS,WAAW,SAASokB,EAAM2W,CAAC,CAAC,EAC5E,EACK2vO,EAAWlqN,EAAU,yBAC3B,IAAIgqN,GAAE,CACJ,UAAWE,EAAW,OAAY1qQ,EAAU,QAC5C,MAAAk7B,EACA,aAAAuvO,EAEA,QAAAl7G,CAAA,EACCp4I,CAAE,EAAE,MACT,CCtGA,MAAqBwzP,EAAmB,CAUtC,YAAoBxqQ,EAAuB,CAAvB,cAAAA,EAyMpB,KAAQ,eAAiB,SAAW,CAClC,MAAMwxC,EAAS,MAAM,KAAK,SAAS,mBAAmB,cAAc,KAAK,MAAM,EAC5EA,GACI,cAAS,mBAAmB,gBAAgB,CAACA,EAAO,MAAM,EAAG,CAAC,CAACA,EAAO,SAAS,CACtF,EAGF,KAAQ,iBAAmB,IAAM,CAC1B,cAAS,gBAAgB,eAAe,CAC3C,OAAQ,KAAK,OAAO,SAAS,EAC7B,QAAS,KAAK,SACd,OAAQ,GACT,GAGH,KAAQ,mBAAqB,IAAM,CAC5B,cAAS,gBAAgB,eAAe,CAC3C,OAAQ,KAAK,OAAO,SAAS,EAC7B,QAAS,KAAK,SACd,OAAQ,CAAE,KAAK,OAAiC,OAAO,OACxD,GAGH,KAAQ,WAAa,IAAM,CACzB,KAAM,CAAC,OAAA5xC,EAAQ,SAAAwvO,EAAU,SAAAnvO,EAAU,OAAAuxC,GAAU,KACvCy/G,EAAUrhI,GAAc4hB,CAAM,EAC/B,cAAS,mBAAmB,gBAAgB,CAC/C,OAAA5xC,EACA,SAAAwvO,EACA,eAAgBnvO,CAAA,CACjB,EAAE,MAAM,MAAM8Q,GAAkB,EAC5BA,EAAI,OAAS,2BAA6BA,EAAI,OAAS,qBACrDkgJ,EACD/yD,GAAe,UAAU,EACjBj+F,EACR,KAAK,SAAS,WAAW,SAAS,UAAU,EAAE,KAAM86B,GAAU,CAC5D3I,GAAS,CAAC,YAAa,2BAA4B,kBAAmB,CAAC2I,CAAK,EAAE,EAC/E,EACQg0M,GAAa,IAAIK,CAAQ,EAGlClxI,GAAe,KAAK,EAFX9rE,GAAA,CAAC,YAAa,wBAAwB,EAInD,CACD,GAGH,KAAQ,cAAgB,IAAM,CAC5B,KAAK,SAAS,mBAAmB,eAAe,CAAC,OAAQ,KAAK,OAAQ,KAAM,GAAO,SAAU,KAAK,QAAS,IAG7G,KAAQ,YAAc,IAAM,CAC1B1C,GAAa,YAAY2K,GAAW,KAAK,OAAQ,KAAK,QAAQ,GAGhE,KAAQ,cAAgB,SAAW,CAC3B,MAAC,OAAAz6B,EAAQ,OAAA4xC,CAAU,OAEtBA,EAAO,aACJ,KAAK,SAGP,KAAK,SAAS,mBAAmB,YAAY5xC,EAAQ4xC,EAAO,YAAa,KAAK,QAAQ,EAFtF,KAAK,SAAS,mBAAmB,iBAAiB5xC,EAAQ,EAAI,EAIvD,KAAK,UACT,cAAS,mBAAmB,iBAAiBA,CAAM,CAC1D,EAGF,KAAQ,cAAgB,IAAM,CACf8vB,GAAA,YACXU,GACA,KAAK,OACL,OACA,OACA,KAAK,SACP,CAnRF,CAEO,OAAOhc,EAAsB,CAChBijB,GAAA,CAChB,SAAUjjB,EACV,QAAS,KAAK,WAAW,EACzB,SAAU,SAAS,eAAe,YAAY,EAC9C,OAAQ,MAAMjI,EAAG8pC,IAAO,CACtB,KAAK,GAAKA,EACPA,EAAA,UAAU,IAAI,WAAW,EAC5B,KAAK,OAASA,EAAG,QAAQ,OAAO,SAAS,EACzC,KAAK,SAAW,CAACA,EAAG,QAAQ,UAAY,OACnC,YAAS,MAAM,KAAK,SAAS,eAAe,aAAa,KAAK,OAAQ,KAAK,QAAQ,EACxF,KAAK,SAAW,KAAK,SAAW,OAAY3X,GAAkB,SAC9D,KAAK,gBAAkBsvF,GAAa,KAAK,MAAM,EAAI,MAAM,KAAK,SAAS,eAAe,eAAe,KAAK,MAAM,EAAI,MACtH,EACA,aAAc,SAAW,CAEjB,MAAAl7G,EAA2B,KAAK,SAAW,SAAW,MAAM,KAAK,SAAS,gBAAgB,oBAAoB,KAAK,MAAM,EACzH+3P,EAAa,KAAK,QAAQ,KAAK,QAAQ,OAAS,CAAC,EACpDA,GAAY,SACbA,EAAW,QAAQ,UAAU,YAAYtmQ,EAAKuO,CAAW,CAAC,CAE9D,EACA,QAAS,IAAM,CACR,QAAG,UAAU,OAAO,WAAW,EAC/B,QAAK,KAAK,OAAS,KAAK,OAAS,KAAK,SAAW,KAAK,SAAW,KAAK,gBAAkB,MAC/F,EACA,YAAcvG,GACLuxC,GAAUvxC,EAAE,OAAQwxC,EAAuB,CACpD,CACD,CACH,CAEQ,YAAa,CACnB,YAAK,UAAL,KAAK,QAAY,CAAC,CAChB,KAAM,SACN,KAAM,eACN,QAAU,GAAM,CACIrf,GAAA,mBAAmB,KAAK,EAAE,EAC5C9hB,GAAY,CAAC,CACf,EACA,OAAQ,IAAMkuP,EAAA,EACb,CACD,KAAM,SACN,KAAM,oBACN,QAAS,IAAM,CACA1mO,GAAA,qBAAqB,KAAK,OAAQ,EAAK,CACtD,EACA,OAAQ,IAAM,CAAC,EAAE,KAAK,QAAW,KAAK,OAAkB,OAAO,yBAC9D,CACD,KAAM,SACN,KAAM,mBACN,QAAS,IAAM,CACAA,GAAA,qBAAqB,KAAK,OAAQ,EAAK,CACtD,EACA,OAAQ,IAAM,KAAK,SAAWnkC,EAAU,MAAQ,CAAC+M,GAAS,SAAS,cAAgB,CAAC,KAAK,UACxF,CACD,KAAM,UACN,KAAM,sBACN,QAAS,IAAM,CACAo3B,GAAA,qBAAqB,KAAK,OAAQ,EAAI,CACrD,EACA,OAAQ,IAAM,KAAK,SAAWnkC,EAAU,MAAQ+M,GAAS,SAAS,cAAgB,CAAC,KAAK,UACvF,CACD,KAAM,SACN,KAAM,eACN,QAAS,KAAK,cACd,OAAQ,SAAW,CAAC,KAAK,UAAY,CAAE,MAAM,KAAK,SAAS,mBAAmB,eAAe,KAAK,MAAM,GACvG,CACD,KAAM,YACN,KAAM,aACN,QAAS,KAAK,cACd,OAAQ,IAAM,KAAK,SAAS,mBAAmB,eAAe,KAAK,MAAM,GACxE,CACD,KAAM,MACN,KAAM,uBACN,QAAS,KAAK,WACd,OAAQ,SACHgjB,GAAc,KAAK,MAAM,EACnB,CAAC,KAAK,OAAO,OAAO,OAG1B,KAAK,UAAY,CAAC,KAAK,gBACjB,GAMF,EAHU,KAAK,WAAa,QAAa,KAAK,SAAW,GAC7D,MAAM,KAAK,SAAS,mBAAmB,UAAU,KAAK,QAAQ,GAAG,cAAc,SAAS,KAAK,OAAO,MAAM,EAC3G,CAAC,CAAC,KAAK,OAAO,QAAQ,OAE1B,EACC,CACD,KAAM,QACN,KAAM,yBACN,QAAS,KAAK,WACd,OAAQ,SACHA,GAAc,KAAK,MAAM,EACnB,CAAC,CAAC,KAAK,OAAO,OAAO,OAG3B,KAAK,UAAY,CAAC,KAAK,gBACjB,GAGQ,KAAK,WAAa,QAAa,KAAK,SAAW,GAC7D,MAAM,KAAK,SAAS,mBAAmB,UAAU,KAAK,QAAQ,GAAG,cAAc,SAAS,KAAK,OAAO,MAAM,EAC3G,CAAC,CAAC,KAAK,OAAO,QAAQ,MAE1B,EACC,CACD,KAAM,OACN,KAAM,wBACN,QAAS,KAAK,YACd,OAAQ,SACC,KAAK,SAAW/vB,EAAU,MAAQ,CAAE,MAAM,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAO,OAAQ,SAAU,KAAK,SAAS,CAC/J,EACC,CACD,KAAM,SACN,KAAM,0BACN,QAAS,KAAK,cACd,OAAQ,IACC,KAAK,SAAWA,EAAU,MAAQ,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAQ,KAAK,OAAO,OAAQ,SAAU,KAAK,SAAS,CACvJ,EACC,CACD,KAAM,UACN,KAAM,UACN,QAAS,KAAK,eACd,OAAQ,IAAM,CAAC,KAAK,UAAa,KAAK,OAAkB,YAAcsxO,IAAqB,KAAK,SAAWtxO,EAAU,MACpH,CACD,KAAM,YACN,KAAM,YACN,QAAS,KAAK,eACd,OAAQ,IAAM,KAAK,WAAasxO,IAAqB,KAAK,SAAWtxO,EAAU,MAQ7E,OAAW,CACb,KAAM,OACN,KAAM,aACN,QAAS,KAAK,mBACd,OAAQ,IACC,KAAK,iBAAmB,CAAE,KAAK,OAAiC,OAAO,MAChF,EACC,CACD,KAAM,UACN,KAAM,eACN,QAAS,KAAK,mBACd,OAAQ,IACC,KAAK,iBAAmB,CAAC,CAAE,KAAK,OAAiC,OAAO,MACjF,EACC,CACD,KAAM,SACN,KAAM,cACN,QAAS,IAAM,CAAC,EAChB,MAAO,UAEE,CACL,SAFc,MAAM,KAAK,SAAS,eAAe,iBAAiB,GAEjD,IAAK4oB,GAAW,CACzB,MAAAvoB,EAAQ,SAAS,cAAc,MAAM,EAC3C,OAAAA,EAAM,OAAOK,GAAckoB,EAAO,KAAK,CAAC,EACjC,CACL,KAAM,SACN,YAAavoB,EACb,QAAS,IAAM,CAAC,EAClB,CACD,IAGL,OAAQ,IAAM,IACb,CACD,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,KAAK,cACd,OAAQ,IACH,KAAK,SACH0vB,GAAc,KAAK,MAAM,EACnB,GAGL,KAAK,gBAID,KAAK,OAAiC,KAAO/b,GAH5C,GAMJ,EACT,CACD,GAEM,KAAK,QAAU,KAAK,QAAQ,OAAO,OAAO,CACnD,CAgFF,CCjSgB,SAAA82P,GACdjpQ,EACAwH,EACA0hQ,EACA,CACI,IAAA/uP,EAeJ,GAdG,OAAO3S,GAAa,SACT2S,EAAA3S,EACJA,GAAS,OAAO,MACrBA,EAAQ,MACG2S,EAAA,eACJ3S,EAAQ,OAAO,YACX2S,EAAA,UACJ3S,EAAQ,OAAO,OACX2S,EAAA,QAEAA,EAAA,UAIb,CAACA,EAAW,CACbna,EAAU,YAAc,GACdA,EAAA,UAAU,IAAI,MAAM,EAC9B,MACF,CAEA,MAAMw1K,EAAcx1K,EAAU,iBAC9B,GAAGw1K,GAAeA,EAAY,UAAU,SAASv+G,GAAO98C,CAAS,CAAC,EAChE,OAGF,MAAMzH,EAAUvT,GAAKgb,EAAW,sBAAuB,uBAAyBA,CAAA,EAChFna,EAAU,OAAO0S,CAAO,EACd1S,EAAA,UAAU,OAAO,MAAM,EAEjCw1K,GAAa,OAAO,CAyBtB,CC9EA,MAAM2zF,GAAM,OAAO,iBACbrZ,GAAO,GAAKqZ,GACZplE,GAAS,IAAMolE,GACf53H,GAAQ,EAAI43H,GACZC,GAAS,EAAID,GACbE,GAAS,EAET7sG,GAAa,EACbC,GAAa,GACbvqH,GAAW,IAEO,SAAAo3N,GAAoB1wL,EAAW,GAAO,CACtD,MAAA1yD,EAAS,SAAS,cAAc,QAAQ,EACvCA,EAAA,MAAQA,EAAO,OAAS4pO,GACzB,MAAA9sO,EAAUkD,EAAO,WAAW,IAAI,EAEhCqjP,EAAcF,GAAS93H,IAAS83H,GAAS,GAAKtlE,GAC9CylE,GAAW1Z,GAAOyZ,GAAe,EAEjCruP,EAAY,KAAK,MACvB,IAAIuuP,EAAa,GAEjB,MAAM/rB,EAAc,IAAM,CACrB,GAACx3N,EAAO,YAIAujP,IACTA,EAAavjP,EAAO,qBAJjBujP,EACM,SAML,MAAA7wO,EAAO,KAAK,MAKZW,EAAWP,IAAeJ,EAAO1d,GAAag3B,GAAU,EAAG,EAAGA,EAAQ,EAE5ElvB,EAAQ,UAAU,EAAG,EAAG8sO,GAAMA,EAAI,EAC1B9sO,EAAA,UAAY41D,GAAY,CAACh5E,GAAW,SAAWwjB,GAAiB,YAAY,eAAe,EAAI,OAEvG,QAAQxhB,EAAI,EAAGA,EAAIynQ,GAAQ,EAAEznQ,EAAG,CAC9B,MAAMyuB,EAAIm5O,EAAW5nQ,EAAI2vI,GAAU3vI,EAAImiM,GAEnC,IAAA2lE,EACDnwO,GAAY,GACbmwO,EAAe9nQ,EAAI,EAAI,EAAI23B,EAAW,GAAKA,EAAW,IAAM,EAE5DmwO,EAAe9nQ,EAAI,EAAI23B,EAAW,EAAI,EAAIA,EAAW,EAGnD,IAAA/U,EAASg4I,GAAcktG,GAAgBjtG,GAAaD,IAK9Ch4I,GAAA2kP,GACJ,MAAA5/N,GAAKumN,GAAOtrO,GAAU,EAE5BssB,GAAU9tB,EAASqN,EAAGkZ,EAAGgoG,GAAO/sH,EAAQ4kP,EAAY,CACtD,CAEO,UAGF,OACL,OAAAljP,EACA,eAAgB,IAAM,CACpBkD,GAAQs0N,CAAW,EACPA,GACd,EACA,UAAYryM,GAAoB,CACnButC,EAAAvtC,EACCqyM,GACd,EAEJ,CC6BO,MAAMzhM,GAA0B,IA8BvC,SAAS0tN,GAAiG7pP,EAAQ5L,EAAQ,CAC3E4L,EAAI5L,CAAG,GACxC,OAAO,EAGnB,MAAMvJ,EAAWmV,EAAI5L,CAAG,EAAItJ,GAAsB,EAClDD,EAAS,MAAM,IAAM,EAAE,EAAE,QAAQ,IAAM,CACjCmV,EAAI5L,CAAG,IAAcvJ,GACvB,OAAOmV,EAAI5L,CAAG,CAChB,CACD,EAED,MAAMrU,EAAaqkC,GAAkB,IAAOpkB,EAAI5L,CAAG,IAAcvJ,CAAQ,EAClE,OAAC,SAAAA,EAAU,WAAA9K,EACpB,CAEA,MAAM+pQ,GAAa,GACbC,GAAwB,IAEvB,MAAM1rC,WAAyBp5L,EAAyB,CAS7D,YAAY9mC,EAOT,CACK,OACJ,SAAWyU,GAAY,KAAK,SAAS,eAAe,eAClD,KAAK,iBAAmBA,EAAQ,GAChC,KAAK,SACL,KAAK,gBAAkBA,EAAQ,GAAK,MACtC,EACA,SAAWA,GAAY,CACrBA,EAAQ,cAAc,SACtB,KAAK,qBAAqB,CAC5B,EACA,OAAQ,CAACA,EAASlR,IAAQ,CACxB,MAAMskC,EAAmBpzB,EAAQ,IAAI,OAAO,gBAAkB,KAAK,KACnE2wB,GAAuB3wB,EAAQ,IAAI,OAAQ,KAAK,KAAMlR,CAAG,EAEtDskC,GACD,KAAK,qBAAqB,CAE9B,EACA,gBAAiB,MAAMb,GAAS,CAC9B,MAAM7kC,EAA+B,GAE/By8B,EAAgBD,GAAkB,cAAc,CACpD,OAAQ,KAAK,iBAAmBqI,EAAK,GACrC,aAAA7kC,EACA,QAAS,GACT,SAAU,KAAK,gBAAkB6kC,EAAK,GAAK,OAC3C,WAAY,KAAK,WAAa,UAC9B,WAAY,GACZ,YAAa,OACd,EACA,OAAAA,EAAsB,IAAMpI,EAAc,IAC1CoI,EAAsB,cAAgBpI,EAEjC,cAAQ,IAAIz8B,CAAY,EACvB6kC,CACT,EACA,kBAAmB6kO,GACnB,IAAK7rQ,EAAQ,IACd,EAEDiX,GAAW,KAAMjX,CAAO,EAEnB,oBAAiB,KAAK,kBAAoBE,EAAU,IAC3D,CAEO,OAAQ,CACb,KAAK,KAAK,kBACL,cAAS,QAASuU,GAAY,CACjCA,EAAQ,cAAc,SAAQ,CAC/B,EACD,MAAM,MAAM,CACd,CACF,CAEA,MAAMq3P,GAAqD,CACzD,OAAQ,GACR,WAAY,GACZ,MAAO,EACT,EAmBaC,GAAN,MAAMA,WAAsBpzO,EAAI,CAKrC,YAAY,CACV,OAAA14B,EACA,cAAAqmG,EAAgB,GAChB,cAAAlmG,EAAgB,GAChB,UAAA03C,EAAY,GACZ,WAAA9C,EAAa,SACb,WAAAxW,EACA,aAAAr8B,EACA,SAAAiV,EACA,QAAAsnB,EACA,SAAAp+B,EACA,YAAAmB,EAAc,CAAC,EACf,WAAAuqQ,EACA,YAAAhgP,EACA,WAAAigP,CAAA,EACuB,CACjB,OACJ,UAAW,GACX,SAAU,CAAC3lK,EACX,YAAa,CAAChmG,EACd,MAAO,GACP,oBAAqB,GACrB,SAAU,GACV,cAAe,GACf,OAAQ,GACR,OAAQ,GACT,EAED,KAAK,cAAc,SAEnB,MAAM4rQ,EAAiBzqQ,GAAa,WAC/B,sBAAmByqQ,EAAiBzqQ,EAAY,WAAW,OAAY,EAAAwqQ,EAAat8P,KAAkB,OAE3G,MAAM2/G,EAAuC,CAC3C,GAAG7tH,CAAA,EAGF,KAAK,mBACS6tH,EAAA,WAAa,KAAK,iBAAiB,IAAI,GAGxD,MAAMr/F,EAAgB,CAAC,CAAC3vB,GAAYL,IAAWC,EAAU,KACnD+tH,EAAe,CAAC,CAAC3tH,GAAY,CAAC2vB,EAE9BuhI,EAAYvhI,EAAgB3vB,EAAWL,EAEvC0jB,EAASsqG,EAAe,OAAYp+F,GAAU,CAClD,WAAY,KAAK,iBAAiB,IAAI,EACtC,KAAMi8O,GAAc92N,CAAU,EAE9B,cAAes6E,EAAe,cAC9B,SAAU,CAAC,CAACx3E,EACZ,OAAQ1gC,EAAW1Q,GAAe8qJ,EAClC,UAAWp6I,EACX,YAAA4U,EACA,YAAasjG,EACb,UAAWr/F,CAAA,CACZ,EACa9tB,GAAA,KAAKwhB,GAAQ,iBAAiB,EAC5C,MAAMs0B,EAAWt0B,GAAQ,KACtBs0B,IACQA,EAAA,UAAU,IAAI,eAAe,EACjC,uBAAkBA,EAAUjD,CAAU,GAG7C,MAAMm3N,EAAa,KAAK,UAElBC,EAAqB,KAAK,MACbA,EAAA,UAAU,IAAI,YAAY,EAExC,cAAS,UAAU,IAAI,cAAc,EAE1C,MAAMzxL,EAAW,CAACn8C,GAChB6F,GAAa,MACbA,GAAa,WAAWA,GAAa,KAAM,CAAC,OAAApkC,EAAQ,SAAAK,EAAoB,KAAM2vB,EAAgBgtD,GAAS,MAAQA,GAAS,KAAK,EAEzHhlE,EAAY,IAAIjB,GAChBoxJ,EAAmBnwJ,EAAU,OAAO,CACxC,OAAQu5I,EACR,SAAAp6I,EACA,OAAQ0gC,EACR,cAAA13C,EACA,UAAW,CAACs+B,EACZ,SAAUzO,EAAgB,OAAY3vB,EACtC,YAAa,CACX,UAAWq+B,GAAkB,gBAAgBg8C,CAAQ,EACrD,GAAG20C,CACL,EACA,UAAWr/F,CAAA,CACZ,EAED9tB,GAAc,KAAKimK,CAAgB,EAChBgkG,EAAA,OAAOn0P,EAAU,OAAO,EAW3C,MAAMlX,EAAO,KAAK,SAGZu1C,EAAK,KAAK,UAChBA,EAAG,UAAU,IAAI,gBAAiB,iBAAmBtB,CAAU,EAC3DxW,IACD8X,EAAyB,KAAO,IAAMr2C,GAMtC+0C,IAAe,SACX,eAAU,UAAU,IAAI,SAAS,EAC9BA,IAAe,SAClB,eAAU,UAAU,IAAI,WAAW,EAGvCsB,EAAA,QAAQ,OAAS,GAAKr2C,EACtBK,IACEg2C,EAAA,QAAQ,SAAW,GAAKh2C,GAGvB,MAAA+rQ,EAAa,SAAS,cAAc,MAAM,EAChDA,EAAW,UAAU,IAAI,iBAAkB,kBAErC,MAAAC,EAAe,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,cAAc,EAEzC,MAAMC,EAAY,KAAK,WACbA,EAAA,UAAU,IAAI,sBAAsB,EACpCA,EAAA,OAAOF,EAAYC,CAAY,EAEzC,KAAK,YAAY,UAAU,IAAI,kBAAmB,qBAAqB,EAOjE,MAAA5nO,EAAiB,KAAK,IAAM,CAChC,SAAU/gB,EACV,WAAAwoP,EACA,UAAWl0P,EAAU,QACrB,mBAAAm0P,EACA,WAAAC,EACA,aAAAC,EACA,gBAAiBvrQ,EACjB,YAAau1C,EACb,OAAQA,EACR,WAAY,KAAK,aAIf9X,IACD8X,EAAW,UAAY5R,EAErBsnO,GAAcrtO,GAAkB,UAAU,SAAW1+B,GAAU,CAACK,GAC9Dg2C,EAAA,UAAU,IAAI,eAAe,GAIjCqkC,GACiBh8C,GAAA,gBAAgB2X,EAAI,EAAI,CAE9C,CAEO,SAAU,CACf,KAAK,kBAAkB,SACzB,CAEO,QAAS,CACd,KAAK,QAAQ,EACR,SAAI,OAAO,QAClB,CAEO,mBAAoB,CACzB,GAAG,KAAK,IAAI,YAAa,OACzB,MAAMzhB,EAAQ,KAAK,IAAI,YAAc,SAAS,cAAc,KAAK,EAC3DA,EAAA,UAAY,gDAAgD82O,EAAU,gCACtE92O,EAAA,OAAO3zB,GAAK,aAAa,CAAC,EAC3B,SAAI,WAAW,OAAO2zB,CAAK,CAClC,CAEO,mBAAoB,CACzB,GAAG,KAAK,IAAI,YAAa,OACzB,MAAMA,EAAQ,KAAK,IAAI,YAAc,SAAS,cAAc,KAAK,EAC3DA,EAAA,UAAY,qCAAqC82O,EAAU,gCAC5D,SAAI,WAAW,OAAO92O,CAAK,CAClC,CAEO,yBAA0B,CAC/B,GAAG,KAAK,IAAI,kBAAmB,OAC/B,MAAMA,EAAQ,KAAK,IAAI,kBAAoB,SAAS,cAAc,KAAK,EACjEA,EAAA,UAAY,qCAAqC82O,EAAU,gBAC5D,SAAI,OAAO,OAAO92O,CAAK,CAC9B,CAEO,qBAAsB,CAC3B,GAAG,KAAK,IAAI,cAAe,OAC3B,MAAMA,EAAQ,KAAK,IAAI,cAAgB,SAAS,cAAc,KAAK,EAC7DA,EAAA,UAAY,qCAAqC82O,EAAU,uDACjE92O,EAAM,UAAY,IACb,SAAI,WAAW,OAAOA,CAAK,CAClC,CAEO,sBAAuB,CAC5B,GAAG,KAAK,IAAI,eAAgB,OAC5B,MAAMA,EAAQ,KAAK,IAAI,eAAiB,SAAS,cAAc,KAAK,EAC9DA,EAAA,UAAY,qCAAqC82O,EAAU,iDAC3D92O,EAAA,OAAO3zB,GAAK,kBAAkB,CAAC,EAChC,SAAI,WAAW,OAAO2zB,CAAK,CAClC,CAEO,iBACL5e,EACAu2P,EACAC,EACAp/P,EACA,CACc4O,GAAA,CACZ,QAAS,KAAK,IAAIhG,CAAG,EACrB,UAAW,aACX,SAAUu2P,EACV,SAAUn/P,EAAQ,EAAIu+P,GACtB,gBAAiBY,EAAW,OAAY,IAAM,CACvC,SAAIv2P,CAAG,EAAE,OAAO,EACd,YAAK,IAAIA,CAAG,CACrB,EACA,QAAS,CAACw2P,GAAe,CAAC/uP,GAAQ,KAAK,IAAIzH,CAAG,CAAC,EAAI,EAAI,EACxD,CACH,CACF,EA/OE81P,GAAe,YAAkE,CAAC,iBAAkB,gBAAiB,cAAe,aAAa,EAD5I,IAAMW,GAANX,GAkPP,MAAMY,WAAiB9qO,EAAwB,CAA/C,kCA4BE,KAAQ,OAAS,IAAM,CACjB,KAAK,OAGP,KAAK,MAAM,EAFOlD,GAAA,eAAe,OAAW,IAAI,CAGlD,EAmMF,KAAO,eAAiB,SAAW,CACjC,MAAM0I,EAAOhD,GAAa,KACpBpkC,EAAS,KAAK,OACpB,KAAK,OAAO,EACZ,MAAM,KAAK,SAAS,gBAAgB,0BAA0BA,EAAO,WAAY,EAAI,EACxEokC,GAAAgD,GAAM,SAAWpnC,EAAS,UAAY,cAAc,EAAE,KAAK,uBAAuB,EACjG,CA/NA,MAAa,OAAOiX,EAAgB,CAC/B,KAAK,OACN,MAAM,KAAK,QAGC+E,GAAA,CACZ,QAAS,KAAK,UACd,UAAW,aACX,SAAU/E,EACV,SAAU,IACV,gBAAkBA,EAEd,OAFsB,IAAM,CAC9B,KAAK,oBAAoB,CACvB,EACJ,QAAS,KAAK,WAAa,KAAK,UAAY,OAAW,GAAK,OAC7D,CACH,CAUO,KAAKlX,EAGT,CACDiX,GAAW,KAAMjX,CAAO,EAEnB,SAAM6gC,GAAO,OAAO,EACzB,KAAK,UAAY,GACZ,eAAU,UAAU,IAAI,kBAAkB,EAEzC,MAAAuxG,EAAa,CAAC,KAAK,OACtBA,IACD,KAAK,SAAS,gBAAgBlxI,GAAK,OAAO,CAAC,EAC3C,KAAK,UAAU,UAAU,IAAI,SAAU,aAAa,EAEnC4b,EAAA,KAAK,SAAU,KAAK,OAAQ,CAAC,eAAgB,KAAK,eAAe,GAG/E,UAAO,SAAS,cAAc,KAAK,EACnC,UAAK,UAAU,IAAI,sBAAsB,EAEzC,cAAW,SAAS,cAAc,KAAK,EACvC,cAAS,UAAU,IAAI,0BAA0B,EAEjD,WAAM,YAAY,KAAK,IAAI,EAChC,KAAK,KAAK,OAAO,KAAK,MAAO,KAAK,QAAQ,EAEpC,MAAAynB,EAAO5F,GAAkB,iBAC/BA,GAAkB,qBAAqB,CAAC,KAAA4F,EAAM,QAAS,KAAM,YAAa,GAAK,EAC1E,gBAAW,OAAOA,CAAI,EAE3B,KAAK,GAAK,IAAIqoO,GAAM,KAAK,OAAQx6H,EAAa,GAAK,CAAC,EAC/C,QAAG,WAAa,KAAK,WACrB,QAAG,WAAa,IAAI8tF,GAAiB,CACxC,SAAU,KAAK,SACf,IAAK,KAAK,IACV,KAAA37L,EACA,SAAU,UACV,gBAAiB,KAAK,OACvB,EACD,KAAK,GAAG,iBAER,MAAMk5B,EAAUxB,GAAiB,CAC/B,eAAgB,KAAK,eACrB,UAAW,cACX,QAAS,CAAC,CACR,KAAM,MACN,KAAM,yBACN,QAAS,IAAM,CACbq7I,GAAe,UAAUmiB,EAAe,EAAE,KAAK,KAAK,MAAM,CAC5D,EACA,cAAe,GACf,OAAQ,IAAM,KAAK,SAAS,gBAAgB,UAAU,KAAK,OAAO,SAAS,EAAG,eAAe,GAC5F,CACD,KAAM,OACN,KAAM,0BACN,QAAS,IAAM,CACKgB,GAAA,KAAKnjB,GAAgB,KAAK,MAAM,CACpD,GACC,CACD,KAAM,UACN,KAAM,oCACN,QAAS,KAAK,eACd,OAAQ,IAAM,CACZ,MAAMjwK,EAAOhD,GAAa,KACnB,OAACgD,GAAQ,CAAChD,GAAa,WAAWgD,EAAM,KAAK,uBAAuB,CAC7E,GACC,CACD,KAAM,UACN,KAAM,+BACN,QAAS,IAAM,CAAC,EAChB,OAAQ,IAAM,IACb,CACD,KAAM,SACN,OAAQ,GACR,KAAM,gBACN,QAAS,IAAM,CACbtX,GAAa,YAAYU,GAAmB,KAAK,OAAQ,OAAY7kB,GAAY,CAC/E,KAAK,OAAO,EACb,CACH,EACA,UAAW,GACX,OAAQ,SAAW,CAAC,CAAE,MAAM,KAAK,SAAS,mBAAmB,cAAc,KAAK,MAAM,EACvF,EACF,EAiCD,GA/BA,KAAK,eAAe,IAAI1L,CAAS,EAAE,iBAAmBD,GAAW,CAC5D,KAAK,SAAWA,GAInB,KAAK,GAAG,WAAU,CACnB,EAED,KAAK,eAAe,IAAIC,CAAS,EAAE,cAAgBuG,GAAW,CAC5D,GAAG,KAAK,SAAWA,EAAO,SAAS,EAAI,EACrC,OAGWhG,GAAgB,QAAQgG,CAAM,EAChB,OAAO,OACdk4B,GAAA,eAAe,OAAW,IAAI,CAClD,CACD,EAEE/M,IACcwqM,GAAA,CACb,QAAS,KAAK,UACd,QAAS,IAAM,CACKz9L,GAAA,eAAe,OAAW,IAAI,CAClD,EACA,WAAY,KAAK,iBAAiB,IAAI,EACvC,EAGE,YAAO,OAAO8+B,CAAO,EAEvB,CAAC20E,EACF,OAAO,KAAK,OAEhB,CAEA,MAAa,OAAQ,CACnB,KAAK,MAAQ,OAEP,MAAAxwI,EAAa,KAAK,iBAAiB,IAAI,EACvC3B,EAAS,KAAK,OAEpB,KAAK,SAAS,kBAAkB,0BAA0B,KAAK,OAAO,UAAU,EAChF2B,EAAW,UAAU,IAAM,CACzB,KAAK,SAAS,kBAAkB,8BAA8B,KAAK,OAAO,UAAU,EACrF,EAED,MAAMwmK,EAAmBx1J,GAAc,CACrC,OAAA3S,EACA,OAAQ,GACR,YAAa,CAAC,WAAA2B,CAAU,EACzB,EAEKirQ,EAAmBxoO,GAAa,cAAc,CAClD,OAAApkC,EACA,QAAS,KAAK,SACd,UAAW,GACX,cAAe,GACf,WAAA2B,EACA,SAAU,GACX,EAcD,OAAO,QAAQ,IAAI,CACjBwmK,EACAykG,EACA,KAAK,GAAG,cAAgB,OAAMC,GACrBA,EAAW,OAASA,EAAW,cAAgB,MACvD,EACF,EAAE,KAAK,CAAC,CACP70P,EACA80P,EACAn4P,CAAA,IACI,CACAhT,MAIC,WAAM,OAAOqW,CAAS,EACf80P,MAAA,CACb,CACH,CAEO,qBAAsB,CAC3B,MAAM,oBAAoB,EAC1B,KAAK,GAAG,SACV,CAEO,uBAAmE,CACjE,OACL,OAAQ,KAAK,OACb,KAAM9vL,GAAS,KAEnB,CASF,CAEA,MAAM+vL,GAAwB,IAAI,MAAM,iBAAiB,EAGzD,MAAMC,EAAsC,CAgB1C,aAAc,CA+Dd,KAAO,qBAAuB,IAAM,CAG/B,KAAK,cAAc,aAAa,KAAK,YAAY,EAC/C,kBAAe,OAAO,WAAW,IAAM,CAC1C,KAAK,aAAe,OAGlB,GAAC,KAAK,WAAW,KAAK,mBACtBtuO,GAAkB,iBAKpBktO,GAAoB,IAAM,CACxB,MAAMjrN,EAAW,iBACX+qF,EAAgBgC,GAAiB,CACrC,gBAAiB,KAAK,WAAW,UACjC,SAAA/sF,EACA,eAAgB,GACjB,EAEK5wC,EAAU27H,EAAc,QACxBuhI,EAAel9P,EAAQ,CAAC,EACxBm9P,EAAcn9P,EAAQA,EAAQ,OAAS,CAAC,EACxCg7H,EAAekiI,GAAc,QAC7B31F,EAAc41F,GAAa,QAE9B,IAACniI,GAAgB,CAACusC,EACnB,OAGC5rC,EAAc,aAAa,SACvB,gBAAW,UAAU,IAAM,IAG/BA,EAAc,gBAAgB,SAC1B,gBAAW,UAAU,OAAS,IAG/B,MAAAjW,EAAc,IAAI1wE,GAAY,KAAK,WAAYpE,EAAU,CAAC,CAAC+qF,EAAc,aAAa,MAAM,EAClGjW,EAAY,KAAK,EAEjB,CACE,GAAGiW,EAAc,aACjB,GAAGA,EAAc,iBACjB,QAAQ,CAAC,CAAC,QAAAl3H,KAAa,CACvB,KAAK,kBAAkB,KAAK,wBAAwBA,CAAO,CAAC,EAC7D,EAEDihH,EAAY,QAAQ,EAEpB,KAAK,WAAW,EACjB,GACA,GAAG,GApHD,SAAM70F,GAAO,IAAI,EACtB,KAAK,QAAU,CAAC,IAAK,EAAG,OAAQ,GAChC,KAAK,SAAW3gC,EAAU,SACrB,oBAAiB,IAAIk4B,EAC5B,CAEO,eAAetC,EAAwB,CACrC,OAAC,MAAO,KAAK,WAAW,UAAUA,CAAI,EAAI,EAAI,KAAK,QAAQA,CAAI,CAAC,CACzE,CAEU,yBAAyB+b,EAAW,CAEtC,MAAAu7N,EAAY,KAAK,eAAe,KAAK,EACrCC,EAAe,KAAK,eAAe,QAAQ,EAEjD,GAAG,CAACD,EAAU,OAAS,CAACC,EAAa,MAC5B,SAGT,MAAM1zP,EAAQi4B,GAAeC,EAAQ,KAAK,QAAQ,EAC1C,QAACu7N,EAAU,OAASzzP,GAASyzP,EAAU,SAC5C,CAACC,EAAa,OAAS1zP,GAAS0zP,EAAa,MAClD,CAEO,YAAYv7N,EAA4B,CAC7C,KAAK,SAAWA,EAChB,KAAK,WAAW,SAAWA,CAC7B,CAEU,kBAAkB77B,EAAgB,CACrC,gBAAW,OAAOA,CAAG,CAC5B,CAEO,aAAa47B,EAAW,CAC7B,OAAO,KAAK,kBAAkB,KAAK,aAAaA,CAAM,CAAC,CACzD,CAEO,aAAaA,EAAW,CACvB,MAAA57B,EAAM,KAAK,aAAa47B,CAAM,EACjC,QAAK,yBAAyBA,CAAM,GACrC,GAAG,CAAC,KAAK,WAAW,IAAI57B,CAAG,GAAK,KAAK,yBAA0B,CACxD,gBAAW,IAAIA,CAAG,EACvB,MACF,MACK,CACL,KAAK,aAAa47B,CAAM,EACxB,MACF,CAEM,MAAAjT,EAAgB,KAAK,iBAAiB3oB,CAAG,EAC3C2oB,IAIJD,GAAkB,gBAAgB,CAChC,OAAAkT,EACA,cAAAjT,EACA,UAAW,GACZ,EACI,gBAAW,OAAO3oB,CAAG,EAC5B,CA2DO,kBAAmB,CACjB,YAAK,cAAc,KAAK,CACjC,CAEO,cAAc6f,EAAmB,SAAU,CACzC,YAAK,YAAYA,CAAI,CAC9B,CAEO,mBAAwC,CAC7C,MAAMwZ,EAAc,KAAK,YAAc,IAAIqE,GAAmB,KAAK,kBAAkB,EAC/EC,EAAc,KAAK,4BACzB,OAAAtE,EAAY,OAAO,CACjB,UAAW,KAAK,WAAW,KAAK,cAChC,YAAAsE,EACA,SAAU,IAAM,CACX,KAAK,cAAgBtE,IACtB,KAAK,YAAc,OAEvB,EACA,gBAAiB,KAAK,WACvB,EAEMA,CACT,CAEO,YAAYxZ,EAAkB,CAK7B,MAAAyQ,EAAM,KAAK,IAAI,WAAW,QAAUqwD,GAAmB,IAAM,IAAI,CAAC,EAGrE,GAFHrwD,EAAI,MAAOzQ,CAAI,EAEZ,KAAK,oBAAsB,KAAK,yBAA2C,OAAO,KAAK,sBAClF,KAAK,WAAW,UAAUA,CAAI,EACpC,OAAO,QAAQ,QAAQ,CACrB,OAAQ,GACR,cAAe,QAAQ,QAAQ,EAChC,EAGCyQ,EAAA,KAAK,QAASzQ,CAAI,EAChB,MAAAw3O,EAAkBtnO,GAAU,YAAY,EAExCunO,EAAoB5gQ,KACpB8U,EAAgB,IAAI,QAAc,MAAMkD,EAASwkB,IAAW,CAC1D,MAAAqkO,EAAW,KAAK,WAAW,KAEjC,IAAIl+N,EAAc,KAAK,YACnB,IAEF,MAAM3mC,EAAI,MADqB,KAAK,iBAAiBmtB,CAAI,EAGzD,GACE,CAAC03O,EAAS,mBACV,CAACl+N,IAEE,CAAC,KAAK,0BAA4B,KAAK,4BACxC,CAAC3mC,EAAE,QAEL,CACG,QAAK,2BAA6B8Y,EAC7B,MAAA6rP,EAGRh+N,EAAc,KAAK,oBAEnBi+N,EAAkB,QAAQ,EAAK,CACjC,CAEM,MAAAvrQ,EAAS,MAAM2G,EAAE,OAEpB,QAAK,2BAA6B8Y,EAC7B,MAAA6rP,EAGUC,EAAA,QAAQ5kQ,EAAE,MAAM,EAQ/BmtB,IAAS,SACP9zB,EAAO,QACH,gBAAW,UAAU8zB,CAAI,EAAI,IAE5B9zB,EAAO,WACV,gBAAW,UAAU8zB,CAAI,EAAI,IAG9B,MAAAr2B,EAASuC,EAAO,QAAQ,OAE9B,GADIukC,EAAA,eAAe9mC,CAAM,UAAU,EAChCA,EAAQ,CAGT,MAAM0C,GAFU2zB,IAAS,MAAQ9zB,EAAO,QAAQ,MAAM,EAAE,QAAQ,EAAIA,EAAO,SAE9C,IAAK6vC,GACzB,KAAK,WAAW,IAAI,KAAK,aAAaA,CAAW,CAAC,CAC1D,EAGE,GADH,MAAM,QAAQ,IAAI1vC,CAAY,EAAE,MAAM,EACnC,KAAK,2BAA6Bsf,EAC7B,MAAA6rP,CAEV,CAEA,MAAMG,EAAezrQ,EAAO,QAAQ8zB,IAAS,MAAQ,EAAIr2B,EAAS,CAAC,EAChEguQ,IACD,KAAK,QAAQ33O,CAAI,EAAI8b,GAAe67N,EAAc,KAAK,QAAQ,GAIjE,KAAK,yBAA2B,GAChC9uO,GAAkB,mBAAmB,EAEjC4H,EAAA,aAAcvkC,EAAQwrQ,EAAS,iBAAiB,EAEpD,WAAW,IAAM,CACf,KAAK,WAAW,YACf,CAAC,EAEDl+N,GAEWA,EAAA,OAAOk+N,EAAS,iBAAiB,QAEzCp8P,EAAK,CACPA,GAAkB,OAAS,cAC7Bm1B,EAAI,MAAMn1B,CAAG,EAGf+3B,EAAO/3B,CAAG,EACVm8P,EAAkB,OAAOn8P,CAAG,EAC5B,MACF,CAEQuT,GAAA,CACT,EAAE,QAAQ,IAAM,CACZ,KAAK,2BAA6BlD,GACnC8kB,EAAI,KAAK,EACT,KAAK,yBAA2B,QAEhCA,EAAI,kBAAkB,CACxB,CACD,EAED,KAAK,yBAA2B9kB,EAChC,MAAMisP,EAAqB,KAAK,mBAAqBH,EAAkB,KAAM9oP,IACpE,CACL,OAAAA,EACA,cAAAhD,CAAA,EAEH,EAAE,QAAQ,IAAM,CACZ,KAAK,qBAAuBisP,IAC7B,KAAK,mBAAqB,OAC5B,CACD,EAEM,OAAAA,CACT,CAEA,MAAa,YAAa,CAClB,MAAAF,EAAW,KAAK,WAAW,KAC3B,CAACG,EAAaC,CAAU,EAAI,MAAM,QAAQ,IAAI,CAClD,KAAK,qBAAqBJ,EAAS,iBAAgC,EACnE,KAAK,qBAAqBA,EAAS,gBAA+B,EACnE,EAEK,CAAC,SAAA17N,CAAY,OACnB,KAAK,QAAQ,IAAMF,GAAe+7N,EAAa77N,CAAQ,EACvD,KAAK,QAAQ,OAASF,GAAeg8N,EAAY97N,CAAQ,CAC3D,CAEO,aAAaD,EAAsB,CAClC,MAAAm7N,EACR,CAEO,wBAAwBv4P,EAAiC,CACxD,MAAAu4P,EACR,CAEO,2BAAwF,CACvF,MAAAA,EACR,CAEO,qBAAqBv4P,EAAkC,CACtD,MAAAu4P,EACR,CAEO,iBAAiBl3O,EAA2F,CAC3G,MAAAk3O,EACR,CAEA,MAAa,UAAUn7N,EAAW,CAC1B,MAAA57B,EAAM,KAAK,aAAa47B,CAAM,EAC9BnN,EAAM,KAAK,aAAazuB,CAAG,EACjC,GAAG,CAACyuB,EACF,OAGF,MAAMmpO,EAAmBnpO,EAAI,gBAAgB,cAAc,wBAAwB,EAC7EopO,EAAmB,MAAMzpO,GAAa,cAC1CwN,EAAO,OACPg8N,EACA5/I,GAAap8E,CAAM,EAAIA,EAAO,GAAK,QAElC,CAACg8N,GAAoBC,IACPx2P,GAAAotB,EAAI,gBAAiBopO,CAAgB,EAChDppO,EAAA,gBAAgB,UAAU,IAAI,aAAa,EAEnD,CAEO,YAAYmN,EAAW,CACtB,MAAA57B,EAAM,KAAK,aAAa47B,CAAM,EAC9BjT,EAAgB,KAAK,iBAAiB3oB,CAAG,EAC3C2oB,IAIJA,EAAc,IAAI,gBAAgB,UAAU,OAAO,aAAa,EAChED,GAAkB,gBAAgB,CAChC,OAAAkT,EACA,YAAa,KACb,cAAAjT,EACA,UAAW,KACZ,EACH,CAEO,aAAa3oB,EAAgB,CAGlC,OADgB,KAAK,WAAW,IAAIA,CAAG,GACvB,GAClB,CAEO,iBAAiBA,EAAgB,CAEtC,OADgB,KAAK,WAAW,IAAIA,CAAG,GACvB,aAClB,CAEO,gBAAiB,CACtB,KAAK,WAAW,UAAU,iBAAiB,SAAU,KAAK,oBAAoB,EAC9E,KAAK,WAAW,cAAgB,KAAK,iBAAiB,KAAK,IAAI,EAC/D,KAAK,WAAW,iBAAmB,KAAK,cAAc,KAAK,IAAI,CACjE,CAEO,OAAQ,CACb,KAAK,WAAW,QAChB,KAAK,aAAa,QACpB,CAEO,OAAQ,CACR,gBAAW,UAAU,IAAM,GAC3B,gBAAW,UAAU,OAAS,GACnC,KAAK,QAAQ,IAAM,KAAK,QAAQ,OAAS,EACzC,KAAK,yBAA2B,OAChC,KAAK,mBAAqB,MAC5B,CAEO,WAAY,CACjB,YAAK,MAAM,EACX,KAAK,MAAM,EACJ,KAAK,eACd,CAEO,SAAU,CACf,KAAK,MAAM,EACX,KAAK,WAAW,UAChB,KAAK,eAAe,WACtB,CACF,CAEA,MAAM22P,WAAcK,EAAiB,CACnC,YAAmBhtQ,EAAuByvF,EAAkB,CACpD,QADW,YAAAzvF,EAAuB,cAAAyvF,EAGxC,KAAK,mBAAqB,CACxB,WAAY,EACZ,eAAgB,EAChB,YAAa,IAGV,oBAAe,IAAIxvF,CAAS,EAAE,eAAgB,MAAM,CAAC,OAAAD,EAAQ,SAAAK,EAAU,QAAAo/P,CAAA,IAAa,CACvF,GAAG,CAACp/P,GAAY,KAAK,SAAWL,EAC9B,OAGF,MAAM4xC,EAAS,MAAM,KAAK,SAAS,eAAe,cAAc5xC,EAAQK,CAAQ,EAE5EuxC,IAED6tN,EAAQ,OACT,KAAK,UAAU7tN,CAAM,EAErB,KAAK,YAAYA,CAAM,EACzB,CACD,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,sBAAwB+2C,GAAY,CACrE,SAAU,CAACh3C,EAAQ,CAAC,OAAA4xC,EAAQ,OAAAk8N,CAAM,CAAC,IAAK92N,EACnCh3C,IAAW,KAAK,QAAU,CAAC8tQ,GAAQ,MAI/BA,EAAA,QAASt2P,GAAe,CAC7B,KAAK,aAAaA,CAAU,EAC7B,CACH,CACD,EAEI,oBAAe,IAAIvX,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAA2xC,KAAY,CAC7D,CAACo8E,GAAap8E,CAAM,GAAKA,EAAO,SAAW,KAAK,QAIjClT,GAAA,mBAAmB,CAAC,OAAAkT,EAAQ,cAAe,KAAK,iBAAiB,KAAK,aAAaA,CAAM,CAAC,CAAE,GAC/G,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,yBAA0B,MAAM2xC,GAAW,CACzE,GAAAA,EAAO,SAAW,KAAK,OAIvB,IAAA5lB,GAAS4lB,CAAM,EAAG,CAEnB,MAAMwe,EAAU,CAAC,GADL,KAAK,WAAW,OAAO,EACX,QAAS,GAC3B/jD,EAAW+jD,EAAQ,IAAI,CAAC,CAACtuB,CAAE,IAAM,KAAK,SAAS,eAAe,cAAc,KAAK,OAAQA,CAAE,CAAC,EAC5FgsO,EAAS,MAAM,QAAQ,IAAIzhQ,CAAQ,EACzC+jD,EAAQ,QAAQ,CAAC,CAACtuB,EAAIttB,CAAO,EAAGlR,IAAQ,CACpBo7B,GAAA,mBAAmB,CAAC,OAAQovO,EAAOxqQ,CAAG,EAAG,cAAekR,EAAQ,cAAc,EACjG,EAED,MACF,CAEkBkqB,GAAA,mBAAmB,CAAC,OAAAkT,EAAQ,cAAe,KAAK,iBAAiB,KAAK,aAAaA,CAAM,CAAC,CAAE,IAC/G,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,cAAgB2xC,GAAW,CACzD,CAACo8E,GAAap8E,CAAM,GAAKA,EAAO,SAAW,KAAK,QAInD,KAAK,kBAAkB,KAAK,aAAaA,CAAM,CAAC,EACjD,EAEI,oBAAe,IAAI3xC,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAA2xC,EAAQ,KAAA8yN,EAAM,OAAA1kQ,KAAY,CAC1E,CAACguH,GAAap8E,CAAM,GAAKA,EAAO,SAAW,KAAK,SAIhD8yN,EACD,KAAK,aAAa9yN,CAAM,EAExB,KAAK,aAAaA,CAAM,EAC1B,CACD,CACH,CAEU,yBAAyBA,EAAoB,CACrD,OAAGA,EAAO,OAAO,OAAe,GACzB,MAAM,yBAAyBA,CAAM,CAC9C,CAEO,aAAaA,EAAoB,CACtC,OAAOA,EAAO,EAChB,CAEO,wBAAwBp9B,EAAsB,CAC5C,OAACA,EAAQ,QAAQ,QAC1B,CAEO,2BAA4B,CACjC,MAAO,IAAuB,CAC5B,MAAMu5P,EAAc12D,GAAe,KAC7B22D,EAAW,GACV,OACL,IAAKA,EACL,MAAOD,EAAY,MACnB,OAAQ,EACR,KAAM,KAAK,SACX,MAAOA,EAAY,MAAQ,KAAK,SAChC,OAAQA,EAAY,OAASC,CAAA,CAC/B,CAEJ,CAEO,qBAAqBx5P,EAAsB,CACzC,YAAK,SAAS,eAAe,cAAc,CAACA,EAAQ,QAAQ,OAAQ,CAACA,EAAQ,QAAQ,QAAQ,CACtG,CAEA,MAAa,iBAAiBqhB,EAAkB,CACxC,MAAC,SAAAgc,CAAY,OACnB,IAAIpU,EAAYiO,GAAW,OAAS,GAAK,KAAO,EAC5CiN,EAAc,EAElB,MAAM62L,EAAW,KAAK,OAChB,CAAC,MAAOy+B,CAAA,EAAsB,KAAK,eAAep4O,CAAI,EAE5D,GADc8iB,EAAAs1N,EACXA,EACD,GAAGp4O,IAAS,MAAO,CACjB,MAAM88B,EAAU,MAAM,KAAK,SAAS,eAAe,iBAAiB68K,EAAU,EAAI,EAC5E91N,EAAQi5C,EAAQ,UAAW/gB,GAAWD,GAAeC,EAAQC,CAAQ,GAAKo8N,CAAkB,EAC5FC,EAAY,KAAK,IAAI,EAAGx0P,EAAQ+jB,CAAS,EAC/CA,EAAY/jB,EAAQw0P,EACpBv1N,EAAchH,GAAeghB,EAAQu7M,CAAS,EAAGr8N,CAAQ,EAAI,OAE/C8G,EAAAs1N,EAIlB,OAAO,KAAK,SAAS,aAAa,eAAe,WAAW,CAC1D,YAAAt1N,EACA,MAAOlb,EACP,SAAA+xM,EACA,aAAc,CAAC,CAAC2+B,EAAA,CACjB,CACH,CACF,CAEA,MAAMC,WAAcpB,EAAa,CAC/B,YAAsBx9B,EAAkB,CAChC,QADc,cAAAA,EAGpB,KAAK,2BAA6B,GAE7B,oBAAe,IAAIvvO,CAAS,EAAE,eAAgB,MAAM,CAAC,OAAAD,EAAQ,QAAAy/P,KAAa,CAC7E,KAAM,CAAC7tN,EAAQr6B,CAAO,EAAI,MAAM,QAAQ,IAAI,CAC1C,KAAK,SAAS,mBAAmB,cAAcvX,CAAM,EACrD,KAAK,SAAS,gBAAgB,QAAQA,CAAM,EAC7C,EAEE,CAAC4xC,GAAUr6B,IAEXkoP,EAAQ,OACT,KAAK,UAAU7tN,CAAM,EAErB,KAAK,YAAYA,CAAM,EACzB,CACD,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,cAAe,MAAMsG,GAAW,CAC9D,IAAC,KAAK,SACP,OAGI,MAAAvG,EAASuG,EAAO,WAChBk+B,EAAM,KAAK,aAAazkC,CAAM,EACpC,GAAG,CAACykC,EACF,OAII,MAAA1E,GADS,MAAM,KAAK,SAAS,gBAAgB,cAAcx5B,CAAM,IAChD,IAAM,mBAC7B,KAAK,gBAAgBk+B,EAAI,SAAS,KAAM1E,CAAM,EAC/C,EAED,KAAK,eAAe,IAAI9/B,CAAS,EAAE,cAAe,MAAMuG,GAAW,CAC3D,MAAAxG,EAASwG,EAAO,SAAS,EAAI,EACnC,KAAK,2BAA2BxG,CAAM,EACvC,EAEI,oBAAe,IAAIC,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAA2xC,KAAY,CAC5D,CAAC,KAAK,UAAY,CAACA,GAItB,KAAK,aAAaA,CAAM,EACzB,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,sBAAwB+2C,GAAY,CAClE,GAAC,KAAK,SAIT,SAAU,CAACh3C,EAAQ,CAAC,OAAA4xC,EAAQ,OAAAk8N,CAAM,CAAC,IAAK92N,EAClChrB,GAAS4lB,CAAM,IAInB,KAAK,aAAaA,CAAM,EACNlT,GAAA,iBAAiB1+B,EAAO,SAAU,GACtD,CACD,EAED,KAAK,eAAe,IAAIC,CAAS,EAAE,cAAgB2xC,GAAW,CACzD,CAAC,KAAK,UAAY,CAAC5lB,GAAS4lB,CAAM,IAIrC,KAAK,kBAAkB,KAAK,aAAaA,CAAM,CAAC,EAC9BlT,GAAA,iBAAiBkT,EAAO,MAAM,GACjD,EAEI,oBAAe,IAAI3xC,CAAS,EAAE,gBAAiB,CAAC,CAAC,OAAA2xC,KAAY,CAC7D,CAAC,KAAK,UAAY,CAAC5lB,GAAS4lB,CAAM,GAIrC,KAAK,aAAaA,CAAM,EACzB,EAED,KAAK,eAAe,IAAI3xC,CAAS,EAAE,yBAA2B2xC,GAAW,CACpE,CAAC,KAAK,UAAY,CAAC5lB,GAAS4lB,CAAM,GAIrC,KAAK,aAAaA,CAAM,EACzB,EAEI,oBAAe,IAAI3xC,CAAS,EAAE,eAAgB,CAAC,CAAC,OAAA2xC,EAAQ,KAAA8yN,EAAM,OAAA1kQ,KAAY,CAC1E,CAAC,KAAK,UAAYguH,GAAap8E,CAAM,IAIrC8yN,EACD,KAAK,aAAa9yN,CAAM,EAExB,KAAK,aAAaA,CAAM,EAG1BlT,GAAkB,iBAAiB1+B,CAAM,GAC1C,EAED,KAAK,eAAe,IAAIC,CAAS,EAAE,gBAAiB,MAAM4oB,GAAW,CAChE,QAAK,UAAYA,EAAO,KAAO,KAAK,UAAY,CAACsmN,GAAa,IAAItmN,EAAO,EAAE,EAAG,CAC/E,MAAMmuB,EAAU,MAAM,KAAK,SAAS,eAAe,iBAAiB,EAAI,EACxE,MAAM,KAAK,wBACH,UAAI,EAAGx3C,EAASw3C,EAAQ,OAAQ,EAAIx3C,EAAQ,EAAE,EAAG,CACjD,MAAAoyC,EAASoF,EAAQ,CAAC,EACxB,KAAK,aAAapF,CAAM,CAC1B,CAEGlT,GAAkB,WAAa,KAAK,UACrCA,GAAkB,uBAAuB,CAE7C,EACD,CACH,CAEA,IAAY,UAAW,CACrB,OAAOA,GAAkB,KAAO,IAClC,CAEO,2BAA4B,CACjC,OAAO,KAAK,WAAa6yM,GAAoB7yM,GAAkB,eAAiBA,GAAkB,QAAQ,SAC5G,CAEA,MAAa,iBAAiB7I,EAAkB,CACxC,MAAC,SAAA25M,EAAU,SAAA39L,CAAY,OAC7B,IAAIpU,EAAYiO,GAAW,OAAS,GAAK,KAAO,EAC5CiN,EAAc,EAElB,MAAM01N,EAAsB3vO,GAAkB,oBAExC,CAAC,MAAOuvO,CAAA,EAAsB,KAAK,eAAep4O,CAAI,EAC5D,GAAGo4O,EACD,GAAGp4O,IAAS,MAAO,CACjB,MAAM88B,EAAU,MAAM,KAAK,SAAS,eAAe,iBAAiB68K,EAAU,EAAI,EAC5E91N,EAAQi5C,EAAQ,UAAW/gB,GAAWD,GAAeC,EAAQC,CAAQ,GAAKo8N,CAAkB,EAC5FC,EAAY,KAAK,IAAI,EAAGx0P,EAAQ+jB,CAAS,EAC/CA,EAAY/jB,EAAQw0P,EACpBv1N,EAAchH,GAAeghB,EAAQu7M,CAAS,EAAGr8N,CAAQ,EAAI,OAE/C8G,EAAAs1N,EAWlB,MAAMvlQ,EAAI,MAPM,KAAK,SAAS,aAAa,eAAe,WAAW,CACnE,YAAAiwC,EACA,MAAOlb,EACP,SAAA+xM,EACA,aAAc,GACf,EAGD,OAAG6+B,IACD3lQ,EAAE,OAAS,QAAQ,OAAOq9B,GAAU,YAAY,CAAC,GAG5Cr9B,CACT,CAEO,gBAAgB8L,EAAsBurB,EAAiB,CAC5D,MAAM9jB,EAAY,YACZqyP,EAAe95P,EAAQ,UAAU,SAASyH,CAAS,EACzD,CAACqyP,GAAgBvuO,GAAUvrB,EAAQ,UAAU,IAAIyH,CAAS,EAC5CD,GAAA,CACZ,QAAAxH,EACA,UAAW,aACX,SAAUurB,EACV,SAAU,IACV,gBAAiBA,EAAS,OAAY,IAAM,CAClCvrB,EAAA,UAAU,OAAOyH,CAAS,CACpC,EACA,QAAS8jB,GAAU,CAACuuO,EAAe,EAAI,EACxC,CACH,CAEO,mBAAmBhqO,EAAwBzb,EAAuD,CACvG,MAAM2mN,EAAW3mN,EAAO,GAClBm8B,EAAa,IAAI/lB,GAAW,KAAM,KAAM,GAAG,EACtC+lB,EAAA,UAAU,QAAQ,SAAW,GAAKwqL,EAEvC,MAAA39L,EAAWJ,GAAkB5oB,EAAO,OAAO,EAC3C0lP,EAAmB,IAAItuC,GAAiB,CAC5C,SAAUhgO,EAAU,SACpB,IAAK,KAAK,IACV,KAAAqkC,EACA,SAAAuN,EACA,mBAAoB,IAAM,CACxBmT,EAAW,aAAa,EACxBtmB,GAAkB,qBAAqB,CACzC,EACD,EAED,YAAK,WAAasmB,EAClB,KAAK,WAAaupN,EAClB,KAAK,YAAY18N,CAAQ,EACzB,KAAK,eAAe,EAKbmT,CACT,CAEO,oBAAoBpT,EAAgB,CACzC,MAAG,EAACu9L,GAAa,IAAI,KAAK,QAAQ,EAA0D,KAAK,WAAav9L,EAAO,UAA/ED,GAAeC,EAAQ,KAAK,QAAQ,IAAM,OAKlF,CAEU,yBAAyBA,EAAgB,CACjD,OAAGA,EAAO,aAAe,QAAa,CAAC,KAAK,oBAAoBA,CAAM,EAAU,GACzE,MAAM,yBAAyBA,CAAM,CAC9C,CAKA,MAAa,uBAAwB,CACnC,KAAK,WAAW,OAAS,UAAQ,MAAMp9B,GAAY,CACjD,MAAMo9B,EAAS,MAAM3xC,EAAU,SAAS,mBAAmB,cAAcuU,EAAQ,EAAE,EAC/E,KAAK,oBAAoBo9B,CAAM,GACjC,KAAK,aAAaA,CAAM,CAC1B,CACD,CACH,CAEO,aAAaA,EAAgB,CAClC,GAAG,CAAC,KAAK,oBAAoBA,CAAM,EAAG,CACjC,KAAK,iBAAiBA,EAAO,MAAM,GACpC,KAAK,aAAaA,CAAM,EAG1B,MACF,CAEO,aAAM,aAAaA,CAAM,CAClC,CAEO,cAAcnN,EAAgB10B,EAAkB,CACjD,IAAC,SAAAy+P,EAAU,OAAAhoK,CAAU,EAAA/hE,EACtB,IAAC+pO,GAAYz+P,EAAS,CACvB,KAAM,CAAC,OAAAiY,EAAQ,eAAAymP,GAAkBhqO,EAAI,SAAW+pO,EAAWpD,GAAoB5kK,EAAO,UAAU,SAAS,QAAQ,CAAC,EAC3Gx+E,EAAA,UAAU,IAAI,wBAAwB,EAC7Cw+E,EAAO,OAAOx+E,CAAM,EACLymP,GACjB,CAEID,GAIUxyP,GAAA,CACZ,QAASyoB,EAAI,SAAS,OACtB,UAAW,aACX,SAAU10B,EACV,SAAU47P,GACV,gBAAiB57P,EAAU,OAAY,IAAM,CACvC00B,EAAA,SAAS,OAAO,SACpBA,EAAI,SAAW,MACjB,EACA,QAAS10B,EAAU,EAAI,EACxB,CACH,CAEO,2BAA2B/P,EAAgBykC,EAAiB,CAMjE,GALG,CAACkjF,KAIAljF,IAAWA,EAAA,KAAK,aAAazkC,CAAM,GACpC,CAACykC,GAAK,OAET,MAAM2C,EAAO5mC,GAAgB,QAAQR,EAAO,SAAU,GACjD,mBAAcykC,EAAK,CAAC,EAAE2C,EAAK,OAAO,aAAeA,EAAK,OAAO,eAAe,CACnF,CAEO,cAAcvR,EAAmB,SAAU,CAChD,OAAG,KAAK,WAAW,UAAUA,CAAI,GAC/B6I,GAAkB,eAAe,EAG9B,SAAI,gBAAiB7I,CAAI,EACvB,MAAM,cAAcA,CAAI,CACjC,CAEO,yBAAyB5e,EAAgBoF,EAAiB,CAC/D,GAAG,CAACpF,EAAO,CACT,KAAK,WAAW,OAAS,UAASy3P,GAAiB,CAC3C,MAAC,IAAAjqO,EAAK,cAAA9F,CAAiB,EAAA+vO,EACzBjqO,EAAI,mBAIR9F,EAAc,iBAAiB,oBAAqB,GAAO,GAAO,EAAK,EACxE,EAED,MACF,CAEM,MAAAgwO,EAAkB,CAAC,SAAU,SAAS,EAC5C,KAAK,WAAW,OAAS,UAASD,GAAiB,CAC3C,MAAC,IAAAjqO,EAAK,cAAA9F,CAAiB,EAAA+vO,EACvBE,EAAgBnqO,EAAI,aAAa,YACvC,GACE,CAACmqO,GACDnqO,EAAI,YAAY,UAAU,SAAS,WAAW,GAC9CA,EAAI,YAAY,UAAU,SAAS,oBAAoB,EAEvD,OAGI,MAAAoqO,EAA6B,CAAC,CAACpqO,EAAI,kBACzC9F,EAAc,wBAAwB,EACxBA,EAAA,iBAAiB,oBAAqB,GAAMkwO,CAA0B,EACpFpqO,EAAI,kBAAkB,YAAcmqO,EAC9B,MAAAE,EAA6BrqO,EAAI,kBAAkB,UACnDsqO,EAAuBtqO,EAAI,YAAY,UAC7BkqO,EAAA,QAAS1yP,GAAc,CACrC6yP,EAA2B,OAAO7yP,EAAW8yP,EAAqB,SAAS9yP,CAAS,CAAC,EACtF,EACF,CACH,CAEO,aAAa21B,EAAgB,CAClC,OAAOA,EAAO,MAChB,CAEO,wBAAwBp9B,EAAsB,CAC5C,OAACA,EAAQ,QAAQ,MAC1B,CAEO,qBAAqBA,EAAsB,CACzC,OAAAvU,EAAU,SAAS,mBAAmB,cAAcuU,EAAQ,QAAQ,OAAO,UAAU,CAC9F,CACF,CAEO,MAAMwrN,WAAcgtC,EAAkB,CAG3C,aAAc,CACN,QAUN,KAAK,eAAe,IAAI/sQ,CAAS,EAAE,sBAAwB+2C,GAAY,CACrE,IAAIg4N,EAAe,GACnB,SAAU,CAAChvQ,EAAQ,CAAC,MAAAqgQ,CAAM,KAAKrpN,EACtBqpN,GAAA,QAASzuN,GAAW,CACVo9N,EAAA,GACf,KAAK,aAAap9N,CAAM,EACzB,EAGAo9N,GACD,KAAK,cAAc,CACrB,CACD,EAED,KAAK,eAAe,IAAI/uQ,CAAS,EAAE,cAAgB2xC,GAAW,CACxD5hB,GAAc4hB,CAAM,IAIxB,KAAK,kBAAkB,KAAK,aAAaA,CAAM,CAAC,EAChD,KAAK,cAAc,GACpB,CACH,CAEO,2BAA4B,CACjC,OAAOlT,GAAkB,cAC3B,CAEA,MAAa,iBAAiB7I,EAAkB,CACxC,MAAC,SAAAgc,CAAY,OACnB,IAAIpU,EAAYiO,GAAW,OAAS,GAAK,KAAO,EAC5CiN,EAAc,EAElB,MAAM62L,EAAWvvO,EAAU,KACrB,CAAC,MAAOguQ,CAAA,EAAsB,KAAK,eAAep4O,CAAI,EAE5D,GADc8iB,EAAAs1N,EACXA,EACD,GAAGp4O,IAAS,MAAO,CACjB,MAAM88B,EAAU,MAAM,KAAK,SAAS,eAAe,iBAAiB68K,CAAQ,EACtE91N,EAAQi5C,EAAQ,UAAW/gB,GAAWD,GAAeC,EAAQC,CAAQ,GAAKo8N,CAAkB,EAC5FC,EAAY,KAAK,IAAI,EAAGx0P,EAAQ+jB,CAAS,EAC/CA,EAAY/jB,EAAQw0P,EACpBv1N,EAAchH,GAAeghB,EAAQu7M,CAAS,EAAGr8N,CAAQ,EAAI,OAE/C8G,EAAAs1N,EAIlB,OAAO,KAAK,SAAS,aAAa,eAAe,WAAW,CAC1D,YAAAt1N,EACA,MAAOlb,EACP,SAAA+xM,EACA,aAAc,GACf,CACH,CAEO,aAAa59L,EAAqB,CACvC,OAAOA,EAAO,WAChB,CAEO,wBAAwBp9B,EAAsB,CAC5C,OAACA,EAAQ,QAAQ,MAC1B,CAEO,qBAAqBA,EAAsB,CAChD,OAAOvU,EAAU,SAAS,eAAe,aAAauU,EAAQ,QAAQ,OAAO,WAAYA,EAAQ,QAAQ,SAAS,SAAU,EAC9H,CACF,CAoBA,MAAMy6P,GAA+B,OAU9B,MAAMC,EAAkB,CAAxB,cACE,oBAAiB,SAAS,eAAe,oBAAoB,EAE5D,SAAMtuO,GAAO,UAAWyF,GAAS,IAAMA,GAAS,MAAQA,GAAS,KAAOA,GAAS,KAAK,EAK9F,KAAO,QAA8E,CACnF,KAAM,SAAS,eAAe,cAAc,EAC5C,oBAAqB,KACrB,UAAW,SAAS,eAAe,mBAAmB,GAExD,KAAQ,gBAEJ,GAGI,4BAA2C,IAKnD,KAAQ,gBAAkB,GAuB1B,KAAO,IAAmC,GAyf1C,KAAO,YAAc,IAAM,CACnB,MAAC,SAAAmpM,CAAY,OACd,QAAK,KAAK,IAAIA,CAAQ,EAC3B,KAAK,GAAG,QAER,KAAK,gCAAgC,EACrC,KAAK,8BAAgC,OACrC,KAAK,qBAAuB,OAEtB,MAAA7jO,EAAU,KAAK,GAAG,cAAc,EAEtC,OAAIwjO,GAAa,IAAIK,CAAQ,GAC3B,QAAQ,IAAI,CACV,KAAK,SAAS,eAAe,UAAUA,CAAQ,EAC/C,KAAK,SAAS,WAAW,aAAa,EACtC7jO,EAAQ,KAAK,CAAC,CAAC,cAAA6V,CAAmB,IAAAA,CAAa,EAAE,MAAM,IAAM,EAAE,CAChE,GAAE,KAAK,CAAC,CAACqH,EAAQ43B,CAAS,IAAM,CAC/B,GAAmC53B,GAAQ,IAAM,wBAA0B,KAAK,WAAa2mN,EAC3F,OAGI,MAAA2/B,GAAgB1uN,EAAU,wBAA0B,MAAQ,IAC5D+wL,EAAiB,KAAK,gBAAgBhC,CAAQ,EACpD,IAAI4/B,EAAc59B,EAAe,iBAAmB,CAACy9B,IAClDpmP,EAA6C,aAAe,EAE3DwmP,EAAW,GAEf,KAAK,qBAAuB,IAAM,CAGhC,GAFAD,EAAc,KAAK,MAEhBC,EACD,OAGSA,EAAA,GAGT,KAAK,SAAS,eAAe,mBAAmB7/B,CAAQ,EAClD,MAAM,IAAM,EAAqC,EACxD,KAAM8/B,GAAoB,CACzB,GAAG,KAAK,WAAa9/B,GAAY,KAAK,gBAAgBA,CAAQ,IAAMgC,EAClE,OAGF,MAAMhyO,EAAS8vQ,EAAkBA,EAAgB,cAAc,OAAS,EACxE,GAAG9vQ,EAAQ,CACT,KAAK,sBAAsBgyO,CAAc,EACzCA,EAAe,oBAAsB,CACnC,EAAG,kBACH,gBAAA89B,CAAA,EAGF,MAAMC,EAAkB/9B,EAAe,gBAEjCg+B,EAAKjrQ,EAAK,WAAY,CAAC/E,CAAM,CAAC,EACjCgwQ,EAAA,UAAU,IAAI,SAAS,EAC1B,MAAMpsQ,EAAImB,EAAK,8BAA+B,CAACirQ,CAAE,CAAC,EAClCD,EAAA,MAAM,gBAAgBnsQ,CAAC,EACvCmsQ,EAAgB,SAAS,gBAAgBhrQ,EAAK,gCAAgC,CAAC,CACjF,CAEA,KAAK,sBAAsBitO,EAAgB,CAAC,CAAChyO,CAAM,EACpD,EAAE,QAAQ,IAAM,CACJ6vQ,EAAA,GACZ,GAGH,KAAK,8BAAgCtrF,GAAY,KAAK,qBAAsB,IAAM,CAC1E,MAAA7mK,EAAc,KAAK,MAAQkyP,EACjC,OAAOD,EAAejyP,GACrB,EAAK,EACT,EAGIvR,CAAA,EAuWT,KAAQ,oBAAsB,IAAM,CAOlC,GANG,CAAC,KAAK,GAAG,2BAIZ,KAAK,yBAAyB,EAE3B,KAAK,WAAaolJ,IAAe,OAEpC,MAAMw8G,EAAW,KAAK,SAChBpuO,EAAQouO,EAAS,kBAEjB/7P,EAAQ+7P,EAAS,cAAc,cAC/B78K,EAAS68K,EAAS,cAAc,mBAChCkC,EAAc,CAAC,CAAC/+K,EAAO,kBAC7B,GAAGvxD,GAAS,GAAI,CACXswO,GACD,KAAK,0BAA0B,EAGjC,eACQA,GAAe,CAAC,KAAK,GAAG,WAAW,UAAU,OAAQ,OAEzDj+P,EAAA,UAAU,IAAI,eAAe,EAE7B,MAAAuJ,EAAU,IAAIsoB,GAAe,CACjC,KAAM,WACN,YAAa,GACb,sBAAuB,GACxB,EAEOtoB,EAAA,UAAU,UAAU,IAAI,MAAM,EAEjC,cAAS,gBAAgB,mBAAmB,OAAW,OAAW,QAAQ,EAAE,KAAM4tL,GAAa,CAClG,IAAI3/K,EAAQ,GACZ,MAAM0mP,EAAqB,IAAM,CAC5B1mP,GACDjO,EAAQ,UAAU,UAAU,OAAO,OAAQ,CAACu8N,EAAe,KAAK,iBAAiB,EAGnF,KAAK,qBAAqB,EAAI,GAG1BA,EAAiB,IAAIvvM,GAAe,CACxC,WAAY,aACZ,sBAAuB,CACrB,WAAY,GACZ,IAAK,EACP,EACA,WAAY,GACZ,mBAAA2nO,EACA,SAAU,KAAK,SACf,WAAY,OACb,EAED,KAAK,aAAe,IAAM,CAClB,MAAA34N,EAAYrL,GAAW,OAAS,GAAK,EAC3BnW,GAAYozK,EAAS,OAAO,EAAG5xJ,CAAS,EAAG,KAAK,uBAAuB,EAE/E,KAAMntC,GAAQ,CAChBA,EAAA,QAAS5J,GAAW,CACtBs3O,EAAe,IAAIt3O,CAAM,EAC1B,EACF,EAEG2oM,EAAS,SACX,KAAK,aAAe,OACtB,EAGF,KAAK,aAAa,EAEb,oBAAiB,MAAM3oM,GAAW,CAClC,GAAAA,EAAO,YACR,OAGF,MAAM8J,EAAO,MAAM,KAAK,wBAAwB9J,CAAM,EAChD+mE,EAAQuwK,EAAe,IAAIt3O,CAAM,EACpC,CAAC+mE,GAASj9D,EAAMwtO,EAAe,IAAIt3O,CAAM,EACpC+mE,GAAS,CAACj9D,GAAMwtO,EAAe,OAAOt3O,CAAM,GAGtD,MAAMskC,EAAOgzM,EAAe,KACvBhzM,EAAA,UAAU,IAAI,cAAc,EAC5B,0BAAqB,CAAC,KAAAA,CAAA,CAAK,EACxBvpB,EAAA,QAAQ,OAAOupB,CAAI,EAEnBtb,EAAA,GACW0mP,GAAA,CACpB,EAEMh/K,EAAA,OAAO31E,EAAQ,SAAS,GAGzB,6BAA0B,MAAM/a,GAAmB,CACzD,KAAM,CAAC81I,EAAWlkG,CAAM,EAAI,MAAM,QAAQ,IAAI,CAC5C,KAAK,SAAS,gBAAgB,UAAU5xC,CAAM,EAC9C,KAAK,SAAS,mBAAmB,cAAcA,CAAM,EACtD,EAED,OAAO81I,GAAa,CAAClkG,CAAA,CACvB,CAvgCO,OAAQ,CACP,MAAAxxC,EAAW,KAAK,SAAWuvQ,GAAmB,EAE/C,iBAAc,IAAI/E,GAAmBxqQ,CAAQ,EAClD,KAAK,sBAAwBsP,KAE7B,KAAK,QAAQ,oBAAsB,KAAK,QAAQ,KAAK,cAErD,KAAK,mBAAqBi5B,GAAS,KAAK,oBAAqB,IAAK,GAAO,EAAI,EAE7E,MAAMinO,EAAa,KAAK,WAAa,SAAS,cAAc,KAAK,EACtDA,EAAA,UAAU,IAAI,0BAA0B,EACxCA,EAAA,OAAO,KAAK,QAAQ,SAAS,GAEX,KAAK,qBAAuB,SAAS,cAAc,KAAK,GAChE,UAAU,IAAI,cAAc,EAE5C,oBAAiB,IACjB,kBAAe,SAAS,cAAc,KAAK,EAC3C,kBAAa,UAAU,IAAI,eAAe,EAC/C,KAAK,eAAe,cAAc,cAAc,OAAO,KAAK,YAAY,EAMrEj+O,IACcwqM,GAAA,CACb,QAAS,KAAK,QAAQ,UACtB,QAAUpxL,GAAU,CACZ,MAAAmgI,EAAStyD,EAAU,SACzBA,EAAU7tE,EAAQ,EAAImgI,EAAS,EAAIA,EAAS,CAAC,CAC/C,EACA,kBAAmB,IACV,CAAC,KAAK,QACf,CACD,EAGE,yBAAsB,IAAIzqK,GAAK,YAAY,CAC9C,IAAK,sBACN,EAESR,EAAA,iBAAiB,iBAAkB,MAAMmP,GAAc,CAC/D,GAAGA,EACD,OAGwB,MAAM,KAAK,SAAS,eAAe,oBAAoB,KAAK,QAAQ,GAE5FwpG,EAAUtzE,GAAW,KAAK,gBAAgByrH,EAAa,EAAE,IAAI,EAAG,EAAK,CACvE,CACD,EAES9wJ,EAAA,iBAAiB,gBAAiB,IAAM,CAChD,MAAM4vQ,EAAe1gC,GAAa,IAAI,KAAK,QAAQ,EAEnD3uO,GAAgB,SAAS,EAAE,KAAK,MAAMoL,GAAU,CAC9C,KAAK,GAAG,yBAA2B,GACnC,KAAK,mBAAqB,OAUvBikQ,IACD,KAAK,GAAG,QACR,KAAK,YAAY,GAGnB,KAAK,cAAcjkQ,CAAK,EACzB,EACF,EAED,KAAK,YAAYmlJ,EAAa,EAC9B,KAAK,UAAU,CACb,GAAIA,GACJ,MAAO,GACP,QAASA,EAAA,CACV,EAED,MAAM++G,EAAoB,IAAI/gM,GAAY,KAAK,QAAQ,mBAAmB,EAC/D6gM,EAAA,QAAQ,KAAK,QAAQ,mBAAmB,EACnD,MAAMh3J,EAAY,KAAK,UAAY5+B,GAAe,KAAK,QAAQ,KAAM,KAAK,QAAQ,UAAW,MAAMl4C,EAAImpI,IAAe,CAKpH,MAAM8kG,EAAMjuO,EAIZ,GAHKA,EAAA,CAACmpI,EAAW,QAAQ,UAAYla,GAGlC,EADuB,KAAK,WAAa,IAAMo+E,GAAa,IAAIrtM,CAAE,GAAK,MAAM,KAAK,SAAS,eAAe,oBAAoBA,CAAE,GAEjI,OAAAw8D,GAAe,SAAS,EACjB,GAGT,MAAM0xK,EAAc,KAAK,SAoBzB,GAnBIn+O,KACCk+O,EACG,KAAK,wBACP,KAAK,sBAAwB,CAC3B,KAAM,UACN,MAAO,IAAM,CACXn3J,EAAU,CAAC,EACX,KAAK,sBAAwB,MAC/B,GAGF9mF,GAAwB,YAAY,EAAG,EAAG,KAAK,qBAAqB,GAE9D,KAAK,wBACWA,GAAA,WAAW,KAAK,qBAAqB,EAC7D,KAAK,sBAAwB,SAI9Bk+O,IAAgBluO,EAAI,OAElB,SAAIA,CAAE,EAAE,MAAM,EACb,MAAAn2B,EAAU,KAAK,wBAAwBm2B,CAAE,EAAE,KAAK,CAAC,CAAC,OAAAtd,EAAQ,cAAAhD,KAAmB,CACjF,GAAGgD,EACM,OAAAhD,CACT,CACD,EAED,GAAGwuP,IAAgB,GACV,OAAArkQ,CACT,EACC,IAAM,CACG,UAAA81N,KAAY,KAAK,IACtB,CAACA,IAAa,KAAK,UACf,SAAIA,CAAQ,EAAE,MAAM,CAE7B,EACC,OAAWquC,CAAiB,EAE3B,IAAAG,EACcx4O,GAAA,CAChB,QAAS,CAAC,CACR,KAAM,OACN,KAAM,aACN,QAAS,IAAM,CACb,KAAK,SAAS,eAAe,UAAUw4O,CAAa,EAAE,KAAMpnP,GAAW,CAC/D,MAAAyQ,EAAM+9K,GAAe,UAAUk4B,EAAgB,EACrDj2M,EAAI,cAAczQ,CAAM,EACxByQ,EAAI,KAAK,EACV,CACH,EACA,OAAQ,IAAM22O,IAAkBl/G,EAAA,EAC/B,CACD,KAAM,OACN,KAAM,gBACN,QAAS,IAAM,CACEsmD,GAAA,UAAU85B,EAAiB,EAAE,KAAK,CACnD,EACA,OAAQ,IAAM8+B,IAAkBl/G,EAAA,EAC/B,CACD,KAAM,YACN,KAAM,gBACN,QAAS,IAAM,CACR,cAAS,eAAe,iBAAiBk/G,CAAa,CAC7D,EACA,OAAQ,SAAW,CAAC,EAAE,MAAM,KAAK,SAAS,eAAe,qBAAqBA,CAAa,GAAG,aAC7F,CACD,KAAM,SACN,UAAW,SACX,KAAM,SACN,QAAS,IAAM,CACb1gC,GAAiB,aAAa0gC,CAAa,CAC7C,EACA,OAAQ,IAAMA,IAAkBl/G,EAAA,CACjC,EACD,SAAU,KAAK,QAAQ,KACvB,YAAcxkJ,GAAMgZ,EAAgBhZ,EAAE,OAAQ,0BAA0B,EACxE,OAAQ,CAACA,EAAG+Y,IAAW,CACL2qP,EAAA,CAAC3qP,EAAO,QAAQ,QAClC,EACD,EAED9kB,GAAgB,SAAS,EAAE,KAAMoL,IAEJ0oD,GAAA,kBAAkB1oD,EAAM,cAAc,EACtC0oD,GAAA,iBAAiB,iBAAmBjH,GAAW,CACxE,KAAK,SAAS,gBAAgB,YAAY,iBAAkBA,CAAM,EACnE,EAEM,KAAK,cAAczhD,CAAK,EAChC,EAiBUlK,GAAA,iBAAiB,SAAU,IAAM,CAC1C,KAAK,yBAAyB,EAC/B,EAEI,oBAAe,OAAOkuQ,CAAU,EAErC,WAAW,IAAM,CACf73P,GAAa,kBAAkB,GAC9B,GAAG,EAEO+X,GAAA,SAAW7vB,EAAU,SAAWG,EAC7C2gB,GAAmB,UAAU3gB,CAAQ,EACrCi3M,GAAe,UAAUj3M,CAAQ,EACjC21E,GAAgB,UAAU31E,CAAQ,EAClCwkJ,GAAqB,UAAUxkJ,CAAQ,EACvC6mP,GAAgB,UAAU7mP,CAAQ,EAClCgkC,GAAa,UAAUhkC,CAAQ,EAC5B2vJ,IAA0BrG,GAAoB,UAAUtpJ,CAAQ,EACnE,IAAIygC,KAA4B,UAAUzgC,EAAU,KAAK,eAAgBi3M,GAAe,WAAW,EAInG,KAAK,GAAK,KAAK,IAAI,KAAK,QAAQ,CAGlC,CAEQ,gBAAiB,CACvB,YAAK,eAAe,cAAc,cAAc,kBAAkB,MAAM,KAAK,oBAAoB,EAC1FK,GAAY,CACjB,SAAU,SAAS,cAAc,gCAAgC,EACjE,cAAe,KAAK,eACpB,cAAe,IAAM,KAAK,GAAG,WAAW,UACxC,cAAe,KAAK,WACpB,QAAS,GACT,eAAiB7tM,GAAa,CAC5B,KAAK,kBAAoBA,CAC3B,EACD,CACH,CAEQ,eAAgB,CACtB,KAAK,eAAiB8Z,GAAO,IAAM,KAAK,iBAAkB,KAAK,oBAAoB,CACrF,CAEA,IAAW,UAAW,CACb,YAAK,GAAG,WAAW,IAC5B,CAEO,YAAY6rN,EAAkB,CACnC,KAAK,SAAWA,CAClB,CAEA,MAAa,wBAAwBA,EAAkB,CACrD,YAAK,YAAYA,CAAQ,EAClB,KAAK,aACd,CAEQ,eAAgB,CACtBvvO,EAAU,iBAAiB,eAAgB,CAAC,CAAC,OAAA2xC,KAAY,CACnDA,GAIJ,KAAK,sBAAsB,EAC5B,EAES3xC,EAAA,iBAAiB,gBAAiB,MAAM6wJ,GAAW,CACxD,GAAAA,EAAO,GAAK,EAAG,CAChB,MAAMnyH,EAAgB,KAAK,GAAG,iBAAiBmyH,EAAO,EAAE,EACxD,GAAG,CAACnyH,EACF,OAGF,KAAK,mBAAmB,CACtB,OAAQ,MAAM,KAAK,SAAS,eAAe,cAAcmyH,EAAO,EAAE,EAClE,cAAAnyH,CAAA,CACD,OAEI,0BAAqBmyH,EAAO,EAAE,CACrC,CACD,EAES7wJ,EAAA,iBAAiB,kBAAoBsG,GAAW,CACnD,sBAAiBA,EAAO,SAAU,GACxC,EAED69B,GAAa,iBAAiB,eAAgB,CAAC,CAAC,OAAApkC,EAAQ,SAAAK,EAAU,QAAAkX,KAAa,CACvE,MAAAxX,EAAqD,CAAC,OAAAC,EAAQ,SAAUuX,GAAWtX,EAAU,KAAOI,EAAW,QAE3G,UAAAmU,KAAW,KAAK,mBAAoB,CAC5C,MAAM07P,EAAkB,CAAC17P,EAAQ,QAAQ,UAAY,OAC/C27P,EAAgB37P,EAAQ,QAAQ,OAAO,SAAS,EAClD4vB,GAAa,WAAW,CAAC,OAAQ+rO,EAAe,SAAUD,GAAkBnwQ,CAAO,GAChF,qBAAgByU,EAAS,EAAK,CAEvC,CAEiB,MAAM,KAAK,SAAS,iBAAiB,sDAAsDxU,CAAM,IAAI,CAAC,EAC9G,QAASwU,GAAY,CAC5B,MAAM07P,EAAkB,CAAC17P,EAAQ,QAAQ,UAAY,OAClD4vB,GAAa,WAAW,CAAC,OAAApkC,EAAQ,SAAUkwQ,CAAe,EAAGnwQ,CAAO,GAChE,qBAAgByU,EAAS,EAAI,CACpC,CACD,EAEF,EAESvU,EAAA,iBAAiB,gBAAiB,MAAM4oB,GAAW,CAC3D,GAAGsmN,GAAa,IAAItmN,EAAO,EAAE,EAC3B,OAGF,GAAG,CAAC,KAAK,gBAAgBA,EAAO,EAAE,EAAG,CACnC,KAAK,UAAUA,CAAM,EACrB,MACF,CAEA,MAAMjmB,EAAW,KAAK,gBAAgBimB,EAAO,EAAE,EAC/CnU,GAAa9R,EAAS,MAAOjC,GAAckoB,EAAO,KAAK,CAAC,EACzD,EAES5oB,EAAA,iBAAiB,gBAAkB4oB,GAAW,CACtD,MAAMjmB,EAAW,KAAK,gBAAgBimB,EAAO,EAAE,EAC3CjmB,IAIJA,EAAS,UAAU,SACnBA,EAAS,KAAK,SAEd,KAAK,IAAIimB,EAAO,EAAE,EAAE,QAAQ,EACrB,YAAK,IAAIA,EAAO,EAAE,EAClB,YAAK,gBAAgBA,EAAO,EAAE,EAErC,KAAK,sBAAsB,EAExB,KAAK,WAAaA,EAAO,IACrB,eAAU,EAAG,EAAK,EACzB,CACD,EAES5oB,EAAA,iBAAiB,eAAgB,MAAMyxE,GAAU,CACzDA,EAAQA,EAAM,QACdz8D,GAAiBy8D,EAAO6/J,EAAiB,EAEnC,MAAA6+B,EAAoB,KAAK,QAAQ,KACjCt/P,EAAI,MAAM,QAAQ,IAAI4gE,EAAM,IAAI,MAAM89J,GAAa,CACvD,KAAM,CAAC39L,EAAUhpB,CAAM,EAAI,MAAM,QAAQ,IAAI,CAC3C,KAAK,SAAS,eAAe,4BAA4B2mN,CAAQ,EACjE,KAAK,SAAS,eAAe,UAAUA,CAAQ,EAChD,EAEM,OAAC,SAAA39L,EAAU,OAAAhpB,EACnB,EAAC,EAEI6oD,EAAA,QAAQ,CAAC89J,EAAUlsO,IAAQ,CAC/B,KAAM,CAAC,SAAAuuC,EAAU,OAAAhpB,CAAM,EAAI/X,EAAExN,CAAG,EAC1B+sQ,EAAiB,KAAK,gBAAgB7gC,CAAQ,EAEpD,KAAK,IAAIA,CAAQ,EAAE,YAAY39L,CAAQ,EAEvC1M,GAAuBkrO,EAAe,KAAMD,EAAmBvnP,EAAO,OAAO,EAC7Esc,GAAuBkrO,EAAe,UAAW,KAAK,QAAQ,UAAWxnP,EAAO,OAAO,EACxF,EAMF,EAES5oB,EAAA,iBAAiB,gBAAkB4oB,GAAW,CACtD,MAAM2oN,EAAiB,KAAK,gBAAgB3oN,EAAO,EAAE,EAChD,eAAU2oN,EAAe,IAAI,EACnC,CACH,CAEO,aAAarkM,EAAiB,CACnC,OAAOA,EAAS,QAAU,sBAC5B,CAEO,gBAAgBA,EAAiB,CACtC,OAAOA,EAAS,QAAU,eAC5B,CAEO,sBAAsBq5D,EAAqBr5D,EAAiB,CAC1Dq5D,EAAA,UAAU,OAAO,SAAUr5D,CAAM,EAEXq5D,EAAO,iBAA6C,wBAAwB,EACpF,QAASy1E,GAAwB,CAChCA,EAAA,UAAY,KAAK,aAAa9uI,CAAM,EACzD,EAEDt1B,GAAsB2uF,EAAQ,KAAK,gBAAgBr5D,CAAM,CAAC,CAC5D,CAEO,gBAAgBq5D,EAAqBr5D,EAAiB,CAC3D,MAAM1I,EAAO+hE,EAAe,UACvB,2BAAsBA,EAAQr5D,CAAM,EACzCq5D,EAAO,UAAU,OAAO,gBAAiB,KAAK,UAAU,SAAWA,EAAO,QAAQ,OAAO,SAAS,GAAK,CAACA,EAAO,QAAQ,QAAQ,EAC5Hr5D,EACI,wBAAmB,IAAIq5D,CAAM,EAE7B,wBAAmB,OAAOA,CAAM,EAGpC/hE,GAAK,UACFA,EAAA,SAAS,UAAU0I,CAAM,CAEjC,CAEA,MAAc,cAAcvhC,EAAc,CACxC,KAAK,sBAAsB,QACrB,MAAAjK,EAAa,KAAK,sBAAsB,IAAI,EAC5C2uQ,EAAa1kQ,EAAM,WACnB2kQ,EAAcD,EAAW,OAASnhC,GAAa,KAGrD,KAAK,iBAAiB,EACjB,oBACH,KAAK,kBACL,OAEI,MAAAqhC,EAAchwC,GAA8B,CAChD,UAAU33M,KAAU23M,EAClB,KAAK,UAAU33M,CAAM,CACvB,EAGE,IAAA4nP,EACDF,EACDC,EAAWF,CAAU,EAErBG,EAAoB,KAAK,SAAS,eAAe,mBAAmB,KAAKD,CAAU,EAGrF,KAAK,oBAAsB,GACrB,MAAA/C,EAAqB,KAAK,GAAG,cAAc,EAC3ClnO,EAAIP,GAAkBrkC,CAAU,EAClC,IACF,MAAM4kC,EAAEknO,CAAkB,OACf,CAEb,CAGI8C,GACG,eAAU,EAAG,EAAK,EAGJE,GAAA,MAAMlqO,EAAEkqO,CAAiB,EAG9C,KAAK,cAAc,EACnB,KAAK,oBAAsB,OAE3B,KAAK,SAAW,GACX,eAAU,EAAG,EAAK,EAEnB,KAAK,kBACP,KAAK,cAAc,EACnB,KAAK,gBAAkB,IAGzBF,GAAe,KAAK,oBAAsB,MAAMhqO,EAAE,KAAK,kBAAkB,EAEpE,cAAS,wBAAwB,4BAEtC,MAAO,MAAMA,EAAEknO,CAAkB,GAAG,cAAc,MAAMhsP,EAAI,EACvD,cAAS,mBAAmB,mBACnC,CA6FA,MAAc,qBAAqB+tN,EAAkB,CAKnD,MAAMkhC,EAAa,KAAK,gBAAgBlhC,CAAQ,GAAG,OACnD,GAAG,CAACkhC,EACF,OAGI,MAAC,mBAAAC,EAAoB,YAAAC,CAAW,EAAI,MAAM,KAAK,SAAS,eAAe,qBAAqBphC,CAAQ,EAE1GkhC,EAAW,UAAU,OAAO,aAAc,CAACC,CAAkB,EACvD,MAAAxxO,EAAQqwM,IAAaz+E,GAAgB4/G,EAAqBC,EAChE9pH,GAAgB4pH,EAAYvxO,EAAQ,GAAKA,EAAQ,EAAE,CACrD,CAEQ,uBAAwB,CACpB,UAAAqwM,KAAY,KAAK,gBACpB,0BAAqB,CAACA,CAAQ,CAEvC,CAEO,EAAE3mN,EAAuD,CACxD,MAAAmoN,EAAK,KAAK,iBACVjR,EAAK,KAAK,IAAIl3M,EAAO,EAAE,EAAI,IAAIulP,GAAMvlP,EAAO,EAAE,EAC9Cm8B,EAAa+6K,EAAG,mBAAmBiR,EAAInoN,CAAM,EAC9C,iCAAqB,CAAC,KAAMmoN,EAAI,QAAS,KAAM,YAAa,GAAK,EAE/D,CAAC,GAAAA,EAAI,GAAAjR,EAAI,WAAA/6K,EAClB,CAEQ,sBAAsBwsL,EAAgC,CAC5D,GAAGA,EAAe,gBAAiB,OAEnC,MAAMq/B,EAA2Br/B,EAAe,yBAA2B,SAAS,cAAc,KAAK,EAC9Eq/B,EAAA,UAAU,IAAI,qCAAqC,EAC5E,MAAMtB,EAAqD/9B,EAAe,gBAAkB,IAAI94M,GAAI,CAClG,MAAO,GACP,SAAU,GACV,UAAW,SAAW,CACpB,MAAM3U,EAAOytN,EAAe,oBACzBztN,EAAK,IAAM,mBACZ+L,GAAa,YAAYqtE,GAAyB,CAChD,eAAgB,CACd,GAAGp5E,EAAK,gBACR,cAAe,CAAC,EAChB,EAAG,kCACH,UAAWytN,EAAe,EAC5B,EACA,SAAU,GACX,CAEL,EACA,YAAa,CACX,QAAS,CAAC,CACR,KAAM,OACN,KAAM,mBACN,QAAS,IAAM,CACb,KAAK,SAAS,eAAe,oBAAoBA,EAAe,EAAE,EAAE,KAAK,IAAM,CAC1E,KAAK,WAAaA,EAAe,IAClC,KAAK,uBAAuB,CAC9B,CACD,CACH,EACA,OAAQ,IAAMA,EAAe,qBAAqB,IAAM,kBACzD,CACH,EACA,KAAM,OACP,EACe+9B,EAAA,UAAU,UAAU,IAAI,2BAA2B,EAE1CsB,EAAA,OAAOtB,EAAgB,SAAS,CAC3D,CAEQ,sBAAsB/9B,EAAgCt1N,EAAmB,CAC/E,GAAG,CAACA,GAAY,CAACs1N,EAAe,gBAC9B,OAGF,IAAIs/B,EAAY,GACb50P,IACW40P,EAAA,CAAC,CAACt/B,EAAe,yBAAyB,cAClDs/B,GACat/B,EAAA,WAAW,QAAQA,EAAe,wBAAwB,GAI/Dx1N,GAAA,CACZ,QAASw1N,EAAe,yBACxB,UAAW,aACX,SAAU,IACV,SAAAt1N,EACA,QAAS40P,EAAY,EAAI,EACzB,gBAAiB50P,EAAW,OAAY,IAAM,CAC5Cs1N,EAAe,yBAAyB,SACxCA,EAAe,gBACbA,EAAe,yBACfA,EAAe,oBAAsB,MACzC,EACD,CACH,CAEQ,UAAU3oN,EAA0D,CACpE,MAAC,GAAAiZ,CAAM,EAAAjZ,EACb,GAAGiZ,IAAOyvM,GACR,OAGI,MAAA6+B,EAAoB,KAAK,QAAQ,KACjCC,EAAiB,KAAK,gBAAgBvuO,CAAE,EAC9C,GAAGuuO,EAAgB,CACjBlrO,GAAuBkrO,EAAe,KAAMD,EAAmBvnP,EAAO,OAAO,EAC7Esc,GAAuBkrO,EAAe,UAAW,KAAK,QAAQ,UAAWxnP,EAAO,OAAO,EACvF,MACF,CAEM,MAAAk/C,EAAU,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,0BAA0B,EAC1C,MAAAjnE,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,+BAA+B,EAC5C,MAAAiwQ,EAAY,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,YAAY,EACjCjvO,IAAOivH,GAAyBggH,EAAA,OAAO,KAAK,oBAAoB,OAAO,EACrEr8P,GAAaq8P,EAAWpwQ,GAAckoB,EAAO,KAAK,CAAC,EACxD,MAAM6nP,EAAa/wK,GAAY,MAAO,GAAI,SAAS,EAC7Cj8F,EAAI,SAAS,cAAc,GAAG,EAC/B5C,EAAA,OAAOiwQ,EAAWL,EAAYhtQ,CAAC,EACpC+wB,GAAOszC,CAAO,EACdA,EAAQ,OAAOjnE,CAAI,EAEXinE,EAAA,QAAQ,SAAW,GAAKjmC,EAETqD,GAAA4iC,EAASqoM,EAAmBvnP,EAAO,OAAO,EAGjE,KAAM,CAAC,GAAAmoN,EAAI,WAAAhsL,CAAA,EAAc,KAAK,EAAEn8B,CAAM,EACtCm8B,EAAW,UAAU,UAAU,IAAI,WAAY,gBAAgB,EAKzD,MAAA/tB,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,cAAc,EAE1B,MAAAy5D,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,iBAAiB,EAEtCz5D,EAAI,OAAO+5M,CAAE,EACFhsL,EAAA,OAAO/tB,EAAKy5D,CAAM,EAI7B,MAAMlmE,EAAMw6B,EAAW,UAEvB7f,GAAuB6f,EAAW,UAAW,KAAK,QAAQ,UAAWn8B,EAAO,OAAO,EAE9E,qBAAgBiZ,CAAE,EAAI,CACzB,GAAAA,EACA,KAAMimC,EACN,UAAWv9C,EACX,OAAQkmP,EACR,MAAOK,EACP,WAAA/rN,CAAA,EAGF,KAAK,sBAAsB,CAC7B,CAEQ,0BAA2B,CAC3B,MAAAA,EAAa,KAAK,QAAQ,oBAAoB,kBAC9ChvC,EAAmBgvC,EAAW,YAAcA,EAAW,YAAc,sBAAwB,iBACnG,KAAK,oBAAoB,iBAAiB,CAAC,IAAAhvC,CAAI,EACjD,CAEQ,uBAAwB,CAC9B,IAAIrK,EAAU,KAAK,mBACnB,OAAOA,MAAY,KAAK,mBAAqBi7B,GAAM,CAAC,EAAE,KAAK,IAAM,CAC5D,QAAK,qBAAuBj7B,EAC7B,OAIF,MAAM+wD,EADS,OAAO,KAAK,KAAK,eAAe,EAAE,OAC3B,EAChBs0M,EAAa,CAAC,KAAK,QAAQ,oBAAoB,UAAU,SAAS,MAAM,EAE3Et0M,IAASs0M,IACV,KAAK,QAAQ,oBAAoB,UAAU,OAAO,OAAQ,CAACt0M,CAAI,EAC5DA,GAAQ,CAACs0M,GACV,KAAK,sBAAsB,EAG7B,KAAK,eAAe,UAAU,OAAO,cAAet0M,CAAI,GAG1D,KAAK,yBAAyB,EAE9B,KAAK,mBAAqB,OAC3B,EACH,CAEQ,yBAAyB38D,EAK9B,CACD,MAAMgtI,EAAa,oBACbjrI,EAAY,SAAS,cAAc,KAAK,EAC9CA,EAAU,UAAU,IAAIirI,EAAYA,EAAa,IAAMhtI,EAAQ,aAAa,EAEtE,MAAAq2E,EAAS,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI22D,EAAa,SAAS,EACrChsI,GAAAq1E,EAAQr2E,EAAQ,KAAK,EAErB,MAAA64B,EAAW,SAAS,cAAc,KAAK,EACpC,OAAAA,EAAA,UAAU,IAAIm0G,EAAa,WAAW,EAC5ChtI,EAAQ,UACTgB,GAAM63B,EAAU74B,EAAQ,SAAUA,EAAQ,YAAY,EAG9C+B,EAAA,OAAOs0E,EAAQx9C,CAAQ,EAE1B,CAAC,UAAA92B,EAAW,OAAAs0E,EAAQ,SAAAx9C,EAC7B,CAEQ,0BAA2B,CAC9B,QAAK,WAAa24M,GACnB,OAGF,MAAMg8B,EAAW,KAAK,SAChB37P,EAAO27P,EAAS,cACtB,IAAI0D,EAAwB,MAAM,KAAKr/P,EAAK,QAAQ,EAAoB,KAAME,GAAOA,EAAG,QAAQ,oBAAoB,CAAC,EACrH,MAAMy5K,EAAkB,KAAK,GAAG,WAAW,UAAU,QAAU,CAACgiF,EAAS,kBAGzE,GAAGhiF,GAAmB0lF,EACpB,OACF,GAAU,CAAC1lF,EAAiB,CACvB0lF,IACIr/P,EAAA,UAAU,OAAO,kBAAkB,EACxCq/P,EAAqB,OAAO,GAG9B,MACF,CAEA,IAAI5hO,EAAwEhrB,EACzE,GAAC,KAAK,SAyBF,CACLgrB,EAAc,KAAK,yBAAyB,CAC1C,MAAO,yBACP,SAAU,6BACV,cAAehrB,EAAO,SACvB,EAED4sP,EAAuB5hO,EAAY,UAE7B,MAAA7kB,EAAM,SAAS,cAAc,KAAK,EAClCtjB,EAAQ,KACR/F,EAAO,IACI2oK,GAAA,CACf,IAAAt/I,EACA,MAAAtjB,EACA,MAAO/F,EACP,OAAQA,CAAA,CACT,EAED8vQ,EAAqB,QAAQzmP,CAAG,EAE1B,MAAA2F,EAASqJ,GAAO,4CAA6C,CACjE,KAAM,mBACN,KAAM,WACP,EAED3c,EAAiBsT,EAAQ,SAAW,CAC5B,MAAAmJ,EAAM+9K,GAAe,UAAUk4B,EAAgB,EACjDj2M,EAAA,cAAc,MAAM,KAAK,SAAS,eAAe,UAAU,KAAK,QAAQ,CAAC,EAC7EA,EAAI,KAAK,EACV,EAED23O,EAAqB,OAAO9gP,CAAM,CACpC,KA1DmB,CACjBkf,EAAc,KAAK,yBAAyB,CAC1C,MAAO,uCACP,cAAehrB,EAAO,UACvB,EAED4sP,EAAuB5hO,EAAY,UAE7B,MAAA4c,EAAM,SAAS,cAAc,KAAK,EACpCA,EAAA,UAAU,IAAI,gCAAgC,EAE7C,qCAAkC,IAAIxrD,GAAK,YAAY,CAC1D,QAAS4uC,EAAY,SACtB,EAED,QAAQ,IAAI,CACV,KAAK,qBAAqB,EAAK,EAC/BzzB,GAA0BqwC,EAAK,2BAA2B,EAC1D4rE,GAAe,CAChB,GAAE,KAAK,CAAC,CAACq5I,CAAW,IAAM,CACJD,EAAA,UAAU,IAAI,SAAS,EAC5Cr/P,EAAK,UAAU,OAAO,eAAgB,CAAC,CAACs/P,CAAW,EACpD,EAEDD,EAAqB,QAAQhlN,CAAG,EAoClCr6C,EAAK,OAAOq/P,CAAoB,EAC3Br/P,EAAA,UAAU,IAAI,kBAAkB,EACrCA,EAAK,QAAQ,gBAAkByS,CACjC,CAEQ,qBAAqB8sP,EAA8B,CAClD,YAAK,8BAAL,KAAK,4BAAgC,KAAK,SAAS,gBAAgB,YAAY,EAAE,KAAM17P,GAAU,CACtG,MAAMmjB,EAAW,KAAK,gCACtB,GAAGA,EAAU,CACX,IAAI5iB,EAAkBnE,EAEnB4D,EAAM,QACDO,EAAA,0CACNnE,EAAO,CAACtN,EAAK,iBAAkB,CAACkR,EAAM,MAAM,CAAC,CAAC,IAExCO,EAAA,oDACNnE,EAAO,IAGT+mB,EAAS,iBAAiB,CACxB,IAAA5iB,EACA,KAAAnE,CAAA,CACD,CACH,CAEA,OAAGs/P,GACgB,KAAK,SACA,cACjB,UAAU,OAAO,eAAgB,CAAC,CAAC17P,EAAM,MAAM,EAGtD,KAAK,4BAA8B,OAE5BA,EAAM,OACd,EACH,CAEQ,2BAA4B,CAClC,MAAM83P,EAAW,KAAK,SAChB/7P,EAAQ+7P,EAAS,cAAc,cAC/B78K,EAAS68K,EAAS,cAAc,mBAChC/7P,EAAA,UAAU,OAAO,eAAe,EACtCk/E,EAAO,gBAAgB,EACvB,KAAK,aAAe,OACpB,KAAK,eAAiB,MACxB,CA0GA,MAAa,eAAe0gL,EAAmBC,EAAU,KAAK,SAAU,CACnE,IAACA,GAAW,CAACD,EACd,OAGF,GAAGC,EAAS,CACV,MAAM1yO,EAAgB,KAAK,GAAG,iBAAiB0yO,EAAQ,MAAM,EAC1D1yO,GACDA,EAAc,IAAI,OAAO,UAAU,OAAO,eAAe,CAE7D,CAEG0yO,IAAYD,IACJA,EAAA,QAGXC,GAAS,OAAO,EAAK,EACf,MAAA1lQ,EAAUylQ,GAAQ,OAAO,EAAI,EAKnC,GAJGC,IAAY,KAAK,WAClB,KAAK,SAAWD,GAGfA,EAAQ,CACT,MAAMzyO,EAAgB,KAAK,GAAG,iBAAiByyO,EAAO,MAAM,EACzDzyO,GACDA,EAAc,IAAI,OAAO,UAAU,IAAI,eAAe,EAG3CyF,GAAA,UAAUwhI,GAAS,QAAQ,CAC1C,CAEGj6J,GACK,MAAAA,EAGLylQ,GAAU,CAAC,KAAK,qBACjB,KAAK,oBAAsB,CACzB,KAAM,QACN,MAAO,IAAM,CACX,KAAK,oBAAsB,OAC3B,KAAK,eAAe,CACtB,GAGsBt/O,GAAA,SAAS,KAAK,mBAAmB,GACjD,CAACs/O,GAAU,KAAK,sBACAt/O,GAAA,WAAW,KAAK,mBAAmB,EAC3D,KAAK,oBAAsB,QAGvB,MAAA5V,EAAW,CAAC,CAACk1P,EACb/0P,EAAU1Q,EAAU,EAAI,OACzB,QAAG,yBAAyBuQ,EAAUG,CAAO,EAElD,MAAM5P,EAAWC,KACXzJ,EAAW,IACH+Y,GAAA,CACZ,QAAS,KAAK,aAAa,cAC3B,UAAW,mBACX,SAAA/Y,EACA,SAAAiZ,EACA,QAAAG,EACA,gBAAiB,IAAM,CACrB5P,EAAS,QAAQ,CACnB,EACD,EAED8yH,GAA4B9yH,EAAUxJ,CAAQ,EAAE,KAAK,IAAMwJ,EAAS,SAAS,CAC/E,CAEA,MAAa,uBAAuBzM,EAAgB08D,EAAgB40M,EAA+B,CAC9F,GAAAtxQ,IAAWC,EAAU,KAAM,CACtB,MAAAq5B,EAAM+9K,GAAe,OAAOmjB,EAAiB,EAChD99J,IAAS,IAASA,IAAS,QAAa,CAACpjC,EACxBkhM,GAAA,KAAKnjB,GAAgBr3M,EAAQ,EAAI,GAEhDs5B,GAAK,SAAWt5B,GACjBs5B,EAAI,MAAM,EAGC8K,GAAA,QAAQ,CAAC,OAAApkC,CAAA,CAAO,GAG/B,MACF,CAEM,MAAC,SAAAI,CAAY,OACbi/B,EAAUg4K,GAAe,aACzBk6D,EAAUlyO,EAAQA,EAAQ,OAAS,CAAC,EAEpCuS,EAAS,MAAMxxC,EAAS,eAAe,cAAcJ,CAAM,EAEjE,GADuB4xC,GAAU,CAAC,CAACA,EAAO,OAAO,uBAC9B,CACX,MAAAqzN,EAAa7gO,GAAa,MAAM,SAAWpkC,EACjDokC,GAAa6gO,GAAc,CAACqM,EAAsB,UAAY,cAAc,EAAE,CAC5E,KAAMt0L,GAAS,KACf,OAAAh9E,CAAA,CACD,EACD,MACF,CAEI,IAAAwxQ,EACJ,GAAGD,EAAuD,CACxD,GAAGA,aAAmB7E,IAAY6E,EAAQ,SAAWvxQ,GAAU08D,EAAM,CACnE5a,GAAMyvN,EAAQ,SAAS,EACvB,MACF,CAEWC,EAAAn6D,GAAe,UAAUq1D,EAAQ,EAC5C8E,EAAS,KAAK,CAAC,OAAAxxQ,EAAQ,SAAAI,CAAS,GAChC,MACF,CAEWoxQ,EAAA,KAAK,WAAW,IAAIxxQ,CAAM,EACrC,MAAMyxQ,EAAY,KAAK,UAAY,KAAK,WAAaD,EAErD,GADA90M,MAAS,CAAC+0M,GACP/0M,IAAS+0M,EAAW,CAClB/0M,GACD5a,GAAM0vN,EAAS,SAAS,EAG1B,MACF,CAEG,OAAA90M,GAAQ,CAAC80M,IACCA,EAAA,IAAI9E,GAAS,MAAS,EACjC8E,EAAS,KAAK,CAAC,OAAAxxQ,EAAQ,SAAAI,CAAS,GAE3B,gBAAW,IAAIJ,EAAQwxQ,CAAQ,EAC/B,kBAAa,OAAOA,EAAS,SAAS,EAE3CA,EAAS,SAAW,KAAK,SAChBA,EAAA,cAAc,iBAAiB,UAAW,IAAM,CAClD,gBAAW,OAAOxxQ,CAAM,EAC9B,GAGI,KAAK,eAAewxQ,CAAQ,CACrC,CAEO,mBAAmBh9P,EAAsB,CAC9C,MAAMxU,EAASwU,EAAQ,QAAQ,OAAO,SAAS,EACzCwoF,EAAY,CAACxoF,EAAQ,QAAQ,KAAO,OACpCnU,EAAW,CAACmU,EAAQ,QAAQ,UAAY,OAExC64C,EAAS,IAAI,gBACZA,EAAA,IAAI,IAAK,GAAKrtD,CAAM,EACxBg9F,GAAkB3vC,EAAA,IAAI,UAAW,GAAK2vC,CAAS,EAC/C38F,GAAiBgtD,EAAA,IAAI,SAAU,GAAKhtD,CAAQ,EAC/C,MAAMoJ,EAAM,QAAQ4jD,EAAO,UAAU,GAC9B,YAAK5jD,EAAK,QAAQ,CAC3B,CAEO,qBAAqB,CAC1B,KAAA66B,EACA,QAAA9F,EACA,YAAA0uE,EAAc,GACd,WAAA3uE,EAAa,GACb,UAAA4uE,EAAY,IAOX,CACG,IAAAukK,EAEJ,MAAMC,GAAexkK,EAAY/oE,GAAa,aAAeA,GAAa,SAAS,KAAKA,EAAY,EAE9FwtO,EAAyBtsP,GACrBA,EAAuB,QAAQ,qBAAqB,EAGzDgf,EAAA,QAAQ,WAAa,IAAK,CAAC/F,EAC3B+F,EAAA,iBAAiB,YAAc/3B,GAAM,CACxC,GACEA,EAAE,SAAW,GACbqlQ,EAAsBrlQ,EAAE,MAAM,EAE9B,OAGF,KAAK,IAAI,oBAAoB,EAC7B,MAAM+Y,EAAS/Y,EAAE,OACXgR,EAAOugC,GAAUx4B,EAAQy4B,EAAuB,EAEtD,GAAG,CAACxgC,EACF,OAGF,MAAMvd,EAASud,EAAK,QAAQ,OAAO,SAAS,EACtCy/E,EAAY,CAACz/E,EAAK,QAAQ,KAAO,OACjCld,EAAW,CAACkd,EAAK,QAAQ,UAAY,OAExC,GAAAihB,IAAUjhB,CAAI,IAAM,GACrB,OAIF,GADgB,CAAC,CAACA,EAAK,cAAc,WAAW,GAClC,CAAChR,EAAE,UAAY,CAACywF,EAAW,CAClC,4BAAuBh9F,EAAQ,OAAW,EAAK,EACpD,MACF,CAEG,GAAAuM,EAAE,SAAWA,EAAE,QAAS,CACzB,KAAK,mBAAmBgR,CAAI,EAC5BX,GAAYrQ,CAAC,EACb,MACF,CAEGgyB,IAEEmzO,GAAyB,EADRA,IAA0Bn0P,IAEvC,2BAAsBm0P,EAAuB,EAAK,EAGtDn0P,IACI,2BAAsBA,EAAM,EAAI,EACbm0P,EAAAn0P,EACnB,wBAAmB,IAAIA,CAAI,KAKjC,CAACld,GAAY28F,IACd,KAAK,GAAG,WAAW,OAAS14D,GAC5B,KAAK,KAAO,KAAK,IAAIitM,EAAiB,GAEtC,KAAK,eAAe,EAGVogC,EAAA,CACV,OAAA3xQ,EACA,UAAAg9F,EACA,SAAA38F,CAAA,CACD,GACA,CAAC,QAAS,GAAK,EAIbikC,EAAA,iBAAiB,QAAU/3B,GAAM,CACjCA,EAAE,SAAW,GACdqQ,GAAYrQ,CAAC,EAGT,MAAAmX,EAASkuP,EAAsBrlQ,EAAE,MAAM,EACnCmX,GAAA0gB,GAAa,sBAAsB1gB,CAAM,GAClD,CAAC,QAAS,GAAK,EAEfwpF,GACI,iBAAY,OAAO5oE,CAAI,CAEhC,CAEO,eAAevkC,EAOlB,GAAI,CACA,MAAAukC,EAAO,SAAS,cAAc,IAAI,EACxC,OAAAA,EAAK,UAAU,IAAI,YAGhBvkC,EAAQ,KACJukC,EAAA,UAAU,IAAI,cAAc,EAGhCvkC,EAAQ,YACTukC,EAAK,UAAU,IAAI,YAAcvkC,EAAQ,UAAU,EAW9CukC,CACT,CAEO,gBAAgBvkC,EAA6D,CAE3E,OADS,KAAK,eAAeA,CAAO,EAC5B,MAAOoR,GAAkB,CACnCA,GAAK,OAAS,cACV,SAAI,MAAM,yBAA0BA,CAAG,CAC9C,CACD,CACH,CAEQ,wBAAwBygC,EAAmBw+E,EAAwD,CACrG,IAAAw9D,EACE,MAAC,OAAA5tL,EAAQ,MAAAk3K,CAAS,EAAAtlI,EACxB,GAAG,CAACw+E,IAEA8mD,GAAO,IAAM,iBACX,CAACl3K,EAAO,UAAU,GAClBguH,GAAap8E,CAAM,GACnB,CAACpxC,GAAgB,QAAQR,CAAM,KAGlB4tL,EAAA1W,GAGjB9mD,EAAex+E,EAAkB,WAC9Bw+E,GAAa,MAAQx+E,EAAO,aAAa,CAC1C,MAAMigO,EAAkBrxQ,GAAgB,iBAAiBR,EAAQ4xC,EAAO,WAAW,EAChFigO,GAAoBA,EAA2C,QAAQ,IAAM,+BAChEzhJ,EAAAyhJ,EAElB,CAGK,OAAC,YAAAzhJ,EAAa,aAAAw9D,EACvB,CAEA,MAAc,eAAe,CAC3B,OAAAh8I,EACA,YAAakgO,EACb,cAAAnzO,EACA,cAAArtB,EACA,QAAAygQ,EAAU,GACV,UAAAC,EAAY,GACZ,cAAAC,CAAA,EASC,CACD,GAAG,CAACtzO,IACFA,EAAgB,KAAK,GAAG,iBAAiBiT,EAAO,MAAM,EAEnD,CAACjT,GACF,OAIE,MAAC,IAAA8F,CAAO,EAAA9F,EACR,CAAC,OAAA3+B,CAAU,EAAA4xC,EACXy/G,EAAUrhI,GAAc4hB,CAAM,EAE9B,CAAC,SAAUjmC,EAAS,WAAAhK,CAAc,EAAA8pQ,GAAqBhnO,EAAK,uBAAuB,EAEnF,CAAC,aAAAmpJ,EAAc,YAAAx9D,GAAe,KAAK,wBAAwBx+E,EAAQkgO,CAAY,EAE/EI,EAAWF,IAAc,MAAQ,CAACA,EAMrC,GAJgBE,GACjB,KAAK,mBAAmB,CAAC,OAAAtgO,EAAQ,cAAAjT,EAAe,QAAAozO,EAAS,sBAAuBpmQ,EAAQ,EAGvF,CAACykH,GAAe,CAACw9D,EAAmF,CACrGnpJ,EAAI,gBAAgB,kBACpBA,EAAI,aAAa,kBACV,OAAAA,EAAI,OAAO,QAAQ,IAE1B94B,EAAQ,QAAQ,EAChB,MACF,CAGGumQ,GAAY9hJ,IACb3rF,EAAI,OAAO,QAAQ,IAAM,GAAK2rF,EAAY,IAE1BA,EAAY,UAChB,QAAQ,cAClB3rF,EAAI,OAAO,QAAQ,SAAW,GAAKm3C,GAAmBw0C,CAAW,IAIrE,MAAM3lH,EAAe,CAAC,CAAC2lH,GAAezlH,GAAoBylH,CAA8B,EAEvB,CAC3D,IAAA9rD,EACA6tM,EAA8C,GAC9CjpP,EASJ,GARG0kK,IAEQx9D,GAAiC,WAAa,CAACihC,GAAW,CAAC4gH,EAC7D/oP,EAAA,iBACEknG,GAAiC,UAAU,IAAM,4BACnDlnG,EAAA,eAGNA,EAAM,CACP,MAAMpoB,EAAOG,GAAKioB,EAAM,sBAAuB,uBAAyBA,CAAI,EAC5EipP,EAAY,KAAKrxQ,CAAI,CACvB,CAEA,GAAGsvH,GAAe,CAACw9D,GAAgB,CAACnjL,EAAc,CAC1C,MAAA2H,EAAQ0/C,GAAoBs+D,EAAa,EAAI,EAC7CgiJ,EAA0C,QAAI,CAAC,QAAS,MAAO,OAAO,CAAC,EAC1E,GAAAhgQ,IAAUA,EAAM,IAAM,SAAWggQ,EAAW,IAAIhgQ,EAAM,IAAI,GAAI,CAC/D,MAAMjR,EAAOge,GAAgB/M,EAAO,GAAI,EAAE,EAEvC,GAAAjR,EAAK,IAAM,mBACKmjE,EAAA,SAAS,cAAc,KAAK,EAC9BA,EAAA,UAAU,IAAI,uBAAuB,EAEhDlyD,EAAqB,OAAS,SACjBkyD,EAAA,UAAU,IAAI,UAAU,EAGzC6tM,EAAY,KAAKxyP,GAAU,CACzB,MAAOvN,EACP,QAASg+G,EACT,UAAW9rD,EACX,iBAAkB,GAClB,KAAAnjE,CACD,GAAE,KAAK,IAAMmjE,CAAc,CAAC,EAE1B8tM,EAAW,IAAKhgQ,EAAqB,IAAI,GAAG,CACvC,MAAAigQ,EAAWpxQ,GAAK,OAAQ,4BAA4B,EAC1DqjE,EAAe,OAAO+tM,CAAQ,CAChC,CAEJ,CACF,CAGA,GAAGzkF,EAAc,CACT,MAAA9sL,EAAO,SAAS,cAAc,MAAM,EACrCA,EAAA,UAAU,IAAI,QAAQ,EAC3BA,EAAK,OAAOyD,EAAK,OAAO,EAAG,IAAI,EAC/B4tQ,EAAY,QAAQrxQ,CAAI,UAChBd,EAAO,aAAeA,IAAWowH,EAAY,QAAU,CAAEA,EAAuC,OAAQ,CAC1G,MAAAtvH,EAAO,SAAS,cAAc,MAAM,EAGvC,GAFEA,EAAA,UAAU,IAAI,cAAc,EAE9BsvH,EAAY,SAAWnwH,EAAU,KAC7Ba,EAAA,OAAOyD,EAAK,SAAS,CAAC,EAC3B4tQ,EAAY,QAAQrxQ,CAAI,MACnB,CAEC,MAAAyB,EAAIZ,EAAWgR,GAAc,CACjC,OAAQy9G,EAAY,OACpB,cAAe,GAChB,CAAC,EAAE,KAAM57G,IACR1T,EAAK,QAAQ0T,CAAO,EACb1T,GACN2gB,EAAI,EAEP0wP,EAAY,QAAQ5vQ,CAAC,CACvB,CAEAzB,EAAK,OAAO,IAAI,CAElB,CAEA,MAAMyQ,EAAmB,CAAC,CAAC+yD,GAAkB,CAAC,CAAE8rD,GAAiC,QAC3EkiJ,EAAkE,CACtE,UAAW,KAAK,aAAa7tO,EAAI,OAAO,UAAU,SAAS,QAAQ,CAAC,GAGtE,IAAIjgC,EAA4B+tQ,EAC7BjhQ,GAAkB8+G,GAAiC,QACpDmiJ,EAAanhQ,GAAoB,CAC/B,GAAGkhQ,EACH,QAASliJ,EACT,cAAA9+G,EACA,iBAAAC,CAAA,CACD,EACOq8K,EACR2kF,EAAanhQ,GAAoB,CAC/B,GAAGkhQ,EACH,QAAS1kF,CAAA,CACV,EACOx9D,EACRmiJ,EAAanhQ,GAAoB,CAC/B,GAAGkhQ,EACH,QAASliJ,EACT,iBAAA7+G,CAAA,CACD,EAED/M,EAAW,SAAS,yBAGnB+tQ,IACU/tQ,EAAA,MAAM7C,EAAW4wQ,CAAU,GAGrCJ,EAAY,SACbA,EAAc,MAAMxwQ,EAAW,QAAQ,IAAIwwQ,CAAW,CAAC,GAMzD1tO,EAAI,gBAAgB,UAAU,OAAO,uBADxB,EACoD,EACxD,CACD,MAAAjzB,EAAQ,CAAC,GAAG2gQ,EAAa3tQ,CAAQ,EAAE,IAAI,CAACoN,EAAMtO,EAAKsG,IAAQ,CACzD,MAAA9I,EAAO,SAAS,cAAc,MAAM,EACrC,OAAAA,EAAA,UAAU,IAAI,sBAAsB,EAEpCA,EAAA,UAAU,IAAI,+BAA+B,EAE/CwC,IAASsG,EAAI,OAAS,IAClB9I,EAAA,UAAU,IAAI,2BAA2B,EAC9CA,EAAK,IAAM,QAEbA,EAAK,OAAO8Q,CAAmB,EAExB9Q,CAAA,CACR,EACG2jC,EAAA,gBAAgB,gBAAgB,GAAGjzB,CAAK,CAI9C,CACF,CAEA,GAAG4+G,GAAew9D,EAAwD,CAClE,MAAAh7K,EAAOg7K,EAAe,KAAK,IAAIA,EAAa,KAAMx9D,GAAa,MAAQ,CAAC,EAAIA,EAAY,KAC/E/4G,GAAAotB,EAAI,aAAcwyB,GAA8B,IAAI,KAAKrkD,EAAO,GAAI,CAAC,CAAC,CACvF,MAAO6xB,EAAI,aAAa,YAAc,GAEtC94B,EAAQ,QAAQ,CAClB,CAEO,mBAAmB5L,EAAgE,CACxF,OAAO,KAAK,kBAAkBA,CAAO,EAAE,MAAM,IAAM,EAAE,CACvD,CAEA,MAAc,kBAAkB,CAC9B,OAAA6xC,EACA,cAAAjT,EACA,QAAAozO,EAAU,GACV,sBAAAj0C,CAAA,EAMC,CACK,MAAC,IAAAr5L,CAAO,EAAA9F,EACd,GAAG,CAAC8F,EAEF,OAGI,MAAA/a,EAAUskG,GAAap8E,CAAM,EAC7By/G,EAAUrhI,GAAc4hB,CAAM,EAE9B,CAAC,SAAAnlC,EAAU,WAAA9K,CAAA,EAAc8pQ,GAAqBhnO,EAAK,yBAAyB,EAE5E,CAAC,OAAAzkC,CAAU,EAAA4xC,EACXvlC,EAAW,QAAQ,IAAI,CAC3B,KAAK,SAAS,wBAAwB,iBAAiB,CAAC,OAAArM,EAAgB,YAAa,GAAM,SAAU0pB,EAAUkoB,EAAO,GAAK,OAAU,EACpIy/G,EAAiD,OAAvC,KAAK,wBAAwBz/G,CAAM,EAC9CloB,GAAW2nI,EAAU,CAAC,CAACz/G,EAAO,OAAO,OAAS,KAAK,SAAS,eAAe,eAAe5xC,EAAQ,KAAK,QAAQ,EAC/G,KAAK,SAAS,mBAAmB,eAAe4xC,CAAM,EACtD5xC,EAAO,UAAe,IAAC0pB,EAAU,KAAK,SAAS,aAAa,eAAe,oBAAoB1pB,EAAQ,EAAI,EAAE,KAAM+B,GAC9GA,EAAO,OACDA,EAAO,QAEPA,EAAA,OAAO,KAAK,IAAM,CACvB,KAAK,mBAAmB,CAAC,OAAA6vC,EAAQ,cAAAjT,CAAc,GAChD,EAEM,CAAC,MAAO,EAAG,WAAY,EAAK,EAEtC,EAAE,MAAM,MAAuD,EAAI,OACrE,EAEG,IAAC64K,EAASjxK,EAAGs5M,EAAU2yB,EAAgBC,CAAgB,EAAI,MAAM9wQ,EAAW0K,CAAQ,EACxF,MAAMqmQ,EAAWjuO,EAAI,OAAO,UAAU,SAAS,UAAU,GAAK,CAACA,EAAI,OAAO,UAAU,SAAS,WAAW,EAElG,CAAC,MAAOkuO,EAAmB,WAAYC,CAAe,EAAIH,GAAoB,GAE9E,CAAC,aAAA7kF,EAAc,YAAAx9D,GAAe7pF,GAAK,GACrC,IAAAssO,EACD,CAACjlF,GAAgBx9D,GAAeA,EAAY,OAAO,KAAOA,EAAY,SAAWnwH,EAAU,OACzE4yQ,EAAAziJ,GAGrB,MAAMwgJ,EAAc+B,IAAsBthH,EAAU,EAAIz/G,EAAO,cAa/D,GAZG+gO,IAAsB,SACvBH,EAAiB,CAAC,CAAC5B,GAGlBlnP,GAAW,CAAC8oP,IACIA,EAAA,CAACt1K,GAAmBtrD,EAAO,iBAAiB,GAO5DksL,EACG,IACF,MAAMn8N,EAAWm8N,CAAqB,OAC3B,CACX,MACF,CAGI,MAAAjuK,EAAqBkiN,EAAU,EAAIpG,GAErClnO,EAAA,OAAO,UAAU,OAAO,mBAAoB,CAAC+yK,GAAWo7D,IAAoB,QAAa,CAACA,CAAe,EAE1Gp7D,IAAYk7D,IACVl7D,GAAW,CAAC/yK,EAAI,YACbA,EAAA,UAAYxjC,GAAK,UAAW,mBAAmB,EAC/CwjC,EAAA,mBAAmB,OAAOA,EAAI,SAAS,GAG/BzoB,GAAA,CACZ,QAASyoB,EAAI,OACb,UAAW,WACX,SAAU+yK,EACV,SAAU3nJ,EACV,gBAAkB2nJ,EAGb,OAHwB,IAAM,CACjC/yK,EAAI,UAAU,SACd,OAAOA,EAAI,SACR,EACN,GAGcsmO,GAAAtmO,EAAI,WAAY/a,GAAWkoB,EAAO,OAAO,OAAS,eAAiBihO,CAAsB,EAM1G,MAAMC,EAAiBjzB,EACjBkzB,EAAuB,CAAC,CAACtuO,EAAI,YAChCquO,GACDn0O,EAAc,kBAAkB,EAGlC,MAAMq0O,EAAiBR,EACjBS,EAAuB,CAAC,CAACxuO,EAAI,YAChCuuO,GACDr0O,EAAc,kBAAkB,EAGlC,MAAMu0O,EAAuB,KAAK,KAAO,KAAK,IAAI3hC,EAAiB,GAAK,CAAC7nN,GAAW,CAAC,CAAC,KAAK,UAAY,KAAK,GAAG,iBAAiB1pB,CAAM,IAAM2+B,GAAiB6zO,EACvJ3D,EAA6B,CAAC,CAACpqO,EAAI,kBACtCyuO,GACDv0O,EAAc,wBAAwB,EAGlC,MAAAw0O,EAAmB9hH,EAAU,GAASz/G,EAAO,wBAA0BA,EAAO,sBAAwB,GAAKA,EAAO,aAAe,GACjIwhO,EAAyB,CAAC,CAAC3uO,EAAI,cAClC0uO,GACDx0O,EAAc,oBAAoB,EAGpC,MAAM00O,EAAoBhiH,EAAU,GAAQ,CAAC,CAACz/G,EAAO,uBAC/C0hO,EAA0B,CAAC,CAAC7uO,EAAI,eACnC4uO,GACD10O,EAAc,qBAAqB,EAG/B,MAAA40O,EAAe,CAACT,EAAgBE,EAAgBG,EAAkBE,CAAiB,EAAE,OAAO,OAAO,EAAE,OAyB3G,GAxBcr3P,GAAA,CACZ,QAAS2iB,EAAc,YACvB,UAAW,wBACX,SAAUm0O,GAAkBS,IAAiB,EAC7C,SAAUxB,EAAU,EAAIpG,EAAA,CACzB,EAEiF,CAChF,CAAC,cAAemH,EAAgBC,CAAoB,EACpD,CAAC,cAAeC,EAAgBC,CAAoB,EACpD,CAAC,oBAAqBC,EAAsBrE,CAA0B,EACtE,CAAC,gBAAiBsE,EAAkBC,CAAsB,EAC1D,CAAC,iBAAkBC,EAAmBC,CAAuB,GAG7D,QAAQ,CAAC,CAACt9P,EAAKu2P,EAAUiH,CAAc,IAAM,CAC/B/uO,EAAIzuB,CAAG,GAKrB2oB,EAAc,iBAAiB3oB,EAAKu2P,EAAUiH,EAAgBzB,CAAO,EACtE,EAEE,CAACiB,EAAgB,CAClBvmQ,EAAS,QAAQ,EACjB,MACF,CAEI,IAAAq1E,EAAW,GAAM2xL,EAAY,GAAOC,EAYxC,GAXG,CAACriH,GAAWz/G,EAAO,uBAAyBg/N,IAAgB,GAC3C8C,EAAA,IACND,EAAA,IACJjB,EAERkB,EAAkB,IAAM9C,EAAcnxL,GAAamxL,EAAa,CAAC,EAAI,MAEnD8C,EAAA,GACP5xL,EAAA,IAGVp4D,EAAS,CACJ,MAAAiqP,EAAanB,GAAkBkB,IAAoB,IACzDjvO,EAAI,YAAY,UAAU,OAAO,cAAekvO,CAAU,CAC5D,CAEwC,CACtClvO,EAAI,aAAe,CAACA,EAAI,YAAaivO,CAAe,EACpDjvO,EAAI,mBAAqB,CAACA,EAAI,kBAAmBivO,GAAmB,MAAS,GAG7E,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC9+O,EAAO/tB,CAAI,IAAM,CACxCA,IAAS,SACV+tB,EAAM,UAAY8+O,GAGd9+O,EAAA,UAAU,OAAO,SAAUktD,CAAQ,EACnCltD,EAAA,UAAU,OAAO,UAAW6+O,CAAS,EAC5C,EAYDhnQ,EAAS,QAAQ,CACnB,CAEA,MAAc,UAAUmlC,EAA4BgiO,EAA0B,CACzE,UAAOhiO,GAAY,SAAU,CAC1B,IAAAiiO,EACJ,GAAGD,GACE,GAAAhiO,IAAW3xC,EAAU,MAEtB,GADA4zQ,EAAiB,MAAM,KAAK,SAAS,eAAe,aAAajiO,EAAQgiO,CAAe,EACrF,CAACC,EAEK,OACL,OAFajiO,GAAUnrC,GAGvB,OAAQ,CAAC,WAIbotQ,EAAiB,MAAM,KAAK,SAAS,eAAe,cAAcjiO,EAAQgiO,CAAe,EACtF,CAACC,EAEK,OACL,OAFajiO,GAAUnrC,GAGvB,OAAQ,CAAC,WAKfotQ,EAAiB,MAAM,KAAK,SAAS,mBAAmB,cAAcjiO,CAAM,EACzE,CAACiiO,EAAgB,CAClB,MAAM7zQ,EAAS4xC,GAAUnrC,GAClB,OACL,OAAAzG,EACA,KAAM,MAAM,KAAK,SAAS,gBAAgB,cAAcA,CAAM,EAC9D,OAAQ,CAAC,EAEb,CAGK,OAAA6zQ,CACT,CAEO,OAAAjiO,CACT,CAEO,cAAc7xC,EAAiF,CACpGA,EAAQ,WAAa,GACrBA,EAAQ,YAAc,GAEhB,MAAAuP,EAAM,KAAK,aAAavP,CAAO,EAErC,GAAGuP,EAAK,CACA,MAAC,OAAAtP,CAAU,EAAAD,EAEX4L,EADmB,KAAK,UAAU3L,EAAQD,EAAQ,QAAQ,EAC/B,KAAM6xC,GAAW,CAChD,MAAMvlC,EAAoC,GACpC3F,EAAS1G,EAAO,SACtB,MAAG,CAAC0G,GAAUslB,GAAS4lB,CAAM,GAC3BvlC,EAAS,KAAK,KAAK,GAAG,2BAA2BrM,EAAQsP,EAAI,GAAG,CAAC,EAGhEtP,IAAWC,EAAU,MAAQyG,GACrB2F,EAAA,KAAK,KAAK,SAAS,gBAAgB,cAAcrM,EAAO,SAAU,GAAE,KAAMsnB,GAAW,CACzFA,GAAQ,IAAM,oBACf,KAAK,GAAG,gBAAgBhY,EAAI,IAAI,SAAS,KAAM,EAAI,CAEtD,EAAC,EAGKjD,EAAA,KAAK,KAAK,gBAAgB,CACjC,OAAAulC,EACA,cAAetiC,EACf,QAASvP,EAAQ,QACjB,UAAW,EACZ,EAAC,EAEK,QAAQ,IAAIsM,CAAQ,EAC5B,EAEOtM,EAAA,cAAc,KAAK4L,CAAO,CACpC,CAEO,OAAA2D,CACT,CAKO,2BAA2BvP,EAI/B,CACD,KAAM,CAAC,OAAAC,EAAQ,QAAAsJ,EAAS,MAAAwN,CAAA,EAAS/W,EAC3BuP,EAAM,KAAK,aAAa,CAC5B,GAAGvP,EACH,GAAG62D,GAA6BttD,CAAO,EACvC,OAAAtJ,CAAA,CACD,EAED,YAAK,gBAAgB,CACnB,OAAQ,CAAC,EAAG,SAAU,OAAAA,CAAM,EAC5B,YAAasJ,EACb,cAAegG,EACf,cAAewH,CAAA,CAChB,EAEExN,EAAQ,SAAWtJ,IACpBsP,EAAI,IAAI,OAAO,QAAQ,OAAS,GAAKhG,EAAQ,QAGxCgG,CACT,CAEO,aAAavP,EAAkG,CAC9G,MAAAoD,EAAI,IAAIspQ,GAAc,CAC1B,WAAY,CAAC,CAAC1sQ,EAAQ,UACtB,WAAY,SACZ,GAAGA,CAAA,CAEJ,EAGD,GAFCoD,EAAE,UAAkB,cAAgBA,EAElCpD,EAAQ,UAAW,CACpB,MAAMk2C,EAASl2C,EAAQ,SAAW,GAAQ,UAAY,SACtDA,EAAQ,UAAUk2C,CAAM,EAAE9yC,EAAE,SAAS,CACvC,CAEO,OAAAA,CAET,CACF,CAEA,MAAMu7B,GAAoB,IAAIwwO,GAC9BppN,GAAe,kBAAoBpnB,GACnC,MAAAo1O,GAAep1O","names":["limitSymbols","str","length","limitFrom","getPeerActiveUsernames","peer","usernames","username","getPeerTitle","options","peerId","rootScope","plainText","onlyFirstName","managers","threadId","title","user","apiManagerProxy","I18n","_limitSymbols","wrapEmojiText","generateFakeIcon","isScam","span","_i18n","generatePremiumIcon","Icon","generateVerifiedIcon","size","svg","use","use2","wrapEmojiStatus","wrapOptions","emojiStatus","mediaSizes","middleware","animationGroup","textColor","container","result","wrap","doc","loadPromises","attribute","attr","wrapSticker","IS_WEBM_SUPPORTED","p","generateTitleIcons","noVerifiedIcon","noFakeIcon","noPremiumIcon","elements","isPremiumFeaturesHidden","DurationType","DurationType2","formatDuration","duration","showLast","d","t","o","idx","dd","modulus","out","i","toHHMMSS","leadZero","sec_num","hours","minutes","seconds","DURATION_LANG_KEYS","wrapFormattedDuration","formatted","plain","strings","join","i18n","fragment","wrapCallDuration","wrapLeftDuration","timeLeft","wrapSlowModeLeftDuration","Currencies","number_format","number","decimals","dec_point","thousands_sep","n","prec","sep","dec","s","toFixedFix","k","paymentsWrapCurrencyAmount","amount","currency","skipSymbol","useNative","STARS_CURRENCY","isNegative","currencyData","amountExp","symbol","splitter","getPeerId","isObject","userId","chatId","NULL_PEER_ID","isUser","peerParams","wrapPlainText","text","entities","entity","encodeSpoiler","getEmojiEntityFromEmoji","emoji","toCodePoints","EMOJI_REG_EXP","emojiRegExp","getAbbreviation","onlyFirst","splitted","firstEmojiMatch","first","lastEmojiMatch","last","wrapAbbreviation","defs","hadColors","topicAvatar","color","content","ns","contentSpan","TOPIC_COLORS","hex","gradientId","strokeColor","h","a","hexaToHsla","clone","wrapCustomEmoji","docIds","lazyLoadQueue","customEmojiSize","docId","wrapRichText","wrapCustomEmojiAwaited","wrapped","wrapJoinVoiceChatAnchor","message","action","onclick","url","wrapUrl","partition","arr","callback","good","bad","item","htmlToDocumentFragment","html","template","platforms","ignore","getRestrictionReason","reasons","reason","isRestricted","escapeRegExp","isMessageRestricted","fixEmoji","match","offset","string","end","wrapMessageEntities","myEntities","parseEntities","totalEntities","mergeEntities","wrapTextWithEntities","textWithEntities","modifyAckedResult","acked","modifyAckedPromise","promise","state","setState","createStore","requestFullPeer","fullPeer","reconcile","useFullPeer","createMemo","worker","promises","detectLanguage","e","lang","deferred","deferredPromise","MIN_TOTAL_PROCESSED_MESSAGES","MIN_FOREIGN_PERCENTAGE","myLanguages","_createStore","createRoot","appState","useAppState","createEffect","on","batch","current","newTotalForeign","createEmpty","setPeerLanguageLoaded","untrack","processMessageForTranslation","mid","isForeign","previous","newLanguageLength","newTotal","previousLanguage","usePeerLanguage","onlyIfForeign","_peerId","cache","useDynamicCachedValue","cacheKey","factory","currentKey","entry","dispose","onCleanup","premium","setPremium","createSignal","onAuth","usePremium","_usePeerTranslation","setAppState","peerLanguage","isPremium","shouldShow","ret","enabled","usePeerTranslation","createMiddleware","getMiddleware","USE_OBSERVER","TranslatableMessageTsx","props","useObserver","visible","setVisible","wasVisible","prev","setTextWithEntities","translation","originalText","hadText","dontShowOriginalFirst","translate","onlyCache","setOriginalText","loading","onVisible","_first","r","set","TranslatableMessage","wrapMessageActionTextNew","wrapMessageActionTextNewUnsafe","err","wrapMessageForReply","usingMids","highlightWord","withoutMediaType","parts","hasGroupedKey","addPart","langKey","part","args","el","appMessagesManager","someRichTextOptions","usingFullGrouepd","mids","groupedText","media","pre","f","document","UNSUPPORTED_LANG_PACK_KEY","storyPeerId","isMyStory","wrapPeerTitle","date","formatDate","langPackKey","wrapMessageGiveawayResults","extendedMedia","photos","videos","actionWrapped","found","regExp","sortEntities","SERVICE_PEER_ID","what","shouldDisplayGiftCodeAsGift","wrapLinkToMessage","setDirection","wrapSomeText","htmlToSpan","wrapTopicIcon","topic","iconEmojiId","GENERAL_TOPIC_ID","wrapMessageActionTopicIcon","wrapMessageActionTopicIconAndName","setCombined","addLangPackKey","addArgs","noLinks","element","unsafeMessage","setInnerHTML","_","getNameDivHTML","getSeveralNameDivHTML","peerIds","joined","myId","indexOfAndSplice","today","daysToStart","tomorrowDate","isBroadcast","_args","formatTime","pinnedMessage","users","anchorHTML","isRecurringInit","isRecurringUsed","replyTo","invoiceMessage","price","key","ONE_DAY","iconElement","titleElement","authorElement","isMe","isIconChanged","isIconRemoved","isTitleChanged","isHiddenChanged","isGiftCode","langPack","waited","weakMap","query","PeerTitle","safeAssign","value","hasInner","fromName","_a","replaceContent","HIDDEN_PEER_ID","isForum","forumTopic","getTopicIconPromise","icons","topicIcon","inner","changeTitleEmojiColor","player","lottieLoader","peerTitle","DialogColorsFg","DialogColors","_DialogColorsFg","getPeerColorIndexById","getPeerAvatarColorByPeer","getPeerColorIndexByPeer","fgColor","hue","getPeerColorsByPeer","colorIndex","replaceColors","writeIn","peerColorOptions","dark","peerColorOption","colors","c","getHexColorFromTelegramColor","makeColorsGradient","partSize","startValue","endValue","setPeerColors","newColors","themeController","index","peerProperty","borderBackgroundProperty","colorRgbProperty","hexToRgb","gradient","myColors","colorProperty","borderBackground","isPeerRestricted","restrictionReasons","getPeerPhoto","getPeerInitials","classNames","documentFragmentToNodes","nodes","node","DashedCircle","sections","totalSegments","acc","section","totalSections","partSum","sectionStartAngle","sectionEndAngle","renderMediaWithFadeIn","needFadeIn","aspecter","thumbImage","fadeInElement","onRender","onRenderFinish","useRenderCache","renderImageFromUrlPromise","sequentialDom","$TRANSITION_RAF","$TRANSITION_TIMEOUT","SetTransition","className","forwards","onTransitionEnd","onTransitionStart","useRafs","timeout","raf","liteMode","afterTimeout","TRANSITION_TIME","ProgressivePreloader","cancelEvent","attachClickEvent","func","tempId","startTime","onEnd","elapsedTime","delay","fastRaf","details","percents","elem","reset","isInDOM","getMediaThumbIfNeeded","photo","cacheContext","useBlur","ignoreCache","onlyStripped","isVideo","THUMB_TYPE_FULL","sizes","currentSizeIndex","getImageFromStrippedThumb","thumb","EXPAND_TEXT_WIDTH","MIN_IMAGE_WIDTH","MIN_SIDE_SIZE","MIN_VIDEO_SIDE_SIZE","setAttachmentSize","boxWidth","boxHeight","noZoom","pushDocumentSize","photoSize","canHaveVideoPlayer","_isWebDocument","isWebDocument","choosePhotoSize","isDocument","makeMediaSize","boxSize","isFit","minSideSize","REPLIES_HIDDEN_CHANNEL_ID","minWidth","wrapPhoto","withTail","isOut","withoutPreloader","autoDownloadSize","noBlur","noThumb","noFadeIn","blurAfter","processUrl","uploadingFileName","isWebFile","isWebFileLocation","isImageFromDocument","isWebDoc","noAutoDownload","loadThumbPromise","gotThumb","createVideo","preloader","appDownloadManager","getDownloadPromise","haveToDownload","renderOnLoad","onLoad","blur","loadPromise","canAttachPreloader","load","renderPromise","noop","download","subscribeOn","obj","event","useIsNightTheme","isNight","setIsNight","Path1","_el$","_tmpl$","_$effect","_$setAttribute","stroke","currencyStarIcon","_el$2","_tmpl$2","_el$3","firstChild","_$insert","_c$","_$memo","_$createComponent","class","FADE_IN_DURATION","avatarsMap","Map","believeMe","seen","Set","getAvatarQueueKey","onAvatarUpdate","get","avatar","render","onAvatarStoriesUpdate","updateStoriesSegments","addEventListener","data","appAvatarsManager","isAvatarCached","getStoriesSegments","storyId","segments","type","appStoriesManager","getUnreadType","cached","Promise","resolve","acknowledged","getPeerStoriesSegments","createUnreadGradient","context","dpr","createLinearGradient","addColorStop","customProperties","getProperty","createCloseGradient","findUpAvatar","target","findUpClassName","calculateSegmentsDimensions","willBeSize","Math","round","totalSvgSize","multiplier","strokeWidth","wrapPhotoToAvatar","avatarElem","then","classList","replace","style","width","height","images","full","forEach","image","add","StoriesSegments","storiesSegments","setStoriesSegments","storyDimensions","previousDimensions","undefined","storiesCircle","dimensions","simple","isStoryFolded","status","find","segment","_$p","_$classList","segmentToSection","unreadAsClose","read","lineWidth","closeGradient","canvas","unreadGradient","dashedCircle","prepare","radius","gap","setProperty","firstCloseSegment","map","totalLength","reduce","sum","floor","filter","isNightTheme","AvatarNew","ready","setReady","icon","setIcon","setMedia","setThumb","abbreviature","setAbbreviature","setColor","setIsForum","isTopic","setIsTopic","isSubscribed","setIsSubscribed","storyColors","readyPromise","readyThumbPromise","middlewareHelper","create","addedToQueue","lastRenderPromise","destroy","cleanLastKey","delete","div","_setMedia","_setThumb","getKey","lastKey","this","avatarsSet","putAvatar","useCache","loadAvatar","animate","isAvailable","createElement","renderThumbPromise","thumbElement","res","stripped_thumb","getPreviewURLFromBytes","processImageOnLoad","setTimeout","remove","callbackify","renderImageFromUrl","withStories","isDialog","_render","onlyThumb","isBig","meAsNotes","settings","savedAsForum","defer","onDestroy","getPeer","abbr","dialogsStorage","getForumTopic","pFlags","deleted","_isForum","forum","_isSubscribed","subscription_until_date","storiesSegmentsResult","stories_max_id","avatarAvailable","avatarRendered","isSet","REPLIES_PEER_ID","changeSegments","changeForum","changeIsSubcribed","processResult","_props","dataset","Object","assign","clean","has","push","Array","from","onStoriesStatus","innerClassList","Boolean","_c$2","wtf","Show","when","fallback","children","_c$3","_tmpl$3","_p$","_v$","_v$2","_v$3","_$className","_el$5","_tmpl$4","_ref$","_$use","_$spread","_$mergeProps","avatarNew","PopupPeer","PopupElement","addCancelButton","isSavedDialog","checkboxField","CheckboxField","button","original","checkbox","onChange","toggleDisability","PopupDeleteDialog","peerType","onSelect","peerTitleElement","callbackLeave","checked","flush","checkboxes","callbackDelete","titleArgs","description","descriptionArgs","buttons","OverlayClickHandler","EventListenerBase","navigationType","withOverlay","hasMouseMovedSinceDown","findUpAsChild","IS_TOUCH_SUPPORTED","CLICK_EVENT_NAME","IS_MOBILE_SAFARI","appNavigationController","canAnimate","isRoot","toastsContainer","toastEl","x","open","hideToast","toast","onClose","toastNew","RadioField","label","input","getDeepProperty","main","simulateEvent","locked","RadioForm","radios","form","flatten","val","ContextMenuController","rect","clientX","clientY","diffX","diffY","overlayCounter","contextMenuController","addedThemeListener","wrapAttachBotIcon","manual","path","textToSvgURL","originalPromise","ButtonMenuItem","iconDoc","onClick","noCheckboxClickListener","iconSplitted","IS_MOBILE","ripple","textElement","isMobile","badge","keepOpen","menu","ButtonMenuSync","listenerSetter","radioGroups","b","items","group","hr","ButtonMenu","filterAsync","PADDING_TOP","PADDING_BOTTOM","PADDING_LEFT","PADDING_RIGHT","positionMenu","side","additionalPadding","pageX","pageY","getScrollWidthFromElement","menuWidth","menuHeight","windowWidth","windowHeight","paddingTop","paddingRight","paddingBottom","paddingLeft","verticalSide","maxTop","maxLeft","minLeft","sides","possibleSides","left","top","_cancelContextMenuOpening","_cancelContextMenuOpeningTimeout","cancelContextMenuOpening","attachContextMenuListener","listenerOptions","IS_APPLE","onCancel","createContextMenu","findElement","listenTo","appendTo","filterButtons","onOpen","onCloseAfter","onOpenBefore","attachListenerSetter","listenForClick","ListenerSetter","_element","initResult","init","cleanup","filteredButtons","setContent","Row","tagName","subtitle","subtitleRight","havePadding","isToggle","enabledKey","disabledKey","titleRightContent","titleRight","getInitArgs","g","tab","eventListener","Button","midtitle","disable","toggle","sortIcon","RowTsx","CreateRowFromCheckboxField","RadioFormFromRows","rows","RadioFormFromValues","values","fireInit","name","checkedRadioField","row","ONE_HOUR","times","PopupMute","time","MUTE_UNTIL","tsNow","radioForm","easeInOutSine","easeInOutSineApply","v","LimitLine","hint","limit","right","progress","hintContent","lastProgress","clamp","toAdd","animateSingle","doubleRaf","formatBytes","bytes","strictDecimals","_decimals","dm","fixed","PREMIUM_FEATURES_COLORS","stories","wrapGetLimitArgument","limitType","doubleLimits","formatParts","PREMIUM_FEATURES","filterChatPhotosMessages","forEachReverse","ListLoader","next","reverse","loadedAll","dispatchJump","toPrevious","leftLength","down","older","anchor","processedArr","processed","results","SearchListLoader","loadCount","backLimit","offsetId","msgs","shouldBeDeleted","searchContext","filtered","targets","storageKey","withOtherSide","changed","SearchGroup","clearable","clickable","autonomous","onFound","noIcons","appDialogsManager","dialogElement","AppSearch","searchInput","searchGroups","onSearch","fromSavedDialog","Scrollable","all","count","messages","history","searchGroup","ConnectionStatus","ConnectionStatus2","_ConnectionStatusComponent","overrideStatus","sessionStorage","baseDcId","connectionStatus","App","online","DEBUG","singleInstance","setText","timerSpan","retryAt","setTime","now","interval","cb","isConnecting","chatsContainer","inputSearch","logger","ConnectionStatusComponent","InputSearch","arrowBack","oldPlaceholder","prevValue","isEmpty","debounceStart","InputField","searchIcon","clearBtn","ButtonIcon","another","SliderSuperTab","slider","destroyable","SliderSuperTabEventable","SidebarSlider","id","isNavigation","closingId","TransitionSlider","navigationItem","tabConstructor","preserveTab","ctor","doNotAppend","AvatarEdit","PopupAvatar","ButtonCorner","numberThousandSplitter","joiner","numberThousandSplitterForWatching","numberThousandSplitterForStars","getUserStatusString","diff","dateEl","timeEl","formatFullSentTimeRaw","generateDelimiter","delimiter","SettingSection","innerContainer","i18n_","caption","generateSection","AppNewGroupTab","isGeoChat","onCreate","openAfter","asChannel","_upload","inputWrapper","valueCheck","userIds","inputFile","appImManager","chatsSection","list","usersPromise","myUserPromise","dom","setTitlePromise","myUser","names","joinElementsWith","isLast","location","uri","response","error","positionElementByIndex","pos","prevPos","whichChild","insertInDescendSortedArray","array","cmp","property","val1","val2","sortProperty","len","makeError","middlewarePromise","throwWhat","BatchProcessor","prefix","logTypes","LogTypes","log","m","processQueue","queue","perf","renderedQueue","pause","SortedList","canUpdate","base","noScheduler","getParticipantsCount","chatFull","_getChatMembersString","chat","getChatMembersString","onlySync","getParticipantRank","participant","wrapParticipantRank","rank","_SortedUserList","willChangeLength","getHeavyAnimationPromise","doTimeout","SortedUserList","EditPeer","changedLength","requiredLength","requiredValidLength","inputField","unlockOnSuccess","fallbackCopyTextToClipboard","textArea","selection","range","copyTextToClipboard","debounce","fn","ms","shouldRunFirst","shouldRunLast","waitingTimeout","waitingPromise","reject","hadNewCall","invoke","_resolve","_reject","_waitingTimeout","ctx","isUsernameValid","isWebAppNameValid","UsernameInputField","InputState","checkPromise","available","getEvent","getDistance","getTouchCenter","attachGlobalListenerTo","RESET_GLOBAL","TOUCH_MOVE_OPTIONS","MOUSE_MOVE_OPTIONS","WHEEL_OPTIONS","SwipeHandler","_e","touches","isSwipingBackSafari","verifyResult","listener","xUp","yUp","xDiff","yDiff","endDistance","touchCenter","dragOffsetX","dragOffsetY","y","dx","dy","delta","cursor","windowSize","onSwipeResult","Sortable","lastSiblings","sibling","toEnd","change","scrollPos","isVertical","move","newIdx","child","confirmationPopup","cancelButton","popup","CLASS_NAME","UsernameRow","isLink","UsernamesSection","usernameInputField","channelId","botId","_usernames","sortedList","editable","active","changeActive","applyUsernames","placeCaretAtEnd","titleLangKey","descriptionLangKey","newActive","getPeerEditableUsername","purchaseUsernameCaption","FRAGMENT_USERNAME_URL","setBlankToAnchor","purchaseText","AppEditProfileTab","inputFields","bioMaxLength","userFull","isPurchase","setUsername","profilePromise","AppChatTypeTab","linkedChatId","random","randomLong","privateRow","publicRow","privateSection","publicContainer","joinRequestSection","chatUpdateListeners","addChatUpdateListener","linkRow","btnRevoke","link","publicSection","placeholder","changedPrivacy","changedJoinToSend","changedJoinRequest","originalValue","linkInputField","joinToSendRow","originalJoinToSend","joinRequestRow","originalJoinRequest","applyBtn","usernamesSection","getUsername","changePrivacy","confirmChangingPrivacy","wasUsername","unsetLoader","setButtonLoader","canToggleJoinRequest","toggleJoinRequestVisibility","can","onChatUpdate","ScrollableLoader","done","combineParticipantBannedRights","rights","copy","defaultRights","hasRights","isThread","isCheckingRightsForSelf","myFlags","isAdmin","filterUnique","getParticipantPeerId","canSendToUser","getDialogIndexKey","localId","getDialogIndex","dialog","indexKey","wrapLocalSticker","assetName","loop","autoplay","playerPromise","animation","emptyPlaceholder","hide","isFullSize","disposer","onClean","drawCircle","fill","drawCircleFromStart","roundRect","defaultRadius","Shimmer","currentAnimation","glowEnd","rgbStart","increment","smartInc","lightLeft","lightRight","lightCenter","backgroundColor","shimmerColor","dict","DialogsPlaceholder","getRectFrom","onRemove","blockScrollable","availableLength","detachTime","DURATION","DELAY","completed","elapsedRowTime","shimmer","pattern","patternCanvas","patternContext","dialogHeight","gapVertical","gapVerticalSum","generatedValues","firstLineWidth","secondLineWidth","statusWidth","avatarSize","marginVertical","lineHeight","lineBorderRadius","lineMarginVertical","marginLeft","anchorCallback","_cancelEvent","AppSelectPeers","oldList","scrollableRect","setQuery","setDescription","setHide","append","needSwitchList","notRendered","isFunction","method","lock","debouncedInput","topContainer","li","simulateClickEvent","findUpAttribute","PopupPremium","update","newParticipant","needAdd","getResultsPromise","types","isPeerTypeMap","pageCount","dialogs","newOffsetIndex","findAndSplice","isGlobalSearch","cachedContacts","searchResult","resultPeerIds","chatParticipants","participants","isEnd","selected","subtitleEl","fallbackIcon","meAsSaved","avatarContainer","avatarClose","avatarEl","scroll","fireOnChange","rendered","onAnimationEnd","FocusDirection","wrapTopicRow","PopupPickUser","isMultiSelect","ignoreOnSelect","tabsContainer","offsetIndex","lastQuery","forumSelector","q","topicIds","topicId","filterPeerTypeBy","chatRightsActions","multiSelect","limitCallback","resolved","canEditAdmin","isCreator","promotedBy","_AppUserPermissionsTab","destroyListener","isChannel","isGroup","_canEditAdmin","goodTypes","participantFlags","ChatAdministratorRights","field","deepEqual","rankInputField","ChatPermissions","rankKey","customRank","btnDelete","btnDeleteException","AppUserPermissionsTab","CheckboxFields","info","isNested","asInner","accordionIcon","rightContent","accordion","circle","nestedCounter","_info","processToggleWith","toggleWith","nested","processNestedTo","attachGrabListeners","onStart","onMove","onMouseMove","onMouseUp","onMouseDown","onTouchMove","onTouchEnd","onTouchStart","touch","RangeSelector","seek","stepStr","min","max","events","rectMax","offsetAxisValue","RangeStepsSelector","maxIndex","option","steps","defaultBannedRights","mediaNested","mainFlag","IGNORE_FLAGS","flag","manageMessagesNested","manageStoriesNested","manageMessagesNestedKey","manageStoriesNestedKey","CREATOR_EXCEPTIONS","AppGroupPermissionsTab","chatPermissions","lastValue","initialValue","addExceptionRow","openPermissions","findUpTag","DIALOG_LIST_ELEMENT_TAG","setSubtitle","bannedRights","cantWhat","prevParticipant","exceptionsCount","setLength","loader","setLoader","migrateFrom","migrateTo","wrapStickerToRow","previousMedia","_size","AppChatReactionsTab","availableReactions","_chatReactions","chatReactions","emoticons","reaction","makeReactionFromEmoticons","emoticon","getCaptionLangPackKey","toggleSection","reactionsSection","toggleCheckboxFieldsByEmoticons","checkboxFieldsByEmoticon","toggleCheckboxField","toggleRow","save","checkboxFields","saveReactionsDebounced","_value","availableReaction","saveReactions","createParticipantContextMenu","participantPeerId","isBanned","canChangePermissions","canManageAdmins","createSelectorForParticipants","AppChatAdministratorsTab","appConfig","canToggleAntiSpam","selector","_checked","AppAddMembersTab","sel","isPrivacy","removeLoader","addChatUsers","showConfirmation","titleLangArgs","descriptionLangArgs","titles","onError","createSelectorForTab","AppChatMembersTab","channelFull","participantsCount","canHideMembers","AppRemovedUsersTab","kickedBy","shake","keyframes","AppChatDiscussionTab","stickerContainer","chatlist","isPublicGroup","isPublicChannel","groupChatFull","br","createGroupBtn","unlinkSection","btnUnlink","loadAnimationPromise","loadChatsPromise","chats","maybe2x","SectionContent","SectionCaption","captionArgs","Section","rest","splitProps","ref","fakeGradientDelimiter","noDelimiter","_c$5","nameArgs","_c$6","nameRight","_el$6","captionOld","_c$4","noShadow","accumulate","getTextWidth","font","cacheCallback","stringResults","numberResults","replaceNonNumber","CARD_BRAND_REGEXP","CARD_BRANDS","detectCardBrand","card","keys","sanitizedCard","brand","cardBrandToUnifiedBrand","detectUnifiedCardBrand","ScrollSaver","scrollable","containerRect","bubbles","bubble","elementRect","getVisibleRect","to","scrollTop","scrollHeight","clientHeight","useReflow","newScrollTop","IS_SAFARI","previousScrollHeightMinusTop","MOUNT_CLASS_TO","createArray","buggedRegExp","getDistanceFromBuggedToNormal","char","fixBuggedNumbers","makeOptionalCharacter","consumed","makeRequiredCharacter","partial","makeFormattingCharacter","wrapCharacterRegExpFactory","optional","_regExp","makeCharacter","makeCapitalPatternCharacter","makeMonthDigitPatternCharacter","digit","patternCharacters","cleanedResult","str1","capitalCharacter","spaceCharacter","yearOptionalPattern","sixteenPattern","fifteenPattern","requiredPostcodes","generateFourPattern","generateCardNumberPattern","minLength","maxLength","cardFormattingPatterns","cvcMinLength","cvcMaxLength","iso2","IS_ANDROID","optionalDigits","accumulateLengths","strs","formatValueByPattern","getPattern","pushRest","getCharacter","character","formatInputValueByPattern","deleting","NBSP","nbspRegExp","makeValidationError","code","validateCompleteCardNumber","validateExpiry","year","month","_year","nextMonth","getCardInfoByNumber","sanitized","makeCardNumberError","ignoreIncomplete","validateCardNumber","validateCardExpiry","monthStr","yearStr","validateAnyIncomplete","TelegramWebView","sandbox","allow","eventType","eventData","iframe","createVerificationIframe","PopupPaymentVerification","openPathAfter","telegramWebView","InputFieldCorrected","transformedValue","justReturn","handleInputFieldsOnChange","_onChange","valid","createCountryZipFields","country","zip","countryInputField","postcodeInputField","CountryInputField","SUPPORTED_NATIVE_PROVIDERS","PopupPaymentCard","paymentForm","savedCard","cardOut","cardSection","nativeParams","lastBrand","brandIconTempId","lastBrandImg","setBrandIcon","getPaymentBrandIconPath","img","cardInputField","transformed","cvcInputField","nameInputField","formatPhoneNumber","expireInputField","PasswordInputHelpers","switchFocusOrder","onKeyDown","previousInputField","nextInputField","inputFieldsRow","billingSection","canSave","saveCheckboxField","saveRow","payButton","PaymentButton","nativeProvider","params","PopupPaymentCardConfirmation","passwordState","passwordInputField","PasswordInputField","onInput","inputCheckPassword","tmpPassword","matchEmail","EMAIL_REG_EXP","PopupPaymentShipping","inputInvoice","focus","invoice","savedInfo","addressSection","address1InputField","address2InputField","cityInputField","stateInputField","receiverSection","emailInputField","telInputField","validateEmail","validatePhone","TelInputField","selectedCountry","requestedInfo","shippingAddress","validate","focusField","PopupPaymentShippingMethods","shippingOption","lastShippingId","easeOutCubicApply","InputFieldAnimated","setHeight","noAnimation","newHeight","currentHeight","transitionDuration","computedStyle","lines","innerHTML","fromSet","StickyIntersector","handler","entries","targetInfo","stickyTarget","rootBoundsInfo","sentinel","headerSentinel","wrapSingleEmoji","createStickersContextMenu","chatInput","isPack","verifyRecent","isEmojis","isGif","canHaveEmojiTimer","canViewPack","onSend","verifyFavoriteSticker","favedStickers","_doc","updateEmojiStatus","updateEmojiStatusUntil","getEmojiFromElement","inputStickerSet","PopupStickers","superEmoji","generatePhotoForExtendedMediaPreview","getMediaFromMessage","onlyInner","messageMedia","toArray","SHOULD_USE_SAFARI_FIX","SEEK_OFFSET","AppMediaPlaybackController","setCurrentTime","pip","verify","listLoader","jumpLength","force","storage","isScheduled","video","actions","properties","_key","animationIntersector","volume","muted","playbackRate","playbackRates","autoload","w","waitingStorage","currentTime","playingMedia","onMediaLoad","artwork","isVoice","artist","metadata","play","mediaType","standalone","wasPlaying","onPlay","playPaused","appMediaPlaybackController","ellipsis","testQueue","pendingTest","setTestQueue","testQueueElements","testElement","getElementWidth","getSize","mapped","firstTime","textLength","textWidth","elementWidth","fontSize","FontWeight","FontSize","FontFamily","newElementWidth","widthChanged","smallerText","smallerWidth","smallerTextLength","half","half1","half2","MiddleEllipsisElement","MediaProgressLine","streamable","safePlay","scrubTime","buf","numRanges","nearestStart","start","realDuration","getFwdFromName","fwdFrom","getMessageSenderPeerIdOrName","wrapSenderToPeer","senderTitle","fromMe","wrapSentTime","formatDateAccordingToTodayNew","decodeWaveform","waveform","valueCount","dataView","byteIndex","bitShift","createWaveformBars","barHeightMax","minW","maxW","availW","normValue","wfSize","barCount","maxValue","maxDelta","barX","sumI","bar_value","wrapVoiceMessage","audioEl","svgContainer","fakeSvgContainer","waveformContainer","timeDiv","speechRecognitionDiv","speechRecognitionIcon","speechRecognitionLoader","speechTextDiv","_tgico","progressLine","audio","setAnimation","onTimeUpdate","throttledTimeUpdate","throttleWithRaf","mousedown","mousemove","scrub","offsetX","wrapAudio","withTime","descriptionEl","audioAttribute","formatFullSentTime","titleEl","middleEllipsisEl","subtitleDiv","launched","constructDownloadPreloader","tryAgainOnFail","findMediaTargets","anchorMid","isBubbles","justAudioSelector","selectors","mediaItems","AudioElement","isRealVoice","isOutgoing","getDurationStr","downloadDiv","onTypeLoad","audioTimeDiv","getTimeStr","onToggleClick","imgs","autoDownload","shouldPlay","controlledAutoplay","pauseListener","playListener","paused","hadSearchContext","timestamp","ButtonMenuToggleHandler","openedMenu","filterButtonMenuItems","ButtonMenuToggle","buttonOptions","direction","noIcon","clearCloseTimeout","closeTimeout","_tempId","ControlsHover","setHideTimeout","isShown","show","_VolumeSelector","iconIndex","replaceButtonIcon","btn","VolumeSelector","createCanvasStream","stream","PlaybackRateButton","PLAYBACK_RATES","PLAYBACK_RATES_ICONS","playbackRateButton","setBtnMenuToggle","rate","btnMenu","addRate","nextIdx","isMenuOpen","VideoPlayer","live","onPlaybackRateMenuToggle","onPip","onPipClose","listenKeyboardEvents","useGlobalVolume","onVolumeChange","onFullScreen","onFullScreenToPip","shouldEnableSoundOnClick","onPause","controls","isPlaying","initDuration","wrapper","skin","timeDuration","onPlayCallbacks","onPauseCallbacks","mainToggle","leftControls","leftToggle","rightControls","fullScreenButton","timeElapsed","volumeSelector","addFullScreenListener","isPaused","getFullScreenElement","IS_APPLE_MOBILE","isFullScreen","cancelFullScreen","requestFullScreen","noEvent","isFull","MAX_VIDEO_AUTOPLAY_SIZE","roundVideoCircumference","ScreenSize","halfSize","turnedObserverOn","wrapVideo","altDoc","noInfo","onlyPreview","noPreview","noPlayButton","videoSize","noAutoplayAttribute","ignoreStreaming","canAutoplay","observer","setShowControlsOn","supportsStreaming","IS_H265_SUPPORTED","isGroupedItem","spanTime","spanPlay","willObserveSound","myMiddlewareHelper","originalMiddleware","needPlayButton","photoRes","divRound","globalVideo","clear","onPaused","onEnded","onFrame","throttle","noSoundIcon","setIsPaused","foreignObject","appendVideo","altCacheContext","getCacheContext","renderDeferred","shouldIgnoreVideoError","loadPhotoThumbFunc","previousIcon","newIcon","onMediaLoadPromise","videoLeakPromise","handleVideoLeak","attachSoundObserver","sources","source","onIntersection","destroyPlayer","debouncedDestroy","videoPlayer","releasePromise","toggleReleasePromise","onLock","ignoreNextEvents","animationItem","noVolume","newValue","onAutoplaySound","onPlaybackMediaParams","hasViewer","attachStickerViewerListeners","originalFindTarget","getTextColor","findTarget","checkForParent","mediaContainer","openDuration","switchDuration","previousGroup","_middleware","previousTransformer","isMouseUp","doThatSticker","lockGroups","isSwitching","effectThumb","getStickerEffectThumb","mediaRect","fitted","transformer","stickerEmoji","margin","STICKER_EFFECT_MULTIPLIER","overflowElement","visibleRect","scaleX","scaleY","transformX","transformY","EMOJI_TEXT_COLOR","firstFramePromise","RLottiePlayer","prevPlayer","CustomEmojiElement","onMousePreMove","newMediaContainer","_previousTransformer","ANIMATION_GROUP","stickerSetInput","emoticonsDropdown","putPreloader","onStickerSetUpdate","_set","updateAdded","onMediaCaptionClick","headerRow","added","itemsContainer","setsPromises","sets","firstSet","LazyLoadQueue","containersPromises","divs","docs","containers","isAdd","buttonAppend","installed","EmoticonsTabStyles","EMOJI_ELEMENT_SIZE","StickersTabCategory","menuTab","menuTabPadding","itemsLength","containerWidth","elementSize","itemsPerRow","createListTransition","initSource","prevSet","exiting","toRemove","setToRemove","isTransitionPending","useTransition","finishRemoved","els","handleRemoved","elsToRemove","sourceList","$TRACK","nextSet","removed","unchanged","removedOptions","nothingChanged","defaultElementPredicate","getResolvedElements","predicate","resolveElements","serverPredicate","children2","memo","getFirstChild","resolveFirst","wrapKeyframes","AnimationList","addClassName","getKeyframes","shouldAnimateAdded","shouldAnimateRemoved","reversedKeyframes","ANIMATIONS","opacity","clientWidth","SimpleAnimation","animationOptions","easing","mode","itemClassName","appear","Animated","Dynamic","component","addSearchCategories","emojiGroups","setEmojiGroups","setSelected","scrolled","setScrolled","onEmojiGroupClick","fastSmoothScroll","scrollableContainer","position","axis","EmojiGroup","$$click","$$clickData","_ref$2","ScrollableXTsx","r$","_ref$3","searching","currentPlaceholder","onAdditionalScroll","scrollLeft","For","each","after","arrowButton","createButtonIcon","detachClickEvent","onGroup","fastSmoothScrollToStart","appEmojiManager","getEmojiGroups","EmoticonsSearch","setSearching","debounced","setDebounced","trim","onValue","onFocusChange","onDebounce","noBorder","noFocusEffect","debounceTime","toggleLoading","_$delegateEvents","wrapStickerSetThumb","downloadOptions","blob","getDocPromise","stickerSet","LazyLoadQueueRepeat","LazyLoadQueueIntersector","parallelLimit","onVisibilityChange","VisibilityIntersector","queueItem","SuperStickerRenderer","EmoticonsTabC","category","ScrollableX","searchContainer","setGroup","focused","setFocused","loadedData","setLoadedData","createResource","groupData","shouldMoveSearch","shouldUseContainer","Portal","useData","isLocal","noMenuTab","styles","propertyWidth","prepend","posItems","foundMenuScroll","posMenu","sliced","notMountedItems","notMountedMenus","itemsIdx","menuIdx","hasId","EMOTICONSSTICKERGROUP","superStickerRenderer","rendererLazyLoadQueue","_StickersTab","stickers","grouping","cleaned","cancel","intersectionOptions","EmoticonsDropdown","onCategoryStickers","ids","favedCategory","recentCategory","clearButton","faved","order","noUnmount","stickerRenderer","documents","isVisible","StickersTab","loadedURLs","appendEmoji","_emoji","unify","customEmojiElement","spanEmoji","kek","IS_EMOJI_SUPPORTED","firstElementChild","EMOJI_RECENT_ID","EMOJI_RECENT_CATEGORY","CUSTOM_EMOJI_RECENT_ID","CUSTOM_EMOJI_RECENT_CATEGORY","EMOJI_CATEGORIES","sorted","Emoji","RECENT_MAX_LENGTH","EmojiTab","emojis","localStickerSet","renderedCategories","sticker","blurActiveElement","renderer","newChildren","customEmojis","innerScrollWrapper","preparedMap","titleLangPackKey","unified","emojiFromCodePoints","mainSetsResult","isPremiumPurchaseHidden","recent","recentCustom","mainSets","additionalSets","additionalLocalStickerSet","docIdsToCustomEmoji","recentEmojis","recentCustomEmojis","recentCustomCategory","toggleRenderers","onEmojiRecent","hasPremium","canSeeCustomCategory","CustomEmojiRendererElement","showToast","LazyLoadQueueRepeat2","spliced","findAndSpliceAll","GifsMasonry","attach","GifsTab","gifs","nextOffset","masonry","gifsContainer","old","newNextOffset","ANIMATIONGROUP","AppGifsTab","fileId","appSidebarRight","newSearch","next_offset","AppStickersTab","access_hash","header","countDiv","stickersDiv","stickerDiv","coveredSets","covered","TOGGLE_TIMEOUT","ANIMATION_DURATION","DropdownHover","toElement","enable","willBeActive","NEWTON_ITERATIONS","NEWTON_MIN_SLOPE","SUBDIVISION_PRECISION","SUBDIVISION_MAX_ITERATIONS","kSplineTableSize","kSampleStepSize","float32ArraySupported","A","aA1","aA2","B","C","calcBezier","aT","getSlope","binarySubdivide","aX","aA","aB","mX1","mX2","currentX","currentT","newtonRaphsonIterate","aGuessT","currentSlope","LinearEasing","BezierEasing","mY1","mY2","sampleValues","getTForX","intervalStart","currentSample","lastSample","dist","guessForT","initialSlope","scrollOptions","renderEmojiDropdownElement","tabId","_EmoticonsDropdown","POSTING_NOT_ALLOWED_MAP","emojiTab","clearDraft","silent","ignoreNoPremium","instance","horizontalMenu","RichInputHandler","newRange","getCaretPosF","newStartNode","newOffset","HIDE_EMOJI_TAB","INIT_TAB_ID","lastMouseMoveEvent","mouseMoveEventAttached","isActive","onPeerChanging","onPeerChanged","processInvisibleDiv","menuScroll","prevTab","jumpedTo","scrollToTab","elementPosition","setActive","setActiveStatic","scrollingToContent","stickyIntersector","stuck","which","offsetTop","additionalOffset","emoticonsDropdown$1","getMessageThreadId","savedPeerId","insertSomething","sortKey","BubbleGroup","groups","dateTimestamp","fwdFromId","fwdFromName","isForwardFromChannel","currentPeerId","_length","updateClassNames","dateContainer","dateGroups","_group","dateGroupsLength","unmountedLength","STICKY_OFFSET","BubbleGroups","ChatType","parentElement","siblings","modifiedGroups","previousSibling","nextSibling","toMount","toUnmount","item1","item2","isOut1","itemIndex","previousItem","siblingGroupedItem","nextItem","fromId","single","SERVICE_AS_REGULAR","hadGroup","splittedGroups","PopupDatePicker","initDate","onPick","handleTimeInput","onOverflow","maxString","popupCenterer","disabled","innerText","firstDate","weekStartDate","day","dayIndex","clonedDate","remainder","PopupForward","peerIdMids","chatRightsAction","noTopics","fromPeerId","messagesPromises","formatNumber","DivAndCaption","MEDIA_SIZE","wrapReplyDivAndCaption","mediaEl","replyHeader","storyItem","quote","wrappedTitle","isMessageReply","isRound","mediaChildren","wrappedSubtitle","ReplyContainer","isMediaSet","wrapEmojiPattern","useHighlightingColor","colorAsOut","positions","canvasWidth","canvasHeight","emojiSize","onCacheStatus","downloaded","alpha","applyColorOnContext","wrapReply","replyContainer","fillPromise","setColorPeerId","AVATAR_CLASS_NAME","AVATAR_CONTAINER_CLASS_NAME","StackedAvatars","TAG_NAME","RepliesElement","replies","leftPart","isUnread","textSpan","iconSpan","rippleContainer","makeEdited","edited","makeTime","includeDate","makeEffect","availableEffect","getDocForEffect","isPremiumEffect","fireMessageEffect","effectId","fullThumb","animationDiv","wrapStickerAnimation","fireMessageEffectByBubble","timeEffect","MessageRender","chatType","isMessage","editedSpan","effectSpan","postViewsSpan","channelViews","postAuthor","getFullDate","timeSpan","clonedArgs","bubbleContainer","messageDiv","isFooter","repliesFooter","appendCallback","needUpdate","isStandaloneMedia","isReplacing","currentReplyDiv","isStoryReply","replyToPeerId","originalMessage","originalStory","originalPeerTitle","isReplyFromAnotherPeer","titlePeerId","originalMessageFwdFromId","groupPeerTitle","isStoryExpired","saveClassNames","AppPollResultsTab","poll","questionText","roundPercents","answer","answerEl","answerTitle","answerText","answerPercents","votesList","vote","showMore","lineTotalLength","tailLength","fullTime","oneTime","minIndex","minRemainder","maxRemainder","pollElement","PollElement","hideQuizHint","onHide","prevQuizHint","prevQuizHintOnHide","prevQuizHintTimeout","isListenerSet","setQuizHint","textEl","textRightEl","_PollElement","answerIndex","foundIndex","descKey","votes","timeLeftDiv","circumference","period","closeTime","footerDiv","canVote","toggleHint","correctResult","indexes","chosenIndexes","isCorrect","stackedAvatars","isVoted","hideSendVoteBtn","hideViewResultsBtn","isChosen","getPercentValue","iterate","votersCount","compareLong","str2","str1Length","maxPartLength","v1","v2","compareValue","SliceEnd","SlicedArray","slicedArray","slice","deleteCount","slices","lowerBound","upperBound","foundSlice","lowerIndex","upperIndex","foundSliceIndex","insertIndex","prevSlice","nextSlice","maxId","addOffset","sliceOffset","sliceStart","sliceEnd","topWasMeantToLoad","bottomWasMeantToLoad","topFulfilled","bottomFulfilled","serialized","json","parsed","inserted","reflowScrollableElement","handleHorizontalSwipe","cancelY","hadMove","INTERNAL_LINK_TYPE","INTERNAL_LINK_TYPE2","callbackifyAll","availableReactionToReaction","reactionsEqual","r1","r2","ReactionLayoutType","REACTIONS_SIZE","REACTIONS_DISPLAY_COUNTER_AT","defaultBezier","TransformationComputator","transformation","point","pointsProgress","isArrayBeziers","computeLayerTransformations","layer","ks","op","layerTransformations","opacityComputator","translationComputator","scaleComputator","prevTransformations","transformations","scale","reactionGenericPromise","loadReactionGeneric","animationData","placeholderLayers","layersPositions","ReactionElement","reactionCount","canRenderAvatars","doNotRenderSticker","hadStickerContainer","wrapPromise","savedReactionTags","tag","displayOn","setTitle","recentReactions","waitPromise","onAvailableReaction","genericEffect","onlyAround","genericEffectSize","isGenericMasked","aroundParams","aroundResult","genericResult","stickerResult","iconPlayer","aroundPlayer","maskedSticker","reactionGeneric","newCanvasSize","maskedMedia","isMaskedVideo","frameNo","frame","isImageData","savedContext","flippedX","flippedY","scaledWidth","scaledHeight","removeOnFrame","onEmoticon","IconTsx","getIconContent","tooltipOverlayClickHandler","showTooltip","vertical","subtitleElement","paddingX","centerVertically","auto","mountOn","body","relative","getBoundingClientRect","useOverlay","close","getRect","setRect","getStyle","css","minX","maxX","centerX","verticalOffset","bottom","notchCenterX","tooltip","_el$4","_$style","mount","onMount","closed","onToggle","clearTimeout","window","once","REACTIONS_ELEMENTS","PENDING_PAID_REACTIONS","getPendingPaidReactionKey","tags","reactionsElement","ReactionsElement","reactionElement","reactions","isPlaceholder","forceCounter","changedResults","hasReactions","counts","animationShouldHaveDelay","totalReactions","customEmojiElements","pending","wasUnread","withDelay","SuperIntersectionObserver","observing","callbacks","copyFromElement","wrapWebPageDescription","webPage","richTextOptions","noLimit","shortDescriptionText","wrapWebPageTitle","shortTitle","isMentionUnread","getGroupedText","foundMessages","RectPart","Layouter","maxWidth","spacing","maxHeight","ComplexLayouter","minimalWidth","secondWidth","firstWidth","firstHeight","thirdHeight","secondHeight","rightWidth","leftWidth","thirdWidth","h0","w0","w2","w1","h1","h2","ratios","ratio","averageRatio","attempts","multiHeight","pushAttempt","lineCounts","heights","second","third","fourth","optimalAttempt","optimalDiff","attempt","lineCount","totalHeight","minLineHeight","bad1","bad2","line","optimalCounts","optimalHeights","rowCount","colCount","col","prepareAlbum","layout","widthItem","heightItem","geometry","mediaDiv","getUnsafeRandomInt","AnimationItemNested","_DotRenderer","multiply","config","shader","shaderTextResult","shaderText","gl","dt","draw","vertexShader","fragmentShader","program","shaders","rotate","flipX","flipY","transforms","DotRenderer","toggleMediaSpoiler","mediaSpoiler","reveal","destroyAfter","onMediaSpoilerClick","wrapMediaSpoilerWithImage","readyResult","wrapMediaSpoiler","wrapAlbum","attachmentDiv","uploading","spoilered","videoTimes","containerHeight","hasSpoiler","isPhoto","thumbPromise","itemWidth","itemHeight","videoTime","LatinizeMap","badCharsRe","trimRe","C2L","clearBadCharsAndTrim","fixCyrillic","ch","latinizeString","processSearchText","hasTag","wrapDocument","fontWeight","voiceAsMusic","showSender","sizeType","canTranscribeVoice","audioElement","extSplitted","ext","docDiv","icoDiv","icoTextEl","hadContext","hasThumb","fileName","bytesContainer","bytesEl","bytesJoiner","descriptionParts","bytesMaxEl","nameDiv","sizeDiv","canSaveToCache","MAX_FILE_SAVE_SIZE","_downloadDiv","addByteProgress","sizeContainer","_bytesContainer","format","_d","queueId","MEDIA_MIME_TYPES_SUPPORTED","downloadFileName","getDownloadMediaDetails","uploadPromise","getMediaDurationFromMessage","wrapGroupedDocuments","albumMustBeRenderedFull","useSearch","richTextFragment","translatableParams","factCheckBox","nameContainer","isFirst","wrapPoll","rtlChars","justRtlDirCheck","isRTL","anyChar","endsWithRTL","wrapTopicNameButton","lastMsgId","wrapTelegramUrlToAnchor","getServerMessageId","PopupSharedFolderInvite","nav","chatlistInvite","updating","isAlready","isJoining","leaveSuggestionsPeerIds","makeItem","activeItem","shadow","descriptionAddI18n","counterI18n","onSelectionChange","alreadyPeerIds","selectAllI18n","shouldDeselect","addFolderText","addFolderI18n","_remove","showLimitPopup","totalPeerIds","initial","getJoinLangKey","chatInvite","wrapChatInviteTitle","titleFragment","titleInner","wrapChatInviteAvatar","PopupJoinChatInvite","hash","peopleCount","UNSAFE_ANCHOR_LINK_TYPES","addAnchorListener","href","pathnameParams","uriParams","u","T_ME_PREFIXES","parseUriParams","masked","createBadge","getMinDate","getMaxDate","checkDate","addMinutes","PopupSchedule","btnSendWhenOnline","SEND_WHEN_ONLINE_TIMESTAMP","timeOptions","sendDate","dateOptions","processing","pollStories","wrappedStories","getStoriesById","mounted","setInterval","wrapStoryMedia","unwrap","containerProps","setChildrenClassName","wrappers","forPreview","noAspecter","forViewer","Infinity","withPreloader","childrenClassName","altDocument","alt_document","mediaResult","StoryPreview","setStoryItem","equals","setF","getStoryById","onExpiredStory","CHANNEL_GRAPHS_TITLES","growth_graph","followers_graph","mute_graph","top_hours_graph","views_by_source_graph","new_followers_by_source_graph","languages_graph","interactions_graph","iv_interactions_graph","reactions_by_emotion_graph","story_interactions_graph","story_reactions_by_emotion_graph","GROUP_GRAPH_TITLES","members_graph","new_members_by_source_graph","messages_graph","actions_graph","weekdays_graph","MESSAGE_GRAPH_TITLES","views_graph","STORY_GRAPH_TITLES","CHANNEL_OVERVIEW_ITEMS","followers","enabled_notifications","views_per_post","views_per_story","shares_per_post","shares_per_story","reactions_per_post","reactions_per_story","GROUP_OVERVIEW_ITEMS","members","viewers","posters","MESSAGE_OVERVIEW_ITEMS","views","public_shares","private_shares","STORY_OVERVIEW_ITEMS","TChartPromise","_TChart","ensureTChart","__vitePreload","module","default","extractColor","substring","indexOf","makeAbsStats","approximate","createLoadableList","createMoreButton","textArgs","StatisticsOverviewItem","includeZeroValue","describePercentage","isPercentage","total","toFixed","absDiff","abs","vv","StatisticsOverviewItems","AppStatisticsTab","renderPeer","user_id","toPeerId","addDialogNew","rippleEnabled","toJoin","toChatId","listEl","avg_chars","banned","kicked","invitations","lastMessageSpan","replaceChildren","renderPublicForward","publicForward","renderRecentPost","msg_id","story","storyViews","forwards_count","story_id","views_count","reactions_count","onOpenAfterTimeout","openPromise","_construct","recentPosts","topPosters","topAdmins","topInviters","publicForwards","currentPost","_self$","dateElement","IntlDateElement","getLabelDate","displayYear","isMonthShort","Date","weekday","displayWeekDay","isShort","hour","displayHours","minute","textContent","getLabelTime","makeColors","surface","primary","secondary","surfaceRgb","miniMask","mixColors","miniFrame","background","backgroundRgb","dates","grid","barsSelectionBackground","isMegagroup","isStory","graphs","statsGraph","stats","percentage","renderGraph","JSON","parse","prepareData","addOptions","tooltipOnHover","zoomToken","zoom_token","tChart","x_on_zoom","appStatisticsManager","loadAsyncGraph","dcId","darkMode","ALL_LABEL","DATES_SIDE","DATES_WEIGHT","DATES_FONT_SIZE","ZOOM_TEXT","FONT","family","bold","normal","COLORS","setStyles","$wrapper","setDarkMode","captionElement","_el$7","_tmpl$5","overviewTitles","overviewItems","formatDateRange","topPeersTitles","postsContainer","min_date","max_date","topPeers","createChatList","splice","moreButton","_el$8","_tmpl$6","setListClickListener","createStoriesViewerWithPeer","querySelector","withContext","openInner","loadMore","finally","postInteractionCounters","counters","onOpenClick","createTab","setInnerPeer","noLabels","subtitleRightFragment","createDocumentFragment","noWrap","asLink","applyMediaElement","border","loadStats","manager","loadLimit","getBroadcastStats","getMegagroupStats","getStoryStats","getMessageStats","postPromise","reloadMessages","postPublicForwardsPromise","getMessagePublicForwards","storyPromise","storyPublicForwardsPromise","getStoryPublicForwards","token","recent_posts_interactions","renderedPublicForwards","messagePublicForwards","storyPublicForwards","totalPublicForwards","statsPublicForwards","top_posters","top_admins","topInvites","top_inviters","renderedTopPosters","renderedTopAdmins","renderedTopInviters","recentPostsPromises","currentPostPromise","appChatsManager","__","loaded","console","animations","finished","InviteLink","onButtonClick","noRightButton","linkContainer","rightButton","AppSharedFolderTab","isSame","canSelect","linkSection","inviteLink","titleI18n","selectedPeers","combinedPeerIds","peers","ratings","peersMap","rating","_add","PopupGiftLink","constructor","slug","stack","checkedGiftCode","closable","overlayClosable","withConfirm","floatingHeader","footer","isInChat","construct","dotsCanvas","_self$2","isUsed","used_date","appendChild","makePeer","TablePeer","hideWithCallback","isGiveaway","via_giveaway","from_id","to_id","giveawayAnchor","giveaway_msg_id","reasonValue","formatMonthsDuration","months","shareLink","shareGiftLink","Table","devicePixelRatio","canUseLink","btnConfirm","applyGiftCode","appPaymentsManager","checkGiftCode","gift","particlesCount","createSharingPicker2","sendText","langPackArguments","MANAGERS","includes","split","pop","isCancel","getColorByMonths","getBoostMonths","days","CPrepaidGiveaway","quantity","giveaway","stars","boosts","giveaway_boosts_per_premium","subtitleLangKey","subtitleLangArgs","BoostsBadge","createMedia","Tabs","MenuTab","ContentTab","tabs","removeAll","AppBoostsTab","renderBoost","boost","expires","unclaimed","boostsStatus","boostsList","giftsBoostsList","limitLine","noStartEnd","next_level_boosts","current_level_boosts","setProgress","from1","level","to1","from2","to2","_setHintActive","boost_url","boostsViaGiftsButton","createPopup","PopupBoostsViaGifts","noBoostersHint","_el$9","_el$10","moreKey","setTab","prepaidGiveaways","setPrepaidGiveaways","prepaid_giveaways","onlyGiftedBoosts","gift_boosts","showGifts","premium_audience","canCreateGiveaway","prepaidGiveaway","giveaways","_el$11","_el$12","PopupPayment","noPaymentForm","transaction","channel_id","giveaway_post_id","used_gift_slug","appPeersManager","getOutputPeer","toUserId","_ref$4","selectTab","createLoader","gifts","appBoostsManager","getBoostsList","getBoostsStatus","apiManager","getAppConfig","Ripple","rippleElement","RowRowPart","RowRow","rightSecondary","titleRow","checkboxFieldToggle","titleRightSecondary","subtitleRow","isCheckbox","radioField","isClickable","haveRipple","noRipple","asLabel","fakeDisabled","iconClasses","mediaSize","BoostsConfirmButton","ssss","langArgs","onCreated","_self$3","subscriptionsCount","setSubscriptionsCount","expiration","setExpiration","setPeerIds","specificPeerIds","setSpecificPeerIds","setStars","starsOption","setStarsOption","starsOptions","starsWinner","setStarsWinner","winners","specific","setSpecific","durationForm","setDurationForm","setOption","countries","setCountries","onlyNewSubscribers","setOnlyNewSubscribers","additionalPrizes","setAdditionalPrizes","additionalPrize","setAdditionalPrize","showPrizes","setShowPrizes","isPrepaid","yearly_boosts","generateStep","winner","noFirstLast","stepValues","generateSteps","findIndex","setSteps","premiumGiftCodeOptions","some","focusValue","radioOptions","asRadio","expirationRow","maxDate","giveaway_period_max","btnConfirmLangKey","updateSpecific","updateThumb","prepaidRowContainer","createRowContainer","starsRowContainer","createRow","onMultiSelect","starsRow","setValueSilently","exceptSelf","setLimit","subscribersLimit","createAvatar","showTitles","createNextIcon","specificMedia","specificAvatar","premiumPromoAnchor","lastOptionIndex","_count","periods","sort","nearestOption","premiumOptionsForm","periodOptions","onOption","discountInTitle","addChannelButton","excludePeerIds","channelsLimit","bind","ignorePrivatePeerId","getChat","getSelected","toggleElementCheckboxByPeerId","getCountriesSubtitle","onCountriesClick","lastFiltered","renderResultsFunc","iso2s","getCountryEmoji","emojiContainer","default_name","getMoreCustom","filterCountries","checkboxSide","noPlaceholder","countriesList","searchSection","addInitial","countriesLimit","notSpecific","per_user_stars","StarsStackedStars","openContextMenu","contextMenu","danger","additionalPrizeDiv","_tmpl$7","_el$13","$$input","isOverflow","notSpecific2","_el$14","_tmpl$8","_el$15","_el$16","_tmpl$9","_el$17","_tmpl$10","_el$18","createGiveawayStoreInput","getInputPeerById","common","only_new_subscribers","winners_are_visible","boost_peer","random_id","until_date","additional_peers","countries_iso2","prize_description","createSpecificStoreInput","appUsersManager","getUserInput","continueWithPrepaid","purpose","launchPrepaidGiveaway","continueWithCreating","giftCodeOptions","getPremiumGiftCodeOptions","getStarsGiveawayOptions","giveaway_add_peers_max","giveaway_countries_max","appendSolid","PopupReassignBoost","myBoosts","btnClose","setCount","Avatars","previosIndexes","myBoost","realList","transitionList","exitMethod","transform","queueMicrotask","before","leftTimes","onFirstRender","noSearch","sectionNameLangPackKey","getSubtitleForElement","clearInterval","expirationSpan","setTimestamp","leftTime","cooldown_until_date","getPeerIdFromKey","processElementAfter","getElementByPeerId","contains","boosts_per_sent_gift","initGifting","my_boosts","slot","attachScrollableListeners","slots","uniquePeers","applyBoost","PopupBoost","isPremiumPurchaseBlocked","entityBoosts","descriptionPeerTitle","hasStories","needBoostsForNextLevel","isMaxLevel","hasMyBoost","updated","setBoostsStatus","_boostsStatus","getGivenBoosts","setInfo","setButtons","handleErrorType","showPremiumNeeded","wait","givenBoosts","availableBoost","reservedStars","setReservedStars","fetchStars","starsStatus","prefetchStars","useStars","createReaction","_useStars","InternalLinkProcessor","postId","commentId","openPeerId","IS_GROUP_CALL_SUPPORTED","botUsername","processInternalLinkResult","errorLangPackKey","attachMenuBot","choose","verifyMap","filteredTypes","peerTypePredicate","chosenPeerId","commonOptions","messagesBotApp","haveWriteAccess","balance","itemPrice","PopupStars","command","bot","hashtag","channel","PHONE_NUMBER_REG_EXP","thread","nestedLink","processor","internalLinkProcessor","getSelectedText","getGiftAssetName","DelimiterWithText","onGiveawayClick","giveawayInfo","getGiveawayInfo","giveawayPeerId","isMediaResults","isResults","isRefunded","refunded","isWinner","isParticipating","participating","isStars","winners_count","unclaimed_count","additionalPeersLength","additional_peers_count","channels","subtitleKey","subtitleArgs","finish_date","start_date","subsubtitleKey","subsubtitleArgs","subsubtitleAtTop","joined_too_early_date","disallowed_country","admin_disallowed_chat_id","subsubtitle","activated_count","gift_code_slug","Giveaway","countriesElements","headerDuration","launch_msg_id","renderEntity","setPeerColorToElement","channelsWrapped","countriesWrapped","middle","_el$19","getParents","parents","ButtonIconTsx","SimilarPeer","getContext","willReadFrequently","badgeBackgroundUrl","setBadgeBackgroundUrl","onImageLoad","naturalWidth","drawImage","computeLockColor","nameElement","usePeer","defaultLimit","bot_active_users","participants_count","displayBadge","SimilarChannels","setDetails","setList","onAcked","onReady","onEmpty","getDetails","getChannelRecommendations","getLimit","every","messagesChats","premiumLimit","hasMore","detach","headerLangPackKey","isForumTopic","isForwardOfForward","getMainGroupedMessage","cancelClickOrNextIfNotClick","getUnreadReactions","PopupAboutAd","getWebFileLocation","geo","zoom","makeGoogleMapsUrl","wrapGeo","updateLocationOnEdit","isVenue","isLive","svgWidth","svgHeight","svgPlaceholder","setAnchorURL","wrapTempId","_wrapTempId","oldImageContainer","newWrapOptions","imageContainer","pin","heading","getMetersPerPixel","lat","liveExpiration","isLiveExpired","address","canHaveTail","updatedI18n","timer","timerTextI18n","timerCircle","timerShadowCircle","lastMessage","isExpired","newGeo","accuracyRadiusPx","langPackArgs","strokeDashOffset","wrapKeyboardButton","noTextInject","replyMarkup","buttonEl","buttonIcon","messageMid","mediaInvoice","button_id","callbackAnswer","isRequestingUser","isRequestingChannel","isRequestingGroup","_peerType","commonChatIds","requestedPeerIds","requestedPeerTitles","joinedTitles","joinedTitlesElement","WebPageFooter","getDirection","WebPageName","tip","_$addEventListener","WebPageTitle","WebPageText","WebPageMedia","_className","withDocument","hasDocument","WebPageBox","viewButton","siteName","titleDiv","previewResizer","contentDiv","minContent","clearfix","USER_REACTIONS_INLINE","TEST_BUBBLES_DELETION","USE_MEDIA_TAILS","IGNORE_ACTIONS_ARRAY","IGNORE_ACTIONS","IS_CALL_SUPPORTED","SPONSORED_MESSAGE_ID_OFFSET","SCROLLED_DOWN_THRESHOLD","PEER_CHANGED_ERROR","DO_NOT_SLICE_VIEWPORT","DO_NOT_SLICE_VIEWPORT_ON_SCROLL","GLOBAL_MIDS","BIG_EMOJI_SIZES","BIG_EMOJI_SIZES_LENGTH","webPageTypes","webPageTypesSiteNames","getMainMidForGrouped","getSponsoredPhoto","sponsoredMessage","makeFullMid","getBubbleFullMid","splitFullMid","fullMid","EMPTY_FULL_MID","appendBubbleTime","ChatBubbles","hoverBubble","hoverReaction","stickerWrapper","onFirstFrame","bubbleFullMid","contactDiv","phone","callDiv","paidMedia","search","stickerEmojiEl","firedAnimation","quoteDiv","isTruncated","isExpanded","hasAnimations","scrollSaver","animationPromise","message1","via","peerIdStr","savedFrom","videoMini","webPageContainer","sponsoredCallback","isReplyClick","replyToMid","historyResult","ignoreHeavyAnimation","scrollDimensions","forceDown","intersecting","centerY","closest","distanceToVerticalCenter","distanceToEnd","loadQueue","filterQueue","firstGroup","lastGroup","firstMid","lastMid","avatarPromises","newFirstGroup","newLastGroup","newFirstMid","newLastMid","sponsoredItem","changedTop","changedBottom","firstReverse","timePromises","fastRafPromise","restoreScroll","oldBubble","updatePosition","setBatch","sequential","newItem","_items","foundItem","tempMessage","fullTempMid","_bubble","maxTimestamp","tempIds","groupedId","reactionsElements","mainMessage","repliesElement","documentContainer","newDiv","updateLocalOnEdit","transcribedText","dots","deletedMids","oldMids","wasMainMid","wasFullMid","mainMid","unreadReactions","updateMessageReply","replyMid","maxMediaTimestamp","timestamps","codeContainer","isTogglingWrap","present","dateMessage","dateBubble","useHeavyAnimationCheck","removerContainer","remover","selectedText","shouldReply","swipeAvatar","_target","_swipeAvatar","historyKey","refreshInput","isUserBlocked","isPremiumRequired","wasUserBlocked","wasPremiumRequired","refreshing","hadRights","hadPlainRights","hasPlainRights","canEmbedLinks","wasLikeGroup","finishPeerChange","fullMids","toDelete","postViewsElements","different","postViews","byPeers","pinned","onUpdate","wasHeight","resizing","skip","rAF","onResizeEnd","isScrolledDown","setEndRAF","processEntries","realDiff","_part","needScrollTop","resizeObserver","unreadedSeen","unreadedObserverCallback","unreaded","readPromiseKey","unreadedSeenKey","idleController","bubblesMaxId","readContents","mediaTimestamp","documentDiv","groupedItem","groupedItemIndex","fullMessageId","isSponsored","SINGLE_MEDIA_CLASSNAME","isSingleMedia","AppMediaViewer","hasAspecter","albumItem","parent","_fullMid","groupId","nextFullMid","filterCallback","_mid","foundMid","onlyReal","clearMessageId","justLoad","historyStorage","canBeDeleted","wasScrollSize","padding","goodSelectors","sameKind","previousSameKindElement","deletingItem","isDeletingOnlyBubble","isGroupLastBubble","isGroupFirstBubble","placeholderAnimation","deletionAnimation","avatarAnimation","dispatchHeavyAnimationEvent","permanent","ignoreOnScroll","releaseBatch","isPaddingNeeded","setPaddingTo","scrolledDown","setPeerPromise","newMessage","savedReaction","unsetPadding","forceDirection","forceDuration","fallbackToElementStartWhenCentering","isChangingHeight","gradientRenderer","datasetKey","bubbleContent","serviceMsg","fakeBubble","haveTimestamps","getObjectKeysAndSort","insertBefore","bubblesToo","cancelAnimationByKey","interruptHeavyAnimation","startParam","isNeeded","samePeer","sameSearch","lastMsgPeerId","lastMsgFullMid","topMessageFullMid","isTarget","followingUnread","readMaxId","savedPosition","overrideAdditionMsgId","isGoingToBottomEnd","isJump","BOT_START_PARAM","additionalMid","additionalFullMid","maxBubbleFullMid","oldChatInner","oldPlaceholderBubble","chatInner","canScroll","haveToScrollToBubble","fromUp","lastIndex","scrollFromDown","scrollFromUp","canShowRanks","processRanks","ackedResult","setRanksPromise","channelParticipants","finishPeerChangeOptions","mountedByLastMsgId","afterSetPromise","foundTarget","lastBubble","groupedItemMid","attachment","fetchReactions","needFetchInterval","historyMaxId","canWrite","isLikeGroup","firstItem","additionalCallback","canAnimateLadder","realMiddleware","newBubble","isReplacingFirst","groupedMids","reactionsMessage","groupedMessages","groupedMustBeRenderedFull","maxBubbleMid","our","contentWrapper","isInUnread","unreadMention","isStoryMention","regularAsService","returnService","ignoreAction","service","isSent","isPrize","isUnclaimed","updateHidden","hidden","_cached","setUnreadObserver","factCheck","needToSetHTML","messageMessage","messageWithMessage","groupedTextMessage","bigEmojis","emojiEntities","strLength","curr","getRichTextOptions","canTranslate","richText","isMessageEmpty","mediaRequiresMessageDiv","canHavePlainMediaTail","haveRTLChar","_clearfix","topicNameButtonContainer","forward","replyMarkupRows","containerDiv","onClickMap","isLastRow","rowDiv","haveButtons","messageWithReplies","withReplies","_isForwardOfForward","hasPostAuthor","canHideNameIfMedia","invertMedia","getCountry","getCountryName","onFactCheck","box","canPossiblyHavePlainMediaTail","storyFromPeerId","noAttachmentDivNeeded","processedWebPage","storyAttribute","boxRefs","isUnsafe","sponsoredMedia","preview","hasLargeMedia","hasSmallMedia","sponsoredPhoto","willHaveSponsoredPhoto","smth","isSquare","squareBoxSize","isEmoji","noPremium","newNameContainer","bubbleBackground","lastContainer","contact","contactDetails","contactNameDiv","fullName","contactNumberDiv","isTest","isInvoice","isAlreadyPaid","isNotPaid","innerMedia","wrappedPrice","priceEl","l","videoDuration","_canHaveTail","isFloatingTime","canReport","hideButton","needName","titleVia","peerIdForColor","hasTwoTitles","mustHaveName","isHidden","isForward","isRegularSaved","firstArgs","nameKey","textColorProperty","updateMessageDiv","insertedElement","firstElement","processRank","goto","generateTail","documentMessageDiv","isWebPage","buttonText","buttonCallback","wrappedRank","sliceTop","sliceBottom","viewportSlice","setLoadedPromises","firstSlice","lastSlice","placeholderPromise","offsetPeerId","additionalFullMids","isAdditionalRender","sortedFullMids","targetMid","topIds","middleIds","bottomIds","setBubbles","animateAsLadder","lastMsDelay","elementsToAnimate","topRes","middleRes","bottomRes","delays","BASE_CLASS","listElements","intro","_title","onClearedBefore","appendWhat","isBot","isWaitingForAnimation","noTransition","setOn","useExtra","getViewportSlice","ignoreScrollSaving","invisibleTop","invisibleBottom","invisible","checkPlaceholders","sponsoredMessages","messagePromise","localWebPage","_log","processPromise","botInfo","isBackLimit","resultPromise","isAdditionRender","isFirstMessageRender","sup","_promise","asSpan","PopupSendNow","onConfirm","cancelSelection","IS_STANDALONE","accumulateMapSet","AppSelection","selecting","firstTarget","processElement","checkBetween","seenSet","isSelected","seenLength","elementsBetween","canceledSelection","documentListenerOptions","firstRect","lastRect","isHigher","firstIndex","doNotAnimate","listenElement","hasCheckbox","forceSelection","cantForward","cantDelete","cantSend","cantPin","selectedMessagesPromises","toggleCheckboxes","wasSelecting","toggleResult","unselect","SearchSelection","searchSuper","btnCancel","attachClickOptions","PopupDeleteMessages","transitionElement","ChatSelection","replySwipeHandler","groupContainer","isGroupedSelected","isGroupedMidsSelected","needTranslateX","widthFrom","widthTo","translateButtonsX","isGrouped","selectedMids","CLASSNAME_BASE","PinnedContainer","divAndCaption","needClose","isFloating","ChatAudio","topbar","playbackParams","isMusic","prevEl","nextEl","attachClick","volumeProgressLineContainer","tunnel","progressWrapper","playingDetails","PopupPinMessage","unpin","canUnpin","oneSide","pinButtonText","GAP","WIDTH","PinnedMessageBorder","barHeight","markHeight","trackHeight","clipPathId","clipPath","markTranslateY","trackTranslateY","handleScrollSideEvent","lastY","_AnimatedSuper","animateFirst","currentIndex","reflow","previousIndex","fromTop","ignorePrevious","previousRow","AnimatedSuper","_AnimatedCounter","animatedSuper","decimal","previousDecimalNumber","previousByDecimal","decimalNumber","AnimatedCounter","ALWAYS_FLOATING","_ChatPinnedMessage","dAC","lastScrollDirection","correctAfter","gotRest","backLimited","refreshPosition","pinnedIndex","writeTo","writeMediaTo","ChatPinnedMessage","formatUserPhone","AppEditContactTab","isContact","privacy","isNew","notificationsCheckboxField","profileNameDiv","profileSubtitleDiv","phoneRow","notificationsRow","privacyRule","ASSETS_PATH","AudioAssetPlayer","assets","audioAsset","getGroupCallAudioAsset","constraintSupported","constraint","getAudioConstraints","constraints","getScreenConstraints","skipAudio","getScreenStream","screenStream","track","getStream","getStreamCached","_cache","isScreen","getVideoConstraints","stopTrack","GROUP_CALL_AMPLITUDE_ANALYSE_COUNT_MAX","GROUP_CALL_AMPLITUDE_ANALYSE_INTERVAL_MS","RTMP_UNIFIED_CHANNEL_ID","RTMP_UNIFIED_QUALITY","StringFromLineBuilder","word","separator","toTelegramSource","fromTelegramSource","getAmplitude","rms","WEBRTC_MEDIA_PORT","fixMediaLineType","performCandidate","getConnectionTypeForMediaType","generateMediaFirstLine","port","payloadIds","connectionType","SDPBuilder","sId","bundleMids","bundle","transport","skipCandidates","fingerprint","candidate","streamName","sourceGroups","addMsid","addSource","ssrc","ssrcGroup","isAnswer","isApplication","codec","isInactive","payloadTypes","hdrexts","hdrext","parameters","fbs","fb","conference","IS_FIREFOX","AudioStreamAnalyser","streamSource","analyser","_StreamManager","streamAnalyser","amplitudes","inputStream","outputStream","kind","itemSource","handled","oldTrack","canCreateConferenceEntry","transceiverInit","tracks","transceiver","mediaTrackType","trackIdx","sender","StreamManager","CallInstanceBase","streamManager","isAudioGood","isVideoGood","endpoint","isOutput","elementEndpoint","useStream","outputDeviceId","createDataChannel","connection","createPeerConnection","ConferenceEntry","generateSsrc","LocalConferenceDescription","isSending","CallConnectionInstanceBase","stopStream","filterServerCodecs","mainChannels","performExtmap","extmap","SDP","session","mediaSections","__privateAdd","_session","_media","__privateSet","__privateGet","splitStringByLimitWithRest","UniqueNumberGenerator","_min","_max","maxTries","_try","SDPAttributeSplitted","SDPMediaLineParts","protocol","_type","_port","_protocol","_ids","SDPLine","_mediaLineParts","_parsed","_SDPAttributeInner","missed","_lines","_prefix","_nestedMap","_missed","_keys","nestedMap","innerParts","SDPAttributeInner","_SDPAttributes","_attributes","attributes","attributesMap","linesArray","SDPAttributes","SDPMediaSection","_mediaLine","_direction","resultShouldBeArray","SDPSessionSection","_sessionId","parseSdp","createSection","sessionSection","lineStr","isIncorrectSdpLine","parseSdpLine","addSimulcast","sdp","generator","originalSsrcs","ssrcs","ssrcs2","ssrcsStrLines","ssrc2","parseSourceGroups","sdpLines","telegramSourceGroups","semantics","parseMediaSectionInfo","clientInfo","fixLocalOffer","offer","hasMunged","mediaLine","mediaLineParts","localMLine","codecIds","payload","correctMLine","sectionInfo","newData","newSdp","newChannel","mungedSdp","processMediaSection","GroupCallConnectionInstance","dataChannel","localSdp","groupCall","groupCallId","processedChannels","audioChannel","videoChannel","useChannel","isNewConnection","originalOffer","entriesToDelete","answerDescription","GROUP_CALL_STATE","GROUP_CALL_STATE2","GroupCallInstance","connectionState","raise","connectionInstance","discard","rejoin","isDiscarded","isUpdatingMeInCurrentCall","generateSelfVideo","doNotDispatchParticipantUpdate","hasLeft","oldSsrcs","makeSsrcFromParticipant","mute","makeSsrcsFromParticipant","modifiedTypes","oldSsrc","oldSource","oldEntry","createMainStreamManager","joinVideo","IS_MUTED","audioSource","GroupCallsController","currentGroupCall","iceConnectionState","groupCallsController","getImportersLoader","requested","importers","importersMap","lastImporter","importer","AppChatInviteLinkTab","chatInviteLinksTab","isExpiring","isUsageLimit","ChatInviteLink","usage","StarsAmount","dialogElements","onResult","toggleRequest","AppChatRequestsTab","deleteImporter","button2","addButton","dismissButton","ChatRequests","oldStackedAvatars","oldStackedAvatarsMiddlewareHelper","avatars","peerFullAcked","peerFull","recentRequesters","ChatActions","supportedActions","langPackKeyMap","peerSettingsAcked","peerSettings","setBadgeContent","cnTopbarLive","TopbarLiveButton","animating","setAnimating","animationTrigger","createClassnames","nextFrame","enterTransition","classes","onBeforeEnter","onEnter","onAfterEnter","endTransition","exitTransition","onBeforeExit","onExit","onAfterExit","noopTransition","createSwitchTransition","initReturned","returned","setReturned","isExiting","triggerTransitions","createComputed","TRANSITION_MODE_MAP","Transition","classnames","Skeleton","TopbarLive","watching","onJoin","RTMP_STATE","RTMP_STATE2","RtmpCallInstance","RtmpCallsController","callId","nextRandomUint","call","currentCall","checkJoined","triedRejoin","it","rtmpCallsController","useCurrentRtmpCall","setCall","setPeerId","ChatLive","floating","setWatching","useChat","isGroupCallActive","_chat","broadcast","call_active","call_not_empty","getFullChat","appProfileManager","getChatFull","fullChat","wasPeerId","appGroupCallsManager","getGroupCallFull","onJoinClicked","joinLiveStream","cnRtmpData","RtmpData","keyVisible","setKeyVisible","keyContent","toggleKeyVisible","stopPropagation","onCopy","showRevoke","onRevoke","_v$4","contrast","_v$5","_v$6","_v$7","_v$8","_v$9","_v$10","_v$11","_v$12","cnPopup","RtmpStartStreamPopup","btnMore","regularText","_revokeKey","_dispose","setUrl","setKey","setLoading","_setLoading","_setUrl","_setKey","dispose2","RtmpStartStreamPopupContent","onStreamStart","_onStreamStart","onRevoked","_fetchData","revoke","fetchRtmpUrl","catch","forceHide","onEndStream","createGroupCall","joinCall","SearchIndex","searchText","queryWords","minChars","newFoundObjs","fullTexts","queryWordsLength","fullText","foundChars","isLastWord","fullTextLength","aLeftChars","bLeftChars","Languages","pickLanguage","multi","ignoreCase","translated","indexObjectArray","ChatTranslation","IntlElement","peerTranslation","compareAndUpdate","setLanguage","separatorDown","appTranslationsManager","togglePeerTranslations","feature","language","PINNED_ALWAYS_FLOATING","ChatTopbar","resize","floatingHeight","person","IS_LIVE_STREAM_SUPPORTED","deleteButton","deleteButtonText","pinnedContainers","pinnedContainer","LEFT_COLUMN_ACTIVE_CLASSNAME","onBtnBackClick","RIGHT_COLUMN_ACTIVE_CLASSNAME","isFirstChat","contactPeerId","showReport","showDelete","onConfirmed","reportSpam","deleteChat","folder","FOLDER_ID_ALL","requestsPending","isTopMessage","byCurrent","newAvatar","newAvatarMiddlewareHelper","isSaved","needArrowBack","usePeerId","useThreadId","isAnyChat","setTitleCallback","setStatusCallback","setRequestsCallback","setActionsCallback","canHaveSomeButtons","isPinnedMessagesNeeded","newPinnedMessage","originalChat","minusFirst","historyStorageKey","onHistoryCount","setAuto","needClear","AppPrivateSearchTab","onDatePick","getAutoDownloadSettingsByPeerId","photoSizeMax","videoSizeMax","fileSizeMax","easeOutQuadApply","HEIGHT","ChatBackgroundGradientRenderer","getProgress","transitionValue","nextPositionTail","frames","shift","phase","curveMax","curve","distances","nextPos","distance","tail","curPos","pixels","colorsLength","positionsForPhase","previousPhase","centerDistanceY","centerDistanceY2","centerDistanceX","swirlFactor","theta","sinTheta","cosTheta","pixelX","pixelY","distanceSum","colorX","colorY","distanceX","distanceY","tails","nextPhaseOnIdx","inc","currentPhaseCurve","nextPhaseCurve","curves","SCALE_PATTERN","USE_BITMAP","IS_IMAGE_BITMAP_SUPPORTED","_ChatBackgroundPatternRenderer","imageBitmap","imageWidth","imageHeight","patternHeight","topY","endY","bottomY","ChatBackgroundPatternRenderer","getDialogKey","getSearchType","getHistoryStorageKey","getSearchStorageFilterKey","inputFilter","hashtagType","reactionsPart","getHistoryStorageType","HANDLE_EVENT","ACTIVE_CLASS_NAME","AXIS_Y_KEYS","AXIS_X_KEYS","attachListNavigation","waitForKey","activeClassName","cancelMouseDown","waitForKeySet","keyNames","getCurrentTarget","setCurrentTarget","scrollTo","hadTarget","getNextTargetX","currentTarget","isNext","nextTarget","getNextTargetY","endProperty","currentRect","targetRect","handleArrowKey","fireSelect","canContinue","attached","resetTarget","_onKeyDown","stringMiddleOverflow","useScreenSize","screenSize","setScreenSize","ScrollableYTsx","onScrolledBottom","onScrolledTop","SEARCH_TYPES","DEFAULT_SEARCH_TYPE","renderHistoryResult","searchType","addDialogAndSetLastMessage","saved_peer_id","containerEl","createSearchLoader","nextRate","requestHistoryOptions","isPublicHashtag","isCacheableSearch","toggleHistoryKeySubscription","getHistory","getMessageByPeer","createParticipantsLoader","getParticipants","forMessagesSearch","newLength","SearchFooter","pickDateBtn","pickUserBtn","resultsShown","choosingSender","SearchMobileResults","SearchMobileTop","hasSearchTypes","searchTypesScrollable","reactionsScrollable","SearchMobileButtons","makeButton","onArrowButtonClick","TopbarSearch","isSmallScreen","mobile","isInputFocused","setIsInputFocused","setValue","totalCount","setTotalCount","setMessages","sendersPeerIds","setSendersPeerIds","setLoadMore","setTarget","filteringSender","setFilteringSender","filterPeerId","setFilterPeerId","senderInputEntity","setSenderInputEntity","setSavedReactionTags","setReactionsElement","setReaction","setSearchType","showingSmallResults","setShowingSmallResults","shouldShowResults","shouldHaveListNavigation","lookingHashtag","startsWith","isHashtag","shouldShowReactions","shouldShowSearchTypes","shouldShowFromPlaceholder","onActive","shouldBlur","onPop","pushItem","removeItem","onInputClear","wasEmpty","onClear","onBack","alwaysShowClear","verifyDebounce","hashWidth","FontFull","fromText","fromWidth","fromSpan","filtering","_isHashtag","offsetWidth","setPlaceholder","PeerEntity","onPromises","SearchTypeEntity","notList","_searchType","MIN_HEIGHT","MAX_HEIGHT","scrollableDiv","previousElementSibling","nextElementSibling","ArrowButton","inputSearchTools","updateChatSearchContext","setMessageId","Search","isSender","isEmptyQuery","_reaction","onSearchTypeChange","previousActive","tagToReactionCount","tagsToMessageReactions","reactions_as_tags","onSavedTags","previousLock","reactionsContext","chosenReactionCount","chosen_order","getSorted","reactionsScrollableDiv","Tag","setCanRenderAvatars","renderCounter","allReactionsSticker","lastElementChild","Block","appReactionsManager","getSavedReactionTags","removeEventListener","setArrowBack","footerElement","resultsElement","topElement","calculateReactionsHeight","calculateSearchTypesHeight","onShowingSmallResultsChange","onTopActive","calculateResultsHeight","paddingVertical","canFilterSender","_tmpl$11","_ref$5","_tmpl$12","searchTypesScrollableDiv","_ref$6","_el$23","_tmpl$13","_el$25","_tmpl$14","_el$26","_ref$7","_el$28","_tmpl$15","_c$7","_el$30","_c$8","_el$32","_tmpl$16","_el$33","_el$34","averageColorFromCanvas","pixel","pixelsLength","outPixel","averageColorFromImageSource","imageSource","DIMENSIONS","averageColorFromImage","averageColor","imageUrl","highlightingColor","rgba","rgbaToHsla","CHAT_SEARCH_KEYS","Chat","isMainChat","excludeParts","theme","wallPaper","skipAnimation","onCachedStatus","isGlobalTheme","globalTheme","globalWallPaper","newTheme","shouldComputeHighlightingColor","getColorsFromWallPaper","isColorBackground","previousGradientRenderer","previousPatternRenderer","previousPatternCanvas","isPattern","intensity","isDarkPattern","patternRenderer","gradientCanvas","_gradientRenderer","setOpacityTo","opacityMax","getHighlightningColor","hsla","wrappedCallback","setBackground","bindPromiseToDeferred","getThemeByEmoticon","accountThemes","maybeResetBackground","_fullPeer","ChatInput","ChatContextMenu","isAnonymousSending","freezeObservers","freeze","APP_TABS","createUnifiedSignal","animateElements","topbarSearch","otherPromises","needSearch","setNeedSearch","showingReactions","helperToo","noForwards","isRealGroup","requestHistoryOptionsPart","newKey","bubblesSetPeerPromise","sharedMediaTab","ignoreThreadId","historyStorageTransferable","is","canGiftPremium","isPaidReaction","messageReactions","PopupDeleteMegagroupMessages","isDanger","onConfirmClick","iconLeft","fields","restricting","takeOut","editBanned","kickFromChannel","reportMessages","doFlushHistory","deleteMessages","fromPeerIds","isSinglePeer","nameStart","onRowCreation","nestedTo","createTitle","peerTitlePromise","rightButtonIcon","onAnyChange","onExpand","onScroll","createdFields","createField","chatPermissionsContainer","banning","setBanning","collapsed","setCollapsed","collapsedName","i18nElement","scrollPosition","clientSize","scrollSize","newScrollPosition","_hasRights","canRevoke","foundGiveaway","isSelectionEmpty","selectionRange","preloadAnimatedEmojiSticker","toneIndex","getEmojiToneIndex","saveLottiePreview","wrapStickerEmoji","_PopupReportMessagesConfirm","onFinish","PopupReportMessagesConfirm","PopupReportMessages","preloadStickerPromise","goingNext","safeWindowOpen","PopupSponsored","_mediaSize","processDialogElementForReaction","isMine","PopupReactedList","canViewReadParticipants","loaders","hasReadParticipants","readUserIds","skipReadParticipants","skipReactionsList","tabContent","prevId","REACTIONS_CLASS_NAME","REACTION_CLASS_NAME","REACTIONS_MAX_LENGTH","REACTION_SIZE","PADDING","REACTION_CONTAINER_SIZE","CAN_USE_TRANSFORM","SCALE_ON_HOVER","ChatReactionsMenu","renderPromises","availableEffects","topReactionsPromise","allRecentReactionsPromise","topReactionsSlicedPromise","recentReactionsPromise","topDocIds","recentDocIds","topSlicedDocIds","canShrink","hasNativeReaction","emojiGroup","reactionDiv","players","widthContainer","reactionsContainer","availableReactionsResult","peerAvailableReactionsResult","peerAvailableReactions","scaleContainer","appearWrapper","selectWrapper","selectLoadPromise","selectPlayer","canSaveMessageMedia","cloneDOMRect","PopupToggleReadDate","Part","lastSeen","title1","text1","lockedText","buttonText1","appPrivacyManager","setPrivacy","title2","text2","buttonText2","readTime","globalPrivacy","getGlobalPrivacySettings","setGlobalPrivacySettings","hide_read_marks","PopupTranslate","originalTextWithEntities","WrappedMessage","limited","capture","limiting","setLimiting","noTextFormat","translatable","detectedLanguage","getRichSelection","startContainer","startOffset","endContainer","endOffset","needle","textNode","insertedStartNode","insertedEndNode","valueBefore","getRichValueWithCaret","startIndex","endIndex","SUPPORTED_ENTITIES","valueAfter","detectLanguageForTranslation","TransitionGroup","observeElement","transition","disposers","exitElement","PopupReportAd","onAdHide","onBackClick","setSections","report","reportSponsoredMessage","renderSection","prevText","_data","hasReported","hasHidden","setTransition","onTransition","isStart","activeHeight","activeSection","removeProperty","transitions","setActiveSection","reportResult","_sections","btnCloseAnimatedIcon","headerTransition","transitionTime","onTransitionStartAfter","titleRef","isHeavy","WeakMap","Uint8Array","tagReactionElement","selectedMid","menuPadding","reactionsMenu","reactionsMenuPosition","reactionsCallbacks","unfave","buttonTextElement","wrapDraftText","newTextWithEntities","isPrivate","messageWithText","whitespaceLength","badSelectors","tagTitle","renameTitle","inputs","openPeer","withTarget","isGoodType","hasTarget","viewsButton","outboxReadDate","isViewingReactions","reactedLength","i18nElem","fakeText","AVATAR_SIZE","MAX_AVATARS","PADDING_PER_AVATAR","fakeElem","hasMenu","emojisButton","setPadding","inputsPromise","threadMessage","msgId","htmlParts","documentFragmentToHTML","newRect","isReactionsMenuVisible","offsetSize","nextVisiblePart","MIN_NEXT_VISIBLE_PART","minSize","SendMenu","stickerDocId","effect","MAX_LENGTH_QUESTION","MAX_LENGTH_OPTION","MAX_LENGTH_SOLUTION","PopupCreatePoll","radioLabel","isInputEmpty","SendContextMenu","settingsCaption","quizElements","quizSolutionCaption","quizHr","quizSolutionContainer","quizSolutionSubtitle","question","answers","quizSolution","quizSolutionEntities","inputMediaPoll","questionField","deleteBtn","scaleMediaElement","mimeType","quality","createPosterFromMedia","createPosterFromVideo","getGifDuration","src","arrayBuffer","defineNotNumerableProperties","AUDIO_MIME_TYPES_SUPPORTED","wrapDraft","draft","apiEntities","SelectedEffect","setElement","lastElement","getAvailableEffects","appDocsManager","getDoc","static_icon_id","InputStarsField","inputMode","withLinebreaks","star","PopupMakePaid","onSave","editingFrom","withFooterConfirm","parseInt","stars_paid_post_amount_max","currentPopup","MAX_WIDTH","getCurrentNewMediaPopup","PopupNewMedia","files","willAttachType","ignoreInputValue","file","willAttach","shouldCompress","itemDiv","onlyVisible","actionsPromises","captionMaxLength","canSend","canSendPhotos","canSendVideos","canSendDocs","mimeTypes","IMAGE_MIME_TYPES_SUPPORTED","VIDEO_MIME_TYPES_SUPPORTED","inputContainer","wrappedDraft","isMedia","setEffect","widthStr","heightStr","containerWidthStr","containerHeightStr","strippedBytes","getPreviewBytesFromURL","mediaWithSpoilers","above","toPush","_file","sendFileDetails","foundBad","sendFileParams","sendingParams","willSendPaidMedia","SERVER_IMAGE_MIME_TYPES","convertIncompatible","scaledBlob","audioDecodedByteCount","scaled","isAudio","foundPhotos","foundVideos","foundFiles","calcImageInBox","firstType","_isAudio","oldSendFileDetails","albumContainer","AutocompleteHelper","fromController","StickersHelper","controller","EmojiHelper","wrapAppEmoji","customEmojiRenderer","firstChar","_AutocompletePeerHelper","doNotShow","BASE","AutocompletePeerHelper","processPeerFullForCommands","botInfos","commands","CommandsHelper","AutocompleteHelperController","helper","preserveHelper","MentionsHelper","topMsgId","global","trimmed","_ReplyKeyboard","ReplyKeyboard","generateQId","queryId","resultId","InlineHelper","queryAndResultIds","canSendInline","botResults","gifsMasonry","isGallery","readBlobAsDataURL","dataURL","switchTo","btnSwitchTo","ChatBotCommands","parseMarkdown","raw","currentEntities","noTrim","pushedEntity","pushEntity","findConflictingEntity","newTextParts","rawOffset","MARKDOWN_REG_EXP","matchIndex","possibleNextRawOffset","beforeMatch","languageMatch","whitespace","previousPart","isSOH","MARKDOWN_ENTITIES","rawOffsetDiff","newText","combineSameEntities","SEND_AS_ANIMATION_DURATION","ChatSendAs","sendAsButtons","previousAvatar","onSendAsMenuToggle","isChanged","sendAsPeer","sendAsPeerId","needPremium","executeButtonsUpdate","updatingPromise","wasSkippingAnimation","sendAsPeers","repliesAreEqual","reply1","reply2","draftsAreEqual","draft1","draft2","getAttachMenuBotIcon","ATTACH_MENU_BOT_ICON_NAME","matchUrl","URL_REG_EXP","getMarkupInSelection","onlyFull","commonAncestor","contentEditable","treeWalker","markdownTags","_node","MarkupTooltip","tools1","tools2","applyMarkdown","applyDiv","delimiter1","delimiter2","delimiter3","matchUrlProtocol","currentMarkups","markup","activeButtons","isLinkToggle","rowsWrapper","currentTools","bodyRect","selectionRect","inputRect","sizesRect","oldHeight","isFirstShow","activeElement","getCharAfterRange","nextTextNode","findNextTextNode","findFirstTextNode","cacheMap","clearMarkdownExecutions","maybeClearUndoHistory","commandsMap","canCombine","hasMarkup","resetCurrentFontFormatting","processCurrentFormatting","executed","restore","resetCurrentFormatting","fontFamily","FontFamilyName","handleMarkdownShortcut","formatKeys","markdownType","eachTimeout","getNextTimeout","runFirst","_callback","run","eachSecond","RECORD_MIN_TIME","REPLY_IN_TOPIC","PEER_EXCEPTIONS","_ChatInput","onIdleChange","idle","accept","opusDecodeController","canSendWhenOnline","richValue","markdownEntities1","caretPos","markdownEntities","autocomplete","restricted","showDiscardPopup","sourceNode","frequencyData","lastUrl","needReturn","originalDraft","canPassEntitiesTypes","possibleBtnMenuContainer","className2","fakeRowsWrapper","fakeSelectionWrapper","onHideAuthorClick","isChangingAuthor","onHideCaptionClick","forwardElements","forwardButtons","forwardBtnMenu","replyTitle","isReaction","scaler","webViewTempId","waitingForWebView","botMenuButton","Recorder","typedArray","dataBlob","canGift","premium_gift_attach_menu_icon","attachMenuButtons","attachMenuBots","attachMenuBotsButtons","shouldBeTop","fileList","newMediaPopup","makeControlButton","neededFakeContainer","oldFakeWrapperTo","borderRadius","fakeSelectionRect","fakeRowsRect","initTranslateX","minTimestamp","isPeerLocalMuted","hasMentions","ignoreEmptyValue","webPageOptions","isHelper","fromUpdate","currentDraft","draftReplyToMsgId","firstChange","btnScheduled","replyKeyboard","sendMenu","goDownBtn","botCommandsToggle","attachMenu","previousSendAs","sendAs","filteredAttachMenuButtons","canPinMessage","canSendPlain","ackedPeerFull","ackedScheduledMids","setSendAsCallback","peerTitleShort","placeholderParams","haveSomethingInControl","applySameType","prevOffset","menuButton","hasBotCommands","oldKey","oldArgs","messageInput","isEditingAndLocked","oldInputField","IS_STICKY_INPUT_BUGGED","fixSafariStickyInputFocusing","isSendShortcutPressed","checkIconClick","ex","ey","webPageUrl","urlEntities","foundUrl","oldWebPage","newReply","positionElement","sizeElement","insertText","insertEntity","fullValue","matches","counter","insertRichTextAsHTML","hadValue","newEntities","foundHelper","needPlaceholder","setPreloaderShow","inlineMatch","sendingFew","textOverflow","getLeftDuration","leftDuration","forwarding","helperFunc","replyToMsgId","replyToStoryId","replyToQuote","canSetDraft","fireEvent","clearValue","fixSafariStickyInput","clearInput","clearReply","editMsgId","noWebPage","trimmedValue","MAX_LENGTH","hideCaptionCheckboxField","restoreInputLock","replyFragment","fromPeerIdsMids","messagesWithCaptionsLength","peerTitles","hideCaption","titleKey","senderTitles","firstMessage","usingFullGrouped","subtitleFragment","intl","_message","dropdownHover","draftMessage","callerFunc","replyParent","oldReply","haveReply","getStoryPrivacyType","privacyType","focusInput","newEvent","StoriesCacheType","insertStory","onlyId","cacheType","pinnedToTop","valueToInsert","_storyItem","untrackActions","createPositions","onPosition","globalPositions","createStoriesStore","getNearestStory","offsetPeer","newStoryIndex","isPeerEnd","isLastPeer","newPeer","initialState","ended","buffering","hideInterface","playAfterGesture","elapsedTimeOnPause","changeTimeout","storyDuration","archive","freezedSorting","loadState","singlePeerId","currentListType","postponedPositions","getPeerInitialIndex","maxReadId","unreadIndex","getNearestStories","nearestStory","checkForNearestSkipped","getPinnedStories","getStoriesArchive","storyItems","addPeers","getPeerStories","peerStories","addPeerStories","getAllStories","storiesAllStories","has_more","peer_stories","peerIndex","stop","toggleInterface","restart","goToNearestStory","goToNearestStorySafe","STORY_DURATION","viewerReady","resetIndexes","toggleMute","toggleSorting","onStoriesPosition","setBuffering","setLoop","setChangeTimeout","createListenerSetter","calculateStoryHeight","calculateStoryWidth","calculateSize","onResize","getPeerIndex","userStoriesToPeer","max_read_id","modifyIndexes","modifyCurrentIndex","previousPeers","previousPeerIdx","previousPeer","newIndex","newCurrentIndex","merge","canAddPeer","deletePeer","newPeers","onStoryUpdate","modifiedPinned","modifiedArchive","modifiedPinnedToTop","storyIndex","onStoryNew","Pinned","onStoryDeleted","Archive","onStoriesStories","currentStoryIndex","insertedAt","onStoriesRead","ignoreFreezed","previousPosition","singleStory","onLoadCallback","StoriesContext","createContext","StoriesProvider","Provider","useStories","useContext","isTargetAnInput","getStoryRepostInfo","mediaAreaChannelPost","mediaArea","STORY_HEADER_AVATAR_SIZE","STORY_SCALE_SMALL","STORIES_PRESERVE","STORIES_PRESERVE_HIDDEN","STORY_REPOST_ICON","CHANGELOG_PEER_ID","stories_changelog_user_id","StorySlides","storiesForSlides","splitByDays","getStoryDateTimestamp","setHours","getTime","storiesSplittedByDays","currentStory","StorySlide","mergeProps","slideIndex","calculateAndSetProgress","onTick","ViewerStorySlidesSlide","DEFAULT_REACTION_EMOTICON","isDefaultReaction","StoryInput","focusedSignal","inputEmpty","setInputEmpty","inputEmptySignal","inputMenuOpen","setInputMenuOpen","inputMenuOpenSignal","recording","setRecording","sharedMedia","setType","Stories","isStandalone","onReactionClick","sent_reaction","sendReaction","btnReactionEl","tabIndex","btnReaction","scheduled","downButton","reply","forwardOptions","mentionButton","commandsHelper","botCommands","globalMentions","ViewerStoryReactions","ViewerStory","Viewer","playAfterFocus","freezeFocused","_focused","playAfter","onMenuToggle","constructPeerHelpers","isPublic","setCanForwardStory","_recording","visibleButtons","chatInputSize","chatInputBtnSendMargin","chatInputPadding","focusOffset","owner","getOwner","onChangePeer","setInputReady","runWithOwner","setReplyTo","onFileSelection","onRecording","onUpdateSendBtn","onMessageSent2","forwardStoryCallback","onMessageSent","onShareButtonClick","btnSendContainer","JOINER","renderStoryReaction","uReaction","isCustomEmoji","getCustomEmojiDocument","document_id","getReaction","stickerEmojiRaw","getAvailableReactions","select_animation","static_icon","around_animation","downloadMedia","StoryMediaArea","rotation","coordinates","playingMemo","setChildren","isLocation","isPost","onLocationClick","geoPoint","onAnchorClick","ignoreClickEvent","hasPopup","click","setTooltipCloseCallback","effectSize","fireSame","showNotCenteredTooltip","onPostClick","openPost","onLinkClick","openUrl","onTypeClick","renderReaction","ViewerStoryMediaAreaReactionInner","hasCount","createRenderEffect","ViewerStoryMediaAreaReactionBubbles","ViewerStoryMediaAreaReactionBubble","small","ViewerStoryMediaAreaReactionCount","ViewerStoryMediaArea","ViewerStoryMediaAreaReaction","ViewerStoryHeaderAvatar","ViewerStoryHeaderName","bindOnAnyPopupClose","onAnyPopupClose","onShareClick","createSharingPicker","inputPeer","sendOther","inputMedia","showMessageSentTooltip","noforwards","copyLink","topMenuOptions","avatarInfo","ViewerStoryInfoAvatar","peerTitleInfoElement","peerTitleInfo","ViewerStoryInfoName","setVideoDuration","setCaption","repost","setRepost","captionOpacity","setCaptionOpacity","captionActive","setCaptionActive","setDate","canShareStory","setCanShareStory","sendingReactionSignal","isPublicSignal","sendingReaction","setSendingReaction","setIsPublic","noSound","setNoSound","sliding","setSliding","transitionSignal","setPrivacyType","mediaAreas","setMediaAreas","setStackedAvatars","tooltipCloseCallback","setReactionsMenu","expireDate","expire_date","forceReaction","setForceReaction","currentStoryMiddleware","fireReactionAnimation","storyDiv","fireAroundAnimation","sentReaction","isNewReaction","createReactionsMenu","inited","setInited","openSide","getOpenPosition","noMoreButton","shouldMenuBeVisible","haveToCreateMenu","setVideoListeners","onWaiting","onCanPlay","networkState","NETWORK_LOADING","isntEnoughData","readyState","HAVE_FUTURE_DATA","onFirstActive","getState","seenTooltips","storySound","muteTooltipOptions","appStateManager","setByKey","joinDeepPath","setStoryMeta","videoAttribute","nosound","public","setStory","uStackedAvatars","uCaption","uContent","uMediaAreas","uRepost","recentViewersMemo","previousRecentViewers","recentViewers","recent_viewers","passMaskedLinks","captionNode","ViewerStoryContentMediaContainer","ViewerStoryContentMedia","playOnOpen","onMedia","HTMLVideoElement","reactionNode","isDefault","media_areas","allReady","setAllReady","readyCount","setReadyCount","repostInfo","headerContent","setHeaderContent","ViewerStoryHeaderRepost","fwdFromPeerId","fwdFromStoryId","from_name","peerTitleOptions","processStoryPromise","headerPeerTitle","headerAvatar","ViewerStoryRepostSmall","ViewerStoryHeaderRepostTitle","ViewerStoryRepost","ViewerStoryHeaderRepostIcon","inputReady","pollViewedStories","pollViewedStoriesSet","pollViewedStoriesInterval","readStories","viewedStories","incrementStoryViews","readDebounced","lastId","isDebounced","playOnReady","slides","shouldAddTranslateX","calculateTranslateX","diffToActive","fadeIn","storyWidth","MARGIN","smallStoryWidth","activeVideoDuration","muteButtonButton","muteButton","ignoreOnClose","CAPTION_ACTIVE_THRESHOLD","wasPlayingBeforeCaption","onCaptionScrollTop","captionScrollable","captionText","scrolling","onCaptionScroll","scrollPath","currentPath","onCaptionClick","captionContainer","ViewerStoryCaption","hasReply","ViewerStoryCaptionText","ViewerStoryCaptionTextCell","contentItem","ViewerStoryContentItem","getDateText","Seconds","Minutes","Hours","Days","unshift","ViewerStoryHeaderSecondary","passive","textRight","needStoryInput","storyInput","shareStory","isPeerArchived","isSubcribedToPeer","stories_hidden","togglePeerHidden","toggleStoriesHidden","togglePinned","downloadToDisc","toggleSidebar","canViewStatistics","deleteStories","privacyIconMap","contacts","onPrivacyIconClick","headerDiv","privacyIconElement","privacyIcon","_ref$8","ViewerStoryPrivacy","getViews","viewsCount","openViewsList","viewsMap","getStoryViewsList","_nextOffset","storyView","view","middlewareHelperLoader","onDeleteClick","getAround","getStoriesViews","footerReactionElement","_el$20","ViewerStoryFooterLeft","_el$21","ViewerStoryFooterRight","_el$22","ViewerStoryFooterIconIcon","_v$13","_v$14","ViewerStoryFooterIcon","_el$24","_ref$9","_v$15","_v$16","ViewerStoryFooterReaction","isReacted","ViewerStoryFooter","hideOnSmall","isChangelog","onProfileClick","fromLeft","fromRight","setFadeIn","shouldBeVisible","_el$27","_el$29","_el$31","_el$35","_el$36","_el$37","ViewerStoryHeader","_ref$10","_ref$11","_ref$12","_el$38","_el$39","_v$31","ViewerStoryMediaAreas","_v$32","_el$40","ViewerStoryInfo","_v$17","ViewerStoryContainer","_v$18","hold","_v$19","_v$20","_v$21","ViewerStoryContent","_v$22","_v$23","ViewerStoryShadow","hasCaption","_v$24","ViewerStorySlides","_v$25","_v$26","ViewerStoryHeaderLeft","_v$27","ViewerStoryHeaderInfo","_v$28","ViewerStoryHeaderRow","_v$29","hasRepost","ViewerStoryHeaderTime","_v$30","ViewerStoryHeaderRight","StoriesViewer","setShow","wasShown","shown","CANCELABLE_KEYS","throttledKeyDown","activeStoryContainer","getActiveStoryContainer","isContentEditable","overlaysActive","getElement","setTextColor","toggleOverlay","swipeHandler","removeListeners","onDivClick","backgroundDiv","closeButton","storiesReadiness","storiesShouldBeReady","performance","wasReady","openOnReady","createStories","itemsToRender","preserve","getItemsToRender","_ref$13","ViewerClose","_el$41","_el$42","_ref$14","_ref$15","noWait","_v$33","isInvisible","isReady","_v$34","_v$35","_v$36","ViewerBackground","pauseTimeout","onSwipe","TouchEvent","jumpOn","closeOn","neighbourIndex","neighbour","verifyTouchTarget","onReset","playStories","avatarFrom","cssText","querySelectorAll","needAvatarOpacity","overflow","horizontal","rectFrom","rectTo","getComputedStyle","makeKeyframes","visibility","translateX","translateY","containerAnimation","opacityAnimations","activeIndex","animateSmallContainers","isDarkOverlayActive","checkAnimations2","wasPlayingBeforeIdle","wasPlayingBeforeOverlay","createStoriesViewer","getElementById","createStoriesViewerWithStory","AppMyStoriesTab","openArchive","menuBtn","lastLength","AppSearchSuper","STATE_FOLDED","STATE_UNFOLDED","useCollapsable","_setProgress","isTransition","setIsTransition","folded","wasProgress","_animation","animationOpening","clearAnimation","isWheel","newState","onWheel","unfold","fold","setListeners","PeerTitleTsx","_StoriesList","viewerPeer","setViewerPeer","setContainerRect","toRect","fromRect","myIndex","spaceEvenly","ITEM_WIDTH","itemsTarget","onContainerClick","onItemClick","ITEM_AVATAR_SIZE","STACKED_LENGTH","foldedLength","isItemOut","_indexes","Item","calculateMovement","marginEvenly","containerPadding","CONTAINER_PADDING","cssProperties","desiredX","indexOffsetX","_scale","isLastIn","shouldStoriesSegmentsBeFolded","ListItem","isRead","isMasked","movement","ListItemName","MOVE_Y","CONTAINER_HEIGHT","scrollableX","getMenuScrollable","setScrolledOn","foldInto","resizeCallback","getScrollable","listenWheelOn","shouldIgnore","disableHoverWhenFolded","List","ListContainer","appNotificationsManager","toggleStoriesMute","toggleHidden","isSelf","appSidebarLeft","isArchive","isPeerStoriesMuted","isMuted","multiline","StoriesList","PopupStarsPay","isReceipt","subscription","changeStarsSubscription","canceled","sendStarsForm","form_id","subscription_form_id","shouldRetry","prices","subscription_pricing","pricing","onTopup","reloadForm","dispatchEvent","getPaymentForm","setPaymentForm","isOutGift","StarsBalance","terms","btnFulfill","marginTop","fulfillStarsSubscription","hidePopupsWithCallback","getPopups","noStarsChange","getExamplesAnchor","extended_media","video_duration","multiplePhotosLang","multipleVideosLang","subscription_period","display","transactionId","transaction_id","onTransactionClick","messageAnchor","makeTablePeer","tablePeer","transactionIdSpan","tableContent","generateStandaloneOutgoingMessage","stars_amount","setSearchContext","openMedia","prevTargets","nextTargets","StarsChange","isRefund","refund","noSign","bot_id","getStarsTransactionTitleAndMedia","paidMediaPeerId","invokeApi","getChannelInput","exportedMessageLink","USE_NATIVE_SYMBOL","iconPath","InputRightNumber","haveToIgnoreEvents","ignoreNextSelectionChange","onFocus","onFocusOut","confirmed","popupPaymentVerification","itemEl","detailsClassName","photoEl","sizeAttribute","fittedSize","linesClassName","linesEl","botName","preloaderContainer","savedCredentials","lastRequestedInfo","providerPeerTitle","wrapAmount","isRecurring","hasTerms","peerTitle2","makeLabel","labelEl","pricesClassName","makePricesElements","_label","wrappedAmount","pricesElements","getTipsAmount","shippingAmount","getTotalTotal","totalAmount","setTotal","totalLabel","payI18n","canTip","tipsClassName","inputRightNumber","setInputValue","unsetActiveTip","tipEl","tipsLabel","tipsEl","tipClassName","tipButtons","tipAmount","prevTipEl","setRowIcon","setRowTitle","setCardSubtitle","methodRow","onMethodClick","previousCardDetails","previousToken","providerRow","providerAvatar","shippingAddressRow","shippingNameRow","shippingEmailRow","shippingPhoneRow","shippingMethodRow","lastShippingOption","onShippingAddressClick","onShippingMethodClick","setShippingTitle","postAddress","setShippingInfo","setShippingOption","lastShippingPricesElements","acceptTermsCheckboxField","acceptTermsRow","recurringElements","lastTmpPasword","missingInfo","_passwordState","credentials","paymentResult","asDiv","StarsStrokeStar","iconsElements","StarsStar","getStarsTransactionTitle","starsTransactionPeerFragment","starsTransactionPeerPremiumBot","starsTransactionPeerAppStore","starsTransactionPeerPlayMarket","popularAppBotsPromise","appAttachMenuBotsManager","getPopularAppBots","botIds","_wrapPhoto","spoilerContainer","renderTransaction","subtitleStatus","failed","renderSubscription","isCancelled","_self$4","_self$5","_self$6","starsNeeded","topupOptions","alwaysVisible","extended","setExtended","displayingRows","ceil","busy","giftPeerId","firstSection","isFullWidth","inbound","getStarsTransactions","lists","subscriptionsOffset","loadMoreSubscriptions","getStarsSubscriptions","subscriptions","setSubscriptionsLoader","subscriptions_next_offset","subscriptionsLoader","subscriptionsSection","transactionsSection","restSection","stars_gifts_enabled","createContactPicker","getStarsGiftOptions","getStarsTopupOptions","findClosestDifference","difference","AppEditChatInviteLink","invite","expireDateValue","timePeriodSelector","requestNeeded","approveNewMembersCheckboxField","usageLimit","usersLimitSelector","paidLinkCheckboxField","paidLinkInputField","approveNewMembersSection","rightLabel","setExpiry","setCustomTimestamp","newSteps","usersLimitSection","setNumber","setCustomNumber","ignoreNextSet","isActiveInvite","isUsername","hasSomething","AppChatInviteLinksTab","adminId","wrapInviteTitle","menuInvite","menuItem","primaryInvite","chatInviteLinkTab","menuButtons","_menuItem","editedInvite","newInvite","revokedLinks","onRevokedLinksUpdate","inviteLinkSection","openLink","additionalLinks","adminsLinks","adminsInvites","admins","admin","invitesMap","updateCallbacks","priceElement","unmount","isLimit","limitProgress","timeProgress","color1","color2","mixedColor","hslaToString","_circle","loadLinksPromise","chatInvites","chatInvitesRevoked","updateInterval","AppEditChatTab","canChangeType","canManageTopics","canChangeInfo","canDeleteChat","canPostMessages","canManageInviteLinks","canInviteUsers","chatTypeRow","setChatTypeSubtitle","inviteLinksRow","setInviteLinksCount","requestsRow","setRequestsCount","reactionsRow","availableReactionsLength","setReactionsLength","chatAvailableReactions","flags","permissionsRow","setPermissionsLength","discussionRow","topicsRow","setTopics","administratorsRow","setAdministratorsLength","membersRow","setMembersLength","removedUsersRow","setRemovedUsersLength","kickedCount","signMessagesCheckboxField","showProfilesCheckboxField","row2","showChatHistoryCheckboxField","T_ME","anchorCopy","copyWhat","copyText","Period","includeNextDay","rightNow","ONE_DAY_MINUTES","_OpeningHours","utcOffset","array2","weekly","newWeekly","ONE_WEEK_MINUTES","j","prevDay","nextDay","todayLast","tomorrowFirst","adapted_weekly_open","nowWeekday","nowHours","nowMinutes","openNow","nowPeriodTime","weeklyPeriod","lastTime","OpeningHours","rotateArray","front","back","BusinessHours","expanded","setExpanded","is24x7","set24x7","setLastKey","showInMyTimezone","setShowInMyTimezone","switchElement","updateContainerStyles","getUtcOffset","workHours","timezone","timezones","timezone_id","currentUtcOffset","getTimezoneOffset","valueUtcOffset","utc_offset","weeklyOpen","weekly_open","isDifferentTimezone","_showInMyTimezone","adaptedWeeklyOpen","adaptWeeklyOpen","isOpenNow","formatDay","opensPeriodTime","start_minute","toString","formatDays","localDays","getDaysHours","localDaysFormatted","myDays","myDaysFormatted","daysFormattedToUse","weekDays","getWeekDays","textLines","weekDay","textLine","textPeriods","AvatarListLoader","photoId","fillPropertyValue","arcParameter","rx","ry","xAxisRotation","largeArcFlag","sweepFlag","generatePathData","tl","tr","bl","isBetween","num","getRtmpStreamUrl","getRtmpShareUrl","ZOOM_STEP","ZOOM_INITIAL_VALUE","ZOOM_MIN_VALUE","ZOOM_MAX_VALUE","OPEN_TRANSITION_TIME","MOVE_TRANSITION_TIME","MEDIA_VIEWER_CLASSNAME","AppMediaViewerBase","topButtons","extraHeightPadding","draggingType","s1","scaleFactor","x1","y1","Vx","Vy","initialCenterX","initialCenterY","zoomAdd","currentCenterX","currentCenterY","zoomFactor","zoomMaxBounceValue","offsetY","scaledCenterX","scaledCenterY","scaleOffsetX","scaleOffsetY","inBoundsX","inBoundsY","minY","maxY","isZooming","hasClickedSomething","LazyLoadQueueBase","mainDiv","topbarLeft","authorRight","buttonsDiv","moveLength","adjustPosition","setLastGestureTime","cancelDrag","zoomValue","btnMenuToggle","closing","mover","wasActive","realParent","needOpacity","mediaElement","queryFrom","boxBlurCanvasRGB","el2","clipId","newClipId","newSvg","sX","sY","proportion","upscale","step","_br","toLeft","windowW","newTransform","p1","newMover","isPeerId","wrapTitlePromise","oldAvatar","oldAvatarMiddlewareHelper","MediaSize","mediaThumbnail","setupPlayer","onMoverSet","onBuffering","noAuthor","setAuthorPromise","isLiveStream","useContainerAsTarget","mediaBoxSize","setMoverPromise","useController","canPlayThrough","setSingleMedia","createPlayer","otherMediaViewer","attachedCanPlay","_onBuffering","noCanPlay","attachCanPlay","cancellablePromise","photoSizes","fullPhotoSize","cancellableFullPromise","haveImage","fullImage","AppMediaViewerAvatar","openAvatarViewer","getTarget","hadMessage","signal","useProfileColors","usePeerProfileAppearance","colorSet","setColorSet","backgroundEmojiId","setBackgroundEmojiId","colorOptions","profileColor","colorOption","LOAD_NEAREST","SHOW_NO_AVATAR","_PeerProfileAvatars","setCollapsedOn","loadCallback","checkScrollTop","SWITCH_ZONE","clickX","toRight","cancelNextClick","lastDiffX","lastX","addIndex","activeTab","renderBackgroundEmoji","hasBgColor","CANVAS_WIDTH","CANVAS_HEIGHT","MIN_SIZE","MIDDLE_SIZE","MAX_SIZE","MIN_OPACITY","MIDDLE_OPACITY","_canvas","setBackgroundColors","bgColors","backgroundStr","needWhite","IS_PARALLAX_SUPPORTED","PeerProfileAvatars","PeerProfile","onPersonalChannel","personalChannelName","isAnonymous","setTimezones","copyLocationAddress","refreshCurrentUser","updatePrivacy","oldAvatars","nameCallback","also","white","exportedInvite","businessLocation","personalChannelId","makeSkeleton","isCached","setSubtitleChildren","setTimeChildren","_subtitle","override","setPromise","timezonesList","AppEditTopicTab","isGeneral","iconDiv","confirmBtn","messagesStickerSet","isMainIcon","newTopic","oldTopic","oldEl","applyFadeAnimation","AppEditBotTab","btnIntro","btnCommands","btnSettings","suffix","historiesStorage","AppSharedMediaTab","newCloseBtn","animatedCloseIcon","createTransitionContainer","transitionContainer","makeTransitionItem","noCounter","transitionFirstItem","TitleIndex","transitionSharedMedia","sharedMediaTransitionContainer","HEADER_HEIGHT","setIsSharedMedia","getTitleIndex","isSharedMedia","transitionSubtitle","mediaTab","btnAddMembers","toInsert","isGood","canViewMembers","noProfile","AppSidebarRight","previousTab","middleWidth","willChange","appSidebarRight$1","handleTabSwipe","lockTouchScroll","lockers","filterMessagesByInputFilter","foundMsgs","neededContents","neededDocTypes","neededFlags","goodEntities","_StoriesProfileList","viewerId","setViewerId","onLengthChange","isSelecting","toggleElementCheckbox","StoriesProfileList","SearchContextMenu","attachTo","storiesPinned","navScrollableContainer","navScrollable","unlockScroll","newMediaTab","fromMediaTab","rect2","onMediaClick","targetClassName","setLastMessagePromise","display_url","same","previewDiv","aIsAnchor","elemsToAppend","sharedMediaDiv","processCallback","awaited","groupByMonth","monthContainer","contentTab","renderedPeerIds","setResults","showMembersCount","arg","intlElement","renderRecentSearch","renderParticipants","membersList","membersParticipantMap","membersMiddlewareHelper","onParticipantUpdate","wasRendered","LOAD_COUNT","lastChat","storiesList","renderChats","createPaywall","wall","paywall","wasPremium","onPremium","xd","Some4","SortedDialogList","getCount","used","slicedLength","notFilteredMessages","lastItem","mediaTabs","filters","canViewSavedDialogs","canViewSaved","canViewGroups","canViewStories","canViewSimilar","firstMediaTab","savedDialogsTab","savedTab","membersTab","storiesTab","groupsTab","similarTab","newTitle","toLoad","goFirst","newInputFilter","folderId","minDate","PrivacyType","getPrivacyRulesDetails","rules","allowPeers","disallowPeers","rule","PrivacySection","chatKey","usersKey","_peerIds","rr","exception","newPeerIds","originalType","toggleLock","AppPrivacyPhoneNumberTab","captionEl","phoneSection","sCaption","AppTwoStepVerificationSetTab","inputContent","btnReturn","AppSettingsTab","canFocus","isFirstInput","AppTwoStepVerificationEmailConfirmationTab","CodeInputField","goNext","btnChange","btnResend","AppTwoStepVerificationEmailTab","onContinueClick","btnContinue","btnSkip","email","toggleButtons","symbols","AppTwoStepVerificationHintTab","onSkipClick","saveHint","AppTwoStepVerificationReEnterPasswordTab","monkey","TrackingMonkey","verifyInput","AppTwoStepVerificationEnterPasswordTab","PasswordMonkey","getStateInterval","_state","plainPassword","auth","AppTwoStepVerificationTab","btnChangePassword","btnDisablePassword","btnSetRecoveryEmail","btnSetPassword","AppPrivacyLastSeenTab","canHideReadTime","privacySection","hideReadTimeSection","premiumSection","createButton","AppPrivacyProfilePhotoTab","AppPrivacyForwardMessagesTab","AppPrivacyAddToGroupsTab","AppPrivacyCallsTab","AppActiveSessionsTab","Session","authorizations","btnTerminate","otherSection","onTerminateClick","AppBlockedUsersTab","btnAdd","onUnblock","blocked","blockedMyStoriesFrom","convertKeyToInputKey","AppPrivacyVoicesTab","AppActiveWebSessionsTab","sessions","AppPrivacyAboutTab","AppPrivacyMessagesTab","premiumOnly","AppPrivacyAndSecurityTab","fromTab","SUBTITLE","blockedPeerIds","blockedUsersRow","twoFactorRowOptions","twoFactorRow","activeSessionsRow","websitesRow","setBlockedCount","updateBlocked","rowsByKeys","openTabWithGlobalPrivacy","updatePrivacyRow","numberVisibilityRow","lastSeenTimeRow","photoVisibilityRow","aboutRow","callRow","linkAccountRow","groupChatsAddRow","createPremiumTitle","voicesRow","messagesRow","disallowLength","allowLength","destroyed","onPremiumToggle","_enabled","onClearClick","payment","auths","_ColorPicker","rgbRegExp","updateHexInput","updateRgbInput","rgb","boxX","percentY","boxY","percentHue","hueX","rgbaArray","hslaToRgba","hexa","rgbaToHexa","eventX","eventY","posX","posY","boxDragger","saturation","lightnessX","lightnessY","lightness","ColorPicker","AppBackgroundColorTab","updateColorPicker","hexaToRgba","gridSection","isColored","requestFile","needBlur","respectPattern","_AppBackgroundTab","uploadDeferred","defaultTheme","STATE_INIT","themeSettings","uploadButton","colorButton","resetButton","blurCheckboxField","wallpaper","wallPapers","gridContainer","hasFile","isDark","hadSettings","getPixelPromise","AppBackgroundTab","eachMinute","AppPowerSavingTab","infoSection","isArray","mainKey","created","onAllChange","wasAll","RangeSettingSelector","minValue","writeValue","valueDiv","AppGeneralSettingsTab","chatBackgroundButton","initArgs","getLiteModeStatus","animationsCheckboxField","animationsRow","liteModeRow","themesContainer","themesMap","currentTheme","applyThemeOnItem","wallPaperContainer","lastOnFrameNo","lastActive","onFrameNo","availableBaseThemes","themes","defaultThemes","DEFAULT_THEME","emoticonContainer","bubbleIn","stateKey","dayRow","nightRow","systemRow","newIsNight","enterRow","ctrlEnterRow","IS_GEOLOCATION_SUPPORTED","kilometersRow","milesRow","formats","AppIncludedChatsTab","foundInFilters","editFolderTab","other","otherLegacy","otherArr","otherLegacyArr","onAppConfig","REAL_FOLDERS","categoriesSection","addedInitial","MAX_FOLDER_NAME_LENGTH","AppEditFolderTab","filterId","deleteFolderButton","inputSection","generateList","h2Text","categories","includedFlagsContainer","excludedFlagsContainer","confirmEditing","closeAfter","include","postponeFilterUpdate","dialogFilter","postponedFilterUpdate","reloadMissingPromises","chatlistInvitesLimit","chatlistInvitesPremiumLimit","chatlistInvites","onLinksLengthChange","onLinkDeletion","updateLink","wrapLink","exportedChatlistInvite","openChatlistInvite","ul","hasPeer","renderMore","AppChatFoldersTab","isSuggested","onFiltersContainerUpdate","renderFiltersPromise","FOLDER_ID_ARCHIVE","filterRendered","prevIdx","suggestedFilters","AppNotificationsTab","NotifySection","enabledRow","previewEnabledRow","inputNotifyPeer","notifySettings","applySettings","showPreviews","inputSettings","inputKey","contactsSignUpRow","soundRow","CheckboxFieldTsx","setChecked","AppLanguageTab","languages1","invokeApiCacheable","lang_pack","languages2","section1","doNotTranslate","translations","langCodeNormalized","showInMenu","preventDefault","languages","radioRows","webLangCodes","lang_code","concat","native_name","getLangPack","getCacheLangPack","autoDownloadPeerTypeSection","contactsCheckboxField","privateCheckboxField","groupsCheckboxField","channelsCheckboxField","AppAutoDownloadPhotoTab","AppAutoDownloadFileTab","debouncedSave","sizeMax","MIN","MAX_RANGE","upTo","AppAutoDownloadVideoTab","AUTO_DOWNLOAD_FOR_KEYS","AppDataAndStorageTab","autoCheckboxField","autoRow","setSubtitles","photoRow","videoRow","fileRow","openTab","onDisabledChange","autoDownloadNew","peerKeys","enabledKeys","isAll","AppQuickReactionTab","quickReaction","AppStickersAndEmojiTab","suggestStickersRow","setStickersSuggestDescription","setStickersSuggest","renderQuickReaction","loopStickersRow","suggestEmojiRow","bigEmojiRow","dynamicPackOrderRow","stickerSets","stickersContent","renderStickerSet","allStickers","changeAvatarBtn","upload","updateChangeAvatarBtn","languageArgs","giftPremium","buttonsSection","getEditProfileArgs","editProfileArgs","overwrite","AppNewChannelTab","about","PopupCreateContact","lastNameInputField","editPeer","AppContactsTab","listsContainer","sortedUserList","renderPage","_AppArchivedTab","storiesListContainer","AppArchivedTab","AppPeopleNearbyTab","isLongitudeDifferent","isLatitudeDifferent","distanceCheck","lat1","long1","lat2","long2","AppSidebarLeft","sidebarHeader","onNewGroupClick","onContactsClick","btnArchive","hasArchiveStories","themeCheckboxField","TEST_NO_STORIES","getInstallPrompt","filteredButtonsSliced","btnMenuFooter","statusMiddlewareHelper","fireOnNew","premiumMiddlewareHelper","statusBtnIcon","defaultStatuses","convertEmojiStatuses","emojiStatuses","arrays","noStatus","cloned","emojiElement","wrapStatus","onEmojiStatusChange","oldStatusMiddlewareHelper","checkUpdateInterval","pickedElements","selectedPeerId","selectedMinDate","selectedMaxDate","updatePicked","helperMiddlewareHelper","unselectEntity","onHelperLength","appendToHelper","fillTipDates","dateData","flattened","peopleContainer","hideNewBtnMenuTimeout","clearRecentSearchBtn","appSidebarLeft$1","ChatDragAndDrop","dropIcon","dropHeader","dropSubtitle","sizeX","sizeY","disableTransition","MAX_SPEED","MIN_SPEED","LineBlobDrawable","maxRadius","minRadius","speed","radDif","radiusNext","N","amplitude","speedScale","paint","pinnedTop","progressToPinned","progressNext","x2","cx","y2","WeavingState","states","x0","y0","MUTED_BY_ADMIN_STOPS","UNMUTED_STOPS","MUTED_STOPS","CONNECTING_STOPS","RTMP_STOPS","TopbarWeave","lbd","lbd1","lbd2","currentState","previousState","amplitude2","progressToState","top1","top2","paint1","animated","RLottieIconItemPart","RLottieIconItem","RLottieIcon","frameCount","startFrame","SuperRLottieIcon","partState","colorState","partCallback","changedPartState","changedColorState","prevState","renderIfPaused","GroupCallMicrophoneIcon","GROUP_CALL_MICROPHONE_BUTTON_STATE","partName","GroupCallParticipantMutedIcon","colored","GROUP_CALL_PARTICIPANT_MUTED_STATE","getColorByMutedState","clearMutedStateModifier","GroupCallParticipantStatusElement","withIcons","element2","actionClassName","GroupCallParticipantsList","getGroupCallParticipantMutedState","mutedIcon","callVideoCanvasBlur","renderFrame","GroupCallParticipantVideoElement","GroupCallParticipantsVideoElement","pinnedSource","shouldDisplay","isPinned","hasAnyVideo","participantElements","participantVideo","GroupCallParticipantContextMenu","PopupGroupCall","GroupCallParticipantsElement","GroupCallDescriptionElement","descriptionIntl","GroupCallTitleElement","buttonDiv","resizeHandlerClassName","MovableElement","startTop","startLeft","startWidth","startHeight","startExtraHeight","startExtraWidth","resizingSide","changingWidth","changingHeight","maxPossibleWidth","maxPossibleHeight","isEnlarging","resizeDiff","resizeHandler","fixAspectRatio","extraWidth","extraHeight","MovablePanel","_movable","movable","toggleClassName","GROUP_CALL_PARTICIPANT_MUTED_STATE2","colorStr","propertyValue","GROUP_CALL_MICROPHONE_BUTTON_STATE2","getGroupCallMicrophoneButtonState","hangUp","btnFullScreen","btnExitFullScreen","wasFullScreen","wasBig","btnFullScreen2","btnShowColumn","headerInfo","newHeader","newHeaderInfo","newHeaderTitle","btnHideColumn","videosScrollable","movablePanel","_makeButton","btnVideo","btnScreen","IS_SCREEN_SHARING_SUPPORTED","btnMute","microphoneIcon","btnLeave","microphoneButtonState","CALL_STATE","CALL_STATE2","CallDescriptionElement","GroupCallMicrophoneIconMini","MIN_WIDTH","INIT_STATE","PopupCall","emojisSubtitle","stateText","movableElement","controlsHover","btnDecline","btnAccept","big","isPendingIncoming","isSharingVideo","isSharingScreen","outputState","oldContainers","mediaState","hasFrame","videoContainer","output","popupWidth","MAX_WIDTH_PX","MAX_HEIGHT_PX","biggestSideSize","widthRatio","heightRatio","parseSignalingData","convertNumber","sourceGroup","rtpExtensions","payloadTypesMap","getPayloadType","payloadType","clockrate","subtype","CallConnectionInstance","descriptionInit","initialSetup","getCallAudioAsset","CALL_REQUEST_TIMEOUT","CallsController","g_a","dh","g_a_hash","bytesCmp","key_fingerprint","CallInstance","hasConnected","hasCurrent","fullInfo","video_calls_available","phoneCall","callsController","getCallProtocol","getRtcConfiguration","iceServers","ip","ipv6","password","urls","subtle","sha256","convertToUint8Array","kMaxIncomingPacketSize","P2PEncryptor","p2pKey","bufferConcats","buffer","msgKeyLarge","msgKey","aesKeyIv","seq","sha256a","sha256b","encryptedData","dataSize","encrypt","cryptoKey","msgKeyEquals","encryptedDataSize","decryptionBuffer","ChromeP2PSdpBuilder","fingerprints","ufrag","pwd","stringBuilder","setup","ssrcGroups","addExtmap","addPayloadTypes","addSsrc","addDataChannel","FirefoxP2PSdpBuilder","dir","SafariP2PSdpBuilder","p2pParseCandidate","sdpString","foundation","priority","isFirefox","isSafari","feedbackTypes","fmtp","pName","P2PSdpBuilder","sdpMLineIndex","sdpMid","relAddress","generation","tcpType","networkId","networkCost","self","_connectionState","canAccept","phonePhoneCall","encryptionKey","configuration","dataChannelEntry","iceCandidate","codePoints","sdpDescription","videoTrack","discardReason","discardedByOtherParty","hasVideo","_codec","vp8PayloadType","rtxIdx","performSsrcGroups","sendRecvEntry","encryptor","decryptedData","signalingData","videoToImage","OutputDevicePopup","setSinkId","chosenDeviceId","currentSinkId","sinkId","navigator","mediaDevices","enumerateDevices","devices","outputs","device","deviceId","InputFieldTsx","imgRecordAudio","imgVideoVertical","imgVideoHorizontal","RtmpRecordPopup","_onSubmit","startRecording","inputCall","RtmpRecordPopupContent","onSubmit","TITLE_MAX_LENGTH","setName","recordVideo","setRecordVideo","videoHorizontal","setVideoHorizontal","recordVideoCheck","onRawInput","labelText","cnPlayer","AdminStreamPopup","rtmpUrl","setRtmpUrl","rtmpKey","setRtmpKey","rtmpDataLoading","setRtmpDataLoading","REJOIN_INTERVAL","_AppMediaViewerRtmp","shareUrl","getCall","thumbnail","emptyPipVideoSource","adminPanelContainer","myCallId","errors","check","retry","empty","hadPip","capturedBlob","AppMediaViewerRtmp","RtmpDescriptionElement","appendLiveTo","convertCallStateToGroupState","convertRtmpStateToGroupState","TopbarCall","weave","isChangingInstance","_class","isClosed","groupCallMicrophoneIconMini","throttledMuteClick","center","weaveContainer","NOTIFICATION_ICON_PATH","NOTIFICATION_BADGE_PATH","UiNotificationsManager","IS_VIBRATE_SUPPORTED","updSettings","needPush","webPushApiManager","hasPush","notification","peerString","tokenData","notificationData","fwdCount","peerReaction","peerTypeNotifySettings","notificationMessage","wrappedMessage","notificationFromPeerId","peerPhoto","avatarCanvas","avatarContext","SIZE","colorTop","colorBottom","abbreviation","pushData","resetTitle","isBlink","notificationOptions","registration","notifications","appRuntimeManager","filename","uiNotificationsManager","getFilesFromEvent","onlyTypes","scanFiles","directoryReader","itemFile","PopupGiftPremium","giftOptions","shortestOption","wrapCurrency","giftOption","shortestAmount","discount","isYears","getSelectedOption","giftButton","SANDBOX_ATTRIBUTES","WebApp","luminance","calculateLuminance","textOpacity","calculateOpacity","textRgbColor","rgbaToRgb","chat_types","is_visible","is_active","is_progress_visible","text_color","buttonLangPackKeysMap","pressedButtonId","_queryId","botPeerId","fallbackReload","oldWebView","resultType","debouncedResult","isOpen","debouncing","lastDispatchedWebViewEvent","path_full","popupPayment","need_confirmation","req_id","canSendMessage","_error","mountCallback","hasIcon","PopupWebApp","getSelectedNodes","SCROLL_THROTTLE","USE_OWN_SCROLL","IS_OVERLAY_SCROLL_SUPPORTED","throttleMeasurement","cancelMeasurement","requestAnimationFrame","cancelAnimationFrame","scrollPositionProperty","scrollSizeProperty","clientSizeProperty","offsetSizeProperty","clientAxis","getDistanceToEnd","onScrollOffset","lastScrollPosition","startMousePosition","startScrollPosition","isHeavyAnimationInProgress","needCheckAfterAnimation","isScrolledToStart","setIsScrolledToStart","isScrolledToEnd","setIsScrolledToEnd","removeHeavyAnimationListener","onScrollMeasure","cancelMeasure","onScrollCallbacks","_scrollPosition","checkForTriggers","_scrollSize","_clientSize","_onScrollOffset","maxScrollPosition","checkEnds","thumbRef","divider","thumbSize","withBorders","onThumbMouseMove","contentHeight","viewportHeight","scrollbarSize","offsetHeight","maxScrollTop","maxScrollbarOffset","scrollAmount","onThumbMouseDown","onThumbMouseUp","deltaX","scrollWidth","deltaY","onSizeChange","_ref","$$mousedown","BrowserHeaderTipSvg","BrowserHeaderSelectorTail","BrowserHeaderButton","BrowserHeaderTab","BrowserContext","page","select","BrowserHeaderTabIcon","BrowserHeaderTabIconInner","BrowserHeaderTabHover","BrowserHeaderTabMore","openPageMenu","BrowserHeaderTabClose","pages","titleWidth","BrowserHeaderTabTitle","BrowserHeaderTabMask","BrowserHeader","needBackButton","tabMap","scrollFromPage","scrollableRef","getNormalSize","MouseEvent","cancelBubble","openBtnMenu","collapsedTitle","wrapTitles","BrowserHeaderTabsScrollable","BrowserHeaderNewButton","openCatalogueInAppBrowser","BrowserHeaderTabs","BrowserHeaderSelector","toggleCollapsed","BrowserHeaderCollapsedTitle","createBrowserStore","makeBrowserPage","currentPage","newPage","_page","isConfirmationNeededOnClose","originalPage","Browser","minHeight","lastContext","movableState","setMovableState","movableOptions","aspectRatio","resetTransition","collapsedWidth","collapsedHeight","toggleResizable","setMinValues","previousMovableState","BrowserPage","BrowserBody","additionalHeight","openInAppBrowser","store","openWebAppInAppBrowser","setNeedBackButton","setDestroy","webApp","onBackStatus","getTitle","getMenuButtons","lastState","isCatalogue","setFolded","searchIndex","oldStyle","BrowserCatalogueSearch","BrowserCatalogueList","processBotIds","useUser","first_name","last_name","Loader","getTopPeers","isMoreThanEnough","BrowserCatalogueScrollable","processWebAppLink","WEB_APP","appname","domain","BrowserCatalogue","setRendered","_loader","setResult","APP_TABS2","AppImManager","CacheStorageController","saveState","messageId","messagesTextSize","changedLoop","changedAutoplay","attachType","_types","activeAnimations","sendInteractionThrottled","apiUpdatesManager","compareVersion","choosing","typings","typing","increaseTimes","isUpload","onInstanceDeactivated","isUpdated","receiptMessage","spoiler","showDuration","spoilerTimeout","mediaStickerWrapper","liteModeKey","saved","emojiAnimationContainer","stateStorage","setAuthorized","telegramMeWebManager","IS_CHROMIUM","oldFillStyle","share","foundMedia","requestWriteAccess","showDisclaimer","needDisclaimer","cacheKeyArr","webAppOptions","buttonId","openWindow","onUrlAuthResultAccepted","urlAuthResult","onUrlAuthResult","botPeerTitle","logInCheckbox","allowMessagesCheckbox","confirmationPromise","logInChecked","allowMessagesChecked","_appConfig","_config","onAuthAnchorClick","autologinToken","originalUrl","onSponsoredAnchorClick","lastHelpPeerColors","onHelpPeerColors","helpPeerColors","setProfileColors","possibleBubble","chatContainer","requests","request","isBad","activatingChat","screen","IGNORE_KEYS","isSelectionCollapsed","newWindowIfNoClick","wrappedUrl","migratedTo","userName","toType","ignoreGroupCall","ignoreCall","ignoreLive","fromType","broadcastEvent","DEFAULT_BACKGROUND_SLUG","canDownload","storageUrl","chatBubbles","chatPositions","backgroundUrl","noSetTheme","drops","mediaDrops","isFiles","_dropsContainer","mediaDropsContainer","dropsContainer","_drops","foundDocuments","drop","prevTabId","onImTabChange","fromIndex","chatFrom","chatTo","chatIndex","isSamePeer","existingIndex","oldChat","cc","dot","eye","langPackKeys","mapa","typingElement","descriptionElement","noTyping","typingEl","chatFullResult","dooo","onlinesResult","onlines","ignoreSelf","useWhitespace","typingContainer","options1","options2","profile","messageHighlighting","peerColorRgbValue","peerBorderBackgroundValue","appImManager$1","local","sponsored","isForDocument","captionTimeout","setCaptionTimeout","isServiceMessage","cantForwardMessage","cantDownloadMessage","amountPerUser","getGiftDetails","isOutbound","PromoSlideTab","headingTextContainer","headingTextTitle","headingTextDescription","wrapTitleOptions","giftDetails","giftMonths","featuresContainer","premiumImageContainer","premiumImage","statusText","features","LimitsFeature","free","limitTextContainer","limitContainer","limitTitle","limitSubtitle","UpgradedStoriesFeature","PremiumStickersCarousel","topSiblingIndex","bottomSiblingIndex","stickersLength","siblingIndex","siblingElement","carouselItem","FeaturesCarousel","bottomSection","slideTopSectionContainer","outerLayoutUpdater","featureIndex","limitsFeature","limits","aboveTopSection","headerText","backButton","hasHeader","prevIndex","startFrom","maxSteps","selectedFeatureIndex","deviceFrame","wrappedVideo","premiumIcon","FeatureSlideTab","premiumPromo","hasFeature","videoIndex","ff","isPremiumActive","headerBackground","P","limitPremium","isLocked","DialogsContextMenu","lastButton","IS_SHARED_WORKER_SUPPORTED","setSendingStatus","disableAnimationIfRippleFound","DPR","RADIUS","LENGTH","groupCallActiveIcon","TOTAL_WIDTH","START_X","wasMounted","itemProgress","setPromiseMiddleware","BADGE_SIZE","BADGE_TRANSITION_TIME","fastRafConventional","avatarSizeMap","_DialogElement","isMainList","controlled","wrapMiddleware","captionDiv","titleSpanContainer","statusSpan","lastTimeSpan","rightSpan","hasBadge","justCreated","DialogElement","ForumTab","Some3","setStatusPromise","loadResult","setStatus","NOT_IMPLEMENTED_ERROR","Some","firstVisible","lastVisible","topOffset","bottomOffset","middlewareError","cachedInfoPromise","chatList","offsetDialog","loadDialogsPromise","firstDialog","lastDialog","oldTypingElement","newTypingElement","topics","sidebarRect","paddingY","currentOffsetIndex","needIndex","CAN_HIDE_TOPIC","Some2","doNotRenderChatList","hasClassName","sortedDialogList","callIcon","startAnimation","sortedDialog","reuseClassNames","unreadContent","isUnreadAvatarBadgeMounted","unreadAvatarBadgeClassList","unreadBadgeClassList","hasAnyUpdate","TEST_TOP_NOTIFICATION","AppDialogsManager","updatePeriod","updatedTime","fetching","chatlistUpdates","topNotification","tt","hasContacts","onListLengthChange","getProxiedManagers","bottomPart","clearCurrent","foldersScrollable","_id","wasFilterId","clickFilterId","elementThreadId","elementPeerId","containerToAppend","renderedFilter","filtersArr","haveFilters","addFilters","addFiltersPromise","unreadSpan","unreadUnmutedCount","unreadCount","topNotificationContainer","isMounted","titleSpan","wasShowing","placeholderContainer","usersLength","updatePartClassName","newTab","hideTab","asInnerIfAsMessages","lastTab","forumTab","isSameTab","lastActiveListElement","setPeerFunc","findAvatarWithStories","trueLastMessage","_lastMessage","isBatch","setUnread","noForwardIcon","isSearch","willPrepend","videoTypes","playIcon","wrapMessageForReplyOptions","wrapResult","isDialogUnread","forumUnreadCount","wasMuted","unreadTopicsCount","hasUnmutedTopic","setStatusMessage","hasPinnedBadge","isPinnedBadgeMounted","hasUnreadBadge","isUnreadBadgeMounted","hasUnreadAvatarBadge","hasMentionsBadge","isMentionsBadgeMounted","hasReactionsBadge","isReactionsBadgeMounted","badgesLength","isBadgeMounted","isMention","unreadBadgeText","notVisited","threadOrSavedId","originalDialog","appDialogsManager$1"],"ignoreList":[201,362],"sources":["../src/helpers/string/limitSymbols.ts","../src/lib/appManagers/utils/peers/getPeerActiveUsernames.ts","../src/components/wrappers/getPeerTitle.ts","../src/components/generateFakeIcon.ts","../src/components/generatePremiumIcon.ts","../src/components/generateVerifiedIcon.ts","../src/components/wrappers/emojiStatus.ts","../src/components/generateTitleIcons.ts","../src/helpers/formatDuration.ts","../src/helpers/string/toHHMMSS.ts","../src/components/wrappers/wrapDuration.ts","../src/config/currencies.ts","../src/helpers/paymentsWrapCurrencyAmount.ts","../src/lib/appManagers/utils/peers/getPeerId.ts","../src/lib/richTextProcessor/wrapPlainText.ts","../src/lib/richTextProcessor/getEmojiEntityFromEmoji.ts","../src/lib/richTextProcessor/getAbbreviation.ts","../src/lib/richTextProcessor/wrapAbbreviation.ts","../src/components/topicAvatar.ts","../src/components/wrappers/customEmoji.ts","../src/components/wrappers/joinVoiceChatAnchor.ts","../src/helpers/array/partition.ts","../src/helpers/dom/htmlToDocumentFragment.ts","../src/helpers/restrictions.ts","../src/helpers/string/escapeRegExp.ts","../src/lib/appManagers/utils/messages/isMessageRestricted.ts","../src/lib/richTextProcessor/fixEmoji.ts","../src/lib/richTextProcessor/wrapMessageEntities.ts","../src/lib/richTextProcessor/wrapTextWithEntities.ts","../src/helpers/modifyAckedResult.ts","../src/stores/fullPeers.ts","../src/lib/tinyld/detect.ts","../src/stores/peerLanguage.ts","../src/helpers/solid/useDynamicCachedValue.ts","../src/stores/premium.ts","../src/hooks/usePeerTranslation.ts","../src/helpers/solid/createMiddleware.ts","../src/components/translatableMessage.ts","../src/components/wrappers/messageActionTextNew.ts","../src/components/wrappers/messageForReply.ts","../src/helpers/shouldDisplayGiftCodeAsGift.ts","../src/components/wrappers/messageActionTextNewUnsafe.ts","../src/components/peerTitle.ts","../src/components/wrappers/peerTitle.ts","../src/lib/appManagers/utils/peers/getPeerColorById.ts","../src/lib/appManagers/utils/peers/isPeerRestricted.ts","../src/lib/appManagers/utils/peers/getPeerPhoto.ts","../src/components/wrappers/getPeerInitials.ts","../src/helpers/string/classNames.ts","../src/helpers/dom/documentFragmentToNodes.ts","../src/helpers/canvas/dashedCircle.ts","../src/helpers/dom/renderMediaWithFadeIn.ts","../src/components/singleTransition.ts","../src/components/preloader.ts","../src/helpers/getStrippedThumbIfNeeded.ts","../src/helpers/setAttachmentSize.ts","../src/components/wrappers/photo.ts","../src/helpers/solid/subscribeOn.ts","../src/hooks/useIsNightTheme.ts","../src/components/currencyStarIcon.tsx","../src/components/avatarNew.tsx","../src/components/popups/peer.ts","../src/components/popups/deleteDialog.ts","../src/helpers/overlayClickHandler.ts","../src/components/toast.ts","../src/components/radioField.ts","../src/components/radioForm.ts","../src/helpers/array/flatten.ts","../src/helpers/contextMenuController.ts","../src/components/wrappers/attachBotIcon.ts","../src/components/buttonMenu.ts","../src/helpers/array/filterAsync.ts","../src/helpers/positionMenu.ts","../src/helpers/dom/attachContextMenuListener.ts","../src/helpers/dom/createContextMenu.ts","../src/components/row.ts","../src/components/popups/mute.ts","../src/helpers/easing/easeInOutSine.ts","../src/components/limit.ts","../src/helpers/formatBytes.ts","../src/components/premium/featuresConfig.ts","../src/helpers/filterChatPhotosMessages.ts","../src/helpers/listLoader.ts","../src/helpers/searchListLoader.ts","../src/components/appSearch.ts","../src/lib/mtproto/connectionStatus.ts","../src/components/connectionStatus.ts","../src/components/inputSearch.ts","../src/components/sliderTab.ts","../src/components/slider.ts","../src/components/avatarEdit.ts","../src/components/buttonCorner.ts","../src/helpers/number/numberThousandSplitter.ts","../src/components/wrappers/getUserStatusString.ts","../src/components/generateDelimiter.ts","../src/components/settingSection.ts","../src/components/sidebarLeft/tabs/newGroup.ts","../src/helpers/dom/positionElementByIndex.ts","../src/helpers/array/insertInDescendSortedArray.ts","../src/helpers/middlewarePromise.ts","../src/helpers/sortedList.ts","../src/lib/appManagers/utils/chats/getParticipantsCount.ts","../src/components/wrappers/getChatMembersString.ts","../src/lib/appManagers/utils/chats/getParticipantRank.ts","../src/components/wrappers/participantRank.ts","../src/components/sortedUserList.ts","../src/components/editPeer.ts","../src/helpers/clipboard.ts","../src/helpers/schedulers/debounce.ts","../src/lib/richTextProcessor/validators.ts","../src/components/usernameInputField.ts","../src/components/swipeHandler.ts","../src/helpers/dom/sortable.ts","../src/components/confirmationPopup.ts","../src/components/usernamesSection.ts","../src/lib/appManagers/utils/peers/getPeerEditableUsername.ts","../src/components/sidebarLeft/tabs/editProfile.ts","../src/components/sidebarRight/tabs/chatType.ts","../src/helpers/scrollableLoader.ts","../src/lib/appManagers/utils/chats/combineParticipantBannedRights.ts","../src/lib/appManagers/utils/chats/hasRights.ts","../src/helpers/array/filterUnique.ts","../src/lib/appManagers/utils/chats/getParticipantPeerId.ts","../src/lib/appManagers/utils/users/canSendToUser.ts","../src/lib/appManagers/utils/dialogs/getDialogIndexKey.ts","../src/lib/appManagers/utils/dialogs/getDialogIndex.ts","../src/components/wrappers/localSticker.ts","../src/components/emptyPlaceholder.tsx","../src/helpers/canvas/drawCircle.ts","../src/helpers/canvas/roundRect.ts","../src/helpers/canvas/shimmer.ts","../src/helpers/dialogsPlaceholder.ts","../src/helpers/dom/anchorCallback.ts","../src/components/appSelectPeers.ts","../src/components/popups/pickUser.ts","../src/lib/appManagers/utils/chats/canEditAdmin.ts","../src/components/sidebarRight/tabs/userPermissions.ts","../src/components/checkboxFields.ts","../src/helpers/dom/attachGrabListeners.ts","../src/components/rangeSelector.ts","../src/components/rangeStepsSelector.ts","../src/components/sidebarRight/tabs/groupPermissions.ts","../src/components/wrappers/stickerToRow.ts","../src/components/sidebarRight/tabs/chatReactions.ts","../src/helpers/dom/createParticipantContextMenu.ts","../src/components/sidebarRight/tabs/chatAdministrators.ts","../src/components/sidebarLeft/tabs/addMembers.ts","../src/components/addChatUsers.ts","../src/components/sidebarRight/tabs/chatMembers.ts","../src/components/sidebarRight/tabs/removedUsers.ts","../src/helpers/dom/shake.ts","../src/components/sidebarRight/tabs/chatDiscussion.ts","../src/helpers/maybe2x.ts","../src/components/section.tsx","../src/helpers/array/accumulate.ts","../src/helpers/canvas/getTextWidth.ts","../src/helpers/cacheCallback.ts","../src/helpers/string/replaceNonNumber.ts","../src/helpers/cards/cardBrands.ts","../src/helpers/scrollSaver.ts","../src/helpers/array/createArray.ts","../src/helpers/string/buggedNumbers.ts","../src/helpers/cards/patternCharacters.ts","../src/helpers/cards/cardFormattingPatterns.ts","../src/helpers/cards/formatValueByPattern.ts","../src/helpers/cards/formatInputValueByPattern.ts","../src/helpers/string/nbsp.ts","../src/helpers/cards/validateCard.ts","../src/components/telegramWebView.ts","../src/components/popups/paymentVerification.ts","../src/components/popups/paymentCard.ts","../src/components/popups/paymentCardConfirmation.ts","../src/lib/richTextProcessor/matchEmail.ts","../src/components/popups/paymentShipping.ts","../src/components/popups/paymentShippingMethods.ts","../src/helpers/easing/easeOutCubic.ts","../src/components/inputFieldAnimated.ts","../public/recorder.min.js","../src/components/stickyIntersector.ts","../src/lib/richTextProcessor/wrapSingleEmoji.ts","../src/helpers/dom/createStickersContextMenu.ts","../src/lib/appManagers/utils/photos/generatePhotoForExtendedMediaPreview.ts","../src/lib/appManagers/utils/messages/getMediaFromMessage.ts","../src/components/appMediaPlaybackController.ts","../src/components/middleEllipsis.ts","../src/components/mediaProgressLine.ts","../src/lib/appManagers/utils/messages/getFwdFromName.ts","../src/lib/appManagers/utils/messages/getMessageSenderPeerIdOrName.ts","../src/components/wrappers/senderToPeer.ts","../src/components/wrappers/sentTime.ts","../src/components/audio.ts","../src/components/buttonMenuToggle.ts","../src/helpers/dom/controlsHover.ts","../src/components/volumeSelector.ts","../src/helpers/canvas/createCanvasStream.ts","../src/lib/mediaPlayer.ts","../src/components/wrappers/video.ts","../src/components/stickerViewer.ts","../src/components/popups/stickers.ts","../src/components/emoticonsDropdown/category.ts","../src/helpers/solid/createListTransition.ts","../node_modules/.pnpm/@solid-primitives+refs@1.0.5_solid-js@1.8.7/node_modules/@solid-primitives/refs/dist/index.js","../src/helpers/solid/animationList.ts","../src/helpers/solid/animations.tsx","../src/components/emoticonsDropdown/search.tsx","../src/components/wrappers/stickerSetThumb.ts","../src/components/lazyLoadQueueRepeat.ts","../src/components/emoticonsDropdown/tabs/SuperStickerRenderer.ts","../src/components/emoticonsDropdown/tab.ts","../src/components/emoticonsDropdown/tabs/stickers.ts","../src/components/emoticonsDropdown/tabs/emoji.ts","../src/components/lazyLoadQueueRepeat2.ts","../src/components/gifsMasonry.ts","../src/components/emoticonsDropdown/tabs/gifs.ts","../src/components/sidebarRight/tabs/gifs.ts","../src/components/sidebarRight/tabs/stickers.ts","../src/helpers/dropdownHover.ts","../src/vendor/bezierEasing.ts","../src/components/emoticonsDropdown/index.ts","../src/lib/appManagers/utils/messages/getMessageThreadId.ts","../src/components/chat/bubbleGroups.ts","../src/components/popups/datePicker.ts","../src/components/popups/forward.ts","../src/helpers/number/formatNumber.ts","../src/components/divAndCaption.ts","../src/components/chat/replyContainer.ts","../src/components/wrappers/emojiPattern.ts","../src/components/wrappers/reply.ts","../src/components/stackedAvatars.ts","../src/components/chat/replies.ts","../src/components/chat/messageRender.ts","../src/components/sidebarRight/tabs/pollResults.ts","../src/components/poll.ts","../src/helpers/long/compareLong.ts","../src/helpers/compareValue.ts","../src/helpers/slicedArray.ts","../src/helpers/dom/reflowScrollableElement.ts","../src/helpers/dom/handleHorizontalSwipe.ts","../src/lib/appManagers/internalLink.ts","../src/helpers/callbackifyAll.ts","../src/lib/appManagers/utils/reactions/availableReactionToReaction.ts","../src/lib/appManagers/utils/reactions/reactionsEqual.ts","../src/components/chat/reaction.ts","../src/components/iconTsx.tsx","../src/components/tooltip.tsx","../src/components/chat/reactions.ts","../src/helpers/dom/superIntersectionObserver.ts","../src/helpers/dom/copyFromElement.ts","../src/components/wrappers/webPageDescription.ts","../src/components/wrappers/webPageTitle.ts","../src/lib/appManagers/utils/messages/isMentionUnread.ts","../src/lib/appManagers/utils/messages/getGroupedText.ts","../src/components/groupedLayout.ts","../src/components/prepareAlbum.ts","../src/helpers/number/getUnsafeRandomInt.ts","../src/components/dotRenderer.ts","../src/components/wrappers/mediaSpoiler.ts","../src/components/wrappers/album.ts","../src/config/latinizeMap.ts","../src/helpers/cleanSearchText.ts","../src/components/wrappers/document.ts","../src/lib/appManagers/utils/messages/getMediaDurationFromMessage.ts","../src/components/wrappers/groupedDocuments.ts","../src/components/wrappers/poll.ts","../src/helpers/string/isRTL.ts","../src/components/wrappers/topicNameButton.ts","../src/components/popups/sharedFolderInvite.ts","../src/components/popups/joinChatInvite.ts","../src/helpers/addAnchorListener.ts","../src/helpers/createBadge.ts","../src/components/popups/schedule.ts","../src/components/stories/preview.tsx","../src/components/sidebarRight/tabs/statistics.tsx","../src/components/sidebarLeft/tabs/sharedFolder.ts","../src/components/popups/giftLink.tsx","../src/components/sidebarRight/tabs/boosts.tsx","../src/components/rippleTsx.tsx","../src/components/rowTsx.tsx","../src/components/popups/boostsViaGifts.tsx","../src/components/popups/reassignBoost.tsx","../src/components/popups/boost.ts","../src/stores/stars.ts","../src/lib/appManagers/internalLinkProcessor.ts","../src/helpers/dom/getSelectedText.ts","../src/components/chat/giveaway.tsx","../src/helpers/dom/getParents.ts","../src/components/buttonIconTsx.tsx","../src/components/chat/similarChannels.tsx","../src/lib/appManagers/utils/dialogs/isDialog.ts","../src/lib/appManagers/utils/messages/isForwardOfForward.ts","../src/lib/appManagers/utils/messages/getMainGroupedMessage.ts","../src/helpers/dom/cancelClickOrNextIfNotClick.ts","../src/lib/appManagers/utils/messages/getUnreadReactions.ts","../src/components/popups/aboutAd.tsx","../src/helpers/getWebFileLocation.ts","../src/helpers/makeGoogleMapsUrl.ts","../src/components/wrappers/geo.ts","../src/components/wrappers/keyboardButton.ts","../src/components/wrappers/webPage.tsx","../src/helpers/dom/clearfix.ts","../src/components/chat/bubbles.ts","../src/components/popups/sendNow.ts","../src/helpers/dom/cancelSelection.ts","../src/environment/standalone.ts","../src/components/chat/selection.ts","../src/components/chat/pinnedContainer.ts","../src/components/chat/audio.ts","../src/components/popups/unpinMessage.ts","../src/components/chat/pinnedMessageBorder.ts","../src/helpers/dom/handleScrollSideEvent.ts","../src/components/chat/pinnedMessage.ts","../src/components/wrappers/formatUserPhone.ts","../src/components/sidebarRight/tabs/editContact.ts","../src/helpers/audioAssetPlayer.ts","../src/components/groupCall/getAudioAsset.ts","../src/environment/constraintSupport.ts","../src/lib/calls/helpers/getAudioConstraints.ts","../src/lib/calls/helpers/getScreenConstraints.ts","../src/lib/calls/helpers/getScreenStream.ts","../src/lib/calls/helpers/getStream.ts","../src/lib/calls/helpers/getStreamCached.ts","../src/lib/calls/helpers/getVideoConstraints.ts","../src/lib/calls/helpers/stopTrack.ts","../src/lib/calls/constants.ts","../src/lib/calls/stringFromLineBuilder.ts","../src/lib/calls/utils.ts","../src/lib/calls/sdpBuilder.ts","../src/lib/calls/streamManager.ts","../src/lib/calls/callInstanceBase.ts","../src/lib/calls/helpers/createDataChannel.ts","../src/lib/calls/helpers/createPeerConnection.ts","../src/lib/calls/localConferenceDescription.ts","../src/lib/calls/callConnectionInstanceBase.ts","../src/lib/calls/helpers/filterServerCodecs.ts","../src/lib/calls/sdp/index.ts","../src/helpers/string/splitStringByLimitWithRest.ts","../src/helpers/uniqueNumberGenerator.ts","../src/lib/calls/sdp/attributeSplitted.ts","../src/lib/calls/sdp/mediaLineParts.ts","../src/lib/calls/sdp/line.ts","../src/lib/calls/sdp/attributeInner.ts","../src/lib/calls/sdp/attributes.ts","../src/lib/calls/sdp/mediaSection.ts","../src/lib/calls/sdp/sessionSection.ts","../src/lib/calls/sdp/utils.ts","../src/lib/calls/helpers/parseSourceGroups.ts","../src/lib/calls/helpers/parseMediaSectionInfo.ts","../src/lib/calls/helpers/fixLocalOffer.ts","../src/lib/calls/helpers/processMediaSection.ts","../src/lib/calls/groupCallConnectionInstance.ts","../src/lib/calls/groupCallState.ts","../src/lib/calls/groupCallInstance.ts","../src/lib/calls/helpers/createMainStreamManager.ts","../src/lib/calls/groupCallsController.ts","../src/components/sidebarRight/tabs/chatInviteLink.ts","../src/components/sidebarRight/tabs/chatRequests.ts","../src/components/chat/requests.ts","../src/components/chat/actions.ts","../src/helpers/setBadgeContent.ts","../src/components/chat/topbarLive/topbarLive.cn.ts","../src/components/chat/topbarLive/button.tsx","../src/vendor/solid-transition-group/common.ts","../node_modules/.pnpm/@solid-primitives+transition-group@1.0.3_solid-js@1.8.7/node_modules/@solid-primitives/transition-group/dist/index.js","../src/vendor/solid-transition-group/transition.ts","../src/components/skeleton/index.tsx","../src/components/chat/topbarLive/topbarLive.tsx","../src/lib/calls/rtmpState.ts","../src/lib/calls/rtmpCallsController.ts","../src/components/rtmp/hooks.ts","../src/components/chat/topbarLive/container.tsx","../src/components/rtmp/rtmpData.tsx","../src/components/rtmp/adminPopup.tsx","../src/lib/searchIndex.ts","../src/lib/tinyld/languages.ts","../src/components/chat/translation.tsx","../src/components/chat/topbar.ts","../src/components/sidebarRight/tabs/search.ts","../src/helpers/autoDownload.ts","../src/helpers/easing/easeOutQuad.ts","../src/components/chat/gradientRenderer.ts","../src/components/chat/patternRenderer.ts","../src/lib/appManagers/utils/dialogs/getDialogKey.ts","../src/lib/appManagers/utils/messages/getSearchType.ts","../src/lib/appManagers/utils/messages/getHistoryStorageKey.ts","../src/helpers/dom/attachListNavigation.ts","../src/helpers/string/stringMiddleOverflow.ts","../src/hooks/useScreenSize.ts","../src/components/chat/topbarSearch.tsx","../src/helpers/averageColor.ts","../src/helpers/highlightingColor.ts","../src/components/chat/chat.ts","../src/components/popups/deleteMegagroupMessages.tsx","../src/components/popups/deleteMessages.ts","../src/helpers/dom/isSelectionEmpty.ts","../src/helpers/preloadAnimatedEmojiSticker.ts","../src/components/wrappers/stickerEmoji.ts","../src/components/popups/reportMessagesConfirm.ts","../src/components/popups/reportMessages.ts","../src/helpers/dom/safeWindowOpen.ts","../src/components/popups/sponsored.ts","../src/components/popups/reactedList.ts","../src/components/chat/reactionsMenu.ts","../src/lib/appManagers/utils/messages/canSaveMessageMedia.ts","../src/helpers/dom/cloneDOMRect.ts","../src/components/popups/toggleReadDate.tsx","../src/components/popups/translate.tsx","../src/helpers/dom/getRichSelection.ts","../src/helpers/detectLanguageForTranslation.ts","../src/helpers/solid/transitionGroup.ts","../src/components/popups/reportAd.tsx","../src/components/chat/contextMenu.ts","../src/components/chat/sendContextMenu.ts","../src/components/popups/createPoll.ts","../src/helpers/canvas/scaleMediaElement.ts","../src/helpers/createPoster.ts","../src/helpers/getGifDuration.ts","../src/helpers/object/defineNotNumerableProperties.ts","../src/environment/audioMimeTypeSupport.ts","../src/components/wrappers/draft.ts","../src/components/chat/selectedEffect.tsx","../src/components/popups/makePaid.tsx","../src/components/popups/newMedia.ts","../src/components/chat/autocompleteHelper.ts","../src/components/chat/stickersHelper.ts","../src/components/chat/emojiHelper.ts","../src/components/chat/autocompletePeerHelper.ts","../src/components/chat/commandsHelper.ts","../src/components/chat/autocompleteHelperController.ts","../src/components/chat/mentionsHelper.ts","../src/components/chat/replyKeyboard.ts","../src/lib/appManagers/utils/inlineBots/generateQId.ts","../src/components/chat/inlineHelper.ts","../src/components/chat/botCommands.ts","../src/lib/richTextProcessor/parseMarkdown.ts","../src/components/chat/sendAs.ts","../src/lib/appManagers/utils/messages/repliesAreEqual.ts","../src/lib/appManagers/utils/drafts/draftsAreEqual.ts","../src/lib/appManagers/utils/attachMenuBots/getAttachMenuBotIcon.ts","../src/lib/richTextProcessor/matchUrl.ts","../src/helpers/dom/getMarkupInSelection.ts","../src/components/chat/markupTooltip.ts","../src/helpers/dom/getCharAfterRange.ts","../src/helpers/dom/markdown.ts","../src/helpers/eachTimeout.ts","../src/helpers/eachSecond.ts","../src/components/chat/input.ts","../src/lib/appManagers/utils/stories/privacyType.ts","../src/helpers/dom/focusInput.ts","../src/lib/appManagers/utils/stories/cacheType.ts","../src/lib/appManagers/utils/stories/insertStory.ts","../src/helpers/solid/untrackActions.ts","../src/components/stories/store.tsx","../src/helpers/dom/isTargetAnInput.ts","../src/lib/appManagers/utils/stories/repostInfo.ts","../src/components/stories/viewer.tsx","../src/components/sidebarLeft/tabs/myStories.ts","../src/hooks/useCollapsable.ts","../src/components/stories/list.tsx","../src/components/table.tsx","../src/components/popups/starsPay.tsx","../src/components/popups/payment.ts","../src/components/buttonTsx.tsx","../src/components/popups/stars.tsx","../src/components/sidebarRight/tabs/editChatInviteLink.ts","../src/components/sidebarRight/tabs/chatInviteLinks.ts","../src/components/sidebarRight/tabs/editChat.ts","../src/helpers/dom/anchorCopy.ts","../src/helpers/openingHours.ts","../src/helpers/array/rotate.ts","../src/components/businessHours.tsx","../src/helpers/avatarListLoader.ts","../src/helpers/fillPropertyValue.ts","../src/helpers/generatePathData.ts","../src/helpers/number/isBetween.ts","../src/lib/rtmp/url.ts","../src/components/appMediaViewerBase.ts","../src/components/appMediaViewerAvatar.ts","../src/components/openAvatarViewer.ts","../src/hooks/useProfileColors.ts","../src/components/peerProfileAvatars.ts","../src/components/peerProfile.ts","../src/components/sidebarRight/tabs/editTopic.ts","../src/components/sidebarRight/tabs/editBot.ts","../src/components/sidebarRight/tabs/sharedMedia.ts","../src/components/sidebarRight/index.ts","../src/helpers/dom/handleTabSwipe.ts","../src/helpers/dom/lockTouchScroll.ts","../src/lib/appManagers/utils/messages/filterMessagesByInputFilter.ts","../src/components/stories/profileList.tsx","../src/components/appSearchSuper..ts","../src/lib/appManagers/utils/privacy/privacyType.ts","../src/lib/appManagers/utils/privacy/getPrivacyRulesDetails.ts","../src/components/privacySection.ts","../src/components/sidebarLeft/tabs/privacy/phoneNumber.ts","../src/components/sidebarLeft/tabs/2fa/passwordSet.ts","../src/helpers/dom/canFocus.ts","../src/components/sidebarLeft/tabs/2fa/emailConfirmation.ts","../src/components/sidebarLeft/tabs/2fa/email.ts","../src/components/sidebarLeft/tabs/2fa/hint.ts","../src/components/sidebarLeft/tabs/2fa/reEnterPassword.ts","../src/components/sidebarLeft/tabs/2fa/enterPassword.ts","../src/components/sidebarLeft/tabs/2fa/index.ts","../src/components/sidebarLeft/tabs/privacy/lastSeen.ts","../src/components/sidebarLeft/tabs/privacy/profilePhoto.ts","../src/components/sidebarLeft/tabs/privacy/forwardMessages.ts","../src/components/sidebarLeft/tabs/privacy/addToGroups.ts","../src/components/sidebarLeft/tabs/privacy/calls.ts","../src/components/sidebarLeft/tabs/activeSessions.ts","../src/components/sidebarLeft/tabs/blockedUsers.ts","../src/helpers/string/convertKeyToInputKey.ts","../src/components/sidebarLeft/tabs/privacy/voices.ts","../src/components/sidebarLeft/tabs/activeWebSessions.ts","../src/components/sidebarLeft/tabs/privacy/about.ts","../src/components/sidebarLeft/tabs/privacy/messages.ts","../src/components/sidebarLeft/tabs/privacyAndSecurity.ts","../src/components/colorPicker.ts","../src/components/sidebarLeft/tabs/backgroundColor.ts","../src/helpers/files/requestFile.ts","../src/components/sidebarLeft/tabs/background.ts","../src/helpers/eachMinute.ts","../src/components/sidebarLeft/tabs/powerSaving.ts","../src/components/sidebarLeft/tabs/generalSettings.ts","../src/components/sidebarLeft/tabs/includedChats.ts","../src/components/sidebarLeft/tabs/editFolder.ts","../src/components/sidebarLeft/tabs/chatFolders.ts","../src/components/sidebarLeft/tabs/notifications.ts","../src/components/checkboxFieldTsx.tsx","../src/components/sidebarLeft/tabs/language.tsx","../src/components/sidebarLeft/tabs/autoDownload/photo.ts","../src/components/sidebarLeft/tabs/autoDownload/file.ts","../src/components/sidebarLeft/tabs/autoDownload/video.ts","../src/components/sidebarLeft/tabs/dataAndStorage.ts","../src/components/sidebarLeft/tabs/quickReaction.ts","../src/components/sidebarLeft/tabs/stickersAndEmoji.ts","../src/components/sidebarLeft/tabs/settings.ts","../src/components/sidebarLeft/tabs/newChannel.ts","../src/components/popups/createContact.ts","../src/components/sidebarLeft/tabs/contacts.ts","../src/components/sidebarLeft/tabs/archivedTab.ts","../src/components/sidebarLeft/tabs/peopleNearby.ts","../src/components/sidebarLeft/index.ts","../src/components/chat/dragAndDrop.ts","../src/helpers/dom/disableTransition.ts","../src/components/lineBlobDrawable.ts","../src/components/topbarWeave.ts","../src/lib/rlottie/rlottieIcon.ts","../src/components/superIcon.ts","../src/components/groupCall/microphoneIcon.ts","../src/components/groupCall/participantMutedIcon.ts","../src/components/groupCall/participantStatus.ts","../src/components/groupCall/participantsList.ts","../src/components/call/videoCanvasBlur.ts","../src/components/groupCall/participantVideo.ts","../src/components/groupCall/participantVideos.ts","../src/components/groupCall/participants.ts","../src/components/groupCall/description.ts","../src/components/groupCall/title.ts","../src/components/call/button.ts","../src/components/movableElement.ts","../src/helpers/movablePanel.ts","../src/helpers/toggleClassName.ts","../src/components/groupCall/index.ts","../src/lib/calls/callState.ts","../src/components/call/description.ts","../src/components/groupCall/microphoneIconMini.ts","../src/components/call/index.ts","../src/lib/calls/helpers/parseSignalingData.ts","../src/lib/calls/callConnectionInstance.ts","../src/components/call/getAudioAsset.ts","../src/lib/calls/callsController.ts","../src/lib/calls/p2P/getCallProtocol.ts","../src/lib/calls/p2P/getRtcConfiguration.ts","../src/lib/crypto/subtle.ts","../src/lib/crypto/utils/sha256.ts","../src/lib/calls/p2P/p2PEncryptor.ts","../src/lib/calls/p2P/chromeP2PSdpBuilder.ts","../src/lib/calls/p2P/firefoxP2PSdpBuilder.js","../src/lib/calls/p2P/safariP2PSdpBuilder.js","../src/lib/calls/p2P/p2PSdpBuilder.js","../src/lib/calls/callInstance.ts","../src/helpers/dom/videoToImage.ts","../src/components/rtmp/outputDevicePopup.tsx","../src/components/inputFieldTsx.tsx","../src/components/rtmp/assets/recordAudio.svg","../src/components/rtmp/assets/videoVertical.svg","../src/components/rtmp/assets/videoHorizontal.svg","../src/components/rtmp/recordPopup.tsx","../src/components/rtmp/adminStreamPopup.tsx","../src/components/appMediaViewerRtmp.ts","../src/components/rtmp/description.ts","../src/components/topbarCall.ts","../src/config/notifications.ts","../src/lib/appManagers/uiNotificationsManager.ts","../src/helpers/files/getFilesFromEvent.ts","../src/components/popups/giftPremium.ts","../src/components/webApp.ts","../src/components/popups/webApp.ts","../src/helpers/dom/getSelectedNodes.ts","../src/components/scrollable2.tsx","../src/components/browser.tsx","../src/lib/appManagers/appImManager.ts","../src/components/appMediaViewer.ts","../src/components/premium/promoSlideTab.ts","../src/components/premium/limitsFeature.ts","../src/components/premium/upgradedStoriesFeature.ts","../src/components/premium/premiumStickersCarousel.ts","../src/components/premium/featuresCarousel.ts","../src/components/premium/featureSlideTab.ts","../src/components/popups/premium.ts","../src/components/popups/limit.ts","../src/components/dialogsContextMenu.ts","../src/components/sendingStatus.ts","../src/components/groupCallActiveIcon.ts","../src/lib/appManagers/appDialogsManager.ts"],"sourcesContent":["export default function limitSymbols(str: string, length: number, limitFrom = length + 10) {\n str = str.trim();\n if(str.length > limitFrom) {\n str = str.slice(0, length)/* .replace(/\\s*$/, '') */ + '...';\n }\n\n return str;\n}\n","import {Chat, User} from '../../../../layer';\n\nexport default function getPeerActiveUsernames(peer: User | Chat) {\n if(!peer) {\n return [];\n }\n\n const usernames = (peer as Chat.channel).usernames;\n if(usernames) {\n return usernames\n .filter((username) => username.pFlags.active)\n // .sort((a, b) => +!!b.pFlags.editable - +!!a.pFlags.editable)\n .map((username) => username.username);\n }\n\n return (peer as Chat.channel).username ? [(peer as Chat.channel).username] : [];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport _limitSymbols from '../../helpers/string/limitSymbols';\nimport {Chat} from '../../layer';\nimport getPeerActiveUsernames from '../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport I18n from '../../lib/langPack';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../../lib/rootScope';\n\ntype GetPeerTitleOptions = {\n peerId: PeerId,\n plainText?: boolean,\n onlyFirstName?: boolean,\n limitSymbols?: number,\n threadId?: number\n} & Pick;\n\nexport default async function getPeerTitle<\n T extends GetPeerTitleOptions,\n R = T['plainText'] extends true ? string : DocumentFragment\n>(\n options: T\n): Promise {\n const {\n peerId = rootScope.myId,\n plainText,\n onlyFirstName,\n limitSymbols,\n managers = rootScope.managers,\n threadId\n } = options;\n\n let title = '';\n if(peerId.isUser()) {\n const user = apiManagerProxy.getUser(peerId.toUserId());\n if(user) {\n if(user.first_name) title += user.first_name;\n if(user.last_name && (!onlyFirstName || !title)) title += ' ' + user.last_name;\n }\n\n if(!title) title = !user || user.pFlags.deleted ? I18n.format(onlyFirstName ? 'Deleted' : 'HiddenName', true) : getPeerActiveUsernames(user)[0] || '';\n else title = title.trim();\n } else {\n if(threadId) {\n const topic = await managers.dialogsStorage.getForumTopic(peerId, threadId);\n title = topic?.title || '';\n }\n\n if(!title) {\n const chat = apiManagerProxy.getChat(peerId.toChatId()) as Chat.chat;\n title = chat?.title || '';\n }\n\n if(onlyFirstName) {\n title = title.split(' ')[0];\n }\n }\n\n if(limitSymbols !== undefined) {\n title = _limitSymbols(title, limitSymbols, limitSymbols);\n }\n\n return plainText ? title : wrapEmojiText(title) as any;\n}\n","import {_i18n} from '../lib/langPack';\n\nexport default function generateFakeIcon(isScam?: boolean) {\n const span = document.createElement('span');\n span.classList.add('badge-fake');\n _i18n(span, isScam ? 'ScamMessage' : 'FakeMessage');\n return span;\n}\n","import Icon from './icon';\n\nexport default function generatePremiumIcon() {\n const span = Icon('star', 'premium-icon');\n return span;\n}\n","export default function generateVerifiedIcon() {\n const span = document.createElement('span');\n span.classList.add('verified-icon');\n\n const size = 26; // 24\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.setAttributeNS(null, 'viewBox', `0 0 ${size} ${size}`);\n svg.setAttributeNS(null, 'width', `${size}`);\n svg.setAttributeNS(null, 'height', `${size}`);\n svg.classList.add('verified-icon-svg');\n\n const use = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n use.setAttributeNS(null, 'href', '#verified-icon-background');\n use.classList.add('verified-icon-background');\n\n const use2 = document.createElementNS('http://www.w3.org/2000/svg', 'use');\n use2.setAttributeNS(null, 'href', '#verified-icon-check');\n use2.classList.add('verified-icon-check');\n\n // svg.append(use, use2);\n svg.append(use2, use);\n\n span.append(svg);\n\n return span;\n // const span = document.createElement('span');\n // span.classList.add('verified-icon', 'tgico-verified_filled');\n // return span;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {IS_WEBM_SUPPORTED} from '../../environment/videoSupport';\nimport {MediaSize} from '../../helpers/mediaSize';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {EmojiStatus, DocumentAttribute, Document} from '../../layer';\nimport rootScope from '../../lib/rootScope';\nimport wrapSticker from './sticker';\n\nexport default async function wrapEmojiStatus({\n wrapOptions,\n emojiStatus,\n size = mediaSizes.active.emojiStatus\n}: {\n wrapOptions: WrapSomethingOptions,\n emojiStatus: EmojiStatus.emojiStatus | EmojiStatus.emojiStatusUntil,\n size?: MediaSize\n}) {\n const {middleware, animationGroup, textColor} = wrapOptions;\n const container = document.createElement('span');\n container.classList.add('emoji-status');\n const result = await rootScope.managers.acknowledged.appEmojiManager.getCustomEmojiDocument(emojiStatus.document_id);\n const wrap = async(doc: Document.document) => {\n if(!middleware()) return;\n const loadPromises: Promise[] = [];\n\n const attribute = doc.attributes.find((attr) => attr._ === 'documentAttributeCustomEmoji') as DocumentAttribute.documentAttributeCustomEmoji;\n if(attribute && attribute.pFlags.text_color) {\n container.classList.add('emoji-status-text-color');\n }\n\n await wrapSticker({\n doc,\n div: container,\n width: size.width,\n height: size.height,\n loop: 2,\n play: true,\n group: animationGroup || 'EMOJI-STATUS',\n loadPromises,\n middleware,\n static: doc.mime_type === 'video/webm' && !IS_WEBM_SUPPORTED,\n textColor: textColor || 'primary-color'\n // group: 'none'\n });\n\n if(!middleware()) return;\n await Promise.all(loadPromises);\n };\n\n if(!middleware()) {\n return container;\n }\n\n const p = result.result.then(wrap);\n if(result.cached) {\n await p;\n }\n\n return container;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Chat, User} from '../layer';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport generateFakeIcon from './generateFakeIcon';\nimport generatePremiumIcon from './generatePremiumIcon';\nimport generateVerifiedIcon from './generateVerifiedIcon';\nimport wrapEmojiStatus from './wrappers/emojiStatus';\n\nexport default async function generateTitleIcons({\n peerId,\n noVerifiedIcon,\n noFakeIcon,\n noPremiumIcon,\n peer,\n wrapOptions\n}: {\n peerId: PeerId,\n wrapOptions: WrapSomethingOptions,\n noVerifiedIcon?: boolean,\n noFakeIcon?: boolean,\n noPremiumIcon?: boolean,\n peer?: Chat | User\n}) {\n peer ??= apiManagerProxy.getPeer(peerId);\n const elements: HTMLElement[] = [];\n if(!peer) {\n return elements;\n }\n\n if(((peer as Chat.channel).pFlags.fake || (peer as User.user).pFlags.scam) && !noFakeIcon) {\n elements.push(generateFakeIcon((peer as User.user).pFlags.scam));\n }\n\n if(!noPremiumIcon && wrapOptions?.middleware) {\n const emojiStatus = (peer as User.user | Chat.channel).emoji_status;\n const isPremiumFeaturesHidden = await apiManagerProxy.isPremiumFeaturesHidden();\n if(emojiStatus && emojiStatus._ !== 'emojiStatusEmpty' && !isPremiumFeaturesHidden) {\n const {middleware} = wrapOptions;\n const container = await wrapEmojiStatus({\n emojiStatus,\n wrapOptions\n });\n\n if(!middleware()) return elements;\n elements.push(container);\n } else if((peer as User.user).pFlags.premium && !isPremiumFeaturesHidden) {\n elements.push(generatePremiumIcon());\n }\n }\n\n if((peer as Chat.channel).pFlags.verified && !noVerifiedIcon) {\n elements.push(generateVerifiedIcon());\n }\n\n return elements;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport enum DurationType {\n Seconds,\n Minutes,\n Hours,\n Days,\n Weeks,\n Months,\n Years\n}\n\nexport default function formatDuration(duration: number, showLast = 2) {\n if(!duration) {\n duration = 1;\n }\n\n const d: {duration: number, type: DurationType}[] = [];\n const p = [\n {m: 1, t: DurationType.Seconds},\n {m: 60, t: DurationType.Minutes},\n {m: 60, t: DurationType.Hours},\n {m: 24, t: DurationType.Days},\n {m: 7, t: DurationType.Weeks}\n ] as Array<{m?: number, t: DurationType}>\n const s = 1;\n let t = s;\n p.forEach((o, idx) => {\n t = Math.round(t * o.m);\n\n if(duration < t) {\n return;\n }\n\n let dd = duration / t;\n if(idx !== (p.length - 1)) {\n const modulus = p[idx === (p.length - 1) ? idx : idx + 1].m;\n dd %= modulus;\n }\n\n d.push({\n duration: dd | 0,\n type: o.t\n });\n });\n\n const out = d.slice(-showLast).reverse();\n for(let i = out.length - 1; i >= 0; --i) {\n if(out[i].duration === 0) {\n out.splice(i, 1);\n }\n }\n\n return out;\n}\n","export default function toHHMMSS(str: string | number, leadZero = false) {\n const sec_num = parseInt(str + '', 10);\n let hours: any = Math.floor(sec_num / 3600);\n let minutes: any = Math.floor((sec_num - (hours * 3600)) / 60);\n let seconds: any = sec_num - (hours * 3600) - (minutes * 60);\n\n if(hours && hours < 10 && leadZero) hours = '0' + hours;\n if(minutes < 10 && (hours || leadZero)) minutes ='0' + minutes;\n if(seconds < 10) seconds = '0' + seconds;\n return (hours ? hours + ':' : '') + minutes + ':' + seconds;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport I18n, {LangPackKey, i18n, join} from '../../lib/langPack';\nimport formatDuration, {DurationType} from '../../helpers/formatDuration';\nimport toHHMMSS from '../../helpers/string/toHHMMSS';\n\nexport const DURATION_LANG_KEYS: {[type in DurationType]: LangPackKey} = {\n [DurationType.Seconds]: 'Seconds',\n [DurationType.Minutes]: 'Minutes',\n [DurationType.Hours]: 'Hours',\n [DurationType.Days]: 'Days',\n [DurationType.Weeks]: 'Weeks',\n [DurationType.Months]: 'Months',\n [DurationType.Years]: 'Years'\n};\n\nexport function wrapFormattedDuration(formatted: ReturnType, plain?: boolean) {\n if(plain) {\n const strings = formatted.map((d) => I18n.format(DURATION_LANG_KEYS[d.type], true, [d.duration]));\n return join(strings, false, plain);\n }\n\n const elements = formatted.map((d) => i18n(DURATION_LANG_KEYS[d.type], [d.duration]));\n\n const fragment = document.createElement('span');\n fragment.append(...join(elements, false));\n\n return fragment;\n}\n\nexport function wrapCallDuration(duration: number, plain?: boolean) {\n return wrapFormattedDuration(formatDuration(duration, 2), plain);\n}\n\nexport function wrapLeftDuration(timeLeft: number) {\n const formatted = formatDuration(timeLeft, 3);\n if(formatted[0].type <= DurationType.Hours) {\n return toHHMMSS(timeLeft, true);\n } else {\n formatted.splice(1, Infinity);\n return wrapFormattedDuration(formatted);\n }\n}\n\nexport function wrapSlowModeLeftDuration(timeLeft: number) {\n const formatted = formatDuration(timeLeft, 3);\n if(formatted[0].type === DurationType.Seconds) {\n return wrapFormattedDuration(formatted);\n } else {\n return toHHMMSS(timeLeft, true);\n }\n}\n","// Taken from https://core.telegram.org/bots/payments/currencies.json\nexport type Currency = {\n code: string,\n title: string,\n symbol: string,\n native: string,\n thousands_sep: string,\n decimal_sep: string,\n symbol_left: boolean,\n space_between: boolean,\n exp: number,\n min_amount: string | number,\n max_amount: string | number,\n drop_zeros: boolean\n};\n\n// eslint-disable-next-line quotes, comma-spacing\nconst Currencies: {[currency: string]: Currency} = {\"AED\":{\"code\":\"AED\",\"title\":\"United Arab Emirates Dirham\",\"symbol\":\"AED\",\"native\":\"د.إ.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"367\",\"max_amount\":\"3673020\"},\"AFN\":{\"code\":\"AFN\",\"title\":\"Afghan Afghani\",\"symbol\":\"AFN\",\"native\":\"؋\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"7092\",\"max_amount\":\"70919694\"},\"ALL\":{\"code\":\"ALL\",\"title\":\"Albanian Lek\",\"symbol\":\"ALL\",\"native\":\"Lek\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"9249\",\"max_amount\":\"92485282\"},\"AMD\":{\"code\":\"AMD\",\"title\":\"Armenian Dram\",\"symbol\":\"AMD\",\"native\":\"դր.\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"38785\",\"max_amount\":\"387850064\"},\"ARS\":{\"code\":\"ARS\",\"title\":\"Argentine Peso\",\"symbol\":\"ARS\",\"native\":\"$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"93178\",\"max_amount\":\"931784401\"},\"AUD\":{\"code\":\"AUD\",\"title\":\"Australian Dollar\",\"symbol\":\"AU$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"153\",\"max_amount\":\"1534530\"},\"AZN\":{\"code\":\"AZN\",\"title\":\"Azerbaijani Manat\",\"symbol\":\"AZN\",\"native\":\"ман.\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"170\",\"max_amount\":\"1700517\"},\"BAM\":{\"code\":\"BAM\",\"title\":\"Bosnia & Herzegovina Convertible Mark\",\"symbol\":\"BAM\",\"native\":\"KM\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"181\",\"max_amount\":\"1806101\"},\"BDT\":{\"code\":\"BDT\",\"title\":\"Bangladeshi Taka\",\"symbol\":\"BDT\",\"native\":\"৳\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"11744\",\"max_amount\":\"117439546\"},\"BGN\":{\"code\":\"BGN\",\"title\":\"Bulgarian Lev\",\"symbol\":\"BGN\",\"native\":\"лв.\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"181\",\"max_amount\":\"1808709\"},\"BND\":{\"code\":\"BND\",\"title\":\"Brunei Dollar\",\"symbol\":\"BND\",\"native\":\"$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"133\",\"max_amount\":\"1330735\"},\"BOB\":{\"code\":\"BOB\",\"title\":\"Bolivian Boliviano\",\"symbol\":\"BOB\",\"native\":\"Bs\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"691\",\"max_amount\":\"6906359\"},\"BRL\":{\"code\":\"BRL\",\"title\":\"Brazilian Real\",\"symbol\":\"R$\",\"native\":\"R$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"577\",\"max_amount\":\"5769050\"},\"BYN\":{\"code\":\"BYN\",\"title\":\"Belarusian ruble\",\"symbol\":\"BYN\",\"native\":\"BYN\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"327\",\"max_amount\":\"3270247\"},\"CAD\":{\"code\":\"CAD\",\"title\":\"Canadian Dollar\",\"symbol\":\"CA$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"139\",\"max_amount\":\"1387645\"},\"CHF\":{\"code\":\"CHF\",\"title\":\"Swiss Franc\",\"symbol\":\"CHF\",\"native\":\"CHF\",\"thousands_sep\":\"'\",\"decimal_sep\":\".\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"87\",\"max_amount\":\"870429\"},\"CLP\":{\"code\":\"CLP\",\"title\":\"Chilean Peso\",\"symbol\":\"CLP\",\"native\":\"$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"949\",\"max_amount\":\"9486298\"},\"CNY\":{\"code\":\"CNY\",\"title\":\"Chinese Renminbi Yuan\",\"symbol\":\"CN¥\",\"native\":\"CN¥\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"721\",\"max_amount\":\"7207705\"},\"COP\":{\"code\":\"COP\",\"title\":\"Colombian Peso\",\"symbol\":\"COP\",\"native\":\"$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"408665\",\"max_amount\":\"4086650000\"},\"CRC\":{\"code\":\"CRC\",\"title\":\"Costa Rican Colón\",\"symbol\":\"CRC\",\"native\":\"₡\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"52313\",\"max_amount\":\"523125084\"},\"CZK\":{\"code\":\"CZK\",\"title\":\"Czech Koruna\",\"symbol\":\"CZK\",\"native\":\"Kč\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"2332\",\"max_amount\":\"23323050\"},\"DKK\":{\"code\":\"DKK\",\"title\":\"Danish Krone\",\"symbol\":\"DKK\",\"native\":\"kr\",\"thousands_sep\":\"\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"689\",\"max_amount\":\"6887630\"},\"DOP\":{\"code\":\"DOP\",\"title\":\"Dominican Peso\",\"symbol\":\"DOP\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"5945\",\"max_amount\":\"59453394\"},\"DZD\":{\"code\":\"DZD\",\"title\":\"Algerian Dinar\",\"symbol\":\"DZD\",\"native\":\"د.ج.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"13449\",\"max_amount\":\"134492834\"},\"EGP\":{\"code\":\"EGP\",\"title\":\"Egyptian Pound\",\"symbol\":\"EGP\",\"native\":\"ج.م.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"4869\",\"max_amount\":\"48686201\"},\"ETB\":{\"code\":\"ETB\",\"title\":\"Ethiopian Birr\",\"symbol\":\"ETB\",\"native\":\"ብር\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"8093\",\"max_amount\":\"80931744\"},\"EUR\":{\"code\":\"EUR\",\"title\":\"Euro\",\"symbol\":\"€\",\"native\":\"€\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"92\",\"max_amount\":\"923025\"},\"GBP\":{\"code\":\"GBP\",\"title\":\"British Pound\",\"symbol\":\"£\",\"native\":\"£\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"78\",\"max_amount\":\"784671\"},\"GEL\":{\"code\":\"GEL\",\"title\":\"Georgian Lari\",\"symbol\":\"GEL\",\"native\":\"GEL\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"271\",\"max_amount\":\"2709634\"},\"GTQ\":{\"code\":\"GTQ\",\"title\":\"Guatemalan Quetzal\",\"symbol\":\"GTQ\",\"native\":\"Q\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"775\",\"max_amount\":\"7745760\"},\"HKD\":{\"code\":\"HKD\",\"title\":\"Hong Kong Dollar\",\"symbol\":\"HK$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"781\",\"max_amount\":\"7810275\"},\"HNL\":{\"code\":\"HNL\",\"title\":\"Honduran Lempira\",\"symbol\":\"HNL\",\"native\":\"L\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"2474\",\"max_amount\":\"24741783\"},\"HRK\":{\"code\":\"HRK\",\"title\":\"Croatian Kuna\",\"symbol\":\"HRK\",\"native\":\"kn\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"691\",\"max_amount\":\"6907950\"},\"HUF\":{\"code\":\"HUF\",\"title\":\"Hungarian Forint\",\"symbol\":\"HUF\",\"native\":\"Ft\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"36623\",\"max_amount\":\"366225500\"},\"IDR\":{\"code\":\"IDR\",\"title\":\"Indonesian Rupiah\",\"symbol\":\"IDR\",\"native\":\"Rp\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1620255\",\"max_amount\":\"16202550000\"},\"ILS\":{\"code\":\"ILS\",\"title\":\"Israeli New Sheqel\",\"symbol\":\"₪\",\"native\":\"₪\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"380\",\"max_amount\":\"3801205\"},\"INR\":{\"code\":\"INR\",\"title\":\"Indian Rupee\",\"symbol\":\"₹\",\"native\":\"₹\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"8374\",\"max_amount\":\"83744750\"},\"ISK\":{\"code\":\"ISK\",\"title\":\"Icelandic Króna\",\"symbol\":\"ISK\",\"native\":\"kr\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"139\",\"max_amount\":\"1389014\"},\"JMD\":{\"code\":\"JMD\",\"title\":\"Jamaican Dollar\",\"symbol\":\"JMD\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"15637\",\"max_amount\":\"156368606\"},\"JPY\":{\"code\":\"JPY\",\"title\":\"Japanese Yen\",\"symbol\":\"¥\",\"native\":\"¥\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"149\",\"max_amount\":\"1490865\"},\"KES\":{\"code\":\"KES\",\"title\":\"Kenyan Shilling\",\"symbol\":\"KES\",\"native\":\"Ksh\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"12996\",\"max_amount\":\"129960065\"},\"KGS\":{\"code\":\"KGS\",\"title\":\"Kyrgyzstani Som\",\"symbol\":\"KGS\",\"native\":\"KGS\",\"thousands_sep\":\" \",\"decimal_sep\":\"-\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"8403\",\"max_amount\":\"84030175\"},\"KRW\":{\"code\":\"KRW\",\"title\":\"South Korean Won\",\"symbol\":\"₩\",\"native\":\"₩\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"1367\",\"max_amount\":\"13667698\"},\"KZT\":{\"code\":\"KZT\",\"title\":\"Kazakhstani Tenge\",\"symbol\":\"KZT\",\"native\":\"₸\",\"thousands_sep\":\" \",\"decimal_sep\":\"-\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"47435\",\"max_amount\":\"474353706\"},\"LBP\":{\"code\":\"LBP\",\"title\":\"Lebanese Pound\",\"symbol\":\"LBP\",\"native\":\"ل.ل.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"8950019\",\"max_amount\":\"89500191612\"},\"LKR\":{\"code\":\"LKR\",\"title\":\"Sri Lankan Rupee\",\"symbol\":\"LKR\",\"native\":\"රු.\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"30176\",\"max_amount\":\"301757853\"},\"MAD\":{\"code\":\"MAD\",\"title\":\"Moroccan Dirham\",\"symbol\":\"MAD\",\"native\":\"د.م.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"987\",\"max_amount\":\"9874277\"},\"MDL\":{\"code\":\"MDL\",\"title\":\"Moldovan Leu\",\"symbol\":\"MDL\",\"native\":\"MDL\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1777\",\"max_amount\":\"17770719\"},\"MMK\":{\"code\":\"MMK\",\"title\":\"Myanmar kyat\",\"symbol\":\"MMK\",\"native\":\"MMK\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"324796\",\"max_amount\":\"3247960992\"},\"MNT\":{\"code\":\"MNT\",\"title\":\"Mongolian Tögrög\",\"symbol\":\"MNT\",\"native\":\"MNT\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"345000\",\"max_amount\":\"3450000346\"},\"MOP\":{\"code\":\"MOP\",\"title\":\"Macanese pataca\",\"symbol\":\"MOP\",\"native\":\"MOP\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"804\",\"max_amount\":\"8040613\"},\"MUR\":{\"code\":\"MUR\",\"title\":\"Mauritian Rupee\",\"symbol\":\"MUR\",\"native\":\"MUR\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"4675\",\"max_amount\":\"46749662\"},\"MVR\":{\"code\":\"MVR\",\"title\":\"Maldivian Rufiyaa\",\"symbol\":\"MVR\",\"native\":\"MVR\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1535\",\"max_amount\":\"15350296\"},\"MXN\":{\"code\":\"MXN\",\"title\":\"Mexican Peso\",\"symbol\":\"MX$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1898\",\"max_amount\":\"18980550\"},\"MYR\":{\"code\":\"MYR\",\"title\":\"Malaysian Ringgit\",\"symbol\":\"MYR\",\"native\":\"RM\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"450\",\"max_amount\":\"4497502\"},\"MZN\":{\"code\":\"MZN\",\"title\":\"Mozambican Metical\",\"symbol\":\"MZN\",\"native\":\"MTn\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"6390\",\"max_amount\":\"63899991\"},\"NGN\":{\"code\":\"NGN\",\"title\":\"Nigerian Naira\",\"symbol\":\"NGN\",\"native\":\"₦\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"163953\",\"max_amount\":\"1639530235\"},\"NIO\":{\"code\":\"NIO\",\"title\":\"Nicaraguan Córdoba\",\"symbol\":\"NIO\",\"native\":\"C$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"3679\",\"max_amount\":\"36791630\"},\"NOK\":{\"code\":\"NOK\",\"title\":\"Norwegian Krone\",\"symbol\":\"NOK\",\"native\":\"kr\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1100\",\"max_amount\":\"10996470\"},\"NPR\":{\"code\":\"NPR\",\"title\":\"Nepalese Rupee\",\"symbol\":\"NPR\",\"native\":\"नेरू\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"13390\",\"max_amount\":\"133897859\"},\"NZD\":{\"code\":\"NZD\",\"title\":\"New Zealand Dollar\",\"symbol\":\"NZ$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"168\",\"max_amount\":\"1679219\"},\"PAB\":{\"code\":\"PAB\",\"title\":\"Panamanian Balboa\",\"symbol\":\"PAB\",\"native\":\"B\\/.\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"100\",\"max_amount\":\"999469\"},\"PEN\":{\"code\":\"PEN\",\"title\":\"Peruvian Nuevo Sol\",\"symbol\":\"PEN\",\"native\":\"S\\/.\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"374\",\"max_amount\":\"3740759\"},\"PHP\":{\"code\":\"PHP\",\"title\":\"Philippine Peso\",\"symbol\":\"PHP\",\"native\":\"₱\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"5806\",\"max_amount\":\"58056502\"},\"PKR\":{\"code\":\"PKR\",\"title\":\"Pakistani Rupee\",\"symbol\":\"PKR\",\"native\":\"₨\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"27836\",\"max_amount\":\"278360445\"},\"PLN\":{\"code\":\"PLN\",\"title\":\"Polish Złoty\",\"symbol\":\"PLN\",\"native\":\"zł\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"396\",\"max_amount\":\"3957640\"},\"PYG\":{\"code\":\"PYG\",\"title\":\"Paraguayan Guaraní\",\"symbol\":\"PYG\",\"native\":\"₲\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"7569\",\"max_amount\":\"75694544\"},\"QAR\":{\"code\":\"QAR\",\"title\":\"Qatari Riyal\",\"symbol\":\"QAR\",\"native\":\"ر.ق.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"364\",\"max_amount\":\"3644355\"},\"RON\":{\"code\":\"RON\",\"title\":\"Romanian Leu\",\"symbol\":\"RON\",\"native\":\"RON\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"459\",\"max_amount\":\"4592300\"},\"RSD\":{\"code\":\"RSD\",\"title\":\"Serbian Dinar\",\"symbol\":\"RSD\",\"native\":\"дин.\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"10802\",\"max_amount\":\"108020115\"},\"RUB\":{\"code\":\"RUB\",\"title\":\"Russian Ruble\",\"symbol\":\"RUB\",\"native\":\"₽\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"8990\",\"max_amount\":\"89898410\"},\"SAR\":{\"code\":\"SAR\",\"title\":\"Saudi Riyal\",\"symbol\":\"SAR\",\"native\":\"ر.س.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"375\",\"max_amount\":\"3754022\"},\"SEK\":{\"code\":\"SEK\",\"title\":\"Swedish Krona\",\"symbol\":\"SEK\",\"native\":\"kr\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1069\",\"max_amount\":\"10689290\"},\"SGD\":{\"code\":\"SGD\",\"title\":\"Singapore Dollar\",\"symbol\":\"SGD\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"133\",\"max_amount\":\"1331235\"},\"THB\":{\"code\":\"THB\",\"title\":\"Thai Baht\",\"symbol\":\"฿\",\"native\":\"฿\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"3535\",\"max_amount\":\"35351502\"},\"TJS\":{\"code\":\"TJS\",\"title\":\"Tajikistani Somoni\",\"symbol\":\"TJS\",\"native\":\"TJS\",\"thousands_sep\":\" \",\"decimal_sep\":\";\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1057\",\"max_amount\":\"10569158\"},\"TRY\":{\"code\":\"TRY\",\"title\":\"Turkish Lira\",\"symbol\":\"TRY\",\"native\":\"TL\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"3317\",\"max_amount\":\"33166840\"},\"TTD\":{\"code\":\"TTD\",\"title\":\"Trinidad and Tobago Dollar\",\"symbol\":\"TTD\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"677\",\"max_amount\":\"6768188\"},\"TWD\":{\"code\":\"TWD\",\"title\":\"New Taiwan Dollar\",\"symbol\":\"NT$\",\"native\":\"NT$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"3281\",\"max_amount\":\"32805499\"},\"TZS\":{\"code\":\"TZS\",\"title\":\"Tanzanian Shilling\",\"symbol\":\"TZS\",\"native\":\"TSh\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"270000\",\"max_amount\":\"2700000297\"},\"UAH\":{\"code\":\"UAH\",\"title\":\"Ukrainian Hryvnia\",\"symbol\":\"UAH\",\"native\":\"₴\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"4124\",\"max_amount\":\"41236639\"},\"UGX\":{\"code\":\"UGX\",\"title\":\"Ugandan Shilling\",\"symbol\":\"UGX\",\"native\":\"USh\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"3723\",\"max_amount\":\"37234902\"},\"USD\":{\"code\":\"USD\",\"title\":\"United States Dollar\",\"symbol\":\"$\",\"native\":\"$\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":false,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"100\",\"max_amount\":1000000},\"UYU\":{\"code\":\"UYU\",\"title\":\"Uruguayan Peso\",\"symbol\":\"UYU\",\"native\":\"$\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"4027\",\"max_amount\":\"40269076\"},\"UZS\":{\"code\":\"UZS\",\"title\":\"Uzbekistani Som\",\"symbol\":\"UZS\",\"native\":\"UZS\",\"thousands_sep\":\" \",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1256851\",\"max_amount\":\"12568510387\"},\"VND\":{\"code\":\"VND\",\"title\":\"Vietnamese Đồng\",\"symbol\":\"₫\",\"native\":\"₫\",\"thousands_sep\":\".\",\"decimal_sep\":\",\",\"symbol_left\":false,\"space_between\":true,\"drop_zeros\":false,\"exp\":0,\"min_amount\":\"25218\",\"max_amount\":\"252175000\"},\"YER\":{\"code\":\"YER\",\"title\":\"Yemeni Rial\",\"symbol\":\"YER\",\"native\":\"ر.ي.‏\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"25035\",\"max_amount\":\"250350255\"},\"ZAR\":{\"code\":\"ZAR\",\"title\":\"South African Rand\",\"symbol\":\"ZAR\",\"native\":\"R\",\"thousands_sep\":\",\",\"decimal_sep\":\".\",\"symbol_left\":true,\"space_between\":true,\"drop_zeros\":false,\"exp\":2,\"min_amount\":\"1819\",\"max_amount\":\"18193780\"}};\n\nexport default Currencies;\n","import Icon from '../components/icon';\nimport Currencies from '../config/currencies';\nimport I18n from '../lib/langPack';\nimport {STARS_CURRENCY} from '../lib/mtproto/mtproto_config';\n\n// https://stackoverflow.com/a/34141813\nfunction number_format(number: any, decimals: any, dec_point: any, thousands_sep: any): string {\n // Strip all characters but numerical ones.\n number = (number + '').replace(/[^0-9+\\-Ee.]/g, '');\n var n = !isFinite(+number) ? 0 : +number,\n prec = !isFinite(+decimals) ? 0 : Math.abs(decimals),\n sep = (typeof thousands_sep === 'undefined') ? ',' : thousands_sep,\n dec = (typeof dec_point === 'undefined') ? '.' : dec_point,\n s: any = '',\n toFixedFix = function(n: number, prec: number) {\n var k = Math.pow(10, prec);\n return '' + Math.round(n * k) / k;\n };\n // Fix for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec) : '' + Math.round(n)).split('.');\n if(s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n return s.join(dec);\n}\n\nexport default function paymentsWrapCurrencyAmount(\n amount: number | string,\n currency: string,\n skipSymbol?: boolean,\n useNative?: boolean,\n plain?: T\n): T extends true ? string : HTMLElement | string {\n amount = +amount;\n\n if(currency === STARS_CURRENCY) {\n if(plain) {\n return I18n.format('StarsCount', true, [amount]);\n }\n\n const out = document.createElement('span');\n out.classList.add('xtr');\n out.append(Icon('star', 'xtr-icon'), ' ', '' + amount);\n return out as any;\n }\n\n const isNegative = amount < 0;\n\n const currencyData = Currencies[currency];\n if(!currencyData) {\n throw new Error('CURRENCY_WRAP_INVALID');\n }\n\n const amountExp = amount / Math.pow(10, currencyData.exp);\n\n let decimals = currencyData.exp;\n if(currency == 'IRR' && Math.floor(amountExp) == amountExp) {\n decimals = 0; // у иранцев копейки почти всегда = 0 и не показываются в UI\n }\n\n let formatted = number_format(amountExp, decimals, currencyData.decimal_sep, currencyData.thousands_sep);\n if(skipSymbol) {\n return formatted;\n }\n\n let symbol = useNative ? currencyData.native || currencyData.symbol : currencyData.symbol;\n if(isNegative && !currencyData.space_between && currencyData.symbol_left) {\n symbol = '-' + symbol;\n formatted = formatted.replace('-', '');\n }\n\n let out: string;\n const splitter = currencyData.space_between ? ' ' : '';\n if(currencyData.symbol_left) {\n out = symbol + splitter + formatted;\n } else {\n out = formatted + splitter + symbol;\n }\n return out;\n}\n\n(window as any).p = paymentsWrapCurrencyAmount;\n\n// function paymentsGetCurrencyExp($currency: string) {\n// if($currency == 'CLF') {\n// return 4;\n// }\n// if(['BHD','IQD','JOD','KWD','LYD','OMR','TND'].includes($currency)) {\n// return 3;\n// }\n// if(['BIF','BYR','CLP','CVE','DJF','GNF','ISK','JPY','KMF','KRW','MGA', 'PYG','RWF','UGX','UYI','VND','VUV','XAF','XOF','XPF'].includes($currency)) {\n// return 0;\n// }\n// if($currency == 'MRO') {\n// return 1;\n// }\n// return 2;\n// }\n","import isObject from '../../../../helpers/object/isObject';\nimport {InputChannel, InputPeer, InputUser, Peer} from '../../../../layer';\nimport {NULL_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function getPeerId(peerId: {user_id: UserId} | {channel_id: ChatId} | {chat_id: ChatId} | InputUser | InputPeer | InputChannel | PeerId | string): PeerId {\n if(peerId !== undefined && ((peerId as string).isPeerId ? (peerId as string).isPeerId() : false)) return peerId as PeerId;\n // if(typeof(peerId) === 'string' && /^[uc]/.test(peerId)) return peerId as PeerId;\n // if(typeof(peerId) === 'number') return peerId;\n else if(isObject(peerId)) {\n const userId = (peerId as Peer.peerUser).user_id;\n if(userId !== undefined) {\n return userId.toPeerId(false);\n }\n\n const chatId = (peerId as Peer.peerChannel).channel_id || (peerId as Peer.peerChat).chat_id;\n if(chatId !== undefined) {\n return chatId.toPeerId(true);\n }\n\n return NULL_PEER_ID; // maybe it is an inputPeerSelf\n // } else if(!peerId) return 'u0';\n } else if(!peerId) return NULL_PEER_ID;\n\n const isUser = (peerId as string).charAt(0) === 'u';\n const peerParams = (peerId as string).substr(1).split('_');\n\n return isUser ? peerParams[0].toPeerId() : (peerParams[0] || '').toPeerId(true);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport encodeSpoiler from './encodeSpoiler';\n\n/**\n * ! This function is still unsafe to use with .innerHTML\n */\nexport default function wrapPlainText(text: string, entities: MessageEntity[] = []) {\n entities.forEach((entity) => {\n if(entity._ === 'messageEntitySpoiler') {\n text = encodeSpoiler(text, entity).text;\n }\n });\n\n return text;\n // if(entities?.length) {\n // entities = entities.filter((entity) => entity._ === 'messageEntitySpoiler');\n // }\n\n // return wrapRichText(text, {\n // entities,\n // noEncoding: true,\n // noTextFormat: true,\n // noLinebreaks: true,\n // noLinks: true\n // }).textContent;\n}\n","import {MessageEntity} from '../../layer';\nimport {toCodePoints} from '../../vendor/emoji';\n\nexport default function getEmojiEntityFromEmoji(emoji: string): MessageEntity.messageEntityEmoji {\n return {\n _: 'messageEntityEmoji',\n offset: 0,\n length: emoji.length,\n unicode: toCodePoints(emoji).join('-').replace(/-?fe0f/g, '')\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport getEmojiEntityFromEmoji from './getEmojiEntityFromEmoji';\nimport emojiRegExp from '../../vendor/emoji/regex';\n\nconst EMOJI_REG_EXP = new RegExp(`(^${emojiRegExp})`);\n\nexport default function getAbbreviation(str: string, onlyFirst = false): {\n text: string,\n entities: MessageEntity[]\n} {\n const splitted = (str || '').trim().split(' ');\n if(!splitted[0]) return {text: '', entities: []};\n\n const entities: MessageEntity.messageEntityEmoji[] = [];\n\n const firstEmojiMatch = splitted[0].match(EMOJI_REG_EXP);\n const first = firstEmojiMatch?.[0] || splitted[0][0];\n if(firstEmojiMatch) {\n entities.push(getEmojiEntityFromEmoji(first));\n }\n\n const length = splitted.length;\n if(onlyFirst || length === 1) return {text: first, entities};\n\n const lastEmojiMatch = splitted[length - 1].match(EMOJI_REG_EXP);\n const last = lastEmojiMatch?.[0] || splitted[length - 1][0];\n if(lastEmojiMatch) {\n entities.push({\n ...getEmojiEntityFromEmoji(last),\n offset: first.length\n });\n }\n\n return {text: first + last, entities};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport wrapEmojiText from './wrapEmojiText';\nimport getAbbreviation from './getAbbreviation';\n\nexport default function wrapAbbreviation(str: string, onlyFirst?: boolean) {\n const {text, entities} = getAbbreviation(str, onlyFirst);\n return wrapEmojiText(text, undefined, entities);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {hexaToHsla} from '../helpers/color';\nimport {TOPIC_COLORS} from '../lib/mtproto/mtproto_config';\nimport wrapAbbreviation from '../lib/richTextProcessor/wrapAbbreviation';\n\nlet svg: SVGSVGElement, span: HTMLElement, defs: HTMLElement;\nconst hadColors: Map = new Map();\nexport default function topicAvatar(color: number, content: string) {\n if(!svg) {\n defs = document.getElementById('svg-defs') as HTMLElement;\n\n const ns = 'http://www.w3.org/2000/svg';\n\n svg = document.createElementNS(ns, 'svg');\n svg.setAttributeNS(null, 'width', '26');\n svg.setAttributeNS(null, 'height', '26');\n svg.setAttributeNS(null, 'viewBox', '0 0 26 26');\n svg.classList.add('topic-icon-svg');\n\n const use = document.createElementNS(ns, 'use');\n use.setAttributeNS(null, 'href', '#topic-icon');\n svg.append(use);\n\n span = document.createElement('span');\n span.classList.add('topic-icon', 'avatar-like');\n\n const contentSpan = document.createElement('span');\n contentSpan.classList.add('topic-icon-content');\n span.append(svg, contentSpan);\n }\n\n if(!color) {\n console.error('NO TOPIC ICON COLOR!');\n color = TOPIC_COLORS[0];\n }\n\n if(!content) {\n console.error('NO TOPIC NAME!');\n content = '';\n }\n\n const hex = color.toString(16);\n\n const gradientId = `topic-icon-gradient-${color}`;\n let strokeColor = hadColors.get(color);\n if(!strokeColor) {\n const {h, s, l, a} = hexaToHsla('#' + hex);\n defs.insertAdjacentHTML('beforeend', `\n \n \n \n \n `);\n\n hadColors.set(color, strokeColor = `hsla(${h}, ${s}%, ${Math.max(0, l - 40)}%, ${a})`);\n }\n\n const clone = span.cloneNode(true) as typeof span;\n (clone.firstElementChild as HTMLElement).style.fill = `url(#${gradientId})`;\n // (clone.firstElementChild as HTMLElement).style.stroke = `var(--peer-avatar-${color}-filled)`;\n (clone.firstElementChild as HTMLElement).style.stroke = strokeColor;\n clone.lastElementChild.append(wrapAbbreviation(content, true));\n return clone;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\n\nexport default function wrapCustomEmoji({\n docIds,\n loadPromises,\n middleware,\n lazyLoadQueue,\n customEmojiSize,\n animationGroup\n}: {\n docIds: DocId[],\n loadPromises?: Promise[]\n} & WrapSomethingOptions) {\n const text = ' '.repeat(docIds.length);\n const entities: MessageEntity[] = [];\n docIds.forEach((docId, idx) => {\n entities.push({\n _: 'messageEntityCustomEmoji',\n offset: idx,\n length: 1,\n document_id: docId\n });\n });\n\n const wrapped = wrapRichText(text, {\n entities,\n loadPromises,\n animationGroup,\n customEmojiSize,\n middleware,\n lazyLoadQueue\n });\n\n return wrapped;\n}\n\nexport function wrapCustomEmojiAwaited(options: Parameters[0]) {\n const loadPromises: Promise[] = options.loadPromises ??= [];\n const wrapped = wrapCustomEmoji(options);\n return Promise.all(loadPromises).then(() => wrapped);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message, MessageAction} from '../../layer';\nimport wrapUrl from '../../lib/richTextProcessor/wrapUrl';\n\nexport default function wrapJoinVoiceChatAnchor(message: Message.messageService) {\n const action = message.action as MessageAction.messageActionInviteToGroupCall;\n const {onclick, url} = wrapUrl(`tg://voicechat?chat_id=${message.peerId.toChatId()}&id=${action.call.id}&access_hash=${action.call.access_hash}`);\n if(!onclick) {\n return document.createElement('span');\n }\n\n const a = document.createElement('a');\n a.href = url;\n a.setAttribute('onclick', onclick + '(this)');\n\n return a;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function partition(arr: T[], callback: (item: T, idx: number, arr: T[]) => boolean) {\n const good: T[] = [], bad: T[] = [];\n for(let i = 0, length = arr.length; i < length; ++i) {\n const item = arr[i];\n (callback(item, i, arr) ? good : bad).push(item);\n }\n\n return [good, bad];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function htmlToDocumentFragment(html: string | DocumentFragment) {\n if(html instanceof DocumentFragment) return html;\n const template = document.createElement('template');\n html = html.trim(); // Never return a text node of whitespace as the result\n template.innerHTML = html;\n return template.content;\n}\n","import {RestrictionReason} from '../layer';\n\nconst platforms = new Set([\n 'all',\n 'web',\n 'webk'\n]);\n\nconst ignore = new Set();\n\nexport function getRestrictionReason(reasons: RestrictionReason[]) {\n // return reasons[0];\n return reasons.find((reason) => platforms.has(reason.platform) && !ignore.has(reason.reason));\n}\n\nexport function isRestricted(reasons: RestrictionReason[]) {\n return !!getRestrictionReason(reasons);\n}\n\nexport function ignoreRestrictionReasons(reasons: string[]) {\n ignore.clear();\n reasons.forEach((reason) => {\n ignore.add(reason);\n });\n}\n","// credits to https://github.com/sindresorhus/escape-string-regexp/blob/master/index.js\nexport default function escapeRegExp(str: string) {\n return str\n .replace(/[|\\\\{}()[\\]^$+*?.]/g, '\\\\$&')\n .replace(/-/g, '\\\\x2d');\n}\n","import {isRestricted} from '../../../../helpers/restrictions';\nimport {Message} from '../../../../layer';\n\nexport default function isMessageRestricted(message: Message.message) {\n return !!(message.restriction_reason && isRestricted(message.restriction_reason));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MessageEntity} from '../../layer';\n\nexport default function fixEmoji(text: string, entities?: MessageEntity[]) {\n /* if(!IS_EMOJI_SUPPORTED) {\n return text;\n } */\n // '$`\\ufe0f'\n\n text = text.replace(/[\\u2640\\u2642\\u2764](?!\\ufe0f)/g, (match, offset, string) => {\n if(entities) {\n const length = match.length;\n\n offset += length;\n entities.forEach((entity) => {\n const end = entity.offset + entity.length;\n if(end === offset) { // current entity\n entity.length += length;\n } else if(end > offset) {\n entity.offset += length;\n }\n });\n }\n\n // console.log([match, offset, string]);\n return match + '\\ufe0f';\n });\n\n return text;\n}\n","import {MessageEntity} from '../../layer';\nimport fixEmoji from './fixEmoji';\nimport mergeEntities from './mergeEntities';\nimport parseEntities from './parseEntities';\n\nexport default function wrapMessageEntities(message: string, entities: MessageEntity[] = []) {\n message = fixEmoji(message, entities);\n\n const myEntities = parseEntities(message);\n const totalEntities = mergeEntities(entities, myEntities); // ! only in this order, otherwise bold and emoji formatting won't work\n return {\n message,\n entities,\n myEntities,\n totalEntities\n };\n}\n","import {TextWithEntities} from '../../layer';\nimport mergeEntities from './mergeEntities';\nimport wrapMessageEntities from './wrapMessageEntities';\n\nexport default function wrapTextWithEntities(textWithEntities: TextWithEntities): TextWithEntities {\n const {message, entities, myEntities} = wrapMessageEntities(textWithEntities.text, textWithEntities.entities);\n const totalEntities = mergeEntities(entities, myEntities.filter((entity) => entity._ === 'messageEntityCustomEmoji' || entity._ === 'messageEntityEmoji'));\n return {_: 'textWithEntities', text: message, entities: totalEntities};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AckedResult} from '../lib/mtproto/superMessagePort';\nimport {Modify} from '../types';\n\nexport default async function modifyAckedResult(acked: AckedResult): Promise, {result: T | Promise}>> {\n return {\n cached: acked.cached,\n result: acked.cached ? await acked.result : acked.result\n };\n}\n\nexport function modifyAckedPromise(promise: Promise>) {\n return promise.then(modifyAckedResult);\n}\n","import {createMemo} from 'solid-js';\nimport {createStore, reconcile} from 'solid-js/store';\nimport {ChatFull, UserFull} from '../layer';\nimport rootScope from '../lib/rootScope';\n\ntype PeerFull = ChatFull | UserFull;\n\nconst [state, setState] = createStore<{[peerId: PeerId]: PeerFull}>({});\n\nconst requestFullPeer = (peerId: PeerId) => {\n rootScope.managers.appProfileManager.getProfileByPeerId(peerId).then((fullPeer) => {\n setState(peerId, reconcile(fullPeer));\n });\n};\n\nrootScope.addEventListener('peer_full_update', requestFullPeer);\n\nexport function useFullPeer(peerId: () => PeerId) {\n return createMemo(() => {\n if(!peerId()) return;\n\n const fullPeer = state[peerId()];\n if(!fullPeer) {\n requestFullPeer(peerId());\n }\n\n return fullPeer;\n });\n}\n","import deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\n\nlet worker: Worker;\nlet promises: CancellablePromise[];\n\nexport default function detectLanguage(text: string): Promise {\n if(!worker) {\n worker = new Worker(new URL('./tinyld.worker.ts', import.meta.url), {type: 'module'});\n worker.addEventListener('message', (e) => {\n const {lang} = e.data;\n const promise = promises.shift();\n promise.resolve(lang);\n });\n\n promises = [];\n }\n\n const deferred = deferredPromise();\n promises.push(deferred);\n worker.postMessage({text});\n return deferred;\n}\n","import {createMemo, batch, untrack, createRoot, createEffect, on, Accessor} from 'solid-js';\nimport {createStore, SetStoreFunction} from 'solid-js/store';\nimport {Message} from '../layer';\nimport I18n from '../lib/langPack';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport detectLanguage from '../lib/tinyld/detect';\nimport {useAppState} from './appState';\n\n// https://core.telegram.org/api/translation\nexport const MIN_TOTAL_PROCESSED_MESSAGES = 8;\nexport const MIN_FOREIGN_PERCENTAGE = 0.65;\n\ntype TT = {\n messages: {[mid: number]: TranslatableLanguageISO},\n languages: {[lang: string]: number},\n language: TranslatableLanguageISO,\n total: number,\n totalForeign: number,\n isFull?: boolean\n};\n\ntype T = {\n [peerId: PeerId]: TT\n};\n\nlet state: T, setState: SetStoreFunction, myLanguages: Accessor>;\nlet _createStore = () => {\n _createStore = undefined;\n [state, setState] = createStore({});\n\n createRoot(() => {\n const [appState] = useAppState();\n myLanguages = createMemo(() => {\n const myLanguages = new Set(\n appState.translations.doNotTranslate.concat(\n navigator.language.split('-')[0] as TranslatableLanguageISO,\n I18n.langCodeNormalized()\n )\n );\n\n return myLanguages;\n });\n\n createEffect(on(\n myLanguages,\n (myLanguages) => batch(() => {\n for(const peerId in state) {\n const current = state[peerId];\n if(!current) {\n continue;\n }\n\n let newTotalForeign = 0;\n for(const lang in current.languages) {\n if(!myLanguages.has(lang as TranslatableLanguageISO)) {\n newTotalForeign += current.languages[lang];\n }\n }\n\n setState(peerId.toPeerId(), 'totalForeign', newTotalForeign);\n }\n }),\n {defer: true}\n ));\n });\n};\n\nfunction createEmpty(): TT {\n return {\n messages: {},\n languages: {},\n language: undefined,\n total: 0,\n totalForeign: 0\n };\n}\n\nexport function setPeerLanguageLoaded(peerId: PeerId) {\n _createStore?.();\n if(!untrack(() => state[peerId])) {\n setState(peerId, createEmpty());\n }\n setState(peerId, 'isFull', true);\n}\n\nexport async function processMessageForTranslation(peerId: PeerId, mid: number) {\n _createStore?.();\n if(state[peerId] && state[peerId].messages[mid]) {\n return;\n }\n\n const message = apiManagerProxy.getMessageByPeer(peerId, mid);\n const text = (message as Message.message).message;\n if(!text) {\n return;\n }\n\n const lang = await detectLanguage(text);\n const isForeign = !myLanguages().has(lang);\n batch(() => {\n let previous = untrack(() => state[peerId]);\n if(!previous) {\n setState(peerId, previous = createEmpty());\n } else if(previous.messages[mid]) {\n return;\n }\n\n const newLanguageLength = (previous.languages[lang] ?? 0) + 1;\n const newTotal = previous.total + 1;\n const newTotalForeign = previous.totalForeign + (isForeign ? 1 : 0);\n setState(peerId, 'messages', mid, lang);\n setState(peerId, 'languages', lang, newLanguageLength);\n setState(peerId, 'total', newTotal);\n if(isForeign) setState(peerId, 'totalForeign', newTotalForeign);\n\n const previousLanguage = previous.language;\n if((previous.languages[previousLanguage] || 0) < newLanguageLength) {\n setState(peerId, 'language', lang);\n }\n });\n}\n\nexport default function usePeerLanguage(peerId: () => PeerId, onlyIfForeign?: boolean) {\n return createMemo(() => {\n const _peerId = peerId();\n if(!_peerId) {\n return;\n }\n\n _createStore?.();\n const current = state[_peerId];\n if(current && current.total < MIN_TOTAL_PROCESSED_MESSAGES && !current.isFull) {\n return;\n }\n\n if(onlyIfForeign && current && (current.totalForeign / current.total) < MIN_FOREIGN_PERCENTAGE) {\n return;\n }\n\n return current?.language;\n });\n}\n","import {createMemo, createRoot, Accessor, onCleanup} from 'solid-js';\n\ntype T = Partial<{\n count: number,\n factory: () => any,\n value: any,\n dispose: () => void\n}>;\n\nconst cache = new Map();\n\nexport default function useDynamicCachedValue(cacheKey: Accessor, factory: () => T): Accessor {\n return createMemo(() => {\n const currentKey = cacheKey();\n let entry = cache.get(currentKey);\n\n if(!entry) {\n entry = {count: 0, factory};\n entry.value = createRoot((dispose) => {\n entry.dispose = dispose;\n return factory();\n });\n cache.set(currentKey, entry);\n }\n\n ++entry.count;\n\n onCleanup(() => {\n if(!--entry.count) {\n entry.dispose();\n cache.delete(currentKey);\n }\n });\n\n return entry.value;\n });\n}\n","import {createRoot, createSignal} from 'solid-js';\nimport rootScope from '../lib/rootScope';\n\nconst [premium, setPremium] = createRoot(() => createSignal(rootScope.premium));\n\nconst onAuth = () => {\n rootScope.managers.rootScope.getPremium().then(setPremium);\n};\n\nrootScope.addEventListener('premium_toggle', setPremium);\nif(rootScope.myId) {\n onAuth();\n} else {\n rootScope.addEventListener('user_auth', onAuth);\n}\n\nexport default function usePremium() {\n return premium;\n}\n","import {useAppState} from '../stores/appState';\nimport {useFullPeer} from '../stores/fullPeers';\nimport {createEffect, createMemo} from 'solid-js';\nimport usePeerLanguage from '../stores/peerLanguage';\nimport useDynamicCachedValue from '../helpers/solid/useDynamicCachedValue';\nimport I18n from '../lib/langPack';\nimport usePremium from '../stores/premium';\n\nfunction _usePeerTranslation(peerId: PeerId) {\n const [appState, setAppState] = useAppState();\n\n const fullPeer = useFullPeer(() => peerId);\n const peerLanguage = usePeerLanguage(() => peerId, true);\n const isPremium = usePremium();\n\n const shouldShow = createMemo(() => {\n if(!isPremium() || !fullPeer() || !peerLanguage() || !appState.translations.enabled) {\n return;\n }\n\n if(\n fullPeer().pFlags.translations_disabled ||\n appState.translations.doNotTranslate.includes(peerLanguage())\n ) {\n return false;\n }\n\n return true;\n });\n\n const ret = {\n peerLanguage,\n language: (): TranslatableLanguageISO => (appState.translations.peers[peerId] || I18n.langCodeNormalized()) as any,\n setLanguage: (lang: string) => setAppState('translations', 'peers', peerId, lang),\n enabled: createMemo(() => !!(isPremium() && appState.translations.enabled && appState.translations.enabledPeers[peerId]) && shouldShow()),\n toggle: (enabled: boolean) => setAppState('translations', 'enabledPeers', peerId, enabled ? true : undefined),\n shouldShow\n } as const;\n\n createEffect(() => {\n if(ret.shouldShow() === false && ret.enabled()) {\n ret.toggle(false);\n }\n });\n\n return ret;\n}\n\nexport default function usePeerTranslation(peerId: PeerId) {\n return useDynamicCachedValue(() => usePeerTranslation.name + '-' + peerId, () => _usePeerTranslation(peerId))();\n}\n","import {getMiddleware} from '../middleware';\nimport {onCleanup} from 'solid-js';\n\nexport default function createMiddleware() {\n const middleware = getMiddleware();\n onCleanup(() => middleware.destroy());\n return middleware;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../helpers/cancellablePromise';\nimport {Middleware} from '../helpers/middleware';\nimport {modifyAckedPromise} from '../helpers/modifyAckedResult';\nimport usePeerTranslation from '../hooks/usePeerTranslation';\nimport {Message, TextWithEntities} from '../layer';\nimport wrapRichText from '../lib/richTextProcessor/wrapRichText';\nimport {createRoot, createSignal, createMemo, onCleanup, createEffect} from 'solid-js';\nimport rootScope from '../lib/rootScope';\nimport SuperIntersectionObserver from '../helpers/dom/superIntersectionObserver';\nimport {processMessageForTranslation} from '../stores/peerLanguage';\nimport createMiddleware from '../helpers/solid/createMiddleware';\nimport wrapMessageEntities from '../lib/richTextProcessor/wrapMessageEntities';\nimport wrapTextWithEntities from '../lib/richTextProcessor/wrapTextWithEntities';\n\nconst USE_OBSERVER = false;\n\nexport function TranslatableMessageTsx(props: {\n peerId: PeerId,\n message?: Message.message,\n textWithEntities?: TextWithEntities,\n richTextOptions?: Parameters[1],\n observer?: SuperIntersectionObserver,\n observeElement?: HTMLElement,\n container?: HTMLElement,\n enabled?: boolean,\n onTranslation?: (callback: () => void) => void,\n onTextWithEntities?: (textWithEntities: TextWithEntities) => TextWithEntities\n}) {\n const useObserver = USE_OBSERVER && props.observer && props.enabled === undefined;\n const [visible, setVisible] = createSignal(!useObserver);\n const wasVisible = createMemo((prev) => prev || visible());\n const [textWithEntities, setTextWithEntities] = createSignal();\n const translation = usePeerTranslation(props.peerId);\n const deferred = deferredPromise();\n let originalText: TextWithEntities = props.textWithEntities;\n let first = true, hadText = false;\n\n const dontShowOriginalFirst = props.enabled;\n const container = props.container ?? document.createElement('span');\n container.classList.add('translatable-message');\n\n if(props.message) {\n processMessageForTranslation(props.peerId, props.message.mid);\n originalText = {\n _: 'textWithEntities',\n text: props.message.message,\n entities: props.message.totalEntities\n };\n }\n\n if(props.richTextOptions?.loadPromises) {\n props.richTextOptions.loadPromises.push(deferred);\n }\n\n const translate = (lang: string, onlyCache?: boolean) => {\n return modifyAckedPromise(rootScope.managers.acknowledged.appTranslationsManager.translateText({\n ...(props.message ? {\n peerId: props.message.peerId,\n mid: props.message.mid\n } : {\n text: props.textWithEntities\n }),\n lang,\n onlyCache\n }));\n };\n\n const setOriginalText = (loading?: boolean) => {\n setTextWithEntities(originalText);\n container.classList.toggle('text-loading', !!loading);\n };\n\n if(props.observer && props.observeElement && useObserver) {\n const onVisible = (entry: IntersectionObserverEntry) => {\n setVisible(entry.isIntersecting);\n };\n\n props.observer.observe(props.observeElement, onVisible);\n onCleanup(() => {\n props.observer.unobserve(props.observeElement, onVisible);\n });\n }\n\n createEffect(async() => {\n const middleware = createMiddleware().get();\n const _first = first;\n first = false;\n\n // if the message is invisible and it's not the first time we're opening the chat\n if((!translation.enabled() && !props.enabled) || (!wasVisible() && !_first)) {\n setOriginalText();\n return;\n }\n\n const r = await translate(translation.language(), _first && useObserver);\n if(!middleware()) {\n return;\n }\n\n if(!r.cached) {\n if(!dontShowOriginalFirst) {\n setOriginalText(true);\n } else {\n container.classList.add('text-loading');\n }\n } else if(!r.result) {\n setOriginalText();\n return;\n }\n\n const textWithEntities = await r.result;\n if(!middleware()) {\n return;\n }\n\n if(!textWithEntities) {\n setOriginalText();\n return;\n }\n\n setTextWithEntities(textWithEntities);\n });\n\n createEffect(() => {\n let r = textWithEntities();\n if(!r) {\n return;\n }\n\n if(props.onTextWithEntities) {\n r = props.onTextWithEntities(r);\n }\n\n if(originalText !== r || !props.message) {\n r = wrapTextWithEntities(r);\n }\n\n const middleware = createMiddleware().get();\n const loadPromises: Promise[] = [];\n const wrapped = wrapRichText(r.text, {\n ...(props.richTextOptions || {}),\n loadPromises,\n entities: r.entities\n });\n\n Promise.all(loadPromises).then(() => {\n if(!middleware()) return;\n\n const set = () => {\n if(!middleware()) return;\n deferred.resolve();\n container.replaceChildren(wrapped);\n if(hadText || dontShowOriginalFirst) container.classList.remove('text-loading');\n hadText = true;\n };\n\n if(hadText && props.onTranslation) {\n props.onTranslation(set);\n return;\n }\n\n set();\n });\n });\n\n return container;\n}\n\nexport default function TranslatableMessage(props: Parameters[0] & {middleware: Middleware}) {\n return createRoot((dispose) => {\n props.middleware.onDestroy(dispose);\n return TranslatableMessageTsx(props);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyMessage} from '../../lib/appManagers/appMessagesManager';\nimport wrapMessageActionTextNewUnsafe from './messageActionTextNewUnsafe';\n\nexport type WrapMessageActionTextOptions = {\n message: MyMessage,\n plain?: boolean,\n noLinks?: boolean,\n noTextFormat?: boolean\n} & WrapSomethingOptions;\n\nexport default async function wrapMessageActionTextNew(\n options: T\n): Promise {\n try {\n return await wrapMessageActionTextNewUnsafe(options) as any;\n } catch(err) {\n console.error('wrapMessageActionTextNewUnsafe error:', err);\n return options.plain ? '' : document.createElement('span') as any;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport partition from '../../helpers/array/partition';\nimport assumeType from '../../helpers/assumeType';\nimport {formatDate} from '../../helpers/date';\nimport htmlToDocumentFragment from '../../helpers/dom/htmlToDocumentFragment';\nimport {getRestrictionReason} from '../../helpers/restrictions';\nimport escapeRegExp from '../../helpers/string/escapeRegExp';\nimport limitSymbols from '../../helpers/string/limitSymbols';\nimport {Message, DocumentAttribute, DraftMessage} from '../../layer';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport {MyDraftMessage} from '../../lib/appManagers/appDraftsManager';\nimport {MyMessage} from '../../lib/appManagers/appMessagesManager';\nimport isMessageRestricted from '../../lib/appManagers/utils/messages/isMessageRestricted';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport I18n, {LangPackKey, i18n, UNSUPPORTED_LANG_PACK_KEY, FormatterArguments} from '../../lib/langPack';\nimport {SERVICE_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport parseEntities from '../../lib/richTextProcessor/parseEntities';\nimport sortEntities from '../../lib/richTextProcessor/sortEntities';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport wrapPlainText from '../../lib/richTextProcessor/wrapPlainText';\nimport wrapRichText, {WrapRichTextOptions} from '../../lib/richTextProcessor/wrapRichText';\nimport wrapTextWithEntities from '../../lib/richTextProcessor/wrapTextWithEntities';\nimport rootScope from '../../lib/rootScope';\nimport {Modify} from '../../types';\nimport Icon from '../icon';\nimport TranslatableMessage from '../translatableMessage';\nimport wrapMessageActionTextNew, {WrapMessageActionTextOptions} from './messageActionTextNew';\nimport {wrapMessageGiveawayResults} from './messageActionTextNewUnsafe';\nimport wrapPeerTitle from './peerTitle';\n\nexport type WrapMessageForReplyOptions = Modify & {\n text?: string,\n usingMids?: number[],\n highlightWord?: string,\n withoutMediaType?: boolean,\n canTranslate?: boolean\n};\n\nexport default async function wrapMessageForReply(\n options: T\n): Promise {\n options.text ??= (options.message as Message.message).message;\n if(!options.plain && options.highlightWord) {\n options.highlightWord = options.highlightWord.trim();\n }\n\n const {message, usingMids, plain, highlightWord, withoutMediaType} = options;\n\n const parts: (Node | string)[] = [];\n\n let hasGroupedKey = false;\n const addPart = (langKey: LangPackKey, part?: string | HTMLElement | DocumentFragment, args?: FormatterArguments) => {\n if(langKey) {\n if(part === undefined && hasGroupedKey) {\n return;\n }\n\n part = plain ? I18n.format(langKey, true, args) : i18n(langKey, args);\n }\n\n if(plain) {\n parts.push(part);\n } else {\n const el = document.createElement('span');\n if(typeof(part) === 'string') el.innerHTML = part;\n else el.append(part);\n parts.push(el);\n }\n };\n\n const managers = rootScope.managers;\n const appMessagesManager = managers.appMessagesManager;\n\n const isRestricted = isMessageRestricted(message as any);\n\n const someRichTextOptions: WrapRichTextOptions = {\n ...options,\n noLinebreaks: true,\n noLinks: true,\n noTextFormat: true\n };\n\n let entities = (message as Message.message).totalEntities ?? (message as DraftMessage.draftMessage).entities;\n if((message as Message.message).media && !isRestricted) {\n assumeType(message);\n let usingFullGrouepd = true;\n if(message.grouped_id) {\n if(usingMids) {\n const mids = await appMessagesManager.getMidsByMessage(message);\n if(usingMids.length === mids.length) {\n for(const mid of mids) {\n if(!usingMids.includes(mid)) {\n usingFullGrouepd = false;\n break;\n }\n }\n } else {\n usingFullGrouepd = false;\n }\n }\n\n if(usingFullGrouepd) {\n const groupedText = await appMessagesManager.getGroupedText(message.grouped_id);\n options.text = groupedText?.message || '';\n entities = groupedText?.totalEntities || [];\n\n if(!withoutMediaType) {\n addPart('AttachAlbum');\n hasGroupedKey = true;\n }\n }\n } else {\n usingFullGrouepd = false;\n }\n\n let i = 1;\n if((!usingFullGrouepd && !withoutMediaType) || !options.text) {\n const media = message.media;\n switch(media?._) {\n case 'messageMediaPhoto':\n addPart('AttachPhoto');\n break;\n case 'messageMediaDice':\n addPart(undefined, plain ? media.emoticon : wrapEmojiText(media.emoticon));\n break;\n case 'messageMediaVenue': {\n options.text = media.title;\n addPart('AttachLocation');\n break;\n }\n case 'messageMediaGeo':\n addPart('AttachLocation');\n break;\n case 'messageMediaGeoLive':\n addPart('AttachLiveLocation');\n break;\n case 'messageMediaPoll':\n const pre = '📊' + ' ';\n if(plain) {\n const f = pre + media.poll.question.text;\n addPart(undefined, f);\n } else {\n const textWithEntities = wrapTextWithEntities(media.poll.question);\n const fragment = wrapRichText(textWithEntities.text, {...someRichTextOptions, entities: textWithEntities.entities});\n fragment.prepend(wrapEmojiText(pre));\n addPart(undefined, fragment);\n }\n break;\n case 'messageMediaContact':\n addPart('AttachContact');\n break;\n case 'messageMediaGame': {\n const f = '🎮' + ' ' + media.game.title;\n addPart(undefined, plain ? f : wrapEmojiText(f));\n break;\n }\n case 'messageMediaDocument': {\n const document = media.document as MyDocument;\n\n if(document.type === 'video') {\n addPart('AttachVideo');\n } else if(document.type === 'voice') {\n addPart('AttachAudio');\n } else if(document.type === 'gif') {\n addPart('AttachGif');\n } else if(document.type === 'round') {\n addPart('AttachRound');\n } else if(document.type === 'sticker') {\n const i = parts.length;\n if(document.stickerEmojiRaw) {\n const f = document.stickerEmojiRaw + ' ';\n addPart(undefined, plain ? f : wrapEmojiText(f));\n }\n\n addPart('AttachSticker');\n\n // will combine two parts into one\n const p = parts.splice(i, 2);\n if(plain) parts.push((p[0] as string) + (p[1] ? p[1] as string : ''));\n else {\n const span = window.document.createElement('span');\n span.append(...p);\n parts.push(span);\n }\n\n options.text = '';\n } else if(document.type === 'audio') {\n const attribute = document.attributes.find((attribute) => attribute._ === 'documentAttributeAudio' && (attribute.title || attribute.performer)) as DocumentAttribute.documentAttributeAudio;\n const f = '🎵' + ' ' + (attribute ? [attribute.title, attribute.performer].filter(Boolean).join(' - ') : document.file_name);\n addPart(undefined, plain ? f : wrapEmojiText(f));\n } else {\n addPart(undefined, plain ? document.file_name : wrapEmojiText(document.file_name));\n }\n\n break;\n }\n\n case 'messageMediaInvoice': {\n if(media.extended_media?._ === 'messageExtendedMediaPreview') {\n addPart(undefined, plain ? media.description : wrapEmojiText(media.description));\n } else {\n addPart(undefined, plain ? media.title : wrapEmojiText(media.title));\n }\n\n break;\n }\n\n case 'messageMediaUnsupported': {\n addPart(UNSUPPORTED_LANG_PACK_KEY);\n break;\n }\n\n case 'messageMediaStory': {\n if(media.pFlags.via_mention) {\n const storyPeerId = getPeerId(media.peer);\n const isMyStory = storyPeerId === rootScope.myId;\n addPart(\n isMyStory ? 'StoryMentionYou' : 'StoryMention',\n undefined,\n [await wrapPeerTitle({peerId: isMyStory ? message.peerId : storyPeerId, plainText: plain})]\n )\n } else {\n addPart('Story');\n }\n\n break;\n }\n\n // @ts-ignore\n case 'inputMediaWebPage':\n case 'messageMediaPhotoExternal':\n case 'messageMediaDocumentExternal':\n case 'messageMediaWebPage': {\n break;\n }\n\n case 'messageMediaGiveaway': {\n const date = formatDate(new Date(media.until_date * 1000));\n addPart('Giveaway.ToBeSelectedFull', undefined, [i18n('Giveaway.ToBeSelected', [media.quantity, plain ? date.textContent : date])]);\n break;\n }\n\n case 'messageMediaGiveawayResults': {\n const {langPackKey, args} = wrapMessageGiveawayResults(media, plain);\n addPart(langPackKey, undefined, args);\n break;\n }\n\n case 'messageMediaPaidMedia': {\n const extendedMedia = media.extended_media;\n const [photos, videos] = partition(extendedMedia, (media) => {\n if(media._ === 'messageExtendedMediaPreview') {\n return media.video_duration === undefined;\n }\n\n return media.media._ === 'messageMediaPhoto';\n });\n\n if(!plain) {\n i += 2;\n addPart(undefined, Icon('star', 'xtr-icon'));\n addPart(undefined, ' ');\n }\n\n const length = photos.length + videos.length;\n if(length < 2) {\n addPart(photos.length ? 'AttachPhoto' : 'AttachVideo');\n break;\n }\n\n addPart(\n photos.length && videos.length ? 'Media' : photos.length ? 'Photos' : 'Videos', undefined,\n [length]\n );\n break;\n }\n\n default:\n addPart(UNSUPPORTED_LANG_PACK_KEY);\n options.text = '';\n // messageText += media._;\n // /////appMessagesManager.log.warn('Got unknown media type!', message);\n break;\n }\n }\n\n const length = parts.length;\n for(; i < length; i += 2) {\n parts.splice(i, 0, ', ');\n }\n\n if(options.text && length) {\n parts.push(', ');\n }\n }\n\n if((message as Message.messageService).action) {\n const actionWrapped = await wrapMessageActionTextNew({\n ...(options as Modify),\n noLinks: true,\n noTextFormat: true\n });\n\n if(actionWrapped) {\n addPart(undefined, actionWrapped);\n }\n }\n\n if(isRestricted) {\n options.text = getRestrictionReason((message as Message.message).restriction_reason).text;\n entities = [];\n }\n\n if(options.text) {\n options.text = limitSymbols(options.text, 100);\n\n entities ??= parseEntities(options.text);\n\n if(plain) {\n parts.push(wrapPlainText(options.text, entities));\n } else {\n // let entities = parseEntities(text.replace(/\\n/g, ' '));\n\n if(highlightWord) {\n let found = false;\n let match: any;\n const regExp = new RegExp(escapeRegExp(highlightWord), 'gi');\n entities = entities.slice(); // fix leaving highlight entity\n while((match = regExp.exec(options.text)) !== null) {\n entities.push({_: 'messageEntityHighlight', length: highlightWord.length, offset: match.index});\n found = true;\n }\n\n if(found) {\n sortEntities(entities);\n }\n }\n\n if((message as Message.message).peerId === SERVICE_PEER_ID &&\n (message as Message.message).fromId === (message as Message.message).peerId) {\n const match = options.text.match(/[\\d\\-]{5,7}/);\n if(match) {\n entities = entities.slice();\n entities.push({\n _: 'messageEntitySpoiler',\n offset: match.index,\n length: match[0].length\n });\n\n sortEntities(entities);\n }\n }\n\n let what: DocumentFragment | HTMLElement;\n if(options.canTranslate) {\n what = TranslatableMessage({\n peerId: (message as Message.message).peerId,\n message: message as Message.message,\n richTextOptions: someRichTextOptions,\n middleware: options.middleware,\n onTextWithEntities: (textWithEntities) => {\n return {\n ...textWithEntities,\n text: limitSymbols(textWithEntities.text, 100)\n };\n }\n });\n } else {\n what = wrapRichText(options.text, {\n ...someRichTextOptions,\n entities\n });\n\n what = htmlToDocumentFragment(what);\n }\n\n parts.push(what);\n }\n }\n\n if(plain) {\n return parts.join('') as any;\n } else {\n const fragment = document.createDocumentFragment();\n fragment.append(...parts);\n return fragment as any;\n }\n}\n","import {MessageAction, PaymentsCheckedGiftCode} from '../layer';\n\nexport default function shouldDisplayGiftCodeAsGift(action: MessageAction.messageActionGiftCode | PaymentsCheckedGiftCode) {\n if(action._ === 'payments.checkedGiftCode') {\n return !action.from_id;\n }\n\n return (action.amount || action.crypto_amount) !== undefined;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport {formatTime, ONE_DAY} from '../../helpers/date';\nimport htmlToSpan from '../../helpers/dom/htmlToSpan';\nimport setInnerHTML, {setDirection} from '../../helpers/dom/setInnerHTML';\nimport {wrapCallDuration} from './wrapDuration';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport {ForumTopic, Message, MessageAction, MessageMedia, MessageReplyHeader} from '../../layer';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport I18n, {FormatterArgument, FormatterArguments, i18n, join, langPack, LangPackKey, _i18n} from '../../lib/langPack';\nimport {GENERAL_TOPIC_ID} from '../../lib/mtproto/mtproto_config';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport wrapPlainText from '../../lib/richTextProcessor/wrapPlainText';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport rootScope from '../../lib/rootScope';\nimport topicAvatar from '../topicAvatar';\nimport {wrapCustomEmojiAwaited} from './customEmoji';\nimport getPeerTitle from './getPeerTitle';\nimport wrapJoinVoiceChatAnchor from './joinVoiceChatAnchor';\nimport {WrapMessageActionTextOptions} from './messageActionTextNew';\nimport wrapMessageForReply, {WrapMessageForReplyOptions} from './messageForReply';\nimport wrapPeerTitle from './peerTitle';\nimport shouldDisplayGiftCodeAsGift from '../../helpers/shouldDisplayGiftCodeAsGift';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\n\nasync function wrapLinkToMessage(options: WrapMessageForReplyOptions) {\n const wrapped = await wrapMessageForReply(options);\n\n if(options.plain) {\n return wrapped;\n }\n\n const a = document.createElement('i');\n a.dataset.savedFrom = (options.message as Message.message).peerId + '_' + (options.message as Message.message).mid;\n a.append(wrapped);\n setDirection(a);\n return a;\n}\n\nfunction wrapSomeText(text: string, plain?: boolean) {\n return plain ? text : htmlToSpan(wrapEmojiText(text));\n}\n\ntype WrapTopicIconOptions = {\n topic: Pick,\n plain?: boolean\n} & WrapSomethingOptions;\nexport async function wrapTopicIcon(options: T): Promise {\n const topic = options.topic;\n\n let iconEmojiId = topic?.icon_emoji_id;\n if(topic?.id === GENERAL_TOPIC_ID) {\n iconEmojiId = '5390854796011906616';\n }\n\n if(!iconEmojiId) {\n if(options.plain) return '' as any;\n\n // if(topic?.id === GENERAL_TOPIC_ID) {\n // const span = document.createElement('span');\n // span.innerHTML = `\n // \n // \n // \n // `;\n\n // span.classList.add('topic-icon');\n\n // return span as any;\n // }\n\n return topicAvatar(topic?.icon_color, topic?.title) as any;\n }\n\n return options.plain ?\n rootScope.managers.appEmojiManager.getCustomEmojiDocument(iconEmojiId).then((doc) => doc.stickerEmojiRaw) :\n wrapCustomEmojiAwaited({\n ...options,\n docIds: [iconEmojiId]\n }).then((fragment) => {\n fragment.lastElementChild.classList.add('topic-icon');\n return fragment;\n }) as any;\n}\n\nfunction wrapMessageActionTopicIcon(options: WrapMessageActionTextOptions) {\n const action = ((options.message as Message.messageService).action as MessageAction.messageActionTopicCreate);\n return wrapTopicIcon({\n ...options,\n topic: action as any as ForumTopic.forumTopic\n });\n}\n\nasync function wrapMessageActionTopicIconAndName(options: WrapMessageActionTextOptions) {\n const action = ((options.message as Message.messageService).action as MessageAction.messageActionTopicCreate);\n const span = document.createElement('span');\n span.classList.add('topic-name');\n span.append(await wrapMessageActionTopicIcon(options), wrapSomeText(action.title, options.plain));\n return span;\n}\n\nexport function wrapMessageGiveawayResults(action: MessageAction.messageActionGiveawayResults | MessageMedia.messageMediaGiveawayResults, plain?: boolean) {\n let langPackKey: LangPackKey = 'Giveaway.Results';\n let args: FormatterArguments = [action.winners_count];\n\n const setCombined = (addLangPackKey: LangPackKey, addArgs?: FormatterArguments) => {\n args = [\n plain ?\n I18n.format(langPackKey, true, args as FormatterArguments) :\n i18n(langPackKey, args as FormatterArguments)\n ];\n\n langPackKey = 'Giveaway.Results.Combined';\n args.push(\n plain ?\n I18n.format(addLangPackKey, true, addArgs) :\n i18n(addLangPackKey, addArgs)\n );\n };\n\n if(!action.winners_count) {\n langPackKey = (action as MessageAction.messageActionGiveawayResults).pFlags.stars ? 'Giveaway.Results.NoWinners.Stars' : 'Giveaway.Results.NoWinners';\n args = [action.unclaimed_count];\n } else if(action.unclaimed_count) {\n setCombined('Giveaway.Results.Unclaimed', [action.unclaimed_count]);\n }\n\n return {langPackKey, args};\n}\n\nexport default async function wrapMessageActionTextNewUnsafe(options: WrapMessageActionTextOptions) {\n const {plain, message, noLinks} = options;\n const element: HTMLElement = plain ? undefined : document.createElement('span');\n const action = 'action' in message && message.action;\n\n // this.log('message action:', action);\n\n if((action as MessageAction.messageActionCustomAction).message) {\n const unsafeMessage = (action as MessageAction.messageActionCustomAction).message;\n if(plain) {\n return wrapPlainText(unsafeMessage);\n } else {\n setInnerHTML(element, wrapRichText(unsafeMessage, {noLinebreaks: true}));\n return element;\n }\n } else {\n let _ = action._;\n // let suffix = '';\n let langPackKey: LangPackKey;\n let args: Array>;\n\n const managers = rootScope.managers;\n\n const getNameDivHTML = (peerId: PeerId, plain: boolean) => {\n return plain ? getPeerTitle({peerId, plainText: plain}) : wrapPeerTitle({peerId});\n };\n\n const getSeveralNameDivHTML = async(peerIds: PeerId[], plain: boolean) => {\n if(peerIds.length === 1) {\n return getNameDivHTML(peerIds[0], plain);\n }\n\n const joined = join(\n await Promise.all(peerIds.map((peerId) => getNameDivHTML(peerId, plain))),\n false,\n plain\n );\n\n if(plain) {\n return Array.isArray(joined) ? joined.join('') : joined;\n } else {\n const fragment = document.createElement('span');\n fragment.append(...joined);\n args.push(fragment);\n return fragment;\n }\n };\n\n switch(action._) {\n case 'messageActionPhoneCall': {\n _ += '.' + (action as any).type;\n\n args = [wrapCallDuration(action.duration, plain)];\n break;\n }\n\n case 'messageActionGroupCall': {\n _ += '.' + (action as any).type;\n\n args = [];\n if(!_.endsWith('You') && !message.pFlags.post) {\n args.push(getNameDivHTML(message.fromId, plain));\n }\n\n if(action.duration !== undefined) {\n args.push(wrapCallDuration(action.duration, plain));\n } else if(noLinks) {\n args.push('');\n } else {\n args.push(wrapJoinVoiceChatAnchor(message as any));\n }\n\n break;\n }\n\n case 'messageActionInviteToGroupCall': {\n const peerIds = [message.fromId, action.users[0].toPeerId()];\n let a = 'Chat.Service.VoiceChatInvitation';\n const myId = rootScope.myId;\n if(peerIds[0] === myId) a += 'ByYou';\n else if(peerIds[1] === myId) a += 'ForYou';\n indexOfAndSplice(peerIds, myId);\n\n langPackKey = a as LangPackKey;\n args = peerIds.map((peerId) => getNameDivHTML(peerId, plain));\n args.push(noLinks ? '' : wrapJoinVoiceChatAnchor(message as any));\n break;\n }\n\n case 'messageActionGroupCallScheduled': {\n const today = new Date();\n const date = new Date(action.schedule_date * 1000);\n const daysToStart = (date.getTime() - today.getTime()) / 86400e3;\n const tomorrowDate = new Date(today);\n tomorrowDate.setDate(tomorrowDate.getDate() + 1);\n\n const isBroadcast = await managers.appPeersManager.isBroadcast(message.peerId);\n langPackKey = isBroadcast ? 'ChatList.Service.VoiceChatScheduled.Channel' : 'ChatList.Service.VoiceChatScheduled';\n args = [];\n const myId = rootScope.myId;\n if(message.fromId === myId) {\n langPackKey += 'You';\n } else if(!isBroadcast) {\n args.push(getNameDivHTML(message.fromId, plain));\n }\n\n let k: LangPackKey;\n const _args: FormatterArguments = [];\n if(daysToStart < 1 && date.getDate() === today.getDate()) {\n k = 'TodayAtFormattedWithToday';\n } else if(daysToStart < 2 && date.getDate() === tomorrowDate.getDate()) {\n k = 'Time.TomorrowAt';\n } else {\n k = 'formatDateAtTime';\n _args.push(new I18n.IntlDateElement({\n date,\n options: {\n day: '2-digit',\n month: '2-digit',\n year: '2-digit'\n }\n }).element);\n }\n\n _args.push(formatTime(date));\n const t = i18n(k, _args);\n args.push(t);\n\n break;\n }\n\n case 'messageActionChatCreate': {\n const myId = rootScope.myId;\n if(message.fromId === myId) {\n _ += 'You';\n } else {\n args = [getNameDivHTML(message.fromId, plain)];\n }\n\n break;\n }\n\n case 'messageActionPinMessage': {\n const peerId = message.peerId;\n const pinnedMessage = await managers.appMessagesManager.getMessageByPeer(peerId, message.reply_to_mid);\n\n args = [\n getNameDivHTML(message.fromId, plain)\n ];\n\n if(!pinnedMessage/* || true */) {\n langPackKey = 'ActionPinnedNoText';\n\n if(message.reply_to_mid) { // refresh original message\n managers.appMessagesManager.fetchMessageReplyTo(message);\n }\n } else {\n args.push(wrapLinkToMessage({\n ...options,\n message: pinnedMessage\n }));\n }\n\n break;\n }\n\n case 'messageActionChatJoinedByRequest': {\n const isBroadcast = await managers.appPeersManager.isBroadcast(message.peerId);\n if(message.pFlags.out) {\n langPackKey = isBroadcast ? 'RequestToJoinChannelApproved' : 'RequestToJoinGroupApproved';\n } else {\n langPackKey = isBroadcast ? 'ChatService.UserJoinedChannelByRequest' : 'ChatService.UserJoinedGroupByRequest';\n args = [getNameDivHTML(message.fromId, plain)];\n }\n break;\n }\n\n case 'messageActionGiveawayLaunch': {\n langPackKey = action.stars ? 'BoostingStarsGiveawayJustStarted' : 'BoostingGiveawayJustStarted';\n args = [getNameDivHTML(message.fromId, plain)];\n\n if(action.stars) {\n args.unshift(+action.stars);\n }\n break;\n }\n\n case 'messageActionContactSignUp':\n case 'messageActionChatReturn':\n case 'messageActionChatLeave':\n case 'messageActionChatJoined':\n case 'messageActionChatEditPhoto':\n case 'messageActionChatDeletePhoto':\n case 'messageActionChatEditVideo':\n case 'messageActionChatJoinedByLink':\n case 'messageActionChannelEditVideo':\n case 'messageActionChannelDeletePhoto': {\n args = [getNameDivHTML(message.fromId, plain)];\n break;\n }\n\n case 'messageActionChannelEditTitle':\n case 'messageActionChatEditTitle': {\n args = [];\n if(action._ === 'messageActionChatEditTitle') {\n args.push(getNameDivHTML(message.fromId, plain));\n }\n\n args.push(wrapSomeText(action.title, plain));\n break;\n }\n\n case 'messageActionChatDeleteUser':\n case 'messageActionChatAddUsers':\n case 'messageActionChatAddUser': {\n const users = (action as MessageAction.messageActionChatAddUser).users ||\n [(action as MessageAction.messageActionChatDeleteUser).user_id];\n\n args = [getNameDivHTML(message.fromId, plain)];\n\n const peerIds = users.map((userId) => userId.toPeerId(false));\n args.push(getSeveralNameDivHTML(peerIds, plain));\n break;\n }\n\n case 'messageActionBotAllowed': {\n if(action.pFlags?.attach_menu) {\n langPackKey = 'ActionAttachMenuBotAllowed';\n break;\n } else if(action.pFlags?.from_request) {\n langPackKey = 'ActionBotAllowedRequest';\n break;\n } else if(!action.domain) {\n break;\n }\n\n const anchorHTML = wrapRichText(action.domain, {\n entities: [{\n _: 'messageEntityUrl',\n length: action.domain.length,\n offset: 0\n }],\n noLinks\n });\n\n const node = htmlToSpan(anchorHTML);\n\n args = [node];\n break;\n }\n\n case 'messageActionPaymentSent': {\n const isRecurringInit = action.pFlags.recurring_init;\n const isRecurringUsed = action.pFlags.recurring_used;\n langPackKey = isRecurringUsed ? 'Chat.Service.PaymentSentRecurringUsedNoTitle' : (isRecurringInit ? 'Chat.Service.PaymentSentRecurringInitNoTitle' : 'Chat.Service.PaymentSent1NoTitle');\n const price = paymentsWrapCurrencyAmount(action.total_amount, action.currency, undefined, undefined, plain);\n args = [price, getNameDivHTML(message.peerId, plain)];\n\n if(message.reply_to_mid) {\n const replyTo = message.reply_to as MessageReplyHeader.messageReplyHeader;\n const invoiceMessage = await managers.appMessagesManager.getMessageByPeer(\n replyTo?.reply_to_peer_id ? getPeerId(replyTo.reply_to_peer_id) : message.peerId,\n message.reply_to_mid\n );\n\n if(!invoiceMessage) {\n managers.appMessagesManager.fetchMessageReplyTo(message);\n } else {\n langPackKey = isRecurringUsed ? 'Chat.Service.PaymentSentRecurringUsed' : (isRecurringInit ? 'Chat.Service.PaymentSentRecurringInit' : 'Chat.Service.PaymentSent1');\n args.push(wrapLinkToMessage({\n ...options,\n message: invoiceMessage\n }).then((el) => {\n if(el instanceof HTMLElement) {\n el.classList.add('is-receipt-link');\n }\n\n return el;\n }));\n }\n }\n\n break;\n }\n\n case 'messageActionPaymentRefunded': {\n const price = paymentsWrapCurrencyAmount(action.total_amount, action.currency, undefined, undefined, plain);\n args = [getNameDivHTML(message.fromId, plain), price];\n langPackKey = 'Chat.Service.Refund';\n break;\n }\n\n case 'messageActionSetMessagesTTL': {\n args = [];\n\n const isBroadcast = await managers.appPeersManager.isBroadcast(message.peerId);\n if(action.period) {\n if(isBroadcast) {\n langPackKey = 'ActionTTLChannelChanged';\n } else if(message.fromId === rootScope.myId) {\n langPackKey = 'ActionTTLYouChanged';\n } else {\n langPackKey = 'ActionTTLChanged';\n args.push(getNameDivHTML(message.fromId, plain));\n }\n\n let duration: ReturnType;\n if(action.period > 1814400) {\n let key: LangPackKey;\n const args: FormatterArguments = [];\n const year = 31536000;\n if(action.period >= year) {\n key = 'Years';\n args.push(action.period / year | 0);\n } else {\n key = 'Months';\n args.push(action.period / (ONE_DAY * 30) | 0);\n }\n\n duration = plain ? I18n.format(key, true, args) : i18n(key, args);\n } else {\n duration = wrapCallDuration(action.period, plain);\n }\n\n args.push(duration);\n } else {\n if(isBroadcast) {\n langPackKey = 'ActionTTLChannelDisabled';\n } else if(message.fromId === rootScope.myId) {\n langPackKey = 'ActionTTLYouDisabled';\n } else {\n langPackKey = 'ActionTTLDisabled';\n args.push(getNameDivHTML(message.fromId, plain));\n }\n }\n break;\n }\n\n case 'messageActionTopicEdit': {\n let iconElement: (typeof args)[0];\n let titleElement: typeof iconElement;\n let authorElement: ReturnType;\n const isMe = !!message.pFlags.out;\n const isIconChanged = action.icon_emoji_id !== undefined;\n const isIconRemoved = isIconChanged && !+action.icon_emoji_id;\n const isTitleChanged = action.title !== undefined;\n const isHiddenChanged = action.hidden !== undefined;\n\n if(!isMe) {\n authorElement = getNameDivHTML(message.fromId, plain);\n }\n\n if(isTitleChanged) {\n titleElement = wrapSomeText(action.title, plain);\n }\n\n if(isIconChanged && !isIconRemoved) {\n iconElement = wrapMessageActionTopicIcon(options);\n }\n\n args = authorElement ? [authorElement] : [];\n\n if(action.closed) {\n langPackKey = isMe ? 'Chat.Service.Group.TopicEdited.You.Paused' : 'Chat.Service.Group.TopicEdited.Paused';\n } else if(action.closed === false) {\n langPackKey = isMe ? 'Chat.Service.Group.TopicEdited.You.Resumed' : 'Chat.Service.Group.TopicEdited.Resumed';\n } else if(isIconRemoved && isTitleChanged) {\n langPackKey = isMe ? 'Chat.Service.TopicEdited.You.Mixed.IconRemoved' : 'Chat.Service.TopicEdited.Mixed.IconRemoved';\n args.push(titleElement);\n } else if(isIconChanged && isTitleChanged) {\n langPackKey = isMe ? 'Chat.Service.TopicEdited.You.Mixed' : 'Chat.Service.TopicEdited.Mixed';\n args.push(wrapMessageActionTopicIconAndName(options));\n } else if(isIconRemoved) {\n langPackKey = isMe ? 'Chat.Service.Group.TopicEdited.You.Icon.Removed' : 'Chat.Service.Group.TopicEdited.Icon.Removed';\n } else if(isTitleChanged) {\n langPackKey = isMe ? 'Chat.Service.Group.TopicEdited.You.Title' : 'Chat.Service.Group.TopicEdited.Title';\n args.push(titleElement);\n } else if(isIconChanged) {\n langPackKey = isMe ? 'Chat.Service.Group.TopicEdited.You.Icon' : 'Chat.Service.Group.TopicEdited.Icon';\n args.push(iconElement);\n } else if(isHiddenChanged) {\n langPackKey = isMe ?\n (action.hidden ? 'Chat.Service.Group.TopicEdited.You.Hided' : 'Chat.Service.Group.TopicEdited.You.Unhided') :\n (action.hidden ? 'Chat.Service.Group.TopicEdited.Hided' : 'Chat.Service.Group.TopicEdited.Unhided');\n }\n\n break;\n }\n\n case 'messageActionTopicCreate': {\n args = [wrapMessageActionTopicIconAndName(options)];\n langPackKey = 'TopicWasCreatedAction';\n break;\n }\n\n case 'messageActionSetChatTheme': {\n const isMe = !!message.pFlags.out;\n let authorElement: ReturnType;\n if(!isMe) {\n authorElement = getNameDivHTML(message.fromId, plain);\n }\n\n args = authorElement ? [authorElement] : [];\n\n if(action.emoticon) {\n args.push(wrapSomeText(action.emoticon, plain));\n langPackKey = isMe ? 'ChatThemeChangedYou' : 'ChatThemeChangedTo';\n } else {\n langPackKey = isMe ? 'ChatThemeDisabledYou' : 'ChatThemeDisabled';\n }\n break;\n }\n\n case 'messageActionPrizeStars': {\n langPackKey = 'BoostingReceivedGiftNoName';\n break;\n }\n\n case 'messageActionGiftStars':\n case 'messageActionGiftCode':\n case 'messageActionGiftPremium': {\n const isGiftCode = action._ === 'messageActionGiftCode';\n if(isGiftCode && !shouldDisplayGiftCodeAsGift(action)) {\n langPackKey = 'BoostingReceivedGiftNoName';\n if(action.boost_peer) {\n langPackKey = 'BoostingReceivedGiftFrom';\n args = [getNameDivHTML(getPeerId(action.boost_peer), plain)];\n }\n\n break;\n }\n\n const isMe = !!message.pFlags.out && !isGiftCode;\n let authorElement: ReturnType;\n if(!isMe) {\n authorElement = getNameDivHTML(message.fromId, plain);\n }\n\n args = authorElement ? [authorElement] : [];\n\n args.push(paymentsWrapCurrencyAmount(action.amount, action.currency, false, true, plain));\n\n langPackKey = isMe ? 'ActionGiftOutbound' : 'ActionGiftInbound';\n\n break;\n }\n\n case 'messageActionWebViewDataSent': {\n langPackKey = 'ActionBotWebViewData';\n args = [wrapSomeText(action.text, plain)];\n break;\n }\n\n case 'messageActionRequestedPeer': {\n langPackKey = 'Chat.Service.PeerRequested';\n args = [\n getSeveralNameDivHTML(action.peers.map((peer) => getPeerId(peer)), plain),\n getNameDivHTML(message.peerId, plain)\n ];\n break;\n }\n\n case 'messageActionGiveawayResults': {\n const r = wrapMessageGiveawayResults(action, plain);\n langPackKey = r.langPackKey;\n args = r.args;\n break;\n }\n\n case 'messageActionSetChatWallPaper': {\n const isUser = message.peerId.isUser();\n args = [\n getNameDivHTML(isUser ? message.peerId : message.fromId, plain)\n ];\n\n if(isUser) {\n if(message.pFlags.out) {\n langPackKey = action.pFlags.for_both ?\n 'ActionSetWallpaperForThisChatSelfBoth' : (\n action.pFlags.same ?\n 'ActionSetSameWallpaperForThisChatSelf' :\n 'ActionSetWallpaperForThisChatSelf'\n );\n } else {\n langPackKey = action.pFlags.for_both ?\n 'ActionSetWallpaperForThisChatBoth' : (\n action.pFlags.same ?\n 'ActionSetSameWallpaperForThisChat' :\n 'ActionSetWallpaperForThisChat'\n );\n }\n\n break;\n }\n\n const isBroadcast = await managers.appPeersManager.isBroadcast(message.peerId);\n if(isBroadcast) {\n langPackKey = 'ActionSetWallpaperForThisChannel';\n break;\n }\n\n langPackKey = message.fromId === message.peerId ?\n 'ActionSetWallpaperForThisGroup' :\n 'ActionSetWallpaperForThisGroupByUser';\n\n break;\n }\n\n default:\n langPackKey = (langPack[_] || `[${action._}]`) as any;\n break;\n }\n\n if(!langPackKey) {\n langPackKey = langPack[_];\n if(langPackKey === undefined) {\n langPackKey = '[' + _ + ']' as any;\n }\n }\n\n const waited = args && await Promise.all(args);\n\n if(plain) {\n return I18n.format(langPackKey, true, waited);\n } else {\n // if(waited && noLinks) {\n // waited = waited.map((arg) => arg instanceof HTMLAnchorElement ? arg.textContent : arg);\n // }\n\n return _i18n(element, langPackKey, waited);\n }\n\n // str = !langPackKey || langPackKey[0].toUpperCase() === langPackKey[0] ? langPackKey : getNameDivHTML(message.fromId) + langPackKey + (suffix ? ' ' : '');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport rootScope from '../lib/rootScope';\nimport {i18n} from '../lib/langPack';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport {HIDDEN_PEER_ID, NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport limitSymbols from '../helpers/string/limitSymbols';\nimport setInnerHTML, {setDirection} from '../helpers/dom/setInnerHTML';\nimport safeAssign from '../helpers/object/safeAssign';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport getPeerTitle from './wrappers/getPeerTitle';\nimport generateTitleIcons from './generateTitleIcons';\nimport {wrapTopicIcon} from './wrappers/messageActionTextNewUnsafe';\nimport lottieLoader from '../lib/rlottie/lottieLoader';\n\nexport type PeerTitleOptions = {\n peerId?: PeerId,\n fromName?: string,\n plainText?: boolean,\n onlyFirstName?: boolean,\n dialog?: boolean,\n limitSymbols?: number,\n withIcons?: boolean,\n withPremiumIcon?: boolean,\n threadId?: number,\n meAsNotes?: boolean,\n wrapOptions?: WrapSomethingOptions\n};\n\nconst weakMap: WeakMap = new WeakMap();\n\nrootScope.addEventListener('peer_title_edit', ({peerId, threadId}) => {\n let query = `.peer-title[data-peer-id=\"${peerId}\"]`;\n if(threadId) {\n query += `[data-thread-id=\"${threadId}\"]`;\n }\n\n const elements = Array.from(document.querySelectorAll(query)) as HTMLElement[];\n elements.forEach((element) => {\n const peerTitle = weakMap.get(element);\n peerTitle?.update();\n });\n});\n\nexport default class PeerTitle {\n public element: HTMLElement;\n public options: PeerTitleOptions;\n private hasInner: boolean;\n\n constructor(options?: PeerTitleOptions) {\n this.element = document.createElement('span');\n this.element.classList.add('peer-title');\n setDirection(this.element);\n\n this.options = {};\n\n if(options) {\n this.update(options);\n }\n\n weakMap.set(this.element, this);\n }\n\n public setOptions(options?: PeerTitleOptions) {\n if(!options) {\n return;\n }\n\n safeAssign(this.options, options);\n for(const i in options) {\n // @ts-ignore\n const value = options[i];\n\n if(typeof(value) !== 'object' && typeof(value) !== 'function') {\n // @ts-ignore\n this.element.dataset[i] = value ? '' + (typeof(value) === 'boolean' ? +value : value) : '0';\n }\n }\n }\n\n private setHasInner(hasInner: boolean) {\n if(this.hasInner !== hasInner) {\n this.hasInner = hasInner;\n this.element.classList.toggle('with-icons', hasInner);\n }\n }\n\n public async update(options?: PeerTitleOptions) {\n this.setOptions(options);\n\n let fromName = this.options.fromName;\n if(fromName !== undefined) {\n if(this.options.limitSymbols !== undefined) {\n fromName = limitSymbols(fromName, this.options.limitSymbols, this.options.limitSymbols);\n }\n\n setInnerHTML(this.element, wrapEmojiText(fromName));\n return;\n }\n\n this.options.peerId ??= NULL_PEER_ID;\n\n let hasInner: boolean;\n const {peerId, threadId} = this.options;\n if(peerId === rootScope.myId && this.options.dialog) {\n let element: HTMLElement;\n if(this.options.meAsNotes) {\n element = i18n(this.options.onlyFirstName ? 'MyNotesShort' : 'MyNotes');\n } else {\n element = i18n(this.options.onlyFirstName ? 'Saved' : 'SavedMessages');\n }\n\n replaceContent(this.element, element);\n } else if(peerId === HIDDEN_PEER_ID) {\n replaceContent(this.element, i18n(this.options.onlyFirstName ? 'AuthorHiddenShort' : 'AuthorHidden'));\n } else {\n if(threadId) {\n const [topic, isForum] = await Promise.all([\n rootScope.managers.dialogsStorage.getForumTopic(peerId, threadId),\n rootScope.managers.appPeersManager.isForum(peerId)\n ]);\n\n if(!topic && isForum) {\n rootScope.managers.dialogsStorage.getForumTopicById(peerId, threadId).then((forumTopic) => {\n if(!forumTopic && this.options.threadId === threadId) {\n this.options.threadId = undefined;\n this.update({threadId: undefined});\n return;\n }\n\n this.update();\n }, () => {\n if(this.options.threadId === threadId) {\n this.options.threadId = undefined;\n this.update({threadId: undefined});\n }\n });\n\n setInnerHTML(this.element, i18n('Loading'));\n this.setHasInner(false);\n return;\n }\n }\n\n const getTopicIconPromise = threadId && this.options.withIcons ?\n rootScope.managers.dialogsStorage.getForumTopic(peerId, threadId).then((topic) => wrapTopicIcon({...(this.options.wrapOptions ?? {}), topic})) :\n undefined;\n\n const [title, icons, topicIcon] = await Promise.all([\n getPeerTitle(this.options as Required),\n (this.options.withIcons && generateTitleIcons({peerId, wrapOptions: this.options.wrapOptions})) ||\n (this.options.withPremiumIcon && generateTitleIcons({peerId, wrapOptions: this.options.wrapOptions, noVerifiedIcon: true, noFakeIcon: true})),\n getTopicIconPromise\n ]);\n\n if(icons?.length || topicIcon) {\n const inner = document.createElement('span');\n inner.classList.add('peer-title-inner');\n hasInner = true;\n setInnerHTML(inner, title);\n\n const fragment = document.createDocumentFragment();\n fragment.append(...[topicIcon, inner, ...(icons ?? [])].filter(Boolean));\n setInnerHTML(this.element, fragment);\n } else {\n setInnerHTML(this.element, title);\n }\n }\n\n this.setHasInner(hasInner);\n }\n}\n\nexport function changeTitleEmojiColor(element: HTMLElement, color: string) {\n const emojiStatus = element.querySelector('.emoji-status-text-color');\n const player = emojiStatus && lottieLoader.getAnimation(emojiStatus);\n if(player) {\n player.setColor(color, true);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PeerTitle, {PeerTitleOptions} from '../peerTitle';\n\nexport default async function wrapPeerTitle(options: PeerTitleOptions) {\n const peerTitle = new PeerTitle();\n await peerTitle.update(options);\n return peerTitle.element;\n}\n","import {getHexColorFromTelegramColor, hexToRgb, hexaToHsla} from '../../../../helpers/color';\nimport themeController from '../../../../helpers/themeController';\nimport {Chat, HelpPeerColorOption, HelpPeerColorSet, User} from '../../../../layer';\n\nconst DialogColorsFg: Array = [['#CC5049'], ['#D67722'], ['#955CDB'], ['#40A920'], ['#309EBA'], ['#368AD1'], ['#C7508B']],\n DialogColors = ['red', 'orange', 'violet', 'green', 'cyan', 'blue', 'pink'] as const;\n\nconst _DialogColorsFg = DialogColorsFg;\n\nexport function getPeerColorIndexById(peerId: UserId | ChatId) {\n return Math.abs(+peerId) % 7;\n}\n\nexport function getPeerAvatarColorByPeer(peer: Chat | User) {\n let idx = getPeerColorIndexByPeer(peer);\n if(idx === -1) {\n return;\n }\n\n let color = DialogColors[idx];\n if(!color) {\n const fgColor = DialogColorsFg[idx];\n if(!fgColor) {\n return DialogColors[getPeerColorIndexById(peer.id)];\n }\n\n const hsla = hexaToHsla(fgColor[0]);\n const hue = hsla.h;\n\n if(hue >= 345 || hue < 29) idx = 0; // red\n else if(hue < 67) idx = 1; // orange\n else if(hue < 140) idx = 3; // green\n else if(hue < 199) idx = 4; // cyan\n else if(hue < 234) idx = 5; // blue\n else if(hue < 301) idx = 2; // violet\n else idx = 6; // pink\n\n color = DialogColors[idx];\n }\n\n return color;\n}\n\nexport function getPeerColorIndexByPeer(peer: Chat | User) {\n if(!peer) return -1;\n const peerColor = (peer as User.user).color;\n return peerColor?.color ?? getPeerColorIndexById(peer.id);\n}\n\nexport function getPeerColorsByPeer(peer: Chat | User) {\n const colorIndex = getPeerColorIndexByPeer(peer);\n return DialogColorsFg[colorIndex] ?? [];\n}\n\nfunction replaceColors(writeIn: typeof DialogColorsFg, peerColorOptions: HelpPeerColorOption[], dark?: boolean) {\n for(const peerColorOption of peerColorOptions) {\n const colorSet = (dark ? peerColorOption.dark_colors : peerColorOption.colors) as HelpPeerColorSet.helpPeerColorSet;\n const colors = colorSet?.colors;\n if(!colors?.length) {\n continue;\n }\n\n const c = colors.map((color) => getHexColorFromTelegramColor(color));\n writeIn[peerColorOption.color_id] = c;\n }\n\n return writeIn;\n}\n\nexport function makeColorsGradient(colors: string[], partSize?: number) {\n const length = colors.length;\n partSize ||= 5;\n if(length !== 3) {\n colors = colors.slice().reverse();\n }\n\n const str = colors.map((color, idx, arr) => {\n // const startPercents = +(idx * 100 / arr.length).toFixed(2);\n // const endPercents = +((idx + 1) * 100 / arr.length).toFixed(2);\n const startValue = idx * partSize + 'px';\n const endValue = (idx + 1) * partSize + 'px';\n return [\n `${color} ${startValue}`,\n `${color} ${endValue}`\n ].join(', ');\n }).join(', ');\n return `repeating-linear-gradient(-45deg, ${str})`;\n}\n\nexport function setPeerColors(peerColorOptions: HelpPeerColorOption[], user: User.user) {\n let newColors = replaceColors(_DialogColorsFg.slice(), peerColorOptions);\n if(themeController.isNight()) {\n newColors = replaceColors(newColors, peerColorOptions, true);\n }\n DialogColorsFg.splice(0, DialogColorsFg.length, ...newColors);\n\n newColors.forEach((colors, index) => {\n const peerProperty = `--peer-${index}`;\n const borderBackgroundProperty = `${peerProperty}-border-background`;\n const colorRgbProperty = `${peerProperty}-color-rgb`;\n document.documentElement.style.setProperty(colorRgbProperty, hexToRgb(colors[0]).join(','));\n if(colors.length > 1) {\n const gradient = makeColorsGradient(colors);\n document.documentElement.style.setProperty(\n borderBackgroundProperty,\n gradient\n );\n } else {\n document.documentElement.style.removeProperty(borderBackgroundProperty);\n }\n });\n\n // set my peer color\n const myColors = getPeerColorsByPeer(user);\n const properties: [string, string, number][] = [\n ['--peer-border-background', '--primary-color', myColors.length],\n ['--message-out-peer-border-background', '--message-out-primary-color', myColors.length],\n ['--message-out-peer-1-border-background', '--message-out-primary-color', 1],\n ['--message-out-peer-2-border-background', '--message-out-primary-color', 2],\n ['--message-out-peer-3-border-background', '--message-out-primary-color', 3],\n ['--message-empty-peer-1-border-background', '--message-empty-primary-color', 1],\n ['--message-empty-peer-2-border-background', '--message-empty-primary-color', 2],\n ['--message-empty-peer-3-border-background', '--message-empty-primary-color', 3]\n ];\n\n properties.forEach(([peerProperty, colorProperty, length]) => {\n let borderBackground: string;\n if(length > 1) {\n const colors = [\n `rgba(var(${colorProperty}-rgb), .4)`,\n `rgba(var(${colorProperty}-rgb), .2)`,\n `var(${colorProperty})`\n ];\n\n if(length === 2) {\n colors.shift();\n }\n\n borderBackground = makeColorsGradient(colors);\n } else {\n borderBackground = `var(${colorProperty})`;\n }\n\n document.documentElement.style.setProperty(peerProperty, borderBackground);\n });\n}\n","import {isRestricted} from '../../../../helpers/restrictions';\nimport {Chat, User} from '../../../../layer';\n\nexport default function isPeerRestricted(peer: Chat | User) {\n const restrictionReasons = (peer as Chat.channel)?.restriction_reason;\n return !!(restrictionReasons && (peer as Chat.channel).pFlags.restricted && isRestricted(restrictionReasons));\n}\n","import {Chat, ChatPhoto, User, UserProfilePhoto} from '../../../../layer';\nimport isPeerRestricted from './isPeerRestricted';\n\nexport default function getPeerPhoto(peer: User | Chat) {\n if(!peer || isPeerRestricted(peer)) {\n return;\n }\n\n return (peer as User.user | Chat.channel)?.photo as UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Chat, User} from '../../layer';\nimport wrapAbbreviation from '../../lib/richTextProcessor/wrapAbbreviation';\n\nexport default function getPeerInitials(peer: Chat | User) {\n let str = '';\n if(peer) {\n str = (peer as Chat.chat).title ?? [\n (peer as User.user).first_name,\n (peer as User.user).last_name\n ].filter(Boolean).join(' ');\n }\n\n return wrapAbbreviation(str);\n}\n","export default function classNames(...args: string[]) {\n return args.filter(Boolean).join(' ');\n}\n","export default function documentFragmentToNodes(fragment: DocumentFragment) {\n const nodes: (Node | string)[] = new Array(fragment.childNodes.length);\n let node = fragment.firstChild;\n let i = 0;\n while(node) {\n nodes[i++] = node.nodeType === node.TEXT_NODE ? node.nodeValue : node;\n node = node.nextSibling;\n }\n return nodes;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type DashedCircleSection = {\n color: CanvasFillStrokeStyles['strokeStyle'],\n length: number,\n lineWidth: number\n};\nexport default class DashedCircle {\n public canvas: HTMLCanvasElement;\n public context: CanvasRenderingContext2D;\n public dpr: number;\n\n private width: number;\n private height: number;\n private centerX: number;\n private centerY: number;\n private radius: number;\n private gapLength: number;\n private totalLength: number;\n private startAngle: number;\n\n constructor() {\n this.canvas = document.createElement('canvas');\n this.context = this.canvas.getContext('2d');\n this.dpr = window.devicePixelRatio;\n }\n\n public prepare(options: {\n radius: number,\n gap: number,\n width: number,\n height: number\n }) {\n this.canvas.width = this.width = options.width * this.dpr;\n this.canvas.height = this.height = options.height * this.dpr;\n\n this.centerX = this.width / 2;\n this.centerY = this.height / 2;\n this.radius = options.radius * this.dpr;\n this.gapLength = options.gap * this.dpr;\n this.totalLength = Math.PI * this.radius * 2;\n // this.startAngle = -1.5 + this.gapLength * 0 / this.totalLength;\n this.startAngle = -1.5;\n }\n\n public render(sections: DashedCircleSection[]) {\n this.context.clearRect(0, 0, this.width, this.height);\n\n const totalSegments = sections.reduce((acc, section) => acc + section.length, 0);\n const totalSections = sections.length;\n this.context.lineCap = 'round';\n if(sections.length === 1 && sections[0].length === 1) {\n this.context.setLineDash([]);\n } else {\n this.context.setLineDash([this.totalLength / totalSegments - this.gapLength, this.gapLength]);\n }\n\n let partSum = 0;\n for(let i = 0; i < totalSections; ++i) {\n const section = sections[i];\n const part = section.length / totalSegments;\n const sectionStartAngle = this.startAngle + partSum * 2 * Math.PI;\n const sectionEndAngle = sectionStartAngle + part * 2 * Math.PI;\n\n this.context.beginPath();\n this.context.arc(\n this.centerX,\n this.centerY,\n this.radius,\n sectionStartAngle,\n sectionEndAngle,\n false\n );\n this.context.strokeStyle = section.color;\n this.context.lineWidth = section.lineWidth * this.dpr;\n this.context.stroke();\n\n partSum += part;\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport sequentialDom from '../sequentialDom';\nimport {renderImageFromUrlPromise} from './renderImageFromUrl';\n\nconst UNMOUNT_THUMBS = true;\n\nexport default function renderMediaWithFadeIn({\n container,\n media,\n url,\n needFadeIn,\n aspecter = container,\n thumbImage,\n fadeInElement = media as any,\n onRender,\n onRenderFinish,\n useRenderCache\n}: {\n container: HTMLElement,\n media: Parameters[0],\n url: string,\n needFadeIn: boolean,\n aspecter?: HTMLElement,\n thumbImage?: HTMLElement,\n fadeInElement?: HTMLElement,\n onRender?: () => void,\n onRenderFinish?: () => void,\n useRenderCache?: boolean\n}) {\n if(needFadeIn) {\n fadeInElement.classList.add('fade-in');\n }\n\n const promise = renderImageFromUrlPromise(media, url, useRenderCache).then(() => {\n return sequentialDom.mutateElement(container, () => {\n aspecter?.append(media);\n\n if(needFadeIn) {\n onRender?.();\n fadeInElement.addEventListener('animationend', () => {\n sequentialDom.mutate(() => {\n fadeInElement.classList.remove('fade-in');\n UNMOUNT_THUMBS && thumbImage?.remove();\n container.classList.add('no-background');\n onRenderFinish?.();\n });\n }, {once: true});\n } else {\n UNMOUNT_THUMBS && thumbImage?.remove();\n container.classList.add('no-background');\n onRender?.();\n onRenderFinish?.();\n }\n });\n });\n\n // recordPromise(promise, 'renderImageWithFadeIn');\n\n return promise;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport liteMode from '../helpers/liteMode';\n\nconst $TRANSITION_RAF = Symbol('RAF'),\n $TRANSITION_TIMEOUT = Symbol('TIMEOUT');\n\ntype SetTransitionOptions = {\n element: HTMLElement,\n className: string,\n forwards: boolean,\n duration: number,\n onTransitionEnd?: () => void,\n useRafs?: number,\n onTransitionStart?: () => void\n};\nconst SetTransition = (options: SetTransitionOptions) => {\n const {element, className, forwards, duration, onTransitionEnd, onTransitionStart, useRafs} = options;\n const classNames = className && className.split(' ');\n const timeout: number = (element as any)[$TRANSITION_TIMEOUT];\n const raf: number = (element as any)[$TRANSITION_RAF];\n if(timeout !== undefined) {\n clearTimeout(+timeout);\n }\n\n // useRafs = undefined;\n // duration = 0;\n\n if(raf !== undefined) {\n window.cancelAnimationFrame(+raf);\n if(!useRafs) {\n delete (element as any)[$TRANSITION_RAF];\n }\n }\n\n // if(forwards && className && element.classList.contains(className) && !element.classList.contains('animating')) {\n // return;\n // }\n\n if(useRafs && liteMode.isAvailable('animations') && duration) {\n (element as any)[$TRANSITION_RAF] = '' + window.requestAnimationFrame(() => {\n delete (element as any)[$TRANSITION_RAF];\n SetTransition({\n ...options,\n useRafs: useRafs - 1\n });\n });\n\n return;\n }\n\n if(forwards && className) {\n element.classList.add(...classNames);\n }\n\n const afterTimeout = () => {\n delete (element as any)[$TRANSITION_TIMEOUT];\n if(!forwards && className) {\n element.classList.remove('backwards', ...classNames);\n }\n\n element.classList.remove('animating');\n\n onTransitionEnd?.();\n };\n\n onTransitionStart?.();\n if(!liteMode.isAvailable('animations') || !duration) {\n element.classList.remove('animating', 'backwards');\n afterTimeout();\n return;\n }\n\n element.classList.add('animating');\n\n element.classList.toggle('backwards', !forwards);\n (element as any)[$TRANSITION_TIMEOUT] = '' + setTimeout(afterTimeout, duration);\n};\n\nexport default SetTransition;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {CancellablePromise} from '../helpers/cancellablePromise';\nimport SetTransition from './singleTransition';\nimport {fastRaf} from '../helpers/schedulers';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport isInDOM from '../helpers/dom/isInDOM';\nimport safeAssign from '../helpers/object/safeAssign';\n\nconst TRANSITION_TIME = 200;\n\nexport default class ProgressivePreloader {\n public preloader: HTMLDivElement;\n public circle: SVGCircleElement;\n private cancelSvg: SVGSVGElement;\n private downloadSvg: HTMLElement;\n\n private tempId = 0;\n public detached = true;\n\n public promise: CancellablePromise = null;\n\n public isUpload = false;\n private cancelable = true;\n private streamable = false;\n private rtmp = false;\n private tryAgainOnFail = true;\n private attachMethod: 'append' | 'prepend' = 'append';\n\n public loadFunc: (e?: Event) => any;\n\n public totalLength: number;\n\n constructor(options?: Partial<{\n isUpload: ProgressivePreloader['isUpload'],\n cancelable: ProgressivePreloader['cancelable'],\n streamable: ProgressivePreloader['streamable'],\n rtmp: ProgressivePreloader['rtmp'],\n tryAgainOnFail: ProgressivePreloader['tryAgainOnFail'],\n attachMethod: ProgressivePreloader['attachMethod']\n }>) {\n if(options) {\n safeAssign(this, options);\n }\n\n if(this.isUpload) {\n this.tryAgainOnFail = false;\n }\n }\n\n public constructContainer(options: Partial<{\n color: 'transparent',\n bold: boolean\n }> = {}) {\n if(!this.preloader) {\n this.preloader = document.createElement('div');\n if(this.rtmp) {\n this.preloader.classList.add('preloader-container-rtmp');\n } else {\n this.preloader.classList.add('preloader-container');\n }\n\n if(options.color) {\n this.preloader.classList.add('preloader-' + options.color);\n }\n\n if(options.bold) {\n this.preloader.classList.add('preloader-bold');\n }\n\n if(this.streamable) {\n this.preloader.classList.add('preloader-streamable');\n }\n }\n }\n\n public constructDownloadIcon() {\n this.constructContainer();\n }\n\n public construct() {\n this.construct = null;\n\n this.constructContainer();\n\n if(this.rtmp) {\n this.preloader.innerHTML = `\n
\n
\n
\n
\n
\n
`;\n } else {\n this.preloader.innerHTML = `\n
\n \n \n \n
`;\n }\n\n if(this.streamable) {\n this.totalLength = 118.61124420166016;\n } else {\n this.totalLength = 149.82473754882812;\n }\n\n if(this.cancelable) {\n this.preloader.innerHTML += `\n \n \n \n \n \n \n \n \n \n \n \n `;\n\n this.downloadSvg = this.preloader.lastElementChild as HTMLElement;\n this.cancelSvg = this.downloadSvg.previousElementSibling as any;\n } else {\n this.preloader.classList.add('preloader-swing');\n }\n\n this.circle = this.preloader.firstElementChild.firstElementChild.firstElementChild as SVGCircleElement;\n\n if(this.cancelable) {\n attachClickEvent(this.preloader, this.onClick);\n }\n }\n\n public onClick = (e?: Event) => {\n if(e) {\n cancelEvent(e);\n }\n\n if(this.preloader.classList.contains('manual')) {\n this.loadFunc?.(e);\n } else {\n this.promise?.cancel?.();\n }\n };\n\n public setDownloadFunction(func: ProgressivePreloader['loadFunc']) {\n this.loadFunc = func;\n }\n\n public setManual() {\n this.preloader.classList.add('manual');\n this.setProgress(0);\n }\n\n public attachPromise(promise: CancellablePromise) {\n if(this.isUpload && this.promise) return;\n\n this.promise = promise;\n\n const tempId = --this.tempId;\n const startTime = Date.now();\n\n const onEnd = (err: Error) => {\n promise.notify = promise.notifyAll = null;\n\n if(tempId !== this.tempId) {\n return;\n }\n\n const elapsedTime = Date.now() - startTime;\n\n // console.log('[PP]: end', this.detached, performance.now());\n\n if(!err && this.cancelable) {\n this.setProgress(100);\n\n const delay = TRANSITION_TIME * 0.75;\n\n if(elapsedTime < delay) {\n this.detach();\n } else {\n setTimeout(() => { // * wait for transition complete\n if(tempId === this.tempId) {\n this.detach();\n }\n }, delay);\n }\n } else {\n if(this.tryAgainOnFail) {\n this.attach(this.preloader.parentElement);\n fastRaf(() => {\n this.setManual();\n });\n } else {\n this.detach();\n }\n }\n\n this.promise = promise = null;\n };\n\n promise\n .then(() => onEnd(null))\n .catch((err) => onEnd(err));\n\n promise.addNotifyListener?.((details: {done: number, total: number}) => {\n /* if(details.done >= details.total) {\n onEnd();\n } */\n\n if(tempId !== this.tempId) return;\n\n // console.log('preloader download', promise, details);\n const percents = details.done / details.total * 100;\n this.setProgress(percents);\n });\n }\n\n public attach(elem: Element, reset = false, promise?: CancellablePromise) {\n if(!this.detached && (!this.preloader || !this.preloader.classList.contains('manual'))) {\n return;\n }\n\n this.construct?.();\n\n if(this.preloader.parentElement) {\n this.preloader.classList.remove('manual');\n }\n\n this.detached = false;\n\n if(promise/* && false */) {\n this.attachPromise(promise);\n }\n\n let useRafs = 0;\n if(this.detached || this.preloader.parentElement !== elem) {\n useRafs = isInDOM(this.preloader) ? 1 : 2;\n if(this.preloader.parentElement !== elem) {\n elem[this.attachMethod](this.preloader);\n }\n }\n\n SetTransition({\n element: this.preloader,\n className: 'is-visible',\n forwards: true,\n duration: TRANSITION_TIME,\n useRafs\n });\n\n if(this.cancelable && reset) {\n this.setProgress(0);\n }\n }\n\n public detach() {\n if(this.detached) {\n return;\n }\n // return;\n\n this.detached = true;\n\n // return;\n\n if(this.preloader?.parentElement) {\n /* setTimeout(() => */// fastRaf(() => {\n /* if(!this.detached) return;\n this.detached = true; */\n\n // fastRaf(() => {\n // console.log('[PP]: detach after rAF', this.detached, performance.now());\n\n // if(!this.detached || !this.preloader.parentElement) {\n // return;\n // }\n\n SetTransition({\n element: this.preloader,\n className: 'is-visible',\n forwards: false,\n duration: TRANSITION_TIME,\n onTransitionEnd: () => {\n this.preloader.remove();\n },\n useRafs: 1\n });\n // });\n // })/* , 5e3) */;\n }\n }\n\n public setProgress(percents: number) {\n if(!this.totalLength && !isInDOM(this.circle)) {\n return;\n }\n\n if(percents === 0) {\n this.circle.style.strokeDasharray = '';\n return;\n }\n\n try {\n this.totalLength ||= this.circle.getTotalLength();\n\n // console.log('setProgress', (percents / 100 * totalLength));\n this.circle.style.strokeDasharray = '' + Math.max(5, percents / 100 * this.totalLength) + ', ' + this.totalLength;\n } catch(err) {}\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport type {MyPhoto} from '../lib/appManagers/appPhotosManager';\nimport type {ThumbCache} from '../lib/storages/thumbs';\nimport {THUMB_TYPE_FULL} from '../lib/mtproto/mtproto_config';\nimport getImageFromStrippedThumb from './getImageFromStrippedThumb';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport {PhotoSize} from '../layer';\n\nexport default function getMediaThumbIfNeeded({\n photo,\n cacheContext,\n useBlur,\n ignoreCache,\n onlyStripped\n}: {\n photo: MyPhoto | MyDocument,\n cacheContext: ThumbCache,\n useBlur: boolean | number,\n ignoreCache?: boolean,\n onlyStripped?: boolean\n}) {\n const isVideo = (['video', 'gif'] as MyDocument['type'][]).includes((photo as MyDocument).type);\n if(!cacheContext.downloaded || isVideo || ignoreCache) {\n if(\n photo._ === 'document' &&\n cacheContext.downloaded &&\n !ignoreCache &&\n (!isVideo || cacheContext.type !== THUMB_TYPE_FULL)\n ) {\n return null;\n }\n\n const sizes = (photo as MyPhoto).sizes || (photo as MyDocument).thumbs;\n const length = sizes?.length;\n if(!length) {\n return null;\n }\n\n let currentSizeIndex = -1;\n if(!onlyStripped) for(let i = length - 1; i >= 0; --i) {\n const size = sizes[i];\n if(size.type === cacheContext.type) {\n currentSizeIndex = i;\n } else if(currentSizeIndex) {\n const cacheContext = apiManagerProxy.getCacheContext(photo, size.type);\n if(cacheContext.downloaded) {\n return getImageFromStrippedThumb(photo, size as PhotoSize.photoCachedSize, false, cacheContext.url);\n }\n }\n }\n\n const thumb = sizes.find((size) => size._ === 'photoStrippedSize');\n if(thumb && ('bytes' in thumb)) {\n return getImageFromStrippedThumb(photo, thumb as any, useBlur);\n }\n }\n\n return null;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message, MessageMedia, PhotoSize, WebDocument} from '../layer';\nimport {REPLIES_HIDDEN_CHANNEL_ID} from '../lib/mtproto/mtproto_config';\nimport {MyDocument} from '../lib/appManagers/appDocsManager';\nimport {MyPhoto} from '../lib/appManagers/appPhotosManager';\nimport choosePhotoSize from '../lib/appManagers/utils/photos/choosePhotoSize';\nimport {MediaSize, makeMediaSize} from './mediaSize';\nimport isWebDocument from '../lib/appManagers/utils/webDocs/isWebDocument';\n\nexport const EXPAND_TEXT_WIDTH = 320;\nexport const MIN_IMAGE_WIDTH = 120;\nexport const MIN_SIDE_SIZE = 200;\nexport const MIN_VIDEO_SIDE_SIZE = 368;\n\nexport default function setAttachmentSize({\n photo,\n element,\n boxWidth,\n boxHeight,\n noZoom = true,\n message,\n pushDocumentSize,\n photoSize,\n size,\n canHaveVideoPlayer\n}: {\n photo?: MyPhoto | MyDocument | WebDocument,\n element: HTMLElement | SVGForeignObjectElement,\n boxWidth: number,\n boxHeight: number,\n noZoom?: boolean,\n message?: Message.message,\n pushDocumentSize?: boolean,\n photoSize?: ReturnType,\n size?: MediaSize,\n canHaveVideoPlayer?: boolean\n}) {\n const _isWebDocument = isWebDocument(photo);\n // if(_isWebDocument && pushDocumentSize === undefined) {\n // pushDocumentSize = true;\n // }\n\n if(!photoSize && !size) {\n photoSize = choosePhotoSize(photo, boxWidth, boxHeight, undefined, pushDocumentSize);\n }\n // console.log('setAttachmentSize', photo, photo.sizes[0].bytes, div);\n\n const isDocument = photo?._ === 'document';\n if(size) {\n\n } else if(isDocument || _isWebDocument) {\n size = makeMediaSize(photo.w || (photoSize as PhotoSize.photoSize).w || 512, photo.h || (photoSize as PhotoSize.photoSize).h || 512);\n } else {\n size = makeMediaSize((photoSize as PhotoSize.photoSize).w || 100, (photoSize as PhotoSize.photoSize).h || 100);\n }\n\n let boxSize = makeMediaSize(boxWidth, boxHeight);\n\n boxSize = size = size.aspect(boxSize, noZoom);\n\n let isFit = true;\n\n if(!isDocument || ['video', 'gif'].includes(photo.type) || _isWebDocument) {\n const minSideSize = MIN_SIDE_SIZE;\n if(boxSize.width < minSideSize && boxSize.height < minSideSize) { // make at least one side this big\n boxSize = size = size.aspectCovered(makeMediaSize(minSideSize, minSideSize));\n }\n\n if(message &&\n (message.message ||\n message.factcheck ||\n message.reply_to_mid ||\n (message.media as MessageMedia.messageMediaWebPage).webpage ||\n (message.replies && message.replies.pFlags.comments && message.replies.channel_id.toChatId() !== REPLIES_HIDDEN_CHANNEL_ID)\n )\n ) { // make sure that bubble block is human-readable\n if(boxSize.width < EXPAND_TEXT_WIDTH) {\n boxSize = makeMediaSize(EXPAND_TEXT_WIDTH, boxSize.height);\n isFit = false;\n }\n }\n\n const minWidth = (photo as MyDocument)?.type === 'video' && canHaveVideoPlayer ? MIN_VIDEO_SIDE_SIZE : MIN_IMAGE_WIDTH;\n if(/* isFit && */boxSize.width < minWidth && message) { // if image is too narrow\n boxSize = makeMediaSize(minWidth, boxSize.height);\n isFit = false;\n }\n }\n\n // if(element instanceof SVGForeignObjectElement) {\n // element.setAttributeNS(null, 'width', '' + w);\n // element.setAttributeNS(null, 'height', '' + h);\n\n // //console.log('set dimensions to svg element:', element, w, h);\n // } else {\n element.style.width = boxSize.width + 'px';\n element.style.height = boxSize.height + 'px';\n // }\n\n return {photoSize, size, isFit};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport renderMediaWithFadeIn from '../../helpers/dom/renderMediaWithFadeIn';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {InputWebFileLocation, Message, PhotoSize, VideoSize, WebDocument} from '../../layer';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport {MyPhoto} from '../../lib/appManagers/appPhotosManager';\nimport rootScope from '../../lib/rootScope';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport ProgressivePreloader from '../preloader';\nimport blur from '../../helpers/blur';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getMediaThumbIfNeeded from '../../helpers/getStrippedThumbIfNeeded';\nimport setAttachmentSize from '../../helpers/setAttachmentSize';\nimport choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize';\nimport type {ThumbCache} from '../../lib/storages/thumbs';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\nimport isWebDocument from '../../lib/appManagers/utils/webDocs/isWebDocument';\nimport createVideo from '../../helpers/dom/createVideo';\nimport noop from '../../helpers/noop';\nimport {THUMB_TYPE_FULL} from '../../lib/mtproto/mtproto_config';\nimport {Middleware} from '../../helpers/middleware';\nimport liteMode from '../../helpers/liteMode';\nimport isWebFileLocation from '../../lib/appManagers/utils/webFiles/isWebFileLocation';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\n\nexport default async function wrapPhoto({photo, message, container, boxWidth, boxHeight, withTail, isOut, lazyLoadQueue, middleware, size, withoutPreloader, loadPromises, autoDownloadSize, noBlur, noThumb, noFadeIn, blurAfter, managers = rootScope.managers, processUrl, fadeInElement, onRender, onRenderFinish, useBlur, useRenderCache, canHaveVideoPlayer, uploadingFileName}: {\n photo: MyPhoto | MyDocument | WebDocument | InputWebFileLocation,\n message?: Message.message | Message.messageService,\n container?: HTMLElement,\n boxWidth?: number,\n boxHeight?: number,\n withTail?: boolean,\n isOut?: boolean,\n lazyLoadQueue?: LazyLoadQueue | false,\n middleware?: Middleware,\n size?: PhotoSize | Extract,\n withoutPreloader?: boolean,\n loadPromises?: Promise[],\n autoDownloadSize?: number,\n noBlur?: boolean,\n noThumb?: boolean,\n noFadeIn?: boolean,\n blurAfter?: boolean,\n managers?: AppManagers,\n processUrl?: (url: string) => Promise,\n fadeInElement?: HTMLElement,\n onRender?: () => void,\n onRenderFinish?: () => void,\n useBlur?: boolean | number,\n useRenderCache?: boolean,\n canHaveVideoPlayer?: boolean,\n uploadingFileName?: string\n}) {\n const ret = {\n loadPromises: {\n thumb: Promise.resolve() as Promise,\n full: Promise.resolve() as Promise\n },\n images: {\n thumb: null as HTMLImageElement | HTMLCanvasElement,\n full: null as HTMLVideoElement | HTMLImageElement\n },\n preloader: null as ProgressivePreloader,\n aspecter: null as HTMLElement\n };\n\n if(!container) {\n withoutPreloader = true;\n lazyLoadQueue = undefined;\n }\n\n const isWebFile = isWebFileLocation(photo);\n const isDocument = photo._ === 'document';\n const isImageFromDocument = isDocument && photo.mime_type.startsWith('image/') && !size;\n const isWebDoc = isWebDocument(photo);\n if(\n !((photo as MyPhoto).sizes || (photo as MyDocument).thumbs) &&\n !isWebDoc &&\n !isImageFromDocument &&\n !isWebFile\n ) {\n if(boxWidth && boxHeight && !size && isDocument) {\n setAttachmentSize({\n photo,\n element: container,\n boxWidth,\n boxHeight,\n message: message as Message.message,\n canHaveVideoPlayer\n });\n }\n\n return ret;\n }\n\n let noAutoDownload = autoDownloadSize === 0;\n\n if(!size) {\n if(boxWidth === undefined) boxWidth = mediaSizes.active.regular.width;\n if(boxHeight === undefined) boxHeight = mediaSizes.active.regular.height;\n }\n\n container && container.classList.add('media-container');\n let aspecter = container;\n\n let isFit = true;\n let loadThumbPromise: Promise = Promise.resolve();\n let thumbImage: HTMLImageElement | HTMLCanvasElement;\n // let image: HTMLImageElement;\n let cacheContext: ThumbCache;\n // if(withTail) {\n // image = wrapMediaWithTail(photo, message, container, boxWidth, boxHeight, isOut);\n // } else {\n\n if(boxWidth && boxHeight && !size && !isWebFile && container) { // !album\n const set = setAttachmentSize({\n photo,\n element: container,\n boxWidth,\n boxHeight,\n message: message as Message.message,\n photoSize: isImageFromDocument ? {\n _: 'photoSize',\n w: photo.w,\n h: photo.h,\n size: photo.size,\n type: THUMB_TYPE_FULL\n } : undefined,\n canHaveVideoPlayer\n });\n size = set.photoSize;\n isFit = set.isFit;\n cacheContext = apiManagerProxy.getCacheContext(photo, size.type);\n\n if(!isFit && !isWebDoc) {\n aspecter = document.createElement('div');\n aspecter.classList.add('media-container-aspecter');\n aspecter.style.width = set.size.width + 'px';\n aspecter.style.height = set.size.height + 'px';\n\n const gotThumb = getMediaThumbIfNeeded({\n photo,\n cacheContext,\n useBlur: useBlur !== undefined ? useBlur : !noBlur,\n ignoreCache: true,\n onlyStripped: true\n });\n if(gotThumb) {\n loadThumbPromise = gotThumb.loadPromise;\n const thumbImage = gotThumb.image; // local scope\n thumbImage.classList.add('media-photo');\n container.append(thumbImage);\n } else {\n const res = await wrapPhoto({\n container,\n message,\n photo,\n boxWidth: 0,\n boxHeight: 0,\n size,\n lazyLoadQueue,\n isOut,\n loadPromises,\n middleware,\n withoutPreloader: true,\n withTail,\n autoDownloadSize,\n noBlur,\n noThumb: true,\n blurAfter: true,\n managers\n // noFadeIn: true\n });\n const thumbImage = res.images.full;\n thumbImage.classList.add('media-photo', 'thumbnail');\n // container.append(thumbImage);\n }\n\n container.classList.add('media-container-fitted');\n container.append(aspecter);\n }\n } else {\n if(!size && !isWebFile) {\n size = choosePhotoSize(photo, boxWidth, boxHeight, true);\n }\n\n cacheContext = apiManagerProxy.getCacheContext(photo, size?.type);\n }\n\n if(!noThumb && !isWebDoc && !isWebFile && aspecter) {\n const gotThumb = getMediaThumbIfNeeded({\n photo,\n cacheContext,\n useBlur: useBlur !== undefined ? useBlur : !noBlur\n });\n\n if(gotThumb) {\n loadThumbPromise = Promise.all([loadThumbPromise, gotThumb.loadPromise]);\n ret.loadPromises.thumb = ret.loadPromises.full = loadThumbPromise;\n thumbImage = ret.images.thumb = gotThumb.image;\n thumbImage.classList.add('media-photo');\n aspecter.append(thumbImage);\n }\n }\n // }\n\n ret.aspecter = aspecter;\n\n if((size?._ === 'photoSizeEmpty' && isDocument) || (size as PhotoSize.photoStrippedSize)?.bytes) {\n return ret;\n }\n\n let media: HTMLVideoElement | HTMLImageElement;\n if(size?._ === 'videoSize') {\n media = ret.images.full = createVideo({middleware});\n media.autoplay = true;\n media.loop = true;\n media.muted = true;\n media.classList.add('media-photo');\n } else {\n media = ret.images.full = new Image();\n media.classList.add('media-photo');\n }\n\n // console.log('wrapPhoto downloaded:', photo, photo.downloaded, container);\n\n const needFadeIn = (thumbImage || !cacheContext.downloaded) && liteMode.isAvailable('animations') && !noFadeIn;\n\n let preloader: ProgressivePreloader;\n uploadingFileName ??= (message as Message.message)?.uploadingFileName?.[0];\n if(!withoutPreloader) {\n if(!cacheContext.downloaded || uploadingFileName) {\n preloader = new ProgressivePreloader({\n attachMethod: 'prepend',\n isUpload: !!uploadingFileName\n });\n }\n\n if(uploadingFileName) { // means upload\n preloader.attachPromise(appDownloadManager.getUpload(uploadingFileName));\n preloader.attach(container);\n noAutoDownload = undefined;\n }\n }\n\n\n const getDownloadPromise = () => {\n // const promise = isGif && !size ?\n // managers.appDocsManager.downloadDoc(photo, /* undefined, */lazyLoadQueue?.queueId) :\n // managers.appPhotosManager.preloadPhoto(photo, size, lazyLoadQueue?.queueId, noAutoDownload);\n const haveToDownload = isImageFromDocument && !size;\n const promise = appDownloadManager.downloadMediaURL({\n media: photo,\n thumb: size,\n queueId: lazyLoadQueue && lazyLoadQueue.queueId,\n onlyCache: haveToDownload ? undefined : noAutoDownload\n });\n\n return promise;\n };\n\n const renderOnLoad = (url: string) => {\n return renderMediaWithFadeIn({\n container,\n media,\n url,\n needFadeIn,\n aspecter,\n thumbImage,\n fadeInElement,\n onRender,\n onRenderFinish,\n useRenderCache\n });\n };\n\n const onLoad = async(url: string) => {\n if(middleware && !middleware()) return;\n\n if(processUrl) {\n url = await processUrl(url);\n }\n\n if(blurAfter) {\n const result = blur(url, 12);\n return result.promise.then(() => {\n // image = result.canvas;\n return renderOnLoad(result.canvas.toDataURL());\n });\n }\n\n return renderOnLoad(url);\n };\n\n let loadPromise: Promise;\n const canAttachPreloader = (\n !isWebFile &&\n (size as PhotoSize.photoSize).w >= 150 &&\n (size as PhotoSize.photoSize).h >= 150\n ) || noAutoDownload;\n const load = async() => {\n if(noAutoDownload && !withoutPreloader && preloader) {\n preloader.construct();\n preloader.setManual();\n }\n\n const promise = getDownloadPromise();\n const cacheContext = apiManagerProxy.getCacheContext(photo, size?.type);\n if(\n preloader &&\n !cacheContext.downloaded &&\n !withoutPreloader &&\n canAttachPreloader\n ) {\n preloader.attach(container, false, promise);\n }\n\n noAutoDownload = undefined;\n\n const renderPromise = promise.then(onLoad);\n renderPromise.catch(noop);\n return {download: promise, render: renderPromise};\n };\n\n if(preloader) {\n preloader.setDownloadFunction(load);\n }\n\n if(cacheContext.downloaded) {\n loadThumbPromise = loadPromise = (await load()).render;\n } else {\n if(!lazyLoadQueue) loadPromise = (await load()).render;\n /* else if(noAutoDownload) {\n preloader.construct();\n preloader.setManual();\n preloader.attach(container);\n } */ else lazyLoadQueue.push({div: container, load: () => load().then(({download}) => download)});\n }\n\n if(loadPromises && loadThumbPromise) {\n loadPromises.push(loadThumbPromise);\n }\n\n // const perf = performance.now();\n // ! do not uncomment this, won't be able to modify element before the thumb is loaded\n // await loadThumbPromise;\n ret.loadPromises.thumb = loadThumbPromise;\n ret.loadPromises.full = loadPromise || Promise.resolve();\n ret.preloader = preloader;\n\n // const elapsedTime = performance.now() - perf;\n // if(elapsedTime > 4) {\n // console.log('wrapping photo thumb time', elapsedTime, photo, size);\n // }\n\n return ret;\n}\n","import {onCleanup} from 'solid-js';\nimport {ListenerElement} from '../listenerSetter';\n\nexport function subscribeOn(obj: T): T['addEventListener'] {\n return ((event: string, callback: Function, options: any) => {\n // @ts-ignore\n obj.addEventListener(event, callback, options);\n\n onCleanup(() => {\n // @ts-ignore\n obj.removeEventListener(event, callback, options);\n });\n }) as any;\n}\n","import {subscribeOn} from '../helpers/solid/subscribeOn';\nimport themeController from '../helpers/themeController';\nimport rootScope from '../lib/rootScope';\nimport {createSignal} from 'solid-js';\n\nexport default function useIsNightTheme() {\n const [isNight, setIsNight] = createSignal(themeController.isNight());\n subscribeOn(rootScope)('theme_changed', () => {\n setIsNight(themeController.isNight());\n });\n return isNight;\n}\n","function Path1(props: {stroke?: boolean}) {\n return (\n \n );\n}\n\nexport default function currencyStarIcon(props: {class?: string, stroke?: boolean} = {}) {\n return (\n \n {props.stroke && }\n \n \n \n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type LazyLoadQueue from './lazyLoadQueue';\nimport type {PeerPhotoSize} from '../lib/appManagers/appAvatarsManager';\nimport type {StoriesSegment, StoriesSegments} from '../lib/appManagers/appStoriesManager';\nimport {getMiddleware, type Middleware} from '../helpers/middleware';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport {\n createSignal,\n createEffect,\n createMemo,\n onCleanup,\n JSX,\n createRoot,\n Show,\n Accessor,\n on,\n splitProps, onMount\n} from 'solid-js';\nimport rootScope from '../lib/rootScope';\nimport {NULL_PEER_ID, REPLIES_PEER_ID, HIDDEN_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport {Chat, ChatPhoto, PhotoSize, User, UserProfilePhoto} from '../layer';\nimport {getPeerAvatarColorByPeer} from '../lib/appManagers/utils/peers/getPeerColorById';\nimport getPeerPhoto from '../lib/appManagers/utils/peers/getPeerPhoto';\nimport wrapAbbreviation from '../lib/richTextProcessor/wrapAbbreviation';\nimport getPeerInitials from './wrappers/getPeerInitials';\nimport liteMode from '../helpers/liteMode';\nimport renderImageFromUrl, {renderImageFromUrlPromise} from '../helpers/dom/renderImageFromUrl';\nimport getPreviewURLFromBytes from '../helpers/bytes/getPreviewURLFromBytes';\nimport classNames from '../helpers/string/classNames';\nimport {wrapTopicIcon} from './wrappers/messageActionTextNewUnsafe';\nimport {Modify} from '../types';\nimport documentFragmentToNodes from '../helpers/dom/documentFragmentToNodes';\nimport DashedCircle, {DashedCircleSection} from '../helpers/canvas/dashedCircle';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport {AckedResult} from '../lib/mtproto/superMessagePort';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport callbackify from '../helpers/callbackify';\nimport Icon from './icon';\nimport wrapPhoto from './wrappers/photo';\nimport customProperties from '../helpers/dom/customProperties';\nimport {appState} from '../stores/appState';\nimport useIsNightTheme from '../hooks/useIsNightTheme';\nimport currencyStarIcon from './currencyStarIcon';\n\nconst FADE_IN_DURATION = 200;\nconst TEST_SWAPPING = 0;\n\nconst avatarsMap: Map>> = new Map();\nconst believeMe: Map>> = new Map();\nconst seen: Set = new Set();\n\nfunction getAvatarQueueKey(peerId: PeerId, threadId?: number) {\n return peerId + (threadId ? '_' + threadId : '');\n}\n\nconst onAvatarUpdate = ({peerId, threadId}: {peerId: PeerId, threadId?: number}) => {\n const key = getAvatarQueueKey(peerId, threadId);\n const set = avatarsMap.get(key);\n if(!set?.size) {\n return;\n }\n\n for(const avatar of set) {\n avatar.render();\n }\n};\n\nconst onAvatarStoriesUpdate = ({peerId}: {peerId: PeerId}) => {\n const key = getAvatarQueueKey(peerId);\n const set = avatarsMap.get(key);\n if(!set?.size) {\n return;\n }\n\n for(const avatar of set) {\n avatar.updateStoriesSegments();\n }\n};\n\nrootScope.addEventListener('avatar_update', onAvatarUpdate);\nrootScope.addEventListener('peer_title_edit', async(data) => {\n if(!(await rootScope.managers.appAvatarsManager.isAvatarCached(data.peerId))) {\n onAvatarUpdate(data);\n }\n});\n\nrootScope.addEventListener('peer_stories', ({peerId}) => {\n onAvatarStoriesUpdate({peerId});\n});\nrootScope.addEventListener('stories_read', onAvatarStoriesUpdate);\nrootScope.addEventListener('story_deleted', onAvatarStoriesUpdate);\nrootScope.addEventListener('story_new', onAvatarStoriesUpdate);\n\nconst getStoriesSegments = async(peerId: PeerId, storyId?: number): Promise> => {\n if(storyId) {\n const storyUnreadType = await rootScope.managers.appStoriesManager.getUnreadType(peerId, storyId);\n\n const segments: StoriesSegments = [{\n length: 1,\n type: storyUnreadType\n }];\n\n return {\n cached: true,\n result: Promise.resolve(segments)\n };\n }\n\n return rootScope.managers.acknowledged.appStoriesManager.getPeerStoriesSegments(peerId);\n};\n\nconst createUnreadGradient = (context: CanvasRenderingContext2D, size: number, dpr: number) => {\n const gradient = context.createLinearGradient(\n size * 0.9156 * dpr,\n size * -0.05695821429 * dpr,\n size * 0.1342364286 * dpr,\n size * 1.02370714286 * dpr\n );\n gradient.addColorStop(0, customProperties.getProperty('avatar-color-story-unread-from'));\n gradient.addColorStop(1, customProperties.getProperty('avatar-color-story-unread-to'));\n return gradient;\n};\n\nconst createCloseGradient = (context: CanvasRenderingContext2D, size: number, dpr: number) => {\n const gradient = context.createLinearGradient(\n size * 0.5 * dpr,\n size * 0 * dpr,\n size * 0.5 * dpr,\n size * 1 * dpr\n );\n gradient.addColorStop(0, customProperties.getProperty('avatar-color-story-close-from'));\n gradient.addColorStop(1, customProperties.getProperty('avatar-color-story-close-to'));\n return gradient;\n};\n\nexport function findUpAvatar(target: Element | EventTarget) {\n let avatar = findUpClassName(target, 'avatar');\n if(avatar) avatar = findUpClassName(avatar, 'has-stories') || avatar;\n return avatar;\n}\n\nconst calculateSegmentsDimensions = (s: number) => {\n const willBeSize = Math.round(s * (1 - 6 / 54));\n const totalSvgSize = s * (1 + 2 / 54);\n const multiplier = s / 54;\n const strokeWidth = 2 * multiplier;\n\n return {\n size: s,\n willBeSize,\n totalSvgSize,\n multiplier,\n strokeWidth\n };\n};\n\nexport function wrapPhotoToAvatar(\n avatarElem: ReturnType,\n photo: Parameters[0]['photo'],\n boxSize: number = 100,\n photoSize?: PhotoSize\n) {\n return wrapPhoto({\n container: avatarElem.node,\n message: null,\n photo,\n boxHeight: boxSize,\n boxWidth: boxSize,\n withoutPreloader: true,\n size: photoSize\n }).then((result) => {\n avatarElem.node.classList.replace('media-container', 'avatar-relative');\n avatarElem.node.style.width = avatarElem.node.style.height = '';\n [result.images.thumb, result.images.full].forEach((image) => {\n if(!image) {\n return;\n }\n\n image.classList.replace('media-photo', 'avatar-photo');\n });\n\n if(result.images.thumb) {\n result.images.thumb.classList.add('avatar-photo-thumbnail');\n }\n\n return result.loadPromises.thumb;\n });\n}\n\nexport function StoriesSegments(props: {\n size: number,\n colors: Partial<{\n read: string\n }>,\n isStoryFolded?: Accessor,\n}) {\n const [storiesSegments, setStoriesSegments] = createSignal();\n const storyDimensions: Accessor> = createMemo((previousDimensions) => {\n if(storiesSegments() === undefined) {\n return;\n }\n\n if(previousDimensions?.size === props.size) {\n return previousDimensions;\n }\n\n return calculateSegmentsDimensions(props.size as number);\n });\n const storiesCircle = createMemo(() => {\n // if(isStoryFolded()) {\n // return;\n // }\n\n const dimensions = storyDimensions();\n if(!dimensions) {\n return;\n }\n\n let simple: JSX.Element;\n if(props.isStoryFolded !== undefined) {\n const status = createMemo(() => {\n const segments = storiesSegments();\n const firstCloseSegment = segments.find((segment) => segment.type === 'close');\n const segment = firstCloseSegment || segments.find((segment) => segment.type === 'unread') || segments[0];\n return segment.type;\n });\n\n simple = (\n \n\n \n );\n }\n\n const segmentToSection = (segment: StoriesSegment, unreadAsClose?: boolean): DashedCircleSection => {\n if(segment.type === 'read') {\n return {\n color: props.colors?.read || customProperties.getProperty('avatar-color-story-read'),\n length: segment.length,\n lineWidth: dimensions.strokeWidth / 2\n };\n }\n\n if(segment.type === 'close' || unreadAsClose) {\n return {\n color: closeGradient ??= createCloseGradient(context, canvas.width, dpr),\n length: segment.length,\n lineWidth: dimensions.strokeWidth\n };\n } else {\n return {\n color: unreadGradient ??= createUnreadGradient(context, canvas.width, dpr),\n length: segment.length,\n lineWidth: dimensions.strokeWidth\n };\n }\n };\n\n const dashedCircle = new DashedCircle();\n const {canvas, context, dpr} = dashedCircle;\n dashedCircle.prepare({\n radius: dimensions.size / 2,\n gap: 4 * dimensions.multiplier,\n width: dimensions.totalSvgSize,\n height: dimensions.totalSvgSize\n });\n\n let unreadGradient: CanvasGradient, closeGradient: CanvasGradient;\n canvas.style.setProperty('--offset', `${(dimensions.totalSvgSize - dimensions.size) / -2}px`);\n canvas.classList.add('avatar-stories-svg');\n\n const render = () => {\n const segments = storiesSegments();\n const firstCloseSegment = segments.find((segment) => segment.type === 'close');\n let sections = segments.map((segment) => segmentToSection(segment, !!firstCloseSegment));\n const totalLength = sections.reduce((sum, section) => sum + section.length, 0);\n if(totalLength > 30) {\n sections = sections.map((section) => ({\n ...section,\n length: Math.floor(section.length / totalLength * 30)\n })).filter((section) => section.length > 0);\n }\n\n dashedCircle.render(sections);\n };\n\n const isNightTheme = useIsNightTheme();\n createEffect(on(\n [isNightTheme, storiesSegments],\n () => {\n unreadGradient = closeGradient = undefined;\n render();\n }\n ));\n\n return simple ? (\n <>\n {canvas}\n {simple}\n \n ) : canvas;\n });\n\n return {setStoriesSegments, storyDimensions, storiesCircle};\n}\n\nexport const AvatarNew = (props: {\n peerId?: PeerId,\n threadId?: number,\n isDialog?: boolean,\n isBig?: boolean,\n isSubscribed?: boolean,\n peerTitle?: string,\n lazyLoadQueue?: LazyLoadQueue | false,\n wrapOptions?: WrapSomethingOptions,\n withStories?: boolean,\n storyId?: number,\n useCache?: boolean,\n size: number | 'full',\n props?: JSX.HTMLAttributes,\n storyColors?: Parameters[0]['colors'],\n peer?: Chat.channel | Chat.chat | User.user,\n isStoryFolded?: Accessor,\n processImageOnLoad?: (image: HTMLImageElement) => void,\n meAsNotes?: boolean,\n onStoriesStatus?: (has: boolean) => void\n}) => {\n const [ready, setReady] = createSignal(false);\n const [icon, setIcon] = createSignal();\n const [media, setMedia] = createSignal();\n const [thumb, setThumb] = createSignal();\n const [abbreviature, setAbbreviature] = createSignal();\n const [color, setColor] = createSignal();\n const [isForum, setIsForum] = createSignal(false);\n const [isTopic, setIsTopic] = createSignal(false);\n const [isSubscribed, setIsSubscribed] = createSignal(false);\n const {setStoriesSegments, storyDimensions, storiesCircle} = StoriesSegments({\n size: props.size as number,\n colors: props.storyColors,\n isStoryFolded: props.isStoryFolded\n });\n\n const readyPromise = deferredPromise();\n const readyThumbPromise = deferredPromise();\n const myId = rootScope.myId;\n const managers = rootScope.managers;\n const middlewareHelper = props.wrapOptions?.middleware ? props.wrapOptions.middleware.create() : getMiddleware();\n let addedToQueue = false, lastRenderPromise: ReturnType;\n\n onCleanup(() => {\n lastRenderPromise = undefined;\n middlewareHelper.destroy();\n readyPromise.resolve();\n cleanLastKey();\n\n (props.lazyLoadQueue as LazyLoadQueue)?.delete({div: node});\n });\n\n // const owner = getOwner();\n\n const _setMedia = (media?: JSX.Element) => {\n setMedia(media);\n setReady(true);\n readyPromise.resolve();\n readyThumbPromise.resolve();\n };\n\n const _setThumb = (thumb?: JSX.Element) => {\n setThumb(thumb);\n setReady(true);\n readyThumbPromise.resolve();\n };\n\n const getKey = () => getAvatarQueueKey(props.peerId, props.threadId);\n const cleanLastKey = () => {\n if(!lastKey) {\n return;\n }\n\n const set = believeMe.get(lastKey);\n if(set) {\n set.delete(this);\n if(!set.size) {\n believeMe.delete(lastKey);\n }\n }\n\n const avatarsSet = avatarsMap.get(lastKey);\n if(!avatarsSet?.delete(ret)) {\n return;\n }\n\n if(!avatarsSet.size) {\n avatarsMap.delete(lastKey);\n }\n };\n\n const putAvatar = async(options: {\n photo: UserProfilePhoto.userProfilePhoto | ChatPhoto.chatPhoto,\n size: PeerPhotoSize,\n onlyThumb?: boolean\n }) => {\n const middleware = middlewareHelper.get();\n const {peerId, useCache} = props;\n const {photo, size} = options;\n const result = apiManagerProxy.loadAvatar(peerId, photo, size);\n const loadPromise = result;\n const cached = !(result instanceof Promise);\n\n const animate = !cached && liteMode.isAvailable('animations');\n let image: HTMLImageElement;\n const element = image = document.createElement('img');\n element.className = classNames('avatar-photo', animate && 'fade-in');\n\n let renderThumbPromise: Promise;\n let callback: () => void;\n let thumbImage: HTMLImageElement, thumbElement: JSX.Element;\n if(cached) {\n callback = () => {\n if(!middleware()) {\n return;\n }\n\n _setMedia(element);\n };\n } else {\n if(size === 'photo_big') { // let's load small photo first\n const res = await putAvatar({photo, size: 'photo_small'});\n if(!middleware()) {\n return;\n }\n\n renderThumbPromise = res.loadThumbPromise || res.loadPromise;\n thumbImage = res.thumbImage;\n } else if(photo.stripped_thumb) {\n thumbElement = thumbImage = document.createElement('img');\n thumbImage.className = 'avatar-photo avatar-photo-thumbnail';\n const url = getPreviewURLFromBytes(photo.stripped_thumb);\n renderThumbPromise = renderImageFromUrlPromise(\n thumbImage,\n url,\n props.useCache,\n props.processImageOnLoad\n ).then(() => {\n if(media() || !middleware()) {\n return;\n }\n\n _setThumb(thumbElement);\n });\n }\n\n callback = () => {\n if(!middleware()) {\n return;\n }\n\n _setMedia(element);\n if(animate) {\n setTimeout(() => {\n image.classList.remove('fade-in');\n setThumb();\n }, animate ? FADE_IN_DURATION : 0);\n } else {\n setThumb();\n }\n };\n }\n\n const renderPromise = callbackify(loadPromise, (url) => {\n const result = renderImageFromUrl(image, url, undefined, useCache, props.processImageOnLoad);\n callbackify(result, callback);\n return result instanceof Promise ? result : Promise.resolve(result);\n });\n\n return {\n cached,\n loadPromise: renderPromise,\n loadThumbPromise: cached ? renderPromise : renderThumbPromise || Promise.resolve(),\n thumbImage,\n thumbElement,\n image,\n element\n };\n };\n\n const set = ({\n abbreviature,\n icon,\n color,\n isForum,\n isTopic,\n isSubscribed,\n storiesSegments\n }: {\n abbreviature?: JSX.Element,\n icon?: Icon,\n color?: string,\n isForum?: boolean,\n isTopic?: boolean,\n isSubscribed?: boolean,\n storiesSegments?: StoriesSegments\n }) => {\n setThumb();\n setMedia();\n setIcon(icon);\n setAbbreviature(abbreviature);\n setColor(color);\n setIsForum(isForum);\n setIsTopic(isTopic);\n setIsSubscribed(isSubscribed);\n setStoriesSegments(storiesSegments);\n };\n\n const updateStoriesSegments = async() => {\n if(!props.withStories || (props.peerId === rootScope.myId && props.isDialog)) {\n return;\n }\n\n const segments = await (await getStoriesSegments(props.peerId, props.storyId)).result;\n if(lastRenderPromise) {\n const result = await lastRenderPromise;\n await result?.loadThumbPromise;\n }\n setStoriesSegments(segments);\n };\n\n const _render = async(onlyThumb?: boolean) => {\n const middleware = middlewareHelper.get();\n const {isDialog, withStories, storyId, isBig, peerTitle: title, threadId, wrapOptions} = props;\n\n let {peerId} = props;\n if(title !== undefined) {\n peerId = NULL_PEER_ID;\n }\n\n if(peerId === myId && isDialog) {\n set({\n icon: props.meAsNotes ? 'mynotes' : 'saved',\n isForum: !props.meAsNotes && appState.settings.savedAsForum\n });\n\n !props.meAsNotes && createRoot((dispose) => {\n createEffect(\n on(\n () => appState.settings.savedAsForum,\n setIsForum,\n {defer: true}\n )\n );\n\n middleware.onDestroy(dispose);\n });\n return;\n }\n\n const peer = props.peer ?? apiManagerProxy.getPeer(peerId);\n if(title) {\n const color = getPeerAvatarColorByPeer(peer);\n const abbr = wrapAbbreviation(title);\n set({\n abbreviature: documentFragmentToNodes(abbr),\n color\n });\n return;\n }\n\n if(threadId) {\n const topic = await managers.dialogsStorage.getForumTopic(peerId, threadId);\n set({isTopic: true});\n\n return wrapTopicIcon({\n ...wrapOptions,\n middleware,\n topic,\n lazyLoadQueue: false\n }).then((icon) => {\n _setMedia(icon);\n return undefined as ReturnType;\n });\n }\n\n if(!middleware()) {\n return;\n }\n\n if(peerId !== NULL_PEER_ID && peerId.isUser() && (peer as User.user)?.pFlags?.deleted) {\n set({color: 'archive', icon: 'deletedaccount'});\n return;\n }\n\n const _isForum = !!(peer as Chat.channel)?.pFlags?.forum;\n const _isSubscribed = props.isSubscribed ?? !!(peer as Chat.channel)?.subscription_until_date;\n const storiesSegmentsResult = withStories && ((peer as User.user | Chat.channel)?.stories_max_id || storyId) && await getStoriesSegments(peerId, storyId);\n const storiesSegments = storiesSegmentsResult?.cached ? await storiesSegmentsResult.result : undefined;\n if(!middleware()) {\n return;\n }\n\n const size: PeerPhotoSize = isBig ? 'photo_big' : 'photo_small';\n const photo = getPeerPhoto(peer);\n const avatarAvailable = !!photo;\n const avatarRendered = avatarAvailable && !!media(); // if avatar isn't available, let's reset it\n const isAvatarCached = avatarAvailable && apiManagerProxy.isAvatarCached(peerId, size);\n if(!middleware()) {\n return;\n }\n\n let isSet = false;\n if(!avatarRendered && !isAvatarCached) {\n let color: string;\n if(peerId && (peerId !== myId || !isDialog)) {\n color = getPeerAvatarColorByPeer(peer);\n }\n\n if(peerId === REPLIES_PEER_ID) {\n set({color, icon: 'reply_filled'});\n return;\n }\n\n if(peerId === HIDDEN_PEER_ID) {\n set({color: 'violet', icon: 'author_hidden'});\n return;\n }\n\n const abbr = /* title ? wrapAbbreviation(title) : */getPeerInitials(peer);\n set({\n abbreviature: documentFragmentToNodes(abbr),\n color,\n isForum: _isForum,\n isSubscribed: _isSubscribed,\n storiesSegments\n });\n isSet = true;\n // return Promise.resolve(true);\n }\n\n if(storiesSegmentsResult && !storiesSegmentsResult.cached) {\n updateStoriesSegments();\n }\n\n if(avatarAvailable/* && false */) {\n const promise = putAvatar({photo, size, onlyThumb});\n if(isSet) {\n return promise;\n }\n\n const changeSegments = !!storiesSegments;\n const changeForum = _isForum !== isForum();\n const changeIsSubcribed = _isSubscribed !== isSubscribed();\n promise.then(({loadThumbPromise}) => loadThumbPromise).then(() => {\n if(!middleware()) {\n return;\n }\n\n if(changeSegments) {\n setStoriesSegments(storiesSegments);\n }\n\n if(changeForum) {\n setIsForum(_isForum);\n }\n\n if(changeIsSubcribed) {\n setIsSubscribed(_isSubscribed);\n }\n\n if(TEST_SWAPPING && peerId === TEST_SWAPPING) {\n let i = true;\n setInterval(() => {\n i = !i;\n setStoriesSegments(i ? undefined : storiesSegments);\n console.log(media());\n }, 3e3);\n }\n });\n // recordPromise(promise, 'putAvatar-' + peerId);\n return promise;\n }\n };\n\n const processResult = (result: Awaited>) => {\n if(!result && !isTopic()) {\n _setMedia();\n }\n\n lastRenderPromise = undefined;\n return result;\n };\n\n let lastKey: string;\n const render = async(_props?: Modify) => {\n const key = getKey();\n if(key !== lastKey) {\n cleanLastKey();\n lastKey = key;\n\n let set = avatarsMap.get(key);\n if(!set) {\n avatarsMap.set(key, set = new Set());\n }\n set.add(ret);\n }\n\n if(_props?.peerId !== undefined && props.peerId !== _props.peerId) {\n node.dataset.peerId = '' + _props.peerId;\n }\n\n if(_props) Object.assign(props, _props);\n middlewareHelper.clean();\n const middleware = middlewareHelper.get();\n\n if(props.lazyLoadQueue) {\n if(!seen.has(props.peerId)) {\n if(addedToQueue) return;\n addedToQueue = true;\n\n const key = getKey();\n let set = believeMe.get(key);\n if(!set) {\n believeMe.set(key, set = new Set());\n }\n\n set.add(ret);\n\n props.lazyLoadQueue.push({\n div: node,\n load: () => {\n seen.add(props.peerId);\n return render();\n }\n });\n\n const promise = lastRenderPromise = _render(true);\n const result = await promise;\n if(!middleware()) {\n return;\n }\n\n return processResult(result);\n } else if(addedToQueue) {\n props.lazyLoadQueue.delete({div: node});\n }\n }\n\n seen.add(props.peerId);\n\n const promise = lastRenderPromise = _render();\n\n const set = believeMe.get(key);\n if(set) {\n set.delete(ret);\n const arr = Array.from(set);\n believeMe.delete(key);\n\n for(let i = 0, length = arr.length; i < length; ++i) {\n arr[i].render();\n }\n }\n\n const result = await promise;\n if(!middleware()) {\n return;\n }\n\n if(addedToQueue) {\n addedToQueue = false;\n }\n\n return processResult(result);\n };\n\n if(props.onStoriesStatus) {\n createEffect(() => {\n props.onStoriesStatus(!!storyDimensions());\n });\n }\n\n const innerClassList = (): JSX.CustomAttributes['classList'] => {\n return {\n 'is-forum': isForum(),\n 'is-topic': isTopic(),\n 'avatar-relative': !!thumb() || isSubscribed()\n };\n };\n\n const classList = (): JSX.CustomAttributes['classList'] => {\n return {\n ...(!storiesCircle() && innerClassList()),\n 'has-stories': !!storyDimensions()\n };\n };\n\n const style = (): JSX.HTMLAttributes['style'] => {\n const dimensions = storyDimensions();\n return {\n 'padding': dimensions ? (dimensions.size - dimensions.willBeSize) / 2 + 'px' : undefined,\n '--size': isTopic() && props.wrapOptions.customEmojiSize.width ? props.wrapOptions.customEmojiSize.width + 'px' : undefined\n };\n };\n\n const inner = (\n <>\n {icon() && Icon(icon(), 'avatar-icon', 'avatar-icon-' + icon())}\n {thumb()}\n {[media(), abbreviature()].find(Boolean)}\n {isSubscribed() && currencyStarIcon({class: 'avatar-star', stroke: true})}\n \n );\n\n // ! if I remove first inner div, then it will be broken\n const wtf = (\n \n
\n {storiesCircle()}\n {props.isStoryFolded !== undefined &&
}\n \n {inner}\n
\n \n
\n );\n\n let node: HTMLDivElement;\n const element = (\n \n {wtf}\n \n );\n\n const ret = {\n element,\n ready,\n readyPromise,\n readyThumbPromise,\n node,\n render,\n setIcon,\n setStoriesSegments,\n setIsSubscribed,\n updateStoriesSegments,\n set,\n color\n };\n\n if(\n props.peerId !== undefined ||\n props.peerTitle !== undefined ||\n props.peer !== undefined\n ) {\n render();\n }\n\n // let resolved = false;\n // readyThumbPromise.finally(() => {\n // resolved = true;\n // });\n // setTimeout(() => {\n // if(!resolved) {\n // console.error('wtf');\n // readyThumbPromise.resolve();\n // }\n // }, 1e3);\n\n return ret;\n};\n\nexport function avatarNew(props: {\n middleware: Middleware\n} & Parameters[0]) {\n return createRoot((dispose) => {\n props.middleware.onDestroy(dispose);\n (props.wrapOptions ??= {}).middleware = props.middleware;\n return AvatarNew(props);\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement, {addCancelButton, PopupButton, PopupOptions} from '.';\nimport {i18n, LangPackKey} from '../../lib/langPack';\nimport CheckboxField, {CheckboxFieldOptions} from '../checkboxField';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport {avatarNew} from '../avatarNew';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport rootScope from '../../lib/rootScope';\nimport InputField from '../inputField';\n\nexport type PopupPeerButton = Omit & Partial<{callback: PopupPeerButtonCallback, onlyWithCheckbox: PopupPeerCheckboxOptions}>;\nexport type PopupPeerButtonCallbackCheckboxes = Set;\nexport type PopupPeerButtonCallback = (e: MouseEvent, checkboxes?: PopupPeerButtonCallbackCheckboxes) => void;\nexport type PopupPeerCheckboxOptions = CheckboxFieldOptions & {checkboxField?: CheckboxField};\n\nexport type PopupPeerOptions = Omit & Partial<{\n peerId: PeerId,\n threadId: number,\n title: string | HTMLElement | DocumentFragment,\n titleLangKey: LangPackKey,\n titleLangArgs: any[],\n noTitle: boolean,\n description: Parameters[1] | true,\n descriptionRaw: string,\n descriptionLangKey: LangPackKey,\n descriptionLangArgs: any[],\n buttons: Array,\n checkboxes: Array,\n inputField: InputField\n}>;\nexport default class PopupPeer extends PopupElement {\n protected description: HTMLParagraphElement;\n\n constructor(private className: string, options: PopupPeerOptions = {}) {\n super('popup-peer' + (className ? ' ' + className : ''), {\n overlayClosable: true,\n ...options,\n title: true,\n buttons: options.buttons && addCancelButton(options.buttons)\n });\n\n if(options.peerId) {\n const isSavedDialog = !!(options.peerId === rootScope.myId && options.threadId);\n const {node} = avatarNew({\n middleware: this.middlewareHelper.get(),\n size: 32,\n isDialog: true,\n peerId: isSavedDialog ? options.threadId : options.peerId,\n threadId: isSavedDialog ? undefined : options.threadId,\n meAsNotes: isSavedDialog\n });\n this.header.prepend(node);\n }\n\n if(!options.noTitle) {\n if(options.titleLangKey || !options.title) {\n this.title.append(i18n(options.titleLangKey || 'AppName', options.titleLangArgs));\n } else if(options.title instanceof HTMLElement || options.title instanceof DocumentFragment) {\n this.title.append(options.title);\n } else this.title.innerText = options.title || '';\n }\n\n const fragment = document.createDocumentFragment();\n\n if(options.descriptionLangKey || options.description || options.descriptionRaw) {\n const p = this.description = document.createElement('p');\n p.classList.add('popup-description');\n if(options.descriptionLangKey) p.append(i18n(options.descriptionLangKey, options.descriptionLangArgs));\n else if(options.description && options.description !== true) setInnerHTML(p, options.description);\n else if(options.descriptionRaw) p.append(wrapEmojiText(options.descriptionRaw));\n\n fragment.append(p);\n }\n\n if(options.inputField) {\n fragment.append(options.inputField.container);\n }\n\n if(options.checkboxes) {\n this.container.classList.add('have-checkbox');\n\n options.checkboxes.forEach((o) => {\n o.withRipple = true;\n const checkboxField = new CheckboxField(o);\n o.checkboxField = checkboxField;\n fragment.append(checkboxField.label);\n });\n\n options.buttons.forEach((button) => {\n if(button.callback) {\n const original = button.callback;\n button.callback = (e) => {\n const c: Set = new Set();\n options.checkboxes.forEach((o) => {\n if(o.checkboxField.checked) {\n c.add(o.text);\n }\n });\n original(e, c);\n };\n }\n\n const checkbox = button.onlyWithCheckbox;\n if(checkbox) {\n const onChange = () => {\n toggleDisability([button.element], !checkbox.checkboxField.checked);\n };\n this.listenerSetter.add(checkbox.checkboxField.input)('change', onChange);\n onChange();\n }\n });\n }\n\n if(options.inputField) {\n const button = options.buttons.find((button) => !button.isCancel);\n this.listenerSetter.add(options.inputField.input)('input', () => {\n toggleDisability([button.element], !options.inputField.isValid());\n });\n }\n\n this.header.after(fragment);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport type {PeerType} from '../../lib/appManagers/appPeersManager';\nimport {FormatterArguments, LangPackKey} from '../../lib/langPack';\nimport rootScope from '../../lib/rootScope';\nimport wrapPeerTitle from '../wrappers/peerTitle';\nimport PopupPeer, {PopupPeerButtonCallbackCheckboxes, PopupPeerOptions} from './peer';\n\nexport default class PopupDeleteDialog {\n constructor(\n private peerId: PeerId,\n // actionType: 'leave' | 'delete',\n private peerType?: PeerType,\n private onSelect?: (promise: Promise) => void,\n private threadId?: number\n ) {\n this.construct();\n }\n\n private async construct() {\n let {peerId, peerType, onSelect, threadId} = this;\n\n const isSavedDialog = await rootScope.managers.appPeersManager.isSavedDialog(peerId, threadId);\n // if(isSavedDialog) {\n // peerId = threadId;\n // }\n\n const peerTitleElement = await wrapPeerTitle({\n peerId: isSavedDialog ? threadId : peerId,\n threadId: isSavedDialog ? undefined : threadId,\n meAsNotes: isSavedDialog\n });\n\n const managers = PopupElement.MANAGERS;\n if(peerType === undefined) {\n peerType = await managers.appPeersManager.getDialogType(peerId, threadId);\n }\n\n /* const callbackFlush = (checked: PopupPeerButtonCallbackCheckboxes) => {\n const promise = appMessagesManager.flushHistory(peerId, checkboxes ? !checked[checkboxes[0].text] : undefined);\n onSelect && onSelect(promise);\n }; */\n\n const callbackLeave = (e: MouseEvent, checked: PopupPeerButtonCallbackCheckboxes, flush = checkboxes && !!checked.size) => {\n let promise = managers.appChatsManager.leave(peerId.toChatId());\n\n if(flush) {\n promise = promise.then(() => {\n return managers.appMessagesManager.flushHistory(peerId);\n }) as any;\n }\n\n onSelect?.(promise);\n };\n\n const callbackDelete = (e: MouseEvent, checked: PopupPeerButtonCallbackCheckboxes) => {\n let promise: Promise;\n\n if(isSavedDialog) {\n promise = managers.appMessagesManager.flushHistory(peerId, false, true, threadId);\n } else if(threadId) {\n promise = managers.appMessagesManager.flushHistory(peerId, false, true, threadId);\n } else if(peerId.isUser()) {\n promise = managers.appMessagesManager.flushHistory(peerId, false, checkboxes ? !!checked.size : undefined);\n } else {\n if(checked.size) {\n promise = managers.appChatsManager.delete(peerId.toChatId());\n } else {\n return callbackLeave(e, checked);\n }\n }\n\n onSelect?.(promise);\n };\n\n let title: LangPackKey,\n titleArgs: FormatterArguments,\n description: LangPackKey,\n descriptionArgs: FormatterArguments,\n buttons: PopupPeerOptions['buttons'],\n checkboxes: PopupPeerOptions['checkboxes'];\n switch(peerType) {\n case 'channel': {\n if(/* actionType === 'delete' && */await managers.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat')) {\n title = 'ChannelDeleteMenu';\n description = 'AreYouSureDeleteAndExitChannel';\n buttons = [{\n langKey: 'ChannelDeleteMenu',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteChannelForAll'\n }];\n } else {\n title = 'LeaveChannelMenu';\n description = 'ChannelLeaveAlertWithName';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'LeaveChannel',\n isDanger: true,\n callback: callbackLeave\n }];\n }\n\n break;\n }\n\n /* case 'megagroup': {\n title = 'Leave Group?';\n description = `Are you sure you want to leave this group?`;\n buttons = [{\n text: 'LEAVE ' + peerTitleElement,\n isDanger: true,\n callback: callbackLeave\n }];\n\n break;\n } */\n\n case 'chat': {\n title = 'DeleteChatUser';\n description = 'AreYouSureDeleteThisChatWithUser';\n descriptionArgs = [peerTitleElement];\n\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteMessagesOptionAlso',\n textArgs: [\n await wrapPeerTitle({peerId})\n ]\n }];\n\n break;\n }\n\n case 'saved': {\n title = 'DeleteChatUser';\n description = 'AreYouSureDeleteThisChatSavedMessages';\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: callbackDelete\n }];\n\n break;\n }\n\n case 'savedDialog': {\n title = 'DeleteChatUser';\n description = 'DeleteSavedDialogDescription';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: callbackDelete\n }];\n\n break;\n }\n\n case 'megagroup':\n case 'group': {\n if(threadId) {\n title = 'DeleteTopics';\n titleArgs = [1];\n description = 'DeleteSelectedTopic';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'Delete',\n isDanger: true,\n callback: callbackDelete\n }];\n } else if(/* actionType === 'delete' && */await managers.appChatsManager.hasRights(peerId.toChatId(), 'delete_chat')) {\n title = 'DeleteMegaMenu';\n description = 'AreYouSureDeleteAndExit';\n buttons = [{\n langKey: 'DeleteMegaMenu',\n isDanger: true,\n callback: callbackDelete\n }];\n\n checkboxes = [{\n text: 'DeleteChat.DeleteGroupForAll'\n }];\n } else {\n title = 'LeaveMegaMenu';\n description = 'AreYouSureDeleteAndExitName';\n descriptionArgs = [peerTitleElement];\n buttons = [{\n langKey: 'DeleteChatUser',\n isDanger: true,\n callback: (e, checkboxes) => callbackLeave(e, checkboxes, true)\n }];\n }\n\n break;\n }\n }\n\n PopupElement.createPopup(PopupPeer, 'popup-delete-chat', {\n peerId,\n threadId,\n titleLangKey: title,\n titleLangArgs: titleArgs,\n descriptionLangKey: description,\n descriptionLangArgs: descriptionArgs,\n buttons,\n checkboxes\n }).show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appNavigationController, {NavigationItem} from '../components/appNavigationController';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport {IS_MOBILE_SAFARI} from '../environment/userAgent';\nimport cancelEvent from './dom/cancelEvent';\nimport {CLICK_EVENT_NAME, hasMouseMovedSinceDown} from './dom/clickEvent';\nimport findUpAsChild from './dom/findUpAsChild';\nimport EventListenerBase from './eventListenerBase';\n\nexport default class OverlayClickHandler extends EventListenerBase<{\n toggle: (open: boolean) => void\n}> {\n protected element: HTMLElement;\n protected overlay: HTMLElement;\n protected listenerOptions: AddEventListenerOptions;\n\n constructor(\n protected navigationType?: NavigationItem['type'],\n protected withOverlay?: boolean\n ) {\n super(false);\n this.listenerOptions = withOverlay ? {} : {capture: true};\n }\n\n protected onClick = (e: MouseEvent | TouchEvent) => {\n if(hasMouseMovedSinceDown(e)) {\n return;\n }\n\n if(this.element) {\n const isRoot = this.element === document.body;\n if(!isRoot && findUpAsChild(e.target as HTMLElement, this.element)) {\n return;\n }\n }\n\n if(this.listenerOptions?.capture) {\n cancelEvent(e);\n }\n\n this.close();\n };\n\n public close() {\n if(this.element) {\n this.overlay?.remove();\n this.element = undefined;\n this.dispatchEvent('toggle', false);\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n // window.removeEventListener('keydown', onKeyDown, {capture: true});\n window.removeEventListener('contextmenu', this.onClick, this.listenerOptions);\n }\n\n document.removeEventListener(CLICK_EVENT_NAME, this.onClick, this.listenerOptions);\n\n if(!IS_MOBILE_SAFARI && this.navigationType) {\n appNavigationController.removeByType(this.navigationType);\n }\n }\n\n public open(element = document.body) {\n this.close();\n\n if(!IS_MOBILE_SAFARI && this.navigationType) {\n appNavigationController.pushItem({\n type: this.navigationType,\n onPop: (canAnimate) => {\n this.close();\n }\n });\n }\n\n this.element = element;\n\n if(!this.overlay && this.withOverlay) {\n this.overlay = document.createElement('div');\n this.overlay.classList.add('btn-menu-overlay');\n\n // ! because this event must be canceled, and can't cancel on menu click (below)\n this.overlay.addEventListener(CLICK_EVENT_NAME, (e) => {\n cancelEvent(e);\n this.onClick(e);\n });\n }\n\n const isRoot = this.element === document.body;\n if(this.overlay) {\n if(isRoot) {\n this.element.append(this.overlay);\n } else {\n this.element.parentElement.insertBefore(this.overlay, this.element);\n }\n }\n\n // document.body.classList.add('disable-hover');\n\n if(!IS_TOUCH_SUPPORTED) {\n // window.addEventListener('keydown', onKeyDown, {capture: true});\n window.addEventListener('contextmenu', this.onClick, {...this.listenerOptions, once: true});\n }\n\n /* // ! because this event must be canceled, and can't cancel on menu click (below)\n overlay.addEventListener(CLICK_EVENT_NAME, (e) => {\n cancelEvent(e);\n onClick(e);\n }); */\n\n // ! safari iOS doesn't handle window click event on overlay, idk why\n document.addEventListener(CLICK_EVENT_NAME, this.onClick, this.listenerOptions);\n\n this.dispatchEvent('toggle', true);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport replaceContent from '../helpers/dom/replaceContent';\nimport OverlayClickHandler from '../helpers/overlayClickHandler';\nimport {FormatterArguments, i18n, LangPackKey} from '../lib/langPack';\n\nconst toastsContainer = document.createElement('div');\ntoastsContainer.classList.add('toasts-container');\n\nconst toastEl = document.createElement('div');\ntoastEl.classList.add('toast');\nlet timeout: number;\n\nconst x = new OverlayClickHandler('toast');\nx.addEventListener('toggle', (open) => {\n if(!open) {\n hideToast();\n }\n});\n\nexport function hideToast() {\n x.close();\n\n toastEl.classList.remove('is-visible');\n timeout && clearTimeout(+timeout);\n\n timeout = window.setTimeout(() => {\n toastEl.remove();\n timeout = undefined;\n }, 200);\n}\n\nexport function toast(content: string | Node, onClose?: () => void) {\n x.close();\n\n replaceContent(toastEl, content);\n\n if(!toastEl.parentElement) {\n if(!toastsContainer.parentNode) {\n document.body.append(toastsContainer);\n }\n\n toastsContainer.append(toastEl);\n void toastEl.offsetLeft; // reflow\n }\n\n toastEl.classList.add('is-visible');\n\n timeout && clearTimeout(+timeout);\n x.open(toastEl);\n\n timeout = window.setTimeout(hideToast, 3000);\n\n if(onClose) {\n x.addEventListener('toggle', onClose, {once: true});\n }\n}\n\nexport function toastNew(options: Partial<{\n langPackKey: LangPackKey,\n langPackArguments: FormatterArguments,\n onClose: () => void\n}>) {\n toast(i18n(options.langPackKey, options.langPackArguments), options.onClose);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport simulateEvent from '../helpers/dom/dispatchEvent';\nimport getDeepProperty from '../helpers/object/getDeepProperty';\nimport {LangPackKey, _i18n} from '../lib/langPack';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport rootScope from '../lib/rootScope';\nimport Icon from './icon';\n\nexport default class RadioField {\n public input: HTMLInputElement;\n public label: HTMLLabelElement;\n public main: HTMLElement;\n public lockIcon: HTMLElement;\n\n constructor(options: {\n text?: string,\n textElement?: HTMLElement | DocumentFragment,\n langKey?: LangPackKey,\n name: string,\n value?: string,\n stateKey?: string,\n alignRight?: boolean\n }) {\n const label = this.label = document.createElement('label');\n label.classList.add('radio-field');\n\n if(options.alignRight) {\n label.classList.add('radio-field-right');\n }\n\n const input = this.input = document.createElement('input');\n input.type = 'radio';\n /* input.id = */input.name = 'input-radio-' + options.name;\n\n if(options.value) {\n input.value = options.value;\n\n if(options.stateKey) {\n apiManagerProxy.getState().then((state) => {\n input.checked = getDeepProperty(state, options.stateKey) === options.value;\n });\n\n input.addEventListener('change', () => {\n rootScope.managers.appStateManager.setByKey(options.stateKey, options.value);\n });\n }\n }\n\n const main = this.main = document.createElement('div');\n main.classList.add('radio-field-main');\n\n if(options.textElement) {\n main.append(options.textElement);\n } else if(options.text) {\n main.textContent = options.text;\n /* const caption = document.createElement('div');\n caption.classList.add('radio-field-main-caption');\n caption.innerHTML = text;\n\n if(subtitle) {\n label.classList.add('radio-field-with-subtitle');\n caption.insertAdjacentHTML('beforeend', `
${subtitle}
`);\n }\n\n main.append(caption); */\n } else if(options.langKey) {\n _i18n(main, options.langKey);\n }\n\n label.append(input, main);\n }\n\n get checked() {\n return this.input.checked;\n }\n\n set checked(checked: boolean) {\n this.setValueSilently(checked);\n simulateEvent(this.input, 'change');\n }\n\n get locked() {\n return !!this.lockIcon;\n }\n\n set locked(locked: boolean) {\n if(!locked) {\n this.lockIcon?.remove();\n this.lockIcon = undefined;\n this.main.classList.remove('is-locked');\n return;\n }\n\n if(this.lockIcon) {\n return;\n }\n\n this.main.prepend(this.lockIcon = Icon('premium_lock', 'radio-field-lock'));\n this.main.classList.add('is-locked');\n }\n\n public setValueSilently(checked: boolean) {\n this.input.checked = checked;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function RadioForm(radios: {container: HTMLElement, input: HTMLInputElement}[], onChange: (value: string, event: Event) => void) {\n const form = document.createElement('form');\n\n radios.forEach((r) => {\n const {container, input} = r;\n form.append(container);\n input.addEventListener('change', (e) => {\n if(input.checked) {\n onChange(input.value, e);\n }\n });\n });\n\n return form;\n}\n","export default function flatten(arr: T[][]): T[] {\n return arr.reduce((acc, val) => (acc.push(...val), acc), []);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ButtonMenuItemOptions} from '../components/buttonMenu';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport findUpClassName from './dom/findUpClassName';\nimport mediaSizes from './mediaSizes';\nimport OverlayClickHandler from './overlayClickHandler';\nimport overlayCounter from './overlayCounter';\n\nclass ContextMenuController extends OverlayClickHandler {\n constructor() {\n super('menu', true);\n\n mediaSizes.addEventListener('resize', () => {\n if(this.element) {\n this.close();\n }\n\n /* if(openedMenu && (openedMenu.style.top || openedMenu.style.left)) {\n const rect = openedMenu.getBoundingClientRect();\n const {innerWidth, innerHeight} = window;\n\n console.log(innerWidth, innerHeight, rect);\n } */\n });\n }\n\n public isOpened() {\n return !!this.element;\n }\n\n private onMouseMove = (e: MouseEvent) => {\n const element = findUpClassName(e.target, 'btn-menu-item');\n const inner = (element as any)?.inner as ButtonMenuItemOptions['inner'];\n\n const rect = this.element.getBoundingClientRect();\n const {clientX, clientY} = e;\n\n const diffX = clientX >= rect.right ? clientX - rect.right : rect.left - clientX;\n const diffY = clientY >= rect.bottom ? clientY - rect.bottom : rect.top - clientY;\n\n if(diffX >= 100 || diffY >= 100) {\n this.close();\n // openedMenu.parentElement.click();\n }\n // console.log('mousemove', diffX, diffY);\n };\n\n public close() {\n if(this.element) {\n this.element.classList.remove('active');\n this.element.parentElement.classList.remove('menu-open');\n\n if(this.element.classList.contains('night')) {\n const element = this.element;\n setTimeout(() => {\n if(element.classList.contains('active')) {\n return;\n }\n\n element.classList.remove('night');\n }, 400);\n }\n }\n\n super.close();\n\n if(!IS_TOUCH_SUPPORTED) {\n window.removeEventListener('mousemove', this.onMouseMove);\n }\n }\n\n public openBtnMenu(element: HTMLElement, onClose?: () => void) {\n if(overlayCounter.isDarkOverlayActive) {\n element.classList.add('night');\n }\n\n super.open(element);\n\n this.element.classList.add('active', 'was-open');\n this.element.parentElement.classList.add('menu-open');\n\n if(onClose) {\n this.addEventListener('toggle', onClose, {once: true});\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n window.addEventListener('mousemove', this.onMouseMove);\n }\n }\n}\n\nconst contextMenuController = new ContextMenuController();\nexport default contextMenuController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport customProperties from '../../helpers/dom/customProperties';\nimport textToSvgURL from '../../helpers/textToSvgURL';\nimport rootScope from '../../lib/rootScope';\nimport wrapPhoto from './photo';\n\nlet addedThemeListener = false;\nexport default function wrapAttachBotIcon({\n doc,\n element: iconElement,\n size,\n textColor,\n strokeWidth\n}: {\n doc: MyDocument,\n element: HTMLElement,\n size: number,\n textColor: () => string,\n strokeWidth: () => number\n}) {\n iconElement.classList.add('is-external');\n\n if(!addedThemeListener) {\n addedThemeListener = true;\n\n rootScope.addEventListener('theme_changed', () => {\n const elements = document.querySelectorAll('.is-external');\n elements.forEach((element) => {\n const set = (element as any).set;\n set?.(true);\n });\n });\n }\n\n const set = async(manual?: boolean) => {\n const svg: SVGSVGElement = (iconElement as any).svg;\n const color = customProperties.getProperty(textColor());\n svg.querySelectorAll('path').forEach((path) => {\n path.setAttributeNS(null, 'fill', color);\n path.style.stroke = color;\n path.style.strokeWidth = strokeWidth() + 'px';\n });\n\n const url = await textToSvgURL(svg.outerHTML);\n if(!manual) {\n return url;\n }\n\n ((iconElement as any).image as HTMLImageElement).src = url;\n };\n\n const originalPromise = wrapPhoto({\n container: iconElement,\n photo: doc,\n boxWidth: size,\n boxHeight: size,\n withoutPreloader: true,\n noFadeIn: true,\n noBlur: true,\n processUrl: async(url) => {\n const text = await (await fetch(url)).text();\n const doc = new DOMParser().parseFromString(text, 'image/svg+xml');\n const svg = doc.firstElementChild as HTMLElement;\n (iconElement as any).svg = svg;\n (iconElement as any).set = set;\n return set();\n }\n });\n\n return originalPromise.then(async(ret) => {\n iconElement.style.width = iconElement.style.height = '';\n (iconElement as any).image = ret.images.full;\n await ret.loadPromises.thumb;\n return originalPromise;\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport flatten from '../helpers/array/flatten';\nimport contextMenuController from '../helpers/contextMenuController';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {AttachClickOptions, attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {_i18n, FormatterArguments, i18n, LangPackKey} from '../lib/langPack';\nimport CheckboxField from './checkboxField';\nimport {Document} from '../layer';\nimport {IS_MOBILE} from '../environment/userAgent';\nimport ripple from './ripple';\nimport Icon from './icon';\nimport RadioForm from './radioForm';\nimport wrapAttachBotIcon from './wrappers/attachBotIcon';\n\ntype ButtonMenuItemInner = Omit[0], 'listenerSetter'>;\nexport type ButtonMenuItemOptions = {\n icon?: Icon,\n iconDoc?: Document.document,\n danger?: boolean,\n new?: boolean,\n className?: string,\n text?: LangPackKey,\n textArgs?: FormatterArguments,\n regularText?: Parameters[1],\n onClick: (e: MouseEvent | TouchEvent) => any,\n checkForClose?: () => boolean,\n element?: HTMLElement,\n textElement?: HTMLElement,\n options?: AttachClickOptions,\n checkboxField?: CheckboxField,\n noCheckboxClickListener?: boolean,\n keepOpen?: boolean,\n separator?: boolean | HTMLElement,\n separatorDown?: boolean,\n multiline?: boolean,\n secondary?: boolean,\n loadPromise?: Promise,\n waitForAnimation?: boolean,\n radioGroup?: string,\n inner?: (() => MaybePromise) | ButtonMenuItemInner\n /* , cancelEvent?: true */\n};\n\nexport type ButtonMenuItemOptionsVerifiable = ButtonMenuItemOptions & {\n verify?: () => boolean | Promise\n};\n\nfunction ButtonMenuItem(options: ButtonMenuItemOptions) {\n if(options.element) return [options.separator as HTMLElement, options.element].filter(Boolean);\n\n const {icon, iconDoc, className, text, onClick, checkboxField, noCheckboxClickListener} = options;\n const el = document.createElement('div');\n const iconSplitted = icon?.split(' ');\n el.className = 'btn-menu-item rp-overflow' +\n (iconSplitted?.length > 1 ? ' ' + iconSplitted.slice(1).join(' ') : '') +\n (className ? ' ' + className : '') +\n (options.danger ? ' danger' : '');\n\n if(IS_MOBILE) {\n ripple(el);\n }\n\n if(iconSplitted) {\n el.append(Icon(iconSplitted[0] as Icon, 'btn-menu-item-icon'));\n }\n\n let textElement = options.textElement;\n if(!textElement) {\n textElement = options.textElement = text ? i18n(text, options.textArgs) : document.createElement('span');\n if(options.regularText) {\n setInnerHTML(textElement, options.regularText);\n textElement.dir = '';\n }\n }\n\n if(iconDoc) {\n const iconElement = document.createElement('span');\n iconElement.classList.add('btn-menu-item-icon');\n el.append(iconElement);\n\n const isMobile = () => document.documentElement.classList.contains('is-mobile');\n\n options.loadPromise = wrapAttachBotIcon({\n doc: iconDoc,\n element: iconElement,\n size: 24,\n textColor: () => isMobile() ? 'secondary-text-color' : 'primary-text-color',\n strokeWidth: () => isMobile() ? .625 : .375\n });\n }\n\n textElement.classList.add('btn-menu-item-text');\n el.append(textElement);\n\n if(options.new) {\n const badge = document.createElement('span');\n badge.classList.add('btn-menu-item-badge');\n _i18n(badge, 'New');\n el.append(badge);\n }\n\n const keepOpen = !!checkboxField || !!options.keepOpen;\n\n // * cancel mobile keyboard close\n onClick && attachClickEvent(el, /* CLICK_EVENT_NAME !== 'click' || keepOpen ? */ /* async */(e) => {\n cancelEvent(e);\n\n const menu = findUpClassName(e.target, 'btn-menu');\n if(menu && !menu.classList.contains('active')) {\n return;\n }\n\n // let closed = false;\n // if(!keepOpen && !options.checkForClose) {\n // closed = true;\n // contextMenuController.close();\n // }\n\n // wait for closing animation\n // if(options.waitForAnimation && rootScope.settings.animationsEnabled && !options.checkForClose) {\n // await pause(125);\n // }\n\n onClick(e);\n if(options.checkForClose?.() === false) {\n return;\n }\n\n if(!keepOpen/* && !closed */) {\n contextMenuController.close();\n }\n\n if(checkboxField && !noCheckboxClickListener/* && result !== false */) {\n checkboxField.checked = checkboxField.input.type === 'radio' ? true : !checkboxField.checked;\n }\n }/* : onClick */, options.options);\n\n if(checkboxField) {\n el.append(checkboxField.label);\n }\n\n if(options.separator === true || options.separatorDown) {\n options.separator = document.createElement('hr');\n }\n\n if(options.secondary) {\n el.classList.add('is-secondary');\n options.multiline = true;\n }\n\n if(options.multiline) {\n el.classList.add('is-multiline');\n }\n\n if(options.inner) {\n el.append(Icon('next', 'btn-menu-item-icon', 'btn-menu-item-icon-right'));\n el.classList.add('has-inner');\n (el as any).inner = options.inner;\n }\n\n const ret: HTMLElement[] = [options.element = el];\n\n if(options.separator) {\n ret[options.separatorDown ? 'push' : 'unshift'](options.separator as HTMLElement);\n }\n\n return ret.filter(Boolean);\n}\n\nexport function ButtonMenuSync({listenerSetter, buttons, radioGroups}: {\n buttons: ButtonMenuItemOptions[],\n radioGroups?: {\n name: string,\n onChange: (value: string, e: Event) => any,\n checked: number // idx\n }[],\n listenerSetter?: ListenerSetter\n}) {\n const el: HTMLElement = document.createElement('div');\n el.classList.add('btn-menu');\n\n if(radioGroups) {\n buttons.forEach((b) => {\n if(!b.radioGroup) {\n return;\n }\n\n b.checkboxField ??= new CheckboxField();\n });\n }\n\n if(listenerSetter) {\n buttons.forEach((b) => {\n (b.options ??= {}).listenerSetter = listenerSetter;\n });\n }\n\n const items = buttons.map(ButtonMenuItem);\n el.append(...flatten(items));\n\n if(radioGroups) {\n radioGroups.forEach((group) => {\n const elements = buttons.filter((button) => button.radioGroup === group.name);\n\n const hr = document.createElement('hr');\n elements[0].element.replaceWith(hr);\n\n const container = RadioForm(elements.map((e, idx) => {\n const input = e.checkboxField.input;\n input.type = 'radio';\n input.name = group.name;\n input.value = '' + +(idx === group.checked);\n input.checked = idx === group.checked;\n return {\n container: e.element,\n input: e.checkboxField.input\n };\n }), group.onChange);\n\n hr.before(container);\n container.append(hr);\n });\n }\n\n return el;\n}\n\nexport default async function ButtonMenu(options: Parameters[0]) {\n const el = ButtonMenuSync(options);\n await Promise.all(options.buttons.map(({loadPromise}) => loadPromise));\n return el;\n}\n","type K = boolean;\nexport default async function filterAsync(arr: T[], callback: (item: T, idx: number, arr: T[]) => Promise | K) {\n const promises = arr.map(async(item, idx, arr) => {\n if(await callback(item, idx, arr)) {\n return item;\n }\n });\n\n return (await Promise.all(promises)).filter(Boolean);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport I18n from '../lib/langPack';\nimport mediaSizes from './mediaSizes';\n\nexport type MenuPositionPadding = {\n top?: number,\n right?: number,\n bottom?: number,\n left?: number\n};\n\nconst PADDING_TOP = 8;\nconst PADDING_BOTTOM = PADDING_TOP;\nconst PADDING_LEFT = 8;\nconst PADDING_RIGHT = PADDING_LEFT;\nexport default function positionMenu(e: MouseEvent | Touch | TouchEvent, elem: HTMLElement, side?: 'left' | 'right' | 'center', additionalPadding?: MenuPositionPadding) {\n if((e as TouchEvent).touches) {\n e = (e as TouchEvent).touches[0];\n }\n\n const {pageX, pageY} = e as Touch;\n // let {clientX, clientY} = e;\n\n // * side mean the OPEN side\n\n const getScrollWidthFromElement = (Array.from(elem.children) as HTMLElement[]).find((element) => element.classList.contains('btn-menu-items') || (element.classList.contains('btn-menu-item') && !element.classList.contains('hide'))) || elem;\n\n let {scrollWidth: menuWidth} = getScrollWidthFromElement;\n const {scrollHeight: menuHeight} = elem;\n // let {innerWidth: windowWidth, innerHeight: windowHeight} = window;\n const rect = document.body.getBoundingClientRect();\n const windowWidth = rect.width;\n const windowHeight = rect.height;\n\n menuWidth += getScrollWidthFromElement.offsetLeft * 2;\n\n let paddingTop = PADDING_TOP, paddingRight = PADDING_RIGHT, paddingBottom = PADDING_BOTTOM, paddingLeft = PADDING_LEFT;\n if(additionalPadding) {\n if(additionalPadding.top) paddingTop += additionalPadding.top;\n if(additionalPadding.right) paddingRight += additionalPadding.right;\n if(additionalPadding.bottom) paddingBottom += additionalPadding.bottom;\n if(additionalPadding.left) paddingLeft += additionalPadding.left;\n }\n\n if(I18n.isRTL) side = mediaSizes.isMobile ? 'left' : 'right';\n else side = mediaSizes.isMobile ? 'right' : 'left';\n let verticalSide: 'top' /* | 'bottom' */ | 'center' = 'top';\n\n const maxTop = windowHeight - menuHeight - paddingBottom;\n const maxLeft = windowWidth - menuWidth - paddingRight;\n const minTop = paddingTop;\n const minLeft = paddingLeft;\n\n const getSides = () => {\n return {\n x: {\n left: pageX,\n right: Math.min(maxLeft, pageX - menuWidth)\n },\n intermediateX: side === 'right' ? minLeft : maxLeft,\n // intermediateX: clientX < windowWidth / 2 ? PADDING_LEFT : windowWidth - menuWidth - PADDING_LEFT,\n y: {\n top: pageY,\n bottom: pageY - menuHeight\n },\n // intermediateY: verticalSide === 'top' ? paddingTop : windowHeight - menuHeight - paddingTop,\n // intermediateY: pageY < (windowHeight / 2) ? paddingTop : windowHeight - menuHeight - paddingBottom,\n intermediateY: maxTop\n };\n };\n\n const sides = getSides();\n\n const possibleSides = {\n x: {\n left: (sides.x.left + menuWidth + paddingRight) <= windowWidth,\n right: sides.x.right >= paddingLeft\n },\n y: {\n top: (sides.y.top + menuHeight + paddingBottom) <= windowHeight,\n bottom: (sides.y.bottom - paddingBottom) >= paddingBottom\n }\n };\n\n /* if(side === undefined) {\n if((clientX + menuWidth + PADDING_LEFT) > windowWidth) {\n side = 'right';\n }\n } */\n\n {\n /* const x = sides.x;\n\n const s = Object.keys(x) as (keyof typeof possibleSides.x)[];\n if(side) {\n s.findAndSplice((s) => s === side);\n s.unshift(side);\n }\n\n const possibleSide = s.find((s) => possibleSides.x[s]); */\n // let left: number;\n /* if(possibleSide) {\n left = x[possibleSide];\n side = possibleSide;\n } else {\n left = sides.intermediateX;\n side = undefined;\n } */\n const left = possibleSides.x[side] ? sides.x[side] : (side = 'center', sides.intermediateX);\n\n elem.style.left = left + 'px';\n }\n\n /* if((clientY + menuHeight + PADDING_TOP) > windowHeight) {\n elem.style.top = clamp(clientY - menuHeight, PADDING_TOP, windowHeight - menuHeight - PADDING_TOP) + 'px';\n // elem.style.top = (innerHeight - scrollHeight - PADDING_TOP) + 'px';\n verticalSide = 'bottom';\n } else {\n elem.style.top = Math.max(PADDING_TOP, clientY) + 'px';\n verticalSide = 'top';\n } */\n\n {\n const top = possibleSides.y[verticalSide] ? sides.y[verticalSide] : (verticalSide = 'center', sides.intermediateY);\n\n elem.style.top = top + 'px';\n }\n\n elem.className = elem.className.replace(/(top|center|bottom)-(left|center|right)/g, '');\n elem.classList.add(\n // (verticalSide === 'center' ? verticalSide : (verticalSide === 'bottom' ? 'top' : 'bottom')) +\n (verticalSide === 'center' ? verticalSide : 'bottom') +\n '-' +\n (side === 'center' ? side : ((I18n.isRTL ? side === 'right' : side === 'left') ? 'right' : 'left')));\n\n return {\n width: menuWidth,\n height: menuHeight\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport {IS_APPLE} from '../../environment/userAgent';\nimport contextMenuController from '../contextMenuController';\nimport ListenerSetter, {ListenerOptions} from '../listenerSetter';\nimport cancelEvent from './cancelEvent';\n\nlet _cancelContextMenuOpening = false, _cancelContextMenuOpeningTimeout = 0;\nexport function cancelContextMenuOpening() {\n if(_cancelContextMenuOpeningTimeout) {\n clearTimeout(_cancelContextMenuOpeningTimeout);\n }\n\n _cancelContextMenuOpeningTimeout = window.setTimeout(() => {\n _cancelContextMenuOpeningTimeout = 0;\n _cancelContextMenuOpening = false;\n }, .4e3);\n\n _cancelContextMenuOpening = true;\n}\n\nexport function attachContextMenuListener({\n element,\n callback,\n listenerSetter,\n listenerOptions\n}: {\n element: HTMLElement,\n callback: (e: TouchEvent | MouseEvent) => void,\n listenerSetter?: ListenerSetter,\n listenerOptions?: ListenerOptions\n}) {\n const add = listenerSetter ? listenerSetter.add(element) : element.addEventListener.bind(element);\n const remove = listenerSetter ? listenerSetter.removeManual.bind(listenerSetter, element) : element.removeEventListener.bind(element);\n\n // can't cancel further events coming after 'contextmenu' event\n if((IS_APPLE && IS_TOUCH_SUPPORTED) || listenerOptions) {\n let timeout: number;\n\n const options: EventListenerOptions = {\n ...(listenerOptions || {}),\n capture: true\n };\n\n const onCancel = () => {\n clearTimeout(timeout);\n // @ts-ignore\n remove('touchmove', onCancel, options);\n // @ts-ignore\n remove('touchend', onCancel, options);\n // @ts-ignore\n remove('touchcancel', onCancel, options);\n };\n\n add('touchstart', (e: TouchEvent) => {\n if(e.touches.length > 1) {\n onCancel();\n return;\n }\n\n add('touchmove', onCancel, options);\n add('touchend', onCancel, options);\n add('touchcancel', onCancel, options);\n\n timeout = window.setTimeout(() => {\n if(_cancelContextMenuOpening) {\n onCancel();\n return;\n }\n\n callback(e);\n onCancel();\n\n if(contextMenuController.isOpened()) {\n add('touchend', cancelEvent, {once: true}); // * fix instant closing\n }\n }, .4e3);\n }, listenerOptions);\n\n /* if(!isSafari) {\n add('contextmenu', (e: any) => {\n cancelEvent(e);\n }, {passive: false, capture: true});\n } */\n } else {\n add('contextmenu', IS_TOUCH_SUPPORTED ? (e: any) => {\n callback(e);\n\n if(contextMenuController.isOpened()) {\n add('touchend', cancelEvent, {once: true}); // * fix instant closing\n }\n } : callback, listenerOptions);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ButtonMenu, {ButtonMenuItemOptionsVerifiable} from '../../components/buttonMenu';\nimport filterAsync from '../array/filterAsync';\nimport callbackify from '../callbackify';\nimport contextMenuController from '../contextMenuController';\nimport ListenerSetter from '../listenerSetter';\nimport {getMiddleware, Middleware} from '../middleware';\nimport positionMenu from '../positionMenu';\nimport {attachContextMenuListener} from './attachContextMenuListener';\nimport {attachClickEvent} from './clickEvent';\n\nexport default function createContextMenu({\n buttons,\n findElement,\n listenTo,\n appendTo,\n filterButtons,\n onOpen,\n onClose,\n onCloseAfter,\n onOpenBefore,\n listenerSetter: attachListenerSetter,\n middleware,\n listenForClick\n}: {\n buttons: T[],\n findElement?: (e: MouseEvent | TouchEvent) => HTMLElement,\n listenTo: HTMLElement,\n appendTo?: HTMLElement,\n filterButtons?: (buttons: T[]) => Promise,\n onOpen?: (e: Event, target: HTMLElement) => any,\n onClose?: () => any,\n onCloseAfter?: () => any,\n onOpenBefore?: () => any,\n listenerSetter?: ListenerSetter,\n middleware?: Middleware,\n listenForClick?: boolean\n}) {\n appendTo ??= document.body;\n\n attachListenerSetter ??= new ListenerSetter();\n const listenerSetter = new ListenerSetter();\n const middlewareHelper = middleware ? middleware.create() : getMiddleware();\n let element: HTMLElement;\n\n const open = (e: MouseEvent | TouchEvent) => {\n const target = findElement ? findElement(e as any) : listenTo;\n if(!target) {\n return;\n }\n\n let _element = element;\n if(e instanceof MouseEvent || e.hasOwnProperty('preventDefault')) (e as any).preventDefault();\n if(_element && _element.classList.contains('active')) {\n return false;\n }\n if(e instanceof MouseEvent || e.hasOwnProperty('cancelBubble')) (e as any).cancelBubble = true;\n\n const r = async() => {\n await onOpen?.(e, target);\n\n const initResult = await init();\n if(!initResult) {\n onClose?.();\n return;\n }\n\n target.classList.add('menu-open');\n\n _element = initResult.element;\n const {cleanup, destroy} = initResult;\n\n positionMenu(e, _element);\n contextMenuController.openBtnMenu(_element, () => {\n target.classList.remove('menu-open');\n onClose?.();\n cleanup();\n\n setTimeout(() => {\n onCloseAfter?.();\n destroy();\n }, 300);\n });\n };\n\n r();\n };\n\n attachContextMenuListener({\n element: listenTo,\n callback: open,\n listenerSetter: attachListenerSetter\n });\n\n const cleanup = () => {\n listenerSetter.removeAll();\n middlewareHelper.clean();\n };\n\n const destroy = () => {\n cleanup();\n attachListenerSetter.removeAll();\n };\n\n const init = async() => {\n cleanup();\n\n buttons.forEach((button) => button.element = undefined);\n const f = filterButtons || ((buttons: T[]) => filterAsync(buttons, (button) => {\n return button?.verify ? callbackify(button.verify(), (result) => result ?? false) : true;\n }));\n\n const filteredButtons = await f(buttons);\n if(!filteredButtons.length) {\n return;\n }\n\n const _element = element = await ButtonMenu({\n buttons: filteredButtons,\n listenerSetter\n });\n _element.classList.add('contextmenu');\n\n await onOpenBefore?.();\n\n appendTo.append(_element);\n\n return {\n element: _element,\n cleanup,\n destroy: () => {\n _element.remove();\n }\n };\n };\n\n if(middleware) {\n middleware.onDestroy(() => {\n destroy();\n });\n }\n\n if(listenForClick) {\n attachClickEvent(listenTo, open, {listenerSetter: attachListenerSetter});\n }\n\n return {element, destroy, open};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {SliderSuperTab} from './slider';\nimport type {SliderSuperTabEventable, SliderSuperTabEventableConstructable} from './sliderTab';\nimport CheckboxField, {CheckboxFieldOptions} from './checkboxField';\nimport RadioField from './radioField';\nimport ripple from './ripple';\nimport RadioForm from './radioForm';\nimport {i18n, LangPackKey} from '../lib/langPack';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport setInnerHTML, {setDirection} from '../helpers/dom/setInnerHTML';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport Button from './button';\nimport createContextMenu from '../helpers/dom/createContextMenu';\nimport SidebarSlider from './slider';\nimport Icon from './icon';\n\ntype K = string | HTMLElement | DocumentFragment | true;\n\nconst setContent = (element: HTMLElement, content: K) => {\n if(content === true) {\n\n } else if(typeof(content) === 'string') {\n setInnerHTML(element, content);\n } else {\n element.append(content);\n }\n};\n\nexport type RowMediaSizeType = 'small' | 'medium' | 'big' | 'abitbigger' | 'bigger' | '40';\n\ntype ConstructorP = T extends {\n new (...args: any[]): infer U;\n} ? U : never;\n\nexport default class Row {\n public container: HTMLElement;\n public titleRow: HTMLElement;\n public titleRight: HTMLElement;\n public media: HTMLElement;\n\n public subtitleRow: HTMLElement;\n public subtitleRight: HTMLElement;\n\n public checkboxField: CheckboxField;\n public radioField: RadioField;\n\n public freezed = false;\n\n public buttonRight: HTMLElement;\n\n private _title: HTMLElement;\n private _subtitle: HTMLElement;\n private _midtitle: HTMLElement;\n\n public openContextMenu: ReturnType['open'];\n\n constructor(options: Partial<{\n icon: Icon,\n iconClasses: string[],\n subtitle: K,\n subtitleLangKey: LangPackKey,\n subtitleLangArgs: any[],\n subtitleRight: K,\n radioField: Row['radioField'],\n checkboxField: Row['checkboxField'],\n checkboxFieldOptions: CheckboxFieldOptions,\n withCheckboxSubtitle: boolean,\n title: K,\n titleLangKey: LangPackKey,\n titleLangArgs: any[],\n titleRight: K,\n titleRightSecondary: K,\n clickable: boolean | ((e: MouseEvent) => void),\n navigationTab: {\n constructor: T,\n slider: SidebarSlider,\n getInitArgs?: () => Promise['init']>[0]> | Parameters['init']>[0]\n args?: any\n },\n havePadding: boolean,\n noRipple: boolean,\n noWrap: boolean,\n listenerSetter: ListenerSetter,\n buttonRight?: HTMLElement | boolean,\n buttonRightLangKey: LangPackKey,\n rightContent?: HTMLElement,\n rightTextContent?: string,\n asLink: boolean,\n contextMenu: Omit[0], 'findElement' | 'listenTo' | 'listenerSetter'>,\n asLabel: boolean,\n checkboxKeys: [LangPackKey, LangPackKey],\n }> = {}) {\n if(options.checkboxFieldOptions) {\n options.checkboxField = new CheckboxField({\n listenerSetter: options.listenerSetter,\n ...options.checkboxFieldOptions\n });\n }\n\n const tagName = options.asLink ? 'a' : (options.radioField || options.checkboxField || options.asLabel ? 'label' : 'div');\n this.container = document.createElement(tagName);\n this.container.classList.add('row', 'no-subtitle');\n\n if(options.noWrap) {\n this.container.classList.add('no-wrap');\n }\n\n if(options.subtitle || options.subtitleLangKey) {\n const subtitle = this.subtitle;\n if(options.subtitleLangKey) {\n subtitle.append(i18n(options.subtitleLangKey, options.subtitleLangArgs));\n } else {\n setContent(subtitle, options.subtitle);\n }\n\n if(options.noWrap) subtitle.classList.add('no-wrap');\n\n if(options.subtitleRight) {\n this.container.append(this.subtitleRow = this.createRow());\n this.subtitleRow.classList.add('row-subtitle-row');\n const subtitleRight = this.subtitleRight = document.createElement('div');\n subtitleRight.classList.add('row-subtitle', 'row-subtitle-right');\n\n setContent(subtitleRight, options.subtitleRight);\n this.subtitleRow.append(subtitle, subtitleRight);\n }\n }\n\n let havePadding = !!options.havePadding;\n if(options.radioField || options.checkboxField) {\n if(options.radioField) {\n this.radioField = options.radioField;\n this.container.append(this.radioField.label);\n havePadding = true;\n }\n\n if(options.checkboxField) {\n this.checkboxField = options.checkboxField;\n\n const isToggle = options.checkboxField.label.classList.contains('checkbox-field-toggle');\n if(isToggle) {\n this.container.classList.add('row-with-toggle');\n options.titleRight = this.checkboxField.label;\n } else {\n havePadding = true;\n if(!this.checkboxField.span) {\n this.checkboxField.label.classList.add('checkbox-field-absolute');\n }\n this.container.append(this.checkboxField.label);\n }\n\n if(options.withCheckboxSubtitle && !isToggle) {\n options.checkboxKeys ??= ['Checkbox.Enabled', 'Checkbox.Disabled'];\n const [enabledKey, disabledKey] = options.checkboxKeys;\n const onChange = () => {\n replaceContent(this.subtitle, i18n(this.checkboxField.checked ? enabledKey : disabledKey));\n };\n\n if(options.listenerSetter) options.listenerSetter.add(this.checkboxField.input)('change', onChange);\n else this.checkboxField.input.addEventListener('change', onChange);\n }\n }\n\n const i = options.radioField || options.checkboxField;\n i.label.classList.add('disable-hover');\n }\n\n if(options.title || options.titleLangKey || options.titleRight || options.titleRightSecondary) {\n let c: HTMLElement;\n const titleRightContent = options.titleRight || options.titleRightSecondary;\n if(titleRightContent) {\n this.container.append(c = this.titleRow = this.createRow());\n this.titleRow.classList.add('row-title-row');\n } else {\n c = this.container;\n }\n\n this._title = this.createTitle();\n if(options.noWrap) this.title.classList.add('no-wrap');\n if(options.title) {\n setContent(this.title, options.title);\n } else if(options.titleLangKey) {\n this.title.append(i18n(options.titleLangKey, options.titleLangArgs));\n }\n\n c.append(this.title);\n\n if(titleRightContent) {\n const titleRight = this.titleRight = document.createElement('div');\n titleRight.classList.add('row-title', 'row-title-right');\n\n if(options.titleRightSecondary) {\n titleRight.classList.add('row-title-right-secondary');\n }\n\n setContent(titleRight, titleRightContent);\n c.append(titleRight);\n }\n }\n\n if(options.icon) {\n havePadding = true;\n // this.title.classList.add('tgico', 'tgico-' + options.icon);\n if(options.iconClasses?.length) {\n this.container.append(Icon(options.icon, 'row-icon', ...options.iconClasses));\n } else {\n this.container.append(Icon(options.icon, 'row-icon'));\n }\n this.container.classList.add('row-with-icon');\n }\n\n if(havePadding) {\n this.container.classList.add('row-with-padding');\n }\n\n if(options.navigationTab) {\n let getInitArgs = options.navigationTab.getInitArgs;\n if(!getInitArgs) {\n const g = (options.navigationTab.constructor as any as typeof SliderSuperTab).getInitArgs;\n if(g) {\n // @ts-ignore\n getInitArgs = () => g();\n }\n }\n\n let args = options.navigationTab.args ?? getInitArgs?.();\n\n options.clickable = async() => {\n if(args instanceof Promise) {\n args = await args;\n }\n\n // if(!Array.isArray(args)) {\n // args = [args];\n // }\n\n const tab = options.navigationTab.slider.createTab(options.navigationTab.constructor as any);\n tab.open(args);\n\n const eventListener = (tab as SliderSuperTabEventable).eventListener;\n if(eventListener && getInitArgs) {\n eventListener.addEventListener('destroyAfter', (promise) => {\n args = promise.then(() => getInitArgs() as any);\n });\n }\n };\n }\n\n if(options.clickable || options.radioField || options.checkboxField) {\n if(typeof(options.clickable) === 'function') {\n attachClickEvent(this.container, (e) => {\n if(this.freezed) return;\n (options.clickable as any)(e);\n }, {listenerSetter: options.listenerSetter});\n }\n\n this.container.classList.add('row-clickable', 'hover-effect');\n\n if(!options.noRipple) {\n ripple(this.container, undefined, undefined, true);\n }\n\n /* if(options.radioField || options.checkboxField) {\n this.container.prepend(this.container.lastElementChild);\n } */\n }\n\n if(options.buttonRight || options.buttonRightLangKey) {\n options.rightContent = this.buttonRight = options.buttonRight instanceof HTMLElement ?\n options.buttonRight :\n Button('btn-primary btn-color-primary btn-control-small', {text: options.buttonRightLangKey});\n }\n\n if(options.rightTextContent) {\n options.rightContent = document.createElement('span');\n options.rightContent.classList.add('row-title-right-secondary');\n options.rightContent.textContent = options.rightTextContent;\n }\n\n if(options.rightContent) {\n options.rightContent.classList.add('row-right');\n this.container.classList.add('row-grid');\n this.container.append(options.rightContent);\n }\n\n if(options.contextMenu) {\n const {open} = createContextMenu({\n ...options.contextMenu,\n listenTo: this.container,\n listenerSetter: options.listenerSetter\n });\n\n this.openContextMenu = open;\n }\n }\n\n public get title() {\n return this._title;\n }\n\n public get subtitle() {\n return this._subtitle ??= this.createSubtitle();\n }\n\n public get midtitle() {\n return this._midtitle ??= this.createMidtitle();\n }\n\n private createRow() {\n const c = document.createElement('div');\n c.classList.add('row-row');\n return c;\n }\n\n public createTitle() {\n const title = document.createElement('div');\n title.classList.add('row-title');\n setDirection(title);\n return title;\n }\n\n private createSubtitle() {\n const subtitle = document.createElement('div');\n subtitle.classList.add('row-subtitle');\n setDirection(subtitle);\n if(this.title) this.title.after(subtitle);\n else this.container.prepend(subtitle);\n this.container.classList.remove('no-subtitle');\n return subtitle;\n }\n\n private createMidtitle() {\n const midtitle = document.createElement('div');\n midtitle.classList.add('row-midtitle');\n this.subtitle.parentElement.insertBefore(midtitle, this.subtitle);\n return midtitle;\n }\n\n public createMedia(size?: RowMediaSizeType) {\n const media = document.createElement('div');\n return this.applyMediaElement(media, size);\n }\n\n public applyMediaElement(media: HTMLElement, size?: RowMediaSizeType) {\n this.container.classList.add('row-with-padding');\n\n this.media = media;\n media.classList.add('row-media');\n\n if(size) {\n media.classList.add('row-media-' + size);\n }\n\n this.container.append(media);\n\n return media;\n }\n\n public isDisabled() {\n return this.container.classList.contains('is-disabled');\n }\n\n public toggleDisability(disable = !this.container.classList.contains('is-disabled')) {\n this.container.classList.toggle('is-disabled', disable);\n return () => this.toggleDisability(!disable);\n }\n\n public disableWithPromise(promise: Promise) {\n const toggle = this.toggleDisability(true);\n promise.finally(() => {\n toggle();\n });\n }\n\n public makeSortable() {\n const sortIcon = Icon('menu', 'row-sortable-icon');\n this.container.classList.add('row-sortable');\n this.container.append(sortIcon);\n }\n\n public toggleSorting(enabled?: boolean) {\n this.container.classList.toggle('cant-sort', !enabled);\n }\n}\n\nexport const RowTsx = (props: Partial[0]>) => {\n const obj = new Row(props);\n\n return obj.container;\n};\n\nexport const CreateRowFromCheckboxField = (checkboxField: CheckboxField) => {\n return new Row({checkboxField, listenerSetter: checkboxField.listenerSetter});\n};\n\nexport const RadioFormFromRows = (rows: Row[], onChange: (value: string) => void) => {\n return RadioForm(rows.map((r) => ({container: r.container, input: r.radioField.input})), onChange);\n};\n\nexport const RadioFormFromValues = (values: {\n langPackKey?: LangPackKey,\n value: number | string,\n checked?: boolean,\n textElement?: ConstructorParameters[0]['textElement']\n}[], onChange: Parameters[1], fireInit?: boolean) => {\n const name = 'name-' + (Math.random() * 0x7FFFFF | 0);\n let checkedRadioField: RadioField;\n const rows = values.map(({langPackKey, value, checked, textElement}) => {\n const row = new Row({\n radioField: new RadioField({\n textElement,\n langKey: langPackKey,\n name,\n value: '' + value\n })\n });\n\n if(checked) {\n checkedRadioField = row.radioField;\n }\n\n return row;\n });\n\n const form = RadioFormFromRows(rows, onChange);\n if(checkedRadioField) {\n if(fireInit) checkedRadioField.checked = true;\n else checkedRadioField.setValueSilently(true);\n }\n return form;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport tsNow from '../../helpers/tsNow';\nimport {LangPackKey} from '../../lib/langPack';\nimport {MUTE_UNTIL} from '../../lib/mtproto/mtproto_config';\nimport {RadioFormFromValues} from '../row';\nimport PopupPeer from './peer';\n\nconst ONE_HOUR = 3600;\nconst times: {value: number | string, langPackKey: LangPackKey, checked?: boolean}[] = [{\n value: ONE_HOUR,\n langPackKey: 'ChatList.Mute.1Hour'\n}, {\n value: ONE_HOUR * 4,\n langPackKey: 'ChatList.Mute.4Hours'\n}, {\n value: ONE_HOUR * 8,\n langPackKey: 'ChatList.Mute.8Hours'\n}, {\n value: ONE_HOUR * 24,\n langPackKey: 'ChatList.Mute.1Day'\n}, {\n value: ONE_HOUR * 24 * 3,\n langPackKey: 'ChatList.Mute.3Days'\n}, {\n value: -1,\n langPackKey: 'ChatList.Mute.Forever',\n checked: true\n}];\n\nexport default class PopupMute extends PopupPeer {\n constructor(peerId: PeerId, threadId?: number) {\n super('popup-mute', {\n peerId,\n titleLangKey: 'Notifications',\n buttons: [{\n langKey: 'ChatList.Context.Mute',\n callback: () => {\n this.managers.appMessagesManager.mutePeer({peerId, muteUntil: time === -1 ? MUTE_UNTIL : tsNow(true) + time, threadId});\n }\n }],\n body: true\n });\n\n let time: number;\n const radioForm = RadioFormFromValues(times, (value) => {\n time = +value;\n }, true);\n\n this.body.append(radioForm);\n\n this.show();\n }\n}\n","// https://spicyyoghurt.com/tools/easing-functions\nexport default function easeInOutSine(t: number, b: number, c: number, d: number) {\n return t >= d ? b + c : easeInOutSineApply(t / d, c) + b;\n}\n\nexport function easeInOutSineApply(v: number, c: number) {\n return -c / 2 * (Math.cos(Math.PI * v) - 1);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {animateSingle} from '../helpers/animation';\nimport {easeInOutSineApply} from '../helpers/easing/easeInOutSine';\nimport liteMode from '../helpers/liteMode';\nimport clamp from '../helpers/number/clamp';\nimport {doubleRaf} from '../helpers/schedulers';\nimport {_i18n, i18n} from '../lib/langPack';\nimport Icon from './icon';\n\ntype LimitLineProgressElements = {\n from1: HTMLElement,\n from2: HTMLElement,\n to1: HTMLElement,\n to2: HTMLElement\n};\n\nexport default class LimitLine {\n public container: HTMLElement;\n protected line: HTMLElement;\n protected progressLimitLine: LimitLine;\n protected left: HTMLElement;\n protected right: HTMLElement;\n protected hint: HTMLElement;\n protected hintNoStartEnd: boolean;\n protected lastProgress: number;\n\n constructor(options: {\n limitPremium?: number,\n limitFree?: number | string,\n color?: string,\n progress?: LimitLineProgressElements | true,\n hint?: {\n icon: Icon,\n content?: HTMLElement | string,\n noStartEnd?: boolean\n }\n }) {\n let container: HTMLElement;\n\n if(options.hint) {\n container = document.createElement('div');\n container.classList.add('limit-line-container');\n\n const hint = this.hint = document.createElement('div');\n hint.classList.add('limit-line-hint', 'is-locked');\n const i = Icon(options.hint.icon, 'limit-line-hint-icon');\n hint.append(i);\n\n if(options.hint.content) {\n hint.append(options.hint.content);\n }\n\n this.hintNoStartEnd = options.hint.noStartEnd;\n\n container.append(hint);\n }\n\n const limit = this.line = document.createElement('div');\n limit.classList.add('limit-line');\n\n if(!container) {\n limit.classList.add('is-alone');\n }\n\n const left = this.left = document.createElement('div');\n left.classList.add('limit-line-part', 'limit-line-empty');\n\n const right = this.right = document.createElement('div');\n right.classList.add('limit-line-part', 'limit-line-filled');\n\n if(options.progress) {\n // const rightContainer = document.createElement('div');\n // rightContainer.classList.add('limit-line-absolute-container');\n // rightContainer.append(right);\n right.classList.add('limit-line-absolute');\n if(options.progress !== true) {\n this.setProgressElements(options.progress);\n }\n }\n\n if(options.limitPremium !== undefined) {\n if(options.limitFree === undefined) {\n _i18n(left, 'LimitFree');\n } else {\n left.append(i18n('LimitFree'), '' + options.limitFree);\n }\n\n if(options.color !== undefined) right.style.setProperty('--limit-background', options.color);\n limit.append(right);\n right.append(i18n('LimitPremium'), '' + options.limitPremium);\n }\n\n limit.append(left, right);\n this.container = container || limit;\n container && container.append(limit);\n }\n\n public setProgressElements(progress: LimitLineProgressElements) {\n this.left.replaceChildren(progress.from1, progress.to1);\n this.right.replaceChildren(progress.from2, progress.to2);\n }\n\n // [0..1]\n public setProgress(progress: number, hintContent?: HTMLElement | string, elements?: LimitLineProgressElements) {\n const lastProgress = this.lastProgress;\n if(this.hint) {\n this.hint.classList.remove('is-locked');\n if(hintContent) {\n this.hint.replaceChildren(this.hint.firstElementChild, hintContent);\n }\n }\n\n const set = (value: number) => {\n this.container.style.setProperty('--limit-progress', value * 100 + '%');\n if(this.hint) {\n const t = 0.1;\n if(this.hintNoStartEnd) {\n this.hint.style.setProperty('--limit-progress', clamp(value, t, 1 - t) * 100 + '%')\n } else {\n this.hint.classList.toggle('is-start', value <= t);\n this.hint.classList.toggle('is-end', value >= (1 - t));\n }\n }\n };\n\n if(lastProgress !== undefined && liteMode.isAvailable('animations')) {\n const duration = 200;\n const startTime = Date.now();\n const toAdd = progress - this.lastProgress;\n animateSingle(() => {\n const v = (Date.now() - startTime) / duration;\n const value = lastProgress + easeInOutSineApply(toAdd * v, 1);\n set(value);\n\n return v < 1;\n }, this.container);\n } else {\n set(progress);\n }\n\n if(elements) {\n this.setProgressElements(elements);\n }\n\n this.lastProgress = progress;\n }\n\n public setHintActive = () => {\n this.hint.classList.add('active');\n };\n\n public _setHintActive() {\n if(liteMode.isAvailable('animations')) {\n doubleRaf().then(this.setHintActive);\n } else {\n this.setHintActive();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {i18n, LangPackKey} from '../lib/langPack';\n\nexport default function formatBytes(bytes: number, decimals: number | 'auto' = 'auto') {\n if(bytes === 0) return i18n('FileSize.B', [0]);\n\n const strictDecimals = decimals === 'auto';\n\n const k = 1024;\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n const _decimals = decimals === 'auto' ? Math.max(0, i - 1) : decimals;\n\n const dm = Math.max(0, _decimals);\n const sizes: LangPackKey[] = ['FileSize.B', 'FileSize.KB', 'FileSize.MB', 'FileSize.GB'];\n\n const fixed = (bytes / Math.pow(k, i)).toFixed(dm);\n return i18n(sizes[i], [strictDecimals ? fixed : parseFloat(fixed)]);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FormatterArguments, LangPackKey} from '../../lib/langPack';\nimport {Document} from '../../layer';\nimport {ApiLimitType} from '../../lib/mtproto/api_methods';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport formatBytes from '../../helpers/formatBytes';\n\nexport interface PremiumPromoFeature {\n feature: PremiumPromoFeatureType;\n icon: Icon;\n titleLangKey: LangPackKey;\n subtitleLangKey: LangPackKey;\n actionTitleLangKey?: LangPackKey;\n actionIcon?: Icon;\n headerLangKey?: LangPackKey;\n titleLangArgs?: FormatterArguments;\n subtitleLangArgs?: FormatterArguments;\n _titleLangArgs?: (managers: AppManagers) => MaybePromise;\n _subtitleLangArgs?: (managers: AppManagers) => MaybePromise;\n videoPosition?: 'bottom' | 'top';\n video?: Document.document;\n wrappedVideo?: any;\n type?: string;\n content?: Array<{\n titleLangKey?: LangPackKey,\n titleLangArgs?: FormatterArguments,\n _titleLangArgs?: (managers: AppManagers) => MaybePromise;\n subtitleLangKey?: LangPackKey,\n subtitleLangArgs?: FormatterArguments,\n _subtitleLangArgs?: (managers: AppManagers) => MaybePromise,\n iconColor?: string,\n icon?: Icon,\n backgroundColor?: string,\n limitType?: ApiLimitType,\n name?: string,\n free?: number,\n premium?: number\n }>;\n new?: boolean,\n builded?: boolean\n}\n\nexport const PREMIUM_FEATURES_COLORS: string[] = [\n '#ef6922',\n '#e95a2c',\n '#e74e33',\n '#e3433c',\n '#db374b',\n '#cb3e6d',\n '#bc4395',\n '#ab4ac4',\n '#9b4fed',\n '#8958ff',\n '#676bff',\n '#5b79ff',\n '#4492ff',\n '#429bd5',\n '#41a6a5',\n '#3eb26d',\n '#3dbd4a'\n];\n\nconst stories: PremiumPromoFeature = {\n feature: 'stories',\n icon: 'stories',\n titleLangKey: 'Premium.Boarding.Stories.Title',\n subtitleLangKey: 'Premium.Boarding.Stories.Info',\n type: 'upgraded-stories',\n content: [{\n titleLangKey: 'PremiumStoriesPriority',\n subtitleLangKey: 'PremiumStoriesPriorityDescription',\n iconColor: '#0079FE',\n icon: 'multistories'\n }, {\n titleLangKey: 'PremiumStoriesStealth',\n subtitleLangKey: 'PremiumStoriesStealthDescription',\n iconColor: '#7889FE',\n icon: 'eyecross_outline'\n }, {\n titleLangKey: 'PremiumStoriesViews',\n subtitleLangKey: 'PremiumStoriesViewsDescription',\n iconColor: '#A45FE6',\n icon: 'eye'\n }, {\n titleLangKey: 'PremiumStoriesExpiration',\n subtitleLangKey: 'PremiumStoriesExpirationDescription',\n iconColor: '#C355AE',\n icon: 'timer'\n }, {\n titleLangKey: 'PremiumStoriesSaveToGallery',\n subtitleLangKey: 'PremiumStoriesSaveToGalleryDescription',\n iconColor: '#E85D43',\n icon: 'arrowcircle'\n }, {\n titleLangKey: 'PremiumStoriesCaption',\n subtitleLangKey: 'PremiumStoriesCaptionDescription',\n iconColor: '#F1822A',\n icon: 'list'\n }, {\n titleLangKey: 'PremiumStoriesFormatting',\n subtitleLangKey: 'PremiumStoriesFormattingDescription',\n iconColor: '#E6AC19',\n icon: 'limit_link'\n }]\n};\n\nconst wrapGetLimitArgument = (limitType: ApiLimitType) => (managers: AppManagers) => managers.apiManager.getLimit(limitType, true).then((limit) => [limit]);\n\nconst doubleLimits: PremiumPromoFeature = {\n feature: 'double_limits',\n icon: 'premium_limits',\n titleLangKey: 'Premium.Boarding.Double.Title',\n subtitleLangKey: 'Premium.Boarding.Double.Info',\n headerLangKey: 'Premium.Boarding.Double.Title',\n _subtitleLangArgs: (managers) => Promise.all(\n (['channels', 'folders', 'pin', 'links'] as ApiLimitType[]).map((type) => {\n return managers.apiManager.getLimit(type, true);\n })\n ),\n type: 'limits',\n content: [{\n titleLangKey: 'GroupsAndChannelsLimitTitle',\n subtitleLangKey: 'GroupsAndChannelsLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('channels'),\n limitType: 'channels',\n backgroundColor: '#5B9FFF'\n }, {\n titleLangKey: 'PinChatsLimitTitle',\n subtitleLangKey: 'PinChatsLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('pin'),\n limitType: 'pin',\n backgroundColor: '#7889FE'\n }, {\n titleLangKey: 'PublicLinksLimitTitle',\n subtitleLangKey: 'PublicLinksLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('links'),\n limitType: 'links',\n backgroundColor: '#9376FF'\n }, {\n titleLangKey: 'SavedGifsLimitTitle',\n subtitleLangKey: 'SavedGifsLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('gifs'),\n limitType: 'gifs',\n backgroundColor: '#AB63F2'\n }, {\n titleLangKey: 'FavoriteStickersLimitTitle',\n subtitleLangKey: 'FavoriteStickersLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('favedStickers'),\n limitType: 'favedStickers',\n backgroundColor: '#C456AE'\n }, {\n titleLangKey: 'BioLimitTitle',\n subtitleLangKey: 'BioLimitSubtitle',\n limitType: 'bio',\n backgroundColor: '#CE569A'\n }, {\n titleLangKey: 'CaptionsLimitTitle',\n subtitleLangKey: 'CaptionsLimitSubtitle',\n limitType: 'caption',\n backgroundColor: '#DA5786'\n }, {\n titleLangKey: 'FoldersLimitTitle',\n subtitleLangKey: 'FoldersLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('folders'),\n limitType: 'folders',\n backgroundColor: '#DB496F'\n }, {\n titleLangKey: 'ChatPerFolderLimitTitle',\n subtitleLangKey: 'ChatPerFolderLimitSubtitle',\n _subtitleLangArgs: wrapGetLimitArgument('folderPeers'),\n limitType: 'folderPeers',\n backgroundColor: '#E85D43'\n }, {\n titleLangKey: 'ConnectedAccountsLimitTitle',\n subtitleLangKey: 'ConnectedAccountsLimitSubtitle',\n subtitleLangArgs: [4],\n free: 3,\n premium: 4,\n backgroundColor: '#F1822A'\n }]\n};\n\nconst formatParts = (parts: number) => formatBytes(parts * 1.024 * 512 * 1024, 0);\n\nexport const PREMIUM_FEATURES: {[type in PremiumPromoFeatureType]?: PremiumPromoFeature} = {\n stories: stories,\n double_limits: doubleLimits,\n voice_to_text: {\n feature: 'voice_to_text',\n icon: 'premium_transcription',\n titleLangKey: 'Premium.Boarding.Voice.Title',\n subtitleLangKey: 'Premium.Boarding.Voice.Info',\n videoPosition: 'top'\n },\n faster_download: {\n feature: 'faster_download',\n icon: 'premium_speed',\n titleLangKey: 'Premium.Boarding.Download.Title',\n subtitleLangKey: 'Premium.Boarding.Download.Info',\n videoPosition: 'top'\n },\n translations: {\n feature: 'translations',\n icon: 'premium_translate',\n titleLangKey: 'Premium.Boarding.Translate.Title',\n subtitleLangKey: 'Premium.Boarding.Translate.Info',\n videoPosition: 'top'\n },\n animated_emoji: {\n feature: 'animated_emoji',\n icon: 'premium_emoji',\n titleLangKey: 'Premium.Boarding.Emoji.Title',\n subtitleLangKey: 'Premium.Boarding.Emoji.Info'\n },\n more_upload: {\n feature: 'more_upload',\n icon: 'premium_filesize',\n titleLangKey: 'Premium.Boarding.FileSize.Title',\n _titleLangArgs: (managers) => managers.apiManager.getLimit('uploadFileParts', true).then((parts) => [formatParts(parts)]),\n subtitleLangKey: 'Premium.Boarding.FileSize.Info',\n _subtitleLangArgs: (managers) => Promise.all(\n [false, true].map(async(isPremium) => {\n const parts = await managers.apiManager.getLimit('uploadFileParts', isPremium);\n return formatParts(parts);\n })\n )\n },\n emoji_status: {\n feature: 'emoji_status',\n icon: 'premium_status',\n titleLangKey: 'Premium.Boarding.Status.Title',\n subtitleLangKey: 'Premium.Boarding.Status.Info',\n videoPosition: 'top'\n },\n peer_colors: {\n feature: 'peer_colors',\n icon: 'premium_colors',\n titleLangKey: 'Premium.Promo.Colors.Title',\n subtitleLangKey: 'Premium.Promo.Colors.Subtitle',\n videoPosition: 'top'\n },\n wallpapers: {\n feature: 'wallpapers',\n icon: 'premium_wallpaper',\n titleLangKey: 'Premium.Promo.Wallpaper.Title',\n subtitleLangKey: 'Premium.Promo.Wallpaper.Subtitle',\n videoPosition: 'top',\n new: true\n },\n profile_badge: {\n feature: 'profile_badge',\n icon: 'star',\n titleLangKey: 'Premium.Boarding.Badge.Title',\n subtitleLangKey: 'Premium.Boarding.Badge.Info',\n videoPosition: 'top'\n },\n advanced_chat_management: {\n feature: 'advanced_chat_management',\n icon: 'premium_management',\n titleLangKey: 'Premium.Boarding.Chats.Title',\n subtitleLangKey: 'Premium.Boarding.Chats.Info',\n videoPosition: 'top'\n },\n no_ads: {\n feature: 'no_ads',\n icon: 'premium_noads',\n titleLangKey: 'Premium.Boarding.NoAds.Title',\n subtitleLangKey: 'Premium.Boarding.NoAds.Info'\n // actionTitleLangKey: 'Premium.Boarding.NoAds.Action',\n // actionIcon: 'premium_badge'\n },\n infinite_reactions: {\n feature: 'infinite_reactions',\n icon: 'premium_reactions',\n titleLangKey: 'Premium.Boarding.ReactionsNew.Title',\n subtitleLangKey: 'Premium.Boarding.ReactionsNew.Info',\n videoPosition: 'top'\n // actionIcon: 'premium_unlock'\n },\n animated_userpics: {\n feature: 'animated_userpics',\n icon: 'premium_avatars',\n titleLangKey: 'Premium.Boarding.Avatar.Title',\n subtitleLangKey: 'Premium.Boarding.Avatar.Info',\n videoPosition: 'top'\n },\n premium_stickers: {\n feature: 'premium_stickers',\n icon: 'premium_stickers',\n titleLangKey: 'Premium.Boarding.Stickers.Title',\n subtitleLangKey: 'Premium.Boarding.Stickers.Info',\n // actionIcon: 'premium_unlock',\n type: 'premium-stickers'\n },\n last_seen: {\n feature: 'last_seen',\n icon: 'premium_lastseen',\n titleLangKey: 'PremiumPreviewLastSeen',\n subtitleLangKey: 'PremiumPreviewLastSeenDescription',\n new: true\n },\n message_privacy: {\n feature: 'message_privacy',\n icon: 'premium_privacy',\n titleLangKey: 'PremiumPreviewMessagePrivacy',\n subtitleLangKey: 'PremiumPreviewMessagePrivacyDescription',\n new: true\n },\n saved_tags: {\n feature: 'saved_tags',\n icon: 'premium_tags',\n titleLangKey: 'PremiumPreviewTags',\n subtitleLangKey: 'PremiumPreviewTagsDescription2'\n }\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Message, MessageAction} from '../layer';\nimport type {HistoryResult, MyMessage} from '../lib/appManagers/appMessagesManager';\nimport forEachReverse from './array/forEachReverse';\n\nexport default function filterChatPhotosMessages(value: HistoryResult) {\n forEachReverse(value.messages, (message, idx, arr) => {\n if(!((message as Message.messageService).action as MessageAction.messageActionChatEditPhoto).photo) {\n arr.splice(idx, 1);\n if(value.count !== undefined) {\n --value.count;\n }\n }\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport forEachReverse from './array/forEachReverse';\nimport safeAssign from './object/safeAssign';\n\nexport type ListLoaderOptions = {\n loadMore: ListLoader['loadMore'],\n loadCount?: ListLoader['loadCount'],\n loadWhenLeft?: ListLoader['loadWhenLeft'],\n processItem?: ListLoader['processItem'],\n onJump?: ListLoader['onJump'],\n onLoadedMore?: ListLoader['onLoadedMore']\n};\n\nexport type ListLoaderResult = {count: number, items: any[]};\nexport default class ListLoader {\n public current: T;\n public previous: T[] = [];\n public next: T[] = [];\n public count: number;\n public reverse = false; // reverse means next = higher msgid\n\n protected loadMore: (anchor: T, older: boolean, loadCount: number) => Promise>;\n protected processItem: (item: P) => T | Promise;\n protected loadCount = 50;\n protected loadWhenLeft = 20;\n\n public onJump: (item: T, older: boolean) => void;\n public onLoadedMore: () => void;\n\n protected loadedAllUp = false;\n protected loadedAllDown = false;\n protected loadPromiseUp: Promise;\n protected loadPromiseDown: Promise;\n\n constructor(options: ListLoaderOptions) {\n safeAssign(this, options);\n }\n\n public setTargets(previous: T[], next: T[], reverse: boolean) {\n this.previous = previous;\n this.next = next;\n this.reverse = reverse;\n }\n\n public get index() {\n return this.count !== undefined ? this.previous.length : -1;\n }\n\n /* public filter(callback: (item: T, idx: number, arr: T[]) => boolean) {\n const filter = (item: T, idx: number, arr: T[]) => {\n if(!callback(item, idx, arr)) {\n arr.splice(idx, 1);\n }\n };\n\n forEachReverse(this.previous, filter);\n forEachReverse(this.next, filter);\n } */\n\n public reset(loadedAll = false) {\n this.current = undefined;\n this.previous = [];\n this.next = [];\n this.setLoaded(true, loadedAll);\n this.setLoaded(false, loadedAll);\n }\n\n public go(length: number, dispatchJump = true) {\n let items: T[], item: T;\n if(length > 0) {\n items = this.next.splice(0, length);\n item = items.pop();\n if(!item) {\n return;\n }\n\n if(this.current !== undefined) items.unshift(this.current);\n this.previous.push(...items);\n } else {\n items = this.previous.splice(Math.max(0, this.previous.length + length), -length);\n item = items.shift();\n if(!item) {\n return;\n }\n\n if(this.current !== undefined) items.push(this.current);\n this.next.unshift(...items);\n }\n\n if(this.next.length < this.loadWhenLeft) {\n this.load(!this.reverse);\n }\n\n if(this.previous.length < this.loadWhenLeft) {\n this.load(this.reverse);\n }\n\n this.current = item;\n dispatchJump && this.onJump?.(item, length > 0);\n return this.current;\n }\n\n protected unsetCurrent(toPrevious: boolean) {\n if(toPrevious) this.previous.push(this.current);\n else this.next.unshift(this.current);\n\n this.current = undefined;\n }\n\n public goUnsafe(length: number, dispatchJump?: boolean) {\n const leftLength = length > 0 ? Math.max(0, length - this.next.length) : Math.min(0, length + this.previous.length);\n const item = this.go(length, leftLength ? false : dispatchJump);\n\n /* if(length > 0 ? this.loadedAllUp : this.loadedAllDown) {\n this.unsetCurrent(length > 0);\n } */\n\n return {\n item: !leftLength ? item : undefined,\n leftLength\n };\n }\n\n protected setLoaded(down: boolean, value: boolean) {\n const isChanged = (down ? this.loadedAllDown : this.loadedAllUp) !== value;\n if(!isChanged) {\n return false;\n }\n\n if(down) this.loadedAllDown = value;\n else this.loadedAllUp = value;\n\n if(!value) {\n if(down) this.loadPromiseDown = null;\n else this.loadPromiseUp = null;\n }\n\n return true;\n }\n\n // нет смысла делать проверку для reverse и loadMediaPromise\n public load(older: boolean) {\n if(older ? this.loadedAllDown : this.loadedAllUp) return Promise.resolve();\n\n let promise = older ? this.loadPromiseDown : this.loadPromiseUp;\n if(promise) return promise;\n\n let anchor: T;\n if(older) {\n anchor = this.reverse ? this.previous[0] : this.next[this.next.length - 1];\n } else {\n anchor = this.reverse ? this.next[this.next.length - 1] : this.previous[0];\n }\n\n anchor ??= this.current;\n promise = this.loadMore(anchor, older, this.loadCount).then(async(result) => {\n if((older ? this.loadPromiseDown : this.loadPromiseUp) !== promise) {\n return;\n }\n\n if(result.items.length < this.loadCount) {\n this.setLoaded(older, true);\n }\n\n if(this.count === undefined) {\n this.count = result.count || result.items.length;\n }\n\n const processedArr: (Promise | any)[] = [];\n const method = older && !this.reverse ? result.items.forEach.bind(result.items) : forEachReverse.bind(null, result.items);\n method((item: any) => {\n const processed = this.processItem ? this.processItem(item) : item;\n\n if(!processed) return;\n processedArr.push(processed);\n });\n\n const results = (await Promise.all(processedArr)).filter(Boolean);\n if((older ? this.loadPromiseDown : this.loadPromiseUp) !== promise) {\n return;\n }\n\n if(older) {\n if(this.reverse) this.previous.unshift(...results);\n else this.next.push(...results);\n } else {\n if(this.reverse) this.next.push(...results);\n else this.previous.unshift(...results);\n }\n\n this.onLoadedMore?.();\n }, () => {}).then(() => {\n if(older) this.loadPromiseDown = null;\n else this.loadPromiseUp = null;\n });\n\n if(older) this.loadPromiseDown = promise;\n else this.loadPromiseUp = promise;\n\n return promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MediaSearchContext} from '../components/appMediaPlaybackController';\nimport type {SearchSuperContext} from '../components/appSearchSuper.';\nimport type {Message} from '../layer';\nimport type {MessagesStorageKey, MyMessage} from '../lib/appManagers/appMessagesManager';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport rootScope, {BroadcastEvents} from '../lib/rootScope';\nimport forEachReverse from './array/forEachReverse';\nimport filterChatPhotosMessages from './filterChatPhotosMessages';\nimport ListLoader, {ListLoaderOptions} from './listLoader';\n\nexport default class SearchListLoader extends ListLoader {\n public searchContext: MediaSearchContext;\n public onEmptied: () => void;\n\n private otherSideLoader: SearchListLoader;\n private managers: AppManagers;\n\n constructor(options: Omit, 'loadMore'> & {\n onEmptied?: () => void,\n isInner?: boolean,\n managers?: AppManagers\n } = {}) {\n super({\n ...options,\n loadMore: async(anchor, older, loadCount) => {\n const backLimit = older ? 0 : loadCount;\n let offsetId = anchor?.mid ?? this.searchContext.maxId;\n\n if(!older) offsetId = await this.managers.appMessagesIdsManager.incrementMessageId(offsetId, 1);\n\n const peerId = this.searchContext.peerId || anchor?.peerId;\n\n return this.managers.appMessagesManager.getHistory({\n ...this.searchContext,\n peerId,\n offsetId,\n offsetPeerId: !peerId ? anchor?.peerId : undefined,\n limit: backLimit ? 0 : loadCount,\n backLimit\n }).then((value) => {\n /* if(DEBUG) {\n this.log('loaded more media by maxId:', maxId, value, older, this.reverse);\n } */\n\n if(this.searchContext.inputFilter._ === 'inputMessagesFilterChatPhotos') {\n filterChatPhotosMessages(value);\n }\n\n if(value.nextRate) {\n this.searchContext.nextRate = value.nextRate;\n }\n\n if(!value.messages) {\n value.messages = value.history.map((mid) => apiManagerProxy.getMessageByPeer(peerId, mid));\n }\n\n return {count: value.count, items: value.messages};\n });\n },\n processItem: async(message) => {\n const filtered = await this.filterMids([message.mid]);\n if(!filtered.length) {\n return;\n }\n\n return options.processItem(message);\n }\n });\n\n this.managers ??= rootScope.managers;\n rootScope.addEventListener('history_delete', this.onHistoryDelete);\n rootScope.addEventListener('history_multiappend', this.onHistoryMultiappend);\n rootScope.addEventListener('message_sent', this.onMessageSent);\n\n if(!options.isInner) {\n this.otherSideLoader = new SearchListLoader({\n ...options,\n isInner: true\n });\n\n // this.otherSideLoader.onLoadedMore = () => {\n\n // };\n }\n }\n\n protected async filterMids(mids: number[]) {\n const storageKey: MessagesStorageKey = `${this.searchContext.peerId}_${this.searchContext.isScheduled ? 'scheduled' : 'history'}`;\n const filtered = (await this.managers.appMessagesManager.filterMessagesByInputFilterFromStorage(this.searchContext.inputFilter._, mids, storageKey, mids.length)) as Message.message[];\n return filtered;\n }\n\n protected onHistoryDelete = ({peerId, msgs}: BroadcastEvents['history_delete']) => {\n const shouldBeDeleted = (item: Item) => item.peerId === peerId && msgs.has(item.mid);\n const filter = (item: Item, idx: number, arr: Item[]) => {\n if(shouldBeDeleted(item)) {\n arr.splice(idx, 1);\n }\n };\n\n forEachReverse(this.previous, filter);\n forEachReverse(this.next, filter);\n\n if(this.current && shouldBeDeleted(this.current)) {\n this.current = undefined;\n /* if(this.go(1)) {\n this.previous.splice(this.previous.length - 1, 1);\n } else if(this.go(-1)) {\n this.next.splice(0, 1);\n } else */if(this.onEmptied) {\n this.onEmptied();\n }\n }\n };\n\n protected onHistoryMultiappend = async(message: Message.message | Message.messageService) => {\n const {searchContext} = this;\n if(searchContext.folderId !== undefined) {\n return;\n }\n\n // because it's reversed\n if(!this.loadedAllUp || this.loadPromiseUp) {\n return;\n }\n\n if(message.peerId !== searchContext.peerId) {\n return;\n }\n\n const filtered = await this.filterMids([message.mid]);\n if(this.searchContext !== searchContext) return;\n const targets = (await Promise.all(filtered.map((message) => this.processItem(message)))).filter(Boolean);\n if(this.searchContext !== searchContext) return;\n if(!targets.length) {\n return;\n }\n\n // * it can be already added because of `message_sent`\n const allTargets = this.previous.concat(this.next, this.current ? [this.current] : []);\n if(allTargets.some((item) => item?.mid === message.mid)) {\n return;\n }\n\n if(!this.current) {\n this.previous.push(...targets);\n } else {\n this.next.push(...targets);\n }\n };\n\n protected onMessageSent = ({message}: {message: MyMessage}) => {\n this.onHistoryMultiappend(message);\n };\n\n public setSearchContext(context: SearchSuperContext) {\n this.searchContext = context;\n\n if(this.searchContext.folderId !== undefined) {\n this.loadedAllUp = true;\n\n if(this.searchContext.nextRate === undefined) {\n this.loadedAllDown = true;\n }\n }\n\n if(this.searchContext.inputFilter._ === 'inputMessagesFilterChatPhotos') {\n this.loadedAllUp = true;\n }\n\n if(this.searchContext.useSearch === false) {\n this.loadedAllDown = this.loadedAllUp = true;\n }\n\n if(this.otherSideLoader) {\n this.otherSideLoader.setSearchContext(context);\n }\n }\n\n public reset() {\n super.reset();\n this.searchContext = undefined;\n\n if(this.otherSideLoader) {\n this.otherSideLoader.reset();\n }\n }\n\n public getPrevious(withOtherSide?: boolean) {\n let previous = this.previous;\n\n if(this.otherSideLoader && withOtherSide) {\n previous = previous.concat(this.otherSideLoader.previous);\n }\n\n return previous;\n }\n\n public getNext(withOtherSide?: boolean) {\n let next = this.next;\n\n if(this.otherSideLoader && withOtherSide) {\n next = next.concat(this.otherSideLoader.next);\n }\n\n return next;\n }\n\n public getCurrent() {\n return this.current || this.otherSideLoader?.current;\n }\n\n private goToOtherEnd(length: number) {\n if(length > 0) return this.go(-this.previous.length);\n else return this.go(this.next.length);\n }\n\n public goRound(length: number, dispatchJump?: boolean) {\n let ret: ReturnType['goUnsafe']>;\n\n if(this.otherSideLoader?.current) {\n ret = this.otherSideLoader.goUnsafe(length, dispatchJump);\n if(ret.item) {\n return ret.item;\n }\n\n length = ret.leftLength;\n if(!(length > 0 ? this.otherSideLoader.next : this.otherSideLoader.previous).length) {\n const loaded = length > 0 ? this.otherSideLoader.loadedAllUp : this.otherSideLoader.loadedAllDown;\n if(!loaded) { // do not reset anything until it's loaded\n return;\n }\n\n // if other side is loaded too will start from its begin\n if((length > 0 && (this.otherSideLoader.searchContext.maxId === 1 || this.otherSideLoader.loadedAllDown)) ||\n (length < 0 && (this.otherSideLoader.searchContext.maxId === 0 || this.otherSideLoader.loadedAllUp))) {\n return this.otherSideLoader.goToOtherEnd(length);\n }\n\n this.otherSideLoader.unsetCurrent(length > 0);\n }\n }\n\n ret = this.goUnsafe(length, dispatchJump);\n if(!ret.item) {\n if(this.loadedAllUp && this.loadedAllDown) { // just use the same loader if the list is too short\n return this.goToOtherEnd(length);\n } else if(this.otherSideLoader) {\n length = ret.leftLength;\n ret = this.otherSideLoader.goUnsafe(length, dispatchJump);\n\n if(ret.item) {\n this.unsetCurrent(length > 0);\n }\n }\n }\n\n return ret?.item;\n }\n\n // public setTargets(previous: Item[], next: Item[], reverse: boolean) {\n // super.setTargets(previous, next, reverse);\n // }\n\n protected setLoaded(down: boolean, value: boolean) {\n const changed = super.setLoaded(down, value);\n\n if(changed &&\n this.otherSideLoader &&\n value &&\n this.searchContext?.useSearch !== false/* &&\n (this.reverse ? this.loadedAllUp : this.loadedAllDown) */) {\n const reverse = this.loadedAllUp;\n this.otherSideLoader.setSearchContext({\n ...this.searchContext,\n maxId: reverse ? 1 : 0\n });\n\n // these 'reverse' are different, not a mistake here.\n this.otherSideLoader.reverse = this.reverse;\n this.otherSideLoader.setLoaded(reverse, true);\n this.otherSideLoader.load(!reverse);\n }\n\n return changed;\n }\n\n public cleanup() {\n this.reset();\n rootScope.removeEventListener('history_delete', this.onHistoryDelete);\n rootScope.removeEventListener('history_multiappend', this.onHistoryMultiappend);\n rootScope.removeEventListener('message_sent', this.onMessageSent);\n this.onEmptied = undefined;\n\n if(this.otherSideLoader) {\n this.otherSideLoader.cleanup();\n this.otherSideLoader = undefined;\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appDialogsManager from '../lib/appManagers/appDialogsManager';\nimport Scrollable from './scrollable';\nimport InputSearch from './inputSearch';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport {i18n, LangPackKey} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport {getMiddleware, Middleware, MiddlewareHelper} from '../helpers/middleware';\nimport getPeerId from '../lib/appManagers/utils/peers/getPeerId';\nimport {Message} from '../layer';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\n\nexport class SearchGroup {\n container: HTMLDivElement;\n nameEl: HTMLDivElement;\n list: HTMLUListElement;\n\n constructor(\n public name: LangPackKey | boolean,\n public type: string,\n private clearable = true,\n className?: string,\n clickable = true,\n public autonomous = true,\n public onFound?: () => void,\n public noIcons?: boolean\n ) {\n this.list = appDialogsManager.createChatList();\n this.container = document.createElement('div');\n if(className) this.container.className = className;\n\n if(name) {\n this.nameEl = document.createElement('div');\n this.nameEl.classList.add('search-group__name');\n if(typeof(name) === 'string') {\n this.nameEl.append(i18n(name));\n }\n this.container.append(this.nameEl);\n }\n\n this.container.classList.add('search-group', 'search-group-' + type);\n this.container.append(this.list);\n this.container.style.display = 'none';\n\n if(clickable) {\n appDialogsManager.setListClickListener({list: this.list, onFound, withContext: undefined, autonomous});\n }\n }\n\n clear() {\n this.container.style.display = 'none';\n\n if(this.clearable) {\n Array.from(this.list.children).forEach((el) => {\n const dialogElement = (el as any).dialogElement;\n if(dialogElement) dialogElement?.remove();\n else el.remove();\n });\n }\n }\n\n setActive() {\n this.container.style.display = '';\n }\n\n toggle() {\n if(this.list.childElementCount) {\n this.setActive();\n } else {\n this.clear();\n }\n }\n}\n\nexport type SearchGroupType = 'contacts' | 'globalContacts' | 'messages' | string;\n\nexport default class AppSearch {\n private minMsgId = 0;\n private loadedCount = -1;\n private foundCount = -1;\n\n private searchPromise: Promise = null;\n private searchTimeout: number = 0;\n\n private query = '';\n\n private listsContainer: HTMLDivElement = null;\n\n private peerId: PeerId; // 0 - means global\n private threadId = 0;\n\n private scrollable: Scrollable;\n\n private middlewareHelper: MiddlewareHelper;\n\n constructor(\n public container: HTMLElement,\n public searchInput: InputSearch,\n public searchGroups: {[group in SearchGroupType]: SearchGroup},\n middleware: Middleware,\n public onSearch?: (count: number) => void,\n public noIcons?: boolean,\n private fromSavedDialog?: boolean\n ) {\n this.middlewareHelper = middleware.create();\n this.scrollable = new Scrollable(this.container);\n this.listsContainer = this.scrollable.container as HTMLDivElement;\n for(const i in this.searchGroups) {\n this.listsContainer.append(this.searchGroups[i as SearchGroupType].container);\n }\n\n if(this.searchGroups.messages) {\n this.scrollable.setVirtualContainer(this.searchGroups.messages.list);\n }\n\n this.searchInput.onChange = (value) => {\n /* if(!value.trim()) {\n //this.peerId = 0;\n return;\n } */\n\n this.query = value;\n this.reset(false);\n this.searchMore();\n };\n\n this.scrollable.onScrolledBottom = () => {\n if(!this.query.trim()) return;\n\n if(!this.searchTimeout) {\n this.searchTimeout = window.setTimeout(() => {\n this.searchMore();\n this.searchTimeout = 0;\n }, 0);\n }\n };\n }\n\n public reset(all = true) {\n if(all) {\n this.searchInput.value = '';\n this.query = '';\n this.peerId = undefined;\n this.threadId = 0;\n }\n\n this.middlewareHelper.clean();\n this.minMsgId = 0;\n this.loadedCount = -1;\n this.foundCount = -1;\n\n for(const i in this.searchGroups) {\n this.searchGroups[i as SearchGroupType].clear();\n }\n\n this.searchPromise = null;\n }\n\n public beginSearch(peerId?: PeerId, threadId = 0, query = '') {\n this.peerId = peerId;\n this.threadId = threadId;\n\n if(this.query !== query) {\n this.searchInput.inputField.value = query;\n }\n\n this.searchInput.input.focus();\n }\n\n public searchMore() {\n if(this.searchPromise) return this.searchPromise;\n\n const query = this.query;\n\n if(!query.trim()) {\n this.onSearch?.(0);\n return;\n }\n\n if(this.foundCount !== -1 && this.loadedCount >= this.foundCount) {\n return Promise.resolve();\n }\n\n const offsetId = this.minMsgId || 0;\n\n const middleware = this.middlewareHelper.get();\n\n return this.searchPromise = rootScope.managers.appMessagesManager.getHistory({\n peerId: this.peerId,\n query,\n inputFilter: {_: 'inputMessagesFilterEmpty'},\n offsetId,\n limit: 20,\n threadId: this.threadId\n }).then((res) => {\n if(!middleware()) {\n return;\n }\n\n this.searchPromise = null;\n\n if(this.searchInput.value !== query) {\n return;\n }\n\n // console.log('input search result:', this.peerId, query, null, maxId, 20, res);\n\n let {count, messages, history} = res;\n\n if(!messages) {\n messages = res.messages = history.map((mid) => apiManagerProxy.getMessageByPeer(this.peerId, mid));\n }\n\n if(messages.length && messages[0].mid === this.minMsgId) {\n messages.shift();\n }\n\n const searchGroup = this.searchGroups.messages;\n\n messages.forEach((message) => {\n try {\n const peerId = this.peerId ? message.fromId : message.peerId;\n appDialogsManager.addDialogAndSetLastMessage({\n peerId: this.fromSavedDialog ? rootScope.myId : peerId,\n container: this.scrollable/* searchGroup.list */,\n avatarSize: 'bigger',\n meAsSaved: false,\n message,\n query,\n noIcons: this.noIcons,\n wrapOptions: {\n middleware\n },\n threadId: this.fromSavedDialog ? ((message as Message.message).saved_peer_id ? getPeerId((message as Message.message).saved_peer_id) : rootScope.myId) : undefined\n });\n } catch(err) {\n console.error('[appSearch] render search result', err);\n }\n });\n\n searchGroup.toggle();\n\n this.minMsgId = messages.length && messages[messages.length - 1].mid;\n\n if(this.loadedCount === -1) {\n this.loadedCount = 0;\n }\n this.loadedCount += messages.length;\n\n if(this.foundCount === -1) {\n this.foundCount = count;\n\n if(searchGroup.nameEl) {\n replaceContent(searchGroup.nameEl, i18n(count ? 'Chat.Search.MessagesFound' : 'Chat.Search.NoMessagesFound', [count]));\n }\n\n this.onSearch?.(this.foundCount);\n }\n }).catch((err) => {\n if(!middleware()) {\n return;\n }\n\n console.error('search error', err);\n this.searchPromise = null;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport enum ConnectionStatus {\n Connected,\n Connecting,\n Closed,\n TimedOut\n};\n\nexport type ConnectionStatusChange = {\n _: 'networkerStatus',\n status: ConnectionStatus,\n dcId: number,\n name: string,\n isFileNetworker: boolean,\n isFileDownload: boolean,\n isFileUpload: boolean,\n retryAt?: number\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport App from '../config/app';\nimport DEBUG from '../config/debug';\nimport {LangPackKey, i18n} from '../lib/langPack';\nimport {logger} from '../lib/logger';\nimport rootScope from '../lib/rootScope';\nimport sessionStorage from '../lib/sessionStorage';\nimport {ConnectionStatus} from '../lib/mtproto/connectionStatus';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport singleInstance from '../lib/mtproto/singleInstance';\nimport InputSearch from './inputSearch';\n\nconst NO_STATUS = false;\nconst TEST_DBLCLICK = false;\nconst HAVE_RECONNECT_BUTTON = false;\n\nexport default class ConnectionStatusComponent {\n public static CHANGE_STATE_DELAY = 400;\n public static INITIAL_DELAY = 2000;\n public static ANIMATION_DURATION = 250;\n\n // private statusContainer: HTMLElement;\n // private statusEl: HTMLElement;\n\n private hadConnect = false;\n private retryAt: number;\n private connecting = false;\n private timedOut = false;\n private updating = false;\n\n private log: ReturnType;\n\n private setFirstConnectionTimeout: number;\n private setStateTimeout: number;\n\n private managers: AppManagers;\n private inputSearch: InputSearch;\n private rAF: number;\n\n public construct(\n managers: AppManagers,\n chatsContainer: HTMLElement,\n inputSearch: InputSearch\n ) {\n this.managers = managers;\n this.inputSearch = inputSearch;\n this.log = logger('CS', undefined, undefined);\n // this.statusContainer = document.createElement('div');\n // this.statusContainer.classList.add('connection-status'/* , 'hide' */);\n\n // this.statusEl = Button('btn-primary bg-warning connection-status-button', {noRipple: true});\n // this.statusContainer.append(this.statusEl);\n this.inputSearch.setPlaceholder('Search');\n\n // chatsContainer.prepend(this.statusContainer);\n\n rootScope.addEventListener('connection_status_change', (status) => {\n // console.log(status);\n\n this.setConnectionStatus();\n });\n\n rootScope.addEventListener('state_synchronizing', () => {\n this.updating = true;\n DEBUG && this.log('updating', this.updating);\n this.setState();\n });\n\n rootScope.addEventListener('state_synchronized', () => {\n DEBUG && this.log('state_synchronized');\n this.updating = false;\n DEBUG && this.log('updating', this.updating);\n this.setState();\n });\n\n this.setFirstConnectionTimeout = window.setTimeout(\n this.setConnectionStatus,\n ConnectionStatusComponent.INITIAL_DELAY\n );\n\n if(TEST_DBLCLICK) {\n let bool = true;\n document.addEventListener('dblclick', () => {\n this.setConnectionStatus(bool ? (\n bool = false,\n ConnectionStatus.Closed\n ) : (\n bool = true,\n this.updating = false,\n ConnectionStatus.Connected\n )\n );\n });\n }\n }\n\n private setConnectionStatus = (overrideStatus?: ConnectionStatus) => {\n Promise.all([\n sessionStorage.get('dc'),\n rootScope.managers.rootScope.getConnectionStatus()\n ]).then(([baseDcId, connectionStatus]) => {\n if(!baseDcId) {\n baseDcId = App.baseDcId;\n }\n\n if(this.setFirstConnectionTimeout) {\n clearTimeout(this.setFirstConnectionTimeout);\n this.setFirstConnectionTimeout = 0;\n }\n\n const status = connectionStatus['NET-' + baseDcId];\n const online = status && (overrideStatus ?? status.status) === ConnectionStatus.Connected;\n\n if(this.connecting && online) {\n this.managers.apiUpdatesManager.forceGetDifference();\n }\n\n if(online && !this.hadConnect) {\n this.hadConnect = true;\n }\n\n this.timedOut = status && (overrideStatus ?? status.status) === ConnectionStatus.TimedOut;\n this.connecting = !online;\n this.retryAt = status && status.retryAt;\n DEBUG && this.log('connecting', this.connecting);\n this.setState();\n });\n };\n\n private wrapSetStatusText = (...args: Parameters) => {\n return () => {\n return this.inputSearch.setPlaceholder(...args);\n };\n };\n\n private getA(langPackKey: LangPackKey, callback: () => void) {\n const a = document.createElement('a');\n a.classList.add('force-reconnect');\n a.append(i18n(langPackKey));\n attachClickEvent(a, (e) => {\n cancelEvent(e);\n callback();\n });\n\n return a;\n }\n\n private setState = () => {\n if(singleInstance.deactivatedReason) {\n return;\n }\n\n let setText: () => void;\n if(this.connecting) {\n if(this.timedOut) {\n // const a = this.getA('ConnectionStatus.ForceReconnect', () => this.managers.networkerFactory.forceReconnect());\n // setText = this.wrapSetStatusText('ConnectionStatus.TimedOut', [a]);\n setText = this.wrapSetStatusText('Updating');\n } else if(this.hadConnect) {\n if(this.retryAt !== undefined) {\n const timerSpan = document.createElement('span');\n const retryAt = this.retryAt;\n const setTime = () => {\n const now = Date.now();\n timerSpan.innerText = '' + Math.max(0, Math.round((retryAt - now) / 1000));\n if(now > retryAt) {\n clearInterval(interval);\n }\n };\n const interval = setInterval(setTime, 1e3);\n setTime();\n\n if(HAVE_RECONNECT_BUTTON) {\n const a = this.getA('ConnectionStatus.Reconnect', () => this.managers.networkerFactory.forceReconnectTimeout());\n setText = this.wrapSetStatusText('ConnectionStatus.ReconnectIn', [timerSpan, a]);\n } else {\n setText = this.wrapSetStatusText('ConnectionStatus.ReconnectInPlain', [timerSpan]);\n }\n } else {\n setText = this.wrapSetStatusText('ConnectionStatus.Reconnecting');\n }\n } else {\n setText = this.wrapSetStatusText('ConnectionStatus.Waiting');\n }\n } else if(this.updating) {\n setText = this.wrapSetStatusText('Updating');\n } else {\n setText = this.wrapSetStatusText('Search');\n }\n\n DEBUG && this.log('setState', this.connecting || this.updating);\n if(this.rAF) window.cancelAnimationFrame(this.rAF);\n this.rAF = window.requestAnimationFrame(() => {\n this.rAF = 0;\n if(this.setStateTimeout) clearTimeout(this.setStateTimeout);\n\n const wasVisible = this.inputSearch.isLoading();\n const cb = () => {\n if(NO_STATUS) {\n return;\n }\n\n setText();\n const isConnecting = this.connecting || this.updating;\n this.inputSearch.toggleLoading(isConnecting);\n this.setStateTimeout = 0;\n DEBUG && this.log('setState: isShown:', isConnecting);\n };\n\n if(wasVisible) {\n cb();\n } else {\n this.setStateTimeout = window.setTimeout(cb, ConnectionStatusComponent.CHANGE_STATE_DELAY);\n }\n });\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {LangPackKey, i18n} from '../lib/langPack';\nimport ButtonIcon from './buttonIcon';\nimport ConnectionStatusComponent from './connectionStatus';\nimport Icon from './icon';\nimport InputField from './inputField';\nimport ProgressivePreloader from './preloader';\nimport SetTransition from './singleTransition';\n\nexport default class InputSearch {\n public container: HTMLElement;\n public input: HTMLElement;\n public inputField: InputField;\n public clearBtn: HTMLElement;\n public searchIcon: HTMLElement;\n public backBtn: HTMLElement;\n\n public prevValue = '';\n public timeout = 0;\n public onChange: (value: string) => void;\n public onClear: (e?: MouseEvent, wasEmpty?: boolean) => void;\n public onDebounce: (start: boolean) => void;\n public onBack: () => void;\n\n private statusPreloader: ProgressivePreloader;\n private currentLangPackKey: LangPackKey;\n public currentPlaceholder: HTMLElement;\n\n private listenerSetter: ListenerSetter;\n private debounceTime: number;\n private verifyDebounce: (value: string, prevValue: string) => boolean;\n\n private alwaysShowClear: boolean;\n private arrowBack: boolean;\n\n constructor(options: {\n placeholder?: LangPackKey,\n onChange?: (value: string) => void,\n onClear?: InputSearch['onClear'],\n onFocusChange?: (isFocused: boolean) => void,\n onDebounce?: (start: boolean) => void,\n onBack?: () => void,\n alwaysShowClear?: boolean,\n noBorder?: boolean,\n noFocusEffect?: boolean,\n debounceTime?: number,\n verifyDebounce?: (value: string, prevValue: string) => boolean,\n arrowBack?: boolean,\n oldStyle?: boolean\n } = {}) {\n this.inputField = new InputField({\n // placeholder,\n plainText: true,\n withBorder: !options.noBorder\n });\n\n this.listenerSetter = new ListenerSetter();\n this.container = this.inputField.container;\n this.container.classList.remove('input-field');\n this.container.classList.add('input-search');\n\n if(options.oldStyle) {\n this.container.classList.add('old-style');\n }\n\n this.onChange = options.onChange;\n this.onClear = options.onClear;\n this.onDebounce = options.onDebounce;\n this.onBack = options.onBack;\n this.debounceTime = options.debounceTime ?? 300;\n this.verifyDebounce = options.verifyDebounce;\n this.alwaysShowClear = options.alwaysShowClear;\n\n const input = this.input = this.inputField.input;\n input.classList.add('input-search-input');\n\n if(!options.noFocusEffect) {\n input.classList.add('with-focus-effect');\n }\n\n const searchIcon = this.searchIcon = this.createIcon('search', 'input-search-icon');\n const clearBtn = this.clearBtn = this.createButtonIcon('close', 'input-search-clear');\n\n this.listenerSetter.add(input)('input', this.onInput);\n attachClickEvent(clearBtn, this.onClearClick, {listenerSetter: this.listenerSetter, cancelMouseDown: true});\n\n if(options.placeholder) {\n (input as HTMLInputElement).placeholder = ' ';\n this.setPlaceholder(options.placeholder);\n }\n\n if(options.onFocusChange) {\n this.listenerSetter.add(input)('focusin', () => {\n options.onFocusChange?.(true);\n });\n\n this.listenerSetter.add(input)('focusout', () => {\n options.onFocusChange?.(false);\n });\n }\n\n this.container.append(searchIcon, clearBtn);\n\n this.setArrowBack(options.arrowBack);\n }\n\n public setArrowBack = (arrowBack: boolean) => {\n if(this.arrowBack === arrowBack) return;\n this.arrowBack = arrowBack;\n\n this.container.classList.toggle('with-arrow-back', arrowBack);\n\n if(arrowBack && !this.backBtn) {\n this.backBtn = this.createButtonIcon('arrow_prev', 'input-search-icon', 'input-search-back');\n this.container.append(this.backBtn);\n attachClickEvent(this.backBtn, this.onBack, {listenerSetter: this.listenerSetter, cancelMouseDown: true});\n }\n\n this.searchIcon.classList.toggle('hide', arrowBack);\n this.backBtn && this.backBtn.classList.toggle('hide', !arrowBack);\n this.clearBtn.classList.toggle('always-visible', !arrowBack && !!this.alwaysShowClear);\n };\n\n public createButtonIcon(icon: Icon, ...args: string[]) {\n args ??= [];\n args.push('input-search-part', 'input-search-button');\n return ButtonIcon(icon + ' ' + args.join(' '), {noRipple: true});\n }\n\n public createIcon(icon: Icon, ...args: string[]) {\n return Icon(icon, 'input-search-part', ...args);\n }\n\n public isLoading() {\n return this.container.classList.contains('is-connecting');\n }\n\n public toggleLoading(loading: boolean) {\n const another = this.arrowBack ? this.clearBtn : this.searchIcon;\n if(!this.statusPreloader) {\n this.statusPreloader = new ProgressivePreloader({cancelable: false});\n this.statusPreloader.constructContainer({color: 'transparent', bold: true});\n this.statusPreloader.construct?.();\n this.statusPreloader.preloader.classList.add('is-visible', 'will-animate');\n another.classList.add('will-animate');\n }\n\n if(loading && !this.statusPreloader.preloader.parentElement) {\n this.container.append(this.statusPreloader.preloader);\n }\n\n this.statusPreloader.preloader.classList.toggle('is-hiding', !loading);\n another.classList.toggle('is-hiding', loading || (another === this.clearBtn && this.inputField.isEmpty()));\n SetTransition({\n element: this.container,\n className: 'is-connecting',\n forwards: loading,\n duration: ConnectionStatusComponent.ANIMATION_DURATION,\n onTransitionEnd: loading ? undefined : () => {\n this.statusPreloader.preloader.remove();\n }\n // useRafs: this.statusPreloader.preloader.isConnected ? 0 : 2\n });\n }\n\n public setPlaceholder = (langPackKey: LangPackKey, args?: any[]) => {\n if(this.currentLangPackKey === langPackKey) return;\n this.currentLangPackKey = langPackKey;\n\n const oldPlaceholder = this.currentPlaceholder;\n if(oldPlaceholder) {\n SetTransition({\n element: oldPlaceholder,\n className: 'is-hiding',\n forwards: true,\n duration: ConnectionStatusComponent.ANIMATION_DURATION,\n onTransitionEnd: () => {\n oldPlaceholder.remove();\n }\n });\n }\n\n this.currentPlaceholder = i18n(langPackKey, args);\n this.currentPlaceholder.classList.add('input-search-placeholder', 'will-animate');\n this.container.append(this.currentPlaceholder);\n };\n\n onInput = () => {\n if(!this.onChange) return;\n\n const {value, prevValue} = this;\n if(value === prevValue) {\n return;\n }\n\n this.prevValue = value;\n if(this.verifyDebounce?.(value, prevValue) === false) {\n this.clearTimeout(false);\n this.onChange(value);\n return;\n }\n\n this.clearTimeout(true);\n this.timeout = window.setTimeout(() => {\n this.onDebounce?.(false);\n this.onChange(value);\n }, this.debounceTime);\n };\n\n onClearClick = (e?: MouseEvent) => {\n const isEmpty = this.inputField.isEmpty();\n this.value = '';\n this.onChange?.('');\n this.onClear?.(e, isEmpty);\n };\n\n clearTimeout = (debounceStart: boolean) => {\n clearTimeout(this.timeout);\n this.onDebounce?.(debounceStart);\n };\n\n get value() {\n return this.inputField.value;\n }\n\n set value(value: string) {\n this.prevValue = value;\n this.clearTimeout(false);\n this.inputField.value = value;\n }\n\n public remove() {\n this.clearTimeout(false);\n this.verifyDebounce = undefined;\n this.listenerSetter.removeAll();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport EventListenerBase, {EventListenerListeners} from '../helpers/eventListenerBase';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {getMiddleware, MiddlewareHelper} from '../helpers/middleware';\nimport noop from '../helpers/noop';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport {i18n, LangPackKey} from '../lib/langPack';\nimport ButtonIcon from './buttonIcon';\nimport Scrollable from './scrollable';\nimport SidebarSlider from './slider';\n\nexport interface SliderSuperTabConstructable {\n new(slider: SidebarSlider, destroyable: boolean): T;\n}\n\nexport interface SliderSuperTabEventableConstructable {\n new(slider: SidebarSlider, destroyable: boolean): SliderSuperTabEventable;\n}\n\nexport default class SliderSuperTab {\n public static getInitArgs?(...args: any[]): any;\n\n public container: HTMLElement;\n\n public header: HTMLElement;\n public closeBtn: HTMLElement;\n public title: HTMLElement;\n\n public content: HTMLElement;\n public scrollable: Scrollable;\n\n public slider: SidebarSlider;\n public destroyable: boolean;\n public listenerSetter: ListenerSetter;\n\n public managers: AppManagers;\n public middlewareHelper: MiddlewareHelper;\n\n public isConfirmationNeededOnClose: () => void | boolean | Promise; // should return boolean instantly or `Promise` from `confirmationPopup`\n\n constructor(slider: SidebarSlider, destroyable?: boolean) {\n this._constructor(slider, destroyable);\n }\n\n public _constructor(slider: SidebarSlider, destroyable = true): any {\n this.slider = slider;\n this.middlewareHelper = slider ? slider.getMiddleware().create() : getMiddleware();\n this.destroyable = destroyable;\n\n this.container = document.createElement('div');\n this.container.classList.add('tabs-tab', 'sidebar-slider-item');\n\n // * Header\n this.header = document.createElement('div');\n this.header.classList.add('sidebar-header');\n\n this.closeBtn = ButtonIcon('left sidebar-close-button', {noRipple: true});\n this.title = document.createElement('div');\n this.title.classList.add('sidebar-header__title');\n this.header.append(this.closeBtn, this.title);\n\n // * Content\n this.content = document.createElement('div');\n this.content.classList.add('sidebar-content');\n\n this.scrollable = new Scrollable(this.content, undefined, undefined, true);\n this.scrollable.attachBorderListeners(this.container);\n\n this.container.append(this.header, this.content);\n\n this.slider?.addTab(this);\n\n this.listenerSetter = new ListenerSetter();\n }\n\n public close() {\n return this.slider.closeTab(this);\n }\n\n public async open(...args: Parameters) {\n if(this.init) {\n try {\n const result = this.init(...args);\n this.init = null;\n\n if(result instanceof Promise) {\n await result;\n }\n } catch(err) {\n console.error('open tab error', err);\n }\n }\n\n this.slider.selectTab(this);\n }\n\n public init(...args: any[]): Promise | any {\n\n }\n\n protected onOpen() {}\n protected onOpenAfterTimeout() {}\n protected onClose() {}\n\n protected onCloseAfterTimeout() {\n if(this.destroyable) { // ! WARNING, пока что это будет работать только с самой последней внутренней вкладкой !\n this.slider?.deleteTab(this);\n this.container.remove();\n this.scrollable.destroy();\n this.listenerSetter?.removeAll();\n this.middlewareHelper?.destroy();\n }\n }\n\n protected setTitle(key: LangPackKey) {\n this.title.replaceChildren(i18n(key));\n }\n}\n\nexport class SliderSuperTabEventable extends SliderSuperTab {\n public eventListener: EventListenerBase<{\n destroy: () => void | Promise,\n destroyAfter: (promise: Promise) => void,\n close: () => void\n } & T>;\n\n constructor(slider: SidebarSlider) {\n super(slider);\n this.eventListener = new EventListenerBase();\n }\n\n onClose() {\n // @ts-ignore\n this.eventListener.dispatchEvent('close');\n }\n\n onCloseAfterTimeout() {\n // @ts-ignore\n const results = this.eventListener.dispatchResultableEvent('destroy');\n // @ts-ignore\n this.eventListener.dispatchEvent('destroyAfter', Promise.all(results).then(noop, noop));\n this.eventListener.cleanup();\n return super.onCloseAfterTimeout();\n }\n}\n\n/* // @ts-ignore\ninterface SliderSuperEventsTab extends SliderSuperTab, EventListenerBase<{}> {\n superConstructor: (...args: any[]) => any;\n}\nclass SliderSuperEventsTab implements SliderSuperEventsTab {\n constructor(slider: SidebarSlider) {\n this.superConstructor([slider, true]);\n }\n}\napplyMixins(SliderSuperEventsTab, [SliderSuperTab, EventListenerBase]);\n\n(window as any).lol = SliderSuperEventsTab\n\nexport {SliderSuperEventsTab}; */\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {horizontalMenu} from './horizontalMenu';\nimport TransitionSlider from './transition';\nimport appNavigationController, {NavigationItem} from './appNavigationController';\nimport SliderSuperTab, {SliderSuperTabConstructable} from './sliderTab';\nimport indexOfAndSplice from '../helpers/array/indexOfAndSplice';\nimport safeAssign from '../helpers/object/safeAssign';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport {getMiddleware, MiddlewareHelper} from '../helpers/middleware';\nimport {MaybePromise} from '../types';\n\nconst TRANSITION_TIME = 250;\n\nexport {SliderSuperTab};\n\nexport default class SidebarSlider {\n protected _selectTab: ReturnType;\n protected historyTabIds: (number | SliderSuperTab)[] = []; // * key is any, since right sidebar is ugly nowz\n protected tabsContainer: HTMLElement;\n public sidebarEl: HTMLElement;\n protected tabs: Map; // * key is any, since right sidebar is ugly now\n private canHideFirst = false;\n private navigationType: NavigationItem['type'];\n protected managers: AppManagers;\n protected middlewareHelper: MiddlewareHelper;\n public onOpenTab: () => MaybePromise;\n\n constructor(options: {\n sidebarEl: SidebarSlider['sidebarEl'],\n tabs?: SidebarSlider['tabs'],\n canHideFirst?: SidebarSlider['canHideFirst'],\n navigationType: SidebarSlider['navigationType']\n }) {\n safeAssign(this, options);\n\n this.tabs ??= new Map();\n\n this.tabsContainer = this.sidebarEl.querySelector('.sidebar-slider');\n this._selectTab = TransitionSlider({\n content: this.tabsContainer,\n type: 'navigation',\n transitionTime: TRANSITION_TIME\n });\n if(!this.canHideFirst) {\n this._selectTab(0);\n }\n\n this.middlewareHelper = getMiddleware();\n\n // Array.from(this.sidebarEl.querySelectorAll('.sidebar-close-button') as any as HTMLElement[]).forEach((el) => {\n // attachClickEvent(el, this.onCloseBtnClick);\n // });\n }\n\n public getMiddleware() {\n return this.middlewareHelper.get();\n }\n\n public onCloseBtnClick = () => {\n const item = appNavigationController.findItemByType(this.navigationType);\n if(item) {\n appNavigationController.back(this.navigationType);\n } else if(this.historyTabIds.length) {\n this.closeTab(this.historyTabIds[this.historyTabIds.length - 1]);\n }\n // this.closeTab();\n };\n\n public closeTab = (id?: number | SliderSuperTab, animate?: boolean, isNavigation?: boolean) => {\n if(id !== undefined && this.historyTabIds[this.historyTabIds.length - 1] !== id) {\n this.removeTabFromHistory(id);\n return false;\n }\n\n // console.log('sidebar-close-button click:', this.historyTabIDs);\n const closingId = this.historyTabIds.pop(); // pop current\n this.onCloseTab(closingId, animate, isNavigation);\n\n const tab = this.historyTabIds[this.historyTabIds.length - 1];\n this._selectTab(tab !== undefined ? (tab instanceof SliderSuperTab ? tab.container : tab) : (this.canHideFirst ? -1 : 0), animate);\n return true;\n };\n\n protected pushNavigationItem(tab: SliderSuperTab) {\n const navigationItem: NavigationItem = {\n type: this.navigationType,\n onPop: (canAnimate) => {\n if(tab.isConfirmationNeededOnClose) {\n const result = tab.isConfirmationNeededOnClose();\n if(result) {\n Promise.resolve(result).then(() => {\n appNavigationController.removeItem(navigationItem);\n this.closeTab(undefined, undefined, true);\n });\n\n return false;\n }\n }\n\n this.closeTab(undefined, canAnimate, true);\n return true;\n }\n };\n\n // if(!this.canHideFirst || this.historyTabIds.length) {\n appNavigationController.pushItem(navigationItem);\n // }\n }\n\n public async selectTab(id: number | SliderSuperTab) {\n /* if(id instanceof SliderSuperTab) {\n id = id.id;\n } */\n\n if(this.historyTabIds[this.historyTabIds.length - 1] === id) {\n return false;\n }\n\n const tab: SliderSuperTab = id instanceof SliderSuperTab ? id : this.tabs.get(id);\n this.onOpenTab && await this.onOpenTab();\n\n if(tab) {\n // @ts-ignore\n tab.onOpen?.();\n\n // @ts-ignore\n if(tab.onOpenAfterTimeout) {\n setTimeout(() => {\n // @ts-ignore\n tab.onOpenAfterTimeout();\n }, TRANSITION_TIME);\n }\n }\n\n this.pushNavigationItem(tab);\n\n this.historyTabIds.push(id);\n this._selectTab(id instanceof SliderSuperTab ? id.container : id);\n return true;\n }\n\n public removeTabFromHistory(id: number | SliderSuperTab) {\n indexOfAndSplice(this.historyTabIds, id);\n this.onCloseTab(id, undefined);\n }\n\n public sliceTabsUntilTab(tabConstructor: SliderSuperTabConstructable, preserveTab: SliderSuperTab) {\n for(let i = this.historyTabIds.length - 1; i >= 0; --i) {\n const tab = this.historyTabIds[i];\n if(tab === preserveTab) continue;\n else if(tab instanceof tabConstructor) {\n break;\n }\n\n this.removeTabFromHistory(tab);\n // appNavigationController.removeByType(this.navigationType, true);\n }\n }\n\n public getTab(tabConstructor: SliderSuperTabConstructable) {\n return this.historyTabIds.find((t) => t instanceof tabConstructor) as T;\n }\n\n public getHistory() {\n return this.historyTabIds;\n }\n\n public isTabExists(tabConstructor: SliderSuperTabConstructable) {\n return !!this.getTab(tabConstructor);\n }\n\n protected onCloseTab(id: number | SliderSuperTab, animate: boolean, isNavigation?: boolean) {\n if(!isNavigation) {\n appNavigationController.removeByType(this.navigationType, true);\n }\n\n const tab: SliderSuperTab = id instanceof SliderSuperTab ? id : this.tabs.get(id);\n if(tab) {\n try {\n // @ts-ignore\n tab.onClose?.();\n } catch(err) {\n console.error('tab onClose error', tab);\n }\n\n // @ts-ignore\n if(tab.onCloseAfterTimeout) {\n setTimeout(() => {\n // @ts-ignore\n tab.onCloseAfterTimeout();\n }, TRANSITION_TIME + 30);\n }\n }\n }\n\n public addTab(tab: SliderSuperTab) {\n if(!tab.container.parentElement) {\n this.tabsContainer.append(tab.container);\n\n if(tab.closeBtn) {\n tab.closeBtn.addEventListener('click', this.onCloseBtnClick);\n }\n }\n }\n\n public deleteTab(tab: SliderSuperTab) {\n this.tabs.delete(tab);\n }\n\n public createTab(\n ctor: SliderSuperTabConstructable,\n destroyable = true,\n doNotAppend?: boolean\n ) {\n const tab = new ctor(doNotAppend ? undefined : this, destroyable);\n tab.managers = this.managers;\n return tab;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {CancellablePromise} from '../helpers/cancellablePromise';\nimport type {InputFile} from '../layer';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport PopupElement from './popups';\nimport PopupAvatar from './popups/avatar';\nimport Icon from './icon';\n\nexport default class AvatarEdit {\n public container: HTMLElement;\n private canvas: HTMLCanvasElement;\n private icon: HTMLSpanElement;\n\n constructor(onChange: (uploadAvatar: () => CancellablePromise) => void, options?: ConstructorParameters[0]) {\n this.container = document.createElement('div');\n this.container.classList.add('avatar-edit');\n\n this.canvas = document.createElement('canvas');\n this.canvas.classList.add('avatar-edit-canvas');\n\n this.icon = Icon('cameraadd', 'avatar-edit-icon');\n\n this.container.append(this.canvas, this.icon);\n\n attachClickEvent(this.container, () => {\n PopupElement.createPopup(PopupAvatar, options).open(this.canvas, onChange);\n });\n }\n\n public clear() {\n const ctx = this.canvas.getContext('2d');\n ctx.clearRect(0, 0, this.canvas.width, this.canvas.height);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Button from './button';\n\nconst ButtonCorner = (options: Partial<{className: string, icon: Icon, noRipple: true, onlyMobile: true, asDiv: boolean}> = {}) => {\n const button = Button('btn-circle btn-corner z-depth-1' + (options.className ? ' ' + options.className : ''), options);\n button.tabIndex = -1;\n return button;\n};\n\nexport default ButtonCorner;\n","export default function numberThousandSplitter(x: number, joiner = ' ') {\n if(x === undefined) return '';\n const parts = x.toString().split('.');\n parts[0] = parts[0].replace(/\\B(?=(\\d{3})+(?!\\d))/g, joiner);\n return parts.join('.');\n}\n\nexport function numberThousandSplitterForWatching(x: number) {\n if(x === undefined) return '';\n return numberThousandSplitter(x, ',');\n}\n\nexport function numberThousandSplitterForStars(x: number) {\n if(x === undefined) return '';\n return numberThousandSplitter(x, ',');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {formatFullSentTimeRaw} from '../../helpers/date';\nimport numberThousandSplitter from '../../helpers/number/numberThousandSplitter';\nimport {User} from '../../layer';\nimport {LangPackKey, i18n} from '../../lib/langPack';\nimport {REPLIES_PEER_ID, SERVICE_PEER_ID} from '../../lib/mtproto/mtproto_config';\n\nexport default function getUserStatusString(user: User.user): HTMLElement {\n if(!user) {\n return document.createElement('span');\n }\n\n let key: LangPackKey;\n let args: any[];\n\n switch(user.id) {\n case REPLIES_PEER_ID.toUserId():\n key = 'Peer.RepliesNotifications';\n break;\n case SERVICE_PEER_ID.toUserId():\n key = 'Peer.ServiceNotifications';\n break;\n default: {\n if(user.pFlags.bot) {\n if(user.bot_active_users === undefined) {\n key = 'Bot';\n break;\n }\n\n key = 'BotUsers';\n args = [numberThousandSplitter(user.bot_active_users)];\n break;\n }\n\n if(user.pFlags.support) {\n key = 'SupportStatus';\n break;\n }\n\n switch(user.status?._) {\n case 'userStatusRecently': {\n key = 'Lately';\n break;\n }\n\n case 'userStatusLastWeek': {\n key = 'WithinAWeek';\n break;\n }\n\n case 'userStatusLastMonth': {\n key = 'WithinAMonth';\n break;\n }\n\n case 'userStatusOffline': {\n const date = user.status.was_online;\n const today = new Date();\n const now = today.getTime() / 1000 | 0;\n\n const diff = now - date;\n if(diff < 60) {\n key = 'Peer.Status.justNow';\n } else if(diff < 3600) {\n key = 'Peer.Status.minAgo';\n const c = diff / 60 | 0;\n args = [c];\n } else if(diff < 86400 && today.getDate() === new Date(date * 1000).getDate()) {\n key = 'LastSeen.HoursAgo';\n const c = diff / 3600 | 0;\n args = [c];\n } else {\n key = 'Peer.Status.LastSeenAt';\n const {dateEl, timeEl} = formatFullSentTimeRaw(date);\n args = [dateEl, timeEl];\n }\n\n break;\n }\n\n case 'userStatusOnline': {\n key = 'Online';\n break;\n }\n\n default: {\n key = 'ALongTimeAgo';\n break;\n }\n }\n\n break;\n }\n }\n\n return i18n(key, args);\n}\n","export const generateDelimiter = () => {\n const delimiter = document.createElement('div');\n delimiter.classList.add('gradient-delimiter');\n return delimiter;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {LangPackKey, FormatterArguments, i18n_} from '../lib/langPack';\nimport {generateDelimiter} from './generateDelimiter';\nimport Scrollable from './scrollable';\n\nexport type SettingSectionOptions = {\n name?: LangPackKey | HTMLElement,\n nameArgs?: FormatterArguments,\n caption?: LangPackKey | true,\n captionArgs?: FormatterArguments,\n captionOld?: SettingSectionOptions['caption'],\n noDelimiter?: boolean,\n fakeGradientDelimiter?: boolean,\n noShadow?: boolean,\n // fullWidth?: boolean,\n // noPaddingTop?: boolean\n};\n\nconst className = 'sidebar-left-section';\nexport default class SettingSection {\n public container: HTMLElement;\n public innerContainer: HTMLElement;\n public content: HTMLElement;\n public title: HTMLElement;\n public caption: HTMLElement;\n\n private fullWidth: boolean;\n\n constructor(options: SettingSectionOptions = {}) {\n const container = this.container = document.createElement('div');\n container.classList.add(className + '-container');\n\n const innerContainer = this.innerContainer = document.createElement('div');\n innerContainer.classList.add(className);\n\n if(options.noShadow) {\n innerContainer.classList.add('no-shadow');\n }\n\n if(options.fakeGradientDelimiter) {\n innerContainer.append(generateDelimiter());\n innerContainer.classList.add('with-fake-delimiter');\n } else if(!options.noDelimiter) {\n const hr = document.createElement('hr');\n innerContainer.append(hr);\n } else {\n innerContainer.classList.add('no-delimiter');\n }\n\n // if(options.fullWidth) {\n // this.fullWidth = true;\n // }\n\n // if(options.noPaddingTop) {\n // innerContainer.classList.add('no-padding-top');\n // }\n\n const content = this.content = this.generateContentElement();\n\n if(options.name) {\n const title = this.title = document.createElement('div');\n title.classList.add('sidebar-left-h2', className + '-name');\n if(typeof(options.name) === 'string') {\n i18n_({element: title, key: options.name, args: options.nameArgs});\n } else {\n title.append(options.name);\n }\n content.append(title);\n }\n\n container.append(innerContainer);\n\n const caption = options.caption ?? options.captionOld;\n if(caption) {\n const el = this.caption = this.generateContentElement();\n el.classList.add(className + '-caption');\n\n if(!options.captionOld) {\n container.append(el);\n }\n\n if(caption !== true) {\n i18n_({element: el, key: caption, args: options.captionArgs});\n }\n }\n }\n\n public generateContentElement() {\n const content = document.createElement('div');\n content.classList.add(className + '-content');\n\n // if(this.fullWidth) {\n // content.classList.add('full-width');\n // }\n\n this.innerContainer.append(content);\n return content;\n }\n}\n\nexport const generateSection = (appendTo: Scrollable, name?: LangPackKey, caption?: LangPackKey) => {\n const section = new SettingSection({name, caption});\n appendTo.append(section.container);\n return section.content;\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputFile} from '../../../layer';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport InputField from '../../inputField';\nimport {SliderSuperTab} from '../../slider';\nimport AvatarEdit from '../../avatarEdit';\nimport I18n, {joinElementsWith} from '../../../lib/langPack';\nimport ButtonCorner from '../../buttonCorner';\nimport getUserStatusString from '../../wrappers/getUserStatusString';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport SettingSection from '../../settingSection';\n\ninterface OpenStreetMapInterface {\n place_id?: number;\n license?: string;\n osm_type?: string;\n osm_id?: number;\n lat?: string;\n lon?: string;\n display_name: string;\n address?: object;\n boundingbox?: object;\n}\n\nexport default class AppNewGroupTab extends SliderSuperTab {\n private avatarEdit: AvatarEdit;\n private uploadAvatar: () => Promise = null;\n private peerIds: PeerId[];\n private isGeoChat: boolean = false;\n private nextBtn: HTMLButtonElement;\n private groupNameInputField: InputField;\n private list: HTMLUListElement;\n private groupLocationInputField: InputField;\n private userLocationCoords: {lat: number, long: number};\n private userLocationAddress: string;\n\n public init({\n peerIds,\n isGeoChat = false,\n onCreate,\n openAfter = true,\n title,\n asChannel = false\n }: {\n peerIds: PeerId[],\n isGeoChat?: boolean,\n onCreate?: (chatId: ChatId) => void,\n openAfter?: boolean,\n title?: string,\n asChannel?: boolean\n }) {\n this.isGeoChat = isGeoChat;\n this.peerIds = peerIds;\n\n this.container.classList.add('new-group-container');\n this.setTitle('NewGroup');\n\n this.avatarEdit = new AvatarEdit((_upload) => {\n this.uploadAvatar = _upload;\n });\n\n const section = new SettingSection({});\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.groupNameInputField = new InputField({\n label: 'CreateGroup.NameHolder',\n maxLength: 128\n });\n\n this.groupLocationInputField = new InputField({\n label: 'ChatLocation',\n name: 'location',\n canBeEdited: false\n });\n\n inputWrapper.append(\n this.groupNameInputField.container,\n this.groupLocationInputField.container\n );\n\n this.listenerSetter.add(this.groupNameInputField.input)('input', () => {\n const value = this.groupNameInputField.value;\n let valueCheck = !!value.length && !this.groupNameInputField.input.classList.contains('error');\n if(this.isGeoChat) valueCheck = valueCheck && !!this.userLocationCoords && !!this.userLocationAddress;\n this.nextBtn.classList.toggle('is-visible', !!valueCheck);\n });\n\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\n\n attachClickEvent(this.nextBtn, () => {\n const title = this.groupNameInputField.value;\n const userIds = this.peerIds.map((peerId) => peerId.toUserId());\n\n let promise: Promise;\n if(this.isGeoChat) {\n if(!this.userLocationAddress || !this.userLocationCoords) return;\n promise = this.managers.appChatsManager.createChannel({\n title,\n about: '',\n geo_point: {\n _: 'inputGeoPoint',\n ...this.userLocationCoords\n },\n address: this.userLocationAddress,\n megagroup: true\n }).then((chatId) => {\n if(this.uploadAvatar) {\n this.uploadAvatar().then((inputFile) => {\n this.managers.appChatsManager.editPhoto(chatId, inputFile);\n });\n }\n\n if(this.peerIds.length) {\n this.managers.appChatsManager.inviteToChannel(chatId, this.peerIds);\n }\n\n return chatId;\n });\n } else {\n this.nextBtn.disabled = true;\n\n if(asChannel) {\n promise = this.managers.appChatsManager.createChannel({\n megagroup: true,\n title,\n about: ''\n });\n\n if(peerIds.length) {\n promise = promise.then((chatId) => {\n return this.managers.appChatsManager.inviteToChannel(chatId, userIds)\n .then(() => chatId);\n });\n }\n } else {\n promise = this.managers.appChatsManager.createChat(\n title,\n userIds\n );\n }\n\n promise = promise.then((chatId) => {\n if(this.uploadAvatar) {\n this.uploadAvatar().then((inputFile) => {\n this.managers.appChatsManager.editPhoto(chatId, inputFile);\n });\n }\n\n return chatId;\n });\n }\n\n if(!promise) {\n return;\n }\n\n promise.then((chatId) => {\n onCreate?.(chatId);\n this.close();\n if(openAfter) appImManager.setInnerPeer({peerId: chatId.toPeerId(true)});\n });\n }, {listenerSetter: this.listenerSetter});\n\n const chatsSection = new SettingSection({\n name: 'Members',\n nameArgs: [this.peerIds.length]\n });\n\n if(!this.peerIds.length) {\n chatsSection.container.classList.add('hide');\n }\n\n const list = this.list = appDialogsManager.createChatList({\n new: true\n });\n\n chatsSection.content.append(list);\n\n section.content.append(this.avatarEdit.container, inputWrapper);\n\n this.content.append(this.nextBtn);\n this.scrollable.append(section.container, chatsSection.container);\n\n if(isGeoChat) {\n this.setTitle('NearbyCreateGroup');\n this.groupLocationInputField.container.classList.remove('hide');\n this.groupLocationInputField.setValueSilently(I18n.format('Loading', true));\n this.startLocating();\n } else {\n this.groupLocationInputField.container.classList.add('hide');\n }\n\n const usersPromise = Promise.all(this.peerIds.map((peerId) => this.managers.appUsersManager.getUser(peerId.toUserId())));\n const myUserPromise = this.managers.appUsersManager.getSelf();\n\n const a = usersPromise.then((users) => {\n return users.map((user) => {\n const {dom} = appDialogsManager.addDialogNew({\n peerId: user.id.toPeerId(false),\n container: this.list,\n rippleEnabled: false,\n avatarSize: 'abitbigger',\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n dom.lastMessageSpan.append(getUserStatusString(user));\n })\n });\n\n let setTitlePromise: Promise;\n\n if(!title) setTitlePromise = this.peerIds.length > 0 && this.peerIds.length < 5 ? Promise.all([usersPromise, myUserPromise]).then(([users, myUser]) => {\n const names = users.map((user) => [user.first_name, user.last_name].filter(Boolean).join(' '));\n names.unshift(myUser.first_name);\n\n const joined = joinElementsWith(names, (isLast) => isLast ? ', ' : ' & ').join('');\n this.groupNameInputField.setDraftValue(joined);\n }) : Promise.resolve();\n else {\n this.groupNameInputField.setDraftValue(title);\n }\n\n return Promise.all([\n a,\n setTitlePromise\n ]);\n }\n\n public onCloseAfterTimeout() {\n this.avatarEdit.clear();\n this.uploadAvatar = null;\n this.groupNameInputField.value = '';\n this.groupLocationInputField.container.classList.add('hide');\n this.nextBtn.disabled = false;\n }\n\n private startLocating() {\n navigator.geolocation.getCurrentPosition((location) => {\n this.userLocationCoords = {\n lat: location.coords.latitude,\n long: location.coords.longitude\n };\n\n let uri = 'https://nominatim.openstreetmap.org/reverse';\n uri += '?lat='+location.coords.latitude;\n uri += '&lon='+location.coords.longitude;\n uri += '&format=json';\n uri += '&addressdetails=1';\n uri += '&accept-language=en';\n fetch(uri)\n .then((response) => response.json())\n .then((response: OpenStreetMapInterface) => {\n this.userLocationAddress = response.display_name;\n this.groupLocationInputField.setValueSilently(response.display_name);\n });\n }, (error) => {\n if(error instanceof GeolocationPositionError) {\n this.groupLocationInputField.setValueSilently('Location permission denied. Please retry later.');\n } else {\n this.groupLocationInputField.setValueSilently('An error has occurred. Please retry later.');\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport whichChild from './whichChild';\n\nexport default function positionElementByIndex(element: HTMLElement, container: HTMLElement, pos: number, prevPos?: number) {\n if(prevPos === undefined) {\n prevPos = element.parentElement === container ? whichChild(element) : -1;\n }\n\n if(prevPos === pos) {\n return false;\n } else if(prevPos !== -1 && prevPos < pos) { // was higher\n pos += 1;\n }\n\n if(!pos) {\n container.prepend(element);\n } else if(container.childElementCount > pos) {\n container.insertBefore(element, container.children[pos]);\n } else {\n container.append(element);\n }\n\n return true;\n}\n","export default function insertInDescendSortedArray(array: Array, element: T, getProperty: K, pos?: number, cmp?: (val1: number, val2: number) => number): number;\nexport default function insertInDescendSortedArray(array: Array, element: T, getProperty?: (element: T) => number, pos?: number, cmp?: (val1: number, val2: number) => number): number;\nexport default function insertInDescendSortedArray(array: Array, element: T, getProperty: K | ((element: T) => T[K]), pos?: number, cmp?: (val1: number, val2: number) => number): number {\n if(!getProperty) {\n getProperty = (element) => element as any;\n } else if(typeof(getProperty) !== 'function') {\n const property = getProperty;\n getProperty = (element) => element[property];\n }\n\n cmp ||= (val1, val2) => val1 - val2;\n\n const sortProperty = getProperty(element);\n\n pos ??= array.indexOf(element);\n if(pos !== -1) {\n const prev = array[pos - 1];\n const next = array[pos + 1];\n if((!prev || cmp(getProperty(prev), sortProperty) >= 0) && (!next || cmp(getProperty(next), sortProperty) <= 0)) {\n // console.warn('same pos', pos, sortProperty, prev, next);\n return pos;\n }\n\n array.splice(pos, 1);\n }\n\n const len = array.length;\n if(!len || cmp(sortProperty, getProperty(array[len - 1])) <= 0) {\n return array.push(element) - 1;\n } else if(cmp(sortProperty, getProperty(array[0])) >= 0) {\n array.unshift(element);\n return 0;\n } else {\n for(let i = 0; i < len; i++) {\n if(cmp(sortProperty, getProperty(array[i])) > 0) {\n array.splice(i, 0, element);\n return i;\n }\n }\n }\n\n console.error('wtf', array, element);\n return array.indexOf(element);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport makeError from './makeError';\n\nconst error = makeError('MIDDLEWARE');\nexport default function middlewarePromise(middleware: () => boolean, throwWhat: any = error) {\n return (promise: T): T => {\n if(!(promise instanceof Promise)) {\n if(promise instanceof Error) {\n throw promise;\n } else {\n return promise;\n }\n }\n\n return (promise as any as Promise).then((result) => {\n if(!middleware()) {\n throw throwWhat;\n }\n\n return result;\n }) as any;\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {logger, LogTypes} from '../lib/logger';\nimport insertInDescendSortedArray from './array/insertInDescendSortedArray';\nimport {getMiddleware, Middleware, MiddlewareHelper} from './middleware';\nimport middlewarePromise from './middlewarePromise';\nimport safeAssign from './object/safeAssign';\nimport pause from './schedulers/pause';\n\nexport type SortedElementBase = {\n id: T,\n index: number\n};\n\nlet id = 0;\n\nexport class BatchProcessor {\n protected queue: MaybePromise[];\n protected promise: Promise;\n\n protected middlewareHelper: MiddlewareHelper;\n protected log: ReturnType;\n\n protected process: (batch: Item[], m: ReturnType, log: BatchProcessor['log']) => Promise;\n protected possibleError: any;\n\n constructor(options: {\n log?: BatchProcessor['log'],\n // middleware: MiddlewareHelper,\n process: BatchProcessor['process'],\n possibleError?: BatchProcessor['possibleError']\n }) {\n safeAssign(this, options);\n\n this.queue = [];\n this.middlewareHelper ??= getMiddleware();\n\n const prefix = 'BATCH-PROCESSOR-' + ++id;\n const logTypes = LogTypes.Log | LogTypes.Warn | LogTypes.Error;\n if(this.log) {\n this.log = this.log.bindPrefix(prefix, logTypes);\n } else {\n this.log = logger(prefix, logTypes);\n }\n }\n\n public get queuePromise() {\n return this.promise;\n }\n\n public clear() {\n this.log('clear');\n this.queue.length = 0;\n this.promise = undefined;\n this.middlewareHelper.clean();\n }\n\n public addToQueue(item: BatchProcessor['queue'][0]) {\n this.queue.push(item);\n return this.setQueue();\n }\n\n protected setQueue() {\n if(!this.queue.length) {\n return Promise.resolve();\n }\n\n if(this.promise) {\n return this.promise;\n }\n\n const middleware = this.middlewareHelper.get();\n const log = this.log.bindPrefix('queue');\n const m = middlewarePromise(middleware, this.possibleError);\n\n const processQueue = async(): Promise => {\n log('start', this.queue.length);\n\n const queue = this.queue.splice(0, this.queue.length);\n\n const perf = performance.now();\n const promises = queue.map((promise) => {\n if(promise instanceof Promise) {\n promise.then((details) => {\n log('render item time', performance.now() - perf, details);\n });\n }\n\n return promise;\n });\n\n const renderedQueue = await m(Promise.all(promises));\n await m(this.process(renderedQueue, m, log));\n\n log('queue rendered');\n\n if(this.queue.length) {\n log('have new items to render');\n return processQueue();\n } else {\n log('end');\n }\n };\n\n log('setting pause');\n const promise = this.promise = m(pause(0))\n .then(\n () => processQueue().catch((err: ApiError) => {\n if(err !== this.possibleError) {\n log.error('process queue error', err);\n }\n\n throw err;\n }),\n (err) => {\n log('pause has been cleared');\n throw err;\n }\n )\n .finally(() => {\n if(this.promise === promise) {\n this.promise = undefined;\n }\n });\n\n return promise;\n }\n}\n\nexport default class SortedList {\n protected elements: Map;\n protected sorted: Array;\n\n protected getIndex: (element: SortedElement) => Promise | number;\n protected onDelete: (element: SortedElement) => void;\n protected onUpdate: (element: SortedElement) => void;\n protected onSort: (element: SortedElement, idx: number) => void;\n protected onElementCreate: (base: SortedElementBase) => Promise | SortedElement;\n\n protected updateElementWith = (callback: () => void) => callback();\n protected updateListWith = (callback: (canUpdate: boolean | undefined) => void) => callback(true);\n\n protected middlewareHelper: MiddlewareHelper;\n\n protected batchProcessor: BatchProcessor;\n\n protected log: ReturnType;\n\n constructor(options: {\n getIndex: SortedList['getIndex'],\n onDelete?: SortedList['onDelete'],\n onUpdate?: SortedList['onUpdate'],\n onSort?: SortedList['onSort'],\n onElementCreate: SortedList['onElementCreate'],\n\n updateElementWith?: SortedList['updateElementWith'],\n updateListWith?: SortedList['updateListWith'],\n\n log?: SortedList['log'],\n\n middleware?: Middleware\n }) {\n safeAssign(this, options);\n\n this.elements = new Map();\n this.sorted = [];\n this.middlewareHelper = options.middleware?.create() || getMiddleware();\n\n this.batchProcessor = new BatchProcessor({\n log: this.log,\n process: async(batch, m, log) => {\n // const elements = await Promise.all(batch.map((element) => this.onElementCreate(element)));\n const elements = batch;\n const promises = elements.map((element) => this.update(element.id, element));\n await m(Promise.all(promises));\n }\n });\n }\n\n public clear() {\n this.batchProcessor.clear();\n this.middlewareHelper.clean();\n this.elements.clear();\n this.sorted.length = 0;\n }\n\n protected _updateList() {\n this.elements.forEach((element) => {\n this.update(element.id);\n });\n\n if(this.onSort) {\n this.sorted.forEach((element, idx) => {\n this.onSort(element, idx);\n });\n }\n }\n\n public updateList(callback?: (updated: boolean) => void) {\n const middleware = this.middlewareHelper.get();\n this.updateListWith((canUpdate) => {\n if(!middleware() || (canUpdate !== undefined && !canUpdate)) {\n callback?.(false);\n return;\n }\n\n this._updateList();\n\n callback?.(true);\n });\n }\n\n public has(id: SortedElementId) {\n return this.elements.has(id);\n }\n\n public get(id: SortedElementId) {\n return this.elements.get(id);\n }\n\n public getAll() {\n return this.elements;\n }\n\n public async add(id: SortedElementId) {\n const element = this.get(id);\n if(element) {\n return;\n // return element;\n }\n\n const base: SortedElementBase = {\n id,\n index: 0\n };\n\n this.elements.set(id, base as SortedElement);\n let result = this.onElementCreate(base);\n if(result instanceof Promise) {\n let processed = false;\n result = Promise.race([\n result.then((result) => {\n processed = true;\n return result;\n }),\n pause(1000).then(() => {\n if(!processed) {\n console.error('loadPromises are still pending?', base);\n return base as any;\n }\n })\n ]);\n }\n return this.batchProcessor.addToQueue(result);\n\n // return element;\n }\n\n public delete(id: SortedElementId, noScheduler?: boolean) {\n const element = this.elements.get(id);\n if(!element) {\n return false;\n }\n\n this.elements.delete(id);\n\n const idx = this.sorted.indexOf(element);\n if(idx !== -1) {\n this.sorted.splice(idx, 1);\n }\n\n if(this.onDelete) {\n if(noScheduler) {\n this.onDelete(element);\n } else {\n const middleware = this.middlewareHelper.get();\n this.updateElementWith(() => {\n if(!middleware()) {\n return;\n }\n\n this.onDelete(element);\n });\n }\n }\n\n return true;\n }\n\n public async update(id: SortedElementId, element = this.get(id)) {\n if(!element) {\n return;\n }\n\n element.index = await this.getIndex(element);\n if(this.get(id) !== element) {\n return;\n }\n\n this.onUpdate?.(element);\n\n const idx = insertInDescendSortedArray(this.sorted, element, 'index');\n this.onSort(element, idx);\n }\n}\n","import {ChatFull, ChatParticipants} from '../../../../layer';\n\nexport default function getParticipantsCount(chatFull: ChatFull) {\n return (chatFull as ChatFull.channelFull).participants_count ||\n ((chatFull as ChatFull.chatFull).participants as ChatParticipants.chatParticipants)?.participants?.length ||\n 1;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport callbackify from '../../helpers/callbackify';\nimport numberThousandSplitter from '../../helpers/number/numberThousandSplitter';\nimport {Chat, ChatFull} from '../../layer';\nimport getParticipantsCount from '../../lib/appManagers/utils/chats/getParticipantsCount';\nimport {i18n, LangPackKey} from '../../lib/langPack';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport rootScope from '../../lib/rootScope';\n\nfunction _getChatMembersString(chat: Chat, chatFull: ChatFull) {\n let count: number;\n if(chatFull) {\n count = getParticipantsCount(chatFull);\n } else {\n count = (chat as Chat.chat).participants_count || (chat as any).participants?.participants.length;\n }\n\n const isBroadcast = (chat as Chat.channel).pFlags.broadcast;\n count = count || 1;\n\n const key: LangPackKey = isBroadcast ? 'Peer.Status.Subscribers' : 'Peer.Status.Member';\n return i18n(key, [numberThousandSplitter(count)]);\n}\n\nexport default function getChatMembersString(\n chatId: ChatId,\n managers = rootScope.managers,\n chat?: Chat,\n onlySync?: boolean,\n chatFull?: ChatFull\n) {\n chat ??= apiManagerProxy.getChat(chatId);\n if(chat._ === 'chatForbidden') {\n return i18n('YouWereKicked');\n }\n\n if(onlySync) {\n return _getChatMembersString(chat, undefined);\n }\n\n const result = chatFull || managers.appProfileManager.getCachedFullChat(chatId);\n return callbackify(result, (chatFull) => _getChatMembersString(chat, chatFull));\n}\n","import {ChannelParticipant, ChatParticipant} from '../../../../layer';\n\nexport default function getParticipantRank(participant: ChannelParticipant | ChatParticipant) {\n return (participant as ChannelParticipant.channelParticipantAdmin).rank ||\n (participant._ === 'channelParticipantAdmin' || participant._ === 'chatParticipantAdmin' ? 2 :\n (participant._ === 'chatParticipantCreator' || participant._ === 'channelParticipantCreator' ? 1 : undefined));\n}\n","import getParticipantRank from '../../lib/appManagers/utils/chats/getParticipantRank';\nimport {i18n} from '../../lib/langPack';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\n\nexport default function wrapParticipantRank(rank: Parameters[0] | ReturnType | 0) {\n if(typeof(rank) === 'object') {\n rank = getParticipantRank(rank);\n }\n\n return typeof(rank) === 'number' ?\n i18n(!rank ? 'Chat.ChannelBadge' : (rank === 1 ? 'Chat.OwnerBadge' : 'ChatAdmin')) :\n wrapEmojiText(rank);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type LazyLoadQueue from './lazyLoadQueue';\nimport appDialogsManager, {AppDialogsManager, DialogDom, DialogElement, DialogElementSize} from '../lib/appManagers/appDialogsManager';\nimport {getHeavyAnimationPromise} from '../hooks/useHeavyAnimationCheck';\nimport isInDOM from '../helpers/dom/isInDOM';\nimport positionElementByIndex from '../helpers/dom/positionElementByIndex';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport {fastRaf} from '../helpers/schedulers';\nimport SortedList, {SortedElementBase} from '../helpers/sortedList';\nimport safeAssign from '../helpers/object/safeAssign';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getUserStatusString from './wrappers/getUserStatusString';\nimport getChatMembersString from './wrappers/getChatMembersString';\nimport wrapParticipantRank from './wrappers/participantRank';\nimport getParticipantRank from '../lib/appManagers/utils/chats/getParticipantRank';\nimport {Middleware, MiddlewareHelper} from '../helpers/middleware';\n\ninterface SortedUser extends SortedElementBase {\n dom: DialogDom,\n dialogElement: DialogElement\n}\n\nexport default class SortedUserList extends SortedList {\n protected static SORT_INTERVAL = 30e3;\n public list: HTMLUListElement;\n public ranks: Map> = new Map();\n\n protected lazyLoadQueue: LazyLoadQueue;\n protected avatarSize: DialogElementSize = 'abitbigger';\n protected rippleEnabled = true;\n protected autonomous = true;\n protected createChatListOptions: Parameters[0];\n protected onListLengthChange: () => void;\n protected managers: AppManagers;\n\n constructor(options: Partial<{\n lazyLoadQueue: SortedUserList['lazyLoadQueue'],\n avatarSize: SortedUserList['avatarSize'],\n rippleEnabled: SortedUserList['rippleEnabled'],\n createChatListOptions: SortedUserList['createChatListOptions'],\n autonomous: SortedUserList['autonomous'],\n onListLengthChange: SortedUserList['onListLengthChange'],\n getIndex: SortedUserList['getIndex'],\n onUpdate: SortedUserList['onUpdate']\n }> & {\n managers: SortedUserList['managers'],\n middleware: Middleware\n }) {\n super({\n getIndex: options.getIndex || ((element) => element.id.isAnyChat() ? 0 : this.managers.appUsersManager.getUserStatusForSort(element.id)),\n onDelete: (element) => {\n element.dialogElement.remove();\n this.onListLengthChange?.();\n },\n onUpdate: options.onUpdate || (async(element) => {\n if(element.id.isAnyChat()) {\n const status = await getChatMembersString(element.id.toChatId(), this.managers);\n replaceContent(element.dom.lastMessageSpan, status);\n } else {\n const status = getUserStatusString(await this.managers.appUsersManager.getUser(element.id));\n replaceContent(element.dom.lastMessageSpan, status);\n }\n }),\n onSort: (element, idx) => {\n const willChangeLength = element.dom.listEl.parentElement !== this.list;\n positionElementByIndex(element.dom.listEl, this.list, idx);\n\n if(willChangeLength && this.onListLengthChange) {\n this.onListLengthChange();\n }\n },\n onElementCreate: (base) => {\n const dialogElement = appDialogsManager.addDialogNew({\n peerId: base.id,\n container: false,\n avatarSize: this.avatarSize,\n autonomous: this.autonomous,\n meAsSaved: false,\n rippleEnabled: this.rippleEnabled,\n wrapOptions: {\n lazyLoadQueue: this.lazyLoadQueue,\n middleware: this.middlewareHelper.get()\n },\n withStories: true\n });\n\n const rank = this.ranks.get(base.id);\n if(rank) {\n dialogElement.titleRight.replaceChildren(wrapParticipantRank(rank));\n }\n\n (base as SortedUser).dom = dialogElement.dom;\n (base as SortedUser).dialogElement = dialogElement;\n return base as SortedUser;\n },\n updateElementWith: fastRaf,\n updateListWith: async(callback) => {\n if(!Array.from(this.elements.values()).some((element) => element.id.isUser())) {\n return callback(false);\n }\n\n if(!isInDOM(this.list)) {\n return callback(false);\n }\n\n await getHeavyAnimationPromise();\n\n if(!isInDOM(this.list)) {\n return callback(false);\n }\n\n callback(true);\n },\n middleware: options.middleware\n });\n\n safeAssign(this, options);\n\n this.list = appDialogsManager.createChatList(this.createChatListOptions);\n\n let timeout: number;\n const doTimeout = () => {\n timeout = window.setTimeout(() => {\n this.updateList((good) => {\n if(good) {\n doTimeout();\n }\n });\n }, SortedUserList.SORT_INTERVAL);\n };\n\n doTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {InputFile} from '../layer';\nimport AvatarEdit from './avatarEdit';\nimport InputField from './inputField';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport ButtonCorner from './buttonCorner';\nimport safeAssign from '../helpers/object/safeAssign';\nimport {NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport {Middleware} from '../helpers/middleware';\nimport {avatarNew} from './avatarNew';\n\nexport default class EditPeer {\n public nextBtn: HTMLButtonElement;\n\n public uploadAvatar: () => Promise;\n public avatarEdit: AvatarEdit;\n public avatarElem: ReturnType;\n\n private inputFields: InputField[];\n private listenerSetter: ListenerSetter;\n\n private peerId: PeerId;\n\n private _disabled = false;\n private avatarSize = 120;\n\n constructor(options: {\n peerId?: EditPeer['peerId'],\n inputFields: EditPeer['inputFields'],\n listenerSetter: ListenerSetter,\n doNotEditAvatar?: boolean,\n withoutAvatar?: boolean,\n nextBtn?: HTMLButtonElement,\n avatarSize?: number,\n popupOptions?: ConstructorParameters[1],\n middleware: Middleware\n }) {\n safeAssign(this, options);\n\n this.peerId ||= NULL_PEER_ID;\n\n if(!this.nextBtn) {\n this.nextBtn = ButtonCorner({icon: 'check'});\n } else if(!this.nextBtn.classList.contains('btn-corner')) {\n this.handleChange = () => {\n this.nextBtn.toggleAttribute('disabled', !this.isChanged() || this.disabled);\n };\n }\n\n if(!options.withoutAvatar) {\n this.avatarElem = avatarNew({\n middleware: options.middleware,\n size: this.avatarSize,\n peerId: this.peerId\n });\n this.avatarElem.node.classList.add('avatar-placeholder');\n\n if(!options.doNotEditAvatar) {\n this.avatarEdit = new AvatarEdit((_upload) => {\n this.uploadAvatar = _upload;\n this.handleChange();\n this.avatarElem.node.remove();\n }, options.popupOptions);\n\n this.avatarEdit.container.append(this.avatarElem.node);\n }\n }\n\n this.inputFields.forEach((inputField) => {\n this.listenerSetter.add(inputField.input)('input', this.handleChange);\n });\n\n this.handleChange();\n }\n\n public get disabled() {\n return this._disabled;\n }\n\n public set disabled(value) {\n this._disabled = value;\n this.inputFields.forEach((inputField) => inputField.input.toggleAttribute('disabled', value));\n this.handleChange();\n }\n\n public lockWithPromise(promise: Promise, unlockOnSuccess = false) {\n this.disabled = true;\n promise.then(() => {\n if(unlockOnSuccess) {\n this.disabled = false;\n }\n }, () => {\n this.disabled = false;\n });\n }\n\n public isChanged = () => {\n if(this.uploadAvatar) {\n return true;\n }\n\n let changedLength = 0, requiredLength = 0, requiredValidLength = 0;\n this.inputFields.forEach((inputField) => {\n if(inputField.isValid()) {\n if(inputField.isChanged()) {\n ++changedLength;\n }\n\n if(inputField.required) {\n ++requiredValidLength;\n }\n }\n\n if(inputField.required) {\n ++requiredLength;\n }\n });\n\n return requiredLength === requiredValidLength && changedLength > 0;\n };\n\n public handleChange = () => {\n this.nextBtn.classList.toggle('is-visible', this.isChanged());\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// https://stackoverflow.com/a/30810322\nfunction fallbackCopyTextToClipboard(text: string, html?: string) {\n const textArea = document.createElement(html ? 'div' : 'textarea');\n if(html) {\n textArea.tabIndex = 0;\n textArea.contentEditable = 'true';\n textArea.innerHTML = html;\n } else {\n (textArea as HTMLTextAreaElement).value = text;\n }\n\n // Avoid scrolling to bottom\n textArea.style.top = '0';\n textArea.style.left = '0';\n textArea.style.position = 'fixed';\n\n document.body.appendChild(textArea);\n textArea.focus();\n if(html) {\n const selection = window.getSelection();\n selection.removeAllRanges();\n const range = document.createRange();\n range.setStartBefore(textArea.firstChild);\n range.setEndAfter(textArea.lastChild);\n selection.addRange(range);\n } else {\n (textArea as HTMLTextAreaElement).select();\n }\n\n try {\n document.execCommand('copy');\n window.getSelection().removeAllRanges();\n } catch(err) {\n console.error('unable to copy', err);\n }\n\n document.body.removeChild(textArea);\n}\n\nexport async function copyTextToClipboard(text: string, html?: string) {\n if(!navigator.clipboard) {\n fallbackCopyTextToClipboard(text);\n return;\n }\n\n try {\n if(!html) {\n await navigator.clipboard.writeText(text);\n return;\n }\n\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/plain': new Blob([text], {type: 'text/plain'}),\n 'text/html': new Blob([html], {type: 'text/html'})\n })\n ]);\n } catch(err) {\n console.error('clipboard error', err);\n fallbackCopyTextToClipboard(text, html);\n }\n}\n","// * Jolly Cobra's schedulers\n\nimport ctx from '../../environment/ctx';\nimport {AnyFunction, Awaited} from '../../types';\nimport noop from '../noop';\n\nexport type DebounceReturnType = {\n (...args: Parameters): Promise>>;\n clearTimeout(): void;\n isDebounced(): boolean;\n};\n\nexport default function debounce(\n fn: F,\n ms: number,\n shouldRunFirst = true,\n shouldRunLast = true\n): DebounceReturnType {\n let waitingTimeout: number;\n let waitingPromise: Promise>>, resolve: (result: any) => void, reject: () => void;\n let hadNewCall = false;\n\n const invoke = (args: Parameters) => {\n const _resolve = resolve, _reject = reject;\n try {\n const result = fn.apply(null, args);\n _resolve(result);\n } catch(err) {\n console.error('debounce error', err);\n // @ts-ignore\n _reject(err);\n }\n };\n\n const debounce = (...args: Parameters) => {\n if(!waitingPromise) waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n\n if(waitingTimeout) {\n clearTimeout(waitingTimeout);\n hadNewCall = true;\n reject();\n waitingPromise = new Promise((_resolve, _reject) => (resolve = _resolve, reject = _reject));\n } else if(shouldRunFirst) {\n invoke(args);\n hadNewCall = false;\n }\n\n const _waitingTimeout = ctx.setTimeout(() => {\n // will run if should run last or first but with new call\n if(shouldRunLast && (!shouldRunFirst || hadNewCall)) {\n invoke(args);\n }\n\n // if debounce was called during invoking\n if(waitingTimeout === _waitingTimeout) {\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n }, ms);\n\n waitingTimeout = _waitingTimeout;\n waitingPromise.catch(noop);\n return waitingPromise;\n };\n\n debounce.clearTimeout = () => {\n if(waitingTimeout) {\n ctx.clearTimeout(waitingTimeout);\n reject();\n waitingTimeout = waitingPromise = resolve = reject = undefined;\n hadNewCall = false;\n }\n };\n\n debounce.isDebounced = () => !!waitingTimeout;\n\n return debounce;\n}\n","// https://github.com/tdlib/td/blob/c95598e5e1493881d31211c1329bdbe4630f6136/td/telegram/misc.cpp#L246\nexport function isUsernameValid(username: string) {\n if(username.length < 3 || username.length > 32) {\n return false;\n }\n\n if(!/[a-zA-Z]/.test(username.charAt(0))) {\n return false;\n }\n\n for(let i = 0; i < username.length; i++) {\n const c = username.charAt(i);\n if(!/[a-zA-Z0-9_]/.test(c)) {\n return false;\n }\n }\n\n if(username.charAt(username.length - 1) === '') {\n return false;\n }\n\n for(let i = 1; i < username.length; i++) {\n if(username.charAt(i - 1) === '' && username.charAt(i) === '_') {\n return false;\n }\n }\n\n return true;\n}\n\nexport function isWebAppNameValid(name: string) {\n return name.length >= 3 && isUsernameValid(name);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ListenerSetter from '../helpers/listenerSetter';\nimport debounce from '../helpers/schedulers/debounce';\nimport {LangPackKey} from '../lib/langPack';\nimport InputField, {InputFieldOptions, InputState} from './inputField';\nimport {isUsernameValid} from '../lib/richTextProcessor/validators';\nimport {AppManagers} from '../lib/appManagers/managers';\n\nexport class UsernameInputField extends InputField {\n private checkUsernamePromise: Promise;\n private checkUsernameDebounced: (username: string) => void;\n public options: InputFieldOptions & {\n peerId?: PeerId,\n listenerSetter: ListenerSetter,\n onChange?: () => void,\n invalidText: LangPackKey,\n takenText: LangPackKey,\n availableText: LangPackKey,\n head?: string\n };\n public error: ApiError;\n\n constructor(\n options: UsernameInputField['options'],\n private managers: AppManagers\n ) {\n super(options);\n\n this.checkUsernameDebounced = debounce(this.checkUsername.bind(this), 150, false, true);\n\n options.listenerSetter.add(this.input)('input', () => {\n const value = this.getValue();\n\n this.error = undefined;\n if(value === this.originalValue || !value.length) {\n this.setState(InputState.Neutral);\n this.options.onChange?.();\n return;\n } else if(!isUsernameValid(value)) { // does not check the last underscore\n this.setError(this.options.invalidText);\n } else {\n this.setState(InputState.Neutral);\n }\n\n if(this.input.classList.contains('error')) {\n this.options.onChange?.();\n return;\n }\n\n this.checkUsernameDebounced(value);\n });\n }\n\n public getValue() {\n let value = this.value;\n if(this.options.head) {\n value = value.slice(this.options.head.length);\n this.setValueSilently(this.options.head + value);\n }\n\n return value;\n }\n\n private checkUsername(username: string) {\n if(this.checkUsernamePromise) return;\n\n this.error = undefined;\n let checkPromise: Promise\n if(this.options.peerId) {\n checkPromise = this.managers.appChatsManager.checkUsername(this.options.peerId.toChatId(), username);\n } else {\n checkPromise = this.managers.appUsersManager.checkUsername(username);\n }\n\n const promise = this.checkUsernamePromise = checkPromise.then((available) => {\n if(this.getValue() !== username) return;\n\n if(available) {\n this.setState(InputState.Valid, this.options.availableText);\n } else {\n this.setError(this.options.takenText);\n }\n }, (err) => {\n if(this.getValue() !== username) return;\n\n this.error = err;\n switch((err as ApiError).type) {\n case 'USERNAME_PURCHASE_AVAILABLE': {\n this.setError(this.options.takenText);\n break;\n }\n\n case 'USERNAME_INVALID':\n default: {\n this.setError(this.options.invalidText);\n break;\n }\n }\n }).then(() => {\n if(this.checkUsernamePromise === promise) {\n this.checkUsernamePromise = undefined;\n }\n\n this.options.onChange?.();\n\n const value = this.getValue();\n if(value !== username && this.isValidToChange() && isUsernameValid(value)) {\n this.checkUsername(value);\n }\n });\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// * zoom part from WebZ\n// * https://github.com/Ajaxy/telegram-tt/blob/069f4f5b2f2c7c22529ccced876842e7f9cb81f4/src/util/captureEvents.ts\n\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport safeAssign from '../helpers/object/safeAssign';\nimport contextMenuController from '../helpers/contextMenuController';\nimport {Middleware} from '../helpers/middleware';\nimport ListenerSetter, {Listener, ListenerOptions} from '../helpers/listenerSetter';\nimport {attachContextMenuListener} from '../helpers/dom/attachContextMenuListener';\nimport pause from '../helpers/schedulers/pause';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport clamp from '../helpers/number/clamp';\nimport debounce from '../helpers/schedulers/debounce';\nimport {logger} from '../lib/logger';\nimport isSwipingBackSafari from '../helpers/dom/isSwipingBackSafari';\nimport windowSize from '../helpers/windowSize';\n\ntype E = {\n clientX: number,\n clientY: number,\n target: EventTarget,\n button?: number,\n type?: string\n};\n\ntype EE = E | (Exclude & {\n touches: E[]\n});\n\nconst getEvent = (e: EE) => {\n return 'touches' in e ? e.touches[0] : e;\n};\n\nfunction getDistance(a: Touch, b?: Touch) {\n if(!b) return 0;\n return Math.hypot((b.pageX - a.pageX), (b.pageY - a.pageY));\n}\n\nfunction getTouchCenter(a: Touch, b: Touch) {\n return {\n x: (a.pageX + b.pageX) / 2,\n y: (a.pageY + b.pageY) / 2\n };\n}\n\nconst attachGlobalListenerTo = document;\n\nlet RESET_GLOBAL = false;\ncontextMenuController.addEventListener('toggle', (visible) => {\n RESET_GLOBAL = visible;\n});\n\nexport type SwipeHandlerOptions = {\n element: SwipeHandler['element'],\n onSwipe: SwipeHandler['onSwipe'],\n verifyTouchTarget?: SwipeHandler['verifyTouchTarget'],\n onFirstSwipe?: SwipeHandler['onFirstSwipe'],\n onReset?: SwipeHandler['onReset'],\n onStart?: SwipeHandler['onStart'],\n onZoom?: SwipeHandler['onZoom'],\n onDrag?: SwipeHandler['onDrag'],\n onDoubleClick?: SwipeHandler['onDoubleClick'],\n cursor?: SwipeHandler['cursor'],\n cancelEvent?: SwipeHandler['cancelEvent'],\n listenerOptions?: SwipeHandler['listenerOptions'],\n setCursorTo?: HTMLElement,\n middleware?: Middleware,\n withDelay?: boolean,\n minZoom?: number,\n maxZoom?: number\n};\n\nconst TOUCH_MOVE_OPTIONS: ListenerOptions = {passive: false};\nconst MOUSE_MOVE_OPTIONS: ListenerOptions = false as any;\nconst WHEEL_OPTIONS: ListenerOptions = {capture: true, passive: false};\n\nexport type ZoomDetails = {\n zoom?: number;\n zoomFactor?: number;\n zoomAdd?: number;\n initialCenterX: number;\n initialCenterY: number;\n dragOffsetX: number;\n dragOffsetY: number;\n currentCenterX: number;\n currentCenterY: number;\n};\n\nexport default class SwipeHandler {\n private element: HTMLElement;\n private onSwipe: (xDiff: number, yDiff: number, e: EE, cancelDrag?: (x: boolean, y: boolean) => void) => boolean | void;\n private verifyTouchTarget: (evt: EE) => boolean | Promise;\n private onFirstSwipe: (e: EE) => void;\n private onReset: (e?: Event) => void;\n private onStart: () => void;\n private onZoom: (details: ZoomDetails) => void;\n private onDrag: (e: EE, captureEvent: E, details: {dragOffsetX: number, dragOffsetY: number}, cancelDrag: (x: boolean, y: boolean) => void) => void;\n private onDoubleClick: (details: {centerX: number, centerY: number}) => void;\n private cursor: 'grabbing' | 'move' | 'row-resize' | 'col-resize' | 'nesw-resize' | 'nwse-resize' | 'ne-resize' | 'se-resize' | 'sw-resize' | 'nw-resize' | 'n-resize' | 'e-resize' | 's-resize' | 'w-resize' | '';\n private cancelEvent: boolean;\n private listenerOptions: ListenerOptions;\n private setCursorTo: HTMLElement;\n\n private isMouseDown: boolean;\n private tempId: number;\n\n private hadMove: boolean;\n private eventUp: E;\n private xDown: number;\n private yDown: number;\n private xAdded: number;\n private yAdded: number;\n\n private withDelay: boolean;\n private listenerSetter: ListenerSetter;\n\n private initialDistance: number;\n private initialTouchCenter: ReturnType;\n private initialDragOffset: {x: number, y: number};\n private isDragCanceled: {x: boolean, y: boolean};\n private wheelZoom: number;\n private releaseWheelDrag: ReturnType void>>;\n private releaseWheelZoom: ReturnType void>>;\n\n private log: ReturnType;\n\n constructor(options: SwipeHandlerOptions) {\n safeAssign(this, options);\n\n this.log = logger('SWIPE-HANDLER');\n this.cursor ??= 'grabbing';\n this.cancelEvent ??= true;\n // this.listenerOptions ??= false as any;\n this.listenerOptions ??= TOUCH_MOVE_OPTIONS;\n\n this.setCursorTo ??= this.element;\n this.listenerSetter = new ListenerSetter();\n this.setListeners();\n\n this.resetValues();\n this.tempId = 0;\n\n options.middleware?.onDestroy(() => {\n this.reset();\n this.removeListeners();\n });\n\n this.releaseWheelDrag = debounce(this.reset, 150, false);\n this.releaseWheelZoom = debounce(this.reset, 150, false);\n }\n\n public setListeners() {\n if(!IS_TOUCH_SUPPORTED) {\n // @ts-ignore\n this.listenerSetter.add(this.element)('mousedown', this.handleStart, this.listenerOptions);\n this.listenerSetter.add(attachGlobalListenerTo)('mouseup', this.reset);\n\n if(this.onZoom || this.onDoubleClick) {\n this.listenerSetter.add(this.element)('wheel', this.handleWheel, WHEEL_OPTIONS);\n }\n } else {\n if(this.withDelay) {\n attachContextMenuListener({\n element: this.element,\n callback: (e) => {\n cancelEvent(e);\n // @ts-ignore\n this.handleStart(e);\n },\n listenerSetter: this.listenerSetter,\n listenerOptions: this.listenerOptions\n });\n } else {\n // @ts-ignore\n this.listenerSetter.add(this.element)('touchstart', this.handleStart, this.listenerOptions);\n }\n\n if(this.onDoubleClick) {\n this.listenerSetter.add(this.element)('dblclick', (e) => {\n this.onDoubleClick({centerX: e.pageX, centerY: e.pageY});\n });\n }\n\n this.listenerSetter.add(attachGlobalListenerTo)('touchend', this.reset);\n }\n }\n\n public removeListeners() {\n this.log('remove listeners');\n this.reset();\n this.listenerSetter.removeAll();\n }\n\n public setCursor(cursor: SwipeHandler['cursor'] = '') {\n this.cursor = cursor;\n\n if(!IS_TOUCH_SUPPORTED && this.hadMove) {\n this.setCursorTo.style.setProperty('cursor', this.cursor, 'important');\n }\n }\n\n public add(x: number, y: number) {\n this.xAdded = x;\n this.yAdded = y;\n this.handleMove({\n clientX: this.eventUp.clientX,\n clientY: this.eventUp.clientY,\n target: this.eventUp.target\n });\n }\n\n protected resetValues() {\n ++this.tempId;\n this.hadMove = false;\n this.xAdded = this.yAdded = 0;\n this.xDown =\n this.yDown =\n this.eventUp =\n this.isMouseDown =\n undefined;\n\n if(this.onZoom) {\n this.initialDistance = 0;\n this.initialTouchCenter = {\n x: windowSize.width / 2,\n y: windowSize.height / 2\n };\n this.initialDragOffset = {x: 0, y: 0};\n this.isDragCanceled = {x: false, y: false};\n this.wheelZoom = 1;\n }\n }\n\n public reset = (e?: Event) => {\n this.log('reset');\n /* if(e) {\n cancelEvent(e);\n } */\n\n if(IS_TOUCH_SUPPORTED) {\n this.listenerSetter.removeManual(attachGlobalListenerTo, 'touchmove', this.handleMove, TOUCH_MOVE_OPTIONS);\n } else {\n this.listenerSetter.removeManual(attachGlobalListenerTo, 'mousemove', this.handleMove, MOUSE_MOVE_OPTIONS);\n this.setCursorTo.style.cursor = '';\n }\n\n if(this.hadMove) {\n this.onReset?.(e);\n }\n\n this.releaseWheelDrag?.clearTimeout();\n this.releaseWheelZoom?.clearTimeout();\n\n this.resetValues();\n };\n\n protected setHadMove(_e: EE) {\n if(!this.hadMove) {\n this.log('had move');\n this.hadMove = true;\n this.setCursorTo.style.setProperty('cursor', this.cursor, 'important');\n this.onFirstSwipe?.(_e);\n }\n }\n\n protected dispatchOnSwipe(...args: Parameters) {\n const onSwipeResult = this.onSwipe(...args);\n if(onSwipeResult !== undefined && onSwipeResult) {\n this.reset();\n }\n }\n\n protected handleStart = async(_e: EE) => {\n this.log('start');\n\n if(this.isMouseDown) {\n const touches = (_e as any as TouchEvent).touches;\n if(touches?.length === 2) {\n this.initialDistance = getDistance(touches[0], touches[1]);\n this.initialTouchCenter = getTouchCenter(touches[0], touches[1]);\n }\n\n return;\n }\n\n const e = getEvent(_e);\n if(![0, 1].includes(Math.max(0, e.button ?? 0))) {\n return;\n }\n\n if(e.button === 1) {\n cancelEvent(_e as any);\n }\n\n if(isSwipingBackSafari(_e as any)) {\n return;\n }\n\n const tempId = ++this.tempId;\n\n const verifyResult = this.verifyTouchTarget?.(_e);\n if(verifyResult !== undefined) {\n let result: any;\n if(verifyResult instanceof Promise) {\n // const tempId = this.tempId;\n result = await verifyResult;\n\n if(this.tempId !== tempId) {\n return;\n }\n } else {\n result = verifyResult;\n }\n\n if(!result) {\n return this.reset();\n }\n }\n\n this.isMouseDown = true;\n\n if(this.withDelay && !IS_TOUCH_SUPPORTED) {\n const options = {...MOUSE_MOVE_OPTIONS, once: true};\n const deferred = deferredPromise();\n const cb = () => deferred.resolve();\n const listener = this.listenerSetter.add(attachGlobalListenerTo)('mousemove', cb, options) as any as Listener;\n\n await Promise.race([\n pause(300),\n deferred\n ]);\n\n deferred.resolve();\n this.listenerSetter.remove(listener);\n\n if(this.tempId !== tempId) {\n return;\n }\n }\n\n this.xDown = e.clientX;\n this.yDown = e.clientY;\n this.eventUp = e;\n\n if(IS_TOUCH_SUPPORTED) {\n // @ts-ignore\n this.listenerSetter.add(attachGlobalListenerTo)('touchmove', this.handleMove, TOUCH_MOVE_OPTIONS);\n } else {\n // @ts-ignore\n this.listenerSetter.add(attachGlobalListenerTo)('mousemove', this.handleMove, MOUSE_MOVE_OPTIONS);\n }\n\n if(this.onStart) {\n this.onStart();\n\n // have to initiate move instantly\n this.hadMove = true;\n this.handleMove(e);\n }\n };\n\n protected handleMove = (_e: EE) => {\n if(this.xDown === undefined || this.yDown === undefined || RESET_GLOBAL) {\n this.reset();\n return;\n }\n\n if(this.cancelEvent) {\n cancelEvent(_e as any);\n }\n\n if(this.releaseWheelDrag?.isDebounced() || this.releaseWheelZoom?.isDebounced()) {\n return;\n }\n\n this.log('move');\n\n const e = this.eventUp = getEvent(_e);\n const xUp = e.clientX;\n const yUp = e.clientY;\n\n const xDiff = xUp - this.xDown + this.xAdded;\n const yDiff = yUp - this.yDown + this.yAdded;\n\n if(!this.hadMove) {\n if(!xDiff && !yDiff) {\n return;\n }\n\n this.setHadMove(_e);\n }\n\n const touches = (_e as any as TouchEvent).touches;\n if(this.onZoom && this.initialDistance > 0 && touches.length === 2) {\n const endDistance = getDistance(touches[0], touches[1]);\n const touchCenter = getTouchCenter(touches[0], touches[1]);\n const dragOffsetX = touchCenter.x - this.initialTouchCenter.x;\n const dragOffsetY = touchCenter.y - this.initialTouchCenter.y;\n const zoomFactor = endDistance / this.initialDistance;\n const details: ZoomDetails = {\n zoomFactor,\n initialCenterX: this.initialTouchCenter.x,\n initialCenterY: this.initialTouchCenter.y,\n dragOffsetX,\n dragOffsetY,\n currentCenterX: touchCenter.x,\n currentCenterY: touchCenter.y\n };\n\n this.onZoom(details);\n }\n\n this.dispatchOnSwipe(xDiff, yDiff, _e);\n };\n\n protected handleWheel = (e: WheelEvent) => {\n if(!this.hadMove && this.verifyTouchTarget) {\n const result = this.verifyTouchTarget(e);\n if(result !== undefined && !result) {\n this.reset(e);\n return;\n }\n }\n\n cancelEvent(e);\n\n this.log('wheel');\n\n if(this.onDoubleClick && Object.is(e.deltaX, -0) && Object.is(e.deltaY, -0) && e.ctrlKey) {\n this.onWheelCapture(e);\n this.onDoubleClick({centerX: e.pageX, centerY: e.pageY});\n this.reset();\n return;\n }\n\n const metaKeyPressed = e.metaKey || e.ctrlKey || e.shiftKey;\n if(metaKeyPressed) {\n // * fix zooming while dragging is in inertia\n if(this.releaseWheelDrag?.isDebounced()) {\n this.reset();\n }\n\n this.onWheelZoom(e);\n } else {\n this.handleWheelDrag(e);\n }\n };\n\n protected handleWheelDrag = (e: WheelEvent) => {\n this.log('wheel drag');\n\n this.onWheelCapture(e);\n // Ignore wheel inertia if drag is canceled in this direction\n if(!this.isDragCanceled.x || Math.sign(this.initialDragOffset.x) === Math.sign(e.deltaX)) {\n this.initialDragOffset.x -= e.deltaX;\n }\n if(!this.isDragCanceled.y || Math.sign(this.initialDragOffset.y) === Math.sign(e.deltaY)) {\n this.initialDragOffset.y -= e.deltaY;\n }\n const {x, y} = this.initialDragOffset;\n this.releaseWheelDrag(e);\n this.dispatchOnSwipe(x, y, e, (dx, dy) => {\n this.isDragCanceled = {x: dx, y: dy};\n });\n };\n\n protected onWheelCapture = (e: WheelEvent) => {\n if(this.hadMove) return;\n this.log('wheel capture');\n this.handleStart(e);\n this.setHadMove(e);\n this.initialTouchCenter = {x: e.x, y: e.y};\n };\n\n protected onWheelZoom = (e: WheelEvent) => {\n if(!this.onZoom) return;\n this.log('wheel zoom');\n this.onWheelCapture(e);\n const dragOffsetX = e.x - this.initialTouchCenter.x;\n const dragOffsetY = e.y - this.initialTouchCenter.y;\n const delta = clamp(e.deltaY, -25, 25);\n this.wheelZoom -= delta * 0.01;\n const details: ZoomDetails = {\n zoomAdd: this.wheelZoom - 1,\n initialCenterX: this.initialTouchCenter.x,\n initialCenterY: this.initialTouchCenter.y,\n dragOffsetX,\n dragOffsetY,\n currentCenterX: e.x,\n currentCenterY: e.y\n };\n this.onZoom(details);\n this.releaseWheelZoom(e);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ScrollableBase} from '../../components/scrollable';\nimport SwipeHandler from '../../components/swipeHandler';\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport rootScope from '../../lib/rootScope';\nimport liteMode from '../liteMode';\nimport {Middleware} from '../middleware';\nimport clamp from '../number/clamp';\nimport safeAssign from '../object/safeAssign';\nimport pause from '../schedulers/pause';\nimport cancelEvent from './cancelEvent';\nimport {attachClickEvent} from './clickEvent';\nimport findUpAsChild from './findUpAsChild';\nimport positionElementByIndex from './positionElementByIndex';\nimport whichChild from './whichChild';\n\nexport default class Sortable {\n private element: HTMLElement;\n private elementRect: DOMRect;\n private containerRect: DOMRect;\n private scrollableRect: DOMRect;\n private minY: number;\n private maxY: number;\n private siblings: HTMLElement[];\n private swipeHandler: SwipeHandler;\n private startScrollPos: number;\n private addScrollPos: number;\n\n private list: HTMLElement;\n private middleware: Middleware;\n private onSort: (prevIdx: number, newIdx: number) => void;\n private scrollable: ScrollableBase;\n\n constructor(options: {\n list: HTMLElement,\n middleware: Middleware,\n onSort: Sortable['onSort'],\n scrollable?: Sortable['scrollable']\n }) {\n safeAssign(this, options);\n\n this.swipeHandler = new SwipeHandler({\n element: this.list,\n onSwipe: this.onSwipe,\n verifyTouchTarget: this.verifyTouchTarget,\n onStart: this.onStart,\n onReset: this.onReset,\n setCursorTo: document.body,\n middleware: this.middleware,\n withDelay: true\n });\n }\n\n private onSwipe = (xDiff: number, yDiff: number) => {\n yDiff = clamp(yDiff, this.minY, this.maxY);\n this.element.style.transform = `translateY(${yDiff}px)`;\n const count = Math.round(Math.abs(yDiff) / this.elementRect.height);\n const lastSiblings = this.siblings;\n this.siblings = [];\n const property = yDiff < 0 ? 'previousElementSibling' : 'nextElementSibling';\n let sibling = this.element[property] as HTMLElement;\n for(let i = 0; i < count; ++i) {\n if(this.getSortableTarget(sibling)) {\n this.siblings.push(sibling);\n sibling = sibling[property] as HTMLElement;\n } else {\n break;\n }\n }\n\n (lastSiblings || []).forEach((sibling) => {\n if(!this.siblings.includes(sibling)) {\n sibling.style.transform = '';\n }\n });\n\n this.siblings.forEach((sibling) => {\n const y = this.elementRect.height * (yDiff < 0 ? 1 : -1);\n sibling.style.transform = `translateY(${y}px)`;\n });\n\n if(this.scrollableRect) {\n const diff = yDiff;\n const toEnd = diff > 0;\n const elementEndPos = toEnd ? this.elementRect.bottom : this.elementRect.top;\n const clientY = elementEndPos + diff - this.addScrollPos;\n // console.log(clientY, this.scrollableRect.top, elementEndPos, diff, this.addScrollPos, toEnd);\n let change = 2;\n if((clientY + (toEnd ? 0 : this.elementRect.height)) >= this.scrollableRect.bottom/* && diff < this.maxY */) {\n\n } else if((clientY - (toEnd ? this.elementRect.height : 0)) <= this.scrollableRect.top/* && diff > this.minY */) {\n change *= -1;\n } else {\n change = undefined;\n }\n\n if(change !== undefined) {\n this.scrollable.scrollPosition += change;\n }\n }\n };\n\n private verifyTouchTarget = (e: {target: EventTarget}) => {\n if(this.list.classList.contains('is-reordering')) {\n return false;\n }\n\n this.element = this.getSortableTarget(e.target as HTMLElement);\n return !!this.element/* && pause(150).then(() => true) */;\n };\n\n private onScroll = () => {\n const scrollPos = this.scrollable.scrollPosition;\n const diff = this.addScrollPos = scrollPos - this.startScrollPos;\n const isVertical = this.scrollable.scrollPositionProperty === 'scrollTop';\n this.swipeHandler.add(isVertical ? 0 : diff, isVertical ? diff : 0);\n };\n\n private onStart = () => {\n this.list.classList.add('is-reordering');\n this.element.classList.add('is-dragging', 'no-transition');\n this.swipeHandler.setCursor('grabbing');\n this.elementRect = this.element.getBoundingClientRect();\n this.containerRect = this.list.getBoundingClientRect();\n\n this.minY = this.containerRect.top - this.elementRect.top;\n this.maxY = this.containerRect.bottom - this.elementRect.bottom;\n this.addScrollPos = 0;\n\n if(this.scrollable) {\n this.startScrollPos = this.scrollable.scrollPosition;\n this.scrollableRect = this.scrollable.container.getBoundingClientRect();\n this.scrollable.container.addEventListener('scroll', this.onScroll);\n }\n };\n\n private onReset = async() => {\n const length = this.siblings.length;\n const move = length && length * (this.siblings[0].previousElementSibling === this.element ? 1 : -1);\n const idx = whichChild(this.element);\n const newIdx = idx + move;\n\n this.element.classList.remove('no-transition');\n this.element.style.transform = move ? `translateY(${move * this.elementRect.height}px)` : '';\n this.swipeHandler.setCursor('');\n\n if(this.scrollable) {\n this.scrollable.container.removeEventListener('scroll', this.onScroll);\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n attachClickEvent(document.body, cancelEvent, {capture: true, once: true});\n }\n\n if(liteMode.isAvailable('animations')) {\n await pause(250);\n }\n\n this.list.classList.remove('is-reordering');\n this.element.classList.remove('is-dragging');\n positionElementByIndex(this.element, this.list, newIdx, idx);\n [this.element, ...this.siblings].forEach((element) => {\n element.style.transform = '';\n });\n\n this.element =\n this.siblings =\n this.elementRect =\n this.containerRect =\n this.minY =\n this.maxY =\n this.startScrollPos =\n this.addScrollPos =\n undefined;\n\n // cancelClick = true;\n\n if(!move) {\n return;\n }\n\n this.onSort(idx, newIdx);\n };\n\n private getSortableTarget(target: HTMLElement) {\n if(!target) {\n return;\n }\n\n let child = findUpAsChild(target as HTMLElement, this.list);\n if(child && child.classList.contains('cant-sort')) {\n child = undefined;\n }\n\n return child;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement, {addCancelButton} from './popups';\nimport PopupPeer, {PopupPeerCheckboxOptions, PopupPeerOptions} from './popups/peer';\n\n// type PopupConfirmationOptions = Pick;\nexport type PopupConfirmationOptions = PopupPeerOptions & {\n button: PopupPeerOptions['buttons'][0],\n checkbox?: PopupPeerOptions['checkboxes'][0],\n inputField?: PopupPeerOptions['inputField']\n};\n\nexport default function confirmationPopup(\n options: T\n): Promise : (T['checkbox'] extends PopupPeerCheckboxOptions ? boolean : void)> {\n return new Promise((resolve, reject) => {\n const {button, checkbox} = options;\n button.callback = (e, set) => {\n if(checkbox || !set) {\n resolve(set ? !!set.size : undefined);\n } else {\n resolve(options.checkboxes.map((checkbox) => set.has(checkbox.text)));\n }\n };\n\n const buttons = addCancelButton(options.buttons || [button]);\n const cancelButton = buttons.find((button) => button.isCancel);\n cancelButton.callback = () => {\n reject();\n };\n\n options.buttons = buttons;\n options.checkboxes ??= checkbox && [checkbox];\n\n const popup = PopupElement.createPopup(PopupPeer, 'popup-confirmation', options);\n popup.addEventListener('closeAfterTimeout', () => {\n reject();\n });\n\n popup.show();\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport placeCaretAtEnd from '../helpers/dom/placeCaretAtEnd';\nimport positionElementByIndex from '../helpers/dom/positionElementByIndex';\nimport Sortable from '../helpers/dom/sortable';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {Middleware} from '../helpers/middleware';\nimport noop from '../helpers/noop';\nimport SortedList, {SortedElementBase} from '../helpers/sortedList';\nimport {Chat, User, Username} from '../layer';\nimport {i18n, LangPackKey} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport confirmationPopup from './confirmationPopup';\nimport Icon from './icon';\nimport Row from './row';\nimport SettingSection from './settingSection';\nimport {UsernameInputField} from './usernameInputField';\n\nconst CLASS_NAME = 'usernames';\n\nexport class UsernameRow extends Row {\n constructor(\n isLink?: boolean,\n icon: Icon = 'limit_link',\n color?: string,\n titleRight?: HTMLElement,\n subtitleRight?: HTMLElement\n ) {\n super({\n title: true,\n subtitle: true,\n clickable: true,\n titleRight,\n subtitleRight\n });\n\n if(isLink) {\n this.title.classList.add('text-bold');\n this.container.classList.add('is-link');\n }\n\n this.container.classList.add(CLASS_NAME + '-username');\n this.subtitle.classList.add(CLASS_NAME + '-username-status');\n const media = this.createMedia('abitbigger');\n media.classList.add(CLASS_NAME + '-username-icon', 'avatar-gradient');\n if(color) media.dataset.color = color;\n if(isLink && icon === 'link_paid') this.container.classList.add('is-paid');\n media.append(Icon(icon));\n }\n}\n\nexport default class UsernamesSection extends SettingSection {\n // public section: SettingSection;\n\n constructor(options: {\n peerId: PeerId,\n peer: Chat.channel | User.user,\n listenerSetter: ListenerSetter,\n usernameInputField: UsernameInputField,\n middleware: Middleware\n }) {\n /* const section = this.section = new SettingSection */super({\n name: 'UsernamesProfileHeader',\n caption: (options.peer as User.user).pFlags.bot ? 'UsernamesBotHelp' : (!options.peerId.isUser() ? 'UsernamesChannelHelp' : 'UsernamesProfileHelp')\n });\n\n const {peerId, peer, usernameInputField, listenerSetter, middleware} = options;\n const managers = rootScope.managers;\n const channelId = peerId.isUser() ? undefined : peerId.toChatId();\n const botId = (options.peer as User.user).pFlags.bot ? peerId.toUserId() : undefined;\n\n if(botId) {\n usernameInputField.container.classList.add('disable-hover');\n }\n\n const section = this;\n\n const list = document.createElement('div');\n list.classList.add(CLASS_NAME);\n\n let _usernames: Username[];\n\n interface SortedUsername extends SortedElementBase {\n row: Row\n }\n\n const sortedList = new SortedList({\n getIndex: (element) => _usernames.length - _usernames.findIndex((username) => username.username === element.id),\n onDelete: (element) => {\n element.row.container.remove();\n },\n onSort: (element, idx) => {\n positionElementByIndex(element.row.container, list, idx);\n },\n onElementCreate: (base) => {\n const username = _usernames.find((username) => username.username === base.id);\n const row = new UsernameRow();\n row.title.textContent = '@' + username.username;\n\n const editable = !!username.pFlags.editable;\n const active = !!username.pFlags.active;\n\n if(editable) row.container.dataset.editable = '1';\n\n row.makeSortable();\n\n changeActive(row, active);\n\n (base as SortedUsername).row = row;\n\n return base as SortedUsername;\n },\n middleware\n });\n\n const changeActive = (row: Row, active: boolean) => {\n row.subtitle.replaceChildren(i18n(row.container.dataset.editable ? (botId ? 'UsernameLinkBotUsername' : 'UsernameLinkEditable') : (active ? 'UsernameLinkActive' : 'UsernameLinkInactive')));\n row.container.classList.toggle('active', active);\n row.toggleSorting(active);\n };\n\n const applyUsernames = (usernames: Username[] = []) => {\n _usernames = usernames;\n\n sortedList.getAll().forEach((element) => {\n if(!usernames.some((username) => username.username === element.id)) {\n sortedList.delete(element.id);\n }\n });\n\n usernames.forEach((username) => {\n if(!sortedList.has(username.username)) {\n sortedList.add(username.username);\n } else {\n const element = sortedList.get(username.username);\n sortedList.update(username.username, element);\n changeActive(element.row, !!username.pFlags.active);\n }\n });\n\n section.container.classList.toggle('hide', !sortedList.getAll().size);\n };\n\n applyUsernames(peer.usernames);\n\n listenerSetter.add(rootScope)('peer_title_edit', async({peerId: _peerId}) => {\n if(_peerId !== peerId) {\n return;\n }\n\n const peer = await managers.appPeersManager.getPeer(peerId);\n applyUsernames((peer as User.user).usernames);\n });\n\n let cancelClick = false;\n attachClickEvent(list, async(e) => {\n if(cancelClick) {\n cancelClick = false;\n return;\n }\n\n const container = findUpAsChild(e.target as HTMLElement, list);\n if(!container) {\n return;\n }\n\n if(container.dataset.editable) {\n if(!botId) {\n placeCaretAtEnd(usernameInputField.input, true, true);\n }\n\n return;\n }\n\n const username = container.dataset.username;\n\n const active = container.classList.contains('active');\n let titleLangKey: LangPackKey, descriptionLangKey: LangPackKey;\n if(active) {\n titleLangKey = 'UsernameDeactivateLink';\n descriptionLangKey = botId ? 'UsernameDeactivateLinkBotMessage' : (channelId ? 'UsernameDeactivateLinkChannelMessage' : 'UsernameDeactivateLinkProfileMessage');\n } else {\n titleLangKey = 'UsernameActivateLink';\n descriptionLangKey = botId ? 'UsernameActivateLinkBotMessage' : (channelId ? 'UsernameActivateLinkChannelMessage' : 'UsernameActivateLinkProfileMessage');\n }\n\n try {\n await confirmationPopup({\n titleLangKey,\n descriptionLangKey,\n button: {\n langKey: active ? 'Hide' : 'Show'\n }\n });\n } catch(err) {\n return;\n }\n\n const newActive = !active;\n const promise = managers.appUsernamesManager.toggleUsername({\n peerId,\n username,\n active: newActive\n });\n\n promise.catch((err: ApiError) => {\n if(err.type === 'USERNAMES_ACTIVE_TOO_MUCH') {\n confirmationPopup({\n titleLangKey: 'UsernameActivateErrorTitle',\n descriptionLangKey: 'UsernameActivateErrorMessage',\n button: {langKey: 'OK', isCancel: true}\n }).catch(noop);\n } else {\n console.error('turn username error', err);\n }\n });\n });\n\n new Sortable({\n list,\n middleware,\n onSort: (idx, newIdx) => {\n const username = _usernames.splice(idx, 1)[0];\n _usernames.splice(newIdx, 0, username);\n sortedList.updateList();\n // can't just update particular element, have to change indexes\n // sortedList.update(username.username);\n\n const usernames = _usernames.filter((username) => username.pFlags.active).map((username) => username.username);\n managers.appUsernamesManager.reorderUsernames({peerId, order: usernames});\n }\n });\n\n section.content.append(list);\n }\n}\n","import {Chat, User} from '../../../../layer';\n\nexport default function getPeerEditableUsername(peer: User.user | Chat.channel) {\n if(peer.username) {\n return peer.username;\n }\n\n const usernames = peer.usernames;\n const username = usernames?.find((username) => username.pFlags.editable);\n return username?.username;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport InputField from '../../inputField';\nimport {SliderSuperTab} from '../../slider';\nimport EditPeer from '../../editPeer';\nimport {UsernameInputField} from '../../usernameInputField';\nimport {i18n, i18n_, LangPackKey} from '../../../lib/langPack';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport rootScope from '../../../lib/rootScope';\nimport setBlankToAnchor from '../../../lib/richTextProcessor/setBlankToAnchor';\nimport getPeerEditableUsername from '../../../lib/appManagers/utils/peers/getPeerEditableUsername';\nimport SettingSection, {generateSection} from '../../settingSection';\nimport UsernamesSection from '../../usernamesSection';\n\n// TODO: аватарка не поменяется в этой вкладке после изменения почему-то (если поставить в другом клиенте, и потом тут проверить, для этого ещё вышел в чатлист)\n\nexport function purchaseUsernameCaption() {\n const p = document.createElement('div');\n const FRAGMENT_USERNAME_URL = 'https://fragment.com/username/';\n const a = setBlankToAnchor(document.createElement('a'));\n const purchaseText = i18n('Username.Purchase', [a]);\n purchaseText.classList.add('username-purchase-help');\n p.append(\n purchaseText,\n document.createElement('br'),\n document.createElement('br')\n );\n p.classList.add('hide');\n\n return {\n element: p,\n setUsername: (username: string) => {\n if(username) {\n a.href = FRAGMENT_USERNAME_URL + username;\n }\n\n p.classList.toggle('hide', !username);\n }\n };\n}\n\nexport default class AppEditProfileTab extends SliderSuperTab {\n private firstNameInputField: InputField;\n private lastNameInputField: InputField;\n private bioInputField: InputField;\n private usernameInputField: UsernameInputField;\n\n // private profileUrlContainer: HTMLDivElement;\n // private profileUrlAnchor: HTMLAnchorElement;\n\n private editPeer: EditPeer;\n\n public static getInitArgs() {\n return {\n bioMaxLength: rootScope.managers.apiManager.getLimit('bio'),\n user: rootScope.managers.appUsersManager.getSelf(),\n userFull: rootScope.managers.appProfileManager.getProfile(rootScope.myId.toUserId())\n };\n }\n\n public async init(p: ReturnType = AppEditProfileTab.getInitArgs()) {\n this.container.classList.add('edit-profile-container');\n this.setTitle('EditAccount.Title');\n\n const inputFields: InputField[] = [];\n\n const [bioMaxLength, user, userFull] = await Promise.all([p.bioMaxLength, p.user, p.userFull]);\n\n {\n const section = generateSection(this.scrollable, undefined, 'Bio.Description');\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.firstNameInputField = new InputField({\n label: 'EditProfile.FirstNameLabel',\n name: 'first-name',\n maxLength: 70\n });\n this.lastNameInputField = new InputField({\n label: 'Login.Register.LastName.Placeholder',\n name: 'last-name',\n maxLength: 64\n });\n this.bioInputField = new InputField({\n label: 'EditProfile.BioLabel',\n name: 'bio',\n maxLength: bioMaxLength\n });\n\n inputWrapper.append(\n this.firstNameInputField.container,\n this.lastNameInputField.container,\n this.bioInputField.container\n );\n\n inputFields.push(\n this.firstNameInputField,\n this.lastNameInputField,\n this.bioInputField\n );\n\n this.editPeer = new EditPeer({\n peerId: rootScope.myId,\n inputFields,\n listenerSetter: this.listenerSetter,\n middleware: this.middlewareHelper.get()\n });\n\n this.content.append(this.editPeer.nextBtn);\n\n section.append(this.editPeer.avatarEdit.container, inputWrapper);\n }\n\n {\n const section = new SettingSection({\n name: 'EditAccount.Username',\n caption: true\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.usernameInputField = new UsernameInputField({\n label: 'EditProfile.Username.Label',\n name: 'username',\n plainText: true,\n listenerSetter: this.listenerSetter,\n onChange: () => {\n this.editPeer.handleChange();\n // this.setProfileUrl();\n\n const {error} = this.usernameInputField;\n const isPurchase = error?.type === 'USERNAME_PURCHASE_AVAILABLE';\n setUsername(isPurchase ? this.usernameInputField.value : undefined);\n },\n availableText: 'EditProfile.Username.Available',\n takenText: 'EditProfile.Username.Taken',\n invalidText: 'EditProfile.Username.Invalid'\n }, this.managers);\n\n inputWrapper.append(this.usernameInputField.container);\n\n const caption = section.caption;\n\n const {setUsername, element: p} = purchaseUsernameCaption();\n\n caption.append(\n p,\n i18n('UsernameHelp')\n // document.createElement('br'),\n // document.createElement('br')\n );\n\n // const profileUrlContainer = this.profileUrlContainer = document.createElement('div');\n // profileUrlContainer.classList.add('profile-url-container');\n // const profileUrlAnchor = this.profileUrlAnchor = anchorCopy();\n // profileUrlContainer.append(i18n('UsernameHelpLink', [profileUrlAnchor]));\n // caption.append(profileUrlContainer);\n\n inputFields.push(this.usernameInputField);\n section.content.append(inputWrapper);\n this.scrollable.append(section.container);\n }\n\n {\n const section = new UsernamesSection({\n peerId: rootScope.myId,\n peer: user,\n listenerSetter: this.listenerSetter,\n usernameInputField: this.usernameInputField,\n middleware: this.middlewareHelper.get()\n });\n\n this.scrollable.append(section.container);\n }\n\n attachClickEvent(this.editPeer.nextBtn, () => {\n this.editPeer.nextBtn.disabled = true;\n\n const promises: Promise[] = [];\n\n const profilePromise = this.managers.appProfileManager.updateProfile(\n this.firstNameInputField.value,\n this.lastNameInputField.value,\n this.bioInputField.value\n );\n promises.push(profilePromise.then(() => {\n this.close();\n }, (err) => {\n console.error('updateProfile error:', err);\n }));\n\n if(this.editPeer.uploadAvatar) {\n promises.push(this.editPeer.uploadAvatar().then((inputFile) => {\n return this.managers.appProfileManager.uploadProfilePhoto(inputFile);\n }));\n }\n\n if(this.usernameInputField.isValidToChange()) {\n promises.push(this.managers.appUsersManager.updateUsername(this.usernameInputField.value));\n }\n\n Promise.race(promises).finally(() => {\n this.editPeer.nextBtn.removeAttribute('disabled');\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.firstNameInputField.setOriginalValue(user.first_name, true);\n this.lastNameInputField.setOriginalValue(user.last_name, true);\n this.bioInputField.setOriginalValue(userFull.about, true);\n this.usernameInputField.setOriginalValue(getPeerEditableUsername(user), true);\n\n // this.setProfileUrl();\n this.editPeer.handleChange();\n }\n\n // private setProfileUrl() {\n // if(this.usernameInputField.input.classList.contains('error') || !this.usernameInputField.value.length) {\n // this.profileUrlContainer.style.display = 'none';\n // } else {\n // this.profileUrlContainer.style.display = '';\n // this.profileUrlAnchor.replaceWith(this.profileUrlAnchor = anchorCopy({mePath: this.usernameInputField.value}));\n // }\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {copyTextToClipboard} from '../../../helpers/clipboard';\nimport {randomLong} from '../../../helpers/random';\nimport {Chat, ChatFull, ExportedChatInvite} from '../../../layer';\nimport Button from '../../button';\nimport {setButtonLoader} from '../../putPreloader';\nimport RadioField from '../../radioField';\nimport Row, {RadioFormFromRows} from '../../row';\nimport {toast} from '../../toast';\nimport {UsernameInputField} from '../../usernameInputField';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport I18n, {i18n} from '../../../lib/langPack';\nimport PopupPeer from '../../popups/peer';\nimport ButtonCorner from '../../buttonCorner';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport CheckboxField from '../../checkboxField';\nimport rootScope from '../../../lib/rootScope';\nimport SettingSection from '../../settingSection';\nimport UsernamesSection from '../../usernamesSection';\nimport getPeerEditableUsername from '../../../lib/appManagers/utils/peers/getPeerEditableUsername';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport {purchaseUsernameCaption} from '../../sidebarLeft/tabs/editProfile';\nimport confirmationPopup from '../../confirmationPopup';\nimport PopupElement from '../../popups';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\n\nexport default class AppChatTypeTab extends SliderSuperTabEventable {\n public chatId: ChatId;\n public chatFull: ChatFull;\n\n public async init() {\n this.container.classList.add('edit-peer-container', 'group-type-container');\n\n const isBroadcast = await this.managers.appChatsManager.isBroadcast(this.chatId);\n const linkedChatId = (this.chatFull as ChatFull.channelFull).linked_chat_id;\n\n this.setTitle(isBroadcast ? 'ChannelType' : 'GroupType');\n\n const section = new SettingSection({\n name: isBroadcast ? 'ChannelType' : 'GroupType'\n });\n\n const random = randomLong();\n const privateRow = new Row({\n radioField: new RadioField({\n langKey: isBroadcast ? 'ChannelPrivate' : 'MegaPrivate',\n name: random,\n value: 'private'\n }),\n subtitleLangKey: isBroadcast ? 'ChannelPrivateInfo' : 'MegaPrivateInfo'\n });\n const publicRow = new Row({\n radioField: new RadioField({\n langKey: isBroadcast ? 'ChannelPublic' : 'MegaPublic',\n name: random,\n value: 'public'\n }),\n subtitleLangKey: isBroadcast ? 'ChannelPublicInfo' : 'MegaPublicInfo'\n });\n const form = RadioFormFromRows([privateRow, publicRow], (value) => {\n const a: HTMLElement[][] = [[privateSection.container], [publicContainer]];\n if(value === 'public') a.reverse();\n\n a[0].forEach((container) => container.classList.remove('hide'));\n a[1].forEach((container) => container.classList.add('hide'));\n\n onChange();\n\n if(joinRequestSection && !linkedChatId) {\n joinRequestSection.container.classList.toggle('hide', value !== 'public');\n }\n });\n\n let chat: Chat = apiManagerProxy.getChat(this.chatId);\n\n const chatUpdateListeners: {[type in 'basic']: (() => void)[]} = {basic: []};\n const addChatUpdateListener = (callback: () => void, type: 'basic' = 'basic') => {\n chatUpdateListeners[type].push(callback);\n };\n\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\n if(this.chatId === chatId) {\n chat = apiManagerProxy.getChat(this.chatId) as typeof chat;\n chatUpdateListeners['basic'].forEach((callback) => callback());\n }\n });\n\n section.content.append(form);\n\n const privateSection = new SettingSection({});\n\n // let revoked = false;\n const linkRow = new Row({\n title: (this.chatFull.exported_invite as ExportedChatInvite.chatInviteExported).link,\n subtitleLangKey: isBroadcast ? 'ChannelPrivateLinkHelp' : 'MegaPrivateLinkHelp',\n clickable: () => {\n copyTextToClipboard((this.chatFull.exported_invite as ExportedChatInvite.chatInviteExported).link);\n toast(I18n.format('LinkCopied', true));\n },\n listenerSetter: this.listenerSetter\n });\n\n const btnRevoke = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'RevokeLink'});\n\n attachClickEvent(btnRevoke, () => {\n PopupElement.createPopup(PopupPeer, 'revoke-link', {\n buttons: [{\n langKey: 'RevokeButton',\n callback: () => {\n const toggle = toggleDisability([btnRevoke], true);\n\n this.managers.appProfileManager.getChatInviteLink(this.chatId, true).then((link) => {\n toggle();\n linkRow.title.textContent = link;\n // revoked = true;\n // onChange();\n });\n }\n }],\n titleLangKey: 'RevokeLink',\n descriptionLangKey: 'RevokeAlert'\n }).show();\n }, {listenerSetter: this.listenerSetter});\n\n privateSection.content.append(linkRow.container, btnRevoke);\n\n const publicSection = new SettingSection({\n caption: true,\n noDelimiter: true\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const placeholder = 't.me/';\n\n let changedPrivacy: boolean, changedJoinToSend: boolean, changedJoinRequest: boolean;\n const onChange = () => {\n changedPrivacy = (privateRow.radioField.checked && (originalValue !== placeholder/* || revoked */)) ||\n (linkInputField.isValidToChange() && linkInputField.input.classList.contains('valid'));\n changedJoinToSend = !!joinToSendRow && joinToSendRow.checkboxField.checked !== originalJoinToSend;\n changedJoinRequest = !!joinRequestRow && joinRequestRow.checkboxField.checked !== originalJoinRequest;\n applyBtn.classList.toggle('is-visible', changedPrivacy || changedJoinToSend || changedJoinRequest);\n\n const {error} = linkInputField;\n const isPurchase = error?.type === 'USERNAME_PURCHASE_AVAILABLE';\n setUsername(isPurchase ? linkInputField.getValue() : undefined);\n };\n\n const linkInputField = new UsernameInputField({\n label: 'SetUrlPlaceholder',\n name: 'group-public-link',\n plainText: true,\n listenerSetter: this.listenerSetter,\n availableText: 'Link.Available',\n invalidText: 'Link.Invalid',\n takenText: 'Link.Taken',\n onChange: onChange,\n peerId: this.chatId.toPeerId(true),\n head: placeholder\n }, this.managers);\n\n const {setUsername, element: p} = purchaseUsernameCaption();\n\n publicSection.caption.append(\n p,\n i18n(isBroadcast ? 'Channel.UsernameAboutChannel' : 'Channel.UsernameAboutGroup')\n );\n\n const usernamesSection = new UsernamesSection({\n peerId: this.chatId.toPeerId(true),\n peer: chat as Chat.channel,\n listenerSetter: this.listenerSetter,\n usernameInputField: linkInputField,\n middleware: this.middlewareHelper.get()\n });\n\n const publicContainer = document.createElement('div');\n publicContainer.append(publicSection.container, usernamesSection.container);\n\n const originalValue = placeholder + (getPeerEditableUsername(chat as Chat.channel) || '');\n\n inputWrapper.append(linkInputField.container)\n publicSection.content.append(inputWrapper);\n\n const applyBtn = ButtonCorner({icon: 'check', className: 'is-visible'});\n this.content.append(applyBtn);\n\n const getUsername = () => publicRow.radioField.checked ? linkInputField.getValue() : '';\n\n const changePrivacy = async() => {\n const username = getUsername();\n const channelId = await this.managers.appChatsManager.migrateChat(this.chatId);\n if(!username) {\n return this.managers.appChatsManager.makeChannelPrivate(channelId);\n } else {\n return this.managers.appChatsManager.updateUsername(channelId, username);\n }\n };\n\n const confirmChangingPrivacy = async() => {\n const username = getUsername();\n if(!username) {\n const chat = apiManagerProxy.getChat(this.chatId);\n const wasUsername = getPeerEditableUsername(chat as Chat.channel);\n if(wasUsername) {\n await confirmationPopup({\n descriptionLangKey: isBroadcast ? 'ChannelVisibility.Confirm.MakePrivate.Channel' : 'ChannelVisibility.Confirm.MakePrivate.Group',\n descriptionLangArgs: [wasUsername],\n button: {\n langKey: 'OK'\n }\n });\n }\n }\n };\n\n attachClickEvent(applyBtn, async() => {\n if(changedPrivacy) {\n await confirmChangingPrivacy();\n }\n\n const unsetLoader = setButtonLoader(applyBtn);\n try {\n if(changedPrivacy) {\n await changePrivacy();\n }\n\n if(changedJoinToSend || changedJoinRequest) {\n await Promise.all([\n changedJoinToSend && this.managers.appChatsManager.toggleJoinToSend(\n this.chatId,\n joinToSendRow.checkboxField.checked\n ),\n changedJoinRequest && this.managers.appChatsManager.toggleJoinRequest(\n this.chatId,\n joinRequestRow.checkboxField.checked\n )\n ]);\n }\n\n this.close();\n } catch(err) {\n unsetLoader();\n }\n }, {listenerSetter: this.listenerSetter});\n\n this.scrollable.append(section.container, privateSection.container, publicContainer);\n\n let joinRequestSection: SettingSection, joinToSendRow: Row, joinRequestRow: Row, originalJoinToSend: boolean, originalJoinRequest: boolean;\n if(!isBroadcast) {\n const section = joinRequestSection = new SettingSection({\n name: 'ChannelSettingsJoinTitle',\n caption: linkedChatId ? 'ChannelSettingsJoinToSendInfo' : 'ChannelSettingsJoinRequestInfo'\n });\n\n joinToSendRow = new Row({\n titleLangKey: 'ChannelSettingsJoinToSend',\n checkboxField: new CheckboxField({\n toggle: true\n })\n });\n\n joinRequestRow = new Row({\n titleLangKey: 'ChannelSettingsJoinRequest',\n checkboxField: new CheckboxField({\n toggle: true\n })\n });\n\n const canToggleJoinRequest = () => {\n return linkedChatId ? joinToSendRow.checkboxField.checked : !publicContainer.classList.contains('hide');\n };\n\n const toggleJoinRequestVisibility = () => {\n const can = canToggleJoinRequest();\n joinRequestRow.container.classList.toggle('hide', !can);\n if(!can && joinRequestRow.checkboxField.checked) {\n joinRequestRow.checkboxField.checked = false;\n }\n };\n\n const onChatUpdate = () => {\n originalJoinToSend = !!(chat as Chat.channel).pFlags.join_to_send;\n originalJoinRequest = !!(chat as Chat.channel).pFlags.join_request;\n joinToSendRow.checkboxField.setValueSilently(originalJoinToSend);\n joinRequestRow.checkboxField.setValueSilently(originalJoinRequest);\n toggleJoinRequestVisibility();\n onChange();\n };\n\n [joinToSendRow, joinRequestRow].forEach((row) => {\n this.listenerSetter.add(row.checkboxField.input)('change', () => {\n if(joinToSendRow === row) {\n toggleJoinRequestVisibility();\n }\n\n onChange();\n });\n });\n\n if(!linkedChatId) {\n joinToSendRow.container.classList.add('hide');\n }\n\n addChatUpdateListener(onChatUpdate);\n onChatUpdate();\n\n section.content.append(joinToSendRow.container, joinRequestRow.container);\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({\n name: 'SavingContentTitle',\n caption: isBroadcast ? 'RestrictSavingContentInfoChannel' : 'RestrictSavingContentInfoGroup'\n });\n\n let checkboxField: CheckboxField;\n const row = new Row({\n titleLangKey: 'RestrictSavingContent',\n checkboxField: checkboxField = new CheckboxField({toggle: true})\n });\n\n this.listenerSetter.add(checkboxField.input)('change', () => {\n const toggle = row.toggleDisability(true);\n this.managers.appChatsManager.toggleNoForwards(this.chatId, checkboxField.checked).then(() => {\n toggle();\n });\n });\n\n const onChatUpdate = () => {\n checkboxField.setValueSilently(!!(chat as Chat.channel).pFlags.noforwards);\n };\n\n addChatUpdateListener(onChatUpdate);\n onChatUpdate();\n\n section.content.append(row.container);\n\n this.scrollable.append(section.container);\n }\n\n (originalValue !== placeholder || getPeerActiveUsernames(chat as Chat.channel).length ? publicRow : privateRow).radioField.checked = true;\n linkInputField.setOriginalValue(originalValue, true);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Scrollable from '../components/scrollable';\nimport safeAssign from './object/safeAssign';\n\nexport default class ScrollableLoader {\n public loading = false;\n private scrollable: Scrollable;\n private getPromise: () => Promise;\n private promise: Promise;\n private loaded = false;\n\n constructor(options: {\n scrollable: ScrollableLoader['scrollable'],\n getPromise: ScrollableLoader['getPromise']\n }) {\n safeAssign(this, options);\n\n options.scrollable.onScrolledBottom = () => {\n this.load();\n };\n }\n\n public load() {\n if(this.loaded) {\n return Promise.resolve();\n }\n\n if(this.loading) {\n return this.promise;\n }\n\n this.loading = true;\n this.promise = this.getPromise().then((done) => {\n this.loading = false;\n this.promise = undefined;\n\n if(done) {\n this.loaded = true;\n this.scrollable.onScrolledBottom = null;\n } else {\n this.scrollable.checkForTriggers();\n }\n }, () => {\n this.promise = undefined;\n this.loading = false;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport copy from '../../../../helpers/object/copy';\nimport {ChatBannedRights, Chat} from '../../../../layer';\n\nexport default function combineParticipantBannedRights(chat: Chat.channel, rights: ChatBannedRights) {\n if(chat.default_banned_rights) {\n rights = copy(rights);\n const defaultRights = chat.default_banned_rights.pFlags;\n for(const i in defaultRights) {\n // @ts-ignore\n rights.pFlags[i] = defaultRights[i];\n }\n }\n\n return rights;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Chat, ChatAdminRights, ChatBannedRights} from '../../../../layer';\nimport {ChatRights} from '../../appChatsManager';\n\n/**\n * Check the user's ability to do an action in chat\n * @param id\n * @param action creator can still send messages to left channel. so this function shows server rights. see canSendToPeer for local rights in messages manager.\n * @param rights do not provide this parameter when checking rights for self\n * @param isThread\n * @returns\n */\nexport default function hasRights(\n chat: Exclude,\n action: ChatRights,\n rights?: ChatAdminRights | ChatBannedRights,\n isThread?: boolean\n) {\n if(!chat) return false;\n\n if((chat as Chat.chat).pFlags.deactivated && action !== 'view_messages') {\n return false;\n }\n\n const isCheckingRightsForSelf = rights === undefined;\n if((chat as Chat.chat).pFlags.creator && isCheckingRightsForSelf/* && action !== 'anonymous' */) {\n return true;\n }\n\n if(chat._ === 'chatForbidden' ||\n chat._ === 'channelForbidden' ||\n // (chat as any).pFlags.kicked ||\n (chat.pFlags.left && !(chat as Chat.channel).pFlags.megagroup)) {\n return false;\n }\n\n // const adminRights = chat.admin_rights;\n // const bannedRights = (chat as Chat.channel).banned_rights || chat.default_banned_rights;\n\n if(!rights) {\n rights = chat.admin_rights || (chat as Chat.channel).banned_rights || chat.default_banned_rights;\n\n if(!rights) {\n return false;\n }\n }\n\n let myFlags: Partial<{[flag in keyof ChatBannedRights['pFlags'] | keyof ChatAdminRights['pFlags']]: true}> = {};\n if(rights) {\n myFlags = rights.pFlags as any;\n }\n\n // const adminFlags = adminRights?.pFlags || {};\n // const bannedFlags = bannedRights?.pFlags || {};\n\n const isAdmin = rights._ === 'chatAdminRights';\n\n switch(action) {\n case 'embed_links':\n case 'send_games':\n case 'send_gifs':\n case 'send_inline':\n case 'send_media':\n case 'send_messages':\n case 'send_polls':\n case 'send_stickers':\n case 'send_photos':\n case 'send_videos':\n case 'send_roundvideos':\n case 'send_audios':\n case 'send_voices':\n case 'send_docs':\n case 'send_plain': {\n // if(!isThread && chat.pFlags.left) {\n // return false;\n // }\n\n if(!isAdmin && myFlags[action]) {\n return false;\n }\n\n if(chat._ === 'channel') {\n if(!chat.pFlags.megagroup && !myFlags.post_messages) {\n return false;\n }\n }\n\n break;\n }\n\n // * revoke foreign messages\n case 'delete_messages':\n case 'manage_call': {\n return !!myFlags[action];\n }\n\n case 'pin_messages': {\n return isAdmin ? !!(myFlags[action] || (!(chat as Chat.channel).pFlags.megagroup && myFlags.post_messages)) : !myFlags[action];\n }\n\n // case 'change_info': {\n // return adminRights || isCheckingRightsForSelf ? adminFlags[action] : !myFlags[action];\n // }\n\n case 'invite_links': {\n if(chat._ === 'chat') {\n return false;\n }\n\n return isAdmin && !!myFlags['invite_users'];\n }\n\n // * only creator can do that\n case 'change_type':\n case 'delete_chat': {\n return false;\n }\n\n case 'change_info':\n case 'invite_users': {\n return isAdmin || (chat as Chat.channel).pFlags.broadcast ? !!myFlags[action] : !myFlags[action];\n }\n\n case 'delete_stories':\n case 'edit_stories':\n case 'post_stories':\n case 'add_admins':\n case 'anonymous':\n case 'post_messages':\n case 'edit_messages': {\n return isAdmin && !!myFlags[action];\n }\n\n case 'ban_users':\n case 'change_permissions': {\n return isAdmin && !!myFlags['ban_users'];\n }\n\n case 'view_participants': {\n return !!(chat._ === 'chat' || !chat.pFlags.broadcast || chat.pFlags.creator || chat.admin_rights);\n }\n\n case 'create_giveaway': {\n return isAdmin && !!myFlags['post_messages'];\n }\n\n // * regular user can only create a new topic and manage their own topics (so this will only say whether user is eligible to create a new topic)\n // * admin can manage all topics\n case 'manage_topics': {\n return isAdmin ? !!myFlags[action] : !myFlags[action];\n }\n\n // case 'view_statistics': {\n // return isAdmin && !!myFlags['other'];\n // }\n }\n\n return true;\n}\n","export default function filterUnique>(arr: T): T {\n return [...new Set(arr)] as T;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ChannelParticipant, ChatParticipant} from '../../../../layer';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getParticipantPeerId(participant: PeerId | ChannelParticipant | ChatParticipant): PeerId {\n if(typeof(participant) !== 'object') {\n return participant;\n }\n\n const peerId = (participant as ChannelParticipant.channelParticipantBanned).peer ?\n getPeerId((participant as ChannelParticipant.channelParticipantBanned).peer) :\n (participant as ChatParticipant.chatParticipant).user_id.toPeerId();\n return peerId;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {User} from '../../../../layer';\nimport {REPLIES_PEER_ID} from '../../../mtproto/mtproto_config';\n\nexport default function canSendToUser(user: User.user) {\n return !!(user && !user.pFlags.deleted && user.id.toPeerId() !== REPLIES_PEER_ID);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {DialogFilter} from '../../../../layer';\n\nexport default function getDialogIndexKey(localId: DialogFilter.dialogFilter['localId'] = 0) {\n return `index_${localId}` as const;\n // return filterId !== undefined && filterId > 1 ? `filter_${filterId}` as const : 'main' as const;\n // const indexStr = filterId > 1 ?\n // `index_${filterId}` as const :\n // 'index' as const;\n\n // return indexStr;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Dialog, ForumTopic, SavedDialog} from '../../../../layer';\nimport type {REAL_FOLDER_ID} from '../../../mtproto/mtproto_config';\nimport getDialogIndexKey from './getDialogIndexKey';\n\nexport default function getDialogIndex(\n dialog: Dialog.dialog | ForumTopic.forumTopic | SavedDialog.savedDialog,\n indexKey: ReturnType = getDialogIndexKey((dialog as Dialog).folder_id as REAL_FOLDER_ID)\n) {\n return dialog?.[indexKey as 'index_0'];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Middleware} from '../../helpers/middleware';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport lottieLoader, {LottieAssetName} from '../../lib/rlottie/lottieLoader';\nimport RLottiePlayer from '../../lib/rlottie/rlottiePlayer';\nimport rootScope from '../../lib/rootScope';\nimport wrapSticker from './sticker';\n\nexport default async function wrapLocalSticker({\n container,\n emoji,\n width,\n height,\n assetName,\n middleware,\n managers = rootScope.managers,\n loop = false,\n autoplay = true\n}: {\n container?: HTMLElement,\n doc?: MyDocument,\n // url?: string,\n emoji?: string,\n assetName?: LottieAssetName,\n width: number,\n height: number,\n managers?: AppManagers,\n middleware?: Middleware,\n autoplay?: boolean,\n loop?: boolean\n}) {\n container ||= document.createElement('div');\n container.classList.add('media-sticker-wrapper');\n\n let playerPromise: Promise;\n if(assetName) {\n playerPromise = lottieLoader.loadAnimationAsAsset({\n container,\n loop,\n autoplay,\n width,\n height,\n noCache: true,\n middleware\n }, assetName).then((animation) => {\n return lottieLoader.waitForFirstFrame(animation);\n });\n } else if(emoji) {\n const doc = await managers.appStickersManager.getAnimatedEmojiSticker(emoji);\n if(doc) playerPromise = wrapSticker({\n doc,\n div: container,\n loop,\n play: autoplay,\n width,\n height,\n emoji,\n managers,\n middleware\n }).then((result) => {\n return result.render as Promise;\n });\n }\n\n return {container, promise: playerPromise};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Middleware} from '../helpers/middleware';\nimport {LottieAssetName} from '../lib/rlottie/lottieLoader';\nimport wrapLocalSticker from './wrappers/localSticker';\nimport {Accessor, createRoot, JSX} from 'solid-js';\n\nexport default async function emptyPlaceholder({\n middleware,\n title,\n description,\n hide,\n assetName = 'UtyanSearch',\n width = 140,\n height = 140,\n isFullSize\n}: {\n middleware: Middleware,\n title: Accessor,\n description: Accessor,\n hide: Accessor,\n assetName?: LottieAssetName,\n width?: number,\n height?: number,\n isFullSize?: boolean\n}) {\n const {container, promise} = await wrapLocalSticker({\n width,\n height,\n assetName,\n middleware,\n loop: true\n });\n\n if(!middleware()) {\n return;\n }\n\n await promise;\n if(!middleware()) {\n return;\n }\n\n container.classList.add('selector-empty-placeholder-sticker');\n\n let ret: JSX.Element;\n createRoot((disposer) => {\n middleware.onClean(disposer);\n ret = (\n
\n {container}\n
\n {title()}\n
\n {description() && (\n
\n {description()}\n
\n )}\n
\n );\n });\n\n return ret as HTMLElement;\n}\n","export default function drawCircle(ctx: CanvasRenderingContext2D, x: number, y: number, radius: number, fill?: boolean, stroke?: boolean) {\n const dpr = ctx.canvas.dpr;\n if(dpr) {\n x *= dpr;\n y *= dpr;\n radius *= dpr;\n }\n\n ctx.beginPath();\n ctx.arc(x, y, radius, 0, 2 * Math.PI, false);\n ctx.closePath();\n\n if(fill) {\n ctx.fill();\n }\n\n if(stroke) {\n ctx.stroke();\n }\n}\n\nexport function drawCircleFromStart(ctx: CanvasRenderingContext2D, x: number, y: number, radius: number, fill?: boolean, stroke?: boolean) {\n return drawCircle(ctx, x + radius, y + radius, radius, fill, stroke);\n}\n","export default function roundRect(\n ctx: CanvasRenderingContext2D,\n x: number,\n y: number,\n width: number,\n height: number,\n radius: {[k in 'tl' | 'tr' | 'br' | 'bl']?: number} | number,\n fill?: boolean,\n stroke?: boolean\n) {\n const dpr = ctx.canvas.dpr;\n if(dpr) {\n x *= dpr;\n y *= dpr;\n width *= dpr;\n height *= dpr;\n }\n\n if(typeof(radius) === 'number') {\n if(dpr) radius *= dpr;\n radius = {tl: radius, tr: radius, br: radius, bl: radius};\n } else {\n const defaultRadius = {tl: 0, tr: 0, br: 0, bl: 0};\n for(const side in defaultRadius) {\n // @ts-ignore\n radius[side] = radius[side] ? (dpr ? radius[side] * dpr : radius[side]) : defaultRadius[side];\n }\n }\n\n ctx.beginPath();\n ctx.moveTo(x + radius.tl, y);\n ctx.lineTo(x + width - radius.tr, y);\n ctx.quadraticCurveTo(x + width, y, x + width, y + radius.tr);\n ctx.lineTo(x + width, y + height - radius.br);\n ctx.quadraticCurveTo(x + width, y + height, x + width - radius.br, y + height);\n ctx.lineTo(x + radius.bl, y + height);\n ctx.quadraticCurveTo(x, y + height, x, y + height - radius.bl);\n ctx.lineTo(x, y + radius.tl);\n ctx.quadraticCurveTo(x, y, x + radius.tl, y);\n ctx.closePath();\n\n if(fill) {\n ctx.fill();\n }\n\n if(stroke) {\n ctx.stroke();\n }\n}\n","import customProperties from '../dom/customProperties';\nimport clamp from '../number/clamp';\n\nexport default class Shimmer {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private font = '30pt Helvetica';\n private currTime = Date.now();\n private diffTime = 0;\n private spread = 0;\n private paused = false;\n private pausedTime = 0;\n private pauseInterval = 850;\n private lightSource = 0;\n private inc = 0.032;\n private lightSpread = 0.55;\n private animations = ['slide', 'slide', 'slide', 'slide'];\n private currentAnimationIndex = 0;\n private text: string;\n private fillStyle: CanvasRenderingContext2D['fillStyle'];\n\n public night: boolean;\n\n private keepTime() {\n this.diffTime = Date.now() - this.currTime;\n this.currTime = Date.now();\n }\n\n private cycleAnimation() {\n ++this.currentAnimationIndex;\n if(this.currentAnimationIndex >= this.animations.length) {\n this.currentAnimationIndex = 0;\n }\n }\n\n private animate() {\n const currentAnimation = this.animations[this.currentAnimationIndex];\n if(currentAnimation === 'glow') {\n return this.animateGlow(); // return glow style\n } else if(currentAnimation === 'slide') {\n return this.animateSlide(); // return slide gradient\n } else {\n console.log('unknown animation type: ' + String(currentAnimation));\n }\n }\n\n private animateGlow() {\n var glowEnd = 255,\n rgbStart = 68,\n r = rgbStart,\n g = r,\n b = r,\n increment = 10,\n interval = 800;\n\n return () => {\n var smartInc = increment * (this.diffTime / (1000 / 60));\n if(this.paused) {\n if((Date.now() - this.pausedTime) > interval) {\n r = rgbStart;\n this.cycleAnimation()\n this.paused = false;\n }\n } else {\n r = parseInt('' + (r + smartInc));\n if(r >= glowEnd) {\n this.paused = true;\n this.pausedTime = Date.now()\n }\n }\n return 'rgb('+ r + ',' + r + ',' + r + ')';\n };\n }\n\n private animateSlide(): CanvasGradient {\n var gradient = this.ctx.createLinearGradient(0, 0, this.canvas.width, 0),\n smartInc = this.inc * (this.diffTime / (1000 / 60)),\n lightLeft,\n lightRight,\n lightCenter;\n if(this.paused) {\n if((Date.now() - this.pausedTime) > this.pauseInterval) {\n this.lightSource = -0.6;\n this.cycleAnimation()\n this.paused = false;\n return this.animateSlide();\n }\n } else {\n this.lightSource += smartInc;\n if(this.lightSource > (1 + this.lightSpread)) {\n this.paused = true;\n this.pausedTime = Date.now();\n }\n }\n // lighting positions:\n lightCenter = clamp(this.lightSource, 0, 1);\n lightLeft = clamp(this.lightSource - this.lightSpread, 0, 1);\n lightRight = clamp(this.lightSource + this.lightSpread, 0, 1);\n\n const backgroundColor = customProperties.getProperty('background-color-true', this.night);\n const shimmerColor = customProperties.getProperty('surface-color', this.night);\n gradient.addColorStop(lightLeft, backgroundColor);\n gradient.addColorStop(lightCenter, shimmerColor);\n gradient.addColorStop(lightRight, backgroundColor);\n\n return gradient;\n }\n\n public settings(dict: Partial<{\n canvas: Shimmer['canvas'],\n fillStyle: Shimmer['fillStyle'],\n font: Shimmer['font'],\n lightSpread: Shimmer['lightSpread'],\n inc: Shimmer['inc'],\n animations: Shimmer['animations'],\n text: Shimmer['text']\n }> = {}) {\n this.canvas = dict.canvas ?? document.createElement('canvas');\n this.ctx = this.canvas.getContext('2d');\n this.font = dict.font ?? this.font;\n this.lightSpread = dict.lightSpread ?? this.lightSpread;\n this.inc = dict.inc ?? this.inc;\n this.animations = dict.animations ?? this.animations;\n this.text = dict.text ?? this.text;\n this.fillStyle = dict.fillStyle;\n\n this.canvas.classList.add('shimmer-canvas');\n }\n\n public on() {\n const {width, height} = this.canvas;\n // record the time we ran:\n this.keepTime();\n // clear and fill the canvas:\n this.ctx.clearRect(0, 0, width, height);\n\n if(this.font) {\n this.ctx.font = this.font;\n }\n\n this.ctx.fillStyle = this.animate() as any;\n this.ctx.fillRect(0, 0, width, height);\n\n if(this.fillStyle) {\n this.ctx.fillStyle = this.fillStyle;\n this.ctx.fillRect(0, 0, width, height);\n }\n\n if(this.text) {\n this.ctx.fillText(this.text, 50, 50);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Scrollable from '../components/scrollable';\nimport rootScope from '../lib/rootScope';\nimport {animate} from './animation';\nimport {drawCircleFromStart} from './canvas/drawCircle';\nimport roundRect from './canvas/roundRect';\nimport Shimmer from './canvas/shimmer';\nimport customProperties from './dom/customProperties';\nimport easeInOutSine from './easing/easeInOutSine';\nimport liteMode from './liteMode';\nimport mediaSizes from './mediaSizes';\n\nexport default class DialogsPlaceholder {\n private canvas: HTMLCanvasElement;\n private ctx: CanvasRenderingContext2D;\n private shimmer: Shimmer;\n private tempId: number;\n private detachTime: number;\n\n private length: number;\n private dialogHeight: number;\n private availableLength: number;\n\n private avatarSize: number;\n private avatarMarginRight: number;\n private marginVertical: number;\n private marginLeft: number;\n private gapVertical: number;\n private totalHeight: number;\n private lineHeight: number;\n private lineBorderRadius: number;\n private lineMarginVertical: number;\n private statusWidth: number;\n private generatedValues: {\n firstLineWidth: number,\n secondLineWidth: number,\n statusWidth: number\n }[];\n\n private getRectFrom: () => Pick;\n private onRemove: () => void;\n private blockScrollable: Scrollable;\n\n private night: boolean;\n private noSecondLine: boolean;\n\n constructor(sizes: Partial<{\n avatarSize: number,\n avatarMarginRight: number,\n marginVertical: number,\n marginLeft: number,\n lineMarginVertical: number,\n gapVertical: number,\n totalHeight: number,\n statusWidth: number,\n noSecondLine: boolean,\n night: boolean\n }> = {}) {\n this.shimmer = new Shimmer();\n this.shimmer.night = this.night = sizes.night;\n this.tempId = 0;\n this.canvas = document.createElement('canvas');\n this.canvas.classList.add('dialogs-placeholder-canvas');\n this.ctx = this.canvas.getContext('2d');\n\n this.generatedValues = [];\n this.avatarSize = sizes.avatarSize ?? 54;\n this.avatarMarginRight = sizes.avatarMarginRight ?? 10;\n this.marginVertical = sizes.marginVertical ?? 9;\n this.marginLeft = sizes.marginLeft ?? 17;\n this.gapVertical = sizes.gapVertical ?? 0;\n this.totalHeight = sizes.totalHeight ?? (this.avatarSize + this.marginVertical * 2);\n this.lineHeight = 10;\n this.lineBorderRadius = 6;\n this.lineMarginVertical = sizes.lineMarginVertical ?? 8;\n this.statusWidth = sizes.statusWidth ?? 24;\n this.noSecondLine = sizes.noSecondLine;\n }\n\n public attach({container, rect, getRectFrom, onRemove, blockScrollable}: {\n container: HTMLElement,\n rect?: ReturnType,\n getRectFrom?: HTMLElement | DialogsPlaceholder['getRectFrom'],\n onRemove?: DialogsPlaceholder['onRemove'],\n blockScrollable?: DialogsPlaceholder['blockScrollable']\n }) {\n const {canvas} = this;\n\n this.detachTime = undefined;\n this.onRemove = onRemove;\n this.getRectFrom = typeof(getRectFrom) === 'function' ? getRectFrom : (getRectFrom || container).getBoundingClientRect.bind(getRectFrom || container);\n if(this.blockScrollable = blockScrollable) {\n blockScrollable.container.style.overflowY = 'hidden';\n }\n\n this.updateCanvasSize(rect);\n this.startAnimation();\n container.append(canvas);\n }\n\n public detach(availableLength: number) {\n if(this.detachTime) {\n return;\n }\n\n this.availableLength = availableLength;\n this.detachTime = Date.now();\n\n if(!liteMode.isAvailable('animations')) {\n this.remove();\n }\n }\n\n public removeWithoutUnmounting() {\n this.stopAnimation();\n this.onRemove?.();\n this.onRemove = undefined;\n }\n\n public remove() {\n this.stopAnimation();\n\n if(this.canvas.parentElement) {\n this.canvas.remove();\n\n if(this.blockScrollable) {\n this.blockScrollable.container.style.overflowY = '';\n this.blockScrollable = undefined;\n }\n }\n\n this.onRemove?.();\n this.onRemove = undefined;\n }\n\n private updateCanvasSize(rect = this.getRectFrom()) {\n const {canvas} = this;\n const dpr = canvas.dpr = window.devicePixelRatio;\n canvas.width = rect.width * dpr;\n canvas.height = rect.height * dpr;\n canvas.style.width = rect.width + 'px';\n canvas.style.height = rect.height + 'px';\n }\n\n private renderDetachAnimationFrame() {\n const {\n canvas,\n ctx,\n detachTime,\n length,\n availableLength\n } = this;\n\n if(!detachTime) {\n return;\n } else if(!liteMode.isAvailable('animations')) {\n this.remove();\n return;\n }\n\n const {width} = canvas;\n\n ctx.globalCompositeOperation = 'destination-out';\n\n // ctx.fillStyle = 'rgba(0, 0, 0, 0)';\n // ctx.fillRect(0, 0, width, height);\n\n // const DURATION = 500;\n // const DELAY = DURATION;\n const DURATION = 150;\n const DELAY = 15;\n const elapsedTime = Date.now() - detachTime;\n let completed = true;\n for(let i = 0; i < length; ++i) {\n const delay = availableLength < length && i >= availableLength ? DELAY * (availableLength - 1) : DELAY * i;\n const elapsedRowTime = elapsedTime - delay;\n if(elapsedRowTime <= 0) {\n completed = false;\n continue;\n }\n\n const progress = easeInOutSine(elapsedRowTime, 0, 1, DURATION);\n\n ctx.beginPath();\n ctx.rect(0, this.dialogHeight * i, width, this.dialogHeight);\n ctx.fillStyle = `rgba(0, 0, 0, ${progress})`;\n ctx.fill();\n\n if(progress < 1) {\n completed = false;\n }\n }\n\n // const totalRadius = Math.sqrt(width ** 2 + height ** 2);\n // const gradient = ctx.createRadialGradient(\n // 0, 0, 0,\n // 0, 0, totalRadius);\n // gradient.addColorStop(0, 'rgba(0, 0, 0, 1)');\n // gradient.addColorStop(progress, 'rgba(0, 0, 0, 0)');\n // gradient.addColorStop(1, 'rgba(0, 0, 0, 0)');\n\n // const gradient = ctx.createLinearGradient(0, 0, 0, height);\n // gradient.addColorStop(0, 'rgba(0, 0, 0, 1)');\n // gradient.addColorStop(progress, 'rgba(0, 0, 0, 0)');\n // gradient.addColorStop(1, 'rgba(0, 0, 0, 0)');\n\n // ctx.fillStyle = gradient;\n // ctx.fillRect(0, 0, width, height);\n\n ctx.globalCompositeOperation = 'source-over';\n\n if(completed) {\n this.remove();\n }\n }\n\n private renderFrame() {\n this.shimmer.on();\n this.renderDetachAnimationFrame();\n }\n\n private startAnimation() {\n const {canvas, shimmer} = this;\n const tempId = ++this.tempId;\n const pattern = this.createPattern();\n\n shimmer.settings({\n canvas,\n fillStyle: pattern\n });\n\n const middleware = () => {\n return this.tempId === tempId;\n };\n\n this.renderFrame();\n animate(() => {\n if(!middleware()) {\n return false;\n }\n\n // ! should've removed the loop if animations are disabled\n if(liteMode.isAvailable('animations')) {\n this.renderFrame();\n }\n\n // ! tempId can be changed during renderFrame\n return middleware();\n });\n\n rootScope.addEventListener('theme_changed', this.onThemeChange);\n mediaSizes.addEventListener('resize', this.onResize);\n }\n\n private stopAnimation() {\n ++this.tempId;\n rootScope.removeEventListener('theme_changed', this.onThemeChange);\n mediaSizes.removeEventListener('resize', this.onResize);\n }\n\n private onThemeChange = () => {\n this.stopAnimation();\n this.startAnimation();\n };\n\n private onResize = () => {\n const {canvas} = this;\n const {width, height, dpr} = canvas;\n this.updateCanvasSize();\n if(canvas.width === width && canvas.height === height && canvas.dpr === dpr) {\n return;\n }\n\n this.stopAnimation();\n this.startAnimation();\n };\n\n private createPattern() {\n const {canvas, ctx} = this;\n\n const patternCanvas = document.createElement('canvas');\n const patternContext = patternCanvas.getContext('2d');\n const dpr = canvas.dpr;\n patternCanvas.dpr = dpr;\n patternCanvas.width = canvas.width;\n patternCanvas.height = canvas.height;\n\n patternContext.fillStyle = customProperties.getProperty('surface-color', this.night);\n patternContext.fillRect(0, 0, patternCanvas.width, patternCanvas.height);\n\n patternContext.fillStyle = '#000';\n patternContext.globalCompositeOperation = 'destination-out';\n\n const dialogHeight = this.dialogHeight = this.totalHeight * dpr;\n const gapVertical = this.gapVertical * dpr;\n let gapVerticalSum = 0;\n const length = this.length = Math.ceil(canvas.height / dialogHeight);\n for(let i = 0; i < length; ++i) {\n this.drawChat(patternContext, i, i * dialogHeight + gapVerticalSum);\n gapVerticalSum += gapVertical;\n }\n\n return ctx.createPattern(patternCanvas, 'no-repeat');\n }\n\n private drawChat(ctx: CanvasRenderingContext2D, i: number, y: number) {\n let generatedValues = this.generatedValues[i];\n if(!generatedValues) {\n generatedValues = this.generatedValues[i] = {\n firstLineWidth: 40 + Math.random() * 100, // 120\n secondLineWidth: this.noSecondLine ? 0 : 120 + Math.random() * 130, // 240\n statusWidth: this.statusWidth ? this.statusWidth + Math.random() * 16 : undefined\n };\n }\n\n const {\n firstLineWidth,\n secondLineWidth,\n statusWidth\n } = generatedValues;\n\n const {canvas} = ctx;\n const {dpr} = canvas;\n y /= dpr;\n\n const {\n avatarSize,\n marginVertical,\n lineHeight,\n lineBorderRadius,\n lineMarginVertical\n } = this;\n\n let marginLeft = this.marginLeft;\n\n if(avatarSize) {\n drawCircleFromStart(ctx, marginLeft, y + marginVertical, avatarSize / 2, true);\n marginLeft += avatarSize + this.avatarMarginRight;\n }\n\n // 9 + 54 - 10 - 8 = 45 ........ 72 - 9 - 10 - 8\n roundRect(ctx, marginLeft, y + marginVertical + lineMarginVertical, firstLineWidth, lineHeight, lineBorderRadius, true);\n // roundRect(ctx, marginLeft, y + marginVertical + avatarSize - lineHeight - lineMarginVertical, secondLineWidth, lineHeight, lineBorderRadius, true);\n secondLineWidth && roundRect(ctx, marginLeft, y + this.totalHeight - marginVertical - lineHeight - lineMarginVertical, secondLineWidth, lineHeight, lineBorderRadius, true);\n\n statusWidth && roundRect(ctx, canvas.width / dpr - 24 - statusWidth, y + marginVertical + lineMarginVertical, statusWidth, lineHeight, lineBorderRadius, true);\n }\n}\n","import cancelEvent from './cancelEvent';\n\nexport default function anchorCallback(callback: (e: MouseEvent) => any, _cancelEvent = true) {\n const a = document.createElement('a');\n a.href = '#';\n a.onclick = (e) => {\n _cancelEvent && cancelEvent(e);\n callback(e);\n };\n return a;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatRights} from '../lib/appManagers/appChatsManager';\nimport type {Dialog} from '../lib/appManagers/appMessagesManager';\nimport type {AppPeersManager, IsPeerType} from '../lib/appManagers/appPeersManager';\nimport appDialogsManager, {DialogElement, DialogElementSize as DialogElementSize} from '../lib/appManagers/appDialogsManager';\nimport rootScope from '../lib/rootScope';\nimport Scrollable from './scrollable';\nimport {FocusDirection} from '../helpers/fastSmoothScroll';\nimport CheckboxField from './checkboxField';\nimport {i18n, LangPackKey, _i18n} from '../lib/langPack';\nimport findUpAttribute from '../helpers/dom/findUpAttribute';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport PeerTitle from './peerTitle';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport debounce from '../helpers/schedulers/debounce';\nimport windowSize from '../helpers/windowSize';\nimport {attachClickEvent, simulateClickEvent} from '../helpers/dom/clickEvent';\nimport filterUnique from '../helpers/array/filterUnique';\nimport indexOfAndSplice from '../helpers/array/indexOfAndSplice';\nimport safeAssign from '../helpers/object/safeAssign';\nimport findAndSplice from '../helpers/array/findAndSplice';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport filterAsync from '../helpers/array/filterAsync';\nimport getParticipantPeerId from '../lib/appManagers/utils/chats/getParticipantPeerId';\nimport getChatMembersString from './wrappers/getChatMembersString';\nimport getUserStatusString from './wrappers/getUserStatusString';\nimport {ChannelParticipant, ChannelParticipantsFilter, ChannelsChannelParticipants, Chat, ChatParticipant, User} from '../layer';\nimport canSendToUser from '../lib/appManagers/utils/users/canSendToUser';\nimport hasRights from '../lib/appManagers/utils/chats/hasRights';\nimport getDialogIndex from '../lib/appManagers/utils/dialogs/getDialogIndex';\nimport {generateDelimiter} from './generateDelimiter';\nimport SettingSection from './settingSection';\nimport liteMode from '../helpers/liteMode';\nimport emptyPlaceholder from './emptyPlaceholder';\nimport {Middleware, MiddlewareHelper, getMiddleware} from '../helpers/middleware';\nimport {createSignal, Setter, JSX, createRoot, createEffect} from 'solid-js';\nimport DialogsPlaceholder from '../helpers/dialogsPlaceholder';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {avatarNew} from './avatarNew';\nimport Icon from './icon';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport {hideToast, toastNew} from './toast';\nimport wrapPeerTitle from './wrappers/peerTitle';\nimport anchorCallback from '../helpers/dom/anchorCallback';\nimport PopupPremium from './popups/premium';\n\nexport type SelectSearchPeerType = 'contacts' | 'dialogs' | 'channelParticipants' | 'custom';\nexport type FilterPeerTypeByFunc = (peer: ReturnType) => boolean;\n\n// TODO: правильная сортировка для addMembers, т.е. для peerType: 'contacts', потому что там идут сначала контакты - потом неконтакты, а должно всё сортироваться по имени\n\nexport default class AppSelectPeers {\n public container = document.createElement('div');\n public list = appDialogsManager.createChatList(/* {\n handheldsSize: 66,\n avatarSize: 48\n } */);\n protected oldList: HTMLElement;\n private chatsContainer = document.createElement('div');\n public scrollable: Scrollable;\n private selectedScrollable: Scrollable;\n\n private selectedContainer: HTMLElement;\n public input: HTMLInputElement;\n\n // public selected: {[peerId: PeerId]: HTMLElement} = {};\n public selected = new Set();\n\n public freezed = false;\n\n private folderId = 0;\n private offsetIndex = 0;\n private promise: Promise;\n\n private query = '';\n private cachedContacts: PeerId[];\n\n private loadedWhat: Partial<{[k in 'dialogs' | 'archived' | 'contacts' | 'channelParticipants' | 'custom']: boolean}> = {};\n\n private renderedPeerIds: Set = new Set();\n\n private appendTo: HTMLElement;\n private onChange: (length: number) => void;\n private peerType: SelectSearchPeerType[] = ['dialogs'];\n public renderResultsFunc: (peerIds: PeerId[], append?: boolean) => void | Promise;\n private chatRightsActions: ChatRights[];\n private multiSelect = true;\n private headerSearch: boolean;\n private noSearch: boolean;\n private rippleEnabled = true;\n private avatarSize: DialogElementSize = 'abitbigger';\n private exceptSelf: boolean;\n private filterPeerTypeBy: IsPeerType[] | FilterPeerTypeByFunc;\n private channelParticipantsFilter: ChannelParticipantsFilter | ((q: string) => ChannelParticipantsFilter);\n private channelParticipantsUpdateFilter: (participant: ChannelParticipant) => boolean;\n private meAsSaved: boolean;\n private noShadow: boolean;\n private noDelimiter: boolean;\n private onSelect: (peerId: PeerId) => void;\n\n private tempIds: {[k in keyof AppSelectPeers['loadedWhat']]: number} = {};\n private peerId: PeerId;\n\n private placeholder: LangPackKey;\n\n private selfPresence: LangPackKey = 'Presence.YourChat';\n\n private needSwitchList = false;\n\n private sectionNameLangPackKey: ConstructorParameters[0]['name'];\n private sectionCaption: ConstructorParameters[0]['caption'];\n\n private getSubtitleForElement: (peerId: PeerId) => HTMLElement | Promise | DocumentFragment | Promise;\n private processElementAfter: (peerId: PeerId, dialogElement: DialogElement) => void | Promise;\n\n private managers: AppManagers;\n\n private middleware: Middleware;\n public middlewareHelper: MiddlewareHelper;\n public middlewareHelperLoader: MiddlewareHelper;\n\n private emptySearchPlaceholderMiddlewareHelper: MiddlewareHelper;\n private emptySearchPlaceholderQuerySetter: Setter;\n private emptySearchPlaceholderHideSetter: Setter;\n\n private dialogsPlaceholder: DialogsPlaceholder;\n\n private design: 'round' | 'square' = 'round';\n public section: SettingSection;\n\n public participants: Map = new Map();\n private listenerSetter: ListenerSetter;\n public getMoreCustom: (q: string, middleware: () => boolean) => Promise<{result: PeerId[], isEnd: boolean}>;\n\n private withStories: boolean;\n\n private night: boolean;\n public searchSection: SettingSection;\n\n private checkboxSide: 'right' | 'left';\n private noPlaceholder: boolean;\n\n private limit: number;\n private limitCallback: () => void;\n\n private excludePeerIds: Set;\n public getPeerIdFromKey: (key: string | PeerId) => PeerId;\n\n constructor(options: {\n appendTo: AppSelectPeers['appendTo'],\n managers: AppSelectPeers['managers'],\n middleware: Middleware,\n onChange?: AppSelectPeers['onChange'],\n peerType?: AppSelectPeers['peerType'],\n peerId?: AppSelectPeers['peerId'],\n onFirstRender?: () => void,\n renderResultsFunc?: AppSelectPeers['renderResultsFunc'],\n chatRightsActions?: AppSelectPeers['chatRightsActions'],\n multiSelect?: AppSelectPeers['multiSelect'],\n headerSearch?: AppSelectPeers['headerSearch'],\n channelParticipantsFilter?: AppSelectPeers['channelParticipantsFilter'],\n channelParticipantsUpdateFilter?: AppSelectPeers['channelParticipantsUpdateFilter'],\n noSearch?: AppSelectPeers['noSearch'],\n rippleEnabled?: AppSelectPeers['rippleEnabled'],\n avatarSize?: AppSelectPeers['avatarSize'],\n placeholder?: AppSelectPeers['placeholder'],\n selfPresence?: AppSelectPeers['selfPresence'],\n exceptSelf?: AppSelectPeers['exceptSelf'],\n filterPeerTypeBy?: AppSelectPeers['filterPeerTypeBy'],\n sectionNameLangPackKey?: AppSelectPeers['sectionNameLangPackKey'],\n sectionCaption?: AppSelectPeers['sectionCaption'],\n design?: AppSelectPeers['design'],\n getSubtitleForElement?: AppSelectPeers['getSubtitleForElement'],\n processElementAfter?: AppSelectPeers['processElementAfter'],\n meAsSaved?: AppSelectPeers['meAsSaved'],\n noShadow?: AppSelectPeers['noShadow'],\n noDelimiter?: AppSelectPeers['noDelimiter'],\n onSelect?: AppSelectPeers['onSelect'],\n scrollable?: AppSelectPeers['scrollable'],\n getMoreCustom?: AppSelectPeers['getMoreCustom'],\n placeholderElementsGap?: number,\n withStories?: AppSelectPeers['withStories'],\n night?: boolean,\n checkboxSide?: 'right' | 'left',\n noPlaceholder?: boolean,\n excludePeerIds?: AppSelectPeers['excludePeerIds'],\n placeholderSizes?: ConstructorParameters[0],\n getPeerIdFromKey?: AppSelectPeers['getPeerIdFromKey']\n }) {\n safeAssign(this, options);\n\n this.checkboxSide ??= 'right';\n this.exceptSelf ??= false;\n this.meAsSaved ??= !(this.peerType.length === 1 && this.peerType[0] === 'channelParticipants');\n this.headerSearch ??= this.multiSelect && !this.noSearch;\n // this.noSearch ??= !this.multiSelect;\n this.noShadow ??= !!this.input || !this.sectionCaption;\n this.excludePeerIds ??= new Set();\n if(this.exceptSelf) this.excludePeerIds.add(rootScope.myId);\n\n this.middlewareHelper = options.middleware.create();\n this.middlewareHelperLoader = this.middlewareHelper.get().create();\n if(!this.noPlaceholder) this.dialogsPlaceholder = new DialogsPlaceholder(options.placeholderSizes || {\n avatarSize: 42,\n avatarMarginRight: 18,\n marginVertical: 7,\n marginLeft: 12 + (this.design === 'square' ? 48 : 0),\n totalHeight: 56,\n gapVertical: options.placeholderElementsGap,\n statusWidth: 0,\n night: this.night\n });\n\n this.container.classList.add(\n 'selector',\n 'selector-' + this.design,\n 'selector-' + this.checkboxSide\n );\n\n const f = (this.renderResultsFunc || this.renderResults).bind(this);\n this.renderResultsFunc = async(peerIds, append?: boolean) => {\n const {needSwitchList} = this;\n const middleware = this.middlewareHelperLoader.get();\n if(needSwitchList) {\n this.needSwitchList = false;\n this.oldList.replaceWith(this.list);\n this.oldList = undefined;\n }\n\n peerIds = peerIds.filter((peerId) => {\n if(this.excludePeerIds.has(peerId)) {\n return false;\n }\n\n const notRendered = !this.renderedPeerIds.has(peerId);\n if(notRendered) this.renderedPeerIds.add(peerId);\n return notRendered;\n });\n\n if(this.filterPeerTypeBy) {\n const isFunction = typeof(this.filterPeerTypeBy) === 'function';\n peerIds = await filterAsync(peerIds, async(peerId) => {\n if(peerId.isPeerId()) {\n if(isFunction) {\n const peer = await this.managers.appPeersManager.getPeer(peerId);\n return (this.filterPeerTypeBy as FilterPeerTypeByFunc)(peer);\n } else {\n for(const method of this.filterPeerTypeBy as IsPeerType[]) {\n if(await this.managers.appPeersManager[method](peerId)) {\n return true;\n }\n }\n }\n\n return false;\n }\n\n return true;\n });\n\n if(!middleware()) {\n return;\n }\n }\n\n await f(peerIds, append);\n\n if(!this.promise) {\n this.processPlaceholderOnResults();\n }\n\n if(this.chatRightsActions?.some((action) => action.startsWith('send_'))) {\n filterAsync(peerIds, async(peerId) => {\n const userId = peerId.toUserId();\n return this.managers.appUsersManager.isPremiumRequiredToContact(userId);\n }).then((userIds) => {\n for(const userId of userIds) {\n const element = this.getElementByPeerId(userId.toPeerId(false));\n if(!element) {\n continue;\n }\n\n const lock = Icon('premium_lock', 'selector-premium-lock');\n element.append(lock);\n element.classList.add('is-premium-locked');\n }\n });\n }\n };\n\n if(!this.noSearch) {\n this.input = document.createElement('input');\n this.input.classList.add('selector-search-input');\n this.input.type = 'text';\n _i18n(this.input, this.placeholder || 'SendMessageTo', undefined, 'placeholder');\n\n const debouncedInput = debounce(this.onInput, 200, false, true);\n this.input.addEventListener('input', debouncedInput);\n }\n\n if(this.headerSearch) {\n const section = this.searchSection = new SettingSection({});\n section.innerContainer.classList.add('selector-search-section');\n section.container.classList.add('selector-search-section-container');\n const topContainer = document.createElement('div');\n topContainer.classList.add('selector-search-container');\n\n this.selectedContainer = document.createElement('div');\n this.selectedContainer.classList.add('selector-search');\n\n this.selectedContainer.append(this.input);\n topContainer.append(this.selectedContainer);\n this.selectedScrollable = new Scrollable(topContainer);\n\n // let delimiter = document.createElement('hr');\n\n if(this.multiSelect) attachClickEvent(this.selectedContainer, (e) => {\n if(this.freezed) return;\n let target = e.target as HTMLElement;\n target = findUpClassName(target, 'selector-user');\n\n if(!target) return;\n\n const peerId = target.dataset.key;\n const li = this.chatsContainer.querySelector('[data-peer-id=\"' + peerId + '\"]') as HTMLElement;\n if(!li) {\n this.remove(peerId.toPeerId());\n } else {\n simulateClickEvent(li);\n }\n });\n\n section.content.append(topContainer);\n this.container.append(section.container/* , delimiter */);\n }\n\n this.chatsContainer.classList.add('chatlist-container');\n // this.chatsContainer.append(this.list);\n const section = this.section = new SettingSection({\n name: this.sectionNameLangPackKey,\n caption: this.sectionCaption,\n noShadow: this.noShadow\n });\n\n if(this.sectionNameLangPackKey) {\n section.content = section.generateContentElement();\n }\n\n // it can't have full height then\n if(!this.sectionCaption) {\n section.content.classList.add('selector-list-section-content');\n section.container.classList.add('selector-list-section-container');\n }\n\n section.content.append(this.list);\n this.chatsContainer.append(section.container);\n if(!this.scrollable) {\n this.scrollable = new Scrollable(this.chatsContainer);\n } else {\n this.scrollable.append(this.chatsContainer);\n }\n\n attachClickEvent(this.chatsContainer, (e) => {\n const target = findUpAttribute(e.target, 'data-peer-id') as HTMLElement;\n\n if(!target) return;\n cancelEvent(e);\n if(this.freezed) return;\n\n let key: PeerId | string = target.dataset.peerId;\n key = key.isPeerId() ? key.toPeerId() : key;\n\n if(key.isPeerId() && target.classList.contains('is-premium-locked')) {\n wrapPeerTitle({peerId: key, onlyFirstName: true}).then((title) => {\n toastNew({\n langPackKey: 'OnlyPremiumCanMessage',\n langPackArguments: [\n title,\n anchorCallback(() => {\n hideToast();\n PopupPremium.show();\n })\n ]\n });\n });\n return;\n }\n\n if(this.onSelect) {\n this.onSelect(key);\n return;\n }\n\n if(!this.multiSelect) {\n this.add({key});\n return;\n }\n\n // target.classList.toggle('active');\n const result = this.selected.has(key) ? this.remove(key) : this.add({key});\n if(!result) {\n return;\n }\n\n const checkbox = target.querySelector('input') as HTMLInputElement;\n checkbox.checked = !checkbox.checked;\n });\n\n this.scrollable.onScrolledBottom = () => {\n this.getMoreResults();\n };\n\n if(this.input && !this.noDelimiter) {\n this.scrollable.prepend(generateDelimiter());\n }\n\n this.listenerSetter = new ListenerSetter();\n this.container.append(this.chatsContainer);\n this.appendTo.append(this.container);\n\n if(this.channelParticipantsUpdateFilter) this.listenerSetter.add(rootScope)('chat_participant', (update) => {\n const newParticipant = update.new_participant;\n const peerId = update.user_id.toPeerId(false);\n const needAdd = this.channelParticipantsUpdateFilter(newParticipant);\n\n if(needAdd) {\n this.participants.set(peerId, newParticipant);\n } else {\n this.participants.delete(peerId);\n }\n\n if(needAdd) {\n this.renderResultsFunc([peerId], false);\n } else {\n this.deletePeerId(peerId);\n }\n });\n\n options.middleware.onDestroy(() => {\n this.destroy();\n });\n\n // WARNING TIMEOUT\n setTimeout(() => {\n const getResultsPromise = this.getMoreResults() as Promise;\n if(options.onFirstRender) {\n getResultsPromise.then(() => {\n options.onFirstRender();\n });\n }\n }, 0);\n }\n\n public static convertPeerTypes(types: TelegramChoosePeerType[]) {\n const isPeerTypeMap: {\n [type in typeof types[0]]: IsPeerType\n } = {\n bots: 'isBot',\n users: 'isRegularUser',\n groups: 'isAnyGroup',\n channels: 'isBroadcast'\n };\n\n const filterPeerTypeBy: IsPeerType[] = types.map((type) => isPeerTypeMap[type]);\n return filterPeerTypeBy;\n }\n\n public setLimit(limit: number, callback: AppSelectPeers['limitCallback']) {\n this.limit = limit;\n this.limitCallback = callback;\n }\n\n public destroy() {\n this.middlewareHelper.destroy();\n this.emptySearchPlaceholderMiddlewareHelper?.destroy();\n this.listenerSetter.removeAll();\n this.dialogsPlaceholder?.removeWithoutUnmounting();\n }\n\n public deletePeerId(peerId: PeerId) {\n const el = this.list.querySelector(`[data-peer-id=\"${peerId}\"]`);\n const dialogElement = (el as any)?.dialogElement;\n if(dialogElement) {\n dialogElement.remove();\n } else {\n el?.remove();\n }\n\n this.renderedPeerIds.delete(peerId);\n\n if(!this.promise) {\n this.processPlaceholderOnResults();\n }\n }\n\n private onInput = () => {\n const value = this.input.value;\n if(this.query === value) {\n return;\n }\n\n if(this.peerType.includes('contacts') || this.peerType.includes('dialogs')) {\n this.cachedContacts = undefined;\n }\n\n if(this.peerType.includes('dialogs')) {\n this.folderId = 0;\n this.offsetIndex = 0;\n }\n\n for(const i in this.tempIds) {\n // @ts-ignore\n ++this.tempIds[i];\n }\n\n const oldList = this.list;\n this.oldList = oldList;\n this.list = appDialogsManager.createChatList();\n\n this.promise = undefined;\n this.query = value;\n this.renderedPeerIds.clear();\n this.needSwitchList = true;\n this.middlewareHelperLoader.clean();\n\n this.loadedWhat = {};\n if(this.peerType.includes('dialogs')) {\n this.loadedWhat.dialogs = false;\n this.loadedWhat.archived = false;\n this.loadedWhat.contacts = false;\n }\n\n if(this.peerType.includes('contacts')) {\n this.loadedWhat.contacts = false;\n }\n\n if(this.peerType.includes('channelParticipants')) {\n this.loadedWhat.channelParticipants = false;\n }\n\n if(this.peerType.includes('custom')) {\n this.loadedWhat.custom = false;\n }\n\n oldList.style.position = 'absolute';\n const height = oldList.parentElement?.clientHeight ?? 0;\n // const elementHeight = oldList.lastElementChild?.scrollHeight;\n // let oldListHeight = oldList.scrollHeight;\n // while(elementHeight && oldListHeight > height) {\n // oldList.lastElementChild.remove();\n // oldListHeight -= elementHeight;\n // }\n if(height) {\n oldList.style.overflow = 'hidden';\n oldList.style.height = `${height}px`;\n }\n\n height && this.dialogsPlaceholder?.attach({\n container: this.section.content,\n blockScrollable: this.scrollable,\n // getRectFrom: () => this.section.content.getBoundingClientRect()\n getRectFrom: () => {\n const scrollableRect = this.scrollable.container.getBoundingClientRect()\n const rect = this.section.content.getBoundingClientRect();\n return {\n width: rect.width,\n height: scrollableRect.height\n };\n }\n // getRectFrom: () => {\n // const rect = this.section.content.getBoundingClientRect();\n // const nameRect = this.section.title.getBoundingClientRect();\n // return {\n // top: rect.top + (nameRect ? nameRect.height : 0),\n // right: rect.right,\n // bottom: rect.bottom,\n // left: rect.left,\n // height: rect.height - (nameRect ? nameRect.height : 0),\n // width: rect.width\n // };\n // }\n // onRemove: () => {\n // if(!this.list.childElementCount) {\n // this.emptySearchPlaceholderHideSetter?.(false);\n // }\n // }\n });\n this.emptySearchPlaceholderHideSetter?.(true);\n\n this.getMoreResults();\n };\n\n public clearInput() {\n this.input.value = '';\n this.onInput();\n }\n\n private async renderSaved() {\n if(\n !this.exceptSelf &&\n !this.offsetIndex &&\n this.folderId === 0 &&\n this.peerType.includes('dialogs') &&\n (!this.query || await this.managers.appUsersManager.testSelfSearch(this.query))\n ) {\n await this.renderResultsFunc([rootScope.myId]);\n }\n }\n\n private getTempId(type: keyof AppSelectPeers['tempIds']) {\n this.tempIds[type] ??= 0;\n const tempId = ++this.tempIds[type];\n return {\n tempId,\n middleware: () => this.tempIds[type] === tempId\n };\n }\n\n private async getMoreDialogs(): Promise {\n if(this.loadedWhat.dialogs && this.loadedWhat.archived) {\n return;\n }\n\n // в десктопе - сначала без группы, потом архивные, потом контакты без сообщений\n const pageCount = windowSize.height / 56 * 1.25 | 0;\n\n const {middleware} = this.getTempId('dialogs');\n const promise = this.managers.dialogsStorage.getDialogs({\n query: this.query,\n offsetIndex: this.offsetIndex,\n limit: pageCount,\n filterId: this.folderId,\n skipMigrated: true\n });\n\n promise.catch(() => {\n if(!middleware()) {\n return;\n }\n\n this.loadedWhat[this.loadedWhat.dialogs ? 'archived' : 'dialogs'] = true;\n });\n\n const value = await promise;\n if(!middleware()) {\n return;\n }\n\n let dialogs = value.dialogs as Dialog[];\n if(dialogs.length) {\n const newOffsetIndex = getDialogIndex(dialogs[dialogs.length - 1]) || 0;\n\n dialogs = dialogs.slice();\n findAndSplice(dialogs, (d) => d.peerId === rootScope.myId); // no my account\n\n if(this.chatRightsActions) {\n dialogs = await filterAsync(dialogs, (d) => this.filterByRights(d.peerId));\n if(!middleware()) {\n return;\n }\n }\n\n await this.renderSaved();\n if(!middleware()) {\n return;\n }\n\n this.offsetIndex = newOffsetIndex;\n }\n\n await this.renderResultsFunc(dialogs.map((dialog) => dialog.peerId));\n\n if(value.isEnd) {\n if(!this.loadedWhat.dialogs) {\n await this.renderSaved();\n if(!middleware()) {\n return;\n }\n\n this.loadedWhat.dialogs = true;\n this.offsetIndex = 0;\n this.folderId = 1;\n\n return this.getMoreDialogs();\n } else {\n this.loadedWhat.archived = true;\n\n if(!this.loadedWhat.contacts/* && this.peerType.includes('contacts') */) {\n return this.getMoreContacts();\n }\n }\n } else if(this.renderedPeerIds.size < pageCount) {\n return this.getMoreDialogs();\n }\n }\n\n private async filterByRights(peerId: PeerId) {\n const peer = apiManagerProxy.getPeer(peerId);\n if(peerId.isUser()) {\n return this.chatRightsActions[0] !== 'send_plain' || canSendToUser(peer as User.user);\n } else if(this.chatRightsActions.every((action) => hasRights(peer as Chat.chat, action))) {\n return true;\n }\n }\n\n private async getMoreContacts() {\n if(this.loadedWhat.contacts) {\n return;\n }\n\n const isGlobalSearch = this.peerType.includes('contacts');\n\n if(!this.cachedContacts) {\n /* const promises: Promise[] = [appUsersManager.getContacts(this.query)];\n if(!this.peerType.includes('dialogs')) {\n promises.push(appMessagesManager.getConversationsAll());\n }\n\n this.promise = Promise.all(promises);\n this.cachedContacts = (await this.promise)[0].slice(); */\n const {middleware} = this.getTempId('contacts');\n const promise = Promise.all([\n isGlobalSearch ? this.managers.appUsersManager.getContactsPeerIds(this.query) : [],\n this.query ? this.managers.appUsersManager.searchContacts(this.query) : undefined\n ]);\n\n promise.catch(() => {\n if(!middleware()) {\n return;\n }\n\n this.loadedWhat.contacts = true;\n });\n\n const [cachedContacts, searchResult] = await promise;\n if(!middleware()) {\n return;\n }\n\n if(searchResult) {\n // do not add global result if only dialogs needed\n let resultPeerIds = isGlobalSearch ? searchResult.my_results.concat(searchResult.results) : searchResult.my_results;\n\n if(this.chatRightsActions) {\n resultPeerIds = await filterAsync(resultPeerIds, (peerId) => this.filterByRights(peerId));\n if(!middleware()) {\n return;\n }\n }\n\n if(!this.peerType.includes('dialogs')) {\n resultPeerIds = resultPeerIds.filter((peerId) => peerId.isUser());\n }\n\n this.cachedContacts = filterUnique(cachedContacts.concat(resultPeerIds));\n } else this.cachedContacts = cachedContacts.slice();\n\n indexOfAndSplice(this.cachedContacts, rootScope.myId); // no my account\n }\n\n // if(this.cachedContacts.length) {\n const pageCount = windowSize.height / 56 * 1.25 | 0;\n const arr = this.cachedContacts.splice(0, pageCount);\n await this.renderResultsFunc(arr);\n // }\n\n if(!this.cachedContacts.length) {\n this.loadedWhat.contacts = true;\n\n // need to load non-contacts\n /* if(!this.peerType.includes('dialogs')) {\n return this.getMoreDialogs();\n } */\n }\n }\n\n private async getMoreChannelParticipants() {\n if(this.loadedWhat.channelParticipants) {\n return;\n }\n\n const pageCount = 50; // same as in group permissions to use cache\n\n let filter: ChannelParticipantsFilter;\n if(this.channelParticipantsFilter) {\n filter = typeof(this.channelParticipantsFilter) === 'function' ?\n this.channelParticipantsFilter(this.query) :\n this.channelParticipantsFilter;\n } else {\n filter = {\n _: 'channelParticipantsSearch',\n q: this.query\n };\n }\n\n const {middleware} = this.getTempId('channelParticipants');\n const promise = this.managers.appProfileManager.getParticipants({\n id: this.peerId.toChatId(),\n filter,\n limit: pageCount,\n offset: this.list.childElementCount\n });\n\n promise.catch(() => {\n if(!middleware()) {\n return;\n }\n\n this.loadedWhat.channelParticipants = true;\n });\n\n const chatParticipants = await promise;\n if(!middleware()) {\n return;\n }\n\n const {participants} = chatParticipants;\n\n const peerIds = participants.map((participant) => {\n const peerId = getParticipantPeerId(participant);\n this.participants.set(peerId, participant);\n return peerId;\n });\n if(this.exceptSelf) indexOfAndSplice(peerIds, rootScope.myId);\n await this.renderResultsFunc(peerIds);\n\n const count = (chatParticipants as ChannelsChannelParticipants.channelsChannelParticipants).count ?? participants.length;\n\n if(this.list.childElementCount >= count || participants.length < pageCount) {\n this.loadedWhat.channelParticipants = true;\n }\n }\n\n private async _getMoreCustom() {\n if(this.loadedWhat.custom) {\n return;\n }\n\n const {middleware} = this.getTempId('custom');\n const promise = this.getMoreCustom(this.query, middleware);\n\n promise.catch(() => {\n if(!middleware()) {\n return;\n }\n\n this.loadedWhat.custom = true;\n });\n\n const res = await promise;\n if(!middleware()) {\n return;\n }\n\n const {result, isEnd} = res;\n\n if(this.exceptSelf) indexOfAndSplice(result, rootScope.myId);\n await this.renderResultsFunc(result);\n\n if(isEnd) {\n this.loadedWhat.custom = true;\n }\n }\n\n checkForTriggers = () => {\n this.scrollable.checkForTriggers();\n };\n\n private _getMoreResults() {\n if((this.peerType.includes('dialogs')/* || this.loadedWhat.contacts */) && !this.loadedWhat.archived) { // to load non-contacts\n return this.getMoreSomething('dialogs');\n }\n\n if((this.peerType.includes('contacts') || this.peerType.includes('dialogs')) && !this.loadedWhat.contacts) {\n return this.getMoreSomething('contacts');\n }\n\n if(this.peerType.includes('channelParticipants') && !this.loadedWhat.channelParticipants) {\n return this.getMoreSomething('channelParticipants');\n }\n\n if(this.peerType.includes('custom') && !this.loadedWhat.custom) {\n return this.getMoreSomething('custom');\n }\n }\n\n private processPlaceholderOnResults = () => {\n const length = this.list.childElementCount;\n if(!length) {\n if(!this.emptySearchPlaceholderMiddlewareHelper) {\n this.emptySearchPlaceholderMiddlewareHelper = getMiddleware();\n const middleware = this.emptySearchPlaceholderMiddlewareHelper.get();\n const [query, setQuery] = createSignal(this.query);\n const [description, setDescription] = createSignal();\n const [hide, setHide] = createSignal(false);\n this.emptySearchPlaceholderQuerySetter = setQuery;\n this.emptySearchPlaceholderHideSetter = setHide;\n\n createRoot((dispose) => {\n middleware.onClean(dispose);\n createEffect(() => {\n setDescription(i18n('RequestJoin.List.SearchEmpty', [wrapEmojiText(query())]));\n });\n });\n return emptyPlaceholder({\n middleware,\n title: () => i18n('SearchEmptyViewTitle'),\n description,\n hide\n }).then((container) => {\n if(!middleware()) {\n return;\n }\n\n this.section.content.prepend(container);\n });\n } else {\n this.dialogsPlaceholder?.detach(length);\n this.emptySearchPlaceholderHideSetter(false);\n this.emptySearchPlaceholderQuerySetter(this.query);\n }\n } else {\n this.dialogsPlaceholder?.detach(length);\n this.emptySearchPlaceholderHideSetter?.(true);\n this.emptySearchPlaceholderQuerySetter?.(this.query);\n }\n };\n\n private getMoreResults() {\n if(this.promise) {\n return this.promise;\n }\n\n const loadPromise = this._getMoreResults();\n if(!loadPromise) {\n this.processPlaceholderOnResults();\n return Promise.resolve();\n }\n\n const middleware = this.middlewareHelperLoader.get();\n const promise = this.promise = loadPromise.catch((err) => {\n console.error('get more result error', err);\n }).then(() => {\n if(this.promise === promise) {\n this.promise = undefined;\n }\n\n if(middleware()) {\n const loadedWhatValues = Object.values(this.loadedWhat);\n const loadedAll = loadedWhatValues.every((v) => v);\n\n const length = this.list.childElementCount;\n if(loadedAll && !length) {\n this.dialogsPlaceholder?.detach(length);\n return this.processPlaceholderOnResults();\n } else if(length || loadedAll) {\n this.dialogsPlaceholder?.detach(length);\n this.emptySearchPlaceholderHideSetter?.(true);\n }\n }\n\n this.checkForTriggers(); // set new promise\n return this.promise;\n });\n\n return promise;\n }\n\n private getMoreSomething(peerType: SelectSearchPeerType) {\n const map: {[type in SelectSearchPeerType]: () => Promise} = {\n dialogs: this.getMoreDialogs,\n contacts: this.getMoreContacts,\n channelParticipants: this.getMoreChannelParticipants,\n custom: this._getMoreCustom\n };\n\n const promise = map[peerType].call(this);\n return promise;\n }\n\n private async renderResults(peerIds: PeerId[], append?: boolean) {\n // console.log('will renderResults:', peerIds);\n\n // оставим только неконтакты с диалогов\n if(!this.peerType.includes('dialogs') && this.loadedWhat.contacts) {\n peerIds = await filterAsync(peerIds, (peerId) => {\n return this.managers.appUsersManager.isNonContactUser(peerId);\n });\n }\n\n const promises = peerIds.map(async(key) => {\n const dialogElement = appDialogsManager.addDialogNew({\n peerId: this.getPeerIdFromKey?.(key) ?? key,\n container: this.list,\n rippleEnabled: this.rippleEnabled,\n avatarSize: this.avatarSize,\n meAsSaved: this.meAsSaved,\n append,\n wrapOptions: {\n middleware: this.middlewareHelperLoader.get()\n },\n withStories: this.withStories\n });\n\n if(this.getPeerIdFromKey) {\n dialogElement.container.dataset.peerId = key as any as string;\n }\n\n (dialogElement.container as any).dialogElement = dialogElement;\n\n const {dom} = dialogElement;\n\n if(this.multiSelect) {\n const selected = this.selected.has(key);\n dom.containerEl.prepend(this.checkbox(selected));\n }\n\n let subtitleEl: HTMLElement | DocumentFragment;\n if(this.getSubtitleForElement) {\n subtitleEl = await this.getSubtitleForElement(key);\n }\n\n if(!subtitleEl) {\n subtitleEl = await this.wrapSubtitle(key);\n }\n\n dom.lastMessageSpan.append(subtitleEl);\n\n if(this.processElementAfter) {\n await this.processElementAfter(key, dialogElement);\n }\n });\n\n return Promise.all(promises);\n }\n\n public async wrapSubtitle(peerId: PeerId) {\n let subtitleEl: HTMLElement;\n if(peerId.isAnyChat()) {\n subtitleEl = await getChatMembersString(peerId.toChatId());\n } else if(peerId === rootScope.myId && this.meAsSaved) {\n subtitleEl = i18n(this.selfPresence);\n } else {\n subtitleEl = getUserStatusString(await this.managers.appUsersManager.getUser(peerId.toUserId()));\n }\n\n return subtitleEl;\n }\n\n public checkbox(selected?: boolean) {\n const checkboxField = new CheckboxField({\n round: this.design === 'round'\n });\n if(selected) {\n checkboxField.input.checked = selected;\n }\n\n return checkboxField.label;\n }\n\n public static renderEntity({key, middleware, title, avatarSize, fallbackIcon, meAsSaved = true}: {\n key: PeerId | string,\n middleware: Middleware,\n title?: string | HTMLElement,\n avatarSize: number,\n fallbackIcon?: Icon,\n meAsSaved?: boolean\n }) {\n const div = document.createElement('div');\n div.classList.add('selector-user');\n div.middlewareHelper = middleware.create();\n\n const avatarContainer = document.createElement('div');\n avatarContainer.classList.add('selector-user-avatar-container');\n const avatarClose = document.createElement('div');\n avatarClose.classList.add('selector-user-avatar-close');\n avatarClose.append(Icon('close'));\n const avatarEl = avatarNew({\n middleware: div.middlewareHelper.get(),\n size: avatarSize,\n isDialog: meAsSaved\n });\n avatarEl.node.classList.add('selector-user-avatar');\n avatarContainer.append(avatarEl.node, avatarClose);\n\n div.dataset.key = '' + key;\n const promises: Promise[] = [];\n if(key.isPeerId()) {\n if(title === undefined) {\n const peerTitle = new PeerTitle();\n promises.push(peerTitle.update({peerId: key.toPeerId(), dialog: meAsSaved}));\n title = peerTitle.element;\n }\n\n avatarEl.render({\n peerId: key as PeerId\n });\n\n promises.push(avatarEl.readyThumbPromise);\n } else if(fallbackIcon) {\n avatarEl.setIcon(fallbackIcon);\n }\n\n if(title) {\n const t = document.createElement('div');\n t.classList.add('selector-user-title');\n if(typeof(title) === 'string') {\n t.innerHTML = title;\n } else {\n replaceContent(t, title);\n t.append(title);\n }\n div.append(t);\n }\n\n div.insertAdjacentElement('afterbegin', avatarContainer);\n\n return {element: div, avatar: avatarEl, promises};\n }\n\n public add({\n key,\n title,\n scroll = true,\n fireOnChange = true,\n fallbackIcon\n }: {\n key: PeerId | string,\n title?: string | HTMLElement,\n scroll?: boolean,\n fireOnChange?: boolean,\n fallbackIcon?: Icon\n }): boolean | ReturnType {\n if(this.limit && this.selected.size >= this.limit) {\n this.limitCallback?.();\n return false;\n }\n\n // console.trace('add');\n this.selected.add(key);\n\n if(!this.multiSelect || !this.input) {\n fireOnChange && this.onChange?.(this.selected.size);\n return !!this.multiSelect;\n }\n\n if(this.query.trim()) {\n this.clearInput();\n }\n\n const rendered = AppSelectPeers.renderEntity({\n key,\n middleware: this.middlewareHelper.get(),\n title,\n avatarSize: 32,\n fallbackIcon\n });\n const {element} = rendered;\n\n if(scroll) {\n element.classList.add('scale-in');\n }\n\n this.selectedContainer.insertBefore(element, this.input);\n // this.selectedScrollable.scrollTop = this.selectedScrollable.scrollHeight;\n fireOnChange && this.onChange?.(this.selected.size);\n\n if(scroll) {\n this.selectedScrollable.scrollIntoViewNew({\n element: this.input,\n position: 'center'\n });\n }\n\n return rendered;\n }\n\n public remove(key: PeerId | string, fireOnChange = true): boolean {\n if(!this.multiSelect) {\n return false;\n }\n\n if(!this.input) {\n this.selected.delete(key);\n fireOnChange && this.onChange?.(this.selected.size);\n return true;\n }\n\n // const div = this.selected[peerId];\n const div = this.selectedContainer.querySelector(`[data-key=\"${key}\"]`) as HTMLElement;\n div.classList.remove('scale-in');\n void div.offsetWidth;\n div.classList.add('scale-out');\n\n const onAnimationEnd = () => {\n this.selected.delete(key);\n div.remove();\n div.middlewareHelper.destroy();\n fireOnChange && this.onChange?.(this.selected.size);\n };\n\n if(liteMode.isAvailable('animations')) {\n div.addEventListener('animationend', onAnimationEnd, {once: true});\n } else {\n onAnimationEnd();\n }\n\n return true;\n }\n\n public getSelected() {\n return [...this.selected];\n }\n\n public getElementByPeerId(peerId: PeerId) {\n return this.chatsContainer.querySelector(`[data-peer-id=\"${peerId}\"]`);\n }\n\n public toggleElementCheckboxByPeerId(peerId: PeerId, checked?: boolean) {\n const element = this.getElementByPeerId(peerId);\n if(!element) {\n return;\n }\n\n const checkbox = element.querySelector('input') as HTMLInputElement;\n checkbox.checked = checked === undefined ? !checkbox.checked : checked;\n }\n\n public addBatch(values: any[]) {\n if(!values.length) {\n return;\n }\n\n values.forEach((value) => {\n this.add({\n key: value,\n scroll: false,\n fireOnChange: false\n });\n this.toggleElementCheckboxByPeerId(value, true);\n });\n\n this.onChange?.(this.selected.size);\n }\n\n public removeBatch(values: any[]) {\n if(!values.length) {\n return;\n }\n\n values.forEach((value) => {\n this.remove(value, false);\n this.toggleElementCheckboxByPeerId(value, false);\n });\n\n this.onChange?.(this.selected.size);\n }\n\n public addInitial(values: any[]) {\n if(!values?.length) {\n return;\n }\n\n this.addBatch(values);\n\n this.input && window.requestAnimationFrame(() => { // ! not the best place for this raf though it works\n this.selectedScrollable.scrollIntoViewNew({\n element: this.input,\n position: 'center',\n forceDirection: FocusDirection.Static\n });\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport AppSelectPeers, {SelectSearchPeerType} from '../appSelectPeers';\nimport PopupElement from '.';\nimport {LangPackKey, _i18n, i18n} from '../../lib/langPack';\nimport {Modify} from '../../types';\nimport {IsPeerType} from '../../lib/appManagers/appPeersManager';\nimport ButtonCorner from '../buttonCorner';\nimport {attachClickEvent, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport TransitionSlider from '../transition';\nimport appNavigationController, {NavigationItem} from '../appNavigationController';\nimport {ForumTopic} from '../../layer';\nimport Row from '../row';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport {avatarNew} from '../avatarNew';\nimport {makeMediaSize} from '../../helpers/mediaSize';\nimport getDialogIndex from '../../lib/appManagers/utils/dialogs/getDialogIndex';\nimport {Middleware} from '../../helpers/middleware';\nimport deferredPromise from '../../helpers/cancellablePromise';\n\ntype PopupPickUserOptions = Modify[0], {\n multiSelect?: never,\n appendTo?: never,\n managers?: never,\n onSelect?: (peerId: PeerId, threadId?: number) => Promise | void,\n onMultiSelect?: (peerIds: PeerId[]) => Promise | void,\n middleware?: never,\n titleLangKey?: LangPackKey,\n initial?: PeerId[],\n useTopics?: boolean,\n headerLangPackKey?: LangPackKey\n}>;\n\nasync function wrapTopicRow({\n topic,\n middleware\n}: {\n topic: ForumTopic.forumTopic,\n middleware: Middleware\n}) {\n const size = makeMediaSize(32, 32);\n const row = new Row({\n title: wrapEmojiText(topic.title),\n clickable: true\n });\n row.container.dataset.peerId = '' + topic.id;\n row.container.classList.add('selector-forum-topic');\n const media = row.createMedia('abitbigger');\n const avatar = avatarNew({\n peerId: topic.peerId,\n threadId: topic.id,\n middleware,\n size: size.width,\n wrapOptions: {\n middleware,\n textColor: 'primary-text-color',\n customEmojiSize: size\n }\n });\n await avatar.readyThumbPromise;\n media.append(avatar.node);\n return row.container;\n}\n\nexport default class PopupPickUser extends PopupElement {\n public selector: AppSelectPeers;\n public forumSelector: AppSelectPeers;\n public transition: ReturnType;\n public forumNavigationItem: NavigationItem;\n\n constructor(options: PopupPickUserOptions) {\n super(\n 'popup-forward',\n {\n closable: true,\n overlayClosable: true,\n onBackClick: () => {\n this.forumSelector.input.replaceWith(this.selector.input);\n this.transition(this.selector.container);\n if(this.forumNavigationItem) {\n appNavigationController.removeItem(this.forumNavigationItem);\n this.forumNavigationItem = undefined;\n }\n },\n body: true,\n title: options.titleLangKey ?? true\n // withConfirm: options.onMultiSelect ? 'OK' : undefined\n // footer: !!options.onMultiSelect,\n // withConfirm: !!options.onMultiSelect\n }\n );\n\n const isMultiSelect = !!options.onMultiSelect;\n\n let ignoreOnSelect: boolean;\n const onSelect = async(peerId: PeerId | PeerId[], threadId?: number) => {\n if(ignoreOnSelect) {\n return;\n }\n\n if(\n options.useTopics &&\n !Array.isArray(peerId) &&\n !threadId &&\n await this.managers.appPeersManager.isForum(peerId)\n ) {\n ignoreOnSelect = true;\n await this.createForumSelector({\n tabsContainer,\n peerId,\n placeholder: options.placeholder,\n onSelect\n });\n ignoreOnSelect = undefined;\n return;\n }\n\n const callback = options.onSelect || options.onMultiSelect;\n if(callback) {\n const res = callback(peerId as any, threadId);\n if(res instanceof Promise) {\n try {\n await res;\n } catch(err) {\n return;\n }\n }\n }\n\n this.selector = null;\n this.hide();\n };\n\n const tabsContainer = document.createElement('div');\n tabsContainer.classList.add('tabs-container');\n this.body.append(tabsContainer);\n\n this.selector = new AppSelectPeers({\n ...options,\n middleware: this.middlewareHelper.get(),\n appendTo: tabsContainer,\n onChange: isMultiSelect ? (length) => {\n this.btnConfirm.classList.toggle('is-visible', !!length);\n } : undefined,\n onSelect: isMultiSelect ? undefined : onSelect,\n onFirstRender: () => {\n this.show();\n this.selector.checkForTriggers(); // ! due to zero height before mounting\n\n if(!IS_TOUCH_SUPPORTED) {\n this.selector.input.focus();\n }\n },\n multiSelect: isMultiSelect,\n rippleEnabled: false,\n avatarSize: 'abitbigger',\n managers: this.managers,\n night: this.night,\n headerSearch: isMultiSelect\n });\n this.selector.container.classList.add('tabs-tab');\n\n this.scrollable = this.selector.scrollable;\n\n if(isMultiSelect) {\n this.header.after(this.selector.searchSection.container);\n // this.btnConfirm.append(i18n('OK'));\n // this.footer.append(this.btnConfirm);\n // this.body.after(this.footer);\n // this.footer.classList.add('abitlarger');\n\n this.btnConfirm = this.btnConfirmOnEnter = ButtonCorner({icon: 'check'});\n this.body.append(this.btnConfirm);\n\n attachClickEvent(this.btnConfirm, () => {\n onSelect(this.selector.getSelected() as PeerId[]);\n }, {listenerSetter: this.listenerSetter});\n\n if(options.initial) {\n this.selector.addInitial(options.initial);\n }\n this.selector.container.classList.add('active');\n } else {\n if(options.headerLangPackKey) {\n this.title.append(i18n(options.headerLangPackKey));\n } else {\n this.title.append(this.selector.input);\n }\n\n this.attachScrollableListeners();\n this.transition = TransitionSlider({\n content: tabsContainer,\n type: 'navigation',\n transitionTime: 150,\n animateFirst: false,\n onTransitionEnd: (id) => {\n if(!id) {\n (Array.from(tabsContainer.children) as HTMLElement[]).forEach((el) => {\n if(el !== this.selector.container) {\n el.middlewareHelper.destroy();\n el.remove();\n }\n });\n } else {\n this.selector.clearInput();\n }\n }\n });\n this.transition(this.selector.container);\n }\n }\n\n private async createForumSelector({\n tabsContainer,\n peerId,\n placeholder,\n onSelect\n }: {\n tabsContainer: HTMLElement,\n peerId: PeerId,\n placeholder: LangPackKey,\n onSelect: (peerId: PeerId, threadId: number) => any\n }) {\n const middlewareHelper = this.middlewareHelper.get().create();\n const middleware = middlewareHelper.get();\n const deferred = deferredPromise();\n let offsetIndex: number, lastQuery: string;\n const forumSelector = this.forumSelector = new AppSelectPeers({\n middleware,\n appendTo: tabsContainer,\n managers: this.managers,\n rippleEnabled: false,\n night: this.night,\n multiSelect: false,\n headerSearch: false,\n placeholder,\n peerType: ['custom'],\n getMoreCustom: async(q, middleware) => {\n if(lastQuery !== q) {\n offsetIndex = undefined;\n lastQuery = q;\n }\n\n const result = await this.managers.dialogsStorage.getDialogs({\n query: q,\n filterId: peerId,\n limit: 20,\n skipMigrated: true,\n offsetIndex\n });\n\n if(!middleware()) {\n return;\n }\n\n offsetIndex = getDialogIndex(result.dialogs[result.dialogs.length - 1]);\n\n return {\n result: result.dialogs.map((forumTopic) => (forumTopic as ForumTopic.forumTopic).id),\n isEnd: result.isEnd\n };\n },\n renderResultsFunc: async(topicIds, append) => {\n const promises = topicIds.map(async(topicId) => {\n const topic = await this.managers.dialogsStorage.getForumTopic(peerId, topicId);\n return wrapTopicRow({topic, middleware});\n });\n const elements = await Promise.all(promises);\n forumSelector.list[!append ? 'append' : 'prepend'](...elements);\n },\n onSelect: (topicId) => {\n onSelect(peerId, topicId);\n },\n placeholderSizes: {\n avatarSize: 32,\n avatarMarginRight: 72 - 32 - 17,\n marginVertical: 8,\n marginLeft: 17,\n lineMarginVertical: 11,\n gapVertical: 0,\n totalHeight: 48,\n statusWidth: 0,\n noSecondLine: true,\n night: this.night\n },\n onFirstRender: () => {\n deferred.resolve();\n }\n });\n\n forumSelector.container.classList.add('tabs-tab');\n forumSelector.scrollable.attachBorderListeners();\n forumSelector.container.middlewareHelper = middlewareHelper;\n\n await deferred;\n\n this.btnCloseAnimatedIcon.classList.add('state-back');\n // this.selector.clearInput();\n this.selector.input.replaceWith(forumSelector.input);\n this.transition(forumSelector.container);\n const navigationItem = this.forumNavigationItem = {\n type: 'popup',\n onPop: () => {\n simulateClickEvent(this.btnClose);\n }\n };\n appNavigationController.pushItem(this.forumNavigationItem);\n this.addEventListener('close', () => {\n appNavigationController.removeItem(navigationItem);\n });\n }\n\n protected destroy() {\n super.destroy();\n this.selector?.destroy();\n this.selector = undefined;\n }\n\n public static async createPicker2({\n peerType,\n filterPeerTypeBy,\n chatRightsActions,\n multiSelect,\n limit,\n limitCallback,\n titleLangKey\n }: {\n peerType?: SelectSearchPeerType[],\n filterPeerTypeBy: AppSelectPeers['filterPeerTypeBy'],\n chatRightsActions?: PopupPickUserOptions['chatRightsActions'],\n multiSelect?: T,\n limit?: number,\n limitCallback?: () => void,\n titleLangKey?: LangPackKey\n }) {\n return new Promise((resolve, reject) => {\n let resolved = false;\n const popup = PopupElement.createPopup(PopupPickUser, {\n peerType,\n placeholder: 'SelectChat',\n onSelect: multiSelect ? undefined : (peerId) => {\n resolve(peerId as any);\n resolved = true;\n },\n onMultiSelect: multiSelect ? (peerIds) => {\n resolve(peerIds as any);\n resolved = true;\n } : undefined,\n filterPeerTypeBy,\n chatRightsActions,\n titleLangKey\n });\n\n if(limit) {\n popup.selector.setLimit(limit, limitCallback);\n }\n\n popup.addEventListener('close', () => {\n if(!resolved) {\n reject();\n }\n }, {once: true});\n });\n }\n\n public static async createPicker(\n types: Parameters[0] = ['users', 'bots', 'groups', 'channels'],\n chatRightsActions?: PopupPickUserOptions['chatRightsActions']\n ) {\n if(!Array.isArray(types)) {\n types = [];\n }\n\n const filterPeerTypeBy: IsPeerType[] = AppSelectPeers.convertPeerTypes(types);\n const peerType: SelectSearchPeerType[] = ['dialogs'];\n if(types.includes('users')) peerType.push('contacts');\n\n if(!filterPeerTypeBy.length) {\n throw undefined;\n }\n\n return this.createPicker2({peerType, filterPeerTypeBy, chatRightsActions});\n }\n\n public static createSharingPicker(options: {\n onSelect: ConstructorParameters[0]['onSelect'],\n chatRightsActions?: PopupPickUserOptions['chatRightsActions'],\n placeholder?: LangPackKey,\n selfPresence?: LangPackKey\n }) {\n options.chatRightsActions ??= ['send_plain'];\n options.placeholder ??= 'ShareModal.Search.Placeholder';\n options.selfPresence ??= 'ChatYourSelf';\n return PopupElement.createPopup(PopupPickUser, {\n ...options,\n peerType: ['dialogs', 'contacts']\n });\n }\n\n public static createSharingPicker2(options?: Modify[0], {onSelect?: never}>) {\n return new Promise((resolve, reject) => {\n let resolved = false;\n const popup = PopupPickUser.createSharingPicker({\n ...(options || {}),\n onSelect: (peerId) => {\n resolved = true;\n resolve(peerId);\n }\n });\n popup.addEventListener('close', () => {\n if(!resolved) {\n reject();\n }\n });\n });\n }\n\n public static createReplyPicker() {\n return this.createSharingPicker2({\n placeholder: 'ReplyToDialog',\n selfPresence: 'SavedMessagesInfoQuote'\n });\n }\n\n public static createContactPicker() {\n return new Promise((resolve, reject) => {\n let resolved = false;\n const popup = PopupElement.createPopup(PopupPickUser, {\n peerType: ['contacts'],\n placeholder: 'Search',\n onSelect: (peerId) => {\n resolved = true;\n resolve(peerId);\n }\n });\n popup.addEventListener('close', () => {\n if(!resolved) {\n reject();\n }\n });\n });\n }\n}\n","import {ChannelParticipant, Chat} from '../../../../layer';\n\nexport default function canEditAdmin(chat: Chat, participant: ChannelParticipant, myId: PeerId) {\n const isCreator = participant?._ === 'channelParticipantCreator';\n const promotedBy = (participant as ChannelParticipant.channelParticipantAdmin)?.promoted_by;\n return !!(chat as Chat.channel).pFlags.creator ||\n (!isCreator && (!promotedBy || promotedBy === myId));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport deepEqual from '../../../helpers/object/deepEqual';\nimport {ChannelParticipant, Chat, ChatParticipant} from '../../../layer';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport canEditAdmin from '../../../lib/appManagers/utils/chats/canEditAdmin';\nimport getParticipantPeerId from '../../../lib/appManagers/utils/chats/getParticipantPeerId';\nimport {LangPackKey, i18n} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport Button from '../../button';\nimport confirmationPopup from '../../confirmationPopup';\nimport InputField from '../../inputField';\nimport SettingSection from '../../settingSection';\nimport SidebarSlider from '../../slider';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport getUserStatusString from '../../wrappers/getUserStatusString';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport {ChatAdministratorRights, ChatPermissions} from './groupPermissions';\n\nexport default class AppUserPermissionsTab extends SliderSuperTabEventable {\n public participant: ChannelParticipant | ChatParticipant;\n public chatId: ChatId;\n public userId: UserId;\n public isAdmin: boolean;\n\n public static openTab = (\n slider: SidebarSlider,\n chatId: ChatId,\n participant: ChatParticipant | ChannelParticipant,\n isAdmin?: boolean\n ) => {\n const tab = slider.createTab(AppUserPermissionsTab);\n tab.participant = participant;\n tab.chatId = chatId;\n tab.userId = getParticipantPeerId(participant).toUserId();\n tab.isAdmin = isAdmin;\n tab.open();\n };\n\n public async init() {\n this.container.classList.add('edit-peer-container', 'user-permissions-container');\n this.setTitle(this.isAdmin ? 'EditAdmin' : 'UserRestrictions');\n\n let destroyListener: () => void;\n\n const chat = await this.managers.appChatsManager.getChat(this.chatId) as Chat.chat | Chat.channel;\n const isChannel = await this.managers.appChatsManager.isChannel(this.chatId);\n const isGroup = await this.managers.appPeersManager.isAnyGroup(this.chatId.toPeerId(true));\n const isCreator = this.participant?._ === 'channelParticipantCreator';\n const _canEditAdmin = canEditAdmin(chat, this.participant as ChannelParticipant, rootScope.myId);;\n\n let goodTypes: (ChannelParticipant | ChatParticipant)['_'][];\n if(this.isAdmin) {\n goodTypes = [\n 'channelParticipantAdmin',\n 'channelParticipantCreator'\n ];\n } else {\n goodTypes = [\n 'channelParticipantBanned'\n ];\n }\n\n {\n const section = new SettingSection({\n name: this.isAdmin ? 'EditAdminWhatCanDo' : 'UserRestrictionsCanDo',\n caption: this.isAdmin ? true : undefined\n });\n\n const div = document.createElement('div');\n div.classList.add('chatlist-container');\n section.content.insertBefore(div, section.title);\n\n const list = appDialogsManager.createChatList({new: true});\n div.append(list);\n\n const {dom} = appDialogsManager.addDialogNew({\n peerId: this.userId.toPeerId(false),\n container: list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n meAsSaved: false,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n dom.lastMessageSpan.append(getUserStatusString(await this.managers.appUsersManager.getUser(this.userId)));\n\n const options: ConstructorParameters[0] = {\n chatId: this.chatId,\n listenerSetter: this.listenerSetter,\n appendTo: section.content,\n participant: goodTypes.includes(this.participant._) ? this.participant as any : undefined,\n chat,\n canEdit: _canEditAdmin\n };\n\n const participantFlags = goodTypes.includes(this.participant._) ?\n (this.isAdmin ? (this.participant as ChannelParticipant.channelParticipantAdmin).admin_rights : (this.participant as ChannelParticipant.channelParticipantBanned).banned_rights).pFlags :\n undefined;\n\n if(this.isAdmin) {\n const p = new ChatAdministratorRights(options);\n\n const field = p.fields.find((field) => field.flags[0] === 'add_admins');\n\n const onChange = () => {\n section.caption.replaceChildren(i18n(_canEditAdmin ? (field.checkboxField.checked ? 'Channel.Admin.AdminAccess' : 'Channel.Admin.AdminRestricted') : 'EditAdminCantEdit'));\n };\n\n onChange();\n this.listenerSetter.add(field.checkboxField.input)('change', onChange);\n\n destroyListener = () => {\n if(!canEditAdmin) {\n return;\n }\n\n const rights = p.takeOut();\n if(participantFlags && deepEqual(participantFlags, rights.pFlags)) {\n return;\n }\n\n this.managers.appChatsManager.editAdmin(\n this.chatId,\n this.participant,\n rights,\n rankInputField?.value\n );\n };\n } else {\n const p = new ChatPermissions(options as any, this.managers);\n\n destroyListener = () => {\n const rights = p.takeOut();\n if(participantFlags && deepEqual(participantFlags, rights.pFlags)) {\n return;\n }\n\n this.managers.appChatsManager.editBanned(\n this.chatId,\n this.participant,\n rights\n );\n };\n }\n\n this.eventListener.addEventListener('destroy', destroyListener, {once: true});\n\n this.scrollable.append(section.container);\n }\n\n let rankInputField: InputField;\n if(this.isAdmin && isGroup) {\n const rankKey: LangPackKey = this.participant._ === 'channelParticipantCreator' ? 'Chat.OwnerBadge' : 'ChatAdmin';\n const section = new SettingSection({\n name: 'EditAdminRank',\n caption: 'EditAdminRankInfo',\n captionArgs: [i18n(rankKey)]\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const inputField = rankInputField = new InputField({\n name: 'rank',\n placeholder: rankKey,\n maxLength: 16,\n canBeEdited: _canEditAdmin\n });\n\n const customRank = (this.participant as ChannelParticipant.channelParticipantAdmin).rank;\n if(customRank) {\n inputField.setOriginalValue(customRank, true);\n }\n\n inputWrapper.append(inputField.container);\n section.content.append(inputWrapper);\n this.scrollable.append(section.container);\n }\n\n if(this.isAdmin) {\n const section = new SettingSection({});\n\n if(!isCreator && canEditAdmin) {\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'deleteuser', text: 'Channel.Admin.Dismiss'});\n attachClickEvent(btnDelete, async() => {\n const toggle = toggleDisability([btnDelete], true);\n\n try {\n await this.managers.appChatsManager.editAdmin(\n this.chatId,\n this.participant,\n {_: 'chatAdminRights', pFlags: {}},\n ''\n );\n } catch(err) {\n toggle();\n return;\n }\n\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n }, {listenerSetter: this.listenerSetter});\n section.content.append(btnDelete);\n }\n\n if(section.content.childElementCount) {\n this.scrollable.append(section.container);\n }\n } else {\n const section = new SettingSection({});\n\n if(this.participant._ === 'channelParticipantBanned') {\n const btnDeleteException = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'GroupPermission.Delete'});\n\n attachClickEvent(btnDeleteException, () => {\n const toggle = toggleDisability([btnDeleteException], true);\n this.managers.appChatsManager.clearChannelParticipantBannedRights(\n this.chatId,\n this.participant as ChannelParticipant.channelParticipantBanned\n ).then(() => {\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n }, () => {\n toggle();\n });\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnDeleteException);\n }\n\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'deleteuser', text: 'UserRestrictionsBlock'});\n\n attachClickEvent(btnDelete, async() => {\n const toggle = toggleDisability([btnDelete], true);\n\n try {\n const peerId = this.userId.toPeerId();\n await confirmationPopup({\n peerId: this.chatId.toPeerId(true),\n descriptionLangKey: 'Permissions.RemoveFromGroup',\n descriptionLangArgs: [await wrapPeerTitle({peerId: peerId})],\n titleLangKey: 'ChannelBlockUser',\n button: {\n langKey: 'Remove',\n isDanger: true\n }\n });\n\n if(!isChannel) {\n await this.managers.appChatsManager.kickFromChat(this.chatId, this.participant);\n } else {\n await this.managers.appChatsManager.kickFromChannel(this.chatId, this.participant as ChannelParticipant);\n }\n } catch(err) {\n toggle();\n return;\n }\n\n this.eventListener.removeEventListener('destroy', destroyListener);\n this.close();\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnDelete);\n\n this.scrollable.append(section.container);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport safeAssign from '../helpers/object/safeAssign';\nimport I18n, {FormatterArguments, LangPackKey} from '../lib/langPack';\nimport CheckboxField from './checkboxField';\nimport Icon from './icon';\nimport Row from './row';\nimport {toast} from './toast';\n\nexport type CheckboxFieldsField = {\n text?: LangPackKey,\n textArgs?: FormatterArguments,\n description?: LangPackKey,\n restrictionText?: LangPackKey,\n checkboxField?: CheckboxField,\n checked?: boolean,\n nested?: CheckboxFieldsField[],\n nestedTo?: CheckboxFieldsField,\n nestedCounter?: HTMLElement,\n setNestedCounter?: (count: number) => void,\n toggleWith?: {checked?: CheckboxFieldsField[], unchecked?: CheckboxFieldsField[]},\n name?: string,\n row?: Row\n};\n\nexport default class CheckboxFields {\n public fields: Array;\n protected listenerSetter: ListenerSetter;\n protected asRestrictions: boolean;\n protected round: boolean;\n protected onRowCreation: (row: Row, info: K) => void;\n protected rightButtonIcon: Icon;\n protected onAnyChange?: () => void;\n protected onExpand?: (info: K) => void;\n\n constructor(options: {\n fields: Array,\n listenerSetter: ListenerSetter,\n asRestrictions?: boolean,\n round?: boolean,\n rightButtonIcon?: Icon,\n onRowCreation?: CheckboxFields['onRowCreation'],\n onAnyChange?: () => void,\n onExpand?: (info: K) => void\n }) {\n safeAssign(this, options);\n }\n\n public createField(info: CheckboxFieldsField, isNested?: boolean) {\n if(info.nestedTo && !isNested) {\n return;\n }\n\n const asInner = isNested && !this.round;\n\n const accordionIcon = Icon('down', 'accordion-icon');\n\n let rightContent: HTMLElement;\n if(this.round && !asInner && info.nested) {\n rightContent = document.createElement('div');\n rightContent.classList.add('accordion-right-button');\n }\n\n const row = info.row = new Row({\n titleLangKey: asInner ? undefined : info.text,\n titleLangArgs: asInner ? undefined : info.textArgs,\n checkboxField: info.checkboxField = new CheckboxField({\n text: asInner ? info.text : undefined,\n textArgs: asInner ? info.textArgs : undefined,\n checked: info.nested ? false : info.checked,\n toggle: this.round ? undefined : !isNested,\n listenerSetter: this.listenerSetter,\n restriction: this.asRestrictions && !isNested,\n name: info.name,\n round: this.round\n }),\n listenerSetter: this.listenerSetter,\n subtitleLangKey: info.description,\n clickable: info.nested ? (e) => {\n if(\n this.round ?\n !findUpAsChild(e.target as HTMLElement, rightContent) && e.target !== rightContent :\n findUpAsChild(e.target as HTMLElement, row.checkboxField.label)\n ) {\n if(row.checkboxField.input.disabled) {\n const checked = row.checkboxField.checked;\n info.nested.forEach((field) => {\n field.checkboxField.checked = !checked;\n });\n } else {\n row.checkboxField.checked = !row.checkboxField.checked;\n }\n\n return;\n }\n\n cancelEvent(e);\n row.container.classList.toggle('accordion-toggler-expanded');\n accordion.classList.toggle('is-expanded');\n this.onExpand?.(info as K);\n } : undefined,\n rightContent\n });\n\n row.container.classList.add('accordion-row');\n\n if(info.restrictionText) {\n if(!info.nestedTo) {\n const circle = info.checkboxField.label.lastElementChild.firstElementChild;\n circle.classList.add('with-lock');\n circle.append(Icon('premium_lock', 'checkbox-caption-lock'));\n }\n\n info.checkboxField.input.disabled = true;\n\n if(!info.nested) attachClickEvent(info.row.container, (e) => {\n toast(I18n.format(info.restrictionText, true));\n }, {listenerSetter: this.listenerSetter});\n }\n\n const nodes: HTMLElement[] = [row.container];\n let accordion: HTMLElement, nestedCounter: HTMLElement;\n if(info.nested) {\n const container = accordion = document.createElement('div');\n container.classList.add('accordion');\n container.style.setProperty('--max-height', info.nested.length * 48 + 'px');\n const _info = info;\n info.nested.forEach((info) => {\n info.nestedTo ??= _info;\n container.append(...this.createField(info, true).nodes);\n });\n nodes.push(container);\n\n nestedCounter = info.nestedCounter = document.createElement('b');\n nestedCounter.classList.add('accordion-counter');\n this.setNestedCounter(info);\n\n row.container.classList.add('accordion-toggler');\n if(this.round) {\n rightContent.append(Icon(this.rightButtonIcon), ' ', nestedCounter, ' ', accordionIcon);\n row.container.classList.add('accordion-toggler-round');\n } else {\n row.title.append(' ', nestedCounter, ' ', accordionIcon);\n row.titleRow.classList.add('with-delimiter');\n }\n\n // * will control it myself, otherwise on mobiles it will be toggled everytime\n row.checkboxField.input.disabled = true;\n row.checkboxField.setValueSilently(this.getNestedCheckedLength(info) === info.nested.length);\n\n info.toggleWith ??= {checked: info.nested, unchecked: info.nested};\n }\n\n if(info.toggleWith || info.nestedTo) {\n const processToggleWith = info.toggleWith ? (info: CheckboxFieldsField) => {\n const {toggleWith, nested} = info;\n const value = info.checkboxField.checked;\n const arr = value ? toggleWith.checked : toggleWith.unchecked;\n if(!arr) {\n return;\n }\n\n const other = this.fields.filter((i) => arr.includes(i));\n other.forEach((info) => {\n if(info.restrictionText) {\n return;\n }\n\n info.checkboxField.setValueSilently(value);\n if(info.nestedTo && !nested) {\n this.setNestedCounter(info.nestedTo);\n }\n\n if(info.toggleWith) {\n processToggleWith(info);\n }\n });\n\n if(info.nested) {\n this.setNestedCounter(info);\n }\n } : undefined;\n\n const processNestedTo = info.nestedTo ? () => {\n const length = this.getNestedCheckedLength(info.nestedTo);\n info.nestedTo.checkboxField.setValueSilently(length === info.nestedTo.nested.length);\n this.setNestedCounter(info.nestedTo, length);\n } : undefined;\n\n this.listenerSetter.add(info.checkboxField.input)('change', () => {\n processToggleWith?.(info);\n processNestedTo?.();\n this.onAnyChange?.();\n });\n } else if(this.onAnyChange && !info.nested) {\n this.listenerSetter.add(info.checkboxField.input)('change', () => {\n this.onAnyChange();\n });\n }\n\n this.onRowCreation?.(row, info as K);\n\n return {row, nodes};\n }\n\n protected getNestedCheckedLength(info: CheckboxFieldsField) {\n return info.nested.reduce((acc, v) => acc + +v.checkboxField.checked, 0);\n }\n\n public setNestedCounter(info: CheckboxFieldsField, count = this.getNestedCheckedLength(info)) {\n info.nestedCounter.textContent = this.round ? '' + info.nested.length : `${count}/${info.nested.length}`;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type GrabEvent = {x: number, y: number, isTouch?: boolean, event: TouchEvent | MouseEvent};\n\nexport default function attachGrabListeners(element: HTMLElement,\n onStart: (position: GrabEvent) => void,\n onMove: (position: GrabEvent) => void,\n onEnd?: (position: GrabEvent) => void) {\n // * Mouse\n const onMouseMove = (event: MouseEvent) => {\n onMove({x: event.pageX, y: event.pageY, event});\n };\n\n const onMouseUp = (event: MouseEvent) => {\n document.removeEventListener('mousemove', onMouseMove);\n element.addEventListener('mousedown', onMouseDown, {once: true});\n onEnd?.({x: event.pageX, y: event.pageY, event});\n };\n\n const onMouseDown = (event: MouseEvent) => {\n if(event.button !== 0) {\n element.addEventListener('mousedown', onMouseDown, {once: true});\n return;\n }\n\n onStart({x: event.pageX, y: event.pageY, event});\n onMouseMove(event);\n\n document.addEventListener('mousemove', onMouseMove);\n document.addEventListener('mouseup', onMouseUp, {once: true});\n };\n\n element.addEventListener('mousedown', onMouseDown, {once: true});\n\n // * Touch\n const onTouchMove = (event: TouchEvent) => {\n event.preventDefault();\n onMove({x: event.touches[0].clientX, y: event.touches[0].clientY, isTouch: true, event});\n };\n\n const onTouchEnd = (event: TouchEvent) => {\n document.removeEventListener('touchmove', onTouchMove);\n element.addEventListener('touchstart', onTouchStart, {passive: false, once: true});\n const touch = event.touches[0] || event.changedTouches[0];\n onEnd?.({x: touch.clientX, y: touch.clientY, isTouch: true, event});\n };\n\n const onTouchStart = (event: TouchEvent) => {\n onStart({x: event.touches[0].clientX, y: event.touches[0].clientY, isTouch: true, event});\n onTouchMove(event);\n\n document.addEventListener('touchmove', onTouchMove, {passive: false});\n document.addEventListener('touchend', onTouchEnd, {passive: false, once: true});\n };\n\n element.addEventListener('touchstart', onTouchStart, {passive: false, once: true});\n\n return () => {\n element.removeEventListener('mousedown', onMouseDown);\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp);\n\n element.removeEventListener('touchstart', onTouchStart);\n document.removeEventListener('touchmove', onTouchMove);\n document.removeEventListener('touchend', onTouchEnd);\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport attachGrabListeners, {GrabEvent} from '../helpers/dom/attachGrabListeners';\nimport clamp from '../helpers/number/clamp';\nimport safeAssign from '../helpers/object/safeAssign';\nimport I18n from '../lib/langPack';\n\nexport default class RangeSelector {\n public container: HTMLDivElement;\n protected filled: HTMLDivElement;\n protected seek: HTMLInputElement;\n\n public mousedown = false;\n protected rect: DOMRect;\n protected _removeListeners: () => void;\n\n private events: Partial<{\n // onMouseMove: ProgressLine['onMouseMove'],\n onMouseDown: RangeSelector['onMouseDown'],\n onMouseUp: RangeSelector['onMouseUp'],\n onScrub: (value: number) => void\n }> = {};\n\n protected decimals: number;\n\n protected step: number;\n protected min: number;\n protected max: number;\n protected withTransition = false;\n protected useTransform = false;\n protected vertical = false;\n\n constructor(\n options: {\n step: RangeSelector['step'],\n min?: RangeSelector['min'],\n max?: RangeSelector['max'],\n withTransition?: RangeSelector['withTransition'],\n useTransform?: RangeSelector['useTransform'],\n vertical?: RangeSelector['vertical']\n },\n value = 0\n ) {\n safeAssign(this, options);\n\n this.container = document.createElement('div');\n this.container.classList.add('progress-line');\n\n // there is no sense in using transition with transform, because it is updating every frame\n if(this.useTransform) {\n this.container.classList.add('use-transform');\n } else if(this.withTransition) {\n this.container.classList.add('with-transition');\n }\n\n this.filled = document.createElement('div');\n this.filled.classList.add('progress-line__filled');\n\n const seek = this.seek = document.createElement('input');\n seek.classList.add('progress-line__seek');\n seek.type = 'range';\n seek.step = '' + this.step;\n this.setMinMax(this.min, this.max);\n seek.value = '' + value;\n\n if(value) {\n this.setProgress(value);\n }\n\n const stepStr = '' + this.step;\n const index = stepStr.indexOf('.');\n this.decimals = index === -1 ? 0 : stepStr.length - index - 1;\n\n this.container.append(this.filled, seek);\n }\n\n public setMinMax(min?: number, max?: number) {\n this.min = min ?? (this.min ??= 0);\n this.max = max ?? (this.max ??= 0);\n this.seek.min = '' + min;\n this.seek.max = '' + max;\n }\n\n get value() {\n return +this.seek.value;\n }\n\n public setHandlers(events: RangeSelector['events']) {\n this.events = events;\n }\n\n protected onMouseMove = (event: GrabEvent) => {\n this.scrub(event);\n };\n\n protected onMouseDown = (event: GrabEvent) => {\n this.rect = this.container.getBoundingClientRect();\n this.mousedown = true;\n this.scrub(event);\n this.container.classList.add('is-focused');\n this.events?.onMouseDown && this.events.onMouseDown(event);\n };\n\n protected onMouseUp = (event: GrabEvent) => {\n this.mousedown = false;\n this.container.classList.remove('is-focused');\n this.events?.onMouseUp && this.events.onMouseUp(event);\n };\n\n public setListeners() {\n this.seek.addEventListener('input', this.onInput);\n this._removeListeners = attachGrabListeners(this.container, this.onMouseDown, this.onMouseMove, this.onMouseUp);\n }\n\n public onInput = () => {\n const value = +this.seek.value;\n this.setFilled(value);\n this.events?.onScrub && this.events.onScrub(value);\n };\n\n public setProgress(value: number) {\n this.seek.value = '' + value;\n this.setFilled(+this.seek.value); // clamp\n }\n\n public addProgress(value: number) {\n this.seek.value = '' + (+this.seek.value + value);\n this.setFilled(+this.seek.value); // clamp\n }\n\n public setFilled(value: number) {\n let percents = (value - this.min) / (this.max - this.min);\n percents = clamp(percents, 0, 1);\n\n // using scaleX and width even with vertical because it will be rotated\n if(this.useTransform) {\n this.filled.style.transform = `scaleX(${percents})`;\n } else {\n this.filled.style.width = (percents * 100) + '%';\n }\n }\n\n protected scrub(event: GrabEvent) {\n const rectMax = this.vertical ? this.rect.height : this.rect.width;\n let offsetAxisValue = clamp(\n this.vertical ?\n -(event.y - this.rect.bottom) :\n event.x - this.rect.left,\n 0,\n rectMax\n );\n\n if(!this.vertical && I18n.isRTL) {\n offsetAxisValue = rectMax - offsetAxisValue;\n }\n\n let value = this.min + (offsetAxisValue / rectMax * (this.max - this.min));\n\n if((value - this.min) < ((this.max - this.min) / 2)) {\n value -= this.step / 10;\n }\n\n value = +value.toFixed(this.decimals);\n value = clamp(value, this.min, this.max);\n\n // this.seek.value = '' + value;\n // this.onInput();\n\n this.setProgress(value);\n this.events?.onScrub && this.events.onScrub(value);\n\n return value;\n }\n\n public removeListeners() {\n if(this._removeListeners) {\n this._removeListeners();\n this._removeListeners = null;\n }\n\n this.seek.removeEventListener('input', this.onInput);\n\n this.events = {};\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Middleware} from '../helpers/middleware';\nimport safeAssign from '../helpers/object/safeAssign';\nimport RangeSelector from './rangeSelector';\n\ntype RangeStep = [HTMLElement | string, T];\nexport default class RangeStepsSelector {\n public container: HTMLElement;\n protected steps: RangeStep[];\n protected range: RangeSelector;\n protected optionsElements: ReturnType[];\n\n public middleware: Middleware;\n public onValue: (value: T) => void;\n public generateStep: (value: T) => RangeStep;\n public generateSteps: (values: T[]) => RangeStep[];\n protected noFirstLast: boolean;\n\n constructor(options: {\n middleware: RangeStepsSelector['middleware'],\n generateStep: RangeStepsSelector['generateStep'],\n generateSteps?: RangeStepsSelector['generateSteps'],\n onValue?: RangeStepsSelector['onValue'],\n noFirstLast?: boolean\n }) {\n safeAssign(this, options);\n\n this.generateSteps ??= (values) => values.map(this.generateStep);\n\n const container = this.container = document.createElement('div');\n container.classList.add('range-setting-selector', 'range-steps-selector');\n\n this.middleware.onClean(() => {\n this.range.removeListeners();\n });\n\n const range = this.range = new RangeSelector({step: 1});\n range.setListeners();\n range.setHandlers({\n onScrub: this.onIndex\n });\n\n container.append(range.container);\n }\n\n protected createOption(label: RangeStep[0], idx: number, maxIndex: number) {\n const option = document.createElement('div');\n option.classList.add('range-setting-selector-option');\n const text = document.createElement('div');\n text.classList.add('range-setting-selector-option-text');\n text.replaceChildren(label);\n option.append(text);\n option.style.left = `${idx / maxIndex * 100}%`;\n\n if(idx === 0 && !this.noFirstLast) option.classList.add('is-first');\n else if(idx === maxIndex) {\n option.style.left = '';\n option.style.right = '0';\n !this.noFirstLast && option.classList.add('is-last');\n }\n\n return {container: option, text};\n }\n\n public setSteps(steps: RangeStep[], index?: number) {\n if(this.optionsElements) {\n this.optionsElements.forEach(({container}) => container.remove());\n }\n\n const maxIndex = steps.length - 1;\n this.range.setMinMax(0, maxIndex);\n this.steps = steps;\n\n this.optionsElements = steps.map(([label], idx) => {\n const option = this.createOption(label, idx, maxIndex);\n this.range.container.append(option.container);\n return option;\n });\n\n if(index !== undefined) {\n this.setIndex(index);\n }\n }\n\n protected onIndex = (index: number) => {\n this.onValue?.(this.steps[index][1]);\n this.optionsElements.forEach(({container}, idx) => {\n container.classList.toggle('active', index >= idx);\n container.classList.toggle('is-chosen', index === idx);\n });\n };\n\n public setIndex(index: number) {\n this.range.setProgress(index);\n this.onIndex(index);\n }\n\n public removeListeners() {\n this.range.removeListeners();\n }\n\n public get value() {\n return this.steps[this.range.value][1];\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatRights} from '../../../lib/appManagers/appChatsManager';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpTag from '../../../helpers/dom/findUpTag';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport ListenerSetter from '../../../helpers/listenerSetter';\nimport ScrollableLoader from '../../../helpers/scrollableLoader';\nimport {ChannelParticipant, Chat, ChatAdminRights, ChatBannedRights} from '../../../layer';\nimport appDialogsManager, {DialogDom, DIALOG_LIST_ELEMENT_TAG} from '../../../lib/appManagers/appDialogsManager';\nimport {AppManagers} from '../../../lib/appManagers/managers';\nimport combineParticipantBannedRights from '../../../lib/appManagers/utils/chats/combineParticipantBannedRights';\nimport hasRights from '../../../lib/appManagers/utils/chats/hasRights';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport {i18n, join, LangPackKey} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport PopupPickUser from '../../popups/pickUser';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport {toast} from '../../toast';\nimport AppUserPermissionsTab from './userPermissions';\nimport CheckboxFields, {CheckboxFieldsField} from '../../checkboxFields';\nimport PopupElement from '../../popups';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport RangeStepsSelector from '../../rangeStepsSelector';\nimport formatDuration from '../../../helpers/formatDuration';\nimport {wrapFormattedDuration} from '../../wrappers/wrapDuration';\n\ntype PermissionsCheckboxFieldsField = CheckboxFieldsField & {\n flags: ChatRights[],\n exceptionText: LangPackKey\n};\n\ntype AdministratorRightsCheckboxFieldsField = CheckboxFieldsField & {\n flags: ChatRights[]\n};\n\nexport class ChatPermissions extends CheckboxFields {\n protected chat: Chat.chat | Chat.channel;\n protected rights: ChatBannedRights.chatBannedRights;\n protected defaultBannedRights: ChatBannedRights.chatBannedRights;\n\n constructor(private options: {\n chatId: ChatId,\n listenerSetter: ListenerSetter,\n appendTo: HTMLElement,\n participant?: ChannelParticipant.channelParticipantBanned,\n forChat?: boolean\n }, private managers: AppManagers) {\n super({\n listenerSetter: options.listenerSetter,\n fields: [],\n asRestrictions: true\n });\n\n this.construct();\n }\n\n public async construct() {\n const options = this.options;\n const peerId = options.chatId.toPeerId(true);\n const chat = this.chat = apiManagerProxy.getChat(options.chatId) as Chat.chat | Chat.channel;\n const isForum = apiManagerProxy.isForum(peerId);\n const defaultBannedRights = this.defaultBannedRights = chat.default_banned_rights;\n const rights = this.rights = options.participant ? combineParticipantBannedRights(chat as Chat.channel, options.participant.banned_rights) : defaultBannedRights;\n\n const mediaNested: PermissionsCheckboxFieldsField[] = [\n {flags: ['send_photos'], text: 'UserRestrictionsSendPhotos', exceptionText: 'UserRestrictionsNoSendPhotos'},\n {flags: ['send_videos'], text: 'UserRestrictionsSendVideos', exceptionText: 'UserRestrictionsNoSendVideos'},\n {flags: ['send_stickers', 'send_gifs'], text: 'UserRestrictionsSendStickers', exceptionText: 'UserRestrictionsNoSendStickers'},\n {flags: ['send_audios'], text: 'UserRestrictionsSendMusic', exceptionText: 'UserRestrictionsNoSendMusic'},\n {flags: ['send_docs'], text: 'UserRestrictionsSendFiles', exceptionText: 'UserRestrictionsNoSendDocs'},\n {flags: ['send_voices'], text: 'UserRestrictionsSendVoices', exceptionText: 'UserRestrictionsNoSendVoice'},\n {flags: ['send_roundvideos'], text: 'UserRestrictionsSendRound', exceptionText: 'UserRestrictionsNoSendRound'},\n {flags: ['embed_links'], text: 'UserRestrictionsEmbedLinks', exceptionText: 'UserRestrictionsNoEmbedLinks'},\n {flags: ['send_polls'], text: 'UserRestrictionsSendPolls', exceptionText: 'UserRestrictionsNoSendPolls'}\n ];\n\n let v: PermissionsCheckboxFieldsField[] = [\n {flags: ['send_plain'], text: 'UserRestrictionsSend', exceptionText: 'UserRestrictionsNoSend'},\n {flags: ['send_media'], text: 'UserRestrictionsSendMedia', exceptionText: 'UserRestrictionsNoSendMedia', nested: mediaNested},\n {flags: ['invite_users'], text: 'UserRestrictionsInviteUsers', exceptionText: 'UserRestrictionsNoInviteUsers'},\n {flags: ['pin_messages'], text: 'UserRestrictionsPinMessages', exceptionText: 'UserRestrictionsNoPinMessages'},\n isForum && {flags: ['manage_topics'], text: 'CreateTopicsPermission', exceptionText: 'UserRestrictionsNoChangeInfo'},\n {flags: ['change_info'], text: 'UserRestrictionsChangeInfo', exceptionText: 'UserRestrictionsNoChangeInfo'}\n ];\n v = v.filter(Boolean);\n\n\n const map: {[action in ChatRights]?: PermissionsCheckboxFieldsField} = {};\n v.push(...mediaNested);\n v.forEach((info) => {\n const mainFlag = info.flags[0];\n map[mainFlag] = info;\n info.checked = hasRights(chat, mainFlag, rights);\n });\n\n mediaNested.forEach((info) => info.nestedTo = map.send_media);\n map.send_media.toggleWith = {unchecked: mediaNested, checked: mediaNested};\n map.embed_links.toggleWith = {checked: [map.send_plain]};\n map.send_plain.toggleWith = {unchecked: [map.embed_links]};\n\n this.fields = v;\n\n for(const info of this.fields) {\n if(!options.forChat && defaultBannedRights.pFlags[info.flags[0] as keyof typeof defaultBannedRights['pFlags']]) {\n info.restrictionText = 'UserRestrictionsDisabled';\n } else if(getPeerActiveUsernames(chat as Chat.channel)[0] && (info.flags.includes('pin_messages') || info.flags.includes('change_info'))) {\n info.restrictionText = options.participant ? 'UserRestrictionsDisabled' : 'EditCantEditPermissionsPublic';\n }\n }\n\n for(const info of this.fields) {\n if(info.nestedTo) {\n continue;\n }\n\n const {nodes} = this.createField(info);\n options.appendTo.append(...nodes);\n }\n }\n\n public takeOut() {\n const rights: ChatBannedRights = {\n _: 'chatBannedRights',\n until_date: 0x7FFFFFFF,\n pFlags: {}\n };\n\n const IGNORE_FLAGS: Set = new Set([\n 'send_media'\n ]);\n for(const info of this.fields) {\n const banned = !info.checkboxField.checked;\n if(!banned) {\n continue;\n }\n\n info.flags.forEach((flag) => {\n if(IGNORE_FLAGS.has(flag)) {\n return;\n }\n\n // @ts-ignore\n rights.pFlags[flag] = true;\n });\n }\n\n return rights;\n }\n}\n\nexport class ChatAdministratorRights extends CheckboxFields {\n protected rights: ChatAdminRights;\n protected defaultBannedRights: ChatAdminRights;\n protected restrictionText: LangPackKey;\n\n constructor(private options: {\n chatId: ChatId,\n listenerSetter: ListenerSetter,\n appendTo: HTMLElement,\n participant?: ChannelParticipant.channelParticipantAdmin | ChannelParticipant.channelParticipantCreator,\n chat: Chat,\n canEdit?: boolean\n }) {\n super({\n listenerSetter: options.listenerSetter,\n fields: [],\n asRestrictions: true\n });\n\n this.construct();\n }\n\n public construct() {\n const options = this.options;\n const chat = options.chat as Chat.chat | Chat.channel;\n const isBroadcast = !!(chat as Chat.channel).pFlags.broadcast;\n const isForum = !!(chat as Chat.channel).pFlags.forum;\n const rights = this.rights = options.participant ? options.participant.admin_rights : undefined;\n\n const manageMessagesNested: AdministratorRightsCheckboxFieldsField[] = isBroadcast && [\n {flags: ['post_messages'], text: 'EditAdminPostMessages'},\n {flags: ['edit_messages'], text: 'EditAdminEditMessages'},\n {flags: ['delete_messages'], text: 'EditAdminDeleteMessages'}\n ];\n\n const manageStoriesNested: AdministratorRightsCheckboxFieldsField[] = isBroadcast && [\n {flags: ['post_stories'], text: 'AdminRights.PostStories'},\n {flags: ['edit_stories'], text: 'AdminRights.EditStories'},\n {flags: ['delete_stories'], text: 'AdminRights.DeleteStories'}\n ];\n\n const manageMessagesNestedKey: ChatRights = 'post_messages_nested' as any;\n const manageStoriesNestedKey: ChatRights = 'post_stories_nested' as any;\n let v: AdministratorRightsCheckboxFieldsField[] = [\n {flags: ['change_info'], text: isBroadcast ? 'EditAdminChangeChannelInfo' : 'EditAdminChangeGroupInfo'},\n isBroadcast && {flags: [manageMessagesNestedKey], text: 'AdminRights.ManageMessages', nested: manageMessagesNested},\n isBroadcast && {flags: [manageStoriesNestedKey], text: 'AdminRights.ManageStories', nested: manageStoriesNested},\n !isBroadcast && {flags: ['delete_messages'], text: isBroadcast ? 'EditAdminDeleteMessages' : 'EditAdminGroupDeleteMessages'},\n !isBroadcast && {flags: ['ban_users'], text: 'EditAdminBanUsers'},\n !isBroadcast && {flags: ['invite_users'], text: 'EditAdminAddUsersViaLink'},\n !isBroadcast && {flags: ['pin_messages'], text: 'EditAdminPinMessages'},\n isForum && {flags: ['manage_topics'], text: 'ManageTopicsPermission'},\n {flags: ['manage_call'], text: isBroadcast ? 'StartVoipChatPermission' : 'Channel.EditAdmin.ManageCalls'},\n isBroadcast && {flags: ['invite_users'], text: 'Channel.EditAdmin.PermissionInviteSubscribers'},\n !isBroadcast && {flags: ['anonymous'], text: 'EditAdminSendAnonymously', checked: rights ? undefined : false},\n {flags: ['add_admins'], text: 'EditAdminAddAdmins', checked: rights ? undefined : false}\n ];\n\n const map: {[action in ChatRights]?: AdministratorRightsCheckboxFieldsField} = {};\n v = v.filter(Boolean);\n if(manageMessagesNested) v.push(...manageMessagesNested);\n if(manageStoriesNested) v.push(...manageStoriesNested);\n v.forEach((info) => {\n const mainFlag = info.flags[0];\n map[mainFlag] = info;\n info.checked ??= hasRights(chat, mainFlag, rights);\n });\n\n if(manageMessagesNested) {\n manageMessagesNested.forEach((info) => info.nestedTo = map[manageMessagesNestedKey]);\n map[manageMessagesNestedKey].toggleWith = {unchecked: manageMessagesNested, checked: manageMessagesNested};\n }\n\n if(manageStoriesNested) {\n manageStoriesNested.forEach((info) => info.nestedTo = map[manageStoriesNestedKey]);\n map[manageStoriesNestedKey].toggleWith = {unchecked: manageStoriesNested, checked: manageStoriesNested};\n }\n\n this.fields = v;\n\n const CREATOR_EXCEPTIONS: Set = new Set([\n 'anonymous'\n ]);\n\n const isCreator = options.participant?._ === 'channelParticipantCreator';\n for(const info of this.fields) {\n const mainFlag = info.flags[0];\n if(!options.canEdit) {\n info.restrictionText = 'EditAdminCantEdit';\n } else if((isCreator && !CREATOR_EXCEPTIONS.has(mainFlag as ChatRights)) || !hasRights(chat, mainFlag)) {\n info.restrictionText = 'EditCantEditPermissions';\n }\n }\n\n for(const info of this.fields) {\n if(info.nestedTo) {\n continue;\n }\n\n const {nodes} = this.createField(info);\n options.appendTo.append(...nodes);\n }\n }\n\n public takeOut() {\n const rights: ChatAdminRights = {\n _: 'chatAdminRights',\n pFlags: {}\n };\n\n for(const info of this.fields) {\n if(!info.checkboxField.checked) {\n continue;\n }\n\n info.flags.forEach((flag) => {\n // @ts-ignore\n rights.pFlags[flag] = true;\n });\n }\n\n return rights;\n }\n}\n\nexport default class AppGroupPermissionsTab extends SliderSuperTabEventable {\n public chatId: ChatId;\n private participants: Map;\n\n public async init() {\n this.container.classList.add('edit-peer-container', 'group-permissions-container');\n this.setTitle('ChannelPermissions');\n\n this.participants = new Map();\n\n let chatPermissions: ChatPermissions;\n {\n const section = new SettingSection({\n name: 'ChannelPermissionsHeader'\n });\n\n chatPermissions = new ChatPermissions({\n chatId: this.chatId,\n listenerSetter: this.listenerSetter,\n appendTo: section.content,\n forChat: true\n }, this.managers);\n\n this.eventListener.addEventListener('destroy', () => {\n this.managers.appChatsManager.editChatDefaultBannedRights(this.chatId, chatPermissions.takeOut());\n }, {once: true});\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({\n name: 'Slowmode',\n caption: true\n });\n\n const chatFull = await this.managers.appProfileManager.getChannelFull(this.chatId);\n\n let lastValue: number;\n const range: RangeStepsSelector = new RangeStepsSelector({\n generateStep: (value) => {\n let t: HTMLElement;\n if(!value) {\n t = i18n('SlowmodeOff');\n } else {\n const hours = Math.floor(value / 3600);\n const minutes = Math.floor(value / 60) % 60;\n const seconds = value % 60;\n if(hours) {\n t = i18n('SlowmodeHours', [hours]);\n } else if(minutes) {\n t = i18n('SlowmodeMinutes', [minutes]);\n } else {\n t = i18n('SlowmodeSeconds', [seconds]);\n }\n }\n\n return [t, value];\n },\n onValue: (value) => {\n if(lastValue === value) {\n return;\n }\n\n lastValue = value;\n if(value) {\n section.caption.replaceChildren(i18n('SlowmodeInfoSelected', [wrapFormattedDuration(formatDuration(value, 1))]));\n } else {\n section.caption.replaceChildren(i18n('SlowmodeInfoOff'));\n }\n },\n middleware: this.middlewareHelper.get()\n });\n\n const values = [0, 10, 30, 60, 300, 900, 3600];\n const steps = range.generateSteps(values);\n const initialValue = chatFull.slowmode_seconds || 0;\n range.setSteps(steps, values.indexOf(initialValue));\n\n section.content.append(range.container);\n\n this.eventListener.addEventListener('destroy', () => {\n const {value} = range;\n if(value !== initialValue) {\n this.managers.appChatsManager.toggleSlowMode(this.chatId, range.value);\n }\n }, {once: true});\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({\n name: 'PrivacyExceptions'\n });\n\n const addExceptionRow = new Row({\n titleLangKey: 'ChannelAddException',\n subtitleLangKey: 'Loading',\n icon: 'adduser',\n clickable: () => {\n PopupElement.createPopup(PopupPickUser, {\n peerType: ['channelParticipants'],\n onSelect: (peerId) => {\n setTimeout(() => {\n openPermissions(peerId);\n }, 0);\n },\n placeholder: 'ExceptionModal.Search.Placeholder',\n peerId: -this.chatId,\n exceptSelf: true\n });\n },\n listenerSetter: this.listenerSetter\n });\n\n const openPermissions = async(peerId: PeerId) => {\n let participant = this.participants.get(peerId);\n if(!participant) {\n try {\n participant = await this.managers.appProfileManager.getParticipant(this.chatId, peerId) as typeof participant;\n } catch(err) {\n toast('User is no longer participant');\n return;\n }\n }\n\n const tab = this.slider.createTab(AppUserPermissionsTab);\n tab.participant = participant;\n tab.chatId = this.chatId;\n tab.userId = peerId;\n tab.open();\n };\n\n section.content.append(addExceptionRow.container);\n\n const c = section.generateContentElement();\n c.classList.add('chatlist-container');\n\n const list = appDialogsManager.createChatList({new: true});\n c.append(list);\n\n attachClickEvent(list, (e) => {\n const target = findUpTag(e.target, DIALOG_LIST_ELEMENT_TAG);\n if(!target) return;\n\n const peerId = target.dataset.peerId.toPeerId();\n openPermissions(peerId);\n }, {listenerSetter: this.listenerSetter});\n\n const setSubtitle = async(dom: DialogDom, participant: ChannelParticipant.channelParticipantBanned) => {\n const bannedRights = participant.banned_rights;// appChatsManager.combineParticipantBannedRights(this.chatId, participant.banned_rights);\n const defaultBannedRights = ((await this.managers.appChatsManager.getChat(this.chatId)) as Chat.channel).default_banned_rights;\n // const combinedRights = appChatsManager.combineParticipantBannedRights(this.chatId, bannedRights);\n\n const cantWhat: LangPackKey[] = []/* , canWhat: LangPackKey[] = [] */;\n chatPermissions.fields.forEach((info) => {\n const mainFlag = info.flags[0];\n // @ts-ignore\n if(bannedRights.pFlags[mainFlag] && !defaultBannedRights.pFlags[mainFlag]) {\n cantWhat.push(info.exceptionText);\n // @ts-ignore\n }/* else if(!combinedRights.pFlags[mainFlag]) {\n canWhat.push(info.exceptionText);\n } */\n });\n\n const el = dom.lastMessageSpan as HTMLElement;\n\n if(cantWhat.length) {\n el.replaceChildren(...join(cantWhat.map((t) => i18n(t)), false));\n el.classList.toggle('hide', !cantWhat.length);\n } else {\n el.replaceChildren(i18n('UserRestrictionsBy', [await wrapPeerTitle({peerId: participant.kicked_by.toPeerId(false)})]));\n el.classList.remove('hide');\n }/* else if(canWhat.length) {\n str = 'Can ' + canWhat.join(canWhat.length === 2 ? ' and ' : ', ');\n } */\n };\n\n const add = (participant: ChannelParticipant.channelParticipantBanned, append: boolean) => {\n const peerId = getPeerId(participant.peer);\n const dialogElement = appDialogsManager.addDialogNew({\n peerId,\n container: list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n append,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n this.participants.set(peerId, participant);\n\n (dialogElement.dom.listEl as any).dialogElement = dialogElement;\n\n setSubtitle(dialogElement.dom, participant);\n };\n\n this.listenerSetter.add(rootScope)('chat_participant', (update) => {\n const newParticipant = update.new_participant as ChannelParticipant.channelParticipantBanned;\n const prevParticipant = update.prev_participant;\n const peerId = update.user_id.toPeerId(false);\n const needAdd = newParticipant?._ === 'channelParticipantBanned' &&\n !newParticipant.banned_rights.pFlags.view_messages;\n\n if(newParticipant) {\n this.participants.set(peerId, newParticipant);\n } else {\n this.participants.delete(peerId);\n }\n\n const li = list.querySelector(`[data-peer-id=\"${peerId}\"]`);\n if(needAdd) {\n if(!li) {\n add(newParticipant, false);\n } else {\n setSubtitle((li as any).dialogElement.dom, newParticipant);\n }\n\n if(prevParticipant?._ !== 'channelParticipantBanned') {\n ++exceptionsCount;\n }\n } else {\n if(li) {\n (li as any).dialogElement.remove();\n }\n\n if(prevParticipant?._ === 'channelParticipantBanned') {\n --exceptionsCount;\n }\n }\n\n setLength();\n });\n\n const setLength = () => {\n const el = i18n(exceptionsCount ? 'Permissions.ExceptionsCount' : 'Permissions.NoExceptions', [exceptionsCount]);\n replaceContent(addExceptionRow.subtitle, el);\n };\n\n let exceptionsCount = 0;\n let loader: ScrollableLoader;\n const setLoader = () => {\n const LOAD_COUNT = 50;\n loader = new ScrollableLoader({\n scrollable: this.scrollable,\n getPromise: () => {\n return this.managers.appProfileManager.getChannelParticipants({\n id: this.chatId,\n filter: {_: 'channelParticipantsBanned', q: ''},\n limit: LOAD_COUNT,\n offset: list.childElementCount\n }).then((res) => {\n for(const participant of res.participants) {\n add(participant as ChannelParticipant.channelParticipantBanned, true);\n }\n\n exceptionsCount = res.count;\n setLength();\n\n return res.participants.length < LOAD_COUNT || res.count === list.childElementCount;\n });\n }\n });\n\n return loader.load();\n };\n\n this.scrollable.append(section.container);\n\n if(await this.managers.appChatsManager.isChannel(this.chatId)) {\n await setLoader();\n } else {\n setLength();\n\n this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\n if(this.chatId === migrateFrom) {\n this.chatId = migrateTo;\n setLoader();\n }\n });\n }\n }\n }\n\n onOpenAfterTimeout() {\n this.scrollable.onScroll();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport Row from '../row';\nimport wrapSticker from './sticker';\n\nexport default function wrapStickerToRow({doc, row, size, managers}: {\n doc: MyDocument,\n row: Row,\n size?: 'small' | 'large',\n managers?: AppManagers\n}) {\n const previousMedia = row.media;\n const media = row.createMedia('small');\n\n if(previousMedia) {\n media.classList.add('hide');\n }\n\n const loadPromises: Promise[] = previousMedia ? [] : undefined;\n\n const _size = size === 'small' ? 32 : 48;\n const result = wrapSticker({\n div: media,\n doc: doc,\n width: _size,\n height: _size,\n loadPromises,\n managers\n }).then(({render}) => render);\n\n loadPromises && Promise.all(loadPromises).then(() => {\n media.classList.remove('hide');\n previousMedia.remove();\n });\n\n return result;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport debounce from '../../../helpers/schedulers/debounce';\nimport {ChatReactions, Reaction} from '../../../layer';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport CheckboxField from '../../checkboxField';\nimport Row, {RadioFormFromValues} from '../../row';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport wrapStickerToRow from '../../wrappers/stickerToRow';\n\nexport default class AppChatReactionsTab extends SliderSuperTabEventable {\n public chatId: ChatId;\n\n public static getInitArgs(chatId: ChatId) {\n return {\n availableReactions: rootScope.managers.appReactionsManager.getActiveAvailableReactions(),\n chatFull: rootScope.managers.appProfileManager.getChatFull(chatId)\n };\n }\n\n public async init({\n chatId,\n p = AppChatReactionsTab.getInitArgs(chatId)\n }: {\n chatId: ChatId,\n p?: ReturnType\n }) {\n this.setTitle('Reactions');\n\n this.chatId = chatId;\n\n const [availableReactions, chatFull] = await Promise.all([p.availableReactions, p.chatFull]);\n const isBroadcast = await this.managers.appChatsManager.isBroadcast(this.chatId);\n\n let _chatReactions = chatFull.available_reactions ?? {_: 'chatReactionsNone'};\n let chatReactions = _chatReactions;\n let emoticons = new Set(_chatReactions._ === 'chatReactionsSome' ? _chatReactions.reactions.map((reaction) => (reaction as Reaction.reactionEmoji).emoticon) : []);\n\n const makeReactionFromEmoticons = (emoticons: Array): Reaction[] => emoticons.map((emoticon) => ({_: 'reactionEmoji', emoticon}));\n\n const getCaptionLangPackKey = (): LangPackKey => {\n if(isBroadcast) {\n return 'EnableReactionsChannelInfo';\n }\n\n return chatReactions._ === 'chatReactionsAll' ? 'EnableAllReactionsInfo' : (chatReactions._ === 'chatReactionsNone' ? 'DisableReactionsInfo' : 'EnableSomeReactionsInfo');\n };\n\n const toggleSection = new SettingSection({\n name: isBroadcast ? undefined : 'AvailableReactions',\n caption: getCaptionLangPackKey()\n });\n\n const reactionsSection = new SettingSection({\n name: 'OnlyAllowThisReactions'\n });\n\n const toggleCheckboxFieldsByEmoticons = () => {\n const r: Reaction.reactionEmoji[] = (chatReactions as ChatReactions.chatReactionsSome).reactions as any ?? [];\n emoticons = new Set(r.map(({emoticon}) => emoticon));\n checkboxFieldsByEmoticon.forEach((checkboxField, emoticon) => {\n checkboxField.setValueSilently(emoticons.has(emoticon));\n });\n };\n\n let toggleCheckboxField: CheckboxField;\n if(isBroadcast) {\n toggleCheckboxField = new CheckboxField({toggle: true, checked: _chatReactions._ === 'chatReactionsSome'});\n const toggleRow = new Row({\n checkboxField: toggleCheckboxField,\n titleLangKey: 'EnableReactions',\n listenerSetter: this.listenerSetter\n });\n\n toggleSection.content.append(toggleRow.container);\n\n this.listenerSetter.add(toggleCheckboxField.input)('change', () => {\n let save = true;\n if(!toggleCheckboxField.checked) {\n chatReactions = {_: 'chatReactionsNone'};\n } else if(checkboxFields.every((checkboxField) => !checkboxField.checked)) {\n chatReactions = {_: 'chatReactionsSome', reactions: makeReactionFromEmoticons(availableReactions.map(({reaction}) => reaction))};\n } else if(chatReactions._ !== 'chatReactionsSome') {\n chatReactions = {_: 'chatReactionsSome', reactions: makeReactionFromEmoticons(Array.from(emoticons))};\n } else {\n save = false;\n }\n\n if(save) {\n toggleCheckboxFieldsByEmoticons();\n saveReactionsDebounced();\n }\n });\n } else {\n const a: [ChatReactions['_'], LangPackKey][] = [\n ['chatReactionsAll', 'AllReactions'],\n ['chatReactionsSome', 'SomeReactions'],\n ['chatReactionsNone', 'NoReactions']\n ];\n\n const onChange = () => {\n reactionsSection.container.classList.toggle('hide', chatReactions._ !== 'chatReactionsSome');\n };\n\n let value = _chatReactions._;\n const form = RadioFormFromValues(a.map(([value, langPackKey]) => {\n return {\n langPackKey,\n value,\n checked: _chatReactions._ === value\n };\n }), (_value) => {\n value = _value as any;\n\n if(value === 'chatReactionsAll') {\n chatReactions = {\n _: value,\n pFlags: {\n allow_custom: true\n }\n };\n } else if(value === 'chatReactionsNone') {\n chatReactions = {\n _: value\n };\n } else {\n chatReactions = {\n _: value,\n reactions: makeReactionFromEmoticons(['👍', '👎'])\n };\n }\n\n replaceContent(toggleSection.caption, i18n(getCaptionLangPackKey()));\n toggleCheckboxFieldsByEmoticons();\n saveReactionsDebounced();\n onChange();\n });\n\n toggleSection.content.append(form);\n onChange();\n }\n\n const checkboxFieldsByEmoticon: Map = new Map();\n const checkboxFields = availableReactions.map((availableReaction) => {\n const emoticon = availableReaction.reaction;\n const checkboxField = new CheckboxField({\n toggle: true,\n checked: emoticons.has(emoticon)\n });\n\n checkboxFieldsByEmoticon.set(emoticon, checkboxField);\n\n this.listenerSetter.add(checkboxField.input)('change', () => {\n if(checkboxField.checked) {\n emoticons.add(emoticon);\n\n if(toggleCheckboxField && !toggleCheckboxField.checked) {\n toggleCheckboxField.checked = true;\n }\n } else {\n emoticons.delete(emoticon);\n\n if(toggleCheckboxField?.checked && !emoticons.size) {\n toggleCheckboxField.checked = false;\n }\n }\n\n saveReactionsDebounced();\n });\n\n const row = new Row({\n checkboxField,\n title: availableReaction.title,\n havePadding: true,\n listenerSetter: this.listenerSetter\n });\n\n wrapStickerToRow({\n row,\n doc: availableReaction.static_icon,\n size: 'small'\n });\n\n reactionsSection.content.append(row.container);\n\n return checkboxField;\n });\n\n const saveReactions = async() => {\n saveReactionsDebounced.clearTimeout();\n // const newReactions = Array.from(enabledReactions);\n // if([...newReactions].sort().join() === [...originalReactions].sort().join()) {\n // return;\n // }\n\n if(chatReactions._ === 'chatReactionsSome') {\n chatReactions.reactions = makeReactionFromEmoticons(Array.from(emoticons));\n if(!chatReactions.reactions.length) {\n chatReactions = {_: 'chatReactionsNone'};\n }\n }\n\n // const r = (chatReactions as ChatReactions.chatReactionsSome).reactions;\n // if(r?.length === availableReactions.length) {\n // chatReactions = {_: 'chatReactionsAll'};\n // }\n\n this.managers.appChatsManager.setChatAvailableReactions(this.chatId, chatReactions);\n _chatReactions = chatReactions;\n };\n\n const saveReactionsDebounced = debounce(saveReactions, 3000, false, true);\n\n this.eventListener.addEventListener('destroy', () => {\n if(saveReactionsDebounced.isDebounced()) {\n saveReactions();\n }\n }, {once: true});\n\n this.scrollable.append(toggleSection.container, reactionsSection.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport createContextMenu from './createContextMenu';\nimport findUpClassName from './findUpClassName';\nimport {ChannelParticipant, Chat, ChatParticipant} from '../../layer';\nimport SidebarSlider from '../../components/slider';\nimport rootScope from '../../lib/rootScope';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport canEditAdmin from '../../lib/appManagers/utils/chats/canEditAdmin';\nimport AppUserPermissionsTab from '../../components/sidebarRight/tabs/userPermissions';\nimport {Middleware} from '../middleware';\n\ntype Participant = ChannelParticipant | ChatParticipant;\n\nexport default function createParticipantContextMenu(options: {\n listenTo: HTMLElement,\n appendTo?: HTMLElement,\n onOpen?: () => any,\n onClose?: () => any,\n slider: SidebarSlider,\n chatId: ChatId,\n participants: Map,\n middleware?: Middleware\n}) {\n const {listenTo, appendTo, onOpen, onClose, slider, chatId, participants, middleware} = options;\n let target: HTMLElement,\n participant: Participant,\n participantPeerId: PeerId,\n chat: Chat.chat | Chat.channel,\n isBroadcast: boolean,\n isBanned: boolean,\n canChangePermissions: boolean,\n canManageAdmins: boolean;\n\n const openPermissions = (isAdmin?: boolean) => {\n AppUserPermissionsTab.openTab(slider, chatId, participant, isAdmin);\n };\n\n return createContextMenu({\n listenTo: listenTo,\n appendTo,\n middleware,\n findElement: (e) => target = findUpClassName(e.target, 'chatlist-chat'),\n onOpen: async() => {\n participantPeerId = target.dataset.peerId.toPeerId();\n participant = participants.get(participantPeerId);\n [chat, isBroadcast, canChangePermissions, canManageAdmins] = await Promise.all([\n rootScope.managers.appChatsManager.getChat(chatId) as Promise,\n rootScope.managers.appChatsManager.isBroadcast(chatId),\n rootScope.managers.appChatsManager.hasRights(chatId, 'change_permissions'),\n rootScope.managers.appChatsManager.hasRights(chatId, 'change_permissions')\n ]);\n\n target.classList.add('menu-open');\n isBanned = canChangePermissions && participant._ === 'channelParticipantBanned' && participant.pFlags.left;\n return onOpen?.();\n },\n onClose: () => {\n target.classList.remove('menu-open');\n return onClose?.();\n },\n buttons: [{\n icon: 'message',\n text: 'SendMessage',\n onClick: () => {\n appImManager.setInnerPeer({peerId: participantPeerId});\n }\n }, {\n icon: 'adduser',\n text: isBroadcast ? 'AddToChannel' : 'AddToGroup',\n onClick: () => {\n if(isBanned) {\n rootScope.managers.appChatsManager.addToChat(chatId, participantPeerId);\n }\n },\n verify: () => {\n if(!isBanned) {\n return false;\n }\n\n return true;\n }\n }, {\n icon: 'promote',\n text: 'SetAsAdmin',\n onClick: () => openPermissions(true),\n verify: () => canManageAdmins && participant._ === 'channelParticipant'\n }, {\n icon: 'admin',\n text: 'EditAdminRights',\n onClick: () => openPermissions(true),\n verify: () => participant._ === 'channelParticipantAdmin' && canEditAdmin(chat, participant as ChannelParticipant, rootScope.myId)\n }, {\n icon: 'restrict',\n text: 'KickFromSupergroup',\n onClick: () => openPermissions(false),\n verify: () => canChangePermissions && (participant._ === 'channelParticipant' || (participant._ === 'channelParticipantBanned' && !participant.pFlags.left))\n }, {\n icon: 'delete',\n text: 'Delete',\n onClick: () => {\n if(isBanned) {\n rootScope.managers.appChatsManager.editBanned(\n chatId,\n participant,\n {\n _: 'chatBannedRights',\n pFlags: {},\n until_date: 0\n }\n );\n }\n },\n verify: () => {\n if(!isBanned || !canChangePermissions || participantPeerId === rootScope.myId) {\n return false;\n }\n\n return true;\n }\n }, {\n icon: 'delete',\n text: 'KickFromGroup',\n onClick: () => {\n rootScope.managers.appChatsManager.kickFromChat(chatId, participantPeerId);\n },\n verify: () => canChangePermissions &&\n participantPeerId !== rootScope.myId &&\n participant._ !== 'channelParticipantCreator' &&\n (participant._ !== 'channelParticipantAdmin' || canEditAdmin(chat, participant, rootScope.myId)) &&\n (participant._ === 'channelParticipant' || !isBanned)\n }]\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../../../helpers/cancellablePromise';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport createParticipantContextMenu from '../../../helpers/dom/createParticipantContextMenu';\nimport {ChannelParticipant, Chat, ChatFull, ChatParticipant} from '../../../layer';\nimport {i18n} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport AppSelectPeers from '../../appSelectPeers';\nimport ButtonCorner from '../../buttonCorner';\nimport CheckboxField from '../../checkboxField';\nimport PopupElement from '../../popups';\nimport PopupPickUser from '../../popups/pickUser';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport AppUserPermissionsTab from './userPermissions';\n\nexport function createSelectorForParticipants(options: ConstructorParameters[0]) {\n const deferred = deferredPromise();\n const selector = new AppSelectPeers({\n ...options,\n peerType: ['channelParticipants'],\n multiSelect: false,\n headerSearch: true,\n placeholder: 'SearchPlaceholder',\n meAsSaved: false,\n noShadow: false,\n onFirstRender: () => {\n deferred.resolve();\n }\n });\n\n return {selector, loadPromise: deferred};\n}\n\nexport default class AppChatAdministratorsTab extends SliderSuperTabEventable {\n private addBtn: HTMLButtonElement;\n private selector: AppSelectPeers;\n\n public static getInitArgs(chatId: ChatId) {\n return {\n chatFull: rootScope.managers.appProfileManager.getChatFull(chatId),\n appConfig: rootScope.managers.apiManager.getAppConfig()\n };\n }\n\n public async init({\n chatId,\n p = AppChatAdministratorsTab.getInitArgs(chatId)\n }: {\n chatId: ChatId,\n p: ReturnType\n }) {\n const peerId = chatId.toPeerId(true);\n this.container.classList.add('edit-peer-container', 'chat-administrators-container');\n this.setTitle('PeerInfo.Administrators');\n\n const [chat, isBroadcast, chatFull, appConfig] = await Promise.all([\n this.managers.appChatsManager.getChat(chatId),\n this.managers.appChatsManager.isBroadcast(chatId),\n p.chatFull,\n p.appConfig\n ]);\n\n this.addBtn = ButtonCorner({icon: 'addmember_filled', className: 'is-visible'});\n this.content.append(this.addBtn);\n\n attachClickEvent(this.addBtn, () => {\n const popup = PopupElement.createPopup(\n PopupPickUser,\n {\n peerType: ['channelParticipants'],\n peerId,\n onSelect: (peerId) => {\n const participant = popup.selector.participants.get(peerId);\n openPermissions(participant);\n },\n placeholder: 'SearchPlaceholder'\n }\n );\n }, {listenerSetter: this.listenerSetter});\n\n const openPermissions = async(participant: ChatParticipant | ChannelParticipant) => {\n AppUserPermissionsTab.openTab(this.slider, chatId, participant, true);\n };\n\n const canToggleAntiSpam = !isBroadcast && (chat as Chat.chat | Chat.channel).participants_count >= appConfig.telegram_antispam_group_size_min;\n\n const {selector, loadPromise} = createSelectorForParticipants({\n appendTo: this.content,\n managers: this.managers,\n middleware: this.middlewareHelper.get(),\n peerId,\n channelParticipantsFilter: (q) => {\n return {_: 'channelParticipantsAdmins', q};\n },\n getSubtitleForElement: async(peerId) => {\n const participant = this.selector.participants.get(peerId);\n if(participant._ === 'channelParticipantCreator' || participant._ === 'chatParticipantCreator') {\n return i18n('ChannelCreator');\n }\n\n const promotedBy = (participant as ChannelParticipant.channelParticipantAdmin).promoted_by.toPeerId(false);\n return i18n('EditAdminPromotedBy', [await wrapPeerTitle({peerId: promotedBy})]);\n },\n onSelect: (peerId) => {\n const participant = this.selector.participants.get(peerId);\n openPermissions(participant);\n },\n channelParticipantsUpdateFilter: (participant) => {\n return ([\n 'channelParticipantAdmin',\n 'channelParticipantCreator'\n ] as ChannelParticipant['_'][]).includes(participant?._);\n }\n // noDelimiter: canToggleAntiSpam\n });\n\n this.selector = selector;\n\n if(canToggleAntiSpam) {\n const section = new SettingSection({\n noDelimiter: true,\n caption: 'ChannelAntiSpamInfo'\n });\n\n const checked = !!(chatFull as ChatFull.channelFull)?.pFlags?.antispam;\n const row = new Row({\n titleLangKey: 'ChannelAntiSpam',\n // icon: 'hide',\n checkboxField: new CheckboxField({\n name: 'agg',\n toggle: true,\n listenerSetter: this.listenerSetter,\n checked\n }),\n listenerSetter: this.listenerSetter\n });\n\n this.eventListener.addEventListener('destroy', () => {\n const _checked = row.checkboxField.checked;\n if(_checked === checked) {\n return;\n }\n\n this.managers.appChatsManager.toggleAntiSpam(chatId, _checked);\n }, {once: true});\n\n section.content.append(row.container);\n\n this.selector.scrollable.append(section.container, this.selector.scrollable.container.lastElementChild);\n }\n\n createParticipantContextMenu({\n chatId,\n listenTo: this.selector.scrollable.container,\n participants: this.selector.participants,\n slider: this.slider,\n middleware: this.middlewareHelper.get()\n });\n\n return loadPromise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport AppSelectPeers from '../../appSelectPeers';\nimport {setButtonLoader} from '../../putPreloader';\nimport {LangPackKey, _i18n} from '../../../lib/langPack';\nimport ButtonCorner from '../../buttonCorner';\n\nexport default class AppAddMembersTab extends SliderSuperTab {\n private nextBtn: HTMLButtonElement;\n private selector: AppSelectPeers;\n private peerType: 'channel' | 'chat' | 'privacy';\n private takeOut: (peerIds: PeerId[]) => Promise | false | void;\n private skippable: boolean;\n\n public init(options: {\n title: LangPackKey,\n placeholder: LangPackKey,\n type: AppAddMembersTab['peerType'],\n takeOut?: AppAddMembersTab['takeOut'],\n skippable: boolean,\n selectedPeerIds?: PeerId[]\n }) {\n this.container.classList.add('add-members-container');\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\n this.content.append(this.nextBtn);\n this.scrollable.container.remove();\n\n this.nextBtn.addEventListener('click', () => {\n const peerIds = this.selector.getSelected().map((sel) => sel.toPeerId());\n const result = this.takeOut(peerIds);\n\n if(this.skippable && !(result instanceof Promise)) {\n this.close();\n } else if(result instanceof Promise) {\n this.attachToPromise(result);\n } else if(result === undefined) {\n this.close();\n }\n });\n\n //\n this.setTitle(options.title);\n this.peerType = options.type;\n this.takeOut = options.takeOut;\n this.skippable = options.skippable;\n\n const isPrivacy = this.peerType === 'privacy';\n this.selector = new AppSelectPeers({\n middleware: this.middlewareHelper.get(),\n appendTo: this.content,\n onChange: this.skippable ? null : (length) => {\n this.nextBtn.classList.toggle('is-visible', !!length);\n },\n peerType: [isPrivacy ? 'dialogs' : 'contacts'],\n placeholder: options.placeholder,\n exceptSelf: isPrivacy,\n filterPeerTypeBy: isPrivacy ? ['isAnyGroup', 'isUser'] : undefined,\n managers: this.managers,\n design: 'square'\n });\n\n if(options.selectedPeerIds) {\n this.selector.addInitial(options.selectedPeerIds);\n }\n\n this.nextBtn.disabled = false;\n this.nextBtn.classList.toggle('is-visible', this.skippable);\n }\n\n public attachToPromise(promise: Promise) {\n const removeLoader = setButtonLoader(this.nextBtn, 'arrow_next');\n\n promise.then(() => {\n this.close();\n }, () => {\n removeLoader();\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FormatterArguments, LangPackKey, i18n, join} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport PopupElement from './popups';\nimport PopupPeer, {PopupPeerButtonCallbackCheckboxes, PopupPeerCheckboxOptions} from './popups/peer';\nimport PopupPickUser from './popups/pickUser';\nimport AppAddMembersTab from './sidebarLeft/tabs/addMembers';\nimport SidebarSlider from './slider';\nimport {toastNew} from './toast';\nimport wrapPeerTitle from './wrappers/peerTitle';\n\nexport default async function addChatUsers({\n peerId,\n slider\n}: {\n peerId: PeerId,\n slider: SidebarSlider\n}) {\n const id = peerId.toChatId();\n const isChannel = await rootScope.managers.appChatsManager.isChannel(id);\n const isBroadcast = await rootScope.managers.appChatsManager.isBroadcast(id);\n\n const showConfirmation = async(peerIds: PeerId[], callback: (e: MouseEvent, checked: PopupPeerButtonCallbackCheckboxes) => void) => {\n let titleLangKey: LangPackKey, titleLangArgs: FormatterArguments,\n descriptionLangKey: LangPackKey, descriptionLangArgs: FormatterArguments,\n checkboxes: PopupPeerCheckboxOptions[];\n\n if(peerIds.length > 1) {\n const titles = await Promise.all(peerIds.map(async(peerId) => {\n const b = document.createElement('b');\n b.append(await wrapPeerTitle({peerId}));\n return b;\n }));\n titleLangKey = 'AddMembersAlertTitle';\n titleLangArgs = [i18n(isBroadcast ? 'Subscribers' : 'Members', [peerIds.length])];\n descriptionLangKey = 'AddMembersAlertCountText';\n descriptionLangArgs = [\n join(titles)\n ];\n\n if(!isChannel) {\n checkboxes = [{\n text: 'AddMembersForwardMessages',\n checked: true\n }];\n }\n } else {\n titleLangKey = 'AddOneMemberAlertTitle';\n descriptionLangKey = 'AddMembersAlertNamesText';\n const b = document.createElement('b');\n b.append(await wrapPeerTitle({peerId: peerIds[0]}));\n descriptionLangArgs = [b];\n\n if(!isChannel) {\n checkboxes = [{\n text: 'AddOneMemberForwardMessages',\n textArgs: [await wrapPeerTitle({peerId: peerIds[0]})],\n checked: true\n }];\n }\n }\n\n descriptionLangArgs.push(await wrapPeerTitle({peerId}));\n\n PopupElement.createPopup(PopupPeer, 'popup-add-members', {\n peerId,\n titleLangKey,\n titleLangArgs,\n descriptionLangKey,\n descriptionLangArgs,\n buttons: [{\n langKey: 'Add',\n callback\n }],\n checkboxes\n }).show();\n };\n\n const onError = (err: ApiError) => {\n if(err.type === 'USER_PRIVACY_RESTRICTED') {\n toastNew({langPackKey: 'InviteToGroupError'});\n }\n };\n\n if(isChannel) {\n const tab = slider.createTab(AppAddMembersTab);\n tab.open({\n type: 'channel',\n skippable: false,\n takeOut: (peerIds) => {\n showConfirmation(peerIds, () => {\n const promise = rootScope.managers.appChatsManager.inviteToChannel(id, peerIds);\n promise.catch(onError);\n tab.attachToPromise(promise);\n });\n\n return false;\n },\n title: isBroadcast ? 'ChannelAddSubscribers' : 'GroupAddMembers',\n placeholder: 'SendMessageTo'\n });\n } else {\n PopupElement.createPopup(PopupPickUser, {\n peerType: ['contacts'],\n placeholder: 'Search',\n onSelect: (peerId) => {\n setTimeout(() => {\n showConfirmation([peerId], (e, checked) => {\n rootScope.managers.appChatsManager.addChatUser(id, peerId, checked.size ? undefined : 0)\n .catch(onError);\n });\n }, 0);\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport deferredPromise from '../../../helpers/cancellablePromise';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport createParticipantContextMenu from '../../../helpers/dom/createParticipantContextMenu';\nimport {Chat, ChatFull} from '../../../layer';\nimport addChatUsers from '../../addChatUsers';\nimport AppSelectPeers from '../../appSelectPeers';\nimport ButtonCorner from '../../buttonCorner';\nimport CheckboxField from '../../checkboxField';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\n\nexport function createSelectorForTab(options: ConstructorParameters[0]) {\n const deferred = deferredPromise();\n const selector = new AppSelectPeers({\n ...options,\n multiSelect: false,\n headerSearch: true,\n placeholder: 'SearchPlaceholder',\n meAsSaved: false,\n noShadow: false,\n onFirstRender: () => {\n deferred.resolve();\n }\n });\n\n return {selector, loadPromise: deferred};\n}\n\nexport function createSelectorForParticipants(options: ConstructorParameters[0]) {\n return createSelectorForTab({...options, peerType: ['channelParticipants']});\n}\n\nexport default class AppChatMembersTab extends SliderSuperTabEventable {\n private addBtn: HTMLButtonElement;\n private selector: AppSelectPeers;\n\n public async init(chatId: ChatId) {\n const chat = await this.managers.appChatsManager.getChat(chatId) as Chat.channel | Chat.chat;\n const isBroadcast = await this.managers.appChatsManager.isBroadcast(chatId);\n const channelFull = await this.managers.appProfileManager.getChannelFull(chatId).catch(() => undefined as ChatFull.channelFull);\n this.container.classList.add('edit-peer-container', 'chat-members-container');\n this.setTitle(isBroadcast ? 'PeerInfo.Subscribers' : 'GroupMembers');\n\n this.addBtn = ButtonCorner({icon: 'addmember_filled', className: 'is-visible'});\n this.content.append(this.addBtn);\n\n attachClickEvent(this.addBtn, () => {\n addChatUsers({\n peerId: chatId.toPeerId(true),\n slider: this.slider\n });\n }, {listenerSetter: this.listenerSetter});\n\n const participantsCount = (chat as Chat.chat).participants_count/* + (channelFull?.admins_count || 0) */;\n // const participantsCount = Infinity;\n const canHideMembers = !isBroadcast &&\n participantsCount >= ((await this.managers.apiManager.getAppConfig()).hidden_members_group_size_min || 0) &&\n !!chat.admin_rights;\n\n const {selector, loadPromise} = createSelectorForParticipants({\n appendTo: this.content,\n managers: this.managers,\n middleware: this.middlewareHelper.get(),\n peerId: chatId.toPeerId(true),\n channelParticipantsUpdateFilter: (participant) => !!participant\n });\n\n this.selector = selector;\n\n if(canHideMembers) {\n const section = new SettingSection({\n noDelimiter: true,\n caption: 'ChannelHideMembersInfo'\n });\n\n const checked = !!channelFull?.pFlags?.participants_hidden;\n const row = new Row({\n titleLangKey: 'ChannelHideMembers',\n icon: 'hide',\n checkboxField: new CheckboxField({\n name: 'hide-members',\n toggle: true,\n listenerSetter: this.listenerSetter,\n checked\n }),\n listenerSetter: this.listenerSetter\n });\n\n this.eventListener.addEventListener('destroy', () => {\n const _checked = row.checkboxField.checked;\n if(_checked === checked) {\n return;\n }\n\n this.managers.appChatsManager.toggleParticipantsHidden(chatId, _checked);\n }, {once: true});\n\n section.content.append(row.container);\n\n this.selector.scrollable.append(section.container, this.selector.scrollable.container.lastElementChild);\n }\n\n createParticipantContextMenu({\n chatId,\n listenTo: this.selector.scrollable.container,\n participants: this.selector.participants,\n slider: this.slider,\n middleware: this.middlewareHelper.get()\n });\n\n return loadPromise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport createParticipantContextMenu from '../../../helpers/dom/createParticipantContextMenu';\nimport {ChannelParticipant} from '../../../layer';\nimport {i18n} from '../../../lib/langPack';\nimport AppSelectPeers from '../../appSelectPeers';\nimport ButtonCorner from '../../buttonCorner';\nimport PopupElement from '../../popups';\nimport PopupPickUser from '../../popups/pickUser';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport {createSelectorForParticipants} from './chatMembers';\n\nexport default class AppRemovedUsersTab extends SliderSuperTabEventable {\n private addBtn: HTMLButtonElement;\n private selector: AppSelectPeers;\n\n public async init(chatId: ChatId) {\n const isBroadcast = await this.managers.appChatsManager.isBroadcast(chatId);\n this.container.classList.add('edit-peer-container', 'removed-users-container');\n this.setTitle('ChannelBlacklist');\n\n this.addBtn = ButtonCorner({icon: 'addmember_filled', className: 'is-visible'});\n this.content.append(this.addBtn);\n\n attachClickEvent(this.addBtn, () => {\n const popup = PopupElement.createPopup(\n PopupPickUser,\n {\n peerType: ['channelParticipants'],\n peerId: chatId.toPeerId(true),\n onSelect: (peerId) => {\n const participant = popup.selector.participants.get(peerId);\n this.managers.appChatsManager.kickFromChat(chatId, participant);\n },\n placeholder: 'SearchPlaceholder'\n }\n );\n }, {listenerSetter: this.listenerSetter});\n\n const {selector, loadPromise} = createSelectorForParticipants({\n appendTo: this.content,\n managers: this.managers,\n middleware: this.middlewareHelper.get(),\n peerId: chatId.toPeerId(true),\n channelParticipantsFilter: (q) => ({_: 'channelParticipantsKicked', q}),\n channelParticipantsUpdateFilter: (participant) => participant?._ === 'channelParticipantBanned' && participant.pFlags.left,\n getSubtitleForElement: async(peerId) => {\n const participant = this.selector.participants.get(peerId);\n const kickedBy = (participant as ChannelParticipant.channelParticipantBanned).kicked_by.toPeerId(false);\n return i18n('UserRemovedBy', [await wrapPeerTitle({peerId: kickedBy})]);\n }\n // onSelect: (peerId) => {\n // const participant = this.selector.participants.get(peerId);\n // openPermissions(participant);\n // },\n });\n\n this.selector = selector;\n\n const section = new SettingSection({\n noDelimiter: true,\n caption: isBroadcast ? 'NoBlockedChannel2' : 'NoBlockedGroup2'\n // name: 'FilterChatTypes'\n });\n\n section.container.firstElementChild.remove();\n const hr = this.selector.scrollable.container.querySelector('.gradient-delimiter');\n hr?.remove();\n this.selector.scrollable.append(section.container, this.selector.scrollable.container.lastElementChild);\n\n createParticipantContextMenu({\n listenTo: this.selector.scrollable.container,\n slider: this.slider,\n chatId,\n participants: this.selector.participants,\n middleware: this.middlewareHelper.get()\n });\n\n return loadPromise;\n }\n}\n","import liteMode from '../liteMode';\n\nexport default function shake(element: HTMLElement) {\n if(!liteMode.isAvailable('animations')) {\n return;\n }\n\n const keyframes: Keyframe[] = [\n {transform: 'translateX(0)'},\n {transform: 'translateX(.25rem)'},\n {transform: 'translateX(-.25rem)'},\n {transform: 'translateX(0)'}\n ];\n\n element.animate([...keyframes, ...keyframes, ...keyframes], {\n duration: 300,\n iterations: 1,\n easing: 'ease-in-out'\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport shake from '../../../helpers/dom/shake';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport {i18n, i18n_} from '../../../lib/langPack';\nimport lottieLoader from '../../../lib/rlottie/lottieLoader';\nimport rootScope from '../../../lib/rootScope';\nimport Button from '../../button';\nimport confirmationPopup from '../../confirmationPopup';\nimport SettingSection from '../../settingSection';\nimport AppNewGroupTab from '../../sidebarLeft/tabs/newGroup';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport {toastNew} from '../../toast';\nimport getPeerTitle from '../../wrappers/getPeerTitle';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\n\nexport default class AppChatDiscussionTab extends SliderSuperTabEventable {\n public chatId: ChatId;\n public linkedChatId: ChatId;\n\n private caption: HTMLElement;\n private isBroadcast: boolean;\n\n public static getInitArgs() {\n return {\n animationData: lottieLoader.loadAnimationFromURLManually('UtyanDiscussion'),\n chats: rootScope.managers.appChatsManager.getGroupsForDiscussion()\n };\n }\n\n private async setCaption() {\n this.caption.replaceChildren(i18n(\n this.linkedChatId ? (this.isBroadcast ? 'DiscussionChannelGroupSetHelp2' : 'DiscussionGroupHelp') : 'DiscussionChannelHelp3',\n this.linkedChatId ? [await wrapPeerTitle({peerId: this.linkedChatId.toPeerId(true)})] : undefined\n ));\n }\n\n public async init({\n chatId,\n linkedChatId,\n p = AppChatDiscussionTab.getInitArgs()\n }: {\n chatId: ChatId,\n linkedChatId: ChatId,\n p?: ReturnType\n }) {\n this.chatId = chatId;\n this.linkedChatId = linkedChatId;\n\n const [isBroadcast] = await Promise.all([\n this.managers.appChatsManager.isBroadcast(this.chatId)\n ]);\n\n this.isBroadcast = isBroadcast;\n\n this.setTitle(isBroadcast ? 'DiscussionController.Channel.Title' : 'DiscussionController.Group.Title');\n this.container.classList.add('chat-folders-container', 'chat-discussion-container');\n\n const stickerContainer = document.createElement('div');\n stickerContainer.classList.add('sticker-container');\n\n const caption = this.caption = document.createElement('div');\n caption.classList.add('caption');\n\n const section = new SettingSection({\n caption: isBroadcast ? 'DiscussionChannelHelp2' : 'DiscussionGroupHelp2'\n });\n\n const chatlist = appDialogsManager.createChatList();\n chatlist.classList.add('chatlist');\n\n attachClickEvent(chatlist, async(e) => {\n const el = findUpClassName(e.target, 'chatlist-chat');\n if(!el) {\n return;\n }\n\n const peerId = el.dataset.peerId.toPeerId();\n\n if(this.linkedChatId) {\n appImManager.setInnerPeer({peerId});\n return;\n }\n\n if(await this.managers.appPeersManager.isForum(peerId)) {\n toastNew({langPackKey: 'ChannelTopicsDiscussionForbidden'});\n shake(el);\n return;\n }\n\n const d = document.createDocumentFragment();\n d.append(\n i18n('Discussion.Set.Modal.Text.PublicChannelPublicGroup', [\n await wrapPeerTitle({peerId}),\n await wrapPeerTitle({peerId: this.chatId.toPeerId(true)})\n ])\n );\n\n const [isPublicGroup, isPublicChannel, groupChatFull] = await Promise.all([\n this.managers.appChatsManager.isPublic(peerId.toChatId()),\n this.managers.appChatsManager.isPublic(this.chatId),\n this.managers.appProfileManager.getChatFull(peerId.toChatId())\n ]);\n\n const br = document.createElement('br');\n if(!isPublicChannel) {\n d.append(br.cloneNode(), br.cloneNode(), i18n('Discussion.Set.PrivateChannel'));\n }\n\n if(!isPublicGroup) {\n d.append(br.cloneNode(), br.cloneNode(), i18n('Discussion.Set.PrivateGroup'));\n }\n\n if(groupChatFull._ === 'chatFull' || groupChatFull.pFlags.hidden_prehistory) {\n d.append(br.cloneNode(), br.cloneNode(), i18n('DiscussionLinkGroupAlertHistory'));\n }\n\n await confirmationPopup({\n peerId: this.chatId.toPeerId(true),\n description: d,\n button: {\n langKey: 'DiscussionLinkGroup'\n }\n });\n\n this.managers.appChatsManager.setDiscussionGroup(this.chatId, peerId.toChatId());\n }, {listenerSetter: this.listenerSetter});\n\n let createGroupBtn: HTMLElement;\n if(isBroadcast) {\n createGroupBtn = Button('btn-primary btn-transparent primary', {icon: 'newgroup', text: 'DiscussionCreateGroup'});\n attachClickEvent(createGroupBtn, async() => {\n let title = await getPeerTitle({peerId: this.chatId.toPeerId(true), plainText: true});\n title += ' Chat';\n\n const tab = this.slider.createTab(AppNewGroupTab);\n tab.open({\n peerIds: [],\n onCreate: (chatId) => {\n this.slider.removeTabFromHistory(this);\n this.managers.appChatsManager.setDiscussionGroup(this.chatId, chatId);\n },\n openAfter: false,\n title,\n asChannel: true\n });\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(createGroupBtn);\n }\n\n section.content.append(chatlist);\n\n const unlinkSection = new SettingSection({});\n const btnUnlink = Button('btn-primary btn-transparent danger', {icon: 'delete', text: isBroadcast ? 'DiscussionUnlinkGroup' : 'DiscussionUnlinkChannel'});\n unlinkSection.content.append(btnUnlink);\n\n attachClickEvent(btnUnlink, async() => {\n const linkedChatId = this.linkedChatId;\n await confirmationPopup({\n descriptionLangKey: isBroadcast ? 'DiscussionUnlinkChannelAlert' : 'DiscussionUnlinkGroupAlert',\n descriptionLangArgs: [await wrapPeerTitle({peerId: linkedChatId.toPeerId(true)})],\n button: {\n langKey: 'DiscussionUnlink'\n }\n });\n\n const toggle = toggleDisability([btnUnlink], true);\n try {\n await this.managers.appChatsManager.setDiscussionGroup(isBroadcast ? this.chatId : linkedChatId, undefined);\n } catch(err) {\n\n }\n\n if(!isBroadcast) {\n this.close();\n return;\n }\n\n toggle();\n }, {listenerSetter: this.listenerSetter});\n\n this.scrollable.append(\n stickerContainer,\n caption,\n section.container,\n unlinkSection.container\n );\n\n const loadPromises: Promise[] = [];\n\n const loadAnimationPromise = p.animationData.then(async(cb) => {\n const player = await cb({\n container: stickerContainer,\n loop: true,\n autoplay: true,\n width: 120,\n height: 120\n });\n\n return lottieLoader.waitForFirstFrame(player);\n });\n\n const loadChatsPromise = (\n isBroadcast ?\n p.chats :\n Promise.resolve([await this.managers.appChatsManager.getChat(this.linkedChatId)])\n ).then((chats) => {\n const promises = chats.map((chat) => {\n const loadPromises: Promise[] = [];\n const {dom} = appDialogsManager.addDialogNew({\n peerId: chat.id.toPeerId(true),\n container: chatlist,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n loadPromises,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n const username = getPeerActiveUsernames(chat)[0];\n\n if(username) {\n dom.lastMessageSpan.textContent = '@' + username;\n } else {\n dom.lastMessageSpan.append(i18n(isBroadcast ? 'DiscussionController.PrivateGroup' : 'DiscussionController.PrivateChannel'));\n }\n\n return Promise.all(loadPromises);\n });\n\n return Promise.all(promises);\n });\n\n const update = async() => {\n await this.setCaption();\n\n if(!isBroadcast) {\n return;\n }\n\n (Array.from(chatlist.children) as HTMLElement[]).forEach((el) => {\n const chatId = el.dataset.peerId.toChatId();\n el.classList.toggle('hide', this.linkedChatId ? this.linkedChatId !== chatId : false);\n });\n unlinkSection.container.classList.toggle('hide', !this.linkedChatId);\n createGroupBtn.classList.toggle('hide', !!this.linkedChatId);\n };\n\n this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\n const el = chatlist.querySelector(`[data-peer-id=\"${migrateFrom}\"]`) as HTMLElement;\n if(el) {\n el.dataset.peerId = '' + migrateTo;\n }\n });\n\n this.listenerSetter.add(rootScope)('chat_full_update', async(chatId) => {\n if(this.chatId !== chatId) {\n return;\n }\n\n const channelFull = await this.managers.appProfileManager.getChannelFull(chatId);\n this.linkedChatId = channelFull.linked_chat_id;\n update();\n });\n\n loadPromises.push(loadAnimationPromise, loadChatsPromise);\n\n return Promise.all(loadPromises).then(() => {\n return update();\n });\n }\n}\n","export default function maybe2x(str: string) {\n return str + (window.devicePixelRatio > 1 ? '@2x' : '');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {JSX, ParentComponent, Ref, splitProps} from 'solid-js';\nimport {LangPackKey, FormatterArguments, i18n} from '../lib/langPack';\nimport {generateDelimiter} from './generateDelimiter';\nimport classNames from '../helpers/string/classNames';\n\nexport type SectionOptions = {\n name?: LangPackKey | HTMLElement | DocumentFragment,\n nameArgs?: FormatterArguments,\n nameRight?: JSX.Element,\n caption?: LangPackKey,\n captionArgs?: FormatterArguments,\n captionOld?: boolean,\n noDelimiter?: boolean,\n fakeGradientDelimiter?: boolean,\n noShadow?: boolean,\n class?: JSX.HTMLAttributes['class']\n};\n\nconst className = 'sidebar-left-section';\nconst SectionContent: ParentComponent> = (props) => {\n return (\n
\n {props.children}\n
\n );\n};\nconst SectionCaption = (props: Pick) => {\n return (\n \n {i18n(props.caption, props.captionArgs)}\n \n );\n};\nconst Section: ParentComponent} & JSX.HTMLAttributes> = (props) => {\n const [, rest] = splitProps(props, ['name', 'nameArgs', 'nameRight', 'caption', 'captionArgs', 'captionOld', 'noDelimiter', 'fakeGradientDelimiter', 'noShadow', 'class']);\n return (\n \n \n {props.fakeGradientDelimiter ? generateDelimiter() : (!props.noDelimiter &&
)}\n \n {props.name && (\n
\n {typeof(props.name) === 'string' ? i18n(props.name, props.nameArgs) : props.name}\n {props.nameRight &&
{props.nameRight}
}\n
\n )}\n {props.children}\n
\n {props.caption && props.captionOld && }\n \n {props.caption && !props.captionOld && }\n \n );\n}\n\nexport default Section;\n","export default function accumulate(arr: number[], initialValue: number) {\n return arr.reduce((acc, value) => acc + value, initialValue);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// import { MOUNT_CLASS_TO } from \"../../config/debug\";\n\nlet context: CanvasRenderingContext2D;\n/**\n * Get the text width\n * @param {string} text\n * @param {string} font\n */\nexport default function getTextWidth(text: string, font: string) {\n // const perf = performance.now();\n if(!context) {\n const canvas = document.createElement('canvas');\n context = canvas.getContext('2d', {alpha: false});\n }\n\n if(context.font !== font) {\n context.font = font;\n }\n\n // context.font = font;\n const metrics = context.measureText(text);\n // console.log('getTextWidth perf:', performance.now() - perf);\n return metrics.width;\n // return Math.round(metrics.width);\n}\n\n// MOUNT_CLASS_TO && (MOUNT_CLASS_TO.getTextWidth = getTextWidth);\n","function cacheCallback(callback: (str: A) => T) {\n const stringResults: any = {}, numberResults: any = {};\n return (value: A): T => {\n const key = '_' + value;\n return (typeof(value) === 'string' ? stringResults : numberResults)[key] ??= callback(value);\n };\n}\n\nexport default cacheCallback;\n","export default function replaceNonNumber(str: string) {\n return str.replace(/\\D/g, '');\n}\n","import cacheCallback from '../cacheCallback';\nimport replaceNonNumber from '../string/replaceNonNumber';\n\nconst CARD_BRAND_REGEXP: {[brand: string]: RegExp} = {\n visa: /^4/,\n mastercard: /^(51|52|53|54|55|222|23|24|25|26|27)/,\n amex: /^(34|37)/,\n discover: /^(60|64|65)/,\n diners: /^(30|38|39)/,\n diners14: /^(36)/,\n jcb: /^(35)/,\n unionpay: /^(62[0-6,8-9]|627[0-6,8-9]|6277[0-7,9]|62778[1-9]|81)/,\n elo: /^(5067|509|636368|627780)/,\n // mir: /^(220[0-4])/\n mir: /^(2\\d+)/\n};\n\n// * taken from Stripe\nexport const CARD_BRANDS: {[b: string]: {\n minLength: number,\n maxLength: number,\n cvcMaxLength: number,\n cvcMinLength: number | null\n}} = {\n visa: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n mastercard: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n amex: {\n minLength: 15,\n maxLength: 15,\n cvcMaxLength: 4,\n cvcMinLength: 3\n },\n unionpay: {\n minLength: 13,\n maxLength: 19,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n diners: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n diners14: {\n minLength: 14,\n maxLength: 14,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n discover: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n jcb: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n elo: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n mir: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 3,\n cvcMinLength: null\n },\n unknown: {\n minLength: 16,\n maxLength: 16,\n cvcMaxLength: 4,\n cvcMinLength: 3\n }\n};\n\nexport const detectCardBrand = cacheCallback((card: string = '') => {\n const keys = Object.keys(CARD_BRAND_REGEXP);\n const sanitizedCard = replaceNonNumber(card);\n let brand: string;\n let last = 0;\n keys.forEach((key) => {\n const regExp = CARD_BRAND_REGEXP[key];\n const match = sanitizedCard.match(regExp);\n if(match) {\n const result = match[0];\n if(result && result.length > last) {\n brand = key;\n last = result.length;\n }\n }\n });\n\n return brand || 'unknown';\n});\n\nexport function cardBrandToUnifiedBrand(brand: string) {\n return brand === 'diners14' ? 'diners' : brand;\n}\n\nexport function detectUnifiedCardBrand(card = '') {\n const brand = detectCardBrand(card);\n return cardBrandToUnifiedBrand(brand);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Scrollable from '../components/scrollable';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport {IS_SAFARI} from '../environment/userAgent';\nimport getVisibleRect from './dom/getVisibleRect';\nimport {fastRaf} from './schedulers';\n\n// let USE_REFLOW = false;\n// if(IS_SAFARI) {\n// try {\n// // throw '';\n// const match = navigator.userAgent.match(/Version\\/(.+?) /);\n// USE_REFLOW = +match[1] < 15.4;\n// } catch(err) {\n// USE_REFLOW = true;\n// }\n// }\n\nexport default class ScrollSaver {\n private scrollHeight: number;\n private scrollHeightMinusTop: number;\n private scrollTop: number;\n private clientHeight: number;\n private elements: {element: HTMLElement, rect: DOMRect}[];\n\n /**\n *\n * @param scrollable to reset scroll position and direction\n * @param reverse true means top\n */\n constructor(\n private scrollable: Scrollable,\n private query: string,\n private reverse: boolean\n ) {\n\n }\n\n private get container() {\n return this.scrollable.container;\n }\n\n public getSaved() {\n return {\n scrollHeight: this.scrollHeight,\n scrollTop: this.scrollTop,\n clientHeight: this.clientHeight\n };\n }\n\n public findElements() {\n if(!this.query) return [];\n\n const {container} = this;\n const containerRect = container.getBoundingClientRect();\n const bubbles = Array.from(container.querySelectorAll(this.query)) as HTMLElement[];\n const elements: ScrollSaver['elements'] = [];\n for(const bubble of bubbles) {\n const elementRect = bubble.getBoundingClientRect();\n const visibleRect = getVisibleRect(bubble, container, undefined, elementRect, containerRect);\n if(visibleRect) {\n elements.push({element: bubble, rect: elementRect});\n // break; // find first\n } else if(elements.length) { // find last\n break;\n }\n }\n\n if(!elements.length) {\n const bubble = bubbles[0];\n if(bubble) {\n elements.push({element: bubble, rect: bubble.getBoundingClientRect()});\n }\n }\n\n return elements;\n }\n\n public replaceSaved(from: HTMLElement, to: HTMLElement) {\n if(!this.elements) {\n return;\n }\n\n const idx = this.elements.findIndex(({element}) => from === element);\n if(idx !== -1) {\n this.elements[idx].element = to;\n }\n }\n\n public findAndSetElements() {\n this.elements = this.findElements();\n }\n\n public save() {\n this.findAndSetElements();\n // console.warn('scroll save', this.elements);\n this._save();\n }\n\n public _save() {\n const {scrollTop, scrollHeight, clientHeight} = this.container;\n\n // previousScrollHeight = scrollHeight;\n // previousScrollHeight = scrollHeight + padding;\n this.scrollHeight = scrollHeight;\n this.scrollTop = scrollTop;\n this.clientHeight = clientHeight;\n this.scrollHeightMinusTop = this.reverse ? scrollHeight - scrollTop : scrollTop;\n\n // this.chatInner.style.paddingTop = padding + 'px';\n /* if(reverse) {\n previousScrollHeightMinusTop = this.scrollable.scrollHeight - scrollTop;\n } else {\n previousScrollHeightMinusTop = scrollTop;\n } */\n }\n\n private onRestore(useReflow?: boolean) {\n // if(USE_REFLOW && useReflow/* && !isAppleMobile */) { // * fix blinking and jumping\n // reflowScrollableElement(this.container);\n // }\n\n this.scrollable.onSizeChange();\n }\n\n private setScrollTop(newScrollTop: number, useReflow?: boolean) {\n // touchSupport for safari iOS\n // isTouchSupported && isApple && (container.container.style.overflow = 'hidden');\n this.scrollable.setScrollPositionSilently(this.scrollTop = newScrollTop);\n // container.scrollTop = scrollHeight;\n // isTouchSupported && isApple && (container.container.style.overflow = '');\n\n if(IS_SAFARI) {\n fastRaf(() => {\n if(this.scrollTop === newScrollTop) {\n this.scrollable.setScrollPositionSilently(this.scrollTop = newScrollTop);\n }\n });\n }\n\n this.onRestore(useReflow);\n }\n\n public restore(useReflow?: boolean) {\n const {scrollPosition: scrollTop, scrollSize: scrollHeight} = this.scrollable;\n this.scrollHeight = scrollHeight;\n\n if(!this.elements.length) { // maybe all messages have been deleted or adding first message\n // this._restore(useReflow);\n this.setScrollTop(this.reverse ? scrollHeight : 0, useReflow); // fix scrolling to first new message\n return;\n }\n\n let anchor: ScrollSaver['elements'][0];\n // for(let i = this.elements.length - 1; i >= 0; --i) {\n // const _anchor = this.elements[i];\n // if(_anchor.element.parentElement) {\n // anchor = _anchor;\n // break;\n // }\n // }\n anchor = this.elements[this.elements.length - 1];\n\n if(!anchor?.element?.parentElement) { // try to find new anchor\n this.findAndSetElements();\n anchor = this.elements[this.elements.length - 1];\n\n if(!anchor) { // fallback to old method if smth is really strange\n this._restore(useReflow);\n return;\n }\n }\n\n const {element, rect} = anchor;\n const newRect = element.getBoundingClientRect();\n const diff = newRect.bottom - rect.bottom;\n this.setScrollTop(scrollTop + diff, useReflow);\n // if(diff) debugger;\n // console.warn('scroll restore', rect, diff, newRect);\n }\n\n public _restore(useReflow?: boolean) {\n const {scrollHeightMinusTop: previousScrollHeightMinusTop, scrollable} = this;\n // if(previousScrollHeightMinusTop === undefined) {\n // throw new Error('scroll was not saved');\n // }\n\n // const scrollHeight = container.scrollHeight;\n const scrollHeight = this.scrollHeight;\n // if(scrollHeight === this.scrollHeight) {\n // return;\n // }\n\n // this.scrollHeight = scrollHeight;\n\n /* const scrollHeight = container.scrollHeight;\n const addedHeight = scrollHeight - previousScrollHeight;\n\n this.chatInner.style.paddingTop = (10000 - addedHeight) + 'px'; */\n /* const scrollHeight = scrollHeight;\n const addedHeight = scrollHeight - previousScrollHeight;\n\n this.chatInner.style.paddingTop = (padding - addedHeight) + 'px';\n\n //const newScrollTop = reverse ? scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\n const newScrollTop = reverse ? scrollHeight - addedHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\n this.log('performHistoryResult: will set scrollTop',\n previousScrollHeightMinusTop, scrollHeight,\n newScrollTop, container.container.clientHeight); */\n // const newScrollTop = reverse ? scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\n const newScrollTop = this.reverse ? scrollHeight - previousScrollHeightMinusTop : previousScrollHeightMinusTop;\n\n /* if(DEBUG) {\n this.log('performHistoryResult: will set up scrollTop:', newScrollTop, this.isHeavyAnimationInProgress);\n } */\n\n this.setScrollTop(newScrollTop, useReflow);\n\n /* if(DEBUG) {\n this.log('performHistoryResult: have set up scrollTop:', newScrollTop, container.scrollTop, container.scrollHeight, this.isHeavyAnimationInProgress);\n } */\n }\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.ScrollSaver = ScrollSaver);\n","export default function createArray(length: number, fill?: T1, map?: any): T1[] {\n const arr = new Array(length);\n arr.fill(fill);\n return map ? arr.map(map) : arr;\n}\n","const delta = '0'.charCodeAt(0) - '0'.charCodeAt(0);\nconst buggedRegExp = /[0-9]/g;\n\n// function hasBuggedNumbers(str: string) {\n// return !!str.match(a);\n// }\n\nfunction getDistanceFromBuggedToNormal(char: string) {\n return String.fromCharCode(char.charCodeAt(0) - delta);\n}\n\nexport function fixBuggedNumbers(str: string) {\n return str.replace(buggedRegExp, getDistanceFromBuggedToNormal);\n}\n","import {fixBuggedNumbers} from '../string/buggedNumbers';\nimport replaceNonNumber from '../string/replaceNonNumber';\n\nexport type PatternCharacter = {\n type: 'optional',\n result: string,\n consumed: number\n} | {\n type: 'required',\n result: string,\n consumed: number,\n partial?: boolean\n} | {\n type: 'formatting',\n result: string,\n consumed: number\n};\n\nexport type PatternFunction = (str: string) => ((str: string) => PatternCharacter)[];\n\nfunction makeOptionalCharacter(result: string, consumed: number): PatternCharacter {\n return {type: 'optional', result, consumed};\n}\n\nfunction makeRequiredCharacter(result: string, consumed: number, partial?: boolean): PatternCharacter {\n return {type: 'required', result, consumed, partial};\n}\n\nfunction makeFormattingCharacter(result: string, consumed: number): PatternCharacter {\n return {type: 'formatting', result, consumed};\n}\n\nfunction wrapCharacterRegExpFactory(regExp: RegExp, optional?: boolean) {\n return (str: string) => {\n const _regExp = new RegExp('^'.concat(regExp.source.replace(/^\\^/, '')));\n const match = str.match(_regExp);\n const makeCharacter = optional ? makeOptionalCharacter : makeRequiredCharacter;\n if(match) {\n const result = match[0];\n return makeCharacter(result, match.index + result.length);\n }\n\n return makeCharacter('', str.length);\n };\n}\n\nfunction makeCapitalPatternCharacter(str: string) {\n const char = wrapCharacterRegExpFactory(/\\w/)(str);\n return char.result ? makeRequiredCharacter(char.result.toUpperCase(), char.consumed) : char;\n}\n\nconst makeMonthDigitPatternCharacter = wrapCharacterRegExpFactory(/1[0-2]|0?[1-9]|0/);\n\nfunction digit(str: string) {\n return wrapCharacterRegExpFactory(/[0-9]/)(fixBuggedNumbers(str));\n}\n\nconst patternCharacters = {\n digit,\n capitalCharacter: makeCapitalPatternCharacter,\n month: (str: string) => {\n const char = makeMonthDigitPatternCharacter(fixBuggedNumbers(str));\n const cleanedResult = replaceNonNumber(char.result);\n const isPartial = ['0', '1'].includes(char.result) && str.length === 1;\n if(isPartial || (char.result === '0' && str.length >= 2)) {\n return makeRequiredCharacter(char.result, str.length, true);\n }\n\n return makeRequiredCharacter(cleanedResult.length === 1 ? '0' + cleanedResult : cleanedResult, char.consumed);\n },\n formattingCharacter: (str: string) => {\n return (str1: string) => {\n const consumed = str === str1[0] ? 1 : 0;\n return makeFormattingCharacter(str, consumed);\n }\n },\n optionalPattern: (regExp: RegExp) => {\n return (str: string) => {\n const char = wrapCharacterRegExpFactory(regExp, true)(str);\n return char.result ? char : makeOptionalCharacter('', 0);\n };\n }\n};\n\nexport default patternCharacters;\n","import {IS_ANDROID} from '../../environment/userAgent';\nimport createArray from '../array/createArray';\nimport cacheCallback from '../cacheCallback';\nimport replaceNonNumber from '../string/replaceNonNumber';\nimport {CARD_BRANDS, detectCardBrand} from './cardBrands';\nimport patternCharacters from './patternCharacters';\n\nconst digit = patternCharacters.digit;\nconst capitalCharacter = patternCharacters.capitalCharacter;\nconst spaceCharacter = patternCharacters.formattingCharacter(' ');\nconst yearOptionalPattern = patternCharacters.optionalPattern(/\\d\\d/);\nconst sixteenPattern = [digit, digit, digit, digit, spaceCharacter, digit, digit, digit, digit, digit, digit, spaceCharacter, digit, digit, digit, digit, digit];\nconst fifteenPattern = [digit, digit, digit, digit, spaceCharacter, digit, digit, digit, digit, digit, digit, spaceCharacter, digit, digit, digit, digit];\n\nconst requiredPostcodes = new Set(['DZ', 'AR', 'AM', 'AU', 'AT', 'AZ', 'PT', 'BD', 'BY', 'BE', 'BA', 'BR', 'BN', 'BG', 'CA', 'IC', 'CN', 'CO', 'HR', 'CY', 'CZ', 'DK', 'EC', 'GB', 'EE', 'FO', 'FI', 'FR', 'GE', 'DE', 'GR', 'GL', 'GU', 'GG', 'NL', 'HU', 'IN', 'ID', 'IL', 'IT', 'JP', 'JE', 'KZ', 'KR', 'FM', 'KG', 'LV', 'LI', 'LT', 'LU', 'MK', 'MG', 'PT', 'MY', 'MH', 'MQ', 'YT', 'MX', 'MN', 'ME', 'NL', 'NZ', 'GB', 'NO', 'PK', 'PH', 'PL', 'FM', 'PT', 'PR', 'RE', 'RU', 'SA', 'SF', 'RS', 'SG', 'SK', 'SI', 'ZA', 'ES', 'LK', 'SX', 'VI', 'VI', 'SE', 'CH', 'TW', 'TJ', 'TH', 'TU', 'TN', 'TR', 'TM', 'VI', 'UA', 'GB', 'US', 'UY', 'UZ', 'VA', 'VN', 'GB', 'FM']);\n\nconst generateFourPattern = cacheCallback((length: number) => {\n const out: Array = [];\n\n for(let i = 0, k = 0; i < length;) {\n if(k === 4) {\n out.push(spaceCharacter);\n k = 0;\n } else {\n out.push(digit);\n ++i;\n ++k;\n }\n }\n\n return out;\n});\n\nfunction generateCardNumberPattern(card: string) {\n const brand = detectCardBrand(card);\n if(brand === 'amex') return sixteenPattern;\n if(brand === 'diners14') return fifteenPattern;\n const {minLength, maxLength} = CARD_BRANDS[brand];\n const s = replaceNonNumber(card).length;\n const d = Math.min(Math.max(minLength, s), maxLength);\n return generateFourPattern(d);\n}\n\nconst cardFormattingPatterns = {\n cardNumber: generateCardNumberPattern,\n cardExpiry: () => [patternCharacters.month, patternCharacters.formattingCharacter('/'), digit, digit, yearOptionalPattern],\n cardCvc: (card?: string) => cardFormattingPatterns.cardCvcFromBrand(detectCardBrand(card)),\n cardCvcFromBrand: cacheCallback((brand: string) => {\n const info = CARD_BRANDS[brand];\n const {cvcMinLength, cvcMaxLength} = info;\n const pattern = createArray(cvcMinLength || cvcMaxLength, digit);\n if(cvcMinLength && cvcMinLength < cvcMaxLength) {\n const i = cvcMaxLength - cvcMinLength;\n const h = patternCharacters.optionalPattern(/\\d/);\n if(i) {\n pattern.push(...createArray(i, h));\n }\n }\n\n return pattern;\n }),\n postalCodeFromCountry: cacheCallback((iso2: string) => {\n switch(iso2) {\n case 'US':\n return createArray(5, digit);\n case 'CA':\n return IS_ANDROID ? null : [capitalCharacter, capitalCharacter, capitalCharacter, spaceCharacter, capitalCharacter, capitalCharacter, capitalCharacter];\n default:\n const optionalDigits = createArray(10, patternCharacters.optionalPattern(/\\d/));\n if(requiredPostcodes.has(iso2)) {\n optionalDigits[0] = digit;\n }\n return optionalDigits;\n }\n })\n};\n\nexport default cardFormattingPatterns;\n","import accumulate from '../array/accumulate';\nimport {PatternFunction} from './patternCharacters';\n\nfunction accumulateLengths(strs: string[]) {\n return accumulate(strs.map((str) => str.length), 0);\n}\n\nfunction formatValueByPattern(\n getPattern: PatternFunction,\n value: string,\n options: Partial<{\n selectionStart: number,\n selectionEnd: number\n }> = {},\n pushRest?: boolean\n) {\n const pattern = getPattern(value);\n\n if(!pattern) {\n return {\n value: value,\n selection: null as typeof options,\n autocorrectComplete: !!value\n };\n }\n\n const length = pattern.length;\n const c: string[] = [];\n const s: string[] = [];\n\n let l = 0;\n let i = 0;\n let f = options.selectionStart === 0 ? 0 : null;\n let d = options.selectionEnd === 0 ? 0 : null;\n const p = () => {\n if(f === null && (i + 1) >= options.selectionStart) f = accumulateLengths(c) + (pushRest ? s.length : 0);\n if(d === null && (i + 1) >= options.selectionEnd) d = accumulateLengths(c) + (pushRest ? s.length : 0);\n };\n const m = (e: number) => {\n if(e > 0) {\n p();\n i += e;\n }\n };\n\n for(; l < length;) {\n const getCharacter = pattern[l];\n const character = getCharacter(value.slice(i));\n const {type, result, consumed} = character;\n if(type === 'required') {\n if(result) {\n c.push(...s, result);\n s.length = 0;\n ++l;\n\n if(character.partial) {\n m(value.length - i);\n break;\n }\n\n m(consumed);\n } else {\n if(!consumed) {\n break;\n }\n\n m(1);\n }\n } else if(type === 'optional') {\n if(result) {\n c.push(...s, result);\n s.length = 0;\n m(consumed);\n }\n\n ++l;\n } else if(type === 'formatting') {\n if(!pushRest && i >= value.length) {\n break;\n }\n\n s.push(result);\n ++l;\n m(consumed);\n }\n }\n\n if(pushRest) {\n c.push(...s);\n }\n\n return {\n value: c.join(''),\n selection: {\n selectionStart: f === null || value.length && options.selectionStart === value.length ? accumulateLengths(c) : f,\n selectionEnd: d === null || value.length && options.selectionEnd === value.length ? accumulateLengths(c) : d\n },\n autocorrectComplete: l === length\n };\n}\n\nexport default formatValueByPattern;\n","import formatValueByPattern from './formatValueByPattern';\n\nexport default function formatInputValueByPattern(options: {\n value: string,\n getPattern: Parameters[0],\n deleting?: boolean,\n input?: HTMLElement\n}) {\n const {value: originalValue, getPattern, deleting, input} = options;\n const pushRest = !deleting && !!originalValue.length;\n const result = formatValueByPattern(getPattern, originalValue, {\n selectionStart: input ? (input as HTMLInputElement).selectionStart : 0,\n selectionEnd: input ? (input as HTMLInputElement).selectionEnd : 0\n }, pushRest)\n const {value, selection} = result;\n\n return {\n value,\n meta: {\n autocorrectComplete: result.autocorrectComplete,\n empty: !value\n },\n selection\n };\n}\n","const NBSP = '‎';\nexport default NBSP;\n","import {CARD_BRANDS, detectCardBrand} from './cardBrands';\nimport formatInputValueByPattern from './formatInputValueByPattern';\nimport NBSP from '../string/nbsp';\nimport replaceNonNumber from '../string/replaceNonNumber';\n\nexport type PatternValidationOptions = Partial<{\n ignoreIncomplete: boolean\n}>;\n\nconst nbspRegExp = new RegExp(NBSP, 'g');\n\nfunction makeValidationError(code?: string) {\n return code ? {\n type: 'invalid',\n code\n } : null;\n}\n\n// Luhn algorithm\nfunction validateCompleteCardNumber(card: string) {\n const t = '0'.charCodeAt(0);\n const n = card.length % 2;\n let a = 0;\n for(let i = card.length - 1; i >= 0; --i) {\n const c = n === (i % 2);\n let o = card.charCodeAt(i) - t;\n if(c) o *= 2;\n if(o > 9) o -= 9;\n a += o;\n }\n return !(a % 10);\n}\n\nfunction validateExpiry(year: number, month: number, options?: PatternValidationOptions & {date?: Date}) {\n const date = options.date || new Date();\n const _year = year < 100 ? date.getFullYear() % 100 : date.getFullYear();\n const nextMonth = date.getMonth() + 1;\n\n if(isNaN(year) || isNaN(month)) {\n return options?.ignoreIncomplete ? null : 'incomplete';\n }\n\n if((year - _year) < 0) {\n return 'invalid_expiry_year_past';\n }\n\n if((year - _year) > 50) {\n return 'invalid_expiry_year';\n }\n\n return !(year - _year) && month < nextMonth ? 'invalid_expiry_month_past' : null;\n}\n\nfunction getCardInfoByNumber(card: string) {\n const sanitized = replaceNonNumber(card);\n const brand = detectCardBrand(card);\n return {\n sanitized,\n brand,\n minLength: CARD_BRANDS[brand].minLength\n };\n}\n\nfunction makeCardNumberError(str: string, length: number, ignoreIncomplete: boolean) {\n if(str.length >= length) {\n return validateCompleteCardNumber(str) || detectCardBrand(str) === 'mir' ? null : makeValidationError('invalid');\n }\n\n return ignoreIncomplete ? null : makeValidationError('incomplete');\n}\n\nexport function validateCardNumber(str: string, options: PatternValidationOptions = {}) {\n const {sanitized, minLength} = getCardInfoByNumber(str);\n return makeCardNumberError(sanitized, minLength, options.ignoreIncomplete);\n}\n\nexport function validateCardExpiry(str: string, options: Parameters[2] = {}) {\n const sanitized = str.replace(nbspRegExp, '').split(/ ?\\/ ?/);\n const [monthStr, yearStr = ''] = sanitized;\n const [month, year] = [monthStr, yearStr].map((str) => +str);\n const s = yearStr.length === 2 ? year % 100 : year;\n return yearStr.length < 2 || yearStr.length === 3 ? (options.ignoreIncomplete ? null : makeValidationError('incomplete')) : makeValidationError(validateExpiry(s, month, options));\n}\n\nexport function validateAnyIncomplete(formatted: ReturnType, str: string, options: PatternValidationOptions = {}) {\n return formatted.meta.autocorrectComplete || options.ignoreIncomplete ? null : makeValidationError('incomplete');\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {TelegramWebViewEvent, TelegramWebViewEventCallback, TelegramWebViewEventMap, TelegramWebViewSendEventMap} from '../types';\n\nconst weakMap: WeakMap = new WeakMap();\nwindow.addEventListener('message', (e) => {\n const callback = weakMap.get(e.source as Window);\n if(!callback) {\n return;\n }\n\n callback(JSON.parse(e.data));\n});\n\nexport default class TelegramWebView extends EventListenerBase<{\n [type in keyof TelegramWebViewEventMap]: (data: TelegramWebViewEventMap[type]) => void\n}> {\n public iframe: HTMLIFrameElement;\n public lastDispatchedWebViewEvent: {type: keyof TelegramWebViewSendEventMap, count: number};\n\n private onLoad: () => void;\n\n constructor({url, sandbox, allow, onLoad}: {\n url: string,\n sandbox?: string,\n allow?: string,\n onLoad?: () => void\n }) {\n super(false);\n\n const iframe = this.iframe = document.createElement('iframe');\n iframe.src = url;\n if(sandbox) iframe.setAttribute('sandbox', sandbox);\n if(allow) iframe.allow = allow;\n\n if(onLoad) {\n this.onLoad = onLoad;\n iframe.addEventListener('load', onLoad, {once: true});\n }\n }\n\n public onMount() {\n weakMap.set(this.iframe.contentWindow, this.onTelegramWebViewEvent);\n }\n\n public destroy() {\n this.cleanup();\n weakMap.delete(this.iframe.contentWindow);\n this.iframe.removeEventListener('load', this.onLoad);\n }\n\n private onTelegramWebViewEvent = ({eventType, eventData}: TelegramWebViewEvent) => {\n if((eventData as any) === '') {\n eventData = undefined;\n }\n\n // console.log('onTelegramWebViewEvent', eventType, eventData);\n this.dispatchEvent(eventType, eventData as any);\n };\n\n public dispatchWebViewEvent(\n eventType: T,\n eventData: TelegramWebViewSendEventMap[T]\n ) {\n if(this.lastDispatchedWebViewEvent?.type !== eventType) {\n this.lastDispatchedWebViewEvent = {type: eventType, count: 0};\n }\n\n ++this.lastDispatchedWebViewEvent.count;\n this.iframe.contentWindow.postMessage(JSON.stringify({\n eventType,\n eventData\n }), '*');\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport TelegramWebView from '../telegramWebView';\n\nexport function createVerificationIframe(options: ConstructorParameters[0]) {\n const result = new TelegramWebView({\n ...options,\n sandbox: 'allow-forms allow-scripts allow-same-origin allow-modals'\n });\n const {iframe} = result;\n iframe.allow = 'payment';\n iframe.classList.add('payment-verification');\n return result;\n}\n\nexport default class PopupPaymentVerification extends PopupElement<{\n finish: () => void\n}> {\n private telegramWebView: TelegramWebView;\n\n constructor(private url: string, private openPathAfter?: boolean) {\n super('popup-payment popup-payment-verification', {\n closable: true,\n overlayClosable: true,\n body: true,\n title: 'Checkout.WebConfirmation.Title'\n });\n\n this.d();\n }\n\n private d() {\n const telegramWebView = this.telegramWebView = createVerificationIframe({\n url: this.url\n });\n\n telegramWebView.addEventListener('web_app_open_tg_link', (e) => {\n this.dispatchEvent('finish');\n this.hide();\n if(this.openPathAfter) {\n appImManager.openUrl('https://t.me' + e.path_full);\n }\n });\n\n this.body.append(telegramWebView.iframe);\n this.show();\n telegramWebView.onMount();\n }\n\n protected destroy() {\n this.telegramWebView.destroy();\n return super.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport cardFormattingPatterns from '../../helpers/cards/cardFormattingPatterns';\nimport {detectUnifiedCardBrand} from '../../helpers/cards/cardBrands';\nimport formatInputValueByPattern from '../../helpers/cards/formatInputValueByPattern';\nimport {validateAnyIncomplete, validateCardExpiry, validateCardNumber} from '../../helpers/cards/validateCard';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';\nimport noop from '../../helpers/noop';\nimport {PaymentsPaymentForm, User} from '../../layer';\nimport {LangPackKey, _i18n} from '../../lib/langPack';\nimport CheckboxField from '../checkboxField';\nimport confirmationPopup from '../confirmationPopup';\nimport CountryInputField from '../countryInputField';\nimport InputField, {InputFieldOptions, InputState} from '../inputField';\nimport Row from '../row';\nimport {getPaymentBrandIconPath, PaymentButton, PaymentsCredentialsToken} from './payment';\nimport {createVerificationIframe} from './paymentVerification';\nimport {PasswordInputHelpers} from '../passwordInputField';\nimport SettingSection from '../settingSection';\nimport TelegramWebView from '../telegramWebView';\nimport {formatPhoneNumber} from '../../helpers/formatPhoneNumber';\n\nexport type PaymentCardDetails = {\n cardNumber: string;\n cardholderName: string;\n expiryFull: string;\n expiryMonth: string;\n expiryYear: string;\n cvc: string;\n country: string;\n zip: string;\n save?: boolean;\n};\n\nexport type PaymentCardDetailsShort = {\n title: string,\n save?: boolean;\n icon?: string;\n};\n\nexport type PaymentCardDetailsResult = PaymentCardDetails | PaymentCardDetailsShort;\n\nexport class InputFieldCorrected extends InputField {\n private lastKeyDown: string;\n private lastTransformed: ReturnType;\n\n constructor(public options: InputFieldOptions & {\n formatMethod: typeof cardFormattingPatterns['cardNumber'],\n validateMethod?: typeof validateCardNumber,\n errorKeys?: {[code: string]: LangPackKey},\n optional?: boolean,\n onChange?: (transformed: InputFieldCorrected['lastTransformed']) => void,\n onKeyDown?: (e: KeyboardEvent) => void\n }) {\n super(options);\n\n // const handleIncomplete = (t?: any) => {\n // if(\n // (!lastTransformed.value && t) ||\n // lastTransformed.meta.autocorrectComplete ||\n // lastTransformed.meta.error ||\n // optional\n // ) {\n // return;\n // }\n\n\n // };\n\n this.input.addEventListener('keydown', this.onKeyDown);\n this.input.addEventListener('input', this.onInput);\n this.input.addEventListener('blur', this.onBlur);\n }\n\n private onKeyDown = (e: KeyboardEvent) => {\n this.lastKeyDown = e.key;\n this.options.onKeyDown?.(e);\n };\n\n private onInput = () => {\n const value = this.value;\n const deleting = this.lastKeyDown === 'Backspace' && (((this.lastTransformed && this.lastTransformed.value.length) || 0) - value.length) === 1;\n const result = this.lastTransformed = formatInputValueByPattern({\n value: value,\n getPattern: this.options.formatMethod,\n deleting,\n input: this.input\n });\n\n const transformedValue = result.value;\n if(transformedValue !== value) {\n this.setValueSilently(transformedValue);\n\n if(result.selection) {\n (this.input as HTMLInputElement).selectionStart = result.selection.selectionStart;\n (this.input as HTMLInputElement).selectionEnd = result.selection.selectionEnd;\n }\n }\n\n this.validateNew(transformedValue, {ignoreIncomplete: true/* !result.meta.autocorrectComplete */});\n\n this.options.onChange?.(result);\n };\n\n private onBlur = () => {\n const value = this.lastTransformed?.value;\n if(value) {\n this.validateNew(value);\n }\n };\n\n public update() {\n this.onInput();\n }\n\n public validate = () => {\n return this.validateNew();\n };\n\n public validateNew(\n value = this.lastTransformed?.value ?? '',\n t: any = {},\n justReturn?: boolean\n ) {\n let result: ReturnType;\n if(this.options.validateMethod) {\n result = this.options.validateMethod?.(value, t);\n } else {\n result = validateAnyIncomplete(this.lastTransformed, value, t);\n }\n\n if(result?.code) {\n const langPackKey: LangPackKey = this.options.errorKeys?.[result.code];\n !justReturn && this.setState(InputState.Error, langPackKey);\n return false;\n }\n\n !justReturn && this.setState(InputState.Neutral);\n return true;\n }\n}\n\nexport function handleInputFieldsOnChange(inputFields: (CountryInputField | InputField | InputFieldCorrected)[], _onChange: (valid: boolean) => void) {\n const onChange = () => {\n const valid = inputFields.every((inputField) => {\n return 'validateNew' in inputField ? inputField.validateNew(undefined, undefined, true) : inputField.isValid();\n });\n\n _onChange(valid);\n };\n\n inputFields.forEach((inputField) => {\n if(inputField instanceof InputFieldCorrected) {\n const original = inputField.options.onChange;\n inputField.options.onChange = (...args: any[]) => {\n // @ts-ignore\n original?.(...args);\n onChange();\n };\n\n if('update' in inputField) {\n inputField.update();\n }\n } else {\n inputField.input.addEventListener('input', onChange);\n }\n });\n\n return {validate: onChange};\n}\n\nexport function createCountryZipFields(country?: boolean, zip?: boolean) {\n let countryInputField: CountryInputField, postcodeInputField: InputFieldCorrected;\n if(country || zip) {\n if(country) countryInputField = new CountryInputField({\n noPhoneCodes: true,\n onCountryChange: () => {\n postcodeInputField?.update();\n },\n required: true,\n autocomplete: 'country'\n });\n if(zip) postcodeInputField = new InputFieldCorrected({\n label: 'PaymentShippingZipPlaceholder',\n plainText: true,\n inputMode: 'numeric',\n autocomplete: 'postal-code',\n formatMethod: (/* ...args */) => {\n const {country} = countryInputField.getSelected();\n const iso2 = country?.iso2;\n return cardFormattingPatterns.postalCodeFromCountry(iso2 && iso2.toUpperCase());\n }\n });\n }\n\n return {countryInputField, postcodeInputField};\n}\n\nexport type PaymentsNativeProvider = 'stripe' | 'smartglocal';\nexport type PaymentsNativeParams = {\n need_country?: boolean,\n need_zip?: boolean,\n need_cardholder_name?: boolean,\n publishable_key?: string, // stripe\n public_token?: string, // smartglocal\n gpay_params: string,\n};\nconst SUPPORTED_NATIVE_PROVIDERS: Set = new Set(['stripe', 'smartglocal']);\n\nexport default class PopupPaymentCard extends PopupElement<{\n finish: (obj: {token: any, card: PaymentCardDetailsResult}) => void\n}> {\n protected telegramWebView: TelegramWebView;\n\n constructor(\n private paymentForm: PaymentsPaymentForm.paymentsPaymentForm,\n private user: User.user,\n private savedCard?: PaymentCardDetails\n ) {\n super('popup-payment popup-payment-card', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: SUPPORTED_NATIVE_PROVIDERS.has(paymentForm.native_provider as PaymentsNativeProvider),\n title: 'PaymentCardInfo'\n });\n\n if(SUPPORTED_NATIVE_PROVIDERS.has(paymentForm.native_provider as PaymentsNativeProvider)) {\n this.d();\n } else {\n const telegramWebView = this.telegramWebView = createVerificationIframe({\n url: paymentForm.url\n });\n\n telegramWebView.addEventListener('payment_form_submit', (data) => {\n const cardOut = {title: data.title, save: false} as any as PaymentCardDetails;\n this.dispatchEvent('finish', {\n token: data.credentials,\n card: cardOut\n });\n\n this.hide();\n\n if(paymentForm.pFlags.can_save_credentials) {\n confirmationPopup({\n titleLangKey: 'PaymentCardSavePaymentInformation',\n descriptionLangKey: 'PaymentCardSavePaymentInformationInfoLine1',\n button: {\n langKey: 'Save'\n }\n }).then(() => {\n cardOut.save = true;\n }, noop);\n }\n });\n\n // putPreloader(this.body, true);\n this.body.append(telegramWebView.iframe);\n this.show();\n telegramWebView.onMount();\n }\n }\n\n protected destroy() {\n this.telegramWebView?.destroy();\n return super.destroy();\n }\n\n private d() {\n const savedCard = this.savedCard;\n const cardSection = new SettingSection({name: 'PaymentInfo.Card.Title', noDelimiter: true, noShadow: true});\n\n const nativeParams: PaymentsNativeParams = JSON.parse(this.paymentForm.native_params.data);\n\n let lastBrand: string, brandIconTempId = 0, lastBrandImg: HTMLImageElement;\n const setBrandIcon = (brand: string) => {\n if(lastBrand === brand) {\n return;\n }\n\n const tempId = ++brandIconTempId;\n lastBrand = brand;\n\n const path = getPaymentBrandIconPath(brand);\n if(!path) {\n if(lastBrandImg) {\n lastBrandImg.remove();\n lastBrandImg = undefined;\n }\n\n return;\n }\n\n const img = new Image();\n img.classList.add('input-field-icon');\n renderImageFromUrlPromise(img, path, false).then(() => {\n if(brandIconTempId !== tempId) {\n return;\n }\n\n if(lastBrandImg) {\n lastBrandImg.replaceWith(img);\n } else {\n cardInputField.container.append(img);\n }\n\n lastBrandImg = img;\n });\n };\n const cardInputField = new InputFieldCorrected({\n label: 'PaymentCardNumber',\n plainText: true,\n inputMode: 'numeric',\n autocomplete: 'cc-number',\n formatMethod: cardFormattingPatterns.cardNumber,\n validateMethod: validateCardNumber,\n errorKeys: {\n invalid: 'PaymentCard.Error.Invalid',\n incomplete: 'PaymentCard.Error.Incomplete'\n },\n onChange: (transformed) => {\n setBrandIcon(detectUnifiedCardBrand(transformed.value));\n cvcInputField.update(); // format cvc\n }\n });\n\n let nameInputField: InputField;\n if(nativeParams.need_cardholder_name) nameInputField = new InputField({\n label: 'Checkout.NewCard.CardholderNamePlaceholder',\n maxLength: 255,\n required: true,\n autocomplete: 'cc-name'\n });\n\n const formatted = formatPhoneNumber(this.user.phone);\n const expireInputField = new InputFieldCorrected({\n label: 'SecureId.Identity.Placeholder.ExpiryDate',\n plainText: true,\n inputMode: 'numeric',\n autocomplete: 'cc-exp',\n formatMethod: cardFormattingPatterns.cardExpiry,\n validateMethod: formatted.country.iso2 === 'RU' ? (str, options) => {\n return validateCardExpiry(str, {\n ...(options || {}),\n date: new Date(2022, 0, 1)\n });\n } : validateCardExpiry\n });\n\n // handle autocomplete: 01/2345 -> 01/45\n expireInputField.input.addEventListener('input', () => {\n let value = expireInputField.value;\n if(value.length < 5) {\n return;\n }\n\n const splitted = value.split('/');\n if(splitted[1].length !== 4) {\n return;\n }\n\n value = [splitted[0], splitted[1].slice(2)].join('/');\n expireInputField.setValueSilently(value);\n }, {capture: true});\n\n const cvcInputField = new InputFieldCorrected({\n labelText: 'CVC',\n plainText: true,\n inputMode: 'numeric',\n autocomplete: 'cc-csc',\n name: 'cvc',\n formatMethod: () => cardFormattingPatterns.cardCvc(cardInputField.value)\n // validateMethod: (...args) => _5AH3.a.cardCvc(cardInputField.value)(...args)\n });\n\n const passwordHelpers = new PasswordInputHelpers(cvcInputField.container, cvcInputField.input as HTMLInputElement);\n\n const switchFocusOrder: (InputFieldCorrected | InputField)[] = [\n cardInputField,\n expireInputField,\n cvcInputField,\n nameInputField\n ].filter(Boolean);\n switchFocusOrder.forEach((inputField) => {\n const onKeyDown = (e: KeyboardEvent) => {\n if(!inputField.value && e.key === 'Backspace') {\n const previousInputField = switchFocusOrder[switchFocusOrder.indexOf(inputField) - 1];\n if(previousInputField) {\n // previousInputField.value = previousInputField.value.slice(0, -1);\n placeCaretAtEnd(previousInputField.input, true);\n }\n }\n };\n\n if(inputField instanceof InputFieldCorrected) {\n inputField.options.onKeyDown = onKeyDown;\n\n const original = inputField.options.onChange;\n inputField.options.onChange = (transformed) => {\n original?.(transformed);\n\n if(document.activeElement === inputField.input && transformed.meta.autocorrectComplete) {\n for(let i = switchFocusOrder.indexOf(inputField), length = switchFocusOrder.length; i < length; ++i) {\n const nextInputField = switchFocusOrder[i];\n if(\n nextInputField instanceof InputFieldCorrected ?\n !nextInputField.validateNew(undefined, undefined, true) :\n !nextInputField.value\n ) {\n placeCaretAtEnd(nextInputField.input, true);\n break;\n }\n }\n }\n };\n } else {\n inputField.input.addEventListener('keydown', onKeyDown);\n }\n });\n\n const inputFieldsRow = document.createElement('div');\n inputFieldsRow.classList.add('input-fields-row');\n inputFieldsRow.append(expireInputField.container, cvcInputField.container);\n\n const form = document.createElement('form');\n form.append(...[\n cardInputField.container,\n inputFieldsRow,\n nameInputField?.container\n ].filter(Boolean))\n\n cardSection.content.append(form);\n\n let billingSection: SettingSection;\n // let saveCheckboxField: CheckboxField;\n const {countryInputField, postcodeInputField} = createCountryZipFields(nativeParams.need_country, nativeParams.need_zip);\n if(nativeParams.need_country || nativeParams.need_zip) {\n billingSection = new SettingSection({name: 'PaymentInfo.Billing.Title', noDelimiter: true, noShadow: true});\n\n // const inputFieldsRow2 = inputFieldsRow.cloneNode() as HTMLElement;\n // inputFieldsRow2.append(countryInputField.container, postcodeInputField.container);\n // billingSection.content.append(inputFieldsRow2);\n billingSection.content.append(...[countryInputField, postcodeInputField].filter(Boolean).map((i) => i.container));\n }\n\n const canSave = !!this.paymentForm.pFlags.can_save_credentials;\n const saveCheckboxField = new CheckboxField({\n text: 'PaymentCardSavePaymentInformation',\n checked: !!canSave\n });\n const saveRow = new Row({\n checkboxField: saveCheckboxField,\n subtitleLangKey: canSave ? 'PaymentCardSavePaymentInformationInfoLine1' : 'Checkout.2FA.Text'\n });\n\n if(!canSave) {\n saveRow.container.classList.add('is-disabled');\n }\n\n (billingSection || cardSection).content.append(saveRow.container);\n\n this.scrollable.append(...[cardSection, billingSection].filter(Boolean).map((s) => s.container));\n\n const payButton = PaymentButton({\n key: 'PaymentInfo.Done',\n onClick: async() => {\n const data: PaymentCardDetails = {\n cardNumber: cardInputField.value,\n expiryFull: expireInputField.value,\n expiryMonth: expireInputField.value.split('/')[0],\n expiryYear: expireInputField.value.split('/')[1],\n cvc: cvcInputField.value,\n\n cardholderName: nameInputField?.value,\n country: countryInputField?.value,\n zip: postcodeInputField?.value,\n\n save: saveCheckboxField?.checked\n };\n\n const nativeProvider: PaymentsNativeProvider = this.paymentForm.native_provider as any;\n let out: PaymentsCredentialsToken;\n if(nativeProvider === 'stripe') {\n const url = new URL('https://api.stripe.com/v1/tokens');\n url.search = new URLSearchParams({\n 'card[number]': data.cardNumber,\n 'card[exp_month]': data.expiryMonth,\n 'card[exp_year]': data.expiryYear,\n 'card[cvc]': data.cvc,\n 'card[address_zip]': data.zip,\n 'card[address_country]': data.country,\n 'card[name]': data.cardholderName\n }).toString();\n\n const response = await fetch(url.toString(), {\n method: 'POST',\n credentials: 'same-origin',\n headers: {\n 'Content-Type': 'application/x-www-form-urlencoded',\n 'Authorization': `Bearer ${nativeParams.publishable_key}`\n }\n });\n\n out = await response.json();\n } else if(nativeProvider === 'smartglocal') {\n const params = {\n card: {\n number: data.cardNumber.replace(/[^\\d]+/g, ''),\n expiration_month: data.expiryMonth,\n expiration_year: data.expiryYear,\n security_code: data.cvc.replace(/[^\\d]+/g, '')\n }\n };\n\n const url = /* DEBUG_PAYMENT_SMART_GLOCAL */false ?\n 'https://tgb-playground.smart-glocal.com/cds/v1/tokenize/card' :\n 'https://tgb.smart-glocal.com/cds/v1/tokenize/card';\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Accept': 'application/json',\n 'Content-Type': 'application/json',\n 'X-PUBLIC-TOKEN': nativeParams.public_token\n },\n body: JSON.stringify(params)\n });\n\n const json: { // smartglocal\n data: {\n info: {\n card_network: string,\n card_type: string,\n masked_card_number: string\n },\n token: string\n },\n status: 'ok'\n } = await response.json();\n\n out = {type: 'card', token: json.data.token}\n }\n\n this.dispatchEvent('finish', {token: out, card: data});\n this.hide();\n }\n });\n\n const inputFields = ([\n cardInputField,\n nameInputField,\n expireInputField,\n cvcInputField,\n countryInputField,\n postcodeInputField\n ] as const).filter(Boolean);\n handleInputFieldsOnChange(inputFields, (valid) => {\n payButton.disabled = !valid;\n // payButton.classList.toggle('btn-disabled', !valid);\n });\n\n if(savedCard) {\n cardInputField.value = savedCard.cardNumber;\n expireInputField.value = savedCard.expiryFull;\n cvcInputField.value = savedCard.cvc;\n nameInputField && (nameInputField.value = savedCard.cardholderName);\n countryInputField && (countryInputField.value = savedCard.country);\n postcodeInputField && (postcodeInputField.value = savedCard.zip);\n }\n\n this.body.append(this.btnConfirmOnEnter = payButton);\n\n this.show();\n\n if(!cardInputField.validateNew(undefined, undefined, true)) {\n placeCaretAtEnd(cardInputField.input);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport {AccountPassword, AccountTmpPassword} from '../../layer';\nimport {InputState} from '../inputField';\nimport PasswordInputField from '../passwordInputField';\nimport SettingSection from '../settingSection';\nimport {PaymentButton} from './payment';\n\nexport default class PopupPaymentCardConfirmation extends PopupElement<{\n finish: (tmpPassword: AccountTmpPassword) => void\n}> {\n constructor(card: string, passwordState: AccountPassword) {\n super('popup-payment popup-payment-card-confirmation', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n title: 'Checkout.PasswordEntry.Title'\n });\n\n const section = new SettingSection({noDelimiter: true, noShadow: true, caption: 'Checkout.PasswordEntry.Text', captionArgs: [card]});\n const passwordInputField = new PasswordInputField({labelText: passwordState.hint});\n section.content.append(passwordInputField.container);\n this.scrollable.append(section.container);\n\n const onInput = () => {\n payButton.disabled = !passwordInputField.value;\n passwordInputField.setState(InputState.Neutral);\n };\n\n passwordInputField.input.addEventListener('input', onInput);\n\n const payButton = PaymentButton({\n key: 'Checkout.PasswordEntry.Pay',\n onClick: async() => {\n try {\n const inputCheckPassword = await this.managers.passwordManager.getInputCheckPassword(passwordInputField.value, passwordState);\n const tmpPassword = await this.managers.apiManager.invokeApi('account.getTmpPassword', {\n password: inputCheckPassword,\n period: 60\n });\n\n this.dispatchEvent('finish', tmpPassword);\n this.hide();\n } catch(err) {\n if((err as ApiError).type === 'PASSWORD_HASH_INVALID') {\n (err as ApiError).handled = true;\n passwordInputField.setError('PASSWORD_HASH_INVALID');\n }\n\n throw err;\n }\n }\n });\n this.body.append(this.btnConfirmOnEnter = payButton);\n\n onInput();\n\n this.show();\n\n placeCaretAtEnd(passwordInputField.input);\n }\n}\n","import {EMAIL_REG_EXP} from '.';\n\nexport default function matchEmail(text: string) {\n return !text ? null : text.match(EMAIL_REG_EXP);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport {InputInvoice, PaymentRequestedInfo, PaymentsPaymentForm, PaymentsValidatedRequestedInfo} from '../../layer';\nimport matchEmail from '../../lib/richTextProcessor/matchEmail';\nimport CheckboxField from '../checkboxField';\nimport CountryInputField from '../countryInputField';\nimport InputField from '../inputField';\nimport Row from '../row';\nimport SettingSection from '../settingSection';\nimport TelInputField from '../telInputField';\nimport {PaymentButton} from './payment';\nimport {createCountryZipFields, handleInputFieldsOnChange, InputFieldCorrected} from './paymentCard';\n\nexport type PaymentShippingAddress = PaymentRequestedInfo;\n\ntype ShippingFocusField = 'name' | 'email' | 'phone';\n\nexport default class PopupPaymentShipping extends PopupElement<{\n finish: (o: {shippingAddress: PaymentShippingAddress, requestedInfo: PaymentsValidatedRequestedInfo}) => void\n}> {\n constructor(\n private paymentForm: PaymentsPaymentForm.paymentsPaymentForm,\n private inputInvoice: InputInvoice,\n private focus?: ShippingFocusField\n ) {\n super('popup-payment popup-payment-shipping', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n title: 'PaymentShippingInfo'\n });\n\n this.d();\n }\n\n private d() {\n const paymentForm = this.paymentForm;\n const invoice = paymentForm.invoice;\n const savedInfo = this.paymentForm.saved_info;\n\n let addressSection: SettingSection,\n address1InputField: InputField,\n address2InputField: InputField,\n cityInputField: InputField,\n stateInputField: InputField,\n countryInputField: CountryInputField,\n postcodeInputField: InputFieldCorrected;\n if(invoice.pFlags.shipping_address_requested) {\n addressSection = new SettingSection({name: 'PaymentShippingAddress', noDelimiter: true, noShadow: true});\n address1InputField = new InputField({label: 'PaymentShippingAddress1Placeholder', maxLength: 64, required: true});\n address2InputField = new InputField({label: 'PaymentShippingAddress2Placeholder', maxLength: 64});\n cityInputField = new InputField({label: 'PaymentShippingCityPlaceholder', maxLength: 64, required: true});\n stateInputField = new InputField({label: 'PaymentShippingStatePlaceholder', maxLength: 64});\n const res = createCountryZipFields(true, true);\n countryInputField = res.countryInputField;\n postcodeInputField = res.postcodeInputField;\n\n addressSection.content.append(...[\n address1InputField,\n address2InputField,\n cityInputField,\n stateInputField,\n countryInputField,\n postcodeInputField\n ].filter(Boolean).map((inputField) => inputField.container));\n }\n\n let receiverSection: SettingSection;\n let nameInputField: InputField, emailInputField: InputField, telInputField: TelInputField;\n if([invoice.pFlags.name_requested, invoice.pFlags.email_requested, invoice.pFlags.phone_requested].includes(true)) {\n receiverSection = new SettingSection({name: 'PaymentShippingReceiver', noDelimiter: true, noShadow: true});\n\n const validateEmail = () => {\n const value = emailInputField.value;\n const match = matchEmail(value);\n if(!match || match[0].length !== value.length) {\n return false;\n }\n\n return true;\n };\n\n const validatePhone = () => {\n return !!telInputField.value.match(/\\d/);\n };\n\n if(invoice.pFlags.name_requested) nameInputField = new InputField({label: 'PaymentShippingName', maxLength: 256, required: true});\n if(invoice.pFlags.email_requested) emailInputField = new InputField({label: 'PaymentShippingEmailPlaceholder', maxLength: 64, required: true, validate: validateEmail});\n if(invoice.pFlags.phone_requested) telInputField = new TelInputField({required: true, validate: validatePhone});\n\n receiverSection.content.append(...[\n nameInputField,\n emailInputField,\n telInputField\n ].filter(Boolean).map((inputField) => inputField.container));\n }\n\n const saveCheckboxField = new CheckboxField({\n text: 'PaymentShippingSave',\n checked: true\n });\n const saveRow = new Row({\n checkboxField: saveCheckboxField,\n subtitleLangKey: 'PaymentShippingSaveInfo'\n });\n\n (receiverSection || addressSection).content.append(saveRow.container);\n\n this.scrollable.append(...[addressSection, receiverSection].filter(Boolean).map((section) => section.container));\n\n const payButton = PaymentButton({\n key: 'PaymentInfo.Done',\n onClick: async() => {\n const selectedCountry = countryInputField && countryInputField.getSelected().country;\n const data: PaymentShippingAddress = {\n _: 'paymentRequestedInfo',\n shipping_address: selectedCountry && {\n _: 'postAddress',\n street_line1: address1InputField.value,\n street_line2: address2InputField.value,\n city: cityInputField.value,\n state: stateInputField.value,\n // country: countryInputField.value,\n country_iso2: selectedCountry?.iso2,\n post_code: postcodeInputField.value\n },\n name: nameInputField?.value,\n email: emailInputField?.value,\n phone: telInputField?.value\n };\n\n try {\n const requestedInfo = await this.managers.appPaymentsManager.validateRequestedInfo(this.inputInvoice, data, saveCheckboxField?.checked);\n\n this.dispatchEvent('finish', {\n shippingAddress: data,\n requestedInfo\n });\n\n this.hide();\n } catch(err: any) {\n const errorMap: {[err: string]: InputField} = {\n ADDRESS_STREET_LINE1_INVALID: address1InputField,\n ADDRESS_STREET_LINE2_INVALID: address2InputField,\n ADDRESS_COUNTRY_INVALID: countryInputField,\n ADDRESS_CITY_INVALID: cityInputField,\n ADDRESS_STATE_INVALID: stateInputField,\n ADDRESS_POSTCODE_INVALID: postcodeInputField,\n\n REQ_INFO_NAME_INVALID: nameInputField,\n REQ_INFO_EMAIL_INVALID: emailInputField,\n REQ_INFO_PHONE_INVALID: telInputField\n };\n\n const inputField = errorMap[(err as ApiError).type];\n if(inputField) {\n inputField.setError();\n (err as any).handled = true;\n }\n\n throw err;\n }\n }\n });\n this.body.append(this.btnConfirmOnEnter = payButton);\n\n if(savedInfo) {\n const shippingAddress = savedInfo.shipping_address;\n if(shippingAddress) {\n address1InputField.value = shippingAddress.street_line1;\n address2InputField.value = shippingAddress.street_line2;\n cityInputField.value = shippingAddress.city;\n stateInputField.value = shippingAddress.state;\n countryInputField.selectCountryByIso2(shippingAddress.country_iso2);\n postcodeInputField.value = shippingAddress.post_code;\n }\n\n savedInfo.name && nameInputField && (nameInputField.value = savedInfo.name);\n savedInfo.email && emailInputField && (emailInputField.value = savedInfo.email);\n savedInfo.phone && telInputField && (telInputField.value = savedInfo.phone);\n }\n\n const {validate} = handleInputFieldsOnChange([\n address1InputField,\n address2InputField,\n cityInputField,\n stateInputField,\n countryInputField,\n postcodeInputField,\n nameInputField,\n emailInputField,\n telInputField\n ].filter(Boolean), (valid) => {\n payButton.disabled = !valid;\n });\n\n validate();\n\n this.show();\n\n let focusField: InputField;\n if(this.focus) {\n const focusMap: {[field in ShippingFocusField]?: InputField} = {\n name: nameInputField,\n email: emailInputField,\n phone: telInputField\n };\n\n focusField = focusMap[this.focus];\n } else {\n focusField = address1InputField;\n }\n\n if(focusField) {\n placeCaretAtEnd(focusField.input);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport accumulate from '../../helpers/array/accumulate';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport {PaymentsPaymentForm, PaymentsValidatedRequestedInfo, ShippingOption} from '../../layer';\nimport RadioField from '../radioField';\nimport Row, {RadioFormFromRows} from '../row';\nimport SettingSection from '../settingSection';\nimport {PaymentButton} from './payment';\n\nexport default class PopupPaymentShippingMethods extends PopupElement<{\n finish: (shippingOption: ShippingOption) => void\n}> {\n constructor(\n private paymentForm: PaymentsPaymentForm,\n private requestedInfo: PaymentsValidatedRequestedInfo,\n private shippingOption: ShippingOption\n ) {\n super('popup-payment popup-payment-shipping-methods', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n title: 'PaymentShippingMethod'\n });\n\n this.d();\n }\n\n private d() {\n const section = new SettingSection({name: 'PaymentCheckoutShippingMethod', noDelimiter: true, noShadow: true});\n\n const rows = this.requestedInfo.shipping_options.map((shippingOption) => {\n return new Row({\n radioField: new RadioField({\n text: shippingOption.title,\n name: 'shipping-method',\n value: shippingOption.id\n }),\n subtitle: paymentsWrapCurrencyAmount(\n accumulate(shippingOption.prices.map(({amount}) => +amount), 0),\n this.paymentForm.invoice.currency\n )\n });\n });\n\n let lastShippingId: string;\n const form = RadioFormFromRows(rows, (value) => {\n lastShippingId = value;\n });\n\n if(this.shippingOption) {\n rows.find((row) => row.radioField.input.value === this.shippingOption.id).radioField.checked = true;\n } else {\n rows[0].radioField.checked = true;\n }\n\n section.content.append(form);\n\n this.scrollable.append(section.container);\n\n const payButton = PaymentButton({\n key: 'PaymentInfo.Done',\n onClick: () => {\n this.dispatchEvent('finish', this.requestedInfo.shipping_options.find((option) => option.id === lastShippingId));\n this.hide();\n }\n });\n this.body.append(this.btnConfirmOnEnter = payButton);\n\n this.show();\n }\n}\n","export default function easeOutCubic(t: number, b: number, c: number, d: number) {\n return t >= d ? b + c : easeOutCubicApply(t / d, c) + b;\n}\n\nexport function easeOutCubicApply(v: number, c: number) {\n return c * (--v * v * v + 1);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {USING_BOMS} from '../helpers/dom/richInputHandler';\nimport BOM from '../helpers/string/bom';\nimport {_i18n} from '../lib/langPack';\nimport InputField, {InputFieldOptions} from './inputField';\nimport SetTransition from './singleTransition';\n\nconst USELESS_REG_EXP = new RegExp(`(${BOM})|()`, 'g');\n\nexport default class InputFieldAnimated extends InputField {\n public inputFake: HTMLElement;\n public onChangeHeight: (height: number) => void;\n\n // public onLengthChange: (length: number, isOverflow: boolean) => void;\n // protected wasInputFakeClientHeight: number;\n // protected showScrollDebounced: () => void;\n\n constructor(options?: InputFieldOptions) {\n super(options);\n\n this.input.addEventListener('input', () => {\n this.updateInnerHTML();\n this.onFakeInput();\n });\n\n // if(options.placeholder) {\n // _i18n(this.inputFake, options.placeholder, undefined, 'placeholder');\n // }\n\n this.input.classList.add('scrollable', 'scrollable-y', 'no-scrollbar');\n // this.wasInputFakeClientHeight = 0;\n // this.showScrollDebounced = debounce(() => this.input.classList.remove('no-scrollbar'), 150, false, true);\n this.inputFake = document.createElement('div');\n // this.inputFake.contentEditable = 'true';\n this.inputFake.contentEditable = 'true';\n this.inputFake.tabIndex = -1;\n this.inputFake.className = this.input.className + ' input-field-input-fake';\n }\n\n public onFakeInput(setHeight = true, noAnimation?: boolean) {\n const {scrollHeight: newHeight/* , clientHeight */} = this.inputFake;\n /* if(this.wasInputFakeClientHeight && this.wasInputFakeClientHeight !== clientHeight) {\n this.input.classList.add('no-scrollbar'); // ! в сафари может вообще не появиться скролл после анимации, так как ему нужен полный reflow блока с overflow.\n this.showScrollDebounced();\n } */\n\n noAnimation ??= !this.input.isContentEditable;\n\n const currentHeight = +this.input.style.height.replace('px', '');\n if(currentHeight === newHeight) {\n return;\n }\n\n const TRANSITION_DURATION_FACTOR = 50;\n const transitionDuration = noAnimation ? 0 : Math.round(\n TRANSITION_DURATION_FACTOR * Math.log(Math.abs(newHeight - currentHeight))\n );\n\n // this.wasInputFakeClientHeight = clientHeight;\n this.input.style.transitionDuration = `${transitionDuration}ms`;\n\n if(setHeight) {\n this.onChangeHeight?.(newHeight);\n this.input.style.height = newHeight ? newHeight + 'px' : '';\n (this.input as any).oldHeight = (this.input as any).newHeight;\n (this.input as any).newHeight = newHeight;\n\n Array.from(this.input.querySelectorAll('.quote-like')).forEach((element) => {\n const scrollHeight = element.scrollHeight;\n const computedStyle = getComputedStyle(element);\n const lineHeight = parseFloat(computedStyle.lineHeight);\n const paddingTop = parseFloat(computedStyle.paddingTop);\n const paddingBottom = parseFloat(computedStyle.paddingBottom);\n const lines = (scrollHeight - paddingTop - paddingBottom) / lineHeight;\n element.classList.toggle('can-send-collapsed', lines > 3);\n });\n }\n\n const className = 'is-changing-height';\n SetTransition({\n element: this.input,\n className,\n forwards: true,\n duration: transitionDuration,\n onTransitionEnd: () => {\n this.input.classList.remove(className);\n (this.input as any).oldHeight = (this.input as any).newHeight;\n }\n });\n }\n\n protected updateInnerHTML(innerHTML = this.input.innerHTML) {\n innerHTML = innerHTML\n .replace(//, '')\n .replace(/().+?\\/custom-emoji-element>/g, '$1');\n\n if(USING_BOMS) {\n innerHTML = innerHTML.replace(USELESS_REG_EXP, '');\n }\n\n this.inputFake.innerHTML = innerHTML;\n }\n\n public setValueSilently(value: Parameters[0], fromSet?: boolean) {\n super.setValueSilently(value, fromSet);\n\n this.updateInnerHTML();\n if(!fromSet) {\n this.onFakeInput();\n }\n }\n}\n","!function(e,t){\"object\"==typeof exports&&\"object\"==typeof module?module.exports=t():\"function\"==typeof define&&define.amd?define([],t):\"object\"==typeof exports?exports.Recorder=t():e.Recorder=t()}(\"undefined\"!=typeof self?self:this,(function(){return function(e){var t={};function o(i){if(t[i])return t[i].exports;var n=t[i]={i:i,l:!1,exports:{}};return e[i].call(n.exports,n,n.exports,o),n.l=!0,n.exports}return o.m=e,o.c=t,o.d=function(e,t,i){o.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:i})},o.r=function(e){\"undefined\"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:\"Module\"}),Object.defineProperty(e,\"__esModule\",{value:!0})},o.t=function(e,t){if(1&t&&(e=o(e)),8&t)return e;if(4&t&&\"object\"==typeof e&&e&&e.__esModule)return e;var i=Object.create(null);if(o.r(i),Object.defineProperty(i,\"default\",{enumerable:!0,value:e}),2&t&&\"string\"!=typeof e)for(var n in e)o.d(i,n,function(t){return e[t]}.bind(null,n));return i},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,\"a\",t),t},o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},o.p=\"\",o(o.s=0)}([function(e,t,o){\"use strict\";(function(t){var o=t.AudioContext||t.webkitAudioContext,i=function(e){if(!i.isRecordingSupported())throw new Error(\"Recording is not supported in this browser\");e||(e={}),this.state=\"inactive\",this.config=Object.assign({bufferLength:4096,encoderApplication:2049,encoderFrameSize:20,encoderPath:\"encoderWorker.min.js\",encoderSampleRate:48e3,maxFramesPerPage:40,mediaTrackConstraints:!0,monitorGain:0,numberOfChannels:1,recordingGain:1,resampleQuality:3,streamPages:!1,reuseWorker:!1,wavBitDepth:16},e),this.encodedSamplePosition=0};i.isRecordingSupported=function(){return o&&t.navigator&&t.navigator.mediaDevices&&t.navigator.mediaDevices.getUserMedia&&t.WebAssembly},i.prototype.clearStream=function(){this.stream&&(this.stream.getTracks?this.stream.getTracks().forEach((function(e){e.stop()})):this.stream.stop(),delete this.stream),this.audioContext&&this.closeAudioContext&&(this.audioContext.close(),delete this.audioContext)},i.prototype.encodeBuffers=function(e){if(\"recording\"===this.state){for(var t=[],o=0;o{this.encodeBuffers(e.inputBuffer)},this.monitorGainNode=this.audioContext.createGain(),this.setMonitorGain(this.config.monitorGain),this.monitorGainNode.connect(this.audioContext.destination),this.recordingGainNode=this.audioContext.createGain(),this.setRecordingGain(this.config.recordingGain),this.recordingGainNode.connect(this.scriptProcessorNode)},i.prototype.initSourceNode=function(e){return e&&e.context?t.Promise.resolve(e):t.navigator.mediaDevices.getUserMedia({audio:this.config.mediaTrackConstraints}).then(e=>(this.stream=e,this.audioContext.createMediaStreamSource(e)))},i.prototype.loadWorker=function(){this.encoder||(this.encoder=new t.Worker(this.config.encoderPath))},i.prototype.initWorker=function(){var e=(this.config.streamPages?this.streamPage:this.storePage).bind(this);return this.recordedPages=[],this.totalLength=0,this.loadWorker(),new Promise((t,o)=>{var i=o=>{switch(o.data.message){case\"ready\":t();break;case\"page\":this.encodedSamplePosition=o.data.samplePosition,e(o.data.page);break;case\"done\":this.encoder.removeEventListener(\"message\",i),this.finish()}};this.encoder.addEventListener(\"message\",i),this.encoder.postMessage(Object.assign({command:\"init\",originalSampleRate:this.audioContext.sampleRate,wavSampleRate:this.audioContext.sampleRate},this.config))})},i.prototype.pause=function(e){if(\"recording\"===this.state){if(this.state=\"paused\",e&&this.config.streamPages){var t=this.encoder;return new Promise((e,o)=>{var i=o=>{\"flushed\"===o.data.message&&(t.removeEventListener(\"message\",i),this.onpause(),e())};t.addEventListener(\"message\",i),t.postMessage({command:\"flush\"})})}return this.onpause(),Promise.resolve()}},i.prototype.resume=function(){\"paused\"===this.state&&(this.state=\"recording\",this.onresume())},i.prototype.setRecordingGain=function(e){this.config.recordingGain=e,this.recordingGainNode&&this.audioContext&&this.recordingGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.setMonitorGain=function(e){this.config.monitorGain=e,this.monitorGainNode&&this.audioContext&&this.monitorGainNode.gain.setTargetAtTime(e,this.audioContext.currentTime,.01)},i.prototype.start=function(e){if(\"inactive\"===this.state)return this.initAudioContext(e),this.initAudioGraph(),this.encodedSamplePosition=0,this.initWorker().then(()=>this.initSourceNode(e)).then(e=>{this.sourceNode=e,this.state=\"recording\",this.onstart(),this.encoder.postMessage({command:\"getHeaderPages\"}),this.sourceNode.connect(this.monitorGainNode),this.sourceNode.connect(this.recordingGainNode)})},i.prototype.stop=function(){if(\"inactive\"!==this.state){this.state=\"inactive\",this.monitorGainNode.disconnect(),this.scriptProcessorNode.disconnect(),this.recordingGainNode.disconnect(),this.sourceNode.disconnect(),this.clearStream();var e=this.encoder;return new Promise(t=>{var o=i=>{\"done\"===i.data.message&&(e.removeEventListener(\"message\",o),t())};e.addEventListener(\"message\",o),e.postMessage({command:\"done\"}),this.config.reuseWorker||e.postMessage({command:\"close\"})})}return Promise.resolve()},i.prototype.destroyWorker=function(){\"inactive\"===this.state&&this.encoder&&(this.encoder.postMessage({command:\"close\"}),delete this.encoder)},i.prototype.storePage=function(e){this.recordedPages.push(e),this.totalLength+=e.length},i.prototype.streamPage=function(e){this.ondataavailable(e)},i.prototype.finish=function(){if(!this.config.streamPages){var e=new Uint8Array(this.totalLength);this.recordedPages.reduce((function(t,o){return e.set(o,t),t+o.length}),0),this.ondataavailable(e)}this.onstop(),this.config.reuseWorker||delete this.encoder},i.prototype.ondataavailable=function(){},i.prototype.onpause=function(){},i.prototype.onresume=function(){},i.prototype.onstart=function(){},i.prototype.onstop=function(){},e.exports=i}).call(this,o(1))},function(e,t){var o;o=function(){return this}();try{o=o||new Function(\"return this\")()}catch(e){\"object\"==typeof window&&(o=window)}e.exports=o}])}));","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default class StickyIntersector {\n private headersObserver: IntersectionObserver;\n private elementsObserver: IntersectionObserver;\n\n constructor(private container: HTMLElement, private handler: (stuck: boolean, target: HTMLElement) => void) {\n this.observeHeaders();\n this.observeElements();\n }\n\n /**\n * Sets up an intersection observer to notify when elements with the class\n * `.sticky_sentinel--top` become visible/invisible at the top of the container.\n * @param {!Element} container\n */\n private observeHeaders() {\n this.headersObserver = new IntersectionObserver((entries) => {\n for(const entry of entries) {\n const targetInfo = entry.boundingClientRect;\n const stickyTarget = entry.target.parentElement;\n const rootBoundsInfo = entry.rootBounds;\n\n // Started sticking.\n if(targetInfo.bottom < rootBoundsInfo.top) {\n this.handler(true, stickyTarget);\n }\n\n // Stopped sticking.\n if(targetInfo.bottom >= rootBoundsInfo.top &&\n targetInfo.bottom < rootBoundsInfo.bottom) {\n this.handler(false, stickyTarget);\n }\n }\n }, {threshold: 0, root: this.container});\n }\n\n private observeElements() {\n this.elementsObserver = new IntersectionObserver((entries) => {\n const entry = entries\n .filter((entry) => entry.boundingClientRect.top < entry.rootBounds.top)\n .sort((a, b) => a.boundingClientRect.top - b.boundingClientRect.top)[0];\n if(!entry) return;\n\n const container = entry.isIntersecting ? entry.target : entry.target.nextElementSibling;\n this.handler(true, container as HTMLElement);\n }, {root: this.container});\n }\n\n /**\n * @param {!Element} container\n * @param {string} className\n */\n private addSentinel(container: HTMLElement, className: string) {\n const sentinel = document.createElement('div');\n sentinel.classList.add('sticky_sentinel', className);\n return container.appendChild(sentinel);\n }\n\n /**\n * Notifies when elements w/ the `sticky` class begin to stick or stop sticking.\n * Note: the elements should be children of `container`.\n * @param {!Element} container\n */\n public observeStickyHeaderChanges(element: HTMLElement) {\n const headerSentinel = this.addSentinel(element, 'sticky_sentinel--top');\n this.headersObserver.observe(headerSentinel);\n\n this.elementsObserver.observe(element);\n }\n\n public disconnect() {\n this.headersObserver.disconnect();\n this.elementsObserver.disconnect();\n }\n\n public unobserve(element: HTMLElement, headerSentinel: HTMLElement) {\n this.elementsObserver.unobserve(element);\n this.headersObserver.unobserve(headerSentinel);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport getEmojiEntityFromEmoji from './getEmojiEntityFromEmoji';\nimport wrapRichText from './wrapRichText';\n\nexport default function wrapSingleEmoji(emoji: string) {\n return wrapRichText(emoji, {\n entities: [getEmojiEntityFromEmoji(emoji)]\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport PopupStickers from '../../components/popups/stickers';\nimport rootScope from '../../lib/rootScope';\nimport createContextMenu from './createContextMenu';\nimport findUpClassName from './findUpClassName';\nimport PopupElement from '../../components/popups';\nimport {ButtonMenuItemOptionsVerifiable} from '../../components/buttonMenu';\nimport ChatInput from '../../components/chat/input';\nimport {copyTextToClipboard} from '../clipboard';\nimport {getEmojiFromElement} from '../../components/emoticonsDropdown/tabs/emoji';\nimport tsNow from '../tsNow';\nimport {toastNew} from '../../components/toast';\nimport {DocumentAttribute, EmojiStatus, InputStickerSet} from '../../layer';\n\nexport default function createStickersContextMenu({\n listenTo,\n chatInput,\n isPack,\n verifyRecent,\n appendTo,\n isEmojis,\n isGif,\n canHaveEmojiTimer,\n canViewPack,\n onOpen,\n onClose,\n onSend\n}: {\n listenTo: HTMLElement,\n chatInput?: ChatInput,\n isPack?: boolean,\n verifyRecent?: (target: HTMLElement) => boolean,\n appendTo?: HTMLElement,\n isEmojis?: boolean,\n isGif?: boolean,\n canHaveEmojiTimer?: boolean,\n canViewPack?: boolean,\n onOpen?: () => any,\n onClose?: () => any,\n onSend?: () => any\n}) {\n let target: HTMLElement, doc: MyDocument;\n const verifyFavoriteSticker = async(toAdd: boolean) => {\n const favedStickers = await (isGif ? rootScope.managers.acknowledged.appGifsManager.getGifs() : rootScope.managers.acknowledged.appStickersManager.getFavedStickersStickers());\n if(!favedStickers.cached) {\n return false;\n }\n\n const found = (await favedStickers.result).some((_doc) => _doc.id === doc.id);\n return toAdd ? !found : found;\n };\n\n const updateEmojiStatus = (emojiStatus: EmojiStatus) => {\n rootScope.managers.appUsersManager.updateEmojiStatus(emojiStatus).then(() => {\n toastNew({langPackKey: 'SetAsEmojiStatusInfo'});\n });\n };\n\n const updateEmojiStatusUntil = async(duration: number) => {\n updateEmojiStatus({\n _: 'emojiStatusUntil',\n document_id: doc.id,\n until: tsNow(true) + duration\n });\n };\n\n let buttons: ButtonMenuItemOptionsVerifiable[] = isEmojis ? [{\n icon: 'copy',\n text: 'Copy',\n onClick: () => {\n if(doc) {\n copyTextToClipboard(doc.stickerEmojiRaw, target.outerHTML);\n } else {\n copyTextToClipboard(getEmojiFromElement(target).emoji);\n }\n }\n }, {\n icon: 'stickers_face',\n text: 'ViewPackPreview',\n onClick: () => {\n const attribute = doc.attributes.find((attr) => attr._ === 'documentAttributeCustomEmoji') as DocumentAttribute.documentAttributeCustomEmoji;\n const inputStickerSet = attribute.stickerset as InputStickerSet.inputStickerSetID;\n PopupElement.createPopup(\n PopupStickers,\n inputStickerSet,\n true,\n chatInput\n ).show();\n },\n verify: () => canViewPack\n }, {\n icon: 'smile',\n text: 'SetAsEmojiStatus',\n onClick: () => {\n updateEmojiStatus({\n _: 'emojiStatus',\n document_id: doc.id\n });\n },\n verify: () => !!(rootScope.premium && doc)\n }, {\n icon: 'delete',\n text: 'DeleteFromRecent',\n onClick: () => rootScope.managers.appEmojiManager.deleteRecentEmoji(getEmojiFromElement(target)),\n verify: () => verifyRecent?.(target) ?? false\n }] : [{\n icon: 'stickers',\n text: 'Context.ViewStickerSet',\n onClick: () => PopupElement.createPopup(PopupStickers, doc.stickerSetInput, false, chatInput).show(),\n verify: () => !isPack && !isGif\n }, {\n icon: isGif ? 'gifs' : 'favourites',\n text: isGif ? 'SaveToGIFs' : 'AddToFavorites',\n onClick: () => isGif ? rootScope.managers.appGifsManager.saveGif(doc.id, false) : rootScope.managers.appStickersManager.faveSticker(doc.id, false),\n verify: () => verifyFavoriteSticker(true)\n }, {\n icon: isGif ? 'crossgif' : 'crossstar',\n text: isGif ? 'Message.Context.RemoveGif' : 'DeleteFromFavorites',\n onClick: () => isGif ? rootScope.managers.appGifsManager.saveGif(doc.id, true) : rootScope.managers.appStickersManager.faveSticker(doc.id, true),\n verify: () => verifyFavoriteSticker(false)\n }, {\n icon: 'delete',\n text: 'DeleteFromRecent',\n onClick: () => rootScope.managers.appStickersManager.saveRecentSticker(doc.id, true),\n verify: () => verifyRecent?.(target) ?? false\n }, {\n icon: 'mute',\n text: 'Chat.Send.WithoutSound',\n onClick: () => {\n onSend?.();\n return chatInput.emoticonsDropdown.sendDocId({\n document: doc.id,\n clearDraft: false,\n silent: true,\n target\n });\n },\n verify: () => !!(chatInput && chatInput.chat.peerId && chatInput.chat.peerId !== rootScope.myId)\n }, {\n icon: 'schedule',\n text: 'Chat.Send.ScheduledMessage',\n onClick: () => chatInput.scheduleSending(() => chatInput.sendMessageWithDocument({document: doc, target})),\n verify: () => chatInput && !!chatInput.chat.peerId\n }];\n\n if(canHaveEmojiTimer) buttons = [{\n text: 'SetEmojiStatusUntil1Hour',\n onClick: () => updateEmojiStatusUntil(3600),\n verify: () => canHaveEmojiTimer\n }, {\n text: 'SetEmojiStatusUntil2Hours',\n onClick: () => updateEmojiStatusUntil(3600 * 2),\n verify: () => canHaveEmojiTimer\n }, {\n text: 'SetEmojiStatusUntil8Hours',\n onClick: () => updateEmojiStatusUntil(3600 * 8),\n verify: () => canHaveEmojiTimer\n }, {\n text: 'SetEmojiStatusUntil2Days',\n onClick: () => updateEmojiStatusUntil(3600 * 24 * 2),\n verify: () => canHaveEmojiTimer\n }];\n\n return createContextMenu({\n listenTo: listenTo,\n appendTo,\n findElement: (e) => {\n target = e.target as HTMLElement;\n if(isEmojis) {\n const superEmoji = findUpClassName(target, 'super-emoji');\n if(superEmoji) {\n target = superEmoji.firstElementChild as HTMLElement;\n } else {\n target = findUpClassName(target, 'emoji') || findUpClassName(target, 'custom-emoji');\n }\n } else if(isGif) {\n target = findUpClassName(e.target, 'gif');\n } else {\n target = findUpClassName(e.target, 'media-sticker-wrapper');\n }\n\n return target;\n },\n onOpen: async() => {\n doc = await rootScope.managers.appDocsManager.getDoc(target.dataset.docId);\n return onOpen?.();\n },\n onClose,\n buttons\n });\n}\n","import {MessageExtendedMedia, Photo, PhotoSize} from '../../../../layer';\n\nexport default function generatePhotoForExtendedMediaPreview(media: MessageExtendedMedia.messageExtendedMediaPreview): Photo.photo {\n let thumb = media.thumb as PhotoSize.photoStrippedSize;\n if(thumb) {\n thumb.w = media.w;\n thumb.h = media.h;\n } else {\n thumb = {\n _: 'photoStrippedSize',\n bytes: new Uint8Array([1, 24, 30, 197, 162, 138, 40, 0, 162, 138, 40, 0, 162, 138, 40, 0, 162, 138, 40, 3]),\n type: 'i',\n w: 1,\n h: 1\n };\n }\n\n return {\n _: 'photo',\n access_hash: '',\n pFlags: {},\n date: 0,\n dc_id: 0,\n file_reference: [],\n id: 0,\n sizes: [thumb]\n };\n}\n","import toArray from '../../../../helpers/array/toArray';\nimport {Document, Game, Message, MessageAction, MessageExtendedMedia, MessageMedia, Photo, StoryItem, WebPage} from '../../../../layer';\nimport generatePhotoForExtendedMediaPreview from '../photos/generatePhotoForExtendedMediaPreview';\n\nexport default function getMediaFromMessage(message: Message | StoryItem.storyItem, onlyInner: true, index?: number): Photo.photo | Document.document;\nexport default function getMediaFromMessage(message: Message | StoryItem.storyItem, onlyInner?: false, index?: number): Photo.photo | Document.document | Game.game | WebPage.webPage;\nexport default function getMediaFromMessage(message: Message | StoryItem.storyItem, onlyInner = false, index?: number): Photo.photo | Document.document | Game.game | WebPage.webPage {\n if(!message) return;\n\n let media: any;\n if((message as Message.messageService).action) {\n media = ((message as Message.messageService).action as MessageAction.messageActionChannelEditPhoto).photo;\n } else if((message as Message.message).media) {\n let messageMedia = (message as Message.message).media;\n const extendedMedia = (messageMedia as MessageMedia.messageMediaInvoice | MessageMedia.messageMediaPaidMedia).extended_media;\n if((messageMedia as MessageMedia.messageMediaWebPage).webpage) {\n messageMedia = (messageMedia as MessageMedia.messageMediaWebPage).webpage as any as MessageMedia;\n } else if(extendedMedia) {\n const media = toArray(extendedMedia)[index ?? 0];\n messageMedia = (media as MessageExtendedMedia.messageExtendedMedia).media;\n if(!messageMedia) {\n return generatePhotoForExtendedMediaPreview(media as MessageExtendedMedia.messageExtendedMediaPreview);\n }\n }\n\n media = /* (messageMedia as MessageMedia.messageMediaDocument).alt_document || */\n (messageMedia as MessageMedia.messageMediaDocument).document ||\n (messageMedia as MessageMedia.messageMediaPhoto).photo ||\n (onlyInner ? undefined : (messageMedia as MessageMedia.messageMediaGame).game || messageMedia);\n }\n\n return media as any;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport type {SearchSuperContext} from './appSearchSuper.';\nimport rootScope from '../lib/rootScope';\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport {IS_APPLE, IS_SAFARI} from '../environment/userAgent';\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport simulateEvent from '../helpers/dom/dispatchEvent';\nimport {Document, DocumentAttribute, Message, PhotoSize} from '../layer';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport I18n from '../lib/langPack';\nimport SearchListLoader from '../helpers/searchListLoader';\nimport copy from '../helpers/object/copy';\nimport deepEqual from '../helpers/object/deepEqual';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getMediaFromMessage from '../lib/appManagers/utils/messages/getMediaFromMessage';\nimport getPeerTitle from './wrappers/getPeerTitle';\nimport appDownloadManager from '../lib/appManagers/appDownloadManager';\nimport onMediaLoad from '../helpers/onMediaLoad';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport animationIntersector from './animationIntersector';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport setCurrentTime from '../helpers/dom/setCurrentTime';\n\n// TODO: Safari: проверить стрим, включить его и сразу попробовать включить видео или другую песню\n// TODO: Safari: попробовать замаскировать подгрузку последнего чанка\n// TODO: Safari: пофиксить момент, когда заканчивается песня и пытаешься включить её заново - прогресс сразу в конце\n\nexport type MediaItem = {mid: number, peerId: PeerId};\n\ntype HTMLMediaElement = HTMLAudioElement | HTMLVideoElement;\n\nconst SHOULD_USE_SAFARI_FIX = (() => {\n try {\n return IS_SAFARI && +navigator.userAgent.match(/ Version\\/(\\d+)/)[1] < 14;\n } catch(err) {\n return false;\n }\n})();\n\nconst SEEK_OFFSET = 10;\n\nexport type MediaSearchContext = SearchSuperContext & Partial<{\n isScheduled: boolean,\n useSearch: boolean\n}>;\n\ntype MediaDetails = {\n peerId: PeerId,\n mid: number,\n docId: DocId,\n doc: MyDocument,\n message: Message.message,\n clean?: boolean,\n isScheduled?: boolean,\n isSingle?: boolean\n};\n\nexport type PlaybackMediaType = 'voice' | 'video' | 'audio';\n\nexport class AppMediaPlaybackController extends EventListenerBase<{\n play: (details: ReturnType) => void,\n singleMedia: (media: HTMLMediaElement) => void,\n pause: () => void,\n playbackParams: (params: ReturnType) => void,\n stop: () => void,\n toggleVideoAutoplaySound: (value: boolean) => void\n}> {\n private container: HTMLElement;\n private media: Map> = new Map();\n private scheduled: AppMediaPlaybackController['media'] = new Map();\n private mediaDetails: Map = new Map();\n private playingMedia: HTMLMediaElement;\n private playingMediaType: PlaybackMediaType;\n\n private waitingMediaForLoad: Map>> = new Map();\n private waitingScheduledMediaForLoad: AppMediaPlaybackController['waitingMediaForLoad'] = new Map();\n private waitingDocumentsForLoad: {[docId: string]: Set} = {};\n\n public willBePlayedMedia: HTMLMediaElement;\n private searchContext: MediaSearchContext;\n\n private listLoader: SearchListLoader;\n\n public volume: number;\n public muted: boolean;\n public playbackRate: number;\n public loop: boolean;\n public round: boolean;\n private _volume: number;\n private _muted: boolean;\n private _playbackRate: number;\n private _loop: boolean;\n private _round: boolean;\n private lockedSwitchers: boolean;\n private playbackRates: Record = {\n voice: 1,\n video: 1,\n audio: 1\n };\n\n private pip: HTMLVideoElement;\n private managers: AppManagers;\n private skipMediaPlayEvent: boolean;\n\n construct(managers: AppManagers) {\n this.managers = managers;\n this.container = document.createElement('div');\n // this.container.style.cssText = 'position: absolute; top: -10000px; left: -10000px;';\n this.container.style.cssText = 'display: none;';\n document.body.append(this.container);\n\n if(navigator.mediaSession) {\n const actions: {[action in MediaSessionAction]?: MediaSessionActionHandler} = {\n play: this.browserPlay,\n pause: this.browserPause,\n stop: this.browserStop,\n seekbackward: this.browserSeekBackward,\n seekforward: this.browserSeekForward,\n seekto: this.browserSeekTo,\n previoustrack: this.browserPrevious,\n nexttrack: this.browserNext\n };\n\n for(const action in actions) {\n try {\n navigator.mediaSession.setActionHandler(action as MediaSessionAction, actions[action as MediaSessionAction]);\n } catch(err) {\n console.warn('MediaSession action is not supported:', action);\n }\n }\n }\n\n rootScope.addEventListener('document_downloaded', (docId) => {\n const set = this.waitingDocumentsForLoad[docId];\n if(set) {\n for(const media of set) {\n this.onMediaDocumentLoad(media);\n }\n }\n });\n\n rootScope.addEventListener('media_play', () => {\n if(this.skipMediaPlayEvent) {\n this.skipMediaPlayEvent = false;\n return;\n }\n\n if(!this.pause() && this.pip) {\n this.pip.pause();\n }\n });\n\n const properties: {[key: PropertyKey]: PropertyDescriptor} = {};\n const keys = [\n 'volume' as const,\n 'muted' as const,\n 'playbackRate' as const,\n 'loop' as const,\n 'round' as const\n ];\n keys.forEach((key) => {\n const _key = ('_' + key) as `_${typeof key}`;\n properties[key] = {\n get: () => this[_key],\n set: (value: number | boolean) => {\n if(this[_key] === value) {\n return;\n }\n\n // @ts-ignore\n this[_key] = value;\n if(this.playingMedia && (key !== 'loop' || this.playingMediaType === 'audio') && key !== 'round') {\n // @ts-ignore\n this.playingMedia[key] = value;\n }\n\n if(key === 'playbackRate' && this.playingMediaType !== undefined) {\n this.playbackRates[this.playingMediaType] = value as number;\n }\n\n this.dispatchPlaybackParams();\n }\n };\n });\n Object.defineProperties(this, properties);\n\n this.addEventListener('play', ({doc}) => {\n if(doc.type === 'round') {\n animationIntersector.toggleMediaPause(false);\n }\n });\n\n this.addEventListener('pause', () => {\n animationIntersector.toggleMediaPause(true);\n });\n }\n\n private dispatchPlaybackParams() {\n this.dispatchEvent('playbackParams', this.getPlaybackParams());\n }\n\n public getPlaybackParams() {\n const {volume, muted, playbackRate, playbackRates, loop, round} = this;\n return {\n volume,\n muted,\n playbackRate,\n playbackRates,\n loop,\n round\n };\n }\n\n public setPlaybackParams(params: ReturnType) {\n this.playbackRates = params.playbackRates;\n this._volume = params.volume;\n this._muted = params.muted;\n this._playbackRate = params.playbackRate;\n this._loop = params.loop;\n this._round = params.round;\n }\n\n public seekBackward = (details: MediaSessionActionDetails, media = this.playingMedia) => {\n if(media) {\n setCurrentTime(media, Math.max(0, media.currentTime - (details.seekOffset || SEEK_OFFSET)));\n }\n };\n\n public seekForward = (details: MediaSessionActionDetails, media = this.playingMedia) => {\n if(media) {\n setCurrentTime(media, Math.min(media.duration, media.currentTime + (details.seekOffset || SEEK_OFFSET)));\n }\n };\n\n public seekTo = (details: MediaSessionActionDetails, media = this.playingMedia) => {\n if(media) {\n setCurrentTime(media, details.seekTime);\n }\n };\n\n public addMedia(message: Message.message, autoload: boolean, clean?: boolean): HTMLMediaElement {\n const {peerId, mid} = message;\n\n const isScheduled = !!message.pFlags.is_scheduled;\n const s = isScheduled ? this.scheduled : this.media;\n let storage = s.get(message.peerId);\n if(!storage) {\n s.set(message.peerId, storage = new Map());\n }\n\n let media = storage.get(mid);\n if(media) {\n return media;\n }\n\n const doc = getMediaFromMessage(message, true) as Document.document;\n storage.set(mid, media = document.createElement(doc.type === 'round' || doc.type === 'video' ? 'video' : 'audio'));\n // const source = document.createElement('source');\n // source.type = doc.type === 'voice' && !opusDecodeController.isPlaySupported() ? 'audio/wav' : doc.mime_type;\n\n if(doc.type === 'round') {\n media.setAttribute('playsinline', 'true');\n // media.muted = true;\n }\n\n const details: MediaDetails = {\n peerId,\n mid,\n docId: doc.id,\n doc,\n message,\n clean,\n isScheduled: message.pFlags.is_scheduled\n };\n\n this.mediaDetails.set(media, details);\n\n // media.autoplay = true;\n media.volume = 1;\n // media.append(source);\n\n this.container.append(media);\n\n media.addEventListener('play', this.onPlay);\n media.addEventListener('pause', this.onPause);\n media.addEventListener('ended', this.onEnded);\n\n if(doc.type !== 'audio' && message?.pFlags.media_unread && message.fromId !== rootScope.myId) {\n media.addEventListener('timeupdate', () => {\n this.managers.appMessagesManager.readMessages(peerId, [mid]);\n }, {once: true});\n }\n\n /* const onError = (e: Event) => {\n //console.log('appMediaPlaybackController: video onError', e);\n\n if(this.nextMid === mid) {\n this.loadSiblingsMedia(peerId, doc.type as MediaType, mid).then(() => {\n if(this.nextMid && storage[this.nextMid]) {\n storage[this.nextMid].play();\n }\n });\n }\n };\n\n media.addEventListener('error', onError); */\n\n const deferred = deferredPromise();\n if(autoload) {\n deferred.resolve();\n } else {\n const w = message.pFlags.is_scheduled ? this.waitingScheduledMediaForLoad : this.waitingMediaForLoad;\n let waitingStorage = w.get(peerId);\n if(!waitingStorage) {\n w.set(peerId, waitingStorage = new Map());\n }\n\n waitingStorage.set(mid, deferred);\n }\n\n deferred.then(() => {\n // media.autoplay = true;\n // console.log('will set media url:', media, doc, doc.type, doc.url);\n\n if(doc.supportsStreaming || (apiManagerProxy.getCacheContext(doc)).url) {\n this.onMediaDocumentLoad(media);\n } else {\n let set = this.waitingDocumentsForLoad[doc.id];\n if(!set) {\n set = this.waitingDocumentsForLoad[doc.id] = new Set();\n }\n\n set.add(media);\n appDownloadManager.downloadMediaURL({media: doc});\n }\n }/* , onError */);\n\n return media;\n }\n\n public getMedia(peerId: PeerId, mid: number, isScheduled?: boolean) {\n const s = (isScheduled ? this.scheduled : this.media).get(peerId);\n return s?.get(mid);\n }\n\n private onMediaDocumentLoad = async(media: HTMLMediaElement) => {\n const details = this.mediaDetails.get(media);\n const doc = await this.managers.appDocsManager.getDoc(details.docId);\n if(doc.type === 'audio' && doc.supportsStreaming && SHOULD_USE_SAFARI_FIX) {\n this.handleSafariStreamable(media);\n }\n\n // setTimeout(() => {\n const cacheContext = apiManagerProxy.getCacheContext(doc);\n media.src = cacheContext.url;\n\n if(this.playingMedia === media) {\n media.playbackRate = this.playbackRate;\n\n if(doc.type === 'audio') {\n media.loop = this.loop;\n }\n }\n // }, doc.supportsStreaming ? 500e3 : 0);\n\n const set = this.waitingDocumentsForLoad[doc.id];\n if(set) {\n set.delete(media);\n\n if(!set.size) {\n delete this.waitingDocumentsForLoad[doc.id];\n }\n }\n };\n\n // safari подгрузит последний чанк и песня включится,\n // при этом этот чанк нельзя руками отдать из SW, потому что браузер тогда теряется\n private handleSafariStreamable(media: HTMLMediaElement) {\n media.addEventListener('play', () => {\n /* if(media.readyState === 4) { // https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest/readyState\n return;\n } */\n\n // media.volume = 0;\n const currentTime = media.currentTime;\n // this.setSafariBuffering(media, true);\n\n media.addEventListener('progress', () => {\n setCurrentTime(media, media.duration - 1);\n\n media.addEventListener('progress', () => {\n setCurrentTime(media, currentTime);\n // media.volume = 1;\n // this.setSafariBuffering(media, false);\n\n if(!media.paused) {\n media.play()/* .catch(() => {}) */;\n }\n }, {once: true});\n }, {once: true});\n }/* , {once: true} */);\n }\n\n public resolveWaitingForLoadMedia(peerId: PeerId, mid: number, isScheduled?: boolean) {\n const w = isScheduled ? this.waitingScheduledMediaForLoad : this.waitingMediaForLoad;\n const storage = w.get(peerId);\n if(!storage) {\n return;\n }\n\n const promise = storage.get(mid);\n if(promise) {\n promise.resolve();\n storage.delete(mid);\n\n if(!storage.size) {\n w.delete(peerId);\n }\n }\n }\n\n /**\n * Only for audio\n */\n public isSafariBuffering(media: HTMLMediaElement) {\n // @ts-ignore\n return !!media.safariBuffering;\n }\n\n private setSafariBuffering(media: HTMLMediaElement, value: boolean) {\n // @ts-ignore\n media.safariBuffering = value;\n }\n\n private async setNewMediadata(message: Message.message, playingMedia = this.playingMedia) {\n if(document.pictureInPictureElement) {\n return;\n }\n\n await onMediaLoad(playingMedia, undefined, false); // have to wait for load, otherwise on macOS won't set\n\n const doc = getMediaFromMessage(message, true) as MyDocument;\n if(!doc) return; // live\n\n const artwork: MediaImage[] = [];\n\n const isVoice = doc.type === 'voice' || doc.type === 'round';\n let title = '', artist = '';\n\n if(doc.thumbs?.length) {\n const size = doc.thumbs[doc.thumbs.length - 1];\n if(!(size as PhotoSize.photoStrippedSize).bytes) {\n const cacheContext = apiManagerProxy.getCacheContext(doc, size.type);\n\n if(cacheContext.url) {\n artwork.push({\n src: cacheContext.url,\n sizes: `${(size as PhotoSize.photoSize).w}x${(size as PhotoSize.photoSize).h}`,\n type: 'image/jpeg'\n });\n } else {\n const download = appDownloadManager.downloadMediaURL({media: doc, thumb: size});\n download.then(() => {\n if(this.playingMedia !== playingMedia || !cacheContext.url) {\n return;\n }\n\n this.setNewMediadata(message);\n });\n }\n }\n } else if(isVoice) {\n const peerId = message.fromId || message.peerId;\n const peerPhoto = await this.managers.appPeersManager.getPeerPhoto(peerId);\n if(peerPhoto) {\n // const result = this.managers.appAvatarsManager.loadAvatar(peerId, peerPhoto, 'photo_small');\n // if(result.cached) {\n // const url = await result.loadPromise;\n // artwork.push({\n // src: url,\n // sizes: '160x160',\n // type: 'image/jpeg'\n // });\n // } else {\n // result.loadPromise.then((url) => {\n // if(this.playingMedia !== playingMedia || !url) {\n // return;\n // }\n\n // this.setNewMediadata(message);\n // });\n // }\n }\n\n title = await getPeerTitle({peerId, plainText: true, onlyFirstName: false});\n artist = I18n.format(doc.type === 'voice' ? 'AttachAudio' : 'AttachRound', true);\n }\n\n if(!isVoice) {\n const attribute = doc.attributes.find((attribute) => attribute._ === 'documentAttributeAudio') as DocumentAttribute.documentAttributeAudio;\n title = attribute?.title ?? doc.file_name;\n artist = attribute?.performer;\n }\n\n if(!artwork.length) {\n if(IS_APPLE) {\n if(IS_TOUCH_SUPPORTED) {\n artwork.push({\n src: `assets/img/apple-touch-icon-precomposed.png`,\n sizes: '180x180',\n type: 'image/png'\n });\n } else {\n artwork.push({\n src: `assets/img/apple-touch-icon.png`,\n sizes: '180x180',\n type: 'image/png'\n });\n }\n } else {\n [72, 96, 144, 192, 256, 384, 512].forEach((size) => {\n const sizes = `${size}x${size}`;\n artwork.push({\n src: `assets/img/android-chrome-${sizes}.png`,\n sizes,\n type: 'image/png'\n });\n });\n }\n }\n\n const metadata = new MediaMetadata({\n title,\n artist,\n artwork\n });\n\n navigator.mediaSession.metadata = metadata;\n }\n\n public setCurrentMediadata() {\n const {playingMedia} = this;\n if(!playingMedia) return;\n const message = this.getMessageByMedia(playingMedia);\n this.setNewMediadata(message, playingMedia);\n }\n\n private getMessageByMedia(media: HTMLMediaElement): Message.message {\n const details = this.mediaDetails.get(media);\n return details?.message;\n // const {peerId, mid} = details;\n // const message = details.isScheduled ?\n // this.managers.appMessagesManager.getScheduledMessageByPeer(peerId, mid) :\n // this.managers.appMessagesManager.getMessageByPeer(peerId, mid);\n // return message;\n }\n\n public getPlayingDetails() {\n const {playingMedia} = this;\n if(!playingMedia) {\n return;\n }\n\n const message = this.getMessageByMedia(playingMedia);\n if(!message) {\n return;\n }\n\n return {\n doc: getMediaFromMessage(message, true) as MyDocument,\n message,\n media: playingMedia,\n playbackParams: this.getPlaybackParams()\n };\n }\n\n private onPlay = (e?: Event) => {\n const media = e.target as HTMLMediaElement;\n const details = this.mediaDetails.get(media);\n const {peerId, mid} = details;\n\n // console.log('appMediaPlaybackController: video playing', this.currentPeerId, this.playingMedia, media);\n\n const pip = this.pip;\n if(pip) {\n pip.pause();\n }\n\n const message = this.getMessageByMedia(media);\n\n const previousMedia = this.playingMedia;\n if(previousMedia !== media) {\n this.stop();\n this.setMedia(media, message);\n\n const verify = (element: MediaItem) => element.mid === mid && element.peerId === peerId;\n const listLoader = this.listLoader;\n const current = listLoader.getCurrent();\n if(!current || !verify(current)) {\n let jumpLength: number;\n\n for(const withOtherSide of [false, true]) {\n const previous = listLoader.getPrevious(withOtherSide);\n\n let idx = previous.findIndex(verify);\n if(idx !== -1) {\n jumpLength = -(previous.length - idx);\n } else {\n const next = listLoader.getNext(withOtherSide);\n idx = next.findIndex(verify);\n if(idx !== -1) {\n jumpLength = idx + 1;\n }\n }\n\n if(jumpLength !== undefined) {\n break;\n }\n }\n\n if(jumpLength) {\n this.go(jumpLength, false);\n } else {\n this.setTargets({peerId, mid});\n }\n }\n }\n\n // audio_pause не успеет сработать без таймаута\n setTimeout(() => {\n if(this.playingMedia !== media) {\n return;\n }\n\n this.dispatchEvent('play', this.getPlayingDetails());\n this.pauseMediaInOtherTabs();\n }, 0);\n };\n\n private onPause = (e?: Event) => {\n /* const target = e.target as HTMLMediaElement;\n if(!isInDOM(target)) {\n this.container.append(target);\n target.play();\n return;\n } */\n\n // if(this.pip) {\n // this.pip.play();\n // }\n\n this.dispatchEvent('pause');\n };\n\n private onEnded = (e?: Event) => {\n if(e && !e.isTrusted) {\n return;\n }\n\n this.onPause(e);\n\n // console.log('on media end');\n\n const listLoader = this.listLoader;\n if(\n this.lockedSwitchers ||\n (!this.round && listLoader.current && !listLoader.next.length) ||\n !listLoader.getNext(true).length ||\n !this.next()\n ) {\n this.stop();\n this.dispatchEvent('stop');\n }\n };\n\n public pauseMediaInOtherTabs() {\n this.skipMediaPlayEvent = true;\n rootScope.dispatchEvent('media_play');\n }\n\n // public get pip() {\n // return document.pictureInPictureElement as HTMLVideoElement;\n // }\n\n public toggle(play?: boolean, media = this.playingMedia) {\n if(!media) {\n return false;\n }\n\n if(play === undefined) {\n play = media.paused;\n }\n\n if(media.paused !== play) {\n return false;\n }\n\n if(play) {\n media.play();\n } else {\n media.pause();\n }\n\n return true;\n }\n\n public play = () => {\n return this.toggle(true);\n };\n\n public pause = () => {\n return this.toggle(false);\n };\n\n public stop = (media = this.playingMedia, force?: boolean) => {\n if(!media) {\n return false;\n }\n\n if(!media.paused) {\n media.pause();\n }\n\n setCurrentTime(media, 0);\n simulateEvent(media, 'ended'); // ! important, will be used to hide controls for audio element\n\n if(media === this.playingMedia) {\n const details = this.mediaDetails.get(media);\n if(details?.clean) {\n media.src = '';\n const peerId = details.peerId;\n const s = details.isScheduled ? this.scheduled : this.media;\n const storage = s.get(peerId);\n if(storage) {\n storage.delete(details.mid);\n\n if(!storage.size) {\n s.delete(peerId);\n }\n }\n\n media.remove();\n\n this.mediaDetails.delete(media);\n }\n\n this.playingMedia = undefined;\n this.playingMediaType = undefined;\n }\n\n if(force) {\n this.dispatchEvent('stop');\n }\n\n return true;\n };\n\n public playItem = (item: MediaItem) => {\n const {peerId, mid} = item;\n const isScheduled = this.searchContext.isScheduled;\n const media = this.getMedia(peerId, mid, isScheduled);\n\n /* if(isSafari) {\n media.autoplay = true;\n } */\n\n media.play();\n\n setTimeout(() => {\n this.resolveWaitingForLoadMedia(peerId, mid, isScheduled);\n }, 0);\n };\n\n public go = (length: number, dispatchJump?: boolean) => {\n const listLoader = this.listLoader;\n if(this.lockedSwitchers || !listLoader) {\n return;\n }\n\n if(this.playingMediaType === 'audio') {\n return listLoader.goRound(length, dispatchJump);\n } else {\n return listLoader.go(length, dispatchJump);\n }\n };\n\n private bindBrowserCallback(cb: (video: HTMLVideoElement, details: MediaSessionActionDetails) => void) {\n const handler: MediaSessionActionHandler = (details) => {\n cb(this.pip, details);\n };\n\n return handler;\n }\n\n public browserPlay = this.bindBrowserCallback((video) => this.toggle(true, video));\n public browserPause = this.bindBrowserCallback((video) => this.toggle(false, video));\n public browserStop = this.bindBrowserCallback((video) => this.stop(video));\n public browserSeekBackward = this.bindBrowserCallback((video, details) => this.seekBackward(details, video));\n public browserSeekForward = this.bindBrowserCallback((video, details) => this.seekForward(details, video));\n public browserSeekTo = this.bindBrowserCallback((video, details) => this.seekTo(details, video));\n public browserNext = this.bindBrowserCallback((video) => video || this.next());\n public browserPrevious = this.bindBrowserCallback((video) => video ? this.seekToStart(video) : this.previous());\n\n public next = () => {\n return this.go(1);\n };\n\n public previous = () => {\n if(this.seekToStart(this.playingMedia)) {\n return;\n }\n\n return this.go(-1);\n };\n\n public seekToStart(media: HTMLMediaElement) {\n if(media?.currentTime > 5) {\n setCurrentTime(media, 0);\n this.toggle(true, media);\n return true;\n }\n\n return false;\n }\n\n public willBePlayed(media: HTMLMediaElement) {\n this.willBePlayedMedia = media;\n }\n\n public setSearchContext(context: MediaSearchContext) {\n if(deepEqual(this.searchContext, context)) {\n return false;\n }\n\n this.searchContext = copy(context); // {_: type === 'audio' ? 'inputMessagesFilterMusic' : 'inputMessagesFilterRoundVoice'}\n return true;\n }\n\n public getSearchContext() {\n return this.searchContext;\n }\n\n public setTargets(current: MediaItem, prev?: MediaItem[], next?: MediaItem[]) {\n let listLoader = this.listLoader;\n if(!listLoader) {\n listLoader = this.listLoader = new SearchListLoader({\n loadCount: 10,\n loadWhenLeft: 5,\n processItem: (message: Message.message) => {\n this.addMedia(message, false);\n return {peerId: message.peerId, mid: message.mid};\n },\n onJump: (item, older) => {\n this.playItem(item);\n },\n onEmptied: () => {\n this.dispatchEvent('stop');\n this.stop();\n }\n });\n } else {\n listLoader.reset();\n }\n\n const reverse = this.searchContext.folderId !== undefined ? false : true;\n if(prev) {\n listLoader.setTargets(prev, next, reverse);\n } else {\n listLoader.reverse = reverse;\n }\n\n listLoader.setSearchContext(this.searchContext);\n listLoader.current = current;\n\n listLoader.load(true);\n listLoader.load(false);\n }\n\n private getPlaybackMediaTypeFromMessage(message: Message.message) {\n const doc = getMediaFromMessage(message, true) as MyDocument;\n let mediaType: PlaybackMediaType = 'audio';\n if(doc?.type) {\n if(doc.type === 'voice' || doc.type === 'round') {\n mediaType = 'voice';\n } else if(doc.type === 'video') {\n mediaType = 'video';\n }\n }\n\n return mediaType;\n }\n\n public setMedia(media: HTMLMediaElement, message: Message.message, standalone?: boolean) {\n const mediaType = this.getPlaybackMediaTypeFromMessage(message);\n\n this._playbackRate = this.playbackRates[mediaType];\n\n this.playingMedia = media;\n this.playingMediaType = mediaType;\n if(!standalone) {\n this.playingMedia.volume = this.volume;\n this.playingMedia.muted = this.muted;\n this.playingMedia.playbackRate = this.playbackRate;\n if(mediaType === 'audio') {\n this.playingMedia.loop = this.loop;\n }\n }\n\n if('mediaSession' in navigator) {\n this.setNewMediadata(message);\n }\n }\n\n public setSingleMedia({\n media,\n message,\n standalone\n }: {\n media?: HTMLMediaElement,\n message?: Message.message,\n standalone?: boolean\n } = {}) {\n const playingMedia = this.playingMedia;\n\n const wasPlaying = this.pause();\n\n let onPlay: () => void;\n if(media) {\n onPlay = () => {\n const pip = this.pip;\n if(pip) {\n pip.pause();\n }\n\n this.pauseMediaInOtherTabs();\n };\n\n if(!media.paused) {\n onPlay();\n }\n\n media.addEventListener('play', onPlay);\n } else { // maybe it's voice recording\n this.pauseMediaInOtherTabs();\n }\n\n this.willBePlayed(undefined);\n if(media) this.setMedia(media, message, standalone);\n else this.playingMedia = undefined;\n this.toggleSwitchers(false);\n\n this.dispatchEvent('singleMedia', media);\n\n return (playPaused = wasPlaying) => {\n this.toggleSwitchers(true);\n\n if(playingMedia) {\n if(this.mediaDetails.get(playingMedia)) {\n this.setMedia(playingMedia, this.getMessageByMedia(playingMedia));\n } else {\n this.next() || this.previous();\n }\n }\n\n // If it's still not cleaned\n if(this.playingMedia === media) {\n this.playingMedia = undefined;\n this.playingMediaType = undefined;\n }\n\n if(media) {\n media.removeEventListener('play', onPlay);\n }\n\n // I don't remember what it was for\n // if(media && this.playingMedia === media) {\n // this.stop();\n // }\n\n if(playPaused) {\n this.play();\n }\n };\n }\n\n public toggleSwitchers(enabled: boolean) {\n this.lockedSwitchers = !enabled;\n }\n\n public setPictureInPicture(video: HTMLVideoElement) {\n this.pip = video;\n\n // let wasPlaying = this.pause();\n\n const listenerSetter = new ListenerSetter();\n listenerSetter.add(video)('leavepictureinpicture', () => {\n if(this.pip !== video) {\n return;\n }\n\n this.pip = undefined;\n // if(wasPlaying) {\n // this.play();\n // }\n\n listenerSetter.removeAll();\n }, {once: true});\n\n listenerSetter.add(video)('play', (e) => {\n if(this.playingMedia !== video) {\n this.pause();\n }\n\n this.pauseMediaInOtherTabs();\n // if(this.pause()) {\n // listenerSetter.add(video)('pause', () => {\n // this.play();\n // }, {once: true});\n // }\n });\n }\n}\n\nconst appMediaPlaybackController = new AppMediaPlaybackController();\nMOUNT_CLASS_TO.appMediaPlaybackController = appMediaPlaybackController;\nexport default appMediaPlaybackController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {FontFamily, FontSize, FontWeight} from '../config/font';\nimport getTextWidth from '../helpers/canvas/getTextWidth';\nimport mediaSizes from '../helpers/mediaSizes';\nimport clamp from '../helpers/number/clamp';\nimport {fastRaf} from '../helpers/schedulers';\n\n// Thanks to https://stackoverflow.com/a/49349813\n\n/**\n * Attibute modifier to create middle ellipsis\n * When the attribute value is left blank the ellipsis will be in the middle\n * When positive the attribute value will be used as a percentage\n * When negative the attribute value will be used as character index counted from the end\n * @example\n *
A Javascript solution to middle ellipsis
\n *
A Javascript solution to middle ellipsis
\n *
A Javascript solution to middle ellipsis
\n */\nconst ellipsis = '…';\nconst map: Map = new Map();\n\nconst testQueue: Set = new Set();\nconst fontSize = '16px';\nlet pendingTest = false;\n\nfunction setTestQueue() {\n if(pendingTest) {\n return;\n }\n\n pendingTest = true;\n fastRaf(() => {\n pendingTest = false;\n testQueueElements();\n });\n}\n\nfunction testQueueElements() {\n testQueue.forEach(testElement);\n testQueue.clear();\n}\n\nwindow.addEventListener('resize', () => {\n for(const [key] of map) {\n testQueue.add(key);\n }\n\n setTestQueue();\n}, {capture: true, passive: true});\n\nfunction getElementWidth(element: HTMLElement) {\n const getSize = (element as any).getSize;\n if(getSize) {\n return getSize();\n }\n\n const type = element.dataset.sizeType;\n if(type) {\n const mediaSize = mediaSizes.active;\n // @ts-ignore\n const size: MediaSize = mediaSize[type];\n return size.width;\n }\n\n return element.getBoundingClientRect().width;\n}\n\nfunction testElement(element: HTMLElement) {\n // const perf = performance.now();\n // do not recalculate variables a second time\n let mapped = map.get(element);\n const firstTime = !mapped;\n\n let {text, textLength, from, multiplier, font, textWidth, elementWidth} = mapped || {};\n // console.log('[MEE] testElement got mapped', mapped);\n\n if(firstTime) {\n text = element.textContent;\n textLength = text.length;\n from = /* parseFloat(element.getAttribute(attributeName)) || */50;\n multiplier = from > 0 && from / 100;\n\n let fontSize = element.dataset.fontSize;\n if(fontSize && +fontSize) fontSize += 'px';\n // const perf = performance.now();\n font = `${element.dataset.fontWeight || FontWeight} ${fontSize || FontSize} ${FontFamily}`;\n /* const computedStyle = window.getComputedStyle(elm, null);\n font = `${computedStyle.getPropertyValue('font-weight')} ${computedStyle.getPropertyValue('font-size')} ${computedStyle.getPropertyValue('font-family')}`; */\n // console.log('testMiddleEllipsis get computed style:', performance.now() - perf, font);\n\n textWidth = getTextWidth(text, font);\n // const perf = performance.now();\n elementWidth = getElementWidth(element);\n // console.log('testMiddleEllipsis get offsetWidth:', performance.now() - perf, font);\n mapped = {text, textLength, from, multiplier, font, textWidth, elementWidth};\n map.set(element, mapped);\n\n // console.log('[MEE] testElement map set', element);\n }\n\n const newElementWidth = getElementWidth(element);\n const widthChanged = firstTime || elementWidth !== newElementWidth;\n !firstTime && widthChanged && (mapped.elementWidth = elementWidth = newElementWidth);\n\n if(widthChanged) {\n if(textWidth > elementWidth) {\n element.setAttribute('title', text);\n let smallerText = text;\n let smallerWidth = elementWidth;\n while(smallerText.length > 3) {\n const smallerTextLength = smallerText.length;\n const half = multiplier &&\n clamp(multiplier * smallerTextLength << 0, 1, smallerTextLength - 2) ||\n Math.max(smallerTextLength + from - 1, 1);\n const half1 = smallerText.substr(0, half).replace(/\\s*$/, '');\n const half2 = smallerText.substr(half + 1).replace(/^\\s*/, '');\n smallerText = half1 + half2;\n smallerWidth = getTextWidth(smallerText + ellipsis, font);\n if(smallerWidth < elementWidth) {\n element.textContent = half1 + ellipsis + half2;\n break;\n }\n }\n\n // * set new width after cutting text\n mapped.elementWidth = getElementWidth(element);\n // mapped.textWidth = smallerWidth;\n } else {\n element.removeAttribute('title');\n }\n }\n\n // console.log('testMiddleEllipsis for element:', elm, performance.now() - perf);\n}\n\nexport class MiddleEllipsisElement extends HTMLElement {\n connectedCallback() {\n // console.log('[MEE]: connectedCallback before', map.has(this), testQueue.has(this), map.size, this.textContent, map);\n\n map.set(this, null);\n if(this.dataset.sizeType || (this as any).getSize) {\n testElement(this);\n } else {\n testQueue.add(this);\n setTestQueue();\n }\n // testElement(this);\n\n // console.log('[MEE]: connectedCallback after', map.has(this), map.size, testQueue.has(this), testQueue.size);\n }\n\n disconnectedCallback() {\n const deleted = map.delete(this);\n testQueue.delete(this);\n // console.log('[MEE]: disconnectedCallback', deleted, map.has(this), map.size, this.textContent, map);\n }\n}\n\ncustomElements.define('middle-ellipsis-element', MiddleEllipsisElement);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {GrabEvent} from '../helpers/dom/attachGrabListeners';\nimport safePlay from '../helpers/dom/safePlay';\nimport setCurrentTime from '../helpers/dom/setCurrentTime';\nimport appMediaPlaybackController from './appMediaPlaybackController';\nimport RangeSelector from './rangeSelector';\n\nexport default class MediaProgressLine extends RangeSelector {\n protected filledLoad: HTMLDivElement;\n\n protected progressRAF: number;\n\n protected media: HTMLMediaElement;\n protected streamable: boolean;\n\n // protected lastOnPlayTime: number;\n // protected lastOnPlayCurrentTime: number;\n\n constructor(protected options: {\n withTransition?: boolean,\n useTransform?: boolean,\n onSeekStart?: () => void,\n onSeekEnd?: () => void,\n onTimeUpdate?: (time: number) => void\n } = {}) {\n super({\n step: 1000 / 60 / 1000,\n min: 0,\n max: 1,\n withTransition: options.withTransition,\n useTransform: options.useTransform\n }, 0);\n }\n\n public setMedia({\n media,\n streamable,\n duration\n }: {\n media: HTMLMediaElement,\n streamable?: boolean,\n duration?: number\n }) {\n if(this.media) {\n this.removeListeners();\n }\n\n if(streamable && !this.filledLoad) {\n this.filledLoad = document.createElement('div');\n this.filledLoad.classList.add('progress-line__filled', 'progress-line__loaded');\n this.container.prepend(this.filledLoad);\n // this.setLoadProgress();\n } else if(this.filledLoad) {\n this.filledLoad.classList.toggle('hide', !streamable);\n }\n\n this.media = media;\n this.streamable = streamable;\n if(!media.paused || media.currentTime > 0) {\n this.onPlay();\n }\n\n let wasPlaying = false;\n this.setSeekMax(duration);\n this.setListeners();\n this.setHandlers({\n onMouseDown: () => {\n wasPlaying = !this.media.paused;\n wasPlaying && this.media.pause();\n this.options?.onSeekStart?.();\n },\n\n onMouseUp: (e) => {\n // cancelEvent(e.event);\n wasPlaying && safePlay(this.media);\n this.options?.onSeekEnd?.();\n }\n });\n }\n\n protected onLoadedData = () => {\n this.setSeekMax();\n };\n\n protected onEnded = () => {\n this.setProgress();\n };\n\n protected onPlay = () => {\n const r = () => {\n this.setProgress();\n\n this.progressRAF = this.media.paused ? undefined : window.requestAnimationFrame(r);\n };\n\n if(this.progressRAF) {\n window.cancelAnimationFrame(this.progressRAF);\n this.progressRAF = undefined;\n }\n\n if(this.streamable) {\n this.setLoadProgress();\n }\n\n // this.lastOnPlayTime = Date.now();\n // this.lastOnPlayCurrentTime = this.media.currentTime;\n r();\n // this.progressRAF = window.requestAnimationFrame(r);\n };\n\n protected onTimeUpdate = () => {\n if(this.media.paused) {\n this.setProgress();\n\n if(this.streamable) {\n this.setLoadProgress();\n }\n }\n };\n\n protected onProgress = (e: Event) => {\n this.setLoadProgress();\n };\n\n protected scrub(e: GrabEvent) {\n const scrubTime = super.scrub(e);\n setCurrentTime(this.media, scrubTime);\n return scrubTime;\n }\n\n protected setLoadProgress() {\n if(appMediaPlaybackController.isSafariBuffering(this.media)) return;\n const buf = this.media.buffered;\n const numRanges = buf.length;\n\n const currentTime = this.media.currentTime;\n let nearestStart = 0, end = 0;\n for(let i = 0; i < numRanges; ++i) {\n const start = buf.start(i);\n if(currentTime >= start && start >= nearestStart) {\n nearestStart = start;\n end = buf.end(i);\n }\n\n // console.log('onProgress range:', i, buf.start(i), buf.end(i), this.media);\n }\n\n // console.log('onProgress correct range:', nearestStart, end, this.media);\n\n const percents = this.max ? end / this.max : 0;\n this.filledLoad.style.width = (percents * 100) + '%';\n // this.filledLoad.style.transform = 'scaleX(' + percents + ')';\n }\n\n protected setSeekMax(duration?: number) {\n const realDuration = this.media.duration || 0;\n if(duration === undefined || realDuration) duration = realDuration;\n if(this.max = duration) {\n this.seek.setAttribute('max', '' + this.max);\n } else {\n this.media.addEventListener('loadeddata', this.onLoadedData);\n }\n }\n\n public setProgress() {\n if(appMediaPlaybackController.isSafariBuffering(this.media)) return;\n\n // fix jumping progress on play\n // let currentTime: number;\n // const diff = (Date.now() - this.lastOnPlayTime) / 1000;\n // if(!this.media.paused && this.lastOnPlayTime && diff <= 1) {\n // currentTime = this.lastOnPlayCurrentTime + diff;\n // } else {\n // currentTime = this.media.currentTime;\n // }\n\n const currentTime = this.media.currentTime;\n this.options.onTimeUpdate?.(currentTime);\n super.setProgress(currentTime);\n }\n\n public setListeners() {\n super.setListeners();\n this.media.addEventListener('ended', this.onEnded);\n this.media.addEventListener('play', this.onPlay);\n this.media.addEventListener('pause', this.onTimeUpdate);\n this.media.addEventListener('timeupdate', this.onTimeUpdate);\n this.streamable && this.media.addEventListener('progress', this.onProgress);\n }\n\n public removeListeners() {\n super.removeListeners();\n\n if(this.media) {\n this.media.removeEventListener('loadeddata', this.onLoadedData);\n this.media.removeEventListener('ended', this.onEnded);\n this.media.removeEventListener('play', this.onPlay);\n this.media.removeEventListener('pause', this.onTimeUpdate);\n this.media.removeEventListener('timeupdate', this.onTimeUpdate);\n this.streamable && this.media.removeEventListener('progress', this.onProgress);\n }\n\n if(this.progressRAF) {\n window.cancelAnimationFrame(this.progressRAF);\n this.progressRAF = undefined;\n }\n }\n}\n","import {MessageFwdHeader} from '../../../../layer';\n\nexport default function getFwdFromName(fwdFrom: MessageFwdHeader) {\n return fwdFrom && (fwdFrom.saved_from_name || fwdFrom.from_name);\n}\n","import {Message} from '../../../../layer';\nimport type {MyMessage} from '../../appMessagesManager';\nimport getFwdFromName from './getFwdFromName';\n\nexport default function getMessageSenderPeerIdOrName(message: MyMessage) {\n if(message.fromId) {\n return {\n peerId: message.fromId\n };\n } else {\n return {\n fromName: getFwdFromName((message as Message.message).fwd_from)\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MyMessage} from '../../lib/appManagers/appMessagesManager';\nimport getMessageSenderPeerIdOrName from '../../lib/appManagers/utils/messages/getMessageSenderPeerIdOrName';\nimport {i18n} from '../../lib/langPack';\nimport rootScope from '../../lib/rootScope';\nimport wrapPeerTitle from './peerTitle';\n\nexport default async function wrapSenderToPeer(message: MyMessage) {\n const senderTitle: HTMLElement = document.createElement('span');\n senderTitle.classList.add('sender-title');\n\n const fromMe = message.fromId === rootScope.myId && message.peerId !== rootScope.myId;\n senderTitle.append(\n fromMe ?\n i18n('FromYou') :\n await wrapPeerTitle({\n ...getMessageSenderPeerIdOrName(message),\n dialog: message.peerId === rootScope.myId\n })\n );\n\n if(await rootScope.managers.appPeersManager.isAnyGroup(message.peerId) || fromMe) {\n const peerTitle = await wrapPeerTitle({peerId: message.peerId});\n senderTitle.append(' ➝ ', peerTitle);\n }\n\n return senderTitle;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {formatDateAccordingToTodayNew} from '../../helpers/date';\nimport {MyMessage} from '../../lib/appManagers/appMessagesManager';\n\nexport default function wrapSentTime(message: MyMessage) {\n const el: HTMLElement = document.createElement('span');\n el.classList.add('sent-time');\n el.append(formatDateAccordingToTodayNew(new Date(message.date * 1000)));\n\n return el;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport ProgressivePreloader from './preloader';\nimport appMediaPlaybackController, {MediaItem, MediaSearchContext} from './appMediaPlaybackController';\nimport {DocumentAttribute, Message} from '../layer';\nimport mediaSizes from '../helpers/mediaSizes';\nimport {IS_SAFARI} from '../environment/userAgent';\nimport rootScope from '../lib/rootScope';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport LazyLoadQueue from './lazyLoadQueue';\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport ListenerSetter, {Listener} from '../helpers/listenerSetter';\nimport noop from '../helpers/noop';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport {joinElementsWith} from '../lib/langPack';\nimport {MiddleEllipsisElement} from './middleEllipsis';\nimport {formatFullSentTime} from '../helpers/date';\nimport throttleWithRaf from '../helpers/schedulers/throttleWithRaf';\nimport {NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport formatBytes from '../helpers/formatBytes';\nimport {animateSingle} from '../helpers/animation';\nimport clamp from '../helpers/number/clamp';\nimport toHHMMSS from '../helpers/string/toHHMMSS';\nimport MediaProgressLine from './mediaProgressLine';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport wrapSenderToPeer from './wrappers/senderToPeer';\nimport wrapSentTime from './wrappers/sentTime';\nimport getMediaFromMessage from '../lib/appManagers/utils/messages/getMediaFromMessage';\nimport appDownloadManager from '../lib/appManagers/appDownloadManager';\nimport wrapPhoto from './wrappers/photo';\nimport {doubleRaf} from '../helpers/schedulers';\nimport safePlay from '../helpers/dom/safePlay';\nimport {_tgico} from '../helpers/tgico';\nimport Icon from './icon';\nimport setCurrentTime from '../helpers/dom/setCurrentTime';\n\nconst UNMOUNT_PRELOADER = true;\n\nrootScope.addEventListener('messages_media_read', ({mids, peerId}) => {\n mids.forEach((mid) => {\n const attr = `[data-mid=\"${mid}\"][data-peer-id=\"${peerId}\"]`;\n (Array.from(document.querySelectorAll(`audio-element.is-unread${attr}, .media-round.is-unread${attr}`)) as AudioElement[]).forEach((elem) => {\n elem.classList.remove('is-unread');\n });\n });\n});\n\n// https://github.com/LonamiWebs/Telethon/blob/4393ec0b83d511b6a20d8a20334138730f084375/telethon/utils.py#L1285\nexport function decodeWaveform(waveform: Uint8Array | number[]) {\n if(!(waveform instanceof Uint8Array)) {\n waveform = new Uint8Array(waveform);\n }\n\n const bitCount = waveform.length * 8;\n const valueCount = bitCount / 5 | 0;\n if(!valueCount) {\n return new Uint8Array([]);\n }\n\n let result: Uint8Array;\n try {\n const dataView = new DataView(waveform.buffer);\n result = new Uint8Array(valueCount);\n for(let i = 0; i < valueCount; i++) {\n const byteIndex = i * 5 / 8 | 0;\n const bitShift = i * 5 % 8;\n const value = dataView.getUint16(byteIndex, true);\n result[i] = (value >> bitShift) & 0b00011111;\n }\n } catch(err) {\n result = new Uint8Array([]);\n }\n\n return result;\n}\n\nfunction createWaveformBars(waveform: Uint8Array, duration: number) {\n const barWidth = 2;\n const barMargin = 2;\n const barHeightMin = 4;\n const barHeightMax = mediaSizes.isMobile && false ? 16 : 23;\n\n const minW = mediaSizes.isMobile ? 152 : 190;\n const maxW = mediaSizes.isMobile ? 190 : 256;\n const availW = clamp(duration / 60 * maxW, minW, maxW);\n\n const normValue = Math.max(...waveform);\n const wfSize = waveform.length;\n const barCount = Math.min((availW / (barWidth + barMargin)) | 0, wfSize);\n\n let maxValue = 0;\n const maxDelta = barHeightMax - barHeightMin;\n\n let html = '';\n for(let i = 0, barX = 0, sumI = 0; i < wfSize; ++i) {\n const value = waveform[i] || 0;\n if((sumI + barCount) >= wfSize) { // draw bar\n sumI = sumI + barCount - wfSize;\n if(sumI < (barCount + 1) / 2) {\n if(maxValue < value) maxValue = value;\n }\n\n const bar_value = Math.max(((maxValue * maxDelta) + ((normValue + 1) / 2)) / (normValue + 1), barHeightMin);\n\n const h = ``;\n html += h;\n\n barX += barWidth + barMargin;\n\n if(sumI < (barCount + 1) / 2) {\n maxValue = 0;\n } else {\n maxValue = value;\n }\n } else {\n if(maxValue < value) maxValue = value;\n\n sumI += barCount;\n }\n }\n\n let container: HTMLElement, svg: SVGSVGElement;\n\n if(!html) {\n\n } else {\n container = document.createElement('div');\n container.classList.add('audio-waveform');\n\n svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n svg.classList.add('audio-waveform-bars');\n svg.setAttributeNS(null, 'width', '' + availW);\n svg.setAttributeNS(null, 'height', '' + barHeightMax);\n svg.setAttributeNS(null, 'viewBox', `0 0 ${availW} ${barHeightMax}`);\n svg.insertAdjacentHTML('beforeend', html);\n\n container.append(svg);\n }\n\n return {svg, container, availW};\n}\n\nasync function wrapVoiceMessage(audioEl: AudioElement) {\n audioEl.classList.add('is-voice');\n\n const message = audioEl.message;\n const doc = getMediaFromMessage(message) as MyDocument;\n\n if(message.pFlags.out) {\n audioEl.classList.add('is-out');\n }\n\n let waveform = (doc.attributes.find((attribute) => attribute._ === 'documentAttributeAudio') as DocumentAttribute.documentAttributeAudio).waveform || new Uint8Array([]);\n waveform = decodeWaveform(waveform.slice(0, 63));\n\n const {svg, container: svgContainer, availW} = createWaveformBars(waveform, doc.duration);\n\n let fakeSvgContainer: HTMLElement;\n if(svgContainer) {\n fakeSvgContainer = svgContainer.cloneNode(true) as HTMLElement;\n fakeSvgContainer.classList.add('audio-waveform-fake');\n svgContainer.classList.add('audio-waveform-background');\n }\n\n const waveformContainer = document.createElement('div');\n waveformContainer.classList.add('audio-waveform-container');\n\n if(svgContainer) {\n waveformContainer.append(svgContainer, fakeSvgContainer);\n }\n\n const timeDiv = document.createElement('div');\n timeDiv.classList.add('audio-time');\n audioEl.append(waveformContainer, timeDiv);\n\n if(audioEl.transcriptionState !== undefined) {\n audioEl.classList.add('can-transcribe');\n const speechRecognitionDiv = document.createElement('div');\n speechRecognitionDiv.classList.add('audio-to-text-button');\n const speechRecognitionIcon = Icon('transcribe');\n const speechRecognitionLoader = document.createElement('div');\n speechRecognitionLoader.classList.add('loader');\n speechRecognitionLoader.innerHTML = ''\n speechRecognitionDiv.append(speechRecognitionIcon);\n\n speechRecognitionDiv.onclick = () => {\n const speechTextDiv = (findUpClassName(audioEl, 'document-wrapper') || findUpClassName(audioEl, 'quote-text')).querySelector('.audio-transcribed-text');\n if(audioEl.transcriptionState === 0) {\n if(speechTextDiv) {\n speechTextDiv.classList.remove('hide');\n speechRecognitionIcon.classList.remove(_tgico('transcribe'));\n speechRecognitionIcon.classList.add(_tgico('up'));\n // TODO: State to enum\n audioEl.transcriptionState = 2;\n } else {\n const message = audioEl.message;\n if(message.pFlags.is_outgoing) {\n return;\n }\n\n audioEl.transcriptionState = 1;\n !speechRecognitionLoader.parentElement && speechRecognitionDiv.append(speechRecognitionLoader);\n doubleRaf().then(() => {\n if(audioEl.transcriptionState === 1) {\n speechRecognitionLoader.classList.add('active');\n }\n });\n\n audioEl.managers.appMessagesManager.transcribeAudio(message).catch(noop);\n }\n } else if(audioEl.transcriptionState === 2) {\n // Hide transcription\n speechTextDiv.classList.add('hide');\n speechRecognitionIcon.classList.remove(_tgico('up'));\n speechRecognitionIcon.classList.add(_tgico('transcribe'));\n audioEl.transcriptionState = 0;\n }\n };\n\n audioEl.append(speechRecognitionDiv);\n }\n\n let progress = svg as any as HTMLElement, progressLine: MediaProgressLine;\n if(!progress) {\n progressLine = new MediaProgressLine();\n\n waveformContainer.append(progressLine.container);\n }\n\n const onLoad = () => {\n let audio = audioEl.audio;\n\n const setAnimation = () => {\n animateSingle(() => {\n if(!audio) return false;\n onTimeUpdate();\n return !audio.paused;\n }, audioEl);\n };\n\n const onTimeUpdate = () => {\n if(fakeSvgContainer) {\n fakeSvgContainer.style.width = (audio.currentTime / audio.duration * 100) + '%';\n }\n };\n\n if(!audio.paused || (audio.currentTime > 0 && audio.currentTime !== audio.duration)) {\n onTimeUpdate();\n }\n\n const throttledTimeUpdate = throttleWithRaf(onTimeUpdate);\n audioEl.addAudioListener('timeupdate', throttledTimeUpdate);\n audioEl.addAudioListener('ended', throttledTimeUpdate);\n audioEl.addAudioListener('play', setAnimation);\n\n progress && audioEl.readyPromise.then(() => {\n let mousedown = false, mousemove = false;\n progress.addEventListener('mouseleave', (e) => {\n if(mousedown) {\n audioEl.togglePlay(undefined, true);\n mousedown = false;\n }\n mousemove = false;\n });\n progress.addEventListener('mousemove', (e) => {\n mousemove = true;\n if(mousedown) scrub(e);\n });\n progress.addEventListener('mousedown', (e) => {\n e.preventDefault();\n if(e.button !== 0) return;\n if(!audio.paused) {\n audioEl.togglePlay(undefined, false);\n }\n\n scrub(e);\n mousedown = true;\n });\n progress.addEventListener('mouseup', (e) => {\n if(mousemove && mousedown) {\n audioEl.togglePlay(undefined, true);\n mousedown = false;\n }\n });\n attachClickEvent(progress, (e) => {\n cancelEvent(e);\n if(!audio.paused) scrub(e);\n });\n\n function scrub(e: MouseEvent | TouchEvent) {\n let offsetX: number;\n if(e instanceof MouseEvent) {\n offsetX = e.offsetX;\n } else { // touch\n const rect = (e.target as HTMLElement).getBoundingClientRect();\n offsetX = e.targetTouches[0].pageX - rect.left;\n }\n\n const scrubTime = offsetX / availW /* width */ * audio.duration;\n setCurrentTime(audio, scrubTime);\n }\n }, noop);\n\n !progress && progressLine.setMedia({\n media: audio,\n streamable: doc.supportsStreaming,\n duration: doc.duration\n });\n\n return () => {\n progress?.remove();\n progress = null;\n audio = null;\n };\n };\n\n return onLoad;\n}\n\nasync function wrapAudio(audioEl: AudioElement) {\n const withTime = audioEl.withTime;\n\n const message = audioEl.message;\n const doc = getMediaFromMessage(message) as MyDocument;\n\n const isVoice = doc.type === 'voice' || doc.type === 'round';\n const descriptionEl = document.createElement('div');\n descriptionEl.classList.add('audio-description');\n\n const audioAttribute = doc.attributes.find((attr) => attr._ === 'documentAttributeAudio') as DocumentAttribute.documentAttributeAudio;\n\n if(!isVoice) {\n const parts: (Node | string)[] = [];\n if(audioAttribute?.performer) {\n parts.push(wrapEmojiText(audioAttribute.performer));\n }\n\n if(withTime) {\n parts.push(formatFullSentTime(message.date));\n } else if(!parts.length) {\n parts.push(formatBytes(doc.size));\n }\n\n if(audioEl.showSender) {\n parts.push(await wrapSenderToPeer(message));\n }\n\n descriptionEl.append(' • ', ...joinElementsWith(parts, ' • '));\n }\n\n const html = `\n
\n
\n
\n
`;\n audioEl.insertAdjacentHTML('beforeend', html);\n\n const titleEl = audioEl.querySelector('.audio-title') as HTMLElement;\n\n const middleEllipsisEl = new MiddleEllipsisElement();\n middleEllipsisEl.dataset.fontWeight = audioEl.dataset.fontWeight;\n middleEllipsisEl.dataset.fontSize = audioEl.dataset.fontSize;\n middleEllipsisEl.dataset.sizeType = audioEl.dataset.sizeType;\n (middleEllipsisEl as any).getSize = (audioEl as any).getSize;\n if(isVoice) {\n middleEllipsisEl.append(await wrapSenderToPeer(message));\n } else {\n setInnerHTML(middleEllipsisEl, wrapEmojiText(audioAttribute?.title ?? doc.file_name));\n }\n\n titleEl.append(middleEllipsisEl);\n\n if(audioEl.showSender) {\n titleEl.append(wrapSentTime(message));\n }\n\n const subtitleDiv = audioEl.querySelector('.audio-subtitle') as HTMLDivElement;\n subtitleDiv.append(descriptionEl);\n\n const onLoad = () => {\n let launched = false;\n\n let progressLine = new MediaProgressLine();\n progressLine.setMedia({\n media: audioEl.audio,\n streamable: doc.supportsStreaming,\n duration: doc.duration\n });\n\n audioEl.addAudioListener('ended', () => {\n audioEl.classList.remove('audio-show-progress');\n // Reset subtitle\n subtitleDiv.lastChild.replaceWith(descriptionEl);\n launched = false;\n });\n\n const onPlay = () => {\n if(!launched) {\n audioEl.classList.add('audio-show-progress');\n launched = true;\n\n if(progressLine) {\n subtitleDiv.lastChild.replaceWith(progressLine.container);\n }\n }\n };\n\n audioEl.addAudioListener('play', onPlay);\n\n if(!audioEl.audio.paused || audioEl.audio.currentTime > 0) {\n onPlay();\n }\n\n return () => {\n progressLine.removeListeners();\n progressLine.container.remove();\n progressLine = null;\n };\n };\n\n return onLoad;\n}\n\nfunction constructDownloadPreloader(tryAgainOnFail = true) {\n const preloader = new ProgressivePreloader({cancelable: true, tryAgainOnFail});\n preloader.construct();\n\n if(!tryAgainOnFail) {\n preloader.circle.setAttributeNS(null, 'r', '23');\n preloader.totalLength = 143.58203125;\n }\n\n return preloader;\n}\n\nexport const findMediaTargets = (anchor: HTMLElement, anchorMid: number/* , useSearch: boolean */) => {\n let prev: MediaItem[], next: MediaItem[];\n // if(anchor.classList.contains('search-super-item') || !useSearch) {\n const isBubbles = !anchor.classList.contains('search-super-item');\n const container = findUpClassName(anchor, !isBubbles ? 'tabs-tab' : 'bubbles-inner');\n if(container) {\n const attr = `:not([data-is-outgoing=\"1\"])`;\n const justAudioSelector = `.audio:not(.is-voice)${attr}`;\n let selectors: string[];\n if(!anchor.matches(justAudioSelector)) {\n selectors = [`.audio.is-voice${attr}`, `.media-round${attr}`];\n } else {\n selectors = [justAudioSelector];\n }\n\n if(isBubbles) {\n const prefix = '.bubble:not(.webpage) ';\n selectors = selectors.map((s) => prefix + s);\n }\n\n const selector = selectors.join(', ');\n\n const elements = Array.from(container.querySelectorAll(selector)) as HTMLElement[];\n const idx = elements.indexOf(anchor);\n\n const mediaItems: MediaItem[] = elements.map((element) => ({peerId: element.dataset.peerId.toPeerId(), mid: +element.dataset.mid}));\n\n prev = mediaItems.slice(0, idx);\n next = mediaItems.slice(idx + 1);\n }\n // }\n\n if((next.length && next[0].mid < anchorMid) || (prev.length && prev[prev.length - 1].mid > anchorMid)) {\n [prev, next] = [next.reverse(), prev.reverse()];\n }\n\n // prev = next = undefined;\n\n return [prev, next];\n};\n\nexport default class AudioElement extends HTMLElement {\n public audio: HTMLAudioElement;\n public preloader: ProgressivePreloader;\n public message: Message.message;\n public withTime = false;\n public voiceAsMusic = false;\n public searchContext: MediaSearchContext;\n public showSender = false;\n public noAutoDownload: boolean;\n public lazyLoadQueue: LazyLoadQueue;\n public loadPromises: Promise[];\n public managers: AppManagers;\n public transcriptionState: number;\n public uploadingFileName: string;\n\n private listenerSetter = new ListenerSetter();\n private onTypeDisconnect: () => void;\n public onLoad: (autoload?: boolean) => void;\n public readyPromise: CancellablePromise;\n public load: (shouldPlay: boolean, controlledAutoplay?: boolean) => void;\n\n public async render() {\n this.classList.add('audio');\n this.managers = rootScope.managers;\n\n this.dataset.mid = '' + this.message.mid;\n this.dataset.peerId = '' + this.message.peerId;\n\n const doc = getMediaFromMessage(this.message) as MyDocument;\n const isRealVoice = doc.type === 'voice';\n const isVoice = !this.voiceAsMusic && isRealVoice;\n const isOutgoing = this.message.pFlags.is_outgoing;\n const uploadingFileName = this.uploadingFileName ?? this.message?.uploadingFileName?.[0];\n\n const getDurationStr = () => {\n const duration = this.audio && this.audio.readyState >= this.audio.HAVE_CURRENT_DATA ? this.audio.duration : doc.duration;\n return toHHMMSS(duration | 0);\n };\n\n this.innerHTML = `\n
\n
\n
\n
\n
\n
`;\n\n const toggle = this.firstElementChild as HTMLElement;\n\n const downloadDiv = document.createElement('div');\n downloadDiv.classList.add('audio-download');\n\n const isUnread = doc.type !== 'audio' && this.message && this.message.pFlags.media_unread;\n if(isUnread) {\n this.classList.add('is-unread');\n }\n\n if(uploadingFileName) {\n this.classList.add('is-outgoing');\n this.append(downloadDiv);\n }\n\n const onTypeLoad = await (isVoice ? wrapVoiceMessage(this) : wrapAudio(this));\n\n const audioTimeDiv = this.querySelector('.audio-time') as HTMLDivElement;\n audioTimeDiv.textContent = getDurationStr();\n\n const onLoad = this.onLoad = (autoload: boolean) => {\n this.onLoad = undefined;\n\n const audio = this.audio = appMediaPlaybackController.addMedia(this.message, autoload);\n\n const readyPromise = this.readyPromise = deferredPromise();\n if(this.audio.readyState >= this.audio.HAVE_CURRENT_DATA) readyPromise.resolve();\n else {\n this.addAudioListener('canplay', () => readyPromise.resolve(), {once: true});\n }\n\n this.onTypeDisconnect = onTypeLoad();\n\n const getTimeStr = () => toHHMMSS(audio.currentTime | 0) + (isVoice ? (' / ' + getDurationStr()) : '');\n\n const onPlay = () => {\n audioTimeDiv.innerText = getTimeStr();\n toggle.classList.toggle('playing', !audio.paused);\n };\n\n if(!audio.paused || (audio.currentTime > 0 && audio.currentTime !== audio.duration)) {\n onPlay();\n }\n\n const onToggleClick = (e: MouseEvent) => {\n this.togglePlay(e);\n };\n\n toggle.addEventListener('click', onToggleClick);\n // attachClickEvent(toggle, onToggleClick, {listenerSetter: this.listenerSetter});\n\n this.addAudioListener('ended', () => {\n toggle.classList.remove('playing');\n audioTimeDiv.innerText = getDurationStr();\n });\n\n this.addAudioListener('timeupdate', () => {\n if((!audio.currentTime && audio.paused) || appMediaPlaybackController.isSafariBuffering(audio)) return;\n audioTimeDiv.innerText = getTimeStr();\n });\n\n this.addAudioListener('pause', () => {\n toggle.classList.remove('playing');\n });\n\n this.addAudioListener('play', onPlay);\n };\n\n if(doc.thumbs?.length) {\n const imgs: HTMLElement[] = [];\n const wrapped = await wrapPhoto({\n photo: doc,\n message: null,\n container: toggle,\n boxWidth: 48,\n boxHeight: 48,\n loadPromises: this.loadPromises,\n withoutPreloader: true,\n lazyLoadQueue: this.lazyLoadQueue\n });\n toggle.style.width = toggle.style.height = '';\n if(wrapped.images.thumb) imgs.push(wrapped.images.thumb);\n if(wrapped.images.full) imgs.push(wrapped.images.full);\n\n this.classList.add('audio-with-thumb');\n imgs.forEach((img) => img.classList.add('audio-thumb'));\n }\n\n if(!isOutgoing) {\n let preloader: ProgressivePreloader = this.preloader;\n\n const autoDownload = doc.type !== 'audio'/* || !this.noAutoDownload */;\n onLoad(autoDownload);\n\n const r = this.load = (shouldPlay: boolean, controlledAutoplay?: boolean) => {\n this.load = undefined;\n\n if(this.audio.src) {\n return;\n }\n\n appMediaPlaybackController.resolveWaitingForLoadMedia(this.message.peerId, this.message.mid, this.message.pFlags.is_scheduled);\n\n this.onDownloadInit(shouldPlay);\n\n if(!preloader) {\n if(doc.supportsStreaming) {\n this.classList.add('corner-download');\n\n let pauseListener: Listener;\n const onPlay = () => {\n const preloader = constructDownloadPreloader(false);\n const deferred = deferredPromise();\n deferred.notifyAll({done: 75, total: 100});\n deferred.catch(() => {\n this.audio.pause();\n appMediaPlaybackController.willBePlayed(undefined);\n });\n deferred.cancel = () => {\n deferred.cancel = noop;\n const err = new Error();\n (err as any).type = 'CANCELED';\n deferred.reject(err);\n };\n preloader.attach(downloadDiv, false, deferred);\n\n pauseListener = this.addAudioListener('pause', () => {\n deferred.cancel();\n }, {once: true}) as any;\n\n this.onDownloadInit(shouldPlay);\n };\n\n /* if(!this.audio.paused) {\n onPlay();\n } */\n\n const playListener: any = this.addAudioListener('play', onPlay);\n this.readyPromise.then(() => {\n this.listenerSetter.remove(playListener);\n pauseListener && this.listenerSetter.remove(pauseListener);\n });\n } else {\n preloader = constructDownloadPreloader();\n\n if(!shouldPlay) {\n this.readyPromise = deferredPromise();\n }\n\n const load = () => {\n this.onDownloadInit(shouldPlay);\n\n const download = appDownloadManager.downloadMediaURL({media: doc});\n\n if(!shouldPlay) {\n download.then(() => {\n this.readyPromise.resolve();\n });\n }\n\n preloader.attach(downloadDiv, false, download);\n return {download};\n };\n\n preloader.setDownloadFunction(load);\n load();\n }\n }\n\n if(this.classList.contains('corner-download')) {\n toggle.append(downloadDiv);\n } else {\n this.append(downloadDiv);\n }\n\n this.classList.add('downloading');\n\n this.readyPromise.then(() => {\n if(UNMOUNT_PRELOADER) {\n this.classList.remove('downloading');\n downloadDiv.classList.add('downloaded');\n setTimeout(() => {\n downloadDiv.remove();\n }, 200);\n }\n\n // setTimeout(() => {\n // release loaded audio\n if(!controlledAutoplay && appMediaPlaybackController.willBePlayedMedia === this.audio) {\n safePlay(this.audio);\n appMediaPlaybackController.willBePlayed(undefined);\n }\n // }, 10e3);\n });\n };\n\n if(!this.audio?.src) {\n if(autoDownload) {\n r(false);\n } else {\n attachClickEvent(toggle, () => {\n r(true);\n }, {once: true, listenerSetter: this.listenerSetter});\n }\n }\n } else if(uploadingFileName) {\n this.classList.add('downloading');\n this.preloader = constructDownloadPreloader(false);\n const promise = appDownloadManager.getUpload(uploadingFileName);\n this.preloader.attachPromise(promise);\n this.dataset.isOutgoing = '1';\n this.preloader.attach(downloadDiv, false);\n promise.then(() => {\n this.classList.remove('downloading');\n downloadDiv.classList.add('downloaded');\n setTimeout(() => {\n downloadDiv.remove();\n }, 200);\n });\n // onLoad();\n }\n }\n\n private onDownloadInit(shouldPlay: boolean) {\n if(shouldPlay) {\n appMediaPlaybackController.willBePlayed(this.audio); // prepare for loading audio\n\n if(IS_SAFARI && !this.audio.autoplay) {\n this.audio.autoplay = true;\n }\n }\n }\n\n public togglePlay(e?: Event, paused = this.audio.paused) {\n e && cancelEvent(e);\n\n if(paused) {\n this.setTargetsIfNeeded();\n safePlay(this.audio);\n } else {\n this.audio.pause();\n }\n }\n\n public setTargetsIfNeeded() {\n const hadSearchContext = !!this.searchContext;\n if(appMediaPlaybackController.setSearchContext(this.searchContext || {\n peerId: NULL_PEER_ID,\n inputFilter: {_: 'inputMessagesFilterEmpty'},\n useSearch: false\n })) {\n const [prev, next] = !hadSearchContext ? [] : findMediaTargets(this, this.message.mid/* , this.searchContext.useSearch */);\n appMediaPlaybackController.setTargets({peerId: this.message.peerId, mid: this.message.mid}, prev, next);\n }\n }\n\n public playWithTimestamp(timestamp: number) {\n this.load?.(true);\n setCurrentTime(this.audio, timestamp);\n this.togglePlay(undefined, true);\n // appMediaPlaybackController.willBePlayed(this.audio); // prepare for loading audio\n // this.readyPromise.then(() => {\n // if(appMediaPlaybackController.willBePlayedMedia !== this.audio && this.audio.paused) {\n // return;\n // }\n\n // appMediaPlaybackController.willBePlayed(undefined);\n\n // this.audio.currentTime = timestamp;\n // this.togglePlay(undefined, true);\n // });\n }\n\n get addAudioListener() {\n return this.listenerSetter.add(this.audio);\n }\n\n disconnectedCallback() {\n setTimeout(() => {\n if(this.isConnected) {\n return;\n }\n\n if(this.onTypeDisconnect) {\n this.onTypeDisconnect();\n this.onTypeDisconnect = null;\n }\n\n if(this.readyPromise) {\n this.readyPromise.reject();\n }\n\n if(this.listenerSetter) {\n this.listenerSetter.removeAll();\n this.listenerSetter = null;\n }\n\n if(this.preloader) {\n this.preloader = null;\n }\n }, 100);\n }\n}\n\ncustomElements.define('audio-element', AudioElement);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport contextMenuController from '../helpers/contextMenuController';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {AttachClickOptions, CLICK_EVENT_NAME, hasMouseMovedSinceDown} from '../helpers/dom/clickEvent';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport ButtonIcon from './buttonIcon';\nimport ButtonMenu, {ButtonMenuItemOptionsVerifiable} from './buttonMenu';\nimport filterAsync from '../helpers/array/filterAsync';\nimport {doubleRaf} from '../helpers/schedulers';\nimport callbackify from '../helpers/callbackify';\n\n// TODO: refactor for attachClickEvent, because if move finger after touchstart, it will start anyway\nexport function ButtonMenuToggleHandler({\n el,\n onOpen,\n options,\n onClose\n}: {\n el: HTMLElement,\n onOpen?: (e: Event) => any,\n options?: AttachClickOptions,\n onClose?: () => void\n}) {\n const add = options?.listenerSetter ? options.listenerSetter.add(el) : el.addEventListener.bind(el);\n\n add(CLICK_EVENT_NAME, (e: Event) => {\n if(!el.classList.contains('btn-menu-toggle') || hasMouseMovedSinceDown(e)) return false;\n\n cancelEvent(e);\n\n if(el.classList.contains('menu-open')) {\n contextMenuController.close();\n } else {\n const result = onOpen?.(e);\n const open = () => {\n const openedMenu = el.querySelector('.btn-menu') as HTMLDivElement;\n if(!openedMenu) {\n return;\n }\n\n contextMenuController.openBtnMenu(openedMenu, onClose);\n };\n\n callbackify(result, open);\n }\n });\n}\n\nexport function filterButtonMenuItems(buttons: ButtonMenuItemOptionsVerifiable[]) {\n return filterAsync(buttons, (button) => button?.verify ? button.verify() ?? false : true);\n}\n\nexport default function ButtonMenuToggle({\n buttonOptions,\n listenerSetter: attachListenerSetter,\n container,\n direction,\n buttons,\n onOpenBefore,\n onOpen,\n onClose,\n onCloseAfter,\n noIcon,\n icon = 'more'\n}: {\n buttonOptions?: Parameters[1],\n listenerSetter?: ListenerSetter,\n container?: HTMLElement\n direction: 'bottom-left' | 'bottom-right' | 'top-left' | 'top-right',\n buttons: ButtonMenuItemOptionsVerifiable[],\n onOpenBefore?: (e: Event) => any,\n onOpen?: (e: Event, element: HTMLElement) => any,\n onClose?: () => void,\n onCloseAfter?: () => void,\n noIcon?: boolean,\n icon?: string\n}) {\n if(buttonOptions) {\n buttonOptions.asDiv = true;\n }\n\n const button = container ?? ButtonIcon(noIcon ? undefined : icon, buttonOptions);\n button.classList.add('btn-menu-toggle');\n\n const listenerSetter = new ListenerSetter();\n\n const clearCloseTimeout = () => {\n clearTimeout(closeTimeout);\n closeTimeout = undefined;\n };\n\n let element: HTMLElement, closeTimeout: number, tempId = 0;\n ButtonMenuToggleHandler({\n el: button,\n onOpen: async(e) => {\n const _tempId = ++tempId;\n await onOpenBefore?.(e);\n if(_tempId !== tempId) return;\n if(closeTimeout) {\n clearCloseTimeout();\n return;\n }\n\n const filteredButtons = await filterButtonMenuItems(buttons);\n if(_tempId !== tempId) return;\n if(!filteredButtons.length) {\n return;\n }\n\n const _element = element = await ButtonMenu({\n buttons: filteredButtons,\n listenerSetter\n });\n if(_tempId !== tempId) return;\n _element.classList.add(direction);\n\n await onOpen?.(e, _element);\n if(_tempId !== tempId) return;\n\n button.append(_element);\n await doubleRaf();\n if(_tempId !== tempId) {\n _element.remove();\n }\n },\n options: {\n listenerSetter: attachListenerSetter\n },\n onClose: () => {\n ++tempId;\n clearCloseTimeout();\n onClose?.();\n\n closeTimeout = window.setTimeout(() => {\n onCloseAfter?.();\n closeTimeout = undefined;\n listenerSetter.removeAll();\n buttons.forEach((button) => button.element = undefined);\n element.remove();\n }, 300);\n }\n });\n\n return button;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport EventListenerBase from '../eventListenerBase';\nimport ListenerSetter from '../listenerSetter';\nimport safeAssign from '../object/safeAssign';\nimport findUpClassName from './findUpClassName';\n\nexport default class ControlsHover extends EventListenerBase<{\n toggleControls: (show: boolean) => void\n}> {\n protected hideControlsTimeout: number;\n protected controlsLocked: boolean;\n\n protected canHideControls: () => boolean;\n protected element: HTMLElement;\n protected listenerSetter: ListenerSetter;\n protected showOnLeaveToClassName: string;\n protected ignoreClickClassName: string;\n\n constructor() {\n super(false);\n this.hideControlsTimeout = 0;\n }\n\n public setup(options: {\n element: HTMLElement,\n listenerSetter: ListenerSetter,\n canHideControls?: () => boolean,\n showOnLeaveToClassName?: string,\n ignoreClickClassName?: string\n }) {\n safeAssign(this, options);\n\n const {listenerSetter, element} = this;\n\n if(IS_TOUCH_SUPPORTED) {\n listenerSetter.add(element)('click', (e) => {\n if(this.ignoreClickClassName && findUpClassName(e.target, this.ignoreClickClassName)) {\n return;\n }\n\n this.toggleControls();\n });\n\n /* listenerSetter.add(player)('touchstart', () => {\n showControls(false);\n });\n\n listenerSetter.add(player)('touchend', () => {\n if(player.classList.contains('is-playing')) {\n showControls();\n }\n }); */\n } else {\n listenerSetter.add(element)('mousemove', () => {\n this.showControls();\n });\n\n listenerSetter.add(element)('mouseenter', () => {\n this.showControls(false);\n });\n\n listenerSetter.add(element)('mouseleave', (e) => {\n if(e.relatedTarget && this.showOnLeaveToClassName && findUpClassName(e.relatedTarget, this.showOnLeaveToClassName)) {\n this.showControls(false);\n return;\n }\n\n this.hideControls();\n });\n }\n }\n\n public hideControls = (setHideTimeout = false) => {\n if(setHideTimeout) {\n if(!this.hideControlsTimeout) {\n this.hideControlsTimeout = window.setTimeout(this.hideControls, 3e3);\n }\n\n return;\n }\n\n clearTimeout(this.hideControlsTimeout);\n this.hideControlsTimeout = 0;\n\n const isShown = this.element.classList.contains('show-controls');\n if(this.controlsLocked !== false) {\n if((this.canHideControls ? !this.canHideControls() : false) || !isShown || this.controlsLocked) {\n return;\n }\n } else if(!isShown) {\n return;\n }\n\n this.dispatchEvent('toggleControls', false);\n this.element.classList.remove('show-controls');\n };\n\n public showControls = (setHideTimeout = true) => {\n if(this.hideControlsTimeout) {\n clearTimeout(this.hideControlsTimeout);\n this.hideControlsTimeout = 0;\n } else if(!this.element.classList.contains('show-controls') && this.controlsLocked !== false) {\n this.dispatchEvent('toggleControls', true);\n this.element.classList.add('show-controls');\n }\n\n if(!setHideTimeout || this.controlsLocked) {\n return;\n }\n\n this.hideControlsTimeout = window.setTimeout(this.hideControls, 3e3);\n };\n\n public toggleControls = (show?: boolean) => {\n const isShown = this.element.classList.contains('show-controls');\n\n if(show === undefined) {\n if(isShown) this.hideControls();\n else this.showControls();\n } else if(show === isShown) return;\n else if(show === false) this.hideControls();\n else this.showControls();\n };\n\n public lockControls(visible: boolean) {\n if(this.controlsLocked === visible) {\n return;\n }\n\n this.controlsLocked = visible;\n this.element.classList.toggle('disable-hover', visible === false);\n this.toggleControls(visible);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport safeAssign from '../helpers/object/safeAssign';\nimport {_tgico} from '../helpers/tgico';\nimport appMediaPlaybackController from './appMediaPlaybackController';\nimport {replaceButtonIcon} from './button';\nimport RangeSelector from './rangeSelector';\n\nconst className = 'player-volume';\n\nexport default class VolumeSelector extends RangeSelector {\n private static ICONS: Icon[] = ['volume_off', 'volume_mute', 'volume_down', 'volume_up'];\n public btn: HTMLElement;\n protected icon: HTMLSpanElement;\n protected listenerSetter: ListenerSetter;\n protected vertical: boolean;\n protected media: HTMLMediaElement;\n protected useGlobalVolume: 'auto' | 'no-init';\n protected onVolumeChange: (type: 'global' | 'click') => void;\n protected ignoreGlobalEvents: boolean;\n\n constructor(options: {\n listenerSetter: ListenerSetter,\n useGlobalVolume?: VolumeSelector['useGlobalVolume'],\n vertical?: boolean,\n media?: HTMLMediaElement,\n onVolumeChange?: VolumeSelector['onVolumeChange']\n }) {\n super({\n step: 0.01,\n min: 0,\n max: 1,\n vertical: options.vertical\n }, 1);\n\n safeAssign(this, options);\n\n this.setListeners();\n this.setHandlers({\n onScrub: (_value) => {\n const value = Math.max(Math.min(_value, 1), 0);\n\n if(this.useGlobalVolume) {\n this.modifyGlobal(() => {\n appMediaPlaybackController.muted = false;\n appMediaPlaybackController.volume = value;\n });\n }\n\n this.setVolume({volume: value, muted: false, eventType: 'click'});\n }\n\n /* onMouseUp: (e) => {\n cancelEvent(e.event);\n } */\n });\n\n const btn = this.btn = document.createElement('div');\n btn.classList.add('btn-icon', className);\n\n attachClickEvent(btn, (e) => {\n if(!findUpClassName(e.target, className + '__icon')) {\n return;\n }\n\n this.onMuteClick(e);\n }, {listenerSetter: this.listenerSetter});\n\n if(this.useGlobalVolume) {\n this.listenerSetter.add(appMediaPlaybackController)('playbackParams', (params) => {\n if(this.ignoreGlobalEvents) {\n return;\n }\n\n this.setVolume({...params, eventType: 'global'});\n });\n\n if(this.useGlobalVolume === 'no-init') {\n this.setVolume({volume: appMediaPlaybackController.volume, muted: this.media.muted});\n } else {\n this.setGlobalVolume();\n }\n } else if(this.media) {\n this.setVolume({volume: this.media.volume, muted: this.media.muted});\n }\n\n btn.append(this.container);\n }\n\n public removeListeners() {\n super.removeListeners();\n this.onVolumeChange = undefined;\n }\n\n private modifyGlobal(callback: () => void) {\n this.ignoreGlobalEvents = true;\n callback();\n this.ignoreGlobalEvents = false;\n }\n\n private onMuteClick(e?: Event) {\n e && cancelEvent(e);\n\n if(this.useGlobalVolume) {\n this.modifyGlobal(() => {\n appMediaPlaybackController.muted = !appMediaPlaybackController.muted;\n });\n }\n\n this.setVolume({volume: this.media.volume, muted: !this.media.muted, eventType: 'click'});\n }\n\n public setVolume = ({volume, muted, eventType}: {volume: number, muted: boolean, eventType?: 'global' | 'click'}) => {\n let iconIndex: number;\n if(!volume || muted) {\n iconIndex = 0;\n } else if(volume > .5) {\n iconIndex = 3;\n } else if(volume > 0 && volume < .25) {\n iconIndex = 1;\n } else {\n iconIndex = 2;\n }\n\n const newIcon = replaceButtonIcon(this.btn, VolumeSelector.ICONS[iconIndex]);\n newIcon.classList.add(className + '__icon');\n\n if(this.media) {\n this.media.volume = volume;\n this.media.muted = muted;\n }\n\n if(!this.mousedown) {\n this.setProgress(muted ? 0 : volume);\n }\n\n eventType && this.onVolumeChange?.(eventType);\n };\n\n public setGlobalVolume = (eventType?: Parameters[0]['eventType']) => {\n const {volume, muted} = appMediaPlaybackController;\n return this.setVolume({volume, muted, eventType});\n };\n}\n","export default function createCanvasStream({width = 0, height = 0, image}: Partial<{width: number, height: number, image: CanvasImageSource}> = {}) {\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const stream = canvas.captureStream();\n stream.getVideoTracks()[0].enabled = true;\n const context = canvas.getContext('2d');\n if(image) {\n context.drawImage(image, 0, 0, width, height);\n context.globalAlpha = 0.5;\n context.fillStyle = '#000';\n context.fillRect(0, 0, width, height);\n } else {\n context.fillRect(0, 0, width, height);\n }\n return stream;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appMediaPlaybackController from '../components/appMediaPlaybackController';\nimport {IS_APPLE_MOBILE, IS_MOBILE} from '../environment/userAgent';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport ListenerSetter, {Listener} from '../helpers/listenerSetter';\nimport {ButtonMenuItemOptionsVerifiable, ButtonMenuSync} from '../components/buttonMenu';\nimport ButtonMenuToggle, {ButtonMenuToggleHandler} from '../components/buttonMenuToggle';\nimport ControlsHover from '../helpers/dom/controlsHover';\nimport {addFullScreenListener, cancelFullScreen, getFullScreenElement, isFullScreen, requestFullScreen} from '../helpers/dom/fullScreen';\nimport toHHMMSS from '../helpers/string/toHHMMSS';\nimport MediaProgressLine from '../components/mediaProgressLine';\nimport VolumeSelector from '../components/volumeSelector';\nimport debounce from '../helpers/schedulers/debounce';\nimport overlayCounter from '../helpers/overlayCounter';\nimport onMediaLoad from '../helpers/onMediaLoad';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport safePlay from '../helpers/dom/safePlay';\nimport ButtonIcon from '../components/buttonIcon';\nimport Button from '../components/button';\nimport Icon from '../components/icon';\nimport setCurrentTime from '../helpers/dom/setCurrentTime';\nimport {i18n} from './langPack';\nimport {numberThousandSplitterForWatching} from '../helpers/number/numberThousandSplitter';\nimport createCanvasStream from '../helpers/canvas/createCanvasStream';\nimport simulateEvent from '../helpers/dom/dispatchEvent';\nimport indexOfAndSplice from '../helpers/array/indexOfAndSplice';\n\nexport const PlaybackRateButton = (options: {\n onPlaybackRateMenuToggle?: (open: boolean) => void,\n direction: string\n}) => {\n const PLAYBACK_RATES = [0.5, 1, 1.5, 2];\n const PLAYBACK_RATES_ICONS: Icon[] = ['playback_05', 'playback_1x', 'playback_15', 'playback_2x'];\n const button = ButtonIcon(` btn-menu-toggle`, {noRipple: true});\n\n const setIcon = () => {\n const playbackRateButton = button;\n\n let idx = PLAYBACK_RATES.indexOf(appMediaPlaybackController.playbackRate);\n if(idx === -1) idx = PLAYBACK_RATES.indexOf(1);\n\n const icon = Icon(PLAYBACK_RATES_ICONS[idx]);\n if(playbackRateButton.firstElementChild) {\n playbackRateButton.firstElementChild.replaceWith(icon);\n } else {\n playbackRateButton.append(icon);\n }\n };\n\n const setBtnMenuToggle = () => {\n const buttons = PLAYBACK_RATES.map((rate, idx) => {\n const buttonOptions: Parameters[0]['buttons'][0] = {\n // icon: PLAYBACK_RATES_ICONS[idx],\n regularText: rate + 'x',\n onClick: () => {\n appMediaPlaybackController.playbackRate = rate;\n }\n };\n\n return buttonOptions;\n });\n const btnMenu = ButtonMenuSync({buttons});\n btnMenu.classList.add(options.direction, 'playback-rate-menu');\n ButtonMenuToggleHandler({\n el: button,\n onOpen: options.onPlaybackRateMenuToggle ? () => {\n options.onPlaybackRateMenuToggle(true);\n } : undefined,\n onClose: options.onPlaybackRateMenuToggle ? () => {\n options.onPlaybackRateMenuToggle(false);\n } : undefined\n });\n setIcon();\n button.append(btnMenu);\n };\n\n const addRate = (add: number) => {\n const playbackRate = appMediaPlaybackController.playbackRate;\n const idx = PLAYBACK_RATES.indexOf(playbackRate);\n const nextIdx = idx + add;\n if(nextIdx >= 0 && nextIdx < PLAYBACK_RATES.length) {\n appMediaPlaybackController.playbackRate = PLAYBACK_RATES[nextIdx];\n }\n };\n\n const isMenuOpen = () => {\n return button.classList.contains('menu-open');\n };\n\n setBtnMenuToggle();\n return {element: button, setIcon, addRate, isMenuOpen};\n};\n\nexport default class VideoPlayer extends ControlsHover {\n public video: HTMLVideoElement;\n protected wrapper: HTMLElement;\n protected progress: MediaProgressLine;\n protected skin: 'default';\n protected live: boolean;\n\n protected listenerSetter: ListenerSetter;\n protected playbackRateButton: ReturnType;\n protected pipButton: HTMLElement;\n protected liveMenuButton: HTMLElement;\n protected toggles: HTMLElement[];\n protected mainToggle: HTMLElement;\n protected controls: HTMLElement;\n protected gradient: HTMLElement;\n public liveEl: HTMLElement;\n\n /* protected videoParent: HTMLElement;\n protected videoWhichChild: number; */\n\n protected onPlaybackRateMenuToggle?: (open: boolean) => void;\n protected onPip?: (pip: boolean) => void;\n protected onPipClose?: () => void;\n protected onVolumeChange: VolumeSelector['onVolumeChange'];\n protected onFullScreen: (active: boolean) => void;\n protected onFullScreenToPip: () => void;\n\n protected canPause: boolean;\n protected canSeek: boolean;\n\n protected _inPip = false;\n\n protected _width: number;\n protected _height: number;\n\n protected emptyPipVideo: HTMLVideoElement;\n protected debouncedPip: (pip: boolean) => void;\n protected debouncePipTime: number;\n public emptyPipVideoSource: CanvasImageSource;\n\n protected listenKeyboardEvents: 'always' | 'fullscreen';\n protected hadContainer: boolean;\n protected useGlobalVolume: VolumeSelector['useGlobalVolume'];\n public volumeSelector: VolumeSelector;\n protected isPlaying: boolean;\n protected shouldEnableSoundOnClick: () => boolean;\n\n constructor({\n video,\n container,\n play = false,\n streamable = false,\n duration,\n live,\n width,\n height,\n onPlaybackRateMenuToggle,\n onPip,\n onPipClose,\n listenKeyboardEvents,\n useGlobalVolume,\n onVolumeChange,\n onFullScreen,\n onFullScreenToPip,\n shouldEnableSoundOnClick\n }: {\n video: HTMLVideoElement,\n container?: HTMLElement,\n play?: boolean,\n streamable?: boolean,\n duration?: number,\n live?: boolean,\n width?: number,\n height?: number,\n onPlaybackRateMenuToggle?: VideoPlayer['onPlaybackRateMenuToggle'],\n onPip?: VideoPlayer['onPip'],\n onPipClose?: VideoPlayer['onPipClose'],\n listenKeyboardEvents?: VideoPlayer['listenKeyboardEvents'],\n useGlobalVolume?: VolumeSelector['useGlobalVolume'],\n onVolumeChange?: VideoPlayer['onVolumeChange'],\n onFullScreen?: (active: boolean) => void,\n onFullScreenToPip?: VideoPlayer['onFullScreenToPip'],\n shouldEnableSoundOnClick?: VideoPlayer['shouldEnableSoundOnClick']\n }) {\n super();\n\n this.video = video;\n this.video.classList.add('ckin__video');\n this.wrapper = container ?? document.createElement('div');\n this.wrapper.classList.add('ckin__player');\n this.live = live;\n this.canPause = !live;\n this.canSeek = !live;\n this._width = width;\n this._height = height;\n\n this.onPlaybackRateMenuToggle = onPlaybackRateMenuToggle;\n this.onPip = onPip;\n this.onPipClose = onPipClose;\n this.onVolumeChange = onVolumeChange;\n this.onFullScreen = onFullScreen;\n this.onFullScreenToPip = onFullScreenToPip;\n\n this.listenKeyboardEvents = listenKeyboardEvents;\n this.hadContainer = !!container;\n this.useGlobalVolume = useGlobalVolume;\n this.shouldEnableSoundOnClick = shouldEnableSoundOnClick;\n\n this.listenerSetter = new ListenerSetter();\n\n this.setup({\n element: this.wrapper,\n listenerSetter: this.listenerSetter,\n canHideControls: () => {\n return !this.video.paused && (!this.playbackRateButton || !this.playbackRateButton.isMenuOpen());\n },\n showOnLeaveToClassName: 'media-viewer-caption',\n ignoreClickClassName: 'ckin__controls'\n });\n\n if(!this.hadContainer) {\n video.parentNode.insertBefore(this.wrapper, video);\n this.wrapper.appendChild(video);\n }\n\n this.skin = 'default';\n\n this.stylePlayer(duration);\n\n if(this.skin === 'default' && !live) {\n const controls = this.controls = this.wrapper.querySelector('.default__controls.ckin__controls') as HTMLDivElement;\n this.gradient = this.controls.previousElementSibling as HTMLElement;\n this.progress = new MediaProgressLine({\n onSeekStart: () => {\n this.wrapper.classList.add('is-seeking');\n },\n onSeekEnd: () => {\n this.wrapper.classList.remove('is-seeking');\n }\n });\n this.progress.setMedia({\n media: video,\n streamable,\n duration\n });\n controls.prepend(this.progress.container);\n }\n\n if(play/* && video.paused */) {\n video.play().catch((err: Error) => {\n if(err.name === 'NotAllowedError') {\n video.muted = true;\n video.autoplay = true;\n safePlay(video);\n }\n }).finally(() => { // due to autoplay, play will not call\n this.setIsPlaing(!this.video.paused);\n });\n } else {\n this.setIsPlaing(!this.video.paused);\n }\n }\n\n public get width() {\n return this.video.videoWidth || this._width;\n }\n\n public get height() {\n return this.video.videoHeight || this._height;\n }\n\n private setIsPlaing(isPlaying: boolean) {\n if(this.isPlaying === isPlaying) {\n return;\n }\n\n this.isPlaying = isPlaying;\n\n if(this.live && !isPlaying) {\n return;\n }\n\n this.wrapper.classList.toggle('is-playing', isPlaying);\n this.toggles.forEach((toggle) => {\n toggle.replaceChildren(Icon(isPlaying ? 'pause' : 'play'));\n });\n }\n\n private stylePlayer(initDuration: number) {\n const {wrapper, video, skin, listenerSetter, live} = this;\n\n wrapper.classList.add(skin);\n if(live) wrapper.classList.add(`${skin}-live`);\n\n const html = this.buildControls();\n wrapper.insertAdjacentHTML('beforeend', html);\n let timeDuration: HTMLElement;\n\n const onPlayCallbacks: (() => void)[] = [], onPauseCallbacks: (() => void)[] = [];\n if(skin === 'default') {\n if(this.canPause) {\n const mainToggle = this.mainToggle = Button(`${skin}__button--big toggle`, {noRipple: true, icon: 'play'});\n wrapper.firstElementChild.after(mainToggle);\n }\n\n const leftControls = wrapper.querySelector('.left-controls') as HTMLElement;\n if(live) {\n this.toggles = [];\n } else {\n const leftToggle = ButtonIcon(` ${skin}__button toggle`, {noRipple: true});\n leftControls.prepend(leftToggle);\n this.toggles = [leftToggle];\n }\n\n const rightControls = wrapper.querySelector('.right-controls') as HTMLElement;\n if(!live) {\n this.playbackRateButton = PlaybackRateButton({direction: 'top-left', onPlaybackRateMenuToggle: this.onPlaybackRateMenuToggle});\n this.playbackRateButton.element.classList.add(`${skin}__button`);\n }\n if(!IS_MOBILE && document.pictureInPictureEnabled) {\n this.pipButton = ButtonIcon(`pip ${skin}__button`, {noRipple: true});\n }\n const fullScreenButton = ButtonIcon(` ${skin}__button`, {noRipple: true});\n rightControls.append(...[this.playbackRateButton?.element, this.pipButton, fullScreenButton].filter(Boolean));\n\n const timeElapsed = wrapper.querySelector('.ckin__time-elapsed');\n timeDuration = wrapper.querySelector('.ckin__time-duration') as HTMLElement;\n\n const volumeSelector = this.volumeSelector = new VolumeSelector({\n listenerSetter,\n vertical: false,\n media: video,\n useGlobalVolume: this.useGlobalVolume,\n onVolumeChange: this.onVolumeChange\n });\n\n volumeSelector.btn.classList.remove('btn-icon');\n if(timeElapsed) {\n timeElapsed.parentElement.before(volumeSelector.btn);\n } else {\n leftControls.lastElementChild.before(volumeSelector.btn);\n }\n\n this.toggles.forEach((button) => {\n attachClickEvent(button, () => {\n this.togglePlay();\n }, {listenerSetter: this.listenerSetter});\n });\n\n if(this.pipButton) {\n attachClickEvent(this.pipButton, this.requestPictureInPicture, {listenerSetter: this.listenerSetter});\n\n this.debouncePipTime = 20;\n this.debouncedPip = debounce(this._onPip, this.debouncePipTime, false, true);\n\n this.addPipListeners(video);\n }\n\n if(!IS_TOUCH_SUPPORTED) {\n if(this.canPause) {\n attachClickEvent(video, () => {\n if(this.checkInteraction()) {\n return;\n }\n\n this.togglePlay();\n }, {listenerSetter: this.listenerSetter});\n }\n\n if(this.listenKeyboardEvents) listenerSetter.add(document)('keydown', (e: KeyboardEvent) => {\n if(\n overlayCounter.overlaysActive > 1 ||\n document.pictureInPictureElement === video ||\n (this.listenKeyboardEvents === 'fullscreen' && !this.isFullScreen())\n ) { // forward popup is active, etc\n return;\n }\n\n const {key, code} = e;\n\n let good = true;\n if(code === 'KeyF') {\n this.toggleFullScreen();\n } else if(code === 'KeyM') {\n appMediaPlaybackController.muted = !appMediaPlaybackController.muted;\n } else if(code === 'Space' && this.canPause) {\n this.togglePlay();\n } else if(e.altKey && (code === 'Equal' || code === 'Minus') && this.canSeek) {\n const add = code === 'Equal' ? 1 : -1;\n this.playbackRateButton.addRate(add);\n } else if(wrapper.classList.contains('ckin__fullscreen') && (key === 'ArrowLeft' || key === 'ArrowRight') && this.canSeek) {\n if(key === 'ArrowLeft') appMediaPlaybackController.seekBackward({action: 'seekbackward'});\n else appMediaPlaybackController.seekForward({action: 'seekforward'});\n } else {\n good = false;\n }\n\n if(good) {\n cancelEvent(e);\n return false;\n }\n });\n }\n\n listenerSetter.add(video)('dblclick', () => {\n if(!IS_TOUCH_SUPPORTED) {\n this.toggleFullScreen();\n }\n });\n\n attachClickEvent(fullScreenButton, () => {\n this.toggleFullScreen();\n }, {listenerSetter: this.listenerSetter});\n\n addFullScreenListener(wrapper, () => this._onFullScreen(fullScreenButton), listenerSetter);\n this._onFullScreen(fullScreenButton, true);\n\n if(timeElapsed) {\n listenerSetter.add(video)('timeupdate', () => {\n if(!video.paused && !this.isPlaying) {\n console.warn('video: fixing missing play event');\n simulateEvent(video, 'play');\n }\n\n timeElapsed.textContent = toHHMMSS(video.currentTime | 0);\n });\n }\n\n const onPlay = () => {\n wrapper.classList.add('played');\n\n if(!IS_TOUCH_SUPPORTED && !live) {\n onPlayCallbacks.push(() => {\n this.hideControls(true);\n });\n }\n\n indexOfAndSplice(onPlayCallbacks, onPlay);\n };\n\n if(this.hadContainer) {\n onPlay();\n }\n\n onPlayCallbacks.push(onPlay);\n onPauseCallbacks.push(() => {\n this.showControls(false);\n });\n\n listenerSetter.add(appMediaPlaybackController)('playbackParams', () => {\n this.playbackRateButton.setIcon();\n });\n\n if(live) {\n this.liveEl = i18n('Rtmp.MediaViewer.Live');\n this.liveEl.classList.add('controls-live');\n leftControls.prepend(this.liveEl);\n }\n }\n\n listenerSetter.add(video)('play', () => {\n this.setIsPlaing(true);\n onPlayCallbacks.forEach((cb) => cb());\n });\n\n listenerSetter.add(video)('pause', () => {\n this.setIsPlaing(false);\n onPauseCallbacks.forEach((cb) => cb());\n });\n\n if(timeDuration) {\n if(video.duration || initDuration) {\n timeDuration.textContent = toHHMMSS(Math.round(video.duration || initDuration));\n } else {\n onMediaLoad(video).then(() => {\n timeDuration.textContent = toHHMMSS(Math.round(video.duration));\n });\n }\n }\n }\n\n protected checkInteraction() {\n if(this.shouldEnableSoundOnClick?.()) {\n this.volumeSelector.setVolume({volume: 1, muted: false});\n return true;\n }\n\n return false;\n }\n\n protected _onPip = (pip: boolean) => {\n this._inPip = pip;\n this.wrapper.style.visibility = pip ? 'hidden': '';\n this.onPip?.(pip);\n };\n\n protected onEnterPictureInPictureLeave = (e: Event) => {\n const onPause = () => {\n clearTimeout(timeout);\n this.onPipClose?.();\n };\n const listener = this.listenerSetter.add(e.target)('pause', onPause, {once: true}) as any as Listener;\n const timeout = setTimeout(() => {\n this.listenerSetter.remove(listener);\n }, this.debouncePipTime);\n };\n\n protected onEnterPictureInPicture = (e: Event) => {\n this.debouncedPip(true);\n this.listenerSetter.add(e.target)('leavepictureinpicture', this.onEnterPictureInPictureLeave, {once: true});\n };\n\n protected onLeavePictureInPicture = () => {\n this.debouncedPip(false);\n };\n\n protected addPipListeners(video: HTMLVideoElement) {\n this.listenerSetter.add(video)('enterpictureinpicture', this.onEnterPictureInPicture);\n this.listenerSetter.add(video)('leavepictureinpicture', this.onLeavePictureInPicture);\n }\n\n public requestPictureInPicture = async() => {\n if(this.video.duration) {\n if(this.isFullScreen()) {\n this.onFullScreenToPip?.();\n }\n\n this.video.requestPictureInPicture();\n this.checkInteraction();\n return;\n }\n\n if(!this.emptyPipVideo) {\n const {width, height} = this;\n this.emptyPipVideo = document.createElement('video');\n this.emptyPipVideo.autoplay = true;\n this.emptyPipVideo.muted = true;\n this.emptyPipVideo.playsInline = true;\n this.emptyPipVideo.style.position = 'absolute';\n this.emptyPipVideo.style.visibility = 'hidden';\n document.body.prepend(this.emptyPipVideo);\n this.emptyPipVideo.srcObject = createCanvasStream({width, height, image: this.emptyPipVideoSource});\n this.addPipListeners(this.emptyPipVideo);\n }\n\n await onMediaLoad(this.emptyPipVideo);\n this.emptyPipVideo.requestPictureInPicture();\n\n onMediaLoad(this.video).then(() => {\n if(document.pictureInPictureElement === this.emptyPipVideo) {\n document.exitPictureInPicture();\n this.video.requestPictureInPicture();\n }\n });\n };\n\n protected togglePlay(isPaused = this.video.paused) {\n this.video[isPaused ? 'play' : 'pause']();\n }\n\n private buildControls() {\n const skin = this.skin;\n\n if(skin === 'default') {\n const time = this.live ? `\n \n ` : `\n \n / \n \n `\n\n return `\n
\n
\n
\n
\n
\n ${time}\n
\n
\n
\n
\n
`;\n }\n }\n\n public cancelFullScreen() {\n if(getFullScreenElement() === this.wrapper) {\n this.toggleFullScreen();\n }\n }\n\n protected toggleFullScreen() {\n const player = this.wrapper;\n\n // * https://caniuse.com/#feat=fullscreen\n if(IS_APPLE_MOBILE) {\n const video = this.video as any;\n video.webkitEnterFullscreen();\n video.enterFullscreen();\n return;\n }\n\n if(!isFullScreen()) {\n /* const videoParent = this.video.parentElement;\n const videoWhichChild = whichChild(this.video);\n const needVideoRemount = videoParent !== player;\n\n if(needVideoRemount) {\n this.videoParent = videoParent;\n this.videoWhichChild = videoWhichChild;\n player.prepend(this.video);\n } */\n\n requestFullScreen(player);\n this.checkInteraction();\n } else {\n /* if(this.videoParent) {\n const {videoWhichChild, videoParent} = this;\n if(!videoWhichChild) {\n videoParent.prepend(this.video);\n } else {\n videoParent.insertBefore(this.video, videoParent.children[videoWhichChild]);\n }\n\n this.videoParent = null;\n this.videoWhichChild = -1;\n } */\n\n cancelFullScreen();\n }\n }\n\n public isFullScreen() {\n return isFullScreen();\n }\n\n protected _onFullScreen(fullScreenButton: HTMLElement, noEvent?: boolean) {\n const isFull = isFullScreen();\n this.wrapper.classList.toggle('ckin__fullscreen', isFull);\n if(!isFull) {\n fullScreenButton.replaceChildren(Icon('fullscreen'));\n fullScreenButton.setAttribute('title', 'Full Screen');\n } else {\n fullScreenButton.replaceChildren(Icon('smallscreen'));\n fullScreenButton.setAttribute('title', 'Exit Full Screen');\n }\n\n !noEvent && this.onFullScreen?.(isFull);\n }\n\n public dimBackground() {\n this.wrapper.classList.add('dim-background');\n }\n\n public setTimestamp(timestamp: number) {\n setCurrentTime(this.video, timestamp);\n this.togglePlay(true);\n }\n\n public cleanup() {\n super.cleanup();\n this.listenerSetter.removeAll();\n this.progress?.removeListeners();\n this.volumeSelector?.removeListeners();\n this.onPlaybackRateMenuToggle =\n this.onPip =\n this.onVolumeChange =\n this.onFullScreen =\n this.onFullScreenToPip =\n this.shouldEnableSoundOnClick =\n undefined;\n }\n\n public unmount() {\n [this.mainToggle, this.gradient, this.controls].forEach((element) => {\n element.remove();\n });\n }\n\n public setupLiveMenu(buttons: ButtonMenuItemOptionsVerifiable[]) {\n this.liveMenuButton = ButtonMenuToggle({\n direction: 'top-left',\n buttons: buttons,\n buttonOptions: {\n noRipple: true\n }\n });\n this.wrapper.querySelector('.right-controls').prepend(this.liveMenuButton);\n }\n\n public updateLiveViewersCount(count: number) {\n this.wrapper.querySelector('.left-controls-watching').replaceChildren(i18n('Rtmp.Watching', [numberThousandSplitterForWatching(Math.max(1, count))]));\n }\n\n get inPip() {\n return this._inPip;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {IS_SAFARI} from '../../environment/userAgent';\nimport {IS_H265_SUPPORTED} from '../../environment/videoSupport';\nimport {animateSingle} from '../../helpers/animation';\nimport {ChatAutoDownloadSettings} from '../../helpers/autoDownload';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport createVideo from '../../helpers/dom/createVideo';\nimport handleVideoLeak from '../../helpers/dom/handleVideoLeak';\nimport isInDOM from '../../helpers/dom/isInDOM';\nimport renderImageFromUrl from '../../helpers/dom/renderImageFromUrl';\nimport safePlay from '../../helpers/dom/safePlay';\nimport setCurrentTime from '../../helpers/dom/setCurrentTime';\nimport getMediaThumbIfNeeded from '../../helpers/getStrippedThumbIfNeeded';\nimport liteMode from '../../helpers/liteMode';\nimport makeError from '../../helpers/makeError';\nimport mediaSizes, {ScreenSize} from '../../helpers/mediaSizes';\nimport {getMiddleware, Middleware, MiddlewareHelper} from '../../helpers/middleware';\nimport noop from '../../helpers/noop';\nimport onMediaLoad, {shouldIgnoreVideoError} from '../../helpers/onMediaLoad';\nimport {fastRaf} from '../../helpers/schedulers';\nimport throttle from '../../helpers/schedulers/throttle';\nimport sequentialDom from '../../helpers/sequentialDom';\nimport toHHMMSS from '../../helpers/string/toHHMMSS';\nimport {Message, PhotoSize, VideoSize} from '../../layer';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport {NULL_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport rootScope from '../../lib/rootScope';\nimport {ThumbCache} from '../../lib/storages/thumbs';\nimport animationIntersector, {AnimationItemGroup} from '../animationIntersector';\nimport appMediaPlaybackController, {AppMediaPlaybackController, MediaSearchContext} from '../appMediaPlaybackController';\nimport AudioElement, {findMediaTargets} from '../audio';\nimport Button from '../button';\nimport Icon from '../icon';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport ProgressivePreloader from '../preloader';\nimport wrapPhoto from './photo';\nimport SuperIntersectionObserver, {IntersectionCallback} from '../../helpers/dom/superIntersectionObserver';\nimport VideoPlayer from '../../lib/mediaPlayer';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {isFullScreen} from '../../helpers/dom/fullScreen';\nimport ButtonIcon from '../buttonIcon';\nimport overlayCounter from '../../helpers/overlayCounter';\n\nconst MAX_VIDEO_AUTOPLAY_SIZE = 50 * 1024 * 1024; // 50 MB\nconst USE_OBSERVER = false;\n\nlet roundVideoCircumference = 0;\nmediaSizes.addEventListener('changeScreen', (from, to) => {\n if(to === ScreenSize.mobile || from === ScreenSize.mobile) {\n const elements = Array.from(document.querySelectorAll('.media-round .progress-ring')) as SVGSVGElement[];\n const width = mediaSizes.active.round.width;\n const halfSize = width / 2;\n const radius = halfSize - 7;\n roundVideoCircumference = 2 * Math.PI * radius;\n elements.forEach((element) => {\n element.setAttributeNS(null, 'width', '' + width);\n element.setAttributeNS(null, 'height', '' + width);\n\n const circle = element.firstElementChild as SVGCircleElement;\n circle.setAttributeNS(null, 'cx', '' + halfSize);\n circle.setAttributeNS(null, 'cy', '' + halfSize);\n circle.setAttributeNS(null, 'r', '' + radius);\n\n circle.style.strokeDasharray = roundVideoCircumference + ' ' + roundVideoCircumference;\n circle.style.strokeDashoffset = '' + roundVideoCircumference;\n });\n }\n});\n\n// let onAnotherSingleMedia: () => void;\n\nlet turnedObserverOn = false;\n\nexport default async function wrapVideo({doc, altDoc, container, message, boxWidth, boxHeight, withTail, isOut, middleware, lazyLoadQueue, noInfo, group, onlyPreview, noPreview, withoutPreloader, loadPromises, noPlayButton, photoSize, videoSize, searchContext, autoDownload, managers = rootScope.managers, noAutoplayAttribute, ignoreStreaming, canAutoplay, useBlur, observer, setShowControlsOn, uploadingFileName}: {\n doc: MyDocument,\n altDoc?: MyDocument,\n container?: HTMLElement,\n message?: Message.message,\n boxWidth?: number,\n boxHeight?: number,\n withTail?: boolean,\n isOut?: boolean,\n middleware: Middleware,\n lazyLoadQueue?: LazyLoadQueue,\n noInfo?: boolean,\n noPlayButton?: boolean,\n group?: AnimationItemGroup,\n onlyPreview?: boolean,\n noPreview?: boolean,\n withoutPreloader?: boolean,\n loadPromises?: Promise[],\n autoDownload?: ChatAutoDownloadSettings,\n photoSize?: PhotoSize,\n videoSize?: Extract,\n searchContext?: MediaSearchContext,\n managers?: AppManagers,\n noAutoplayAttribute?: boolean,\n ignoreStreaming?: boolean,\n canAutoplay?: boolean,\n useBlur?: boolean | number,\n observer?: SuperIntersectionObserver,\n setShowControlsOn?: HTMLElement,\n uploadingFileName?: string\n}) {\n const supportsStreaming = doc.supportsStreaming && !ignoreStreaming;\n if(!supportsStreaming && altDoc && !onlyPreview && !IS_H265_SUPPORTED) {\n doc = altDoc;\n altDoc = undefined;\n }\n\n if(doc.type === 'gif' && container) {\n container.classList.add('media-gif-wrapper');\n container.dataset.docId = '' + doc.id;\n }\n\n const autoDownloadSize = autoDownload?.video;\n let noAutoDownload = autoDownloadSize === 0;\n const isGroupedItem = !(boxWidth && boxHeight);\n canAutoplay ??= /* doc.sticker || */(\n (\n doc.type !== 'video' || (\n doc.size <= MAX_VIDEO_AUTOPLAY_SIZE &&\n !isGroupedItem\n )\n ) && (doc.type === 'gif' ? liteMode.isAvailable('gif') : liteMode.isAvailable('video'))\n );\n let spanTime: HTMLElement, spanPlay: HTMLElement;\n\n let willObserveSound = false, noSoundIcon: HTMLElement, myMiddlewareHelper: MiddlewareHelper, originalMiddleware: Middleware;\n if(!noInfo && container) {\n spanTime = document.createElement('span');\n spanTime.classList.add('video-time');\n container.append(spanTime);\n\n let needPlayButton = false;\n if(doc.type !== 'gif') {\n spanTime.innerText = toHHMMSS(doc.duration, false);\n\n if(!noPlayButton && doc.type !== 'round') {\n if(canAutoplay && !noAutoDownload) {\n if(observer && USE_OBSERVER) {\n willObserveSound = true;\n // noAutoplayAttribute = true;\n originalMiddleware = middleware;\n myMiddlewareHelper = getMiddleware();\n middleware = myMiddlewareHelper.get();\n }\n\n spanTime.append(noSoundIcon = Icon('nosound', 'video-time-icon'));\n } else {\n needPlayButton = true;\n }\n }\n } else {\n spanTime.innerText = 'GIF';\n\n if(!canAutoplay && !noPlayButton) {\n needPlayButton = true;\n noAutoDownload = undefined;\n }\n }\n\n if(needPlayButton) {\n spanPlay = Button('btn-circle video-play position-center', {icon: 'largeplay', noRipple: true});\n container.append(spanPlay);\n }\n }\n\n const res: {\n thumb?: typeof photoRes,\n video?: HTMLVideoElement,\n loadPromise: Promise\n } = {} as any;\n\n if(doc.mime_type === 'image/gif') {\n const photoRes = await wrapPhoto({\n photo: doc,\n message,\n container,\n boxWidth,\n boxHeight,\n withTail,\n isOut,\n lazyLoadQueue,\n middleware,\n withoutPreloader,\n loadPromises,\n autoDownloadSize,\n size: photoSize,\n managers,\n useBlur,\n uploadingFileName\n });\n\n res.thumb = photoRes;\n res.loadPromise = photoRes.loadPromises.full;\n return res;\n }\n\n /* const video = doc.type === 'round' ? appMediaPlaybackController.addMedia(doc, message.mid) as HTMLVideoElement : document.createElement('video');\n if(video.parentElement) {\n video.remove();\n } */\n\n let preloader: ProgressivePreloader; // it must be here, otherwise will get error before initialization in round onPlay\n\n const video = createVideo({middleware, pip: willObserveSound});\n video.classList.add('media-video');\n video.muted = true;\n if(doc.type === 'round') {\n const divRound = document.createElement('div');\n divRound.classList.add('media-round', 'z-depth-1');\n divRound.dataset.mid = '' + message.mid;\n divRound.dataset.peerId = '' + message.peerId;\n (divRound as any).message = message;\n\n const size = mediaSizes.active.round;\n const halfSize = size.width / 2;\n const strokeWidth = 3.5;\n const radius = halfSize - (strokeWidth * 2);\n divRound.innerHTML = `\n \n `;\n\n const circle = divRound.firstElementChild.firstElementChild as SVGCircleElement;\n if(!roundVideoCircumference) {\n roundVideoCircumference = 2 * Math.PI * radius;\n }\n circle.style.strokeDasharray = roundVideoCircumference + ' ' + roundVideoCircumference;\n circle.style.strokeDashoffset = '' + roundVideoCircumference;\n\n const isUnread = message.pFlags.media_unread;\n if(isUnread) {\n divRound.classList.add('is-unread');\n }\n\n const canvas = document.createElement('canvas');\n canvas.classList.add('video-round-canvas');\n canvas.width = canvas.height = doc.w/* * window.devicePixelRatio */;\n\n divRound.prepend(canvas, spanTime);\n divRound.append(video);\n container?.append(divRound);\n\n const ctx = canvas.getContext('2d');\n /* ctx.beginPath();\n ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, Math.PI * 2);\n ctx.clip(); */\n\n const onLoad = () => {\n const message: Message.message = (divRound as any).message;\n const globalVideo = appMediaPlaybackController.addMedia(message, !noAutoDownload) as HTMLVideoElement;\n const clear = () => {\n (appImManager.chat.setPeerPromise || Promise.resolve()).finally(() => {\n if(isInDOM(globalVideo)) {\n return;\n }\n\n globalVideo.removeEventListener('play', onPlay);\n globalVideo.removeEventListener('timeupdate', throttledTimeUpdate);\n globalVideo.removeEventListener('pause', onPaused);\n globalVideo.removeEventListener('ended', onEnded);\n });\n };\n\n const onFrame = () => {\n ctx.drawImage(globalVideo, 0, 0);\n\n const offset = roundVideoCircumference - globalVideo.currentTime / globalVideo.duration * roundVideoCircumference;\n circle.style.strokeDashoffset = '' + offset;\n\n return !globalVideo.paused;\n };\n\n const onTimeUpdate = () => {\n if(!globalVideo.duration) {\n return;\n }\n\n if(!isInDOM(globalVideo)) {\n clear();\n return;\n }\n\n if(globalVideo.paused) {\n onFrame();\n }\n\n spanTime.firstChild.nodeValue = toHHMMSS(globalVideo.duration - globalVideo.currentTime, false);\n };\n\n const throttledTimeUpdate = throttle(() => {\n fastRaf(onTimeUpdate);\n }, 1000, false);\n\n const noSoundIcon = Icon('nosound', 'video-time-icon');\n const setIsPaused = (paused: boolean) => {\n divRound.classList.toggle('is-paused', paused);\n if(paused) {\n spanTime.append(noSoundIcon);\n } else {\n noSoundIcon.remove();\n }\n };\n\n const onPlay = () => {\n video.classList.add('hide');\n setIsPaused(false);\n animateSingle(onFrame, canvas);\n\n if(preloader?.preloader && preloader.preloader.classList.contains('manual')) {\n preloader.onClick();\n }\n };\n\n const onPaused = () => {\n if(!isInDOM(globalVideo)) {\n clear();\n return;\n }\n\n setIsPaused(true);\n };\n\n const onEnded = () => {\n video.classList.remove('hide');\n setIsPaused(true);\n\n setCurrentTime(video, 0);\n spanTime.firstChild.nodeValue = toHHMMSS(globalVideo.duration, false);\n\n if(globalVideo.currentTime) {\n setCurrentTime(globalVideo, 0);\n }\n };\n\n globalVideo.addEventListener('play', onPlay);\n globalVideo.addEventListener('timeupdate', throttledTimeUpdate);\n globalVideo.addEventListener('pause', onPaused);\n globalVideo.addEventListener('ended', onEnded);\n\n attachClickEvent(canvas, (e) => {\n cancelEvent(e);\n\n // ! костыль\n if(preloader && !preloader.detached) {\n preloader.onClick();\n }\n\n // ! can't use it here. on Safari iOS video won't start.\n /* if(globalVideo.readyState < 2) {\n return;\n } */\n\n if(globalVideo.paused) {\n const hadSearchContext = !!searchContext;\n if(appMediaPlaybackController.setSearchContext(searchContext || {\n peerId: NULL_PEER_ID,\n inputFilter: {_: 'inputMessagesFilterEmpty'},\n useSearch: false\n })) {\n const [prev, next] = !hadSearchContext ? [] : findMediaTargets(divRound, message.mid/* , searchContext.useSearch */);\n appMediaPlaybackController.setTargets({peerId: message.peerId, mid: message.mid}, prev, next);\n }\n\n safePlay(globalVideo);\n } else {\n globalVideo.pause();\n }\n });\n\n if(globalVideo.paused) {\n if(globalVideo.duration && globalVideo.currentTime !== globalVideo.duration && globalVideo.currentTime > 0) {\n onFrame();\n onTimeUpdate();\n video.classList.add('hide');\n } else {\n onPaused();\n }\n } else {\n onPlay();\n }\n };\n\n if(message.pFlags.is_outgoing) {\n // ! WARNING ! just to type-check\n (divRound as any as AudioElement).onLoad = onLoad;\n divRound.dataset.isOutgoing = '1';\n } else {\n onLoad();\n }\n } else if(!noAutoplayAttribute) {\n video.autoplay = true; // для safari\n }\n\n let photoRes: Awaited>;\n if(message || onlyPreview) {\n photoRes = await wrapPhoto({\n photo: doc,\n message,\n container,\n boxWidth,\n boxHeight,\n withTail,\n isOut,\n lazyLoadQueue,\n middleware,\n withoutPreloader: true,\n loadPromises,\n autoDownloadSize: autoDownload?.photo,\n size: photoSize,\n managers,\n useBlur,\n canHaveVideoPlayer: willObserveSound,\n uploadingFileName\n });\n\n res.thumb = photoRes;\n\n if((!canAutoplay && doc.type !== 'gif') || onlyPreview) {\n res.loadPromise = photoRes.loadPromises.full;\n return res;\n }\n\n if(withTail) {\n const foreignObject = (photoRes.images.thumb || photoRes.images.full).parentElement;\n video.width = +foreignObject.getAttributeNS(null, 'width');\n video.height = +foreignObject.getAttributeNS(null, 'height');\n foreignObject.append(video);\n }\n } else if(!noPreview) { // * gifs masonry\n const gotThumb = getMediaThumbIfNeeded({\n photo: doc,\n cacheContext: {} as ThumbCache,\n useBlur: useBlur || true\n });\n if(gotThumb) {\n const thumbImage = gotThumb.image;\n thumbImage.classList.add('media-poster');\n container?.append(thumbImage);\n res.thumb = {\n loadPromises: {\n thumb: gotThumb.loadPromise,\n full: Promise.resolve()\n },\n images: {\n thumb: thumbImage,\n full: null\n },\n preloader: null,\n aspecter: null\n };\n\n loadPromises?.push(gotThumb.loadPromise);\n res.loadPromise = gotThumb.loadPromise;\n }\n }\n\n if(onlyPreview) {\n return res;\n }\n\n // ! do not append before load or will get `URL safety check` error\n const appendVideo = () => {\n (photoRes?.aspecter || container).append(video);\n };\n\n if(!video.parentElement && container && video.poster/* && !altDoc */) {\n appendVideo();\n }\n\n let cacheContext: ThumbCache, altCacheContext: ThumbCache;\n const getCacheContext = () => {\n cacheContext = apiManagerProxy.getCacheContext(doc, videoSize?.type);\n altDoc && (altCacheContext = apiManagerProxy.getCacheContext(altDoc, videoSize?.type));\n };\n\n getCacheContext();\n\n uploadingFileName ??= message?.uploadingFileName?.[0];\n if(uploadingFileName) { // means upload\n preloader = new ProgressivePreloader({\n attachMethod: 'prepend',\n isUpload: true\n });\n preloader.attachPromise(appDownloadManager.getUpload(uploadingFileName));\n preloader.attach(container, false);\n noAutoDownload = undefined;\n } else if(!cacheContext.downloaded && !supportsStreaming && !withoutPreloader) {\n preloader = new ProgressivePreloader({\n attachMethod: 'prepend'\n });\n } else if(supportsStreaming && !withoutPreloader) {\n preloader = new ProgressivePreloader({\n cancelable: false,\n attachMethod: 'prepend'\n });\n }\n\n const renderDeferred = deferredPromise();\n video.addEventListener('error', (e) => {\n if(shouldIgnoreVideoError(e)) {\n return;\n }\n\n if(video.error.code !== 4) {\n console.error('Error ' + video.error.code + '; details: ' + video.error.message);\n }\n\n if(preloader && !uploadingFileName) {\n preloader.detach();\n }\n\n if(!renderDeferred.isFulfilled) {\n renderDeferred.resolve();\n }\n }, {once: true});\n\n if(doc.type === 'video' && spanTime) {\n const onTimeUpdate = () => {\n if(!video.duration) {\n return;\n }\n\n spanTime.firstChild.nodeValue = toHHMMSS(video.duration - video.currentTime, false);\n };\n\n const throttledTimeUpdate = throttle(() => {\n fastRaf(onTimeUpdate);\n }, 1e3, false);\n\n video.addEventListener('timeupdate', throttledTimeUpdate);\n\n if(spanPlay) {\n video.addEventListener('timeupdate', () => {\n sequentialDom.mutateElement(spanPlay, () => {\n spanPlay.remove();\n });\n }, {once: true});\n }\n }\n\n video.muted = true;\n video.loop = true;\n // video.play();\n if(!noAutoplayAttribute) {\n video.autoplay = true;\n }\n\n let loadPhotoThumbFunc = noAutoDownload && photoRes?.preloader?.loadFunc;\n const load = async() => {\n if(preloader && noAutoDownload && !withoutPreloader) {\n preloader.construct();\n preloader.setManual();\n }\n\n getCacheContext();\n let loadPromise: Promise = Promise.resolve();\n if((preloader && !uploadingFileName) || withoutPreloader) {\n if(!cacheContext.downloaded && !supportsStreaming) {\n const promise = loadPromise = appDownloadManager.downloadMediaURL({\n media: doc,\n queueId: lazyLoadQueue?.queueId,\n onlyCache: noAutoDownload,\n thumb: videoSize\n });\n\n if(preloader) {\n preloader.attach(container, false, promise);\n }\n } else if(supportsStreaming) {\n if(noAutoDownload) {\n loadPromise = Promise.reject(makeError('NO_AUTO_DOWNLOAD'));\n } else if(!cacheContext.downloaded && preloader) { // * check for uploading video\n preloader.attach(container, false, null);\n video.addEventListener(IS_SAFARI ? 'timeupdate' : 'canplay', () => {\n preloader.detach();\n }, {once: true});\n }\n }\n }\n\n if(!noAutoDownload && loadPhotoThumbFunc) {\n loadPhotoThumbFunc();\n loadPhotoThumbFunc = null;\n }\n\n noAutoDownload = undefined;\n\n loadPromise.then(async() => {\n if(middleware && !middleware()) {\n renderDeferred.resolve();\n return;\n }\n\n if(doc.type === 'round') {\n appMediaPlaybackController.resolveWaitingForLoadMedia(message.peerId, message.mid, message.pFlags.is_scheduled);\n }\n\n getCacheContext();\n\n const onError = (err: any) => {\n console.error('video load error', video, err);\n if(spanTime) {\n spanTime.classList.add('is-error');\n const previousIcon = spanTime.querySelector('.video-time-icon');\n const newIcon = Icon('sendingerror', 'video-time-icon');\n if(previousIcon) previousIcon.replaceWith(newIcon);\n else spanTime.append(newIcon);\n }\n renderDeferred.reject(err);\n };\n const onMediaLoadPromise = onMediaLoad(video);\n const videoLeakPromise = handleVideoLeak(video, onMediaLoadPromise);\n videoLeakPromise.catch(onError);\n onMediaLoadPromise.then(() => {\n if(group) {\n animationIntersector.addAnimation({\n animation: video,\n group,\n observeElement: video,\n type: 'video',\n locked: willObserveSound\n });\n }\n\n if(preloader && !uploadingFileName) {\n preloader.detach();\n }\n\n if(!video.parentElement && container && !video.poster/* && !altDoc */) {\n appendVideo();\n }\n\n if(altDoc) {\n videoLeakPromise.then(() => {\n video.pause();\n renderDeferred.resolve();\n });\n setCurrentTime(video, 0.0001);\n } else {\n renderDeferred.resolve();\n }\n\n attachSoundObserver?.();\n }, onError);\n\n if(altDoc && altCacheContext) {\n const sources = [\n {context: cacheContext, type: 'video/mp4; codecs=\"hev1\"', width: doc.w},\n {context: altCacheContext, type: 'video/mp4; codecs=\"avc1.64001E\"', width: altDoc.w}\n ].map(({context, type, width}) => {\n const source = document.createElement('source');\n source.src = context.url;\n // source.type = type;\n source.width = width;\n return source;\n });\n\n video.append(...sources);\n video.load();\n } else {\n renderImageFromUrl(video, cacheContext.url);\n }\n }, noop);\n\n return {download: loadPromise, render: Promise.all([loadPromise, renderDeferred])};\n };\n\n if(preloader && !uploadingFileName) {\n preloader.setDownloadFunction(load);\n }\n\n container && ((container as any).preloader = preloader);\n\n if(doc.type === 'gif' && !canAutoplay) {\n attachClickEvent(container, (e) => {\n cancelEvent(e);\n spanPlay.remove();\n load();\n }, {capture: true, once: true});\n } else {\n res.loadPromise = !lazyLoadQueue ?\n (await load()).render :\n (lazyLoadQueue.push({div: container, load: () => load().then(({render}) => render)}), Promise.resolve());\n }\n\n if(res.thumb) {\n await res.thumb.loadPromises.thumb;\n }\n\n if(video) {\n res.video = video;\n }\n\n const attachSoundObserver = willObserveSound ? () => {\n (video as any).mini = true;\n video.pause();\n // const button = ButtonIcon('zoomin video-to-viewer', {noRipple: true});\n // container.append(button);\n\n // const updateIcon = (muted: boolean) => {\n // replaceButtonIcon(button, muted ? 'speakeroff' : 'speaker');\n // };\n\n // updateIcon(video.muted);\n\n const onMuted = () => {\n return;\n\n releaseSingleMedia?.(true);\n releaseSingleMedia = undefined;\n // video.muted = true;\n };\n\n const onUnmute = () => {\n return;\n\n // if(onAnotherSingleMedia !== _onAnotherSingleMedia) {\n // onAnotherSingleMedia?.();\n // }\n\n releaseSingleMedia = appMediaPlaybackController.setSingleMedia({\n media: video,\n message,\n standalone: true\n });\n // onAnotherSingleMedia = _onAnotherSingleMedia = () => {\n // mute();\n // };\n };\n\n const mute = () => {\n if(!releaseSingleMedia) {\n return;\n }\n\n noSoundIcon.classList.remove('hide');\n onMuted();\n };\n\n const unmute = () => {\n if(releaseSingleMedia) {\n return;\n }\n\n noSoundIcon.classList.add('hide');\n onUnmute();\n };\n\n // const toggle = (_unmute?: boolean) => {\n // if(_unmute !== undefined) (_unmute ? unmute : mute)();\n // else (releaseSingleMedia ? mute : unmute)();\n // updateIcon(video.muted);\n // };\n\n let releaseSingleMedia: ReturnType/* , _onAnotherSingleMedia: () => void */;\n // const detachClickEvent = attachClickEvent(button, (e) => {\n // cancelEvent(e);\n // toggle();\n // });\n\n const onIntersection: IntersectionCallback = (entry) => {\n if(!entry.isIntersecting) {\n destroyPlayer();\n }\n\n if(!entry.isIntersecting && !video.muted) {\n // toggle(false);\n onMuted();\n }\n };\n\n container.classList.add('media-video-container', 'media-video-mini');\n observer.observe(video, onIntersection);\n\n const destroyPlayer = () => {\n debouncedDestroy.clearTimeout();\n if(\n !videoPlayer ||\n !middleware() ||\n isFullScreen() ||\n videoPlayer.inPip\n ) {\n return;\n }\n\n videoPlayer.unmount();\n videoPlayer.cleanup();\n videoPlayer = undefined;\n setShowControlsOn.classList.remove('show-controls');\n };\n\n const debouncedDestroy = debounce(destroyPlayer, 1000, false, true);\n\n let videoPlayer: VideoPlayer, releasePromise: CancellablePromise/* , changedVolume = false */;\n (container as any).onMouseMove = (e: MouseEvent) => {\n if(videoPlayer) {\n return;\n }\n\n const toggleReleasePromise = (active: boolean) => {\n if(active) releasePromise = deferredPromise();\n else releasePromise?.resolve();\n };\n\n const onLock = (active: boolean) => {\n if(ignoreNextEvents && ignoreNextEvents--) {\n return;\n }\n\n const animationItem = animationIntersector.getAnimations(video)[0];\n animationIntersector.toggleItemLock(animationItem, active);\n toggleReleasePromise(active);\n };\n\n let ignoreNextEvents = 0;\n videoPlayer = new VideoPlayer({\n video,\n container,\n duration: video.duration,\n streamable: true,\n listenKeyboardEvents: 'fullscreen',\n useGlobalVolume: 'no-init',\n // shouldEnableSoundOnClick: () => !changedVolume,\n onVolumeChange: (type) => {\n const noVolume = !video.volume || video.muted;\n let newValue: boolean;\n if(noVolume) {\n newValue = turnedObserverOn = false;\n } else if(type === 'click') {\n newValue = turnedObserverOn = true;\n }\n\n if(newValue !== turnedObserverOn && newValue !== undefined) {\n appMediaPlaybackController.dispatchEvent('toggleVideoAutoplaySound', newValue);\n }\n\n // changedVolume = true;\n // (!video.volume || video.muted ? mute : unmute)();\n },\n onFullScreen: (active) => {\n onLock(active);\n overlayCounter.isDarkOverlayActive = active;\n },\n onFullScreenToPip: () => {\n ignoreNextEvents = 2;\n },\n onPip: onLock/* ,\n onPipClose: () => {\n if(!setShowControlsOn.classList.contains('show-controls')) {\n debouncedDestroy();\n }\n } */\n });\n\n videoPlayer.volumeSelector.setVolume({muted: !turnedObserverOn, volume: video.volume});\n\n videoPlayer.addEventListener('toggleControls', (show) => {\n setShowControlsOn.classList.toggle('show-controls', show);\n if(show) {\n debouncedDestroy.clearTimeout();\n } else {\n debouncedDestroy();\n }\n });\n };\n\n // * mute video when other media is playing\n const onAutoplaySound = (enabled: boolean) => {\n if(videoPlayer) {\n return;\n }\n\n video.muted = appMediaPlaybackController.muted;\n video.volume = appMediaPlaybackController.volume;\n };\n\n const onSingleMedia = (media: HTMLMediaElement) => {\n if(media !== video && !video.muted) {\n if(videoPlayer) {\n videoPlayer.volumeSelector.setVolume({muted: true, volume: video.volume});\n } else {\n video.muted = true;\n }\n }\n };\n\n const onPlaybackMediaParams = (params: ReturnType) => {\n if(videoPlayer) {\n return;\n }\n\n video.muted = turnedObserverOn ? params.muted : true;\n video.playbackRate = params.playbackRate;\n video.volume = params.volume;\n };\n\n appMediaPlaybackController.addEventListener('toggleVideoAutoplaySound', onAutoplaySound);\n // appMediaPlaybackController.addEventListener('singleMedia', onSingleMedia);\n appMediaPlaybackController.addEventListener('playbackParams', onPlaybackMediaParams);\n\n middleware.onClean(() => {\n // detachClickEvent();\n releaseSingleMedia?.();\n observer.unobserve(video, onIntersection);\n delete (container as any).onMouseMove;\n appMediaPlaybackController.removeEventListener('toggleVideoAutoplaySound', onAutoplaySound);\n // appMediaPlaybackController.removeEventListener('singleMedia', onSingleMedia);\n appMediaPlaybackController.removeEventListener('playbackParams', onPlaybackMediaParams);\n });\n\n originalMiddleware.onClean(async() => {\n await releasePromise;\n myMiddlewareHelper.destroy();\n });\n } : undefined;\n\n return res;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {simulateClickEvent, attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport getVisibleRect from '../helpers/dom/getVisibleRect';\nimport safePlay from '../helpers/dom/safePlay';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {makeMediaSize} from '../helpers/mediaSize';\nimport {getMiddleware, Middleware} from '../helpers/middleware';\nimport {doubleRaf} from '../helpers/schedulers';\nimport pause from '../helpers/schedulers/pause';\nimport windowSize from '../helpers/windowSize';\nimport {DocumentAttribute} from '../layer';\nimport {MyDocument} from '../lib/appManagers/appDocsManager';\nimport getStickerEffectThumb from '../lib/appManagers/utils/stickers/getStickerEffectThumb';\nimport CustomEmojiElement from '../lib/customEmoji/element';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport lottieLoader from '../lib/rlottie/lottieLoader';\nimport RLottiePlayer from '../lib/rlottie/rlottiePlayer';\nimport rootScope from '../lib/rootScope';\nimport animationIntersector, {AnimationItemGroup} from './animationIntersector';\nimport {EMOJI_TEXT_COLOR} from './emoticonsDropdown';\nimport SetTransition from './singleTransition';\nimport wrapSticker from './wrappers/sticker';\nimport {STICKER_EFFECT_MULTIPLIER} from './wrappers/sticker';\nimport wrapVideo from './wrappers/video';\n\nlet hasViewer = false;\nexport default function attachStickerViewerListeners({listenTo, listenerSetter, selector, findTarget: originalFindTarget, getTextColor}: {\n listenerSetter: ListenerSetter,\n listenTo: HTMLElement,\n selector?: string,\n findTarget?: (e: MouseEvent) => HTMLElement,\n getTextColor?: () => string\n}) {\n if(IS_TOUCH_SUPPORTED) {\n return;\n }\n\n const findTarget = (e: MouseEvent, checkForParent?: boolean) => {\n let el: HTMLElement;\n if(originalFindTarget) el = originalFindTarget(e);\n else {\n const s = selector || '.media-sticker-wrapper, .media-gif-wrapper';\n el = (e.target as HTMLElement).closest(s) as HTMLElement;\n }\n\n return el && (!checkForParent || findUpAsChild(el, listenTo)) ? el : undefined;\n };\n\n const managers = rootScope.managers;\n\n listenerSetter.add(listenTo)('mousedown', (e) => {\n if(hasViewer || e.buttons > 1 || e.button !== 0) return;\n let mediaContainer = findTarget(e);\n if(!mediaContainer) {\n return;\n }\n\n // const img: HTMLImageElement = mediaContainer.querySelector('img.media-sticker');\n\n const docId = mediaContainer.dataset.docId;\n if(!docId) {\n return;\n }\n\n const className = 'sticker-viewer';\n const group: AnimationItemGroup = 'STICKER-VIEWER';\n const openDuration = 200;\n const switchDuration = 200;\n const previousGroup = animationIntersector.getOnlyOnePlayableGroup();\n const _middleware = getMiddleware();\n let container: HTMLElement,\n previousTransformer: HTMLElement,\n isMouseUp = false;\n\n const doThatSticker = async({mediaContainer, doc, middleware, lockGroups, isSwitching}: {\n mediaContainer: HTMLElement,\n doc: MyDocument,\n middleware: Middleware,\n lockGroups?: boolean,\n isSwitching?: boolean\n }) => {\n const isGif = doc.type === 'gif';\n const effectThumb = isGif ? undefined : getStickerEffectThumb(doc);\n const mediaRect: DOMRect = mediaContainer.getBoundingClientRect();\n const s = makeMediaSize(doc.w, doc.h);\n const size = effectThumb ? 280 : (isGif ? Math.min(480, windowSize.height - 200) : 360);\n const boxSize = makeMediaSize(size, size);\n const fitted = mediaRect.width === mediaRect.height ? boxSize : s.aspectFitted(boxSize);\n\n const bubble = findUpClassName(mediaContainer, 'bubble');\n const isOut = bubble ? bubble.classList.contains('is-out') : true;\n\n const transformer = document.createElement('div');\n transformer.classList.add(className + '-transformer');\n transformer.middlewareHelper = middleware.create();\n middleware = transformer.middlewareHelper.get();\n\n const stickerContainer = document.createElement('div');\n stickerContainer.classList.add(className + '-sticker');\n /* transformer.style.width = */stickerContainer.style.width = fitted.width + 'px';\n /* transformer.style.height = */stickerContainer.style.height = fitted.height + 'px';\n\n const stickerEmoji = document.createElement('div');\n stickerEmoji.classList.add(className + '-emoji');\n stickerEmoji.append(wrapEmojiText(doc.stickerEmojiRaw));\n\n if(effectThumb) {\n const margin = (size * STICKER_EFFECT_MULTIPLIER - size) / 3 * (isOut ? 1 : -1);\n transformer.classList.add('has-effect');\n // const property = `--margin-${isOut ? 'right' : 'left'}`;\n // stickerContainer.style.setProperty(property, `${margin * 2}px`);\n transformer.style.setProperty('--translateX', `${margin}px`);\n stickerEmoji.style.setProperty('--translateX', `${-margin}px`);\n }\n\n const overflowElement = findUpClassName(mediaContainer, 'scrollable');\n const visibleRect = getVisibleRect(mediaContainer, overflowElement, true, mediaRect);\n if(visibleRect.overflow.vertical || visibleRect.overflow.horizontal) {\n stickerContainer.classList.add('is-overflow');\n }\n\n // if(img) {\n // const ratio = img.naturalWidth / img.naturalHeight;\n // if((mediaRect.width / mediaRect.height).toFixed(1) !== ratio.toFixed(1)) {\n\n // mediaRect = mediaRect.toJSON();\n // }\n // }\n\n const rect = mediaContainer.getBoundingClientRect();\n const scaleX = rect.width / fitted.width;\n const scaleY = rect.height / fitted.height;\n const transformX = rect.left - (windowSize.width - rect.width) / 2;\n const transformY = rect.top - (windowSize.height - rect.height) / 2;\n transformer.style.transform = `translate(${transformX}px, ${transformY}px) scale(${scaleX}, ${scaleY})`;\n if(isSwitching) transformer.classList.add('is-switching');\n transformer.append(stickerContainer, stickerEmoji);\n container.append(transformer);\n\n const attribute = doc.attributes.find((attribute) => attribute._ === 'documentAttributeCustomEmoji') as DocumentAttribute.documentAttributeCustomEmoji;\n\n const o = isGif ? await wrapVideo({\n doc,\n container: stickerContainer,\n group,\n boxWidth: fitted.width,\n boxHeight: fitted.height,\n canAutoplay: true,\n middleware,\n noInfo: true\n // noPreview: true\n }).then(async(res) => (await res.loadPromise, res.video)) : await wrapSticker({\n doc,\n div: stickerContainer,\n group,\n width: fitted.width,\n height: fitted.height,\n play: false,\n loop: true,\n middleware,\n managers,\n needFadeIn: false,\n isOut,\n withThumb: false,\n relativeEffect: true,\n loopEffect: true,\n textColor: attribute && attribute.pFlags.text_color ? getTextColor?.() || EMOJI_TEXT_COLOR : undefined\n }).then(({render}) => render);\n if(!middleware()) return;\n\n if(!container.parentElement) {\n document.body.append(container);\n }\n\n const player = Array.isArray(o) ? o[0] : o;\n\n const firstFramePromise = player instanceof RLottiePlayer ?\n new Promise((resolve) => player.addEventListener('firstFrame', resolve, {once: true})) :\n Promise.resolve();\n await Promise.all([firstFramePromise, doubleRaf()]);\n await pause(0); // ! need it because firstFrame will be called just from the loop\n if(!middleware()) return;\n\n if(lockGroups) {\n animationIntersector.setOnlyOnePlayableGroup(group);\n animationIntersector.checkAnimations2(true);\n }\n\n if(player instanceof RLottiePlayer) {\n const prevPlayer = mediaContainer instanceof CustomEmojiElement ?\n mediaContainer.player as RLottiePlayer :\n lottieLoader.getAnimation(mediaContainer);\n if(prevPlayer) {\n player.curFrame = prevPlayer.curFrame;\n player.play();\n await new Promise((resolve) => {\n let i = 0;\n const c = () => {\n if(++i === 2) {\n resolve();\n player.removeEventListener('enterFrame', c);\n }\n };\n\n player.addEventListener('enterFrame', c);\n });\n if(!middleware()) return;\n player.pause();\n }\n } else if(player instanceof HTMLVideoElement) {\n const prevPlayer = mediaContainer.querySelector('video');\n if(prevPlayer) {\n player.currentTime = prevPlayer.currentTime;\n }\n }\n\n return {\n ready: () => {\n if(player instanceof RLottiePlayer || player instanceof HTMLVideoElement) {\n safePlay(player);\n }\n\n if(effectThumb) {\n simulateClickEvent(stickerContainer);\n }\n },\n transformer\n };\n };\n\n const timeout = window.setTimeout(async() => {\n document.removeEventListener('mousemove', onMousePreMove);\n\n container = document.createElement('div');\n container.classList.add(className);\n hasViewer = true;\n\n const middleware = _middleware.get();\n const doc = await managers.appDocsManager.getDoc(docId);\n if(!middleware()) return;\n\n let result: Awaited>;\n try {\n result = await doThatSticker({\n doc,\n mediaContainer,\n middleware,\n lockGroups: true\n });\n if(!result) return;\n } catch(err) {\n return;\n }\n\n // * can't use middleware here\n if(isMouseUp) {\n return;\n }\n\n const {ready, transformer} = result;\n\n previousTransformer = transformer;\n\n SetTransition({\n element: container,\n className: 'is-visible',\n forwards: true,\n duration: openDuration,\n onTransitionEnd: () => {\n if(!middleware()) return;\n ready();\n }\n });\n\n document.addEventListener('mousemove', onMouseMove);\n }, 125);\n\n const onMouseMove = async(e: MouseEvent) => {\n const newMediaContainer = findTarget(e, true);\n if(!newMediaContainer || mediaContainer === newMediaContainer) {\n return;\n }\n\n const docId = newMediaContainer.dataset.docId;\n if(!docId) {\n return;\n }\n\n mediaContainer = newMediaContainer;\n _middleware.clean();\n const middleware = _middleware.get();\n\n const doc = await managers.appDocsManager.getDoc(docId);\n if(!middleware()) return;\n\n let r: Awaited>;\n try {\n r = await doThatSticker({\n doc,\n mediaContainer,\n middleware,\n isSwitching: true\n });\n if(!r) return;\n } catch(err) {\n console.error('sticker viewer error', err);\n return;\n }\n\n const {ready, transformer} = r;\n\n const _previousTransformer = previousTransformer;\n SetTransition({\n element: _previousTransformer,\n className: 'is-switching',\n forwards: true,\n duration: switchDuration,\n onTransitionEnd: () => {\n _previousTransformer.remove();\n _previousTransformer.middlewareHelper.destroy();\n }\n });\n\n previousTransformer = transformer;\n\n SetTransition({\n element: transformer,\n className: 'is-switching',\n forwards: false,\n duration: switchDuration,\n onTransitionEnd: () => {\n if(!middleware()) return;\n ready();\n }\n });\n };\n\n const onMousePreMove = (e: MouseEvent) => {\n if(!findUpAsChild(e.target as HTMLElement, mediaContainer)) {\n onMouseUp();\n }\n };\n\n const onMouseUp = () => {\n isMouseUp = true;\n clearTimeout(timeout);\n // _middleware.clean();\n\n if(container) {\n SetTransition({\n element: container,\n className: 'is-visible',\n forwards: false,\n duration: openDuration,\n onTransitionEnd: () => {\n container.remove();\n animationIntersector.setOnlyOnePlayableGroup(previousGroup);\n animationIntersector.checkAnimations2(false);\n _middleware.destroy();\n hasViewer = false;\n }\n });\n\n attachClickEvent(document.body, cancelEvent, {capture: true, once: true});\n }\n\n document.removeEventListener('mousemove', onMousePreMove);\n document.removeEventListener('mousemove', onMouseMove);\n document.removeEventListener('mouseup', onMouseUp, {capture: true});\n };\n\n document.addEventListener('mousemove', onMousePreMove);\n document.addEventListener('mouseup', onMouseUp, {once: true, capture: true});\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppStickersManager} from '../../lib/appManagers/appStickersManager';\nimport type ChatInput from '../chat/input';\nimport PopupElement from '.';\nimport wrapSticker from '../wrappers/sticker';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport {putPreloader} from '../putPreloader';\nimport animationIntersector, {AnimationItemGroup} from '../animationIntersector';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {i18n} from '../../lib/langPack';\nimport Button from '../button';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport {toastNew} from '../toast';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport createStickersContextMenu from '../../helpers/dom/createStickersContextMenu';\nimport attachStickerViewerListeners from '../stickerViewer';\nimport {Document, StickerSet} from '../../layer';\nimport Row from '../row';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport rootScope from '../../lib/rootScope';\nimport wrapCustomEmoji from '../wrappers/customEmoji';\nimport emoticonsDropdown from '../emoticonsDropdown';\nimport ButtonMenuToggle from '../buttonMenuToggle';\nimport {copyTextToClipboard} from '../../helpers/clipboard';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport {onMediaCaptionClick} from '../appMediaViewer';\nimport DEBUG from '../../config/debug';\nimport {ButtonMenuItemOptionsVerifiable} from '../buttonMenu';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\nimport pause from '../../helpers/schedulers/pause';\nimport toArray from '../../helpers/array/toArray';\n\nconst ANIMATION_GROUP: AnimationItemGroup = 'STICKERS-POPUP';\n\nexport default class PopupStickers extends PopupElement {\n private appendTo: HTMLElement;\n private updateAdded: {[setId: Long]: (added: boolean) => void};\n private sets: StickerSet.stickerSet[];\n private button: HTMLElement;\n\n constructor(\n private stickerSetInput: Parameters[0] | Parameters[0][],\n private isEmojis?: boolean,\n private chatInput: ChatInput = appImManager.chat?.input\n ) {\n super('popup-stickers', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n title: true,\n footer: true\n });\n\n this.title.append(i18n('Loading'));\n this.updateAdded = {};\n\n emoticonsDropdown.setIgnoreMouseOut('popup', true);\n this.addEventListener('close', () => {\n emoticonsDropdown.setIgnoreMouseOut('popup', false);\n animationIntersector.setOnlyOnePlayableGroup();\n });\n\n this.appendTo = this.scrollable.container;\n\n this.appendTo.classList.add('is-loading');\n putPreloader(this.appendTo, true);\n\n const btn = Button('btn-primary btn-primary-transparent disable-hover', {noRipple: true, text: 'Loading'});\n this.footer.append(btn);\n\n attachStickerViewerListeners({listenTo: this.appendTo, listenerSetter: this.listenerSetter});\n\n const onStickerSetUpdate = (set: StickerSet.stickerSet) => {\n const idx = this.sets.findIndex((_set) => _set.id === set.id);\n if(idx === -1) {\n return;\n }\n\n this.sets[idx] = set;\n const updateAdded = this.updateAdded[set.id];\n updateAdded?.(!!set.installed_date);\n this.updateButton();\n };\n\n this.listenerSetter.add(rootScope)('stickers_installed', onStickerSetUpdate);\n this.listenerSetter.add(rootScope)('stickers_deleted', onStickerSetUpdate);\n\n const onClick = (e: MouseEvent) => {\n const callback = onMediaCaptionClick(this.container, e);\n if(callback) {\n this.addEventListener('closeAfterTimeout', callback);\n this.hide();\n return false;\n }\n };\n\n this.container.addEventListener('click', onClick, {capture: true});\n this.middlewareHelper.onDestroy(() => {\n this.container.removeEventListener('click', onClick, {capture: true});\n });\n\n this.loadStickerSet();\n }\n\n private createStickerSetElements(set?: StickerSet.stickerSet) {\n const container = document.createElement('div');\n container.classList.add('sticker-set');\n\n let headerRow: Row, updateAdded: (added: boolean) => void;\n if(set) {\n headerRow = new Row({\n title: wrapRichText(set.title),\n subtitle: i18n(set.pFlags.emojis ? 'EmojiCount' : 'Stickers', [set.count]),\n buttonRight: true\n });\n\n updateAdded = (added) => {\n replaceContent(headerRow.buttonRight, i18n(added ? 'Stickers.SearchAdded' : 'Stickers.SearchAdd'));\n headerRow.buttonRight.classList.toggle('active', added);\n };\n\n updateAdded(!!set.installed_date);\n\n container.append(headerRow.container);\n }\n\n const itemsContainer = document.createElement('div');\n itemsContainer.classList.add('sticker-set-stickers');\n\n container.append(itemsContainer);\n\n return {container, headerRow, updateAdded, itemsContainer};\n }\n\n private onStickersClick = async(e: MouseEvent) => {\n if(!this.chatInput.chat.peerId) {\n return;\n }\n\n const target = findUpClassName(e.target, 'sticker-set-sticker') || findUpClassName(e.target, 'custom-emoji');\n if(!target) return;\n\n const docId = target.dataset.docId;\n let emoji: {docId: DocId, emoji: string}\n if(this.isEmojis) {\n emoji = {docId, emoji: target.dataset.stickerEmoji};\n if(!this.chatInput.emoticonsDropdown.canUseEmoji(emoji, true)) {\n return;\n }\n }\n\n const shouldHide = this.isEmojis ?\n this.chatInput.onEmojiSelected(emoji, false) :\n await appImManager.chat.input.sendMessageWithDocument({document: docId, target});\n if(shouldHide) {\n this.hide();\n }\n };\n\n private async loadStickerSet() {\n const middleware = this.middlewareHelper.get();\n const inputs = toArray(this.stickerSetInput);\n const setsPromises = inputs.map((input) => this.managers.appStickersManager.getStickerSet(input));\n let sets = await Promise.all(setsPromises);\n if(!middleware()) return;\n let firstSet = sets[0];\n if(sets.length === 1 && !firstSet) {\n toastNew({langPackKey: this.isEmojis ? 'AddEmojiNotFound' : 'StickerSet.DontExist'});\n this.hide();\n return;\n }\n\n sets = sets.filter(Boolean);\n firstSet = sets[0];\n\n this.sets = sets.map((set) => set.set);\n\n const isEmojis = this.isEmojis ??= !!firstSet.set.pFlags.emojis;\n\n attachClickEvent(this.appendTo, this.onStickersClick, {listenerSetter: this.listenerSetter});\n\n const {destroy} = createStickersContextMenu({\n listenTo: this.appendTo,\n chatInput: this.chatInput,\n isPack: true,\n isEmojis: isEmojis,\n onSend: () => this.hide()\n });\n\n this.addEventListener('close', destroy);\n\n animationIntersector.setOnlyOnePlayableGroup(ANIMATION_GROUP);\n\n const lazyLoadQueue = new LazyLoadQueue();\n const loadPromises: Promise[] = [];\n\n const containersPromises = sets.map(async(set) => {\n const {container, itemsContainer, headerRow, updateAdded} = this.createStickerSetElements(sets.length > 1 ? set.set : undefined);\n\n if(headerRow) {\n attachClickEvent(headerRow.buttonRight, () => {\n this.managers.appStickersManager.toggleStickerSet(set.set);\n }, {listenerSetter: this.listenerSetter});\n }\n\n this.updateAdded[set.set.id] = updateAdded;\n\n let divs: (HTMLElement | DocumentFragment)[];\n\n const docs = set.documents.filter((doc) => doc?._ === 'document') as Document.document[];\n if(isEmojis) {\n const fragment = wrapCustomEmoji({\n docIds: docs.map((doc) => doc.id),\n loadPromises,\n animationGroup: ANIMATION_GROUP,\n customEmojiSize: mediaSizes.active.esgCustomEmoji,\n middleware\n // lazyLoadQueue\n });\n\n (Array.from(fragment.children) as HTMLElement[]).slice(1).forEach((element) => {\n const span = document.createElement('span');\n span.classList.add('super-emoji', 'super-emoji-custom');\n element.replaceWith(span);\n span.append(element);\n });\n\n divs = [fragment];\n\n itemsContainer.classList.replace('sticker-set-stickers', 'super-emojis');\n itemsContainer.classList.add('is-emojis');\n } else {\n divs = await Promise.all(docs.map(async(doc) => {\n const div = document.createElement('div');\n div.classList.add('sticker-set-sticker');\n\n const size = mediaSizes.active.popupSticker.width;\n\n await wrapSticker({\n doc,\n div,\n lazyLoadQueue,\n group: ANIMATION_GROUP,\n play: true,\n loop: true,\n width: size,\n height: size,\n withLock: true,\n loadPromises,\n middleware\n });\n\n return div;\n }));\n }\n\n itemsContainer.append(...divs.filter(Boolean));\n\n return container;\n });\n\n const containers = await Promise.all(containersPromises);\n await Promise.all(loadPromises);\n\n const button = this.button = Button('', {noRipple: true});\n\n this.updateButton();\n\n attachClickEvent(button, () => {\n const toggle = toggleDisability([button], true);\n\n this.managers.appStickersManager.toggleStickerSets(sets.map((set) => set.set)).then(() => {\n this.hide();\n }).catch(() => {\n toggle();\n });\n }, {listenerSetter: this.listenerSetter});\n\n if(sets.length === 1) {\n setInnerHTML(this.title, wrapRichText(firstSet.set.title));\n } else {\n setInnerHTML(this.title, i18n('Emoji'));\n }\n\n const buttons: ButtonMenuItemOptionsVerifiable[] = [{\n icon: 'copy',\n text: 'CopyLink',\n onClick: () => {\n const prefix = `https://t.me/${this.isEmojis ? 'addemoji' : 'addstickers'}/`;\n const text = sets.map((set) => prefix + set.set.short_name).join('\\n');\n copyTextToClipboard(text);\n }\n }];\n\n if(DEBUG) {\n buttons.push({\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: async() => {\n for(const set of sets) {\n for(const doc of set.documents) {\n appDownloadManager.downloadToDisc({media: doc as Document.document});\n await pause(100);\n }\n }\n }\n });\n }\n\n const btnMenu = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n buttons,\n direction: 'bottom-left'\n });\n this.title.after(btnMenu);\n\n this.footer.textContent = '';\n this.footer.append(button);\n\n this.appendTo.classList.remove('is-loading');\n this.appendTo.textContent = '';\n this.appendTo.append(...containers);\n\n this.scrollable.onAdditionalScroll();\n }\n\n private updateButton() {\n const {sets, isEmojis} = this;\n let isAdd: boolean, buttonAppend: HTMLElement;\n if(sets.length === 1) {\n const firstSet = sets[0];\n buttonAppend = i18n(isEmojis ? 'EmojiCount' : 'Stickers', [firstSet.count]);\n isAdd = !firstSet.installed_date;\n } else {\n const installed = sets.filter((set) => set.installed_date);\n let count: number;\n if(sets.length === installed.length) {\n isAdd = false;\n count = sets.length;\n } else {\n isAdd = true;\n count = sets.length - installed.length;\n }\n\n buttonAppend = i18n('EmojiPackCount', [count]);\n }\n\n this.button.className = isAdd ? 'btn-primary btn-color-primary' : 'btn-primary btn-primary-transparent danger';\n replaceContent(this.button, i18n(isAdd ? 'AddStickersCount' : 'RemoveStickersCount', [buttonAppend]));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {makeMediaSize, MediaSize} from '../../helpers/mediaSize';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {MiddlewareHelper, Middleware, getMiddleware} from '../../helpers/middleware';\nimport {StickerSet} from '../../layer';\nimport ButtonIcon from '../buttonIcon';\nimport {ScrollableX} from '../scrollable';\nimport {EMOJI_ELEMENT_SIZE} from './tabs/emoji';\n\nexport type StickersTabCategoryItem = {element: HTMLElement};\nexport type StickersTabStyles = {\n padding: number,\n gapX: number,\n gapY: number,\n getElementMediaSize: () => MediaSize,\n itemsClassName: string\n};\n\nexport const EmoticonsTabStyles: {[key in 'Stickers' | 'Emoji' | 'GIF']?: StickersTabStyles} = {\n Stickers: {\n getElementMediaSize: () => mediaSizes.active.esgSticker,\n padding: 3 * 2,\n gapX: 4,\n gapY: 4,\n itemsClassName: 'super-stickers'\n },\n Emoji: {\n getElementMediaSize: () => EMOJI_ELEMENT_SIZE,\n padding: 16,\n gapX: 4,\n gapY: 0,\n itemsClassName: 'super-emojis'\n },\n GIF: {\n getElementMediaSize: () => makeMediaSize(124, 124),\n padding: 4,\n gapX: 2,\n gapY: 2,\n itemsClassName: 'emoticons-gifs'\n }\n}\n\nexport default class StickersTabCategory = {}> {\n public elements: {\n container: HTMLElement,\n title: HTMLElement,\n items: HTMLElement,\n menuTab: HTMLElement,\n menuTabPadding: HTMLElement\n } & AdditionalElements;\n public items: Item[];\n public mounted: boolean;\n public id: string;\n public limit: number;\n\n public getContainerSize: () => {width: number, height: number};\n private getElementMediaSize: () => MediaSize;\n\n private gapX: number;\n private gapY: number;\n\n public set?: StickerSet;\n public local?: boolean;\n public menuScroll?: ScrollableX;\n\n public middlewareHelper: MiddlewareHelper;\n\n constructor(options: {\n id: string,\n title: HTMLElement | DocumentFragment,\n overflowElement: HTMLElement,\n styles: StickersTabStyles,\n getContainerSize: StickersTabCategory['getContainerSize'],\n noMenuTab?: boolean,\n middleware?: Middleware\n }) {\n const container = document.createElement('div');\n container.classList.add('emoji-category');\n\n const items = document.createElement('div');\n items.classList.add('category-items');\n\n let title: HTMLElement;\n if(options.title) {\n title = document.createElement('div');\n title.classList.add('category-title');\n title.append(options.title);\n }\n\n let menuTab: HTMLElement, menuTabPadding: HTMLElement;\n if(!options.noMenuTab) {\n menuTab = ButtonIcon(undefined, {noRipple: true});\n menuTab.classList.add('menu-horizontal-div-item');\n\n menuTabPadding = document.createElement('div');\n menuTabPadding.classList.add('menu-horizontal-div-item-padding');\n\n menuTab.append(menuTabPadding);\n }\n\n if(title) container.append(title);\n container.append(items);\n\n this.elements = {\n container,\n title,\n items,\n menuTab,\n menuTabPadding\n } as any;\n this.id = options.id;\n this.items = [];\n\n this.getContainerSize = options.getContainerSize;\n this.getElementMediaSize = options.styles.getElementMediaSize;\n this.gapX = options.styles.gapX ?? 0;\n this.gapY = options.styles.gapY ?? 0;\n this.middlewareHelper = options.middleware ? options.middleware.create() : getMiddleware();\n }\n\n public setCategoryItemsHeight(itemsLength = this.items.length) {\n const {width: containerWidth} = this.getContainerSize();\n const elementSize = this.getElementMediaSize().width;\n\n let itemsPerRow = containerWidth / elementSize;\n if(this.gapX) itemsPerRow -= Math.floor(itemsPerRow - 1) * this.gapX / elementSize;\n itemsPerRow = Math.floor(itemsPerRow);\n\n const rows = Math.ceil(itemsLength / itemsPerRow);\n let height = rows * elementSize;\n if(this.gapY) height += (rows - 1) * this.gapY;\n\n this.elements.items.style.minHeight = height + 'px';\n }\n}\n","import type {ListTransitionOptions} from '@solid-primitives/transition-group';\nimport {Modify} from '../../types';\nimport {createSignal, useTransition, $TRACK, createMemo, Accessor, untrack} from 'solid-js';\nimport {isServer} from 'solid-js/web';\nimport noop from '../noop';\n\nexport function createListTransition(\n source: Accessor,\n options: Modify, {exitMethod?: ListTransitionOptions['exitMethod'] | 'keep-relative'}>\n): Accessor {\n const initSource = untrack(source);\n\n if(isServer) {\n const copy = initSource.slice();\n return () => copy;\n }\n\n const {onChange} = options;\n\n // if appear is enabled, the initial transition won't have any previous elements.\n // otherwise the elements will match and transition skipped, or transitioned if the source is different from the initial value\n let prevSet: ReadonlySet = new Set(options.appear ? undefined : initSource);\n const exiting = new WeakSet();\n\n const [toRemove, setToRemove] = createSignal([], {equals: false});\n const [isTransitionPending] = useTransition();\n\n const finishRemoved: (els: T[]) => void =\n options.exitMethod === 'remove' ?\n noop :\n (els) => {\n setToRemove((p) => (p.push(...els), p));\n for(const el of els) exiting.delete(el);\n };\n\n type RemovedOptions = {\n elements: T[],\n element: T,\n previousElements: T[],\n previousIndex: number,\n side: 'start' | 'end'\n };\n\n let handleRemoved: (options: RemovedOptions) => void;\n if(options.exitMethod === 'remove') {\n handleRemoved = noop;\n } else if(options.exitMethod === 'keep-index') {\n handleRemoved = (options) => options.elements.splice(options.previousIndex, 0, options.element);\n } else if(options.exitMethod === 'keep-relative') {\n handleRemoved = (options) => {\n let index: number;\n if(options.side === 'start') {\n index = options.previousIndex;\n } else {\n // index = options.elements.length - (options.previousElements.length - 1 - options.previousIndex);\n index = options.elements.length;\n }\n\n options.elements.splice(index, 0, options.element);\n };\n } else {\n handleRemoved = (options) => options.elements.push(options.element);\n }\n\n const compute = (prev: T[]) => {\n const elsToRemove = toRemove();\n const sourceList = source();\n (sourceList as any)[$TRACK]; // top level store tracking\n\n if(untrack(isTransitionPending)) {\n // wait for pending transition to end before animating\n isTransitionPending();\n return prev;\n }\n\n if(elsToRemove.length) {\n const next = prev.filter(e => !elsToRemove.includes(e));\n elsToRemove.length = 0;\n onChange({list: next, added: [], removed: [], unchanged: next, finishRemoved});\n return next;\n }\n\n return untrack(() => {\n const nextSet: ReadonlySet = new Set(sourceList);\n const next: T[] = sourceList.slice();\n\n const added: T[] = [];\n const removed: T[] = [];\n const unchanged: T[] = [];\n\n for(const el of sourceList) {\n (prevSet.has(el) ? unchanged : added).push(el);\n }\n\n const removedOptions: Modify = {\n elements: next,\n previousElements: prev,\n side: 'start'\n };\n\n let nothingChanged = !added.length;\n for(let i = 0; i < prev.length; ++i) {\n const el = prev[i]!;\n if(!nextSet.has(el)) {\n if(!exiting.has(el)) {\n removed.push(el);\n exiting.add(el);\n }\n\n removedOptions.element = el;\n removedOptions.previousIndex = i;\n\n handleRemoved(removedOptions as RemovedOptions);\n } else {\n removedOptions.side = 'end';\n }\n\n if(nothingChanged && el !== next[i]) {\n nothingChanged = false;\n }\n }\n\n // skip if nothing changed\n if(!removed.length && nothingChanged) {\n return prev;\n }\n\n onChange({list: next, added, removed, unchanged, finishRemoved});\n\n prevSet = nextSet;\n return next;\n });\n };\n\n return createMemo(compute, options.appear ? [] : initSource.slice());\n}\n","import { chain, arrayEquals } from '@solid-primitives/utils';\nimport { createMemo, children, createComputed, untrack, onCleanup } from 'solid-js';\nimport { isServer } from 'solid-js/web';\n\n// src/index.ts\nfunction mergeRefs(...refs) {\n return chain(refs);\n}\nvar defaultElementPredicate = isServer ? (item) => item != null && typeof item === \"object\" && \"t\" in item : (item) => item instanceof Element;\nfunction getResolvedElements(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getResolvedElements(value(), predicate);\n if (Array.isArray(value)) {\n const results = [];\n for (const item of value) {\n const result = getResolvedElements(item, predicate);\n if (result)\n Array.isArray(result) ? results.push.apply(results, result) : results.push(result);\n }\n return results.length ? results : null;\n }\n return null;\n}\nfunction resolveElements(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children2 = createMemo(fn);\n const memo = createMemo(\n () => getResolvedElements(children2(), isServer ? serverPredicate : predicate)\n );\n memo.toArray = () => {\n const value = memo();\n return Array.isArray(value) ? value : value ? [value] : [];\n };\n return memo;\n}\nfunction getFirstChild(value, predicate) {\n if (predicate(value))\n return value;\n if (typeof value === \"function\" && !value.length)\n return getFirstChild(value(), predicate);\n if (Array.isArray(value)) {\n for (const item of value) {\n const result = getFirstChild(item, predicate);\n if (result)\n return result;\n }\n }\n return null;\n}\nfunction resolveFirst(fn, predicate = defaultElementPredicate, serverPredicate = defaultElementPredicate) {\n const children2 = createMemo(fn);\n return createMemo(() => getFirstChild(children2(), isServer ? serverPredicate : predicate));\n}\nfunction Refs(props) {\n if (isServer) {\n return props.children;\n }\n const cb = props.ref, resolved = children(() => props.children);\n let prev = [];\n createComputed(() => {\n const els = resolved.toArray().filter(defaultElementPredicate);\n if (!arrayEquals(prev, els))\n untrack(() => cb(els));\n prev = els;\n }, []);\n onCleanup(() => prev.length && cb([]));\n return resolved;\n}\nfunction Ref(props) {\n if (isServer) {\n return props.children;\n }\n const cb = props.ref, resolved = children(() => props.children);\n let prev;\n createComputed(() => {\n const el = resolved.toArray().find(defaultElementPredicate);\n if (el !== prev)\n untrack(() => cb(el));\n prev = el;\n });\n onCleanup(() => prev && cb(void 0));\n return resolved;\n}\n\nexport { Ref, Refs, defaultElementPredicate, getFirstChild, getResolvedElements, mergeRefs, resolveElements, resolveFirst };\n","import {JSX} from 'solid-js';\nimport {createListTransition} from './createListTransition';\nimport {resolveElements} from '@solid-primitives/refs';\nimport liteMode from '../liteMode';\n\nfunction wrapKeyframes(keyframes: Keyframe[] | ((element: Element) => Keyframe[])) {\n return typeof(keyframes) !== 'function' ? () => keyframes : keyframes;\n}\n\nexport function AnimationList(props: {\n children: JSX.Element\n animationOptions: KeyframeAnimationOptions,\n keyframes: Keyframe[] | ((element: Element) => Keyframe[]),\n mode: 'replacement' | 'add-remove'/* | 'add' */ | 'remove',\n itemClassName?: string,\n appear?: boolean\n}) {\n const children = resolveElements(() => props.children).toArray;\n\n const addClassName = props.itemClassName ? (added: Element[]) => {\n added.forEach((element) => {\n element.classList.add(props.itemClassName);\n });\n } : undefined;\n\n addClassName?.(children());\n\n const transitionList = createListTransition(children, {\n exitMethod: 'keep-index',\n appear: props.appear,\n onChange: ({added, removed, finishRemoved}) => {\n const options = props.animationOptions;\n if(!liteMode.isAvailable('animations')) {\n options.duration = 0;\n }\n\n addClassName?.(added);\n\n const getKeyframes = wrapKeyframes(props.keyframes);\n let shouldAnimateAdded = false, shouldAnimateRemoved = false;\n if(props.mode === 'replacement') {\n shouldAnimateAdded = !!removed.length;\n shouldAnimateRemoved = !!added.length;\n } else if(props.mode === 'remove') {\n shouldAnimateRemoved = !!removed.length;\n } else if(props.mode === 'add-remove') {\n shouldAnimateAdded = !!added.length;\n shouldAnimateRemoved = !!removed.length;\n }\n\n queueMicrotask(() => {\n if(shouldAnimateAdded) {\n const keyframes = added.map((element) => getKeyframes(element));\n added.forEach((element, idx) => {\n element.animate(keyframes[idx], options);\n });\n }\n\n if(!shouldAnimateRemoved) {\n finishRemoved(removed);\n return;\n }\n\n const reversedKeyframes = removed.map((element) => getKeyframes(element).slice().reverse());\n const promises: Promise[] = [];\n removed.forEach((element, idx) => {\n const animation = element.animate(reversedKeyframes[idx], options);\n promises.push(animation.finished);\n });\n\n Promise.all(promises).then(() => finishRemoved(removed));\n });\n }\n }) as unknown as JSX.Element;\n\n return transitionList;\n}\n","import {JSX} from 'solid-js';\nimport {Dynamic} from 'solid-js/web';\nimport {AnimationList} from './animationList';\n\ntype AnimationType = 'cross-fade' | 'grow-width';\n\nconst ANIMATIONS: {[key in AnimationType]: Keyframe[] | ((element: Element) => Keyframe[])} = {\n 'cross-fade': [{opacity: 0}, {opacity: 1}],\n 'grow-width': (element) => {\n const {clientWidth} = element;\n return [\n {width: 0, opacity: 0},\n // {width: clientWidth / 2 + 'px', opacity: .25},\n {width: clientWidth + 'px', opacity: 1}\n ];\n }\n};\n\nexport function SimpleAnimation(props: Pick[0], 'children' | 'keyframes' | 'mode' | 'appear'>) {\n return (\n \n {props.children}\n \n );\n}\n\n// const MAP = {\n// 'cross-fade': ReplacementAnimation\n// };\n\nexport default function Animated(props: {\n children: JSX.Element,\n type: AnimationType,\n mode?: Parameters[0]['mode'],\n appear?: boolean\n}) {\n return (\n \n {props.children}\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Accessor, createEffect, createSignal, onCleanup, For, on} from 'solid-js';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport fastSmoothScroll, {fastSmoothScrollToStart} from '../../helpers/fastSmoothScroll';\nimport createMiddleware from '../../helpers/solid/createMiddleware';\nimport {EmojiGroup} from '../../layer';\nimport {AppEmojiManager} from '../../lib/appManagers/appEmojiManager';\nimport {LangPackKey} from '../../lib/langPack';\nimport rootScope from '../../lib/rootScope';\nimport InputSearch from '../inputSearch';\nimport {ScrollableXTsx} from '../stories/list';\nimport wrapSticker from '../wrappers/sticker';\n\n/* @refresh reload */\n\nfunction addSearchCategories(props: {\n type: Parameters[0]['type'],\n searching: Accessor,\n inputSearch: InputSearch,\n onGroup: (group: EmojiGroup) => void\n}) {\n const {inputSearch} = props;\n const [emojiGroups, setEmojiGroups] = createSignal>>([]);\n const [selected, setSelected] = createSignal();\n const [scrolled, setScrolled] = createSignal(false);\n\n const onEmojiGroupClick = (group: EmojiGroup, e: MouseEvent) => {\n setSelected(group);\n fastSmoothScroll({\n container: scrollableContainer,\n element: e.target as HTMLElement,\n position: 'center',\n axis: 'x'\n });\n };\n\n const EmojiGroup = ({group, document}: ReturnType[0]) => {\n // * until layer 179\n if(props.type !== 'stickers' && group._ === 'emojiGroupPremium') {\n return;\n }\n\n let element: HTMLDivElement, stickerContainer: HTMLDivElement;\n const ret = (\n \n
\n \n );\n\n wrapSticker({\n doc: document,\n div: stickerContainer,\n width: 24,\n height: 24,\n group: 'emoticons-dropdown',\n play: true,\n middleware: createMiddleware().get()\n });\n\n return ret;\n };\n\n let scrollableContainer: HTMLDivElement;\n const scrollable = (\n {\n if(e.target === inputSearch.currentPlaceholder) {\n placeCaretAtEnd(inputSearch.input, true, true);\n }\n }}\n onAdditionalScroll={() => {\n setScrolled(scrollableContainer.scrollLeft > 0);\n }}\n >\n {inputSearch.currentPlaceholder}\n
\n {EmojiGroup}\n
\n \n );\n\n inputSearch.input.after(scrollableContainer);\n\n inputSearch.currentPlaceholder.classList.remove('will-animate');\n\n const arrowButton = inputSearch.createButtonIcon('arrow_prev', 'will-animate', 'emoticons-search-input-arrow');\n inputSearch.searchIcon.classList.add('will-animate');\n inputSearch.searchIcon.after(arrowButton);\n\n const detachClickEvent = attachClickEvent(arrowButton, () => {\n setSelected();\n });\n\n onCleanup(detachClickEvent);\n\n createEffect(() => {\n arrowButton.classList.toggle('is-hiding', !selected());\n inputSearch.searchIcon.classList.toggle('is-hiding', !!selected());\n });\n\n createEffect(() => {\n if(props.searching()) {\n setSelected();\n }\n });\n\n createEffect(on(selected, (selected) => {\n props.onGroup(selected);\n if(!selected) {\n fastSmoothScrollToStart(scrollableContainer, 'x');\n }\n }, {defer: true}));\n\n rootScope.managers.appEmojiManager.getEmojiGroups(props.type === 'stickers' ? 'stickers' : 'esg').then(setEmojiGroups);\n}\n\nexport default function EmoticonsSearch(props: {\n type: 'emoji' | 'stickers' | 'gifs'\n placeholder?: LangPackKey,\n loading?: Accessor,\n onValue: (value: string) => void,\n onFocusChange?: ConstructorParameters[0]['onFocusChange'],\n onGroup?: (group: EmojiGroup) => void\n}) {\n const [searching, setSearching] = createSignal(false);\n const [debounced, setDebounced] = createSignal(false);\n const inputSearch = new InputSearch({\n placeholder: props.placeholder || 'Search',\n onChange: (value) => {\n value = value.trim();\n setSearching(!!value);\n props.onValue(value);\n },\n onFocusChange: props.onFocusChange,\n onDebounce: setDebounced,\n noBorder: true,\n noFocusEffect: true,\n debounceTime: 0\n });\n inputSearch.container.classList.add('emoticons-search-input-container');\n inputSearch.input.classList.add('emoticons-search-input');\n\n onCleanup(() => {\n inputSearch.remove();\n });\n\n if(props.loading) {\n createEffect(() => {\n inputSearch.toggleLoading(debounced() || props.loading());\n });\n }\n\n if(props.onGroup) {\n addSearchCategories({\n type: props.type,\n searching,\n inputSearch,\n onGroup: props.onGroup\n });\n }\n\n return (\n <>\n {inputSearch.container}\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport createVideo from '../../helpers/dom/createVideo';\nimport renderImageFromUrl from '../../helpers/dom/renderImageFromUrl';\nimport {Document, DocumentAttribute, StickerSet} from '../../layer';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport lottieLoader from '../../lib/rlottie/lottieLoader';\nimport rootScope from '../../lib/rootScope';\nimport animationIntersector, {AnimationItemGroup} from '../animationIntersector';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport wrapSticker from './sticker';\nimport {Middleware} from '../../helpers/middleware';\nimport {EMOJI_TEXT_COLOR} from '../emoticonsDropdown';\n\nexport default async function wrapStickerSetThumb({set, lazyLoadQueue, container, group, autoplay, width, height, managers = rootScope.managers, middleware, textColor}: {\n set: StickerSet.stickerSet,\n lazyLoadQueue: LazyLoadQueue,\n container: HTMLElement,\n group: AnimationItemGroup,\n autoplay: boolean,\n width: number,\n height: number,\n managers?: AppManagers\n middleware: Middleware,\n textColor?: string\n}) {\n if(set.thumbs?.length) {\n container.classList.add('media-sticker-wrapper');\n lazyLoadQueue.push({\n div: container,\n load: async() => {\n const downloadOptions = await managers.appStickersManager.getStickerSetThumbDownloadOptions(set);\n const promise = appDownloadManager.download(downloadOptions);\n\n const isLottie = downloadOptions.mimeType === 'application/x-tgsticker';\n if(isLottie) {\n return promise.then((blob) => {\n lottieLoader.loadAnimationWorker({\n container,\n loop: true,\n autoplay,\n animationData: blob,\n width,\n height,\n needUpscale: true,\n name: 'setThumb' + set.id,\n group,\n middleware\n });\n });\n } else {\n const isVideo = set.thumbs?.some((thumb) => thumb.type === 'v');\n let media: HTMLElement;\n if(isVideo) {\n media = createVideo({middleware});\n (media as HTMLVideoElement).autoplay = true;\n (media as HTMLVideoElement).muted = true;\n (media as HTMLVideoElement).loop = true;\n } else {\n media = new Image();\n }\n\n media.classList.add('media-sticker');\n\n return promise.then((blob) => {\n renderImageFromUrl(media, URL.createObjectURL(blob), () => {\n container.append(media);\n\n if(isVideo) {\n animationIntersector.addAnimation({\n animation: media as HTMLVideoElement,\n group,\n observeElement: media,\n type: 'video'\n });\n }\n });\n });\n }\n }\n });\n\n return;\n }\n\n let getDocPromise: Promise;\n\n if(set.thumb_document_id) {\n getDocPromise = managers.appEmojiManager.getCustomEmojiDocument(set.thumb_document_id);\n } else {\n getDocPromise = managers.appStickersManager.getStickerSet(set).then((stickerSet) => stickerSet.documents[0] as Document.document);\n }\n\n const doc = await getDocPromise;\n if(!doc) {\n return;\n }\n\n const attribute = doc.attributes.find(a => a._ === 'documentAttributeCustomEmoji') as DocumentAttribute.documentAttributeCustomEmoji\n // as thumb will be used first sticker\n wrapSticker({\n doc,\n div: container,\n group: group,\n lazyLoadQueue,\n managers,\n width,\n height,\n middleware,\n textColor: attribute?.pFlags?.text_color ? textColor || EMOJI_TEXT_COLOR : undefined\n }); // kostil\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport indexOfAndSplice from '../helpers/array/indexOfAndSplice';\nimport LazyLoadQueueIntersector, {LazyLoadElement} from './lazyLoadQueueIntersector';\nimport VisibilityIntersector, {OnVisibilityChange} from './visibilityIntersector';\n\nexport default class LazyLoadQueueRepeat extends LazyLoadQueueIntersector {\n private elementsMap: Map = new Map();\n\n constructor(\n parallelLimit?: number,\n protected onVisibilityChange?: OnVisibilityChange,\n options?: IntersectionObserverInit\n ) {\n super(parallelLimit);\n\n this.intersector = new VisibilityIntersector((item) => {\n const {target, visible} = item;\n\n const queueItem = this.elementsMap.get(target);\n queueItem.visible = visible;\n\n if(visible) {\n queueItem.wasSeen = true;\n if(!this.queue.includes(queueItem)) {\n this.queue.push(queueItem);\n }\n } else {\n indexOfAndSplice(this.queue, queueItem);\n }\n\n this.onVisibilityChange?.(item);\n this.setProcessQueueTimeout();\n }, options);\n }\n\n public clear() {\n super.clear();\n this.elementsMap.clear();\n }\n\n /* public async processItem(item: LazyLoadElement) {\n //await super.processItem(item);\n await LazyLoadQueueBase.prototype.processItem.call(this, item);\n\n if(this.lazyLoadMedia.length) {\n this.processQueue();\n }\n } */\n\n public observe(el: LazyLoadElement) {\n this.elementsMap.set(el.div, el);\n super.observe(el);\n }\n\n public unobserve(el: LazyLoadElement) {\n this.elementsMap.delete(el.div);\n super.unobserve(el);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport mediaSizes from '../../../helpers/mediaSizes';\nimport {MyDocument} from '../../../lib/appManagers/appDocsManager';\nimport {AppManagers} from '../../../lib/appManagers/managers';\nimport animationIntersector, {AnimationItemGroup} from '../../animationIntersector';\nimport LazyLoadQueue from '../../lazyLoadQueue';\nimport LazyLoadQueueRepeat from '../../lazyLoadQueueRepeat';\nimport wrapSticker from '../../wrappers/sticker';\nimport safeAssign from '../../../helpers/object/safeAssign';\nimport {getMiddleware, Middleware} from '../../../helpers/middleware';\nimport noop from '../../../helpers/noop';\n\nexport default class SuperStickerRenderer {\n public lazyLoadQueue: LazyLoadQueueRepeat;\n private animated: Set = new Set();\n private regularLazyLoadQueue: LazyLoadQueue;\n private group: AnimationItemGroup;\n private managers: AppManagers;\n private intersectionObserverInit: IntersectionObserverInit;\n private visibleRenderOptions: Partial[0]>;\n\n constructor(options: {\n regularLazyLoadQueue: LazyLoadQueue;\n group: AnimationItemGroup;\n managers: AppManagers;\n intersectionObserverInit?: SuperStickerRenderer['intersectionObserverInit'];\n visibleRenderOptions?: SuperStickerRenderer['visibleRenderOptions'];\n }) {\n safeAssign(this, options);\n\n this.lazyLoadQueue = new LazyLoadQueueRepeat(undefined, ({target, visible}) => {\n if(!visible) {\n this.processInvisible(target);\n }\n }, this.intersectionObserverInit);\n }\n\n public clear() {\n this.lazyLoadQueue.clear();\n this.animated.forEach((element) => {\n element.middlewareHelper?.destroy();\n });\n this.animated.clear();\n }\n\n public destroy() {\n this.clear();\n }\n\n public renderSticker(\n doc: MyDocument,\n element?: HTMLElement,\n loadPromises?: Promise[],\n middleware?: Middleware\n ) {\n if(!element) {\n element = document.createElement('div');\n element.classList.add('grid-item', 'super-sticker');\n element.dataset.docId = '' + doc.id;\n\n if(doc.animated) {\n this.observeAnimated(element);\n }\n }\n\n element.middlewareHelper ??= middleware ? middleware.create() : getMiddleware();\n\n // * This will wrap only a thumb\n /* !doc.animated && */ wrapSticker({\n doc,\n div: element,\n lazyLoadQueue: this.regularLazyLoadQueue,\n group: this.group,\n onlyThumb: doc.animated,\n loadPromises,\n middleware: element.middlewareHelper.get(),\n ...(doc.animated ? {} : this.visibleRenderOptions || {})\n });\n\n return element;\n }\n\n public observeAnimated(element: HTMLElement) {\n this.animated.add(element);\n this.lazyLoadQueue.observe({\n div: element,\n load: this.processVisible\n });\n }\n\n public unobserveAnimated(element: HTMLElement) {\n element.middlewareHelper?.destroy();\n this.animated.delete(element);\n this.lazyLoadQueue.delete({div: element});\n }\n\n public deleteSticker(element: HTMLElement) {\n return this.unobserveAnimated(element);\n }\n\n private checkAnimationContainer = (element: HTMLElement, visible: boolean) => {\n // console.error('checkAnimationContainer', div, visible);\n const players = animationIntersector.getAnimations(element);\n players.forEach((player) => {\n if(!visible) {\n animationIntersector.removeAnimation(player);\n } else {\n animationIntersector.checkAnimation(player, false);\n }\n });\n };\n\n private processVisible = async(element: HTMLElement) => {\n const docId = element.dataset.docId;\n const doc = await this.managers.appDocsManager.getDoc(docId);\n\n const size = mediaSizes.active.esgSticker.width;\n\n element.middlewareHelper ??= getMiddleware();\n element.middlewareHelper.clean();\n\n // console.log('processVisibleDiv:', element);\n const promise = wrapSticker({\n doc,\n div: element,\n width: size,\n height: size,\n lazyLoadQueue: null,\n group: this.group,\n onlyThumb: false,\n play: true,\n loop: true,\n withLock: true,\n middleware: element.middlewareHelper.get(),\n ...(this.visibleRenderOptions || {})\n }).then(({render}) => render);\n\n promise.then(() => {\n // clearTimeout(timeout);\n this.checkAnimationContainer(element, this.lazyLoadQueue.intersector.isVisible(element));\n }, noop);\n\n /* let timeout = window.setTimeout(() => {\n console.error('processVisibleDiv timeout', div, doc);\n }, 1e3); */\n return promise;\n };\n\n public processInvisible = async(element: HTMLElement) => {\n const docId = element.dataset.docId;\n const doc = await this.managers.appDocsManager.getDoc(docId);\n\n // console.log('STICKER INvisible:', /* div, */docId);\n this.checkAnimationContainer(element, false);\n\n element.middlewareHelper?.clean();\n element.replaceChildren();\n this.renderSticker(doc, element as HTMLDivElement);\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {EmoticonsTab, EmoticonsDropdown, EMOTICONSSTICKERGROUP, EMOJI_TEXT_COLOR} from '.';\nimport createStickersContextMenu from '../../helpers/dom/createStickersContextMenu';\nimport customProperties from '../../helpers/dom/customProperties';\nimport positionElementByIndex from '../../helpers/dom/positionElementByIndex';\nimport {IgnoreMouseOutType} from '../../helpers/dropdownHover';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport {MiddlewareHelper, getMiddleware, Middleware} from '../../helpers/middleware';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport Animated from '../../helpers/solid/animations';\nimport windowSize from '../../helpers/windowSize';\nimport {EmojiGroup, StickerSet} from '../../layer';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport {LangPackKey, i18n} from '../../lib/langPack';\nimport {AnyFunction} from '../../types';\nimport {createSignal, createMemo, createResource, createEffect, untrack} from 'solid-js';\nimport {render, Portal} from 'solid-js/web';\nimport Icon from '../icon';\nimport Scrollable, {ScrollableX} from '../scrollable';\nimport attachStickerViewerListeners from '../stickerViewer';\nimport VisibilityIntersector from '../visibilityIntersector';\nimport StickersTabCategory, {EmoticonsTabStyles, StickersTabStyles} from './category';\nimport EmoticonsSearch from './search';\nimport wrapStickerSetThumb from '../wrappers/stickerSetThumb';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport type {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport SuperStickerRenderer from './tabs/SuperStickerRenderer';\n\nexport default class EmoticonsTabC, T = any> implements EmoticonsTab {\n public content: HTMLElement;\n public menuScroll: ScrollableX;\n public container: HTMLElement;\n public menuWrapper: HTMLElement;\n public menu: HTMLElement;\n public emoticonsDropdown: EmoticonsDropdown;\n\n protected categories: {[id: string]: Category};\n protected categoriesMap: Map;\n protected categoriesByMenuTabMap: Map;\n protected categoriesIntersector: VisibilityIntersector;\n protected categoriesContainer: HTMLElement;\n protected localCategories: Category[];\n\n protected listenerSetter: ListenerSetter;\n\n public scrollable: Scrollable;\n protected mounted = false;\n protected menuOnClickResult: ReturnType;\n\n public tabId: number;\n\n protected postponedEvents: {cb: AnyFunction, args: any[]}[];\n\n public getContainerSize: Category['getContainerSize'];\n\n public middlewareHelper: MiddlewareHelper;\n private disposeSearch: () => void;\n\n public managers: AppManagers;\n protected noMenu: boolean;\n protected searchFetcher?: (value: string) => Promise;\n protected groupFetcher?: (group: EmojiGroup) => Promise;\n protected processSearchResult?: (result: {data: T, searching: boolean, grouping: boolean}) => Promise;\n protected searchNoLoader: boolean;\n protected searchPlaceholder?: LangPackKey;\n protected searchType: Parameters[0]['type'];\n\n constructor(options: {\n managers: AppManagers,\n noMenu?: boolean,\n searchFetcher?: EmoticonsTabC['searchFetcher'],\n groupFetcher?: EmoticonsTabC['groupFetcher'],\n processSearchResult?: EmoticonsTabC['processSearchResult'],\n searchNoLoader?: boolean,\n searchPlaceholder?: LangPackKey,\n searchType?: Parameters[0]['type']\n }) {\n safeAssign(this, options);\n this.categories = {};\n this.categoriesMap = new Map();\n this.categoriesByMenuTabMap = new Map();\n this.localCategories = [];\n this.postponedEvents = [];\n\n this.listenerSetter = new ListenerSetter();\n this.middlewareHelper = getMiddleware();\n\n this.container = document.createElement('div');\n this.container.classList.add('tabs-tab', 'emoticons-container');\n\n if(this.noMenu) {\n this.container.classList.add('no-menu');\n } else {\n this.createMenu();\n }\n\n this.content = document.createElement('div');\n this.content.classList.add('emoticons-content');\n\n this.container.append(...[this.menuWrapper, this.content].filter(Boolean));\n\n this.scrollable = new Scrollable(this.content, 'STICKERS');\n\n this.categoriesContainer = document.createElement('div');\n this.categoriesContainer.classList.add('emoticons-categories-container');\n\n if(!this.noMenu) {\n this.scrollable.container.classList.add('emoticons-will-move-up');\n this.categoriesContainer.classList.add('emoticons-will-move-down');\n }\n\n if(options.searchFetcher) {\n this.createSearch();\n } else {\n this.scrollable.append(this.categoriesContainer);\n }\n }\n\n private createMenu() {\n this.menuWrapper = document.createElement('div');\n this.menuWrapper.classList.add('menu-wrapper', 'emoticons-menu-wrapper', 'emoticons-will-move-up');\n\n this.menu = document.createElement('nav');\n this.menu.className = 'menu-horizontal-div no-stripe justify-start emoticons-menu';\n\n this.menuWrapper.append(this.menu);\n this.menuScroll = new ScrollableX(this.menuWrapper);\n }\n\n private createSearch() {\n const searchContainer = document.createElement('div');\n searchContainer.classList.add('emoticons-search-container');\n if(!this.noMenu) searchContainer.classList.add('emoticons-will-move-down');\n this.scrollable.append(searchContainer);\n this.categoriesContainer.classList.add('emoticons-has-search');\n this.disposeSearch = render(() => {\n const [query, setQuery] = createSignal('');\n const [group, setGroup] = createSignal();\n const [focused, setFocused] = createSignal(false);\n const searching = createMemo(() => !!query());\n\n const [loadedData, setLoadedData] = createSignal();\n const [data] = createResource(query, this.searchFetcher);\n const [groupData] = this.groupFetcher ? createResource(group, this.groupFetcher) : [];\n const [element] = createResource(() => {\n return {\n data: loadedData(),\n grouping: !!untrack(group),\n searching: untrack(searching)\n };\n }, this.processSearchResult);\n\n const loading = this.searchNoLoader ? undefined : createMemo(() => searching() && element.loading);\n const shouldMoveSearch = createMemo(() => focused() || searching() || !!group());\n const shouldUseContainer = createMemo(() => element() || this.categoriesContainer);\n\n Portal({\n mount: this.scrollable.container,\n children: Animated({\n type: 'cross-fade',\n get children() {\n return shouldUseContainer();\n }\n })\n });\n\n createEffect(() => {\n const useData = group() ? groupData : data;\n if(!useData.loading) {\n setLoadedData(() => useData());\n }\n });\n\n createEffect(() => {\n this.container.classList.toggle('is-searching', shouldMoveSearch());\n });\n\n return EmoticonsSearch({\n type: this.searchType,\n placeholder: this.searchPlaceholder,\n loading,\n onValue: setQuery,\n onFocusChange: setFocused,\n onGroup: this.groupFetcher ? setGroup : undefined\n });\n }, searchContainer);\n }\n\n public getCategoryByContainer(container: HTMLElement) {\n return this.categoriesMap.get(container);\n }\n\n public getCategoryByMenuTab(menuTab: HTMLElement) {\n return this.categoriesByMenuTabMap.get(menuTab);\n }\n\n public createCategory({\n stickerSet,\n title,\n isLocal,\n noMenuTab = !stickerSet,\n styles\n }: {\n stickerSet?: StickerSet,\n title?: HTMLElement | DocumentFragment,\n isLocal?: boolean,\n noMenuTab?: boolean,\n styles: StickersTabStyles\n }) {\n if(this.noMenu) {\n noMenuTab = true;\n }\n\n const category: Category = new StickersTabCategory({\n id: '' + stickerSet?.id,\n title,\n overflowElement: this.content,\n getContainerSize: () => {\n let width: number, height: number;\n if(this.getContainerSize) {\n const size = this.getContainerSize();\n width = size.width;\n height = size.height;\n } else {\n const element = this.emoticonsDropdown.getElement();\n const propertyWidth = element.style.getPropertyValue('--width');\n width = propertyWidth ? parseInt(propertyWidth) : element.offsetWidth;\n // const esgWidth = customProperties.getPropertyAsSize('esg-width');\n // width = esgWidth === undefined ? windowSize.width : esgWidth;\n }\n\n return {width: width - styles.padding, height};\n },\n styles,\n noMenuTab,\n middleware: this.middlewareHelper.get()\n }) as any;\n\n if(styles.itemsClassName) {\n category.elements.items.classList.add(styles.itemsClassName);\n }\n\n const container = category.elements.container;\n container.classList.add('hide');\n\n if(stickerSet) {\n category.set = stickerSet;\n this.categories[stickerSet.id] = category;\n this.categoriesMap.set(container, category);\n this.categoriesIntersector.observe(container);\n }\n\n if(!noMenuTab) {\n this.categoriesByMenuTabMap.set(category.elements.menuTab, category);\n this.menuOnClickResult.stickyIntersector.observeStickyHeaderChanges(container);\n !isLocal && category.elements.menuTab.classList.add('not-local');\n }\n\n return category;\n }\n\n public positionCategory(category: Category, prepend?: boolean) {\n const {menuTab, container} = category.elements;\n const posItems = prepend ? this.localCategories.filter((category) => category.mounted).length : 0xFFFF;\n let foundMenuScroll = false;\n const posMenu = prepend ? this.localCategories.filter((category) => {\n if(category.menuScroll && !foundMenuScroll) {\n foundMenuScroll = true;\n return true;\n }\n\n return category.mounted && !category.menuScroll && category.elements.menuTab;\n }).length : 0xFFFF;\n positionElementByIndex(container, this.categoriesContainer, posItems);\n positionElementByIndex(menuTab, this.menu, posMenu);\n }\n\n public isCategoryVisible(category: Category) {\n return this.categoriesIntersector.isVisible(category.elements.container);\n }\n\n protected toggleLocalCategory(category: Category, visible: boolean) {\n if(!visible) {\n category.elements.menuTab?.remove();\n category.elements.container.remove();\n } else {\n const idx = this.localCategories.indexOf(category);\n const sliced = this.localCategories.slice(0, idx);\n let notMountedItems = 0, notMountedMenus = 0;\n sliced.forEach((category) => {\n if(!category.mounted) {\n ++notMountedItems;\n ++notMountedMenus;\n } else if(!category.elements.menuTab || category.menuScroll) {\n ++notMountedMenus;\n }\n });\n const itemsIdx = idx - notMountedItems, menuIdx = idx - notMountedMenus;\n category.elements.menuTab && positionElementByIndex(category.elements.menuTab, this.menu, menuIdx);\n positionElementByIndex(category.elements.container, this.categoriesContainer, itemsIdx);\n }\n\n category.mounted = visible;\n // category.elements.container.classList.toggle('hide', !visible);\n }\n\n protected createLocalCategory({\n id,\n title,\n icon,\n noMenuTab,\n styles\n }: {\n id?: string,\n title: LangPackKey | '',\n icon?: Icon,\n noMenuTab?: boolean,\n styles: StickersTabStyles\n }) {\n if(this.noMenu) {\n noMenuTab = true;\n }\n\n const hasId = id !== undefined;\n\n const category = this.createCategory({\n stickerSet: hasId ? {id} as any : undefined,\n title: title && i18n(title),\n isLocal: true,\n noMenuTab,\n styles\n });\n category.local = true;\n hasId && this.localCategories.push(category);\n if(category.elements.title) {\n category.elements.title.classList.add('disable-hover');\n }\n\n if(category.elements.menuTab) {\n if(icon) {\n category.elements.menuTab.append(Icon(icon));\n }\n\n category.elements.menuTabPadding.remove();\n }\n\n this.toggleLocalCategory(category, false);\n return category;\n }\n\n protected onLocalCategoryUpdate(category: Category) {\n category.setCategoryItemsHeight();\n this.toggleLocalCategory(category, !!category.items.length);\n }\n\n protected resizeCategories = () => {\n for(const [container, category] of this.categoriesMap) {\n category.setCategoryItemsHeight();\n }\n };\n\n protected deleteCategory(category: Category) {\n if(category) {\n category.elements.container.remove();\n category.elements.menuTab?.remove();\n this.categoriesIntersector.unobserve(category.elements.container);\n delete this.categories[category.id];\n this.categoriesMap.delete(category.elements.container);\n this.categoriesByMenuTabMap.delete(category.elements.menuTab);\n category.middlewareHelper.destroy();\n\n return true;\n }\n\n return false;\n }\n\n protected spliceExceed(category: Category) {\n if(category.limit === undefined) {\n return false;\n }\n\n const {items, limit} = category;\n items.splice(limit, items.length - limit).forEach(({element}) => {\n element.remove();\n });\n\n this.onLocalCategoryUpdate(category);\n\n return true;\n }\n\n public init() {\n this.emoticonsDropdown && this.listenerSetter.add(this.emoticonsDropdown)('closed', () => {\n this.postponedEvents.forEach(({cb, args}) => {\n cb(...args);\n });\n\n this.postponedEvents.length = 0;\n });\n }\n\n public destroy() {\n this.getContainerSize = undefined;\n this.postponedEvents.length = 0;\n this.categoriesIntersector?.disconnect();\n this.listenerSetter.removeAll();\n this.scrollable.destroy();\n this.menuScroll?.destroy();\n this.menuOnClickResult?.stickyIntersector?.disconnect();\n this.middlewareHelper.destroy();\n this.disposeSearch?.();\n }\n\n protected postponedEvent = (cb: (...args: K[]) => void) => {\n return (...args: K[]) => {\n if(this.emoticonsDropdown.isActive()) {\n this.postponedEvents.push({cb, args});\n } else {\n cb(...args);\n }\n };\n };\n\n protected attachHelpers({getTextColor, verifyRecent, canHaveEmojiTimer, isGif}: {\n getTextColor?: () => string,\n verifyRecent?: (target: HTMLElement) => boolean,\n canHaveEmojiTimer?: boolean,\n isGif?: boolean\n } = {}) {\n attachStickerViewerListeners({\n listenTo: this.content,\n listenerSetter: this.listenerSetter,\n getTextColor\n });\n\n const type: IgnoreMouseOutType = 'menu';\n createStickersContextMenu({\n listenTo: this.content,\n chatInput: this.emoticonsDropdown.chatInput,\n verifyRecent,\n isEmojis: !!getTextColor,\n isGif,\n canHaveEmojiTimer,\n canViewPack: true,\n onOpen: () => {\n this.emoticonsDropdown.setIgnoreMouseOut(type, true);\n },\n onClose: () => {\n this.emoticonsDropdown.setIgnoreMouseOut(type, false);\n }\n });\n }\n\n // * common methods for tabs\n\n public renderStickerSetThumb({set, menuTabPadding, middleware, textColor}: {\n set: StickerSet.stickerSet,\n menuTabPadding: HTMLElement,\n middleware: Middleware,\n textColor?: string\n }) {\n wrapStickerSetThumb({\n set,\n container: menuTabPadding,\n group: EMOTICONSSTICKERGROUP,\n lazyLoadQueue: this.emoticonsDropdown?.lazyLoadQueue,\n width: 32,\n height: 32,\n autoplay: false,\n textColor,\n middleware\n });\n }\n\n public createStickerRenderer() {\n const superStickerRenderer = new SuperStickerRenderer({\n regularLazyLoadQueue: this.emoticonsDropdown.lazyLoadQueue,\n group: EMOTICONSSTICKERGROUP,\n managers: this.managers,\n intersectionObserverInit: this.emoticonsDropdown.intersectionOptions\n });\n\n const rendererLazyLoadQueue = superStickerRenderer.lazyLoadQueue;\n this.emoticonsDropdown.addLazyLoadQueueRepeat(\n rendererLazyLoadQueue,\n superStickerRenderer.processInvisible,\n this.middlewareHelper.get()\n );\n\n return superStickerRenderer;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {EmoticonsDropdown} from '..';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport mediaSizes from '../../../helpers/mediaSizes';\nimport {Document, MessagesAllStickers, StickerSet} from '../../../layer';\nimport {MyDocument} from '../../../lib/appManagers/appDocsManager';\nimport {AppManagers} from '../../../lib/appManagers/managers';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../../../lib/rootScope';\nimport {putPreloader} from '../../putPreloader';\nimport PopupStickers from '../../popups/stickers';\nimport findAndSplice from '../../../helpers/array/findAndSplice';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport noop from '../../../helpers/noop';\nimport ButtonIcon from '../../buttonIcon';\nimport confirmationPopup from '../../confirmationPopup';\nimport VisibilityIntersector, {OnVisibilityChangeItem} from '../../visibilityIntersector';\nimport findUpAsChild from '../../../helpers/dom/findUpAsChild';\nimport forEachReverse from '../../../helpers/array/forEachReverse';\nimport PopupElement from '../../popups';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport getStickerEffectThumb from '../../../lib/appManagers/utils/stickers/getStickerEffectThumb';\nimport StickersTabCategory, {EmoticonsTabStyles} from '../category';\nimport EmoticonsTabC from '../tab';\nimport {i18n} from '../../../lib/langPack';\nimport {onCleanup} from 'solid-js';\nimport SuperStickerRenderer from './SuperStickerRenderer';\n\ntype StickersTabItem = {element: HTMLElement, document: Document.document};\nexport default class StickersTab extends EmoticonsTabC, Document.document[]> {\n private stickerRenderer: SuperStickerRenderer;\n\n constructor(managers: AppManagers) {\n super({\n managers,\n searchFetcher: async(value) => {\n if(!value) return [];\n return this.managers.appStickersManager.searchStickers(value);\n },\n groupFetcher: async(group) => {\n if(!group) return [];\n\n if(group._ === 'emojiGroupPremium') {\n return this.managers.appStickersManager.getPremiumStickers();\n }\n\n return this.managers.appStickersManager.getStickersByEmoticon({emoticon: group.emoticons, includeServerStickers: true});\n },\n processSearchResult: async({data: stickers, searching, grouping}) => {\n if(!stickers || (!searching && !grouping)) {\n return;\n }\n\n if(!stickers.length) {\n const span = i18n('NoStickersFound');\n span.classList.add('emoticons-not-found');\n return span;\n }\n\n const container = this.categoriesContainer.cloneNode(false) as HTMLElement;\n const category = this.createCategory({styles: EmoticonsTabStyles.Stickers});\n const promise = StickersTab.categoryAppendStickers(\n this,\n this.stickerRenderer,\n stickers.length,\n category,\n stickers\n );\n container.append(category.elements.container);\n\n let cleaned = false;\n onCleanup(() => {\n cleaned = true;\n category.middlewareHelper.destroy();\n this.clearCategoryItems(category, true);\n });\n\n await promise;\n\n if(!cleaned) {\n StickersTab._onCategoryVisibility(category, true);\n }\n\n return container;\n },\n // searchNoLoader: true,\n searchPlaceholder: 'SearchStickers',\n searchType: 'stickers'\n });\n\n this.container.classList.add('stickers-padding');\n this.content.id = 'content-stickers';\n }\n\n private setFavedLimit(limit: number) {\n const category = this.categories['faved'];\n category.limit = limit;\n }\n\n public static _onCategoryVisibility = (category: StickersTabCategory, visible: boolean) => {\n category.elements.items.replaceChildren(...(!visible ? [] : category.items.map(({element}) => element)));\n };\n\n private onCategoryVisibility = ({target, visible}: OnVisibilityChangeItem) => {\n const category = this.categoriesMap.get(target);\n StickersTab._onCategoryVisibility(category, visible);\n };\n\n public init() {\n super.init();\n\n this.scrollable.onAdditionalScroll = () => {\n this.setTyping();\n };\n\n /* stickersDiv.addEventListener('mouseover', (e) => {\n let target = e.target as HTMLElement;\n\n if(target.tagName === 'CANVAS') { // turn on sticker\n let animation = lottieLoader.getAnimation(target.parentElement, EMOTICONSSTICKERGROUP);\n\n if(animation) {\n // @ts-ignore\n if(animation.currentFrame === animation.totalFrames - 1) {\n animation.goToAndPlay(0, true);\n } else {\n animation.play();\n }\n }\n }\n }); */\n\n const intersectionOptions = this.emoticonsDropdown.intersectionOptions;\n this.categoriesIntersector = new VisibilityIntersector(this.onCategoryVisibility, intersectionOptions);\n\n this.scrollable.container.addEventListener('click', (e) => {\n const target = e.target as HTMLElement;\n if(findUpClassName(target, 'category-title')) {\n const container = findUpClassName(target, 'emoji-category');\n const category = this.categoriesMap.get(container);\n if(category.local) {\n return;\n }\n\n PopupElement.createPopup(PopupStickers, {id: category.set.id, access_hash: category.set.access_hash}, false, this.emoticonsDropdown.chatInput).show();\n return;\n }\n\n this.emoticonsDropdown.onMediaClick(e);\n });\n\n this.menuOnClickResult = EmoticonsDropdown.menuOnClick(this, this.menu, this.scrollable, this.menuScroll);\n\n const preloader = putPreloader(this.content, true);\n\n const onCategoryStickers = (category: StickersTabCategory, stickers: MyDocument[]) => {\n // if(category.id === 'faved' && category.limit && category.limit < stickers.length) {\n // category.limit = stickers.length;\n // }\n\n if(category.limit) {\n stickers = stickers.slice(0, category.limit);\n }\n\n const ids = new Set(stickers.map((doc) => doc.id));\n forEachReverse(category.items, (item) => {\n if(!ids.has(item.document.id)) {\n this.deleteSticker(category, item.document, true);\n }\n });\n\n this.toggleLocalCategory(category, !!stickers.length);\n forEachReverse(stickers, (doc, idx) => {\n this.unshiftSticker(category, doc, true, idx);\n });\n this.spliceExceed(category);\n category.elements.container.classList.remove('hide');\n };\n\n const favedCategory = this.createLocalCategory({\n id: 'faved',\n title: 'FavoriteStickers',\n icon: 'savedmessages',\n styles: EmoticonsTabStyles.Stickers\n });\n // favedCategory.elements.menuTab.classList.add('active');\n\n const recentCategory = this.createLocalCategory({\n id: 'recent',\n title: 'Stickers.Recent',\n icon: 'recent',\n styles: EmoticonsTabStyles.Stickers\n });\n recentCategory.limit = 20;\n\n const clearButton = ButtonIcon('close', {noRipple: true});\n recentCategory.elements.title.append(clearButton);\n attachClickEvent(clearButton, () => {\n confirmationPopup({\n titleLangKey: 'ClearRecentStickersAlertTitle',\n descriptionLangKey: 'ClearRecentStickersAlertMessage',\n button: {\n langKey: 'Clear'\n }\n }).then(() => {\n this.managers.appStickersManager.clearRecentStickers();\n }, noop);\n });\n\n const promises = [\n Promise.all([\n this.managers.apiManager.getLimit('favedStickers'),\n this.managers.appStickersManager.getFavedStickersStickers()\n ]).then(([limit, stickers]) => {\n this.setFavedLimit(limit);\n onCategoryStickers(favedCategory, stickers);\n }),\n\n this.managers.appStickersManager.getRecentStickersStickers().then((stickers) => {\n onCategoryStickers(recentCategory, stickers);\n }),\n\n this.managers.appStickersManager.getAllStickers().then((res) => {\n for(const set of (res as MessagesAllStickers.messagesAllStickers).sets) {\n StickersTab.renderStickerSet(this, this.stickerRenderer, set, false);\n }\n })\n ];\n\n Promise.race(promises).finally(() => {\n preloader.remove();\n });\n\n Promise.all(promises).finally(() => {\n this.mounted = true;\n this.setTyping();\n\n const favedCategory = this.categories['faved'];\n const recentCategory = this.categories['recent'];\n this.menuOnClickResult.setActive(favedCategory.items.length ? favedCategory : recentCategory);\n\n rootScope.addEventListener('stickers_installed', (set) => {\n if(!this.categories[set.id]) {\n StickersTab.renderStickerSet(this, this.stickerRenderer, set, true);\n }\n });\n });\n\n this.stickerRenderer = this.createStickerRenderer();\n\n rootScope.addEventListener('sticker_updated', ({type, document, faved}) => {\n // if(type === 'faved') {\n // return;\n // }\n\n const category = this.categories[type === 'faved' ? 'faved' : 'recent'];\n if(category) {\n if(faved) {\n this.unshiftSticker(category, document);\n } else {\n this.deleteSticker(category, document);\n }\n }\n });\n\n rootScope.addEventListener('stickers_deleted', ({id}) => {\n const category = this.categories[id];\n this.deleteCategory(category);\n });\n\n rootScope.addEventListener('stickers_top', this.postponedEvent((id) => {\n const category = this.categories[id];\n if(category) {\n this.positionCategory(category, true);\n this.emoticonsDropdown.addEventListener('openAfterLayout', () => {\n this.menuOnClickResult.setActiveStatic(category);\n }, {once: true});\n }\n }));\n\n rootScope.addEventListener('stickers_order', ({type, order}) => {\n if(type !== 'stickers') {\n return;\n }\n\n order.forEach((id) => {\n const category = this.categories[id];\n if(category) {\n this.positionCategory(category, false);\n }\n });\n });\n\n rootScope.addEventListener('stickers_updated', ({type, stickers}) => {\n const category = this.categories[type === 'faved' ? 'faved' : 'recent'];\n if(category) {\n onCategoryStickers(category, stickers);\n }\n });\n\n rootScope.addEventListener('app_config', () => {\n this.managers.apiManager.getLimit('favedStickers').then((limit) => {\n this.setFavedLimit(limit);\n });\n });\n\n mediaSizes.addEventListener('resize', this.resizeCategories);\n\n this.attachHelpers({\n verifyRecent: (target) => !!findUpAsChild(target, this.categories['recent'].elements.items)\n });\n\n this.init = null;\n }\n\n public deleteCategory(category: StickersTabCategory) {\n const ret = super.deleteCategory(category);\n if(ret) {\n this.clearCategoryItems(category);\n }\n\n return ret;\n }\n\n private clearCategoryItems(category: StickersTabCategory, noUnmount?: boolean) {\n if(!noUnmount) category.elements.items.replaceChildren();\n category.items.splice(0, Infinity).forEach(({element}) => this.stickerRenderer.unobserveAnimated(element));\n }\n\n public deleteSticker(category: StickersTabCategory, doc: MyDocument, batch?: boolean) {\n const item = findAndSplice(category.items, (item) => item.document.id === doc.id);\n if(item) {\n item.element.remove();\n this.stickerRenderer.unobserveAnimated(item.element);\n\n if(!batch) {\n this.onLocalCategoryUpdate(category);\n }\n }\n }\n\n public unshiftSticker(category: StickersTabCategory, doc: MyDocument, batch?: boolean, idx?: number) {\n if(idx !== undefined) {\n const i = category.items[idx];\n if(i && i.document.id === doc.id) {\n return;\n }\n }\n\n let item = findAndSplice(category.items, (item) => item.document.id === doc.id);\n if(!item) {\n item = {\n element: this.stickerRenderer.renderSticker(doc, undefined, undefined, category.middlewareHelper.get()),\n document: doc\n };\n }\n\n category.items.unshift(item);\n category.elements.items.prepend(item.element);\n\n if(!batch) {\n this.spliceExceed(category);\n }\n }\n\n public unshiftRecentSticker(doc: MyDocument) {\n this.managers.appStickersManager.saveRecentSticker(doc.id);\n }\n\n public deleteRecentSticker(doc: MyDocument) {\n this.managers.appStickersManager.saveRecentSticker(doc.id, true);\n }\n\n public setTyping = (cancel = false) => {\n if(!cancel && (!this.emoticonsDropdown.isActive() || this.emoticonsDropdown.tab !== this)) {\n return;\n }\n\n rootScope.dispatchEvent('choosing_sticker', !cancel);\n };\n\n public onClosed() {\n this.setTyping(true);\n }\n\n public onOpened() {\n this.setTyping();\n this.resizeCategories();\n }\n\n public destroy() {\n this.stickerRenderer.destroy();\n super.destroy();\n }\n\n public static categoryAppendStickers(\n tab: EmoticonsTabC,\n stickerRenderer: SuperStickerRenderer,\n count: number,\n category: StickersTabCategory,\n promise: MaybePromise\n ) {\n const {container} = category.elements;\n\n category.setCategoryItemsHeight(count);\n container.classList.remove('hide');\n\n return Promise.all([\n promise,\n apiManagerProxy.isPremiumFeaturesHidden()\n ]).then(([documents, isPremiumFeaturesHidden]) => {\n const isVisible = tab.isCategoryVisible(category);\n\n const elements = documents.map((document) => {\n if(isPremiumFeaturesHidden && getStickerEffectThumb(document)) {\n return;\n }\n\n const element = stickerRenderer.renderSticker(document, undefined, undefined, category.middlewareHelper.get());\n category.items.push({document, element});\n return element;\n }).filter(Boolean);\n\n if(isVisible) {\n category.elements.items.append(...elements);\n }\n });\n }\n\n public static async renderStickerSet(\n tab: EmoticonsTabC,\n stickerRenderer: SuperStickerRenderer,\n set: StickerSet.stickerSet,\n prepend?: boolean\n ) {\n const category = tab.createCategory({\n stickerSet: set,\n title: wrapEmojiText(set.title),\n styles: EmoticonsTabStyles.Stickers\n });\n const {menuTabPadding} = category.elements;\n\n const promise = tab.managers.appStickersManager.getStickerSet(set);\n this.categoryAppendStickers(\n tab,\n stickerRenderer,\n set.count,\n category,\n promise.then((stickerSet) => stickerSet.documents as MyDocument[])\n );\n\n if(prepend !== undefined) {\n tab.positionCategory(category, prepend);\n }\n\n tab.renderStickerSetThumb({\n set,\n menuTabPadding,\n middleware: category.middlewareHelper.get()\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../../lib/appManagers/appDocsManager';\nimport {EMOJI_TEXT_COLOR, EmoticonsDropdown, EMOTICONSSTICKERGROUP} from '..';\nimport cancelEvent from '../../../helpers/dom/cancelEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport {fastRaf} from '../../../helpers/schedulers';\nimport pause from '../../../helpers/schedulers/pause';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport rootScope, {BroadcastEvents} from '../../../lib/rootScope';\nimport {emojiFromCodePoints} from '../../../vendor/emoji';\nimport {putPreloader} from '../../putPreloader';\nimport {ScrollableX} from '../../scrollable';\nimport IS_EMOJI_SUPPORTED from '../../../environment/emojiSupport';\nimport IS_TOUCH_SUPPORTED from '../../../environment/touchSupport';\nimport blurActiveElement from '../../../helpers/dom/blurActiveElement';\nimport Emoji from '../../../config/emoji';\nimport fixEmoji from '../../../lib/richTextProcessor/fixEmoji';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport wrapSingleEmoji from '../../../lib/richTextProcessor/wrapSingleEmoji';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport {makeMediaSize} from '../../../helpers/mediaSize';\nimport {AppManagers} from '../../../lib/appManagers/managers';\nimport VisibilityIntersector, {OnVisibilityChangeItem} from '../../visibilityIntersector';\nimport mediaSizes from '../../../helpers/mediaSizes';\nimport {StickerSet} from '../../../layer';\nimport findAndSplice from '../../../helpers/array/findAndSplice';\nimport positionElementByIndex from '../../../helpers/dom/positionElementByIndex';\nimport PopupStickers from '../../popups/stickers';\nimport {hideToast, toastNew} from '../../toast';\nimport safeAssign from '../../../helpers/object/safeAssign';\nimport liteMode from '../../../helpers/liteMode';\nimport PopupElement from '../../popups';\nimport CustomEmojiElement from '../../../lib/customEmoji/element';\nimport {CustomEmojiRendererElement} from '../../../lib/customEmoji/renderer';\nimport Icon from '../../icon';\nimport {NULL_PEER_ID} from '../../../lib/mtproto/mtproto_config';\nimport anchorCallback from '../../../helpers/dom/anchorCallback';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport findUpAsChild from '../../../helpers/dom/findUpAsChild';\nimport {onCleanup} from 'solid-js';\nimport StickersTabCategory, {EmoticonsTabStyles} from '../category';\nimport EmoticonsTabC from '../tab';\nimport flatten from '../../../helpers/array/flatten';\nimport SuperStickerRenderer from './SuperStickerRenderer';\nimport StickersTab from './stickers';\n\nconst loadedURLs: Set = new Set();\nexport function appendEmoji(_emoji: AppEmoji, unify = false) {\n if(_emoji.docId) {\n const customEmojiElement = CustomEmojiElement.create(_emoji.docId);\n const spanEmoji = document.createElement('span');\n spanEmoji.classList.add('super-emoji', 'super-emoji-custom');\n spanEmoji.append(customEmojiElement);\n return spanEmoji;\n }\n // const emoji = details.unified;\n // const emoji = (details.unified as string).split('-')\n // .reduce((prev, curr) => prev + String.fromCodePoint(parseInt(curr, 16)), '');\n\n let {emoji} = _emoji;\n const spanEmoji = document.createElement('span');\n spanEmoji.classList.add('super-emoji', 'super-emoji-regular');\n\n let kek: DocumentFragment;\n if(unify && !IS_EMOJI_SUPPORTED) {\n kek = wrapSingleEmoji(emoji);\n } else {\n emoji = fixEmoji(emoji);\n kek = wrapEmojiText(emoji);\n }\n\n /* if(!kek.includes('emoji')) {\n console.log(emoji, kek, spanEmoji, emoji.length, new TextEncoder().encode(emoji), emojiUnicode(emoji));\n return;\n } */\n\n // console.log(kek);\n\n spanEmoji.append(kek);\n\n if(spanEmoji.children.length > 1) {\n const first = spanEmoji.firstElementChild;\n spanEmoji.replaceChildren(first);\n }\n\n if(spanEmoji.firstElementChild?.tagName === 'IMG') {\n const image = spanEmoji.firstElementChild as HTMLImageElement;\n\n const url = image.src;\n if(!loadedURLs.has(url)) {\n image.setAttribute('loading', 'lazy');\n const placeholder = document.createElement('span');\n placeholder.classList.add('emoji-placeholder');\n\n if(liteMode.isAvailable('animations')) {\n image.style.opacity = '0';\n placeholder.style.opacity = '1';\n }\n\n image.addEventListener('load', () => {\n fastRaf(() => {\n if(liteMode.isAvailable('animations')) {\n image.style.opacity = '';\n placeholder.style.opacity = '';\n }\n\n spanEmoji.classList.remove('empty');\n\n loadedURLs.add(url);\n });\n }, {once: true});\n\n spanEmoji.append(placeholder);\n }\n }\n\n // spanEmoji = spanEmoji.firstElementChild as HTMLSpanElement;\n // spanEmoji.setAttribute('emoji', emoji);\n\n return spanEmoji;\n}\n\nexport function getEmojiFromElement(element: HTMLElement): {docId?: DocId, emoji: string} {\n const superEmoji = findUpClassName(element, 'super-emoji');\n if(!superEmoji) return;\n\n const firstElementChild = superEmoji.firstElementChild as HTMLElement;\n if(firstElementChild && firstElementChild.classList.contains('custom-emoji')) {\n return {emoji: firstElementChild.dataset.stickerEmoji, docId: firstElementChild.dataset.docId} as const;\n } else {\n if(element.nodeType === element.TEXT_NODE) return {emoji: element.nodeValue};\n if(element.tagName === 'SPAN' && !element.classList.contains('emoji') && element.firstElementChild) {\n element = element.firstElementChild as HTMLElement;\n }\n\n return {emoji: element.getAttribute('alt') || element.innerText} as const;\n }\n}\n\nconst EMOJI_RECENT_ID: (typeof EMOJI_CATEGORIES)[0][0] = 'Emoji.Recent';\nconst EMOJI_RECENT_CATEGORY: (typeof EMOJI_CATEGORIES)[0] = [EMOJI_RECENT_ID, 'recent'];\nconst CUSTOM_EMOJI_RECENT_ID: (typeof EMOJI_CATEGORIES)[0][0] = '';\nconst CUSTOM_EMOJI_RECENT_CATEGORY: (typeof EMOJI_CATEGORIES)[0] = [CUSTOM_EMOJI_RECENT_ID, ''];\nconst EMOJI_CATEGORIES: [LangPackKey | '', string][] = [\n ['Emoji.SmilesAndPeople', 'smile'],\n ['Emoji.AnimalsAndNature', 'animals'],\n ['Emoji.FoodAndDrink', 'eats'],\n ['Emoji.TravelAndPlaces', 'car'],\n ['Emoji.ActivityAndSport', 'sport'],\n ['Emoji.Objects', 'lamp'],\n // ['Emoji.Symbols', 'info'],\n ['Emoji.Flags', 'flag'],\n ['Skin Tones' as any, '']\n];\n\nlet sorted: Map<(typeof EMOJI_CATEGORIES)[0], string[]>;\nfunction prepare() {\n if(sorted) {\n return sorted;\n }\n\n const a: Array<[(typeof EMOJI_CATEGORIES)[0], string[]]> = [\n [CUSTOM_EMOJI_RECENT_CATEGORY, []],\n [EMOJI_RECENT_CATEGORY, []]\n ];\n\n sorted = new Map(a);\n for(const emoji in Emoji) {\n const details = Emoji[emoji];\n const i = '' + details;\n const category = EMOJI_CATEGORIES[+i[0] - 1];\n if(!category) continue; // maybe it's skin tones\n\n let s = sorted.get(category);\n if(!s) {\n s = [];\n sorted.set(category, s);\n }\n\n s[+i.slice(1) || 0] = emoji;\n }\n\n sorted.delete(EMOJI_CATEGORIES.pop());\n EMOJI_CATEGORIES.unshift(CUSTOM_EMOJI_RECENT_CATEGORY, EMOJI_RECENT_CATEGORY);\n const order = EMOJI_CATEGORIES.map(([id]) => id);\n const entries = [...sorted.entries()].sort((a, b) => order.indexOf(a[0][0]) - order.indexOf(b[0][0]));\n sorted = new Map(entries);\n\n return sorted;\n}\n\nexport const EMOJI_ELEMENT_SIZE = makeMediaSize(42, 42);\nconst RECENT_MAX_LENGTH = 32;\n\ntype EmojiTabItem = {element: HTMLElement} & ReturnType;\nexport type EmojiTabCategory = StickersTabCategory;\nexport default class EmojiTab extends EmoticonsTabC {\n private closeScrollTop: number;\n private menuInnerScroll: ScrollableX;\n private isStandalone?: boolean;\n private noRegularEmoji?: boolean;\n private mainSets: () => (Promise | Array>);\n private additionalSets: () => Promise;\n private additionalLocalStickerSet: () => Promise<{title: LangPackKey, stickers: MyDocument[]}>;\n private onClick: (emoji: EmojiTabItem) => void;\n private activeEmoji: ReturnType;\n private activeElements: EmojiTabItem[];\n private noPacks: boolean;\n private noSearch: boolean;\n private preloaderDelay: number;\n private freeCustomEmoji: Set;\n private canHaveEmojiTimer?: boolean;\n private onReady: () => void;\n private stickerRenderer: SuperStickerRenderer;\n private showLocks: boolean;\n public initPromise: Promise;\n\n constructor(options: {\n managers: AppManagers,\n isStandalone?: boolean,\n noRegularEmoji?: boolean,\n mainSets?: EmojiTab['mainSets'],\n additionalSets?: EmojiTab['additionalSets'],\n additionalLocalStickerSet?: EmojiTab['additionalLocalStickerSet'],\n onClick?: EmojiTab['onClick'],\n noPacks?: EmojiTab['noPacks'],\n noSearch?: EmojiTab['noSearch'],\n preloaderDelay?: EmojiTab['preloaderDelay'],\n freeCustomEmoji?: EmojiTab['freeCustomEmoji'],\n canHaveEmojiTimer?: EmojiTab['canHaveEmojiTimer'],\n onReady?: EmojiTab['onReady'],\n searchFetcher?: EmojiTab['searchFetcher'],\n groupFetcher?: EmojiTab['groupFetcher'],\n showLocks?: boolean\n }) {\n super({\n managers: options.managers,\n noMenu: options.noPacks,\n searchFetcher: options.noSearch ? undefined : async(value) => {\n if(!value) return {emojis: []};\n\n if(options.searchFetcher) {\n return options.searchFetcher(value);\n }\n\n return {emojis: await this.managers.appEmojiManager.prepareAndSearchEmojis({q: value, limit: Infinity, minChars: 1, addCustom: true})};\n },\n groupFetcher: options.groupFetcher ? options.groupFetcher : async(group) => {\n if(group?._ !== 'emojiGroup') return {emojis: []};\n\n if(options.groupFetcher) {\n return options.groupFetcher(group);\n }\n\n const emojiList = await this.managers.appEmojiManager.searchCustomEmoji(group.emoticons.join(''));\n\n const emojis: AppEmoji[] = [\n ...emojiList.document_id.map((docId) => ({docId, emoji: ''})),\n ...group.emoticons.map((emoji) => ({emoji}))\n ];\n\n return {emojis};\n },\n processSearchResult: async({data, searching, grouping}) => {\n const {emojis, localStickerSet} = data || {};\n if(!emojis || (!searching && !grouping)) {\n return;\n }\n\n if(!emojis.length && !localStickerSet) {\n const span = i18n('NoEmojiFound');\n span.classList.add('emoticons-not-found');\n return span;\n }\n\n const container = this.categoriesContainer.cloneNode(false) as HTMLElement;\n const category = this.createCategory({styles: EmoticonsTabStyles.Emoji});\n this.createEmojiRendererForCategory(category);\n for(const emoji of emojis) {\n this.addEmojiToCategory({\n category: category,\n emoji,\n batch: true\n });\n }\n category.setCategoryItemsHeight(emojis.length);\n category.elements.container.style.paddingTop = '.5rem';\n category.elements.container.classList.remove('hide');\n this._onCategoryVisibility(category, true);\n\n const renderedCategories: EmojiTabCategory[] = [category];\n if(localStickerSet) {\n const category = this.renderLocalStickerSet(localStickerSet);\n renderedCategories.push(category);\n }\n\n container.append(...renderedCategories.map((category) => category.elements.container));\n\n onCleanup(() => {\n renderedCategories.forEach((category) => {\n category.middlewareHelper.destroy();\n });\n });\n\n return container;\n },\n searchNoLoader: true,\n searchPlaceholder: 'SearchEmoji',\n searchType: 'emoji'\n });\n\n safeAssign(this, options);\n this.container.classList.add('emoji-padding');\n this.content.id = 'content-emoji';\n this.activeElements = [];\n this.freeCustomEmoji ??= new Set();\n }\n\n public _onCategoryVisibility(category: EmojiTabCategory, visible: boolean) {\n // console.log(target, visible, category);\n // if(category.local) return;\n\n const renderer = category.elements.renderer;\n const newChildren: HTMLElement[] = [];\n if(renderer) {\n newChildren.push(renderer);\n const customEmojis: Parameters[0]['addCustomEmojis'] = new Map();\n if(visible) {\n newChildren.push(...category.items.map(({docId, element}) => {\n if(!docId) {\n return element;\n }\n\n // return element;\n\n // if(element.firstElementChild) {\n // return element;\n // }\n\n const customEmojiElement = element.firstElementChild as CustomEmojiElement;\n customEmojiElement.clear(false);\n // const customEmojiElement = CustomEmojiElement.create(document.id);\n customEmojis.set(customEmojiElement.docId, new Set([customEmojiElement]));\n // element.append(customEmojiElement);\n return element;\n }));\n\n renderer.add({\n addCustomEmojis: customEmojis\n });\n } else {\n renderer.clearCanvas();\n renderer.middlewareHelper.clean();\n }\n } else if(visible) {\n newChildren.push(...category.items.map(({element}) => element));\n }\n\n // if(visible)\n category.elements.items.replaceChildren(...newChildren);\n\n if(renderer && !visible) {\n const customEmojis: Parameters[0]['addCustomEmojis'] = new Map();\n category.items.forEach(({docId, element}) => {\n if(!docId) {\n return;\n }\n\n const customEmojiElement = element.firstElementChild as CustomEmojiElement;\n customEmojiElement.clear();\n customEmojis.set(customEmojiElement.docId, new Set([customEmojiElement]));\n });\n\n /* const promise = */renderer.add({\n addCustomEmojis: customEmojis,\n onlyThumb: true\n });\n // promise.then(() => {\n // customEmojis.forEach((elements) => {\n // elements.forEach((element) => {\n // if(!element.innerHTML) {\n // console.log('no thumb', element);\n // // debugger;\n // }\n // });\n // });\n\n // const set = customEmojis.get('5766933926429854499');\n // console.log(`wrapped ${customEmojis.size} thumbs`, set && set.values().next().value.innerHTML);\n // });\n }\n\n // if(!visible) {\n // const customEmojis: Parameters[0] = {};\n // category.items.forEach((item) => {\n // const {element, document} = item;\n // if(!element.firstElementChild) {\n // return;\n // }\n\n // const customEmojiElement = CustomEmojiElement.create(document.id);\n // customEmojis[customEmojiElement.docId] = new Set([customEmojiElement]);\n // element.firstElementChild.replaceWith(customEmojiElement);\n // });\n\n // renderer.add(customEmojis, EmoticonsDropdown.lazyLoadQueue);\n // }\n }\n\n private onCategoryVisibility = ({target, visible}: Pick) => {\n this._onCategoryVisibility(this.categoriesMap.get(target), visible);\n };\n\n public destroy() {\n super.destroy();\n this.menuInnerScroll?.destroy();\n }\n\n public init() {\n super.init();\n this.init = undefined;\n\n const intersectionOptions: IntersectionObserverInit = {\n root: this.isStandalone ? this.content : this.emoticonsDropdown.getElement()\n };\n\n this.categoriesIntersector = new VisibilityIntersector(this.onCategoryVisibility, intersectionOptions);\n\n if(this.menu) this.menuOnClickResult = EmoticonsDropdown.menuOnClick(\n this,\n this.menu,\n this.scrollable,\n this.menuScroll,\n undefined,\n this.listenerSetter\n );\n\n const preloader = putPreloader(this.content, true);\n\n let innerScrollWrapper: HTMLElement;\n\n if(!this.isStandalone && this.menu) {\n const x = this.menuInnerScroll = new ScrollableX(undefined);\n x.container.classList.add('menu-horizontal-inner-scroll');\n\n innerScrollWrapper = document.createElement('div');\n innerScrollWrapper.classList.add('menu-horizontal-inner');\n innerScrollWrapper.append(x.container);\n }\n\n let preparedMap: ReturnType;\n prepare();\n if(!this.noRegularEmoji) {\n preparedMap = prepare();\n } else {\n preparedMap = new Map([\n [[CUSTOM_EMOJI_RECENT_CATEGORY[0], 'recent'], []]\n // [EMOJI_RECENT_CATEGORY, []]\n ]);\n\n if(this.menu) {\n preparedMap.set([EMOJI_RECENT_CATEGORY[0], ''], []);\n }\n }\n\n preparedMap.forEach((emojis, [titleLangPackKey, icon]) => {\n const category = this.createLocalCategory({\n id: titleLangPackKey,\n title: titleLangPackKey,\n icon: icon as Icon,\n noMenuTab: !icon,\n styles: EmoticonsTabStyles.Emoji\n });\n category.elements.container.classList.remove('hide');\n\n emojis.forEach((unified) => {\n /* if(emojiUnicode(emoji) === '1f481-200d-2642') {\n console.log('append emoji', emoji, emojiUnicode(emoji));\n } */\n\n const emoji = emojiFromCodePoints(unified);\n // if(emoji.includes('🕵')) {\n // console.log('toCodePoints', toCodePoints(emoji));\n // emoji = emoji.replace(/(\\u200d[\\u2640\\u2642\\u2695])(?!\\ufe0f)/, '\\ufe0f$1');\n // const zwjIndex = emoji.indexOf('\\u200d');\n // if(zwjIndex !== -1 && !emoji.includes('\\ufe0f')) {\n // /* if(zwjIndex !== (emoji.length - 1)) {\n // emoji = emoji.replace(/(\\u200d)/g, '\\ufe0f$1');\n // } */\n\n // emoji += '\\ufe0f';\n // //emoji += '\\ufe0f';\n // }\n\n // debugger;\n // }\n\n this.addEmojiToCategory({\n category,\n emoji: {emoji},\n batch: true\n });\n\n /* if(category === 'Smileys & Emotion') {\n console.log('appended emoji', emoji, itemsDiv.children[itemsDiv.childElementCount - 1].innerHTML, emojiUnicode(emoji));\n } */\n });\n });\n\n const mainSetsResult = this.mainSets?.();\n const promise = Promise.all([\n !this.preloaderDelay ? undefined : pause(this.preloaderDelay),\n !this.noRegularEmoji && this.managers.appEmojiManager.getRecentEmojis('native'),\n !this.isStandalone && this.managers.appEmojiManager.getRecentEmojis('custom'),\n !this.noPacks && Promise.resolve(apiManagerProxy.isPremiumFeaturesHidden()).then((isPremiumPurchaseHidden) => {\n return isPremiumPurchaseHidden ? undefined : this.managers.appEmojiManager.getCustomEmojis();\n }),\n mainSetsResult && Promise.all(Array.isArray(mainSetsResult) ? mainSetsResult : [mainSetsResult]),\n this.additionalSets?.(),\n this.additionalLocalStickerSet?.()\n ]).then(([_, recent, recentCustom, sets, mainSets, additionalSets, additionalLocalStickerSet]) => {\n preloader.remove();\n\n const docIdsToCustomEmoji = (docIds: DocId[]): ReturnType[] => {\n return docIds.map((docId) => {\n return {emoji: '', docId};\n });\n };\n\n let recentEmojis: ReturnType[], recentCustomEmojis: typeof recentEmojis;\n if(mainSets) {\n recentCustomEmojis = docIdsToCustomEmoji(mainSets[0]);\n if(mainSets[1]) recentEmojis = docIdsToCustomEmoji(mainSets[1]);\n }\n\n if(!recentEmojis && recent) {\n recentEmojis = recent.map((emoji) => ({emoji}));\n }\n\n if(!recentCustomEmojis && recentCustom) {\n recentCustomEmojis = docIdsToCustomEmoji(recentCustom);\n }\n\n const recentCategory = this.categories[EMOJI_RECENT_ID];\n const recentCustomCategory = this.categories[CUSTOM_EMOJI_RECENT_ID];\n\n if(!this.noRegularEmoji) {\n const a = [\n recentCategory && [recentCategory, recent] as const,\n recentCustomCategory && [recentCustomCategory, recentCustom] as const\n ];\n\n a.filter(Boolean).forEach(([category, recent]) => {\n category.limit = RECENT_MAX_LENGTH;\n recent.splice(RECENT_MAX_LENGTH, recent.length - RECENT_MAX_LENGTH);\n });\n }\n\n if(recentCategory) {\n this.createEmojiRendererForCategory(recentCategory);\n if(recentEmojis?.length) for(const emoji of recentEmojis) {\n this.addEmojiToCategory({\n category: recentCategory,\n emoji,\n batch: true\n });\n }\n }\n\n if(recentCustomCategory) {\n this.createEmojiRendererForCategory(recentCustomCategory);\n if(recentCustomEmojis?.length) for(const emoji of recentCustomEmojis) {\n this.addEmojiToCategory({\n category: recentCustomCategory,\n emoji,\n batch: true\n });\n }\n recentCustomCategory.elements.container.style.paddingTop = '.5rem';\n if(this.noMenu) {\n recentCustomCategory.elements.container.style.paddingBottom = '.5rem';\n }\n }\n\n EMOJI_CATEGORIES.forEach(([id]) => {\n const category = this.categories[id];\n if(!category) {\n return;\n }\n\n this.toggleLocalCategory(category, !!category.items.length);\n\n if(id !== EMOJI_RECENT_ID && id !== CUSTOM_EMOJI_RECENT_ID) {\n category.menuScroll = this.menuInnerScroll;\n this.menuInnerScroll.append(category.elements.menuTab);\n }\n });\n\n this.resizeCategories();\n\n if(recentCategory && innerScrollWrapper && recentCategory.elements.menuTab) {\n recentCategory.elements.menuTab.after(innerScrollWrapper);\n }\n\n flatten([sets?.sets, additionalSets].filter(Boolean)).forEach((set) => {\n this.renderEmojiSet(set);\n });\n\n if(additionalLocalStickerSet) {\n const category = this.renderLocalStickerSet(additionalLocalStickerSet);\n this.categoriesContainer.append(category.elements.container);\n }\n\n this.continueInit();\n });\n\n attachClickEvent(this.content, this.onContentClick, {listenerSetter: this.listenerSetter});\n\n const recentCategory = this.categories[EMOJI_RECENT_ID];\n const recentCustomCategory = this.categories[CUSTOM_EMOJI_RECENT_ID];\n this.attachHelpers({\n getTextColor: () => this.textColor,\n verifyRecent: (target) => !!(findUpAsChild(target, recentCustomCategory.elements.items) || findUpAsChild(target, recentCategory.elements.items)),\n canHaveEmojiTimer: this.canHaveEmojiTimer\n });\n\n return this.initPromise = promise;\n }\n\n private renderLocalStickerSet(localStickerSet: {title: LangPackKey, stickers: MyDocument[]}) {\n this.stickerRenderer ??= this.createStickerRenderer();\n const category = this.createLocalCategory({\n title: localStickerSet.title,\n styles: EmoticonsTabStyles.Stickers,\n noMenuTab: true\n });\n\n StickersTab.categoryAppendStickers(\n this,\n this.stickerRenderer,\n localStickerSet.stickers.length,\n category as any,\n localStickerSet.stickers\n ).then(() => {\n StickersTab._onCategoryVisibility(category, true);\n });\n\n category.elements.container.style.paddingBottom = (EmoticonsTabStyles.Stickers.padding / 2) + 'px';\n return category;\n }\n\n private continueInit() {\n this.listenerSetter.add(rootScope)('premium_toggle', () => {\n this.toggleCustomCategory();\n });\n\n this.listenerSetter.add(rootScope)('stickers_top', this.postponedEvent((id) => {\n const category = this.categories[id];\n if(!category) {\n return;\n }\n\n this.positionCategory(category, true);\n\n this.listenerSetter.add(this.emoticonsDropdown)('openAfterLayout', () => {\n this.menuOnClickResult.setActiveStatic(category);\n }, {once: true});\n }));\n\n const toggleRenderers = (ignore: boolean) => {\n for(const id in this.categories) {\n const category = this.categories[id];\n const renderer = category.elements.renderer;\n if(renderer) {\n renderer.ignoreSettingDimensions = ignore;\n if(!ignore) {\n renderer.setDimensionsFromRect(undefined, true);\n }\n }\n }\n };\n\n !this.isStandalone && this.listenerSetter.add(this.emoticonsDropdown)('opened', () => {\n toggleRenderers(false);\n });\n\n !this.isStandalone && this.listenerSetter.add(this.emoticonsDropdown)('close', () => {\n toggleRenderers(true);\n });\n\n this.listenerSetter.add(rootScope)('stickers_installed', (set) => {\n if(!this.categories[set.id] && set.pFlags.emojis) {\n this.renderEmojiSet(set, true);\n }\n });\n\n this.listenerSetter.add(rootScope)('stickers_deleted', (set) => {\n const category = this.categories[set.id];\n if(this.deleteCategory(category)) {\n const {renderer} = category.elements;\n if(renderer) {\n renderer.middlewareHelper.clean();\n }\n }\n });\n\n const onEmojiRecent = ({emoji, deleted}: BroadcastEvents['emoji_recent']) => {\n const category = this.categories[emoji.docId ? CUSTOM_EMOJI_RECENT_ID : EMOJI_RECENT_ID];\n if(!category) {\n return;\n }\n\n const verify: (item: EmojiTabItem) => boolean = emoji.docId ?\n (item) => item.docId === emoji.docId :\n (item) => item.emoji === emoji.emoji;\n const found = findAndSplice(category.items, verify);\n if(deleted) {\n // * prevent second invocation\n findAndSplice(this.postponedEvents, (event) => event.cb === onEmojiRecent && (event.args[0] as BroadcastEvents['emoji_recent']).deleted);\n if(!found) {\n return;\n }\n\n found.element.remove();\n if(this.isCategoryVisible(category)) {\n this.onLocalCategoryUpdate(category);\n }\n } else if(found) {\n category.items.unshift(found);\n if(this.isCategoryVisible(category)) {\n const {renderer} = category.elements;\n positionElementByIndex(found.element, category.elements.items, renderer ? 1 : 0, -1);\n renderer?.forceRender();\n }\n } else {\n this.addEmojiToCategory({\n category,\n emoji,\n batch: false,\n prepend: true\n });\n }\n\n if(this.closeScrollTop === 0) {\n this.menuOnClickResult.setActive(emoji.docId ? this.categories[EMOJI_RECENT_ID] : category);\n }\n };\n\n !this.noRegularEmoji && this.listenerSetter.add(rootScope)('emoji_recent', this.postponedEvent(onEmojiRecent));\n !this.noRegularEmoji && this.listenerSetter.add(rootScope)('emoji_recent', onEmojiRecent);\n\n this.toggleCustomCategory();\n\n this.menuOnClickResult?.setActive([\n this.categories[EMOJI_RECENT_ID],\n this.categories[CUSTOM_EMOJI_RECENT_ID]\n ].find((category) => !!category.elements.menuTab));\n\n this.onReady?.();\n }\n\n private get peerId() {\n return this.emoticonsDropdown ? this.emoticonsDropdown.chatInput.chat.peerId : NULL_PEER_ID;\n }\n\n public getCustomCategory() {\n return this.categories[CUSTOM_EMOJI_RECENT_ID];\n }\n\n public toggleCustomCategory() {\n const category = this.categories[CUSTOM_EMOJI_RECENT_ID];\n const hasPremium = rootScope.premium || this.peerId === rootScope.myId || !!this.mainSets;\n const canSeeCustomCategory = hasPremium || this.isStandalone;\n super.toggleLocalCategory(category, !!category.items.length && canSeeCustomCategory);\n this.content.classList.toggle('has-premium', hasPremium);\n }\n\n protected toggleLocalCategory(category: EmojiTabCategory, visible: boolean) {\n if(category.id === CUSTOM_EMOJI_RECENT_ID) {\n this.toggleCustomCategory();\n return;\n }\n\n super.toggleLocalCategory(category, visible);\n }\n\n public setTextColor(textColor: string = EMOJI_TEXT_COLOR) {\n this.categoriesMap.forEach((category) => {\n const renderer = category.elements.renderer;\n renderer?.setTextColor(textColor);\n });\n }\n\n public get textColor() {\n return this.emoticonsDropdown?.textColor || EMOJI_TEXT_COLOR;\n }\n\n protected renderEmojiSet(set: StickerSet.stickerSet, prepend?: boolean) {\n const category = this.createCategory({\n stickerSet: set,\n title: wrapEmojiText(set.title),\n styles: EmoticonsTabStyles.Emoji\n });\n this.positionCategory(category, prepend);\n const {container, menuTabPadding} = category.elements;\n category.elements.items.classList.add('not-local');\n category.elements.container.classList.add('is-premium-set');\n category.elements.title.prepend(Icon('premium_lock', 'category-title-lock'));\n\n this.createEmojiRendererForCategory(category);\n\n category.setCategoryItemsHeight(set.count);\n container.classList.remove('hide');\n\n const promise = this.managers.appStickersManager.getStickerSet(set);\n promise.then(({documents}) => {\n documents.forEach((document) => {\n this.addEmojiToCategory({\n category,\n emoji: {docId: document.id, emoji: (document as MyDocument).stickerEmojiRaw},\n batch: true\n });\n });\n\n // if(this.isCategoryVisible(category)) {\n // category.elements.items.append(...category.items.map(({element}) => element));\n // }\n\n this.onCategoryVisibility({target: category.elements.container, visible: this.isCategoryVisible(category)});\n });\n\n this.renderStickerSetThumb({\n set,\n menuTabPadding,\n middleware: category.middlewareHelper.get(),\n textColor: this.textColor\n });\n }\n\n private createEmojiRendererForCategory(category: EmojiTabCategory) {\n const middleware = category.middlewareHelper.get();\n const renderer = CustomEmojiRendererElement.create({\n animationGroup: EMOTICONSSTICKERGROUP,\n customEmojiSize: mediaSizes.active.esgCustomEmoji,\n textColor: this.textColor,\n middleware\n });\n\n category.elements.renderer = renderer;\n category.elements.items.append(renderer);\n }\n\n public addEmojiToCategory(options: {\n category: EmojiTabCategory,\n emoji?: ReturnType,\n element?: HTMLElement,\n batch?: boolean,\n prepend?: boolean,\n active?: boolean\n }) {\n const {category, emoji, batch, prepend} = options;\n let element = options.element;\n if(element) {\n const spanEmoji = document.createElement('span');\n spanEmoji.classList.add('super-emoji');\n spanEmoji.append(element);\n element = spanEmoji;\n } else {\n element = appendEmoji(emoji/* .replace(/[\\ufe0f\\u2640\\u2642\\u2695]/g, '') *//* , false */);\n\n if(this.showLocks && !this.canUseEmoji(emoji, category)) {\n element.append(Icon('premium_lock', 'premium-sticker-lock'));\n }\n }\n\n const item: typeof category['items'][0] = {\n ...(emoji || {emoji: undefined}),\n element\n };\n\n if(\n options.active || (\n this.activeEmoji && (\n item.docId ?\n this.activeEmoji.docId === item.docId :\n this.activeEmoji.emoji === item.emoji\n )\n )\n ) {\n this.activeEmoji === emoji;\n this.activeElements.push(item);\n element.classList.add('active');\n }\n\n category.items[prepend ? 'unshift' : 'push'](item);\n if(!batch && !this.spliceExceed(category)) {\n this.onLocalCategoryUpdate(category);\n }\n }\n\n // private addEmojisToCategory(category: EmojiTabCategory, emojis: string[], prepend?: boolean) {\n // emojis.forEach((emoji) => {\n // this.addEmojiToCategory(category, emoji, true, prepend);\n // });\n\n // this.onLocalCategoryUpdate(category);\n // }\n\n public canUseEmoji(emoji: ReturnType, category?: EmojiTabCategory, showToast?: boolean) {\n if(\n emoji.docId &&\n !rootScope.premium && (\n this.isStandalone && category ? category.id !== CUSTOM_EMOJI_RECENT_ID : this.peerId !== rootScope.myId\n ) && !this.freeCustomEmoji.has(emoji.docId)\n ) {\n if(showToast) {\n const a = anchorCallback(() => {\n hideToast();\n appImManager.openPremiumBot();\n });\n toastNew({\n langPackKey: 'CustomEmoji.PremiumAlert',\n langPackArguments: [a]\n });\n }\n\n return false;\n }\n\n return true;\n }\n\n private onContentClick = (e: MouseEvent) => {\n const {target} = e;\n const container = findUpClassName(target, 'emoji-category');\n if(!container) {\n return;\n }\n\n cancelEvent(e);\n const category = this.categoriesMap.get(container);\n if(!category) { // possibly sticker\n const sticker = findUpClassName(target, 'super-sticker');\n if(sticker) {\n this.onClick({\n emoji: '',\n docId: sticker.dataset.docId,\n element: sticker\n });\n return;\n }\n }\n\n if(findUpClassName(target, 'category-title')) {\n if(category.local) {\n return;\n }\n\n PopupElement.createPopup(\n PopupStickers,\n {\n id: category.set.id,\n access_hash: category.set.access_hash\n },\n true,\n this.emoticonsDropdown.chatInput\n ).show();\n return;\n }\n\n const emoji = getEmojiFromElement(target as HTMLElement);\n if(!emoji || !this.canUseEmoji(emoji, category, true)) {\n return;\n }\n\n if(this.onClick) {\n this.onClick({\n ...emoji,\n element: findUpClassName(target, 'super-emoji').firstElementChild as HTMLElement\n });\n } else {\n this.emoticonsDropdown.chatInput.onEmojiSelected(emoji, false);\n }\n\n if(IS_TOUCH_SUPPORTED) {\n blurActiveElement();\n }\n };\n\n public setActive(emoji: ReturnType) {\n if(\n emoji === this.activeEmoji ||\n emoji?.docId ? emoji.docId === this.activeEmoji?.docId : emoji?.emoji === this.activeEmoji?.emoji\n ) {\n return;\n }\n\n this.activeEmoji = emoji;\n\n this.activeElements.forEach((item) => {\n item.element.classList.remove('active');\n });\n\n this.activeElements.length = 0;\n\n this.categoriesMap.forEach((category) => {\n category.items.forEach((item) => {\n if(emoji.docId ? item.docId === emoji.docId : item.emoji === emoji.emoji) {\n item.element.classList.add('active');\n this.activeElements.push(item);\n }\n });\n });\n }\n\n public onClose() {\n this.closeScrollTop = this.scrollable.scrollPosition;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport findAndSpliceAll from '../helpers/array/findAndSpliceAll';\nimport LazyLoadQueueIntersector, {LazyLoadElement} from './lazyLoadQueueIntersector';\nimport VisibilityIntersector, {OnVisibilityChange} from './visibilityIntersector';\n\nexport default class LazyLoadQueueRepeat2 extends LazyLoadQueueIntersector {\n constructor(parallelLimit?: number, protected onVisibilityChange?: OnVisibilityChange) {\n super(parallelLimit);\n\n this.intersector = new VisibilityIntersector((item) => {\n const {target, visible} = item;\n const spliced = findAndSpliceAll(this.queue, (i) => i.div === target);\n if(visible && spliced.length) {\n spliced.forEach((item) => {\n this.queue.unshift(item);\n });\n }\n\n this.onVisibilityChange && this.onVisibilityChange(item);\n this.setProcessQueueTimeout();\n });\n }\n\n public observe(el: LazyLoadElement) {\n super.observe(el);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport animationIntersector, {AnimationItemGroup} from './animationIntersector';\nimport Scrollable from './scrollable';\nimport deferredPromise, {CancellablePromise} from '../helpers/cancellablePromise';\nimport {doubleRaf} from '../helpers/schedulers';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport rootScope from '../lib/rootScope';\nimport LazyLoadQueueRepeat2 from './lazyLoadQueueRepeat2';\nimport wrapVideo from './wrappers/video';\nimport noop from '../helpers/noop';\nimport {MiddlewareHelper, getMiddleware} from '../helpers/middleware';\nimport positionElementByIndex from '../helpers/dom/positionElementByIndex';\n\nexport default class GifsMasonry {\n public lazyLoadQueue: LazyLoadQueueRepeat2;\n private scrollPromise: CancellablePromise = Promise.resolve();\n private timeout: number = 0;\n private managers: AppManagers;\n private middlewareHelper: MiddlewareHelper;\n private map: Map;\n\n constructor(\n private element: HTMLElement,\n private group: AnimationItemGroup,\n private scrollable: Scrollable,\n attach = true\n ) {\n this.managers = rootScope.managers;\n this.middlewareHelper = getMiddleware();\n this.map = new Map();\n\n this.lazyLoadQueue = new LazyLoadQueueRepeat2(undefined, ({target, visible}) => {\n if(visible) {\n this.processVisibleDiv(target);\n } else {\n this.processInvisibleDiv(target);\n }\n });\n\n if(attach) {\n this.attach();\n }\n }\n\n private onScroll = () => {\n if(this.timeout) {\n clearTimeout(this.timeout);\n } else {\n this.scrollPromise = deferredPromise();\n // animationIntersector.checkAnimations(true, group);\n }\n\n this.timeout = window.setTimeout(() => {\n this.timeout = 0;\n this.scrollPromise.resolve();\n // animationIntersector.checkAnimations(false, group);\n }, 150);\n };\n\n public attach() {\n this.scrollable.container.addEventListener('scroll', this.onScroll);\n }\n\n public detach() {\n this.clear();\n this.scrollable.container.removeEventListener('scroll', this.onScroll);\n this.middlewareHelper.destroy();\n }\n\n public clear() {\n this.lazyLoadQueue.clear();\n }\n\n private processVisibleDiv(div: HTMLElement) {\n const video = div.querySelector('video');\n if(video) {\n return;\n }\n\n const load = () => {\n const docId = div.dataset.docId;\n const promise = Promise.all([this.managers.appDocsManager.getDoc(docId), this.scrollPromise]).then(async([doc]) => {\n if(!this.lazyLoadQueue.intersector.isVisible(div)) {\n this.processInvisibleDiv(div);\n return;\n }\n\n div.middlewareHelper.clean();\n const middleware = div.middlewareHelper.get().create().get();\n const res = await wrapVideo({\n doc,\n container: div as HTMLDivElement,\n lazyLoadQueue: null,\n // lazyLoadQueue: EmoticonsDropdown.lazyLoadQueue,\n group: this.group,\n noInfo: true,\n noPreview: true,\n middleware\n });\n\n const promise = res.loadPromise;\n promise.finally(() => {\n middleware.onDestroy(() => {\n res.video?.remove();\n });\n\n if(!middleware() || !this.lazyLoadQueue.intersector.isVisible(div)) {\n this.processInvisibleDiv(div);\n return;\n }\n\n const thumb = div.querySelector('img, canvas');\n thumb && thumb.classList.add('hide');\n });\n\n return promise;\n });\n\n return promise;\n };\n\n // return load();\n\n this.lazyLoadQueue.push({div, load});\n }\n\n public processInvisibleDiv = (div: HTMLElement) => {\n return this.scrollPromise.then(async() => {\n // return;\n\n if(this.lazyLoadQueue.intersector.isVisible(div)) {\n return;\n }\n\n const thumb = div.querySelector('img, canvas');\n\n if(thumb) {\n thumb.classList.remove('hide');\n await doubleRaf();\n }\n\n if(this.lazyLoadQueue.intersector.isVisible(div)) {\n return;\n }\n\n div.middlewareHelper.clean();\n });\n };\n\n public addBatch(docs: MyDocument[]) {\n docs.forEach((doc) => this.add(doc));\n }\n\n public update(docs: MyDocument[]) {\n for(const [docId] of this.map) {\n if(!docs.some((doc) => doc.id === docId)) {\n this.delete(docId);\n }\n }\n\n this.addBatch(docs);\n for(let i = 0, length = docs.length; i < length; ++i) {\n const element = this.map.get(docs[i].id);\n positionElementByIndex(element, this.element, i);\n }\n }\n\n public add(doc: MyDocument, appendTo = this.element) {\n if(this.map.has(doc.id)) {\n return;\n }\n\n const div = document.createElement('div');\n div.classList.add('gif', 'grid-item'/* , 'fade-in-transition' */);\n // div.style.opacity = '0';\n div.dataset.docId = '' + doc.id;\n div.middlewareHelper = this.middlewareHelper.get().create();\n this.map.set(doc.id, div);\n\n appendTo.append(div);\n\n this.lazyLoadQueue.observe({div, load: noop as any});\n\n // let preloader = new ProgressivePreloader(div);\n\n wrapVideo({\n doc,\n container: div as HTMLDivElement,\n lazyLoadQueue: null,\n noInfo: true,\n onlyPreview: true,\n middleware: div.middlewareHelper.get()\n });\n }\n\n public delete(docId: DocId) {\n const div = this.map.get(docId);\n if(div) {\n div.remove();\n div.middlewareHelper.destroy();\n this.map.delete(docId);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type AppGifsManager from '../../../lib/appManagers/appGifsManager';\nimport {EMOTICONSSTICKERGROUP} from '..';\nimport GifsMasonry from '../../gifsMasonry';\nimport {putPreloader} from '../../putPreloader';\nimport {AppManagers} from '../../../lib/appManagers/managers';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport EmoticonsTabC from '../tab';\nimport safeAssign from '../../../helpers/object/safeAssign';\nimport {i18n} from '../../../lib/langPack';\nimport {onCleanup} from 'solid-js';\nimport {Middleware} from '../../../helpers/middleware';\nimport createMiddleware from '../../../helpers/solid/createMiddleware';\nimport rootScope from '../../../lib/rootScope';\n\nexport default class GifsTab extends EmoticonsTabC>> {\n private query: string;\n\n constructor(options: {\n managers: AppManagers\n }) {\n super({\n managers: options.managers,\n noMenu: true,\n searchFetcher: async(value) => {\n if(!value) return {documents: [], nextOffset: ''};\n return this.managers.appGifsManager.searchGifs(this.query = value);\n },\n groupFetcher: async(group) => {\n if(group?._ !== 'emojiGroup') return {documents: [], nextOffset: ''};\n return this.managers.appGifsManager.searchGifs(this.query = group.emoticons.join(''));\n },\n processSearchResult: async({data: {documents: gifs, nextOffset}, searching, grouping}) => {\n if(!gifs || (!searching && !grouping)) {\n return;\n }\n\n if(!gifs.length) {\n const span = i18n('NoGIFsFound');\n span.classList.add('emoticons-not-found');\n return span;\n }\n\n const middleware = createMiddleware().get();\n const container = this.categoriesContainer.cloneNode(false) as HTMLElement;\n const {masonry, container: gifsContainer} = this.createMasonry(middleware);\n gifs.forEach((doc) => masonry.add(doc));\n container.append(gifsContainer);\n\n const old = this.scrollable.onAdditionalScroll;\n this.scrollable.onAdditionalScroll = () => {\n old?.();\n\n if(!nextOffset) {\n return;\n }\n\n this.managers.appGifsManager.searchGifs(this.query, nextOffset).then(({documents, nextOffset: newNextOffset}) => {\n if(!middleware()) {\n return;\n }\n\n documents.forEach((doc) => masonry.add(doc));\n nextOffset = newNextOffset;\n });\n\n // prevent multiple requests\n nextOffset = undefined;\n };\n\n onCleanup(() => {\n this.scrollable.onAdditionalScroll = old;\n });\n\n return container;\n },\n searchNoLoader: true,\n searchPlaceholder: 'SearchGIFs',\n searchType: 'gifs'\n });\n\n safeAssign(this, options);\n this.container.classList.add('gifs-padding');\n this.content.id = 'content-gifs';\n }\n\n private createMasonry(middleware: Middleware) {\n const gifsContainer = document.createElement('div');\n gifsContainer.classList.add('gifs-masonry');\n const detachClickEvent = attachClickEvent(gifsContainer, this.emoticonsDropdown.onMediaClick);\n const masonry = new GifsMasonry(gifsContainer, EMOTICONSSTICKERGROUP, this.scrollable);\n\n middleware.onDestroy(() => {\n masonry.clear();\n detachClickEvent();\n });\n\n this.emoticonsDropdown.addLazyLoadQueueRepeat(masonry.lazyLoadQueue, masonry.processInvisibleDiv, middleware);\n return {masonry, container: gifsContainer};\n }\n\n public init() {\n const middleware = this.middlewareHelper.get();\n const {masonry, container} = this.createMasonry(middleware);\n this.categoriesContainer.append(container);\n const preloader = putPreloader(this.content, true);\n\n this.managers.appGifsManager.getGifs().then((docs) => {\n masonry.addBatch(docs);\n preloader.remove();\n });\n\n rootScope.addEventListener('gifs_updated', (gifs) => {\n masonry.update(gifs);\n });\n\n this.attachHelpers({\n isGif: true\n });\n\n this.init = undefined;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../../lib/appManagers/appDocsManager';\nimport {SliderSuperTab} from '../../slider';\nimport InputSearch from '../../inputSearch';\nimport animationIntersector, {AnimationItemGroup} from '../../animationIntersector';\nimport appSidebarRight from '..';\nimport {AppInlineBotsManager} from '../../../lib/appManagers/appInlineBotsManager';\nimport GifsMasonry from '../../gifsMasonry';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport mediaSizes from '../../../helpers/mediaSizes';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport {NULL_PEER_ID} from '../../../lib/mtproto/mtproto_config';\n\nconst ANIMATIONGROUP: AnimationItemGroup = 'GIFS-SEARCH';\n\nexport default class AppGifsTab extends SliderSuperTab {\n private inputSearch: InputSearch;\n private gifsDiv: HTMLDivElement;\n\n private nextOffset = '';\n private loadedAll = false;\n\n private gifBotPeerId: PeerId;\n private masonry: GifsMasonry;\n\n private searchPromise: ReturnType;\n\n public init() {\n this.container.id = 'search-gifs-container';\n\n this.inputSearch = new InputSearch({\n placeholder: 'SearchGifsTitle',\n onChange: (value) => {\n this.reset();\n this.search(value);\n }\n });\n\n this.title.replaceWith(this.inputSearch.container);\n\n this.gifsDiv = document.createElement('div');\n this.gifsDiv.classList.add('gifs-masonry');\n attachClickEvent(this.gifsDiv, this.onGifsClick, {listenerSetter: this.listenerSetter});\n\n this.scrollable.append(this.gifsDiv);\n\n this.masonry = new GifsMasonry(this.gifsDiv, ANIMATIONGROUP, this.scrollable);\n // this.backBtn.parentElement.append(this.inputSearch.container);\n\n appSidebarRight.toggleSidebar(true).then(() => {\n this.search('', true);\n\n this.scrollable.onScrolledBottom = () => {\n this.search(this.inputSearch.value, false);\n };\n });\n }\n\n private onGifsClick = async(e: MouseEvent | TouchEvent) => {\n const target = findUpClassName(e.target, 'gif');\n if(!target) return;\n\n const fileId = target.dataset.docId;\n if(await appImManager.chat.input.sendMessageWithDocument({document: fileId, target})) {\n if(mediaSizes.isMobile) {\n appSidebarRight.onCloseBtnClick();\n }\n } else {\n console.warn('got no doc by id:', fileId);\n }\n };\n\n public onClose() {\n this.scrollable.onScrolledBottom = () => {};\n }\n\n public onCloseAfterTimeout() {\n this.reset();\n this.gifsDiv.replaceChildren();\n animationIntersector.checkAnimations(undefined, ANIMATIONGROUP);\n this.inputSearch.remove();\n return super.onCloseAfterTimeout();\n }\n\n private reset() {\n this.searchPromise = null;\n this.nextOffset = '';\n this.loadedAll = false;\n this.masonry.clear();\n }\n\n public async search(query: string, newSearch = true) {\n if(this.searchPromise || this.loadedAll) return;\n\n if(!this.gifBotPeerId) {\n this.gifBotPeerId = (await this.managers.appUsersManager.resolveUsername('gif')).id.toPeerId(false);\n }\n\n try {\n this.searchPromise = this.managers.appInlineBotsManager.getInlineResults(NULL_PEER_ID, this.gifBotPeerId, query, this.nextOffset);\n const {results, next_offset} = await this.searchPromise;\n\n if(this.inputSearch.value !== query) {\n return;\n }\n\n this.searchPromise = null;\n this.nextOffset = next_offset;\n if(newSearch) {\n this.gifsDiv.replaceChildren();\n }\n\n if(results.length) {\n results.forEach((result) => {\n if(result._ === 'botInlineMediaResult' && result.document) {\n this.masonry.add(result.document as MyDocument);\n }\n });\n } else {\n this.loadedAll = true;\n }\n\n this.scrollable.onScroll();\n } catch(err) {\n this.searchPromise = null;\n console.error('gifs loading error:', err);\n throw err;\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport InputSearch from '../../inputSearch';\nimport LazyLoadQueue from '../../lazyLoadQueue';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport PopupStickers from '../../popups/stickers';\nimport animationIntersector from '../../animationIntersector';\nimport appSidebarRight from '..';\nimport {StickerSet, StickerSetCovered} from '../../../layer';\nimport {i18n} from '../../../lib/langPack';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport forEachReverse from '../../../helpers/array/forEachReverse';\nimport setInnerHTML from '../../../helpers/dom/setInnerHTML';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport attachStickerViewerListeners from '../../stickerViewer';\nimport wrapSticker from '../../wrappers/sticker';\nimport PopupElement from '../../popups';\n\nexport default class AppStickersTab extends SliderSuperTab {\n private inputSearch: InputSearch;\n private setsDiv: HTMLDivElement;\n private lazyLoadQueue: LazyLoadQueue;\n\n public init() {\n this.container.id = 'stickers-container';\n this.container.classList.add('chatlist-container');\n\n this.lazyLoadQueue = new LazyLoadQueue();\n\n this.inputSearch = new InputSearch({\n placeholder: 'StickersTab.SearchPlaceholder',\n onChange: (value) => {\n this.search(value);\n }\n });\n\n this.title.replaceWith(this.inputSearch.container);\n\n this.setsDiv = document.createElement('div');\n this.setsDiv.classList.add('sticker-sets');\n this.scrollable.append(this.setsDiv);\n\n attachStickerViewerListeners({listenTo: this.setsDiv, listenerSetter: this.listenerSetter});\n\n attachClickEvent(this.setsDiv, (e) => {\n const sticker = findUpClassName(e.target, 'sticker-set-sticker');\n if(sticker) {\n const docId = sticker.dataset.docId;\n appImManager.chat.input.sendMessageWithDocument({document: docId, target: sticker});\n return;\n }\n\n const target = findUpClassName(e.target, 'sticker-set');\n if(!target) return;\n\n const id = target.dataset.stickerSet as string;\n const access_hash = target.dataset.access_hash as string;\n\n const button = findUpClassName(e.target, 'sticker-set-button') as HTMLElement;\n if(button) {\n e.preventDefault();\n e.cancelBubble = true;\n\n button.setAttribute('disabled', 'true');\n\n this.managers.appStickersManager.getStickerSet({id, access_hash}).then((full) => {\n this.managers.appStickersManager.toggleStickerSet(full.set).then((changed) => {\n if(changed) {\n button.textContent = '';\n button.append(i18n(full.set.installed_date ? 'Stickers.SearchAdded' : 'Stickers.SearchAdd'));\n button.classList.toggle('gray', !!full.set.installed_date);\n }\n }).finally(() => {\n // button.style.width = set.installed_date ? '68px' : '52px';\n button.removeAttribute('disabled');\n });\n });\n } else {\n this.managers.appStickersManager.getStickerSet({id, access_hash}).then((full) => {\n PopupElement.createPopup(PopupStickers, full.set).show();\n });\n }\n }, {listenerSetter: this.listenerSetter});\n\n appSidebarRight.toggleSidebar(true).then(() => {\n this.renderFeatured();\n });\n }\n\n public onCloseAfterTimeout() {\n this.setsDiv.replaceChildren();\n animationIntersector.checkAnimations(undefined, 'STICKERS-SEARCH');\n return super.onCloseAfterTimeout();\n }\n\n public renderSet(set: StickerSet.stickerSet) {\n // console.log('renderSet:', set);\n const div = document.createElement('div');\n div.classList.add('sticker-set');\n\n const header = document.createElement('div');\n header.classList.add('sticker-set-header');\n\n const details = document.createElement('div');\n details.classList.add('sticker-set-details');\n details.innerHTML = `
`;\n\n setInnerHTML(details.firstElementChild, wrapEmojiText(set.title));\n\n const countDiv = document.createElement('div');\n countDiv.classList.add('sticker-set-count');\n countDiv.append(i18n('Stickers', [set.count]));\n details.append(countDiv);\n\n const button = document.createElement('button');\n button.classList.add('btn-primary', 'btn-color-primary', 'sticker-set-button');\n button.append(i18n(set.installed_date ? 'Stickers.SearchAdded' : 'Stickers.SearchAdd'));\n // button.style.width = set.installed_date ? '68px' : '52px';\n\n if(set.installed_date) {\n button.classList.add('gray');\n }\n\n // ripple(button);\n\n header.append(details, button);\n\n const stickersDiv = document.createElement('div');\n stickersDiv.classList.add('sticker-set-stickers');\n\n const count = Math.min(5, set.count);\n for(let i = 0; i < count; ++i) {\n const stickerDiv = document.createElement('div');\n stickerDiv.classList.add('sticker-set-sticker');\n\n stickersDiv.append(stickerDiv);\n }\n\n this.managers.appStickersManager.getStickerSet(set).then((set) => {\n // console.log('renderSet got set:', set);\n\n for(let i = 0; i < count; ++i) {\n const div = stickersDiv.children[i] as HTMLDivElement;\n const doc = set.documents[i];\n if(doc._ === 'documentEmpty') {\n continue;\n }\n\n wrapSticker({\n doc,\n div,\n lazyLoadQueue: this.lazyLoadQueue,\n group: 'STICKERS-SEARCH',\n /* play: false,\n loop: false, */\n play: true,\n loop: true,\n width: 68,\n height: 68,\n withLock: true\n });\n }\n });\n\n /* const onMouseOver = () => {\n const animations: AnimationItem['animation'][] = [];\n for(let i = 0; i < count; ++i) {\n const stickerDiv = stickersDiv.children[i] as HTMLElement;\n const animationItem = animationIntersector.getAnimation(stickerDiv);\n if(!animationItem) continue;\n\n const animation = animationItem.animation;\n\n animations.push(animation);\n animation.loop = true;\n animation.play();\n }\n\n div.addEventListener('mouseout', () => {\n animations.forEach((animation) => {\n animation.loop = false;\n });\n\n div.addEventListener('mouseover', onMouseOver, {once: true});\n }, {once: true});\n };\n\n div.addEventListener('mouseover', onMouseOver, {once: true}); */\n\n div.dataset.stickerSet = '' + set.id;\n div.dataset.access_hash = '' + set.access_hash;\n div.dataset.title = set.title;\n\n div.append(header, stickersDiv);\n\n this.setsDiv.append(div);\n }\n\n public renderFeatured() {\n return this.managers.appStickersManager.getFeaturedStickers().then((coveredSets) => {\n if(this.inputSearch.value) {\n return;\n }\n\n coveredSets = this.filterRendered('', coveredSets);\n coveredSets.forEach((set) => {\n this.renderSet(set.set);\n });\n });\n }\n\n private filterRendered(query: string, coveredSets: StickerSetCovered[]) {\n coveredSets = coveredSets.slice();\n\n const children = Array.from(this.setsDiv.children) as HTMLElement[];\n forEachReverse(children, el => {\n const id = el.dataset.stickerSet;\n const index = coveredSets.findIndex((covered) => covered.set.id === id);\n\n if(index !== -1) {\n coveredSets.splice(index, 1);\n } else if(!query || !el.dataset.title.toLowerCase().includes(query.toLowerCase())) {\n el.remove();\n }\n });\n\n animationIntersector.checkAnimations(undefined, 'STICKERS-SEARCH');\n\n return coveredSets;\n }\n\n public search(query: string) {\n if(!query) {\n return this.renderFeatured();\n }\n\n return this.managers.appStickersManager.searchStickerSets(query, false).then((coveredSets) => {\n if(this.inputSearch.value !== query) {\n return;\n }\n\n // console.log('search result:', coveredSets);\n\n coveredSets = this.filterRendered(query, coveredSets);\n coveredSets.forEach((set) => {\n this.renderSet(set.set);\n });\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from './dom/clickEvent';\nimport findUpAsChild from './dom/findUpAsChild';\nimport EventListenerBase from './eventListenerBase';\nimport ListenerSetter from './listenerSetter';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport safeAssign from './object/safeAssign';\nimport appNavigationController, {NavigationItem} from '../components/appNavigationController';\nimport findUpClassName from './dom/findUpClassName';\nimport rootScope from '../lib/rootScope';\nimport liteMode from './liteMode';\n\nconst KEEP_OPEN = false;\nconst TOGGLE_TIMEOUT = 200;\nconst ANIMATION_DURATION = 200;\n\nexport type IgnoreMouseOutType = 'click' | 'menu' | 'popup' | 'tooltip';\ntype DropdownHoverTimeoutType = 'toggle' | 'done';\n\nexport default class DropdownHover extends EventListenerBase<{\n open: () => Promise | void,\n openAfterLayout: () => void,\n opened: () => any,\n close: () => any,\n closed: () => any\n}> {\n protected element: HTMLElement;\n protected forceClose: boolean;\n protected inited: boolean;\n protected ignoreMouseOut: Set;\n protected ignoreButtons: Set;\n protected navigationItem: NavigationItem;\n protected ignoreOutClickClassName: string;\n protected timeouts: {[type in DropdownHoverTimeoutType]?: number};\n protected detachClickEvent: () => void;\n\n constructor(options: {\n element: DropdownHover['element'],\n ignoreOutClickClassName?: string\n }) {\n super(false);\n safeAssign(this, options);\n this.forceClose = false;\n this.inited = false;\n this.ignoreMouseOut = new Set();\n this.ignoreButtons = new Set();\n this.timeouts = {};\n }\n\n public attachButtonListener(\n button: HTMLElement,\n listenerSetter: ListenerSetter\n ) {\n let firstTime = true;\n if(IS_TOUCH_SUPPORTED) {\n attachClickEvent(button, () => {\n if(firstTime) {\n firstTime = false;\n this.toggle(true);\n } else {\n this.toggle();\n }\n }, {listenerSetter});\n } else {\n listenerSetter.add(button)('mouseover', (e) => {\n if(firstTime) {\n listenerSetter.add(button)('mouseout', (e) => {\n this.clearTimeout('toggle');\n this.onMouseOut(e);\n });\n firstTime = false;\n }\n\n this.setTimeout('toggle', () => {\n this.toggle(true);\n }, TOGGLE_TIMEOUT);\n });\n\n attachClickEvent(button, this.onButtonClick.bind(this, button), {listenerSetter});\n }\n }\n\n public onButtonClick = (button?: HTMLElement, e?: MouseEvent) => {\n const type: IgnoreMouseOutType = 'click';\n const ignore = !this.ignoreMouseOut.has(type);\n\n if(ignore && !this.ignoreMouseOut.size) {\n button && this.ignoreButtons.add(button);\n setTimeout(() => {\n this.detachClickEvent = attachClickEvent(window, this.onClickOut, {capture: true});\n }, 0);\n }\n\n this.setIgnoreMouseOut(type, ignore);\n this.toggle(ignore);\n };\n\n protected onClickOut = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if(\n e.isTrusted &&\n !findUpAsChild(target, this.element) &&\n !Array.from(this.ignoreButtons).some((button) => findUpAsChild(target, button) || target === button) &&\n this.ignoreMouseOut.size <= 1 &&\n (!this.ignoreOutClickClassName || !findUpClassName(target, this.ignoreOutClickClassName))\n ) {\n this.toggle(false);\n }\n };\n\n protected onMouseOut = (e: MouseEvent) => {\n if(KEEP_OPEN || !this.isActive()) return;\n this.clearTimeout('toggle');\n\n if(this.ignoreMouseOut.size) {\n return;\n }\n\n const toElement = (e as any).toElement as HTMLElement;\n if(toElement && findUpAsChild(toElement, this.element)) {\n return;\n }\n\n this.setTimeout('toggle', () => {\n this.toggle(false);\n }, TOGGLE_TIMEOUT);\n };\n\n protected clearTimeout(type: DropdownHoverTimeoutType) {\n if(this.timeouts[type] !== undefined) {\n clearTimeout(this.timeouts[type]);\n delete this.timeouts[type];\n }\n }\n\n protected setTimeout(type: DropdownHoverTimeoutType, cb: () => void, timeout: number) {\n this.clearTimeout(type);\n this.timeouts[type] = window.setTimeout(() => {\n this.clearTimeout(type);\n cb();\n }, timeout);\n }\n\n public init() {\n if(!IS_TOUCH_SUPPORTED) {\n this.element.onmouseout = this.onMouseOut;\n this.element.onmouseover = (e) => {\n if(this.forceClose) {\n return;\n }\n\n // console.log('onmouseover element');\n this.clearTimeout('toggle');\n };\n }\n }\n\n public toggle = async(enable?: boolean) => {\n // if(!this.element) return;\n const willBeActive = (!!this.element.style.display && enable === undefined) || enable;\n if(this.init) {\n if(willBeActive) {\n this.init();\n this.init = null;\n } else {\n return;\n }\n }\n\n if(willBeActive === this.isActive()) {\n return;\n }\n\n const delay = IS_TOUCH_SUPPORTED || !liteMode.isAvailable('animations') ? 0 : ANIMATION_DURATION;\n if((this.element.style.display && enable === undefined) || enable) {\n const res = this.dispatchResultableEvent('open');\n await Promise.all(res);\n\n this.element.style.display = '';\n void this.element.offsetLeft; // reflow\n this.element.classList.add('active');\n\n this.dispatchEvent('openAfterLayout');\n\n appNavigationController.pushItem(this.navigationItem = {\n type: 'dropdown',\n onPop: () => {\n this.toggle(false);\n }\n });\n\n this.clearTimeout('toggle');\n this.setTimeout('done', () => {\n this.forceClose = false;\n this.dispatchEvent('opened');\n }, delay);\n\n // ! can't use together with resizeObserver\n /* if(isTouchSupported) {\n const height = this.element.scrollHeight + appImManager.chat.input.inputContainer.scrollHeight - 10;\n console.log('[ESG]: toggle: enable height', height);\n appImManager.chat.bubbles.scrollable.scrollTop += height;\n } */\n\n /* if(touchSupport) {\n this.restoreScroll();\n } */\n } else {\n this.dispatchEvent('close');\n this.ignoreMouseOut.clear();\n this.ignoreButtons.clear();\n\n this.element.classList.remove('active');\n\n appNavigationController.removeItem(this.navigationItem);\n this.detachClickEvent?.();\n this.detachClickEvent = undefined;\n\n this.clearTimeout('toggle');\n this.setTimeout('done', () => {\n this.element.style.display = 'none';\n this.forceClose = false;\n this.dispatchEvent('closed');\n }, delay);\n\n /* if(isTouchSupported) {\n const scrollHeight = this.container.scrollHeight;\n if(scrollHeight) {\n const height = this.container.scrollHeight + appImManager.chat.input.inputContainer.scrollHeight - 10;\n appImManager.chat.bubbles.scrollable.scrollTop -= height;\n }\n } */\n\n /* if(touchSupport) {\n this.restoreScroll();\n } */\n }\n\n // animationIntersector.checkAnimations(false, EMOTICONSSTICKERGROUP);\n };\n\n public isActive() {\n return this.element.classList.contains('active');\n }\n\n public setIgnoreMouseOut(type: IgnoreMouseOutType, ignore: boolean) {\n ignore ? this.ignoreMouseOut.add(type) : this.ignoreMouseOut.delete(type);\n }\n}\n","/**\n * https://github.com/gre/bezier-easing\n * BezierEasing - use bezier curve for transition easing function\n * by Gaëtan Renaudeau 2014 - 2015 – MIT License\n */\n\n// These values are established by empiricism with tests (tradeoff: performance VS precision)\nvar NEWTON_ITERATIONS = 4;\nvar NEWTON_MIN_SLOPE = 0.001;\nvar SUBDIVISION_PRECISION = 0.0000001;\nvar SUBDIVISION_MAX_ITERATIONS = 10;\n\nvar kSplineTableSize = 11;\nvar kSampleStepSize = 1.0 / (kSplineTableSize - 1.0);\n\nvar float32ArraySupported = typeof Float32Array === 'function';\n\nexport interface EasingFunction { (input: number): number }\n\nfunction A(aA1: number, aA2: number) { return 1.0 - 3.0 * aA2 + 3.0 * aA1; }\nfunction B(aA1: number, aA2: number) { return 3.0 * aA2 - 6.0 * aA1; }\nfunction C(aA1: number) { return 3.0 * aA1; }\n\n// Returns x(t) given t, x1, and x2, or y(t) given t, y1, and y2.\nfunction calcBezier(aT: number, aA1: number, aA2: number) { return ((A(aA1, aA2) * aT + B(aA1, aA2)) * aT + C(aA1)) * aT; }\n\n// Returns dx/dt given t, x1, and x2, or dy/dt given t, y1, and y2.\nfunction getSlope(aT: number, aA1: number, aA2: number) { return 3.0 * A(aA1, aA2) * aT * aT + 2.0 * B(aA1, aA2) * aT + C(aA1); }\n\nfunction binarySubdivide(aX: number, aA: number, aB: number, mX1: number, mX2: number) {\n var currentX, currentT, i = 0;\n do {\n currentT = aA + (aB - aA) / 2.0;\n currentX = calcBezier(currentT, mX1, mX2) - aX;\n if(currentX > 0.0) {\n aB = currentT;\n } else {\n aA = currentT;\n }\n } while(Math.abs(currentX) > SUBDIVISION_PRECISION && ++i < SUBDIVISION_MAX_ITERATIONS);\n return currentT;\n}\n\nfunction newtonRaphsonIterate(aX: number, aGuessT: number, mX1: number, mX2: number) {\n for(var i = 0; i < NEWTON_ITERATIONS; ++i) {\n var currentSlope = getSlope(aGuessT, mX1, mX2);\n if(currentSlope === 0.0) {\n return aGuessT;\n }\n var currentX = calcBezier(aGuessT, mX1, mX2) - aX;\n aGuessT -= currentX / currentSlope;\n }\n return aGuessT;\n}\n\nfunction LinearEasing(x: number) {\n return x;\n}\n\nexport default function BezierEasing(mX1: number, mY1: number, mX2: number, mY2: number): EasingFunction {\n if(!(0 <= mX1 && mX1 <= 1 && 0 <= mX2 && mX2 <= 1)) {\n throw new Error('bezier x values must be in [0, 1] range');\n }\n\n if(mX1 === mY1 && mX2 === mY2) {\n return LinearEasing;\n }\n\n // Precompute samples table\n var sampleValues = float32ArraySupported ? new Float32Array(kSplineTableSize) : new Array(kSplineTableSize);\n for(var i = 0; i < kSplineTableSize; ++i) {\n sampleValues[i] = calcBezier(i * kSampleStepSize, mX1, mX2);\n }\n\n function getTForX(aX: number) {\n var intervalStart = 0.0;\n var currentSample = 1;\n var lastSample = kSplineTableSize - 1;\n\n for(; currentSample !== lastSample && sampleValues[currentSample] <= aX; ++currentSample) {\n intervalStart += kSampleStepSize;\n }\n --currentSample;\n\n // Interpolate to provide an initial guess for t\n var dist = (aX - sampleValues[currentSample]) / (sampleValues[currentSample + 1] - sampleValues[currentSample]);\n var guessForT = intervalStart + dist * kSampleStepSize;\n\n var initialSlope = getSlope(guessForT, mX1, mX2);\n if(initialSlope >= NEWTON_MIN_SLOPE) {\n return newtonRaphsonIterate(aX, guessForT, mX1, mX2);\n } else if(initialSlope === 0.0) {\n return guessForT;\n } else {\n return binarySubdivide(aX, intervalStart, intervalStart + kSampleStepSize, mX1, mX2);\n }\n }\n\n return function BezierEasing(x: number) {\n // Because JavaScript number are imprecise, we should guarantee the extremes are right.\n if(x === 0 || x === 1) {\n return x;\n }\n return calcBezier(getTForX(x), mY1, mY2);\n };\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type LazyLoadQueueIntersector from '../lazyLoadQueueIntersector';\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport rootScope from '../../lib/rootScope';\nimport animationIntersector, {AnimationItemGroup} from '../animationIntersector';\nimport {horizontalMenu} from '../horizontalMenu';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport Scrollable, {ScrollableX} from '../scrollable';\nimport appSidebarRight from '../sidebarRight';\nimport StickyIntersector from '../stickyIntersector';\nimport EmojiTab, {EmojiTabCategory, getEmojiFromElement} from './tabs/emoji';\nimport GifsTab from './tabs/gifs';\nimport StickersTab from './tabs/stickers';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport AppGifsTab from '../sidebarRight/tabs/gifs';\nimport AppStickersTab from '../sidebarRight/tabs/stickers';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport findUpTag from '../../helpers/dom/findUpTag';\nimport blurActiveElement from '../../helpers/dom/blurActiveElement';\nimport whichChild from '../../helpers/dom/whichChild';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport DropdownHover from '../../helpers/dropdownHover';\nimport pause from '../../helpers/schedulers/pause';\nimport {IS_APPLE_MOBILE} from '../../environment/userAgent';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport {attachClickEvent, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport overlayCounter from '../../helpers/overlayCounter';\nimport noop from '../../helpers/noop';\nimport {FocusDirection, ScrollOptions} from '../../helpers/fastSmoothScroll';\nimport BezierEasing from '../../vendor/bezierEasing';\nimport RichInputHandler from '../../helpers/dom/richInputHandler';\nimport {getCaretPosF} from '../../helpers/dom/getCaretPosNew';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport {ChatRights} from '../../lib/appManagers/appChatsManager';\nimport {toastNew} from '../toast';\nimport ChatInput, {POSTING_NOT_ALLOWED_MAP} from '../chat/input';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport ButtonIcon from '../buttonIcon';\nimport StickersTabCategory from './category';\nimport {Middleware} from '../../helpers/middleware';\n\nexport const EMOTICONSSTICKERGROUP: AnimationItemGroup = 'emoticons-dropdown';\n\nexport interface EmoticonsTab {\n content: HTMLElement;\n scrollable: Scrollable;\n menuScroll?: ScrollableX;\n tabId: number;\n init: () => void;\n onOpen?: () => void;\n onOpened?: () => void;\n onClose?: () => void;\n onClosed?: () => void;\n}\n\nexport interface EmoticonsTabConstructable {\n new(...args: any[]): T;\n}\n\nconst easing = BezierEasing(0.42, 0.0, 0.58, 1.0);\nconst scrollOptions: Partial = {\n forceDuration: 150,\n transitionFunction: easing,\n maxDistance: 150\n};\nconst renderEmojiDropdownElement = (): HTMLDivElement => {\n const div = document.createElement('div');\n div.innerHTML =\n `
\n
\n
\n
\n
\n
`;\n const a: [string, string, number][] = [\n ['search justify-self-start', 'search', -1],\n ['emoji', 'smile', 0],\n ['stickers', 'stickers_face', 1],\n ['gifs', 'gifs', 2],\n ['delete justify-self-end', 'deleteleft', -1]\n ];\n const d = div.firstElementChild as HTMLDivElement;\n d.lastElementChild.append(...a.map(([className, icon, tabId]) => {\n const button = ButtonIcon(`${icon} menu-horizontal-div-item emoji-tabs-${className}`, {noRipple: true});\n button.dataset.tab = '' + tabId;\n return button;\n }));\n return d;\n}\n\nexport const EMOJI_TEXT_COLOR = 'primary-text-color';\n\nexport class EmoticonsDropdown extends DropdownHover {\n public lazyLoadQueue = new LazyLoadQueue(1);\n\n private container: HTMLElement;\n private tabsEl: HTMLElement;\n private tabId = -1;\n\n private tabs: {[id: number]: EmoticonsTab};\n\n private searchButton: HTMLElement;\n private deleteBtn: HTMLElement;\n\n private selectTab: ReturnType;\n\n private savedRange: Range;\n private tabsToRender: EmoticonsTab[] = [];\n private managers: AppManagers;\n\n private rights: {[action in ChatRights]?: boolean};\n\n private listenerSetter: ListenerSetter;\n\n private _chatInput: ChatInput;\n public textColor: string;\n\n public isStandalone: boolean;\n\n constructor(options: {\n customParentElement?: HTMLElement,\n // customAnchorElement?: HTMLElement,\n getOpenPosition?: () => DOMRectEditable,\n tabsToRender?: EmoticonsTab[],\n customOnSelect?: (emoji: {element: HTMLElement} & ReturnType) => void,\n } = {}) {\n super({\n element: renderEmojiDropdownElement(),\n ignoreOutClickClassName: 'input-message-input'\n });\n safeAssign(this, options);\n\n this.listenerSetter = new ListenerSetter();\n this.isStandalone = !!options?.tabsToRender;\n this.element.classList.toggle('is-standalone', this.isStandalone)\n\n this.rights = {\n send_gifs: undefined,\n send_stickers: undefined\n };\n\n this.addEventListener('open', async() => {\n if(IS_TOUCH_SUPPORTED) {\n // this.chatInput.saveScroll();\n if(blurActiveElement()) {\n await pause(100);\n }\n }\n\n if(options.getOpenPosition) {\n const rect = options.getOpenPosition();\n this.element.style.setProperty('--top', rect.top + 'px');\n this.element.style.setProperty('--left', rect.left + 'px');\n }/* else if(options.customAnchorElement) {\n const anchorRect = options.customAnchorElement.getBoundingClientRect();\n const offset = 64;\n this.element.style.left = anchorRect.left + 'px' as string;\n this.element.style.bottom = anchorRect.top + offset + 'px' as string;\n } */\n\n if(options.customParentElement) {\n options.customParentElement.append(this.element);\n } else if(this.element.parentElement !== this.chatInput.chatInput) {\n this.chatInput.chatInput.append(this.element);\n }\n\n this.savedRange = this.getGoodRange();\n\n this.lazyLoadQueue.lock();\n // this.lazyLoadQueue.unlock();\n animationIntersector.lockIntersectionGroup(EMOTICONSSTICKERGROUP);\n\n const tab = this.tab;\n tab.onOpen?.();\n });\n\n this.addEventListener('opened', () => {\n animationIntersector.unlockIntersectionGroup(EMOTICONSSTICKERGROUP);\n this.lazyLoadQueue.unlockAndRefresh();\n\n // this.container.classList.remove('disable-hover');\n\n const tab = this.tab;\n tab.onOpened?.();\n });\n\n this.addEventListener('openAfterLayout', () => {\n if(options.getOpenPosition) {\n this.element.style.setProperty('--width', this.element.offsetWidth + 'px');\n }\n });\n\n this.addEventListener('close', () => {\n this.lazyLoadQueue.lock();\n\n // нужно залочить группу и выключить стикеры\n animationIntersector.lockIntersectionGroup(EMOTICONSSTICKERGROUP);\n animationIntersector.checkAnimations(true, EMOTICONSSTICKERGROUP);\n\n const tab = this.tab;\n tab.onClose?.();\n });\n\n this.addEventListener('closed', () => {\n // теперь можно убрать visible, чтобы они не включились после фокуса\n animationIntersector.unlockIntersectionGroup(EMOTICONSSTICKERGROUP);\n this.lazyLoadQueue.unlock();\n this.lazyLoadQueue.refresh();\n\n // this.container.classList.remove('disable-hover');\n\n this.savedRange = undefined;\n\n const tab = this.tab;\n tab.onClosed?.();\n });\n }\n\n public canUseEmoji(emoji: AppEmoji, showToast?: boolean) {\n this.init?.();\n return this.getTab(EmojiTab).canUseEmoji(emoji, undefined, showToast);\n }\n\n public get tab() {\n return this.tabs[this.tabId];\n }\n\n public get chatInput() {\n return this._chatInput || appImManager.chat.input;\n }\n\n public set chatInput(chatInput: ChatInput) {\n const changed = this._chatInput !== chatInput;\n this._chatInput = chatInput;\n if(!this.init && changed && this.chatInput !== undefined) {\n this.checkRights();\n }\n }\n\n public get intersectionOptions(): IntersectionObserverInit {\n return {root: this.getElement()};\n }\n\n public setTextColor(textColor: string = EMOJI_TEXT_COLOR) {\n this.textColor = textColor;\n this.getTab(EmojiTab)?.setTextColor(textColor);\n }\n\n public getTab(instance: EmoticonsTabConstructable) {\n return this.tabsToRender.find((tab) => tab instanceof instance) as T;\n }\n\n public init() {\n this.managers = rootScope.managers;\n\n if(!this.tabsToRender.length) {\n this.tabsToRender = [\n new EmojiTab({managers: this.managers, preloaderDelay: 200}),\n new StickersTab(this.managers),\n new GifsTab({managers: this.managers})\n ];\n }\n\n this.tabs = {};\n this.tabsToRender.forEach((tab, idx) => {\n (tab as EmojiTab).emoticonsDropdown = this;\n tab.tabId = idx;\n this.tabs[idx] = tab;\n });\n\n this.container = this.element.querySelector('.emoji-container .tabs-container') as HTMLDivElement;\n this.container.prepend(...this.tabsToRender.map((tab) => (tab as EmojiTab).container));\n this.tabsEl = this.element.querySelector('.emoji-tabs') as HTMLUListElement;\n\n this.selectTab = horizontalMenu(this.tabsEl, this.container, this.onSelectTabClick, () => {\n const {tab} = this;\n tab.init?.();\n animationIntersector.checkAnimations(false, EMOTICONSSTICKERGROUP);\n });\n\n this.searchButton = this.element.querySelector('.emoji-tabs-search');\n this.listenerSetter.add(this.searchButton)('click', () => {\n if(this.tabId === this.getTab(StickersTab)?.tabId) {\n if(!appSidebarRight.isTabExists(AppStickersTab)) {\n appSidebarRight.createTab(AppStickersTab).open();\n }\n } else {\n if(!appSidebarRight.isTabExists(AppGifsTab)) {\n appSidebarRight.createTab(AppGifsTab).open();\n }\n }\n });\n\n this.deleteBtn = this.element.querySelector('.emoji-tabs-delete');\n attachClickEvent(this.deleteBtn, (e) => {\n cancelEvent(e);\n const input = this.chatInput.messageInput;\n // RichInputHandler.getInstance().makeFocused(this.chatInput.messageInput);\n let range = RichInputHandler.getInstance().getSavedRange(input);\n if(!range) {\n range = document.createRange();\n range.setStartAfter(input.lastChild);\n }\n\n const newRange = range.cloneRange();\n // if(range.endOffset === range.startOffset && range.endContainer === range.startContainer) {\n if(range.collapsed) {\n const {node, offset} = getCaretPosF(input, range.endContainer, range.endOffset);\n let newStartNode: Node;\n if(offset) {\n newStartNode = node;\n } else {\n newStartNode = node.previousSibling;\n if(!newStartNode) {\n return;\n }\n\n while(newStartNode.nodeType === newStartNode.TEXT_NODE && !newStartNode.nodeValue && (newStartNode = newStartNode.previousSibling)) {\n\n }\n\n if(newStartNode.nodeType === newStartNode.ELEMENT_NODE && !(newStartNode as HTMLElement).isContentEditable) {\n return;\n }\n }\n\n if(newStartNode.nodeType === newStartNode.ELEMENT_NODE && (newStartNode as any).tagName === 'IMG') {\n newRange.selectNode(newStartNode);\n } else {\n const text = [...newStartNode.textContent];\n let t: string;\n if(offset) {\n let length = 0;\n t = text.find((text) => (length += text.length, length >= offset));\n } else {\n t = text.pop() || '';\n }\n\n const newOffset = offset ? offset - t.length : newStartNode.textContent.length - t.length;\n newRange.setStart(newStartNode, newOffset);\n }\n }\n\n newRange.deleteContents();\n\n this.chatInput.messageInputField.simulateInputEvent();\n }, {listenerSetter: this.listenerSetter});\n\n const HIDE_EMOJI_TAB = IS_APPLE_MOBILE && false;\n\n const INIT_TAB_ID = HIDE_EMOJI_TAB ? this.getTab(StickersTab).tabId : this.getTab(EmojiTab).tabId;\n\n if(HIDE_EMOJI_TAB) {\n (this.tabsEl.children[1] as HTMLElement).classList.add('hide');\n }\n\n simulateClickEvent(this.tabsEl.children[INIT_TAB_ID + 1] as HTMLElement);\n if(this.tabsToRender.length <= 1) {\n this.tabsEl.classList.add('hide');\n }\n this.tabs[INIT_TAB_ID].init?.(); // onTransitionEnd не вызовется, т.к. это первая открытая вкладка\n\n if(!IS_TOUCH_SUPPORTED) {\n let lastMouseMoveEvent: MouseEvent, mouseMoveEventAttached = false;\n const onMouseMove = (e: MouseEvent) => {\n lastMouseMoveEvent = e;\n };\n this.listenerSetter.add(overlayCounter)('change', (isActive) => {\n if(isActive) {\n if(!mouseMoveEventAttached) {\n this.listenerSetter.add(document.body)('mousemove', onMouseMove);\n mouseMoveEventAttached = true;\n }\n } else if(mouseMoveEventAttached) {\n this.listenerSetter.removeManual(document.body, 'mousemove', onMouseMove);\n if(lastMouseMoveEvent) {\n this.onMouseOut(lastMouseMoveEvent);\n }\n }\n });\n }\n\n const onPeerChanging = () => {\n if(this._chatInput || this.isStandalone) {\n return;\n }\n\n this.toggle(false);\n };\n\n const onPeerChanged = () => {\n if(this._chatInput || this.isStandalone) {\n return;\n }\n\n this.checkRights();\n };\n\n this.listenerSetter.add(appImManager)('peer_changing', onPeerChanging);\n this.listenerSetter.add(appImManager)('peer_changed', onPeerChanged);\n onPeerChanged();\n\n const ret = super.init();\n this.init = undefined;\n return ret;\n }\n\n public getElement() {\n return this.element;\n }\n\n public scrollTo(tab: EmoticonsTab, element: HTMLElement) {\n tab.scrollable.scrollIntoViewNew({\n element: element as HTMLElement,\n axis: 'y',\n position: 'start',\n getElementPosition: tab.scrollable.container === element ? () => -element.scrollTop : undefined,\n ...scrollOptions\n });\n }\n\n private onSelectTabClick = (id: number) => {\n if(this.tabId === id) {\n const {tab} = this;\n this.scrollTo(tab, tab.scrollable.container as HTMLElement);\n return;\n }\n\n const rights: {[tabId: number]: ChatRights} = {\n ...(this.getTab(StickersTab) && {[this.getTab(StickersTab).tabId]: 'send_stickers'}),\n ...(this.getTab(GifsTab) && {[this.getTab(GifsTab).tabId]: 'send_gifs'})\n };\n\n const action = rights[id];\n if(action && !this.rights[action]) {\n toastNew({langPackKey: POSTING_NOT_ALLOWED_MAP[action]});\n return false;\n }\n\n animationIntersector.checkAnimations(true, EMOTICONSSTICKERGROUP);\n\n this.tabId = id;\n this.searchButton.classList.toggle('hide', this.tabId === this.getTab(EmojiTab)?.tabId);\n this.deleteBtn.classList.toggle('hide', this.tabId !== this.getTab(EmojiTab)?.tabId);\n };\n\n private checkRights = async() => {\n const {peerId, threadId} = this.chatInput.chat;\n\n const actions = Object.keys(this.rights) as ChatRights[];\n\n const rights = await Promise.all(actions.map((action) => {\n return this.managers.appMessagesManager.canSendToPeer(peerId, threadId, action);\n }));\n\n actions.forEach((action, idx) => {\n this.rights[action] = rights[idx];\n });\n\n const emojiTab = this.getTab(EmojiTab);\n const active = this.tabsEl.querySelector('.active');\n if(active && whichChild(active) !== (emojiTab?.tabId + 1) && (!this.rights['send_stickers'] || !this.rights['send_gifs'])) {\n this.selectTab(emojiTab.tabId, false);\n }\n\n emojiTab?.toggleCustomCategory();\n };\n\n public static menuOnClick = (\n emoticons: EmojiTab | StickersTab,\n menu: HTMLElement,\n scrollable: Scrollable,\n menuScroll?: ScrollableX,\n prevTab?: StickersTabCategory,\n listenerSetter?: ListenerSetter\n ) => {\n let jumpedTo = -1;\n\n const scrollToTab = (tab: typeof prevTab, f?: boolean) => {\n const m = tab.menuScroll || menuScroll;\n if(m) {\n m.scrollIntoViewNew({\n element: tab.elements.menuTab,\n position: 'center',\n axis: 'x',\n getElementPosition: f ? ({elementPosition}) => {\n return elementPosition - 106;\n } : undefined,\n ...scrollOptions\n });\n }\n };\n\n const setActive = (tab: typeof prevTab, scroll = true) => {\n if(tab === prevTab) {\n return false;\n }\n\n let f = false;\n if(prevTab) {\n prevTab.elements.menuTab.classList.remove('active');\n if(prevTab.menuScroll && prevTab.menuScroll !== tab.menuScroll) {\n f = true;\n // scroll to first\n prevTab.menuScroll.container.parentElement.classList.remove('active');\n prevTab.menuScroll.scrollIntoViewNew({\n element: prevTab.menuScroll.firstElementChild as HTMLElement,\n forceDirection: scroll ? undefined : FocusDirection.Static,\n position: 'center',\n axis: 'x',\n ...scrollOptions\n });\n }\n }\n\n tab.elements.menuTab.classList.add('active');\n\n if(tab.menuScroll) {\n tab.menuScroll.container.parentElement.classList.add('active');\n scroll && menuScroll.scrollIntoViewNew({\n element: tab.menuScroll.container.parentElement,\n position: 'center',\n axis: 'x',\n ...scrollOptions\n });\n }\n\n if(prevTab) {\n scrollToTab(tab, f);\n }\n\n prevTab = tab;\n\n return true;\n };\n\n const setActiveStatic = (tab: typeof prevTab) => {\n if(prevTab?.local) {\n return;\n }\n\n emoticons.scrollable.scrollPosition = tab.elements.container.offsetTop + 1;\n const s = emoticons.menuScroll.container;\n const e = tab.elements.menuTab;\n s.scrollLeft = e.offsetLeft - s.clientWidth / 2 + e.offsetWidth / 2;\n setActive(tab, false);\n };\n\n let scrollingToContent = false;\n const stickyIntersector = new StickyIntersector(scrollable.container, (stuck, target) => {\n if(scrollingToContent) {\n return;\n }\n\n // console.log('sticky scrollTop', stuck, target, scrollable.container.scrollTop, jumpedTo);\n\n if(Math.abs(jumpedTo - scrollable.scrollPosition) <= 1) {\n return;\n } else {\n jumpedTo = -1;\n }\n\n const tab = emoticons.getCategoryByContainer(target);\n if(!tab.elements.menuTab) {\n return;\n }\n\n const which = whichChild(target);\n if(!stuck && (which || tab.menuScroll)) {\n return;\n }\n\n setActive(tab);\n });\n\n attachClickEvent(menu, (e) => {\n cancelEvent(e);\n let target = findUpClassName(e.target as HTMLElement, 'menu-horizontal-div-item');\n if(!target) {\n target = findUpClassName(e.target as HTMLElement, 'menu-horizontal-inner');\n if(!target || target.classList.contains('active')) {\n return;\n }\n\n target = target.firstElementChild.firstElementChild as HTMLElement;\n }\n\n const which = whichChild(target);\n\n const tab = emoticons.getCategoryByMenuTab(target);\n\n /* if(menuScroll) {\n menuScroll.scrollIntoView(target, false, 0);\n } */\n\n if(setActive(tab)) {\n // scrollToTab(tab);\n // return;\n }\n\n let offsetTop = 0, additionalOffset = 0;\n if(which > 0 || tab.menuScroll) {\n const element = tab.elements.container;\n additionalOffset = 1;\n offsetTop = element.offsetTop + additionalOffset; // * due to stickyIntersector\n }\n\n jumpedTo = offsetTop;\n\n scrollingToContent = true;\n scrollable.scrollIntoViewNew({\n element: offsetTop ? tab.elements.container : scrollable.firstElementChild as HTMLElement,\n position: 'start',\n axis: 'y',\n getElementPosition: offsetTop ? ({elementPosition}) => elementPosition + additionalOffset : undefined,\n startCallback: () => {\n if(emoticons instanceof EmojiTab && !emoticons.isCategoryVisible(tab as EmojiTabCategory)) {\n emoticons._onCategoryVisibility(tab as EmojiTabCategory, true);\n }\n },\n ...scrollOptions\n }).finally(() => {\n setActive(tab);\n scrollingToContent = false;\n });\n }, {listenerSetter});\n\n const a = scrollable.onAdditionalScroll ? scrollable.onAdditionalScroll.bind(scrollable) : noop;\n scrollable.onAdditionalScroll = () => {\n emoticons.content.parentElement.classList.toggle('no-border-top',\n scrollable.scrollPosition <= 0 ||\n emoticons.container.classList.contains('is-searching')\n );\n a();\n };\n\n emoticons.content.parentElement.classList.add('no-border-top');\n\n return {stickyIntersector, setActive, setActiveStatic};\n };\n\n public onMediaClick = async(e: {target: EventTarget | Element}, clearDraft = false, silent?: boolean, ignoreNoPremium?: boolean) => {\n const target = findUpTag(e.target as HTMLElement, 'DIV');\n if(!target) return false;\n\n const docId = target.dataset.docId;\n if(!docId) return false;\n\n return this.sendDocId({document: docId, clearDraft, silent, target, ignoreNoPremium});\n };\n\n public async sendDocId(options: Parameters[0]) {\n if(await this.chatInput.sendMessageWithDocument(options)) {\n /* dropdown.classList.remove('active');\n toggleEl.classList.remove('active'); */\n if(emoticonsDropdown.container) {\n emoticonsDropdown.forceClose = true;\n // emoticonsDropdown.container.classList.add('disable-hover');\n emoticonsDropdown.toggle(false);\n }\n\n return true;\n } else {\n console.warn('got no doc by id:', document);\n return false;\n }\n }\n\n public addLazyLoadQueueRepeat(lazyLoadQueue: LazyLoadQueueIntersector, processInvisibleDiv: (div: HTMLElement) => void, middleware: Middleware) {\n const listenerSetter = new ListenerSetter();\n listenerSetter.add(this)('close', () => {\n lazyLoadQueue.lock();\n });\n\n listenerSetter.add(this)('closed', () => {\n const divs = lazyLoadQueue.intersector.getVisible();\n\n for(const div of divs) {\n processInvisibleDiv(div);\n }\n\n lazyLoadQueue.intersector.clearVisible();\n });\n\n listenerSetter.add(this)('opened', () => {\n lazyLoadQueue.unlockAndRefresh();\n });\n\n middleware.onClean(() => {\n listenerSetter.removeAll();\n });\n }\n\n public getSavedRange() {\n return this.getGoodRange() || this.savedRange;\n }\n\n private getGoodRange() {\n const sel = document.getSelection();\n if(sel.rangeCount && document.activeElement === this.chatInput.messageInput) {\n return sel.getRangeAt(0);\n }\n }\n\n public destroy() {\n this.cleanup();\n this.listenerSetter.removeAll();\n this.tabsToRender.forEach((tab) => (tab as EmojiTab).destroy?.());\n this.element.remove();\n }\n\n public hideAndDestroy() {\n return this.toggle(false).then(() => {\n return this.destroy();\n });\n }\n}\n\nconst emoticonsDropdown = new EmoticonsDropdown();\nMOUNT_CLASS_TO.emoticonsDropdown = emoticonsDropdown;\nexport default emoticonsDropdown;\n","import {Message} from '../../../../layer';\nimport {GENERAL_TOPIC_ID} from '../../../mtproto/mtproto_config';\nimport getPeerId from '../peers/getPeerId';\n\nexport default function getMessageThreadId(message: Message.message | Message.messageService, isForum?: boolean) {\n let threadId: number;\n const replyTo = message.reply_to;\n const savedPeerId = (message as Message.message).saved_peer_id && getPeerId((message as Message.message).saved_peer_id);\n if(savedPeerId) {\n threadId = savedPeerId;\n } else if(replyTo?._ === 'messageReplyHeader' && (!isForum || replyTo.pFlags.forum_topic)) {\n threadId = replyTo.reply_to_top_id || replyTo.reply_to_msg_id;\n } else if(isForum) {\n if(message._ === 'messageService' && message.action?._ === 'messageActionTopicCreate') {\n threadId = message.mid;\n } else {\n threadId = GENERAL_TOPIC_ID;\n }\n }\n\n return threadId;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport rootScope from '../../lib/rootScope';\n// import { generatePathData } from \"../../helpers/dom\";\nimport {MyMessage} from '../../lib/appManagers/appMessagesManager';\nimport type Chat from './chat';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport positionElementByIndex from '../../helpers/dom/positionElementByIndex';\nimport {Message} from '../../layer';\nimport {NULL_PEER_ID, REPLIES_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport ChatBubbles, {SERVICE_AS_REGULAR, STICKY_OFFSET} from './bubbles';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport partition from '../../helpers/array/partition';\nimport noop from '../../helpers/noop';\nimport getMessageThreadId from '../../lib/appManagers/utils/messages/getMessageThreadId';\nimport {avatarNew} from '../avatarNew';\nimport {MiddlewareHelper} from '../../helpers/middleware';\nimport {ChatType} from './chat';\nimport getFwdFromName from '../../lib/appManagers/utils/messages/getFwdFromName';\n\ntype GroupItem = {\n bubble: HTMLElement,\n fromId: PeerId,\n mid: number,\n groupMid?: number,\n timestamp: number,\n dateTimestamp: number,\n mounted: boolean,\n single: boolean,\n group?: BubbleGroup,\n message: Message.message | Message.messageService, // use it only to set avatar\n reverse?: boolean\n};\n\nfunction insertSomething(to: Array, what: T, sortKey: keyof T, reverse: boolean) {\n if(!sortKey) {\n indexOfAndSplice(to, what);\n return (reverse ? to.push(what) : to.unshift(what)) - 1;\n } else {\n // @ts-ignore\n return insertInDescendSortedArray(to, what, sortKey);\n }\n}\n\nexport class BubbleGroup {\n container: HTMLElement;\n chat: Chat;\n groups: BubbleGroups;\n items: GroupItem[]; // descend sorted\n avatarContainer: HTMLElement;\n avatarLoadPromise: Promise;\n avatar: ReturnType;\n mounted: boolean;\n dateTimestamp: number;\n offset: number;\n middlewareHelper: MiddlewareHelper;\n dateContainer: ReturnType;\n\n constructor(chat: Chat, groups?: BubbleGroups, dateTimestamp?: number) {\n this.container = document.createElement('div');\n this.container.classList.add('bubbles-group');\n this.chat = chat;\n this.groups = groups;\n this.items = [];\n this.dateTimestamp = dateTimestamp;\n this.offset = 0;\n this.middlewareHelper = chat.bubbles.getMiddleware().create();\n }\n\n getAvatarOptions(message: Message.message) {\n const fwdFrom = message.fwd_from;\n const fwdFromId = message.fwdFromId;\n const fwdFromName = getFwdFromName(fwdFrom);\n const isForwardFromChannel = message.from_id && message.from_id._ === 'peerChannel' && message.fromId === fwdFromId;\n const currentPeerId = this.chat.peerId;\n const peerId = ((fwdFrom && (/* currentPeerId === rootScope.myId || */currentPeerId === REPLIES_PEER_ID) && !fwdFromName) || isForwardFromChannel ? fwdFromId : message.fromId) || NULL_PEER_ID;\n\n return {\n // peerId: fwdFromName ? NULL_PEER_ID : peerId,\n peerId,\n // peerTitle: !fwdFromId && fwdFrom && fwdFromName && peerId === NULL_PEER_ID ? /* '🔥 FF 🔥' */fwdFromName : undefined\n peerTitle: peerId === NULL_PEER_ID ? fwdFromName : undefined\n };\n }\n\n destroyAvatar() {\n if(!this.avatar) {\n return;\n }\n\n this.avatarContainer.remove();\n this.avatarLoadPromise = this.avatar = this.avatarContainer = undefined;\n --this.offset;\n }\n\n createAvatar(message: Message.message | Message.messageService, options?: Partial[0]>) {\n if(this.avatarLoadPromise) {\n return this.avatarLoadPromise;\n } else if(message._ === 'messageService') {\n return;\n }\n\n this.avatarContainer = document.createElement('div');\n this.avatarContainer.classList.add('bubbles-group-avatar-container');\n ++this.offset;\n\n this.avatar = avatarNew({\n middleware: this.middlewareHelper.get(),\n size: 40,\n lazyLoadQueue: this.chat.bubbles.lazyLoadQueue,\n ...(options || this.getAvatarOptions(message))\n });\n this.avatar.node.classList.add('bubbles-group-avatar', 'user-avatar'/* , 'can-zoom-fade' */);\n\n // this.avatarLoadPromise = Promise.all([\n // avatarLoadPromise,\n // peerId && peerId.isUser() ? this.chat.managers.appUsersManager.getUser(peerId.toUserId()) : undefined\n // ]).then(([result, user]) => {\n // if(user?.pFlags?.premium) {\n // avatar.classList.add('is-premium', 'tgico-star');\n // }\n\n // return result;\n // });\n this.avatarLoadPromise = this.avatar.readyThumbPromise;\n\n this.avatarContainer.append(this.avatar.node);\n this.container.append(this.avatarContainer);\n\n return this.avatarLoadPromise;\n }\n\n get firstTimestamp() {\n return this.firstItem.timestamp;\n }\n\n get firstMid() {\n return this.firstItem.mid;\n }\n\n get firstItem() {\n return this.items[this.items.length - 1];\n }\n\n get lastTimestamp() {\n return this.lastItem.timestamp;\n }\n\n get lastMid() {\n return this.lastItem.mid;\n }\n\n get lastItem() {\n return this.items[0];\n }\n\n updateClassNames() {\n const items = this.items;\n const length = items.length;\n if(!length) {\n return;\n }\n\n // const elements = Array.from(this.container.children);\n // if(this.offset) elements.splice(0, this.offset);\n\n // const length = elements.length;\n // if(!length) {\n // return;\n // }\n\n const first = items[length - 1].bubble;\n\n if(items.length === 1) {\n first.classList.add('is-group-first', 'is-group-last');\n // this.setClipIfNeeded(first);\n return;\n } else {\n first.classList.remove('is-group-last');\n first.classList.add('is-group-first');\n // this.setClipIfNeeded(first, true);\n }\n\n for(let i = 1, _length = length - 1; i < _length; ++i) {\n const bubble = items[i].bubble;\n bubble.classList.remove('is-group-last', 'is-group-first');\n // this.setClipIfNeeded(bubble, true);\n }\n\n const last = items[0].bubble;\n last.classList.remove('is-group-first');\n last.classList.add('is-group-last');\n // this.setClipIfNeeded(last);\n }\n\n insertItem(item: GroupItem) {\n const {items} = this;\n insertSomething(items, item, this.groups.sortGroupItemsKey, this.groups.reverse = item.reverse);\n\n item.group = this;\n if(items.length === 1) {\n this.groups.insertGroup(this);\n }\n }\n\n removeItem(item: GroupItem) {\n indexOfAndSplice(this.items, item);\n\n if(!this.items.length) {\n indexOfAndSplice(this.groups.groups, this);\n }\n\n item.group = undefined;\n }\n\n mount(updateClassNames?: boolean) {\n if(!this.groups.groups.includes(this) || !this.items.length) { // group can be already removed\n debugger;\n\n if(this.mounted) {\n this.onItemUnmount();\n }\n\n return;\n }\n\n const {offset, items} = this;\n const {length} = items;\n forEachReverse(items, (item, idx) => {\n this.mountItem(item, length - 1 - idx, offset);\n });\n\n if(updateClassNames) {\n this.updateClassNames();\n }\n\n this.onItemMount();\n }\n\n mountItem(item: GroupItem, idx = this.items.indexOf(item), offset = this.offset) {\n if(item.mounted) {\n return;\n }\n\n positionElementByIndex(item.bubble, this.container, offset + idx);\n item.mounted = true;\n }\n\n unmountItem(item: GroupItem) {\n if(!item.mounted) {\n return;\n }\n\n item.bubble.remove();\n item.mounted = false;\n this.onItemUnmount();\n }\n\n onItemMount() {\n if(this.mounted) {\n return;\n }\n\n const dateContainer = this.dateContainer = this.chat.bubbles.getDateContainerByTimestamp(this.dateTimestamp / 1000);\n // const idx = this.groups.indexOf(group);\n const dateGroups = this.groups.groups.filter((_group) => _group.dateTimestamp === this.dateTimestamp);\n const dateGroupsLength = dateGroups.length;\n const idx = dateGroups.indexOf(this);\n const unmountedLength = dateGroups.slice(idx + 1).reduce((acc, v) => acc + (v.mounted ? 0 : 1), 0);\n positionElementByIndex(this.container, dateContainer.container, STICKY_OFFSET + dateGroupsLength - 1 - idx - unmountedLength);\n ++dateContainer.groupsLength;\n this.mounted = true;\n this.groups?.updateGroupsClassNames();\n }\n\n onItemUnmount() {\n if(!this.mounted) {\n return;\n }\n\n if(!this.items.length) {\n this.container.remove();\n this.dateContainer && --this.dateContainer.groupsLength;\n this.dateContainer = undefined;\n this.chat.bubbles.deleteEmptyDateGroups();\n this.mounted = false;\n this.middlewareHelper.clean();\n this.groups?.updateGroupsClassNames();\n } else {\n this.updateClassNames();\n }\n }\n}\n\n// class BubbleGroupItem implements GroupItem {\n// bubble: HTMLElement;\n// fromId: PeerId;\n// mid: number;\n// timestamp: number;\n// dateTimestamp: number;\n// mounted: boolean;\n// single: boolean;\n// group: BubbleGroup;\n\n// constructor(details: GroupItem) {\n// Object.assign(this, details);\n// }\n// }\n\nexport default class BubbleGroups {\n public itemsArr: Array = []; // descend sorted\n private itemsMap: Map = new Map();\n public groups: Array = []; // descend sorted\n private newGroupDiff = 121; // * 121 in scheduled messages\n private sortItemsKey: Extract;\n private sortGroupsKey: Extract;\n public sortGroupItemsKey: Extract;\n public reverse: boolean; // * used for search\n\n constructor(private chat: Chat) {\n if(chat.type !== ChatType.Search) {\n this.sortItemsKey = chat.type === ChatType.Scheduled ? 'timestamp' : 'mid';\n this.sortGroupsKey = chat.type === ChatType.Scheduled ? 'lastTimestamp' : 'lastMid';\n this.sortGroupItemsKey = /* chat.type === 'scheduled' ? 'timestamp' : */'groupMid';\n }\n }\n\n removeItem(item: GroupItem) {\n item.group?.removeItem(item);\n this.removeItemFromCache(item);\n }\n\n removeAndUnmountBubble(bubble: HTMLElement) {\n const item = this.getItemByBubble(bubble);\n if(!item) { // * can be a placeholder\n const parentElement = bubble.parentElement;\n if(parentElement) {\n if(parentElement.classList.contains('bubbles-group')) {\n parentElement.remove();\n } else {\n bubble.remove();\n }\n }\n\n return false;\n }\n\n const items = this.itemsArr;\n const index = items.indexOf(item);\n const siblings = this.getSiblingsAtIndex(index, items);\n\n const group = item.group;\n this.removeItem(item);\n\n const modifiedGroups: Set = new Set();\n if(group) {\n group.unmountItem(item);\n modifiedGroups.add(group);\n }\n\n const [previousSibling, nextSibling] = siblings;\n if(\n previousSibling &&\n nextSibling &&\n this.canItemsBeGrouped(previousSibling, nextSibling) &&\n previousSibling.group !== nextSibling.group\n ) {\n const group = nextSibling.group;\n this.f(nextSibling.group.items);\n group.onItemUnmount();\n modifiedGroups.add(previousSibling.group);\n this.groupUngrouped();\n }\n\n this.mountUnmountGroups(Array.from(modifiedGroups));\n\n return true;\n }\n\n mountUnmountGroups(groups: BubbleGroup[]) {\n // groups.sort((a, b) => (b.lastItem?.mid ?? 0) - (a.lastItem?.mid ?? 0));\n\n const [toMount, toUnmount] = partition(groups, (group) => !!group.items.length);\n toUnmount.forEach((group) => {\n group.onItemUnmount();\n })\n\n toMount.forEach((group) => {\n group.mount(true);\n });\n\n // toMount.forEach((group) => {\n // group.updateClassNames();\n // });\n }\n\n f(items: GroupItem[], index: number = 0, length = items.length) {\n for(; index < length; ++index) {\n const item = items[index];\n item.mounted = false;\n item.group.removeItem(item);\n --length;\n --index;\n }\n }\n\n getItemByBubble(bubble: HTMLElement) {\n return this.itemsMap.get(bubble);\n }\n\n get firstGroup() {\n return this.groups[this.groups.length - 1];\n }\n\n get lastGroup() {\n return this.groups[0];\n }\n\n changeBubbleMessage(bubble: HTMLElement, message: GroupItem['message']) {\n const item = this.getItemByBubble(bubble);\n if(!item) {\n return;\n }\n\n item.mid = /* item.groupMid = */message.mid;\n item.message = message;\n item.groupMid = this.generateGroupMid(message, item.dateTimestamp);\n\n // indexOfAndSplice(item.group.items, item);\n // // const canChangeGroupMid = !item.group.items.length || item.group.items.every((item) => item.groupMid === item.mid);\n // // if(canChangeGroupMid) item.groupMid = mid;\n // item.group.insertItem(item);\n\n indexOfAndSplice(this.itemsArr, item);\n this.insertItemToArray(item, this.itemsArr);\n }\n\n changeItemBubble(item: GroupItem, bubble: HTMLElement) {\n this.itemsMap.delete(item.bubble);\n item.bubble = bubble;\n this.itemsMap.set(bubble, item);\n }\n\n changeBubbleByBubble(from: HTMLElement, to: HTMLElement) {\n const item = this.getItemByBubble(from);\n if(!item) {\n return;\n }\n\n this.changeItemBubble(item, to);\n }\n\n canItemsBeGrouped(item1: GroupItem, item2: GroupItem) {\n const isOut1 = this.chat.isOutMessage(item1.message);\n return item2.fromId === item1.fromId &&\n item1.dateTimestamp === item2.dateTimestamp &&\n Math.abs(item2.timestamp - item1.timestamp) <= this.newGroupDiff &&\n !item1.single &&\n !item2.single &&\n isOut1 === this.chat.isOutMessage(item2.message) &&\n (!this.chat.isAllMessagesForum || getMessageThreadId(item1.message, true) === getMessageThreadId(item2.message, true)) &&\n (!isOut1 || item1.message.fromId === rootScope.myId) && // * group anonymous sending\n item1.message.peerId === item2.message.peerId &&\n (item1.message as Message.message).post_author === (item2.message as Message.message).post_author;\n }\n\n getSiblingsAtIndex(itemIndex: number, items: GroupItem[]) {\n return [items[itemIndex - 1], items[itemIndex + 1]] as const;\n }\n\n // findGroupSiblingInSiblings(item: GroupItem, siblings: ReturnType) {\n // return siblings.find((sibling) => sibling && this.canItemsBeGrouped(item, sibling));\n // }\n\n findGroupSiblingByItem(item: GroupItem, items: GroupItem[]) {\n items = items.slice();\n const idx = this.insertItemToArray(item, items);\n // return this.findGroupSiblingInSiblings(item, this.getSiblingsAtIndex(idx, items));\n return this.findGroupSiblingInItems(item, items, idx);\n }\n\n findGroupSiblingInItems(item: GroupItem, items: GroupItem[], index = items.indexOf(item), length = items.length) {\n const previousItem = items[index - 1];\n let siblingGroupedItem: GroupItem;\n if(previousItem?.group && this.canItemsBeGrouped(item, previousItem)) {\n siblingGroupedItem = previousItem;\n } else {\n for(let k = index + 1; k < length; ++k) {\n const nextItem = items[k];\n if(this.canItemsBeGrouped(item, nextItem)) {\n if(nextItem.group) {\n siblingGroupedItem = nextItem;\n }\n } else {\n break;\n }\n }\n }\n\n return siblingGroupedItem;\n }\n\n addItemToGroup(item: GroupItem, group: BubbleGroup) {\n group.insertItem(item);\n this.addItemToCache(item);\n }\n\n insertItemToArray(item: GroupItem, array: GroupItem[]) {\n return insertSomething(array, item, this.sortItemsKey, this.reverse = item.reverse);\n }\n\n insertGroup(group: BubbleGroup) {\n const idx = insertSomething(this.groups, group, this.sortGroupsKey, this.reverse);\n // this.updateGroupsClassNames();\n return idx;\n }\n\n updateGroupsClassNames() {\n this.groups.forEach((group, idx, arr) => {\n group.container.classList.toggle('bubbles-group-last', idx === 0);\n group.container.classList.toggle('bubbles-group-first', idx === (arr.length - 1));\n });\n }\n\n addItemToCache(item: GroupItem) {\n this.insertItemToArray(item, this.itemsArr);\n this.itemsMap.set(item.bubble, item);\n }\n\n removeItemFromCache(item: GroupItem) {\n indexOfAndSplice(this.itemsArr, item);\n this.itemsMap.delete(item.bubble);\n }\n\n getMessageFromId(message: MyMessage) {\n let fromId = /* (this.chat.peerId.isAnyChat() && message.viaBotId) || */message.fromId;\n\n // fix for saved messages forward to self\n if(fromId === rootScope.myId && message.peerId === rootScope.myId && (message as Message.message).fwdFromId === fromId) {\n fromId = fromId.toPeerId(true);\n }\n\n return fromId;\n }\n\n generateGroupMid(message: MyMessage, dateTimestamp: number) {\n const {mid, date: timestamp} = message;\n return this.chat.type === ChatType.Scheduled ? +`${(timestamp * 1000 - dateTimestamp) / 1000}.${+('' + mid).replace('.', '')}` : mid;\n }\n\n createItem(bubble: HTMLElement, message: MyMessage, reverse: boolean) {\n const single = !(message._ === 'message' || (message.action && SERVICE_AS_REGULAR.has(message.action._)));\n const {mid, date: timestamp} = message;\n const {dateTimestamp} = this.chat.bubbles.getDateForDateContainer(timestamp);\n const item: GroupItem = {\n mid,\n groupMid: this.generateGroupMid(message, dateTimestamp),\n fromId: this.getMessageFromId(message),\n bubble,\n // timestamp: this.chat.type === 'scheduled' ? +`${(timestamp * 1000 - dateTimestamp) / 1000}.${mid}` : timestamp,\n timestamp,\n dateTimestamp,\n mounted: false,\n single,\n message,\n reverse\n };\n\n return item;\n }\n\n splitSiblingsOnGrouping(siblings: ReturnType) {\n const [previousSibling, nextSibling] = siblings;\n const previousGroup = previousSibling?.group;\n const nextGroup = nextSibling?.group;\n\n if(!previousGroup) {\n return;\n }\n\n // will refresh group\n // if(previousGroup === nextGroup) {\n const items = previousGroup.items;\n const index = items.indexOf(previousSibling) + 1;\n const length = items.length;\n if(index === length) {\n return;\n }\n\n const modifiedGroups: BubbleGroup[] = [previousGroup];\n // if(previousGroup !== nextGroup && nextGroup) {\n // modifiedGroups.push(nextGroup);\n // }\n\n this.f(items, index, length);\n return modifiedGroups;\n // }\n }\n\n prepareForGrouping(bubble: HTMLElement, message: MyMessage, reverse: boolean) {\n const foundItem = this.getItemByBubble(bubble);\n if(foundItem) { // should happen only on edit\n // debugger;\n return;\n }\n\n const item = this.createItem(bubble, message, reverse);\n this.addItemToCache(item);\n }\n\n groupUngrouped() {\n const items = this.itemsArr;\n const length = items.length;\n const modifiedGroups: Set = new Set();\n // for(let i = length - 1; i >= 0; --i) {\n for(let i = 0; i < length; ++i) {\n const item = items[i];\n if(item.group) {\n continue;\n }\n\n let hadGroup = true;\n const siblings = this.getSiblingsAtIndex(i, items);\n const siblingGroupedItem = this.findGroupSiblingInItems(item, items, i, length);\n\n // const foundItem = this.findGroupSiblingInSiblings(item, siblings);\n const foundItem = siblingGroupedItem;\n const group = foundItem?.group ?? (hadGroup = false, new BubbleGroup(this.chat, this, item.dateTimestamp));\n\n modifiedGroups.add(group);\n group.insertItem(item);\n\n if(!hadGroup) {\n const splittedGroups = this.splitSiblingsOnGrouping(siblings);\n if(splittedGroups) {\n splittedGroups.forEach((group) => modifiedGroups.add(group));\n }\n }\n }\n\n return modifiedGroups;\n }\n\n // addBubble(bubble: HTMLElement, message: MyMessage, unmountIfFound?: boolean) {\n // const oldItem = this.getItemByBubble(bubble);\n // if(unmountIfFound) { // updating position\n // this.removeAndUnmountBubble(bubble);\n // } else if(oldItem) { // editing\n // const group = oldItem.group;\n // this.changeItemBubble(oldItem, bubble);\n // oldItem.mounted = false;\n\n // return {item: oldItem, group};\n // }\n\n // const item = this.createItem(bubble, message);\n\n // const foundItem = this.findSameGroupItem(item, this.itemsArr);\n\n // const group = foundItem?.group ?? new BubbleGroup(this.chat, this, item.dateTimestamp);\n // this.addItemToGroup(item, group);\n\n // return {item, group};\n // }\n\n /* setClipIfNeeded(bubble: HTMLDivElement, remove = false) {\n //console.log('setClipIfNeeded', bubble, remove);\n const className = bubble.className;\n if(className.includes('is-message-empty') && (className.includes('photo') || className.includes('video'))) {\n let container = bubble.querySelector('.bubble__media-container') as SVGSVGElement;\n //console.log('setClipIfNeeded', bubble, remove, container);\n if(!container) return;\n\n try {\n Array.from(container.children).forEach((object) => {\n if(object instanceof SVGDefsElement) return;\n\n if(remove) {\n object.removeAttributeNS(null, 'clip-path');\n } else {\n let clipId = container.dataset.clipId;\n let path = container.firstElementChild.firstElementChild.lastElementChild as SVGPathElement;\n let width = +object.getAttributeNS(null, 'width');\n let height = +object.getAttributeNS(null, 'height');\n let isOut = className.includes('is-out');\n let isReply = className.includes('is-reply');\n let d = '';\n\n //console.log('setClipIfNeeded', object, width, height, isOut);\n\n let tr: number, tl: number;\n if(className.includes('forwarded') || isReply) {\n tr = tl = 0;\n } else if(isOut) {\n tr = className.includes('is-group-first') ? 12 : 6;\n tl = 12;\n } else {\n tr = 12;\n tl = className.includes('is-group-first') ? 12 : 6;\n }\n\n if(isOut) {\n d = generatePathData(0, 0, width - 9, height, tl, tr, 0, 12);\n } else {\n d = generatePathData(9, 0, width - 9, height, tl, tr, 12, 0);\n }\n\n path.setAttributeNS(null, 'd', d);\n object.setAttributeNS(null, 'clip-path', 'url(#' + clipId + ')');\n }\n });\n } catch(err) {}\n }\n } */\n\n // updateGroupByMessageId(mid: number) {\n // const item = this.itemsArr.find((g) => g.mid === mid);\n // if(item) {\n // item.group.updateGroup();\n // }\n // }\n\n cleanup() {\n this.itemsArr = [];\n this.groups = [];\n this.itemsMap.clear();\n }\n\n // findIncorrentPositions() {\n // var bubbles = Array.from(this.chat.bubbles.chatInner.querySelectorAll('.bubbles-group .bubble')).reverse();\n // var items = this.itemsArr;\n // for(var i = 0, length = items.length; i < length; ++i) {\n // const item = items[i];\n // const foundBubble = bubbles[i];\n // if(item.bubble !== foundBubble) {\n // console.log('incorrect position', i, item, foundBubble);\n // // debugger;\n // // break;\n // }\n // }\n // }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement, {PopupOptions} from '.';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport I18n from '../../lib/langPack';\nimport ButtonIcon from '../buttonIcon';\nimport InputField from '../inputField';\n\nexport default class PopupDatePicker extends PopupElement {\n protected controlsDiv: HTMLElement;\n protected monthTitle: HTMLElement;\n protected prevBtn: HTMLElement;\n protected nextBtn: HTMLElement;\n\n protected monthsContainer: HTMLElement;\n protected month: HTMLElement;\n\n protected minMonth: Date;\n protected maxMonth: Date;\n protected minDate: Date;\n protected maxDate: Date;\n protected selectedDate: Date;\n protected selectedMonth: Date;\n protected selectedEl: HTMLElement;\n\n protected timeDiv: HTMLDivElement;\n protected hoursInputField: InputField;\n protected minutesInputField: InputField;\n\n constructor(\n initDate: Date,\n public onPick: (timestamp: number) => void,\n protected options: Partial<{\n noButtons: true,\n noTitle: true,\n minDate: Date,\n maxDate: Date\n withTime: true,\n showOverflowMonths: true\n }> & PopupOptions = {}\n ) {\n super('popup-date-picker', {\n body: true,\n overlayClosable: true,\n buttons: options.noButtons ? [] : [{\n langKey: 'JumpToDate',\n callback: () => {\n if(this.onPick) {\n this.onPick(this.selectedDate.getTime() / 1000 | 0);\n }\n }\n }, {\n langKey: 'Cancel',\n isCancel: true\n }],\n title: true,\n ...options\n });\n\n this.minDate = options.minDate || new Date('2013-08-01T00:00:00');\n\n if(initDate < this.minDate) {\n initDate.setFullYear(this.minDate.getFullYear(), this.minDate.getMonth(), this.minDate.getDate());\n }\n\n // Controls\n this.controlsDiv = document.createElement('div');\n this.controlsDiv.classList.add('date-picker-controls');\n\n this.prevBtn = ButtonIcon('down date-picker-prev', {noRipple: true});\n attachClickEvent(this.prevBtn, this.onPrevClick, {listenerSetter: this.listenerSetter});\n\n this.nextBtn = ButtonIcon('down date-picker-next', {noRipple: true});\n attachClickEvent(this.nextBtn, this.onNextClick, {listenerSetter: this.listenerSetter});\n\n this.monthTitle = document.createElement('div');\n this.monthTitle.classList.add('date-picker-month-title');\n\n this.controlsDiv.append(this.prevBtn, this.monthTitle, this.nextBtn);\n\n // Month\n this.monthsContainer = document.createElement('div');\n this.monthsContainer.classList.add('date-picker-months');\n attachClickEvent(this.monthsContainer, this.onDateClick, {listenerSetter: this.listenerSetter});\n\n this.body.append(this.controlsDiv, this.monthsContainer);\n\n // Time inputs\n if(options.withTime) {\n this.timeDiv = document.createElement('div');\n this.timeDiv.classList.add('date-picker-time');\n\n const delimiter = document.createElement('div');\n delimiter.classList.add('date-picker-time-delimiter');\n delimiter.append(':');\n\n const handleTimeInput = (\n max: number,\n inputField: InputField,\n onInput: (length: number) => void,\n onOverflow?: (number: number) => void\n ) => {\n const maxString = '' + max;\n this.listenerSetter.add(inputField.input)('input', (e) => {\n let value = inputField.value.replace(/\\D/g, '');\n if(value.length > 2) {\n value = value.slice(0, 2);\n } else {\n if((value.length === 1 && +value[0] > +maxString[0]) || (value.length === 2 && +value > max)) {\n if(value.length === 2 && onOverflow) {\n onOverflow(+value[1]);\n }\n\n value = '0' + value[0];\n }\n }\n\n inputField.setValueSilently(value);\n onInput(value.length);\n });\n };\n\n this.hoursInputField = new InputField({plainText: true});\n this.minutesInputField = new InputField({plainText: true});\n\n handleTimeInput(23, this.hoursInputField, (length) => {\n if(length === 2) {\n this.minutesInputField.input.focus();\n }\n\n this.setTimeTitle();\n }, (number) => {\n this.minutesInputField.value = (number + this.minutesInputField.value).slice(0, 2);\n });\n handleTimeInput(59, this.minutesInputField, (length) => {\n if(!length) {\n this.hoursInputField.input.focus();\n }\n\n this.setTimeTitle();\n });\n\n this.selectedDate = initDate;\n\n // initDate.setMinutes(initDate.getMinutes() + 10);\n\n this.hoursInputField.setValueSilently(('0' + initDate.getHours()).slice(-2));\n this.minutesInputField.setValueSilently(('0' + initDate.getMinutes()).slice(-2));\n\n initDate.setHours(0, 0, 0, 0);\n\n this.timeDiv.append(this.hoursInputField.container, delimiter, this.minutesInputField.container);\n\n attachClickEvent(this.btnConfirm, () => {\n if(this.onPick) {\n this.selectedDate.setHours(+this.hoursInputField.value || 0, +this.minutesInputField.value || 0, 0, 0);\n this.onPick(this.selectedDate.getTime() / 1000 | 0);\n }\n\n this.hide();\n }, {listenerSetter: this.listenerSetter});\n\n this.body.append(this.timeDiv);\n\n this.prevBtn.classList.add('primary');\n this.nextBtn.classList.add('primary');\n }\n\n const popupCenterer = document.createElement('div');\n popupCenterer.classList.add('popup-centerer');\n popupCenterer.append(this.container);\n this.element.append(popupCenterer);\n\n // const passed = (initDate.getTime() - (initDate.getTimezoneOffset() * 60000)) % 86400000;\n // this.selectedDate = this.maxDate = new Date(initDate.getTime() - passed);\n initDate.setHours(0, 0, 0, 0);\n this.selectedDate = initDate;\n\n this.maxDate = options.maxDate || new Date();\n this.maxDate.setHours(0, 0, 0, 0);\n\n this.selectedMonth = new Date(this.selectedDate);\n this.selectedMonth.setDate(1);\n\n this.maxMonth = new Date(this.maxDate);\n this.maxMonth.setDate(1);\n\n this.minMonth = new Date(this.minDate);\n this.minMonth.setHours(0, 0, 0, 0);\n this.minMonth.setDate(1);\n\n if(this.selectedMonth.getTime() === this.minMonth.getTime()) {\n this.prevBtn.setAttribute('disabled', 'true');\n }\n\n if(this.selectedMonth.getTime() === this.maxMonth.getTime()) {\n this.nextBtn.setAttribute('disabled', 'true');\n }\n\n if(options.noTitle) {\n this.setTitle = () => {};\n }\n\n this.setTimeTitle();\n this.setTitle();\n this.setMonth();\n }\n\n onPrevClick = (e: MouseEvent) => {\n this.selectedMonth.setMonth(this.selectedMonth.getMonth() - 1);\n this.setMonth();\n\n if(this.selectedMonth.getTime() === this.minMonth.getTime()) {\n this.prevBtn.setAttribute('disabled', 'true');\n }\n\n this.nextBtn.removeAttribute('disabled');\n };\n\n onNextClick = (e: MouseEvent) => {\n this.selectedMonth.setMonth(this.selectedMonth.getMonth() + 1);\n this.setMonth();\n\n if(this.selectedMonth.getTime() === this.maxMonth.getTime()) {\n this.nextBtn.setAttribute('disabled', 'true');\n }\n\n this.prevBtn.removeAttribute('disabled');\n };\n\n onDateClick = (e: MouseEvent) => {\n // cancelEvent(e);\n const target = e.target as HTMLElement;\n\n if(!target.dataset.timestamp) return;\n\n if(this.selectedEl) {\n if(this.selectedEl === target) return;\n this.selectedEl.classList.remove('active');\n }\n\n this.selectedEl = target;\n\n target.classList.add('active');\n const timestamp = +target.dataset.timestamp;\n\n this.selectedDate = new Date(timestamp);\n\n this.setTitle();\n this.setTimeTitle();\n };\n\n public setTimeTitle() {}\n\n public setTitle() {\n this.title.replaceChildren(new I18n.IntlDateElement({\n date: this.selectedDate,\n options: {\n day: 'numeric',\n month: 'long',\n weekday: 'short'\n }\n }).element);\n }\n\n private renderElement(disabled: boolean, innerText: string | HTMLElement = '') {\n const el = document.createElement('button');\n el.classList.add('btn-icon', 'date-picker-month-date');\n\n if(disabled) {\n el.setAttribute('disabled', 'true');\n }\n\n if(innerText) {\n el.append(innerText);\n }\n\n return el;\n }\n\n public setMonth() {\n const firstDate = new Date(this.selectedMonth);\n\n const options: Intl.DateTimeFormatOptions = {\n year: 'numeric',\n month: this.timeDiv && mediaSizes.isMobile ? 'short' : 'long'\n };\n\n this.monthTitle.replaceChildren(new I18n.IntlDateElement({date: firstDate, options}).element);\n\n this.month?.remove();\n this.month = document.createElement('div');\n this.month.classList.add('date-picker-month');\n\n const weekStartDate = new Date();\n const day = weekStartDate.getDay();\n if(day !== 1) {\n weekStartDate.setHours(-24 * (day - 1));\n }\n\n for(let i = 0; i < 7; ++i) {\n const el = this.renderElement(true, new I18n.IntlDateElement({date: weekStartDate, options: {weekday: 'narrow'}}).element);\n el.classList.remove('date-picker-month-date');\n el.classList.add('date-picker-month-day');\n this.month.append(el);\n weekStartDate.setDate(weekStartDate.getDate() + 1);\n }\n\n // 0 - sunday\n let dayIndex = firstDate.getDay() - 1;\n if(dayIndex === -1) dayIndex = 7 - 1;\n\n const clonedDate = new Date(firstDate.getTime());\n clonedDate.setDate(clonedDate.getDate() - dayIndex - 1);\n\n // Padding first week\n for(let i = 0; i < dayIndex; ++i) {\n if(this.options.showOverflowMonths) {\n clonedDate.setDate(clonedDate.getDate() + 1);\n this.month.append(this.renderElement(true, '' + clonedDate.getDate()));\n } else {\n this.month.append(this.renderElement(true));\n }\n }\n\n do {\n const date = firstDate.getDate();\n const el = this.renderElement(firstDate > this.maxDate || firstDate < this.minDate, '' + date);\n el.dataset.timestamp = '' + firstDate.getTime();\n\n if(firstDate.getTime() === this.selectedDate.getTime()) {\n this.selectedEl = el;\n el.classList.add('active');\n }\n\n this.month.append(el);\n\n firstDate.setDate(date + 1);\n } while(firstDate.getDate() !== 1);\n\n const remainder = this.month.childElementCount % 7;\n if(this.options.showOverflowMonths && remainder) {\n for(let i = remainder; i < 7; ++i) {\n this.month.append(this.renderElement(true, '' + firstDate.getDate()));\n firstDate.setDate(firstDate.getDate() + 1);\n }\n }\n\n const lines = Math.ceil(this.month.childElementCount / 7);\n this.container.dataset.lines = '' + lines;\n\n this.monthsContainer.append(this.month);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatRights} from '../../lib/appManagers/appChatsManager';\nimport flatten from '../../helpers/array/flatten';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport rootScope from '../../lib/rootScope';\nimport {toastNew} from '../toast';\nimport PopupPickUser from './pickUser';\nimport getMediaFromMessage from '../../lib/appManagers/utils/messages/getMediaFromMessage';\nimport PopupElement from '.';\n\nexport default class PopupForward extends PopupPickUser {\n constructor(\n peerIdMids?: {[fromPeerId: PeerId]: number[]},\n onSelect?: (peerId: PeerId, threadId?: number) => Promise | void,\n chatRightsAction: ChatRights[] = ['send_plain'],\n noTopics?: boolean\n ) {\n super({\n peerType: ['dialogs', 'contacts'],\n onSelect: !peerIdMids && onSelect ? onSelect : async(peerId, threadId) => {\n if(onSelect) {\n const res = onSelect(peerId);\n if(res instanceof Promise) {\n await res;\n }\n }\n\n if(peerId === rootScope.myId) {\n let count = 0;\n for(const fromPeerId in peerIdMids) {\n const mids = peerIdMids[fromPeerId];\n count += mids.length;\n this.managers.appMessagesManager.forwardMessages({\n peerId,\n fromPeerId: fromPeerId.toPeerId(),\n mids\n });\n }\n\n toastNew({\n langPackKey: count > 0 ? 'FwdMessagesToSavedMessages' : 'FwdMessageToSavedMessages'\n });\n\n return;\n }\n\n await appImManager.setInnerPeer({peerId, threadId});\n appImManager.chat.input.initMessagesForward(peerIdMids);\n },\n placeholder: 'ShareModal.Search.ForwardPlaceholder',\n chatRightsActions: chatRightsAction,\n selfPresence: 'ChatYourSelf',\n useTopics: !noTopics\n });\n }\n\n public static async create(...args: ConstructorParameters) {\n const [peerIdMids] = args;\n const messagesPromises = Object.keys(peerIdMids).map((peerId) => {\n const mids = peerIdMids[peerId as any as number];\n return mids.map((mid) => {\n return rootScope.managers.appMessagesManager.getMessageByPeer(peerId.toPeerId(), mid);\n });\n });\n\n const messages = await Promise.all(flatten(messagesPromises));\n const actions: Set = new Set();\n messages.forEach((message) => {\n if(!message) {\n return;\n }\n\n const media = getMediaFromMessage(message);\n let action: ChatRights;\n if(!media) {\n if(message.viaBotId) {\n action = 'send_inline';\n } else {\n action = 'send_plain';\n }\n } else {\n if(media._ === 'webPage') {\n action = 'embed_links';\n } else if(media._ === 'photo') {\n action = 'send_photos';\n } else if(media._ === 'game') {\n action = 'send_games';\n } else {\n switch(media.type) {\n case 'audio':\n action = 'send_audios';\n break;\n case 'gif':\n action = 'send_gifs';\n break;\n case 'round':\n action = 'send_roundvideos';\n break;\n case 'sticker':\n action = 'send_stickers';\n break;\n case 'voice':\n action = 'send_voices';\n break;\n case 'video':\n action = 'send_videos';\n break;\n default:\n action = 'send_docs';\n break;\n }\n }\n }\n\n if(action) {\n actions.add(action);\n }\n });\n\n PopupElement.createPopup(PopupForward, args[0], args[1], Array.from(actions));\n }\n}\n","export default function formatNumber(bytes: number, decimals = 2) {\n if(bytes === 0) return '0';\n\n const k = 1000;\n const dm = decimals < 0 ? 0 : decimals;\n const sizes = ['', 'K', 'M', 'B', 'T'];\n\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n\n return parseFloat((bytes / Math.pow(k, i)).toFixed(dm)) + sizes[i];\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {setDirection} from '../helpers/dom/setInnerHTML';\n\nexport default class DivAndCaption {\n public container: HTMLElement;\n public border: HTMLElement;\n public content: HTMLElement;\n public title: HTMLElement;\n public subtitle: HTMLElement;\n\n constructor(protected className: string, public fill?: T) {\n this.container = document.createElement('div');\n this.container.className = className;\n\n this.border = document.createElement('div');\n this.border.classList.add(className + '-border');\n\n this.content = document.createElement('div');\n this.content.classList.add(className + '-content');\n\n this.title = document.createElement('div');\n this.title.classList.add(className + '-title');\n setDirection(this.title);\n\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add(className + '-subtitle');\n setDirection(this.subtitle);\n\n this.content.append(this.title, this.subtitle);\n this.container.append(this.border, this.content);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Middleware} from '../../helpers/middleware';\nimport {Document, Message, MessageMedia, Photo, WebPage, VideoSize, StoryItem, MessageReplyHeader, MessageEntity} from '../../layer';\nimport choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize';\nimport DivAndCaption from '../divAndCaption';\nimport wrapMessageForReply from '../wrappers/messageForReply';\nimport wrapPhoto from '../wrappers/photo';\nimport wrapSticker from '../wrappers/sticker';\nimport wrapVideo from '../wrappers/video';\nimport wrapRichText, {WrapRichTextOptions} from '../../lib/richTextProcessor/wrapRichText';\nimport {WrapReplyOptions} from '../wrappers/reply';\nimport {Modify} from '../../types';\nimport {i18n} from '../../lib/langPack';\nimport Icon from '../icon';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport limitSymbols from '../../helpers/string/limitSymbols';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\n\nconst MEDIA_SIZE = 32;\n\nexport async function wrapReplyDivAndCaption(options: {\n title?: string | HTMLElement | DocumentFragment,\n titleEl: HTMLElement,\n subtitle?: string | HTMLElement | DocumentFragment,\n subtitleEl: HTMLElement,\n message: Message.message | Message.messageService,\n storyItem?: StoryItem.storyItem,\n mediaEl: HTMLElement,\n isStoryExpired?: boolean,\n middleware?: Middleware,\n lazyLoadQueue?: false | LazyLoadQueue,\n replyHeader?: MessageReplyHeader,\n quote?: {text: string, entities?: MessageEntity[]},\n withoutMediaType?: boolean,\n canTranslate?: boolean\n} & WrapRichTextOptions) {\n options.loadPromises ||= [];\n\n const {titleEl, subtitleEl, mediaEl, message, loadPromises, animationGroup, middleware, lazyLoadQueue, replyHeader} = options;\n let {storyItem, quote} = options;\n\n let wrappedTitle = options.title;\n if(wrappedTitle !== undefined) {\n if(typeof(wrappedTitle) === 'string') {\n wrappedTitle = limitSymbols(wrappedTitle, 140);\n wrappedTitle = wrapEmojiText(wrappedTitle);\n }\n\n replaceContent(titleEl, wrappedTitle);\n } else if(options.isStoryExpired) {\n const icon = Icon('bomb', 'expired-story-icon');\n titleEl.append(icon, i18n('ExpiredStory'));\n }\n\n const isMessageReply = replyHeader?._ === 'messageReplyHeader';\n\n if(isMessageReply && replyHeader.quote_text) {\n quote ??= {\n text: replyHeader.quote_text,\n entities: replyHeader.quote_entities\n };\n }\n\n let messageMedia: MessageMedia | WebPage.webPage = storyItem?.media ||\n (message as Message.message)?.media ||\n (isMessageReply && replyHeader.reply_media);\n\n if(messageMedia?._ === 'messageMediaStory') {\n storyItem = messageMedia.story as StoryItem.storyItem;\n messageMedia = storyItem?.media;\n }\n\n let setMedia = false, isRound = false;\n const mediaChildren = mediaEl ? Array.from(mediaEl.children).slice() : [];\n if(messageMedia && mediaEl) {\n messageMedia = (messageMedia as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage || messageMedia;\n const photo = (messageMedia as MessageMedia.messageMediaPhoto).photo as Photo.photo;\n const document = (messageMedia as MessageMedia.messageMediaDocument).document as Document.document;\n if(photo || (document && document.thumbs?.length)/* ['video', 'sticker', 'gif', 'round', 'photo', 'audio'].indexOf(document.type) !== -1) */) {\n if(document?.type === 'sticker') {\n await wrapSticker({\n doc: document,\n div: mediaEl,\n lazyLoadQueue: lazyLoadQueue || undefined,\n group: animationGroup,\n // onlyThumb: document.sticker === 2,\n width: MEDIA_SIZE,\n height: MEDIA_SIZE,\n middleware,\n loadPromises\n });\n setMedia = true;\n } else if(document?.type === 'gif' && document.video_thumbs) {\n setMedia = true;\n await wrapVideo({\n doc: document,\n container: mediaEl,\n boxWidth: MEDIA_SIZE,\n boxHeight: MEDIA_SIZE,\n lazyLoadQueue: lazyLoadQueue || undefined,\n noPlayButton: true,\n noInfo: true,\n middleware,\n loadPromises,\n withoutPreloader: true,\n videoSize: document.video_thumbs[0] as Extract,\n group: animationGroup\n });\n } else {\n const m = photo || document;\n isRound = document?.type === 'round';\n\n try {\n await wrapPhoto({\n photo: m,\n container: mediaEl,\n boxWidth: MEDIA_SIZE,\n boxHeight: MEDIA_SIZE,\n size: choosePhotoSize(m, MEDIA_SIZE, MEDIA_SIZE),\n middleware,\n lazyLoadQueue,\n noBlur: true,\n withoutPreloader: true,\n loadPromises\n });\n setMedia = true;\n } catch(err) {\n\n }\n }\n }\n }\n\n if(options.subtitle !== undefined) {\n let wrappedSubtitle = options.subtitle;\n if(typeof(wrappedSubtitle) === 'string') {\n wrappedSubtitle = limitSymbols(wrappedSubtitle, 140);\n wrappedSubtitle = wrapEmojiText(wrappedSubtitle);\n }\n\n replaceContent(subtitleEl, wrappedSubtitle || '');\n } else if(storyItem && options.storyItem) {\n subtitleEl.replaceChildren(i18n('Story'));\n } else if(options.isStoryExpired) {\n const icon = Icon('bomb', 'expired-story-icon');\n subtitleEl.replaceChildren(icon, i18n('ExpiredStory'));\n } else if(quote) {\n const fragment = wrapRichText(limitSymbols(quote.text, 200), {\n ...options,\n noLinebreaks: true,\n entities: quote.entities,\n noLinks: true\n // noTextFormat: true\n });\n\n subtitleEl.replaceChildren(fragment);\n } else if(message) {\n const fragment = await wrapMessageForReply(options);\n subtitleEl.replaceChildren(fragment);\n }\n\n // if(options.isStoryExpired) {\n // setMedia = true;\n // }\n\n Promise.all(loadPromises).then(() => {\n if(middleware && !middleware()) return;\n mediaChildren.forEach((child) => child.remove());\n\n if(mediaEl) {\n mediaEl.classList.toggle('is-round', isRound);\n }\n });\n\n return setMedia;\n}\n\nexport default class ReplyContainer extends DivAndCaption<(options: WrapReplyOptions) => Promise> {\n private mediaEl: HTMLElement;\n\n constructor(protected className: string) {\n super(className, async(options) => {\n if(!this.mediaEl) {\n this.mediaEl = document.createElement('div');\n this.mediaEl.classList.add(this.className + '-media');\n }\n\n const isMediaSet = await wrapReplyDivAndCaption({\n ...(options as Modify),\n titleEl: this.title,\n subtitleEl: this.subtitle,\n mediaEl: this.mediaEl\n });\n\n if(options.isStoryExpired) {\n // this.mediaEl.classList.add('is-expired-story', 'tgico-clock');\n this.container.classList.add('is-expired-story');\n }\n\n this.container.classList.toggle('is-media', isMediaSet);\n if(isMediaSet) {\n this.content.prepend(this.mediaEl);\n } else {\n this.mediaEl.remove();\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport customProperties from '../../helpers/dom/customProperties';\nimport {Middleware} from '../../helpers/middleware';\nimport noop from '../../helpers/noop';\nimport pause from '../../helpers/schedulers/pause';\nimport {applyColorOnContext} from '../../lib/rlottie/rlottiePlayer';\nimport rootScope from '../../lib/rootScope';\nimport wrapSticker from './sticker';\n\nexport default async function wrapEmojiPattern({\n docId,\n middleware,\n useHighlightingColor,\n colorAsOut,\n container,\n color,\n positions,\n canvasWidth,\n canvasHeight,\n emojiSize,\n onCacheStatus: onCacheStatus\n}: {\n docId: DocId,\n middleware: Middleware,\n useHighlightingColor?: boolean,\n colorAsOut?: boolean,\n container?: HTMLElement,\n color?: string,\n positions: [x: number, y: number, size: number, alpha: number][],\n canvasWidth: number,\n canvasHeight: number,\n emojiSize: number,\n onCacheStatus?: (cached: boolean) => void\n}) {\n const result = await rootScope.managers.acknowledged.appEmojiManager.getCustomEmojiDocument(docId);\n if(!result.cached) onCacheStatus?.(false);\n const doc = await result.result;\n const d = document.createElement('div');\n return wrapSticker({\n doc,\n div: d,\n middleware,\n width: emojiSize,\n height: emojiSize,\n // onlyThumb: true,\n static: true,\n withThumb: false,\n exportLoad: 2,\n useCache: false\n }).then(({load, downloaded}) => {\n onCacheStatus?.(downloaded);\n return load();\n }).then((result) => {\n const image = (result as HTMLImageElement[])[0];\n if(!image.naturalWidth) {\n console.warn('should wait for image size', image);\n return pause(100).then(() => image);\n }\n return image;\n }).then((image) => {\n const canvas = document.createElement('canvas');\n canvas.classList.add('emoji-pattern-canvas');\n canvas.style.width = `${canvasWidth}px`;\n canvas.style.height = `${canvasHeight}px`;\n const ctx = canvas.getContext('2d');\n const dpr = canvas.dpr = window.devicePixelRatio;\n canvas.width = canvasWidth * dpr;\n canvas.height = canvasHeight * dpr;\n positions.forEach(([x, y, size, alpha]) => {\n ctx.globalAlpha = alpha;\n ctx.drawImage(image, x * dpr, y * dpr, size * dpr, size * dpr);\n });\n ctx.globalAlpha = 1;\n\n if(useHighlightingColor) {\n color = '#ffffff';\n } else if(colorAsOut) {\n color = customProperties.getProperty('message-out-primary-color');\n }\n\n applyColorOnContext(ctx, color, 0, 0, canvas.width, canvas.height);\n if(container) container.prepend(canvas);\n return canvas;\n }).catch(noop) as Promise;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {setDirection} from '../../helpers/dom/setInnerHTML';\nimport {MessageEntity, MessageReplyHeader, User} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {getPeerColorsByPeer} from '../../lib/appManagers/utils/peers/getPeerColorById';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport {WrapPinnedContainerOptions} from '../chat/pinnedContainer';\nimport ReplyContainer from '../chat/replyContainer';\nimport ripple from '../ripple';\nimport wrapEmojiPattern from './emojiPattern';\n\nexport type WrapReplyOptions = WrapPinnedContainerOptions & {\n setColorPeerId?: PeerId,\n useHighlightingColor?: boolean,\n colorAsOut?: boolean,\n isStoryExpired?: boolean,\n isQuote?: boolean,\n noBorder?: boolean,\n replyHeader?: MessageReplyHeader,\n quote?: {text: string, entities?: MessageEntity[]},\n canTranslate?: boolean\n} & WrapSomethingOptions;\n\nexport default function wrapReply(options: WrapReplyOptions) {\n const replyContainer = new ReplyContainer('reply');\n const fillPromise = replyContainer.fill(options);\n\n replyContainer.container.classList.add('quote-like', 'quote-like-hoverable', 'quote-like-border');\n setDirection(replyContainer.container);\n // replyContainer.border.classList.add('quote-like-border');\n replyContainer.border.remove();\n ripple(replyContainer.container, undefined, undefined, true);\n\n if(options.isQuote) {\n replyContainer.container.classList.add('quote-like-icon');\n replyContainer.container.classList.add('reply-multiline');\n }\n\n if(options.noBorder) {\n replyContainer.container.classList.remove('quote-like-border');\n }\n\n const {setColorPeerId} = options;\n if(setColorPeerId !== undefined) {\n appImManager.setPeerColorToElement({\n peerId: setColorPeerId,\n element: replyContainer.container,\n messageHighlighting: options.useHighlightingColor,\n colorAsOut: options.colorAsOut\n });\n\n const peer = apiManagerProxy.getPeer(setColorPeerId);\n const docId = (peer as User.user)?.color?.background_emoji_id;\n if(docId) {\n wrapEmojiPattern({\n docId,\n container: replyContainer.container,\n middleware: options.middleware,\n color: getPeerColorsByPeer(peer)[0],\n colorAsOut: options.colorAsOut,\n useHighlightingColor: options.useHighlightingColor,\n positions: [\n [104.5, 34.5, 12, .35],\n [9.3, 33.3, 10.4, .2],\n [51.3, 0.3, 10.4, .2],\n [0.6, 7.6, 12.8, .1],\n [28.9, 12.9, 15.2, .2],\n [65.5, 18.5, 12, .25],\n [48.9, 37.9, 15.2, .25],\n [91.9, 7.9, 15.2, .3]\n ],\n canvasWidth: 117,\n canvasHeight: 54,\n emojiSize: 16\n }).then((canvas) => {\n if(options.middleware && !options.middleware()) return;\n canvas.classList.add('reply-background-canvas');\n });\n }\n }\n\n return {container: replyContainer.container, fillPromise};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type LazyLoadQueue from './lazyLoadQueue';\nimport {Middleware, MiddlewareHelper} from '../helpers/middleware';\nimport {avatarNew} from './avatarNew';\n\nconst CLASS_NAME = 'stacked-avatars';\nconst AVATAR_CLASS_NAME = CLASS_NAME + '-avatar';\nconst AVATAR_CONTAINER_CLASS_NAME = AVATAR_CLASS_NAME + '-container';\n\nexport default class StackedAvatars {\n public container: HTMLElement;\n private lazyLoadQueue: LazyLoadQueue;\n private avatarSize: number;\n private middlewareHelper: MiddlewareHelper;\n\n constructor(options: {\n lazyLoadQueue?: StackedAvatars['lazyLoadQueue'],\n avatarSize: StackedAvatars['avatarSize'],\n middleware: Middleware\n }) {\n this.lazyLoadQueue = options.lazyLoadQueue;\n this.avatarSize = options.avatarSize;\n this.middlewareHelper = options.middleware.create();\n\n this.container = document.createElement('div');\n this.container.classList.add(CLASS_NAME);\n\n this.container.style.setProperty('--avatar-size', options.avatarSize + 'px');\n }\n\n /**\n * MACOS, ANDROID - без реверса\n * WINDOWS DESKTOP - реверс\n * все приложения накладывают аватарку первую на вторую, а в макете зато вторая на первую, ЛОЛ!\n */\n public render(peerIds: PeerId[], loadPromises: Promise[] = []) {\n const children = this.container.children;\n peerIds = peerIds.slice().reverse();\n if(peerIds.length > 3) {\n peerIds = peerIds.slice(-3);\n }\n\n peerIds.forEach((peerId, idx) => {\n let avatarContainer = children[idx] as HTMLElement;\n if(!avatarContainer) {\n avatarContainer = document.createElement('div');\n avatarContainer.classList.add(AVATAR_CONTAINER_CLASS_NAME);\n avatarContainer.middlewareHelper = this.middlewareHelper.get().create();\n } else {\n avatarContainer.middlewareHelper.clean();\n }\n\n const avatarElem = avatarNew({\n middleware: avatarContainer.middlewareHelper.get(),\n size: this.avatarSize,\n isDialog: false,\n lazyLoadQueue: this.lazyLoadQueue,\n peerId\n });\n avatarElem.node.classList.add(AVATAR_CLASS_NAME);\n loadPromises?.push(avatarElem.readyThumbPromise);\n\n avatarContainer.replaceChildren(avatarElem.node);\n\n if(!avatarContainer.parentNode) {\n this.container.append(avatarContainer);\n }\n\n avatarContainer.classList.toggle('is-first', idx === 0);\n });\n\n // if were 3 and became 2\n (Array.from(children) as HTMLElement[]).slice(peerIds.length).forEach((el) => {\n el.middlewareHelper.destroy();\n el.remove();\n });\n\n return Promise.all(loadPromises);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Message} from '../../layer';\nimport rootScope from '../../lib/rootScope';\nimport ripple from '../ripple';\nimport I18n from '../../lib/langPack';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport StackedAvatars from '../stackedAvatars';\nimport formatNumber from '../../helpers/number/formatNumber';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport type LazyLoadQueue from '../lazyLoadQueue';\nimport {MiddlewareHelper} from '../../helpers/middleware';\nimport {_tgico} from '../../helpers/tgico';\nimport Icon from '../icon';\n\nconst TAG_NAME = 'replies-element';\n\nrootScope.addEventListener('replies_updated', (message) => {\n (Array.from(document.querySelectorAll(TAG_NAME + `[data-post-key=\"${message.peerId}_${message.mid}\"]`)) as RepliesElement[]).forEach((element) => {\n element.message = message;\n element.render();\n });\n});\n\nexport default class RepliesElement extends HTMLElement {\n public message: Message.message;\n public type: 'footer' | 'beside';\n public loadPromises: Promise[];\n public lazyLoadQueue: LazyLoadQueue;\n public stackedAvatars: StackedAvatars;\n public text: I18n.IntlElement;\n public managers: AppManagers;\n public middlewareHelper: MiddlewareHelper;\n\n private updated = false;\n\n constructor() {\n super();\n this.managers = rootScope.managers;\n }\n\n public init() {\n this.render();\n this.dataset.postKey = this.message.peerId + '_' + this.message.mid;\n this.classList.add('replies', 'replies-' + this.type);\n }\n\n public render() {\n const replies = this.message.replies;\n\n if(this.type === 'footer') {\n let leftPart: HTMLElement;\n if(this.firstElementChild) {\n leftPart = this.firstElementChild as HTMLElement;\n }\n\n if(replies?.recent_repliers) {\n if(leftPart && !leftPart.classList.contains('replies-footer-avatars')) {\n this.replaceChildren();\n leftPart = null;\n }\n\n if(!this.stackedAvatars) {\n this.stackedAvatars = new StackedAvatars({\n lazyLoadQueue: this.lazyLoadQueue,\n avatarSize: 30,\n middleware: this.middlewareHelper.get()\n });\n\n this.stackedAvatars.container.classList.add('replies-footer-avatars');\n }\n\n leftPart = this.stackedAvatars.container;\n\n this.stackedAvatars.render(replies.recent_repliers.map((peer) => getPeerId(peer)), this.loadPromises);\n } else {\n if(leftPart && !leftPart.classList.contains(_tgico('comments'))) {\n leftPart.remove();\n leftPart = null;\n }\n\n if(!leftPart) {\n leftPart = Icon('comments', 'replies-footer-icon', 'replies-footer-icon-comments');\n }\n }\n\n if(!leftPart.parentElement) {\n this.prepend(leftPart);\n }\n\n if(!this.text) {\n this.text = new I18n.IntlElement();\n }\n\n const text = this.text;\n if(replies) {\n if(replies.replies) {\n text.compareAndUpdate({key: 'Comments', args: [replies.replies]});\n } else {\n text.compareAndUpdate({key: 'LeaveAComment'});\n }\n } else {\n text.compareAndUpdate({key: 'ViewInChat'});\n }\n\n if(replies) {\n // const historyStorage = appMessagesManager.getHistoryStorage(replies.channel_id.toPeerId(true));\n let isUnread = false;\n if(replies.replies) {\n if(replies.read_max_id !== undefined && replies.max_id !== undefined) {\n isUnread = replies.read_max_id < replies.max_id;\n }/* else {\n isUnread = !historyStorage.readMaxId || historyStorage.readMaxId < (replies.max_id || 0);\n } */\n }\n this.classList.toggle('is-unread', isUnread);\n }\n\n let textSpan = this.children[1] as HTMLElement;\n if(!textSpan) {\n textSpan = document.createElement('span');\n textSpan.classList.add('replies-footer-text');\n\n const iconSpan = Icon('next', 'replies-footer-icon', 'replies-footer-icon-next');\n\n const rippleContainer = document.createElement('div');\n ripple(rippleContainer);\n\n this.append(textSpan, iconSpan, rippleContainer);\n }\n\n replaceContent(textSpan, text.element);\n } else {\n this.classList.add('bubble-beside-button');\n this.innerHTML = `${replies?.replies ? formatNumber(replies.replies, 0) : ''}`;\n this.prepend(Icon('commentssticker'));\n }\n\n if(replies && !this.updated && !this.message.pFlags.is_outgoing) {\n this.managers.appMessagesManager.subscribeRepliesThread(this.message.peerId, this.message.mid);\n this.managers.appMessagesManager.updateMessage(this.message.peerId, this.message.mid, 'replies_updated');\n this.updated = true;\n }\n\n if(this.loadPromises) {\n this.loadPromises = undefined;\n }\n }\n}\n\ncustomElements.define(TAG_NAME, RepliesElement);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type LazyLoadQueue from '../lazyLoadQueue';\nimport {formatFullSentTimeRaw, formatTime, getFullDate} from '../../helpers/date';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {Middleware} from '../../helpers/middleware';\nimport formatNumber from '../../helpers/number/formatNumber';\nimport {AvailableEffect, Message, MessageReplyHeader} from '../../layer';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport {i18n, _i18n} from '../../lib/langPack';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../../lib/rootScope';\nimport Icon from '../icon';\nimport PeerTitle from '../peerTitle';\nimport wrapReply from '../wrappers/reply';\nimport Chat, {ChatType} from './chat';\nimport RepliesElement from './replies';\nimport ChatBubbles from './bubbles';\nimport getFwdFromName from '../../lib/appManagers/utils/messages/getFwdFromName';\nimport deferredPromise from '../../helpers/cancellablePromise';\nimport wrapSticker from '../wrappers/sticker';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport getStickerEffectThumb from '../../lib/appManagers/utils/stickers/getStickerEffectThumb';\nimport wrapStickerAnimation from '../wrappers/stickerAnimation';\nimport Scrollable from '../scrollable';\nimport appDownloadManager from '../../lib/appManagers/appDownloadManager';\n\nconst NBSP = ' ';\n\nconst makeEdited = () => {\n const edited = document.createElement('i');\n edited.classList.add('time-edited', 'time-part');\n _i18n(edited, 'EditedMessage');\n return edited;\n};\n\nconst makeTime = (date: Date, includeDate?: boolean) => {\n return includeDate ? formatFullSentTimeRaw(date.getTime() / 1000 | 0, {combined: true}).dateEl : formatTime(date);\n};\n\nconst makeEffect = (props: {\n onlyElement?: boolean,\n docId?: DocId,\n middleware?: Middleware,\n loadPromises?: Promise[]\n}) => {\n const span = document.createElement('span');\n span.classList.add('time-effect');\n if(props.onlyElement) {\n return span;\n }\n\n const deferred = deferredPromise();\n\n span.dataset.effectId = '' + props.docId;\n\n rootScope.managers.acknowledged.appReactionsManager.getAvailableEffect(props.docId)\n .then(async(result) => {\n if(!result.cached) {\n deferred.resolve();\n }\n\n const availableEffect = await result.result;\n if(!availableEffect) {\n deferred.resolve();\n return;\n }\n\n const loadPromises: Promise[] = [];\n wrapSticker({\n doc: await rootScope.managers.appDocsManager.getDoc(availableEffect.static_icon_id),\n div: span,\n middleware: props.middleware,\n loadPromises,\n width: 12,\n height: 12\n });\n\n Promise.all(loadPromises).then(async() => {\n if(result.cached) {\n deferred.resolve();\n }\n\n // * preload effect\n const {doc, thumb} = await getDocForEffect(availableEffect);\n appDownloadManager.downloadMedia({\n media: doc,\n thumb\n });\n });\n });\n\n props.loadPromises?.push(deferred);\n\n return span;\n};\n\nconst getDocForEffect = async(availableEffect: AvailableEffect) => {\n const isPremiumEffect = !availableEffect.effect_animation_id;\n const doc = await rootScope.managers.appDocsManager.getDoc(isPremiumEffect ? availableEffect.effect_sticker_id : availableEffect.effect_animation_id);\n return {isPremiumEffect, doc, thumb: getStickerEffectThumb(doc)};\n};\n\nexport const fireMessageEffect = ({e, isOut, element, middleware, scrollable, effectId}: {\n e?: Event,\n isOut?: boolean,\n element: HTMLElement,\n middleware: Middleware,\n scrollable?: Scrollable,\n effectId: DocId\n}) => {\n if(element.dataset.playing) {\n e && cancelEvent(e);\n return;\n }\n\n element.dataset.playing = '1';\n\n rootScope.managers.appReactionsManager.getAvailableEffect(effectId).then(async(availableEffect) => {\n const {doc, thumb: fullThumb} = await getDocForEffect(availableEffect);\n if(!middleware()) return;\n\n const {animationDiv} = wrapStickerAnimation({\n doc,\n middleware,\n side: isOut ? 'right' : 'left',\n size: 240,\n target: element,\n play: true,\n scrollable,\n fullThumb: getStickerEffectThumb(doc),\n addOffsetX: 40,\n onUnmount: () => {\n delete element.dataset.playing;\n }\n });\n\n if(isOut === false) {\n animationDiv.classList.add('reflect-x');\n }\n });\n\n e && cancelEvent(e);\n};\n\nexport const fireMessageEffectByBubble = ({timeEffect, bubble, e, scrollable}: {\n timeEffect: HTMLElement,\n bubble: HTMLElement,\n e?: Event,\n scrollable?: Scrollable\n}) => {\n const effectId = timeEffect.dataset.effectId as DocId;\n return fireMessageEffect({\n element: timeEffect,\n isOut: bubble.classList.contains('is-out'),\n e,\n scrollable,\n effectId,\n middleware: bubble.middlewareHelper.get()\n });\n};\n\n// const makeSponsored = () => i18n('SponsoredMessage');\n\nexport namespace MessageRender {\n /* export const setText = () => {\n\n }; */\n\n export const setTime = (options: {\n chat: Chat,\n chatType: ChatType,\n message: Message.message | Message.messageService,\n reactionsMessage?: Message.message,\n isOut: boolean,\n middleware: Middleware,\n loadPromises?: Promise[]\n }) => {\n const {chatType, message} = options;\n const isMessage = !('action' in message)/* && !isSponsored */;\n const includeDate = message.peerId === rootScope.myId && (!options.isOut/* || !!options.chat.threadId */);\n const args: (HTMLElement | string)[] = [];\n\n let timestamp = message.date;\n if(includeDate && isMessage && message.fwd_from) {\n const fwdTime = message.fwd_from.saved_date || message.fwd_from.date;\n timestamp = fwdTime || timestamp;\n }\n const date = new Date(timestamp * 1000);\n\n let editedSpan: HTMLElement,\n effectSpan: HTMLElement;\n // sponsoredSpan: HTMLElement;\n // reactionsElement: ReactionsElement,\n // reactionsMessage: Message.message;\n\n // const isSponsored = !!(message as Message.message).pFlags.sponsored;\n // let hasReactions: boolean;\n\n const fwdFrom = isMessage && message.fwd_from;\n const time: HTMLElement = /* isSponsored ? undefined : */makeTime(date, includeDate);\n if(isMessage) {\n if(message.views) {\n const postViewsSpan = document.createElement('span');\n postViewsSpan.classList.add('post-views');\n postViewsSpan.textContent = formatNumber(message.views, 1);\n\n const channelViews = Icon('channelviews', 'time-icon', 'time-part', 'time-icon-views');\n\n args.push(postViewsSpan, channelViews);\n }\n\n const postAuthor = options.chat.getPostAuthor(message);\n if(postAuthor) {\n const span = document.createElement('span');\n span.classList.add('time-post-author');\n setInnerHTML(span, wrapEmojiText(postAuthor));\n span.insertAdjacentHTML('beforeend', '');\n args.push(span);\n }\n\n if(message.edit_date && chatType !== ChatType.Scheduled && !message.pFlags.edit_hide) {\n args.unshift(editedSpan = makeEdited());\n }\n\n if(chatType !== ChatType.Pinned && message.pFlags.pinned) {\n const i = Icon('pinnedchat', 'time-icon', 'time-pinned', 'time-part');\n args.unshift(i);\n }\n\n if(message.effect) {\n effectSpan = makeEffect({onlyElement: true});\n args.push(effectSpan);\n }\n\n // if(USER_REACTIONS_INLINE && message.peer_id._ === 'peerUser'/* && message.reactions?.results?.length */) {\n // hasReactions = true;\n\n // reactionsMessage = options.reactionsMessage;\n // reactionsElement = new ReactionsElement();\n // reactionsElement.init(reactionsMessage, 'inline', true);\n // reactionsElement.render();\n // args.unshift(reactionsElement);\n // }\n }/* else if(isSponsored) {\n args.push(sponsoredSpan = makeSponsored());\n } */\n\n if(time) {\n args.push(time);\n }\n\n let title = /* isSponsored ? undefined : */getFullDate(new Date(message.date * 1000));\n if(isMessage) {\n title += (message.edit_date && !message.pFlags.edit_hide ? `\\nEdited: ${getFullDate(new Date(message.edit_date * 1000))}` : '') +\n (fwdFrom ? `\\nOriginal: ${getFullDate(new Date(fwdFrom.saved_date || fwdFrom.date * 1000))}` : '');\n }\n\n const timeSpan = document.createElement('span');\n timeSpan.classList.add('time');\n // if(title) timeSpan.title = title;\n timeSpan.append(...args);\n\n const inner = document.createElement('div');\n inner.classList.add('time-inner');\n if(title) inner.title = title;\n\n let clonedArgs = args;\n if(editedSpan) {\n clonedArgs[clonedArgs.indexOf(editedSpan)] = makeEdited();\n }\n // if(sponsoredSpan) {\n // clonedArgs[clonedArgs.indexOf(sponsoredSpan)] = makeSponsored();\n // }\n // if(reactionsElement) {\n // const _reactionsElement = clonedArgs[clonedArgs.indexOf(reactionsElement)] = new ReactionsElement();\n // _reactionsElement.init(reactionsMessage, 'inline');\n // _reactionsElement.render();\n // }\n if(effectSpan) {\n clonedArgs[clonedArgs.indexOf(effectSpan)] = makeEffect({\n docId: (message as Message.message).effect,\n middleware: options.middleware,\n loadPromises: options.loadPromises\n });\n }\n clonedArgs = clonedArgs.map((a) => {\n return a instanceof HTMLElement &&\n !a.classList.contains('i18n') &&\n !a.classList.contains('reactions') &&\n !a.classList.contains('time-effect') ?\n a.cloneNode(true) as HTMLElement :\n a;\n });\n if(time) {\n clonedArgs[clonedArgs.length - 1] = makeTime(date, includeDate); // clone time\n }\n inner.append(...clonedArgs);\n\n timeSpan.append(inner);\n\n return timeSpan;\n };\n\n export const renderReplies = ({bubble, bubbleContainer, message, messageDiv, loadPromises, lazyLoadQueue, middleware}: {\n bubble: HTMLElement,\n bubbleContainer: HTMLElement,\n message: Message.message,\n messageDiv: HTMLElement,\n loadPromises?: Promise[],\n lazyLoadQueue?: LazyLoadQueue,\n middleware: Middleware\n }) => {\n const isFooter = !bubble.classList.contains('sticker') &&\n !bubble.classList.contains('emoji-big') &&\n !bubble.classList.contains('round');\n const repliesFooter = new RepliesElement();\n repliesFooter.message = message;\n repliesFooter.type = isFooter ? 'footer' : 'beside';\n repliesFooter.loadPromises = loadPromises;\n repliesFooter.lazyLoadQueue = lazyLoadQueue;\n repliesFooter.middlewareHelper = middleware.create();\n repliesFooter.init();\n bubbleContainer.append(repliesFooter);\n return isFooter;\n };\n\n export const setReply = async({chat, bubble, bubbleContainer, message, appendCallback, middleware, lazyLoadQueue, needUpdate, isStandaloneMedia, isOut}: {\n chat: Chat,\n bubble: HTMLElement,\n bubbleContainer?: HTMLElement,\n message: Message.message,\n appendCallback?: (container: HTMLElement) => void,\n middleware: Middleware,\n lazyLoadQueue: LazyLoadQueue,\n needUpdate: ChatBubbles['needUpdate'],\n isStandaloneMedia: boolean,\n isOut: boolean\n }) => {\n const isReplacing = !bubbleContainer;\n if(isReplacing) {\n bubbleContainer = bubble.querySelector('.bubble-content');\n }\n\n const currentReplyDiv = isReplacing ? bubbleContainer.querySelector('.reply') : null;\n const replyTo = message.reply_to;\n if(!replyTo) {\n currentReplyDiv?.remove();\n bubble.classList.remove('is-reply');\n return;\n }\n\n const isStoryReply = replyTo._ === 'messageReplyStoryHeader';\n\n const replyToPeerId = isStoryReply ?\n getPeerId(replyTo.peer) :\n (\n replyTo.reply_to_peer_id ?\n getPeerId(replyTo.reply_to_peer_id) :\n message.peerId\n );\n\n const originalMessage = !isStoryReply && apiManagerProxy.getMessageByPeer(replyToPeerId, message.reply_to_mid);\n const originalStory = isStoryReply && await rootScope.managers.acknowledged.appStoriesManager.getStoryById(replyToPeerId, replyTo.story_id);\n let originalPeerTitle: string | HTMLElement | DocumentFragment;\n\n let isReplyFromAnotherPeer = false;\n let titlePeerId: PeerId, setColorPeerId: PeerId;\n if(isStoryReply) {\n if(!originalStory.cached) {\n needUpdate.push({replyToPeerId, replyStoryId: replyTo.story_id, mid: message.mid, peerId: message.peerId});\n rootScope.managers.appMessagesManager.fetchMessageReplyTo(message);\n\n originalPeerTitle = i18n('Loading');\n } else {\n titlePeerId = replyToPeerId;\n originalPeerTitle = new PeerTitle({\n peerId: titlePeerId,\n dialog: false,\n onlyFirstName: false,\n plainText: false\n }).element;\n }\n } else if(!originalMessage) {\n // from different peer\n if(replyTo.reply_from) {\n isReplyFromAnotherPeer = true;\n titlePeerId = getPeerId(replyTo.reply_from?.from_id || replyTo.reply_to_peer_id);\n originalPeerTitle = new PeerTitle({\n peerId: titlePeerId || undefined,\n dialog: false,\n onlyFirstName: false,\n plainText: false,\n fromName: getFwdFromName(replyTo.reply_from)\n }).element;\n } else {\n needUpdate.push({replyToPeerId, replyMid: message.reply_to_mid, mid: message.mid, peerId: message.peerId});\n rootScope.managers.appMessagesManager.fetchMessageReplyTo(message);\n\n originalPeerTitle = i18n('Loading');\n }\n } else {\n isReplyFromAnotherPeer = !!replyTo.reply_from;\n const originalMessageFwdFromId = (originalMessage as Message.message).fwdFromId;\n titlePeerId = message.fwdFromId && message.fwdFromId === originalMessageFwdFromId ?\n message.fwdFromId :\n originalMessageFwdFromId || originalMessage.fromId;\n setColorPeerId = message.fwdFromId && message.fwdFromId === originalMessageFwdFromId ?\n undefined :\n originalMessage.fromId;\n originalPeerTitle = new PeerTitle({\n peerId: titlePeerId,\n dialog: false,\n onlyFirstName: false,\n plainText: false,\n fromName: !titlePeerId ? getFwdFromName((originalMessage as Message.message).fwd_from) : undefined\n }).element;\n }\n\n if(!isStoryReply && replyTo.reply_from) {\n const fragment = document.createDocumentFragment();\n let icon: HTMLElement;\n if(replyTo.reply_from.channel_post) {\n fragment.append(icon = Icon('newchannel_filled', 'with-margin'), originalPeerTitle);\n } else if(replyTo.reply_to_peer_id) {\n const groupPeerTitle = new PeerTitle({\n peerId: getPeerId(replyTo.reply_to_peer_id),\n dialog: false,\n onlyFirstName: false,\n plainText: false\n }).element;\n\n fragment.append(originalPeerTitle, ' ', icon = Icon('group_filled'), ' ', groupPeerTitle);\n } else {\n fragment.append(icon = Icon('newprivate_filled', 'with-margin'), originalPeerTitle);\n }\n\n if(icon) {\n icon.classList.add('inline-icon', 'reply-title-icon');\n originalPeerTitle = fragment;\n }\n }\n\n const isStoryExpired = isStoryReply && originalStory.cached && !(await originalStory.result);\n const {container, fillPromise} = wrapReply({\n title: originalPeerTitle,\n animationGroup: chat.animationGroup,\n message: originalMessage || (isReplyFromAnotherPeer ? {\n _: 'message',\n pFlags: {},\n id: 0,\n date: 0,\n message: '',\n peer_id: undefined,\n media: (replyTo as MessageReplyHeader.messageReplyHeader).reply_media\n } : undefined),\n isStoryExpired,\n storyItem: originalStory?.cached && await originalStory.result,\n setColorPeerId: setColorPeerId || titlePeerId,\n textColor: 'primary-text-color',\n isQuote: !isStoryReply ? replyTo.pFlags.quote : undefined,\n middleware,\n lazyLoadQueue,\n replyHeader: replyTo,\n useHighlightingColor: isStandaloneMedia,\n colorAsOut: isOut,\n canTranslate: originalMessage && !isReplyFromAnotherPeer ? !originalMessage.pFlags.out : undefined\n });\n\n await fillPromise;\n if(currentReplyDiv) {\n const saveClassNames = ['floating-part', 'mb-shorter'];\n const classList = currentReplyDiv.classList;\n saveClassNames.forEach((className) => {\n if(classList.contains(className)) {\n container.classList.add(className);\n }\n });\n currentReplyDiv.replaceWith(container);\n } else {\n appendCallback(container);\n }\n // bubbleContainer.insertBefore(, nameContainer);\n bubble.classList.add('is-reply');\n\n return container;\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport appSidebarRight from '..';\nimport {roundPercents} from '../../poll';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport {i18n} from '../../../lib/langPack';\nimport setInnerHTML from '../../../helpers/dom/setInnerHTML';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport Button from '../../button';\nimport {Message, MessageMedia} from '../../../layer';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport wrapRichText from '../../../lib/richTextProcessor/wrapRichText';\nimport wrapTextWithEntities from '../../../lib/richTextProcessor/wrapTextWithEntities';\n\nexport default class AppPollResultsTab extends SliderSuperTab {\n private resultsDiv: HTMLElement;\n\n public async init(message: Message.message) {\n this.container.id = 'poll-results-container';\n this.container.classList.add('chatlist-container');\n\n this.resultsDiv = document.createElement('div');\n this.resultsDiv.classList.add('poll-results');\n this.scrollable.append(this.resultsDiv);\n\n const poll = await this.managers.appPollsManager.getPoll((message.media as MessageMedia.messageMediaPoll).poll.id);\n\n this.setTitle(poll.poll.pFlags.quiz ? 'PollResults.Title.Quiz' : 'PollResults.Title.Poll');\n\n const title = document.createElement('h3');\n const questionText = wrapTextWithEntities(poll.poll.question);\n setInnerHTML(title, wrapRichText(questionText.text, {entities: questionText.entities, middleware: this.middlewareHelper.get()}));\n\n const percents = poll.results.results.map((v) => v.voters / poll.results.total_voters * 100);\n roundPercents(percents);\n\n const fragment = document.createDocumentFragment();\n poll.results.results.forEach((result, idx) => {\n if(!result.voters) return;\n\n const hr = document.createElement('hr');\n\n const answer = poll.poll.answers[idx];\n\n // Head\n const answerEl = document.createElement('div');\n answerEl.classList.add('poll-results-answer');\n\n const answerTitle = document.createElement('div');\n const answerText = wrapTextWithEntities(answer.text);\n setInnerHTML(answerTitle, wrapRichText(answerText.text, {entities: answerText.entities, middleware: this.middlewareHelper.get()}));\n\n const answerPercents = document.createElement('div');\n answerPercents.innerText = Math.round(percents[idx]) + '%';\n\n answerEl.append(answerTitle, answerPercents);\n\n // Humans\n const list = appDialogsManager.createChatList();\n list.classList.add('poll-results-voters');\n\n appDialogsManager.setListClickListener({\n list,\n onFound: () => {\n appSidebarRight.onCloseBtnClick();\n },\n withContext: undefined,\n autonomous: true\n });\n\n list.style.minHeight = Math.min(result.voters, 4) * 48 + 'px';\n\n fragment.append(hr, answerEl, list);\n\n let offset: string, limit = 4, loading = false, left = Math.max(0, result.voters - 4);\n const load = () => {\n if(loading) return;\n loading = true;\n\n this.managers.appPollsManager.getVotes(message, answer.option, offset, limit).then((votesList) => {\n votesList.votes.forEach((vote) => {\n const {dom} = appDialogsManager.addDialogNew({\n peerId: getPeerId(vote.peer),\n container: list,\n rippleEnabled: false,\n meAsSaved: false,\n avatarSize: 'small',\n withStories: false,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n dom.lastMessageSpan.parentElement.remove();\n });\n\n if(offset) {\n left = Math.max(0, left - votesList.votes.length);\n\n if(left) {\n (showMore.lastElementChild as HTMLElement).replaceWith(i18n('PollResults.LoadMore', [Math.min(20, left)]));\n }\n }\n\n offset = votesList.next_offset;\n limit = 20;\n\n if(!left || !votesList.votes.length) {\n showMore.remove();\n }\n }).finally(() => {\n loading = false;\n });\n };\n\n const showMore = Button('poll-results-more btn btn-primary btn-transparent', {icon: 'down'});\n showMore.addEventListener('click', load);\n showMore.append(i18n('PollResults.LoadMore', [Math.min(20, left)]));\n\n fragment.append(showMore);\n\n load();\n });\n\n this.resultsDiv.append(title, fragment);\n\n appSidebarRight.toggleSidebar(true).then(() => {\n /* appPollsManager.getVotes(mid).then((votes) => {\n console.log('gOt VotEs', votes);\n }); */\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport mediaSizes from '../helpers/mediaSizes';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport appImManager from '../lib/appManagers/appImManager';\nimport rootScope from '../lib/rootScope';\nimport ripple from './ripple';\nimport appSidebarRight from './sidebarRight';\nimport AppPollResultsTab from './sidebarRight/tabs/pollResults';\nimport {FormatterArguments, i18n, LangPackKey} from '../lib/langPack';\nimport {fastRaf} from '../helpers/schedulers';\nimport SetTransition from './singleTransition';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent, simulateClickEvent} from '../helpers/dom/clickEvent';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport windowSize from '../helpers/windowSize';\nimport {Message, MessageEntity, MessageMedia, PollResults, TextWithEntities} from '../layer';\nimport toHHMMSS from '../helpers/string/toHHMMSS';\nimport StackedAvatars from './stackedAvatars';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport wrapRichText from '../lib/richTextProcessor/wrapRichText';\nimport liteMode from '../helpers/liteMode';\nimport getPeerId from '../lib/appManagers/utils/peers/getPeerId';\nimport Icon from './icon';\nimport htmlToDocumentFragment from '../helpers/dom/htmlToDocumentFragment';\nimport {getMiddleware, MiddlewareHelper} from '../helpers/middleware';\nimport TranslatableMessage from './translatableMessage';\n\nlet lineTotalLength = 0;\nconst tailLength = 9;\nconst times = 10;\nconst fullTime = 340;\nconst oneTime = fullTime / times;\n\nexport const roundPercents = (percents: number[]) => {\n // console.log('roundPercents before percents:', percents);\n\n const sum = percents.reduce((acc, p) => acc + Math.round(p), 0);\n if(sum > 100) {\n const diff = sum - 100;\n const length = percents.length;\n for(let i = 0; i < diff; ++i) {\n let minIndex = -1, minRemainder = 1;\n for(let k = 0; k < length; ++k) {\n const remainder = percents[k] % 1;\n if(remainder >= 0.5 && remainder < minRemainder) {\n minRemainder = remainder;\n minIndex = k;\n }\n }\n\n if(minIndex === -1) {\n // throw new Error('lol chto');\n return;\n }\n\n percents[minIndex] -= minRemainder;\n }\n } else if(sum < 100) {\n const diff = 100 - sum;\n const length = percents.length;\n for(let i = 0; i < diff; ++i) {\n let minIndex = -1, maxRemainder = 0;\n for(let k = 0; k < length; ++k) {\n const remainder = percents[k] % 1;\n if(remainder < 0.5 && remainder > maxRemainder) {\n maxRemainder = remainder;\n minIndex = k;\n }\n }\n\n if(minIndex === -1) {\n // throw new Error('lol chto');\n return;\n }\n\n percents[minIndex] += 1 - maxRemainder;\n }\n }\n\n // console.log('roundPercents after percents:', percents);\n};\n\n/* const connectedPolls: {id: string, element: PollElement}[] = [];\nrootScope.on('poll_update', (e) => {\n const {poll, results} = e as {poll: Poll, results: PollResults};\n\n //console.log('poll_update', poll, results);\n for(const connected of connectedPolls) {\n if(connected.id === poll.id) {\n const pollElement = connected.element;\n pollElement.isClosed = !!poll.pFlags.closed;\n pollElement.performResults(results, poll.chosenIndexes);\n }\n }\n}); */\n\nrootScope.addEventListener('poll_update', ({poll, results}) => {\n const pollElements = Array.from(document.querySelectorAll(`poll-element[poll-id=\"${poll.id}\"]`)) as PollElement[];\n pollElements.forEach((pollElement) => {\n // console.log('poll_update', poll, results);\n pollElement.isClosed = !!poll.pFlags.closed;\n pollElement.performResults(results, poll.chosenIndexes);\n });\n});\n\nmediaSizes.addEventListener('resize', () => {\n PollElement.setMaxLength();\n PollElement.resizePolls();\n});\n\nmediaSizes.addEventListener('changeScreen', () => {\n PollElement.setMaxLength();\n});\n\nconst hideQuizHint = (element: HTMLElement, onHide: () => void, timeout: number) => {\n element.classList.remove('active');\n\n clearTimeout(timeout);\n setTimeout(() => {\n onHide?.();\n element.remove();\n\n if(prevQuizHint === element && prevQuizHintOnHide === onHide && prevQuizHintTimeout === timeout) {\n prevQuizHint = prevQuizHintOnHide = null;\n prevQuizHintTimeout = 0;\n }\n }, 200);\n};\n\nlet prevQuizHint: HTMLElement, prevQuizHintOnHide: () => void, prevQuizHintTimeout: number;\nlet isListenerSet = false;\nexport const setQuizHint = (options: {\n textElement: HTMLElement | DocumentFragment,\n textRight?: HTMLElement | DocumentFragment,\n title?: HTMLElement,\n onHide?: () => void,\n appendTo: HTMLElement,\n from: 'top' | 'bottom',\n duration: number,\n icon?: Icon\n}) => {\n if(prevQuizHint) {\n hideQuizHint(prevQuizHint, prevQuizHintOnHide, prevQuizHintTimeout);\n }\n\n const element = document.createElement('div');\n element.classList.add('quiz-hint', 'from-' + options.from);\n\n const container = document.createElement('div');\n container.classList.add('quiz-hint-container');\n\n let titleEl: HTMLElement;\n if(options.title) {\n titleEl = document.createElement('div');\n titleEl.classList.add('quiz-hint-title');\n titleEl.append(options.title);\n container.classList.add('has-title');\n }\n\n const textEl = document.createElement('div');\n textEl.classList.add('quiz-hint-text');\n\n let textRightEl: HTMLElement;\n if(options.textRight) {\n textRightEl = document.createElement('div');\n textRightEl.classList.add('quiz-hint-text-right');\n textRightEl.append(options.textRight);\n container.classList.add('has-right-text');\n }\n\n container.append(...[\n options.icon && Icon(options.icon, 'quiz-hint-icon'),\n titleEl,\n textEl,\n textRightEl\n ].filter(Boolean));\n element.append(container);\n\n setInnerHTML(textEl, options.textElement);\n options.appendTo.append(element);\n\n void element.offsetLeft; // reflow\n element.classList.add('active');\n\n const hide = () => {\n hideQuizHint(element, options.onHide, timeout);\n };\n\n prevQuizHint = element;\n prevQuizHintOnHide = options.onHide;\n const timeout = prevQuizHintTimeout = window.setTimeout(hide, options.duration);\n\n if(!isListenerSet) {\n isListenerSet = true;\n appImManager.addEventListener('peer_changed', () => {\n if(prevQuizHint) {\n hideQuizHint(prevQuizHint, prevQuizHintOnHide, prevQuizHintTimeout);\n }\n });\n }\n\n return {hide};\n};\n\nexport default class PollElement extends HTMLElement {\n public static MAX_OFFSET = -46.5;\n public static MAX_LENGTH = 0;\n public svgLines: SVGSVGElement[];\n private numberDivs: HTMLDivElement[];\n private answerDivs: HTMLDivElement[];\n private descDiv: HTMLElement;\n private typeDiv: HTMLElement;\n private avatarsDiv: HTMLElement;\n private viewResults: HTMLElement;\n private votersCountDiv: HTMLDivElement;\n\n // private maxLength: number;\n // private maxLengths: number[];\n private maxPercents: number[];\n\n public isClosed = false;\n private isQuiz = false;\n private isRetracted = false;\n private isPublic = false;\n private isMultiple = false;\n private chosenIndexes: number[] = [];\n private percents: number[];\n\n public message: Message.message;\n public managers: AppManagers;\n\n public middlewareHelper: MiddlewareHelper;\n public translatableParams: Parameters[0];\n public richTextOptions: Parameters[1];\n\n private quizInterval: number;\n private quizTimer: SVGSVGElement;\n\n private sendVoteBtn: HTMLElement;\n private chosingIndexes: number[] = [];\n\n private sendVotePromise: Promise;\n private sentVote = false;\n\n private detachClickEvent: () => void;\n\n public static setMaxLength() {\n const width = windowSize.width <= 360 ? windowSize.width - 120 : mediaSizes.active.poll.width;\n this.MAX_LENGTH = width + tailLength + this.MAX_OFFSET + -13.7; // 13 - position left\n }\n\n public static resizePolls() {\n if(!this.MAX_LENGTH) return;\n const pollElements = Array.from(document.querySelectorAll('poll-element.is-voted')) as PollElement[];\n pollElements.forEach((pollElement) => {\n pollElement.svgLines.forEach((svg, idx) => {\n // void svg.getBoundingClientRect(); // reflow\n pollElement.setLineProgress(idx, 1);\n });\n });\n }\n\n public async render() {\n // браузер вызывает этот метод при добавлении элемента в документ\n // (может вызываться много раз, если элемент многократно добавляется/удаляется)\n\n if(!lineTotalLength) {\n lineTotalLength = (document.getElementById('poll-line') as any as SVGPathElement).getTotalLength();\n // console.log('line total length:', lineTotalLength);\n PollElement.setMaxLength();\n }\n\n // const {poll, results} = this.managers.appPollsManager.getPoll(pollId);\n const {poll, results} = this.message.media as MessageMedia.messageMediaPoll;\n\n /* const timestamp = Date.now() / 1000 | 0;\n if(timestamp < this.message.date) { */\n if(this.message.pFlags.is_scheduled) {\n this.classList.add('disable-hover');\n }\n\n // console.log('pollElement poll:', poll, results);\n\n let descKey: LangPackKey;\n if(poll.pFlags) {\n this.isPublic = !!poll.pFlags.public_voters;\n this.isQuiz = !!poll.pFlags.quiz;\n this.isClosed = !!poll.pFlags.closed;\n this.isMultiple = !!poll.pFlags.multiple_choice;\n\n if(this.isClosed) {\n descKey = 'Chat.Poll.Type.Closed';\n this.classList.add('is-closed');\n } else if(this.isQuiz) {\n descKey = this.isPublic ? 'Chat.Poll.Type.Quiz' : 'Chat.Poll.Type.AnonymousQuiz';\n } else {\n descKey = this.isPublic ? 'Chat.Poll.Type.Public' : 'Chat.Poll.Type.Anonymous';\n }\n }\n\n this.classList.toggle('is-multiple', this.isMultiple);\n\n const votes = poll.answers.map((answer, idx) => {\n const html = `\n
\n
\n
\n \n \n \n
\n
\n
\n \n \n \n
\n `;\n const fragment = htmlToDocumentFragment(html);\n if(this.isMultiple) {\n const span = document.createElement('span');\n span.classList.add('poll-answer-selected');\n span.append(Icon('check'));\n fragment.firstElementChild.firstElementChild.append(span);\n }\n\n const span = document.createElement('span');\n span.classList.add('poll-answer-selected');\n fragment.firstElementChild.append(span);\n return fragment;\n });\n\n this.innerHTML = `\n
\n
\n
\n
\n
\n `;\n\n this.append(...votes);\n\n setInnerHTML(this.firstElementChild, this.wrapSomeText(poll.question));\n\n Array.from(this.querySelectorAll('.poll-answer-text')).forEach((el, idx) => {\n const element = this.wrapSomeText(poll.answers[idx].text);\n setInnerHTML(el, element);\n });\n\n this.descDiv = this.firstElementChild.nextElementSibling as HTMLElement;\n this.typeDiv = this.descDiv.firstElementChild as HTMLElement;\n this.avatarsDiv = this.descDiv.lastElementChild as HTMLElement;\n\n if(descKey) {\n this.typeDiv.append(i18n(descKey));\n }\n\n if(this.isQuiz) {\n this.classList.add('is-quiz');\n\n if(poll.close_period && poll.close_date) {\n const timeLeftDiv = document.createElement('div');\n timeLeftDiv.classList.add('poll-time');\n this.descDiv.append(timeLeftDiv);\n\n const svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n // svg.setAttributeNS(null, 'viewBox', '0 0 15 15');\n svg.classList.add('poll-quiz-timer');\n\n this.quizTimer = svg;\n\n const strokeWidth = 2;\n const radius = 7;\n const circumference = 2 * Math.PI * radius;\n\n const circle = document.createElementNS('http://www.w3.org/2000/svg', 'circle');\n circle.classList.add('poll-quiz-timer-circle');\n circle.setAttributeNS(null, 'cx', '16');\n circle.setAttributeNS(null, 'cy', '16');\n circle.setAttributeNS(null, 'r', '' + radius);\n circle.setAttributeNS(null, 'stroke-width', '' + strokeWidth);\n\n svg.append(circle);\n this.descDiv.append(svg);\n\n const period = poll.close_period * 1000;\n const closeTime = (poll.close_date - await rootScope.managers.timeManager.getServerTimeOffset()) * 1000;\n\n // console.log('closeTime:', poll.close_date, serverTimeManager.serverTimeOffset, Date.now() / 1000 | 0);\n\n // let time = Date.now();\n // let percents = (closeTime - time) / period;\n\n // timeLeftDiv.innerHTML = String((closeTime - time) / 1000 + 1 | 0).toHHMMSS();\n\n // // @ts-ignore\n // circle.style.strokeDashoffset = circumference + percents * circumference;\n // circle.style.strokeDasharray = ${circumference} ${circumference};\n\n this.quizInterval = window.setInterval(() => {\n const time = Date.now();\n const percents = (closeTime - time) / period;\n const timeLeft = (closeTime - time) / 1000 + 1 | 0;\n timeLeftDiv.textContent = toHHMMSS(timeLeft);\n\n if(timeLeft <= 5) {\n timeLeftDiv.style.color = '#ee545c';\n circle.style.stroke = '#ee545c';\n }\n // timeLeftDiv.style.visibility = 'visible';\n\n // @ts-ignore\n circle.style.strokeDashoffset = circumference + percents * circumference;\n circle.style.strokeDasharray = `${circumference} ${circumference}`;\n\n if(time >= closeTime) {\n clearInterval(this.quizInterval);\n timeLeftDiv.replaceChildren();\n // @ts-ignore\n circle.style.strokeDashoffset = circumference;\n this.quizInterval = 0;\n\n setTimeout(() => {\n // нужно запросить апдейт чтобы опрос обновился\n this.managers.appPollsManager.getResults(this.message);\n }, 3e3);\n }\n }, 1e3);\n }\n }\n\n this.answerDivs = Array.from(this.querySelectorAll('.poll-answer')) as HTMLDivElement[];\n this.svgLines = Array.from(this.querySelectorAll('.poll-line')) as SVGSVGElement[];\n this.numberDivs = Array.from(this.querySelectorAll('.poll-answer-percents')) as HTMLDivElement[];\n\n const footerDiv = document.createElement('div');\n footerDiv.classList.add('poll-footer');\n\n this.viewResults = document.createElement('div');\n this.viewResults.className = 'poll-footer-button poll-view-results hide';\n this.viewResults.append(i18n('Chat.Poll.ViewResults'));\n\n this.votersCountDiv = document.createElement('div');\n this.votersCountDiv.className = 'poll-votes-count';\n\n footerDiv.append(this.viewResults, this.votersCountDiv);\n this.append(footerDiv);\n\n this.viewResults.addEventListener('click', (e) => {\n cancelEvent(e);\n\n if(!appSidebarRight.isTabExists(AppPollResultsTab)) {\n appSidebarRight.createTab(AppPollResultsTab).open(this.message);\n }\n });\n ripple(this.viewResults);\n\n if(this.isMultiple) {\n this.sendVoteBtn = document.createElement('div');\n this.sendVoteBtn.classList.add('poll-footer-button', 'poll-send-vote');\n this.sendVoteBtn.append(i18n('Chat.Poll.SubmitVote'));\n ripple(this.sendVoteBtn);\n\n if(!poll.chosenIndexes.length) {\n this.votersCountDiv.classList.add('hide');\n }\n\n attachClickEvent(this.sendVoteBtn, (e) => {\n cancelEvent(e);\n /* const indexes = this.answerDivs.filter((el) => el.classList.contains('is-chosing')).map((el) => +el.dataset.index);\n if(indexes.length) {\n\n } */\n if(this.chosingIndexes.length) {\n this.sendVotes(this.chosingIndexes).then(() => {\n this.chosingIndexes.length = 0;\n this.answerDivs.forEach((el) => {\n el.classList.remove('is-chosing');\n });\n });\n }\n });\n\n footerDiv.append(this.sendVoteBtn);\n }\n\n // const width = this.getBoundingClientRect().width;\n // const width = mediaSizes.active.poll.width;\n // this.maxLength = width + tailLength + this.maxOffset + -13.7; // 13 - position left\n\n const canVote = !(poll.chosenIndexes.length || this.isClosed);\n if(!canVote || this.isPublic) {\n this.performResults(results, poll.chosenIndexes, false);\n }\n\n if(canVote) {\n this.setVotersCount(results);\n this.detachClickEvent = attachClickEvent(this, this.clickHandler);\n }\n }\n\n wrapSomeText(text: string | TextWithEntities, entities?: MessageEntity[], middleware = this.middlewareHelper.get()) {\n if(typeof(text) !== 'string') {\n entities = text.entities;\n text = text.text;\n }\n\n if(!this.translatableParams) {\n return wrapRichText(text, {\n ...this.richTextOptions,\n entities\n });\n }\n\n return TranslatableMessage({\n ...this.translatableParams,\n middleware,\n textWithEntities: {\n _: 'textWithEntities',\n text,\n entities\n }\n });\n }\n\n initQuizHint(results: PollResults) {\n if(results.solution && results.solution_entities) {\n const toggleHint = document.createElement('div');\n toggleHint.classList.add('poll-hint');\n toggleHint.append(Icon('tip'));\n this.descDiv.append(toggleHint);\n\n // let active = false;\n attachClickEvent(toggleHint, (e) => {\n cancelEvent(e);\n\n // active = true;\n toggleHint.classList.add('active');\n const middleware = getMiddleware();\n setQuizHint({\n textElement: this.wrapSomeText(results.solution, results.solution_entities, middleware.get()),\n appendTo: appImManager.chat.bubbles.container,\n from: 'top',\n duration: IS_TOUCH_SUPPORTED ? 5000 : 7000,\n icon: 'info2',\n onHide: () => {\n // active = false;\n middleware.destroy();\n toggleHint.classList.remove('active');\n }\n });\n });\n\n if(this.sentVote) {\n const correctResult = results.results.find((r) => r.pFlags.correct);\n if(correctResult && !correctResult.pFlags.chosen) {\n simulateClickEvent(toggleHint);\n }\n }\n }\n }\n\n clickHandler = (e: Event) => {\n const target = findUpClassName(e.target, 'poll-answer') as HTMLElement;\n if(!target) {\n return;\n }\n\n cancelEvent(e);\n const answerIndex = +target.dataset.index;\n if(this.isMultiple) {\n target.classList.toggle('is-chosing');\n\n const foundIndex = this.chosingIndexes.indexOf(answerIndex);\n if(foundIndex !== -1) {\n this.chosingIndexes.splice(foundIndex, 1);\n } else {\n this.chosingIndexes.push(answerIndex);\n }\n } else {\n this.sendVotes([answerIndex]);\n }\n\n /* target.classList.add('is-voting');\n setTimeout(() => { // simulate\n this.setResults([100, 0], answerIndex);\n target.classList.remove('is-voting');\n }, 1000); */\n };\n\n sendVotes(indexes: number[]) {\n if(this.sendVotePromise) return this.sendVotePromise;\n\n const targets = this.answerDivs.filter((_, idx) => indexes.includes(idx));\n targets.forEach((target) => {\n target.classList.add('is-voting');\n });\n\n this.classList.add('disable-hover');\n this.sentVote = true;\n return this.sendVotePromise = this.managers.appPollsManager.sendVote(this.message, indexes).then(() => {\n targets.forEach((target) => {\n target.classList.remove('is-voting');\n });\n\n this.classList.remove('disable-hover');\n }).catch(() => {\n this.sentVote = false;\n }).finally(() => {\n this.sendVotePromise = null;\n });\n }\n\n performResults(results: PollResults, chosenIndexes: number[], animate = true) {\n if(!liteMode.isAvailable('animations')) {\n animate = false;\n }\n\n if(this.isQuiz && (results.results?.length || this.isClosed)) {\n this.answerDivs.forEach((el, idx) => {\n const result = results.results[idx];\n const isCorrect = !!result.pFlags.correct;\n el.classList.toggle('is-correct', isCorrect);\n });\n\n if(this.initQuizHint) {\n this.initQuizHint(results);\n this.initQuizHint = null;\n }\n\n if(this.quizInterval) {\n clearInterval(this.quizInterval);\n this.quizInterval = 0;\n }\n\n if(this.quizTimer?.parentElement) {\n this.quizTimer.remove();\n }\n\n const timeEl = this.descDiv.querySelector('.poll-time');\n timeEl?.remove();\n }\n\n if(this.isClosed) {\n this.classList.add('is-closed');\n replaceContent(this.typeDiv, i18n('Chat.Poll.Type.Closed'));\n }\n\n // set chosen\n if(this.chosenIndexes.length !== chosenIndexes.length || this.isClosed) { // if we voted\n this.isRetracted = this.chosenIndexes.length && !chosenIndexes.length;\n this.chosenIndexes = chosenIndexes.slice();\n\n if(this.isRetracted) {\n this.detachClickEvent = attachClickEvent(this, this.clickHandler);\n } else {\n this.detachClickEvent?.();\n this.detachClickEvent = undefined;\n }\n }\n\n // is need update\n if(this.chosenIndexes.length || this.isRetracted || this.isClosed) {\n const percents = results.results.map((v) => results.total_voters ? v.voters / results.total_voters * 100 : 0);\n\n this.classList.toggle('no-transition', !animate);\n if(animate) {\n SetTransition({\n element: this,\n className: '',\n forwards: !this.isRetracted,\n duration: 340\n });\n }\n\n fastRaf(() => {\n this.setResults(this.isRetracted ? this.percents : percents, this.chosenIndexes, animate);\n this.percents = percents;\n this.isRetracted = false;\n });\n }\n\n this.setVotersCount(results);\n\n if(this.isPublic) {\n if(!this.isMultiple) {\n this.viewResults.classList.toggle('hide', !results.total_voters || !this.chosenIndexes.length);\n this.votersCountDiv.classList.toggle('hide', !!this.chosenIndexes.length);\n }\n\n const peerIds = (results.recent_voters || []).map((peer) => getPeerId(peer));\n const stackedAvatars = new StackedAvatars({avatarSize: 16, middleware: this.middlewareHelper.get()});\n stackedAvatars.render(peerIds);\n replaceContent(this.avatarsDiv, stackedAvatars.container);\n }\n\n if(this.isMultiple) {\n const isVoted = !!this.chosenIndexes.length;\n\n const hideSendVoteBtn = this.isClosed || isVoted;\n const hideViewResultsBtn = !this.isPublic || !results.total_voters || (!isVoted && !this.isClosed);\n this.sendVoteBtn.classList.toggle('hide', hideSendVoteBtn);\n this.viewResults.classList.toggle('hide', hideViewResultsBtn);\n this.votersCountDiv.classList.toggle('hide', !hideSendVoteBtn || !hideViewResultsBtn);\n }\n }\n\n setResults(percents: number[], chosenIndexes: number[], animate: boolean) {\n this.svgLines.forEach((svg) => svg.style.display = '');\n\n this.answerDivs.forEach((el, idx) => {\n const isChosen = chosenIndexes.includes(idx);\n el.classList.toggle('is-chosen', isChosen);\n\n const span = el.lastElementChild as HTMLElement;\n let icon: HTMLElement;\n if(el.classList.contains('is-correct') || (!this.isQuiz && isChosen)) {\n icon = Icon('check');\n } else if(isChosen) {\n icon = Icon('close');\n }\n\n span.replaceChildren(icon);\n });\n\n const maxValue = Math.max(...percents);\n // this.maxLengths = percents.map((p) => p / maxValue * this.maxLength);\n this.maxPercents = percents.map((p) => p / maxValue);\n\n // line\n if(this.isRetracted) {\n this.svgLines.forEach((svg, idx) => {\n this.setLineProgress(idx, -1);\n });\n } else {\n const cb = () => {\n this.svgLines.forEach((svg, idx) => {\n // void svg.getBoundingClientRect(); // reflow\n this.setLineProgress(idx, 1);\n });\n };\n\n animate ? fastRaf(cb) : cb();\n }\n\n percents = percents.slice();\n roundPercents(percents);\n let getPercentValue: (percents: number, index: number) => number;\n const iterate = (i: number) => {\n percents.forEach((percents, idx) => {\n const value = getPercentValue(percents, i);\n this.numberDivs[idx].innerText = value + '%';\n });\n };\n // numbers\n if(this.isRetracted) {\n getPercentValue = (percents, index) => Math.round(percents / times * index);\n\n if(animate) {\n for(let i = (times - 1), k = 0; i >= 0; --i, ++k) {\n setTimeout(() => {\n iterate(i);\n }, oneTime * k);\n }\n } else {\n iterate(0);\n }\n } else {\n getPercentValue = (percents, index) => Math.round(percents / times * (index + 1));\n\n if(animate) {\n for(let i = 0; i < times; ++i) {\n setTimeout(() => {\n iterate(i);\n }, oneTime * i);\n }\n } else {\n iterate(times - 1);\n }\n }\n\n if(this.isRetracted) {\n if(animate) {\n this.classList.add('is-retracting');\n }\n\n this.classList.remove('is-voted');\n const cb = () => {\n this.svgLines.forEach((svg) => svg.style.display = 'none');\n };\n\n if(animate) {\n setTimeout(() => {\n this.classList.remove('is-retracting');\n cb();\n }, fullTime);\n } else {\n cb();\n }\n } else {\n this.classList.add('is-voted');\n }\n }\n\n setVotersCount(results: PollResults) {\n const votersCount = results.total_voters || 0;\n let key: LangPackKey;\n const args: FormatterArguments = [votersCount];\n if(this.isClosed) {\n if(this.isQuiz) key = votersCount ? 'Chat.Quiz.TotalVotes' : 'Chat.Quiz.TotalVotesResultEmpty';\n else key = votersCount ? 'Chat.Poll.TotalVotes1' : 'Chat.Poll.TotalVotesResultEmpty';\n } else {\n if(this.isQuiz) key = votersCount ? 'Chat.Quiz.TotalVotes' : 'Chat.Quiz.TotalVotesEmpty';\n else key = votersCount ? 'Chat.Poll.TotalVotes1' : 'Chat.Poll.TotalVotesEmpty';\n }\n\n replaceContent(this.votersCountDiv, i18n(key, args));\n }\n\n setLineProgress(index: number, multiplier: number) {\n const svg = this.svgLines[index];\n\n if(multiplier === -1) {\n svg.style.strokeDasharray = '';\n svg.style.strokeDashoffset = '';\n } else {\n // svg.style.strokeDasharray = (multiplier * this.maxLengths[index]) + ', 485.9';\n svg.style.strokeDasharray = (multiplier * this.maxPercents[index] * PollElement.MAX_LENGTH) + ', 485.9';\n // svg.style.strokeDasharray = (multiplier * this.maxPercents[index] * 100) + '%, 485.9';\n svg.style.strokeDashoffset = '' + multiplier * PollElement.MAX_OFFSET;\n }\n }\n\n // у элемента могут быть ещё другие методы и свойства\n}\n\ncustomElements.define('poll-element', PollElement);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function compareLong(str1: string, str2: string) {\n const str1Length = str1.length;\n if(str1Length !== str2.length) {\n const diff = str1Length - str2.length;\n return diff < 0 ? -1 : (diff > 0 ? 1 : 0);\n }\n\n const maxPartLength = 15;\n for(let i = 0; i < str1Length; i += maxPartLength) {\n const v1 = +str1.slice(i, i + maxPartLength);\n const v2 = +str2.slice(i, i + maxPartLength);\n const diff = v1 - v2;\n if(diff) {\n return diff;\n }\n }\n\n return 0;\n}\n","import compareLong from './long/compareLong';\n\nexport default function compareValue(val1: string | number, val2: typeof val1) {\n if((val1 as number).toExponential) {\n const diff = (val1 as number) - (val2 as number);\n return diff < 0 ? -1 : (diff > 0 ? 1 : 0);\n }\n\n return compareLong(val1 as string, val2 as string);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\nimport indexOfAndSplice from './array/indexOfAndSplice';\nimport compareValue from './compareValue';\n\n/**\n * Descend sorted storage\n */\n\ntype ItemType = number | string;\n\nexport enum SliceEnd {\n None = 0,\n Top = 1,\n Bottom = 2,\n Both = SliceEnd.Top | SliceEnd.Bottom\n};\n\nexport interface Slice extends Array {\n // slicedArray: SlicedArray;\n end: SliceEnd;\n\n isEnd: (side: SliceEnd) => boolean;\n setEnd: (side: SliceEnd) => void;\n unsetEnd: (side: SliceEnd) => void;\n getEnds: () => {top: boolean, bottom: boolean, both: boolean};\n\n slice: (from?: number, to?: number) => Slice;\n splice: (start: number, deleteCount: number, ...items: ItemType[]) => Slice;\n}\n\nexport interface SliceConstructor {\n // new(...items: T[]): Slice;\n new(length: number): Slice;\n}\n\nexport type SliceSerialized = {\n values: Slice,\n isEnd: {\n top: boolean,\n bottom: boolean,\n both: boolean\n }\n};\n\nexport type SlicedArraySerialized = {\n slices: SliceSerialized[]\n};\n\nexport default class SlicedArray {\n public slices: Slice[]/* = [[7,6,5],[4,3,2],[1,0,-1]] */;\n private sliceConstructor: SliceConstructor;\n public compareValue: (a: T, b: T) => number;\n\n constructor() {\n // @ts-ignore\n this.sliceConstructor = SlicedArray.getSliceConstructor(this);\n this.compareValue ??= compareValue;\n\n const first = this.constructSlice();\n // first.setEnd(SliceEnd.Bottom);\n this.slices = [first];\n }\n\n private static getSliceConstructor(slicedArray: SlicedArray) {\n return class Slice extends Array implements Slice {\n // slicedArray: SlicedArray;\n end: SliceEnd = SliceEnd.None;\n\n /* constructor(...items: ItemType[]) {\n super(...items);\n //this.slicedArray = slicedArray;\n } */\n\n isEnd(side: SliceEnd): boolean {\n if((this.end & side) === side) {\n return true;\n }/* else if(!this.slicedArray) {\n return false;\n } */\n\n let isEnd = false;\n if(side === SliceEnd.Top) {\n const slice = slicedArray.last;\n isEnd = slice.end & side ? this.includes(slice[slice.length - 1])/* || !slice.length */ : false;\n } else if(side === SliceEnd.Bottom) {\n const slice = slicedArray.first;\n isEnd = slice.end & side ? this.includes(slice[0])/* || !slice.length */ : false;\n } else if(side === SliceEnd.Both) {\n return this.isEnd(SliceEnd.Top) && this.isEnd(SliceEnd.Bottom);\n }\n\n if(isEnd) {\n this.setEnd(side);\n }\n\n return isEnd;\n }\n\n getEnds() {\n return {\n top: this.isEnd(SliceEnd.Top),\n bottom: this.isEnd(SliceEnd.Bottom),\n both: this.isEnd(SliceEnd.Both)\n };\n }\n\n setEnd(side: SliceEnd) {\n this.end |= side;\n }\n\n unsetEnd(side: SliceEnd) {\n this.end &= ~side;\n }\n\n splice(start: number, deleteCount: number, ...items: ItemType[]) {\n const ret = super.splice(start, deleteCount, ...items);\n\n if(!this.length) {\n const slices = slicedArray.slices as ItemType[][];\n const idx = slices.indexOf(this);\n if(idx !== -1) {\n if(slices.length === 1) { // left empty slice without ends\n this.unsetEnd(SliceEnd.Both);\n } else { // delete this slice\n slices.splice(idx, 1);\n }\n }\n }\n\n return ret;\n }\n }\n }\n\n public constructSlice(...items: T[]) {\n // const slice = new Slice(this, ...items);\n // can't pass items directly to constructor because first argument is length\n const slice = new this.sliceConstructor(items.length);\n for(let i = 0, length = items.length; i < length; ++i) {\n slice[i] = items[i];\n }\n return slice;\n\n // ! code below will slow execution in 15 times\n /* const self = this;\n const p: Slice = new Proxy(slice, {\n get: function(target, name: any) {\n if(name === 'constructor') {\n const p = new Proxy(Slice, {\n construct: (target, args) => {\n return self.constructSlice(...args);\n }\n });\n\n return p;\n }\n\n return target[name];\n }\n });\n\n return p; */\n\n /*\n var p = slicedArray.constructSlice();\n p.length = 100000;\n p.fill(255);\n\n var a = new Array(100000);\n a.fill(255);\n\n var b = 0;\n var perf = performance.now();\n for(var i = 0; i < p.length; ++i) {\n b += p[i];\n }\n\n console.log('perf 1', performance.now() - perf);\n\n b = 0;\n perf = performance.now();\n for(var i = 0; i < a.length; ++i) {\n b += a[i];\n }\n\n console.log('perf 2', performance.now() - perf);\n */\n }\n\n public insertSlice(slice: T[], flatten = true) {\n if(!slice.length) {\n return;\n }\n\n const first = this.slices[0];\n if(!first.length) {\n first.push(...slice);\n return first;\n }\n\n const lowerBound = slice[slice.length - 1];\n const upperBound = slice[0];\n\n let foundSlice: Slice, lowerIndex = -1, upperIndex = -1, foundSliceIndex = 0;\n for(; foundSliceIndex < this.slices.length; ++foundSliceIndex) {\n foundSlice = this.slices[foundSliceIndex];\n lowerIndex = foundSlice.indexOf(lowerBound);\n upperIndex = foundSlice.indexOf(upperBound);\n\n if(upperIndex !== -1 && -1 !== lowerIndex) {\n break;\n } else if(upperIndex !== -1 || -1 !== lowerIndex) {\n break;\n }\n }\n\n if(upperIndex !== -1 && -1 !== lowerIndex) {\n\n } else if(upperIndex !== -1) { // ([1, 2, 3] | [1, 2, 3, 4, 5]) -> [1, 2, 3, 4, 5]\n const sliced = slice.slice(foundSlice.length - upperIndex);\n foundSlice.push(...sliced);\n } else if(lowerIndex !== -1) { // ([1, 2, 3] | [-1, 0, 1]) -> [-1, 0, 1, 2, 3]\n const sliced = slice.slice(0, slice.length - lowerIndex - 1);\n foundSlice.unshift(...sliced);\n } else {\n let insertIndex = 0;\n for(const length = this.slices.length; insertIndex < length; ++insertIndex) { // * maybe should iterate from the end, could be faster ?\n const s = this.slices[insertIndex];\n if(this.compareValue(slice[0], s[0]) === 1) {\n break;\n }\n }\n\n this.slices.splice(insertIndex, 0, this.constructSlice(...slice));\n foundSliceIndex = insertIndex;\n }\n\n if(flatten) {\n return this.flatten(foundSliceIndex);\n }\n }\n\n private flatten(foundSliceIndex: number) {\n if(this.slices.length >= 2) {\n for(let i = 0, length = this.slices.length; i < (length - 1); ++i) {\n const prevSlice = this.slices[i];\n const nextSlice = this.slices[i + 1];\n\n const upperIndex = prevSlice.indexOf(nextSlice[0]);\n if(upperIndex !== -1) {\n prevSlice.setEnd(nextSlice.end);\n this.slices.splice(i + 1, 1);\n\n if(i < foundSliceIndex) {\n --foundSliceIndex;\n }\n\n --length; // respect array bounds\n --i; // repeat from the same place\n\n this.insertSlice(nextSlice, false);\n }\n }\n }\n\n return this.slices[foundSliceIndex];\n }\n\n // *\n\n get first() {\n return this.slices[0];\n }\n\n get last() {\n return this.slices[this.slices.length - 1];\n }\n\n get slice() {\n return this.first;\n }\n\n get length() {\n return this.slice.length;\n }\n\n public findSlice(item: T) {\n for(let i = 0, length = this.slices.length; i < length; ++i) {\n const slice = this.slices[i];\n const index = slice.indexOf(item);\n if(index !== -1) {\n return {slice, index};\n }\n }\n\n return undefined;\n }\n\n // * offset will be exclusive, so if offsetId is in slice, then offset will be +1\n public findOffsetInSlice(offsetId: T, slice: Slice) {\n for(let offset = 0; offset < slice.length; ++offset) {\n if(this.compareValue(offsetId, slice[offset]) >= 0) {\n /* if(!offset) { // because can't find 3 in [[5,4], [2,1]]\n return undefined;\n } */\n\n return {\n slice,\n offset: offsetId === slice[offset] ? offset + 1 : offset\n };\n }\n }\n }\n\n public findSliceOffset(maxId: T): ReturnType['findOffsetInSlice']> & {sliceIndex: number} {\n let slice: Slice;\n for(let i = 0; i < this.slices.length; ++i) {\n slice = this.slices[i];\n\n const found = this.findOffsetInSlice(maxId, slice);\n if(found) {\n return {\n ...found,\n sliceIndex: i\n };\n }\n }\n\n if(slice?.isEnd(SliceEnd.Top)) {\n return {\n slice,\n offset: slice.length,\n sliceIndex: this.slices.length - 1\n };\n }\n }\n\n // * https://core.telegram.org/api/offsets\n public sliceMe(offsetId: T, addOffset: number, limit: number) {\n let slice = this.slice;\n let offset = 0;\n let sliceOffset = 0;\n\n if(offsetId) {\n const pos = this.findSliceOffset(offsetId);\n if(!pos) {\n return;\n }\n\n slice = pos.slice;\n offset = sliceOffset = pos.offset;\n\n // if(slice.includes(offsetId)) {\n // sliceOffset += 1;\n // }\n\n /* if(slice.includes(offsetId) && add_offset < 0) {\n add_offset += 1;\n } */\n } else if(!slice.isEnd(SliceEnd.Bottom)) {\n return;\n }\n\n const sliceStart = Math.max(sliceOffset + addOffset, 0);\n const sliceEnd = sliceOffset + addOffset + limit;\n // const fixHalfBackLimit = add_offset && !(limit / add_offset % 2) && (sliceEnd % 2) ? 1 : 0;\n // sliceEnd += fixHalfBackLimit;\n\n const sliced = slice.slice(sliceStart, sliceEnd) as Slice;\n\n const topWasMeantToLoad = addOffset < 0 ? limit + addOffset : limit;\n const bottomWasMeantToLoad = Math.abs(addOffset);\n\n // can use 'slice' here to check because if it's end, then 'sliced' is out of 'slice'\n // useful when there is only 1 message in chat on its reopening\n const topFulfilled = (slice.length - sliceOffset) >= topWasMeantToLoad || (slice.isEnd(SliceEnd.Top) ? (sliced.setEnd(SliceEnd.Top), true) : false);\n const bottomFulfilled = (sliceOffset - bottomWasMeantToLoad) >= 0 || (slice.isEnd(SliceEnd.Bottom) ? (sliced.setEnd(SliceEnd.Bottom), true) : false);\n\n // if(topFulfilled) sliced.isEnd(SliceEnd.Top);\n // if(bottomFulfilled) sliced.isEnd(SliceEnd.Bottom);\n\n return {\n slice: sliced,\n offsetIdOffset: offset,\n fulfilled: SliceEnd.None | (topFulfilled && bottomFulfilled ? SliceEnd.Both : ((topFulfilled ? SliceEnd.Top : SliceEnd.None) | (bottomFulfilled ? SliceEnd.Bottom : SliceEnd.None)))\n };\n }\n\n public unshift(...items: T[]) {\n let slice = this.first;\n if(!slice.length) {\n slice.setEnd(SliceEnd.Bottom);\n } else if(!slice.isEnd(SliceEnd.Bottom)) {\n slice = this.constructSlice();\n slice.setEnd(SliceEnd.Bottom);\n this.slices.unshift(slice);\n }\n\n slice.unshift(...items);\n }\n\n public push(...items: T[]) {\n let slice = this.last;\n if(!slice.length) {\n slice.setEnd(SliceEnd.Top);\n } else if(!slice.isEnd(SliceEnd.Top)) {\n slice = this.constructSlice();\n slice.setEnd(SliceEnd.Top);\n this.slices.push(slice);\n }\n\n slice.push(...items);\n }\n\n public delete(item: T) {\n const found = this.findSlice(item);\n if(found) {\n found.slice.splice(found.index, 1);\n return true;\n }\n\n return false;\n }\n\n public deleteSlice(slice: Slice) {\n indexOfAndSplice(this.slices, slice);\n }\n\n public toJSON() {\n const slices: SlicedArraySerialized['slices'] = this.slices.map((slice) => {\n return {\n values: slice.slice(),\n isEnd: slice.getEnds()\n };\n });\n\n const serialized: SlicedArraySerialized = {\n slices\n };\n\n return JSON.stringify(serialized);\n }\n\n public static fromJSON(json: string) {\n const parsed: SlicedArraySerialized = JSON.parse(json);\n const sliced = new SlicedArray();\n parsed.slices.forEach((slice) => {\n const inserted = sliced.insertSlice(slice.values) || sliced.first;\n if(slice.isEnd.top) inserted.setEnd(SliceEnd.Top);\n if(slice.isEnd.bottom) inserted.setEnd(SliceEnd.Bottom);\n });\n\n return sliced;\n }\n}\n\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.SlicedArray = SlicedArray);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function reflowScrollableElement(element: HTMLElement) {\n element.style.display = 'none';\n void element.offsetLeft; // reflow\n element.style.display = '';\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport SwipeHandler, {SwipeHandlerOptions} from '../../components/swipeHandler';\nimport cancelEvent from './cancelEvent';\nimport findUpClassName from './findUpClassName';\nimport isSwipingBackSafari from './isSwipingBackSafari';\n\nexport type SwipeHandlerHorizontalOptions = SwipeHandlerOptions & {\n // xThreshold?: number\n};\n\nexport default function handleHorizontalSwipe(options: SwipeHandlerHorizontalOptions) {\n let cancelY = false, hadMove = false;\n return new SwipeHandler({\n ...options,\n verifyTouchTarget: (e) => {\n return !findUpClassName(e.target, 'progress-line') &&\n !isSwipingBackSafari(e as any as TouchEvent) &&\n (options.verifyTouchTarget ? options.verifyTouchTarget(e) : true);\n },\n onSwipe: (xDiff, yDiff, e) => {\n xDiff *= -1;\n yDiff *= -1;\n\n if(!cancelY && Math.abs(yDiff) > 20) {\n return true;\n }\n\n if(Math.abs(xDiff) > Math.abs(yDiff)) {\n cancelEvent(e as any as Event);\n cancelY = true;\n } else if(!cancelY && Math.abs(yDiff) > Math.abs(xDiff)/* || Math.abs(yDiff) > 20 */) {\n return true;\n }\n\n /* if(!cancelY && options.xThreshold !== undefined && xDiff >= options.xThreshold) {\n cancelY = true;\n } */\n\n hadMove = true;\n return options.onSwipe(xDiff, yDiff, e);\n },\n onReset: () => {\n if(hadMove) options.onReset?.();\n cancelY = hadMove = false;\n },\n cancelEvent: false // cannot use cancelEvent on Safari iOS because scroll will be canceled too\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ChatSetPeerOptions} from './appImManager';\n\nexport enum INTERNAL_LINK_TYPE {\n MESSAGE,\n PRIVATE_POST,\n STICKER_SET,\n JOIN_CHAT,\n VOICE_CHAT,\n USER_PHONE_NUMBER,\n INVOICE,\n EMOJI_SET,\n ATTACH_MENU_BOT,\n WEB_APP,\n ADD_LIST,\n STORY,\n BOOST,\n PREMIUM_FEATURES,\n GIFT_CODE,\n BUSINESS_CHAT,\n STARS_TOPUP\n};\n\nexport type InternalLink =\n InternalLink.InternalLinkMessage |\n InternalLink.InternalLinkPrivatePost |\n InternalLink.InternalLinkStickerSet |\n InternalLink.InternalLinkJoinChat |\n InternalLink.InternalLinkVoiceChat |\n InternalLink.InternalLinkUserPhoneNumber |\n InternalLink.InternalLinkInvoice |\n InternalLink.InternalLinkEmojiSet |\n InternalLink.InternalLinkAttachMenuBot |\n InternalLink.InternalLinkWebApp |\n InternalLink.InternalLinkAddList |\n InternalLink.InternalLinkStory |\n InternalLink.InternalLinkBoost |\n InternalLink.InternalLinkPremiumFeatures |\n InternalLink.InternalLinkGiftCode |\n InternalLink.InternalLinkBusinessChat |\n InternalLink.InternalLinkStarsTopup;\n\nexport namespace InternalLink {\n export interface InternalLinkMessage {\n _: INTERNAL_LINK_TYPE.MESSAGE,\n domain: string,\n post?: string,\n comment?: string,\n thread?: string,\n start?: string,\n t?: string, // media timestamp\n single?: string,\n text?: string,\n stack?: ChatSetPeerOptions['stack'] // local\n }\n\n export interface InternalLinkPrivatePost {\n _: INTERNAL_LINK_TYPE.PRIVATE_POST,\n channel: string,\n post: string,\n thread?: string,\n comment?: string,\n t?: string // media timestamp\n stack?: ChatSetPeerOptions['stack'] // local\n }\n\n export interface InternalLinkStickerSet {\n _: INTERNAL_LINK_TYPE.STICKER_SET,\n set: string\n }\n\n export interface InternalLinkJoinChat {\n _: INTERNAL_LINK_TYPE.JOIN_CHAT,\n invite: string\n }\n\n export interface InternalLinkVoiceChat {\n _: INTERNAL_LINK_TYPE.VOICE_CHAT,\n id?: string,\n access_hash?: string,\n chat_id?: string,\n domain?: string,\n livestream?: string,\n videochat?: string,\n voicechat?: string\n }\n\n export interface InternalLinkUserPhoneNumber {\n _: INTERNAL_LINK_TYPE.USER_PHONE_NUMBER,\n phone: string,\n text?: string\n }\n\n export interface InternalLinkInvoice {\n _: INTERNAL_LINK_TYPE.INVOICE,\n slug: string\n }\n\n export interface InternalLinkEmojiSet {\n _: INTERNAL_LINK_TYPE.EMOJI_SET,\n set: string\n }\n\n export interface InternalLinkAttachMenuBot {\n _: INTERNAL_LINK_TYPE.ATTACH_MENU_BOT,\n startattach?: string,\n choose?: TelegramChoosePeerType,\n attach?: string,\n domain?: string,\n nestedLink?: InternalLink\n }\n\n export interface InternalLinkWebApp {\n _: INTERNAL_LINK_TYPE.WEB_APP,\n domain: string,\n appname: string,\n startapp?: string,\n masked?: boolean,\n mode?: 'compact'\n }\n\n export interface InternalLinkAddList {\n _: INTERNAL_LINK_TYPE.ADD_LIST,\n slug: string\n }\n\n export interface InternalLinkStory {\n _: INTERNAL_LINK_TYPE.STORY,\n domain: string,\n story: string\n }\n\n export interface InternalLinkBoost {\n _: INTERNAL_LINK_TYPE.BOOST,\n domain?: string,\n channel?: string\n }\n\n export interface InternalLinkPremiumFeatures {\n _: INTERNAL_LINK_TYPE.PREMIUM_FEATURES,\n ref?: string\n }\n\n export interface InternalLinkGiftCode {\n _: INTERNAL_LINK_TYPE.GIFT_CODE,\n slug: string,\n stack?: ChatSetPeerOptions['stack'] // local\n }\n\n export interface InternalLinkBusinessChat {\n _: INTERNAL_LINK_TYPE.BUSINESS_CHAT,\n slug: string\n }\n\n export interface InternalLinkStarsTopup {\n _: INTERNAL_LINK_TYPE.STARS_TOPUP,\n balance: string,\n purpose: string\n }\n}\n\nexport type InternalLinkTypeMap = {\n [INTERNAL_LINK_TYPE.MESSAGE]: InternalLink.InternalLinkMessage,\n [INTERNAL_LINK_TYPE.PRIVATE_POST]: InternalLink.InternalLinkPrivatePost,\n [INTERNAL_LINK_TYPE.STICKER_SET]: InternalLink.InternalLinkStickerSet,\n [INTERNAL_LINK_TYPE.JOIN_CHAT]: InternalLink.InternalLinkJoinChat,\n [INTERNAL_LINK_TYPE.VOICE_CHAT]: InternalLink.InternalLinkVoiceChat,\n [INTERNAL_LINK_TYPE.USER_PHONE_NUMBER]: InternalLink.InternalLinkUserPhoneNumber,\n [INTERNAL_LINK_TYPE.INVOICE]: InternalLink.InternalLinkInvoice,\n [INTERNAL_LINK_TYPE.EMOJI_SET]: InternalLink.InternalLinkEmojiSet,\n [INTERNAL_LINK_TYPE.ATTACH_MENU_BOT]: InternalLink.InternalLinkAttachMenuBot,\n [INTERNAL_LINK_TYPE.WEB_APP]: InternalLink.InternalLinkWebApp,\n [INTERNAL_LINK_TYPE.ADD_LIST]: InternalLink.InternalLinkAddList,\n [INTERNAL_LINK_TYPE.STORY]: InternalLink.InternalLinkStory,\n [INTERNAL_LINK_TYPE.BOOST]: InternalLink.InternalLinkBoost,\n [INTERNAL_LINK_TYPE.PREMIUM_FEATURES]: InternalLink.InternalLinkPremiumFeatures,\n [INTERNAL_LINK_TYPE.GIFT_CODE]: InternalLink.InternalLinkGiftCode,\n [INTERNAL_LINK_TYPE.BUSINESS_CHAT]: InternalLink.InternalLinkBusinessChat,\n [INTERNAL_LINK_TYPE.STARS_TOPUP]: InternalLink.InternalLinkStarsTopup\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Awaited} from '../types';\n\nexport default function callbackifyAll(\n values: T,\n callback: (result: { -readonly [P in keyof T]: Awaited }) => R\n): Promise> | R {\n if(values.some((value) => value instanceof Promise)) {\n return Promise.all(values).then(callback as any);\n } else {\n return callback(values as any);\n }\n}\n","import {AvailableReaction, Reaction} from '../../../../layer';\n\nexport default function availableReactionToReaction(availableReaction: AvailableReaction): Reaction.reactionEmoji {\n return {\n _: 'reactionEmoji',\n emoticon: availableReaction.reaction\n };\n}\n","import deepEqual from '../../../../helpers/object/deepEqual';\nimport {AvailableReaction, Reaction} from '../../../../layer';\nimport availableReactionToReaction from './availableReactionToReaction';\n\nexport default function reactionsEqual(r1: Reaction | AvailableReaction, r2: Reaction | AvailableReaction) {\n if(typeof(r1) !== typeof(r2)) {\n return false;\n }\n\n [r1, r2] = [r1, r2].map((r) => {\n return r._ === 'availableReaction' ? availableReactionToReaction(r) : r;\n });\n\n return deepEqual(r1, r2);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport callbackify from '../../helpers/callbackify';\nimport formatNumber from '../../helpers/number/formatNumber';\nimport {AvailableReaction, Document, MessagePeerReaction, Reaction, ReactionCount} from '../../layer';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport rootScope from '../../lib/rootScope';\nimport SetTransition from '../singleTransition';\nimport StackedAvatars from '../stackedAvatars';\nimport {Awaited} from '../../types';\nimport wrapSticker from '../wrappers/sticker';\nimport wrapStickerAnimation from '../wrappers/stickerAnimation';\nimport RLottiePlayer from '../../lib/rlottie/rlottiePlayer';\nimport {fastRaf} from '../../helpers/schedulers';\nimport {Middleware} from '../../helpers/middleware';\nimport liteMode from '../../helpers/liteMode';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport CustomEmojiElement from '../../lib/customEmoji/element';\nimport deferredPromise from '../../helpers/cancellablePromise';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport BezierEasing from '../../vendor/bezierEasing';\nimport safePlay from '../../helpers/dom/safePlay';\nimport lottieLoader from '../../lib/rlottie/lottieLoader';\nimport Scrollable from '../scrollable';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport {savedReactionTags} from './reactions';\nimport reactionsEqual from '../../lib/appManagers/utils/reactions/reactionsEqual';\n\nconst CLASS_NAME = 'reaction';\nconst TAG_NAME = CLASS_NAME + '-element';\n\nexport enum ReactionLayoutType {\n Inline = 'inline',\n Block = 'block',\n Tag = 'tag'\n};\n\nexport const REACTIONS_SIZE: {[key in ReactionLayoutType]: number} = {\n [ReactionLayoutType.Inline]: 14,\n [ReactionLayoutType.Block]: 22,\n [ReactionLayoutType.Tag]: 22\n};\n\nexport const REACTIONS_DISPLAY_COUNTER_AT: {[key in ReactionLayoutType]?: number} = {\n [ReactionLayoutType.Inline]: 2,\n [ReactionLayoutType.Block]: 4\n};\n\nconst defaultBezier = (val: number) => val;\ntype Position = [number, number, number];\ntype EasingFunction = typeof defaultBezier;\ntype Layer = {\n ddd: 0 | 1,\n ind: number,\n ty: number,\n nm: string,\n parent: number,\n refId: string,\n sr: number,\n ks: {\n o: Transformation, // opacity\n p: Transformation, // position\n a: Transformation, // anchor\n s: Transformation, // scale\n },\n ao: number,\n w: number,\n h: number,\n ip: number,\n op: number,\n st: number,\n bm: number\n};\ntype Transformation = {\n a: 1,\n k: Keyframe[]\n} | {\n a: 0,\n k: Position\n};\ntype Keyframe = {\n i?: KeyframeBezier,\n o?: Keyframe['i'],\n t: number,\n s: Position\n};\ntype KeyframeBezier = {\n x: number | Position,\n y: KeyframeBezier['x']\n};\n\nclass TransformationComputator {\n transformation: Transformation;\n keyframes: Keyframe[];\n\n keyframeIndex: number;\n keyframe: Keyframe;\n nextKeyframe: Keyframe;\n beziers: EasingFunction | EasingFunction[];\n\n constructor(transformation: Transformation) {\n this.transformation = transformation;\n this.keyframes = this.transformation.k as Keyframe[];\n\n this.keyframeIndex = 0;\n this.nextKeyframe = this.keyframes[this.keyframeIndex];\n }\n\n private withProgress(point: number) {\n const pointsPlayed = point - this.keyframe.t;\n let pointsProgress = pointsPlayed / (this.nextKeyframe.t - this.keyframe.t);\n\n const isArrayBeziers = Array.isArray(this.beziers);\n if(!isArrayBeziers) {\n pointsProgress = (this.beziers as EasingFunction)(pointsProgress);\n }\n\n return this.keyframe.s.map((value: number, index: number) => {\n return value + (this.nextKeyframe.s[index] - value) * (\n isArrayBeziers ? (this.beziers as EasingFunction[])[index](pointsProgress) : pointsProgress\n );\n }) as Position;\n }\n\n computeAtPoint(point: number) {\n if(!this.nextKeyframe) {\n return;\n }\n\n if(point >= this.nextKeyframe.t) {\n this.keyframe = this.nextKeyframe;\n this.nextKeyframe = this.keyframes[++this.keyframeIndex];\n\n if(this.keyframe.o && this.keyframe.i) {\n if(!Array.isArray(this.keyframe.o.x)) {\n // @ts-ignore\n this.beziers = BezierEasing(this.keyframe.o.x, this.keyframe.o.y, this.keyframe.i.x, this.keyframe.i.y);\n } else if(new Set(this.keyframe.o.x).size === 1) {\n // @ts-ignore\n this.beziers = BezierEasing(this.keyframe.o.x[0], this.keyframe.o.y[0], this.keyframe.i.x[0], this.keyframe.i.y[0]);\n } else {\n this.beziers = this.keyframe.o.x.map((_, index) => {\n // @ts-ignore\n return BezierEasing(this.keyframe.o.x[index], this.keyframe.o.y[index], this.keyframe.i.x[index], this.keyframe.i.y[index]);\n });\n }\n } else {\n this.beziers = defaultBezier;\n }\n\n if(!this.nextKeyframe || point === this.nextKeyframe.t) {\n return this.keyframe.s;\n } else {\n return this.withProgress(point);\n }\n } else if(this.keyframe) {\n return this.withProgress(point);\n } else { // ! test\n return this.nextKeyframe.s;\n }\n }\n}\n\nfunction computeLayerTransformations(layer: Layer) {\n const ks = layer.ks;\n const anchor = ks.a;\n const op = layer.op;\n const layerTransformations: ComputedFrameTransformations[] = new Array(op - 1);\n const opacityComputator = ks.o && new TransformationComputator(ks.o);\n const translationComputator = ks.p && new TransformationComputator(ks.p);\n const scaleComputator = ks.s && new TransformationComputator(ks.s);\n for(let point = 0; point < op; ++point) {\n if(point < layer.ip) {\n continue;\n }\n\n const prevTransformations = layerTransformations[point - 1] || {};\n const transformations: ComputedFrameTransformations = {};\n\n const translation = translationComputator.computeAtPoint(point);\n if(translation) {\n transformations.translation = translation;\n\n if(anchor) {\n transformations.anchor = anchor.k as Position;\n // transformations.anchor = translation.map((value, index) => {\n // return anchor.k[index] as number + value;\n // }) as Position;\n }\n } else {\n transformations.translation = prevTransformations.translation;\n transformations.anchor = prevTransformations.anchor;\n }\n\n const scale = scaleComputator.computeAtPoint(point);\n if(scale) {\n transformations.scale = scale;\n } else {\n transformations.scale = prevTransformations.scale;\n }\n\n const opacity = opacityComputator.computeAtPoint(point);\n if(opacity) {\n transformations.opacity = opacity;\n } else {\n transformations.opacity = prevTransformations.opacity;\n }\n\n if(translation || scale || opacity) {\n layerTransformations[point] = transformations;\n }\n }\n\n return layerTransformations;\n}\n\ntype ComputedFrameTransformations = {\n opacity?: Position,\n translation?: Position,\n anchor?: Position,\n scale?: Position\n};\n\nlet reactionGenericPromise: ReturnType;\nfunction loadReactionGeneric(): Promise<{layersPositions: ComputedFrameTransformations[][], op: number}> {\n if(reactionGenericPromise) {\n return reactionGenericPromise;\n }\n\n const url = lottieLoader.makeAssetUrl('ReactionGeneric');\n const promise = reactionGenericPromise = lottieLoader.loadAnimationDataFromURL(url, 'json').then((animationData) => {\n const placeholderLayers: Layer[] = animationData.layers.filter((layer: any) => layer.nm.startsWith('placeholder_'))/* .slice(0, 1) */;\n const layersPositions: ComputedFrameTransformations[][] = [];\n for(const layer of placeholderLayers) {\n layersPositions.push(computeLayerTransformations(layer));\n }\n\n return {layersPositions, op: animationData.op};\n });\n\n return promise;\n}\n\nexport default class ReactionElement extends HTMLElement {\n private type: ReactionLayoutType;\n private counter: HTMLElement;\n public stickerContainer: HTMLElement;\n private stackedAvatars: StackedAvatars;\n private canRenderAvatars: boolean;\n private _reactionCount: ReactionCount;\n public wrapStickerPromise: Awaited>['render'];\n public managers: AppManagers;\n public middleware: Middleware;\n private customEmojiElement: CustomEmojiElement;\n public hasAroundAnimation: Promise;\n public isUnread: boolean;\n private hasTitle: boolean;\n\n constructor() {\n super();\n this.classList.add(CLASS_NAME);\n this.managers = rootScope.managers;\n }\n\n public get reactionCount() {\n return this._reactionCount;\n }\n\n public set reactionCount(reactionCount: ReactionCount) {\n this._reactionCount = reactionCount;\n }\n\n public get count() {\n return this.reactionCount.count;\n }\n\n public init(type: ReactionLayoutType, middleware: Middleware) {\n this.type = type;\n this.classList.add(CLASS_NAME + '-' + type);\n this.classList.toggle(CLASS_NAME + '-like-block', type === ReactionLayoutType.Block || type === ReactionLayoutType.Tag);\n this.middleware = middleware;\n\n if(type === ReactionLayoutType.Tag) {\n // this.insertAdjacentHTML('beforeend', `\n // \n // \n // \n // \n // `);\n this.insertAdjacentHTML('beforeend', `\n
\n \n \n \n
\n `);\n }\n }\n\n public setCanRenderAvatars(canRenderAvatars: boolean) {\n this.canRenderAvatars = canRenderAvatars;\n }\n\n public render(doNotRenderSticker?: boolean) {\n const hadStickerContainer = !!this.stickerContainer;\n if(!hadStickerContainer) {\n this.stickerContainer = document.createElement('div');\n this.stickerContainer.classList.add(CLASS_NAME + '-sticker');\n this.append(this.stickerContainer);\n } else {\n return this.customEmojiElement;\n }\n\n const reactionCount = this.reactionCount;\n if(doNotRenderSticker || hadStickerContainer) {\n return;\n }\n\n const reaction = reactionCount.reaction;\n if(reaction._ === 'reactionEmoji') {\n const availableReaction = apiManagerProxy.getReaction(reaction.emoticon);\n return callbackify(availableReaction, (availableReaction) => {\n if(!availableReaction.center_icon) {\n this.stickerContainer.classList.add('is-static');\n } else {\n this.stickerContainer.classList.add('is-regular');\n }\n\n if(availableReaction.pFlags.inactive) {\n this.classList.add('is-inactive');\n }\n\n const doc = availableReaction.center_icon ?? availableReaction.static_icon;\n this.renderDoc(doc);\n\n // customEmojiElement.static = true;\n // customEmojiElement.docId = doc.id;\n // return customEmojiElement;\n });\n } else if(reaction._ === 'reactionCustomEmoji') {\n this.stickerContainer.classList.add('is-custom');\n // const wrapped = wrapCustomEmoji({\n // docIds: [reaction.document_id],\n // customEmojiSize: makeMediaSize(REACTION_BLOCK_SIZE, REACTION_BLOCK_SIZE)\n // });\n\n // this.stickerContainer.append(wrapped);\n\n if(!this.customEmojiElement) {\n this.customEmojiElement = CustomEmojiElement.create();\n const wrapPromise = this.wrapStickerPromise = this.customEmojiElement.readyPromise = deferredPromise();\n this.wrapStickerPromise.finally(() => {\n if(this.wrapStickerPromise === wrapPromise) {\n this.wrapStickerPromise = undefined;\n }\n });\n this.stickerContainer.append(this.customEmojiElement);\n }\n\n this.customEmojiElement.docId = reaction.document_id;\n return this.customEmojiElement;\n }\n }\n\n private renderDoc(doc: Document.document) {\n const size = REACTIONS_SIZE[this.type];\n const wrapPromise = this.wrapStickerPromise = wrapSticker({\n div: this.stickerContainer,\n doc,\n width: size,\n height: size,\n static: true,\n managers: this.managers,\n middleware: this.middleware,\n needFadeIn: false\n }).then(({render}) => render).finally(() => {\n if(this.wrapStickerPromise === wrapPromise) {\n this.wrapStickerPromise = undefined;\n }\n });\n }\n\n public findTitle() {\n let title: string;\n if(this.type === ReactionLayoutType.Tag) {\n const tag = savedReactionTags.find((tag) => reactionsEqual(tag.reaction, this.reactionCount.reaction));\n title = tag?.title;\n }\n\n return title;\n }\n\n public renderCounter(force?: boolean, title: string | HTMLElement = this.findTitle()) {\n const displayOn = REACTIONS_DISPLAY_COUNTER_AT[this.type];\n if(displayOn === undefined && !force && !title && !this.hasTitle) return;\n const reactionCount = this.reactionCount;\n\n let setTitle = false;\n if(force || title || reactionCount.count >= displayOn || (this.type === ReactionLayoutType.Block && !this.canRenderAvatars)) {\n if(!this.counter) {\n this.counter = document.createElement(this.type === ReactionLayoutType.Inline ? 'i' : 'span');\n this.counter.classList.add(CLASS_NAME + '-counter');\n }\n\n const formatted = formatNumber(reactionCount.count);\n if(title) {\n const span = document.createElement('span');\n span.classList.add(CLASS_NAME + '-counter-title');\n span.append(typeof(title) === 'string' ? wrapEmojiText(title) : title);\n this.counter.replaceChildren(span);\n setTitle = true;\n if(force) {\n this.counter.append(' ', formatted);\n }\n } else if(this.counter.textContent !== formatted) {\n this.counter.textContent = formatted;\n }\n\n if(!this.counter.parentElement) {\n this.append(this.counter);\n }\n } else if(this.counter?.parentElement) {\n this.counter.remove();\n this.counter = undefined;\n }\n\n this.hasTitle = setTitle;\n }\n\n public renderAvatars(recentReactions: MessagePeerReaction[]) {\n if(this.type !== ReactionLayoutType.Block) {\n return;\n }\n\n if(this.reactionCount.count >= REACTIONS_DISPLAY_COUNTER_AT[this.type] || !this.canRenderAvatars) {\n if(this.stackedAvatars) {\n this.stackedAvatars.container.remove();\n this.stackedAvatars = undefined;\n }\n\n return;\n }\n\n if(!this.stackedAvatars) {\n this.stackedAvatars = new StackedAvatars({\n avatarSize: 24,\n middleware: this.middleware\n });\n\n this.append(this.stackedAvatars.container);\n }\n\n this.stackedAvatars.render(recentReactions.map((reaction) => getPeerId(reaction.peer_id)));\n }\n\n public setIsChosen(isChosen = this.reactionCount.chosen_order !== undefined) {\n if(this.type === ReactionLayoutType.Inline) return;\n const wasChosen = this.classList.contains('is-chosen') && !this.classList.contains('backwards');\n if(wasChosen !== isChosen) {\n SetTransition({\n element: this,\n className: 'is-chosen',\n forwards: isChosen,\n duration: this.isConnected ? 300 : 0\n });\n }\n }\n\n public fireAroundAnimation(waitPromise?: Promise) {\n let add = 0;\n if(this.type === ReactionLayoutType.Inline) {\n add = 14;\n } else if(this.type === ReactionLayoutType.Block || this.type === ReactionLayoutType.Tag) {\n add = 18;\n }\n\n return ReactionElement?.fireAroundAnimation({\n waitPromise,\n cache: this,\n middleware: this.middleware,\n reaction: this.reactionCount?.reaction,\n stickerContainer: this.stickerContainer,\n managers: this.managers,\n sizes: {\n genericEffect: 26,\n genericEffectSize: 100,\n size: REACTIONS_SIZE[this.type] + add,\n effectSize: 80\n },\n scrollable: appImManager.chat.bubbles.scrollable\n });\n }\n\n public static fireAroundAnimation(options: {\n waitPromise?: Promise\n cache?: {\n hasAroundAnimation: ReactionElement['hasAroundAnimation'],\n wrapStickerPromise?: ReactionElement['wrapStickerPromise']\n },\n reaction: Reaction,\n managers?: AppManagers,\n middleware: Middleware,\n stickerContainer: HTMLElement,\n sizes: {\n genericEffect: number,\n genericEffectSize: number,\n size: number,\n effectSize: number\n },\n textColor?: string,\n scrollable?: Scrollable\n }) {\n if(options.cache.hasAroundAnimation || !liteMode.isAvailable('effects_reactions')) {\n return;\n }\n\n options.managers ??= rootScope.managers;\n\n const reaction = options.reaction;\n if(reaction._ === 'reactionEmpty') return;\n\n const onAvailableReaction = ({\n availableReaction,\n genericEffect,\n sticker,\n onlyAround\n }: {\n availableReaction?: AvailableReaction,\n genericEffect?: Document.document,\n sticker?: Document.document,\n onlyAround?: boolean\n }) => {\n const size = genericEffect ? options.sizes.genericEffect : options.sizes.size;\n const div = genericEffect ? undefined : document.createElement('div');\n div && div.classList.add(CLASS_NAME + '-sticker-activate');\n\n const genericEffectSize = options.sizes.genericEffectSize;\n const isGenericMasked = genericEffect && sticker.sticker !== 2;\n\n const textColor = options.textColor || 'primary-text-color';\n\n const aroundParams: Parameters[0] = {\n doc: genericEffect || availableReaction.around_animation,\n size: genericEffect ? genericEffectSize : options.sizes.effectSize,\n target: options.stickerContainer,\n side: 'center',\n skipRatio: 1,\n play: false,\n managers: options.managers,\n middleware: options.middleware,\n scrollable: options.scrollable\n };\n\n const aroundResult = wrapStickerAnimation(aroundParams);\n const genericResult = genericEffect && wrapStickerAnimation({\n ...aroundParams,\n doc: isGenericMasked ? aroundParams.doc : sticker,\n size: genericEffectSize,\n stickerSize: size,\n loopEffect: true,\n textColor\n });\n const stickerResult = (!genericEffect || isGenericMasked) && !onlyAround && wrapSticker({\n div: div || document.createElement('div'),\n doc: sticker || availableReaction.center_icon,\n width: size,\n height: size,\n withThumb: false,\n needUpscale: true,\n play: false,\n skipRatio: 1,\n group: 'none',\n needFadeIn: false,\n managers: options.managers,\n middleware: options.middleware,\n textColor,\n loop: isGenericMasked\n // static: isGenericMasked || undefined\n }).then(({render}) => render as Promise);\n\n return Promise.all([\n genericEffect ?\n genericResult.stickerPromise :\n stickerResult,\n\n aroundResult.stickerPromise,\n\n stickerResult as any as Promise<(HTMLImageElement | HTMLVideoElement)[]>,\n\n genericEffect && loadReactionGeneric(),\n\n options.waitPromise\n ]).then(([iconPlayer, aroundPlayer, maskedSticker, reactionGeneric, _]) => {\n if(onlyAround) {\n iconPlayer = aroundPlayer;\n }\n\n const deferred = deferredPromise();\n const remove = () => {\n deferred.resolve();\n // return;\n // if(!isInDOM(div)) return;\n iconPlayer?.remove();\n div?.remove();\n options.stickerContainer.classList.remove('has-animation');\n };\n\n if(genericEffect) {\n const canvas = iconPlayer.canvas[0];\n canvas.classList.add('hide');\n const context = iconPlayer.contexts[0];\n const dpr = canvas.dpr;\n const newCanvasSize = genericEffectSize * dpr;\n const size = canvas.width;\n genericResult.animationDiv.append(canvas);\n genericResult.animationDiv.style.transform = 'scaleX(-1)';\n\n const maskedMedia = maskedSticker?.[0];\n const isMaskedVideo = maskedMedia instanceof HTMLVideoElement;\n\n iconPlayer.addEventListener('firstFrame', () => {\n iconPlayer.setSize(newCanvasSize, newCanvasSize);\n canvas.classList.remove('hide');\n\n if(isMaskedVideo) {\n safePlay(maskedMedia);\n }\n }, {once: true});\n\n let frameNo = 0;\n const scale = newCanvasSize / 512;\n\n const {layersPositions, op} = reactionGeneric;\n\n iconPlayer.overrideRender = (frame) => {\n if(isGenericMasked) {\n frame = maskedMedia as any as HTMLCanvasElement;\n }\n\n const isImageData = frame instanceof ImageData;\n context.clearRect(0, 0, newCanvasSize, newCanvasSize);\n\n for(let i = 0; i < layersPositions.length; ++i) {\n const frames = layersPositions[i];\n const transformations = frames[frameNo];\n if(!transformations) {\n continue;\n }\n\n let savedContext = false, flippedX = false, flippedY = false;\n let scaledWidth = size, scaledHeight = size;\n if(transformations.scale) {\n const [x, y] = transformations.scale;\n scaledWidth *= /* Math.abs */(x) * 4 / 100;\n scaledHeight *= /* Math.abs */(y) * 4 / 100;\n\n flippedX = x < 0/* && false */;\n flippedY = y < 0/* && false */;\n }\n\n let [x, y] = transformations.translation;\n x = (x + transformations.anchor[0]) * scale - Math.abs(scaledWidth) / 2;\n y = (y + transformations.anchor[1]) * scale - Math.abs(scaledHeight) / 2;\n\n if(flippedX || flippedY) {\n savedContext = true;\n context.save();\n context.scale(flippedX ? -1 : 1, flippedY ? -1 : 1);\n\n if(flippedX) x = -x;\n if(flippedY) y = -y;\n }\n\n if(transformations.opacity) {\n if(!savedContext) {\n savedContext = true;\n context.save();\n }\n\n context.globalAlpha = transformations.opacity[0] / 100;\n }\n\n if(isImageData) {\n context.putImageData(frame as ImageData, x, y);\n } else {\n context.drawImage(frame as ImageBitmap, x, y, scaledWidth, scaledHeight);\n }\n\n if(savedContext) {\n context.restore();\n }\n }\n\n frameNo++;\n\n if(frameNo >= op) {\n removeOnFrame();\n }\n };\n }\n\n if(!iconPlayer || !aroundPlayer) {\n remove();\n return deferred;\n }\n\n const removeOnFrame = () => {\n // if(!isInDOM(div)) return;\n fastRaf(remove);\n };\n\n options.middleware.onDestroy(removeOnFrame);\n\n !genericEffect && iconPlayer.addEventListener('enterFrame', (frameNo) => {\n if(frameNo === iconPlayer.maxFrame) {\n if(options.cache.wrapStickerPromise) { // wait for fade in animation\n options.cache.wrapStickerPromise.then(() => {\n setTimeout(removeOnFrame, 1e3);\n });\n } else {\n removeOnFrame();\n }\n }\n });\n\n iconPlayer.addEventListener('firstFrame', () => {\n div && options.stickerContainer.append(div);\n options.stickerContainer.classList.add('has-animation');\n iconPlayer.play();\n aroundPlayer.play();\n }, {once: true});\n\n return deferred;\n });\n };\n\n const onEmoticon = (sticker: Document.document, emoticon: string = sticker.stickerEmojiRaw) => {\n return callbackifyAll([\n apiManagerProxy.getReaction(emoticon),\n sticker ? options.managers.appReactionsManager.getRandomGenericAnimation() : undefined\n ], ([\n availableReaction,\n genericEffect\n ]) => {\n return onAvailableReaction(availableReaction ? {\n availableReaction,\n onlyAround: !!sticker\n } : {\n genericEffect,\n sticker\n });\n });\n };\n\n let promise: Promise;\n if(reaction._ === 'reactionEmoji') {\n promise = onEmoticon(undefined, reaction.emoticon);\n } else if(reaction._ === 'reactionPaid') {\n promise = Promise.resolve();\n } else {\n promise = callbackify(options.managers.appEmojiManager.getCustomEmojiDocument(reaction.document_id), (doc) => {\n return onEmoticon(doc);\n });\n }\n\n options.middleware.onDestroy(() => {\n options.cache.hasAroundAnimation = undefined;\n });\n\n options.cache.hasAroundAnimation = promise;\n promise.finally(() => {\n if(options.cache.hasAroundAnimation === promise) {\n options.cache.hasAroundAnimation = undefined;\n }\n });\n }\n}\n\ncustomElements.define(TAG_NAME, ReactionElement);\n","import {JSX, splitProps} from 'solid-js';\nimport classNames from '../helpers/string/classNames';\nimport {getIconContent} from './icon';\n\nexport const IconTsx = (props: {icon: Icon} & JSX.HTMLAttributes) => {\n const [, rest] = splitProps(props, ['icon']);\n return (\n \n {getIconContent(props.icon)}\n \n );\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport clamp from '../helpers/number/clamp';\nimport OverlayClickHandler from '../helpers/overlayClickHandler';\nimport classNames from '../helpers/string/classNames';\nimport {createRoot, createSignal, onMount, JSX} from 'solid-js';\nimport {Portal} from 'solid-js/web';\nimport {IconTsx} from './iconTsx';\nimport SetTransition from './singleTransition';\n\nconst KEEP_TOOLTIP = true;\nconst tooltipOverlayClickHandler = new OverlayClickHandler(undefined, true);\nexport default function showTooltip({\n element,\n container = element.parentElement,\n vertical,\n textElement,\n subtitleElement,\n paddingX = 0,\n centerVertically,\n onClose,\n icon,\n auto,\n mountOn = document.body,\n relative\n}: {\n element: HTMLElement,\n container?: HTMLElement,\n vertical: 'top' | 'bottom',\n textElement?: HTMLElement,\n subtitleElement?: HTMLElement,\n paddingX?: number,\n centerVertically?: boolean,\n onClose?: () => void,\n icon?: Icon,\n auto?: boolean,\n mountOn?: HTMLElement,\n relative?: boolean\n}) {\n const containerRect = !relative && container.getBoundingClientRect();\n const elementRect = !relative && element.getBoundingClientRect();\n const useOverlay = mountOn === document.body;\n let close: () => void;\n createRoot((dispose) => {\n const [getRect, setRect] = createSignal();\n\n const getStyle = (): JSX.CSSProperties => {\n const css: JSX.CSSProperties = {\n 'max-width': Math.min(containerRect.width - paddingX * 2, 320) + 'px'\n };\n\n const rect = getRect();\n if(!rect) {\n return css;\n }\n\n const minX = Math.min(containerRect.left + paddingX, containerRect.right);\n const maxX = Math.max(containerRect.left, containerRect.right - Math.min(containerRect.width, rect.width) - paddingX);\n\n const centerX = elementRect.left + (elementRect.width - rect.width) / 2;\n const left = clamp(centerX, minX, maxX);\n const verticalOffset = 12;\n if(vertical === 'top') css.top = (centerVertically ? elementRect.top + elementRect.height / 2 : elementRect.top) - rect.height - verticalOffset + 'px';\n else css.top = elementRect.bottom + verticalOffset + 'px';\n css.left = left + 'px';\n\n const notchCenterX = elementRect.left + (elementRect.width - 19) / 2;\n css['--notch-offset'] = notchCenterX - left + 'px';\n\n return css;\n };\n\n let div: HTMLDivElement;\n const tooltip = (\n \n
\n \n
\n {icon && }\n {subtitleElement ? (\n <>\n
{textElement}
\n
{subtitleElement}
\n \n ) : textElement}\n
\n \n );\n\n \n {tooltip}\n \n\n onMount(() => {\n !relative && setRect(div.getBoundingClientRect());\n div.classList.add('mounted');\n SetTransition({\n element: div,\n className: 'is-visible',\n duration: 200,\n useRafs: 2,\n forwards: true\n });\n });\n\n let closed = false;\n const onToggle = (open: boolean) => {\n if(open) {\n return;\n }\n\n closed = true;\n clearTimeout(timeout);\n SetTransition({\n element: div,\n className: 'is-visible',\n duration: 200,\n forwards: false,\n onTransitionEnd: () => {\n onClose?.();\n dispose();\n }\n });\n };\n\n close = () => {\n if(closed) {\n return;\n }\n\n if(useOverlay) tooltipOverlayClickHandler.close();\n else onToggle(false);\n };\n\n const timeout = KEEP_TOOLTIP && !auto ? 0 : window.setTimeout(close, 3000);\n\n useOverlay && Promise.resolve().then(() => {\n tooltipOverlayClickHandler.open(mountOn);\n tooltipOverlayClickHandler.addEventListener('toggle', onToggle, {once: true});\n });\n });\n\n return {close};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {ReactionsContext} from '../../lib/appManagers/appReactionsManager';\nimport forEachReverse from '../../helpers/array/forEachReverse';\nimport callbackifyAll from '../../helpers/callbackifyAll';\nimport positionElementByIndex from '../../helpers/dom/positionElementByIndex';\nimport {makeMediaSize} from '../../helpers/mediaSize';\nimport {Middleware, MiddlewareHelper} from '../../helpers/middleware';\nimport {Message, ReactionCount, SavedReactionTag} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport reactionsEqual from '../../lib/appManagers/utils/reactions/reactionsEqual';\nimport {CustomEmojiRendererElement} from '../../lib/customEmoji/renderer';\nimport rootScope from '../../lib/rootScope';\nimport {AnimationItemGroup} from '../animationIntersector';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport ReactionElement, {ReactionLayoutType, REACTIONS_DISPLAY_COUNTER_AT, REACTIONS_SIZE} from './reaction';\nimport {getHeavyAnimationPromise} from '../../hooks/useHeavyAnimationCheck';\nimport pause from '../../helpers/schedulers/pause';\nimport showTooltip from '../tooltip';\nimport {i18n} from '../../lib/langPack';\n\nconst CLASS_NAME = 'reactions';\nconst TAG_NAME = CLASS_NAME + '-element';\n\nconst REACTIONS_ELEMENTS: Map> = new Map();\nexport {REACTIONS_ELEMENTS};\n\nconst PENDING_PAID_REACTIONS: Map void}> = new Map();\nexport {PENDING_PAID_REACTIONS};\n\nexport function getPendingPaidReactionKey(message: ReactionsContext) {\n return message.peerId + '_' + message.mid;\n}\n\nexport const savedReactionTags: SavedReactionTag[] = [];\nrootScope.addEventListener('saved_tags', ({savedPeerId, tags}) => {\n if(savedPeerId) {\n return;\n }\n\n savedReactionTags.splice(0, savedReactionTags.length, ...tags);\n\n REACTIONS_ELEMENTS.forEach((set) => {\n set.forEach((reactionsElement) => {\n const context = reactionsElement.getContext();\n if(context.peerId === rootScope.myId && reactionsElement.getType() === ReactionLayoutType.Tag) {\n reactionsElement.render();\n }\n });\n });\n});\n\nexport default class ReactionsElement extends HTMLElement {\n private context: ReactionsContext;\n private key: string;\n private isPlaceholder: boolean;\n private type: ReactionLayoutType;\n private sorted: ReactionElement[];\n private onConnectCallback: () => void;\n private managers: AppManagers;\n private middleware: Middleware;\n private middlewareHelpers: Map;\n public customEmojiRenderer: CustomEmojiRendererElement;\n private customEmojiRendererMiddlewareHelper: MiddlewareHelper;\n private animationGroup: AnimationItemGroup;\n private lazyLoadQueue: LazyLoadQueue;\n private forceCounter: boolean;\n\n constructor() {\n super();\n this.classList.add(CLASS_NAME);\n this.sorted = [];\n this.middlewareHelpers = new Map();\n this.managers = rootScope.managers;\n }\n\n connectedCallback() {\n let set = REACTIONS_ELEMENTS.get(this.key);\n if(!set) {\n REACTIONS_ELEMENTS.set(this.key, set = new Set());\n }\n\n set.add(this);\n\n if(this.onConnectCallback && this.isConnected) {\n this.onConnectCallback();\n this.onConnectCallback = undefined;\n }\n }\n\n disconnectedCallback() {\n const set = REACTIONS_ELEMENTS.get(this.key);\n set.delete(this);\n if(!set.size) {\n REACTIONS_ELEMENTS.delete(this.key);\n }\n }\n\n public getType() {\n return this.type;\n }\n\n public getReactionCount(reactionElement: ReactionElement) {\n return this.sorted[this.sorted.indexOf(reactionElement)].reactionCount;\n }\n\n public getContext() {\n return this.context;\n }\n\n public getSorted() {\n return this.sorted;\n }\n\n public shouldUseTagsForContext(context: ReactionsElement['context']) {\n if(context.peerId !== rootScope.myId) {\n return false;\n }\n\n const reactions = context.reactions;\n if(!reactions || reactions.pFlags.reactions_as_tags) {\n return true;\n }\n\n return !reactions.results.length;\n }\n\n public init({\n context,\n type,\n middleware,\n isPlaceholder = this.isPlaceholder,\n animationGroup,\n lazyLoadQueue,\n forceCounter\n }: {\n context: ReactionsContext,\n type: ReactionLayoutType,\n middleware: Middleware,\n isPlaceholder?: boolean,\n animationGroup?: AnimationItemGroup,\n lazyLoadQueue?: LazyLoadQueue,\n forceCounter?: boolean\n }) {\n if(this.key !== undefined) {\n this.disconnectedCallback();\n }\n\n if(this.middleware !== middleware) {\n middleware.onDestroy(() => {\n this.middlewareHelpers.clear();\n });\n }\n\n this.context = context;\n this.key = this.context.peerId + '_' + this.context.mid;\n this.middleware = middleware;\n this.isPlaceholder = isPlaceholder;\n this.animationGroup = animationGroup;\n this.lazyLoadQueue = lazyLoadQueue;\n this.forceCounter = forceCounter;\n\n this.setType(type);\n\n this.connectedCallback();\n }\n\n public setType(type: ReactionLayoutType) {\n if(type === ReactionLayoutType.Block && this.shouldUseTagsForContext(this.context)) {\n type = ReactionLayoutType.Tag;\n }\n\n if(this.type === type) {\n return;\n }\n\n this.type = type;\n\n for(const type in ReactionLayoutType) {\n this.classList.remove(CLASS_NAME + '-' + type);\n }\n\n this.classList.add(CLASS_NAME + '-' + type);\n this.classList.toggle(CLASS_NAME + '-like-block', type === ReactionLayoutType.Block || type === ReactionLayoutType.Tag);\n }\n\n public changeContext(context: ReactionsContext) {\n return this.init({\n context,\n type: this.type,\n middleware: this.middleware\n });\n }\n\n public update(context: ReactionsContext, changedResults?: ReactionCount[], waitPromise?: Promise) {\n this.context = context;\n this.render(changedResults, waitPromise);\n }\n\n public render(changedResults?: ReactionCount[], waitPromise?: Promise) {\n const reactions = this.context.reactions;\n const hasReactions = !!(reactions && reactions.results.length);\n this.classList.toggle('has-no-reactions', !hasReactions);\n if(!hasReactions && !this.sorted.length) return;\n\n // const availableReactionsResult = this.managers.appReactionsManager.getAvailableReactions();\n // callbackify(availableReactionsResult, () => {\n let counts = hasReactions ? (\n reactions.results\n // availableReactionsResult instanceof Promise ?\n // reactions.results :\n // reactions.results.filter((reactionCount) => {\n // return this.managers.appReactionsManager.isReactionActive(reactionCount.reaction);\n // })\n ) : [];\n\n counts = counts.filter((count) => count.reaction._ !== 'reactionPaid');\n\n // if(this.context.peerId.isUser()) {\n // counts.sort((a, b) => (b.count - a.count) || ((b.chosen_order ?? 0) - (a.chosen_order ?? 0)));\n // } else {\n // counts.sort((a, b) => (b.count - a.count) || ((a.chosen_order ?? 0) - (b.chosen_order ?? 0)));\n // }\n\n forEachReverse(this.sorted, (reactionElement, idx, arr) => {\n const reaction = reactionElement.reactionCount.reaction;\n const found = counts.some((reactionCount) => reactionsEqual(reactionCount.reaction, reaction));\n if(!found) {\n const middlewareHelper = this.middlewareHelpers.get(reactionElement);\n middlewareHelper.destroy();\n this.middlewareHelpers.delete(reactionElement);\n arr.splice(idx, 1);\n reactionElement.remove();\n }\n });\n\n let animationShouldHaveDelay = false;\n const totalReactions = counts.reduce((acc, c) => acc + c.count, 0);\n const canRenderAvatars = reactions &&\n (!!reactions.pFlags.can_see_list || this.context.peerId.isUser()) &&\n totalReactions < REACTIONS_DISPLAY_COUNTER_AT[this.type];\n const customEmojiElements: ReturnType[] = new Array(counts.length);\n this.sorted = counts.map((reactionCount, idx, arr) => {\n let reactionElement: ReactionElement = this.sorted.find((reactionElement) => reactionsEqual(reactionElement.reactionCount.reaction, reactionCount.reaction));\n if(!reactionElement) {\n const middlewareHelper = this.middleware.create();\n reactionElement = new ReactionElement();\n reactionElement.init(this.type, middlewareHelper.get());\n this.middlewareHelpers.set(reactionElement, middlewareHelper);\n }\n\n reactionElement.classList.toggle('is-last', idx === (arr.length - 1));\n positionElementByIndex(reactionElement, this, idx);\n\n const isPaidReaction = reactionCount.reaction._ === 'reactionPaid';\n const pending = PENDING_PAID_REACTIONS.get(getPendingPaidReactionKey(this.context));\n\n const recentReactions = reactions.recent_reactions ?\n reactions.recent_reactions.filter((reaction) => reactionsEqual(reaction.reaction, reactionCount.reaction)) :\n [];\n const wasUnread = reactionElement.isUnread;\n const isUnread = recentReactions.some((reaction) => reaction.pFlags.unread);\n reactionElement.reactionCount = {\n ...reactionCount,\n count: reactionCount.count + (pending?.count ?? 0)\n };\n reactionElement.setCanRenderAvatars(canRenderAvatars);\n const customEmojiElement = reactionElement.render(this.isPlaceholder);\n reactionElement.renderCounter(this.forceCounter);\n reactionElement.renderAvatars(recentReactions);\n reactionElement.isUnread = isUnread;\n reactionElement.setIsChosen(!!pending || undefined);\n\n if(wasUnread && !isUnread && !changedResults?.includes(reactionCount)) {\n (changedResults ??= []).push(reactionCount);\n animationShouldHaveDelay = true;\n }\n\n customEmojiElements[idx] = customEmojiElement;\n\n if(pending) {\n const title = i18n('PaidReaction.Sent', [pending.count]);\n title.classList.add('text-bold');\n const {close} = showTooltip({\n element: reactionElement,\n container: this,\n vertical: 'top',\n textElement: title,\n subtitleElement: i18n('StarsSentText', [pending.count]),\n icon: 'star',\n mountOn: this,\n relative: true\n });\n }\n\n return reactionElement;\n });\n\n callbackifyAll(customEmojiElements, (customEmojiElements) => {\n const map: Parameters[0]['addCustomEmojis'] = new Map();\n customEmojiElements.forEach((customEmojiElement) => {\n if(!customEmojiElement) {\n return;\n }\n\n map.set(customEmojiElement.docId, new Set([customEmojiElement]));\n });\n\n if(!map.size) {\n if(this.customEmojiRenderer) {\n this.customEmojiRendererMiddlewareHelper.destroy();\n this.customEmojiRenderer.remove();\n this.customEmojiRenderer =\n this.customEmojiRendererMiddlewareHelper =\n undefined;\n }\n\n return;\n }\n\n if(!this.customEmojiRenderer) {\n const size = REACTIONS_SIZE[this.type];\n this.customEmojiRendererMiddlewareHelper = this.middleware.create();\n this.customEmojiRenderer = CustomEmojiRendererElement.create({\n animationGroup: this.animationGroup,\n customEmojiSize: makeMediaSize(size, size),\n middleware: this.customEmojiRendererMiddlewareHelper.get(),\n lazyLoadQueue: this.lazyLoadQueue,\n observeResizeElement: this\n });\n\n this.customEmojiRenderer.classList.add(CLASS_NAME + '-renderer');\n this.customEmojiRenderer.canvas.classList.add(CLASS_NAME + '-renderer-canvas');\n this.prepend(this.customEmojiRenderer);\n }\n\n this.customEmojiRenderer.add({\n addCustomEmojis: map,\n lazyLoadQueue: this.lazyLoadQueue\n });\n });\n\n // this.sorted.forEach((reactionElement, idx) => {\n // /* if(this.type === 'block' && this.childElementCount !== this.sorted.length) { // because of appended time\n // idx += 1;\n // } */\n\n // positionElementByIndex(reactionElement, this, idx);\n // });\n\n if(!this.isPlaceholder && changedResults?.length) {\n if(this.isConnected) {\n this.handleChangedResults(changedResults, waitPromise, animationShouldHaveDelay);\n } else {\n this.onConnectCallback = () => {\n this.handleChangedResults(changedResults, waitPromise, animationShouldHaveDelay);\n };\n }\n }\n // });\n }\n\n private async handleChangedResults(changedResults: ReactionCount[], waitPromise?: Promise, withDelay?: boolean) {\n await getHeavyAnimationPromise();\n // ! temp\n if(this.context.peerId !== appImManager.chat.peerId) return;\n if(withDelay) {\n waitPromise = (waitPromise || Promise.resolve()).then(() => pause(150));\n }\n\n changedResults.forEach((reactionCount) => {\n const reactionElement = this.sorted.find((reactionElement) => {\n return reactionsEqual(reactionElement.reactionCount.reaction, reactionCount.reaction);\n });\n\n reactionElement?.fireAroundAnimation(waitPromise);\n });\n }\n}\n\ncustomElements.define(TAG_NAME, ReactionsElement);\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport type IntersectionTarget = Element;\nexport type IntersectionCallback = (entry: IntersectionObserverEntry) => void;\n\nexport default class SuperIntersectionObserver {\n private observing: Map>;\n private observingQueue: SuperIntersectionObserver['observing'];\n private intersecting: Set;\n private observer: IntersectionObserver;\n private freezedObservingNew: boolean;\n\n constructor(init?: IntersectionObserverInit) {\n this.observing = new Map();\n this.observingQueue = new Map();\n this.intersecting = new Set();\n this.freezedObservingNew = false;\n\n this.observer = new IntersectionObserver((entries) => {\n const observing = this.observing;\n for(let i = 0, length = entries.length; i < length; ++i) {\n const entry = entries[i];\n const callbacks = observing.get(entry.target);\n if(!callbacks) {\n console.error('intersection process no callbacks:', entry);\n debugger;\n continue;\n }\n\n if(entry.isIntersecting) this.intersecting.add(entry.target);\n else this.intersecting.delete(entry.target);\n\n for(const callback of callbacks) {\n try {\n callback(entry);\n } catch(err) {\n console.error('intersection process callback error:', err);\n }\n }\n }\n }, init);\n }\n\n public getIntersecting() {\n return this.intersecting;\n }\n\n public disconnect() {\n this.observing.clear();\n this.observingQueue.clear();\n this.intersecting.clear();\n this.observer.disconnect();\n }\n\n public toggleObservingNew(value: boolean) {\n if(this.freezedObservingNew === value) {\n return;\n }\n\n this.freezedObservingNew = value;\n\n const queue = this.observingQueue;\n if(!value && queue.size) {\n for(const [target, callbacks] of queue) {\n for(const callback of callbacks) {\n this.observe(target, callback);\n }\n }\n\n queue.clear();\n }\n }\n\n public has(target: IntersectionTarget, callback: IntersectionCallback, observing = this.observing) {\n const callbacks = observing.get(target);\n return !!(callbacks && callbacks.has(callback));\n }\n\n public observe(target: IntersectionTarget, callback: IntersectionCallback) {\n if(this.freezedObservingNew && this.has(target, callback)) {\n return;\n }\n\n const observing = this.freezedObservingNew ? this.observingQueue : this.observing;\n let callbacks = observing.get(target);\n if(callbacks && callbacks.has(callback)) {\n return;\n }\n\n if(!callbacks) {\n callbacks = new Set();\n observing.set(target, callbacks);\n\n if(observing === this.observing) {\n this.observer.observe(target);\n }\n }\n\n callbacks.add(callback);\n }\n\n public unobserve(target: IntersectionTarget, callback: IntersectionCallback) {\n const observing = this.freezedObservingNew && !this.has(target, callback) ? this.observingQueue : this.observing;\n const callbacks = observing.get(target);\n if(!callbacks) {\n return;\n }\n\n callbacks.delete(callback);\n if(!callbacks.size) {\n observing.delete(target);\n this.observer.unobserve(target);\n this.intersecting.delete(target);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {copyTextToClipboard} from '../clipboard';\n// import SelectionSaver from \"../selectionSaver\";\n// import selectElementContents from \"./selectElementContents\";\n\nexport default function copyFromElement(element: HTMLElement) {\n copyTextToClipboard(element.textContent);\n // const saver = new SelectionSaver();\n // saver.save();\n // selectElementContents(element);\n // document.execCommand('copy');\n // saver.restore();\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport limitSymbols from '../../helpers/string/limitSymbols';\nimport {WebPage} from '../../layer';\nimport wrapRichText, {WrapRichTextOptions} from '../../lib/richTextProcessor/wrapRichText';\n\nexport default function wrapWebPageDescription(\n webPage: WebPage.webPage,\n richTextOptions?: WrapRichTextOptions,\n noLimit?: boolean\n) {\n if(noLimit) {\n return wrapRichText(webPage.description || '', {\n ...richTextOptions,\n entities: webPage.entities\n });\n }\n\n const shortDescriptionText = limitSymbols(webPage.description || '', 150, 180);\n // const siteName = webPage.site_name;\n // let contextHashtag = '';\n // if(siteName === 'GitHub') {\n // const matches = apiWebPage.url.match(/(https?:\\/\\/github\\.com\\/[^\\/]+\\/[^\\/]+)/);\n // if(matches) {\n // contextHashtag = matches[0] + '/issues/{1}';\n // }\n // }\n return wrapRichText(shortDescriptionText, richTextOptions/* , {\n contextSite: siteName || 'external',\n contextHashtag: contextHashtag\n } */);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport limitSymbols from '../../helpers/string/limitSymbols';\nimport {WebPage} from '../../layer';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\n\nexport default function wrapWebPageTitle(webPage: WebPage.webPage) {\n let shortTitle = webPage.title || webPage.author || '';\n shortTitle = limitSymbols(shortTitle, 80, 100);\n return wrapRichText(shortTitle, {noLinks: true, noLinebreaks: true});\n}\n","import type {MyDocument} from '../../appDocsManager';\nimport type {MyMessage} from '../../appMessagesManager';\nimport {Message, MessageMedia} from '../../../../layer';\n\nexport default function isMentionUnread(message: MyMessage) {\n if(!message) {\n return false;\n }\n\n const doc = ((message as Message.message).media as MessageMedia.messageMediaDocument)?.document as MyDocument;\n return !!(\n message.pFlags.media_unread &&\n message.pFlags.mentioned &&\n (\n !doc ||\n !(['voice', 'round'] as MyDocument['type'][]).includes(doc.type)\n )\n );\n}\n","import assumeType from '../../../../helpers/assumeType';\nimport {Message} from '../../../../layer';\n\nexport default function getGroupedText(messages: Message.message[]) {\n let foundMessages = 0, message: Message.message;\n for(const m of messages) {\n assumeType(m);\n if(m.message) {\n if(++foundMessages > 1) break;\n message = m;\n }\n }\n\n if(foundMessages > 1) {\n message = undefined;\n }\n\n return message;\n}\n","/*\nThis file is part of Telegram Desktop,\nthe official desktop application for the Telegram messaging service.\nFor license and copyright information please follow this link:\nhttps://github.com/telegramdesktop/tdesktop/blob/master/LEGAL\n*/\n\nimport accumulate from '../helpers/array/accumulate';\nimport clamp from '../helpers/number/clamp';\n\ntype Size = {w: number, h: number};\nexport type GroupMediaLayout = {\n geometry: {\n x: number,\n y: number,\n width: number,\n height: number\n },\n sides: number\n};\ntype Attempt = {\n lineCounts: number[],\n heights: number[]\n};\nexport const RectPart = {\n None: 0,\n Top: 1,\n Right: 2,\n Bottom: 4,\n Left: 8\n};\n\n// https://github.com/telegramdesktop/tdesktop/blob/4669c07dc5335cbf4795bbbe5b0ab7c007b9aee2/Telegram/SourceFiles/ui/grouped_layout.cpp\nexport class Layouter {\n private count: number;\n private ratios: number[];\n private proportions: string;\n private averageRatio: number;\n private maxSizeRatio: number;\n\n constructor(private sizes: Size[], private maxWidth: number, private minWidth: number, private spacing: number, private maxHeight = maxWidth) {\n this.count = sizes.length;\n this.ratios = Layouter.countRatios(sizes);\n this.proportions = Layouter.countProportions(this.ratios);\n this.averageRatio = accumulate(this.ratios, 1) / this.count; // warn\n this.maxSizeRatio = maxWidth / this.maxHeight;\n }\n\n public layout(): GroupMediaLayout[] {\n if(!this.count) return [];\n else if(this.count === 1) return this.layoutOne();\n\n if(this.count >= 5 || this.ratios.find((r) => r > 2)) {\n return new ComplexLayouter(this.ratios, this.averageRatio, this.maxWidth, this.minWidth, this.spacing).layout();\n }\n\n if(this.count === 2) return this.layoutTwo();\n else if(this.count === 3) return this.layoutThree();\n return this.layoutFour();\n }\n\n private layoutTwo(): ReturnType {\n if((this.proportions === 'ww') &&\n (this.averageRatio > 1.4 * this.maxSizeRatio) &&\n (this.ratios[1] - this.ratios[0] < 0.2)) {\n return this.layoutTwoTopBottom();\n } else if(this.proportions === 'ww' || this.proportions === 'qq') {\n return this.layoutTwoLeftRightEqual();\n }\n return this.layoutTwoLeftRight();\n }\n\n private layoutThree(): ReturnType {\n if(this.proportions[0] === 'n') {\n return this.layoutThreeLeftAndOther();\n }\n return this.layoutThreeTopAndOther();\n }\n\n private layoutFour(): ReturnType {\n if(this.proportions[0] === 'w') {\n return this.layoutFourTopAndOther();\n }\n return this.layoutFourLeftAndOther();\n }\n\n private layoutOne(): ReturnType {\n const width = this.maxWidth;\n const height = (this.sizes[0].h * width) / this.sizes[0].w;\n\n return [\n {\n geometry: {x: 0, y: 0, width, height},\n sides: RectPart.Left | RectPart.Top | RectPart.Right | RectPart.Bottom\n }\n ];\n }\n\n private layoutTwoTopBottom(): ReturnType {\n const width = this.maxWidth;\n const height = Math.round(Math.min(\n width / this.ratios[0],\n Math.min(\n width / this.ratios[1],\n (this.maxHeight - this.spacing) / 2)));\n\n return [\n {\n geometry: {x: 0, y: 0, width, height},\n sides: RectPart.Left | RectPart.Top | RectPart.Right\n },\n {\n geometry: {x: 0, y: height + this.spacing, width, height},\n sides: RectPart.Left | RectPart.Bottom | RectPart.Right\n }\n ];\n }\n\n private layoutTwoLeftRightEqual(): ReturnType {\n const width = (this.maxWidth - this.spacing) / 2;\n const height = Math.round(Math.min(\n width / this.ratios[0],\n Math.min(width / this.ratios[1], this.maxHeight * 1)));\n\n return [\n {\n geometry: {x: 0, y: 0, width, height},\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\n },\n {\n geometry: {x: width + this.spacing, y: 0, width, height},\n sides: RectPart.Top | RectPart.Right | RectPart.Bottom\n }\n ];\n }\n\n private layoutTwoLeftRight(): ReturnType {\n const minimalWidth = Math.round(this.minWidth * 1.5);\n const secondWidth = Math.min(\n Math.round(Math.max(\n 0.4 * (this.maxWidth - this.spacing),\n (this.maxWidth - this.spacing) / this.ratios[0] /\n (1 / this.ratios[0] + 1 / this.ratios[1]))),\n this.maxWidth - this.spacing - minimalWidth);\n const firstWidth = this.maxWidth -\n secondWidth -\n this.spacing;\n const height = Math.min(\n this.maxHeight,\n Math.round(Math.min(\n firstWidth / this.ratios[0],\n secondWidth / this.ratios[1])));\n\n return [\n {\n geometry: {x: 0, y: 0, width: firstWidth, height},\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\n },\n {\n geometry: {x: firstWidth + this.spacing, y: 0, width: secondWidth, height},\n sides: RectPart.Top | RectPart.Right | RectPart.Bottom\n }\n ];\n }\n\n private layoutThreeLeftAndOther(): ReturnType {\n const firstHeight = this.maxHeight;\n const thirdHeight = Math.round(Math.min(\n (this.maxHeight - this.spacing) / 2.,\n (this.ratios[1] * (this.maxWidth - this.spacing) /\n (this.ratios[2] + this.ratios[1]))));\n const secondHeight = firstHeight -\n thirdHeight -\n this.spacing;\n const rightWidth = Math.max(\n this.minWidth,\n Math.round(Math.min(\n (this.maxWidth - this.spacing) / 2.,\n Math.min(\n thirdHeight * this.ratios[2],\n secondHeight * this.ratios[1]))));\n const leftWidth = Math.min(\n Math.round(firstHeight * this.ratios[0]),\n this.maxWidth - this.spacing - rightWidth);\n\n return [\n {\n geometry: {x: 0, y: 0, width: leftWidth, height: firstHeight},\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\n },\n {\n geometry: {x: leftWidth + this.spacing, y: 0, width: rightWidth, height: secondHeight},\n sides: RectPart.Top | RectPart.Right\n },\n {\n geometry: {x: leftWidth + this.spacing, y: secondHeight + this.spacing, width: rightWidth, height: thirdHeight},\n sides: RectPart.Bottom | RectPart.Right\n }\n ];\n }\n\n private layoutThreeTopAndOther(): ReturnType {\n const firstWidth = this.maxWidth;\n const firstHeight = Math.round(Math.min(\n firstWidth / this.ratios[0],\n (this.maxHeight - this.spacing) * 0.66));\n const secondWidth = (this.maxWidth - this.spacing) / 2;\n const secondHeight = Math.min(\n this.maxHeight - firstHeight - this.spacing,\n Math.round(Math.min(\n secondWidth / this.ratios[1],\n secondWidth / this.ratios[2])));\n const thirdWidth = firstWidth - secondWidth - this.spacing;\n\n return [\n {\n geometry: {x: 0, y: 0, width: firstWidth, height: firstHeight},\n sides: RectPart.Left | RectPart.Top | RectPart.Right\n },\n {\n geometry: {x: 0, y: firstHeight + this.spacing, width: secondWidth, height: secondHeight},\n sides: RectPart.Bottom | RectPart.Left\n },\n {\n geometry: {x: secondWidth + this.spacing, y: firstHeight + this.spacing, width: thirdWidth, height: secondHeight},\n sides: RectPart.Bottom | RectPart.Right\n }\n ];\n }\n\n private layoutFourTopAndOther(): ReturnType {\n const w = this.maxWidth;\n const h0 = Math.round(Math.min(\n w / this.ratios[0],\n (this.maxHeight - this.spacing) * 0.66));\n const h = Math.round(\n (this.maxWidth - 2 * this.spacing) /\n (this.ratios[1] + this.ratios[2] + this.ratios[3]));\n const w0 = Math.max(\n this.minWidth,\n Math.round(Math.min(\n (this.maxWidth - 2 * this.spacing) * 0.4,\n h * this.ratios[1])));\n const w2 = Math.round(Math.max(\n Math.max(\n this.minWidth * 1.,\n (this.maxWidth - 2 * this.spacing) * 0.33),\n h * this.ratios[3]));\n const w1 = w - w0 - w2 - 2 * this.spacing;\n const h1 = Math.min(\n this.maxHeight - h0 - this.spacing,\n h);\n\n return [\n {\n geometry: {x: 0, y: 0, width: w, height: h0},\n sides: RectPart.Left | RectPart.Top | RectPart.Right\n },\n {\n geometry: {x: 0, y: h0 + this.spacing, width: w0, height: h1},\n sides: RectPart.Bottom | RectPart.Left\n },\n {\n geometry: {x: w0 + this.spacing, y: h0 + this.spacing, width: w1, height: h1},\n sides: RectPart.Bottom\n },\n {\n geometry: {x: w0 + this.spacing + w1 + this.spacing, y: h0 + this.spacing, width: w2, height: h1},\n sides: RectPart.Right | RectPart.Bottom\n }\n ];\n }\n\n private layoutFourLeftAndOther(): ReturnType {\n const h = this.maxHeight;\n const w0 = Math.round(Math.min(\n h * this.ratios[0],\n (this.maxWidth - this.spacing) * 0.6));\n\n const w = Math.round(\n (this.maxHeight - 2 * this.spacing) /\n (1. / this.ratios[1] + 1. / this.ratios[2] + 1. / this.ratios[3])\n );\n const h0 = Math.round(w / this.ratios[1]);\n const h1 = Math.round(w / this.ratios[2]);\n const h2 = h - h0 - h1 - 2 * this.spacing;\n const w1 = Math.max(\n this.minWidth,\n Math.min(this.maxWidth - w0 - this.spacing, w));\n\n return [\n {\n geometry: {x: 0, y: 0, width: w0, height: h},\n sides: RectPart.Top | RectPart.Left | RectPart.Bottom\n },\n {\n geometry: {x: w0 + this.spacing, y: 0, width: w1, height: h0},\n sides: RectPart.Top | RectPart.Right\n },\n {\n geometry: {x: w0 + this.spacing, y: h0 + this.spacing, width: w1, height: h1},\n sides: RectPart.Right\n },\n {\n geometry: {x: w0 + this.spacing, y: h0 + h1 + 2 * this.spacing, width: w1, height: h2},\n sides: RectPart.Bottom | RectPart.Right\n }\n ];\n }\n\n private static countRatios(sizes: Size[]) {\n return sizes.map((size) => size.w / size.h);\n }\n\n private static countProportions(ratios: number[]) {\n return ratios.map((ratio) => (ratio > 1.2) ? 'w' : (ratio < 0.8) ? 'n' : 'q').join('');\n }\n}\n\nclass ComplexLayouter {\n private ratios: number[];\n private count: number;\n\n constructor(ratios: number[], private averageRatio: number, private maxWidth: number, private minWidth: number, private spacing: number, private maxHeight = maxWidth * 4 / 3) {\n this.ratios = ComplexLayouter.cropRatios(ratios, averageRatio);\n this.count = ratios.length;\n }\n\n private static cropRatios(ratios: number[], averageRatio: number) {\n const kMaxRatio = 2.75;\n const kMinRatio = 0.6667;\n return ratios.map((ratio) => {\n return averageRatio > 1.1 ?\n clamp(ratio, 1., kMaxRatio) :\n clamp(ratio, kMinRatio, 1.);\n });\n }\n\n public layout(): GroupMediaLayout[] {\n const result = new Array(this.count);\n\n const attempts: Attempt[] = [];\n const multiHeight = (offset: number, count: number) => {\n const ratios = this.ratios.slice(offset, offset + count); // warn\n const sum = accumulate(ratios, 0);\n return (this.maxWidth - (count - 1) * this.spacing) / sum;\n };\n const pushAttempt = (lineCounts: number[]) => {\n const heights: number[] = [];\n let offset = 0;\n for(const count of lineCounts) {\n heights.push(multiHeight(offset, count));\n offset += count;\n }\n attempts.push({lineCounts, heights}); // warn\n };\n\n for(let first = 1; first !== this.count; ++first) {\n const second = this.count - first;\n if(first > 3 || second > 3) {\n continue;\n }\n pushAttempt([first, second]);\n }\n for(let first = 1; first !== this.count - 1; ++first) {\n for(let second = 1; second !== this.count - first; ++second) {\n const third = this.count - first - second;\n if((first > 3) ||\n (second > ((this.averageRatio < 0.85) ? 4 : 3)) ||\n (third > 3)) {\n continue;\n }\n pushAttempt([first, second, third]);\n }\n }\n for(let first = 1; first !== this.count - 1; ++first) {\n for(let second = 1; second !== this.count - first; ++second) {\n for(let third = 1; third !== this.count - first - second; ++third) {\n const fourth = this.count - first - second - third;\n if(first > 3 || second > 3 || third > 3 || fourth > 3) {\n continue;\n }\n pushAttempt([first, second, third, fourth]);\n }\n }\n }\n\n let optimalAttempt: Attempt = null;\n let optimalDiff = 0;\n for(const attempt of attempts) {\n const {heights, lineCounts: counts} = attempt;\n const lineCount = counts.length;\n const totalHeight = accumulate(heights, 0) +\n this.spacing * (lineCount - 1);\n const minLineHeight = Math.min(...heights);\n const maxLineHeight = Math.max(...heights);\n const bad1 = (minLineHeight < this.minWidth) ? 1.5 : 1;\n const bad2 = (() => {\n for(let line = 1; line !== lineCount; ++line) {\n if(counts[line - 1] > counts[line]) {\n return 1.5;\n }\n }\n return 1.;\n })();\n const diff = Math.abs(totalHeight - this.maxHeight) * bad1 * bad2;\n if(!optimalAttempt || diff < optimalDiff) {\n optimalAttempt = attempt;\n optimalDiff = diff;\n }\n }\n\n const optimalCounts = optimalAttempt.lineCounts;\n const optimalHeights = optimalAttempt.heights;\n const rowCount = optimalCounts.length;\n\n let index = 0;\n let y = 0;\n for(let row = 0; row !== rowCount; ++row) {\n const colCount = optimalCounts[row];\n const lineHeight = optimalHeights[row];\n const height = Math.round(lineHeight);\n\n let x = 0;\n for(let col = 0; col !== colCount; ++col) {\n const sides = RectPart.None |\n (row === 0 ? RectPart.Top : RectPart.None) |\n (row === rowCount - 1 ? RectPart.Bottom : RectPart.None) |\n (col === 0 ? RectPart.Left : RectPart.None) |\n (col === colCount - 1 ? RectPart.Right : RectPart.None);\n\n const ratio = this.ratios[index];\n const width = (col === colCount - 1) ?\n (this.maxWidth - x) :\n Math.round(ratio * lineHeight);\n result[index] = {\n geometry: {x, y, width, height},\n sides\n };\n\n x += width + this.spacing;\n ++index;\n }\n y += height + this.spacing;\n }\n\n return result;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Layouter, RectPart} from './groupedLayout';\n\nexport default function prepareAlbum(options: {\n container: HTMLElement,\n items: {w: number, h: number}[],\n maxWidth: number,\n minWidth: number,\n spacing: number,\n maxHeight?: number,\n forMedia?: true,\n noGroupedItem?: boolean\n}) {\n const layouter = new Layouter(options.items, options.maxWidth, options.minWidth, options.spacing, options.maxHeight);\n const layout = layouter.layout();\n\n const widthItem = layout.find((item) => item.sides & RectPart.Right);\n const width = widthItem.geometry.width + widthItem.geometry.x;\n\n const heightItem = layout.find((item) => item.sides & RectPart.Bottom);\n const height = heightItem.geometry.height + heightItem.geometry.y;\n\n const container = options.container;\n container.style.width = width + 'px';\n container.style.height = height + 'px';\n const children = container.children;\n\n layout.forEach(({geometry, sides}, idx) => {\n let div: HTMLElement;\n div = children[idx] as HTMLElement;\n if(!div) {\n div = document.createElement('div');\n container.append(div);\n }\n\n div.classList.add('album-item');\n if(!options.noGroupedItem) div.classList.add('grouped-item');\n\n div.style.width = (geometry.width / width * 100) + '%';\n div.style.height = (geometry.height / height * 100) + '%';\n div.style.top = (geometry.y / height * 100) + '%';\n div.style.left = (geometry.x / width * 100) + '%';\n\n if(sides & RectPart.Left && sides & RectPart.Top) {\n div.style.borderStartStartRadius = `calc(var(--border-start-start-radius) - ${options.spacing}px)`;\n }\n\n if(sides & RectPart.Left && sides & RectPart.Bottom) {\n div.style.borderEndStartRadius = `calc(var(--border-end-start-radius) - ${options.spacing}px)`;\n }\n\n if(sides & RectPart.Right && sides & RectPart.Top) {\n div.style.borderStartEndRadius = `calc(var(--border-start-end-radius) - ${options.spacing}px)`;\n }\n\n if(sides & RectPart.Right && sides & RectPart.Bottom) {\n div.style.borderEndEndRadius = `calc(var(--border-end-end-radius) - ${options.spacing}px)`;\n }\n\n if(options.forMedia) {\n const mediaDiv = document.createElement('div');\n mediaDiv.classList.add('album-item-media');\n\n div.append(mediaDiv);\n }\n\n // @ts-ignore\n // div.style.backgroundColor = '#' + Math.floor(Math.random() * (2 ** 24 - 1)).toString(16).padStart(6, '0');\n });\n\n /* if(options.forMedia) {\n layout.forEach((_, i) => {\n const mediaDiv = document.createElement('div');\n mediaDiv.classList.add('album-item-media');\n\n options.container.children[i].append(mediaDiv);\n });\n } */\n}\n","export default function getUnsafeRandomInt(min: number, max: number) {\n min = Math.ceil(min);\n max = Math.floor(max);\n return Math.floor(Math.random() * (max - min + 1)) + min;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// * thanks https://github.com/dkaraush/particles for webgl version\n\nimport {IS_MOBILE} from '../environment/userAgent';\nimport {animate} from '../helpers/animation';\nimport callbackify from '../helpers/callbackify';\nimport callbackifyAll from '../helpers/callbackifyAll';\nimport {Middleware} from '../helpers/middleware';\nimport clamp from '../helpers/number/clamp';\nimport getUnsafeRandomInt from '../helpers/number/getUnsafeRandomInt';\nimport {applyColorOnContext} from '../lib/rlottie/rlottiePlayer';\nimport animationIntersector, {AnimationItemGroup, AnimationItemWrapper} from './animationIntersector';\n\nexport class AnimationItemNested implements AnimationItemWrapper {\n public autoplay = true;\n public loop = true;\n public paused = true;\n\n constructor(private options: {\n onPlay: () => void,\n onPause: () => void,\n onDestroy?: () => void\n }) {}\n\n public remove() {\n this.pause();\n this.options.onDestroy?.();\n }\n\n public play() {\n if(!this.paused) {\n return;\n }\n\n this.paused = false;\n this.options.onPlay();\n }\n\n public pause() {\n if(this.paused) {\n return;\n }\n\n this.paused = true;\n this.options.onPause();\n }\n}\n\n// type DotRendererDot = {\n// x: number,\n// y: number,\n// opacity: number,\n// radius: number\n// mOpacity: number,\n// adding: boolean,\n// counter: number,\n// path: Path2D\n// };\nexport default class DotRenderer implements AnimationItemWrapper {\n private static shaderTexts: {[url: string]: string | Promise} = {};\n private static createdIndex = -1;\n\n private static instance: DotRenderer;\n private static drawCallbacks: Map void> = new Map();\n private static counter = 0;\n\n public canvas: HTMLCanvasElement;\n private context: WebGL2RenderingContext;\n // private dots: DotRendererDot[];\n\n private reset = true;\n private buffer: WebGLBuffer[];\n private bufferParticlesCount: number;\n private program: WebGLProgram;\n private timeHandle: WebGLUniformLocation;\n private deltaTimeHandle: WebGLUniformLocation;\n private sizeHandle: WebGLUniformLocation;\n private resetHandle: WebGLUniformLocation;\n private radiusHandle: WebGLUniformLocation;\n private seedHandle: WebGLUniformLocation;\n private noiseScaleHandle: WebGLUniformLocation;\n private noiseSpeedHandle: WebGLUniformLocation;\n private dampingMultHandle: WebGLUniformLocation;\n private velocityMultHandle: WebGLUniformLocation;\n private forceMultHandle: WebGLUniformLocation;\n private longevityHandle: WebGLUniformLocation;\n private maxVelocityHandle: WebGLUniformLocation;\n private noiseMovementHandle: WebGLUniformLocation;\n private colorHandle: WebGLUniformLocation;\n private lastDrawTime: number;\n private time: number;\n private bufferIndex: number;\n private inited: boolean;\n\n private config: {\n particlesCount: number,\n radius: number,\n seed: number,\n noiseScale: number,\n noiseSpeed: number,\n forceMult: number,\n velocityMult: number,\n dampingMult: number,\n maxVelocity: number,\n longevity: number,\n noiseMovement: number,\n timeScale: number,\n color: number\n };\n\n public paused: boolean;\n public autoplay: boolean;\n public tempId: number;\n\n private dpr: number;\n private width: number;\n private height: number;\n private multiply: number;\n\n public loop: boolean = true;\n private initPromise: MaybePromise;\n\n constructor() {\n const canvas = this.canvas = document.createElement('canvas');\n this.dpr = window.devicePixelRatio;\n canvas.classList.add('canvas-thumbnail', 'canvas-dots');\n\n this.paused = true;\n this.autoplay = true;\n this.tempId = 0;\n this.time = 0;\n this.bufferIndex = 0;\n // this.context = canvas.getContext('2d');\n this.context = canvas.getContext('webgl2'/* , {preserveDrawingBuffer: true} */);\n }\n\n private resize(width: number, height: number, multiply?: number, config: Partial = {}) {\n this.width = width;\n this.height = height;\n this.multiply = multiply;\n this.canvas.width = width * this.dpr;\n this.canvas.height = height * this.dpr;\n this.config = {\n particlesCount: clamp(width * height / (500 * 500) * 1000 * (IS_MOBILE ? 5 : 10), 500, 10000),\n radius: this.dpr * 1.6,\n seed: Math.random() * 10,\n noiseScale: 6,\n noiseSpeed: .6,\n forceMult: .6,\n velocityMult: 1.,\n dampingMult: .9999,\n maxVelocity: 6.,\n longevity: 1.4,\n noiseMovement: 4,\n timeScale: .65,\n color: 0xffffff,\n ...config\n };\n\n if(this.inited) {\n this.draw();\n }\n }\n\n private genBuffer() {\n if(this.buffer) {\n this.context.deleteBuffer(this.buffer[0]);\n this.context.deleteBuffer(this.buffer[1]);\n }\n\n this.buffer = [];\n for(let i = 0; i < 2; ++i) {\n this.buffer[i] = this.context.createBuffer();\n this.context.bindBuffer(this.context.ARRAY_BUFFER, this.buffer[i]);\n this.context.bufferData(this.context.ARRAY_BUFFER, (this.bufferParticlesCount = Math.ceil(this.config.particlesCount)) * 6 * 4, this.context.DYNAMIC_DRAW);\n }\n }\n\n private compileShader(type: number, path: string) {\n const shader = this.context.createShader(type);\n const shaderTextResult = DotRenderer.shaderTexts[path] ??=\n fetch(path)\n .then((response) => response.text())\n .then((text) => DotRenderer.shaderTexts[path] = text + '\\n//' + Math.random());\n return callbackify(shaderTextResult, (shaderText) => {\n this.context.shaderSource(shader, shaderText);\n this.context.compileShader(shader);\n if(!this.context.getShaderParameter(shader, this.context.COMPILE_STATUS)) {\n throw 'compile shader error:\\n' + this.context.getShaderInfoLog(shader);\n }\n return shader;\n });\n }\n\n private compileShaders() {\n return callbackifyAll([\n this.compileShader(this.context.VERTEX_SHADER, 'assets/img/spoiler_vertex.glsl'),\n this.compileShader(this.context.FRAGMENT_SHADER, 'assets/img/spoiler_fragment.glsl')\n ], (result) => result);\n }\n\n // private prepare() {\n // let count = Math.round(this.width * this.height / (35 * (IS_MOBILE ? 2 : 1)));\n // count *= this.multiply || 1;\n // count = Math.min(!liteMode.isAvailable('chat_spoilers') ? 400 : IS_MOBILE ? 1000 : 2200, count);\n // count = Math.round(count);\n // const dots: DotRendererDot[] = this.dots = new Array(count);\n\n // for(let i = 0; i < count; ++i) {\n // dots[i] = this.generateDot();\n // }\n // }\n\n // private generateDot(adding?: boolean): DotRendererDot {\n // const x = Math.floor(Math.random() * this.canvas.width);\n // const y = Math.floor(Math.random() * this.canvas.height);\n // const opacity = adding ? 0 : Math.random();\n // const radius = (Math.random() >= .8 ? 1 : 0.5) * this.dpr;\n // const path = new Path2D();\n // path.arc(x, y, radius, 0, 2 * Math.PI, false);\n // return {\n // x,\n // y,\n // opacity,\n // radius,\n // mOpacity: opacity,\n // adding: adding ?? Math.random() >= .5,\n // counter: 0,\n // path\n // };\n // }\n\n // private draw() {\n // const {context, canvas, dots} = this;\n // context.clearRect(0, 0, canvas.width, canvas.height);\n // context.fillStyle = '#fff';\n\n // const add = 0.02;\n // for(let i = 0, length = dots.length; i < length; ++i) {\n // const dot = dots[i];\n // const addOpacity = dot.adding ? add : -add;\n\n // dot.mOpacity += addOpacity;\n // // if(dot.mOpacity <= 0) dot.mOpacity = dot.opacity;\n\n // // const easedOpacity = easing(dot.mOpacity);\n // const easedOpacity = clamp(dot.mOpacity, 0, 1);\n // context.globalAlpha = easedOpacity;\n // context.fill(dot.path);\n\n // if(dot.mOpacity <= 0) {\n // dot.adding = true;\n\n // if(++dot.counter >= 1) {\n // dots[i] = this.generateDot(dot.adding);\n // }\n // } else if(dot.mOpacity >= 1) {\n // dot.adding = false;\n // }\n // }\n // }\n\n private draw() {\n if(!this.inited) {\n return;\n }\n\n const gl = this.context;\n const config = this.config;\n const now = Date.now();\n const dt = Math.min((now - this.lastDrawTime) / 1_000, 1) * config.timeScale;\n this.lastDrawTime = now;\n\n this.time += dt;\n\n if(this.bufferParticlesCount < config.particlesCount) {\n this.genBuffer();\n this.reset = true;\n }\n\n gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n gl.clear(gl.COLOR_BUFFER_BIT);\n\n gl.useProgram(this.program);\n gl.uniform1f(this.resetHandle, this.reset ? 1 : 0);\n if(this.reset) {\n this.time = 0;\n this.reset = false;\n }\n gl.uniform1f(this.timeHandle, this.time);\n gl.uniform1f(this.deltaTimeHandle, dt);\n gl.uniform2f(this.sizeHandle, this.canvas.width, this.canvas.height);\n gl.uniform1f(this.seedHandle, config.seed);\n gl.uniform1f(this.radiusHandle, config.radius);\n gl.uniform1f(this.noiseScaleHandle, config.noiseScale);\n gl.uniform1f(this.noiseSpeedHandle, config.noiseSpeed);\n gl.uniform1f(this.dampingMultHandle, config.dampingMult);\n gl.uniform1f(this.velocityMultHandle, config.velocityMult);\n gl.uniform1f(this.forceMultHandle, config.forceMult);\n gl.uniform1f(this.longevityHandle, config.longevity);\n gl.uniform1f(this.maxVelocityHandle, config.maxVelocity);\n gl.uniform1f(this.noiseMovementHandle, config.noiseMovement);\n gl.uniform3f(this.colorHandle,\n ((config.color >> 16) & 0xff) / 0xff,\n ((config.color >> 8) & 0xff) / 0xff,\n (config.color & 0xff) / 0xff\n );\n gl.bindBuffer(gl.ARRAY_BUFFER, this.buffer[this.bufferIndex]);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 24, 0);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 24, 8);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(2, 1, gl.FLOAT, false, 24, 16);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(3, 1, gl.FLOAT, false, 24, 20);\n gl.enableVertexAttribArray(3);\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, this.buffer[1 - this.bufferIndex]);\n gl.vertexAttribPointer(0, 2, gl.FLOAT, false, 24, 0);\n gl.enableVertexAttribArray(0);\n gl.vertexAttribPointer(1, 2, gl.FLOAT, false, 24, 8);\n gl.enableVertexAttribArray(1);\n gl.vertexAttribPointer(2, 1, gl.FLOAT, false, 24, 16);\n gl.enableVertexAttribArray(2);\n gl.vertexAttribPointer(3, 1, gl.FLOAT, false, 24, 20);\n gl.enableVertexAttribArray(3);\n gl.beginTransformFeedback(gl.POINTS);\n gl.drawArrays(gl.POINTS, 0, config.particlesCount);\n gl.endTransformFeedback();\n gl.bindBuffer(gl.ARRAY_BUFFER, null);\n gl.bindBufferBase(gl.TRANSFORM_FEEDBACK_BUFFER, 0, null);\n\n this.bufferIndex = 1 - this.bufferIndex;\n\n DotRenderer.drawCallbacks.forEach((draw) => draw());\n }\n\n public remove() {\n this.pause();\n this.destroy();\n }\n\n public pause() {\n if(this.paused) {\n return;\n }\n\n this.paused = true;\n ++this.tempId;\n }\n\n // public renderFirstFrame() {\n // if(!this.dots) {\n // this.prepare();\n // }\n\n // this.draw();\n // }\n\n public play() {\n if(!this.paused) {\n return;\n }\n\n this.paused = false;\n const tempId = ++this.tempId;\n this.lastDrawTime = Date.now();\n\n // if(!this.dots) {\n // this.prepare();\n // }\n\n animate(() => {\n if(this.tempId !== tempId || this.paused) {\n return false;\n }\n\n this.draw();\n return true;\n });\n }\n\n private _init(vertexShader: WebGLShader, fragmentShader: WebGLShader) {\n this.genBuffer();\n\n const gl = this.context;\n\n const program = this.program = gl.createProgram();\n gl.attachShader(program, vertexShader);\n gl.attachShader(program, fragmentShader);\n gl.transformFeedbackVaryings(program, ['outPosition', 'outVelocity', 'outTime', 'outDuration'], gl.INTERLEAVED_ATTRIBS);\n gl.linkProgram(program);\n if(!gl.getProgramParameter(program, gl.LINK_STATUS)) {\n throw 'program link error:\\n' + gl.getProgramInfoLog(program);\n }\n gl.deleteShader(vertexShader);\n gl.deleteShader(fragmentShader);\n\n this.timeHandle = gl.getUniformLocation(program, 'time');\n this.deltaTimeHandle = gl.getUniformLocation(program, 'deltaTime');\n this.sizeHandle = gl.getUniformLocation(program, 'size');\n this.resetHandle = gl.getUniformLocation(program, 'reset');\n this.radiusHandle = gl.getUniformLocation(program, 'r');\n this.seedHandle = gl.getUniformLocation(program, 'seed');\n this.noiseScaleHandle = gl.getUniformLocation(program, 'noiseScale');\n this.noiseSpeedHandle = gl.getUniformLocation(program, 'noiseSpeed');\n this.dampingMultHandle = gl.getUniformLocation(program, 'dampingMult');\n this.velocityMultHandle = gl.getUniformLocation(program, 'velocityMult');\n this.forceMultHandle = gl.getUniformLocation(program, 'forceMult');\n this.longevityHandle = gl.getUniformLocation(program, 'longevity');\n this.maxVelocityHandle = gl.getUniformLocation(program, 'maxVelocity');\n this.noiseMovementHandle = gl.getUniformLocation(program, 'noiseMovement');\n this.colorHandle = gl.getUniformLocation(program, 'color');\n\n gl.clearColor(0, 0, 0, 0);\n gl.viewport(0, 0, this.canvas.width, this.canvas.height);\n gl.enable(gl.BLEND);\n gl.blendFunc(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA);\n\n this.inited = true;\n this.lastDrawTime = Date.now();\n }\n\n private init() {\n return this.initPromise ??= callbackify(this.compileShaders(), (shaders) => {\n this._init(...shaders);\n this.draw();\n return true;\n });\n }\n\n private destroy() {\n if(this.buffer) {\n this.context.deleteBuffer(this.buffer[0]);\n this.context.deleteBuffer(this.buffer[1]);\n }\n\n this.buffer = null;\n this.context.deleteProgram(this.program);\n this.program = null;\n }\n\n public static create({\n width,\n height,\n middleware,\n animationGroup,\n multiply,\n config\n }: {\n width?: number,\n height?: number,\n middleware: Middleware,\n animationGroup: AnimationItemGroup,\n multiply?: number,\n config?: Partial\n }) {\n const index = ++this.createdIndex;\n let {instance} = this;\n if(!instance) {\n instance = this.instance = new DotRenderer();\n instance.resize(480, 480);\n (window as any).dotRenderer = instance;\n }\n // dotRenderer.renderFirstFrame();\n\n const canvas = document.createElement('canvas');\n canvas.classList.add('canvas-thumbnail', 'canvas-dots');\n const dpr = window.devicePixelRatio;\n if(width) {\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n }\n const context = canvas.getContext('2d');\n\n const rotate = (index % 4) === 1;\n const flipX = (index % 4) === 2;\n const flipY = (index % 4) === 3;\n\n const transforms: string[] = [\n rotate && 'rotate(180deg)',\n flipX && 'scaleX(-1)',\n flipY && 'scaleY(-1)'\n ].filter(Boolean);\n if(transforms.length) {\n canvas.style.transform = transforms.join(' ');\n }\n\n const x = getUnsafeRandomInt(0, instance.canvas.width - canvas.width);\n const y = getUnsafeRandomInt(0, instance.canvas.height - canvas.height);\n const draw = () => {\n const {width, height} = canvas;\n context.clearRect(0, 0, width, height);\n context.drawImage(\n instance.canvas,\n x,\n y,\n width,\n height,\n 0,\n 0,\n width,\n height\n );\n\n if(config?.color) {\n applyColorOnContext(context, '#' + config.color.toString(16), 0, 0, width, height);\n }\n };\n\n ++this.counter;\n const animation = new AnimationItemNested({\n onPlay: () => {\n this.drawCallbacks.set(canvas, draw);\n instance.play();\n },\n onPause: () => {\n this.drawCallbacks.delete(canvas);\n if(!this.drawCallbacks.size) {\n instance.pause();\n }\n },\n onDestroy: () => {\n if(!--this.counter) {\n instance.remove();\n this.instance = undefined;\n }\n }\n });\n\n animationIntersector.addAnimation({\n animation,\n group: animationGroup,\n observeElement: canvas,\n controlled: middleware,\n type: 'dots'\n });\n\n return {\n canvas,\n readyResult: width && (/* dotRenderer.resize(width, height, multiply, config), */instance.init())\n };\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport safePlay from '../../helpers/dom/safePlay';\nimport getImageFromStrippedThumb from '../../helpers/getImageFromStrippedThumb';\nimport {Document, Photo, PhotoSize} from '../../layer';\nimport DotRenderer from '../dotRenderer';\nimport SetTransition from '../singleTransition';\n\nexport function toggleMediaSpoiler(options: {\n mediaSpoiler: HTMLElement,\n reveal: boolean,\n destroyAfter?: boolean\n}) {\n const {mediaSpoiler, reveal, destroyAfter} = options;\n SetTransition({\n element: mediaSpoiler,\n forwards: reveal,\n className: 'is-revealing',\n duration: 250,\n onTransitionEnd: () => {\n if(reveal && destroyAfter) {\n mediaSpoiler.remove();\n mediaSpoiler.middlewareHelper.destroy();\n }\n }\n });\n}\n\nexport function onMediaSpoilerClick(options: {\n mediaSpoiler: HTMLElement,\n event: Event\n}) {\n const {mediaSpoiler, event} = options;\n cancelEvent(event);\n\n if(mediaSpoiler.classList.contains('is-revealing')) {\n return;\n }\n\n const video = mediaSpoiler.parentElement.querySelector('video');\n if(video && !mediaSpoiler.parentElement.querySelector('.video-play')) {\n video.autoplay = true;\n safePlay(video);\n }\n\n toggleMediaSpoiler({\n mediaSpoiler,\n reveal: true,\n destroyAfter: true\n });\n}\n\nfunction wrapMediaSpoilerWithImage(options: {\n image: Awaited>['image']\n} & Parameters[0]) {\n const {middleware, image} = options;\n if(!middleware()) {\n return;\n }\n\n image.classList.add('media-spoiler-thumbnail');\n\n const container = document.createElement('div');\n container.classList.add('media-spoiler-container');\n container.middlewareHelper = middleware.create();\n\n const {canvas, readyResult} = DotRenderer.create({\n ...options,\n middleware: container.middlewareHelper.get()\n });\n\n container.append(image, canvas);\n\n return {container, readyResult};\n}\n\nexport default async function wrapMediaSpoiler(\n options: Omit[0], 'image'> & {\n media: Document.document | Photo.photo\n }\n) {\n const {media} = options;\n const sizes = (media as Photo.photo).sizes || (media as Document.document).thumbs;\n const thumb = sizes.find((size) => size._ === 'photoStrippedSize') as PhotoSize.photoStrippedSize;\n if(!thumb) {\n return;\n }\n\n const {image, loadPromise} = getImageFromStrippedThumb(media, thumb, true);\n await loadPromise;\n\n const {container, readyResult} = wrapMediaSpoilerWithImage({\n ...options,\n image\n });\n\n if(readyResult instanceof Promise) {\n await readyResult;\n }\n\n return container;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {ChatAutoDownloadSettings} from '../../helpers/autoDownload';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {Middleware} from '../../helpers/middleware';\nimport {Document, Message, MessageMedia, Photo, PhotoSize} from '../../layer';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getMediaFromMessage from '../../lib/appManagers/utils/messages/getMediaFromMessage';\nimport choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize';\nimport rootScope from '../../lib/rootScope';\nimport {AnimationItemGroup} from '../animationIntersector';\nimport Chat from '../chat/chat';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport prepareAlbum from '../prepareAlbum';\nimport wrapMediaSpoiler from './mediaSpoiler';\nimport wrapPhoto from './photo';\nimport wrapVideo from './video';\n\nexport default function wrapAlbum({messages, media, attachmentDiv, middleware, uploading, lazyLoadQueue, isOut, chat, loadPromises, autoDownload, managers = rootScope.managers, animationGroup, spoilered, videoTimes, uploadingFileName}: {\n messages?: Message.message[],\n media?: (Photo.photo | Document.document)[],\n attachmentDiv: HTMLElement,\n middleware?: Middleware,\n lazyLoadQueue?: LazyLoadQueue,\n uploading?: boolean,\n isOut: boolean,\n chat: Chat,\n loadPromises?: Promise[],\n autoDownload?: ChatAutoDownloadSettings,\n managers?: AppManagers,\n animationGroup?: AnimationItemGroup,\n spoilered?: boolean,\n videoTimes?: HTMLElement[],\n uploadingFileName?: string[]\n}) {\n const items: {size: PhotoSize.photoSize, media: Photo.photo | Document.document, message: Message.message}[] = [];\n\n // !lowest msgID will be the FIRST in album\n for(const message of media || messages) {\n const isMessage = !!messages;\n const media = isMessage ? getMediaFromMessage(message as Message.message, true) : message;\n\n const size: any = media._ === 'photo' ?\n choosePhotoSize(media, 480, 480) :\n {w: (media as Document.document).w, h: (media as Document.document).h};\n items.push({size, media: media as any, message: isMessage ? message as Message.message : undefined});\n }\n\n /* // * pending\n if(storage[0] < 0) {\n items.reverse();\n } */\n\n prepareAlbum({\n container: attachmentDiv,\n items: items.map((i) => ({w: i.size.w, h: i.size.h})),\n maxWidth: mediaSizes.active.album.width,\n minWidth: 100,\n spacing: 1,\n forMedia: true,\n noGroupedItem: !messages\n });\n\n const {width, height} = attachmentDiv.style;\n const containerWidth = parseInt(width);\n const containerHeight = parseInt(height);\n\n items.forEach((item, idx) => {\n const {size, media, message} = item;\n\n const messageMedia = message?.media;\n const hasSpoiler = spoilered || !!(messageMedia as MessageMedia.messageMediaPhoto | MessageMedia.messageMediaDocument)?.pFlags?.spoiler;\n\n const div = attachmentDiv.children[idx] as HTMLElement;\n if(message) {\n div.dataset.mid = '' + message.mid;\n div.dataset.peerId = '' + message.peerId;\n } else {\n div.dataset.index = '' + idx;\n }\n const mediaDiv = div.firstElementChild as HTMLElement;\n const isPhoto = media._ === 'photo';\n let thumbPromise: Promise;\n if(isPhoto) {\n thumbPromise = wrapPhoto({\n photo: media,\n message,\n container: mediaDiv,\n boxWidth: 0,\n boxHeight: 0,\n isOut,\n lazyLoadQueue,\n middleware,\n size,\n loadPromises,\n autoDownloadSize: autoDownload.photo,\n managers,\n uploadingFileName: uploadingFileName?.[idx]\n });\n } else {\n thumbPromise = wrapVideo({\n doc: media,\n container: mediaDiv,\n message,\n boxWidth: 0,\n boxHeight: 0,\n withTail: false,\n isOut,\n lazyLoadQueue,\n middleware,\n loadPromises,\n autoDownload,\n managers,\n noAutoplayAttribute: true,\n uploadingFileName: uploadingFileName?.[idx]\n });\n }\n\n if(thumbPromise) {\n loadPromises?.push(thumbPromise);\n }\n\n if(hasSpoiler) {\n const promise = (thumbPromise || Promise.resolve()).then(async() => {\n if(!middleware()) {\n return;\n }\n\n const {width, height} = div.style;\n const itemWidth = +width.slice(0, -1) / 100 * containerWidth;\n const itemHeight = +height.slice(0, -1) / 100 * containerHeight;\n const container = await wrapMediaSpoiler({\n media,\n animationGroup,\n middleware,\n width: itemWidth,\n height: itemHeight\n });\n\n if(!middleware()) {\n return;\n }\n\n mediaDiv.append(container);\n });\n\n loadPromises?.push(promise);\n }\n\n const videoTime = videoTimes?.[idx];\n if(videoTime) {\n mediaDiv.append(videoTime);\n }\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\n// From https://raw.githubusercontent.com/FGRibreau/latenize/master/latinize_map.js\nconst LatinizeMap: {[k: string]: string} = {'Á': 'A', 'Ă': 'A', 'Ắ': 'A', 'Ặ': 'A', 'Ằ': 'A', 'Ẳ': 'A', 'Ẵ': 'A', 'Ǎ': 'A', 'Â': 'A', 'Ấ': 'A', 'Ậ': 'A', 'Ầ': 'A', 'Ẩ': 'A', 'Ẫ': 'A', 'Ä': 'A', 'Ǟ': 'A', 'Ȧ': 'A', 'Ǡ': 'A', 'Ạ': 'A', 'Ȁ': 'A', 'À': 'A', 'Ả': 'A', 'Ȃ': 'A', 'Ā': 'A', 'Ą': 'A', 'Å': 'A', 'Ǻ': 'A', 'Ḁ': 'A', 'Ⱥ': 'A', 'Ã': 'A', 'Ꜳ': 'AA', 'Æ': 'AE', 'Ǽ': 'AE', 'Ǣ': 'AE', 'Ꜵ': 'AO', 'Ꜷ': 'AU', 'Ꜹ': 'AV', 'Ꜻ': 'AV', 'Ꜽ': 'AY', 'Ḃ': 'B', 'Ḅ': 'B', 'Ɓ': 'B', 'Ḇ': 'B', 'Ƀ': 'B', 'Ƃ': 'B', 'Ć': 'C', 'Č': 'C', 'Ç': 'C', 'Ḉ': 'C', 'Ĉ': 'C', 'Ċ': 'C', 'Ƈ': 'C', 'Ȼ': 'C', 'Ď': 'D', 'Ḑ': 'D', 'Ḓ': 'D', 'Ḋ': 'D', 'Ḍ': 'D', 'Ɗ': 'D', 'Ḏ': 'D', 'Dz': 'D', 'Dž': 'D', 'Đ': 'D', 'Ƌ': 'D', 'DZ': 'DZ', 'DŽ': 'DZ', 'É': 'E', 'Ĕ': 'E', 'Ě': 'E', 'Ȩ': 'E', 'Ḝ': 'E', 'Ê': 'E', 'Ế': 'E', 'Ệ': 'E', 'Ề': 'E', 'Ể': 'E', 'Ễ': 'E', 'Ḙ': 'E', 'Ë': 'E', 'Ė': 'E', 'Ẹ': 'E', 'Ȅ': 'E', 'È': 'E', 'Ẻ': 'E', 'Ȇ': 'E', 'Ē': 'E', 'Ḗ': 'E', 'Ḕ': 'E', 'Ę': 'E', 'Ɇ': 'E', 'Ẽ': 'E', 'Ḛ': 'E', 'Ꝫ': 'ET', 'Ḟ': 'F', 'Ƒ': 'F', 'Ǵ': 'G', 'Ğ': 'G', 'Ǧ': 'G', 'Ģ': 'G', 'Ĝ': 'G', 'Ġ': 'G', 'Ɠ': 'G', 'Ḡ': 'G', 'Ǥ': 'G', 'Ḫ': 'H', 'Ȟ': 'H', 'Ḩ': 'H', 'Ĥ': 'H', 'Ⱨ': 'H', 'Ḧ': 'H', 'Ḣ': 'H', 'Ḥ': 'H', 'Ħ': 'H', 'Í': 'I', 'Ĭ': 'I', 'Ǐ': 'I', 'Î': 'I', 'Ï': 'I', 'Ḯ': 'I', 'İ': 'I', 'Ị': 'I', 'Ȉ': 'I', 'Ì': 'I', 'Ỉ': 'I', 'Ȋ': 'I', 'Ī': 'I', 'Į': 'I', 'Ɨ': 'I', 'Ĩ': 'I', 'Ḭ': 'I', 'Ꝺ': 'D', 'Ꝼ': 'F', 'Ᵹ': 'G', 'Ꞃ': 'R', 'Ꞅ': 'S', 'Ꞇ': 'T', 'Ꝭ': 'IS', 'Ĵ': 'J', 'Ɉ': 'J', 'Ḱ': 'K', 'Ǩ': 'K', 'Ķ': 'K', 'Ⱪ': 'K', 'Ꝃ': 'K', 'Ḳ': 'K', 'Ƙ': 'K', 'Ḵ': 'K', 'Ꝁ': 'K', 'Ꝅ': 'K', 'Ĺ': 'L', 'Ƚ': 'L', 'Ľ': 'L', 'Ļ': 'L', 'Ḽ': 'L', 'Ḷ': 'L', 'Ḹ': 'L', 'Ⱡ': 'L', 'Ꝉ': 'L', 'Ḻ': 'L', 'Ŀ': 'L', 'Ɫ': 'L', 'Lj': 'L', 'Ł': 'L', 'LJ': 'LJ', 'Ḿ': 'M', 'Ṁ': 'M', 'Ṃ': 'M', 'Ɱ': 'M', 'Ń': 'N', 'Ň': 'N', 'Ņ': 'N', 'Ṋ': 'N', 'Ṅ': 'N', 'Ṇ': 'N', 'Ǹ': 'N', 'Ɲ': 'N', 'Ṉ': 'N', 'Ƞ': 'N', 'Nj': 'N', 'Ñ': 'N', 'NJ': 'NJ', 'Ó': 'O', 'Ŏ': 'O', 'Ǒ': 'O', 'Ô': 'O', 'Ố': 'O', 'Ộ': 'O', 'Ồ': 'O', 'Ổ': 'O', 'Ỗ': 'O', 'Ö': 'O', 'Ȫ': 'O', 'Ȯ': 'O', 'Ȱ': 'O', 'Ọ': 'O', 'Ő': 'O', 'Ȍ': 'O', 'Ò': 'O', 'Ỏ': 'O', 'Ơ': 'O', 'Ớ': 'O', 'Ợ': 'O', 'Ờ': 'O', 'Ở': 'O', 'Ỡ': 'O', 'Ȏ': 'O', 'Ꝋ': 'O', 'Ꝍ': 'O', 'Ō': 'O', 'Ṓ': 'O', 'Ṑ': 'O', 'Ɵ': 'O', 'Ǫ': 'O', 'Ǭ': 'O', 'Ø': 'O', 'Ǿ': 'O', 'Õ': 'O', 'Ṍ': 'O', 'Ṏ': 'O', 'Ȭ': 'O', 'Ƣ': 'OI', 'Ꝏ': 'OO', 'Ɛ': 'E', 'Ɔ': 'O', 'Ȣ': 'OU', 'Ṕ': 'P', 'Ṗ': 'P', 'Ꝓ': 'P', 'Ƥ': 'P', 'Ꝕ': 'P', 'Ᵽ': 'P', 'Ꝑ': 'P', 'Ꝙ': 'Q', 'Ꝗ': 'Q', 'Ŕ': 'R', 'Ř': 'R', 'Ŗ': 'R', 'Ṙ': 'R', 'Ṛ': 'R', 'Ṝ': 'R', 'Ȑ': 'R', 'Ȓ': 'R', 'Ṟ': 'R', 'Ɍ': 'R', 'Ɽ': 'R', 'Ꜿ': 'C', 'Ǝ': 'E', 'Ś': 'S', 'Ṥ': 'S', 'Š': 'S', 'Ṧ': 'S', 'Ş': 'S', 'Ŝ': 'S', 'Ș': 'S', 'Ṡ': 'S', 'Ṣ': 'S', 'Ṩ': 'S', 'ẞ': 'SS', 'Ť': 'T', 'Ţ': 'T', 'Ṱ': 'T', 'Ț': 'T', 'Ⱦ': 'T', 'Ṫ': 'T', 'Ṭ': 'T', 'Ƭ': 'T', 'Ṯ': 'T', 'Ʈ': 'T', 'Ŧ': 'T', 'Ɐ': 'A', 'Ꞁ': 'L', 'Ɯ': 'M', 'Ʌ': 'V', 'Ꜩ': 'TZ', 'Ú': 'U', 'Ŭ': 'U', 'Ǔ': 'U', 'Û': 'U', 'Ṷ': 'U', 'Ü': 'U', 'Ǘ': 'U', 'Ǚ': 'U', 'Ǜ': 'U', 'Ǖ': 'U', 'Ṳ': 'U', 'Ụ': 'U', 'Ű': 'U', 'Ȕ': 'U', 'Ù': 'U', 'Ủ': 'U', 'Ư': 'U', 'Ứ': 'U', 'Ự': 'U', 'Ừ': 'U', 'Ử': 'U', 'Ữ': 'U', 'Ȗ': 'U', 'Ū': 'U', 'Ṻ': 'U', 'Ų': 'U', 'Ů': 'U', 'Ũ': 'U', 'Ṹ': 'U', 'Ṵ': 'U', 'Ꝟ': 'V', 'Ṿ': 'V', 'Ʋ': 'V', 'Ṽ': 'V', 'Ꝡ': 'VY', 'Ẃ': 'W', 'Ŵ': 'W', 'Ẅ': 'W', 'Ẇ': 'W', 'Ẉ': 'W', 'Ẁ': 'W', 'Ⱳ': 'W', 'Ẍ': 'X', 'Ẋ': 'X', 'Ý': 'Y', 'Ŷ': 'Y', 'Ÿ': 'Y', 'Ẏ': 'Y', 'Ỵ': 'Y', 'Ỳ': 'Y', 'Ƴ': 'Y', 'Ỷ': 'Y', 'Ỿ': 'Y', 'Ȳ': 'Y', 'Ɏ': 'Y', 'Ỹ': 'Y', 'Ź': 'Z', 'Ž': 'Z', 'Ẑ': 'Z', 'Ⱬ': 'Z', 'Ż': 'Z', 'Ẓ': 'Z', 'Ȥ': 'Z', 'Ẕ': 'Z', 'Ƶ': 'Z', 'IJ': 'IJ', 'Œ': 'OE', 'ᴀ': 'A', 'ᴁ': 'AE', 'ʙ': 'B', 'ᴃ': 'B', 'ᴄ': 'C', 'ᴅ': 'D', 'ᴇ': 'E', 'ꜰ': 'F', 'ɢ': 'G', 'ʛ': 'G', 'ʜ': 'H', 'ɪ': 'I', 'ʁ': 'R', 'ᴊ': 'J', 'ᴋ': 'K', 'ʟ': 'L', 'ᴌ': 'L', 'ᴍ': 'M', 'ɴ': 'N', 'ᴏ': 'O', 'ɶ': 'OE', 'ᴐ': 'O', 'ᴕ': 'OU', 'ᴘ': 'P', 'ʀ': 'R', 'ᴎ': 'N', 'ᴙ': 'R', 'ꜱ': 'S', 'ᴛ': 'T', 'ⱻ': 'E', 'ᴚ': 'R', 'ᴜ': 'U', 'ᴠ': 'V', 'ᴡ': 'W', 'ʏ': 'Y', 'ᴢ': 'Z', 'á': 'a', 'ă': 'a', 'ắ': 'a', 'ặ': 'a', 'ằ': 'a', 'ẳ': 'a', 'ẵ': 'a', 'ǎ': 'a', 'â': 'a', 'ấ': 'a', 'ậ': 'a', 'ầ': 'a', 'ẩ': 'a', 'ẫ': 'a', 'ä': 'a', 'ǟ': 'a', 'ȧ': 'a', 'ǡ': 'a', 'ạ': 'a', 'ȁ': 'a', 'à': 'a', 'ả': 'a', 'ȃ': 'a', 'ā': 'a', 'ą': 'a', 'ᶏ': 'a', 'ẚ': 'a', 'å': 'a', 'ǻ': 'a', 'ḁ': 'a', 'ⱥ': 'a', 'ã': 'a', 'ꜳ': 'aa', 'æ': 'ae', 'ǽ': 'ae', 'ǣ': 'ae', 'ꜵ': 'ao', 'ꜷ': 'au', 'ꜹ': 'av', 'ꜻ': 'av', 'ꜽ': 'ay', 'ḃ': 'b', 'ḅ': 'b', 'ɓ': 'b', 'ḇ': 'b', 'ᵬ': 'b', 'ᶀ': 'b', 'ƀ': 'b', 'ƃ': 'b', 'ɵ': 'o', 'ć': 'c', 'č': 'c', 'ç': 'c', 'ḉ': 'c', 'ĉ': 'c', 'ɕ': 'c', 'ċ': 'c', 'ƈ': 'c', 'ȼ': 'c', 'ď': 'd', 'ḑ': 'd', 'ḓ': 'd', 'ȡ': 'd', 'ḋ': 'd', 'ḍ': 'd', 'ɗ': 'd', 'ᶑ': 'd', 'ḏ': 'd', 'ᵭ': 'd', 'ᶁ': 'd', 'đ': 'd', 'ɖ': 'd', 'ƌ': 'd', 'ı': 'i', 'ȷ': 'j', 'ɟ': 'j', 'ʄ': 'j', 'dz': 'dz', 'dž': 'dz', 'é': 'e', 'ĕ': 'e', 'ě': 'e', 'ȩ': 'e', 'ḝ': 'e', 'ê': 'e', 'ế': 'e', 'ệ': 'e', 'ề': 'e', 'ể': 'e', 'ễ': 'e', 'ḙ': 'e', 'ë': 'e', 'ė': 'e', 'ẹ': 'e', 'ȅ': 'e', 'è': 'e', 'ẻ': 'e', 'ȇ': 'e', 'ē': 'e', 'ḗ': 'e', 'ḕ': 'e', 'ⱸ': 'e', 'ę': 'e', 'ᶒ': 'e', 'ɇ': 'e', 'ẽ': 'e', 'ḛ': 'e', 'ꝫ': 'et', 'ḟ': 'f', 'ƒ': 'f', 'ᵮ': 'f', 'ᶂ': 'f', 'ǵ': 'g', 'ğ': 'g', 'ǧ': 'g', 'ģ': 'g', 'ĝ': 'g', 'ġ': 'g', 'ɠ': 'g', 'ḡ': 'g', 'ᶃ': 'g', 'ǥ': 'g', 'ḫ': 'h', 'ȟ': 'h', 'ḩ': 'h', 'ĥ': 'h', 'ⱨ': 'h', 'ḧ': 'h', 'ḣ': 'h', 'ḥ': 'h', 'ɦ': 'h', 'ẖ': 'h', 'ħ': 'h', 'ƕ': 'hv', 'í': 'i', 'ĭ': 'i', 'ǐ': 'i', 'î': 'i', 'ï': 'i', 'ḯ': 'i', 'ị': 'i', 'ȉ': 'i', 'ì': 'i', 'ỉ': 'i', 'ȋ': 'i', 'ī': 'i', 'į': 'i', 'ᶖ': 'i', 'ɨ': 'i', 'ĩ': 'i', 'ḭ': 'i', 'ꝺ': 'd', 'ꝼ': 'f', 'ᵹ': 'g', 'ꞃ': 'r', 'ꞅ': 's', 'ꞇ': 't', 'ꝭ': 'is', 'ǰ': 'j', 'ĵ': 'j', 'ʝ': 'j', 'ɉ': 'j', 'ḱ': 'k', 'ǩ': 'k', 'ķ': 'k', 'ⱪ': 'k', 'ꝃ': 'k', 'ḳ': 'k', 'ƙ': 'k', 'ḵ': 'k', 'ᶄ': 'k', 'ꝁ': 'k', 'ꝅ': 'k', 'ĺ': 'l', 'ƚ': 'l', 'ɬ': 'l', 'ľ': 'l', 'ļ': 'l', 'ḽ': 'l', 'ȴ': 'l', 'ḷ': 'l', 'ḹ': 'l', 'ⱡ': 'l', 'ꝉ': 'l', 'ḻ': 'l', 'ŀ': 'l', 'ɫ': 'l', 'ᶅ': 'l', 'ɭ': 'l', 'ł': 'l', 'lj': 'lj', 'ſ': 's', 'ẜ': 's', 'ẛ': 's', 'ẝ': 's', 'ḿ': 'm', 'ṁ': 'm', 'ṃ': 'm', 'ɱ': 'm', 'ᵯ': 'm', 'ᶆ': 'm', 'ń': 'n', 'ň': 'n', 'ņ': 'n', 'ṋ': 'n', 'ȵ': 'n', 'ṅ': 'n', 'ṇ': 'n', 'ǹ': 'n', 'ɲ': 'n', 'ṉ': 'n', 'ƞ': 'n', 'ᵰ': 'n', 'ᶇ': 'n', 'ɳ': 'n', 'ñ': 'n', 'nj': 'nj', 'ó': 'o', 'ŏ': 'o', 'ǒ': 'o', 'ô': 'o', 'ố': 'o', 'ộ': 'o', 'ồ': 'o', 'ổ': 'o', 'ỗ': 'o', 'ö': 'o', 'ȫ': 'o', 'ȯ': 'o', 'ȱ': 'o', 'ọ': 'o', 'ő': 'o', 'ȍ': 'o', 'ò': 'o', 'ỏ': 'o', 'ơ': 'o', 'ớ': 'o', 'ợ': 'o', 'ờ': 'o', 'ở': 'o', 'ỡ': 'o', 'ȏ': 'o', 'ꝋ': 'o', 'ꝍ': 'o', 'ⱺ': 'o', 'ō': 'o', 'ṓ': 'o', 'ṑ': 'o', 'ǫ': 'o', 'ǭ': 'o', 'ø': 'o', 'ǿ': 'o', 'õ': 'o', 'ṍ': 'o', 'ṏ': 'o', 'ȭ': 'o', 'ƣ': 'oi', 'ꝏ': 'oo', 'ɛ': 'e', 'ᶓ': 'e', 'ɔ': 'o', 'ᶗ': 'o', 'ȣ': 'ou', 'ṕ': 'p', 'ṗ': 'p', 'ꝓ': 'p', 'ƥ': 'p', 'ᵱ': 'p', 'ᶈ': 'p', 'ꝕ': 'p', 'ᵽ': 'p', 'ꝑ': 'p', 'ꝙ': 'q', 'ʠ': 'q', 'ɋ': 'q', 'ꝗ': 'q', 'ŕ': 'r', 'ř': 'r', 'ŗ': 'r', 'ṙ': 'r', 'ṛ': 'r', 'ṝ': 'r', 'ȑ': 'r', 'ɾ': 'r', 'ᵳ': 'r', 'ȓ': 'r', 'ṟ': 'r', 'ɼ': 'r', 'ᵲ': 'r', 'ᶉ': 'r', 'ɍ': 'r', 'ɽ': 'r', 'ↄ': 'c', 'ꜿ': 'c', 'ɘ': 'e', 'ɿ': 'r', 'ś': 's', 'ṥ': 's', 'š': 's', 'ṧ': 's', 'ş': 's', 'ŝ': 's', 'ș': 's', 'ṡ': 's', 'ṣ': 's', 'ṩ': 's', 'ʂ': 's', 'ᵴ': 's', 'ᶊ': 's', 'ȿ': 's', 'ɡ': 'g', 'ß': 'ss', 'ᴑ': 'o', 'ᴓ': 'o', 'ᴝ': 'u', 'ť': 't', 'ţ': 't', 'ṱ': 't', 'ț': 't', 'ȶ': 't', 'ẗ': 't', 'ⱦ': 't', 'ṫ': 't', 'ṭ': 't', 'ƭ': 't', 'ṯ': 't', 'ᵵ': 't', 'ƫ': 't', 'ʈ': 't', 'ŧ': 't', 'ᵺ': 'th', 'ɐ': 'a', 'ᴂ': 'ae', 'ǝ': 'e', 'ᵷ': 'g', 'ɥ': 'h', 'ʮ': 'h', 'ʯ': 'h', 'ᴉ': 'i', 'ʞ': 'k', 'ꞁ': 'l', 'ɯ': 'm', 'ɰ': 'm', 'ᴔ': 'oe', 'ɹ': 'r', 'ɻ': 'r', 'ɺ': 'r', 'ⱹ': 'r', 'ʇ': 't', 'ʌ': 'v', 'ʍ': 'w', 'ʎ': 'y', 'ꜩ': 'tz', 'ú': 'u', 'ŭ': 'u', 'ǔ': 'u', 'û': 'u', 'ṷ': 'u', 'ü': 'u', 'ǘ': 'u', 'ǚ': 'u', 'ǜ': 'u', 'ǖ': 'u', 'ṳ': 'u', 'ụ': 'u', 'ű': 'u', 'ȕ': 'u', 'ù': 'u', 'ủ': 'u', 'ư': 'u', 'ứ': 'u', 'ự': 'u', 'ừ': 'u', 'ử': 'u', 'ữ': 'u', 'ȗ': 'u', 'ū': 'u', 'ṻ': 'u', 'ų': 'u', 'ᶙ': 'u', 'ů': 'u', 'ũ': 'u', 'ṹ': 'u', 'ṵ': 'u', 'ᵫ': 'ue', 'ꝸ': 'um', 'ⱴ': 'v', 'ꝟ': 'v', 'ṿ': 'v', 'ʋ': 'v', 'ᶌ': 'v', 'ⱱ': 'v', 'ṽ': 'v', 'ꝡ': 'vy', 'ẃ': 'w', 'ŵ': 'w', 'ẅ': 'w', 'ẇ': 'w', 'ẉ': 'w', 'ẁ': 'w', 'ⱳ': 'w', 'ẘ': 'w', 'ẍ': 'x', 'ẋ': 'x', 'ᶍ': 'x', 'ý': 'y', 'ŷ': 'y', 'ÿ': 'y', 'ẏ': 'y', 'ỵ': 'y', 'ỳ': 'y', 'ƴ': 'y', 'ỷ': 'y', 'ỿ': 'y', 'ȳ': 'y', 'ẙ': 'y', 'ɏ': 'y', 'ỹ': 'y', 'ź': 'z', 'ž': 'z', 'ẑ': 'z', 'ʑ': 'z', 'ⱬ': 'z', 'ż': 'z', 'ẓ': 'z', 'ȥ': 'z', 'ẕ': 'z', 'ᵶ': 'z', 'ᶎ': 'z', 'ʐ': 'z', 'ƶ': 'z', 'ɀ': 'z', 'ff': 'ff', 'ffi': 'ffi', 'ffl': 'ffl', 'fi': 'fi', 'fl': 'fl', 'ij': 'ij', 'œ': 'oe', 'st': 'st', 'ₐ': 'a', 'ₑ': 'e', 'ᵢ': 'i', 'ⱼ': 'j', 'ₒ': 'o', 'ᵣ': 'r', 'ᵤ': 'u', 'ᵥ': 'v', 'ₓ': 'x', 'Ё': 'YO', 'Й': 'I', 'Ц': 'TS', 'У': 'U', 'К': 'K', 'Е': 'E', 'Н': 'N', 'Г': 'G', 'Ш': 'SH', 'Щ': 'SCH', 'З': 'Z', 'Х': 'H', 'Ъ': '', 'ё': 'yo', 'й': 'i', 'ц': 'ts', 'у': 'u', 'к': 'k', 'е': 'e', 'н': 'n', 'г': 'g', 'ш': 'sh', 'щ': 'sch', 'з': 'z', 'х': 'h', 'ъ': '', 'Ф': 'F', 'Ы': 'I', 'В': 'V', 'А': 'A', 'П': 'P', 'Р': 'R', 'О': 'O', 'Л': 'L', 'Д': 'D', 'Ж': 'ZH', 'Э': 'E', 'ф': 'f', 'ы': 'i', 'в': 'v', 'а': 'a', 'п': 'p', 'р': 'r', 'о': 'o', 'л': 'l', 'д': 'd', 'ж': 'zh', 'э': 'e', 'Я': 'Ya', 'Ч': 'CH', 'С': 'S', 'М': 'M', 'И': 'I', 'Т': 'T', 'Ь': '', 'Б': 'B', 'Ю': 'YU', 'я': 'ya', 'ч': 'ch', 'с': 's', 'м': 'm', 'и': 'i', 'т': 't', 'ь': '', 'б': 'b', 'ю': 'yu'};\n\nexport default LatinizeMap;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/zhukov/webogram\n * Copyright (C) 2014 Igor Zhukov \n * https://github.com/zhukov/webogram/blob/master/LICENSE\n */\n\nimport LatinizeMap from '../config/latinizeMap';\n\nexport const badCharsRe = /[`~!@#$%^&*()\\-_=+\\[\\]\\\\|{}'\";:\\/?.>,<]+/g;\nconst trimRe = /^\\s+|\\s$/g;\n\nconst C2L: {[k: string]: string} = {\n 'й': 'q',\n 'ц': 'w',\n 'у': 'e',\n 'к': 'r',\n 'е': 't',\n 'н': 'y',\n 'г': 'u',\n 'ш': 'i',\n 'щ': 'o',\n 'з': 'p',\n 'х': '[',\n 'ъ': ']',\n 'ф': 'a',\n 'ы': 's',\n 'в': 'd',\n 'а': 'f',\n 'п': 'g',\n 'р': 'h',\n 'о': 'j',\n 'л': 'k',\n 'д': 'l',\n 'ж': ';',\n 'э': '\\'',\n 'я': 'z',\n 'ч': 'x',\n 'с': 'c',\n 'м': 'v',\n 'и': 'b',\n 'т': 'n',\n 'ь': 'm',\n 'б': ',',\n 'ю': '.',\n '.': '/'\n};\n\nexport function clearBadCharsAndTrim(text: string) {\n return text.replace(badCharsRe, '').replace(trimRe, '');\n}\n\nexport function fixCyrillic(text: string) {\n return text.toLowerCase().replace(/[\\wа-я]/g, (ch) => {\n const latinizeCh = C2L[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport function latinizeString(text: string) {\n return text.replace(/[^A-Za-z0-9]/g, (ch) => {\n const latinizeCh = LatinizeMap[ch];\n return latinizeCh ?? ch;\n });\n}\n\nexport default function cleanSearchText(text: string, latinize = true) {\n return processSearchText(text, {\n clearBadChars: true,\n latinize,\n ignoreCase: true\n });\n}\n\nexport type ProcessSearchTextOptions = Partial<{\n clearBadChars: boolean,\n latinize: boolean,\n ignoreCase: boolean,\n includeTag: boolean\n}>;\n\nexport function processSearchText(text = '', options: ProcessSearchTextOptions = {}) {\n const hasTag = options.includeTag && text.charAt(0) === '%';\n const originalText = text;\n if(options.clearBadChars) text = clearBadCharsAndTrim(text);\n if(options.latinize) text = latinizeString(text);\n if(options.ignoreCase) text = text.toLowerCase();\n if(hasTag) text = '%' + text;\n if(options.latinize) text += '\\x01' + fixCyrillic(originalText);\n return text;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport MEDIA_MIME_TYPES_SUPPORTED from '../../environment/mediaMimeTypesSupport';\nimport {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {clearBadCharsAndTrim} from '../../helpers/cleanSearchText';\nimport {formatFullSentTime} from '../../helpers/date';\nimport {simulateClickEvent, attachClickEvent} from '../../helpers/dom/clickEvent';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport formatBytes from '../../helpers/formatBytes';\nimport liteMode from '../../helpers/liteMode';\nimport {MediaSizeType} from '../../helpers/mediaSizes';\nimport noop from '../../helpers/noop';\nimport {Message, MessageMedia, WebPage} from '../../layer';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport appDownloadManager, {Progress} from '../../lib/appManagers/appDownloadManager';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getDownloadMediaDetails from '../../lib/appManagers/utils/download/getDownloadMediaDetails';\nimport choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize';\nimport {joinElementsWith} from '../../lib/langPack';\nimport {MAX_FILE_SAVE_SIZE} from '../../lib/mtproto/mtproto_config';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport wrapPlainText from '../../lib/richTextProcessor/wrapPlainText';\nimport rootScope from '../../lib/rootScope';\nimport type {ThumbCache} from '../../lib/storages/thumbs';\nimport {MediaSearchContext} from '../appMediaPlaybackController';\nimport AudioElement from '../audio';\nimport confirmationPopup from '../confirmationPopup';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport {MiddleEllipsisElement} from '../middleEllipsis';\nimport ProgressivePreloader from '../preloader';\nimport wrapPhoto from './photo';\nimport wrapSenderToPeer from './senderToPeer';\nimport wrapSentTime from './sentTime';\n\nrootScope.addEventListener('document_downloading', (docId) => {\n const elements = Array.from(document.querySelectorAll(`.document[data-doc-id=\"${docId}\"]`)) as HTMLElement[];\n elements.forEach((element) => {\n if(element.querySelector('.preloader-container.manual')) {\n simulateClickEvent(element);\n }\n });\n});\n\nexport default async function wrapDocument({message, withTime, fontWeight, voiceAsMusic, showSender, searchContext, loadPromises, autoDownloadSize, lazyLoadQueue, sizeType, managers = rootScope.managers, cacheContext, fontSize, getSize, canTranscribeVoice, isOut, uploadingFileName}: {\n message: Message.message,\n withTime?: boolean,\n fontWeight?: number,\n voiceAsMusic?: boolean,\n showSender?: boolean,\n searchContext?: MediaSearchContext,\n loadPromises?: Promise[],\n autoDownloadSize?: number,\n lazyLoadQueue?: LazyLoadQueue,\n sizeType?: MediaSizeType,\n managers?: AppManagers,\n cacheContext?: ThumbCache,\n fontSize?: number,\n getSize?: () => number,\n canTranscribeVoice?: boolean,\n isOut?: boolean,\n uploadingFileName?: string\n}): Promise {\n fontWeight ??= 500;\n sizeType ??= '' as any;\n fontSize ??= 16;\n const noAutoDownload = autoDownloadSize === 0;\n\n const doc = ((message.media as MessageMedia.messageMediaDocument).document || ((message.media as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage).document) as MyDocument;\n uploadingFileName ??= message?.uploadingFileName?.[0];\n if(doc.type === 'audio' || doc.type === 'voice' || doc.type === 'round') {\n const audioElement = new AudioElement();\n audioElement.withTime = withTime;\n audioElement.message = message;\n audioElement.noAutoDownload = noAutoDownload;\n audioElement.lazyLoadQueue = lazyLoadQueue;\n audioElement.loadPromises = loadPromises;\n audioElement.uploadingFileName = uploadingFileName;\n if(canTranscribeVoice && doc.type === 'voice') audioElement.transcriptionState = 0;\n (audioElement as any).getSize = getSize;\n\n if(voiceAsMusic) audioElement.voiceAsMusic = voiceAsMusic;\n if(searchContext) audioElement.searchContext = searchContext;\n if(showSender) audioElement.showSender = showSender;\n\n audioElement.dataset.fontWeight = '' + fontWeight;\n audioElement.dataset.fontSize = '' + fontSize;\n audioElement.dataset.sizeType = sizeType;\n if(isOut) audioElement.classList.add('is-out');\n await audioElement.render();\n return audioElement;\n }\n\n const extSplitted = doc.file_name ? doc.file_name.split('.') : '';\n let ext = '';\n ext = extSplitted.length > 1 && Array.isArray(extSplitted) ?\n clearBadCharsAndTrim(extSplitted.pop().split(' ', 1)[0].toLowerCase()) :\n 'file';\n\n const docDiv = document.createElement('div');\n docDiv.classList.add('document', `ext-${ext}`);\n docDiv.dataset.docId = '' + doc.id;\n (docDiv as any).doc = doc;\n\n // return docDiv;\n\n const icoDiv = document.createElement('div');\n icoDiv.classList.add('document-ico');\n let icoTextEl: HTMLElement;\n\n const hadContext = !!cacheContext;\n const getCacheContext = () => {\n return hadContext ? cacheContext : apiManagerProxy.getCacheContext(doc);\n };\n\n cacheContext = getCacheContext();\n let hasThumb = false;\n if((doc.thumbs?.length || (message.pFlags.is_outgoing && cacheContext.url && doc.type === 'photo'))/* && doc.mime_type !== 'image/gif' */) {\n docDiv.classList.add('document-with-thumb');\n hasThumb = true;\n\n const imgs: (HTMLImageElement | HTMLCanvasElement | HTMLVideoElement)[] = [];\n // ! WARNING, use thumbs for check when thumb will be generated for media\n if(message.pFlags.is_outgoing && ['photo', 'video'].includes(doc.type) && cacheContext.url) {\n icoDiv.innerHTML = ``;\n imgs.push(icoDiv.firstElementChild as HTMLImageElement);\n } else {\n const perf = performance.now();\n const wrapped = await wrapPhoto({\n photo: doc,\n message: null,\n container: icoDiv,\n boxWidth: 54,\n boxHeight: 54,\n loadPromises,\n withoutPreloader: true,\n lazyLoadQueue,\n size: choosePhotoSize(doc, 54, 54, true),\n managers\n });\n // console.log('was wrapping photo', performance.now() - perf);\n icoDiv.style.width = icoDiv.style.height = '';\n if(wrapped.images.thumb) imgs.push(wrapped.images.thumb);\n if(wrapped.images.full) imgs.push(wrapped.images.full);\n }\n\n imgs.forEach((img) => img.classList.add('document-thumb'));\n } else {\n icoTextEl = document.createElement('span');\n icoTextEl.classList.add('document-ico-text');\n icoTextEl.innerText = ext;\n icoDiv.append(icoTextEl);\n }\n\n // let fileName = stringMiddleOverflow(doc.file_name || 'Unknown.file', 26);\n const fileName = doc.file_name ? wrapPlainText(doc.file_name) : 'Unknown.file';\n const descriptionEl = document.createElement('div');\n descriptionEl.classList.add('document-description');\n const bytesContainer = document.createElement('span');\n const bytesEl = formatBytes(doc.size);\n const bytesJoiner = ' / ';\n\n const descriptionParts: (HTMLElement | string | DocumentFragment)[] = [bytesEl];\n\n if(withTime) {\n descriptionParts.push(formatFullSentTime(message.date));\n }\n\n if(showSender) {\n descriptionParts.push(await wrapSenderToPeer(message));\n }\n\n if(!withTime && !showSender) {\n const b = document.createElement('span');\n const bytesMaxEl = formatBytes(doc.size);\n b.append(bytesJoiner, bytesMaxEl);\n b.style.visibility = 'hidden';\n descriptionParts.push(b);\n }\n\n docDiv.innerHTML = `\n ${(cacheContext.downloaded && !uploadingFileName) || !message.mid || !hasThumb ? '' : `
`}\n
\n
\n `;\n\n const nameDiv = docDiv.querySelector('.document-name') as HTMLElement;\n const middleEllipsisEl = new MiddleEllipsisElement();\n middleEllipsisEl.dataset.fontWeight = '' + fontWeight;\n middleEllipsisEl.dataset.fontSize = '' + fontSize;\n middleEllipsisEl.dataset.sizeType = sizeType;\n (middleEllipsisEl as any).getSize = getSize;\n middleEllipsisEl.textContent = fileName;\n // setInnerHTML(middleEllipsisEl, fileName);\n\n // * new media popup\n if(!message.mid) {\n docDiv.classList.add('downloaded');\n }\n\n nameDiv.append(middleEllipsisEl);\n\n if(showSender) {\n nameDiv.append(wrapSentTime(message));\n }\n\n const sizeDiv = docDiv.querySelector('.document-size') as HTMLElement;\n bytesContainer.append(...joinElementsWith(descriptionParts, ' · '));\n sizeDiv.append(bytesContainer);\n\n docDiv.prepend(icoDiv);\n\n if(!uploadingFileName && message.pFlags.is_outgoing && !message.mid) {\n return docDiv;\n }\n\n const canSaveToCache = doc.size <= MAX_FILE_SAVE_SIZE;\n\n let downloadDiv: HTMLElement, preloader: ProgressivePreloader = null;\n const onLoad = () => {\n docDiv.classList.remove('downloading');\n\n if(/* !hasThumb || */(doc.size > MAX_FILE_SAVE_SIZE && !uploadingFileName)) {\n preloader.setManual();\n preloader.attach(downloadDiv);\n preloader.preloader.classList.add('manual');\n preloader.setDownloadFunction(load);\n return;\n }\n\n if(canSaveToCache) {\n docDiv.classList.add('downloaded');\n }\n\n if(downloadDiv) {\n if(downloadDiv !== icoDiv) {\n const _downloadDiv = downloadDiv;\n setTimeout(() => {\n _downloadDiv.remove();\n }, 200);\n }\n\n downloadDiv = null;\n }\n\n if(preloader) {\n preloader = null;\n }\n };\n\n const addByteProgress = (promise: CancellablePromise) => {\n docDiv.classList.add('downloading');\n\n const sizeContainer = document.createElement('span');\n const _bytesContainer = formatBytes(doc.size);\n sizeContainer.style.position = 'absolute';\n sizeContainer.style.left = '0';\n promise.then(onLoad, noop).finally(() => {\n // sizeContainer.replaceWith(bytesContainer);\n bytesContainer.style.visibility = '';\n sizeContainer.remove();\n // b && b.classList.remove('hide');\n });\n\n // b && b.classList.add('hide');\n\n const format = (bytes: number) => formatBytes(bytes);\n let d = format(0);\n bytesContainer.style.visibility = 'hidden';\n // bytesContainer.replaceWith(sizeContainer);\n sizeContainer.append(d, bytesJoiner, _bytesContainer);\n bytesContainer.parentElement.append(sizeContainer);\n promise.addNotifyListener((progress: Progress) => {\n const _d = format(progress.done);\n d.replaceWith(_d);\n d = _d;\n });\n };\n\n // ! DO NOT USE ASYNC/AWAIT HERE ! SAFARI WON'T LET DOWNLOAD THE FILE BECAUSE OF ASYNC\n const load = (e?: Event) => {\n const save = !e || e.isTrusted;\n const doc = (docDiv as any).doc;\n // const doc = await managers.appDocsManager.getDoc(docDiv.dataset.docId);\n let download: CancellablePromise;\n const queueId = appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : undefined;\n if(!save) {\n download = appDownloadManager.downloadToDisc({media: doc, queueId}, true);\n } else if(doc.type === 'pdf' && false) {\n const canOpenAfter = /* managers.appDocsManager.downloading.has(doc.id) || */!preloader || preloader.detached;\n download = appDownloadManager.downloadMediaURL({media: doc, queueId});\n if(canOpenAfter) {\n download.then(() => {\n setTimeout(async() => { // wait for preloader animation end\n const url = (getCacheContext()).url;\n window.open(url);\n }, liteMode.isAvailable('animations') ? 250 : 0);\n });\n }\n } else if(\n MEDIA_MIME_TYPES_SUPPORTED.has(doc.mime_type) &&\n doc.thumbs?.length &&\n canSaveToCache\n ) {\n download = appDownloadManager.downloadMediaURL({media: doc, queueId});\n } else {\n download = appDownloadManager.downloadToDisc({media: doc, queueId});\n\n if(doc.mime_type === 'image/svg+xml') {\n confirmationPopup({\n descriptionLangKey: 'Chat.File.QuickLook.Svg',\n button: {\n langKey: 'OK',\n isCancel: true\n }\n });\n }\n }\n\n download.catch(() => {\n docDiv.classList.remove('downloading');\n });\n\n if(downloadDiv) {\n preloader.attach(downloadDiv, true, download);\n addByteProgress(download);\n }\n };\n\n const {fileName: downloadFileName} = getDownloadMediaDetails({media: doc, downloadId: '1'});\n if(await managers.apiFileManager.isDownloading(downloadFileName)) {\n downloadDiv = docDiv.querySelector('.document-download') || icoDiv;\n const promise = appDownloadManager.downloadToDisc({media: doc}, true);\n\n preloader = new ProgressivePreloader();\n preloader.attach(downloadDiv, false, promise);\n preloader.setDownloadFunction(load);\n addByteProgress(promise);\n } else if(!cacheContext.downloaded || uploadingFileName) {\n downloadDiv = docDiv.querySelector('.document-download') || icoDiv;\n preloader = new ProgressivePreloader({\n isUpload: !!uploadingFileName\n });\n\n if(!uploadingFileName) {\n preloader.construct();\n preloader.setManual();\n preloader.attach(downloadDiv);\n preloader.setDownloadFunction(load);\n\n if(autoDownloadSize !== undefined && autoDownloadSize >= doc.size) {\n simulateClickEvent(preloader.preloader);\n }\n } else {\n const uploadPromise = appDownloadManager.getUpload(uploadingFileName);\n preloader.attachPromise(uploadPromise);\n preloader.attach(downloadDiv);\n addByteProgress(uploadPromise);\n }\n }\n\n attachClickEvent(docDiv, (e) => {\n if(findUpClassName(e.target, 'time')) { // prevent downloading by clicking on time\n return;\n }\n\n if(preloader) {\n preloader.onClick(e);\n } else {\n load(e);\n }\n });\n\n return docDiv;\n}\n","import {Document, Message, MessageMedia} from '../../../../layer';\n\nexport default function getMediaDurationFromMessage(message: Message.message) {\n if(!message) return undefined;\n const doc = (message.media as MessageMedia.messageMediaDocument)?.document as Document.document;\n const duration = ((['voice', 'audio', 'video'] as Document.document['type'][]).includes(doc?.type) && doc.duration) || undefined;\n return duration;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {MediaSizeType} from '../../helpers/mediaSizes';\nimport {Message} from '../../layer';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getMediaDurationFromMessage from '../../lib/appManagers/utils/messages/getMediaDurationFromMessage';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport {MediaSearchContext} from '../appMediaPlaybackController';\nimport Chat from '../chat/chat';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport TranslatableMessage from '../translatableMessage';\nimport wrapDocument from './document';\n\nexport default async function wrapGroupedDocuments({\n albumMustBeRenderedFull,\n message,\n bubble,\n messageDiv,\n chat,\n loadPromises,\n autoDownloadSize,\n lazyLoadQueue,\n searchContext,\n useSearch,\n sizeType,\n managers,\n fontWeight,\n fontSize,\n richTextFragment,\n richTextOptions,\n canTranscribeVoice,\n translatableParams,\n factCheckBox,\n isOut\n}: {\n albumMustBeRenderedFull: boolean,\n message: any,\n messageDiv: HTMLElement,\n bubble: HTMLElement,\n uploading?: boolean,\n chat: Chat,\n loadPromises?: Promise[],\n autoDownloadSize?: number,\n lazyLoadQueue?: LazyLoadQueue,\n searchContext?: MediaSearchContext,\n useSearch?: boolean,\n sizeType?: MediaSizeType,\n managers?: AppManagers,\n fontWeight?: number,\n fontSize?: number,\n richTextFragment?: DocumentFragment | HTMLElement,\n richTextOptions?: Parameters[1]\n canTranscribeVoice?: boolean,\n translatableParams: Parameters[0],\n factCheckBox?: HTMLElement,\n isOut?: boolean\n}) {\n let nameContainer: HTMLElement;\n const {peerId} = message;\n const mids = albumMustBeRenderedFull ? await chat.getMidsByMid(message.peerId, message.mid) : [message.mid];\n /* if(isPending) {\n mids.reverse();\n } */\n\n const promises = mids.map(async(mid, idx, arr) => {\n const message = chat.getMessageByPeer(peerId, mid) as Message.message;\n const div = await wrapDocument({\n message,\n loadPromises,\n autoDownloadSize,\n lazyLoadQueue,\n searchContext,\n sizeType,\n managers,\n fontWeight,\n fontSize,\n canTranscribeVoice,\n isOut\n });\n\n const container = document.createElement('div');\n container.classList.add('document-container');\n container.dataset.mid = '' + mid;\n container.dataset.peerId = '' + message.peerId;\n\n const wrapper = document.createElement('div');\n wrapper.classList.add('document-wrapper');\n\n const isFirst = idx === 0;\n const isLast = idx === (arr.length - 1);\n\n if(isFirst) container.classList.add('is-first');\n if(isLast) container.classList.add('is-last');\n // if(!(isFirst && isLast)) container.classList.add('has-sibling');\n\n let messageDiv: HTMLElement;\n if(message.message || (isLast && factCheckBox)) {\n messageDiv = document.createElement('div');\n messageDiv.classList.add('document-message');\n }\n\n if(message.message) {\n let fragment = richTextFragment;\n if(!fragment) {\n if(translatableParams) {\n fragment = TranslatableMessage({\n ...translatableParams,\n message,\n richTextOptions: {\n ...translatableParams.richTextOptions,\n maxMediaTimestamp: getMediaDurationFromMessage(message)\n }\n });\n } else {\n fragment = wrapRichText(message.message, {\n ...richTextOptions,\n entities: message.totalEntities,\n maxMediaTimestamp: getMediaDurationFromMessage(message)\n });\n }\n }\n\n setInnerHTML(messageDiv, fragment);\n }\n\n if(factCheckBox && messageDiv && isLast) {\n messageDiv.append(factCheckBox);\n }\n\n if(mids.length > 1) {\n const selection = document.createElement('div');\n selection.classList.add('document-selection');\n container.append(selection);\n\n container.classList.add('grouped-item');\n\n if(idx === 0) {\n nameContainer = wrapper;\n }\n }\n\n wrapper.append(...[div, messageDiv].filter(Boolean));\n container.append(wrapper);\n return container;\n });\n\n const containers = await Promise.all(promises);\n messageDiv.append(...containers);\n\n if(mids.length > 1) {\n bubble.classList.add('is-multiple-documents', 'is-grouped');\n }\n\n return nameContainer;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport type TranslatableMessage from '../translatableMessage';\nimport {Middleware} from '../../helpers/middleware';\nimport {Message, MessageMedia} from '../../layer';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport rootScope from '../../lib/rootScope';\nimport PollElement from '../poll';\n\nexport default function wrapPoll({\n message,\n managers = rootScope.managers,\n middleware,\n translatableParams,\n richTextOptions\n}: {\n message: Message.message,\n managers?: AppManagers,\n middleware: Middleware,\n translatableParams?: Parameters[0],\n richTextOptions?: Parameters[1]\n}) {\n const elem = new PollElement();\n elem.message = message;\n elem.managers = managers;\n elem.translatableParams = translatableParams;\n elem.richTextOptions = richTextOptions;\n elem.setAttribute('peer-id', '' + message.peerId);\n elem.setAttribute('poll-id', '' + (message.media as MessageMedia.messageMediaPoll).poll.id);\n elem.setAttribute('message-id', '' + message.mid);\n elem.middlewareHelper = middleware.create();\n elem.render();\n return elem;\n}\n","// https://stackoverflow.com/a/14824756/6758968\nconst ltrChars = 'A-Za-z\\u00C0-\\u00D6\\u00D8-\\u00F6\\u00F8-\\u02B8\\u0300-\\u0590\\u0800-\\u1FFF'+'\\u2C00-\\uFB1C\\uFDFE-\\uFE6F\\uFEFD-\\uFFFF',\n rtlChars = '\\u0591-\\u07FF\\uFB1D-\\uFDFD\\uFE70-\\uFEFC',\n fullRtlDirCheck = new RegExp('^[^'+ltrChars+']*['+rtlChars+']'),\n justRtlDirCheck = new RegExp('['+rtlChars+']');\n\nexport default function isRTL(s: string, anyChar?: boolean) {\n return anyChar ? justRtlDirCheck.test(s) : fullRtlDirCheck.test(s);\n}\n\nexport function endsWithRTL(s: string) {\n return justRtlDirCheck.test(s?.slice(-1));\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport getServerMessageId from '../../lib/appManagers/utils/messageId/getServerMessageId';\nimport wrapTelegramUrlToAnchor from '../../lib/richTextProcessor/wrapTelegramUrlToAnchor';\nimport {avatarNew} from '../avatarNew';\nimport Icon from '../icon';\nimport wrapPeerTitle from './peerTitle';\n\nexport default async function wrapTopicNameButton(\n options: {\n lastMsgId?: number,\n noLink?: boolean\n } & Pick[0], 'peerId' | 'threadId' | 'wrapOptions' | 'withIcons' | 'dialog'>\n) {\n const {peerId, threadId, lastMsgId} = options;\n\n let loadPromise: Promise = Promise.resolve();\n let element: HTMLElement;\n if(options.noLink) {\n element = document.createElement('span');\n element.dataset.savedFrom = `${options.peerId}_${options.lastMsgId}`;\n element.classList.add('has-avatar');\n\n const avatar = avatarNew({\n peerId: options.peerId,\n isDialog: true,\n middleware: options.wrapOptions.middleware,\n size: 30\n });\n\n avatar.node.classList.add('topic-name-button-avatar');\n\n element.append(avatar.node, Icon('next', 'topic-name-button-arrow'));\n\n loadPromise = avatar.readyThumbPromise;\n\n options.withIcons = false;\n } else {\n element = wrapTelegramUrlToAnchor('t.me/c/' + peerId.toChatId() + (threadId ? '/' + getServerMessageId(threadId) : '') + (lastMsgId ? '/' + getServerMessageId(lastMsgId) : ''));\n }\n\n element.classList.add('topic-name', 'topic-name-button');\n // if(threadId) {\n // const topic = await rootScope.managers.dialogsStorage.getForumTopic(peerId, threadId);\n // if(!topic) {\n // element.append(i18n('Loading'));\n // loadPromise = rootScope.managers.dialogsStorage.getForumTopicById(peerId, threadId)\n // }\n // } else {\n element.append(await wrapPeerTitle(options));\n // }\n\n return {\n cached: true,\n element,\n loadPromise\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport shake from '../../helpers/dom/shake';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {ChatlistsChatlistInvite, ChatlistsChatlistUpdates, DialogFilter, Peer} from '../../layer';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport I18n, {i18n, _i18n} from '../../lib/langPack';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport AppSelectPeers from '../appSelectPeers';\nimport Button from '../button';\nimport showLimitPopup from './limit';\n\nconst CLASS_NAME = 'popup-chatlist-invite';\nexport default class PopupSharedFolderInvite extends PopupElement {\n private selector: AppSelectPeers;\n private chatlistInvite: ChatlistsChatlistInvite;\n private slug: string;\n private filter: DialogFilter.dialogFilterChatlist;\n private deleting: boolean;\n private updating: boolean;\n\n constructor(options: Partial<{\n chatlistInvite: PopupSharedFolderInvite['chatlistInvite'],\n slug: PopupSharedFolderInvite['slug'],\n filter: PopupSharedFolderInvite['filter'],\n deleting: PopupSharedFolderInvite['deleting'],\n updating: PopupSharedFolderInvite['updating']\n }>) {\n super('popup-forward ' + CLASS_NAME, {\n closable: true,\n overlayClosable: true,\n body: true,\n footer: true,\n title: true,\n withConfirm: true\n });\n\n safeAssign(this, options);\n\n this.construct();\n }\n\n public async construct() {\n const n = document.createElement('div');\n n.classList.add('menu-horizontal-scrollable');\n\n const nav = document.createElement('nav');\n nav.classList.add('menu-horizontal-div');\n\n const {chatlistInvite, deleting, updating} = this;\n const isAlready = chatlistInvite?._ === 'chatlists.chatlistInviteAlready';\n const isJoining = isAlready && !!chatlistInvite.missing_peers.length;\n const filter = this.filter ??= isAlready ? await this.managers.filtersStorage.getFilter(chatlistInvite.filter_id) as DialogFilter.dialogFilterChatlist : undefined;\n\n this.title.append(i18n(deleting ? 'SharedFolder.Link.TitleRemove' : (isJoining ? 'SharedFolder.Link.TitleAdd' : 'SharedFolder.Link.Title')));\n\n let leaveSuggestionsPeerIds: PeerId[];\n if(deleting) {\n const peers = await this.managers.filtersStorage.getLeaveChatlistSuggestions(this.filter.id);\n leaveSuggestionsPeerIds = peers.map((peer) => getPeerId(peer));\n }\n\n const makeItem = () => {\n const item = document.createElement('div');\n item.classList.add('menu-horizontal-div-item');\n const span = document.createElement('span');\n span.classList.add('menu-horizontal-div-item-span');\n item.append(span);\n nav.append(item);\n return span;\n };\n\n makeItem().append(i18n('FilterAllChats'));\n const activeItem = makeItem();\n activeItem.parentElement.classList.add('active');\n activeItem.append(\n wrapEmojiText(filter ? filter.title : (chatlistInvite as ChatlistsChatlistInvite.chatlistsChatlistInvite).title),\n document.createElement('i')\n );\n makeItem().append(i18n('FilterPersonal'));\n\n const shadow = document.createElement('div');\n shadow.classList.add('inner-shadow', 'inner-shadow-inset');\n\n n.append(nav, shadow);\n\n const description = document.createElement('div');\n description.classList.add(CLASS_NAME + '-description', 'subtitle');\n let descriptionAddI18n: I18n.IntlElement\n if(deleting) {\n _i18n(description, 'SharedFolder.Link.DescriptionRemove', [wrapEmojiText(filter.title)]);\n } else if(!isJoining) {\n _i18n(description, isAlready ? 'SharedFolder.Link.DescriptionAlready' : 'SharedFolder.Link.Description');\n } else {\n descriptionAddI18n = new I18n.IntlElement();\n }\n\n const counterI18n = new I18n.IntlElement();\n\n const onSelectionChange = (length: number) => {\n if(alreadyPeerIds && isJoining) {\n length = Math.max(0, length - alreadyPeerIds.length);\n }\n\n counterI18n.update({\n key: deleting ? 'SharedFolder.Link.ChatsRemove' : (isJoining ? 'SharedFolder.Link.ChatsAdd' : (isAlready ? 'SharedFolder.Link.ChatsAlready' : 'SharedFolder.Link.Chats')),\n args: [i18n('Chats', [length])]\n });\n\n selectAllI18n?.update({\n key: (shouldDeselect = length === peerIds.length) ? 'DeselectAll' : 'SelectAll'\n });\n\n descriptionAddI18n?.update({\n key: 'SharedFolder.Link.DescriptionAdd',\n args: [i18n('Chats', [length]), wrapEmojiText(filter.title)]\n });\n\n if(selectAllI18n) {\n if(length) addFolderText.dataset.badge = '' + length;\n addFolderText.classList.toggle('has-badge', !!length);\n }\n\n if(deleting) {\n addFolderI18n.update({\n key: length ? 'SharedFolder.Link.Remove' : 'SharedFolder.Link.TitleRemove'\n });\n }\n\n if(!deleting) {\n toggleDisability([this.btnConfirm], !length);\n }\n };\n\n let shouldDeselect: boolean;\n this.selector = new AppSelectPeers({\n middleware: this.middlewareHelper.get(),\n appendTo: this.body,\n onChange: onSelectionChange,\n onFirstRender: () => {\n this.show();\n this.selector.checkForTriggers(); // ! due to zero height before mounting\n },\n multiSelect: true,\n noSearch: true,\n sectionNameLangPackKey: counterI18n.element,\n avatarSize: 'abitbigger',\n managers: this.managers,\n peerType: [],\n getSubtitleForElement: async(peerId) => {\n if(alreadyPeerIds?.includes(peerId)) {\n const isBroadcast = await this.managers.appPeersManager.isBroadcast(peerId);\n return i18n(isBroadcast ? 'SharedFolder.Link.ChannelAlready' : 'SharedFolder.Link.ChatAlready');\n }\n },\n processElementAfter: (peerId, dialogElement) => {\n if(alreadyPeerIds?.includes(peerId)) {\n dialogElement.dom.containerEl.classList.add('already');\n }\n }\n });\n\n let selectAllI18n: I18n.IntlElement;\n if(!isAlready || isJoining) {\n selectAllI18n = new I18n.IntlElement();\n selectAllI18n.element.classList.add('sidebar-left-section-name-right');\n this.selector.section.title.append(selectAllI18n.element);\n\n attachClickEvent(selectAllI18n.element, () => {\n if(shouldDeselect) {\n this.selector.removeBatch(peerIds);\n } else {\n this.selector.addBatch(peerIds);\n }\n }, {listenerSetter: this.listenerSetter});\n }\n\n let peerIds: PeerId[];\n if(chatlistInvite) {\n const peers = isJoining ? chatlistInvite.missing_peers : (isAlready ? chatlistInvite.already_peers : chatlistInvite.peers);\n peerIds = peers.map((peer) => getPeerId(peer));\n } else {\n peerIds = filter.includePeerIds;\n }\n\n let alreadyPeerIds: PeerId[];\n if(isAlready) {\n alreadyPeerIds = chatlistInvite.already_peers.map((peer) => getPeerId(peer));\n }\n\n if(alreadyPeerIds) {\n const _remove = this.selector.remove.bind(this.selector);\n this.selector.remove = (...args) => {\n const peerId = args[0].toPeerId();\n if(alreadyPeerIds.includes(peerId)) {\n const container = this.selector.getElementByPeerId(peerId);\n shake(container);\n return false;\n }\n\n return _remove(...args);\n };\n }\n\n this.scrollable = this.selector.scrollable;\n this.attachScrollableListeners();\n\n this.scrollable.prepend(n, description);\n\n this.btnConfirm.classList.add(`${CLASS_NAME}-button`);\n const addFolderI18n = new I18n.IntlElement({\n key: deleting ? 'SharedFolder.Link.Remove' : (isJoining ? 'SharedFolder.Link.Join' : (isAlready ? 'OK' : 'SharedFolder.Link.Title'))\n });\n const addFolderText = addFolderI18n.element;\n addFolderText.classList.add(`${CLASS_NAME}-button-text`);\n this.btnConfirm.append(addFolderText);\n this.footer.append(this.btnConfirm);\n\n attachClickEvent(this.btnConfirm, () => {\n if(isAlready && !isJoining) {\n this.hide();\n return;\n }\n\n let promise: Promise;\n\n const toggle = toggleDisability([this.btnConfirm], true);\n\n const peerIds = [...this.selector.selected] as PeerId[];\n if(updating) {\n promise = this.managers.filtersStorage.joinChatlistUpdates(this.filter.id, peerIds);\n } else if(chatlistInvite) {\n promise = this.managers.filtersStorage.joinChatlistInvite(\n this.slug,\n peerIds\n ).catch((error: ApiError) => {\n if(error.type === 'DIALOG_FILTERS_TOO_MUCH') {\n showLimitPopup('folders');\n this.hide();\n } else {\n throw error;\n }\n });\n } else {\n promise = this.managers.filtersStorage.leaveChatlist(this.filter.id, peerIds);\n }\n\n promise.then(() => {\n this.hide();\n }, (error: ApiError) => {\n toggle();\n throw error;\n });\n }, {listenerSetter: this.listenerSetter});\n\n const totalPeerIds = alreadyPeerIds ? peerIds.concat(alreadyPeerIds) : peerIds;\n const initial = deleting ? leaveSuggestionsPeerIds : totalPeerIds\n this.selector.addInitial(initial);\n this.selector.renderResultsFunc(deleting ? filterUnique(leaveSuggestionsPeerIds.concat(totalPeerIds)) : totalPeerIds);\n\n if(!initial.length) {\n onSelectionChange(0);\n }\n // if(isAlready && !isJoining) {\n // this.selector.list.classList.add('disable-hover');\n // }\n\n this.body.after(this.footer);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement, {addCancelButton} from '.';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {Middleware} from '../../helpers/middleware';\nimport numberThousandSplitter from '../../helpers/number/numberThousandSplitter';\nimport {Chat, ChatInvite} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {i18n, _i18n, LangPackKey} from '../../lib/langPack';\nimport {NULL_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../../lib/rootScope';\nimport {avatarNew, wrapPhotoToAvatar} from '../avatarNew';\nimport generateTitleIcons from '../generateTitleIcons';\nimport {toastNew} from '../toast';\nimport PopupPeer from './peer';\n\n// const FAKE_CHAT_ID = Number.MAX_SAFE_INTEGER - 0x1000;\n\nconst getJoinLangKey = (chatInvite: ChatInvite.chatInvite | ChatInvite.chatInvitePeek): LangPackKey => {\n if(chatInvite._ === 'chatInvitePeek') {\n const chat = (chatInvite as ChatInvite.chatInvitePeek).chat as Chat.channel | Chat.chat;\n return (chat as Chat.channel).pFlags.broadcast ? 'JoinByPeekChannelTitle' : 'JoinByPeekGroupTitle';\n }\n\n if(chatInvite.pFlags.request_needed) {\n return 'RequestJoin.Button';\n }\n\n if(chatInvite.pFlags.broadcast) {\n return 'JoinByPeekChannelTitle';\n }\n\n return 'JoinByPeekGroupTitle';\n};\n\nexport async function wrapChatInviteTitle(\n chatInvite: ChatInvite.chatInvite,\n middleware: Middleware\n) {\n const title = document.createElement('div');\n title.classList.add('peer-title', 'chat-title');\n\n const icons = await generateTitleIcons({\n peerId: NULL_PEER_ID,\n noVerifiedIcon: false,\n noFakeIcon: false,\n noPremiumIcon: false,\n peer: {\n _: 'channel',\n pFlags: {\n verified: chatInvite.pFlags.verified,\n scam: chatInvite.pFlags.scam,\n fake: chatInvite.pFlags.fake\n },\n date: 0,\n id: 0,\n photo: undefined,\n title: ''\n },\n wrapOptions: {\n middleware\n }\n });\n\n const titleFragment = wrapEmojiText(chatInvite.title);\n if(icons.length) {\n title.classList.add('with-icons');\n const titleInner = document.createElement('span');\n titleInner.classList.add('peer-title-inner');\n titleInner.append(titleFragment);\n title.append(titleInner, ...icons);\n } else {\n setInnerHTML(title, titleFragment);\n }\n\n return title;\n}\n\nexport async function wrapChatInviteAvatar(chatInvite: ChatInvite.chatInvite, middleware: Middleware, size: number) {\n const avatarElem = avatarNew({\n middleware,\n size,\n isDialog: false,\n isSubscribed: !!chatInvite.subscription_pricing || undefined\n });\n if(chatInvite.photo?._ === 'photo') {\n await wrapPhotoToAvatar(avatarElem, chatInvite.photo);\n if(chatInvite.subscription_pricing) {\n avatarElem.setIsSubscribed(true);\n }\n } else {\n avatarElem.render({\n peerTitle: chatInvite.title\n });\n await avatarElem.readyThumbPromise;\n }\n\n return avatarElem;\n}\n\nexport default class PopupJoinChatInvite extends PopupPeer {\n constructor(\n private hash: string,\n private chatInvite: ChatInvite.chatInvite\n ) {\n super('popup-join-chat-invite', {\n closable: true,\n overlayClosable: true,\n body: true,\n buttons: addCancelButton([{\n langKey: getJoinLangKey(chatInvite),\n callback: () => {\n PopupJoinChatInvite.import(hash);\n }\n }]),\n description: true\n });\n\n this.construct();\n }\n\n public static openChat(chatId: ChatId) {\n const peerId = chatId.toPeerId(true);\n appImManager.setInnerPeer({peerId});\n }\n\n public static import(hash: string) {\n rootScope.managers.appChatInvitesManager.importChatInvite(hash)\n .then((chatId) => {\n this.openChat(chatId);\n }, (error) => {\n if(error.type === 'INVITE_REQUEST_SENT') {\n toastNew({langPackKey: 'RequestToJoinSent'});\n }\n });\n }\n\n public static async open(hash: string, chatInvite: ChatInvite) {\n if(chatInvite._ === 'chatInviteAlready') {\n // load missing chat\n await rootScope.managers.appChatInvitesManager.checkChatInvite(hash);\n this.openChat(chatInvite.chat.id);\n } else if(chatInvite._ === 'chatInvitePeek') {\n this.openChat(chatInvite.chat.id);\n } else {\n PopupElement.createPopup(PopupJoinChatInvite, hash, chatInvite);\n }\n }\n\n private async construct() {\n this.header.remove();\n /* const fakeChat: Chat.channel | Chat.chat = {\n _: chatInvite.pFlags.channel ? 'channel' : 'chat',\n id: FAKE_CHAT_ID,\n title: chatInvite.title,\n photo: chatInvite.photo as any,\n date: Date.now() / 1000 | 0,\n version: 0,\n participants_count: chatInvite.participants_count,\n pFlags: chatInvite.pFlags as any\n };\n\n appChatsManager.saveApiChat(fakeChat); */\n\n const {chatInvite} = this;\n\n const avatarElem = await wrapChatInviteAvatar(chatInvite, this.middlewareHelper.get(), 100);\n const title = await wrapChatInviteTitle(chatInvite, this.middlewareHelper.get());\n // avatarElem.setAttribute('peer', '' + -fakeChat.id);\n\n if(chatInvite.about) {\n this.description.replaceChildren(wrapEmojiText(chatInvite.about));\n } else {\n this.description.remove();\n this.description = undefined;\n }\n\n const isBroadcast = chatInvite.pFlags.broadcast;\n const peopleCount = i18n(isBroadcast ? 'Subscribers' : 'Members', [numberThousandSplitter(chatInvite.participants_count)]);\n peopleCount.classList.add('chat-participants-count');\n\n this.body.append(...[avatarElem.node, title, peopleCount, this.description].filter(Boolean));\n\n if(chatInvite.pFlags.request_needed) {\n const caption = document.createElement('div');\n _i18n(caption, isBroadcast ? 'RequestToJoinChannelDescription' : 'RequestToJoinGroupDescription');\n caption.classList.add('chat-participants-count', 'request-caption');\n\n this.body.append(caption);\n }\n\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {T_ME_PREFIXES} from '../lib/mtproto/mtproto_config';\nimport wrapUrl from '../lib/richTextProcessor/wrapUrl';\nimport cancelEvent from './dom/cancelEvent';\nimport parseUriParams from './string/parseUriParams';\n\ntype InternalLinkAnchorType = 'showMaskedAlert' | 'execBotCommand' | 'searchByHashtag' | 'addstickers' | 'im' |\n 'resolve' | 'privatepost' | 'addstickers' | 'voicechat' | 'joinchat' | 'join' | 'invoice' |\n 'addemoji' | 'setMediaTimestamp' | 'addlist' | 'boost' | 'premium_offer' | 'giftcode' |\n 'm' | 'message' | 'stars_topup';\n\nexport const UNSAFE_ANCHOR_LINK_TYPES: Set = new Set([\n 'showMaskedAlert',\n 'execBotCommand'\n]);\n\nexport default function addAnchorListener(options: {\n name: InternalLinkAnchorType,\n protocol?: 'tg',\n callback: (params: Params, element?: HTMLAnchorElement, masked?: boolean) => any,\n noPathnameParams?: boolean,\n noUriParams?: boolean,\n noCancelEvent?: boolean\n}) {\n (window as any)[(options.protocol ? options.protocol + '_' : '') + options.name] = (element?: HTMLAnchorElement, e?: Event) => {\n !options.noCancelEvent && cancelEvent(null);\n\n let href = element.href;\n if(!href) {\n return;\n }\n\n let pathnameParams: any[];\n let uriParams: any;\n\n const u = new URL(href);\n const match = u.host.match(/(.+?)\\.t(?:elegram)?\\.me/);\n if(match && !T_ME_PREFIXES.has(match[1])) {\n u.pathname = match[1] + (u.pathname === '/' ? '' : u.pathname);\n href = u.toString();\n }\n\n if(!options.noPathnameParams) pathnameParams = new URL(href).pathname.split('/').slice(1);\n if(!options.noUriParams) uriParams = parseUriParams(href);\n\n const masked = element.href !== wrapUrl(element.textContent).url && element.getAttribute('safe') === null;\n const result = options.callback(\n {pathnameParams, uriParams} as Params,\n element,\n masked\n );\n\n if(!e?.isTrusted) {\n return result;\n }\n };\n}\n","export default function createBadge(tag: 'span' | 'div', size: number, color: string) {\n const badge = document.createElement(tag);\n badge.className = `badge badge-${size} badge-${color} is-badge-empty`;\n return badge;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport I18n, {LangPackKey, FormatterArguments, i18n} from '../../lib/langPack';\nimport {SEND_WHEN_ONLINE_TIMESTAMP} from '../../lib/mtproto/mtproto_config';\nimport Button from '../button';\nimport PopupDatePicker from './datePicker';\n\nconst getMinDate = () => {\n const date = new Date();\n // date.setDate(date.getDate() - 1);\n date.setHours(0, 0, 0, 0);\n return date;\n};\n\nconst getMaxDate = () => {\n const date = new Date();\n date.setFullYear(date.getFullYear() + 1);\n date.setDate(date.getDate() - 1);\n return date;\n};\n\nconst checkDate = (date: Date, addMinutes?: number) => {\n const ret = date.getTime() > getMaxDate().getTime() ? new Date() : date;\n if(addMinutes) {\n ret.setMinutes(ret.getMinutes() + addMinutes);\n }\n return ret;\n};\n\nexport default class PopupSchedule extends PopupDatePicker {\n private canSendWhenOnline: boolean;\n private isCustomButtonText: boolean;\n\n constructor(options: {\n initDate: Date,\n minDate?: Date,\n maxDate?: Date,\n onPick: (timestamp: number) => void,\n canSendWhenOnline?: boolean,\n btnConfirmLangKey?: LangPackKey\n }) {\n super(\n checkDate(options.initDate, options.canSendWhenOnline !== undefined ? 10 : undefined),\n options.onPick,\n {\n noButtons: true,\n noTitle: true,\n closable: true,\n withConfirm: true,\n minDate: options.minDate ?? getMinDate(),\n maxDate: options.maxDate ?? getMaxDate(),\n withTime: true,\n showOverflowMonths: true,\n confirmShortcutIsSendShortcut: true,\n title: true\n }\n );\n\n this.canSendWhenOnline = options.canSendWhenOnline;\n this.isCustomButtonText = !!options.btnConfirmLangKey;\n\n this.element.classList.add('popup-schedule');\n this.header.append(this.controlsDiv);\n this.title.replaceWith(this.monthTitle);\n this.body.append(this.btnConfirm);\n\n if(options.canSendWhenOnline) {\n const btnSendWhenOnline = Button('btn-primary btn-secondary btn-primary-transparent primary popup-schedule-secondary', {text: 'Schedule.SendWhenOnline'});\n this.body.append(btnSendWhenOnline);\n\n attachClickEvent(btnSendWhenOnline, () => {\n options.onPick(SEND_WHEN_ONLINE_TIMESTAMP);\n this.hide();\n });\n }\n\n if(options.btnConfirmLangKey) {\n this.btnConfirm.replaceChildren(i18n(options.btnConfirmLangKey));\n this.btnConfirm.classList.add('text-uppercase');\n }\n }\n\n public setTimeTitle() {\n super.setTimeTitle();\n\n if(!(this.btnConfirm && this.selectedDate)) {\n return;\n }\n\n if(this.isCustomButtonText) {\n return;\n }\n\n let key: LangPackKey;\n const args: FormatterArguments = [];\n const date = new Date();\n date.setHours(0, 0, 0, 0);\n\n const timeOptions: Intl.DateTimeFormatOptions = {\n minute: '2-digit',\n hour: '2-digit'\n };\n\n const sendDate = new Date(this.selectedDate.getTime());\n sendDate.setHours(+this.hoursInputField.value, +this.minutesInputField.value);\n\n if(this.selectedDate.getTime() === date.getTime()) {\n key = 'Schedule.SendToday';\n }/* else if(this.selectedDate.getTime() === (date.getTime() + 86400e3)) {\n dayStr = 'Tomorrow';\n } */ else {\n key = 'Schedule.SendDate';\n\n const dateOptions: Intl.DateTimeFormatOptions = {\n month: 'short',\n day: 'numeric'\n };\n\n if(sendDate.getFullYear() !== date.getFullYear()) {\n dateOptions.year = 'numeric';\n }\n\n args.push(new I18n.IntlDateElement({\n date: sendDate,\n options: dateOptions\n }).element);\n }\n\n args.push(new I18n.IntlDateElement({\n date: sendDate,\n options: timeOptions\n }).element);\n\n this.btnConfirm.replaceChildren(i18n(key, args));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {createSignal, createEffect, on, JSX, onCleanup, catchError} from 'solid-js';\nimport {unwrap} from 'solid-js/store';\nimport rootScope from '../../lib/rootScope';\nimport {Photo, StoryItem, Document, MessageMedia, Message} from '../../layer';\nimport choosePhotoSize from '../../lib/appManagers/utils/photos/choosePhotoSize';\nimport wrapPhoto from '../wrappers/photo';\nimport wrapVideo from '../wrappers/video';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport {AnimationItemGroup} from '../animationIntersector';\nimport {ChatAutoDownloadSettings} from '../../helpers/autoDownload';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport {IS_SAFARI} from '../../environment/userAgent';\nimport createMiddleware from '../../helpers/solid/createMiddleware';\n\nlet processing = false;\nconst pollStories = () => {\n if(processing) return;\n const promises: PromiseLike[] = [];\n wrappedStories.forEach((map, peerId) => {\n const ids = [...map.keys()];\n const promise = rootScope.managers.appStoriesManager.getStoriesById(peerId, ids, true).then(() => {\n ids.forEach((id) => {\n if(!map.get(id).mounted) {\n map.delete(id);\n if(!map.size) {\n wrappedStories.delete(peerId);\n }\n }\n });\n });\n\n promises.push(promise);\n });\n\n Promise.all(promises).then(() => {\n processing = false;\n });\n};\n\nconst wrappedStories: Map> = new Map();\n(window as any).wrappedStories = wrappedStories;\nsetInterval(pollStories, 300e3);\n\ntype CommonProperties = {\n peerId: PeerId,\n message?: Message.message,\n boxWidth?: number,\n boxHeight?: number,\n withPreloader?: boolean,\n noInfo?: boolean,\n group?: AnimationItemGroup,\n lazyLoadQueue?: LazyLoadQueue,\n autoDownload?: ChatAutoDownloadSettings,\n canAutoplay?: boolean,\n noAspecter?: boolean\n};\n\nexport const wrapStoryMedia = (props: {\n storyItem: StoryItem.storyItem,\n forPreview?: boolean,\n forViewer?: boolean,\n containerProps?: JSX.HTMLAttributes,\n childrenClassName?: string,\n noPlayButton?: boolean,\n onlyPreview?: boolean,\n useBlur?: boolean | number\n} & CommonProperties) => {\n const [thumb, setThumb] = createSignal();\n const [media, setMedia] = createSignal();\n const [ready, setReady] = createSignal(false);\n\n let map = wrappedStories.get(props.peerId);\n if(!map) {\n wrappedStories.set(props.peerId, map = new Map());\n }\n\n let c = map.get(props.storyItem.id);\n if(!c) {\n map.set(props.storyItem.id, c = {mounted: 0});\n }\n ++c.mounted;\n onCleanup(() => {\n --c.mounted;\n });\n\n const messageMedia = unwrap(props.storyItem.media);\n const middleware = createMiddleware().get();\n\n let div: HTMLDivElement;\n const container =
;\n\n const setChildrenClassName = (wrapped: {images: {thumb: HTMLElement, full: HTMLElement}}, className: string) => {\n [\n wrapped.images.thumb,\n wrapped.images.full\n ].filter(Boolean).forEach((image) => {\n image.classList.add(className);\n });\n };\n\n const wrappers = {\n photo: (messageMedia: MessageMedia.messageMediaPhoto | MessageMedia.messageMediaDocument) => {\n const photo = (messageMedia as MessageMedia.messageMediaDocument).document as Document.document || (messageMedia as MessageMedia.messageMediaPhoto).photo as Photo.photo;\n const result = wrapPhoto({\n ...props,\n container: div,\n photo,\n middleware,\n ...(props.forPreview && {\n ...(props.noAspecter && {\n size: choosePhotoSize(photo, 150, 200)\n }),\n // size: choosePhotoSize(photo, 150, 200),\n useRenderCache: false\n }),\n ...(props.forViewer && {\n size: choosePhotoSize(photo, Infinity, Infinity),\n // noBlur: true,\n noFadeIn: true\n // noThumb: true\n }),\n withoutPreloader: !props.withPreloader\n });\n\n result.then(async(result) => {\n if(!middleware()) return;\n if(props.childrenClassName) setChildrenClassName(result, props.childrenClassName);\n await result.loadPromises.thumb;\n if(!middleware()) return;\n setThumb(result.images.thumb);\n setReady(true);\n await result.loadPromises.full;\n if(!middleware()) return;\n setMedia(result.images.full);\n });\n\n return result;\n },\n\n video: (messageMedia: MessageMedia.messageMediaDocument) => {\n const document = messageMedia.document as Document.document;\n const altDocument = messageMedia.alt_document as Document.document;\n const result = wrapVideo({\n ...props,\n container: div,\n doc: document,\n altDoc: altDocument,\n // ignoreStreaming: true,\n middleware,\n ...(props.forViewer && {\n // noPreview: true,\n noInfo: true,\n // noPlayButton: true,\n noAutoplayAttribute: true\n }),\n ...(props.forPreview && {\n ...(props.noAspecter && {\n photoSize: choosePhotoSize(document, 200, 200, false)\n }),\n onlyPreview: true\n }),\n withoutPreloader: !props.withPreloader\n });\n\n result.then(async(result) => {\n if(!middleware()) return;\n if(props.childrenClassName) {\n if(result?.thumb) setChildrenClassName(result.thumb, props.childrenClassName);\n if(result?.video) result.video.classList.add(props.childrenClassName);\n }\n if(result?.thumb) await result.thumb.loadPromises.thumb;\n if(!middleware()) return;\n if(result?.thumb) setThumb(result.thumb.images.full as any || result.thumb.images.thumb);\n setReady(true);\n const video = result?.video;\n if(video && props.forViewer) {\n video.loop = false;\n video.muted = true;\n\n if(IS_SAFARI) { // * force Safari to load the video\n video.load();\n }\n }\n await result?.loadPromise;\n if(!middleware()) return;\n\n setMedia(video);\n });\n\n return result;\n }\n };\n\n let mediaResult: ReturnType;\n switch(messageMedia._) {\n case 'messageMediaPhoto': {\n mediaResult = wrappers.photo(messageMedia);\n break;\n }\n\n case 'messageMediaDocument': {\n // if(!props.group && props.forPreview) {\n // mediaResult = wrappers.photo(messageMedia);\n // } else {\n mediaResult = wrappers.video(messageMedia);\n // }\n\n break;\n }\n }\n\n return {container, div, media, mediaResult, thumb, ready};\n};\n\nexport const StoryPreview = (props: {\n storyId: number,\n loadPromises?: Promise[],\n onExpiredStory?: () => void,\n} & CommonProperties) => {\n let {loadPromises} = props;\n if(loadPromises) {\n delete props.loadPromises;\n }\n\n const loadPromise: CancellablePromise = loadPromises && deferredPromise();\n loadPromises?.push(loadPromise);\n loadPromises = undefined;\n\n const [storyItem, setStoryItem] = createSignal(undefined, {equals: false});\n const [f, setF] = createSignal();\n\n rootScope.managers.acknowledged.appStoriesManager.getStoryById(props.peerId, props.storyId)\n .then(async(result) => {\n if(!result.cached) {\n loadPromise?.resolve();\n }\n\n const storyItem = await result.result;\n setStoryItem(storyItem);\n });\n\n const onStoryItem = (storyItem: StoryItem.storyItem) => {\n if(!storyItem) {\n props.onExpiredStory?.();\n loadPromise.resolve();\n return;\n }\n\n onCleanup(() => {\n loadPromise?.reject();\n });\n\n // catchError(() => {\n // wrapStoryMedia({\n // ...props,\n // storyItem,\n // forPreview: true\n // });\n // }, (err) => {\n // console.error('error', err);\n // });\n\n const {container, ready} = wrapStoryMedia({\n ...props,\n storyItem,\n forPreview: true\n });\n\n createEffect(\n on(\n () => ready(),\n () => {\n loadPromise?.resolve();\n setF(container);\n },\n {defer: true}\n )\n );\n };\n\n createEffect(\n on(\n () => storyItem(),\n onStoryItem,\n {defer: true}\n )\n );\n\n return (\n <>{f}\n );\n};\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type TChart from '../../../lib/tchart/chart';\nimport type {TChartData, TChatOriginalData} from '../../../lib/tchart/types';\nimport {Message, MessagesMessages, PostInteractionCounters, PublicForward, StatsAbsValueAndPrev, StatsBroadcastStats, StatsGraph, StatsGroupTopAdmin, StatsGroupTopInviter, StatsGroupTopPoster, StatsMegagroupStats, StatsMessageStats, StatsPercentValue, StatsPublicForwards, StatsStoryStats, StoryItem} from '../../../layer';\nimport I18n, {LangPackKey, i18n, join, joinElementsWith} from '../../../lib/langPack';\nimport Section from '../../section';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport {For, render} from 'solid-js/web';\nimport {Accessor, JSX, createEffect, createRoot, createSignal, onMount} from 'solid-js';\nimport formatNumber from '../../../helpers/number/formatNumber';\nimport {FontFamily} from '../../../config/font';\nimport {DcId, PickByType} from '../../../types';\nimport rootScope from '../../../lib/rootScope';\nimport customProperties from '../../../helpers/dom/customProperties';\nimport {hexToRgb, mixColors} from '../../../helpers/color';\nimport emptyPlaceholder from '../../emptyPlaceholder';\nimport deferredPromise, {CancellablePromise} from '../../../helpers/cancellablePromise';\nimport liteMode from '../../../helpers/liteMode';\nimport classNames from '../../../helpers/string/classNames';\nimport Icon from '../../icon';\nimport indexOfAndSplice from '../../../helpers/array/indexOfAndSplice';\nimport Row from '../../row';\nimport {wrapReplyDivAndCaption} from '../../chat/replyContainer';\nimport {formatFullSentTime} from '../../../helpers/date';\nimport numberThousandSplitter from '../../../helpers/number/numberThousandSplitter';\nimport {wrapStoryMedia} from '../../stories/preview';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport Button from '../../button';\nimport themeController from '../../../helpers/themeController';\nimport assumeType from '../../../helpers/assumeType';\nimport getChatMembersString from '../../wrappers/getChatMembersString';\nimport createContextMenu from '../../../helpers/dom/createContextMenu';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport {createStoriesViewerWithPeer} from '../../stories/viewer';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport {avatarNew} from '../../avatarNew';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport ListenerSetter from '../../../helpers/listenerSetter';\n\nconst CHANNEL_GRAPHS_TITLES: {[key in keyof PickByType]: LangPackKey} = {\n growth_graph: 'GrowthChartTitle',\n followers_graph: 'FollowersChartTitle',\n mute_graph: 'Notifications',\n top_hours_graph: 'TopHoursChartTitle',\n views_by_source_graph: 'ViewsBySourceChartTitle',\n new_followers_by_source_graph: 'NewFollowersBySourceChartTitle',\n languages_graph: 'LanguagesChartTitle',\n interactions_graph: 'InteractionsChartTitle',\n iv_interactions_graph: 'IVInteractionsChartTitle',\n reactions_by_emotion_graph: 'ReactionsByEmotionChartTitle',\n story_interactions_graph: 'StoryInteractionsChartTitle',\n story_reactions_by_emotion_graph: 'StoryReactionsByEmotionChartTitle'\n};\n\nconst GROUP_GRAPH_TITLES: {[key in keyof PickByType]: LangPackKey} = {\n growth_graph: 'GrowthChartTitle',\n members_graph: 'GroupMembersChartTitle',\n new_members_by_source_graph: 'NewMembersBySourceChartTitle',\n languages_graph: 'MembersLanguageChartTitle',\n messages_graph: 'MessagesChartTitle',\n actions_graph: 'ActionsChartTitle',\n top_hours_graph: 'TopHoursChartTitle',\n weekdays_graph: 'TopDaysOfWeekChartTitle'\n};\n\nconst MESSAGE_GRAPH_TITLES: {[key in keyof PickByType]: LangPackKey} = {\n views_graph: 'ViewsAndSharesChartTitle',\n reactions_by_emotion_graph: 'ReactionsByEmotionChartTitle'\n};\n\nconst STORY_GRAPH_TITLES = MESSAGE_GRAPH_TITLES;\n\nconst CHANNEL_OVERVIEW_ITEMS: {[key in keyof PickByType]: LangPackKey} = {\n followers: 'FollowersChartTitle',\n enabled_notifications: 'EnabledNotifications',\n views_per_post: 'ViewsPerPost',\n views_per_story: 'ViewsPerStory',\n shares_per_post: 'SharesPerPost',\n shares_per_story: 'SharesPerStory',\n reactions_per_post: 'ReactionsPerPost',\n reactions_per_story: 'ReactionsPerStory'\n};\n\nconst GROUP_OVERVIEW_ITEMS: {[key in keyof PickByType]: LangPackKey} = {\n members: 'MembersOverviewTitle',\n messages: 'MessagesOverview',\n viewers: 'ViewingMembers',\n posters: 'PostingMembers'\n};\n\nconst MESSAGE_OVERVIEW_ITEMS: {[key in keyof PickByType]: LangPackKey} = {\n views: 'StatisticViews',\n public_shares: 'PublicShares',\n reactions: 'Reactions',\n private_shares: 'PrivateShares'\n};\n\nconst STORY_OVERVIEW_ITEMS = MESSAGE_OVERVIEW_ITEMS;\n\nlet TChartPromise: Promise;\nlet _TChart: typeof TChart;\nfunction ensureTChart() {\n return TChartPromise ??= import('../../../lib/tchart/chart').then((module) => {\n _TChart = module.default;\n });\n}\n\nfunction extractColor(color: string): string {\n return color.substring(color.indexOf('#'));\n}\n\nexport const makeAbsStats = (value: number, approximate?: boolean): StatsAbsValueAndPrev => {\n return {\n _: 'statsAbsValueAndPrev',\n current: value,\n previous: 0,\n approximate\n };\n};\n\nexport type LoadableList = {rendered: (HTMLElement | JSX.Element)[], values: T[], left: number, count: number, loadMore?: () => Promise};\nexport const createLoadableList = (props: Partial> = {}) => {\n return createSignal>({\n rendered: [],\n values: [],\n left: 0,\n count: 0,\n ...props\n }, {equals: false});\n};\n\nexport const createMoreButton = (\n count: number,\n callback: (button: HTMLElement) => any,\n listenerSetter: ListenerSetter,\n key: LangPackKey = 'PollResults.LoadMore'\n) => {\n const button = Button('btn btn-primary btn-transparent primary', {icon: 'down', text: key, textArgs: [count]});\n attachClickEvent(button, () => {\n callback(button);\n }, {listenerSetter});\n return button;\n};\n\nconst StatisticsOverviewItem = ({\n value,\n title,\n includeZeroValue,\n describePercentage\n}: {\n value: StatsAbsValueAndPrev | StatsPercentValue,\n title: LangPackKey,\n includeZeroValue?: boolean,\n describePercentage?: boolean\n}) => {\n const isPercentage = value._ === 'statsPercentValue';\n let v: JSX.Element;\n if(isPercentage) {\n const n = (value.part / value.total * 100).toFixed(2);\n v = `${n}%`;\n\n if(describePercentage) {\n v = (\n <>\n {`≈${value.part} `}\n \n {v}\n \n \n );\n }\n } else {\n v = formatNumber(value.current, 1);\n\n if(value.approximate) {\n v = '≈' + v;\n }\n\n if(!value.current && !value.previous && !includeZeroValue) {\n return;\n }\n\n if(value.current !== value.previous && value.previous) {\n const diff = value.current - value.previous;\n const absDiff = Math.abs(diff);\n const vv = `${diff > 0 ? '+' : '-'}${formatNumber(absDiff, 1)}`;\n const p = +(Math.abs(1 - value.current / value.previous) * 100).toFixed(2);\n const str = `${vv} (${p}%)`;\n v = (\n <>\n {v}{' '}\n 0 ? 'green' : 'red')}\n >\n {str}\n \n \n );\n }\n }\n\n return (\n
\n
\n {v}\n
\n
\n {i18n(title)}\n
\n
\n );\n};\n\nexport const StatisticsOverviewItems = (props: {\n items: Parameters[0][]\n}) => {\n return (\n
\n {StatisticsOverviewItem}\n
\n );\n};\n\nexport default class AppStatisticsTab extends SliderSuperTabEventable {\n private chatId: ChatId;\n private mid: number;\n private storyId: number;\n private stats: StatsBroadcastStats | StatsMegagroupStats | StatsMessageStats | StatsStoryStats;\n private messages: Map;\n private stories: Map;\n private dcId: DcId;\n private openPromise: CancellablePromise;\n private isBroadcast: boolean;\n private isMegagroup: boolean;\n private isMessage: boolean;\n private isStory: boolean;\n\n protected onOpenAfterTimeout(): void {\n this.openPromise.resolve();\n }\n\n private _construct(\n recentPosts: {container: HTMLElement, postInteractionCounters: PostInteractionCounters}[],\n topPosters: {container: HTMLElement, peerId: PeerId}[],\n topAdmins: {container: HTMLElement, peerId: PeerId}[],\n topInviters: {container: HTMLElement, peerId: PeerId}[],\n publicForwards: Accessor,\n currentPost: (typeof recentPosts)[0]\n ) {\n const dateElement = new I18n.IntlDateElement({options: {}});\n const getLabelDate: TChartData['getLabelDate'] = (value, options = {}) => {\n options.displayYear ??= true;\n options.isMonthShort ??= true;\n\n const date = new Date(value);\n dateElement.update({\n date,\n options: {\n weekday: options.displayWeekDay ? options.isShort ? 'short' : 'long' : undefined,\n year: options.displayYear ? 'numeric' : undefined,\n hour: options.displayHours ? '2-digit' : undefined,\n minute: options.displayHours ? '2-digit' : undefined,\n month: options.isMonthShort ? 'short' : 'long',\n day: 'numeric'\n }\n });\n\n return dateElement.element.textContent;\n };\n\n const getLabelTime: TChartData['getLabelTime'] = (value: number) => {\n const date = new Date(value);\n dateElement.update({\n date,\n options: {\n hour: '2-digit',\n minute: '2-digit'\n }\n });\n\n return dateElement.element.textContent;\n };\n\n const makeColors = () => {\n const surface = customProperties.getProperty('surface-color');\n const primary = customProperties.getProperty('primary-color');\n const secondary = customProperties.getProperty('secondary-color');\n const surfaceRgb = hexToRgb(surface);\n\n const miniMask = mixColors(\n hexToRgb(secondary),\n mixColors(\n hexToRgb(primary),\n surfaceRgb,\n 0.1\n ),\n 0.2\n );\n\n const miniFrame = mixColors(\n hexToRgb(secondary),\n mixColors(\n hexToRgb(primary),\n surfaceRgb,\n 0.3\n ),\n 0.4\n );\n\n const colors: ConstructorParameters[0]['settings']['COLORS'] = {\n primary: customProperties.getProperty('primary-color'),\n secondary: customProperties.getProperty('secondary-color'),\n background: surface,\n backgroundRgb: surfaceRgb,\n text: customProperties.getProperty('primary-text-color'),\n dates: customProperties.getProperty('secondary-text-color'),\n grid: `rgba(${hexToRgb(customProperties.getProperty('secondary-text-color')).join(', ')}, 0.2)`,\n axis: {\n x: customProperties.getProperty('secondary-text-color'),\n y: customProperties.getProperty('secondary-text-color')\n },\n barsSelectionBackground: `rgba(${surfaceRgb.join(', ')}, 0.5)`,\n miniMask: `rgba(${miniMask.join(', ')}, 0.6)`,\n miniFrame: `rgb(${miniFrame.join(', ')})`\n };\n\n return colors;\n };\n let colors = makeColors();\n this.listenerSetter.add(rootScope)('theme_changed', () => {\n colors = makeColors();\n });\n\n const titles = this.isBroadcast ? CHANNEL_GRAPHS_TITLES : (this.isMegagroup ? GROUP_GRAPH_TITLES : (this.isStory ? STORY_GRAPH_TITLES : MESSAGE_GRAPH_TITLES));\n const graphs: {statsGraph: StatsGraph.statsGraph, title: LangPackKey, percentage: boolean}[] = Object.keys(titles).map((key) => {\n const statsGraph = this.stats[key as keyof typeof titles];\n return statsGraph && {\n statsGraph,\n title: titles[key as keyof typeof titles],\n percentage: (key as keyof typeof titles) === 'languages_graph'\n };\n }).filter(Boolean);\n const renderGraph = ({statsGraph, title, percentage}: typeof graphs[0]) => {\n onMount(() => {\n let data: TChatOriginalData = JSON.parse(statsGraph.json.data);\n // console.log('data', JSON.parse(statsGraph.json.data));\n\n const prepareData = (data: TChatOriginalData, percentage?: boolean) => {\n for(const i in data.colors) {\n const color = data.colors[i];\n data.colors[i] = extractColor(color);\n }\n\n if(percentage) for(const i in data.types) {\n if(data.types[i] === 'bar') {\n data.types[i] = 'area';\n }\n }\n\n return data;\n };\n\n data = prepareData(data, percentage);\n\n type T = ConstructorParameters[0]['data'];\n const addOptions: Partial = {\n getLabelDate,\n getLabelTime,\n tooltipOnHover: true\n };\n\n const zoomToken = statsGraph.zoom_token;\n const tChart = _TChart.render({\n container,\n data: {\n ...data,\n ...addOptions,\n x_on_zoom: zoomToken ? async(x) => {\n const statsGraph = await this.managers.appStatisticsManager.loadAsyncGraph(zoomToken, x, this.dcId);\n if(statsGraph._ === 'statsGraphError') {\n return;\n }\n\n // console.log('zoom data', JSON.parse((statsGraph as StatsGraph.statsGraph).json.data));\n\n return {\n ...prepareData(JSON.parse((statsGraph as StatsGraph.statsGraph).json.data), percentage),\n ...addOptions\n };\n } : undefined\n } as T,\n settings: {\n darkMode: themeController.isNight(),\n ALL_LABEL: I18n.format('Chart.Tooltip.All', true),\n DATES_SIDE: 'left',\n DATES_WEIGHT: 'normal',\n DATES_FONT_SIZE: 14,\n ZOOM_TEXT: I18n.format('ZoomOut', true),\n FONT: {\n family: FontFamily,\n bold: '500',\n normal: '400'\n },\n COLORS: colors\n }\n });\n\n const setStyles = () => {\n const p: [property: string, value: string][] = [\n ['primary-color', colors.primary],\n ['background-color', colors.background],\n ['background-color-rgb', colors.backgroundRgb.join(', ')],\n ['text-color', colors.text],\n ['secondary-color', colors.secondary],\n ['font-family', FontFamily]\n ];\n\n p.forEach(([property, value]) => {\n tChart.$wrapper.style.setProperty(`--tchart-${property}`, value);\n });\n };\n\n setStyles();\n\n this.listenerSetter.add(rootScope)('theme_changed', () => {\n tChart.setDarkMode(themeController.isNight(), {...colors});\n setStyles();\n });\n });\n\n const titleElement = document.createElement('div');\n const captionElement = document.createElement('div');\n titleElement.classList.add('statistics-title');\n const t = i18n(title);\n t.classList.add('statistics-title-text');\n titleElement.append(t);\n // let zoomOutElement: HTMLElement;\n // if(graph.zoomToken || graph.isPercentage) {\n // zoomOutElement = document.createElement('div');\n // zoomOutElement.classList.add('statistics-title-zoom');\n // zoomOutElement.append(Icon('zoomout', 'statistics-title-zoom-icon'), i18n('ZoomOut'));\n // titleElement.append(zoomOutElement);\n // }\n let container: HTMLDivElement;\n return (\n
\n
\n
\n );\n };\n\n const overviewTitles = this.stats._ === 'stats.broadcastStats' ? CHANNEL_OVERVIEW_ITEMS : (this.isMegagroup ? GROUP_OVERVIEW_ITEMS : (this.isStory ? STORY_OVERVIEW_ITEMS : MESSAGE_OVERVIEW_ITEMS));\n const overviewItems: {value: StatsAbsValueAndPrev | StatsPercentValue, title: LangPackKey}[] = Object.keys(overviewTitles).map((key) => {\n const value = this.stats[key as keyof typeof overviewTitles];\n return value && {\n value,\n title: overviewTitles[key as keyof typeof overviewTitles]\n };\n }).filter(Boolean);\n\n const formatDateRange = (min: number, max: number) => {\n return joinElementsWith([min, max].map((timestamp) => {\n return new I18n.IntlDateElement({\n date: new Date(timestamp * 1e3),\n options: {\n month: 'short',\n day: 'numeric',\n year: 'numeric'\n }\n }).element;\n }), ' — ');\n };\n\n const period = (this.stats as StatsBroadcastStats).period;\n const topPeersTitles: [LangPackKey, LangPackKey, LangPackKey] = ['TopMembers', 'TopAdmins', 'TopInviters'];\n let postsContainer: HTMLDivElement;\n const ret = (\n <>\n {currentPost &&
{currentPost.container}
}\n
\n \n
\n {renderGraph}\n {recentPosts.length &&
\n {recentPosts.map(({container}) => container)}\n
}\n {(topPeers, idx) => {\n if(!topPeers.length) {\n return;\n }\n\n topPeers = topPeers.slice();\n\n const chatlist = appDialogsManager.createChatList();\n chatlist.append(...topPeers.splice(0, 10).map(({container}) => container));\n let moreButton: HTMLElement;\n if(topPeers.length) {\n moreButton = createMoreButton(topPeers.length, () => {\n moreButton.remove();\n chatlist.append(...topPeers.map(({container}) => container));\n }, this.listenerSetter);\n }\n return (\n
\n {chatlist}\n {moreButton}\n
\n );\n }}
\n {publicForwards().count &&
\n {\n appDialogsManager.setListClickListener({\n list: el,\n onFound: (target) => {\n const storyId = target.dataset.storyId;\n if(storyId) {\n createStoriesViewerWithPeer({\n target: () => target.querySelector('.avatar'),\n peerId: target.dataset.peerId.toPeerId(),\n id: +target.dataset.storyId\n });\n return false;\n }\n },\n withContext: undefined,\n autonomous: undefined,\n openInner: true\n });\n }}\n >\n {publicForwards().rendered}\n \n {publicForwards().loadMore && createMoreButton(\n publicForwards().count - publicForwards().rendered.length,\n (button) => {\n const toggle = toggleDisability(button, true);\n const promise = publicForwards().loadMore();\n promise.finally(() => toggle());\n },\n this.listenerSetter\n )}\n
}\n \n );\n\n if(postsContainer) {\n const map: Map = new Map();\n recentPosts.forEach(({container, postInteractionCounters}) => {\n map.set(container, postInteractionCounters);\n });\n\n const findTarget = (e: MouseEvent | TouchEvent) => findUpClassName(e.target, 'statistics-post');\n let counters: PostInteractionCounters;\n\n const onOpenClick = () => {\n this.slider.createTab(AppStatisticsTab).open(\n this.chatId,\n (counters as PostInteractionCounters.postInteractionCountersMessage).msg_id,\n (counters as PostInteractionCounters.postInteractionCountersStory).story_id\n );\n };\n\n attachClickEvent(postsContainer, (e) => {\n counters = map.get(findTarget(e));\n if(!counters) {\n return;\n }\n\n onOpenClick();\n }, {listenerSetter: this.listenerSetter});\n\n createContextMenu({\n buttons: [{\n icon: 'statistics',\n text: 'ViewStatistics',\n onClick: onOpenClick\n }, {\n icon: 'message',\n text: 'Message.Context.Goto',\n onClick: () => {\n appImManager.setInnerPeer({\n peerId: this.chatId.toPeerId(true),\n lastMsgId: (counters as PostInteractionCounters.postInteractionCountersMessage).msg_id\n });\n },\n verify: () => counters._ === 'postInteractionCountersMessage'\n }, {\n icon: 'stories',\n text: 'ViewStory',\n onClick: () => {\n createStoriesViewerWithPeer({\n peerId: this.chatId.toPeerId(true),\n id: (counters as PostInteractionCounters.postInteractionCountersStory).story_id\n });\n },\n verify: () => counters._ === 'postInteractionCountersStory'\n }],\n listenTo: postsContainer,\n listenerSetter: this.listenerSetter,\n findElement: (e) => {\n const target = findTarget(e);\n counters = map.get(target);\n return target;\n },\n middleware: this.middlewareHelper.get()\n });\n }\n\n return ret;\n }\n\n private async renderRecentPost(\n postInteractionCounters: PostInteractionCounters,\n peerId: PeerId = this.chatId.toPeerId(true),\n message?: Message.message,\n storyItem?: StoryItem.storyItem,\n noLabels?: boolean\n ) {\n const subtitleRightFragment = document.createDocumentFragment();\n const a: [Icon, number][] = [\n ['reactions', postInteractionCounters.reactions],\n ['reply', postInteractionCounters.forwards]\n ];\n\n !noLabels && a.forEach(([icon, count]) => {\n if(!count) {\n return;\n }\n\n const i = Icon(icon, 'statistics-post-counter-icon');\n if(icon === 'reply') {\n i.classList.add('icon-reflect');\n }\n\n const e = document.createElement('span');\n e.classList.add('statistics-post-counter');\n e.append(i, formatNumber(count, 1));\n subtitleRightFragment.append(e);\n });\n\n const row = new Row({\n title: true,\n titleRight: noLabels ? undefined : i18n('Views', [numberThousandSplitter(postInteractionCounters.views)]),\n subtitle: true,\n subtitleRight: noLabels ? undefined : subtitleRightFragment,\n clickable: true,\n noWrap: true,\n asLink: !!(message || storyItem)\n });\n\n const {container} = row;\n container.classList.add('statistics-post');\n\n row.title.classList.add('statistics-post-title');\n\n const middleware = this.middlewareHelper.get();\n const mediaEl = document.createElement('div');\n mediaEl.classList.add('statistics-post-media');\n if(message || storyItem) {\n const {node, readyThumbPromise, setStoriesSegments} = avatarNew({\n middleware,\n size: 42,\n isDialog: true,\n peerId\n });\n\n row.container.dataset.peerId = '' + peerId;\n if(storyItem) {\n setStoriesSegments([{length: 1, type: 'unread'}]);\n row.container.dataset.storyId = '' + storyItem.id;\n } else {\n row.container.dataset.mid = '' + message.mid;\n }\n\n mediaEl.append(node);\n await readyThumbPromise;\n row.title.append(await wrapPeerTitle({peerId}));\n row.subtitle.append(formatFullSentTime(message?.date || storyItem?.date));\n row.applyMediaElement(mediaEl, 'abitbigger');\n } else if(postInteractionCounters._ === 'postInteractionCountersMessage') {\n container.classList.add('statistics-post-message');\n message ||= this.messages.get(postInteractionCounters.msg_id);\n const isMediaSet = await wrapReplyDivAndCaption({\n titleEl: row.subtitle,\n title: formatFullSentTime(message.date),\n subtitleEl: row.title,\n message,\n mediaEl,\n middleware,\n withoutMediaType: true\n });\n\n if(!isMediaSet) {\n const {node, readyThumbPromise} = avatarNew({middleware, peerId, size: 42});\n mediaEl.append(node);\n await readyThumbPromise;\n }\n\n row.applyMediaElement(mediaEl, 'abitbigger');\n } else {\n container.classList.add('statistics-post-story');\n storyItem ||= this.stories.get(postInteractionCounters.story_id);\n row.title.append(i18n('Story'));\n row.subtitle.append(formatFullSentTime(storyItem.date));\n\n const border = document.createElement('div');\n border.classList.add('avatar-stories-simple', 'is-unread');\n mediaEl.append(border);\n\n await createRoot((dispose) => {\n middleware.onDestroy(dispose);\n const {ready, div} = wrapStoryMedia({\n storyItem,\n peerId: this.chatId.toPeerId(true),\n forPreview: true,\n noInfo: true,\n withPreloader: false,\n noAspecter: true\n });\n\n const deferred = deferredPromise();\n\n createEffect(() => {\n if(ready()) {\n mediaEl.append(div);\n deferred.resolve();\n }\n });\n\n return deferred;\n });\n\n row.applyMediaElement(mediaEl, 'abitbigger');\n }\n\n return {container, postInteractionCounters};\n }\n\n private renderPeer = async(peer: StatsGroupTopPoster | StatsGroupTopAdmin | StatsGroupTopInviter | Message.message) => {\n const peerId = peer._ === 'message' ? peer.peerId : peer.user_id.toPeerId(false);\n const loadPromises: Promise[] = [];\n const {dom} = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: false,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n loadPromises,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n },\n meAsSaved: false\n });\n\n let toJoin: Node[];\n if(peer._ === 'message') {\n toJoin = [\n await getChatMembersString(peerId.toChatId()),\n i18n('Views', [formatNumber(peer.views, 1)])\n ];\n dom.listEl.dataset.mid = '' + peer.mid;\n } else if(peer._ === 'statsGroupTopPoster') {\n toJoin = [\n peer.messages && i18n('messages', [peer.messages]),\n peer.avg_chars && i18n('CharactersPerMessage', [i18n('Characters', [peer.avg_chars])])\n ];\n } else if(peer._ === 'statsGroupTopAdmin') {\n toJoin = [\n peer.deleted && i18n('Deletions', [peer.deleted]),\n peer.banned && i18n('Bans', [peer.banned]),\n peer.kicked && i18n('Restrictions', [peer.kicked])\n ];\n } else {\n toJoin = [\n peer.invitations && i18n('Invitations', [peer.invitations])\n ];\n }\n\n toJoin = toJoin.filter(Boolean);\n if(toJoin.length) {\n dom.lastMessageSpan.replaceChildren(...join(toJoin, false));\n }\n\n await Promise.all(loadPromises);\n return {container: dom.listEl, peerId};\n };\n\n private renderPublicForward = async(publicForward: PublicForward) => {\n if(publicForward._ === 'publicForwardMessage') {\n const message = publicForward.message as Message.message;\n return this.renderRecentPost({\n _: 'postInteractionCountersMessage',\n forwards: message.forwards,\n msg_id: message.mid,\n views: message.views,\n reactions: message.reactions ? message.reactions.results.reduce((acc, v) => acc + v.count, 0) : 0\n }, message.peerId, message);\n }\n\n const storyItem = publicForward.story as StoryItem.storyItem;\n if(!storyItem) {\n return;\n }\n\n const storyViews = storyItem.views;\n return this.renderRecentPost({\n _: 'postInteractionCountersStory',\n forwards: storyViews?.forwards_count || 0,\n story_id: storyItem.id,\n views: storyViews?.views_count || 0,\n reactions: storyViews?.reactions_count || 0\n }, getPeerId(publicForward.peer), undefined, storyItem);\n };\n\n private async loadStats() {\n const peerId = this.chatId.toPeerId(true);\n const manager = this.managers.appStatisticsManager;\n const loadLimit = 100;\n const func = this.isBroadcast ? manager.getBroadcastStats : (this.isMegagroup ? manager.getMegagroupStats : (this.isStory ? manager.getStoryStats : manager.getMessageStats));\n const postPromise = this.isMessage ? this.managers.appMessagesManager.reloadMessages(peerId, this.mid) : undefined;\n const postPublicForwardsPromise = this.isMessage ? manager.getMessagePublicForwards({peerId, mid: this.mid, limit: loadLimit}) : undefined;\n const storyPromise = this.isStory ? this.managers.appStoriesManager.getStoryById(peerId, this.storyId) : undefined;\n const storyPublicForwardsPromise = this.isStory ? manager.getStoryPublicForwards({peerId, id: this.storyId, limit: loadLimit}) : undefined;\n const {stats, dcId} = await func({\n peerId,\n dark: themeController.isNight(),\n storyId: this.storyId,\n mid: this.mid\n });\n this.stats = stats;\n this.dcId = dcId;\n\n const promises: PromiseLike[] = [];\n for(const key in stats) {\n const value = stats[key as keyof typeof stats] as any as StatsGraph;\n if(value._ === 'statsGraphAsync') {\n const promise = manager.loadAsyncGraph(\n value.token,\n undefined,\n dcId\n ).then((statsGraph) => {\n if(statsGraph._ === 'statsGraphError') {\n delete stats[key as keyof typeof stats];\n return;\n }\n\n stats[key as keyof typeof stats] = statsGraph as any;\n });\n promises.push(promise);\n } else if(value._ === 'statsGraphError') {\n delete stats[key as keyof typeof stats];\n }\n }\n\n const recentPosts = (stats as StatsBroadcastStats).recent_posts_interactions || [];\n recentPosts.forEach((postInteractionCounters) => {\n let promise: PromiseLike;\n if(postInteractionCounters._ === 'postInteractionCountersMessage') {\n promise = this.managers.appMessagesManager.reloadMessages(peerId, postInteractionCounters.msg_id)\n .then((message) => {\n if(!message) {\n indexOfAndSplice(recentPosts, postInteractionCounters);\n return;\n }\n\n this.messages.set(message.mid, message as Message.message);\n });\n } else {\n promise = this.managers.appStoriesManager.getStoryById(peerId, postInteractionCounters.story_id)\n .then((storyItem) => {\n if(!storyItem) {\n indexOfAndSplice(recentPosts, postInteractionCounters);\n return;\n }\n\n this.stories.set(storyItem.id, storyItem);\n });\n }\n\n promises.push(promise);\n });\n\n const renderedPublicForwards = Promise.all([\n postPromise,\n postPublicForwardsPromise,\n storyPromise,\n storyPublicForwardsPromise\n ]).then(async([message, messagePublicForwards, storyItem, storyPublicForwards]) => {\n const [f, setF] = createLoadableList();\n if(!message && !storyItem) {\n return f;\n }\n\n assumeType(stats);\n\n if(message) {\n assumeType(message);\n this.messages.set(message.mid, message);\n const totalPublicForwards = messagePublicForwards.count;\n stats.views = makeAbsStats(message.views);\n stats.reactions = makeAbsStats(message.reactions ? message.reactions.results.reduce((acc, v) => acc + v.count, 0) : 0);\n stats.public_shares = makeAbsStats(totalPublicForwards);\n stats.private_shares = makeAbsStats(message.forwards - totalPublicForwards, true);\n\n setF((value) => (value.count = totalPublicForwards, value));\n\n let offset: string;\n const r = async(statsPublicForwards: StatsPublicForwards.statsPublicForwards) => {\n offset = statsPublicForwards.next_offset;\n\n const promises = statsPublicForwards.forwards.map(this.renderPublicForward);\n const rendered = await Promise.all(promises);\n setF((value) => {\n value.rendered.push(...rendered.map(({container}) => container));\n value.loadMore = offset ? () => {\n return manager.getMessagePublicForwards({\n peerId,\n mid: this.mid,\n limit: loadLimit,\n offset\n }).then(r);\n } : undefined;\n return value;\n });\n };\n\n await r(messagePublicForwards);\n } else {\n const totalPublicForwards = storyPublicForwards.count;\n const storyViews = storyItem.views;\n stats.views = makeAbsStats(storyViews.views_count);\n stats.reactions = makeAbsStats(storyViews.reactions_count || 0);\n stats.public_shares = makeAbsStats(totalPublicForwards);\n stats.private_shares = makeAbsStats(Math.abs((storyViews.forwards_count || 0) - totalPublicForwards), true);\n\n setF((value) => (value.count = totalPublicForwards, value));\n\n let offset: string;\n const r = async(statsPublicForwards: StatsPublicForwards.statsPublicForwards) => {\n offset = statsPublicForwards.next_offset;\n\n const promises = statsPublicForwards.forwards.map(this.renderPublicForward);\n const rendered = await Promise.all(promises);\n setF((value) => {\n value.rendered.push(...rendered.map(({container}) => container));\n value.loadMore = offset ? () => {\n return manager.getStoryPublicForwards({\n peerId,\n id: storyItem.id,\n limit: loadLimit,\n offset\n }).then(r);\n } : undefined;\n return value;\n });\n };\n\n await r(storyPublicForwards);\n }\n\n return f;\n });\n promises.push(renderedPublicForwards);\n\n const topPosters = (stats as StatsMegagroupStats).top_posters || [];\n const topAdmins = (stats as StatsMegagroupStats).top_admins || [];\n const topInvites = (stats as StatsMegagroupStats).top_inviters || [];\n const renderedTopPosters = topPosters.map(this.renderPeer);\n const renderedTopAdmins = topAdmins.map(this.renderPeer);\n const renderedTopInviters = topInvites.map(this.renderPeer);\n\n return Promise.all(promises).then(() => {\n const recentPostsPromises = recentPosts.map((postInteractionCounters) => {\n return this.renderRecentPost(postInteractionCounters);\n });\n\n const currentPostPromise = this.isMessage ? this.renderRecentPost({\n _: 'postInteractionCountersMessage',\n msg_id: this.mid,\n forwards: 0,\n reactions: 0,\n views: 0\n }, undefined, undefined, undefined, true) : undefined;\n\n const promises = [\n Promise.all(recentPostsPromises),\n Promise.all(renderedTopPosters),\n Promise.all(renderedTopAdmins),\n Promise.all(renderedTopInviters),\n renderedPublicForwards,\n currentPostPromise\n ] as const;\n\n return Promise.all(promises);\n });\n }\n\n public async init(chatId: ChatId, mid?: number, storyId?: number) {\n this.container.classList.add('statistics-container');\n\n this.chatId = chatId;\n this.mid = mid;\n this.storyId = storyId;\n this.messages = new Map();\n this.stories = new Map();\n this.openPromise = deferredPromise();\n\n if(mid) {\n this.isMessage = true;\n } else if(storyId) {\n this.isStory = true;\n } else {\n this.isBroadcast = await this.managers.appChatsManager.isBroadcast(chatId);\n this.isMegagroup = await this.managers.appChatsManager.isMegagroup(chatId);\n }\n\n this.setTitle(this.isBroadcast ? 'Statistics' : (this.isMegagroup ? 'GroupStats.Title' : (this.isStory ? 'StoryStatistics' : 'PostStatistics')));\n\n const promise = Promise.all([\n ensureTChart(),\n this.openPromise,\n this.loadStats()\n ]);\n\n const [hide, setHide] = createSignal(false);\n\n const element = await emptyPlaceholder({\n title: () => i18n('LoadingStats'),\n description: () => i18n('LoadingStatsDescription'),\n assetName: 'StatsEmoji',\n middleware: this.middlewareHelper.get(),\n hide,\n isFullSize: true\n });\n\n this.scrollable.append(element);\n promise.then(async([_, __, loaded]) => {\n console.log(this.stats, this.messages, this.stories);\n const div = document.createElement('div');\n this.scrollable.append(div);\n const dispose = render(() => this._construct(...loaded), div);\n this.eventListener.addEventListener('destroy', dispose);\n\n if(liteMode.isAvailable('animations')) {\n const keyframes: Keyframe[] = [{opacity: '1'}, {opacity: '0'}];\n const options: KeyframeAnimationOptions = {duration: 200, fill: 'forwards', easing: 'ease-in-out'};\n const animations = [\n element.animate(keyframes, options),\n div.animate(keyframes.slice().reverse(), options)\n ];\n\n await Promise.all(animations.map((animation) => animation.finished));\n }\n\n setHide(true);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport filterUnique from '../../../helpers/array/filterUnique';\nimport {copyTextToClipboard} from '../../../helpers/clipboard';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport shake from '../../../helpers/dom/shake';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport ListenerSetter from '../../../helpers/listenerSetter';\nimport {Chat, DialogFilter, ExportedChatlistInvite, User} from '../../../layer';\nimport appDialogsManager, {DialogElement} from '../../../lib/appManagers/appDialogsManager';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport hasRights from '../../../lib/appManagers/utils/chats/hasRights';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport I18n, {LangPackKey, i18n} from '../../../lib/langPack';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport wrapPlainText from '../../../lib/richTextProcessor/wrapPlainText';\nimport lottieLoader, {LottieLoader} from '../../../lib/rlottie/lottieLoader';\nimport RLottiePlayer from '../../../lib/rlottie/rlottiePlayer';\nimport rootScope from '../../../lib/rootScope';\nimport AppSelectPeers from '../../appSelectPeers';\nimport Button from '../../button';\nimport ButtonIcon from '../../buttonIcon';\nimport ButtonMenuToggle from '../../buttonMenuToggle';\nimport confirmationPopup from '../../confirmationPopup';\nimport PopupPickUser from '../../popups/pickUser';\nimport ripple from '../../ripple';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport {toastNew} from '../../toast';\nimport getChatMembersString from '../../wrappers/getChatMembersString';\n\nexport class InviteLink {\n public container: HTMLDivElement;\n public textElement: HTMLDivElement;\n public button: HTMLButtonElement;\n public buttonText: HTMLSpanElement\n public onButtonClick: () => void;\n\n public url: string;\n\n constructor({\n buttons,\n button,\n onButtonClick,\n listenerSetter,\n url,\n noRightButton,\n onClick\n }: {\n buttons?: Parameters[0]['buttons'],\n button?: HTMLButtonElement | false,\n onButtonClick?: () => void,\n listenerSetter: ListenerSetter,\n url?: string,\n noRightButton?: boolean,\n onClick?: () => void\n }) {\n this.onButtonClick = onButtonClick;\n\n const linkContainer = this.container = document.createElement('div');\n linkContainer.classList.add('invite-link-container');\n\n const link = document.createElement('div');\n link.classList.add('invite-link', 'rp-overflow');\n\n const text = this.textElement = document.createElement('div');\n text.classList.add('invite-link-text');\n\n let rightButton: HTMLElement;\n if(buttons) {\n rightButton = ButtonMenuToggle({\n buttons,\n direction: 'bottom-left',\n buttonOptions: {noRipple: true},\n listenerSetter\n });\n } else if(!noRightButton) {\n rightButton = ButtonIcon('copy', {noRipple: true});\n attachClickEvent(rightButton, () => this.copyLink(), {listenerSetter});\n }\n\n if(rightButton) rightButton.classList.add('invite-link-menu');\n\n if(!button && button !== false) {\n button = Button('', {text: 'ShareLink'});\n this.buttonText = button.lastElementChild as HTMLSpanElement;\n attachClickEvent(button, () => {\n if(this.onButtonClick) this.onButtonClick();\n else this.shareLink();\n }, {listenerSetter});\n }\n\n if(button) {\n this.button = button;\n button.className = 'btn-primary btn-color-primary invite-link-button';\n }\n\n if(url) this.setUrl(url);\n ripple(link);\n link.append(...[\n text,\n rightButton\n ].filter(Boolean));\n\n linkContainer.append(link, button || '');\n\n attachClickEvent(link, onClick || (() => this.copyLink()), {listenerSetter});\n }\n\n public setUrl(url: string) {\n let s = url;\n if(s.includes('//')) {\n s = url.split('//').slice(1).join('//');\n }\n this.textElement.replaceChildren(wrapPlainText(s));\n this.url = url;\n }\n\n public copyLink = (url: string = this.url) => {\n copyTextToClipboard(url);\n toastNew({langPackKey: 'LinkCopied'});\n };\n\n public shareLink = (url: string = this.url) => {\n PopupPickUser.createSharingPicker({\n onSelect: (peerId) => {\n rootScope.managers.appMessagesManager.sendText({peerId, text: url});\n appImManager.setInnerPeer({peerId});\n }\n });\n };\n}\n\nexport default class AppSharedFolderTab extends SliderSuperTabEventable<{\n delete: () => void,\n edit: (chatlistInvite: ExportedChatlistInvite) => void\n}> {\n private caption: HTMLElement;\n private stickerContainer: HTMLElement;\n private descriptionI18n: I18n.IntlElement;\n private chatsTitleI18n: I18n.IntlElement;\n private confirmBtn: HTMLElement;\n\n private loadAnimationPromise: ReturnType;\n private animation: RLottiePlayer;\n\n public filter: DialogFilter.dialogFilterChatlist;\n public chatlistInvite: ExportedChatlistInvite;\n private selector: AppSelectPeers;\n\n private elementMap: Map;\n\n public isConfirmationNeededOnClose = () => {\n if(this.confirmBtn.classList.contains('hide')) return;\n return confirmationPopup({\n descriptionLangKey: 'BotWebViewChangesMayNotBeSaved',\n button: {\n isDanger: true,\n langKey: 'BotWebViewCloseAnyway'\n }\n });\n };\n\n public static getInitArgs() {\n return {\n animationData: lottieLoader.loadAnimationFromURLManually('Folders_Shared')\n };\n }\n\n public async init(p: ReturnType = AppSharedFolderTab.getInitArgs()) {\n this.container.classList.add('edit-folder-container', 'shared-folder-container');\n this.caption = document.createElement('div');\n this.caption.classList.add('caption');\n this.descriptionI18n = new I18n.IntlElement();\n this.caption.append(this.descriptionI18n.element);\n this.stickerContainer = document.createElement('div');\n this.stickerContainer.classList.add('sticker-container');\n this.confirmBtn = ButtonIcon('check btn-confirm hide blue');\n\n this.header.append(this.confirmBtn);\n\n this.elementMap = new Map();\n\n this.content.remove();\n\n this.setTitle('SharedFolder.Edit.Title');\n\n this.listenerSetter.add(rootScope)('filter_update', (filter) => {\n if(this.filter.id === filter.id) {\n this.filter = filter as DialogFilter.dialogFilterChatlist;\n }\n });\n\n let linkSection: SettingSection;\n if(this.chatlistInvite) {\n const section = linkSection = new SettingSection({name: 'InviteLink'});\n\n const inviteLink: InviteLink = new InviteLink({\n buttons: [{\n icon: 'copy',\n text: 'CopyLink',\n onClick: () => inviteLink.copyLink()\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'DeleteLink',\n onClick: () => {\n this.managers.filtersStorage.deleteExportedInvite(\n this.filter.id,\n this.chatlistInvite.url\n ).then(() => {\n this.eventListener.dispatchEvent('delete');\n this.close();\n });\n }\n }],\n listenerSetter: this.listenerSetter,\n url: this.chatlistInvite.url\n });\n\n section.content.append(inviteLink.container);\n }\n\n {\n const titleI18n = this.chatsTitleI18n = new I18n.IntlElement();\n\n this.selector = new AppSelectPeers({\n middleware: this.middlewareHelper.get(),\n appendTo: this.container,\n onChange: this.onSelectChange,\n peerType: [],\n renderResultsFunc: this.renderResults,\n sectionNameLangPackKey: titleI18n.element,\n sectionCaption: 'SharedFolder.Edit.Subtitle',\n managers: this.managers,\n noSearch: true,\n multiSelect: true\n });\n\n this.selector.scrollable.attachBorderListeners(this.container);\n\n const chatlistPeers = this.chatlistInvite?.peers ?? [];\n const selectedPeers = chatlistPeers.map((peer) => getPeerId(peer));\n this.selector.addInitial(selectedPeers);\n\n const combinedPeerIds = filterUnique(selectedPeers.concat(this.filter.includePeerIds));\n\n const peers = await Promise.all(combinedPeerIds.map((peerId) => this.managers.appPeersManager.getPeer(peerId)));\n const ratings: Map = new Map();\n const peerIds: Map = new Map();\n const peersMap: Map = new Map();\n peers.forEach((peer) => {\n const peerId = peer.id.toPeerId(peer._ !== 'user');\n peerIds.set(peer, peerId);\n peersMap.set(peerId, peer);\n\n let rating = 0;\n if(!this.canSelectPeer(peer)) {\n rating = -1;\n } else if(this.selector.selected.has(peerId)) {\n rating = 1;\n }\n\n ratings.set(peer, rating);\n });\n peers.sort((a, b) => ratings.get(b) - ratings.get(a));\n this.selector.renderResultsFunc(peers.map((peer) => peerIds.get(peer)));\n\n const _add = this.selector.add.bind(this.selector);\n this.selector.add = (options) => {\n const peerId = options.key.toPeerId();\n const dialogElement = this.elementMap.get(peerId as PeerId);\n const {container} = dialogElement;\n if(container.classList.contains('cant-select')) {\n let langPackKey: LangPackKey;\n if(peerId.isUser()) {\n langPackKey = 'SharedFolder.Toast.NoPrivate';\n } else {\n const peer = peersMap.get(peerId) as Chat.channel | Chat.chat;\n langPackKey = (peer as Chat.channel).pFlags.broadcast ? 'SharedFolder.Toast.NoAdminChannel' : 'SharedFolder.Toast.NoAdminGroup';\n }\n\n toastNew({langPackKey});\n shake(container);\n return;\n }\n\n return _add(options);\n };\n\n const _remove = this.selector.remove.bind(this.selector);\n this.selector.remove = (...args) => {\n const peerId = args[0].toPeerId();\n if(this.selector.selected.size <= 1) {\n shake(this.elementMap.get(peerId).container);\n return false;\n }\n\n return _remove(...args);\n };\n }\n\n attachClickEvent(this.confirmBtn, () => {\n const toggle = toggleDisability([this.confirmBtn], true);\n this.managers.filtersStorage.editExportedInvite(\n this.filter.id,\n this.chatlistInvite.url,\n [...this.selector.selected] as PeerId[],\n this.filter.title\n ).then((chatlistInvite) => {\n this.eventListener.dispatchEvent('edit', chatlistInvite);\n this.close();\n }, (error: ApiError) => {\n toggle();\n throw error;\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.selector.scrollable.prepend(...[\n this.stickerContainer,\n this.caption,\n linkSection?.container\n ].filter(Boolean));\n\n this.updateDescription();\n\n return Promise.all([\n this.loadAnimationPromise = p.animationData.then(async(cb) => {\n const player = await cb({\n container: this.stickerContainer,\n loop: false,\n autoplay: false,\n width: 86,\n height: 86\n });\n\n this.animation = player;\n\n return lottieLoader.waitForFirstFrame(player);\n })\n ]);\n }\n\n canSelectPeer = (peer: Chat | User) => {\n if(!peer || !this.chatlistInvite) {\n return false;\n }\n\n if(peer._ === 'user'/* || peer._ === 'chat' */) {\n return false;\n }\n\n return !!getPeerActiveUsernames(peer).length || hasRights(peer as Chat.channel | Chat.chat, 'invite_links');\n };\n\n onSelectChange = (length: number) => {\n this.updateDescription(length);\n if(!this.chatlistInvite) {\n return;\n }\n\n const peerIds = [...this.selector.selected];\n const prev = this.chatlistInvite.peers.map((peer) => getPeerId(peer));\n const isSame = prev.length === peerIds.length && prev.every((peerId) => peerIds.includes(peerId));\n this.confirmBtn.classList.toggle('hide', isSame);\n };\n\n renderResults = async(peerIds: PeerId[]) => {\n const promises = peerIds.map(async(peerId) => {\n const peer = await this.managers.appPeersManager.getPeer(peerId);\n\n const dialogElement = appDialogsManager.addDialogNew({\n peerId,\n container: this.selector.list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n meAsSaved: false,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n const {dom} = dialogElement;\n\n this.elementMap.set(peerId, dialogElement);\n\n const selected = this.selector.selected.has(peerId);\n dom.containerEl.append(this.selector.checkbox(selected));\n // if(selected) dom.listEl.classList.add('active');\n\n const canSelect = this.canSelectPeer(peer);\n if(!canSelect) {\n dom.containerEl.classList.add('cant-select');\n }\n\n let subtitle: HTMLElement;\n if(peer._ === 'user') {\n subtitle = i18n(peer.pFlags.bot ? 'SharedFolder.Cant.ShareBots' : 'SharedFolder.Cant.ShareUsers');\n } else if(!canSelect) {\n subtitle = i18n('SharedFolder.Cant.Share');\n } else {\n subtitle = await getChatMembersString(peer.id, undefined, peer);\n }\n\n dom.lastMessageSpan.append(subtitle);\n });\n\n return Promise.all(promises).then(() => {});\n };\n\n private updateDescription(length = this.chatlistInvite ? this.chatlistInvite.peers.length : undefined) {\n if(!this.chatlistInvite) {\n this.descriptionI18n.compareAndUpdate({key: 'SharedFolder.NoChats'});\n this.chatsTitleI18n.compareAndUpdate({key: 'SharedFolder.NoChats.Title'});\n } else {\n this.descriptionI18n.update({\n key: 'SharedFolder.Edit.Description',\n args: [\n wrapEmojiText(this.filter.title),\n i18n('Chats', [length])\n ]\n });\n\n this.chatsTitleI18n.update({\n key: 'ChatsSelected',\n args: [length]\n });\n }\n }\n\n onOpenAfterTimeout() {\n this.loadAnimationPromise.then(() => {\n this.animation.autoplay = true;\n this.animation.play();\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {render} from 'solid-js/web';\nimport PopupElement from '.';\nimport {PaymentsCheckedGiftCode} from '../../layer';\nimport renderImageFromUrl from '../../helpers/dom/renderImageFromUrl';\nimport {LangPackKey, i18n} from '../../lib/langPack';\nimport {InviteLink} from '../sidebarLeft/tabs/sharedFolder';\nimport {For, JSX} from 'solid-js';\nimport {formatFullSentTime, formatMonthsDuration} from '../../helpers/date';\nimport {AvatarNew} from '../avatarNew';\nimport {PeerTitleTsx} from '../stories/list';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport appImManager, {ChatSetPeerOptions} from '../../lib/appManagers/appImManager';\nimport rootScope from '../../lib/rootScope';\nimport PeerTitle from '../peerTitle';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport PopupPickUser from './pickUser';\nimport {attachClickEvent, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport {toastNew} from '../toast';\nimport shouldDisplayGiftCodeAsGift from '../../helpers/shouldDisplayGiftCodeAsGift';\nimport PopupPremium from './premium';\nimport confirmationPopup from '../confirmationPopup';\nimport anchorCallback from '../../helpers/dom/anchorCallback';\nimport wrapPeerTitle from '../wrappers/peerTitle';\nimport DotRenderer from '../dotRenderer';\nimport themeController from '../../helpers/themeController';\nimport Table, {TablePeer} from '../table';\n\nexport default class PopupGiftLink extends PopupElement {\n private isInChat: boolean;\n\n constructor(\n private slug: string,\n private stack?: ChatSetPeerOptions['stack'],\n private checkedGiftCode?: PaymentsCheckedGiftCode\n ) {\n super('popup-boosts popup-gift-link', {\n closable: true,\n overlayClosable: true,\n body: true,\n withConfirm: true,\n scrollable: true,\n floatingHeader: true,\n footer: true,\n title: true\n });\n\n this.isInChat = !!checkedGiftCode;\n this.construct();\n }\n\n private _construct(dotsCanvas: HTMLElement) {\n const isUsed = !!this.checkedGiftCode.used_date;\n const titleLangKey: LangPackKey = isUsed ? 'BoostingUsedGiftLink' : 'BoostingGiftLink';\n this.title.replaceChildren(i18n(titleLangKey));\n\n const url = this.isInChat && !isUsed ? '' : 'https://t.me/giftcode/' + this.slug;\n\n const inviteLink = new InviteLink({\n button: false,\n listenerSetter: this.listenerSetter,\n url,\n noRightButton: !url,\n onClick: !url && (() => {\n toastNew({langPackKey: 'BoostingOnlyRecipientCode'});\n })\n });\n\n if(dotsCanvas) {\n dotsCanvas.classList.add('invite-link-dots');\n inviteLink.container.appendChild(dotsCanvas);\n }\n\n const makePeer = (peerId: PeerId) => (\n {\n this.hideWithCallback(() => {\n appImManager.setInnerPeer({peerId});\n });\n }}\n />\n );\n\n const isGiveaway = this.checkedGiftCode.pFlags.via_giveaway;\n\n const fromPeerId = getPeerId(this.checkedGiftCode.from_id);\n const toPeerId = this.checkedGiftCode.to_id && getPeerId(this.checkedGiftCode.to_id);\n\n const giveawayAnchor = this.checkedGiftCode.giveaway_msg_id || isGiveaway ? document.createElement('a') : undefined;\n if(giveawayAnchor) {\n giveawayAnchor.href = '#';\n giveawayAnchor.append(i18n('BoostingIncompleteGiveaway'));\n attachClickEvent(giveawayAnchor, () => {\n this.hideWithCallback(() => {\n appImManager.setInnerPeer({\n peerId: fromPeerId,\n lastMsgId: this.checkedGiftCode.giveaway_msg_id\n });\n });\n }, {listenerSetter: this.listenerSetter});\n }\n\n const reasonValue = toPeerId ? (\n toPeerId === rootScope.myId ?\n i18n('BoostingYouWereSelected') :\n i18n('BoostingUserWasSelected', [new PeerTitle({peerId: toPeerId}).element])\n ) : giveawayAnchor;\n\n let content: [LangPackKey, JSX.Element][] = [\n ['BoostingFrom', makePeer(fromPeerId)],\n ['BoostingTo', toPeerId ? makePeer(toPeerId) : i18n('BoostingNoRecipient')],\n ['BoostingGift', i18n('BoostingTelegramPremiumFor', [formatMonthsDuration(this.checkedGiftCode.months)])],\n !this.isInChat && ['BoostingReason', reasonValue],\n ['BoostingDate', formatFullSentTime(this.checkedGiftCode.date, undefined, true)]\n ];\n content = content.filter(Boolean);\n\n const shareLink = anchorCallback((e) => {\n cancelEvent(e);\n this.hideWithCallback(() => {\n PopupGiftLink.shareGiftLink(url, true);\n });\n });\n\n let img: HTMLImageElement;\n const ret = (\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport {copyTextToClipboard} from '../../helpers/clipboard';\nimport {formatFullSentTime} from '../../helpers/date';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport maybe2x from '../../helpers/maybe2x';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {InputInvoice, MessageMedia, PaymentsPaymentForm, PaymentsPaymentReceipt, StarsTransaction, Message, MessageExtendedMedia, Photo, Document, ChatInvite, StarsSubscription, Chat, MessageAction, Boost, WebDocument} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport {i18n} from '../../lib/langPack';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport {replaceButtonIcon} from '../button';\nimport {putPreloader} from '../putPreloader';\nimport Table, {TablePeer} from '../table';\nimport {toastNew} from '../toast';\nimport PopupPayment, {PopupPaymentResult} from './payment';\nimport PopupStars, {getExamplesAnchor, getStarsTransactionTitleAndMedia, StarsAmount, StarsBalance, StarsChange} from './stars';\nimport {JSX} from 'solid-js';\nimport partition from '../../helpers/array/partition';\nimport getServerMessageId from '../../lib/appManagers/utils/messageId/getServerMessageId';\nimport wrapTelegramUrlToAnchor from '../../lib/richTextProcessor/wrapTelegramUrlToAnchor';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport AppMediaViewer from '../appMediaViewer';\nimport {NULL_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport tsNow from '../../helpers/tsNow';\nimport classNames from '../../helpers/string/classNames';\nimport {useChat} from '../../stores/peers';\nimport wrapLocalSticker from '../wrappers/localSticker';\nimport liteMode from '../../helpers/liteMode';\nimport PeerTitle from '../peerTitle';\nimport rootScope from '../../lib/rootScope';\nimport {IconTsx} from '../iconTsx';\n\nexport default class PopupStarsPay extends PopupElement<{\n finish: (result: PopupPaymentResult) => void\n}> {\n private paymentForm: PaymentsPaymentForm.paymentsPaymentFormStars | PaymentsPaymentReceipt.paymentsPaymentReceiptStars;\n private result: PopupPaymentResult;\n private inputInvoice: InputInvoice;\n private isReceipt: boolean;\n private isTopUp: boolean;\n private paidMedia: MessageMedia.messageMediaPaidMedia;\n private message: Message.message;\n private peerId: PeerId;\n private transaction: StarsTransaction;\n private chatInvite: ChatInvite.chatInvite;\n private subscription: StarsSubscription;\n private isOutGift: boolean;\n private boost: Boost;\n\n constructor(options: ConstructorParameters[0]) {\n super('popup-stars popup-stars-pay', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n footer: true,\n withConfirm: true,\n title: true\n });\n\n safeAssign(this, options);\n this.footer.classList.add('abitlarger');\n this.result = 'cancelled';\n\n const onConfirm = async() => {\n const {paymentForm} = this;\n if(this.isReceipt || (!paymentForm && !this.chatInvite && !this.subscription)) {\n this.hide();\n return;\n }\n\n const d = putPreloader(this.btnConfirm);\n const toggle = toggleDisability([this.btnConfirm], true);\n this.result = 'pending';\n\n let result: Promise;\n if(this.subscription) {\n result = this.managers.appPaymentsManager.changeStarsSubscription(\n this.subscription.id,\n !this.subscription.pFlags.canceled\n );\n } else {\n result = this.managers.appPaymentsManager.sendStarsForm(\n this.inputInvoice,\n (paymentForm as PaymentsPaymentForm.paymentsPaymentFormStars)?.form_id || this.chatInvite.subscription_form_id\n );\n }\n\n try {\n await result;\n this.result = 'paid';\n this.hide();\n } catch(err) {\n let shouldRetry = false;\n if((err as ApiError).type === 'BALANCE_TOO_LOW') {\n PopupElement.createPopup(PopupStars, {\n itemPrice: paymentForm ? +paymentForm.invoice.prices[0].amount : (this.chatInvite ? +this.chatInvite.subscription_pricing.amount : +this.subscription.pricing.amount),\n paymentForm: paymentForm as PaymentsPaymentForm.paymentsPaymentFormStars,\n onTopup: async() => {\n await this.reloadForm();\n onConfirm();\n }\n });\n } else if((err as ApiError).type === 'FORM_EXPIRED') {\n await this.reloadForm();\n shouldRetry = true;\n } else {\n this.result = 'failed';\n }\n\n toggle();\n d.remove();\n\n if(shouldRetry) {\n onConfirm();\n }\n }\n };\n\n attachClickEvent(this.btnConfirm, onConfirm, {listenerSetter: this.listenerSetter});\n }\n\n private get form() {\n return this.paymentForm || this.transaction;\n }\n\n public hide() {\n this.dispatchEvent('finish', this.result);\n return super.hide();\n }\n\n private async reloadForm() {\n if(!this.paymentForm) {\n return;\n }\n\n this.paymentForm = await this.managers.appPaymentsManager.getPaymentForm(this.inputInvoice) as PaymentsPaymentForm.paymentsPaymentFormStars;\n }\n\n public setPaymentForm(paymentForm: PopupStarsPay['paymentForm']) {\n this.paymentForm = paymentForm;\n this.isReceipt = !!this.transaction || paymentForm?._ === 'payments.paymentReceiptStars';\n this.isOutGift = !!this.transaction && !this.transaction.id;\n this.construct();\n }\n\n private _construct(\n image: HTMLElement,\n _title: HTMLElement,\n avatar: HTMLElement,\n link?: string\n ) {\n if(!this.isReceipt && (!this.subscription || tsNow(true) > this.subscription.until_date)) {\n this.header.append(StarsBalance() as HTMLElement);\n }\n\n this.footer.append(this.btnConfirm);\n this.body.after(this.footer);\n let amount: Long;\n if(this.paymentForm) {\n const labeledPrice = this.paymentForm.invoice.prices[0];\n amount = labeledPrice.amount;\n } else if(this.chatInvite) {\n amount = this.chatInvite.subscription_pricing.amount;\n } else if(this.subscription) {\n amount = this.subscription.pricing.amount;\n } else {\n amount = this.transaction.stars;\n }\n\n if(this.isReceipt) {\n this.btnConfirm.append(i18n('OK'));\n } else if(this.chatInvite) {\n this.btnConfirm.append(i18n('Stars.Subscribe.Button'));\n const terms = i18n('Stars.Subscribe.Terms');\n terms.classList.add('popup-footer-caption');\n this.btnConfirm.after(terms);\n } else if(this.subscription) {\n if(this.subscription.pFlags.canceled) {\n this.btnConfirm.append(i18n('Stars.Subscription.Renew'));\n } else {\n this.btnConfirm.className = 'btn-primary btn-secondary btn-primary-transparent danger';\n this.btnConfirm.append(i18n('Stars.Subscription.Cancel'));\n }\n\n if(this.subscription.until_date > tsNow(true)) {\n const chat = useChat(this.peerId.toChatId());\n if((chat as Chat.channel).pFlags.left) {\n const btnFulfill = document.createElement('button');\n btnFulfill.classList.add('btn-primary', 'btn-color-primary');\n btnFulfill.append(i18n('Stars.Subscription.Fulfill'));\n btnFulfill.style.marginTop = '.5rem';\n attachClickEvent(btnFulfill, async() => {\n const toggle = toggleDisability([this.btnConfirm, btnFulfill], true);\n try {\n await this.managers.appPaymentsManager.fulfillStarsSubscription(this.subscription.id);\n hidePopupsWithCallback(() => {\n appImManager.setInnerPeer({peerId: this.peerId});\n });\n } catch(err) {\n console.error('fulfill error', err);\n toggle();\n }\n }, {listenerSetter: this.listenerSetter});\n this.btnConfirm.after(btnFulfill);\n }\n }\n } else {\n this.btnConfirm.append(i18n('Stars.ConfirmPurchaseButton', [amount]));\n replaceButtonIcon(this.btnConfirm, 'star');\n }\n\n const hidePopupsWithCallback = (callback: () => void, e?: Event) => {\n cancelEvent(e);\n this.hide();\n const starsPopups = PopupElement.getPopups(PopupStars);\n starsPopups?.[0]?.hide();\n this.hideWithCallback(callback);\n };\n\n let noStarsChange = false;\n let title: JSX.Element, subtitle: JSX.Element;\n if(this.transaction && this.transaction.pFlags.gift) {\n title = i18n(this.isOutGift ? 'StarsGiftSent' : 'StarsGiftReceived');\n subtitle = document.createDocumentFragment();\n const anchor = getExamplesAnchor(hidePopupsWithCallback);\n const title1 = new PeerTitle();\n title1.update({peerId: this.peerId, wrapOptions: {middleware: this.middlewareHelper.get()}});\n (subtitle as DocumentFragment).append(\n i18n(this.isOutGift ? 'ActionGiftStarsSubtitle' : 'ActionGiftStarsSubtitleYou', [title1.element]),\n ' ',\n anchor\n );\n } else if(this.transaction?.extended_media) {\n title = i18n('StarMediaPurchase');\n } else if(this.paidMedia) {\n const [photos, videos] = partition(this.paidMedia.extended_media, (extendedMedia) => {\n if(extendedMedia._ === 'messageExtendedMedia') {\n return extendedMedia.media._ !== 'messageMediaDocument';\n } else {\n return extendedMedia.video_duration === undefined;\n }\n });\n\n const multiplePhotosLang = i18n('Stars.Unlock.Photos', [photos.length]);\n const multipleVideosLang = i18n('Stars.Unlock.Videos', [videos.length]);\n\n title = i18n('StarsConfirmPurchaseTitle');\n subtitle = i18n(this.peerId.isUser() ? 'Stars.Unlock.FromBot' : 'Stars.Unlock', [\n photos.length && videos.length ?\n i18n('Stars.Unlock.Media', [multiplePhotosLang, multipleVideosLang]) :\n (photos.length || videos.length) === 1 ? i18n(photos.length ? 'Stars.Unlock.Photo' : 'Stars.Unlock.Video') : (photos.length ? multiplePhotosLang : multipleVideosLang),\n _title,\n i18n('Stars.Unlock.Stars', [amount])\n ]);\n } else if(this.transaction && this.transaction.pFlags.reaction) {\n title = i18n('StarsReactionTitle');\n } else if(this.transaction?.giveaway_post_id) {\n title = i18n(!this.transaction.id ? 'Stars' : 'StarsGiveawayPrizeReceived', [this.transaction.stars]);\n if(!this.transaction.id) {\n subtitle = (\n \n \n {i18n('BoostingBoostsCountTitle', [this.boost.multiplier || 1])}\n \n );\n noStarsChange = true;\n }\n } else if(this.transaction && !this.form.title) {\n title = i18n(this.transaction.subscription_period ? 'Stars.Subscription.Title' : 'Stars.TopUp');\n } else if(this.chatInvite) {\n title = i18n('Stars.Subscribe.Title');\n _title.style.display = 'inline';\n subtitle = i18n('Stars.Subscribe.Description', [_title, i18n('Stars.Unlock.Stars', [amount])]);\n } else if(this.subscription) {\n title = i18n('Stars.Subscription');\n subtitle = i18n('Stars.Subscription.Fee', [StarsAmount({stars: amount}) as HTMLElement]);\n (subtitle as HTMLElement).classList.add('secondary');\n } else {\n title = this.isReceipt ? wrapEmojiText(this.form.title) : i18n('StarsConfirmPurchaseTitle');\n subtitle = this.isReceipt ? wrapEmojiText(this.form.description) : i18n('StarsConfirmPurchaseText', [amount, wrapEmojiText(this.paymentForm.title), _title]);\n }\n\n const transactionId = this.transaction?.id ?? (this.paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceiptStars)?.transaction_id;\n const onTransactionClick = () => {\n copyTextToClipboard(transactionId);\n toastNew({langPackKey: 'StarsTransactionIDCopied'});\n };\n\n const messageAnchor = link && wrapTelegramUrlToAnchor(link);\n if(messageAnchor) {\n messageAnchor.textContent = link.replace('https://', '');\n messageAnchor.onclick = (e) => hidePopupsWithCallback(() => appImManager.openUrl(link), e);\n }\n\n const makeTablePeer = (peerId: PeerId) => TablePeer({\n peerId,\n onClick: () => {\n hidePopupsWithCallback(() => {\n appImManager.setInnerPeer({peerId})\n });\n }\n });\n\n const tablePeer = (this.isReceipt || this.subscription) && makeTablePeer(this.peerId);\n\n const transactionIdSpan = transactionId && ({wrapRichText(transactionId, {entities: [{_: 'messageEntityCode', length: transactionId.length, offset: 0}]})});\n\n let tableContent: Parameters[0]['content'];\n if(this.subscription) {\n tableContent = [\n ['Stars.Subscription', tablePeer],\n ['Stars.Subscription.Subscribed', formatFullSentTime(this.subscription.until_date - this.subscription.pricing.period)],\n ['Stars.Subscription.Renews', formatFullSentTime(this.subscription.until_date)]\n ];\n } else if(this.transaction?.giveaway_post_id) {\n messageAnchor.replaceChildren(i18n('BoostingGiveaway'));\n tableContent = [\n ['BoostingFrom', tablePeer],\n this.transaction.id && ['BoostingTo', makeTablePeer(rootScope.myId)],\n [this.transaction.id ? 'BoostingGift' : 'Giveaway.Prize', i18n('Stars', [+this.transaction.stars])],\n ['BoostingReason', messageAnchor],\n this.transaction.id && ['StarsTransactionID', transactionIdSpan],\n ['StarsTransactionDate', formatFullSentTime((this.form as PaymentsPaymentReceipt.paymentsPaymentReceiptStars).date, undefined, true)]\n ];\n } else if(this.transaction && this.transaction.pFlags.gift) {\n tableContent = [\n [this.isOutGift ? 'BoostingTo' : 'BoostingFrom', tablePeer],\n ['StarsTransactionDate', formatFullSentTime((this.form as PaymentsPaymentReceipt.paymentsPaymentReceiptStars).date, undefined, true)]\n ];\n } else if(this.isReceipt) {\n tableContent = [\n this.peerId ? [\n this.transaction?.subscription_period ? 'Stars.Subscription' : 'BoostingTo',\n tablePeer\n ] : ['Stars.Via', _title],\n this.transaction && (this.transaction.extended_media || this.transaction.pFlags.reaction) && messageAnchor && [this.transaction.pFlags.reaction ? 'Message' : 'StarsTransactionMedia', messageAnchor],\n ['StarsTransactionID', transactionIdSpan],\n ['StarsTransactionDate', formatFullSentTime((this.form as PaymentsPaymentReceipt.paymentsPaymentReceiptStars).date, undefined, true)]\n ];\n }\n\n return (\n
\n {image}\n
\n {\n if(!this.isReceipt || !this.transaction.extended_media) {\n return;\n }\n\n const extendedMedia = this.transaction.extended_media;\n const media = extendedMedia.map((messageMedia) => {\n return (messageMedia as MessageMedia.messageMediaPhoto).photo as Photo.photo ||\n (messageMedia as MessageMedia.messageMediaDocument).document as Document.document;\n });\n\n const message = await this.managers.appMessagesManager.generateStandaloneOutgoingMessage(this.peerId);\n message.media = {\n _: 'messageMediaPaidMedia',\n extended_media: extendedMedia.map((messageMedia) => {\n return {_: 'messageExtendedMedia', media: messageMedia};\n }),\n stars_amount: 0\n };\n message.id = getServerMessageId(this.transaction.msg_id);\n message.mid = this.transaction.msg_id;\n\n const targets: AppMediaViewer['target'][] = media.map((media, index) => {\n return {element: null, mid: 0, peerId: 0, index, message};\n });\n\n targets[0].element = avatar;\n\n new AppMediaViewer(true)\n .setSearchContext({peerId: 0, inputFilter: {_: 'inputMessagesFilterEmpty'}, useSearch: false})\n .openMedia({\n message,\n target: targets[0].element,\n fromRight: 0,\n reverse: false,\n prevTargets: [],\n nextTargets: targets.slice(1)\n });\n }}\n >{avatar}
\n
\n
{title}
\n {tableContent && !this.subscription && !noStarsChange && }\n {subtitle &&
{subtitle}
}\n {tableContent && (\n <>\n \n
{i18n('Stars.TransactionTOS')}
\n {this.subscription && (\n
{\n i18n(\n this.subscription.pFlags.canceled ?\n 'Stars.Subscription.Cancelled' :\n 'Stars.Subscription.Active',\n [formatFullSentTime(this.subscription.until_date)]\n )\n }
\n )}\n \n )}\n \n );\n }\n\n private async construct() {\n if(this.chatInvite) {\n this.peerId = NULL_PEER_ID;\n } else if(this.paymentForm) {\n this.peerId = this.paymentForm.bot_id.toPeerId(false);\n } else if(this.subscription) {\n this.peerId = getPeerId(this.subscription.peer);\n } else if(this.transaction.peer._ === 'starsTransactionPeer') {\n this.peerId = getPeerId(this.transaction.peer.peer);\n }\n\n const [image, {title, media}, link] = await Promise.all([\n (async() => {\n const img = document.createElement('img');\n img.classList.add('popup-stars-image');\n await renderImageFromUrlPromise(img, `assets/img/${maybe2x(this.boost ? 'stars' : 'stars_pay')}.png`);\n return img;\n })(),\n (async() => {\n const result = await getStarsTransactionTitleAndMedia({\n transaction: this.transaction,\n middleware: this.middlewareHelper.get(),\n size: 90,\n paidMedia: this.paidMedia,\n paidMediaPeerId: this.message ? this.message.fwdFromId || this.message.fromId : this.peerId,\n chatInvite: this.chatInvite,\n subscription: this.subscription,\n photo: this.form?.photo as WebDocument.webDocument\n });\n\n if(this.boost) {\n result.media = undefined;\n // const img = document.createElement('img');\n // await renderImageFromUrlPromise(img, `assets/img/${maybe2x('stars')}.png`);\n // result.media = img;\n // img.classList.add('popup-stars-pay-star');\n } else if(this.transaction && (this.transaction.pFlags.gift || this.transaction.giveaway_post_id)) {\n const size = 128;\n result.media = await wrapLocalSticker({\n width: size,\n height: size,\n assetName: 'Gift3',\n middleware: this.middlewareHelper.get(),\n loop: false,\n autoplay: liteMode.isAvailable('stickers_chat')\n }).then(async({container, promise}) => {\n container.classList.add('popup-stars-pay-sticker');\n await promise;\n return container as HTMLDivElement;\n });\n } else {\n result.media.classList.add('popup-stars-pay-item');\n }\n\n return result;\n })(),\n (async() => {\n if(\n (!this.transaction || (!this.transaction.extended_media && !this.transaction.pFlags.reaction && !this.transaction.giveaway_post_id)) ||\n !this.peerId ||\n this.peerId.isUser()\n ) {\n return;\n }\n\n return this.managers.apiManager.invokeApi('channels.exportMessageLink', {\n channel: await this.managers.appChatsManager.getChannelInput(this.peerId.toChatId()),\n id: getServerMessageId(this.transaction.msg_id || this.transaction.giveaway_post_id)\n }).then((exportedMessageLink) => {\n return exportedMessageLink.link;\n }, () => undefined as string);\n })()\n ]);\n this.body.classList.toggle('is-receipt', this.isReceipt);\n this.appendSolid(() => this._construct(image, title, media, link));\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport Currencies from '../../config/currencies';\nimport {FontFamily, FontFull, FontSize} from '../../config/font';\nimport accumulate from '../../helpers/array/accumulate';\nimport getTextWidth from '../../helpers/canvas/getTextWidth';\nimport {detectUnifiedCardBrand} from '../../helpers/cards/cardBrands';\nimport {attachClickEvent, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport findUpAsChild from '../../helpers/dom/findUpAsChild';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport {formatPhoneNumber} from '../../helpers/formatPhoneNumber';\nimport {makeMediaSize} from '../../helpers/mediaSize';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport ScrollSaver from '../../helpers/scrollSaver';\nimport {_tgico} from '../../helpers/tgico';\nimport tsNow from '../../helpers/tsNow';\nimport {AccountTmpPassword, Boost, ChatInvite, DocumentAttribute, InputInvoice, InputPaymentCredentials, LabeledPrice, Message, MessageAction, MessageMedia, PaymentRequestedInfo, PaymentSavedCredentials, PaymentsPaymentForm, PaymentsPaymentReceipt, PaymentsValidatedRequestedInfo, PostAddress, ShippingOption, StarsSubscription, StarsTransaction} from '../../layer';\nimport I18n, {i18n, LangPackKey, _i18n} from '../../lib/langPack';\nimport {NULL_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport rootScope from '../../lib/rootScope';\nimport {avatarNew} from '../avatarNew';\nimport Button from '../button';\nimport CheckboxField from '../checkboxField';\nimport PeerTitle from '../peerTitle';\nimport {putPreloader} from '../putPreloader';\nimport Row from '../row';\nimport {toastNew} from '../toast';\nimport wrapPeerTitle from '../wrappers/peerTitle';\nimport wrapPhoto from '../wrappers/photo';\nimport PopupPaymentCard, {PaymentCardDetails, PaymentCardDetailsResult} from './paymentCard';\nimport PopupPaymentCardConfirmation from './paymentCardConfirmation';\nimport PopupPaymentShipping, {PaymentShippingAddress} from './paymentShipping';\nimport PopupPaymentShippingMethods from './paymentShippingMethods';\nimport PopupPaymentVerification from './paymentVerification';\nimport PopupStarsPay from './starsPay';\n\nconst USE_NATIVE_SYMBOL = true;\nconst iconPath = 'assets/img/';\nconst icons = [\n 'amex',\n 'card',\n 'diners',\n 'discover',\n 'jcb',\n 'mastercard',\n 'visa',\n 'unionpay',\n 'mir',\n 'logo'\n];\n\nexport function getPaymentBrandIconPath(brand: string) {\n if(!icons.includes(brand)) {\n return;\n }\n\n return `${iconPath}${brand}.svg`;\n}\n\nexport function PaymentButton(options: {\n onClick: () => Promise | void,\n key?: LangPackKey,\n textEl?: I18n.IntlElement\n}) {\n const textEl = options.textEl ?? new I18n.IntlElement({key: options.key ?? 'PaymentInfo.Done'});\n const key = textEl.key;\n const payButton = Button('btn-primary btn-color-primary payment-item-pay');\n payButton.append(textEl.element);\n attachClickEvent(payButton, async() => {\n const result = options.onClick();\n if(!(result instanceof Promise)) {\n return;\n }\n\n const d = putPreloader(payButton);\n const toggle = toggleDisability([payButton], true);\n textEl.compareAndUpdate({key: 'PleaseWait'});\n try {\n await result;\n } catch(err) {\n if(!(err as ApiError).handled) {\n console.error('payment button error', err);\n }\n\n toggle();\n textEl.compareAndUpdate({key});\n d.remove();\n }\n });\n return payButton;\n}\n\nexport type PaymentsCredentialsToken = {type: 'card', token?: string, id?: string};\n\nexport type PopupPaymentResult = 'paid' | 'cancelled' | 'pending' | 'failed';\n\nexport class InputRightNumber {\n public input: HTMLInputElement;\n\n constructor(public options: {\n fontWeight?: number\n } = {}) {\n const input = this.input = document.createElement('input');\n input.type = 'tel';\n // const input: HTMLElement = document.createElement('div');\n // input.contentEditable = 'true';\n input.classList.add('input-clear');\n\n const haveToIgnoreEvents = input instanceof HTMLInputElement ? 1 : 2;\n const onSelectionChange = () => {\n if(ignoreNextSelectionChange) {\n --ignoreNextSelectionChange;\n return;\n }\n\n // setTimeout(() => {\n ignoreNextSelectionChange = haveToIgnoreEvents;\n placeCaretAtEnd(input);\n // }, 0);\n };\n\n const onFocus = () => {\n // cancelEvent(e);\n setTimeout(() => {\n ignoreNextSelectionChange = haveToIgnoreEvents;\n placeCaretAtEnd(input);\n document.addEventListener('selectionchange', onSelectionChange);\n }, 0);\n };\n\n const onFocusOut = () => {\n input.addEventListener('focus', onFocus, {once: true});\n document.removeEventListener('selectionchange', onSelectionChange);\n };\n\n let ignoreNextSelectionChange: number;\n input.addEventListener('focusout', onFocusOut);\n onFocusOut();\n }\n\n public get value() {\n // return input.textContent;\n return this.input.value;\n }\n\n public set value(value: string) {\n this.input.value = value;\n // input.textContent = wrapped;\n this.onValue();\n }\n\n public onValue() {\n if(document.activeElement === this.input) {\n placeCaretAtEnd(this.input);\n }\n\n this.setWidth();\n }\n\n public setWidth() {\n const width = getTextWidth(this.value, this.options?.fontWeight ? `${this.options.fontWeight} ${FontSize} ${FontFamily}` : FontFull);\n this.input.style.width = width + 'px';\n }\n}\n\nexport default class PopupPayment extends PopupElement<{\n finish: (result: PopupPaymentResult) => void\n}> {\n private tipButtonsMap: Map;\n private result: PopupPaymentResult;\n private message: Message.message;\n private inputInvoice: InputInvoice;\n private paymentForm?: PaymentsPaymentForm | PaymentsPaymentReceipt;\n private isReceipt: boolean;\n\n constructor(options: {\n message?: Message.message,\n inputInvoice?: InputInvoice,\n paymentForm?: PaymentsPaymentForm | PaymentsPaymentReceipt,\n isReceipt?: boolean,\n\n // * stars only\n isTopUp?: boolean,\n transaction?: StarsTransaction,\n paidMedia?: MessageMedia.messageMediaPaidMedia,\n chatInvite?: ChatInvite.chatInvite,\n noPaymentForm?: boolean,\n subscription?: StarsSubscription,\n giftAction?: MessageAction.messageActionGiftStars,\n boost?: Boost\n }) {\n super('popup-payment', {\n closable: true,\n overlayClosable: true,\n body: true,\n scrollable: true,\n title: true\n });\n\n safeAssign(this, options);\n\n this.result = 'cancelled';\n\n this.tipButtonsMap = new Map();\n }\n\n public hide() {\n this.dispatchEvent('finish', this.result);\n return super.hide();\n }\n\n public setPaymentForm(paymentForm: PaymentsPaymentForm | PaymentsPaymentReceipt) {\n this.paymentForm = paymentForm;\n this.d().catch((err) => {\n console.error('payment popup error', err);\n this.hide();\n });\n }\n\n private async d() {\n this.element.classList.add('is-loading');\n this.show();\n\n let confirmed = false;\n const onConfirmed = () => {\n if(confirmed) {\n return;\n }\n\n this.result = 'paid';\n confirmed = true;\n if(popupPaymentVerification) {\n popupPaymentVerification.hide();\n }\n\n this.hide();\n };\n\n const {paymentForm, message} = this;\n\n if(message) {\n this.listenerSetter.add(rootScope)('payment_sent', ({peerId, mid}) => {\n if(message.peerId === peerId && message.mid === mid) {\n onConfirmed();\n }\n });\n }\n\n const mediaInvoice = message?.media as MessageMedia.messageMediaInvoice;\n const isReceipt = this.isReceipt ??\n (\n mediaInvoice ?\n !!mediaInvoice.receipt_msg_id || mediaInvoice.extended_media?._ === 'messageExtendedMedia' :\n paymentForm._ === 'payments.paymentReceipt'\n );\n const isTest = mediaInvoice ? mediaInvoice.pFlags.test : paymentForm.invoice.pFlags.test;\n const isStars = paymentForm._ === 'payments.paymentFormStars';\n\n const photo = mediaInvoice ? mediaInvoice.photo : paymentForm.photo;\n const title = mediaInvoice ? mediaInvoice.title : paymentForm.title;\n const description = mediaInvoice ? mediaInvoice.description : paymentForm.description;\n\n _i18n(this.title, isReceipt ? 'PaymentReceipt' : 'PaymentCheckout');\n if(isTest) {\n this.title.append(' (Test)');\n }\n\n const className = 'payment-item';\n\n const itemEl = document.createElement('div');\n itemEl.classList.add(className);\n\n const detailsClassName = className + '-details';\n const details = document.createElement('div');\n details.classList.add(detailsClassName);\n\n let photoEl: HTMLElement;\n if(photo) {\n photoEl = document.createElement('div');\n photoEl.classList.add(detailsClassName + '-photo', 'media-container-contain');\n const sizeAttribute = photo.attributes.find((attribute) => attribute._ === 'documentAttributeImageSize') as DocumentAttribute.documentAttributeImageSize;\n const boxSize = makeMediaSize(100, 100);\n if(sizeAttribute) {\n const photoSize = makeMediaSize(sizeAttribute.w, sizeAttribute.h);\n const fittedSize = photoSize.aspectFitted(boxSize);\n photoEl.style.width = fittedSize.width + 'px';\n photoEl.style.height = fittedSize.height + 'px';\n }\n\n wrapPhoto({\n photo: photo,\n container: photoEl,\n boxWidth: boxSize.width,\n boxHeight: boxSize.height,\n size: {_: 'photoSizeEmpty', type: ''}\n });\n details.append(photoEl);\n }\n\n const linesClassName = detailsClassName + '-lines';\n const linesEl = document.createElement('div');\n linesEl.classList.add(linesClassName);\n\n const titleEl = document.createElement('div');\n titleEl.classList.add(linesClassName + '-title');\n\n const descriptionEl = document.createElement('div');\n descriptionEl.classList.add(linesClassName + '-description');\n\n const botName = document.createElement('div');\n botName.classList.add(linesClassName + '-bot-name');\n\n linesEl.append(titleEl, descriptionEl, botName);\n\n setInnerHTML(titleEl, wrapEmojiText(title));\n setInnerHTML(descriptionEl, wrapEmojiText(description));\n\n const peerTitle = new PeerTitle();\n botName.append(peerTitle.element);\n\n details.append(linesEl);\n itemEl.append(details);\n this.scrollable.append(itemEl);\n\n const preloaderContainer = document.createElement('div');\n preloaderContainer.classList.add(className + '-preloader-container');\n const preloader = putPreloader(preloaderContainer, true);\n this.scrollable.append(preloaderContainer);\n\n const inputInvoice = this.inputInvoice;\n\n let savedInfo = (paymentForm as PaymentsPaymentForm.paymentsPaymentForm).saved_info || (paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).info;\n const savedCredentials = (paymentForm as PaymentsPaymentForm.paymentsPaymentForm).saved_credentials?.[0];\n let [\n lastRequestedInfo,\n passwordState,\n providerPeerTitle\n ] = await Promise.all([\n !isReceipt && savedInfo && this.managers.appPaymentsManager.validateRequestedInfo(inputInvoice, savedInfo).catch((err: ApiError) => {\n console.error('validateRequestedInfo', err, savedInfo);\n // savedInfo = undefined;\n return undefined as PaymentsValidatedRequestedInfo;\n }),\n savedCredentials && this.managers.passwordManager.getState(),\n wrapPeerTitle({peerId: isStars ? NULL_PEER_ID : (paymentForm as PaymentsPaymentForm.paymentsPaymentForm).provider_id.toPeerId()})\n ]);\n\n // console.log(paymentForm, lastRequestedInfo);\n\n await peerTitle.update({peerId: paymentForm.bot_id.toPeerId()});\n preloaderContainer.remove();\n this.element.classList.remove('is-loading');\n\n const wrapAmount = (amount: string | number, skipSymbol?: boolean) => {\n return paymentsWrapCurrencyAmount(amount, currency, skipSymbol, USE_NATIVE_SYMBOL, true);\n };\n\n const {invoice} = paymentForm;\n const currency = invoice.currency;\n\n const isRecurring = invoice.pFlags.recurring && !isReceipt;\n const hasTerms = !!invoice.terms_url;\n\n await peerTitle.update({peerId: paymentForm.bot_id.toPeerId()});\n const peerTitle2 = isRecurring || hasTerms ? await wrapPeerTitle({peerId: paymentForm.bot_id.toPeerId()}) : undefined;\n preloaderContainer.remove();\n this.element.classList.remove('is-loading');\n\n const makeLabel = () => {\n const labelEl = document.createElement('div');\n labelEl.classList.add(pricesClassName + '-price');\n\n const left = document.createElement('span');\n const right = document.createElement('span');\n labelEl.append(left, right);\n return {label: labelEl, left, right};\n };\n\n const pricesClassName = className + '-prices';\n const prices = document.createElement('div');\n prices.classList.add(pricesClassName);\n const makePricesElements = (prices: LabeledPrice[]) => {\n return prices.map((price) => {\n const {amount, label} = price;\n\n const _label = makeLabel();\n _label.left.append(wrapEmojiText(label));\n\n const wrappedAmount = wrapAmount(amount);\n _label.right.textContent = wrappedAmount;\n\n return _label.label;\n });\n };\n\n const pricesElements = makePricesElements(invoice.prices);\n\n let getTipsAmount = (): number => 0;\n let shippingAmount = 0;\n\n const getTotalTotal = () => totalAmount + getTipsAmount() + shippingAmount;\n const setTotal = () => {\n const wrapped = wrapAmount(getTotalTotal());\n totalLabel.right.textContent = wrapped;\n payI18n.compareAndUpdate({\n key: 'PaymentCheckoutPay',\n args: [wrapped]\n });\n };\n\n const payI18n = new I18n.IntlElement();\n\n const totalLabel = makeLabel();\n totalLabel.label.classList.add('is-total');\n _i18n(totalLabel.left, 'PaymentTransactionTotal');\n const totalAmount = accumulate(invoice.prices.map(({amount}) => +amount), 0);\n\n const canTip = (invoice.max_tip_amount !== undefined && !isReceipt) || !!(paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).tip_amount;\n if(canTip) {\n const tipsClassName = className + '-tips';\n\n const currencyData = Currencies[currency];\n\n getTipsAmount = () => +inputRightNumber.value.replace(/\\D/g, '');\n\n const setInputValue = (amount: string | number) => {\n amount = Math.min(+amount, +invoice.max_tip_amount);\n const wrapped = wrapAmount(amount, true);\n\n inputRightNumber.value = wrapped;\n\n unsetActiveTip?.();\n const tipEl = this.tipButtonsMap.get(amount);\n if(tipEl) {\n tipEl.classList.add('active');\n }\n\n setTotal();\n };\n\n const tipsLabel = makeLabel();\n _i18n(tipsLabel.left, isReceipt ? 'PaymentTip' : 'PaymentTipOptional');\n const inputRightNumber = new InputRightNumber({fontWeight: 500});\n const {input} = inputRightNumber;\n input.classList.add('input-clear', tipsClassName + '-input');\n tipsLabel.right.append(input);\n\n if(!isReceipt) {\n tipsLabel.label.style.cursor = 'text';\n } else {\n tipsLabel.label.classList.add('disable-hover');\n }\n\n tipsLabel.label.addEventListener('mousedown', (e) => {\n if(!findUpAsChild(e.target as HTMLElement, input)) {\n placeCaretAtEnd(input);\n }\n });\n\n input.addEventListener('input', () => {\n setInputValue(getTipsAmount());\n });\n\n const s = [\n USE_NATIVE_SYMBOL ? currencyData.native || currencyData.symbol : currencyData.symbol,\n currencyData.space_between ? ' ' : ''\n ];\n if(!currencyData.symbol_left) s.reverse();\n tipsLabel.right[currencyData.symbol_left ? 'prepend' : 'append'](s.join(''));\n\n pricesElements.push(tipsLabel.label);\n\n //\n let unsetActiveTip: () => void;\n if(!isReceipt) {\n const tipsEl = document.createElement('div');\n tipsEl.classList.add(tipsClassName);\n\n const tipClassName = tipsClassName + '-tip';\n const tipButtons = invoice.suggested_tip_amounts.map((tipAmount) => {\n const button = Button(tipClassName, {noRipple: true});\n button.textContent = wrapAmount(tipAmount);\n\n this.tipButtonsMap.set(+tipAmount, button);\n return button;\n });\n\n unsetActiveTip = () => {\n const prevTipEl = tipsEl.querySelector('.active');\n if(prevTipEl) {\n prevTipEl.classList.remove('active');\n }\n };\n\n attachClickEvent(tipsEl, (e) => {\n const tipEl = findUpClassName(e.target, tipClassName);\n if(!tipEl) {\n return;\n }\n\n let tipAmount = 0;\n if(tipEl.classList.contains('active')) {\n tipEl.classList.remove('active');\n } else {\n unsetActiveTip();\n tipEl.classList.add('active');\n\n for(const [amount, el] of this.tipButtonsMap) {\n if(el === tipEl) {\n tipAmount = amount;\n break;\n }\n }\n }\n\n setInputValue(tipAmount);\n });\n\n setInputValue(0);\n\n tipsEl.append(...tipButtons);\n pricesElements.push(tipsEl);\n } else {\n setInputValue((paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).tip_amount);\n }\n } else {\n setTotal();\n }\n\n pricesElements.push(totalLabel.label);\n\n prices.append(...pricesElements);\n itemEl.append(prices);\n\n // /\n\n const setRowIcon = async(row: Row, icon?: string) => {\n const img = document.createElement('img');\n img.classList.add('media-photo');\n await renderImageFromUrlPromise(img, getPaymentBrandIconPath(icon));\n let container = row.media;\n if(!container) {\n container = row.createMedia('small');\n container.classList.add('media-container-cover');\n container.append(img);\n } else {\n replaceContent(container, img);\n }\n\n row.container.classList.remove('row-with-icon');\n };\n\n const createRow = (options: ConstructorParameters[0]) => {\n if(options.titleLangKey) {\n options.subtitleLangKey = options.titleLangKey;\n }\n\n options.noWrap = true;\n const row = new Row(options);\n row.container.classList.add(className + '-row');\n\n if(options.titleLangKey) {\n row.subtitle.classList.add('hide');\n }\n\n return row;\n };\n\n const setRowTitle = (row: Row, textContent: string) => {\n row.title.textContent = textContent;\n if(!textContent) {\n const e = I18n.weakMap.get(row.subtitle.firstElementChild as HTMLElement) as I18n.IntlElement;\n row.title.append(i18n(e.key));\n }\n\n row.subtitle.classList.toggle('hide', !textContent);\n };\n\n const setCardSubtitle = (card: PaymentCardDetailsResult) => {\n let brand: string;\n let str: string;\n let icon: string;\n if('title' in card) {\n brand = card.title.split(' ').shift();\n str = card.title;\n icon = card.icon;\n } else {\n brand = detectUnifiedCardBrand(card.cardNumber);\n str = brand + ' *' + card.cardNumber.split(' ').pop();\n }\n\n const outlineIcon = methodRow.container.querySelector(`.${_tgico('card_outline')}`);\n outlineIcon?.remove();\n setRowIcon(methodRow, icon || brand.toLowerCase());\n setRowTitle(methodRow, str);\n };\n\n const onMethodClick = async() => {\n PopupElement.createPopup(\n PopupPaymentCard,\n paymentForm as PaymentsPaymentForm.paymentsPaymentForm,\n await this.managers.appUsersManager.getSelf(),\n previousCardDetails as PaymentCardDetails\n ).addEventListener('finish', ({token, card}) => {\n previousToken = token, previousCardDetails = card;\n\n setCardSubtitle(card);\n });\n };\n\n let previousCardDetails: PaymentCardDetailsResult, previousToken: PaymentsCredentialsToken;\n const methodRow = createRow({\n titleLangKey: 'PaymentCheckoutMethod',\n clickable: isReceipt ? undefined : onMethodClick,\n icon: 'card_outline'\n });\n\n methodRow.container.classList.add(className + '-method-row');\n\n if(savedCredentials) {\n setCardSubtitle(savedCredentials);\n } else if((paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).credentials_title) {\n setCardSubtitle({title: (paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).credentials_title});\n }\n\n const providerRow = createRow({\n title: providerPeerTitle,\n subtitleLangKey: 'PaymentCheckoutProvider'\n });\n\n const providerAvatar = avatarNew({\n middleware: this.middlewareHelper.get(),\n size: 32,\n peerId: isStars ? NULL_PEER_ID : (paymentForm as PaymentsPaymentForm.paymentsPaymentForm).provider_id.toPeerId()\n });\n providerRow.createMedia('small').append(providerAvatar.node);\n\n let shippingAddressRow: Row, shippingNameRow: Row, shippingEmailRow: Row, shippingPhoneRow: Row, shippingMethodRow: Row;\n let lastShippingOption: ShippingOption, onShippingAddressClick: (focus?: ConstructorParameters[2]) => void, onShippingMethodClick: () => void;\n const setShippingTitle = invoice.pFlags.shipping_address_requested ? (shippingAddress?: PaymentShippingAddress) => {\n if(!shippingAddress) {\n shippingMethodRow.subtitle.classList.add('hide');\n replaceContent(shippingMethodRow.title, i18n('PaymentShippingAddress'));\n return;\n }\n\n const postAddress = shippingAddress.shipping_address;\n setRowTitle(shippingAddressRow, [\n postAddress.city,\n postAddress.street_line1,\n postAddress.street_line2\n ].filter(Boolean).join(', '));\n\n shippingMethodRow.container.classList.toggle('hide', !lastRequestedInfo?.shipping_options && !isReceipt);\n } : undefined;\n\n const setShippingInfo = (info: PaymentRequestedInfo) => {\n setShippingTitle && setShippingTitle?.(info);\n shippingNameRow && setRowTitle(shippingNameRow, info.name);\n shippingEmailRow && setRowTitle(shippingEmailRow, info.email);\n shippingPhoneRow && setRowTitle(shippingPhoneRow, info.phone && ('+' + formatPhoneNumber(info.phone).formatted));\n };\n\n if(!isReceipt) {\n onShippingAddressClick = (focus) => {\n PopupElement.createPopup(\n PopupPaymentShipping,\n paymentForm as PaymentsPaymentForm.paymentsPaymentForm,\n inputInvoice,\n focus\n ).addEventListener('finish', ({shippingAddress, requestedInfo}) => {\n lastRequestedInfo = requestedInfo;\n savedInfo = (paymentForm as PaymentsPaymentForm.paymentsPaymentForm).saved_info = shippingAddress;\n setShippingInfo(shippingAddress);\n });\n };\n }\n\n if(invoice.pFlags.shipping_address_requested) {\n const setShippingOption = (shippingOption?: ShippingOption) => {\n const scrollSaver = new ScrollSaver(this.scrollable, undefined, true);\n scrollSaver.save();\n if(lastShippingPricesElements) {\n lastShippingPricesElements.forEach((node) => node.remove());\n }\n\n if(!shippingOption) {\n shippingAmount = 0;\n\n setTotal();\n scrollSaver.restore();\n this.onContentUpdate();\n return;\n }\n\n lastShippingOption = shippingOption;\n setRowTitle(shippingMethodRow, shippingOption.title);\n\n shippingAmount = accumulate(shippingOption.prices.map(({amount}) => +amount), 0);\n lastShippingPricesElements = makePricesElements(shippingOption.prices);\n let l = totalLabel.label;\n if(canTip) {\n l = l.previousElementSibling as any;\n if(!isReceipt) {\n l = l.previousElementSibling as any;\n }\n }\n\n lastShippingPricesElements.forEach((element) => l.parentElement.insertBefore(element, l));\n\n setTotal();\n scrollSaver.restore();\n this.onContentUpdate();\n };\n\n shippingAddressRow = createRow({\n icon: 'location',\n titleLangKey: 'PaymentShippingAddress',\n clickable: !isReceipt && onShippingAddressClick.bind(null, undefined)\n });\n\n let lastShippingPricesElements: HTMLElement[];\n shippingMethodRow = createRow({\n icon: 'shipping',\n titleLangKey: 'PaymentCheckoutShippingMethod',\n clickable: !isReceipt && (onShippingMethodClick = () => {\n PopupElement.createPopup(\n PopupPaymentShippingMethods,\n paymentForm as PaymentsPaymentForm,\n lastRequestedInfo,\n lastShippingOption\n ).addEventListener('finish', (shippingOption) => {\n setShippingOption(shippingOption);\n });\n })\n });\n\n shippingMethodRow.container.classList.add('hide');\n\n const shippingOption = (paymentForm as PaymentsPaymentReceipt.paymentsPaymentReceipt).shipping;\n if(shippingOption) {\n setShippingOption(shippingOption);\n }\n }\n\n if(invoice.pFlags.name_requested) {\n shippingNameRow = createRow({\n icon: 'newprivate',\n titleLangKey: 'PaymentCheckoutName',\n clickable: !isReceipt && onShippingAddressClick.bind(null, 'name')\n });\n }\n\n if(invoice.pFlags.email_requested) {\n shippingEmailRow = createRow({\n icon: 'mention',\n titleLangKey: 'PaymentShippingEmailPlaceholder',\n clickable: !isReceipt && onShippingAddressClick.bind(null, 'email')\n });\n }\n\n if(invoice.pFlags.phone_requested) {\n shippingPhoneRow = createRow({\n icon: 'phone',\n titleLangKey: 'PaymentCheckoutPhoneNumber',\n clickable: !isReceipt && onShippingAddressClick.bind(null, 'phone')\n });\n }\n\n if(savedInfo) {\n setShippingInfo(savedInfo);\n }\n\n const rows = [\n methodRow,\n providerRow,\n shippingAddressRow,\n shippingMethodRow,\n shippingNameRow,\n shippingEmailRow,\n shippingPhoneRow\n ].filter(Boolean);\n\n const acceptTermsCheckboxField = (isRecurring || hasTerms) && new CheckboxField({\n text: isRecurring ? 'Payments.Recurrent.Accept' : 'Payments.Terms.Accept',\n textArgs: [wrapRichText(invoice.terms_url), peerTitle2]\n });\n\n const acceptTermsRow = acceptTermsCheckboxField && createRow({\n checkboxField: acceptTermsCheckboxField\n });\n\n const recurringElements = acceptTermsCheckboxField ? [document.createElement('hr'), acceptTermsRow.container] : [];\n\n this.scrollable.append(...[\n document.createElement('hr'),\n ...rows.map((row) => row.container),\n ...recurringElements\n ].filter(Boolean));\n\n // /\n let popupPaymentVerification: PopupPaymentVerification, lastTmpPasword: AccountTmpPassword;\n const onClick = () => {\n const missingInfo = invoice.pFlags.name_requested && !savedInfo?.name ? 'name' : (invoice.pFlags.email_requested && !savedInfo?.email ? 'email' : (invoice.pFlags.phone_requested && !savedInfo?.phone ? 'phone' : undefined));\n if(invoice.pFlags.shipping_address_requested) {\n if(!lastRequestedInfo) {\n onShippingAddressClick();\n return;\n } else if(!lastShippingOption && lastRequestedInfo.shipping_options) {\n onShippingMethodClick();\n return;\n }\n } else if(missingInfo) {\n onShippingAddressClick(missingInfo);\n return;\n }\n\n if(!previousCardDetails && !lastTmpPasword) {\n if(!savedCredentials) {\n onMethodClick();\n return;\n }\n\n Promise.resolve(passwordState ?? this.managers.passwordManager.getState()).then((_passwordState) => {\n PopupElement.createPopup(\n PopupPaymentCardConfirmation,\n savedCredentials.title,\n _passwordState\n ).addEventListener('finish', (tmpPassword) => {\n passwordState = undefined;\n lastTmpPasword = tmpPassword;\n simulateClickEvent(payButton);\n\n // * reserve 5 seconds\n const diff = tmpPassword.valid_until - tsNow(true) - 5;\n setTimeout(() => {\n if(lastTmpPasword === tmpPassword) {\n lastTmpPasword = undefined;\n }\n }, diff * 1000);\n });\n });\n\n return;\n }\n\n return Promise.resolve().then(async() => {\n const credentials: InputPaymentCredentials = lastTmpPasword ? {\n _: 'inputPaymentCredentialsSaved',\n id: savedCredentials.id,\n tmp_password: lastTmpPasword.tmp_password\n } : {\n _: 'inputPaymentCredentials',\n data: {\n _: 'dataJSON',\n data: JSON.stringify(previousToken.token ? previousToken : {type: previousToken.type, id: previousToken.id})\n },\n pFlags: {\n save: previousCardDetails.save || undefined\n }\n };\n\n try {\n this.result = 'pending';\n const paymentResult = await this.managers.appPaymentsManager.sendPaymentForm(\n inputInvoice,\n (paymentForm as PaymentsPaymentForm).form_id,\n lastRequestedInfo?.id,\n lastShippingOption?.id,\n credentials,\n getTipsAmount()\n );\n\n if(paymentResult._ === 'payments.paymentResult') {\n onConfirmed();\n } else {\n popupPaymentVerification = PopupElement.createPopup(\n PopupPaymentVerification,\n paymentResult.url,\n !mediaInvoice?.extended_media\n );\n popupPaymentVerification.addEventListener('finish', () => {\n popupPaymentVerification = undefined;\n\n onConfirmed();\n });\n await new Promise((resolve, reject) => {\n popupPaymentVerification.addEventListener('close', () => {\n popupPaymentVerification = undefined;\n if(confirmed) {\n resolve();\n } else {\n const err = new Error('payment not finished');\n (err as ApiError).handled = true;\n reject(err);\n this.result = 'failed';\n }\n });\n });\n }\n } catch(err) {\n if((err as ApiError).type === 'BOT_PRECHECKOUT_TIMEOUT') {\n toastNew({langPackKey: 'Error.AnError'});\n (err as ApiError).handled = true;\n } else if((err as ApiError).type === 'TMP_PASSWORD_INVALID') {\n passwordState = lastTmpPasword = undefined;\n simulateClickEvent(payButton);\n (err as ApiError).handled = true;\n } else {\n this.result = 'failed';\n }\n\n throw err;\n }\n });\n };\n\n const onChange = () => {\n payButton.disabled = !!(acceptTermsCheckboxField && !acceptTermsCheckboxField.checked);\n };\n\n let payButton: HTMLButtonElement;\n if(isReceipt) {\n payButton = PaymentButton({\n onClick: () => this.hide(),\n key: 'Done'\n });\n } else {\n payButton = PaymentButton({\n onClick: onClick,\n textEl: payI18n\n });\n }\n\n onChange();\n if(acceptTermsCheckboxField) {\n acceptTermsCheckboxField.input.addEventListener('change', onChange);\n }\n\n this.body.append(this.btnConfirmOnEnter = payButton);\n\n this.onContentUpdate();\n }\n\n public static async create(options: ConstructorParameters[0]) {\n let promise: Promise;\n if(!options.paymentForm && !options.transaction && !options.noPaymentForm) {\n if(options.isReceipt) promise = rootScope.managers.appPaymentsManager.getPaymentReceipt(options.message.peerId, (options.message.media as MessageMedia.messageMediaInvoice).receipt_msg_id || (options.inputInvoice as InputInvoice.inputInvoiceMessage).msg_id);\n else promise = rootScope.managers.appPaymentsManager.getPaymentForm(options.inputInvoice);\n } else {\n promise = Promise.resolve(options.paymentForm);\n }\n\n const paymentForm = await promise;\n const constructor = options.noPaymentForm ||\n options.transaction ||\n options.giftAction ||\n paymentForm._ === 'payments.paymentFormStars' ||\n paymentForm._ === 'payments.paymentReceiptStars' ? PopupStarsPay : PopupPayment;\n\n const popup = PopupElement.createPopup(constructor as any, options) as PopupStarsPay | PopupPayment;\n popup.setPaymentForm(paymentForm as any);\n\n return popup;\n }\n}\n","import {JSX} from 'solid-js';\nimport {Dynamic} from 'solid-js/web';\nimport {FormatterArguments, i18n, LangPackKey} from '../lib/langPack';\nimport {IconTsx} from './iconTsx';\n\nexport default function Button(props: Partial<{\n asLink: boolean,\n asDiv: boolean,\n class: string,\n disabled: boolean,\n children: JSX.Element,\n icon: Icon,\n onClick: (e: MouseEvent) => void,\n text: LangPackKey,\n textArgs: FormatterArguments\n}> = {}): JSX.Element {\n return (\n \n {props.icon && }\n {props.text ? i18n(props.text, props.textArgs) : props.children}\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n/* @refresh reload */\n\nimport PopupElement from '.';\nimport maybe2x from '../../helpers/maybe2x';\nimport {InputInvoice, MessageMedia, PaymentsPaymentForm, Photo, Document, StarsTopupOption, StarsTransaction, StarsTransactionPeer, MessageExtendedMedia, ChatInvite, StarsSubscription, StarsGiftOption, InputStorePaymentPurpose, WebDocument} from '../../layer';\nimport I18n, {i18n, LangPackKey} from '../../lib/langPack';\nimport Section from '../section';\nimport {createMemo, createRoot, createSignal, For, JSX, untrack} from 'solid-js';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport classNames from '../../helpers/string/classNames';\nimport PopupPayment from './payment';\nimport useStars, {prefetchStars} from '../../stores/stars';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport wrapPeerTitle from '../wrappers/peerTitle';\nimport {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';\nimport {Tabs} from '../sidebarRight/tabs/boosts';\nimport {createLoadableList} from '../sidebarRight/tabs/statistics';\nimport RowTsx from '../rowTsx';\nimport {formatFullSentTime} from '../../helpers/date';\nimport {avatarNew} from '../avatarNew';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport Icon from '../icon';\nimport {Middleware} from '../../helpers/middleware';\nimport generatePhotoForExtendedMediaPreview from '../../lib/appManagers/utils/photos/generatePhotoForExtendedMediaPreview';\nimport wrapMediaSpoiler from '../wrappers/mediaSpoiler';\nimport wrapPhoto from '../wrappers/photo';\nimport currencyStarIcon from '../currencyStarIcon';\nimport {wrapChatInviteAvatar, wrapChatInviteTitle} from './joinChatInvite';\nimport tsNow from '../../helpers/tsNow';\nimport Button from '../buttonTsx';\nimport PopupPickUser from './pickUser';\nimport anchorCallback from '../../helpers/dom/anchorCallback';\nimport rootScope from '../../lib/rootScope';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {MTAppConfig} from '../../lib/mtproto/appConfig';\nimport {toastNew} from '../toast';\nimport toggleDisability from '../../helpers/dom/toggleDisability';\nimport {createMoreButton} from '../sidebarRight/tabs/statistics';\n\nexport function StarsStrokeStar(props: {stroke?: boolean, style?: JSX.HTMLAttributes['style']}) {\n return (\n \n {props.stroke && }\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n );\n}\n\nexport function StarsStackedStars(props: {stars: number, size: number}) {\n let icons = 1;\n if(props.stars >= 2500) icons = 6;\n else if(props.stars >= 1000) icons = 5;\n else if(props.stars >= 500) icons = 4;\n else if(props.stars >= 250) icons = 3;\n else if(props.stars >= 50) icons = 2;\n let iconsElements: JSX.Element;\n const m = props.size + (props.size === 18 ? 4 : 6);\n if(icons > 1) {\n iconsElements = [];\n for(let i = 0; i < icons; ++i) iconsElements.push((\n \n ));\n } else {\n iconsElements = ;\n }\n\n iconsElements = (\n \n {iconsElements}\n \n );\n return iconsElements;\n}\n\nexport function StarsStar() {\n return currencyStarIcon();\n}\n\nexport function StarsBalance() {\n const stars = useStars();\n return (\n
\n
{i18n('StarsBalance')}
\n
{'' + (stars() ?? 0)}
\n
\n );\n}\n\nexport function StarsAmount(props: {stars: Long}) {\n return (\n
\n \n {props.stars}\n
\n );\n}\n\nexport function StarsChange(props: {stars: Long, isRefund?: boolean, noSign?: boolean}) {\n return (\n
0 ? 'green' : 'danger')}>\n {`${+props.stars > 0 && !props.noSign ? '+' : ''}${props.stars}`}\n \n {props.isRefund && {i18n('StarsRefunded')}}\n
\n );\n}\n\nexport function getStarsTransactionTitle(transaction: StarsTransaction) {\n if(transaction.subscription_period) {\n return i18n('Stars.Subscription.Title');\n }\n\n if(transaction.pFlags.gift) {\n return i18n('StarsGiftReceived');\n }\n\n const map: {[key in StarsTransactionPeer['_']]?: LangPackKey} = {\n starsTransactionPeerFragment: 'Stars.Via.Fragment',\n starsTransactionPeerPremiumBot: 'Stars.Via.Bot',\n starsTransactionPeerAppStore: 'Stars.Via.App',\n starsTransactionPeerPlayMarket: 'Stars.Via.App'\n };\n\n const key = map[transaction.peer._] ?? 'Stars.Via.Unsupported';\n return i18n(key);\n}\n\nexport function getExamplesAnchor(hide: (callback: () => void) => void) {\n let loading = false;\n const popularAppBotsPromise = rootScope.managers.appAttachMenuBotsManager.getPopularAppBots();\n const anchor = anchorCallback(async() => {\n if(loading) return;\n loading = true;\n const {userIds: botIds} = await popularAppBotsPromise;\n loading = false;\n PopupElement.createPopup(PopupPickUser, {\n onSelect: (peerId) => {\n hide(() => {\n appImManager.setInnerPeer({peerId});\n });\n },\n peerType: ['custom'],\n getMoreCustom: async() => {\n return {\n result: botIds.map((botId) => botId.toPeerId(false)),\n isEnd: true\n };\n },\n headerLangPackKey: 'SearchAppsExamples'\n });\n });\n anchor.append(i18n('GiftStarsSubtitleLinkName'));\n return anchor;\n}\n\nexport async function getStarsTransactionTitleAndMedia({\n transaction,\n middleware,\n size,\n paidMedia,\n paidMediaPeerId,\n chatInvite,\n subscription,\n photo\n}: {\n transaction: StarsTransaction,\n middleware: Middleware,\n size: number,\n paidMedia?: MessageMedia.messageMediaPaidMedia,\n paidMediaPeerId?: PeerId,\n chatInvite?: ChatInvite.chatInvite,\n subscription?: StarsSubscription,\n photo?: WebDocument.webDocument\n}) {\n const [title, media] = await Promise.all([\n (() => {\n if(subscription) {\n return wrapPeerTitle({peerId: getPeerId(subscription.peer)});\n }\n\n if(chatInvite) {\n return wrapChatInviteTitle(chatInvite, middleware);\n }\n\n if(paidMedia || transaction?.extended_media) {\n return wrapPeerTitle({peerId: paidMediaPeerId || getPeerId((transaction.peer as StarsTransactionPeer.starsTransactionPeer).peer)});\n }\n\n if(!transaction || transaction.peer._ === 'starsTransactionPeer') {\n return wrapPeerTitle({\n peerId: transaction ? getPeerId((transaction.peer as StarsTransactionPeer.starsTransactionPeer).peer) : paidMediaPeerId\n });\n }\n\n return getStarsTransactionTitle(transaction);\n })(),\n (async() => {\n const _wrapPhoto = async(container: HTMLElement, photo: Parameters[0]['photo']) => {\n const loadPromises: Promise[] = [];\n wrapPhoto({\n container,\n photo,\n boxWidth: size,\n boxHeight: size,\n middleware,\n loadPromises,\n withoutPreloader: true,\n size: photo._ === 'webDocument' ? {_: 'photoSizeEmpty', type: ''} : undefined\n });\n\n await Promise.all(loadPromises);\n };\n\n if(photo) {\n const container = document.createElement('div');\n container.classList.add('popup-stars-pay-item');\n await _wrapPhoto(container, photo);\n return container;\n }\n\n if(chatInvite) {\n const avatar = await wrapChatInviteAvatar(chatInvite, middleware, 90);\n return avatar.node;\n }\n\n if(paidMedia || transaction?.extended_media) {\n const array = paidMedia?.extended_media || transaction.extended_media;\n let media: Photo.photo | Document.document;\n\n if(paidMedia) {\n const extendedMedia = paidMedia.extended_media[0] as MessageExtendedMedia.messageExtendedMediaPreview;\n media = generatePhotoForExtendedMediaPreview(extendedMedia);\n } else {\n const extendedMedia = transaction.extended_media[0];\n media = (extendedMedia as MessageMedia.messageMediaPhoto).photo as Photo.photo ||\n (extendedMedia as MessageMedia.messageMediaDocument).document as Document.document;\n }\n\n const container = document.createElement('div');\n container.classList.add('popup-stars-transaction-media', 'is-paid-media');\n\n if(paidMedia) {\n const spoilerContainer = await wrapMediaSpoiler({\n media,\n animationGroup: 'chat',\n middleware,\n width: size,\n height: size\n });\n container.append(spoilerContainer);\n } else {\n await _wrapPhoto(container, media);\n }\n\n const length = array.length;\n if(length > 1) {\n const counter = document.createElement('span');\n counter.classList.add('popup-stars-transaction-media-counter');\n counter.textContent = '' + length;\n container.append(counter);\n }\n\n return container;\n }\n\n if(transaction?.photo) {\n const container = document.createElement('div');\n container.classList.add('popup-stars-transaction-media', 'is-paid-media');\n await _wrapPhoto(container, transaction?.photo);\n return container;\n }\n\n let peerId: PeerId;\n if(subscription) {\n peerId = getPeerId(subscription.peer);\n } else if(transaction && transaction.peer._ === 'starsTransactionPeer') {\n peerId = getPeerId(transaction.peer.peer);\n } else if(paidMediaPeerId) {\n peerId = paidMediaPeerId;\n }\n\n if(peerId) {\n const avatar = avatarNew({peerId, size, middleware});\n await avatar.readyThumbPromise;\n return avatar.node;\n }\n\n const div = document.createElement('div');\n div.classList.add('popup-stars-transaction-media');\n div.append(Icon('star'));\n return div;\n })()\n ]);\n\n return {title, media};\n}\n\nexport default class PopupStars extends PopupElement {\n private options: (StarsTopupOption | StarsGiftOption)[];\n private paymentForm: PaymentsPaymentForm.paymentsPaymentFormStars;\n private itemPrice: number;\n private onTopup: (amount: number) => void;\n private purpose: 'reaction' | (string & {});\n private giftPeerId: PeerId;\n private peerId: PeerId;\n private appConfig: MTAppConfig;\n\n constructor(options: {\n paymentForm?: PaymentsPaymentForm.paymentsPaymentFormStars,\n itemPrice?: number,\n onTopup?: (amount: number) => void,\n purpose?: PopupStars['purpose'],\n giftPeerId?: PeerId,\n peerId?: PeerId\n } = {}) {\n super('popup-stars', {\n closable: true,\n overlayClosable: true,\n floatingHeader: true,\n body: true,\n title: 'TelegramStars',\n scrollable: true\n });\n\n safeAssign(this, options);\n\n this.construct();\n }\n\n private renderTransaction = async(transaction: StarsTransaction) => {\n const middleware = this.middlewareHelper.get();\n const {title, media} = await getStarsTransactionTitleAndMedia({\n transaction,\n middleware,\n size: 42\n });\n\n return createRoot((dispose) => {\n middleware.onDestroy(dispose);\n\n const _title = transaction.extended_media ? i18n('StarMediaPurchase') : title;\n let midtitle: HTMLElement | DocumentFragment;\n if(transaction.extended_media) {\n midtitle = title;\n } else if(transaction.description) {\n midtitle = wrapEmojiText(transaction.description);\n } else if(transaction.pFlags.reaction) {\n midtitle = i18n('StarsReactionTitle');\n } else if(transaction.giveaway_post_id) {\n midtitle = i18n('StarsGiveawayPrizeReceived');\n } else if(+transaction.stars > 0) {\n midtitle = transaction.pFlags.gift ? i18n('StarsGiftReceived') : i18n('Stars.TopUp');\n } else if(transaction.subscription_period) {\n midtitle = i18n('Stars.Subscription.Title');\n }\n\n const subtitle = formatFullSentTime(transaction.date);\n\n let subtitleStatus: HTMLElement;\n if(transaction.pFlags.refund) subtitleStatus = i18n('StarsRefunded');\n else if(transaction.pFlags.failed) subtitleStatus = i18n('StarsFailed');\n else if(transaction.pFlags.pending) subtitleStatus = i18n('StarsPending');\n\n let container: HTMLDivElement;\n (\n {_title}}\n midtitle={midtitle}\n subtitle={subtitleStatus ? [subtitle, ' — ', subtitleStatus] : subtitle}\n media={media}\n mediaSize=\"abitbigger\"\n clickable={() => {\n PopupPayment.create({\n transaction\n });\n }}\n rightContent={}\n />\n );\n\n return container;\n });\n };\n\n private renderSubscription = async(subscription: StarsSubscription) => {\n const middleware = this.middlewareHelper.get();\n\n const peerId = getPeerId(subscription.peer);\n const title = await wrapPeerTitle({peerId});\n title.classList.add('text-bold');\n const avatar = untrack(() => avatarNew({peerId, size: 42, middleware}));\n await avatar.readyThumbPromise;\n\n const isCancelled = !!subscription.pFlags.canceled;\n const isExpired = tsNow(true) > subscription.until_date;\n\n return createRoot((dispose) => {\n middleware.onDestroy(dispose);\n\n let container: HTMLDivElement;\n (\n )}\n subtitle={i18n(\n isExpired ? 'Stars.Subscriptions.Expired' : isCancelled ?\n 'Stars.Subscriptions.Expires' :\n 'Stars.Subscriptions.Renews',\n [formatFullSentTime(subscription.until_date, undefined, true)]\n )}\n subtitleRight={!isCancelled && i18n('Stars.Subscriptions.PerMonth')}\n rightContent={isCancelled && ({i18n('Stars.Subscriptions.Cancelled')})}\n media={avatar.node}\n mediaSize=\"abitbigger\"\n clickable={async() => {\n const popup = await PopupPayment.create({\n subscription,\n noPaymentForm: true\n });\n\n popup.addEventListener('finish', (result) => {\n if(result === 'paid') {\n this.hide();\n }\n });\n }}\n />\n );\n\n return container;\n });\n };\n\n private _construct(\n image: HTMLElement,\n peerTitle?: HTMLElement,\n avatar?: HTMLElement\n ) {\n this.header.append(StarsBalance() as HTMLElement);\n\n const stars = useStars();\n const starsNeeded = createMemo(() => this.itemPrice ? this.itemPrice - +stars() : 0);\n const topupOptions = createMemo(() => {\n if(this.itemPrice) {\n const filtered = this.options.filter((option) => +option.stars >= starsNeeded());\n if(!filtered.length) {\n return [this.options[this.options.length - 1]];\n }\n\n return filtered;\n }\n\n return this.options;\n });\n const alwaysVisible = topupOptions().length > 3 ? topupOptions().filter((option) => !option.pFlags.extended) : topupOptions();\n const [extended, setExtended] = createSignal(topupOptions().length <= 3);\n const displayingRows = createMemo(() => Math.ceil((extended() ? topupOptions().length : alwaysVisible.length) / 2));\n\n let busy = false;\n\n let title: JSX.Element;\n if(this.giftPeerId) {\n title = i18n('GiftStarsTitle');\n } else if(this.itemPrice) {\n title = i18n('StarsNeededTitle', [starsNeeded()]);\n } else {\n title = i18n('TelegramStars');\n }\n\n let subtitle: JSX.Element;\n if(this.giftPeerId) {\n subtitle = (\n <>\n {i18n('GiftStarsSubtitle', [peerTitle])}\n {' '}\n {getExamplesAnchor(this.hideWithCallback)}\n \n );\n } else if(this.purpose) {\n let langPackKey: LangPackKey;\n if(this.purpose === 'reaction') {\n langPackKey = 'Stars.TopUp.Reaction';\n } else {\n const key = `Stars.TopUp.Label_`;\n // @ts-ignore\n if(I18n.strings.get(key + this.purpose)) {\n // @ts-ignore\n langPackKey = key + this.purpose;\n } else {\n // @ts-ignore\n langPackKey = key + 'default';\n }\n }\n\n subtitle = i18n(langPackKey, [peerTitle]);\n } else if(this.itemPrice) {\n subtitle = i18n(this.paymentForm ? 'StarsNeededText' : 'Stars.Subscribe.Need', [peerTitle]);\n } else {\n subtitle = i18n('TelegramStarsInfo');\n }\n\n const firstSection = (\n
\n {image}\n {avatar}\n
{title}
\n
{subtitle}
\n
\n {(option, idx) => {\n const index = createMemo(() => extended() || option.pFlags.extended ? idx() : alwaysVisible.indexOf(option));\n const translateX = createMemo(() => (index() % 2) ? 'calc(100% + .5rem)' : '0');\n const translateY = createMemo(() => (Math.floor(index() / 2) * 79 + Math.floor(index() / 2) * 8) + 'px');\n const isFullWidth = createMemo(() => {\n if(!((extended() ? topupOptions() : alwaysVisible).length % 2)) {\n return false;\n }\n\n if(extended() || option.pFlags.extended) {\n return index() === (topupOptions().length - 1);\n }\n\n return index() === (alwaysVisible.length - 1);\n });\n\n const iconsElements = StarsStackedStars({stars: +option.stars, size: 26});\n\n return (\n {\n if(busy) {\n return;\n }\n\n busy = true;\n\n const purpose: InputStorePaymentPurpose = this.giftPeerId ? {\n _: 'inputStorePaymentStarsGift',\n amount: option.amount,\n currency: option.currency,\n stars: option.stars,\n user_id: await this.managers.appUsersManager.getUserInput(this.giftPeerId.toUserId())\n } : {\n _: 'inputStorePaymentStarsTopup',\n amount: option.amount,\n currency: option.currency,\n stars: option.stars\n };\n\n const inputInvoice: InputInvoice = {\n _: 'inputInvoiceStars',\n purpose\n };\n try {\n const paymentForm = await this.managers.appPaymentsManager.getPaymentForm(inputInvoice);\n const popup = await PopupPayment.create({\n inputInvoice,\n paymentForm\n });\n\n popup.addEventListener('finish', (result) => {\n if(result === 'paid') {\n if(this.onTopup) {\n this.hide();\n this.onTopup(+option.amount);\n }\n }\n });\n } catch(err) {\n console.error('stars error', err);\n }\n\n busy = false;\n }}\n >\n
{`+${option.stars}`}{iconsElements}
\n
{paymentsWrapCurrencyAmount(option.amount, option.currency)}
\n
\n );\n }}\n \n setExtended((v) => !v)}\n />\n
\n );\n\n const createLoader = (inbound?: boolean) => {\n const middleware = this.middlewareHelper.get();\n let offset = '', loading = false;\n const loadMore = async() => {\n if(loading) {\n return;\n }\n\n loading = true;\n const starsStatus = await this.managers.appPaymentsManager.getStarsTransactions(offset, inbound);\n if(!middleware()) return;\n\n const promises = (starsStatus.history || []).map(this.renderTransaction);\n const rendered = await Promise.all(promises);\n if(!middleware()) return;\n\n setF((value) => {\n // value.count = starsStatus.count;\n offset = starsStatus.next_offset;\n if(!offset) {\n value.loadMore = undefined;\n }\n\n value.rendered.push(...rendered);\n return value;\n });\n\n loading = false;\n };\n\n const [f, setF] = createLoadableList({loadMore});\n return f;\n };\n\n const lists = [undefined, true, false].map((inbound) => {\n const list = createLoader(inbound);\n list().loadMore();\n return list;\n });\n\n const [tab, setTab] = createSignal(0);\n\n this.scrollable.onScrolledBottom = () => {\n const list = lists[tab()];\n list().loadMore?.();\n };\n\n const middleware = this.middlewareHelper.get();\n let subscriptionsOffset: string;\n const loadMoreSubscriptions = async() => {\n const starsStatus = await this.managers.appPaymentsManager.getStarsSubscriptions(subscriptionsOffset);\n if(!middleware()) {\n return;\n }\n\n const promises = (starsStatus.subscriptions || []).map(this.renderSubscription);\n const rendered = await Promise.all(promises);\n if(!middleware()) return;\n\n setSubscriptionsLoader((value) => {\n value.count += rendered.length;\n subscriptionsOffset = starsStatus.subscriptions_next_offset;\n if(!subscriptionsOffset) {\n value.loadMore = undefined;\n }\n\n value.rendered.push(...rendered);\n return value;\n });\n };\n\n const [subscriptionsLoader, setSubscriptionsLoader] = createLoadableList({\n loadMore: loadMoreSubscriptions\n });\n\n subscriptionsLoader().loadMore();\n const subscriptionsSection = (\n
\n
{subscriptionsLoader().rendered}
\n {subscriptionsLoader().loadMore && createMoreButton(\n subscriptionsLoader().count - subscriptionsLoader().rendered.length,\n (button) => {\n const toggle = toggleDisability(button, true);\n const promise = subscriptionsLoader().loadMore();\n promise.finally(() => toggle());\n },\n this.listenerSetter\n )}\n
\n );\n\n const transactionsSection = (\n
\n {\n return
{list().rendered}
\n })}\n />\n
\n );\n\n const restSection = (\n <>\n {this.appConfig.stars_gifts_enabled && (\n
\n {\n this.hide();\n const peerId = await PopupPickUser.createContactPicker();\n PopupElement.createPopup(PopupStars, {\n giftPeerId: peerId,\n onTopup: async(stars) => {\n toastNew({\n langPackKey: 'StarsGiftSentPopupInfo',\n langPackArguments: [stars, await wrapPeerTitle({peerId})]\n })\n }\n });\n }}\n />\n
\n )}\n {!!subscriptionsLoader().count && subscriptionsSection}\n {transactionsSection}\n \n );\n\n return (\n <>\n {firstSection}\n {!starsNeeded() && !this.giftPeerId && restSection}\n \n );\n }\n\n private async construct() {\n const [image, peerTitle, options, avatar, appConfig, _] = await Promise.all([\n (async() => {\n const img = document.createElement('img');\n img.classList.add('popup-stars-image');\n await renderImageFromUrlPromise(img, `assets/img/${maybe2x(this.giftPeerId ? 'stars_pay' : 'stars')}.png`);\n return img;\n })(),\n this.peerId || this.paymentForm || this.giftPeerId ? wrapPeerTitle({peerId: this.peerId || this.giftPeerId || this.paymentForm.bot_id.toPeerId(false)}) : undefined,\n this.giftPeerId ? this.managers.appPaymentsManager.getStarsGiftOptions(this.giftPeerId.toUserId()) : this.managers.appPaymentsManager.getStarsTopupOptions(),\n this.giftPeerId && (async() => {\n const avatar = avatarNew({peerId: this.giftPeerId, size: 100, middleware: this.middlewareHelper.get()});\n await avatar.readyThumbPromise;\n avatar.node.classList.add('popup-stars-gift-avatar');\n return avatar.node;\n })(),\n this.managers.apiManager.getAppConfig(),\n this.itemPrice && prefetchStars(this.middlewareHelper.get())\n ]);\n this.options = options;\n this.appConfig = appConfig;\n this.appendSolid(() => this._construct(image, peerTitle, avatar));\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {formatFullSentTime} from '../../../helpers/date';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpAsChild from '../../../helpers/dom/findUpAsChild';\nimport placeCaretAtEnd from '../../../helpers/dom/placeCaretAtEnd';\nimport formatDuration from '../../../helpers/formatDuration';\nimport {Middleware} from '../../../helpers/middleware';\nimport clamp from '../../../helpers/number/clamp';\nimport safeAssign from '../../../helpers/object/safeAssign';\nimport tsNow from '../../../helpers/tsNow';\nimport {ExportedChatInvite} from '../../../layer';\nimport {i18n} from '../../../lib/langPack';\nimport ButtonCorner from '../../buttonCorner';\nimport CheckboxField from '../../checkboxField';\nimport InputField from '../../inputField';\nimport {InputStarsField} from '../../popups/makePaid';\nimport {InputRightNumber} from '../../popups/payment';\nimport PopupSchedule from '../../popups/schedule';\nimport {setButtonLoader} from '../../putPreloader';\nimport RangeSelector from '../../rangeSelector';\nimport RangeStepsSelector from '../../rangeStepsSelector';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport SliderSuperTab, {SliderSuperTabEventable} from '../../sliderTab';\nimport {wrapFormattedDuration} from '../../wrappers/wrapDuration';\n\ntype ChatInvite = ExportedChatInvite.chatInviteExported;\n\nexport function findClosestDifference(array: Array, difference: number) {\n const differences = array.map((value, idx) => {\n return {idx, diff: Math.abs(value - difference)};\n });\n\n return differences.sort((a, b) => a.diff - b.diff)[0];\n}\n\nexport default class AppEditChatInviteLink extends SliderSuperTabEventable<{\n finish: (chatInvite: ChatInvite) => void\n}> {\n private confirmBtn: HTMLButtonElement;\n\n public async init({chatId, invite}: {\n chatId: ChatId,\n invite?: ChatInvite\n }) {\n this.setTitle(invite ? 'InviteLinks.Edit' : 'NewLink');\n\n this.confirmBtn = ButtonCorner({className: 'is-visible', icon: 'check'});\n this.content.append(this.confirmBtn);\n\n attachClickEvent(this.confirmBtn, async() => {\n const removeLoader = setButtonLoader(this.confirmBtn);\n const expireDateValue = timePeriodSelector.value;\n const expireDate = expireDateValue instanceof Date ? expireDateValue.getTime() / 1000 | 0 : (expireDateValue ? tsNow(true) + expireDateValue : 0);\n const title = nameInputField.value;\n const requestNeeded = approveNewMembersCheckboxField.checked;\n const usageLimit = requestNeeded ? 0 : (usersLimitSelector.value ?? 0);\n\n let chatInvite: ChatInvite;\n if(invite) {\n const result = await this.managers.appChatInvitesManager.editExportedChatInvite({\n chatId,\n link: invite.link,\n expireDate,\n requestNeeded,\n title,\n usageLimit\n });\n\n chatInvite = result.invite as ChatInvite;\n } else {\n chatInvite = await this.managers.appChatInvitesManager.exportChatInvite({\n chatId,\n title,\n requestNeeded,\n usageLimit,\n expireDate,\n stars: paidLinkCheckboxField?.checked ? +paidLinkInputField.value : undefined\n }) as ChatInvite;\n }\n\n this.eventListener.dispatchEvent('finish', chatInvite);\n this.close();\n // removeLoader();\n }, {listenerSetter: this.listenerSetter});\n\n let nameInputField: InputField;\n {\n const section = new SettingSection({caption: 'LinkNameHelp'});\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n nameInputField = new InputField({\n label: 'LinkNameHint',\n maxLength: 32\n });\n\n if(invite?.title) {\n nameInputField.setOriginalValue(invite.title);\n }\n\n inputWrapper.append(nameInputField.container);\n section.content.append(inputWrapper);\n\n this.scrollable.append(section.container);\n }\n\n const isBroadcast = await this.managers.appChatsManager.isBroadcast(chatId);\n const appConfig = await this.managers.apiManager.getAppConfig();\n\n let paidLinkCheckboxField: CheckboxField, paidLinkInputField: InputField;\n if(isBroadcast) {\n const section = new SettingSection({caption: invite ? 'InviteLink.Subscription.Edit' : 'InviteLink.Subscription.Caption'});\n\n const row = new Row({\n titleLangKey: 'InviteLink.Subscription.Title',\n checkboxField: paidLinkCheckboxField = new CheckboxField({toggle: true})\n });\n\n this.listenerSetter.add(paidLinkCheckboxField.input)('change', () => {\n const checked = paidLinkCheckboxField.checked;\n approveNewMembersCheckboxField.toggleDisability(checked);\n approveNewMembersSection.caption.replaceChildren(i18n(checked ? 'ApproveNewMembersDescription' : 'InviteLink.AdminApproval.Disabled'));\n wrapper.classList.toggle('hide', !checked);\n });\n\n const wrapper = document.createElement('div');\n wrapper.classList.add('input-wrapper');\n const inputField = paidLinkInputField = InputStarsField({\n label: 'InviteLink.Subscription.Placeholder',\n max: appConfig.stars_subscription_amount_max,\n middleware: this.middlewareHelper.get(),\n onValue: (stars) => {\n rightLabel.replaceChildren(...(stars ? [\n i18n('InviteLink.Subscription.Price', ['$' + (appConfig.stars_usd_sell_rate_x1000 / 1000 * stars / 100).toFixed(2)])\n ] : []));\n }\n });\n\n const rightLabel = document.createElement('span');\n rightLabel.classList.add('input-field-right-label');\n inputField.container.append(rightLabel);\n\n this.listenerSetter.add(inputField.input)('input', () => {});\n\n wrapper.append(inputField.container);\n\n section.content.append(row.container, wrapper);\n\n inputField.value = '' + 500;\n\n this.scrollable.append(section.container);\n }\n\n let approveNewMembersCheckboxField: CheckboxField, approveNewMembersSection: SettingSection;\n if(isBroadcast) {\n const section = approveNewMembersSection = new SettingSection({caption: true});\n\n const row = new Row({\n titleLangKey: 'ApproveNewMembers',\n checkboxField: approveNewMembersCheckboxField = new CheckboxField({toggle: true})\n });\n\n section.content.append(row.container);\n\n this.scrollable.append(section.container);\n }\n\n let timePeriodSelector: RangeStepsSelector;\n {\n const section = new SettingSection({name: 'LimitByPeriod', caption: 'TimeLimitHelp'});\n\n const range: typeof timePeriodSelector = timePeriodSelector = new RangeStepsSelector({\n generateStep: (value) => {\n const formatted = formatDuration(value instanceof Date ? (value.getTime() / 1000 | 0) - tsNow(true) : value, 1);\n return [wrapFormattedDuration(formatted, false), value];\n },\n generateSteps: (values) => {\n return [\n ...values.map(range.generateStep),\n ['∞', undefined]\n ];\n },\n onValue: (value) => {\n if(!value) {\n setExpiry();\n } else {\n let date: Date;\n if(value instanceof Date) {\n date = value;\n } else {\n date = new Date();\n date.setSeconds(date.getSeconds() + value);\n }\n\n setExpiry(date.getTime() / 1000);\n }\n },\n middleware: this.middlewareHelper.get()\n });\n\n const row = new Row({\n titleLangKey: 'EditInvitation.ExpiryDate',\n titleRightSecondary: true,\n clickable: () => {\n let initDate: Date;\n const value = range.value;\n if(value) {\n initDate = new Date(value instanceof Date ? value : tsNow() + value * 1000);\n } else {\n initDate = new Date();\n initDate.setDate(initDate.getDate() + 7);\n }\n\n const popup = new PopupSchedule({\n initDate,\n onPick: setCustomTimestamp,\n btnConfirmLangKey: 'Save'\n });\n popup.show();\n },\n listenerSetter: this.listenerSetter\n });\n\n const setCustomTimestamp = (timestamp: number) => {\n const difference = timestamp - tsNow(true);\n const closest = findClosestDifference(stepValues, difference);\n const newSteps = steps.slice();\n newSteps[closest.idx] = range.generateStep(new Date(timestamp * 1000));\n range.setSteps(newSteps, closest.idx);\n };\n\n const setExpiry = (timestamp?: number) => {\n if(!timestamp) {\n row.titleRight.replaceChildren(i18n('EditInvitation.Never'));\n } else {\n row.titleRight.replaceChildren(formatFullSentTime(timestamp));\n }\n };\n\n const stepValues: number[] = [3600, 86400, 86400 * 7];\n const steps = range.generateSteps(stepValues);\n range.setSteps(steps, steps.length - 1);\n\n if(invite && invite.expire_date && invite.expire_date > tsNow(true)) {\n setCustomTimestamp(invite.expire_date);\n }\n\n section.content.append(range.container, row.container);\n this.scrollable.append(section.container);\n }\n\n let usersLimitSelector: RangeStepsSelector, usersLimitSection: SettingSection;\n {\n const section = usersLimitSection = new SettingSection({name: 'LimitNumberOfUses', caption: 'UsesLimitHelp'});\n\n const range: typeof usersLimitSelector = usersLimitSelector = new RangeStepsSelector({\n generateStep: (value) => ['' + value, value],\n generateSteps: (values) => {\n return [\n ...values.map(range.generateStep),\n ['∞', undefined]\n ];\n },\n onValue: (value) => {\n setNumber(value);\n },\n middleware: this.middlewareHelper.get()\n });\n\n const row = new Row({\n titleLangKey: 'EditInvitation.NumberOfUsers',\n titleRightSecondary: true,\n clickable: true,\n listenerSetter: this.listenerSetter,\n // asLabel: true,\n noRipple: true\n });\n\n const inputRightNumber = new InputRightNumber();\n const {input} = inputRightNumber;\n\n this.listenerSetter.add(row.container)('mousedown', (e) => {\n if(!range.value) {\n setCustomNumber(stepValues[0]);\n }\n\n if(!findUpAsChild(e.target as HTMLElement, input)) {\n placeCaretAtEnd(input);\n }\n });\n\n const onInput = () => {\n let originalValue = inputRightNumber.value;\n const isEmpty = !originalValue.trim();\n originalValue = originalValue.replace(/\\D/g, '');\n\n const value = clamp(isEmpty ? 0 : +originalValue, stepValues[0], 9999);\n if(!isEmpty) inputRightNumber.value = '' + value;\n ignoreNextSet = true;\n setCustomNumber(value);\n };\n\n this.listenerSetter.add(input)('input', onInput);\n\n const setCustomNumber = (value: number) => {\n const closest = findClosestDifference(stepValues, value);\n const newSteps = steps.slice();\n newSteps[closest.idx] = range.generateStep(value);\n range.setSteps(newSteps, closest.idx);\n };\n\n let ignoreNextSet = false;\n const setNumber = (value?: number) => {\n if(ignoreNextSet) {\n ignoreNextSet = false;\n return;\n }\n\n if(!value) {\n row.titleRight.replaceChildren(i18n('EditInvitation.Unlimited'));\n } else {\n inputRightNumber.value = '' + value;\n row.titleRight.replaceChildren(input);\n }\n };\n\n const stepValues = [1, 10, 50, 100];\n const steps = range.generateSteps(stepValues);\n range.setSteps(steps, steps.length - 1);\n\n if(invite?.usage_limit) {\n const value = Math.max(stepValues[0], invite.usage_limit - (invite.usage || 0));\n setNumber(value);\n setCustomNumber(value);\n // inputRightNumber.value = '' + value;\n // onInput();\n }\n\n section.content.append(range.container, row.container);\n this.scrollable.append(section.container);\n }\n\n if(approveNewMembersCheckboxField) {\n this.listenerSetter.add(approveNewMembersCheckboxField.input)('change', () => {\n usersLimitSection.container.classList.toggle('hide', approveNewMembersCheckboxField.checked);\n });\n\n if(invite) {\n approveNewMembersCheckboxField.checked = invite?.pFlags?.request_needed;\n }\n }\n\n if(paidLinkCheckboxField) {\n const value = !!invite?.subscription_pricing;\n paidLinkCheckboxField.setValueSilently(!value);\n paidLinkCheckboxField.checked = value;\n\n if(value) {\n paidLinkInputField.value = '' + invite.subscription_pricing?.amount;\n }\n\n if(invite) {\n paidLinkCheckboxField.toggleDisability(true);\n paidLinkInputField.container.classList.add('disable-hover');\n // paidLinkInputField.input.contentEditable = 'false';\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {hexToRgb, hslaToString, mixColors, rgbaToHsla} from '../../../helpers/color';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport createContextMenu from '../../../helpers/dom/createContextMenu';\nimport customProperties from '../../../helpers/dom/customProperties';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport paymentsWrapCurrencyAmount from '../../../helpers/paymentsWrapCurrencyAmount';\nimport tsNow from '../../../helpers/tsNow';\nimport {ExportedChatInvite, MessagesExportedChatInvite, MessagesExportedChatInvites} from '../../../layer';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport {LangPackKey, i18n, joinElementsWith} from '../../../lib/langPack';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport wrapPlainText from '../../../lib/richTextProcessor/wrapPlainText';\nimport lottieLoader from '../../../lib/rlottie/lottieLoader';\nimport rootScope from '../../../lib/rootScope';\nimport Button from '../../button';\nimport {ButtonMenuItemOptionsVerifiable} from '../../buttonMenu';\nimport confirmationPopup from '../../confirmationPopup';\nimport {StarsAmount, StarsChange} from '../../popups/stars';\nimport SettingSection from '../../settingSection';\nimport {InviteLink} from '../../sidebarLeft/tabs/sharedFolder';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport {UsernameRow} from '../../usernamesSection';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport {wrapLeftDuration} from '../../wrappers/wrapDuration';\nimport AppChatInviteLinkTab from './chatInviteLink';\nimport AppEditChatInviteLink from './editChatInviteLink';\n\ntype ChatInvite = ExportedChatInvite.chatInviteExported;\n\nfunction isActiveInvite(invite: ChatInvite) {\n if(invite.pFlags.revoked) {\n return false;\n }\n\n if(invite.expire_date && invite.expire_date <= tsNow(true)) {\n return false;\n }\n\n if(invite.usage_limit && invite.usage_limit <= (invite.usage || 0)) {\n return false;\n }\n\n return true;\n}\n\nexport class ChatInviteLink extends InviteLink {\n public subtitle: HTMLElement;\n\n constructor(public options: ConstructorParameters[0] & {\n actions: AppChatInviteLinksTab['actions'],\n withSubtitle?: boolean\n }) {\n super({\n ...options\n });\n\n if(options.withSubtitle) {\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add('invite-link-subtitle', 'hide');\n this.container.append(this.subtitle);\n }\n }\n\n public setChatInvite(chatInvite: ChatInvite | string) {\n const isUsername = typeof(chatInvite) === 'string';\n const username = typeof(chatInvite) === 'string' ? chatInvite : undefined;\n this.setUrl(isUsername ? 't.me/' + username : chatInvite.link);\n\n if(this.subtitle) {\n if(!isUsername && chatInvite?.usage) {\n this.subtitle.replaceChildren(i18n('InviteLink.JoinedNew', [chatInvite.usage]));\n }\n\n this.subtitle.classList.toggle('hide', isUsername || !chatInvite?.usage);\n }\n\n let hasSomething: LangPackKey;\n if(!isUsername) {\n if(chatInvite.pFlags.revoked) {\n this.onButtonClick = () => this.options.actions.deleteLink();\n hasSomething = 'DeleteLink';\n } else if(!isActiveInvite(chatInvite)) {\n this.onButtonClick = () => this.options.actions.editLink();\n hasSomething = 'InviteLinks.Reactivate';\n }\n }\n\n if(!hasSomething) {\n hasSomething = 'ShareLink';\n this.onButtonClick = undefined;\n }\n\n this.buttonText.replaceChildren(i18n(hasSomething));\n }\n}\n\nexport default class AppChatInviteLinksTab extends SliderSuperTabEventable {\n private chatId: ChatId;\n private adminId: UserId;\n public menuButtons: ButtonMenuItemOptionsVerifiable[];\n public actions: {\n revokeLink: () => void,\n deleteLink: () => void,\n editLink: () => void\n };\n\n public static getInitArgs(chatId: ChatId, adminId?: UserId) {\n return {\n animationData: !adminId && lottieLoader.loadAnimationFromURLManually('UtyanLinks'),\n invites: rootScope.managers.appChatInvitesManager.getExportedChatInvites({chatId, adminId}),\n invitesRevoked: rootScope.managers.appChatInvitesManager.getExportedChatInvites({chatId, adminId, revoked: true}),\n adminsInvites: !adminId && rootScope.managers.appChatInvitesManager.getAdminsWithInvites(chatId),\n chatFull: rootScope.managers.appProfileManager.getChatFull(chatId)\n };\n }\n\n public async init({\n chatId,\n adminId,\n p = AppChatInviteLinksTab.getInitArgs(chatId, adminId)\n }: {\n chatId: ChatId,\n adminId?: UserId,\n p?: ReturnType\n }) {\n this.chatId = chatId;\n this.adminId = adminId;\n this.actions = {} as any;\n const loadPromises: Promise[] = [];\n const middleware = this.middlewareHelper.get();\n const [chat, chatFull] = await Promise.all([\n this.managers.appChatsManager.getChat(this.chatId),\n p.chatFull\n ]);\n\n const usernames = getPeerActiveUsernames(chat);\n\n this.setTitle('InviteLinks');\n this.container.classList.add('chat-folders-container', 'chat-discussion-container');\n\n let stickerContainer: HTMLElement, caption: HTMLElement;\n if(!this.adminId) {\n stickerContainer = document.createElement('div');\n stickerContainer.classList.add('sticker-container');\n\n caption = document.createElement('div');\n caption.classList.add('caption');\n caption.append(i18n('ChannelLinkInfo'));\n }\n\n const wrapInviteTitle = (invite: ChatInvite) => {\n return invite.title ? wrapEmojiText(invite.title) : wrapPlainText(invite.link.split('://').pop());\n };\n\n let inviteLink: ChatInviteLink,\n menuInvite: ChatInvite,\n menuItem: K,\n primaryInvite: ChatInvite,\n chatInviteLinkTab: AppChatInviteLinkTab;\n const menuButtons: ButtonMenuItemOptionsVerifiable[] = this.menuButtons = [{\n icon: 'copy',\n text: 'CopyLink',\n onClick: () => inviteLink.copyLink(menuInvite?.link),\n verify: () => !menuInvite?.pFlags?.revoked\n }, {\n icon: 'forward',\n text: 'ShareLink',\n onClick: () => {\n const url = menuInvite?.link || inviteLink.url;\n inviteLink.shareLink(url);\n },\n verify: () => !menuInvite ? true : isActiveInvite(menuInvite)\n }, {\n icon: 'edit',\n text: 'InviteLinks.Edit',\n onClick: this.actions.editLink = async() => {\n const _menuItem = menuItem;\n const tab = this.slider.createTab(AppEditChatInviteLink);\n tab.eventListener.addEventListener('finish', (invite) => {\n _menuItem.destroy();\n _menuItem.row.container.replaceWith(createRow(invite).container);\n });\n await tab.open({\n chatId: this.chatId,\n invite: menuInvite\n });\n if(chatInviteLinkTab) {\n this.slider.removeTabFromHistory(chatInviteLinkTab);\n }\n },\n verify: () => menuInvite && !menuInvite.pFlags.revoked\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'RevokeLink',\n onClick: this.actions.revokeLink = async() => {\n const _menuItem = menuItem;\n await confirmationPopup({\n titleLangKey: 'RevokeLink',\n descriptionLangKey: 'RevokeAlert',\n button: {\n langKey: 'RevokeButton',\n isDanger: true\n }\n });\n\n const invite = _menuItem?.invite || primaryInvite;\n\n const chatInvite = await this.managers.appChatInvitesManager.editExportedChatInvite({\n chatId: this.chatId,\n link: invite.link,\n revoked: true\n });\n\n const editedInvite = chatInvite.invite as ChatInvite;\n const newInvite = (chatInvite as MessagesExportedChatInvite.messagesExportedChatInviteReplaced).new_invite as ChatInvite;\n\n if(_menuItem) {\n if(newInvite) {\n _menuItem.row.container.replaceWith(createRow(newInvite).container);\n }\n\n revokedLinks.content.prepend(_menuItem.row.container);\n _menuItem.update(editedInvite);\n } else {\n const row = createRow(editedInvite);\n revokedLinks.content.prepend(row.container);\n primaryInvite = newInvite;\n inviteLink.setChatInvite(primaryInvite);\n }\n\n onRevokedLinksUpdate();\n\n chatInviteLinkTab?.close();\n },\n verify: () => menuInvite ? !menuInvite.pFlags.revoked : !!primaryInvite\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'DeleteLink',\n onClick: this.actions.deleteLink = () => {\n const _menuItem = menuItem;\n this.managers.appChatInvitesManager.deleteExportedChatInvite(\n this.chatId,\n _menuItem.invite.link\n ).then(() => {\n _menuItem.destroy(true);\n onRevokedLinksUpdate();\n\n chatInviteLinkTab?.close();\n });\n },\n verify: () => !!menuInvite?.pFlags?.revoked\n }];\n\n let inviteLinkSection: SettingSection;\n {\n const section = inviteLinkSection = new SettingSection({\n name: 'InviteLink',\n caption: this.adminId ? 'ManageLinks.Admin.Permanent.Desc' : undefined,\n captionArgs: this.adminId ? await Promise.all([\n wrapPeerTitle({peerId: this.adminId.toPeerId(false)}),\n wrapPeerTitle({peerId: this.chatId.toPeerId(true)})\n ]) : undefined\n });\n\n inviteLink = new ChatInviteLink({\n buttons: menuButtons,\n listenerSetter: this.listenerSetter,\n actions: this.actions,\n withSubtitle: true\n });\n\n attachClickEvent(inviteLink.subtitle, () => {\n // menuInvite = primaryInvite;\n openLink(primaryInvite);\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(inviteLink.container);\n }\n\n let additionalLinks: SettingSection;\n {\n const section = additionalLinks = new SettingSection({\n name: this.adminId ? 'LinksCreatedByThisAdmin' : 'InviteLinks.Additional',\n caption: this.adminId ? undefined : 'InviteLinks.Description'\n });\n\n if(!this.adminId) {\n const btn = Button('btn-primary btn-transparent primary', {icon: 'plus', text: 'CreateNewLink'});\n\n attachClickEvent(btn, () => {\n const tab = this.slider.createTab(AppEditChatInviteLink);\n tab.eventListener.addEventListener('finish', (chatInvite) => {\n const row = createRow(chatInvite);\n if(primaryInvite) {\n section.content.prepend(row.container);\n } else {\n section.content.firstElementChild.after(row.container);\n }\n });\n tab.open({chatId: this.chatId});\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btn);\n section.content = section.generateContentElement();\n }\n }\n\n let adminsLinks: SettingSection;\n if(!this.adminId) {\n const section = adminsLinks = new SettingSection({name: 'LinksCreatedByOtherAdmins'});\n\n const promise = p.adminsInvites.then((adminsInvites) => {\n let {admins} = adminsInvites;\n admins = admins.filter((admin) => admin.admin_id.toPeerId(false) !== rootScope.myId);\n if(!admins.length) {\n section.container.classList.add('hide');\n return;\n }\n\n const chatlist = appDialogsManager.createChatList();\n const loadPromises: Promise[] = [];\n admins.forEach((admin) => {\n const peerId = admin.admin_id.toPeerId(false);\n const {dom} = appDialogsManager.addDialogNew({\n peerId,\n container: chatlist,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n append: true,\n loadPromises,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n dom.lastMessageSpan.append(i18n('InviteLinkCount', [admin.invites_count]));\n });\n\n attachClickEvent(chatlist, (e) => {\n const target = findUpClassName(e.target, 'chatlist-chat');\n if(!target) {\n return;\n }\n\n const peerId = target.dataset.peerId.toPeerId();\n const tab = this.slider.createTab(AppChatInviteLinksTab);\n tab.open({\n chatId: this.chatId,\n adminId: peerId.toUserId()\n });\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(chatlist);\n\n return Promise.all(loadPromises);\n }, () => {\n section.container.remove();\n });\n\n loadPromises.push(promise);\n }\n\n let revokedLinks: SettingSection;\n {\n const section = revokedLinks = new SettingSection({name: 'RevokedLinks'});\n\n const btn = Button('btn-primary btn-transparent danger', {icon: 'delete', text: 'DeleteAllRevokedLinks'});\n\n attachClickEvent(btn, async() => {\n await confirmationPopup({\n titleLangKey: 'DeleteAllRevokedLinks',\n descriptionLangKey: 'ManageLinks.DeleteAll.Confirm',\n button: {\n langKey: 'Delete',\n isDanger: true\n }\n });\n\n const toggle = toggleDisability(btn, true);\n await this.managers.appChatInvitesManager.deleteRevokedExportedChatInvites(this.chatId, this.adminId);\n toggle();\n\n Array.from(section.content.children).forEach((el) => {\n const cache = invitesMap.get(el as HTMLElement);\n cache.destroy(true);\n });\n onRevokedLinksUpdate();\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btn);\n section.content = section.generateContentElement();\n }\n\n this.scrollable.append(...[\n stickerContainer,\n caption,\n inviteLinkSection.container,\n additionalLinks.container,\n adminsLinks?.container,\n revokedLinks.container\n ].filter(Boolean));\n\n const openLink = (invite: ChatInvite) => {\n const tab = chatInviteLinkTab = this.slider.createTab(AppChatInviteLinkTab);\n tab.eventListener.addEventListener('close', () => {\n chatInviteLinkTab = menuItem = menuInvite = undefined;\n });\n tab.open(this.chatId, invite, this, menuItem?.update);\n };\n\n attachClickEvent(this.scrollable.container, (e) => {\n const container = findUpClassName(e.target, 'is-link');\n if(!container) {\n return;\n }\n\n menuItem = invitesMap.get(container);\n menuInvite = menuItem.invite;\n openLink(menuInvite);\n }, {listenerSetter: this.listenerSetter});\n\n createContextMenu({\n buttons: menuButtons,\n listenTo: this.scrollable.container,\n findElement: (e) => {\n const container = findUpClassName(e.target, 'is-link');\n if(container) {\n menuItem = invitesMap.get(container);\n menuInvite = menuItem.invite;\n }\n\n return container;\n },\n onClose: () => menuItem = menuInvite = undefined,\n middleware,\n listenerSetter: this.listenerSetter\n });\n\n const loadAnimationPromise = stickerContainer && p.animationData.then(async(cb) => {\n const player = await cb({\n container: stickerContainer,\n loop: true,\n autoplay: true,\n width: 120,\n height: 120\n });\n\n return lottieLoader.waitForFirstFrame(player);\n });\n\n type K = {\n row: UsernameRow,\n invite: ChatInvite,\n update: (newInvite?: ChatInvite) => void,\n destroy: (unmount?: boolean) => void\n };\n const invitesMap: Map = new Map();\n const updateCallbacks: Set<() => void> = new Set();\n\n const createRow = (invite: ChatInvite) => {\n let priceElement: HTMLElement, subtitleRight: HTMLElement;\n if(invite.subscription_pricing) {\n priceElement = StarsAmount({\n stars: invite.subscription_pricing.amount\n }) as HTMLElement;\n subtitleRight = i18n('Stars.Subscriptions.PerMonth');\n }\n\n const row = new UsernameRow(\n true,\n invite.subscription_pricing ? 'link_paid' : undefined,\n invite.subscription_pricing ? 'green' : undefined,\n priceElement,\n subtitleRight\n );\n row.title.replaceChildren(wrapInviteTitle(invite));\n\n if(!invite.expire_date && !invite.pFlags.revoked && !invite.subscription_pricing) {\n delete row.media.dataset.color;\n }\n\n let onClean: () => void;\n\n const destroy = (unmount?: boolean) => {\n onClean?.();\n invitesMap.delete(row.container);\n if(unmount) {\n row.container.remove();\n }\n };\n\n const update = (newInvite?: ChatInvite) => {\n if(newInvite) {\n invite = cache.invite = newInvite;\n }\n\n const elements: HTMLElement[] = [];\n const joined = invite.usage || 0;\n const requested = invite.requested || 0;\n const time = tsNow(true);\n const expireDate = invite.expire_date;\n const isExpired = expireDate && expireDate <= time;\n const isLimit = joined && joined >= invite.usage_limit;\n const timeLeft = expireDate ? Math.max(0, expireDate - time) : undefined;\n\n if(invite.pFlags.revoked) {\n elements.push(\n i18n('InviteLink.JoinedRevoked'),\n i18n('ExportedInvitation.Status.Revoked')\n );\n\n row.media.dataset.color = 'archive';\n if(circle) {\n circle.parentElement.remove();\n circle = undefined;\n }\n onClean?.();\n } else {\n if(joined) {\n elements.push(i18n('InviteLink.JoinedNew', [joined]));\n\n if(isLimit) {\n elements.push(i18n('InviteLinks.LimitReached'));\n row.media.dataset.color = 'red';\n } else if(invite.usage_limit) {\n elements.push(i18n('PeopleJoinedRemaining', [invite.usage_limit - joined]));\n } else if(requested) {\n elements.push(i18n('JoinRequests', [requested]));\n }\n } else if(requested) {\n elements.push(i18n('JoinRequests', [requested]));\n } else if(invite.usage_limit && !isExpired) {\n elements.push(i18n('CanJoin', [invite.usage_limit]));\n } else {\n elements.push(i18n(isExpired ? 'InviteLink.JoinedRevoked' : 'Chat.VoiceChat.JoinLink.Participants_ZeroValueHolder'));\n }\n }\n\n if(!invite.pFlags.revoked && expireDate) {\n if(!isExpired) {\n elements.push(i18n('InviteLink.Sticker.TimeLeft', [wrapLeftDuration(timeLeft)]));\n } else {\n row.media.dataset.color = 'red';\n elements.push(i18n('ExportedInvitation.Status.Expired'));\n onClean?.();\n }\n }\n\n if(!invite.pFlags.revoked && ((expireDate && !isExpired) || (invite.usage_limit && !isLimit))) {\n const limitProgress = invite.usage_limit ? joined / invite.usage_limit : undefined;\n const timeProgress = expireDate ? 1 - timeLeft / (expireDate - (invite.start_date || invite.date)) : undefined;\n const progress = Math.max(limitProgress ?? 0, timeProgress ?? 0);\n\n const color1 = hexToRgb(customProperties.getProperty('green-color'));\n const color2 = hexToRgb(customProperties.getProperty('danger-color'));\n const mixedColor = mixColors(color2, color1, progress);\n const hsla = rgbaToHsla(...mixedColor);\n hsla.s = Math.max(55, hsla.s);\n row.media.style.setProperty('--color', hslaToString(hsla));\n\n if(circle) {\n totalLength ??= circle.getTotalLength();\n circle.style.strokeDasharray = `${totalLength * (1 - progress)}, ${totalLength}`;\n\n if(isExpired) {\n const c = () => {\n _circle.parentElement.remove();\n };\n\n const _circle = circle;\n circle = undefined;\n\n setTimeout(c, 400);\n }\n }\n }\n\n row.subtitle.replaceChildren(...joinElementsWith(elements, ' • '));\n };\n\n const cache: K = {row, invite, update, destroy};\n invitesMap.set(row.container, cache);\n\n let circle: SVGCircleElement, totalLength = 146.70338439941406;\n if((invite.expire_date || invite.usage_limit) && isActiveInvite(invite)) {\n if(invite.expire_date) {\n onClean = () => {\n // invitesMap.delete(row);\n updateCallbacks.delete(update);\n };\n updateCallbacks.add(update);\n middleware.onDestroy(onClean);\n }\n\n row.media.insertAdjacentHTML('beforeend', `\n \n \n \n `);\n\n circle = row.media.lastElementChild.firstElementChild as any;\n }\n\n update();\n\n return row;\n };\n\n const onRevokedLinksUpdate = () => {\n revokedLinks.container.classList.toggle('hide', !revokedLinks.content.childElementCount);\n };\n\n const loadLinksPromise = Promise.all([p.invites, p.invitesRevoked]).then(([chatInvites, chatInvitesRevoked]) => {\n if(this.adminId) {\n primaryInvite = chatInvites.invites[0] as ChatInvite;\n } else if(!usernames.length) {\n primaryInvite = chatFull.exported_invite as ChatInvite;\n }\n\n inviteLink.setChatInvite(primaryInvite || usernames[0]);\n\n ([\n [chatInvites, additionalLinks],\n [chatInvitesRevoked, revokedLinks]\n ] as Array<[MessagesExportedChatInvites, SettingSection]>).forEach(([chatInvites, section]) => {\n (chatInvites.invites as ChatInvite[]).forEach((invite) => {\n if(primaryInvite?.link === invite.link) {\n return;\n }\n\n const row = createRow(invite);\n section.content.append(row.container);\n });\n });\n\n onRevokedLinksUpdate();\n\n const update = () => {\n updateCallbacks.forEach((cb) => cb());\n };\n\n const updateInterval = setInterval(update, 1000);\n middleware.onDestroy(() => {\n invitesMap.forEach(({destroy}) => destroy());\n clearInterval(updateInterval);\n });\n this.listenerSetter.add(rootScope)('theme_changed', () => {\n invitesMap.forEach(({update}) => update());\n });\n });\n\n loadPromises.push(loadAnimationPromise, loadLinksPromise);\n return Promise.all(loadPromises);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider'\nimport InputField from '../../inputField';\nimport EditPeer from '../../editPeer';\nimport Row, {CreateRowFromCheckboxField} from '../../row';\nimport Button from '../../button';\nimport {ChatRights} from '../../../lib/appManagers/appChatsManager';\nimport {Chat, ChatFull, ChatParticipants} from '../../../layer';\nimport AppChatTypeTab from './chatType';\nimport rootScope from '../../../lib/rootScope';\nimport AppGroupPermissionsTab from './groupPermissions';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport PopupDeleteDialog from '../../popups/deleteDialog';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport CheckboxField from '../../checkboxField';\nimport AppChatReactionsTab from './chatReactions';\nimport hasRights from '../../../lib/appManagers/utils/chats/hasRights';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport SettingSection from '../../settingSection';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport PopupElement from '../../popups';\nimport AppChatAdministratorsTab from './chatAdministrators';\nimport numberThousandSplitter from '../../../helpers/number/numberThousandSplitter';\nimport AppChatMembersTab from './chatMembers';\nimport AppRemovedUsersTab from './removedUsers';\nimport AppChatDiscussionTab from './chatDiscussion';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport cancelEvent from '../../../helpers/dom/cancelEvent';\nimport {toastNew} from '../../toast';\nimport AppChatInviteLinksTab from './chatInviteLinks';\nimport AppChatRequestsTab from './chatRequests';\nimport getParticipantsCount from '../../../lib/appManagers/utils/chats/getParticipantsCount';\n\nexport default class AppEditChatTab extends SliderSuperTab {\n private chatNameInputField: InputField;\n private descriptionInputField: InputField;\n private editPeer: EditPeer;\n public chatId: ChatId;\n\n protected async _init() {\n // * cleanup prev\n this.listenerSetter.removeAll();\n\n this.container.classList.add('edit-peer-container', 'edit-group-container');\n this.setTitle('Edit');\n\n let [\n chatFull,\n chat,\n isBroadcast,\n isChannel,\n canChangeType,\n canChangePermissions,\n canManageTopics,\n canManageAdmins,\n canChangeInfo,\n canDeleteChat,\n canPostMessages,\n canManageInviteLinks,\n canInviteUsers,\n appConfig,\n availableReactions\n ] = await Promise.all([\n this.managers.appProfileManager.getChatFull(this.chatId, true),\n this.managers.appChatsManager.getChat(this.chatId) as Promise,\n this.managers.appChatsManager.isBroadcast(this.chatId),\n this.managers.appChatsManager.isChannel(this.chatId),\n this.managers.appChatsManager.hasRights(this.chatId, 'change_type'),\n this.managers.appChatsManager.hasRights(this.chatId, 'change_permissions'),\n this.managers.appChatsManager.hasRights(this.chatId, 'manage_topics'),\n this.managers.appChatsManager.hasRights(this.chatId, 'change_permissions'),\n this.managers.appChatsManager.hasRights(this.chatId, 'change_info'),\n this.managers.appChatsManager.hasRights(this.chatId, 'delete_chat'),\n this.managers.appChatsManager.hasRights(this.chatId, 'post_messages'),\n this.managers.appChatsManager.hasRights(this.chatId, 'invite_links'),\n this.managers.appChatsManager.hasRights(this.chatId, 'invite_users'),\n this.managers.apiManager.getAppConfig(),\n this.managers.appReactionsManager.getAvailableReactions()\n ]);\n\n this.scrollable.replaceChildren();\n\n const chatUpdateListeners: {[type in 'full' | 'basic']: (() => void)[]} = {full: [], basic: []};\n const addChatUpdateListener = (callback: () => void, type: 'full' | 'basic' = 'basic') => {\n chatUpdateListeners[type].push(callback);\n };\n\n this.listenerSetter.add(rootScope)('chat_update', async(chatId) => {\n if(this.chatId === chatId) {\n chat = await this.managers.appChatsManager.getChat(this.chatId) as typeof chat;\n chatUpdateListeners['basic'].forEach((callback) => callback());\n }\n });\n\n this.listenerSetter.add(rootScope)('chat_full_update', async(chatId) => {\n if(this.chatId === chatId) {\n chatFull = await this.managers.appProfileManager.getCachedFullChat(chatId) ||\n chatFull ||\n await this.managers.appProfileManager.getChatFull(chatId);\n chatUpdateListeners['full'].forEach((callback) => callback());\n }\n });\n\n const peerId = this.chatId.toPeerId(true);\n const isAdmin = !!chat.admin_rights;\n\n {\n const section = new SettingSection({noDelimiter: true, caption: 'PeerInfo.SetAboutDescription'});\n const inputFields: InputField[] = [];\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.chatNameInputField = new InputField({\n label: isBroadcast ? 'EnterChannelName' : 'CreateGroup.NameHolder',\n name: 'chat-name',\n maxLength: 255,\n required: true,\n canBeEdited: canChangeInfo\n });\n this.descriptionInputField = new InputField({\n label: 'DescriptionPlaceholder',\n name: 'chat-description',\n maxLength: 255,\n withLinebreaks: true,\n canBeEdited: canChangeInfo\n });\n\n this.chatNameInputField.setOriginalValue(chat.title);\n this.descriptionInputField.setOriginalValue(chatFull.about);\n\n inputWrapper.append(this.chatNameInputField.container, this.descriptionInputField.container);\n\n inputFields.push(this.chatNameInputField, this.descriptionInputField);\n\n this.editPeer = new EditPeer({\n peerId,\n inputFields,\n listenerSetter: this.listenerSetter,\n popupOptions: {isForum: (chat as Chat.channel).pFlags.forum},\n middleware: this.middlewareHelper.get()\n });\n this.content.append(this.editPeer.nextBtn);\n\n if(!canChangeInfo) {\n this.editPeer.avatarElem.node.classList.remove('avatar-placeholder');\n this.editPeer.avatarEdit.container.replaceChildren(this.editPeer.avatarElem.node);\n this.editPeer.avatarEdit.container.classList.add('disable-hover');\n }\n\n section.content.append(this.editPeer.avatarEdit.container, inputWrapper);\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({caption: true});\n\n if(canChangeType) {\n const chatTypeRow = new Row({\n titleLangKey: isBroadcast ? 'ChannelType' : 'GroupType',\n clickable: () => {\n const tab = this.slider.createTab(AppChatTypeTab);\n tab.chatId = this.chatId;\n tab.chatFull = chatFull;\n tab.open();\n },\n icon: 'lock',\n listenerSetter: this.listenerSetter\n });\n\n const setChatTypeSubtitle = () => {\n let key: LangPackKey;\n const username = getPeerActiveUsernames(chat as Chat.channel)[0];\n if(isBroadcast) {\n key = username ? 'TypePublic' : 'TypePrivate';\n } else {\n key = username ? 'TypePublicGroup' : 'TypePrivateGroup';\n }\n\n chatTypeRow.subtitle.replaceChildren(i18n(key));\n };\n\n setChatTypeSubtitle();\n addChatUpdateListener(setChatTypeSubtitle);\n section.content.append(chatTypeRow.container);\n }\n\n if(canManageInviteLinks) {\n const inviteLinksRow = new Row({\n titleLangKey: 'InviteLinks',\n navigationTab: {\n constructor: AppChatInviteLinksTab,\n slider: this.slider,\n getInitArgs: () => ({\n chatId: this.chatId,\n p: AppChatInviteLinksTab.getInitArgs(this.chatId)\n })\n },\n icon: 'link',\n listenerSetter: this.listenerSetter,\n subtitle: true\n });\n\n const setInviteLinksCount = () => {\n inviteLinksRow.subtitle.textContent = '1';\n };\n\n setInviteLinksCount();\n addChatUpdateListener(setInviteLinksCount, 'full');\n\n section.content.append(inviteLinksRow.container);\n }\n\n if(canInviteUsers && isAdmin) {\n const requestsRow = new Row({\n titleLangKey: isBroadcast ? 'SubscribeRequests' : 'MemberRequests',\n navigationTab: {\n constructor: AppChatRequestsTab,\n getInitArgs: () => this.chatId,\n slider: this.slider\n },\n icon: 'adduser',\n listenerSetter: this.listenerSetter,\n subtitle: true\n });\n\n const setRequestsCount = () => {\n const count = chatFull.requests_pending;\n requestsRow.subtitle.textContent = '' + count;\n requestsRow.container.classList.toggle('hide', !count);\n };\n\n setRequestsCount();\n addChatUpdateListener(setRequestsCount, 'full');\n\n section.content.append(requestsRow.container);\n }\n\n // if(canChangeType || canChangePermissions) {\n if(canChangeInfo && isAdmin) {\n const reactionsRow = new Row({\n titleLangKey: 'Reactions',\n icon: 'reactions',\n navigationTab: {\n constructor: AppChatReactionsTab,\n slider: this.slider,\n getInitArgs: () => ({\n chatId: this.chatId,\n p: AppChatReactionsTab.getInitArgs(this.chatId)\n })\n },\n listenerSetter: this.listenerSetter\n });\n\n const availableReactionsLength = availableReactions.filter((availableReaction) => !availableReaction.pFlags.inactive).length;\n const setReactionsLength = () => {\n const chatAvailableReactions = chatFull.available_reactions ?? {_: 'chatReactionsNone'};\n if(chatAvailableReactions._ === 'chatReactionsSome') {\n const length = chatAvailableReactions.reactions.length;\n if(length === availableReactionsLength) {\n replaceContent(reactionsRow.subtitle, i18n('ReactionsAll'));\n } else {\n reactionsRow.subtitle.textContent = length + '/' + availableReactionsLength;\n }\n } else {\n replaceContent(reactionsRow.subtitle, i18n(chatAvailableReactions._ === 'chatReactionsAll' ? 'ReactionsAll' : 'Checkbox.Disabled'));\n }\n };\n\n setReactionsLength();\n addChatUpdateListener(setReactionsLength, 'full');\n section.content.append(reactionsRow.container);\n }\n\n if(canChangePermissions && !isBroadcast) {\n const flags = [\n 'send_stickers',\n 'send_polls',\n 'send_photos',\n 'send_videos',\n 'send_roundvideos',\n 'send_audios',\n 'send_voices',\n 'send_docs',\n 'send_plain',\n 'embed_links',\n 'invite_users',\n 'pin_messages',\n 'change_info'\n ] as ChatRights[];\n\n const permissionsRow = new Row({\n titleLangKey: 'ChannelPermissions',\n clickable: () => {\n const tab = this.slider.createTab(AppGroupPermissionsTab);\n tab.chatId = this.chatId;\n tab.open();\n },\n icon: 'permissions',\n listenerSetter: this.listenerSetter\n });\n\n const setPermissionsLength = () => {\n permissionsRow.subtitle.textContent = flags.reduce((acc, f) => acc + +hasRights(chat, f, (chat as Chat.chat).default_banned_rights), 0) + '/' + flags.length;\n };\n\n setPermissionsLength();\n addChatUpdateListener(setPermissionsLength);\n section.content.append(permissionsRow.container);\n }\n\n if(canChangeInfo && isAdmin) {\n const discussionRow = new Row({\n icon: 'comments',\n titleLangKey: isBroadcast ? 'PeerInfo.Discussion' : 'LinkedChannel',\n subtitle: true,\n navigationTab: {\n constructor: AppChatDiscussionTab,\n getInitArgs: () => ({\n chatId: this.chatId,\n linkedChatId: (chatFull as ChatFull.channelFull).linked_chat_id,\n p: AppChatDiscussionTab.getInitArgs()\n }),\n slider: this.slider\n },\n listenerSetter: this.listenerSetter\n });\n\n const setSubtitle = async() => {\n const linkedChatId = (chatFull as ChatFull.channelFull).linked_chat_id;\n let el: HTMLElement;\n if(linkedChatId) {\n el = await wrapPeerTitle({peerId: linkedChatId.toPeerId(true)});\n } else {\n el = i18n('PeerInfo.Discussion.Add');\n }\n\n if(!isBroadcast) {\n discussionRow.container.classList.toggle('hide', !linkedChatId);\n }\n\n discussionRow.subtitle.replaceChildren(el);\n };\n\n await setSubtitle();\n addChatUpdateListener(setSubtitle, 'full');\n\n section.caption.replaceChildren(i18n('DiscussionInfo'));\n section.content.append(discussionRow.container);\n }\n\n if(canManageTopics && isAdmin && (chat.participants_count >= appConfig.forum_upgrade_participants_min || (chat as Chat.channel).pFlags.forum) && !isBroadcast) {\n const topicsRow = new Row({\n checkboxField: new CheckboxField({toggle: true}),\n titleLangKey: 'Topics',\n clickable: (e) => {\n if((chatFull as ChatFull.channelFull).linked_chat_id) {\n toastNew({langPackKey: 'ChannelTopicsDiscussionForbidden'});\n cancelEvent(e);\n return;\n }\n },\n icon: 'topics',\n listenerSetter: this.listenerSetter\n });\n\n const setTopics = () => {\n const isForum = !!(chat as Chat.channel).pFlags.forum;\n this.editPeer.avatarElem.node.parentElement.classList.toggle('is-forum', isForum);\n topicsRow.checkboxField.setValueSilently(isForum);\n\n // const linkedChatId = (chatFull as ChatFull.channelFull).linked_chat_id;\n // topicsRow.toggleDisability(!!linkedChatId);\n };\n\n this.listenerSetter.add(topicsRow.checkboxField.input)('change', (e) => {\n if(!e.isTrusted) {\n return;\n }\n\n const promise = this.managers.appChatsManager.toggleForum(this.chatId, topicsRow.checkboxField.checked);\n topicsRow.disableWithPromise(promise);\n });\n\n setTopics();\n addChatUpdateListener(setTopics);\n addChatUpdateListener(setTopics, 'full');\n\n section.caption.replaceChildren(i18n('ForumToggleDescription'));\n section.content.append(topicsRow.container);\n }\n\n section.caption.classList.toggle('hide', !section.caption.childElementCount);\n\n if(section.content.childElementCount) this.scrollable.append(section.container);\n\n attachClickEvent(this.editPeer.nextBtn, () => {\n this.editPeer.nextBtn.disabled = true;\n\n const promises: Promise[] = [];\n\n const id = this.chatId;\n if(this.chatNameInputField.isValidToChange()) {\n promises.push(this.managers.appChatsManager.editTitle(id, this.chatNameInputField.value));\n }\n\n if(this.descriptionInputField.isValidToChange()) {\n promises.push(this.managers.appChatsManager.editAbout(id, this.descriptionInputField.value));\n }\n\n if(this.editPeer.uploadAvatar) {\n promises.push(this.editPeer.uploadAvatar().then((inputFile) => {\n return this.managers.appChatsManager.editPhoto(id, inputFile);\n }));\n }\n\n Promise.race(promises).finally(() => {\n this.editPeer.nextBtn.removeAttribute('disabled');\n this.close();\n });\n }, {listenerSetter: this.listenerSetter});\n }\n\n {\n const section = new SettingSection({});\n\n if(canManageAdmins) {\n const administratorsRow = new Row({\n titleLangKey: 'PeerInfo.Administrators',\n subtitle: true,\n icon: 'admin',\n navigationTab: {\n constructor: AppChatAdministratorsTab,\n slider: this.slider,\n getInitArgs: () => ({\n chatId: this.chatId,\n p: AppChatAdministratorsTab.getInitArgs(this.chatId)\n })\n },\n listenerSetter: this.listenerSetter\n });\n\n const setAdministratorsLength = () => {\n administratorsRow.subtitle.textContent = '' + ((chatFull as ChatFull.channelFull).admins_count || 1);\n };\n\n setAdministratorsLength();\n addChatUpdateListener(setAdministratorsLength, 'full');\n\n section.content.append(administratorsRow.container);\n }\n\n {\n const membersRow = new Row({\n titleLangKey: isBroadcast ? 'PeerInfo.Subscribers' : 'GroupMembers',\n icon: 'newgroup',\n clickable: () => {\n this.slider.createTab(AppChatMembersTab).open(this.chatId);\n },\n listenerSetter: this.listenerSetter,\n subtitle: true\n });\n\n // const i = new I18n.IntlElement();\n // membersRow.subtitle.append(i.element);\n\n const setMembersLength = () => {\n const participants = getParticipantsCount(chatFull);\n membersRow.subtitle.textContent = numberThousandSplitter(participants);\n // i.compareAndUpdate({\n // key: isBroadcast ? 'Subscribers' : 'Members',\n // args: [numberThousandSplitter(participants)]\n // });\n };\n\n setMembersLength();\n addChatUpdateListener(setMembersLength, 'full');\n\n section.content.append(membersRow.container);\n }\n\n if(canChangePermissions) {\n const removedUsersRow = new Row({\n titleLangKey: 'ChannelBlockedUsers',\n subtitle: true,\n icon: 'deleteuser',\n clickable: () => {\n const tab = this.slider.createTab(AppRemovedUsersTab);\n tab.open(this.chatId);\n },\n listenerSetter: this.listenerSetter\n });\n\n const setRemovedUsersLength = () => {\n const kickedCount = (chatFull as ChatFull.channelFull).kicked_count || 0;\n if(kickedCount) {\n removedUsersRow.subtitle.textContent = numberThousandSplitter(kickedCount);\n } else {\n removedUsersRow.subtitle.replaceChildren(i18n('NoBlockedUsers'));\n }\n };\n\n setRemovedUsersLength();\n addChatUpdateListener(setRemovedUsersLength, 'full');\n\n section.content.append(removedUsersRow.container);\n }\n\n this.scrollable.append(section.container);\n }\n\n if(isBroadcast && canPostMessages) {\n const section = new SettingSection({caption: true});\n const signMessagesCheckboxField = new CheckboxField({\n text: 'ChannelSignMessages'\n });\n\n const showProfilesCheckboxField = new CheckboxField({\n text: 'ChannelSignMessagesWithProfile'\n });\n\n this.listenerSetter.add(signMessagesCheckboxField.input)('change', () => {\n const toggle = signMessagesCheckboxField.toggleDisability(true);\n this.managers.appChatsManager.toggleSignatures(this.chatId, signMessagesCheckboxField.checked, signMessagesCheckboxField.checked && showProfilesCheckboxField.checked).then(() => {\n toggle();\n });\n });\n\n this.listenerSetter.add(showProfilesCheckboxField.input)('change', () => {\n const toggle = showProfilesCheckboxField.toggleDisability(true);\n this.managers.appChatsManager.toggleSignatures(this.chatId, signMessagesCheckboxField.checked, showProfilesCheckboxField.checked).then(() => {\n toggle();\n });\n });\n\n const update = () => {\n signMessagesCheckboxField.setValueSilently(!!(chat as Chat.channel).pFlags.signatures);\n showProfilesCheckboxField.setValueSilently(signMessagesCheckboxField.checked && !!(chat as Chat.channel).pFlags.signature_profiles);\n row2.container.classList.toggle('hide', !signMessagesCheckboxField.checked);\n section.caption.replaceChildren(i18n(showProfilesCheckboxField.checked ? 'ChannelSignProfilesInfo' : 'ChannelSignMessagesInfo'));\n };\n\n const row2 = CreateRowFromCheckboxField(showProfilesCheckboxField);\n\n update();\n addChatUpdateListener(update);\n\n section.content.append(CreateRowFromCheckboxField(signMessagesCheckboxField).container, row2.container);\n this.scrollable.append(section.container);\n }\n\n if(!isBroadcast) {\n const section = new SettingSection({\n\n });\n\n if(!isBroadcast && canChangeType) {\n const showChatHistoryCheckboxField = new CheckboxField({\n text: 'ChatHistory'\n });\n\n this.listenerSetter.add(showChatHistoryCheckboxField.input)('change', () => {\n const toggle = showChatHistoryCheckboxField.toggleDisability(true);\n this.managers.appChatsManager.togglePreHistoryHidden(this.chatId, !showChatHistoryCheckboxField.checked).then(() => {\n toggle();\n });\n });\n\n // ! it won't be updated because chatFull will be old\n const onChatUpdate = () => {\n showChatHistoryCheckboxField.setValueSilently(isChannel && !(chatFull as ChatFull.channelFull).pFlags.hidden_prehistory);\n };\n\n onChatUpdate();\n addChatUpdateListener(onChatUpdate);\n\n section.content.append(CreateRowFromCheckboxField(showChatHistoryCheckboxField).container);\n }\n\n if(section.content.childElementCount) {\n this.scrollable.append(section.container);\n }\n }\n\n if(canDeleteChat) {\n const section = new SettingSection({});\n\n const btnDelete = Button('btn-primary btn-transparent danger', {icon: 'delete', text: isBroadcast ? 'PeerInfo.DeleteChannel' : 'DeleteAndExitButton'});\n\n attachClickEvent(btnDelete, () => {\n PopupElement.createPopup(PopupDeleteDialog, peerId/* , 'delete' */, undefined, (promise) => {\n const toggle = toggleDisability([btnDelete], true);\n promise.then(() => {\n this.close();\n }, () => {\n toggle();\n });\n });\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnDelete);\n\n this.scrollable.append(section.container);\n }\n\n if(!isChannel) {\n // ! this one will fire earlier than tab's closeAfterTimeout (destroy) event and listeners will be erased, so destroy won't fire\n this.listenerSetter.add(rootScope)('dialog_migrate', ({migrateFrom, migrateTo}) => {\n if(peerId === migrateFrom) {\n this.chatId = migrateTo.toChatId();\n this._init();\n }\n });\n }\n }\n\n public init() {\n return this._init();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {toastNew} from '../../components/toast';\nimport {LangPackKey} from '../../lib/langPack';\nimport {copyTextToClipboard} from '../clipboard';\nimport cancelEvent from './cancelEvent';\nimport {attachClickEvent} from './clickEvent';\n\nconst T_ME = 'https://t.me/';\nexport default function anchorCopy(options: Partial<{\n // href: string,\n mePath: string,\n username: string\n}> = {}) {\n const anchor = document.createElement('a');\n anchor.classList.add('anchor-copy');\n\n let copyWhat: string, copyText: LangPackKey = 'LinkCopied';\n if(options.mePath) {\n const href = T_ME + options.mePath;\n copyWhat = anchor.href = anchor.innerText = href;\n }\n\n if(options.username) {\n const href = T_ME + options.username;\n anchor.href = href;\n copyWhat = anchor.innerText = '@' + options.username;\n copyText = 'UsernameCopied';\n }\n\n attachClickEvent(anchor, (e) => {\n cancelEvent(e);\n copyTextToClipboard(copyWhat ?? anchor.href);\n toastNew({langPackKey: copyText});\n });\n\n return anchor;\n}\n","import {BusinessWeeklyOpen, BusinessWorkHours} from '../layer';\nimport I18n from '../lib/langPack';\nimport {ONE_DAY_MINUTES, ONE_WEEK_MINUTES, formatTime} from './date';\nimport copy from './object/copy';\n\nclass Period {\n // from 0 to 2 * 24 * 60\n constructor(public start: number, public end: number) {\n }\n\n public toString() {\n return Period.timeToString(this.start) + ' - ' + Period.timeToString(this.end);\n }\n\n public static timeToString(time: number, includeNextDay = true) {\n const min = time % 60;\n const hours = (time - min) / 60 % 24;\n const rightNow = new Date();\n rightNow.setHours(hours, min);\n const str = formatTime(rightNow).textContent;\n if(time > ONE_DAY_MINUTES && includeNextDay) {\n return I18n.format('BusinessHoursNextDay', true, [str]);\n }\n return str;\n }\n}\n\nexport default class OpeningHours {\n static Period = Period;\n\n // https://github.com/DrKLO/Telegram/blob/a906f12aaec2768969c77650a7e4b377baa6cf2a/TMessagesProj/src/main/java/org/telegram/ui/Business/OpeningHoursActivity.java#L201\n static adaptWeeklyOpen(hours: BusinessWeeklyOpen[], utcOffset: number) {\n const array: BusinessWeeklyOpen[] = copy(hours);\n\n const array2: BusinessWeeklyOpen[] = new Array();\n for(let i = 0; i < array.length; ++i) {\n const weekly = array[i];\n let newWeekly: BusinessWeeklyOpen = {...weekly};\n\n if(utcOffset !== 0) {\n const start = weekly.start_minute % ONE_DAY_MINUTES;\n const end = start + (weekly.end_minute - weekly.start_minute);\n if(start === 0 && (end === ONE_DAY_MINUTES || end === (ONE_DAY_MINUTES - 1))) {\n newWeekly.start_minute = weekly.start_minute;\n newWeekly.end_minute = weekly.end_minute;\n array2.push(newWeekly);\n continue;\n }\n }\n\n newWeekly.start_minute = weekly.start_minute + utcOffset;\n newWeekly.end_minute = weekly.end_minute + utcOffset;\n array2.push(newWeekly);\n\n if(newWeekly.start_minute < 0) {\n if(newWeekly.end_minute < 0) {\n newWeekly.start_minute += ONE_WEEK_MINUTES;\n newWeekly.end_minute += ONE_WEEK_MINUTES;\n } else {\n newWeekly.start_minute = 0;\n\n newWeekly = {...weekly};\n newWeekly.start_minute = ONE_WEEK_MINUTES + weekly.start_minute + utcOffset;\n newWeekly.end_minute = (ONE_WEEK_MINUTES - 1);\n array2.push(newWeekly);\n }\n } else if(newWeekly.end_minute > ONE_WEEK_MINUTES) {\n if(newWeekly.start_minute > ONE_WEEK_MINUTES) {\n newWeekly.start_minute -= ONE_WEEK_MINUTES;\n newWeekly.end_minute -= ONE_WEEK_MINUTES;\n }/* else {\n newWeekly.end_minute = ONE_WEEK_MINUTES - 1;\n\n newWeekly = {...weekly};\n newWeekly.start_minute = 0;\n newWeekly.end_minute = weekly.end_minute + utcOffset - (ONE_WEEK_MINUTES - 1);\n array2.push(newWeekly);\n } */\n }\n }\n\n array2.sort((a, b) => a.start_minute - b.start_minute);\n return array2;\n }\n\n /**\n * @returns periods starting from Monday\n */\n static getDaysHours(hours: BusinessWeeklyOpen[]) {\n const days: Period[][] = new Array(7);\n for(let i = 0; i < days.length; ++i) {\n days[i] = [];\n }\n for(let i = 0; i < hours.length; ++i) {\n const period = hours[i];\n const day = Math.floor((period.start_minute / ONE_DAY_MINUTES) % 7);\n const start = period.start_minute % ONE_DAY_MINUTES;\n const end = start + (period.end_minute - period.start_minute);\n days[day].push(new Period(start, end));\n }\n for(let i = 0; i < 7; ++i) {\n const start = ONE_DAY_MINUTES * i;\n const end = ONE_DAY_MINUTES * (i + 1);\n\n let m = start;\n for(let j = 0; j < hours.length; ++j) {\n const period = hours[j];\n if(period.start_minute <= m && period.end_minute >= m) {\n m = period.end_minute + 1;\n }\n }\n\n const isFull = m >= end;\n if(isFull) {\n const prevDay = (7 + i - 1) % 7;\n if(days[prevDay].length && days[prevDay][days[prevDay].length - 1].end >= ONE_DAY_MINUTES) {\n days[prevDay][days[prevDay].length - 1].end = ONE_DAY_MINUTES - 1;\n }\n days[i].length = 0;\n days[i].push(new Period(0, ONE_DAY_MINUTES - 1));\n } else {\n const nextDay = (i + 1) % 7;\n if(days[i].length && days[nextDay].length) {\n const todayLast = days[i][days[i].length - 1];\n const tomorrowFirst = days[nextDay][0];\n if(todayLast.end > ONE_DAY_MINUTES && todayLast.end - ONE_DAY_MINUTES + 1 === tomorrowFirst.start) {\n todayLast.end = ONE_DAY_MINUTES - 1;\n tomorrowFirst.start = 0;\n }\n }\n }\n }\n return days;\n }\n\n static is24x7(hours: BusinessWorkHours) {\n if(!hours || !hours.weekly_open.length) return false;\n let last = 0;\n for(let i = 0; i < hours.weekly_open.length; ++i) {\n const period = hours.weekly_open[i];\n if(period.start_minute > last + 1) return false;\n last = period.end_minute;\n }\n return last >= ONE_WEEK_MINUTES - 1;\n }\n\n static isOpenNow(adapted_weekly_open: BusinessWeeklyOpen[]) {\n const date = new Date();\n\n const nowWeekday = (7 + date.getDay() - 1) % 7;\n const nowHours = date.getHours();\n const nowMinutes = date.getMinutes();\n\n let openNow = false;\n const nowPeriodTime = nowMinutes + nowHours * 60 + nowWeekday * ONE_DAY_MINUTES;\n for(let i = 0; i < adapted_weekly_open.length; ++i) {\n const weeklyPeriod = adapted_weekly_open[i];\n if(\n nowPeriodTime >= weeklyPeriod.start_minute && nowPeriodTime <= weeklyPeriod.end_minute ||\n (nowPeriodTime + ONE_WEEK_MINUTES) >= weeklyPeriod.start_minute && (nowPeriodTime + ONE_WEEK_MINUTES) <= weeklyPeriod.end_minute ||\n (nowPeriodTime - ONE_WEEK_MINUTES) >= weeklyPeriod.start_minute && (nowPeriodTime - ONE_WEEK_MINUTES) <= weeklyPeriod.end_minute\n ) {\n openNow = true;\n break;\n }\n }\n\n return {openNow, nowWeekday, nowHours, nowPeriodTime};\n }\n\n static isFull(periods: Period[]) {\n if(!periods || !periods.length) return false;\n let lastTime = 0;\n for(let i = 0; i < periods.length; ++i) {\n const p = periods[i];\n if(lastTime < p.start) {\n return false;\n }\n lastTime = p.end;\n }\n return lastTime === (ONE_DAY_MINUTES - 1) || lastTime === ONE_DAY_MINUTES;\n }\n}\n","export default function rotateArray(array: T[], n: number) {\n const front = array.slice(n);\n const back = array.slice(0, n);\n return front.concat(back);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {createEffect, createSignal, For, on, untrack, JSX, onCleanup, getOwner, runWithOwner} from 'solid-js';\nimport {Portal} from 'solid-js/web';\nimport OpeningHours from '../helpers/openingHours';\nimport {BusinessWorkHours, Timezone} from '../layer';\nimport Row from './row';\nimport I18n, {i18n} from '../lib/langPack';\nimport {getWeekDays, ONE_DAY_MINUTES, ONE_WEEK_MINUTES} from '../helpers/date';\nimport rotateArray from '../helpers/array/rotate';\nimport classNames from '../helpers/string/classNames';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport {copyTextToClipboard} from '../helpers/clipboard';\nimport {toastNew} from './toast';\nimport Animated from '../helpers/solid/animations';\n\nexport default function BusinessHours(props: {\n hours: () => BusinessWorkHours,\n timezones: () => Timezone[]\n}) {\n const [expanded, setExpanded] = createSignal(false);\n const [is24x7, set24x7] = createSignal(false);\n const [lastKey, setLastKey] = createSignal();\n const [element, setElement] = createSignal();\n const [showInMyTimezone, setShowInMyTimezone] = createSignal();\n const [text, setText] = createSignal();\n\n const listenerSetter = new ListenerSetter();\n onCleanup(() => listenerSetter.removeAll());\n\n const owner = getOwner();\n\n let switchElement: HTMLElement;\n const row = new Row({\n title: true,\n titleRight: (\n \n {showInMyTimezone() !== undefined && i18n(showInMyTimezone() ? 'BusinessHoursProfileSwitchMy' : 'BusinessHoursProfileSwitchLocal')}\n \n ) as HTMLElement,\n subtitleLangKey: 'BusinessHoursProfile',\n subtitleRight: true,\n icon: 'sending',\n clickable: (e) => {\n if(findUpAsChild(e.target as HTMLElement, switchElement)) {\n setShowInMyTimezone((value) => !value);\n runWithOwner(owner, () => {\n update();\n });\n setExpanded(true);\n return;\n }\n\n if(!is24x7()) {\n setExpanded((value) => !value);\n }\n },\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Copy',\n onClick: () => {\n copyTextToClipboard(text());\n toastNew({langPackKey: 'BusinessHoursCopied'});\n }\n }]\n },\n listenerSetter\n });\n\n const updateContainerStyles = () => {\n let height: number;\n if(expanded() && !is24x7()) {\n const rect = row.container.querySelector('.business-hours').getBoundingClientRect();\n height = rect.height;\n }\n\n row.container.style.paddingBottom = height ? `${7 + 3 + height}px` : '';\n row.container.classList.toggle('is-expanded', expanded());\n };\n\n createEffect(on(\n expanded,\n updateContainerStyles,\n {defer: true}\n ));\n\n const getUtcOffset = () => {\n const workHours = props.hours();\n const timezonesList = props.timezones();\n const timezone = timezonesList?.find((timezone) => timezone.id === workHours.timezone_id);\n const date = new Date();\n const currentUtcOffset = -date.getTimezoneOffset();\n // const currentUtcOffset = -(-240);\n const valueUtcOffset = !timezone ? 0 : timezone.utc_offset / 60;\n const utcOffset = currentUtcOffset - valueUtcOffset;\n return utcOffset;\n };\n\n const update = () => {\n const workHours = props.hours();\n if(!workHours || !props.timezones()) {\n return;\n }\n\n const is24x7 = OpeningHours.is24x7(workHours);\n set24x7(is24x7);\n\n const weeklyOpen = workHours.weekly_open;\n\n const utcOffset = getUtcOffset();\n const isDifferentTimezone = !!utcOffset;\n const _showInMyTimezone = isDifferentTimezone ? untrack(showInMyTimezone) ?? false : true;\n const adaptedWeeklyOpen = OpeningHours.adaptWeeklyOpen(weeklyOpen, utcOffset);\n const {openNow, nowPeriodTime, nowWeekday} = OpeningHours.isOpenNow(adaptedWeeklyOpen);\n\n setShowInMyTimezone(isDifferentTimezone ? _showInMyTimezone : undefined);\n\n const formatDay = (day: Parameters[0], index: number) => {\n if(OpeningHours.isFull(day)) {\n return [I18n.format('BusinessHoursProfileOpen', true)];\n }\n\n if(!index && !openNow && !expanded()) {\n let opensPeriodTime = -1;\n for(let j = 0; j < adaptedWeeklyOpen.length; ++j) {\n const weekly = adaptedWeeklyOpen[j];\n if(nowPeriodTime < weekly.start_minute) {\n opensPeriodTime = weekly.start_minute;\n break;\n }\n }\n if(opensPeriodTime === -1 && adaptedWeeklyOpen.length) {\n opensPeriodTime = adaptedWeeklyOpen[0].start_minute;\n }\n if(opensPeriodTime === -1) {\n return [I18n.format('BusinessHoursProfileClose', true)];\n } else {\n const diff = opensPeriodTime < nowPeriodTime ? opensPeriodTime + (ONE_WEEK_MINUTES - nowPeriodTime) : opensPeriodTime - nowPeriodTime;\n if(diff < 60) {\n return [I18n.format('BusinessHoursProfileOpensInMinutes', true, [diff])];\n } else if(diff < ONE_DAY_MINUTES) {\n return [I18n.format('BusinessHoursProfileOpensInHours', true, [Math.ceil(diff / 60)])];\n } else {\n return [I18n.format('BusinessHoursProfileOpensInDays', true, [Math.ceil(diff / ONE_DAY_MINUTES)])];\n }\n }\n }\n\n const result = day.map((period) => period.toString());\n if(!result.length) {\n return [I18n.format('BusinessHoursProfileClose', true)];\n }\n\n return result;\n };\n\n const formatDays = (days: typeof localDays) => {\n return rotateArray(days, nowWeekday).map(formatDay);\n };\n\n const localDays = OpeningHours.getDaysHours(weeklyOpen);\n const localDaysFormatted = formatDays(localDays);\n\n const myDays = OpeningHours.getDaysHours(adaptedWeeklyOpen);\n const myDaysFormatted = formatDays(myDays);\n\n const daysFormattedToUse = _showInMyTimezone ? myDaysFormatted : localDaysFormatted;\n\n row.title.replaceChildren(i18n(openNow ? 'BusinessHoursProfileNowOpen' : 'BusinessHoursProfileNowClosed'));\n row.title.classList.toggle('green', openNow);\n row.title.classList.toggle('danger', !openNow);\n\n // console.log('weekly', {utcOffset, isDifferentTimezone, adaptedWeeklyOpen, workHours, localDays, myDays, localDaysFormatted, myDaysFormatted, showInMyTimezone, isOpen: openNow});\n\n row.subtitleRight.textContent = is24x7 ? I18n.format('BusinessHoursProfileFullOpen', true) : daysFormattedToUse[0][0];\n\n if(is24x7) {\n return;\n }\n\n const weekDays = rotateArray(getWeekDays(), nowWeekday);\n const key = daysFormattedToUse.map((day) => day.join('')).join('');\n if(untrack(lastKey) === key) {\n return;\n }\n\n const textLines: string[] = [];\n\n setLastKey(key);\n const rows = daysFormattedToUse.map((day, i) => {\n const weekDay = weekDays[i];\n\n let textLine = weekDay + ': ';\n const textPeriods: string[] = day;\n\n if(i === 0) {\n day = day.slice(1);\n }\n\n const ret = ({(period, idx) => {\n return (\n
\n
{i !== 0 && idx() === 0 ? weekDay : ''}
\n
{period}
\n
\n );\n }}
);\n\n textLine += textPeriods.join(', ');\n textLines.push(textLine);\n\n return ret;\n });\n\n setText(rotateArray(textLines, -nowWeekday).join('\\n'));\n\n setElement(\n
\n {rows}\n
\n );\n };\n\n createEffect(update);\n\n row.container.classList.add('business-hours-container');\n\n \n \n {element()}\n \n \n\n return row;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Photo} from '../layer';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport ListLoader, {ListLoaderOptions} from './listLoader';\n\nexport default class AvatarListLoader extends ListLoader {\n private peerId: PeerId;\n private managers: AppManagers;\n\n constructor(options: Omit, 'loadMore'> & {peerId: PeerId, managers: AppManagers}) {\n super({\n ...options,\n loadMore: (anchor, older, loadCount) => {\n if(this.peerId.isAnyChat() || !older) return Promise.resolve({count: 0, items: []}); // ! это значит, что открыло аватар чата, но следующих фотографий нет.\n\n const maxId = anchor?.photoId;\n return this.managers.appPhotosManager.getUserPhotos(this.peerId, maxId, loadCount).then((value) => {\n const items = value.photos.map((photoId) => {\n return {element: null as HTMLElement, photoId} as any;\n });\n\n return {count: value.count, items};\n });\n }\n });\n\n this.loadedAllUp = true;\n this.peerId = options.peerId;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function fillPropertyValue(str: string) {\n const splitted = str.split(' ');\n if(splitted.length !== 4) {\n if(!splitted[0]) splitted[0] = '0px';\n for(let i = splitted.length; i < 4; ++i) {\n splitted[i] = splitted[i % 2] || splitted[0] || '0px';\n }\n }\n\n return splitted;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// generate a path's arc data parameter\n\nimport {MOUNT_CLASS_TO} from '../config/debug';\n\n// http://www.w3.org/TR/SVG/paths.html#PathDataEllipticalArcCommands\nfunction arcParameter(rx: number, ry: number, xAxisRotation: number, largeArcFlag: number, sweepFlag: number, x: number, y: number) {\n return [rx, ',', ry, ' ',\n xAxisRotation, ' ',\n largeArcFlag, ',',\n sweepFlag, ' ',\n x, ',', y].join('');\n}\n\nexport default function generatePathData(x: number, y: number, width: number, height: number, tl: number, tr: number, br: number, bl: number) {\n const data: string[] = [];\n\n // start point in top-middle of the rectangle\n data.push('M' + (x + width / 2) + ',' + y);\n\n // next we go to the right\n data.push('H' + (x + width - tr));\n\n if(tr > 0) {\n // now we draw the arc in the top-right corner\n data.push('A' + arcParameter(tr, tr, 0, 0, 1, (x + width), (y + tr)));\n }\n\n // next we go down\n data.push('V' + (y + height - br));\n\n if(br > 0) {\n // now we draw the arc in the lower-right corner\n data.push('A' + arcParameter(br, br, 0, 0, 1, (x + width - br), (y + height)));\n }\n\n // now we go to the left\n data.push('H' + (x + bl));\n\n if(bl > 0) {\n // now we draw the arc in the lower-left corner\n data.push('A' + arcParameter(bl, bl, 0, 0, 1, (x + 0), (y + height - bl)));\n }\n\n // next we go up\n data.push('V' + (y + tl));\n\n if(tl > 0) {\n // now we draw the arc in the top-left corner\n data.push('A' + arcParameter(tl, tl, 0, 0, 1, (x + tl), (y + 0)));\n }\n\n // and we close the path\n data.push('Z');\n\n return data.join(' ');\n}\n\nMOUNT_CLASS_TO.generatePathData = generatePathData;\n","export default function isBetween(num: number, min: number, max: number) {\n return num >= min && num <= max;\n}\n","import {IS_SAFARI} from '../../environment/userAgent';\nimport {InputGroupCall} from '../../layer';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\n\nexport function getRtmpStreamUrl(call: InputGroupCall): string {\n const base = `/rtmp/${encodeURIComponent(JSON.stringify(call))}`;\n\n if(IS_SAFARI) return `${base}?hls=playlist&t=${Date.now()}`;\n return `${base}?t=${Date.now()}`;\n}\n\nexport function getRtmpShareUrl(peerId: PeerId) {\n const chat = apiManagerProxy.getChat(peerId);\n if(chat._ !== 'channel') throw new Error('Not a channel');\n\n if(chat.username || chat.usernames?.length) {\n const username = chat.username || chat.usernames[0];\n return `https://t.me/${username}?livestream`;\n }\n\n return `https://t.me/c/${chat.id}?livestream`;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\n// * zoom part from WebZ\n// * https://github.com/Ajaxy/telegram-tt/blob/069f4f5b2f2c7c22529ccced876842e7f9cb81f4/src/components/mediaViewer/MediaViewerSlides.tsx\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport type {MyPhoto} from '../lib/appManagers/appPhotosManager';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport mediaSizes from '../helpers/mediaSizes';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport {IS_MOBILE, IS_MOBILE_SAFARI, IS_SAFARI} from '../environment/userAgent';\nimport {logger} from '../lib/logger';\nimport VideoPlayer from '../lib/mediaPlayer';\nimport rootScope from '../lib/rootScope';\nimport animationIntersector from './animationIntersector';\nimport appMediaPlaybackController, {AppMediaPlaybackController} from './appMediaPlaybackController';\nimport ButtonIcon from './buttonIcon';\nimport {ButtonMenuItemOptions} from './buttonMenu';\nimport ButtonMenuToggle from './buttonMenuToggle';\nimport ProgressivePreloader from './preloader';\nimport SwipeHandler, {ZoomDetails} from './swipeHandler';\nimport {formatFullSentTime} from '../helpers/date';\nimport appNavigationController, {NavigationItem} from './appNavigationController';\nimport {InputGroupCall, Message, PhotoSize} from '../layer';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport renderImageFromUrl, {renderImageFromUrlPromise} from '../helpers/dom/renderImageFromUrl';\nimport getVisibleRect from '../helpers/dom/getVisibleRect';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport fillPropertyValue from '../helpers/fillPropertyValue';\nimport generatePathData from '../helpers/generatePathData';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport {doubleRaf, fastRaf} from '../helpers/schedulers';\nimport RangeSelector from './rangeSelector';\nimport windowSize from '../helpers/windowSize';\nimport ListLoader from '../helpers/listLoader';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport {MyMessage} from '../lib/appManagers/appMessagesManager';\nimport {NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport {isFullScreen} from '../helpers/dom/fullScreen';\nimport {attachClickEvent, hasMouseMovedSinceDown} from '../helpers/dom/clickEvent';\nimport SearchListLoader from '../helpers/searchListLoader';\nimport createVideo from '../helpers/dom/createVideo';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getMediaThumbIfNeeded from '../helpers/getStrippedThumbIfNeeded';\nimport setAttachmentSize from '../helpers/setAttachmentSize';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport LazyLoadQueueBase from './lazyLoadQueueBase';\nimport overlayCounter from '../helpers/overlayCounter';\nimport appDownloadManager from '../lib/appManagers/appDownloadManager';\nimport wrapPeerTitle from './wrappers/peerTitle';\nimport {toastNew} from './toast';\nimport clamp from '../helpers/number/clamp';\nimport debounce from '../helpers/schedulers/debounce';\nimport isBetween from '../helpers/number/isBetween';\nimport findUpAsChild from '../helpers/dom/findUpAsChild';\nimport liteMode from '../helpers/liteMode';\nimport {avatarNew, findUpAvatar} from './avatarNew';\nimport {MiddlewareHelper, getMiddleware} from '../helpers/middleware';\nimport onMediaLoad, {shouldIgnoreVideoError} from '../helpers/onMediaLoad';\nimport handleVideoLeak from '../helpers/dom/handleVideoLeak';\nimport Icon from './icon';\nimport {replaceButtonIcon} from './button';\nimport setCurrentTime from '../helpers/dom/setCurrentTime';\nimport {MediaSize} from '../helpers/mediaSize';\nimport {getRtmpStreamUrl} from '../lib/rtmp/url';\nimport boxBlurCanvasRGB from '../vendor/fastBlur';\nimport {i18n} from '../lib/langPack';\n\nconst ZOOM_STEP = 0.5;\nconst ZOOM_INITIAL_VALUE = 1;\nconst ZOOM_MIN_VALUE = 0.5;\nconst ZOOM_MAX_VALUE = 4;\n\nconst OPEN_TRANSITION_TIME = 200;\nconst MOVE_TRANSITION_TIME = 350;\n\nexport const MEDIA_VIEWER_CLASSNAME = 'media-viewer';\n\ntype Transform = {\n x: number;\n y: number;\n scale: number;\n};\n\nexport default class AppMediaViewerBase<\n ContentAdditionType extends string,\n ButtonsAdditionType extends string,\n TargetType extends {element: HTMLElement\n}> extends EventListenerBase<{\n setMoverBefore: () => void,\n setMoverAfter: () => void\n}> {\n protected wholeDiv: HTMLElement;\n protected overlaysDiv: HTMLElement;\n protected author: {\n avatarEl: ReturnType,\n avatarMiddlewareHelper?: MiddlewareHelper,\n container: HTMLElement,\n nameEl: HTMLElement,\n date: HTMLElement\n } = {} as any;\n protected content: {[k in 'main' | 'container' | 'media' | 'mover' | ContentAdditionType]: HTMLElement} = {} as any;\n protected buttons: {[k in 'download' | 'close' | 'prev' | 'next' | 'mobile-close' | 'zoomin' | ButtonsAdditionType]: HTMLElement} = {} as any;\n protected topbar: HTMLElement;\n protected moversContainer: HTMLElement;\n\n protected tempId = 0;\n protected preloader: ProgressivePreloader = null;\n protected preloaderStreamable: ProgressivePreloader = null;\n\n protected log: ReturnType;\n\n protected isFirstOpen = true;\n\n // protected pageEl = document.getElementById('page-chats') as HTMLDivElement;\n\n protected setMoverPromise: Promise;\n protected setMoverAnimationPromise: Promise;\n\n protected lazyLoadQueue: LazyLoadQueueBase;\n\n protected highlightSwitchersTimeout: number;\n\n protected streamEnded: boolean = false;\n\n protected onDownloadClick: (e: MouseEvent) => void;\n protected onPrevClick: (target: TargetType) => void;\n protected onNextClick: (target: TargetType) => void;\n\n protected disposeSolid?: () => void;\n\n protected videoPlayer: VideoPlayer;\n protected adminPanel: HTMLDivElement;\n\n protected zoomElements: {\n container: HTMLElement,\n btnOut: HTMLElement,\n btnIn: HTMLElement,\n rangeSelector: RangeSelector\n } = {} as any;\n protected transform: Transform = {x: 0, y: 0, scale: ZOOM_INITIAL_VALUE};\n protected isZooming: boolean;\n protected isGesturingNow: boolean;\n protected isZoomingNow: boolean;\n protected draggingType: 'wheel' | 'touchmove' | 'mousemove';\n protected initialContentRect: DOMRect;\n protected live: boolean;\n\n protected ctrlKeyDown: boolean;\n protected releaseSingleMedia: ReturnType;\n protected navigationItem: NavigationItem;\n\n protected managers: AppManagers;\n protected swipeHandler: SwipeHandler;\n protected closing: boolean;\n\n protected lastTransform: Transform = this.transform;\n protected lastZoomCenter: {x: number, y: number} = this.transform;\n protected lastDragOffset: {x: number, y: number} = this.transform;\n protected lastDragDelta: {x: number, y: number} = this.transform;\n protected lastGestureTime: number;\n protected clampZoomDebounced: ReturnType void>>;\n protected ignoreNextClick: boolean;\n\n protected middlewareHelper: MiddlewareHelper;\n\n protected overlayActive: boolean;\n\n get target() {\n return this.listLoader.current;\n }\n\n set target(value) {\n this.listLoader.current = value;\n }\n\n constructor(\n protected listLoader: ListLoader,\n topButtons: Array['buttons']>,\n protected extraHeightPadding = 0\n ) {\n super(false);\n\n this.managers = rootScope.managers;\n this.middlewareHelper = getMiddleware();\n\n this.log = logger('AMV');\n this.preloader = new ProgressivePreloader();\n this.preloaderStreamable = new ProgressivePreloader({\n cancelable: false,\n streamable: true\n });\n this.preloader.construct();\n this.preloaderStreamable.construct();\n this.lazyLoadQueue = new LazyLoadQueueBase();\n\n this.wholeDiv = document.createElement('div');\n this.wholeDiv.classList.add(MEDIA_VIEWER_CLASSNAME + '-whole');\n\n this.overlaysDiv = document.createElement('div');\n this.overlaysDiv.classList.add('overlays');\n this.overlayActive = false;\n\n const mainDiv = document.createElement('div');\n mainDiv.classList.add(MEDIA_VIEWER_CLASSNAME);\n\n const topbar = this.topbar = document.createElement('div');\n topbar.classList.add(MEDIA_VIEWER_CLASSNAME + '-topbar', MEDIA_VIEWER_CLASSNAME + '-appear');\n\n const topbarLeft = document.createElement('div');\n topbarLeft.classList.add(MEDIA_VIEWER_CLASSNAME + '-topbar-left');\n\n this.buttons['mobile-close'] = ButtonIcon('close', {onlyMobile: true});\n\n // * author\n this.author.container = document.createElement('div');\n this.author.container.classList.add(MEDIA_VIEWER_CLASSNAME + '-author', 'no-select');\n const authorRight = document.createElement('div');\n authorRight.classList.add(MEDIA_VIEWER_CLASSNAME + '-author-right');\n\n this.author.nameEl = document.createElement('div');\n this.author.nameEl.classList.add(MEDIA_VIEWER_CLASSNAME + '-name');\n\n this.author.date = document.createElement('div');\n this.author.date.classList.add(MEDIA_VIEWER_CLASSNAME + '-date');\n\n authorRight.append(this.author.nameEl, this.author.date);\n\n this.author.container.append(authorRight);\n\n // * buttons\n const buttonsDiv = document.createElement('div');\n buttonsDiv.classList.add(MEDIA_VIEWER_CLASSNAME + '-buttons');\n\n topButtons.concat(['download', 'zoomin', 'close']).forEach((name) => {\n const button = ButtonIcon(name as Icon, {noRipple: true});\n this.buttons[name] = button;\n buttonsDiv.append(button);\n });\n\n // * zoom\n this.zoomElements.container = document.createElement('div');\n this.zoomElements.container.classList.add('zoom-container');\n\n this.zoomElements.btnOut = ButtonIcon('zoomout', {noRipple: true});\n attachClickEvent(this.zoomElements.btnOut, () => this.addZoomStep(false));\n this.zoomElements.btnIn = ButtonIcon('zoomin', {noRipple: true});\n attachClickEvent(this.zoomElements.btnIn, () => this.addZoomStep(true));\n\n this.zoomElements.rangeSelector = new RangeSelector({\n step: 0.01,\n min: ZOOM_MIN_VALUE,\n max: ZOOM_MAX_VALUE,\n withTransition: true\n }, ZOOM_INITIAL_VALUE);\n this.zoomElements.rangeSelector.setListeners();\n this.zoomElements.rangeSelector.setHandlers({\n onScrub: (value) => {\n const add = value - this.transform.scale;\n this.addZoom(add);\n this.clampZoomDebounced?.clearTimeout();\n },\n onMouseDown: () => {\n this.onSwipeFirst();\n },\n onMouseUp: () => {\n this.onSwipeReset();\n }\n });\n\n this.zoomElements.container.append(this.zoomElements.btnOut, this.zoomElements.rangeSelector.container, this.zoomElements.btnIn);\n\n if(!IS_TOUCH_SUPPORTED) {\n this.wholeDiv.append(this.zoomElements.container);\n }\n\n // * content\n this.content.main = document.createElement('div');\n this.content.main.classList.add(MEDIA_VIEWER_CLASSNAME + '-content');\n\n this.content.container = document.createElement('div');\n this.content.container.classList.add(MEDIA_VIEWER_CLASSNAME + '-container');\n\n this.content.media = document.createElement('div');\n this.content.media.classList.add(MEDIA_VIEWER_CLASSNAME + '-media');\n\n this.content.container.append(this.content.media);\n\n this.content.main.append(this.content.container);\n mainDiv.append(this.content.main);\n this.overlaysDiv.append(mainDiv);\n // * overlays end\n\n topbarLeft.append(this.buttons['mobile-close'], this.author.container);\n topbar.append(topbarLeft, buttonsDiv);\n\n this.buttons.prev = document.createElement('div');\n this.buttons.prev.className = `${MEDIA_VIEWER_CLASSNAME}-switcher ${MEDIA_VIEWER_CLASSNAME}-switcher-left`;\n this.buttons.prev.append(Icon('previous', `${MEDIA_VIEWER_CLASSNAME}-sibling-button`, `${MEDIA_VIEWER_CLASSNAME}-prev-button`));\n\n this.buttons.next = document.createElement('div');\n this.buttons.next.className = `${MEDIA_VIEWER_CLASSNAME}-switcher ${MEDIA_VIEWER_CLASSNAME}-switcher-right`;\n this.buttons.next.append(Icon('next', `${MEDIA_VIEWER_CLASSNAME}-sibling-button`, `${MEDIA_VIEWER_CLASSNAME}-next-button`));\n\n this.moversContainer = document.createElement('div');\n this.moversContainer.classList.add(MEDIA_VIEWER_CLASSNAME + '-movers');\n\n this.moversContainer.append(this.buttons.prev, this.buttons.next);\n\n this.wholeDiv.append(this.overlaysDiv, /* this.buttons.prev, this.buttons.next, */ this.topbar, this.moversContainer);\n\n // * constructing html end\n\n this.listLoader.onLoadedMore = () => {\n this.buttons.prev.classList.toggle('hide', !this.listLoader.previous.length);\n this.buttons.next.classList.toggle('hide', !this.listLoader.next.length);\n };\n\n this.setNewMover();\n }\n\n protected setListeners() {\n attachClickEvent(this.buttons.download, this.onDownloadClick);\n [this.buttons.close, this.buttons['mobile-close'], this.preloaderStreamable.preloader].forEach((el) => {\n attachClickEvent(el, this.close.bind(this));\n });\n\n ([[-1, this.buttons.prev], [1, this.buttons.next]] as [number, HTMLElement][]).forEach(([moveLength, button]) => {\n // attachClickEvent(button, (e) => {\n button.addEventListener('click', (e) => {\n cancelEvent(e);\n if(this.setMoverPromise) return;\n\n this.listLoader.go(moveLength);\n });\n });\n\n attachClickEvent(this.buttons.zoomin, () => {\n if(this.isZooming) this.resetZoom();\n else {\n this.addZoomStep(true);\n }\n });\n\n // ! cannot use the function because it'll cancel slide event on touch devices\n // attachClickEvent(this.wholeDiv, this.onClick);\n this.wholeDiv.addEventListener('click', this.onClick);\n\n this.listLoader.onJump = (item, older) => {\n if(older) this.onNextClick(item);\n else this.onPrevClick(item);\n };\n\n const adjustPosition = (xDiff: number, yDiff: number) => {\n const [x, y] = [xDiff - this.lastDragOffset.x, yDiff - this.lastDragOffset.y];\n const [transform, inBoundsX, inBoundsY] = this.calculateOffsetBoundaries({\n x: this.transform.x + x,\n y: this.transform.y + y,\n scale: this.transform.scale\n });\n\n this.lastDragDelta = {\n x,\n y\n };\n\n this.lastDragOffset = {\n x: xDiff,\n y: yDiff\n };\n\n this.setTransform(transform);\n\n return {inBoundsX, inBoundsY};\n };\n\n const setLastGestureTime = debounce(() => {\n this.lastGestureTime = Date.now();\n }, 500, false, true);\n\n this.clampZoomDebounced = debounce(() => {\n this.onSwipeReset();\n }, 300, false, true);\n\n this.swipeHandler = new SwipeHandler({\n element: this.wholeDiv,\n onReset: this.onSwipeReset,\n onFirstSwipe: this.onSwipeFirst as any,\n onSwipe: (xDiff, yDiff, e, cancelDrag) => {\n if(isFullScreen()) {\n return;\n }\n\n if(this.isZooming && !this.isZoomingNow) {\n setLastGestureTime();\n\n this.draggingType = e.type as any;\n const {inBoundsX, inBoundsY} = adjustPosition(xDiff, yDiff);\n cancelDrag?.(!inBoundsX, !inBoundsY);\n\n return;\n }\n\n if(this.isZoomingNow || !IS_TOUCH_SUPPORTED) {\n return;\n }\n\n const percents = Math.abs(xDiff) / windowSize.width;\n if(percents > .2 || Math.abs(xDiff) > 125) {\n if(xDiff > 0) {\n this.buttons.prev.click();\n } else {\n this.buttons.next.click();\n }\n\n return true;\n }\n\n const percentsY = Math.abs(yDiff) / windowSize.height;\n if(percentsY > .2 || Math.abs(yDiff) > 125) {\n this.close();\n return true;\n }\n\n return false;\n },\n onZoom: this.onZoom,\n onDoubleClick: ({centerX, centerY}) => {\n if(this.isZooming) {\n this.resetZoom();\n } else {\n const scale = ZOOM_INITIAL_VALUE + 2;\n this.changeZoomByPosition(centerX, centerY, scale);\n }\n },\n verifyTouchTarget: (e) => {\n // * Fix for seek input\n if(isFullScreen() ||\n findUpAsChild(e.target as HTMLElement, this.zoomElements.container) ||\n findUpClassName(e.target, 'ckin__controls') ||\n findUpClassName(e.target, 'media-viewer-caption') ||\n (findUpClassName(e.target, 'media-viewer-topbar') && e.type !== 'wheel')) {\n return false;\n }\n\n return true;\n },\n cursor: ''\n // cursor: 'move'\n });\n }\n\n protected onSwipeFirst = (e?: MouseEvent | TouchEvent | WheelEvent) => {\n this.lastDragOffset = this.lastDragDelta = {x: 0, y: 0};\n this.lastTransform = {...this.transform};\n if(e?.type !== 'wheel' || !this.ctrlKeyDown) { // keep transition for real mouse wheel\n this.moversContainer.classList.add('no-transition');\n this.zoomElements.rangeSelector.container.classList.remove('with-transition');\n }\n this.isGesturingNow = true;\n this.lastGestureTime = Date.now();\n this.clampZoomDebounced.clearTimeout();\n\n if(!this.lastTransform.x && !this.lastTransform.y && !this.isZooming) {\n this.initialContentRect = this.content.media.getBoundingClientRect();\n }\n };\n\n protected onSwipeReset = (e?: Event) => {\n // move\n this.moversContainer.classList.remove('no-transition');\n this.zoomElements.rangeSelector.container.classList.add('with-transition');\n this.clampZoomDebounced.clearTimeout();\n\n if(e?.type === 'mouseup' && this.draggingType === 'mousemove') {\n this.ignoreNextClick = true;\n }\n\n const {draggingType} = this;\n this.isZoomingNow = false;\n this.isGesturingNow = false;\n this.draggingType = undefined;\n\n if(this.closing) {\n return;\n }\n\n if(this.transform.scale > ZOOM_INITIAL_VALUE) {\n // Get current content boundaries\n const s1 = Math.min(this.transform.scale, ZOOM_MAX_VALUE);\n const scaleFactor = s1 / this.transform.scale;\n\n // Calculate new position based on the last zoom center to keep the zoom center\n // at the same position when bouncing back from max zoom\n let x1 = this.transform.x * scaleFactor + (this.lastZoomCenter.x - scaleFactor * this.lastZoomCenter.x);\n let y1 = this.transform.y * scaleFactor + (this.lastZoomCenter.y - scaleFactor * this.lastZoomCenter.y);\n\n // If scale didn't change, we need to add inertia to pan gesture\n if(draggingType && draggingType !== 'wheel' && this.lastTransform.scale === this.transform.scale) {\n // Arbitrary pan velocity coefficient\n const k = 0.1;\n\n // Calculate user gesture velocity\n const elapsedTime = Math.max(1, Date.now() - this.lastGestureTime);\n const Vx = Math.abs(this.lastDragOffset.x) / elapsedTime;\n const Vy = Math.abs(this.lastDragOffset.y) / elapsedTime;\n\n // Add extra distance based on gesture velocity and last pan delta\n x1 -= Math.abs(this.lastDragOffset.x) * Vx * k * -this.lastDragDelta.x;\n y1 -= Math.abs(this.lastDragOffset.y) * Vy * k * -this.lastDragDelta.y;\n }\n\n const [transform] = this.calculateOffsetBoundaries({x: x1, y: y1, scale: s1});\n this.lastTransform = transform;\n this.setTransform(transform);\n } else if(this.transform.scale < ZOOM_INITIAL_VALUE) {\n this.resetZoom();\n }\n };\n\n protected onZoom = ({\n initialCenterX,\n initialCenterY,\n zoom,\n zoomAdd,\n currentCenterX,\n currentCenterY,\n dragOffsetX,\n dragOffsetY,\n zoomFactor\n }: ZoomDetails) => {\n initialCenterX ||= windowSize.width / 2;\n initialCenterY ||= windowSize.height / 2;\n currentCenterX ||= windowSize.width / 2;\n currentCenterY ||= windowSize.height / 2;\n\n this.isZoomingNow = true;\n\n const zoomMaxBounceValue = ZOOM_MAX_VALUE * 3;\n const scale = zoomAdd !== undefined ? clamp(this.lastTransform.scale + zoomAdd, ZOOM_MIN_VALUE, zoomMaxBounceValue) : (zoom ?? clamp(this.lastTransform.scale * zoomFactor, ZOOM_MIN_VALUE, zoomMaxBounceValue));\n const scaleFactor = scale / this.lastTransform.scale;\n const offsetX = Math.abs(Math.min(this.lastTransform.x, 0));\n const offsetY = Math.abs(Math.min(this.lastTransform.y, 0));\n\n // Save last zoom center for bounce back effect\n this.lastZoomCenter = {\n x: currentCenterX,\n y: currentCenterY\n };\n\n // Calculate new center relative to the shifted image\n const scaledCenterX = offsetX + initialCenterX;\n const scaledCenterY = offsetY + initialCenterY;\n\n const {scaleOffsetX, scaleOffsetY} = this.calculateScaleOffset({x: scaledCenterX, y: scaledCenterY, scale: scaleFactor});\n\n const [transform] = this.calculateOffsetBoundaries({\n x: this.lastTransform.x + scaleOffsetX + dragOffsetX,\n y: this.lastTransform.y + scaleOffsetY + dragOffsetY,\n scale\n });\n\n this.setTransform(transform);\n };\n\n protected changeZoomByPosition(x: number, y: number, scale: number) {\n const {scaleOffsetX, scaleOffsetY} = this.calculateScaleOffset({x, y, scale});\n const transform = this.calculateOffsetBoundaries({\n x: scaleOffsetX,\n y: scaleOffsetY,\n scale\n })[0];\n\n this.setTransform(transform);\n }\n\n protected setTransform(transform: Transform) {\n this.transform = transform;\n this.changeZoom(transform.scale);\n }\n\n // Calculate how much we need to shift the image to keep the zoom center at the same position\n protected calculateScaleOffset({x, y, scale}: {\n x: number,\n y: number,\n scale: number\n }) {\n return {\n scaleOffsetX: x - scale * x,\n scaleOffsetY: y - scale * y\n };\n }\n\n protected toggleZoom(enable?: boolean) {\n const isVisible = this.isZooming;\n const auto = enable === undefined;\n if(this.zoomElements.rangeSelector.mousedown || this.ctrlKeyDown) {\n enable = true;\n }\n\n enable ??= !isVisible;\n\n if(isVisible === enable) {\n return;\n }\n\n replaceButtonIcon(this.buttons.zoomin, !enable ? 'zoomin' : 'zoomout');\n this.zoomElements.container.classList.toggle('is-visible', this.isZooming = enable);\n this.wholeDiv.classList.toggle('is-zooming', enable);\n\n if(auto || !enable) {\n const zoomValue = enable ? this.transform.scale : ZOOM_INITIAL_VALUE;\n this.setZoomValue(zoomValue);\n this.zoomElements.rangeSelector.setProgress(zoomValue);\n }\n\n if(this.videoPlayer) {\n this.videoPlayer.lockControls(enable ? false : undefined);\n }\n }\n\n protected addZoomStep(add: boolean) {\n this.addZoom(ZOOM_STEP * (add ? 1 : -1));\n }\n\n protected resetZoom() {\n this.setTransform({\n x: 0,\n y: 0,\n scale: ZOOM_INITIAL_VALUE\n });\n }\n\n protected changeZoom(value = this.transform.scale) {\n this.transform.scale = value;\n this.zoomElements.rangeSelector.setProgress(value);\n this.setZoomValue(value);\n }\n\n protected addZoom(value: number) {\n this.lastTransform = this.transform;\n this.onZoom({\n zoomAdd: value,\n currentCenterX: 0,\n currentCenterY: 0,\n initialCenterX: 0,\n initialCenterY: 0,\n dragOffsetX: 0,\n dragOffsetY: 0\n });\n this.lastTransform = this.transform;\n this.clampZoomDebounced();\n }\n\n protected getZoomBounce() {\n return this.isGesturingNow && IS_TOUCH_SUPPORTED ? 50 : 0;\n }\n\n protected calculateOffsetBoundaries = (\n {x, y, scale}: Transform,\n offsetTop = 0\n ): [Transform, boolean, boolean] => {\n if(!this.initialContentRect) return [{x, y, scale}, true, true];\n // Get current content boundaries\n let inBoundsX = true;\n let inBoundsY = true;\n\n const {minX, maxX, minY, maxY} = this.getZoomBoundaries(scale, offsetTop);\n\n inBoundsX = isBetween(x, maxX, minX);\n x = clamp(x, maxX, minX);\n\n inBoundsY = isBetween(y, maxY, minY);\n y = clamp(y, maxY, minY);\n\n return [{x, y, scale}, inBoundsX, inBoundsY];\n };\n\n protected getZoomBoundaries(scale = this.transform.scale, offsetTop = 0) {\n if(!this.initialContentRect) {\n return {minX: 0, maxX: 0, minY: 0, maxY: 0};\n }\n\n const centerX = (windowSize.width - windowSize.width * scale) / 2;\n const centerY = (windowSize.height - windowSize.height * scale) / 2;\n\n // If content is outside window we calculate offset boundaries\n // based on initial content rect and current scale\n const minX = Math.max(-this.initialContentRect.left * scale, centerX);\n const maxX = windowSize.width - this.initialContentRect.right * scale;\n\n const minY = Math.max(-this.initialContentRect.top * scale + offsetTop, centerY);\n const maxY = windowSize.height - this.initialContentRect.bottom * scale;\n\n return {minX, maxX, minY, maxY};\n }\n\n protected setZoomValue = (value = this.transform.scale) => {\n this.initialContentRect ??= this.content.media.getBoundingClientRect();\n\n // this.zoomValue = value;\n if(value === ZOOM_INITIAL_VALUE) {\n this.transform.x = 0;\n this.transform.y = 0;\n }\n\n this.moversContainer.style.transform = `translate3d(${this.transform.x.toFixed(3)}px, ${this.transform.y.toFixed(3)}px, 0px) scale(${value.toFixed(3)})`;\n\n this.zoomElements.btnOut.classList.toggle('inactive', value <= ZOOM_MIN_VALUE);\n this.zoomElements.btnIn.classList.toggle('inactive', value >= ZOOM_MAX_VALUE);\n\n this.toggleZoom(value !== ZOOM_INITIAL_VALUE);\n };\n\n protected setBtnMenuToggle(buttons: ButtonMenuItemOptions[]) {\n const btnMenuToggle = ButtonMenuToggle({buttonOptions: {onlyMobile: true}, direction: 'bottom-left', buttons});\n this.topbar.append(btnMenuToggle);\n }\n\n public close(e?: MouseEvent) {\n this.disposeSolid?.();\n\n if(e) {\n cancelEvent(e);\n }\n\n if(this.closing) {\n return this.setMoverAnimationPromise;\n }\n\n if(this.setMoverAnimationPromise) return Promise.reject();\n\n this.closing = true;\n this.swipeHandler?.removeListeners();\n\n if(this.navigationItem) {\n appNavigationController.removeItem(this.navigationItem);\n }\n\n this.lazyLoadQueue.clear();\n this.author.avatarMiddlewareHelper?.destroy();\n\n const promise = this.setMoverToTarget(this.target?.element, true).then(({onAnimationEnd}) => onAnimationEnd);\n\n this.listLoader.reset();\n (this.listLoader as SearchListLoader).cleanup && (this.listLoader as SearchListLoader).cleanup();\n this.setMoverPromise = null;\n this.tempId = -1;\n if((window as any).appMediaViewer === this) {\n (window as any).appMediaViewer = undefined;\n }\n\n /* if(appSidebarRight.historyTabIDs.slice(-1)[0] === AppSidebarRight.SLIDERITEMSIDS.forward) {\n promise.then(() => {\n appSidebarRight.forwardTab.closeBtn.click();\n });\n } */\n\n this.removeGlobalListeners();\n\n promise.finally(() => {\n this.wholeDiv.remove();\n this.toggleOverlay(false);\n this.middlewareHelper.destroy();\n });\n\n return promise;\n }\n\n protected toggleOverlay(active: boolean) {\n if(this.overlayActive === active) {\n return;\n }\n\n this.overlayActive = active;\n overlayCounter.isDarkOverlayActive = active;\n animationIntersector.checkAnimations2(active);\n }\n\n protected toggleGlobalListeners(active: boolean) {\n if(active) this.setGlobalListeners();\n else this.removeGlobalListeners();\n }\n\n protected removeGlobalListeners() {\n window.removeEventListener('keydown', this.onKeyDown);\n window.removeEventListener('keyup', this.onKeyUp);\n }\n\n protected setGlobalListeners() {\n window.addEventListener('keydown', this.onKeyDown);\n window.addEventListener('keyup', this.onKeyUp);\n }\n\n public setMediaTimestamp(timestamp: number) {\n this.videoPlayer?.setTimestamp(timestamp);\n }\n\n onClick = (e: MouseEvent) => {\n const target = e.target as HTMLElement;\n if(findUpClassName(target, 'popup')) { // target could be inside a popup\n return;\n }\n\n if(this.ignoreNextClick) {\n this.ignoreNextClick = undefined;\n return;\n }\n\n if(this.setMoverAnimationPromise) return;\n\n if(target.tagName === 'A') return;\n if(!findUpClassName(target, 'admin-popup-container')) {\n cancelEvent(e);\n }\n\n if(IS_TOUCH_SUPPORTED) {\n if(this.highlightSwitchersTimeout) {\n clearTimeout(this.highlightSwitchersTimeout);\n } else {\n this.wholeDiv.classList.add('highlight-switchers');\n }\n\n this.highlightSwitchersTimeout = window.setTimeout(() => {\n this.wholeDiv.classList.remove('highlight-switchers');\n this.highlightSwitchersTimeout = 0;\n }, 3e3);\n\n return;\n }\n\n if(hasMouseMovedSinceDown(e)) {\n return;\n }\n\n const isZooming = this.isZooming && false;\n const classNames = ['admin-popup-container', 'ckin__player', 'media-viewer-buttons', 'media-viewer-author', 'media-viewer-caption', 'zoom-container'];\n if(isZooming) {\n classNames.push('media-viewer-movers');\n }\n\n const hasClickedSomething = classNames.some((s) => !!findUpClassName(target, s));\n if(!hasClickedSomething && this.live && document.pictureInPictureEnabled) {\n this.videoPlayer.requestPictureInPicture();\n return;\n }\n\n if(/* target === this.mediaViewerDiv */!hasClickedSomething || (!isZooming && (target.tagName === 'IMG' || target.tagName === 'image'))) {\n this.close();\n }\n };\n\n private onKeyDown = (e: KeyboardEvent) => {\n // this.log('onKeyDown', e);\n if(overlayCounter.overlaysActive > 1) {\n return;\n }\n\n const key = e.key;\n\n let good = true;\n if(key === 'ArrowRight') {\n !this.isZooming && this.buttons.next.click();\n } else if(key === 'ArrowLeft') {\n !this.isZooming && this.buttons.prev.click();\n } else if(key === '-' || key === '=') {\n if(this.ctrlKeyDown) {\n this.addZoomStep(key === '=');\n }\n } else {\n good = false;\n }\n\n if(e.ctrlKey || e.metaKey) {\n this.ctrlKeyDown = true;\n }\n\n if(good) {\n cancelEvent(e);\n }\n };\n\n private onKeyUp = (e: KeyboardEvent) => {\n if(overlayCounter.overlaysActive > 1) {\n return;\n }\n\n if(!(e.ctrlKey || e.metaKey)) {\n this.ctrlKeyDown = false;\n\n if(this.isZooming) {\n this.setZoomValue();\n }\n }\n };\n\n protected async setMoverToTarget(target: HTMLElement, closing = false, fromRight = 0) {\n this.dispatchEvent('setMoverBefore');\n\n const mover = this.content.mover;\n\n if(!closing) {\n mover.replaceChildren();\n // mover.append(this.buttons.prev, this.buttons.next);\n }\n\n const zoomValue = this.isZooming && closing /* && false */ ? this.transform.scale : ZOOM_INITIAL_VALUE;\n /* if(!(zoomValue > 1 && closing)) */ this.removeCenterFromMover(mover);\n if(closing) {\n void mover.offsetLeft; // reflow\n await doubleRaf();\n }\n\n const wasActive = fromRight !== 0;\n\n const delay = liteMode.isAvailable('animations') ? (wasActive ? MOVE_TRANSITION_TIME : OPEN_TRANSITION_TIME) : 0;\n // let delay = wasActive ? 350 : 10000;\n\n /* if(wasActive) {\n this.moveTheMover(mover);\n mover = this.setNewMover();\n } */\n\n /* if(DEBUG) {\n this.log('setMoverToTarget', target, closing, wasActive, fromRight);\n } */\n\n let realParent: HTMLElement;\n\n let rect: DOMRect;\n if(target) {\n if(findUpAvatar(target) || target.classList.contains('grid-item')/* || target.classList.contains('document-ico') */) {\n realParent = target;\n rect = target.getBoundingClientRect();\n } else if(target instanceof SVGImageElement || target.parentElement instanceof SVGForeignObjectElement) {\n realParent = findUpClassName(target, 'attachment');\n rect = realParent.getBoundingClientRect();\n } else if(target.classList.contains('profile-avatars-avatar')) {\n realParent = findUpClassName(target, 'profile-avatars-container');\n rect = realParent.getBoundingClientRect();\n\n // * if not active avatar\n if(closing && target.getBoundingClientRect().left !== rect.left) {\n target = realParent = rect = undefined;\n }\n }\n }\n\n if(!target) {\n target = this.content.media;\n }\n\n if(!rect) {\n realParent = target.parentElement as HTMLElement;\n rect = target.getBoundingClientRect();\n }\n\n let needOpacity = false;\n if(target === this.content.media) {\n needOpacity = true;\n } else if(!target.classList.contains('profile-avatars-avatar')) {\n const overflowElement = findUpClassName(realParent, 'scrollable');\n const visibleRect = getVisibleRect(realParent, overflowElement, true);\n\n if(closing && visibleRect && (visibleRect.overflow.vertical === 2 || visibleRect.overflow.horizontal === 2)) {\n target = this.content.media;\n realParent = target.parentElement as HTMLElement;\n rect = target.getBoundingClientRect();\n } else if(visibleRect && (visibleRect.overflow.vertical === 1 || visibleRect.overflow.horizontal === 1)) {\n needOpacity = true;\n }\n }\n\n const containerRect = this.content.media.getBoundingClientRect();\n\n let transform = '';\n let left: number;\n let top: number;\n\n if(wasActive) {\n left = fromRight === 1 ? windowSize.width : -containerRect.width;\n top = containerRect.top;\n } else {\n left = rect.left;\n top = rect.top;\n }\n\n /* if(zoomValue > 1) { // 33\n // const diffX = (rect.width * zoomValue - rect.width) / 4;\n const diffX = (rect.width * zoomValue - rect.width) / 2;\n const diffY = (rect.height * zoomValue - rect.height) / 4;\n // left -= diffX;\n // top += diffY;\n } */\n\n transform += `translate3d(${left}px,${top}px,0) `;\n\n /* if(wasActive) {\n left = fromRight === 1 ? appPhotosManager.windowW / 2 : -(containerRect.width + appPhotosManager.windowW / 2);\n transform += `translate(${left}px,-50%) `;\n } else {\n left = rect.left - (appPhotosManager.windowW / 2);\n top = rect.top - (appPhotosManager.windowH / 2);\n transform += `translate(${left}px,${top}px) `;\n } */\n\n let aspecter: HTMLDivElement;\n if(target instanceof HTMLImageElement || target instanceof HTMLVideoElement || target.tagName === 'DIV') {\n if(mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter')) {\n aspecter = mover.firstElementChild as HTMLDivElement;\n\n const player = aspecter.querySelector('.ckin__player');\n if(player && !needOpacity) {\n const video = player.querySelector('video');\n if(video) {\n video.pause();\n player.replaceWith(video);\n }\n }\n\n if(!aspecter.style.cssText) { // всё из-за видео, элементы управления скейлятся, так бы можно было этого не делать\n mover.classList.remove('active');\n this.setFullAspect(aspecter, containerRect, rect);\n void mover.offsetLeft; // reflow\n mover.classList.add('active');\n }\n } else {\n aspecter = document.createElement('div');\n aspecter.classList.add('media-viewer-aspecter'/* , 'disable-hover' */);\n mover.prepend(aspecter);\n }\n\n aspecter.style.cssText = `width: ${rect.width}px; height: ${rect.height}px; transform: scale3d(${containerRect.width / rect.width}, ${containerRect.height / rect.height}, 1);`;\n }\n\n mover.style.width = containerRect.width + 'px';\n mover.style.height = containerRect.height + 'px';\n\n // const scaleX = rect.width / (containerRect.width * zoomValue);\n // const scaleY = rect.height / (containerRect.height * zoomValue);\n const scaleX = rect.width / containerRect.width;\n const scaleY = rect.height / containerRect.height;\n if(!wasActive) {\n transform += `scale3d(${scaleX},${scaleY},1) `;\n }\n\n let borderRadius = window.getComputedStyle(realParent).getPropertyValue('border-radius');\n const brSplitted = fillPropertyValue(borderRadius) as string[];\n borderRadius = brSplitted.map((r) => (parseInt(r) / scaleX) + 'px').join(' ');\n if(!wasActive) {\n mover.style.borderRadius = borderRadius;\n }\n // let borderRadius = '0px 0px 0px 0px';\n\n if(closing && zoomValue !== 1) {\n const left = rect.left - (windowSize.width * scaleX - rect.width) / 2;\n const top = rect.top - (windowSize.height * scaleY - rect.height) / 2;\n this.moversContainer.style.transform = `matrix(${scaleX}, 0, 0, ${scaleY}, ${left}, ${top})`;\n } else {\n mover.style.transform = transform;\n }\n\n needOpacity && (mover.style.opacity = '0'/* !closing ? '0' : '' */);\n\n /* if(wasActive) {\n this.log('setMoverToTarget', mover.style.transform);\n } */\n\n let path: SVGPathElement;\n const isOut = target.classList.contains('is-out');\n\n const deferred = this.setMoverAnimationPromise = deferredPromise();\n const ret = {onAnimationEnd: deferred};\n\n const timeout = setTimeout(() => {\n if(!deferred.isFulfilled && !deferred.isRejected) {\n deferred.resolve();\n }\n }, 1000);\n\n deferred.finally(() => {\n this.dispatchEvent('setMoverAfter');\n\n if(this.setMoverAnimationPromise === deferred) {\n this.setMoverAnimationPromise = null;\n }\n\n clearTimeout(timeout);\n });\n\n if(!closing) {\n let mediaElement: HTMLImageElement | HTMLVideoElement | HTMLCanvasElement;\n let src: string;\n\n // if(target instanceof HTMLVideoElement) {\n const selector = 'video, img, .canvas-thumbnail';\n const queryFrom = target.matches(selector) ? target.parentElement : target;\n const elements = Array.from(queryFrom.querySelectorAll(selector)) as HTMLImageElement[];\n if(elements.length) {\n target = elements.pop();\n const canvas = document.createElement('canvas');\n const context = canvas.getContext('2d');\n if(target instanceof HTMLImageElement) {\n canvas.width = target.naturalWidth;\n canvas.height = target.naturalHeight;\n } else if(target instanceof HTMLVideoElement) {\n canvas.width = target.videoWidth;\n canvas.height = target.videoHeight;\n } else if(target instanceof HTMLCanvasElement) {\n canvas.width = target.width;\n canvas.height = target.height;\n }\n\n canvas.className = 'canvas-thumbnail thumbnail media-photo';\n context.drawImage(target as HTMLImageElement | HTMLCanvasElement, 0, 0);\n if(this.live) {\n boxBlurCanvasRGB(context, 0, 0, canvas.width, canvas.height, 8, 2);\n }\n target = canvas;\n }\n // }\n\n if(target.tagName === 'DIV' || findUpAvatar(target)) { // useContainerAsTarget\n const images = Array.from(target.querySelectorAll('img')) as HTMLImageElement[];\n const image = images.pop();\n if(image) {\n mediaElement = new Image();\n src = image.src;\n mover.append(mediaElement);\n } else {\n const el = target.querySelector('.avatar[data-color]');\n if(el) {\n const el2 = el.cloneNode(true);\n el2.textContent = '';\n aspecter.append(el2);\n }\n }\n /* mediaElement = new Image();\n src = target.style.backgroundImage.slice(5, -2); */\n } else if(target instanceof HTMLImageElement) {\n mediaElement = new Image();\n src = target.src;\n } else if(target instanceof HTMLVideoElement) {\n mediaElement = createVideo({middleware: mover.middlewareHelper.get()});\n mediaElement.src = target.src;\n } else if(target instanceof SVGSVGElement) {\n const clipId = target.dataset.clipId;\n const newClipId = clipId + '-mv';\n\n const {width, height} = containerRect;\n\n const newSvg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n newSvg.setAttributeNS(null, 'width', '' + width);\n newSvg.setAttributeNS(null, 'height', '' + height);\n\n // нижние два свойства для масштабирования\n newSvg.setAttributeNS(null, 'viewBox', `0 0 ${width} ${height}`);\n newSvg.setAttributeNS(null, 'preserveAspectRatio', 'xMidYMid meet');\n\n newSvg.insertAdjacentHTML('beforeend', target.firstElementChild.outerHTML.replace(clipId, newClipId));\n newSvg.insertAdjacentHTML('beforeend', target.lastElementChild.outerHTML.replace(clipId, newClipId));\n\n // теперь надо выставить новую позицию для хвостика\n const defs = newSvg.firstElementChild;\n const use = defs.firstElementChild.firstElementChild as SVGUseElement;\n if(use instanceof SVGUseElement) {\n let transform = use.getAttributeNS(null, 'transform');\n transform = transform.replace(/translate\\((.+?), (.+?)\\) scale\\((.+?), (.+?)\\)/, (match, x, y, sX, sY) => {\n x = +x;\n if(x !== 2) {\n x = width - (2 / scaleX);\n } else {\n x = 2 / scaleX;\n }\n\n y = height;\n\n return `translate(${x}, ${y}) scale(${+sX / scaleX}, ${+sY / scaleY})`;\n });\n use.setAttributeNS(null, 'transform', transform);\n\n // и новый RECT\n path = defs.firstElementChild.lastElementChild as SVGPathElement;\n\n // код ниже нужен только чтобы скрыть моргание до момента как сработает таймаут\n let d: string;\n const br: [number, number, number, number] = borderRadius.split(' ').map((v) => parseInt(v)) as any;\n if(isOut) d = generatePathData(0, 0, width - 9 / scaleX, height, ...br);\n else d = generatePathData(9 / scaleX, 0, width - 9 / scaleX, height, ...br);\n path.setAttributeNS(null, 'd', d);\n }\n\n const foreignObject = newSvg.lastElementChild;\n foreignObject.setAttributeNS(null, 'width', '' + containerRect.width);\n foreignObject.setAttributeNS(null, 'height', '' + containerRect.height);\n\n mover.prepend(newSvg);\n } else if(target instanceof HTMLCanvasElement) {\n mediaElement = target;\n }\n\n if(aspecter) {\n aspecter.style.borderRadius = borderRadius;\n\n if(mediaElement) {\n aspecter.append(mediaElement);\n }\n }\n\n mediaElement = mover.querySelector('video, img');\n if(mediaElement instanceof HTMLImageElement) {\n mediaElement.classList.add('thumbnail');\n if(!aspecter) {\n mediaElement.style.width = containerRect.width + 'px';\n mediaElement.style.height = containerRect.height + 'px';\n }\n\n if(src) {\n await renderImageFromUrlPromise(mediaElement, src);\n }\n }/* else if(mediaElement instanceof HTMLVideoElement && mediaElement.firstElementChild && ((mediaElement.firstElementChild as HTMLSourceElement).src || src)) {\n await new Promise((resolve, reject) => {\n mediaElement.addEventListener('loadeddata', resolve);\n\n if(src) {\n (mediaElement.firstElementChild as HTMLSourceElement).src = src;\n }\n });\n } */\n\n mover.style.display = '';\n\n fastRaf(() => {\n mover.classList.add(wasActive ? 'moving' : 'active');\n });\n } else {\n /* if(mover.classList.contains('center')) {\n mover.classList.remove('center');\n void mover.offsetLeft; // reflow\n } */\n\n if(target instanceof SVGSVGElement) {\n path = mover.querySelector('path');\n\n if(path) {\n this.sizeTailPath(path, containerRect, scaleX, delay, false, isOut, borderRadius);\n }\n }\n\n this.toggleWholeActive(false);\n\n // return ret;\n\n setTimeout(() => {\n mover.style.borderRadius = borderRadius;\n\n if(mover.firstElementChild) {\n (mover.firstElementChild as HTMLElement).style.borderRadius = borderRadius;\n }\n }, delay / 2);\n\n setTimeout(() => {\n mover.replaceChildren();\n mover.classList.remove('moving', 'active', 'hiding');\n mover.style.cssText = 'display: none;';\n\n deferred.resolve();\n }, delay);\n\n mover.classList.remove('opening');\n\n return ret;\n }\n\n mover.classList.add('opening');\n\n // await new Promise((resolve) => setTimeout(resolve, 0));\n // await new Promise((resolve) => window.requestAnimationFrame(resolve));\n // * одного RAF'а недостаточно, иногда анимация с одним не срабатывает (преимущественно на мобильных)\n await doubleRaf();\n\n // чтобы проверить установленную позицию - раскомментировать\n // throw '';\n\n // await new Promise((resolve) => setTimeout(resolve, 5e3));\n\n mover.style.transform = `translate3d(${containerRect.left}px,${containerRect.top}px,0) scale3d(1,1,1)`;\n // mover.style.transform = `translate(-50%,-50%) scale(1,1)`;\n needOpacity && (mover.style.opacity = ''/* closing ? '0' : '' */);\n\n if(aspecter) {\n this.setFullAspect(aspecter, containerRect, rect);\n }\n\n // throw '';\n\n setTimeout(() => {\n mover.style.borderRadius = '';\n\n if(mover.firstElementChild) {\n (mover.firstElementChild as HTMLElement).style.borderRadius = '';\n }\n }, 0/* delay / 2 */);\n\n mover.dataset.timeout = '' + setTimeout(() => {\n mover.classList.remove('moving', 'opening');\n\n if(aspecter) { // всё из-за видео, элементы управления скейлятся, так бы можно было этого не делать\n if(mover.querySelector('video') || true) {\n mover.classList.remove('active');\n aspecter.style.cssText = '';\n void mover.offsetLeft; // reflow\n }\n\n // aspecter.classList.remove('disable-hover');\n }\n\n // эти строки нужны для установки центральной позиции, в случае ресайза это будет нужно\n mover.classList.add('center', 'no-transition');\n /* mover.style.left = mover.style.top = '50%';\n mover.style.transform = 'translate(-50%, -50%)';\n void mover.offsetLeft; // reflow */\n\n // это уже нужно для будущих анимаций\n mover.classList.add('active');\n delete mover.dataset.timeout;\n\n deferred.resolve();\n }, delay);\n\n if(path) {\n this.sizeTailPath(path, containerRect, scaleX, delay, true, isOut, borderRadius);\n }\n\n return ret;\n }\n\n protected toggleWholeActive(active: boolean) {\n if(active) {\n this.wholeDiv.classList.add('active');\n } else {\n this.wholeDiv.classList.add('backwards');\n setTimeout(() => {\n this.wholeDiv.classList.remove('active');\n }, 0);\n }\n }\n\n protected setFullAspect(aspecter: HTMLDivElement, containerRect: DOMRect, rect: DOMRect) {\n /* let media = aspecter.firstElementChild;\n let proportion: number;\n if(media instanceof HTMLImageElement) {\n proportion = media.naturalWidth / media.naturalHeight;\n } else if(media instanceof HTMLVideoElement) {\n proportion = media.videoWidth / media.videoHeight;\n } */\n const proportion = containerRect.width / containerRect.height;\n\n let {width, height} = rect;\n /* if(proportion === 1) {\n aspecter.style.cssText = '';\n } else { */\n if(proportion > 0) {\n width = height * proportion;\n } else {\n height = width * proportion;\n }\n\n // this.log('will set style aspecter:', `width: ${width}px; height: ${height}px; transform: scale(${containerRect.width / width}, ${containerRect.height / height});`);\n\n aspecter.style.cssText = `width: ${width}px; height: ${height}px; transform: scale3d(${containerRect.width / width}, ${containerRect.height / height}, 1);`;\n // }\n }\n\n protected sizeTailPath(path: SVGPathElement, rect: DOMRect, scaleX: number, delay: number, upscale: boolean, isOut: boolean, borderRadius: string) {\n const start = Date.now();\n const {width, height} = rect;\n delay = delay / 2;\n\n const br = borderRadius.split(' ').map((v) => parseInt(v));\n\n const step = () => {\n const diff = Date.now() - start;\n\n let progress = delay ? diff / delay : 1;\n if(progress > 1) progress = 1;\n if(upscale) progress = 1 - progress;\n\n const _br: [number, number, number, number] = br.map((v) => v * progress) as any;\n\n let d: string;\n if(isOut) d = generatePathData(0, 0, width - (9 / scaleX * progress), height, ..._br);\n else d = generatePathData(9 / scaleX * progress, 0, width/* width - (9 / scaleX * progress) */, height, ..._br);\n path.setAttributeNS(null, 'd', d);\n\n if(diff < delay) fastRaf(step);\n };\n\n // window.requestAnimationFrame(step);\n step();\n }\n\n protected removeCenterFromMover(mover: HTMLElement) {\n if(mover.classList.contains('center')) {\n // const rect = mover.getBoundingClientRect();\n const rect = this.content.media.getBoundingClientRect();\n mover.style.transform = `translate3d(${rect.left}px,${rect.top}px,0)`;\n mover.classList.remove('center');\n void mover.offsetLeft; // reflow\n mover.classList.remove('no-transition');\n }\n }\n\n protected moveTheMover(mover: HTMLElement, toLeft = true) {\n const windowW = windowSize.width;\n\n this.removeCenterFromMover(mover);\n\n // mover.classList.remove('active');\n mover.classList.add('moving');\n\n if(mover.dataset.timeout) { // и это тоже всё из-за скейла видео, так бы это не нужно было\n clearTimeout(+mover.dataset.timeout);\n }\n\n const rect = mover.getBoundingClientRect();\n\n const newTransform = mover.style.transform.replace(/translate3d\\((.+?),/, (match, p1) => {\n const x = toLeft ? -rect.width : windowW;\n // const x = toLeft ? -(rect.right + (rect.width / 2)) : windowW / 2;\n\n return match.replace(p1, x + 'px');\n });\n\n // //////this.log('set newTransform:', newTransform, mover.style.transform, toLeft);\n mover.style.transform = newTransform;\n\n setTimeout(() => {\n mover.middlewareHelper.destroy();\n mover.remove();\n }, 350);\n }\n\n protected setNewMover() {\n const newMover = document.createElement('div');\n newMover.classList.add('media-viewer-mover');\n newMover.style.display = 'none';\n newMover.middlewareHelper = this.middlewareHelper.get().create();\n\n if(this.content.mover) {\n const oldMover = this.content.mover;\n oldMover.parentElement.append(newMover);\n } else {\n this.moversContainer.append(newMover);\n }\n\n return this.content.mover = newMover;\n }\n\n protected updateMediaSource(target: HTMLElement, url: string, tagName: 'video' | 'img') {\n // if(target instanceof SVGSVGElement) {\n const el = target.tagName.toLowerCase() === tagName ? target : target.querySelector(tagName) as HTMLElement;\n if(el && !findUpClassName(target, 'document')) {\n if(findUpClassName(target, 'attachment')) {\n // two parentElements because element can be contained in aspecter\n const preloader = target.parentElement.parentElement.querySelector('.preloader-container') as HTMLElement;\n if(preloader) {\n if(tagName === 'video') {\n if(preloader.classList.contains('manual')) {\n preloader.click();\n // return;\n }\n\n return;\n }\n\n preloader.remove();\n }\n }\n\n if((el as HTMLImageElement).getAttribute('src') !== url) {\n renderImageFromUrl(el, url);\n }\n\n // ! костыль, но он тут даже и не нужен\n if(el.classList.contains('thumbnail') && el.parentElement.classList.contains('media-container-aspecter')) {\n el.classList.remove('thumbnail');\n }\n }\n /* } else {\n\n } */\n }\n\n protected setAuthorInfo(fromId: PeerId | string, timestamp: number) {\n const isPeerId = fromId.isPeerId();\n let wrapTitlePromise: Promise | HTMLElement;\n if(isPeerId) {\n wrapTitlePromise = wrapPeerTitle({\n peerId: fromId as PeerId,\n dialog: false,\n onlyFirstName: false,\n plainText: false\n })\n } else {\n const title = wrapTitlePromise = document.createElement('span');\n title.append(wrapEmojiText(fromId));\n title.classList.add('peer-title');\n }\n\n const oldAvatar = this.author.avatarEl;\n const oldAvatarMiddlewareHelper = this.author.avatarMiddlewareHelper;\n const newAvatar = this.author.avatarEl = avatarNew({\n middleware: (this.author.avatarMiddlewareHelper = this.middlewareHelper.get().create()).get(),\n size: 44,\n peerId: fromId as PeerId || NULL_PEER_ID,\n peerTitle: isPeerId ? undefined : '' + fromId\n });\n\n newAvatar.node.classList.add(MEDIA_VIEWER_CLASSNAME + '-userpic');\n\n return Promise.all([\n newAvatar.readyThumbPromise,\n wrapTitlePromise\n ]).then(([_, title]) => {\n replaceContent(this.author.date, this.live ? i18n('Rtmp.MediaViewer.Streaming') : formatFullSentTime(timestamp));\n replaceContent(this.author.nameEl, title);\n\n if(oldAvatar?.node && oldAvatar.node.parentElement) {\n oldAvatar.node.replaceWith(this.author.avatarEl.node);\n } else {\n this.author.container.prepend(this.author.avatarEl.node);\n }\n\n if(oldAvatar) {\n oldAvatar.node.remove();\n oldAvatarMiddlewareHelper.destroy();\n }\n });\n }\n\n protected get mediaBoxSize(): MediaSize {\n const {width, height} = windowSize;\n return new MediaSize(\n width,\n height - 120 - (mediaSizes.isMobile || this.live ? 0 : 120) - this.extraHeightPadding\n );\n }\n\n protected async _openMedia({\n media,\n mediaThumbnail,\n timestamp,\n fromId,\n fromRight,\n target,\n reverse = false,\n prevTargets = [],\n nextTargets = [],\n message,\n mediaTimestamp,\n setupPlayer,\n onCanPlay,\n onMoverSet,\n onBuffering,\n noAuthor\n }: {\n media: MyDocument | MyPhoto | InputGroupCall,\n mediaThumbnail?: string,\n timestamp: number,\n fromId: PeerId | string,\n fromRight: number,\n target?: HTMLElement,\n reverse?: boolean,\n prevTargets?: TargetType[],\n nextTargets?: TargetType[],\n message?: MyMessage,\n mediaTimestamp?: number,\n setupPlayer?: (video: VideoPlayer, readyPromise: Promise) => void,\n onCanPlay?: () => void,\n onMoverSet?: () => void,\n onBuffering?: () => void,\n noAuthor?: boolean\n /* , needLoadMore = true */\n }) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n const setAuthorPromise = noAuthor ? Promise.resolve() : this.setAuthorInfo(fromId, timestamp);\n\n const isLiveStream = media._ === 'inputGroupCall';\n const isDocument = media._ === 'document';\n const isVideo = isDocument && media.mime_type && ((['video', 'gif'] as MyDocument['type'][]).includes(media.type) || media.mime_type.indexOf('video/') === 0);\n\n this.log('openMedia', media, fromId, prevTargets, nextTargets, isLiveStream, isDocument, isVideo);\n\n this.live = isLiveStream;\n\n if(this.isFirstOpen) {\n // this.targetContainer = targetContainer;\n // this.needLoadMore = needLoadMore;\n this.isFirstOpen = false;\n this.listLoader.setTargets(prevTargets, nextTargets, reverse);\n (window as any).appMediaViewer = this;\n // this.loadMore = loadMore;\n }\n\n if(this.listLoader.next.length < 10) {\n setTimeout(() => {\n this.listLoader.load(true);\n }, 0);\n }\n\n // if(prevTarget && (!prevTarget.parentElement || !this.isElementVisible(this.targetContainer, prevTarget))) prevTarget = null;\n // if(nextTarget && (!nextTarget.parentElement || !this.isElementVisible(this.targetContainer, nextTarget))) nextTarget = null;\n\n this.buttons.prev.classList.toggle('hide', !this.listLoader.previous.length);\n this.buttons.next.classList.toggle('hide', !this.listLoader.next.length);\n\n const container = this.content.media;\n const useContainerAsTarget = !target || target === container;\n if(useContainerAsTarget) target = container;\n\n this.target = {element: target} as any;\n const tempId = ++this.tempId;\n\n if(container.firstElementChild) {\n container.replaceChildren();\n }\n\n // ok set\n\n const wasActive = fromRight !== 0;\n if(wasActive) {\n this.moveTheMover(this.content.mover, fromRight === 1);\n this.setNewMover();\n } else {\n this.navigationItem = {\n type: 'media',\n onPop: (canAnimate) => {\n if(this.setMoverAnimationPromise) {\n return false;\n }\n\n if(!canAnimate && IS_MOBILE_SAFARI) {\n this.wholeDiv.remove();\n }\n\n this.close();\n }\n };\n\n appNavigationController.pushItem(this.navigationItem);\n\n this.toggleOverlay(true);\n this.setGlobalListeners();\n await setAuthorPromise;\n\n if(!this.wholeDiv.parentElement) {\n document.body.append(this.wholeDiv);\n void this.wholeDiv.offsetLeft; // reflow\n }\n\n this.toggleWholeActive(true);\n }\n\n const mover = this.content.mover;\n\n const mediaBoxSize = this.mediaBoxSize;\n const mediaSize: MediaSize = isLiveStream ? new MediaSize(1080, 608) : undefined;\n let thumbPromise: Promise = Promise.resolve();\n const size = setAttachmentSize(isLiveStream ? {\n boxWidth: mediaBoxSize.width,\n boxHeight: mediaBoxSize.height,\n element: container,\n size: mediaSize\n } : {\n photo: media,\n element: container,\n boxWidth: mediaBoxSize.width,\n boxHeight: mediaBoxSize.height,\n noZoom: mediaSizes.isMobile ? false : true,\n pushDocumentSize: !!(isDocument && media.w && media.h)\n }).photoSize;\n if(useContainerAsTarget && !isLiveStream) {\n const cacheContext = await this.managers.thumbsStorage.getCacheContext(media, size?.type);\n let img: HTMLImageElement | HTMLCanvasElement;\n if(cacheContext.downloaded) {\n img = new Image();\n img.src = cacheContext.url;\n } else {\n const gotThumb = getMediaThumbIfNeeded({\n photo: media,\n cacheContext,\n useBlur: true,\n onlyStripped: true\n });\n if(gotThumb) {\n thumbPromise = gotThumb.loadPromise;\n img = gotThumb.image;\n }\n }\n\n if(img) {\n img.classList.add('thumbnail');\n container.append(img);\n }\n }\n\n if(isLiveStream) {\n if(mediaThumbnail) {\n const img = new Image();\n img.classList.add('thumbnail');\n container.append(img);\n await renderImageFromUrlPromise(img, mediaThumbnail, false);\n } else {\n const avatar = avatarNew({\n middleware: this.middlewareHelper.get(),\n peerId: fromId.toPeerId(),\n size: 'full'\n });\n avatar.node.classList.add('thumbnail-avatar');\n container.append(avatar.node);\n await avatar.readyThumbPromise;\n }\n }\n\n // need after setAttachmentSize\n /* if(useContainerAsTarget) {\n target = target.querySelector('img, video') || target;\n } */\n\n const supportsStreaming: boolean = !!(isDocument && media.supportsStreaming);\n const preloader = isLiveStream ? undefined : supportsStreaming ? this.preloaderStreamable : this.preloader;\n\n const getCacheContext = (type = size?.type) => {\n if(isLiveStream) return {url: getRtmpStreamUrl(media)};\n return this.managers.thumbsStorage.getCacheContext(media, type);\n };\n\n let setMoverPromise: Promise;\n if(isVideo || isLiveStream) {\n const middleware = mover.middlewareHelper.get();\n // потому что для safari нужно создать элемент из event'а\n const useController = /* isLiveStream || */message && (media as MyDocument).type !== 'gif';\n const video = /* useController ?\n appMediaPlaybackController.addMedia(message, false, true) as HTMLVideoElement :\n */createVideo({pip: useController || isLiveStream, middleware});\n\n if(isLiveStream) {\n video.ignoreLeak = true;\n }\n\n if(this.wholeDiv.classList.contains('no-forwards') || isLiveStream) {\n video.addEventListener('contextmenu', cancelEvent);\n }\n\n const set = () => this.setMoverToTarget(target, false, fromRight).then(({onAnimationEnd}) => {\n // return; // set and don't move\n // if(wasActive) return;\n // return;\n\n onMoverSet?.();\n\n const div = mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter') ? mover.firstElementChild : mover;\n\n const moverThumbVideo = mover.querySelector('video');\n moverThumbVideo?.remove();\n\n video.setAttribute('playsinline', 'true');\n\n // if(IS_SAFARI) {\n // test stream\n // video.controls = true;\n video.autoplay = true;\n // }\n\n if(media._ === 'inputGroupCall') {\n video.autoplay = true;\n } else if(media.type === 'gif') {\n video.muted = true;\n video.autoplay = true;\n video.loop = true;\n } else if(media.duration < 60) {\n video.loop = true;\n }\n\n if(mediaTimestamp !== undefined) {\n setCurrentTime(video, mediaTimestamp);\n }\n\n // * don't remove\n div.append(video);\n\n const canPlayThrough = new Promise((resolve) => {\n video.addEventListener('canplay', resolve, {once: true});\n });\n\n const setSingleMedia = () => {\n if(isLiveStream) {\n // this.releaseSingleMedia = appMediaPlaybackController.setSingleMedia();\n } else {\n this.releaseSingleMedia = appMediaPlaybackController.setSingleMedia({\n media: video,\n message: message as Message.message\n });\n }\n };\n\n const createPlayer = async() => {\n if((media as MyDocument).type === 'gif') {\n return;\n }\n\n const readyPromise = Promise.all([canPlayThrough, onAnimationEnd]);\n if(!isLiveStream) { // should display interface for live streams instantly\n await readyPromise;\n if(this.tempId !== tempId) {\n return;\n }\n }\n\n // const play = useController ? appMediaPlaybackController.willBePlayedMedia === video : true;\n const play = !isLiveStream;\n const player = this.videoPlayer = new VideoPlayer({\n video,\n play,\n streamable: supportsStreaming,\n live: isLiveStream,\n width: mediaSize?.width,\n height: mediaSize?.height,\n onPlaybackRateMenuToggle: (open) => {\n this.wholeDiv.classList.toggle('hide-caption', !!open);\n },\n onPip: (pip) => {\n const otherMediaViewer = (window as any).appMediaViewer;\n if(!pip && otherMediaViewer && otherMediaViewer !== this) {\n this.releaseSingleMedia = undefined;\n this.close();\n return;\n }\n\n const mover = this.moversContainer.lastElementChild as HTMLElement;\n mover.classList.toggle('in-pip', pip);\n this.toggleWholeActive(!pip);\n this.toggleOverlay(!pip);\n this.toggleGlobalListeners(!pip);\n\n if(this.navigationItem) {\n if(pip) appNavigationController.removeItem(this.navigationItem);\n else appNavigationController.pushItem(this.navigationItem);\n }\n\n if(useController) {\n if(pip) {\n // appMediaPlaybackController.toggleSwitchers(true);\n\n this.releaseSingleMedia?.(false);\n this.releaseSingleMedia = undefined;\n\n appMediaPlaybackController.setPictureInPicture(video);\n } else {\n setSingleMedia();\n }\n }\n },\n onPipClose: () => {\n // this.target = undefined;\n // this.toggleWholeActive(false);\n // this.toggleOverlay(false);\n this.close();\n },\n listenKeyboardEvents: 'always',\n useGlobalVolume: 'auto'\n });\n player.addEventListener('toggleControls', (show) => {\n this.wholeDiv.classList.toggle('has-video-controls', show);\n });\n\n this.addEventListener('setMoverBefore', () => {\n this.wholeDiv.classList.remove('has-video-controls');\n this.videoPlayer.cleanup();\n this.videoPlayer = undefined;\n }, {once: true});\n\n if(this.isZooming) {\n this.videoPlayer.lockControls(false);\n } else if(isLiveStream) {\n this.videoPlayer.lockControls(true);\n }\n\n setupPlayer?.(this.videoPlayer, readyPromise);\n };\n\n if(supportsStreaming || isLiveStream) {\n let attachedCanPlay = false, buffering = false;\n\n const _onBuffering = (noCanPlay?: boolean) => {\n if(buffering) {\n return;\n }\n\n buffering = true;\n onBuffering?.();\n !noCanPlay && attachCanPlay();\n preloader?.attach(mover, true);\n\n // поставлю класс для плеера, чтобы убрать большую иконку пока прелоадер на месте\n video.parentElement.classList.add('is-buffering');\n };\n\n onAnimationEnd.then(() => {\n if(video.readyState < video.HAVE_FUTURE_DATA) {\n _onBuffering(true);\n }\n });\n\n const attachCanPlay = () => {\n if(attachedCanPlay) {\n return;\n }\n\n attachedCanPlay = true;\n video.addEventListener('canplay', () => {\n attachedCanPlay = false;\n buffering = false;\n onCanPlay?.();\n preloader?.detach();\n video.parentElement.classList.remove('is-buffering');\n\n if(!this.isZooming) {\n this.videoPlayer?.lockControls(undefined);\n }\n }, {once: true});\n };\n\n video.addEventListener('waiting', () => {\n const loading = video.networkState === video.NETWORK_LOADING;\n const isntEnoughData = video.readyState < video.HAVE_FUTURE_DATA;\n\n // this.log('video waiting for progress', loading, isntEnoughData);\n if(loading && isntEnoughData) {\n _onBuffering();\n }\n });\n\n if(this.wholeDiv.classList.contains('no-forwards')) {\n video.addEventListener('contextmenu', (e) => {\n cancelEvent(e);\n });\n }\n\n attachCanPlay();\n }\n\n // if(!video.src || media.url !== video.src) {\n const load = async() => {\n /* if(useController) {\n appMediaPlaybackController.resolveWaitingForLoadMedia(message.peerId, message.mid, message.pFlags.is_scheduled);\n } */\n\n const promise: Promise = supportsStreaming || isLiveStream ? Promise.resolve() : appDownloadManager.downloadMediaURL({media});\n\n if(!supportsStreaming) {\n onAnimationEnd.then(async() => {\n if(!(await getCacheContext()).url) {\n preloader?.attach(mover, true, promise);\n }\n });\n }\n\n Promise.all([\n promise,\n isLiveStream ? undefined : onAnimationEnd\n ]).then(async() => {\n if(this.tempId !== tempId) {\n this.log.warn('media viewer changed video');\n return;\n }\n\n const url = (await getCacheContext()).url;\n\n const onError = (e: ErrorEvent) => {\n if(shouldIgnoreVideoError(e) || isLiveStream) {\n return;\n }\n\n toastNew({\n langPackKey: IS_MOBILE ? 'Video.Unsupported.Mobile' : 'Video.Unsupported.Desktop'\n });\n\n const error = video.error;\n if(error && error.code !== 4) {\n this.log.error('Error ' + error.code + '; details: ' + error.message);\n }\n\n preloader?.detach();\n };\n\n const onMediaLoadPromise = onMediaLoad(video);\n if(!isLiveStream) {\n handleVideoLeak(video, onMediaLoadPromise).catch(onError);\n }\n\n video.addEventListener('error', onError, {once: true});\n middleware.onClean(() => {\n video.removeEventListener('error', onError);\n });\n\n if(target instanceof SVGSVGElement/* && (video.parentElement || !isSafari) */) { // if video exists\n // if(!video.parentElement) {\n div.firstElementChild.lastElementChild.append(video);\n // }\n } else {\n renderImageFromUrl(video, url);\n }\n\n // * have to set options (especially playbackRate) after src\n // * https://github.com/videojs/video.js/issues/2516\n if(useController) {\n setSingleMedia();\n\n this.addEventListener('setMoverBefore', () => {\n this.releaseSingleMedia?.();\n this.releaseSingleMedia = undefined;\n }, {once: true});\n }\n\n this.updateMediaSource(target, url, 'video');\n\n if(isLiveStream) {\n createPlayer();\n } else onMediaLoadPromise.then(() => {\n createPlayer();\n });\n });\n\n return promise;\n };\n\n this.lazyLoadQueue.unshift({load});\n // } else createPlayer();\n });\n\n setMoverPromise = thumbPromise.then(set);\n } else {\n const set = () => this.setMoverToTarget(target, false, fromRight).then(({onAnimationEnd}) => {\n // return; // set and don't move\n // if(wasActive) return;\n // return;\n\n const load = async() => {\n const cancellablePromise = isDocument ? appDownloadManager.downloadMediaURL({media}) : appDownloadManager.downloadMediaURL({media, thumb: size});\n\n const photoSizes = !isDocument && media.sizes.slice().filter((size) => (size as PhotoSize.photoSize).w) as PhotoSize.photoSize[];\n photoSizes && photoSizes.sort((a, b) => b.size - a.size);\n const fullPhotoSize = photoSizes?.[0];\n const cancellableFullPromise = !isDocument && fullPhotoSize !== size && appDownloadManager.downloadMediaURL({media, thumb: fullPhotoSize});\n\n onAnimationEnd.then(async() => {\n if(!(await getCacheContext()).url) {\n this.preloader.attachPromise(cancellablePromise);\n // this.preloader.attach(mover, true, cancellablePromise);\n }\n });\n\n Promise.all([onAnimationEnd, cancellablePromise]).then(async() => {\n if(this.tempId !== tempId) {\n this.log.warn('media viewer changed photo');\n return;\n }\n\n const url = (await getCacheContext()).url;\n if(target instanceof SVGSVGElement) {\n this.updateMediaSource(target, url, 'img');\n this.updateMediaSource(mover, url, 'img');\n\n if(mediaSizes.isMobile) {\n const imgs = mover.querySelectorAll('img');\n imgs.forEach((img) => {\n img.classList.remove('thumbnail'); // может здесь это вообще не нужно\n });\n }\n } else {\n const div = mover.firstElementChild && mover.firstElementChild.classList.contains('media-viewer-aspecter') ? mover.firstElementChild : mover;\n const haveImage = ['CANVAS', 'IMG'].includes(div.firstElementChild?.tagName) ? div.firstElementChild as HTMLElement : null;\n if((haveImage as HTMLImageElement)?.src !== url) {\n const image = new Image();\n image.classList.add('thumbnail');\n\n renderImageFromUrl(image, url, () => {\n fastRaf(() => {\n this.updateMediaSource(target, url, 'img');\n\n if(haveImage) {\n fastRaf(() => {\n haveImage.remove();\n });\n }\n\n div.append(image);\n });\n }, false);\n\n cancellableFullPromise && cancellableFullPromise.then((url) => {\n const fullImage = new Image();\n fullImage.classList.add('thumbnail');\n renderImageFromUrl(fullImage, url, () => {\n fastRaf(() => {\n image.replaceWith(fullImage);\n });\n }, false);\n });\n }\n }\n\n // this.preloader.detach();\n }).catch((err) => {\n this.log.error(err);\n this.preloader.attach(mover);\n this.preloader.setManual();\n });\n\n return cancellablePromise;\n };\n\n this.lazyLoadQueue.unshift({load});\n });\n\n setMoverPromise = thumbPromise.then(set);\n }\n\n return this.setMoverPromise = setMoverPromise.catch(() => {\n this.setMoverAnimationPromise = null;\n }).finally(() => {\n this.setMoverPromise = null;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport AvatarListLoader from '../helpers/avatarListLoader';\nimport {Photo} from '../layer';\nimport appDownloadManager from '../lib/appManagers/appDownloadManager';\nimport appImManager from '../lib/appManagers/appImManager';\nimport rootScope from '../lib/rootScope';\nimport AppMediaViewerBase from './appMediaViewerBase';\n\ntype AppMediaViewerAvatarTargetType = {element: HTMLElement, photoId: Photo.photo['id'], photo?: Photo.photo};\nexport default class AppMediaViewerAvatar extends AppMediaViewerBase<'', 'delete', AppMediaViewerAvatarTargetType> {\n public peerId: PeerId;\n\n constructor(peerId: PeerId) {\n super(new AvatarListLoader({peerId, managers: rootScope.managers}), [/* 'delete' */]);\n\n this.peerId = peerId;\n\n this.setBtnMenuToggle([{\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: this.onDownloadClick\n }/* , {\n icon: 'delete danger btn-disabled',\n text: 'Delete',\n onClick: () => {}\n } */]);\n\n // * constructing html end\n\n this.setListeners();\n }\n\n onPrevClick = (target: AppMediaViewerAvatarTargetType) => {\n this.openMedia({\n photoId: target.photoId,\n target: target.element,\n fromRight: -1\n });\n };\n\n onNextClick = (target: AppMediaViewerAvatarTargetType) => {\n this.openMedia({\n photoId: target.photoId,\n target: target.element,\n fromRight: 1\n });\n };\n\n onDownloadClick = () => {\n appDownloadManager.downloadToDisc({\n media: this.target.photo,\n queueId: appImManager.chat.bubbles.lazyLoadQueue.queueId\n });\n };\n\n public async openMedia({\n photoId,\n target,\n fromRight = 0,\n prevTargets,\n nextTargets\n }: {\n photoId: Photo.photo['id'],\n target?: HTMLElement,\n fromRight?: number,\n prevTargets?: AppMediaViewerAvatarTargetType[],\n nextTargets?: AppMediaViewerAvatarTargetType[]\n }) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n const photo = await this.managers.appPhotosManager.getPhoto(photoId);\n const ret = super._openMedia({\n media: photo,\n timestamp: photo.date,\n fromId: this.peerId,\n fromRight,\n target,\n reverse: false,\n prevTargets,\n nextTargets\n });\n this.target.photoId = photo.id;\n this.target.photo = photo;\n\n return ret;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport isObject from '../helpers/object/isObject';\nimport {Photo, MessageAction, Message} from '../layer';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport rootScope from '../lib/rootScope';\nimport AppMediaViewer from './appMediaViewer';\nimport AppMediaViewerAvatar from './appMediaViewerAvatar';\n\nexport default async function openAvatarViewer(\n target: HTMLElement,\n peerId: PeerId,\n middleware: () => boolean,\n message?: Message.messageService,\n prevTargets?: {element: HTMLElement, item: Photo.photo['id'] | Message.messageService}[],\n nextTargets?: typeof prevTargets\n) {\n let photo = await rootScope.managers.appProfileManager.getFullPhoto(peerId);\n if(!middleware() || !photo) {\n return;\n }\n\n const getTarget = () => {\n const good = Array.from(target.querySelectorAll('img')).find((img) => !img.classList.contains('emoji'));\n return good ? target : null;\n };\n\n if(peerId.isAnyChat()) {\n const hadMessage = !!message;\n const inputFilter = 'inputMessagesFilterChatPhotos';\n if(!message) {\n message = await rootScope.managers.appMessagesManager.getHistory({\n peerId,\n inputFilter: {_: inputFilter},\n offsetId: 0,\n limit: 1\n }).then((value) => {\n const mid = value.history[0];\n return apiManagerProxy.getMessageByPeer(peerId, mid) as Message.messageService;\n });\n\n if(!middleware()) {\n return;\n }\n }\n\n if(message) {\n // ! гений в деле, костылируем (но это гениально)\n const messagePhoto = (message.action as MessageAction.messageActionChannelEditPhoto).photo;\n if(messagePhoto.id !== photo.id) {\n if(!hadMessage) {\n message = await rootScope.managers.appMessagesManager.generateFakeAvatarMessage(peerId, photo);\n } else {\n\n }\n }\n\n const f = (arr: typeof prevTargets) => arr.map((el) => ({\n element: el.element,\n mid: (el.item as Message.messageService).mid,\n peerId: (el.item as Message.messageService).peerId\n }));\n\n new AppMediaViewer()\n .setSearchContext({\n peerId,\n inputFilter: {_: inputFilter}\n })\n .openMedia({\n message,\n target: getTarget(),\n prevTargets: prevTargets ? f(prevTargets) : undefined,\n nextTargets: nextTargets ? f(nextTargets) : undefined\n });\n\n return;\n }\n }\n\n if(photo) {\n if(!isObject(message) && message) {\n photo = await rootScope.managers.appPhotosManager.getPhoto(message);\n }\n\n const f = (arr: typeof prevTargets) => arr.map((el) => ({\n element: el.element,\n photoId: el.item as string\n }));\n\n new AppMediaViewerAvatar(peerId).openMedia({\n photoId: photo.id,\n target: getTarget(),\n prevTargets: prevTargets ? f(prevTargets) : undefined,\n nextTargets: nextTargets ? f(nextTargets) : undefined\n });\n }\n}\n","import {Signal, createEffect, createSignal} from 'solid-js';\nimport {HelpPeerColorOption, HelpPeerColorSet, User} from '../layer';\nimport {usePeer} from '../stores/peers';\nimport useIsNightTheme from './useIsNightTheme';\n\nlet signal: Signal;\nexport default function useProfileColors() {\n return signal ??= createSignal();\n}\n\nexport function usePeerProfileAppearance(peerId: PeerId) {\n const [colorSet, setColorSet] = createSignal();\n const [backgroundEmojiId, setBackgroundEmojiId] = createSignal();\n const [colorOptions] = useProfileColors();\n const isNightTheme = useIsNightTheme();\n const peer = usePeer(() => peerId);\n\n createEffect(() => {\n const _peer = peer();\n const profileColor = (_peer as User.user)?.profile_color;\n if(!profileColor) {\n setColorSet();\n setBackgroundEmojiId();\n return;\n }\n\n const colorOption = colorOptions()?.find((colorOption) => colorOption.color_id === profileColor.color);\n setColorSet((isNightTheme() && colorOption?.dark_colors ? colorOption.dark_colors : colorOption?.colors) as HelpPeerColorSet.helpPeerColorProfileSet);\n setBackgroundEmojiId(profileColor.background_emoji_id);\n });\n\n return {colorSet, backgroundEmojiId};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppMessagesManager} from '../lib/appManagers/appMessagesManager';\nimport IS_PARALLAX_SUPPORTED from '../environment/parallaxSupport';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport findAndSplice from '../helpers/array/findAndSplice';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent, simulateClickEvent} from '../helpers/dom/clickEvent';\nimport filterChatPhotosMessages from '../helpers/filterChatPhotosMessages';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport ListLoader from '../helpers/listLoader';\nimport {getMiddleware, MiddlewareHelper} from '../helpers/middleware';\nimport {fastRaf} from '../helpers/schedulers';\nimport {Message, ChatFull, MessageAction, Photo, User} from '../layer';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport choosePhotoSize from '../lib/appManagers/utils/photos/choosePhotoSize';\nimport {avatarNew, wrapPhotoToAvatar} from './avatarNew';\nimport Scrollable from './scrollable';\nimport SwipeHandler from './swipeHandler';\nimport wrapPhoto from './wrappers/photo';\nimport openAvatarViewer from './openAvatarViewer';\nimport Icon from './icon';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport {createEffect, createRoot, on} from 'solid-js';\nimport {usePeerProfileAppearance} from '../hooks/useProfileColors';\nimport {getHexColorFromTelegramColor} from '../helpers/color';\nimport wrapEmojiPattern from './wrappers/emojiPattern';\nimport {useCollapsable} from '../hooks/useCollapsable';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport useIsNightTheme from '../hooks/useIsNightTheme';\nimport customProperties from '../helpers/dom/customProperties';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport {changeTitleEmojiColor} from './peerTitle';\n\nconst LOAD_NEAREST = 3;\nexport const SHOW_NO_AVATAR = true;\n\nexport default class PeerProfileAvatars {\n private static BASE_CLASS = 'profile-avatars';\n private static SCALE = IS_PARALLAX_SUPPORTED ? 2 : 1;\n private static TRANSLATE_TEMPLATE = IS_PARALLAX_SUPPORTED ? `translate3d({x}, 0, -1px) scale(${PeerProfileAvatars.SCALE})` : 'translate({x}, 0)';\n public container: HTMLElement;\n private avatars: HTMLElement;\n private gradient: HTMLElement;\n private gradientTop: HTMLElement;\n public info: HTMLElement;\n private arrowPrevious: HTMLElement;\n private arrowNext: HTMLElement;\n private tabs: HTMLDivElement;\n private listLoader: ListLoader;\n private peerId: PeerId;\n private intersectionObserver: IntersectionObserver;\n private loadCallbacks: Map void>;\n private listenerSetter: ListenerSetter;\n private swipeHandler: SwipeHandler;\n private middlewareHelper: MiddlewareHelper;\n private hasBackgroundColor: boolean;\n private emojiPatternCanvas: HTMLCanvasElement;\n private unfold: (e?: MouseEvent) => void;\n private fakeAvatar: ReturnType;\n private hasNoPhoto: boolean;\n\n constructor(\n private scrollable: Scrollable,\n private managers: AppManagers,\n private setCollapsedOn: HTMLElement\n ) {\n this.container = document.createElement('div');\n this.container.classList.add(PeerProfileAvatars.BASE_CLASS + '-container');\n\n this.avatars = document.createElement('div');\n this.avatars.classList.add(PeerProfileAvatars.BASE_CLASS + '-avatars');\n\n this.gradient = document.createElement('div');\n this.gradient.classList.add(PeerProfileAvatars.BASE_CLASS + '-gradient');\n\n this.gradientTop = this.gradient.cloneNode() as HTMLElement;\n this.gradientTop.classList.add(PeerProfileAvatars.BASE_CLASS + '-gradient-top');\n\n this.info = document.createElement('div');\n this.info.classList.add(PeerProfileAvatars.BASE_CLASS + '-info');\n\n this.tabs = document.createElement('div');\n this.tabs.classList.add(PeerProfileAvatars.BASE_CLASS + '-tabs');\n\n this.arrowPrevious = document.createElement('div');\n this.arrowPrevious.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow');\n this.arrowPrevious.append(Icon('avatarprevious', PeerProfileAvatars.BASE_CLASS + '-arrow-icon'));\n\n this.middlewareHelper = getMiddleware();\n\n this.arrowNext = document.createElement('div');\n this.arrowNext.classList.add(PeerProfileAvatars.BASE_CLASS + '-arrow', PeerProfileAvatars.BASE_CLASS + '-arrow-next');\n this.arrowNext.append(Icon('avatarnext', PeerProfileAvatars.BASE_CLASS + '-arrow-icon'));\n\n this.container.append(this.avatars, this.gradient, this.gradientTop, this.info, this.tabs, this.arrowPrevious, this.arrowNext);\n\n this.loadCallbacks = new Map();\n this.listenerSetter = new ListenerSetter();\n\n const checkScrollTop = () => {\n if(this.scrollable.scrollPosition !== 0) {\n this.scrollable.scrollIntoViewNew({\n element: this.scrollable.firstElementChild as HTMLElement,\n position: 'start'\n });\n return false;\n }\n\n return true;\n };\n\n const SWITCH_ZONE = 1 / 3;\n let cancel = false;\n let freeze = false;\n attachClickEvent(this.container, async(_e) => {\n if(freeze) {\n cancelEvent(_e);\n return;\n }\n\n if(cancel) {\n cancel = false;\n return;\n }\n\n if(!checkScrollTop()) {\n return;\n }\n\n if(this.hasNoPhoto) {\n return;\n }\n\n if(this.isCollapsed() && this.unfold) {\n if(findUpClassName(_e.target, 'avatar') && this.container.classList.contains('has-stories')) {\n cancel = true;\n simulateClickEvent(this.fakeAvatar.node);\n return;\n }\n\n this.unfold(_e);\n return;\n }\n\n const rect = this.container.getBoundingClientRect();\n\n // const e = (_e as TouchEvent).touches ? (_e as TouchEvent).touches[0] : _e as MouseEvent;\n const e = _e;\n const x = e.pageX;\n\n const clickX = x - rect.left;\n if((!this.listLoader.previous.length && !this.listLoader.next.length) ||\n (clickX > (rect.width * SWITCH_ZONE) && clickX < (rect.width - rect.width * SWITCH_ZONE))) {\n const peerId = this.peerId;\n\n const targets: {element: HTMLElement, item: Photo.photo['id'] | Message.messageService}[] = [];\n this.listLoader.previous.concat(this.listLoader.current, this.listLoader.next).forEach((item, idx) => {\n targets.push({\n element: /* null */this.avatars.children[idx] as HTMLElement,\n item\n });\n });\n\n const prevTargets = targets.slice(0, this.listLoader.previous.length);\n const nextTargets = targets.slice(this.listLoader.previous.length + 1);\n\n const target = this.avatars.children[this.listLoader.previous.length] as HTMLElement;\n freeze = true;\n openAvatarViewer(\n target,\n peerId,\n () => peerId === this.peerId,\n this.listLoader.current as Message.messageService,\n prevTargets,\n nextTargets\n );\n freeze = false;\n } else {\n const centerX = rect.right - (rect.width / 2);\n const toRight = x > centerX;\n\n let distance: number;\n if(this.listLoader.index === 0 && !toRight) distance = this.listLoader.count - 1;\n else if(this.listLoader.index === (this.listLoader.count - 1) && toRight) distance = -(this.listLoader.count - 1);\n else distance = toRight ? 1 : -1;\n\n this.goWithoutTransition(distance);\n }\n }, {listenerSetter: this.listenerSetter});\n\n const cancelNextClick = () => {\n cancel = true;\n document.body.addEventListener(IS_TOUCH_SUPPORTED ? 'touchend' : 'click', (e) => {\n cancel = false;\n }, {once: true});\n };\n\n let width = 0, x = 0, lastDiffX = 0, /* lastIndex = 0, */ minX = 0;\n const swipeHandler = this.swipeHandler = new SwipeHandler({\n element: this.avatars,\n onSwipe: (xDiff, yDiff) => {\n xDiff *= -1;\n yDiff *= -1;\n\n lastDiffX = xDiff;\n let lastX = x + xDiff * -PeerProfileAvatars.SCALE;\n if(lastX > 0) lastX = 0;\n else if(lastX < minX) lastX = minX;\n\n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', lastX + 'px');\n // console.log(xDiff, yDiff);\n return false;\n },\n verifyTouchTarget: (e) => {\n if(!checkScrollTop()) {\n cancelNextClick();\n cancelEvent(e as any as Event);\n return false;\n } else if(this.isCollapsed()) {\n return false;\n } else if(this.container.classList.contains('is-single') || freeze) {\n return false;\n }\n\n return true;\n },\n onFirstSwipe: () => {\n const rect = this.avatars.getBoundingClientRect();\n width = rect.width;\n minX = -width * (this.tabs.childElementCount - 1);\n\n /* lastIndex = whichChild(this.tabs.querySelector('.active'));\n x = -width * lastIndex; */\n x = rect.left - this.container.getBoundingClientRect().left;\n\n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', x + 'px');\n\n this.container.classList.add('is-swiping');\n this.avatars.classList.add('no-transition');\n void this.avatars.offsetLeft; // reflow\n },\n onReset: () => {\n const addIndex = Math.ceil(Math.abs(lastDiffX) / (width / PeerProfileAvatars.SCALE)) * (lastDiffX >= 0 ? 1 : -1);\n cancelNextClick();\n\n // console.log(addIndex);\n\n this.avatars.classList.remove('no-transition');\n fastRaf(() => {\n this.listLoader.go(addIndex);\n this.container.classList.remove('is-swiping');\n });\n }\n });\n\n this.intersectionObserver = new IntersectionObserver((entries) => {\n entries.forEach((entry) => {\n if(!entry.isIntersecting) {\n return;\n }\n\n this.loadNearestToTarget(entry.target);\n });\n });\n\n this.setCollapsed(true);\n\n const o = scrollable.onAdditionalScroll;\n scrollable.onAdditionalScroll = () => {\n o?.();\n this.updateHeaderFilled();\n };\n\n this.middlewareHelper.onDestroy(() => {\n scrollable.onAdditionalScroll = o;\n });\n\n createRoot((dispose) => {\n this.middlewareHelper.onDestroy(() => {\n dispose();\n this.unfold = undefined;\n });\n\n const {folded, unfold, fold} = useCollapsable({\n container: () => this.container,\n listenWheelOn: this.setCollapsedOn,\n scrollable: () => scrollable.container,\n disableHoverWhenFolded: false\n });\n\n this.unfold = unfold;\n\n createEffect(() => {\n if(this.hasNoPhoto && !folded()) {\n fold();\n return;\n }\n\n this.setCollapsed(folded());\n });\n });\n\n /* this.listenerSetter.add(rootScope)('avatar_update', (peerId) => {\n if(this.peerId === peerId) {\n const photo = appPeersManager.getPeerPhoto(peerId);\n if(photo) {\n const id = photo.photo_id;\n const previous = this.listLoader.previous;\n for(let i = 0; i < previous.length; ++i) {\n if(previous[i] === id)\n }\n this.listLoader.previous.forEach((_id, idx, arr) => {});\n }\n }\n }); */\n }\n\n public goWithoutTransition(distance: number) {\n this.avatars.classList.add('no-transition');\n void this.avatars.offsetLeft; // reflow\n\n this.listLoader.go(distance);\n\n fastRaf(() => {\n this.avatars.classList.remove('no-transition');\n });\n }\n\n public async setPeer(peerId: PeerId) {\n this.peerId = peerId;\n this.middlewareHelper.clean();\n\n const photo = await this.managers.appPeersManager.getPeerPhoto(peerId);\n if(!photo && !SHOW_NO_AVATAR) {\n return;\n }\n\n this.hasNoPhoto = !photo;\n\n await this.applyAppearance();\n\n if(this.fakeAvatar) {\n this.fakeAvatar.node.remove();\n }\n this.fakeAvatar = avatarNew({\n peerId,\n isBig: true,\n middleware: this.middlewareHelper.get(),\n size: 120,\n withStories: true,\n onStoriesStatus: (has) => {\n this.container.classList.toggle('has-stories', has);\n },\n storyColors: {\n read: 'rgba(255, 255, 255, .3)'\n }\n });\n this.fakeAvatar.node.classList.add('profile-avatars-avatar-fake');\n await this.fakeAvatar.readyThumbPromise;\n this.avatars.before(this.fakeAvatar.node);\n\n const listLoader: PeerProfileAvatars['listLoader'] = this.listLoader = new ListLoader({\n loadCount: 50,\n loadMore: (anchor, older, loadCount) => {\n if(!older) return Promise.resolve({count: undefined, items: []});\n\n if(peerId.isUser()) {\n const maxId: Photo.photo['id'] = anchor as any;\n return this.managers.appPhotosManager.getUserPhotos(peerId, maxId, loadCount).then((value) => {\n return {\n count: value.count,\n items: value.photos\n };\n });\n } else {\n const promises: [Promise | ChatFull, ReturnType] = [] as any;\n if(!listLoader.current) {\n promises.push(this.managers.appProfileManager.getChatFull(peerId.toChatId()));\n }\n\n promises.push(this.managers.appMessagesManager.getHistory({\n peerId,\n offsetId: Number.MAX_SAFE_INTEGER,\n inputFilter: {\n _: 'inputMessagesFilterChatPhotos'\n },\n limit: loadCount,\n backLimit: 0\n }));\n\n return Promise.all(promises).then(async(result) => {\n const value = result.pop() as typeof result[1];\n\n let {messages, history} = value;\n if(!messages) {\n messages = value.messages = history.map((mid) => apiManagerProxy.getMessageByPeer(peerId, mid));\n }\n\n filterChatPhotosMessages(value);\n\n if(!listLoader.current) {\n const chatFull = result[0];\n const message = findAndSplice(messages, (message) => {\n return ((message as Message.messageService).action as MessageAction.messageActionChannelEditPhoto).photo.id === chatFull.chat_photo.id;\n }) as Message.messageService;\n\n listLoader.current = message || await this.managers.appMessagesManager.generateFakeAvatarMessage(this.peerId, chatFull.chat_photo);\n }\n\n // console.log('avatars loaded:', value);\n return {\n count: value.count,\n items: messages\n };\n });\n }\n },\n processItem: this.processItem,\n onJump: (item, older) => {\n const id = this.listLoader.index;\n // const nextId = Math.max(0, id);\n const x = 100 * PeerProfileAvatars.SCALE * id;\n this.avatars.style.transform = PeerProfileAvatars.TRANSLATE_TEMPLATE.replace('{x}', `-${x}%`);\n\n [this.tabs, this.avatars].forEach((container) => {\n const activeTab = container.querySelector('.active');\n if(activeTab) activeTab.classList.remove('active');\n\n const tab = container.children[id] as HTMLElement;\n tab.classList.add('active');\n });\n\n this.loadNearestToTarget(this.avatars.children[id]);\n }\n });\n\n if(photo?._ === 'userProfilePhoto') {\n listLoader.current = photo.photo_id;\n }\n\n await this.processItem(listLoader.current);\n\n // listLoader.loaded\n listLoader.load(true);\n }\n\n private _applyAppearance() {\n const middleware = this.middlewareHelper.get();\n const renderBackgroundEmoji = (docId: DocId, hasBgColor: boolean) => {\n this.emojiPatternCanvas?.remove();\n this.emojiPatternCanvas = undefined;\n\n if(!docId) {\n return;\n }\n\n const CANVAS_WIDTH = 393;\n const CANVAS_HEIGHT = 258;\n\n const canvas = this.emojiPatternCanvas = document.createElement('canvas');\n canvas.classList.add('profile-avatars-pattern');\n const ctx = canvas.getContext('2d');\n\n const dpr = window.devicePixelRatio;\n canvas.width = CANVAS_WIDTH * dpr;\n canvas.height = CANVAS_HEIGHT * dpr;\n canvas.style.width = `${CANVAS_WIDTH}px`;\n canvas.style.height = `${CANVAS_HEIGHT}px`;\n\n const drawHalo = () => {\n const centerX = canvas.width / 2;\n const centerY = canvas.height / 2;\n\n const radius = 140 * dpr;\n\n const gradient = ctx.createRadialGradient(centerX, centerY, 0, centerX, centerY, radius);\n gradient.addColorStop(0, 'rgba(255, 255, 255, 0.18)');\n gradient.addColorStop(1, 'rgba(255, 255, 255, 0)');\n\n ctx.fillStyle = gradient;\n\n ctx.beginPath();\n ctx.arc(centerX, centerY, radius, 0, 2 * Math.PI);\n ctx.fill();\n };\n\n if(hasBgColor) {\n drawHalo();\n } else {\n canvas.style.mixBlendMode = 'unset';\n }\n\n const deferred = deferredPromise();\n const MIN_SIZE = 18;\n const MIDDLE_SIZE = 20;\n const MAX_SIZE = 24;\n const MIN_OPACITY = .16;\n const MIDDLE_OPACITY = .2;\n const promise = wrapEmojiPattern({\n docId,\n canvasWidth: CANVAS_WIDTH,\n canvasHeight: CANVAS_HEIGHT,\n emojiSize: 24,\n middleware,\n positions: [\n [307, 155, MIN_SIZE, MIN_OPACITY],\n [68, 155, MIN_SIZE, MIN_OPACITY],\n [317, 95, MIN_SIZE, MIN_OPACITY],\n [58, 95, MIN_SIZE, MIN_OPACITY],\n [292, 52, MIN_SIZE, MIN_OPACITY],\n [83, 52, MIN_SIZE, MIN_OPACITY],\n [213, 195, MIN_SIZE, MIDDLE_OPACITY],\n [162, 195, MIN_SIZE, MIDDLE_OPACITY],\n [273, 204, MIN_SIZE, MIN_OPACITY],\n [102, 204, MIN_SIZE, MIN_OPACITY],\n [253, 163, MIDDLE_SIZE, MIDDLE_OPACITY],\n [120, 163, MIDDLE_SIZE, MIDDLE_OPACITY],\n [258, 75, MIN_SIZE, MIDDLE_OPACITY],\n [117, 75, MIN_SIZE, MIDDLE_OPACITY],\n [269, 113, MAX_SIZE, MIDDLE_OPACITY],\n [100, 113, MAX_SIZE, MIDDLE_OPACITY],\n [230, 44, MIDDLE_SIZE, MIDDLE_OPACITY],\n [143, 44, MIDDLE_SIZE, MIDDLE_OPACITY],\n [187.5, 34, MIN_SIZE, MIDDLE_OPACITY]\n ],\n color: customProperties.getProperty('primary-text-color'),\n onCacheStatus: (cached) => {\n if(cached) {\n promise.then(deferred.resolve.bind(deferred));\n } else {\n deferred.resolve();\n }\n }\n }).then((_canvas) => {\n if(!middleware()) return;\n\n ctx.drawImage(_canvas, 0, 0);\n });\n\n this.container.prepend(this.emojiPatternCanvas);\n\n return deferred;\n };\n\n const setBackgroundColors = (bgColors: number[]) => {\n let backgroundStr: string;\n if(bgColors) {\n const colors = bgColors.map((color) => getHexColorFromTelegramColor(color));\n if(colors.length === 1) {\n backgroundStr = colors[0];\n } else {\n backgroundStr = `linear-gradient(180deg, ${colors.join(', ')})`;\n }\n }\n this.container.style.background = backgroundStr;\n this.hasBackgroundColor = !!backgroundStr;\n };\n\n const {colorSet, backgroundEmojiId} = usePeerProfileAppearance(this.peerId);\n const deferred = deferredPromise();\n createEffect(() => {\n const bgColors = colorSet()?.bg_colors;\n const docId = backgroundEmojiId();\n // const docId = '5301072507598550489';\n\n setBackgroundColors(bgColors);\n this.setCollapsed(this.isCollapsed());\n\n const isNightTheme = useIsNightTheme();\n createEffect(on(\n isNightTheme,\n () => {\n const promise = renderBackgroundEmoji(docId, !!bgColors);\n if(promise) promise.then(deferred.resolve.bind(deferred));\n else deferred.resolve();\n }\n ));\n });\n\n return deferred;\n }\n\n private applyAppearance() {\n const middleware = this.middlewareHelper.get();\n return createRoot((dispose) => {\n middleware.onDestroy(dispose);\n return this._applyAppearance();\n });\n }\n\n public addTab() {\n const tab = document.createElement('div');\n tab.classList.add(PeerProfileAvatars.BASE_CLASS + '-tab');\n this.tabs.append(tab);\n\n if(this.tabs.childElementCount === 1) {\n tab.classList.add('active');\n }\n\n this.container.classList.toggle('is-single', this.tabs.childElementCount <= 1);\n }\n\n public processItem = async(photoId: Photo.photo['id'] | Message.messageService) => {\n const middleware = this.middlewareHelper.get();\n const avatar = document.createElement('div');\n avatar.classList.add(PeerProfileAvatars.BASE_CLASS + '-avatar', 'media-container', 'hide');\n\n const isFirst = this.avatars.childElementCount === 0;\n this.avatars.append(avatar);\n\n let photo: Photo.photo;\n if(photoId) {\n photo = typeof(photoId) !== 'object' ?\n await this.managers.appPhotosManager.getPhoto(photoId) :\n (photoId.action as MessageAction.messageActionChannelEditPhoto).photo as Photo.photo;\n }\n\n const loadCallback = async() => {\n const avatarElem = avatarNew({\n middleware,\n size: 'full',\n isDialog: false,\n isBig: true\n // size: isFirst ? 120 : 'full',\n // withStories: isFirst\n });\n\n if(isFirst) {\n avatarElem.node.classList.add('profile-avatars-avatar-first');\n }\n\n if(photo) {\n const boxSize = 420;\n const photoSize = choosePhotoSize(photo, boxSize, boxSize, false);\n await wrapPhotoToAvatar(avatarElem, photo, boxSize, photoSize);\n } else {\n avatarElem.render({\n peerId: this.peerId\n });\n\n await avatarElem.readyThumbPromise;\n }\n\n avatar.append(avatarElem.node);\n avatar.classList.remove('hide');\n\n return;\n if(photo) {\n const res = await wrapPhoto({\n container: avatar,\n photo,\n size: choosePhotoSize(photo, 420, 420, false),\n withoutPreloader: true\n });\n\n [res.images.thumb, res.images.full].filter(Boolean).forEach((img) => {\n img.classList.add('avatar-photo');\n });\n } else {\n const _avatar = avatarNew({\n middleware,\n size: 'full',\n isBig: true,\n peerId: this.peerId\n });\n await _avatar.readyThumbPromise;\n avatar.append(_avatar.node);\n }\n\n avatar.classList.remove('hide');\n };\n\n if(this.avatars.childElementCount <= LOAD_NEAREST) {\n await loadCallback();\n } else {\n this.intersectionObserver.observe(avatar);\n this.loadCallbacks.set(avatar, loadCallback);\n }\n\n this.addTab();\n\n if(this.tabs.childElementCount === 1) {\n avatar.classList.add('active');\n }\n\n return photoId;\n };\n\n private loadNearestToTarget(target: Element) {\n const children = Array.from(target.parentElement.children);\n const idx = children.indexOf(target);\n const slice = children.slice(Math.max(0, idx - LOAD_NEAREST), Math.min(children.length, idx + LOAD_NEAREST));\n\n slice.forEach((target) => {\n const callback = this.loadCallbacks.get(target);\n if(callback) {\n callback();\n this.loadCallbacks.delete(target);\n this.intersectionObserver.unobserve(target);\n }\n });\n }\n\n private setCollapsed(collapsed: boolean) {\n // * go to the first avatar\n if(!this.isCollapsed() && collapsed && this.listLoader?.index) {\n this.goWithoutTransition(-this.listLoader.index);\n }\n\n this.setCollapsedOn.classList.toggle('is-collapsed', collapsed);\n const needWhite = this.hasBackgroundColor || !collapsed;\n if(this.setCollapsedOn.classList.contains('need-white') !== needWhite) {\n this.setCollapsedOn.classList.toggle('need-white', needWhite);\n changeTitleEmojiColor(this.info, needWhite ? 'white' : 'primary-color');\n }\n this.updateHeaderFilled();\n }\n\n private isCollapsed() {\n return this.setCollapsedOn.classList.contains('is-collapsed');\n }\n\n public updateHeaderFilled() {\n this.setCollapsedOn.classList.toggle(\n 'header-filled',\n (!this.hasBackgroundColor && this.isCollapsed() && this.scrollable.scrollPosition >= 5) ||\n this.scrollable.scrollPosition >= 240\n );\n }\n\n public cleanup() {\n this.listenerSetter.removeAll();\n this.swipeHandler.removeListeners();\n this.intersectionObserver?.disconnect();\n this.middlewareHelper.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_PARALLAX_SUPPORTED from '../environment/parallaxSupport';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport {copyTextToClipboard} from '../helpers/clipboard';\nimport anchorCopy from '../helpers/dom/anchorCopy';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent, simulateClickEvent} from '../helpers/dom/clickEvent';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport safeWindowOpen from '../helpers/dom/safeWindowOpen';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport getWebFileLocation from '../helpers/getWebFileLocation';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport makeError from '../helpers/makeError';\nimport makeGoogleMapsUrl from '../helpers/makeGoogleMapsUrl';\nimport {makeMediaSize} from '../helpers/mediaSize';\nimport {getMiddleware, Middleware, MiddlewareHelper} from '../helpers/middleware';\nimport middlewarePromise from '../helpers/middlewarePromise';\nimport numberThousandSplitter from '../helpers/number/numberThousandSplitter';\nimport pause from '../helpers/schedulers/pause';\nimport {BusinessLocation, BusinessWorkHours, Chat, ChatFull, GeoPoint, HelpTimezonesList, Timezone, UserFull, UserStatus} from '../layer';\nimport appDialogsManager from '../lib/appManagers/appDialogsManager';\nimport appImManager from '../lib/appManagers/appImManager';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getServerMessageId from '../lib/appManagers/utils/messageId/getServerMessageId';\nimport getPeerActiveUsernames from '../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport I18n, {i18n, join} from '../lib/langPack';\nimport {MTAppConfig} from '../lib/mtproto/appConfig';\nimport {HIDDEN_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport wrapRichText from '../lib/richTextProcessor/wrapRichText';\nimport rootScope from '../lib/rootScope';\nimport {avatarNew} from './avatarNew';\nimport BusinessHours from './businessHours';\nimport CheckboxField from './checkboxField';\nimport confirmationPopup from './confirmationPopup';\nimport {generateDelimiter} from './generateDelimiter';\nimport PeerProfileAvatars, {SHOW_NO_AVATAR} from './peerProfileAvatars';\nimport PopupElement from './popups';\nimport PopupToggleReadDate from './popups/toggleReadDate';\nimport Row from './row';\nimport Scrollable from './scrollable';\nimport SettingSection from './settingSection';\nimport {Skeleton} from './skeleton';\nimport {toast, toastNew} from './toast';\nimport formatUserPhone from './wrappers/formatUserPhone';\nimport wrapPeerTitle from './wrappers/peerTitle';\nimport wrapPhoto from './wrappers/photo';\nimport wrapTopicNameButton from './wrappers/topicNameButton';\nimport {batch, createMemo, createRoot, createSignal, JSX} from 'solid-js';\nimport {render} from 'solid-js/web';\nimport detectLanguageForTranslation from '../helpers/detectLanguageForTranslation';\nimport PopupPremium from './popups/premium';\nimport PopupTranslate from './popups/translate';\n\nconst setText = (text: Parameters[1], row: Row) => {\n setInnerHTML(row.title, text || undefined);\n row.container.style.display = text ? '' : 'none';\n};\n\nexport default class PeerProfile {\n public element: HTMLElement;\n private avatars: PeerProfileAvatars;\n private avatar: ReturnType;\n private section: SettingSection;\n private name: HTMLDivElement;\n private subtitle: HTMLDivElement;\n private bio: Row;\n private username: Row;\n private phone: Row;\n private notifications: Row;\n private location: Row;\n private link: Row;\n private businessHours: Row;\n private businessLocation: Row;\n\n private setBusinessHours: (hours: BusinessWorkHours) => void;\n private setTimezones: (timezones: Timezone[]) => void;\n\n private cleaned: boolean;\n private setMoreDetailsTimeout: number;\n private setPeerStatusInterval: number;\n\n private peerId: PeerId;\n private threadId: number;\n\n private _businessLocation: BusinessLocation;\n\n private middlewareHelper: MiddlewareHelper;\n\n private personalChannelSection: SettingSection;\n private personalChannel: Row;\n private personalChannelCounter: HTMLSpanElement;\n\n private bioLanguage: Promise;\n private bioText: string;\n\n constructor(\n private managers: AppManagers,\n private scrollable: Scrollable,\n private listenerSetter?: ListenerSetter,\n private isDialog = true,\n private setCollapsedOn?: HTMLElement,\n private onPersonalChannel?: (has: boolean) => void\n ) {\n if(!IS_PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.add('no-parallax');\n }\n\n if(!listenerSetter) {\n this.listenerSetter = new ListenerSetter();\n }\n\n this.middlewareHelper = getMiddleware();\n }\n\n public init() {\n this.init = null;\n\n this.element = document.createElement('div');\n this.element.classList.add('profile-content');\n\n const personalChannelName = document.createElement('span');\n personalChannelName.append(i18n('AccDescrChannel'));\n personalChannelName.classList.add('personal-channel-name');\n this.personalChannelCounter = document.createElement('span');\n this.personalChannelCounter.classList.add('personal-channel-counter');\n personalChannelName.append(this.personalChannelCounter);\n this.personalChannelSection = new SettingSection({\n name: personalChannelName\n });\n\n appDialogsManager.setListClickListener({\n list: this.personalChannelSection.content,\n autonomous: false,\n openInner: true\n });\n\n // this.personalChannel = new Row({});\n // this.channelSection.content.append(this.personalChannel.container);\n\n this.section = new SettingSection({\n noDelimiter: true\n });\n\n this.name = document.createElement('div');\n this.name.classList.add('profile-name');\n\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add('profile-subtitle');\n\n this.setCollapsedOn.classList.add('profile-container');\n\n this.bio = new Row({\n title: ' ',\n subtitle: true,\n icon: 'info',\n clickable: (e) => {\n if((e.target as HTMLElement).tagName === 'A') {\n return;\n }\n\n copyTextToClipboard(this.bio.title.textContent);\n toast(I18n.format('BioCopied', true));\n },\n listenerSetter: this.listenerSetter,\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Text.CopyLabel_About',\n onClick: () => {\n simulateClickEvent(this.bio.container);\n },\n verify: () => !this.peerId.isUser()\n }, {\n icon: 'copy',\n text: 'Text.CopyLabel_Bio',\n onClick: () => {\n simulateClickEvent(this.bio.container);\n },\n verify: () => this.peerId.isUser()\n }, {\n icon: 'premium_translate',\n text: 'TranslateMessage',\n onClick: async() => {\n if(!rootScope.premium) {\n PopupPremium.show({feature: 'translations'});\n } else {\n PopupElement.createPopup(PopupTranslate, {\n peerId: this.peerId,\n textWithEntities: {\n _: 'textWithEntities',\n text: this.bioText,\n entities: []\n },\n detectedLanguage: await this.bioLanguage\n });\n }\n },\n verify: async() => !!(await this.bioLanguage)\n }]\n }\n });\n\n this.bio.title.classList.add('pre-wrap');\n\n this.username = new Row({\n title: ' ',\n subtitleLangKey: 'Username',\n icon: 'username',\n clickable: () => {\n // const username = await this.managers.appPeersManager.getPeerUsername(this.peerId);\n copyTextToClipboard('@' + this.username.title.textContent);\n toast(I18n.format('UsernameCopied', true));\n },\n listenerSetter: this.listenerSetter,\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Text.CopyLabel_Username',\n onClick: () => {\n simulateClickEvent(this.username.container);\n }\n }]\n }\n });\n\n this.phone = new Row({\n title: ' ',\n subtitle: true,\n icon: 'phone',\n clickable: () => {\n copyTextToClipboard(this.phone.title.textContent.replace(/\\s/g, ''));\n toast(I18n.format('PhoneCopied', true));\n },\n listenerSetter: this.listenerSetter,\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Text.CopyLabel_PhoneNumber',\n onClick: () => {\n simulateClickEvent(this.phone.container);\n }\n }, {\n icon: 'info',\n text: 'PeerInfo.Phone.AnonymousInfo',\n textArgs: [(() => {\n const a = document.createElement('a');\n return a;\n })()],\n onClick: () => {\n safeWindowOpen('https://fragment.com/numbers');\n },\n separator: true,\n secondary: true,\n verify: async() => {\n const {isAnonymous} = await this.managers.appUsersManager.getUserPhone(this.peerId.toUserId()) || {};\n return isAnonymous;\n }\n }]\n }\n });\n\n this.link = new Row({\n title: ' ',\n subtitleLangKey: 'SetUrlPlaceholder',\n icon: 'link',\n clickable: () => {\n const url = 'https://' + this.link.title.textContent;\n copyTextToClipboard(url);\n // Promise.resolve(appProfileManager.getChatFull(this.peerId.toChatId())).then((chatFull) => {\n // copyTextToClipboard(chatFull.exported_invite.link);\n const isPrivate = url.includes('/c/');\n toast(I18n.format(isPrivate ? 'LinkCopiedPrivateInfo' : 'LinkCopied', true));\n // });\n },\n listenerSetter: this.listenerSetter,\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Text.CopyLabel_ShareLink',\n onClick: () => {\n simulateClickEvent(this.link.container);\n }\n }]\n }\n });\n\n this.location = new Row({\n title: ' ',\n subtitleLangKey: 'ChatLocation',\n icon: 'location'\n });\n\n this.businessHours = createRoot((dispose) => {\n this.middlewareHelper.onDestroy(dispose);\n const [hours, setHours] = createSignal();\n const [timezones, setTimezones] = createSignal();\n this.setBusinessHours = setHours;\n this.setTimezones = setTimezones;\n return BusinessHours({hours, timezones});\n });\n\n const copyLocationAddress = () => {\n copyTextToClipboard(this._businessLocation.address);\n toastNew({langPackKey: 'BusinessLocationCopied'});\n };\n\n this.businessLocation = new Row({\n title: true,\n subtitleLangKey: 'BusinessProfileLocation',\n icon: 'location',\n clickable: async() => {\n const location = this._businessLocation;\n if(!location.geo_point) {\n copyLocationAddress();\n return;\n }\n\n await confirmationPopup({\n descriptionLangKey: 'Popup.OpenInGoogleMaps',\n button: {\n langKey: 'Open'\n }\n });\n\n safeWindowOpen(makeGoogleMapsUrl(location.geo_point as GeoPoint.geoPoint));\n },\n contextMenu: {\n buttons: [{\n icon: 'copy',\n text: 'Copy',\n onClick: copyLocationAddress\n }]\n },\n listenerSetter: this.listenerSetter\n });\n\n this.businessLocation.container.classList.add('business-location');\n\n this.section.content.append(\n this.phone.container,\n this.username.container,\n this.location.container,\n this.bio.container,\n this.link.container,\n this.businessHours.container,\n this.businessLocation.container\n );\n\n const {listenerSetter} = this;\n if(this.isDialog) {\n this.notifications = new Row({\n checkboxField: new CheckboxField({toggle: true}),\n titleLangKey: 'Notifications',\n icon: 'unmute',\n listenerSetter: this.listenerSetter\n });\n\n listenerSetter.add(this.notifications.checkboxField.input)('change', (e) => {\n if(!e.isTrusted) {\n return;\n }\n\n // let checked = this.notificationsCheckbox.checked;\n this.managers.appMessagesManager.togglePeerMute({peerId: this.peerId, threadId: this.threadId});\n });\n\n listenerSetter.add(rootScope)('dialog_notify_settings', async(dialog) => {\n if(this.peerId === dialog.peerId) {\n const muted = await this.managers.appNotificationsManager.isPeerLocalMuted({peerId: this.peerId, respectType: false, threadId: this.threadId});\n this.notifications.checkboxField.checked = !muted;\n }\n });\n\n this.section.content.append(this.notifications.container);\n }\n\n this.element.append(this.personalChannelSection.container, this.section.container);\n\n if(IS_PARALLAX_SUPPORTED) {\n this.element.append(generateDelimiter());\n }\n\n listenerSetter.add(rootScope)('peer_typings', ({peerId}) => {\n if(this.peerId === peerId) {\n this.setPeerStatus();\n }\n });\n\n listenerSetter.add(rootScope)('peer_bio_edit', (peerId) => {\n if(peerId === this.peerId) {\n this.setMoreDetails(true);\n }\n });\n\n const n = async({peerId, threadId}: {peerId: PeerId, threadId?: number}) => {\n if(this.peerId !== peerId) {\n return false;\n }\n\n const isForum = this.peerId.isAnyChat() ? await this.managers.appPeersManager.isForum(this.peerId) : false;\n if(isForum && this.threadId ? this.threadId === threadId : true) {\n return true;\n }\n\n return false;\n };\n\n listenerSetter.add(rootScope)('peer_title_edit', async(data) => {\n const middleware = this.middlewareHelper.get();\n if(await n(data)) {\n if(!middleware()) return;\n this.fillUsername().then((callback) => {\n if(!middleware()) return;\n callback?.();\n });\n this.setMoreDetails(true);\n }\n });\n\n listenerSetter.add(rootScope)('user_update', (userId) => {\n if(this.peerId === userId.toPeerId()) {\n this.setPeerStatus();\n }\n });\n\n listenerSetter.add(rootScope)('contacts_update', async(userId) => {\n if(this.peerId === userId.toPeerId()) {\n const user = await this.managers.appUsersManager.getUser(userId);\n if(!user.pFlags.self || !this.isDialog) {\n this.fillUserPhone();\n }\n }\n });\n\n listenerSetter.add(rootScope)('avatar_update', async(data) => {\n if(await n(data)) {\n this.setAvatar();\n }\n });\n\n const refreshCurrentUser = () => {\n if(this.peerId.isUser()) {\n this.managers.appUsersManager.getApiUsers([this.peerId.toUserId()]);\n }\n };\n\n // * refresh user online status\n listenerSetter.add(rootScope)('premium_toggle', refreshCurrentUser);\n listenerSetter.add(rootScope)('privacy_update', (updatePrivacy) => {\n if(updatePrivacy.key._ === 'privacyKeyStatusTimestamp') {\n refreshCurrentUser();\n }\n });\n\n this.setPeerStatusInterval = window.setInterval(() => this.setPeerStatus(), 60e3);\n }\n\n private async setPeerStatus(\n needClear = false,\n manual?: T\n ): Promise void : void> {\n const peerId = this.peerId;\n\n const callbacks: Array<() => void> = [];\n callbacks.push(() => {\n this.element.classList.toggle('is-me', peerId === rootScope.myId);\n if(peerId.isUser()) {\n const user = apiManagerProxy.getUser(peerId.toUserId());\n if((user.status as UserStatus.userStatusRecently)?.pFlags?.by_me) {\n // Don't append the when element if it's already been added\n if(this.subtitle.querySelector('.show-when')) {\n return;\n }\n\n const when = i18n('StatusHiddenShow');\n when.classList.add('show-when');\n attachClickEvent(when, (e) => {\n cancelEvent(e);\n PopupElement.createPopup(PopupToggleReadDate, peerId, 'lastSeen');\n });\n this.subtitle.append(when);\n }\n }\n });\n\n let promise: Promise<(() => void) | void> = Promise.resolve();\n if(!(!peerId || (rootScope.myId === peerId && this.isDialog)) && peerId !== HIDDEN_PEER_ID) {\n const isForum = await this.managers.appPeersManager.isForum(this.peerId);\n const middleware = this.middlewareHelper.get();\n if(isForum && this.threadId) {\n promise = wrapTopicNameButton({\n peerId,\n wrapOptions: {\n middleware\n }\n }).then(({element}) => {\n this.subtitle.replaceChildren(element);\n });\n } else {\n promise = appImManager.setPeerStatus({\n peerId,\n element: this.subtitle,\n needClear,\n useWhitespace: true,\n middleware,\n ignoreSelf: !this.isDialog\n });\n }\n\n promise.then((callback) => callback && callbacks.unshift(callback));\n }\n\n const callback = () => callbacks.forEach((callback) => callback());\n\n return promise.then(() => {\n if(manual) {\n return callback;\n }\n\n callback();\n }) as any;\n }\n\n public cleanupHTML() {\n [\n this.bio,\n this.phone,\n this.username,\n this.location,\n this.link,\n this.businessHours,\n this.businessLocation,\n this.personalChannelSection\n ].forEach((row) => {\n row.container.style.display = 'none';\n });\n\n if(this.notifications) {\n this.notifications.container.style.display = '';\n this.notifications.checkboxField.checked = true;\n }\n\n this.clearSetMoreDetailsTimeout();\n }\n\n private isSavedDialog() {\n return !!(this.peerId === rootScope.myId && this.threadId);\n }\n\n private getDetailsForUse() {\n const {peerId, threadId} = this;\n return this.isSavedDialog() ? {\n peerId: threadId,\n threadId: undefined\n } : {\n peerId,\n threadId\n };\n }\n\n private canBeDetailed() {\n return this.peerId !== rootScope.myId || !this.isDialog;\n }\n\n private async _setAvatar() {\n const middleware = this.middlewareHelper.get();\n const {peerId, threadId} = this.getDetailsForUse();\n const isTopic = !!(threadId && await this.managers.appPeersManager.isForum(peerId));\n if(/* this.canBeDetailed() && */!isTopic) {\n const photo = await this.managers.appPeersManager.getPeerPhoto(peerId);\n\n if(photo || SHOW_NO_AVATAR) {\n const oldAvatars = this.avatars;\n this.avatars = new PeerProfileAvatars(this.scrollable, this.managers, this.setCollapsedOn);\n await this.avatars.setPeer(peerId);\n const nameCallback = await this.fillName(middleware, this.setCollapsedOn.classList.contains('need-white'));\n\n return () => {\n nameCallback();\n\n this.avatars.info.append(this.name, this.subtitle);\n\n if(this.avatar) this.avatar.node.remove();\n this.avatar = undefined;\n\n if(oldAvatars) oldAvatars.container.replaceWith(this.avatars.container);\n else this.element.prepend(this.avatars.container);\n\n if(IS_PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.add('parallax');\n }\n\n this.section.content.classList.remove('has-simple-avatar');\n };\n }\n }\n\n const avatar = avatarNew({\n middleware,\n size: 120,\n isDialog: this.isDialog,\n peerId,\n threadId: isTopic ? threadId : undefined,\n wrapOptions: {\n customEmojiSize: makeMediaSize(120, 120),\n middleware\n },\n withStories: true,\n meAsNotes: !!(peerId === rootScope.myId && this.threadId)\n });\n avatar.node.classList.add('profile-avatar', 'avatar-120');\n const [nameCallback] = await Promise.all([\n this.fillName(middleware, false),\n avatar.readyThumbPromise\n ]);\n\n return () => {\n nameCallback();\n\n if(IS_PARALLAX_SUPPORTED) {\n this.scrollable.container.classList.remove('parallax');\n }\n\n if(this.avatars) {\n this.avatars.container.remove();\n this.avatars.cleanup();\n this.avatars = undefined;\n }\n\n if(this.avatar) this.avatar.node.remove();\n this.avatar = avatar;\n\n this.section.content.classList.add('has-simple-avatar');\n this.section.content.prepend(this.avatar.node, this.name, this.subtitle);\n };\n }\n\n private setAvatar(manual?: T): T extends true ? Promise<() => void> : Promise {\n const promise = this._setAvatar();\n return manual ? promise : promise.then((callback) => callback()) as any;\n }\n\n private getUsernamesAlso(usernames: string[]) {\n const also = usernames.slice(1);\n if(also.length) {\n const a = also.map((username) => anchorCopy({username}));\n const i = i18n('UsernameAlso', [join(a, false)]);\n return i;\n }\n }\n\n private async fillUsername() {\n const {peerId} = this;\n if(peerId.isUser() && this.canBeDetailed()) {\n const usernames = await this.managers.appPeersManager.getPeerActiveUsernames(peerId);\n const also = this.getUsernamesAlso(usernames);\n\n return () => {\n this.username.subtitle.replaceChildren(also || i18n('Username'));\n setText(usernames[0], this.username);\n };\n }\n }\n\n private async fillUserPhone() {\n const {peerId} = this;\n if(peerId.isUser() && this.canBeDetailed()) {\n const {phone, isAnonymous} = await this.managers.appUsersManager.getUserPhone(peerId.toUserId()) || {};\n\n return () => {\n this.phone.subtitle.replaceChildren(i18n(isAnonymous ? 'AnonymousNumber' : 'Phone'));\n setText(phone ? formatUserPhone(phone) : undefined, this.phone);\n };\n }\n }\n\n private async fillNotifications() {\n const notificationsRow = this.notifications;\n if(!notificationsRow) {\n return;\n }\n\n if(this.canBeDetailed()) {\n const muted = await this.managers.appNotificationsManager.isPeerLocalMuted({peerId: this.peerId, respectType: false, threadId: this.threadId});\n return () => {\n notificationsRow.checkboxField.checked = !muted;\n };\n } else {\n return () => {\n // fastRaf(() => {\n notificationsRow.container.style.display = 'none';\n // });\n };\n }\n }\n\n private async fillName(middleware: Middleware, white?: boolean) {\n const {peerId} = this.getDetailsForUse();\n const [element/* , icons */] = await Promise.all([\n wrapPeerTitle({\n peerId,\n dialog: this.isDialog,\n withIcons: !this.threadId,\n threadId: this.threadId,\n wrapOptions: {\n middleware,\n textColor: white ? 'white' : undefined\n },\n meAsNotes: !!(peerId === rootScope.myId && this.threadId)\n })\n\n // generateTitleIcons(peerId)\n ]);\n\n return () => {\n replaceContent(this.name, element);\n // this.name.append(...icons);\n };\n }\n\n private async fillRows(manual: Promise) {\n return Promise.all([\n this.fillUsername(),\n this.fillUserPhone(),\n this.fillNotifications(),\n this.setMoreDetails(undefined, manual),\n this.setPeerStatus(true, true)\n ]).then((callbacks) => {\n return () => {\n callbacks.forEach((callback) => callback?.());\n };\n });\n }\n\n public async fillProfileElements() {\n if(!this.cleaned) return;\n this.cleaned = false;\n\n this.cleanupHTML();\n const deferred = deferredPromise();\n const middleware = this.middlewareHelper.get();\n middleware.onClean(() => {\n deferred.reject();\n });\n\n const callbacks = await Promise.all([\n this.setAvatar(true),\n this.fillRows(deferred)\n ]);\n\n return () => {\n deferred.resolve();\n callbacks.forEach((callback) => callback?.());\n };\n }\n\n private async _setMoreDetails(\n peerId: PeerId,\n peerFull: ChatFull | UserFull,\n appConfig: MTAppConfig,\n timezones: Timezone[]\n ) {\n const middleware = this.middlewareHelper.get().create().get();\n const m = this.getMiddlewarePromise();\n const isTopic = !!(this.threadId && await m(this.managers.appPeersManager.isForum(peerId)));\n const isPremium = peerId.isUser() ? await m(this.managers.appUsersManager.isPremium(peerId.toUserId())) : undefined;\n if(isTopic) {\n let url = 't.me/';\n const threadId = getServerMessageId(this.threadId);\n const username = await m(this.managers.appPeersManager.getPeerUsername(peerId));\n if(username) {\n url += `${username}/${threadId}`;\n } else {\n url += `c/${peerId.toChatId()}/${threadId}`;\n }\n\n return () => {\n setText(url, this.link);\n };\n }\n\n const callbacks: (() => void)[] = [];\n // if(peerFull.about) {\n callbacks.push(() => {\n this.bio.subtitle.replaceChildren(i18n(peerId.isUser() ? 'UserBio' : 'Info'));\n setText(peerFull.about ? wrapRichText(peerFull.about, {\n whitelistedDomains: isPremium ? undefined : appConfig.whitelisted_domains\n }) : undefined, this.bio);\n this.bioLanguage = detectLanguageForTranslation(this.bioText = peerFull.about);\n });\n // }\n\n if(!peerId.isUser()) {\n const chat = await m(this.managers.appChatsManager.getChat(peerId.toChatId())) as Chat.channel;\n const usernames = getPeerActiveUsernames(chat);\n let also: HTMLElement;\n if(usernames.length) {\n also = this.getUsernamesAlso(usernames);\n callbacks.push(() => setText('t.me/' + usernames[0], this.link));\n } else {\n const exportedInvite = (peerFull as ChatFull.channelFull).exported_invite;\n if(exportedInvite?._ === 'chatInviteExported') {\n callbacks.push(() => setText(exportedInvite.link.slice(exportedInvite.link.indexOf('t.me/')), this.link));\n }\n }\n\n callbacks.push(() => this.link.subtitle.replaceChildren(also || i18n('SetUrlPlaceholder')));\n }\n\n const location = (peerFull as ChatFull.channelFull).location;\n if(location?._ == 'channelLocation') {\n callbacks.push(() => setText(location.address, this.location));\n }\n\n const workHours = (peerFull as UserFull).business_work_hours;\n if(workHours) {\n batch(() => {\n this.setBusinessHours(workHours);\n this.setTimezones(timezones);\n });\n }\n\n callbacks.push(() => {\n this.businessHours.container.style.display = workHours ? '' : 'none';\n });\n\n const businessLocation = (peerFull as UserFull).business_location;\n this._businessLocation = businessLocation;\n if(businessLocation) {\n const geo = businessLocation.geo_point as GeoPoint.geoPoint;\n callbacks.push(() => {\n setText(wrapEmojiText(businessLocation.address), this.businessLocation);\n if(!geo) {\n this.businessLocation.media?.remove();\n }\n });\n\n if(geo) {\n const media = this.businessLocation.createMedia('big');\n media.remove();\n const loadPromises: Promise[] = [];\n wrapPhoto({\n photo: getWebFileLocation(geo, 48, 48, 16),\n container: media,\n middleware,\n onRender: () => {\n if(!middleware() || this._businessLocation !== businessLocation) {\n return;\n }\n\n this.businessLocation.container.append(media);\n },\n loadPromises\n });\n\n await Promise.all(loadPromises);\n }\n }\n\n callbacks.push(() => {\n this.businessLocation.container.style.display = businessLocation ? '' : 'none';\n });\n\n const personalChannelId = (peerFull as UserFull).personal_channel_id;\n if(personalChannelId) {\n const peerId = personalChannelId.toPeerId(true);\n const mid = (peerFull as UserFull).personal_channel_message;\n const chat = apiManagerProxy.getChat(personalChannelId) as Chat.channel;\n\n const loadPromises: Promise[] = [];\n const list = appDialogsManager.createChatList();\n const dialogElement = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n append: true,\n wrapOptions: {middleware},\n withStories: true,\n loadPromises\n });\n\n dialogElement.container.classList.add('personal-channel');\n\n const makeSkeleton = (props: {\n element: HTMLElement,\n middleware: Middleware\n }) => {\n const [children, setChildren] = createSignal();\n const dispose = render(() => {\n return Skeleton({\n children,\n loading: createMemo(() => !children())\n });\n }, props.element);\n\n props.element.classList.add('skeleton-container');\n props.middleware.onDestroy(dispose);\n\n return setChildren;\n };\n\n const TEST = false;\n const isCached = !!apiManagerProxy.getMessageByPeer(peerId, mid) && !TEST;\n const messagePromise = this.managers.appMessagesManager.reloadMessages(peerId, mid);\n const readyPromise = messagePromise.then(async(message) => {\n TEST && await pause(1000);\n await appDialogsManager.setLastMessageN({\n dialog: {\n _: 'dialog',\n peerId\n } as any,\n lastMessage: message,\n dialogElement\n });\n\n setSubtitleChildren?.(dialogElement.subtitle);\n setTimeChildren?.(dialogElement.dom.lastTimeSpan);\n });\n\n let setSubtitleChildren: (children: JSX.Element) => void, setTimeChildren: (children: JSX.Element) => void;\n if(!isCached) {\n const _subtitle = dialogElement.subtitle.cloneNode(true) as HTMLElement;\n dialogElement.subtitle.replaceWith(_subtitle);\n setSubtitleChildren = makeSkeleton({\n element: _subtitle,\n middleware\n });\n\n const timeSpan = dialogElement.dom.lastTimeSpan.cloneNode(true) as HTMLElement;\n dialogElement.dom.lastTimeSpan.replaceWith(timeSpan);\n setTimeChildren = makeSkeleton({\n element: timeSpan,\n middleware\n });\n }\n\n if(isCached) {\n loadPromises.push(readyPromise);\n }\n\n callbacks.push(() => {\n this.personalChannelCounter.replaceChildren(i18n('Subscribers', [numberThousandSplitter(chat.participants_count)]));\n const oldList = this.personalChannelSection.content.querySelector('.chatlist');\n oldList?.remove();\n this.personalChannelSection.content.append(list);\n });\n\n await Promise.all(loadPromises);\n }\n\n callbacks.push(() => {\n this.personalChannelSection.container.style.display = personalChannelId ? '' : 'none';\n this.onPersonalChannel?.(!!personalChannelId);\n });\n\n this.setMoreDetailsTimeout = window.setTimeout(() => this.setMoreDetails(true), 60e3);\n\n return () => {\n callbacks.forEach((callback) => callback());\n };\n }\n\n private async setMoreDetails(override?: true, manual?: Promise) {\n this.clearSetMoreDetailsTimeout();\n\n const {peerId} = this;\n const m = this.getMiddlewarePromise();\n\n if(!peerId || !this.canBeDetailed() || await m(this.managers.appPeersManager.isPeerRestricted(peerId))) {\n return;\n }\n\n const results = await m(Promise.all([\n this.managers.acknowledged.appProfileManager.getProfileByPeerId(peerId, override),\n this.managers.acknowledged.apiManager.getAppConfig(),\n this.managers.acknowledged.apiManager.getTimezonesList()\n ]));\n const promises = results.map((result) => result.result) as [Promise, Promise, Promise];\n const setPromise = m(Promise.all(promises)).then(async([peerFull, appConfig, timezonesList]) => {\n if(await m(this.managers.appPeersManager.isPeerRestricted(peerId))) {\n // this.log.warn('peer changed');\n return;\n }\n\n return m(this._setMoreDetails(peerId, peerFull, appConfig, timezonesList.timezones));\n });\n\n if(results.every((result) => result.cached) && manual) {\n return setPromise;\n } else {\n (manual || Promise.resolve())\n .then(() => setPromise)\n .then((callback) => {\n callback?.();\n });\n }\n }\n\n private getMiddlewarePromise() {\n return middlewarePromise(this.middlewareHelper.get(), makeError('MIDDLEWARE'));\n }\n\n public setPeer(peerId: PeerId, threadId?: number) {\n if(this.peerId === peerId && this.threadId === threadId) return;\n\n this.init?.();\n\n this.peerId = peerId;\n this.threadId = threadId;\n\n this.middlewareHelper.clean();\n this.cleaned = true;\n }\n\n public clearSetMoreDetailsTimeout() {\n if(this.setMoreDetailsTimeout !== undefined) {\n clearTimeout(this.setMoreDetailsTimeout);\n this.setMoreDetailsTimeout = undefined;\n }\n }\n\n public destroy() {\n this.peerId = this.threadId = undefined;\n this.clearSetMoreDetailsTimeout();\n clearInterval(this.setPeerStatusInterval);\n this.avatars?.cleanup();\n this.middlewareHelper.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport {makeMediaSize} from '../../../helpers/mediaSize';\nimport copy from '../../../helpers/object/copy';\nimport deepEqual from '../../../helpers/object/deepEqual';\nimport {ForumTopic} from '../../../layer';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport {GENERAL_TOPIC_ID, TOPIC_COLORS} from '../../../lib/mtproto/mtproto_config';\nimport getAbbreviation from '../../../lib/richTextProcessor/getAbbreviation';\nimport ButtonIcon from '../../buttonIcon';\nimport CheckboxField from '../../checkboxField';\nimport EmojiTab from '../../emoticonsDropdown/tabs/emoji';\nimport InputField from '../../inputField';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport appSidebarLeft from '../../sidebarLeft';\nimport SliderSuperTab from '../../sliderTab';\nimport {wrapTopicIcon} from '../../wrappers/messageActionTextNewUnsafe';\n\nconst size = 64;\nconst mediaSize = makeMediaSize(size, size);\n\nexport default class AppEditTopicTab extends SliderSuperTab {\n private iconDiv: HTMLElement;\n private colorIndex: number;\n private nameInputField: InputField;\n private topic: Parameters[0]['topic'];\n private emojiElement: HTMLElement;\n private confirmBtn: HTMLButtonElement;\n private originalTopic: ForumTopic.forumTopic;\n\n public async init(peerId: PeerId, threadId?: number) {\n this.colorIndex = 0;\n const isNew = !threadId;\n const isGeneral = threadId === GENERAL_TOPIC_ID;\n this.container.classList.add('edit-topic-container');\n this.setTitle(isNew ? 'NewTopic' : 'ForumTopic.Title.Edit');\n const chatId = peerId.toChatId();\n\n if(threadId) {\n this.topic = this.originalTopic = copy(await this.managers.dialogsStorage.getForumTopic(peerId, threadId));\n }\n\n {\n const section = new SettingSection({\n name: isGeneral ? 'CreateGeneralTopicTitle' : 'CreateTopicTitle'\n });\n\n const iconDiv = this.iconDiv = document.createElement('div');\n iconDiv.classList.add('edit-topic-icon-container');\n\n !threadId && attachClickEvent(iconDiv, () => {\n if(this.topic.icon_emoji_id) {\n return;\n }\n\n this.colorIndex = (this.colorIndex + 1) % TOPIC_COLORS.length;\n this.setIcon();\n }, {listenerSetter: this.listenerSetter});\n\n if(threadId) {\n iconDiv.classList.add('disable-hover');\n }\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const nameInputField = this.nameInputField = new InputField({\n label: 'ForumTopic.Name.Placeholder',\n withLinebreaks: false,\n name: 'topic-name',\n maxLength: 70,\n required: true\n });\n\n if(this.topic) {\n nameInputField.setOriginalValue(this.topic.title, true);\n }\n\n const confirmBtn = this.confirmBtn = ButtonIcon('check btn-confirm blue hide', {noRipple: true});\n this.header.append(confirmBtn);\n\n attachClickEvent(confirmBtn, () => {\n const toggle = toggleDisability([confirmBtn], true);\n if(threadId) {\n this.managers.appChatsManager.editForumTopic({\n chatId,\n topicId: threadId,\n title: nameInputField.value,\n iconEmojiId: this.topic.icon_emoji_id || 0\n }).then(() => {\n this.close();\n }).catch((err) => {\n console.error('edit topic error', err);\n toggle();\n });\n } else {\n this.managers.appChatsManager.createForumTopic({\n chatId,\n iconColor: TOPIC_COLORS[this.colorIndex],\n iconEmojiId: this.topic.icon_emoji_id,\n title: nameInputField.value\n }).then((threadId) => {\n this.close();\n appImManager.setInnerPeer({\n peerId,\n threadId\n });\n }).catch((err) => {\n console.error('create topic error', err);\n toggle();\n });\n }\n }, {listenerSetter: this.listenerSetter});\n\n this.listenerSetter.add(nameInputField.input)('input', () => {\n this.validate();\n this.setIcon(this.topic?.icon_emoji_id);\n });\n\n inputWrapper.append(nameInputField.container);\n\n section.content.append(iconDiv, inputWrapper);\n\n this.scrollable.append(section.container);\n }\n\n const promises: Promise[] = [];\n\n if(!isGeneral) {\n const section = new SettingSection({});\n section.container.classList.add('edit-topic-emoticons-container');\n const emojiTab = new EmojiTab({\n managers: this.managers,\n isStandalone: true,\n noRegularEmoji: true,\n mainSets: () => {\n return this.managers.appStickersManager.getLocalStickerSet('inputStickerSetEmojiDefaultTopicIcons')\n .then((messagesStickerSet) => messagesStickerSet.documents.map((doc) => doc.id));\n },\n onClick: (emoji) => {\n emojiTab.setActive(!emoji.docId ? {emoji: undefined, docId: undefined} : emoji);\n this.setIcon(emoji.docId);\n }\n });\n emojiTab.getContainerSize = () => ({\n width: appSidebarLeft.rect.width,\n height: 400\n });\n\n this.middlewareHelper.onDestroy(() => {\n emojiTab.destroy();\n });\n\n emojiTab.container.classList.remove('tabs-tab');\n\n this.emojiElement = document.createElement('span');\n this.emojiElement.classList.add('super-emoji-topic-icon');\n\n const promise = emojiTab.init().then(async() => {\n const category = emojiTab.getCustomCategory();\n\n const iconEmojiId = this.topic?.icon_emoji_id;\n emojiTab.addEmojiToCategory({\n category,\n element: this.emojiElement,\n batch: false,\n prepend: true,\n active: !iconEmojiId\n });\n\n if(iconEmojiId) {\n emojiTab.setActive({docId: iconEmojiId, emoji: ''});\n }\n });\n\n promises.push(promise);\n\n section.content.replaceWith(emojiTab.container);\n this.scrollable.append(section.container);\n } else {\n const section = new SettingSection({caption: 'EditTopicHideInfo'});\n\n const checkboxField = new CheckboxField({\n // toggle: true,\n checked: !(this.topic as ForumTopic.forumTopic).pFlags.hidden,\n text: 'EditTopicHide'\n });\n\n this.listenerSetter.add(checkboxField.input)('change', () => {\n const promise = this.managers.appChatsManager.editForumTopic({\n chatId,\n topicId: threadId,\n hidden: !checkboxField.checked\n });\n\n row.disableWithPromise(promise);\n });\n\n const row = new Row({\n checkboxField\n });\n\n section.content.append(row.container);\n\n this.scrollable.append(section.container);\n }\n\n return Promise.all(promises).then(() => {\n return this.s();\n });\n }\n\n private validate() {\n let isChanged = this.nameInputField.isValidToChange();\n if(!isChanged && this.originalTopic) {\n isChanged = this.topic.icon_emoji_id !== this.originalTopic.icon_emoji_id;\n }\n\n this.confirmBtn.classList.toggle('hide', !isChanged);\n }\n\n private s() {\n if(this.topic?.icon_color) {\n this.colorIndex = TOPIC_COLORS.indexOf(this.topic.icon_color);\n }\n\n return this.setIcon(this.topic?.icon_emoji_id, undefined, true);\n }\n\n private async setIcon(iconEmojiId?: Long, appendTo = this.iconDiv, force?: boolean) {\n const title = this.nameInputField.value;\n\n const isMainIcon = appendTo === this.iconDiv;\n\n if(isMainIcon) {\n const newTopic: AppEditTopicTab['topic'] = {\n id: this.topic?.id,\n icon_color: TOPIC_COLORS[this.colorIndex],\n title: getAbbreviation(title, true).text || 'A',\n icon_emoji_id: iconEmojiId\n };\n\n const oldTopic = this.topic;\n this.topic = newTopic;\n\n if(\n force ||\n !oldTopic ||\n oldTopic.icon_color !== newTopic.icon_color ||\n oldTopic.title !== newTopic.title\n ) {\n this.setIcon(undefined, this.emojiElement);\n }\n\n if(deepEqual(oldTopic, newTopic) && !force) {\n return;\n }\n\n this.validate();\n }\n\n const el = await wrapTopicIcon({\n topic: isMainIcon ? this.topic : {...this.topic, icon_emoji_id: undefined},\n customEmojiSize: mediaSize,\n middleware: this.middlewareHelper.get()\n });\n\n const span = document.createElement('div');\n span.classList.add('edit-topic-icon');\n span.append(el);\n\n const oldEl = appendTo.lastElementChild as HTMLElement;\n appendTo.append(span);\n\n const applyFadeAnimation = (el: HTMLElement, fadeIn: boolean) => {\n const frames: Keyframe[] = [\n {opacity: '0', transform: 'scale(0.8)'},\n {opacity: '1', transform: 'scale(1)'}\n ];\n\n const animation = el.animate(frames, {\n duration: 200,\n iterations: 1,\n easing: 'ease-in-out',\n fill: 'forwards',\n direction: fadeIn ? 'normal' : 'reverse'\n });\n\n return new Promise((resolve) => {\n animation.addEventListener('finish', () => {\n resolve();\n }, {once: true});\n });\n };\n\n if(oldEl) {\n applyFadeAnimation(oldEl, false).then(() => oldEl.remove());\n }\n\n applyFadeAnimation(span, true);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport InputField from '../../inputField';\nimport {SliderSuperTab} from '../../slider';\nimport EditPeer from '../../editPeer';\nimport {UsernameInputField} from '../../usernameInputField';\nimport {i18n, i18n_, LangPackKey} from '../../../lib/langPack';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport rootScope from '../../../lib/rootScope';\nimport setBlankToAnchor from '../../../lib/richTextProcessor/setBlankToAnchor';\nimport getPeerEditableUsername from '../../../lib/appManagers/utils/peers/getPeerEditableUsername';\nimport SettingSection, {generateSection} from '../../settingSection';\nimport UsernamesSection from '../../usernamesSection';\nimport {purchaseUsernameCaption} from '../../sidebarLeft/tabs/editProfile';\nimport Button from '../../button';\nimport wrapUrl from '../../../lib/richTextProcessor/wrapUrl';\n\nexport default class AppEditBotTab extends SliderSuperTab {\n private firstNameInputField: InputField;\n private aboutInputField: InputField;\n private usernameInputField: UsernameInputField;\n\n private editPeer: EditPeer;\n\n public async init(peerId: PeerId) {\n const botId = peerId.toUserId();\n this.container.classList.add('edit-profile-container');\n this.setTitle('EditBot.Title');\n\n const inputFields: InputField[] = [];\n\n const [bioMaxLength, user, botInfo] = await Promise.all([\n this.managers.apiManager.getLimit('bio'),\n this.managers.appUsersManager.getUser(botId),\n this.managers.appProfileManager.getBotInfo(botId)\n ]);\n\n {\n const section = generateSection(this.scrollable, undefined);\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.firstNameInputField = new InputField({\n label: 'EditProfile.FirstNameLabel',\n name: 'first-name',\n maxLength: 70\n });\n this.aboutInputField = new InputField({\n label: 'DescriptionPlaceholder',\n name: 'bio',\n maxLength: bioMaxLength\n });\n\n inputWrapper.append(this.firstNameInputField.container, this.aboutInputField.container);\n\n inputFields.push(this.firstNameInputField, this.aboutInputField);\n\n this.editPeer = new EditPeer({\n peerId,\n inputFields,\n listenerSetter: this.listenerSetter,\n middleware: this.middlewareHelper.get()\n });\n\n this.content.append(this.editPeer.nextBtn);\n\n section.append(this.editPeer.avatarEdit.container, inputWrapper);\n }\n\n {\n const section = generateSection(this.scrollable, undefined, 'EditBot.Buttons.Caption');\n\n const btnIntro = Button('btn-primary btn-transparent', {icon: 'info', text: 'EditBot.Buttons.Intro', asLink: true});\n const btnCommands = Button('btn-primary btn-transparent', {icon: 'botcom', text: 'EditBot.Buttons.Commands', asLink: true});\n const btnSettings = Button('btn-primary btn-transparent', {icon: 'bots', text: 'EditBot.Buttons.Settings', asLink: true});\n\n const url = 't.me/botfather?start=' + getPeerEditableUsername(user);\n const arr: [HTMLAnchorElement, string][] = [\n [btnIntro, 'intro'],\n [btnCommands, 'commands'],\n [btnSettings, '']\n ];\n\n arr.forEach(([anchor, suffix]) => {\n const wrapped = wrapUrl(url + (suffix ? '-' + suffix : ''));\n anchor.href = wrapped.url;\n anchor.setAttribute('onclick', wrapped.onclick + '(this)');\n });\n\n section.append(btnIntro, btnCommands, btnSettings);\n }\n\n {\n const section = new SettingSection({\n name: 'EditAccount.Username',\n caption: true\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.usernameInputField = new UsernameInputField({\n label: 'Username',\n name: 'username',\n plainText: true,\n listenerSetter: this.listenerSetter,\n onChange: () => {\n this.editPeer.handleChange();\n\n const {error} = this.usernameInputField;\n const isPurchase = error?.type === 'USERNAME_PURCHASE_AVAILABLE';\n setUsername(isPurchase ? this.usernameInputField.value : undefined);\n },\n availableText: 'EditProfile.Username.Available',\n takenText: 'EditProfile.Username.Taken',\n invalidText: 'EditProfile.Username.Invalid'\n }, this.managers);\n\n inputWrapper.append(this.usernameInputField.container);\n\n const caption = section.caption;\n\n const {setUsername, element: p} = purchaseUsernameCaption();\n\n caption.append(\n i18n('EditBot.Username.Caption'),\n p\n );\n\n inputFields.push(this.usernameInputField);\n section.content.append(inputWrapper);\n this.scrollable.append(section.container);\n }\n\n {\n const section = new UsernamesSection({\n peerId,\n peer: user,\n listenerSetter: this.listenerSetter,\n usernameInputField: this.usernameInputField,\n middleware: this.middlewareHelper.get()\n });\n\n this.scrollable.append(section.container);\n }\n\n attachClickEvent(this.editPeer.nextBtn, () => {\n this.editPeer.nextBtn.disabled = true;\n\n const promises: Promise[] = [];\n\n const profilePromise = this.managers.appProfileManager.setBotInfo(\n botId,\n this.firstNameInputField.value,\n this.aboutInputField.value\n );\n promises.push(profilePromise.then(() => {\n this.close();\n }, (err) => {\n console.error('updateProfile error:', err);\n }));\n\n if(this.editPeer.uploadAvatar) {\n promises.push(this.editPeer.uploadAvatar().then((inputFile) => {\n return this.managers.appProfileManager.uploadProfilePhoto(inputFile, botId);\n }));\n }\n\n if(this.usernameInputField.isValidToChange()) {\n promises.push(this.managers.appUsersManager.updateUsername(this.usernameInputField.value));\n }\n\n Promise.race(promises).finally(() => {\n this.editPeer.nextBtn.removeAttribute('disabled');\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.firstNameInputField.setOriginalValue(user.first_name, true);\n this.aboutInputField.setOriginalValue(botInfo.about, true);\n this.usernameInputField.setOriginalValue(getPeerEditableUsername(user), true);\n\n this.editPeer.handleChange();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport rootScope, {BroadcastEvents} from '../../../lib/rootScope';\nimport AppSearchSuper, {SearchSuperMediaTab, SearchSuperType} from '../../appSearchSuper.';\nimport SidebarSlider, {SliderSuperTab} from '../../slider';\nimport TransitionSlider from '../../transition';\nimport AppEditChatTab from './editChat';\nimport AppEditContactTab from './editContact';\nimport Button from '../../button';\nimport ButtonIcon from '../../buttonIcon';\nimport I18n, {LangPackKey, i18n} from '../../../lib/langPack';\nimport ButtonCorner from '../../buttonCorner';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport PeerProfile from '../../peerProfile';\nimport {Chat, Message} from '../../../layer';\nimport getMessageThreadId from '../../../lib/appManagers/utils/messages/getMessageThreadId';\nimport AppEditTopicTab from './editTopic';\nimport liteMode from '../../../helpers/liteMode';\nimport AppEditBotTab from './editBot';\nimport addChatUsers from '../../addChatUsers';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\nimport ButtonMenuToggle from '../../buttonMenuToggle';\nimport appImManager from '../../../lib/appManagers/appImManager';\n\ntype SharedMediaHistoryStorage = Partial<{\n [type in SearchSuperType]: {mid: number, peerId: PeerId}[]\n}>;\n\nconst historiesStorage: {\n [peerId: PeerId]: {\n [threadId: number]: SharedMediaHistoryStorage\n }\n} = {};\n\n// TODO: отредактированное сообщение не изменится\nexport default class AppSharedMediaTab extends SliderSuperTab {\n private editBtn: HTMLElement;\n\n public peerId: PeerId;\n private threadId: number;\n\n private searchSuper: AppSearchSuper;\n\n private profile: PeerProfile;\n private peerChanged: boolean;\n\n private titleI18n: I18n.IntlElement;\n\n public isFirst: boolean;\n public noProfile: boolean;\n\n private sharedMediaTitle: HTMLElement;\n\n private btnMenu: HTMLElement;\n\n public init() {\n this.init = null;\n // const perf = performance.now();\n\n this.container.classList.add('shared-media-container');\n\n // * header\n const newCloseBtn = Button('btn-icon sidebar-close-button', {noRipple: true});\n this.closeBtn.replaceWith(newCloseBtn);\n this.closeBtn = newCloseBtn;\n\n const animatedCloseIcon = document.createElement('div');\n animatedCloseIcon.classList.add('animated-close-icon');\n newCloseBtn.append(animatedCloseIcon);\n\n if(this.isFirst) {\n animatedCloseIcon.classList.add('state-back');\n }\n\n const createTransitionContainer = () => {\n const transitionContainer = document.createElement('div');\n transitionContainer.className = 'transition slide-fade';\n return transitionContainer;\n };\n\n const transitionContainer = createTransitionContainer();\n\n const makeTransitionItem = (titleInner?: HTMLElement, noCounter?: boolean, title?: HTMLElement) => {\n const element = document.createElement('div');\n element.classList.add('transition-item');\n\n title ??= this.title.cloneNode() as any;\n title.append(titleInner);\n\n let subtitle: HTMLElement;\n if(noCounter) {\n element.append(title);\n } else {\n const rows = document.createElement('div');\n rows.classList.add('sidebar-header__rows');\n subtitle = document.createElement('div');\n subtitle.classList.add('sidebar-header__subtitle');\n rows.append(title, subtitle);\n element.append(rows);\n }\n\n return {element, title, subtitle};\n };\n\n this.titleI18n = new I18n.IntlElement();\n const transitionFirstItem = makeTransitionItem(this.titleI18n.element, true, this.title);\n this.editBtn = ButtonIcon('edit');\n\n const btnMenu = this.btnMenu = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n direction: 'bottom-left',\n buttons: [{\n icon: 'message',\n text: 'SavedViewAsMessages',\n onClick: () => {\n appImManager.toggleViewAsMessages(rootScope.myId, true);\n },\n verify: () => this.peerId === rootScope.myId && this.isFirst\n }]\n });\n\n transitionFirstItem.element.append(this.editBtn);\n\n enum TitleIndex {\n Profile = 0,\n Media = 1\n };\n\n const transitionSharedMedia = makeTransitionItem(i18n('PeerInfo.SharedMedia'));\n this.sharedMediaTitle = transitionSharedMedia.title;\n\n const sharedMediaTransitionContainer = createTransitionContainer();\n transitionSharedMedia.subtitle.append(sharedMediaTransitionContainer);\n\n const c: [SearchSuperMediaTab['type'], LangPackKey, I18n.IntlElement?][] = [\n ['savedDialogs', 'SavedDialogsTabCount'],\n ['stories', 'StoriesCount'],\n ['members', 'Members'],\n ['media', 'MediaFiles'],\n ['saved', 'SavedMessagesCount'],\n ['files', 'Files'],\n ['links', 'Links'],\n ['music', 'MusicFiles'],\n ['voice', 'Voice'],\n ['groups', 'CommonGroups'],\n ['similar', 'SimilarChannelsCount']\n ];\n\n sharedMediaTransitionContainer.append(...c.map((item) => {\n item[2] = new I18n.IntlElement({key: 'Loading'});\n const element = document.createElement('div');\n element.classList.add('transition-item');\n element.append(item[2].element);\n return element;\n }));\n\n transitionContainer.append(...[\n transitionFirstItem,\n transitionSharedMedia\n ].map(({element}) => element));\n\n this.header.append(transitionContainer, btnMenu);\n\n // * body\n\n if(!this.noProfile) {\n this.profile = new PeerProfile(this.managers, this.scrollable, this.listenerSetter, true, this.container);\n this.profile.init();\n this.scrollable.append(this.profile.element);\n }\n\n const HEADER_HEIGHT = 56;\n this.scrollable.onAdditionalScroll = () => {\n const rect = this.searchSuper.nav.getBoundingClientRect();\n if(!rect.width) return;\n\n const top = rect.top - 1;\n setIsSharedMedia(top <= HEADER_HEIGHT);\n };\n\n const getTitleIndex = (isSharedMedia = transition.prevId() !== TitleIndex.Profile) => {\n let index = TitleIndex.Profile;\n if(isSharedMedia) {\n index = TitleIndex.Media;\n }\n\n return index;\n };\n\n const setIsSharedMedia = (isSharedMedia: boolean) => {\n animatedCloseIcon.classList.toggle('state-back', this.isFirst || isSharedMedia);\n this.searchSuper.container.classList.toggle('is-full-viewport', isSharedMedia);\n\n transition(getTitleIndex(isSharedMedia));\n\n if(!isSharedMedia) {\n this.searchSuper.cleanScrollPositions();\n }\n };\n\n const transition = TransitionSlider({\n content: transitionContainer,\n type: 'slide-fade',\n transitionTime: 400,\n isHeavy: false\n });\n\n transition(this.profile ? TitleIndex.Profile : TitleIndex.Media);\n\n const transitionSubtitle = TransitionSlider({\n content: sharedMediaTransitionContainer,\n type: 'slide-fade',\n transitionTime: 400,\n isHeavy: false\n });\n\n transitionSubtitle(0);\n\n attachClickEvent(this.closeBtn, (e) => {\n if(transition.prevId() && this.profile) {\n this.scrollable.scrollIntoViewNew({\n element: this.scrollable.container.querySelector('.profile-content') as HTMLElement,\n position: 'start'\n });\n transition(TitleIndex.Profile);\n\n if(!this.isFirst) {\n animatedCloseIcon.classList.remove('state-back');\n this.container.classList.remove('header-filled');\n }\n } else if(!this.scrollable.isHeavyAnimationInProgress) {\n this.slider.onCloseBtnClick();\n }\n }, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(this.editBtn, async() => {\n let tab: AppEditChatTab | AppEditContactTab | AppEditTopicTab | AppEditBotTab;\n const {peerId, threadId} = this;\n if(threadId && await this.managers.appPeersManager.isForum(peerId)) {\n tab = this.slider.createTab(AppEditTopicTab)\n } else if(peerId.isAnyChat()) {\n tab = this.slider.createTab(AppEditChatTab);\n } else if(await this.managers.appUsersManager.isBot(peerId)) {\n tab = this.slider.createTab(AppEditBotTab);\n } else {\n tab = this.slider.createTab(AppEditContactTab);\n }\n\n if(!tab) {\n return;\n }\n\n if(tab instanceof AppEditTopicTab) {\n tab.open(peerId, this.threadId);\n } else if(tab instanceof AppEditBotTab) {\n tab.open(peerId);\n } else {\n if(tab instanceof AppEditChatTab) {\n tab.chatId = peerId.toChatId();\n } else {\n tab.peerId = peerId;\n }\n\n tab.open();\n }\n }, {listenerSetter: this.listenerSetter});\n\n this.listenerSetter.add(rootScope)('contacts_update', (userId) => {\n if(this.peerId === userId.toPeerId(false)) {\n this.toggleEditBtn();\n }\n });\n\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\n if(this.peerId === chatId.toPeerId(true)) {\n this.toggleEditBtn();\n }\n });\n\n this.listenerSetter.add(rootScope)('history_multiappend', (message) => {\n this.renderNewMessage(message);\n });\n\n this.listenerSetter.add(rootScope)('history_delete', ({peerId, msgs}) => {\n this.deleteDeletedMessages(peerId, msgs);\n });\n\n // Calls when message successfully sent and we have an id\n // this.listenerSetter.add(rootScope)('message_sent', ({message}) => {\n // this.renderNewMessage(message);\n // });\n\n // this.container.prepend(this.closeBtn.parentElement);\n\n // let lastMediaTabType: SearchSuperMediaTab['type'];\n this.searchSuper = new AppSearchSuper({\n mediaTabs: [{\n name: 'SharedMedia.SavedDialogs',\n type: 'savedDialogs'\n }, {\n name: 'Stories',\n type: 'stories'\n }, {\n name: 'PeerMedia.Members',\n type: 'members'\n }, {\n inputFilter: 'inputMessagesFilterPhotoVideo',\n name: 'SharedMediaTab2',\n type: 'media'\n }, {\n inputFilter: 'inputMessagesFilterEmpty',\n name: 'SharedMedia.Saved',\n type: 'saved'\n }, {\n inputFilter: 'inputMessagesFilterDocument',\n name: 'SharedFilesTab2',\n type: 'files'\n }, {\n inputFilter: 'inputMessagesFilterUrl',\n name: 'SharedLinksTab2',\n type: 'links'\n }, {\n inputFilter: 'inputMessagesFilterMusic',\n name: 'SharedMusicTab2',\n type: 'music'\n }, {\n inputFilter: 'inputMessagesFilterRoundVoice',\n name: 'SharedVoiceTab2',\n type: 'voice'\n }, {\n name: 'ChatList.Filter.Groups',\n type: 'groups'\n }, {\n name: 'SimilarChannels',\n type: 'similar'\n }],\n scrollable: this.scrollable,\n onChangeTab: (mediaTab) => {\n // lastMediaTabType = mediaTab.type;\n transitionSubtitle(c.findIndex((item) => item[0] === mediaTab.type));\n\n const timeout = mediaTab.type === 'members' && liteMode.isAvailable('animations') ? 250 : 0;\n setTimeout(() => {\n btnAddMembers.classList.toggle('is-hidden', mediaTab.type !== 'members');\n }, timeout);\n },\n managers: this.managers,\n onLengthChange: (type, length) => {\n const item = c.find((item) => item[0] === type);\n if(!item) {\n return;\n }\n\n item[2].compareAndUpdate({key: item[1], args: [length]});\n },\n openSavedDialogsInner: !this.isFirst,\n slider: this.slider\n });\n\n this.searchSuper.scrollStartCallback = () => {\n setIsSharedMedia(true);\n this.container.classList.add('header-filled');\n };\n\n // * fix scroll position to media tab because of absolute header\n this.searchSuper.scrollOffset = 56;\n\n if(this.profile) {\n this.profile.element.append(this.searchSuper.container);\n } else {\n this.scrollable.append(this.searchSuper.container);\n }\n\n const btnAddMembers = ButtonCorner({icon: 'addmember_filled'});\n this.content.append(btnAddMembers);\n\n attachClickEvent(btnAddMembers, () => {\n addChatUsers({\n peerId: this.peerId,\n slider: this.slider\n });\n }, {listenerSetter: this.listenerSetter});\n\n // console.log('construct shared media time:', performance.now() - perf);\n }\n\n private _renderNewMessage(message: Message.message | Message.messageService, peerId = message.peerId, threadId?: number) {\n const historyStorage = historiesStorage[peerId]?.[threadId];\n if(!historyStorage) return;\n\n for(const mediaTab of this.searchSuper.mediaTabs) {\n const inputFilter = mediaTab.inputFilter;\n const history = historyStorage[inputFilter];\n if(!history) {\n continue;\n }\n\n let filtered: (typeof message)[];\n if(mediaTab.type === 'saved') {\n filtered = [message].filter((message) => {\n const savedPeerId = (message as Message.message).saved_peer_id;\n return savedPeerId &&\n getPeerId(savedPeerId) === this.searchSuper.searchContext.peerId &&\n !history.some((m) => m.mid === message.mid);\n });\n } else {\n filtered = this.searchSuper.filterMessagesByType([message], inputFilter);\n }\n\n if(!filtered.length) {\n continue;\n }\n\n const toInsert = filtered\n .filter((message) => !history.find((m) => m.mid === message.mid && m.peerId === message.peerId))\n .map((message) => ({mid: message.mid, peerId: message.peerId}));\n history.unshift(...toInsert);\n\n if(\n (mediaTab.type === 'saved' ? this.peerId === threadId : this.peerId === peerId) &&\n this.searchSuper.usedFromHistory[inputFilter] !== -1 &&\n this.threadId === threadId\n ) {\n this.searchSuper.usedFromHistory[inputFilter] += filtered.length;\n this.searchSuper.performSearchResult(filtered, mediaTab, false);\n this.searchSuper.setCounter(mediaTab.type, this.searchSuper.counters[mediaTab.type] + filtered.length);\n }\n }\n }\n\n private async renderNewMessage(message: Message.message | Message.messageService) {\n if(this.init) return; // * not inited yet\n\n const {peerId} = message;\n const isForum = await this.managers.appPeersManager.isForum(peerId);\n const threadId = getMessageThreadId(message, isForum);\n\n this._renderNewMessage(message);\n if(threadId) {\n this._renderNewMessage(message, undefined, threadId);\n }\n }\n\n public _deleteDeletedMessages(historyStorage: SharedMediaHistoryStorage, peerId: PeerId, mids: number[], threadId?: number) {\n for(const mid of mids) {\n for(const mediaTab of this.searchSuper.mediaTabs) {\n const inputFilter = mediaTab.inputFilter;\n\n const history = historyStorage[inputFilter];\n if(!history) continue;\n\n const isGood = mediaTab.type === 'saved' ?\n this.peerId === threadId :\n this.peerId === peerId && this.threadId === threadId;\n if(isGood) {\n this.searchSuper.setCounter(mediaTab.type, this.searchSuper.counters[mediaTab.type] - mids.length);\n }\n\n const idx = history.findIndex((m) => m.mid === mid);\n if(idx === -1) {\n history.splice(idx, 1);\n }\n\n if(isGood) {\n const container = this.searchSuper.tabs[inputFilter];\n const div = container.querySelector(`[data-mid=\"${mid}\"][data-peer-id=\"${peerId}\"]`) as HTMLElement;\n if(div) {\n if(this.searchSuper.selection.isSelecting) {\n this.searchSuper.selection.toggleByElement(div);\n }\n\n const divs = container.querySelectorAll('[data-mid][data-peer-id]');\n const idx = Array.from(divs).indexOf(div);\n div.remove();\n\n if(idx !== -1 && this.searchSuper.usedFromHistory[inputFilter] >= (idx + 1)) {\n --this.searchSuper.usedFromHistory[inputFilter];\n }\n }\n }\n\n // can have element in different tabs somehow\n // break;\n }\n }\n }\n\n public deleteDeletedMessages(peerId: PeerId, msgs: BroadcastEvents['history_delete']['msgs']) {\n if(this.init) return; // * not inited yet\n\n const h = historiesStorage[peerId];\n if(!h) return;\n const mids = [...msgs.keys()];\n\n for(const threadId in h) {\n this._deleteDeletedMessages(h[threadId], peerId, mids, isNaN(+threadId) ? undefined : +threadId);\n }\n\n this.scrollable.onScroll();\n }\n\n private async cleanupHTML() {\n // const perf = performance.now();\n const isAnyChat = this.peerId.isAnyChat();\n const [canViewMembers, hasRights] = await Promise.all([\n isAnyChat ? this.searchSuper.canViewMembers() : false,\n isAnyChat ? this.managers.appChatsManager.hasRights(this.peerId.toChatId(), 'invite_users') : false\n ]);\n\n return () => {\n this.profile?.cleanupHTML();\n this.editBtn.classList.add('hide');\n this.searchSuper.cleanupHTML(true);\n this.container.classList.toggle('can-add-members', canViewMembers && hasRights);\n };\n // console.log('cleanupHTML shared media time:', performance.now() - perf);\n }\n\n public setLoadMutex(promise: Promise) {\n this.searchSuper.loadMutex = promise;\n }\n\n private getHistoryStorage(peerId: PeerId, threadId?: number) {\n return (historiesStorage[peerId] ??= {})[threadId] ??= {};\n }\n\n public setPeer(peerId: PeerId, threadId?: number) {\n if(this.peerId === peerId && this.threadId === threadId) return false;\n\n this.peerId = peerId;\n this.threadId = threadId;\n this.noProfile ??= peerId === rootScope.myId;\n this.peerChanged = true;\n\n if(this.init) {\n this.init();\n }\n\n const historyStorage = this.getHistoryStorage(peerId, threadId);\n historyStorage.inputMessagesFilterEmpty = this.getHistoryStorage(rootScope.myId, peerId).inputMessagesFilterEmpty ??= [];\n\n this.searchSuper.setQuery({\n peerId,\n threadId,\n historyStorage\n });\n\n this.profile?.setPeer(peerId, threadId);\n\n return true;\n }\n\n private async changeTitleKey() {\n const {peerId, threadId} = this;\n const isSavedDialog = !!(peerId === rootScope.myId && threadId);\n const usePeerId = isSavedDialog ? threadId : peerId;\n const [isForum, isBroadcast, isBot, peerTitle] = await Promise.all([\n this.managers.appPeersManager.isForum(usePeerId),\n this.managers.appPeersManager.isBroadcast(usePeerId),\n this.managers.appPeersManager.isBot(usePeerId),\n wrapPeerTitle({\n peerId,\n threadId: isSavedDialog ? undefined : threadId,\n meAsNotes: isSavedDialog && threadId === rootScope.myId,\n dialog: true\n })\n ]);\n\n return () => {\n this.titleI18n.compareAndUpdate({\n key: isBot ? 'Profile.Info.Bot' : (isBroadcast ? 'Profile.Info.Channel' : (threadId && isForum ? 'Profile.Info.Topic' : (usePeerId.isUser() ? 'Profile.Info.User' : 'Profile.Info.Group')))\n });\n this.sharedMediaTitle.replaceChildren(peerTitle);\n this.btnMenu.classList.toggle('hide', !this.isFirst || isSavedDialog || peerId !== rootScope.myId);\n };\n }\n\n public async fillProfileElements() {\n if(!this.peerChanged) {\n return;\n }\n\n this.peerChanged = false;\n const callbacks = await Promise.all([\n this.cleanupHTML(),\n this.toggleEditBtn(true),\n this.profile?.fillProfileElements(),\n this.changeTitleKey()\n ]);\n\n return () => {\n callbacks.forEach((callback) => {\n callback?.();\n });\n };\n }\n\n private async toggleEditBtn(manual?: T): Promise void : void> {\n const {peerId} = this;\n let show: boolean;\n if(peerId.isUser()) {\n show = peerId !== rootScope.myId && await this.managers.appUsersManager.canEdit(peerId.toUserId());\n } else {\n const chatId = peerId.toChatId();\n const isTopic = this.threadId && apiManagerProxy.isForum(peerId);\n if(isTopic) {\n show = await this.managers.dialogsStorage.canManageTopic(await this.managers.dialogsStorage.getForumTopic(peerId, this.threadId));\n } else {\n const chat = apiManagerProxy.getChat(chatId);\n show = !!(chat as Chat.channel).admin_rights || await this.managers.appChatsManager.hasRights(chatId, 'change_info');\n }\n }\n\n const callback = () => {\n this.editBtn.classList.toggle('hide', !show);\n };\n\n return manual ? callback : callback() as any;\n }\n\n public loadSidebarMedia(single: boolean, justLoad?: boolean) {\n return this.searchSuper.load(single, justLoad);\n }\n\n onOpenAfterTimeout() {\n super.onOpenAfterTimeout();\n\n this.scrollable.onScroll();\n }\n\n onCloseAfterTimeout() {\n super.onCloseAfterTimeout();\n\n if(this.destroyable) {\n this.profile?.destroy();\n this.searchSuper.destroy();\n }\n }\n\n public destroy() {\n this.destroyable = true;\n this.onCloseAfterTimeout();\n }\n\n public static async open(slider: SidebarSlider, peerId: PeerId, noProfile?: boolean) {\n const tab = slider.createTab(AppSharedMediaTab, true);\n tab.noProfile = noProfile;\n tab.isFirst = true;\n tab.setPeer(peerId);\n (await tab.fillProfileElements())();\n await tab.loadSidebarMedia(true);\n return tab.open();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appImManager, {APP_TABS} from '../../lib/appManagers/appImManager';\nimport SidebarSlider from '../slider';\nimport mediaSizes, {ScreenSize} from '../../helpers/mediaSizes';\nimport AppSharedMediaTab from './tabs/sharedMedia';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport appNavigationController from '../appNavigationController';\n\nexport const RIGHT_COLUMN_ACTIVE_CLASSNAME = 'is-right-column-shown';\n\nexport class AppSidebarRight extends SidebarSlider {\n private isColumnProportionSet = false;\n private sharedMediaTab: AppSharedMediaTab;\n // public rect: DOMRect;\n\n constructor() {\n super({\n sidebarEl: document.getElementById('column-right') as HTMLElement,\n canHideFirst: true,\n navigationType: 'right'\n });\n }\n\n construct(managers: AppManagers) {\n this.managers = managers;\n\n mediaSizes.addEventListener('changeScreen', (from, to) => {\n if(to === ScreenSize.medium && from !== ScreenSize.mobile) {\n this.toggleSidebar(false);\n }\n });\n\n mediaSizes.addEventListener('resize', () => {\n this.setColumnProportion();\n });\n }\n\n public createSharedMediaTab() {\n const tab = this.createTab(AppSharedMediaTab, false, true);\n tab.slider = this;\n // this.tabsContainer.prepend(tab.container);\n return tab;\n }\n\n public replaceSharedMediaTab(tab?: AppSharedMediaTab) {\n const previousTab = this.sharedMediaTab;\n if(previousTab) {\n const idx = this.historyTabIds.indexOf(previousTab);\n\n if(this._selectTab.getFrom() === previousTab.container) {\n this._selectTab.setFrom(tab?.container);\n }\n\n if(tab) {\n if(idx !== -1) {\n this.historyTabIds[idx] = tab;\n }\n\n const wasActive = previousTab.container.classList.contains('active');\n if(wasActive) {\n tab.container.classList.add('active');\n }\n\n previousTab.container.replaceWith(tab.container);\n } else {\n if(idx !== -1) {\n this.historyTabIds.splice(idx, 1);\n }\n\n previousTab.container.remove();\n }\n } else {\n this.tabsContainer.prepend(tab.container);\n }\n\n this.sharedMediaTab = tab;\n }\n\n public onCloseTab(id: number, animate: boolean, isNavigation?: boolean) {\n if(!this.historyTabIds.length) {\n this.toggleSidebar(false, animate);\n }\n\n super.onCloseTab(id, animate, isNavigation);\n }\n\n private setColumnProportion() {\n const middleWidth = this.sidebarEl.previousElementSibling.scrollWidth;\n const proportion = this.sidebarEl.scrollWidth / middleWidth;\n document.documentElement.style.setProperty('--right-column-proportion', '' + proportion);\n document.documentElement.style.setProperty('--middle-column-width', middleWidth + 'px');\n document.documentElement.style.setProperty('--middle-column-width-value', '' + middleWidth);\n // this.rect = this.sidebarEl.getBoundingClientRect();\n }\n\n public hide() {\n document.body.classList.remove(RIGHT_COLUMN_ACTIVE_CLASSNAME);\n appNavigationController.removeByType('right');\n }\n\n public toggleSidebar(enable?: boolean, animate?: boolean) {\n const active = document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME);\n let willChange: boolean;\n if(enable !== undefined) {\n if(enable) {\n if(!active) {\n willChange = true;\n }\n } else if(active) {\n willChange = true;\n }\n } else {\n willChange = true;\n }\n\n if(!willChange) return Promise.resolve();\n\n if(!active && !this.historyTabIds.length) {\n this.sharedMediaTab.open();\n }\n\n if(!this.isColumnProportionSet) {\n this.setColumnProportion();\n this.isColumnProportionSet = true;\n }\n\n const animationPromise = appImManager.selectTab(active ? APP_TABS.CHAT : APP_TABS.PROFILE, animate);\n if(!enable) this.hide();\n else {\n document.body.classList.add(RIGHT_COLUMN_ACTIVE_CLASSNAME);\n if(!appNavigationController.findItemByType('right')) {\n this.pushNavigationItem(this.sharedMediaTab);\n }\n }\n return animationPromise;\n\n /* return new Promise((resolve, reject) => {\n const hidden: {element: HTMLDivElement, height: number}[] = [];\n const observer = new IntersectionObserver((entries) => {\n for(const entry of entries) {\n const bubble = entry.target as HTMLDivElement;\n if(!entry.isIntersecting) {\n hidden.push({element: bubble, height: bubble.scrollHeight});\n }\n }\n\n for(const item of hidden) {\n item.element.style.minHeight = item.height + 'px';\n (item.element.firstElementChild as HTMLElement).style.display = 'none';\n item.element.style.width = '1px';\n }\n\n //console.log('hidden', hidden);\n observer.disconnect();\n\n set();\n\n setTimeout(() => {\n for(const item of hidden) {\n item.element.style.minHeight = '';\n item.element.style.width = '';\n (item.element.firstElementChild as HTMLElement).style.display = '';\n }\n\n resolve();\n }, 200);\n });\n\n const length = Object.keys(appImManager.bubbles).length;\n if(length) {\n for(const i in appImManager.bubbles) {\n observer.observe(appImManager.bubbles[i]);\n }\n } else {\n set();\n setTimeout(resolve, 200);\n }\n }); */\n }\n}\n\nconst appSidebarRight = new AppSidebarRight();\nMOUNT_CLASS_TO.appSidebarRight = appSidebarRight;\nexport default appSidebarRight;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {cancelContextMenuOpening} from './attachContextMenuListener';\nimport handleHorizontalSwipe, {SwipeHandlerHorizontalOptions} from './handleHorizontalSwipe';\n\nexport default function handleTabSwipe(options: SwipeHandlerHorizontalOptions) {\n return handleHorizontalSwipe({\n ...options,\n onSwipe: (xDiff, yDiff, e) => {\n xDiff *= -1;\n yDiff *= -1;\n\n if(Math.abs(xDiff) > 50) {\n options.onSwipe(xDiff, yDiff, e);\n cancelContextMenuOpening();\n\n return true;\n }\n }\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from './cancelEvent';\n\nexport default function lockTouchScroll(container: HTMLElement) {\n const onTouchMove = (e: TouchEvent) => {\n cancelEvent(e);\n };\n\n let lockers = 2;\n const cb = () => {\n if(!--lockers) {\n container.removeEventListener('touchmove', onTouchMove, {capture: true});\n }\n };\n\n container.addEventListener('touchmove', onTouchMove, {capture: true, passive: false});\n container.addEventListener('touchend', cb, {once: true});\n\n return cb;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../../appDocsManager';\nimport type {MyInputMessagesFilter, MyMessage} from '../../appMessagesManager';\nimport {Message, MessageMedia, MessageEntity, MessageAction, Reaction} from '../../../../layer';\nimport matchUrl from '../../../richTextProcessor/matchUrl';\nimport reactionsEqual from '../reactions/reactionsEqual';\n\nexport default function filterMessagesByInputFilter({\n inputFilter,\n messages,\n limit,\n savedReaction\n}: {\n inputFilter: MyInputMessagesFilter,\n messages: Array,\n limit: number,\n savedReaction?: (Reaction.reactionEmoji | Reaction.reactionCustomEmoji)[]\n}) {\n if(inputFilter === 'inputMessagesFilterEmpty' && !savedReaction) {\n return messages.slice(0, limit);\n }\n\n const foundMsgs: MyMessage[] = [];\n if(!messages.length) {\n return foundMsgs;\n }\n\n let filtering = true;\n const neededContents: Partial<{\n [messageMediaType in MessageMedia['_']]: boolean\n }> & Partial<{\n avatar: boolean,\n url: boolean\n }> = {},\n neededDocTypes: MyDocument['type'][] = [],\n // excludeDocTypes: MyDocument['type'][] = [],\n neededFlags: (keyof Message.message['pFlags'])[] = [];\n\n switch(inputFilter) {\n case 'inputMessagesFilterPhotos':\n neededContents['messageMediaPhoto'] = true;\n break;\n\n case 'inputMessagesFilterPhotoVideo':\n neededContents['messageMediaPhoto'] = true;\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('video');\n break;\n\n case 'inputMessagesFilterVideo':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('video');\n break;\n\n case 'inputMessagesFilterDocument':\n neededContents['messageMediaDocument'] = true;\n // excludeDocTypes.push('video');\n neededDocTypes.push(undefined, 'photo', 'pdf');\n break;\n\n case 'inputMessagesFilterVoice':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('voice');\n break;\n\n case 'inputMessagesFilterRoundVoice':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('round', 'voice');\n break;\n\n case 'inputMessagesFilterRoundVideo':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('round');\n break;\n\n case 'inputMessagesFilterMusic':\n neededContents['messageMediaDocument'] = true;\n neededDocTypes.push('audio');\n break;\n\n case 'inputMessagesFilterUrl':\n neededContents['url'] = true;\n break;\n\n case 'inputMessagesFilterChatPhotos':\n neededContents['avatar'] = true;\n break;\n\n case 'inputMessagesFilterPinned':\n neededFlags.push('pinned');\n break;\n\n /* case 'inputMessagesFilterMyMentions':\n neededContents['mentioned'] = true;\n break; */\n\n default:\n filtering = false;\n break;\n /* return Promise.resolve({\n count: 0,\n next_rate: 0,\n history: [] as number[]\n }); */\n }\n\n if(!filtering && !savedReaction?.length) {\n return foundMsgs;\n }\n\n for(let i = 0, length = messages.length; i < length; ++i) {\n const message: Message.message | Message.messageService = messages[i];\n if(!message) continue;\n\n // || (neededContents['mentioned'] && message.totalEntities.find((e: any) => e._ === 'messageEntityMention'));\n\n let found = !filtering;\n if(neededFlags?.some((flag) => (message as any as Message.message).pFlags[flag])) {\n found = true;\n } else if(message._ === 'message') {\n if(message.media && neededContents[message.media._]/* && !message.fwd_from */) {\n const doc = (message.media as MessageMedia.messageMediaDocument).document as MyDocument;\n if(doc &&\n (\n (neededDocTypes.length && !neededDocTypes.includes(doc.type))/* ||\n excludeDocTypes.includes(doc.type) */\n )\n ) {\n continue;\n }\n\n found = true;\n } else if(neededContents['url'] && message.message) {\n const goodEntities = ['messageEntityTextUrl', 'messageEntityUrl'];\n if((message.totalEntities as MessageEntity[]).find((e) => goodEntities.includes(e._)) || matchUrl(message.message)) {\n found = true;\n }\n }\n\n if(found && savedReaction) {\n const results = message.reactions?.results;\n found = results ? savedReaction.every((reaction) => {\n return results.some((reactionCount) => reactionsEqual(reactionCount.reaction, reaction));\n }) : false;\n }\n } else if(\n neededContents['avatar'] &&\n message.action &&\n ([\n 'messageActionChannelEditPhoto' as const,\n 'messageActionChatEditPhoto' as const,\n 'messageActionChannelEditVideo' as const,\n 'messageActionChatEditVideo' as const\n ] as MessageAction['_'][]).includes(message.action._)\n ) {\n found = true;\n }\n\n if(found && foundMsgs.push(message) >= limit) {\n break;\n }\n }\n\n return foundMsgs;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {splitProps, createEffect, createSignal, For, JSX, createMemo, onCleanup, untrack, createComputed, createReaction} from 'solid-js';\nimport {createStoriesViewer} from './viewer';\nimport {Document, MessageMedia, Photo, StoryItem} from '../../layer';\nimport {wrapStoryMedia} from './preview';\nimport getMediaThumbIfNeeded from '../../helpers/getStrippedThumbIfNeeded';\nimport {SearchSelection} from '../chat/selection';\nimport {StoriesProvider, useStories} from './store';\nimport Icon from '../icon';\n\nconst TEST_ONE = false;\nconst TEST_TWO = false;\n\nfunction _StoriesProfileList(props: {\n onReady?: () => void,\n onLengthChange?: (length: number) => void,\n selection?: SearchSelection,\n pinned: boolean\n}) {\n const [stories, actions] = useStories();\n const [list, setList] = createSignal();\n const [length, setLength] = createSignal(0);\n const [viewerId, setViewerId] = createSignal();\n const items = new Map();\n\n const onReady = () => {\n const list = {Item};\n\n createEffect(() => {\n const elements: JSX.Element[] = (list as any)();\n if(TEST_ONE) elements.length = 1;\n else if(TEST_TWO) elements.length = 2;\n const length = elements.length;\n setLength(length);\n setList(elements);\n props.onLengthChange?.(length);\n });\n\n props.onLengthChange && createEffect(() => {\n props.onLengthChange(stories.peer?.count);\n });\n\n props.onReady?.();\n };\n\n createReaction(onReady)(() => stories.ready);\n\n createEffect(() => {\n const id = viewerId();\n if(!id) {\n return;\n }\n\n const onExit = () => {\n setViewerId(undefined);\n };\n\n const target = createMemo(() => {\n const storyId = stories.peer.stories[stories.peer.index].id;\n return items.get(storyId);\n });\n\n untrack(() => {\n const peer = stories.peer;\n const index = peer.stories.findIndex((story) => story.id === id);\n actions.set({peer, index});\n });\n\n createStoriesViewer({\n onExit,\n target,\n splitByDays: true\n });\n });\n\n const Item = (storyItem: StoryItem) => {\n const {container, div, media, thumb} = wrapStoryMedia({\n peerId: stories.peer.peerId,\n storyItem: storyItem as StoryItem.storyItem,\n forPreview: true,\n noAspecter: true,\n containerProps: {\n // @ts-ignore\n 'data-mid': storyItem.id,\n 'data-peer-id': stories.peer.peerId,\n 'class': 'grid-item search-super-item',\n 'onClick': (e) => {\n setViewerId(storyItem.id);\n }\n },\n childrenClassName: 'grid-item-media',\n noPlayButton: true\n });\n\n let icon: HTMLElement;\n createEffect(() => {\n const t = thumb();\n const m = media();\n const element = m || t;\n if(!element) {\n return;\n }\n\n items.set(storyItem.id, element);\n onCleanup(() => {\n items.delete(storyItem.id);\n });\n\n if(length() === 1) {\n const messageMedia = (storyItem as StoryItem.storyItem).media;\n const media = (messageMedia as MessageMedia.messageMediaPhoto).photo as Photo.photo || (messageMedia as MessageMedia.messageMediaDocument).document as Document.document;\n const gotThumb = getMediaThumbIfNeeded({\n photo: media,\n cacheContext: {type: 'x', url: '', downloaded: 0},\n useBlur: true,\n ignoreCache: true,\n onlyStripped: true\n });\n const thumb = gotThumb.image;\n element.parentElement.prepend(thumb);\n\n onCleanup(() => {\n thumb.remove();\n });\n }\n\n if(element.parentElement && props.pinned && (storyItem as StoryItem.storyItem).pinnedIndex !== undefined) {\n icon ??= Icon('pin2', 'grid-item-pin');\n element.parentElement.append(icon);\n } else if(icon) {\n icon.remove();\n }\n });\n\n if(props.selection?.isSelecting) {\n props.selection.toggleElementCheckbox(div, true);\n }\n\n return container;\n };\n\n return (\n \n {list()}\n \n );\n}\n\nexport default function StoriesProfileList(props: Parameters[0] & Parameters[0]) {\n const [, rest] = splitProps(props, ['onReady', 'onLengthChange', 'selection']);\n return (\n \n <_StoriesProfileList {...props} pinned={rest.pinned} />\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {AppMessagesManager, MyInputMessagesFilter, MyMessage} from '../lib/appManagers/appMessagesManager';\nimport appDialogsManager, {DIALOG_LIST_ELEMENT_TAG, Some4, SortedDialogList} from '../lib/appManagers/appDialogsManager';\nimport {logger} from '../lib/logger';\nimport rootScope from '../lib/rootScope';\nimport {SearchGroup, SearchGroupType} from './appSearch';\nimport {horizontalMenu} from './horizontalMenu';\nimport LazyLoadQueue from './lazyLoadQueue';\nimport {putPreloader} from './putPreloader';\nimport ripple from './ripple';\nimport Scrollable, {ScrollableX} from './scrollable';\nimport useHeavyAnimationCheck, {getHeavyAnimationPromise} from '../hooks/useHeavyAnimationCheck';\nimport I18n, {LangPackKey, i18n, join} from '../lib/langPack';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport {getMiddleware, Middleware, MiddlewareHelper} from '../helpers/middleware';\nimport {ChannelParticipant, Chat, ChatFull, ChatParticipant, Document, Message, MessageMedia, MessagesChats, Photo, StoryItem, Update, User, WebPage} from '../layer';\nimport SortedUserList from './sortedUserList';\nimport findUpTag from '../helpers/dom/findUpTag';\nimport appSidebarRight from './sidebarRight';\nimport mediaSizes from '../helpers/mediaSizes';\nimport appImManager from '../lib/appManagers/appImManager';\nimport positionElementByIndex from '../helpers/dom/positionElementByIndex';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport handleTabSwipe from '../helpers/dom/handleTabSwipe';\nimport windowSize from '../helpers/windowSize';\nimport {formatPhoneNumber} from '../helpers/formatPhoneNumber';\nimport {ButtonMenuItemOptions, ButtonMenuSync} from './buttonMenu';\nimport PopupForward from './popups/forward';\nimport PopupDeleteMessages from './popups/deleteMessages';\nimport Row from './row';\nimport htmlToDocumentFragment from '../helpers/dom/htmlToDocumentFragment';\nimport {SearchSelection} from './chat/selection';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent, simulateClickEvent} from '../helpers/dom/clickEvent';\nimport {MyDocument} from '../lib/appManagers/appDocsManager';\nimport AppMediaViewer from './appMediaViewer';\nimport lockTouchScroll from '../helpers/dom/lockTouchScroll';\nimport copy from '../helpers/object/copy';\nimport getObjectKeysAndSort from '../helpers/object/getObjectKeysAndSort';\nimport safeAssign from '../helpers/object/safeAssign';\nimport findAndSplice from '../helpers/array/findAndSplice';\nimport {ScrollStartCallbackDimensions} from '../helpers/fastSmoothScroll';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport choosePhotoSize from '../lib/appManagers/utils/photos/choosePhotoSize';\nimport wrapWebPageDescription from './wrappers/webPageDescription';\nimport wrapWebPageTitle from './wrappers/webPageTitle';\nimport wrapAbbreviation from '../lib/richTextProcessor/wrapAbbreviation';\nimport matchUrl from '../lib/richTextProcessor/matchUrl';\nimport wrapPlainText from '../lib/richTextProcessor/wrapPlainText';\nimport wrapRichText from '../lib/richTextProcessor/wrapRichText';\nimport wrapSenderToPeer from './wrappers/senderToPeer';\nimport wrapSentTime from './wrappers/sentTime';\nimport getMediaFromMessage from '../lib/appManagers/utils/messages/getMediaFromMessage';\nimport filterMessagesByInputFilter from '../lib/appManagers/utils/messages/filterMessagesByInputFilter';\nimport getChatMembersString from './wrappers/getChatMembersString';\nimport getUserStatusString from './wrappers/getUserStatusString';\nimport getParticipantPeerId from '../lib/appManagers/utils/chats/getParticipantPeerId';\nimport {Awaited} from '../types';\nimport {attachContextMenuListener} from '../helpers/dom/attachContextMenuListener';\nimport contextMenuController from '../helpers/contextMenuController';\nimport positionMenu from '../helpers/positionMenu';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport SwipeHandler from './swipeHandler';\nimport wrapDocument from './wrappers/document';\nimport wrapPhoto from './wrappers/photo';\nimport wrapVideo from './wrappers/video';\nimport noop from '../helpers/noop';\nimport wrapMediaSpoiler, {onMediaSpoilerClick} from './wrappers/mediaSpoiler';\nimport filterAsync from '../helpers/array/filterAsync';\nimport ChatContextMenu from './chat/contextMenu';\nimport PopupElement from './popups';\nimport getParticipantRank from '../lib/appManagers/utils/chats/getParticipantRank';\nimport {NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport createParticipantContextMenu from '../helpers/dom/createParticipantContextMenu';\nimport findAndSpliceAll from '../helpers/array/findAndSpliceAll';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport {createRoot} from 'solid-js';\nimport StoriesProfileList from './stories/profileList';\nimport Button from './button';\nimport anchorCallback from '../helpers/dom/anchorCallback';\nimport PopupPremium from './popups/premium';\nimport {ChatType} from './chat/chat';\nimport getFwdFromName from '../lib/appManagers/utils/messages/getFwdFromName';\nimport SidebarSlider from './slider';\nimport setBlankToAnchor from '../lib/richTextProcessor/setBlankToAnchor';\nimport cancelClickOrNextIfNotClick from '../helpers/dom/cancelClickOrNextIfNotClick';\n\n// const testScroll = false;\n\nexport type SearchSuperType = MyInputMessagesFilter/* | 'members' */;\nexport type SearchSuperContext = {\n peerId: PeerId,\n inputFilter: {_: MyInputMessagesFilter},\n query?: string,\n maxId?: number,\n folderId?: number,\n threadId?: number,\n date?: number,\n nextRate?: number,\n minDate?: number,\n maxDate?: number\n};\n\nexport type SearchSuperMediaType = 'stories' | 'members' | 'media' |\n 'files' | 'links' | 'music' | 'chats' | 'voice' | 'groups' | 'similar' |\n 'savedDialogs' | 'saved';\nexport type SearchSuperMediaTab = {\n inputFilter?: SearchSuperType,\n name: LangPackKey,\n type: SearchSuperMediaType,\n contentTab?: HTMLElement,\n menuTab?: HTMLElement,\n menuTabName?: HTMLElement;\n scroll?: {scrollTop: number, scrollHeight: number}\n};\n\ntype SearchSuperLoadTypeOptions = {\n mediaTab: SearchSuperMediaTab,\n justLoad: boolean,\n loadCount: number,\n middleware: Middleware,\n side: 'top' | 'bottom'\n};\n\nclass SearchContextMenu {\n private buttons: (ButtonMenuItemOptions & {verify?: () => boolean | Promise, withSelection?: true})[];\n private element: HTMLElement;\n private target: HTMLElement;\n private peerId: PeerId;\n private mid: number;\n private isSelected: boolean;\n private managers: AppManagers;\n private noForwards: boolean;\n private message: MyMessage;\n private selectedMessages: MyMessage[];\n private storyItem: StoryItem.storyItem;\n // private isSavedDialog: boolean;\n\n constructor(\n private attachTo: HTMLElement,\n private searchSuper: AppSearchSuper,\n private listenerSetter: ListenerSetter,\n private storiesPinned: boolean\n ) {\n this.managers = searchSuper.managers;\n\n const onContextMenu: Parameters[0]['callback'] = (e) => {\n if(this.init) {\n this.init();\n this.init = null;\n }\n\n let item: HTMLElement;\n try {\n item = findUpClassName(e.target, 'search-super-item');\n } catch(e) {}\n\n const isStory = !!findUpClassName(e.target, 'search-super-content-stories');\n\n if(!item) return;\n\n if(e instanceof MouseEvent) e.preventDefault();\n if(this.element.classList.contains('active')) {\n return false;\n }\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n const r = async() => {\n this.target = item;\n this.peerId = item.dataset.peerId.toPeerId();\n this.mid = +item.dataset.mid;\n this.isSelected = searchSuper.selection.isMidSelected(this.peerId, this.mid);\n this.message = isStory ? undefined : await this.managers.appMessagesManager.getMessageByPeer(this.peerId, this.mid);\n this.storyItem = isStory ? await this.managers.appStoriesManager.getStoryById(this.peerId, this.mid) : undefined;\n this.noForwards = isStory || (searchSuper.selection.isSelecting ?\n this.searchSuper.selection.selectionForwardBtn.classList.contains('hide') :\n !(await this.managers.appMessagesManager.canForward(this.message)));\n this.selectedMessages = !isStory && searchSuper.selection.isSelecting ? await searchSuper.selection.getSelectedMessages() : undefined;\n // this.isSavedDialog = !!(searchSuper.searchContext.peerId === rootScope.myId && searchSuper.searchContext.threadId);\n\n const f = await Promise.all(this.buttons.map(async(button) => {\n let good: boolean;\n\n if(this.searchSuper.selection.isSelecting && !button.withSelection) {\n good = false;\n } else {\n good = button.verify ? !!(await button.verify()) : true;\n }\n\n button.element.classList.toggle('hide', !good);\n return good;\n }));\n\n if(!f.some((v) => v)) {\n return;\n }\n\n item.classList.add('menu-open');\n\n positionMenu(e, this.element);\n contextMenuController.openBtnMenu(this.element, () => {\n item.classList.remove('menu-open');\n });\n };\n\n r();\n };\n\n attachContextMenuListener({\n element: attachTo,\n callback: onContextMenu as any,\n listenerSetter\n });\n }\n\n private init() {\n this.buttons = [{\n icon: 'forward',\n text: 'Forward',\n onClick: this.onForwardClick,\n verify: () => !this.noForwards\n }, {\n icon: 'forward',\n text: 'Message.Context.Selection.Forward',\n onClick: this.onForwardClick,\n verify: () => this.searchSuper.selection.isSelecting && !this.noForwards,\n withSelection: true\n }, {\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: () => ChatContextMenu.onDownloadClick(this.message, this.noForwards),\n verify: () => !this.searchSuper.selection.isSelecting && ChatContextMenu.canDownload(this.message, undefined, this.noForwards)\n }, {\n icon: 'download',\n text: 'Message.Context.Selection.Download',\n onClick: () => ChatContextMenu.onDownloadClick(this.selectedMessages, this.noForwards),\n verify: () => this.searchSuper.selection.isSelecting && ChatContextMenu.canDownload(this.selectedMessages, undefined, this.noForwards),\n withSelection: true\n }, {\n icon: 'message',\n text: 'Message.Context.Goto',\n onClick: this.onGotoClick,\n verify: () => !this.storyItem,\n withSelection: true\n }, {\n icon: 'archive',\n text: 'Archive',\n onClick: () => this.onStoryTogglePinClick(false),\n verify: () => this.storyItem && this.storyItem.pFlags.pinned && this.managers.appStoriesManager.hasRights(this.peerId, this.storyItem.id, 'pin')\n }, {\n icon: 'unarchive',\n text: 'Unarchive',\n onClick: () => this.onStoryTogglePinClick(true),\n verify: () => this.storyItem && !this.storyItem.pFlags.pinned && this.managers.appStoriesManager.hasRights(this.peerId, this.storyItem.id, 'pin')\n }, {\n icon: 'pin',\n text: 'ChatList.Context.Pin',\n onClick: () => this.onStoryToggleToTopClick(true),\n verify: () => this.storiesPinned && this.storyItem && this.storyItem.pinnedIndex === undefined && this.managers.appStoriesManager.hasRights(this.peerId, this.storyItem.id, 'pin')\n }, {\n icon: 'unpin',\n text: 'ChatList.Context.Unpin',\n onClick: () => this.onStoryToggleToTopClick(false),\n verify: () => this.storiesPinned && this.storyItem && this.storyItem.pinnedIndex !== undefined && this.managers.appStoriesManager.hasRights(this.peerId, this.storyItem.id, 'pin')\n }, {\n icon: 'select',\n text: 'Message.Context.Select',\n onClick: this.onSelectClick,\n verify: () => !this.isSelected && (!this.storyItem || this.storyItem.pFlags.out),\n withSelection: true\n }, {\n icon: 'select',\n text: 'Message.Context.Selection.Clear',\n onClick: this.onClearSelectionClick,\n verify: () => this.isSelected,\n withSelection: true\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'Delete',\n onClick: this.onDeleteClick,\n verify: () => {\n if(this.storyItem) {\n return this.managers.appStoriesManager.hasRights(this.peerId, this.storyItem.id, 'delete');\n }\n\n return !this.searchSuper.selection.isSelecting && this.managers.appMessagesManager.canDeleteMessage(this.message);\n }\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'Message.Context.Selection.Delete',\n onClick: this.onDeleteClick,\n verify: () => this.searchSuper.selection.isSelecting && this.searchSuper.selection.selectionDeleteBtn && !this.searchSuper.selection.selectionDeleteBtn.classList.contains('hide'),\n withSelection: true\n }];\n\n this.element = ButtonMenuSync({buttons: this.buttons, listenerSetter: this.listenerSetter});\n this.element.classList.add('search-contextmenu', 'contextmenu');\n document.getElementById('page-chats').append(this.element);\n }\n\n private onGotoClick = () => {\n appImManager.setInnerPeer({\n peerId: this.peerId,\n lastMsgId: this.mid,\n threadId: this.searchSuper.mediaTab.type === 'saved' ? this.searchSuper.searchContext.peerId : this.searchSuper.searchContext.threadId\n });\n };\n\n private onForwardClick = () => {\n if(this.searchSuper.selection.isSelecting) {\n simulateClickEvent(this.searchSuper.selection.selectionForwardBtn);\n } else {\n PopupElement.createPopup(PopupForward, {\n [this.peerId]: [this.mid]\n });\n }\n };\n\n private onSelectClick = () => {\n this.searchSuper.selection.toggleByElement(this.target);\n };\n\n private onClearSelectionClick = () => {\n this.searchSuper.selection.cancelSelection();\n };\n\n private onDeleteClick = () => {\n if(this.storyItem) {\n this.searchSuper.selection.onDeleteStoriesClick([this.storyItem.id]);\n } else if(this.searchSuper.selection.isSelecting) {\n simulateClickEvent(this.searchSuper.selection.selectionDeleteBtn);\n } else {\n PopupElement.createPopup(\n PopupDeleteMessages,\n this.peerId,\n [this.mid],\n ChatType.Chat\n );\n }\n };\n\n private onStoryTogglePinClick = (pin: boolean) => {\n this.searchSuper.selection.onPinClick([this.storyItem.id], pin);\n };\n\n private onStoryToggleToTopClick = (pin: boolean) => {\n this.searchSuper.selection.onPinToTopClick([this.storyItem.id], pin);\n };\n}\n\nexport type ProcessSearchSuperResult = {\n message: Message.message,\n middleware: Middleware,\n promises: Promise[],\n elemsToAppend: {element: HTMLElement, message: any}[],\n inputFilter: MyInputMessagesFilter,\n searchGroup?: SearchGroup,\n mediaTab: SearchSuperMediaTab\n};\n\nexport default class AppSearchSuper {\n public tabs: {[t in SearchSuperType]: HTMLDivElement} = {} as any;\n\n public mediaTab: SearchSuperMediaTab;\n\n public container: HTMLElement;\n public nav: HTMLElement;\n public navScrollableContainer: HTMLDivElement;\n public tabsContainer: HTMLElement;\n public navScrollable: ScrollableX;\n private tabsMenu: HTMLElement;\n private prevTabId = -1;\n\n private lazyLoadQueue = new LazyLoadQueue();\n public middleware = getMiddleware();\n\n public historyStorage: Partial<{[type in SearchSuperType]: {mid: number, peerId: PeerId}[]}> = {};\n public usedFromHistory: Partial<{[type in SearchSuperType]: number}> = {};\n\n public searchContext: SearchSuperContext;\n public loadMutex: Promise;\n\n private nextRates: Partial<{[type in SearchSuperMediaType]: number}> = {};\n private loadPromises: Partial<{[type in SearchSuperMediaType]: Promise}> = {};\n private loaded: Partial<{[type in SearchSuperMediaType]: boolean}> = {};\n private loadedChats = false;\n private firstLoad = true;\n\n private log = logger('SEARCH-SUPER');\n public selectTab: ReturnType;\n\n private monthContainers: Partial<{\n [type in SearchSuperType]: {\n [timestamp: number]: {\n container: HTMLElement,\n items: HTMLElement\n }\n }\n }> = {};\n\n private searchGroupMedia: SearchGroup;\n\n public mediaTabsMap: Map = new Map();\n\n private membersList: SortedUserList;\n private membersParticipantMap: Map;\n private membersMiddlewareHelper: MiddlewareHelper;\n\n private _loadStories: () => Promise;\n private _loadSavedDialogs: (side: 'top' | 'bottom') => Promise;\n\n private skipScroll: boolean;\n\n // * arguments\n public mediaTabs: SearchSuperMediaTab[];\n public scrollable: Scrollable;\n public searchGroups?: {[group in SearchGroupType]: SearchGroup};\n public asChatList? = false;\n public groupByMonth? = true;\n public hideEmptyTabs? = true;\n public onChangeTab?: (mediaTab: SearchSuperMediaTab) => void;\n public showSender? = false;\n\n private searchContextMenu: SearchContextMenu;\n public selection: SearchSelection;\n\n public scrollStartCallback: (dimensions: ScrollStartCallbackDimensions) => void;\n public scrollOffset: number;\n\n public managers: AppManagers;\n private loadFirstTimePromise: Promise;\n\n private listenerSetter: ListenerSetter;\n private swipeHandler: SwipeHandler;\n\n public onStoriesLengthChange: (length: number) => void;\n public storiesArchive: boolean;\n\n public counters: Partial<{[type in SearchSuperMediaType]: number}> = {};\n public onLengthChange: (type: SearchSuperMediaType, length: number) => void;\n\n public openSavedDialogsInner: boolean;\n\n public slider: SidebarSlider;\n\n constructor(options: Pick<\n AppSearchSuper,\n 'mediaTabs' |\n 'scrollable' |\n 'searchGroups' |\n 'asChatList' |\n 'groupByMonth' |\n 'hideEmptyTabs' |\n 'onChangeTab' |\n 'showSender' |\n 'managers'\n > & Partial>) {\n safeAssign(this, options);\n\n this.slider ??= appSidebarRight;\n\n this.container = document.createElement('div');\n this.container.classList.add('search-super');\n\n this.listenerSetter = new ListenerSetter();\n this.searchContextMenu = new SearchContextMenu(this.container, this, this.listenerSetter, !this.storiesArchive);\n this.selection = new SearchSelection(this, this.managers, this.listenerSetter);\n if(this.storiesArchive) {\n this.selection.isStoriesArchive = true;\n }\n\n const navScrollableContainer = this.navScrollableContainer = document.createElement('div');\n navScrollableContainer.classList.add('search-super-tabs-scrollable', 'menu-horizontal-scrollable', 'sticky');\n\n const navScrollable = this.navScrollable = new ScrollableX(navScrollableContainer);\n navScrollable.container.classList.add('search-super-nav-scrollable');\n\n const nav = this.nav = document.createElement('nav');\n nav.classList.add('search-super-tabs', 'menu-horizontal-div');\n this.tabsMenu = nav;\n\n navScrollable.container.append(nav);\n\n for(const mediaTab of this.mediaTabs) {\n const menuTab = document.createElement('div');\n menuTab.classList.add('menu-horizontal-div-item');\n const span = document.createElement('span');\n span.classList.add('menu-horizontal-div-item-span');\n const i = document.createElement('i');\n\n span.append(mediaTab.menuTabName = i18n(mediaTab.name));\n span.append(i);\n\n menuTab.append(span);\n\n ripple(menuTab);\n\n this.tabsMenu.append(menuTab);\n\n this.mediaTabsMap.set(mediaTab.type, mediaTab);\n\n mediaTab.menuTab = menuTab;\n }\n\n this.tabsContainer = document.createElement('div');\n this.tabsContainer.classList.add('search-super-tabs-container', 'tabs-container');\n\n let unlockScroll: ReturnType;\n if(IS_TOUCH_SUPPORTED) {\n this.swipeHandler = handleTabSwipe({\n element: this.tabsContainer,\n onSwipe: (xDiff, yDiff, e) => {\n xDiff *= -1;\n yDiff *= -1;\n const prevId = this.selectTab.prevId();\n const children = Array.from(this.tabsMenu.children) as HTMLElement[];\n let idx: number;\n if(xDiff > 0) {\n for(let i = prevId + 1; i < children.length; ++i) {\n if(!children[i].classList.contains('hide')) {\n idx = i;\n break;\n }\n }\n } else {\n for(let i = prevId - 1; i >= 0; --i) {\n if(!children[i].classList.contains('hide')) {\n idx = i;\n break;\n }\n }\n }\n\n if(idx !== undefined) {\n unlockScroll = lockTouchScroll(this.tabsContainer);\n this.selectTab(idx);\n }\n },\n verifyTouchTarget: (e) => {\n return !findUpClassName(e.target, 'scrollable-x');\n }\n });\n }\n\n for(const mediaTab of this.mediaTabs) {\n const container = document.createElement('div');\n container.classList.add('search-super-tab-container', 'search-super-container-' + mediaTab.type, 'tabs-tab');\n\n const content = document.createElement('div');\n content.classList.add('search-super-content-container', 'search-super-content-' + mediaTab.type);\n\n container.append(content);\n\n this.tabsContainer.append(container);\n\n const {inputFilter} = mediaTab;\n if(inputFilter) {\n this.tabs[inputFilter] = content;\n }\n\n mediaTab.contentTab = content;\n }\n\n this.container.append(navScrollableContainer, this.tabsContainer);\n\n // * construct end\n\n this.searchGroupMedia = new SearchGroup(false, 'messages', true);\n\n // this.scrollable.onScrolledTop = () => {\n // if(this.mediaTab.contentTab && this.canLoadMediaTab(this.mediaTab)/* && false */) {\n // // this.log('onScrolledTop will load media');\n // this.load(true, undefined, 'top');\n // }\n // };\n\n this.scrollable.onScrolledBottom = () => {\n if(this.mediaTab.contentTab && this.canLoadMediaTab(this.mediaTab)/* && false */) {\n // this.log('onScrolledBottom will load media');\n this.load(true, undefined, 'bottom');\n }\n };\n // this.scroll.attachSentinels(undefined, 400);\n\n this.selectTab = horizontalMenu(this.tabsMenu, this.tabsContainer, (id, tabContent, animate) => {\n if(this.prevTabId === id && !this.skipScroll) {\n this.scrollToStart();\n return;\n }\n\n const newMediaTab = this.mediaTabs[id];\n this.onChangeTab?.(newMediaTab);\n\n if(this.selection) {\n this.selection.isStories = newMediaTab.type === 'stories';\n }\n\n const fromMediaTab = this.mediaTab;\n this.mediaTab = newMediaTab;\n\n if(this.prevTabId !== -1 && animate) {\n this.onTransitionStart();\n }\n\n if(this.skipScroll) {\n this.skipScroll = false;\n } else {\n const offsetTop = this.container.offsetTop - (this.scrollOffset || 0);\n let scrollTop = this.scrollable.scrollPosition;\n if(scrollTop < offsetTop) {\n this.scrollToStart();\n scrollTop = offsetTop;\n }\n\n fromMediaTab.scroll = {scrollTop: scrollTop, scrollHeight: this.scrollable.scrollSize};\n\n if(newMediaTab.scroll === undefined) {\n const rect = this.container.getBoundingClientRect();\n const rect2 = this.container.parentElement.getBoundingClientRect();\n const diff = rect.y - rect2.y;\n\n if(scrollTop > diff) {\n newMediaTab.scroll = {scrollTop: diff, scrollHeight: 0};\n }\n }\n\n if(newMediaTab.scroll) {\n const diff = fromMediaTab.scroll.scrollTop - newMediaTab.scroll.scrollTop;\n // console.log('what you gonna do', this.goingHard, diff);\n\n // this.scrollable.scrollTop = scrollTop;\n if(diff/* && diff < 0 */) {\n /* if(diff > -(fromMediaTab.contentTab.scrollHeight + this.nav.scrollHeight)) {\n fromMediaTab.contentTab.style.transform = `translateY(${diff}px)`;\n this.scrollable.scrollTop = scrollTop - diff;\n } else { */\n newMediaTab.contentTab.style.transform = `translateY(${diff}px)`;\n // }\n }\n }\n }\n\n /* if(this.prevTabId !== -1 && nav.offsetTop) {\n this.scrollable.scrollTop -= nav.offsetTop;\n } */\n\n /* this.log('setVirtualContainer', id, this.sharedMediaSelected, this.sharedMediaSelected.childElementCount);\n this.scroll.setVirtualContainer(this.sharedMediaSelected); */\n\n if(this.prevTabId !== -1 && !newMediaTab.contentTab.childElementCount) { // quick brown fix\n // this.contentContainer.classList.remove('loaded');\n this.load(true);\n }\n\n this.prevTabId = id;\n }, () => {\n this.scrollable.onScroll();\n\n // console.log('what y', this.tabSelected.style.transform);\n if(this.mediaTab.scroll !== undefined) {\n this.mediaTab.contentTab.style.transform = '';\n this.scrollable.scrollPosition = this.mediaTab.scroll.scrollTop;\n }\n\n if(unlockScroll) {\n unlockScroll();\n unlockScroll = undefined;\n }\n\n this.onTransitionEnd();\n }, undefined, navScrollable, this.listenerSetter);\n\n attachClickEvent(this.tabsContainer, (e) => {\n if(this.selection.isSelecting) {\n cancelClickOrNextIfNotClick(e);\n this.selection.toggleByElement(findUpClassName(e.target, 'search-super-item'));\n }\n }, {capture: true, passive: false, listenerSetter: this.listenerSetter});\n\n const onMediaClick = async(className: string, targetClassName: string, inputFilter: MyInputMessagesFilter, e: MouseEvent) => {\n const target = findUpClassName(e.target as HTMLDivElement, className);\n if(!target) return;\n\n const mid = +target.dataset.mid;\n if(!mid) {\n this.log.warn('no messageId by click on target:', target);\n return;\n }\n\n const mediaSpoiler: HTMLElement = target.querySelector('.media-spoiler-container');\n if(mediaSpoiler) {\n onMediaSpoilerClick({\n event: e,\n mediaSpoiler\n })\n return;\n }\n\n const peerId = target.dataset.peerId.toPeerId();\n\n const targets = (Array.from(this.tabs[inputFilter].querySelectorAll('.' + targetClassName)) as HTMLElement[]).map((el) => {\n const containerEl = findUpClassName(el, className);\n return {\n element: el,\n mid: +containerEl.dataset.mid,\n peerId: containerEl.dataset.peerId.toPeerId()\n };\n });\n\n // const ids = Object.keys(this.mediaDivsByIds).map((k) => +k).sort((a, b) => a - b);\n const idx = targets.findIndex((item) => item.mid === mid && item.peerId === peerId);\n\n const mediaTab = this.mediaTabs.find((mediaTab) => mediaTab.inputFilter === inputFilter);\n const message = await this.managers.appMessagesManager.getMessageByPeer(peerId, mid);\n new AppMediaViewer()\n .setSearchContext(this.copySearchContext(inputFilter, this.nextRates[mediaTab.type]))\n .openMedia({\n message,\n target: targets[idx].element,\n fromRight: 0,\n reverse: false,\n prevTargets: targets.slice(0, idx),\n nextTargets: targets.slice(idx + 1)\n });\n };\n\n this.tabs.inputMessagesFilterPhotoVideo && attachClickEvent(\n this.tabs.inputMessagesFilterPhotoVideo,\n onMediaClick.bind(null, 'grid-item', 'grid-item', 'inputMessagesFilterPhotoVideo'),\n {listenerSetter: this.listenerSetter}\n );\n this.tabs.inputMessagesFilterDocument && attachClickEvent(\n this.tabs.inputMessagesFilterDocument,\n onMediaClick.bind(null, 'document-with-thumb', 'media-container', 'inputMessagesFilterDocument'),\n {listenerSetter: this.listenerSetter}\n );\n\n /* attachClickEvent(this.tabs.inputMessagesFilterUrl, (e) => {\n const target = e.target as HTMLElement;\n if(target.tagName === 'A') {\n return;\n }\n\n try {\n const a = findUpClassName(target, 'row').querySelector('.anchor-url:last-child') as HTMLAnchorElement;\n a.click();\n } catch(err) {}\n }); */\n\n this.mediaTab = this.mediaTabs[0];\n\n useHeavyAnimationCheck(() => {\n this.lazyLoadQueue.lock();\n }, () => {\n this.lazyLoadQueue.unlockAndRefresh(); // ! maybe not so efficient\n }, this.listenerSetter);\n }\n\n private scrollToStart() {\n this.scrollable.scrollIntoViewNew({\n element: this.container,\n position: 'start',\n startCallback: this.scrollStartCallback,\n getElementPosition: this.scrollOffset ? ({elementPosition}) => Math.max(0, elementPosition - this.scrollOffset) : undefined\n });\n }\n\n private onTransitionStart = () => {\n this.container.classList.add('sliding');\n };\n\n private onTransitionEnd = () => {\n this.container.classList.remove('sliding');\n };\n\n public setCounter(type: SearchSuperMediaType, count: number) {\n this.counters[type] = count;\n this.onLengthChange?.(type, count);\n }\n\n public filterMessagesByType(messages: MyMessage[], type: SearchSuperType): MyMessage[] {\n return filterMessagesByInputFilter({inputFilter: type, messages: messages, limit: messages.length});\n }\n\n private async processEmptyFilter({message, searchGroup, mediaTab}: ProcessSearchSuperResult) {\n const isSaved = mediaTab.type === 'saved';\n\n let peerId = message.peerId;\n if(isSaved) {\n peerId = message.fromId;\n }\n peerId = await this.managers.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n const middleware = this.middleware.get();\n\n const loadPromises: Promise[] = [];\n const dialogElement = appDialogsManager.addDialogNew({\n peerId,\n container: searchGroup?.list || false,\n avatarSize: 'bigger',\n loadPromises,\n wrapOptions: {\n middleware\n },\n withStories: true,\n meAsSaved: !isSaved,\n autonomous: isSaved,\n fromName: !peerId ? getFwdFromName(message.fwd_from) : undefined\n });\n\n const setLastMessagePromise = appDialogsManager.setLastMessageN({\n dialog: {\n _: 'dialog',\n peerId\n } as any,\n lastMessage: message,\n dialogElement,\n highlightWord: this.searchContext.query,\n noForwardIcon: isSaved\n });\n\n loadPromises.push(setLastMessagePromise);\n return Promise.all(loadPromises).then(() => {\n if(searchGroup) {\n return;\n }\n\n return {element: dialogElement.container, message};\n });\n }\n\n private async processPhotoVideoFilter({message, promises, middleware}: ProcessSearchSuperResult) {\n const media = getMediaFromMessage(message, true);\n\n const div = document.createElement('div');\n div.classList.add('grid-item');\n // this.log(message, photo);\n\n let wrapped: Awaited>;\n const size = choosePhotoSize(media, 200, 200);\n if(media._ !== 'photo') {\n wrapped = (await wrapVideo({\n doc: media,\n message,\n container: div,\n boxWidth: 0,\n boxHeight: 0,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n onlyPreview: true,\n withoutPreloader: true,\n noPlayButton: true,\n photoSize: size\n })).thumb;\n } else {\n wrapped = await wrapPhoto({\n photo: media,\n message,\n container: div,\n boxWidth: 0,\n boxHeight: 0,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n withoutPreloader: true,\n noBlur: true,\n size\n });\n }\n\n if((message.media as MessageMedia.messageMediaPhoto).pFlags.spoiler) {\n const mediaSpoiler = await wrapMediaSpoiler({\n animationGroup: 'chat',\n media,\n middleware,\n width: 140,\n height: 140,\n multiply: 0.3\n });\n\n div.append(mediaSpoiler);\n }\n\n [\n wrapped.images.thumb,\n wrapped.images.full\n ].filter(Boolean).forEach((image) => {\n image.classList.add('grid-item-media');\n });\n\n promises.push(wrapped.loadPromises.thumb);\n\n return {element: div, message};\n }\n\n private async processDocumentFilter({message, inputFilter}: ProcessSearchSuperResult) {\n const document = getMediaFromMessage(message, true) as Document.document;\n const showSender = this.showSender || (['voice', 'round'] as MyDocument['type'][]).includes(document.type);\n\n const div = await wrapDocument({\n message,\n withTime: !showSender,\n fontWeight: 400,\n voiceAsMusic: true,\n showSender,\n searchContext: this.copySearchContext(inputFilter, this.nextRates.files),\n lazyLoadQueue: this.lazyLoadQueue,\n autoDownloadSize: 0,\n getSize: () => 320\n });\n\n if((['audio', 'voice', 'round'] as MyDocument['type'][]).includes(document.type)) {\n div.classList.add('audio-48');\n }\n\n return {message, element: div};\n }\n\n private async processUrlFilter({message, promises, middleware}: ProcessSearchSuperResult) {\n let webPage = (message.media as MessageMedia.messageMediaWebPage)?.webpage as WebPage.webPage | WebPage.webPageEmpty;\n\n if(!webPage) {\n const entity = message.totalEntities ? message.totalEntities.find((e: any) => e._ === 'messageEntityUrl' || e._ === 'messageEntityTextUrl') : null;\n let url: string, display_url: string, sliced: string;\n\n if(!entity) {\n const match = matchUrl(message.message);\n if(!match) {\n return;\n }\n\n url = match[0];\n } else {\n sliced = message.message.slice(entity.offset, entity.offset + entity.length);\n }\n\n if(entity?._ === 'messageEntityTextUrl') {\n url = entity.url;\n // display_url = sliced;\n } else {\n url = url || sliced;\n }\n\n display_url = url;\n\n const same = message.message === url;\n if(!url.match(/^(ftp|http|https):\\/\\//)) {\n display_url = 'https://' + url;\n url = url.includes('@') ? url : 'https://' + url;\n }\n\n display_url = new URL(display_url).hostname;\n\n webPage = {\n _: 'webPage',\n pFlags: {},\n url,\n display_url,\n id: '',\n hash: 0\n };\n\n if(!same) {\n webPage.description = message.message;\n }\n }\n\n if(webPage._ === 'webPageEmpty') {\n return;\n }\n\n const previewDiv = document.createElement('div');\n previewDiv.classList.add('preview');\n\n // this.log('wrapping webpage', webpage);\n\n if(webPage.photo) {\n const res = wrapPhoto({\n container: previewDiv,\n message: null,\n photo: webPage.photo as Photo.photo,\n boxWidth: 0,\n boxHeight: 0,\n withoutPreloader: true,\n lazyLoadQueue: this.lazyLoadQueue,\n middleware,\n size: choosePhotoSize(webPage.photo as Photo.photo, 60, 60, false),\n loadPromises: promises,\n noBlur: true\n });\n } else {\n previewDiv.classList.add('empty');\n setInnerHTML(previewDiv, wrapAbbreviation(webPage.title || webPage.display_url || webPage.description || webPage.url, true));\n }\n\n const title = wrapWebPageTitle(webPage);\n\n const subtitleFragment = wrapWebPageDescription(webPage);\n const aFragment = htmlToDocumentFragment(wrapRichText(webPage.url || ''));\n const a = aFragment.firstElementChild as HTMLAnchorElement;\n const aIsAnchor = a instanceof HTMLAnchorElement;\n if(aIsAnchor) {\n try { // can have 'URIError: URI malformed'\n a.innerText = decodeURIComponent(a.href);\n } catch(err) {\n\n }\n }\n\n if(subtitleFragment.firstChild) {\n subtitleFragment.append('\\n');\n }\n\n subtitleFragment.append(a);\n\n if(this.showSender) {\n subtitleFragment.append('\\n', await wrapSenderToPeer(message));\n }\n\n if(!title.textContent) {\n // title = new URL(webpage.url).hostname;\n title.append(wrapPlainText(webPage.display_url.split('/', 1)[0]));\n }\n\n const row = new Row({\n title,\n titleRight: wrapSentTime(message),\n subtitle: subtitleFragment,\n havePadding: true,\n clickable: true,\n noRipple: true,\n asLink: aIsAnchor\n });\n\n if(aIsAnchor) {\n (row.container as HTMLAnchorElement).href = a.href;\n const onClick = a.getAttribute('onclick');\n onClick && row.container.setAttribute('onclick', onClick);\n if(a.target === '_blank') {\n setBlankToAnchor(row.container as HTMLAnchorElement);\n }\n }\n\n row.applyMediaElement(previewDiv, 'big');\n\n if(row.container.innerText.trim().length) {\n return {message, element: row.container};\n }\n }\n\n public async performSearchResult(messages: (Message.message | Message.messageService)[], mediaTab: SearchSuperMediaTab, append = true) {\n const elemsToAppend: {element: HTMLElement, message: any}[] = [];\n const sharedMediaDiv: HTMLElement = mediaTab.contentTab;\n const promises: Promise[] = [];\n const middleware = this.middleware.get();\n const isSaved = mediaTab.type === 'saved';\n let inputFilter = mediaTab.inputFilter;\n\n await getHeavyAnimationPromise();\n\n let searchGroup: SearchGroup;\n if(inputFilter === 'inputMessagesFilterPhotoVideo' && !!this.searchContext.query.trim()) {\n inputFilter = 'inputMessagesFilterEmpty';\n searchGroup = this.searchGroupMedia;\n sharedMediaDiv.append(searchGroup.container);\n } else if(inputFilter === 'inputMessagesFilterEmpty' && !isSaved) {\n searchGroup = this.searchGroups.messages;\n }\n\n const options: ProcessSearchSuperResult = {\n elemsToAppend,\n inputFilter,\n message: undefined,\n middleware,\n promises,\n searchGroup,\n mediaTab\n };\n\n let processCallback: (options: ProcessSearchSuperResult) => any;\n\n // https://core.telegram.org/type/MessagesFilter\n switch(inputFilter) {\n case 'inputMessagesFilterEmpty': {\n processCallback = this.processEmptyFilter;\n break;\n }\n\n case 'inputMessagesFilterPhotoVideo': {\n processCallback = this.processPhotoVideoFilter;\n break;\n }\n\n case 'inputMessagesFilterVoice':\n case 'inputMessagesFilterRoundVoice':\n case 'inputMessagesFilterMusic':\n case 'inputMessagesFilterDocument': {\n processCallback = this.processDocumentFilter;\n break;\n }\n\n case 'inputMessagesFilterUrl': {\n processCallback = this.processUrlFilter;\n break;\n }\n\n default:\n // this.log.warn('death is my friend', messages);\n break;\n }\n\n if(processCallback) {\n processCallback = processCallback.bind(this);\n\n type K = {element: HTMLElement, message: Message.message | Message.messageService};\n const results: (Promise | K)[] = messages.map(async(message) => {\n try {\n options.message = message as Message.message;\n return await processCallback(options);\n } catch(err) {\n this.log.error('error rendering filter', inputFilter, options, message, err);\n }\n });\n\n const awaited = (await Promise.all(results)).filter(Boolean);\n elemsToAppend.push(...awaited);\n }\n\n if(searchGroup && searchGroup.list.childElementCount) {\n searchGroup.setActive();\n }\n\n if(this.loadMutex) {\n promises.push(this.loadMutex);\n }\n\n if(promises.length) {\n await Promise.all(promises);\n if(!middleware()) {\n // this.log.warn('peer changed');\n return;\n }\n }\n\n const length = elemsToAppend.length;\n if(length) {\n const method = append ? 'append' : 'prepend';\n const groupByMonth = this.groupByMonth && !isSaved;\n const threadId = isSaved ? this.searchContext.peerId : undefined;\n elemsToAppend.forEach((details) => {\n const {element, message} = details;\n if(!message) {\n debugger;\n }\n\n const monthContainer = this.getMonthContainerByTimestamp(groupByMonth ? message.date : 0, inputFilter);\n element.classList.add('search-super-item');\n element.dataset.mid = '' + message.mid;\n element.dataset.peerId = '' + message.peerId;\n threadId && (element.dataset.threadId = '' + threadId);\n monthContainer.items[method](element);\n\n if(this.selection?.isSelecting) {\n this.selection.toggleElementCheckbox(element, true);\n }\n });\n\n if(isSaved) {\n let chatlist = sharedMediaDiv.querySelector('.chatlist');\n if(!chatlist) {\n chatlist = appDialogsManager.createChatList({new: true});\n const monthContainer = this.getMonthContainerByTimestamp(0, inputFilter).container;\n monthContainer.replaceWith(chatlist);\n chatlist.append(monthContainer);\n\n appDialogsManager.setListClickListener({\n list: chatlist,\n onFound: () => {\n if(this.selection.isSelecting) {\n return false;\n }\n },\n withContext: undefined,\n autonomous: true,\n openInner: true\n });\n }\n }\n }\n\n // if(type !== 'inputMessagesFilterEmpty') {\n this.afterPerforming(inputFilter === 'inputMessagesFilterEmpty' ? 1 : length, sharedMediaDiv);\n // }\n }\n\n private afterPerforming(length: number, contentTab: HTMLElement) {\n if(!contentTab) {\n return;\n }\n\n const parent = contentTab.parentElement;\n Array.from(parent.children).slice(1).forEach((child) => {\n child.remove();\n });\n\n // this.contentContainer.classList.add('loaded');\n\n if(!length && !contentTab.childElementCount) {\n const div = document.createElement('div');\n div.innerText = 'Nothing interesting here yet...';\n div.classList.add('position-center', 'text-center', 'content-empty', 'no-select');\n\n parent.append(div);\n }\n }\n\n private loadChats() {\n const renderedPeerIds: Set = new Set();\n const middleware = this.middleware.get();\n\n for(const i in this.searchGroups) {\n const group = this.searchGroups[i as SearchGroupType];\n this.tabs.inputMessagesFilterEmpty.append(group.container);\n group.clear();\n }\n\n const query = this.searchContext.query;\n if(query) {\n const setResults = (results: PeerId[], group: SearchGroup, showMembersCount = false) => {\n results.map((peerId) => {\n if(renderedPeerIds.has(peerId)) {\n return;\n }\n\n renderedPeerIds.add(peerId);\n\n const {dom} = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: group.list,\n avatarSize: 'abitbigger',\n autonomous: group.autonomous,\n wrapOptions: {\n middleware\n },\n withStories: true\n });\n\n return {dom, peerId};\n }).filter(Boolean).forEach(async({dom, peerId}) => {\n const peer = await this.managers.appPeersManager.getPeer(peerId);\n if(peerId === rootScope.myId) {\n dom.lastMessageSpan.append(i18n('Presence.YourChat'));\n } else {\n let username = await this.managers.appPeersManager.getPeerUsername(peerId);\n if(!username) {\n const user = await this.managers.appUsersManager.getUser(peerId);\n if(user?.phone) {\n username = '+' + formatPhoneNumber(user.phone).formatted;\n }\n } else {\n username = '@' + username;\n }\n\n // if(query) {\n // const regExp = new RegExp(`(${escapeRegExp(query)}|${escapeRegExp(cleanSearchText(query))})`, 'gi');\n // dom.titleSpan.innerHTML = dom.titleSpan.innerHTML.replace(regExp, '$1');\n // }\n\n const toJoin: (Node | string)[] = [\n username\n ];\n\n if(/* showMembersCount && */((peer as Chat.channel).participants_count || (peer as any).participants)) {\n toJoin.push(await getChatMembersString(peerId.toChatId()));\n }\n\n dom.lastMessageSpan.append(...join(toJoin.filter(Boolean), false));\n }\n });\n\n group.toggle();\n };\n\n const onLoad = (arg: T) => {\n if(!middleware()) {\n return;\n }\n\n // this.loadedContacts = true;\n\n return arg;\n };\n\n return Promise.all([\n this.managers.appUsersManager.getContactsPeerIds(query, true, undefined, 10)\n .then(onLoad)\n .then((contacts) => {\n if(contacts) {\n setResults(contacts, this.searchGroups.contacts, true);\n }\n }),\n\n this.managers.appUsersManager.searchContacts(query, 20)\n .then(onLoad)\n .then((contacts) => {\n if(contacts) {\n setResults(contacts.my_results, this.searchGroups.contacts, true);\n setResults(contacts.results/* .concat(contacts.results, contacts.results, contacts.results) */, this.searchGroups.globalContacts);\n\n this.searchGroups.globalContacts.container.classList.add('is-short');\n\n if(this.searchGroups.globalContacts.nameEl.lastElementChild !== this.searchGroups.globalContacts.nameEl.firstElementChild) {\n this.searchGroups.globalContacts.nameEl.lastElementChild.remove();\n }\n\n if(this.searchGroups.globalContacts.list.childElementCount > 3) {\n const showMore = document.createElement('div');\n showMore.classList.add('search-group__show-more');\n const intlElement = new I18n.IntlElement({\n key: 'Separator.ShowMore'\n });\n showMore.append(intlElement.element);\n this.searchGroups.globalContacts.nameEl.append(showMore);\n attachClickEvent(showMore, () => {\n const isShort = this.searchGroups.globalContacts.container.classList.toggle('is-short');\n intlElement.key = isShort ? 'Separator.ShowMore' : 'Separator.ShowLess';\n intlElement.update();\n });\n }\n }\n }),\n\n this.managers.dialogsStorage.getDialogs({query, offsetIndex: 0, limit: 20, filterId: 0})\n .then(onLoad)\n .then((value) => {\n if(value) {\n setResults(value.dialogs.map((d) => d.peerId), this.searchGroups.contacts, true);\n }\n })\n ]);\n } else if(!this.searchContext.peerId && !this.searchContext.minDate) {\n const renderRecentSearch = (setActive = true) => {\n return apiManagerProxy.getState().then((state) => {\n if(!middleware()) {\n return;\n }\n\n this.searchGroups.recent.list.replaceChildren();\n\n state.recentSearch.slice(0, 20).forEach(async(peerId) => {\n const {dom} = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: this.searchGroups.recent.list,\n meAsSaved: true,\n avatarSize: 'abitbigger',\n autonomous: true,\n wrapOptions: {\n middleware\n },\n withStories: true\n });\n\n dom.lastMessageSpan.append(await (peerId.isUser() ?\n Promise.resolve(getUserStatusString(await this.managers.appUsersManager.getUser(peerId.toUserId()))) :\n getChatMembersString(peerId.toChatId())));\n });\n\n if(!state.recentSearch.length) {\n this.searchGroups.recent.clear();\n } else if(setActive) {\n this.searchGroups.recent.setActive();\n }\n });\n };\n\n return Promise.all([\n this.managers.appUsersManager.getTopPeers('correspondents').then((peers) => {\n if(!middleware()) return;\n\n peers = peers.slice(0, 15);\n const idx = peers.findIndex((peer) => peer.id === rootScope.myId);\n if(idx !== -1) {\n peers = peers.slice();\n peers.splice(idx, 1);\n }\n\n peers.forEach((peer) => {\n const {dom} = appDialogsManager.addDialogNew({\n peerId: peer.id,\n container: this.searchGroups.people.list,\n onlyFirstName: true,\n avatarSize: 'bigger',\n autonomous: false,\n noIcons: this.searchGroups.people.noIcons,\n wrapOptions: {\n middleware\n },\n withStories: true\n });\n\n dom.subtitleEl.remove();\n });\n\n this.searchGroups.people.toggle();\n }),\n\n renderRecentSearch()\n ]);\n } else return Promise.resolve();\n }\n\n private async loadMembers({mediaTab}: SearchSuperLoadTypeOptions) {\n const chatId = mediaTab.type === 'members' ? this.searchContext.peerId.toChatId() : undefined;\n const userId = mediaTab.type === 'groups' ? this.searchContext.peerId.toUserId() : undefined;\n const middleware = this.middleware.get();\n let promise: Promise;\n\n const renderParticipants = async(participants: (ChatParticipant | ChannelParticipant | Chat)[]) => {\n if(this.loadMutex) {\n await this.loadMutex;\n\n if(!middleware()) {\n return;\n }\n }\n\n let membersList = this.membersList,\n membersParticipantMap = this.membersParticipantMap,\n membersMiddlewareHelper = this.membersMiddlewareHelper;\n if(!membersList) {\n membersParticipantMap = this.membersParticipantMap = new Map();\n membersMiddlewareHelper = this.membersMiddlewareHelper = getMiddleware();\n membersList = this.membersList = new SortedUserList({\n lazyLoadQueue: this.lazyLoadQueue,\n rippleEnabled: false,\n managers: this.managers,\n middleware\n });\n attachClickEvent(membersList.list, (e) => {\n if(findUpClassName(e.target, 'has-stories')) {\n return;\n }\n\n const li = findUpTag(e.target, DIALOG_LIST_ELEMENT_TAG);\n if(!li) {\n return;\n }\n\n const peerId = li.dataset.peerId.toPeerId();\n let promise: Promise = Promise.resolve();\n if(this.slider === appSidebarRight && mediaSizes.isMobile) {\n promise = (this.slider as typeof appSidebarRight).toggleSidebar(false);\n }\n\n promise.then(() => {\n appImManager.setInnerPeer({peerId});\n });\n });\n mediaTab.contentTab.append(membersList.list);\n this.afterPerforming(1, mediaTab.contentTab);\n\n if(chatId) {\n const middleware = membersMiddlewareHelper.get();\n createParticipantContextMenu({\n chatId,\n listenTo: membersList.list,\n participants: this.membersParticipantMap,\n slider: this.slider,\n middleware\n });\n\n const onParticipantUpdate = (update: Update.updateChannelParticipant) => {\n const peerId = getParticipantPeerId(update.prev_participant || update.new_participant);\n const wasRendered = membersList.has(peerId);\n if(wasRendered || (update.new_participant as ChannelParticipant.channelParticipantBanned).pFlags?.left) {\n membersList.ranks.delete(peerId);\n membersList.delete(peerId);\n membersParticipantMap.delete(peerId);\n this.setCounter(mediaTab.type, this.counters[mediaTab.type] - 1);\n }\n\n if((!update.prev_participant || wasRendered) && update.new_participant) {\n renderParticipants([update.new_participant]);\n this.setCounter(mediaTab.type, this.counters[mediaTab.type] + 1);\n }\n };\n\n rootScope.addEventListener('chat_participant', onParticipantUpdate);\n middleware.onClean(() => {\n rootScope.removeEventListener('chat_participant', onParticipantUpdate);\n });\n }\n }\n\n const peerIds: {\n peerId: PeerId,\n rank: ReturnType,\n participant: typeof participants[0]\n }[] = participants.map((participant) => {\n const peerId = userId ? (participant as Chat.chat).id.toPeerId(true) : getParticipantPeerId(participant as ChannelParticipant);\n if(chatId ? peerId.isAnyChat() : peerId.isUser()) {\n return;\n }\n\n return {\n peerId,\n rank: getParticipantRank(participant as ChannelParticipant) as any,\n participant\n };\n }).filter(Boolean);\n\n const filtered = await filterAsync(peerIds, async({peerId}) => {\n const peer: User | Chat = await this.managers.appPeersManager.getPeer(peerId);\n if(!middleware()) {\n return false;\n }\n\n if(!peer || (peer as User.user).pFlags.deleted) {\n return false;\n }\n\n return true;\n });\n\n for(const {peerId, rank, participant} of filtered) {\n if(rank) {\n membersList.ranks.set(peerId, rank);\n }\n\n membersParticipantMap.set(peerId, participant as ChannelParticipant);\n membersList.add(peerId);\n }\n };\n\n if(userId) {\n const LOAD_COUNT = !this.membersList ? 50 : 200;\n promise = this.managers.appUsersManager.getCommonChats(userId, LOAD_COUNT, this.nextRates[mediaTab.type]).then((messagesChats) => {\n if(!middleware()) {\n return;\n }\n\n const count = (messagesChats as MessagesChats.messagesChatsSlice).count ?? messagesChats.chats.length;\n if(!this.counters[mediaTab.type]) {\n this.setCounter(mediaTab.type, count);\n }\n\n // const list = mediaTab.contentTab.firstElementChild as HTMLUListElement;\n const lastChat = messagesChats.chats[messagesChats.chats.length - 1];\n this.nextRates[mediaTab.type] = lastChat?.id as number;\n\n if(messagesChats.chats.length < LOAD_COUNT) {\n this.loaded[mediaTab.type] = true;\n }\n\n return renderParticipants(messagesChats.chats);\n });\n } else if(await this.managers.appChatsManager.isChannel(chatId)) {\n const LOAD_COUNT = !this.membersList ? 50 : 200;\n promise = this.managers.appProfileManager.getChannelParticipants({\n id: chatId,\n limit: LOAD_COUNT,\n offset: this.nextRates[mediaTab.type]\n }).then((participants) => {\n if(!middleware()) {\n return;\n }\n\n const list = mediaTab.contentTab.firstElementChild as HTMLUListElement;\n this.nextRates[mediaTab.type] = (list ? list.childElementCount : 0) + participants.participants.length;\n\n if(participants.participants.length < LOAD_COUNT) {\n this.loaded[mediaTab.type] = true;\n }\n\n this.setCounter(mediaTab.type, participants.count);\n\n return renderParticipants(participants.participants);\n });\n } else {\n promise = this.managers.appProfileManager.getChatFull(chatId).then((chatFull) => {\n if(!middleware()) {\n return;\n }\n\n // console.log('anymore', chatFull);\n this.loaded[mediaTab.type] = true;\n const participants = (chatFull as ChatFull.chatFull).participants;\n if(participants._ === 'chatParticipantsForbidden') {\n return;\n }\n\n this.setCounter(mediaTab.type, participants.participants.length);\n\n return renderParticipants(participants.participants);\n });\n }\n\n return promise;\n }\n\n private async loadStories({mediaTab}: SearchSuperLoadTypeOptions) {\n if(this._loadStories) {\n return this._loadStories();\n }\n\n const middleware = this.middleware.get();\n const promise = deferredPromise();\n createRoot((dispose) => {\n middleware.onClean(() => {\n this._loadStories = undefined;\n dispose();\n promise.reject();\n });\n\n const storiesList = StoriesProfileList({\n peerId: this.searchContext.peerId,\n pinned: !this.storiesArchive,\n archive: this.storiesArchive,\n onReady: () => {\n promise.resolve();\n\n const res = (storiesList as any)();\n mediaTab.contentTab.append(typeof(res) === 'function' ? res() : res);\n this.afterPerforming(1, mediaTab.contentTab);\n },\n onLoadCallback: (callback) => {\n this._loadStories = async() => {\n const promise = callback();\n const loaded = await promise;\n if(!middleware()) {\n return;\n }\n\n if(loaded) {\n this.loaded[mediaTab.type] = true;\n }\n };\n },\n onLengthChange: (length) => {\n this.onStoriesLengthChange?.(length);\n this.setCounter(mediaTab.type, length);\n },\n selection: this.selection\n });\n\n this._loadStories();\n });\n return promise;\n }\n\n private async loadSimilarChannels({mediaTab}: SearchSuperLoadTypeOptions) {\n const middlewareHelper = this.middleware.get().create();\n\n const renderChats = async(chats: Chat[], middleware: Middleware) => {\n const chatlist = appDialogsManager.createChatList({new: true});\n\n const promises = chats.map(async(chat) => {\n const loadPromises: Promise[] = [];\n const {dom} = appDialogsManager.addDialogNew({\n peerId: chat.id.toPeerId(true),\n container: chatlist,\n avatarSize: 'abitbigger',\n autonomous: false,\n wrapOptions: {\n middleware\n },\n loadPromises\n });\n\n dom.lastMessageSpan.append(await getChatMembersString(chat.id, this.managers, chat));\n\n return Promise.all(loadPromises);\n });\n\n await Promise.all(promises);\n return chatlist;\n };\n\n const createPaywall = (limit: number) => {\n const wall = document.createElement('div');\n wall.classList.add('similar-channels-paywall');\n const btn = Button('btn-primary btn-color-primary', {icon: 'premium_unlock', text: 'UnlockSimilar'});\n btn.classList.add('similar-channels-paywall-button');\n const onClick = () => PopupPremium.show();\n const anchor = anchorCallback(onClick);\n attachClickEvent(btn, onClick);\n anchor.classList.add('primary');\n const subtitle = i18n('SimilarChannels.Unlock', [anchor, limit]);\n subtitle.classList.add('similar-channels-paywall-subtitle');\n wall.append(btn, subtitle);\n return wall;\n };\n\n let paywall: HTMLElement, wasPremium: boolean;\n const onPremium = async(isPremium: boolean) => {\n if(wasPremium === isPremium) {\n return;\n }\n\n middlewareHelper.clean();\n const middleware = middlewareHelper.get();\n\n const [messagesChats, premiumLimit, isPremiumFeaturesHidden] = await Promise.all([\n this.managers.appChatsManager.getChannelRecommendations(this.searchContext.peerId.toChatId()),\n this.managers.apiManager.getLimit('recommendedChannels', true),\n apiManagerProxy.isPremiumFeaturesHidden()\n ]);\n\n const chatlist = await renderChats(messagesChats.chats, middleware);\n if(!middleware()) {\n return;\n }\n\n mediaTab.contentTab.replaceChildren(chatlist);\n this.afterPerforming(1, mediaTab.contentTab);\n this.loaded[mediaTab.type] = true;\n\n const count = (messagesChats as MessagesChats.messagesChatsSlice).count ?? messagesChats.chats.length;\n this.setCounter(mediaTab.type, count);\n\n if(!isPremium && !isPremiumFeaturesHidden) {\n paywall ||= createPaywall(premiumLimit);\n mediaTab.contentTab.append(paywall);\n }\n };\n\n rootScope.addEventListener('premium_toggle', onPremium);\n this.middleware.get().onClean(() => {\n rootScope.removeEventListener('premium_toggle', onPremium);\n });\n\n return onPremium(rootScope.premium);\n }\n\n private async loadSavedDialogs({mediaTab, middleware, side}: SearchSuperLoadTypeOptions) {\n if(this._loadSavedDialogs) {\n return this._loadSavedDialogs(side);\n }\n\n const list = appDialogsManager.createChatList();\n appDialogsManager.setListClickListener({\n list,\n withContext: true,\n openInner: this.openSavedDialogsInner\n });\n\n const xd = new Some4();\n xd.scrollable = this.scrollable;\n xd.sortedList = new SortedDialogList({\n managers: this.managers,\n log: this.log,\n list,\n indexKey: 'index_0',\n virtualFilterId: rootScope.myId\n });\n\n const getCount = async() => {\n const result = await this.managers.dialogsStorage.getDialogs({filterId: rootScope.myId});\n return result.count;\n };\n\n const onAnyUpdate = xd.onAnyUpdate = async() => {\n if(!middleware()) return;\n const count = await getCount();\n this.setCounter(mediaTab.type, count);\n };\n\n onAnyUpdate();\n\n mediaTab.contentTab.append(list);\n this.afterPerforming(1, mediaTab.contentTab);\n\n this._loadSavedDialogs = xd.onChatsScroll.bind(xd);\n middleware.onClean(() => {\n xd.destroy();\n this._loadSavedDialogs = undefined;\n });\n\n return xd.onChatsScroll();\n }\n\n private loadType(options: SearchSuperLoadTypeOptions) {\n const {\n mediaTab,\n justLoad,\n loadCount,\n middleware,\n side\n } = options;\n const {type, inputFilter} = mediaTab;\n\n let promise = this.loadPromises[type];\n if(promise) {\n return promise;\n }\n\n if(type === 'members' || type === 'groups') {\n promise = this.loadMembers(options);\n } else if(type === 'stories') {\n promise = this.loadStories(options);\n } else if(type === 'similar') {\n promise = this.loadSimilarChannels(options);\n } else if(type === 'savedDialogs') {\n promise = this.loadSavedDialogs(options);\n }\n\n if(promise) {\n return this.loadPromises[type] = promise.finally(() => {\n if(!middleware()) {\n return;\n }\n\n this.loadPromises[type] = null;\n });\n }\n\n const history = this.historyStorage[inputFilter] ??= [];\n\n if(inputFilter === 'inputMessagesFilterEmpty' && !history.length && type !== 'saved') {\n if(!this.loadedChats) {\n this.loadChats();\n this.loadedChats = true;\n }\n\n if(!this.searchContext.query.trim() && !this.searchContext.peerId && !this.searchContext.minDate) {\n this.loaded[type] = true;\n return Promise.resolve();\n }\n }\n\n promise = this.loadPromises[type] = Promise.resolve().then(async() => {\n // render from cache\n if(history.length && this.usedFromHistory[inputFilter] < history.length && !justLoad) {\n const messages: any[] = [];\n let used = Math.max(0, this.usedFromHistory[inputFilter]);\n let slicedLength = 0;\n\n do {\n const ids = history.slice(used, used + loadCount);\n used += ids.length;\n slicedLength += ids.length;\n\n const notFilteredMessages = ids.map((m) => apiManagerProxy.getMessageByPeer(m.peerId, m.mid));\n // const notFilteredMessages = await Promise.all(promises);\n\n messages.push(...this.filterMessagesByType(notFilteredMessages, inputFilter));\n } while(slicedLength < loadCount && used < history.length);\n\n // если перебор\n /* if(slicedLength > loadCount) {\n let diff = messages.length - loadCount;\n messages = messages.slice(0, messages.length - diff);\n used -= diff;\n } */\n\n this.usedFromHistory[inputFilter] = used;\n // if(messages.length) {\n return this.performSearchResult(messages, mediaTab).finally(() => {\n setTimeout(() => {\n this.scrollable.checkForTriggers();\n }, 0);\n });\n // }\n }\n\n const lastItem = history[history.length - 1];\n const offsetId = lastItem?.mid || 0;\n const offsetPeerId = lastItem?.peerId || NULL_PEER_ID;\n\n const options: Parameters[0] = {\n ...this.searchContext,\n inputFilter: {_: inputFilter},\n offsetId,\n offsetPeerId,\n limit: loadCount,\n nextRate: this.nextRates[type] ??= 0,\n ...(type === 'saved' ? {inputFilter: undefined, peerId: rootScope.myId, threadId: this.searchContext.peerId} : {})\n };\n const value = await this.managers.appMessagesManager.getHistory(options);\n\n let messages = value.messages;\n if(!messages && value.history/* && mediaTab.type === 'saved' */) {\n messages = value.history.map((mid) => apiManagerProxy.getMessageByPeer(options.peerId, mid));\n }\n\n history.push(...messages.map((m) => ({mid: m.mid, peerId: m.peerId})));\n\n if(!this.counters[type]) {\n this.setCounter(type, value.count);\n }\n\n if(!middleware()) {\n // this.log.warn('peer changed');\n return;\n }\n\n // ! Фикс случая, когда не загружаются документы при открытой панели разработчиков (происходит из-за того, что не совпадают критерии отбора документов в getSearch)\n if(\n value.history.length < loadCount ||\n (this.searchContext.folderId !== undefined && !value.nextRate) ||\n // value.history.length === value.count\n value.isEnd.top\n ) {\n // if((value.count || history.length === value.count) && history.length >= value.count) {\n // this.log(logStr + 'loaded all media', value, loadCount);\n this.loaded[type] = true;\n }\n\n this.nextRates[type] = value.nextRate;\n\n if(justLoad) {\n return;\n }\n\n this.usedFromHistory[inputFilter] = history.length;\n\n if(!this.loaded[type]) {\n promise.then(() => {\n setTimeout(() => {\n if(!middleware()) return;\n // this.log('will preload more');\n if(this.mediaTab === mediaTab) {\n const promise = this.load(true, true);\n if(promise) {\n promise.then(() => {\n if(!middleware()) return;\n // this.log('preloaded more');\n setTimeout(() => {\n this.scrollable.checkForTriggers();\n }, 0);\n });\n }\n }\n }, 0);\n });\n }\n\n // if(value.history.length) {\n return this.performSearchResult(this.filterMessagesByType(messages, inputFilter), mediaTab);\n // }\n }).catch((err) => {\n this.log.error('load error:', err);\n }).finally(() => {\n this.loadPromises[type] = null;\n });\n\n return promise;\n }\n\n private canLoadMediaTab(mediaTab: SearchSuperMediaTab) {\n const inputFilter = mediaTab.inputFilter;\n return !this.loaded[mediaTab.type] || (this.historyStorage[inputFilter] && this.usedFromHistory[inputFilter] < this.historyStorage[inputFilter].length);\n }\n\n private async loadFirstTime() {\n const middleware = this.middleware.get();\n const {peerId, threadId} = this.searchContext;\n if(!this.hideEmptyTabs) {\n return;\n }\n\n const mediaTabs = this.mediaTabs.filter((mediaTab) => mediaTab.inputFilter && mediaTab.inputFilter !== 'inputMessagesFilterEmpty');\n const filters = mediaTabs.map((mediaTab) => ({_: mediaTab.inputFilter}));\n\n const [\n counters,\n canViewSavedDialogs,\n canViewSaved,\n canViewMembers,\n canViewGroups,\n canViewStories,\n canViewSimilar\n ] = await Promise.all([\n this.managers.appMessagesManager.getSearchCounters(peerId, filters, undefined, threadId),\n this.canViewSavedDialogs(),\n this.canViewSaved(),\n this.canViewMembers(),\n this.canViewGroups(),\n this.canViewStories(),\n this.canViewSimilar()\n ]);\n\n if(!middleware()) {\n return;\n }\n\n if(this.loadMutex) {\n await this.loadMutex;\n\n if(!middleware()) {\n return;\n }\n }\n\n let firstMediaTab: SearchSuperMediaTab;\n let count = 0;\n mediaTabs.forEach((mediaTab) => {\n const counter = counters.find((c) => c.filter._ === mediaTab.inputFilter);\n\n mediaTab.menuTab.classList.toggle('hide', !counter.count);\n mediaTab.menuTab.classList.remove('active');\n // mediaTab.contentTab.classList.toggle('hide', !counter.count);\n\n this.setCounter(mediaTab.type, counter.count);\n\n if(counter.count) {\n if(firstMediaTab === undefined) {\n firstMediaTab = mediaTab;\n }\n\n ++count;\n }\n });\n\n const savedDialogsTab = this.mediaTabsMap.get('savedDialogs');\n const savedTab = this.mediaTabsMap.get('saved');\n const membersTab = this.mediaTabsMap.get('members');\n const storiesTab = this.mediaTabsMap.get('stories');\n const groupsTab = this.mediaTabsMap.get('groups');\n const similarTab = this.mediaTabsMap.get('similar');\n\n const a: [SearchSuperMediaTab, boolean][] = [\n [savedDialogsTab, canViewSavedDialogs],\n [savedTab, canViewSaved],\n [storiesTab, canViewStories],\n [membersTab, canViewMembers],\n [groupsTab, canViewGroups],\n [similarTab, canViewSimilar]\n ];\n\n a.forEach(([tab, value]) => {\n if(!tab) {\n return;\n }\n\n tab.menuTab.classList.toggle('hide', !value);\n\n if(value) {\n ++count;\n }\n });\n\n if(canViewStories) {\n firstMediaTab = storiesTab;\n\n const newTitle = i18n(peerId.isUser() ? 'Stories' : 'ProfileStories');\n storiesTab.menuTabName.replaceWith(storiesTab.menuTabName = newTitle);\n }\n\n if(canViewMembers) {\n firstMediaTab = membersTab;\n }\n\n if(canViewSavedDialogs) {\n firstMediaTab = savedDialogsTab;\n }\n\n this.container.classList.toggle('hide', !firstMediaTab);\n this.container.parentElement.classList.toggle('search-empty', !firstMediaTab);\n if(firstMediaTab) {\n this.skipScroll = true;\n this.selectTab(this.mediaTabs.indexOf(firstMediaTab), false);\n // firstMediaTab.menuTab.classList.add('active');\n\n this.navScrollableContainer.classList.toggle('is-single', count <= 1);\n }\n }\n\n public async load(single = false, justLoad = false, side: 'top' | 'bottom' = 'bottom') {\n const peerId = this.searchContext.peerId;\n this.log('load', single, peerId, this.loadPromises);\n const middleware = this.middleware.get();\n\n if(this.firstLoad) {\n await (this.loadFirstTimePromise ??= this.loadFirstTime());\n if(!middleware()) {\n return;\n }\n\n this.loadFirstTimePromise = undefined;\n this.firstLoad = false;\n }\n\n let toLoad = single ? [this.mediaTab] : this.mediaTabs.filter((t) => t !== this.mediaTab);\n toLoad = toLoad.filter((mediaTab) => {\n return this.canLoadMediaTab(mediaTab);\n });\n\n if(peerId.isUser()) {\n findAndSplice(toLoad, (mediaTab) => mediaTab.type === 'members');\n } else {\n findAndSpliceAll(toLoad, (mediaTab) => mediaTab.type === 'groups');\n }\n\n if(!toLoad.length) {\n return;\n }\n\n const loadCount = justLoad ? 50 : Math.round((windowSize.height / 130 | 0) * 3 * 1.25); // that's good for all types\n\n const promises: Promise[] = toLoad.map((mediaTab) => {\n return this.loadType({\n mediaTab,\n justLoad,\n loadCount,\n middleware,\n side\n });\n });\n\n return Promise.all(promises).catch((err) => {\n this.log.error('Load error all promises:', err);\n });\n }\n\n private getMonthContainerByTimestamp(timestamp: number, type: SearchSuperType) {\n const date = new Date(timestamp * 1000);\n date.setHours(0, 0, 0);\n date.setDate(1);\n const dateTimestamp = date.getTime();\n const containers = this.monthContainers[type] ?? (this.monthContainers[type] = {});\n if(!(dateTimestamp in containers)) {\n const container = document.createElement('div');\n container.className = 'search-super-month';\n\n const name = document.createElement('div');\n name.classList.add('search-super-month-name');\n\n const options: Intl.DateTimeFormatOptions = {\n month: 'long'\n };\n\n if(date.getFullYear() !== new Date().getFullYear()) {\n options.year = 'numeric';\n }\n\n const dateElement = new I18n.IntlDateElement({\n date,\n options\n }).element;\n name.append(dateElement);\n\n container.append(name);\n\n const items = document.createElement('div');\n items.classList.add('search-super-month-items');\n\n container.append(name, items);\n\n const haveTimestamps = getObjectKeysAndSort(containers, 'desc');\n let i = 0;\n for(; i < haveTimestamps.length; ++i) {\n const t = haveTimestamps[i];\n if(dateTimestamp > t) {\n break;\n }\n }\n\n containers[dateTimestamp] = {container, items};\n positionElementByIndex(container, this.tabs[type], i);\n }\n\n return containers[dateTimestamp];\n }\n\n public async canViewSavedDialogs() {\n if(this.searchContext.peerId !== rootScope.myId || this.searchContext.threadId || !this.mediaTabsMap.has('savedDialogs')) {\n return false;\n }\n\n try {\n await this.managers.dialogsStorage.getDialogs({\n filterId: rootScope.myId\n });\n\n return true;\n } catch(err) {\n return false;\n }\n }\n\n public canViewSaved() {\n const {peerId, threadId} = this.searchContext;\n if(threadId || rootScope.myId === peerId) {\n return false;\n }\n\n return this.managers.appMessagesManager.getHistory({\n peerId: rootScope.myId,\n threadId: this.searchContext.peerId,\n limit: 50\n }).then((historyResult) => {\n return !!historyResult.count;\n }).catch(() => {\n return false;\n });\n }\n\n public canViewMembers() {\n const {peerId} = this.searchContext;\n const isAnyChat = peerId.isAnyChat();\n if(!isAnyChat || !this.mediaTabsMap.has('members')) return Promise.resolve(false);\n const chatId = peerId.toChatId();\n return Promise.all([\n this.managers.appChatsManager.isBroadcast(chatId),\n this.managers.appChatsManager.hasRights(chatId, 'view_participants'),\n this.managers.appChatsManager.isForum(chatId)\n ]).then(([isBroadcast, hasRights, isForum]) => {\n return !isBroadcast && hasRights && (!this.searchContext.threadId || !isForum);\n });\n }\n\n public async canViewGroups() {\n const {peerId} = this.searchContext;\n if(!peerId.isUser() || !this.mediaTabsMap.has('groups')) return false;\n const userFull = await this.managers.appProfileManager.getProfile(peerId.toUserId());\n return !!userFull.common_chats_count;\n }\n\n public async canViewStories() {\n const {peerId, threadId} = this.searchContext;\n if(!this.mediaTabsMap.has('stories') || threadId/* || !this.onStoriesLengthChange */) {\n return false;\n }\n\n if(peerId === rootScope.myId && !this.onStoriesLengthChange) {\n return false;\n }\n\n if(peerId.isUser()) {\n const promise = this.storiesArchive ?\n this.managers.appStoriesManager.getStoriesArchive(peerId, 1) :\n this.managers.appStoriesManager.getPinnedStories(peerId, 1);\n return promise.then(({count}) => !!count).catch(() => false);\n }\n\n const chatFull = await this.managers.appProfileManager.getChatFull(peerId.toChatId());\n return !!(chatFull as ChatFull.channelFull).pFlags.stories_pinned_available;\n }\n\n public async canViewSimilar() {\n const {peerId} = this.searchContext;\n if(peerId.isUser()) {\n return false;\n }\n\n try {\n const messagesChats = await this.managers.appChatsManager.getChannelRecommendations(peerId.toChatId());\n return !!messagesChats.chats.length;\n } catch(err) {\n return false;\n }\n }\n\n public cleanup() {\n this.loadPromises = {};\n this.loaded = {};\n this.loadedChats = false;\n this.nextRates = {};\n this.firstLoad = true;\n this.prevTabId = -1;\n this.counters = {};\n\n this.lazyLoadQueue.clear();\n\n this.mediaTabs.forEach((mediaTab) => {\n const {inputFilter} = mediaTab;\n if(!inputFilter) {\n return;\n }\n\n this.usedFromHistory[inputFilter] = -1;\n });\n\n if(this.selection?.isSelecting) {\n this.selection.cancelSelection();\n }\n\n // * must go to first tab (это костыль)\n /* const membersTab = this.mediaTabsMap.get('members');\n if(membersTab) {\n const tab = this.canViewMembers() ? membersTab : this.mediaTabs[this.mediaTabs.indexOf(membersTab) + 1];\n this.mediaTab = tab;\n } */\n\n this.middleware.clean();\n this.loadFirstTimePromise = undefined;\n this.cleanScrollPositions();\n\n this.membersList = undefined;\n this.membersParticipantMap = undefined;\n this.membersMiddlewareHelper?.destroy();\n this.membersMiddlewareHelper = undefined;\n }\n\n public cleanScrollPositions() {\n this.mediaTabs.forEach((mediaTab) => {\n mediaTab.scroll = undefined;\n });\n }\n\n public cleanupHTML(goFirst = false) {\n this.mediaTabs.forEach((tab) => {\n tab.contentTab.replaceChildren();\n\n if(this.hideEmptyTabs) {\n // tab.menuTab.classList.add('hide');\n this.container.classList.add('hide');\n this.container.parentElement.classList.add('search-empty');\n }\n\n if(tab.type === 'chats') {\n return;\n }\n\n if(!this.historyStorage[tab.inputFilter]) {\n const parent = tab.contentTab.parentElement;\n // if(!testScroll) {\n if(!parent.querySelector('.preloader')) {\n putPreloader(parent, true);\n }\n // }\n\n const empty = parent.querySelector('.content-empty');\n empty?.remove();\n }\n });\n\n /* if(goFirst) {\n const membersTab = this.mediaTabsMap.get('members');\n if(membersTab) {\n let idx = this.canViewMembers() ? 0 : 1;\n membersTab.menuTab.classList.toggle('hide', idx !== 0);\n\n this.selectTab(idx, false);\n } else {\n this.selectTab(0, false);\n }\n } */\n\n this.monthContainers = {};\n this.searchGroupMedia.clear();\n this.scrollable.scrollPosition = 0;\n\n /* if(testScroll) {\n for(let i = 0; i < 1500; ++i) {\n let div = document.createElement('div');\n div.insertAdjacentHTML('beforeend', ``);\n div.classList.add('grid-item');\n div.dataset.id = '' + (i / 3 | 0);\n //div.innerText = '' + (i / 3 | 0);\n this.tabs.inputMessagesFilterPhotoVideo.append(div);\n }\n } */\n }\n\n private copySearchContext(newInputFilter: MyInputMessagesFilter, nextRate: number) {\n const context = copy(this.searchContext);\n context.inputFilter = {_: newInputFilter};\n context.nextRate = nextRate;\n return context;\n }\n\n public setQuery({peerId, query, threadId, historyStorage, folderId, minDate, maxDate}: {\n peerId: PeerId,\n query?: string,\n threadId?: number,\n historyStorage?: AppSearchSuper['historyStorage'],\n folderId?: number,\n minDate?: number,\n maxDate?: number\n }) {\n this.searchContext = {\n peerId,\n query: query || '',\n inputFilter: {_: this.mediaTab.inputFilter},\n threadId,\n folderId,\n minDate,\n maxDate\n };\n\n this.historyStorage = historyStorage ?? {};\n\n this.cleanup();\n }\n\n public destroy() {\n this.cleanup();\n this.listenerSetter.removeAll();\n this.scrollable.destroy();\n this.swipeHandler?.removeListeners();\n this.selection?.cleanup();\n\n this.scrollStartCallback =\n this.onChangeTab =\n this.selectTab =\n this.searchContextMenu =\n this.swipeHandler =\n this.selection =\n undefined;\n }\n}\n","enum PrivacyType {\n Everybody = 2,\n Contacts = 1,\n Nobody = 0\n}\n\nexport default PrivacyType;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PrivacyRule} from '../../../../layer';\nimport PrivacyType from './privacyType';\n\nexport default function getPrivacyRulesDetails(rules: PrivacyRule[]) {\n const types: PrivacyType[] = [];\n\n type peers = {users: UserId[], chats: ChatId[]};\n const allowPeers: peers = {users: [], chats: []}, disallowPeers: peers = {users: [], chats: []};\n rules.forEach((rule) => {\n switch(rule._) {\n case 'privacyValueAllowAll':\n types.push(PrivacyType.Everybody);\n break;\n case 'privacyValueDisallowAll':\n types.push(PrivacyType.Nobody);\n break;\n case 'privacyValueAllowContacts':\n types.push(PrivacyType.Contacts);\n break;\n /* case 'privacyValueDisallowContacts':\n types.push('Except My Contacts');\n break; */\n case 'privacyValueAllowChatParticipants':\n allowPeers.chats.push(...rule.chats);\n break;\n case 'privacyValueAllowUsers':\n allowPeers.users.push(...rule.users);\n break;\n case 'privacyValueDisallowChatParticipants':\n disallowPeers.chats.push(...rule.chats);\n break;\n case 'privacyValueDisallowUsers':\n disallowPeers.users.push(...rule.users);\n break;\n }\n });\n\n return {type: types[0], disallowPeers, allowPeers};\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {a} from 'vitest/dist/reporters-5f784f42';\nimport anchorCallback from '../helpers/dom/anchorCallback';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport {randomLong} from '../helpers/random';\nimport {GlobalPrivacySettings, InputPrivacyKey, InputPrivacyRule} from '../layer';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getPrivacyRulesDetails from '../lib/appManagers/utils/privacy/getPrivacyRulesDetails';\nimport PrivacyType from '../lib/appManagers/utils/privacy/privacyType';\nimport {i18n, join, LangPackKey, _i18n} from '../lib/langPack';\nimport rootScope from '../lib/rootScope';\nimport PopupPremium from './popups/premium';\nimport RadioField from './radioField';\nimport Row, {RadioFormFromRows} from './row';\nimport Scrollable from './scrollable';\nimport SettingSection, {generateSection} from './settingSection';\nimport AppAddMembersTab from './sidebarLeft/tabs/addMembers';\nimport {SliderSuperTabEventable} from './sliderTab';\nimport {hideToast, toastNew} from './toast';\n\ntype PrivacyKey = InputPrivacyKey['_'];\n\nexport type PrivacySectionStr = LangPackKey | '' | HTMLElement;\nexport default class PrivacySection {\n public radioRows: Map;\n public radioSection: SettingSection;\n public exceptionsSection: SettingSection;\n public exceptions: Map;\n public peerIds: {\n disallow?: PeerId[],\n allow?: PeerId[]\n };\n public type: PrivacyType;\n\n constructor(public options: {\n tab: SliderSuperTabEventable,\n title: LangPackKey,\n inputKey?: PrivacyKey,\n captions?: [PrivacySectionStr, PrivacySectionStr, PrivacySectionStr, PrivacySectionStr?],\n appendTo?: Scrollable,\n noExceptions?: boolean,\n onRadioChange?: (value: number) => any,\n skipTypes?: PrivacyType[],\n exceptionTexts?: [LangPackKey, LangPackKey],\n managers: AppManagers,\n premiumOnly?: boolean,\n premiumCaption?: PrivacySectionStr,\n premiumError?: LangPackKey,\n myContactsAndPremium?: boolean,\n privacyType?: PrivacyType\n }) {\n if(options.captions) {\n options.captions.reverse();\n }\n\n const managers = options.managers;\n\n this.radioSection = new SettingSection({name: options.title, caption: true});\n\n this.radioRows = new Map();\n\n let r: Array<{type: PrivacyType, langKey: LangPackKey}> = [{\n type: PrivacyType.Everybody,\n langKey: 'PrivacySettingsController.Everbody'\n }, {\n type: PrivacyType.Contacts,\n langKey: 'PrivacySettingsController.MyContacts'\n }, {\n type: PrivacyType.Nobody,\n langKey: 'PrivacySettingsController.Nobody'\n }];\n\n if(options.myContactsAndPremium) {\n const rr = r.find((r) => r.type === PrivacyType.Contacts);\n rr.langKey = 'PrivacyMessagesContactsAndPremium';\n }\n\n if(options.skipTypes) {\n r = r.filter((r) => !options.skipTypes.includes(r.type));\n }\n\n const random = randomLong();\n r.forEach(({type, langKey}) => {\n const row = new Row({\n radioField: new RadioField({\n langKey,\n name: random,\n value: '' + type\n }),\n clickable: (e) => {\n if(row.radioField.locked) {\n cancelEvent(e);\n toastNew({\n langPackKey: options.premiumError,\n langPackArguments: [\n anchorCallback(() => {\n hideToast();\n PopupPremium.show();\n })\n ]\n });\n }\n },\n listenerSetter: options.tab.listenerSetter\n });\n\n this.radioRows.set(type, row);\n });\n\n const form = RadioFormFromRows([...this.radioRows.values()], this.onRadioChange);\n\n this.radioSection.content.append(form);\n if(options.appendTo) {\n options.appendTo.append(this.radioSection.container);\n }\n\n if(!options.noExceptions) {\n const section = this.exceptionsSection = new SettingSection({name: 'PrivacyExceptions', caption: 'PrivacySettingsController.PeerInfo'});\n\n this.exceptions = new Map([[\n 'disallow',\n {\n titleLangKey: options.exceptionTexts[0],\n key: 'disallow',\n row: null,\n icon: 'deleteuser',\n subtitleLangKey: 'PrivacySettingsController.AddUsers',\n clickable: true\n }\n ], [\n 'allow',\n {\n titleLangKey: options.exceptionTexts[1],\n key: 'allow',\n row: null,\n icon: 'adduser',\n subtitleLangKey: 'PrivacySettingsController.AddUsers',\n clickable: true\n }\n ]]);\n\n this.exceptions.forEach((exception) => {\n exception.row = new Row(exception);\n\n attachClickEvent(exception.row.container, () => {\n promise.then(() => {\n const _peerIds = this.peerIds[exception.key];\n options.tab.slider.createTab(AppAddMembersTab).open({\n type: 'privacy',\n skippable: true,\n title: exception.titleLangKey,\n placeholder: 'PrivacyModal.Search.Placeholder',\n takeOut: (newPeerIds) => {\n _peerIds.length = 0;\n _peerIds.push(...newPeerIds);\n exception.row.subtitle.replaceChildren(...this.generateStr(this.splitPeersByType(newPeerIds)));\n this.onRadioChange(this.type);\n },\n selectedPeerIds: _peerIds\n });\n });\n }, {listenerSetter: options.tab.listenerSetter});\n\n section.content.append(exception.row.container);\n });\n\n if(options.appendTo) {\n options.appendTo.append(section.container);\n }\n }\n\n /* setTimeout(() => {\n this.setRadio(PrivacyType.Contacts);\n }, 0); */\n\n const promise = (options.inputKey ? managers.appPrivacyManager.getPrivacy(options.inputKey) : Promise.resolve()).then((rules) => {\n const details = rules ? getPrivacyRulesDetails(rules) : undefined;\n const originalType = options.privacyType || details?.type;\n\n if(this.exceptions) {\n this.peerIds = {};\n ['allow' as const, 'disallow' as const].forEach((k) => {\n const arr = [];\n const from = k === 'allow' ? details.allowPeers : details.disallowPeers;\n arr.push(...from.users.map((id) => id.toPeerId()));\n arr.push(...from.chats.map((id) => id.toPeerId(true)));\n this.peerIds[k] = arr;\n const s = this.exceptions.get(k).row.subtitle;\n s.replaceChildren();\n s.append(...this.generateStr(from));\n });\n }\n\n if(options.premiumOnly) {\n const toggleLock = () => {\n const locked = this.isLocked();\n this.radioRows.forEach((row, privacyType) => {\n if(privacyType === PrivacyType.Everybody) {\n return;\n }\n\n row.radioField.locked = locked;\n });\n\n this.setRadio(this.isLocked() ? PrivacyType.Everybody : originalType);\n if(this.exceptionsSection) {\n this.exceptionsSection.container.classList.toggle('hide', locked);\n }\n };\n\n toggleLock();\n options.tab.listenerSetter.add(rootScope)('premium_toggle', toggleLock);\n } else {\n this.setRadio(this.isLocked() ? PrivacyType.Everybody : originalType);\n }\n\n options.tab.eventListener.addEventListener('destroy', this.onTabDestroy, {once: true});\n });\n }\n\n public isLocked() {\n return this.options.premiumOnly && !rootScope.premium;\n }\n\n public onTabDestroy = async() => {\n if(this.isLocked()) {\n return;\n }\n\n if(!this.options.inputKey) {\n return;\n }\n\n const rules: InputPrivacyRule[] = [];\n\n switch(this.type) {\n case PrivacyType.Everybody:\n rules.push({_: 'inputPrivacyValueAllowAll'});\n break;\n case PrivacyType.Contacts:\n rules.push({_: 'inputPrivacyValueAllowContacts'});\n break;\n case PrivacyType.Nobody:\n rules.push({_: 'inputPrivacyValueDisallowAll'});\n break;\n }\n\n if(this.exceptions) {\n const a = ([\n ['allow', 'inputPrivacyValueAllowChatParticipants', 'inputPrivacyValueAllowUsers'],\n ['disallow', 'inputPrivacyValueDisallowChatParticipants', 'inputPrivacyValueDisallowUsers']\n ] as Array<[\n 'allow' | 'disallow',\n 'inputPrivacyValueAllowChatParticipants' | 'inputPrivacyValueDisallowChatParticipants',\n 'inputPrivacyValueAllowUsers' | 'inputPrivacyValueDisallowUsers'\n ]>);\n for(const [k, chatKey, usersKey] of a) {\n if(this.exceptions.get(k).row.container.classList.contains('hide')) {\n continue;\n }\n\n const _peerIds = this.peerIds[k];\n if(!_peerIds) {\n continue;\n }\n\n const splitted = this.splitPeersByType(_peerIds);\n if(splitted.chats.length) {\n rules.push({_: chatKey, chats: splitted.chats});\n }\n\n if(splitted.users.length) {\n rules.push({\n _: usersKey,\n users: await Promise.all(splitted.users.map((id) => rootScope.managers.appUsersManager.getUserInput(id)))\n });\n }\n }\n }\n\n rootScope.managers.appPrivacyManager.setPrivacy(this.options.inputKey, rules);\n };\n\n private replaceCaption(caption: PrivacySectionStr = this.isLocked() ? this.options.premiumCaption : this.options.captions[this.type]) {\n const captionElement = this.radioSection.caption;\n if(!caption) {\n captionElement.replaceChildren();\n } else if(caption instanceof HTMLElement) {\n replaceContent(captionElement, caption);\n } else {\n _i18n(captionElement, caption);\n }\n captionElement.classList.toggle('hide', !caption);\n }\n\n private onRadioChange = (value: string | PrivacySection['type']) => {\n value = +value as PrivacySection['type'];\n this.type = value;\n\n this.replaceCaption();\n\n if(this.exceptions) {\n this.exceptions.get('allow').row.container.classList.toggle('hide', this.type === PrivacyType.Everybody);\n this.exceptions.get('disallow').row.container.classList.toggle('hide', this.type === PrivacyType.Nobody);\n }\n\n this.options.onRadioChange && this.options.onRadioChange(value);\n };\n\n public setRadio(type: PrivacySection['type']) {\n const row = this.radioRows.get(type);\n this.onRadioChange(type);\n row.radioField.input.checked = true;\n }\n\n private splitPeersByType(peerIds: PeerId[]) {\n const peers = {users: [] as UserId[], chats: [] as ChatId[]};\n peerIds.forEach((peerId) => {\n peers[peerId.isAnyChat() ? 'chats' : 'users'].push(peerId.isAnyChat() ? peerId.toChatId() : peerId);\n });\n\n return peers;\n }\n\n private generateStr(peers: {users: UserId[], chats: ChatId[]}) {\n if(!peers.users.length && !peers.chats.length) {\n return [i18n('PrivacySettingsController.AddUsers')];\n }\n\n return join([\n peers.users.length ? i18n('Users', [peers.users.length]) : null,\n peers.chats.length ? i18n('Chats', [peers.chats.length]) : null\n ].filter(Boolean), false);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {i18n, LangPackKey} from '../../../../lib/langPack';\nimport anchorCopy from '../../../../helpers/dom/anchorCopy';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyPhoneNumberTab extends SliderSuperTabEventable {\n public async init() {\n this.container.classList.add('privacy-tab', 'privacy-phone-number');\n this.setTitle('PrivacyPhone');\n\n const formatted = '+' + (await this.managers.appUsersManager.getSelf()).phone;\n const captionEl = document.createElement('div');\n captionEl.append(\n i18n('PrivacyPhoneInfo'),\n document.createElement('br'),\n document.createElement('br'),\n i18n('PrivacyPhoneInfo4'),\n document.createElement('br'),\n anchorCopy({\n mePath: formatted\n })\n );\n\n const phoneSection = new PrivacySection({\n tab: this,\n title: 'PrivacyPhoneTitle',\n inputKey: 'inputPrivacyKeyPhoneNumber',\n captions: [captionEl, captionEl, ''],\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\n appendTo: this.scrollable,\n onRadioChange: (type) => {\n s.setRadio(PrivacyType.Everybody);\n s.radioSection.container.classList.toggle('hide', type !== PrivacyType.Nobody);\n },\n managers: this.managers\n });\n\n const sCaption: LangPackKey = 'PrivacyPhoneInfo3';\n const s = new PrivacySection({\n tab: this,\n title: 'PrivacyPhoneTitle2',\n inputKey: 'inputPrivacyKeyAddedByPhone',\n captions: [sCaption, sCaption, ''],\n noExceptions: true,\n skipTypes: [PrivacyType.Nobody],\n managers: this.managers\n });\n\n this.scrollable.container.insertBefore(s.radioSection.container, phoneSection.radioSection.container.nextSibling);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport Button from '../../../button';\nimport SettingSection from '../../../settingSection';\nimport {SliderSuperTab} from '../../../slider';\nimport wrapStickerEmoji from '../../../wrappers/stickerEmoji';\nimport AppSettingsTab from '../settings';\n\nexport default class AppTwoStepVerificationSetTab extends SliderSuperTab {\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-set');\n this.setTitle('TwoStepVerificationPasswordSet');\n\n const section = new SettingSection({\n captionOld: 'TwoStepVerificationPasswordSetInfo',\n noDelimiter: true\n });\n\n const emoji = '🥳';\n const stickerContainer = document.createElement('div');\n\n wrapStickerEmoji({\n emoji,\n div: stickerContainer,\n width: 160,\n height: 160\n });\n\n section.content.append(stickerContainer);\n\n const inputContent = section.generateContentElement();\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const btnReturn = Button('btn-primary btn-color-primary', {text: 'TwoStepVerificationPasswordReturnSettings'});\n\n attachClickEvent(btnReturn, (e) => {\n this.close();\n });\n\n this.slider.sliceTabsUntilTab(AppSettingsTab, this);\n\n inputWrapper.append(btnReturn);\n\n inputContent.append(inputWrapper);\n\n this.scrollable.append(section.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {IS_MOBILE_SAFARI} from '../../environment/userAgent';\n\nexport function canFocus(isFirstInput: boolean) {\n return !IS_MOBILE_SAFARI || !isFirstInput;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AccountPassword} from '../../../../layer';\nimport Button from '../../../button';\nimport {SliderSuperTab} from '../../../slider';\nimport AppTwoStepVerificationSetTab from './passwordSet';\nimport CodeInputField from '../../../codeInputField';\nimport AppTwoStepVerificationEmailTab from './email';\nimport {putPreloader} from '../../../putPreloader';\nimport {i18n, _i18n} from '../../../../lib/langPack';\nimport {canFocus} from '../../../../helpers/dom/canFocus';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport replaceContent from '../../../../helpers/dom/replaceContent';\nimport toggleDisability from '../../../../helpers/dom/toggleDisability';\nimport wrapStickerEmoji from '../../../wrappers/stickerEmoji';\nimport SettingSection from '../../../settingSection';\n\nexport default class AppTwoStepVerificationEmailConfirmationTab extends SliderSuperTab {\n public codeInputField: CodeInputField;\n public state: AccountPassword;\n public email: string;\n public length: number;\n public isFirst = false;\n\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-email-confirmation');\n this.setTitle('TwoStepAuth.RecoveryTitle');\n\n const section = new SettingSection({\n captionOld: true,\n noDelimiter: true\n });\n\n _i18n(section.caption, 'TwoStepAuth.ConfirmEmailCodeDesc', [this.email]);\n\n const emoji = '📬';\n const stickerContainer = document.createElement('div');\n\n wrapStickerEmoji({\n div: stickerContainer,\n width: 160,\n height: 160,\n emoji\n });\n\n section.content.append(stickerContainer);\n\n const inputContent = section.generateContentElement();\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const inputField = this.codeInputField = new CodeInputField({\n name: 'recovery-email-code',\n label: 'TwoStepAuth.RecoveryCode',\n length: this.length,\n onFill: (code) => {\n freeze(true);\n\n this.managers.passwordManager.confirmPasswordEmail('' + code)\n .then((value) => {\n if(!value) {\n\n }\n\n goNext();\n })\n .catch((err) => {\n switch(err.type) {\n case 'CODE_INVALID':\n inputField.input.classList.add('error');\n replaceContent(inputField.label, i18n('TwoStepAuth.RecoveryCodeInvalid'));\n break;\n\n case 'EMAIL_HASH_EXPIRED':\n inputField.input.classList.add('error');\n replaceContent(inputField.label, i18n('TwoStepAuth.RecoveryCodeExpired'));\n break;\n\n default:\n console.error('confirm error', err);\n break;\n }\n\n freeze(false);\n });\n }\n });\n\n const btnChange = Button('btn-primary btn-primary-transparent primary', {text: 'TwoStepAuth.EmailCodeChangeEmail'});\n const btnResend = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'ResendCode'});\n\n const goNext = () => {\n this.slider.createTab(AppTwoStepVerificationSetTab).open();\n };\n\n const freeze = (disable: boolean) => {\n toggleDisability([inputField.input, btnChange, btnResend], disable);\n };\n\n attachClickEvent(btnChange, (e) => {\n freeze(true);\n this.managers.passwordManager.cancelPasswordEmail().then((value) => {\n this.slider.sliceTabsUntilTab(AppTwoStepVerificationEmailTab, this);\n this.close();\n }, () => {\n freeze(false);\n });\n });\n\n attachClickEvent(btnResend, (e) => {\n freeze(true);\n const d = putPreloader(btnResend);\n this.managers.passwordManager.resendPasswordEmail().then((value) => {\n d.remove();\n freeze(false);\n });\n });\n\n inputWrapper.append(inputField.container, btnChange, btnResend);\n\n inputContent.append(inputWrapper);\n\n this.scrollable.append(section.container);\n }\n\n onOpenAfterTimeout() {\n if(!canFocus(this.isFirst)) return;\n this.codeInputField.input.focus();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AccountPassword} from '../../../../layer';\nimport Button from '../../../button';\nimport {SliderSuperTab} from '../../../slider';\nimport InputField from '../../../inputField';\nimport {putPreloader} from '../../../putPreloader';\nimport AppTwoStepVerificationSetTab from './passwordSet';\nimport AppTwoStepVerificationEmailConfirmationTab from './emailConfirmation';\nimport PopupPeer from '../../../popups/peer';\nimport cancelEvent from '../../../../helpers/dom/cancelEvent';\nimport {canFocus} from '../../../../helpers/dom/canFocus';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport matchEmail from '../../../../lib/richTextProcessor/matchEmail';\nimport wrapStickerEmoji from '../../../wrappers/stickerEmoji';\nimport SettingSection from '../../../settingSection';\nimport PopupElement from '../../../popups';\n\nexport default class AppTwoStepVerificationEmailTab extends SliderSuperTab {\n public inputField: InputField;\n public state: AccountPassword;\n public plainPassword: string;\n public newPassword: string;\n public hint: string;\n public isFirst = false;\n\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-email');\n this.setTitle('RecoveryEmailTitle');\n\n const section = new SettingSection({\n captionOld: true,\n noDelimiter: true\n });\n\n const emoji = '💌';\n const stickerContainer = document.createElement('div');\n\n wrapStickerEmoji({\n div: stickerContainer,\n width: 160,\n height: 160,\n emoji\n });\n\n section.content.append(stickerContainer);\n\n const inputContent = section.generateContentElement();\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const inputField = this.inputField = new InputField({\n name: 'recovery-email',\n label: 'RecoveryEmail',\n plainText: true\n });\n\n inputField.input.addEventListener('keypress', (e) => {\n if(e.key === 'Enter') {\n cancelEvent(e);\n return onContinueClick();\n }\n });\n\n inputField.input.addEventListener('input', (e) => {\n inputField.input.classList.remove('error');\n });\n\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\n const btnSkip = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'YourEmailSkip'});\n\n const goNext = () => {\n this.slider.createTab(AppTwoStepVerificationSetTab).open();\n };\n\n const onContinueClick = () => {\n const email = inputField.value.trim();\n const match = matchEmail(email);\n if(!match || match[0].length !== email.length) {\n inputField.input.classList.add('error');\n return;\n }\n\n toggleButtons(true);\n const d = putPreloader(btnContinue);\n\n this.managers.passwordManager.updateSettings({\n hint: this.hint,\n currentPassword: this.plainPassword,\n newPassword: this.newPassword,\n email\n }).then((value) => {\n goNext();\n }, (err) => {\n if(err.type.includes('EMAIL_UNCONFIRMED')) {\n const symbols = +err.type.match(/^EMAIL_UNCONFIRMED_(\\d+)/)[1];\n\n const tab = this.slider.createTab(AppTwoStepVerificationEmailConfirmationTab);\n tab.state = this.state;\n tab.email = email;\n tab.length = symbols;\n tab.open();\n } else {\n console.log('password set error', err);\n }\n\n toggleButtons(false);\n d.remove();\n });\n };\n attachClickEvent(btnContinue, onContinueClick);\n\n const toggleButtons = (freeze: boolean) => {\n if(freeze) {\n btnContinue.setAttribute('disabled', 'true');\n btnSkip.setAttribute('disabled', 'true');\n } else {\n btnContinue.removeAttribute('disabled');\n btnSkip.removeAttribute('disabled');\n }\n };\n\n attachClickEvent(btnSkip, (e) => {\n const popup = PopupElement.createPopup(PopupPeer, 'popup-skip-email', {\n buttons: [{\n langKey: 'Cancel',\n isCancel: true\n }, {\n langKey: 'YourEmailSkip',\n callback: () => {\n // inputContent.classList.add('sidebar-left-section-disabled');\n toggleButtons(true);\n putPreloader(btnSkip);\n this.managers.passwordManager.updateSettings({\n hint: this.hint,\n currentPassword: this.plainPassword,\n newPassword: this.newPassword,\n email: ''\n }).then(() => {\n goNext();\n }, (err) => {\n toggleButtons(false);\n });\n },\n isDanger: true\n }],\n titleLangKey: 'YourEmailSkipWarning',\n descriptionLangKey: 'YourEmailSkipWarningText'\n });\n\n popup.show();\n });\n\n inputWrapper.append(inputField.container, btnContinue, btnSkip);\n\n inputContent.append(inputWrapper);\n\n this.scrollable.append(section.container);\n }\n\n onOpenAfterTimeout() {\n if(!canFocus(this.isFirst)) return;\n this.inputField.input.focus();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AccountPassword} from '../../../../layer';\nimport Button from '../../../button';\nimport {SliderSuperTab} from '../../../slider';\nimport InputField from '../../../inputField';\nimport AppTwoStepVerificationEmailTab from './email';\nimport {toast} from '../../../toast';\nimport I18n from '../../../../lib/langPack';\nimport cancelEvent from '../../../../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport wrapStickerEmoji from '../../../wrappers/stickerEmoji';\nimport SettingSection from '../../../settingSection';\n\nexport default class AppTwoStepVerificationHintTab extends SliderSuperTab {\n public inputField: InputField;\n public state: AccountPassword;\n public plainPassword: string;\n public newPassword: string;\n\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-hint');\n this.setTitle('TwoStepAuth.SetupHintTitle');\n\n const section = new SettingSection({\n noDelimiter: true\n });\n\n const emoji = '💡';\n const stickerContainer = document.createElement('div');\n wrapStickerEmoji({\n div: stickerContainer,\n width: 160,\n height: 160,\n emoji\n });\n\n section.content.append(stickerContainer);\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const inputField = this.inputField = new InputField({\n name: 'hint',\n label: 'TwoStepAuth.SetupHintPlaceholder'\n });\n\n inputField.input.addEventListener('keypress', (e) => {\n if(e.key === 'Enter') {\n cancelEvent(e);\n return inputField.value ? onContinueClick() : onSkipClick();\n }\n });\n\n const goNext = (e?: Event, saveHint?: boolean) => {\n if(e) {\n cancelEvent(e);\n }\n\n const hint = saveHint ? inputField.value : undefined;\n if(hint && this.newPassword === hint) {\n toast(I18n.format('PasswordAsHintError', true));\n return;\n }\n\n const tab = this.slider.createTab(AppTwoStepVerificationEmailTab);\n tab.state = this.state;\n tab.plainPassword = this.plainPassword;\n tab.newPassword = this.newPassword;\n tab.hint = hint;\n\n tab.open();\n };\n\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\n const btnSkip = Button('btn-primary btn-secondary btn-primary-transparent primary', {text: 'YourEmailSkip'});\n\n const onContinueClick = (e?: Event) => goNext(e, true);\n const onSkipClick = (e?: Event) => goNext(e, false);\n attachClickEvent(btnContinue, onContinueClick);\n attachClickEvent(btnSkip, onSkipClick);\n\n inputWrapper.append(inputField.container, btnContinue, btnSkip);\n\n section.content.append(inputWrapper);\n\n this.scrollable.append(section.container);\n }\n\n onOpenAfterTimeout() {\n this.inputField.input.focus();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AccountPassword} from '../../../../layer';\nimport Button from '../../../button';\nimport PasswordInputField from '../../../passwordInputField';\nimport {SliderSuperTab} from '../../../slider';\nimport TrackingMonkey from '../../../monkeys/tracking';\nimport AppTwoStepVerificationHintTab from './hint';\nimport {InputState} from '../../../inputField';\nimport cancelEvent from '../../../../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport SettingSection from '../../../settingSection';\n\nexport default class AppTwoStepVerificationReEnterPasswordTab extends SliderSuperTab {\n public state: AccountPassword;\n public passwordInputField: PasswordInputField;\n public plainPassword: string;\n public newPassword: string;\n\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-enter-password', 'two-step-verification-re-enter-password');\n this.setTitle('PleaseReEnterPassword');\n\n const section = new SettingSection({\n noDelimiter: true\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const passwordInputField = this.passwordInputField = new PasswordInputField({\n name: 're-enter-password',\n label: 'PleaseReEnterPassword'\n });\n\n const monkey = new TrackingMonkey(passwordInputField, 157);\n\n const btnContinue = Button('btn-primary btn-color-primary', {text: 'Continue'});\n\n inputWrapper.append(passwordInputField.container, btnContinue);\n section.content.append(monkey.container, inputWrapper);\n\n this.scrollable.append(section.container);\n\n passwordInputField.input.addEventListener('keypress', (e) => {\n if(passwordInputField.input.classList.contains('error')) {\n passwordInputField.setState(InputState.Neutral);\n }\n\n if(e.key === 'Enter') {\n return onContinueClick();\n }\n });\n\n const verifyInput = () => {\n if(this.newPassword !== passwordInputField.value) {\n passwordInputField.setError();\n return false;\n }\n\n return true;\n };\n\n const onContinueClick = (e?: Event) => {\n if(e) {\n cancelEvent(e);\n }\n\n if(!verifyInput()) return;\n\n const tab = this.slider.createTab(AppTwoStepVerificationHintTab);\n tab.state = this.state;\n tab.plainPassword = this.plainPassword;\n tab.newPassword = this.newPassword;\n tab.open();\n };\n attachClickEvent(btnContinue, onContinueClick);\n\n return monkey.load();\n }\n\n onOpenAfterTimeout() {\n this.passwordInputField.input.focus();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport AppTwoStepVerificationTab from '.';\nimport cancelEvent from '../../../../helpers/dom/cancelEvent';\nimport {canFocus} from '../../../../helpers/dom/canFocus';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport replaceContent from '../../../../helpers/dom/replaceContent';\nimport setInnerHTML from '../../../../helpers/dom/setInnerHTML';\nimport {AccountPassword} from '../../../../layer';\nimport I18n, {i18n} from '../../../../lib/langPack';\nimport wrapEmojiText from '../../../../lib/richTextProcessor/wrapEmojiText';\nimport Button from '../../../button';\nimport {putPreloader} from '../../../putPreloader';\nimport PasswordMonkey from '../../../monkeys/password';\nimport PasswordInputField from '../../../passwordInputField';\nimport {SliderSuperTab} from '../../../slider';\nimport AppTwoStepVerificationReEnterPasswordTab from './reEnterPassword';\nimport SettingSection from '../../../settingSection';\n\nexport default class AppTwoStepVerificationEnterPasswordTab extends SliderSuperTab {\n public state: AccountPassword;\n public passwordInputField: PasswordInputField;\n public plainPassword: string;\n public isFirst = true;\n\n public init() {\n const isNew = !this.state.pFlags.has_password || this.plainPassword;\n this.container.classList.add('two-step-verification', 'two-step-verification-enter-password');\n this.setTitle(isNew ? 'PleaseEnterFirstPassword' : 'PleaseEnterCurrentPassword');\n\n const section = new SettingSection({\n noDelimiter: true\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const passwordInputField = this.passwordInputField = new PasswordInputField({\n name: 'enter-password',\n label: isNew ? 'PleaseEnterFirstPassword' : (this.state.hint ? undefined : 'LoginPassword'),\n labelText: !isNew && this.state.hint ? wrapEmojiText(this.state.hint) : undefined\n });\n\n const monkey = new PasswordMonkey(passwordInputField, 157);\n\n const btnContinue = Button('btn-primary btn-color-primary');\n const textEl = new I18n.IntlElement({key: 'Continue'});\n\n btnContinue.append(textEl.element);\n\n inputWrapper.append(passwordInputField.container, btnContinue);\n section.content.append(monkey.container, inputWrapper);\n\n this.scrollable.append(section.container);\n\n passwordInputField.input.addEventListener('keypress', (e) => {\n if(passwordInputField.input.classList.contains('error')) {\n passwordInputField.input.classList.remove('error');\n textEl.key = 'Continue';\n textEl.update();\n }\n\n if(e.key === 'Enter') {\n return onContinueClick();\n }\n });\n\n const verifyInput = () => {\n if(!passwordInputField.value.length) {\n passwordInputField.input.classList.add('error');\n return false;\n }\n\n return true;\n };\n\n let onContinueClick: (e?: Event) => void;\n if(!isNew) {\n let getStateInterval: number;\n\n const getState = () => {\n // * just to check session relevance\n if(!getStateInterval) {\n getStateInterval = window.setInterval(getState, 10e3);\n }\n\n return this.managers.passwordManager.getState().then((_state) => {\n this.state = _state;\n\n if(this.state.hint) {\n setInnerHTML(passwordInputField.label, wrapEmojiText(this.state.hint));\n } else {\n replaceContent(passwordInputField.label, i18n('LoginPassword'));\n }\n });\n };\n\n const submit = (e?: Event) => {\n if(!verifyInput()) {\n cancelEvent(e);\n return;\n }\n\n btnContinue.setAttribute('disabled', 'true');\n textEl.key = 'PleaseWait';\n textEl.update();\n const preloader = putPreloader(btnContinue);\n\n const plainPassword = passwordInputField.value;\n this.managers.passwordManager.check(passwordInputField.value, this.state).then((auth) => {\n console.log(auth);\n\n if(auth._ === 'auth.authorization') {\n clearInterval(getStateInterval);\n if(monkey) monkey.remove();\n const tab = this.slider.createTab(AppTwoStepVerificationTab);\n tab.state = this.state;\n tab.plainPassword = plainPassword;\n tab.open();\n this.slider.removeTabFromHistory(this);\n }\n }, (err) => {\n btnContinue.removeAttribute('disabled');\n passwordInputField.input.classList.add('error');\n\n switch(err.type) {\n default:\n // btnContinue.innerText = err.type;\n textEl.key = 'PASSWORD_HASH_INVALID';\n textEl.update();\n preloader.remove();\n passwordInputField.select();\n break;\n }\n\n getState();\n });\n };\n\n onContinueClick = submit;\n\n getState();\n } else {\n onContinueClick = (e) => {\n if(e) {\n cancelEvent(e);\n }\n\n if(!verifyInput()) return;\n\n const tab = this.slider.createTab(AppTwoStepVerificationReEnterPasswordTab);\n tab.state = this.state;\n tab.newPassword = passwordInputField.value;\n tab.plainPassword = this.plainPassword;\n tab.open();\n };\n }\n\n attachClickEvent(btnContinue, onContinueClick);\n\n return monkey.load();\n }\n\n onOpenAfterTimeout() {\n if(!canFocus(this.isFirst)) return;\n this.passwordInputField.input.focus();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport {AccountPassword} from '../../../../layer';\nimport {_i18n} from '../../../../lib/langPack';\nimport Button from '../../../button';\nimport PopupElement from '../../../popups';\nimport PopupPeer from '../../../popups/peer';\nimport SettingSection from '../../../settingSection';\nimport {SliderSuperTab} from '../../../slider';\nimport wrapStickerEmoji from '../../../wrappers/stickerEmoji';\nimport AppSettingsTab from '../settings';\nimport AppTwoStepVerificationEmailTab from './email';\nimport AppTwoStepVerificationEnterPasswordTab from './enterPassword';\n\nexport default class AppTwoStepVerificationTab extends SliderSuperTab {\n public state: AccountPassword;\n public plainPassword: string;\n\n public init() {\n this.container.classList.add('two-step-verification', 'two-step-verification-main');\n this.setTitle('TwoStepVerificationTitle');\n\n const section = new SettingSection({\n captionOld: true,\n noDelimiter: true\n });\n\n const emoji = '🔐';\n const stickerContainer = document.createElement('div');\n\n wrapStickerEmoji({\n div: stickerContainer,\n width: 168,\n height: 168,\n emoji\n });\n\n section.content.append(stickerContainer);\n\n const c = section.generateContentElement();\n if(this.state.pFlags.has_password) {\n _i18n(section.caption, 'TwoStepAuth.GenericHelp');\n\n const btnChangePassword = Button('btn-primary btn-transparent', {icon: 'edit', text: 'TwoStepAuth.ChangePassword'});\n const btnDisablePassword = Button('btn-primary btn-transparent', {icon: 'passwordoff', text: 'TwoStepAuth.RemovePassword'});\n const btnSetRecoveryEmail = Button('btn-primary btn-transparent', {icon: 'email', text: this.state.pFlags.has_recovery ? 'TwoStepAuth.ChangeEmail' : 'TwoStepAuth.SetupEmail'});\n\n attachClickEvent(btnChangePassword, () => {\n const tab = this.slider.createTab(AppTwoStepVerificationEnterPasswordTab);\n tab.state = this.state;\n tab.plainPassword = this.plainPassword;\n tab.open();\n });\n\n attachClickEvent(btnDisablePassword, () => {\n const popup = PopupElement.createPopup(PopupPeer, 'popup-disable-password', {\n buttons: [{\n langKey: 'Disable',\n callback: () => {\n this.managers.passwordManager.updateSettings({currentPassword: this.plainPassword}).then(() => {\n this.slider.sliceTabsUntilTab(AppSettingsTab, this);\n this.close();\n });\n },\n isDanger: true\n }],\n titleLangKey: 'TurnPasswordOffQuestionTitle',\n descriptionLangKey: 'TurnPasswordOffQuestion'\n });\n\n popup.show();\n });\n\n attachClickEvent(btnSetRecoveryEmail, () => {\n const tab = this.slider.createTab(AppTwoStepVerificationEmailTab);\n tab.state = this.state;\n tab.hint = this.state.hint;\n tab.plainPassword = this.plainPassword;\n tab.newPassword = this.plainPassword;\n tab.isFirst = true;\n tab.open();\n });\n\n c.append(btnChangePassword, btnDisablePassword, btnSetRecoveryEmail);\n } else {\n _i18n(section.caption, 'TwoStepAuth.SetPasswordHelp');\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n const btnSetPassword = Button('btn-primary btn-color-primary', {text: 'TwoStepVerificationSetPassword'});\n\n inputWrapper.append(btnSetPassword);\n c.append(inputWrapper);\n\n attachClickEvent(btnSetPassword, (e) => {\n const tab = this.slider.createTab(AppTwoStepVerificationEnterPasswordTab);\n tab.state = this.state;\n tab.open();\n });\n }\n\n this.scrollable.append(section.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey, i18n} from '../../../../lib/langPack';\nimport Row from '../../../row';\nimport CheckboxField from '../../../checkboxField';\nimport SettingSection from '../../../settingSection';\nimport Button from '../../../button';\nimport rootScope from '../../../../lib/rootScope';\nimport {attachClickEvent} from '../../../../helpers/dom/clickEvent';\nimport PopupPremium from '../../../popups/premium';\nimport {GlobalPrivacySettings} from '../../../../layer';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyLastSeenTab extends SliderSuperTabEventable<{\n privacy: (globalPrivacy: Promise) => void\n}> {\n public init(globalPrivacy: GlobalPrivacySettings) {\n this.container.classList.add('privacy-tab', 'privacy-last-seen');\n this.setTitle('PrivacyLastSeen');\n\n const canHideReadTime = () => {\n return privacySection.type !== PrivacyType.Everybody || !!privacySection.peerIds.disallow.length;\n };\n\n const caption: LangPackKey = 'PrivacySettingsController.LastSeenDescription';\n const privacySection = new PrivacySection({\n tab: this,\n title: 'LastSeenTitle',\n inputKey: 'inputPrivacyKeyStatusTimestamp',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\n appendTo: this.scrollable,\n onRadioChange: () => {\n [hideReadTimeSection, premiumSection].forEach((section) => {\n section.container.classList.toggle('hide', !canHideReadTime());\n });\n },\n managers: this.managers\n });\n\n let hideReadTimeSection: SettingSection;\n {\n const section = hideReadTimeSection = new SettingSection({\n caption: 'HideReadTimeInfo'\n });\n\n const row = new Row({\n titleLangKey: 'HideReadTime',\n checkboxField: new CheckboxField({toggle: true, checked: !!globalPrivacy.pFlags.hide_read_marks}),\n listenerSetter: this.listenerSetter\n });\n\n this.eventListener.addEventListener('destroy', () => {\n const hide = row.checkboxField.checked && canHideReadTime();\n if(!!globalPrivacy.pFlags.hide_read_marks === hide) {\n return;\n }\n\n const promise = this.managers.appPrivacyManager.setGlobalPrivacySettings({\n _: 'globalPrivacySettings',\n pFlags: {\n ...globalPrivacy.pFlags,\n hide_read_marks: hide || undefined\n }\n });\n this.eventListener.dispatchEvent('privacy', promise);\n return promise;\n });\n\n section.content.append(row.container);\n this.scrollable.append(section.container);\n }\n\n let premiumSection: SettingSection;\n {\n const section = premiumSection = new SettingSection({\n caption: true\n });\n\n const createButton = () => {\n const btn = Button('btn-primary btn-transparent primary', {\n text: rootScope.premium ? 'PrivacyLastSeenPremiumForPremium' : 'PrivacyLastSeenPremium'\n });\n\n attachClickEvent(btn, () => {\n PopupPremium.show();\n }, {listenerSetter: this.listenerSetter});\n\n return btn;\n };\n\n const onPremium = () => {\n section.content.replaceChildren(createButton());\n section.caption.replaceChildren(i18n(rootScope.premium ? 'PrivacyLastSeenPremiumInfoForPremium' : 'PrivacyLastSeenPremiumInfo'));\n };\n\n onPremium();\n this.listenerSetter.add(rootScope)('premium_toggle', onPremium);\n\n this.scrollable.append(section.container);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey} from '../../../../lib/langPack';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyProfilePhotoTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-profile-photo');\n this.setTitle('PrivacyProfilePhoto');\n\n const caption: LangPackKey = 'PrivacySettingsController.ProfilePhoto.CustomHelp';\n new PrivacySection({\n tab: this,\n title: 'PrivacyProfilePhotoTitle',\n inputKey: 'inputPrivacyKeyProfilePhoto',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverShare', 'PrivacySettingsController.AlwaysShare'],\n appendTo: this.scrollable,\n skipTypes: [PrivacyType.Nobody],\n managers: this.managers\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey} from '../../../../lib/langPack';\n\nexport default class AppPrivacyForwardMessagesTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-forward-messages');\n this.setTitle('PrivacySettings.Forwards');\n\n const caption: LangPackKey = 'PrivacySettingsController.Forwards.CustomHelp';\n new PrivacySection({\n tab: this,\n title: 'PrivacyForwardsTitle',\n inputKey: 'inputPrivacyKeyForwards',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n managers: this.managers\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey} from '../../../../lib/langPack';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyAddToGroupsTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-add-to-groups');\n this.setTitle('PrivacySettings.Groups');\n\n const caption: LangPackKey = 'PrivacySettingsController.GroupDescription';\n new PrivacySection({\n tab: this,\n title: 'WhoCanAddMe',\n inputKey: 'inputPrivacyKeyChatInvite',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n // skipTypes: [PrivacyType.Nobody],\n managers: this.managers\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey} from '../../../../lib/langPack';\n\nexport default class AppPrivacyCallsTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-calls');\n this.setTitle('PrivacySettings.VoiceCalls');\n\n const caption: LangPackKey = 'PrivacySettingsController.PhoneCallDescription';\n new PrivacySection({\n tab: this,\n title: 'WhoCanCallMe',\n inputKey: 'inputPrivacyKeyPhoneCall',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n managers: this.managers\n });\n\n {\n const caption: LangPackKey = 'PrivacySettingsController.P2p.Desc';\n new PrivacySection({\n tab: this,\n title: 'PrivacyP2PHeader',\n inputKey: 'inputPrivacyKeyPhoneP2P',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n managers: this.managers\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Button from '../../button';\nimport Row from '../../row';\nimport {Authorization} from '../../../layer';\nimport {formatDateAccordingToTodayNew} from '../../../helpers/date';\nimport {ButtonMenuSync} from '../../buttonMenu';\nimport {toast} from '../../toast';\nimport I18n from '../../../lib/langPack';\nimport PopupPeer from '../../popups/peer';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport findAndSplice from '../../../helpers/array/findAndSplice';\nimport {attachContextMenuListener} from '../../../helpers/dom/attachContextMenuListener';\nimport positionMenu from '../../../helpers/positionMenu';\nimport contextMenuController from '../../../helpers/contextMenuController';\nimport SettingSection from '../../settingSection';\nimport PopupElement from '../../popups';\n\nexport default class AppActiveSessionsTab extends SliderSuperTabEventable {\n public authorizations: Authorization.authorization[];\n private menuElement: HTMLElement;\n\n public init() {\n this.container.classList.add('active-sessions-container');\n this.setTitle('SessionsTitle');\n\n const Session = (auth: Authorization.authorization) => {\n const row = new Row({\n title: [auth.app_name, auth.app_version].join(' '),\n subtitle: [auth.ip, auth.country].filter(Boolean).join(' - '),\n clickable: true,\n titleRight: auth.pFlags.current ? undefined : formatDateAccordingToTodayNew(new Date(Math.max(auth.date_active, auth.date_created) * 1000))\n });\n\n row.container.dataset.hash = '' + auth.hash;\n\n row.midtitle.textContent = [auth.device_model, auth.system_version || auth.platform].filter(Boolean).join(', ');\n\n return row;\n };\n\n const authorizations = this.authorizations.slice();\n\n {\n const section = new SettingSection({\n name: 'CurrentSession',\n caption: 'ClearOtherSessionsHelp'\n });\n\n const auth = findAndSplice(authorizations, auth => auth.pFlags.current);\n const session = Session(auth);\n\n section.content.append(session.container);\n\n if(authorizations.length) {\n const btnTerminate = Button('btn-primary btn-transparent danger', {icon: 'stop', text: 'TerminateAllSessions'});\n attachClickEvent(btnTerminate, (e) => {\n PopupElement.createPopup(PopupPeer, 'revoke-session', {\n buttons: [{\n langKey: 'Terminate',\n isDanger: true,\n callback: () => {\n const toggle = toggleDisability([btnTerminate], true);\n this.managers.apiManager.invokeApi('auth.resetAuthorizations').then((value) => {\n // toggleDisability([btnTerminate], false);\n btnTerminate.remove();\n otherSection.container.remove();\n }, onError).finally(() => {\n toggle();\n });\n }\n }],\n titleLangKey: 'AreYouSureSessionsTitle',\n descriptionLangKey: 'AreYouSureSessions'\n }).show();\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnTerminate);\n }\n\n this.scrollable.append(section.container);\n }\n\n if(!authorizations.length) {\n return;\n }\n\n const otherSection = new SettingSection({\n name: 'OtherSessions',\n caption: 'SessionsListInfo'\n });\n\n authorizations.forEach((auth) => {\n otherSection.content.append(Session(auth).container);\n });\n\n this.scrollable.append(otherSection.container);\n\n const onError = (err: ApiError) => {\n if(err.type === 'FRESH_RESET_AUTHORISATION_FORBIDDEN') {\n toast(I18n.format('RecentSessions.Error.FreshReset', true));\n }\n };\n\n let target: HTMLElement;\n const onTerminateClick = () => {\n const hash = target.dataset.hash;\n\n PopupElement.createPopup(PopupPeer, 'revoke-session', {\n buttons: [{\n langKey: 'Terminate',\n isDanger: true,\n callback: () => {\n this.managers.apiManager.invokeApi('account.resetAuthorization', {hash})\n .then((value) => {\n if(value) {\n target.remove();\n }\n }, onError);\n }\n }],\n titleLangKey: 'AreYouSureSessionTitle',\n descriptionLangKey: 'TerminateSessionText'\n }).show();\n };\n\n const element = this.menuElement = ButtonMenuSync({\n buttons: [{\n icon: 'stop',\n text: 'Terminate',\n onClick: onTerminateClick\n }]\n });\n element.id = 'active-sessions-contextmenu';\n element.classList.add('contextmenu');\n\n document.getElementById('page-chats').append(element);\n\n attachContextMenuListener({\n element: this.scrollable.container,\n callback: (e) => {\n target = findUpClassName(e.target, 'row');\n if(!target || target.dataset.hash === '0') {\n return;\n }\n\n if(e instanceof MouseEvent) e.preventDefault();\n // smth\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n positionMenu(e, element);\n contextMenuController.openBtnMenu(element);\n },\n listenerSetter: this.listenerSetter\n });\n\n attachClickEvent(this.scrollable.container, (e) => {\n target = findUpClassName(e.target, 'row');\n if(!target || target.dataset.hash === '0') {\n return;\n }\n\n onTerminateClick();\n }, {listenerSetter: this.listenerSetter});\n }\n\n onCloseAfterTimeout() {\n this.menuElement?.remove();\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport {ButtonMenuSync} from '../../buttonMenu';\nimport appDialogsManager, {DIALOG_LIST_ELEMENT_TAG} from '../../../lib/appManagers/appDialogsManager';\nimport PopupPickUser from '../../popups/pickUser';\nimport rootScope from '../../../lib/rootScope';\nimport findUpTag from '../../../helpers/dom/findUpTag';\nimport ButtonCorner from '../../buttonCorner';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport formatUserPhone from '../../wrappers/formatUserPhone';\nimport getUserStatusString from '../../wrappers/getUserStatusString';\nimport {attachContextMenuListener} from '../../../helpers/dom/attachContextMenuListener';\nimport positionMenu from '../../../helpers/positionMenu';\nimport contextMenuController from '../../../helpers/contextMenuController';\nimport getPeerActiveUsernames from '../../../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport SettingSection from '../../settingSection';\nimport PopupElement from '../../popups';\n\nexport default class AppBlockedUsersTab extends SliderSuperTab {\n public peerIds: PeerId[];\n private menuElement: HTMLElement;\n\n public init() {\n this.container.classList.add('blocked-users-container');\n this.setTitle('BlockedUsers');\n\n const section = new SettingSection({\n caption: 'BlockedUsersInfo'\n });\n\n section.caption.parentElement.prepend(section.caption);\n\n this.scrollable.append(section.container);\n\n const btnAdd = ButtonCorner({icon: 'add', className: 'is-visible'});\n this.content.append(btnAdd);\n\n attachClickEvent(btnAdd, (e) => {\n PopupElement.createPopup(PopupPickUser, {\n peerType: ['contacts'],\n placeholder: 'BlockModal.Search.Placeholder',\n onSelect: (peerId) => {\n // console.log('block', peerId);\n this.managers.appUsersManager.toggleBlock(peerId, true);\n }\n });\n }, {listenerSetter: this.listenerSetter});\n\n const list = appDialogsManager.createChatList();\n this.scrollable.container.classList.add('chatlist-container');\n section.content.append(list);\n\n const add = async(peerId: PeerId, append: boolean) => {\n const dialogElement = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n append,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n (dialogElement.container as any).dialogElement = dialogElement;\n const {dom} = dialogElement;\n\n const user = await this.managers.appUsersManager.getUser(peerId.toUserId());\n if(!user) {\n return;\n }\n\n const usernames = getPeerActiveUsernames(user);\n const username = usernames[0];\n if(user.pFlags.bot) {\n dom.lastMessageSpan.append('@' + username);\n } else {\n if(user.phone) dom.lastMessageSpan.textContent = formatUserPhone(user.phone);\n else dom.lastMessageSpan.append(username ? '@' + username : getUserStatusString(user));\n }\n };\n\n for(const peerId of this.peerIds) {\n add(peerId, true);\n }\n\n let target: HTMLElement;\n const onUnblock = () => {\n const peerId = target.dataset.peerId.toPeerId();\n this.managers.appUsersManager.toggleBlock(peerId, false);\n };\n\n const element = this.menuElement = ButtonMenuSync({\n buttons: [{\n icon: 'lockoff',\n text: 'Unblock',\n onClick: onUnblock,\n options: {listenerSetter: this.listenerSetter}\n }]\n });\n element.id = 'blocked-users-contextmenu';\n element.classList.add('contextmenu');\n\n document.getElementById('page-chats').append(element);\n\n attachContextMenuListener({\n element: this.scrollable.container,\n callback: (e) => {\n target = findUpTag(e.target, DIALOG_LIST_ELEMENT_TAG);\n if(!target) {\n return;\n }\n\n if(e instanceof MouseEvent) e.preventDefault();\n // smth\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n positionMenu(e, element);\n contextMenuController.openBtnMenu(element);\n },\n listenerSetter: this.listenerSetter\n });\n\n this.listenerSetter.add(rootScope)('peer_block', (update) => {\n const {peerId, blocked, blockedMyStoriesFrom} = update;\n if(blockedMyStoriesFrom) {\n return;\n }\n\n const li = list.querySelector(`[data-peer-id=\"${peerId}\"]`);\n if(blocked) {\n if(!li) {\n add(peerId, false);\n }\n } else if(li) {\n (li as any).dialogElement.remove();\n }\n });\n\n const LOAD_COUNT = 50;\n let loading = false;\n this.scrollable.onScrolledBottom = () => {\n if(loading) {\n return;\n }\n\n loading = true;\n this.managers.appUsersManager.getBlocked(list.childElementCount, LOAD_COUNT).then((res) => {\n for(const peerId of res.peerIds) {\n add(peerId, true);\n }\n\n if(res.peerIds.length < LOAD_COUNT || list.childElementCount === res.count) {\n this.scrollable.onScrolledBottom = null;\n }\n\n this.scrollable.checkForTriggers();\n }).finally(() => {\n loading = false;\n });\n };\n }\n\n onOpenAfterTimeout() {\n this.scrollable.onScroll();\n }\n\n onCloseAfterTimeout() {\n if(this.menuElement) {\n this.menuElement.remove();\n }\n\n return super.onCloseAfterTimeout();\n }\n}\n","export default function convertKeyToInputKey(key: string) {\n key = key[0].toUpperCase() + key.slice(1);\n key = 'input' + key;\n return key;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey, i18n} from '../../../../lib/langPack';\nimport anchorCallback from '../../../../helpers/dom/anchorCallback';\nimport PopupPremium from '../../../popups/premium';\n\nexport default class AppPrivacyVoicesTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-voices');\n this.setTitle('PrivacyVoiceMessages');\n\n const caption: LangPackKey = 'PrivacyVoiceMessagesInfo';\n new PrivacySection({\n tab: this,\n title: 'PrivacyVoiceMessagesTitle',\n inputKey: 'inputPrivacyKeyVoiceMessages',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n managers: this.managers,\n premiumOnly: true,\n premiumCaption: i18n('Privacy.VoiceMessagesPremiumCaption', [anchorCallback(() => {\n PopupPremium.show();\n })]),\n premiumError: 'PrivacySettings.Voice.PremiumError'\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {formatDateAccordingToTodayNew} from '../../../helpers/date';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport {WebAuthorization} from '../../../layer';\nimport {avatarNew} from '../../avatarNew';\nimport Button from '../../button';\nimport confirmationPopup from '../../confirmationPopup';\nimport Row from '../../row';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport wrapPeerTitle from '../../wrappers/peerTitle';\n\nexport default class AppActiveWebSessionsTab extends SliderSuperTabEventable {\n public async init(sessions: WebAuthorization[]) {\n this.container.classList.add('active-sessions-container');\n this.setTitle('WebSessionsTitle');\n\n const Session = async(auth: WebAuthorization) => {\n const peerId = auth.bot_id.toPeerId();\n const row = new Row({\n title: await wrapPeerTitle({peerId}),\n subtitle: [auth.ip, auth.region].join(' - '),\n clickable: true,\n titleRight: formatDateAccordingToTodayNew(new Date(Math.max(auth.date_active, auth.date_created) * 1000))\n });\n\n const media = row.createMedia('big');\n const avatar = avatarNew({\n middleware: this.middlewareHelper.get(),\n size: 48,\n peerId\n });\n await avatar.readyThumbPromise;\n media.append(avatar.node);\n\n row.container.dataset.hash = '' + auth.hash;\n row.container.dataset.peerId = '' + peerId;\n\n row.midtitle.textContent = [auth.domain, auth.browser, auth.platform].filter(Boolean).join(', ');\n\n return row;\n };\n\n {\n const section = new SettingSection({\n caption: 'ClearOtherWebSessionsHelp'\n });\n\n const btnTerminate = Button('btn-primary btn-transparent danger', {icon: 'stop', text: 'TerminateAllWebSessions'});\n\n attachClickEvent(btnTerminate, async() => {\n await confirmationPopup({\n descriptionLangKey: 'AreYouSureWebSessions',\n button: {\n langKey: 'Disconnect',\n isDanger: true\n }\n });\n\n const toggle = toggleDisability([btnTerminate], true);\n this.managers.appSeamlessLoginManager.resetWebAuthorizations().then(() => {\n this.close();\n });\n }, {listenerSetter: this.listenerSetter});\n\n section.content.append(btnTerminate);\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({\n name: 'OtherWebSessions',\n caption: 'TerminateWebSessionInfo'\n });\n\n const rows = await Promise.all(sessions.map(Session));\n section.content.append(...rows.map((row) => row.container));\n\n let leftLength = rows.length;\n attachClickEvent(section.content, async(e) => {\n const row = findUpClassName(e.target, 'row');\n if(!row) {\n return;\n }\n\n await confirmationPopup({\n descriptionLangKey: 'TerminateWebSessionText',\n descriptionLangArgs: [await wrapPeerTitle({peerId: row.dataset.peerId.toPeerId()})],\n button: {\n langKey: 'Disconnect',\n isDanger: true\n }\n });\n\n const hash = row.dataset.hash;\n row.classList.add('is-disabled');\n this.managers.appSeamlessLoginManager.resetWebAuthorization(hash).then(() => {\n if(!--leftLength) {\n this.close();\n } else {\n row.remove();\n }\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.scrollable.append(section.container);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey} from '../../../../lib/langPack';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyAboutTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('privacy-tab', 'privacy-about');\n this.setTitle('UserBio');\n\n const caption: LangPackKey = 'Privacy.BioCaption';\n new PrivacySection({\n tab: this,\n title: 'Privacy.Bio',\n inputKey: 'inputPrivacyKeyAbout',\n captions: [caption, caption, caption],\n exceptionTexts: ['PrivacySettingsController.NeverAllow', 'PrivacySettingsController.AlwaysAllow'],\n appendTo: this.scrollable,\n skipTypes: [PrivacyType.Nobody],\n managers: this.managers\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport PrivacySection from '../../../privacySection';\nimport {LangPackKey, i18n} from '../../../../lib/langPack';\nimport anchorCallback from '../../../../helpers/dom/anchorCallback';\nimport PopupPremium from '../../../popups/premium';\nimport {GlobalPrivacySettings} from '../../../../layer';\nimport PrivacyType from '../../../../lib/appManagers/utils/privacy/privacyType';\n\nexport default class AppPrivacyMessagesTab extends SliderSuperTabEventable<{\n privacy: (globalPrivacy: Promise) => void\n}> {\n public async init(globalPrivacy: GlobalPrivacySettings) {\n this.container.classList.add('privacy-tab', 'privacy-messages');\n this.setTitle('PrivacyMessages');\n\n const caption = i18n('Privacy.MessagesInfo', [anchorCallback(() => {\n PopupPremium.show();\n })]);\n\n const appConfig = await this.managers.apiManager.getAppConfig();\n const premiumOnly = !appConfig.new_noncontact_peers_require_premium_without_ownpremium;\n\n const privacySection = new PrivacySection({\n tab: this,\n title: 'PrivacyMessagesTitle',\n captions: [caption, caption, caption],\n noExceptions: true,\n appendTo: this.scrollable,\n managers: this.managers,\n skipTypes: [PrivacyType.Nobody],\n myContactsAndPremium: true,\n premiumOnly,\n premiumCaption: caption,\n premiumError: 'PrivacySettings.Messages.PremiumError',\n privacyType: globalPrivacy.pFlags.new_noncontact_peers_require_premium ? PrivacyType.Contacts : PrivacyType.Everybody\n });\n\n this.eventListener.addEventListener('destroy', () => {\n const hide = privacySection.type === PrivacyType.Contacts;\n if(!!globalPrivacy.pFlags.new_noncontact_peers_require_premium === hide) {\n return;\n }\n\n const promise = this.managers.appPrivacyManager.setGlobalPrivacySettings({\n _: 'globalPrivacySettings',\n pFlags: {\n ...globalPrivacy.pFlags,\n new_noncontact_peers_require_premium: hide || undefined\n }\n });\n this.eventListener.dispatchEvent('privacy', promise);\n return promise;\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport SliderSuperTab, {SliderSuperTabEventable} from '../../sliderTab';\nimport Row from '../../row';\nimport {AccountPassword, Authorization, GlobalPrivacySettings, InputPrivacyKey, Updates, WebAuthorization} from '../../../layer';\nimport AppPrivacyPhoneNumberTab from './privacy/phoneNumber';\nimport AppTwoStepVerificationTab from './2fa';\nimport AppTwoStepVerificationEnterPasswordTab from './2fa/enterPassword';\nimport AppTwoStepVerificationEmailConfirmationTab from './2fa/emailConfirmation';\nimport AppPrivacyLastSeenTab from './privacy/lastSeen';\nimport AppPrivacyProfilePhotoTab from './privacy/profilePhoto';\nimport AppPrivacyForwardMessagesTab from './privacy/forwardMessages';\nimport AppPrivacyAddToGroupsTab from './privacy/addToGroups';\nimport AppPrivacyCallsTab from './privacy/calls';\nimport AppActiveSessionsTab from './activeSessions';\nimport AppBlockedUsersTab from './blockedUsers';\nimport rootScope from '../../../lib/rootScope';\nimport {i18n, LangPackKey, _i18n} from '../../../lib/langPack';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport CheckboxField from '../../checkboxField';\nimport PopupPeer from '../../popups/peer';\nimport Button from '../../button';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport convertKeyToInputKey from '../../../helpers/string/convertKeyToInputKey';\nimport getPrivacyRulesDetails from '../../../lib/appManagers/utils/privacy/getPrivacyRulesDetails';\nimport PrivacyType from '../../../lib/appManagers/utils/privacy/privacyType';\nimport confirmationPopup, {PopupConfirmationOptions} from '../../confirmationPopup';\nimport noop from '../../../helpers/noop';\nimport {hideToast, toastNew} from '../../toast';\nimport AppPrivacyVoicesTab from './privacy/voices';\nimport SettingSection from '../../settingSection';\nimport AppActiveWebSessionsTab from './activeWebSessions';\nimport PopupElement from '../../popups';\nimport AppPrivacyAboutTab from './privacy/about';\nimport PopupPremium from '../../popups/premium';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport Icon from '../../icon';\nimport AppPrivacyMessagesTab from './privacy/messages';\n\nexport default class AppPrivacyAndSecurityTab extends SliderSuperTabEventable {\n private activeSessionsRow: Row;\n private authorizations: Authorization.authorization[];\n\n private websitesRow: Row;\n private websites: WebAuthorization[];\n\n public static getInitArgs(fromTab: SliderSuperTab) {\n return {\n appConfig: fromTab.managers.apiManager.getAppConfig(),\n globalPrivacy: fromTab.managers.appPrivacyManager.getGlobalPrivacySettings(),\n contentSettings: fromTab.managers.apiManager.invokeApi('account.getContentSettings'),\n webAuthorizations: fromTab.managers.appSeamlessLoginManager.getWebAuthorizations()\n };\n }\n\n public async init(p: ReturnType) {\n this.container.classList.add('dont-u-dare-block-me');\n this.setTitle('PrivacySettings');\n\n const SUBTITLE: LangPackKey = 'Loading';\n const promises: Promise[] = [];\n\n {\n const section = new SettingSection({noDelimiter: true, caption: 'SessionsInfo'});\n\n let blockedPeerIds: PeerId[];\n const blockedUsersRow = new Row({\n icon: 'deleteuser',\n titleLangKey: 'BlockedUsers',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n const tab = this.slider.createTab(AppBlockedUsersTab);\n tab.peerIds = blockedPeerIds;\n tab.open();\n },\n listenerSetter: this.listenerSetter\n });\n blockedUsersRow.freezed = true;\n\n let passwordState: AccountPassword;\n const twoFactorRowOptions: ConstructorParameters[0] = {\n icon: 'lock',\n titleLangKey: 'TwoStepVerification' as LangPackKey,\n subtitleLangKey: SUBTITLE,\n clickable: (e: Event) => {\n let tab: AppTwoStepVerificationTab | AppTwoStepVerificationEnterPasswordTab | AppTwoStepVerificationEmailConfirmationTab;\n if(passwordState.pFlags.has_password) {\n tab = this.slider.createTab(AppTwoStepVerificationEnterPasswordTab);\n } else if(passwordState.email_unconfirmed_pattern) {\n tab = this.slider.createTab(AppTwoStepVerificationEmailConfirmationTab);\n tab.email = passwordState.email_unconfirmed_pattern;\n tab.length = 6;\n tab.isFirst = true;\n this.managers.passwordManager.resendPasswordEmail();\n } else {\n tab = this.slider.createTab(AppTwoStepVerificationTab);\n }\n\n tab.state = passwordState;\n tab.open();\n },\n listenerSetter: this.listenerSetter\n };\n\n const twoFactorRow = new Row(twoFactorRowOptions);\n twoFactorRow.freezed = true;\n\n const activeSessionsRow = this.activeSessionsRow = new Row({\n icon: 'activesessions',\n titleLangKey: 'SessionsTitle',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n const tab = this.slider.createTab(AppActiveSessionsTab);\n tab.authorizations = this.authorizations;\n tab.eventListener.addEventListener('destroy', () => {\n this.updateActiveSessions();\n }, {once: true});\n tab.open();\n },\n listenerSetter: this.listenerSetter\n });\n activeSessionsRow.freezed = true;\n\n const websitesRow = this.websitesRow = new Row({\n icon: 'mention',\n titleLangKey: 'OtherWebSessions',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n const tab = this.slider.createTab(AppActiveWebSessionsTab);\n tab.eventListener.addEventListener('destroy', () => {\n this.updateActiveWebsites();\n });\n tab.open(this.websites);\n },\n listenerSetter: this.listenerSetter\n });\n websitesRow.freezed = true;\n\n section.content.append(blockedUsersRow.container, twoFactorRow.container, activeSessionsRow.container, websitesRow.container);\n this.scrollable.append(section.container);\n\n const setBlockedCount = (count: number) => {\n if(count) {\n replaceContent(blockedUsersRow.subtitle, i18n('PrivacySettingsController.UserCount', [count]));\n } else {\n replaceContent(blockedUsersRow.subtitle, i18n('BlockedEmpty', [count]));\n }\n };\n\n this.listenerSetter.add(rootScope)('peer_block', () => {\n /* const {blocked, peerId} = update;\n if(!blocked) blockedPeerIds.findAndSplice((p) => p === peerId);\n else blockedPeerIds.unshift(peerId);\n blockedCount += blocked ? 1 : -1;\n setBlockedCount(blockedCount); */\n updateBlocked();\n });\n\n const updateBlocked = () => {\n this.managers.appUsersManager.getBlocked().then((res) => {\n blockedUsersRow.freezed = false;\n setBlockedCount(res.count);\n blockedPeerIds = res.peerIds;\n });\n };\n\n updateBlocked();\n\n this.managers.passwordManager.getState().then((state) => {\n passwordState = state;\n replaceContent(twoFactorRow.subtitle, i18n(state.pFlags.has_password ? 'PrivacyAndSecurity.Item.On' : 'PrivacyAndSecurity.Item.Off'));\n twoFactorRow.freezed = false;\n\n // console.log('password state', state);\n });\n\n this.updateActiveSessions();\n promises.push(this.updateActiveWebsites(p.webAuthorizations));\n }\n\n {\n const isPremiumFeaturesHidden = await apiManagerProxy.isPremiumFeaturesHidden();\n const section = new SettingSection({name: 'PrivacyTitle', caption: isPremiumFeaturesHidden ? 'GroupsAndChannelsHelp' : 'Privacy.MessagesCaption'});\n\n section.content.classList.add('privacy-navigation-container');\n\n type RowKey = InputPrivacyKey['_'] | (keyof GlobalPrivacySettings['pFlags']);\n\n const rowsByKeys: Partial<{\n [key in RowKey]: Row\n }> = {};\n\n const openTabWithGlobalPrivacy = async(\n constructor: typeof AppPrivacyLastSeenTab | typeof AppPrivacyMessagesTab,\n key: RowKey\n ) => {\n const globalPrivacy = await p.globalPrivacy;\n const tab = this.slider.createTab(constructor);\n tab.open(globalPrivacy);\n tab.eventListener.addEventListener('privacy', (privacy) => {\n p.globalPrivacy = privacy;\n updatePrivacyRow(key);\n });\n };\n\n const numberVisibilityRow = rowsByKeys['inputPrivacyKeyPhoneNumber'] = new Row({\n titleLangKey: 'PrivacyPhoneTitle',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyPhoneNumberTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const lastSeenTimeRow = rowsByKeys['inputPrivacyKeyStatusTimestamp'] = new Row({\n titleLangKey: 'LastSeenTitle',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n openTabWithGlobalPrivacy(AppPrivacyLastSeenTab, 'inputPrivacyKeyStatusTimestamp');\n },\n listenerSetter: this.listenerSetter\n });\n\n const photoVisibilityRow = rowsByKeys['inputPrivacyKeyProfilePhoto'] = new Row({\n titleLangKey: 'PrivacyProfilePhotoTitle',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyProfilePhotoTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const aboutRow = rowsByKeys['inputPrivacyKeyAbout'] = new Row({\n titleLangKey: 'Privacy.BioRow',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyAboutTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const callRow = rowsByKeys['inputPrivacyKeyPhoneCall'] = new Row({\n titleLangKey: 'WhoCanCallMe',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyCallsTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const linkAccountRow = rowsByKeys['inputPrivacyKeyForwards'] = new Row({\n titleLangKey: 'PrivacyForwardsTitle',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyForwardMessagesTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const groupChatsAddRow = rowsByKeys['inputPrivacyKeyChatInvite'] = new Row({\n titleLangKey: 'WhoCanAddMe',\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyAddToGroupsTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const createPremiumTitle = (langKey: LangPackKey) => {\n const fragment = document.createDocumentFragment();\n const icon = Icon('star', 'privacy-premium-icon');\n fragment.append(i18n(langKey), icon);\n const onPremium = () => {\n icon.classList.toggle('hide', !rootScope.premium);\n };\n onPremium();\n this.listenerSetter.add(rootScope)('premium_toggle', onPremium);\n return fragment;\n };\n\n let voicesRow: Row;\n if(!isPremiumFeaturesHidden) voicesRow = rowsByKeys['inputPrivacyKeyVoiceMessages'] = new Row({\n title: createPremiumTitle('PrivacyVoiceMessagesTitle'),\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n this.slider.createTab(AppPrivacyVoicesTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n let messagesRow: Row;\n if(!isPremiumFeaturesHidden) messagesRow = rowsByKeys['new_noncontact_peers_require_premium'] = new Row({\n title: createPremiumTitle('PrivacyMessagesTitle'),\n subtitleLangKey: SUBTITLE,\n clickable: () => {\n openTabWithGlobalPrivacy(AppPrivacyMessagesTab, 'new_noncontact_peers_require_premium');\n },\n listenerSetter: this.listenerSetter\n });\n\n const updatePrivacyRow = (key: RowKey) => {\n const row = rowsByKeys[key];\n if(!row) {\n return;\n }\n\n const map: {[key in PrivacyType]: LangPackKey} = {\n [PrivacyType.Everybody]: 'PrivacySettingsController.Everbody',\n [PrivacyType.Contacts]: 'PrivacySettingsController.MyContacts',\n [PrivacyType.Nobody]: 'PrivacySettingsController.Nobody'\n };\n\n if(!key.startsWith('inputPrivacy')) {\n p.globalPrivacy.then((globalPrivacy) => {\n const langKey = globalPrivacy.pFlags.new_noncontact_peers_require_premium ? 'Privacy.ContactsAndPremium' : map[PrivacyType.Everybody];\n row.subtitle.replaceChildren(i18n(langKey));\n });\n return;\n }\n\n this.managers.appPrivacyManager.getPrivacy(key as InputPrivacyKey['_']).then((rules) => {\n const details = getPrivacyRulesDetails(rules);\n const langKey = map[details.type];\n const disallowLength = details.disallowPeers.users.length + details.disallowPeers.chats.length;\n const allowLength = details.allowPeers.users.length + details.allowPeers.chats.length;\n\n const s = i18n(langKey);\n row.subtitle.replaceChildren(s);\n if(disallowLength || allowLength) {\n row.subtitle.append(` (${[-disallowLength, allowLength ? '+' + allowLength : 0].filter(Boolean).join(', ')})`);\n }\n });\n };\n\n section.content.append(...[\n numberVisibilityRow,\n lastSeenTimeRow,\n photoVisibilityRow,\n aboutRow,\n callRow,\n linkAccountRow,\n groupChatsAddRow,\n voicesRow,\n messagesRow\n ].filter(Boolean).map((row) => row.container));\n this.scrollable.append(section.container);\n\n for(const key in rowsByKeys) {\n updatePrivacyRow(key as keyof typeof rowsByKeys);\n }\n\n rootScope.addEventListener('privacy_update', (update) => {\n updatePrivacyRow(convertKeyToInputKey(update.key._) as any);\n });\n }\n\n {\n const section = new SettingSection({name: 'NewChatsFromNonContacts', caption: 'ArchiveAndMuteInfo'});\n\n const checkboxField = new CheckboxField({text: 'ArchiveAndMute'});\n const row = new Row({\n checkboxField\n });\n\n section.content.append(row.container);\n\n let enabled: boolean, destroyed: boolean;\n this.eventListener.addEventListener('destroy', async() => {\n destroyed = true;\n if(enabled === undefined || enabled === checkboxField.checked) return;\n return this.managers.appPrivacyManager.setGlobalPrivacySettings({\n _: 'globalPrivacySettings',\n pFlags: {\n ...(await p.globalPrivacy).pFlags,\n archive_and_mute_new_noncontact_peers: checkboxField.checked || undefined\n }\n });\n }, {once: true});\n\n const promise = Promise.all([\n p.appConfig,\n p.globalPrivacy\n ]).then(([appConfig, settings]) => {\n if(destroyed) {\n return;\n }\n\n const onPremiumToggle = (isPremium: boolean) => {\n section.container.classList.toggle('hide', !isPremium && !appConfig.autoarchive_setting_available);\n };\n\n this.listenerSetter.add(rootScope)('premium_toggle', onPremiumToggle);\n onPremiumToggle(rootScope.premium);\n\n enabled = !!settings.pFlags.archive_and_mute_new_noncontact_peers;\n\n checkboxField.setValueSilently(enabled);\n });\n\n promises.push(promise);\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'Privacy.SensitiveContent', caption: 'PrivacyAndSecurity.SensitiveDesc'});\n section.container.classList.add('hide');\n\n const checkboxField = new CheckboxField({text: 'PrivacyAndSecurity.SensitiveText'});\n const row = new Row({\n checkboxField\n });\n\n section.content.append(row.container);\n\n let enabled: boolean;\n this.eventListener.addEventListener('destroy', () => {\n if(enabled === undefined) return;\n const _enabled = row.checkboxField.checked;\n const isChanged = _enabled !== enabled;\n if(!isChanged) {\n return;\n }\n\n return this.managers.apiManager.invokeApi('account.setContentSettings', {\n sensitive_enabled: _enabled\n });\n }, {once: true});\n\n const promise = p.contentSettings.then((settings) => {\n if(!settings.pFlags.sensitive_can_change) {\n return;\n }\n\n enabled = !!settings.pFlags.sensitive_enabled;\n checkboxField.setValueSilently(enabled);\n section.container.classList.remove('hide');\n });\n\n promises.push(promise);\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'PrivacyPayments', caption: 'PrivacyPaymentsClearInfo'});\n\n const onClearClick = () => {\n const options: PopupConfirmationOptions = {\n titleLangKey: 'PrivacyPaymentsClearAlertTitle',\n descriptionLangKey: 'PrivacyPaymentsClearAlertText',\n button: {\n langKey: 'Clear'\n },\n checkboxes: [{\n text: 'PrivacyClearShipping',\n checked: true\n }, {\n text: 'PrivacyClearPayment',\n checked: true\n }]\n };\n\n confirmationPopup(options).then(() => {\n const [info, payment] = options.checkboxes.map((c) => c.checkboxField.checked);\n const toggle = toggleDisability([clearButton], true);\n this.managers.appPaymentsManager.clearSavedInfo(info, payment).then(() => {\n if(!info && !payment) {\n return;\n }\n\n toggle();\n toastNew({\n langPackKey: info && payment ? 'PrivacyPaymentsPaymentShippingCleared' : (info ? 'PrivacyPaymentsShippingInfoCleared' : 'PrivacyPaymentsPaymentInfoCleared')\n });\n });\n }, noop);\n };\n\n const clearButton = Button('btn-primary btn-transparent', {icon: 'delete', text: 'PrivacyPaymentsClear'});\n this.listenerSetter.add(clearButton)('click', onClearClick);\n section.content.append(clearButton);\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'FilterChats'});\n\n const onDeleteClick = () => {\n const popup = PopupElement.createPopup(PopupPeer, 'popup-delete-drafts', {\n buttons: [{\n langKey: 'Delete',\n callback: () => {\n const toggle = toggleDisability([deleteButton], true);\n this.managers.appDraftsManager.clearAllDrafts().then(() => {\n toggle();\n });\n },\n isDanger: true\n }],\n titleLangKey: 'AreYouSureClearDraftsTitle',\n descriptionLangKey: 'AreYouSureClearDrafts'\n });\n\n popup.show();\n };\n\n const deleteButton = Button('btn-primary btn-transparent', {icon: 'delete', text: 'PrivacyDeleteCloudDrafts'});\n this.listenerSetter.add(deleteButton)('click', onDeleteClick);\n section.content.append(deleteButton);\n\n /* promises.push(apiManager.invokeApi('messages.getAllDrafts').then((drafts) => {\n const draftsRow = new Row({\n titleLangKey: 'PrivacyDeleteCloudDrafts',\n subtitleLangKey: 'Drafts',\n subtitleLangArgs: [(drafts as Updates.updates).updates.length],\n icon: 'delete',\n clickable: onDeleteClick\n });\n\n section.content.append(draftsRow.container);\n })); */\n\n this.scrollable.append(section.container);\n }\n\n // {\n // const section = new SettingSection({\n // name: 'OtherWebSessions'\n // });\n\n // const row = new Row({\n\n // });\n\n // this.scrollable.append(section.container);\n // }\n\n return Promise.all(promises);\n }\n\n public updateActiveSessions() {\n return this.managers.apiManager.invokeApi('account.getAuthorizations').then((auths) => {\n this.activeSessionsRow.freezed = false;\n this.authorizations = auths.authorizations;\n _i18n(this.activeSessionsRow.subtitle, 'Privacy.Devices', [this.authorizations.length]);\n });\n }\n\n public updateActiveWebsites(promise = this.managers.appSeamlessLoginManager.getWebAuthorizations()) {\n return promise.then((authorizations) => {\n this.websitesRow.freezed = false;\n this.websites = authorizations;\n _i18n(this.websitesRow.subtitle, 'Privacy.Websites', [this.websites.length]);\n this.websitesRow.container.classList.toggle('hide', !this.websites.length);\n });\n }\n}\n","import {ColorHsla, ColorRgba, hexaToHsla, hslaToRgba, rgbaToHexa as rgbaToHexa, rgbaToHsla} from '../helpers/color';\nimport attachGrabListeners from '../helpers/dom/attachGrabListeners';\nimport clamp from '../helpers/number/clamp';\nimport InputField, {InputState} from './inputField';\n\nexport type ColorPickerColor = {\n hsl: string;\n rgb: string;\n hex: string;\n hsla: string;\n rgba: string;\n hexa: string;\n rgbaArray: ColorRgba;\n};\n\nexport default class ColorPicker {\n private static BASE_CLASS = 'color-picker';\n public container: HTMLElement;\n\n private boxRect: DOMRect;\n // private boxDraggerRect: DOMRect;\n private hueRect: DOMRect;\n // private hueDraggerRect: DOMRect;\n\n private hue = 0;\n private saturation = 100;\n private lightness = 50;\n private alpha = 1;\n private elements: {\n box: SVGSVGElement,\n boxDragger: SVGSVGElement,\n sliders: HTMLElement,\n hue: SVGSVGElement,\n hueDragger: SVGSVGElement,\n saturation: SVGLinearGradientElement,\n } = {} as any;\n private hexInputField: InputField;\n private rgbInputField: InputField;\n public onChange: (color: ReturnType) => void;\n\n constructor() {\n this.container = document.createElement('div');\n this.container.classList.add(ColorPicker.BASE_CLASS);\n\n const html = `\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n `;\n\n this.container.innerHTML = html;\n\n this.elements.box = this.container.firstElementChild as any;\n this.elements.boxDragger = this.elements.box.lastElementChild as any;\n this.elements.saturation = this.elements.box.firstElementChild.firstElementChild as any;\n\n this.elements.sliders = this.elements.box.nextElementSibling as any;\n\n this.elements.hue = this.elements.sliders.firstElementChild as any;\n this.elements.hueDragger = this.elements.hue.lastElementChild as any;\n\n this.hexInputField = new InputField({plainText: true, label: 'Appearance.Color.Hex'});\n this.rgbInputField = new InputField({plainText: true, label: 'Appearance.Color.RGB'});\n\n const inputs = document.createElement('div');\n inputs.className = ColorPicker.BASE_CLASS + '-inputs';\n inputs.append(this.hexInputField.container, this.rgbInputField.container);\n this.container.append(inputs);\n\n this.hexInputField.input.addEventListener('input', () => {\n let value = this.hexInputField.value.replace(/#/g, '').slice(0, 6);\n\n const match = value.match(/([a-fA-F\\d]+)/);\n const valid = match && match[0].length === value.length && [/* 3, 4, */6].includes(value.length);\n this.hexInputField.setState(valid ? InputState.Neutral : InputState.Error);\n\n value = '#' + value;\n this.hexInputField.setValueSilently(value);\n\n if(valid) {\n this.setColor(value, false, true);\n }\n });\n\n // patched https://stackoverflow.com/a/34029238/6758968\n const rgbRegExp = /^(?:rgb)?\\(?([01]?\\d\\d?|2[0-4]\\d|25[0-5])(?:\\W+)([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\W+(?:([01]?\\d\\d?|2[0-4]\\d|25[0-5])\\)?)$/;\n this.rgbInputField.input.addEventListener('input', () => {\n const match = this.rgbInputField.value.match(rgbRegExp);\n this.rgbInputField.setState(match ? InputState.Neutral : InputState.Error);\n\n if(match) {\n this.setColor(rgbaToHsla(+match[1], +match[2], +match[3]), true, false);\n }\n });\n\n this.attachBoxListeners();\n this.attachHueListeners();\n }\n\n private onGrabStart = () => {\n document.documentElement.style.cursor = this.elements.boxDragger.style.cursor = 'grabbing';\n };\n\n private onGrabEnd = () => {\n document.documentElement.style.cursor = this.elements.boxDragger.style.cursor = '';\n };\n\n private attachBoxListeners() {\n attachGrabListeners(this.elements.box as any, () => {\n this.onGrabStart();\n this.boxRect = this.elements.box.getBoundingClientRect();\n // this.boxDraggerRect = this.elements.boxDragger.getBoundingClientRect();\n }, (pos) => {\n this.saturationHandler(pos.x, pos.y);\n }, () => {\n this.onGrabEnd();\n });\n }\n\n private attachHueListeners() {\n attachGrabListeners(this.elements.hue as any, () => {\n this.onGrabStart();\n this.hueRect = this.elements.hue.getBoundingClientRect();\n // this.hueDraggerRect = this.elements.hueDragger.getBoundingClientRect();\n }, (pos) => {\n this.hueHandler(pos.x);\n }, () => {\n this.onGrabEnd();\n });\n }\n\n public setColor(color: ColorHsla | string, updateHexInput = true, updateRgbInput = true) {\n if(color === undefined) { // * set to red\n color = {\n h: 0,\n s: 100,\n l: 50,\n a: 1\n };\n } else if(typeof(color) === 'string') {\n if(color[0] === '#') {\n color = hexaToHsla(color);\n } else {\n const rgb = color.match(/[.?\\d]+/g);\n color = rgbaToHsla(+rgb[0], +rgb[1], +rgb[2], rgb[3] === undefined ? 1 : +rgb[3]);\n }\n }\n\n // Set box\n this.boxRect = this.elements.box.getBoundingClientRect();\n\n const boxX = this.boxRect.width / 100 * color.s;\n const percentY = 100 - (color.l / (100 - color.s / 2)) * 100;\n const boxY = this.boxRect.height / 100 * percentY;\n\n this.saturationHandler(this.boxRect.left + boxX, this.boxRect.top + boxY, false);\n\n // Set hue\n this.hueRect = this.elements.hue.getBoundingClientRect();\n\n const percentHue = color.h / 360;\n const hueX = this.hueRect.left + this.hueRect.width * percentHue;\n\n this.hueHandler(hueX, false);\n\n // Set values\n this.hue = color.h;\n this.saturation = color.s;\n this.lightness = color.l;\n this.alpha = color.a;\n\n this.updatePicker(updateHexInput, updateRgbInput);\n };\n\n public getCurrentColor(): ColorPickerColor {\n const rgbaArray = hslaToRgba(this.hue, this.saturation, this.lightness, this.alpha);\n const hexa = rgbaToHexa(rgbaArray);\n const hex = hexa.slice(0, -2);\n\n return {\n hsl: `hsl(${this.hue}, ${this.saturation}%, ${this.lightness}%)`,\n rgb: `rgb(${rgbaArray[0]}, ${rgbaArray[1]}, ${rgbaArray[2]})`,\n hex: hex,\n hsla: `hsla(${this.hue}, ${this.saturation}%, ${this.lightness}%, ${this.alpha})`,\n rgba: `rgba(${rgbaArray[0]}, ${rgbaArray[1]}, ${rgbaArray[2]}, ${rgbaArray[3]})`,\n hexa: hexa,\n rgbaArray: rgbaArray\n };\n }\n\n public updatePicker(updateHexInput = true, updateRgbInput = true) {\n const color = this.getCurrentColor();\n this.elements.boxDragger.setAttributeNS(null, 'fill', color.hex);\n\n if(updateHexInput) {\n this.hexInputField.setValueSilently(color.hex);\n this.hexInputField.setState(InputState.Neutral);\n }\n\n if(updateRgbInput) {\n this.rgbInputField.setValueSilently(color.rgbaArray.slice(0, -1).join(', '));\n this.rgbInputField.setState(InputState.Neutral);\n }\n\n if(this.onChange) {\n this.onChange(color);\n }\n }\n\n private hueHandler(pageX: number, update = true) {\n const eventX = clamp(pageX - this.hueRect.left, 0, this.hueRect.width);\n\n const percents = eventX / this.hueRect.width;\n this.hue = Math.round(360 * percents);\n\n const hsla = `hsla(${this.hue}, 100%, 50%, ${this.alpha})`;\n\n this.elements.hueDragger.setAttributeNS(null, 'x', (percents * 100) + '%');\n this.elements.hueDragger.setAttributeNS(null, 'fill', hsla);\n\n this.elements.saturation.lastElementChild.setAttributeNS(null, 'stop-color', hsla);\n\n if(update) {\n this.updatePicker();\n }\n }\n\n private saturationHandler(pageX: number, pageY: number, update = true) {\n const maxX = this.boxRect.width;\n const maxY = this.boxRect.height;\n\n const eventX = clamp(pageX - this.boxRect.left, 0, maxX);\n const eventY = clamp(pageY - this.boxRect.top, 0, maxY);\n\n const posX = eventX / maxX * 100;\n const posY = eventY / maxY * 100;\n\n const boxDragger = this.elements.boxDragger;\n boxDragger.setAttributeNS(null, 'x', posX + '%');\n boxDragger.setAttributeNS(null, 'y', posY + '%');\n\n const saturation = clamp(posX, 0, 100);\n\n const lightnessX = 100 - saturation / 2;\n const lightnessY = 100 - clamp(posY, 0, 100);\n\n const lightness = clamp(lightnessY / 100 * lightnessX, 0, 100);\n\n this.saturation = saturation;\n this.lightness = lightness;\n\n if(update) {\n this.updatePicker();\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppTheme} from '../../../config/state';\nimport {hexaToRgba} from '../../../helpers/color';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport highlightingColor from '../../../helpers/highlightingColor';\nimport throttle from '../../../helpers/schedulers/throttle';\nimport themeController from '../../../helpers/themeController';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport rootScope from '../../../lib/rootScope';\nimport ColorPicker, {ColorPickerColor} from '../../colorPicker';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTab} from '../../slider';\nimport {WallPaper} from '../../../layer';\n\nexport default class AppBackgroundColorTab extends SliderSuperTab {\n private colorPicker: ColorPicker;\n private grid: HTMLElement;\n private applyColor: (hex: string, updateColorPicker?: boolean) => void;\n private theme: AppTheme;\n\n init() {\n this.container.classList.add('background-container', 'background-color-container');\n this.setTitle('SetColor');\n\n this.theme = themeController.getTheme();\n\n const section = new SettingSection({});\n this.colorPicker = new ColorPicker();\n\n section.content.append(this.colorPicker.container);\n\n this.scrollable.append(section.container);\n\n const gridSection = new SettingSection({});\n\n const grid = this.grid = document.createElement('div');\n grid.classList.add('grid');\n\n const colors = [\n '#E6EBEE',\n '#B2CEE1',\n '#008DD0',\n '#C6E7CB',\n '#C4E1A6',\n '#60B16E',\n '#CCD0AF',\n '#A6A997',\n '#7A7072',\n '#FDD7AF',\n '#FDB76E',\n '#DD8851'\n ];\n\n colors.forEach((color) => {\n const item = document.createElement('div');\n item.classList.add('grid-item');\n item.dataset.color = color.toLowerCase();\n\n // * need for transform scale\n const media = document.createElement('div');\n media.classList.add('grid-item-media');\n media.style.backgroundColor = color;\n\n item.append(media);\n grid.append(item);\n });\n\n attachClickEvent(grid, (e) => {\n const target = findUpClassName(e.target, 'grid-item');\n if(!target || target.classList.contains('active')) {\n return;\n }\n\n const color = target.dataset.color;\n if(!color) {\n return;\n }\n\n this.applyColor(color);\n }, {listenerSetter: this.listenerSetter});\n\n gridSection.content.append(grid);\n this.scrollable.append(gridSection.container);\n\n this.applyColor = throttle(this._applyColor, 16, true);\n }\n\n private setActive() {\n const active = this.grid.querySelector('.active');\n const background = this.theme.settings;\n const wallPaper = background.wallpaper;\n const color = wallPaper.settings.background_color;\n const target = color ? this.grid.querySelector(`.grid-item[data-color=\"${color}\"]`) : null;\n if(active === target) {\n return;\n }\n\n if(active) {\n active.classList.remove('active');\n }\n\n if(target) {\n target.classList.add('active');\n }\n }\n\n private _applyColor = (hex: string, updateColorPicker = true) => {\n if(updateColorPicker) {\n this.colorPicker.setColor(hex);\n } else {\n const rgba = hexaToRgba(hex);\n const settings = this.theme.settings;\n const hsla = highlightingColor(rgba);\n\n const wallPaper: WallPaper.wallPaperNoFile = {\n _: 'wallPaperNoFile',\n id: 0,\n pFlags: {},\n settings: {\n _: 'wallPaperSettings',\n background_color: parseInt(hex.slice(1), 16),\n pFlags: {}\n }\n };\n\n settings.wallpaper = wallPaper;\n settings.highlightingColor = hsla;\n\n this.managers.appStateManager.pushToState('settings', rootScope.settings);\n\n appImManager.applyCurrentTheme({\n broadcastEvent: true\n });\n this.setActive();\n }\n };\n\n private onColorChange = (color: ColorPickerColor) => {\n this.applyColor(color.hex, false);\n };\n\n onOpen() {\n setTimeout(() => {\n const settings = this.theme.settings;\n const color = settings?.wallpaper?.settings?.background_color;\n\n const isColored = !!color && settings.wallpaper._ === 'wallPaperNoFile';\n\n // * set active if type is color\n if(isColored) {\n this.colorPicker.onChange = this.onColorChange;\n }\n\n this.colorPicker.setColor((color && '#' + color.toString(16)) || '#cccccc');\n\n if(!isColored) {\n this.colorPicker.onChange = this.onColorChange;\n }\n }, 0);\n }\n\n onCloseAfterTimeout() {\n this.colorPicker.onChange = undefined;\n this.colorPicker = undefined;\n\n return super.onCloseAfterTimeout();\n }\n}\n","export default function requestFile(accept?: string) {\n const input = document.createElement('input');\n input.type = 'file';\n input.style.display = 'none';\n\n if(accept) {\n input.accept = accept;\n }\n\n document.body.append(input);\n\n const promise = new Promise((resolve, reject) => {\n input.addEventListener('change', (e: any) => {\n const file: File = e.target.files[0];\n if(!file) {\n reject('NO_FILE_SELECTED');\n return;\n }\n\n resolve(file);\n }, {once: true});\n }).finally(() => {\n input.remove();\n });\n\n input.click();\n\n return promise;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {averageColor, averageColorFromCanvas} from '../../../helpers/averageColor';\nimport blur from '../../../helpers/blur';\nimport deferredPromise, {CancellablePromise} from '../../../helpers/cancellablePromise';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport highlightingColor from '../../../helpers/highlightingColor';\nimport copy from '../../../helpers/object/copy';\nimport sequentialDom from '../../../helpers/sequentialDom';\nimport ChatBackgroundGradientRenderer from '../../chat/gradientRenderer';\nimport {Document, WallPaper, WebDocument} from '../../../layer';\nimport {MyDocument} from '../../../lib/appManagers/appDocsManager';\nimport appDownloadManager, {AppDownloadManager} from '../../../lib/appManagers/appDownloadManager';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport rootScope from '../../../lib/rootScope';\nimport Button from '../../button';\nimport CheckboxField from '../../checkboxField';\nimport ProgressivePreloader from '../../preloader';\nimport {SliderSuperTab} from '../../slider';\nimport AppBackgroundColorTab from './backgroundColor';\nimport choosePhotoSize from '../../../lib/appManagers/utils/photos/choosePhotoSize';\nimport {STATE_INIT, AppTheme} from '../../../config/state';\nimport themeController from '../../../helpers/themeController';\nimport requestFile from '../../../helpers/files/requestFile';\nimport {renderImageFromUrlPromise} from '../../../helpers/dom/renderImageFromUrl';\nimport scaleMediaElement from '../../../helpers/canvas/scaleMediaElement';\nimport {MediaSize} from '../../../helpers/mediaSize';\nimport wrapPhoto from '../../wrappers/photo';\nimport {CreateRowFromCheckboxField} from '../../row';\nimport {generateSection} from '../../settingSection';\nimport {getColorsFromWallPaper} from '../../../helpers/color';\nimport {DEFAULT_BACKGROUND_SLUG} from '../../../config/app';\n\nconst needBlur = (wallPaper: WallPaper, respectPattern = true) => {\n const blur = (wallPaper as WallPaper.wallPaper)?.settings?.pFlags?.blur;\n return !!(blur && (!respectPattern || !(wallPaper as WallPaper.wallPaper).pFlags.pattern));\n};\n\nexport default class AppBackgroundTab extends SliderSuperTab {\n public static tempId = 0;\n private grid: HTMLElement;\n private clicked: Set = new Set();\n private blurCheckboxField: CheckboxField;\n\n private wallPapersByElement: Map = new Map();\n private elementsByKey: Map = new Map();\n\n public static getInitArgs() {\n return {\n backgrounds: rootScope.managers.appThemesManager.getWallPapers()\n };\n }\n\n private get theme() {\n return themeController.getTheme();\n }\n\n public init(p: ReturnType = AppBackgroundTab.getInitArgs()) {\n this.container.classList.add('background-container', 'background-image-container');\n this.setTitle('ChatBackground');\n\n {\n const container = generateSection(this.scrollable);\n\n const uploadButton = Button('btn-primary btn-transparent', {icon: 'cameraadd', text: 'ChatBackground.UploadWallpaper'});\n const colorButton = Button('btn-primary btn-transparent', {icon: 'colorize', text: 'SetColor'});\n const resetButton = Button('btn-primary btn-transparent', {icon: 'favourites', text: 'Appearance.Reset'});\n\n attachClickEvent(uploadButton, this.onUploadClick, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(colorButton, () => {\n this.slider.createTab(AppBackgroundColorTab).open();\n }, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(resetButton, this.onResetClick, {listenerSetter: this.listenerSetter});\n\n const wallPaper = this.theme.settings?.wallpaper;\n const blurCheckboxField = this.blurCheckboxField = new CheckboxField({\n text: 'ChatBackground.Blur',\n name: 'blur',\n checked: needBlur(wallPaper, false)\n });\n\n this.toggleBlurCheckbox();\n this.listenerSetter.add(blurCheckboxField.input)('change', async() => {\n await this.changeWallPaperBlur(this.theme.settings.wallpaper, blurCheckboxField.checked);\n\n // * wait for animation end\n setTimeout(() => {\n const active = grid.querySelector('.active') as HTMLElement;\n if(!active) return;\n\n const wallpaper = this.wallPapersByElement.get(active);\n if((wallpaper as WallPaper.wallPaper).pFlags.pattern || wallpaper._ === 'wallPaperNoFile') {\n return;\n }\n\n this.setBackgroundDocument(wallpaper);\n }, 100);\n });\n\n container.append(\n uploadButton,\n colorButton,\n resetButton,\n CreateRowFromCheckboxField(blurCheckboxField).container\n );\n }\n\n rootScope.addEventListener('background_change', this.setActive);\n\n const promise = p.backgrounds.then((wallPapers) => {\n const promises = wallPapers.map((wallPaper) => {\n return this.addWallPaper(wallPaper);\n });\n\n return Promise.all(promises);\n });\n\n const gridContainer = generateSection(this.scrollable);\n const grid = this.grid = document.createElement('div');\n grid.classList.add('grid');\n attachClickEvent(grid, this.onGridClick, {listenerSetter: this.listenerSetter});\n gridContainer.append(grid);\n\n return promise;\n }\n\n private onUploadClick = () => {\n requestFile('image/x-png,image/png,image/jpeg').then(async(file) => {\n if(file.name.endsWith('.png')) {\n const img = document.createElement('img');\n const url = URL.createObjectURL(file);\n await renderImageFromUrlPromise(img, url, false);\n const mimeType = 'image/jpeg';\n const {blob} = await scaleMediaElement({media: img, size: new MediaSize(img.naturalWidth, img.naturalHeight), mimeType});\n file = new File([blob], file.name.replace(/\\.png$/, '.jpg'), {type: mimeType});\n }\n\n const wallPaper = await this.managers.appDocsManager.prepareWallPaperUpload(file);\n const uploadPromise = this.managers.appDocsManager.uploadWallPaper(wallPaper.id);\n const uploadDeferred: CancellablePromise = appDownloadManager.getNewDeferredForUpload(file.name, uploadPromise);\n\n const deferred = deferredPromise();\n deferred.addNotifyListener = uploadDeferred.addNotifyListener.bind(uploadDeferred);\n deferred.cancel = uploadDeferred.cancel;\n\n uploadDeferred.then((wallPaper) => {\n this.clicked.delete(key);\n this.elementsByKey.delete(key);\n this.wallPapersByElement.set(container, wallPaper);\n const newKey = this.getWallPaperKey(wallPaper);\n this.elementsByKey.set(newKey, container);\n\n this.setBackgroundDocument(wallPaper).then(deferred.resolve.bind(deferred), deferred.reject.bind(deferred));\n }, deferred.reject.bind(deferred));\n\n const key = this.getWallPaperKey(wallPaper);\n deferred.catch(() => {\n container.remove();\n });\n\n const preloader = new ProgressivePreloader({\n isUpload: true,\n cancelable: true,\n tryAgainOnFail: false\n });\n\n const {container} = await this.addWallPaper(wallPaper, false);\n this.clicked.add(key);\n\n preloader.attach(container, false, deferred);\n });\n };\n\n private onResetClick = () => {\n const defaultTheme = STATE_INIT.settings.themes.find((t) => t.name === this.theme.name);\n if(defaultTheme) {\n ++AppBackgroundTab.tempId;\n this.theme.settings = copy(defaultTheme.settings);\n this.managers.appStateManager.pushToState('settings', rootScope.settings);\n appImManager.applyCurrentTheme({\n broadcastEvent: true\n });\n this.blurCheckboxField.setValueSilently(needBlur(this.theme.settings?.wallpaper, false));\n }\n };\n\n private getWallPaperKey(wallPaper: WallPaper) {\n return '' + wallPaper.id;\n }\n\n private getWallPaperKeyFromTheme(theme: AppTheme) {\n return '' + (this.getWallPaperKey(theme.settings?.wallpaper) || '');\n }\n\n public static addWallPaper(\n wallPaper: WallPaper,\n container = document.createElement('div')\n ) {\n const colors = getColorsFromWallPaper(wallPaper);\n const hasFile = wallPaper._ === 'wallPaper';\n if((hasFile && wallPaper.pFlags.pattern && !colors)/* ||\n (wallpaper.document as MyDocument).mime_type.indexOf('application/') === 0 */) {\n return;\n }\n\n const isDark = !!wallPaper.pFlags.dark;\n\n let doc: WebDocument.webDocumentNoProxy | Document.document = hasFile ? wallPaper.document as Document.document : undefined;\n if(hasFile && !doc) {\n doc = {\n _: 'webDocumentNoProxy',\n attributes: [],\n size: 100000,\n url: 'assets/img/pattern.svg',\n w: 1440,\n h: 2960,\n mime_type: 'image/svg+xml'\n };\n }\n\n container.classList.add('background-item');\n container.dataset.id = '' + wallPaper.id;\n\n const media = document.createElement('div');\n media.classList.add('background-item-media');\n\n const loadPromises: Promise[] = [];\n let wrapped: ReturnType, size: ReturnType;\n if(hasFile) {\n size = choosePhotoSize(doc, 200, 200);\n wrapped = wrapPhoto({\n photo: doc,\n message: null,\n container: media,\n withoutPreloader: true,\n size,\n noFadeIn: wallPaper.pFlags.pattern\n });\n\n if(wallPaper.pFlags.pattern) {\n media.classList.add('is-pattern');\n }\n\n const promise = wrapped.then(async({loadPromises, images}) => {\n await loadPromises.thumb || loadPromises.full;\n return images;\n }).then((images) => {\n if(wallPaper.pFlags.pattern) {\n if(isDark) {\n images.full.style.display = 'none';\n if(images.thumb) {\n images.thumb.style.display = 'none';\n }\n } else if(wallPaper.settings?.intensity) {\n images.full.style.opacity = '' + Math.abs(wallPaper.settings.intensity) / 100;\n }\n }\n\n return sequentialDom.mutate(() => {\n container.append(media);\n });\n });\n\n loadPromises.push(promise);\n } else {\n container.append(media);\n }\n\n if(wallPaper.settings?.background_color) {\n const {canvas} = ChatBackgroundGradientRenderer.create(colors);\n canvas.classList.add('background-colors-canvas');\n\n if(isDark && hasFile) {\n const promise = wrapped.then(({loadPromises}) => {\n return loadPromises.full.then(async() => {\n const cacheContext = await rootScope.managers.thumbsStorage.getCacheContext(doc, size.type);\n canvas.style.webkitMaskImage = `url(${cacheContext.url})`;\n canvas.style.opacity = '' + (wallPaper.pFlags.dark ? 100 + wallPaper.settings.intensity : wallPaper.settings.intensity) / 100;\n media.append(canvas);\n });\n });\n\n loadPromises.push(promise);\n } else {\n media.append(canvas);\n }\n }\n\n return {\n container,\n media,\n loadPromise: Promise.all(loadPromises)\n };\n }\n\n private addWallPaper(wallPaper: WallPaper, append = true) {\n const result = AppBackgroundTab.addWallPaper(wallPaper);\n if(result) {\n const {container, media} = result;\n container.classList.add('grid-item');\n media.classList.add('grid-item-media');\n\n const key = this.getWallPaperKey(wallPaper);\n this.wallPapersByElement.set(container, wallPaper);\n this.elementsByKey.set(key, container);\n\n if(this.getWallPaperKeyFromTheme(this.theme) === key) {\n container.classList.add('active');\n }\n\n this.grid[append ? 'append' : 'prepend'](container);\n }\n\n return result && result.loadPromise.then(() => result);\n }\n\n private onGridClick = (e: MouseEvent | TouchEvent) => {\n const target = findUpClassName(e.target, 'grid-item') as HTMLElement;\n if(!target) return;\n\n const wallPaper = this.wallPapersByElement.get(target);\n if(wallPaper._ === 'wallPaperNoFile') {\n this.setBackgroundDocument(wallPaper);\n return;\n }\n\n const key = this.getWallPaperKey(wallPaper);\n if(this.clicked.has(key)) return;\n this.clicked.add(key);\n\n const doc = wallPaper.document as MyDocument;\n const preloader = new ProgressivePreloader({\n cancelable: true,\n tryAgainOnFail: false\n });\n\n const load = async() => {\n const promise = this.setBackgroundDocument(wallPaper);\n const cacheContext = await this.managers.thumbsStorage.getCacheContext(doc);\n if(!cacheContext.url || needBlur(wallPaper)) {\n preloader.attach(target, true, promise);\n }\n };\n\n preloader.construct();\n\n attachClickEvent(target, (e) => {\n if(preloader.preloader.parentElement) {\n preloader.onClick(e);\n preloader.detach();\n } else {\n load();\n }\n }, {listenerSetter: this.listenerSetter});\n\n load();\n\n // console.log(doc);\n };\n\n private async changeWallPaperBlur(wallPaper: WallPaper, blur: boolean) {\n (wallPaper.settings ??= {_: 'wallPaperSettings', pFlags: {}}).pFlags.blur = blur || undefined;\n await this.managers.appStateManager.pushToState('settings', rootScope.settings);\n }\n\n private setBackgroundDocument = async(\n wallPaper: WallPaper,\n themeSettings?: AppTheme['settings']\n ) => {\n if(!this.blurCheckboxField.isDisabled()) {\n await this.changeWallPaperBlur(wallPaper, this.blurCheckboxField.checked);\n }\n\n return AppBackgroundTab.setBackgroundDocument(wallPaper, themeSettings);\n };\n\n public static setBackgroundDocument = (\n wallPaper: WallPaper,\n themeSettings?: AppTheme['settings']\n ) => {\n const _tempId = ++this.tempId;\n const middleware = () => _tempId === this.tempId;\n\n const doc = (wallPaper as WallPaper.wallPaper).document as MyDocument;\n const deferred = deferredPromise();\n let download: Promise | ReturnType;\n if(doc) {\n download = appDownloadManager.downloadMediaURL({\n media: doc,\n queueId: appImManager.chat.bubbles ? appImManager.chat.bubbles.lazyLoadQueue.queueId : 0\n });\n deferred.addNotifyListener = download.addNotifyListener.bind(download);\n deferred.cancel = download.cancel;\n } else {\n download = Promise.resolve();\n }\n\n download.then(async() => {\n if(!middleware()) {\n deferred.resolve();\n return;\n }\n\n const hadSettings = !!themeSettings;\n themeSettings ??= themeController.getTheme().settings;\n const onReady = (url?: string) => {\n let getPixelPromise: Promise;\n const backgroundColor = getColorsFromWallPaper(wallPaper);\n if(url && !backgroundColor) {\n getPixelPromise = averageColor(url);\n } else {\n const {canvas} = ChatBackgroundGradientRenderer.create(backgroundColor);\n getPixelPromise = Promise.resolve(averageColorFromCanvas(canvas));\n }\n\n const slug = (wallPaper as WallPaper.wallPaper).slug;\n Promise.all([\n getPixelPromise,\n appImManager.saveWallPaperToCache(slug, url)\n ]).then(([pixel]) => {\n if(!middleware()) {\n deferred.resolve();\n return;\n }\n\n const hsla = highlightingColor(Array.from(pixel) as any);\n\n themeSettings.wallpaper = wallPaper;\n themeSettings.highlightingColor = hsla;\n\n if(!hadSettings) {\n rootScope.managers.appStateManager.pushToState('settings', rootScope.settings);\n }\n\n appImManager.applyCurrentTheme({\n slug,\n backgroundUrl: url,\n broadcastEvent: true\n }).then(deferred.resolve.bind(deferred));\n });\n };\n\n if(!doc) {\n onReady();\n return;\n }\n\n const cacheContext = await rootScope.managers.thumbsStorage.getCacheContext(doc);\n if(needBlur(wallPaper)) {\n setTimeout(() => {\n appImManager.blurWallPaperImage(cacheContext.url).then((url) => {\n if(!middleware()) {\n deferred.resolve();\n return;\n }\n\n onReady(url);\n });\n }, 200);\n } else if(middleware()) {\n onReady(cacheContext.url);\n }\n });\n\n return deferred;\n };\n\n private toggleBlurCheckbox() {\n const wallPaper = this.theme.settings?.wallpaper;\n this.blurCheckboxField.toggleDisability(!wallPaper || wallPaper._ === 'wallPaperNoFile' || !!wallPaper?.pFlags?.pattern);\n }\n\n private setActive = () => {\n const active = this.grid.querySelector('.active');\n const target = this.elementsByKey.get(this.getWallPaperKeyFromTheme(this.theme));\n if(active === target) {\n return;\n }\n\n this.toggleBlurCheckbox();\n\n if(active) {\n active.classList.remove('active');\n }\n\n if(target) {\n target.classList.add('active');\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport eachTimeout from './eachTimeout';\n\n// It's better to use timeout instead of interval, because interval can be corrupted\nexport default function eachMinute(callback: () => any, runFirst?: boolean) {\n return eachTimeout(callback, () => (60 - new Date().getSeconds()) * 1000, runFirst);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {State} from '../../../config/state';\nimport flatten from '../../../helpers/array/flatten';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport {LiteModeKey} from '../../../helpers/liteMode';\nimport {joinDeepPath} from '../../../helpers/object/setDeepProperty';\nimport pause from '../../../helpers/schedulers/pause';\nimport rootScope from '../../../lib/rootScope';\nimport CheckboxFields, {CheckboxFieldsField} from '../../checkboxFields';\nimport SettingSection from '../../settingSection';\nimport SliderSuperTab from '../../sliderTab';\nimport {toastNew} from '../../toast';\n\ntype PowerSavingCheckboxFieldsField = CheckboxFieldsField & {\n key: LiteModeKey\n};\n\nexport default class AppPowerSavingTab extends SliderSuperTab {\n public init() {\n this.container.classList.add('power-saving-container');\n this.setTitle('LiteMode.Title');\n\n const form = document.createElement('form');\n\n let infoSection: SettingSection;\n {\n const section = infoSection = new SettingSection({\n caption: 'LiteMode.Info'\n });\n\n form.append(section.container);\n }\n\n const keys: Array = [\n 'all',\n 'video',\n 'gif',\n ['stickers', ['stickers_panel', 'stickers_chat']],\n // ['emoji', ['emoji_panel', 'emoji_messages']],\n ['effects', ['effects_reactions', 'effects_premiumstickers', 'effects_emoji']],\n ['chat', ['chat_background', 'chat_spoilers']],\n 'animations'\n ];\n\n let fields: PowerSavingCheckboxFieldsField[], checkboxFields: CheckboxFields;\n {\n const section = new SettingSection({});\n\n const wrap = (key: typeof keys[0]): PowerSavingCheckboxFieldsField[] => {\n const isArray = Array.isArray(key);\n const mainKey = isArray ? key[0] : key;\n const nested = isArray ? flatten(key[1].map(wrap)) : undefined;\n const value = rootScope.settings.liteMode[mainKey];\n return [{\n key: mainKey,\n text: mainKey === 'all' ? 'LiteMode.EnableText' : `LiteMode.Key.${mainKey}.Title`,\n checked: mainKey === 'all' ? value : !value,\n nested: nested,\n name: 'power-saving-' + mainKey\n }, ...(nested || [])];\n };\n\n fields = flatten(keys.map(wrap));\n\n checkboxFields = new CheckboxFields({\n fields: fields,\n listenerSetter: this.listenerSetter\n });\n\n fields.forEach((field, idx) => {\n const created = checkboxFields.createField(field);\n if(!created) {\n return;\n }\n\n const {row, nodes} = created;\n (idx === 0 ? infoSection : section).content.append(...nodes);\n });\n\n attachClickEvent(section.content, () => {\n if(rootScope.settings.liteMode.all) {\n toastNew({langPackKey: 'LiteMode.DisableAlert'});\n }\n }, {listenerSetter: this.listenerSetter});\n\n form.append(section.container);\n }\n\n const onAllChange = (disable: boolean) => {\n fields.forEach((field) => {\n if(field.key === 'all') {\n return;\n }\n\n if(field.nested) {\n checkboxFields.setNestedCounter(field, disable ? 0 : undefined);\n }\n\n field.checkboxField.input.classList.toggle('is-fake-disabled', disable);\n field.row.toggleDisability(disable);\n });\n };\n\n this.listenerSetter.add(form)('change', async() => {\n const liteMode: State['settings']['liteMode'] = {} as any;\n fields.forEach((field) => {\n const checked = field.checkboxField.checked;\n liteMode[field.key] = field.key === 'all' ? checked : !checked;\n });\n\n const wasAll = rootScope.settings.liteMode.all;\n if(wasAll !== liteMode.all) {\n onAllChange(!wasAll);\n\n if(liteMode.all) {\n await pause(200);\n }\n }\n\n await this.managers.appStateManager.setByKey(joinDeepPath('settings', 'liteMode'), rootScope.settings.liteMode = liteMode);\n });\n\n onAllChange(rootScope.settings.liteMode.all);\n\n this.scrollable.append(form);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport RangeSelector from '../../rangeSelector';\nimport Button from '../../button';\nimport CheckboxField from '../../checkboxField';\nimport RadioField from '../../radioField';\nimport rootScope from '../../../lib/rootScope';\nimport {IS_APPLE, IS_SAFARI} from '../../../environment/userAgent';\nimport Row from '../../row';\nimport AppBackgroundTab from './background';\nimport I18n, {LangPackKey, _i18n, join} from '../../../lib/langPack';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport {BaseTheme} from '../../../layer';\nimport eachMinute from '../../../helpers/eachMinute';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport IS_GEOLOCATION_SUPPORTED from '../../../environment/geolocationSupport';\nimport {DEFAULT_THEME, State} from '../../../config/state';\nimport {generateSection} from '../../settingSection';\nimport {ScrollableX} from '../../scrollable';\nimport wrapStickerEmoji from '../../wrappers/stickerEmoji';\nimport {Theme} from '../../../layer';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport RLottiePlayer from '../../../lib/rlottie/rlottiePlayer';\nimport themeController from '../../../helpers/themeController';\nimport liteMode from '../../../helpers/liteMode';\nimport AppPowerSavingTab from './powerSaving';\nimport {toastNew} from '../../toast';\nimport {joinDeepPath} from '../../../helpers/object/setDeepProperty';\n\nexport class RangeSettingSelector {\n public container: HTMLDivElement;\n public valueContainer: HTMLElement;\n private range: RangeSelector;\n\n public onChange: (value: number) => void;\n\n constructor(\n name: LangPackKey,\n step: number,\n initialValue: number,\n minValue: number,\n maxValue: number,\n writeValue = true\n ) {\n const BASE_CLASS = 'range-setting-selector';\n this.container = document.createElement('div');\n this.container.classList.add(BASE_CLASS);\n\n const details = document.createElement('div');\n details.classList.add(BASE_CLASS + '-details');\n\n const nameDiv = document.createElement('div');\n nameDiv.classList.add(BASE_CLASS + '-name');\n _i18n(nameDiv, name);\n\n const valueDiv = this.valueContainer = document.createElement('div');\n valueDiv.classList.add(BASE_CLASS + '-value');\n\n if(writeValue) {\n valueDiv.innerHTML = '' + initialValue;\n }\n\n details.append(nameDiv, valueDiv);\n\n this.range = new RangeSelector({\n step,\n min: minValue,\n max: maxValue\n }, initialValue);\n this.range.setListeners();\n this.range.setHandlers({\n onScrub: value => {\n if(this.onChange) {\n this.onChange(value);\n }\n\n if(writeValue) {\n // console.log('font size scrub:', value);\n valueDiv.innerText = '' + value;\n }\n }\n });\n\n this.container.append(details, this.range.container);\n }\n}\n\nexport default class AppGeneralSettingsTab extends SliderSuperTabEventable {\n public static getInitArgs() {\n return {\n themes: rootScope.managers.appThemesManager.getThemes()\n };\n }\n\n public init(p: ReturnType) {\n this.container.classList.add('general-settings-container');\n this.setTitle('General');\n\n const section = generateSection.bind(null, this.scrollable);\n const promises: Promise[] = [];\n\n {\n const container = section('Settings');\n\n const range = new RangeSettingSelector('TextSize', 1, rootScope.settings.messagesTextSize, 12, 20);\n range.onChange = (value) => {\n rootScope.managers.appStateManager.setByKey(joinDeepPath('settings', 'messagesTextSize'), value);\n };\n\n const chatBackgroundButton = Button('btn-primary btn-transparent', {icon: 'image', text: 'ChatBackground'});\n\n const initArgs = AppBackgroundTab.getInitArgs();\n attachClickEvent(chatBackgroundButton, () => {\n this.slider.createTab(AppBackgroundTab).open(initArgs);\n });\n\n const getLiteModeStatus = (): LangPackKey => rootScope.settings.liteMode.all ? 'Checkbox.Enabled' : 'Checkbox.Disabled';\n const i = new I18n.IntlElement();\n\n const onUpdate = () => {\n i.compareAndUpdate({key: getLiteModeStatus()});\n animationsCheckboxField.setValueSilently(liteMode.isAvailable('animations'));\n animationsCheckboxField.toggleDisability(liteMode.isEnabled());\n };\n\n const animationsCheckboxField = new CheckboxField({\n text: 'EnableAnimations',\n name: 'animations',\n stateKey: joinDeepPath('settings', 'liteMode', 'animations'),\n stateValueReverse: true,\n checked: false,\n listenerSetter: this.listenerSetter\n });\n\n const animationsRow = new Row({\n checkboxField: animationsCheckboxField,\n clickable: () => {\n if(animationsCheckboxField.isDisabled()) {\n toastNew({langPackKey: 'LiteMode.DisableAlert'});\n }\n },\n listenerSetter: this.listenerSetter\n });\n\n const liteModeRow = new Row({\n icon: 'animations',\n titleLangKey: 'LiteMode.EnableText',\n titleRightSecondary: i.element,\n clickable: () => {\n this.slider.createTab(AppPowerSavingTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n onUpdate();\n\n this.listenerSetter.add(rootScope)('settings_updated', onUpdate);\n\n container.append(\n range.container,\n chatBackgroundButton,\n animationsRow.container,\n liteModeRow.container\n );\n }\n\n {\n const container = section('ColorTheme');\n\n const scrollable = new ScrollableX(null);\n const themesContainer = scrollable.container;\n themesContainer.classList.add('themes-container');\n\n type K = {\n container: HTMLElement,\n theme: Theme,\n player?: RLottiePlayer,\n wallPaperContainers?: {[key in BaseTheme['_']]?: HTMLElement}\n };\n const themesMap = new Map();\n let currentTheme = themeController.getTheme();\n let isNight = themeController.isNight();\n\n const applyThemeOnItem = (item: K) => {\n themeController.applyTheme(item.theme, item.container);\n\n const previous = item.container.querySelector('.background-item');\n previous?.remove();\n\n const wallPaperContainer = item.wallPaperContainers[isNight ? 'baseThemeNight' : 'baseThemeClassic']\n if(wallPaperContainer) {\n item.container.prepend(wallPaperContainer);\n }\n };\n\n let lastOnFrameNo: (frameNo: number) => void;\n\n attachClickEvent(themesContainer, async(e) => {\n const container = findUpClassName(e.target, 'theme-container');\n if(!container) {\n return;\n }\n\n const lastActive = themesContainer.querySelector('.active');\n if(lastActive) {\n lastActive.classList.remove('active');\n }\n\n const item = themesMap.get(container);\n container.classList.add('active');\n\n await themeController.applyNewTheme(item.theme);\n\n lastOnFrameNo?.(-1);\n\n if(item.player && liteMode.isAvailable('animations')) {\n if(IS_SAFARI) {\n if(item.player.paused) {\n item.player.restart();\n }\n } else {\n if(item.player.paused) {\n item.player.stop(true);\n }\n\n item.player.el[0].style.transform = 'scale(2)';\n\n const onFrameNo = lastOnFrameNo = (frameNo) => {\n if(item.player.maxFrame === frameNo || frameNo === -1) {\n item.player.el[0].style.transform = '';\n item.player.removeEventListener('enterFrame', onFrameNo);\n\n if(lastOnFrameNo === onFrameNo) {\n lastOnFrameNo = undefined;\n }\n }\n };\n\n setTimeout(() => {\n if(lastOnFrameNo !== onFrameNo) {\n return;\n }\n\n item.player.play();\n item.player.addEventListener('enterFrame', onFrameNo);\n }, 250);\n }\n }\n }, {listenerSetter: this.listenerSetter});\n\n const availableBaseThemes: Set = new Set(['baseThemeClassic', 'baseThemeNight']);\n\n const promise = p.themes.then(async(themes) => {\n const defaultThemes = themes.filter((theme) => theme.pFlags.default/* && theme.settings[0].message_colors.length === 1 */);\n defaultThemes.unshift(DEFAULT_THEME);\n\n const promises = defaultThemes.map(async(theme) => {\n const container = document.createElement('div');\n const k: K = {\n container,\n theme,\n wallPaperContainers: {}\n };\n\n const results = theme.settings\n .filter((themeSettings) => availableBaseThemes.has(themeSettings.base_theme._))\n .map((themeSettings) => {\n const wallPaper = themeSettings.wallpaper;\n const result = AppBackgroundTab.addWallPaper(wallPaper);\n k.wallPaperContainers[themeSettings.base_theme._] = result.container;\n return result;\n });\n\n themesMap.set(container, k);\n\n applyThemeOnItem(k);\n\n if(theme.id === currentTheme.id) {\n container.classList.add('active');\n }\n\n const emoticon = theme.emoticon;\n const loadPromises: Promise[] = [];\n let emoticonContainer: HTMLElement;\n if(emoticon) {\n emoticonContainer = document.createElement('div');\n emoticonContainer.classList.add('theme-emoticon');\n const size = 28 * 1.75;\n wrapStickerEmoji({\n div: emoticonContainer,\n width: size,\n height: size,\n emoji: theme.emoticon,\n managers: this.managers,\n loadPromises,\n middleware: this.middlewareHelper.get(),\n play: false\n }).then(({render}) => render).then((player) => {\n k.player = player as RLottiePlayer;\n });\n }\n\n const bubble = document.createElement('div');\n bubble.classList.add('theme-bubble');\n\n const bubbleIn = bubble.cloneNode() as HTMLElement;\n\n bubbleIn.classList.add('is-in');\n bubble.classList.add('is-out');\n\n loadPromises.push(...results.map((result) => result.loadPromise));\n\n container.classList.add('theme-container');\n\n await Promise.all(loadPromises);\n\n if(emoticonContainer) {\n container.append(emoticonContainer);\n }\n\n container.append(bubbleIn, bubble);\n\n return container;\n });\n\n const containers = await Promise.all(promises);\n\n scrollable.append(...containers);\n });\n\n promises.push(promise);\n\n const form = document.createElement('form');\n form.style.marginTop = '.5rem';\n\n const name = 'theme';\n const stateKey = joinDeepPath('settings', 'theme');\n\n const dayRow = new Row({\n radioField: new RadioField({\n langKey: 'ThemeDay',\n name,\n value: 'day',\n stateKey\n })\n });\n\n const nightRow = new Row({\n radioField: new RadioField({\n langKey: 'ThemeNight',\n name,\n value: 'night',\n stateKey\n })\n });\n\n const systemRow = new Row({\n radioField: new RadioField({\n langKey: 'AutoNightSystemDefault',\n name,\n value: 'system',\n stateKey\n })\n });\n\n this.listenerSetter.add(rootScope)('settings_updated', ({key, value, settings}) => {\n if(key === stateKey) {\n rootScope.dispatchEvent('theme_change');\n }\n });\n\n this.listenerSetter.add(rootScope)('theme_changed', () => {\n currentTheme = themeController.getTheme();\n const newIsNight = themeController.isNight();\n if(isNight === newIsNight) {\n return;\n }\n\n isNight = newIsNight;\n\n const lastActive = themesContainer.querySelector('.active');\n if(lastActive) {\n lastActive.classList.remove('active');\n }\n\n let active: HTMLElement;\n themesMap.forEach((item) => {\n applyThemeOnItem(item);\n\n if(item.theme.id === currentTheme.id) {\n item.container.classList.add('active');\n active = item.container;\n }\n });\n\n if(active) {\n scrollable.scrollIntoViewNew({\n element: active,\n position: 'center',\n axis: 'x'\n });\n }\n });\n\n form.append(dayRow.container, nightRow.container, systemRow.container);\n\n container.append(\n themesContainer,\n form\n );\n }\n\n {\n const container = section('General.Keyboard');\n\n const form = document.createElement('form');\n\n const name = 'send-shortcut';\n const stateKey = joinDeepPath('settings', 'sendShortcut');\n\n const enterRow = new Row({\n radioField: new RadioField({\n langKey: 'General.SendShortcut.Enter',\n name,\n value: 'enter',\n stateKey\n }),\n subtitleLangKey: 'General.SendShortcut.NewLine.ShiftEnter'\n });\n\n const ctrlEnterRow = new Row({\n radioField: new RadioField({\n name,\n value: 'ctrlEnter',\n stateKey\n }),\n subtitleLangKey: 'General.SendShortcut.NewLine.Enter'\n });\n _i18n(ctrlEnterRow.radioField.main, 'General.SendShortcut.CtrlEnter', [IS_APPLE ? '⌘' : 'Ctrl']);\n\n form.append(enterRow.container, ctrlEnterRow.container);\n container.append(form);\n }\n\n if(IS_GEOLOCATION_SUPPORTED) {\n const container = section('DistanceUnitsTitle');\n\n const form = document.createElement('form');\n\n const name = 'distance-unit';\n const stateKey = joinDeepPath('settings', 'distanceUnit');\n\n const kilometersRow = new Row({\n radioField: new RadioField({\n langKey: 'DistanceUnitsKilometers',\n name,\n value: 'kilometers',\n stateKey\n })\n });\n\n const milesRow = new Row({\n radioField: new RadioField({\n langKey: 'DistanceUnitsMiles',\n name,\n value: 'miles',\n stateKey\n })\n });\n\n form.append(kilometersRow.container, milesRow.container);\n container.append(form);\n }\n\n {\n const container = section('General.TimeFormat');\n\n const form = document.createElement('form');\n\n const name = 'time-format';\n const stateKey = joinDeepPath('settings', 'timeFormat');\n\n const formats: [State['settings']['timeFormat'], LangPackKey][] = [\n ['h12', 'General.TimeFormat.h12'],\n ['h23', 'General.TimeFormat.h23']\n ];\n\n const rows = formats.map(([format, langPackKey]) => {\n const row = new Row({\n radioField: new RadioField({\n langKey: langPackKey,\n name,\n value: format,\n stateKey\n })\n });\n\n return row;\n });\n\n const cancel = eachMinute(() => {\n const date = new Date();\n\n formats.forEach(([format], idx) => {\n const str = date.toLocaleTimeString('en-us-u-hc-' + format, {\n hour: '2-digit',\n minute: '2-digit'\n });\n\n rows[idx].subtitle.textContent = str;\n });\n });\n\n this.eventListener.addEventListener('destroy', cancel);\n\n form.append(...rows.map((row) => row.container));\n container.append(form);\n }\n\n return Promise.all(promises);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../../../lib/storages/filters';\nimport {SliderSuperTab} from '../../slider';\nimport AppSelectPeers from '../../appSelectPeers';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport ButtonIcon from '../../buttonIcon';\nimport Button from '../../button';\nimport AppEditFolderTab from './editFolder';\nimport I18n, {i18n, LangPackKey, _i18n, join} from '../../../lib/langPack';\nimport {toast} from '../../toast';\nimport copy from '../../../helpers/object/copy';\nimport forEachReverse from '../../../helpers/array/forEachReverse';\nimport setInnerHTML from '../../../helpers/dom/setInnerHTML';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport {REAL_FOLDERS} from '../../../lib/mtproto/mtproto_config';\nimport rootScope from '../../../lib/rootScope';\nimport {MTAppConfig} from '../../../lib/mtproto/appConfig';\nimport {attachClickEvent, simulateClickEvent} from '../../../helpers/dom/clickEvent';\nimport SettingSection from '../../settingSection';\nimport {DialogFilter} from '../../../layer';\nimport Icon from '../../icon';\nimport showLimitPopup from '../../popups/limit';\n\nexport default class AppIncludedChatsTab extends SliderSuperTab {\n private editFolderTab: AppEditFolderTab;\n private confirmBtn: HTMLElement;\n\n private selector: AppSelectPeers;\n private type: 'included' | 'excluded';\n private filter: MyDialogFilter;\n private originalFilter: MyDialogFilter;\n\n private dialogsByFilters: Map>;\n private limit: number;\n\n public init(\n filter: MyDialogFilter,\n type: 'included' | 'excluded',\n editFolderTab: AppIncludedChatsTab['editFolderTab']\n ) {\n this.originalFilter = filter;\n this.filter = copy(this.originalFilter);\n this.type = type;\n this.editFolderTab = editFolderTab;\n\n this.content.remove();\n this.container.classList.add('included-chatlist-container');\n this.confirmBtn = ButtonIcon('check btn-confirm blue', {noRipple: true});\n this.confirmBtn.style.display = 'none';\n\n this.header.append(this.confirmBtn);\n\n attachClickEvent(this.confirmBtn, async() => {\n const selected = this.selector.getSelected();\n\n // this.filter.pFlags = {};\n\n const pFlags = (this.filter as DialogFilter.dialogFilter).pFlags;\n if(this.type === 'included' && pFlags) {\n for(const key in pFlags) {\n if(key.indexOf('exclude_') === 0) {\n continue;\n }\n\n // @ts-ignore\n delete pFlags[key];\n }\n } else if(pFlags) {\n for(const key in pFlags) {\n if(key.indexOf('exclude_') !== 0) {\n continue;\n }\n\n // @ts-ignore\n delete pFlags[key];\n }\n }\n\n const peerIds: PeerId[] = [];\n for(const key of selected) {\n if(key.isPeerId()) {\n peerIds.push(key.toPeerId());\n } else {\n // @ts-ignore\n this.filter.pFlags[key] = true;\n }\n }\n\n let cmp: (peerId: PeerId) => boolean;\n if(this.type === 'included') {\n cmp = (peerId) => peerIds.includes(peerId);\n } else {\n cmp = (peerId) => !peerIds.includes(peerId);\n }\n\n forEachReverse(this.filter.pinnedPeerIds, (peerId, idx) => {\n if(!cmp(peerId)) {\n this.filter.pinnedPeerIds.splice(idx, 1);\n this.filter.pinned_peers.splice(idx, 1);\n }\n });\n\n const other = this.type === 'included' ? 'excludePeerIds' : 'includePeerIds';\n const otherLegacy = this.type === 'included' ? 'exclude_peers' : 'include_peers';\n const otherArr = (this.filter as DialogFilter.dialogFilter)[other];\n const otherLegacyArr = (this.filter as DialogFilter.dialogFilter)[otherLegacy];\n if(otherArr) forEachReverse(otherArr, (peerId, idx) => {\n if(peerIds.includes(peerId)) {\n otherArr.splice(idx, 1);\n otherLegacyArr.splice(idx, 1);\n }\n });\n\n (this.filter as DialogFilter.dialogFilter)[this.type === 'included' ? 'includePeerIds' : 'excludePeerIds'] = peerIds;\n (this.filter as DialogFilter.dialogFilter)[this.type === 'included' ? 'include_peers' : 'exclude_peers'] = await Promise.all(peerIds.map((peerId) => this.managers.appPeersManager.getInputPeerById(peerId)));\n // this.filter.pinned_peers = this.filter.pinned_peers.filter((peerId) => this.filter.include_peers.includes(peerId));\n\n this.editFolderTab.setFilter(this.filter, false);\n this.close();\n }, {listenerSetter: this.listenerSetter});\n\n const onAppConfig = (appConfig: MTAppConfig) => {\n this.limit = rootScope.premium ? appConfig.dialog_filters_chats_limit_premium : appConfig.dialog_filters_chats_limit_default;\n };\n\n this.listenerSetter.add(rootScope)('app_config', onAppConfig);\n\n this.dialogsByFilters = new Map();\n return Promise.all([\n this.managers.filtersStorage.getDialogFilters().then(async(filters) => {\n await Promise.all(filters.filter((filter) => !REAL_FOLDERS.has(filter.id)).map(async(filter) => {\n const dialogs = await this.managers.dialogsStorage.getFolderDialogs(filter.id);\n const peerIds = dialogs.map((d) => d.peerId);\n this.dialogsByFilters.set(filter, new Set(peerIds));\n }));\n }),\n\n this.managers.apiManager.getAppConfig().then((appConfig) => {\n onAppConfig(appConfig);\n })\n ]);\n }\n\n renderResults = async(peerIds: PeerId[]) => {\n // const other = this.type === 'included' ? this.filter.exclude_peers : this.filter.include_peers;\n\n await this.managers.appUsersManager.getContacts();\n peerIds.forEach((peerId) => {\n // if(other.includes(peerId)) return;\n\n const dialogElement = appDialogsManager.addDialogNew({\n peerId: peerId,\n container: this.selector.list,\n rippleEnabled: true,\n avatarSize: 'abitbigger',\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n\n (dialogElement.container as any).dialogElement = dialogElement;\n const {dom} = dialogElement;\n\n const selected = this.selector.selected.has(peerId);\n dom.containerEl.append(this.selector.checkbox(selected));\n // if(selected) dom.listEl.classList.add('active');\n\n const foundInFilters: HTMLElement[] = [];\n this.dialogsByFilters.forEach((dialogs, filter) => {\n if(dialogs.has(peerId)) {\n const span = document.createElement('span');\n setInnerHTML(span, wrapEmojiText(filter.title));\n foundInFilters.push(span);\n }\n });\n\n const joined = join(foundInFilters, false);\n joined.forEach((el) => {\n dom.lastMessageSpan.append(el);\n });\n });\n };\n\n onOpen() {\n this.confirmBtn.style.display = this.type === 'excluded' ? '' : 'none';\n this.setTitle(this.type === 'included' ? 'FilterAlwaysShow' : 'FilterNeverShow');\n\n const filter = this.filter;\n\n const categoriesSection = new SettingSection({\n noDelimiter: true,\n name: 'FilterChatTypes'\n });\n\n categoriesSection.container.classList.add('folder-categories');\n\n let details: {[flag: string]: {ico: Icon, text: LangPackKey}};\n if(this.type === 'excluded') {\n details = {\n exclude_muted: {ico: 'mute', text: 'ChatList.Filter.MutedChats'},\n exclude_archived: {ico: 'archive', text: 'ChatList.Filter.Archive'},\n exclude_read: {ico: 'readchats', text: 'ChatList.Filter.ReadChats'}\n };\n } else {\n details = {\n contacts: {ico: 'newprivate', text: 'ChatList.Filter.Contacts'},\n non_contacts: {ico: 'noncontacts', text: 'ChatList.Filter.NonContacts'},\n groups: {ico: 'group', text: 'ChatList.Filter.Groups'},\n broadcasts: {ico: 'newchannel', text: 'ChatList.Filter.Channels'},\n bots: {ico: 'bots', text: 'ChatList.Filter.Bots'}\n };\n }\n\n this.selector = new AppSelectPeers({\n middleware: this.middlewareHelper.get(),\n appendTo: this.container,\n onChange: this.onSelectChange,\n peerType: ['dialogs'],\n renderResultsFunc: this.renderResults,\n placeholder: 'Search',\n sectionNameLangPackKey: 'FilterChats',\n managers: this.managers\n });\n\n const f = document.createDocumentFragment();\n for(const key in details) {\n const button = Button('btn-primary btn-transparent folder-category-button', {icon: details[key].ico, text: details[key].text});\n button.dataset.peerId = key;\n button.append(this.selector.checkbox());\n f.append(button);\n }\n categoriesSection.content.append(f);\n\n // ///////////////\n\n const selectedPeers = (this.type === 'included' ? filter.includePeerIds : (filter as DialogFilter.dialogFilter).excludePeerIds).slice();\n\n this.selector.selected = new Set(selectedPeers);\n\n let addedInitial = false;\n const _add = this.selector.add.bind(this.selector);\n this.selector.add = ({key: peerId, title, scroll}) => {\n if(this.selector.selected.size >= this.limit && addedInitial && !details[peerId]) {\n showLimitPopup('folderPeers');\n return false;\n }\n\n const ret = _add({\n key: peerId,\n title: details[peerId] ? i18n(details[peerId].text) : undefined,\n scroll,\n fallbackIcon: details[peerId]?.ico\n });\n return ret;\n };\n\n this.selector.scrollable.append(categoriesSection.container, this.selector.scrollable.container.lastElementChild);\n\n this.selector.addInitial(selectedPeers);\n addedInitial = true;\n\n const pFlags = (filter as DialogFilter.dialogFilter).pFlags;\n if(pFlags) for(const flag in pFlags) {\n if(details.hasOwnProperty(flag) && !!pFlags[flag as keyof typeof pFlags]) {\n simulateClickEvent(categoriesSection.content.querySelector(`[data-peer-id=\"${flag}\"]`) as HTMLElement);\n }\n }\n }\n\n onSelectChange = (length: number) => {\n // const changed = !deepEqual(this.filter, this.originalFilter);\n if(this.type === 'included') {\n this.confirmBtn.style.display = length ? '' : 'none';\n }\n };\n\n onCloseAfterTimeout() {\n if(this.selector) {\n this.selector.container.remove();\n this.selector = null;\n }\n\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../../../lib/storages/filters';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport lottieLoader, {LottieLoader} from '../../../lib/rlottie/lottieLoader';\nimport {SliderSuperTab} from '../../slider';\nimport {toast, toastNew} from '../../toast';\nimport InputField from '../../inputField';\nimport ButtonIcon from '../../buttonIcon';\nimport ButtonMenuToggle from '../../buttonMenuToggle';\nimport {ButtonMenuItemOptions} from '../../buttonMenu';\nimport Button from '../../button';\nimport AppIncludedChatsTab from './includedChats';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport RLottiePlayer from '../../../lib/rlottie/rlottiePlayer';\nimport copy from '../../../helpers/object/copy';\nimport deepEqual from '../../../helpers/object/deepEqual';\nimport wrapDraftText from '../../../lib/richTextProcessor/wrapDraftText';\nimport filterAsync from '../../../helpers/array/filterAsync';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport SettingSection from '../../settingSection';\nimport {DialogFilter, ExportedChatlistInvite} from '../../../layer';\nimport rootScope from '../../../lib/rootScope';\nimport confirmationPopup from '../../confirmationPopup';\nimport Row from '../../row';\nimport createContextMenu from '../../../helpers/dom/createContextMenu';\nimport findUpClassName from '../../../helpers/dom/findUpClassName';\nimport {copyTextToClipboard} from '../../../helpers/clipboard';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport AppSharedFolderTab from './sharedFolder';\nimport showLimitPopup from '../../popups/limit';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport PopupSharedFolderInvite from '../../popups/sharedFolderInvite';\nimport PopupElement from '../../popups';\nimport {TGICO_CLASS} from '../../../helpers/tgico';\nimport Icon from '../../icon';\n\nconst MAX_FOLDER_NAME_LENGTH = 12;\n\ntype EditFolderButton = {\n icon: Icon,\n name?: keyof DialogFilter.dialogFilter['pFlags'],\n withRipple?: true,\n text: LangPackKey\n};\n\nexport default class AppEditFolderTab extends SliderSuperTab {\n private caption: HTMLElement;\n private stickerContainer: HTMLElement;\n\n private confirmBtn: HTMLElement;\n private menuBtn: HTMLElement;\n private nameInputField: InputField;\n\n private includePeerIds: SettingSection;\n private excludePeerIds: SettingSection;\n private inviteLinks: SettingSection;\n private flags: {[k in 'contacts' | 'non_contacts' | 'groups' | 'broadcasts' | 'bots' | 'exclude_muted' | 'exclude_archived' | 'exclude_read']: HTMLElement} = {} as any;\n\n private includePeerIdsButtons: EditFolderButton[];\n private excludePeerIdsButtons: EditFolderButton[];\n private inviteLinksCreate: HTMLElement;\n private animation: RLottiePlayer;\n private filter: MyDialogFilter;\n private originalFilter: MyDialogFilter;\n\n private type: 'edit' | 'create';\n private loadAnimationPromise: ReturnType;\n\n private tempId: number;\n\n private showMoreClicked: {[key in 'includePeerIds' | 'excludePeerIds']?: boolean}\n\n public static getInitArgs() {\n return {\n animationData: lottieLoader.loadAnimationFromURLManually('Folders_2')\n };\n }\n\n public static async deleteFolder(filterId: number) {\n const filter = await rootScope.managers.filtersStorage.getFilter(filterId);\n if(filter?._ === 'dialogFilterChatlist' && !filter.pFlags.has_my_invites) {\n PopupElement.createPopup(PopupSharedFolderInvite, {\n filter,\n deleting: true\n });\n\n return;\n }\n\n await confirmationPopup({\n titleLangKey: 'ChatList.Filter.Confirm.Remove.Header',\n descriptionLangKey: (filter as DialogFilter.dialogFilterChatlist).pFlags.has_my_invites ? 'RemoveSharedFolder' : 'ChatList.Filter.Confirm.Remove.Text',\n button: {\n langKey: 'Delete',\n isDanger: true\n }\n });\n\n return rootScope.managers.filtersStorage.updateDialogFilter(\n {\n _: 'dialogFilter',\n id: filterId\n } as DialogFilter.dialogFilter,\n true\n );\n }\n\n public init(p: ReturnType = AppEditFolderTab.getInitArgs()) {\n this.container.classList.add('edit-folder-container');\n this.caption = document.createElement('div');\n this.caption.classList.add('caption');\n this.caption.append(i18n('FilterIncludeExcludeInfo'));\n this.stickerContainer = document.createElement('div');\n this.stickerContainer.classList.add('sticker-container');\n\n this.tempId = 0;\n this.showMoreClicked = {};\n\n this.confirmBtn = ButtonIcon('check btn-confirm hide blue');\n let deleting = false;\n const deleteFolderButton: ButtonMenuItemOptions = {\n icon: 'delete',\n className: 'danger',\n text: 'FilterMenuDelete',\n onClick: () => {\n if(deleting) {\n return;\n }\n\n AppEditFolderTab.deleteFolder(this.filter.id).then(() => {\n this.close();\n }).finally(() => {\n deleting = false;\n });\n }\n };\n this.menuBtn = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n direction: 'bottom-left',\n buttons: [deleteFolderButton]\n });\n this.menuBtn.classList.add('hide');\n\n this.header.append(this.confirmBtn, this.menuBtn);\n\n const inputSection = new SettingSection({});\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.nameInputField = new InputField({\n label: 'FilterNameHint',\n maxLength: MAX_FOLDER_NAME_LENGTH\n });\n\n inputWrapper.append(this.nameInputField.container);\n inputSection.content.append(inputWrapper);\n\n const generateList = (\n className: string,\n h2Text: LangPackKey,\n buttons: EditFolderButton[],\n to: any,\n caption?: LangPackKey\n ) => {\n const section = new SettingSection({\n name: h2Text,\n caption,\n noDelimiter: true\n });\n\n section.container.classList.add('folder-list', className);\n\n const categories = section.generateContentElement();\n categories.classList.add('folder-categories');\n\n buttons.forEach((o, idx) => {\n const button = Button('folder-category-button btn btn-primary btn-transparent' + (idx === 0 ? ' primary' : ' disable-hover'), {\n icon: o.icon,\n text: o.text,\n noRipple: o.withRipple ? undefined : true\n });\n\n if(o.name) {\n to[o.name] = button;\n }\n\n categories.append(button);\n });\n\n return section;\n };\n\n this.includePeerIds = generateList('folder-list-included', 'FilterInclude', this.includePeerIdsButtons = [{\n icon: 'add',\n text: 'ChatList.Filter.Include.AddChat',\n withRipple: true\n }, {\n text: 'ChatList.Filter.Contacts',\n icon: 'newprivate',\n name: 'contacts'\n }, {\n text: 'ChatList.Filter.NonContacts',\n icon: 'noncontacts',\n name: 'non_contacts'\n }, {\n text: 'ChatList.Filter.Groups',\n icon: 'group',\n name: 'groups'\n }, {\n text: 'ChatList.Filter.Channels',\n icon: 'channel',\n name: 'broadcasts'\n }, {\n text: 'ChatList.Filter.Bots',\n icon: 'bots',\n name: 'bots'\n }], this.flags, 'FilterIncludeInfo');\n\n this.excludePeerIds = generateList('folder-list-excluded', 'FilterExclude', this.excludePeerIdsButtons = [{\n icon: 'minus',\n text: 'FilterRemoveChats',\n withRipple: true\n }, {\n text: 'ChatList.Filter.MutedChats',\n icon: 'mute',\n name: 'exclude_muted'\n }, {\n text: 'ChatList.Filter.Archive',\n icon: 'archive',\n name: 'exclude_archived'\n }, {\n text: 'ChatList.Filter.ReadChats',\n icon: 'readchats',\n name: 'exclude_read'\n }], this.flags, 'FilterExcludeInfo');\n\n this.inviteLinks = generateList('folder-list-links', 'InviteLinks', [{\n icon: 'add',\n text: 'SharedFolder.CreateLink',\n withRipple: true\n }], {}, 'SharedFolder.Description');\n\n this.scrollable.append(\n this.stickerContainer,\n this.caption,\n inputSection.container,\n this.includePeerIds.container,\n this.excludePeerIds.container,\n this.inviteLinks.container\n );\n\n this.toggleExcludedPeers();\n const includedFlagsContainer = this.includePeerIds.container.querySelector('.folder-categories');\n const excludedFlagsContainer = this.excludePeerIds.container.querySelector('.folder-categories');\n this.inviteLinksCreate = this.inviteLinks.container.querySelector('.btn') as HTMLElement;\n\n attachClickEvent(includedFlagsContainer.querySelector('.btn') as HTMLElement, () => {\n this.slider.createTab(AppIncludedChatsTab).open(this.filter, 'included', this);\n }, {listenerSetter: this.listenerSetter});\n\n attachClickEvent(excludedFlagsContainer.querySelector('.btn') as HTMLElement, () => {\n this.slider.createTab(AppIncludedChatsTab).open(this.filter, 'excluded', this);\n }, {listenerSetter: this.listenerSetter});\n\n const confirmEditing = (closeAfter?: boolean) => {\n if(this.nameInputField.input.classList.contains('error')) {\n return;\n }\n\n if(!this.nameInputField.value.trim()) {\n this.nameInputField.input.classList.add('error');\n return;\n }\n\n let include = (Array.from(includedFlagsContainer.children) as HTMLElement[]).slice(1).reduce((acc, el) => acc + +!el.style.display, 0);\n include += this.filter.include_peers.length;\n\n if(!include) {\n toastNew({langPackKey: 'EditFolder.Toast.ChooseChat'});\n return;\n }\n\n this.confirmBtn.setAttribute('disabled', 'true');\n\n let promise: Promise;\n if(!this.filter.id) {\n promise = this.managers.filtersStorage.createDialogFilter(this.filter);\n } else {\n if(closeAfter) {\n postponeFilterUpdate = true;\n }\n\n promise = this.managers.filtersStorage.updateDialogFilter(this.filter);\n }\n\n return promise.then((dialogFilter) => {\n if(closeAfter) {\n this.close();\n }\n\n return dialogFilter;\n }).catch((err: ApiError) => {\n postponeFilterUpdate = false;\n if(postponedFilterUpdate) {\n this.updateFilter(postponedFilterUpdate);\n postponedFilterUpdate = undefined;\n }\n\n if(err.type === 'DIALOG_FILTERS_TOO_MUCH') {\n showLimitPopup('folders');\n } else {\n console.error('updateDialogFilter error:', err);\n }\n\n throw err;\n }).finally(() => {\n this.confirmBtn.removeAttribute('disabled');\n });\n };\n\n attachClickEvent(this.confirmBtn, () => {\n confirmEditing(true);\n }, {listenerSetter: this.listenerSetter});\n\n let postponedFilterUpdate: DialogFilter.dialogFilterChatlist | DialogFilter.dialogFilter;\n let postponeFilterUpdate = false;\n\n this.listenerSetter.add(rootScope)('filter_update', (filter) => {\n if(this.filter.id === filter.id) {\n if(postponeFilterUpdate) {\n postponedFilterUpdate = filter;\n } else {\n this.updateFilter(filter);\n }\n }\n });\n\n this.listenerSetter.add(this.nameInputField.input)('input', () => {\n this.filter.title = this.nameInputField.value;\n this.editCheckForChange();\n });\n\n const reloadMissingPromises: Promise[] = this.type === 'edit' ? [\n this.managers.filtersStorage.reloadMissingPeerIds(this.filter.id, 'pinned_peers'),\n this.managers.filtersStorage.reloadMissingPeerIds(this.filter.id, 'include_peers'),\n this.managers.filtersStorage.reloadMissingPeerIds(this.filter.id, 'exclude_peers')\n ] : [];\n\n return Promise.all([\n this.managers.apiManager.getLimit('chatlistInvites'),\n this.managers.apiManager.getLimit('chatlistInvites', true),\n\n this.loadAnimationPromise = p.animationData.then(async(cb) => {\n const player = await cb({\n container: this.stickerContainer,\n loop: false,\n autoplay: false,\n width: 86,\n height: 86\n });\n\n this.animation = player;\n\n return lottieLoader.waitForFirstFrame(player);\n }),\n\n ...reloadMissingPromises\n ]).then(([chatlistInvitesLimit, chatlistInvitesPremiumLimit]) => {\n if(this.type === 'edit') {\n this.setFilter(this.originalFilter, true);\n this.onEditOpen();\n } else {\n this.setInitFilter();\n this.onCreateOpen();\n }\n\n this.managers.filtersStorage.getExportedInvites(this.filter.id).catch((err: ApiError) => {\n if(err.type === 'FILTER_NOT_SUPPORTED') {\n return [] as ExportedChatlistInvite[];\n }\n\n throw err;\n }).then((chatlistInvites) => {\n console.log(chatlistInvites);\n\n const CLASS_NAME = 'usernames';\n\n const content = this.inviteLinks.generateContentElement();\n const map: Map = new Map();\n const invitesMap: Map = new Map();\n\n const onLinksLengthChange = () => {\n this.inviteLinksCreate.classList.toggle('hide', map.size >= chatlistInvitesPremiumLimit);\n };\n\n const onLinkDeletion = (link: ExportedChatlistInvite) => {\n const row = invitesMap.get(link.url);\n if(row) {\n row.container.remove();\n invitesMap.delete(link.url);\n map.delete(row.container);\n onLinksLengthChange();\n }\n };\n\n const updateLink = (row: Row, chatlistInvite: ExportedChatlistInvite) => {\n const title = chatlistInvite.title && chatlistInvite.title !== this.filter.title ?\n wrapEmojiText(chatlistInvite.title) :\n chatlistInvite.url.replace(/(.+?):\\/\\//, '');\n const subtitle = i18n('SharedFolder.Includes', [i18n('Chats', [chatlistInvite.peers.length])]);\n row.title.replaceChildren(title);\n row.subtitle.replaceChildren(subtitle);\n };\n\n const wrapLink = (chatlistInvite: ExportedChatlistInvite) => {\n const row = new Row({\n title: true,\n subtitle: true,\n clickable: true\n });\n\n updateLink(row, chatlistInvite);\n\n row.container.classList.add(CLASS_NAME + '-username', 'active');\n const media = row.createMedia('medium');\n media.classList.add(CLASS_NAME + '-username-icon');\n media.append(Icon('link'));\n\n content.append(row.container);\n map.set(row.container, chatlistInvite);\n invitesMap.set(chatlistInvite.url, row);\n onLinksLengthChange();\n };\n\n let target: HTMLElement;\n createContextMenu({\n buttons: [{\n icon: 'copy',\n text: 'CopyLink',\n onClick: () => copyTextToClipboard(map.get(target).url)\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'Delete',\n onClick: () => {\n const chatlistInvite = map.get(target);\n this.managers.filtersStorage.deleteExportedInvite(\n this.filter.id,\n chatlistInvite.url\n ).then(() => {\n onLinkDeletion(chatlistInvite);\n });\n }\n }],\n listenTo: content,\n listenerSetter: this.listenerSetter,\n findElement: (e) => findUpClassName(e.target, 'row'),\n onOpen: (e, _target) => target = _target\n });\n\n attachClickEvent(this.inviteLinksCreate, async() => {\n if(map.size >= chatlistInvitesLimit) {\n showLimitPopup('chatlistInvites');\n return;\n }\n\n if(!this.filter.title) {\n toastNew({langPackKey: 'SharedFolder.Toast.NeedName'});\n return;\n }\n\n const pFlags = (this.filter as DialogFilter.dialogFilter).pFlags;\n if(pFlags) {\n const found = [this.includePeerIdsButtons, this.excludePeerIdsButtons].some((buttons) => {\n return buttons.some((button) => !!pFlags[button.name]);\n });\n\n if(found) {\n toastNew({langPackKey: 'SharedFolder.Toast.NoTypes'});\n return;\n }\n }\n\n if((this.filter as DialogFilter.dialogFilter).excludePeerIds?.length) {\n toastNew({langPackKey: 'SharedFolder.Toast.NoExcluded'});\n return;\n }\n\n const toggle = toggleDisability([this.inviteLinksCreate], true);\n try {\n const result = confirmEditing(false);\n if(!(result instanceof Promise)) {\n throw '';\n }\n\n const filter = await result as DialogFilter.dialogFilter;\n this.updateFilter(filter);\n this.type = 'edit';\n this.originalFilter = filter;\n this.editCheckForChange();\n } catch(err) {\n toggle();\n return;\n }\n\n this.managers.filtersStorage.exportChatlistInvite({\n ...this.filter,\n _: 'dialogFilterChatlist',\n ...({pFlags: this.filter._ === 'dialogFilter' ? {has_my_invites: true} : this.filter.pFlags})\n }).then((exportedChatlistInvite) => {\n toggle();\n openChatlistInvite(exportedChatlistInvite.invite).finally(() => {\n wrapLink(exportedChatlistInvite.invite);\n });\n }, (err: ApiError) => {\n toggle();\n if(err.type === 'INVITES_TOO_MUCH' || err.type === 'FILTERS_TOO_MUCH' || err.type === 'CHATLISTS_TOO_MUCH') {\n showLimitPopup('chatlistInvites');\n return;\n } else if(err.type === 'PEERS_LIST_EMPTY' || err.type === 'CHAT_ADMIN_REQUIRED') {\n openChatlistInvite();\n return;\n }\n\n throw err;\n });\n }, {listenerSetter: this.listenerSetter});\n\n const openChatlistInvite = (chatlistInvite?: ExportedChatlistInvite) => {\n const row = invitesMap.get(chatlistInvite?.url);\n const tab = this.slider.createTab(AppSharedFolderTab);\n tab.filter = this.filter as DialogFilter.dialogFilterChatlist;\n tab.chatlistInvite = chatlistInvite;\n tab.eventListener.addEventListener('delete', () => {\n onLinkDeletion(chatlistInvite);\n });\n tab.eventListener.addEventListener('edit', (chatlistInvite) => {\n map.set(row.container, chatlistInvite);\n updateLink(row, chatlistInvite);\n });\n\n return tab.open();\n };\n\n attachClickEvent(content, (e) => {\n const target = findUpClassName(e.target, 'row');\n const chatlistInvite = map.get(target as HTMLElement);\n if(!chatlistInvite) {\n return;\n }\n\n openChatlistInvite(chatlistInvite);\n }, {listenerSetter: this.listenerSetter});\n\n chatlistInvites.forEach(wrapLink);\n });\n });\n }\n\n onOpenAfterTimeout() {\n this.loadAnimationPromise.then(() => {\n this.animation.autoplay = true;\n this.animation.play();\n });\n }\n\n private onCreateOpen() {\n // this.caption.style.display = '';\n this.setTitle('FilterNew');\n this.menuBtn.classList.add('hide');\n this.confirmBtn.classList.remove('hide');\n\n for(const flag in this.flags) {\n // @ts-ignore\n this.flags[flag].style.display = 'none';\n }\n }\n\n private onEditOpen() {\n const tempId = ++this.tempId;\n this.setTitle(this.type === 'create' ? 'FilterNew' : 'FilterHeaderEdit');\n\n if(this.type === 'edit') {\n this.menuBtn.classList.remove('hide');\n this.confirmBtn.classList.add('hide');\n }\n\n const filter = this.filter;\n this.nameInputField.value = wrapDraftText(filter.title);\n\n const pFlags = (filter as DialogFilter.dialogFilter).pFlags;\n for(const flag in this.flags) {\n const good = !!pFlags?.[flag as keyof AppEditFolderTab['flags']];\n this.flags[flag as keyof AppEditFolderTab['flags']].style.display = good ? '' : 'none';\n }\n\n const promises = [\n 'includePeerIds' as const,\n 'excludePeerIds' as const\n ].map(async(key) => {\n let peers = (filter as DialogFilter.dialogFilter)[key];\n if(!peers) {\n return;\n }\n\n const section = this[key];\n const ul = appDialogsManager.createChatList({ignoreClick: true});\n\n // filter peers where we're kicked\n const hasPeer = async(peerId: PeerId) => {\n return !!(await this.managers.appMessagesManager.getDialogOnly(peerId)) || (peerId.isUser() ? (await this.managers.appUsersManager.getUser(peerId.toUserId()))._ === 'user' : false);\n };\n\n const filtered = await filterAsync(peers, (peerId) => hasPeer(peerId));\n peers.length = 0;\n peers.push(...filtered);\n\n peers = peers.slice();\n\n const renderMore = async(_length: number) => {\n const peerIds = peers.splice(0, _length);\n const filtered = await filterAsync(peerIds, async(peerId) => {\n return peerId.isUser() ? true : !!await this.managers.appMessagesManager.getDialogOnly(peerId);\n });\n\n if(tempId !== this.tempId) return;\n\n const loadPromises: Promise[] = [];\n const containers = filtered.map((peerId) => {\n const dialogElement = appDialogsManager.addDialogNew({\n peerId,\n rippleEnabled: false,\n meAsSaved: true,\n avatarSize: 'small',\n loadPromises,\n autonomous: true,\n wrapOptions: {\n middleware: this.middlewareHelper.get()\n }\n });\n (dialogElement.container as any).dialogElement = dialogElement;\n const {dom} = dialogElement;\n dom.lastMessageSpan.parentElement.remove();\n return dom.containerEl;\n });\n\n await Promise.all(loadPromises);\n if(tempId !== this.tempId) return;\n ul.append(...containers);\n\n if(showMore) {\n if(peers.length) {\n showMore.lastElementChild.replaceWith(i18n('FilterShowMoreChats', [peers.length]));\n showMore.classList.remove('hide');\n } else {\n showMore.remove();\n }\n }\n };\n\n let showMore: HTMLElement;\n if(peers.length && !this.showMoreClicked[key]) {\n showMore = Button('folder-category-button btn btn-primary btn-transparent hide', {icon: 'down'});\n showMore.classList.add('load-more', 'rp-overflow');\n attachClickEvent(showMore, () => {\n this.showMoreClicked[key] = true;\n renderMore(Infinity);\n }, {listenerSetter: this.listenerSetter});\n showMore.append(i18n('FilterShowMoreChats', [peers.length]));\n }\n\n return renderMore(this.showMoreClicked[key] ? Infinity : 4).then(() => {\n if(tempId !== this.tempId) return;\n\n return () => {\n section.generateContentElement().append(ul);\n\n if(showMore && peers.length) {\n const content = section.generateContentElement();\n content.append(showMore);\n }\n };\n });\n });\n\n return Promise.all(promises).then((callbacks) => {\n if(tempId !== this.tempId) return;\n\n this.toggleExcludedPeers();\n\n if(this.container) {\n // cleanup\n Array.from(this.container.querySelectorAll('.chatlist, .load-more')).forEach((el) => el.parentElement.remove());\n }\n\n callbacks.forEach((callback) => callback?.());\n });\n }\n\n editCheckForChange() {\n if(this.type === 'edit') {\n const changed = !deepEqual(\n {...this.originalFilter, updatedTime: 0, localId: 0},\n {...this.filter, updatedTime: 0, localId: 0}\n );\n this.confirmBtn.classList.toggle('hide', !changed);\n this.menuBtn.classList.toggle('hide', changed);\n }\n };\n\n setFilter(filter: MyDialogFilter, firstTime: boolean) {\n if(firstTime) {\n this.originalFilter = filter;\n this.filter = copy(filter);\n } else {\n this.filter = filter;\n this.onEditOpen();\n this.editCheckForChange();\n }\n }\n\n public setInitFilter(filter?: MyDialogFilter) {\n if(filter === undefined) {\n this.setFilter({\n _: 'dialogFilter',\n id: 0,\n title: '',\n pFlags: {},\n pinned_peers: [],\n include_peers: [],\n exclude_peers: [],\n pinnedPeerIds: [],\n includePeerIds: [],\n excludePeerIds: []\n }, true);\n this.type = 'create';\n } else {\n this.setFilter(filter, true);\n this.type = 'edit';\n }\n }\n\n private toggleExcludedPeers() {\n this.excludePeerIds.container.classList.toggle('hide', this.filter?._ === 'dialogFilterChatlist');\n }\n\n private updateFilter(filter: DialogFilter.dialogFilterChatlist | DialogFilter.dialogFilter) {\n this.setFilter(filter, false);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../../../lib/storages/filters';\nimport type {DialogFilter, DialogFilterSuggested} from '../../../layer';\nimport type _rootScope from '../../../lib/rootScope';\nimport {SliderSuperTab} from '../../slider';\nimport lottieLoader, {LottieLoader} from '../../../lib/rlottie/lottieLoader';\nimport Button from '../../button';\nimport rootScope from '../../../lib/rootScope';\nimport AppEditFolderTab from './editFolder';\nimport Row from '../../row';\nimport {i18n, i18n_, LangPackKey, join} from '../../../lib/langPack';\nimport cancelEvent from '../../../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport positionElementByIndex from '../../../helpers/dom/positionElementByIndex';\nimport RLottiePlayer from '../../../lib/rlottie/rlottiePlayer';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport {FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, REAL_FOLDERS} from '../../../lib/mtproto/mtproto_config';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport SettingSection from '../../settingSection';\nimport Sortable from '../../../helpers/dom/sortable';\nimport whichChild from '../../../helpers/dom/whichChild';\nimport indexOfAndSplice from '../../../helpers/array/indexOfAndSplice';\nimport showLimitPopup from '../../popups/limit';\n\nexport default class AppChatFoldersTab extends SliderSuperTab {\n private createFolderBtn: HTMLElement;\n private foldersSection: SettingSection;\n private suggestedSection: SettingSection;\n private stickerContainer: HTMLElement;\n private animation: RLottiePlayer;\n private list: HTMLElement;\n\n private filtersRendered: {[filterId: number]: Row} = {};\n private loadAnimationPromise: ReturnType;\n\n public static getInitArgs() {\n return {\n animationData: lottieLoader.loadAnimationFromURLManually('Folders_1'),\n filters: rootScope.managers.filtersStorage.getDialogFilters()\n };\n }\n\n private async renderFolder(\n dialogFilter: DialogFilterSuggested | MyDialogFilter,\n container?: HTMLElement,\n row?: Row,\n append?: boolean\n ) {\n let filter: MyDialogFilter;\n let description = '';\n const d: HTMLElement[] = [];\n if(dialogFilter._ === 'dialogFilterSuggested') {\n filter = dialogFilter.filter as MyDialogFilter;\n description = dialogFilter.description;\n } else {\n filter = dialogFilter;\n\n const pFlags = (filter as DialogFilter.dialogFilter).pFlags || {};\n const enabledFilters = Object.keys(pFlags).length;\n /* (['include_peers', 'exclude_peers'] as ['include_peers', 'exclude_peers']).forEach((key) => {\n enabledFilters += +!!filter[key].length;\n }); */\n\n if(enabledFilters === 1) {\n let k: LangPackKey;\n if(pFlags.contacts) k = 'FilterAllContacts';\n else if(pFlags.non_contacts) k = 'FilterAllNonContacts';\n else if(pFlags.groups) k = 'FilterAllGroups';\n else if(pFlags.broadcasts) k = 'FilterAllChannels';\n else if(pFlags.bots) k = 'FilterAllBots';\n\n if(k) {\n d.push(i18n(k));\n }\n }\n\n if(!d.length) {\n const folder = await this.managers.dialogsStorage.getFolderDialogs(filter.id);\n let chats = 0, channels = 0, groups = 0;\n await Promise.all(folder.map(async(dialog) => {\n if(await this.managers.appPeersManager.isAnyGroup(dialog.peerId)) ++groups;\n else if(await this.managers.appPeersManager.isBroadcast(dialog.peerId)) ++channels;\n else ++chats;\n }));\n\n if(chats) d.push(i18n('Chats', [chats]));\n if(channels) d.push(i18n('Channels', [channels]));\n if(groups) d.push(i18n('Groups', [groups]));\n }\n }\n\n if(!row) {\n const isSuggested = dialogFilter._ === 'dialogFilterSuggested';\n row = new Row({\n title: filter.id === FOLDER_ID_ALL && !isSuggested ? i18n('FilterAllChats') : wrapEmojiText(filter.title),\n subtitle: description,\n clickable: true,\n buttonRightLangKey: isSuggested ? 'Add' : undefined\n });\n\n if(d.length) {\n row.subtitle.append(...join(d));\n }\n\n if(!isSuggested) {\n const filterId = filter.id;\n if(!this.filtersRendered[filter.id] && filter.id !== FOLDER_ID_ALL) {\n const initArgs = AppEditFolderTab.getInitArgs();\n attachClickEvent(row.container, async() => {\n const filter = await this.managers.filtersStorage.getFilter(filterId);\n const tab = this.slider.createTab(AppEditFolderTab);\n tab.setInitFilter(filter);\n tab.open(initArgs);\n }, {listenerSetter: this.listenerSetter});\n }\n\n this.filtersRendered[filter.id] = row;\n\n row.makeSortable();\n }\n } else {\n if(filter.id !== FOLDER_ID_ALL) {\n replaceContent(row.title, wrapEmojiText(filter.title));\n }\n\n row.subtitle.textContent = '';\n row.subtitle.append(...join(d));\n }\n\n const div = row.container;\n\n if(append) {\n const localId = (filter as MyDialogFilter).localId;\n if(localId !== undefined) {\n // ! header will be at 0 index\n positionElementByIndex(div, div.parentElement || container, localId);\n } else if(container) {\n container.append(div);\n }\n }\n\n return row;\n }\n\n public init(p: ReturnType = AppChatFoldersTab.getInitArgs()) {\n this.container.classList.add('chat-folders-container');\n this.setTitle('ChatList.Filter.List.Title');\n\n this.scrollable.container.classList.add('chat-folders');\n\n this.stickerContainer = document.createElement('div');\n this.stickerContainer.classList.add('sticker-container');\n\n const caption = document.createElement('div');\n caption.classList.add('caption');\n i18n_({element: caption, key: 'ChatList.Filter.Header'});\n\n this.createFolderBtn = Button('btn-primary btn-color-primary btn-control', {\n text: 'ChatList.Filter.NewTitle',\n icon: 'add'\n });\n\n this.foldersSection = new SettingSection({\n name: 'Filters'\n });\n this.foldersSection.container.classList.add('hide');\n\n this.list = document.createElement('div');\n this.foldersSection.content.append(this.list);\n\n this.suggestedSection = new SettingSection({\n name: 'FilterRecommended'\n });\n this.suggestedSection.container.classList.add('hide');\n\n this.scrollable.append(\n this.stickerContainer,\n caption,\n this.createFolderBtn,\n this.foldersSection.container,\n this.suggestedSection.container\n );\n\n attachClickEvent(this.createFolderBtn, async() => {\n if(!(await this.canCreateFolder())) {\n showLimitPopup('folders');\n } else {\n this.slider.createTab(AppEditFolderTab).open();\n }\n }, {listenerSetter: this.listenerSetter});\n\n const onFiltersContainerUpdate = () => {\n this.foldersSection.container.classList.toggle('hide', !Object.keys(this.filtersRendered).length);\n };\n\n const loadPromises: Promise[] = [];\n const renderFiltersPromise = p.filters.then(async(filters) => {\n for(const filter of filters) {\n if(filter.id === FOLDER_ID_ARCHIVE) {\n continue;\n }\n\n await this.renderFolder(filter, this.list, undefined, true);\n }\n\n this.toggleAllChats();\n\n onFiltersContainerUpdate();\n });\n\n loadPromises.push(renderFiltersPromise);\n\n this.listenerSetter.add(rootScope)('filter_update', async(filter) => {\n const filterRendered = this.filtersRendered[filter.id];\n if(filterRendered) {\n await this.renderFolder(filter, null, filterRendered);\n } else if(filter.id !== FOLDER_ID_ARCHIVE) {\n await this.renderFolder(filter, this.list, undefined, true);\n }\n\n onFiltersContainerUpdate();\n\n this.getSuggestedFilters();\n });\n\n this.listenerSetter.add(rootScope)('filter_delete', (filter) => {\n const filterRendered = this.filtersRendered[filter.id];\n if(filterRendered) {\n /* for(const suggested of this.suggestedFilters) {\n if(deepEqual(suggested.filter, filter)) {\n\n }\n } */\n this.getSuggestedFilters();\n\n filterRendered.container.remove();\n delete this.filtersRendered[filter.id];\n }\n\n onFiltersContainerUpdate();\n });\n\n this.listenerSetter.add(rootScope)('filter_order', (order) => {\n order.filter((filterId) => !!this.filtersRendered[filterId]).forEach((filterId, idx) => {\n const filterRendered = this.filtersRendered[filterId];\n const container = filterRendered.container;\n positionElementByIndex(container, container.parentElement, idx + 1); // ! + 1 due to header\n });\n });\n\n this.listenerSetter.add(rootScope)('premium_toggle', () => {\n this.toggleAllChats();\n });\n\n this.loadAnimationPromise = p.animationData.then(async(cb) => {\n const player = await cb({\n container: this.stickerContainer,\n loop: false,\n autoplay: false,\n width: 86,\n height: 86\n });\n\n this.animation = player;\n\n return lottieLoader.waitForFirstFrame(player);\n });\n\n loadPromises.push(this.loadAnimationPromise);\n\n new Sortable({\n list: this.list,\n middleware: this.middlewareHelper.get(),\n onSort: (prevIdx, newIdx) => {\n let order: number[] = [];\n for(const filterId in this.filtersRendered) {\n const row = this.filtersRendered[filterId];\n const idx = whichChild(row.container);\n order[idx] = +filterId;\n }\n\n order = order.filter((filterId) => filterId !== undefined);\n if(!rootScope.premium) {\n indexOfAndSplice(order, FOLDER_ID_ALL);\n // order.unshift(FOLDER_ID_ALL);\n }\n\n this.managers.filtersStorage.updateDialogFiltersOrder(order);\n },\n scrollable: this.scrollable\n });\n\n this.getSuggestedFilters();\n\n /* return Promise.all([\n this.loadAnimationPromise\n ]); */\n return Promise.all(loadPromises);\n }\n\n onOpenAfterTimeout() {\n this.loadAnimationPromise.then(() => {\n this.animation.autoplay = true;\n this.animation.play();\n });\n\n return super.onOpenAfterTimeout();\n }\n\n private toggleAllChats() {\n const filterRendered = this.filtersRendered[FOLDER_ID_ALL];\n filterRendered.container.classList.toggle('hide', !rootScope.premium);\n }\n\n private async canCreateFolder() {\n const [limit, filters] = await Promise.all([\n this.managers.apiManager.getLimit('folders'),\n this.managers.filtersStorage.getDialogFilters()\n ]);\n\n const filtersLength = filters.filter((filter) => !REAL_FOLDERS.has(filter.id)).length;\n return filtersLength < limit;\n }\n\n private getSuggestedFilters() {\n return this.managers.filtersStorage.getSuggestedDialogsFilters().then(async(suggestedFilters) => {\n this.suggestedSection.container.classList.toggle('hide', !suggestedFilters.length);\n Array.from(this.suggestedSection.content.children).slice(1).forEach((el) => el.remove());\n\n for(const filter of suggestedFilters) {\n const row = await this.renderFolder(filter);\n this.suggestedSection.content.append(row.container);\n\n const button = row.buttonRight;\n attachClickEvent(button, async(e) => {\n cancelEvent(e);\n\n if(!(await this.canCreateFolder())) {\n showLimitPopup('folders');\n return;\n }\n\n button.setAttribute('disabled', 'true');\n\n const f = filter.filter as DialogFilter.dialogFilter;\n f.includePeerIds = [];\n f.excludePeerIds = [];\n f.pinnedPeerIds = [];\n\n this.managers.filtersStorage.createDialogFilter(f, true).then(() => {\n row.container.remove();\n this.suggestedSection.container.classList.toggle('hide', this.suggestedSection.content.childElementCount === 1);\n }).finally(() => {\n button.removeAttribute('disabled');\n });\n }, {listenerSetter: this.listenerSetter});\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Row from '../../row';\nimport CheckboxField from '../../checkboxField';\nimport {InputNotifyPeer, InputPeerNotifySettings, Update} from '../../../layer';\nimport {SliderSuperTabEventable} from '../../sliderTab';\nimport rootScope from '../../../lib/rootScope';\nimport {LangPackKey} from '../../../lib/langPack';\nimport copy from '../../../helpers/object/copy';\nimport convertKeyToInputKey from '../../../helpers/string/convertKeyToInputKey';\nimport {MUTE_UNTIL} from '../../../lib/mtproto/mtproto_config';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport SettingSection from '../../settingSection';\nimport {joinDeepPath} from '../../../helpers/object/setDeepProperty';\n\ntype InputNotifyKey = Exclude;\n\nexport default class AppNotificationsTab extends SliderSuperTabEventable {\n public init() {\n this.container.classList.add('notifications-container');\n this.setTitle('Telegram.NotificationSettingsViewController');\n\n const NotifySection = (options: {\n name: LangPackKey,\n typeText: LangPackKey,\n inputKey: InputNotifyKey,\n }) => {\n const section = new SettingSection({\n name: options.name\n });\n\n const enabledRow = new Row({\n checkboxField: new CheckboxField({text: options.typeText, checked: true}),\n subtitleLangKey: 'Loading',\n listenerSetter: this.listenerSetter,\n withCheckboxSubtitle: true\n });\n\n const previewEnabledRow = new Row({\n checkboxField: new CheckboxField({text: 'MessagePreview', checked: true}),\n subtitleLangKey: 'Loading',\n listenerSetter: this.listenerSetter,\n withCheckboxSubtitle: true\n });\n\n section.content.append(enabledRow.container, previewEnabledRow.container);\n\n this.scrollable.append(section.container);\n\n const inputNotifyPeer = {_: options.inputKey};\n const ret = this.managers.appNotificationsManager.getNotifySettings(inputNotifyPeer);\n (ret instanceof Promise ? ret : Promise.resolve(ret)).then((notifySettings) => {\n const applySettings = async() => {\n const muted = await this.managers.appNotificationsManager.isMuted(notifySettings);\n enabledRow.checkboxField.checked = !muted;\n previewEnabledRow.checkboxField.checked = notifySettings.show_previews;\n\n return muted;\n };\n\n applySettings();\n\n this.eventListener.addEventListener('destroy', async() => {\n const mute = !enabledRow.checkboxField.checked;\n const showPreviews = previewEnabledRow.checkboxField.checked;\n\n if(mute === (await this.managers.appNotificationsManager.isMuted(notifySettings)) && showPreviews === notifySettings.show_previews) {\n return;\n }\n\n const inputSettings: InputPeerNotifySettings = copy(notifySettings) as any;\n inputSettings._ = 'inputPeerNotifySettings';\n inputSettings.mute_until = mute ? MUTE_UNTIL : 0;\n inputSettings.show_previews = showPreviews;\n\n this.managers.appNotificationsManager.updateNotifySettings(inputNotifyPeer, inputSettings);\n }, {once: true});\n\n this.listenerSetter.add(rootScope)('notify_settings', (update: Update.updateNotifySettings) => {\n const inputKey = convertKeyToInputKey(update.peer._) as any;\n if(options.inputKey === inputKey) {\n notifySettings = update.notify_settings;\n applySettings();\n }\n });\n });\n };\n\n NotifySection({\n name: 'NotificationsPrivateChats',\n typeText: 'NotificationsForPrivateChats',\n inputKey: 'inputNotifyUsers'\n });\n\n NotifySection({\n name: 'NotificationsGroups',\n typeText: 'NotificationsForGroups',\n inputKey: 'inputNotifyChats'\n });\n\n NotifySection({\n name: 'NotificationsChannels',\n typeText: 'NotificationsForChannels',\n inputKey: 'inputNotifyBroadcasts'\n });\n\n {\n const section = new SettingSection({\n name: 'NotificationsOther'\n });\n\n const contactsSignUpRow = new Row({\n checkboxField: new CheckboxField({text: 'ContactJoined', checked: true}),\n subtitleLangKey: 'Loading',\n listenerSetter: this.listenerSetter,\n withCheckboxSubtitle: true\n });\n\n const soundRow = new Row({\n checkboxField: new CheckboxField({\n text: 'Notifications.Sound',\n checked: true,\n stateKey: joinDeepPath('settings', 'notifications', 'sound'),\n listenerSetter: this.listenerSetter\n }),\n subtitleLangKey: 'Loading',\n listenerSetter: this.listenerSetter,\n withCheckboxSubtitle: true\n });\n\n apiManagerProxy.getState().then((state) => {\n soundRow.checkboxField.checked = state.settings.notifications.sound;\n });\n\n section.content.append(contactsSignUpRow.container, soundRow.container);\n\n this.scrollable.append(section.container);\n\n this.managers.appNotificationsManager.getContactSignUpNotification().then((enabled) => {\n contactsSignUpRow.checkboxField.checked = enabled;\n\n this.eventListener.addEventListener('destroy', () => {\n const _enabled = contactsSignUpRow.checkboxField.checked;\n if(enabled !== _enabled) {\n this.managers.appNotificationsManager.setContactSignUpNotification(!_enabled);\n }\n }, {once: true});\n });\n }\n }\n}\n","import {createEffect, createSignal, JSX, Signal, untrack} from 'solid-js';\nimport {subscribeOn} from '../helpers/solid/subscribeOn';\nimport CheckboxField from './checkboxField';\n\nexport default function CheckboxFieldTsx(props: {\n signal?: Signal,\n checked?: boolean,\n toggle?: boolean,\n onChange?: (checked: boolean) => void\n}): JSX.Element {\n const [checked, setChecked] = props.signal ?? createSignal(props.checked);\n\n const checkboxField = new CheckboxField({\n toggle: props.toggle\n });\n\n let first = true;\n createEffect(() => {\n checkboxField.setValueSilently(checked());\n\n if(!first && props.onChange) {\n untrack(() => props.onChange(checked()));\n }\n first = false;\n });\n\n subscribeOn(checkboxField.input)('change', () => {\n setChecked(checkboxField.input.checked);\n });\n\n return checkboxField.label;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {createMemo, createRoot, createSignal} from 'solid-js';\nimport anchorCallback from '../../../helpers/dom/anchorCallback';\nimport {randomLong} from '../../../helpers/random';\nimport {LangPackLanguage} from '../../../layer';\nimport I18n, {i18n, join} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport {useAppState} from '../../../stores/appState';\nimport usePremium from '../../../stores/premium';\nimport {pickLanguage} from '../../chat/translation';\nimport CheckboxFieldTsx from '../../checkboxFieldTsx';\nimport PopupPremium from '../../popups/premium';\nimport RadioField from '../../radioField';\nimport Row, {RadioFormFromRows} from '../../row';\nimport RowTsx from '../../rowTsx';\nimport Section from '../../section';\nimport SettingSection from '../../settingSection';\nimport {SliderSuperTab} from '../../slider'\n\nexport default class AppLanguageTab extends SliderSuperTab {\n public static getInitArgs() {\n return {\n languages1: rootScope.managers.apiManager.invokeApiCacheable('langpack.getLanguages', {\n lang_pack: 'web'\n }),\n // languages2: rootScope.managers.apiManager.invokeApiCacheable('langpack.getLanguages', {\n // lang_pack: 'macos'\n // })\n languages2: Promise.resolve([] as LangPackLanguage[])\n };\n }\n\n public init(p: ReturnType) {\n this.header.classList.add('with-border');\n this.container.classList.add('language-container');\n this.setTitle('Telegram.LanguageViewController');\n\n const section1 = createRoot((dispose) => {\n this.middlewareHelper.get().onDestroy(dispose);\n\n const [appState, setAppState] = useAppState();\n const isPremium = usePremium();\n const doNotTranslate = createMemo(() => {\n const arr = appState.translations.doNotTranslate;\n if(!arr.length) {\n return [I18n.langCodeNormalized()];\n }\n\n return arr;\n });\n\n let container: HTMLDivElement;\n (\n {\n PopupPremium.show({feature: 'translations'});\n })]}\n >\n {\n setAppState('translations', 'showInMenu', checked);\n }}\n />\n }\n />\n {\n setAppState('translations', 'enabled', checked);\n }}\n />\n }\n fakeDisabled={!isPremium()}\n clickable={(e) => {\n if(!isPremium()) {\n e.preventDefault();\n PopupPremium.show({feature: 'translations'});\n }\n }}\n />\n {appState.translations.enabled && ( i18n(`Language.${lang}`)), false) :\n i18n('Languages', [doNotTranslate().length])\n }\n titleRightSecondary\n clickable={async() => {\n const languages = await pickLanguage(true, doNotTranslate());\n setAppState('translations', 'doNotTranslate', languages);\n }}\n />)}\n \n );\n\n return container;\n });\n\n const section = new SettingSection({});\n\n const radioRows: Map = new Map();\n\n const promise = Promise.all([\n p.languages1,\n p.languages2\n ]).then(([languages1, languages2]) => {\n const rendered: Set = new Set();\n const webLangCodes = languages1.map((language) => language.lang_code);\n\n const random = randomLong();\n languages1.concat(languages2).forEach((language) => {\n if(rendered.has(language.lang_code)) return;\n rendered.add(language.lang_code);\n\n const row = new Row({\n radioField: new RadioField({\n text: language.name,\n name: random,\n value: language.lang_code\n }),\n subtitle: language.native_name\n });\n\n radioRows.set(language.lang_code, row);\n });\n\n const form = RadioFormFromRows([...radioRows.values()], (value) => {\n I18n.getLangPack(value, webLangCodes.includes(value));\n });\n\n I18n.getCacheLangPack().then((langPack) => {\n const row = radioRows.get(langPack.lang_code);\n if(!row) {\n console.error('no row', row, langPack);\n return;\n }\n\n row.radioField.setValueSilently(true);\n });\n\n section.content.append(form);\n });\n\n this.scrollable.append(section1, section.container);\n\n return promise;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type ListenerSetter from '../../../../helpers/listenerSetter';\nimport {LangPackKey} from '../../../../lib/langPack';\nimport CheckboxField from '../../../checkboxField';\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport Row, {CreateRowFromCheckboxField} from '../../../row';\nimport SettingSection from '../../../settingSection';\nimport {joinDeepPath} from '../../../../helpers/object/setDeepProperty';\n\nexport function autoDownloadPeerTypeSection(type: 'photo' | 'video' | 'file', title: LangPackKey, listenerSetter: ListenerSetter) {\n const section = new SettingSection({name: title});\n\n const key = joinDeepPath('settings', 'autoDownload', type);\n const contactsCheckboxField = new CheckboxField({\n text: 'AutodownloadContacts',\n name: 'contacts',\n stateKey: joinDeepPath(key, 'contacts'),\n listenerSetter\n });\n const privateCheckboxField = new CheckboxField({\n text: 'AutodownloadPrivateChats',\n name: 'private',\n stateKey: joinDeepPath(key, 'private'),\n listenerSetter\n });\n const groupsCheckboxField = new CheckboxField({\n text: 'AutodownloadGroupChats',\n name: 'groups',\n stateKey: joinDeepPath(key, 'groups'),\n listenerSetter\n });\n const channelsCheckboxField = new CheckboxField({\n text: 'AutodownloadChannels',\n name: 'channels',\n stateKey: joinDeepPath(key, 'channels'),\n listenerSetter\n });\n\n section.content.append(\n CreateRowFromCheckboxField(contactsCheckboxField).container,\n CreateRowFromCheckboxField(privateCheckboxField).container,\n CreateRowFromCheckboxField(groupsCheckboxField).container,\n CreateRowFromCheckboxField(channelsCheckboxField).container\n );\n\n return section;\n}\n\nexport default class AppAutoDownloadPhotoTab extends SliderSuperTabEventable {\n public init() {\n this.setTitle('AutoDownloadPhotos');\n\n const section = autoDownloadPeerTypeSection('photo', 'AutoDownloadPhotosTitle', this.listenerSetter);\n this.scrollable.append(section.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport formatBytes from '../../../../helpers/formatBytes';\nimport {joinDeepPath} from '../../../../helpers/object/setDeepProperty';\nimport debounce from '../../../../helpers/schedulers/debounce';\nimport I18n from '../../../../lib/langPack';\nimport rootScope from '../../../../lib/rootScope';\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport {RangeSettingSelector} from '../generalSettings';\nimport {autoDownloadPeerTypeSection} from './photo';\n\nexport default class AppAutoDownloadFileTab extends SliderSuperTabEventable {\n public init() {\n this.setTitle('AutoDownloadFiles');\n\n const debouncedSave = debounce((sizeMax: number) => {\n this.managers.appStateManager.setByKey(joinDeepPath('settings', 'autoDownloadNew', 'file_size_max'), sizeMax);\n }, 200, false, true);\n\n const section = autoDownloadPeerTypeSection('file', 'AutoDownloadFilesTitle', this.listenerSetter);\n\n const MIN = 512 * 1024;\n // const MAX = 2 * 1024 * 1024 * 1024;\n const MAX = 20 * 1024 * 1024;\n const MAX_RANGE = MAX - MIN;\n\n const sizeMax = rootScope.settings.autoDownloadNew.file_size_max;\n const value = Math.sqrt(Math.sqrt((sizeMax - MIN) / MAX_RANGE));\n const upTo = new I18n.IntlElement({\n key: 'AutodownloadSizeLimitUpTo',\n args: [formatBytes(sizeMax)]\n });\n const range = new RangeSettingSelector('AutoDownloadMaxFileSize', 0.01, value, 0, 1, false);\n range.onChange = (value) => {\n const sizeMax = (value ** 4 * MAX_RANGE + MIN) | 0;\n\n upTo.compareAndUpdate({args: [formatBytes(sizeMax)]});\n\n debouncedSave(sizeMax);\n };\n\n range.valueContainer.append(upTo.element);\n\n section.content.append(range.container);\n\n this.scrollable.append(section.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTabEventable} from '../../../sliderTab';\nimport {autoDownloadPeerTypeSection} from './photo';\n\nexport default class AppAutoDownloadVideoTab extends SliderSuperTabEventable {\n public init() {\n this.setTitle('AutoDownloadVideos');\n\n const section = autoDownloadPeerTypeSection('video', 'AutoDownloadVideosTitle', this.listenerSetter);\n this.scrollable.append(section.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AutoDownloadPeerTypeSettings, STATE_INIT} from '../../../config/state';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport toggleDisability from '../../../helpers/dom/toggleDisability';\nimport formatBytes from '../../../helpers/formatBytes';\nimport copy from '../../../helpers/object/copy';\nimport deepEqual from '../../../helpers/object/deepEqual';\nimport {FormatterArguments, i18n, join, LangPackKey} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport Button from '../../button';\nimport CheckboxField from '../../checkboxField';\nimport confirmationPopup from '../../confirmationPopup';\nimport Row from '../../row';\nimport {SliderSuperTabEventable, SliderSuperTabEventableConstructable} from '../../sliderTab';\nimport AppAutoDownloadFileTab from './autoDownload/file';\nimport AppAutoDownloadPhotoTab from './autoDownload/photo';\nimport AppAutoDownloadVideoTab from './autoDownload/video';\nimport SettingSection from '../../settingSection';\nimport {joinDeepPath} from '../../../helpers/object/setDeepProperty';\n\nconst AUTO_DOWNLOAD_FOR_KEYS: {[k in keyof AutoDownloadPeerTypeSettings]: LangPackKey} = {\n contacts: 'AutoDownloadContacts',\n private: 'AutoDownloadPm',\n groups: 'AutoDownloadGroups',\n channels: 'AutoDownloadChannels'\n};\n\nexport default class AppDataAndStorageTab extends SliderSuperTabEventable {\n public init() {\n this.setTitle('DataSettings');\n\n {\n const section = new SettingSection({name: 'AutomaticMediaDownload', caption: 'AutoDownloadAudioInfo'});\n\n const autoCheckboxField = new CheckboxField({\n text: 'AutoDownloadMedia',\n name: 'auto',\n checked: !rootScope.settings.autoDownloadNew.pFlags.disabled,\n listenerSetter: this.listenerSetter\n });\n\n const autoRow = new Row({\n checkboxField: autoCheckboxField,\n listenerSetter: this.listenerSetter\n });\n\n const onChange = () => {\n toggleDisability([resetButton],\n deepEqual(rootScope.settings.autoDownload, STATE_INIT.settings.autoDownload) &&\n deepEqual(rootScope.settings.autoDownloadNew, STATE_INIT.settings.autoDownloadNew));\n };\n\n const setSubtitles = () => {\n this.setAutoDownloadSubtitle(photoRow, rootScope.settings.autoDownload.photo /* state.settings.autoDownloadNew.photo_size_max */);\n this.setAutoDownloadSubtitle(videoRow, rootScope.settings.autoDownload.video/* , state.settings.autoDownloadNew.video_size_max */);\n this.setAutoDownloadSubtitle(fileRow, rootScope.settings.autoDownload.file, rootScope.settings.autoDownloadNew.file_size_max);\n };\n\n const openTab = (tabConstructor: SliderSuperTabEventableConstructable) => {\n const tab = this.slider.createTab(tabConstructor);\n tab.open();\n\n this.listenerSetter.add(tab.eventListener)('destroy', () => {\n setSubtitles();\n onChange();\n }, {once: true});\n };\n\n const photoRow = new Row({\n titleLangKey: 'AutoDownloadPhotos',\n subtitle: '',\n clickable: () => {\n openTab(AppAutoDownloadPhotoTab);\n },\n listenerSetter: this.listenerSetter\n });\n\n const videoRow = new Row({\n titleLangKey: 'AutoDownloadVideos',\n subtitle: '',\n clickable: () => {\n openTab(AppAutoDownloadVideoTab);\n },\n listenerSetter: this.listenerSetter\n });\n\n const fileRow = new Row({\n titleLangKey: 'AutoDownloadFiles',\n subtitle: '',\n clickable: () => {\n openTab(AppAutoDownloadFileTab);\n },\n listenerSetter: this.listenerSetter\n });\n\n const resetButton = Button('btn-primary btn-transparent primary', {icon: 'delete', text: 'ResetAutomaticMediaDownload'});\n attachClickEvent(resetButton, () => {\n confirmationPopup({\n titleLangKey: 'ResetAutomaticMediaDownloadAlertTitle',\n descriptionLangKey: 'ResetAutomaticMediaDownloadAlert',\n button: {\n langKey: 'Reset'\n }\n }).then(() => {\n const settings = rootScope.settings;\n settings.autoDownloadNew = copy(STATE_INIT.settings.autoDownloadNew);\n settings.autoDownload = copy(STATE_INIT.settings.autoDownload);\n rootScope.settings = settings;\n this.managers.appStateManager.setByKey('settings', settings);\n\n setSubtitles();\n autoCheckboxField.checked = !rootScope.settings.autoDownloadNew.pFlags.disabled;\n });\n });\n\n const onDisabledChange = () => {\n const disabled = !autoCheckboxField.checked;\n\n const autoDownloadNew = rootScope.settings.autoDownloadNew;\n if(disabled) {\n autoDownloadNew.pFlags.disabled = true;\n } else {\n delete autoDownloadNew.pFlags.disabled;\n }\n\n [photoRow, videoRow, fileRow].forEach((row) => {\n row.container.classList.toggle('is-disabled', disabled);\n });\n\n this.managers.appStateManager.setByKey(joinDeepPath('settings', 'autoDownloadNew'), autoDownloadNew);\n\n onChange();\n };\n\n autoCheckboxField.input.addEventListener('change', onDisabledChange);\n onDisabledChange();\n setSubtitles();\n\n section.content.append(\n autoRow.container,\n photoRow.container,\n videoRow.container,\n fileRow.container,\n resetButton\n );\n\n this.scrollable.append(section.container);\n }\n }\n\n private setAutoDownloadSubtitle(row: Row, settings: AutoDownloadPeerTypeSettings, sizeMax?: number) {\n let key: LangPackKey;\n const args: FormatterArguments = [];\n\n const peerKeys = Object.keys(settings) as (keyof typeof AUTO_DOWNLOAD_FOR_KEYS)[];\n const enabledKeys = peerKeys.map((key) => settings[key] ? AUTO_DOWNLOAD_FOR_KEYS[key] : undefined).filter(Boolean);\n if(!enabledKeys.length || sizeMax === 0) {\n key = 'AutoDownloadOff';\n } else {\n const isAll = enabledKeys.length === peerKeys.length;\n if(sizeMax !== undefined) {\n key = isAll ? 'AutoDownloadUpToOnAllChats' : 'AutoDownloadOnUpToFor';\n args.push(formatBytes(sizeMax));\n } else {\n key = isAll ? 'AutoDownloadOnAllChats' : 'AutoDownloadOnFor';\n }\n\n if(!isAll) {\n const fragment = document.createElement('span');\n fragment.append(...join(enabledKeys.map((key) => i18n(key)), true, false));\n args.push(fragment);\n }\n }\n\n replaceContent(row.subtitle, i18n(key, args));\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AvailableReaction} from '../../../layer';\nimport RadioField from '../../radioField';\nimport Row, {RadioFormFromRows} from '../../row';\nimport SettingSection from '../../settingSection';\nimport SliderSuperTab from '../../sliderTab';\nimport wrapStickerToRow from '../../wrappers/stickerToRow';\n\nexport default class AppQuickReactionTab extends SliderSuperTab {\n public init() {\n this.setTitle('DoubleTapSetting');\n this.container.classList.add('quick-reaction-container');\n\n return Promise.all([\n this.managers.appReactionsManager.getQuickReaction(),\n this.managers.appReactionsManager.getAvailableReactions()\n ]).then(([quickReaction, availableReactions]) => {\n availableReactions = availableReactions.filter((reaction) => !reaction.pFlags.inactive);\n\n const section = new SettingSection();\n\n const name = 'quick-reaction';\n const rows = availableReactions.map((availableReaction) => {\n const radioField = new RadioField({\n name,\n text: availableReaction.title,\n value: availableReaction.reaction,\n alignRight: true\n });\n\n const row = new Row({\n radioField,\n havePadding: true\n });\n\n radioField.main.classList.add('quick-reaction-title');\n\n wrapStickerToRow({\n row,\n doc: availableReaction.static_icon,\n size: 'small'\n });\n\n if(availableReaction.reaction === (quickReaction as AvailableReaction).reaction) {\n radioField.setValueSilently(true);\n }\n\n return row;\n });\n\n const form = RadioFormFromRows(rows, (value) => {\n this.managers.appReactionsManager.setDefaultReaction({_: 'reactionEmoji', emoticon: value});\n });\n\n section.content.append(form);\n this.scrollable.append(section.container);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport forEachReverse from '../../../helpers/array/forEachReverse';\nimport assumeType from '../../../helpers/assumeType';\nimport createContextMenu from '../../../helpers/dom/createContextMenu';\nimport positionElementByIndex from '../../../helpers/dom/positionElementByIndex';\nimport Sortable from '../../../helpers/dom/sortable';\nimport {joinDeepPath} from '../../../helpers/object/setDeepProperty';\nimport {StickerSet, MessagesAllStickers} from '../../../layer';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport wrapEmojiText from '../../../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../../../lib/rootScope';\nimport CheckboxField from '../../checkboxField';\nimport LazyLoadQueue from '../../lazyLoadQueue';\nimport PopupElement from '../../popups';\nimport PopupStickers from '../../popups/stickers';\nimport Row, {CreateRowFromCheckboxField} from '../../row';\nimport SettingSection from '../../settingSection';\nimport SliderSuperTab from '../../sliderTab';\nimport wrapStickerSetThumb from '../../wrappers/stickerSetThumb';\nimport wrapStickerToRow from '../../wrappers/stickerToRow';\nimport AppQuickReactionTab from './quickReaction';\n\nexport default class AppStickersAndEmojiTab extends SliderSuperTab {\n public static getInitArgs() {\n return {\n allStickers: rootScope.managers.appStickersManager.getAllStickers(),\n quickReaction: rootScope.managers.appReactionsManager.getQuickReaction()\n };\n }\n\n public init(p: ReturnType) {\n this.container.classList.add('stickers-emoji-container');\n this.setTitle('StickersName');\n\n const promises: Promise[] = [];\n\n {\n const section = new SettingSection({caption: 'LoopAnimatedStickersInfo'});\n\n const suggestStickersRow = new Row({\n icon: 'lamp',\n titleLangKey: 'Stickers.SuggestStickers',\n clickable: true,\n listenerSetter: this.listenerSetter,\n titleRightSecondary: true\n });\n\n const map: {[k in typeof rootScope.settings.stickers.suggest]: LangPackKey} = {\n all: 'SuggestStickersAll',\n installed: 'SuggestStickersInstalled',\n none: 'SuggestStickersNone'\n };\n\n const setStickersSuggestDescription = () => {\n suggestStickersRow.titleRight.replaceChildren(i18n(map[rootScope.settings.stickers.suggest]));\n };\n\n setStickersSuggestDescription();\n\n const setStickersSuggest = (value: typeof rootScope.settings.stickers.suggest) => {\n if(rootScope.settings.stickers.suggest === value) return;\n rootScope.settings.stickers.suggest = value;\n setStickersSuggestDescription();\n return this.managers.appStateManager.setByKey(joinDeepPath('settings', 'stickers', 'suggest'), value);\n };\n\n createContextMenu({\n buttons: [{\n icon: 'stickers_face',\n text: 'SuggestStickersAll',\n onClick: setStickersSuggest.bind(this, 'all')\n }, {\n icon: 'newprivate',\n text: 'SuggestStickersInstalled',\n onClick: setStickersSuggest.bind(this, 'installed')\n }, {\n icon: 'stop',\n text: 'SuggestStickersNone',\n onClick: setStickersSuggest.bind(this, 'none')\n }],\n listenTo: suggestStickersRow.container,\n middleware: this.middlewareHelper.get(),\n listenForClick: true\n });\n\n const reactionsRow = new Row({\n titleLangKey: 'DoubleTapSetting',\n havePadding: true,\n clickable: () => {\n this.slider.createTab(AppQuickReactionTab).open();\n },\n listenerSetter: this.listenerSetter\n });\n\n const renderQuickReaction = () => {\n p.quickReaction.then((reaction) => {\n if(reaction._ === 'availableReaction') {\n return reaction.static_icon;\n } else {\n return this.managers.appEmojiManager.getCustomEmojiDocument(reaction.document_id);\n }\n }).then((doc) => {\n wrapStickerToRow({\n row: reactionsRow,\n doc,\n size: 'small'\n });\n });\n };\n\n renderQuickReaction();\n\n this.listenerSetter.add(rootScope)('quick_reaction', () => {\n p = AppStickersAndEmojiTab.getInitArgs();\n renderQuickReaction();\n });\n\n const loopStickersRow = new Row({\n icon: 'flip',\n titleLangKey: 'InstalledStickers.LoopAnimated',\n checkboxField: new CheckboxField({\n name: 'loop',\n stateKey: joinDeepPath('settings', 'stickers', 'loop'),\n listenerSetter: this.listenerSetter,\n toggle: true\n }),\n listenerSetter: this.listenerSetter\n });\n\n section.content.append(\n reactionsRow.container,\n suggestStickersRow.container,\n loopStickersRow.container\n );\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'Emoji'});\n\n const suggestEmojiRow = new Row({\n icon: 'lamp',\n titleLangKey: 'GeneralSettings.EmojiPrediction',\n checkboxField: new CheckboxField({\n name: 'suggest-emoji',\n stateKey: joinDeepPath('settings', 'emoji', 'suggest'),\n listenerSetter: this.listenerSetter,\n toggle: true\n }),\n listenerSetter: this.listenerSetter\n });\n const bigEmojiRow = new Row({\n icon: 'smile',\n titleLangKey: 'GeneralSettings.BigEmoji',\n checkboxField: new CheckboxField({\n name: 'emoji-big',\n stateKey: joinDeepPath('settings', 'emoji', 'big'),\n listenerSetter: this.listenerSetter,\n toggle: true\n }),\n listenerSetter: this.listenerSetter\n });\n\n section.content.append(\n suggestEmojiRow.container,\n bigEmojiRow.container\n );\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'DynamicPackOrder', caption: 'DynamicPackOrderInfo'});\n\n const dynamicPackOrderRow = new Row({\n titleLangKey: 'DynamicPackOrder',\n icon: 'replace',\n checkboxField: new CheckboxField({\n name: 'dynamic-pack-order',\n stateKey: joinDeepPath('settings', 'stickers', 'dynamicPackOrder'),\n listenerSetter: this.listenerSetter,\n toggle: true\n }),\n listenerSetter: this.listenerSetter\n });\n\n section.content.append(\n dynamicPackOrderRow.container\n );\n\n this.scrollable.append(section.container);\n }\n\n {\n const section = new SettingSection({name: 'Telegram.InstalledStickerPacksController', caption: 'StickersBotInfo'});\n\n const stickerSets: {[id: string]: Row} = {};\n\n const stickersContent = section.generateContentElement();\n\n const lazyLoadQueue = new LazyLoadQueue();\n const renderStickerSet = (stickerSet: StickerSet.stickerSet, method: 'append' | 'prepend' = 'append') => {\n const row = new Row({\n title: wrapEmojiText(stickerSet.title),\n subtitleLangKey: 'Stickers',\n subtitleLangArgs: [stickerSet.count],\n havePadding: true,\n clickable: () => {\n PopupElement.createPopup(PopupStickers, {id: stickerSet.id, access_hash: stickerSet.access_hash}).show();\n },\n listenerSetter: this.listenerSetter\n });\n\n row.container.dataset.id = '' + stickerSet.id;\n\n row.makeSortable();\n\n stickerSets[stickerSet.id] = row;\n\n const div = document.createElement('div');\n div.classList.add('row-media');\n\n wrapStickerSetThumb({\n set: stickerSet,\n container: div,\n group: 'GENERAL-SETTINGS',\n lazyLoadQueue,\n width: 36,\n height: 36,\n autoplay: true,\n middleware: this.middlewareHelper.get()\n });\n\n row.container.append(div);\n\n stickersContent[method](row.container);\n };\n\n const promise = p.allStickers.then((allStickers) => {\n assumeType(allStickers);\n const promises = allStickers.sets.map((stickerSet) => renderStickerSet(stickerSet));\n return Promise.all(promises);\n });\n\n promises.push(promise);\n\n this.listenerSetter.add(rootScope)('stickers_installed', (set) => {\n if(!stickerSets[set.id]) {\n renderStickerSet(set, 'prepend');\n }\n });\n\n this.listenerSetter.add(rootScope)('stickers_deleted', (set) => {\n if(stickerSets[set.id]) {\n stickerSets[set.id].container.remove();\n delete stickerSets[set.id];\n }\n });\n\n this.listenerSetter.add(rootScope)('stickers_order', ({type, order}) => {\n if(type !== 'stickers') {\n return;\n }\n\n order.forEach((id, idx) => {\n const row = stickerSets[id];\n if(!row) {\n return;\n }\n\n positionElementByIndex(row.container, stickersContent, idx)\n });\n });\n\n this.listenerSetter.add(rootScope)('stickers_top', (id) => {\n const row = stickerSets[id];\n if(!row) {\n return;\n }\n\n positionElementByIndex(row.container, stickersContent, 0);\n });\n\n new Sortable({\n list: stickersContent,\n middleware: this.middlewareHelper.get(),\n onSort: (idx, newIdx) => {\n const order = Array.from(stickersContent.children).map((el) => (el as HTMLElement).dataset.id);\n this.managers.appStickersManager.reorderStickerSets(order);\n }\n });\n\n this.scrollable.append(section.container);\n }\n\n return Promise.all(promises);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport ButtonMenuToggle from '../../buttonMenuToggle';\nimport AppPrivacyAndSecurityTab from './privacyAndSecurity';\nimport AppGeneralSettingsTab from './generalSettings';\nimport AppEditProfileTab from './editProfile';\nimport AppChatFoldersTab from './chatFolders';\nimport AppNotificationsTab from './notifications';\nimport AppLanguageTab from './language';\nimport lottieLoader from '../../../lib/rlottie/lottieLoader';\nimport PopupPeer from '../../popups/peer';\nimport AppDataAndStorageTab from './dataAndStorage';\nimport ButtonIcon from '../../buttonIcon';\nimport PeerProfile from '../../peerProfile';\nimport rootScope from '../../../lib/rootScope';\nimport Row from '../../row';\nimport AppActiveSessionsTab from './activeSessions';\nimport {i18n, LangPackKey} from '../../../lib/langPack';\nimport {SliderSuperTabConstructable, SliderSuperTabEventable} from '../../sliderTab';\nimport PopupAvatar from '../../popups/avatar';\nimport {AccountAuthorizations, Authorization} from '../../../layer';\nimport PopupElement from '../../popups';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport SettingSection from '../../settingSection';\nimport AppStickersAndEmojiTab from './stickersAndEmoji';\nimport ButtonCorner from '../../buttonCorner';\nimport PopupPremium from '../../popups/premium';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport apiManagerProxy from '../../../lib/mtproto/mtprotoworker';\nimport {createEffect, createRoot} from 'solid-js';\nimport useStars from '../../../stores/stars';\nimport PopupStars from '../../popups/stars';\n\nexport default class AppSettingsTab extends SliderSuperTab {\n private buttons: {\n edit: HTMLButtonElement,\n folders: HTMLButtonElement,\n general: HTMLButtonElement,\n notifications: HTMLButtonElement,\n storage: HTMLButtonElement,\n privacy: HTMLButtonElement,\n } = {} as any;\n private profile: PeerProfile;\n\n private languageRow: Row;\n private devicesRow: Row;\n private premiumRow: Row;\n\n private authorizations: Authorization.authorization[];\n private getAuthorizationsPromise: Promise;\n\n public async init() {\n this.container.classList.add('settings-container');\n this.setTitle('Settings');\n\n const btnMenu = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n direction: 'bottom-left',\n buttons: [{\n icon: 'logout',\n text: 'EditAccount.Logout',\n onClick: () => {\n PopupElement.createPopup(PopupPeer, 'logout', {\n titleLangKey: 'LogOut',\n descriptionLangKey: 'LogOut.Description',\n buttons: [{\n langKey: 'LogOut',\n callback: () => {\n this.managers.apiManager.logOut();\n },\n isDanger: true\n }]\n }).show();\n }\n }]\n });\n\n this.buttons.edit = ButtonIcon('edit');\n\n this.header.append(this.buttons.edit, btnMenu);\n\n this.profile = new PeerProfile(\n this.managers,\n this.scrollable,\n this.listenerSetter,\n false,\n this.container,\n (has) => {\n let last = this.profile.element.lastElementChild;\n if(has) {\n last = last.previousElementSibling;\n }\n\n last.firstElementChild.append(changeAvatarBtn);\n }\n );\n this.profile.init();\n this.profile.setPeer(rootScope.myId);\n const fillPromise = this.profile.fillProfileElements();\n\n const changeAvatarBtn = ButtonCorner({icon: 'cameraadd', className: 'profile-change-avatar'});\n attachClickEvent(changeAvatarBtn, () => {\n const canvas = document.createElement('canvas');\n PopupElement.createPopup(PopupAvatar).open(canvas, (upload) => {\n upload().then((inputFile) => {\n return this.managers.appProfileManager.uploadProfilePhoto(inputFile);\n });\n });\n }, {listenerSetter: this.listenerSetter});\n this.profile.element.lastElementChild.firstElementChild.append(changeAvatarBtn);\n\n const updateChangeAvatarBtn = async() => {\n const user = await this.managers.appUsersManager.getSelf();\n changeAvatarBtn.classList.toggle('hide', user.photo?._ !== 'userProfilePhoto');\n };\n\n updateChangeAvatarBtn();\n this.listenerSetter.add(rootScope)('avatar_update', ({peerId}) => {\n if(rootScope.myId === peerId) {\n updateChangeAvatarBtn();\n }\n });\n\n const buttonsDiv = document.createElement('div');\n buttonsDiv.classList.add('profile-buttons');\n\n type ConstructorP = T extends {\n new (...args: any[]): infer U;\n } ? U : never;\n\n const m = (\n icon: Icon,\n text: LangPackKey,\n c: T,\n getInitArgs?: () => Promise['init']>>\n ): {\n icon: Icon,\n text: LangPackKey,\n tabConstructor: T,\n getInitArgs?: typeof getInitArgs,\n // args?: ReturnType\n args?: any\n } => {\n if(!getInitArgs) {\n const g = (c as any as typeof SliderSuperTab).getInitArgs;\n if(g) {\n // @ts-ignore\n getInitArgs = () => [g(this)];\n }\n }\n\n return {\n icon,\n text,\n tabConstructor: c,\n getInitArgs,\n args: getInitArgs?.()\n };\n };\n\n // const k = (c: T): () => [ReturnType['getInitArgs']>] => {\n // return () => (c as any).getInitArgs(this);\n // };\n\n const b = [\n m('unmute', 'AccountSettings.Notifications', AppNotificationsTab),\n m('data', 'DataSettings', AppDataAndStorageTab),\n m('lock', 'AccountSettings.PrivacyAndSecurity', AppPrivacyAndSecurityTab),\n m('settings', 'Telegram.GeneralSettingsViewController', AppGeneralSettingsTab),\n m('folder', 'AccountSettings.Filters', AppChatFoldersTab),\n m('stickers_face', 'StickersName', AppStickersAndEmojiTab)\n ];\n\n const rows = b.map((item) => {\n const {icon, text: langPackKey, tabConstructor, getInitArgs} = item;\n return new Row({\n titleLangKey: langPackKey,\n icon,\n clickable: async() => {\n const args = item.args ? await item.args : [];\n const tab = this.slider.createTab(tabConstructor as any);\n tab.open(...args);\n\n if(tab instanceof SliderSuperTabEventable && getInitArgs) {\n (tab as SliderSuperTabEventable).eventListener.addEventListener('destroyAfter', (promise) => {\n item.args = promise.then(() => getInitArgs() as any);\n });\n }\n },\n listenerSetter: this.listenerSetter\n });\n });\n\n const languageArgs = AppLanguageTab.getInitArgs();\n rows.push(\n this.devicesRow = new Row({\n titleLangKey: 'Devices',\n titleRightSecondary: ' ',\n icon: 'activesessions',\n clickable: async() => {\n if(!this.authorizations) {\n await this.updateActiveSessions();\n }\n\n const tab = this.slider.createTab(AppActiveSessionsTab);\n tab.authorizations = this.authorizations;\n tab.eventListener.addEventListener('destroy', () => {\n this.authorizations = undefined;\n this.updateActiveSessions(true);\n }, {once: true});\n tab.open();\n },\n listenerSetter: this.listenerSetter\n }),\n this.languageRow = new Row({\n titleLangKey: 'AccountSettings.Language',\n titleRightSecondary: i18n('LanguageName'),\n icon: 'language',\n clickable: () => {\n this.slider.createTab(AppLanguageTab).open(languageArgs);\n },\n listenerSetter: this.listenerSetter\n })\n );\n\n buttonsDiv.append(...rows.map((row) => row.container));\n\n // const profileSection = new SettingSection({fullWidth: true, noPaddingTop: true});\n // profileSection.content.append(this.profile.element);\n\n this.premiumRow = new Row({\n titleLangKey: 'ActionGiftPremiumTitle',\n icon: 'star',\n iconClasses: ['row-icon-premium-color'],\n clickable: () => {\n PopupPremium.show();\n },\n listenerSetter: this.listenerSetter\n });\n\n const starsRow = new Row({\n titleLangKey: 'MenuTelegramStars',\n titleRightSecondary: true,\n icon: 'star',\n iconClasses: ['row-icon-stars-color'],\n clickable: () => {\n PopupElement.createPopup(PopupStars);\n },\n listenerSetter: this.listenerSetter\n });\n\n createRoot((dispose) => {\n this.middlewareHelper.onDestroy(dispose);\n const stars = useStars();\n createEffect(() => {\n starsRow.titleRight.textContent = '' + stars();\n starsRow.container.classList.toggle('hide', !stars());\n });\n });\n\n const giftPremium = new Row({\n titleLangKey: 'GiftPremiumGifting',\n icon: 'gift',\n clickable: () => {\n appImManager.initGifting();\n },\n listenerSetter: this.listenerSetter\n });\n\n const badge = i18n('New');\n badge.classList.add('row-title-badge');\n giftPremium.title.append(badge);\n\n const buttonsSection = new SettingSection();\n buttonsSection.content.append(buttonsDiv);\n\n let premiumSection: SettingSection;\n if(!await apiManagerProxy.isPremiumPurchaseBlocked()) {\n premiumSection = new SettingSection();\n premiumSection.content.append(this.premiumRow.container, starsRow.container, giftPremium.container);\n }\n\n this.scrollable.append(...[\n this.profile.element,\n /* profileSection.container, */\n buttonsSection.container,\n premiumSection?.container\n ].filter(Boolean));\n\n const getEditProfileArgs = () => {\n editProfileArgs = AppEditProfileTab.getInitArgs();\n };\n let editProfileArgs: ReturnType;\n attachClickEvent(this.buttons.edit, () => {\n const tab = this.slider.createTab(AppEditProfileTab);\n tab.open(editProfileArgs);\n }, {listenerSetter: this.listenerSetter});\n getEditProfileArgs();\n // this.listenerSetter.add(rootScope)('user_full_update', (userId) => {\n // if(rootScope.myId.toUserId() === userId) {\n // getEditProfileArgs();\n // }\n // });\n this.listenerSetter.add(rootScope)('user_update', (userId) => {\n if(rootScope.myId.toUserId() === userId) {\n getEditProfileArgs();\n }\n });\n\n lottieLoader.loadLottieWorkers();\n\n this.updateActiveSessions();\n\n (await fillPromise)();\n }\n\n private getAuthorizations(overwrite?: boolean) {\n if(this.getAuthorizationsPromise && !overwrite) return this.getAuthorizationsPromise;\n\n const promise = this.getAuthorizationsPromise = this.managers.apiManager.invokeApi('account.getAuthorizations')\n .finally(() => {\n if(this.getAuthorizationsPromise === promise) {\n this.getAuthorizationsPromise = undefined;\n }\n });\n\n return promise;\n }\n\n public updateActiveSessions(overwrite?: boolean) {\n return this.getAuthorizations(overwrite).then((auths) => {\n this.authorizations = auths.authorizations;\n this.devicesRow.titleRight.textContent = '' + this.authorizations.length;\n });\n }\n\n public onCloseAfterTimeout() {\n this.profile.destroy();\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appSidebarLeft from '..';\nimport {InputFile} from '../../../layer';\nimport InputField from '../../inputField';\nimport {SliderSuperTab} from '../../slider';\nimport AvatarEdit from '../../avatarEdit';\nimport AppAddMembersTab from './addMembers';\nimport {_i18n} from '../../../lib/langPack';\nimport ButtonCorner from '../../buttonCorner';\nimport appImManager from '../../../lib/appManagers/appImManager';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport SettingSection from '../../settingSection';\n\nexport default class AppNewChannelTab extends SliderSuperTab {\n private uploadAvatar: () => Promise = null;\n\n private channelNameInputField: InputField;\n private channelDescriptionInputField: InputField;\n private nextBtn: HTMLButtonElement;\n private avatarEdit: AvatarEdit;\n\n public init() {\n this.container.classList.add('new-channel-container');\n this.setTitle('NewChannel');\n\n this.avatarEdit = new AvatarEdit((_upload) => {\n this.uploadAvatar = _upload;\n });\n\n const section = new SettingSection({\n caption: 'Channel.DescriptionHolderDescrpiton'\n });\n\n const inputWrapper = document.createElement('div');\n inputWrapper.classList.add('input-wrapper');\n\n this.channelNameInputField = new InputField({\n label: 'EnterChannelName',\n maxLength: 128\n });\n\n this.channelDescriptionInputField = new InputField({\n label: 'DescriptionOptionalPlaceholder',\n maxLength: 255,\n withLinebreaks: true\n });\n\n inputWrapper.append(\n this.channelNameInputField.container,\n this.channelDescriptionInputField.container\n );\n\n const onLengthChange = () => {\n this.nextBtn.classList.toggle('is-visible', !!this.channelNameInputField.value.length &&\n !this.channelNameInputField.input.classList.contains('error') &&\n !this.channelDescriptionInputField.input.classList.contains('error'));\n };\n\n this.channelNameInputField.input.addEventListener('input', onLengthChange);\n this.channelDescriptionInputField.input.addEventListener('input', onLengthChange);\n\n this.nextBtn = ButtonCorner({icon: 'arrow_next'});\n\n attachClickEvent(this.nextBtn, () => {\n const title = this.channelNameInputField.value;\n const about = this.channelDescriptionInputField.value;\n\n this.nextBtn.disabled = true;\n this.managers.appChatsManager.createChannel({\n title,\n about,\n broadcast: true\n }).then((channelId) => {\n if(this.uploadAvatar) {\n this.uploadAvatar().then((inputFile) => {\n this.managers.appChatsManager.editPhoto(channelId, inputFile);\n });\n }\n\n appImManager.setInnerPeer({peerId: channelId.toPeerId(true)});\n\n appSidebarLeft.removeTabFromHistory(this);\n this.slider.createTab(AppAddMembersTab).open({\n type: 'channel',\n skippable: true,\n title: 'GroupAddMembers',\n placeholder: 'SendMessageTo',\n takeOut: (peerIds) => {\n return this.managers.appChatsManager.inviteToChannel(channelId, peerIds);\n }\n });\n });\n }, {listenerSetter: this.listenerSetter});\n\n this.content.append(this.nextBtn);\n section.content.append(this.avatarEdit.container, inputWrapper);\n this.scrollable.append(section.container);\n }\n\n public onCloseAfterTimeout() {\n this.avatarEdit.clear();\n this.uploadAvatar = null;\n this.channelNameInputField.value = '';\n this.channelDescriptionInputField.value = '';\n this.nextBtn.disabled = false;\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport InputField from '../inputField';\nimport PopupElement from '.';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport EditPeer from '../editPeer';\nimport {_i18n} from '../../lib/langPack';\nimport TelInputField from '../telInputField';\nimport {formatPhoneNumber} from '../../helpers/formatPhoneNumber';\nimport {toastNew} from '../toast';\n\nexport default class PopupCreateContact extends PopupElement {\n constructor() {\n super('popup-create-contact popup-send-photo popup-new-media', {closable: true, withConfirm: 'Add', title: 'AddContactTitle'});\n this.construct();\n }\n\n private async construct() {\n attachClickEvent(this.btnConfirm, () => {\n const promise = this.managers.appUsersManager.importContact(nameInputField.value, lastNameInputField.value, telInputField.value);\n\n promise.then(() => {\n this.hide();\n }, (err: ApiError) => {\n if(err.type === 'NO_USER') {\n toastNew({langPackKey: 'Contacts.PhoneNumber.NotRegistred'});\n editPeer.disabled = false;\n }\n });\n\n editPeer.lockWithPromise(promise);\n }, {listenerSetter: this.listenerSetter});\n\n const inputFields: InputField[] = [];\n const div = document.createElement('div');\n div.classList.add('name-fields');\n const nameInputField = new InputField({\n label: 'FirstName',\n name: 'create-contact-name',\n maxLength: 70,\n required: true\n });\n nameInputField.container.classList.add('input-field-name');\n const lastNameInputField = new InputField({\n label: 'LastName',\n name: 'create-contact-lastname',\n maxLength: 70\n });\n const telInputField = new TelInputField({required: true});\n inputFields.push(nameInputField, lastNameInputField, telInputField);\n\n const onInput = () => {\n const name = nameInputField.value + ' ' + lastNameInputField.value;\n // const abbr = getAbbreviation(name);\n editPeer.avatarElem.render({peerTitle: name});\n };\n\n this.listenerSetter.add(nameInputField.input)('input', onInput);\n this.listenerSetter.add(lastNameInputField.input)('input', onInput);\n\n telInputField.validate = () => {\n return !!telInputField.value.match(/\\d/);\n };\n\n const user = await this.managers.appUsersManager.getSelf();\n const formatted = formatPhoneNumber(user.phone);\n if(formatted.code) {\n telInputField.value = '+' + formatted.code.country_code;\n }\n\n const editPeer = new EditPeer({\n inputFields,\n listenerSetter: this.listenerSetter,\n doNotEditAvatar: true,\n nextBtn: this.btnConfirm,\n avatarSize: 100,\n middleware: this.middlewareHelper.get()\n });\n\n div.append(nameInputField.container, lastNameInputField.container, editPeer.avatarElem.node);\n this.container.append(div, telInputField.container);\n\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport InputSearch from '../../inputSearch';\nimport {IS_MOBILE} from '../../../environment/userAgent';\nimport {canFocus} from '../../../helpers/dom/canFocus';\nimport windowSize from '../../../helpers/windowSize';\nimport ButtonCorner from '../../buttonCorner';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport PopupCreateContact from '../../popups/createContact';\nimport SortedUserList from '../../sortedUserList';\nimport {getMiddleware} from '../../../helpers/middleware';\nimport replaceContent from '../../../helpers/dom/replaceContent';\nimport rootScope from '../../../lib/rootScope';\nimport PopupElement from '../../popups';\n\n// TODO: поиск по людям глобальный, если не нашло в контактах никого\n\nexport default class AppContactsTab extends SliderSuperTab {\n private inputSearch: InputSearch;\n private middlewareHelperLoad: ReturnType;\n private sortedUserList: SortedUserList;\n private listsContainer: HTMLElement;\n\n public init() {\n this.container.id = 'contacts-container';\n\n // this.list = appDialogsManager.createChatList(/* {avatarSize: 48, handheldsSize: 66} */);\n\n const btnAdd = ButtonCorner({icon: 'add', className: 'is-visible'});\n this.content.append(btnAdd);\n\n attachClickEvent(btnAdd, () => {\n PopupElement.createPopup(PopupCreateContact);\n }, {listenerSetter: this.listenerSetter});\n\n this.inputSearch = new InputSearch({\n placeholder: 'Search',\n onChange: (value) => {\n this.openContacts(value);\n }\n });\n\n this.listenerSetter.add(rootScope)('contacts_update', async(userId) => {\n const isContact = await this.managers.appUsersManager.isContact(userId);\n const peerId = userId.toPeerId();\n if(isContact) this.sortedUserList.add(peerId);\n else this.sortedUserList.delete(peerId);\n });\n\n this.title.replaceWith(this.inputSearch.container);\n\n this.middlewareHelperLoad = getMiddleware();\n\n const listsContainer = this.listsContainer = document.createElement('div');\n this.scrollable.append(listsContainer);\n\n this.openContacts();\n\n // preload contacts\n // appUsersManager.getContacts();\n }\n\n protected createList() {\n const sortedUserList = new SortedUserList({\n managers: this.managers,\n middleware: this.middlewareHelper.get()\n });\n const list = sortedUserList.list;\n list.id = 'contacts';\n list.classList.add('contacts-container');\n appDialogsManager.setListClickListener({\n list,\n onFound: () => {\n this.close();\n },\n withContext: undefined,\n autonomous: true\n });\n return sortedUserList;\n }\n\n protected onClose() {\n this.middlewareHelperLoad.clean();\n /* // need to clear, and left 1 page for smooth slide\n let pageCount = appPhotosManager.windowH / 56 * 1.25 | 0;\n (Array.from(this.list.children) as HTMLElement[]).slice(pageCount).forEach((el) => el.remove()); */\n }\n\n protected onOpenAfterTimeout() {\n if(IS_MOBILE || !canFocus(true)) return;\n this.inputSearch.input.focus();\n }\n\n public openContacts(query?: string) {\n this.middlewareHelperLoad.clean();\n const middleware = this.middlewareHelperLoad.get();\n this.scrollable.onScrolledBottom = null;\n this.listsContainer.replaceChildren();\n\n this.managers.appUsersManager.getContactsPeerIds(query, undefined, 'online').then((contacts) => {\n if(!middleware()) {\n return;\n }\n\n const sortedUserList = this.sortedUserList = this.createList();\n\n let renderPage = () => {\n const pageCount = windowSize.height / 56 * 1.25 | 0;\n const arr = contacts.splice(0, pageCount); // надо splice!\n\n arr.forEach((peerId) => {\n sortedUserList.add(peerId);\n });\n\n if(!contacts.length) {\n renderPage = undefined;\n this.scrollable.onScrolledBottom = null;\n }\n };\n\n renderPage();\n this.scrollable.onScrolledBottom = () => {\n if(renderPage) {\n renderPage();\n } else {\n this.scrollable.onScrolledBottom = null;\n }\n };\n\n replaceContent(this.listsContainer, sortedUserList.list);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport {SliderSuperTab} from '../../slider';\nimport {FOLDER_ID_ARCHIVE, REAL_FOLDER_ID} from '../../../lib/mtproto/mtproto_config';\nimport StoriesList from '../../stories/list';\nimport {render} from 'solid-js/web';\n\nexport default class AppArchivedTab extends SliderSuperTab {\n private static filterId: REAL_FOLDER_ID = FOLDER_ID_ARCHIVE;\n private wasFilterId: number;\n\n private storiesListContainer: HTMLDivElement;\n private disposeStories: () => void;\n\n public init() {\n this.wasFilterId = appDialogsManager.filterId;\n\n this.container.id = 'chats-archived-container';\n this.setTitle('ArchivedChats');\n\n this.header.classList.add('can-have-forum');\n this.content.classList.add('can-have-forum');\n\n if(!appDialogsManager.xds[AppArchivedTab.filterId]) {\n const {ul, scrollable} = appDialogsManager.l({\n title: undefined,\n id: AppArchivedTab.filterId,\n localId: FOLDER_ID_ARCHIVE\n });\n scrollable.append(ul);\n }\n\n const storiesListContainer = this.storiesListContainer = document.createElement('div');\n storiesListContainer.classList.add('stories-list');\n\n this.header.after(storiesListContainer);\n\n const scrollable = appDialogsManager.xds[AppArchivedTab.filterId].scrollable;\n this.scrollable.container.replaceWith(scrollable.container);\n scrollable.attachBorderListeners(this.container);\n // ! DO NOT UNCOMMENT NEXT LINE - chats will stop loading on scroll after closing the tab\n // this.scrollable = scrollable;\n\n return appDialogsManager.setFilterIdAndChangeTab(AppArchivedTab.filterId).then(({cached, renderPromise}) => {\n if(cached) {\n return renderPromise;\n }\n });\n }\n\n private renderStories() {\n this.disposeStories = render(() => {\n return StoriesList({\n foldInto: this.header,\n setScrolledOn: this.container,\n getScrollable: () => appDialogsManager.xds[AppArchivedTab.filterId].scrollable.container,\n listenWheelOn: this.content,\n archive: true,\n offsetX: -84\n });\n }, this.storiesListContainer);\n }\n\n // вообще, так делать нельзя, но нет времени чтобы переделать главный чатлист на слайд...\n onOpenAfterTimeout() {\n this.renderStories();\n appDialogsManager.xds[this.wasFilterId].clear();\n }\n\n onClose() {\n this.scrollable.onAdditionalScroll = undefined;\n appDialogsManager.setFilterIdAndChangeTab(this.wasFilterId);\n }\n\n onCloseAfterTimeout() {\n this.disposeStories?.();\n this.disposeStories = undefined;\n appDialogsManager.xds[AppArchivedTab.filterId].clear();\n return super.onCloseAfterTimeout();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SliderSuperTab} from '../../slider';\nimport ButtonCorner from '../../buttonCorner';\nimport AppNewGroupTab from './newGroup';\nimport {toast} from '../../toast';\nimport {ButtonMenuItemOptions} from '../../buttonMenu';\nimport {i18n, join, _i18n} from '../../../lib/langPack';\nimport rootScope from '../../../lib/rootScope';\nimport wrapSticker from '../../wrappers/sticker';\nimport SortedUserList from '../../sortedUserList';\nimport {PeerLocated, Update, Updates} from '../../../layer';\nimport {SettingChatListSection} from '..';\nimport appDialogsManager from '../../../lib/appManagers/appDialogsManager';\nimport {attachClickEvent} from '../../../helpers/dom/clickEvent';\nimport confirmationPopup from '../../confirmationPopup';\nimport getPeerId from '../../../lib/appManagers/utils/peers/getPeerId';\nimport type LazyLoadQueue from '../../lazyLoadQueue';\n\nexport default class AppPeopleNearbyTab extends SliderSuperTab {\n private latestLocationSaved: {latitude: number, longitude: number, accuracy: number};\n private isLocationWatched: boolean = false;\n private errorCategory: HTMLElement;\n private retryBtn: HTMLButtonElement;\n private btnOptions: HTMLButtonElement;\n private menuButtons: (ButtonMenuItemOptions & {verify?: () => boolean})[];\n\n protected lazyLoadQueue: LazyLoadQueue;\n protected peopleSection: SettingChatListSection;\n protected chatsSection: SettingChatListSection;\n\n protected locatedPeers: Map;\n\n // public async init() {\n // this.container.classList.add('people-nearby-container');\n // this.setTitle('PeopleNearby');\n\n // this.errorCategory = document.createElement('div');\n // this.errorCategory.classList.add('text', 'hide', 'nearby-error');\n\n // this.retryBtn = ButtonCorner({icon: 'check'});\n\n // const emoji = '🧭';\n // const doc = await this.managers.appStickersManager.getAnimatedEmojiSticker(emoji);\n // const stickerContainer = document.createElement('div');\n // stickerContainer.classList.add('sticker-container');\n\n // if(doc) {\n // wrapSticker({\n // doc,\n // div: stickerContainer,\n // loop: false,\n // play: true,\n // width: 86,\n // height: 86,\n // emoji,\n // needUpscale: true\n // }).then(() => {\n // // this.animation = player;\n // });\n // } else {\n // stickerContainer.classList.add('media-sticker-wrapper');\n // }\n\n // const caption = document.createElement('div');\n // caption.classList.add('caption');\n // _i18n(caption, 'PeopleNearbyInfo2');\n\n // this.locatedPeers = new Map();\n\n // const m = () => {\n // const sortedUserList = new SortedUserList({\n // avatarSize: 42,\n // createChatListOptions: {\n // dialogSize: 48,\n // new: true\n // },\n // autonomous: false,\n // onUpdate: (element) => {\n // const peer = this.locatedPeers.get(element.id);\n // const elements: HTMLElement[] = [\n // this.parseDistance(peer.distance)\n // ];\n\n // if(!element.id.isUser()) {\n // elements.push(this.managers.appProfileManager.getChatMembersString(element.id.toChatId()));\n // }\n\n // element.dom.lastMessageSpan.textContent = '';\n // element.dom.lastMessageSpan.append(...join(elements, false));\n // },\n // getIndex: (element) => {\n // const peer = this.locatedPeers.get(element.id);\n // return 0x7FFFFFFF - peer.distance;\n // },\n // appUsersManager: this.managers.appUsersManager\n // });\n\n // appDialogsManager.setListClickListener(sortedUserList.list, undefined, undefined, false);\n\n // return sortedUserList;\n // };\n\n // const peopleSection = this.peopleSection = new SettingChatListSection({\n // name: 'PeopleNearbyHeader',\n // sortedList: m()\n // });\n\n // const chatsSection = this.chatsSection = new SettingChatListSection({\n // name: 'ChatsNearbyHeader',\n // sortedList: m()\n // });\n\n // const btnMakeVisible = peopleSection.makeButton({\n // text: 'MakeMyselfVisible',\n // icon: 'location'\n // });\n\n // const btnMakeInvisible = peopleSection.makeButton({\n // text: 'StopShowingMe',\n // icon: 'location'\n // });\n\n // const btnCreateGroup = chatsSection.makeButton({\n // text: 'NearbyCreateGroup',\n // icon: 'newgroup'\n // });\n\n // attachClickEvent(btnMakeVisible, () => {\n // confirmationPopup({\n // titleLangKey: 'MakeMyselfVisibleTitle',\n // descriptionLangKey: 'MakeMyselfVisibleInfo',\n // button: {\n // langKey: 'OK'\n // }\n // }).then(() => {\n // this.startWatching();\n // });\n // }, {listenerSetter: this.listenerSetter});\n\n // attachClickEvent(btnMakeInvisible, () => {\n // this.stopWatching();\n // }, {listenerSetter: this.listenerSetter});\n\n // attachClickEvent(btnCreateGroup, () => {\n // this.slider.createTab(AppNewGroupTab).open([], true);\n // }, {listenerSetter: this.listenerSetter});\n\n // btnMakeVisible.classList.add('primary');\n // btnMakeInvisible.classList.add('danger');\n // btnCreateGroup.classList.add('primary');\n\n // this.content.append(this.retryBtn);\n // this.scrollable.append(\n // stickerContainer,\n // caption,\n // peopleSection.container,\n // chatsSection.container,\n // this.errorCategory\n // );\n // }\n\n private parseDistance(distance: number) {\n if(rootScope.settings.distanceUnit === 'miles') {\n if(distance > 1609.34) {\n return i18n('MilesAway', [Math.round(distance / 1609)]);\n } else {\n return i18n('FootsAway', [Math.round(distance * 3.281)]);\n }\n } else {\n if(distance >= 1000) {\n return i18n('KMetersAway2', [distance / 1000]);\n } else {\n return i18n('MetersAway2', [distance]);\n }\n }\n }\n\n // public open() {\n // const result = super.open();\n // result.then(() => {\n // this.retryBtn.classList.remove('is-visible');\n // navigator.geolocation.getCurrentPosition((location) => {\n // this.latestLocationSaved = {\n // latitude: location.coords.latitude,\n // longitude: location.coords.longitude,\n // accuracy: location.coords.accuracy\n // };\n\n // console.log(this.latestLocationSaved);\n\n // this.managers.appUsersManager.getLocated(\n // location.coords.latitude,\n // location.coords.longitude,\n // location.coords.accuracy\n // ).then((response) => {\n // const update = (response as Updates.updates).updates[0] as Update.updatePeerLocated;\n // const peers = update.peers as PeerLocated.peerLocated[];\n // const orderedPeers = peers.sort((a, b) => a.distance - b.distance);\n // const groupsCounter = peers.filter((e) => e.peer._ == 'peerChannel').length;\n // const usersCounter = peers.filter((e) => e.peer._ != 'peerChannel').length;\n // orderedPeers?.forEach((peer) => {\n // const peerId = getPeerId(peer.peer);\n // const section = peerId.isUser() ? this.peopleSection : this.chatsSection;\n // this.locatedPeers.set(peerId, peer);\n // section.sortedList.add(peerId);\n // });\n\n // this.errorCategory.classList.toggle('hide', !!(usersCounter || groupsCounter));\n // this.errorCategory.innerHTML = 'No groups or channels found around you.';\n // });\n // }, (error) => {\n // this.errorCategory.classList.remove('hide');\n // this.retryBtn.classList.add('is-visible');\n // this.retryBtn.addEventListener('click', this.open);\n // if(error instanceof GeolocationPositionError) {\n // this.errorCategory.innerHTML = 'Location permission denied. Click below to retry.';\n // } else {\n // this.errorCategory.innerHTML = 'An error has occurred. Please retry later clicking the button below.';\n // }\n // });\n // });\n\n // return result;\n // }\n\n private startWatching() {\n if(!this.latestLocationSaved || this.isLocationWatched) return;\n this.isLocationWatched = true;\n\n toast('Your position is now being shared. Do not close the page or it will be suspended.');\n\n this.managers.appUsersManager.getLocated(\n this.latestLocationSaved.latitude,\n this.latestLocationSaved.longitude,\n this.latestLocationSaved.accuracy,\n true, // background parameter\n 0x7fffffff // self_expires parameter\n );\n\n navigator.geolocation.watchPosition((result) => {\n const isLongitudeDifferent = result.coords.longitude !== this.latestLocationSaved.longitude;\n const isLatitudeDifferent = result.coords.latitude !== this.latestLocationSaved.latitude;\n const distanceCheck = this.calculateDistance(\n result.coords.latitude, result.coords.longitude,\n this.latestLocationSaved.latitude, this.latestLocationSaved.longitude\n ) > 100;\n\n if((isLatitudeDifferent || isLongitudeDifferent) && distanceCheck) {\n this.managers.appUsersManager.getLocated(\n result.coords.latitude,\n result.coords.longitude,\n result.coords.accuracy,\n true, // background parameter\n 0x7fffffff // self_expires parameter\n );\n this.latestLocationSaved = {\n latitude: result.coords.latitude,\n longitude: result.coords.longitude,\n accuracy: result.coords.accuracy\n }\n }\n });\n }\n\n private stopWatching() {\n if(!this.isLocationWatched) return;\n this.isLocationWatched = false;\n toast('The sharing of your position has been stopped. You will no longer be visible to other users.');\n this.managers.appUsersManager.getLocated(\n 0, // latitude parameter\n 0, // longitude parameter\n 0, // accuracy parameter\n false, // background parameter\n 0 // self_expires parameter\n );\n }\n\n private calculateDistance(lat1: number, long1: number, lat2: number, long2: number) {\n const p = 0.017453292519943295; // Math.PI/180\n return (\n 12742 * Math.asin(\n Math.sqrt(\n (0.5 - Math.cos((lat2 - lat1) * p)) +\n (\n Math.cos(lat1 * p) * Math.cos(lat2 * p) *\n (1 - Math.cos((long2 - long1) * p)/2)\n )\n )\n )\n );\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport appImManager from '../../lib/appManagers/appImManager';\nimport rootScope from '../../lib/rootScope';\nimport {SearchGroup} from '../appSearch';\nimport Scrollable, {ScrollableX} from '../scrollable';\nimport InputSearch from '../inputSearch';\nimport SidebarSlider from '../slider';\nimport TransitionSlider from '../transition';\nimport AppNewGroupTab from './tabs/newGroup';\nimport AppSearchSuper from '../appSearchSuper.';\nimport {DateData, fillTipDates} from '../../helpers/date';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport AppSettingsTab from './tabs/settings';\nimport AppNewChannelTab from './tabs/newChannel';\nimport AppContactsTab from './tabs/contacts';\nimport AppArchivedTab from './tabs/archivedTab';\nimport AppAddMembersTab from './tabs/addMembers';\nimport I18n, {i18n} from '../../lib/langPack';\nimport AppPeopleNearbyTab from './tabs/peopleNearby';\nimport {ButtonMenuItemOptions} from '../buttonMenu';\nimport CheckboxField from '../checkboxField';\nimport {IS_MOBILE_SAFARI} from '../../environment/userAgent';\nimport appNavigationController, {NavigationItem} from '../appNavigationController';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport findUpTag from '../../helpers/dom/findUpTag';\nimport App from '../../config/app';\nimport ButtonMenuToggle from '../buttonMenuToggle';\nimport sessionStorage from '../../lib/sessionStorage';\nimport {attachClickEvent, CLICK_EVENT_NAME, simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport ButtonIcon from '../buttonIcon';\nimport confirmationPopup from '../confirmationPopup';\nimport IS_GEOLOCATION_SUPPORTED from '../../environment/geolocationSupport';\nimport type SortedUserList from '../sortedUserList';\nimport Button, {ButtonOptions, replaceButtonIcon} from '../button';\nimport noop from '../../helpers/noop';\nimport ripple from '../ripple';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport formatNumber from '../../helpers/number/formatNumber';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport themeController from '../../helpers/themeController';\nimport contextMenuController from '../../helpers/contextMenuController';\nimport appDialogsManager, {DIALOG_LIST_ELEMENT_TAG} from '../../lib/appManagers/appDialogsManager';\nimport apiManagerProxy from '../../lib/mtproto/mtprotoworker';\nimport SettingSection, {SettingSectionOptions} from '../settingSection';\nimport {FOLDER_ID_ARCHIVE, TEST_NO_STORIES} from '../../lib/mtproto/mtproto_config';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport {fastRaf} from '../../helpers/schedulers';\nimport {getInstallPrompt} from '../../helpers/dom/installPrompt';\nimport liteMode from '../../helpers/liteMode';\nimport AppPowerSavingTab from './tabs/powerSaving';\nimport AppMyStoriesTab from './tabs/myStories';\nimport {joinDeepPath} from '../../helpers/object/setDeepProperty';\nimport Icon, {getIconContent} from '../icon';\nimport AppSelectPeers from '../appSelectPeers';\nimport setBadgeContent from '../../helpers/setBadgeContent';\nimport createBadge from '../../helpers/createBadge';\nimport {MyDocument} from '../../lib/appManagers/appDocsManager';\nimport getAttachMenuBotIcon from '../../lib/appManagers/utils/attachMenuBots/getAttachMenuBotIcon';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport flatten from '../../helpers/array/flatten';\nimport EmojiTab from '../emoticonsDropdown/tabs/emoji';\nimport {EmoticonsDropdown} from '../emoticonsDropdown';\nimport cloneDOMRect from '../../helpers/dom/cloneDOMRect';\nimport {AccountEmojiStatuses, Document, EmojiStatus} from '../../layer';\nimport filterUnique from '../../helpers/array/filterUnique';\nimport {Middleware, MiddlewareHelper} from '../../helpers/middleware';\nimport wrapEmojiStatus from '../wrappers/emojiStatus';\nimport {makeMediaSize} from '../../helpers/mediaSize';\nimport ReactionElement from '../chat/reaction';\nimport setBlankToAnchor from '../../lib/richTextProcessor/setBlankToAnchor';\n\nexport const LEFT_COLUMN_ACTIVE_CLASSNAME = 'is-left-column-shown';\n\nexport class AppSidebarLeft extends SidebarSlider {\n private toolsBtn: HTMLElement;\n private backBtn: HTMLButtonElement;\n public inputSearch: InputSearch;\n\n public archivedCount: HTMLSpanElement;\n public rect: DOMRect;\n\n private newBtnMenu: HTMLElement;\n\n private searchGroups: {[k in 'contacts' | 'globalContacts' | 'messages' | 'people' | 'recent']: SearchGroup} = {} as any;\n private searchSuper: AppSearchSuper;\n\n private updateBtn: HTMLElement;\n private hasUpdate: boolean;\n\n constructor() {\n super({\n sidebarEl: document.getElementById('column-left') as HTMLDivElement,\n navigationType: 'left'\n });\n }\n\n construct(managers: AppManagers) {\n this.managers = managers;\n // this._selectTab(0); // make first tab as default\n\n this.inputSearch = new InputSearch();\n (this.inputSearch.input as HTMLInputElement).placeholder = ' ';\n const sidebarHeader = this.sidebarEl.querySelector('.item-main .sidebar-header');\n sidebarHeader.append(this.inputSearch.container);\n\n const onNewGroupClick = () => {\n this.createTab(AppAddMembersTab).open({\n type: 'chat',\n skippable: true,\n takeOut: (peerIds) => this.createTab(AppNewGroupTab).open({peerIds}),\n title: 'GroupAddMembers',\n placeholder: 'SendMessageTo'\n });\n };\n\n const onContactsClick = () => {\n this.createTab(AppContactsTab).open();\n };\n\n // this.toolsBtn = this.sidebarEl.querySelector('.sidebar-tools-button') as HTMLButtonElement;\n this.backBtn = this.sidebarEl.querySelector('.sidebar-back-button') as HTMLButtonElement;\n\n const btnArchive: typeof menuButtons[0] = {\n icon: 'archive',\n text: 'ArchivedChats',\n onClick: () => {\n this.createTab(AppArchivedTab).open();\n },\n verify: async() => {\n const folder = await this.managers.dialogsStorage.getFolderDialogs(FOLDER_ID_ARCHIVE, false);\n const hasArchiveStories = await this.managers.appStoriesManager.hasArchive();\n return !!folder.length || hasArchiveStories || !(await this.managers.dialogsStorage.isDialogsLoaded(FOLDER_ID_ARCHIVE));\n }\n };\n\n const themeCheckboxField = new CheckboxField({\n toggle: true,\n checked: themeController.getTheme().name === 'night'\n });\n themeCheckboxField.input.addEventListener('change', () => {\n const item = findUpClassName(themeCheckboxField.label, 'btn-menu-item');\n const icon = item.querySelector('.tgico');\n const rect = icon.getBoundingClientRect();\n themeController.switchTheme(themeCheckboxField.checked ? 'night' : 'day', {\n x: rect.left + rect.width / 2,\n y: rect.top + rect.height / 2\n });\n });\n\n rootScope.addEventListener('theme_changed', () => {\n themeCheckboxField.setValueSilently(themeController.getTheme().name === 'night');\n });\n\n const menuButtons: (ButtonMenuItemOptions & {verify?: () => boolean | Promise})[] = [{\n icon: 'savedmessages',\n text: 'SavedMessages',\n onClick: () => {\n setTimeout(() => { // menu doesn't close if no timeout (lol)\n appImManager.setPeer({\n peerId: appImManager.myId\n });\n }, 0);\n }\n }, btnArchive, {\n icon: 'stories',\n text: 'MyStories.Title',\n onClick: () => {\n this.createTab(AppMyStoriesTab).open();\n },\n verify: () => !TEST_NO_STORIES\n }, {\n icon: 'user',\n text: 'Contacts',\n onClick: onContactsClick\n }, IS_GEOLOCATION_SUPPORTED ? {\n icon: 'group',\n text: 'PeopleNearby',\n onClick: () => {\n this.createTab(AppPeopleNearbyTab).open();\n }\n } : undefined, {\n icon: 'settings',\n text: 'Settings',\n onClick: () => {\n this.createTab(AppSettingsTab).open();\n }\n }, {\n icon: 'darkmode',\n text: 'DarkMode',\n onClick: () => {\n\n },\n checkboxField: themeCheckboxField\n }, {\n icon: 'animations',\n text: 'Animations',\n onClick: () => {\n\n },\n checkboxField: new CheckboxField({\n toggle: true,\n checked: liteMode.isAvailable('animations'),\n stateKey: joinDeepPath('settings', 'liteMode', 'animations'),\n stateValueReverse: true\n }),\n verify: () => !liteMode.isEnabled()\n }, {\n icon: 'animations',\n text: 'LiteMode.Title',\n onClick: () => {\n this.createTab(AppPowerSavingTab).open();\n },\n verify: () => liteMode.isEnabled()\n }, {\n icon: 'help',\n text: 'TelegramFeatures',\n onClick: () => {\n const url = I18n.format('TelegramFeaturesUrl', true);\n appImManager.openUrl(url);\n }\n }, {\n icon: 'bug',\n text: 'ReportBug',\n onClick: () => {\n const a = document.createElement('a');\n setBlankToAnchor(a);\n a.href = 'https://bugs.telegram.org/?tag_ids=40&sort=time';\n document.body.append(a);\n a.click();\n setTimeout(() => {\n a.remove();\n }, 0);\n }\n }, {\n icon: 'char' as Icon,\n className: 'a',\n text: 'ChatList.Menu.SwitchTo.A',\n onClick: () => {\n Promise.all([\n sessionStorage.set({kz_version: 'Z'}),\n sessionStorage.delete('tgme_sync')\n ]).then(() => {\n location.href = 'https://web.telegram.org/a/';\n });\n },\n verify: () => App.isMainDomain\n }, /* {\n icon: 'char w',\n text: 'ChatList.Menu.SwitchTo.Webogram',\n onClick: () => {\n sessionStorage.delete('tgme_sync').then(() => {\n location.href = 'https://web.telegram.org/?legacy=1';\n });\n },\n verify: () => App.isMainDomain\n }, */ {\n icon: 'plusround',\n text: 'PWA.Install',\n onClick: () => {\n const installPrompt = getInstallPrompt();\n installPrompt?.();\n },\n verify: () => !!getInstallPrompt()\n }];\n\n const filteredButtons = menuButtons.filter(Boolean);\n const filteredButtonsSliced = filteredButtons.slice();\n this.toolsBtn = ButtonMenuToggle({\n direction: 'bottom-right',\n buttons: filteredButtons,\n onOpenBefore: async() => {\n const attachMenuBots = await this.managers.appAttachMenuBotsManager.getAttachMenuBots();\n const buttons = filteredButtonsSliced.slice();\n const attachMenuBotsButtons = attachMenuBots.filter((attachMenuBot) => {\n return attachMenuBot.pFlags.show_in_side_menu;\n }).map((attachMenuBot) => {\n const icon = getAttachMenuBotIcon(attachMenuBot);\n const button: typeof buttons[0] = {\n regularText: wrapEmojiText(attachMenuBot.short_name),\n onClick: () => {\n appImManager.openWebApp({\n attachMenuBot,\n botId: attachMenuBot.bot_id,\n isSimpleWebView: true,\n fromSideMenu: true\n });\n },\n iconDoc: icon?.icon as MyDocument,\n new: attachMenuBot.pFlags.side_menu_disclaimer_needed || attachMenuBot.pFlags.inactive\n };\n\n return button;\n });\n\n buttons.splice(3, 0, ...attachMenuBotsButtons);\n filteredButtons.splice(0, filteredButtons.length, ...buttons);\n },\n onOpen: (e, btnMenu) => {\n const btnMenuFooter = document.createElement('a');\n btnMenuFooter.href = 'https://github.com/morethanwords/tweb/blob/master/CHANGELOG.md';\n setBlankToAnchor(btnMenuFooter);\n btnMenuFooter.classList.add('btn-menu-footer');\n btnMenuFooter.addEventListener(CLICK_EVENT_NAME, (e) => {\n e.stopPropagation();\n contextMenuController.close();\n });\n const t = document.createElement('span');\n t.classList.add('btn-menu-footer-text');\n t.textContent = 'Telegram Web' + App.suffix + ' '/* ' alpha ' */ + App.versionFull;\n btnMenuFooter.append(t);\n btnMenu.classList.add('has-footer');\n btnMenu.append(btnMenuFooter);\n\n const a = btnMenu.querySelector('.a .btn-menu-item-icon');\n if(a) a.textContent = 'A';\n\n btnArchive.element?.append(this.archivedCount);\n },\n noIcon: true\n });\n this.toolsBtn.classList.add('sidebar-tools-button', 'is-visible');\n\n this.backBtn.parentElement.insertBefore(this.toolsBtn, this.backBtn);\n\n this.newBtnMenu = ButtonMenuToggle({\n direction: 'top-left',\n buttons: [{\n icon: 'newchannel',\n text: 'NewChannel',\n onClick: () => {\n this.createTab(AppNewChannelTab).open();\n }\n }, {\n icon: 'newgroup',\n text: 'NewGroup',\n onClick: onNewGroupClick\n }, {\n icon: 'newprivate',\n text: 'NewPrivateChat',\n onClick: onContactsClick\n }],\n noIcon: true\n });\n this.newBtnMenu.className = 'btn-circle rp btn-corner z-depth-1 btn-menu-toggle animated-button-icon';\n this.newBtnMenu.tabIndex = -1;\n const icons: Icon[] = ['newchat_filled', 'close'];\n this.newBtnMenu.prepend(...icons.map((icon, idx) => Icon(icon, 'animated-button-icon-icon', 'animated-button-icon-icon-' + (idx === 0 ? 'first' : 'last'))));\n this.newBtnMenu.id = 'new-menu';\n sidebarHeader.nextElementSibling.append(this.newBtnMenu);\n\n this.updateBtn = document.createElement('div');\n this.updateBtn.className = 'btn-circle rp btn-corner z-depth-1 btn-update is-hidden';\n this.updateBtn.tabIndex = -1;\n ripple(this.updateBtn);\n this.updateBtn.append(i18n('Update'));\n\n attachClickEvent(this.updateBtn, () => {\n if(this.updateBtn.classList.contains('is-hidden')) {\n return;\n }\n\n location.reload();\n });\n\n sidebarHeader.nextElementSibling.append(this.updateBtn);\n\n this.inputSearch.input.addEventListener('focus', () => this.initSearch(), {once: true});\n\n this.archivedCount = createBadge('span', 24, 'gray');\n this.archivedCount.classList.add('archived-count');\n\n rootScope.addEventListener('folder_unread', (folder) => {\n if(folder.id === FOLDER_ID_ARCHIVE) {\n // const count = folder.unreadMessagesCount;\n const count = folder.unreadPeerIds.size;\n setBadgeContent(this.archivedCount, count ? '' + formatNumber(count, 1) : '');\n }\n });\n\n let statusMiddlewareHelper: MiddlewareHelper, fireOnNew: boolean;\n const premiumMiddlewareHelper = this.getMiddleware().create();\n const statusBtnIcon = ButtonIcon(' sidebar-emoji-status', {noRipple: true});\n attachClickEvent(statusBtnIcon, () => {\n const emojiTab = new EmojiTab({\n noRegularEmoji: true,\n managers: rootScope.managers,\n mainSets: () => {\n const defaultStatuses = this.managers.appStickersManager.getLocalStickerSet('inputStickerSetEmojiDefaultStatuses')\n .then((stickerSet) => {\n return stickerSet.documents.map((doc) => doc.id);\n });\n\n const convertEmojiStatuses = (emojiStatuses: AccountEmojiStatuses) => {\n return (emojiStatuses as AccountEmojiStatuses.accountEmojiStatuses)\n .statuses\n .map((status) => (status as EmojiStatus.emojiStatus).document_id)\n .filter(Boolean);\n };\n\n return [\n Promise.all([\n defaultStatuses,\n this.managers.appUsersManager.getRecentEmojiStatuses().then(convertEmojiStatuses),\n this.managers.appUsersManager.getDefaultEmojiStatuses().then(convertEmojiStatuses),\n this.managers.appEmojiManager.getRecentEmojis('custom')\n ]).then((arrays) => {\n return filterUnique(flatten(arrays));\n })\n ];\n },\n onClick: async(emoji) => {\n emoticonsDropdown.hideAndDestroy();\n\n const noStatus = getIconContent('star') === emoji.emoji;\n let emojiStatus: EmojiStatus;\n if(noStatus) {\n emojiStatus = {\n _: 'emojiStatusEmpty'\n };\n } else {\n emojiStatus = {\n _: 'emojiStatus',\n document_id: emoji.docId\n };\n\n fireOnNew = true;\n }\n\n this.managers.appUsersManager.updateEmojiStatus(emojiStatus);\n },\n canHaveEmojiTimer: true\n });\n\n const emoticonsDropdown = new EmoticonsDropdown({\n tabsToRender: [emojiTab],\n customParentElement: document.body,\n getOpenPosition: () => {\n const rect = statusBtnIcon.getBoundingClientRect();\n const cloned = cloneDOMRect(rect);\n cloned.left = rect.left + rect.width / 2;\n cloned.top = rect.top + rect.height / 2;\n return cloned;\n }\n });\n\n const textColor = 'primary-color';\n\n emoticonsDropdown.setTextColor(textColor);\n\n emoticonsDropdown.addEventListener('closed', () => {\n emoticonsDropdown.hideAndDestroy();\n });\n\n emoticonsDropdown.onButtonClick();\n\n emojiTab.initPromise.then(() => {\n const emojiElement = Icon('star', 'super-emoji-premium-icon');\n emojiElement.style.color = `var(--${textColor})`;\n\n const category = emojiTab.getCustomCategory();\n\n emojiTab.addEmojiToCategory({\n category,\n element: emojiElement,\n batch: false,\n prepend: true\n // active: !iconEmojiId\n });\n\n // if(iconEmojiId) {\n // emojiTab.setActive({docId: iconEmojiId, emoji: ''});\n // }\n });\n });\n\n const wrapStatus = async(middleware: Middleware) => {\n const user = apiManagerProxy.getUser(rootScope.myId.toUserId());\n const emojiStatus = user.emoji_status as EmojiStatus.emojiStatus;\n if(!emojiStatus) {\n statusBtnIcon.replaceChildren();\n replaceButtonIcon(statusBtnIcon, 'star');\n return;\n }\n\n fireOnNew && ReactionElement.fireAroundAnimation({\n middleware: statusMiddlewareHelper?.get() || this.getMiddleware(),\n reaction: {\n _: 'reactionCustomEmoji',\n document_id: emojiStatus.document_id\n },\n sizes: {\n genericEffect: 26,\n genericEffectSize: 100,\n size: 22 + 18,\n effectSize: 80\n },\n stickerContainer: statusBtnIcon,\n cache: statusBtnIcon as any,\n textColor: 'primary-color'\n });\n\n fireOnNew = false;\n\n const container = await wrapEmojiStatus({\n wrapOptions: {\n middleware\n },\n emojiStatus,\n size: makeMediaSize(24, 24)\n });\n\n container.classList.replace('emoji-status', 'sidebar-emoji-status-emoji');\n\n statusBtnIcon.replaceChildren(container);\n };\n\n const onPremium = async(isPremium: boolean) => {\n premiumMiddlewareHelper.clean();\n const middleware = premiumMiddlewareHelper.get();\n if(isPremium) {\n await wrapStatus((statusMiddlewareHelper = middleware.create()).get());\n if(!middleware()) return;\n sidebarHeader.append(statusBtnIcon);\n\n const onEmojiStatusChange = () => {\n const oldStatusMiddlewareHelper = statusMiddlewareHelper;\n wrapStatus((statusMiddlewareHelper = middleware.create()).get())\n .finally(() => {\n oldStatusMiddlewareHelper.destroy();\n });\n };\n\n rootScope.addEventListener('emoji_status_change', onEmojiStatusChange);\n\n middleware.onClean(() => {\n rootScope.removeEventListener('emoji_status_change', onEmojiStatusChange);\n });\n } else {\n statusBtnIcon.remove();\n }\n\n appDialogsManager.resizeStoriesList?.();\n };\n\n appImManager.addEventListener('premium_toggle', onPremium);\n if(rootScope.premium) onPremium(true);\n\n this.managers.appUsersManager.getTopPeers('correspondents');\n\n // Focus search input by pressing Escape\n const navigationItem: NavigationItem = {\n type: 'global-search-focus',\n onPop: () => {\n setTimeout(() => {\n this.inputSearch.input.focus();\n }, 0);\n\n return false;\n },\n noHistory: true\n };\n appNavigationController.pushItem(navigationItem);\n\n apiManagerProxy.getState().then((state) => {\n if(!state.keepSigned) {\n return;\n }\n\n const CHECK_UPDATE_INTERVAL = 1800e3;\n const checkUpdateInterval = setInterval(() => {\n fetch('version', {cache: 'no-cache'})\n .then((res) => (res.status === 200 && res.ok && res.text()) || Promise.reject())\n .then((text) => {\n if(text !== App.versionFull) {\n this.hasUpdate = true;\n clearInterval(checkUpdateInterval);\n\n if(!this.newBtnMenu.classList.contains('is-hidden')) {\n this.updateBtn.classList.remove('is-hidden');\n }\n }\n })\n .catch(noop);\n }, CHECK_UPDATE_INTERVAL);\n });\n\n const onResize = () => {\n const rect = this.rect = this.tabsContainer.getBoundingClientRect();\n document.documentElement.style.setProperty('--left-column-width', rect.width + 'px');\n };\n\n fastRaf(onResize);\n mediaSizes.addEventListener('resize', onResize);\n }\n\n private initSearch() {\n const searchContainer = this.sidebarEl.querySelector('#search-container') as HTMLDivElement;\n\n const scrollable = new Scrollable(searchContainer);\n\n const close = () => {\n // setTimeout(() => {\n simulateClickEvent(this.backBtn);\n // }, 0);\n };\n\n this.searchGroups = {\n contacts: new SearchGroup('SearchAllChatsShort', 'contacts', undefined, undefined, undefined, undefined, close),\n globalContacts: new SearchGroup('GlobalSearch', 'contacts', undefined, undefined, undefined, undefined, close),\n messages: new SearchGroup('SearchMessages', 'messages'),\n people: new SearchGroup(false, 'contacts', true, 'search-group-people', true, false, close, true),\n recent: new SearchGroup('Recent', 'contacts', true, 'search-group-recent', true, true, close)\n };\n\n const searchSuper = this.searchSuper = new AppSearchSuper({\n mediaTabs: [{\n inputFilter: 'inputMessagesFilterEmpty',\n name: 'FilterChats',\n type: 'chats'\n }, {\n inputFilter: 'inputMessagesFilterPhotoVideo',\n name: 'SharedMediaTab2',\n type: 'media'\n }, {\n inputFilter: 'inputMessagesFilterUrl',\n name: 'SharedLinksTab2',\n type: 'links'\n }, {\n inputFilter: 'inputMessagesFilterDocument',\n name: 'SharedFilesTab2',\n type: 'files'\n }, {\n inputFilter: 'inputMessagesFilterMusic',\n name: 'SharedMusicTab2',\n type: 'music'\n }, {\n inputFilter: 'inputMessagesFilterRoundVoice',\n name: 'SharedVoiceTab2',\n type: 'voice'\n }],\n scrollable,\n searchGroups: this.searchGroups,\n asChatList: true,\n hideEmptyTabs: false,\n showSender: true,\n managers: this.managers\n });\n\n searchContainer.prepend(searchSuper.nav.parentElement.parentElement);\n scrollable.append(searchSuper.container);\n\n const resetSearch = () => {\n searchSuper.setQuery({\n peerId: ''.toPeerId(),\n folderId: 0\n });\n searchSuper.selectTab(0);\n searchSuper.load(true);\n };\n\n resetSearch();\n\n const pickedElements: HTMLElement[] = [];\n let selectedPeerId: PeerId = ''.toPeerId();\n let selectedMinDate = 0;\n let selectedMaxDate = 0;\n const updatePicked = () => {\n // (this.inputSearch.input as HTMLInputElement).placeholder = pickedElements.length ? 'Search' : 'Telegram Search';\n this.inputSearch.container.classList.toggle('is-picked-twice', pickedElements.length === 2);\n this.inputSearch.container.classList.toggle('is-picked', !!pickedElements.length);\n pickedElements.forEach((element, idx) => {\n element.classList.remove('is-first', 'is-last');\n element.classList.add(idx === 0 ? 'is-first' : 'is-last');\n });\n\n if(pickedElements.length) {\n this.inputSearch.input.style.setProperty(\n '--paddingLeft',\n (pickedElements[pickedElements.length - 1].getBoundingClientRect().right - this.inputSearch.input.getBoundingClientRect().left) + 'px'\n );\n } else {\n this.inputSearch.input.style.removeProperty('--paddingLeft');\n }\n };\n\n const helperMiddlewareHelper = this.middlewareHelper.get().create();\n const helper = document.createElement('div');\n helper.classList.add('search-helper', 'hide');\n helper.addEventListener('click', (e) => {\n const target = findUpClassName(e.target, 'selector-user');\n if(!target) {\n return;\n }\n\n const key = target.dataset.key;\n if(key.indexOf('date_') === 0) {\n const [_, minDate, maxDate] = key.split('_');\n selectedMinDate = +minDate;\n selectedMaxDate = +maxDate;\n } else {\n selectedPeerId = key.toPeerId();\n }\n\n target.addEventListener('click', () => {\n unselectEntity(target);\n });\n\n this.inputSearch.container.append(target);\n this.inputSearch.onChange(this.inputSearch.value = '');\n pickedElements.push(target);\n updatePicked();\n });\n\n searchSuper.nav.parentElement.append(helper);\n\n const renderEntity = (key: PeerId | string, title?: string | HTMLElement) => {\n return AppSelectPeers.renderEntity({\n key,\n title,\n middleware: helperMiddlewareHelper.get(),\n avatarSize: 30,\n fallbackIcon: 'calendarfilter'\n }).element;\n };\n\n const unselectEntity = (target: HTMLElement) => {\n const key = target.dataset.key;\n if(key.indexOf('date_') === 0) {\n selectedMinDate = selectedMaxDate = 0;\n } else {\n selectedPeerId = ''.toPeerId();\n }\n\n target.middlewareHelper.destroy();\n target.remove();\n indexOfAndSplice(pickedElements, target);\n\n setTimeout(() => {\n updatePicked();\n this.inputSearch.onChange(this.inputSearch.value);\n }, 0);\n };\n\n this.inputSearch.onClear = () => {\n pickedElements.forEach((el) => {\n unselectEntity(el);\n });\n\n helper.replaceChildren();\n onHelperLength();\n };\n\n const onHelperLength = (hide = !helper.firstElementChild) => {\n helper.classList.toggle('hide', hide);\n searchSuper.nav.classList.toggle('hide', !hide);\n };\n\n const appendToHelper = (elements: HTMLElement[]) => {\n helper.append(...elements);\n onHelperLength();\n };\n\n this.inputSearch.onChange = (value) => {\n searchSuper.cleanupHTML();\n searchSuper.setQuery({\n peerId: selectedPeerId,\n folderId: selectedPeerId ? undefined : 0,\n query: value,\n minDate: selectedMinDate,\n maxDate: selectedMaxDate\n });\n searchSuper.load(true);\n\n helperMiddlewareHelper.clean();\n onHelperLength(true);\n\n const promises: MaybePromise[] = [];\n\n if(!selectedMinDate && value.trim()) {\n const dates: DateData[] = [];\n fillTipDates(value, dates);\n const elements = dates.map((dateData) => {\n return renderEntity('date_' + dateData.minDate + '_' + dateData.maxDate, dateData.title);\n });\n\n promises.push(elements);\n }\n\n if(!selectedPeerId && value.trim()) {\n const middleware = searchSuper.middleware.get();\n const promise = Promise.all([\n this.managers.dialogsStorage.getDialogs({query: value}).then(({dialogs}) => dialogs.map((d) => d.peerId)),\n this.managers.appUsersManager.getContactsPeerIds(value, true)\n ]).then((results) => {\n if(!middleware()) return;\n const peerIds = new Set(results[0].concat(results[1]).slice(0, 20));\n\n return [...peerIds].map((peerId) => renderEntity(peerId));\n });\n\n promises.push(promise);\n }\n\n Promise.all(promises).then((arrays) => {\n helper.replaceChildren();\n const flattened = flatten(arrays);\n appendToHelper(flattened);\n });\n };\n\n searchSuper.tabs.inputMessagesFilterEmpty.addEventListener('mousedown', (e) => {\n const target = findUpTag(e.target, DIALOG_LIST_ELEMENT_TAG) as HTMLElement;\n if(!target) {\n return;\n }\n\n const searchGroup = findUpClassName(target, 'search-group');\n if(!searchGroup || searchGroup.classList.contains('search-group-recent') || searchGroup.classList.contains('search-group-people')) {\n return;\n }\n\n const peerId = target.getAttribute('data-peer-id').toPeerId();\n this.managers.appUsersManager.pushRecentSearch(peerId);\n }, {capture: true});\n\n const peopleContainer = document.createElement('div');\n peopleContainer.classList.add('search-group-scrollable');\n peopleContainer.append(this.searchGroups.people.list);\n this.searchGroups.people.container.append(peopleContainer);\n const peopleScrollable = new ScrollableX(peopleContainer);\n\n let first = true;\n let hideNewBtnMenuTimeout: number;\n // const transition = Transition.bind(null, searchContainer.parentElement, 150);\n const transition = TransitionSlider({\n content: searchContainer.parentElement,\n type: 'zoom-fade',\n transitionTime: 150,\n onTransitionStart: (id) => {\n searchContainer.parentElement.parentElement.classList.toggle('is-search-active', id === 1);\n },\n onTransitionEnd: (id) => {\n if(hideNewBtnMenuTimeout) clearTimeout(hideNewBtnMenuTimeout);\n\n if(id === 0 && !first) {\n searchSuper.selectTab(0, false);\n this.inputSearch.onClearClick();\n hideNewBtnMenuTimeout = window.setTimeout(() => {\n hideNewBtnMenuTimeout = 0;\n this.newBtnMenu.classList.remove('is-hidden');\n this.hasUpdate && this.updateBtn.classList.remove('is-hidden');\n }, 150);\n }\n\n first = false;\n }\n });\n\n transition(0);\n\n const activeClassName = 'is-visible';\n const onFocus = () => {\n this.toolsBtn.classList.remove(activeClassName);\n this.backBtn.classList.add(activeClassName);\n this.newBtnMenu.classList.add('is-hidden');\n this.updateBtn.classList.add('is-hidden');\n this.toolsBtn.parentElement.firstElementChild.classList.toggle('state-back', true);\n\n const navigationType: NavigationItem['type'] = 'global-search';\n if(!IS_MOBILE_SAFARI && !appNavigationController.findItemByType(navigationType)) {\n appNavigationController.pushItem({\n onPop: () => {\n close();\n },\n type: navigationType\n });\n }\n\n transition(1);\n };\n\n this.inputSearch.input.addEventListener('focus', onFocus);\n onFocus();\n\n attachClickEvent(this.backBtn, (e) => {\n this.toolsBtn.classList.add(activeClassName);\n this.backBtn.classList.remove(activeClassName);\n this.toolsBtn.parentElement.firstElementChild.classList.toggle('state-back', false);\n\n appNavigationController.removeByType('global-search');\n\n transition(0);\n });\n\n const clearRecentSearchBtn = ButtonIcon('close');\n this.searchGroups.recent.nameEl.append(clearRecentSearchBtn);\n clearRecentSearchBtn.addEventListener('click', () => {\n confirmationPopup({\n descriptionLangKey: 'Search.Confirm.ClearHistory',\n button: {\n langKey: 'ClearButton',\n isDanger: true\n }\n }).then(() => {\n return this.managers.appUsersManager.clearRecentSearch().then(() => {\n this.searchGroups.recent.clear();\n });\n });\n });\n }\n}\n\nexport class SettingChatListSection extends SettingSection {\n public sortedList: SortedUserList;\n\n constructor(options: SettingSectionOptions & {sortedList: SortedUserList}) {\n super(options);\n\n this.sortedList = options.sortedList;\n\n this.content.append(this.sortedList.list);\n }\n\n public makeButton(options: ButtonOptions) {\n const button = Button('folder-category-button btn btn-primary btn-transparent', options);\n if(this.title) this.content.insertBefore(button, this.title.nextSibling);\n else this.content.prepend(button);\n return button;\n }\n}\n\nconst appSidebarLeft = new AppSidebarLeft();\nMOUNT_CLASS_TO.appSidebarLeft = appSidebarLeft;\nexport default appSidebarLeft;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport generatePathData from '../../helpers/generatePathData';\nimport {FormatterArguments, i18n, LangPackKey} from '../../lib/langPack';\nimport Icon from '../icon';\n\nexport default class ChatDragAndDrop {\n container: HTMLDivElement;\n svg: SVGSVGElement;\n outlineWrapper: HTMLDivElement;\n path: SVGPathElement;\n\n constructor(appendTo: HTMLElement, private options: {\n icon?: Icon,\n header: LangPackKey,\n headerArgs?: FormatterArguments,\n subtitle?: LangPackKey,\n onDrop: (e: DragEvent) => void\n }) {\n this.container = document.createElement('div');\n this.container.classList.add('drop', 'z-depth-1');\n\n this.outlineWrapper = document.createElement('div');\n this.outlineWrapper.classList.add('drop-outline-wrapper');\n\n this.svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg');\n this.svg.classList.add('drop-outline');\n\n this.path = document.createElementNS('http://www.w3.org/2000/svg', 'path');\n this.path.classList.add('drop-outline-path');\n\n let dropIcon: HTMLElement;\n if(options.icon) {\n dropIcon = document.createElement('div');\n dropIcon.classList.add('drop-icon');\n dropIcon.append(Icon(options.icon));\n this.container.classList.add('has-icon');\n }\n\n const dropHeader = document.createElement('div');\n dropHeader.classList.add('drop-header');\n dropHeader.append(i18n(options.header, options.headerArgs));\n\n let dropSubtitle: HTMLElement;\n if(options.subtitle) {\n dropSubtitle = document.createElement('div');\n dropSubtitle.classList.add('drop-subtitle');\n dropSubtitle.append(i18n(options.subtitle));\n }\n\n this.svg.append(this.path);\n this.outlineWrapper.append(this.svg);\n\n this.container.append(...[dropIcon, dropHeader, dropSubtitle, this.outlineWrapper].filter(Boolean));\n appendTo.append(this.container);\n\n this.container.addEventListener('dragover', this.onDragOver);\n this.container.addEventListener('dragleave', this.onDragLeave);\n this.container.addEventListener('drop', this.onDrop);\n }\n\n onDragOver = (e: DragEvent) => {\n this.container.classList.add('is-dragover');\n // SetTransition(this.container, 'is-dragover', true, 500);\n };\n\n onDragLeave = (e: DragEvent) => {\n this.container.classList.remove('is-dragover');\n // SetTransition(this.container, 'is-dragover', false, 500);\n };\n\n onDrop = (e: DragEvent) => {\n this.options.onDrop(e);\n };\n\n destroy() {\n delete this.options;\n this.container.remove();\n this.container.removeEventListener('dragover', this.onDragOver);\n this.container.removeEventListener('dragleave', this.onDragLeave);\n this.container.removeEventListener('drop', this.onDrop);\n }\n\n setPath() {\n const rect = this.outlineWrapper.getBoundingClientRect();\n this.svg.setAttributeNS(null, 'preserveAspectRatio', 'none');\n this.svg.setAttributeNS(null, 'viewBox', `0 0 ${rect.width} ${rect.height}`);\n this.svg.setAttributeNS(null, 'width', `${rect.width}`);\n this.svg.setAttributeNS(null, 'height', `${rect.height}`);\n\n const radius = 10;\n // const strokeWidth = 2;\n const sizeX = rect.width - radius;\n const sizeY = rect.height - radius;\n const pos = radius / 2;\n const d = generatePathData(pos, pos, sizeX, sizeY, radius, radius, radius, radius);\n this.path.setAttributeNS(null, 'd', d);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {doubleRaf} from '../schedulers';\n\nexport default function disableTransition(elements: HTMLElement[]) {\n elements.forEach((el) => el.classList.add('no-transition'));\n\n doubleRaf().then(() => {\n elements.forEach((el) => el.classList.remove('no-transition'));\n });\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nexport const MAX_SPEED = 8.2;\nexport const MIN_SPEED = 0.8;\n\n// import { MIN_SPEED, MAX_SPEED } from './BlobDrawable';\n\ntype Radius = number[];\n\nexport default class LineBlobDrawable {\n public maxRadius: number;\n public minRadius: number;\n private N: number;\n private radius: Radius;\n private radiusNext: Radius;\n private progress: number[];\n private speed: number[];\n\n constructor(n: number) {\n this.maxRadius = 10;\n this.minRadius = 0;\n\n this.N = n;\n this.radius = new Array(n + 1);\n\n this.radiusNext = new Array(n + 1);\n this.progress = new Array(n + 1);\n this.speed = new Array(n + 1);\n\n for(let i = 0; i <= n; i++) {\n this.generateBlob(this.radius, i);\n this.generateBlob(this.radiusNext, i);\n this.progress[i] = 0;\n }\n }\n\n private generateBlob(radius: Radius, i: number) {\n const {maxRadius, minRadius, speed} = this;\n\n const radDif = maxRadius - minRadius;\n radius[i] = minRadius + Math.random() * radDif;\n speed[i] = 0.017 + 0.003 * Math.random();\n }\n\n private generateNextBlob() {\n const {radius, radiusNext, progress, N} = this;\n for(let i = 0; i < N; i++) {\n this.generateBlob(radius, i);\n this.generateBlob(radiusNext, i);\n progress[i] = 0.0;\n }\n }\n\n public update(amplitude: number, speedScale: number) {\n const {N, progress, speed, radius, radiusNext} = this;\n for(let i = 0; i <= N; i++) {\n progress[i] += (speed[i] * MIN_SPEED) + amplitude * speed[i] * MAX_SPEED * speedScale;\n if(progress[i] >= 1.0) {\n progress[i] = 0.0;\n radius[i] = radiusNext[i];\n this.generateBlob(radiusNext, i);\n }\n }\n }\n\n public draw(left: number, top: number, right: number, bottom: number, canvas: HTMLCanvasElement, paint: (ctx: CanvasRenderingContext2D) => void, pinnedTop: number, progressToPinned: number) {\n if(canvas.getContext) {\n const ctx = canvas.getContext('2d');\n // ctx.globalAlpha = 0.5;\n // ctx.lineWidth = 1;\n\n ctx.beginPath();\n ctx.moveTo(right, bottom);\n ctx.lineTo(left, bottom);\n\n const {radius, radiusNext, N} = this;\n for(let i = 0; i <= N; i++) {\n if(i === 0) {\n const progress = this.progress[i];\n const r1 = radius[i] * (1.0 - progress) + radiusNext[i] * progress;\n const y = (top - r1) * progressToPinned + pinnedTop * (1.0 - progressToPinned);\n ctx.lineTo(left, y);\n } else {\n const progress = this.progress[i - 1];\n const r1 = radius[i - 1] * (1.0 - progress) + radiusNext[i - 1] * progress;\n const progressNext = this.progress[i];\n const r2 = radius[i] * (1.0 - progressNext) + radiusNext[i] * progressNext;\n const x1 = (right - left) / N * (i - 1);\n const x2 = (right - left) / N * i;\n const cx = x1 + (x2 - x1) / 2;\n\n const y1 = (top - r1) * progressToPinned + pinnedTop * (1.0 - progressToPinned);\n const y2 = (top - r2) * progressToPinned + pinnedTop * (1.0 - progressToPinned);\n ctx.bezierCurveTo(cx, y1, cx, y2, x2, y2);\n if(i === N) {\n ctx.lineTo(right, bottom);\n }\n }\n }\n\n // ctx.scale(1.0, 1.0);\n paint(ctx);\n ctx.fill();\n ctx.closePath();\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport CALL_STATE from '../lib/calls/callState';\nimport GROUP_CALL_STATE from '../lib/calls/groupCallState';\nimport RTMP_STATE from '../lib/calls/rtmpState';\nimport LineBlobDrawable from './lineBlobDrawable';\n\ntype WeavingCallType = 'group' | 'call' | 'rtmp';\ntype WeavingCallState = GROUP_CALL_STATE | CALL_STATE | RTMP_STATE;\n\nexport class WeavingState {\n public shader: (ctx: CanvasRenderingContext2D, left: number, top: number, right: number, bottom: number) => void;\n\n constructor(public type: WeavingCallType, public state: WeavingCallState) {\n this.createGradient();\n }\n\n private createGradient() {\n this.shader = (ctx, left, top, right, bottom) => {\n ctx.fillStyle = WeavingState.getGradientFromType(ctx, this.type, this.state, left, top, right, bottom);\n };\n }\n\n update(height: number, width: number, dt: number, amplitude: number) {\n // TODO: move gradient here\n }\n\n public static createStates(type: WeavingCallType, states: WeavingCallState[]) {\n return states.map((state) => [state, new WeavingState(type, state)] as const);\n }\n\n public static getGradientFromType(ctx: CanvasRenderingContext2D, type: WeavingCallType, state: WeavingCallState, x0: number, y0: number, x1: number, y1: number) {\n const gradient = ctx.createLinearGradient(x0, y0, x1, y1);\n\n type ColorStop = [offset: number, color: string];\n type ColorStops = ColorStop[];\n\n const MUTED_BY_ADMIN_STOPS: ColorStops = [[0, '#F05459'], [.4, '#766EE9'], [1, '#57A4FE']];\n const UNMUTED_STOPS: ColorStops = [[0, '#52CE5D'], [1, '#00B1C0']];\n const MUTED_STOPS: ColorStops = [[0, '#0976E3'], [1, '#2BCEFF']];\n const CONNECTING_STOPS: ColorStops = [[0, '#8599aa'], [1, '#8599aa']];\n const RTMP_STOPS: ColorStops = [[0, '#4588E3'], [.5, '#976FFF'], [1, '#E46ACE']];\n\n const map: {[key in WeavingCallType]?: [states: WeavingCallState[], stops: ColorStops][]} = {\n group: [\n [[GROUP_CALL_STATE.MUTED_BY_ADMIN], MUTED_BY_ADMIN_STOPS],\n [[GROUP_CALL_STATE.UNMUTED], UNMUTED_STOPS],\n [[GROUP_CALL_STATE.MUTED], MUTED_STOPS],\n [[GROUP_CALL_STATE.CONNECTING], CONNECTING_STOPS]\n ],\n rtmp: [\n [[RTMP_STATE.PLAYING], RTMP_STOPS],\n [[RTMP_STATE.BUFFERING, RTMP_STATE.CONNECTING], CONNECTING_STOPS]\n ]\n };\n\n const a = map[type];\n for(const [states, colors] of a) {\n if(states.includes(state)) {\n for(const [offset, color] of colors) {\n gradient.addColorStop(offset, color);\n }\n return gradient;\n }\n }\n }\n}\n\nexport default class TopbarWeave {\n private focused: boolean;\n private resizing: boolean;\n private lastUpdateTime: number;\n private amplitude: number;\n private amplitude2: number;\n\n private allStates: Map>;\n private type: WeavingCallType;\n private previousState: WeavingState;\n private currentState: WeavingState;\n private progressToState: number;\n\n private scale: number;\n private left: number;\n private top: number;\n private right: number;\n private bottom: number;\n\n private mounted: boolean;\n private media: MediaQueryList;\n\n private container: HTMLDivElement;\n private canvas: HTMLCanvasElement;\n\n private resizeHandler: number;\n private raf: number;\n\n private lbd: LineBlobDrawable;\n private lbd1: LineBlobDrawable;\n private lbd2: LineBlobDrawable;\n\n private animateToAmplitude: number;\n private animateAmplitudeDiff: number;\n private animateAmplitudeDiff2: number;\n\n constructor() {\n this.focused = true;\n this.resizing = false;\n this.lastUpdateTime = Date.now();\n this.amplitude = 0.0;\n this.amplitude2 = 0.0;\n\n const s: [WeavingCallType, WeavingCallState[]][] = [\n ['group', [\n GROUP_CALL_STATE.UNMUTED,\n GROUP_CALL_STATE.MUTED,\n GROUP_CALL_STATE.MUTED_BY_ADMIN,\n GROUP_CALL_STATE.CONNECTING\n ]],\n ['rtmp', [\n RTMP_STATE.PLAYING,\n RTMP_STATE.BUFFERING,\n RTMP_STATE.CONNECTING\n ]]\n ];\n\n this.allStates = new Map(s.map(([type, states]) => [type, new Map(WeavingState.createStates(type, states))]));\n\n this.type = 'group';\n this.previousState = null;\n this.currentState = this.states.get(GROUP_CALL_STATE.CONNECTING);\n this.progressToState = 1.0;\n }\n\n private get states() {\n return this.allStates.get(this.type);\n }\n\n public componentDidMount() {\n if(this.mounted) {\n return;\n }\n\n this.mounted = true;\n // window.addEventListener('blur', this.handleBlur);\n // window.addEventListener('focus', this.handleFocus);\n window.addEventListener('resize', this.handleResize);\n this.media = window.matchMedia('screen and (min-resolution: 2dppx)');\n this.media.addEventListener('change', this.handleDevicePixelRatioChanged);\n\n this.setSize();\n this.forceUpdate();\n\n this.lbd = new LineBlobDrawable(3);\n this.lbd1 = new LineBlobDrawable(7);\n this.lbd2 = new LineBlobDrawable(8);\n this.setAmplitude(this.amplitude);\n\n this.draw();\n }\n\n public componentWillUnmount() {\n this.mounted = false;\n // window.removeEventListener('blur', this.handleBlur);\n // window.removeEventListener('focus', this.handleFocus);\n window.removeEventListener('resize', this.handleResize);\n this.media.removeEventListener('change', this.handleDevicePixelRatioChanged);\n\n const {canvas} = this;\n const ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n }\n\n private setSize() {\n this.scale = window.devicePixelRatio;\n this.top = 20 * this.scale;\n this.right = (this.mounted ? this.container.offsetWidth : 1261) * this.scale;\n this.bottom = (this.mounted ? this.container.offsetHeight : 68) * this.scale;\n this.left = 0 * this.scale;\n this.setCanvasSize();\n }\n\n private setCanvasSize() {\n this.canvas.width = this.right;\n this.canvas.height = this.bottom;\n }\n\n private handleDevicePixelRatioChanged = (e: Event) => {\n this.setSize();\n this.forceUpdate();\n }\n\n private handleResize = () => {\n if(this.resizeHandler) {\n clearTimeout(this.resizeHandler);\n this.resizeHandler = null;\n }\n\n this.resizing = true;\n this.resizeCanvas();\n this.resizeHandler = window.setTimeout(() => {\n this.resizing = false;\n this.invokeDraw();\n }, 250);\n }\n\n private resizeCanvas() {\n this.scale = window.devicePixelRatio;\n this.right = this.container.offsetWidth * this.scale;\n\n this.forceUpdate();\n this.invokeDraw();\n }\n\n public handleFocus = () => {\n this.focused = true;\n this.invokeDraw();\n }\n\n public handleBlur = () => {\n this.focused = false;\n }\n\n private invokeDraw = () => {\n if(this.raf) return;\n\n this.draw();\n }\n\n private draw = (force = false) => {\n this.raf = null;\n if(!this.mounted) {\n return;\n }\n const {lbd, lbd1, lbd2, scale, left, top, right, bottom, currentState, previousState, focused, resizing, canvas} = this;\n if(!focused && !resizing && this.progressToState >= 1.0) {\n return;\n }\n\n // console.log('[top] draw', [focused, resizing, this.mounted]);\n\n const newTime = Date.now();\n let dt = (newTime - this.lastUpdateTime);\n if(dt > 20) {\n dt = 17;\n }\n\n // console.log('draw start', this.amplitude, this.animateToAmplitude);\n if(this.animateToAmplitude !== this.amplitude) {\n this.amplitude += this.animateAmplitudeDiff * dt;\n if(this.animateAmplitudeDiff > 0) {\n if(this.amplitude > this.animateToAmplitude) {\n this.amplitude = this.animateToAmplitude;\n }\n } else {\n if(this.amplitude < this.animateToAmplitude) {\n this.amplitude = this.animateToAmplitude;\n }\n }\n }\n\n if(this.animateToAmplitude !== this.amplitude2) {\n this.amplitude2 += this.animateAmplitudeDiff2 * dt;\n if(this.animateAmplitudeDiff2 > 0) {\n if(this.amplitude2 > this.animateToAmplitude) {\n this.amplitude2 = this.animateToAmplitude;\n }\n } else {\n if(this.amplitude2 < this.animateToAmplitude) {\n this.amplitude2 = this.animateToAmplitude;\n }\n }\n }\n\n if(previousState) {\n this.progressToState += dt / 250;\n if(this.progressToState > 1) {\n this.progressToState = 1;\n this.previousState = null;\n }\n }\n\n const {amplitude, amplitude2, progressToState} = this;\n\n const top1 = 6 * amplitude2 * scale;\n const top2 = 6 * amplitude2 * scale;\n\n const ctx = canvas.getContext('2d');\n ctx.clearRect(0, 0, canvas.width, canvas.height);\n\n lbd.minRadius = 0;\n lbd.maxRadius = (2 + 2 * amplitude) * scale;\n lbd1.minRadius = 0;\n lbd1.maxRadius = (3 + 9 * amplitude) * scale;\n lbd2.minRadius = 0;\n lbd2.maxRadius = (3 + 9 * amplitude) * scale;\n\n lbd.update(amplitude, 0.3);\n lbd1.update(amplitude, 0.7);\n lbd2.update(amplitude, 0.7);\n\n for(let i = 0; i < 2; i++) {\n if(i === 0 && !previousState) {\n continue;\n }\n\n let alpha = 1;\n let state: WeavingState;\n if(i === 0) {\n alpha = 1 - progressToState;\n state = previousState;\n // previousState.setToPaint(paint);\n } else {\n alpha = previousState ? progressToState : 1;\n currentState.update(bottom - top, right - left, dt, amplitude);\n state = currentState;\n // currentState.setToPaint(paint);\n }\n\n const paint1 = (ctx: CanvasRenderingContext2D) => {\n ctx.globalAlpha = 0.3 * alpha;\n state.shader(ctx, left, top, right, bottom);\n };\n const paint = (ctx: CanvasRenderingContext2D) => {\n ctx.globalAlpha = i === 0 ? 1 : alpha;\n state.shader(ctx, left, top, right, bottom);\n };\n\n lbd1.draw(left, top - top1, right, bottom, canvas, paint1, top, 1.0);\n lbd2.draw(left, top - top2, right, bottom, canvas, paint1, top, 1.0);\n lbd.draw(left, top, right, bottom, canvas, paint, top, 1.0);\n }\n\n if(!force) {\n this.raf = requestAnimationFrame(() => this.draw());\n }\n };\n\n public setCurrentState = (type: WeavingCallType, state: WeavingCallState, animated: boolean) => {\n const {currentState} = this;\n\n if(currentState?.state === state && currentState.type === type) {\n return;\n }\n\n this.type = type;\n this.previousState = animated ? currentState : null;\n this.currentState = this.states.get(state);\n this.progressToState = this.previousState ? 0.0 : 1.0;\n };\n\n public setAmplitude(value: number) {\n const {amplitude} = this;\n this.animateToAmplitude = value;\n this.animateAmplitudeDiff = (value - amplitude) / 250;\n this.animateAmplitudeDiff2 = (value - amplitude) / 120;\n }\n\n private forceUpdate() {\n this.setCanvasSize();\n }\n\n public render(className: string) {\n const container = this.container = document.createElement('div');\n container.classList.add(className);\n\n const canvas = this.canvas = document.createElement('canvas');\n canvas.classList.add(className + '-canvas');\n\n container.append(canvas);\n\n return container;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport liteMode from '../../helpers/liteMode';\nimport noop from '../../helpers/noop';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport rootScope from '../rootScope';\nimport lottieLoader, {LottieAssetName} from './lottieLoader';\nimport type RLottiePlayer from './rlottiePlayer';\nimport {RLottieColor} from './rlottiePlayer';\n\nexport type RLottieIconOptions = {\n width: number,\n height: number,\n container?: HTMLElement,\n skipAnimation?: boolean\n};\n\nexport type RLottieIconItemPartOptions = {\n startFrame: number,\n endFrame: number,\n name?: string\n};\n\nexport type RLottieIconItemOptions = {\n name: LottieAssetName,\n parts: RLottieIconItemPartOptions[],\n initFrame?: number,\n player?: RLottiePlayer,\n autoplay?: boolean,\n color?: RLottieColor\n};\n\nexport class RLottieIconItemPart implements RLottieIconItemPartOptions {\n public startFrame: number;\n public endFrame: number;\n public name?: string;\n\n constructor(public item: RLottieIconItem, options: RLottieIconItemPartOptions) {\n safeAssign(this, options);\n }\n\n public play(callback?: () => void) {\n return this.item.playPart(this, callback);\n }\n}\n\n// export type RLottieIconItemPart = RLottieIconItemPartOptions;\n\nexport class RLottieIconItem implements RLottieIconItemOptions {\n public name: LottieAssetName;\n public parts: RLottieIconItemPart[];\n public player: RLottiePlayer;\n public initFrame: number;\n public autoplay: boolean;\n public color: RLottieColor;\n public loadPromise: Promise;\n public onLoadForPart: () => void;\n public onLoadForColor: () => void;\n\n constructor(public icon: RLottieIcon, options: RLottieIconItemOptions) {\n this.autoplay = false;\n\n safeAssign(this, options);\n\n this.parts = this.parts.map((options) => this.createPart(options));\n }\n\n public load() {\n let loadPromise = this.loadPromise;\n if(loadPromise) {\n return loadPromise;\n }\n\n const {container, canvas, width, height} = this.icon;\n loadPromise = lottieLoader.loadAnimationAsAsset({\n container,\n canvas,\n width,\n height,\n group: 'none',\n loop: false,\n autoplay: this.autoplay ?? false,\n initFrame: this.initFrame,\n skipFirstFrameRendering: this.initFrame === undefined,\n color: this.color\n }, this.name).then((player) => {\n return lottieLoader.waitForFirstFrame(player);\n }).then((player) => {\n this.player = player;\n\n if(this.onLoadForColor) {\n this.onLoadForColor();\n this.onLoadForColor = undefined;\n }\n\n if(this.onLoadForPart) {\n this.onLoadForPart();\n this.onLoadForPart = undefined;\n }\n });\n\n this.loadPromise = loadPromise;\n this.icon.loadPromises.set(this.name, loadPromise);\n return loadPromise;\n }\n\n public createPart(options: RLottieIconItemPartOptions) {\n return new RLottieIconItemPart(this, options);\n }\n\n public getPart(index: string | number | RLottieIconItemPart) {\n if(index instanceof RLottieIconItemPart) return index;\n else if(typeof(index) === 'string') return this.parts.find((part) => part.name === index);\n else return this.parts[index];\n }\n\n public playPart(part: RLottieIconItemPart, callback?: () => void) {\n return this.icon.playPart(this, part, callback);\n }\n}\n\nexport default class RLottieIcon {\n public container: HTMLElement;\n public canvas: HTMLCanvasElement;\n public width: number;\n public height: number;\n\n protected items: Map;\n public loadPromises: Map>;\n\n protected skipAnimation: boolean;\n\n constructor(options: RLottieIconOptions) {\n safeAssign(this, options);\n\n if(!this.container) this.container = document.createElement('div');\n this.container.classList.add('rlottie-icon');\n\n const {width, height} = this;\n this.container.style.width = width + 'px';\n this.container.style.height = height + 'px';\n\n const canvas = this.canvas = document.createElement('canvas');\n canvas.classList.add('rlottie');\n canvas.width = width;\n canvas.height = height;\n\n this.items = new Map();\n this.loadPromises = new Map();\n }\n\n public get loadPromise() {\n return Promise.all([...this.loadPromises.values()]).then(noop);\n }\n\n public getItem(name?: LottieAssetName): RLottieIconItem {\n return !name && this.items.size === 1 ? this.items.values().next().value : this.items.get(name);\n }\n\n public add(options: Omit) {\n const item = new RLottieIconItem(this, options);\n this.items.set(options.name, item);\n\n return item;\n }\n\n public playPart(item: RLottieIconItem, index: Parameters[0], callback?: () => void) {\n if(!item.player) {\n item.onLoadForPart = () => {\n this.playPart(item, index, callback);\n };\n\n return;\n }\n\n const part = item.getPart(index);\n item.player.playPart({\n from: liteMode.isAvailable('animations') && !this.skipAnimation ? part.startFrame : part.endFrame,\n to: part.endFrame,\n callback\n });\n }\n\n /* public playToPart(item: RLottieIconItem, index: Parameters[0], toEnd: boolean) {\n if(!item.player) return;\n const part = item.getPart(index);\n const toFrame = toEnd ? part.endFrame : part.startFrame;\n item.player.playToFrame({\n frame: toFrame\n });\n } */\n\n public static generateEqualParts(length: number, frameCount: number): RLottieIconItemPartOptions[] {\n return new Array(length).fill(0).map((_, idx) => {\n const startFrame = idx * frameCount;\n return {startFrame, endFrame: startFrame + frameCount - 1};\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport noop from '../helpers/noop';\nimport safeAssign from '../helpers/object/safeAssign';\nimport {LottieAssetName} from '../lib/rlottie/lottieLoader';\nimport RLottieIcon, {RLottieIconItemPartOptions, RLottieIconItemPart} from '../lib/rlottie/rlottieIcon';\nimport {RLottieColor} from '../lib/rlottie/rlottiePlayer';\n\nexport type SuperRLottieIconAddItemOptions = {name: LottieAssetName, parts: RLottieIconItemPartOptions};\nexport type SuperRLottieIconGetInfoResult = RLottieIconItemPart;\nexport class SuperRLottieIcon extends RLottieIcon {\n protected getPart: (state: Options['PartState'], prevState?: Options['PartState']) => SuperRLottieIconGetInfoResult;\n protected getColor?: (state: Options['ColorState'], prevState?: Options['ColorState']) => RLottieColor;\n\n protected partState: Options['PartState'];\n protected colorState: Options['ColorState'];\n protected loaded: boolean;\n\n constructor(options: {\n width: number,\n height: number,\n skipAnimation?: boolean,\n getPart: (state: Options['PartState'], prevState?: Options['PartState']) => SuperRLottieIconGetInfoResult,\n getColor?: (state: Options['ColorState'], prevState?: Options['ColorState']) => RLottieColor,\n }) {\n super({\n width: options.width,\n height: options.height\n });\n\n safeAssign(this, options);\n\n // hook the first call\n /* const originalFunction = this.setState.bind(this);\n this.setState = (partState, colorState) => {\n this.setState = originalFunction;\n this.load(partState, colorState);\n return originalFunction(partState, colorState);\n }; */\n }\n\n public load(partState: Options['PartState'], colorState?: Options['ColorState']) {\n if(this.loaded) {\n return this.loadPromise;\n }\n\n this.loaded = true;\n this.partState = partState;\n this.colorState = colorState;\n\n const part = this.getPart(partState);\n const color = colorState !== undefined && this.getColor && this.getColor(colorState);\n\n const item = part.item;\n item.initFrame = part.endFrame;\n item.color = color;\n\n const promises = [...this.items.values()].map((item) => item.load());\n return Promise.all(promises).then(noop);\n }\n\n /**\n * Will redirect setting color state to part callback to synchronize the rendering\n */\n public setState(partState: Options['PartState'], colorState?: Options['ColorState'], partCallback?: () => void) {\n if(!this.loaded) this.load(partState, colorState);\n\n let changedPartState = false, changedColorState = false;\n if(partState !== undefined) changedPartState = this.setPartState(partState, colorState, partCallback);\n else if(colorState !== undefined) changedColorState = this.setColorState(colorState);\n\n return changedPartState || changedColorState;\n }\n\n public setPartState(state: Options['PartState'], colorState?: Options['ColorState'], callback?: () => void) {\n const {partState: prevState} = this;\n if(prevState === state) {\n return colorState !== undefined ? this.setColorState(colorState) : false;\n }\n\n if(colorState !== undefined) {\n this.setColorState(colorState, false);\n }\n\n this.partState = state;\n\n const part = this.getPart(state, prevState);\n part.play(callback);\n\n return true;\n }\n\n public setColorState(state: Options['ColorState'], renderIfPaused = true) {\n const {colorState: prevState} = this;\n if(prevState === state || !this.getColor) {\n return false;\n }\n\n this.colorState = state;\n\n const item = this.getItem();\n const color = this.getColor(state, prevState);\n const invoke = () => {\n item.player.setColor(color, renderIfPaused);\n };\n\n if(item.player) {\n invoke();\n } else {\n item.onLoadForColor = invoke;\n }\n\n return true;\n }\n\n public destroy() {\n this.items.forEach((item) => {\n item.loadPromise.then(() => {\n item.player.remove();\n });\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {RLottieIconItemPartOptions} from '../../lib/rlottie/rlottieIcon';\nimport {GROUP_CALL_MICROPHONE_BUTTON_STATE} from '.';\nimport {SuperRLottieIcon} from '../superIcon';\n\nexport default class GroupCallMicrophoneIcon extends SuperRLottieIcon<{\n PartState: GROUP_CALL_MICROPHONE_BUTTON_STATE\n}> {\n constructor() {\n super({\n width: 36,\n height: 36,\n getPart: (state, prevState) => {\n const states = GROUP_CALL_MICROPHONE_BUTTON_STATE;\n let partName: string;\n switch(state) {\n case states.HAND:\n partName = prevState === states.MUTED ? 'muted-to-hand' : 'unmuted-to-hand';\n break;\n case states.MUTED:\n partName = prevState === states.HAND ? 'hand-to-muted' : 'mute';\n break;\n case states.UNMUTED:\n partName = 'unmute';\n break;\n }\n\n return this.getItem().getPart(partName);\n }\n });\n\n const className = 'group-call-microphone-icon';\n this.container.classList.add(className + '-container');\n\n const parts: RLottieIconItemPartOptions[] = [{\n startFrame: 0,\n endFrame: 35,\n name: 'hand-to-muted'\n }, {\n startFrame: 36,\n endFrame: 68,\n name: 'unmute'\n }, {\n startFrame: 69,\n endFrame: 98,\n name: 'mute'\n }, {\n startFrame: 99,\n endFrame: 135,\n name: 'muted-to-hand'\n }, {\n startFrame: 136,\n endFrame: 172,\n name: 'unmuted-to-hand'\n }, {\n startFrame: 173,\n endFrame: 201,\n name: 'scheduled-crossing'\n }, {\n startFrame: 202,\n endFrame: 236,\n name: 'scheduled-to-muted'\n }, {\n startFrame: 237,\n endFrame: 273,\n name: 'scheduled-to-hand'\n }, {\n startFrame: 274,\n endFrame: 310,\n name: 'scheduled-crossed-to-hand'\n }, {\n startFrame: 311,\n endFrame: 343,\n name: 'scheduled-uncrossing'\n }, {\n startFrame: 344,\n endFrame: 375,\n name: 'scheduled-to-muted'\n }, {\n startFrame: 376,\n endFrame: 403,\n name: 'play-to-muted'\n }];\n\n this.add({\n name: 'voip_filled',\n parts\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport RLottieIcon from '../../lib/rlottie/rlottieIcon';\nimport {GROUP_CALL_PARTICIPANT_CLEARED_MUTED_STATE, GROUP_CALL_PARTICIPANT_MUTED_STATE, getColorByMutedState, clearMutedStateModifier} from '.';\nimport {SuperRLottieIcon} from '../superIcon';\n\nexport default class GroupCallParticipantMutedIcon extends SuperRLottieIcon<{\n PartState: GROUP_CALL_PARTICIPANT_CLEARED_MUTED_STATE,\n ColorState: GROUP_CALL_PARTICIPANT_MUTED_STATE\n}> {\n constructor(private colored: boolean) {\n super({\n width: 32,\n height: 32,\n getPart: (state, prevState) => {\n const states = GROUP_CALL_PARTICIPANT_MUTED_STATE;\n\n let index: number;\n switch(state) {\n case states.HAND:\n index = 3;\n break;\n case states.MUTED:\n index = prevState === states.HAND ? 0 : 2;\n break;\n case states.UNMUTED:\n index = 1;\n break;\n }\n\n return this.getItem().getPart(index);\n },\n getColor: colored ? (state, prevState) => {\n return getColorByMutedState(state);\n } : undefined\n });\n\n const className = 'group-call-participant-muted-icon';\n this.container.classList.add(className + '-container');\n\n const parts = RLottieIcon.generateEqualParts(4, 21);\n this.add({\n name: 'voice_outlined2',\n parts\n });\n }\n\n public setState(state: GROUP_CALL_PARTICIPANT_MUTED_STATE) {\n return super.setState(clearMutedStateModifier(state), state);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {GroupCallParticipant} from '../../layer';\nimport {i18n} from '../../lib/langPack';\nimport {GROUP_CALL_PARTICIPANT_MUTED_STATE} from '.';\nimport {GroupCallParticipantVideoType} from './participantVideo';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport Icon from '../icon';\n\nconst className = 'group-call-participant-status';\nexport default class GroupCallParticipantStatusElement {\n public container: HTMLElement;\n\n constructor(private withIcons: GroupCallParticipantVideoType[]) {\n this.container = document.createElement('div');\n this.container.classList.add(className + '-container');\n }\n\n public setState(state: GROUP_CALL_PARTICIPANT_MUTED_STATE, participant: GroupCallParticipant) {\n const states = GROUP_CALL_PARTICIPANT_MUTED_STATE;\n const icons = this.withIcons.filter((type) => !!participant[type]).map((type) => {\n const iconClassName: Icon = `${type === 'presentation' ? 'listscreenshare' : 'videocamera_filled'}`;\n const i = Icon(iconClassName, className + '-icon', className + '-icon-' + type);\n return i;\n });\n\n let element2: HTMLElement, actionClassName: string;\n if(state === states.MUTED_FOR_ME) {\n element2 = i18n('VoiceChat.Status.MutedForYou');\n actionClassName = 'is-muted';\n } else if(state === states.UNMUTED) {\n element2 = i18n('VoiceChat.Status.Speaking');\n actionClassName = 'is-speaking';\n } else if(state === states.HAND) {\n element2 = i18n('VoiceChat.Status.WantsSpeak');\n actionClassName = 'is-waiting';\n } else if(participant.about && !icons.length) {\n setInnerHTML(this.container, wrapEmojiText(participant.about));\n return;\n } else {\n element2 = i18n('VoiceChat.Status.Listening');\n actionClassName = 'is-listening';\n }\n\n const span = document.createElement('span');\n span.classList.add(className, actionClassName);\n span.append(...icons, element2);\n\n replaceContent(this.container, span);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport positionElementByIndex from '../../helpers/dom/positionElementByIndex';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport {fastRaf} from '../../helpers/schedulers';\nimport SortedList, {SortedElementBase} from '../../helpers/sortedList';\nimport appDialogsManager, {DialogDom, AppDialogsManager, DialogElementSize} from '../../lib/appManagers/appDialogsManager';\nimport {getGroupCallParticipantMutedState} from '.';\nimport GroupCallParticipantMutedIcon from './participantMutedIcon';\nimport GroupCallParticipantStatusElement from './participantStatus';\nimport type GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport type LazyLoadQueue from '../lazyLoadQueue';\nimport {MiddlewareHelper, getMiddleware} from '../../helpers/middleware';\n\ninterface SortedParticipant extends SortedElementBase {\n dom: DialogDom,\n mutedIcon: GroupCallParticipantMutedIcon,\n status: GroupCallParticipantStatusElement,\n middlewareHelper: MiddlewareHelper\n}\n\nexport default class GroupCallParticipantsList extends SortedList {\n public list: HTMLUListElement;\n\n protected lazyLoadQueue: LazyLoadQueue;\n protected avatarSize: DialogElementSize = 'abitbigger';\n protected rippleEnabled = true;\n protected autonomous = true;\n protected createChatListOptions: Parameters[0] = {/* new: true, */dialogSize: 72};\n\n constructor(private instance: GroupCallInstance) {\n super({\n getIndex: async(element) => (await this.instance.getParticipantByPeerId(element.id)).date,\n onDelete: (element) => {\n element.dom.listEl.remove();\n this.onElementDestroy(element);\n },\n onUpdate: async(element) => {\n const participant = await this.instance.getParticipantByPeerId(element.id);\n const state = getGroupCallParticipantMutedState(participant);\n\n element.mutedIcon.setState(state);\n element.status.setState(state, participant);\n },\n onSort: (element, idx) => {\n positionElementByIndex(element.dom.listEl, this.list, idx);\n },\n onElementCreate: (base) => {\n const middlewareHelper = getMiddleware();\n const {dom} = appDialogsManager.addDialogNew({\n peerId: base.id,\n container: false,\n avatarSize: this.avatarSize,\n autonomous: this.autonomous,\n meAsSaved: false,\n rippleEnabled: this.rippleEnabled,\n wrapOptions: {\n lazyLoadQueue: this.lazyLoadQueue,\n middleware: middlewareHelper.get()\n }\n });\n\n const className = 'group-call-participant';\n dom.listEl.classList.add(className);\n\n const mutedIcon = new GroupCallParticipantMutedIcon(true);\n const status = new GroupCallParticipantStatusElement(['presentation', 'video']);\n replaceContent(dom.lastMessageSpan, status.container);\n dom.listEl.append(mutedIcon.container);\n (base as SortedParticipant).mutedIcon = mutedIcon;\n (base as SortedParticipant).status = status;\n (base as SortedParticipant).middlewareHelper = middlewareHelper;\n\n /* instance.getParticipantByPeerId(base.id).then((participant) => {\n const mutedState = getGroupCallParticipantMutedState(participant);\n\n mutedIcon.setState(mutedState);\n status.setState(mutedState, participant);\n }); */\n\n (base as SortedParticipant).dom = dom;\n\n return base as SortedParticipant;\n },\n updateElementWith: fastRaf\n });\n\n this.list = appDialogsManager.createChatList(this.createChatListOptions);\n }\n\n public destroy() {\n super.clear();\n this.elements.forEach((element) => {\n this.onElementDestroy(element);\n });\n }\n\n protected onElementDestroy(element: SortedParticipant) {\n element.mutedIcon.destroy();\n element.middlewareHelper.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {animate} from '../../helpers/animation';\n\nexport default function callVideoCanvasBlur(video: HTMLVideoElement) {\n const canvas = document.createElement('canvas');\n canvas.classList.add('call-video-blur');\n const size = 16;\n canvas.width = size;\n canvas.height = size;\n\n const ctx = canvas.getContext('2d', {alpha: false});\n ctx.filter = 'blur(2px)';\n const renderFrame = () => {\n ctx.drawImage(video, 0, 0, video.videoWidth, video.videoHeight, 0, 0, canvas.width, canvas.height);\n };\n\n animate(() => {\n renderFrame();\n return canvas.isConnected;\n });\n\n renderFrame();\n\n return canvas;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {GroupCallParticipant} from '../../layer';\nimport type {GroupCallOutputSource} from '../../lib/appManagers/appGroupCallsManager';\nimport {i18n} from '../../lib/langPack';\nimport PeerTitle from '../peerTitle';\nimport {getGroupCallParticipantMutedState} from '.';\nimport GroupCallParticipantMutedIcon from './participantMutedIcon';\nimport GroupCallParticipantStatusElement from './participantStatus';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport callVideoCanvasBlur from '../call/videoCanvasBlur';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport safePlay from '../../helpers/dom/safePlay';\nimport Icon from '../icon';\n\nconst className = 'group-call-participant-video';\n\nexport type GroupCallParticipantVideoType = 'video' | 'presentation';\nexport default class GroupCallParticipantVideoElement {\n public container: HTMLElement;\n private peerTitle: PeerTitle;\n private subtitle: HTMLElement;\n private info: HTMLElement;\n private left: HTMLElement;\n private right: HTMLElement;\n private header: HTMLElement;\n private groupCallParticipantMutedIcon: GroupCallParticipantMutedIcon;\n private groupCallParticipantStatus: GroupCallParticipantStatusElement;\n\n constructor(private managers: AppManagers, private instance: GroupCallInstance, public source: GroupCallOutputSource) {\n this.container = document.createElement('div');\n this.container.classList.add(className + '-container');\n\n this.info = document.createElement('div');\n this.info.classList.add(className + '-info');\n\n this.left = document.createElement('div');\n this.left.classList.add(className + '-info-left');\n\n this.right = document.createElement('div');\n this.right.classList.add(className + '-info-right');\n\n this.info.append(this.left, this.right);\n\n this.container.append(this.info);\n }\n\n public setPinned(value: boolean) {\n if(!value) {\n if(this.header) {\n this.header.remove();\n this.header = undefined;\n }\n\n return;\n } else if(this.header) {\n return;\n }\n\n // if(!this.header) {\n this.header = document.createElement('div');\n this.header.classList.add(className + '-header');\n\n const icon = Icon('pin', 'group-call-pin-icon');\n this.header.append(icon);\n\n this.container.append(this.header);\n // }\n\n // this.container.classList.toggle('is-pinned', value);\n }\n\n public setParticipant(participant: GroupCallParticipant, type: GroupCallParticipantVideoType, video: HTMLVideoElement) {\n let peerTitleElement: HTMLElement;\n if(participant.pFlags.self) {\n peerTitleElement = i18n('VoiceChat.Status.You');\n peerTitleElement.classList.add('peer-title');\n } else {\n this.peerTitle = new PeerTitle({\n peerId: getPeerId(participant.peer)\n });\n\n peerTitleElement = this.peerTitle.element;\n }\n\n this.groupCallParticipantMutedIcon = new GroupCallParticipantMutedIcon(false);\n this.groupCallParticipantStatus = new GroupCallParticipantStatusElement([type]);\n\n this.left.append(peerTitleElement, this.groupCallParticipantStatus.container);\n\n this.right.append(this.groupCallParticipantMutedIcon.container);\n\n video.classList.add(className, 'call-video');\n\n if(video.paused) {\n safePlay(video);\n }\n\n const canvas = callVideoCanvasBlur(video);\n canvas.classList.add(className + '-blur');\n\n this.container.prepend(canvas, video);\n\n this.updateParticipant(participant);\n }\n\n public updateParticipant(participant: GroupCallParticipant) {\n const state = getGroupCallParticipantMutedState(participant);\n\n this.groupCallParticipantMutedIcon.setState(state);\n this.groupCallParticipantStatus.setState(state, participant);\n }\n\n public destroy() {\n this.groupCallParticipantMutedIcon.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport ControlsHover from '../../helpers/dom/controlsHover';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {GroupCallParticipant} from '../../layer';\nimport {GroupCallOutputSource} from '../../lib/appManagers/appGroupCallsManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport rootScope from '../../lib/rootScope';\nimport GroupCallParticipantVideoElement, {GroupCallParticipantVideoType} from './participantVideo';\n\nexport default class GroupCallParticipantsVideoElement extends ControlsHover {\n private container: HTMLDivElement;\n private instance: GroupCallInstance;\n private participantsElements: Map>;\n private displayPinned: boolean;\n private containers: Map;\n private onLengthChange: (length: number) => void;\n private managers: AppManagers;\n\n constructor(options: {\n appendTo: HTMLElement,\n instance: GroupCallInstance,\n listenerSetter: ListenerSetter,\n displayPinned: boolean,\n onLengthChange?: GroupCallParticipantsVideoElement['onLengthChange'],\n managers: AppManagers\n }) {\n super();\n safeAssign(this, options);\n\n const className = 'group-call-participants-video';\n const container = this.container = document.createElement('div');\n this.container.classList.add(className + '-container');\n\n options.appendTo.append(container);\n\n this.participantsElements = new Map();\n this.containers = new Map();\n\n const {listenerSetter} = this;\n\n listenerSetter.add(rootScope)('group_call_participant', ({groupCallId, participant}) => {\n if(this.instance.id === groupCallId) {\n this.updateParticipant(participant);\n }\n });\n\n listenerSetter.add(this.instance)('pinned', (source) => {\n this.participantsElements.forEach((map) => {\n map.forEach((element) => {\n this.setElementDisplay(element, source);\n });\n });\n });\n\n attachClickEvent(this.container, (e) => {\n const container = findUpClassName(e.target, 'group-call-participant-video-container');\n if(!container) {\n return;\n }\n\n const element = this.containers.get(container);\n if(this.instance.pinnedSource === element.source) {\n this.instance.unpinAll();\n return;\n }\n\n this.instance.pinSource(element.source);\n }, {listenerSetter});\n\n this.setInstance(this.instance);\n\n this.setup({\n element: container,\n listenerSetter: listenerSetter,\n showOnLeaveToClassName: 'group-call-buttons'\n });\n }\n\n private shouldDisplayElement(element: GroupCallParticipantVideoElement, pinnedSource: GroupCallOutputSource) {\n return this.displayPinned ? !pinnedSource || element.source === pinnedSource : pinnedSource && element.source !== pinnedSource;\n }\n\n private setElementDisplay(element: GroupCallParticipantVideoElement, pinnedSource: GroupCallOutputSource) {\n const shouldDisplay = this.shouldDisplayElement(element, pinnedSource);\n element.container.classList.toggle('video-hidden', !shouldDisplay);\n\n const isPinned = element.source === pinnedSource;\n element.setPinned(isPinned);\n }\n\n private updateParticipant(participant: GroupCallParticipant) {\n const peerId = getPeerId(participant.peer);\n const types: GroupCallParticipantVideoType[] = ['video', 'presentation'];\n const hasAnyVideo = types.some((type) => !!participant[type]);\n let participantElements = this.participantsElements.get(peerId);\n if(!hasAnyVideo && !participantElements) {\n return;\n }\n\n if(!participantElements) {\n this.participantsElements.set(peerId, participantElements = new Map());\n }\n\n types.forEach((type) => {\n let element = participantElements.get(type);\n const participantVideo = participant[type];\n if(!!participantVideo === !!element) {\n if(element) {\n element.updateParticipant(participant);\n }\n\n return;\n }\n\n if(participantVideo) {\n const result = this.instance.getVideoElementFromParticipantByType(participant, type);\n if(!result) {\n return;\n }\n\n const {video, source} = result;\n\n element = new GroupCallParticipantVideoElement(this.managers, this.instance, source);\n\n this.containers.set(element.container, element);\n\n this.setElementDisplay(element, this.instance.pinnedSource);\n participantElements.set(type, element);\n element.setParticipant(participant, type, video);\n\n this.container.prepend(element.container);\n } else {\n participantElements.delete(type);\n element.container.remove();\n\n if(!participantElements.size) {\n this.participantsElements.delete(peerId);\n this.containers.delete(element.container);\n element.destroy();\n }\n }\n\n this._onLengthChange();\n });\n }\n\n private _onLengthChange() {\n const length = this.container.childElementCount;\n this.container.dataset.length = '' + length;\n this.container.dataset.layout = length <= 2 ? '1' : (length === 3 ? '3' : '4');\n\n this.onLengthChange && this.onLengthChange(length);\n }\n\n public async setInstance(instance: GroupCallInstance) {\n (await instance.participants).forEach((participant) => {\n this.updateParticipant(participant);\n });\n }\n\n public destroy() {\n this.containers.forEach((element) => {\n element.destroy();\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupGroupCall from '.';\nimport filterAsync from '../../helpers/array/filterAsync';\nimport contextMenuController from '../../helpers/contextMenuController';\nimport {attachContextMenuListener} from '../../helpers/dom/attachContextMenuListener';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport {addFullScreenListener, isFullScreen} from '../../helpers/dom/fullScreen';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport noop from '../../helpers/noop';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport positionMenu from '../../helpers/positionMenu';\nimport ScrollableLoader from '../../helpers/scrollableLoader';\nimport {GroupCallParticipant} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport rootScope from '../../lib/rootScope';\nimport {ButtonMenuItemOptions, ButtonMenuSync} from '../buttonMenu';\nimport confirmationPopup from '../confirmationPopup';\nimport PeerTitle from '../peerTitle';\nimport PopupElement from '../popups';\nimport Scrollable from '../scrollable';\nimport GroupCallParticipantsList from './participantsList';\nimport GroupCallParticipantsVideoElement from './participantVideos';\n\nexport class GroupCallParticipantContextMenu {\n private buttons: (ButtonMenuItemOptions & {verify: (peerId: PeerId) => boolean | Promise})[];\n private element: HTMLElement;\n private chatId: ChatId;\n private targetPeerId: PeerId;\n private participant: GroupCallParticipant;\n private instance: GroupCallInstance;\n private canManageCall: boolean;\n private managers: AppManagers;\n\n constructor(options: {\n listenerSetter: ListenerSetter,\n onContextElement: HTMLElement,\n managers: AppManagers,\n instance: GroupCallInstance,\n }) {\n this.buttons = [{\n icon: 'gc_microphoneoff',\n text: 'VoiceChat.MutePeer',\n verify: () => this.canManageCall && this.participant.pFlags.can_self_unmute,\n onClick: () => this.toggleParticipantMuted(true)\n }, {\n icon: 'gc_microphone',\n text: 'VoiceChat.UnmutePeer',\n verify: () => this.canManageCall && !this.participant.pFlags.can_self_unmute,\n onClick: () => this.toggleParticipantMuted(false)\n }, {\n icon: 'gc_microphoneoff',\n text: 'VoiceChat.MuteForMe',\n verify: () => !this.canManageCall && !this.participant.pFlags.muted_by_you,\n onClick: () => this.toggleParticipantMuted(true)\n }, {\n icon: 'gc_microphone',\n text: 'VoiceChat.UnmuteForMe',\n verify: () => !this.canManageCall && this.participant.pFlags.muted_by_you,\n onClick: () => this.toggleParticipantMuted(false)\n }, {\n icon: 'newprivate',\n text: 'VoiceChat.OpenProfile',\n verify: () => true,\n onClick: this.onOpenProfileClick\n }, {\n icon: 'deleteuser',\n className: 'danger',\n text: 'VoiceChat.RemovePeer',\n verify: () => this.managers.appChatsManager.hasRights(this.chatId, 'ban_users'),\n onClick: async() => {\n confirmationPopup({\n peerId: this.targetPeerId,\n title: new PeerTitle({peerId: this.targetPeerId}).element,\n descriptionLangKey: await this.managers.appChatsManager.isBroadcast(this.chatId) ? 'VoiceChat.RemovePeer.Confirm.Channel' : 'VoiceChat.RemovePeer.Confirm',\n descriptionLangArgs: [new PeerTitle({peerId: this.targetPeerId}).element],\n button: {\n langKey: 'VoiceChat.RemovePeer.Confirm.OK',\n isDanger: true\n }\n }).then(() => {\n this.managers.appChatsManager.kickFromChat(this.chatId, this.targetPeerId);\n }, noop);\n }\n }];\n\n const {listenerSetter} = options;\n this.managers = options.managers;\n this.instance = options.instance;\n this.chatId = this.instance.chatId;\n\n this.element = ButtonMenuSync({buttons: this.buttons, listenerSetter});\n this.element.classList.add('group-call-participant-menu', 'night');\n\n attachContextMenuListener({\n element: options.onContextElement,\n callback: async(e) => {\n const li = findUpClassName(e.target, 'group-call-participant');\n if(!li) {\n return;\n }\n\n if(this.element.parentElement !== appendTo) {\n appendTo.append(this.element);\n }\n\n cancelEvent(e);\n\n const peerId = this.targetPeerId = li.dataset.peerId.toPeerId();\n this.participant = await this.instance.getParticipantByPeerId(peerId);\n if(this.participant.pFlags.self) {\n return;\n }\n\n this.canManageCall = await this.managers.appChatsManager.hasRights(this.chatId, 'manage_call');\n\n await filterAsync(this.buttons, async(button) => {\n const good = await button.verify(peerId);\n button.element.classList.toggle('hide', !good);\n return good;\n });\n\n positionMenu((e as TouchEvent).touches ? (e as TouchEvent).touches[0] : e as MouseEvent, this.element, 'right');\n contextMenuController.openBtnMenu(this.element);\n },\n listenerSetter\n });\n\n listenerSetter.add(rootScope)('group_call_participant', ({groupCallId, participant}) => {\n if(this.instance.id === groupCallId) {\n const peerId = getPeerId(participant.peer);\n if(this.targetPeerId === peerId) {\n contextMenuController.close();\n }\n }\n });\n\n let appendTo: HTMLElement = document.body;\n addFullScreenListener(document.body, () => {\n const isFull = isFullScreen();\n appendTo = isFull ? PopupElement.getPopups(PopupGroupCall)[0].getContainer(): document.body;\n\n if(!isFull) {\n contextMenuController.close();\n }\n }, listenerSetter);\n }\n\n private onOpenProfileClick = () => {\n const popup = PopupElement.getPopups(PopupGroupCall)[0];\n if(popup) {\n popup.hide();\n }\n\n appImManager.setInnerPeer({peerId: this.targetPeerId});\n };\n\n private toggleParticipantMuted = (muted: boolean) => {\n this.instance.editParticipant(this.participant, {\n muted\n });\n };\n};\n\nexport default class GroupCallParticipantsElement {\n private container: HTMLDivElement;\n private sortedList: GroupCallParticipantsList;\n private instance: GroupCallInstance;\n private listenerSetter: ListenerSetter;\n private groupCallParticipantsVideo: GroupCallParticipantsVideoElement;\n private contextMenu: GroupCallParticipantContextMenu;\n private managers: AppManagers;\n\n constructor(options: {\n appendTo: HTMLElement,\n instance: GroupCallInstance,\n listenerSetter: ListenerSetter,\n managers: AppManagers\n }) {\n safeAssign(this, options);\n\n const className = 'group-call-participants';\n\n const scrollable = new Scrollable(undefined);\n scrollable.container.classList.add(className + '-scrollable');\n\n const container = this.container = document.createElement('div');\n container.classList.add(className);\n\n // const invite = Button(`btn-primary btn-transparent ${className}-invite`, {icon: 'adduser', text: 'VoiceChat.Invite.InviteMembers'});\n\n const sortedList = this.sortedList = new GroupCallParticipantsList(this.instance);\n\n const {instance, listenerSetter} = this;\n this.contextMenu = new GroupCallParticipantContextMenu({\n ...options,\n onContextElement: sortedList.list,\n listenerSetter,\n instance\n });\n\n this.groupCallParticipantsVideo = new GroupCallParticipantsVideoElement({\n ...options,\n appendTo: scrollable.container,\n displayPinned: false\n });\n\n scrollable.append(/* invite, */sortedList.list);\n container.append(scrollable.container);\n\n options.appendTo.append(container);\n\n listenerSetter.add(rootScope)('group_call_participant', ({groupCallId, participant}) => {\n if(this.instance.id === groupCallId) {\n this.updateParticipant(participant);\n }\n });\n\n const scrollableLoader = new ScrollableLoader({\n scrollable,\n getPromise: () => {\n return this.managers.appGroupCallsManager.getGroupCallParticipants(this.instance.id).then(({participants, isEnd}) => {\n participants.forEach((participant) => {\n this.updateParticipant(participant);\n });\n\n return isEnd;\n });\n }\n });\n\n this.setInstance(instance);\n }\n\n private updateParticipant(participant: GroupCallParticipant) {\n const peerId = getPeerId(participant.peer);\n const has = this.sortedList.has(peerId);\n if(participant.pFlags.left) {\n if(has) {\n this.sortedList.delete(peerId);\n }\n\n return;\n }\n\n if(!has) {\n this.sortedList.add(peerId);\n return;\n }\n\n this.sortedList.update(peerId);\n }\n\n public async setInstance(instance: GroupCallInstance) {\n // @ts-ignore\n /* const users = appUsersManager.users;\n for(const userId in users) {\n const participant: GroupCallParticipant = {\n _: 'groupCallParticipant',\n date: 0,\n peer: {_: 'peerUser', user_id: userId.toPeerId()},\n pFlags: {\n muted: true\n },\n source: 1\n };\n\n instance.participants.set(userId.toPeerId(), participant);\n this.updateParticipant(participant);\n } */\n const participants = await instance.participants;\n participants.forEach((participant) => {\n this.updateParticipant(participant);\n });\n }\n\n public destroy() {\n this.sortedList.destroy();\n this.groupCallParticipantsVideo.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {GroupCall} from '../../layer';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport GROUP_CALL_STATE from '../../lib/calls/groupCallState';\nimport I18n, {LangPackKey, FormatterArguments} from '../../lib/langPack';\n\nexport default class GroupCallDescriptionElement {\n private descriptionIntl: I18n.IntlElement;\n\n constructor(private appendTo: HTMLElement) {\n this.descriptionIntl = new I18n.IntlElement({\n key: 'VoiceChat.Status.Connecting'\n });\n\n this.descriptionIntl.element.classList.add('group-call-description');\n }\n\n public detach() {\n this.descriptionIntl.element.remove();\n }\n\n public update(instance: GroupCallInstance) {\n const {state} = instance;\n\n let key: LangPackKey, args: FormatterArguments;\n if(state === GROUP_CALL_STATE.CONNECTING) {\n key = 'VoiceChat.Status.Connecting';\n } else {\n key = 'VoiceChat.Status.Members';\n args = [(instance.groupCall as GroupCall.groupCall).participants_count];\n }\n\n const {descriptionIntl} = this;\n descriptionIntl.compareAndUpdate({\n key,\n args\n });\n\n if(!this.descriptionIntl.element.parentElement) {\n this.appendTo.append(this.descriptionIntl.element);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {GroupCall} from '../../layer';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport {NULL_PEER_ID} from '../../lib/mtproto/mtproto_config';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport PeerTitle from '../peerTitle';\n\nexport default class GroupCallTitleElement {\n private peerTitle: PeerTitle;\n\n constructor(private appendTo: HTMLElement) {\n this.peerTitle = new PeerTitle({peerId: NULL_PEER_ID});\n }\n\n public update(instance: GroupCallInstance) {\n const {peerTitle, appendTo} = this;\n const groupCall = instance.groupCall as GroupCall.groupCall;\n const peerId = instance.chatId.toPeerId(true);\n if(groupCall.title) {\n setInnerHTML(appendTo, wrapEmojiText(groupCall.title));\n } else {\n if(peerTitle.options.peerId !== peerId) {\n peerTitle.options.peerId = peerId;\n peerTitle.update();\n }\n\n if(peerTitle.element.parentElement !== appendTo) {\n appendTo.append(peerTitle.element);\n }\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport {i18n, LangPackKey} from '../../lib/langPack';\nimport Icon from '../icon';\nimport ripple from '../ripple';\n\nexport default function makeButton(className: string, listenerSetter: ListenerSetter, options: {\n text?: LangPackKey | HTMLElement,\n isDanger?: boolean,\n noRipple?: boolean,\n callback?: () => void,\n icon?: Icon,\n isConfirm?: boolean,\n}) {\n const _className = className + '-button';\n const buttonDiv = document.createElement('div');\n buttonDiv.classList.add(_className, 'call-button', 'rp-overflow');\n\n if(options.icon) {\n buttonDiv.append(Icon(options.icon));\n }\n\n if(!options.noRipple) {\n ripple(buttonDiv);\n }\n\n if(options.isDanger) {\n buttonDiv.classList.add(_className + '-red');\n }\n\n if(options.isConfirm) {\n buttonDiv.classList.add(_className + '-green');\n }\n\n if(options.callback) {\n attachClickEvent(buttonDiv, options.callback, {listenerSetter});\n }\n\n let ret = buttonDiv;\n if(options.text) {\n const div = document.createElement('div');\n div.classList.add(_className + '-container', 'call-button-container');\n\n const textEl = typeof(options.text) === 'string' ? i18n(options.text) : options.text;\n textEl.classList.add(_className + '-text', 'call-button-text');\n\n div.append(buttonDiv, textEl);\n\n ret = div;\n }\n\n return ret;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport EventListenerBase from '../helpers/eventListenerBase';\nimport mediaSizes from '../helpers/mediaSizes';\nimport clamp from '../helpers/number/clamp';\nimport safeAssign from '../helpers/object/safeAssign';\nimport windowSize from '../helpers/windowSize';\nimport SwipeHandler from './swipeHandler';\n\ntype ResizeSide = 'n' | 'e' | 's' | 'w' | 'ne' | 'se' | 'sw' | 'nw';\nexport type MovableState = {\n top?: number;\n left?: number;\n width: number;\n height: number;\n};\n\nconst className = 'movable-element';\nconst resizeHandlerClassName = className + '-resize-handler';\n\nexport type MovableElementOptions = {\n minWidth: MovableElement['minWidth'],\n minHeight: MovableElement['minHeight'],\n element: MovableElement['element'],\n verifyTouchTarget?: MovableElement['verifyTouchTarget'],\n aspectRatio?: MovableElement['aspectRatio'],\n resetTransition?: MovableElement['resetTransition']\n};\n\nexport default class MovableElement extends EventListenerBase<{\n resize: (state: MovableState) => void\n}> {\n private minWidth: number;\n private minHeight: number;\n private element: HTMLElement;\n private verifyTouchTarget: (evt: Parameters[0], type: 'resize' | 'move') => boolean;\n private aspectRatio: number;\n private resetTransition: boolean;\n\n private top: number;\n private left: number;\n private _width: number;\n private _height: number;\n\n private swipeHandler: SwipeHandler;\n private handlers: HTMLElement[];\n private overlay: HTMLElement;\n\n constructor(options: MovableElementOptions) {\n super(true);\n safeAssign(this, options);\n\n this.top = this.left = this.width = this.height = 0;\n this.element.classList.add(className);\n\n this.addResizeHandlers();\n this.setSwipeHandler();\n\n mediaSizes.addEventListener('resize', this.onResize);\n }\n\n private onResize = () => {\n this.fixDimensions(true);\n this.fixPosition();\n this.setPosition();\n };\n\n public toggleResizable(value: boolean) {\n if(!value) {\n this.destroyResizeHandlers();\n } else {\n this.addResizeHandlers();\n }\n }\n\n public destroyElements() {\n this.element.classList.remove(className);\n this.destroyResizeHandlers();\n }\n\n public destroyResizeHandlers() {\n if(this.handlers) {\n this.handlers.forEach((handler) => {\n handler.remove();\n });\n\n this.handlers = undefined;\n }\n }\n\n public destroy() {\n mediaSizes.removeEventListener('resize', this.onResize);\n this.swipeHandler.removeListeners();\n }\n\n private addResizeHandlers() {\n if(this.handlers) {\n return;\n }\n\n const sides: ResizeSide[] = ['n', 'e', 's', 'w', 'ne', 'se', 'sw', 'nw'];\n this.handlers = sides.map((side) => {\n const div = document.createElement('div');\n div.dataset.side = side;\n div.classList.add(resizeHandlerClassName, resizeHandlerClassName + '-side-' + side);\n this.element.append(div);\n return div;\n });\n }\n\n private setSwipeHandler() {\n let startTop: number,\n startLeft: number,\n startWidth: number,\n startHeight: number,\n startExtraHeight: number,\n startExtraWidth: number,\n resizingSide: ResizeSide;\n const swipeHandler = this.swipeHandler = new SwipeHandler({\n element: this.element,\n onSwipe: (xDiff, yDiff, e) => {\n // console.log(xDiff, yDiff, e);\n\n if(resizingSide) {\n const changingWidth = resizingSide.includes('e') || resizingSide.includes('w');\n const changingHeight = resizingSide.includes('n') || resizingSide.includes('s');\n const maxPossibleWidth = resizingSide.includes('e') || !changingWidth ? windowSize.width - startLeft : startWidth + startLeft;\n const maxPossibleHeight = resizingSide.includes('s') || !changingHeight ? windowSize.height - startTop : startHeight + startTop;\n\n if(changingWidth) {\n const isEnlarging = resizingSide.includes('e') && xDiff > 0 || resizingSide.includes('w') && xDiff < 0;\n const resizeDiff = Math.abs(xDiff) * (isEnlarging ? 1 : -1);\n\n this.width = clamp(startWidth + resizeDiff, this.minWidth, maxPossibleWidth);\n\n if(this.aspectRatio) {\n this.height = clamp(this.width / this.aspectRatio + startExtraHeight, this.minHeight, maxPossibleHeight);\n this.width = this.height * this.aspectRatio + startExtraWidth;\n }\n }\n\n if(changingHeight) {\n const isEnlarging = resizingSide.includes('s') && yDiff > 0 || resizingSide.includes('n') && yDiff < 0;\n const resizeDiff = Math.abs(yDiff) * (isEnlarging ? 1 : -1);\n\n this.height = clamp(startHeight + resizeDiff, this.minHeight, maxPossibleHeight);\n\n if(this.aspectRatio) {\n this.width = clamp(this.height * this.aspectRatio + startExtraWidth, this.minWidth, maxPossibleWidth);\n this.height = this.width / this.aspectRatio + startExtraHeight;\n }\n }\n\n // this.fixDimensions();\n\n if(resizingSide.includes('w')) {\n this.left = Math.min(startLeft + startWidth - this.minWidth, startLeft + xDiff);\n }\n\n if(resizingSide.includes('n')) {\n this.top = Math.min(startTop + startHeight - this.minHeight, startTop + yDiff);\n }\n } else {\n this.top = startTop + yDiff;\n this.left = startLeft + xDiff;\n }\n\n this.fixPosition();\n this.setPosition();\n },\n verifyTouchTarget: (e) => {\n const target = e.target;\n const resizeHandler = findUpClassName(target, resizeHandlerClassName);\n\n if(this.verifyTouchTarget && !this.verifyTouchTarget(e, resizeHandler ? 'resize' : 'move')) {\n return false;\n }\n\n if(resizeHandler) {\n resizingSide = resizeHandler.dataset.side as ResizeSide;\n let cursor: Parameters[0] = 'col-resize';\n if(resizingSide === 'nw' || resizingSide === 'se') {\n cursor = 'nwse-resize';\n } else if(resizingSide === 'ne' || resizingSide === 'sw') {\n cursor = 'nesw-resize';\n } else if(resizingSide === 'n' || resizingSide === 's') {\n cursor = 'row-resize';\n }\n swipeHandler.setCursor(cursor);\n } else {\n resizingSide = undefined;\n swipeHandler.setCursor('grabbing');\n }\n\n return true;\n },\n onFirstSwipe: () => {\n startTop = this.top;\n startLeft = this.left;\n startWidth = this.width;\n startHeight = this.height;\n\n if(!this.overlay) {\n this.overlay = document.createElement('div');\n this.overlay.classList.add(className + '-overlay');\n }\n\n this.element.append(this.overlay);\n\n if(this.aspectRatio) {\n startExtraWidth = this.width - this.height * this.aspectRatio;\n startExtraHeight = this.height - this.width / this.aspectRatio;\n }\n\n if(this.resetTransition) {\n this.element.classList.add('no-transition');\n void this.element.offsetLeft; // reflow\n }\n },\n onReset: () => {\n if(this.resetTransition) {\n this.element.classList.remove('no-transition');\n }\n\n this.overlay.remove();\n },\n setCursorTo: document.body\n });\n }\n\n public setPositionToCenter() {\n this.top = (windowSize.height / 2) - (this.height / 2);\n this.left = (windowSize.width / 2) - (this.width / 2);\n this.setPosition();\n }\n\n private fixDimensions(fixAspectRatio?: boolean) {\n if(fixAspectRatio && this.aspectRatio) {\n const extraWidth = this.width - this.height * this.aspectRatio;\n const extraHeight = this.height - this.width / this.aspectRatio;\n\n const maxPossibleWidth = windowSize.width - this.left;\n const maxPossibleHeight = windowSize.height - this.top;\n if(this.width > maxPossibleWidth) {\n this.width = maxPossibleWidth;\n this.height = this.width / this.aspectRatio + extraHeight;\n } else if(this.height > maxPossibleHeight) {\n this.height = maxPossibleHeight;\n this.width = this.height * this.aspectRatio + extraWidth;\n } else {\n return;\n }\n }\n\n this.width = clamp(this.width, this.minWidth, windowSize.width);\n this.height = clamp(this.height, this.minHeight, windowSize.height);\n }\n\n private fixPosition() {\n this.top = clamp(this.top, 0, windowSize.height - this.height);\n this.left = clamp(this.left, 0, windowSize.width - this.width);\n }\n\n private setPosition() {\n this.element.style.top = this.top + 'px';\n this.element.style.left = this.left + 'px';\n this.element.style.right = 'auto';\n this.element.style.bottom = 'auto';\n this.element.style.width = this.width + 'px';\n this.element.style.height = this.height + 'px';\n\n this.dispatchEvent('resize', this.state);\n }\n\n public get width() {\n return this._width;\n }\n\n public get height() {\n return this._height;\n }\n\n private set width(value: number) {\n this._width = value;\n }\n\n private set height(value: number) {\n this._height = value;\n }\n\n public get state(): MovableState {\n const {top, left, width, height} = this;\n return {\n top,\n left,\n width,\n height\n };\n }\n\n public set state(state: MovableState) {\n const {top, left, width, height} = state;\n this.top = top;\n this.left = left;\n this.width = width;\n this.height = height;\n this.onResize();\n }\n\n public setMinValues(width: number, height: number) {\n this.minWidth = width;\n this.minHeight = height;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport MovableElement, {MovableElementOptions, MovableState} from '../components/movableElement';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport ListenerSetter from './listenerSetter';\nimport mediaSizes, {ScreenSize} from './mediaSizes';\nimport safeAssign from './object/safeAssign';\n\nexport default class MovablePanel {\n #movable: MovableElement;\n private listenerSetter: ListenerSetter;\n private previousState: MovableState;\n private onResize: () => void;\n private movableOptions: MovableElementOptions;\n\n constructor(options: {\n listenerSetter: ListenerSetter,\n previousState: MovableState,\n onResize?: (state: MovableState) => void,\n movableOptions: MovableElementOptions\n }) {\n safeAssign(this, options);\n\n this.toggleMovable(!IS_TOUCH_SUPPORTED);\n\n this.listenerSetter.add(mediaSizes)('changeScreen', (from, to) => {\n if(to === ScreenSize.mobile || from === ScreenSize.mobile) {\n this.toggleMovable(!IS_TOUCH_SUPPORTED);\n }\n });\n }\n\n public destroy() {\n const movable = this.movable;\n if(movable) {\n movable.destroy();\n }\n }\n\n public get movable() {\n return this.#movable;\n }\n\n public get state() {\n return this.movable ? this.movable.state : this.previousState;\n }\n\n public set state(state: MovableState) {\n this.previousState = state;\n }\n\n private toggleMovable(enabled: boolean) {\n let {movable} = this;\n if(enabled) {\n if(movable) {\n return;\n }\n\n movable = this.#movable = new MovableElement(this.movableOptions);\n\n movable.state = this.previousState;\n if(this.previousState.top === undefined) {\n movable.setPositionToCenter();\n }\n\n if(this.onResize) {\n this.listenerSetter.add(movable)('resize', this.onResize);\n }\n } else {\n if(!movable) {\n return;\n }\n\n this.previousState = movable.state;\n movable.destroyElements();\n movable.destroy();\n this.#movable = undefined;\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function toggleClassName(className: string, elements: HTMLElement[], disable: boolean) {\n elements.forEach((element) => {\n element.classList.toggle(className, disable);\n });\n\n return () => toggleClassName(className, elements, !disable);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '../popups';\nimport {hexToRgb} from '../../helpers/color';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport customProperties from '../../helpers/dom/customProperties';\nimport {GroupCall, GroupCallParticipant} from '../../layer';\nimport GROUP_CALL_STATE from '../../lib/calls/groupCallState';\nimport {RLottieColor} from '../../lib/rlottie/rlottiePlayer';\nimport rootScope from '../../lib/rootScope';\nimport ButtonIcon from '../buttonIcon';\nimport GroupCallMicrophoneIcon from './microphoneIcon';\nimport GroupCallParticipantsElement from './participants';\nimport GroupCallParticipantsVideoElement from './participantVideos';\nimport PopupPeer from '../popups/peer';\nimport GroupCallDescriptionElement from './description';\nimport GroupCallTitleElement from './title';\nimport {addFullScreenListener, cancelFullScreen, isFullScreen, requestFullScreen} from '../../helpers/dom/fullScreen';\nimport Scrollable from '../scrollable';\nimport {MovableState} from '../movableElement';\nimport animationIntersector from '../animationIntersector';\nimport {IS_APPLE_MOBILE} from '../../environment/userAgent';\nimport throttle from '../../helpers/schedulers/throttle';\nimport IS_SCREEN_SHARING_SUPPORTED from '../../environment/screenSharingSupport';\nimport GroupCallInstance from '../../lib/calls/groupCallInstance';\nimport makeButton from '../call/button';\nimport MovablePanel from '../../helpers/movablePanel';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport toggleClassName from '../../helpers/toggleClassName';\nimport themeController from '../../helpers/themeController';\nimport groupCallsController from '../../lib/calls/groupCallsController';\n\nexport enum GROUP_CALL_PARTICIPANT_MUTED_STATE {\n UNMUTED,\n MUTED,\n MUTED_FOR_ME,\n MUTED_BY_ADMIN,\n HAND\n}\n\nexport type GROUP_CALL_PARTICIPANT_CLEARED_MUTED_STATE = Exclude;\n\nexport function getGroupCallParticipantMutedState(participant: GroupCallParticipant) {\n const states = GROUP_CALL_PARTICIPANT_MUTED_STATE;\n if(participant.pFlags.muted_by_you) {\n return states.MUTED_FOR_ME;\n } else if(participant.raise_hand_rating !== undefined) {\n return states.HAND;\n } else if(participant.pFlags.muted) {\n return participant.pFlags.can_self_unmute ? states.MUTED : states.MUTED_BY_ADMIN;\n } else {\n return states.UNMUTED;\n }\n}\n\nexport function clearMutedStateModifier(state: GROUP_CALL_PARTICIPANT_MUTED_STATE): GROUP_CALL_PARTICIPANT_CLEARED_MUTED_STATE {\n const states = GROUP_CALL_PARTICIPANT_MUTED_STATE;\n switch(state) {\n case states.MUTED_BY_ADMIN:\n case states.MUTED_FOR_ME:\n return states.MUTED;\n default:\n return state;\n }\n}\n\nexport function getColorByMutedState(state: GROUP_CALL_PARTICIPANT_MUTED_STATE) {\n const states = GROUP_CALL_PARTICIPANT_MUTED_STATE;\n let colorStr: 'blue' | 'green' | 'secondary' | 'red';\n switch(state) {\n case states.HAND:\n colorStr = 'blue';\n break;\n case states.MUTED:\n case states.MUTED_FOR_ME:\n case states.MUTED_BY_ADMIN:\n colorStr = state === states.MUTED ? 'secondary' : 'red';\n break;\n case states.UNMUTED:\n colorStr = 'green';\n break;\n }\n\n const propertyValue = customProperties.getProperty('gc-' + colorStr + '-text-color');\n const color: RLottieColor = hexToRgb(propertyValue);\n\n return color;\n}\n\nexport enum GROUP_CALL_MICROPHONE_BUTTON_STATE {\n HAND,\n MUTED,\n UNMUTED,\n}\n\nexport function getGroupCallMicrophoneButtonState(groupCall: GroupCall.groupCall, participant: GroupCallParticipant) {\n const states = GROUP_CALL_MICROPHONE_BUTTON_STATE;\n if(!participant.pFlags.can_self_unmute) {\n return states.HAND;\n } else if(participant.pFlags.muted) {\n return states.MUTED\n } else {\n return states.UNMUTED;\n }\n}\n\nlet previousState: MovableState = {\n width: 420,\n height: 640\n};\n\nconst className = 'group-call';\n\nexport default class PopupGroupCall extends PopupElement {\n private instance: GroupCallInstance;\n private groupCallTitle: GroupCallTitleElement;\n private groupCallDescription: GroupCallDescriptionElement;\n private groupCallBodyHeaderDescription: GroupCallDescriptionElement;\n private groupCallParticipants: GroupCallParticipantsElement;\n private groupCallParticipantsVideo: GroupCallParticipantsVideoElement;\n private groupCallMicrophoneIcon: GroupCallMicrophoneIcon;\n private videosCount: number;\n private btnFullScreen: HTMLButtonElement;\n private btnExitFullScreen: HTMLButtonElement;\n private btnInvite: HTMLButtonElement;\n private btnShowColumn: HTMLButtonElement;\n private movablePanel: MovablePanel;\n private buttonsContainer: HTMLDivElement;\n private btnFullScreen2: HTMLButtonElement;\n private btnVideo: HTMLDivElement;\n private btnScreen: HTMLDivElement;\n\n constructor() {\n super('popup-group-call', {\n body: true,\n withoutOverlay: true,\n closable: true,\n title: true\n });\n\n this.videosCount = 0;\n this.container.classList.add(className, 'night');\n\n const instance = this.instance = groupCallsController.groupCall;\n const {listenerSetter} = this;\n\n if(!IS_APPLE_MOBILE) {\n const btnFullScreen = this.btnFullScreen = ButtonIcon('fullscreen');\n const btnFullScreen2 = this.btnFullScreen2 = ButtonIcon('fullscreen ' + className + '-cfs');\n const btnExitFullScreen = this.btnExitFullScreen = ButtonIcon('smallscreen');\n\n attachClickEvent(btnFullScreen, this.onFullScreenClick, {listenerSetter});\n attachClickEvent(btnFullScreen2, this.onFullScreenClick, {listenerSetter});\n\n attachClickEvent(btnExitFullScreen, () => {\n cancelFullScreen();\n }, {listenerSetter});\n\n addFullScreenListener(this.container, this.onFullScreenChange, listenerSetter);\n }\n\n const btnInvite = this.btnInvite = ButtonIcon('adduser');\n const btnShowColumn = this.btnShowColumn = ButtonIcon('rightpanel ' + className + '-only-big');\n\n attachClickEvent(btnShowColumn, this.toggleRightColumn, {listenerSetter});\n\n const headerInfo = document.createElement('div');\n headerInfo.classList.add(className + '-header-info');\n\n this.title.classList.add(className + '-header-title');\n\n const subtitle = document.createElement('div');\n subtitle.classList.add(className + '-header-subtitle');\n\n headerInfo.append(this.title, subtitle);\n\n this.header.classList.add(className + '-header');\n this.header.append(...[this.btnExitFullScreen, headerInfo/* , btnInvite */, this.btnFullScreen, btnShowColumn].filter(Boolean));\n\n const newHeader = this.header.cloneNode(false) as HTMLElement;\n const newHeaderInfo = headerInfo.cloneNode(false) as HTMLElement;\n const newHeaderTitle = this.title.cloneNode(false) as HTMLElement;\n\n newHeaderInfo.append(newHeaderTitle);\n\n const btnHideColumn = ButtonIcon('rightpanel');\n newHeader.append(...[btnHideColumn, newHeaderInfo, this.btnFullScreen2].filter(Boolean));\n\n attachClickEvent(btnHideColumn, this.toggleRightColumn, {listenerSetter});\n\n this.body.prepend(newHeader);\n\n const videosScrollable = new Scrollable(undefined);\n videosScrollable.container.classList.add('group-call-big-video-container');\n this.container.append(videosScrollable.container);\n\n this.groupCallTitle = new GroupCallTitleElement(this.title);\n this.groupCallDescription = new GroupCallDescriptionElement(subtitle);\n this.groupCallBodyHeaderDescription = new GroupCallDescriptionElement(newHeaderTitle);\n this.constructButtons();\n\n this.groupCallParticipantsVideo = new GroupCallParticipantsVideoElement({\n appendTo: videosScrollable.container,\n instance,\n listenerSetter,\n displayPinned: true,\n onLengthChange: (length) => {\n this.videosCount = length;\n this.toggleBigLayout();\n },\n managers: this.managers\n });\n this.groupCallParticipants = new GroupCallParticipantsElement({\n appendTo: this.body,\n instance,\n listenerSetter,\n managers: this.managers\n });\n\n this.movablePanel = new MovablePanel({\n listenerSetter,\n movableOptions: {\n minWidth: 400,\n minHeight: 480,\n element: this.element,\n verifyTouchTarget: (e) => {\n const target = e.target;\n if(findUpClassName(target, 'chatlist') ||\n findUpClassName(target, 'group-call-button') ||\n findUpClassName(target, 'btn-icon') ||\n findUpClassName(target, 'group-call-participants-video-container') ||\n isFullScreen()) {\n return false;\n }\n\n return true;\n }\n },\n onResize: () => this.toggleBigLayout(),\n previousState\n });\n\n listenerSetter.add(instance)('state', () => {\n this.updateInstance();\n });\n\n listenerSetter.add(rootScope)('group_call_update', (groupCall) => {\n if(this.instance?.id === groupCall.id) {\n this.updateInstance();\n }\n });\n\n listenerSetter.add(instance)('pinned', () => {\n this.setHasPinned();\n });\n\n listenerSetter.add(this.groupCallParticipantsVideo)('toggleControls', this.onToggleControls);\n\n this.addEventListener('close', () => {\n const {movablePanel} = this;\n previousState = movablePanel.state;\n\n this.groupCallParticipantsVideo.destroy();\n this.groupCallParticipants.destroy();\n this.groupCallMicrophoneIcon.destroy();\n\n movablePanel.destroy();\n });\n\n this.toggleRightColumn();\n this.onFullScreenChange();\n\n this.updateInstance();\n }\n\n private constructButtons() {\n const buttons = this.buttonsContainer = document.createElement('div');\n buttons.classList.add(className + '-buttons');\n\n const _makeButton = makeButton.bind(null, className, this.listenerSetter);\n\n const btnVideo = this.btnVideo = _makeButton({\n // text: 'VoiceChat.Video.Stream.Video',\n callback: this.onVideoClick,\n icon: 'videocamera_filled'\n });\n\n const btnScreen = this.btnScreen = _makeButton({\n // text: 'VoiceChat.Video.Stream.Screencast',\n callback: this.onScreenClick,\n icon: 'sharescreen_filled'\n });\n\n btnScreen.classList.toggle('hide', !IS_SCREEN_SHARING_SUPPORTED);\n\n const btnMute = _makeButton({\n noRipple: true,\n callback: throttle(this.onMuteClick, 600, true)\n });\n btnMute.classList.add(className + '-microphone-button');\n\n const microphoneIcon = this.groupCallMicrophoneIcon = new GroupCallMicrophoneIcon();\n btnMute.append(microphoneIcon.container);\n\n const btnMore = _makeButton({\n // text: 'VoiceChat.Video.Stream.More'\n icon: 'settings_filled'\n });\n\n btnMore.classList.add('btn-disabled');\n btnMore.classList.toggle('hide', !IS_SCREEN_SHARING_SUPPORTED);\n\n const btnLeave = _makeButton({\n // text: 'VoiceChat.Leave',\n isDanger: true,\n callback: this.onLeaveClick,\n icon: 'close'\n });\n\n buttons.append(btnVideo, btnScreen, btnMute, btnMore, btnLeave);\n\n this.container.append(buttons);\n }\n\n private onFullScreenClick = () => {\n requestFullScreen(this.container);\n };\n\n private onToggleControls = (show: boolean) => {\n this.container.classList.toggle('show-controls', show);\n this.buttonsContainer.classList.toggle('show-controls', show);\n };\n\n private toggleDisability = toggleClassName.bind(null, 'btn-disabled');\n\n private onVideoClick = () => {\n const toggle = this.toggleDisability([this.btnVideo], true);\n this.instance.toggleVideoSharing().finally(() => {\n toggle();\n });\n };\n\n private onScreenClick = () => {\n const toggle = this.toggleDisability([this.btnScreen], true);\n this.instance.toggleScreenSharing().finally(() => {\n toggle();\n });\n };\n\n private onMuteClick = () => {\n const participant = this.instance.participant;\n if(!participant.pFlags.can_self_unmute) {\n if(participant.raise_hand_rating === undefined) {\n this.instance.changeRaiseHand(true);\n }\n } else {\n this.instance.toggleMuted();\n }\n };\n\n private onLeaveClick = async() => {\n const hangUp = (discard: boolean) => {\n this.instance.hangUp(discard);\n };\n\n if(await this.managers.appChatsManager.hasRights(this.instance.chatId, 'manage_call')) {\n PopupElement.createPopup(PopupPeer, 'popup-end-video-chat', {\n titleLangKey: 'VoiceChat.End.Title',\n descriptionLangKey: 'VoiceChat.End.Text',\n checkboxes: [{\n text: 'VoiceChat.End.Third'\n }],\n buttons: [{\n langKey: 'VoiceChat.End.OK',\n callback: (e, checkboxes) => {\n hangUp(!!checkboxes.size);\n },\n isDanger: true\n }]\n }).show();\n } else {\n hangUp(false);\n }\n };\n\n public getContainer() {\n return this.container;\n }\n\n private onFullScreenChange = () => {\n this.toggleBigLayout();\n const isFull = isFullScreen();\n\n const {btnFullScreen, btnExitFullScreen} = this;\n\n const wasFullScreen = this.container.classList.contains('is-full-screen');\n this.container.classList.toggle('is-full-screen', isFull);\n btnFullScreen && btnFullScreen.classList.toggle('hide', isFull);\n btnExitFullScreen && btnExitFullScreen.classList.toggle('hide', !isFull);\n this.btnClose.classList.toggle('hide', isFull);\n\n if(isFull !== wasFullScreen) {\n animationIntersector.checkAnimations2(isFull);\n\n themeController.setThemeColor(isFull ? '#000000' : undefined);\n }\n };\n\n private toggleBigLayout = () => {\n const isFull = isFullScreen();\n const movable = this.movablePanel?.movable;\n const isBig = (isFull || !!(movable && movable.width >= 680)) && !!this.videosCount;\n\n /* if(!isBig && isFull) {\n cancelFullScreen();\n return;\n } */\n\n const wasBig = this.container.classList.contains('is-big-layout');\n let buttons: HTMLElement[];\n if(isBig && !wasBig) { // fix buttons transition to 0 opacity\n buttons = Array.from(this.buttonsContainer.children) as HTMLElement[];\n buttons.forEach((element) => {\n element.style.opacity = '0';\n });\n\n void this.buttonsContainer.offsetLeft;\n }\n\n this.container.classList.toggle('is-big-layout', isBig);\n this.btnInvite.classList.toggle('hide', isBig);\n this.btnShowColumn.classList.toggle('hide', !isBig);\n\n if(buttons) {\n // window.requestAnimationFrame(() => {\n buttons.forEach((element) => {\n element.style.opacity = '';\n });\n // });\n }\n };\n\n private toggleRightColumn = () => {\n this.container.classList.toggle('is-right-column-shown');\n };\n\n private setHasPinned() {\n this.container.classList.toggle('has-pinned', !!this.instance.pinnedSource);\n }\n\n private updateInstance() {\n if(this.instance.state === GROUP_CALL_STATE.CLOSED) {\n if(this.container.classList.contains('is-full-screen')) {\n cancelFullScreen();\n }\n\n this.hide();\n return;\n }\n\n const {participant, groupCall} = this.instance;\n if(!participant) {\n return;\n }\n\n this.setTitle();\n this.setDescription();\n this.setHasPinned();\n\n const microphoneButtonState = getGroupCallMicrophoneButtonState(groupCall as any, participant);\n this.container.dataset.micState = microphoneButtonState === GROUP_CALL_MICROPHONE_BUTTON_STATE.HAND ? 'hand' : (microphoneButtonState === GROUP_CALL_MICROPHONE_BUTTON_STATE.MUTED ? 'muted' : 'unmuted');\n this.groupCallMicrophoneIcon.setState(microphoneButtonState);\n }\n\n private setTitle() {\n this.groupCallTitle.update(this.instance);\n }\n\n private setDescription() {\n this.groupCallDescription.update(this.instance);\n this.groupCallBodyHeaderDescription.update(this.instance);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nenum CALL_STATE {\n CONNECTED,\n CONNECTING,\n EXCHANGING_KEYS,\n PENDING,\n REQUESTING,\n CLOSING,\n CLOSED\n}\n\nexport default CALL_STATE;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport toHHMMSS from '../../helpers/string/toHHMMSS';\nimport CallInstance from '../../lib/calls/callInstance';\nimport CALL_STATE from '../../lib/calls/callState';\nimport {i18n, LangPackKey} from '../../lib/langPack';\n\nexport default class CallDescriptionElement {\n private container: HTMLElement;\n private state: CALL_STATE;\n private interval: number;\n\n constructor(private appendTo: HTMLElement) {\n this.container = document.createElement('div');\n this.container.classList.add('call-description');\n }\n\n public detach() {\n if(this.interval !== undefined) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n\n this.container.remove();\n this.state = undefined;\n }\n\n public update(instance: CallInstance) {\n const {connectionState} = instance;\n\n if(this.state === connectionState) {\n return;\n }\n\n this.state = connectionState;\n\n let element: HTMLElement;\n if(connectionState === CALL_STATE.CONNECTED) {\n element = document.createElement('span');\n element.classList.add('call-description-duration');\n\n const setTime = () => {\n element.innerText = toHHMMSS(instance.duration, true);\n };\n\n this.interval = window.setInterval(setTime, 1000);\n setTime();\n } else {\n let langPackKey: LangPackKey;\n switch(connectionState) {\n case CALL_STATE.PENDING:\n langPackKey = instance.isOutgoing ? 'Call.StatusRinging' : 'Call.StatusCalling';\n break;\n case CALL_STATE.REQUESTING:\n langPackKey = 'Call.StatusRequesting';\n break;\n case CALL_STATE.EXCHANGING_KEYS:\n langPackKey = 'VoipExchangingKeys';\n break;\n case CALL_STATE.CLOSED:\n langPackKey = instance.connectedAt !== undefined ? 'Call.StatusEnded' : 'Call.StatusFailed';\n break;\n default:\n langPackKey = 'Call.StatusConnecting';\n break;\n }\n\n element = i18n(langPackKey);\n if(this.interval !== undefined) {\n clearInterval(this.interval);\n this.interval = undefined;\n }\n }\n\n this.container.classList.toggle('has-duration', connectionState === CALL_STATE.CONNECTED);\n replaceContent(this.container, element);\n\n if(!this.container.parentElement) {\n this.appendTo.append(this.container);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {SuperRLottieIcon} from '../superIcon';\n\nexport default class GroupCallMicrophoneIconMini extends SuperRLottieIcon<{\n PartState: boolean,\n ColorState: boolean,\n Items: {\n name: 'voice_mini'\n }[]\n}> {\n constructor(colored?: boolean, skipAnimation?: boolean) {\n super({\n width: 36,\n height: 36,\n getPart: (state) => {\n return this.getItem().getPart(state ? 'unmute' : 'mute');\n },\n getColor: colored ? (state) => {\n return state ? [255, 255, 255] : [158, 158, 158];\n } : undefined,\n skipAnimation\n });\n\n this.add({\n name: 'voice_mini',\n parts: [{\n startFrame: 0,\n endFrame: 35,\n name: 'hand-to-muted'\n }, {\n startFrame: 36,\n endFrame: 68,\n name: 'unmute'\n }, {\n startFrame: 69,\n endFrame: 98,\n name: 'mute'\n }, {\n startFrame: 99,\n endFrame: 135,\n name: 'muted-to-hand'\n }, {\n startFrame: 136,\n endFrame: 171,\n name: 'unmuted-to-hand'\n }]\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport IS_SCREEN_SHARING_SUPPORTED from '../../environment/screenSharingSupport';\nimport {IS_MOBILE} from '../../environment/userAgent';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport ControlsHover from '../../helpers/dom/controlsHover';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport {addFullScreenListener, cancelFullScreen, isFullScreen, requestFullScreen} from '../../helpers/dom/fullScreen';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport safePlay from '../../helpers/dom/safePlay';\nimport MovablePanel from '../../helpers/movablePanel';\nimport onMediaLoad from '../../helpers/onMediaLoad';\nimport themeController from '../../helpers/themeController';\nimport toggleClassName from '../../helpers/toggleClassName';\nimport CallInstance from '../../lib/calls/callInstance';\nimport CALL_STATE from '../../lib/calls/callState';\nimport I18n, {i18n} from '../../lib/langPack';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\nimport animationIntersector from '../animationIntersector';\nimport {avatarNew} from '../avatarNew';\nimport ButtonIcon from '../buttonIcon';\nimport GroupCallMicrophoneIconMini from '../groupCall/microphoneIconMini';\nimport {MovableState} from '../movableElement';\nimport PeerTitle from '../peerTitle';\nimport PopupElement from '../popups';\nimport SetTransition from '../singleTransition';\nimport makeButton from './button';\nimport CallDescriptionElement from './description';\nimport callVideoCanvasBlur from './videoCanvasBlur';\n\nconst className = 'call';\n\nconst MIN_WIDTH = 400;\nconst MIN_HEIGHT = 580;\n\nconst INIT_STATE: MovableState = {\n width: MIN_WIDTH,\n height: MIN_HEIGHT\n};\n\nlet previousState: MovableState = {...INIT_STATE};\n\nexport default class PopupCall extends PopupElement {\n private peerId: PeerId;\n\n private description: CallDescriptionElement;\n private emojisSubtitle: HTMLElement;\n\n private partyStates: HTMLElement;\n private partyMutedState: HTMLElement;\n\n private firstButtonsRow: HTMLElement;\n private secondButtonsRow: HTMLElement;\n\n private declineI18nElement: I18n.IntlElement;\n\n private makeButton: (options: Parameters[2]) => HTMLElement;\n private btnAccept: HTMLElement;\n private btnDecline: HTMLElement;\n private btnVideo: HTMLElement;\n private btnScreen: HTMLElement;\n private btnMute: HTMLElement;\n private btnFullScreen: HTMLButtonElement;\n private btnExitFullScreen: HTMLButtonElement;\n\n private movablePanel: MovablePanel;\n private microphoneIcon: GroupCallMicrophoneIconMini;\n private muteI18nElement: I18n.IntlElement;\n\n private videoContainers: {\n input?: HTMLElement,\n output?: HTMLElement\n };\n\n private controlsHover: ControlsHover;\n\n constructor(private instance: CallInstance) {\n super('popup-call', {\n withoutOverlay: true,\n closable: true\n });\n\n this.videoContainers = {};\n\n const {container, listenerSetter} = this;\n container.classList.add(className, 'night');\n\n const avatarContainer = document.createElement('div');\n avatarContainer.classList.add(className + '-avatar');\n\n const peerId = this.peerId = this.instance.interlocutorUserId.toPeerId();\n const {node} = avatarNew({\n middleware: this.middlewareHelper.get(),\n isBig: true,\n peerId,\n size: 'full'\n });\n avatarContainer.append(node);\n\n const title = new PeerTitle({\n peerId\n }).element;\n\n title.classList.add(className + '-title');\n\n const subtitle = document.createElement('div');\n subtitle.classList.add(className + '-subtitle');\n\n const description = this.description = new CallDescriptionElement(subtitle);\n\n const emojisSubtitle = this.emojisSubtitle = document.createElement('div');\n emojisSubtitle.classList.add(className + '-emojis');\n\n container.append(avatarContainer, title, subtitle);\n\n if(!IS_MOBILE) {\n this.btnFullScreen = ButtonIcon('fullscreen');\n this.btnExitFullScreen = ButtonIcon('smallscreen hide');\n attachClickEvent(this.btnFullScreen, this.onFullScreenClick, {listenerSetter});\n attachClickEvent(this.btnExitFullScreen, () => cancelFullScreen(), {listenerSetter});\n addFullScreenListener(this.container, this.onFullScreenChange, listenerSetter);\n this.header.prepend(this.btnExitFullScreen);\n this.header.append(this.btnFullScreen);\n\n container.append(emojisSubtitle);\n } else {\n this.header.append(emojisSubtitle);\n }\n\n this.partyStates = document.createElement('div');\n this.partyStates.classList.add(className + '-party-states');\n\n this.partyMutedState = document.createElement('div');\n this.partyMutedState.classList.add(className + '-party-state');\n const stateText = i18n('VoipUserMicrophoneIsOff', [new PeerTitle({peerId, onlyFirstName: true, limitSymbols: 18}).element]);\n stateText.classList.add(className + '-party-state-text');\n const mutedIcon = new GroupCallMicrophoneIconMini(false, true);\n mutedIcon.setState(false, false);\n this.partyMutedState.append(\n mutedIcon.container,\n stateText\n );\n\n this.partyStates.append(this.partyMutedState);\n this.container.append(this.partyStates);\n\n this.makeButton = makeButton.bind(null, className, this.listenerSetter);\n this.constructFirstButtons();\n this.constructSecondButtons();\n\n listenerSetter.add(instance)('state', () => {\n this.updateInstance();\n });\n\n listenerSetter.add(instance)('mediaState', () => {\n this.updateInstance();\n });\n\n this.movablePanel = new MovablePanel({\n listenerSetter,\n movableOptions: {\n minWidth: MIN_WIDTH,\n minHeight: MIN_HEIGHT,\n element: this.element,\n verifyTouchTarget: (e) => {\n const target = e.target;\n if(findUpClassName(target, 'call-button') ||\n findUpClassName(target, 'btn-icon') ||\n isFullScreen()) {\n return false;\n }\n\n return true;\n }\n },\n // onResize: () => this.toggleBigLayout(),\n previousState: !this.instance.wasTryingToJoin && !this.instance.isOutgoing ? {...INIT_STATE} : previousState\n });\n\n const movableElement = this.movablePanel.movable;\n if(movableElement) {\n this.listenerSetter.add(movableElement)('resize', () => {\n this.resizeVideoContainers();\n });\n }\n\n const controlsHover = this.controlsHover = new ControlsHover();\n controlsHover.setup({\n element: this.container,\n listenerSetter: this.listenerSetter,\n showOnLeaveToClassName: 'call-buttons'\n });\n controlsHover.showControls(false);\n\n this.addEventListener('close', () => {\n const {movablePanel} = this;\n previousState = movablePanel.state;\n\n this.microphoneIcon.destroy();\n\n movablePanel.destroy();\n });\n\n this.updateInstance();\n }\n\n public getCallInstance() {\n return this.instance;\n }\n\n private constructFirstButtons() {\n const buttons = this.firstButtonsRow = document.createElement('div');\n buttons.classList.add(className + '-buttons', 'is-first');\n\n const toggleDisability = toggleClassName.bind(null, 'btn-disabled');\n\n const btnVideo = this.btnVideo = this.makeButton({\n text: 'Call.Camera',\n icon: 'videocamera_filled',\n callback: () => {\n const toggle = toggleDisability([btnVideo, btnScreen], true);\n this.instance.toggleVideoSharing().finally(toggle);\n }\n });\n\n const btnScreen = this.btnScreen = this.makeButton({\n text: 'Call.Screen',\n icon: 'sharescreen_filled',\n callback: () => {\n const toggle = toggleDisability([btnVideo, btnScreen], true);\n this.instance.toggleScreenSharing().finally(toggle);\n }\n });\n\n if(!IS_SCREEN_SHARING_SUPPORTED) {\n btnScreen.classList.add('hide');\n this.container.classList.add('no-screen');\n }\n\n this.muteI18nElement = new I18n.IntlElement({\n key: 'Call.Mute'\n });\n const btnMute = this.btnMute = this.makeButton({\n text: this.muteI18nElement.element,\n callback: () => {\n this.instance.toggleMuted();\n }\n });\n\n const microphoneIcon = this.microphoneIcon = new GroupCallMicrophoneIconMini(true, true);\n btnMute.firstElementChild.append(microphoneIcon.container);\n\n // btnVideo.classList.add('disabled');\n // btnScreen.classList.add('disabled');\n\n buttons.append(btnVideo, btnScreen, btnMute);\n this.container.append(buttons);\n }\n\n private constructSecondButtons() {\n const buttons = this.secondButtonsRow = document.createElement('div');\n buttons.classList.add(className + '-buttons', 'is-second');\n\n this.declineI18nElement = new I18n.IntlElement({\n key: 'Call.Decline'\n });\n const btnDecline = this.btnDecline = this.makeButton({\n text: this.declineI18nElement.element,\n icon: 'endcall_filled',\n callback: () => {\n this.instance.hangUp('phoneCallDiscardReasonHangup');\n },\n isDanger: true\n });\n\n const btnAccept = this.btnAccept = this.makeButton({\n text: 'Call.Accept',\n icon: 'phone_filled',\n callback: () => {\n this.instance.acceptCall();\n },\n isConfirm: true\n });\n\n buttons.append(btnDecline, btnAccept);\n this.container.append(buttons);\n }\n\n private onFullScreenClick = () => {\n requestFullScreen(this.container);\n };\n\n private onFullScreenChange = () => {\n const isFull = isFullScreen();\n\n const {btnFullScreen, btnExitFullScreen} = this;\n\n const wasFullScreen = this.container.classList.contains('is-full-screen');\n this.container.classList.toggle('is-full-screen', isFull);\n btnFullScreen && btnFullScreen.classList.toggle('hide', isFull);\n btnExitFullScreen && btnExitFullScreen.classList.toggle('hide', !isFull);\n this.btnClose.classList.toggle('hide', isFull);\n\n if(isFull !== wasFullScreen) {\n animationIntersector.checkAnimations(isFull);\n\n themeController.setThemeColor(isFull ? '#000000' : undefined);\n\n this.resizeVideoContainers();\n }\n };\n\n private createVideoContainer(video: HTMLVideoElement) {\n const _className = className + '-video';\n const container = document.createElement('div');\n container.classList.add(_className + '-container');\n\n video.classList.add(_className);\n if(video.paused) {\n safePlay(video);\n }\n\n attachClickEvent(container, () => {\n if(!container.classList.contains('small')) {\n return;\n }\n\n const big = Object.values(this.videoContainers).find((container) => !container.classList.contains('small'));\n big.classList.add('small');\n big.style.cssText = container.style.cssText;\n container.classList.remove('small');\n container.style.cssText = '';\n\n this.resizeVideoContainers();\n });\n\n const canvas = callVideoCanvasBlur(video);\n canvas.classList.add(_className + '-blur');\n\n container.append(canvas, video);\n\n return container;\n }\n\n private updateInstance() {\n const {instance} = this;\n const {connectionState} = instance;\n if(connectionState === CALL_STATE.CLOSED) {\n if(this.container.classList.contains('is-full-screen')) {\n cancelFullScreen();\n }\n\n this.btnVideo.classList.add('disabled');\n\n this.hide();\n return;\n }\n\n const isPendingIncoming = !instance.isOutgoing && connectionState === CALL_STATE.PENDING;\n this.declineI18nElement.compareAndUpdate({\n key: connectionState === CALL_STATE.PENDING ? 'Call.Decline' : 'Call.End'\n });\n this.btnAccept.classList.toggle('disable', !isPendingIncoming);\n this.btnAccept.classList.toggle('hide-me', !isPendingIncoming);\n this.container.classList.toggle('two-button-rows', isPendingIncoming);\n\n const isMuted = instance.isMuted;\n const onFrame = () => {\n this.btnMute.firstElementChild.classList.toggle('active', isMuted);\n };\n\n const player = this.microphoneIcon.getItem().player;\n this.microphoneIcon.setState(!isMuted, !isMuted, onFrame);\n if(!player) {\n onFrame();\n }\n\n this.muteI18nElement.compareAndUpdate({\n key: isMuted ? 'VoipUnmute' : 'Call.Mute'\n });\n\n const isSharingVideo = instance.isSharingVideo;\n this.btnVideo.firstElementChild.classList.toggle('active', isSharingVideo);\n\n const isSharingScreen = instance.isSharingScreen;\n this.btnScreen.firstElementChild.classList.toggle('active', isSharingScreen);\n\n const outputState = instance.getMediaState('output');\n\n SetTransition({\n element: this.partyMutedState,\n className: 'is-visible',\n forwards: !!outputState?.muted,\n duration: 300\n });\n\n const containers = this.videoContainers;\n const oldContainers = {...containers};\n ['input' as const, 'output' as const].forEach((type) => {\n const mediaState = instance.getMediaState(type);\n const video = instance.getVideoElement(type) as HTMLVideoElement;\n\n const hasFrame = !!(video && video.videoWidth && video.videoHeight);\n if(video && !hasFrame && !video.dataset.hasPromise) {\n video.dataset.hasPromise = '1';\n // container.classList.add('hide');\n onMediaLoad(video).then(() => {\n delete video.dataset.hasPromise;\n this.updateInstance();\n // this.resizeVideoContainers();\n // container.classList.remove('hide');\n });\n }\n\n const isActive = !!video && hasFrame && !!(mediaState && (mediaState.videoState === 'active' || mediaState.screencastState === 'active'));\n let videoContainer = containers[type];\n\n if(isActive && video && !videoContainer) {\n videoContainer = containers[type] = this.createVideoContainer(video);\n this.container.append(videoContainer);\n }\n\n if(!isActive && videoContainer) {\n videoContainer.remove();\n delete containers[type];\n }\n });\n\n {\n const input = containers.input;\n const output = containers.output;\n if(Object.keys(oldContainers).length !== Object.keys(containers).length && input) {\n input.classList.toggle('small', !!output);\n }\n\n if(output && !input) {\n output.classList.remove('small');\n }\n }\n\n this.resizeVideoContainers();\n\n this.container.classList.toggle('no-video', !Object.keys(containers).length);\n\n if(!this.emojisSubtitle.textContent && connectionState < CALL_STATE.EXCHANGING_KEYS) {\n Promise.resolve(instance.getEmojisFingerprint()).then((emojis) => {\n replaceContent(this.emojisSubtitle, wrapEmojiText(emojis.join('')));\n });\n }\n\n this.setDescription();\n }\n\n private resizeVideoContainers() {\n Object.values(this.videoContainers).forEach((container) => {\n const isSmall = container.classList.contains('small');\n if(isSmall) {\n const video = container.querySelector('video');\n const popupWidth = this.movablePanel.state;\n const MAX_WIDTH_PX = 240;\n const MAX_HEIGHT_PX = 240;\n\n const isVertical = video.videoHeight > video.videoWidth;\n const MAX_SIZE = isVertical ? MAX_HEIGHT_PX : MAX_WIDTH_PX;\n\n const biggestSideSize = 1 / 3 * (isFullScreen() ? 0xFFFF : (isVertical ? popupWidth.height : popupWidth.width));\n const widthRatio = isVertical ? video.videoWidth / video.videoHeight : 1;\n const heightRatio = isVertical ? 1 : video.videoHeight / video.videoWidth;\n container.style.width = biggestSideSize * widthRatio + 'px';\n container.style.height = biggestSideSize * heightRatio + 'px';\n container.style.maxWidth = MAX_SIZE * widthRatio + 'px';\n container.style.maxHeight = MAX_SIZE * heightRatio + 'px';\n } else {\n container.style.cssText = '';\n }\n });\n }\n\n private setDescription() {\n this.description.update(this.instance);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport SDP from '../sdp';\nimport {CallSignalingData, P2PVideoCodec} from '../types';\nimport parseMediaSectionInfo from './parseMediaSectionInfo';\n\nexport default function parseSignalingData(sdp: SDP) {\n const info = parseMediaSectionInfo(sdp, sdp.media[0]);\n\n const data: CallSignalingData.initialSetup = {\n '@type': 'InitialSetup',\n 'fingerprints': [info.fingerprint],\n 'ufrag': info.ufrag,\n 'pwd': info.pwd,\n 'audio': undefined,\n 'video': undefined,\n 'screencast': undefined\n };\n\n const convertNumber = (number: number) => '' + number;\n\n for(const section of sdp.media) {\n const mediaType = section.mediaType;\n if(mediaType === 'application' || !section.isSending) {\n continue;\n }\n\n const codec: P2PVideoCodec = data[mediaType === 'video' && data['video'] ? 'screencast' : mediaType] = {} as any;\n const info = parseMediaSectionInfo(sdp, section);\n codec.ssrc = convertNumber(info.source);\n\n if(info.sourceGroups) {\n codec.ssrcGroups = info.sourceGroups.map((sourceGroup) => ({semantics: sourceGroup.semantics, ssrcs: sourceGroup.sources.map(convertNumber)}));\n }\n\n const rtpExtensions: P2PVideoCodec['rtpExtensions'] = codec.rtpExtensions = [];\n section.attributes.get('extmap').forEach((attribute) => {\n rtpExtensions.push({\n id: +attribute.key,\n uri: attribute.value\n });\n });\n\n const payloadTypesMap: Map = new Map();\n\n const getPayloadType = (id: number) => {\n let payloadType = payloadTypesMap.get(id);\n if(!payloadType) {\n payloadTypesMap.set(id, payloadType = {\n id\n } as any);\n }\n\n return payloadType;\n };\n\n section.attributes.get('rtpmap').forEach((attribute) => {\n const id = +attribute.key;\n const payloadType = getPayloadType(id);\n const splitted = attribute.value.split('/');\n const [name, clockrate, channels] = splitted;\n payloadType.name = name;\n payloadType.clockrate = +clockrate;\n payloadType.channels = channels ? +channels : 0;\n });\n\n section.attributes.get('rtcp-fb').forEach((attribute) => {\n const id = +attribute.key;\n const payloadType = getPayloadType(id);\n payloadType.feedbackTypes = attribute.lines.map((line) => {\n const splitted = line.split(' ');\n const [type, subtype] = splitted;\n return {\n type,\n subtype: subtype || ''\n };\n });\n });\n\n section.attributes.get('fmtp').forEach((attribute) => {\n const id = +attribute.key;\n const payloadType = getPayloadType(id);\n const parameters: P2PVideoCodec['payloadTypes'][0]['parameters'] = payloadType.parameters = {};\n const splitted = attribute.value.split(';');\n for(const str of splitted) {\n const [key, value] = str.split('=');\n parameters[key] = value;\n }\n });\n\n codec.payloadTypes = Array.from(payloadTypesMap.values());\n\n /* if(codec.payloadTypes.length > 5) {\n codec.payloadTypes.length = Math.min(codec.payloadTypes.length, 5);\n } */\n }\n\n return data;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport CallConnectionInstanceBase, {CallConnectionInstanceOptions} from './callConnectionInstanceBase';\nimport CallInstance from './callInstance';\nimport parseSignalingData from './helpers/parseSignalingData';\nimport {parseSdp} from './sdp/utils';\n\nexport default class CallConnectionInstance extends CallConnectionInstanceBase {\n private call: CallInstance;\n\n constructor(options: CallConnectionInstanceOptions & {\n call: CallConnectionInstance['call']\n }) {\n super(options);\n }\n\n protected async negotiateInternal() {\n const {connection, call} = this;\n\n if(!connection.localDescription && !connection.remoteDescription && !call.isOutgoing) {\n return;\n }\n\n let descriptionInit: RTCSessionDescriptionInit;\n if(call.offerReceived) {\n call.offerReceived = false;\n\n const answer = descriptionInit = await connection.createAnswer();\n\n this.log('[sdp] local', answer.type, answer.sdp);\n await connection.setLocalDescription(answer);\n\n this.log('[InitialSetup] send 2');\n } else {\n const offer = descriptionInit = await connection.createOffer();\n\n this.log('[sdp] local', offer.sdp);\n await connection.setLocalDescription(offer);\n\n call.offerSent = true;\n\n this.log('[InitialSetup] send 0');\n }\n\n const initialSetup = parseSignalingData(parseSdp(descriptionInit.sdp));\n call.sendCallSignalingData(initialSetup);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport AudioAssetPlayer from '../../helpers/audioAssetPlayer';\n\nexport type CallAudioAssetName = 'call_busy.mp3' | 'call_connect.mp3' | 'call_end.mp3' | 'call_incoming.mp3' | 'call_outgoing.mp3' | 'voip_failed.mp3' | 'voip_connecting.mp3';\n\nlet audioAsset: AudioAssetPlayer;\nexport default function getCallAudioAsset() {\n return audioAsset ??= new AudioAssetPlayer([\n 'call_busy.mp3',\n 'call_connect.mp3',\n 'call_end.mp3',\n 'call_incoming.mp3',\n 'call_outgoing.mp3',\n 'voip_failed.mp3'\n ]);\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport getCallAudioAsset, {CallAudioAssetName} from '../../components/call/getAudioAsset';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport IS_CALL_SUPPORTED from '../../environment/callSupport';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport insertInDescendSortedArray from '../../helpers/array/insertInDescendSortedArray';\nimport AudioAssetPlayer from '../../helpers/audioAssetPlayer';\nimport bytesCmp from '../../helpers/bytes/bytesCmp';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport tsNow from '../../helpers/tsNow';\nimport {PhoneCallProtocol} from '../../layer';\nimport {CallId} from '../appManagers/appCallsManager';\nimport {AppManagers} from '../appManagers/managers';\nimport {logger} from '../logger';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport rootScope from '../rootScope';\nimport CallInstance from './callInstance';\nimport CALL_STATE from './callState';\n\nconst CALL_REQUEST_TIMEOUT = 45e3;\n\nexport class CallsController extends EventListenerBase<{\n instance: (details: {hasCurrent: boolean, instance: CallInstance}) => void,\n accepting: (instance: CallInstance) => void, // это костыль. используется при параллельном вызове, чтобы заменить звонок в topbarCall\n incompatible: (userId: UserId) => void,\n}> {\n private log: ReturnType;\n private managers: AppManagers;\n private audioAsset: AudioAssetPlayer;\n private instances: Map;\n private sortedInstances: Array;\n private tempId: number;\n\n public construct(managers: AppManagers) {\n this.managers = managers;\n this.log = logger('CC');\n\n if(!IS_CALL_SUPPORTED) {\n return;\n }\n\n this.audioAsset = getCallAudioAsset();\n this.tempId = 0;\n this.instances = new Map();\n this.sortedInstances = [];\n\n rootScope.addEventListener('call_update', async(call) => {\n let instance = this.instances.get(call.id);\n\n if(instance) {\n instance.setPhoneCall(call);\n }\n\n switch(call._) {\n case 'phoneCallDiscarded': {\n if(instance) {\n instance.hangUp(call.reason?._, true);\n }\n\n break;\n }\n\n case 'phoneCallAccepted': {\n if(instance) {\n /* if(!this.verifyProtocolCompatibility(call.protocol)) {\n instance.hangUp('phoneCallDiscardReasonDisconnect');\n rootScope.dispatchEvent('call_incompatible', instance.interlocutorUserId);\n break;\n } */\n\n instance.confirmCall();\n }\n\n break;\n }\n\n case 'phoneCallRequested': {\n if(!instance) {\n /* if(!this.verifyProtocolCompatibility(call.protocol)) {\n rootScope.dispatchEvent('call_incompatible', call.admin_id);\n break;\n } */\n\n instance = this.createCallInstance({\n isOutgoing: false,\n interlocutorUserId: call.admin_id\n });\n\n instance.overrideConnectionState(CALL_STATE.PENDING);\n instance.setPhoneCall(call);\n instance.setHangUpTimeout(CALL_REQUEST_TIMEOUT, 'phoneCallDiscardReasonMissed');\n }\n\n break;\n }\n\n case 'phoneCall': {\n if(!instance || instance.encryptionKey) {\n break;\n }\n\n const g_a = instance.dh.g_a = call.g_a_or_b;\n const dh = instance.dh;\n const g_a_hash = await apiManagerProxy.invokeCrypto('sha256', g_a);\n if(!bytesCmp(dh.g_a_hash, g_a_hash)) {\n this.log.error('Incorrect g_a_hash', dh.g_a_hash, g_a_hash);\n break;\n }\n\n const {key, key_fingerprint} = await this.managers.appCallsManager.computeKey(g_a, dh.b, dh.p);\n if(call.key_fingerprint !== key_fingerprint) {\n this.log.error('Incorrect key fingerprint', call.key_fingerprint, key_fingerprint, g_a, dh);\n instance.hangUp('phoneCallDiscardReasonDisconnect');\n break;\n }\n\n instance.encryptionKey = key;\n instance.joinCall();\n\n break;\n }\n }\n });\n\n rootScope.addEventListener('call_signaling', ({callId, data}) => {\n const instance = this.instances.get(callId);\n if(instance?.id !== callId) {\n return;\n }\n\n instance.onUpdatePhoneCallSignalingData(data);\n });\n }\n\n public get currentCall() {\n return this.sortedInstances?.[0];\n }\n\n public getCallByUserId(userId: UserId) {\n for(const [callId, instance] of this.instances) {\n if(instance.interlocutorUserId === userId) {\n return instance;\n }\n }\n }\n\n private createCallInstance(options: {\n isOutgoing: boolean,\n interlocutorUserId: UserId,\n protocol?: PhoneCallProtocol\n }) {\n const call = new CallInstance({\n managers: this.managers,\n ...options\n });\n\n call.addEventListener('state', (state) => {\n const currentCall = this.currentCall;\n if(state === CALL_STATE.CLOSED) {\n this.instances.delete(call.id);\n indexOfAndSplice(this.sortedInstances, call);\n } else {\n insertInDescendSortedArray(this.sortedInstances, call, 'sortIndex');\n }\n\n if(state === CALL_STATE.EXCHANGING_KEYS) {\n call.wasTryingToJoin = true;\n }\n\n const hasConnected = call.connectedAt !== undefined;\n if(state === CALL_STATE.EXCHANGING_KEYS || (state === CALL_STATE.CONNECTING && hasConnected)) {\n call.setHangUpTimeout(CALL_REQUEST_TIMEOUT, 'phoneCallDiscardReasonDisconnect');\n } else {\n call.clearHangUpTimeout();\n }\n\n if(currentCall === call || !currentCall) {\n if(state === CALL_STATE.CLOSED) {\n if(!call.isOutgoing && !call.wasTryingToJoin) { // incoming call has been accepted on other device or ended\n this.audioAsset.stopSound();\n } else if(call.wasTryingToJoin && !hasConnected) { // something has happened during the key exchanging\n this.audioAsset.playSound('voip_failed.mp3');\n } else {\n this.audioAsset.playSound(call.discardReason === 'phoneCallDiscardReasonBusy' ? 'call_busy.mp3' : 'call_end.mp3');\n }\n } else if(state === CALL_STATE.PENDING) {\n this.audioAsset.playSound(call.isOutgoing ? 'call_outgoing.mp3' : 'call_incoming.mp3', true);\n } else if(state === CALL_STATE.EXCHANGING_KEYS) {\n this.audioAsset.playSoundIfDifferent('call_connect.mp3');\n } else if(state === CALL_STATE.CONNECTING) {\n if(call.duration) {\n this.audioAsset.playSound('voip_connecting.mp3', true);\n }\n } else {\n this.audioAsset.stopSound();\n }\n }\n });\n\n call.addEventListener('id', (id, prevId) => {\n if(prevId !== undefined) {\n this.instances.delete(prevId);\n }\n\n const hasCurrent = !!this.currentCall;\n this.instances.set(id, call);\n\n if(prevId === undefined) {\n this.dispatchEvent('instance', {instance: call, hasCurrent: hasCurrent});\n }\n });\n\n return call;\n }\n\n public async startCallInternal(userId: UserId, isVideo: boolean) {\n this.log('p2pStartCallInternal', userId, isVideo);\n\n const fullInfo = await this.managers.appProfileManager.getProfile(userId);\n if(!fullInfo) return;\n\n const {video_calls_available} = fullInfo.pFlags;\n\n const call = this.createCallInstance({\n isOutgoing: true,\n interlocutorUserId: userId\n });\n\n call.requestInputSource(true, !!(isVideo && video_calls_available), false);\n\n call.overrideConnectionState(CALL_STATE.REQUESTING);\n call.setPhoneCall({\n _: 'phoneCallWaiting',\n access_hash: '',\n admin_id: NULL_PEER_ID,\n date: tsNow(true),\n id: --this.tempId,\n participant_id: userId,\n protocol: call.protocol,\n pFlags: {\n video: isVideo || undefined\n }\n });\n\n // return;\n this.managers.appCallsManager.generateDh().then(async(dh) => {\n call.dh = dh;\n\n return this.managers.appCallsManager.requestCall(userId, call.protocol, call.dh.g_a_hash, isVideo && video_calls_available);\n }).then((phoneCall) => {\n call.overrideConnectionState(CALL_STATE.PENDING);\n call.setPhoneCall(phoneCall);\n call.setHangUpTimeout(CALL_REQUEST_TIMEOUT, 'phoneCallDiscardReasonHangup');\n });\n }\n}\n\nconst callsController = new CallsController();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.callsController = callsController);\nexport default callsController;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport {PhoneCallProtocol} from '../../../layer';\n\nexport default function getCallProtocol(): PhoneCallProtocol {\n return {\n _: 'phoneCallProtocol',\n pFlags: {\n udp_p2p: true,\n udp_reflector: true\n },\n min_layer: 92,\n max_layer: 92,\n library_versions: ['4.0.0']\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport {PhoneCall} from '../../../layer';\n\nexport default function getRtcConfiguration(call: PhoneCall.phoneCall): RTCConfiguration {\n const iceServers: RTCIceServer[] = [];\n call.connections.forEach((connection) => {\n switch(connection._) {\n /* case 'callServerTypeTelegramReflector': {\n break;\n } */\n case 'phoneConnectionWebrtc': {\n const {ip, ipv6, port, username, password} = connection;\n const urls: string[] = [];\n if(connection.pFlags.turn) {\n if(ip) {\n urls.push(`turn:${ip}:${port}`);\n }\n if(ipv6) {\n urls.push(`turn:[${ipv6}]:${port}`);\n }\n } else if(connection.pFlags.stun) {\n if(ip) {\n urls.push(`stun:${ip}:${port}`);\n }\n if(ipv6) {\n urls.push(`stun:[${ipv6}]:${port}`);\n }\n }\n\n if(urls.length > 0) {\n iceServers.push({\n urls,\n username,\n credential: password\n });\n }\n break;\n }\n }\n });\n\n return {\n iceServers,\n iceTransportPolicy: call.pFlags.p2p_allowed ? 'all' : 'relay'\n };\n}\n","const subtle = typeof(window) !== 'undefined' && 'crypto' in window ? window.crypto.subtle : self.crypto.subtle;\n\nexport default subtle;\n","import convertToUint8Array from '../../../helpers/bytes/convertToUint8Array';\nimport subtle from '../subtle';\n// import sha256 from '@cryptography/sha256';\n\nexport default function sha256(bytes: Parameters[0]) {\n return subtle.digest('SHA-256', convertToUint8Array(bytes)).then((b) => {\n // console.log('legacy', performance.now() - perfS);\n return new Uint8Array(b);\n });\n /* //console.log('SHA-256 hash start');\n\n let perfS = performance.now();\n\n\n let perfD = performance.now();\n let words = typeof(bytes) === 'string' ? bytes : bytesToWordss(bytes as any);\n let hash = sha256(words);\n console.log('darutkin', performance.now() - perfD);\n\n //console.log('SHA-256 hash finish', hash, sha256(words, 'hex'));\n\n return bytesFromWordss(hash); */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport bufferConcats from '../../../helpers/bytes/bufferConcats';\nimport subtle from '../../crypto/subtle';\nimport sha256 from '../../crypto/utils/sha256';\n\nconst kMaxIncomingPacketSize = 128 * 1024 * 1024;\n\nexport default class P2PEncryptor {\n private type: 'Signaling';\n private counter: number;\n private seqMap: Map;\n\n constructor(private isOutgoing: boolean, private p2pKey: Uint8Array) {\n this.type = 'Signaling';\n this.counter = 0;\n this.seqMap = new Map();\n }\n\n private concatSHA256(parts: Uint8Array[]) {\n return sha256(bufferConcats(...parts));\n }\n\n private async encryptPrepared(buffer: Uint8Array) {\n const result = {\n counter: 0, // this.counterFromSeq(this.readSeq(buffer)),\n bytes: new Uint8Array(16 + buffer.length)\n };\n\n const x = (this.isOutgoing ? 0 : 8) + (this.type === 'Signaling' ? 128 : 0);\n const key = this.p2pKey;\n\n const msgKeyLarge = await this.concatSHA256([key.subarray(x + 88, x + 88 + 32), buffer]);\n const msgKey = result.bytes;\n for(let i = 0; i < 16; ++i) {\n msgKey[i] = msgKeyLarge[i + 8];\n }\n\n const aesKeyIv = await this.prepareAesKeyIv(key, msgKey, x);\n\n const bytes = await this.aesProcessCtr(buffer, buffer.length, aesKeyIv, true);\n\n result.bytes = new Uint8Array([...result.bytes.subarray(0, 16), ...bytes]);\n\n return result;\n }\n\n public encryptRawPacket(buffer: Uint8Array) {\n const seq = ++this.counter;\n const arr = new ArrayBuffer(4);\n const view = new DataView(arr);\n view.setUint32(0, seq >>> 0, false); // byteOffset = 0; litteEndian = false\n\n const result = new Uint8Array([...new Uint8Array(arr), ...buffer]);\n\n return this.encryptPrepared(result);\n }\n\n private async prepareAesKeyIv(key: Uint8Array, msgKey: Uint8Array, x: number) {\n const [sha256a, sha256b] = await Promise.all([\n this.concatSHA256([\n msgKey.subarray(0, 16),\n key.subarray(x, x + 36)\n ]),\n\n this.concatSHA256([\n key.subarray(40 + x, 40 + x + 36),\n msgKey.subarray(0, 16)\n ])\n ]);\n\n return {\n key: new Uint8Array([\n ...sha256a.subarray(0, 8),\n ...sha256b.subarray(8, 8 + 16),\n ...sha256a.subarray(24, 24 + 8)\n ]),\n iv: new Uint8Array([\n ...sha256b.subarray(0, 4),\n ...sha256a.subarray(8, 8 + 8),\n ...sha256b.subarray(24, 24 + 4)\n ])\n };\n }\n\n private async aesProcessCtr(encryptedData: Uint8Array, dataSize: number, aesKeyIv: {key: Uint8Array, iv: Uint8Array}, encrypt = true) {\n const cryptoKey = await subtle.importKey(\n 'raw',\n aesKeyIv.key,\n {name: 'AES-CTR'},\n false,\n [encrypt ? 'encrypt' : 'decrypt']\n );\n\n const buffer: ArrayBuffer = await subtle[encrypt ? 'encrypt' : 'decrypt']({\n name: 'AES-CTR',\n counter: aesKeyIv.iv,\n length: aesKeyIv.iv.length * 8\n },\n cryptoKey,\n encryptedData\n );\n\n return new Uint8Array(buffer);\n }\n\n private constTimeIsDifferent(a: Uint8Array, b: Uint8Array, count: number) {\n let msgKeyEquals = true;\n for(let i = 0; i < count; ++i) {\n if(a[i] !== b[i]) {\n msgKeyEquals = false;\n }\n }\n\n return !msgKeyEquals;\n }\n\n public async decryptRawPacket(buffer: Uint8Array) {\n if(buffer.length < 21 || buffer.length > kMaxIncomingPacketSize) {\n return;\n }\n\n const {isOutgoing, type} = this;\n\n const x = (isOutgoing ? 8 : 0) + (type === 'Signaling' ? 128 : 0);\n const key = this.p2pKey;\n\n const msgKey = buffer.subarray(0, 16);\n const encryptedData = buffer.subarray(16);\n const encryptedDataSize = buffer.length - 16;\n\n const aesKeyIv = await this.prepareAesKeyIv(key, msgKey, x);\n\n const decryptionBuffer = await this.aesProcessCtr(encryptedData, encryptedDataSize, aesKeyIv, false);\n\n const msgKeyLarge = await this.concatSHA256([\n key.subarray(88 + x, 88 + x + 32),\n decryptionBuffer\n ]);\n\n if(this.constTimeIsDifferent(msgKeyLarge.subarray(8), msgKey, 16)) {\n return;\n }\n\n const dataView = new DataView(decryptionBuffer.buffer);\n const seq = dataView.getUint32(0);\n if(this.seqMap.has(seq)) {\n return;\n }\n this.seqMap.set(seq, seq);\n\n return decryptionBuffer.slice(4);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n *\n * Originally from:\n * https://github.com/evgeny-nadymov/telegram-react\n * Copyright (C) 2018 Evgeny Nadymov\n * https://github.com/evgeny-nadymov/telegram-react/blob/master/LICENSE\n */\n\nimport StringFromLineBuilder from '../stringFromLineBuilder';\nimport {addDataChannel, addExtmap, addPayloadTypes, addSsrc} from './p2PSdpBuilder';\n\nexport default class ChromeP2PSdpBuilder {\n static generateOffer(info: any) {\n const {fingerprints, ufrag, pwd, audio, video} = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n const stringBuilder = new StringFromLineBuilder();\n stringBuilder.add(\n 'v=0',\n 'o=- 1 2 IN IP4 127.0.0.1',\n 's=-',\n 't=0 0'\n );\n\n if(fingerprints) {\n fingerprints.forEach((x: any) => {\n const {hash, fingerprint, setup} = x;\n stringBuilder.add(\n `a=fingerprint:${hash} ${fingerprint}`,\n `a=setup:${setup}`\n );\n });\n }\n if(ufrag && pwd) {\n stringBuilder.add(\n `a=ice-ufrag:${ufrag}`,\n `a=ice-pwd:${pwd}`\n );\n }\n\n stringBuilder.add(\n 'a=group:BUNDLE 0 1 2',\n 'a=extmap-allow-mixed',\n 'a=msid-semantic: WMS *'\n );\n const streamName = 'stream' + media.map((x) => x.ssrc).join('_');\n for(let i = 0; i < media.length; i++) {\n const m = media[i];\n const {type, ssrc, ssrcGroups, payloadTypes, rtpExtensions} = m;\n switch(type) {\n case 'audio': {\n stringBuilder.add(\n `m=audio 56930 UDP/TLS/RTP/SAVPF ${payloadTypes.map((x: any) => x.id).join(' ')}`,\n 'c=IN IP4 0.0.0.0',\n 'a=rtcp:9 IN IP4 0.0.0.0',\n 'a=ice-options:trickle',\n `a=mid:${i}`,\n 'a=sendrecv',\n addExtmap(rtpExtensions)\n );\n if(ssrc) {\n stringBuilder.add(`a=msid:${streamName} audio${ssrc}`);\n }\n stringBuilder.add(\n 'a=rtcp-mux',\n addPayloadTypes(payloadTypes),\n addSsrc(type, ssrc, ssrcGroups, streamName)\n );\n\n break;\n }\n\n case 'video': {\n stringBuilder.add(\n `m=video 61986 UDP/TLS/RTP/SAVPF ${payloadTypes.map((x: any) => x.id).join(' ')}`,\n 'c=IN IP4 0.0.0.0',\n 'a=rtcp:9 IN IP4 0.0.0.0',\n 'a=ice-options:trickle',\n `a=mid:${i}`,\n 'a=sendrecv',\n addExtmap(rtpExtensions)\n );\n if(ssrc) {\n stringBuilder.add(`a=msid:${streamName} video${ssrc}`);\n }\n stringBuilder.add(\n 'a=rtcp-mux',\n 'a=rtcp-rsize',\n addPayloadTypes(payloadTypes),\n addSsrc(type, ssrc, ssrcGroups, streamName)\n );\n break;\n }\n }\n }\n stringBuilder.add(addDataChannel(2));\n return stringBuilder.finalize();\n }\n\n static generateAnswer(info: any) {\n const {fingerprints, ufrag, pwd, audio, video} = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n const stringBuilder = new StringFromLineBuilder();\n stringBuilder.add(\n 'v=0',\n 'o=- 1 2 IN IP4 127.0.0.1',\n 's=-',\n 't=0 0'\n );\n\n if(fingerprints) {\n fingerprints.forEach((x: any) => {\n const {hash, fingerprint, setup} = x;\n stringBuilder.add(\n `a=fingerprint:${hash} ${fingerprint}`,\n `a=setup:${setup}`\n );\n });\n }\n if(ufrag && pwd) {\n stringBuilder.add(\n `a=ice-ufrag:${ufrag}`,\n `a=ice-pwd:${pwd}`\n );\n }\n\n stringBuilder.add(\n 'a=group:BUNDLE 0 1 2',\n 'a=extmap-allow-mixed',\n 'a=msid-semantic: WMS *'\n );\n const streamName = 'stream' + media.map((x) => x.ssrc).join('_');\n for(let i = 0; i < media.length; i++) {\n const m = media[i];\n const {type, ssrc, ssrcGroups, payloadTypes, rtpExtensions} = m;\n switch(type) {\n case 'audio': {\n stringBuilder.add(\n `m=audio 56930 UDP/TLS/RTP/SAVPF ${payloadTypes.map((x: any) => x.id).join(' ')}`,\n 'c=IN IP4 0.0.0.0',\n 'a=rtcp:9 IN IP4 0.0.0.0',\n 'a=ice-options:trickle',\n `a=mid:${i}`,\n 'a=sendrecv',\n addExtmap(rtpExtensions)\n );\n if(ssrc) {\n stringBuilder.add(`a=msid:${streamName} audio${ssrc}`);\n }\n stringBuilder.add(\n 'a=rtcp-mux',\n addPayloadTypes(payloadTypes),\n addSsrc(type, ssrc, ssrcGroups, streamName)\n );\n break;\n }\n\n case 'video': {\n stringBuilder.add(\n `m=video 61986 UDP/TLS/RTP/SAVPF ${payloadTypes.map((x: any) => x.id).join(' ')}`,\n 'c=IN IP4 0.0.0.0',\n 'a=rtcp:9 IN IP4 0.0.0.0',\n 'a=ice-options:trickle',\n `a=mid:${i}`,\n 'a=sendrecv',\n addExtmap(rtpExtensions)\n );\n if(ssrc) {\n stringBuilder.add(`a=msid:${streamName} video${ssrc}`);\n }\n\n stringBuilder.add(\n 'a=rtcp-mux',\n 'a=rtcp-rsize',\n addPayloadTypes(payloadTypes),\n addSsrc(type, ssrc, ssrcGroups, streamName)\n );\n break;\n }\n }\n }\n stringBuilder.add(addDataChannel(2));\n return stringBuilder.finalize();\n }\n}\n","/*\n * Copyright (c) 2018-present, Evgeny Nadymov\n *\n * This source code is licensed under the GPL v.3.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { addDataChannel, addExtmap, addPayloadTypes, addSsrc } from './p2PSdpBuilder';\n\nexport class FirefoxP2PSdpBuilder {\n static generateOffer(info) {\n const { fingerprints, ufrag, pwd, audio, video } = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n let sdp = `v=0\no=- 1 0 IN IP4 0.0.0.0\ns=-\nt=0 0`;\n if (fingerprints) {\n fingerprints.forEach(x => {\n const { hash, fingerprint, setup } = x;\n sdp += `\na=fingerprint:${hash} ${fingerprint}\na=setup:${setup}`;\n });\n }\n if (ufrag && pwd) {\n sdp += `\na=ice-ufrag:${ufrag}\na=ice-pwd:${pwd}`;\n }\n\n sdp += `\na=group:BUNDLE 0 1 2\na=ice-options:trickle\na=msid-semantic:WMS *`;\n const streamName = 'stream' + media.map(x => x.ssrc).join('_');\n for (let i = 0; i < media.length; i++) {\n const m = media[i];\n const { type, ssrc, ssrcGroups, payloadTypes, rtpExtensions } = m;\n switch (type) {\n case 'audio': {\n sdp += `\nm=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n sdp += `\na=rtcp-mux`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n\n break;\n }\n case 'video': {\n sdp += `\nm=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n sdp += `\na=rtcp-mux\na=rtcp-rsize`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n\n break;\n }\n }\n }\n sdp += addDataChannel(2);\n sdp += `\n`;\n\n return sdp;\n }\n\n static generateAnswer(info) {\n const { fingerprints, ufrag, pwd, audio, video } = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n let sdp = `v=0\no=- 1 0 IN IP4 0.0.0.0\ns=-\nt=0 0`;\n if (fingerprints) {\n fingerprints.forEach(x => {\n const { hash, fingerprint, setup } = x;\n sdp += `\na=fingerprint:${hash} ${fingerprint}\na=setup:${setup}`;\n });\n }\n if (ufrag && pwd) {\n sdp += `\na=ice-ufrag:${ufrag}\na=ice-pwd:${pwd}`;\n }\n\n sdp += `\na=group:BUNDLE 0 1 2\na=ice-options:trickle\na=msid-semantic:WMS *`;\n const streamName = 'stream' + media.map(x => x.ssrc).join('_');\n for (let i = 0; i < media.length; i++) {\n const m = media[i];\n const { type, mid, ssrc, ssrcGroups, payloadTypes, dir, rtpExtensions } = m;\n switch (type) {\n case 'audio': {\n sdp += `\nm=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n sdp += `\na=rtcp-mux`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n\n break;\n }\n case 'video': {\n sdp += `\nm=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n sdp += `\na=rtcp-mux\na=rtcp-rsize`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n break;\n }\n }\n }\n sdp += addDataChannel(2);\n sdp += `\n`;\n\n return sdp;\n }\n}","/*\n * Copyright (c) 2018-present, Evgeny Nadymov\n *\n * This source code is licensed under the GPL v.3.0 license found in the\n * LICENSE file in the root directory of this source tree.\n */\n\nimport { addDataChannel, addExtmap, addPayloadTypes, addSsrc } from './p2PSdpBuilder';\n\nexport class SafariP2PSdpBuilder {\n static generateOffer(info) {\n const { fingerprints, ufrag, pwd, audio, video } = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n if (!media.length) {\n return `v=0\no=- 1 2 IN IP4 127.0.0.1\ns=-\nt=0 0\na=msid-semantic: WMS\n`;\n }\n\n let sdp = `v=0\no=- 1 2 IN IP4 127.0.0.1\ns=-\nt=0 0`;\n if (fingerprints) {\n fingerprints.forEach(x => {\n const { hash, fingerprint, setup } = x;\n sdp += `\na=fingerprint:${hash} ${fingerprint}\na=setup:${setup}`;\n });\n }\n if (ufrag && pwd) {\n sdp += `\na=ice-ufrag:${ufrag}\na=ice-pwd:${pwd}`;\n }\n\n sdp += `\na=group:BUNDLE 0 1 2\na=extmap-allow-mixed\na=msid-semantic: WMS *`;\n const streamName = 'stream' + media.map(x => x.ssrc).join('_');\n for (let i = 0; i < media.length; i++) {\n const m = media[i];\n const { type, ssrc, ssrcGroups, payloadTypes, rtpExtensions } = m;\n switch (type) {\n case 'audio': {\n sdp += `\nm=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=rtcp:9 IN IP4 0.0.0.0\na=ice-options:trickle\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n if (ssrc) {\n sdp += `\na=msid:${streamName} audio${ssrc}`;\n }\n sdp += `\na=rtcp-mux`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n\n break;\n }\n case 'video': {\n sdp += `\nm=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=rtcp:9 IN IP4 0.0.0.0\na=ice-options:trickle\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n if (ssrc) {\n sdp += `\na=msid:${streamName} video${ssrc}`;\n }\n sdp += `\na=rtcp-mux\na=rtcp-rsize`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n break;\n }\n }\n }\n sdp += addDataChannel(2);\n sdp += `\n`;\n\n return sdp;\n }\n\n static generateAnswer(info) {\n const { fingerprints, ufrag, pwd, audio, video } = info;\n audio.type = 'audio';\n video.type = 'video';\n const media = [audio, video];\n\n if (!media.length) {\n return `v=0\no=- 1 2 IN IP4 127.0.0.1\ns=-\nt=0 0\na=msid-semantic: WMS\n`;\n }\n\n let sdp = `v=0\no=- 1 2 IN IP4 127.0.0.1\ns=-\nt=0 0`;\n if (fingerprints) {\n fingerprints.forEach(x => {\n const { hash, fingerprint, setup } = x;\n sdp += `\na=fingerprint:${hash} ${fingerprint}\na=setup:${setup}`;\n });\n }\n if (ufrag && pwd) {\n sdp += `\na=ice-ufrag:${ufrag}\na=ice-pwd:${pwd}`;\n }\n\n sdp += `\na=group:BUNDLE 0 1 2\na=extmap-allow-mixed\na=msid-semantic: WMS *`;\n const streamName = 'stream' + media.map(x => x.ssrc).join('_');\n for (let i = 0; i < media.length; i++) {\n const m = media[i];\n const { type, ssrc, ssrcGroups, payloadTypes, rtpExtensions } = m;\n switch (type) {\n case 'audio': {\n sdp += `\nm=audio 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=rtcp:9 IN IP4 0.0.0.0\na=ice-options:trickle\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n if (ssrc) {\n sdp += `\na=msid:${streamName} audio${ssrc}`;\n }\n sdp += `\na=rtcp-mux`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n\n break;\n }\n case 'video': {\n sdp += `\nm=video 9 UDP/TLS/RTP/SAVPF ${payloadTypes.map(x => x.id).join(' ')}\nc=IN IP4 0.0.0.0\na=rtcp:9 IN IP4 0.0.0.0\na=ice-options:trickle\na=mid:${i}\na=sendrecv`;\n sdp += addExtmap(rtpExtensions);\n if (ssrc) {\n sdp += `\na=msid:${streamName} video${ssrc}`;\n }\n sdp += `\na=rtcp-mux\na=rtcp-rsize`;\n sdp += addPayloadTypes(payloadTypes);\n sdp += addSsrc(type, ssrc, ssrcGroups, streamName);\n break;\n }\n }\n }\n sdp += addDataChannel(2);\n sdp += `\n`;\n\n return sdp;\n }\n}","/*\n* Copyright (c) 2018-present, Evgeny Nadymov\n*\n* This source code is licensed under the GPL v.3.0 license found in the\n* LICENSE file in the root directory of this source tree.\n*/\n\nimport ChromeP2PSdpBuilder from './chromeP2PSdpBuilder';\nimport { FirefoxP2PSdpBuilder } from './firefoxP2PSdpBuilder';\nimport { SafariP2PSdpBuilder } from './safariP2PSdpBuilder';\n// import { TG_CALLS_SDP_STRING } from '../../Stores/CallStore';\n\nexport function p2pParseCandidate(candidate) {\n if(!candidate || !candidate.startsWith('candidate:')) {\n return;\n }\n \n const sdpString = candidate;\n candidate = candidate.substr('candidate:'.length);\n \n const [foundation, component, protocol, priority, ip, port, ...other] = candidate.split(' ');\n const c = {\n sdpString,\n foundation,\n component,\n protocol,\n priority,\n address: { ip, port }\n };\n \n for(let i = 0; i < other.length; i += 2) {\n switch(other[i]) {\n case 'typ': {\n c.type = other[i + 1];\n break;\n }\n case 'raddr': {\n if(!c.relAddress) {\n c.relAddress = {};\n }\n \n c.relAddress.ip = other[i + 1];\n break;\n }\n case 'rport': {\n if(!c.relAddress) {\n c.relAddress = {};\n }\n \n c.relAddress.port = other[i + 1];\n break;\n }\n case 'generation': {\n c.generation = other[i + 1];\n break;\n }\n case 'tcptype': {\n c.tcpType = other[i + 1];\n break;\n }\n case 'network-id': {\n c.networkId = other[i + 1];\n break;\n }\n case 'network-cost': {\n c.networkCost = other[i + 1];\n break;\n }\n case 'ufrag': {\n c.username = other[i + 1];\n break;\n }\n }\n }\n \n return c;\n}\n\nexport function p2pParseSdp(sdp) {\n const lines = sdp.split('\\r\\n');\n const lookup = (prefix, force = true, lineFrom = 0, lineTo = Number.MAX_VALUE) => {\n if (lineTo === -1) {\n lineTo = Number.MAX_VALUE;\n }\n for (let i = lineFrom; i < lines.length && i < lineTo; i++) {\n const line = lines[i];\n if (line.startsWith(prefix)) {\n return line.substr(prefix.length);\n }\n }\n \n if (force) {\n console.error(\"Can't find prefix\", prefix);\n }\n \n return null;\n };\n const findIndex = (prefix, lineFrom = 0, lineTo = Number.MAX_VALUE) => {\n if (lineTo === -1) {\n lineTo = Number.MAX_VALUE;\n }\n for (let i = lineFrom; i < lines.length && i < lineTo; i++) {\n const line = lines[i];\n if (line.startsWith(prefix)) {\n return i;\n }\n }\n \n return -1;\n };\n \n const pwdIndex = findIndex('a=ice-pwd:');\n const ufragIndex = findIndex('a=ice-ufrag:');\n if (pwdIndex === -1 && ufragIndex === -1) {\n return {\n // sessionId: lookup('o=').split(' ')[1],\n ufrag: null,\n pwd: null,\n fingerprints: []\n };\n }\n \n const info = {\n // sessionId: lookup('o=').split(' ')[1],\n ufrag: null,\n pwd: null,\n fingerprints: []\n };\n \n let mediaIndex = findIndex('m=');\n const fingerprint = lookup('a=fingerprint:', false);\n const setup = lookup('a=setup:', false);\n if (fingerprint && setup) {\n info.fingerprints.push({\n hash: fingerprint.split(' ')[0],\n fingerprint: fingerprint.split(' ')[1],\n setup\n });\n }\n \n const ufrag = lookup('a=ice-ufrag:', false);\n const pwd = lookup('a=ice-pwd:', false);\n if (ufrag && pwd) {\n info.ufrag = ufrag;\n info.pwd = pwd;\n }\n \n while (mediaIndex !== -1) {\n let nextMediaIndex = findIndex('m=', mediaIndex + 1);\n \n const extmap = [];\n const types = [];\n const mediaType = lookup('m=', true, mediaIndex, nextMediaIndex).split(' ')[0];\n const media = {\n // type: lookup('m=', true, mediaIndex, nextMediaIndex).split(' ')[0],\n // mid: lookup('a=mid:', true, mediaIndex, nextMediaIndex),\n // dir: findDirection(mediaIndex, nextMediaIndex),\n rtpExtensions: extmap,\n payloadTypes: types\n }\n \n const lineTo = nextMediaIndex === -1 ? lines.length : nextMediaIndex;\n const fmtp = new Map();\n const rtcpFb = new Map();\n for (let i = mediaIndex; i < lineTo; i++) {\n const line = lines[i];\n if (line.startsWith('a=extmap:')) {\n const [ id, uri ] = line.substr('a=extmap:'.length).split(' ');\n extmap.push({ id: parseInt(id), uri });\n } else if (line.startsWith('a=fmtp:')) {\n const [ id, str ] = line.substr('a=fmtp:'.length).split(' ');\n const obj = { };\n const arr = str.split(';').map(x => {\n const [ key, value ] = x.split('=');\n obj[key] = value;\n return { [key]: value };\n });\n fmtp.set(parseInt(id), obj);\n } else if (line.startsWith('a=rtcp-fb:')) {\n const [ id, type = '', subtype = '' ] = line.substr('a=rtcp-fb:'.length).split(' ');\n if (rtcpFb.has(parseInt(id))) {\n rtcpFb.get(parseInt(id)).push({ type, subtype });\n } else {\n rtcpFb.set(parseInt(id), [{ type, subtype }])\n }\n } else if (line.startsWith('a=rtpmap')) {\n const [ id, str ] = line.substr('a=rtpmap:'.length).split(' ');\n const [ name, clockrate, channels = '0' ] = str.split('/');\n const obj = { id: parseInt(id), name, clockrate: parseInt(clockrate), channels: parseInt(channels) };\n \n types.push(obj);\n }\n }\n \n for (let i = 0; i < types.length; i++) {\n const { id } = types[i];\n if (rtcpFb.has(id)) {\n types[i].feedbackTypes = rtcpFb.get(id);\n }\n if (fmtp.has(id)) {\n types[i].parameters = fmtp.get(id);\n }\n }\n \n const ssrc = lookup('a=ssrc:', false, mediaIndex, nextMediaIndex);\n if (ssrc) {\n media.ssrc = ssrc.split(' ')[0];\n }\n \n const ssrcGroup = lookup('a=ssrc-group:', false, mediaIndex, nextMediaIndex);\n if (ssrcGroup) {\n const [ semantics, ...ssrcs ] = ssrcGroup.split(' ');\n media.ssrcGroups = [{\n semantics,\n ssrcs\n }]\n }\n \n switch (mediaType) {\n case 'audio': {\n info.audio = media;\n break;\n }\n case 'video': {\n info.video = media;\n break;\n }\n }\n \n mediaIndex = nextMediaIndex;\n }\n\n if(!info.video.ssrcGroups) {\n info.video.ssrcGroups = [];\n }\n\n info['@type'] = 'InitialSetup';\n \n // console.log('[p2pParseSdp]', sdp, info);\n return info;\n}\n\nexport function isFirefox() {\n return navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n}\n\nfunction isSafari() {\n return navigator.userAgent.toLowerCase().indexOf('safari') > -1 && navigator.userAgent.toLowerCase().indexOf('chrome') === -1;\n}\n\nexport function addExtmap(extmap) {\n let sdp = [];\n // return sdp;\n for (let j = 0; j < extmap.length; j++) {\n const ext = extmap[j];\n const { id, uri } = ext;\n // if (isFirefox() && uri.indexOf(''))\n console.log('[extmap] add', id, uri);\n sdp.push(`a=extmap:${id} ${uri}`);\n }\n \n return sdp.join('\\n');\n}\n\nexport function addPayloadTypes(types) {\n let sdp = [];\n console.log('[SDP] addPayloadTypes', types);\n for (let i = 0; i < types.length; i++) {\n const type = types[i];\n const { id, name, clockrate, channels, feedbackTypes, parameters } = type;\n sdp.push(`a=rtpmap:${id} ${name}/${clockrate}${channels ? '/' + channels : ''}`);\n if (feedbackTypes) {\n feedbackTypes.forEach(x => {\n const { type, subtype } = x;\n sdp.push(`a=rtcp-fb:${id} ${[type, subtype].join(' ')}`);\n });\n }\n if (parameters) {\n const fmtp = [];\n Object.getOwnPropertyNames(parameters).forEach(pName => {\n fmtp.push(`${pName}=${parameters[pName]}`);\n });\n \n sdp.push(`a=fmtp:${id} ${fmtp.join(';')}`);\n }\n }\n \n return sdp.join('\\n');\n}\n\nexport function addSsrc(type, ssrc, ssrcGroups, streamName) {\n let sdp = [];\n \n if (ssrcGroups && ssrcGroups.length > 0) {\n ssrcGroups.forEach(ssrcGroup => {\n if (ssrcGroup && ssrcGroup.ssrcs.length > 0) {\n sdp.push(`a=ssrc-group:${ssrcGroup.semantics} ${ssrcGroup.ssrcs.join(' ')}`);\n ssrcGroup.ssrcs.forEach(ssrc => {\n sdp.push(\n `a=ssrc:${ssrc} cname:stream${ssrc}`,\n `a=ssrc:${ssrc} msid:${streamName} ${type}${ssrc}`,\n `a=ssrc:${ssrc} mslabel:${type}${ssrc}`,\n `a=ssrc:${ssrc} label:${type}${ssrc}`\n );\n });\n }\n });\n } else if (ssrc) {\n sdp.push(\n `a=ssrc:${ssrc} cname:stream${ssrc}`,\n `a=ssrc:${ssrc} msid:${streamName} ${type}${ssrc}`,\n `a=ssrc:${ssrc} mslabel:${type}${ssrc}`,\n `a=ssrc:${ssrc} label:${type}${ssrc}`\n );\n }\n \n return sdp.join('\\n');\n}\n\nexport function addDataChannel(mid) {\n return `m=application 9 UDP/DTLS/SCTP webrtc-datachannel\nc=IN IP4 0.0.0.0\na=ice-options:trickle\na=mid:2\na=sctp-port:5000\na=max-message-size:262144`;\n}\n\nexport class P2PSdpBuilder {\n static generateCandidate(info) {\n if (!info) return null;\n \n const { sdpString, sdpMLineIndex, sdpMid, foundation, component, protocol, priority, address, type, relAddress, generation, tcpType, networkId, networkCost, username } = info;\n if (/* TG_CALLS_SDP_STRING */true) {\n if (sdpString) {\n return {\n candidate: sdpString,\n sdpMLineIndex,\n sdpMid\n };\n }\n }\n throw 'no sdpString';\n \n let candidate = `candidate:${foundation} ${component} ${protocol} ${priority} ${address.ip} ${address.port}`;\n const attrs = []\n if (type) {\n attrs.push(`typ ${type}`);\n }\n if (relAddress) {\n attrs.push(`raddr ${relAddress.ip}`);\n attrs.push(`rport ${relAddress.port}`);\n }\n if (tcpType) {\n attrs.push(`tcptype ${tcpType}`);\n }\n if (generation) {\n attrs.push(`generation ${generation}`);\n }\n if (username) {\n attrs.push(`ufrag ${username}`);\n }\n if (networkId) {\n attrs.push(`network-id ${networkId}`);\n }\n if (networkCost) {\n attrs.push(`network-cost ${networkCost}`);\n }\n if (attrs.length > 0) {\n candidate += ` ${attrs.join(' ')}`;\n }\n \n return { candidate, sdpMid, sdpMLineIndex };\n }\n \n static generateOffer(info) {\n if (isFirefox()) {\n return FirefoxP2PSdpBuilder.generateOffer(info);\n } else if (isSafari()) {\n return SafariP2PSdpBuilder.generateOffer(info);\n }\n \n return ChromeP2PSdpBuilder.generateOffer(info);\n }\n \n static generateAnswer(info) {\n if (isFirefox()) {\n return FirefoxP2PSdpBuilder.generateAnswer(info);\n } else if (isSafari()) {\n return SafariP2PSdpBuilder.generateAnswer(info);\n }\n \n return ChromeP2PSdpBuilder.generateAnswer(info);\n }\n}","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ctx from '../../environment/ctx';\nimport {IS_SAFARI} from '../../environment/userAgent';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {GroupCallParticipantVideoSourceGroup, PhoneCall, PhoneCallDiscardReason, PhoneCallProtocol, Update} from '../../layer';\nimport {emojiFromCodePoints} from '../../vendor/emoji';\nimport type {CallId} from '../appManagers/appCallsManager';\nimport type {AppManagers} from '../appManagers/managers';\nimport {logger} from '../logger';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport CallConnectionInstance from './callConnectionInstance';\nimport CallInstanceBase from './callInstanceBase';\nimport callsController from './callsController';\nimport CALL_STATE from './callState';\nimport {GROUP_CALL_AMPLITUDE_ANALYSE_INTERVAL_MS} from './constants';\nimport parseSignalingData from './helpers/parseSignalingData';\nimport stopTrack from './helpers/stopTrack';\nimport localConferenceDescription, {ConferenceEntry, generateSsrc} from './localConferenceDescription';\nimport getCallProtocol from './p2P/getCallProtocol';\nimport getRtcConfiguration from './p2P/getRtcConfiguration';\nimport P2PEncryptor from './p2P/p2PEncryptor';\nimport {p2pParseCandidate, P2PSdpBuilder} from './p2P/p2PSdpBuilder';\nimport {parseSdp} from './sdp/utils';\nimport {WebRTCLineType} from './sdpBuilder';\nimport StreamManager from './streamManager';\nimport {AudioCodec, CallMediaState, CallSignalingData, DiffieHellmanInfo, P2PAudioCodec, P2PVideoCodec, VideoCodec} from './types';\n\nexport default class CallInstance extends CallInstanceBase<{\n state: (state: CALL_STATE) => void,\n id: (id: CallId, prevId: CallId) => void,\n muted: (muted: boolean) => void,\n mediaState: (mediaState: CallMediaState) => void,\n acceptCallOverride: () => Promise,\n}> {\n public dh: Partial;\n public id: CallId;\n public call: PhoneCall;\n public interlocutorUserId: UserId;\n public protocol: PhoneCallProtocol;\n public isOutgoing: boolean;\n public encryptionKey: Uint8Array;\n public connectionInstance: CallConnectionInstance;\n public encryptor: P2PEncryptor;\n public decryptor: P2PEncryptor;\n public candidates: RTCIceCandidate[];\n\n public offerReceived: boolean;\n public offerSent: boolean;\n\n public createdParticipantEntries: boolean;\n public release: () => Promise;\n public _connectionState: CALL_STATE;\n\n public createdAt: number;\n public connectedAt: number;\n public discardReason: string;\n\n private managers: AppManagers;\n\n private hangUpTimeout: number;\n\n private mediaStates: {\n input: CallMediaState,\n output?: CallMediaState\n };\n\n private sendMediaState: () => Promise;\n\n private decryptQueue: Uint8Array[];\n\n private getEmojisFingerprintPromise: Promise;\n private emojisFingerprint: [string, string, string, string];\n\n private wasStartingScreen: boolean;\n private wasStartingVideo: boolean;\n public wasTryingToJoin: boolean;\n\n public streamManager: StreamManager;\n\n constructor(options: {\n isOutgoing: boolean,\n interlocutorUserId: UserId,\n managers: CallInstance['managers'],\n protocol?: PhoneCallProtocol\n }) {\n super();\n\n this.log = logger('CALL');\n\n if(!this.protocol) {\n this.protocol = getCallProtocol();\n }\n\n safeAssign(this, options);\n\n this.createdAt = Date.now();\n this.offerReceived = false;\n this.offerSent = false;\n this.decryptQueue = [];\n this.candidates = [];\n\n this.addEventListener('state', (state) => {\n this.log('state', CALL_STATE[state]);\n\n if(state === CALL_STATE.CLOSED) {\n this.cleanup();\n }\n });\n\n const streamManager = this.streamManager = new StreamManager(GROUP_CALL_AMPLITUDE_ANALYSE_INTERVAL_MS);\n streamManager.direction = 'sendrecv';\n streamManager.types.push('screencast');\n if(!this.isOutgoing) {\n streamManager.locked = true;\n streamManager.canCreateConferenceEntry = false;\n }\n\n let mediaState: CallMediaState = {\n '@type': 'MediaState',\n 'type': 'input',\n 'lowBattery': false,\n 'muted': true,\n 'screencastState': 'inactive',\n 'videoRotation': 0,\n 'videoState': 'inactive'\n };\n\n const self = this;\n mediaState = new Proxy(mediaState, {\n set: function(target, key, value) {\n // @ts-ignore\n target[key] = value;\n self.setMediaState(mediaState);\n self.sendMediaState();\n return true;\n }\n });\n\n this.mediaStates = {\n input: mediaState\n };\n\n this.sendMediaState = debounce(this._sendMediaState.bind(this), 0, false, true);\n }\n\n get connectionState() {\n const {_connectionState, connectionInstance} = this;\n if(_connectionState !== undefined) {\n return _connectionState;\n } else if(!connectionInstance) {\n return CALL_STATE.CONNECTING;\n } else {\n const {iceConnectionState} = connectionInstance.connection;\n if(iceConnectionState === 'closed') {\n return CALL_STATE.CLOSED;\n } else if(iceConnectionState !== 'connected' && (!IS_SAFARI || iceConnectionState !== 'completed')) {\n return CALL_STATE.CONNECTING;\n } else {\n return CALL_STATE.CONNECTED;\n }\n }\n }\n\n get sortIndex() {\n const connectionState = this.connectionState;\n const state = CALL_STATE.CLOSED - connectionState + 1;\n let index = state * 10000000000000;\n index += 2147483647000 - (connectionState === CALL_STATE.PENDING && this.isOutgoing ? 0 : this.createdAt);\n return index;\n }\n\n public getVideoElement(type: CallMediaState['type']) {\n if(type === 'input') return this.elements.get('main');\n else {\n const mediaState = this.getMediaState('output');\n if(!mediaState) {\n return;\n }\n\n const type: WebRTCLineType = mediaState.videoState === 'active' ? 'video' : (mediaState.screencastState === 'active' ? 'screencast' : undefined);\n if(!type) {\n return;\n }\n\n const entry = this.description.findEntry((entry) => entry.type === type);\n if(!entry) {\n return;\n }\n\n return this.elements.get('' + entry.recvEntry.source);\n }\n }\n\n public async startScreenSharingInternal() {\n try {\n this.wasStartingScreen = true;\n this.wasStartingVideo = false;\n this.streamManager.types = ['audio', 'screencast'];\n await this.requestScreen();\n } catch(err) {\n this.log.error('startScreenSharing error', err);\n }\n }\n\n public async toggleScreenSharing() {\n if(this.isSharingVideo) {\n await this.stopVideoSharing();\n }\n\n if(this.isSharingScreen) {\n return this.stopVideoSharing();\n } else {\n return this.startScreenSharingInternal();\n }\n }\n\n public async startVideoSharingInternal() {\n try {\n this.wasStartingScreen = false;\n this.wasStartingVideo = true;\n this.streamManager.types = ['audio', 'video'];\n await this.requestInputSource(false, true, false);\n } catch(err) {\n this.log.error('startVideoSharing error', err);\n }\n }\n\n public async stopVideoSharing() {\n const mediaState = this.getMediaState('input');\n mediaState.videoState = mediaState.screencastState = 'inactive';\n\n const {streamManager, description} = this;\n const track = streamManager.inputStream.getVideoTracks()[0];\n if(track) {\n stopTrack(track);\n streamManager.appendToConference(description); // clear sender track\n }\n }\n\n public async toggleVideoSharing() {\n if(this.isSharingScreen) {\n await this.stopVideoSharing();\n }\n\n if(this.isSharingVideo) {\n return this.stopVideoSharing();\n } else {\n return this.startVideoSharingInternal();\n }\n }\n\n public getMediaState(type: CallMediaState['type']) {\n return this.mediaStates[type];\n }\n\n public setMediaState(mediaState: CallMediaState) {\n this.mediaStates[mediaState.type] = mediaState;\n this.dispatchEvent('mediaState', mediaState);\n }\n\n public isSharingVideoType(type: 'video' | 'screencast') {\n try {\n const hasVideoTrack = super.isSharingVideo;\n return hasVideoTrack && !!((this.wasStartingScreen && type === 'screencast') || (this.wasStartingVideo && type === 'video'));\n\n // ! it will be used before the track appears\n // return !!this.description.entries.find((entry) => entry.type === type && entry.transceiver.sender.track.enabled);\n } catch(err) {\n return false;\n }\n }\n\n public get isSharingVideo() {\n return this.isSharingVideoType('video');\n }\n\n public get isSharingScreen() {\n return this.isSharingVideoType('screencast');\n }\n\n public get isMuted() {\n const audioTrack = this.streamManager.inputStream.getAudioTracks()[0];\n return !audioTrack?.enabled;\n }\n\n public get isClosing() {\n const {connectionState} = this;\n return connectionState === CALL_STATE.CLOSING || connectionState === CALL_STATE.CLOSED;\n }\n\n public get description(): localConferenceDescription {\n return this.connectionInstance?.description;\n }\n\n public setHangUpTimeout(timeout: number, reason: PhoneCallDiscardReason['_']) {\n this.clearHangUpTimeout();\n this.hangUpTimeout = ctx.setTimeout(() => {\n this.hangUpTimeout = undefined;\n this.hangUp(reason);\n }, timeout);\n }\n\n public clearHangUpTimeout() {\n if(this.hangUpTimeout !== undefined) {\n clearTimeout(this.hangUpTimeout);\n this.hangUpTimeout = undefined;\n }\n }\n\n public setPhoneCall(phoneCall: PhoneCall) {\n this.call = phoneCall;\n\n const {id} = phoneCall;\n if(this.id !== id) {\n const prevId = this.id;\n this.id = id;\n this.dispatchEvent('id', id, prevId);\n }\n }\n\n public async acceptCall() {\n const canAccept = (await Promise.all(this.dispatchResultableEvent('acceptCallOverride')))[0] ?? true;\n if(this.isClosing || !canAccept) {\n return;\n }\n\n // this.clearHangUpTimeout();\n this.overrideConnectionState(CALL_STATE.EXCHANGING_KEYS);\n\n const call = this.call as PhoneCall.phoneCallRequested;\n this.requestInputSource(true, !!call.pFlags.video, false);\n\n const g_a_hash = call.g_a_hash;\n this.managers.appCallsManager.generateDh().then(async(dh) => {\n this.dh = { // ! it is correct\n g_a_hash,\n b: dh.a,\n g_b: dh.g_a,\n g_b_hash: dh.g_a_hash,\n p: dh.p\n };\n\n return this.managers.apiManager.invokeApi('phone.acceptCall', {\n peer: await this.managers.appCallsManager.getCallInput(this.id),\n protocol: this.protocol,\n g_b: this.dh.g_b\n });\n }).then(async(phonePhoneCall) => {\n await this.managers.appCallsManager.savePhonePhoneCall(phonePhoneCall);\n }).catch((err) => {\n this.log.error('accept call error', err);\n // if(err.type === 'CALL_PROTOCOL_COMPAT_LAYER_INVALID') {\n\n // }\n\n this.hangUp('phoneCallDiscardReasonHangup');\n });\n }\n\n public joinCall() {\n this.log('joinCall');\n\n this.getEmojisFingerprint();\n\n this.overrideConnectionState();\n\n const {isOutgoing, encryptionKey, streamManager} = this;\n\n const configuration = getRtcConfiguration(this.call as PhoneCall.phoneCall);\n this.log('joinCall configuration', configuration);\n if(!configuration) return;\n\n const connectionInstance = this.connectionInstance = new CallConnectionInstance({\n call: this,\n streamManager,\n log: this.log.bindPrefix('connection')\n });\n\n const connection = connectionInstance.createPeerConnection(configuration);\n connection.addEventListener('iceconnectionstatechange', () => {\n const state = this.connectionState;\n if(this.connectedAt === undefined && state === CALL_STATE.CONNECTED) {\n this.connectedAt = Date.now();\n }\n\n this.dispatchEvent('state', state);\n });\n connection.addEventListener('negotiationneeded', () => {\n connectionInstance.negotiate();\n });\n connection.addEventListener('icecandidate', (event) => {\n const {candidate} = event;\n connection.log('onicecandidate', candidate);\n if(candidate?.candidate) {\n this.sendIceCandidate(candidate);\n }\n });\n connection.addEventListener('track', (event) => {\n const {track} = event;\n connection.log('ontrack', track);\n this.onTrack(event);\n });\n\n const description = connectionInstance.createDescription();\n\n this.encryptor = new P2PEncryptor(isOutgoing, encryptionKey);\n this.decryptor = new P2PEncryptor(!isOutgoing, encryptionKey);\n\n this.log('currentCall', this);\n\n if(isOutgoing) {\n connectionInstance.appendStreamToConference();\n }\n\n this.createDataChannel();\n\n this.processDecryptQueue();\n }\n\n private createDataChannelEntry() {\n const dataChannelEntry = this.description.createEntry('application');\n dataChannelEntry.setDirection('sendrecv');\n dataChannelEntry.sendEntry = dataChannelEntry.recvEntry = dataChannelEntry;\n }\n\n private createDataChannel() {\n if(this.connectionInstance.dataChannel) {\n return;\n }\n\n const channel = this.connectionInstance.createDataChannel({\n id: 0,\n negotiated: true\n });\n channel.addEventListener('message', (e) => {\n this.applyDataChannelData(JSON.parse(e.data));\n });\n channel.addEventListener('open', () => {\n this.sendMediaState();\n });\n }\n\n private applyDataChannelData(data: CallMediaState) {\n switch(data['@type']) {\n case 'MediaState': {\n data.type = 'output';\n this.log('got output media state', data);\n this.setMediaState(data);\n break;\n }\n\n default:\n this.log.error('unknown data channel data:', data);\n break;\n }\n }\n\n private _sendMediaState() {\n const {connectionInstance} = this;\n if(!connectionInstance) return;\n\n const mediaState = {...this.getMediaState('input')};\n // mediaState.videoRotation = 90;\n delete mediaState.type;\n this.log('sendMediaState', mediaState);\n\n connectionInstance.sendDataChannelData(mediaState);\n }\n\n public async sendCallSignalingData(data: CallSignalingData) {\n /* if(data['@type'] === 'InitialSetup') {\n this.filterNotVP8(data);\n } */\n\n const json = JSON.stringify(data);\n const arr = new TextEncoder().encode(json);\n const {bytes} = await this.encryptor.encryptRawPacket(arr);\n\n this.log('sendCallSignalingData', this.id, json);\n await this.managers.apiManager.invokeApi('phone.sendSignalingData', {\n peer: await this.managers.appCallsManager.getCallInput(this.id),\n data: bytes\n });\n }\n\n public sendIceCandidate(iceCandidate: RTCIceCandidate) {\n this.log('sendIceCandidate', iceCandidate);\n const {candidate, sdpMLineIndex} = iceCandidate;\n if(sdpMLineIndex !== 0) {\n return;\n }\n\n const parsed = p2pParseCandidate(candidate);\n // const parsed = {sdpString: candidate};\n /* if(parsed.address.ip !== '') {\n return;\n } */\n\n this.sendCallSignalingData({\n '@type': 'Candidates',\n 'candidates': [parsed]\n });\n }\n\n public async confirmCall() {\n const {protocol, id, call} = this;\n const dh = this.dh as DiffieHellmanInfo.a;\n\n // this.clearHangUpTimeout();\n this.overrideConnectionState(CALL_STATE.EXCHANGING_KEYS);\n const {key, key_fingerprint} = await this.managers.appCallsManager.computeKey((call as PhoneCall.phoneCallAccepted).g_b, dh.a, dh.p);\n\n const phonePhoneCall = await this.managers.apiManager.invokeApi('phone.confirmCall', {\n peer: await this.managers.appCallsManager.getCallInput(id),\n protocol: protocol,\n g_a: dh.g_a,\n key_fingerprint: key_fingerprint\n });\n\n this.encryptionKey = key;\n await this.managers.appCallsManager.savePhonePhoneCall(phonePhoneCall);\n this.joinCall();\n }\n\n public getEmojisFingerprint() {\n if(this.emojisFingerprint) return this.emojisFingerprint;\n if(this.getEmojisFingerprintPromise) return this.getEmojisFingerprintPromise;\n return this.getEmojisFingerprintPromise = apiManagerProxy.invokeCrypto('get-emojis-fingerprint', this.encryptionKey, this.dh.g_a).then((codePoints) => {\n this.getEmojisFingerprintPromise = undefined;\n return this.emojisFingerprint = codePoints.map((codePoints) => emojiFromCodePoints(codePoints)) as [string, string, string, string];\n });\n }\n\n private unlockStreamManager() {\n this.connectionInstance.streamManager.locked = false;\n this.connectionInstance.appendStreamToConference();\n }\n\n private async doTheMagic() {\n this.connectionInstance.appendStreamToConference();\n\n const connection = this.connectionInstance.connection;\n\n let answer = await connection.createAnswer();\n\n this.log('[sdp] local', answer.type, answer.sdp);\n await connection.setLocalDescription(answer);\n\n connection.getTransceivers().filter((transceiver) => transceiver.direction === 'recvonly').forEach((transceiver) => {\n const entry = this.connectionInstance.description.getEntryByMid(transceiver.mid);\n entry.transceiver = entry.recvEntry.transceiver = transceiver;\n transceiver.direction = 'sendrecv';\n });\n\n const isAnswer = false;\n\n const description = this.description;\n const bundle = description.entries.map((entry) => entry.mid);\n const sdpDescription: RTCSessionDescriptionInit = {\n type: isAnswer ? 'answer' : 'offer',\n sdp: description.generateSdp({\n bundle,\n entries: description.entries.filter((entry) => bundle.includes(entry.mid)),\n // isAnswer: isAnswer\n isAnswer: !isAnswer\n })\n };\n\n await connection.setRemoteDescription(sdpDescription);\n\n answer = await connection.createAnswer();\n\n await connection.setLocalDescription(answer);\n\n const initialSetup = parseSignalingData(parseSdp(answer.sdp));\n this.log('[InitialSetup] send 1');\n this.sendCallSignalingData(initialSetup);\n\n this.unlockStreamManager();\n }\n\n public overrideConnectionState(state?: CALL_STATE) {\n this._connectionState = state;\n this.dispatchEvent('state', this.connectionState);\n }\n\n public get duration() {\n return this.connectedAt !== undefined ? (Date.now() - this.connectedAt) / 1000 | 0 : 0;\n }\n\n protected onInputStream(stream: MediaStream): void {\n super.onInputStream(stream);\n\n const videoTrack = stream.getVideoTracks()[0];\n if(videoTrack) {\n const state = this.getMediaState('input');\n\n // handle starting camera\n if(!this.wasStartingScreen && !this.wasStartingVideo) {\n this.wasStartingVideo = true;\n }\n\n if(this.isSharingVideo) {\n state.videoState = 'active';\n } else if(this.isSharingScreen) {\n state.screencastState = 'active';\n }\n\n videoTrack.addEventListener('ended', () => {\n this.stopVideoSharing();\n }, {once: true});\n }\n\n if(stream.getAudioTracks().length) {\n this.onMutedChange();\n }\n }\n\n private onMutedChange() {\n const isMuted = this.isMuted;\n this.dispatchEvent('muted', isMuted);\n\n const state = this.getMediaState('input');\n state.muted = isMuted;\n }\n\n public toggleMuted(): Promise {\n return this.requestAudioSource(true).then(() => {\n this.setMuted();\n this.onMutedChange();\n });\n }\n\n public async hangUp(discardReason?: PhoneCallDiscardReason['_'], discardedByOtherParty?: boolean) {\n if(this.isClosing) {\n return;\n }\n\n this.discardReason = discardReason;\n this.log('hangUp', discardReason);\n this.overrideConnectionState(CALL_STATE.CLOSED);\n\n if(this.connectionInstance) {\n this.connectionInstance.closeConnectionAndStream(true);\n }\n\n if(discardReason && !discardedByOtherParty) {\n let hasVideo = false;\n for(const type in this.mediaStates) {\n const mediaState = this.mediaStates[type as 'input' | 'output'];\n hasVideo = mediaState.videoState === 'active' || mediaState.screencastState === 'active' || hasVideo;\n }\n\n await this.managers.appCallsManager.discardCall(this.id, this.duration, discardReason, hasVideo);\n }\n }\n\n private performCodec(_codec: P2PAudioCodec | P2PVideoCodec) {\n const payloadTypes: AudioCodec['payload-types'] = _codec.payloadTypes.map((payloadType) => {\n return {\n ...payloadType,\n 'rtcp-fbs': payloadType.feedbackTypes\n }\n });\n\n const codec: AudioCodec = {\n 'rtp-hdrexts': _codec.rtpExtensions,\n 'payload-types': payloadTypes\n };\n\n return codec;\n }\n\n private setDataToDescription(data: CallSignalingData.initialSetup) {\n this.description.setData({\n transport: {\n 'pwd': data.pwd,\n 'ufrag': data.ufrag,\n 'fingerprints': data.fingerprints,\n 'rtcp-mux': true\n },\n audio: this.performCodec(data.audio),\n video: data.video ? this.performCodec(data.video) as VideoCodec : undefined,\n screencast: data.screencast ? this.performCodec(data.screencast) as VideoCodec : undefined\n });\n }\n\n private filterNotVP8(initialSetup: CallSignalingData.initialSetup) {\n if(!this.isOutgoing) { // only VP8 works now\n [initialSetup.video, initialSetup.screencast].filter(Boolean).forEach((codec) => {\n const payloadTypes = codec.payloadTypes;\n const idx = payloadTypes.findIndex((payloadType) => payloadType.name === 'VP8');\n const vp8PayloadType = payloadTypes[idx];\n const rtxIdx = payloadTypes.findIndex((payloadType) => +payloadType.parameters?.apt === vp8PayloadType.id);\n codec.payloadTypes = [payloadTypes[idx], payloadTypes[rtxIdx]];\n });\n }\n }\n\n public async applyCallSignalingData(data: CallSignalingData) {\n this.log('applyCallSignalingData', this, data);\n\n const {connection, description} = this.connectionInstance;\n\n switch(data['@type']) {\n case 'InitialSetup': {\n this.log('[sdp] InitialSetup', data);\n\n this.filterNotVP8(data);\n this.setDataToDescription(data);\n\n const performSsrcGroups = (ssrcGroups: P2PVideoCodec['ssrcGroups']): GroupCallParticipantVideoSourceGroup[] => {\n return ssrcGroups.map((ssrcGroup) => {\n return {\n _: 'groupCallParticipantVideoSourceGroup',\n semantics: ssrcGroup.semantics,\n sources: ssrcGroup.ssrcs.map((source) => +source)\n };\n });\n };\n\n const ssrcs = [\n generateSsrc('audio', +data.audio.ssrc),\n data.video ? generateSsrc('video', performSsrcGroups(data.video.ssrcGroups)) : undefined,\n data.screencast ? generateSsrc('screencast', performSsrcGroups(data.screencast.ssrcGroups)) : undefined\n ].filter(Boolean);\n\n ssrcs.forEach((ssrc) => {\n let entry = description.getEntryBySource(ssrc.source);\n if(entry) {\n return;\n }\n\n const sendRecvEntry = description.findFreeSendRecvEntry(ssrc.type, false);\n entry = new ConferenceEntry(sendRecvEntry.mid, ssrc.type);\n entry.setDirection('sendrecv');\n sendRecvEntry.recvEntry = entry;\n\n description.setEntrySource(entry, ssrc.sourceGroups || ssrc.source);\n });\n\n this.createDataChannelEntry();\n\n const isAnswer = this.offerSent;\n this.offerSent = false;\n\n const bundle = description.entries.map((entry) => entry.mid);\n const sdpDescription: RTCSessionDescriptionInit = {\n type: isAnswer ? 'answer' : 'offer',\n sdp: description.generateSdp({\n bundle,\n entries: description.entries.filter((entry) => bundle.includes(entry.mid)),\n // isAnswer: isAnswer\n isAnswer: !isAnswer\n })\n };\n\n this.log('[sdp] remote', sdpDescription.sdp);\n\n await connection.setRemoteDescription(sdpDescription);\n\n await this.tryToReleaseCandidates();\n\n if(!isAnswer) {\n await this.doTheMagic();\n }\n\n break;\n }\n\n case 'Candidates': {\n for(const candidate of data.candidates) {\n const init: RTCIceCandidateInit = P2PSdpBuilder.generateCandidate(candidate);\n init.sdpMLineIndex = 0;\n const iceCandidate = new RTCIceCandidate(init);\n this.candidates.push(iceCandidate);\n }\n\n await this.tryToReleaseCandidates();\n break;\n }\n\n default: {\n this.log.error('unrecognized signaling data', data);\n }\n }\n }\n\n public async tryToReleaseCandidates() {\n const {connectionInstance} = this;\n if(!connectionInstance) {\n return;\n }\n\n const {connection} = connectionInstance;\n if(connection.remoteDescription) {\n const promises: Promise[] = this.candidates.map((candidate) => this.addIceCandidate(connection, candidate));\n this.candidates.length = 0;\n\n await Promise.all(promises);\n } else {\n this.log('[candidates] postpone');\n }\n }\n\n private async addIceCandidate(connection: RTCPeerConnection, candidate: RTCIceCandidate) {\n this.log('[candidate] start', candidate);\n try {\n // if(!candidate.address) return;\n await connection.addIceCandidate(candidate);\n this.log('[candidate] add', candidate);\n } catch(e) {\n this.log.error('[candidate] error', candidate, e);\n }\n }\n\n private async processDecryptQueue() {\n const {encryptor} = this;\n if(!encryptor) {\n this.log.warn('got encrypted signaling data before the encryption key');\n return;\n }\n\n const length = this.decryptQueue.length;\n if(!length) {\n return;\n }\n\n const queue = this.decryptQueue.slice();\n this.decryptQueue.length = 0;\n\n for(const data of queue) {\n const decryptedData = await encryptor.decryptRawPacket(data);\n if(!decryptedData) {\n continue;\n }\n\n // this.log('[update] updateNewCallSignalingData', update, decryptedData);\n\n const str = new TextDecoder().decode(decryptedData);\n try {\n const signalingData: CallSignalingData = JSON.parse(str);\n this.log('[update] updateNewCallSignalingData', signalingData);\n this.applyCallSignalingData(signalingData);\n } catch(err) {\n this.log.error('wrong signaling data', str);\n this.hangUp('phoneCallDiscardReasonDisconnect');\n callsController.dispatchEvent('incompatible', this.interlocutorUserId);\n }\n }\n }\n\n public onUpdatePhoneCallSignalingData(data: Uint8Array) {\n this.decryptQueue.push(data);\n this.processDecryptQueue();\n }\n}\n","export async function videoToImage(video: HTMLVideoElement): Promise {\n const canvas = document.createElement('canvas');\n canvas.width = video.videoWidth;\n canvas.height = video.videoHeight;\n const ctx = canvas.getContext('2d');\n ctx.drawImage(video, 0, 0, canvas.width, canvas.height);\n\n return new Promise((resolve, reject) => {\n canvas.toBlob(blob => {\n if(blob) {\n resolve(blob);\n } else {\n reject(new Error('Failed to create blob'));\n }\n });\n });\n}\n","import {Show, render} from 'solid-js/web';\nimport PopupElement from '../popups';\nimport {RadioFormFromValues} from '../row';\n\nimport './outputDevicePopup.css';\nimport {Transition} from 'solid-transition-group';\nimport {i18n} from '../../lib/langPack';\nimport wrapEmojiText from '../../lib/richTextProcessor/wrapEmojiText';\n\nexport class OutputDevicePopup extends PopupElement {\n protected _dispose: () => void;\n\n constructor(readonly video: HTMLVideoElement) {\n super('rtmp-output-popup', {\n overlayClosable: true,\n title: true,\n body: true,\n buttons: [{\n langKey: 'OK',\n callback: () => {\n video.setSinkId(chosenDeviceId);\n }\n }]\n });\n\n const currentSinkId = video.sinkId || 'default';\n let chosenDeviceId = currentSinkId;\n\n this.title.append(i18n('Rtmp.OutputPopup.Title'));\n // if(!document.documentElement.classList.contains('night')) {\n // this.element.classList.remove('night');\n // }\n\n navigator.mediaDevices.enumerateDevices().then((devices) => {\n const outputs = devices.filter((device) => device.kind === 'audiooutput');\n const form = RadioFormFromValues(\n outputs.map((device) => ({\n textElement: wrapEmojiText(device.label),\n value: device.deviceId,\n checked: device.deviceId === currentSinkId\n })),\n (id) => {\n chosenDeviceId = id;\n }\n );\n\n this._dispose = render(() => <>\n \n \n {\n RadioFormFromValues(\n [{\n textElement: i18n('Rtmp.OutputPopup.Default'),\n value: '',\n // @ts-ignore\n checked: true\n }],\n (id) => {}\n )\n }\n \n \n , this.body);\n });\n }\n\n cleanup() {\n this._dispose();\n }\n}\n","import {createEffect, on, splitProps} from 'solid-js';\nimport InputField, {InputFieldOptions} from './inputField';\n\nexport interface InputFieldTsxProps extends InputFieldOptions {\n class?: string\n value?: string\n onRawInput?: (value: string) => void\n}\n\nexport const InputFieldTsx = (props: InputFieldTsxProps) => {\n const [, rest] = splitProps(props, ['class', 'value'])\n const obj = new InputField(rest)\n\n createEffect(on(\n () => props.class,\n (value, prev) => {\n obj.container.classList.remove(prev)\n obj.container.classList.add(value)\n }\n ))\n\n createEffect(on(\n () => props.value,\n (value) => {\n if(value !== obj.value) {\n obj.value = value\n }\n }\n ))\n\n return obj.container\n}\n","export default \"data:image/svg+xml,%3csvg%20width='168'%20height='64'%20viewBox='0%200%20168%2064'%20fill='none'%20xmlns='http://www.w3.org/2000/svg'%3e%3crect%20width='168'%20height='64'%20rx='10'%20fill='white'/%3e%3ccircle%20cx='35'%20cy='32'%20r='20'%20fill='%234E8EE5'/%3e%3cpath%20fill-rule='evenodd'%20clip-rule='evenodd'%20d='M35%2022C32.7909%2022%2031%2023.7909%2031%2026V31C31%2033.2091%2032.7909%2035%2035%2035C37.2091%2035%2039%2033.2091%2039%2031V26C39%2023.7909%2037.2091%2022%2035%2022ZM27.5%2030C28.0523%2030%2028.5%2030.4477%2028.5%2031C28.5%2034.5899%2031.4101%2037.5%2035%2037.5C38.5899%2037.5%2041.5%2034.5899%2041.5%2031C41.5%2030.4477%2041.9477%2030%2042.5%2030C43.0523%2030%2043.5%2030.4477%2043.5%2031C43.5%2035.3561%2040.2232%2038.9469%2036%2039.4418V41.5C36%2042.0523%2035.5523%2042.5%2035%2042.5C34.4477%2042.5%2034%2042.0523%2034%2041.5V39.4418C29.7768%2038.9469%2026.5%2035.3561%2026.5%2031C26.5%2030.4477%2026.9477%2030%2027.5%2030Z'%20fill='white'/%3e%3cpath%20d='M70%2026V36'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M77%2021V41'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M84%2024V38'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M91%2026V36'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M98%2021V41'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M105%2024V38'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M112%2026V36'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M119%2021V41'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M126%2024V38'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M133%2026V36'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M140%2021V41'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M147%2024V38'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3cpath%20d='M154%2026V36'%20stroke='%234E8EE5'%20stroke-width='4'%20stroke-linecap='round'/%3e%3c/svg%3e\"","export default \"__VITE_ASSET__CvOX1qyT__\"","export default \"__VITE_ASSET__6qh$uFmr__\"","import {Show, createSignal} from 'solid-js';\nimport {render} from 'solid-js/web';\nimport {InputFieldTsx} from '../inputFieldTsx';\nimport PopupElement from '../popups';\n\nimport {RowTsx} from '../row';\nimport CheckboxField from '../checkboxField';\n\nimport imgRecordAudio from './assets/recordAudio.svg';\nimport imgVideoVertical from './assets/videoVertical.svg';\nimport imgVideoHorizontal from './assets/videoHorizontal.svg';\n\nimport {Transition} from 'solid-transition-group';\nimport {Ripple} from '../rippleTsx';\nimport classNames from '../../helpers/string/classNames';\nimport {CallRecordParams} from '../../lib/appManagers/appGroupCallsManager';\nimport {toastNew} from '../toast';\nimport rtmpCallsController from '../../lib/calls/rtmpCallsController';\n\nimport './recordPopup.css';\nimport {i18n} from '../../lib/langPack';\n\nconst cnPopup = (className = '') => `rtmp-record-popup${className}`;\n\nexport class RtmpRecordPopup extends PopupElement {\n private _dispose: () => void;\n\n constructor() {\n super(cnPopup(), {\n overlayClosable: true,\n closable: true,\n title: true,\n body: true\n });\n\n this.title.append(i18n('Rtmp.RecordPopup.Title'));\n this._dispose = render(() => (\n \n ), this.body);\n // if(!document.documentElement.classList.contains('night')) {\n // this.element.classList.remove('night')\n // }\n }\n\n private _onSubmit = (params: CallRecordParams) => {\n this.forceHide();\n this.managers.appGroupCallsManager.startRecording(\n rtmpCallsController.currentCall.inputCall,\n params\n ).catch(() => {\n toastNew({\n langPackKey: 'Rtmp.RecordPopup.Failed'\n });\n });\n }\n\n cleanup() {\n super.cleanup();\n this._dispose();\n }\n}\n\ninterface RtmpRecordPopupContentProps {\n onSubmit(params: CallRecordParams): void;\n}\n\nconst TITLE_MAX_LENGTH = 40\n\nconst RtmpRecordPopupContent = (props: RtmpRecordPopupContentProps) => {\n const [name, setName] = createSignal('');\n const [recordVideo, setRecordVideo] = createSignal(false);\n const [videoHorizontal, setVideoHorizontal] = createSignal(true);\n\n const recordVideoCheck = new CheckboxField({\n toggle: true\n });\n recordVideoCheck.input.addEventListener('change', () => {\n setRecordVideo(recordVideoCheck.checked);\n });\n\n const onSubmit = () => {\n props.onSubmit({\n name: name(),\n recordVideo: recordVideo(),\n videoHorizontal: videoHorizontal()\n });\n };\n\n return (\n
\n
\n \n\n
\n {i18n('Rtmp.RecordPopup.RecordingQuestion')}\n

\n {i18n('Rtmp.RecordPopup.RecordingHint')}\n
\n\n \n
\n\n
\n
\n \n \n
\n \n
\n {i18n('Rtmp.RecordPopup.RecordAudioHint')}\n
\n
\n
\n \n
\n
\n setVideoHorizontal(true)}\n />\n setVideoHorizontal(false)}\n />\n
\n
\n {i18n('Rtmp.RecordPopup.RecordVideoHint')}\n
\n
\n
\n
\n
\n\n
\n \n \n \n
\n
\n );\n}\n","import './adminStreamPopup.scss';\n\nimport {createSignal, onMount} from 'solid-js';\nimport {RtmpData} from './rtmpData';\nimport rootScope from '../../lib/rootScope';\nimport {toastNew} from '../toast';\nimport {i18n} from '../../lib/langPack';\nimport pause from '../../helpers/schedulers/pause';\n\nconst cnPlayer = (className = '') => `rtmp-player${className}`;\n\nexport const AdminStreamPopup = ({peerId}: {peerId: PeerId}) => {\n const [rtmpUrl, setRtmpUrl] = createSignal('');\n const [rtmpKey, setRtmpKey] = createSignal('');\n const [rtmpDataLoading, setRtmpDataLoading] = createSignal(true);\n\n onMount(() => {\n rootScope.managers.appGroupCallsManager.fetchRtmpUrl(peerId).then(async(data) => {\n setRtmpUrl(data.url);\n setRtmpKey(data.key);\n setRtmpDataLoading(false);\n }).catch(() => {\n toastNew({\n langPackKey: 'Error.AnError'\n });\n });\n });\n\n return (\n
\n
\n
\n \n \n \n
{i18n('Rtmp.MediaViewer.Failed.Title')}
\n
\n
\n {i18n('Rtmp.MediaViewer.Failed.Description')}\n
\n \n
\n
\n );\n};\n","import {IS_SAFARI} from '../environment/userAgent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport {videoToImage} from '../helpers/dom/videoToImage';\nimport ListLoader from '../helpers/listLoader';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport rtmpCallsController from '../lib/calls/rtmpCallsController';\nimport apiManagerProxy from '../lib/mtproto/mtprotoworker';\nimport {getRtmpShareUrl, getRtmpStreamUrl} from '../lib/rtmp/url';\nimport AppMediaViewerBase from './appMediaViewerBase';\nimport {RtmpStartStreamPopup} from './rtmp/adminPopup';\nimport {OutputDevicePopup} from './rtmp/outputDevicePopup';\nimport {RtmpRecordPopup} from './rtmp/recordPopup';\nimport PopupElement from './popups';\nimport SetTransition from './singleTransition';\nimport {toastNew} from './toast';\nimport safePlay from '../helpers/dom/safePlay';\nimport {NULL_PEER_ID} from '../lib/mtproto/mtproto_config';\nimport {render} from 'solid-js/web';\nimport {AdminStreamPopup} from './rtmp/adminStreamPopup';\nimport ProgressivePreloader from './preloader';\nimport RTMP_STATE from '../lib/calls/rtmpState';\nimport getPeerActiveUsernames from '../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport {ExportedChatInvite} from '../layer';\nimport rootScope from '../lib/rootScope';\nimport PopupPickUser from './popups/pickUser';\nimport wrapPeerTitle from './wrappers/peerTitle';\n\nconst REJOIN_INTERVAL = 15000;\n\nexport class AppMediaViewerRtmp extends AppMediaViewerBase {\n static activeInstance: AppMediaViewerRtmp;\n static previousPeerId: PeerId = NULL_PEER_ID;\n static previousCapture: string;\n\n private peerId: PeerId;\n private listenerSetter = new ListenerSetter();\n private retryTimeout?: number;\n private retryTempId?: number;\n private rejoinInterval?: number;\n\n private preloaderRtmp: ProgressivePreloader;\n private preloaderTemplate: HTMLElement;\n\n constructor(private shareUrl: string) {\n super(new ListLoader({\n loadMore: async() => {\n return {\n count: 0,\n items: []\n };\n }\n }), shareUrl ? ['forward'] : []);\n\n this.preloaderRtmp = new ProgressivePreloader({\n cancelable: false,\n rtmp: true\n });\n this.preloaderRtmp.construct();\n this.preloaderTemplate = document.createElement('div');\n this.preloaderTemplate.classList.add('preloader-template');\n\n this.retryTempId = 0;\n\n if(this.shareUrl) this.setBtnMenuToggle([{\n icon: 'forward',\n text: 'Forward',\n onClick: this.onForward\n }]);\n\n this.buttons.download.classList.add('hide');\n this.buttons.zoomin.classList.add('hide');\n\n this.wholeDiv.classList.add('live');\n\n this.setListeners();\n }\n\n protected setListeners() {\n super.setListeners();\n\n attachClickEvent(this.buttons.forward, this.onForward, {listenerSetter: this.listenerSetter});\n\n this.listenerSetter.add(apiManagerProxy.serviceMessagePort)('rtmpStreamDestroyed', (callId) => {\n if(rtmpCallsController.currentCall?.call.id === callId) {\n this.retryLoadStream(this.videoPlayer.video, 'was destroyed');\n }\n });\n }\n\n private onForward = async() => {\n const peerId = await PopupPickUser.createSharingPicker2();\n rootScope.managers.appMessagesManager.sendText({\n peerId,\n text: this.shareUrl\n });\n\n toastNew({\n langPackKey: 'InviteLinkSentSingle',\n langPackArguments: [await wrapPeerTitle({peerId, dialog: true})]\n });\n };\n\n public async openMedia(params: {\n peerId: PeerId,\n isAdmin: boolean\n }) {\n const chatId = params.peerId.toChatId();\n if(!rtmpCallsController.currentCall || rtmpCallsController.currentCall.peerId !== params.peerId) {\n if(rtmpCallsController.currentCall) {\n await rtmpCallsController.leaveCall();\n }\n\n await rtmpCallsController.joinCall(chatId);\n }\n\n AppMediaViewerRtmp.activeInstance = this;\n this.peerId = params.peerId;\n\n const chat = apiManagerProxy.getChat(chatId);\n if(!getPeerActiveUsernames(chat)[0]) {\n const chatFull = await this.managers.appProfileManager.getChatFull(chatId);\n this.shareUrl = (chatFull.exported_invite as ExportedChatInvite.chatInviteExported)?.link;\n } else {\n this.shareUrl = getRtmpShareUrl(this.peerId);\n }\n\n await this._openMedia({\n media: rtmpCallsController.currentCall.inputCall,\n mediaThumbnail: params.peerId === AppMediaViewerRtmp.previousPeerId ? AppMediaViewerRtmp.previousCapture : undefined,\n timestamp: 0,\n fromId: params.peerId,\n fromRight: 0,\n setupPlayer: (player, readyPromise) => {\n const video = player.video;\n\n const getCall = () => rtmpCallsController.currentCall;\n\n player.updateLiveViewersCount(getCall().call.participants_count);\n if(!IS_SAFARI || params.isAdmin) {\n player.setupLiveMenu([{\n icon: 'volume_up',\n text: 'Rtmp.MediaViewer.Menu.OutputDevice',\n onClick: () => PopupElement.createPopup(OutputDevicePopup, player.video).show(),\n verify: () => typeof(navigator.mediaDevices?.enumerateDevices) === 'function' && !IS_SAFARI\n }, {\n icon: 'radioon',\n text: 'Rtmp.MediaViewer.Menu.StartRecording',\n verify: () => getCall()?.admin && !getCall().call.pFlags.record_video_active,\n onClick: () => PopupElement.createPopup(RtmpRecordPopup).show()\n }, {\n icon: 'radiooff',\n text: 'Rtmp.MediaViewer.Menu.StopRecording',\n verify: () => getCall()?.admin && getCall().call.pFlags.record_video_active,\n onClick: () => {\n this.managers.appGroupCallsManager.stopRecording(getCall().inputCall).catch(() => {\n toastNew({\n langPackKey: 'Error.AnError'\n });\n });\n }\n }, {\n icon: 'settings',\n text: 'Rtmp.MediaViewer.Menu.StreamSettings',\n verify: () => getCall()?.admin,\n onClick: () => {\n PopupElement.createPopup(RtmpStartStreamPopup, {\n peerId: this.peerId,\n active: true,\n onEndStream: () => this.close(undefined, true)\n }).show();\n }\n }, {\n icon: 'crossround',\n text: 'Rtmp.MediaViewer.Menu.EndLiveStream',\n danger: true,\n verify: () => getCall()?.admin,\n onClick: () => this.close(undefined, true)\n }]);\n }\n\n // const onEnded = () => {\n // this.retryLoadStream(video, 'video ended');\n // };\n\n // const onError = () => {\n // if(!video.error) return;\n // this.retryLoadStream(video, 'video error=' + video.error.message);\n // };\n\n const onPause = () => {\n if(!video.error && !video.ended) {\n safePlay(video);\n }\n };\n\n this.listenerSetter.add(video)('pause', onPause);\n // this.listenerSetter.add(video)('error', onError);\n // this.listenerSetter.add(video)('ended', onEnded);\n\n const selector = 'canvas.canvas-thumbnail, .thumbnail-avatar';\n const thumbnail = this.content.mover.querySelector(selector) as HTMLElement;\n video.after(thumbnail);\n\n const emptyPipVideoSource = thumbnail.tagName === 'CANVAS' ? thumbnail : this.content.mover.querySelector('img');\n player.emptyPipVideoSource = emptyPipVideoSource as HTMLCanvasElement | HTMLImageElement;\n\n readyPromise.then(() => {\n player.dimBackground();\n });\n },\n onMoverSet: () => {\n if(!params.isAdmin) {\n return;\n }\n\n const adminPanelContainer = document.createElement('div');\n adminPanelContainer.classList.add('admin-popup-container');\n\n this.adminPanel = adminPanelContainer;\n this.adminPanel.classList.add('admin-hidden');\n\n this.disposeSolid = render(() => AdminStreamPopup({peerId: params.peerId}), this.adminPanel);\n },\n onCanPlay: () => {\n // this.showLoader();\n // return;\n\n const thumbnail = this.content.mover.querySelector('canvas.canvas-thumbnail, .thumbnail-avatar') as HTMLElement;\n\n if(!this.streamEnded) {\n this.preloaderRtmp.detach();\n }\n\n this.videoPlayer.liveEl.classList.add('is-not-buffering');\n\n if(params.isAdmin) {\n SetTransition({\n element: this.adminPanel,\n className: 'is-not-buffering',\n forwards: true,\n duration: 300\n });\n }\n\n SetTransition({\n element: thumbnail,\n className: 'hide-thumbnail',\n forwards: true,\n duration: 300\n });\n\n rtmpCallsController.currentCall.state = RTMP_STATE.PLAYING;\n },\n onBuffering: this.showLoader\n });\n\n this.listenerSetter.add(rtmpCallsController)('currentCallChanged', (call) => {\n if(!call) {\n this.close(undefined, true);\n return;\n }\n\n this.videoPlayer?.updateLiveViewersCount(call.call.participants_count);\n });\n\n this.rejoinInterval = window.setTimeout(this.rejoin, REJOIN_INTERVAL);\n }\n\n private rejoin = () => {\n if(rtmpCallsController.currentCall) {\n rtmpCallsController.rejoinCall().catch((err) => {\n this.log.error('rejoinCall', err);\n }).then(() => {\n this.rejoinInterval = window.setTimeout(this.rejoin, REJOIN_INTERVAL);\n });\n }\n }\n\n private toggleAdminPanel(visible: boolean) {\n if(visible && this.videoPlayer) {\n this.videoPlayer.cancelFullScreen();\n if(this.videoPlayer.inPip) {\n document.exitPictureInPicture();\n }\n }\n\n this.videoPlayer?.lockControls(visible ? true : undefined);\n SetTransition({\n element: this.adminPanel,\n className: 'admin-hidden',\n forwards: !visible,\n duration: 300\n });\n }\n\n private showLoader = () => {\n this.videoPlayer.video.parentElement.classList.add('is-buffering');\n\n if(!this.preloaderTemplate.parentElement) {\n const thumbnail = this.content.mover.querySelector('canvas.canvas-thumbnail, .thumbnail-avatar') as HTMLElement;\n thumbnail.after(this.preloaderTemplate, this.adminPanel);\n }\n\n this.preloaderRtmp.attach(this.preloaderTemplate, true);\n\n const liveEl = this.content.mover.querySelector('.controls-live') as HTMLElement;\n liveEl.classList.remove('is-not-buffering');\n\n rtmpCallsController.currentCall.state = RTMP_STATE.BUFFERING;\n };\n\n private retryLoadStream(video: HTMLVideoElement, reason: string) {\n const tempId = ++this.retryTempId;\n const log = this.log.bindPrefix(`retryLoadStream-${tempId}-${reason}`);\n const myCallId = rtmpCallsController.currentCall?.call.id;\n if(!myCallId) {\n this.close(undefined, true);\n return;\n }\n\n let isFirst = true;\n let checkJoined = true;\n let errors = 0;\n\n const check = () => tempId === this.retryTempId;\n\n const retry = () => {\n if(!check()) {\n return;\n }\n\n clearTimeout(this.retryTimeout);\n\n rtmpCallsController.isCurrentCallDead(checkJoined).then((empty) => {\n if(rtmpCallsController.currentCall?.call.id !== myCallId || !check()) {\n // destroyed\n return;\n }\n\n log('empty', empty, isFirst, checkJoined);\n checkJoined = empty === 'dying';\n\n if(empty === 'dead' || empty === 'dying') {\n if(isFirst) {\n this.showLoader();\n if(rtmpCallsController.currentCall?.admin) {\n this.toggleAdminPanel(true);\n }\n if(IS_SAFARI) {\n // если не сделать этого то сафари продолжит пытаться достучаться\n apiManagerProxy.serviceMessagePort.invokeVoid('leaveRtmpCall', [rtmpCallsController.currentCall.call.id, false]);\n }\n }\n isFirst = false;\n this.retryTimeout = window.setTimeout(retry, 1000);\n return;\n }\n\n if(rtmpCallsController.currentCall?.admin) {\n this.toggleAdminPanel(false);\n }\n\n const url = getRtmpStreamUrl(rtmpCallsController.currentCall.inputCall);\n if(video.getAttribute('src') !== url) {\n video.src = url;\n video.load();\n safePlay(video);\n }\n }).catch((err) => {\n if(rtmpCallsController.currentCall?.call.id !== myCallId || !check()) {\n // destroyed\n return;\n }\n\n if(++errors > 5) {\n log.error(err);\n toastNew({\n langPackKey: 'Error.AnError'\n });\n this.close(undefined, true);\n } else {\n this.retryTimeout = window.setTimeout(retry, 1000);\n }\n })\n }\n\n retry();\n }\n\n private async leaveCall(discard = false) {\n rtmpCallsController.leaveCall(discard).catch(() => {\n toastNew({\n langPackKey: 'Error.AnError'\n });\n });\n }\n\n public async close(e?: MouseEvent, end = false) {\n const hadPip = this.videoPlayer?.inPip;\n\n clearTimeout(this.retryTimeout);\n clearTimeout(this.rejoinInterval);\n ++this.retryTempId;\n\n if(this.videoPlayer) {\n try {\n const capturedBlob = await videoToImage(this.videoPlayer.video);\n if(AppMediaViewerRtmp.previousCapture) {\n URL.revokeObjectURL(AppMediaViewerRtmp.previousCapture);\n }\n AppMediaViewerRtmp.previousCapture = URL.createObjectURL(capturedBlob);\n AppMediaViewerRtmp.previousPeerId = this.peerId;\n } catch(e) {}\n }\n\n super.close(e);\n AppMediaViewerRtmp.activeInstance = undefined;\n\n if(rtmpCallsController.currentCall) {\n this.leaveCall(end);\n }\n\n this.listenerSetter.removeAll();\n if(hadPip) {\n document.exitPictureInPicture();\n }\n }\n\n public static closeActivePip(end = false) {\n if(!AppMediaViewerRtmp.activeInstance) return;\n\n if(AppMediaViewerRtmp.activeInstance.videoPlayer?.inPip) {\n document.exitPictureInPicture();\n }\n }\n\n public static async getShareUrl(chatId: ChatId) {\n const chat = apiManagerProxy.getChat(chatId);\n if(!getPeerActiveUsernames(chat)[0]) {\n const chatFull = await rootScope.managers.appProfileManager.getChatFull(chatId);\n return (chatFull.exported_invite as ExportedChatInvite.chatInviteExported)?.link;\n } else {\n return getRtmpShareUrl(chatId.toPeerId(true));\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {numberThousandSplitterForWatching} from '../../helpers/number/numberThousandSplitter';\nimport {RtmpCallInstance} from '../../lib/calls/rtmpCallsController';\nimport RTMP_STATE from '../../lib/calls/rtmpState';\nimport I18n, {FormatterArguments, LangPackKey, i18n} from '../../lib/langPack';\n\nexport default class RtmpDescriptionElement {\n private descriptionIntl: I18n.IntlElement;\n private liveTextElement: HTMLElement;\n\n constructor(private appendTo: HTMLElement, private appendLiveTo: HTMLElement) {\n this.descriptionIntl = new I18n.IntlElement({\n key: 'VoiceChat.Status.Connecting'\n });\n\n this.descriptionIntl.element.classList.add('rtmp-description');\n this.liveTextElement = i18n('Rtmp.MediaViewer.Live');\n }\n\n public detach() {\n this.descriptionIntl.element.remove();\n this.liveTextElement.remove();\n }\n\n public update(instance: RtmpCallInstance) {\n let key: LangPackKey, args: FormatterArguments;\n if(instance.state !== RTMP_STATE.PLAYING) {\n key = 'VoiceChat.Status.Connecting';\n } else {\n key = 'Rtmp.Watching';\n args = [numberThousandSplitterForWatching(instance.call.participants_count)];\n }\n\n const {descriptionIntl} = this;\n descriptionIntl.compareAndUpdate({\n key,\n args\n });\n\n if(!this.descriptionIntl.element.parentElement) {\n this.appendTo.append(this.descriptionIntl.element);\n }\n\n if(!this.liveTextElement.parentElement) {\n this.appendLiveTo.append(this.liveTextElement);\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport GROUP_CALL_STATE from '../lib/calls/groupCallState';\nimport rootScope from '../lib/rootScope';\nimport ButtonIcon from './buttonIcon';\nimport TopbarWeave from './topbarWeave';\nimport SetTransition from './singleTransition';\nimport PopupGroupCall from './groupCall';\nimport GroupCallDescriptionElement from './groupCall/description';\nimport GroupCallTitleElement from './groupCall/title';\nimport PopupElement from './popups';\nimport throttle from '../helpers/schedulers/throttle';\nimport GroupCallInstance from '../lib/calls/groupCallInstance';\nimport CALL_STATE from '../lib/calls/callState';\nimport replaceContent from '../helpers/dom/replaceContent';\nimport PeerTitle from './peerTitle';\nimport CallDescriptionElement from './call/description';\nimport PopupCall from './call';\nimport GroupCallMicrophoneIconMini from './groupCall/microphoneIconMini';\nimport CallInstance from '../lib/calls/callInstance';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport groupCallsController from '../lib/calls/groupCallsController';\nimport StreamManager from '../lib/calls/streamManager';\nimport callsController from '../lib/calls/callsController';\nimport rtmpCallsController, {RtmpCallInstance} from '../lib/calls/rtmpCallsController';\nimport {AppMediaViewerRtmp} from './appMediaViewerRtmp';\nimport {AnyClass} from '../types';\nimport RtmpDescriptionElement from './rtmp/description';\nimport RTMP_STATE from '../lib/calls/rtmpState';\n\nfunction convertCallStateToGroupState(state: CALL_STATE, isMuted: boolean) {\n switch(state) {\n case CALL_STATE.CLOSING:\n case CALL_STATE.CLOSED:\n return GROUP_CALL_STATE.CLOSED;\n case CALL_STATE.CONNECTED:\n return isMuted ? GROUP_CALL_STATE.MUTED : GROUP_CALL_STATE.UNMUTED;\n default:\n return GROUP_CALL_STATE.CONNECTING;\n }\n}\n\nfunction convertRtmpStateToGroupState(state: RTMP_STATE) {\n switch(state) {\n case RTMP_STATE.CLOSED:\n return GROUP_CALL_STATE.CLOSED;\n case RTMP_STATE.CONNECTING:\n case RTMP_STATE.BUFFERING:\n return GROUP_CALL_STATE.CONNECTING;\n default:\n return GROUP_CALL_STATE.MUTED_BY_ADMIN;\n }\n}\n\nconst CLASS_NAME = 'topbar-call';\n\nexport default class TopbarCall {\n public container: HTMLElement;\n private listenerSetter: ListenerSetter;\n private weave: TopbarWeave;\n private center: HTMLDivElement;\n private muteButton: HTMLButtonElement;\n private endButton: HTMLButtonElement;\n private groupCallTitle: GroupCallTitleElement;\n private groupCallDescription: GroupCallDescriptionElement;\n private groupCallMicrophoneIconMini: GroupCallMicrophoneIconMini;\n private callDescription: CallDescriptionElement;\n private rtmpDescription: RtmpDescriptionElement;\n\n private currentDescription: GroupCallDescriptionElement | CallDescriptionElement | RtmpDescriptionElement;\n\n private instance: GroupCallInstance | CallInstance | RtmpCallInstance;\n private instanceListenerSetter: ListenerSetter;\n\n constructor(\n private managers: AppManagers\n ) {\n const listenerSetter = this.listenerSetter = new ListenerSetter();\n\n listenerSetter.add(callsController)('instance', ({instance}) => {\n if(!this.instance) {\n this.updateInstance(instance);\n }\n });\n\n listenerSetter.add(callsController)('accepting', (instance) => {\n if(this.instance !== instance) {\n this.updateInstance(instance);\n }\n });\n\n listenerSetter.add(groupCallsController)('instance', (instance) => {\n this.updateInstance(instance);\n });\n\n listenerSetter.add(rootScope)('group_call_update', (groupCall) => {\n const instance = groupCallsController.groupCall;\n if(instance?.id === groupCall.id) {\n this.updateInstance(instance);\n }\n });\n\n listenerSetter.add(rtmpCallsController)('currentCallChanged', (call) => {\n this.updateInstance(call);\n });\n\n listenerSetter.add(StreamManager.ANALYSER_LISTENER)('amplitude', ({amplitudes, type}) => {\n const {weave} = this;\n if(!amplitudes.length || !weave/* || type !== 'input' */) return;\n\n let max = 0;\n for(let i = 0; i < amplitudes.length; ++i) {\n const {type, value} = amplitudes[i];\n max = value > max ? value : max;\n }\n\n weave.setAmplitude(max);\n });\n }\n\n private onState = () => {\n this.updateInstance(this.instance);\n };\n\n private clearCurrentInstance() {\n if(!this.instance) return;\n this.center.replaceChildren();\n\n if(this.currentDescription) {\n this.currentDescription.detach();\n this.currentDescription = undefined;\n }\n\n this.instance = undefined;\n this.instanceListenerSetter.removeAll();\n }\n\n private updateInstance(instance: TopbarCall['instance']) {\n if(this.construct) {\n this.construct();\n this.construct = undefined;\n }\n\n const c: [string, AnyClass][] = [\n ['group-call', GroupCallInstance],\n ['call', CallInstance],\n ['rtmp', RtmpCallInstance]\n ];\n\n const isChangingInstance = this.instance !== instance;\n if(isChangingInstance) {\n this.clearCurrentInstance();\n\n this.instance = instance;\n this.instanceListenerSetter = new ListenerSetter();\n\n if(instance) {\n this.instanceListenerSetter.add(instance as GroupCallInstance)('state', this.onState);\n\n if(instance instanceof GroupCallInstance) {\n this.currentDescription = this.groupCallDescription;\n } else if(instance instanceof CallInstance) {\n this.currentDescription = this.callDescription;\n this.instanceListenerSetter.add(instance)('muted', this.onState);\n } else if(instance instanceof RtmpCallInstance) {\n this.currentDescription = this.rtmpDescription;\n }\n\n c.forEach(([className, _class]) => {\n const good = instance instanceof _class;\n this.container.classList.toggle(`is-${className}`, good);\n\n if(good) {\n document.documentElement.style.setProperty('--topbar-call-height', `var(--topbar-call-${className}-height)`);\n }\n });\n }\n }\n\n const isMuted = instance instanceof RtmpCallInstance ? undefined : !instance || (this.instance as GroupCallInstance).isMuted;\n let state: GROUP_CALL_STATE;\n if(!instance) state = GROUP_CALL_STATE.CLOSED;\n else if(instance instanceof GroupCallInstance) state = instance.state;\n else if(instance instanceof RtmpCallInstance) state = convertRtmpStateToGroupState(instance.state);\n else state = convertCallStateToGroupState(instance.connectionState, isMuted);\n\n const {weave} = this;\n weave.componentDidMount();\n\n const isClosed = state === GROUP_CALL_STATE.CLOSED;\n if((!document.body.classList.contains('is-calling') || isChangingInstance) || isClosed) {\n if(isClosed) {\n weave.setAmplitude(0);\n }\n\n SetTransition({\n element: document.body,\n className: 'is-calling',\n forwards: !isClosed,\n duration: 250,\n onTransitionEnd: isClosed ? () => {\n weave.componentWillUnmount();\n\n this.clearCurrentInstance();\n } : undefined\n });\n }\n\n if(isClosed) {\n return;\n }\n\n weave.setCurrentState(\n instance instanceof RtmpCallInstance ? 'rtmp' : 'group',\n instance instanceof RtmpCallInstance ? instance.state : state,\n true\n );\n // if(state === GROUP_CALL_STATE.CONNECTING) {\n // weave.setCurrentState(state, true);\n // } else {\n // /* var a = 0;\n // animate(() => {\n // a += 0.1;\n // if(a > 1) a = 0;\n // weave.setAmplitude(a);\n // return true;\n // });\n // weave.setAmplitude(1); */\n // weave.setCurrentState(state, true);\n // }\n\n this.setTitle(instance);\n this.setDescription(instance);\n this.muteButton.classList.toggle('hide', isMuted === undefined);\n if(isMuted !== undefined) {\n this.groupCallMicrophoneIconMini.setState(!isMuted);\n }\n this.endButton.classList.toggle('hide', instance instanceof RtmpCallInstance);\n }\n\n private setDescription(instance: TopbarCall['instance']) {\n return this.currentDescription.update(instance as any);\n }\n\n private setTitle(instance: TopbarCall['instance']) {\n if(instance instanceof RtmpCallInstance) {\n replaceContent(this.center, new PeerTitle({peerId: instance.peerId}).element);\n } else if(instance instanceof GroupCallInstance) {\n return this.groupCallTitle.update(instance);\n } else {\n replaceContent(this.center, new PeerTitle({peerId: instance.interlocutorUserId.toPeerId()}).element);\n }\n }\n\n private construct() {\n const {listenerSetter} = this;\n const container = this.container = document.createElement('div');\n container.classList.add('sidebar-header', CLASS_NAME + '-container');\n\n const left = document.createElement('div');\n left.classList.add(CLASS_NAME + '-left');\n\n const groupCallMicrophoneIconMini = this.groupCallMicrophoneIconMini = new GroupCallMicrophoneIconMini();\n\n const mute = this.muteButton = ButtonIcon();\n mute.append(groupCallMicrophoneIconMini.container);\n left.append(mute);\n\n const throttledMuteClick = throttle(() => {\n (this.instance as GroupCallInstance | CallInstance).toggleMuted();\n }, 600, true);\n\n attachClickEvent(mute, (e) => {\n cancelEvent(e);\n throttledMuteClick();\n }, {listenerSetter});\n\n const center = this.center = document.createElement('div');\n center.classList.add(CLASS_NAME + '-center');\n\n this.groupCallTitle = new GroupCallTitleElement(center);\n this.groupCallDescription = new GroupCallDescriptionElement(left);\n\n this.callDescription = new CallDescriptionElement(left);\n\n this.rtmpDescription = new RtmpDescriptionElement(center, left);\n\n const right = document.createElement('div');\n right.classList.add(CLASS_NAME + '-right');\n\n const end = this.endButton = ButtonIcon('endcall_filled');\n right.append(end);\n\n attachClickEvent(end, (e) => {\n cancelEvent(e);\n\n const {instance} = this;\n if(!instance) {\n return;\n }\n\n if(instance instanceof RtmpCallInstance) {\n rtmpCallsController.leaveCall();\n } else if(instance instanceof GroupCallInstance) {\n instance.hangUp();\n } else {\n instance.hangUp('phoneCallDiscardReasonHangup');\n }\n }, {listenerSetter});\n\n attachClickEvent(container, () => {\n if(this.instance instanceof RtmpCallInstance) {\n AppMediaViewerRtmp.closeActivePip();\n } else if(this.instance instanceof GroupCallInstance) {\n if(PopupElement.getPopups(PopupGroupCall).length) {\n return;\n }\n\n PopupElement.createPopup(PopupGroupCall).show();\n } else if(this.instance instanceof CallInstance) {\n const popups = PopupElement.getPopups(PopupCall);\n if(popups.find((popup) => popup.getCallInstance() === this.instance)) {\n return;\n }\n\n PopupElement.createPopup(PopupCall, this.instance).show();\n }\n }, {listenerSetter});\n\n container.append(left, center, right);\n\n const weave = this.weave = new TopbarWeave();\n const weaveContainer = weave.render(CLASS_NAME + '-weave');\n container.prepend(weaveContainer);\n\n document.getElementById('column-center').prepend(container);\n weave.componentDidMount();\n }\n}\n","export const NOTIFICATION_ICON_PATH = 'assets/img/logo_filled_rounded.png';\nexport const NOTIFICATION_BADGE_PATH = 'assets/img/logo_plain.svg'; // masked\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {PushNotificationObject} from '../serviceWorker/push';\nimport getPeerTitle from '../../components/wrappers/getPeerTitle';\nimport wrapMessageForReply from '../../components/wrappers/messageForReply';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport {FontFamily} from '../../config/font';\nimport {NOTIFICATION_BADGE_PATH, NOTIFICATION_ICON_PATH} from '../../config/notifications';\nimport {IS_MOBILE} from '../../environment/userAgent';\nimport IS_VIBRATE_SUPPORTED from '../../environment/vibrateSupport';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport drawCircle from '../../helpers/canvas/drawCircle';\nimport customProperties from '../../helpers/dom/customProperties';\nimport idleController from '../../helpers/idleController';\nimport deepEqual from '../../helpers/object/deepEqual';\nimport tsNow from '../../helpers/tsNow';\nimport {Message, MessagePeerReaction, PeerNotifySettings, Reaction} from '../../layer';\nimport I18n, {FormatterArguments, LangPackKey} from '../langPack';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport singleInstance from '../mtproto/singleInstance';\nimport webPushApiManager, {PushSubscriptionNotify} from '../mtproto/webPushApiManager';\nimport fixEmoji from '../richTextProcessor/fixEmoji';\nimport getAbbreviation from '../richTextProcessor/getAbbreviation';\nimport wrapPlainText from '../richTextProcessor/wrapPlainText';\nimport rootScope from '../rootScope';\nimport appImManager from './appImManager';\nimport appRuntimeManager from './appRuntimeManager';\nimport {AppManagers} from './managers';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\nimport {getPeerAvatarColorByPeer} from './utils/peers/getPeerColorById';\nimport getPeerId from './utils/peers/getPeerId';\nimport {logger} from '../logger';\nimport LazyLoadQueueBase from '../../components/lazyLoadQueueBase';\n\ntype MyNotification = Notification & {\n hidden?: boolean,\n show?: () => void,\n};\n\nexport type NotifyOptions = Partial<{\n tag: string;\n image: string;\n key: string;\n title: string;\n message: string;\n silent: boolean;\n onclick: () => void;\n noIncrement: boolean;\n}>;\n\nexport type NotificationSettings = {\n nodesktop: boolean,\n volume: number,\n novibrate: boolean,\n nopreview: boolean,\n nopush: boolean,\n nosound: boolean\n};\n\nexport class UiNotificationsManager {\n private notificationsUiSupport: boolean;\n private notificationsShown: {[key: string]: MyNotification | true} = {};\n private notificationIndex = 0;\n private notificationsCount = 0;\n private soundsPlayed: {[tag: string]: number} = {};\n private vibrateSupport = IS_VIBRATE_SUPPORTED;\n private nextSoundAt: number;\n private prevSoundVolume: number;\n\n private faviconElements = Array.from(document.head.querySelectorAll('link[rel=\"icon\"], link[rel=\"alternate icon\"]'));\n\n private titleBackup = document.title;\n private titleChanged = false;\n private titleInterval: number;\n private prevFavicon: string;\n\n private notifySoundEl: HTMLElement;\n\n private stopped = false;\n\n private topMessagesDeferred: CancellablePromise;\n\n private settings: NotificationSettings = {} as any;\n\n private registeredDevice: any;\n private pushInited = false;\n\n private managers: AppManagers;\n private setAppBadge: (contents?: any) => Promise;\n\n private avatarCanvas: HTMLCanvasElement;\n private avatarContext: CanvasRenderingContext2D;\n private avatarGradients: {[color: string]: CanvasGradient};\n\n private log: ReturnType;\n\n private notificationsQueue: LazyLoadQueueBase;\n\n construct(managers: AppManagers) {\n this.managers = managers;\n\n this.log = logger('NOTIFICATIONS');\n this.notificationsQueue = new LazyLoadQueueBase(1);\n\n navigator.vibrate = navigator.vibrate || (navigator as any).mozVibrate || (navigator as any).webkitVibrate;\n this.setAppBadge = (navigator as any).setAppBadge?.bind(navigator);\n this.setAppBadge?.(0);\n\n this.notificationsUiSupport = ('Notification' in window) || ('mozNotification' in navigator);\n\n this.notifySoundEl = document.createElement('div');\n this.notifySoundEl.id = 'notify-sound';\n document.body.append(this.notifySoundEl);\n\n this.topMessagesDeferred = deferredPromise();\n\n singleInstance.addEventListener('deactivated', () => {\n this.stop();\n });\n\n singleInstance.addEventListener('activated', () => {\n if(this.stopped) {\n this.start();\n }\n });\n\n idleController.addEventListener('change', (idle) => {\n if(this.stopped) {\n return;\n }\n\n if(!idle) {\n this.clear();\n }\n\n this.toggleToggler();\n });\n\n rootScope.addEventListener('notification_reset', (peerString) => {\n this.soundReset(peerString);\n });\n\n rootScope.addEventListener('notification_cancel', (str) => {\n this.cancel(str);\n });\n\n if(this.setAppBadge) {\n rootScope.addEventListener('folder_unread', (folder) => {\n if(folder.id === 0) {\n this.setAppBadge(folder.unreadUnmutedPeerIds.size);\n }\n });\n }\n\n webPushApiManager.addEventListener('push_init', (tokenData) => {\n this.pushInited = true;\n if(!this.settings.nodesktop && !this.settings.nopush) {\n if(tokenData) {\n this.registerDevice(tokenData);\n } else {\n webPushApiManager.subscribe();\n }\n } else {\n this.unregisterDevice(tokenData);\n }\n });\n webPushApiManager.addEventListener('push_subscribe', (tokenData) => {\n this.registerDevice(tokenData);\n });\n webPushApiManager.addEventListener('push_unsubscribe', (tokenData) => {\n this.unregisterDevice(tokenData);\n });\n\n rootScope.addEventListener('dialogs_multiupdate', () => {\n // unregisterTopMsgs()\n this.topMessagesDeferred.resolve();\n }, {once: true});\n\n webPushApiManager.addEventListener('push_notification_click', (notificationData) => {\n if(notificationData.action === 'push_settings') {\n /* this.topMessagesDeferred.then(() => {\n $modal.open({\n templateUrl: templateUrl('settings_modal'),\n controller: 'SettingsModalController',\n windowClass: 'settings_modal_window mobile_modal',\n backdrop: 'single'\n })\n }); */\n return;\n }\n\n if(notificationData.action === 'mute1d') {\n this.managers.apiManager.invokeApi('account.updateDeviceLocked', {\n period: 86400\n }).then(() => {\n // var toastData = toaster.pop({\n // type: 'info',\n // body: _('push_action_mute1d_success'),\n // bodyOutputType: 'trustedHtml',\n // clickHandler: () => {\n // toaster.clear(toastData)\n // },\n // showCloseButton: false\n // })\n });\n\n return;\n }\n\n const peerId = notificationData.custom && notificationData.custom.peerId.toPeerId();\n console.log('click', notificationData, peerId);\n if(!peerId) {\n return;\n }\n\n this.topMessagesDeferred.then(async() => {\n const chatId = peerId.isAnyChat() ? peerId.toChatId() : undefined;\n let channelId: ChatId;\n if(chatId) {\n if(!(await this.managers.appChatsManager.hasChat(chatId))) {\n return;\n }\n\n channelId = await this.managers.appChatsManager.isChannel(chatId) ? chatId : undefined;\n }\n\n if(!chatId && !(await this.managers.appUsersManager.hasUser(peerId.toUserId()))) {\n return;\n }\n\n appImManager.setInnerPeer({\n peerId,\n lastMsgId: await this.managers.appMessagesIdsManager.generateMessageId(+notificationData.custom.msg_id, channelId)\n });\n });\n });\n }\n\n public async buildNotificationQueue(options: Parameters[0]) {\n this.notificationsQueue.push({\n load: () => this.buildNotification(options)\n });\n }\n\n public async buildNotification({\n message,\n fwdCount,\n peerReaction,\n peerTypeNotifySettings\n }: {\n message: Message.message | Message.messageService,\n fwdCount?: number,\n peerReaction?: MessagePeerReaction,\n peerTypeNotifySettings?: PeerNotifySettings\n }) {\n const peerId = message.peerId;\n const isAnyChat = peerId.isAnyChat();\n const notification: NotifyOptions = {};\n const [peerString, isForum = false, peer] = await Promise.all([\n this.managers.appPeersManager.getPeerString(peerId),\n isAnyChat && this.managers.appPeersManager.isForum(peerId),\n apiManagerProxy.getPeer(peerId)\n ]);\n let notificationMessage: string;\n let wrappedMessage = false;\n\n if(peerTypeNotifySettings.show_previews) {\n if(message._ === 'message' && message.fwd_from && fwdCount > 1) {\n notificationMessage = I18n.format('Notifications.Forwarded', true, [fwdCount]);\n } else {\n notificationMessage = await wrapMessageForReply({message, plain: true});\n\n const reaction = peerReaction?.reaction;\n if(reaction && reaction._ !== 'reactionEmpty') {\n let emoticon = (reaction as Reaction.reactionEmoji).emoticon;\n if(!emoticon) {\n const doc = await this.managers.appEmojiManager.getCustomEmojiDocument((reaction as Reaction.reactionCustomEmoji).document_id);\n emoticon = doc.stickerEmojiRaw;\n }\n\n const langPackKey: LangPackKey = /* isAnyChat ? 'Notification.Group.Reacted' : */'Notification.Contact.Reacted';\n const args: FormatterArguments = [\n fixEmoji(emoticon), // can be plain heart\n notificationMessage\n ];\n\n /* if(isAnyChat) {\n args.unshift(appPeersManager.getPeerTitle(message.fromId, true));\n } */\n\n notificationMessage = I18n.format(langPackKey, true, args);\n } else {\n wrappedMessage = true;\n }\n }\n } else {\n notificationMessage = I18n.format('Notifications.New', true);\n }\n\n if(peerReaction) {\n notification.noIncrement = true;\n notification.silent = true;\n }\n\n const peerTitleOptions/* : Partial[0]> */ = {\n plainText: true as const,\n managers: this.managers\n };\n\n const threadId = isForum ? getMessageThreadId(message, isForum) : undefined;\n const notificationFromPeerId = peerReaction ? getPeerId(peerReaction.peer_id) : message.fromId;\n const peerTitle = notification.title = await getPeerTitle({...peerTitleOptions, peerId, threadId: threadId});\n if(isForum) {\n const peerTitle = await getPeerTitle({...peerTitleOptions, peerId});\n notification.title += ` (${peerTitle})`;\n\n if(wrappedMessage && notificationFromPeerId !== message.peerId) {\n notificationMessage = await getPeerTitle({...peerTitleOptions, peerId: notificationFromPeerId}) +\n ': ' + notificationMessage;\n }\n } else if(isAnyChat && notificationFromPeerId !== message.peerId) {\n notification.title = await getPeerTitle({...peerTitleOptions, peerId: notificationFromPeerId}) +\n ' @ ' +\n notification.title;\n }\n\n notification.title = wrapPlainText(notification.title);\n\n notification.onclick = () => {\n appImManager.setInnerPeer({peerId, lastMsgId: message.mid, threadId});\n };\n\n notification.message = notificationMessage;\n notification.key = 'msg' + message.mid;\n notification.tag = peerString;\n notification.silent = true;// message.pFlags.silent || false;\n\n const peerPhoto = await this.managers.appPeersManager.getPeerPhoto(peerId);\n if(peerPhoto) {\n const url = await this.managers.appAvatarsManager.loadAvatar(peerId, peerPhoto, 'photo_small');\n\n if(!peerReaction) { // ! WARNING, message can be already read\n message = await this.managers.appMessagesManager.getMessageByPeer(message.peerId, message.mid);\n if(!message || !message.pFlags.unread) return;\n }\n\n notification.image = url;\n } else {\n let {avatarCanvas, avatarContext} = this;\n if(!this.avatarCanvas) {\n avatarCanvas = this.avatarCanvas = document.createElement('canvas');\n avatarContext = this.avatarContext = avatarCanvas.getContext('2d');\n\n const SIZE = 54;\n const dpr = 1;\n avatarCanvas.dpr = dpr;\n avatarCanvas.width = avatarCanvas.height = SIZE * dpr;\n\n this.avatarGradients = {};\n } else {\n avatarContext.clearRect(0, 0, avatarCanvas.width, avatarCanvas.height);\n }\n\n const color = getPeerAvatarColorByPeer(peer);\n let gradient = this.avatarGradients[color];\n if(!gradient) {\n gradient = this.avatarGradients[color] = avatarContext.createLinearGradient(avatarCanvas.width / 2, 0, avatarCanvas.width / 2, avatarCanvas.height);\n\n const colorTop = customProperties.getProperty(`peer-avatar-${color}-top`);\n const colorBottom = customProperties.getProperty(`peer-avatar-${color}-bottom`);\n gradient.addColorStop(0, colorTop);\n gradient.addColorStop(1, colorBottom);\n }\n\n avatarContext.fillStyle = gradient;\n\n drawCircle(avatarContext, avatarCanvas.width / 2, avatarCanvas.height / 2, avatarCanvas.width / 2);\n avatarContext.fill();\n\n const fontSize = 20 * avatarCanvas.dpr;\n const abbreviation = getAbbreviation(peerTitle);\n\n avatarContext.font = `700 ${fontSize}px ${FontFamily}`;\n avatarContext.textBaseline = 'middle';\n avatarContext.textAlign = 'center';\n avatarContext.fillStyle = 'white';\n avatarContext.fillText(abbreviation.text, avatarCanvas.width / 2, avatarCanvas.height * (window.devicePixelRatio > 1 || true ? .5625 : .5));\n\n notification.image = avatarCanvas.toDataURL();\n }\n\n const pushData: PushNotificationObject = {\n custom: {\n msg_id: '' + message.mid,\n peerId: '' + peerId\n },\n description: '',\n loc_key: '',\n loc_args: [],\n mute: '',\n random_id: 0,\n title: ''\n };\n\n const result = await this.notify(notification, pushData);\n if(result && this.registeredDevice) {\n webPushApiManager.ignorePushByMid(peerId, message.mid);\n }\n }\n\n private toggleToggler(enable = idleController.isIdle) {\n if(IS_MOBILE) return;\n\n const resetTitle = (isBlink?: boolean) => {\n this.titleChanged = false;\n document.title = this.titleBackup;\n this.setFavicon();\n };\n\n window.clearInterval(this.titleInterval);\n this.titleInterval = 0;\n\n if(!enable) {\n resetTitle();\n } else {\n this.titleInterval = window.setInterval(() => {\n const count = this.notificationsCount;\n if(!count) {\n this.toggleToggler(false);\n } else if(this.titleChanged) {\n resetTitle(true);\n } else {\n this.titleChanged = true;\n document.title = I18n.format('Notifications.Count', true, [count]);\n // this.setFavicon('assets/img/favicon_unread.ico');\n\n // fetch('assets/img/favicon.ico')\n // .then((res) => res.blob())\n // .then((blob) => {\n // const img = document.createElement('img');\n // img.src = URL.createObjectURL(blob);\n\n const canvas = document.createElement('canvas');\n canvas.width = 32 * window.devicePixelRatio;\n canvas.height = canvas.width;\n\n const ctx = canvas.getContext('2d');\n ctx.beginPath();\n ctx.arc(canvas.width / 2, canvas.height / 2, canvas.width / 2, 0, 2 * Math.PI, false);\n ctx.fillStyle = '#3390ec';\n ctx.fill();\n\n let fontSize = 24;\n let str = '' + count;\n if(count < 10) {\n fontSize = 22;\n } else if(count < 100) {\n fontSize = 20;\n } else {\n str = '99+';\n fontSize = 16;\n }\n\n fontSize *= window.devicePixelRatio;\n\n ctx.font = `700 ${fontSize}px ${FontFamily}`;\n ctx.textBaseline = 'middle';\n ctx.textAlign = 'center';\n ctx.fillStyle = 'white';\n ctx.fillText(str, canvas.width / 2, canvas.height * .5625);\n\n /* const ctx = canvas.getContext('2d');\n ctx.drawImage(img, 0, 0, canvas.width, canvas.height); */\n\n this.setFavicon(canvas.toDataURL());\n // });\n }\n }, 1000);\n }\n }\n\n private setFavicon(href?: string) {\n if(this.prevFavicon === href) {\n return;\n }\n\n this.prevFavicon = href;\n this.faviconElements.forEach((element, idx, arr) => {\n const link = element.cloneNode() as HTMLLinkElement;\n\n link.dataset.href ||= link.href;\n\n href ??= link.dataset.href;\n link.href = href;\n element.replaceWith(arr[idx] = link);\n });\n }\n\n public async notify(data: NotifyOptions, pushData: PushNotificationObject) {\n this.log('notify', data, idleController.isIdle, this.notificationsUiSupport, this.stopped);\n\n if(this.stopped) {\n return;\n }\n\n data.image ||= NOTIFICATION_ICON_PATH;\n\n if(!data.noIncrement) {\n ++this.notificationsCount;\n }\n\n if(!this.titleInterval) {\n this.toggleToggler();\n }\n\n const idx = ++this.notificationIndex;\n const key = data.key || 'k' + idx;\n this.notificationsShown[key] = true;\n\n const now = tsNow();\n if(this.settings.volume > 0 && !this.settings.nosound/* &&\n (\n !data.tag ||\n !this.soundsPlayed[data.tag] ||\n now > this.soundsPlayed[data.tag] + 60000\n ) */\n ) {\n this.testSound(this.settings.volume);\n this.soundsPlayed[data.tag] = now;\n }\n\n if(!this.notificationsUiSupport ||\n 'Notification' in window && Notification.permission !== 'granted') {\n return;\n }\n\n if(this.settings.nodesktop) {\n if(this.vibrateSupport && !this.settings.novibrate) {\n navigator.vibrate([200, 100, 200]);\n return;\n }\n\n return;\n }\n\n if(!('Notification' in window)) {\n return;\n }\n\n let notification: MyNotification;\n\n const notificationOptions: NotificationOptions = {\n badge: NOTIFICATION_BADGE_PATH,\n icon: data.image || '',\n body: data.message || '',\n tag: data.tag || '',\n silent: data.silent || false,\n data: pushData\n };\n\n try {\n if(data.tag) {\n for(const i in this.notificationsShown) {\n const notification = this.notificationsShown[i];\n if(typeof(notification) !== 'boolean' && notification.tag === data.tag) {\n notification.hidden = true;\n }\n }\n }\n\n // throw new Error('test');\n notification = new Notification(data.title, notificationOptions);\n } catch(e) {\n try {\n const registration = await navigator.serviceWorker.ready;\n await registration.showNotification(data.title, notificationOptions);\n const notifications = await registration.getNotifications({tag: notificationOptions.tag});\n notification = notifications[notifications.length - 1];\n } catch(err) {\n this.log.error('creating push error', err, data, notificationOptions);\n }\n\n if(!notification) {\n this.notificationsUiSupport = false;\n webPushApiManager.setLocalNotificationsDisabled();\n return;\n }\n }\n\n notification.onclick = () => {\n this.log('notification onclick');\n notification.close();\n appRuntimeManager.focus();\n this.clear();\n data.onclick?.();\n };\n\n notification.onclose = () => {\n this.log('notification onclose');\n if(!notification.hidden) {\n delete this.notificationsShown[key];\n this.clear();\n }\n };\n\n notification.show?.();\n this.notificationsShown[key] = notification;\n\n if(!IS_MOBILE) {\n setTimeout(() => {\n this.hide(key);\n }, 8000);\n }\n\n return true;\n }\n\n public updateLocalSettings = () => {\n const keys = ['notify_nodesktop', 'notify_volume', 'notify_novibrate', 'notify_nopreview', 'notify_nopush'];\n const promises = keys.map(() => undefined);\n // const promises = keys.map((k) => stateStorage.get(k as any));\n Promise.all(promises)\n .then((updSettings) => {\n this.settings.nodesktop = updSettings[0];\n this.settings.volume = updSettings[1] === undefined ? 0.5 : updSettings[1];\n this.settings.novibrate = updSettings[2];\n this.settings.nopreview = updSettings[3];\n this.settings.nopush = updSettings[4];\n\n if(this.pushInited) {\n const needPush = !this.settings.nopush && !this.settings.nodesktop && webPushApiManager.isAvailable || false;\n const hasPush = this.registeredDevice !== false;\n if(needPush !== hasPush) {\n if(needPush) {\n webPushApiManager.subscribe();\n } else {\n webPushApiManager.unsubscribe();\n }\n }\n }\n\n webPushApiManager.setSettings(this.settings);\n });\n\n apiManagerProxy.getState().then((state) => {\n this.settings.nosound = !state.settings.notifications.sound;\n });\n }\n\n public getLocalSettings() {\n return this.settings;\n }\n\n private hide(key: string) {\n const notification = this.notificationsShown[key];\n if(notification) {\n this.closeNotification(notification);\n }\n }\n\n public soundReset(tag: string) {\n delete this.soundsPlayed[tag];\n }\n\n private requestPermission = () => {\n Notification.requestPermission();\n window.removeEventListener('click', this.requestPermission);\n };\n\n public testSound(volume: number) {\n const now = tsNow();\n if(this.nextSoundAt && now < this.nextSoundAt && this.prevSoundVolume === volume) {\n return;\n }\n\n this.nextSoundAt = now + 1000;\n this.prevSoundVolume = volume;\n const filename = 'assets/audio/notification.mp3';\n const audio = document.createElement('audio');\n audio.autoplay = true;\n audio.setAttribute('mozaudiochannel', 'notification');\n audio.volume = volume;\n audio.innerHTML = `\n \n \n `;\n this.notifySoundEl.append(audio);\n\n audio.addEventListener('ended', () => {\n audio.remove();\n }, {once: true});\n }\n\n public cancel(key: string) {\n const notification = this.notificationsShown[key];\n this.log('cancel', key, notification);\n if(notification) {\n if(this.notificationsCount > 0) {\n --this.notificationsCount;\n }\n\n this.closeNotification(notification);\n delete this.notificationsShown[key];\n }\n }\n\n private closeNotification(notification: boolean | MyNotification) {\n try {\n if(typeof(notification) !== 'boolean' && notification.close) {\n this.log('close notification', notification);\n notification.hidden = true;\n notification.close();\n }\n } catch(e) {}\n }\n\n public clear = () => {\n this.log.warn('clear');\n\n for(const i in this.notificationsShown) {\n const notification = this.notificationsShown[i];\n this.closeNotification(notification);\n }\n\n this.notificationsShown = {};\n this.notificationsCount = 0;\n\n webPushApiManager.hidePushNotifications();\n };\n\n public start() {\n this.log('start');\n this.stopped = false;\n\n this.updateLocalSettings();\n rootScope.addEventListener('settings_updated', this.updateLocalSettings);\n apiManagerProxy.getState().then((state) => {\n if(this.stopped || !state.keepSigned) {\n return;\n }\n\n webPushApiManager.start();\n });\n\n if(!this.notificationsUiSupport) {\n return false;\n }\n\n if('Notification' in window && Notification.permission !== 'granted' && Notification.permission !== 'denied') {\n window.addEventListener('click', this.requestPermission);\n }\n\n try {\n if('onbeforeunload' in window) {\n window.addEventListener('beforeunload', this.clear);\n }\n } catch(e) {}\n }\n\n private stop() {\n this.log('stop');\n\n this.clear();\n window.clearInterval(this.titleInterval);\n this.titleInterval = 0;\n this.setFavicon();\n this.stopped = true;\n }\n\n private registerDevice(tokenData: PushSubscriptionNotify) {\n if(this.registeredDevice && deepEqual(this.registeredDevice, tokenData)) {\n return false;\n }\n\n this.managers.apiManager.invokeApi('account.registerDevice', {\n token_type: tokenData.tokenType,\n token: tokenData.tokenValue,\n other_uids: [],\n app_sandbox: false,\n secret: new Uint8Array()\n }).then(() => {\n this.log('registered device');\n this.registeredDevice = tokenData;\n }, (error) => {\n error.handled = true;\n });\n }\n\n private unregisterDevice(tokenData: PushSubscriptionNotify) {\n if(!this.registeredDevice) {\n return false;\n }\n\n this.managers.apiManager.invokeApi('account.unregisterDevice', {\n token_type: tokenData.tokenType,\n token: tokenData.tokenValue,\n other_uids: []\n }).then(() => {\n this.registeredDevice = false;\n }, (error) => {\n error.handled = true;\n });\n }\n}\n\nconst uiNotificationsManager = new UiNotificationsManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.uiNotificationsManager = uiNotificationsManager);\nexport default uiNotificationsManager;\n","export default async function getFilesFromEvent(e: ClipboardEvent | DragEvent, onlyTypes = false): Promise {\n const files: any[] = [];\n\n const scanFiles = async(entry: any, item: DataTransferItem) => {\n if(entry.isDirectory) {\n const directoryReader = entry.createReader();\n await new Promise((resolve, reject) => {\n directoryReader.readEntries(async(entries: any) => {\n for(const entry of entries) {\n await scanFiles(entry, item);\n }\n\n resolve();\n });\n });\n } else if(entry) {\n if(onlyTypes) {\n files.push(entry.type);\n } else {\n const itemFile = item.getAsFile(); // * Safari can't handle entry.file with pasting\n const file = entry instanceof File ?\n entry :\n (\n entry instanceof DataTransferItem ?\n entry.getAsFile() :\n await new Promise((resolve, reject) => entry.file(resolve, (err: any) => resolve(itemFile)))\n );\n\n /* if(!onlyTypes) {\n console.log('getFilesFromEvent: got file', item, file);\n } */\n\n if(!file) return;\n files.push(file);\n }\n }\n };\n\n if(e instanceof DragEvent && e.dataTransfer.files && !e.dataTransfer.items) {\n for(let i = 0; i < e.dataTransfer.files.length; i++) {\n const file = e.dataTransfer.files[i];\n files.push(onlyTypes ? file.type : file);\n }\n } else {\n // @ts-ignore\n const items = (e.dataTransfer || e.clipboardData || e.originalEvent.clipboardData).items;\n\n const promises: Promise[] = [];\n for(let i = 0; i < items.length; ++i) {\n const item: DataTransferItem = items[i];\n if(item.kind === 'file') {\n const entry = (onlyTypes ? item : item.webkitGetAsEntry()) || item.getAsFile();\n promises.push(scanFiles(entry, item));\n }\n }\n\n await Promise.all(promises);\n }\n\n /* if(!onlyTypes) {\n console.log('getFilesFromEvent: got files:', e, files);\n } */\n\n return files;\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport {PremiumGiftOption} from '../../layer';\nimport appImManager from '../../lib/appManagers/appImManager';\nimport I18n, {i18n, _i18n} from '../../lib/langPack';\nimport {avatarNew} from '../avatarNew';\nimport Button from '../button';\nimport CheckboxField from '../checkboxField';\nimport Row from '../row';\nimport wrapPeerTitle from '../wrappers/peerTitle';\n\nconst className = 'popup-gift-premium';\n\nexport default class PopupGiftPremium extends PopupElement {\n constructor(\n private peerId: PeerId,\n private giftOptions: PremiumGiftOption[]\n ) {\n super(className, {closable: true, overlayClosable: true, body: true, scrollable: true});\n\n this.construct();\n }\n\n public async construct() {\n const {peerId, giftOptions} = this;\n const avatar = avatarNew({\n middleware: this.middlewareHelper.get(),\n size: 100,\n peerId\n });\n avatar.node.classList.add(className + '-avatar');\n\n const title = document.createElement('span');\n _i18n(title, 'GiftTelegramPremiumTitle');\n title.classList.add(className + '-title');\n\n const subtitle = i18n('GiftTelegramPremiumDescription', [await wrapPeerTitle({peerId})]);\n subtitle.classList.add(className + '-subtitle');\n\n const shortestOption = this.giftOptions.slice().sort((a, b) => a.months - b.months)[0];\n\n const wrapCurrency = (amount: number | string) => paymentsWrapCurrencyAmount(amount, shortestOption.currency, false, true, true);\n\n const rows = this.giftOptions.map((giftOption, idx) => {\n let subtitle = i18n('PricePerMonth', [wrapCurrency(+giftOption.amount / giftOption.months)]);\n if(giftOption !== shortestOption) {\n const span = document.createElement('span');\n const badge = document.createElement('span');\n badge.classList.add(className + '-discount');\n const shortestAmount = +shortestOption.amount * giftOption.months / shortestOption.months;\n const discount = Math.round((1 - +giftOption.amount / shortestAmount) * 100);\n badge.textContent = '-' + discount + '%';\n span.append(badge, subtitle);\n subtitle = span;\n }\n\n const isYears = !(giftOption.months % 12);\n const checkboxField = new CheckboxField({\n checked: idx === 0,\n round: true,\n name: 'gift-months',\n asRadio: true\n });\n\n const row = new Row({\n title: i18n(isYears ? 'Years' : 'Months', [isYears ? giftOption.months / 12 : giftOption.months]),\n checkboxField,\n clickable: true,\n subtitle,\n rightTextContent: wrapCurrency(giftOption.amount)\n });\n\n row.container.classList.add(className + '-option');\n\n return row;\n });\n\n const form = document.createElement('form');\n form.classList.add(className + '-options');\n form.append(...rows.map((row) => row.container));\n\n const buttonText = new I18n.IntlElement({key: 'GiftSubscriptionFor', args: [wrapCurrency(giftOptions[0].amount)]});\n\n const getSelectedOption = () => giftOptions[rows.findIndex((row) => row.checkboxField.checked)];\n\n this.listenerSetter.add(form)('change', () => {\n buttonText.compareAndUpdate({\n args: [\n wrapCurrency(getSelectedOption().amount)\n ]\n });\n });\n\n const giftButton = Button(`btn-primary ${className}-confirm shimmer`);\n giftButton.append(buttonText.element);\n\n attachClickEvent(giftButton, () => {\n const giftOption = getSelectedOption();\n appImManager.openUrl(giftOption.bot_url);\n this.hide();\n }, {listenerSetter: this.listenerSetter});\n\n this.scrollable.append(\n avatar.node,\n title,\n subtitle,\n form,\n giftButton\n );\n\n this.show();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {hexToRgb, calculateLuminance, getTextColor, calculateOpacity, rgbaToRgb} from '../helpers/color';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport safeWindowOpen from '../helpers/dom/safeWindowOpen';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport safeAssign from '../helpers/object/safeAssign';\nimport themeController from '../helpers/themeController';\nimport {AttachMenuBot, DataJSON, WebViewResult, Document} from '../layer';\nimport type AppAttachMenuBotsManager from '../lib/appManagers/appAttachMenuBotsManager';\nimport appImManager from '../lib/appManagers/appImManager';\nimport {InternalLink, INTERNAL_LINK_TYPE} from '../lib/appManagers/internalLink';\nimport internalLinkProcessor from '../lib/appManagers/internalLinkProcessor';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport getAttachMenuBotIcon from '../lib/appManagers/utils/attachMenuBots/getAttachMenuBotIcon';\nimport {LangPackKey} from '../lib/langPack';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport rootScope from '../lib/rootScope';\nimport {TelegramWebViewEventMap, AnyFunction, TelegramWebViewSendEventMap} from '../types';\nimport Button from './button';\nimport {ButtonMenuItemOptionsVerifiable} from './buttonMenu';\nimport confirmationPopup from './confirmationPopup';\nimport PopupElement from './popups';\nimport PopupPeer, {PopupPeerOptions} from './popups/peer';\nimport PopupPickUser from './popups/pickUser';\nimport TelegramWebView from './telegramWebView';\nimport wrapAttachBotIcon from './wrappers/attachBotIcon';\nimport getPeerTitle from './wrappers/getPeerTitle';\nimport wrapPeerTitle from './wrappers/peerTitle';\n\nconst SANDBOX_ATTRIBUTES = [\n 'allow-scripts',\n 'allow-same-origin',\n 'allow-popups',\n 'allow-forms',\n 'allow-modals',\n 'allow-storage-access-by-user-activation'\n].join(' ');\n\nexport type WebAppLaunchOptions = {\n webViewResultUrl: WebApp['webViewResultUrl'],\n webViewOptions: WebApp['webViewOptions'],\n attachMenuBot?: AttachMenuBot,\n cacheKey?: string\n};\n\nexport default class WebApp {\n private telegramWebView: TelegramWebView;\n private webViewResultUrl: Awaited>;\n private webViewOptions: Parameters[0];\n private attachMenuBot: AttachMenuBot;\n private mainButton: HTMLElement;\n private isCloseConfirmationNeeded: boolean;\n private lastHeaderColor: TelegramWebViewEventMap['web_app_set_header_color'];\n private showSettingsButton: boolean;\n private readyResult: TelegramWebViewEventMap['iframe_ready'];\n private reloadTimeout: number;\n private iconElement: HTMLElement;\n private listenerSetter: ListenerSetter;\n private destroyed: boolean;\n // private mainButtonText: HTMLElement;\n\n public header: HTMLElement;\n public title: HTMLElement;\n public body: HTMLElement;\n public footer: HTMLElement;\n private forceHide: () => void;\n private onBackStatus: (visible: boolean) => void;\n\n private managers: AppManagers;\n\n public cacheKey: string;\n\n constructor(options: WebAppLaunchOptions & {\n header: WebApp['header'],\n title: WebApp['title'],\n body: WebApp['body'],\n footer: WebApp['footer'],\n forceHide: WebApp['forceHide'],\n onBackStatus: WebApp['onBackStatus']\n }) {\n safeAssign(this, options);\n\n this.listenerSetter = new ListenerSetter();\n this.managers = rootScope.managers;\n\n this.title.classList.add('web-app-title');\n this.header.classList.add('web-app-header');\n this.body.classList.add('web-app-body');\n this.footer.classList.add('web-app-footer');\n\n this.mainButton = Button('btn-primary btn-color-primary web-app-button', {noRipple: true});\n // this.mainButtonText = document.createElement('span');\n // this.mainButton.append(this.mainButtonText);\n // this.body.append(this.mainButton);\n this.footer.append(this.mainButton);\n this.body.after(this.footer);\n\n attachClickEvent(this.mainButton, () => {\n this.telegramWebView.dispatchWebViewEvent('main_button_pressed', undefined);\n }, {listenerSetter: this.listenerSetter});\n\n this.listenerSetter.add(rootScope)('theme_changed', () => {\n this.setHeaderColor();\n this.sendTheme();\n });\n this.listenerSetter.add(rootScope)('attach_menu_bot', (attachMenuBot) => {\n if(this.webViewOptions.botId === attachMenuBot.bot_id) {\n this.attachMenuBot = attachMenuBot;\n }\n });\n\n if(this.webViewResultUrl._ === 'webViewResultUrl') {\n const queryId = this.webViewResultUrl.query_id;\n this.listenerSetter.add(rootScope)('web_view_result_sent', (_queryId) => {\n if(queryId === _queryId) {\n this.forceHide();\n }\n });\n }\n }\n\n public onBackClick = (): false | void => {\n this.telegramWebView.dispatchWebViewEvent('back_button_pressed', undefined);\n return false;\n };\n\n public isConfirmationNeededOnClose = () => {\n if(!this.isCloseConfirmationNeeded) {\n return;\n }\n\n return confirmationPopup({\n descriptionLangKey: 'BotWebViewChangesMayNotBeSaved',\n button: {\n isDanger: true,\n langKey: 'BotWebViewCloseAnyway'\n }\n });\n };\n\n public getMenuButtons(): ButtonMenuItemOptionsVerifiable[] {\n const botId = this.webViewOptions.botId;\n const botPeerId = botId.toPeerId();\n\n return [{\n icon: 'settings',\n text: 'BotSettings',\n onClick: () => {\n this.telegramWebView.dispatchWebViewEvent('settings_button_pressed', undefined);\n },\n // verify: () => (this.attachMenuBot && this.attachMenuBot.pFlags.has_settings) || this.webViewOptions.hasSettings\n verify: () => this.showSettingsButton\n }, {\n icon: 'bots',\n text: 'BotWebViewOpenBot',\n onClick: () => {\n this.forceHide();\n appImManager.setInnerPeer({peerId: botPeerId});\n },\n verify: () => this.webViewOptions.peerId !== botPeerId\n }, {\n icon: 'rotate_left',\n text: 'BotWebViewReloadPage',\n onClick: () => {\n const fallbackReload = () => {\n const oldWebView = this.telegramWebView;\n const telegramWebView = this.createWebView();\n oldWebView.iframe.replaceWith(telegramWebView.iframe);\n oldWebView.destroy();\n telegramWebView.onMount();\n };\n\n if(!this.readyResult?.reload_supported) {\n fallbackReload();\n return;\n }\n\n this.reloadTimeout = window.setTimeout(() => {\n this.reloadTimeout = undefined;\n fallbackReload();\n }, 300);\n\n this.telegramWebView.dispatchWebViewEvent('reload_iframe', undefined);\n },\n verify: () => true\n }, /* {\n icon: 'plusround',\n text: 'WebApp.InstallBot',\n onClick: () => {\n appImManager.toggleBotInAttachMenu(botId, true).then(async(attachMenuBot) => {\n this.attachMenuBot = attachMenuBot;\n });\n },\n verify: () => this.attachMenuBot && this.attachMenuBot.pFlags.inactive\n }, */{\n icon: 'delete',\n className: 'danger',\n text: 'BotWebViewDeleteBot',\n onClick: () => {\n appImManager.toggleBotInAttachMenu(botId, false).then(async(attachMenuBot) => {\n this.attachMenuBot = attachMenuBot;\n this.forceHide();\n });\n },\n verify: () => this.attachMenuBot && !this.attachMenuBot.pFlags.inactive,\n separator: true\n }];\n }\n\n protected getThemeParams() {\n return themeController.getThemeParamsForWebView();\n }\n\n protected sendTheme = () => {\n this.telegramWebView.dispatchWebViewEvent('theme_changed', {\n theme_params: this.getThemeParams()\n });\n };\n\n protected setHeaderColor = (color: WebApp['lastHeaderColor'] = this.lastHeaderColor) => {\n this.lastHeaderColor = color;\n\n let backgroundColor: string;\n const hex = color.color;\n if(hex) {\n const rgb = hexToRgb(hex);\n const luminance = calculateLuminance(rgb);\n const textColor = getTextColor(luminance);\n const textOpacity = calculateOpacity(luminance, 2.5);\n const textRgbColor = rgbaToRgb([...textColor, textOpacity], rgb);\n // const borderColor = rgbaToRgb([...rgb, 1 - 0.08], rgb || rgbaToRgb([255, 255, 255, 0.08], rgb));\n backgroundColor = hex;\n this.title.style.color = `rgb(${textColor.join(',')})`;\n this.header.style.setProperty('--secondary-text-color', `rgb(${textRgbColor.join(', ')})`);\n this.header.style.setProperty('--light-secondary-text-color', `rgba(${textColor.join(', ')}, ${0.08})`);\n // this.header.style.setProperty('--border-color', `rgb(${borderColor.join(', ')})`);\n this.header.style.setProperty('--border-color', `rgba(${textColor.join(', ')}, ${0.08})`);\n } else {\n backgroundColor = this.getThemeParams()[color.color_key];\n this.title.style.color = '';\n this.header.style.removeProperty('--secondary-text-color');\n this.header.style.removeProperty('--light-secondary-text-color');\n this.header.style.removeProperty('--border-color');\n }\n\n this.header.style.backgroundColor = backgroundColor;\n };\n\n protected setBodyColor = (color: string) => {\n this.body.style.backgroundColor = color;\n };\n\n protected switchInlineQuery = async({\n query,\n chat_types\n }: TelegramWebViewEventMap['web_app_switch_inline_query']) => {\n const user = await this.managers.appUsersManager.getUser(this.webViewOptions.botId);\n if(user.bot_inline_placeholder === undefined) {\n return;\n }\n\n this.forceHide();\n\n const chat = appImManager.chat;\n let peerId = chat.peerId, threadId = chat.threadId;\n if(chat_types?.length) {\n const chosenPeerId = await PopupPickUser.createPicker(chat_types, ['send_inline']);\n if(peerId !== chosenPeerId) {\n peerId = chosenPeerId;\n threadId = undefined;\n await appImManager.setInnerPeer({peerId});\n }\n }\n\n this.managers.appInlineBotsManager.switchInlineQuery(\n peerId,\n threadId,\n this.webViewOptions.botId,\n query\n );\n };\n\n protected setupMainButton = ({\n is_visible,\n is_active,\n is_progress_visible,\n color,\n text,\n text_color\n }: TelegramWebViewEventMap['web_app_setup_main_button']) => {\n is_visible = is_visible && !!text?.trim();\n if(text) this.mainButton.replaceChildren(wrapEmojiText(text));\n if(color) themeController.applyAppColor({\n name: 'primary-color',\n element: this.mainButton,\n hex: color,\n darkenAlpha: 0.04\n });\n if(text_color) this.mainButton.style.color = text_color;\n // this.mainButton.classList.toggle('is-visible', is_visible);\n this.footer.classList.toggle('is-visible', is_visible);\n };\n\n protected setupBackButton = ({\n is_visible\n }: TelegramWebViewEventMap['web_app_setup_back_button']) => {\n this.onBackStatus(is_visible);\n };\n\n protected setupSettingsButton = ({\n is_visible\n }: TelegramWebViewEventMap['web_app_setup_settings_button']) => {\n this.showSettingsButton = is_visible;\n };\n\n protected openPopup = async({\n title,\n message,\n buttons\n }: TelegramWebViewEventMap['web_app_open_popup']) => {\n const buttonLangPackKeysMap: {[type in typeof buttons[0]['type']]?: LangPackKey} = {\n cancel: 'Cancel',\n close: 'Close',\n ok: 'OK'\n };\n\n let pressedButtonId: string;\n const popup = PopupElement.createPopup(\n PopupPeer,\n 'popup-confirmation',\n {\n title: title ? wrapEmojiText(title) : undefined,\n description: wrapEmojiText(message),\n buttons: buttons.map(({type, text, id}) => {\n const langPackKey = buttonLangPackKeysMap[type];\n const button: PopupPeerOptions['buttons'][0] = {\n langKey: langPackKey,\n text: !langPackKey ? wrapEmojiText(text) : undefined,\n isCancel: true,\n isDanger: type === 'destructive',\n callback: () => {\n pressedButtonId = id;\n }\n };\n\n return button;\n })\n }\n );\n\n const promise = new Promise((resolve) => {\n popup.addEventListener('close', () => {\n this.telegramWebView.dispatchWebViewEvent('popup_closed', {\n ...(pressedButtonId !== undefined ? {button_id: pressedButtonId} : {})\n });\n resolve();\n });\n });\n\n popup.show();\n\n return promise;\n };\n\n public destroy() {\n this.destroyed = true;\n this.telegramWebView.destroy();\n this.listenerSetter.removeAll();\n }\n\n protected debouncePopupMethod(\n callback: T,\n resultType: K,\n debouncedResult: TelegramWebViewSendEventMap[K]\n ) {\n let isOpen = false, debouncing = false;\n return (async(...args: any[]) => {\n if(isOpen) {\n return;\n }\n\n const {lastDispatchedWebViewEvent} = this.telegramWebView;\n if(!debouncing && lastDispatchedWebViewEvent?.type === resultType && lastDispatchedWebViewEvent.count >= 3) {\n debouncing = true;\n setTimeout(() => {\n if(this.telegramWebView.lastDispatchedWebViewEvent === lastDispatchedWebViewEvent) {\n this.telegramWebView.lastDispatchedWebViewEvent.count = 0;\n }\n debouncing = false;\n }, 3000);\n }\n\n if(debouncing) {\n this.telegramWebView.dispatchWebViewEvent(resultType, debouncedResult);\n return;\n }\n\n isOpen = true;\n try {\n await callback(...args);\n } finally {\n isOpen = false;\n }\n }) as T;\n }\n\n protected createWebView() {\n const telegramWebView = this.telegramWebView = new TelegramWebView({\n url: this.webViewResultUrl.url,\n sandbox: SANDBOX_ATTRIBUTES,\n allow: 'camera; microphone; geolocation;',\n onLoad: () => {\n if(this.iconElement) {\n this.iconElement.style.opacity = '0';\n }\n\n telegramWebView.iframe.style.opacity = '1';\n telegramWebView.iframe.classList.remove('disable-hover');\n }\n });\n\n telegramWebView.iframe.style.opacity = '0';\n telegramWebView.iframe.classList.add('disable-hover');\n telegramWebView.iframe.allowFullscreen = true;\n\n telegramWebView.addMultipleEventsListeners({\n iframe_ready: (result) => {\n this.readyResult = result;\n },\n iframe_will_reload: () => {\n if(this.reloadTimeout) {\n clearTimeout(this.reloadTimeout);\n this.reloadTimeout = undefined;\n }\n },\n web_app_data_send: ({data}) => {\n if(!this.webViewOptions.isSimpleWebView || this.webViewOptions.fromSwitchWebView) {\n return;\n }\n\n this.forceHide();\n this.managers.appAttachMenuBotsManager.sendWebViewData(this.webViewOptions.botId, this.webViewOptions.buttonText, data);\n },\n web_app_close: () => {\n this.forceHide();\n },\n web_app_open_link: ({url}) => {\n safeWindowOpen(url);\n },\n web_app_open_tg_link: ({path_full}) => {\n appImManager.openUrl('https://t.me' + path_full);\n // this.forceHide();\n },\n web_app_open_invoice: ({slug}) => {\n const link: InternalLink.InternalLinkInvoice = {\n _: INTERNAL_LINK_TYPE.INVOICE,\n slug\n };\n\n internalLinkProcessor.processInvoiceLink(link).then((popupPayment) => {\n popupPayment.addEventListener('finish', (result) => {\n telegramWebView.dispatchWebViewEvent('invoice_closed', {\n slug,\n status: result\n });\n });\n });\n },\n web_app_request_theme: this.sendTheme,\n web_app_set_background_color: ({color}) => this.setBodyColor(color),\n web_app_set_header_color: this.setHeaderColor,\n web_app_switch_inline_query: this.switchInlineQuery,\n web_app_setup_main_button: this.setupMainButton,\n web_app_setup_back_button: this.setupBackButton,\n web_app_setup_settings_button: this.setupSettingsButton,\n web_app_setup_closing_behavior: ({need_confirmation}) => this.isCloseConfirmationNeeded = !!need_confirmation,\n web_app_open_popup: this.debouncePopupMethod(this.openPopup, 'popup_closed', {}),\n web_app_open_scan_qr_popup: () => telegramWebView.dispatchWebViewEvent('scan_qr_popup_closed', {}),\n web_app_read_text_from_clipboard: async({req_id}) => {\n const result: TelegramWebViewSendEventMap['clipboard_text_received'] = {\n req_id\n };\n\n let data: string;\n if(this.attachMenuBot && !this.attachMenuBot.pFlags.inactive) try {\n const permission = await navigator.permissions.query({\n // @ts-ignore\n name: 'clipboard-read'\n });\n\n if(permission.state === 'granted') {\n data = await navigator.clipboard.readText();\n }\n } catch(error) {\n console.error('clipboard read error', error);\n }\n\n if(data !== undefined) {\n result.data = data;\n }\n\n telegramWebView.dispatchWebViewEvent('clipboard_text_received', result);\n },\n web_app_request_write_access: this.debouncePopupMethod(async() => {\n const botId = this.webViewOptions.botId;\n const canSendMessage = await this.managers.appBotsManager.canSendMessage(botId);\n const status: TelegramWebViewSendEventMap['write_access_requested'] = {status: 'allowed'};\n if(!canSendMessage) {\n try {\n await confirmationPopup({\n titleLangKey: 'WebApp.WriteAccess.Title',\n descriptionLangKey: 'WebApp.WriteAccess.Description',\n descriptionLangArgs: [await wrapPeerTitle({peerId: botId.toPeerId(false)})],\n button: {\n langKey: 'OK'\n }\n });\n\n await this.managers.appBotsManager.allowSendMessage(botId);\n } catch(err) {\n status.status = 'cancelled';\n }\n }\n\n telegramWebView.dispatchWebViewEvent('write_access_requested', status);\n }, 'write_access_requested', {status: 'cancelled'}),\n web_app_request_phone: this.debouncePopupMethod(async() => {\n const status: TelegramWebViewSendEventMap['phone_requested'] = {status: 'sent'};\n try {\n const botId = this.webViewOptions.botId;\n await this.managers.appMessagesManager.unblockBot(botId);\n await appImManager.requestPhone(botId.toPeerId(false));\n } catch(err) {\n status.status = 'cancelled';\n }\n\n telegramWebView.dispatchWebViewEvent('phone_requested', status);\n }, 'phone_requested', {status: 'cancelled'}),\n web_app_invoke_custom_method: async({req_id, method, params}) => {\n let result: DataJSON.dataJSON, error: ApiError;\n try {\n result = await this.managers.appAttachMenuBotsManager.invokeWebViewCustomMethod(\n this.webViewOptions.botId,\n method,\n params\n );\n } catch(_error) {\n error = _error;\n }\n\n telegramWebView.dispatchWebViewEvent('custom_method_invoked', {\n req_id,\n result: result && JSON.parse(result.data),\n error: error?.type\n });\n }\n });\n\n telegramWebView.iframe.classList.add('payment-verification');\n return telegramWebView;\n }\n\n public getPeerId() {\n if(this.attachMenuBot) {\n return this.attachMenuBot.bot_id.toPeerId(false);\n } else {\n return this.webViewOptions.botId.toPeerId(false);\n }\n }\n\n public async getTitle(plain: T): Promise {\n if(!this.attachMenuBot) {\n const peerId = this.getPeerId();\n if(plain) return getPeerTitle({peerId, plainText: true});\n else return wrapPeerTitle({peerId}) as any;\n } else {\n if(plain) return this.attachMenuBot.short_name as any;\n else return wrapEmojiText(this.attachMenuBot.short_name) as any;\n }\n }\n\n public async init(mountCallback: () => MaybePromise) {\n if(!this.attachMenuBot) {\n this.title.append(await this.getTitle(false));\n }\n\n let hasIcon = false;\n this.iconElement = document.createElement('span');\n /* if(this.webViewOptions.app) {\n\n } else */try {\n const attachMenuBot = this.attachMenuBot ?? await this.managers.appAttachMenuBotsManager.getAttachMenuBot(this.webViewOptions.botId);\n const icon = getAttachMenuBotIcon(attachMenuBot);\n if(icon) {\n await wrapAttachBotIcon({\n element: this.iconElement,\n doc: icon.icon as Document.document,\n size: 80,\n textColor: () => 'secondary-text-color',\n strokeWidth: () => .5\n });\n\n hasIcon = true;\n }\n } catch(err) {}\n\n if(hasIcon) {\n this.iconElement.classList.add('web-app-icon');\n } else {\n this.iconElement = undefined;\n }\n\n const telegramWebView = this.createWebView();\n this.setBodyColor(this.getThemeParams().bg_color);\n this.setHeaderColor({color_key: 'bg_color'});\n this.body.prepend(...[this.iconElement, telegramWebView.iframe].filter(Boolean));\n\n Promise.resolve(mountCallback()).then(() => {\n telegramWebView.onMount();\n\n if(!this.webViewOptions.isSimpleWebView && (this.webViewResultUrl as WebViewResult.webViewResultUrl).query_id) {\n setTimeout(() => this.prolongWebView(), 50e3);\n }\n });\n }\n\n private prolongWebView() {\n this.managers.appAttachMenuBotsManager.prolongWebView({\n queryId: (this.webViewResultUrl as WebViewResult.webViewResultUrl).query_id,\n ...this.webViewOptions\n }).then(() => {\n if(this.destroyed) {\n return;\n }\n\n setTimeout(() => {\n if(this.destroyed) {\n return;\n }\n\n this.prolongWebView();\n }, 50e3);\n }, (err: ApiError) => {\n if(this.destroyed) {\n return;\n }\n\n if(err.type === 'QUERY_ID_INVALID') {\n this.forceHide();\n } else {\n console.error('web app prolong error', err);\n }\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport PopupElement from '.';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport {AttachMenuBot} from '../../layer';\nimport ButtonMenuToggle from '../buttonMenuToggle';\nimport WebApp from '../webApp';\n\nexport default class PopupWebApp extends PopupElement {\n private webApp: WebApp;\n\n constructor(options: {\n webViewResultUrl: WebApp['webViewResultUrl'],\n webViewOptions: WebApp['webViewOptions'],\n attachMenuBot?: AttachMenuBot\n }) {\n super('popup-payment popup-payment-verification popup-web-app', {\n closable: true,\n overlayClosable: true,\n body: true,\n footer: true,\n title: true,\n onBackClick: () => this.webApp.onBackClick(),\n isConfirmationNeededOnClose: () => this.webApp.isConfirmationNeededOnClose()\n });\n\n safeAssign(this, options);\n\n this.webApp = new WebApp({\n ...options,\n header: this.header,\n title: this.title,\n body: this.body,\n footer: this.footer,\n forceHide: this.forceHide,\n onBackStatus: (visible) => this.btnCloseAnimatedIcon.classList.toggle('state-back', visible)\n });\n\n const btnMenu = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n buttons: this.webApp.getMenuButtons(),\n direction: 'bottom-left'\n });\n this.title.after(btnMenu);\n\n this.webApp.init(() => {\n this.show();\n });\n }\n\n protected destroy() {\n this.webApp.destroy();\n return super.destroy();\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nexport default function getSelectedNodes() {\n const nodes: Node[] = [];\n const selection = window.getSelection();\n for(let i = 0; i < selection.rangeCount; ++i) {\n const range = selection.getRangeAt(i);\n let {startContainer, endContainer} = range;\n if(endContainer.nodeType !== endContainer.TEXT_NODE) endContainer = endContainer.firstChild;\n\n while(startContainer && startContainer !== endContainer) {\n nodes.push(startContainer.nodeType === endContainer.TEXT_NODE ? startContainer : startContainer.firstChild);\n startContainer = startContainer.nextSibling;\n }\n\n if(nodes[nodes.length - 1] !== endContainer) {\n nodes.push(endContainer);\n }\n }\n\n // * filter null's due to
\n return nodes.filter((node) => !!node);\n}\n\n// export default function getSelectedNodes() {\n// const selection = document.getSelection();\n// const fragment = document.createDocumentFragment();\n// const nodeList: Node[] = [];\n\n// for(let i = 0; i < selection.rangeCount; ++i) {\n// fragment.append(selection.getRangeAt(i).cloneContents());\n// }\n\n// const walker = document.createTreeWalker(fragment);\n// let currentNode = walker.currentNode;\n\n// while(currentNode) {\n// nodeList.push(currentNode);\n// currentNode = walker.nextNode();\n// }\n\n// if(nodeList[0] === fragment) {\n// nodeList.shift();\n// }\n\n// return nodeList;\n// }\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {resolveElements} from '@solid-primitives/refs';\nimport {createEffect, createMemo, createSignal, JSX, on, onCleanup, Ref} from 'solid-js';\nimport {IS_OVERLAY_SCROLL_SUPPORTED} from '../environment/overlayScrollSupport';\nimport IS_TOUCH_SUPPORTED from '../environment/touchSupport';\nimport {IS_MOBILE_SAFARI, IS_SAFARI} from '../environment/userAgent';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport classNames from '../helpers/string/classNames';\nimport useHeavyAnimationCheck from '../hooks/useHeavyAnimationCheck';\n\nconst SCROLL_THROTTLE = /* IS_ANDROID ? 200 : */24;\nconst USE_OWN_SCROLL = !IS_OVERLAY_SCROLL_SUPPORTED;\n\nlet throttleMeasurement: (callback: () => void) => number,\n cancelMeasurement: (id: number) => void;\nif(USE_OWN_SCROLL) {\n throttleMeasurement = (callback) => requestAnimationFrame(callback);\n cancelMeasurement = (id) => cancelAnimationFrame(id);\n} else {\n throttleMeasurement = (callback) => window.setTimeout(callback, SCROLL_THROTTLE);\n cancelMeasurement = (id) => window.clearTimeout(id);\n}\n\nexport default function Scrollable(props: {\n children: JSX.Element,\n ref?: Ref\n class?: string,\n axis?: 'x' | 'y',\n withBorders?: 'both' | 'top' | 'bottom' | 'manual',\n onScrolledTop?: () => void,\n onScrolledBottom?: () => void,\n onScroll?: () => void,\n onScrollOffset?: number\n}) {\n const axis = props.axis ?? 'y';\n const scrollPositionProperty: 'scrollTop' | 'scrollLeft' = axis === 'x' ? 'scrollLeft' : 'scrollTop';\n const scrollSizeProperty: 'scrollHeight' | 'scrollWidth' = axis === 'x' ? 'scrollWidth' : 'scrollHeight';\n const clientSizeProperty: 'clientHeight' | 'clientWidth' = axis === 'x' ? 'clientWidth' : 'clientHeight';\n const offsetSizeProperty: 'offsetHeight' | 'offsetWidth' = axis === 'x' ? 'offsetWidth' : 'offsetHeight';\n const clientAxis: 'clientY' | 'clientX' = axis === 'x' ? 'clientX' : 'clientY';\n\n const scrollPosition = () => ref[scrollPositionProperty];\n const scrollSize = () => ref[scrollSizeProperty];\n const clientSize = () => ref[clientSizeProperty];\n const offsetSize = () => ref[offsetSizeProperty];\n const getDistanceToEnd = () => scrollSize() - Math.round(scrollPosition() + offsetSize());\n\n const onScrollOffset = createMemo(() => props.onScrollOffset ?? 300);\n\n let lastScrollDirection: -1 | 0 | 1 = 0;\n let lastScrollPosition = 0;\n\n let startMousePosition: number;\n let startScrollPosition: number;\n\n let isHeavyAnimationInProgress = false;\n let needCheckAfterAnimation = false;\n\n const [isScrolledToStart, setIsScrolledToStart] = createSignal(true);\n const [isScrolledToEnd, setIsScrolledToEnd] = createSignal(true);\n\n const removeHeavyAnimationListener = useHeavyAnimationCheck(() => {\n isHeavyAnimationInProgress = true;\n\n if(onScrollMeasure) {\n cancelMeasure();\n needCheckAfterAnimation = true;\n }\n }, () => {\n isHeavyAnimationInProgress = false;\n\n if(needCheckAfterAnimation) {\n onScroll();\n needCheckAfterAnimation = false;\n }\n });\n\n onCleanup(removeHeavyAnimationListener);\n\n let onScrollMeasure = 0;\n const onScroll = () => {\n // if(this.debug) {\n // this.log('onScroll call', this.onScrollMeasure);\n // }\n\n // return;\n\n if(isHeavyAnimationInProgress) {\n cancelMeasure();\n needCheckAfterAnimation = true;\n return;\n }\n\n // if(this.onScrollMeasure || ((this.scrollLocked || (!this.onScrolledTop && !this.onScrolledBottom)) && !this.splitUp && !this.onAdditionalScroll)) return;\n if((!props.onScrolledTop && !props.onScrolledBottom)/* && !this.splitUp */ && !onScrollCallbacks().length && !USE_OWN_SCROLL) return;\n if(onScrollMeasure) return;\n onScrollMeasure = throttleMeasurement(() => {\n onScrollMeasure = 0;\n\n const _scrollPosition = scrollPosition();\n lastScrollDirection = lastScrollPosition === _scrollPosition ? 0 : (lastScrollPosition < _scrollPosition ? 1 : -1); // * 1 - bottom, -1 - top\n lastScrollPosition = _scrollPosition;\n\n updateThumb(_scrollPosition);\n\n // lastScrollDirection check is useless here, every callback should decide on its own\n if(true/* && lastScrollDirection !== 0 */) {\n onScrollCallbacks().forEach((callback) => callback());\n }\n\n checkForTriggers();\n });\n };\n\n const cancelMeasure = () => {\n if(onScrollMeasure) {\n cancelMeasurement(onScrollMeasure);\n onScrollMeasure = 0;\n }\n };\n\n const checkForTriggers = () => {\n if(!props.onScrolledTop && !props.onScrolledBottom) return;\n\n // if(this.isHeavyAnimationInProgress) {\n // this.onScroll();\n // return;\n // }\n\n const _scrollSize = scrollSize();\n if(!_scrollSize) { // незачем вызывать триггеры если блок пустой или не виден\n return;\n }\n\n const _scrollPosition = scrollPosition();\n const _clientSize = offsetSize();\n const _onScrollOffset = onScrollOffset();\n const maxScrollPosition = _scrollSize - _clientSize;\n\n // this.log('checkForTriggers:', scrollTop, maxScrollTop);\n\n if(props.onScrolledTop && _scrollPosition <= _onScrollOffset && lastScrollDirection <= 0/* && direction === -1 */) {\n props.onScrolledTop();\n }\n\n if(props.onScrolledBottom && (maxScrollPosition - _scrollPosition) <= _onScrollOffset && lastScrollDirection >= 0/* && direction === 1 */) {\n props.onScrolledBottom();\n }\n };\n\n const checkEnds = () => {\n setIsScrolledToStart(!scrollPosition());\n setIsScrolledToEnd(getDistanceToEnd() <= 1);\n };\n\n const updateThumb = (_scrollPosition = scrollPosition()) => {\n if(!USE_OWN_SCROLL || !thumbRef) {\n return;\n }\n\n const _scrollSize = scrollSize();\n const _clientSize = clientSize();\n const divider = _scrollSize / _clientSize / 0.75;\n const thumbSize = Math.max(20, _clientSize / divider);\n const value = _scrollPosition / (_scrollSize - _clientSize) * _clientSize;\n // const b = (scrollPosition + clientSize) / scrollSize;\n const b = _scrollPosition / (_scrollSize - _clientSize);\n const maxValue = _clientSize - thumbSize;\n if(_clientSize < _scrollSize) {\n thumbRef.style.height = thumbSize + 'px';\n // this.thumb.style.top = `${Math.min(maxValue, value - thumbSize * b)}px`;\n thumbRef.style.transform = `translateY(${Math.min(maxValue, value - thumbSize * b)}px)`;\n } else {\n thumbRef.style.height = '0px';\n }\n };\n\n const onScrollCallbacks = createMemo(() => [props.onScroll, props.withBorders && checkEnds].filter(Boolean));\n\n const onThumbMouseMove = (e: MouseEvent) => {\n cancelEvent(e);\n\n const contentHeight = scrollSize();\n const viewportHeight = clientSize();\n const scrollbarSize = thumbRef.offsetHeight;\n const maxScrollTop = contentHeight - viewportHeight;\n\n const maxScrollbarOffset = viewportHeight - scrollbarSize;\n const deltaY = e[clientAxis] - startMousePosition;\n const scrollAmount = (deltaY / maxScrollbarOffset) * maxScrollTop;\n const newScrollTop = startScrollPosition + scrollAmount;\n\n ref[scrollPositionProperty] = newScrollTop;\n };\n\n const onThumbMouseDown = (e: MouseEvent) => {\n cancelEvent(e);\n startMousePosition = e[clientAxis];\n startScrollPosition = scrollPosition();\n (e.target as HTMLElement).classList.add('is-focused');\n\n window.addEventListener('mousemove', onThumbMouseMove);\n window.addEventListener('mouseup', onThumbMouseUp, {once: true});\n };\n\n const onThumbMouseUp = (e: MouseEvent) => {\n window.removeEventListener('mousemove', onThumbMouseMove);\n thumbRef.classList.remove('is-focused');\n };\n\n const onWheel = (e: WheelEvent) => {\n e.stopPropagation();\n const target = e.target as HTMLElement;\n if(!e.deltaX && target.scrollWidth > target.clientWidth) {\n target.scrollLeft += e.deltaY / 4;\n cancelEvent(e);\n }\n };\n\n const onSizeChange = () => {\n if(USE_OWN_SCROLL && thumbRef) {\n onScroll();\n }\n };\n\n const children = resolveElements(() => props.children);\n\n createEffect(on(children, onSizeChange));\n\n let ref: HTMLDivElement, thumbRef: HTMLDivElement;\n return (\n (ref = _ref, (props.ref as any)?.(_ref))}\n class={classNames(\n 'scrollable',\n `scrollable-${axis}`,\n props.class,\n IS_SAFARI && !IS_MOBILE_SAFARI && 'no-scrollbar',\n ...(props.withBorders ? [\n isScrolledToStart() && 'scrolled-start',\n isScrolledToEnd() && 'scrolled-end',\n axis === 'y' && 'scrollable-y-bordered',\n (props.withBorders === 'top' || props.withBorders === 'both') && 'scrollable-y-bordered-top',\n (props.withBorders === 'bottom' || props.withBorders === 'both') && 'scrollable-y-bordered-bottom'\n ] : [])\n )}\n onScroll={onScroll}\n onWheel={(axis === 'x' && !IS_TOUCH_SUPPORTED && onWheel) || undefined}\n >\n {USE_OWN_SCROLL && axis === 'y' && (\n
\n
\n
\n )}\n {children()}\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {Portal} from 'solid-js/web';\nimport {batch, createContext, createEffect, createRoot, For, onCleanup, onMount, useContext, JSX, createMemo, createSignal, Accessor, untrack, createResource, Resource, on, createReaction} from 'solid-js';\nimport styles from './browser.module.scss';\nimport {ButtonIconTsx} from './buttonIconTsx';\nimport getTextWidth from '../helpers/canvas/getTextWidth';\nimport {FontFull} from '../config/font';\nimport {createStore, reconcile, unwrap} from 'solid-js/store';\nimport untrackActions from '../helpers/solid/untrackActions';\nimport classNames from '../helpers/string/classNames';\nimport Scrollable from './scrollable2';\nimport fastSmoothScroll from '../helpers/fastSmoothScroll';\nimport {IconTsx} from './iconTsx';\nimport {ButtonMenuItemOptionsVerifiable, ButtonMenuSync} from './buttonMenu';\nimport {attachContextMenuListener} from '../helpers/dom/attachContextMenuListener';\nimport ListenerSetter from '../helpers/listenerSetter';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport contextMenuController from '../helpers/contextMenuController';\nimport positionMenu from '../helpers/positionMenu';\nimport copy from '../helpers/object/copy';\nimport {filterButtonMenuItems} from './buttonMenuToggle';\nimport Animated from '../helpers/solid/animations';\nimport WebApp, {WebAppLaunchOptions} from './webApp';\nimport deferredPromise from '../helpers/cancellablePromise';\nimport documentFragmentToNodes from '../helpers/dom/documentFragmentToNodes';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport {i18n} from '../lib/langPack';\nimport {avatarNew} from './avatarNew';\nimport {getMiddleware} from '../helpers/middleware';\nimport MovablePanel from '../helpers/movablePanel';\nimport {MovableState} from './movableElement';\nimport {Ref, resolveElements, resolveFirst} from '@solid-primitives/refs';\nimport Section from './section';\nimport InputSearch from './inputSearch';\nimport rootScope from '../lib/rootScope';\nimport {SimilarPeer} from './chat/similarChannels';\nimport SearchIndex from '../lib/searchIndex';\nimport {useUser} from '../stores/peers';\nimport {User} from '../layer';\nimport getPeerActiveUsernames from '../lib/appManagers/utils/peers/getPeerActiveUsernames';\nimport internalLinkProcessor from '../lib/appManagers/internalLinkProcessor';\nimport {INTERNAL_LINK_TYPE} from '../lib/appManagers/internalLink';\n\ntype BrowserPageProps = {\n title: string, // plain text\n icon: JSX.Element,\n dispose: () => void,\n titleWidth?: number,\n id?: string,\n menuButtons?: ButtonMenuItemOptionsVerifiable[],\n scrollFromPage?: BrowserPageProps,\n content?: JSX.Element,\n cacheKey?: string,\n\n isCatalogue?: boolean,\n\n isConfirmationNeededOnClose?: () => void | Promise,\n needBackButton?: boolean,\n onBackClick?: () => void\n};\n\nfunction BrowserHeaderTipSvg(props: {left?: boolean, right?: boolean}) {\n return (\n \n \n \n );\n}\n\nfunction BrowserHeaderButton(props: Parameters[0]) {\n return (\n \n );\n}\n\nfunction BrowserHeaderTab(props: {\n page: BrowserPageProps,\n ref: Ref,\n openPageMenu: (e: MouseEvent | TouchEvent) => void,\n index: Accessor\n}) {\n const [state, actions] = useContext(BrowserContext);\n const isActive = createMemo(() => !state.collapsed && state.page === props.page);\n const transform = createMemo(() => {\n if(!state.collapsed) {\n return '';\n }\n\n const index = props.index();\n let value = -20 + Math.min(2, index) * -26;\n if(index > 2) {\n value += (index - 2) * -40;\n }\n\n return `translateX(${value}px)`;\n });\n\n return (\n actions.select(props.page)}\n >\n \n {props.page.icon}\n \n \n
\n {documentFragmentToNodes(wrapEmojiText(props.page.title))}\n
\n
\n {\n e.stopPropagation();\n actions.close(props.page);\n }}\n />\n \n );\n}\n\nfunction BrowserHeader(props: {\n}) {\n const [state, actions] = useContext(BrowserContext);\n const needBackButton = createMemo(() => !!state.page.needBackButton);\n const tabMap: Map = new Map();\n\n createEffect(() => {\n const page = state.page;\n const scrollFromPage = state.page?.scrollFromPage;\n if(!scrollFromPage) {\n return;\n }\n\n fastSmoothScroll({\n container: scrollableRef,\n element: tabMap.get(page.id),\n position: 'center',\n axis: 'x',\n forceDuration: 200,\n getNormalSize: ({rect}) => {\n const diff = scrollFromPage.titleWidth - page.titleWidth;\n return rect.width + diff/* + page.titleWidth */;\n }\n });\n });\n\n const openPageMenu = async(e: MouseEvent | TouchEvent) => {\n const target = findUpClassName(e.target, styles.BrowserHeaderTab);\n if(!target) {\n return;\n }\n\n if(e instanceof MouseEvent) e.preventDefault();\n // smth\n if(e instanceof MouseEvent) e.cancelBubble = true;\n\n const page = state.pages.find((page) => tabMap.get(page.id) === target);\n if(!page?.menuButtons) {\n return;\n }\n\n const listenerSetter = new ListenerSetter();\n const buttons = (await filterButtonMenuItems(copy(page.menuButtons))).map((button) => {\n button.options = {listenerSetter};\n return button;\n });\n const element = ButtonMenuSync({\n buttons,\n listenerSetter\n });\n element.classList.add('contextmenu');\n\n document.getElementById('page-chats').append(element);\n\n positionMenu(e, element);\n contextMenuController.openBtnMenu(element, () => {\n setTimeout(() => {\n element.remove();\n listenerSetter.removeAll();\n }, 1e3);\n });\n };\n\n onMount(() => {\n const listenerSetter = new ListenerSetter();\n attachContextMenuListener({\n element: scrollableRef,\n callback: openPageMenu,\n listenerSetter\n });\n\n onCleanup(() => {\n listenerSetter.removeAll();\n });\n });\n\n const collapsedTitle = createMemo(() => {\n const wrapTitles = (pages: BrowserPageProps[]) => pages.map((page) => wrapEmojiText(page.title));\n const pages = state.pages;\n if(pages.length === 1) {\n return i18n('MiniApps.Collapsed.One', wrapTitles([pages[0]]));\n } else if(pages.length === 2) {\n return i18n('MiniApps.Collapsed.Two', wrapTitles(pages.slice(0, 2)));\n } else {\n return i18n('MiniApps.Collapsed.Many', [...wrapTitles([pages[0]]), pages.length - 1]);\n }\n });\n\n let scrollableRef: HTMLDivElement;\n return (\n
\n {\n if(needBackButton()) {\n state.page.onBackClick();\n } else {\n actions.close(state.page);\n }\n }}\n >\n
\n \n \n
\n = 1 ? 16 : 0)}px)`,\n width: state.page.titleWidth + 16 * 2 + 34 + 'px'\n }}\n >\n \n \n
\n \n {(page, index) => {\n return (\n tabMap.set(page.id, el)}\n index={index}\n />\n );\n }}\n \n \n openCatalogueInAppBrowser()}\n >\n \n \n
\n \n \n {collapsedTitle()}\n \n actions.toggleCollapsed()}\n />\n \n );\n}\n\ntype BrowserContextState = {\n pages: BrowserPageProps[],\n index: number,\n page: BrowserPageProps,\n destroyed: boolean,\n collapsed: boolean\n};\ntype BrowserContextActions = {\n add: (page: BrowserPageProps) => void,\n select: (page: BrowserPageProps | number) => void,\n close: (page: BrowserPageProps) => void,\n destroy: () => void,\n toggleCollapsed: () => void,\n replace: (page: BrowserPageProps, originalPage: BrowserPageProps) => void\n};\n\nexport type BrowserContextValue = [\n state: BrowserContextState,\n actions: BrowserContextActions\n];\n\nfunction createBrowserStore(props: {\n pages: BrowserPageProps[]\n}): BrowserContextValue {\n const initialState: BrowserContextState = {\n pages: [],\n index: 0,\n get page() {\n return state.pages[state.index];\n },\n destroyed: false,\n collapsed: false\n };\n\n const [state, setState] = createStore(initialState);\n\n const actions: BrowserContextActions = untrackActions({\n add: (page) => {\n page = makeBrowserPage(page);\n setState('pages', (pages) => {\n return [...pages, page];\n });\n actions.select(state.pages.length - 1);\n },\n select: (page) => {\n let newIndex: number;\n if(typeof(page) === 'number') {\n if(page < 0 || page >= state.pages.length) {\n newIndex = -1;\n } else {\n newIndex = page;\n }\n } else {\n newIndex = state.pages.indexOf(page);\n }\n\n if(newIndex === -1) {\n return;\n }\n\n batch(() => {\n const currentPage = state.page;\n const newPage = state.pages[newIndex];\n setState('index', newIndex);\n setState('pages', newIndex, 'scrollFromPage', currentPage);\n\n queueMicrotask(() => {\n const index = state.pages.indexOf(newPage);\n setState('pages', index, 'scrollFromPage', undefined);\n });\n });\n },\n close: async(page) => {\n const index = state.pages.findIndex((_page) => _page.id === page.id);\n if(index === -1) {\n return;\n }\n\n await page.isConfirmationNeededOnClose?.();\n\n if(state.pages.length === 1) {\n actions.destroy();\n return;\n }\n\n const pages = state.pages.slice();\n pages.splice(index, 1);\n\n let newIndex: number;\n if(index < state.index) {\n newIndex = state.index - 1;\n } else if(index === state.index) {\n newIndex = Math.min(state.index, pages.length - 1);\n }\n\n setState({\n pages,\n ...(newIndex !== undefined && {index: newIndex})\n });\n\n page.dispose();\n },\n destroy: () => {\n if(state.destroyed) {\n return;\n }\n\n setState('destroyed', true);\n },\n toggleCollapsed: () => {\n setState('collapsed', (v) => !v);\n },\n replace: (page, originalPage) => {\n page.id = originalPage.id;\n page = makeBrowserPage(page);\n originalPage.dispose();\n setState('pages', state.pages.findIndex((_page) => _page.id === originalPage.id), reconcile(page));\n }\n });\n\n props.pages.forEach(actions.add);\n setState('index', 0);\n\n onCleanup(() => {\n state.pages.forEach((page) => page.dispose());\n });\n\n return [state, actions];\n}\n\nconst BrowserContext = createContext();\nfunction Browser(props: {\n onExit: () => void\n}) {\n const width = 480;\n const height = 640;\n const aspectRatio = width / height;\n const additionalHeight = 48;\n const minWidth = 328;\n const minHeight = height * (minWidth / width) + additionalHeight;\n\n const [state, actions] = lastContext = useContext(BrowserContext);\n const [movableState, setMovableState] = createSignal({\n width,\n height: height + additionalHeight\n });\n\n onMount(() => {\n const listenerSetter = new ListenerSetter();\n const movablePanel = new MovablePanel({\n listenerSetter,\n movableOptions: {\n minWidth,\n minHeight,\n element: ref,\n verifyTouchTarget: (e, type) => {\n const target = e.target;\n if(type === 'move' && (\n !findUpClassName(target, styles.BrowserHeader) ||\n findUpClassName(target, styles.BrowserHeaderButton) ||\n findUpClassName(target, styles.BrowserHeaderTab)\n )) {\n return false;\n }\n\n return true;\n },\n aspectRatio,\n resetTransition: true\n },\n onResize: (movableState) => {\n if(state.collapsed) {\n return;\n }\n\n setMovableState(movableState);\n },\n previousState: movableState()\n });\n\n createEffect(() => {\n const {movable} = movablePanel;\n const {collapsed} = state;\n const collapsedWidth = 328;\n const collapsedHeight = 48;\n movable.toggleResizable(!collapsed);\n movable.setMinValues(\n collapsed ? collapsedWidth : minWidth,\n collapsed ? collapsedHeight : minHeight\n );\n\n const previousMovableState = untrack(movableState);\n movable.state = collapsed ? {\n ...previousMovableState,\n width: collapsedWidth,\n height: collapsedHeight\n } : {\n ...movable.state,\n width: previousMovableState.width,\n height: previousMovableState.height\n };\n });\n\n onCleanup(() => {\n listenerSetter.removeAll();\n movablePanel.destroy();\n });\n });\n\n let ref: HTMLDivElement;\n const main = (\n
\n \n \n {(page) => {\n return (\n \n {page.content}\n
\n );\n }}\n \n \n );\n\n const animated = (\n \n {!state.destroyed && main}\n \n );\n\n const child = resolveFirst(() => animated);\n createEffect(() => {\n if(!child()) {\n props.onExit();\n }\n });\n\n return (\n \n {animated}\n \n );\n}\n\nfunction makeBrowserPage(props: BrowserPageProps): BrowserPageProps {\n props.titleWidth ??= getTextWidth(props.title, FontFull);\n props.id ??= Math.random().toString(36).slice(2);\n props.menuButtons ??= [];\n props.menuButtons.push({\n icon: 'close',\n text: 'Close',\n onClick: () => {\n lastContext[1].close(props);\n }\n });\n return props;\n}\n\nlet lastContext: BrowserContextValue;\nexport function openInAppBrowser(page?: BrowserPageProps) {\n if(lastContext) {\n lastContext[1].add(page);\n return;\n }\n\n createRoot((dispose) => {\n const pages: BrowserPageProps[] = [page];\n\n const store = createBrowserStore({\n pages: pages.filter(Boolean)\n });\n\n return (\n \n {\n lastContext = undefined;\n dispose();\n }}\n />\n \n );\n });\n}\n\nexport async function openWebAppInAppBrowser(options: WebAppLaunchOptions) {\n if(lastContext && options.cacheKey) {\n const page = lastContext[0].pages.find((page) => page.cacheKey === options.cacheKey);\n if(page) {\n lastContext[1].select(page);\n return;\n }\n }\n\n const deferred = deferredPromise();\n const [needBackButton, setNeedBackButton] = createSignal(false);\n const [destroy, setDestroy] = createSignal(false);\n const webApp = new WebApp({\n ...options,\n header: document.createElement('div'),\n title: document.createElement('div'),\n body: document.createElement('div'),\n footer: document.createElement('div'),\n forceHide: () => setDestroy(true),\n onBackStatus: setNeedBackButton\n });\n\n const title = await webApp.getTitle(true);\n webApp.init(() => deferred);\n\n const middlewareHelper = getMiddleware();\n const avatar = avatarNew({\n peerId: webApp.getPeerId(),\n size: 24,\n middleware: middlewareHelper.get()\n });\n await avatar.readyThumbPromise;\n\n return createRoot((dispose) => {\n const initialState: BrowserPageProps = {\n title,\n icon: avatar.node,\n menuButtons: webApp.getMenuButtons(),\n dispose,\n isConfirmationNeededOnClose: webApp.isConfirmationNeededOnClose,\n content: (\n <>\n {webApp.body}\n {webApp.footer}\n \n ),\n get needBackButton() {\n return needBackButton();\n },\n onBackClick: webApp.onBackClick,\n cacheKey: webApp.cacheKey\n };\n\n onCleanup(() => webApp.destroy());\n\n createEffect(() => {\n if(destroy()) {\n lastContext[1].close(initialState);\n }\n });\n\n queueMicrotask(() => deferred.resolve());\n // const [state, setState] = createStore(initialState);\n const lastState = lastContext?.[0];\n if(lastState && lastState?.page.isCatalogue) {\n lastContext[1].replace(initialState, lastContext[0].page);\n } else {\n openInAppBrowser(initialState);\n }\n });\n}\n\nexport async function openCatalogueInAppBrowser() {\n return createRoot((dispose) => {\n const [folded, setFolded] = createSignal(true);\n const [value, setValue] = createSignal('');\n const targets = new WeakMap;\n const searchIndex = new SearchIndex({ignoreCase: true});\n\n const inputSearch = new InputSearch({\n placeholder: 'MiniApps.Search',\n onChange: (value) => {\n value = value.trim();\n setValue(value);\n },\n debounceTime: 200,\n oldStyle: true\n });\n\n inputSearch.container.classList.add(styles.BrowserCatalogueSearch);\n\n const render = (botIds: BotId[], ready: () => void) => {\n const promises: Promise[] = [];\n const ret = botIds.map((botId) => {\n return (\n targets.set(el, botId)}\n peerId={botId.toPeerId(false)}\n promises={promises}\n avatarSize={64}\n />);\n });\n\n Promise.all(promises).then(ready);\n return ret;\n };\n\n const children = (items: Accessor, folded?: Accessor) => {\n return (\n
{items()}
\n );\n };\n\n const processBotIds = (botIds: BotId[]) => {\n untrack(() => {\n botIds.forEach((botId) => {\n const user = useUser(botId) as User.user;\n searchIndex.indexObjectArray(botId, [user.first_name, user.last_name, ...getPeerActiveUsernames(user)].filter(Boolean));\n });\n });\n\n return botIds;\n };\n\n const search = (\n
\n {\n const query = value();\n return async() => {\n const result = searchIndex.search(query);\n return [...result];\n };\n }}\n render={render}\n >\n {children}\n \n
\n );\n\n const main = (\n
\n {\n return async() => {\n const result = await rootScope.managers.appUsersManager.getTopPeers('bots_app');\n return processBotIds(result.map((user) => user.id.toPeerId(false)));\n };\n }}\n render={render}\n >\n {(items) => {\n const elements = resolveElements(items).toArray;\n const isMoreThanEnough = createMemo(() => elements().length > 7);\n if(!isMoreThanEnough()) {\n setFolded(false);\n }\n\n return (\n setFolded((folded) => !folded)}>\n {i18n(folded() ? 'MiniApps.AppsMore' : 'MiniApps.AppsLess')}\n \n )}\n noShadow\n >\n {children(items, folded)}\n \n );\n }}\n \n {\n let offset = '';\n return async() => {\n const result = await rootScope.managers.appAttachMenuBotsManager.getPopularAppBots(offset, 50);\n offset = result.nextOffset;\n return processBotIds(result.userIds);\n };\n }}\n render={render}\n >\n {(items) => {\n return items() && (\n
\n {children(items)}\n
\n );\n }}\n \n
\n );\n\n const initialState: BrowserPageProps = {\n title: 'Open App',\n icon: IconTsx({icon: 'plus'}),\n dispose,\n content: (\n \n {\n const target = findUpClassName(e.target as HTMLElement, 'similar-channels-channel');\n if(!target) {\n return;\n }\n\n const botId = targets.get(target);\n internalLinkProcessor.processWebAppLink({\n _: INTERNAL_LINK_TYPE.WEB_APP,\n appname: '',\n domain: getPeerActiveUsernames(useUser(botId) as User.user)[0]\n });\n // lastContext[1].close(initialState);\n }}\n >\n {inputSearch.container}\n \n {value() ? search : main}\n \n \n \n ),\n isCatalogue: true\n };\n\n openInAppBrowser(initialState);\n // queueMicrotask(() => deferred.resolve());\n });\n}\n\nfunction Loader(props: {\n loader: () => () => Promise,\n render: (item: T, ready: () => void) => JSX.Element,\n children: (items: Accessor) => JSX.Element,\n onReady?: () => void\n}) {\n const loader = createMemo(props.loader);\n const [ready, setReady] = createSignal(false);\n const [rendered, setRendered] = createSignal(undefined, {equals: false});\n\n const loadMore = (first?: boolean) => {\n const _loader = loader();\n const [result, setResult] = createSignal();\n _loader().then(setResult);\n\n createReaction(() => {\n const onReady = () => {\n setRendered((v) => {\n if(first) {\n return [rendered];\n }\n\n return [...v, rendered];\n });\n\n props.onReady?.();\n setReady(true);\n };\n\n let returned = false;\n const rendered = props.render(result(), () => {\n if(returned) {\n onReady();\n } else {\n returned = true;\n }\n });\n\n if(returned) {\n onReady();\n } else {\n returned = true;\n }\n })(result);\n };\n\n createEffect(on(loader, () => loadMore(true)));\n\n return (\n <>\n {ready() && props.children(rendered)}\n \n );\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {GroupCallId, MyGroupCall} from './appGroupCallsManager';\nimport type GroupCallInstance from '../calls/groupCallInstance';\nimport type CallInstance from '../calls/callInstance';\nimport animationIntersector from '../../components/animationIntersector';\nimport appSidebarLeft, {LEFT_COLUMN_ACTIVE_CLASSNAME} from '../../components/sidebarLeft';\nimport appSidebarRight, {RIGHT_COLUMN_ACTIVE_CLASSNAME} from '../../components/sidebarRight';\nimport mediaSizes, {ScreenSize} from '../../helpers/mediaSizes';\nimport {logger, LogTypes} from '../logger';\nimport rootScope from '../rootScope';\nimport Chat, {ChatSearchKeys, ChatType} from '../../components/chat/chat';\nimport PopupNewMedia, {getCurrentNewMediaPopup} from '../../components/popups/newMedia';\nimport MarkupTooltip from '../../components/chat/markupTooltip';\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport SetTransition from '../../components/singleTransition';\nimport ChatDragAndDrop from '../../components/chat/dragAndDrop';\nimport {doubleRaf} from '../../helpers/schedulers';\nimport useHeavyAnimationCheck, {dispatchHeavyAnimationEvent} from '../../hooks/useHeavyAnimationCheck';\nimport stateStorage from '../stateStorage';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport appNavigationController from '../../components/appNavigationController';\nimport AppPrivateSearchTab from '../../components/sidebarRight/tabs/search';\nimport I18n, {i18n, join, LangPackKey} from '../langPack';\nimport {ChatFull, ChatParticipants, Message, MessageAction, MessageMedia, SendMessageAction, User, Chat as MTChat, UrlAuthResult, WallPaper, Config, AttachMenuBot, Peer, InputChannel, HelpPeerColors, Reaction, Document, MessageEntity, PeerColor} from '../../layer';\nimport PeerTitle from '../../components/peerTitle';\nimport {PopupPeerCheckboxOptions} from '../../components/popups/peer';\nimport blurActiveElement from '../../helpers/dom/blurActiveElement';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport disableTransition from '../../helpers/dom/disableTransition';\nimport placeCaretAtEnd from '../../helpers/dom/placeCaretAtEnd';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport whichChild from '../../helpers/dom/whichChild';\nimport PopupElement from '../../components/popups';\nimport singleInstance, {InstanceDeactivateReason, SingleInstance} from '../mtproto/singleInstance';\nimport {toastNew} from '../../components/toast';\nimport debounce from '../../helpers/schedulers/debounce';\nimport pause from '../../helpers/schedulers/pause';\nimport MEDIA_MIME_TYPES_SUPPORTED from '../../environment/mediaMimeTypesSupport';\nimport IMAGE_MIME_TYPES_SUPPORTED from '../../environment/imageMimeTypesSupport';\nimport {NULL_PEER_ID} from '../mtproto/mtproto_config';\nimport telegramMeWebManager from '../mtproto/telegramMeWebManager';\nimport {ONE_DAY} from '../../helpers/date';\nimport TopbarCall from '../../components/topbarCall';\nimport confirmationPopup from '../../components/confirmationPopup';\nimport IS_GROUP_CALL_SUPPORTED from '../../environment/groupCallSupport';\nimport IS_CALL_SUPPORTED from '../../environment/callSupport';\nimport {CallType} from '../calls/types';\nimport {Modify, SendMessageEmojiInteractionData} from '../../types';\nimport htmlToSpan from '../../helpers/dom/htmlToSpan';\nimport getVisibleRect from '../../helpers/dom/getVisibleRect';\nimport {simulateClickEvent} from '../../helpers/dom/clickEvent';\nimport PopupCall from '../../components/call';\nimport copy from '../../helpers/object/copy';\nimport numberThousandSplitter from '../../helpers/number/numberThousandSplitter';\nimport ChatBackgroundPatternRenderer from '../../components/chat/patternRenderer';\nimport {IS_CHROMIUM, IS_FIREFOX} from '../../environment/userAgent';\nimport compareVersion from '../../helpers/compareVersion';\nimport {AppManagers} from './managers';\nimport uiNotificationsManager from './uiNotificationsManager';\nimport appMediaPlaybackController from '../../components/appMediaPlaybackController';\nimport wrapEmojiText from '../richTextProcessor/wrapEmojiText';\nimport wrapRichText from '../richTextProcessor/wrapRichText';\nimport wrapUrl from '../richTextProcessor/wrapUrl';\nimport getUserStatusString from '../../components/wrappers/getUserStatusString';\nimport getChatMembersString from '../../components/wrappers/getChatMembersString';\nimport {STATE_INIT} from '../../config/state';\nimport CacheStorageController from '../files/cacheStorage';\nimport themeController from '../../helpers/themeController';\nimport overlayCounter from '../../helpers/overlayCounter';\nimport appDialogsManager from './appDialogsManager';\nimport idleController from '../../helpers/idleController';\nimport EventListenerBase from '../../helpers/eventListenerBase';\nimport {AckedResult} from '../mtproto/superMessagePort';\nimport groupCallsController from '../calls/groupCallsController';\nimport callsController from '../calls/callsController';\nimport getFilesFromEvent from '../../helpers/files/getFilesFromEvent';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport appRuntimeManager from './appRuntimeManager';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport {CLICK_EVENT_NAME} from '../../helpers/dom/clickEvent';\nimport wrapPeerTitle from '../../components/wrappers/peerTitle';\nimport NBSP from '../../helpers/string/nbsp';\nimport {makeMediaSize, MediaSize} from '../../helpers/mediaSize';\nimport {MiddleEllipsisElement} from '../../components/middleEllipsis';\nimport parseUriParams from '../../helpers/string/parseUriParams';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\nimport findUpTag from '../../helpers/dom/findUpTag';\nimport {MTAppConfig} from '../mtproto/appConfig';\nimport PopupForward from '../../components/popups/forward';\nimport AppBackgroundTab from '../../components/sidebarLeft/tabs/background';\nimport partition from '../../helpers/array/partition';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport liteMode, {LiteModeKey} from '../../helpers/liteMode';\nimport RLottiePlayer from '../rlottie/rlottiePlayer';\nimport PopupGiftPremium from '../../components/popups/giftPremium';\nimport internalLinkProcessor from './internalLinkProcessor';\nimport {createStoriesViewerWithPeer} from '../../components/stories/viewer';\nimport type {CustomEmojiRendererElement} from '../customEmoji/renderer';\nimport {Middleware} from '../../helpers/middleware';\nimport lottieLoader from '../rlottie/lottieLoader';\nimport wrapStickerAnimation, {emojiAnimationContainer} from '../../components/wrappers/stickerAnimation';\nimport onMediaLoad from '../../helpers/onMediaLoad';\nimport throttle from '../../helpers/schedulers/throttle';\nimport appDownloadManager from './appDownloadManager';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport {findUpAvatar} from '../../components/avatarNew';\nimport focusInput from '../../helpers/dom/focusInput';\nimport safePlay from '../../helpers/dom/safePlay';\nimport {RequestWebViewOptions} from './appAttachMenuBotsManager';\nimport PopupWebApp from '../../components/popups/webApp';\nimport {getPeerColorIndexByPeer, getPeerColorsByPeer, setPeerColors} from './utils/peers/getPeerColorById';\nimport {savedReactionTags} from '../../components/chat/reactions';\nimport {setAppState} from '../../stores/appState';\nimport rtmpCallsController, {RtmpCallInstance} from '../calls/rtmpCallsController';\nimport {AppMediaViewerRtmp} from '../../components/appMediaViewerRtmp';\nimport useProfileColors from '../../hooks/useProfileColors';\nimport {DEFAULT_BACKGROUND_SLUG} from '../../config/app';\nimport blur from '../../helpers/blur';\nimport {wrapSlowModeLeftDuration} from '../../components/wrappers/wrapDuration';\nimport {splitFullMid} from '../../components/chat/bubbles';\nimport getSelectedNodes from '../../helpers/dom/getSelectedNodes';\nimport {setQuizHint} from '../../components/poll';\nimport anchorCallback from '../../helpers/dom/anchorCallback';\nimport PopupPremium from '../../components/popups/premium';\nimport safeWindowOpen from '../../helpers/dom/safeWindowOpen';\nimport {openWebAppInAppBrowser} from '../../components/browser';\nimport PopupBoostsViaGifts from '../../components/popups/boostsViaGifts';\n\nexport type ChatSavedPosition = {\n mids: number[],\n top: number\n};\n\nexport type ChatSetPeerOptions = {\n peerId: PeerId,\n lastMsgId?: number,\n lastMsgPeerId?: PeerId,\n threadId?: number,\n startParam?: string,\n stack?: {peerId: PeerId, mid: number, message?: Message.message, isOut?: boolean},\n commentId?: number,\n type?: ChatType,\n mediaTimestamp?: number,\n text?: string\n entities?: MessageEntity[]\n} & Partial;\n\nexport type ChatSetInnerPeerOptions = Modify;\n\nexport enum APP_TABS {\n CHATLIST,\n CHAT,\n PROFILE\n}\n\nexport class AppImManager extends EventListenerBase<{\n chat_changing: (details: {from: Chat, to: Chat}) => void,\n peer_changed: (chat: Chat) => void,\n peer_changing: (chat: Chat) => void,\n tab_changing: (tabId: number) => void,\n premium_toggle: (premium: boolean) => void\n}> {\n public columnEl = document.getElementById('column-center') as HTMLDivElement;\n public chatsContainer: HTMLElement;\n\n public offline = false;\n public updateStatusInterval = 0;\n\n public log: ReturnType;\n\n public setPeerPromise: Promise = null;\n\n private tabId: APP_TABS;\n\n public chats: Chat[] = [];\n private prevTab: HTMLElement;\n private chatsSelectTabDebounced: () => void;\n\n private backgroundPromises: {[url: string]: MaybePromise};\n\n private topbarCall: TopbarCall;\n\n public lastBackgroundUrl: string;\n\n public managers: AppManagers;\n\n public cacheStorage = new CacheStorageController('cachedFiles');\n public customEmojiSize: MediaSize;\n\n get myId() {\n return rootScope.myId;\n }\n\n get chat(): Chat {\n return this.chats[this.chats.length - 1];\n }\n\n public construct(managers: AppManagers) {\n this.managers = managers;\n internalLinkProcessor.construct(managers);\n\n const {\n apiUpdatesManager\n } = managers;\n apiUpdatesManager.attach(I18n.lastRequestedLangCode);\n\n appMediaPlaybackController.construct(managers);\n uiNotificationsManager.construct(managers);\n uiNotificationsManager.start();\n\n this.log = logger('IM', LogTypes.Log | LogTypes.Warn | LogTypes.Debug | LogTypes.Error);\n\n this.backgroundPromises = {};\n STATE_INIT.settings.themes.forEach((theme) => {\n const themeSettings = theme.settings;\n if(!themeSettings) {\n return;\n }\n\n const {wallpaper} = themeSettings;\n const slug = (wallpaper as WallPaper.wallPaper).slug;\n if(!slug) {\n return;\n }\n\n const url = 'assets/img/' + slug + '.svg' + (IS_FIREFOX ? '?1' : '');\n this.setBackgroundUrlToCache({slug, url})\n });\n\n this.selectTab(APP_TABS.CHATLIST);\n\n idleController.addEventListener('change', (idle) => {\n this.offline = idle;\n this.updateStatus();\n if(idle) {\n clearInterval(this.updateStatusInterval);\n } else {\n this.updateStatusInterval = window.setInterval(() => this.updateStatus(), 50e3);\n }\n });\n\n this.chatsContainer = document.createElement('div');\n this.chatsContainer.classList.add('chats-container', 'tabs-container');\n this.chatsContainer.dataset.animation = 'navigation';\n\n this.appendEmojiAnimationContainer(mediaSizes.activeScreen);\n\n this.columnEl.append(this.chatsContainer);\n\n this.createNewChat();\n this.chatsSelectTab(this.chat.container);\n\n appNavigationController.onHashChange = this.onHashChange;\n // window.addEventListener('hashchange', this.onHashChange);\n\n this.setSettings();\n rootScope.addEventListener('settings_updated', this.setSettings);\n\n const onPremiumToggle = (isPremium: boolean) => {\n if(document.body.classList.contains('is-premium') === isPremium) {\n return;\n }\n\n document.body.classList.toggle('is-premium', isPremium);\n this.dispatchEvent('premium_toggle', isPremium);\n };\n rootScope.addEventListener('premium_toggle', onPremiumToggle);\n onPremiumToggle(rootScope.premium);\n this.managers.rootScope.getPremium().then(onPremiumToggle);\n\n useHeavyAnimationCheck(() => {\n animationIntersector.setOnlyOnePlayableGroup('lock');\n animationIntersector.checkAnimations2(true);\n }, () => {\n animationIntersector.setOnlyOnePlayableGroup();\n animationIntersector.checkAnimations2(false);\n });\n\n themeController.AppBackgroundTab = AppBackgroundTab;\n\n if(IS_FIREFOX && apiManagerProxy.oldVersion && compareVersion(apiManagerProxy.oldVersion, '1.4.3') === -1) {\n this.deleteFilesIterative((response) => {\n return response.headers.get('Content-Type') === 'image/svg+xml';\n }).then(() => {\n this.applyCurrentTheme({noSetTheme: true});\n });\n } else {\n this.applyCurrentTheme({noSetTheme: true});\n }\n\n // * fix simultaneous opened both sidebars, can happen when floating sidebar is opened with left sidebar\n mediaSizes.addEventListener('changeScreen', (from, to) => {\n if(document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME) &&\n document.body.classList.contains(RIGHT_COLUMN_ACTIVE_CLASSNAME)) {\n appSidebarRight.toggleSidebar(false);\n }\n\n this.appendEmojiAnimationContainer(to);\n });\n\n mediaSizes.addEventListener('resize', () => {\n // const perf = performance.now();\n const rect = this.chatsContainer.getBoundingClientRect();\n ChatBackgroundPatternRenderer.resizeInstances(rect.width, rect.height).then(() => {\n // this.log.warn('resize bg time:', performance.now() - perf);\n // for(const chat of this.chats) {\n // if(chat.renderDarkPattern) {\n // chat.renderDarkPattern();\n // }\n // }\n });\n });\n\n const onPeerChanging = (chat: Chat) => {\n this.saveChatPosition(chat);\n };\n\n const onPeerChanged = () => {\n this.addEventListener('peer_changing', onPeerChanging, {once: true});\n };\n\n this.addEventListener('peer_changed', onPeerChanged);\n\n rootScope.addEventListener('theme_changed', () => {\n this.applyCurrentTheme({\n broadcastEvent: true,\n noSetTheme: true,\n skipAnimation: true\n });\n });\n\n rootScope.addEventListener('choosing_sticker', (choosing) => {\n this.setChoosingStickerTyping(!choosing);\n });\n\n rootScope.addEventListener('peer_title_edit', ({peerId, threadId}) => {\n if(this.chat?.peerId === peerId && !threadId && this.tabId !== undefined) {\n this.overrideHash(peerId);\n }\n });\n\n rootScope.addEventListener('peer_typings', ({peerId, typings}) => {\n const chat = this.chat;\n if(\n !chat ||\n chat.peerId !== peerId ||\n overlayCounter.isOverlayActive || (\n mediaSizes.activeScreen === ScreenSize.mobile &&\n this.tabId !== APP_TABS.CHAT\n )\n ) {\n return;\n }\n\n const typing = typings.find((typing) => typing.action._ === 'sendMessageEmojiInteraction');\n if(typing?.action?._ === 'sendMessageEmojiInteraction') {\n const action = typing.action;\n const bubble = chat.bubbles.getBubble(peerId, typing.action.msg_id);\n if(bubble && bubble.classList.contains('emoji-big') && getVisibleRect(bubble, chat.bubbles.scrollable.container)) {\n const stickerWrapper: HTMLElement = bubble.querySelector('.media-sticker-wrapper:not(.bubble-hover-reaction-sticker):not(.reaction-sticker)');\n\n const data: SendMessageEmojiInteractionData = JSON.parse(action.interaction.data);\n data.a.forEach((a) => {\n setTimeout(() => {\n simulateClickEvent(stickerWrapper);\n }, a.t * 1000);\n });\n\n this.managers.appMessagesManager.setTyping(peerId, {\n _: 'sendMessageEmojiInteractionSeen',\n emoticon: action.emoticon\n });\n }\n }\n });\n\n rootScope.addEventListener('message_error', ({peerId, error}) => {\n if(error.type.includes('SLOWMODE_WAIT')) {\n const time = +error.type.split('_').pop();\n confirmationPopup({\n titleLangKey: 'Slowmode',\n peerId,\n descriptionLangKey: 'SlowModeHint',\n descriptionLangArgs: [wrapSlowModeLeftDuration(time)],\n button: {\n langKey: 'OK',\n isCancel: true\n }\n });\n }\n });\n\n rootScope.addEventListener('file_speed_limited', ({increaseTimes, isUpload}) => {\n const {hide} = setQuizHint({\n icon: 'premium_speed',\n title: i18n(isUpload ? 'UploadSpeedLimited' : 'DownloadSpeedLimited'),\n textElement: i18n(isUpload ? 'Chat.UploadLimit.Text' : 'Chat.DownloadLimit.Text', [\n anchorCallback(() => {\n hide();\n PopupPremium.show({feature: 'faster_download'});\n }),\n increaseTimes\n ]),\n appendTo: this.chat.bubbles.container,\n from: 'top',\n duration: 10000\n });\n });\n\n const onInstanceDeactivated = (reason: InstanceDeactivateReason) => {\n const isUpdated = reason === 'version';\n const popup = PopupElement.createPopup(PopupElement, 'popup-instance-deactivated', {overlayClosable: true});\n const c = document.createElement('div');\n c.classList.add('instance-deactivated-container');\n (popup as any).container.replaceWith(c);\n\n const header = document.createElement('div');\n header.classList.add('header');\n header.append(i18n(isUpdated ? 'Deactivated.Version.Title' : 'Deactivated.Title'));\n\n const subtitle = document.createElement('div');\n subtitle.classList.add('subtitle');\n subtitle.append(i18n(isUpdated ? 'Deactivated.Version.Subtitle' : 'Deactivated.Subtitle'));\n\n c.append(header, subtitle);\n\n document.body.classList.add('deactivated');\n\n const onClose = isUpdated ? () => {\n appRuntimeManager.reload();\n } : () => {\n document.body.classList.add('deactivated-backwards');\n\n singleInstance.activateInstance();\n\n setTimeout(() => {\n document.body.classList.remove('deactivated', 'deactivated-backwards');\n }, 333);\n };\n\n popup.addEventListener('close', onClose);\n popup.show();\n };\n\n singleInstance.addEventListener('deactivated', onInstanceDeactivated);\n if(singleInstance.deactivatedReason) {\n onInstanceDeactivated(singleInstance.deactivatedReason);\n }\n\n // remove scroll listener when setting chat to tray\n this.addEventListener('chat_changing', ({to}) => {\n this.toggleChatGradientAnimation(to);\n });\n\n rootScope.addEventListener('service_notification', (update) => {\n confirmationPopup({\n button: {langKey: 'OK', isCancel: true},\n description: wrapRichText(update.message)\n });\n });\n\n rootScope.addEventListener('payment_sent', async({peerId, mid, receiptMessage}) => {\n const message = await this.managers.appMessagesManager.getMessageByPeer(peerId, mid);\n if(!message) {\n return;\n }\n\n const action = receiptMessage.action as MessageAction.messageActionPaymentSent;\n toastNew({\n langPackKey: 'PaymentInfoHint',\n langPackArguments: [\n paymentsWrapCurrencyAmount(action.total_amount, action.currency),\n wrapEmojiText(((message as Message.message).media as MessageMedia.messageMediaInvoice).title)\n ]\n });\n });\n\n (window as any).onSpoilerClick = (e: MouseEvent) => {\n const spoiler = findUpClassName(e.target, 'spoiler');\n const parentElement = findUpClassName(spoiler, 'spoilers-container') || spoiler.parentElement;\n\n const className = 'is-spoiler-visible';\n const isVisible = parentElement.classList.contains(className);\n if(!isVisible) {\n cancelEvent(e);\n\n if(CLICK_EVENT_NAME !== 'click') {\n window.addEventListener('click', cancelEvent, {capture: true, once: true});\n }\n }\n\n const duration = 400 / 2;\n const showDuration = 5000;\n const useRafs = !isVisible ? 2 : 0;\n if(useRafs) {\n parentElement.classList.add('will-change');\n }\n\n const spoilerTimeout = parentElement.dataset.spoilerTimeout;\n if(spoilerTimeout !== null) {\n clearTimeout(+spoilerTimeout);\n delete parentElement.dataset.spoilerTimeout;\n }\n\n SetTransition({\n element: parentElement,\n className,\n forwards: true,\n duration,\n onTransitionEnd: () => {\n parentElement.dataset.spoilerTimeout = '' + window.setTimeout(() => {\n SetTransition({\n element: parentElement,\n className,\n forwards: false,\n duration,\n onTransitionEnd: () => {\n parentElement.classList.remove('will-change');\n delete parentElement.dataset.spoilerTimeout;\n }\n });\n }, showDuration);\n },\n useRafs\n });\n };\n\n document.addEventListener('mousemove', (e) => {\n const mediaStickerWrapper = findUpClassName(e.target, 'media-sticker-wrapper');\n if(!mediaStickerWrapper ||\n mediaStickerWrapper.classList.contains('custom-emoji') ||\n findUpClassName(e.target, 'emoji-big')) {\n return;\n }\n\n const animations = animationIntersector.getAnimations(mediaStickerWrapper);\n animations?.forEach((animationItem) => {\n const {liteModeKey, animation} = animationItem;\n if(!liteModeKey || !animation?.paused || liteMode.isAvailable(liteModeKey)) {\n return;\n }\n\n if(animation instanceof RLottiePlayer) {\n animation.playOrRestart();\n } else {\n animation.play();\n }\n });\n });\n\n rootScope.addEventListener('sticker_updated', ({type, faved}) => {\n if(type === 'faved') {\n toastNew({\n langPackKey: faved ? 'AddedToFavorites' : 'RemovedFromFavorites'\n });\n } else if(!faved) {\n toastNew({\n langPackKey: 'RemovedFromRecent'\n });\n }\n });\n\n rootScope.addEventListener('gif_updated', ({saved}) => {\n toastNew({langPackKey: saved ? 'GifSavedHint' : 'RemovedGIFFromFavorites'});\n });\n\n apiManagerProxy.addEventListener('notificationBuild', async(options) => {\n const isForum = await this.managers.appPeersManager.isForum(options.message.peerId);\n const threadId = getMessageThreadId(options.message, isForum);\n if(this.chat.peerId === options.message.peerId && this.chat.threadId === threadId && !idleController.isIdle) {\n return;\n }\n\n uiNotificationsManager.buildNotificationQueue(options);\n });\n\n this.addEventListener('peer_changed', async({peerId}) => {\n document.body.classList.toggle('has-chat', !!peerId);\n\n emojiAnimationContainer.textContent = '';\n\n this.overrideHash(peerId);\n\n apiManagerProxy.updateTabState('chatPeerIds', this.chats.map((chat) => chat.peerId).filter(Boolean));\n });\n\n // stateStorage.get('chatPositions').then((c) => {\n stateStorage.setToCache('chatPositions', /* c || */{});\n // });\n\n if(IS_CALL_SUPPORTED || IS_GROUP_CALL_SUPPORTED) {\n this.topbarCall = new TopbarCall(managers);\n }\n\n if(IS_CALL_SUPPORTED) {\n callsController.addEventListener('instance', ({instance/* , hasCurrent */}) => {\n // if(hasCurrent) {\n // return;\n // }\n\n const popup = PopupElement.createPopup(PopupCall, instance);\n\n instance.addEventListener('acceptCallOverride', () => {\n return this.discardCurrentCall(instance.interlocutorUserId.toPeerId(), 'Call', undefined, instance)\n .then(() => {\n callsController.dispatchEvent('accepting', instance);\n return true;\n })\n .catch(() => false);\n });\n\n popup.addEventListener('close', () => {\n const currentCall = callsController.currentCall;\n if(currentCall && currentCall !== instance && !instance.wasTryingToJoin) {\n instance.hangUp('phoneCallDiscardReasonBusy');\n }\n }, {once: true});\n\n popup.show();\n });\n\n callsController.addEventListener('incompatible', async(userId) => {\n toastNew({\n langPackKey: 'VoipPeerIncompatible',\n langPackArguments: [\n await wrapPeerTitle({peerId: userId.toPeerId()})\n ]\n });\n });\n }\n\n // ! do not remove this line\n // ! instance can be deactivated before the UI starts, because it waits in background for RAF that is delayed\n singleInstance.activateInstance();\n\n const setAuthorized = () => {\n telegramMeWebManager.setAuthorized(true);\n };\n\n // ! THANKS TO CHROMIUM DEVELOPERS FOR THIS BUG\n // ! https://issues.chromium.org/issues/328755781\n if(IS_CHROMIUM) document.addEventListener('visibilitychange', () => {\n if(document.hidden) {\n return;\n }\n\n const canvases = Array.from(document.querySelectorAll('canvas')) as HTMLCanvasElement[];\n canvases.forEach((canvas) => {\n const context = canvas.getContext('2d');\n if(!context) {\n return;\n }\n\n const oldFillStyle = context.fillStyle;\n context.fillStyle = 'transparent';\n context.fillRect(0, 0, 1, 1);\n context.fillStyle = oldFillStyle;\n });\n });\n\n setInterval(setAuthorized, ONE_DAY);\n setAuthorized();\n\n this.managers.appReactionsManager.getSavedReactionTags().then((tags) => {\n savedReactionTags.splice(0, savedReactionTags.length, ...tags);\n });\n\n this.onHashChange(true);\n this.attachKeydownListener();\n this.attachCopyListener();\n this.handleAutologinDomains();\n this.handlePeerColors();\n this.checkForShare();\n this.init();\n\n // PopupElement.createPopup(PopupBoostsViaGifts, -5000866300);\n }\n\n private checkForShare() {\n const share = apiManagerProxy.share;\n if(share) {\n apiManagerProxy.share = undefined;\n PopupElement.createPopup(PopupForward, undefined, async(peerId, threadId) => {\n await this.setPeer({peerId, threadId});\n if(share.files?.length) {\n const foundMedia = share.files.some((file) => MEDIA_MIME_TYPES_SUPPORTED.has(file.type));\n PopupElement.createPopup(PopupNewMedia, this.chat, share.files, foundMedia ? 'media' : 'document');\n } else {\n this.managers.appMessagesManager.sendText({peerId, text: share.text});\n }\n });\n }\n }\n\n public async confirmBotWebViewInner({\n botId,\n requestWriteAccess,\n showDisclaimer\n }: Parameters[0]) {\n const peerId = botId.toPeerId();\n if(showDisclaimer) {\n const checkbox: Parameters[0]['checkbox'] = {\n text: 'WebApp.Disclaimer.Check',\n textArgs: [wrapRichText(I18n.format('WebAppDisclaimerUrl', true))]\n };\n\n return confirmationPopup({\n titleLangKey: 'TermsOfUse',\n descriptionLangKey: 'BotWebAppDisclaimerSubtitle',\n checkbox,\n button: {\n langKey: 'Continue',\n onlyWithCheckbox: checkbox\n }\n });\n }\n\n return confirmationPopup({\n title: await wrapPeerTitle({peerId}),\n descriptionLangKey: 'BotWebViewStartPermission',\n checkbox: requestWriteAccess ? {\n text: 'OpenUrlOption2',\n textArgs: [await wrapPeerTitle({peerId})],\n checked: true\n } : undefined,\n button: {\n langKey: 'BotWebAppInstantViewOpen'\n },\n peerId\n });\n }\n\n public async pushBotIdAsConfirmed(botId: BotId) {\n const state = await apiManagerProxy.getState();\n state.confirmedWebViews.push(botId);\n await this.managers.appStateManager.pushToState('confirmedWebViews', state.confirmedWebViews);\n }\n\n public async confirmBotWebView(options: {\n botId: BotId,\n requestWriteAccess?: boolean,\n ignoreConfirmedState?: boolean,\n showDisclaimer?: boolean\n }): Promise {\n const state = await apiManagerProxy.getState();\n if(options.ignoreConfirmedState || options.showDisclaimer || !state.confirmedWebViews.includes(options.botId)) {\n const haveWriteAccess = await this.confirmBotWebViewInner(options);\n await this.pushBotIdAsConfirmed(options.botId);\n return haveWriteAccess;\n }\n }\n\n // public async requestBotAttachPermission(botId: BotId, requestWriteAccess?: boolean) {\n // const peerId = botId.toPeerId();\n // return confirmationPopup({\n // button: {\n // langKey: 'Add'\n // },\n // descriptionLangKey: 'BotRequestAttachPermission',\n // descriptionLangArgs: [await wrapPeerTitle({peerId})],\n // checkbox: requestWriteAccess ? {\n // text: 'OpenUrlOption2',\n // textArgs: [await wrapPeerTitle({peerId})],\n // checked: true\n // } : undefined,\n // peerId,\n // titleLangKey: 'AddBot'\n // });\n // }\n\n public async toggleBotInAttachMenu(\n botId: BotId,\n enable: boolean,\n attachMenuBot?: AttachMenuBot\n ) {\n attachMenuBot ??= await this.managers.appAttachMenuBotsManager.getAttachMenuBot(botId);\n\n if(!!attachMenuBot.pFlags.inactive === !enable) {\n return attachMenuBot;\n }\n\n if(attachMenuBot.pFlags.inactive) {\n // const haveWriteAccess = await this.requestBotAttachPermission(botId, attachMenuBot.pFlags.request_write_access);\n await this.confirmBotWebViewInner({botId, showDisclaimer: true});\n await this.pushBotIdAsConfirmed(botId);\n const haveWriteAccess = true;\n\n await this.managers.appAttachMenuBotsManager.toggleBotInAttachMenu(botId, true, haveWriteAccess);\n // installed\n delete attachMenuBot.pFlags.inactive;\n\n toastNew({\n langPackKey: attachMenuBot.pFlags.show_in_attach_menu && attachMenuBot.pFlags.show_in_side_menu ?\n 'BotAttachMenuShortcatAddedAttachAndSide' : (\n attachMenuBot.pFlags.show_in_attach_menu ?\n 'BotAttachMenuShortcatAddedAttach' :\n 'BotAttachMenuShortcatAddedSide'\n ),\n langPackArguments: [wrapEmojiText(attachMenuBot.short_name)]\n });\n } else {\n await this.managers.appAttachMenuBotsManager.toggleBotInAttachMenu(botId, false);\n attachMenuBot.pFlags.inactive = true;\n\n toastNew({\n langPackKey: attachMenuBot.pFlags.show_in_attach_menu && attachMenuBot.pFlags.show_in_side_menu ?\n 'WebApp.AttachRemove.SuccessAll' : (\n attachMenuBot.pFlags.show_in_attach_menu ?\n 'WebApp.AttachRemove.Success' :\n 'WebApp.AttachRemove.SuccessSide'\n ),\n langPackArguments: [wrapEmojiText(attachMenuBot.short_name)]\n });\n }\n\n return attachMenuBot;\n }\n\n public async openWebApp(options: Partial) {\n options.botId ??= options.attachMenuBot?.bot_id;\n options.themeParams ??= {\n _: 'dataJSON',\n data: JSON.stringify(themeController.getThemeParamsForWebView())\n };\n\n if(\n !options.attachMenuBot/* &&\n (options.fromAttachMenu || options.fromSideMenu) */\n ) {\n try {\n options.attachMenuBot = await this.managers.appAttachMenuBotsManager.getAttachMenuBot(options.botId);\n } catch(err) {}\n }\n\n if(!options.noConfirmation) {\n const attachMenuBot = options.attachMenuBot;\n let needDisclaimer: boolean;\n if(options.fromSideMenu) {\n if(attachMenuBot?.pFlags?.side_menu_disclaimer_needed) {\n needDisclaimer = true;\n } else {\n await this.pushBotIdAsConfirmed(options.botId);\n }\n } else {\n const user = apiManagerProxy.getUser(options.botId);\n needDisclaimer = user.pFlags.bot_attach_menu && attachMenuBot?.pFlags?.inactive;\n }\n\n if(needDisclaimer) {\n await this.toggleBotInAttachMenu(options.botId, true, attachMenuBot);\n } else {\n await this.confirmBotWebView({\n botId: options.botId\n });\n }\n }\n\n try {\n const cacheKeyArr = [options.botId, options.startParam];\n if(options.fromBotMenu || options.fromSideMenu || options.main) {\n cacheKeyArr.push('main');\n }\n\n const cacheKey = cacheKeyArr.join('-');\n\n const webViewResultUrl = await this.managers.appAttachMenuBotsManager.requestWebView(options as RequestWebViewOptions);\n const webAppOptions: Parameters[0] = {\n webViewResultUrl,\n webViewOptions: options as RequestWebViewOptions,\n attachMenuBot: options.attachMenuBot,\n cacheKey\n };\n if(IS_TOUCH_SUPPORTED) {\n PopupElement.createPopup(PopupWebApp, webAppOptions);\n } else {\n openWebAppInAppBrowser(webAppOptions);\n }\n } catch(err) {\n if((err as ApiError).type === 'PEER_ID_INVALID' && options.attachMenuBot) {\n toastNew({\n langPackKey: 'BotAlreadyAddedToAttachMenu'\n });\n }\n }\n }\n\n public handleUrlAuth(options: {\n peerId?: PeerId,\n mid?: number,\n buttonId?: number,\n url: string\n }) {\n const {peerId, mid, buttonId, url} = options;\n\n const openWindow = (url: string) => {\n window.open(url, '_blank');\n };\n\n const onUrlAuthResultAccepted = (urlAuthResult: UrlAuthResult.urlAuthResultAccepted) => {\n openWindow(urlAuthResult.url);\n };\n\n const onUrlAuthResult = async(urlAuthResult: UrlAuthResult): Promise => {\n if(urlAuthResult._ === 'urlAuthResultRequest') {\n const b = document.createElement('b');\n b.append(urlAuthResult.domain);\n const peerTitle = await wrapPeerTitle({peerId: rootScope.myId});\n const botPeerTitle = await wrapPeerTitle({peerId: urlAuthResult.bot.id.toPeerId()});\n\n const logInCheckbox: PopupPeerCheckboxOptions = {\n text: 'OpenUrlOption1',\n textArgs: [b.cloneNode(true), peerTitle],\n checked: true\n };\n\n const allowMessagesCheckbox: PopupPeerCheckboxOptions = urlAuthResult.pFlags.request_write_access ? {\n text: 'OpenUrlOption2',\n textArgs: [botPeerTitle],\n checked: true\n } : undefined;\n\n const checkboxes: PopupPeerCheckboxOptions[] = [\n logInCheckbox,\n allowMessagesCheckbox\n ];\n\n const confirmationPromise = confirmationPopup({\n titleLangKey: 'OpenUrlTitle',\n button: {\n langKey: 'Open'\n },\n descriptionLangKey: 'OpenUrlAlert2',\n descriptionLangArgs: [b],\n checkboxes: checkboxes.filter(Boolean)\n });\n\n if(allowMessagesCheckbox) {\n logInCheckbox.checkboxField.input.addEventListener('change', () => {\n const disabled = !logInCheckbox.checkboxField.checked;\n allowMessagesCheckbox.checkboxField.toggleDisability(disabled);\n\n if(disabled) {\n allowMessagesCheckbox.checkboxField.checked = false;\n }\n });\n }\n\n const [logInChecked, allowMessagesChecked] = await confirmationPromise;\n\n if(!logInChecked) {\n openWindow(url);\n return;\n }\n\n const result = await this.managers.appSeamlessLoginManager.acceptUrlAuth(\n url,\n peerId,\n mid,\n buttonId,\n allowMessagesChecked\n );\n\n return onUrlAuthResult(result);\n } else if(urlAuthResult._ === 'urlAuthResultAccepted') {\n onUrlAuthResultAccepted(urlAuthResult);\n } else {\n openWindow(url);\n }\n };\n\n return this.managers.appSeamlessLoginManager.requestUrlAuth(\n url,\n peerId,\n mid,\n buttonId\n ).then((urlAuthResult) => {\n onUrlAuthResult(urlAuthResult);\n });\n }\n\n private handleAutologinDomains() {\n let appConfig: MTAppConfig, config: Config.config;\n rootScope.addEventListener('app_config', (_appConfig) => appConfig = _appConfig);\n rootScope.addEventListener('config', (_config) => config = _config);\n this.managers.apiManager.getAppConfig().then((_appConfig) => appConfig = _appConfig);\n this.managers.apiManager.getConfig().then((_config) => config = _config);\n\n const onAuthAnchorClick = (element: HTMLAnchorElement) => {\n if(!appConfig) {\n return;\n }\n\n const url = new URL(element.href);\n if(appConfig.url_auth_domains?.includes(url.hostname)) {\n this.handleUrlAuth({url: element.href});\n cancelEvent();\n return;\n }\n\n const autologinToken = config.autologin_token;\n if(!autologinToken || !appConfig.autologin_domains) {\n return;\n }\n\n const originalUrl = element.dataset.originalUrl ??= element.href;\n if(appConfig.autologin_domains.includes(url.hostname)) {\n url.searchParams.set('autologin_token', autologinToken);\n element.href = url.toString();\n\n setTimeout(() => {\n element.href = originalUrl;\n delete element.dataset.originalUrl;\n }, 0);\n }\n };\n\n const onSponsoredAnchorClick = (element: HTMLAnchorElement) => {\n const bubble = findUpClassName(element, 'bubble');\n if(!bubble) {\n return;\n }\n\n const message = (bubble as any).message as Message.message;\n this.clickIfSponsoredMessage(message);\n };\n\n document.addEventListener('click', async(e) => {\n const anchor = findUpTag(e.target as HTMLElement, 'A') as HTMLAnchorElement;\n if(anchor?.href) {\n onAuthAnchorClick(anchor);\n }\n\n if(anchor) {\n onSponsoredAnchorClick(anchor);\n }\n\n const avatar = findUpAvatar(e.target);\n if(avatar && avatar.classList.contains('has-stories') && !findUpClassName(e.target, 'stories-list')) {\n this.openStoriesFromAvatar(avatar);\n }\n });\n\n // addAnchorListener({\n // name: 'handleUrlClick',\n // callback: (_, element) => {\n // onAnchorClick(element);\n // },\n // noCancelEvent: true,\n // noPathnameParams: true,\n // noUriParams: true\n // });\n }\n\n private handlePeerColors() {\n let lastHelpPeerColors: HelpPeerColors.helpPeerColors;\n const onHelpPeerColors = (helpPeerColors: HelpPeerColors.helpPeerColors = lastHelpPeerColors) => {\n const user = apiManagerProxy.getUser(rootScope.myId.toUserId());\n setPeerColors(helpPeerColors.colors, user);\n lastHelpPeerColors = helpPeerColors;\n };\n rootScope.addEventListener('theme_changed', () => onHelpPeerColors());\n this.managers.apiManager.getPeerColors().then(onHelpPeerColors);\n\n const [_, setProfileColors] = useProfileColors();\n this.managers.apiManager.getPeerProfileColors().then((helpPeerColors) => {\n setProfileColors(helpPeerColors.colors);\n });\n }\n\n public clickIfSponsoredMessage(message: Message.message) {\n const sponsoredMessage = message?.sponsoredMessage;\n if(!sponsoredMessage) {\n return;\n }\n\n this.managers.appChatsManager.clickSponsoredMessage(message.peerId.toChatId(), sponsoredMessage.random_id);\n }\n\n public async openStoriesFromAvatar(avatar: HTMLElement) {\n const storyId = +avatar.dataset.storyId;\n createStoriesViewerWithPeer({\n target: () => avatar,\n peerId: avatar.dataset.peerId.toPeerId(),\n id: storyId || undefined\n });\n }\n\n public getStackFromElement(element: HTMLElement): ChatSetPeerOptions['stack'] {\n const possibleBubble = findUpClassName(element, 'bubble');\n const chatContainer = possibleBubble && findUpClassName(possibleBubble, 'chat');\n const chat = chatContainer && this.chats.find((chat) => chat.container === chatContainer);\n const peerId = chat?.peerId;\n const mid = possibleBubble && +possibleBubble.dataset.mid;\n const message: Message.message = (possibleBubble as any)?.message || (peerId && apiManagerProxy.getMessageByPeer(peerId, mid))\n return possibleBubble ? {\n peerId,\n mid,\n message,\n isOut: message ? !!message.pFlags.out : undefined\n } : undefined;\n }\n\n private deleteFilesIterative(callback: (response: Response) => boolean) {\n return this.cacheStorage.timeoutOperation((cache) => {\n const perf = performance.now();\n return cache.keys().then((requests) => {\n const promises = requests.map((request) => {\n return cache.match(request).then((response) => {\n return callback(response);\n });\n });\n\n return Promise.all(promises).then((values) => {\n values.map((isBad, idx) => {\n if(!isBad) {\n return;\n }\n\n const request = requests[idx];\n return cache.delete(request);\n });\n\n return Promise.all(values.filter(Boolean));\n });\n }).then(() => {\n this.log('deleted files', performance.now() - perf);\n });\n });\n }\n\n private toggleChatGradientAnimation(activatingChat: Chat) {\n // this.chats.forEach((chat) => {\n // if(chat.gradientRenderer) {\n // chat.gradientRenderer.scrollAnimate(liteMode.isAvailable('animations') && chat === activatingChat);\n // }\n // });\n }\n\n private appendEmojiAnimationContainer(screen: ScreenSize) {\n const appendTo = screen === ScreenSize.mobile ? this.columnEl : document.body;\n if(emojiAnimationContainer.parentElement !== appendTo) {\n appendTo.append(emojiAnimationContainer)\n }\n }\n\n private attachKeydownListener() {\n const IGNORE_KEYS = new Set(['PageUp', 'PageDown', 'Meta', 'Control']);\n const onKeyDown = (e: KeyboardEvent) => {\n const key = e.key;\n const isSelectionCollapsed = document.getSelection().isCollapsed;\n if(overlayCounter.isOverlayActive || IGNORE_KEYS.has(key)) return;\n\n const target = e.target as HTMLElement;\n\n const isTargetAnInput = (target.tagName === 'INPUT' && !['checkbox', 'radio'].includes((target as HTMLInputElement).type)) || target.isContentEditable;\n\n // if(target.tagName === 'INPUT') return;\n\n // this.log('onkeydown', e, document.activeElement);\n\n const chat = this.chat;\n\n if((key.startsWith('Arrow') || (e.shiftKey && key === 'Shift')) && !isSelectionCollapsed) {\n return;\n } else if(e.code === 'KeyC' && (e.ctrlKey || e.metaKey) && !isTargetAnInput) {\n return;\n } else if(e.altKey && (key === 'ArrowUp' || key === 'ArrowDown')) {\n cancelEvent(e);\n this.managers.dialogsStorage.getNextDialog(this.chat.peerId, key === 'ArrowDown', appDialogsManager.filterId).then((dialog) => {\n if(dialog) {\n this.setPeer({peerId: dialog.peerId});\n }\n });\n } else if(key === 'ArrowUp' && this.chat.type !== ChatType.Scheduled) {\n if(!chat.input.editMsgId && chat.input.isInputEmpty()) {\n this.managers.appMessagesManager.getFirstMessageToEdit(chat.peerId, chat.threadId).then((message) => {\n if(message) {\n chat.input.initMessageEditing(message.mid);\n cancelEvent(e); // * prevent from scrolling\n }\n });\n } else {\n return;\n }\n } else if(key === 'ArrowDown') {\n return;\n }\n\n if(\n chat?.input?.messageInput &&\n target !== chat.input.messageInput &&\n !isTargetAnInput &&\n !IS_TOUCH_SUPPORTED &&\n (!mediaSizes.isMobile || this.tabId === APP_TABS.CHAT) &&\n !chat.selection.isSelecting &&\n !chat.input.recording &&\n chat.input.messageInput.isContentEditable\n ) {\n focusInput(chat.input.messageInput, e);\n }\n };\n\n document.body.addEventListener('keydown', onKeyDown);\n }\n\n // * restrict copying no forwards content\n private attachCopyListener() {\n document.addEventListener('copy', (e) => {\n const nodes = getSelectedNodes();\n nodes.some((node) => {\n let element: HTMLElement = node as HTMLElement;\n if(node.nodeType !== node.ELEMENT_NODE) {\n element = node.parentElement;\n }\n\n if(!findUpClassName(element, 'no-forwards')) {\n return false;\n }\n\n const bubble = findUpClassName(element, 'bubble');\n if(!bubble) {\n return false;\n }\n\n e.preventDefault();\n const peerId = bubble.dataset.peerId.toPeerId();\n const chat = apiManagerProxy.getChat(peerId.toChatId());\n toastNew({\n langPackKey: (chat as MTChat.channel).pFlags.broadcast ? 'CopyRestricted.Channel' : 'CopyRestricted.Group'\n });\n\n return true;\n });\n });\n }\n\n public openUrl(url: string, newWindowIfNoClick?: boolean) {\n const {url: wrappedUrl, onclick} = wrapUrl(url);\n if(!onclick) {\n if(newWindowIfNoClick) {\n safeWindowOpen(wrappedUrl);\n }\n\n return;\n }\n\n const a = document.createElement('a');\n a.href = wrappedUrl;\n return (window as any)[onclick](a);\n }\n\n private onHashChange = (saveState?: boolean) => {\n try {\n this.onHashChangeUnsafe(saveState);\n } catch(err) {\n this.log.error('hash change error', err);\n }\n };\n\n private onHashChangeUnsafe = (saveState?: boolean) => {\n const hash = location.hash;\n if(!saveState) {\n appNavigationController.replaceState();\n }\n\n const splitted = hash.split('?');\n const params = parseUriParams(hash, splitted);\n this.log('hashchange', hash, splitted[0], params);\n if(!hash) {\n return;\n }\n\n if(params.tgaddr) {\n appNavigationController.replaceState();\n this.openUrl(params.tgaddr);\n return;\n }\n\n switch(splitted[0]) {\n default: {\n params.p = splitted[0].slice(1);\n }\n\n case '#/im': {\n if(!Object.keys(params).length) {\n break;\n }\n\n const p: string = params.p;\n const postId = params.post !== undefined ? +params.post : undefined;\n const messageId = postId || (params.message !== undefined ? +params.message : undefined);\n const threadId = params.thread !== undefined ? +params.thread : undefined;\n\n switch(p[0]) {\n case '@': {\n this.openUsername({\n userName: p,\n lastMsgId: messageId,\n threadId\n });\n break;\n }\n\n default: { // peerId\n const peerId = postId ? p.toPeerId(true) : p.toPeerId();\n this.managers.appPeersManager.getPeer(peerId).then((peer) => {\n this.op({\n peer,\n lastMsgId: messageId,\n threadId\n });\n });\n break;\n }\n }\n }\n }\n\n // appNavigationController.replaceState();\n // location.hash = '';\n };\n\n public onSponsoredBoxClick = (message: Message.message) => {\n const sponsoredMessage = message.sponsoredMessage;\n const wrapped = wrapUrl(sponsoredMessage.url);\n this.clickIfSponsoredMessage(message as Message.message);\n\n if(wrapped.onclick) {\n this.chat.appImManager.openUrl(sponsoredMessage.url);\n } else {\n safeWindowOpen(wrapped.url);\n }\n };\n\n public async open(options: Omit[0], 'peer'> & {peerId: PeerId}) {\n return this.op({\n ...options,\n peer: await this.managers.appPeersManager.getPeer(options.peerId)\n });\n }\n\n public async op(options: {\n peer: User.user | MTChat\n } & Omit) {\n if(!options.peer) {\n return;\n }\n\n const isUser = options.peer._ === 'user';\n const isChannel = options.peer._ === 'channel';\n let peerId = options.peer.id.toPeerId(!isUser);\n\n const keys: Extract[] = [\n 'commentId',\n 'lastMsgId',\n 'threadId'\n ];\n\n const channelId = isChannel ? (options.peer as MTChat.channel).id : undefined;\n const isForum = !!(options.peer as MTChat.channel).pFlags.forum;\n\n await Promise.all(keys.map(async(key) => {\n options[key] &&= await this.managers.appMessagesIdsManager.generateMessageId(options[key], channelId);\n }));\n\n const migratedTo = (options.peer as MTChat.chat).migrated_to;\n if(migratedTo) {\n const channelId = (migratedTo as InputChannel.inputChannel).channel_id;\n options.peer = await this.managers.appChatsManager.getChat(channelId);\n peerId = channelId.toPeerId(true);\n }\n\n let {commentId, threadId, lastMsgId} = options;\n\n // open forum tab\n if(!commentId && !threadId && !lastMsgId && isForum) {\n appDialogsManager.toggleForumTabByPeerId(peerId, true, true);\n return;\n }\n\n // handle t.me/username/thread or t.me/username/messageId\n if(isForum && lastMsgId && !threadId) {\n const message = await this.managers.appMessagesManager.reloadMessages(peerId, lastMsgId);\n if(message) {\n threadId = options.threadId = getMessageThreadId(message, isForum);\n } else {\n threadId = options.threadId = lastMsgId;\n lastMsgId = options.lastMsgId = undefined;\n }\n }\n\n if(threadId) {\n return this.openThread({\n ...(options as any as Parameters[0]),\n peerId\n });\n } else if(commentId) {\n return this.openComment({\n peerId,\n msgId: lastMsgId,\n commentId\n });\n }\n\n return this.setInnerPeer({\n ...options,\n peerId\n });\n }\n\n public openPremiumBot() {\n return this.managers.apiManager.getAppConfig().then((appConfig) => {\n return this.openUsername({userName: appConfig.premium_bot_username});\n });\n }\n\n public openUsername(options: {\n userName: string\n } & Omit) {\n const {userName} = options;\n return this.managers.appUsersManager.resolveUsername(userName).then((peer) => {\n return this.op({\n peer,\n ...options\n });\n }, (err: ApiError) => {\n if(err.type === 'USERNAME_NOT_OCCUPIED') {\n toastNew({langPackKey: 'NoUsernameFound'});\n } else if(err.type === 'USERNAME_INVALID') {\n toastNew({langPackKey: 'Alert.UserDoesntExists'});\n }\n });\n }\n\n /**\n * Opens thread when peerId of discussion group is known\n */\n public async openThread(options: {\n peerId: PeerId,\n lastMsgId: number,\n threadId: number,\n stack?: ChatSetPeerOptions['stack']\n }) {\n if(await this.managers.appChatsManager.isForum(options.peerId.toChatId())) {\n await this.managers.dialogsStorage.getForumTopicOrReload(options.peerId, options.threadId);\n return this.setInnerPeer(options);\n }\n\n return this.managers.appMessagesManager.reloadMessages(options.peerId, options.threadId).then(async(message) => {\n if(!message) {\n options.lastMsgId = undefined;\n }\n\n return this.setInnerPeer({\n ...options,\n type: ChatType.Discussion\n });\n });\n }\n\n /**\n * Opens comment directly from original channel\n */\n public openComment(options: {\n peerId: PeerId,\n msgId: number,\n commentId: number\n }) {\n return this.managers.appMessagesManager.getDiscussionMessage(options.peerId, options.msgId).then((message) => {\n return this.openThread({\n peerId: message.peerId,\n lastMsgId: options.commentId,\n threadId: message.mid\n });\n });\n }\n\n public async callUser(userId: UserId, type: CallType) {\n const call = callsController.getCallByUserId(userId);\n if(call) {\n return;\n }\n\n const userFull = await this.managers.appProfileManager.getProfile(userId);\n if(userFull.pFlags.phone_calls_private) {\n wrapPeerTitle({peerId: userId.toPeerId()}).then((element) => {\n return confirmationPopup({\n descriptionLangKey: 'Call.PrivacyErrorMessage',\n descriptionLangArgs: [element],\n button: {\n langKey: 'OK',\n isCancel: true\n }\n });\n });\n\n return;\n }\n\n await this.discardCurrentCall(userId.toPeerId(), 'Call');\n\n callsController.startCallInternal(userId, type === 'video');\n }\n\n private discardCurrentCall(toPeerId: PeerId, toType: 'Live' | 'Voice' | 'Call', ignoreGroupCall?: GroupCallInstance, ignoreCall?: CallInstance, ignoreLive?: RtmpCallInstance): Promise {\n if(groupCallsController.groupCall && groupCallsController.groupCall !== ignoreGroupCall) return this.discardGroupCallConfirmation(toPeerId, toType);\n else if(callsController.currentCall && callsController.currentCall !== ignoreCall) return this.discardCallConfirmation(toPeerId, toType);\n else if(rtmpCallsController.currentCall && rtmpCallsController.currentCall !== ignoreLive) return this.discardLiveConfirmation(toPeerId, toType);\n else return Promise.resolve();\n }\n\n private async discardAnyCallConfirmation(fromPeerId: PeerId, toPeerId: PeerId, fromType: Parameters[1], toType: Parameters[1]) {\n await Promise.all([\n wrapPeerTitle({peerId: fromPeerId}),\n wrapPeerTitle({peerId: toPeerId})\n ]).then(([title1, title2]) => {\n return confirmationPopup({\n titleLangKey: `Call.Confirm.Discard.${fromType}.Header`,\n descriptionLangKey: `Call.Confirm.Discard.${fromType}.To${toType}.Text`,\n descriptionLangArgs: [title1, title2],\n button: {\n langKey: 'OK'\n }\n });\n });\n }\n\n private async discardGroupCallConfirmation(toPeerId: PeerId, toType: Parameters[1]) {\n const currentCall = groupCallsController.groupCall;\n if(currentCall) {\n await this.discardAnyCallConfirmation(currentCall.chatId.toPeerId(true), toPeerId, 'Voice', toType);\n\n if(groupCallsController.groupCall === currentCall) {\n await currentCall.hangUp();\n }\n }\n }\n\n private async discardCallConfirmation(toPeerId: PeerId, toType: Parameters[1]) {\n const currentCall = callsController.currentCall;\n if(currentCall) {\n await this.discardAnyCallConfirmation(currentCall.interlocutorUserId.toPeerId(false), toPeerId, 'Call', toType);\n\n if(!currentCall.isClosing) {\n await currentCall.hangUp('phoneCallDiscardReasonDisconnect');\n }\n }\n }\n\n private async discardLiveConfirmation(toPeerId: PeerId, toType: Parameters[1]) {\n const currentCall = rtmpCallsController.currentCall;\n if(currentCall) {\n await this.discardAnyCallConfirmation(currentCall.chatId.toPeerId(true), toPeerId, 'Live', toType);\n\n if(rtmpCallsController.currentCall === currentCall) {\n await rtmpCallsController.leaveCall();\n }\n }\n }\n\n public async joinGroupCall(peerId: PeerId, groupCallId?: GroupCallId) {\n const chatId = peerId.toChatId();\n const hasRights = this.managers.appChatsManager.hasRights(chatId, 'manage_call');\n const next = async() => {\n const chatFull = await this.managers.appProfileManager.getChatFull(chatId);\n let call: MyGroupCall;\n if(!chatFull.call) {\n if(!hasRights) {\n return;\n }\n\n call = await this.managers.appGroupCallsManager.createGroupCall(chatId);\n } else {\n call = chatFull.call;\n }\n\n groupCallsController.joinGroupCall(chatId, call.id, true, false);\n };\n\n if(groupCallId) {\n const groupCall = await this.managers.appGroupCallsManager.getGroupCallFull(groupCallId);\n if(groupCall._ === 'groupCallDiscarded') {\n if(!hasRights) {\n toastNew({\n langPackKey: 'VoiceChat.Chat.Ended'\n });\n\n return;\n }\n\n await confirmationPopup({\n descriptionLangKey: 'VoiceChat.Chat.StartNew',\n button: {\n langKey: 'VoiceChat.Chat.StartNew.OK'\n }\n });\n }\n }\n\n await this.discardCurrentCall(peerId, 'Voice');\n\n next();\n }\n\n public async joinLiveStream(peerId: PeerId) {\n await this.discardCurrentCall(peerId, 'Live');\n\n await rtmpCallsController.joinCall(peerId.toChatId()).catch((err) => {\n console.error(err);\n toastNew({\n langPackKey: 'Error.AnError'\n });\n });\n\n this.openLiveStreamPlayer(peerId);\n }\n\n private async openLiveStreamPlayer(peerId: PeerId) {\n if(AppMediaViewerRtmp.activeInstance) return;\n\n const shareUrl = await AppMediaViewerRtmp.getShareUrl(peerId.toChatId());\n new AppMediaViewerRtmp(shareUrl).openMedia({\n peerId,\n isAdmin: rtmpCallsController.currentCall.admin\n });\n }\n\n public setCurrentBackground(broadcastEvent = false, skipAnimation?: boolean): ReturnType {\n const theme = themeController.getTheme();\n\n const slug = (theme.settings?.wallpaper as WallPaper.wallPaper)?.slug;\n if(slug) {\n const defaultTheme = STATE_INIT.settings.themes.find((t) => t.name === theme.name);\n // const isDefaultBackground = theme.background.blur === defaultTheme.background.blur &&\n // slug === defaultslug;\n\n // if(!isDefaultBackground) {\n return Promise.resolve(this.getBackground({slug})).then((url) => {\n return this.setBackground(url, broadcastEvent, skipAnimation);\n }, () => { // * if NO_ENTRY_FOUND\n theme.settings = copy(defaultTheme.settings); // * reset background\n return this.setCurrentBackground(true);\n });\n // }\n }\n\n return this.setBackground('', broadcastEvent, skipAnimation);\n }\n\n private getWallPaperStorageUrl(slug: string, blur?: boolean) {\n return `backgrounds/${slug}${blur ? '?blur' : ''}`;\n }\n\n public saveWallPaperToCache(slug: string, url: string, blur?: boolean) {\n if(!slug || slug === DEFAULT_BACKGROUND_SLUG) {\n return;\n }\n\n return fetch(url).then((response) => {\n return appImManager.cacheStorage.save(this.getWallPaperStorageUrl(slug, blur), response);\n });\n }\n\n public blurWallPaperImage(url: string) {\n const {canvas, promise} = blur(url, 12, 4);\n return promise.then(() => {\n return canvas.toDataURL();\n });\n }\n\n public setBackgroundUrlToCache({slug, url, blur}: {slug: string, url: string, blur?: boolean}) {\n this.backgroundPromises[this.getWallPaperStorageUrl(slug, blur)] = url;\n }\n\n public getBackground({\n slug,\n canDownload,\n blur\n }: {\n slug: string,\n canDownload?: boolean,\n blur?: boolean\n }) {\n const storageUrl = this.getWallPaperStorageUrl(slug, blur);\n return this.backgroundPromises[storageUrl] ||= this.cacheStorage.getFile(storageUrl).then((blob) => {\n return this.backgroundPromises[storageUrl] = URL.createObjectURL(blob);\n }, canDownload ? async(err) => {\n if((err as ApiError).type !== 'NO_ENTRY_FOUND') {\n throw err;\n }\n\n const wallPaper = await this.managers.appThemesManager.getWallPaperBySlug(slug);\n let url = await appDownloadManager.downloadMediaURL({\n media: (wallPaper as WallPaper.wallPaper).document as Document.document\n });\n\n if(blur) {\n url = await this.blurWallPaperImage(url);\n }\n\n this.saveWallPaperToCache(slug, url, blur);\n return this.backgroundPromises[storageUrl] = url;\n } : undefined);\n }\n\n public setBackground(url: string, broadcastEvent = true, skipAnimation?: boolean): Promise {\n this.lastBackgroundUrl = url;\n const promises = this.chats.map((chat) => chat.setBackgroundIfNotSet({url, skipAnimation}));\n return Promise.resolve(promises[promises.length - 1]).then(() => {\n if(broadcastEvent) {\n rootScope.dispatchEvent('background_change');\n }\n });\n }\n\n public saveChatPosition(chat: Chat) {\n if(!([ChatType.Chat, ChatType.Discussion, ChatType.Saved] as ChatType[]).includes(chat.type) || !chat.peerId) {\n return;\n }\n\n // const bubble = chat.bubbles.getBubbleByPoint('top');\n // if(bubble) {\n // const top = bubble.getBoundingClientRect().top;\n const chatBubbles = chat.bubbles;\n const key = chat.peerId + (chat.threadId ? '_' + chat.threadId : '');\n const chatPositions = stateStorage.getFromCache('chatPositions');\n if(\n !(chatBubbles.scrollable.getDistanceToEnd() <= 16 && chatBubbles.scrollable.loadedAll.bottom) &&\n chatBubbles.getRenderedLength() &&\n !chat.savedReaction &&\n chatBubbles.getViewportSlice().invisibleBottom.length // * don't save if we're close to the end (or sponsored is below)\n ) {\n chatBubbles.sliceViewport(true);\n const top = chatBubbles.scrollable.scrollPosition;\n\n const position = {\n mids: chatBubbles.getRenderedHistory('desc', true).map((fullMid) => splitFullMid(fullMid).mid),\n top\n };\n\n chatPositions[key] = position;\n\n this.log('saved chat position:', position);\n } else {\n delete chatPositions[key];\n\n this.log('deleted chat position');\n }\n\n stateStorage.set({chatPositions}, true);\n // }\n }\n\n public getChatSavedPosition(chat: Chat): ChatSavedPosition {\n if(!([ChatType.Chat, ChatType.Discussion, ChatType.Saved] as ChatType[]).includes(chat.type) || !chat.peerId) {\n return;\n }\n\n const key = chat.peerId + (chat.threadId ? '_' + chat.threadId : '');\n const cache = stateStorage.getFromCache('chatPositions');\n return cache && cache[key];\n }\n\n public applyCurrentTheme({\n slug,\n backgroundUrl,\n broadcastEvent,\n noSetTheme,\n skipAnimation\n }: {\n slug?: string,\n backgroundUrl?: string,\n broadcastEvent?: boolean,\n noSetTheme?: boolean,\n skipAnimation?: boolean\n } = {}) {\n if(backgroundUrl) {\n this.setBackgroundUrlToCache({slug, url: backgroundUrl});\n }\n\n !noSetTheme && themeController.setTheme();\n\n return this.setCurrentBackground(\n broadcastEvent === undefined ? !!slug : broadcastEvent,\n skipAnimation\n );\n }\n\n private setSettings = () => {\n const {messagesTextSize} = rootScope.settings;\n\n this.customEmojiSize = makeMediaSize(messagesTextSize + 4, messagesTextSize + 4);\n document.documentElement.style.setProperty('--messages-text-size', messagesTextSize + 'px');\n\n const firstTime = !this.customEmojiSize;\n if(!firstTime) {\n const ellipsisElements = document.querySelectorAll('middle-ellipsis-element');\n ellipsisElements.forEach((element) => {\n element.disconnectedCallback();\n element.dataset.fontSize = '' + messagesTextSize;\n if(element.title) element.textContent = element.title;\n element.connectedCallback();\n });\n\n const renderers = document.querySelectorAll('.chat custom-emoji-renderer-element');\n renderers.forEach((renderer) => {\n renderer.forceRenderAfterSize = true;\n });\n }\n\n document.body.classList.toggle('animation-level-0', !liteMode.isAvailable('animations'));\n document.body.classList.toggle('animation-level-1', false);\n document.body.classList.toggle('animation-level-2', liteMode.isAvailable('animations'));\n\n this.chatsSelectTabDebounced = debounce(() => {\n const topbar = this.chat.topbar;\n topbar.pinnedMessage?.setCorrectIndex(0); // * буду молиться богам, чтобы это ничего не сломало, но это исправляет получение пиннеда после анимации\n\n this.managers.apiFileManager.setQueueId(this.chat.bubbles.lazyLoadQueue.queueId);\n }, liteMode.isAvailable('animations') ? 250 : 0, false, true);\n\n const c: LiteModeKey[] = ['stickers_chat', 'stickers_panel'];\n const changedLoop = animationIntersector.setLoop(rootScope.settings.stickers.loop);\n const changedAutoplay = !!c.filter((key) => animationIntersector.setAutoplay(liteMode.isAvailable(key), key)).length;\n if(changedLoop || changedAutoplay) {\n animationIntersector.checkAnimations2(false);\n }\n\n for(const chat of this.chats) {\n chat.setAutoDownloadMedia();\n }\n\n I18n.setTimeFormat(rootScope.settings.timeFormat);\n\n this.toggleChatGradientAnimation(this.chat);\n };\n\n // * не могу использовать тут TransitionSlider, так как мне нужен отрисованный блок рядом\n // * (или под текущим чатом) чтобы правильно отрендерить чат (напр. scrollTop)\n private chatsSelectTab(tab: HTMLElement, animate?: boolean) {\n if(this.prevTab === tab) {\n return;\n }\n\n if(animate === false && this.prevTab) { // * will be used for Safari iOS history swipe\n disableTransition([tab, this.prevTab].filter(Boolean));\n }\n\n if(this.prevTab) {\n this.prevTab.classList.remove('active');\n this.chatsSelectTabDebounced();\n\n // ! нужно переделать на animation, так как при лаге анимация будет длиться не 250мс\n if(liteMode.isAvailable('animations') && animate !== false) {\n dispatchHeavyAnimationEvent(pause(250 + 150), 250 + 150);\n }\n\n const prevIdx = whichChild(this.prevTab);\n const idx = whichChild(tab);\n if(idx > prevIdx) {\n appNavigationController.pushItem({\n type: 'chat',\n onPop: (canAnimate) => {\n this.setPeer({}, canAnimate);\n blurActiveElement();\n }\n });\n }\n }\n\n tab.classList.add('active');\n this.prevTab = tab;\n }\n\n private init() {\n document.addEventListener('paste', this.onDocumentPaste, true);\n\n if(!IS_TOUCH_SUPPORTED) {\n this.attachDragAndDropListeners();\n }\n\n // if(!isTouchSupported) {\n MarkupTooltip.getInstance().handleSelection();\n // }\n\n // PopupElement.createPopup(PopupStars);\n }\n\n private attachDragAndDropListeners() {\n const drops: ChatDragAndDrop[] = [];\n const mediaDrops: ChatDragAndDrop[] = [];\n let mounted = false;\n const toggle = async(e: DragEvent, mount: boolean) => {\n if(mount === mounted/* || !mount */) return;\n\n const _types = e.dataTransfer.types;\n // @ts-ignore\n const isFiles = _types.contains ? _types.contains('Files') : _types.indexOf('Files') >= 0;\n\n const newMediaPopup = getCurrentNewMediaPopup();\n const types: string[] = await getFilesFromEvent(e, true);\n if(!isFiles || (!(await this.canDrag()) && !newMediaPopup)) { // * skip dragging text case\n counter = 0;\n return;\n }\n\n const rights = await PopupNewMedia.canSend({...this.chat.getMessageSendingParams(), onlyVisible: true});\n\n const _dropsContainer = newMediaPopup ? mediaDropsContainer : dropsContainer;\n const _drops = newMediaPopup ? mediaDrops : drops;\n\n if(mount && !_drops.length) {\n const force = isFiles && !types.length; // * can't get file items not from 'drop' on Safari\n\n const [foundMedia, foundDocuments] = partition(types, (t) => MEDIA_MIME_TYPES_SUPPORTED.has(t));\n const [foundPhotos, foundVideos] = partition(foundMedia, (t) => IMAGE_MIME_TYPES_SUPPORTED.has(t));\n\n if(!rights.send_docs) {\n foundDocuments.length = 0;\n } else {\n foundDocuments.push(...foundMedia);\n }\n\n if(!rights.send_photos) {\n foundPhotos.forEach((mimeType) => indexOfAndSplice(foundMedia, mimeType));\n foundPhotos.length = 0;\n }\n\n if(!rights.send_videos) {\n foundVideos.forEach((mimeType) => indexOfAndSplice(foundMedia, mimeType));\n foundVideos.length = 0;\n }\n\n this.log('drag files', types, foundMedia, foundDocuments, foundPhotos, foundVideos);\n\n if(newMediaPopup) {\n newMediaPopup.appendDrops(_dropsContainer);\n\n const length = (rights.send_docs ? [foundDocuments] : [foundPhotos, foundVideos]).reduce((acc, v) => acc + v.length, 0);\n if(length || force) {\n _drops.push(new ChatDragAndDrop(_dropsContainer, {\n header: 'Preview.Dragging.AddItems',\n headerArgs: [length],\n onDrop: (e: DragEvent) => {\n toggle(e, false);\n this.log('drop', e);\n this.onDocumentPaste(e, 'document');\n }\n }));\n }\n } else {\n if(foundDocuments.length || force) {\n _drops.push(new ChatDragAndDrop(_dropsContainer, {\n icon: 'dragfiles',\n header: 'Chat.DropTitle',\n subtitle: 'Chat.DropAsFilesDesc',\n onDrop: (e: DragEvent) => {\n toggle(e, false);\n this.log('drop', e);\n this.onDocumentPaste(e, 'document');\n }\n }));\n }\n\n if(foundMedia.length || force) {\n _drops.push(new ChatDragAndDrop(_dropsContainer, {\n icon: 'dragmedia',\n header: 'Chat.DropTitle',\n subtitle: 'Chat.DropQuickDesc',\n onDrop: (e: DragEvent) => {\n toggle(e, false);\n this.log('drop', e);\n this.onDocumentPaste(e, 'media');\n }\n }));\n }\n\n this.chat.container.append(_dropsContainer);\n }\n }\n\n // if(!mount) return;\n\n SetTransition({\n element: _dropsContainer,\n className: 'is-visible',\n forwards: mount,\n duration: 200,\n onTransitionEnd: () => {\n if(!mount) {\n _drops.forEach((drop) => {\n drop.destroy();\n });\n\n _drops.length = 0;\n }\n }\n });\n\n if(mount) {\n _drops.forEach((drop) => {\n drop.setPath();\n });\n } else {\n counter = 0;\n }\n\n document.body.classList.toggle('is-dragging', mount);\n mounted = mount;\n };\n\n /* document.body.addEventListener('dragover', (e) => {\n cancelEvent(e);\n }); */\n\n let counter = 0;\n document.body.addEventListener('dragenter', (e) => {\n ++counter;\n });\n\n document.body.addEventListener('dragover', (e) => {\n // this.log('dragover', e/* , e.dataTransfer.types[0] */);\n toggle(e, true);\n cancelEvent(e);\n });\n\n document.body.addEventListener('dragleave', (e) => {\n // this.log('dragleave', e, counter);\n // if((e.pageX <= 0 || e.pageX >= this.managers.appPhotosManager.windowW) || (e.pageY <= 0 || e.pageY >= this.managers.appPhotosManager.windowH)) {\n if(--counter === 0) {\n // if(!findUpClassName(e.target, 'drops-container')) {\n toggle(e, false);\n }\n });\n\n const dropsContainer = document.createElement('div');\n dropsContainer.classList.add('drops-container');\n\n const mediaDropsContainer = dropsContainer.cloneNode(true) as HTMLElement;\n }\n\n private async canDrag() {\n const chat = this.chat;\n const peerId = chat?.peerId;\n const good = !(!peerId || overlayCounter.isOverlayActive || !(await chat.canSend('send_media')));\n if(good) {\n if(await this.chat.input.showSlowModeTooltipIfNeeded({\n element: this.chat.input.attachMenu\n })) {\n return false;\n }\n }\n\n return good;\n }\n\n private onDocumentPaste = async(e: ClipboardEvent | DragEvent, attachType?: 'media' | 'document') => {\n const newMediaPopup = getCurrentNewMediaPopup();\n\n // console.log('document paste');\n // console.log('item', event.clipboardData.getData());\n\n if(e instanceof DragEvent) {\n const _types = e.dataTransfer.types;\n // @ts-ignore\n const isFiles = _types.contains ? _types.contains('Files') : _types.indexOf('Files') >= 0;\n if(isFiles) {\n cancelEvent(e);\n }\n }\n\n const files = await getFilesFromEvent(e);\n if(!(await this.canDrag()) && !newMediaPopup) return;\n if(files.length) {\n if(newMediaPopup) {\n newMediaPopup.addFiles(files);\n return;\n }\n\n const chatInput = this.chat.input;\n chatInput.willAttachType = attachType || (MEDIA_MIME_TYPES_SUPPORTED.has(files[0].type) ? 'media' : 'document');\n PopupElement.createPopup(PopupNewMedia, this.chat, files, chatInput.willAttachType);\n }\n };\n\n private async overrideHash(peerId?: PeerId) {\n let str: string;\n if(peerId) {\n const username = await this.managers.appPeersManager.getPeerUsername(peerId);\n str = username ? '@' + username : '' + peerId;\n }\n\n appNavigationController.overrideHash(str);\n }\n\n public selectTab(id: APP_TABS, animate?: boolean) {\n if(animate === false) { // * will be used for Safari iOS history swipe\n disableTransition([appSidebarLeft.sidebarEl, this.columnEl, appSidebarRight.sidebarEl]);\n }\n\n document.body.classList.toggle(LEFT_COLUMN_ACTIVE_CLASSNAME, id === APP_TABS.CHATLIST);\n\n const prevTabId = this.tabId;\n if(prevTabId !== undefined) {\n this.overrideHash(id > APP_TABS.CHATLIST ? this.chat?.peerId : undefined);\n this.dispatchEvent('tab_changing', id);\n }\n\n this.log('selectTab', id, prevTabId);\n\n let animationPromise: Promise = liteMode.isAvailable('animations') ? doubleRaf() : Promise.resolve();\n if(\n prevTabId !== undefined &&\n prevTabId !== id &&\n liteMode.isAvailable('animations') &&\n animate !== false &&\n mediaSizes.activeScreen !== ScreenSize.large\n ) {\n const transitionTime = (mediaSizes.isMobile ? 250 : 200) + 100; // * cause transition time could be > 250ms\n animationPromise = pause(transitionTime);\n dispatchHeavyAnimationEvent(animationPromise, transitionTime);\n\n // ! it's very heavy operation. will blink in firefox\n /* this.columnEl.classList.add('disable-hover');\n animationPromise.finally(() => {\n this.columnEl.classList.remove('disable-hover');\n }); */\n }\n\n this.tabId = id;\n blurActiveElement();\n if(mediaSizes.isMobile && prevTabId === APP_TABS.PROFILE && id < APP_TABS.PROFILE) {\n appSidebarRight.hide();\n }\n\n if(prevTabId !== undefined && id > prevTabId) {\n if(id < APP_TABS.PROFILE || !appNavigationController.findItemByType('im')) {\n appNavigationController.pushItem({\n type: 'im',\n onPop: (canAnimate) => {\n // this.selectTab(prevTabId, !isSafari);\n this.setPeer({}, canAnimate);\n }\n });\n }\n }\n\n const onImTabChange = (window as any).onImTabChange;\n onImTabChange?.(id);\n\n // this._selectTab(id, mediaSizes.isMobile);\n // document.body.classList.toggle(RIGHT_COLUMN_ACTIVE_CLASSNAME, id === 2);\n\n return animationPromise;\n }\n\n public updateStatus() {\n return this.managers.appUsersManager.updateMyOnlineStatus(this.offline);\n }\n\n private createNewChat() {\n const chat = new Chat(\n this,\n this.managers,\n true\n );\n\n this.chatsContainer.append(chat.container);\n\n // if(this.chats.length) {\n // chat.setBackground({url: this.lastBackgroundUrl, skipAnimation: true});\n // }\n\n this.chats.push(chat);\n\n return chat;\n }\n\n private spliceChats(fromIndex: number, justReturn = true, animate?: boolean, spliced?: Chat[]) {\n if(fromIndex >= this.chats.length) return;\n\n const chatFrom = this.chat;\n if(this.chats.length > 1 && justReturn) {\n this.dispatchEvent('peer_changing', this.chat);\n }\n\n if(!spliced) {\n spliced = this.chats.splice(fromIndex, this.chats.length - fromIndex);\n }\n\n const chatTo = this.chat;\n this.dispatchEvent('chat_changing', {from: chatFrom, to: chatTo});\n\n // * -1 because one item is being sliced when closing the chat by calling .removeByType\n for(let i = 0; i < spliced.length - 1; ++i) {\n appNavigationController.removeByType('chat', true);\n }\n\n // * fix middle chat z-index on animation\n if(spliced.length > 1) {\n spliced.slice(0, -1).forEach((chat) => {\n chat.container.remove();\n });\n }\n\n this.chatsSelectTab(chatTo.container, animate);\n\n if(justReturn) {\n this.dispatchEvent('peer_changed', chatTo);\n\n const searchTab = appSidebarRight.getTab(AppPrivateSearchTab);\n searchTab?.close();\n\n appSidebarRight.replaceSharedMediaTab(chatTo.sharedMediaTab);\n }\n\n spliced.forEach((chat) => {\n chat.beforeDestroy();\n });\n\n setTimeout(() => {\n // chat.setPeer(0);\n spliced.forEach((chat) => {\n chat.destroy();\n });\n }, 250 + 100);\n }\n\n public async setPeer(options: Partial = {}, animate?: boolean): Promise {\n options.peerId ??= NULL_PEER_ID;\n options.peerId = await this.managers.appPeersManager.getPeerMigratedTo(options.peerId) || options.peerId;\n\n const {peerId, lastMsgId, threadId} = options;\n\n const chat = this.chat;\n const chatIndex = this.chats.indexOf(chat);\n const isSamePeer = this.isSamePeer(chat, options as any);\n if(!peerId) {\n if(chatIndex > 0) {\n this.spliceChats(chatIndex, undefined, animate);\n return;\n } else if(mediaSizes.activeScreen === ScreenSize.medium) { // * floating sidebar case\n this.selectTab(+!this.tabId, animate);\n return;\n }\n } else if(chatIndex > 0 && chat.peerId && !isSamePeer) {\n // const firstChat = this.chats[0];\n // if(firstChat.peerId !== chat.peerId) {\n /* // * slice idx > 0, set background and slice first, so new one will be the first\n const spliced = this.chats.splice(1, this.chats.length - 1);\n this.createNewChat();\n this.chats.splice(0, 1); */\n const spliced = this.chats.splice(1, this.chats.length - 1);\n if(this.chat.peerId === peerId) {\n this.spliceChats(0, true, true, spliced);\n return;\n } else {\n const ret = this.setPeer(options);\n this.spliceChats(0, false, false, spliced);\n return ret;\n }\n // } else {\n // this.spliceChats(1, false, animate);\n // }\n\n // return ret;\n }\n\n // * don't reset peer if returning\n if(isSamePeer && mediaSizes.activeScreen <= ScreenSize.medium && document.body.classList.contains(LEFT_COLUMN_ACTIVE_CLASSNAME)) {\n this.selectTab(APP_TABS.CHAT, animate);\n return false;\n }\n\n if(peerId || mediaSizes.activeScreen !== ScreenSize.mobile) {\n const result = await chat.setPeer(options as any as Parameters[0]);\n\n // * wait for cached render\n const promise = result?.cached ? result.promise : Promise.resolve();\n if(peerId) {\n Promise.all([\n promise,\n chat.setBackgroundPromise\n ]).then(() => {\n // window.requestAnimationFrame(() => {\n setTimeout(() => { // * setTimeout is better here\n setTimeout(() => {\n this.chatsSelectTab(this.chat.container);\n }, 0);\n this.selectTab(APP_TABS.CHAT, animate);\n }, 0);\n });\n }\n }\n\n if(!peerId) {\n this.selectTab(APP_TABS.CHATLIST, animate);\n return false;\n }\n }\n\n public async setInnerPeer(options: ChatSetInnerPeerOptions) {\n let {peerId} = options;\n if(peerId === NULL_PEER_ID || !peerId) {\n return;\n }\n\n peerId = options.peerId = await this.managers.appPeersManager.getPeerMigratedTo(peerId) || peerId;\n\n if(!options.type) {\n if(options.threadId) {\n if(options.peerId === rootScope.myId) {\n options.type = ChatType.Saved;\n } else if(!apiManagerProxy.isForum(options.peerId)) {\n options.type = ChatType.Discussion;\n }\n }\n\n options.type ??= ChatType.Chat;\n }\n\n // * reuse current chat\n const existingIndex = this.chats.findIndex((chat) => this.isSamePeer(chat, options) || (mediaSizes.activeScreen === ScreenSize.mobile && this.tabId === 0));\n if(existingIndex !== -1) {\n this.spliceChats(existingIndex + 1);\n return this.setPeer(options);\n }\n\n const oldChat = this.chat;\n let chat = oldChat;\n if(oldChat.inited) { // * use first not inited chat\n chat = this.createNewChat();\n }\n\n this.dispatchEvent('chat_changing', {from: oldChat, to: chat});\n\n // this.chatsSelectTab(chat.container);\n\n return this.setPeer(options);\n }\n\n public openScheduled(peerId: PeerId) {\n this.setInnerPeer({\n peerId,\n type: ChatType.Scheduled\n });\n }\n\n public async toggleViewAsMessages(peerId: PeerId, enabled: boolean) {\n if(peerId === rootScope.myId) {\n setAppState('settings', 'savedAsForum', !enabled);\n } else {\n await this.managers.appChatsManager.toggleViewForumAsMessages(peerId.toChatId(), enabled);\n }\n\n this.selectTab(APP_TABS.CHATLIST);\n appDialogsManager.toggleForumTabByPeerId(peerId, !enabled, false);\n }\n\n private getTypingElement(action: SendMessageAction) {\n const el = document.createElement('span');\n let c = 'peer-typing';\n el.classList.add(c);\n el.dataset.action = action._;\n switch(action._) {\n case 'sendMessageTypingAction': {\n // default: {\n c += '-text';\n for(let i = 0; i < 3; ++i) {\n const cc = c + '-dot';\n const dot = document.createElement('span');\n dot.className = cc + (i === 0 ? ' ' + cc + '-first' : (i === 2 ? ' ' + cc + '-last' : ''));\n el.append(dot);\n }\n break;\n }\n\n case 'sendMessageUploadAudioAction':\n case 'sendMessageUploadDocumentAction':\n case 'sendMessageUploadRoundAction':\n case 'sendMessageUploadVideoAction':\n case 'sendMessageUploadPhotoAction': {\n c += '-upload';\n /* const trail = document.createElement('span');\n trail.className = c + '-trail';\n el.append(trail); */\n break;\n }\n\n case 'sendMessageRecordAudioAction':\n case 'sendMessageRecordRoundAction':\n case 'sendMessageRecordVideoAction': {\n c += '-record';\n break;\n }\n\n case 'sendMessageEmojiInteractionSeen':\n case 'sendMessageChooseStickerAction': {\n c += '-choosing-sticker';\n for(let i = 0; i < 2; ++i) {\n const eye = document.createElement('div');\n eye.className = c + '-eye';\n el.append(eye);\n }\n break;\n }\n }\n\n el.classList.add(c);\n\n return el;\n }\n\n public async getPeerTyping(peerId: PeerId, container?: HTMLElement, threadId?: number) {\n // const log = this.log.bindPrefix('getPeerTyping-' + peerId);\n // log('getting peer typing');\n\n const isUser = peerId.isUser();\n if(isUser && await this.managers.appUsersManager.isBot(peerId)) {\n // log('a bot');\n return;\n }\n\n const typings = await this.managers.appProfileManager.getPeerTypings(peerId, threadId);\n if(!typings?.length) {\n // log('have no typing');\n return;\n }\n\n const typing = typings[0];\n\n const langPackKeys: {\n [peerType in 'private' | 'chat' | 'multi']?: Partial<{[action in SendMessageAction['_']]: LangPackKey}>\n } = {\n private: {\n 'sendMessageTypingAction': 'Peer.Activity.User.TypingText',\n 'sendMessageUploadAudioAction': 'Peer.Activity.User.SendingFile',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.User.SendingFile',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.User.SendingPhoto',\n 'sendMessageUploadVideoAction': 'Peer.Activity.User.SendingVideo',\n 'sendMessageUploadRoundAction': 'Peer.Activity.User.SendingVideo',\n 'sendMessageRecordVideoAction': 'Peer.Activity.User.RecordingVideo',\n 'sendMessageRecordAudioAction': 'Peer.Activity.User.RecordingAudio',\n 'sendMessageRecordRoundAction': 'Peer.Activity.User.RecordingVideo',\n 'sendMessageGamePlayAction': 'Peer.Activity.User.PlayingGame',\n 'sendMessageChooseStickerAction': 'Peer.Activity.User.ChoosingSticker',\n 'sendMessageEmojiInteractionSeen': 'Peer.Activity.User.EnjoyingAnimations'\n },\n chat: {\n 'sendMessageTypingAction': 'Peer.Activity.Chat.TypingText',\n 'sendMessageUploadAudioAction': 'Peer.Activity.Chat.SendingFile',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.Chat.SendingFile',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.Chat.SendingPhoto',\n 'sendMessageUploadVideoAction': 'Peer.Activity.Chat.SendingVideo',\n 'sendMessageUploadRoundAction': 'Peer.Activity.Chat.SendingVideo',\n 'sendMessageRecordVideoAction': 'Peer.Activity.Chat.RecordingVideo',\n 'sendMessageRecordAudioAction': 'Peer.Activity.Chat.RecordingAudio',\n 'sendMessageRecordRoundAction': 'Peer.Activity.Chat.RecordingVideo',\n 'sendMessageGamePlayAction': 'Peer.Activity.Chat.PlayingGame',\n 'sendMessageChooseStickerAction': 'Peer.Activity.Chat.ChoosingSticker',\n 'sendMessageEmojiInteractionSeen': 'Peer.Activity.Chat.EnjoyingAnimations'\n },\n multi: {\n 'sendMessageTypingAction': 'Peer.Activity.Chat.Multi.TypingText1',\n 'sendMessageUploadAudioAction': 'Peer.Activity.Chat.Multi.SendingFile1',\n 'sendMessageUploadDocumentAction': 'Peer.Activity.Chat.Multi.SendingFile1',\n 'sendMessageUploadPhotoAction': 'Peer.Activity.Chat.Multi.SendingPhoto1',\n 'sendMessageUploadVideoAction': 'Peer.Activity.Chat.Multi.SendingVideo1',\n 'sendMessageUploadRoundAction': 'Peer.Activity.Chat.Multi.SendingVideo1',\n 'sendMessageRecordVideoAction': 'Peer.Activity.Chat.Multi.RecordingVideo1',\n 'sendMessageRecordAudioAction': 'Peer.Activity.Chat.Multi.RecordingAudio1',\n 'sendMessageRecordRoundAction': 'Peer.Activity.Chat.Multi.RecordingVideo1',\n 'sendMessageGamePlayAction': 'Peer.Activity.Chat.Multi.PlayingGame1',\n 'sendMessageChooseStickerAction': 'Peer.Activity.Chat.Multi.ChoosingSticker1'\n }\n };\n\n const mapa = isUser ? langPackKeys.private : (typings.length > 1 ? langPackKeys.multi : langPackKeys.chat);\n let action = typing.action;\n\n if(typings.length > 1) {\n const s: any = {};\n typings.forEach((typing) => {\n const type = typing.action._;\n if(s[type] === undefined) s[type] = 0;\n ++s[type];\n });\n\n if(Object.keys(s).length > 1) {\n action = {\n _: 'sendMessageTypingAction'\n };\n }\n }\n\n const langPackKey = mapa[action._];\n if(!langPackKey) {\n // log('no langPackKey');\n return;\n }\n\n let peerTitlePromise: Promise;\n let args: any[];\n if(peerId.isAnyChat()) {\n const peerTitle = new PeerTitle();\n peerTitlePromise = peerTitle.update({peerId: typing.userId.toPeerId(false), onlyFirstName: true});\n args = [\n peerTitle.element,\n typings.length - 1\n ];\n\n await peerTitlePromise;\n }\n\n if(!container) {\n container = document.createElement('span');\n container.classList.add('online', 'peer-typing-container');\n }\n\n container.classList.toggle('peer-typing-flex', action._ === 'sendMessageChooseStickerAction' || action._ === 'sendMessageEmojiInteractionSeen');\n\n let typingElement = container.firstElementChild as HTMLElement;\n if(!typingElement) {\n typingElement = this.getTypingElement(action);\n container.prepend(typingElement);\n } else {\n if(typingElement.dataset.action !== action._) {\n typingElement.replaceWith(this.getTypingElement(action));\n }\n }\n\n if(action._ === 'sendMessageEmojiInteractionSeen') {\n if(args) {\n args.pop();\n } else {\n args = [];\n }\n\n const span = htmlToSpan(wrapEmojiText(action.emoticon));\n args.push(span);\n }\n\n const descriptionElement = i18n(langPackKey, args);\n descriptionElement.classList.add('peer-typing-description');\n\n if(container.childElementCount > 1) container.lastElementChild.replaceWith(descriptionElement);\n else container.append(descriptionElement);\n\n // log('returning typing');\n return container;\n }\n\n private async getChatStatus(chatId: ChatId, noTyping?: boolean): Promise> {\n const typingEl = noTyping ? undefined : await this.getPeerTyping(chatId.toPeerId(true));\n if(typingEl) {\n return {cached: true, result: Promise.resolve(typingEl)};\n }\n\n const chatFullResult = await this.managers.acknowledged.appProfileManager.getChatFull(chatId);\n const dooo = async(chatFull: ChatFull) => {\n let [subtitle, onlinesResult] = await Promise.all([\n getChatMembersString(chatId, undefined, undefined, undefined, chatFull),\n this.managers.acknowledged.appProfileManager.getOnlines(chatId)\n ]);\n\n return {\n cached: onlinesResult.cached,\n result: onlinesResult.result.then((onlines) => {\n if(onlines > 1) {\n const span = document.createElement('span');\n\n span.append(...join([subtitle, i18n('OnlineCount', [numberThousandSplitter(onlines)])], false));\n subtitle = span;\n }\n\n return subtitle;\n })\n };\n };\n\n const result = chatFullResult.result.then(dooo);\n return {\n cached: chatFullResult.cached ? (await result).cached : chatFullResult.cached,\n result: result.then((r) => r.result)\n };\n }\n\n private async getUserStatus(userId: UserId, ignoreSelf?: boolean) {\n const result: AckedResult = {\n cached: true,\n result: Promise.resolve(undefined as HTMLElement)\n };\n\n const user = await this.managers.appUsersManager.getUser(userId);\n if(!user || (user.pFlags.self && !ignoreSelf)) {\n return result;\n }\n\n const subtitle = getUserStatusString(user);\n\n if(!user.pFlags.bot && !user.pFlags.support) {\n let typingEl = await this.getPeerTyping(userId.toPeerId());\n if(!typingEl && user.status?._ === 'userStatusOnline') {\n typingEl = document.createElement('span');\n typingEl.classList.add('online');\n typingEl.append(subtitle);\n }\n\n if(typingEl) {\n result.result = Promise.resolve(typingEl);\n return result;\n }\n }\n\n result.result = Promise.resolve(subtitle);\n return result;\n }\n\n private async getPeerStatus(peerId: PeerId, ignoreSelf?: boolean, noTyping?: boolean) {\n if(!peerId) return;\n let promise: Promise>;\n if(peerId.isAnyChat()) {\n promise = this.getChatStatus(peerId.toChatId(), noTyping);\n } else {\n promise = this.getUserStatus(peerId.toUserId(), ignoreSelf);\n }\n\n return promise;\n }\n\n public async setPeerStatus(options: {\n peerId: PeerId,\n element: HTMLElement,\n needClear: boolean,\n useWhitespace: boolean,\n middleware: () => boolean,\n ignoreSelf?: boolean,\n noTyping?: boolean\n }) {\n // const log = this.log.bindPrefix('status-' + peerId);\n // log('setting status', element);\n\n const {peerId, element, needClear, useWhitespace, middleware, ignoreSelf, noTyping} = options;\n\n if(!needClear) {\n // * good good good\n const typingContainer = element.querySelector('.peer-typing-container') as HTMLElement;\n if(typingContainer && await this.getPeerTyping(peerId, typingContainer)) {\n // log('already have a status');\n return;\n }\n }\n\n const result = await this.getPeerStatus(peerId, ignoreSelf, noTyping);\n // log('getPeerStatus result', result);\n if(!middleware()) {\n // log.warn('middleware');\n return;\n }\n\n const set = async() => {\n const subtitle = result && await result.result;\n if(!middleware()) {\n return;\n }\n\n return () => replaceContent(element, subtitle || placeholder);\n };\n\n const placeholder = useWhitespace ? NBSP : ''; // ! HERE U CAN FIND WHITESPACE\n if(!result || result.cached || needClear === undefined) {\n return set();\n } else if(needClear) {\n return () => {\n element.textContent = placeholder;\n return set().then((callback) => callback?.());\n };\n }\n }\n\n public setChoosingStickerTyping(cancel: boolean) {\n this.managers.appMessagesManager.setTyping(this.chat.peerId, {_: cancel ? 'sendMessageCancelAction' : 'sendMessageChooseStickerAction'}, undefined, this.chat.threadId);\n }\n\n public isSamePeer(options1: {peerId: PeerId, threadId?: number, type?: ChatType}, options2: typeof options1) {\n return options1.peerId === options2.peerId &&\n options1.threadId === options2.threadId &&\n (typeof(options1.type) !== typeof(options2.type) || options1.type === options2.type);\n }\n\n public giftPremium(peerId: PeerId) {\n this.managers.appProfileManager.getProfile(peerId.toUserId()).then((profile) => {\n PopupElement.createPopup(PopupGiftPremium, peerId, profile.premium_gifts);\n });\n }\n\n public requestPhone(peerId: PeerId) {\n return confirmationPopup({\n titleLangKey: 'ShareYouPhoneNumberTitle',\n button: {\n langKey: 'OK'\n },\n descriptionLangKey: 'AreYouSureShareMyContactInfoBot'\n }).then(() => {\n return this.managers.appMessagesManager.sendContact(peerId, rootScope.myId);\n });\n }\n\n public setPeerColorToElement({\n peerId,\n element,\n messageHighlighting,\n colorAsOut,\n color\n }: {\n peerId: PeerId,\n element: HTMLElement,\n messageHighlighting?: boolean,\n colorAsOut?: boolean,\n color?: PeerColor\n }) {\n const colorProperty = '--peer-color-rgb';\n const borderBackgroundProperty = '--peer-border-background';\n // if(!peerId) {\n // element.style.removeProperty(colorProperty);\n // element.style.removeProperty(borderBackgroundProperty);\n // return;\n // }\n\n const peer = apiManagerProxy.getPeer(peerId);\n let peerColorRgbValue: string, peerBorderBackgroundValue: string;\n if(messageHighlighting || colorAsOut) {\n const colors = getPeerColorsByPeer(peer);\n const length = colors.length;\n const property = messageHighlighting ? 'message-empty' : 'message-out';\n peerColorRgbValue = `var(--${property}-primary-color-rgb)`;\n peerBorderBackgroundValue = `var(--${property}-peer-${Math.max(1, length)}-border-background)`;\n } else {\n const colorIndex = color?.color ?? getPeerColorIndexByPeer(peer);\n if(colorIndex === -1) {\n element.style.removeProperty(colorProperty);\n element.style.removeProperty(borderBackgroundProperty);\n return;\n }\n\n peerColorRgbValue = `var(--peer-${colorIndex}-color-rgb)`;\n peerBorderBackgroundValue = `var(--peer-${colorIndex}-border-background)`;\n }\n\n element.style.setProperty(colorProperty, peerColorRgbValue);\n element.style.setProperty(borderBackgroundProperty, peerBorderBackgroundValue);\n }\n\n public async initGifting() {\n const appConfig = await this.managers.apiManager.getAppConfig();\n const user = await this.managers.appUsersManager.resolveUsername(appConfig.premium_bot_username);\n const peerId = user.id.toPeerId(false);\n this.managers.appMessagesManager.sendText({peerId, text: '/gift'});\n this.setInnerPeer({peerId});\n }\n\n public onEmojiStickerClick = async({event, container, managers, peerId, middleware}: {\n event: Event,\n container: HTMLElement,\n managers: AppManagers,\n peerId: PeerId,\n middleware: Middleware\n }) => {\n cancelEvent(event);\n\n const bubble = findUpClassName(container, 'bubble');\n const emoji = container.dataset.stickerEmoji;\n\n const animation = !container.classList.contains('custom-emoji') ? lottieLoader.getAnimation(container) : undefined;\n if(animation?.paused) {\n const doc = await managers.appStickersManager.getAnimatedEmojiSoundDocument(emoji);\n if(doc) {\n const audio = document.createElement('audio');\n audio.style.display = 'none';\n container.parentElement.append(audio);\n\n try {\n const url = await appDownloadManager.downloadMediaURL({media: doc});\n\n audio.src = url;\n safePlay(audio);\n await onMediaLoad(audio, undefined, true);\n\n audio.addEventListener('ended', () => {\n audio.src = '';\n audio.remove();\n }, {once: true});\n } catch(err) {\n\n }\n }\n\n animation.autoplay = true;\n animation.restart();\n }\n\n if(!peerId.isUser() || !liteMode.isAvailable('effects_emoji')) {\n return false;\n }\n\n const activeAnimations: Set<{}> = (container as any).activeAnimations ??= new Set();\n if(activeAnimations.size >= 3) {\n return true;\n }\n\n const doc = await managers.appStickersManager.getAnimatedEmojiSticker(emoji, true);\n if(!doc) {\n return false;\n }\n\n const data: SendMessageEmojiInteractionData = (container as any).emojiData ??= {\n a: [],\n v: 1\n };\n\n const sendInteractionThrottled: () => void = (container as any).sendInteractionThrottled ??= throttle(() => {\n const length = data.a.length;\n if(!length) {\n return;\n }\n\n const firstTime = data.a[0].t;\n\n data.a.forEach((a) => {\n a.t = (a.t - firstTime) / 1000;\n });\n\n const {peerId, threadId} = this.chat;\n\n const bubble = findUpClassName(container, 'bubble');\n managers.appMessagesManager.setTyping(peerId, {\n _: 'sendMessageEmojiInteraction',\n msg_id: getServerMessageId(+bubble.dataset.mid),\n emoticon: emoji,\n interaction: {\n _: 'dataJSON',\n data: JSON.stringify(data)\n }\n }, true, threadId);\n\n data.a.length = 0;\n }, 1000, false);\n\n const o = {};\n activeAnimations.add(o);\n\n const isOut = bubble ? bubble.classList.contains('is-out') : undefined;\n const {animationDiv} = wrapStickerAnimation({\n doc,\n middleware,\n side: isOut ? 'right' : 'left',\n size: 360,\n target: container,\n play: true,\n withRandomOffset: true,\n onUnmount: () => {\n activeAnimations.delete(o);\n },\n scrollable: this.chat.bubbles.scrollable\n });\n\n if(isOut !== undefined && !isOut) {\n animationDiv.classList.add('reflect-x');\n }\n\n // using a trick here: simulated event from interlocutor's interaction won't fire ours\n if(event.isTrusted) {\n data.a.push({\n i: 1,\n t: Date.now()\n });\n\n sendInteractionThrottled();\n }\n\n return true;\n // });\n }\n}\n\nconst appImManager = new AppImManager();\nMOUNT_CLASS_TO && (MOUNT_CLASS_TO.appImManager = appImManager);\nexport default appImManager;\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDocument} from '../lib/appManagers/appDocsManager';\nimport MEDIA_MIME_TYPES_SUPPORTED from '../environment/mediaMimeTypesSupport';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../helpers/dom/clickEvent';\nimport findUpClassName from '../helpers/dom/findUpClassName';\nimport findUpTag from '../helpers/dom/findUpTag';\nimport setInnerHTML from '../helpers/dom/setInnerHTML';\nimport mediaSizes from '../helpers/mediaSizes';\nimport SearchListLoader from '../helpers/searchListLoader';\nimport {Message, MessageMedia, WebPage} from '../layer';\nimport appDownloadManager from '../lib/appManagers/appDownloadManager';\nimport appImManager from '../lib/appManagers/appImManager';\nimport {MyMessage} from '../lib/appManagers/appMessagesManager';\nimport {MyPhoto} from '../lib/appManagers/appPhotosManager';\nimport canSaveMessageMedia from '../lib/appManagers/utils/messages/canSaveMessageMedia';\nimport getMediaFromMessage from '../lib/appManagers/utils/messages/getMediaFromMessage';\nimport wrapRichText from '../lib/richTextProcessor/wrapRichText';\nimport {MediaSearchContext} from './appMediaPlaybackController';\nimport AppMediaViewerBase, {MEDIA_VIEWER_CLASSNAME} from './appMediaViewerBase';\nimport {ButtonMenuItemOptionsVerifiable} from './buttonMenu';\nimport PopupDeleteMessages from './popups/deleteMessages';\nimport PopupForward from './popups/forward';\nimport Scrollable from './scrollable';\nimport appSidebarRight from './sidebarRight';\nimport AppSharedMediaTab from './sidebarRight/tabs/sharedMedia';\nimport PopupElement from './popups';\nimport {ChatType} from './chat/chat';\nimport getFwdFromName from '../lib/appManagers/utils/messages/getFwdFromName';\nimport TranslatableMessage from './translatableMessage';\nimport {MAX_FILE_SAVE_SIZE} from '../lib/mtproto/mtproto_config';\nimport {i18n} from '../lib/langPack';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport wrapWebPageDescription from './wrappers/webPageDescription';\nimport Button from './button';\n\ntype AppMediaViewerTargetType = {\n element: HTMLElement,\n mid: number,\n peerId: PeerId,\n message?: MyMessage,\n index?: number\n};\n\nexport const onMediaCaptionClick = (caption: HTMLElement, e: MouseEvent) => {\n const a = findUpTag(e.target, 'A');\n if(!a || a.classList.contains('timestamp')) {\n return;\n }\n\n const spoiler = findUpClassName(e.target, 'spoiler');\n if(a instanceof HTMLAnchorElement && (!spoiler || caption.classList.contains('is-spoiler-visible'))) { // close viewer if it's t.me/ redirect\n const onclick = a.getAttribute('onclick');\n if(!onclick || onclick.includes('showMaskedAlert')) {\n return;\n }\n\n cancelEvent(e);\n return () => {\n a.click();\n };\n }\n};\n\nexport default class AppMediaViewer extends AppMediaViewerBase<'caption', 'delete' | 'forward', AppMediaViewerTargetType> {\n protected listLoader: SearchListLoader;\n protected btnMenuForward: ButtonMenuItemOptionsVerifiable;\n protected btnMenuDownload: ButtonMenuItemOptionsVerifiable;\n protected btnMenuDelete: ButtonMenuItemOptionsVerifiable;\n\n get searchContext() {\n return this.listLoader.searchContext;\n }\n\n constructor(protected local?: boolean, sponsored?: boolean) {\n super(new SearchListLoader({\n processItem: (item) => {\n const isForDocument = this.searchContext.inputFilter._ === 'inputMessagesFilterDocument';\n const {mid, peerId} = item;\n const media = getMediaFromMessage(item, true);\n\n if(!media) return;\n\n if(isForDocument && !AppMediaViewer.isMediaCompatibleForDocumentViewer(media)) {\n return;\n }\n\n return {element: null as HTMLElement, mid, peerId};\n }\n }), ['delete', 'forward'], sponsored ? 60 : 0);\n\n this.listLoader.onEmptied = () => {\n this.close();\n };\n\n /* const stub = document.createElement('div');\n stub.classList.add(MEDIA_VIEWER_CLASSNAME + '-stub');\n this.content.main.prepend(stub); */\n\n this.content.caption = document.createElement('div');\n this.content.caption.classList.add(MEDIA_VIEWER_CLASSNAME + '-caption', 'spoilers-container'/* , 'media-viewer-stub' */);\n\n let captionTimeout: number;\n const setCaptionTimeout = () => {\n if(captionTimeout) {\n clearTimeout(captionTimeout);\n }\n\n captionTimeout = window.setTimeout(() => {\n captionTimeout = undefined;\n this.content.caption.classList.remove('is-focused');\n }, 800);\n };\n this.content.caption.addEventListener('touchstart', () => {\n if(!mediaSizes.isMobile) return;\n\n this.content.caption.classList.add('is-focused');\n\n if(captionTimeout) {\n clearTimeout(captionTimeout);\n captionTimeout = undefined;\n }\n\n document.addEventListener('touchend', setCaptionTimeout, {once: true});\n });\n\n const captionScrollable = new Scrollable(this.content.caption);\n captionScrollable.onAdditionalScroll = setCaptionTimeout;\n\n // this.content.main.append(this.content.caption);\n this.wholeDiv.append(this.content.caption);\n\n attachClickEvent(this.buttons.delete, this.onDeleteClick);\n\n const buttons: ButtonMenuItemOptionsVerifiable[] = [this.btnMenuForward = {\n icon: 'forward',\n text: 'Forward',\n onClick: this.onForwardClick\n }, this.btnMenuDownload = {\n icon: 'download',\n text: 'MediaViewer.Context.Download',\n onClick: this.onDownloadClick\n }, this.btnMenuDelete = {\n icon: 'delete',\n className: 'danger',\n text: 'Delete',\n onClick: this.onDeleteClick\n }];\n\n this.setBtnMenuToggle(buttons);\n\n // * constructing html end\n\n this.setListeners();\n }\n\n protected setListeners() {\n super.setListeners();\n attachClickEvent(this.buttons.forward, this.onForwardClick);\n attachClickEvent(this.author.container, this.onAuthorClick);\n\n const onClick = (e: MouseEvent) => {\n const callback = onMediaCaptionClick(this.content.caption, e);\n if(callback) {\n this.close().then(() => {\n this.content.caption.removeEventListener('click', onClick, {capture: true});\n callback();\n });\n return false;\n }\n };\n\n this.content.caption.addEventListener('click', onClick, {capture: true});\n }\n\n /* public close(e?: MouseEvent) {\n const good = !this.setMoverAnimationPromise;\n const promise = super.close(e);\n\n if(good) { // clear\n this.currentMessageId = 0;\n this.peerId = 0;\n }\n\n return promise;\n } */\n\n protected getMessageByPeer(peerId: PeerId, mid: number) {\n return this.searchContext.isScheduled ? this.managers.appMessagesManager.getScheduledMessageByPeer(peerId, mid) : this.managers.appMessagesManager.getMessageByPeer(peerId, mid);\n }\n\n onPrevClick = async(target: AppMediaViewerTargetType) => {\n this.openMedia({\n message: this.local ? target.message : await this.getMessageByPeer(target.peerId, target.mid),\n index: target.index,\n target: target.element,\n fromRight: -1\n });\n };\n\n onNextClick = async(target: AppMediaViewerTargetType) => {\n this.openMedia({\n message: this.local ? target.message : await this.getMessageByPeer(target.peerId, target.mid),\n index: target.index,\n target: target.element,\n fromRight: 1\n });\n };\n\n onDeleteClick = () => {\n const target = this.target;\n PopupElement.createPopup(\n PopupDeleteMessages,\n target.peerId,\n [target.mid],\n ChatType.Chat,\n () => {\n this.target = {element: this.content.media} as any;\n this.close();\n }\n );\n };\n\n onForwardClick = () => {\n const target = this.target;\n if(target.mid) {\n // appSidebarRight.forwardTab.open([target.mid]);\n PopupElement.createPopup(PopupForward, {\n [target.peerId]: [target.mid]\n }, () => {\n return this.close();\n });\n }\n };\n\n onAuthorClick = async(e: MouseEvent) => {\n let {mid, peerId, message} = this.target;\n if(mid && mid !== Number.MAX_SAFE_INTEGER) {\n const threadId = this.searchContext.threadId;\n message ||= await this.getMessageByPeer(peerId, mid);\n this.close(e)\n // .then(() => mediaSizes.isMobile ? appSidebarRight.sharedMediaTab.closeBtn.click() : Promise.resolve())\n .then(async() => {\n if(mediaSizes.isMobile) {\n const tab = appSidebarRight.getTab(AppSharedMediaTab);\n if(tab) {\n tab.close();\n }\n }\n\n appImManager.setInnerPeer({\n peerId: message.peerId,\n lastMsgId: mid,\n threadId\n });\n });\n }\n };\n\n onDownloadClick = () => {\n const {message, index} = this.target;\n const media = getMediaFromMessage(message, true, index);\n if(!media) return;\n appDownloadManager.downloadToDisc({media, queueId: appImManager.chat.bubbles.lazyLoadQueue.queueId});\n };\n\n private setCaption(message: MyMessage) {\n const isSponsored = !!(message as Message.message).pFlags.sponsored;\n if(isSponsored) {\n this.author.nameEl.append(i18n('SponsoredMessageAd'));\n }\n\n const media = getMediaFromMessage(message, true);\n const richTextOptions: Parameters[1] = {\n maxMediaTimestamp: ((media as MyDocument)?.type === 'video' && (media as MyDocument).duration) || undefined,\n textColor: 'white'\n };\n\n let hasCaption: boolean;\n let html: Parameters[1];\n if(isSponsored) {\n const sponsoredMessage = (message as Message.message).sponsoredMessage;\n const webPage = ((message as Message.message).media as MessageMedia.messageMediaWebPage).webpage as WebPage.webPage;\n html = document.createElement('div');\n hasCaption = true;\n const b = document.createElement('b');\n b.append(wrapEmojiText(sponsoredMessage.title));\n html.append(\n b,\n '\\n',\n wrapWebPageDescription(webPage, {...richTextOptions, entities: webPage.entities}, true)\n );\n\n const button = Button('btn-primary media-viewer-caption-button', {noRipple: true});\n button.append(wrapEmojiText(sponsoredMessage.button_text));\n this.content.caption.append(button);\n this.content.caption.classList.add('has-button');\n\n attachClickEvent(button, () => {\n this.close().then(() => {\n appImManager.onSponsoredBoxClick(message as Message.message);\n });\n });\n } else if(hasCaption = !!(message as Message.message).message) {\n html = TranslatableMessage({\n peerId: message.peerId,\n message: message as Message.message,\n middleware: this.content.mover.middlewareHelper.get(),\n richTextOptions\n });\n }\n\n setInnerHTML(this.content.caption.firstElementChild, html);\n this.content.caption.classList.toggle('hide', !hasCaption);\n // this.content.container.classList.toggle('with-caption', !!caption);\n }\n\n public setSearchContext(context: MediaSearchContext) {\n this.listLoader.setSearchContext(context);\n\n return this;\n }\n\n public async openMedia({\n message,\n index,\n target,\n fromRight = 0,\n reverse = false,\n prevTargets = [],\n nextTargets = [],\n mediaTimestamp\n }: {\n message: MyMessage,\n index?: number,\n target?: HTMLElement,\n fromRight?: number,\n reverse?: boolean,\n prevTargets?: AppMediaViewerTargetType[],\n nextTargets?: AppMediaViewerTargetType[],\n mediaTimestamp?: number\n /* , needLoadMore = true */\n }) {\n if(this.setMoverPromise) return this.setMoverPromise;\n\n const mid = message.mid;\n const fromId = (message as Message.message).fwd_from && !message.fromId ? getFwdFromName((message as Message.message).fwd_from) : message.fromId;\n const media = getMediaFromMessage(message, true, index);\n\n const isSponsored = !!(message as Message.message).pFlags.sponsored;\n const noAuthor = isSponsored;\n const noForwards = await this.managers.appPeersManager.noForwards(message.peerId);\n const isServiceMessage = message._ === 'messageService';\n const cantForwardMessage = isServiceMessage || noAuthor || !(await this.managers.appMessagesManager.canForward(message));\n const cantDownloadMessage = (isServiceMessage ? noForwards : cantForwardMessage && !isSponsored) || !canSaveMessageMedia(message);\n const a: [(HTMLElement | ButtonMenuItemOptionsVerifiable)[], boolean][] = [\n [[this.buttons.forward, this.btnMenuForward], cantForwardMessage],\n [[this.buttons.download, this.btnMenuDownload], cantDownloadMessage],\n [[this.buttons.delete, this.btnMenuDelete], !(await this.managers.appMessagesManager.canDeleteMessage(message))]\n ];\n\n a.forEach(([buttons, hide]) => {\n buttons.forEach((button) => {\n if(button instanceof HTMLElement) {\n button.classList.toggle('hide', hide);\n } else {\n button.verify = () => !hide;\n }\n });\n });\n\n this.wholeDiv.classList.toggle('no-forwards', cantDownloadMessage);\n\n this.setCaption(message);\n const promise = super._openMedia({\n media: media as MyPhoto | MyDocument,\n timestamp: message.date,\n fromId,\n fromRight,\n target,\n reverse,\n prevTargets,\n nextTargets,\n message,\n mediaTimestamp,\n noAuthor\n /* , needLoadMore */\n });\n this.target.mid = mid;\n this.target.peerId = message.peerId;\n this.target.message = message;\n this.target.index = index;\n\n return promise;\n }\n\n public static isMediaCompatibleForDocumentViewer(media: MyPhoto | MyDocument) {\n return (media._ === 'photo' || MEDIA_MIME_TYPES_SUPPORTED.has(media.mime_type) && media.size <= MAX_FILE_SAVE_SIZE);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {LangPackKey, i18n} from '../../lib/langPack';\nimport Row from '../row';\nimport {PREMIUM_FEATURES_COLORS, PremiumPromoFeature} from './featuresConfig';\nimport TransitionSlider from '../transition';\nimport Icon from '../icon';\nimport {PopupPremiumProps} from '../popups/premium';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport CheckboxField from '../checkboxField';\nimport {PremiumGiftCodeOption, PremiumSubscriptionOption} from '../../layer';\nimport wrapRichText from '../../lib/richTextProcessor/wrapRichText';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {onMediaCaptionClick} from '../appMediaViewer';\nimport {formatMonthsDuration} from '../../helpers/date';\nimport wrapPeerTitle from '../wrappers/peerTitle';\nimport getPeerId from '../../lib/appManagers/utils/peers/getPeerId';\nimport rootScope from '../../lib/rootScope';\nimport {PeerTitleOptions} from '../peerTitle';\nimport {InviteLink} from '../sidebarLeft/tabs/sharedFolder';\nimport anchorCallback from '../../helpers/dom/anchorCallback';\nimport PopupGiftLink from '../popups/giftLink';\n\ntype PromoSlideTabOptions = PopupPremiumProps & {\n container: HTMLElement,\n header: HTMLElement,\n body: HTMLElement\n};\n\nexport function premiumOptionsForm({\n periodOptions,\n onOption,\n checked = 0,\n users = 1,\n discountInTitle\n}: {\n periodOptions: T[],\n onOption: (option: T) => void,\n checked?: number,\n users?: number,\n discountInTitle?: boolean\n}) {\n const isGiftCode = periodOptions[0]._ === 'premiumGiftCodeOption';\n const shortestOption = periodOptions.slice().sort((a, b) => a.months - b.months)[0];\n const wrapCurrency = (amount: number | string) => paymentsWrapCurrencyAmount(amount, shortestOption.currency, false, true, true);\n const keys: {[key: number]: LangPackKey} = isGiftCode ? undefined : {\n 12: 'PremiumTierAnnual',\n 6: 'PremiumTierSemiannual',\n 1: 'PremiumTierMonthly'\n };\n\n const rows = periodOptions.map((option, idx) => {\n const amountPerUser = +option.amount / (isGiftCode ? (option as PremiumGiftCodeOption).users : 1);\n let title = keys ? i18n(keys[option.months] || 'Months', [option.months]) : formatMonthsDuration(option.months, false);\n let subtitle: HTMLElement;\n if(isGiftCode) {\n subtitle = i18n('Multiplier', [wrapCurrency(amountPerUser), users]);\n } else if(option !== shortestOption) {\n subtitle = i18n('PricePerMonth', [wrapCurrency(+option.amount / option.months)]);\n }\n\n if(option !== shortestOption) {\n const span = document.createElement('span');\n const badge = document.createElement('span');\n badge.classList.add('popup-gift-premium-discount');\n const shortestAmount = +shortestOption.amount * option.months / shortestOption.months;\n const discount = Math.round((1 - +option.amount / shortestAmount) * 100);\n badge.textContent = '-' + discount + '%';\n span.append(badge, discountInTitle ? title : subtitle);\n if(discountInTitle) {\n title = span;\n } else {\n subtitle = span;\n }\n }\n\n const checkboxField = new CheckboxField({\n checked: idx === checked,\n round: true,\n name: 'premium-period',\n asRadio: true\n });\n\n const row = new Row({\n title,\n checkboxField,\n clickable: true,\n subtitle,\n rightTextContent: wrapCurrency(isGiftCode ? amountPerUser * users : option.amount)\n });\n\n row.container.classList.add('popup-gift-premium-option');\n\n return row;\n });\n\n const form = document.createElement('form');\n form.classList.add('popup-gift-premium-options');\n form.append(...rows.map((row) => row.container));\n\n const getSelectedOption = () => periodOptions[rows.findIndex((row) => row.checkboxField.checked)];\n\n form.addEventListener('change', () => {\n onOption(getSelectedOption());\n });\n\n onOption(getSelectedOption());\n\n return form;\n}\n\nexport function getGiftDetails(options: PopupPremiumProps) {\n const gift = options.gift;\n if(!gift) {\n return;\n }\n\n let fromPeerId: PeerId, toPeerId: PeerId;\n if(gift._ === 'payments.checkedGiftCode') {\n fromPeerId = getPeerId(gift.from_id) || options.peerId;\n } else {\n fromPeerId = options.isOut ? rootScope.myId : options.peerId;\n }\n\n toPeerId = options.isOut ? options.peerId : rootScope.myId;\n toPeerId ||= rootScope.myId;\n\n const isOutbound = toPeerId !== rootScope.myId;\n const isUnclaimed = gift._ !== 'payments.checkedGiftCode' || !gift.used_date;\n return {fromPeerId, toPeerId, isOutbound, isUnclaimed, gift};\n}\n\nexport default class PromoSlideTab {\n public tab: HTMLElement;\n public transition: ReturnType;\n public selectFeature: (feature: PremiumPromoFeatureType) => Promise;\n public selectPeriod: (option: PremiumSubscriptionOption) => void;\n public close: (callback?: () => void) => void;\n\n constructor(public options: PromoSlideTabOptions) {\n this.initPremiumTab(options);\n }\n\n private async initPremiumTab(options: PromoSlideTabOptions) {\n const tab = this.tab = document.createElement('div');\n tab.append(options.header, options.body);\n tab.classList.add('premium-promo-tab', 'not-bottom', 'scrollable', 'scrollable-y');\n tab.addEventListener('scroll', this.onTabScroll);\n\n options.body.append(...[\n this.createImageContainer(),\n await this.createHeading(),\n options.type === 'premium' && !options.isPremiumActive && this.createOptionsForm(),\n this.createFeaturesContainer()\n ].filter(Boolean));\n options.container.classList.add('fixed-size');\n }\n\n private async createHeading() {\n const headingTextContainer = document.createElement('div');\n headingTextContainer.classList.add('popup-premium-heading-text-container');\n const headingTextTitle = document.createElement('div');\n headingTextTitle.classList.add('popup-premium-heading-text-title');\n const headingTextDescription = document.createElement('div');\n headingTextDescription.classList.add('popup-premium-heading-text-description');\n\n const wrapTitleOptions: PeerTitleOptions = {onlyFirstName: true};\n\n let title: HTMLElement, description: HTMLElement;\n const giftDetails = getGiftDetails(this.options);\n if(giftDetails) {\n headingTextTitle.classList.add('smaller-text');\n const {fromPeerId, toPeerId, isOutbound, isUnclaimed, gift} = giftDetails;\n const giftMonths = i18n('GiftMonths', [gift.months]);\n if(isOutbound) {\n title = i18n(\n 'GiftModal.Title.You',\n [\n await wrapPeerTitle({...wrapTitleOptions, peerId: toPeerId}),\n giftMonths\n ]\n );\n } else {\n title = i18n(\n fromPeerId ?\n 'TelegramPremiumUserGiftedPremiumDialogTitleWithPlural' :\n 'TelegramPremiumUserGiftedPremiumDialogTitleWithPluralSomeone',\n [\n fromPeerId && await wrapPeerTitle({...wrapTitleOptions, peerId: fromPeerId}),\n giftMonths\n ].filter(Boolean)\n );\n }\n\n if(isOutbound) {\n description = i18n(\n 'TelegramPremiumUserGiftedPremiumOutboundDialogSubtitle',\n [await wrapPeerTitle({...wrapTitleOptions, peerId: toPeerId})]\n );\n } else {\n if(gift._ === 'messageActionGiftPremium') {\n description = i18n('TelegramPremiumUserGiftedPremiumDialogSubtitle');\n } else {\n const url = 'https://t.me/giftcode/' + gift.slug;\n\n const inviteLink = new InviteLink({\n button: false,\n listenerSetter: this.options.listenerSetter,\n url\n });\n\n let text: HTMLElement;\n if(!isUnclaimed) {\n text = i18n('BoostingLinkUsed');\n } else {\n text = i18n(\n 'GiftCode.ShareReceived',\n [\n anchorCallback(async() => {\n this.close();\n PopupGiftLink.shareGiftLink(url);\n })\n ]\n );\n }\n\n description = document.createElement('div');\n description.append(text, inviteLink.container);\n }\n }\n } else {\n title = this.options.isPremiumActive ? i18n('TelegramPremiumSubscribedTitle') : i18n('Premium.Boarding.Title');\n description = this.options.isPremiumActive ? i18n('TelegramPremiumSubscribedSubtitle') : i18n('Premium.Boarding.Info');\n }\n\n headingTextTitle.append(title);\n headingTextDescription.append(description);\n headingTextContainer.append(headingTextTitle, headingTextDescription);\n return headingTextContainer;\n }\n\n private createFeaturesContainer() {\n const featuresContainer = document.createElement('div');\n featuresContainer.classList.add('popup-premium-features-container');\n featuresContainer.append(...[\n ...this.createFeatures(this.options.features, this.options.order),\n this.options.type === 'premium' && this.options.premiumPromo.status_text && this.createStatusText()\n ].filter(Boolean));\n return featuresContainer;\n }\n\n private createImageContainer() {\n const premiumImageContainer = document.createElement('div');\n premiumImageContainer.classList.add('popup-premium-header-image-container');\n const premiumImage = document.createElement('img');\n premiumImage.src = `assets/img/premium-star${window.devicePixelRatio > 1 ? '@2x' : ''}.png`;\n premiumImage.classList.add('popup-premium-header-image');\n premiumImageContainer.append(premiumImage);\n return premiumImageContainer;\n }\n\n private createStatusText() {\n const statusText = document.createElement('div');\n statusText.classList.add('popup-premium-status-text');\n const wrapped = wrapRichText(this.options.premiumPromo.status_text, {entities: this.options.premiumPromo.status_entities});\n setInnerHTML(statusText, wrapped);\n\n const onClick = (e: MouseEvent) => {\n const callback = onMediaCaptionClick(statusText, e);\n if(!callback) {\n return;\n }\n\n this.close(() => {\n statusText.removeEventListener('click', onClick, {capture: true});\n callback();\n });\n };\n\n statusText.addEventListener('click', onClick, {capture: true});\n return statusText;\n }\n\n private createOptionsForm() {\n return premiumOptionsForm({\n periodOptions: this.options.premiumPromo.period_options,\n onOption: (option) => {\n this.selectPeriod?.(option);\n }\n });\n }\n\n private createFeatures(features: PremiumPromoFeature[], order: PremiumPromoFeatureType[]) {\n return order.map((type, idx) => {\n const f = features.find((feature) => feature.feature === type);\n const row = new Row({\n titleLangKey: f.titleLangKey,\n titleLangArgs: f.titleLangArgs,\n subtitleLangKey: f.subtitleLangKey,\n subtitleLangArgs: f.subtitleLangArgs,\n clickable: async() => {\n this.transition(1);\n await this.selectFeature(f.feature);\n }\n });\n\n const media = row.createMedia('small');\n media.classList.add('premium-promo-tab-icon');\n media.append(Icon(f.icon));\n media.style.backgroundColor = PREMIUM_FEATURES_COLORS[idx];\n\n if(f.new) {\n const badge = i18n('New');\n badge.classList.add('row-title-badge');\n row.title.append(badge);\n badge.style.backgroundColor = PREMIUM_FEATURES_COLORS[idx];\n }\n\n return row.container;\n });\n }\n\n private onTabScroll = () => {\n const {tab, options} = this;\n const {scrollTop, scrollHeight} = tab;\n options.header.classList.toggle('is-visible', scrollTop > 100);\n options.header.classList.toggle('not-top', scrollTop > 0);\n tab.classList.toggle('not-bottom', (scrollHeight - scrollTop) > tab.offsetHeight);\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport LimitLine from '../limit';\nimport {_i18n} from '../../lib/langPack';\nimport {PremiumPromoFeature} from './featuresConfig';\nimport {AppManagers} from '../../lib/appManagers/managers';\n\nexport default class LimitsFeature {\n public limits: HTMLElement;\n\n public async construct(options: {limits: PremiumPromoFeature['content'], managers: AppManagers}) {\n this.limits = document.createElement('div');\n this.limits.classList.add('limits-list');\n const promises = options.limits.map(async(limit, index) => {\n const [free, premium] = limit.limitType ? await Promise.all([\n options.managers.apiManager.getLimit(limit.limitType, false),\n options.managers.apiManager.getLimit(limit.limitType, true)\n ]) : [];\n\n const limitTextContainer = document.createElement('div');\n limitTextContainer.classList.add('limit-text-container');\n if(!index) {\n limitTextContainer.classList.add('no-margin');\n }\n const limitContainer = document.createElement('div');\n limitContainer.classList.add('limit');\n const limitTitle = document.createElement('div');\n limitTitle.classList.add('limit-title');\n _i18n(limitTitle, limit.titleLangKey, limit.titleLangArgs);\n const limitSubtitle = document.createElement('div');\n limitSubtitle.classList.add('limit-subtitle');\n _i18n(limitSubtitle, limit.subtitleLangKey, limit.subtitleLangArgs);\n const limitLine = new LimitLine({\n limitFree: free ?? limit.free,\n limitPremium: premium ?? limit.premium,\n color: limit.backgroundColor\n });\n limitTextContainer.append(limitTitle, limitSubtitle);\n limitContainer.append(limitTextContainer, limitLine.container);\n return limitContainer;\n });\n const containers = await Promise.all(promises);\n this.limits.append(...containers);\n return this.limits;\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport Row from '../row';\nimport {HelpPremiumPromo} from '../../layer';\nimport {avatarNew} from '../avatarNew';\nimport {Middleware} from '../../helpers/middleware';\nimport {PremiumPromoFeature} from './featuresConfig';\n\nexport default class UpgradedStoriesFeature {\n public features: HTMLElement;\n public avatar: ReturnType;\n\n constructor(options: {features: PremiumPromoFeature['content'], premiumPromo: HelpPremiumPromo, middleware: Middleware}) {\n this.avatar = avatarNew({\n middleware: options.middleware,\n size: 84,\n isBig: true,\n withStories: true,\n peerId: options.premiumPromo.users[0].id.toPeerId(false)\n });\n\n const features = document.createElement('div');\n features.classList.add('story-features-list');\n this.features = features;\n options.features.forEach((f) => {\n const feature = document.createElement('div');\n feature.classList.add('story-feature');\n const row = new Row({\n titleLangKey: f.titleLangKey,\n titleLangArgs: f.titleLangArgs,\n subtitleLangKey: f.subtitleLangKey,\n subtitleLangArgs: f.subtitleLangArgs,\n icon: f.icon,\n iconClasses: ['row-icon-custom-color'],\n clickable: false\n });\n\n row.container.style.setProperty('--custom-icon-color', f.iconColor);\n feature.append(row.container);\n features.append(feature);\n });\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport LazyLoadQueue from '../lazyLoadQueue';\nimport SuperStickerRenderer from '../emoticonsDropdown/tabs/SuperStickerRenderer';\nimport {AnimationItemGroup} from '../animationIntersector';\nimport {getMiddleware, MiddlewareHelper} from '../../helpers/middleware';\nimport wrapStickerAnimation from '../wrappers/stickerAnimation';\nimport getStickerEffectThumb from '../../lib/appManagers/utils/stickers/getStickerEffectThumb';\nimport {STICKER_EFFECT_MULTIPLIER} from '../wrappers/sticker';\nimport {Document} from '../../layer';\nimport {EMOTICONSSTICKERGROUP} from '../emoticonsDropdown';\n\nconst ANIMATION_GROUP: AnimationItemGroup = EMOTICONSSTICKERGROUP;\n\nexport default class PremiumStickersCarousel {\n private superStickerRenderer: SuperStickerRenderer;\n private ignoreUnmount: boolean;\n private stickersMiddlewareHelper: MiddlewareHelper;\n private destroyed: boolean;\n\n private container: HTMLElement;\n private activeStickerIndex: number;\n private stickers: Document.document[];\n private lazyLoadQueue: LazyLoadQueue;\n\n constructor(options: {\n topSection: HTMLElement,\n managers: AppManagers\n }) {\n this.initStickersCarousel(options);\n }\n\n public cleanup() {\n this.destroyed = true;\n }\n\n private assignVisibility(topSiblingIndex: number, bottomSiblingIndex: number) {\n this.container.children[topSiblingIndex].classList.add('visible');\n this.container.children[this.activeStickerIndex].classList.add('active');\n this.container.children[bottomSiblingIndex].classList.add('visible');\n }\n\n private runStickerAnimation() {\n wrapStickerAnimation({\n doc: this.stickers[this.activeStickerIndex],\n middleware: this.stickersMiddlewareHelper.get(),\n side: 'left',\n size: 200 * STICKER_EFFECT_MULTIPLIER,\n target: this.container.children[this.activeStickerIndex] as HTMLElement,\n play: true,\n fullThumb: getStickerEffectThumb(this.stickers[this.activeStickerIndex]),\n relativeEffect: true,\n loopEffect: false,\n onUnmount: () => {\n if(this.ignoreUnmount) {\n this.ignoreUnmount = undefined;\n return;\n }\n if(!this.destroyed) {\n this.previousSticker();\n }\n }\n });\n }\n\n private previousSticker() {\n const stickersLength = this.stickers.length;\n this.stickersMiddlewareHelper.clean();\n Array.from(this.container.children).forEach((child) => child.classList.remove('top-sibling', 'active', 'bottom-sibling', 'visible'));\n if((this.activeStickerIndex - 1) < 0) {\n this.activeStickerIndex = stickersLength - 1;\n } else {\n --this.activeStickerIndex;\n }\n\n const topSiblingIndex = this.activeStickerIndex === 0 ? stickersLength - 1 : this.activeStickerIndex - 1;\n const bottomSiblingIndex = this.activeStickerIndex === (stickersLength - 1) ? 0 : this.activeStickerIndex + 1;\n this.assignVisibility(topSiblingIndex, bottomSiblingIndex);\n this.assignSiblings();\n this.runStickerAnimation();\n }\n\n private nextSticker() {\n const stickersLength = this.stickers.length;\n this.stickersMiddlewareHelper.clean();\n Array.from(this.container.children).forEach((child) => child.classList.remove('top-sibling', 'active', 'bottom-sibling', 'visible'));\n if((this.activeStickerIndex + 1) === stickersLength) {\n this.activeStickerIndex = 0;\n } else {\n ++this.activeStickerIndex;\n }\n\n const topSiblingIndex = (this.activeStickerIndex - 1) < 0 ? stickersLength - 1 : this.activeStickerIndex - 1;\n const bottomSiblingIndex = this.activeStickerIndex === (stickersLength - 1) ? 0 : this.activeStickerIndex + 1;\n this.assignVisibility(topSiblingIndex, bottomSiblingIndex);\n this.assignSiblings();\n this.runStickerAnimation();\n }\n\n private assignSiblings() {\n const siblingsCount = 3;\n\n for(let i = -siblingsCount; i <= siblingsCount; ++i) {\n const siblingIndex = (this.activeStickerIndex + i + this.stickers.length) % this.stickers.length;\n const siblingElement = this.container.children[siblingIndex];\n\n if(i < 0) {\n siblingElement.classList.add('top-sibling');\n } else if(i > 0) {\n siblingElement.classList.add('bottom-sibling');\n }\n }\n }\n\n private async initStickersCarousel(options: {topSection: HTMLElement; managers: AppManagers}) {\n options.topSection.classList.add('no-padding');\n const stickers = await options.managers.appStickersManager.getPromoPremiumStickers();\n this.stickersMiddlewareHelper = getMiddleware();\n this.lazyLoadQueue = new LazyLoadQueue();\n this.superStickerRenderer = new SuperStickerRenderer({\n regularLazyLoadQueue: this.lazyLoadQueue,\n group: 'none',\n managers: options.managers,\n visibleRenderOptions: {\n withLock: false,\n width: 200,\n height: 200\n }\n });\n this.stickers = stickers;\n this.container = document.createElement('div');\n this.container.classList.add('premium-stickers-carousel');\n this.activeStickerIndex = Math.round(this.stickers.length / 2);\n stickers.forEach((sticker, index) => {\n const carouselItem = document.createElement('div');\n carouselItem.classList.add('premium-stickers-carousel-item');\n const element = this.superStickerRenderer.renderSticker(sticker);\n carouselItem.append(element);\n carouselItem.addEventListener('click', (e) => {\n e.stopPropagation();\n if(index !== this.activeStickerIndex) {\n this.ignoreUnmount = true;\n if(carouselItem.classList.contains('bottom-sibling')) {\n this.nextSticker();\n }\n if(carouselItem.classList.contains('top-sibling')) {\n this.previousSticker();\n }\n }\n });\n this.container.append(carouselItem);\n });\n this.assignVisibility(this.activeStickerIndex - 1, this.activeStickerIndex + 1);\n this.assignSiblings();\n this.runStickerAnimation();\n\n options.topSection.addEventListener('click', (e) => {\n e.stopPropagation();\n });\n options.topSection.append(this.container);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {PremiumPromoFeature} from './featuresConfig';\nimport {i18n} from '../../lib/langPack';\nimport {HelpPremiumPromo} from '../../layer';\nimport renderImageFromUrl from '../../helpers/dom/renderImageFromUrl';\nimport wrapVideo from '../wrappers/video';\nimport Icon from '../icon';\nimport LimitsFeature from './limitsFeature';\nimport UpgradedStoriesFeature from './upgradedStoriesFeature';\nimport PremiumStickersCarousel from './premiumStickersCarousel';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport TransitionSlider from '../transition';\nimport {Middleware} from '../../helpers/middleware';\nimport {PopupPremiumProps} from '../popups/premium';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\n\nexport default class FeaturesCarousel {\n private features: PremiumPromoFeature[];\n public container: HTMLElement;\n private carouselItems: HTMLElement[];\n private outerLayoutUpdater: (feature: any) => void;\n private selectedFeature: PremiumPromoFeatureType;\n private managers: AppManagers;\n private dotsContainer: HTMLDivElement;\n public controlsContainer: HTMLDivElement;\n public slideIndex: number;\n private header: HTMLElement;\n private carouselItemsContainer: HTMLDivElement;\n private premiumPromo: HelpPremiumPromo;\n private premiumStickersCarousel: PremiumStickersCarousel;\n private middleware: Middleware;\n\n private selectTab: ReturnType;\n\n constructor(options: PopupPremiumProps & {\n header: HTMLElement\n }) {\n this.middleware = options.middleware;\n this.header = options.header;\n this.managers = options.managers;\n this.premiumPromo = options.premiumPromo;\n this.features = options.features;\n this.container = document.createElement('div');\n this.container.classList.add('carousel-container');\n this.carouselItems = this.features.map((feature) => {\n const container = document.createElement('div');\n container.classList.add('carousel-item', 'tabs-tab');\n if(feature.videoPosition || feature.type === 'premium-stickers') {\n const title = document.createElement('div');\n title.classList.add('carousel-item-content-title');\n const subtitle = document.createElement('div');\n subtitle.classList.add('carousel-item-content-subtitle');\n const bottomSection = document.createElement('div');\n bottomSection.classList.add('carousel-item-content-bottom-section');\n title.append(i18n(feature.titleLangKey, feature.titleLangArgs));\n subtitle.append(i18n(feature.subtitleLangKey, feature.subtitleLangArgs));\n bottomSection.append(title);\n bottomSection.append(subtitle);\n container.append(bottomSection);\n }\n\n return container;\n });\n\n this.header.classList.add('absolute');\n\n this.carouselItemsContainer = document.createElement('div');\n this.carouselItemsContainer.classList.add('carousel-items-container', 'tabs-container');\n this.selectTab = TransitionSlider({\n content: this.carouselItemsContainer,\n type: 'premiumTabs',\n transitionTime: 250,\n animateFirst: false\n });\n this.carouselItemsContainer.append(...this.carouselItems);\n this.container.append(this.carouselItemsContainer);\n\n this.features.forEach((feature, index) => {\n let slideTopSectionContainer = this.carouselItems[index].querySelector('.carousel-item-content-top-section');\n if(!slideTopSectionContainer) {\n slideTopSectionContainer = document.createElement('div');\n slideTopSectionContainer.classList.add('carousel-item-content-top-section');\n this.carouselItems[index].prepend(slideTopSectionContainer);\n }\n\n if(feature.videoPosition) {\n this.downloadVideo(index);\n let frame = slideTopSectionContainer.querySelector('.device-frame');\n if(!frame) {\n const img = document.createElement('img');\n img.classList.add('device-frame-image');\n frame = document.createElement('div');\n frame.classList.add('device-frame');\n frame.append(img);\n renderImageFromUrl(img, 'assets/img/android-device.svg');\n frame.classList.toggle('bottom', feature.videoPosition !== 'top');\n slideTopSectionContainer.append(frame);\n }\n }\n });\n\n this.initCarouselControls(options);\n }\n\n public cleanup() {\n this.premiumStickersCarousel?.cleanup();\n }\n\n public ready(outerLayoutUpdater: (feature: any) => void) {\n this.outerLayoutUpdater = outerLayoutUpdater;\n }\n\n public scrollListener = (e: Event) => {\n const target = e.target as HTMLElement;\n const {scrollTop, scrollHeight} = target;\n target.classList.toggle('top-border', scrollTop > 0);\n target.classList.toggle('bottom-border', (scrollHeight - scrollTop) > target.clientHeight);\n };\n\n private async buildSlide(featureIndex: number) {\n const feature = this.features[featureIndex];\n const slideTopSectionContainer = this.carouselItems[featureIndex].querySelector('.carousel-item-content-top-section') as HTMLElement;\n slideTopSectionContainer.removeEventListener('scroll', this.scrollListener);\n slideTopSectionContainer.removeAttribute('style');\n if(feature.videoPosition) {\n await this.appendVideo(featureIndex, this.carouselItems[featureIndex].querySelector('.device-frame'));\n } else {\n if(feature.type !== 'premium-stickers') {\n slideTopSectionContainer.addEventListener('scroll', this.scrollListener);\n }\n\n switch(feature.type) {\n case 'limits': {\n const hasLimits = !!slideTopSectionContainer.querySelector('.limits-list');\n if(!hasLimits) {\n const limitsFeature = new LimitsFeature();\n const promise = limitsFeature.construct({limits: feature.content, managers: this.managers});\n const limits = limitsFeature.limits;\n slideTopSectionContainer.append(limits);\n slideTopSectionContainer.classList.add('scrollable', 'scrollable-y', 'no-scrollbar', 'bottom-border', 'top-margin');\n await promise;\n }\n break;\n }\n\n case 'upgraded-stories': {\n const hasStories = !!slideTopSectionContainer.querySelector('.story-features-list');\n if(!hasStories) {\n const stories = new UpgradedStoriesFeature({\n middleware: this.middleware,\n features: feature.content,\n premiumPromo: this.premiumPromo\n });\n const aboveTopSection = document.createElement('div');\n aboveTopSection.classList.add('above-top-section');\n aboveTopSection.prepend(stories.avatar.node);\n const title = i18n(feature.titleLangKey);\n title.classList.add('above-top-section-title');\n aboveTopSection.append(title);\n this.carouselItems[featureIndex].prepend(aboveTopSection);\n this.carouselItems[featureIndex].classList.add('upgraded-stories');\n slideTopSectionContainer.append(stories.features);\n }\n slideTopSectionContainer.style.position = 'relative';\n slideTopSectionContainer.classList.add('scrollable', 'scrollable-y', 'no-scrollbar', 'bottom-border');\n break;\n }\n\n case 'premium-stickers': {\n const hasStickers = !!slideTopSectionContainer.querySelector('.premium-stickers-carousel');\n if(!hasStickers) {\n this.premiumStickersCarousel = new PremiumStickersCarousel({\n topSection: slideTopSectionContainer,\n managers: this.managers\n });\n }\n break;\n }\n }\n }\n }\n\n private async processSlideContent(featureIndex: number) {\n let headerText = this.header.querySelector('.popup-title') as HTMLElement;\n const backButton = this.header.querySelector('.back-button') as HTMLElement;\n\n const hasHeader = !!this.features[featureIndex].headerLangKey;\n if(hasHeader) {\n headerText.remove();\n headerText = document.createElement('div');\n headerText.classList.add('popup-title');\n headerText.append(i18n(this.features[featureIndex].headerLangKey));\n this.header.append(headerText);\n }\n\n this.header.classList.toggle('is-visible', !!hasHeader);\n if(!hasHeader) {\n this.header.classList.remove('not-top');\n }\n\n if(this.features[featureIndex].videoPosition || this.features[featureIndex].type === 'premium-stickers') {\n backButton.style.color = '#ffffff';\n this.carouselItems[featureIndex].classList.remove('feature-background');\n this.carouselItemsContainer.classList.remove('full');\n } else {\n backButton.style.color = 'var(--secondary-text-color)';\n this.carouselItems[featureIndex].classList.add('feature-background');\n this.carouselItemsContainer.classList.add('full');\n }\n\n await this.buildSlide(featureIndex);\n }\n\n public async selectSlide(type: PremiumPromoFeatureType) {\n this.selectedFeature = type;\n const featureIndex = this.features.findIndex((f) => f.feature === type);\n await this.processSlideContent(featureIndex);\n const prevIndex = this.slideIndex;\n this.slideIndex = featureIndex;\n this.outerLayoutUpdater?.(this.features.find((feature) => feature.feature === type));\n this.dots(type, featureIndex);\n\n this.selectTab(featureIndex, prevIndex !== undefined);\n }\n\n private dots(type: PremiumPromoFeatureType, featureIndex: number) {\n const dots = this.dotsContainer.querySelectorAll('.popup-premium-controls-dot');\n dots.forEach((node) => {\n node.classList.remove('active');\n node.style.transform = '';\n });\n\n const featureDotEl = this.dotsContainer.querySelector(`[data-feature=${type}]`);\n featureDotEl?.classList.add('active');\n const startFrom = (featureIndex / 2 - 1) < 1 ? 0 : Math.ceil(featureIndex / 2);\n const length = this.features.length;\n const lastIndex = length - 1;\n const maxSteps = Math.ceil(length / 2) - 1;\n if(startFrom < 1) {\n const n = dots[lastIndex - maxSteps + startFrom];\n dots[lastIndex - maxSteps + startFrom - 1].style.transform = 'scale(.75)';\n n && (n.style.transform = 'scale(.5)');\n } else if(startFrom >= 1 && startFrom < maxSteps) {\n const n = dots[lastIndex - maxSteps + startFrom];\n dots[startFrom + 1].style.transform = 'scale(.75)';\n dots[startFrom].style.transform = 'scale(.5)';\n dots[lastIndex - maxSteps + startFrom - 1].style.transform = 'scale(.75)';\n n && (n.style.transform = 'scale(.5)');\n } else {\n dots[startFrom + 1].style.transform = 'scale(.75)';\n dots[startFrom].style.transform = 'scale(.5)';\n }\n\n this.dotsContainer.style.setProperty('--amount', '' + length);\n this.dotsContainer.style.setProperty('--start', '' + startFrom);\n }\n\n private initCarouselControls(options: PopupPremiumProps) {\n this.controlsContainer = document.createElement('div');\n this.controlsContainer.classList.add('popup-premium-controls');\n this.dotsContainer = document.createElement('div');\n this.dotsContainer.classList.add('popup-premium-controls-dots');\n this.controlsContainer.append(this.dotsContainer);\n this.features.forEach((f, i) => this.dotsContainer.append(this.createFeatureDot(options, f.feature, i)));\n attachClickEvent(this.dotsContainer, (e) => {\n e.stopPropagation();\n }, {listenerSetter: options.listenerSetter});\n attachClickEvent(this.container, (e) => {\n const rect = this.container.getBoundingClientRect();\n const selectedFeatureIndex = this.features.findIndex((f) => f.feature === this.selectedFeature);\n const add = (rect.left + rect.width / 2) < e.clientX ? 1 : -1;\n const feature = this.features[selectedFeatureIndex + add];\n feature && this.selectSlide(feature.feature);\n }, {listenerSetter: options.listenerSetter});\n }\n\n private createFeatureDot(options: PopupPremiumProps, feature: PremiumPromoFeatureType, index: number) {\n const dot = document.createElement('div');\n dot.classList.add('popup-premium-controls-dot');\n if(feature === this.selectedFeature) {\n dot.classList.add('active');\n }\n dot.dataset.feature = feature;\n attachClickEvent(dot, (e) => {\n cancelEvent(e);\n if(feature !== this.selectedFeature) {\n this.selectSlide(feature);\n }\n }, {listenerSetter: options.listenerSetter});\n return dot;\n }\n\n private async downloadVideo(featureIndex: number, deviceFrame?: Element, mount = false) {\n const doc = this.features[featureIndex].video;\n if(!doc) {\n return {\n video: undefined as HTMLVideoElement,\n loadPromise: new Promise(() => {})\n };\n }\n\n const wrappedVideo = await wrapVideo({\n doc: doc as any,\n withoutPreloader: true,\n noInfo: true,\n noPlayButton: true,\n middleware: this.middleware,\n ...(mount && {container: deviceFrame as HTMLElement})\n });\n\n return this.features[featureIndex].wrappedVideo = wrappedVideo;\n }\n\n private async appendVideo(featureIndex: number, deviceFrame: Element) {\n if(this.features[featureIndex].builded) {\n return;\n }\n\n this.features[featureIndex].builded = true;\n let shimmer: HTMLElement, premiumIcon: HTMLElement;\n\n let wrappedVideo = this.features[featureIndex].wrappedVideo;\n if(!wrappedVideo?.loaded) {\n shimmer = document.createElement('div');\n shimmer.classList.add('shimmer');\n premiumIcon = Icon('star', 'device-frame-preload-icon');\n deviceFrame.append(...[wrappedVideo?.thumb?.images?.thumb, shimmer, premiumIcon].filter(Boolean));\n }\n\n if(wrappedVideo) {\n deviceFrame.append(this.features[featureIndex].wrappedVideo.video);\n } else {\n wrappedVideo = await this.downloadVideo(featureIndex, deviceFrame, true);\n wrappedVideo.loadPromise.then(() => {\n wrappedVideo.loaded = true;\n });\n }\n\n if(shimmer) {\n wrappedVideo.loadPromise.then(() => {\n shimmer.remove();\n premiumIcon.remove();\n });\n }\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport ButtonIcon from '../buttonIcon';\nimport FeaturesCarousel from './featuresCarousel';\nimport {PopupPremiumProps} from '../popups/premium';\nimport TransitionSlider from '../transition';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\n\ntype FeatureSlideTabOptions = PopupPremiumProps & {\n header: HTMLElement,\n actionButtonContainer: HTMLElement\n};\n\nexport default class FeatureSlideTab {\n private backBtn: HTMLButtonElement;\n public tab: HTMLElement;\n public transition: ReturnType;\n public featureCarousel: FeaturesCarousel;\n\n constructor(options: FeatureSlideTabOptions) {\n this.backBtn = ButtonIcon('left popup-close back-button', {noRipple: true});\n this.initFeaturesTab(options);\n }\n\n public cleanup() {\n this.featureCarousel?.cleanup();\n }\n\n private initFeaturesTab(options: FeatureSlideTabOptions) {\n const tab = document.createElement('div');\n tab.classList.add('premium-feature-tab');\n options.header.querySelector('.popup-close').replaceWith(this.backBtn);\n tab.append(options.header);\n this.featureCarousel = new FeaturesCarousel({\n ...options,\n header: options.header\n });\n tab.append(this.featureCarousel.container, this.featureCarousel.controlsContainer);\n this.tab = tab;\n\n attachClickEvent(this.backBtn, () => {\n this.featureCarousel.slideIndex = undefined;\n this.transition(0);\n }, {listenerSetter: options.listenerSetter});\n }\n\n public setCarouselSlide(feature: PremiumPromoFeatureType) {\n return this.featureCarousel.selectSlide(feature);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MTAppConfig} from '../../lib/mtproto/appConfig';\nimport PopupElement from './index';\nimport PromoSlideTab, {getGiftDetails} from '../premium/promoSlideTab';\nimport TransitionSlider from '../transition';\nimport FeatureSlideTab from '../premium/featureSlideTab';\nimport I18n, {FormatterArguments} from '../../lib/langPack';\nimport Button from '../button';\nimport paymentsWrapCurrencyAmount from '../../helpers/paymentsWrapCurrencyAmount';\nimport {HelpPremiumPromo, MessageAction, PaymentsCheckedGiftCode, PremiumSubscriptionOption} from '../../layer';\nimport {PREMIUM_FEATURES, PremiumPromoFeature} from '../premium/featuresConfig';\nimport Icon from '../icon';\nimport {Middleware} from '../../helpers/middleware';\nimport {AppManagers} from '../../lib/appManagers/managers';\nimport appImManager, {ChatSetPeerOptions} from '../../lib/appManagers/appImManager';\nimport rootScope from '../../lib/rootScope';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport PopupGiftLink from './giftLink';\n\nexport type PopupPremiumProps = {\n order: PremiumPromoFeatureType[],\n features: PremiumPromoFeature[],\n middleware: Middleware,\n managers: AppManagers,\n premiumPromo: HelpPremiumPromo,\n appConfig: MTAppConfig,\n isPremiumActive?: boolean,\n gift: MessageAction.messageActionGiftPremium | PaymentsCheckedGiftCode,\n peerId: PeerId,\n isOut: boolean,\n type: 'premium' | 'gift',\n stack: ChatSetPeerOptions['stack'],\n listenerSetter: ListenerSetter\n};\n\nexport default class PopupPremium extends PopupElement {\n private promoSlideTab: PromoSlideTab;\n private featureSlideTab: FeatureSlideTab;\n\n private actionButtonContainer: HTMLDivElement;\n private selectedTab: number;\n private actionButtonText: I18n.IntlElement;\n private selectedFeature: PremiumPromoFeature;\n private actionButton: HTMLButtonElement;\n private props: PopupPremiumProps;\n private option: PremiumSubscriptionOption;\n private feature: PremiumPromoFeatureType;\n private gift: PopupPremiumProps['gift'];\n private peerId: PeerId;\n private isOut: boolean;\n private stack: PopupPremiumProps['stack'];\n private transition: ReturnType;\n private wrapCurrency: (amount: Long) => string;\n private tabsContainer: HTMLElement;\n private giftDetails: ReturnType;\n\n constructor(options: {\n feature?: PopupPremium['feature'],\n gift?: PopupPremium['gift'],\n peerId?: PopupPremium['peerId'],\n isOut?: PopupPremium['isOut'],\n stack?: PopupPremium['stack']\n } = {}) {\n super('popup-premium', {\n overlayClosable: true,\n closable: true,\n body: true,\n title: 'Premium.Boarding.Title'\n });\n\n safeAssign(this, options);\n this.initTabs();\n }\n\n public cleanup() {\n super.cleanup();\n this.featureSlideTab.cleanup();\n this.promoSlideTab.tab.remove();\n }\n\n private prepareArguments = async(obj: {\n _titleLangArgs?: (managers: AppManagers) => MaybePromise,\n _subtitleLangArgs?: (managers: AppManagers) => MaybePromise\n }) => {\n const [titleLangArgs, subtitleLangArgs] = await Promise.all([\n obj._titleLangArgs,\n obj._subtitleLangArgs\n ].map((c) => c && c(this.managers)));\n\n return {titleLangArgs, subtitleLangArgs};\n };\n\n private filterOrder(premiumPromo: HelpPremiumPromo, order: PremiumPromoFeatureType[]) {\n return (order || []).filter((feature) => {\n const hasFeature = !!PREMIUM_FEATURES[feature];\n if(!hasFeature) {\n console.warn('premium feature is not implemented', feature);\n const videoIndex = premiumPromo.video_sections.indexOf(feature);\n if(videoIndex !== -1) {\n premiumPromo.video_sections.splice(videoIndex, 1);\n premiumPromo.videos.splice(videoIndex, 1);\n }\n }\n\n return hasFeature;\n });\n }\n\n private async createFeatures(premiumPromo: HelpPremiumPromo, order: PremiumPromoFeatureType[]) {\n return Promise.all(order.map(async(feature) => {\n const f = PREMIUM_FEATURES[feature];\n\n let content = f.content;\n if(content) {\n content = await Promise.all(content.map(async(c) => {\n return {\n ...(await this.prepareArguments(c)),\n ...c\n };\n }));\n }\n\n const video = premiumPromo.videos[premiumPromo.video_sections.indexOf(feature)];\n const ff = {\n ...(await this.prepareArguments(f)),\n ...f,\n ...{content},\n video\n } as PremiumPromoFeature;\n if(video) ff.videoPosition ??= 'bottom';\n\n return ff;\n }));\n }\n\n private async initTabs() {\n const [premiumPromo, appConfig] = await Promise.all([\n this.managers.appPaymentsManager.getPremiumPromo(),\n this.managers.apiManager.getAppConfig()\n ]);\n\n const order = this.filterOrder(premiumPromo, appConfig.premium_promo_order);\n\n const isPremiumActive = rootScope.premium;\n this.props = {\n order,\n features: await this.createFeatures(premiumPromo, order),\n premiumPromo,\n managers: this.managers,\n middleware: this.middlewareHelper.get(),\n appConfig,\n isPremiumActive,\n gift: this.gift,\n peerId: this.peerId || this.stack?.peerId,\n isOut: this.isOut || this.stack?.isOut,\n type: this.gift ? 'gift' : 'premium',\n stack: this.stack,\n listenerSetter: this.listenerSetter\n };\n\n this.giftDetails = getGiftDetails(this.props);\n\n const tabsContainer = this.tabsContainer = document.createElement('div');\n tabsContainer.classList.add('tabs-container', 'premium-tabs');\n\n this.option = this.props.premiumPromo.period_options[0];\n const shortestOption = this.props.premiumPromo.period_options.slice().sort((a, b) => a.months - b.months)[0];\n this.wrapCurrency = (amount) => paymentsWrapCurrencyAmount(amount, shortestOption.currency, false, true, true);\n\n const headerBackground = document.createElement('div');\n headerBackground.classList.add('popup-header-background');\n this.header.prepend(headerBackground);\n\n this.createTransitionSlider();\n this.createActionButton();\n this.createPromoSlideTab();\n this.createFeatureSlideTab();\n\n const tabs = [this.promoSlideTab.tab, this.featureSlideTab.tab].filter(Boolean);\n tabs.forEach((tab) => {\n tab.classList.add('tabs-tab', 'premium-tab');\n });\n tabsContainer.append(...tabs);\n\n this.container.append(...[tabsContainer, this.actionButtonContainer].filter(Boolean));\n if(!this.actionButtonContainer) {\n this.container.classList.add('no-button');\n }\n\n this.feature && await this.selectFeature(this.feature);\n this.transition(this.feature ? 1 : 0);\n\n this.show();\n }\n\n private selectFeature = async(feature: PremiumPromoFeatureType) => {\n this.selectedFeature = this.props.features.find((f) => f.feature === feature);\n await this.featureSlideTab.setCarouselSlide(feature);\n this.updateActionLayout(this.selectedFeature);\n };\n\n private createTransitionSlider() {\n this.transition = TransitionSlider({\n content: this.tabsContainer,\n type: 'navigation',\n transitionTime: 150,\n animateFirst: false,\n onTransitionEnd: (id) => {\n this.selectedTab = id;\n if(id) {\n this.featureSlideTab.featureCarousel.ready(this.updateActionLayout);\n } else {\n this.updateActionLayout();\n }\n }\n });\n }\n\n private createActionButton() {\n if(this.props.type === 'gift') {\n if(this.giftDetails.isOutbound || !this.giftDetails.isUnclaimed) {\n return;\n }\n }\n\n this.actionButtonText = new I18n.IntlElement({key: 'OK'});\n this.actionButtonContainer = document.createElement('div');\n this.actionButtonContainer.classList.add('action-button-container');\n this.actionButton = Button(`btn-primary popup-gift-premium-confirm action-button shimmer`);\n this.actionButton.append(this.actionButtonText.element);\n\n let callback: () => void;\n if(this.props.type === 'gift') {\n callback = () => {\n const gift = this.props.gift as PaymentsCheckedGiftCode;\n PopupGiftLink.applyGiftCode(gift.slug, this.actionButton, this);\n };\n } else {\n callback = () => {\n if(this.props.isPremiumActive) {\n this.hide();\n return;\n }\n\n this.buyPremium();\n };\n }\n\n attachClickEvent(this.actionButton, callback, {listenerSetter: this.listenerSetter, once: true});\n\n this.actionButtonContainer.append(this.actionButton);\n }\n\n private createPromoSlideTab() {\n this.promoSlideTab = new PromoSlideTab({\n container: this.tabsContainer,\n header: this.header,\n body: this.body,\n ...this.props\n });\n\n this.promoSlideTab.transition = this.transition;\n this.promoSlideTab.selectFeature = this.selectFeature;\n this.promoSlideTab.selectPeriod = (option) => {\n this.option = option;\n this.updateActionLayout();\n };\n this.promoSlideTab.close = this.close;\n }\n\n private createFeatureSlideTab() {\n this.featureSlideTab = new FeatureSlideTab({\n header: this.header.cloneNode(true) as HTMLElement,\n actionButtonContainer: this.actionButtonContainer,\n ...this.props\n });\n this.featureSlideTab.transition = this.transition;\n }\n\n private updateActionLayout = (feature?: PremiumPromoFeature) => {\n if(!this.actionButtonText) {\n return;\n }\n\n if(this.props.type === 'gift') {\n const {isOutbound, isUnclaimed} = this.giftDetails;\n if(!isOutbound && isUnclaimed) {\n this.actionButtonText.compareAndUpdate({\n key: 'GiftPremiumActivateForFree'\n });\n }\n\n return;\n }\n\n if(this.props.isPremiumActive) {\n return;\n }\n\n this.actionButtonText.compareAndUpdate({\n key: feature?.actionTitleLangKey || 'Premium.Boarding.Subscribe',\n args: [this.wrapCurrency(+this.option.amount / this.option.months)]\n });\n\n const previousIcon = this.actionButton.querySelector('.tgico');\n const newIcon = feature?.actionIcon && Icon(feature.actionIcon, 'row-icon', 'action-button-icon');\n if(!newIcon) previousIcon?.remove();\n else if(previousIcon) previousIcon?.replaceWith(newIcon);\n else this.actionButton.append(newIcon);\n };\n\n public close = (callback?: () => void) => {\n callback && this.addEventListener('closeAfterTimeout', callback);\n this.hide();\n };\n\n public buyPremium() {\n this.close(() => {\n appImManager.openUrl(this.option.bot_url);\n });\n }\n\n public static show(...args: ConstructorParameters) {\n PopupElement.createPopup(PopupPremium, ...args);\n }\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {LangPackKey} from '../../lib/langPack';\nimport {ApiLimitType} from '../../lib/mtproto/api_methods';\nimport rootScope from '../../lib/rootScope';\nimport PopupPeer from './peer';\nimport LimitLine from '../limit';\nimport PopupPremium from './premium';\n\nconst a: {[type in ApiLimitType]?: {\n title: LangPackKey,\n description: LangPackKey,\n descriptionPremium: LangPackKey,\n descriptionLocked: LangPackKey,\n icon: Icon\n}} = {\n pin: {\n title: 'LimitReached',\n description: 'LimitReachedPinDialogs',\n descriptionPremium: 'LimitReachedPinDialogsPremium',\n descriptionLocked: 'LimitReachedPinDialogsLocked',\n icon: 'limit_pin'\n },\n folders: {\n title: 'LimitReached',\n description: 'LimitReachedFolders',\n descriptionPremium: 'LimitReachedFoldersPremium',\n descriptionLocked: 'LimitReachedFoldersLocked',\n icon: 'limit_folders'\n },\n folderPeers: {\n title: 'LimitReached',\n description: 'LimitReachedChatInFolders',\n descriptionPremium: 'LimitReachedChatInFoldersPremium',\n descriptionLocked: 'LimitReachedChatInFoldersLocked',\n icon: 'limit_folders'\n },\n chatlistInvites: {\n title: 'LimitReached',\n description: 'LimitReachedSharedFolderInvites',\n descriptionPremium: 'LimitReachedSharedFolderInvitesPremium',\n descriptionLocked: 'LimitReachedSharedFolderInvitesLocked',\n icon: 'limit_link'\n },\n savedPin: {\n title: 'LimitReached',\n description: 'LimitReachedPinDialogs',\n descriptionPremium: 'LimitReachedPinDialogsPremium',\n descriptionLocked: 'LimitReachedPinDialogsLocked',\n icon: 'limit_pin'\n }\n};\n\nclass P extends PopupPeer {\n constructor(options: {\n isPremium: boolean,\n limit: number,\n limitPremium: number,\n feature?: PremiumPromoFeatureType\n }, _a: typeof a[keyof typeof a]) {\n super('popup-limit', {\n buttons: options.isPremium === undefined ? [{\n langKey: 'LimitReached.Ok',\n isCancel: true\n }] : (options.isPremium ? [{\n langKey: 'OK',\n isCancel: true\n }] : [{\n langKey: 'IncreaseLimit',\n callback: () => {\n PopupPremium.show({feature: options.feature});\n },\n iconRight: 'premium_double'\n }, {\n langKey: 'Cancel',\n isCancel: true\n }]),\n descriptionLangKey: options.isPremium === undefined ? _a.descriptionLocked : (options.isPremium ? _a.descriptionPremium : _a.description),\n descriptionLangArgs: options.isPremium ? [options.limitPremium] : [options.limit, options.limitPremium],\n titleLangKey: _a.title\n });\n\n const limit = new LimitLine({\n limitPremium: options.limitPremium,\n hint: {\n icon: _a.icon,\n content: '' + (options.isPremium ? options.limitPremium : options.limit)\n }\n });\n\n if(options.isPremium !== undefined) {\n limit.setProgress(options.isPremium ? 1 : 0.5);\n } else {\n const limitLine = limit.container.querySelector('.limit-line');\n limitLine?.remove();\n }\n\n this.description.before(limit.container);\n\n // if(options.isPremium === false) {\n // this.buttons.pop().element.remove();\n // }\n\n limit._setHintActive();\n }\n}\n\nexport default async function showLimitPopup(type: keyof typeof a) {\n // const featureMap: {[type in keyof typeof a]?: PremiumPromoFeatureType} = {\n // folders: 'double_limits',\n // pin: 'double_limits',\n // chatlistInvites: 'double_limits'\n // };\n const feature: PremiumPromoFeatureType = 'double_limits';\n\n const _a = a[type];\n const [appConfig, limit, limitPremium] = await Promise.all([\n rootScope.managers.apiManager.getAppConfig(),\n ...[false, true].map((v) => rootScope.managers.apiManager.getLimit(type, v))\n ]);\n const isLocked = appConfig.premium_purchase_blocked;\n new P({\n isPremium: isLocked ? undefined : rootScope.premium,\n limit,\n limitPremium,\n // feature: featureMap[type]\n feature\n }, _a).show();\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {Dialog} from '../lib/appManagers/appMessagesManager';\nimport type {ForumTopic} from '../layer';\nimport type {AnyDialog} from '../lib/storages/dialogs';\nimport appDialogsManager, {DIALOG_LIST_ELEMENT_TAG} from '../lib/appManagers/appDialogsManager';\nimport rootScope from '../lib/rootScope';\nimport {ButtonMenuItemOptionsVerifiable} from './buttonMenu';\nimport PopupDeleteDialog from './popups/deleteDialog';\nimport {i18n, LangPackKey, _i18n} from '../lib/langPack';\nimport findUpTag from '../helpers/dom/findUpTag';\nimport {toastNew} from './toast';\nimport PopupMute from './popups/mute';\nimport {AppManagers} from '../lib/appManagers/managers';\nimport {CAN_HIDE_TOPIC, FOLDER_ID_ARCHIVE, GENERAL_TOPIC_ID, REAL_FOLDERS} from '../lib/mtproto/mtproto_config';\nimport showLimitPopup from './popups/limit';\nimport createContextMenu from '../helpers/dom/createContextMenu';\nimport PopupElement from './popups';\nimport cancelEvent from '../helpers/dom/cancelEvent';\nimport IS_SHARED_WORKER_SUPPORTED from '../environment/sharedWorkerSupport';\nimport wrapEmojiText from '../lib/richTextProcessor/wrapEmojiText';\nimport appImManager from '../lib/appManagers/appImManager';\nimport assumeType from '../helpers/assumeType';\nimport {isForumTopic, isSavedDialog} from '../lib/appManagers/utils/dialogs/isDialog';\nimport {appState} from '../stores/appState';\n\nexport default class DialogsContextMenu {\n private buttons: ButtonMenuItemOptionsVerifiable[];\n\n private peerId: PeerId;\n private filterId: number;\n private threadId: number;\n private dialog: AnyDialog;\n private canManageTopics: boolean;\n private li: HTMLElement;\n\n constructor(private managers: AppManagers) {\n\n }\n\n public attach(element: HTMLElement) {\n createContextMenu({\n listenTo: element,\n buttons: this.getButtons(),\n appendTo: document.getElementById('page-chats'),\n onOpen: async(e, li) => {\n this.li = li;\n li.classList.add('menu-open');\n this.peerId = li.dataset.peerId.toPeerId();\n this.threadId = +li.dataset.threadId || undefined;\n this.dialog = await this.managers.dialogsStorage.getAnyDialog(this.peerId, this.threadId);\n this.filterId = this.threadId ? undefined : appDialogsManager.filterId;\n this.canManageTopics = isForumTopic(this.dialog) ? await this.managers.dialogsStorage.canManageTopic(this.dialog) : undefined;\n },\n onOpenBefore: async() => {\n // delete button\n const langPackKey: LangPackKey = this.threadId ? 'Delete' : await this.managers.appPeersManager.getDeleteButtonText(this.peerId);\n const lastButton = this.buttons[this.buttons.length - 1];\n if(lastButton?.element) {\n lastButton.element.lastChild.replaceWith(i18n(langPackKey));\n }\n },\n onClose: () => {\n this.li.classList.remove('menu-open');\n this.li = this.peerId = this.dialog = this.filterId = this.threadId = this.canManageTopics = undefined;\n },\n findElement: (e) => {\n return findUpTag(e.target, DIALOG_LIST_ELEMENT_TAG);\n }\n });\n }\n\n private getButtons() {\n this.buttons ??= [{\n icon: 'newtab',\n text: 'OpenInNewTab',\n onClick: (e) => {\n appDialogsManager.openDialogInNewTab(this.li);\n cancelEvent(e);\n },\n verify: () => IS_SHARED_WORKER_SUPPORTED\n }, {\n icon: 'topics',\n text: 'TopicViewAsTopics',\n onClick: () => {\n appImManager.toggleViewAsMessages(this.peerId, false);\n },\n verify: () => !!(this.dialog && (this.dialog as Dialog).pFlags.view_forum_as_messages)\n }, {\n icon: 'topics',\n text: 'SavedViewAsChats',\n onClick: () => {\n appImManager.toggleViewAsMessages(this.peerId, false);\n },\n verify: () => this.peerId === rootScope.myId && !appState.settings.savedAsForum && !this.threadId\n }, {\n icon: 'message',\n text: 'SavedViewAsMessages',\n onClick: () => {\n appImManager.toggleViewAsMessages(this.peerId, true);\n },\n verify: () => this.peerId === rootScope.myId && appState.settings.savedAsForum && !this.threadId\n }, {\n icon: 'unread',\n text: 'MarkAsUnread',\n onClick: this.onUnreadClick,\n verify: async() => !this.threadId && !(await this.managers.appMessagesManager.isDialogUnread(this.dialog))\n }, {\n icon: 'readchats',\n text: 'MarkAsRead',\n onClick: this.onUnreadClick,\n verify: () => this.managers.appMessagesManager.isDialogUnread(this.dialog)\n }, {\n icon: 'pin',\n text: 'ChatList.Context.Pin',\n onClick: this.onPinClick,\n verify: async() => {\n if(isSavedDialog(this.dialog)) {\n return !this.dialog.pFlags.pinned;\n }\n\n if(this.threadId && !this.canManageTopics) {\n return false;\n }\n\n const isPinned = this.filterId !== undefined && this.filterId > 1 ?\n (await this.managers.appMessagesManager.getFilter(this.filterId)).pinnedPeerIds.includes(this.dialog.peerId) :\n !!this.dialog.pFlags?.pinned;\n return !isPinned;\n }\n }, {\n icon: 'unpin',\n text: 'ChatList.Context.Unpin',\n onClick: this.onPinClick,\n verify: async() => {\n if(isSavedDialog(this.dialog)) {\n return !!this.dialog.pFlags.pinned;\n }\n\n if(this.threadId && !this.canManageTopics) {\n return false;\n }\n\n const isPinned = this.filterId !== undefined && this.filterId > 1 ?\n (await this.managers.appMessagesManager.getFilter(this.filterId)).pinnedPeerIds.includes(this.dialog.peerId) :\n !!this.dialog.pFlags?.pinned;\n return isPinned;\n }\n }, {\n icon: 'mute',\n text: 'ChatList.Context.Mute',\n onClick: this.onMuteClick,\n verify: async() => {\n return this.peerId !== rootScope.myId && !(await this.managers.appNotificationsManager.isPeerLocalMuted({peerId: this.dialog.peerId, threadId: this.threadId}));\n }\n }, {\n icon: 'unmute',\n text: 'ChatList.Context.Unmute',\n onClick: this.onUnmuteClick,\n verify: () => {\n return this.peerId !== rootScope.myId && this.managers.appNotificationsManager.isPeerLocalMuted({peerId: this.dialog.peerId, threadId: this.threadId});\n }\n }, {\n icon: 'archive',\n text: 'Archive',\n onClick: this.onArchiveClick,\n verify: () => !this.threadId && (this.dialog as Dialog).folder_id !== FOLDER_ID_ARCHIVE && this.peerId !== rootScope.myId\n }, {\n icon: 'unarchive',\n text: 'Unarchive',\n onClick: this.onArchiveClick,\n verify: () => this.filterId === FOLDER_ID_ARCHIVE && this.peerId !== rootScope.myId\n }, CAN_HIDE_TOPIC ? {\n icon: 'hide',\n text: 'Hide',\n onClick: this.onHideTopicClick,\n verify: () => {\n return this.canManageTopics && (this.dialog as ForumTopic.forumTopic).id === GENERAL_TOPIC_ID;\n }\n } : undefined, {\n icon: 'lock',\n text: 'CloseTopic',\n onClick: this.onToggleTopicClick,\n verify: () => {\n return this.canManageTopics && !(this.dialog as ForumTopic.forumTopic).pFlags.closed;\n }\n }, {\n icon: 'lockoff',\n text: 'RestartTopic',\n onClick: this.onToggleTopicClick,\n verify: () => {\n return this.canManageTopics && !!(this.dialog as ForumTopic.forumTopic).pFlags.closed;\n }\n }, {\n icon: 'folder',\n text: 'FilterAddTo',\n onClick: () => {},\n inner: async() => {\n const filters = await this.managers.filtersStorage.getDialogFilters();\n return {\n buttons: filters.map((filter) => {\n const title = document.createElement('span');\n title.append(wrapEmojiText(filter.title));\n return {\n icon: 'folder',\n textElement: title,\n onClick: () => {}\n };\n })\n };\n },\n verify: () => false\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'Delete',\n onClick: this.onDeleteClick,\n verify: () => {\n if(this.threadId) {\n if(isSavedDialog(this.dialog)) {\n return true;\n }\n\n if(!this.canManageTopics) {\n return false;\n }\n\n return (this.dialog as ForumTopic.forumTopic).id !== GENERAL_TOPIC_ID;\n }\n\n return true;\n }\n }];\n\n return this.buttons = this.buttons.filter(Boolean);\n }\n\n private onArchiveClick = async() => {\n const dialog = await this.managers.appMessagesManager.getDialogOnly(this.peerId);\n if(dialog) {\n this.managers.appMessagesManager.editPeerFolders([dialog.peerId], +!dialog.folder_id);\n }\n };\n\n private onHideTopicClick = () => {\n this.managers.appChatsManager.editForumTopic({\n chatId: this.peerId.toChatId(),\n topicId: this.threadId,\n hidden: true\n });\n };\n\n private onToggleTopicClick = () => {\n this.managers.appChatsManager.editForumTopic({\n chatId: this.peerId.toChatId(),\n topicId: this.threadId,\n closed: !(this.dialog as ForumTopic.forumTopic).pFlags.closed\n });\n };\n\n private onPinClick = () => {\n const {peerId, filterId, threadId, dialog} = this;\n const isSaved = isSavedDialog(dialog);\n this.managers.appMessagesManager.toggleDialogPin({\n peerId,\n filterId,\n topicOrSavedId: threadId\n }).catch(async(err: ApiError) => {\n if(err.type === 'PINNED_DIALOGS_TOO_MUCH' || err.type === 'PINNED_TOO_MUCH') {\n if(isSaved) {\n showLimitPopup('savedPin');\n } else if(threadId) {\n this.managers.apiManager.getLimit('topicPin').then((limit) => {\n toastNew({langPackKey: 'LimitReachedPinnedTopics', langPackArguments: [limit]});\n });\n } else if(!REAL_FOLDERS.has(filterId)) {\n toastNew({langPackKey: 'PinFolderLimitReached'});\n } else {\n showLimitPopup('pin');\n }\n }\n });\n };\n\n private onUnmuteClick = () => {\n this.managers.appMessagesManager.togglePeerMute({peerId: this.peerId, mute: false, threadId: this.threadId});\n };\n\n private onMuteClick = () => {\n PopupElement.createPopup(PopupMute, this.peerId, this.threadId);\n };\n\n private onUnreadClick = async() => {\n const {peerId, dialog} = this;\n assumeType(dialog);\n if(dialog.unread_count) {\n if(!this.threadId) {\n this.managers.appMessagesManager.markDialogUnread(peerId, true);\n } else {\n this.managers.appMessagesManager.readHistory(peerId, dialog.top_message, this.threadId);\n }\n } else if(!this.threadId) {\n this.managers.appMessagesManager.markDialogUnread(peerId);\n }\n };\n\n private onDeleteClick = () => {\n PopupElement.createPopup(\n PopupDeleteDialog,\n this.peerId,\n undefined,\n undefined,\n this.threadId\n );\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {_tgico} from '../helpers/tgico';\nimport {Message} from '../layer';\nimport Icon from './icon';\n/* import findUpClassName from \"../helpers/dom/findUpClassName\";\nimport rootScope from \"../lib/rootScope\";\nimport Transition from \"./transition\"; */\n\nexport enum SENDING_STATUS {\n Error = -1,\n Pending,\n Sent,\n Read\n}\n\nexport function getSendingStatus(message: Message.message | Message.messageService) {\n return message.pFlags.is_outgoing ?\n SENDING_STATUS.Pending : (\n message.pFlags.unread ?\n SENDING_STATUS.Sent :\n SENDING_STATUS.Read\n );\n}\n\ntype C = 'check' | 'checks' | 'sending' | 'sendingerror' | 'premium_lock';\nexport function setSendingStatus(\n container: HTMLElement,\n message?: C | Message.message | Message.messageService,\n disableAnimationIfRippleFound?: boolean\n) {\n let className: C;\n if(typeof(message) === 'string') {\n className = message;\n } else if(message?.pFlags.out) {\n if(message.error) {\n className = 'sendingerror';\n } else if(message.pFlags.is_outgoing) {\n className = 'sending';\n } else if(message.pFlags.unread) {\n className = 'check';\n } else {\n className = 'checks';\n }\n }\n\n if(!className) {\n container.textContent = '';\n container.classList.add('hide');\n return;\n }\n\n const lastElement = container.lastElementChild as HTMLElement;\n if(lastElement && lastElement.classList.contains(_tgico(className))) {\n return;\n }\n\n const element = Icon(className, 'sending-status-icon', 'sending-status-icon-' + className/* 'transition-item', */);\n container.append(element);\n container.classList.remove('hide');\n\n lastElement?.remove();\n\n /* if(!lastElement) {\n element.classList.add('active');\n return;\n }\n\n const select = Transition(container, undefined, 350, () => {\n lastElement.remove();\n }, false, true, false);\n\n let animate = rootScope.settings.animationsEnabled && className !== 'sending' && !lastElement.classList.contains('tgico-sending');\n if(disableAnimationIfRippleFound && animate) {\n const parent = findUpClassName(container, 'rp');\n if(parent.querySelector('.c-ripple__circle') || parent.matches(':hover')) {\n animate = false;\n }\n }\n\n select(element, animate, lastElement); */\n\n /* SetTransition(lastElement, 'is-visible', false, 350, () => {\n // lastElement.remove();\n }, 2);\n SetTransition(element, 'is-visible', true, 350, undefined, 2); */\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport {animate} from '../helpers/animation';\nimport customProperties from '../helpers/dom/customProperties';\nimport easeInOutSine from '../helpers/easing/easeInOutSine';\nimport mediaSizes from '../helpers/mediaSizes';\nimport roundRect from '../helpers/canvas/roundRect';\n\nconst DPR = window.devicePixelRatio;\nconst SIZE = 20 * DPR;\nconst MARGIN = 2.5 * DPR;\nconst WIDTH = 2 * DPR;\nconst RADIUS = 1 * DPR;\nconst LENGTH = 3;\n\nconst MIN_HEIGHT = 4;\nconst MAX_HEIGHT = 12;\nconst DURATION = 1000;\n\nexport default function groupCallActiveIcon(isActive = false) {\n const canvas = document.createElement('canvas');\n canvas.width = canvas.height = SIZE;\n const context = canvas.getContext('2d');\n\n const TOTAL_WIDTH = LENGTH * WIDTH + (LENGTH - 1) * MARGIN;\n const START_X = (SIZE - TOTAL_WIDTH) / 2;\n\n const startTime = Date.now();\n let wasMounted = false;\n // let hadRound = false;\n const renderFrame = () => {\n if(!canvas.isConnected) {\n if(wasMounted) {\n return false;\n }\n } else if(!wasMounted) {\n wasMounted = canvas.isConnected;\n }\n\n const time = Date.now();\n // if(((time - startTime) / DURATION) >= 1) {\n // hadRound = true;\n // }\n\n const progress = easeInOutSine((time - startTime) % DURATION, 0, 1, DURATION);\n\n context.clearRect(0, 0, SIZE, SIZE);\n context.fillStyle = isActive && !mediaSizes.isMobile ? customProperties.getProperty('primary-color') : '#fff';\n\n for(let i = 0; i < LENGTH; ++i) {\n const x = START_X + (i * WIDTH) + (i * MARGIN);\n\n let itemProgress: number;\n if(progress >= .5) {\n itemProgress = i % 2 ? 2 - progress * 2 : (progress - .5) * 2;\n } else {\n itemProgress = i % 2 ? progress * 2 : 1 - progress * 2;\n }\n\n let height = MIN_HEIGHT + (itemProgress * (MAX_HEIGHT - MIN_HEIGHT));\n /* if(!hadRound && i === 1) {\n console.log('call status animation', itemProgress, height, progress, progress >= .5);\n } */\n\n height *= DPR;\n const y = (SIZE - height) / 2;\n\n roundRect(context, x, y, WIDTH, height, RADIUS, true);\n }\n\n return true;\n };\n\n return {\n canvas,\n startAnimation: () => {\n animate(renderFrame);\n renderFrame();\n },\n setActive: (active: boolean) => {\n isActive = active;\n renderFrame();\n }\n };\n}\n","/*\n * https://github.com/morethanwords/tweb\n * Copyright (C) 2019-2021 Eduard Kuzmenko\n * https://github.com/morethanwords/tweb/blob/master/LICENSE\n */\n\nimport type {MyDialogFilter} from '../storages/filters';\nimport type {Dialog, ForumTopic, MyMessage, SavedDialog} from './appMessagesManager';\nimport type {MyDocument} from './appDocsManager';\nimport type {State} from '../../config/state';\nimport type {AnyDialog} from '../storages/dialogs';\nimport type {CustomEmojiRendererElement} from '../customEmoji/renderer';\nimport PopupElement from '../../components/popups';\nimport DialogsContextMenu from '../../components/dialogsContextMenu';\nimport {horizontalMenu} from '../../components/horizontalMenu';\nimport ripple from '../../components/ripple';\nimport Scrollable, {ScrollableX, SliceSides} from '../../components/scrollable';\nimport {formatDateAccordingToTodayNew} from '../../helpers/date';\nimport {IS_MOBILE_SAFARI, IS_SAFARI} from '../../environment/userAgent';\nimport {logger, LogTypes} from '../logger';\nimport rootScope from '../rootScope';\nimport appImManager, {AppImManager, APP_TABS} from './appImManager';\nimport Button from '../../components/button';\nimport SetTransition from '../../components/singleTransition';\nimport {MyDraftMessage} from './appDraftsManager';\nimport {MOUNT_CLASS_TO} from '../../config/debug';\nimport PeerTitle, {changeTitleEmojiColor} from '../../components/peerTitle';\nimport I18n, {FormatterArguments, i18n, LangPackKey, _i18n} from '../langPack';\nimport findUpTag from '../../helpers/dom/findUpTag';\nimport lottieLoader from '../rlottie/lottieLoader';\nimport wrapPhoto from '../../components/wrappers/photo';\nimport AppEditFolderTab from '../../components/sidebarLeft/tabs/editFolder';\nimport appSidebarLeft from '../../components/sidebarLeft';\nimport {attachClickEvent} from '../../helpers/dom/clickEvent';\nimport positionElementByIndex from '../../helpers/dom/positionElementByIndex';\nimport replaceContent from '../../helpers/dom/replaceContent';\nimport ConnectionStatusComponent from '../../components/connectionStatus';\nimport {renderImageFromUrlPromise} from '../../helpers/dom/renderImageFromUrl';\nimport {fastRafConventional, fastRafPromise} from '../../helpers/schedulers';\nimport SortedUserList from '../../components/sortedUserList';\nimport IS_TOUCH_SUPPORTED from '../../environment/touchSupport';\nimport handleTabSwipe from '../../helpers/dom/handleTabSwipe';\nimport windowSize from '../../helpers/windowSize';\nimport isInDOM from '../../helpers/dom/isInDOM';\nimport {setSendingStatus} from '../../components/sendingStatus';\nimport SortedList, {SortedElementBase} from '../../helpers/sortedList';\nimport debounce from '../../helpers/schedulers/debounce';\nimport {CAN_HIDE_TOPIC, FOLDER_ID_ALL, FOLDER_ID_ARCHIVE, NULL_PEER_ID, REAL_FOLDERS} from '../mtproto/mtproto_config';\nimport groupCallActiveIcon from '../../components/groupCallActiveIcon';\nimport {Chat, ChatlistsChatlistUpdates, DialogFilter, Message, MessageReplyHeader} from '../../layer';\nimport IS_GROUP_CALL_SUPPORTED from '../../environment/groupCallSupport';\nimport mediaSizes from '../../helpers/mediaSizes';\nimport appNavigationController, {NavigationItem} from '../../components/appNavigationController';\nimport appMediaPlaybackController from '../../components/appMediaPlaybackController';\nimport setInnerHTML from '../../helpers/dom/setInnerHTML';\nimport {AppManagers} from './managers';\nimport appSidebarRight from '../../components/sidebarRight';\nimport choosePhotoSize from './utils/photos/choosePhotoSize';\nimport wrapEmojiText from '../richTextProcessor/wrapEmojiText';\nimport wrapMessageForReply, {WrapMessageForReplyOptions} from '../../components/wrappers/messageForReply';\nimport isMessageRestricted from './utils/messages/isMessageRestricted';\nimport getMediaFromMessage from './utils/messages/getMediaFromMessage';\nimport getMessageSenderPeerIdOrName from './utils/messages/getMessageSenderPeerIdOrName';\nimport wrapStickerEmoji from '../../components/wrappers/stickerEmoji';\nimport getDialogIndexKey from './utils/dialogs/getDialogIndexKey';\nimport getProxiedManagers from './getProxiedManagers';\nimport getDialogIndex from './utils/dialogs/getDialogIndex';\nimport deferredPromise, {CancellablePromise} from '../../helpers/cancellablePromise';\nimport wrapPeerTitle from '../../components/wrappers/peerTitle';\nimport middlewarePromise from '../../helpers/middlewarePromise';\nimport appDownloadManager from './appDownloadManager';\nimport groupCallsController from '../calls/groupCallsController';\nimport callsController from '../calls/callsController';\nimport cancelEvent from '../../helpers/dom/cancelEvent';\nimport noop from '../../helpers/noop';\nimport DialogsPlaceholder from '../../helpers/dialogsPlaceholder';\nimport pause from '../../helpers/schedulers/pause';\nimport apiManagerProxy from '../mtproto/mtprotoworker';\nimport filterAsync from '../../helpers/array/filterAsync';\nimport indexOfAndSplice from '../../helpers/array/indexOfAndSplice';\nimport whichChild from '../../helpers/dom/whichChild';\nimport {getMiddleware, MiddlewareHelper} from '../../helpers/middleware';\nimport makeError from '../../helpers/makeError';\nimport getUnsafeRandomInt from '../../helpers/number/getUnsafeRandomInt';\nimport Row, {RowMediaSizeType} from '../../components/row'\nimport SettingSection from '../../components/settingSection';\nimport {SliderSuperTabEventable} from '../../components/sliderTab';\nimport safeAssign from '../../helpers/object/safeAssign';\nimport ListenerSetter from '../../helpers/listenerSetter';\nimport ButtonMenuToggle from '../../components/buttonMenuToggle';\nimport getMessageThreadId from './utils/messages/getMessageThreadId';\nimport findUpClassName from '../../helpers/dom/findUpClassName';\nimport formatNumber from '../../helpers/number/formatNumber';\nimport AppSharedMediaTab from '../../components/sidebarRight/tabs/sharedMedia';\nimport {dispatchHeavyAnimationEvent} from '../../hooks/useHeavyAnimationCheck';\nimport shake from '../../helpers/dom/shake';\nimport AppEditTopicTab from '../../components/sidebarRight/tabs/editTopic';\nimport getServerMessageId from './utils/messageId/getServerMessageId';\nimport createContextMenu from '../../helpers/dom/createContextMenu';\nimport AppChatFoldersTab from '../../components/sidebarLeft/tabs/chatFolders';\nimport eachTimeout from '../../helpers/eachTimeout';\nimport PopupSharedFolderInvite from '../../components/popups/sharedFolderInvite';\nimport showLimitPopup from '../../components/popups/limit';\nimport StoriesList from '../../components/stories/list';\nimport {render} from 'solid-js/web';\nimport {avatarNew} from '../../components/avatarNew';\nimport getViewportSlice from '../../helpers/dom/getViewportSlice';\nimport ScrollSaver from '../../helpers/scrollSaver';\nimport Icon from '../../components/icon';\nimport setBadgeContent from '../../helpers/setBadgeContent';\nimport createBadge from '../../helpers/createBadge';\nimport {isDialog, isForumTopic, isSavedDialog} from './utils/dialogs/isDialog';\nimport {ChatType} from '../../components/chat/chat';\nimport PopupDeleteDialog from '../../components/popups/deleteDialog';\nimport rtmpCallsController from '../calls/rtmpCallsController';\nimport IS_LIVE_STREAM_SUPPORTED from '../../environment/liveStreamSupport';\n\nexport const DIALOG_LIST_ELEMENT_TAG = 'A';\n\nexport type DialogDom = {\n avatarEl: ReturnType,\n captionDiv: HTMLElement,\n titleSpan: HTMLSpanElement,\n titleSpanContainer: HTMLSpanElement,\n statusSpan: HTMLSpanElement,\n lastTimeSpan: HTMLSpanElement,\n pinnedBadge?: HTMLElement,\n unreadBadge?: HTMLElement,\n unreadAvatarBadge?: HTMLElement,\n callIcon?: ReturnType,\n mentionsBadge?: HTMLElement,\n reactionsBadge?: HTMLElement,\n lastMessageSpan: HTMLSpanElement,\n containerEl: HTMLElement,\n listEl: HTMLElement,\n subtitleEl: HTMLElement,\n mutedIcon?: HTMLElement,\n\n setLastMessagePromise?: CancellablePromise,\n setUnreadMessagePromise?: CancellablePromise\n};\n\ninterface SortedDialog extends SortedElementBase {\n dom: DialogDom,\n dialogElement: DialogElement\n}\n\nfunction setPromiseMiddleware}, K extends keyof T>(obj: T, key: K) {\n const oldPromise: CancellablePromise = obj[key] as any;\n oldPromise?.reject();\n\n // @ts-ignore\n const deferred = obj[key] = deferredPromise();\n deferred.catch(() => {}).finally(() => {\n if((obj[key] as any) === deferred) {\n delete obj[key];\n }\n });\n\n const middleware = middlewarePromise(() => (obj[key] as any) === deferred);\n return {deferred, middleware};\n}\n\nconst BADGE_SIZE = 22;\nconst BADGE_TRANSITION_TIME = 250;\n\nexport class SortedDialogList extends SortedList {\n public managers: AppManagers;\n public log: ReturnType;\n public list: HTMLElement;\n public indexKey: ReturnType;\n public onListLengthChange: () => void;\n public virtualFilterId: PeerId;\n private isSavedDialogs: boolean;\n\n constructor(options: {\n managers: SortedDialogList['managers'],\n log?: SortedDialogList['log'],\n list: SortedDialogList['list'],\n indexKey: SortedDialogList['indexKey'],\n onListLengthChange?: SortedDialogList['onListLengthChange'],\n virtualFilterId?: SortedDialogList['virtualFilterId']\n }) {\n super({\n getIndex: (element) => this.managers.dialogsStorage.getDialogIndex(\n this.virtualFilterId ?? element.id,\n this.indexKey,\n this.virtualFilterId ? element.id : undefined\n ),\n onDelete: (element) => {\n element.dialogElement.remove();\n this.onListLengthChange?.();\n },\n onSort: (element, idx) => {\n const willChangeLength = element.dom.listEl.parentElement !== this.list;\n positionElementByIndex(element.dom.listEl, this.list, idx);\n\n if(willChangeLength) {\n this.onListLengthChange?.();\n }\n },\n onElementCreate: async(base) => {\n const loadPromises: Promise[] = [];\n\n const dialogElement = appDialogsManager.addListDialog({\n peerId: this.virtualFilterId ?? base.id,\n loadPromises,\n isBatch: true,\n threadId: this.virtualFilterId ? base.id : undefined,\n isMainList: this.indexKey === 'index_0',\n controlled: true,\n wrapOptions: undefined\n });\n (base as SortedDialog).dom = dialogElement.dom;\n (base as SortedDialog).dialogElement = dialogElement;\n\n await Promise.all(loadPromises);\n return base as SortedDialog;\n },\n updateElementWith: fastRafConventional,\n log: options.log\n });\n\n safeAssign(this, options);\n\n this.isSavedDialogs = this.virtualFilterId === rootScope.myId;\n }\n\n public clear() {\n this.list.replaceChildren();\n this.elements.forEach((element) => {\n element.dialogElement.destroy();\n });\n super.clear();\n }\n}\n\nconst avatarSizeMap: {[k in DialogElementSize]?: number} = {\n bigger: 54,\n abitbigger: 42,\n small: 32\n};\n\nexport type DialogElementSize = RowMediaSizeType;\ntype DialogElementOptions = {\n peerId: PeerId,\n rippleEnabled?: boolean,\n onlyFirstName?: boolean,\n meAsSaved?: boolean,\n avatarSize?: RowMediaSizeType,\n autonomous?: boolean,\n loadPromises?: Promise[],\n fromName?: string,\n noIcons?: boolean,\n threadId?: number,\n wrapOptions: WrapSomethingOptions,\n isMainList?: boolean,\n withStories?: boolean,\n controlled?: boolean\n};\nexport class DialogElement extends Row {\n private static BADGE_ORDER: Parameters[0][] = ['reactionsBadge', 'mentionsBadge', 'unreadBadge', 'pinnedBadge'];\n public dom: DialogDom;\n public middlewareHelper: MiddlewareHelper;\n\n constructor({\n peerId,\n rippleEnabled = true,\n onlyFirstName = false,\n meAsSaved = true,\n avatarSize = 'bigger',\n autonomous,\n loadPromises,\n fromName,\n noIcons,\n threadId,\n wrapOptions = {},\n isMainList,\n withStories,\n controlled\n }: DialogElementOptions) {\n super({\n clickable: true,\n noRipple: !rippleEnabled,\n havePadding: !threadId,\n title: true,\n titleRightSecondary: true,\n subtitle: true,\n subtitleRight: true,\n noWrap: true,\n asLink: true\n });\n\n this.subtitleRight.remove();\n\n const wrapMiddleware = wrapOptions?.middleware;\n this.middlewareHelper = wrapMiddleware ? wrapOptions.middleware.create() : (controlled ? getMiddleware() : undefined);\n\n const newWrapOptions: WrapSomethingOptions = {\n ...wrapOptions\n };\n\n if(this.middlewareHelper) {\n newWrapOptions.middleware = this.middlewareHelper.get();\n }\n\n const isSavedDialog = !!threadId && peerId === rootScope.myId;\n const isForumTopic = !!threadId && !isSavedDialog;\n\n const usePeerId = isSavedDialog ? threadId : peerId;\n\n const avatar = isForumTopic ? undefined : avatarNew({\n middleware: this.middlewareHelper.get(),\n size: avatarSizeMap[avatarSize],\n\n lazyLoadQueue: newWrapOptions.lazyLoadQueue,\n isDialog: !!meAsSaved,\n peerId: fromName ? NULL_PEER_ID : usePeerId,\n peerTitle: fromName,\n withStories,\n wrapOptions: newWrapOptions,\n meAsNotes: isSavedDialog\n });\n loadPromises?.push(avatar?.readyThumbPromise);\n const avatarEl = avatar?.node;\n if(avatarEl) {\n avatarEl.classList.add('dialog-avatar');\n this.applyMediaElement(avatarEl, avatarSize);\n }\n\n const captionDiv = this.container;\n\n const titleSpanContainer = this.title;\n titleSpanContainer.classList.add('user-title');\n\n this.titleRow.classList.add('dialog-title');\n\n const isActive = !autonomous &&\n appImManager.chat &&\n appImManager.isSamePeer(appImManager.chat, {peerId, threadId: threadId, type: isSavedDialog ? ChatType.Saved : ChatType.Chat});\n\n const peerTitle = new PeerTitle();\n const peerTitlePromise = peerTitle.update({\n peerId: usePeerId,\n fromName,\n dialog: meAsSaved,\n onlyFirstName,\n withIcons: !noIcons,\n threadId: isSavedDialog ? undefined : threadId,\n wrapOptions: {\n textColor: appDialogsManager.getPrimaryColor(isActive),\n ...newWrapOptions\n },\n meAsNotes: isSavedDialog\n });\n\n loadPromises?.push(peerTitlePromise);\n titleSpanContainer.append(peerTitle.element);\n\n // const titleIconsPromise = generateTitleIcons(peerId).then((elements) => {\n // titleSpanContainer.append(...elements);\n // });\n\n // if(loadPromises) {\n // loadPromises.push(titleIconsPromise);\n // }\n // }\n\n const span = this.subtitle;\n // span.classList.add('user-last-message');\n\n const li = this.container;\n li.classList.add('chatlist-chat', 'chatlist-chat-' + avatarSize);\n if(!autonomous) {\n (li as HTMLAnchorElement).href = '#' + peerId;\n }\n // if(rippleEnabled) {\n // ripple(li);\n // }\n\n if(avatarSize === 'bigger') {\n this.container.classList.add('row-big');\n } else if(avatarSize === 'small') {\n this.container.classList.add('row-small');\n }\n\n li.dataset.peerId = '' + peerId;\n if(threadId) {\n li.dataset.threadId = '' + threadId;\n }\n\n const statusSpan = document.createElement('span');\n statusSpan.classList.add('message-status', 'sending-status'/* , 'transition', 'reveal' */);\n\n const lastTimeSpan = document.createElement('span');\n lastTimeSpan.classList.add('message-time');\n\n const rightSpan = this.titleRight;\n rightSpan.classList.add('dialog-title-details');\n rightSpan.append(statusSpan, lastTimeSpan);\n\n this.subtitleRow.classList.add('dialog-subtitle', 'has-multiple-badges');\n\n // if(I18n.isRTL) {\n // // this.subtitle.dir = '';\n // // this.subtitle.dir = 'rtl';\n // }\n\n const dom: DialogDom = this.dom = {\n avatarEl: avatar,\n captionDiv,\n titleSpan: peerTitle.element,\n titleSpanContainer,\n statusSpan,\n lastTimeSpan,\n lastMessageSpan: span,\n containerEl: li,\n listEl: li,\n subtitleEl: this.subtitleRow\n };\n\n // this will never happen for migrated legacy chat\n if(!autonomous) {\n (li as any).dialogDom = dom;\n\n if(isMainList && appDialogsManager.forumTab?.peerId === peerId && !threadId) {\n li.classList.add('is-forum-open');\n }\n }\n\n if(isActive) {\n appDialogsManager.setDialogActive(li, true);\n }\n }\n\n public destroy() {\n this.middlewareHelper?.destroy();\n }\n\n public remove() {\n this.destroy();\n this.dom.listEl.remove();\n }\n\n public createPinnedBadge() {\n if(this.dom.pinnedBadge) return;\n const badge = this.dom.pinnedBadge = document.createElement('div');\n badge.className = `dialog-subtitle-badge badge badge-icon badge-${BADGE_SIZE} dialog-subtitle-badge-pinned`;\n badge.append(Icon('chatspinned'));\n this.dom.subtitleEl.append(badge);\n }\n\n public createUnreadBadge() {\n if(this.dom.unreadBadge) return;\n const badge = this.dom.unreadBadge = document.createElement('div');\n badge.className = `dialog-subtitle-badge badge badge-${BADGE_SIZE} dialog-subtitle-badge-unread`;\n this.dom.subtitleEl.append(badge);\n }\n\n public createUnreadAvatarBadge() {\n if(this.dom.unreadAvatarBadge) return;\n const badge = this.dom.unreadAvatarBadge = document.createElement('div');\n badge.className = `dialog-subtitle-badge badge badge-${BADGE_SIZE} avatar-badge`;\n this.dom.listEl.append(badge);\n }\n\n public createMentionsBadge() {\n if(this.dom.mentionsBadge) return;\n const badge = this.dom.mentionsBadge = document.createElement('div');\n badge.className = `dialog-subtitle-badge badge badge-${BADGE_SIZE} mention mention-badge dialog-subtitle-badge-mention`;\n badge.innerText = '@';\n this.dom.subtitleEl.append(badge);\n }\n\n public createReactionsBadge() {\n if(this.dom.reactionsBadge) return;\n const badge = this.dom.reactionsBadge = document.createElement('div');\n badge.className = `dialog-subtitle-badge badge badge-${BADGE_SIZE} reaction-badge dialog-subtitle-badge-reaction`;\n badge.append(Icon('reactions_filled'));\n this.dom.subtitleEl.append(badge);\n }\n\n public toggleBadgeByKey(\n key: Extract,\n hasBadge: boolean,\n justCreated: boolean,\n batch?: boolean\n ) {\n SetTransition({\n element: this.dom[key],\n className: 'is-visible',\n forwards: hasBadge,\n duration: batch ? 0 : BADGE_TRANSITION_TIME,\n onTransitionEnd: hasBadge ? undefined : () => {\n this.dom[key].remove();\n delete this.dom[key];\n },\n useRafs: !justCreated || !isInDOM(this.dom[key]) ? 2 : 0\n });\n }\n}\n\nclass ForumTab extends SliderSuperTabEventable {\n private rows: HTMLElement;\n private subtitle: HTMLElement;\n\n public peerId: PeerId;\n private firstTime: boolean;\n\n private log: ReturnType;\n\n private xd: Some3;\n\n public async toggle(value: boolean) {\n if(this.init2) {\n await this.init2();\n }\n\n SetTransition({\n element: this.container,\n className: 'is-visible',\n forwards: value,\n duration: 300,\n onTransitionEnd: !value ? () => {\n this.onCloseAfterTimeout();\n } : undefined,\n useRafs: this.firstTime ? (this.firstTime = undefined, 2) : undefined\n });\n }\n\n private _close = () => {\n if(!this.slider) {\n appDialogsManager.toggleForumTab(undefined, this);\n } else {\n this.close();\n }\n };\n\n public init(options: {\n peerId: PeerId,\n managers: AppManagers\n }) {\n safeAssign(this, options);\n\n this.log = logger('FORUM');\n this.firstTime = true;\n this.container.classList.add('topics-container');\n\n const isFloating = !this.slider;\n if(isFloating) {\n this.closeBtn.replaceChildren(Icon('close'));\n this.container.classList.add('active', 'is-floating');\n\n attachClickEvent(this.closeBtn, this._close, {listenerSetter: this.listenerSetter});\n }\n\n this.rows = document.createElement('div');\n this.rows.classList.add('sidebar-header__rows');\n\n this.subtitle = document.createElement('div');\n this.subtitle.classList.add('sidebar-header__subtitle');\n\n this.title.replaceWith(this.rows);\n this.rows.append(this.title, this.subtitle);\n\n const list = appDialogsManager.createChatList();\n appDialogsManager.setListClickListener({list, onFound: null, withContext: true});\n this.scrollable.append(list);\n\n this.xd = new Some3(this.peerId, isFloating ? 80 : 0);\n this.xd.scrollable = this.scrollable;\n this.xd.sortedList = new SortedDialogList({\n managers: this.managers,\n log: this.log,\n list,\n indexKey: 'index_0',\n virtualFilterId: this.peerId\n });\n this.xd.bindScrollable();\n\n const btnMenu = ButtonMenuToggle({\n listenerSetter: this.listenerSetter,\n direction: 'bottom-left',\n buttons: [{\n icon: 'add',\n text: 'ForumTopic.Context.New',\n onClick: () => {\n appSidebarLeft.createTab(AppEditTopicTab).open(this.peerId);\n },\n separatorDown: true,\n verify: () => this.managers.appChatsManager.hasRights(this.peerId.toChatId(), 'manage_topics')\n }, {\n icon: 'info',\n text: 'ForumTopic.Context.Info',\n onClick: () => {\n AppSharedMediaTab.open(appSidebarLeft, this.peerId);\n }\n }, {\n icon: 'message',\n text: 'ForumTopic.Context.ShowAsMessages',\n onClick: this.viewAsMessages,\n verify: () => {\n const chat = appImManager.chat;\n return !chat || !appImManager.isSamePeer(chat, this.getOptionsForMessages());\n }\n }, {\n icon: 'adduser',\n text: 'ForumTopic.Context.AddMember',\n onClick: () => {},\n verify: () => false && this.managers.appChatsManager.hasRights(this.peerId.toChatId(), 'invite_users')\n }, {\n icon: 'logout',\n danger: true,\n text: 'LeaveMegaMenu',\n onClick: () => {\n PopupElement.createPopup(PopupDeleteDialog, this.peerId, undefined, (promise) => {\n this._close();\n });\n },\n separator: true,\n verify: async() => !!(await this.managers.appMessagesManager.getDialogOnly(this.peerId))\n }]\n });\n\n this.listenerSetter.add(rootScope)('history_reload', (peerId) => {\n if(this.peerId !== peerId) {\n return;\n }\n\n this.xd.fullReset();\n });\n\n this.listenerSetter.add(rootScope)('chat_update', (chatId) => {\n if(this.peerId !== chatId.toPeerId(true)) {\n return;\n }\n\n const chat = apiManagerProxy.getChat(chatId);\n if(!(chat as Chat.channel).pFlags.forum) {\n appDialogsManager.toggleForumTab(undefined, this);\n }\n });\n\n if(IS_TOUCH_SUPPORTED) {\n handleTabSwipe({\n element: this.container,\n onSwipe: () => {\n appDialogsManager.toggleForumTab(undefined, this);\n },\n middleware: this.middlewareHelper.get()\n });\n }\n\n this.header.append(btnMenu);\n\n if(!isFloating) {\n return this.init2();\n }\n }\n\n public async init2() {\n this.init2 = undefined;\n\n const middleware = this.middlewareHelper.get();\n const peerId = this.peerId;\n\n this.managers.apiUpdatesManager.subscribeToChannelUpdates(this.peerId.toChatId());\n middleware.onDestroy(() => {\n this.managers.apiUpdatesManager.unsubscribeFromChannelUpdates(this.peerId.toChatId());\n });\n\n const peerTitlePromise = wrapPeerTitle({\n peerId,\n dialog: true,\n wrapOptions: {middleware}\n });\n\n const setStatusPromise = appImManager.setPeerStatus({\n peerId,\n element: this.subtitle,\n needClear: true,\n useWhitespace: false,\n middleware,\n noTyping: true\n });\n\n // this.managers.dialogsStorage.getForumTopics(this.peerId).then((messagesForumTopics) => {\n // console.log(messagesForumTopics);\n\n // const promises = messagesForumTopics.topics.map((forumTopic) => {\n // return this.sortedDialogList.add(forumTopic.id);\n // });\n\n // return Promise.all(promises);\n // }).then(() => {\n // this.dialogsPlaceholder.detach(this.sortedDialogList.getAll().size);\n // });\n\n return Promise.all([\n peerTitlePromise,\n setStatusPromise,\n this.xd.onChatsScroll().then((loadResult) => {\n return loadResult.cached ? loadResult.renderPromise : undefined\n })\n ]).then(([\n peerTitle,\n setStatus,\n _\n ]) => {\n if(!middleware()) {\n return;\n }\n\n this.title.append(peerTitle);\n setStatus?.();\n });\n }\n\n public onCloseAfterTimeout() {\n super.onCloseAfterTimeout();\n this.xd.destroy();\n }\n\n public getOptionsForMessages(): Parameters[0] {\n return {\n peerId: this.peerId,\n type: ChatType.Chat\n };\n }\n\n public viewAsMessages = async() => {\n const chat = appImManager.chat;\n const peerId = this.peerId;\n this._close();\n await this.managers.appChatsManager.toggleViewForumAsMessages(peerId.toChatId(), true);\n appImManager[chat?.peerId === peerId ? 'setPeer' : 'setInnerPeer'](this.getOptionsForMessages());\n };\n}\n\nconst NOT_IMPLEMENTED_ERROR = new Error('not implemented');\n\ntype DialogKey = Parameters[0];\nclass Some {\n public sortedList: SortedDialogList;\n public scrollable: Scrollable;\n public loadedDialogsAtLeastOnce: boolean;\n public needPlaceholderAtFirstTime: boolean;\n protected offsets: {top: number, bottom: number};\n protected indexKey: ReturnType;\n protected sliceTimeout: number;\n protected managers: AppManagers;\n protected listenerSetter: ListenerSetter;\n protected loadDialogsPromise: Promise<{cached: boolean, renderPromise: Some2['loadDialogsRenderPromise']}>;\n protected loadDialogsRenderPromise: Promise;\n protected placeholder: DialogsPlaceholder;\n protected log: ReturnType;\n protected placeholderOptions: ConstructorParameters[0];\n\n constructor() {\n this.log = logger('CL');\n this.offsets = {top: 0, bottom: 0};\n this.managers = rootScope.managers;\n this.listenerSetter = new ListenerSetter();\n }\n\n public getOffsetIndex(side: 'top' | 'bottom') {\n return {index: this.scrollable.loadedAll[side] ? 0 : this.offsets[side]};\n }\n\n protected isDialogMustBeInViewport(dialog: T) {\n // return true;\n const topOffset = this.getOffsetIndex('top');\n const bottomOffset = this.getOffsetIndex('bottom');\n\n if(!topOffset.index && !bottomOffset.index) {\n return true;\n }\n\n const index = getDialogIndex(dialog, this.indexKey);\n return (!topOffset.index || index <= topOffset.index) &&\n (!bottomOffset.index || index >= bottomOffset.index);\n }\n\n public setIndexKey(indexKey: Some['indexKey']) {\n this.indexKey = indexKey;\n this.sortedList.indexKey = indexKey;\n }\n\n protected deleteDialogByKey(key: DialogKey) {\n this.sortedList.delete(key);\n }\n\n public deleteDialog(dialog: T) {\n return this.deleteDialogByKey(this.getDialogKey(dialog));\n }\n\n public updateDialog(dialog: T) {\n const key = this.getDialogKey(dialog);\n if(this.isDialogMustBeInViewport(dialog)) {\n if(!this.sortedList.has(key) && this.loadedDialogsAtLeastOnce) {\n this.sortedList.add(key);\n return;\n }\n } else {\n this.deleteDialog(dialog);\n return;\n }\n\n const dialogElement = this.getDialogElement(key);\n if(!dialogElement) {\n return;\n }\n\n appDialogsManager.setLastMessageN({\n dialog,\n dialogElement,\n setUnread: true\n });\n this.sortedList.update(key);\n }\n\n public onChatsRegularScroll = () => {\n // return;\n\n if(this.sliceTimeout) clearTimeout(this.sliceTimeout);\n this.sliceTimeout = window.setTimeout(() => {\n this.sliceTimeout = undefined;\n\n if(\n !this.sortedList.list.childElementCount ||\n appDialogsManager.processContact\n ) {\n return;\n }\n\n fastRafConventional(() => {\n const selector = '.chatlist-chat';\n const viewportSlice = getViewportSlice({\n overflowElement: this.scrollable.container,\n selector,\n extraMinLength: 10\n });\n\n const visible = viewportSlice.visible;\n const firstVisible = visible[0];\n const lastVisible = visible[visible.length - 1];\n const firstElement = firstVisible?.element;\n const lastElement = lastVisible?.element;\n\n if(!firstElement || !lastElement) {\n return;\n }\n\n if(viewportSlice.invisibleTop.length) {\n this.scrollable.loadedAll.top = false;\n }\n\n if(viewportSlice.invisibleBottom.length) {\n this.scrollable.loadedAll.bottom = false;\n }\n\n const scrollSaver = new ScrollSaver(this.scrollable, selector, !!viewportSlice.invisibleTop.length);\n scrollSaver.save();\n\n [\n ...viewportSlice.invisibleTop,\n ...viewportSlice.invisibleBottom\n ].forEach(({element}) => {\n this.deleteDialogByKey(this.getDialogKeyFromElement(element));\n });\n\n scrollSaver.restore();\n\n this.setOffsets();\n });\n }, 200);\n };\n\n public onChatsScrollTop() {\n return this.onChatsScroll('top');\n };\n\n public onChatsScroll(side: SliceSides = 'bottom') {\n return this.loadDialogs(side);\n };\n\n public createPlaceholder(): DialogsPlaceholder {\n const placeholder = this.placeholder = new DialogsPlaceholder(this.placeholderOptions);\n const getRectFrom = this.getRectFromForPlaceholder();\n placeholder.attach({\n container: this.sortedList.list.parentElement,\n getRectFrom,\n onRemove: () => {\n if(this.placeholder === placeholder) {\n this.placeholder = undefined;\n }\n },\n blockScrollable: this.scrollable\n });\n\n return placeholder;\n }\n\n public loadDialogs(side: SliceSides) {\n /* if(testScroll) {\n return;\n } */\n\n const log = this.log.bindPrefix('load-' + getUnsafeRandomInt(1000, 9999));\n log('try', side);\n\n if(this.loadDialogsPromise || this.loadDialogsRenderPromise/* || 1 === 1 */) return this.loadDialogsPromise;\n else if(this.scrollable.loadedAll[side]) {\n return Promise.resolve({\n cached: true,\n renderPromise: Promise.resolve()\n });\n }\n\n log.warn('start', side);\n const middlewareError = makeError('MIDDLEWARE');\n\n const cachedInfoPromise = deferredPromise();\n const renderPromise = new Promise(async(resolve, reject) => {\n const chatList = this.sortedList.list;\n\n let placeholder = this.placeholder;\n try {\n const getConversationsResult = this.loadDialogsInner(side);\n const a = await getConversationsResult;\n\n if(\n !chatList.childElementCount &&\n !placeholder &&\n (\n (!this.loadedDialogsAtLeastOnce && this.needPlaceholderAtFirstTime) ||\n !a.cached\n )\n ) {\n if(this.loadDialogsRenderPromise !== renderPromise) {\n throw middlewareError;\n }\n\n placeholder = this.createPlaceholder();\n\n cachedInfoPromise.resolve(false);\n }\n\n const result = await a.result;\n // await pause(5000);\n if(this.loadDialogsRenderPromise !== renderPromise) {\n throw middlewareError;\n }\n\n cachedInfoPromise.resolve(a.cached);\n\n // console.timeEnd('getDialogs time');\n\n // * loaded all\n // if(!result.dialogs.length || chatList.childElementCount === result.count) {\n // !result.dialogs.length не подходит, так как при супердревном диалоге getConversations его не выдаст.\n // if(chatList.childElementCount === result.count) {\n if(side === 'bottom') {\n if(result.isEnd) {\n this.scrollable.loadedAll[side] = true;\n }\n } else if(result.isTopEnd) {\n this.scrollable.loadedAll[side] = true;\n }\n\n const length = result.dialogs.length;\n log(`will render ${length} dialogs`);\n if(length) {\n const dialogs = side === 'top' ? result.dialogs.slice().reverse() : result.dialogs;\n\n const loadPromises = dialogs.map((dialog) => {\n return this.sortedList.add(this.getDialogKey(dialog as T));\n });\n\n await Promise.all(loadPromises).catch()\n if(this.loadDialogsRenderPromise !== renderPromise) {\n throw middlewareError;\n }\n }\n\n const offsetDialog = result.dialogs[side === 'top' ? 0 : length - 1];\n if(offsetDialog) {\n this.offsets[side] = getDialogIndex(offsetDialog, this.indexKey);\n }\n\n // don't set it before - no need to fire length change with every dialog\n this.loadedDialogsAtLeastOnce = true;\n appDialogsManager.onListLengthChange();\n\n log('getDialogs', result, chatList.childElementCount);\n\n setTimeout(() => {\n this.scrollable.onScroll();\n }, 0);\n\n if(placeholder) {\n // await pause(500);\n placeholder.detach(chatList.childElementCount);\n }\n } catch(err) {\n if((err as ApiError)?.type !== 'MIDDLEWARE') {\n log.error(err);\n }\n\n reject(err);\n cachedInfoPromise.reject(err);\n return;\n }\n\n resolve();\n }).finally(() => {\n if(this.loadDialogsRenderPromise === renderPromise) {\n log('end');\n this.loadDialogsRenderPromise = undefined;\n } else {\n log('has been cleared');\n }\n });\n\n this.loadDialogsRenderPromise = renderPromise;\n const loadDialogsPromise = this.loadDialogsPromise = cachedInfoPromise.then((cached) => {\n return {\n cached,\n renderPromise\n };\n }).finally(() => {\n if(this.loadDialogsPromise === loadDialogsPromise) {\n this.loadDialogsPromise = undefined;\n }\n });\n\n return loadDialogsPromise;\n }\n\n public async setOffsets() {\n const chatList = this.sortedList.list;\n const [firstDialog, lastDialog] = await Promise.all([\n this.getDialogFromElement(chatList.firstElementChild as HTMLElement),\n this.getDialogFromElement(chatList.lastElementChild as HTMLElement)\n ]);\n\n const {indexKey} = this;\n this.offsets.top = getDialogIndex(firstDialog, indexKey);\n this.offsets.bottom = getDialogIndex(lastDialog, indexKey);\n }\n\n public getDialogKey(dialog: T): DialogKey {\n throw NOT_IMPLEMENTED_ERROR;\n }\n\n public getDialogKeyFromElement(element: HTMLElement): DialogKey {\n throw NOT_IMPLEMENTED_ERROR;\n }\n\n public getRectFromForPlaceholder(): Parameters[0]['getRectFrom'] {\n throw NOT_IMPLEMENTED_ERROR;\n }\n\n public getDialogFromElement(element: HTMLElement): Promise {\n throw NOT_IMPLEMENTED_ERROR;\n }\n\n public loadDialogsInner(side: SliceSides): ReturnType {\n throw NOT_IMPLEMENTED_ERROR;\n }\n\n public async setTyping(dialog: T) {\n const key = this.getDialogKey(dialog);\n const dom = this.getDialogDom(key);\n if(!dom) {\n return;\n }\n\n const oldTypingElement = dom.lastMessageSpan.querySelector('.peer-typing-container') as HTMLElement;\n const newTypingElement = await appImManager.getPeerTyping(\n dialog.peerId,\n oldTypingElement,\n isForumTopic(dialog) ? dialog.id : undefined\n );\n if(!oldTypingElement && newTypingElement) {\n replaceContent(dom.lastMessageSpan, newTypingElement);\n dom.lastMessageSpan.classList.add('user-typing');\n }\n }\n\n public unsetTyping(dialog: T) {\n const key = this.getDialogKey(dialog);\n const dialogElement = this.getDialogElement(key);\n if(!dialogElement) {\n return;\n }\n\n dialogElement.dom.lastMessageSpan.classList.remove('user-typing');\n appDialogsManager.setLastMessageN({\n dialog,\n lastMessage: null,\n dialogElement,\n setUnread: null\n });\n }\n\n public getDialogDom(key: DialogKey) {\n // return this.doms[peerId];\n const element = this.sortedList.get(key);\n return element?.dom;\n }\n\n public getDialogElement(key: DialogKey) {\n const element = this.sortedList.get(key);\n return element?.dialogElement;\n }\n\n public bindScrollable() {\n this.scrollable.container.addEventListener('scroll', this.onChatsRegularScroll);\n this.scrollable.onScrolledTop = this.onChatsScrollTop.bind(this);\n this.scrollable.onScrolledBottom = this.onChatsScroll.bind(this);\n }\n\n public clear() {\n this.sortedList.clear();\n this.placeholder?.remove();\n }\n\n public reset() {\n this.scrollable.loadedAll.top = true;\n this.scrollable.loadedAll.bottom = false;\n this.offsets.top = this.offsets.bottom = 0;\n this.loadDialogsRenderPromise = undefined;\n this.loadDialogsPromise = undefined;\n }\n\n public fullReset() {\n this.reset();\n this.clear();\n return this.onChatsScroll();\n }\n\n public destroy() {\n this.clear();\n this.scrollable.destroy();\n this.listenerSetter.removeAll();\n }\n}\n\nclass Some3 extends Some {\n constructor(public peerId: PeerId, public paddingX: number) {\n super();\n\n this.placeholderOptions = {\n avatarSize: 0,\n marginVertical: 5,\n totalHeight: 64\n };\n\n this.listenerSetter.add(rootScope)('peer_typings', async({peerId, threadId, typings}) => {\n if(!threadId || this.peerId !== peerId) {\n return;\n }\n\n const dialog = await this.managers.dialogsStorage.getForumTopic(peerId, threadId);\n\n if(!dialog) return;\n\n if(typings.length) {\n this.setTyping(dialog);\n } else {\n this.unsetTyping(dialog);\n }\n });\n\n this.listenerSetter.add(rootScope)('dialogs_multiupdate', (dialogs) => {\n for(const [peerId, {dialog, topics}] of dialogs) {\n if(peerId !== this.peerId || !topics?.size) {\n continue;\n }\n\n topics.forEach((forumTopic) => {\n this.updateDialog(forumTopic);\n });\n }\n });\n\n this.listenerSetter.add(rootScope)('dialog_unread', ({dialog}) => {\n if(!isForumTopic(dialog) || dialog.peerId !== this.peerId) {\n return;\n }\n\n appDialogsManager.setUnreadMessagesN({dialog, dialogElement: this.getDialogElement(this.getDialogKey(dialog))});\n });\n\n this.listenerSetter.add(rootScope)('dialog_notify_settings', async(dialog) => {\n if(dialog.peerId !== this.peerId) {\n return;\n }\n\n if(isDialog(dialog)) {\n const all = this.sortedList.getAll();\n const entries = [...all.entries()];\n const promises = entries.map(([id]) => this.managers.dialogsStorage.getForumTopic(this.peerId, id));\n const topics = await Promise.all(promises);\n entries.forEach(([id, element], idx) => {\n appDialogsManager.setUnreadMessagesN({dialog: topics[idx], dialogElement: element.dialogElement}); // возможно это не нужно, но нужно менять is-muted\n });\n\n return;\n }\n\n appDialogsManager.setUnreadMessagesN({dialog, dialogElement: this.getDialogElement(this.getDialogKey(dialog))}); // возможно это не нужно, но нужно менять is-muted\n });\n\n this.listenerSetter.add(rootScope)('dialog_drop', (dialog) => {\n if(!isForumTopic(dialog) || dialog.peerId !== this.peerId) {\n return;\n }\n\n this.deleteDialogByKey(this.getDialogKey(dialog));\n });\n\n this.listenerSetter.add(rootScope)('dialog_draft', ({dialog, drop, peerId}) => {\n if(!isForumTopic(dialog) || dialog.peerId !== this.peerId) {\n return;\n }\n\n if(drop) {\n this.deleteDialog(dialog);\n } else {\n this.updateDialog(dialog);\n }\n });\n }\n\n protected isDialogMustBeInViewport(dialog: ForumTopic) {\n if(dialog.pFlags.hidden) return false;\n return super.isDialogMustBeInViewport(dialog);\n }\n\n public getDialogKey(dialog: ForumTopic) {\n return dialog.id;\n }\n\n public getDialogKeyFromElement(element: HTMLElement) {\n return +element.dataset.threadId;\n }\n\n public getRectFromForPlaceholder() {\n return (): DOMRectEditable => {\n const sidebarRect = appSidebarLeft.rect;\n const paddingY = 56;\n return {\n top: paddingY,\n right: sidebarRect.right,\n bottom: 0,\n left: this.paddingX,\n width: sidebarRect.width - this.paddingX,\n height: sidebarRect.height - paddingY\n };\n };\n }\n\n public getDialogFromElement(element: HTMLElement) {\n return this.managers.dialogsStorage.getForumTopic(+element.dataset.peerId, +element.dataset.threadId);\n }\n\n public async loadDialogsInner(side: SliceSides) {\n const {indexKey} = this;\n let loadCount = windowSize.height / 64 * 1.25 | 0;\n let offsetIndex = 0;\n\n const filterId = this.peerId;\n const {index: currentOffsetIndex} = this.getOffsetIndex(side);\n offsetIndex = currentOffsetIndex;\n if(currentOffsetIndex) {\n if(side === 'top') {\n const storage = await this.managers.dialogsStorage.getFolderDialogs(filterId, true);\n const index = storage.findIndex((dialog) => getDialogIndex(dialog, indexKey) <= currentOffsetIndex);\n const needIndex = Math.max(0, index - loadCount);\n loadCount = index - needIndex;\n offsetIndex = getDialogIndex(storage[needIndex], indexKey) + 1;\n } else {\n offsetIndex = currentOffsetIndex;\n }\n }\n\n return this.managers.acknowledged.dialogsStorage.getDialogs({\n offsetIndex,\n limit: loadCount,\n filterId,\n skipMigrated: !!CAN_HIDE_TOPIC\n });\n }\n}\n\nclass Some2 extends Some {\n constructor(protected filterId: number) {\n super();\n\n this.needPlaceholderAtFirstTime = true;\n\n this.listenerSetter.add(rootScope)('peer_typings', async({peerId, typings}) => {\n const [dialog, isForum] = await Promise.all([\n this.managers.appMessagesManager.getDialogOnly(peerId),\n this.managers.appPeersManager.isForum(peerId)\n ]);\n\n if(!dialog || isForum) return;\n\n if(typings.length) {\n this.setTyping(dialog);\n } else {\n this.unsetTyping(dialog);\n }\n });\n\n this.listenerSetter.add(rootScope)('user_update', async(userId) => {\n if(!this.isActive) {\n return;\n }\n\n const peerId = userId.toPeerId();\n const dom = this.getDialogDom(peerId);\n if(!dom) {\n return;\n }\n\n const status = await this.managers.appUsersManager.getUserStatus(userId);\n const online = status?._ === 'userStatusOnline';\n this.setOnlineStatus(dom.avatarEl.node, online);\n });\n\n this.listenerSetter.add(rootScope)('chat_update', async(chatId) => {\n const peerId = chatId.toPeerId(true);\n this.processDialogForCallStatus(peerId);\n });\n\n this.listenerSetter.add(rootScope)('dialog_flush', ({dialog}) => {\n if(!this.isActive || !dialog) {\n return;\n }\n\n this.updateDialog(dialog);\n });\n\n this.listenerSetter.add(rootScope)('dialogs_multiupdate', (dialogs) => {\n if(!this.isActive) {\n return;\n }\n\n for(const [peerId, {dialog, topics}] of dialogs) {\n if(!isDialog(dialog)) {\n continue;\n }\n\n this.updateDialog(dialog);\n appDialogsManager.processContact?.(peerId.toPeerId());\n }\n });\n\n this.listenerSetter.add(rootScope)('dialog_drop', (dialog) => {\n if(!this.isActive || !isDialog(dialog)) {\n return;\n }\n\n this.deleteDialogByKey(this.getDialogKey(dialog));\n appDialogsManager.processContact?.(dialog.peerId);\n });\n\n this.listenerSetter.add(rootScope)('dialog_unread', ({dialog}) => {\n if(!this.isActive || !isDialog(dialog)) {\n return;\n }\n\n this.updateDialog(dialog);\n });\n\n this.listenerSetter.add(rootScope)('dialog_notify_settings', (dialog) => {\n if(!this.isActive || !isDialog(dialog)) {\n return;\n }\n\n this.updateDialog(dialog);\n });\n\n this.listenerSetter.add(rootScope)('dialog_draft', ({dialog, drop, peerId}) => {\n if(!this.isActive || isForumTopic(dialog)) {\n return;\n }\n\n if(drop) {\n this.deleteDialog(dialog);\n } else {\n this.updateDialog(dialog);\n }\n\n appDialogsManager.processContact?.(peerId);\n });\n\n this.listenerSetter.add(rootScope)('filter_update', async(filter) => {\n if(this.isActive && filter.id === this.filterId && !REAL_FOLDERS.has(filter.id)) {\n const dialogs = await this.managers.dialogsStorage.getCachedDialogs(true);\n await this.validateListForFilter();\n for(let i = 0, length = dialogs.length; i < length; ++i) {\n const dialog = dialogs[i];\n this.updateDialog(dialog);\n }\n\n if(appDialogsManager.filterId === this.filterId) {\n appDialogsManager.fetchChatlistUpdates?.();\n }\n }\n });\n }\n\n private get isActive() {\n return appDialogsManager.xd === this;\n }\n\n public getRectFromForPlaceholder() {\n return this.filterId === FOLDER_ID_ARCHIVE ? appDialogsManager.chatsContainer : appDialogsManager.folders.container;\n }\n\n public async loadDialogsInner(side: SliceSides) {\n const {filterId, indexKey} = this;\n let loadCount = windowSize.height / 72 * 1.25 | 0;\n let offsetIndex = 0;\n\n const doNotRenderChatList = appDialogsManager.doNotRenderChatList; // cache before awaits\n\n const {index: currentOffsetIndex} = this.getOffsetIndex(side);\n if(currentOffsetIndex) {\n if(side === 'top') {\n const storage = await this.managers.dialogsStorage.getFolderDialogs(filterId, true);\n const index = storage.findIndex((dialog) => getDialogIndex(dialog, indexKey) <= currentOffsetIndex);\n const needIndex = Math.max(0, index - loadCount);\n loadCount = index - needIndex;\n offsetIndex = getDialogIndex(storage[needIndex], indexKey) + 1;\n } else {\n offsetIndex = currentOffsetIndex;\n }\n }\n\n const promise = this.managers.acknowledged.dialogsStorage.getDialogs({\n offsetIndex,\n limit: loadCount,\n filterId,\n skipMigrated: true\n });\n\n const a = await promise;\n if(doNotRenderChatList) {\n a.result = Promise.reject(makeError('MIDDLEWARE'));\n }\n\n return a;\n }\n\n public setOnlineStatus(element: HTMLElement, online: boolean) {\n const className = 'is-online';\n const hasClassName = element.classList.contains(className);\n !hasClassName && online && element.classList.add(className);\n SetTransition({\n element: element,\n className: 'is-visible',\n forwards: online,\n duration: 250,\n onTransitionEnd: online ? undefined : () => {\n element.classList.remove(className);\n },\n useRafs: online && !hasClassName ? 2 : 0\n });\n }\n\n public generateScrollable(list: HTMLUListElement, filter: Parameters[0]) {\n const filterId = filter.id;\n const scrollable = new Scrollable(null, 'CL', 500);\n scrollable.container.dataset.filterId = '' + filterId;\n\n const indexKey = getDialogIndexKey(filter.localId);\n const sortedDialogList = new SortedDialogList({\n managers: rootScope.managers,\n log: this.log,\n list: list,\n indexKey,\n onListLengthChange: () => {\n scrollable.onSizeChange();\n appDialogsManager.onListLengthChange?.();\n }\n });\n\n this.scrollable = scrollable;\n this.sortedList = sortedDialogList;\n this.setIndexKey(indexKey);\n this.bindScrollable();\n\n // list.classList.add('hide');\n // scrollable.container.style.backgroundColor = '#' + (Math.random() * (16 ** 6 - 1) | 0).toString(16);\n\n return scrollable;\n }\n\n public testDialogForFilter(dialog: Dialog) {\n if(!REAL_FOLDERS.has(this.filterId) ? getDialogIndex(dialog, this.indexKey) === undefined : this.filterId !== dialog.folder_id) {\n return false;\n }\n\n return true;\n }\n\n protected isDialogMustBeInViewport(dialog: Dialog) {\n if(dialog.migratedTo !== undefined || !this.testDialogForFilter(dialog)) return false;\n return super.isDialogMustBeInViewport(dialog);\n }\n\n /**\n * Удалит неподходящие чаты из списка, но не добавит их(!)\n */\n public async validateListForFilter() {\n this.sortedList.getAll().forEach(async(element) => {\n const dialog = await rootScope.managers.appMessagesManager.getDialogOnly(element.id);\n if(!this.testDialogForFilter(dialog)) {\n this.deleteDialog(dialog);\n }\n });\n }\n\n public updateDialog(dialog: Dialog) {\n if(!this.testDialogForFilter(dialog)) {\n if(this.getDialogElement(dialog.peerId)) {\n this.deleteDialog(dialog);\n }\n\n return;\n }\n\n return super.updateDialog(dialog);\n }\n\n public setCallStatus(dom: DialogDom, visible: boolean) {\n let {callIcon, listEl} = dom;\n if(!callIcon && visible) {\n const {canvas, startAnimation} = dom.callIcon = callIcon = groupCallActiveIcon(listEl.classList.contains('active'));\n canvas.classList.add('dialog-group-call-icon');\n listEl.append(canvas);\n startAnimation();\n }\n\n if(!callIcon) {\n return;\n }\n\n SetTransition({\n element: dom.callIcon.canvas,\n className: 'is-visible',\n forwards: visible,\n duration: BADGE_TRANSITION_TIME,\n onTransitionEnd: visible ? undefined : () => {\n dom.callIcon.canvas.remove();\n dom.callIcon = undefined;\n },\n useRafs: visible ? 2 : 0\n });\n }\n\n public processDialogForCallStatus(peerId: PeerId, dom?: DialogDom) {\n if(!IS_GROUP_CALL_SUPPORTED) {\n return;\n }\n\n if(!dom) dom = this.getDialogDom(peerId);\n if(!dom) return;\n\n const chat = apiManagerProxy.getChat(peerId.toChatId()) as Chat.chat | Chat.channel;\n this.setCallStatus(dom, !!(chat.pFlags.call_active && chat.pFlags.call_not_empty));\n }\n\n public onChatsScroll(side: SliceSides = 'bottom') {\n if(this.scrollable.loadedAll[side]) {\n appDialogsManager.loadContacts?.();\n }\n\n this.log('onChatsScroll', side);\n return super.onChatsScroll(side);\n }\n\n public toggleAvatarUnreadBadges(value: boolean, useRafs: number) {\n if(!value) {\n this.sortedList.getAll().forEach((sortedDialog) => {\n const {dom, dialogElement} = sortedDialog;\n if(!dom.unreadAvatarBadge) {\n return;\n }\n\n dialogElement.toggleBadgeByKey('unreadAvatarBadge', false, false, false);\n });\n\n return;\n }\n\n const reuseClassNames = ['unread', 'mention'];\n this.sortedList.getAll().forEach((sortedDialog) => {\n const {dom, dialogElement} = sortedDialog;\n const unreadContent = dom.unreadBadge?.textContent;\n if(\n !unreadContent ||\n dom.unreadBadge.classList.contains('backwards') ||\n dom.unreadBadge.classList.contains('dialog-pinned-icon')\n ) {\n return;\n }\n\n const isUnreadAvatarBadgeMounted = !!dom.unreadAvatarBadge;\n dialogElement.createUnreadAvatarBadge();\n dialogElement.toggleBadgeByKey('unreadAvatarBadge', true, isUnreadAvatarBadgeMounted);\n dom.unreadAvatarBadge.textContent = unreadContent;\n const unreadAvatarBadgeClassList = dom.unreadAvatarBadge.classList;\n const unreadBadgeClassList = dom.unreadBadge.classList;\n reuseClassNames.forEach((className) => {\n unreadAvatarBadgeClassList.toggle(className, unreadBadgeClassList.contains(className));\n });\n });\n }\n\n public getDialogKey(dialog: Dialog) {\n return dialog.peerId;\n }\n\n public getDialogKeyFromElement(element: HTMLElement) {\n return +element.dataset.peerId;\n }\n\n public getDialogFromElement(element: HTMLElement) {\n return rootScope.managers.appMessagesManager.getDialogOnly(element.dataset.peerId.toPeerId());\n }\n}\n\nexport class Some4 extends Some {\n public onAnyUpdate: () => void;\n\n constructor() {\n super();\n\n // this.listenerSetter.add(rootScope)('dialog_flush', ({dialog}) => {\n // if(!dialog) {\n // return;\n // }\n\n // this.updateDialog(dialog);\n // });\n\n this.listenerSetter.add(rootScope)('dialogs_multiupdate', (dialogs) => {\n let hasAnyUpdate = false;\n for(const [peerId, {saved}] of dialogs) {\n saved?.forEach((dialog) => {\n hasAnyUpdate = true;\n this.updateDialog(dialog);\n });\n }\n\n if(hasAnyUpdate) {\n this.onAnyUpdate?.();\n }\n });\n\n this.listenerSetter.add(rootScope)('dialog_drop', (dialog) => {\n if(!isSavedDialog(dialog)) {\n return;\n }\n\n this.deleteDialogByKey(this.getDialogKey(dialog));\n this.onAnyUpdate?.();\n });\n }\n\n public getRectFromForPlaceholder() {\n return appDialogsManager.chatsContainer;\n }\n\n public async loadDialogsInner(side: SliceSides) {\n const {indexKey} = this;\n let loadCount = windowSize.height / 72 * 1.25 | 0;\n let offsetIndex = 0;\n\n const filterId = rootScope.myId;\n const {index: currentOffsetIndex} = this.getOffsetIndex(side);\n offsetIndex = currentOffsetIndex;\n if(currentOffsetIndex) {\n if(side === 'top') {\n const storage = await this.managers.dialogsStorage.getFolderDialogs(filterId);\n const index = storage.findIndex((dialog) => getDialogIndex(dialog, indexKey) <= currentOffsetIndex);\n const needIndex = Math.max(0, index - loadCount);\n loadCount = index - needIndex;\n offsetIndex = getDialogIndex(storage[needIndex], indexKey) + 1;\n } else {\n offsetIndex = currentOffsetIndex;\n }\n }\n\n return this.managers.acknowledged.dialogsStorage.getDialogs({\n offsetIndex,\n limit: loadCount,\n filterId,\n skipMigrated: true\n });\n }\n\n public getDialogKey(dialog: SavedDialog) {\n return dialog.savedPeerId;\n }\n\n public getDialogKeyFromElement(element: HTMLElement) {\n return +element.dataset.peerId;\n }\n\n public getDialogFromElement(element: HTMLElement) {\n return rootScope.managers.dialogsStorage.getAnyDialog(element.dataset.peerId.toPeerId(), element.dataset.threadId.toPeerId()) as Promise;\n }\n}\n\n// const testScroll = false;\n// let testTopSlice = 1;\n\ntype FilterRendered = {\n id: number,\n menu: HTMLElement,\n container: HTMLElement,\n unread: HTMLElement,\n title: HTMLElement,\n scrollable: Scrollable,\n topNotification?: Row,\n topNotificationContainer?: HTMLElement,\n topNotificationData?: {\n _: 'chatlistUpdates',\n chatlistUpdates: ChatlistsChatlistUpdates\n }\n};\n\nconst TEST_TOP_NOTIFICATION = true ? undefined : (): ChatlistsChatlistUpdates => ({\n _: 'chatlists.chatlistUpdates',\n chats: [],\n users: [],\n missing_peers: [{\n _: 'peerUser',\n user_id: rootScope.myId.toUserId()\n }]\n});\n\nexport class AppDialogsManager {\n public chatsContainer = document.getElementById('chatlist-container') as HTMLDivElement;\n\n private log = logger('DIALOGS', LogTypes.Log | LogTypes.Error | LogTypes.Warn | LogTypes.Debug);\n\n private contextMenu: DialogsContextMenu;\n\n public filterId: number;\n public folders: {[k in 'menu' | 'container' | 'menuScrollContainer']: HTMLElement} = {\n menu: document.getElementById('folders-tabs'),\n menuScrollContainer: null,\n container: document.getElementById('folders-container')\n };\n private filtersRendered: {\n [filterId: string]: FilterRendered\n } = {};\n private showFiltersPromise: Promise;\n\n private lastActiveElements: Set = new Set();\n\n public loadContacts: () => void;\n public processContact: (peerId: PeerId) => void;\n\n private initedListeners = false;\n\n public onListLengthChange: () => Promise;\n private allChatsIntlElement: I18n.IntlElement;\n\n private emptyDialogsPlaceholderSubtitle: I18n.IntlElement;\n private updateContactsLengthPromise: Promise;\n\n private filtersNavigationItem: NavigationItem;\n\n private managers: AppManagers;\n private selectTab: ReturnType;\n\n public doNotRenderChatList: boolean;\n\n private stateMiddlewareHelper: MiddlewareHelper;\n\n private forumsTabs: Map;\n private forumsSlider: HTMLElement;\n public forumTab: ForumTab;\n private forumNavigationItem: NavigationItem;\n\n public xd: Some2;\n public xds: {[filterId: number]: Some2} = {};\n\n public cancelChatlistUpdatesFetching: () => void;\n public fetchChatlistUpdates: () => void;\n\n private storiesListContainer: HTMLDivElement;\n private bottomPart: HTMLDivElement;\n private disposeStories: () => void;\n public resizeStoriesList: () => void;\n\n public start() {\n const managers = this.managers = getProxiedManagers();\n\n this.contextMenu = new DialogsContextMenu(managers);\n this.stateMiddlewareHelper = getMiddleware();\n\n this.folders.menuScrollContainer = this.folders.menu.parentElement;\n\n this.onListLengthChange = debounce(this._onListLengthChange, 100, false, true);\n\n const bottomPart = this.bottomPart = document.createElement('div');\n bottomPart.classList.add('connection-status-bottom');\n bottomPart.append(this.folders.container);\n\n const storiesListContainer = this.storiesListContainer = document.createElement('div');\n storiesListContainer.classList.add('stories-list');\n\n this.forumsTabs = new Map();\n this.forumsSlider = document.createElement('div');\n this.forumsSlider.classList.add('topics-slider');\n this.chatsContainer.parentElement.parentElement.append(this.forumsSlider);\n\n // appSidebarLeft.onOpenTab = () => {\n // return this.toggleForumTab();\n // };\n\n if(IS_TOUCH_SUPPORTED) {\n handleTabSwipe({\n element: this.folders.container,\n onSwipe: (xDiff) => {\n const prevId = selectTab.prevId();\n selectTab(xDiff < 0 ? prevId + 1 : prevId - 1);\n },\n verifyTouchTarget: () => {\n return !this.forumTab;\n }\n });\n }\n\n this.allChatsIntlElement = new I18n.IntlElement({\n key: 'FilterAllChatsShort'\n });\n\n rootScope.addEventListener('premium_toggle', async(isPremium) => {\n if(isPremium) {\n return;\n }\n\n const isFolderAvailable = await this.managers.filtersStorage.isFilterIdAvailable(this.filterId);\n if(!isFolderAvailable) {\n selectTab(whichChild(this.filtersRendered[FOLDER_ID_ALL].menu), false);\n }\n });\n\n rootScope.addEventListener('state_cleared', () => {\n const clearCurrent = REAL_FOLDERS.has(this.filterId);\n // setTimeout(() =>\n apiManagerProxy.getState().then(async(state) => {\n this.xd.loadedDialogsAtLeastOnce = false;\n this.showFiltersPromise = undefined;\n\n /* const clearPromises: Promise[] = [];\n for(const name in this.managers.appStateManager.storagesResults) {\n const results = this.managers.appStateManager.storagesResults[name as keyof AppStateManager['storages']];\n const storage = this.managers.appStateManager.storages[name as keyof AppStateManager['storages']];\n results.length = 0;\n clearPromises.push(storage.clear());\n } */\n\n if(clearCurrent) {\n this.xd.clear();\n this.onTabChange();\n }\n\n this.onStateLoaded(state);\n })// , 5000);\n });\n\n this.setFilterId(FOLDER_ID_ALL);\n this.addFilter({\n id: FOLDER_ID_ALL,\n title: '',\n localId: FOLDER_ID_ALL\n });\n\n const foldersScrollable = new ScrollableX(this.folders.menuScrollContainer);\n bottomPart.prepend(this.folders.menuScrollContainer);\n const selectTab = this.selectTab = horizontalMenu(this.folders.menu, this.folders.container, async(id, tabContent) => {\n /* if(id !== 0) {\n id += 1;\n } */\n\n const _id = id;\n id = +tabContent.dataset.filterId || FOLDER_ID_ALL;\n\n const isFilterAvailable = this.filterId === -1 || REAL_FOLDERS.has(id) || await this.managers.filtersStorage.isFilterIdAvailable(id);\n if(!isFilterAvailable) {\n showLimitPopup('folders');\n return false;\n }\n\n const wasFilterId = this.filterId;\n if(!IS_MOBILE_SAFARI) {\n if(_id) {\n if(!this.filtersNavigationItem) {\n this.filtersNavigationItem = {\n type: 'filters',\n onPop: () => {\n selectTab(0);\n this.filtersNavigationItem = undefined;\n }\n };\n\n appNavigationController.spliceItems(1, 0, this.filtersNavigationItem);\n }\n } else if(this.filtersNavigationItem) {\n appNavigationController.removeItem(this.filtersNavigationItem);\n this.filtersNavigationItem = undefined;\n }\n }\n\n if(wasFilterId === id) return;\n\n this.xds[id].clear();\n const promise = this.setFilterIdAndChangeTab(id).then(({cached, renderPromise}) => {\n if(cached) {\n return renderPromise;\n }\n });\n\n if(wasFilterId !== -1) {\n return promise;\n }\n }, () => {\n for(const folderId in this.xds) {\n if(+folderId !== this.filterId) {\n this.xds[folderId].clear();\n }\n }\n }, undefined, foldersScrollable);\n\n let clickFilterId: number;\n createContextMenu({\n buttons: [{\n icon: 'edit',\n text: 'FilterEdit',\n onClick: () => {\n this.managers.filtersStorage.getFilter(clickFilterId).then((filter) => {\n const tab = appSidebarLeft.createTab(AppEditFolderTab);\n tab.setInitFilter(filter);\n tab.open();\n });\n },\n verify: () => clickFilterId !== FOLDER_ID_ALL\n }, {\n icon: 'edit',\n text: 'FilterEditAll',\n onClick: () => {\n appSidebarLeft.createTab(AppChatFoldersTab).open();\n },\n verify: () => clickFilterId === FOLDER_ID_ALL\n }, {\n icon: 'readchats',\n text: 'MarkAllAsRead',\n onClick: () => {\n this.managers.dialogsStorage.markFolderAsRead(clickFilterId);\n },\n verify: async() => !!(await this.managers.dialogsStorage.getFolderUnreadCount(clickFilterId)).unreadCount\n }, {\n icon: 'delete',\n className: 'danger',\n text: 'Delete',\n onClick: () => {\n AppEditFolderTab.deleteFolder(clickFilterId);\n },\n verify: () => clickFilterId !== FOLDER_ID_ALL\n }],\n listenTo: this.folders.menu,\n findElement: (e) => findUpClassName(e.target, 'menu-horizontal-div-item'),\n onOpen: (e, target) => {\n clickFilterId = +target.dataset.filterId;\n }\n });\n\n apiManagerProxy.getState().then((state) => {\n // * it should've had a better place :(\n appMediaPlaybackController.setPlaybackParams(state.playbackParams);\n appMediaPlaybackController.addEventListener('playbackParams', (params) => {\n this.managers.appStateManager.pushToState('playbackParams', params);\n });\n\n return this.onStateLoaded(state);\n })/* .then(() => {\n const isLoadedMain = this.managers.appMessagesManager.dialogsStorage.isDialogsLoaded(0);\n const isLoadedArchive = this.managers.appMessagesManager.dialogsStorage.isDialogsLoaded(1);\n const wasLoaded = isLoadedMain || isLoadedArchive;\n const a: Promise = isLoadedMain ? Promise.resolve() : this.managers.appMessagesManager.getConversationsAll('', 0);\n const b: Promise = isLoadedArchive ? Promise.resolve() : this.managers.appMessagesManager.getConversationsAll('', 1);\n a.finally(() => {\n b.then(() => {\n if(wasLoaded) {\n (apiUpdatesManager.updatesState.syncLoading || Promise.resolve()).then(() => {\n this.managers.appMessagesManager.refreshConversations();\n });\n }\n });\n });\n }) */;\n\n mediaSizes.addEventListener('resize', () => {\n this.changeFiltersAllChatsKey();\n });\n\n this.chatsContainer.append(bottomPart);\n\n setTimeout(() => {\n lottieLoader.loadLottieWorkers();\n }, 200);\n\n PopupElement.MANAGERS = rootScope.managers = managers;\n appDownloadManager.construct(managers);\n appSidebarLeft.construct(managers);\n appSidebarRight.construct(managers);\n groupCallsController.construct(managers);\n callsController.construct(managers);\n appImManager.construct(managers);\n if(IS_LIVE_STREAM_SUPPORTED) rtmpCallsController.construct(managers);\n new ConnectionStatusComponent().construct(managers, this.chatsContainer, appSidebarLeft.inputSearch);\n\n // start\n\n this.xd = this.xds[this.filterId];\n\n // selectTab(0, false);\n }\n\n private _renderStories() {\n this.chatsContainer.parentElement.parentElement.firstElementChild.after(this.storiesListContainer);\n return StoriesList({\n foldInto: document.querySelector('.item-main .input-search input'),\n setScrolledOn: this.chatsContainer,\n getScrollable: () => this.xd.scrollable.container,\n listenWheelOn: this.bottomPart,\n offsetX: -1,\n resizeCallback: (callback) => {\n this.resizeStoriesList = callback;\n }\n });\n }\n\n private renderStories() {\n this.disposeStories = render(() => this._renderStories(), this.storiesListContainer);\n }\n\n public get chatList() {\n return this.xd.sortedList.list;\n }\n\n public setFilterId(filterId: number) {\n this.filterId = filterId;\n }\n\n public async setFilterIdAndChangeTab(filterId: number) {\n this.setFilterId(filterId);\n return this.onTabChange();\n }\n\n private initListeners() {\n rootScope.addEventListener('dialog_flush', ({dialog}) => {\n if(!dialog) {\n return;\n }\n\n this.setFiltersUnreadCount();\n });\n\n rootScope.addEventListener('folder_unread', async(folder) => {\n if(folder.id < 0) {\n const dialogElement = this.xd.getDialogElement(folder.id);\n if(!dialogElement) {\n return;\n }\n\n this.setUnreadMessagesN({\n dialog: await this.managers.dialogsStorage.getDialogOnly(folder.id),\n dialogElement\n });\n } else {\n this.setFilterUnreadCount(folder.id);\n }\n });\n\n rootScope.addEventListener('contacts_update', (userId) => {\n this.processContact?.(userId.toPeerId());\n });\n\n appImManager.addEventListener('peer_changed', ({peerId, threadId, isForum}) => {\n const options: Parameters[0] = {peerId, threadId: isForum || rootScope.myId ? threadId : undefined};\n // const perf = performance.now();\n for(const element of this.lastActiveElements) {\n const elementThreadId = +element.dataset.threadId || undefined;\n const elementPeerId = element.dataset.peerId.toPeerId();\n if(!appImManager.isSamePeer({peerId: elementPeerId, threadId: elementThreadId}, options)) {\n this.setDialogActive(element, false);\n }\n }\n\n const elements = Array.from(document.querySelectorAll(`[data-autonomous=\"0\"] .chatlist-chat[data-peer-id=\"${peerId}\"]`)) as HTMLElement[];\n elements.forEach((element) => {\n const elementThreadId = +element.dataset.threadId || undefined;\n if(appImManager.isSamePeer({peerId, threadId: elementThreadId}, options)) {\n this.setDialogActive(element, true);\n }\n });\n // this.log('peer_changed total time:', performance.now() - perf);\n });\n\n rootScope.addEventListener('filter_update', async(filter) => {\n if(REAL_FOLDERS.has(filter.id)) {\n return;\n }\n\n if(!this.filtersRendered[filter.id]) {\n this.addFilter(filter);\n return;\n }\n\n const elements = this.filtersRendered[filter.id];\n setInnerHTML(elements.title, wrapEmojiText(filter.title));\n });\n\n rootScope.addEventListener('filter_delete', (filter) => {\n const elements = this.filtersRendered[filter.id];\n if(!elements) return;\n\n // set tab\n // (this.folders.menu.firstElementChild.children[Math.max(0, filter.id - 2)] as HTMLElement).click();\n elements.container.remove();\n elements.menu.remove();\n\n this.xds[filter.id].destroy();\n delete this.xds[filter.id];\n delete this.filtersRendered[filter.id];\n\n this.onFiltersLengthChange();\n\n if(this.filterId === filter.id) {\n this.selectTab(0, false);\n }\n });\n\n rootScope.addEventListener('filter_order', async(order) => {\n order = order.slice();\n indexOfAndSplice(order, FOLDER_ID_ARCHIVE);\n\n const containerToAppend = this.folders.menu as HTMLElement;\n const r = await Promise.all(order.map(async(filterId) => {\n const [indexKey, filter] = await Promise.all([\n this.managers.dialogsStorage.getDialogIndexKeyByFilterId(filterId),\n this.managers.filtersStorage.getFilter(filterId)\n ]);\n\n return {indexKey, filter};\n }));\n\n order.forEach((filterId, idx) => {\n const {indexKey, filter} = r[idx];\n const renderedFilter = this.filtersRendered[filterId];\n\n this.xds[filterId].setIndexKey(indexKey);\n\n positionElementByIndex(renderedFilter.menu, containerToAppend, filter.localId);\n positionElementByIndex(renderedFilter.container, this.folders.container, filter.localId);\n });\n\n /* if(this.filterId) {\n const tabIndex = order.indexOf(this.filterId) + 1;\n selectTab.prevId = tabIndex;\n } */\n });\n\n rootScope.addEventListener('filter_joined', (filter) => {\n const filterRendered = this.filtersRendered[filter.id];\n this.selectTab(filterRendered.menu);\n });\n }\n\n public getTextColor(active: boolean) {\n return active ? 'white' : 'secondary-text-color';\n }\n\n public getPrimaryColor(active: boolean) {\n return active ? 'white' : 'primary-color';\n }\n\n public setDialogActiveStatus(listEl: HTMLElement, active: boolean) {\n listEl.classList.toggle('active', active);\n\n const customEmojiRenderers = listEl.querySelectorAll('.custom-emoji-renderer');\n customEmojiRenderers.forEach((customEmojiRenderer) => {\n customEmojiRenderer.textColor = this.getTextColor(active);\n });\n\n changeTitleEmojiColor(listEl, this.getPrimaryColor(active));\n }\n\n public setDialogActive(listEl: HTMLElement, active: boolean) {\n const dom = (listEl as any).dialogDom as DialogDom;\n this.setDialogActiveStatus(listEl, active);\n listEl.classList.toggle('is-forum-open', this.forumTab?.peerId === listEl.dataset.peerId.toPeerId() && !listEl.dataset.threadId);\n if(active) {\n this.lastActiveElements.add(listEl);\n } else {\n this.lastActiveElements.delete(listEl);\n }\n\n if(dom?.callIcon) {\n dom.callIcon.setActive(active);\n }\n }\n\n private async onStateLoaded(state: State) {\n this.stateMiddlewareHelper.clean();\n const middleware = this.stateMiddlewareHelper.get();\n const filtersArr = state.filtersArr;\n const haveFilters = filtersArr.length > REAL_FOLDERS.size;\n // const filter = filtersArr.find((filter) => filter.id !== FOLDER_ID_ARCHIVE);\n\n this.disposeStories?.();\n this.disposeStories =\n this.resizeStoriesList =\n undefined;\n\n const addFilters = (filters: MyDialogFilter[]) => {\n for(const filter of filters) {\n this.addFilter(filter);\n }\n };\n\n let addFiltersPromise: Promise;\n if(haveFilters) {\n addFilters(filtersArr);\n } else {\n addFiltersPromise = this.managers.filtersStorage.getDialogFilters().then(addFilters);\n }\n\n this.doNotRenderChatList = true;\n const loadDialogsPromise = this.xd.onChatsScroll();\n const m = middlewarePromise(middleware);\n try {\n await m(loadDialogsPromise);\n } catch(err) {\n\n }\n\n // show the placeholder before the filters, and then will reset to the default tab again\n if(!haveFilters) {\n this.selectTab(0, false);\n }\n\n addFiltersPromise && await m(addFiltersPromise);\n // this.folders.menu.children[0].classList.add('active');\n\n this.renderStories();\n this.doNotRenderChatList = undefined;\n\n this.filterId = -1;\n this.selectTab(0, false);\n\n if(!this.initedListeners) {\n this.initListeners();\n this.initedListeners = true;\n }\n\n haveFilters && this.showFiltersPromise && await m(this.showFiltersPromise);\n\n this.managers.appNotificationsManager.getNotifyPeerTypeSettings();\n\n await (await m(loadDialogsPromise)).renderPromise.catch(noop);\n this.managers.appMessagesManager.fillConversations();\n }\n\n /* private getOffset(side: 'top' | 'bottom'): {index: number, pos: number} {\n if(!this.scroll.loadedAll[side]) {\n const element = (side === 'top' ? this.chatList.firstElementChild : this.chatList.lastElementChild) as HTMLElement;\n if(element) {\n const peerId = element.dataset.peerId;\n const dialog = this.managers.appMessagesManager.getDialogByPeerId(peerId);\n return {index: dialog[0].index, pos: dialog[1]};\n }\n }\n\n return {index: 0, pos: -1};\n } */\n\n public onTabChange = () => {\n const {filterId} = this;\n this.xd = this.xds[filterId];\n this.xd.reset();\n\n this.cancelChatlistUpdatesFetching?.();\n this.cancelChatlistUpdatesFetching = undefined;\n this.fetchChatlistUpdates = undefined;\n\n const promise = this.xd.onChatsScroll();\n\n if(!REAL_FOLDERS.has(filterId)) {\n Promise.all([\n this.managers.filtersStorage.getFilter(filterId),\n this.managers.apiManager.getAppConfig(),\n promise.then(({renderPromise}) => renderPromise).catch(() => {})\n ]).then(([filter, appConfig]) => {\n if(TEST_TOP_NOTIFICATION ? false : filter?._ !== 'dialogFilterChatlist' || this.filterId !== filterId) {\n return;\n }\n\n const updatePeriod = (appConfig.chatlist_update_period ?? 3600) * 1000;\n const filterRendered = this.filtersRendered[filterId];\n let updatedTime = filterRendered.topNotification && !TEST_TOP_NOTIFICATION ?\n (filter as DialogFilter.dialogFilterChatlist).updatedTime || 0 :\n 0;\n let fetching = false;\n\n this.fetchChatlistUpdates = () => {\n updatedTime = Date.now();\n\n if(fetching) {\n return;\n }\n\n fetching = true;\n const promise = TEST_TOP_NOTIFICATION ?\n Promise.resolve(TEST_TOP_NOTIFICATION()) :\n this.managers.filtersStorage.getChatlistUpdates(filterId);\n promise.catch(() => undefined as ChatlistsChatlistUpdates)\n .then((chatlistUpdates) => {\n if(this.filterId !== filterId || this.filtersRendered[filterId] !== filterRendered) {\n return;\n }\n\n const length = chatlistUpdates ? chatlistUpdates.missing_peers.length : 0;\n if(length) {\n this.createTopNotification(filterRendered);\n filterRendered.topNotificationData = {\n _: 'chatlistUpdates',\n chatlistUpdates\n };\n\n const topNotification = filterRendered.topNotification;\n\n const tt = i18n('ChatsNew', [length]);\n tt.classList.add('primary');\n const t = i18n('ChatList.SharedFolder.Title', [tt]);\n topNotification.title.replaceChildren(t);\n topNotification.subtitle.replaceChildren(i18n('ChatList.SharedFolder.Subtitle'));\n }\n\n this.toggleTopNotification(filterRendered, !!length);\n }).finally(() => {\n fetching = false;\n });\n };\n\n this.cancelChatlistUpdatesFetching = eachTimeout(this.fetchChatlistUpdates, () => {\n const elapsedTime = Date.now() - updatedTime;\n return updatePeriod - elapsedTime;\n }, false);\n });\n }\n\n return promise;\n };\n\n private async setFilterUnreadCount(filterId: number) {\n // if(filterId === FOLDER_ID_ALL) {\n // return;\n // }\n\n const unreadSpan = this.filtersRendered[filterId]?.unread;\n if(!unreadSpan) {\n return;\n }\n\n const {unreadUnmutedCount, unreadCount} = await this.managers.dialogsStorage.getFolderUnreadCount(filterId);\n\n unreadSpan.classList.toggle('badge-gray', !unreadUnmutedCount);\n const count = filterId === FOLDER_ID_ALL ? unreadUnmutedCount : unreadCount;\n setBadgeContent(unreadSpan, count ? '' + count : '');\n }\n\n private setFiltersUnreadCount() {\n for(const filterId in this.filtersRendered) {\n this.setFilterUnreadCount(+filterId);\n }\n }\n\n public l(filter: Parameters[0]) {\n const ul = this.createChatList();\n const xd = this.xds[filter.id] = new Some2(filter.id);\n const scrollable = xd.generateScrollable(ul, filter);\n this.setListClickListener({list: ul, onFound: null, withContext: true});\n\n return {ul, xd, scrollable};\n }\n\n private createTopNotification(filterRendered: FilterRendered) {\n if(filterRendered.topNotification) return;\n\n const topNotificationContainer = filterRendered.topNotificationContainer = document.createElement('div');\n topNotificationContainer.classList.add('chatlist-top-notification-container');\n const topNotification: FilterRendered['topNotification'] = filterRendered.topNotification = new Row({\n title: true,\n subtitle: true,\n clickable: async() => {\n const data = filterRendered.topNotificationData;\n if(data._ === 'chatlistUpdates') {\n PopupElement.createPopup(PopupSharedFolderInvite, {\n chatlistInvite: {\n ...data.chatlistUpdates,\n already_peers: [],\n _: 'chatlists.chatlistInviteAlready',\n filter_id: filterRendered.id\n },\n updating: true\n });\n }\n },\n contextMenu: {\n buttons: [{\n icon: 'hide',\n text: 'HideAboveTheList',\n onClick: () => {\n this.managers.filtersStorage.hideChatlistUpdates(filterRendered.id).then(() => {\n if(this.filterId === filterRendered.id) {\n this.fetchChatlistUpdates?.();\n }\n });\n },\n verify: () => filterRendered.topNotificationData?._ === 'chatlistUpdates'\n }]\n },\n icon: 'next'\n });\n topNotification.container.classList.add('chatlist-top-notification');\n\n topNotificationContainer.append(topNotification.container);\n }\n\n private toggleTopNotification(filterRendered: FilterRendered, forwards: boolean) {\n if(!forwards && !filterRendered.topNotification) {\n return;\n }\n\n let isMounted = true;\n if(forwards) {\n isMounted = !!filterRendered.topNotificationContainer.parentElement;\n if(!isMounted) {\n filterRendered.scrollable.prepend(filterRendered.topNotificationContainer);\n }\n }\n\n SetTransition({\n element: filterRendered.topNotificationContainer,\n className: 'is-visible',\n duration: 250,\n forwards,\n useRafs: isMounted ? 0 : 2,\n onTransitionEnd: forwards ? undefined : () => {\n filterRendered.topNotificationContainer.remove();\n filterRendered.topNotification =\n filterRendered.topNotificationContainer =\n filterRendered.topNotificationData = undefined;\n }\n });\n }\n\n private addFilter(filter: Pick) {\n const {id} = filter;\n if(id === FOLDER_ID_ARCHIVE) {\n return;\n }\n\n const containerToAppend = this.folders.menu as HTMLElement;\n const renderedFilter = this.filtersRendered[id];\n if(renderedFilter) {\n positionElementByIndex(renderedFilter.menu, containerToAppend, filter.localId);\n positionElementByIndex(renderedFilter.container, this.folders.container, filter.localId);\n return;\n }\n\n const menuTab = document.createElement('div');\n menuTab.classList.add('menu-horizontal-div-item');\n const span = document.createElement('span');\n span.classList.add('menu-horizontal-div-item-span');\n const titleSpan = document.createElement('span');\n titleSpan.classList.add('text-super');\n if(id === FOLDER_ID_ALL) titleSpan.append(this.allChatsIntlElement.element);\n else setInnerHTML(titleSpan, wrapEmojiText(filter.title));\n const unreadSpan = createBadge('div', 20, 'primary');\n const i = document.createElement('i');\n span.append(titleSpan, unreadSpan, i);\n ripple(menuTab);\n menuTab.append(span);\n\n menuTab.dataset.filterId = '' + id;\n\n positionElementByIndex(menuTab, containerToAppend, filter.localId);\n // containerToAppend.append(li);\n\n const {ul, scrollable} = this.l(filter);\n scrollable.container.classList.add('tabs-tab', 'chatlist-parts');\n\n /* const parts = document.createElement('div');\n parts.classList.add('chatlist-parts'); */\n\n const top = document.createElement('div');\n top.classList.add('chatlist-top');\n\n const bottom = document.createElement('div');\n bottom.classList.add('chatlist-bottom');\n\n top.append(ul);\n scrollable.append(top, bottom);\n /* parts.append(top, bottom);\n scrollable.container.append(parts); */\n\n const div = scrollable.container;\n // this.folders.container.append(div);\n positionElementByIndex(scrollable.container, this.folders.container, filter.localId);\n\n this.filtersRendered[id] = {\n id,\n menu: menuTab,\n container: div,\n unread: unreadSpan,\n title: titleSpan,\n scrollable\n };\n\n this.onFiltersLengthChange();\n }\n\n private changeFiltersAllChatsKey() {\n const scrollable = this.folders.menuScrollContainer.firstElementChild;\n const key: LangPackKey = scrollable.scrollWidth > scrollable.clientWidth ? 'FilterAllChatsShort' : 'FilterAllChats';\n this.allChatsIntlElement.compareAndUpdate({key});\n }\n\n private onFiltersLengthChange() {\n let promise = this.showFiltersPromise;\n return promise ??= this.showFiltersPromise = pause(0).then(() => {\n if(this.showFiltersPromise !== promise) {\n return;\n }\n\n const length = Object.keys(this.filtersRendered).length;\n const show = length > 1;\n const wasShowing = !this.folders.menuScrollContainer.classList.contains('hide');\n\n if(show !== wasShowing) {\n this.folders.menuScrollContainer.classList.toggle('hide', !show);\n if(show && !wasShowing) {\n this.setFiltersUnreadCount();\n }\n\n this.chatsContainer.classList.toggle('has-filters', show);\n }\n\n this.changeFiltersAllChatsKey();\n\n this.showFiltersPromise = undefined;\n });\n }\n\n private generateEmptyPlaceholder(options: {\n title: LangPackKey,\n subtitle?: LangPackKey,\n subtitleArgs?: FormatterArguments,\n classNameType: string\n }) {\n const BASE_CLASS = 'empty-placeholder';\n const container = document.createElement('div');\n container.classList.add(BASE_CLASS, BASE_CLASS + '-' + options.classNameType);\n\n const header = document.createElement('div');\n header.classList.add(BASE_CLASS + '-header');\n _i18n(header, options.title);\n\n const subtitle = document.createElement('div');\n subtitle.classList.add(BASE_CLASS + '-subtitle');\n if(options.subtitle) {\n _i18n(subtitle, options.subtitle, options.subtitleArgs);\n }\n\n container.append(header, subtitle);\n\n return {container, header, subtitle};\n }\n\n private checkIfPlaceholderNeeded() {\n if(this.filterId === FOLDER_ID_ARCHIVE) {\n return;\n }\n\n const chatList = this.chatList;\n const part = chatList.parentElement as HTMLElement;\n let placeholderContainer = (Array.from(part.children) as HTMLElement[]).find((el) => el.matches('.empty-placeholder'));\n const needPlaceholder = this.xd.scrollable.loadedAll.bottom && !chatList.childElementCount/* || true */;\n // chatList.style.display = 'none';\n\n if(needPlaceholder && placeholderContainer) {\n return;\n } else if(!needPlaceholder) {\n if(placeholderContainer) {\n part.classList.remove('with-placeholder');\n placeholderContainer.remove();\n }\n\n return;\n }\n\n let placeholder: ReturnType, type: 'dialogs' | 'folder';\n if(!this.filterId) {\n placeholder = this.generateEmptyPlaceholder({\n title: 'ChatList.Main.EmptyPlaceholder.Title',\n classNameType: type = 'dialogs'\n });\n\n placeholderContainer = placeholder.container;\n\n const img = document.createElement('img');\n img.classList.add('empty-placeholder-dialogs-icon');\n\n this.emptyDialogsPlaceholderSubtitle = new I18n.IntlElement({\n element: placeholder.subtitle\n });\n\n Promise.all([\n this.updateContactsLength(false),\n renderImageFromUrlPromise(img, 'assets/img/EmptyChats.svg'),\n fastRafPromise()\n ]).then(([usersLength]) => {\n placeholderContainer.classList.add('visible');\n part.classList.toggle('has-contacts', !!usersLength);\n });\n\n placeholderContainer.prepend(img);\n } else {\n placeholder = this.generateEmptyPlaceholder({\n title: 'FilterNoChatsToDisplay',\n subtitle: 'FilterNoChatsToDisplayInfo',\n classNameType: type = 'folder'\n });\n\n placeholderContainer = placeholder.container;\n\n const div = document.createElement('div');\n const emoji = '📂';\n const size = 128;\n wrapStickerEmoji({\n div,\n emoji: emoji,\n width: size,\n height: size\n });\n\n placeholderContainer.prepend(div);\n\n const button = Button('btn-primary btn-color-primary btn-control', {\n text: 'FilterHeaderEdit',\n icon: 'settings'\n });\n\n attachClickEvent(button, async() => {\n const tab = appSidebarLeft.createTab(AppEditFolderTab);\n tab.setInitFilter(await this.managers.filtersStorage.getFilter(this.filterId));\n tab.open();\n });\n\n placeholderContainer.append(button);\n }\n\n part.append(placeholderContainer);\n part.classList.add('with-placeholder');\n part.dataset.placeholderType = type;\n }\n\n private updateContactsLength(updatePartClassName: boolean) {\n return this.updateContactsLengthPromise ??= this.managers.appUsersManager.getContacts().then((users) => {\n const subtitle = this.emptyDialogsPlaceholderSubtitle;\n if(subtitle) {\n let key: LangPackKey, args: FormatterArguments;\n\n if(users.length/* && false */) {\n key = 'ChatList.Main.EmptyPlaceholder.Subtitle';\n args = [i18n('Contacts.Count', [users.length])];\n } else {\n key = 'ChatList.Main.EmptyPlaceholder.SubtitleNoContacts';\n args = [];\n }\n\n subtitle.compareAndUpdate({\n key,\n args\n });\n }\n\n if(updatePartClassName) {\n const chatList = this.chatList;\n const part = chatList.parentElement as HTMLElement;\n part.classList.toggle('has-contacts', !!users.length);\n }\n\n this.updateContactsLengthPromise = undefined;\n\n return users.length;\n });\n }\n\n private removeContactsPlaceholder() {\n const chatList = this.chatList;\n const parts = chatList.parentElement.parentElement;\n const bottom = chatList.parentElement.nextElementSibling as HTMLElement;\n parts.classList.remove('with-contacts');\n bottom.replaceChildren();\n this.loadContacts = undefined;\n this.processContact = undefined;\n }\n\n private _onListLengthChange = () => {\n if(!this.xd.loadedDialogsAtLeastOnce) {\n return;\n }\n\n this.checkIfPlaceholderNeeded();\n\n if(this.filterId !== FOLDER_ID_ALL) return;\n\n const chatList = this.chatList;\n const count = chatList.childElementCount;\n\n const parts = chatList.parentElement.parentElement;\n const bottom = chatList.parentElement.nextElementSibling as HTMLElement;\n const hasContacts = !!bottom.childElementCount;\n if(count >= 10) {\n if(hasContacts) {\n this.removeContactsPlaceholder();\n }\n\n return;\n } else if(hasContacts || !this.xd.scrollable.loadedAll.bottom) return;\n\n parts.classList.add('with-contacts');\n\n const section = new SettingSection({\n name: 'Contacts',\n noDelimiter: true,\n fakeGradientDelimiter: true\n });\n\n section.container.classList.add('hide');\n\n this.managers.appUsersManager.getContactsPeerIds(undefined, undefined, 'online').then((contacts) => {\n let ready = false;\n const onListLengthChange = () => {\n if(ready) {\n section.container.classList.toggle('hide', !sortedUserList.list.childElementCount);\n }\n\n this.updateContactsLength(true);\n };\n\n const sortedUserList = new SortedUserList({\n avatarSize: 'abitbigger',\n createChatListOptions: {\n dialogSize: 48,\n new: true\n },\n autonomous: false,\n onListLengthChange,\n managers: this.managers,\n middleware: undefined\n });\n\n this.loadContacts = () => {\n const pageCount = windowSize.height / 60 | 0;\n const promise = filterAsync(contacts.splice(0, pageCount), this.verifyPeerIdForContacts);\n\n promise.then((arr) => {\n arr.forEach((peerId) => {\n sortedUserList.add(peerId);\n });\n });\n\n if(!contacts.length) {\n this.loadContacts = undefined;\n }\n };\n\n this.loadContacts();\n\n this.processContact = async(peerId) => {\n if(peerId.isAnyChat()) {\n return;\n }\n\n const good = await this.verifyPeerIdForContacts(peerId);\n const added = sortedUserList.has(peerId);\n if(!added && good) sortedUserList.add(peerId);\n else if(added && !good) sortedUserList.delete(peerId);\n };\n\n const list = sortedUserList.list;\n list.classList.add('chatlist-new');\n this.setListClickListener({list});\n section.content.append(list);\n\n ready = true;\n onListLengthChange();\n });\n\n bottom.append(section.container);\n };\n\n private verifyPeerIdForContacts = async(peerId: PeerId) => {\n const [isContact, dialog] = await Promise.all([\n this.managers.appPeersManager.isContact(peerId),\n this.managers.appMessagesManager.getDialogOnly(peerId)\n ]);\n\n return isContact && !dialog;\n };\n\n public async toggleForumTab(newTab?: ForumTab, hideTab = this.forumTab) {\n if(!hideTab && !newTab) {\n return;\n }\n\n if(hideTab) {\n const dialogElement = this.xd.getDialogElement(hideTab.peerId);\n if(dialogElement) {\n dialogElement.dom.listEl.classList.remove('is-forum-open');\n }\n }\n\n if(hideTab === newTab) {\n newTab = undefined;\n }\n\n hideTab?.toggle(false);\n const promise = newTab?.toggle(true);\n if(hideTab === this.forumTab) {\n this.forumTab = newTab;\n }\n\n if(newTab) {\n const dialogElement = this.xd.getDialogElement(newTab.peerId);\n if(dialogElement) {\n dialogElement.dom.listEl.classList.add('is-forum-open');\n }\n\n appImManager.selectTab(APP_TABS.CHATLIST);\n }\n\n if(promise) {\n await promise;\n }\n\n if(newTab && !this.forumNavigationItem) {\n this.forumNavigationItem = {\n type: 'forum',\n onPop: () => {\n this.forumNavigationItem = undefined;\n this.toggleForumTab();\n }\n };\n\n appNavigationController.pushItem(this.forumNavigationItem);\n } else if(!newTab && this.forumNavigationItem) {\n appNavigationController.removeItem(this.forumNavigationItem);\n this.forumNavigationItem = undefined;\n }\n\n const forwards = !!newTab;\n const useRafs = promise ? 2 : undefined;\n this.xd.toggleAvatarUnreadBadges(forwards, useRafs);\n\n const deferred = deferredPromise();\n const duration = 300;\n SetTransition({\n element: this.forumsSlider.parentElement,\n className: 'is-forum-visible',\n duration,\n forwards,\n useRafs,\n onTransitionEnd: () => {\n deferred.resolve();\n }\n });\n\n dispatchHeavyAnimationEvent(deferred, duration).then(() => deferred.resolve());\n }\n\n public async toggleForumTabByPeerId(peerId: PeerId, show?: boolean, asInnerIfAsMessages?: boolean) {\n if(peerId === rootScope.myId) {\n const tab = appSidebarLeft.getTab(AppSharedMediaTab);\n if(show === true || (show === undefined && !tab)) {\n AppSharedMediaTab.open(appSidebarLeft, peerId, true);\n } else {\n if(tab?.peerId === peerId) {\n tab.close();\n }\n\n appImManager.setPeer({peerId});\n }\n\n return;\n }\n\n const {managers} = this;\n const history = appSidebarLeft.getHistory();\n const lastTab = history[history.length - 1];\n\n const dialog = await managers.dialogsStorage.getDialogOnly(peerId);\n const viewAsMessages = dialog && !!dialog.pFlags.view_forum_as_messages;\n if(viewAsMessages) {\n const isSamePeer = appImManager.chat?.peerId === peerId;\n appImManager[isSamePeer || !asInnerIfAsMessages ? 'setPeer' : 'setInnerPeer']({\n type: ChatType.Chat,\n peerId\n });\n return;\n }\n\n let forumTab: ForumTab;\n if(lastTab/* && !(lastTab instanceof AppArchivedTab) */) {\n if(lastTab instanceof ForumTab && lastTab.peerId === peerId && show) {\n shake(lastTab.container);\n return;\n }\n\n forumTab = appSidebarLeft.createTab(ForumTab);\n forumTab.open({peerId, managers});\n return;\n }\n\n forumTab = this.forumsTabs.get(peerId);\n const isSameTab = this.forumTab && this.forumTab === forumTab;\n show ??= !isSameTab;\n if(show === isSameTab) {\n if(show) {\n shake(forumTab.container);\n }\n\n return;\n }\n\n if(show && !forumTab) {\n forumTab = new ForumTab(undefined);\n forumTab.init({peerId, managers});\n\n this.forumsTabs.set(peerId, forumTab);\n this.forumsSlider.append(forumTab.container);\n\n forumTab.managers = this.managers;\n forumTab.eventListener.addEventListener('destroy', () => {\n this.forumsTabs.delete(peerId);\n });\n }\n\n return this.toggleForumTab(forumTab);\n }\n\n public openDialogInNewTab(element: HTMLElement) {\n const peerId = element.dataset.peerId.toPeerId();\n const lastMsgId = +element.dataset.mid || undefined;\n const threadId = +element.dataset.threadId || undefined;\n\n const params = new URLSearchParams();\n params.set('p', '' + peerId);\n if(lastMsgId) params.set('message', '' + lastMsgId);\n if(threadId) params.set('thread', '' + threadId);\n const url = `#/im?${params.toString()}`;\n window.open(url, '_blank');\n }\n\n public setListClickListener({\n list,\n onFound,\n withContext = false,\n autonomous = false,\n openInner = false\n }: {\n list: HTMLElement,\n onFound?: (target: HTMLElement) => void | boolean,\n withContext?: boolean,\n autonomous?: boolean,\n openInner?: boolean\n }) {\n let lastActiveListElement: HTMLElement;\n\n const setPeerFunc = (openInner ? appImManager.setInnerPeer : appImManager.setPeer).bind(appImManager);\n\n const findAvatarWithStories = (target: EventTarget) => {\n return (target as HTMLElement).closest('.avatar.has-stories') as HTMLElement;\n };\n\n list.dataset.autonomous = '' + +autonomous;\n list.addEventListener('mousedown', (e) => {\n if(\n e.button !== 0 ||\n findAvatarWithStories(e.target)\n ) {\n return;\n }\n\n this.log('dialogs click list');\n const target = e.target as HTMLElement;\n const elem = findUpTag(target, DIALOG_LIST_ELEMENT_TAG);\n\n if(!elem) {\n return;\n }\n\n const peerId = elem.dataset.peerId.toPeerId();\n const lastMsgId = +elem.dataset.mid || undefined;\n const threadId = +elem.dataset.threadId || undefined;\n\n if(onFound?.(elem) === false) {\n return;\n }\n\n const isForum = !!elem.querySelector('.is-forum');\n if(isForum && !e.shiftKey && !lastMsgId) {\n this.toggleForumTabByPeerId(peerId, undefined, false);\n return;\n }\n\n if(e.ctrlKey || e.metaKey) {\n this.openDialogInNewTab(elem);\n cancelEvent(e);\n return;\n }\n\n if(autonomous) {\n const sameElement = lastActiveListElement === elem;\n if(lastActiveListElement && !sameElement) {\n this.setDialogActiveStatus(lastActiveListElement, false);\n }\n\n if(elem) {\n this.setDialogActiveStatus(elem, true);\n lastActiveListElement = elem;\n this.lastActiveElements.add(elem);\n }\n }\n\n if(\n (!threadId || lastMsgId) &&\n this.xd.sortedList.list === list &&\n this.xd !== this.xds[FOLDER_ID_ARCHIVE]\n ) {\n this.toggleForumTab();\n }\n\n setPeerFunc({\n peerId,\n lastMsgId,\n threadId: threadId\n });\n }, {capture: true});\n\n // cancel link click\n // ! do not change it to attachClickEvent\n list.addEventListener('click', (e) => {\n if(e.button === 0) {\n cancelEvent(e);\n }\n\n const avatar = findAvatarWithStories(e.target);\n avatar && appImManager.openStoriesFromAvatar(avatar);\n }, {capture: true});\n\n if(withContext) {\n this.contextMenu.attach(list);\n }\n }\n\n public createChatList(options: {\n // avatarSize?: number,\n // handheldsSize?: number,\n // size?: number,\n new?: boolean,\n dialogSize?: number,\n ignoreClick?: boolean\n } = {}) {\n const list = document.createElement('ul');\n list.classList.add('chatlist'/* ,\n 'chatlist-avatar-' + (options.avatarSize || 54) *//* , 'chatlist-' + (options.size || 72) */);\n\n if(options.new) {\n list.classList.add('chatlist-new');\n }\n\n if(options.dialogSize) {\n list.classList.add('chatlist-' + options.dialogSize);\n }\n\n // if(options.ignoreClick) {\n // list.classList.add('disable-hover');\n // }\n\n /* if(options.handheldsSize) {\n list.classList.add('chatlist-handhelds-' + options.handheldsSize);\n } */\n\n return list;\n }\n\n public setLastMessageN(options: Parameters[0]) {\n const promise = this.setLastMessage(options);\n return promise.catch((err: ApiError) => {\n if(err?.type !== 'MIDDLEWARE') {\n this.log.error('set last message error', err);\n }\n });\n }\n\n private getLastMessageForDialog(dialog: AnyDialog, lastMessage?: Message.message | Message.messageService) {\n let draftMessage: MyDraftMessage;\n const {peerId, draft} = dialog as Dialog;\n if(!lastMessage) {\n if(\n draft?._ === 'draftMessage' && (\n !peerId.isAnyChat() ||\n isForumTopic(dialog) ||\n !apiManagerProxy.isForum(peerId)\n )\n ) {\n draftMessage = draft;\n }\n\n lastMessage = (dialog as Dialog).topMessage;\n if(lastMessage?.mid !== dialog.top_message) {\n const trueLastMessage = apiManagerProxy.getMessageByPeer(peerId, dialog.top_message);\n if(trueLastMessage && (trueLastMessage as Message.messageService).action?._ !== 'messageActionChannelJoined') {\n lastMessage = trueLastMessage;\n }\n }\n }\n\n return {lastMessage, draftMessage};\n }\n\n private async setLastMessage({\n dialog,\n lastMessage: _lastMessage,\n dialogElement,\n highlightWord,\n isBatch = false,\n setUnread = false,\n noForwardIcon\n }: {\n dialog: AnyDialog,\n lastMessage?: Message.message | Message.messageService,\n dialogElement?: DialogElement,\n highlightWord?: string,\n isBatch?: boolean,\n setUnread?: boolean,\n noForwardIcon?: boolean\n }) {\n if(!dialogElement) {\n dialogElement = this.xd.getDialogElement(dialog.peerId);\n\n if(!dialogElement) {\n return;\n }\n }\n\n const {dom} = dialogElement;\n const {peerId} = dialog;\n const isSaved = isSavedDialog(dialog);\n\n const {deferred: promise, middleware} = setPromiseMiddleware(dom, 'setLastMessagePromise');\n\n const {draftMessage, lastMessage} = this.getLastMessageForDialog(dialog, _lastMessage);\n\n const isSearch = setUnread !== null && !setUnread;\n // * do not uncomment `setUnread` - unsetTyping right after this call will interrupt setting unread badges\n if(/* setUnread */!isSearch) {\n this.setUnreadMessagesN({dialog, dialogElement, isBatch, setLastMessagePromise: promise});\n }\n\n if(!lastMessage && !draftMessage/* || (lastMessage._ === 'messageService' && !lastMessage.rReply) */) {\n dom.lastMessageSpan.replaceChildren();\n dom.lastTimeSpan.replaceChildren();\n delete dom.listEl.dataset.mid;\n\n promise.resolve();\n return;\n }\n\n // set it before content so won't have bug in appSearch\n if(isSearch && lastMessage) {\n dom.listEl.dataset.mid = '' + lastMessage.mid;\n\n const replyTo = lastMessage.reply_to as MessageReplyHeader.messageReplyHeader;\n if(replyTo?.pFlags?.forum_topic) {\n dom.listEl.dataset.threadId = '' + getMessageThreadId(lastMessage);\n }\n }\n\n const isRestricted = !!lastMessage && isMessageRestricted(lastMessage as Message.message);\n\n /* if(!dom.lastMessageSpan.classList.contains('user-typing')) */ {\n let mediaContainer: HTMLElement;\n let willPrepend: (Promise | HTMLElement)[] = [];\n let icon: Icon;\n if(draftMessage) {\n\n } else if((lastMessage as Message.message)?.fwdFromId && !isSaved && !noForwardIcon) {\n icon = 'forward_filled';\n } else if((lastMessage as Message.message)?.reply_to?._ === 'messageReplyStoryHeader') {\n icon = 'storyreply';\n }\n\n if(icon) {\n const span = Icon(icon, 'dialog-subtitle-ico', 'dialog-subtitle-ico-' + icon);\n willPrepend.push(span);\n }\n\n if(lastMessage && !draftMessage && !isRestricted) {\n const media = getMediaFromMessage(lastMessage, true);\n const videoTypes: Set = new Set(['video', 'gif', 'round']);\n if(media && (media._ === 'photo' || videoTypes.has(media.type))) {\n const size = choosePhotoSize(media, 20, 20);\n\n if(size._ !== 'photoSizeEmpty') {\n mediaContainer = document.createElement('div');\n mediaContainer.classList.add('dialog-subtitle-media');\n\n if((media as MyDocument).type === 'round') {\n mediaContainer.classList.add('is-round');\n }\n\n willPrepend.push(wrapPhoto({\n photo: media,\n message: lastMessage,\n container: mediaContainer,\n withoutPreloader: true,\n size\n }).then(() => mediaContainer));\n\n if(videoTypes.has((media as MyDocument).type)) {\n const playIcon = Icon('play', 'dialog-subtitle-media-play');\n mediaContainer.append(playIcon);\n }\n }\n }\n }\n\n /* if(lastMessage.from_id === auth.id) { // You: */\n if(draftMessage) {\n const span = document.createElement('span');\n span.classList.add('danger');\n span.append(i18n('Draft'), ': ');\n willPrepend.unshift(span);\n } else if(peerId.isAnyChat() && peerId !== lastMessage.fromId && !(lastMessage as Message.messageService).action) {\n const span = document.createElement('span');\n span.classList.add('primary-text');\n\n if(lastMessage.fromId === rootScope.myId) {\n span.append(i18n('FromYou'));\n willPrepend.unshift(span);\n } else {\n // str = sender.first_name || sender.last_name || sender.username;\n const p = middleware(wrapPeerTitle({\n peerId: lastMessage.fromId,\n onlyFirstName: true\n })).then((element) => {\n span.prepend(element);\n return span;\n }, noop);\n\n willPrepend.unshift(p);\n }\n\n span.append(': ');\n // console.log(sender, senderBold.innerText);\n }\n\n const withoutMediaType = !!mediaContainer && !!(lastMessage as Message.message)?.message;\n const wrapMessageForReplyOptions: Partial = {\n textColor: this.getTextColor(dom.listEl.classList.contains('active'))\n };\n\n let fragment: DocumentFragment, wrapResult: ReturnType;\n if(highlightWord && (lastMessage as Message.message)?.message) {\n wrapResult = wrapMessageForReply({\n ...wrapMessageForReplyOptions,\n message: lastMessage,\n highlightWord,\n withoutMediaType\n });\n } else if(draftMessage) {\n wrapResult = wrapMessageForReply({\n ...wrapMessageForReplyOptions,\n message: draftMessage\n });\n } else if(lastMessage) {\n wrapResult = wrapMessageForReply({\n ...wrapMessageForReplyOptions,\n message: lastMessage,\n withoutMediaType\n });\n } else { // rare case\n fragment = document.createDocumentFragment();\n }\n\n if(wrapResult) {\n fragment = await middleware(wrapResult);\n }\n\n if(willPrepend.length) {\n willPrepend = await middleware(Promise.all(willPrepend));\n // fragment.prepend(...(willPrepend as HTMLElement[]));\n }\n\n // const flex = !!mediaContainer && (willPrepend as HTMLElement[])[0] === mediaContainer;\n const flex = true;\n dom.lastMessageSpan.classList.toggle('dialog-subtitle-flex', flex);\n if(flex) {\n const parts = [...willPrepend, fragment].map((part, idx, arr) => {\n const span = document.createElement('span');\n span.classList.add('dialog-subtitle-span');\n // if(part !== mediaContainer) {\n span.classList.add('dialog-subtitle-span-overflow');\n // }\n if(idx === (arr.length - 1)) {\n span.classList.add('dialog-subtitle-span-last');\n span.dir = 'auto';\n }\n span.append(part as HTMLElement);\n // setInnerHTML(span, part as HTMLElement);\n return span;\n });\n dom.lastMessageSpan.replaceChildren(...parts);\n // dom.lastMessageSpan.replaceChildren(...[mediaContainer, span].filter(Boolean));\n } else {\n replaceContent(dom.lastMessageSpan, fragment);\n }\n }\n\n if(lastMessage || draftMessage/* && lastMessage._ !== 'draftMessage' */) {\n const date = draftMessage ? Math.max(draftMessage.date, lastMessage?.date || 0) : lastMessage.date;\n replaceContent(dom.lastTimeSpan, formatDateAccordingToTodayNew(new Date(date * 1000)));\n } else dom.lastTimeSpan.textContent = '';\n\n promise.resolve();\n }\n\n public setUnreadMessagesN(options: Parameters[0]) {\n return this.setUnreadMessages(options).catch(() => {});\n }\n\n private async setUnreadMessages({\n dialog,\n dialogElement,\n isBatch = false,\n setLastMessagePromise\n }: {\n dialog: AnyDialog,\n dialogElement: DialogElement,\n isBatch?: boolean,\n setLastMessagePromise?: Promise\n }) {\n const {dom} = dialogElement;\n if(!dom) {\n // this.log.error('setUnreadMessages no dom!', dialog);\n return;\n }\n\n const isTopic = isForumTopic(dialog);\n const isSaved = isSavedDialog(dialog);\n\n const {deferred, middleware} = setPromiseMiddleware(dom, 'setUnreadMessagePromise');\n\n const {peerId} = dialog;\n const promises = Promise.all([\n this.managers.appNotificationsManager.isPeerLocalMuted({peerId: peerId, respectType: true, threadId: isTopic ? dialog.id : undefined}),\n !isSaved ? this.getLastMessageForDialog(dialog) : undefined,\n isTopic || isSaved ? !!dialog.pFlags.pinned : this.managers.dialogsStorage.isDialogPinned(peerId, this.filterId),\n this.managers.appMessagesManager.isDialogUnread(dialog),\n peerId.isAnyChat() && !isTopic ? this.managers.acknowledged.dialogsStorage.getForumUnreadCount(peerId, true).then((result) => {\n if(result.cached) {\n return result.result;\n } else {\n result.result.then(() => {\n this.setUnreadMessagesN({dialog, dialogElement});\n });\n\n return {count: 0, hasUnmuted: false};\n }\n }).catch(() => undefined as {count: number, hasUnmuted: boolean}) : undefined\n ]);\n\n let [isMuted, m, isPinned, isDialogUnread, forumUnreadCount] = await middleware(promises);\n const wasMuted = dom.listEl.classList.contains('is-muted') && !dom.listEl.classList.contains('backwards');\n\n const {count: unreadTopicsCount, hasUnmuted: hasUnmutedTopic} = forumUnreadCount || {};\n\n const {draftMessage, lastMessage} = m || {};\n let setStatusMessage: MyMessage;\n if(!draftMessage && lastMessage && lastMessage.pFlags.out && lastMessage.peerId !== rootScope.myId) {\n setStatusMessage = lastMessage;\n }\n\n const unreadCount = unreadTopicsCount ?? (isSaved ? 0 : dialog.unread_count);\n if(unreadTopicsCount !== undefined) {\n isDialogUnread = !!unreadCount;\n }\n\n if(isTopic && !isDialogUnread) {\n isDialogUnread = !getServerMessageId(dialog.read_inbox_max_id);\n }\n\n // dom.messageEl.classList.toggle('has-badge', hasBadge);\n\n // * have to await all promises before modifying something\n\n if(setLastMessagePromise) {\n try {\n await middleware(setLastMessagePromise);\n } catch(err) {\n return;\n }\n }\n\n const transitionDuration = isBatch ? 0 : BADGE_TRANSITION_TIME;\n\n dom.listEl.classList.toggle('no-unmuted-topic', !isMuted && hasUnmutedTopic !== undefined && !hasUnmutedTopic);\n\n if(isMuted !== wasMuted) {\n if(isMuted && !dom.mutedIcon) {\n dom.mutedIcon = Icon('nosound', 'dialog-muted-icon');\n dom.titleSpanContainer.append(dom.mutedIcon);\n }\n\n SetTransition({\n element: dom.listEl,\n className: 'is-muted',\n forwards: isMuted,\n duration: transitionDuration,\n onTransitionEnd: !isMuted ? (() => {\n dom.mutedIcon.remove();\n delete dom.mutedIcon;\n }) : undefined\n });\n }\n\n setSendingStatus(dom.statusSpan, isTopic && dialog.pFlags.closed ? 'premium_lock' : setStatusMessage, true);\n\n // if(isTopic) {\n // dom.statusSpan.parentElement.classList.toggle('is-closed', !!dialog.pFlags.closed);\n // }\n\n const hasPinnedBadge = isPinned;\n const isPinnedBadgeMounted = !!dom.pinnedBadge;\n if(hasPinnedBadge) {\n dialogElement.createPinnedBadge();\n }\n\n const hasUnreadBadge = isDialogUnread;\n const isUnreadBadgeMounted = !!dom.unreadBadge;\n if(hasUnreadBadge) {\n dialogElement.createUnreadBadge();\n }\n\n const hasUnreadAvatarBadge = this.xd !== this.xds[FOLDER_ID_ARCHIVE] && !isTopic && !!this.forumTab && this.xd.getDialogElement(peerId) === dialogElement && isDialogUnread;\n const isUnreadAvatarBadgeMounted = !!dom.unreadAvatarBadge;\n if(hasUnreadAvatarBadge) {\n dialogElement.createUnreadAvatarBadge();\n }\n\n const hasMentionsBadge = isSaved ? false : (dialog.unread_mentions_count && (dialog.unread_mentions_count > 1 || dialog.unread_count > 1));\n const isMentionsBadgeMounted = !!dom.mentionsBadge;\n if(hasMentionsBadge) {\n dialogElement.createMentionsBadge();\n }\n\n const hasReactionsBadge = isSaved ? false : !!dialog.unread_reactions_count;\n const isReactionsBadgeMounted = !!dom.reactionsBadge;\n if(hasReactionsBadge) {\n dialogElement.createReactionsBadge();\n }\n\n const badgesLength = [hasPinnedBadge, hasUnreadBadge, hasMentionsBadge, hasReactionsBadge].filter(Boolean).length;\n SetTransition({\n element: dialogElement.subtitleRow,\n className: 'has-only-pinned-badge',\n forwards: hasPinnedBadge && badgesLength === 1,\n duration: isBatch ? 0 : BADGE_TRANSITION_TIME\n });\n\n const a: [Parameters[0], boolean, boolean][] = [\n ['pinnedBadge', hasPinnedBadge, isPinnedBadgeMounted],\n ['unreadBadge', hasUnreadBadge, isUnreadBadgeMounted],\n ['unreadAvatarBadge', hasUnreadAvatarBadge, isUnreadAvatarBadgeMounted],\n ['mentionsBadge', hasMentionsBadge, isMentionsBadgeMounted],\n ['reactionsBadge', hasReactionsBadge, isReactionsBadgeMounted]\n ];\n\n a.forEach(([key, hasBadge, isBadgeMounted]) => {\n const badge = dom[key];\n if(!badge) {\n return;\n }\n\n dialogElement.toggleBadgeByKey(key, hasBadge, isBadgeMounted, isBatch);\n });\n\n if(!hasUnreadBadge) {\n deferred.resolve();\n return;\n }\n\n let isUnread = true, isMention = false, unreadBadgeText: string;\n if(!isSaved && dialog.unread_mentions_count && unreadCount === 1) {\n unreadBadgeText = '@';\n isMention = true;\n } else if(isDialogUnread) {\n // dom.unreadMessagesSpan.innerText = '' + (unreadCount ? formatNumber(unreadCount, 1) : ' ');\n unreadBadgeText = '' + (unreadCount ? formatNumber(unreadCount, 1) : ' ');\n } else {\n unreadBadgeText = '';\n isUnread = false;\n }\n\n if(isTopic) {\n const notVisited = isDialogUnread && unreadBadgeText === ' ';\n dom.unreadBadge.classList.toggle('not-visited', notVisited);\n }\n\n const b: Array<[HTMLElement, string]> = [\n dom.unreadBadge && [dom.unreadBadge, unreadBadgeText],\n dom.unreadAvatarBadge && [dom.unreadAvatarBadge, unreadBadgeText || undefined]\n ];\n\n b.filter(Boolean).forEach(([badge, text]) => {\n if(text !== undefined) {\n badge.innerText = unreadBadgeText;\n }\n\n badge.classList.toggle('unread', isUnread);\n badge.classList.toggle('mention', isMention);\n });\n\n // if(isPinned && !isUnread && !isMention) {\n // dom.unreadBadge.classList.add('badge-icon', 'dialog-pinned-icon');\n // dom.unreadBadge.replaceChildren(Icon('chatspinned'));\n // } else if(dom.unreadBadge) {\n // dom.unreadBadge.classList.remove('badge-icon', 'dialog-pinned-icon');\n // if(!unreadBadgeText) {\n // dom.unreadBadge.replaceChildren();\n // }\n // }\n\n deferred.resolve();\n }\n\n private async getDialog(dialog: AnyDialog | PeerId, threadOrSavedId?: number) {\n if(typeof(dialog) !== 'object') {\n let originalDialog: AnyDialog;\n if(threadOrSavedId) {\n if(dialog === rootScope.myId) {\n originalDialog = await this.managers.dialogsStorage.getAnyDialog(dialog, threadOrSavedId);\n if(!originalDialog) {\n const peerId = dialog || NULL_PEER_ID;\n return {\n peerId,\n pFlags: {}\n } as any as SavedDialog;\n }\n } else {\n originalDialog = await this.managers.dialogsStorage.getForumTopic(dialog, threadOrSavedId);\n if(!originalDialog) {\n const peerId = dialog || NULL_PEER_ID;\n return {\n peerId,\n pFlags: {}\n } as any as ForumTopic;\n }\n }\n } else {\n originalDialog = await this.managers.appMessagesManager.getDialogOnly(dialog);\n if(!originalDialog) {\n const peerId = dialog || NULL_PEER_ID;\n return {\n peerId,\n peer: await this.managers.appPeersManager.getOutputPeer(peerId),\n pFlags: {}\n } as any as Dialog;\n }\n }\n\n return originalDialog;\n }\n\n return dialog as AnyDialog;\n }\n\n public addListDialog(options: Parameters[0] & {isBatch?: boolean}) {\n options.autonomous = false;\n options.withStories = true;\n\n const ret = this.addDialogNew(options);\n\n if(ret) {\n const {peerId} = options;\n const getDialogPromise = this.getDialog(peerId, options.threadId);\n const promise = getDialogPromise.then((dialog) => {\n const promises: (Promise | void)[] = [];\n const isUser = peerId.isUser();\n if(!isUser && isDialog(dialog)) {\n promises.push(this.xd.processDialogForCallStatus(peerId, ret.dom));\n }\n\n if(peerId !== rootScope.myId && isUser) {\n promises.push(this.managers.appUsersManager.getUserStatus(peerId.toUserId()).then((status) => {\n if(status?._ === 'userStatusOnline') {\n this.xd.setOnlineStatus(ret.dom.avatarEl.node, true);\n }\n }));\n }\n\n promises.push(this.setLastMessageN({\n dialog,\n dialogElement: ret,\n isBatch: options.isBatch,\n setUnread: true\n }));\n\n return Promise.all(promises);\n });\n\n options.loadPromises?.push(promise);\n }\n\n return ret;\n }\n\n /**\n * use for rendering search result\n */\n public addDialogAndSetLastMessage(options: Omit[0], 'dialog'> & {\n message: MyMessage,\n peerId: PeerId,\n query?: string\n }) {\n const {peerId, message, query} = options;\n const ret = this.addDialogNew({\n ...options,\n ...getMessageSenderPeerIdOrName(message),\n peerId\n });\n\n this.setLastMessageN({\n dialog: {_: 'dialog', peerId} as any,\n lastMessage: message,\n dialogElement: ret,\n highlightWord: query\n });\n\n if(message.peerId !== peerId) {\n ret.dom.listEl.dataset.peerId = '' + message.peerId;\n }\n\n return ret;\n }\n\n public addDialogNew(options: DialogElementOptions & {container?: HTMLElement | Scrollable | false, append?: boolean}) {\n const d = new DialogElement({\n autonomous: !!options.container,\n avatarSize: 'bigger',\n ...options\n // avatarSize: !options.avatarSize || options.avatarSize >= 54 ? 'bigger' : 'abitbigger',\n });\n (d.container as any).dialogElement = d;\n\n if(options.container) {\n const method = options.append === false ? 'prepend' : 'append';\n options.container[method](d.container);\n }\n\n return d;\n // return this.addDialog(options.peerId, options.container, options.rippleEnabled, options.onlyFirstName, options.meAsSaved, options.append, options.avatarSize, options.autonomous, options.lazyLoadQueue, options.loadPromises, options.fromName, options.noIcons);\n }\n}\n\nconst appDialogsManager = new AppDialogsManager();\nMOUNT_CLASS_TO.appDialogsManager = appDialogsManager;\nexport default appDialogsManager;\n"],"file":"appDialogsManager-C5QjjsuM.js"} \ No newline at end of file diff --git a/public/appDialogsManager-C5QjjsuM.js b/public/appDialogsManager-CU2tx6sj.js similarity index 63% rename from public/appDialogsManager-C5QjjsuM.js rename to public/appDialogsManager-CU2tx6sj.js index ca4e91675..bb0a5e0cb 100644 --- a/public/appDialogsManager-C5QjjsuM.js +++ b/public/appDialogsManager-CU2tx6sj.js @@ -1,10 +1,10 @@ const __vite__fileDeps=["./chart-BIax9IsQ.js","./chart-CQQX2xOH.css"],__vite__mapDeps=i=>i.map(i=>__vite__fileDeps[i]); -var U0=Object.defineProperty;var $0=(o,e,t)=>e in o?U0(o,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):o[e]=t;var sr=(o,e,t)=>($0(o,typeof e!="symbol"?e+"":e,t),t),Dy=(o,e,t)=>{if(!e.has(o))throw TypeError("Cannot "+t)};var Gt=(o,e,t)=>(Dy(o,e,"read from private field"),t?t.call(o):e.get(o)),ms=(o,e,t)=>{if(e.has(o))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(o):e.set(o,t)},$t=(o,e,t,s)=>(Dy(o,e,"write to private field"),s?s.call(o,t):e.set(o,t),t);import{i as A,t as re,s as yi,c as ye,b as wa,u as ft,d as Io,P as se,e as Mr,B as it,a as Xb,f as Vu,g as H0,h as In,r as zg,j as Uc,D as Gu,k as Pi,l as zi,m as xd,n as rn,o as Lo,p as V0,q as G0}from"./avatar-DBIqplSQ.js";import{a as O,i as fa,h as Wg,f as zs,C as Jo,s as Ad,b as qa,T as Qa,w as Oi,g as Ns,c as yl,d as Ss,F as Qh,e as Zb,j as zu,k as Fl,u as Wu,l as oo,m as Kg,n as z0}from"./page-BMz-rky6.js";import{I as Pe,s as Yh,r as Hi,B as ze,a as Po,g as Jb}from"./button-DNOYFSTy.js";import{S as Ci,a as _r}from"./scrollable-BxUBKXlA.js";import{a as I,b as be,f as xe,d as ls,m as $e,q as W0,t as vi,i as L,u as jg,v as qg,N as Ft,w as K0,T as uc,x as Qg,y as Pr,z as Ku,B as Cc,C as H,j as kt,F as It,G as Zn,H as Nt,J as me,K as Us,L as Rl,O as rt,P as te,Q as ew,R as Fd,U as Fm,V as At,W as Xh,X as Yg,Y as Xg,Z as fs,$ as Ya,a0 as Rd,a1 as _t,a2 as Zg,a3 as hs,a4 as An,a5 as tw,k as st,e as oe,n as _s,a6 as Jg,a7 as Ms,a8 as j0,a9 as q0,aa as es,ab as V,ac as Te,ad as z,ae as cn,af as xi,ag as $c,ah as wr,ai as ks,aj as ci,E as Mi,I as Xe,ak as Sa,al as yt,am as Ti,an as Vi,ao as lo,ap as sw,aq as bs,ar as ia,as as Ht,g as Rm,D as Wi,at as gr,au as pi,A as pc,av as iw,aw as Zh,ax as Mo,ay as Dd,p as qs,az as ji,aA as Jh,aB as nw,aC as nt,s as co,r as Bd,aD as Gi,aE as Ui,aF as ra,M as ei,aG as Si,aH as Dm,aI as Q0,aJ as aw,aK as Y0,aL as rw,aM as vl,aN as Nd,aO as Oa,aP as os,aQ as ef,aR as fi,aS as X0,aT as Ca,aU as Z0,aV as ow,aW as Ws,aX as el,h as $n,aY as J0,aZ as zp,a_ as Ma,a$ as Bm,b0 as Ua,b1 as wn,b2 as eL,b3 as lw,b4 as Hc,b5 as Xr,_ as tL,b6 as mc,b7 as ho,b8 as fr,b9 as Vc,ba as sL,bb as tf,bc as ju,bd as Gc,o as Nm,be as Ga,bf as iL,bg as cw,bh as dw,bi as eu,bj as nL,bk as aL,bl as hw,bm as Om,bn as Ei,bo as zc,bp as tu,bq as Um,br as hr,bs as rL,bt as By,bu as oL,bv as su,bw as Fh,bx as lL,by as uw,bz as cL,bA as dL,bB as hL,bC as $m,bD as hh,bE as uL,bF as pL,bG as Ny,bH as pw,bI as qu,bJ as Wc,bK as Qu,bL as Qs,bM as mL,bN as gi,bO as Zi,bP as gL,bQ as Hm,bR as jo,bS as fL,bT as yL,bU as vL,S as Zr,bV as bL,bW as mw,bX as ma,bY as Ki,bZ as wL,b_ as Oy,b$ as SL,c0 as Vm,c1 as CL,c2 as IL,c3 as fn,c4 as gw,c5 as LL,c6 as PL,c7 as ML,c8 as _L,c9 as EL,ca as Uy,cb as kL,cc as TL,c as uh,cd as xL,ce as AL,cf as FL,cg as RL,ch as DL,ci as fw,cj as BL,ck as NL}from"./index-e-jlGVAF.js";import{w as _e,a as $s,e as OL,b as UL,c as as,d as tl,m as no,g as Rt,s as $y,r as ht,l as xs,f as qi,h as Gm,i as yw,j as Ln,k as bl,n as ps,o as vw,q as $L,u as Jn,t as qt,L as Bt,v as Ii,I as xt,x as vn,p as oi,y as Rh,z as Ia,A as $i,B as _o,C as wi,D as gt,E as ea,F as Li,G as HL,H as bw,J as sf,K as Eo,R as Dh,M as nf,S as ww,N as er,O as Sw,V as Yu,P as af,Q as rf,T as Hy,U as Cw,W as of,X as VL,Y as Iw,Z as Kc,_ as GL,$ as Lw,a0 as zm,a1 as zL,a2 as Pw,a3 as iu,a4 as WL,a5 as KL,a6 as bn,a7 as Xu,a8 as jL,a9 as Wm,aa as qL,ab as QL,ac as YL,ad as XL,ae as ZL,af as Mw,ag as JL,ah as Wp}from"./wrapEmojiText-DsWC8Ajl.js";import{s as lf,p as dn}from"./putPreloader-CByTF1BW.js";import{h as cf,b as eP,P as df,a as tP}from"./htmlToSpan-bTFVYoGn.js";import{a as lt,g as sP,C as iP,f as Dl,T as _w,b as nP}from"./countryInputField-BcftBLc-.js";import{t as aP,b as rP}from"./textToSvgURL-Cnw_Q8Rw.js";import oP from"./fastBlur-Co-79rP4.js";import{C as lP,T as cP}from"./codeInputField-DxzYbP49.js";function za(o,e,t=e+10){return o=o.trim(),o.length>t&&(o=o.slice(0,e)+"..."),o}function li(o){if(!o)return[];const e=o.usernames;return e?e.filter(t=>t.pFlags.active).map(t=>t.username):o.username?[o.username]:[]}async function $a(o){const{peerId:e=I.myId,plainText:t,onlyFirstName:s,limitSymbols:i,managers:n=I.managers,threadId:a}=o;let r="";if(e.isUser()){const l=be.getUser(e.toUserId());l&&(l.first_name&&(r+=l.first_name),l.last_name&&(!s||!r)&&(r+=" "+l.last_name)),r?r=r.trim():r=!l||l.pFlags.deleted?xe.format(s?"Deleted":"HiddenName",!0):li(l)[0]||""}else a&&(r=(await n.dialogsStorage.getForumTopic(e,a))?.title||""),r||(r=be.getChat(e.toChatId())?.title||""),s&&(r=r.split(" ")[0]);return i!==void 0&&(r=za(r,i,i)),t?r:_e(r)}function Ew(o){const e=document.createElement("span");return e.classList.add("badge-fake"),ls(e,o?"ScamMessage":"FakeMessage"),e}function dP(){return Pe("star","premium-icon")}function hP(){const o=document.createElement("span");o.classList.add("verified-icon");const e=26,t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttributeNS(null,"viewBox",`0 0 ${e} ${e}`),t.setAttributeNS(null,"width",`${e}`),t.setAttributeNS(null,"height",`${e}`),t.classList.add("verified-icon-svg");const s=document.createElementNS("http://www.w3.org/2000/svg","use");s.setAttributeNS(null,"href","#verified-icon-background"),s.classList.add("verified-icon-background");const i=document.createElementNS("http://www.w3.org/2000/svg","use");return i.setAttributeNS(null,"href","#verified-icon-check"),i.classList.add("verified-icon-check"),t.append(i,s),o.append(t),o}async function kw({wrapOptions:o,emojiStatus:e,size:t=$e.active.emojiStatus}){const{middleware:s,animationGroup:i,textColor:n}=o,a=document.createElement("span");a.classList.add("emoji-status");const r=await I.managers.acknowledged.appEmojiManager.getCustomEmojiDocument(e.document_id),l=async d=>{if(!s())return;const h=[],u=d.attributes.find(p=>p._==="documentAttributeCustomEmoji");u&&u.pFlags.text_color&&a.classList.add("emoji-status-text-color"),await $s({doc:d,div:a,width:t.width,height:t.height,loop:2,play:!0,group:i||"EMOJI-STATUS",loadPromises:h,middleware:s,static:d.mime_type==="video/webm"&&!W0,textColor:n||"primary-color"}),s()&&await Promise.all(h)};if(!s())return a;const c=r.result.then(l);return r.cached&&await c,a}async function Km({peerId:o,noVerifiedIcon:e,noFakeIcon:t,noPremiumIcon:s,peer:i,wrapOptions:n}){i??(i=be.getPeer(o));const a=[];if(!i)return a;if((i.pFlags.fake||i.pFlags.scam)&&!t&&a.push(Ew(i.pFlags.scam)),!s&&n?.middleware){const r=i.emoji_status,l=await be.isPremiumFeaturesHidden();if(r&&r._!=="emojiStatusEmpty"&&!l){const{middleware:c}=n,d=await kw({emojiStatus:r,wrapOptions:n});if(!c())return a;a.push(d)}else i.pFlags.premium&&!l&&a.push(dP())}return i.pFlags.verified&&!e&&a.push(hP()),a}var en=(o=>(o[o.Seconds=0]="Seconds",o[o.Minutes=1]="Minutes",o[o.Hours=2]="Hours",o[o.Days=3]="Days",o[o.Weeks=4]="Weeks",o[o.Months=5]="Months",o[o.Years=6]="Years",o))(en||{});function ko(o,e=2){o||(o=1);const t=[],s=[{m:1,t:0},{m:60,t:1},{m:60,t:2},{m:24,t:3},{m:7,t:4}];let n=1;s.forEach((r,l)=>{if(n=Math.round(n*r.m),o=0;--r)a[r].duration===0&&a.splice(r,1);return a}function Ni(o,e=!1){const t=parseInt(o+"",10);let s=Math.floor(t/3600),i=Math.floor((t-s*3600)/60),n=t-s*3600-i*60;return s&&s<10&&e&&(s="0"+s),i<10&&(s||e)&&(i="0"+i),n<10&&(n="0"+n),(s?s+":":"")+i+":"+n}const Vy={[en.Seconds]:"Seconds",[en.Minutes]:"Minutes",[en.Hours]:"Hours",[en.Days]:"Days",[en.Weeks]:"Weeks",[en.Months]:"Months",[en.Years]:"Years"};function Bl(o,e){if(e){const i=o.map(n=>xe.format(Vy[n.type],!0,[n.duration]));return vi(i,!1,e)}const t=o.map(i=>L(Vy[i.type],[i.duration])),s=document.createElement("span");return s.append(...vi(t,!1)),s}function Bh(o,e){return Bl(ko(o,2),e)}function Tw(o){const e=ko(o,3);return e[0].type<=en.Hours?Ni(o,!0):(e.splice(1,1/0),Bl(e))}function xw(o){const e=ko(o,3);return e[0].type===en.Seconds?Bl(e):Ni(o,!0)}const Aw={AED:{code:"AED",title:"United Arab Emirates Dirham",symbol:"AED",native:"د.إ.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"367",max_amount:"3673020"},AFN:{code:"AFN",title:"Afghan Afghani",symbol:"AFN",native:"؋",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"7092",max_amount:"70919694"},ALL:{code:"ALL",title:"Albanian Lek",symbol:"ALL",native:"Lek",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!1,drop_zeros:!1,exp:2,min_amount:"9249",max_amount:"92485282"},AMD:{code:"AMD",title:"Armenian Dram",symbol:"AMD",native:"դր.",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"38785",max_amount:"387850064"},ARS:{code:"ARS",title:"Argentine Peso",symbol:"ARS",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"93178",max_amount:"931784401"},AUD:{code:"AUD",title:"Australian Dollar",symbol:"AU$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"153",max_amount:"1534530"},AZN:{code:"AZN",title:"Azerbaijani Manat",symbol:"AZN",native:"ман.",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"170",max_amount:"1700517"},BAM:{code:"BAM",title:"Bosnia & Herzegovina Convertible Mark",symbol:"BAM",native:"KM",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"181",max_amount:"1806101"},BDT:{code:"BDT",title:"Bangladeshi Taka",symbol:"BDT",native:"৳",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"11744",max_amount:"117439546"},BGN:{code:"BGN",title:"Bulgarian Lev",symbol:"BGN",native:"лв.",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"181",max_amount:"1808709"},BND:{code:"BND",title:"Brunei Dollar",symbol:"BND",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"133",max_amount:"1330735"},BOB:{code:"BOB",title:"Bolivian Boliviano",symbol:"BOB",native:"Bs",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"691",max_amount:"6906359"},BRL:{code:"BRL",title:"Brazilian Real",symbol:"R$",native:"R$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"577",max_amount:"5769050"},BYN:{code:"BYN",title:"Belarusian ruble",symbol:"BYN",native:"BYN",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"327",max_amount:"3270247"},CAD:{code:"CAD",title:"Canadian Dollar",symbol:"CA$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"139",max_amount:"1387645"},CHF:{code:"CHF",title:"Swiss Franc",symbol:"CHF",native:"CHF",thousands_sep:"'",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"87",max_amount:"870429"},CLP:{code:"CLP",title:"Chilean Peso",symbol:"CLP",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:0,min_amount:"949",max_amount:"9486298"},CNY:{code:"CNY",title:"Chinese Renminbi Yuan",symbol:"CN¥",native:"CN¥",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"721",max_amount:"7207705"},COP:{code:"COP",title:"Colombian Peso",symbol:"COP",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"408665",max_amount:"4086650000"},CRC:{code:"CRC",title:"Costa Rican Colón",symbol:"CRC",native:"₡",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"52313",max_amount:"523125084"},CZK:{code:"CZK",title:"Czech Koruna",symbol:"CZK",native:"Kč",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"2332",max_amount:"23323050"},DKK:{code:"DKK",title:"Danish Krone",symbol:"DKK",native:"kr",thousands_sep:"",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"689",max_amount:"6887630"},DOP:{code:"DOP",title:"Dominican Peso",symbol:"DOP",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"5945",max_amount:"59453394"},DZD:{code:"DZD",title:"Algerian Dinar",symbol:"DZD",native:"د.ج.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"13449",max_amount:"134492834"},EGP:{code:"EGP",title:"Egyptian Pound",symbol:"EGP",native:"ج.م.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"4869",max_amount:"48686201"},ETB:{code:"ETB",title:"Ethiopian Birr",symbol:"ETB",native:"ብር",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"8093",max_amount:"80931744"},EUR:{code:"EUR",title:"Euro",symbol:"€",native:"€",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"92",max_amount:"923025"},GBP:{code:"GBP",title:"British Pound",symbol:"£",native:"£",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"78",max_amount:"784671"},GEL:{code:"GEL",title:"Georgian Lari",symbol:"GEL",native:"GEL",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"271",max_amount:"2709634"},GTQ:{code:"GTQ",title:"Guatemalan Quetzal",symbol:"GTQ",native:"Q",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"775",max_amount:"7745760"},HKD:{code:"HKD",title:"Hong Kong Dollar",symbol:"HK$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"781",max_amount:"7810275"},HNL:{code:"HNL",title:"Honduran Lempira",symbol:"HNL",native:"L",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"2474",max_amount:"24741783"},HRK:{code:"HRK",title:"Croatian Kuna",symbol:"HRK",native:"kn",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"691",max_amount:"6907950"},HUF:{code:"HUF",title:"Hungarian Forint",symbol:"HUF",native:"Ft",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"36623",max_amount:"366225500"},IDR:{code:"IDR",title:"Indonesian Rupiah",symbol:"IDR",native:"Rp",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"1620255",max_amount:"16202550000"},ILS:{code:"ILS",title:"Israeli New Sheqel",symbol:"₪",native:"₪",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"380",max_amount:"3801205"},INR:{code:"INR",title:"Indian Rupee",symbol:"₹",native:"₹",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"8374",max_amount:"83744750"},ISK:{code:"ISK",title:"Icelandic Króna",symbol:"ISK",native:"kr",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:0,min_amount:"139",max_amount:"1389014"},JMD:{code:"JMD",title:"Jamaican Dollar",symbol:"JMD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"15637",max_amount:"156368606"},JPY:{code:"JPY",title:"Japanese Yen",symbol:"¥",native:"¥",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"149",max_amount:"1490865"},KES:{code:"KES",title:"Kenyan Shilling",symbol:"KES",native:"Ksh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"12996",max_amount:"129960065"},KGS:{code:"KGS",title:"Kyrgyzstani Som",symbol:"KGS",native:"KGS",thousands_sep:" ",decimal_sep:"-",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8403",max_amount:"84030175"},KRW:{code:"KRW",title:"South Korean Won",symbol:"₩",native:"₩",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"1367",max_amount:"13667698"},KZT:{code:"KZT",title:"Kazakhstani Tenge",symbol:"KZT",native:"₸",thousands_sep:" ",decimal_sep:"-",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"47435",max_amount:"474353706"},LBP:{code:"LBP",title:"Lebanese Pound",symbol:"LBP",native:"ل.ل.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8950019",max_amount:"89500191612"},LKR:{code:"LKR",title:"Sri Lankan Rupee",symbol:"LKR",native:"රු.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"30176",max_amount:"301757853"},MAD:{code:"MAD",title:"Moroccan Dirham",symbol:"MAD",native:"د.م.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"987",max_amount:"9874277"},MDL:{code:"MDL",title:"Moldovan Leu",symbol:"MDL",native:"MDL",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1777",max_amount:"17770719"},MMK:{code:"MMK",title:"Myanmar kyat",symbol:"MMK",native:"MMK",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"324796",max_amount:"3247960992"},MNT:{code:"MNT",title:"Mongolian Tögrög",symbol:"MNT",native:"MNT",thousands_sep:" ",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"345000",max_amount:"3450000346"},MOP:{code:"MOP",title:"Macanese pataca",symbol:"MOP",native:"MOP",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"804",max_amount:"8040613"},MUR:{code:"MUR",title:"Mauritian Rupee",symbol:"MUR",native:"MUR",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"4675",max_amount:"46749662"},MVR:{code:"MVR",title:"Maldivian Rufiyaa",symbol:"MVR",native:"MVR",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1535",max_amount:"15350296"},MXN:{code:"MXN",title:"Mexican Peso",symbol:"MX$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"1898",max_amount:"18980550"},MYR:{code:"MYR",title:"Malaysian Ringgit",symbol:"MYR",native:"RM",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"450",max_amount:"4497502"},MZN:{code:"MZN",title:"Mozambican Metical",symbol:"MZN",native:"MTn",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"6390",max_amount:"63899991"},NGN:{code:"NGN",title:"Nigerian Naira",symbol:"NGN",native:"₦",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"163953",max_amount:"1639530235"},NIO:{code:"NIO",title:"Nicaraguan Córdoba",symbol:"NIO",native:"C$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"3679",max_amount:"36791630"},NOK:{code:"NOK",title:"Norwegian Krone",symbol:"NOK",native:"kr",thousands_sep:" ",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1100",max_amount:"10996470"},NPR:{code:"NPR",title:"Nepalese Rupee",symbol:"NPR",native:"नेरू",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"13390",max_amount:"133897859"},NZD:{code:"NZD",title:"New Zealand Dollar",symbol:"NZ$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"168",max_amount:"1679219"},PAB:{code:"PAB",title:"Panamanian Balboa",symbol:"PAB",native:"B/.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"100",max_amount:"999469"},PEN:{code:"PEN",title:"Peruvian Nuevo Sol",symbol:"PEN",native:"S/.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"374",max_amount:"3740759"},PHP:{code:"PHP",title:"Philippine Peso",symbol:"PHP",native:"₱",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"5806",max_amount:"58056502"},PKR:{code:"PKR",title:"Pakistani Rupee",symbol:"PKR",native:"₨",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"27836",max_amount:"278360445"},PLN:{code:"PLN",title:"Polish Złoty",symbol:"PLN",native:"zł",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"396",max_amount:"3957640"},PYG:{code:"PYG",title:"Paraguayan Guaraní",symbol:"PYG",native:"₲",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:0,min_amount:"7569",max_amount:"75694544"},QAR:{code:"QAR",title:"Qatari Riyal",symbol:"QAR",native:"ر.ق.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"364",max_amount:"3644355"},RON:{code:"RON",title:"Romanian Leu",symbol:"RON",native:"RON",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"459",max_amount:"4592300"},RSD:{code:"RSD",title:"Serbian Dinar",symbol:"RSD",native:"дин.",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"10802",max_amount:"108020115"},RUB:{code:"RUB",title:"Russian Ruble",symbol:"RUB",native:"₽",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8990",max_amount:"89898410"},SAR:{code:"SAR",title:"Saudi Riyal",symbol:"SAR",native:"ر.س.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"375",max_amount:"3754022"},SEK:{code:"SEK",title:"Swedish Krona",symbol:"SEK",native:"kr",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1069",max_amount:"10689290"},SGD:{code:"SGD",title:"Singapore Dollar",symbol:"SGD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"133",max_amount:"1331235"},THB:{code:"THB",title:"Thai Baht",symbol:"฿",native:"฿",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"3535",max_amount:"35351502"},TJS:{code:"TJS",title:"Tajikistani Somoni",symbol:"TJS",native:"TJS",thousands_sep:" ",decimal_sep:";",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1057",max_amount:"10569158"},TRY:{code:"TRY",title:"Turkish Lira",symbol:"TRY",native:"TL",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"3317",max_amount:"33166840"},TTD:{code:"TTD",title:"Trinidad and Tobago Dollar",symbol:"TTD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"677",max_amount:"6768188"},TWD:{code:"TWD",title:"New Taiwan Dollar",symbol:"NT$",native:"NT$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"3281",max_amount:"32805499"},TZS:{code:"TZS",title:"Tanzanian Shilling",symbol:"TZS",native:"TSh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"270000",max_amount:"2700000297"},UAH:{code:"UAH",title:"Ukrainian Hryvnia",symbol:"UAH",native:"₴",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!1,drop_zeros:!1,exp:2,min_amount:"4124",max_amount:"41236639"},UGX:{code:"UGX",title:"Ugandan Shilling",symbol:"UGX",native:"USh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"3723",max_amount:"37234902"},USD:{code:"USD",title:"United States Dollar",symbol:"$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"100",max_amount:1e6},UYU:{code:"UYU",title:"Uruguayan Peso",symbol:"UYU",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"4027",max_amount:"40269076"},UZS:{code:"UZS",title:"Uzbekistani Som",symbol:"UZS",native:"UZS",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1256851",max_amount:"12568510387"},VND:{code:"VND",title:"Vietnamese Đồng",symbol:"₫",native:"₫",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:0,min_amount:"25218",max_amount:"252175000"},YER:{code:"YER",title:"Yemeni Rial",symbol:"YER",native:"ر.ي.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"25035",max_amount:"250350255"},ZAR:{code:"ZAR",title:"South African Rand",symbol:"ZAR",native:"R",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1819",max_amount:"18193780"}};function uP(o,e,t,s){o=(o+"").replace(/[^0-9+\-Ee.]/g,"");var i=isFinite(+o)?+o:0,n=isFinite(+e)?Math.abs(e):0,a=typeof s>"u"?",":s,r=typeof t>"u"?".":t,l="",c=function(d,h){var u=Math.pow(10,h);return""+Math.round(d*u)/u};return l=(n?c(i,n):""+Math.round(i)).split("."),l[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,a)),(l[1]||"").length{t._==="messageEntitySpoiler"&&(o=OL(o,t).text)}),o}function nu(o){return{_:"messageEntityEmoji",offset:0,length:o.length,unicode:UL(o).join("-").replace(/-?fe0f/g,"")}}const Gy=new RegExp(`(^${K0})`);function hf(o,e=!1){const t=(o||"").trim().split(" ");if(!t[0])return{text:"",entities:[]};const s=[],i=t[0].match(Gy),n=i?.[0]||t[0][0];i&&s.push(nu(n));const a=t.length;if(e||a===1)return{text:n,entities:s};const r=t[a-1].match(Gy),l=r?.[0]||t[a-1][0];return r&&s.push({...nu(l),offset:n.length}),{text:n+l,entities:s}}function Zu(o,e){const{text:t,entities:s}=hf(o,e);return _e(t,void 0,s)}let ir,ph,zy;const Wy=new Map;function pP(o,e){if(!ir){zy=document.getElementById("svg-defs");const a="http://www.w3.org/2000/svg";ir=document.createElementNS(a,"svg"),ir.setAttributeNS(null,"width","26"),ir.setAttributeNS(null,"height","26"),ir.setAttributeNS(null,"viewBox","0 0 26 26"),ir.classList.add("topic-icon-svg");const r=document.createElementNS(a,"use");r.setAttributeNS(null,"href","#topic-icon"),ir.append(r),ph=document.createElement("span"),ph.classList.add("topic-icon","avatar-like");const l=document.createElement("span");l.classList.add("topic-icon-content"),ph.append(ir,l)}o||(console.error("NO TOPIC ICON COLOR!"),o=uc[0]),e||(console.error("NO TOPIC NAME!"),e="");const t=o.toString(16),s=`topic-icon-gradient-${o}`;let i=Wy.get(o);if(!i){const{h:a,s:r,l,a:c}=Qg("#"+t);zy.insertAdjacentHTML("beforeend",` +var U0=Object.defineProperty;var $0=(r,e,t)=>e in r?U0(r,e,{enumerable:!0,configurable:!0,writable:!0,value:t}):r[e]=t;var sr=(r,e,t)=>($0(r,typeof e!="symbol"?e+"":e,t),t),Dy=(r,e,t)=>{if(!e.has(r))throw TypeError("Cannot "+t)};var Gt=(r,e,t)=>(Dy(r,e,"read from private field"),t?t.call(r):e.get(r)),gs=(r,e,t)=>{if(e.has(r))throw TypeError("Cannot add the same private member more than once");e instanceof WeakSet?e.add(r):e.set(r,t)},$t=(r,e,t,s)=>(Dy(r,e,"write to private field"),s?s.call(r,t):e.set(r,t),t);import{i as F,t as re,s as yi,c as ye,b as wa,u as ft,d as Io,P as se,e as Mr,B as it,a as Xb,f as Vu,g as H0,h as In,r as zg,j as Uc,D as Gu,k as Pi,l as zi,m as xd,n as rn,o as Lo,p as V0,q as G0}from"./avatar-CgCgq19o.js";import{a as O,i as fa,h as Wg,f as zs,C as Jo,s as Ad,b as qa,T as Qa,w as Oi,g as Os,c as yl,d as Cs,F as Qh,e as Zb,j as zu,k as Fl,u as Wu,l as oo,m as Kg,n as z0}from"./page-uJBByU88.js";import{I as Pe,s as Yh,r as Hi,B as ze,a as Po,g as Jb}from"./button-3f1j2I1C.js";import{S as Ci,a as _r}from"./scrollable-aRSV2NLC.js";import{a as I,b as be,f as xe,d as ls,m as $e,q as W0,t as vi,i as L,u as jg,v as qg,N as Ft,w as K0,T as uc,x as Qg,y as Pr,z as Ku,B as Cc,C as $,j as kt,F as It,G as Zn,H as Nt,J as me,K as $s,L as Rl,O as rt,P as te,Q as ew,R as Fd,U as Fm,V as At,W as Xh,X as Yg,Y as Xg,Z as ms,$ as Ya,a0 as Rd,a1 as _t,a2 as Zg,a3 as hs,a4 as An,a5 as tw,k as st,e as oe,n as _s,a6 as Jg,a7 as Ms,a8 as j0,a9 as q0,aa as es,ab as H,ac as Te,ad as z,ae as cn,af as xi,ag as $c,ah as wr,ai as ks,aj as ci,E as Mi,I as Xe,ak as Sa,al as yt,am as Ti,an as Vi,ao as lo,ap as sw,aq as bs,ar as ia,as as Ht,g as Rm,D as Wi,at as gr,au as pi,A as pc,av as iw,aw as Zh,ax as Mo,ay as Dd,p as qs,az as ji,aA as Jh,aB as nw,aC as nt,s as co,r as Bd,aD as Gi,aE as Ui,aF as ra,M as ei,aG as Si,aH as Dm,aI as Q0,aJ as aw,aK as Y0,aL as rw,aM as vl,aN as Nd,aO as Oa,aP as os,aQ as ef,aR as fi,aS as X0,aT as Ca,aU as Z0,aV as ow,aW as Ws,aX as el,h as $n,aY as J0,aZ as zp,a_ as Ma,a$ as Bm,b0 as Ua,b1 as wn,b2 as eL,b3 as lw,b4 as Hc,b5 as Xr,_ as tL,b6 as mc,b7 as ho,b8 as fr,b9 as Vc,ba as sL,bb as tf,bc as ju,bd as Gc,o as Nm,be as Ga,bf as iL,bg as cw,bh as dw,bi as eu,bj as nL,bk as aL,bl as hw,bm as Om,bn as Ei,bo as zc,bp as tu,bq as Um,br as hr,bs as rL,bt as By,bu as oL,bv as su,bw as Fh,bx as lL,by as uw,bz as cL,bA as dL,bB as hL,bC as $m,bD as hh,bE as uL,bF as pL,bG as Ny,bH as pw,bI as qu,bJ as Wc,bK as Qu,bL as Qs,bM as mL,bN as gi,bO as Zi,bP as gL,bQ as Hm,bR as jo,bS as fL,bT as yL,bU as vL,S as Zr,bV as bL,bW as mw,bX as ma,bY as Ki,bZ as wL,b_ as Oy,b$ as SL,c0 as Vm,c1 as CL,c2 as IL,c3 as fn,c4 as gw,c5 as LL,c6 as PL,c7 as ML,c8 as _L,c9 as EL,ca as Uy,cb as kL,cc as TL,c as uh,cd as xL,ce as AL,cf as FL,cg as RL,ch as DL,ci as fw,cj as BL,ck as NL}from"./index-BWSv4yyN.js";import{w as _e,a as Hs,e as OL,b as UL,c as as,d as tl,m as no,g as Rt,s as $y,r as ht,l as xs,f as qi,h as Gm,i as yw,j as Ln,k as bl,n as ps,o as vw,q as $L,u as Jn,t as qt,L as Bt,v as Ii,I as xt,x as vn,p as oi,y as Rh,z as Ia,A as $i,B as _o,C as wi,D as gt,E as ea,F as Li,G as HL,H as bw,J as sf,K as Eo,R as Dh,M as nf,S as ww,N as er,O as Sw,V as Yu,P as af,Q as rf,T as Hy,U as Cw,W as of,X as VL,Y as Iw,Z as Kc,_ as GL,$ as Lw,a0 as zm,a1 as zL,a2 as Pw,a3 as iu,a4 as WL,a5 as KL,a6 as bn,a7 as Xu,a8 as jL,a9 as Wm,aa as qL,ab as QL,ac as YL,ad as XL,ae as ZL,af as Mw,ag as JL,ah as Wp}from"./wrapEmojiText-C-QYHn8O.js";import{s as lf,p as dn}from"./putPreloader-D4mKDX79.js";import{h as cf,b as eP,P as df,a as tP}from"./htmlToSpan-CebCyFv7.js";import{a as lt,g as sP,C as iP,f as Dl,T as _w,b as nP}from"./countryInputField-CRALI02l.js";import{t as aP,b as rP}from"./textToSvgURL-Cnw_Q8Rw.js";import oP from"./fastBlur-Co-79rP4.js";import{C as lP,T as cP}from"./codeInputField-CNuG4jhl.js";function za(r,e,t=e+10){return r=r.trim(),r.length>t&&(r=r.slice(0,e)+"..."),r}function li(r){if(!r)return[];const e=r.usernames;return e?e.filter(t=>t.pFlags.active).map(t=>t.username):r.username?[r.username]:[]}async function $a(r){const{peerId:e=I.myId,plainText:t,onlyFirstName:s,limitSymbols:i,managers:n=I.managers,threadId:a}=r;let o="";if(e.isUser()){const l=be.getUser(e.toUserId());l&&(l.first_name&&(o+=l.first_name),l.last_name&&(!s||!o)&&(o+=" "+l.last_name)),o?o=o.trim():o=!l||l.pFlags.deleted?xe.format(s?"Deleted":"HiddenName",!0):li(l)[0]||""}else a&&(o=(await n.dialogsStorage.getForumTopic(e,a))?.title||""),o||(o=be.getChat(e.toChatId())?.title||""),s&&(o=o.split(" ")[0]);return i!==void 0&&(o=za(o,i,i)),t?o:_e(o)}function Ew(r){const e=document.createElement("span");return e.classList.add("badge-fake"),ls(e,r?"ScamMessage":"FakeMessage"),e}function dP(){return Pe("star","premium-icon")}function hP(){const r=document.createElement("span");r.classList.add("verified-icon");const e=26,t=document.createElementNS("http://www.w3.org/2000/svg","svg");t.setAttributeNS(null,"viewBox",`0 0 ${e} ${e}`),t.setAttributeNS(null,"width",`${e}`),t.setAttributeNS(null,"height",`${e}`),t.classList.add("verified-icon-svg");const s=document.createElementNS("http://www.w3.org/2000/svg","use");s.setAttributeNS(null,"href","#verified-icon-background"),s.classList.add("verified-icon-background");const i=document.createElementNS("http://www.w3.org/2000/svg","use");return i.setAttributeNS(null,"href","#verified-icon-check"),i.classList.add("verified-icon-check"),t.append(i,s),r.append(t),r}async function kw({wrapOptions:r,emojiStatus:e,size:t=$e.active.emojiStatus}){const{middleware:s,animationGroup:i,textColor:n}=r,a=document.createElement("span");a.classList.add("emoji-status");const o=await I.managers.acknowledged.appEmojiManager.getCustomEmojiDocument(e.document_id),l=async d=>{if(!s())return;const h=[],u=d.attributes.find(p=>p._==="documentAttributeCustomEmoji");u&&u.pFlags.text_color&&a.classList.add("emoji-status-text-color"),await Hs({doc:d,div:a,width:t.width,height:t.height,loop:2,play:!0,group:i||"EMOJI-STATUS",loadPromises:h,middleware:s,static:d.mime_type==="video/webm"&&!W0,textColor:n||"primary-color"}),s()&&await Promise.all(h)};if(!s())return a;const c=o.result.then(l);return o.cached&&await c,a}async function Km({peerId:r,noVerifiedIcon:e,noFakeIcon:t,noPremiumIcon:s,peer:i,wrapOptions:n}){i??(i=be.getPeer(r));const a=[];if(!i)return a;if((i.pFlags.fake||i.pFlags.scam)&&!t&&a.push(Ew(i.pFlags.scam)),!s&&n?.middleware){const o=i.emoji_status,l=await be.isPremiumFeaturesHidden();if(o&&o._!=="emojiStatusEmpty"&&!l){const{middleware:c}=n,d=await kw({emojiStatus:o,wrapOptions:n});if(!c())return a;a.push(d)}else i.pFlags.premium&&!l&&a.push(dP())}return i.pFlags.verified&&!e&&a.push(hP()),a}var en=(r=>(r[r.Seconds=0]="Seconds",r[r.Minutes=1]="Minutes",r[r.Hours=2]="Hours",r[r.Days=3]="Days",r[r.Weeks=4]="Weeks",r[r.Months=5]="Months",r[r.Years=6]="Years",r))(en||{});function ko(r,e=2){r||(r=1);const t=[],s=[{m:1,t:0},{m:60,t:1},{m:60,t:2},{m:24,t:3},{m:7,t:4}];let n=1;s.forEach((o,l)=>{if(n=Math.round(n*o.m),r=0;--o)a[o].duration===0&&a.splice(o,1);return a}function Ni(r,e=!1){const t=parseInt(r+"",10);let s=Math.floor(t/3600),i=Math.floor((t-s*3600)/60),n=t-s*3600-i*60;return s&&s<10&&e&&(s="0"+s),i<10&&(s||e)&&(i="0"+i),n<10&&(n="0"+n),(s?s+":":"")+i+":"+n}const Vy={[en.Seconds]:"Seconds",[en.Minutes]:"Minutes",[en.Hours]:"Hours",[en.Days]:"Days",[en.Weeks]:"Weeks",[en.Months]:"Months",[en.Years]:"Years"};function Bl(r,e){if(e){const i=r.map(n=>xe.format(Vy[n.type],!0,[n.duration]));return vi(i,!1,e)}const t=r.map(i=>L(Vy[i.type],[i.duration])),s=document.createElement("span");return s.append(...vi(t,!1)),s}function Bh(r,e){return Bl(ko(r,2),e)}function Tw(r){const e=ko(r,3);return e[0].type<=en.Hours?Ni(r,!0):(e.splice(1,1/0),Bl(e))}function xw(r){const e=ko(r,3);return e[0].type===en.Seconds?Bl(e):Ni(r,!0)}const Aw={AED:{code:"AED",title:"United Arab Emirates Dirham",symbol:"AED",native:"د.إ.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"367",max_amount:"3673020"},AFN:{code:"AFN",title:"Afghan Afghani",symbol:"AFN",native:"؋",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"7092",max_amount:"70919694"},ALL:{code:"ALL",title:"Albanian Lek",symbol:"ALL",native:"Lek",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!1,drop_zeros:!1,exp:2,min_amount:"9249",max_amount:"92485282"},AMD:{code:"AMD",title:"Armenian Dram",symbol:"AMD",native:"դր.",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"38785",max_amount:"387850064"},ARS:{code:"ARS",title:"Argentine Peso",symbol:"ARS",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"93178",max_amount:"931784401"},AUD:{code:"AUD",title:"Australian Dollar",symbol:"AU$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"153",max_amount:"1534530"},AZN:{code:"AZN",title:"Azerbaijani Manat",symbol:"AZN",native:"ман.",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"170",max_amount:"1700517"},BAM:{code:"BAM",title:"Bosnia & Herzegovina Convertible Mark",symbol:"BAM",native:"KM",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"181",max_amount:"1806101"},BDT:{code:"BDT",title:"Bangladeshi Taka",symbol:"BDT",native:"৳",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"11744",max_amount:"117439546"},BGN:{code:"BGN",title:"Bulgarian Lev",symbol:"BGN",native:"лв.",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"181",max_amount:"1808709"},BND:{code:"BND",title:"Brunei Dollar",symbol:"BND",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"133",max_amount:"1330735"},BOB:{code:"BOB",title:"Bolivian Boliviano",symbol:"BOB",native:"Bs",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"691",max_amount:"6906359"},BRL:{code:"BRL",title:"Brazilian Real",symbol:"R$",native:"R$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"577",max_amount:"5769050"},BYN:{code:"BYN",title:"Belarusian ruble",symbol:"BYN",native:"BYN",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"327",max_amount:"3270247"},CAD:{code:"CAD",title:"Canadian Dollar",symbol:"CA$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"139",max_amount:"1387645"},CHF:{code:"CHF",title:"Swiss Franc",symbol:"CHF",native:"CHF",thousands_sep:"'",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"87",max_amount:"870429"},CLP:{code:"CLP",title:"Chilean Peso",symbol:"CLP",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:0,min_amount:"949",max_amount:"9486298"},CNY:{code:"CNY",title:"Chinese Renminbi Yuan",symbol:"CN¥",native:"CN¥",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"721",max_amount:"7207705"},COP:{code:"COP",title:"Colombian Peso",symbol:"COP",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"408665",max_amount:"4086650000"},CRC:{code:"CRC",title:"Costa Rican Colón",symbol:"CRC",native:"₡",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"52313",max_amount:"523125084"},CZK:{code:"CZK",title:"Czech Koruna",symbol:"CZK",native:"Kč",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"2332",max_amount:"23323050"},DKK:{code:"DKK",title:"Danish Krone",symbol:"DKK",native:"kr",thousands_sep:"",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"689",max_amount:"6887630"},DOP:{code:"DOP",title:"Dominican Peso",symbol:"DOP",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"5945",max_amount:"59453394"},DZD:{code:"DZD",title:"Algerian Dinar",symbol:"DZD",native:"د.ج.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"13449",max_amount:"134492834"},EGP:{code:"EGP",title:"Egyptian Pound",symbol:"EGP",native:"ج.م.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"4869",max_amount:"48686201"},ETB:{code:"ETB",title:"Ethiopian Birr",symbol:"ETB",native:"ብር",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"8093",max_amount:"80931744"},EUR:{code:"EUR",title:"Euro",symbol:"€",native:"€",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"92",max_amount:"923025"},GBP:{code:"GBP",title:"British Pound",symbol:"£",native:"£",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"78",max_amount:"784671"},GEL:{code:"GEL",title:"Georgian Lari",symbol:"GEL",native:"GEL",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"271",max_amount:"2709634"},GTQ:{code:"GTQ",title:"Guatemalan Quetzal",symbol:"GTQ",native:"Q",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"775",max_amount:"7745760"},HKD:{code:"HKD",title:"Hong Kong Dollar",symbol:"HK$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"781",max_amount:"7810275"},HNL:{code:"HNL",title:"Honduran Lempira",symbol:"HNL",native:"L",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"2474",max_amount:"24741783"},HRK:{code:"HRK",title:"Croatian Kuna",symbol:"HRK",native:"kn",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"691",max_amount:"6907950"},HUF:{code:"HUF",title:"Hungarian Forint",symbol:"HUF",native:"Ft",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"36623",max_amount:"366225500"},IDR:{code:"IDR",title:"Indonesian Rupiah",symbol:"IDR",native:"Rp",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"1620255",max_amount:"16202550000"},ILS:{code:"ILS",title:"Israeli New Sheqel",symbol:"₪",native:"₪",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"380",max_amount:"3801205"},INR:{code:"INR",title:"Indian Rupee",symbol:"₹",native:"₹",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"8374",max_amount:"83744750"},ISK:{code:"ISK",title:"Icelandic Króna",symbol:"ISK",native:"kr",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:0,min_amount:"139",max_amount:"1389014"},JMD:{code:"JMD",title:"Jamaican Dollar",symbol:"JMD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"15637",max_amount:"156368606"},JPY:{code:"JPY",title:"Japanese Yen",symbol:"¥",native:"¥",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"149",max_amount:"1490865"},KES:{code:"KES",title:"Kenyan Shilling",symbol:"KES",native:"Ksh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"12996",max_amount:"129960065"},KGS:{code:"KGS",title:"Kyrgyzstani Som",symbol:"KGS",native:"KGS",thousands_sep:" ",decimal_sep:"-",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8403",max_amount:"84030175"},KRW:{code:"KRW",title:"South Korean Won",symbol:"₩",native:"₩",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"1367",max_amount:"13667698"},KZT:{code:"KZT",title:"Kazakhstani Tenge",symbol:"KZT",native:"₸",thousands_sep:" ",decimal_sep:"-",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"47435",max_amount:"474353706"},LBP:{code:"LBP",title:"Lebanese Pound",symbol:"LBP",native:"ل.ل.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8950019",max_amount:"89500191612"},LKR:{code:"LKR",title:"Sri Lankan Rupee",symbol:"LKR",native:"රු.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"30176",max_amount:"301757853"},MAD:{code:"MAD",title:"Moroccan Dirham",symbol:"MAD",native:"د.م.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"987",max_amount:"9874277"},MDL:{code:"MDL",title:"Moldovan Leu",symbol:"MDL",native:"MDL",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1777",max_amount:"17770719"},MMK:{code:"MMK",title:"Myanmar kyat",symbol:"MMK",native:"MMK",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"324796",max_amount:"3247960992"},MNT:{code:"MNT",title:"Mongolian Tögrög",symbol:"MNT",native:"MNT",thousands_sep:" ",decimal_sep:",",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"345000",max_amount:"3450000346"},MOP:{code:"MOP",title:"Macanese pataca",symbol:"MOP",native:"MOP",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"804",max_amount:"8040613"},MUR:{code:"MUR",title:"Mauritian Rupee",symbol:"MUR",native:"MUR",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"4675",max_amount:"46749662"},MVR:{code:"MVR",title:"Maldivian Rufiyaa",symbol:"MVR",native:"MVR",thousands_sep:",",decimal_sep:".",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1535",max_amount:"15350296"},MXN:{code:"MXN",title:"Mexican Peso",symbol:"MX$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"1898",max_amount:"18980550"},MYR:{code:"MYR",title:"Malaysian Ringgit",symbol:"MYR",native:"RM",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"450",max_amount:"4497502"},MZN:{code:"MZN",title:"Mozambican Metical",symbol:"MZN",native:"MTn",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"6390",max_amount:"63899991"},NGN:{code:"NGN",title:"Nigerian Naira",symbol:"NGN",native:"₦",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"163953",max_amount:"1639530235"},NIO:{code:"NIO",title:"Nicaraguan Córdoba",symbol:"NIO",native:"C$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"3679",max_amount:"36791630"},NOK:{code:"NOK",title:"Norwegian Krone",symbol:"NOK",native:"kr",thousands_sep:" ",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1100",max_amount:"10996470"},NPR:{code:"NPR",title:"Nepalese Rupee",symbol:"NPR",native:"नेरू",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"13390",max_amount:"133897859"},NZD:{code:"NZD",title:"New Zealand Dollar",symbol:"NZ$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"168",max_amount:"1679219"},PAB:{code:"PAB",title:"Panamanian Balboa",symbol:"PAB",native:"B/.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"100",max_amount:"999469"},PEN:{code:"PEN",title:"Peruvian Nuevo Sol",symbol:"PEN",native:"S/.",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"374",max_amount:"3740759"},PHP:{code:"PHP",title:"Philippine Peso",symbol:"PHP",native:"₱",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"5806",max_amount:"58056502"},PKR:{code:"PKR",title:"Pakistani Rupee",symbol:"PKR",native:"₨",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"27836",max_amount:"278360445"},PLN:{code:"PLN",title:"Polish Złoty",symbol:"PLN",native:"zł",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"396",max_amount:"3957640"},PYG:{code:"PYG",title:"Paraguayan Guaraní",symbol:"PYG",native:"₲",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:0,min_amount:"7569",max_amount:"75694544"},QAR:{code:"QAR",title:"Qatari Riyal",symbol:"QAR",native:"ر.ق.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"364",max_amount:"3644355"},RON:{code:"RON",title:"Romanian Leu",symbol:"RON",native:"RON",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"459",max_amount:"4592300"},RSD:{code:"RSD",title:"Serbian Dinar",symbol:"RSD",native:"дин.",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"10802",max_amount:"108020115"},RUB:{code:"RUB",title:"Russian Ruble",symbol:"RUB",native:"₽",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"8990",max_amount:"89898410"},SAR:{code:"SAR",title:"Saudi Riyal",symbol:"SAR",native:"ر.س.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"375",max_amount:"3754022"},SEK:{code:"SEK",title:"Swedish Krona",symbol:"SEK",native:"kr",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1069",max_amount:"10689290"},SGD:{code:"SGD",title:"Singapore Dollar",symbol:"SGD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"133",max_amount:"1331235"},THB:{code:"THB",title:"Thai Baht",symbol:"฿",native:"฿",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"3535",max_amount:"35351502"},TJS:{code:"TJS",title:"Tajikistani Somoni",symbol:"TJS",native:"TJS",thousands_sep:" ",decimal_sep:";",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1057",max_amount:"10569158"},TRY:{code:"TRY",title:"Turkish Lira",symbol:"TRY",native:"TL",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"3317",max_amount:"33166840"},TTD:{code:"TTD",title:"Trinidad and Tobago Dollar",symbol:"TTD",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"677",max_amount:"6768188"},TWD:{code:"TWD",title:"New Taiwan Dollar",symbol:"NT$",native:"NT$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"3281",max_amount:"32805499"},TZS:{code:"TZS",title:"Tanzanian Shilling",symbol:"TZS",native:"TSh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"270000",max_amount:"2700000297"},UAH:{code:"UAH",title:"Ukrainian Hryvnia",symbol:"UAH",native:"₴",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!1,drop_zeros:!1,exp:2,min_amount:"4124",max_amount:"41236639"},UGX:{code:"UGX",title:"Ugandan Shilling",symbol:"UGX",native:"USh",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:0,min_amount:"3723",max_amount:"37234902"},USD:{code:"USD",title:"United States Dollar",symbol:"$",native:"$",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!1,drop_zeros:!1,exp:2,min_amount:"100",max_amount:1e6},UYU:{code:"UYU",title:"Uruguayan Peso",symbol:"UYU",native:"$",thousands_sep:".",decimal_sep:",",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"4027",max_amount:"40269076"},UZS:{code:"UZS",title:"Uzbekistani Som",symbol:"UZS",native:"UZS",thousands_sep:" ",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1256851",max_amount:"12568510387"},VND:{code:"VND",title:"Vietnamese Đồng",symbol:"₫",native:"₫",thousands_sep:".",decimal_sep:",",symbol_left:!1,space_between:!0,drop_zeros:!1,exp:0,min_amount:"25218",max_amount:"252175000"},YER:{code:"YER",title:"Yemeni Rial",symbol:"YER",native:"ر.ي.‏",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"25035",max_amount:"250350255"},ZAR:{code:"ZAR",title:"South African Rand",symbol:"ZAR",native:"R",thousands_sep:",",decimal_sep:".",symbol_left:!0,space_between:!0,drop_zeros:!1,exp:2,min_amount:"1819",max_amount:"18193780"}};function uP(r,e,t,s){r=(r+"").replace(/[^0-9+\-Ee.]/g,"");var i=isFinite(+r)?+r:0,n=isFinite(+e)?Math.abs(e):0,a=typeof s>"u"?",":s,o=typeof t>"u"?".":t,l="",c=function(d,h){var u=Math.pow(10,h);return""+Math.round(d*u)/u};return l=(n?c(i,n):""+Math.round(i)).split("."),l[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,a)),(l[1]||"").length{t._==="messageEntitySpoiler"&&(r=OL(r,t).text)}),r}function nu(r){return{_:"messageEntityEmoji",offset:0,length:r.length,unicode:UL(r).join("-").replace(/-?fe0f/g,"")}}const Gy=new RegExp(`(^${K0})`);function hf(r,e=!1){const t=(r||"").trim().split(" ");if(!t[0])return{text:"",entities:[]};const s=[],i=t[0].match(Gy),n=i?.[0]||t[0][0];i&&s.push(nu(n));const a=t.length;if(e||a===1)return{text:n,entities:s};const o=t[a-1].match(Gy),l=o?.[0]||t[a-1][0];return o&&s.push({...nu(l),offset:n.length}),{text:n+l,entities:s}}function Zu(r,e){const{text:t,entities:s}=hf(r,e);return _e(t,void 0,s)}let ir,ph,zy;const Wy=new Map;function pP(r,e){if(!ir){zy=document.getElementById("svg-defs");const a="http://www.w3.org/2000/svg";ir=document.createElementNS(a,"svg"),ir.setAttributeNS(null,"width","26"),ir.setAttributeNS(null,"height","26"),ir.setAttributeNS(null,"viewBox","0 0 26 26"),ir.classList.add("topic-icon-svg");const o=document.createElementNS(a,"use");o.setAttributeNS(null,"href","#topic-icon"),ir.append(o),ph=document.createElement("span"),ph.classList.add("topic-icon","avatar-like");const l=document.createElement("span");l.classList.add("topic-icon-content"),ph.append(ir,l)}r||(console.error("NO TOPIC ICON COLOR!"),r=uc[0]),e||(console.error("NO TOPIC NAME!"),e="");const t=r.toString(16),s=`topic-icon-gradient-${r}`;let i=Wy.get(r);if(!i){const{h:a,s:o,l,a:c}=Qg("#"+t);zy.insertAdjacentHTML("beforeend",` - + - `),Wy.set(o,i=`hsla(${a}, ${r}%, ${Math.max(0,l-40)}%, ${c})`)}const n=ph.cloneNode(!0);return n.firstElementChild.style.fill=`url(#${s})`,n.firstElementChild.style.stroke=i,n.lastElementChild.append(Zu(e,!0)),n}function uf({docIds:o,loadPromises:e,middleware:t,lazyLoadQueue:s,customEmojiSize:i,animationGroup:n}){const a=" ".repeat(o.length),r=[];return o.forEach((c,d)=>{r.push({_:"messageEntityCustomEmoji",offset:d,length:1,document_id:c})}),as(a,{entities:r,loadPromises:e,animationGroup:n,customEmojiSize:i,middleware:t,lazyLoadQueue:s})}function mP(o){const e=o.loadPromises??(o.loadPromises=[]),t=uf(o);return Promise.all(e).then(()=>t)}function Ky(o){const e=o.action,{onclick:t,url:s}=Pr(`tg://voicechat?chat_id=${o.peerId.toChatId()}&id=${e.call.id}&access_hash=${e.call.access_hash}`);if(!t)return document.createElement("span");const i=document.createElement("a");return i.href=s,i.setAttribute("onclick",t+"(this)"),i}function wl(o,e){const t=[],s=[];for(let i=0,n=o.length;igP.has(e.platform)&&!fP.has(e.reason))}function Rw(o){return!!Fw(o)}function yP(o){return o.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function Dw(o){return!!(o.restriction_reason&&Rw(o.restriction_reason))}function pf(o,e){return o=o.replace(/[\u2640\u2642\u2764](?!\ufe0f)/g,(t,s,i)=>{if(e){const n=t.length;s+=n,e.forEach(a=>{const r=a.offset+a.length;r===s?a.length+=n:r>s&&(a.offset+=n)})}return t+"️"}),o}function jm(o,e=[]){o=pf(o,e);const t=tl(o),s=no(e,t);return{message:o,entities:e,myEntities:t,totalEntities:s}}function jc(o){const{message:e,entities:t,myEntities:s}=jm(o.text,o.entities),i=no(t,s.filter(n=>n._==="messageEntityCustomEmoji"||n._==="messageEntityEmoji"));return{_:"textWithEntities",text:e,entities:i}}async function vP(o){return{cached:o.cached,result:o.cached?await o.result:o.result}}function uo(o){return o.then(vP)}const[bP,wP]=Ku({}),Bw=o=>{I.managers.appProfileManager.getProfileByPeerId(o).then(e=>{wP(o,Cc(e))})};I.addEventListener("peer_full_update",Bw);function Nw(o){return H(()=>{if(!o())return;const e=bP[o()];return e||Bw(o()),e})}let mh,Kp;function Ow(o){mh||(mh=new Worker(new URL(""+new URL("tinyld.worker-sOiVgKBT.js",import.meta.url).href,import.meta.url),{type:"module"}),mh.addEventListener("message",t=>{const{lang:s}=t.data;Kp.shift().resolve(s)}),Kp=[]);const e=kt();return Kp.push(e),mh.postMessage({text:o}),e}const SP=8,CP=.65;let Sr,pa,qm,Ju=()=>{Ju=void 0,[Sr,pa]=Ku({}),Nt(()=>{const[o]=Rl();qm=H(()=>new Set(o.translations.doNotTranslate.concat(navigator.language.split("-")[0],xe.langCodeNormalized()))),me(Us(qm,e=>Zn(()=>{for(const t in Sr){const s=Sr[t];if(!s)continue;let i=0;for(const n in s.languages)e.has(n)||(i+=s.languages[n]);pa(t.toPeerId(),"totalForeign",i)}}),{defer:!0}))})};function Uw(){return{messages:{},languages:{},language:void 0,total:0,totalForeign:0}}function IP(o){Ju?.(),It(()=>Sr[o])||pa(o,Uw()),pa(o,"isFull",!0)}async function LP(o,e){if(Ju?.(),Sr[o]&&Sr[o].messages[e])return;const s=be.getMessageByPeer(o,e).message;if(!s)return;const i=await Ow(s),n=!qm().has(i);Zn(()=>{let a=It(()=>Sr[o]);if(!a)pa(o,a=Uw());else if(a.messages[e])return;const r=(a.languages[i]??0)+1,l=a.total+1,c=a.totalForeign+(n?1:0);pa(o,"messages",e,i),pa(o,"languages",i,r),pa(o,"total",l),n&&pa(o,"totalForeign",c);const d=a.language;(a.languages[d]||0){const t=o();if(!t)return;Ju?.();const s=Sr[t];if(!(s&&s.total{const t=o();let s=jp.get(t);return s||(s={count:0,factory:e},s.value=Nt(i=>(s.dispose=i,e())),jp.set(t,s)),++s.count,rt(()=>{--s.count||(s.dispose(),jp.delete(t))}),s.value})}const[MP,Hw]=Nt(()=>te(I.premium)),jy=()=>{I.managers.rootScope.getPremium().then(Hw)};I.addEventListener("premium_toggle",Hw);I.myId?jy():I.addEventListener("user_auth",jy);function ep(){return MP}function _P(o){const[e,t]=Rl(),s=Nw(()=>o),i=PP(()=>o),n=ep(),a=H(()=>{if(!(!n()||!s()||!i()||!e.translations.enabled))return!(s().pFlags.translations_disabled||e.translations.doNotTranslate.includes(i()))}),r={peerLanguage:i,language:()=>e.translations.peers[o]||xe.langCodeNormalized(),setLanguage:l=>t("translations","peers",o,l),enabled:H(()=>!!(n()&&e.translations.enabled&&e.translations.enabledPeers[o])&&a()),toggle:l=>t("translations","enabledPeers",o,l?!0:void 0),shouldShow:a};return me(()=>{r.shouldShow()===!1&&r.enabled()&&r.toggle(!1)}),r}function Sl(o){return $w(()=>Sl.name+"-"+o,()=>_P(o))()}function ai(){const o=Rt();return rt(()=>o.destroy()),o}const EP=!1;function Vw(o){const e=EP,[t,s]=te(!e),i=H(f=>f||t()),[n,a]=te(),r=Sl(o.peerId),l=kt();let c=o.textWithEntities,d=!0,h=!1;const u=o.enabled,p=o.container??document.createElement("span");p.classList.add("translatable-message"),o.message&&(LP(o.peerId,o.message.mid),c={_:"textWithEntities",text:o.message.message,entities:o.message.totalEntities}),o.richTextOptions?.loadPromises&&o.richTextOptions.loadPromises.push(l);const m=(f,v)=>uo(I.managers.acknowledged.appTranslationsManager.translateText({...o.message?{peerId:o.message.peerId,mid:o.message.mid}:{text:o.textWithEntities},lang:f,onlyCache:v})),g=f=>{a(c),p.classList.toggle("text-loading",!!f)};if(o.observer&&o.observeElement&&e){const f=v=>{s(v.isIntersecting)};o.observer.observe(o.observeElement,f),rt(()=>{o.observer.unobserve(o.observeElement,f)})}return me(async()=>{const f=ai().get(),v=d;if(d=!1,!r.enabled()&&!o.enabled||!i()&&!v){g();return}const y=await m(r.language(),v&&e);if(!f())return;if(!y.cached)u?p.classList.add("text-loading"):g(!0);else if(!y.result){g();return}const w=await y.result;if(f()){if(!w){g();return}a(w)}}),me(()=>{let f=n();if(!f)return;o.onTextWithEntities&&(f=o.onTextWithEntities(f)),(c!==f||!o.message)&&(f=jc(f));const v=ai().get(),y=[],w=as(f.text,{...o.richTextOptions||{},loadPromises:y,entities:f.entities});Promise.all(y).then(()=>{if(!v())return;const b=()=>{v()&&(l.resolve(),p.replaceChildren(w),(h||u)&&p.classList.remove("text-loading"),h=!0)};if(h&&o.onTranslation){o.onTranslation(b);return}b()})}),p}function Ud(o){return Nt(e=>(o.middleware.onDestroy(e),Vw(o)))}async function Qm(o){try{return await kP(o)}catch(e){return console.error("wrapMessageActionTextNewUnsafe error:",e),o.plain?"":document.createElement("span")}}async function Cr(o){o.text??(o.text=o.message.message),!o.plain&&o.highlightWord&&(o.highlightWord=o.highlightWord.trim());const{message:e,usingMids:t,plain:s,highlightWord:i,withoutMediaType:n}=o,a=[];let r=!1;const l=(m,g,f)=>{if(m){if(g===void 0&&r)return;g=s?xe.format(m,!0,f):L(m,f)}if(s)a.push(g);else{const v=document.createElement("span");typeof g=="string"?v.innerHTML=g:v.append(g),a.push(v)}},d=I.managers.appMessagesManager,h=Dw(e),u={...o,noLinebreaks:!0,noLinks:!0,noTextFormat:!0};let p=e.totalEntities??e.entities;if(e.media&&!h){let m=!0;if(e.grouped_id){if(t){const v=await d.getMidsByMessage(e);if(t.length===v.length){for(const y of v)if(!t.includes(y)){m=!1;break}}else m=!1}if(m){const v=await d.getGroupedText(e.grouped_id);o.text=v?.message||"",p=v?.totalEntities||[],n||(l("AttachAlbum"),r=!0)}}else m=!1;let g=1;if(!m&&!n||!o.text){const v=e.media;switch(v?._){case"messageMediaPhoto":l("AttachPhoto");break;case"messageMediaDice":l(void 0,s?v.emoticon:_e(v.emoticon));break;case"messageMediaVenue":{o.text=v.title,l("AttachLocation");break}case"messageMediaGeo":l("AttachLocation");break;case"messageMediaGeoLive":l("AttachLiveLocation");break;case"messageMediaPoll":const y="📊 ";if(s){const w=y+v.poll.question.text;l(void 0,w)}else{const w=jc(v.poll.question),b=as(w.text,{...u,entities:w.entities});b.prepend(_e(y)),l(void 0,b)}break;case"messageMediaContact":l("AttachContact");break;case"messageMediaGame":{const w="🎮 "+v.game.title;l(void 0,s?w:_e(w));break}case"messageMediaDocument":{const w=v.document;if(w.type==="video")l("AttachVideo");else if(w.type==="voice")l("AttachAudio");else if(w.type==="gif")l("AttachGif");else if(w.type==="round")l("AttachRound");else if(w.type==="sticker"){const b=a.length;if(w.stickerEmojiRaw){const C=w.stickerEmojiRaw+" ";l(void 0,s?C:_e(C))}l("AttachSticker");const S=a.splice(b,2);if(s)a.push(S[0]+(S[1]?S[1]:""));else{const C=window.document.createElement("span");C.append(...S),a.push(C)}o.text=""}else if(w.type==="audio"){const b=w.attributes.find(C=>C._==="documentAttributeAudio"&&(C.title||C.performer)),S="🎵 "+(b?[b.title,b.performer].filter(Boolean).join(" - "):w.file_name);l(void 0,s?S:_e(S))}else l(void 0,s?w.file_name:_e(w.file_name));break}case"messageMediaInvoice":{v.extended_media?._==="messageExtendedMediaPreview"?l(void 0,s?v.description:_e(v.description)):l(void 0,s?v.title:_e(v.title));break}case"messageMediaUnsupported":{l(Fm);break}case"messageMediaStory":{if(v.pFlags.via_mention){const w=Ze(v.peer),b=w===I.myId;l(b?"StoryMentionYou":"StoryMention",void 0,[await Re({peerId:b?e.peerId:w,plainText:s})])}else l("Story");break}case"inputMediaWebPage":case"messageMediaPhotoExternal":case"messageMediaDocumentExternal":case"messageMediaWebPage":break;case"messageMediaGiveaway":{const w=ew(new Date(v.until_date*1e3));l("Giveaway.ToBeSelectedFull",void 0,[L("Giveaway.ToBeSelected",[v.quantity,s?w.textContent:w])]);break}case"messageMediaGiveawayResults":{const{langPackKey:w,args:b}=zw(v,s);l(w,void 0,b);break}case"messageMediaPaidMedia":{const w=v.extended_media,[b,S]=wl(w,M=>M._==="messageExtendedMediaPreview"?M.video_duration===void 0:M.media._==="messageMediaPhoto");s||(g+=2,l(void 0,Pe("star","xtr-icon")),l(void 0," "));const C=b.length+S.length;if(C<2){l(b.length?"AttachPhoto":"AttachVideo");break}l(b.length&&S.length?"Media":b.length?"Photos":"Videos",void 0,[C]);break}default:l(Fm),o.text="";break}}const f=a.length;for(;g({...g,text:za(g.text,100)})}):(m=as(o.text,{...u,entities:p}),m=Od(m)),a.push(m)}if(s)return a.join("");{const m=document.createDocumentFragment();return m.append(...a),m}}function au(o){return o._==="payments.checkedGiftCode"?!o.from_id:(o.amount||o.crypto_amount)!==void 0}async function qy(o){const e=await Cr(o);if(o.plain)return e;const t=document.createElement("i");return t.dataset.savedFrom=o.message.peerId+"_"+o.message.mid,t.append(e),Ya(t),t}function gc(o,e){return e?o:cf(_e(o))}async function tp(o){const e=o.topic;let t=e?.icon_emoji_id;return e?.id===Rd&&(t="5390854796011906616"),t?o.plain?I.managers.appEmojiManager.getCustomEmojiDocument(t).then(s=>s.stickerEmojiRaw):mP({...o,docIds:[t]}).then(s=>(s.lastElementChild.classList.add("topic-icon"),s)):o.plain?"":pP(e?.icon_color,e?.title)}function Gw(o){const e=o.message.action;return tp({...o,topic:e})}async function Qy(o){const e=o.message.action,t=document.createElement("span");return t.classList.add("topic-name"),t.append(await Gw(o),gc(e.title,o.plain)),t}function zw(o,e){let t="Giveaway.Results",s=[o.winners_count];const i=(n,a)=>{s=[e?xe.format(t,!0,s):L(t,s)],t="Giveaway.Results.Combined",s.push(e?xe.format(n,!0,a):L(n,a))};return o.winners_count?o.unclaimed_count&&i("Giveaway.Results.Unclaimed",[o.unclaimed_count]):(t=o.pFlags.stars?"Giveaway.Results.NoWinners.Stars":"Giveaway.Results.NoWinners",s=[o.unclaimed_count]),{langPackKey:t,args:s}}async function kP(o){const{plain:e,message:t,noLinks:s}=o,i=e?void 0:document.createElement("span"),n="action"in t&&t.action;if(n.message){const a=n.message;return e?To(a):(At(i,as(a,{noLinebreaks:!0})),i)}else{let a=n._,r,l;const c=I.managers,d=(p,m)=>m?$a({peerId:p,plainText:m}):Re({peerId:p}),h=async(p,m)=>{if(p.length===1)return d(p[0],m);const g=vi(await Promise.all(p.map(f=>d(f,m))),!1,m);if(m)return Array.isArray(g)?g.join(""):g;{const f=document.createElement("span");return f.append(...g),l.push(f),f}};switch(n._){case"messageActionPhoneCall":{a+="."+n.type,l=[Bh(n.duration,e)];break}case"messageActionGroupCall":{a+="."+n.type,l=[],!a.endsWith("You")&&!t.pFlags.post&&l.push(d(t.fromId,e)),n.duration!==void 0?l.push(Bh(n.duration,e)):s?l.push(""):l.push(Ky(t));break}case"messageActionInviteToGroupCall":{const p=[t.fromId,n.users[0].toPeerId()];let m="Chat.Service.VoiceChatInvitation";const g=I.myId;p[0]===g?m+="ByYou":p[1]===g&&(m+="ForYou"),fs(p,g),r=m,l=p.map(f=>d(f,e)),l.push(s?"":Ky(t));break}case"messageActionGroupCallScheduled":{const p=new Date,m=new Date(n.schedule_date*1e3),g=(m.getTime()-p.getTime())/864e5,f=new Date(p);f.setDate(f.getDate()+1);const v=await c.appPeersManager.isBroadcast(t.peerId);r=v?"ChatList.Service.VoiceChatScheduled.Channel":"ChatList.Service.VoiceChatScheduled",l=[];const y=I.myId;t.fromId===y?r+="You":v||l.push(d(t.fromId,e));let w;const b=[];g<1&&m.getDate()===p.getDate()?w="TodayAtFormattedWithToday":g<2&&m.getDate()===f.getDate()?w="Time.TomorrowAt":(w="formatDateAtTime",b.push(new xe.IntlDateElement({date:m,options:{day:"2-digit",month:"2-digit",year:"2-digit"}}).element)),b.push(Xg(m));const S=L(w,b);l.push(S);break}case"messageActionChatCreate":{const p=I.myId;t.fromId===p?a+="You":l=[d(t.fromId,e)];break}case"messageActionPinMessage":{const p=t.peerId,m=await c.appMessagesManager.getMessageByPeer(p,t.reply_to_mid);l=[d(t.fromId,e)],m?l.push(qy({...o,message:m})):(r="ActionPinnedNoText",t.reply_to_mid&&c.appMessagesManager.fetchMessageReplyTo(t));break}case"messageActionChatJoinedByRequest":{const p=await c.appPeersManager.isBroadcast(t.peerId);t.pFlags.out?r=p?"RequestToJoinChannelApproved":"RequestToJoinGroupApproved":(r=p?"ChatService.UserJoinedChannelByRequest":"ChatService.UserJoinedGroupByRequest",l=[d(t.fromId,e)]);break}case"messageActionGiveawayLaunch":{r=n.stars?"BoostingStarsGiveawayJustStarted":"BoostingGiveawayJustStarted",l=[d(t.fromId,e)],n.stars&&l.unshift(+n.stars);break}case"messageActionContactSignUp":case"messageActionChatReturn":case"messageActionChatLeave":case"messageActionChatJoined":case"messageActionChatEditPhoto":case"messageActionChatDeletePhoto":case"messageActionChatEditVideo":case"messageActionChatJoinedByLink":case"messageActionChannelEditVideo":case"messageActionChannelDeletePhoto":{l=[d(t.fromId,e)];break}case"messageActionChannelEditTitle":case"messageActionChatEditTitle":{l=[],n._==="messageActionChatEditTitle"&&l.push(d(t.fromId,e)),l.push(gc(n.title,e));break}case"messageActionChatDeleteUser":case"messageActionChatAddUsers":case"messageActionChatAddUser":{const p=n.users||[n.user_id];l=[d(t.fromId,e)];const m=p.map(g=>g.toPeerId(!1));l.push(h(m,e));break}case"messageActionBotAllowed":{if(n.pFlags?.attach_menu){r="ActionAttachMenuBotAllowed";break}else if(n.pFlags?.from_request){r="ActionBotAllowedRequest";break}else if(!n.domain)break;const p=as(n.domain,{entities:[{_:"messageEntityUrl",length:n.domain.length,offset:0}],noLinks:s});l=[cf(p)];break}case"messageActionPaymentSent":{const p=n.pFlags.recurring_init,m=n.pFlags.recurring_used;if(r=m?"Chat.Service.PaymentSentRecurringUsedNoTitle":p?"Chat.Service.PaymentSentRecurringInitNoTitle":"Chat.Service.PaymentSent1NoTitle",l=[Qi(n.total_amount,n.currency,void 0,void 0,e),d(t.peerId,e)],t.reply_to_mid){const f=t.reply_to,v=await c.appMessagesManager.getMessageByPeer(f?.reply_to_peer_id?Ze(f.reply_to_peer_id):t.peerId,t.reply_to_mid);v?(r=m?"Chat.Service.PaymentSentRecurringUsed":p?"Chat.Service.PaymentSentRecurringInit":"Chat.Service.PaymentSent1",l.push(qy({...o,message:v}).then(y=>(y instanceof HTMLElement&&y.classList.add("is-receipt-link"),y)))):c.appMessagesManager.fetchMessageReplyTo(t)}break}case"messageActionPaymentRefunded":{const p=Qi(n.total_amount,n.currency,void 0,void 0,e);l=[d(t.fromId,e),p],r="Chat.Service.Refund";break}case"messageActionSetMessagesTTL":{l=[];const p=await c.appPeersManager.isBroadcast(t.peerId);if(n.period){p?r="ActionTTLChannelChanged":t.fromId===I.myId?r="ActionTTLYouChanged":(r="ActionTTLChanged",l.push(d(t.fromId,e)));let m;if(n.period>1814400){let g;const f=[];n.period>=31536e3?(g="Years",f.push(n.period/31536e3|0)):(g="Months",f.push(n.period/(Yg*30)|0)),m=e?xe.format(g,!0,f):L(g,f)}else m=Bh(n.period,e);l.push(m)}else p?r="ActionTTLChannelDisabled":t.fromId===I.myId?r="ActionTTLYouDisabled":(r="ActionTTLDisabled",l.push(d(t.fromId,e)));break}case"messageActionTopicEdit":{let p,m,g;const f=!!t.pFlags.out,v=n.icon_emoji_id!==void 0,y=v&&!+n.icon_emoji_id,w=n.title!==void 0,b=n.hidden!==void 0;f||(g=d(t.fromId,e)),w&&(m=gc(n.title,e)),v&&!y&&(p=Gw(o)),l=g?[g]:[],n.closed?r=f?"Chat.Service.Group.TopicEdited.You.Paused":"Chat.Service.Group.TopicEdited.Paused":n.closed===!1?r=f?"Chat.Service.Group.TopicEdited.You.Resumed":"Chat.Service.Group.TopicEdited.Resumed":y&&w?(r=f?"Chat.Service.TopicEdited.You.Mixed.IconRemoved":"Chat.Service.TopicEdited.Mixed.IconRemoved",l.push(m)):v&&w?(r=f?"Chat.Service.TopicEdited.You.Mixed":"Chat.Service.TopicEdited.Mixed",l.push(Qy(o))):y?r=f?"Chat.Service.Group.TopicEdited.You.Icon.Removed":"Chat.Service.Group.TopicEdited.Icon.Removed":w?(r=f?"Chat.Service.Group.TopicEdited.You.Title":"Chat.Service.Group.TopicEdited.Title",l.push(m)):v?(r=f?"Chat.Service.Group.TopicEdited.You.Icon":"Chat.Service.Group.TopicEdited.Icon",l.push(p)):b&&(r=f?n.hidden?"Chat.Service.Group.TopicEdited.You.Hided":"Chat.Service.Group.TopicEdited.You.Unhided":n.hidden?"Chat.Service.Group.TopicEdited.Hided":"Chat.Service.Group.TopicEdited.Unhided");break}case"messageActionTopicCreate":{l=[Qy(o)],r="TopicWasCreatedAction";break}case"messageActionSetChatTheme":{const p=!!t.pFlags.out;let m;p||(m=d(t.fromId,e)),l=m?[m]:[],n.emoticon?(l.push(gc(n.emoticon,e)),r=p?"ChatThemeChangedYou":"ChatThemeChangedTo"):r=p?"ChatThemeDisabledYou":"ChatThemeDisabled";break}case"messageActionPrizeStars":{r="BoostingReceivedGiftNoName";break}case"messageActionGiftStars":case"messageActionGiftCode":case"messageActionGiftPremium":{const p=n._==="messageActionGiftCode";if(p&&!au(n)){r="BoostingReceivedGiftNoName",n.boost_peer&&(r="BoostingReceivedGiftFrom",l=[d(Ze(n.boost_peer),e)]);break}const m=!!t.pFlags.out&&!p;let g;m||(g=d(t.fromId,e)),l=g?[g]:[],l.push(Qi(n.amount,n.currency,!1,!0,e)),r=m?"ActionGiftOutbound":"ActionGiftInbound";break}case"messageActionWebViewDataSent":{r="ActionBotWebViewData",l=[gc(n.text,e)];break}case"messageActionRequestedPeer":{r="Chat.Service.PeerRequested",l=[h(n.peers.map(p=>Ze(p)),e),d(t.peerId,e)];break}case"messageActionGiveawayResults":{const p=zw(n,e);r=p.langPackKey,l=p.args;break}case"messageActionSetChatWallPaper":{const p=t.peerId.isUser();if(l=[d(p?t.peerId:t.fromId,e)],p){t.pFlags.out?r=n.pFlags.for_both?"ActionSetWallpaperForThisChatSelfBoth":n.pFlags.same?"ActionSetSameWallpaperForThisChatSelf":"ActionSetWallpaperForThisChatSelf":r=n.pFlags.for_both?"ActionSetWallpaperForThisChatBoth":n.pFlags.same?"ActionSetSameWallpaperForThisChat":"ActionSetWallpaperForThisChat";break}if(await c.appPeersManager.isBroadcast(t.peerId)){r="ActionSetWallpaperForThisChannel";break}r=t.fromId===t.peerId?"ActionSetWallpaperForThisGroup":"ActionSetWallpaperForThisGroupByUser";break}default:r=Xh[a]||`[${n._}]`;break}r||(r=Xh[a],r===void 0&&(r="["+a+"]"));const u=l&&await Promise.all(l);return e?xe.format(r,!0,u):ls(i,r,u)}}const Ww=new WeakMap;I.addEventListener("peer_title_edit",({peerId:o,threadId:e})=>{let t=`.peer-title[data-peer-id="${o}"]`;e&&(t+=`[data-thread-id="${e}"]`),Array.from(document.querySelectorAll(t)).forEach(i=>{Ww.get(i)?.update()})});class Ot{constructor(e){this.element=document.createElement("span"),this.element.classList.add("peer-title"),Ya(this.element),this.options={},e&&this.update(e),Ww.set(this.element,this)}setOptions(e){if(e){_t(this.options,e);for(const t in e){const s=e[t];typeof s!="object"&&typeof s!="function"&&(this.element.dataset[t]=s?""+(typeof s=="boolean"?+s:s):"0")}}}setHasInner(e){this.hasInner!==e&&(this.hasInner=e,this.element.classList.toggle("with-icons",e))}async update(e){var a;this.setOptions(e);let t=this.options.fromName;if(t!==void 0){this.options.limitSymbols!==void 0&&(t=za(t,this.options.limitSymbols,this.options.limitSymbols)),At(this.element,_e(t));return}(a=this.options).peerId??(a.peerId=Ft);let s;const{peerId:i,threadId:n}=this.options;if(i===I.myId&&this.options.dialog){let r;this.options.meAsNotes?r=L(this.options.onlyFirstName?"MyNotesShort":"MyNotes"):r=L(this.options.onlyFirstName?"Saved":"SavedMessages"),ht(this.element,r)}else if(i===Zg)ht(this.element,L(this.options.onlyFirstName?"AuthorHiddenShort":"AuthorHidden"));else{if(n){const[h,u]=await Promise.all([I.managers.dialogsStorage.getForumTopic(i,n),I.managers.appPeersManager.isForum(i)]);if(!h&&u){I.managers.dialogsStorage.getForumTopicById(i,n).then(p=>{if(!p&&this.options.threadId===n){this.options.threadId=void 0,this.update({threadId:void 0});return}this.update()},()=>{this.options.threadId===n&&(this.options.threadId=void 0,this.update({threadId:void 0}))}),At(this.element,L("Loading")),this.setHasInner(!1);return}}const r=n&&this.options.withIcons?I.managers.dialogsStorage.getForumTopic(i,n).then(h=>tp({...this.options.wrapOptions??{},topic:h})):void 0,[l,c,d]=await Promise.all([$a(this.options),this.options.withIcons&&Km({peerId:i,wrapOptions:this.options.wrapOptions})||this.options.withPremiumIcon&&Km({peerId:i,wrapOptions:this.options.wrapOptions,noVerifiedIcon:!0,noFakeIcon:!0}),r]);if(c?.length||d){const h=document.createElement("span");h.classList.add("peer-title-inner"),s=!0,At(h,l);const u=document.createDocumentFragment();u.append(...[d,h,...c??[]].filter(Boolean)),At(this.element,u)}else At(this.element,l)}this.setHasInner(s)}}function Kw(o,e){const t=o.querySelector(".emoji-status-text-color"),s=t&&xs.getAnimation(t);s&&s.setColor(e,!0)}async function Re(o){const e=new Ot;return await e.update(o),e.element}const qc=[["#CC5049"],["#D67722"],["#955CDB"],["#40A920"],["#309EBA"],["#368AD1"],["#C7508B"]],qp=["red","orange","violet","green","cyan","blue","pink"],TP=qc;function jw(o){return Math.abs(+o)%7}function Ym(o){let e=sp(o);if(e===-1)return;let t=qp[e];if(!t){const s=qc[e];if(!s)return qp[jw(o.id)];const n=Qg(s[0]).h;n>=345||n<29?e=0:n<67?e=1:n<140?e=3:n<199?e=4:n<234?e=5:n<301?e=2:e=6,t=qp[e]}return t}function sp(o){return o?o.color?.color??jw(o.id):-1}function mf(o){const e=sp(o);return qc[e]??[]}function Yy(o,e,t){for(const s of e){const n=(t?s.dark_colors:s.colors)?.colors;if(!n?.length)continue;const a=n.map(r=>tw(r));o[s.color_id]=a}return o}function Xy(o,e){const t=o.length;return e||(e=5),t!==3&&(o=o.slice().reverse()),`repeating-linear-gradient(-45deg, ${o.map((i,n,a)=>{const r=n*e+"px",l=(n+1)*e+"px";return[`${i} ${r}`,`${i} ${l}`].join(", ")}).join(", ")})`}function xP(o,e){let t=Yy(TP.slice(),o);hs.isNight()&&(t=Yy(t,o,!0)),qc.splice(0,qc.length,...t),t.forEach((n,a)=>{const r=`--peer-${a}`,l=`${r}-border-background`,c=`${r}-color-rgb`;if(document.documentElement.style.setProperty(c,An(n[0]).join(",")),n.length>1){const d=Xy(n);document.documentElement.style.setProperty(l,d)}else document.documentElement.style.removeProperty(l)});const s=mf(e);[["--peer-border-background","--primary-color",s.length],["--message-out-peer-border-background","--message-out-primary-color",s.length],["--message-out-peer-1-border-background","--message-out-primary-color",1],["--message-out-peer-2-border-background","--message-out-primary-color",2],["--message-out-peer-3-border-background","--message-out-primary-color",3],["--message-empty-peer-1-border-background","--message-empty-primary-color",1],["--message-empty-peer-2-border-background","--message-empty-primary-color",2],["--message-empty-peer-3-border-background","--message-empty-primary-color",3]].forEach(([n,a,r])=>{let l;if(r>1){const c=[`rgba(var(${a}-rgb), .4)`,`rgba(var(${a}-rgb), .2)`,`var(${a})`];r===2&&c.shift(),l=Xy(c)}else l=`var(${a})`;document.documentElement.style.setProperty(n,l)})}function AP(o){const e=o?.restriction_reason;return!!(e&&o.pFlags.restricted&&Rw(e))}function FP(o){if(!(!o||AP(o)))return o?.photo}function RP(o){let e="";return o&&(e=o.title??[o.first_name,o.last_name].filter(Boolean).join(" ")),Zu(e)}function Ge(...o){return o.filter(Boolean).join(" ")}function ao(o){const e=new Array(o.childNodes.length);let t=o.firstChild,s=0;for(;t;)e[s++]=t.nodeType===t.TEXT_NODE?t.nodeValue:t,t=t.nextSibling;return e}class DP{constructor(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.dpr=window.devicePixelRatio}prepare(e){this.canvas.width=this.width=e.width*this.dpr,this.canvas.height=this.height=e.height*this.dpr,this.centerX=this.width/2,this.centerY=this.height/2,this.radius=e.radius*this.dpr,this.gapLength=e.gap*this.dpr,this.totalLength=Math.PI*this.radius*2,this.startAngle=-1.5}render(e){this.context.clearRect(0,0,this.width,this.height);const t=e.reduce((n,a)=>n+a.length,0),s=e.length;this.context.lineCap="round",e.length===1&&e[0].length===1?this.context.setLineDash([]):this.context.setLineDash([this.totalLength/t-this.gapLength,this.gapLength]);let i=0;for(let n=0;nYh.mutateElement(o,()=>{i?.append(e),s?(r?.(),a.addEventListener("animationend",()=>{Yh.mutate(()=>{a.classList.remove("fade-in"),n?.remove(),o.classList.add("no-background"),l?.()})},{once:!0})):(n?.remove(),o.classList.add("no-background"),r?.(),l?.())}))}const gh=Symbol("RAF"),Qp=Symbol("TIMEOUT"),Lt=o=>{const{element:e,className:t,forwards:s,duration:i,onTransitionEnd:n,onTransitionStart:a,useRafs:r}=o,l=t&&t.split(" "),c=e[Qp],d=e[gh];if(c!==void 0&&clearTimeout(+c),d!==void 0&&(window.cancelAnimationFrame(+d),r||delete e[gh]),r&&st.isAvailable("animations")&&i){e[gh]=""+window.requestAnimationFrame(()=>{delete e[gh],Lt({...o,useRafs:r-1})});return}s&&t&&e.classList.add(...l);const h=()=>{delete e[Qp],!s&&t&&e.classList.remove("backwards",...l),e.classList.remove("animating"),n?.()};if(a?.(),!st.isAvailable("animations")||!i){e.classList.remove("animating","backwards"),h();return}e.classList.add("animating"),e.classList.toggle("backwards",!s),e[Qp]=""+setTimeout(h,i)},Yp=200;class on{constructor(e){this.tempId=0,this.detached=!0,this.promise=null,this.isUpload=!1,this.cancelable=!0,this.streamable=!1,this.rtmp=!1,this.tryAgainOnFail=!0,this.attachMethod="append",this.onClick=t=>{t&&oe(t),this.preloader.classList.contains("manual")?this.loadFunc?.(t):this.promise?.cancel?.()},e&&_t(this,e),this.isUpload&&(this.tryAgainOnFail=!1)}constructContainer(e={}){this.preloader||(this.preloader=document.createElement("div"),this.rtmp?this.preloader.classList.add("preloader-container-rtmp"):this.preloader.classList.add("preloader-container"),e.color&&this.preloader.classList.add("preloader-"+e.color),e.bold&&this.preloader.classList.add("preloader-bold"),this.streamable&&this.preloader.classList.add("preloader-streamable"))}constructDownloadIcon(){this.constructContainer()}construct(){this.construct=null,this.constructContainer(),this.rtmp?this.preloader.innerHTML=` + `),Wy.set(r,i=`hsla(${a}, ${o}%, ${Math.max(0,l-40)}%, ${c})`)}const n=ph.cloneNode(!0);return n.firstElementChild.style.fill=`url(#${s})`,n.firstElementChild.style.stroke=i,n.lastElementChild.append(Zu(e,!0)),n}function uf({docIds:r,loadPromises:e,middleware:t,lazyLoadQueue:s,customEmojiSize:i,animationGroup:n}){const a=" ".repeat(r.length),o=[];return r.forEach((c,d)=>{o.push({_:"messageEntityCustomEmoji",offset:d,length:1,document_id:c})}),as(a,{entities:o,loadPromises:e,animationGroup:n,customEmojiSize:i,middleware:t,lazyLoadQueue:s})}function mP(r){const e=r.loadPromises??(r.loadPromises=[]),t=uf(r);return Promise.all(e).then(()=>t)}function Ky(r){const e=r.action,{onclick:t,url:s}=Pr(`tg://voicechat?chat_id=${r.peerId.toChatId()}&id=${e.call.id}&access_hash=${e.call.access_hash}`);if(!t)return document.createElement("span");const i=document.createElement("a");return i.href=s,i.setAttribute("onclick",t+"(this)"),i}function wl(r,e){const t=[],s=[];for(let i=0,n=r.length;igP.has(e.platform)&&!fP.has(e.reason))}function Rw(r){return!!Fw(r)}function yP(r){return r.replace(/[|\\{}()[\]^$+*?.]/g,"\\$&").replace(/-/g,"\\x2d")}function Dw(r){return!!(r.restriction_reason&&Rw(r.restriction_reason))}function pf(r,e){return r=r.replace(/[\u2640\u2642\u2764](?!\ufe0f)/g,(t,s,i)=>{if(e){const n=t.length;s+=n,e.forEach(a=>{const o=a.offset+a.length;o===s?a.length+=n:o>s&&(a.offset+=n)})}return t+"️"}),r}function jm(r,e=[]){r=pf(r,e);const t=tl(r),s=no(e,t);return{message:r,entities:e,myEntities:t,totalEntities:s}}function jc(r){const{message:e,entities:t,myEntities:s}=jm(r.text,r.entities),i=no(t,s.filter(n=>n._==="messageEntityCustomEmoji"||n._==="messageEntityEmoji"));return{_:"textWithEntities",text:e,entities:i}}async function vP(r){return{cached:r.cached,result:r.cached?await r.result:r.result}}function uo(r){return r.then(vP)}const[bP,wP]=Ku({}),Bw=r=>{I.managers.appProfileManager.getProfileByPeerId(r).then(e=>{wP(r,Cc(e))})};I.addEventListener("peer_full_update",Bw);function Nw(r){return $(()=>{if(!r())return;const e=bP[r()];return e||Bw(r()),e})}let mh,Kp;function Ow(r){mh||(mh=new Worker(new URL(""+new URL("tinyld.worker-sOiVgKBT.js",import.meta.url).href,import.meta.url),{type:"module"}),mh.addEventListener("message",t=>{const{lang:s}=t.data;Kp.shift().resolve(s)}),Kp=[]);const e=kt();return Kp.push(e),mh.postMessage({text:r}),e}const SP=8,CP=.65;let Sr,pa,qm,Ju=()=>{Ju=void 0,[Sr,pa]=Ku({}),Nt(()=>{const[r]=Rl();qm=$(()=>new Set(r.translations.doNotTranslate.concat(navigator.language.split("-")[0],xe.langCodeNormalized()))),me($s(qm,e=>Zn(()=>{for(const t in Sr){const s=Sr[t];if(!s)continue;let i=0;for(const n in s.languages)e.has(n)||(i+=s.languages[n]);pa(t.toPeerId(),"totalForeign",i)}}),{defer:!0}))})};function Uw(){return{messages:{},languages:{},language:void 0,total:0,totalForeign:0}}function IP(r){Ju?.(),It(()=>Sr[r])||pa(r,Uw()),pa(r,"isFull",!0)}async function LP(r,e){if(Ju?.(),Sr[r]&&Sr[r].messages[e])return;const s=be.getMessageByPeer(r,e).message;if(!s)return;const i=await Ow(s),n=!qm().has(i);Zn(()=>{let a=It(()=>Sr[r]);if(!a)pa(r,a=Uw());else if(a.messages[e])return;const o=(a.languages[i]??0)+1,l=a.total+1,c=a.totalForeign+(n?1:0);pa(r,"messages",e,i),pa(r,"languages",i,o),pa(r,"total",l),n&&pa(r,"totalForeign",c);const d=a.language;(a.languages[d]||0){const t=r();if(!t)return;Ju?.();const s=Sr[t];if(!(s&&s.total{const t=r();let s=jp.get(t);return s||(s={count:0,factory:e},s.value=Nt(i=>(s.dispose=i,e())),jp.set(t,s)),++s.count,rt(()=>{--s.count||(s.dispose(),jp.delete(t))}),s.value})}const[MP,Hw]=Nt(()=>te(I.premium)),jy=()=>{I.managers.rootScope.getPremium().then(Hw)};I.addEventListener("premium_toggle",Hw);I.myId?jy():I.addEventListener("user_auth",jy);function ep(){return MP}function _P(r){const[e,t]=Rl(),s=Nw(()=>r),i=PP(()=>r),n=ep(),a=$(()=>{if(!(!n()||!s()||!i()||!e.translations.enabled))return!(s().pFlags.translations_disabled||e.translations.doNotTranslate.includes(i()))}),o={peerLanguage:i,language:()=>e.translations.peers[r]||xe.langCodeNormalized(),setLanguage:l=>t("translations","peers",r,l),enabled:$(()=>!!(n()&&e.translations.enabled&&e.translations.enabledPeers[r])&&a()),toggle:l=>t("translations","enabledPeers",r,l?!0:void 0),shouldShow:a};return me(()=>{o.shouldShow()===!1&&o.enabled()&&o.toggle(!1)}),o}function Sl(r){return $w(()=>Sl.name+"-"+r,()=>_P(r))()}function ai(){const r=Rt();return rt(()=>r.destroy()),r}const EP=!1;function Vw(r){const e=EP,[t,s]=te(!e),i=$(f=>f||t()),[n,a]=te(),o=Sl(r.peerId),l=kt();let c=r.textWithEntities,d=!0,h=!1;const u=r.enabled,p=r.container??document.createElement("span");p.classList.add("translatable-message"),r.message&&(LP(r.peerId,r.message.mid),c={_:"textWithEntities",text:r.message.message,entities:r.message.totalEntities}),r.richTextOptions?.loadPromises&&r.richTextOptions.loadPromises.push(l);const m=(f,y)=>uo(I.managers.acknowledged.appTranslationsManager.translateText({...r.message?{peerId:r.message.peerId,mid:r.message.mid}:{text:r.textWithEntities},lang:f,onlyCache:y})),g=f=>{a(c),p.classList.toggle("text-loading",!!f)};if(r.observer&&r.observeElement&&e){const f=y=>{s(y.isIntersecting)};r.observer.observe(r.observeElement,f),rt(()=>{r.observer.unobserve(r.observeElement,f)})}return me(async()=>{const f=ai().get(),y=d;if(d=!1,!o.enabled()&&!r.enabled||!i()&&!y){g();return}const v=await m(o.language(),y&&e);if(!f())return;if(!v.cached)u?p.classList.add("text-loading"):g(!0);else if(!v.result){g();return}const b=await v.result;if(f()){if(!b){g();return}a(b)}}),me(()=>{let f=n();if(!f)return;r.onTextWithEntities&&(f=r.onTextWithEntities(f)),(c!==f||!r.message)&&(f=jc(f));const y=ai().get(),v=[],b=as(f.text,{...r.richTextOptions||{},loadPromises:v,entities:f.entities});Promise.all(v).then(()=>{if(!y())return;const w=()=>{y()&&(l.resolve(),p.replaceChildren(b),(h||u)&&p.classList.remove("text-loading"),h=!0)};if(h&&r.onTranslation){r.onTranslation(w);return}w()})}),p}function Ud(r){return Nt(e=>(r.middleware.onDestroy(e),Vw(r)))}async function Qm(r){try{return await kP(r)}catch(e){return console.error("wrapMessageActionTextNewUnsafe error:",e),r.plain?"":document.createElement("span")}}async function Cr(r){r.text??(r.text=r.message.message),!r.plain&&r.highlightWord&&(r.highlightWord=r.highlightWord.trim());const{message:e,usingMids:t,plain:s,highlightWord:i,withoutMediaType:n}=r,a=[];let o=!1;const l=(m,g,f)=>{if(m){if(g===void 0&&o)return;g=s?xe.format(m,!0,f):L(m,f)}if(s)a.push(g);else{const y=document.createElement("span");typeof g=="string"?y.innerHTML=g:y.append(g),a.push(y)}},d=I.managers.appMessagesManager,h=Dw(e),u={...r,noLinebreaks:!0,noLinks:!0,noTextFormat:!0};let p=e.totalEntities??e.entities;if(e.media&&!h){let m=!0;if(e.grouped_id){if(t){const y=await d.getMidsByMessage(e);if(t.length===y.length){for(const v of y)if(!t.includes(v)){m=!1;break}}else m=!1}if(m){const y=await d.getGroupedText(e.grouped_id);r.text=y?.message||"",p=y?.totalEntities||[],n||(l("AttachAlbum"),o=!0)}}else m=!1;let g=1;if(!m&&!n||!r.text){const y=e.media;switch(y?._){case"messageMediaPhoto":l("AttachPhoto");break;case"messageMediaDice":l(void 0,s?y.emoticon:_e(y.emoticon));break;case"messageMediaVenue":{r.text=y.title,l("AttachLocation");break}case"messageMediaGeo":l("AttachLocation");break;case"messageMediaGeoLive":l("AttachLiveLocation");break;case"messageMediaPoll":const v="📊 ";if(s){const b=v+y.poll.question.text;l(void 0,b)}else{const b=jc(y.poll.question),w=as(b.text,{...u,entities:b.entities});w.prepend(_e(v)),l(void 0,w)}break;case"messageMediaContact":l("AttachContact");break;case"messageMediaGame":{const b="🎮 "+y.game.title;l(void 0,s?b:_e(b));break}case"messageMediaDocument":{const b=y.document;if(b.type==="video")l("AttachVideo");else if(b.type==="voice")l("AttachAudio");else if(b.type==="gif")l("AttachGif");else if(b.type==="round")l("AttachRound");else if(b.type==="sticker"){const w=a.length;if(b.stickerEmojiRaw){const C=b.stickerEmojiRaw+" ";l(void 0,s?C:_e(C))}l("AttachSticker");const S=a.splice(w,2);if(s)a.push(S[0]+(S[1]?S[1]:""));else{const C=window.document.createElement("span");C.append(...S),a.push(C)}r.text=""}else if(b.type==="audio"){const w=b.attributes.find(C=>C._==="documentAttributeAudio"&&(C.title||C.performer)),S="🎵 "+(w?[w.title,w.performer].filter(Boolean).join(" - "):b.file_name);l(void 0,s?S:_e(S))}else l(void 0,s?b.file_name:_e(b.file_name));break}case"messageMediaInvoice":{y.extended_media?._==="messageExtendedMediaPreview"?l(void 0,s?y.description:_e(y.description)):l(void 0,s?y.title:_e(y.title));break}case"messageMediaUnsupported":{l(Fm);break}case"messageMediaStory":{if(y.pFlags.via_mention){const b=Ze(y.peer),w=b===I.myId;l(w?"StoryMentionYou":"StoryMention",void 0,[await Re({peerId:w?e.peerId:b,plainText:s})])}else l("Story");break}case"inputMediaWebPage":case"messageMediaPhotoExternal":case"messageMediaDocumentExternal":case"messageMediaWebPage":break;case"messageMediaGiveaway":{const b=ew(new Date(y.until_date*1e3));l("Giveaway.ToBeSelectedFull",void 0,[L("Giveaway.ToBeSelected",[y.quantity,s?b.textContent:b])]);break}case"messageMediaGiveawayResults":{const{langPackKey:b,args:w}=zw(y,s);l(b,void 0,w);break}case"messageMediaPaidMedia":{const b=y.extended_media,[w,S]=wl(b,M=>M._==="messageExtendedMediaPreview"?M.video_duration===void 0:M.media._==="messageMediaPhoto");s||(g+=2,l(void 0,Pe("star","xtr-icon")),l(void 0," "));const C=w.length+S.length;if(C<2){l(w.length?"AttachPhoto":"AttachVideo");break}l(w.length&&S.length?"Media":w.length?"Photos":"Videos",void 0,[C]);break}default:l(Fm),r.text="";break}}const f=a.length;for(;g({...g,text:za(g.text,100)})}):(m=as(r.text,{...u,entities:p}),m=Od(m)),a.push(m)}if(s)return a.join("");{const m=document.createDocumentFragment();return m.append(...a),m}}function au(r){return r._==="payments.checkedGiftCode"?!r.from_id:(r.amount||r.crypto_amount)!==void 0}async function qy(r){const e=await Cr(r);if(r.plain)return e;const t=document.createElement("i");return t.dataset.savedFrom=r.message.peerId+"_"+r.message.mid,t.append(e),Ya(t),t}function gc(r,e){return e?r:cf(_e(r))}async function tp(r){const e=r.topic;let t=e?.icon_emoji_id;return e?.id===Rd&&(t="5390854796011906616"),t?r.plain?I.managers.appEmojiManager.getCustomEmojiDocument(t).then(s=>s.stickerEmojiRaw):mP({...r,docIds:[t]}).then(s=>(s.lastElementChild.classList.add("topic-icon"),s)):r.plain?"":pP(e?.icon_color,e?.title)}function Gw(r){const e=r.message.action;return tp({...r,topic:e})}async function Qy(r){const e=r.message.action,t=document.createElement("span");return t.classList.add("topic-name"),t.append(await Gw(r),gc(e.title,r.plain)),t}function zw(r,e){let t="Giveaway.Results",s=[r.winners_count];const i=(n,a)=>{s=[e?xe.format(t,!0,s):L(t,s)],t="Giveaway.Results.Combined",s.push(e?xe.format(n,!0,a):L(n,a))};return r.winners_count?r.unclaimed_count&&i("Giveaway.Results.Unclaimed",[r.unclaimed_count]):(t=r.pFlags.stars?"Giveaway.Results.NoWinners.Stars":"Giveaway.Results.NoWinners",s=[r.unclaimed_count]),{langPackKey:t,args:s}}async function kP(r){const{plain:e,message:t,noLinks:s}=r,i=e?void 0:document.createElement("span"),n="action"in t&&t.action;if(n.message){const a=n.message;return e?To(a):(At(i,as(a,{noLinebreaks:!0})),i)}else{let a=n._,o,l;const c=I.managers,d=(p,m)=>m?$a({peerId:p,plainText:m}):Re({peerId:p}),h=async(p,m)=>{if(p.length===1)return d(p[0],m);const g=vi(await Promise.all(p.map(f=>d(f,m))),!1,m);if(m)return Array.isArray(g)?g.join(""):g;{const f=document.createElement("span");return f.append(...g),l.push(f),f}};switch(n._){case"messageActionPhoneCall":{a+="."+n.type,l=[Bh(n.duration,e)];break}case"messageActionGroupCall":{a+="."+n.type,l=[],!a.endsWith("You")&&!t.pFlags.post&&l.push(d(t.fromId,e)),n.duration!==void 0?l.push(Bh(n.duration,e)):s?l.push(""):l.push(Ky(t));break}case"messageActionInviteToGroupCall":{const p=[t.fromId,n.users[0].toPeerId()];let m="Chat.Service.VoiceChatInvitation";const g=I.myId;p[0]===g?m+="ByYou":p[1]===g&&(m+="ForYou"),ms(p,g),o=m,l=p.map(f=>d(f,e)),l.push(s?"":Ky(t));break}case"messageActionGroupCallScheduled":{const p=new Date,m=new Date(n.schedule_date*1e3),g=(m.getTime()-p.getTime())/864e5,f=new Date(p);f.setDate(f.getDate()+1);const y=await c.appPeersManager.isBroadcast(t.peerId);o=y?"ChatList.Service.VoiceChatScheduled.Channel":"ChatList.Service.VoiceChatScheduled",l=[];const v=I.myId;t.fromId===v?o+="You":y||l.push(d(t.fromId,e));let b;const w=[];g<1&&m.getDate()===p.getDate()?b="TodayAtFormattedWithToday":g<2&&m.getDate()===f.getDate()?b="Time.TomorrowAt":(b="formatDateAtTime",w.push(new xe.IntlDateElement({date:m,options:{day:"2-digit",month:"2-digit",year:"2-digit"}}).element)),w.push(Xg(m));const S=L(b,w);l.push(S);break}case"messageActionChatCreate":{const p=I.myId;t.fromId===p?a+="You":l=[d(t.fromId,e)];break}case"messageActionPinMessage":{const p=t.peerId,m=await c.appMessagesManager.getMessageByPeer(p,t.reply_to_mid);l=[d(t.fromId,e)],m?l.push(qy({...r,message:m})):(o="ActionPinnedNoText",t.reply_to_mid&&c.appMessagesManager.fetchMessageReplyTo(t));break}case"messageActionChatJoinedByRequest":{const p=await c.appPeersManager.isBroadcast(t.peerId);t.pFlags.out?o=p?"RequestToJoinChannelApproved":"RequestToJoinGroupApproved":(o=p?"ChatService.UserJoinedChannelByRequest":"ChatService.UserJoinedGroupByRequest",l=[d(t.fromId,e)]);break}case"messageActionGiveawayLaunch":{o=n.stars?"BoostingStarsGiveawayJustStarted":"BoostingGiveawayJustStarted",l=[d(t.fromId,e)],n.stars&&l.unshift(+n.stars);break}case"messageActionContactSignUp":case"messageActionChatReturn":case"messageActionChatLeave":case"messageActionChatJoined":case"messageActionChatEditPhoto":case"messageActionChatDeletePhoto":case"messageActionChatEditVideo":case"messageActionChatJoinedByLink":case"messageActionChannelEditVideo":case"messageActionChannelDeletePhoto":{l=[d(t.fromId,e)];break}case"messageActionChannelEditTitle":case"messageActionChatEditTitle":{l=[],n._==="messageActionChatEditTitle"&&l.push(d(t.fromId,e)),l.push(gc(n.title,e));break}case"messageActionChatDeleteUser":case"messageActionChatAddUsers":case"messageActionChatAddUser":{const p=n.users||[n.user_id];l=[d(t.fromId,e)];const m=p.map(g=>g.toPeerId(!1));l.push(h(m,e));break}case"messageActionBotAllowed":{if(n.pFlags?.attach_menu){o="ActionAttachMenuBotAllowed";break}else if(n.pFlags?.from_request){o="ActionBotAllowedRequest";break}else if(!n.domain)break;const p=as(n.domain,{entities:[{_:"messageEntityUrl",length:n.domain.length,offset:0}],noLinks:s});l=[cf(p)];break}case"messageActionPaymentSent":{const p=n.pFlags.recurring_init,m=n.pFlags.recurring_used;if(o=m?"Chat.Service.PaymentSentRecurringUsedNoTitle":p?"Chat.Service.PaymentSentRecurringInitNoTitle":"Chat.Service.PaymentSent1NoTitle",l=[Qi(n.total_amount,n.currency,void 0,void 0,e),d(t.peerId,e)],t.reply_to_mid){const f=t.reply_to,y=await c.appMessagesManager.getMessageByPeer(f?.reply_to_peer_id?Ze(f.reply_to_peer_id):t.peerId,t.reply_to_mid);y?(o=m?"Chat.Service.PaymentSentRecurringUsed":p?"Chat.Service.PaymentSentRecurringInit":"Chat.Service.PaymentSent1",l.push(qy({...r,message:y}).then(v=>(v instanceof HTMLElement&&v.classList.add("is-receipt-link"),v)))):c.appMessagesManager.fetchMessageReplyTo(t)}break}case"messageActionPaymentRefunded":{const p=Qi(n.total_amount,n.currency,void 0,void 0,e);l=[d(t.fromId,e),p],o="Chat.Service.Refund";break}case"messageActionSetMessagesTTL":{l=[];const p=await c.appPeersManager.isBroadcast(t.peerId);if(n.period){p?o="ActionTTLChannelChanged":t.fromId===I.myId?o="ActionTTLYouChanged":(o="ActionTTLChanged",l.push(d(t.fromId,e)));let m;if(n.period>1814400){let g;const f=[];n.period>=31536e3?(g="Years",f.push(n.period/31536e3|0)):(g="Months",f.push(n.period/(Yg*30)|0)),m=e?xe.format(g,!0,f):L(g,f)}else m=Bh(n.period,e);l.push(m)}else p?o="ActionTTLChannelDisabled":t.fromId===I.myId?o="ActionTTLYouDisabled":(o="ActionTTLDisabled",l.push(d(t.fromId,e)));break}case"messageActionTopicEdit":{let p,m,g;const f=!!t.pFlags.out,y=n.icon_emoji_id!==void 0,v=y&&!+n.icon_emoji_id,b=n.title!==void 0,w=n.hidden!==void 0;f||(g=d(t.fromId,e)),b&&(m=gc(n.title,e)),y&&!v&&(p=Gw(r)),l=g?[g]:[],n.closed?o=f?"Chat.Service.Group.TopicEdited.You.Paused":"Chat.Service.Group.TopicEdited.Paused":n.closed===!1?o=f?"Chat.Service.Group.TopicEdited.You.Resumed":"Chat.Service.Group.TopicEdited.Resumed":v&&b?(o=f?"Chat.Service.TopicEdited.You.Mixed.IconRemoved":"Chat.Service.TopicEdited.Mixed.IconRemoved",l.push(m)):y&&b?(o=f?"Chat.Service.TopicEdited.You.Mixed":"Chat.Service.TopicEdited.Mixed",l.push(Qy(r))):v?o=f?"Chat.Service.Group.TopicEdited.You.Icon.Removed":"Chat.Service.Group.TopicEdited.Icon.Removed":b?(o=f?"Chat.Service.Group.TopicEdited.You.Title":"Chat.Service.Group.TopicEdited.Title",l.push(m)):y?(o=f?"Chat.Service.Group.TopicEdited.You.Icon":"Chat.Service.Group.TopicEdited.Icon",l.push(p)):w&&(o=f?n.hidden?"Chat.Service.Group.TopicEdited.You.Hided":"Chat.Service.Group.TopicEdited.You.Unhided":n.hidden?"Chat.Service.Group.TopicEdited.Hided":"Chat.Service.Group.TopicEdited.Unhided");break}case"messageActionTopicCreate":{l=[Qy(r)],o="TopicWasCreatedAction";break}case"messageActionSetChatTheme":{const p=!!t.pFlags.out;let m;p||(m=d(t.fromId,e)),l=m?[m]:[],n.emoticon?(l.push(gc(n.emoticon,e)),o=p?"ChatThemeChangedYou":"ChatThemeChangedTo"):o=p?"ChatThemeDisabledYou":"ChatThemeDisabled";break}case"messageActionPrizeStars":{o="BoostingReceivedGiftNoName";break}case"messageActionGiftStars":case"messageActionGiftCode":case"messageActionGiftPremium":{const p=n._==="messageActionGiftCode";if(p&&!au(n)){o="BoostingReceivedGiftNoName",n.boost_peer&&(o="BoostingReceivedGiftFrom",l=[d(Ze(n.boost_peer),e)]);break}const m=!!t.pFlags.out&&!p;let g;m||(g=d(t.fromId,e)),l=g?[g]:[],l.push(Qi(n.amount,n.currency,!1,!0,e)),o=m?"ActionGiftOutbound":"ActionGiftInbound";break}case"messageActionWebViewDataSent":{o="ActionBotWebViewData",l=[gc(n.text,e)];break}case"messageActionRequestedPeer":{o="Chat.Service.PeerRequested",l=[h(n.peers.map(p=>Ze(p)),e),d(t.peerId,e)];break}case"messageActionGiveawayResults":{const p=zw(n,e);o=p.langPackKey,l=p.args;break}case"messageActionSetChatWallPaper":{const p=t.peerId.isUser();if(l=[d(p?t.peerId:t.fromId,e)],p){t.pFlags.out?o=n.pFlags.for_both?"ActionSetWallpaperForThisChatSelfBoth":n.pFlags.same?"ActionSetSameWallpaperForThisChatSelf":"ActionSetWallpaperForThisChatSelf":o=n.pFlags.for_both?"ActionSetWallpaperForThisChatBoth":n.pFlags.same?"ActionSetSameWallpaperForThisChat":"ActionSetWallpaperForThisChat";break}if(await c.appPeersManager.isBroadcast(t.peerId)){o="ActionSetWallpaperForThisChannel";break}o=t.fromId===t.peerId?"ActionSetWallpaperForThisGroup":"ActionSetWallpaperForThisGroupByUser";break}default:o=Xh[a]||`[${n._}]`;break}o||(o=Xh[a],o===void 0&&(o="["+a+"]"));const u=l&&await Promise.all(l);return e?xe.format(o,!0,u):ls(i,o,u)}}const Ww=new WeakMap;I.addEventListener("peer_title_edit",({peerId:r,threadId:e})=>{let t=`.peer-title[data-peer-id="${r}"]`;e&&(t+=`[data-thread-id="${e}"]`),Array.from(document.querySelectorAll(t)).forEach(i=>{Ww.get(i)?.update()})});class Ot{constructor(e){this.element=document.createElement("span"),this.element.classList.add("peer-title"),Ya(this.element),this.options={},e&&this.update(e),Ww.set(this.element,this)}setOptions(e){if(e){_t(this.options,e);for(const t in e){const s=e[t];typeof s!="object"&&typeof s!="function"&&(this.element.dataset[t]=s?""+(typeof s=="boolean"?+s:s):"0")}}}setHasInner(e){this.hasInner!==e&&(this.hasInner=e,this.element.classList.toggle("with-icons",e))}async update(e){var a;this.setOptions(e);let t=this.options.fromName;if(t!==void 0){this.options.limitSymbols!==void 0&&(t=za(t,this.options.limitSymbols,this.options.limitSymbols)),At(this.element,_e(t));return}(a=this.options).peerId??(a.peerId=Ft);let s;const{peerId:i,threadId:n}=this.options;if(i===I.myId&&this.options.dialog){let o;this.options.meAsNotes?o=L(this.options.onlyFirstName?"MyNotesShort":"MyNotes"):o=L(this.options.onlyFirstName?"Saved":"SavedMessages"),ht(this.element,o)}else if(i===Zg)ht(this.element,L(this.options.onlyFirstName?"AuthorHiddenShort":"AuthorHidden"));else{if(n){const[h,u]=await Promise.all([I.managers.dialogsStorage.getForumTopic(i,n),I.managers.appPeersManager.isForum(i)]);if(!h&&u){I.managers.dialogsStorage.getForumTopicById(i,n).then(p=>{if(!p&&this.options.threadId===n){this.options.threadId=void 0,this.update({threadId:void 0});return}this.update()},()=>{this.options.threadId===n&&(this.options.threadId=void 0,this.update({threadId:void 0}))}),At(this.element,L("Loading")),this.setHasInner(!1);return}}const o=n&&this.options.withIcons?I.managers.dialogsStorage.getForumTopic(i,n).then(h=>tp({...this.options.wrapOptions??{},topic:h})):void 0,[l,c,d]=await Promise.all([$a(this.options),this.options.withIcons&&Km({peerId:i,wrapOptions:this.options.wrapOptions})||this.options.withPremiumIcon&&Km({peerId:i,wrapOptions:this.options.wrapOptions,noVerifiedIcon:!0,noFakeIcon:!0}),o]);if(c?.length||d){const h=document.createElement("span");h.classList.add("peer-title-inner"),s=!0,At(h,l);const u=document.createDocumentFragment();u.append(...[d,h,...c??[]].filter(Boolean)),At(this.element,u)}else At(this.element,l)}this.setHasInner(s)}}function Kw(r,e){const t=r.querySelector(".emoji-status-text-color"),s=t&&xs.getAnimation(t);s&&s.setColor(e,!0)}async function Re(r){const e=new Ot;return await e.update(r),e.element}const qc=[["#CC5049"],["#D67722"],["#955CDB"],["#40A920"],["#309EBA"],["#368AD1"],["#C7508B"]],qp=["red","orange","violet","green","cyan","blue","pink"],TP=qc;function jw(r){return Math.abs(+r)%7}function Ym(r){let e=sp(r);if(e===-1)return;let t=qp[e];if(!t){const s=qc[e];if(!s)return qp[jw(r.id)];const n=Qg(s[0]).h;n>=345||n<29?e=0:n<67?e=1:n<140?e=3:n<199?e=4:n<234?e=5:n<301?e=2:e=6,t=qp[e]}return t}function sp(r){return r?r.color?.color??jw(r.id):-1}function mf(r){const e=sp(r);return qc[e]??[]}function Yy(r,e,t){for(const s of e){const n=(t?s.dark_colors:s.colors)?.colors;if(!n?.length)continue;const a=n.map(o=>tw(o));r[s.color_id]=a}return r}function Xy(r,e){const t=r.length;return e||(e=5),t!==3&&(r=r.slice().reverse()),`repeating-linear-gradient(-45deg, ${r.map((i,n,a)=>{const o=n*e+"px",l=(n+1)*e+"px";return[`${i} ${o}`,`${i} ${l}`].join(", ")}).join(", ")})`}function xP(r,e){let t=Yy(TP.slice(),r);hs.isNight()&&(t=Yy(t,r,!0)),qc.splice(0,qc.length,...t),t.forEach((n,a)=>{const o=`--peer-${a}`,l=`${o}-border-background`,c=`${o}-color-rgb`;if(document.documentElement.style.setProperty(c,An(n[0]).join(",")),n.length>1){const d=Xy(n);document.documentElement.style.setProperty(l,d)}else document.documentElement.style.removeProperty(l)});const s=mf(e);[["--peer-border-background","--primary-color",s.length],["--message-out-peer-border-background","--message-out-primary-color",s.length],["--message-out-peer-1-border-background","--message-out-primary-color",1],["--message-out-peer-2-border-background","--message-out-primary-color",2],["--message-out-peer-3-border-background","--message-out-primary-color",3],["--message-empty-peer-1-border-background","--message-empty-primary-color",1],["--message-empty-peer-2-border-background","--message-empty-primary-color",2],["--message-empty-peer-3-border-background","--message-empty-primary-color",3]].forEach(([n,a,o])=>{let l;if(o>1){const c=[`rgba(var(${a}-rgb), .4)`,`rgba(var(${a}-rgb), .2)`,`var(${a})`];o===2&&c.shift(),l=Xy(c)}else l=`var(${a})`;document.documentElement.style.setProperty(n,l)})}function AP(r){const e=r?.restriction_reason;return!!(e&&r.pFlags.restricted&&Rw(e))}function FP(r){if(!(!r||AP(r)))return r?.photo}function RP(r){let e="";return r&&(e=r.title??[r.first_name,r.last_name].filter(Boolean).join(" ")),Zu(e)}function Ge(...r){return r.filter(Boolean).join(" ")}function ao(r){const e=new Array(r.childNodes.length);let t=r.firstChild,s=0;for(;t;)e[s++]=t.nodeType===t.TEXT_NODE?t.nodeValue:t,t=t.nextSibling;return e}class DP{constructor(){this.canvas=document.createElement("canvas"),this.context=this.canvas.getContext("2d"),this.dpr=window.devicePixelRatio}prepare(e){this.canvas.width=this.width=e.width*this.dpr,this.canvas.height=this.height=e.height*this.dpr,this.centerX=this.width/2,this.centerY=this.height/2,this.radius=e.radius*this.dpr,this.gapLength=e.gap*this.dpr,this.totalLength=Math.PI*this.radius*2,this.startAngle=-1.5}render(e){this.context.clearRect(0,0,this.width,this.height);const t=e.reduce((n,a)=>n+a.length,0),s=e.length;this.context.lineCap="round",e.length===1&&e[0].length===1?this.context.setLineDash([]):this.context.setLineDash([this.totalLength/t-this.gapLength,this.gapLength]);let i=0;for(let n=0;nYh.mutateElement(r,()=>{i?.append(e),s?(o?.(),a.addEventListener("animationend",()=>{Yh.mutate(()=>{a.classList.remove("fade-in"),n?.remove(),r.classList.add("no-background"),l?.()})},{once:!0})):(n?.remove(),r.classList.add("no-background"),o?.(),l?.())}))}const gh=Symbol("RAF"),Qp=Symbol("TIMEOUT"),Lt=r=>{const{element:e,className:t,forwards:s,duration:i,onTransitionEnd:n,onTransitionStart:a,useRafs:o}=r,l=t&&t.split(" "),c=e[Qp],d=e[gh];if(c!==void 0&&clearTimeout(+c),d!==void 0&&(window.cancelAnimationFrame(+d),o||delete e[gh]),o&&st.isAvailable("animations")&&i){e[gh]=""+window.requestAnimationFrame(()=>{delete e[gh],Lt({...r,useRafs:o-1})});return}s&&t&&e.classList.add(...l);const h=()=>{delete e[Qp],!s&&t&&e.classList.remove("backwards",...l),e.classList.remove("animating"),n?.()};if(a?.(),!st.isAvailable("animations")||!i){e.classList.remove("animating","backwards"),h();return}e.classList.add("animating"),e.classList.toggle("backwards",!s),e[Qp]=""+setTimeout(h,i)},Yp=200;class on{constructor(e){this.tempId=0,this.detached=!0,this.promise=null,this.isUpload=!1,this.cancelable=!0,this.streamable=!1,this.rtmp=!1,this.tryAgainOnFail=!0,this.attachMethod="append",this.onClick=t=>{t&&oe(t),this.preloader.classList.contains("manual")?this.loadFunc?.(t):this.promise?.cancel?.()},e&&_t(this,e),this.isUpload&&(this.tryAgainOnFail=!1)}constructContainer(e={}){this.preloader||(this.preloader=document.createElement("div"),this.rtmp?this.preloader.classList.add("preloader-container-rtmp"):this.preloader.classList.add("preloader-container"),e.color&&this.preloader.classList.add("preloader-"+e.color),e.bold&&this.preloader.classList.add("preloader-bold"),this.streamable&&this.preloader.classList.add("preloader-streamable"))}constructDownloadIcon(){this.constructContainer()}construct(){this.construct=null,this.constructContainer(),this.rtmp?this.preloader.innerHTML=`
@@ -27,17 +27,17 @@ var U0=Object.defineProperty;var $0=(o,e,t)=>e in o?U0(o,e,{enumerable:!0,config - `,this.downloadSvg=this.preloader.lastElementChild,this.cancelSvg=this.downloadSvg.previousElementSibling):this.preloader.classList.add("preloader-swing"),this.circle=this.preloader.firstElementChild.firstElementChild.firstElementChild,this.cancelable&&O(this.preloader,this.onClick)}setDownloadFunction(e){this.loadFunc=e}setManual(){this.preloader.classList.add("manual"),this.setProgress(0)}attachPromise(e){if(this.isUpload&&this.promise)return;this.promise=e;const t=--this.tempId,s=Date.now(),i=n=>{if(e.notify=e.notifyAll=null,t!==this.tempId)return;const a=Date.now()-s;if(!n&&this.cancelable){this.setProgress(100);const r=Yp*.75;a{t===this.tempId&&this.detach()},r)}else this.tryAgainOnFail?(this.attach(this.preloader.parentElement),_s(()=>{this.setManual()})):this.detach();this.promise=e=null};e.then(()=>i(null)).catch(n=>i(n)),e.addNotifyListener?.(n=>{if(t!==this.tempId)return;const a=n.done/n.total*100;this.setProgress(a)})}attach(e,t=!1,s){if(!this.detached&&(!this.preloader||!this.preloader.classList.contains("manual")))return;this.construct?.(),this.preloader.parentElement&&this.preloader.classList.remove("manual"),this.detached=!1,s&&this.attachPromise(s);let i=0;(this.detached||this.preloader.parentElement!==e)&&(i=fa(this.preloader)?1:2,this.preloader.parentElement!==e&&e[this.attachMethod](this.preloader)),Lt({element:this.preloader,className:"is-visible",forwards:!0,duration:Yp,useRafs:i}),this.cancelable&&t&&this.setProgress(0)}detach(){this.detached||(this.detached=!0,this.preloader?.parentElement&&Lt({element:this.preloader,className:"is-visible",forwards:!1,duration:Yp,onTransitionEnd:()=>{this.preloader.remove()},useRafs:1}))}setProgress(e){if(!(!this.totalLength&&!fa(this.circle))){if(e===0){this.circle.style.strokeDasharray="";return}try{this.totalLength||(this.totalLength=this.circle.getTotalLength()),this.circle.style.strokeDasharray=""+Math.max(5,e/100*this.totalLength)+", "+this.totalLength}catch{}}}}function Qc({photo:o,cacheContext:e,useBlur:t,ignoreCache:s,onlyStripped:i}){const n=["video","gif"].includes(o.type);if(!e.downloaded||n||s){if(o._==="document"&&e.downloaded&&!s&&(!n||e.type!==Jg))return null;const a=o.sizes||o.thumbs,r=a?.length;if(!r)return null;let l=-1;if(!i)for(let d=r-1;d>=0;--d){const h=a[d];if(h.type===e.type)l=d;else if(l){const u=be.getCacheContext(o,h.type);if(u.downloaded)return Gm(o,h,!1,u.url)}}const c=a.find(d=>d._==="photoStrippedSize");if(c&&"bytes"in c)return Gm(o,c,t)}return null}const Xm=320,BP=120,NP=200,OP=368;function sl({photo:o,element:e,boxWidth:t,boxHeight:s,noZoom:i=!0,message:n,pushDocumentSize:a,photoSize:r,size:l,canHaveVideoPlayer:c}){const d=yw(o);!r&&!l&&(r=Ln(o,t,s,void 0,a));const h=o?._==="document";l||(h||d?l=Ms(o.w||r.w||512,o.h||r.h||512):l=Ms(r.w||100,r.h||100));let u=Ms(t,s);u=l=l.aspect(u,i);let p=!0;if(!h||["video","gif"].includes(o.type)||d){const m=NP;u.width{const ge=F&&!c;return ps.downloadMediaURL({media:o,thumb:c,queueId:r&&r.queueId,onlyCache:ge?void 0:$})},Y=ge=>qw({container:t,media:q,url:ge,needFadeIn:K,aspecter:R,thumbImage:D,fadeInElement:w,onRender:b,onRenderFinish:S,useRenderCache:M}),Z=async ge=>{if(!(l&&!l())){if(y&&(ge=await y(ge)),f){const Fe=vw(ge,12);return Fe.promise.then(()=>Y(Fe.canvas.toDataURL()))}return Y(ge)}};let X;const ce=!k&&c.w>=150&&c.h>=150||$,ne=async()=>{$&&!d&&j&&(j.construct(),j.setManual());const ge=G(),Fe=be.getCacheContext(o,c?.type);j&&!Fe.downloaded&&!d&&ce&&j.attach(t,!1,ge),$=void 0;const de=ge.then(Z);return de.catch(es),{download:ge,render:de}};return j&&j.setDownloadFunction(ne),N.downloaded?W=X=(await ne()).render:r?r.push({div:t,load:()=>ne().then(({download:ge})=>ge)}):X=(await ne()).render,h&&W&&h.push(W),E.loadPromises.thumb=W,E.loadPromises.full=X||Promise.resolve(),E.preloader=j,E}function Pn(o){return(e,t,s)=>{o.addEventListener(e,t,s),rt(()=>{o.removeEventListener(e,t,s)})}}function ip(){const[o,e]=te(hs.isNight());return Pn(I)("theme_changed",()=>{e(hs.isNight())}),o}const UP=re('',!1,!0),$P=re('');function Zy(o){return(()=>{const e=UP();return Te(()=>yi(e,"class",o.stroke&&"currency-star-icon-stroke")),e})()}function gf(o={}){return(()=>{const e=$P(),t=e.firstChild;return A(e,(()=>{const s=H(()=>!!o.stroke);return()=>s()&&V(Zy,{stroke:!0})})(),t),A(e,V(Zy,{}),t),Te(()=>yi(e,"class","currency-star-icon "+o.class)),e})()}const HP=re("
"),VP=re("
"),GP=re("
"),zP=re("
"),WP=200,qo=new Map,Bo=new Map,Xp=new Set;function ff(o,e){return o+(e?"_"+e:"")}const Qw=({peerId:o,threadId:e})=>{const t=ff(o,e),s=qo.get(t);if(s?.size)for(const i of s)i.render()},np=({peerId:o})=>{const e=ff(o),t=qo.get(e);if(t?.size)for(const s of t)s.updateStoriesSegments()};I.addEventListener("avatar_update",Qw);I.addEventListener("peer_title_edit",async o=>{await I.managers.appAvatarsManager.isAvatarCached(o.peerId)||Qw(o)});I.addEventListener("peer_stories",({peerId:o})=>{np({peerId:o})});I.addEventListener("stories_read",np);I.addEventListener("story_deleted",np);I.addEventListener("story_new",np);const Jy=async(o,e)=>{if(e){const s=[{length:1,type:await I.managers.appStoriesManager.getUnreadType(o,e)}];return{cached:!0,result:Promise.resolve(s)}}return I.managers.acknowledged.appStoriesManager.getPeerStoriesSegments(o)},KP=(o,e,t)=>{const s=o.createLinearGradient(e*.9156*t,e*-.05695821429*t,e*.1342364286*t,e*1.02370714286*t);return s.addColorStop(0,ks.getProperty("avatar-color-story-unread-from")),s.addColorStop(1,ks.getProperty("avatar-color-story-unread-to")),s},jP=(o,e,t)=>{const s=o.createLinearGradient(e*.5*t,e*0*t,e*.5*t,e*1*t);return s.addColorStop(0,ks.getProperty("avatar-color-story-close-from")),s.addColorStop(1,ks.getProperty("avatar-color-story-close-to")),s};function Yc(o){let e=z(o,"avatar");return e&&(e=z(e,"has-stories")||e),e}const qP=o=>{const e=Math.round(o*.8888888888888888),t=o*(1+2/54),s=o/54,i=2*s;return{size:o,willBeSize:e,totalSvgSize:t,multiplier:s,strokeWidth:i}};function Yw(o,e,t=100,s){return Zs({container:o.node,message:null,photo:e,boxHeight:t,boxWidth:t,withoutPreloader:!0,size:s}).then(i=>(o.node.classList.replace("media-container","avatar-relative"),o.node.style.width=o.node.style.height="",[i.images.thumb,i.images.full].forEach(n=>{n&&n.classList.replace("media-photo","avatar-photo")}),i.images.thumb&&i.images.thumb.classList.add("avatar-photo-thumbnail"),i.loadPromises.thumb))}function QP(o){const[e,t]=te(),s=H(n=>{if(e()!==void 0)return n?.size===o.size?n:qP(o.size)}),i=H(()=>{const n=s();if(!n)return;let a;if(o.isStoryFolded!==void 0){const f=H(()=>{const v=e();return(v.find(b=>b.type==="close")||v.find(b=>b.type==="unread")||v[0]).type});a=(()=>{const v=HP();return Te(y=>wa(v,{["is-"+f()]:!0},y)),v})()}const r=(f,v)=>f.type==="read"?{color:o.colors?.read||ks.getProperty("avatar-color-story-read"),length:f.length,lineWidth:n.strokeWidth/2}:f.type==="close"||v?{color:p??(p=jP(d,c.width,h)),length:f.length,lineWidth:n.strokeWidth}:{color:u??(u=KP(d,c.width,h)),length:f.length,lineWidth:n.strokeWidth},l=new DP,{canvas:c,context:d,dpr:h}=l;l.prepare({radius:n.size/2,gap:4*n.multiplier,width:n.totalSvgSize,height:n.totalSvgSize});let u,p;c.style.setProperty("--offset",`${(n.totalSvgSize-n.size)/-2}px`),c.classList.add("avatar-stories-svg");const m=()=>{const f=e(),v=f.find(b=>b.type==="close");let y=f.map(b=>r(b,!!v));const w=y.reduce((b,S)=>b+S.length,0);w>30&&(y=y.map(b=>({...b,length:Math.floor(b.length/w*30)})).filter(b=>b.length>0)),l.render(y)},g=ip();return me(Us([g,e],()=>{u=p=void 0,m()})),a?[c,a]:c});return{setStoriesSegments:t,storyDimensions:s,storiesCircle:i}}const Bn=o=>{const[e,t]=te(!1),[s,i]=te(),[n,a]=te(),[r,l]=te(),[c,d]=te(),[h,u]=te(),[p,m]=te(!1),[g,f]=te(!1),[v,y]=te(!1),{setStoriesSegments:w,storyDimensions:b,storiesCircle:S}=QP({size:o.size,colors:o.storyColors,isStoryFolded:o.isStoryFolded}),C=kt(),M=kt(),P=I.myId,_=I.managers,E=o.wrapOptions?.middleware?o.wrapOptions.middleware.create():Rt();let k=!1,x;rt(()=>{x=void 0,E.destroy(),C.resolve(),R(),o.lazyLoadQueue?.delete({div:ne})});const F=de=>{a(de),t(!0),C.resolve(),M.resolve()},T=de=>{l(de),t(!0),M.resolve()},$=()=>ff(o.peerId,o.threadId),R=()=>{if(!K)return;const de=Bo.get(K);de&&(de.delete(void 0),de.size||Bo.delete(K));const Q=qo.get(K);Q?.delete(Fe)&&(Q.size||qo.delete(K))},U=async de=>{const Q=E.get(),{peerId:le,useCache:Ye}=o,{photo:Ue,size:ot}=de,et=be.loadAvatar(le,Ue,ot),Pt=et,ct=!(et instanceof Promise),Qe=!ct&&st.isAvailable("animations");let Et;const Ce=Et=document.createElement("img");Ce.className=Ge("avatar-photo",Qe&&"fade-in");let ve,Le,Be,He;if(ct)Le=()=>{Q()&&F(Ce)};else{if(ot==="photo_big"){const We=await U({photo:Ue,size:"photo_small"});if(!Q())return;ve=We.loadThumbPromise||We.loadPromise,Be=We.thumbImage}else if(Ue.stripped_thumb){He=Be=document.createElement("img"),Be.className="avatar-photo avatar-photo-thumbnail";const We=$L(Ue.stripped_thumb);ve=qi(Be,We,o.useCache,o.processImageOnLoad).then(()=>{n()||!Q()||T(He)})}Le=()=>{Q()&&(F(Ce),Qe?setTimeout(()=>{Et.classList.remove("fade-in"),l()},Qe?WP:0):l())}}const tt=ci(Pt,We=>{const St=Jn(Et,We,void 0,Ye,o.processImageOnLoad);return ci(St,Le),St instanceof Promise?St:Promise.resolve(St)});return{cached:ct,loadPromise:tt,loadThumbPromise:ct?tt:ve||Promise.resolve(),thumbImage:Be,thumbElement:He,image:Et,element:Ce}},W=({abbreviature:de,icon:Q,color:le,isForum:Ye,isTopic:Ue,isSubscribed:ot,storiesSegments:et})=>{l(),a(),i(Q),d(de),u(le),m(Ye),f(Ue),y(ot),w(et)},D=async()=>{if(!o.withStories||o.peerId===I.myId&&o.isDialog)return;const de=await(await Jy(o.peerId,o.storyId)).result;x&&await(await x)?.loadThumbPromise,w(de)},N=async de=>{const Q=E.get(),{isDialog:le,withStories:Ye,storyId:Ue,isBig:ot,peerTitle:et,threadId:Pt,wrapOptions:ct}=o;let{peerId:Qe}=o;if(et!==void 0&&(Qe=Ft),Qe===P&&le){W({icon:o.meAsNotes?"mynotes":"saved",isForum:!o.meAsNotes&&$c.settings.savedAsForum}),!o.meAsNotes&&Nt(Tt=>{me(Us(()=>$c.settings.savedAsForum,m,{defer:!0})),Q.onDestroy(Tt)});return}const Et=o.peer??be.getPeer(Qe);if(et){const Tt=Ym(Et),Dt=Zu(et);W({abbreviature:ao(Dt),color:Tt});return}if(Pt){const Tt=await _.dialogsStorage.getForumTopic(Qe,Pt);return W({isTopic:!0}),tp({...ct,middleware:Q,topic:Tt,lazyLoadQueue:!1}).then(Dt=>{F(Dt)})}if(!Q())return;if(Qe!==Ft&&Qe.isUser()&&Et?.pFlags?.deleted){W({color:"archive",icon:"deletedaccount"});return}const Ce=!!Et?.pFlags?.forum,ve=o.isSubscribed??!!Et?.subscription_until_date,Le=Ye&&(Et?.stories_max_id||Ue)&&await Jy(Qe,Ue),Be=Le?.cached?await Le.result:void 0;if(!Q())return;const He=ot?"photo_big":"photo_small",tt=FP(Et),We=!!tt,St=We&&!!n(),Ut=We&&be.isAvatarCached(Qe,He);if(!Q())return;let Is=!1;if(!St&&!Ut){let Tt;if(Qe&&(Qe!==P||!le)&&(Tt=Ym(Et)),Qe===wr){W({color:Tt,icon:"reply_filled"});return}if(Qe===Zg){W({color:"violet",icon:"author_hidden"});return}const Dt=RP(Et);W({abbreviature:ao(Dt),color:Tt,isForum:Ce,isSubscribed:ve,storiesSegments:Be}),Is=!0}if(Le&&!Le.cached&&D(),We){const Tt=U({photo:tt,size:He,onlyThumb:de});if(Is)return Tt;const Dt=!!Be,As=Ce!==p(),Yi=ve!==v();return Tt.then(({loadThumbPromise:Fs})=>Fs).then(()=>{Q()&&(Dt&&w(Be),As&&m(Ce),Yi&&y(ve))}),Tt}},q=de=>(!de&&!g()&&F(),x=void 0,de);let K;const j=async de=>{const Q=$();if(Q!==K){R(),K=Q;let et=qo.get(Q);et||qo.set(Q,et=new Set),et.add(Fe)}de?.peerId!==void 0&&o.peerId!==de.peerId&&(ne.dataset.peerId=""+de.peerId),de&&Object.assign(o,de),E.clean();const le=E.get();if(o.lazyLoadQueue)if(Xp.has(o.peerId))k&&o.lazyLoadQueue.delete({div:ne});else{if(k)return;k=!0;const et=$();let Pt=Bo.get(et);Pt||Bo.set(et,Pt=new Set),Pt.add(Fe),o.lazyLoadQueue.push({div:ne,load:()=>(Xp.add(o.peerId),j())});const Qe=await(x=N(!0));return le()?q(Qe):void 0}Xp.add(o.peerId);const Ye=x=N(),Ue=Bo.get(Q);if(Ue){Ue.delete(Fe);const et=Array.from(Ue);Bo.delete(Q);for(let Pt=0,ct=et.length;Pt{o.onStoriesStatus(!!b())});const G=()=>({"is-forum":p(),"is-topic":g(),"avatar-relative":!!r()||v()}),Y=()=>({...!S()&&G(),"has-stories":!!b()}),Z=()=>{const de=b();return{padding:de?(de.size-de.willBeSize)/2+"px":void 0,"--size":g()&&o.wrapOptions.customEmojiSize.width?o.wrapOptions.customEmojiSize.width+"px":void 0}},X=[H((()=>{const de=H(()=>!!s());return()=>de()&&Pe(s(),"avatar-icon","avatar-icon-"+s())})()),H(r),H(()=>[n(),c()].find(Boolean)),H((()=>{const de=H(()=>!!v());return()=>de()&&gf({class:"avatar-star",stroke:!0})})())],ce=V(cn,{get when(){return b()},fallback:X,get children(){const de=VP(),Q=de.firstChild;return A(de,S,Q),A(de,(()=>{const le=H(()=>o.isStoryFolded!==void 0);return()=>le()&&GP()})(),Q),A(Q,X),Te(le=>{const Ye=`avatar avatar-like avatar-${b().willBeSize}`,Ue=G(),ot=h();return Ye!==le._v$&&ye(Q,le._v$=Ye),le._v$2=wa(Q,Ue,le._v$2),ot!==le._v$3&&yi(Q,"data-color",le._v$3=ot),le},{_v$:void 0,_v$2:void 0,_v$3:void 0}),de}});let ne;const Fe={element:(()=>{const de=zP(),Q=ne;return typeof Q=="function"?ft(Q,de):ne=de,Io(de,xi({get class(){return`avatar avatar-like avatar-${o.size} avatar-gradient`},get classList(){return Y()},get"data-color"(){return h()},get"data-peer-id"(){return o.peerId},get"data-story-id"(){return o.storyId},get style(){return Z()}},()=>o.props||{}),!1,!0),A(de,ce),de})(),ready:e,readyPromise:C,readyThumbPromise:M,node:ne,render:j,setIcon:i,setStoriesSegments:w,setIsSubscribed:y,updateStoriesSegments:D,set:W,color:h};return(o.peerId!==void 0||o.peerTitle!==void 0||o.peer!==void 0)&&j(),Fe};function Xt(o){return Nt(e=>(o.middleware.onDestroy(e),(o.wrapOptions??(o.wrapOptions={})).middleware=o.middleware,Bn(o)))}class Es extends se{constructor(e,t={}){if(super("popup-peer"+(e?" "+e:""),{overlayClosable:!0,...t,title:!0,buttons:t.buttons&&Mr(t.buttons)}),this.className=e,t.peerId){const i=!!(t.peerId===I.myId&&t.threadId),{node:n}=Xt({middleware:this.middlewareHelper.get(),size:32,isDialog:!0,peerId:i?t.threadId:t.peerId,threadId:i?void 0:t.threadId,meAsNotes:i});this.header.prepend(n)}t.noTitle||(t.titleLangKey||!t.title?this.title.append(L(t.titleLangKey||"AppName",t.titleLangArgs)):t.title instanceof HTMLElement||t.title instanceof DocumentFragment?this.title.append(t.title):this.title.innerText=t.title||"");const s=document.createDocumentFragment();if(t.descriptionLangKey||t.description||t.descriptionRaw){const i=this.description=document.createElement("p");i.classList.add("popup-description"),t.descriptionLangKey?i.append(L(t.descriptionLangKey,t.descriptionLangArgs)):t.description&&t.description!==!0?At(i,t.description):t.descriptionRaw&&i.append(_e(t.descriptionRaw)),s.append(i)}if(t.inputField&&s.append(t.inputField.container),t.checkboxes&&(this.container.classList.add("have-checkbox"),t.checkboxes.forEach(i=>{i.withRipple=!0;const n=new lt(i);i.checkboxField=n,s.append(n.label)}),t.buttons.forEach(i=>{if(i.callback){const a=i.callback;i.callback=r=>{const l=new Set;t.checkboxes.forEach(c=>{c.checkboxField.checked&&l.add(c.text)}),a(r,l)}}const n=i.onlyWithCheckbox;if(n){const a=()=>{qt([i.element],!n.checkboxField.checked)};this.listenerSetter.add(n.checkboxField.input)("change",a),a()}})),t.inputField){const i=t.buttons.find(n=>!n.isCancel);this.listenerSetter.add(t.inputField.input)("input",()=>{qt([i.element],!t.inputField.isValid())})}this.header.after(s)}}class ap{constructor(e,t,s,i){this.peerId=e,this.peerType=t,this.onSelect=s,this.threadId=i,this.construct()}async construct(){let{peerId:e,peerType:t,onSelect:s,threadId:i}=this;const n=await I.managers.appPeersManager.isSavedDialog(e,i),a=await Re({peerId:n?i:e,threadId:n?void 0:i,meAsNotes:n}),r=se.MANAGERS;t===void 0&&(t=await r.appPeersManager.getDialogType(e,i));const l=(f,v,y=g&&!!v.size)=>{let w=r.appChatsManager.leave(e.toChatId());y&&(w=w.then(()=>r.appMessagesManager.flushHistory(e))),s?.(w)},c=(f,v)=>{let y;if(n)y=r.appMessagesManager.flushHistory(e,!1,!0,i);else if(i)y=r.appMessagesManager.flushHistory(e,!1,!0,i);else if(e.isUser())y=r.appMessagesManager.flushHistory(e,!1,g?!!v.size:void 0);else if(v.size)y=r.appChatsManager.delete(e.toChatId());else return l(f,v);s?.(y)};let d,h,u,p,m,g;switch(t){case"channel":{await r.appChatsManager.hasRights(e.toChatId(),"delete_chat")?(d="ChannelDeleteMenu",u="AreYouSureDeleteAndExitChannel",m=[{langKey:"ChannelDeleteMenu",isDanger:!0,callback:c}],g=[{text:"DeleteChannelForAll"}]):(d="LeaveChannelMenu",u="ChannelLeaveAlertWithName",p=[a],m=[{langKey:"LeaveChannel",isDanger:!0,callback:l}]);break}case"chat":{d="DeleteChatUser",u="AreYouSureDeleteThisChatWithUser",p=[a],m=[{langKey:"DeleteChatUser",isDanger:!0,callback:c}],g=[{text:"DeleteMessagesOptionAlso",textArgs:[await Re({peerId:e})]}];break}case"saved":{d="DeleteChatUser",u="AreYouSureDeleteThisChatSavedMessages",m=[{langKey:"DeleteChatUser",isDanger:!0,callback:c}];break}case"savedDialog":{d="DeleteChatUser",u="DeleteSavedDialogDescription",p=[a],m=[{langKey:"DeleteChatUser",isDanger:!0,callback:c}];break}case"megagroup":case"group":{i?(d="DeleteTopics",h=[1],u="DeleteSelectedTopic",p=[a],m=[{langKey:"Delete",isDanger:!0,callback:c}]):await r.appChatsManager.hasRights(e.toChatId(),"delete_chat")?(d="DeleteMegaMenu",u="AreYouSureDeleteAndExit",m=[{langKey:"DeleteMegaMenu",isDanger:!0,callback:c}],g=[{text:"DeleteChat.DeleteGroupForAll"}]):(d="LeaveMegaMenu",u="AreYouSureDeleteAndExitName",p=[a],m=[{langKey:"DeleteChatUser",isDanger:!0,callback:(f,v)=>l(f,v,!0)}]);break}}se.createPopup(Es,"popup-delete-chat",{peerId:e,threadId:i,titleLangKey:d,titleLangArgs:h,descriptionLangKey:u,descriptionLangArgs:p,buttons:m,checkboxes:g}).show()}}class rp extends Mi{constructor(e,t){super(!1),this.navigationType=e,this.withOverlay=t,this.onClick=s=>{Wg(s)||this.element&&!(this.element===document.body)&&zs(s.target,this.element)||(this.listenerOptions?.capture&&oe(s),this.close())},this.listenerOptions=t?{}:{capture:!0}}close(){this.element&&(this.overlay?.remove(),this.element=void 0,this.dispatchEvent("toggle",!1)),Xe||window.removeEventListener("contextmenu",this.onClick,this.listenerOptions),document.removeEventListener(Jo,this.onClick,this.listenerOptions),!Sa&&this.navigationType&&yt.removeByType(this.navigationType)}open(e=document.body){this.close(),!Sa&&this.navigationType&&yt.pushItem({type:this.navigationType,onPop:s=>{this.close()}}),this.element=e,!this.overlay&&this.withOverlay&&(this.overlay=document.createElement("div"),this.overlay.classList.add("btn-menu-overlay"),this.overlay.addEventListener(Jo,s=>{oe(s),this.onClick(s)}));const t=this.element===document.body;this.overlay&&(t?this.element.append(this.overlay):this.element.parentElement.insertBefore(this.overlay,this.element)),Xe||window.addEventListener("contextmenu",this.onClick,{...this.listenerOptions,once:!0}),document.addEventListener(Jo,this.onClick,this.listenerOptions),this.dispatchEvent("toggle",!0)}}const Nh=document.createElement("div");Nh.classList.add("toasts-container");const Da=document.createElement("div");Da.classList.add("toast");let Jr;const Ic=new rp("toast");Ic.addEventListener("toggle",o=>{o||Er()});function Er(){Ic.close(),Da.classList.remove("is-visible"),Jr&&clearTimeout(+Jr),Jr=window.setTimeout(()=>{Da.remove(),Jr=void 0},200)}function Xs(o,e){Ic.close(),ht(Da,o),Da.parentElement||(Nh.parentNode||document.body.append(Nh),Nh.append(Da),Da.offsetLeft),Da.classList.add("is-visible"),Jr&&clearTimeout(+Jr),Ic.open(Da),Jr=window.setTimeout(Er,3e3),e&&Ic.addEventListener("toggle",e,{once:!0})}function Ee(o){Xs(L(o.langPackKey,o.langPackArguments),o.onClose)}class Di{constructor(e){const t=this.label=document.createElement("label");t.classList.add("radio-field"),e.alignRight&&t.classList.add("radio-field-right");const s=this.input=document.createElement("input");s.type="radio",s.name="input-radio-"+e.name,e.value&&(s.value=e.value,e.stateKey&&(be.getState().then(n=>{s.checked=sP(n,e.stateKey)===e.value}),s.addEventListener("change",()=>{I.managers.appStateManager.setByKey(e.stateKey,e.value)})));const i=this.main=document.createElement("div");i.classList.add("radio-field-main"),e.textElement?i.append(e.textElement):e.text?i.textContent=e.text:e.langKey&&ls(i,e.langKey),t.append(s,i)}get checked(){return this.input.checked}set checked(e){this.setValueSilently(e),Ad(this.input,"change")}get locked(){return!!this.lockIcon}set locked(e){if(!e){this.lockIcon?.remove(),this.lockIcon=void 0,this.main.classList.remove("is-locked");return}this.lockIcon||(this.main.prepend(this.lockIcon=Pe("premium_lock","radio-field-lock")),this.main.classList.add("is-locked"))}setValueSilently(e){this.input.checked=e}}function Xw(o,e){const t=document.createElement("form");return o.forEach(s=>{const{container:i,input:n}=s;t.append(i),n.addEventListener("change",a=>{n.checked&&e(n.value,a)})}),t}function _n(o){return o.reduce((e,t)=>(e.push(...t),e),[])}class YP extends rp{constructor(){super("menu",!0),this.onMouseMove=e=>{z(e.target,"btn-menu-item")?.inner;const s=this.element.getBoundingClientRect(),{clientX:i,clientY:n}=e,a=i>=s.right?i-s.right:s.left-i,r=n>=s.bottom?n-s.bottom:s.top-n;(a>=100||r>=100)&&this.close()},$e.addEventListener("resize",()=>{this.element&&this.close()})}isOpened(){return!!this.element}close(){if(this.element&&(this.element.classList.remove("active"),this.element.parentElement.classList.remove("menu-open"),this.element.classList.contains("night"))){const e=this.element;setTimeout(()=>{e.classList.contains("active")||e.classList.remove("night")},400)}super.close(),Xe||window.removeEventListener("mousemove",this.onMouseMove)}openBtnMenu(e,t){Ti.isDarkOverlayActive&&e.classList.add("night"),super.open(e),this.element.classList.add("active","was-open"),this.element.parentElement.classList.add("menu-open"),t&&this.addEventListener("toggle",t,{once:!0}),Xe||window.addEventListener("mousemove",this.onMouseMove)}}const Js=new YP;let ev=!1;function Zw({doc:o,element:e,size:t,textColor:s,strokeWidth:i}){e.classList.add("is-external"),ev||(ev=!0,I.addEventListener("theme_changed",()=>{document.querySelectorAll(".is-external").forEach(l=>{const c=l.set;c?.(!0)})}));const n=async r=>{const l=e.svg,c=ks.getProperty(s());l.querySelectorAll("path").forEach(h=>{h.setAttributeNS(null,"fill",c),h.style.stroke=c,h.style.strokeWidth=i()+"px"});const d=await aP(l.outerHTML);if(!r)return d;e.image.src=d},a=Zs({container:e,photo:o,boxWidth:t,boxHeight:t,withoutPreloader:!0,noFadeIn:!0,noBlur:!0,processUrl:async r=>{const l=await(await fetch(r)).text(),d=new DOMParser().parseFromString(l,"image/svg+xml").firstElementChild;return e.svg=d,e.set=n,n()}});return a.then(async r=>(e.style.width=e.style.height="",e.image=r.images.full,await r.loadPromises.thumb,a))}function XP(o){if(o.element)return[o.separator,o.element].filter(Boolean);const{icon:e,iconDoc:t,className:s,text:i,onClick:n,checkboxField:a,noCheckboxClickListener:r}=o,l=document.createElement("div"),c=e?.split(" ");l.className="btn-menu-item rp-overflow"+(c?.length>1?" "+c.slice(1).join(" "):"")+(s?" "+s:"")+(o.danger?" danger":""),Vi&&Hi(l),c&&l.append(Pe(c[0],"btn-menu-item-icon"));let d=o.textElement;if(d||(d=o.textElement=i?L(i,o.textArgs):document.createElement("span"),o.regularText&&(At(d,o.regularText),d.dir="")),t){const p=document.createElement("span");p.classList.add("btn-menu-item-icon"),l.append(p);const m=()=>document.documentElement.classList.contains("is-mobile");o.loadPromise=Zw({doc:t,element:p,size:24,textColor:()=>m()?"secondary-text-color":"primary-text-color",strokeWidth:()=>m()?.625:.375})}if(d.classList.add("btn-menu-item-text"),l.append(d),o.new){const p=document.createElement("span");p.classList.add("btn-menu-item-badge"),ls(p,"New"),l.append(p)}const h=!!a||!!o.keepOpen;n&&O(l,p=>{oe(p);const m=z(p.target,"btn-menu");m&&!m.classList.contains("active")||(n(p),o.checkForClose?.()!==!1&&(h||Js.close(),a&&!r&&(a.checked=a.input.type==="radio"?!0:!a.checked)))},o.options),a&&l.append(a.label),(o.separator===!0||o.separatorDown)&&(o.separator=document.createElement("hr")),o.secondary&&(l.classList.add("is-secondary"),o.multiline=!0),o.multiline&&l.classList.add("is-multiline"),o.inner&&(l.append(Pe("next","btn-menu-item-icon","btn-menu-item-icon-right")),l.classList.add("has-inner"),l.inner=o.inner);const u=[o.element=l];return o.separator&&u[o.separatorDown?"push":"unshift"](o.separator),u.filter(Boolean)}function Nn({listenerSetter:o,buttons:e,radioGroups:t}){const s=document.createElement("div");s.classList.add("btn-menu"),t&&e.forEach(n=>{n.radioGroup&&(n.checkboxField??(n.checkboxField=new lt))}),o&&e.forEach(n=>{(n.options??(n.options={})).listenerSetter=o});const i=e.map(XP);return s.append(..._n(i)),t&&t.forEach(n=>{const a=e.filter(c=>c.radioGroup===n.name),r=document.createElement("hr");a[0].element.replaceWith(r);const l=Xw(a.map((c,d)=>{const h=c.checkboxField.input;return h.type="radio",h.name=n.name,h.value=""+ +(d===n.checked),h.checked=d===n.checked,{container:c.element,input:c.checkboxField.input}}),n.onChange);r.before(l),l.append(r)}),s}async function yf(o){const e=Nn(o);return await Promise.all(o.buttons.map(({loadPromise:t})=>t)),e}async function tn(o,e){const t=o.map(async(s,i,n)=>{if(await e(s,i,n))return s});return(await Promise.all(t)).filter(Boolean)}const Jw=8,ZP=Jw,eS=8,JP=eS;function xo(o,e,t,s){o.touches&&(o=o.touches[0]);const{pageX:i,pageY:n}=o,a=Array.from(e.children).find(M=>M.classList.contains("btn-menu-items")||M.classList.contains("btn-menu-item")&&!M.classList.contains("hide"))||e;let{scrollWidth:r}=a;const{scrollHeight:l}=e,c=document.body.getBoundingClientRect(),d=c.width,h=c.height;r+=a.offsetLeft*2;let u=Jw,p=JP,m=ZP,g=eS;s&&(s.top&&(u+=s.top),s.right&&(p+=s.right),s.bottom&&(m+=s.bottom),s.left&&(g+=s.left)),xe.isRTL?t=$e.isMobile?"left":"right":t=$e.isMobile?"right":"left";let f="top";const v=h-l-m,y=d-r-p,w=g,S={x:{left:i,right:Math.min(y,i-r)},intermediateX:t==="right"?w:y,y:{top:n,bottom:n-l},intermediateY:v},C={x:{left:S.x.left+r+p<=d,right:S.x.right>=g},y:{top:S.y.top+l+m<=h,bottom:S.y.bottom-m>=m}};{const M=C.x[t]?S.x[t]:(t="center",S.intermediateX);e.style.left=M+"px"}{const M=C.y[f]?S.y[f]:(f="center",S.intermediateY);e.style.top=M+"px"}return e.className=e.className.replace(/(top|center|bottom)-(left|center|right)/g,""),e.classList.add((f==="center"?f:"bottom")+"-"+(t==="center"?t:(xe.isRTL?t==="right":t==="left")?"right":"left")),{width:r,height:l}}let Zm=!1,fh=0;function tS(){fh&&clearTimeout(fh),fh=window.setTimeout(()=>{fh=0,Zm=!1},400),Zm=!0}function _a({element:o,callback:e,listenerSetter:t,listenerOptions:s}){const i=t?t.add(o):o.addEventListener.bind(o),n=t?t.removeManual.bind(t,o):o.removeEventListener.bind(o);if(lo&&Xe||s){let a;const r={...s||{},capture:!0},l=()=>{clearTimeout(a),n("touchmove",l,r),n("touchend",l,r),n("touchcancel",l,r)};i("touchstart",c=>{if(c.touches.length>1){l();return}i("touchmove",l,r),i("touchend",l,r),i("touchcancel",l,r),a=window.setTimeout(()=>{if(Zm){l();return}e(c),l(),Js.isOpened()&&i("touchend",oe,{once:!0})},400)},s)}else i("contextmenu",Xe?a=>{e(a),Js.isOpened()&&i("touchend",oe,{once:!0})}:e,s)}function un({buttons:o,findElement:e,listenTo:t,appendTo:s,filterButtons:i,onOpen:n,onClose:a,onCloseAfter:r,onOpenBefore:l,listenerSetter:c,middleware:d,listenForClick:h}){s??(s=document.body),c??(c=new Bt);const u=new Bt,p=d?d.create():Rt();let m;const g=w=>{const b=e?e(w):t;if(!b)return;let S=m;if((w instanceof MouseEvent||w.hasOwnProperty("preventDefault"))&&w.preventDefault(),S&&S.classList.contains("active"))return!1;(w instanceof MouseEvent||w.hasOwnProperty("cancelBubble"))&&(w.cancelBubble=!0),(async()=>{await n?.(w,b);const M=await y();if(!M){a?.();return}b.classList.add("menu-open"),S=M.element;const{cleanup:P,destroy:_}=M;xo(w,S),Js.openBtnMenu(S,()=>{b.classList.remove("menu-open"),a?.(),P(),setTimeout(()=>{r?.(),_()},300)})})()};_a({element:t,callback:g,listenerSetter:c});const f=()=>{u.removeAll(),p.clean()},v=()=>{f(),c.removeAll()},y=async()=>{f(),o.forEach(C=>C.element=void 0);const b=await(i||(C=>tn(C,M=>M?.verify?ci(M.verify(),P=>P??!1):!0)))(o);if(!b.length)return;const S=m=await yf({buttons:b,listenerSetter:u});return S.classList.add("contextmenu"),await l?.(),s.append(S),{element:S,cleanup:f,destroy:()=>{S.remove()}}};return d&&d.onDestroy(()=>{v()}),h&&O(t,g,{listenerSetter:c}),{element:m,destroy:v,open:g}}const yh=(o,e)=>{e===!0||(typeof e=="string"?At(o,e):o.append(e))};class Se{constructor(e={}){this.freezed=!1,e.checkboxFieldOptions&&(e.checkboxField=new lt({listenerSetter:e.listenerSetter,...e.checkboxFieldOptions}));const t=e.asLink?"a":e.radioField||e.checkboxField||e.asLabel?"label":"div";if(this.container=document.createElement(t),this.container.classList.add("row","no-subtitle"),e.noWrap&&this.container.classList.add("no-wrap"),e.subtitle||e.subtitleLangKey){const i=this.subtitle;if(e.subtitleLangKey?i.append(L(e.subtitleLangKey,e.subtitleLangArgs)):yh(i,e.subtitle),e.noWrap&&i.classList.add("no-wrap"),e.subtitleRight){this.container.append(this.subtitleRow=this.createRow()),this.subtitleRow.classList.add("row-subtitle-row");const n=this.subtitleRight=document.createElement("div");n.classList.add("row-subtitle","row-subtitle-right"),yh(n,e.subtitleRight),this.subtitleRow.append(i,n)}}let s=!!e.havePadding;if(e.radioField||e.checkboxField){if(e.radioField&&(this.radioField=e.radioField,this.container.append(this.radioField.label),s=!0),e.checkboxField){this.checkboxField=e.checkboxField;const n=e.checkboxField.label.classList.contains("checkbox-field-toggle");if(n?(this.container.classList.add("row-with-toggle"),e.titleRight=this.checkboxField.label):(s=!0,this.checkboxField.span||this.checkboxField.label.classList.add("checkbox-field-absolute"),this.container.append(this.checkboxField.label)),e.withCheckboxSubtitle&&!n){e.checkboxKeys??(e.checkboxKeys=["Checkbox.Enabled","Checkbox.Disabled"]);const[a,r]=e.checkboxKeys,l=()=>{ht(this.subtitle,L(this.checkboxField.checked?a:r))};e.listenerSetter?e.listenerSetter.add(this.checkboxField.input)("change",l):this.checkboxField.input.addEventListener("change",l)}}(e.radioField||e.checkboxField).label.classList.add("disable-hover")}if(e.title||e.titleLangKey||e.titleRight||e.titleRightSecondary){let i;const n=e.titleRight||e.titleRightSecondary;if(n?(this.container.append(i=this.titleRow=this.createRow()),this.titleRow.classList.add("row-title-row")):i=this.container,this._title=this.createTitle(),e.noWrap&&this.title.classList.add("no-wrap"),e.title?yh(this.title,e.title):e.titleLangKey&&this.title.append(L(e.titleLangKey,e.titleLangArgs)),i.append(this.title),n){const a=this.titleRight=document.createElement("div");a.classList.add("row-title","row-title-right"),e.titleRightSecondary&&a.classList.add("row-title-right-secondary"),yh(a,n),i.append(a)}}if(e.icon&&(s=!0,e.iconClasses?.length?this.container.append(Pe(e.icon,"row-icon",...e.iconClasses)):this.container.append(Pe(e.icon,"row-icon")),this.container.classList.add("row-with-icon")),s&&this.container.classList.add("row-with-padding"),e.navigationTab){let i=e.navigationTab.getInitArgs;if(!i){const a=e.navigationTab.constructor.getInitArgs;a&&(i=()=>a())}let n=e.navigationTab.args??i?.();e.clickable=async()=>{n instanceof Promise&&(n=await n);const a=e.navigationTab.slider.createTab(e.navigationTab.constructor);a.open(n);const r=a.eventListener;r&&i&&r.addEventListener("destroyAfter",l=>{n=l.then(()=>i())})}}if((e.clickable||e.radioField||e.checkboxField)&&(typeof e.clickable=="function"&&O(this.container,i=>{this.freezed||e.clickable(i)},{listenerSetter:e.listenerSetter}),this.container.classList.add("row-clickable","hover-effect"),e.noRipple||Hi(this.container,void 0,void 0,!0)),(e.buttonRight||e.buttonRightLangKey)&&(e.rightContent=this.buttonRight=e.buttonRight instanceof HTMLElement?e.buttonRight:ze("btn-primary btn-color-primary btn-control-small",{text:e.buttonRightLangKey})),e.rightTextContent&&(e.rightContent=document.createElement("span"),e.rightContent.classList.add("row-title-right-secondary"),e.rightContent.textContent=e.rightTextContent),e.rightContent&&(e.rightContent.classList.add("row-right"),this.container.classList.add("row-grid"),this.container.append(e.rightContent)),e.contextMenu){const{open:i}=un({...e.contextMenu,listenTo:this.container,listenerSetter:e.listenerSetter});this.openContextMenu=i}}get title(){return this._title}get subtitle(){return this._subtitle??(this._subtitle=this.createSubtitle())}get midtitle(){return this._midtitle??(this._midtitle=this.createMidtitle())}createRow(){const e=document.createElement("div");return e.classList.add("row-row"),e}createTitle(){const e=document.createElement("div");return e.classList.add("row-title"),Ya(e),e}createSubtitle(){const e=document.createElement("div");return e.classList.add("row-subtitle"),Ya(e),this.title?this.title.after(e):this.container.prepend(e),this.container.classList.remove("no-subtitle"),e}createMidtitle(){const e=document.createElement("div");return e.classList.add("row-midtitle"),this.subtitle.parentElement.insertBefore(e,this.subtitle),e}createMedia(e){const t=document.createElement("div");return this.applyMediaElement(t,e)}applyMediaElement(e,t){return this.container.classList.add("row-with-padding"),this.media=e,e.classList.add("row-media"),t&&e.classList.add("row-media-"+t),this.container.append(e),e}isDisabled(){return this.container.classList.contains("is-disabled")}toggleDisability(e=!this.container.classList.contains("is-disabled")){return this.container.classList.toggle("is-disabled",e),()=>this.toggleDisability(!e)}disableWithPromise(e){const t=this.toggleDisability(!0);e.finally(()=>{t()})}makeSortable(){const e=Pe("menu","row-sortable-icon");this.container.classList.add("row-sortable"),this.container.append(e)}toggleSorting(e){this.container.classList.toggle("cant-sort",!e)}}const eM=o=>new Se(o).container,Ha=o=>new Se({checkboxField:o,listenerSetter:o.listenerSetter}),Nl=(o,e)=>Xw(o.map(t=>({container:t.container,input:t.radioField.input})),e),ru=(o,e,t)=>{const s="name-"+(Math.random()*8388607|0);let i;const n=o.map(({langPackKey:r,value:l,checked:c,textElement:d})=>{const h=new Se({radioField:new Di({textElement:d,langKey:r,name:s,value:""+l})});return c&&(i=h.radioField),h}),a=Nl(n,e);return i&&(t?i.checked=!0:i.setValueSilently(!0)),a},Zl=3600,tM=[{value:Zl,langPackKey:"ChatList.Mute.1Hour"},{value:Zl*4,langPackKey:"ChatList.Mute.4Hours"},{value:Zl*8,langPackKey:"ChatList.Mute.8Hours"},{value:Zl*24,langPackKey:"ChatList.Mute.1Day"},{value:Zl*24*3,langPackKey:"ChatList.Mute.3Days"},{value:-1,langPackKey:"ChatList.Mute.Forever",checked:!0}];class sS extends Es{constructor(e,t){super("popup-mute",{peerId:e,titleLangKey:"Notifications",buttons:[{langKey:"ChatList.Context.Mute",callback:()=>{this.managers.appMessagesManager.mutePeer({peerId:e,muteUntil:s===-1?sw:bs(!0)+s,threadId:t})}}],body:!0});let s;const i=ru(tM,n=>{s=+n},!0);this.body.append(i),this.show()}}function iS(o,e,t,s){return o>=s?e+t:nS(o/s,t)+e}function nS(o,e){return-e/2*(Math.cos(Math.PI*o)-1)}class op{constructor(e){this.setHintActive=()=>{this.hint.classList.add("active")};let t;if(e.hint){t=document.createElement("div"),t.classList.add("limit-line-container");const a=this.hint=document.createElement("div");a.classList.add("limit-line-hint","is-locked");const r=Pe(e.hint.icon,"limit-line-hint-icon");a.append(r),e.hint.content&&a.append(e.hint.content),this.hintNoStartEnd=e.hint.noStartEnd,t.append(a)}const s=this.line=document.createElement("div");s.classList.add("limit-line"),t||s.classList.add("is-alone");const i=this.left=document.createElement("div");i.classList.add("limit-line-part","limit-line-empty");const n=this.right=document.createElement("div");n.classList.add("limit-line-part","limit-line-filled"),e.progress&&(n.classList.add("limit-line-absolute"),e.progress!==!0&&this.setProgressElements(e.progress)),e.limitPremium!==void 0&&(e.limitFree===void 0?ls(i,"LimitFree"):i.append(L("LimitFree"),""+e.limitFree),e.color!==void 0&&n.style.setProperty("--limit-background",e.color),s.append(n),n.append(L("LimitPremium"),""+e.limitPremium)),s.append(i,n),this.container=t||s,t&&t.append(s)}setProgressElements(e){this.left.replaceChildren(e.from1,e.to1),this.right.replaceChildren(e.from2,e.to2)}setProgress(e,t,s){const i=this.lastProgress;this.hint&&(this.hint.classList.remove("is-locked"),t&&this.hint.replaceChildren(this.hint.firstElementChild,t));const n=a=>{this.container.style.setProperty("--limit-progress",a*100+"%"),this.hint&&(this.hintNoStartEnd?this.hint.style.setProperty("--limit-progress",Ht(a,.1,1-.1)*100+"%"):(this.hint.classList.toggle("is-start",a<=.1),this.hint.classList.toggle("is-end",a>=1-.1)))};if(i!==void 0&&st.isAvailable("animations")){const r=Date.now(),l=e-this.lastProgress;qa(()=>{const c=(Date.now()-r)/200,d=i+nS(l*c,1);return n(d),c<1},this.container)}else n(e);s&&this.setProgressElements(s),this.lastProgress=e}_setHintActive(){st.isAvailable("animations")?ia().then(this.setHintActive):this.setHintActive()}}function Va(o,e="auto"){if(o===0)return L("FileSize.B",[0]);const t=e==="auto",s=1024,i=Math.floor(Math.log(o)/Math.log(s)),n=e==="auto"?Math.max(0,i-1):e,a=Math.max(0,n),r=["FileSize.B","FileSize.KB","FileSize.MB","FileSize.GB"],l=(o/Math.pow(s,i)).toFixed(a);return L(r[i],[t?l:parseFloat(l)])}const tv=["#ef6922","#e95a2c","#e74e33","#e3433c","#db374b","#cb3e6d","#bc4395","#ab4ac4","#9b4fed","#8958ff","#676bff","#5b79ff","#4492ff","#429bd5","#41a6a5","#3eb26d","#3dbd4a"],sM={feature:"stories",icon:"stories",titleLangKey:"Premium.Boarding.Stories.Title",subtitleLangKey:"Premium.Boarding.Stories.Info",type:"upgraded-stories",content:[{titleLangKey:"PremiumStoriesPriority",subtitleLangKey:"PremiumStoriesPriorityDescription",iconColor:"#0079FE",icon:"multistories"},{titleLangKey:"PremiumStoriesStealth",subtitleLangKey:"PremiumStoriesStealthDescription",iconColor:"#7889FE",icon:"eyecross_outline"},{titleLangKey:"PremiumStoriesViews",subtitleLangKey:"PremiumStoriesViewsDescription",iconColor:"#A45FE6",icon:"eye"},{titleLangKey:"PremiumStoriesExpiration",subtitleLangKey:"PremiumStoriesExpirationDescription",iconColor:"#C355AE",icon:"timer"},{titleLangKey:"PremiumStoriesSaveToGallery",subtitleLangKey:"PremiumStoriesSaveToGalleryDescription",iconColor:"#E85D43",icon:"arrowcircle"},{titleLangKey:"PremiumStoriesCaption",subtitleLangKey:"PremiumStoriesCaptionDescription",iconColor:"#F1822A",icon:"list"},{titleLangKey:"PremiumStoriesFormatting",subtitleLangKey:"PremiumStoriesFormattingDescription",iconColor:"#E6AC19",icon:"limit_link"}]},Rr=o=>e=>e.apiManager.getLimit(o,!0).then(t=>[t]),iM={feature:"double_limits",icon:"premium_limits",titleLangKey:"Premium.Boarding.Double.Title",subtitleLangKey:"Premium.Boarding.Double.Info",headerLangKey:"Premium.Boarding.Double.Title",_subtitleLangArgs:o=>Promise.all(["channels","folders","pin","links"].map(e=>o.apiManager.getLimit(e,!0))),type:"limits",content:[{titleLangKey:"GroupsAndChannelsLimitTitle",subtitleLangKey:"GroupsAndChannelsLimitSubtitle",_subtitleLangArgs:Rr("channels"),limitType:"channels",backgroundColor:"#5B9FFF"},{titleLangKey:"PinChatsLimitTitle",subtitleLangKey:"PinChatsLimitSubtitle",_subtitleLangArgs:Rr("pin"),limitType:"pin",backgroundColor:"#7889FE"},{titleLangKey:"PublicLinksLimitTitle",subtitleLangKey:"PublicLinksLimitSubtitle",_subtitleLangArgs:Rr("links"),limitType:"links",backgroundColor:"#9376FF"},{titleLangKey:"SavedGifsLimitTitle",subtitleLangKey:"SavedGifsLimitSubtitle",_subtitleLangArgs:Rr("gifs"),limitType:"gifs",backgroundColor:"#AB63F2"},{titleLangKey:"FavoriteStickersLimitTitle",subtitleLangKey:"FavoriteStickersLimitSubtitle",_subtitleLangArgs:Rr("favedStickers"),limitType:"favedStickers",backgroundColor:"#C456AE"},{titleLangKey:"BioLimitTitle",subtitleLangKey:"BioLimitSubtitle",limitType:"bio",backgroundColor:"#CE569A"},{titleLangKey:"CaptionsLimitTitle",subtitleLangKey:"CaptionsLimitSubtitle",limitType:"caption",backgroundColor:"#DA5786"},{titleLangKey:"FoldersLimitTitle",subtitleLangKey:"FoldersLimitSubtitle",_subtitleLangArgs:Rr("folders"),limitType:"folders",backgroundColor:"#DB496F"},{titleLangKey:"ChatPerFolderLimitTitle",subtitleLangKey:"ChatPerFolderLimitSubtitle",_subtitleLangArgs:Rr("folderPeers"),limitType:"folderPeers",backgroundColor:"#E85D43"},{titleLangKey:"ConnectedAccountsLimitTitle",subtitleLangKey:"ConnectedAccountsLimitSubtitle",subtitleLangArgs:[4],free:3,premium:4,backgroundColor:"#F1822A"}]},sv=o=>Va(o*1.024*512*1024,0),iv={stories:sM,double_limits:iM,voice_to_text:{feature:"voice_to_text",icon:"premium_transcription",titleLangKey:"Premium.Boarding.Voice.Title",subtitleLangKey:"Premium.Boarding.Voice.Info",videoPosition:"top"},faster_download:{feature:"faster_download",icon:"premium_speed",titleLangKey:"Premium.Boarding.Download.Title",subtitleLangKey:"Premium.Boarding.Download.Info",videoPosition:"top"},translations:{feature:"translations",icon:"premium_translate",titleLangKey:"Premium.Boarding.Translate.Title",subtitleLangKey:"Premium.Boarding.Translate.Info",videoPosition:"top"},animated_emoji:{feature:"animated_emoji",icon:"premium_emoji",titleLangKey:"Premium.Boarding.Emoji.Title",subtitleLangKey:"Premium.Boarding.Emoji.Info"},more_upload:{feature:"more_upload",icon:"premium_filesize",titleLangKey:"Premium.Boarding.FileSize.Title",_titleLangArgs:o=>o.apiManager.getLimit("uploadFileParts",!0).then(e=>[sv(e)]),subtitleLangKey:"Premium.Boarding.FileSize.Info",_subtitleLangArgs:o=>Promise.all([!1,!0].map(async e=>{const t=await o.apiManager.getLimit("uploadFileParts",e);return sv(t)}))},emoji_status:{feature:"emoji_status",icon:"premium_status",titleLangKey:"Premium.Boarding.Status.Title",subtitleLangKey:"Premium.Boarding.Status.Info",videoPosition:"top"},peer_colors:{feature:"peer_colors",icon:"premium_colors",titleLangKey:"Premium.Promo.Colors.Title",subtitleLangKey:"Premium.Promo.Colors.Subtitle",videoPosition:"top"},wallpapers:{feature:"wallpapers",icon:"premium_wallpaper",titleLangKey:"Premium.Promo.Wallpaper.Title",subtitleLangKey:"Premium.Promo.Wallpaper.Subtitle",videoPosition:"top",new:!0},profile_badge:{feature:"profile_badge",icon:"star",titleLangKey:"Premium.Boarding.Badge.Title",subtitleLangKey:"Premium.Boarding.Badge.Info",videoPosition:"top"},advanced_chat_management:{feature:"advanced_chat_management",icon:"premium_management",titleLangKey:"Premium.Boarding.Chats.Title",subtitleLangKey:"Premium.Boarding.Chats.Info",videoPosition:"top"},no_ads:{feature:"no_ads",icon:"premium_noads",titleLangKey:"Premium.Boarding.NoAds.Title",subtitleLangKey:"Premium.Boarding.NoAds.Info"},infinite_reactions:{feature:"infinite_reactions",icon:"premium_reactions",titleLangKey:"Premium.Boarding.ReactionsNew.Title",subtitleLangKey:"Premium.Boarding.ReactionsNew.Info",videoPosition:"top"},animated_userpics:{feature:"animated_userpics",icon:"premium_avatars",titleLangKey:"Premium.Boarding.Avatar.Title",subtitleLangKey:"Premium.Boarding.Avatar.Info",videoPosition:"top"},premium_stickers:{feature:"premium_stickers",icon:"premium_stickers",titleLangKey:"Premium.Boarding.Stickers.Title",subtitleLangKey:"Premium.Boarding.Stickers.Info",type:"premium-stickers"},last_seen:{feature:"last_seen",icon:"premium_lastseen",titleLangKey:"PremiumPreviewLastSeen",subtitleLangKey:"PremiumPreviewLastSeenDescription",new:!0},message_privacy:{feature:"message_privacy",icon:"premium_privacy",titleLangKey:"PremiumPreviewMessagePrivacy",subtitleLangKey:"PremiumPreviewMessagePrivacyDescription",new:!0},saved_tags:{feature:"saved_tags",icon:"premium_tags",titleLangKey:"PremiumPreviewTags",subtitleLangKey:"PremiumPreviewTagsDescription2"}};function aS(o){Ii(o.messages,(e,t,s)=>{e.action.photo||(s.splice(t,1),o.count!==void 0&&--o.count)})}class lp{constructor(e){this.previous=[],this.next=[],this.reverse=!1,this.loadCount=50,this.loadWhenLeft=20,this.loadedAllUp=!1,this.loadedAllDown=!1,_t(this,e)}setTargets(e,t,s){this.previous=e,this.next=t,this.reverse=s}get index(){return this.count!==void 0?this.previous.length:-1}reset(e=!1){this.current=void 0,this.previous=[],this.next=[],this.setLoaded(!0,e),this.setLoaded(!1,e)}go(e,t=!0){let s,i;if(e>0){if(s=this.next.splice(0,e),i=s.pop(),!i)return;this.current!==void 0&&s.unshift(this.current),this.previous.push(...s)}else{if(s=this.previous.splice(Math.max(0,this.previous.length+e),-e),i=s.shift(),!i)return;this.current!==void 0&&s.push(this.current),this.next.unshift(...s)}return this.next.length0),this.current}unsetCurrent(e){e?this.previous.push(this.current):this.next.unshift(this.current),this.current=void 0}goUnsafe(e,t){const s=e>0?Math.max(0,e-this.next.length):Math.min(0,e+this.previous.length),i=this.go(e,s?!1:t);return{item:s?void 0:i,leftLength:s}}setLoaded(e,t){return(e?this.loadedAllDown:this.loadedAllUp)!==t?(e?this.loadedAllDown=t:this.loadedAllUp=t,t||(e?this.loadPromiseDown=null:this.loadPromiseUp=null),!0):!1}load(e){if(e?this.loadedAllDown:this.loadedAllUp)return Promise.resolve();let t=e?this.loadPromiseDown:this.loadPromiseUp;if(t)return t;let s;return e?s=this.reverse?this.previous[0]:this.next[this.next.length-1]:s=this.reverse?this.next[this.next.length-1]:this.previous[0],s??(s=this.current),t=this.loadMore(s,e,this.loadCount).then(async i=>{if((e?this.loadPromiseDown:this.loadPromiseUp)!==t)return;i.items.length{const c=this.processItem?this.processItem(l):l;c&&n.push(c)});const r=(await Promise.all(n)).filter(Boolean);(e?this.loadPromiseDown:this.loadPromiseUp)===t&&(e?this.reverse?this.previous.unshift(...r):this.next.push(...r):this.reverse?this.next.push(...r):this.previous.unshift(...r),this.onLoadedMore?.())},()=>{}).then(()=>{e?this.loadPromiseDown=null:this.loadPromiseUp=null}),e?this.loadPromiseDown=t:this.loadPromiseUp=t,t}}class cp extends lp{constructor(e={}){super({...e,loadMore:async(t,s,i)=>{const n=s?0:i;let a=t?.mid??this.searchContext.maxId;s||(a=await this.managers.appMessagesIdsManager.incrementMessageId(a,1));const r=this.searchContext.peerId||t?.peerId;return this.managers.appMessagesManager.getHistory({...this.searchContext,peerId:r,offsetId:a,offsetPeerId:r?void 0:t?.peerId,limit:n?0:i,backLimit:n}).then(l=>(this.searchContext.inputFilter._==="inputMessagesFilterChatPhotos"&&aS(l),l.nextRate&&(this.searchContext.nextRate=l.nextRate),l.messages||(l.messages=l.history.map(c=>be.getMessageByPeer(r,c))),{count:l.count,items:l.messages}))},processItem:async t=>{if((await this.filterMids([t.mid])).length)return e.processItem(t)}}),this.onHistoryDelete=({peerId:t,msgs:s})=>{const i=a=>a.peerId===t&&s.has(a.mid),n=(a,r,l)=>{i(a)&&l.splice(r,1)};Ii(this.previous,n),Ii(this.next,n),this.current&&i(this.current)&&(this.current=void 0,this.onEmptied&&this.onEmptied())},this.onHistoryMultiappend=async t=>{const{searchContext:s}=this;if(s.folderId!==void 0||!this.loadedAllUp||this.loadPromiseUp||t.peerId!==s.peerId)return;const i=await this.filterMids([t.mid]);if(this.searchContext!==s)return;const n=(await Promise.all(i.map(r=>this.processItem(r)))).filter(Boolean);this.searchContext!==s||!n.length||this.previous.concat(this.next,this.current?[this.current]:[]).some(r=>r?.mid===t.mid)||(this.current?this.next.push(...n):this.previous.push(...n))},this.onMessageSent=({message:t})=>{this.onHistoryMultiappend(t)},this.managers??(this.managers=I.managers),I.addEventListener("history_delete",this.onHistoryDelete),I.addEventListener("history_multiappend",this.onHistoryMultiappend),I.addEventListener("message_sent",this.onMessageSent),e.isInner||(this.otherSideLoader=new cp({...e,isInner:!0}))}async filterMids(e){const t=`${this.searchContext.peerId}_${this.searchContext.isScheduled?"scheduled":"history"}`;return await this.managers.appMessagesManager.filterMessagesByInputFilterFromStorage(this.searchContext.inputFilter._,e,t,e.length)}setSearchContext(e){this.searchContext=e,this.searchContext.folderId!==void 0&&(this.loadedAllUp=!0,this.searchContext.nextRate===void 0&&(this.loadedAllDown=!0)),this.searchContext.inputFilter._==="inputMessagesFilterChatPhotos"&&(this.loadedAllUp=!0),this.searchContext.useSearch===!1&&(this.loadedAllDown=this.loadedAllUp=!0),this.otherSideLoader&&this.otherSideLoader.setSearchContext(e)}reset(){super.reset(),this.searchContext=void 0,this.otherSideLoader&&this.otherSideLoader.reset()}getPrevious(e){let t=this.previous;return this.otherSideLoader&&e&&(t=t.concat(this.otherSideLoader.previous)),t}getNext(e){let t=this.next;return this.otherSideLoader&&e&&(t=t.concat(this.otherSideLoader.next)),t}getCurrent(){return this.current||this.otherSideLoader?.current}goToOtherEnd(e){return e>0?this.go(-this.previous.length):this.go(this.next.length)}goRound(e,t){let s;if(this.otherSideLoader?.current){if(s=this.otherSideLoader.goUnsafe(e,t),s.item)return s.item;if(e=s.leftLength,!(e>0?this.otherSideLoader.next:this.otherSideLoader.previous).length){if(!(e>0?this.otherSideLoader.loadedAllUp:this.otherSideLoader.loadedAllDown))return;if(e>0&&(this.otherSideLoader.searchContext.maxId===1||this.otherSideLoader.loadedAllDown)||e<0&&(this.otherSideLoader.searchContext.maxId===0||this.otherSideLoader.loadedAllUp))return this.otherSideLoader.goToOtherEnd(e);this.otherSideLoader.unsetCurrent(e>0)}}if(s=this.goUnsafe(e,t),!s.item){if(this.loadedAllUp&&this.loadedAllDown)return this.goToOtherEnd(e);this.otherSideLoader&&(e=s.leftLength,s=this.otherSideLoader.goUnsafe(e,t),s.item&&this.unsetCurrent(e>0))}return s?.item}setLoaded(e,t){const s=super.setLoaded(e,t);if(s&&this.otherSideLoader&&t&&this.searchContext?.useSearch!==!1){const i=this.loadedAllUp;this.otherSideLoader.setSearchContext({...this.searchContext,maxId:i?1:0}),this.otherSideLoader.reverse=this.reverse,this.otherSideLoader.setLoaded(i,!0),this.otherSideLoader.load(!i)}return s}cleanup(){this.reset(),I.removeEventListener("history_delete",this.onHistoryDelete),I.removeEventListener("history_multiappend",this.onHistoryMultiappend),I.removeEventListener("message_sent",this.onMessageSent),this.onEmptied=void 0,this.otherSideLoader&&(this.otherSideLoader.cleanup(),this.otherSideLoader=void 0)}}class Gr{constructor(e,t,s=!0,i,n=!0,a=!0,r,l){this.name=e,this.type=t,this.clearable=s,this.autonomous=a,this.onFound=r,this.noIcons=l,this.list=qe.createChatList(),this.container=document.createElement("div"),i&&(this.container.className=i),e&&(this.nameEl=document.createElement("div"),this.nameEl.classList.add("search-group__name"),typeof e=="string"&&this.nameEl.append(L(e)),this.container.append(this.nameEl)),this.container.classList.add("search-group","search-group-"+t),this.container.append(this.list),this.container.style.display="none",n&&qe.setListClickListener({list:this.list,onFound:r,withContext:void 0,autonomous:a})}clear(){this.container.style.display="none",this.clearable&&Array.from(this.list.children).forEach(e=>{const t=e.dialogElement;t?t?.remove():e.remove()})}setActive(){this.container.style.display=""}toggle(){this.list.childElementCount?this.setActive():this.clear()}}class nM{constructor(e,t,s,i,n,a,r){this.container=e,this.searchInput=t,this.searchGroups=s,this.onSearch=n,this.noIcons=a,this.fromSavedDialog=r,this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1,this.searchPromise=null,this.searchTimeout=0,this.query="",this.listsContainer=null,this.threadId=0,this.middlewareHelper=i.create(),this.scrollable=new Ci(this.container),this.listsContainer=this.scrollable.container;for(const l in this.searchGroups)this.listsContainer.append(this.searchGroups[l].container);this.searchGroups.messages&&this.scrollable.setVirtualContainer(this.searchGroups.messages.list),this.searchInput.onChange=l=>{this.query=l,this.reset(!1),this.searchMore()},this.scrollable.onScrolledBottom=()=>{this.query.trim()&&(this.searchTimeout||(this.searchTimeout=window.setTimeout(()=>{this.searchMore(),this.searchTimeout=0},0)))}}reset(e=!0){e&&(this.searchInput.value="",this.query="",this.peerId=void 0,this.threadId=0),this.middlewareHelper.clean(),this.minMsgId=0,this.loadedCount=-1,this.foundCount=-1;for(const t in this.searchGroups)this.searchGroups[t].clear();this.searchPromise=null}beginSearch(e,t=0,s=""){this.peerId=e,this.threadId=t,this.query!==s&&(this.searchInput.inputField.value=s),this.searchInput.input.focus()}searchMore(){if(this.searchPromise)return this.searchPromise;const e=this.query;if(!e.trim()){this.onSearch?.(0);return}if(this.foundCount!==-1&&this.loadedCount>=this.foundCount)return Promise.resolve();const t=this.minMsgId||0,s=this.middlewareHelper.get();return this.searchPromise=I.managers.appMessagesManager.getHistory({peerId:this.peerId,query:e,inputFilter:{_:"inputMessagesFilterEmpty"},offsetId:t,limit:20,threadId:this.threadId}).then(i=>{if(!s()||(this.searchPromise=null,this.searchInput.value!==e))return;let{count:n,messages:a,history:r}=i;a||(a=i.messages=r.map(c=>be.getMessageByPeer(this.peerId,c))),a.length&&a[0].mid===this.minMsgId&&a.shift();const l=this.searchGroups.messages;a.forEach(c=>{try{const d=this.peerId?c.fromId:c.peerId;qe.addDialogAndSetLastMessage({peerId:this.fromSavedDialog?I.myId:d,container:this.scrollable,avatarSize:"bigger",meAsSaved:!1,message:c,query:e,noIcons:this.noIcons,wrapOptions:{middleware:s},threadId:this.fromSavedDialog?c.saved_peer_id?Ze(c.saved_peer_id):I.myId:void 0})}catch(d){console.error("[appSearch] render search result",d)}}),l.toggle(),this.minMsgId=a.length&&a[a.length-1].mid,this.loadedCount===-1&&(this.loadedCount=0),this.loadedCount+=a.length,this.foundCount===-1&&(this.foundCount=n,l.nameEl&&ht(l.nameEl,L(n?"Chat.Search.MessagesFound":"Chat.Search.NoMessagesFound",[n])),this.onSearch?.(this.foundCount))}).catch(i=>{s()&&(console.error("search error",i),this.searchPromise=null)})}}var Jm=(o=>(o[o.Connected=0]="Connected",o[o.Connecting=1]="Connecting",o[o.Closed=2]="Closed",o[o.TimedOut=3]="TimedOut",o))(Jm||{});const qr=class qr{constructor(){this.hadConnect=!1,this.connecting=!1,this.timedOut=!1,this.updating=!1,this.setConnectionStatus=e=>{Promise.all([Rm.get("dc"),I.managers.rootScope.getConnectionStatus()]).then(([t,s])=>{t||(t=pc.baseDcId),this.setFirstConnectionTimeout&&(clearTimeout(this.setFirstConnectionTimeout),this.setFirstConnectionTimeout=0);const i=s["NET-"+t],n=i&&(e??i.status)===Jm.Connected;this.connecting&&n&&this.managers.apiUpdatesManager.forceGetDifference(),n&&!this.hadConnect&&(this.hadConnect=!0),this.timedOut=i&&(e??i.status)===Jm.TimedOut,this.connecting=!n,this.retryAt=i&&i.retryAt,Wi&&this.log("connecting",this.connecting),this.setState()})},this.wrapSetStatusText=(...e)=>()=>this.inputSearch.setPlaceholder(...e),this.setState=()=>{if(gr.deactivatedReason)return;let e;if(this.connecting)if(this.timedOut)e=this.wrapSetStatusText("Updating");else if(this.hadConnect)if(this.retryAt!==void 0){const t=document.createElement("span"),s=this.retryAt,i=()=>{const a=Date.now();t.innerText=""+Math.max(0,Math.round((s-a)/1e3)),a>s&&clearInterval(n)},n=setInterval(i,1e3);i(),e=this.wrapSetStatusText("ConnectionStatus.ReconnectInPlain",[t])}else e=this.wrapSetStatusText("ConnectionStatus.Reconnecting");else e=this.wrapSetStatusText("ConnectionStatus.Waiting");else this.updating?e=this.wrapSetStatusText("Updating"):e=this.wrapSetStatusText("Search");Wi&&this.log("setState",this.connecting||this.updating),this.rAF&&window.cancelAnimationFrame(this.rAF),this.rAF=window.requestAnimationFrame(()=>{this.rAF=0,this.setStateTimeout&&clearTimeout(this.setStateTimeout);const t=this.inputSearch.isLoading(),s=()=>{e();const i=this.connecting||this.updating;this.inputSearch.toggleLoading(i),this.setStateTimeout=0,Wi&&this.log("setState: isShown:",i)};t?s():this.setStateTimeout=window.setTimeout(s,qr.CHANGE_STATE_DELAY)})}}construct(e,t,s){this.managers=e,this.inputSearch=s,this.log=pi("CS",void 0,void 0),this.inputSearch.setPlaceholder("Search"),I.addEventListener("connection_status_change",i=>{this.setConnectionStatus()}),I.addEventListener("state_synchronizing",()=>{this.updating=!0,Wi&&this.log("updating",this.updating),this.setState()}),I.addEventListener("state_synchronized",()=>{Wi&&this.log("state_synchronized"),this.updating=!1,Wi&&this.log("updating",this.updating),this.setState()}),this.setFirstConnectionTimeout=window.setTimeout(this.setConnectionStatus,qr.INITIAL_DELAY)}getA(e,t){const s=document.createElement("a");return s.classList.add("force-reconnect"),s.append(L(e)),O(s,i=>{oe(i),t()}),s}};qr.CHANGE_STATE_DELAY=400,qr.INITIAL_DELAY=2e3,qr.ANIMATION_DURATION=250;let Xc=qr;class kr{constructor(e={}){this.prevValue="",this.timeout=0,this.setArrowBack=n=>{this.arrowBack!==n&&(this.arrowBack=n,this.container.classList.toggle("with-arrow-back",n),n&&!this.backBtn&&(this.backBtn=this.createButtonIcon("arrow_prev","input-search-icon","input-search-back"),this.container.append(this.backBtn),O(this.backBtn,this.onBack,{listenerSetter:this.listenerSetter,cancelMouseDown:!0})),this.searchIcon.classList.toggle("hide",n),this.backBtn&&this.backBtn.classList.toggle("hide",!n),this.clearBtn.classList.toggle("always-visible",!n&&!!this.alwaysShowClear))},this.setPlaceholder=(n,a)=>{if(this.currentLangPackKey===n)return;this.currentLangPackKey=n;const r=this.currentPlaceholder;r&&Lt({element:r,className:"is-hiding",forwards:!0,duration:Xc.ANIMATION_DURATION,onTransitionEnd:()=>{r.remove()}}),this.currentPlaceholder=L(n,a),this.currentPlaceholder.classList.add("input-search-placeholder","will-animate"),this.container.append(this.currentPlaceholder)},this.onInput=()=>{if(!this.onChange)return;const{value:n,prevValue:a}=this;if(n!==a){if(this.prevValue=n,this.verifyDebounce?.(n,a)===!1){this.clearTimeout(!1),this.onChange(n);return}this.clearTimeout(!0),this.timeout=window.setTimeout(()=>{this.onDebounce?.(!1),this.onChange(n)},this.debounceTime)}},this.onClearClick=n=>{const a=this.inputField.isEmpty();this.value="",this.onChange?.(""),this.onClear?.(n,a)},this.clearTimeout=n=>{clearTimeout(this.timeout),this.onDebounce?.(n)},this.inputField=new xt({plainText:!0,withBorder:!e.noBorder}),this.listenerSetter=new Bt,this.container=this.inputField.container,this.container.classList.remove("input-field"),this.container.classList.add("input-search"),e.oldStyle&&this.container.classList.add("old-style"),this.onChange=e.onChange,this.onClear=e.onClear,this.onDebounce=e.onDebounce,this.onBack=e.onBack,this.debounceTime=e.debounceTime??300,this.verifyDebounce=e.verifyDebounce,this.alwaysShowClear=e.alwaysShowClear;const t=this.input=this.inputField.input;t.classList.add("input-search-input"),e.noFocusEffect||t.classList.add("with-focus-effect");const s=this.searchIcon=this.createIcon("search","input-search-icon"),i=this.clearBtn=this.createButtonIcon("close","input-search-clear");this.listenerSetter.add(t)("input",this.onInput),O(i,this.onClearClick,{listenerSetter:this.listenerSetter,cancelMouseDown:!0}),e.placeholder&&(t.placeholder=" ",this.setPlaceholder(e.placeholder)),e.onFocusChange&&(this.listenerSetter.add(t)("focusin",()=>{e.onFocusChange?.(!0)}),this.listenerSetter.add(t)("focusout",()=>{e.onFocusChange?.(!1)})),this.container.append(s,i),this.setArrowBack(e.arrowBack)}createButtonIcon(e,...t){return t??(t=[]),t.push("input-search-part","input-search-button"),it(e+" "+t.join(" "),{noRipple:!0})}createIcon(e,...t){return Pe(e,"input-search-part",...t)}isLoading(){return this.container.classList.contains("is-connecting")}toggleLoading(e){const t=this.arrowBack?this.clearBtn:this.searchIcon;this.statusPreloader||(this.statusPreloader=new on({cancelable:!1}),this.statusPreloader.constructContainer({color:"transparent",bold:!0}),this.statusPreloader.construct?.(),this.statusPreloader.preloader.classList.add("is-visible","will-animate"),t.classList.add("will-animate")),e&&!this.statusPreloader.preloader.parentElement&&this.container.append(this.statusPreloader.preloader),this.statusPreloader.preloader.classList.toggle("is-hiding",!e),t.classList.toggle("is-hiding",e||t===this.clearBtn&&this.inputField.isEmpty()),Lt({element:this.container,className:"is-connecting",forwards:e,duration:Xc.ANIMATION_DURATION,onTransitionEnd:e?void 0:()=>{this.statusPreloader.preloader.remove()}})}get value(){return this.inputField.value}set value(e){this.prevValue=e,this.clearTimeout(!1),this.inputField.value=e}remove(){this.clearTimeout(!1),this.verifyDebounce=void 0,this.listenerSetter.removeAll()}}class Vt{constructor(e,t){this._constructor(e,t)}_constructor(e,t=!0){this.slider=e,this.middlewareHelper=e?e.getMiddleware().create():Rt(),this.destroyable=t,this.container=document.createElement("div"),this.container.classList.add("tabs-tab","sidebar-slider-item"),this.header=document.createElement("div"),this.header.classList.add("sidebar-header"),this.closeBtn=it("left sidebar-close-button",{noRipple:!0}),this.title=document.createElement("div"),this.title.classList.add("sidebar-header__title"),this.header.append(this.closeBtn,this.title),this.content=document.createElement("div"),this.content.classList.add("sidebar-content"),this.scrollable=new Ci(this.content,void 0,void 0,!0),this.scrollable.attachBorderListeners(this.container),this.container.append(this.header,this.content),this.slider?.addTab(this),this.listenerSetter=new Bt}close(){return this.slider.closeTab(this)}async open(...e){if(this.init)try{const t=this.init(...e);this.init=null,t instanceof Promise&&await t}catch(t){console.error("open tab error",t)}this.slider.selectTab(this)}init(...e){}onOpen(){}onOpenAfterTimeout(){}onClose(){}onCloseAfterTimeout(){this.destroyable&&(this.slider?.deleteTab(this),this.container.remove(),this.scrollable.destroy(),this.listenerSetter?.removeAll(),this.middlewareHelper?.destroy())}setTitle(e){this.title.replaceChildren(L(e))}}class rs extends Vt{constructor(e){super(e),this.eventListener=new Mi}onClose(){this.eventListener.dispatchEvent("close")}onCloseAfterTimeout(){const e=this.eventListener.dispatchResultableEvent("destroy");return this.eventListener.dispatchEvent("destroyAfter",Promise.all(e).then(es,es)),this.eventListener.cleanup(),super.onCloseAfterTimeout()}}const Zp=250;class rS{constructor(e){this.historyTabIds=[],this.canHideFirst=!1,this.onCloseBtnClick=()=>{yt.findItemByType(this.navigationType)?yt.back(this.navigationType):this.historyTabIds.length&&this.closeTab(this.historyTabIds[this.historyTabIds.length-1])},this.closeTab=(t,s,i)=>{if(t!==void 0&&this.historyTabIds[this.historyTabIds.length-1]!==t)return this.removeTabFromHistory(t),!1;const n=this.historyTabIds.pop();this.onCloseTab(n,s,i);const a=this.historyTabIds[this.historyTabIds.length-1];return this._selectTab(a!==void 0?a instanceof Vt?a.container:a:this.canHideFirst?-1:0,s),!0},_t(this,e),this.tabs??(this.tabs=new Map),this.tabsContainer=this.sidebarEl.querySelector(".sidebar-slider"),this._selectTab=Qa({content:this.tabsContainer,type:"navigation",transitionTime:Zp}),this.canHideFirst||this._selectTab(0),this.middlewareHelper=Rt()}getMiddleware(){return this.middlewareHelper.get()}pushNavigationItem(e){const t={type:this.navigationType,onPop:s=>{if(e.isConfirmationNeededOnClose){const i=e.isConfirmationNeededOnClose();if(i)return Promise.resolve(i).then(()=>{yt.removeItem(t),this.closeTab(void 0,void 0,!0)}),!1}return this.closeTab(void 0,s,!0),!0}};yt.pushItem(t)}async selectTab(e){if(this.historyTabIds[this.historyTabIds.length-1]===e)return!1;const t=e instanceof Vt?e:this.tabs.get(e);return this.onOpenTab&&await this.onOpenTab(),t&&(t.onOpen?.(),t.onOpenAfterTimeout&&setTimeout(()=>{t.onOpenAfterTimeout()},Zp)),this.pushNavigationItem(t),this.historyTabIds.push(e),this._selectTab(e instanceof Vt?e.container:e),!0}removeTabFromHistory(e){fs(this.historyTabIds,e),this.onCloseTab(e,void 0)}sliceTabsUntilTab(e,t){for(let s=this.historyTabIds.length-1;s>=0;--s){const i=this.historyTabIds[s];if(i!==t){if(i instanceof e)break;this.removeTabFromHistory(i)}}}getTab(e){return this.historyTabIds.find(t=>t instanceof e)}getHistory(){return this.historyTabIds}isTabExists(e){return!!this.getTab(e)}onCloseTab(e,t,s){s||yt.removeByType(this.navigationType,!0);const i=e instanceof Vt?e:this.tabs.get(e);if(i){try{i.onClose?.()}catch{console.error("tab onClose error",i)}i.onCloseAfterTimeout&&setTimeout(()=>{i.onCloseAfterTimeout()},Zp+30)}}addTab(e){e.container.parentElement||(this.tabsContainer.append(e.container),e.closeBtn&&e.closeBtn.addEventListener("click",this.onCloseBtnClick))}deleteTab(e){this.tabs.delete(e)}createTab(e,t=!0,s){const i=new e(s?void 0:this,t);return i.managers=this.managers,i}}class vf{constructor(e,t){this.container=document.createElement("div"),this.container.classList.add("avatar-edit"),this.canvas=document.createElement("canvas"),this.canvas.classList.add("avatar-edit-canvas"),this.icon=Pe("cameraadd","avatar-edit-icon"),this.container.append(this.canvas,this.icon),O(this.container,()=>{se.createPopup(Xb,t).open(this.canvas,e)})}clear(){this.canvas.getContext("2d").clearRect(0,0,this.canvas.width,this.canvas.height)}}const Fi=(o={})=>{const e=ze("btn-circle btn-corner z-depth-1"+(o.className?" "+o.className:""),o);return e.tabIndex=-1,e};function na(o,e=" "){if(o===void 0)return"";const t=o.toString().split(".");return t[0]=t[0].replace(/\B(?=(\d{3})+(?!\d))/g,e),t.join(".")}function bf(o){return o===void 0?"":na(o,",")}function nv(o){return o===void 0?"":na(o,",")}function Tr(o){if(!o)return document.createElement("span");let e,t;switch(o.id){case wr.toUserId():e="Peer.RepliesNotifications";break;case Fd.toUserId():e="Peer.ServiceNotifications";break;default:{if(o.pFlags.bot){if(o.bot_active_users===void 0){e="Bot";break}e="BotUsers",t=[na(o.bot_active_users)];break}if(o.pFlags.support){e="SupportStatus";break}switch(o.status?._){case"userStatusRecently":{e="Lately";break}case"userStatusLastWeek":{e="WithinAWeek";break}case"userStatusLastMonth":{e="WithinAMonth";break}case"userStatusOffline":{const s=o.status.was_online,i=new Date,a=(i.getTime()/1e3|0)-s;if(a<60)e="Peer.Status.justNow";else if(a<3600)e="Peer.Status.minAgo",t=[a/60|0];else if(a<86400&&i.getDate()===new Date(s*1e3).getDate())e="LastSeen.HoursAgo",t=[a/3600|0];else{e="Peer.Status.LastSeenAt";const{dateEl:r,timeEl:l}=iw(s);t=[r,l]}break}case"userStatusOnline":{e="Online";break}default:{e="ALongTimeAgo";break}}break}}return L(e,t)}const dp=()=>{const o=document.createElement("div");return o.classList.add("gradient-delimiter"),o},Jl="sidebar-left-section";class Me{constructor(e={}){const t=this.container=document.createElement("div");t.classList.add(Jl+"-container");const s=this.innerContainer=document.createElement("div");if(s.classList.add(Jl),e.noShadow&&s.classList.add("no-shadow"),e.fakeGradientDelimiter)s.append(dp()),s.classList.add("with-fake-delimiter");else if(e.noDelimiter)s.classList.add("no-delimiter");else{const a=document.createElement("hr");s.append(a)}const i=this.content=this.generateContentElement();if(e.name){const a=this.title=document.createElement("div");a.classList.add("sidebar-left-h2",Jl+"-name"),typeof e.name=="string"?Zh({element:a,key:e.name,args:e.nameArgs}):a.append(e.name),i.append(a)}t.append(s);const n=e.caption??e.captionOld;if(n){const a=this.caption=this.generateContentElement();a.classList.add(Jl+"-caption"),e.captionOld||t.append(a),n!==!0&&Zh({element:a,key:n,args:e.captionArgs})}}generateContentElement(){const e=document.createElement("div");return e.classList.add(Jl+"-content"),this.innerContainer.append(e),e}}const Cl=(o,e,t)=>{const s=new Me({name:e,caption:t});return o.append(s.container),s.content};class oS extends Vt{constructor(){super(...arguments),this.uploadAvatar=null,this.isGeoChat=!1}init({peerIds:e,isGeoChat:t=!1,onCreate:s,openAfter:i=!0,title:n,asChannel:a=!1}){this.isGeoChat=t,this.peerIds=e,this.container.classList.add("new-group-container"),this.setTitle("NewGroup"),this.avatarEdit=new vf(g=>{this.uploadAvatar=g});const r=new Me({}),l=document.createElement("div");l.classList.add("input-wrapper"),this.groupNameInputField=new xt({label:"CreateGroup.NameHolder",maxLength:128}),this.groupLocationInputField=new xt({label:"ChatLocation",name:"location",canBeEdited:!1}),l.append(this.groupNameInputField.container,this.groupLocationInputField.container),this.listenerSetter.add(this.groupNameInputField.input)("input",()=>{let f=!!this.groupNameInputField.value.length&&!this.groupNameInputField.input.classList.contains("error");this.isGeoChat&&(f=f&&!!this.userLocationCoords&&!!this.userLocationAddress),this.nextBtn.classList.toggle("is-visible",!!f)}),this.nextBtn=Fi({icon:"arrow_next"}),O(this.nextBtn,()=>{const g=this.groupNameInputField.value,f=this.peerIds.map(y=>y.toUserId());let v;if(this.isGeoChat){if(!this.userLocationAddress||!this.userLocationCoords)return;v=this.managers.appChatsManager.createChannel({title:g,about:"",geo_point:{_:"inputGeoPoint",...this.userLocationCoords},address:this.userLocationAddress,megagroup:!0}).then(y=>(this.uploadAvatar&&this.uploadAvatar().then(w=>{this.managers.appChatsManager.editPhoto(y,w)}),this.peerIds.length&&this.managers.appChatsManager.inviteToChannel(y,this.peerIds),y))}else this.nextBtn.disabled=!0,a?(v=this.managers.appChatsManager.createChannel({megagroup:!0,title:g,about:""}),e.length&&(v=v.then(y=>this.managers.appChatsManager.inviteToChannel(y,f).then(()=>y)))):v=this.managers.appChatsManager.createChat(g,f),v=v.then(y=>(this.uploadAvatar&&this.uploadAvatar().then(w=>{this.managers.appChatsManager.editPhoto(y,w)}),y));v&&v.then(y=>{s?.(y),this.close(),i&&he.setInnerPeer({peerId:y.toPeerId(!0)})})},{listenerSetter:this.listenerSetter});const c=new Me({name:"Members",nameArgs:[this.peerIds.length]});this.peerIds.length||c.container.classList.add("hide");const d=this.list=qe.createChatList({new:!0});c.content.append(d),r.content.append(this.avatarEdit.container,l),this.content.append(this.nextBtn),this.scrollable.append(r.container,c.container),t?(this.setTitle("NearbyCreateGroup"),this.groupLocationInputField.container.classList.remove("hide"),this.groupLocationInputField.setValueSilently(xe.format("Loading",!0)),this.startLocating()):this.groupLocationInputField.container.classList.add("hide");const h=Promise.all(this.peerIds.map(g=>this.managers.appUsersManager.getUser(g.toUserId()))),u=this.managers.appUsersManager.getSelf(),p=h.then(g=>g.map(f=>{const{dom:v}=qe.addDialogNew({peerId:f.id.toPeerId(!1),container:this.list,rippleEnabled:!1,avatarSize:"abitbigger",wrapOptions:{middleware:this.middlewareHelper.get()}});v.lastMessageSpan.append(Tr(f))}));let m;return n?this.groupNameInputField.setDraftValue(n):m=this.peerIds.length>0&&this.peerIds.length<5?Promise.all([h,u]).then(([g,f])=>{const v=g.map(w=>[w.first_name,w.last_name].filter(Boolean).join(" "));v.unshift(f.first_name);const y=Mo(v,w=>w?", ":" & ").join("");this.groupNameInputField.setDraftValue(y)}):Promise.resolve(),Promise.all([p,m])}onCloseAfterTimeout(){this.avatarEdit.clear(),this.uploadAvatar=null,this.groupNameInputField.value="",this.groupLocationInputField.container.classList.add("hide"),this.nextBtn.disabled=!1}startLocating(){navigator.geolocation.getCurrentPosition(e=>{this.userLocationCoords={lat:e.coords.latitude,long:e.coords.longitude};let t="https://nominatim.openstreetmap.org/reverse";t+="?lat="+e.coords.latitude,t+="&lon="+e.coords.longitude,t+="&format=json",t+="&addressdetails=1",t+="&accept-language=en",fetch(t).then(s=>s.json()).then(s=>{this.userLocationAddress=s.display_name,this.groupLocationInputField.setValueSilently(s.display_name)})},e=>{e instanceof GeolocationPositionError?this.groupLocationInputField.setValueSilently("Location permission denied. Please retry later."):this.groupLocationInputField.setValueSilently("An error has occurred. Please retry later.")})}}function Ts(o,e,t,s){return s===void 0&&(s=o.parentElement===e?Oi(o):-1),s===t?!1:(s!==-1&&st?e.insertBefore(o,e.children[t]):e.append(o):e.prepend(o),!0)}function ro(o,e,t,s,i){if(!t)t=r=>r;else if(typeof t!="function"){const r=t;t=l=>l[r]}i||(i=(r,l)=>r-l);const n=t(e);if(s??(s=o.indexOf(e)),s!==-1){const r=o[s-1],l=o[s+1];if((!r||i(t(r),n)>=0)&&(!l||i(t(l),n)<=0))return s;o.splice(s,1)}const a=o.length;if(!a||i(n,t(o[a-1]))<=0)return o.push(e)-1;if(i(n,t(o[0]))>=0)return o.unshift(e),0;for(let r=0;r0)return o.splice(r,0,e),r;return console.error("wtf",o,e),o.indexOf(e)}const aM=Dd("MIDDLEWARE");function po(o,e=aM){return t=>{if(!(t instanceof Promise)){if(t instanceof Error)throw t;return t}return t.then(s=>{if(!o())throw e;return s})}}let rM=0;class lS{constructor(e){_t(this,e),this.queue=[],this.middlewareHelper??(this.middlewareHelper=Rt());const t="BATCH-PROCESSOR-"+ ++rM,s=ji.Log|ji.Warn|ji.Error;this.log?this.log=this.log.bindPrefix(t,s):this.log=pi(t,s)}get queuePromise(){return this.promise}clear(){this.log("clear"),this.queue.length=0,this.promise=void 0,this.middlewareHelper.clean()}addToQueue(e){return this.queue.push(e),this.setQueue()}setQueue(){if(!this.queue.length)return Promise.resolve();if(this.promise)return this.promise;const e=this.middlewareHelper.get(),t=this.log.bindPrefix("queue"),s=po(e,this.possibleError),i=async()=>{t("start",this.queue.length);const a=this.queue.splice(0,this.queue.length),r=performance.now(),l=a.map(d=>(d instanceof Promise&&d.then(h=>{t("render item time",performance.now()-r,h)}),d)),c=await s(Promise.all(l));if(await s(this.process(c,s,t)),t("queue rendered"),this.queue.length)return t("have new items to render"),i();t("end")};t("setting pause");const n=this.promise=s(qs(0)).then(()=>i().catch(a=>{throw a!==this.possibleError&&t.error("process queue error",a),a}),a=>{throw t("pause has been cleared"),a}).finally(()=>{this.promise===n&&(this.promise=void 0)});return n}}class hp{constructor(e){this.updateElementWith=t=>t(),this.updateListWith=t=>t(!0),_t(this,e),this.elements=new Map,this.sorted=[],this.middlewareHelper=e.middleware?.create()||Rt(),this.batchProcessor=new lS({log:this.log,process:async(t,s,i)=>{const a=t.map(r=>this.update(r.id,r));await s(Promise.all(a))}})}clear(){this.batchProcessor.clear(),this.middlewareHelper.clean(),this.elements.clear(),this.sorted.length=0}_updateList(){this.elements.forEach(e=>{this.update(e.id)}),this.onSort&&this.sorted.forEach((e,t)=>{this.onSort(e,t)})}updateList(e){const t=this.middlewareHelper.get();this.updateListWith(s=>{if(!t()||s!==void 0&&!s){e?.(!1);return}this._updateList(),e?.(!0)})}has(e){return this.elements.has(e)}get(e){return this.elements.get(e)}getAll(){return this.elements}async add(e){if(this.get(e))return;const s={id:e,index:0};this.elements.set(e,s);let i=this.onElementCreate(s);if(i instanceof Promise){let n=!1;i=Promise.race([i.then(a=>(n=!0,a)),qs(1e3).then(()=>{if(!n)return console.error("loadPromises are still pending?",s),s})])}return this.batchProcessor.addToQueue(i)}delete(e,t){const s=this.elements.get(e);if(!s)return!1;this.elements.delete(e);const i=this.sorted.indexOf(s);if(i!==-1&&this.sorted.splice(i,1),this.onDelete)if(t)this.onDelete(s);else{const n=this.middlewareHelper.get();this.updateElementWith(()=>{n()&&this.onDelete(s)})}return!0}async update(e,t=this.get(e)){if(!t||(t.index=await this.getIndex(t),this.get(e)!==t))return;this.onUpdate?.(t);const s=ro(this.sorted,t,"index");this.onSort(t,s)}}function cS(o){return o.participants_count||o.participants?.participants?.length||1}function av(o,e){let t;e?t=cS(e):t=o.participants_count||o.participants?.participants.length;const s=o.pFlags.broadcast;return t=t||1,L(s?"Peer.Status.Subscribers":"Peer.Status.Member",[na(t)])}function ya(o,e=I.managers,t,s,i){if(t??(t=be.getChat(o)),t._==="chatForbidden")return L("YouWereKicked");if(s)return av(t,void 0);const n=i||e.appProfileManager.getCachedFullChat(o);return ci(n,a=>av(t,a))}function wf(o){return o.rank||(o._==="channelParticipantAdmin"||o._==="chatParticipantAdmin"?2:o._==="chatParticipantCreator"||o._==="channelParticipantCreator"?1:void 0)}function dS(o){return typeof o=="object"&&(o=wf(o)),typeof o=="number"?L(o?o===1?"Chat.OwnerBadge":"ChatAdmin":"Chat.ChannelBadge"):_e(o)}const Ou=class Ou extends hp{constructor(e){super({getIndex:e.getIndex||(s=>s.id.isAnyChat()?0:this.managers.appUsersManager.getUserStatusForSort(s.id)),onDelete:s=>{s.dialogElement.remove(),this.onListLengthChange?.()},onUpdate:e.onUpdate||(async s=>{if(s.id.isAnyChat()){const i=await ya(s.id.toChatId(),this.managers);ht(s.dom.lastMessageSpan,i)}else{const i=Tr(await this.managers.appUsersManager.getUser(s.id));ht(s.dom.lastMessageSpan,i)}}),onSort:(s,i)=>{const n=s.dom.listEl.parentElement!==this.list;Ts(s.dom.listEl,this.list,i),n&&this.onListLengthChange&&this.onListLengthChange()},onElementCreate:s=>{const i=qe.addDialogNew({peerId:s.id,container:!1,avatarSize:this.avatarSize,autonomous:this.autonomous,meAsSaved:!1,rippleEnabled:this.rippleEnabled,wrapOptions:{lazyLoadQueue:this.lazyLoadQueue,middleware:this.middlewareHelper.get()},withStories:!0}),n=this.ranks.get(s.id);return n&&i.titleRight.replaceChildren(dS(n)),s.dom=i.dom,s.dialogElement=i,s},updateElementWith:_s,updateListWith:async s=>{if(!Array.from(this.elements.values()).some(i=>i.id.isUser())||!fa(this.list)||(await Ns(),!fa(this.list)))return s(!1);s(!0)},middleware:e.middleware}),this.ranks=new Map,this.avatarSize="abitbigger",this.rippleEnabled=!0,this.autonomous=!0,_t(this,e),this.list=qe.createChatList(this.createChatListOptions);const t=()=>{window.setTimeout(()=>{this.updateList(s=>{s&&t()})},Ou.SORT_INTERVAL)};t()}};Ou.SORT_INTERVAL=3e4;let Zc=Ou;class $d{constructor(e){this._disabled=!1,this.avatarSize=120,this.isChanged=()=>{if(this.uploadAvatar)return!0;let t=0,s=0,i=0;return this.inputFields.forEach(n=>{n.isValid()&&(n.isChanged()&&++t,n.required&&++i),n.required&&++s}),s===i&&t>0},this.handleChange=()=>{this.nextBtn.classList.toggle("is-visible",this.isChanged())},_t(this,e),this.peerId||(this.peerId=Ft),this.nextBtn?this.nextBtn.classList.contains("btn-corner")||(this.handleChange=()=>{this.nextBtn.toggleAttribute("disabled",!this.isChanged()||this.disabled)}):this.nextBtn=Fi({icon:"check"}),e.withoutAvatar||(this.avatarElem=Xt({middleware:e.middleware,size:this.avatarSize,peerId:this.peerId}),this.avatarElem.node.classList.add("avatar-placeholder"),e.doNotEditAvatar||(this.avatarEdit=new vf(t=>{this.uploadAvatar=t,this.handleChange(),this.avatarElem.node.remove()},e.popupOptions),this.avatarEdit.container.append(this.avatarElem.node))),this.inputFields.forEach(t=>{this.listenerSetter.add(t.input)("input",this.handleChange)}),this.handleChange()}get disabled(){return this._disabled}set disabled(e){this._disabled=e,this.inputFields.forEach(t=>t.input.toggleAttribute("disabled",e)),this.handleChange()}lockWithPromise(e,t=!1){this.disabled=!0,e.then(()=>{t&&(this.disabled=!1)},()=>{this.disabled=!1})}}function rv(o,e){const t=document.createElement(e?"div":"textarea");if(e?(t.tabIndex=0,t.contentEditable="true",t.innerHTML=e):t.value=o,t.style.top="0",t.style.left="0",t.style.position="fixed",document.body.appendChild(t),t.focus(),e){const s=window.getSelection();s.removeAllRanges();const i=document.createRange();i.setStartBefore(t.firstChild),i.setEndAfter(t.lastChild),s.addRange(i)}else t.select();try{document.execCommand("copy"),window.getSelection().removeAllRanges()}catch(s){console.error("unable to copy",s)}document.body.removeChild(t)}async function Os(o,e){if(!navigator.clipboard){rv(o);return}try{if(!e){await navigator.clipboard.writeText(o);return}await navigator.clipboard.write([new ClipboardItem({"text/plain":new Blob([o],{type:"text/plain"}),"text/html":new Blob([e],{type:"text/html"})})])}catch(t){console.error("clipboard error",t),rv(o,e)}}function hi(o,e,t=!0,s=!0){let i,n,a,r,l=!1;const c=h=>{const u=a,p=r;try{const m=o.apply(null,h);u(m)}catch(m){console.error("debounce error",m),p(m)}},d=(...h)=>{n||(n=new Promise((p,m)=>(a=p,r=m))),i?(clearTimeout(i),l=!0,r(),n=new Promise((p,m)=>(a=p,r=m))):t&&(c(h),l=!1);const u=Jh.setTimeout(()=>{s&&(!t||l)&&c(h),i===u&&(i=n=a=r=void 0,l=!1)},e);return i=u,n.catch(es),n};return d.clearTimeout=()=>{i&&(Jh.clearTimeout(i),r(),i=n=a=r=void 0,l=!1)},d.isDebounced=()=>!!i,d}function eg(o){if(o.length<3||o.length>32||!/[a-zA-Z]/.test(o.charAt(0)))return!1;for(let e=0;e=3&&eg(o)}class Sf extends xt{constructor(e,t){super(e),this.managers=t,this.checkUsernameDebounced=hi(this.checkUsername.bind(this),150,!1,!0),e.listenerSetter.add(this.input)("input",()=>{const s=this.getValue();if(this.error=void 0,s===this.originalValue||!s.length){this.setState(vn.Neutral),this.options.onChange?.();return}else eg(s)?this.setState(vn.Neutral):this.setError(this.options.invalidText);if(this.input.classList.contains("error")){this.options.onChange?.();return}this.checkUsernameDebounced(s)})}getValue(){let e=this.value;return this.options.head&&(e=e.slice(this.options.head.length),this.setValueSilently(this.options.head+e)),e}checkUsername(e){if(this.checkUsernamePromise)return;this.error=void 0;let t;this.options.peerId?t=this.managers.appChatsManager.checkUsername(this.options.peerId.toChatId(),e):t=this.managers.appUsersManager.checkUsername(e);const s=this.checkUsernamePromise=t.then(i=>{this.getValue()===e&&(i?this.setState(vn.Valid,this.options.availableText):this.setError(this.options.takenText))},i=>{if(this.getValue()===e)switch(this.error=i,i.type){case"USERNAME_PURCHASE_AVAILABLE":{this.setError(this.options.takenText);break}case"USERNAME_INVALID":default:{this.setError(this.options.invalidText);break}}}).then(()=>{this.checkUsernamePromise===s&&(this.checkUsernamePromise=void 0),this.options.onChange?.();const i=this.getValue();i!==e&&this.isValidToChange()&&eg(i)&&this.checkUsername(i)})}}const ov=o=>"touches"in o?o.touches[0]:o;function lv(o,e){return e?Math.hypot(e.pageX-o.pageX,e.pageY-o.pageY):0}function cv(o,e){return{x:(o.pageX+e.pageX)/2,y:(o.pageY+e.pageY)/2}}const Dr=document;let hS=!1;Js.addEventListener("toggle",o=>{hS=o});const Jp={passive:!1},em=!1,lM={capture:!0,passive:!1};class Ao{constructor(e){this.reset=t=>{this.log("reset"),Xe?this.listenerSetter.removeManual(Dr,"touchmove",this.handleMove,Jp):(this.listenerSetter.removeManual(Dr,"mousemove",this.handleMove,em),this.setCursorTo.style.cursor=""),this.hadMove&&this.onReset?.(t),this.releaseWheelDrag?.clearTimeout(),this.releaseWheelZoom?.clearTimeout(),this.resetValues()},this.handleStart=async t=>{if(this.log("start"),this.isMouseDown){const a=t.touches;a?.length===2&&(this.initialDistance=lv(a[0],a[1]),this.initialTouchCenter=cv(a[0],a[1]));return}const s=ov(t);if(![0,1].includes(Math.max(0,s.button??0))||(s.button===1&&oe(t),nw(t)))return;const i=++this.tempId,n=this.verifyTouchTarget?.(t);if(n!==void 0){let a;if(n instanceof Promise){if(a=await n,this.tempId!==i)return}else a=n;if(!a)return this.reset()}if(this.isMouseDown=!0,this.withDelay&&!Xe){const a={...em,once:!0},r=kt(),l=()=>r.resolve(),c=this.listenerSetter.add(Dr)("mousemove",l,a);if(await Promise.race([qs(300),r]),r.resolve(),this.listenerSetter.remove(c),this.tempId!==i)return}this.xDown=s.clientX,this.yDown=s.clientY,this.eventUp=s,Xe?this.listenerSetter.add(Dr)("touchmove",this.handleMove,Jp):this.listenerSetter.add(Dr)("mousemove",this.handleMove,em),this.onStart&&(this.onStart(),this.hadMove=!0,this.handleMove(s))},this.handleMove=t=>{if(this.xDown===void 0||this.yDown===void 0||hS){this.reset();return}if(this.cancelEvent&&oe(t),this.releaseWheelDrag?.isDebounced()||this.releaseWheelZoom?.isDebounced())return;this.log("move");const s=this.eventUp=ov(t),i=s.clientX,n=s.clientY,a=i-this.xDown+this.xAdded,r=n-this.yDown+this.yAdded;if(!this.hadMove){if(!a&&!r)return;this.setHadMove(t)}const l=t.touches;if(this.onZoom&&this.initialDistance>0&&l.length===2){const c=lv(l[0],l[1]),d=cv(l[0],l[1]),h=d.x-this.initialTouchCenter.x,u=d.y-this.initialTouchCenter.y,m={zoomFactor:c/this.initialDistance,initialCenterX:this.initialTouchCenter.x,initialCenterY:this.initialTouchCenter.y,dragOffsetX:h,dragOffsetY:u,currentCenterX:d.x,currentCenterY:d.y};this.onZoom(m)}this.dispatchOnSwipe(a,r,t)},this.handleWheel=t=>{if(!this.hadMove&&this.verifyTouchTarget){const i=this.verifyTouchTarget(t);if(i!==void 0&&!i){this.reset(t);return}}if(oe(t),this.log("wheel"),this.onDoubleClick&&Object.is(t.deltaX,-0)&&Object.is(t.deltaY,-0)&&t.ctrlKey){this.onWheelCapture(t),this.onDoubleClick({centerX:t.pageX,centerY:t.pageY}),this.reset();return}t.metaKey||t.ctrlKey||t.shiftKey?(this.releaseWheelDrag?.isDebounced()&&this.reset(),this.onWheelZoom(t)):this.handleWheelDrag(t)},this.handleWheelDrag=t=>{this.log("wheel drag"),this.onWheelCapture(t),(!this.isDragCanceled.x||Math.sign(this.initialDragOffset.x)===Math.sign(t.deltaX))&&(this.initialDragOffset.x-=t.deltaX),(!this.isDragCanceled.y||Math.sign(this.initialDragOffset.y)===Math.sign(t.deltaY))&&(this.initialDragOffset.y-=t.deltaY);const{x:s,y:i}=this.initialDragOffset;this.releaseWheelDrag(t),this.dispatchOnSwipe(s,i,t,(n,a)=>{this.isDragCanceled={x:n,y:a}})},this.onWheelCapture=t=>{this.hadMove||(this.log("wheel capture"),this.handleStart(t),this.setHadMove(t),this.initialTouchCenter={x:t.x,y:t.y})},this.onWheelZoom=t=>{if(!this.onZoom)return;this.log("wheel zoom"),this.onWheelCapture(t);const s=t.x-this.initialTouchCenter.x,i=t.y-this.initialTouchCenter.y,n=Ht(t.deltaY,-25,25);this.wheelZoom-=n*.01;const a={zoomAdd:this.wheelZoom-1,initialCenterX:this.initialTouchCenter.x,initialCenterY:this.initialTouchCenter.y,dragOffsetX:s,dragOffsetY:i,currentCenterX:t.x,currentCenterY:t.y};this.onZoom(a),this.releaseWheelZoom(t)},_t(this,e),this.log=pi("SWIPE-HANDLER"),this.cursor??(this.cursor="grabbing"),this.cancelEvent??(this.cancelEvent=!0),this.listenerOptions??(this.listenerOptions=Jp),this.setCursorTo??(this.setCursorTo=this.element),this.listenerSetter=new Bt,this.setListeners(),this.resetValues(),this.tempId=0,e.middleware?.onDestroy(()=>{this.reset(),this.removeListeners()}),this.releaseWheelDrag=hi(this.reset,150,!1),this.releaseWheelZoom=hi(this.reset,150,!1)}setListeners(){Xe?(this.withDelay?_a({element:this.element,callback:e=>{oe(e),this.handleStart(e)},listenerSetter:this.listenerSetter,listenerOptions:this.listenerOptions}):this.listenerSetter.add(this.element)("touchstart",this.handleStart,this.listenerOptions),this.onDoubleClick&&this.listenerSetter.add(this.element)("dblclick",e=>{this.onDoubleClick({centerX:e.pageX,centerY:e.pageY})}),this.listenerSetter.add(Dr)("touchend",this.reset)):(this.listenerSetter.add(this.element)("mousedown",this.handleStart,this.listenerOptions),this.listenerSetter.add(Dr)("mouseup",this.reset),(this.onZoom||this.onDoubleClick)&&this.listenerSetter.add(this.element)("wheel",this.handleWheel,lM))}removeListeners(){this.log("remove listeners"),this.reset(),this.listenerSetter.removeAll()}setCursor(e=""){this.cursor=e,!Xe&&this.hadMove&&this.setCursorTo.style.setProperty("cursor",this.cursor,"important")}add(e,t){this.xAdded=e,this.yAdded=t,this.handleMove({clientX:this.eventUp.clientX,clientY:this.eventUp.clientY,target:this.eventUp.target})}resetValues(){++this.tempId,this.hadMove=!1,this.xAdded=this.yAdded=0,this.xDown=this.yDown=this.eventUp=this.isMouseDown=void 0,this.onZoom&&(this.initialDistance=0,this.initialTouchCenter={x:nt.width/2,y:nt.height/2},this.initialDragOffset={x:0,y:0},this.isDragCanceled={x:!1,y:!1},this.wheelZoom=1)}setHadMove(e){this.hadMove||(this.log("had move"),this.hadMove=!0,this.setCursorTo.style.setProperty("cursor",this.cursor,"important"),this.onFirstSwipe?.(e))}dispatchOnSwipe(...e){const t=this.onSwipe(...e);t!==void 0&&t&&this.reset()}}class Cf{constructor(e){this.onSwipe=(t,s)=>{s=Ht(s,this.minY,this.maxY),this.element.style.transform=`translateY(${s}px)`;const i=Math.round(Math.abs(s)/this.elementRect.height),n=this.siblings;this.siblings=[];const a=s<0?"previousElementSibling":"nextElementSibling";let r=this.element[a];for(let l=0;l{this.siblings.includes(l)||(l.style.transform="")}),this.siblings.forEach(l=>{const c=this.elementRect.height*(s<0?1:-1);l.style.transform=`translateY(${c}px)`}),this.scrollableRect){const l=s,c=l>0,h=(c?this.elementRect.bottom:this.elementRect.top)+l-this.addScrollPos;let u=2;h+(c?0:this.elementRect.height)>=this.scrollableRect.bottom||(h-(c?this.elementRect.height:0)<=this.scrollableRect.top?u*=-1:u=void 0),u!==void 0&&(this.scrollable.scrollPosition+=u)}},this.verifyTouchTarget=t=>this.list.classList.contains("is-reordering")?!1:(this.element=this.getSortableTarget(t.target),!!this.element),this.onScroll=()=>{const t=this.scrollable.scrollPosition,s=this.addScrollPos=t-this.startScrollPos,i=this.scrollable.scrollPositionProperty==="scrollTop";this.swipeHandler.add(i?0:s,i?s:0)},this.onStart=()=>{this.list.classList.add("is-reordering"),this.element.classList.add("is-dragging","no-transition"),this.swipeHandler.setCursor("grabbing"),this.elementRect=this.element.getBoundingClientRect(),this.containerRect=this.list.getBoundingClientRect(),this.minY=this.containerRect.top-this.elementRect.top,this.maxY=this.containerRect.bottom-this.elementRect.bottom,this.addScrollPos=0,this.scrollable&&(this.startScrollPos=this.scrollable.scrollPosition,this.scrollableRect=this.scrollable.container.getBoundingClientRect(),this.scrollable.container.addEventListener("scroll",this.onScroll))},this.onReset=async()=>{const t=this.siblings.length,s=t&&t*(this.siblings[0].previousElementSibling===this.element?1:-1),i=Oi(this.element),n=i+s;this.element.classList.remove("no-transition"),this.element.style.transform=s?`translateY(${s*this.elementRect.height}px)`:"",this.swipeHandler.setCursor(""),this.scrollable&&this.scrollable.container.removeEventListener("scroll",this.onScroll),Xe||O(document.body,oe,{capture:!0,once:!0}),st.isAvailable("animations")&&await qs(250),this.list.classList.remove("is-reordering"),this.element.classList.remove("is-dragging"),Ts(this.element,this.list,n,i),[this.element,...this.siblings].forEach(a=>{a.style.transform=""}),this.element=this.siblings=this.elementRect=this.containerRect=this.minY=this.maxY=this.startScrollPos=this.addScrollPos=void 0,s&&this.onSort(i,n)},_t(this,e),this.swipeHandler=new Ao({element:this.list,onSwipe:this.onSwipe,verifyTouchTarget:this.verifyTouchTarget,onStart:this.onStart,onReset:this.onReset,setCursorTo:document.body,middleware:this.middleware,withDelay:!0})}getSortableTarget(e){if(!e)return;let t=zs(e,this.list);return t&&t.classList.contains("cant-sort")&&(t=void 0),t}}function Mt(o){return new Promise((e,t)=>{const{button:s,checkbox:i}=o;s.callback=(l,c)=>{e(i||!c?c?!!c.size:void 0:o.checkboxes.map(d=>c.has(d.text)))};const n=Mr(o.buttons||[s]),a=n.find(l=>l.isCancel);a.callback=()=>{t()},o.buttons=n,o.checkboxes??(o.checkboxes=i&&[i]);const r=se.createPopup(Es,"popup-confirmation",o);r.addEventListener("closeAfterTimeout",()=>{t()}),r.show()})}const Oh="usernames";class If extends Se{constructor(e,t="limit_link",s,i,n){super({title:!0,subtitle:!0,clickable:!0,titleRight:i,subtitleRight:n}),e&&(this.title.classList.add("text-bold"),this.container.classList.add("is-link")),this.container.classList.add(Oh+"-username"),this.subtitle.classList.add(Oh+"-username-status");const a=this.createMedia("abitbigger");a.classList.add(Oh+"-username-icon","avatar-gradient"),s&&(a.dataset.color=s),e&&t==="link_paid"&&this.container.classList.add("is-paid"),a.append(Pe(t))}}class Lf extends Me{constructor(e){super({name:"UsernamesProfileHeader",caption:e.peer.pFlags.bot?"UsernamesBotHelp":e.peerId.isUser()?"UsernamesProfileHelp":"UsernamesChannelHelp"});const{peerId:t,peer:s,usernameInputField:i,listenerSetter:n,middleware:a}=e,r=I.managers,l=t.isUser()?void 0:t.toChatId(),c=e.peer.pFlags.bot?t.toUserId():void 0;c&&i.container.classList.add("disable-hover");const d=this,h=document.createElement("div");h.classList.add(Oh);let u;const p=new hp({getIndex:f=>u.length-u.findIndex(v=>v.username===f.id),onDelete:f=>{f.row.container.remove()},onSort:(f,v)=>{Ts(f.row.container,h,v)},onElementCreate:f=>{const v=u.find(S=>S.username===f.id),y=new If;y.title.textContent="@"+v.username;const w=!!v.pFlags.editable,b=!!v.pFlags.active;return w&&(y.container.dataset.editable="1"),y.makeSortable(),m(y,b),f.row=y,f},middleware:a}),m=(f,v)=>{f.subtitle.replaceChildren(L(f.container.dataset.editable?c?"UsernameLinkBotUsername":"UsernameLinkEditable":v?"UsernameLinkActive":"UsernameLinkInactive")),f.container.classList.toggle("active",v),f.toggleSorting(v)},g=(f=[])=>{u=f,p.getAll().forEach(v=>{f.some(y=>y.username===v.id)||p.delete(v.id)}),f.forEach(v=>{if(!p.has(v.username))p.add(v.username);else{const y=p.get(v.username);p.update(v.username,y),m(y.row,!!v.pFlags.active)}}),d.container.classList.toggle("hide",!p.getAll().size)};g(s.usernames),n.add(I)("peer_title_edit",async({peerId:f})=>{if(f!==t)return;const v=await r.appPeersManager.getPeer(t);g(v.usernames)}),O(h,async f=>{const v=zs(f.target,h);if(!v)return;if(v.dataset.editable){c||oi(i.input,!0,!0);return}const y=v.dataset.username,w=v.classList.contains("active");let b,S;w?(b="UsernameDeactivateLink",S=c?"UsernameDeactivateLinkBotMessage":l?"UsernameDeactivateLinkChannelMessage":"UsernameDeactivateLinkProfileMessage"):(b="UsernameActivateLink",S=c?"UsernameActivateLinkBotMessage":l?"UsernameActivateLinkChannelMessage":"UsernameActivateLinkProfileMessage");try{await Mt({titleLangKey:b,descriptionLangKey:S,button:{langKey:w?"Hide":"Show"}})}catch{return}const C=!w;r.appUsernamesManager.toggleUsername({peerId:t,username:y,active:C}).catch(P=>{P.type==="USERNAMES_ACTIVE_TOO_MUCH"?Mt({titleLangKey:"UsernameActivateErrorTitle",descriptionLangKey:"UsernameActivateErrorMessage",button:{langKey:"OK",isCancel:!0}}).catch(es):console.error("turn username error",P)})}),new Cf({list:h,middleware:a,onSort:(f,v)=>{const y=u.splice(f,1)[0];u.splice(v,0,y),p.updateList();const w=u.filter(b=>b.pFlags.active).map(b=>b.username);r.appUsernamesManager.reorderUsernames({peerId:t,order:w})}}),d.content.append(h)}}function Jc(o){return o.username?o.username:o.usernames?.find(s=>s.pFlags.editable)?.username}function Pf(){const o=document.createElement("div"),e="https://fragment.com/username/",t=co(document.createElement("a")),s=L("Username.Purchase",[t]);return s.classList.add("username-purchase-help"),o.append(s,document.createElement("br"),document.createElement("br")),o.classList.add("hide"),{element:o,setUsername:i=>{i&&(t.href=e+i),o.classList.toggle("hide",!i)}}}class ou extends Vt{static getInitArgs(){return{bioMaxLength:I.managers.apiManager.getLimit("bio"),user:I.managers.appUsersManager.getSelf(),userFull:I.managers.appProfileManager.getProfile(I.myId.toUserId())}}async init(e=ou.getInitArgs()){this.container.classList.add("edit-profile-container"),this.setTitle("EditAccount.Title");const t=[],[s,i,n]=await Promise.all([e.bioMaxLength,e.user,e.userFull]);{const a=Cl(this.scrollable,void 0,"Bio.Description"),r=document.createElement("div");r.classList.add("input-wrapper"),this.firstNameInputField=new xt({label:"EditProfile.FirstNameLabel",name:"first-name",maxLength:70}),this.lastNameInputField=new xt({label:"Login.Register.LastName.Placeholder",name:"last-name",maxLength:64}),this.bioInputField=new xt({label:"EditProfile.BioLabel",name:"bio",maxLength:s}),r.append(this.firstNameInputField.container,this.lastNameInputField.container,this.bioInputField.container),t.push(this.firstNameInputField,this.lastNameInputField,this.bioInputField),this.editPeer=new $d({peerId:I.myId,inputFields:t,listenerSetter:this.listenerSetter,middleware:this.middlewareHelper.get()}),this.content.append(this.editPeer.nextBtn),a.append(this.editPeer.avatarEdit.container,r)}{const a=new Me({name:"EditAccount.Username",caption:!0}),r=document.createElement("div");r.classList.add("input-wrapper"),this.usernameInputField=new Sf({label:"EditProfile.Username.Label",name:"username",plainText:!0,listenerSetter:this.listenerSetter,onChange:()=>{this.editPeer.handleChange();const{error:h}=this.usernameInputField,u=h?.type==="USERNAME_PURCHASE_AVAILABLE";c(u?this.usernameInputField.value:void 0)},availableText:"EditProfile.Username.Available",takenText:"EditProfile.Username.Taken",invalidText:"EditProfile.Username.Invalid"},this.managers),r.append(this.usernameInputField.container);const l=a.caption,{setUsername:c,element:d}=Pf();l.append(d,L("UsernameHelp")),t.push(this.usernameInputField),a.content.append(r),this.scrollable.append(a.container)}{const a=new Lf({peerId:I.myId,peer:i,listenerSetter:this.listenerSetter,usernameInputField:this.usernameInputField,middleware:this.middlewareHelper.get()});this.scrollable.append(a.container)}O(this.editPeer.nextBtn,()=>{this.editPeer.nextBtn.disabled=!0;const a=[],r=this.managers.appProfileManager.updateProfile(this.firstNameInputField.value,this.lastNameInputField.value,this.bioInputField.value);a.push(r.then(()=>{this.close()},l=>{console.error("updateProfile error:",l)})),this.editPeer.uploadAvatar&&a.push(this.editPeer.uploadAvatar().then(l=>this.managers.appProfileManager.uploadProfilePhoto(l))),this.usernameInputField.isValidToChange()&&a.push(this.managers.appUsersManager.updateUsername(this.usernameInputField.value)),Promise.race(a).finally(()=>{this.editPeer.nextBtn.removeAttribute("disabled")})},{listenerSetter:this.listenerSetter}),this.firstNameInputField.setOriginalValue(i.first_name,!0),this.lastNameInputField.setOriginalValue(i.last_name,!0),this.bioInputField.setOriginalValue(n.about,!0),this.usernameInputField.setOriginalValue(Jc(i),!0),this.editPeer.handleChange()}}class cM extends rs{async init(){this.container.classList.add("edit-peer-container","group-type-container");const e=await this.managers.appChatsManager.isBroadcast(this.chatId),t=this.chatFull.linked_chat_id;this.setTitle(e?"ChannelType":"GroupType");const s=new Me({name:e?"ChannelType":"GroupType"}),i=Bd(),n=new Se({radioField:new Di({langKey:e?"ChannelPrivate":"MegaPrivate",name:i,value:"private"}),subtitleLangKey:e?"ChannelPrivateInfo":"MegaPrivateInfo"}),a=new Se({radioField:new Di({langKey:e?"ChannelPublic":"MegaPublic",name:i,value:"public"}),subtitleLangKey:e?"ChannelPublicInfo":"MegaPublicInfo"}),r=Nl([n,a],N=>{const q=[[h.container],[_]];N==="public"&&q.reverse(),q[0].forEach(K=>K.classList.remove("hide")),q[1].forEach(K=>K.classList.add("hide")),b(),$&&!t&&$.container.classList.toggle("hide",N!=="public")});let l=be.getChat(this.chatId);const c={basic:[]},d=(N,q="basic")=>{c[q].push(N)};this.listenerSetter.add(I)("chat_update",N=>{this.chatId===N&&(l=be.getChat(this.chatId),c.basic.forEach(q=>q()))}),s.content.append(r);const h=new Me({}),u=new Se({title:this.chatFull.exported_invite.link,subtitleLangKey:e?"ChannelPrivateLinkHelp":"MegaPrivateLinkHelp",clickable:()=>{Os(this.chatFull.exported_invite.link),Xs(xe.format("LinkCopied",!0))},listenerSetter:this.listenerSetter}),p=ze("btn-primary btn-transparent danger",{icon:"delete",text:"RevokeLink"});O(p,()=>{se.createPopup(Es,"revoke-link",{buttons:[{langKey:"RevokeButton",callback:()=>{const N=qt([p],!0);this.managers.appProfileManager.getChatInviteLink(this.chatId,!0).then(q=>{N(),u.title.textContent=q})}}],titleLangKey:"RevokeLink",descriptionLangKey:"RevokeAlert"}).show()},{listenerSetter:this.listenerSetter}),h.content.append(u.container,p);const m=new Me({caption:!0,noDelimiter:!0}),g=document.createElement("div");g.classList.add("input-wrapper");const f="t.me/";let v,y,w;const b=()=>{v=n.radioField.checked&&E!==f||S.isValidToChange()&&S.input.classList.contains("valid"),y=!!R&&R.checkboxField.checked!==W,w=!!U&&U.checkboxField.checked!==D,k.classList.toggle("is-visible",v||y||w);const{error:N}=S,q=N?.type==="USERNAME_PURCHASE_AVAILABLE";C(q?S.getValue():void 0)},S=new Sf({label:"SetUrlPlaceholder",name:"group-public-link",plainText:!0,listenerSetter:this.listenerSetter,availableText:"Link.Available",invalidText:"Link.Invalid",takenText:"Link.Taken",onChange:b,peerId:this.chatId.toPeerId(!0),head:f},this.managers),{setUsername:C,element:M}=Pf();m.caption.append(M,L(e?"Channel.UsernameAboutChannel":"Channel.UsernameAboutGroup"));const P=new Lf({peerId:this.chatId.toPeerId(!0),peer:l,listenerSetter:this.listenerSetter,usernameInputField:S,middleware:this.middlewareHelper.get()}),_=document.createElement("div");_.append(m.container,P.container);const E=f+(Jc(l)||"");g.append(S.container),m.content.append(g);const k=Fi({icon:"check",className:"is-visible"});this.content.append(k);const x=()=>a.radioField.checked?S.getValue():"",F=async()=>{const N=x(),q=await this.managers.appChatsManager.migrateChat(this.chatId);return N?this.managers.appChatsManager.updateUsername(q,N):this.managers.appChatsManager.makeChannelPrivate(q)},T=async()=>{if(!x()){const q=be.getChat(this.chatId),K=Jc(q);K&&await Mt({descriptionLangKey:e?"ChannelVisibility.Confirm.MakePrivate.Channel":"ChannelVisibility.Confirm.MakePrivate.Group",descriptionLangArgs:[K],button:{langKey:"OK"}})}};O(k,async()=>{v&&await T();const N=lf(k);try{v&&await F(),(y||w)&&await Promise.all([y&&this.managers.appChatsManager.toggleJoinToSend(this.chatId,R.checkboxField.checked),w&&this.managers.appChatsManager.toggleJoinRequest(this.chatId,U.checkboxField.checked)]),this.close()}catch{N()}},{listenerSetter:this.listenerSetter}),this.scrollable.append(s.container,h.container,_);let $,R,U,W,D;if(!e){const N=$=new Me({name:"ChannelSettingsJoinTitle",caption:t?"ChannelSettingsJoinToSendInfo":"ChannelSettingsJoinRequestInfo"});R=new Se({titleLangKey:"ChannelSettingsJoinToSend",checkboxField:new lt({toggle:!0})}),U=new Se({titleLangKey:"ChannelSettingsJoinRequest",checkboxField:new lt({toggle:!0})});const q=()=>t?R.checkboxField.checked:!_.classList.contains("hide"),K=()=>{const G=q();U.container.classList.toggle("hide",!G),!G&&U.checkboxField.checked&&(U.checkboxField.checked=!1)},j=()=>{W=!!l.pFlags.join_to_send,D=!!l.pFlags.join_request,R.checkboxField.setValueSilently(W),U.checkboxField.setValueSilently(D),K(),b()};[R,U].forEach(G=>{this.listenerSetter.add(G.checkboxField.input)("change",()=>{R===G&&K(),b()})}),t||R.container.classList.add("hide"),d(j),j(),N.content.append(R.container,U.container),this.scrollable.append(N.container)}{const N=new Me({name:"SavingContentTitle",caption:e?"RestrictSavingContentInfoChannel":"RestrictSavingContentInfoGroup"});let q;const K=new Se({titleLangKey:"RestrictSavingContent",checkboxField:q=new lt({toggle:!0})});this.listenerSetter.add(q.input)("change",()=>{const G=K.toggleDisability(!0);this.managers.appChatsManager.toggleNoForwards(this.chatId,q.checked).then(()=>{G()})});const j=()=>{q.setValueSilently(!!l.pFlags.noforwards)};d(j),j(),N.content.append(K.container),this.scrollable.append(N.container)}(E!==f||li(l).length?a:n).radioField.checked=!0,S.setOriginalValue(E,!0)}}class Mf{constructor(e){this.loading=!1,this.loaded=!1,_t(this,e),e.scrollable.onScrolledBottom=()=>{this.load()}}load(){if(this.loaded)return Promise.resolve();if(this.loading)return this.promise;this.loading=!0,this.promise=this.getPromise().then(e=>{this.loading=!1,this.promise=void 0,e?(this.loaded=!0,this.scrollable.onScrolledBottom=null):this.scrollable.checkForTriggers()},()=>{this.promise=void 0,this.loading=!1})}}function dM(o,e){if(o.default_banned_rights){e=Gi(e);const t=o.default_banned_rights.pFlags;for(const s in t)e.pFlags[s]=t[s]}return e}function La(o,e,t,s){if(!o||o.pFlags.deactivated&&e!=="view_messages")return!1;const i=t===void 0;if(o.pFlags.creator&&i)return!0;if(o._==="chatForbidden"||o._==="channelForbidden"||o.pFlags.left&&!o.pFlags.megagroup||!t&&(t=o.admin_rights||o.banned_rights||o.default_banned_rights,!t))return!1;let n={};t&&(n=t.pFlags);const a=t._==="chatAdminRights";switch(e){case"embed_links":case"send_games":case"send_gifs":case"send_inline":case"send_media":case"send_messages":case"send_polls":case"send_stickers":case"send_photos":case"send_videos":case"send_roundvideos":case"send_audios":case"send_voices":case"send_docs":case"send_plain":{if(!a&&n[e]||o._==="channel"&&!o.pFlags.megagroup&&!n.post_messages)return!1;break}case"delete_messages":case"manage_call":return!!n[e];case"pin_messages":return a?!!(n[e]||!o.pFlags.megagroup&&n.post_messages):!n[e];case"invite_links":return o._==="chat"?!1:a&&!!n.invite_users;case"change_type":case"delete_chat":return!1;case"change_info":case"invite_users":return a||o.pFlags.broadcast?!!n[e]:!n[e];case"delete_stories":case"edit_stories":case"post_stories":case"add_admins":case"anonymous":case"post_messages":case"edit_messages":return a&&!!n[e];case"ban_users":case"change_permissions":return a&&!!n.ban_users;case"view_participants":return!!(o._==="chat"||!o.pFlags.broadcast||o.pFlags.creator||o.admin_rights);case"create_giveaway":return a&&!!n.post_messages;case"manage_topics":return a?!!n[e]:!n[e]}return!0}function Xa(o){return[...new Set(o)]}function Il(o){return typeof o!="object"?o:o.peer?Ze(o.peer):o.user_id.toPeerId()}function hM(o){return!!(o&&!o.pFlags.deleted&&o.id.toPeerId()!==wr)}function uS(o=0){return`index_${o}`}function Cn(o,e=uS(o.folder_id)){return o?.[e]}async function Hd({container:o,emoji:e,width:t,height:s,assetName:i,middleware:n,managers:a=I.managers,loop:r=!1,autoplay:l=!0}){o||(o=document.createElement("div")),o.classList.add("media-sticker-wrapper");let c;if(i)c=xs.loadAnimationAsAsset({container:o,loop:r,autoplay:l,width:t,height:s,noCache:!0,middleware:n},i).then(d=>xs.waitForFirstFrame(d));else if(e){const d=await a.appStickersManager.getAnimatedEmojiSticker(e);d&&(c=$s({doc:d,div:o,loop:r,play:l,width:t,height:s,emoji:e,managers:a,middleware:n}).then(h=>h.render))}return{container:o,promise:c}}const uM=re("
"),pM=re("
");async function pS({middleware:o,title:e,description:t,hide:s,assetName:i="UtyanSearch",width:n=140,height:a=140,isFullSize:r}){const{container:l,promise:c}=await Hd({width:n,height:a,assetName:i,middleware:o,loop:!0});if(!o()||(await c,!o()))return;l.classList.add("selector-empty-placeholder-sticker");let d;return Nt(h=>{o.onClean(h),d=(()=>{const u=uM(),p=u.firstChild;return u.classList.toggle("is-full",!!r),A(u,l,p),A(p,e),A(u,(()=>{const m=H(()=>!!t());return()=>m()&&(()=>{const g=pM();return A(g,t),g})()})(),null),Te(()=>u.classList.toggle("hide",!!s())),u})()}),d}function mS(o,e,t,s,i,n){const a=o.canvas.dpr;a&&(e*=a,t*=a,s*=a),o.beginPath(),o.arc(e,t,s,0,2*Math.PI,!1),o.closePath(),i&&o.fill()}function mM(o,e,t,s,i,n){return mS(o,e+s,t+s,s,i)}function Uh(o,e,t,s,i,n,a,r){const l=o.canvas.dpr;if(l&&(e*=l,t*=l,s*=l,i*=l),typeof n=="number")l&&(n*=l),n={tl:n,tr:n,br:n,bl:n};else{const c={tl:0,tr:0,br:0,bl:0};for(const d in c)n[d]=n[d]?l?n[d]*l:n[d]:c[d]}o.beginPath(),o.moveTo(e+n.tl,t),o.lineTo(e+s-n.tr,t),o.quadraticCurveTo(e+s,t,e+s,t+n.tr),o.lineTo(e+s,t+i-n.br),o.quadraticCurveTo(e+s,t+i,e+s-n.br,t+i),o.lineTo(e+n.bl,t+i),o.quadraticCurveTo(e,t+i,e,t+i-n.bl),o.lineTo(e,t+n.tl),o.quadraticCurveTo(e,t,e+n.tl,t),o.closePath(),o.fill()}class gM{constructor(){this.font="30pt Helvetica",this.currTime=Date.now(),this.diffTime=0,this.spread=0,this.paused=!1,this.pausedTime=0,this.pauseInterval=850,this.lightSource=0,this.inc=.032,this.lightSpread=.55,this.animations=["slide","slide","slide","slide"],this.currentAnimationIndex=0}keepTime(){this.diffTime=Date.now()-this.currTime,this.currTime=Date.now()}cycleAnimation(){++this.currentAnimationIndex,this.currentAnimationIndex>=this.animations.length&&(this.currentAnimationIndex=0)}animate(){const e=this.animations[this.currentAnimationIndex];if(e==="glow")return this.animateGlow();if(e==="slide")return this.animateSlide();console.log("unknown animation type: "+String(e))}animateGlow(){var e=255,t=68,s=t,i=10,n=800;return()=>{var a=i*(this.diffTime/16.666666666666668);return this.paused?Date.now()-this.pausedTime>n&&(s=t,this.cycleAnimation(),this.paused=!1):(s=parseInt(""+(s+a)),s>=e&&(this.paused=!0,this.pausedTime=Date.now())),"rgb("+s+","+s+","+s+")"}}animateSlide(){var e=this.ctx.createLinearGradient(0,0,this.canvas.width,0),t=this.inc*(this.diffTime/(1e3/60)),s,i,n;if(this.paused){if(Date.now()-this.pausedTime>this.pauseInterval)return this.lightSource=-.6,this.cycleAnimation(),this.paused=!1,this.animateSlide()}else this.lightSource+=t,this.lightSource>1+this.lightSpread&&(this.paused=!0,this.pausedTime=Date.now());n=Ht(this.lightSource,0,1),s=Ht(this.lightSource-this.lightSpread,0,1),i=Ht(this.lightSource+this.lightSpread,0,1);const a=ks.getProperty("background-color-true",this.night),r=ks.getProperty("surface-color",this.night);return e.addColorStop(s,a),e.addColorStop(n,r),e.addColorStop(i,a),e}settings(e={}){this.canvas=e.canvas??document.createElement("canvas"),this.ctx=this.canvas.getContext("2d"),this.font=e.font??this.font,this.lightSpread=e.lightSpread??this.lightSpread,this.inc=e.inc??this.inc,this.animations=e.animations??this.animations,this.text=e.text??this.text,this.fillStyle=e.fillStyle,this.canvas.classList.add("shimmer-canvas")}on(){const{width:e,height:t}=this.canvas;this.keepTime(),this.ctx.clearRect(0,0,e,t),this.font&&(this.ctx.font=this.font),this.ctx.fillStyle=this.animate(),this.ctx.fillRect(0,0,e,t),this.fillStyle&&(this.ctx.fillStyle=this.fillStyle,this.ctx.fillRect(0,0,e,t)),this.text&&this.ctx.fillText(this.text,50,50)}}class gS{constructor(e={}){this.onThemeChange=()=>{this.stopAnimation(),this.startAnimation()},this.onResize=()=>{const{canvas:t}=this,{width:s,height:i,dpr:n}=t;this.updateCanvasSize(),!(t.width===s&&t.height===i&&t.dpr===n)&&(this.stopAnimation(),this.startAnimation())},this.shimmer=new gM,this.shimmer.night=this.night=e.night,this.tempId=0,this.canvas=document.createElement("canvas"),this.canvas.classList.add("dialogs-placeholder-canvas"),this.ctx=this.canvas.getContext("2d"),this.generatedValues=[],this.avatarSize=e.avatarSize??54,this.avatarMarginRight=e.avatarMarginRight??10,this.marginVertical=e.marginVertical??9,this.marginLeft=e.marginLeft??17,this.gapVertical=e.gapVertical??0,this.totalHeight=e.totalHeight??this.avatarSize+this.marginVertical*2,this.lineHeight=10,this.lineBorderRadius=6,this.lineMarginVertical=e.lineMarginVertical??8,this.statusWidth=e.statusWidth??24,this.noSecondLine=e.noSecondLine}attach({container:e,rect:t,getRectFrom:s,onRemove:i,blockScrollable:n}){const{canvas:a}=this;this.detachTime=void 0,this.onRemove=i,this.getRectFrom=typeof s=="function"?s:(s||e).getBoundingClientRect.bind(s||e),(this.blockScrollable=n)&&(n.container.style.overflowY="hidden"),this.updateCanvasSize(t),this.startAnimation(),e.append(a)}detach(e){this.detachTime||(this.availableLength=e,this.detachTime=Date.now(),st.isAvailable("animations")||this.remove())}removeWithoutUnmounting(){this.stopAnimation(),this.onRemove?.(),this.onRemove=void 0}remove(){this.stopAnimation(),this.canvas.parentElement&&(this.canvas.remove(),this.blockScrollable&&(this.blockScrollable.container.style.overflowY="",this.blockScrollable=void 0)),this.onRemove?.(),this.onRemove=void 0}updateCanvasSize(e=this.getRectFrom()){const{canvas:t}=this,s=t.dpr=window.devicePixelRatio;t.width=e.width*s,t.height=e.height*s,t.style.width=e.width+"px",t.style.height=e.height+"px"}renderDetachAnimationFrame(){const{canvas:e,ctx:t,detachTime:s,length:i,availableLength:n}=this;if(s){if(!st.isAvailable("animations")){this.remove();return}}else return;const{width:a}=e;t.globalCompositeOperation="destination-out";const r=150,l=15,c=Date.now()-s;let d=!0;for(let h=0;h=n?l*(n-1):l*h,p=c-u;if(p<=0){d=!1;continue}const m=iS(p,0,1,r);t.beginPath(),t.rect(0,this.dialogHeight*h,a,this.dialogHeight),t.fillStyle=`rgba(0, 0, 0, ${m})`,t.fill(),m<1&&(d=!1)}t.globalCompositeOperation="source-over",d&&this.remove()}renderFrame(){this.shimmer.on(),this.renderDetachAnimationFrame()}startAnimation(){const{canvas:e,shimmer:t}=this,s=++this.tempId,i=this.createPattern();t.settings({canvas:e,fillStyle:i});const n=()=>this.tempId===s;this.renderFrame(),yl(()=>n()?(st.isAvailable("animations")&&this.renderFrame(),n()):!1),I.addEventListener("theme_changed",this.onThemeChange),$e.addEventListener("resize",this.onResize)}stopAnimation(){++this.tempId,I.removeEventListener("theme_changed",this.onThemeChange),$e.removeEventListener("resize",this.onResize)}createPattern(){const{canvas:e,ctx:t}=this,s=document.createElement("canvas"),i=s.getContext("2d"),n=e.dpr;s.dpr=n,s.width=e.width,s.height=e.height,i.fillStyle=ks.getProperty("surface-color",this.night),i.fillRect(0,0,s.width,s.height),i.fillStyle="#000",i.globalCompositeOperation="destination-out";const a=this.dialogHeight=this.totalHeight*n,r=this.gapVertical*n;let l=0;const c=this.length=Math.ceil(e.height/a);for(let d=0;d{e&&oe(s),o(s)},t}class Ai{constructor(e){this.container=document.createElement("div"),this.list=qe.createChatList(),this.chatsContainer=document.createElement("div"),this.selected=new Set,this.freezed=!1,this.folderId=0,this.offsetIndex=0,this.query="",this.loadedWhat={},this.renderedPeerIds=new Set,this.peerType=["dialogs"],this.multiSelect=!0,this.rippleEnabled=!0,this.avatarSize="abitbigger",this.tempIds={},this.selfPresence="Presence.YourChat",this.needSwitchList=!1,this.design="round",this.participants=new Map,this.onInput=()=>{const i=this.input.value;if(this.query===i)return;(this.peerType.includes("contacts")||this.peerType.includes("dialogs"))&&(this.cachedContacts=void 0),this.peerType.includes("dialogs")&&(this.folderId=0,this.offsetIndex=0);for(const r in this.tempIds)++this.tempIds[r];const n=this.list;this.oldList=n,this.list=qe.createChatList(),this.promise=void 0,this.query=i,this.renderedPeerIds.clear(),this.needSwitchList=!0,this.middlewareHelperLoader.clean(),this.loadedWhat={},this.peerType.includes("dialogs")&&(this.loadedWhat.dialogs=!1,this.loadedWhat.archived=!1,this.loadedWhat.contacts=!1),this.peerType.includes("contacts")&&(this.loadedWhat.contacts=!1),this.peerType.includes("channelParticipants")&&(this.loadedWhat.channelParticipants=!1),this.peerType.includes("custom")&&(this.loadedWhat.custom=!1),n.style.position="absolute";const a=n.parentElement?.clientHeight??0;a&&(n.style.overflow="hidden",n.style.height=`${a}px`),a&&this.dialogsPlaceholder?.attach({container:this.section.content,blockScrollable:this.scrollable,getRectFrom:()=>{const r=this.scrollable.container.getBoundingClientRect();return{width:this.section.content.getBoundingClientRect().width,height:r.height}}}),this.emptySearchPlaceholderHideSetter?.(!0),this.getMoreResults()},this.checkForTriggers=()=>{this.scrollable.checkForTriggers()},this.processPlaceholderOnResults=()=>{const i=this.list.childElementCount;if(i)this.dialogsPlaceholder?.detach(i),this.emptySearchPlaceholderHideSetter?.(!0),this.emptySearchPlaceholderQuerySetter?.(this.query);else if(this.emptySearchPlaceholderMiddlewareHelper)this.dialogsPlaceholder?.detach(i),this.emptySearchPlaceholderHideSetter(!1),this.emptySearchPlaceholderQuerySetter(this.query);else{this.emptySearchPlaceholderMiddlewareHelper=Rt();const n=this.emptySearchPlaceholderMiddlewareHelper.get(),[a,r]=te(this.query),[l,c]=te(),[d,h]=te(!1);return this.emptySearchPlaceholderQuerySetter=r,this.emptySearchPlaceholderHideSetter=h,Nt(u=>{n.onClean(u),me(()=>{c(L("RequestJoin.List.SearchEmpty",[_e(a())]))})}),pS({middleware:n,title:()=>L("SearchEmptyViewTitle"),description:l,hide:d}).then(u=>{n()&&this.section.content.prepend(u)})}},_t(this,e),this.checkboxSide??(this.checkboxSide="right"),this.exceptSelf??(this.exceptSelf=!1),this.meAsSaved??(this.meAsSaved=!(this.peerType.length===1&&this.peerType[0]==="channelParticipants")),this.headerSearch??(this.headerSearch=this.multiSelect&&!this.noSearch),this.noShadow??(this.noShadow=!!this.input||!this.sectionCaption),this.excludePeerIds??(this.excludePeerIds=new Set),this.exceptSelf&&this.excludePeerIds.add(I.myId),this.middlewareHelper=e.middleware.create(),this.middlewareHelperLoader=this.middlewareHelper.get().create(),this.noPlaceholder||(this.dialogsPlaceholder=new gS(e.placeholderSizes||{avatarSize:42,avatarMarginRight:18,marginVertical:7,marginLeft:12+(this.design==="square"?48:0),totalHeight:56,gapVertical:e.placeholderElementsGap,statusWidth:0,night:this.night})),this.container.classList.add("selector","selector-"+this.design,"selector-"+this.checkboxSide);const t=(this.renderResultsFunc||this.renderResults).bind(this);if(this.renderResultsFunc=async(i,n)=>{const{needSwitchList:a}=this,r=this.middlewareHelperLoader.get();if(a&&(this.needSwitchList=!1,this.oldList.replaceWith(this.list),this.oldList=void 0),i=i.filter(l=>{if(this.excludePeerIds.has(l))return!1;const c=!this.renderedPeerIds.has(l);return c&&this.renderedPeerIds.add(l),c}),this.filterPeerTypeBy){const l=typeof this.filterPeerTypeBy=="function";if(i=await tn(i,async c=>{if(c.isPeerId()){if(l){const d=await this.managers.appPeersManager.getPeer(c);return this.filterPeerTypeBy(d)}else for(const d of this.filterPeerTypeBy)if(await this.managers.appPeersManager[d](c))return!0;return!1}return!0}),!r())return}await t(i,n),this.promise||this.processPlaceholderOnResults(),this.chatRightsActions?.some(l=>l.startsWith("send_"))&&tn(i,async l=>{const c=l.toUserId();return this.managers.appUsersManager.isPremiumRequiredToContact(c)}).then(l=>{for(const c of l){const d=this.getElementByPeerId(c.toPeerId(!1));if(!d)continue;const h=Pe("premium_lock","selector-premium-lock");d.append(h),d.classList.add("is-premium-locked")}})},!this.noSearch){this.input=document.createElement("input"),this.input.classList.add("selector-search-input"),this.input.type="text",ls(this.input,this.placeholder||"SendMessageTo",void 0,"placeholder");const i=hi(this.onInput,200,!1,!0);this.input.addEventListener("input",i)}if(this.headerSearch){const i=this.searchSection=new Me({});i.innerContainer.classList.add("selector-search-section"),i.container.classList.add("selector-search-section-container");const n=document.createElement("div");n.classList.add("selector-search-container"),this.selectedContainer=document.createElement("div"),this.selectedContainer.classList.add("selector-search"),this.selectedContainer.append(this.input),n.append(this.selectedContainer),this.selectedScrollable=new Ci(n),this.multiSelect&&O(this.selectedContainer,a=>{if(this.freezed)return;let r=a.target;if(r=z(r,"selector-user"),!r)return;const l=r.dataset.key,c=this.chatsContainer.querySelector('[data-peer-id="'+l+'"]');c?Ss(c):this.remove(l.toPeerId())}),i.content.append(n),this.container.append(i.container)}this.chatsContainer.classList.add("chatlist-container");const s=this.section=new Me({name:this.sectionNameLangPackKey,caption:this.sectionCaption,noShadow:this.noShadow});this.sectionNameLangPackKey&&(s.content=s.generateContentElement()),this.sectionCaption||(s.content.classList.add("selector-list-section-content"),s.container.classList.add("selector-list-section-container")),s.content.append(this.list),this.chatsContainer.append(s.container),this.scrollable?this.scrollable.append(this.chatsContainer):this.scrollable=new Ci(this.chatsContainer),O(this.chatsContainer,i=>{const n=Rh(i.target,"data-peer-id");if(!n||(oe(i),this.freezed))return;let a=n.dataset.peerId;if(a=a.isPeerId()?a.toPeerId():a,a.isPeerId()&&n.classList.contains("is-premium-locked")){Re({peerId:a,onlyFirstName:!0}).then(c=>{Ee({langPackKey:"OnlyPremiumCanMessage",langPackArguments:[c,ti(()=>{Er(),Yt.show()})]})});return}if(this.onSelect){this.onSelect(a);return}if(!this.multiSelect){this.add({key:a});return}if(!(this.selected.has(a)?this.remove(a):this.add({key:a})))return;const l=n.querySelector("input");l.checked=!l.checked}),this.scrollable.onScrolledBottom=()=>{this.getMoreResults()},this.input&&!this.noDelimiter&&this.scrollable.prepend(dp()),this.listenerSetter=new Bt,this.container.append(this.chatsContainer),this.appendTo.append(this.container),this.channelParticipantsUpdateFilter&&this.listenerSetter.add(I)("chat_participant",i=>{const n=i.new_participant,a=i.user_id.toPeerId(!1),r=this.channelParticipantsUpdateFilter(n);r?this.participants.set(a,n):this.participants.delete(a),r?this.renderResultsFunc([a],!1):this.deletePeerId(a)}),e.middleware.onDestroy(()=>{this.destroy()}),setTimeout(()=>{const i=this.getMoreResults();e.onFirstRender&&i.then(()=>{e.onFirstRender()})},0)}static convertPeerTypes(e){const t={bots:"isBot",users:"isRegularUser",groups:"isAnyGroup",channels:"isBroadcast"};return e.map(i=>t[i])}setLimit(e,t){this.limit=e,this.limitCallback=t}destroy(){this.middlewareHelper.destroy(),this.emptySearchPlaceholderMiddlewareHelper?.destroy(),this.listenerSetter.removeAll(),this.dialogsPlaceholder?.removeWithoutUnmounting()}deletePeerId(e){const t=this.list.querySelector(`[data-peer-id="${e}"]`),s=t?.dialogElement;s?s.remove():t?.remove(),this.renderedPeerIds.delete(e),this.promise||this.processPlaceholderOnResults()}clearInput(){this.input.value="",this.onInput()}async renderSaved(){!this.exceptSelf&&!this.offsetIndex&&this.folderId===0&&this.peerType.includes("dialogs")&&(!this.query||await this.managers.appUsersManager.testSelfSearch(this.query))&&await this.renderResultsFunc([I.myId])}getTempId(e){var s;(s=this.tempIds)[e]??(s[e]=0);const t=++this.tempIds[e];return{tempId:t,middleware:()=>this.tempIds[e]===t}}async getMoreDialogs(){if(this.loadedWhat.dialogs&&this.loadedWhat.archived)return;const e=nt.height/56*1.25|0,{middleware:t}=this.getTempId("dialogs"),s=this.managers.dialogsStorage.getDialogs({query:this.query,offsetIndex:this.offsetIndex,limit:e,filterId:this.folderId,skipMigrated:!0});s.catch(()=>{t()&&(this.loadedWhat[this.loadedWhat.dialogs?"archived":"dialogs"]=!0)});const i=await s;if(!t())return;let n=i.dialogs;if(n.length){const a=Cn(n[n.length-1])||0;if(n=n.slice(),Ia(n,r=>r.peerId===I.myId),this.chatRightsActions&&(n=await tn(n,r=>this.filterByRights(r.peerId)),!t())||(await this.renderSaved(),!t()))return;this.offsetIndex=a}if(await this.renderResultsFunc(n.map(a=>a.peerId)),i.isEnd)if(this.loadedWhat.dialogs){if(this.loadedWhat.archived=!0,!this.loadedWhat.contacts)return this.getMoreContacts()}else return await this.renderSaved(),t()?(this.loadedWhat.dialogs=!0,this.offsetIndex=0,this.folderId=1,this.getMoreDialogs()):void 0;else if(this.renderedPeerIds.sizeLa(t,s)))return!0}async getMoreContacts(){if(this.loadedWhat.contacts)return;const e=this.peerType.includes("contacts");if(!this.cachedContacts){const{middleware:i}=this.getTempId("contacts"),n=Promise.all([e?this.managers.appUsersManager.getContactsPeerIds(this.query):[],this.query?this.managers.appUsersManager.searchContacts(this.query):void 0]);n.catch(()=>{i()&&(this.loadedWhat.contacts=!0)});const[a,r]=await n;if(!i())return;if(r){let l=e?r.my_results.concat(r.results):r.my_results;if(this.chatRightsActions&&(l=await tn(l,c=>this.filterByRights(c)),!i()))return;this.peerType.includes("dialogs")||(l=l.filter(c=>c.isUser())),this.cachedContacts=Xa(a.concat(l))}else this.cachedContacts=a.slice();fs(this.cachedContacts,I.myId)}const t=nt.height/56*1.25|0,s=this.cachedContacts.splice(0,t);await this.renderResultsFunc(s),this.cachedContacts.length||(this.loadedWhat.contacts=!0)}async getMoreChannelParticipants(){if(this.loadedWhat.channelParticipants)return;const e=50;let t;this.channelParticipantsFilter?t=typeof this.channelParticipantsFilter=="function"?this.channelParticipantsFilter(this.query):this.channelParticipantsFilter:t={_:"channelParticipantsSearch",q:this.query};const{middleware:s}=this.getTempId("channelParticipants"),i=this.managers.appProfileManager.getParticipants({id:this.peerId.toChatId(),filter:t,limit:e,offset:this.list.childElementCount});i.catch(()=>{s()&&(this.loadedWhat.channelParticipants=!0)});const n=await i;if(!s())return;const{participants:a}=n,r=a.map(c=>{const d=Il(c);return this.participants.set(d,c),d});this.exceptSelf&&fs(r,I.myId),await this.renderResultsFunc(r);const l=n.count??a.length;(this.list.childElementCount>=l||a.length{e()&&(this.loadedWhat.custom=!0)});const s=await t;if(!e())return;const{result:i,isEnd:n}=s;this.exceptSelf&&fs(i,I.myId),await this.renderResultsFunc(i),n&&(this.loadedWhat.custom=!0)}_getMoreResults(){if(this.peerType.includes("dialogs")&&!this.loadedWhat.archived)return this.getMoreSomething("dialogs");if((this.peerType.includes("contacts")||this.peerType.includes("dialogs"))&&!this.loadedWhat.contacts)return this.getMoreSomething("contacts");if(this.peerType.includes("channelParticipants")&&!this.loadedWhat.channelParticipants)return this.getMoreSomething("channelParticipants");if(this.peerType.includes("custom")&&!this.loadedWhat.custom)return this.getMoreSomething("custom")}getMoreResults(){if(this.promise)return this.promise;const e=this._getMoreResults();if(!e)return this.processPlaceholderOnResults(),Promise.resolve();const t=this.middlewareHelperLoader.get(),s=this.promise=e.catch(i=>{console.error("get more result error",i)}).then(()=>{if(this.promise===s&&(this.promise=void 0),t()){const n=Object.values(this.loadedWhat).every(r=>r),a=this.list.childElementCount;if(n&&!a)return this.dialogsPlaceholder?.detach(a),this.processPlaceholderOnResults();(a||n)&&(this.dialogsPlaceholder?.detach(a),this.emptySearchPlaceholderHideSetter?.(!0))}return this.checkForTriggers(),this.promise});return s}getMoreSomething(e){return{dialogs:this.getMoreDialogs,contacts:this.getMoreContacts,channelParticipants:this.getMoreChannelParticipants,custom:this._getMoreCustom}[e].call(this)}async renderResults(e,t){!this.peerType.includes("dialogs")&&this.loadedWhat.contacts&&(e=await tn(e,i=>this.managers.appUsersManager.isNonContactUser(i)));const s=e.map(async i=>{const n=qe.addDialogNew({peerId:this.getPeerIdFromKey?.(i)??i,container:this.list,rippleEnabled:this.rippleEnabled,avatarSize:this.avatarSize,meAsSaved:this.meAsSaved,append:t,wrapOptions:{middleware:this.middlewareHelperLoader.get()},withStories:this.withStories});this.getPeerIdFromKey&&(n.container.dataset.peerId=i),n.container.dialogElement=n;const{dom:a}=n;if(this.multiSelect){const l=this.selected.has(i);a.containerEl.prepend(this.checkbox(l))}let r;this.getSubtitleForElement&&(r=await this.getSubtitleForElement(i)),r||(r=await this.wrapSubtitle(i)),a.lastMessageSpan.append(r),this.processElementAfter&&await this.processElementAfter(i,n)});return Promise.all(s)}async wrapSubtitle(e){let t;return e.isAnyChat()?t=await ya(e.toChatId()):e===I.myId&&this.meAsSaved?t=L(this.selfPresence):t=Tr(await this.managers.appUsersManager.getUser(e.toUserId())),t}checkbox(e){const t=new lt({round:this.design==="round"});return e&&(t.input.checked=e),t.label}static renderEntity({key:e,middleware:t,title:s,avatarSize:i,fallbackIcon:n,meAsSaved:a=!0}){const r=document.createElement("div");r.classList.add("selector-user"),r.middlewareHelper=t.create();const l=document.createElement("div");l.classList.add("selector-user-avatar-container");const c=document.createElement("div");c.classList.add("selector-user-avatar-close"),c.append(Pe("close"));const d=Xt({middleware:r.middlewareHelper.get(),size:i,isDialog:a});d.node.classList.add("selector-user-avatar"),l.append(d.node,c),r.dataset.key=""+e;const h=[];if(e.isPeerId()){if(s===void 0){const u=new Ot;h.push(u.update({peerId:e.toPeerId(),dialog:a})),s=u.element}d.render({peerId:e}),h.push(d.readyThumbPromise)}else n&&d.setIcon(n);if(s){const u=document.createElement("div");u.classList.add("selector-user-title"),typeof s=="string"?u.innerHTML=s:(ht(u,s),u.append(s)),r.append(u)}return r.insertAdjacentElement("afterbegin",l),{element:r,avatar:d,promises:h}}add({key:e,title:t,scroll:s=!0,fireOnChange:i=!0,fallbackIcon:n}){if(this.limit&&this.selected.size>=this.limit)return this.limitCallback?.(),!1;if(this.selected.add(e),!this.multiSelect||!this.input)return i&&this.onChange?.(this.selected.size),!!this.multiSelect;this.query.trim()&&this.clearInput();const a=Ai.renderEntity({key:e,middleware:this.middlewareHelper.get(),title:t,avatarSize:32,fallbackIcon:n}),{element:r}=a;return s&&r.classList.add("scale-in"),this.selectedContainer.insertBefore(r,this.input),i&&this.onChange?.(this.selected.size),s&&this.selectedScrollable.scrollIntoViewNew({element:this.input,position:"center"}),a}remove(e,t=!0){if(!this.multiSelect)return!1;if(!this.input)return this.selected.delete(e),t&&this.onChange?.(this.selected.size),!0;const s=this.selectedContainer.querySelector(`[data-key="${e}"]`);s.classList.remove("scale-in"),s.offsetWidth,s.classList.add("scale-out");const i=()=>{this.selected.delete(e),s.remove(),s.middlewareHelper.destroy(),t&&this.onChange?.(this.selected.size)};return st.isAvailable("animations")?s.addEventListener("animationend",i,{once:!0}):i(),!0}getSelected(){return[...this.selected]}getElementByPeerId(e){return this.chatsContainer.querySelector(`[data-peer-id="${e}"]`)}toggleElementCheckboxByPeerId(e,t){const s=this.getElementByPeerId(e);if(!s)return;const i=s.querySelector("input");i.checked=t===void 0?!i.checked:t}addBatch(e){e.length&&(e.forEach(t=>{this.add({key:t,scroll:!1,fireOnChange:!1}),this.toggleElementCheckboxByPeerId(t,!0)}),this.onChange?.(this.selected.size))}removeBatch(e){e.length&&(e.forEach(t=>{this.remove(t,!1),this.toggleElementCheckboxByPeerId(t,!1)}),this.onChange?.(this.selected.size))}addInitial(e){e?.length&&(this.addBatch(e),this.input&&window.requestAnimationFrame(()=>{this.selectedScrollable.scrollIntoViewNew({element:this.input,position:"center",forceDirection:Qh.Static})}))}}async function fM({topic:o,middleware:e}){const t=Ms(32,32),s=new Se({title:_e(o.title),clickable:!0});s.container.dataset.peerId=""+o.id,s.container.classList.add("selector-forum-topic");const i=s.createMedia("abitbigger"),n=Xt({peerId:o.peerId,threadId:o.id,middleware:e,size:t.width,wrapOptions:{middleware:e,textColor:"primary-text-color",customEmojiSize:t}});return await n.readyThumbPromise,i.append(n.node),s.container}class Cs extends se{constructor(e){super("popup-forward",{closable:!0,overlayClosable:!0,onBackClick:()=>{this.forumSelector.input.replaceWith(this.selector.input),this.transition(this.selector.container),this.forumNavigationItem&&(yt.removeItem(this.forumNavigationItem),this.forumNavigationItem=void 0)},body:!0,title:e.titleLangKey??!0});const t=!!e.onMultiSelect;let s;const i=async(a,r)=>{if(s)return;if(e.useTopics&&!Array.isArray(a)&&!r&&await this.managers.appPeersManager.isForum(a)){s=!0,await this.createForumSelector({tabsContainer:n,peerId:a,placeholder:e.placeholder,onSelect:i}),s=void 0;return}const l=e.onSelect||e.onMultiSelect;if(l){const c=l(a,r);if(c instanceof Promise)try{await c}catch{return}}this.selector=null,this.hide()},n=document.createElement("div");n.classList.add("tabs-container"),this.body.append(n),this.selector=new Ai({...e,middleware:this.middlewareHelper.get(),appendTo:n,onChange:t?a=>{this.btnConfirm.classList.toggle("is-visible",!!a)}:void 0,onSelect:t?void 0:i,onFirstRender:()=>{this.show(),this.selector.checkForTriggers(),Xe||this.selector.input.focus()},multiSelect:t,rippleEnabled:!1,avatarSize:"abitbigger",managers:this.managers,night:this.night,headerSearch:t}),this.selector.container.classList.add("tabs-tab"),this.scrollable=this.selector.scrollable,t?(this.header.after(this.selector.searchSection.container),this.btnConfirm=this.btnConfirmOnEnter=Fi({icon:"check"}),this.body.append(this.btnConfirm),O(this.btnConfirm,()=>{i(this.selector.getSelected())},{listenerSetter:this.listenerSetter}),e.initial&&this.selector.addInitial(e.initial),this.selector.container.classList.add("active")):(e.headerLangPackKey?this.title.append(L(e.headerLangPackKey)):this.title.append(this.selector.input),this.attachScrollableListeners(),this.transition=Qa({content:n,type:"navigation",transitionTime:150,animateFirst:!1,onTransitionEnd:a=>{a?this.selector.clearInput():Array.from(n.children).forEach(r=>{r!==this.selector.container&&(r.middlewareHelper.destroy(),r.remove())})}}),this.transition(this.selector.container))}async createForumSelector({tabsContainer:e,peerId:t,placeholder:s,onSelect:i}){const n=this.middlewareHelper.get().create(),a=n.get(),r=kt();let l,c;const d=this.forumSelector=new Ai({middleware:a,appendTo:e,managers:this.managers,rippleEnabled:!1,night:this.night,multiSelect:!1,headerSearch:!1,placeholder:s,peerType:["custom"],getMoreCustom:async(u,p)=>{c!==u&&(l=void 0,c=u);const m=await this.managers.dialogsStorage.getDialogs({query:u,filterId:t,limit:20,skipMigrated:!0,offsetIndex:l});if(p())return l=Cn(m.dialogs[m.dialogs.length-1]),{result:m.dialogs.map(g=>g.id),isEnd:m.isEnd}},renderResultsFunc:async(u,p)=>{const m=u.map(async f=>{const v=await this.managers.dialogsStorage.getForumTopic(t,f);return fM({topic:v,middleware:a})}),g=await Promise.all(m);d.list[p?"prepend":"append"](...g)},onSelect:u=>{i(t,u)},placeholderSizes:{avatarSize:32,avatarMarginRight:23,marginVertical:8,marginLeft:17,lineMarginVertical:11,gapVertical:0,totalHeight:48,statusWidth:0,noSecondLine:!0,night:this.night},onFirstRender:()=>{r.resolve()}});d.container.classList.add("tabs-tab"),d.scrollable.attachBorderListeners(),d.container.middlewareHelper=n,await r,this.btnCloseAnimatedIcon.classList.add("state-back"),this.selector.input.replaceWith(d.input),this.transition(d.container);const h=this.forumNavigationItem={type:"popup",onPop:()=>{Ss(this.btnClose)}};yt.pushItem(this.forumNavigationItem),this.addEventListener("close",()=>{yt.removeItem(h)})}destroy(){super.destroy(),this.selector?.destroy(),this.selector=void 0}static async createPicker2({peerType:e,filterPeerTypeBy:t,chatRightsActions:s,multiSelect:i,limit:n,limitCallback:a,titleLangKey:r}){return new Promise((l,c)=>{let d=!1;const h=se.createPopup(Cs,{peerType:e,placeholder:"SelectChat",onSelect:i?void 0:u=>{l(u),d=!0},onMultiSelect:i?u=>{l(u),d=!0}:void 0,filterPeerTypeBy:t,chatRightsActions:s,titleLangKey:r});n&&h.selector.setLimit(n,a),h.addEventListener("close",()=>{d||c()},{once:!0})})}static async createPicker(e=["users","bots","groups","channels"],t){Array.isArray(e)||(e=[]);const s=Ai.convertPeerTypes(e),i=["dialogs"];if(e.includes("users")&&i.push("contacts"),!s.length)throw void 0;return this.createPicker2({peerType:i,filterPeerTypeBy:s,chatRightsActions:t})}static createSharingPicker(e){return e.chatRightsActions??(e.chatRightsActions=["send_plain"]),e.placeholder??(e.placeholder="ShareModal.Search.Placeholder"),e.selfPresence??(e.selfPresence="ChatYourSelf"),se.createPopup(Cs,{...e,peerType:["dialogs","contacts"]})}static createSharingPicker2(e){return new Promise((t,s)=>{let i=!1;Cs.createSharingPicker({...e||{},onSelect:a=>{i=!0,t(a)}}).addEventListener("close",()=>{i||s()})})}static createReplyPicker(){return this.createSharingPicker2({placeholder:"ReplyToDialog",selfPresence:"SavedMessagesInfoQuote"})}static createContactPicker(){return new Promise((e,t)=>{let s=!1;se.createPopup(Cs,{peerType:["contacts"],placeholder:"Search",onSelect:n=>{s=!0,e(n)}}).addEventListener("close",()=>{s||t()})})}}function Lc(o,e,t){const s=e?._==="channelParticipantCreator",i=e?.promoted_by;return!!o.pFlags.creator||!s&&(!i||i===t)}const Uu=class Uu extends rs{async init(){this.container.classList.add("edit-peer-container","user-permissions-container"),this.setTitle(this.isAdmin?"EditAdmin":"UserRestrictions");let e;const t=await this.managers.appChatsManager.getChat(this.chatId),s=await this.managers.appChatsManager.isChannel(this.chatId),i=await this.managers.appPeersManager.isAnyGroup(this.chatId.toPeerId(!0)),n=this.participant?._==="channelParticipantCreator",a=Lc(t,this.participant,I.myId);let r;this.isAdmin?r=["channelParticipantAdmin","channelParticipantCreator"]:r=["channelParticipantBanned"];{const c=new Me({name:this.isAdmin?"EditAdminWhatCanDo":"UserRestrictionsCanDo",caption:this.isAdmin?!0:void 0}),d=document.createElement("div");d.classList.add("chatlist-container"),c.content.insertBefore(d,c.title);const h=qe.createChatList({new:!0});d.append(h);const{dom:u}=qe.addDialogNew({peerId:this.userId.toPeerId(!1),container:h,rippleEnabled:!0,avatarSize:"abitbigger",meAsSaved:!1,wrapOptions:{middleware:this.middlewareHelper.get()}});u.lastMessageSpan.append(Tr(await this.managers.appUsersManager.getUser(this.userId)));const p={chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:c.content,participant:r.includes(this.participant._)?this.participant:void 0,chat:t,canEdit:a},m=r.includes(this.participant._)?(this.isAdmin?this.participant.admin_rights:this.participant.banned_rights).pFlags:void 0;if(this.isAdmin){const g=new yM(p),f=g.fields.find(y=>y.flags[0]==="add_admins"),v=()=>{c.caption.replaceChildren(L(a?f.checkboxField.checked?"Channel.Admin.AdminAccess":"Channel.Admin.AdminRestricted":"EditAdminCantEdit"))};v(),this.listenerSetter.add(f.checkboxField.input)("change",v),e=()=>{if(!Lc)return;const y=g.takeOut();m&&Ui(m,y.pFlags)||this.managers.appChatsManager.editAdmin(this.chatId,this.participant,y,l?.value)}}else{const g=new _f(p,this.managers);e=()=>{const f=g.takeOut();m&&Ui(m,f.pFlags)||this.managers.appChatsManager.editBanned(this.chatId,this.participant,f)}}this.eventListener.addEventListener("destroy",e,{once:!0}),this.scrollable.append(c.container)}let l;if(this.isAdmin&&i){const c=this.participant._==="channelParticipantCreator"?"Chat.OwnerBadge":"ChatAdmin",d=new Me({name:"EditAdminRank",caption:"EditAdminRankInfo",captionArgs:[L(c)]}),h=document.createElement("div");h.classList.add("input-wrapper");const u=l=new xt({name:"rank",placeholder:c,maxLength:16,canBeEdited:a}),p=this.participant.rank;p&&u.setOriginalValue(p,!0),h.append(u.container),d.content.append(h),this.scrollable.append(d.container)}if(this.isAdmin){const c=new Me({});if(!n&&Lc){const d=ze("btn-primary btn-transparent danger",{icon:"deleteuser",text:"Channel.Admin.Dismiss"});O(d,async()=>{const h=qt([d],!0);try{await this.managers.appChatsManager.editAdmin(this.chatId,this.participant,{_:"chatAdminRights",pFlags:{}},"")}catch{h();return}this.eventListener.removeEventListener("destroy",e),this.close()},{listenerSetter:this.listenerSetter}),c.content.append(d)}c.content.childElementCount&&this.scrollable.append(c.container)}else{const c=new Me({});if(this.participant._==="channelParticipantBanned"){const h=ze("btn-primary btn-transparent danger",{icon:"delete",text:"GroupPermission.Delete"});O(h,()=>{const u=qt([h],!0);this.managers.appChatsManager.clearChannelParticipantBannedRights(this.chatId,this.participant).then(()=>{this.eventListener.removeEventListener("destroy",e),this.close()},()=>{u()})},{listenerSetter:this.listenerSetter}),c.content.append(h)}const d=ze("btn-primary btn-transparent danger",{icon:"deleteuser",text:"UserRestrictionsBlock"});O(d,async()=>{const h=qt([d],!0);try{const u=this.userId.toPeerId();await Mt({peerId:this.chatId.toPeerId(!0),descriptionLangKey:"Permissions.RemoveFromGroup",descriptionLangArgs:[await Re({peerId:u})],titleLangKey:"ChannelBlockUser",button:{langKey:"Remove",isDanger:!0}}),s?await this.managers.appChatsManager.kickFromChannel(this.chatId,this.participant):await this.managers.appChatsManager.kickFromChat(this.chatId,this.participant)}catch{h();return}this.eventListener.removeEventListener("destroy",e),this.close()},{listenerSetter:this.listenerSetter}),c.content.append(d),this.scrollable.append(c.container)}}};Uu.openTab=(e,t,s,i)=>{const n=e.createTab(Uu);n.participant=s,n.chatId=t,n.userId=Il(s).toUserId(),n.isAdmin=i,n.open()};let ed=Uu;class up{constructor(e){_t(this,e)}createField(e,t){if(e.nestedTo&&!t)return;const s=t&&!this.round,i=Pe("down","accordion-icon");let n;this.round&&!s&&e.nested&&(n=document.createElement("div"),n.classList.add("accordion-right-button"));const a=e.row=new Se({titleLangKey:s?void 0:e.text,titleLangArgs:s?void 0:e.textArgs,checkboxField:e.checkboxField=new lt({text:s?e.text:void 0,textArgs:s?e.textArgs:void 0,checked:e.nested?!1:e.checked,toggle:this.round?void 0:!t,listenerSetter:this.listenerSetter,restriction:this.asRestrictions&&!t,name:e.name,round:this.round}),listenerSetter:this.listenerSetter,subtitleLangKey:e.description,clickable:e.nested?d=>{if(this.round?!zs(d.target,n)&&d.target!==n:zs(d.target,a.checkboxField.label)){if(a.checkboxField.input.disabled){const h=a.checkboxField.checked;e.nested.forEach(u=>{u.checkboxField.checked=!h})}else a.checkboxField.checked=!a.checkboxField.checked;return}oe(d),a.container.classList.toggle("accordion-toggler-expanded"),l.classList.toggle("is-expanded"),this.onExpand?.(e)}:void 0,rightContent:n});if(a.container.classList.add("accordion-row"),e.restrictionText){if(!e.nestedTo){const d=e.checkboxField.label.lastElementChild.firstElementChild;d.classList.add("with-lock"),d.append(Pe("premium_lock","checkbox-caption-lock"))}e.checkboxField.input.disabled=!0,e.nested||O(e.row.container,d=>{Xs(xe.format(e.restrictionText,!0))},{listenerSetter:this.listenerSetter})}const r=[a.container];let l,c;if(e.nested){const d=l=document.createElement("div");d.classList.add("accordion"),d.style.setProperty("--max-height",e.nested.length*48+"px");const h=e;e.nested.forEach(u=>{u.nestedTo??(u.nestedTo=h),d.append(...this.createField(u,!0).nodes)}),r.push(d),c=e.nestedCounter=document.createElement("b"),c.classList.add("accordion-counter"),this.setNestedCounter(e),a.container.classList.add("accordion-toggler"),this.round?(n.append(Pe(this.rightButtonIcon)," ",c," ",i),a.container.classList.add("accordion-toggler-round")):(a.title.append(" ",c," ",i),a.titleRow.classList.add("with-delimiter")),a.checkboxField.input.disabled=!0,a.checkboxField.setValueSilently(this.getNestedCheckedLength(e)===e.nested.length),e.toggleWith??(e.toggleWith={checked:e.nested,unchecked:e.nested})}if(e.toggleWith||e.nestedTo){const d=e.toggleWith?u=>{const{toggleWith:p,nested:m}=u,g=u.checkboxField.checked,f=g?p.checked:p.unchecked;if(!f)return;this.fields.filter(y=>f.includes(y)).forEach(y=>{y.restrictionText||(y.checkboxField.setValueSilently(g),y.nestedTo&&!m&&this.setNestedCounter(y.nestedTo),y.toggleWith&&d(y))}),u.nested&&this.setNestedCounter(u)}:void 0,h=e.nestedTo?()=>{const u=this.getNestedCheckedLength(e.nestedTo);e.nestedTo.checkboxField.setValueSilently(u===e.nestedTo.nested.length),this.setNestedCounter(e.nestedTo,u)}:void 0;this.listenerSetter.add(e.checkboxField.input)("change",()=>{d?.(e),h?.(),this.onAnyChange?.()})}else this.onAnyChange&&!e.nested&&this.listenerSetter.add(e.checkboxField.input)("change",()=>{this.onAnyChange()});return this.onRowCreation?.(a,e),{row:a,nodes:r}}getNestedCheckedLength(e){return e.nested.reduce((t,s)=>t+ +s.checkboxField.checked,0)}setNestedCounter(e,t=this.getNestedCheckedLength(e)){e.nestedCounter.textContent=this.round?""+e.nested.length:`${t}/${e.nested.length}`}}function tg(o,e,t,s){const i=d=>{t({x:d.pageX,y:d.pageY,event:d})},n=d=>{document.removeEventListener("mousemove",i),o.addEventListener("mousedown",a,{once:!0}),s?.({x:d.pageX,y:d.pageY,event:d})},a=d=>{if(d.button!==0){o.addEventListener("mousedown",a,{once:!0});return}e({x:d.pageX,y:d.pageY,event:d}),i(d),document.addEventListener("mousemove",i),document.addEventListener("mouseup",n,{once:!0})};o.addEventListener("mousedown",a,{once:!0});const r=d=>{d.preventDefault(),t({x:d.touches[0].clientX,y:d.touches[0].clientY,isTouch:!0,event:d})},l=d=>{document.removeEventListener("touchmove",r),o.addEventListener("touchstart",c,{passive:!1,once:!0});const h=d.touches[0]||d.changedTouches[0];s?.({x:h.clientX,y:h.clientY,isTouch:!0,event:d})},c=d=>{e({x:d.touches[0].clientX,y:d.touches[0].clientY,isTouch:!0,event:d}),r(d),document.addEventListener("touchmove",r,{passive:!1}),document.addEventListener("touchend",l,{passive:!1,once:!0})};return o.addEventListener("touchstart",c,{passive:!1,once:!0}),()=>{o.removeEventListener("mousedown",a),document.removeEventListener("mousemove",i),document.removeEventListener("mouseup",n),o.removeEventListener("touchstart",c),document.removeEventListener("touchmove",r),document.removeEventListener("touchend",l)}}class Vd{constructor(e,t=0){this.mousedown=!1,this.events={},this.withTransition=!1,this.useTransform=!1,this.vertical=!1,this.onMouseMove=a=>{this.scrub(a)},this.onMouseDown=a=>{this.rect=this.container.getBoundingClientRect(),this.mousedown=!0,this.scrub(a),this.container.classList.add("is-focused"),this.events?.onMouseDown&&this.events.onMouseDown(a)},this.onMouseUp=a=>{this.mousedown=!1,this.container.classList.remove("is-focused"),this.events?.onMouseUp&&this.events.onMouseUp(a)},this.onInput=()=>{const a=+this.seek.value;this.setFilled(a),this.events?.onScrub&&this.events.onScrub(a)},_t(this,e),this.container=document.createElement("div"),this.container.classList.add("progress-line"),this.useTransform?this.container.classList.add("use-transform"):this.withTransition&&this.container.classList.add("with-transition"),this.filled=document.createElement("div"),this.filled.classList.add("progress-line__filled");const s=this.seek=document.createElement("input");s.classList.add("progress-line__seek"),s.type="range",s.step=""+this.step,this.setMinMax(this.min,this.max),s.value=""+t,t&&this.setProgress(t);const i=""+this.step,n=i.indexOf(".");this.decimals=n===-1?0:i.length-n-1,this.container.append(this.filled,s)}setMinMax(e,t){this.min=e??this.min??(this.min=0),this.max=t??this.max??(this.max=0),this.seek.min=""+e,this.seek.max=""+t}get value(){return+this.seek.value}setHandlers(e){this.events=e}setListeners(){this.seek.addEventListener("input",this.onInput),this._removeListeners=tg(this.container,this.onMouseDown,this.onMouseMove,this.onMouseUp)}setProgress(e){this.seek.value=""+e,this.setFilled(+this.seek.value)}addProgress(e){this.seek.value=""+(+this.seek.value+e),this.setFilled(+this.seek.value)}setFilled(e){let t=(e-this.min)/(this.max-this.min);t=Ht(t,0,1),this.useTransform?this.filled.style.transform=`scaleX(${t})`:this.filled.style.width=t*100+"%"}scrub(e){const t=this.vertical?this.rect.height:this.rect.width;let s=Ht(this.vertical?-(e.y-this.rect.bottom):e.x-this.rect.left,0,t);!this.vertical&&xe.isRTL&&(s=t-s);let i=this.min+s/t*(this.max-this.min);return i-this.min<(this.max-this.min)/2&&(i-=this.step/10),i=+i.toFixed(this.decimals),i=Ht(i,this.min,this.max),this.setProgress(i),this.events?.onScrub&&this.events.onScrub(i),i}removeListeners(){this._removeListeners&&(this._removeListeners(),this._removeListeners=null),this.seek.removeEventListener("input",this.onInput),this.events={}}}class lu{constructor(e){this.onIndex=i=>{this.onValue?.(this.steps[i][1]),this.optionsElements.forEach(({container:n},a)=>{n.classList.toggle("active",i>=a),n.classList.toggle("is-chosen",i===a)})},_t(this,e),this.generateSteps??(this.generateSteps=i=>i.map(this.generateStep));const t=this.container=document.createElement("div");t.classList.add("range-setting-selector","range-steps-selector"),this.middleware.onClean(()=>{this.range.removeListeners()});const s=this.range=new Vd({step:1});s.setListeners(),s.setHandlers({onScrub:this.onIndex}),t.append(s.container)}createOption(e,t,s){const i=document.createElement("div");i.classList.add("range-setting-selector-option");const n=document.createElement("div");return n.classList.add("range-setting-selector-option-text"),n.replaceChildren(e),i.append(n),i.style.left=`${t/s*100}%`,t===0&&!this.noFirstLast?i.classList.add("is-first"):t===s&&(i.style.left="",i.style.right="0",!this.noFirstLast&&i.classList.add("is-last")),{container:i,text:n}}setSteps(e,t){this.optionsElements&&this.optionsElements.forEach(({container:i})=>i.remove());const s=e.length-1;this.range.setMinMax(0,s),this.steps=e,this.optionsElements=e.map(([i],n)=>{const a=this.createOption(i,n,s);return this.range.container.append(a.container),a}),t!==void 0&&this.setIndex(t)}setIndex(e){this.range.setProgress(e),this.onIndex(e)}removeListeners(){this.range.removeListeners()}get value(){return this.steps[this.range.value][1]}}class _f extends up{constructor(e,t){super({listenerSetter:e.listenerSetter,fields:[],asRestrictions:!0}),this.options=e,this.managers=t,this.construct()}async construct(){const e=this.options,t=e.chatId.toPeerId(!0),s=this.chat=be.getChat(e.chatId),i=be.isForum(t),n=this.defaultBannedRights=s.default_banned_rights,a=this.rights=e.participant?dM(s,e.participant.banned_rights):n,r=[{flags:["send_photos"],text:"UserRestrictionsSendPhotos",exceptionText:"UserRestrictionsNoSendPhotos"},{flags:["send_videos"],text:"UserRestrictionsSendVideos",exceptionText:"UserRestrictionsNoSendVideos"},{flags:["send_stickers","send_gifs"],text:"UserRestrictionsSendStickers",exceptionText:"UserRestrictionsNoSendStickers"},{flags:["send_audios"],text:"UserRestrictionsSendMusic",exceptionText:"UserRestrictionsNoSendMusic"},{flags:["send_docs"],text:"UserRestrictionsSendFiles",exceptionText:"UserRestrictionsNoSendDocs"},{flags:["send_voices"],text:"UserRestrictionsSendVoices",exceptionText:"UserRestrictionsNoSendVoice"},{flags:["send_roundvideos"],text:"UserRestrictionsSendRound",exceptionText:"UserRestrictionsNoSendRound"},{flags:["embed_links"],text:"UserRestrictionsEmbedLinks",exceptionText:"UserRestrictionsNoEmbedLinks"},{flags:["send_polls"],text:"UserRestrictionsSendPolls",exceptionText:"UserRestrictionsNoSendPolls"}];let l=[{flags:["send_plain"],text:"UserRestrictionsSend",exceptionText:"UserRestrictionsNoSend"},{flags:["send_media"],text:"UserRestrictionsSendMedia",exceptionText:"UserRestrictionsNoSendMedia",nested:r},{flags:["invite_users"],text:"UserRestrictionsInviteUsers",exceptionText:"UserRestrictionsNoInviteUsers"},{flags:["pin_messages"],text:"UserRestrictionsPinMessages",exceptionText:"UserRestrictionsNoPinMessages"},i&&{flags:["manage_topics"],text:"CreateTopicsPermission",exceptionText:"UserRestrictionsNoChangeInfo"},{flags:["change_info"],text:"UserRestrictionsChangeInfo",exceptionText:"UserRestrictionsNoChangeInfo"}];l=l.filter(Boolean);const c={};l.push(...r),l.forEach(d=>{const h=d.flags[0];c[h]=d,d.checked=La(s,h,a)}),r.forEach(d=>d.nestedTo=c.send_media),c.send_media.toggleWith={unchecked:r,checked:r},c.embed_links.toggleWith={checked:[c.send_plain]},c.send_plain.toggleWith={unchecked:[c.embed_links]},this.fields=l;for(const d of this.fields)!e.forChat&&n.pFlags[d.flags[0]]?d.restrictionText="UserRestrictionsDisabled":li(s)[0]&&(d.flags.includes("pin_messages")||d.flags.includes("change_info"))&&(d.restrictionText=e.participant?"UserRestrictionsDisabled":"EditCantEditPermissionsPublic");for(const d of this.fields){if(d.nestedTo)continue;const{nodes:h}=this.createField(d);e.appendTo.append(...h)}}takeOut(){const e={_:"chatBannedRights",until_date:2147483647,pFlags:{}},t=new Set(["send_media"]);for(const s of this.fields)s.checkboxField.checked||s.flags.forEach(n=>{t.has(n)||(e.pFlags[n]=!0)});return e}}class yM extends up{constructor(e){super({listenerSetter:e.listenerSetter,fields:[],asRestrictions:!0}),this.options=e,this.construct()}construct(){const e=this.options,t=e.chat,s=!!t.pFlags.broadcast,i=!!t.pFlags.forum,n=this.rights=e.participant?e.participant.admin_rights:void 0,a=s&&[{flags:["post_messages"],text:"EditAdminPostMessages"},{flags:["edit_messages"],text:"EditAdminEditMessages"},{flags:["delete_messages"],text:"EditAdminDeleteMessages"}],r=s&&[{flags:["post_stories"],text:"AdminRights.PostStories"},{flags:["edit_stories"],text:"AdminRights.EditStories"},{flags:["delete_stories"],text:"AdminRights.DeleteStories"}],l="post_messages_nested",c="post_stories_nested";let d=[{flags:["change_info"],text:s?"EditAdminChangeChannelInfo":"EditAdminChangeGroupInfo"},s&&{flags:[l],text:"AdminRights.ManageMessages",nested:a},s&&{flags:[c],text:"AdminRights.ManageStories",nested:r},!s&&{flags:["delete_messages"],text:s?"EditAdminDeleteMessages":"EditAdminGroupDeleteMessages"},!s&&{flags:["ban_users"],text:"EditAdminBanUsers"},!s&&{flags:["invite_users"],text:"EditAdminAddUsersViaLink"},!s&&{flags:["pin_messages"],text:"EditAdminPinMessages"},i&&{flags:["manage_topics"],text:"ManageTopicsPermission"},{flags:["manage_call"],text:s?"StartVoipChatPermission":"Channel.EditAdmin.ManageCalls"},s&&{flags:["invite_users"],text:"Channel.EditAdmin.PermissionInviteSubscribers"},!s&&{flags:["anonymous"],text:"EditAdminSendAnonymously",checked:n?void 0:!1},{flags:["add_admins"],text:"EditAdminAddAdmins",checked:n?void 0:!1}];const h={};d=d.filter(Boolean),a&&d.push(...a),r&&d.push(...r),d.forEach(m=>{const g=m.flags[0];h[g]=m,m.checked??(m.checked=La(t,g,n))}),a&&(a.forEach(m=>m.nestedTo=h[l]),h[l].toggleWith={unchecked:a,checked:a}),r&&(r.forEach(m=>m.nestedTo=h[c]),h[c].toggleWith={unchecked:r,checked:r}),this.fields=d;const u=new Set(["anonymous"]),p=e.participant?._==="channelParticipantCreator";for(const m of this.fields){const g=m.flags[0];e.canEdit?(p&&!u.has(g)||!La(t,g))&&(m.restrictionText="EditCantEditPermissions"):m.restrictionText="EditAdminCantEdit"}for(const m of this.fields){if(m.nestedTo)continue;const{nodes:g}=this.createField(m);e.appendTo.append(...g)}}takeOut(){const e={_:"chatAdminRights",pFlags:{}};for(const t of this.fields)t.checkboxField.checked&&t.flags.forEach(s=>{e.pFlags[s]=!0});return e}}class vM extends rs{async init(){this.container.classList.add("edit-peer-container","group-permissions-container"),this.setTitle("ChannelPermissions"),this.participants=new Map;let e;{const t=new Me({name:"ChannelPermissionsHeader"});e=new _f({chatId:this.chatId,listenerSetter:this.listenerSetter,appendTo:t.content,forChat:!0},this.managers),this.eventListener.addEventListener("destroy",()=>{this.managers.appChatsManager.editChatDefaultBannedRights(this.chatId,e.takeOut())},{once:!0}),this.scrollable.append(t.container)}{const t=new Me({name:"Slowmode",caption:!0}),s=await this.managers.appProfileManager.getChannelFull(this.chatId);let i;const n=new lu({generateStep:c=>{let d;if(!c)d=L("SlowmodeOff");else{const h=Math.floor(c/3600),u=Math.floor(c/60)%60,p=c%60;h?d=L("SlowmodeHours",[h]):u?d=L("SlowmodeMinutes",[u]):d=L("SlowmodeSeconds",[p])}return[d,c]},onValue:c=>{i!==c&&(i=c,c?t.caption.replaceChildren(L("SlowmodeInfoSelected",[Bl(ko(c,1))])):t.caption.replaceChildren(L("SlowmodeInfoOff")))},middleware:this.middlewareHelper.get()}),a=[0,10,30,60,300,900,3600],r=n.generateSteps(a),l=s.slowmode_seconds||0;n.setSteps(r,a.indexOf(l)),t.content.append(n.container),this.eventListener.addEventListener("destroy",()=>{const{value:c}=n;c!==l&&this.managers.appChatsManager.toggleSlowMode(this.chatId,n.value)},{once:!0}),this.scrollable.append(t.container)}{const t=new Me({name:"PrivacyExceptions"}),s=new Se({titleLangKey:"ChannelAddException",subtitleLangKey:"Loading",icon:"adduser",clickable:()=>{se.createPopup(Cs,{peerType:["channelParticipants"],onSelect:p=>{setTimeout(()=>{i(p)},0)},placeholder:"ExceptionModal.Search.Placeholder",peerId:-this.chatId,exceptSelf:!0})},listenerSetter:this.listenerSetter}),i=async p=>{let m=this.participants.get(p);if(!m)try{m=await this.managers.appProfileManager.getParticipant(this.chatId,p)}catch{Xs("User is no longer participant");return}const g=this.slider.createTab(ed);g.participant=m,g.chatId=this.chatId,g.userId=p,g.open()};t.content.append(s.container);const n=t.generateContentElement();n.classList.add("chatlist-container");const a=qe.createChatList({new:!0});n.append(a),O(a,p=>{const m=$i(p.target,Gl);if(!m)return;const g=m.dataset.peerId.toPeerId();i(g)},{listenerSetter:this.listenerSetter});const r=async(p,m)=>{const g=m.banned_rights,f=(await this.managers.appChatsManager.getChat(this.chatId)).default_banned_rights,v=[];e.fields.forEach(w=>{const b=w.flags[0];g.pFlags[b]&&!f.pFlags[b]&&v.push(w.exceptionText)});const y=p.lastMessageSpan;v.length?(y.replaceChildren(...vi(v.map(w=>L(w)),!1)),y.classList.toggle("hide",!v.length)):(y.replaceChildren(L("UserRestrictionsBy",[await Re({peerId:m.kicked_by.toPeerId(!1)})])),y.classList.remove("hide"))},l=(p,m)=>{const g=Ze(p.peer),f=qe.addDialogNew({peerId:g,container:a,rippleEnabled:!0,avatarSize:"abitbigger",append:m,wrapOptions:{middleware:this.middlewareHelper.get()}});this.participants.set(g,p),f.dom.listEl.dialogElement=f,r(f.dom,p)};this.listenerSetter.add(I)("chat_participant",p=>{const m=p.new_participant,g=p.prev_participant,f=p.user_id.toPeerId(!1),v=m?._==="channelParticipantBanned"&&!m.banned_rights.pFlags.view_messages;m?this.participants.set(f,m):this.participants.delete(f);const y=a.querySelector(`[data-peer-id="${f}"]`);v?(y?r(y.dialogElement.dom,m):l(m,!1),g?._!=="channelParticipantBanned"&&++d):(y&&y.dialogElement.remove(),g?._==="channelParticipantBanned"&&--d),c()});const c=()=>{const p=L(d?"Permissions.ExceptionsCount":"Permissions.NoExceptions",[d]);ht(s.subtitle,p)};let d=0,h;const u=()=>(h=new Mf({scrollable:this.scrollable,getPromise:()=>this.managers.appProfileManager.getChannelParticipants({id:this.chatId,filter:{_:"channelParticipantsBanned",q:""},limit:50,offset:a.childElementCount}).then(m=>{for(const g of m.participants)l(g,!0);return d=m.count,c(),m.participants.length<50||m.count===a.childElementCount})}),h.load());this.scrollable.append(t.container),await this.managers.appChatsManager.isChannel(this.chatId)?await u():(c(),this.listenerSetter.add(I)("dialog_migrate",({migrateFrom:p,migrateTo:m})=>{this.chatId===p&&(this.chatId=m,u())}))}}onOpenAfterTimeout(){this.scrollable.onScroll()}}function Ef({doc:o,row:e,size:t,managers:s}){const i=e.media,n=e.createMedia("small");i&&n.classList.add("hide");const a=i?[]:void 0,r=t==="small"?32:48,l=$s({div:n,doc:o,width:r,height:r,loadPromises:a,managers:s}).then(({render:c})=>c);return a&&Promise.all(a).then(()=>{n.classList.remove("hide"),i.remove()}),l}class cu extends rs{static getInitArgs(e){return{availableReactions:I.managers.appReactionsManager.getActiveAvailableReactions(),chatFull:I.managers.appProfileManager.getChatFull(e)}}async init({chatId:e,p:t=cu.getInitArgs(e)}){this.setTitle("Reactions"),this.chatId=e;const[s,i]=await Promise.all([t.availableReactions,t.chatFull]),n=await this.managers.appChatsManager.isBroadcast(this.chatId);let a=i.available_reactions??{_:"chatReactionsNone"},r=a,l=new Set(a._==="chatReactionsSome"?a.reactions.map(w=>w.emoticon):[]);const c=w=>w.map(b=>({_:"reactionEmoji",emoticon:b})),d=()=>n?"EnableReactionsChannelInfo":r._==="chatReactionsAll"?"EnableAllReactionsInfo":r._==="chatReactionsNone"?"DisableReactionsInfo":"EnableSomeReactionsInfo",h=new Me({name:n?void 0:"AvailableReactions",caption:d()}),u=new Me({name:"OnlyAllowThisReactions"}),p=()=>{const w=r.reactions??[];l=new Set(w.map(({emoticon:b})=>b)),g.forEach((b,S)=>{b.setValueSilently(l.has(S))})};let m;if(n){m=new lt({toggle:!0,checked:a._==="chatReactionsSome"});const w=new Se({checkboxField:m,titleLangKey:"EnableReactions",listenerSetter:this.listenerSetter});h.content.append(w.container),this.listenerSetter.add(m.input)("change",()=>{let b=!0;m.checked?f.every(S=>!S.checked)?r={_:"chatReactionsSome",reactions:c(s.map(({reaction:S})=>S))}:r._!=="chatReactionsSome"?r={_:"chatReactionsSome",reactions:c(Array.from(l))}:b=!1:r={_:"chatReactionsNone"},b&&(p(),y())})}else{const w=[["chatReactionsAll","AllReactions"],["chatReactionsSome","SomeReactions"],["chatReactionsNone","NoReactions"]],b=()=>{u.container.classList.toggle("hide",r._!=="chatReactionsSome")};let S=a._;const C=ru(w.map(([M,P])=>({langPackKey:P,value:M,checked:a._===M})),M=>{S=M,S==="chatReactionsAll"?r={_:S,pFlags:{allow_custom:!0}}:S==="chatReactionsNone"?r={_:S}:r={_:S,reactions:c(["👍","👎"])},ht(h.caption,L(d())),p(),y(),b()});h.content.append(C),b()}const g=new Map,f=s.map(w=>{const b=w.reaction,S=new lt({toggle:!0,checked:l.has(b)});g.set(b,S),this.listenerSetter.add(S.input)("change",()=>{S.checked?(l.add(b),m&&!m.checked&&(m.checked=!0)):(l.delete(b),m?.checked&&!l.size&&(m.checked=!1)),y()});const C=new Se({checkboxField:S,title:w.title,havePadding:!0,listenerSetter:this.listenerSetter});return Ef({row:C,doc:w.static_icon,size:"small"}),u.content.append(C.container),S}),v=async()=>{y.clearTimeout(),r._==="chatReactionsSome"&&(r.reactions=c(Array.from(l)),r.reactions.length||(r={_:"chatReactionsNone"})),this.managers.appChatsManager.setChatAvailableReactions(this.chatId,r),a=r},y=hi(v,3e3,!1,!0);this.eventListener.addEventListener("destroy",()=>{y.isDebounced()&&v()},{once:!0}),this.scrollable.append(h.container,u.container)}}function pp(o){const{listenTo:e,appendTo:t,onOpen:s,onClose:i,slider:n,chatId:a,participants:r,middleware:l}=o;let c,d,h,u,p,m,g,f;const v=y=>{ed.openTab(n,a,d,y)};return un({listenTo:e,appendTo:t,middleware:l,findElement:y=>c=z(y.target,"chatlist-chat"),onOpen:async()=>(h=c.dataset.peerId.toPeerId(),d=r.get(h),[u,p,g,f]=await Promise.all([I.managers.appChatsManager.getChat(a),I.managers.appChatsManager.isBroadcast(a),I.managers.appChatsManager.hasRights(a,"change_permissions"),I.managers.appChatsManager.hasRights(a,"change_permissions")]),c.classList.add("menu-open"),m=g&&d._==="channelParticipantBanned"&&d.pFlags.left,s?.()),onClose:()=>(c.classList.remove("menu-open"),i?.()),buttons:[{icon:"message",text:"SendMessage",onClick:()=>{he.setInnerPeer({peerId:h})}},{icon:"adduser",text:p?"AddToChannel":"AddToGroup",onClick:()=>{m&&I.managers.appChatsManager.addToChat(a,h)},verify:()=>!!m},{icon:"promote",text:"SetAsAdmin",onClick:()=>v(!0),verify:()=>f&&d._==="channelParticipant"},{icon:"admin",text:"EditAdminRights",onClick:()=>v(!0),verify:()=>d._==="channelParticipantAdmin"&&Lc(u,d,I.myId)},{icon:"restrict",text:"KickFromSupergroup",onClick:()=>v(!1),verify:()=>g&&(d._==="channelParticipant"||d._==="channelParticipantBanned"&&!d.pFlags.left)},{icon:"delete",text:"Delete",onClick:()=>{m&&I.managers.appChatsManager.editBanned(a,d,{_:"chatBannedRights",pFlags:{},until_date:0})},verify:()=>!(!m||!g||h===I.myId)},{icon:"delete",text:"KickFromGroup",onClick:()=>{I.managers.appChatsManager.kickFromChat(a,h)},verify:()=>g&&h!==I.myId&&d._!=="channelParticipantCreator"&&(d._!=="channelParticipantAdmin"||Lc(u,d,I.myId))&&(d._==="channelParticipant"||!m)}]})}function bM(o){const e=kt();return{selector:new Ai({...o,peerType:["channelParticipants"],multiSelect:!1,headerSearch:!0,placeholder:"SearchPlaceholder",meAsSaved:!1,noShadow:!1,onFirstRender:()=>{e.resolve()}}),loadPromise:e}}class du extends rs{static getInitArgs(e){return{chatFull:I.managers.appProfileManager.getChatFull(e),appConfig:I.managers.apiManager.getAppConfig()}}async init({chatId:e,p:t=du.getInitArgs(e)}){const s=e.toPeerId(!0);this.container.classList.add("edit-peer-container","chat-administrators-container"),this.setTitle("PeerInfo.Administrators");const[i,n,a,r]=await Promise.all([this.managers.appChatsManager.getChat(e),this.managers.appChatsManager.isBroadcast(e),t.chatFull,t.appConfig]);this.addBtn=Fi({icon:"addmember_filled",className:"is-visible"}),this.content.append(this.addBtn),O(this.addBtn,()=>{const u=se.createPopup(Cs,{peerType:["channelParticipants"],peerId:s,onSelect:p=>{const m=u.selector.participants.get(p);l(m)},placeholder:"SearchPlaceholder"})},{listenerSetter:this.listenerSetter});const l=async u=>{ed.openTab(this.slider,e,u,!0)},c=!n&&i.participants_count>=r.telegram_antispam_group_size_min,{selector:d,loadPromise:h}=bM({appendTo:this.content,managers:this.managers,middleware:this.middlewareHelper.get(),peerId:s,channelParticipantsFilter:u=>({_:"channelParticipantsAdmins",q:u}),getSubtitleForElement:async u=>{const p=this.selector.participants.get(u);if(p._==="channelParticipantCreator"||p._==="chatParticipantCreator")return L("ChannelCreator");const m=p.promoted_by.toPeerId(!1);return L("EditAdminPromotedBy",[await Re({peerId:m})])},onSelect:u=>{const p=this.selector.participants.get(u);l(p)},channelParticipantsUpdateFilter:u=>["channelParticipantAdmin","channelParticipantCreator"].includes(u?._)});if(this.selector=d,c){const u=new Me({noDelimiter:!0,caption:"ChannelAntiSpamInfo"}),p=!!a?.pFlags?.antispam,m=new Se({titleLangKey:"ChannelAntiSpam",checkboxField:new lt({name:"agg",toggle:!0,listenerSetter:this.listenerSetter,checked:p}),listenerSetter:this.listenerSetter});this.eventListener.addEventListener("destroy",()=>{const g=m.checkboxField.checked;g!==p&&this.managers.appChatsManager.toggleAntiSpam(e,g)},{once:!0}),u.content.append(m.container),this.selector.scrollable.append(u.container,this.selector.scrollable.container.lastElementChild)}return pp({chatId:e,listenTo:this.selector.scrollable.container,participants:this.selector.participants,slider:this.slider,middleware:this.middlewareHelper.get()}),h}}class mp extends Vt{init(e){this.container.classList.add("add-members-container"),this.nextBtn=Fi({icon:"arrow_next"}),this.content.append(this.nextBtn),this.scrollable.container.remove(),this.nextBtn.addEventListener("click",()=>{const s=this.selector.getSelected().map(n=>n.toPeerId()),i=this.takeOut(s);this.skippable&&!(i instanceof Promise)?this.close():i instanceof Promise?this.attachToPromise(i):i===void 0&&this.close()}),this.setTitle(e.title),this.peerType=e.type,this.takeOut=e.takeOut,this.skippable=e.skippable;const t=this.peerType==="privacy";this.selector=new Ai({middleware:this.middlewareHelper.get(),appendTo:this.content,onChange:this.skippable?null:s=>{this.nextBtn.classList.toggle("is-visible",!!s)},peerType:[t?"dialogs":"contacts"],placeholder:e.placeholder,exceptSelf:t,filterPeerTypeBy:t?["isAnyGroup","isUser"]:void 0,managers:this.managers,design:"square"}),e.selectedPeerIds&&this.selector.addInitial(e.selectedPeerIds),this.nextBtn.disabled=!1,this.nextBtn.classList.toggle("is-visible",this.skippable)}attachToPromise(e){const t=lf(this.nextBtn,"arrow_next");e.then(()=>{this.close()},()=>{t()})}}async function fS({peerId:o,slider:e}){const t=o.toChatId(),s=await I.managers.appChatsManager.isChannel(t),i=await I.managers.appChatsManager.isBroadcast(t),n=async(r,l)=>{let c,d,h,u,p;if(r.length>1){const m=await Promise.all(r.map(async g=>{const f=document.createElement("b");return f.append(await Re({peerId:g})),f}));c="AddMembersAlertTitle",d=[L(i?"Subscribers":"Members",[r.length])],h="AddMembersAlertCountText",u=[vi(m)],s||(p=[{text:"AddMembersForwardMessages",checked:!0}])}else{c="AddOneMemberAlertTitle",h="AddMembersAlertNamesText";const m=document.createElement("b");m.append(await Re({peerId:r[0]})),u=[m],s||(p=[{text:"AddOneMemberForwardMessages",textArgs:[await Re({peerId:r[0]})],checked:!0}])}u.push(await Re({peerId:o})),se.createPopup(Es,"popup-add-members",{peerId:o,titleLangKey:c,titleLangArgs:d,descriptionLangKey:h,descriptionLangArgs:u,buttons:[{langKey:"Add",callback:l}],checkboxes:p}).show()},a=r=>{r.type==="USER_PRIVACY_RESTRICTED"&&Ee({langPackKey:"InviteToGroupError"})};if(s){const r=e.createTab(mp);r.open({type:"channel",skippable:!1,takeOut:l=>(n(l,()=>{const c=I.managers.appChatsManager.inviteToChannel(t,l);c.catch(a),r.attachToPromise(c)}),!1),title:i?"ChannelAddSubscribers":"GroupAddMembers",placeholder:"SendMessageTo"})}else se.createPopup(Cs,{peerType:["contacts"],placeholder:"Search",onSelect:r=>{setTimeout(()=>{n([r],(l,c)=>{I.managers.appChatsManager.addChatUser(t,r,c.size?void 0:0).catch(a)})},0)}})}function yS(o){const e=kt();return{selector:new Ai({...o,multiSelect:!1,headerSearch:!0,placeholder:"SearchPlaceholder",meAsSaved:!1,noShadow:!1,onFirstRender:()=>{e.resolve()}}),loadPromise:e}}function vS(o){return yS({...o,peerType:["channelParticipants"]})}class wM extends rs{async init(e){const t=await this.managers.appChatsManager.getChat(e),s=await this.managers.appChatsManager.isBroadcast(e),i=await this.managers.appProfileManager.getChannelFull(e).catch(()=>{});this.container.classList.add("edit-peer-container","chat-members-container"),this.setTitle(s?"PeerInfo.Subscribers":"GroupMembers"),this.addBtn=Fi({icon:"addmember_filled",className:"is-visible"}),this.content.append(this.addBtn),O(this.addBtn,()=>{fS({peerId:e.toPeerId(!0),slider:this.slider})},{listenerSetter:this.listenerSetter});const n=t.participants_count,a=!s&&n>=((await this.managers.apiManager.getAppConfig()).hidden_members_group_size_min||0)&&!!t.admin_rights,{selector:r,loadPromise:l}=vS({appendTo:this.content,managers:this.managers,middleware:this.middlewareHelper.get(),peerId:e.toPeerId(!0),channelParticipantsUpdateFilter:c=>!!c});if(this.selector=r,a){const c=new Me({noDelimiter:!0,caption:"ChannelHideMembersInfo"}),d=!!i?.pFlags?.participants_hidden,h=new Se({titleLangKey:"ChannelHideMembers",icon:"hide",checkboxField:new lt({name:"hide-members",toggle:!0,listenerSetter:this.listenerSetter,checked:d}),listenerSetter:this.listenerSetter});this.eventListener.addEventListener("destroy",()=>{const u=h.checkboxField.checked;u!==d&&this.managers.appChatsManager.toggleParticipantsHidden(e,u)},{once:!0}),c.content.append(h.container),this.selector.scrollable.append(c.container,this.selector.scrollable.container.lastElementChild)}return pp({chatId:e,listenTo:this.selector.scrollable.container,participants:this.selector.participants,slider:this.slider,middleware:this.middlewareHelper.get()}),l}}class SM extends rs{async init(e){const t=await this.managers.appChatsManager.isBroadcast(e);this.container.classList.add("edit-peer-container","removed-users-container"),this.setTitle("ChannelBlacklist"),this.addBtn=Fi({icon:"addmember_filled",className:"is-visible"}),this.content.append(this.addBtn),O(this.addBtn,()=>{const r=se.createPopup(Cs,{peerType:["channelParticipants"],peerId:e.toPeerId(!0),onSelect:l=>{const c=r.selector.participants.get(l);this.managers.appChatsManager.kickFromChat(e,c)},placeholder:"SearchPlaceholder"})},{listenerSetter:this.listenerSetter});const{selector:s,loadPromise:i}=vS({appendTo:this.content,managers:this.managers,middleware:this.middlewareHelper.get(),peerId:e.toPeerId(!0),channelParticipantsFilter:r=>({_:"channelParticipantsKicked",q:r}),channelParticipantsUpdateFilter:r=>r?._==="channelParticipantBanned"&&r.pFlags.left,getSubtitleForElement:async r=>{const c=this.selector.participants.get(r).kicked_by.toPeerId(!1);return L("UserRemovedBy",[await Re({peerId:c})])}});this.selector=s;const n=new Me({noDelimiter:!0,caption:t?"NoBlockedChannel2":"NoBlockedGroup2"});return n.container.firstElementChild.remove(),this.selector.scrollable.container.querySelector(".gradient-delimiter")?.remove(),this.selector.scrollable.append(n.container,this.selector.scrollable.container.lastElementChild),pp({listenTo:this.selector.scrollable.container,slider:this.slider,chatId:e,participants:this.selector.participants,middleware:this.middlewareHelper.get()}),i}}function Za(o){if(!st.isAvailable("animations"))return;const e=[{transform:"translateX(0)"},{transform:"translateX(.25rem)"},{transform:"translateX(-.25rem)"},{transform:"translateX(0)"}];o.animate([...e,...e,...e],{duration:300,iterations:1,easing:"ease-in-out"})}class hu extends rs{static getInitArgs(){return{animationData:xs.loadAnimationFromURLManually("UtyanDiscussion"),chats:I.managers.appChatsManager.getGroupsForDiscussion()}}async setCaption(){this.caption.replaceChildren(L(this.linkedChatId?this.isBroadcast?"DiscussionChannelGroupSetHelp2":"DiscussionGroupHelp":"DiscussionChannelHelp3",this.linkedChatId?[await Re({peerId:this.linkedChatId.toPeerId(!0)})]:void 0))}async init({chatId:e,linkedChatId:t,p:s=hu.getInitArgs()}){this.chatId=e,this.linkedChatId=t;const[i]=await Promise.all([this.managers.appChatsManager.isBroadcast(this.chatId)]);this.isBroadcast=i,this.setTitle(i?"DiscussionController.Channel.Title":"DiscussionController.Group.Title"),this.container.classList.add("chat-folders-container","chat-discussion-container");const n=document.createElement("div");n.classList.add("sticker-container");const a=this.caption=document.createElement("div");a.classList.add("caption");const r=new Me({caption:i?"DiscussionChannelHelp2":"DiscussionGroupHelp2"}),l=qe.createChatList();l.classList.add("chatlist"),O(l,async f=>{const v=z(f.target,"chatlist-chat");if(!v)return;const y=v.dataset.peerId.toPeerId();if(this.linkedChatId){he.setInnerPeer({peerId:y});return}if(await this.managers.appPeersManager.isForum(y)){Ee({langPackKey:"ChannelTopicsDiscussionForbidden"}),Za(v);return}const w=document.createDocumentFragment();w.append(L("Discussion.Set.Modal.Text.PublicChannelPublicGroup",[await Re({peerId:y}),await Re({peerId:this.chatId.toPeerId(!0)})]));const[b,S,C]=await Promise.all([this.managers.appChatsManager.isPublic(y.toChatId()),this.managers.appChatsManager.isPublic(this.chatId),this.managers.appProfileManager.getChatFull(y.toChatId())]),M=document.createElement("br");S||w.append(M.cloneNode(),M.cloneNode(),L("Discussion.Set.PrivateChannel")),b||w.append(M.cloneNode(),M.cloneNode(),L("Discussion.Set.PrivateGroup")),(C._==="chatFull"||C.pFlags.hidden_prehistory)&&w.append(M.cloneNode(),M.cloneNode(),L("DiscussionLinkGroupAlertHistory")),await Mt({peerId:this.chatId.toPeerId(!0),description:w,button:{langKey:"DiscussionLinkGroup"}}),this.managers.appChatsManager.setDiscussionGroup(this.chatId,y.toChatId())},{listenerSetter:this.listenerSetter});let c;i&&(c=ze("btn-primary btn-transparent primary",{icon:"newgroup",text:"DiscussionCreateGroup"}),O(c,async()=>{let f=await $a({peerId:this.chatId.toPeerId(!0),plainText:!0});f+=" Chat",this.slider.createTab(oS).open({peerIds:[],onCreate:y=>{this.slider.removeTabFromHistory(this),this.managers.appChatsManager.setDiscussionGroup(this.chatId,y)},openAfter:!1,title:f,asChannel:!0})},{listenerSetter:this.listenerSetter}),r.content.append(c)),r.content.append(l);const d=new Me({}),h=ze("btn-primary btn-transparent danger",{icon:"delete",text:i?"DiscussionUnlinkGroup":"DiscussionUnlinkChannel"});d.content.append(h),O(h,async()=>{const f=this.linkedChatId;await Mt({descriptionLangKey:i?"DiscussionUnlinkChannelAlert":"DiscussionUnlinkGroupAlert",descriptionLangArgs:[await Re({peerId:f.toPeerId(!0)})],button:{langKey:"DiscussionUnlink"}});const v=qt([h],!0);try{await this.managers.appChatsManager.setDiscussionGroup(i?this.chatId:f,void 0)}catch{}if(!i){this.close();return}v()},{listenerSetter:this.listenerSetter}),this.scrollable.append(n,a,r.container,d.container);const u=[],p=s.animationData.then(async f=>{const v=await f({container:n,loop:!0,autoplay:!0,width:120,height:120});return xs.waitForFirstFrame(v)}),m=(i?s.chats:Promise.resolve([await this.managers.appChatsManager.getChat(this.linkedChatId)])).then(f=>{const v=f.map(y=>{const w=[],{dom:b}=qe.addDialogNew({peerId:y.id.toPeerId(!0),container:l,rippleEnabled:!0,avatarSize:"abitbigger",loadPromises:w,wrapOptions:{middleware:this.middlewareHelper.get()}}),S=li(y)[0];return S?b.lastMessageSpan.textContent="@"+S:b.lastMessageSpan.append(L(i?"DiscussionController.PrivateGroup":"DiscussionController.PrivateChannel")),Promise.all(w)});return Promise.all(v)}),g=async()=>{await this.setCaption(),i&&(Array.from(l.children).forEach(f=>{const v=f.dataset.peerId.toChatId();f.classList.toggle("hide",this.linkedChatId?this.linkedChatId!==v:!1)}),d.container.classList.toggle("hide",!this.linkedChatId),c.classList.toggle("hide",!!this.linkedChatId))};return this.listenerSetter.add(I)("dialog_migrate",({migrateFrom:f,migrateTo:v})=>{const y=l.querySelector(`[data-peer-id="${f}"]`);y&&(y.dataset.peerId=""+v)}),this.listenerSetter.add(I)("chat_full_update",async f=>{if(this.chatId!==f)return;const v=await this.managers.appProfileManager.getChannelFull(f);this.linkedChatId=v.linked_chat_id,g()}),u.push(p,m),Promise.all(u).then(()=>g())}}function bS(o){return o+(window.devicePixelRatio>1?"@2x":"")}const wS=re("
"),CM=re("
"),IM=re("
"),LM=re("
"),M2=re('
'),_2=re("
");function FI(o){return(()=>{const e=P2();return A(e,V(Ws,{get each(){return o.content},children:([t,s])=>(()=>{const i=M2(),n=i.firstChild,a=n.nextSibling;return A(n,()=>L(t)),A(a,s),i})()})),e})()}function RI(o){const e=It(()=>Bn({peerId:o.peerId,size:24}));return(()=>{const t=_2();return Lo(t,"click",o.onClick,!0),A(t,()=>e.element,null),A(t,V(xI,{get peerId(){return o.peerId}}),null),t})()}Pi(["click"]);const E2=re(""),k2=re(""),T2=re("