From bffb5e5e6a9e47e3d3f9d07d9ffe232ec27d5ccd Mon Sep 17 00:00:00 2001 From: Jack Kingsman Date: Mon, 19 Jan 2026 22:57:25 -0800 Subject: [PATCH] Extract pubkey from anonreq --- frontend/dist/assets/index-CQVFPi-8.js.map | 1 - .../{index-CQVFPi-8.js => index-DqomNUfE.js} | 40 +++++++++---------- frontend/dist/assets/index-DqomNUfE.js.map | 1 + frontend/dist/index.html | 2 +- frontend/src/components/PacketVisualizer.tsx | 17 ++++++++ 5 files changed, 39 insertions(+), 22 deletions(-) delete mode 100644 frontend/dist/assets/index-CQVFPi-8.js.map rename frontend/dist/assets/{index-CQVFPi-8.js => index-DqomNUfE.js} (90%) create mode 100644 frontend/dist/assets/index-DqomNUfE.js.map diff --git a/frontend/dist/assets/index-CQVFPi-8.js.map b/frontend/dist/assets/index-CQVFPi-8.js.map deleted file mode 100644 index d6ed84db..00000000 --- a/frontend/dist/assets/index-CQVFPi-8.js.map +++ /dev/null @@ -1 +0,0 @@ -{"version":3,"mappings":";;;;;;;;6CASa,IAAIA,EAAE,OAAO,IAAI,eAAe,EAAEC,EAAE,OAAO,IAAI,cAAc,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,mBAAmB,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,eAAe,EAAEC,EAAE,OAAO,IAAI,mBAAmB,EAAEC,EAAE,OAAO,IAAI,gBAAgB,EAAEC,EAAE,OAAO,IAAI,YAAY,EAAEC,EAAE,OAAO,IAAI,YAAY,EAAEC,EAAE,OAAO,SAAS,SAASC,EAAEC,EAAE,CAAC,OAAUA,IAAP,MAAqB,OAAOA,GAAlB,SAA2B,MAAKA,EAAEF,GAAGE,EAAEF,CAAC,GAAGE,EAAE,YAAY,EAAqB,OAAOA,GAApB,WAAsBA,EAAE,KAAI,CAC1e,IAAIC,EAAE,CAAC,UAAU,UAAU,CAAC,MAAM,EAAE,EAAE,mBAAmB,UAAU,GAAG,oBAAoB,UAAU,GAAG,gBAAgB,UAAU,EAAE,EAAEC,EAAE,OAAO,OAAOC,EAAE,GAAG,SAASC,EAAEJ,EAAEK,EAAEC,EAAE,CAAC,KAAK,MAAMN,EAAE,KAAK,QAAQK,EAAE,KAAK,KAAKF,EAAE,KAAK,QAAQG,GAAGL,CAAC,CAACG,EAAE,UAAU,iBAAiB,GACnQA,EAAE,UAAU,SAAS,SAASJ,EAAEK,EAAE,CAAC,GAAc,OAAOL,GAAlB,UAAkC,OAAOA,GAApB,YAA6BA,GAAN,KAAQ,MAAM,MAAM,uHAAuH,EAAE,KAAK,QAAQ,gBAAgB,KAAKA,EAAEK,EAAE,UAAU,CAAC,EAAED,EAAE,UAAU,YAAY,SAASJ,EAAE,CAAC,KAAK,QAAQ,mBAAmB,KAAKA,EAAE,aAAa,CAAC,EAAE,SAASO,GAAG,EAAEA,EAAE,UAAUH,EAAE,UAAU,SAASI,EAAER,EAAEK,EAAEC,EAAE,CAAC,KAAK,MAAMN,EAAE,KAAK,QAAQK,EAAE,KAAK,KAAKF,EAAE,KAAK,QAAQG,GAAGL,CAAC,CAAC,IAAIQ,EAAED,EAAE,UAAU,IAAID,EACrfE,EAAE,YAAYD,EAAEN,EAAEO,EAAEL,EAAE,SAAS,EAAEK,EAAE,qBAAqB,GAAG,IAAIC,EAAE,MAAM,QAAQC,EAAE,OAAO,UAAU,eAAeC,EAAE,CAAC,QAAQ,IAAI,EAAEC,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,EAAE,EACxK,SAASC,EAAEd,EAAEK,EAAEC,EAAE,CAAC,IAAIS,EAAEC,GAAE,GAAGC,GAAE,KAAKC,GAAE,KAAK,GAASb,GAAN,KAAQ,IAAIU,KAAcV,EAAE,MAAX,SAAiBa,GAAEb,EAAE,KAAcA,EAAE,MAAX,SAAiBY,GAAE,GAAGZ,EAAE,KAAKA,EAAEM,EAAE,KAAKN,EAAEU,CAAC,GAAG,CAACF,EAAE,eAAeE,CAAC,IAAIC,GAAED,CAAC,EAAEV,EAAEU,CAAC,GAAG,IAAII,GAAE,UAAU,OAAO,EAAE,GAAOA,KAAJ,EAAMH,GAAE,SAASV,UAAU,EAAEa,GAAE,CAAC,QAAQC,GAAE,MAAMD,EAAC,EAAEE,GAAE,EAAEA,GAAEF,GAAEE,KAAID,GAAEC,EAAC,EAAE,UAAUA,GAAE,CAAC,EAAEL,GAAE,SAASI,EAAC,CAAC,GAAGpB,GAAGA,EAAE,aAAa,IAAIe,KAAKI,GAAEnB,EAAE,aAAamB,GAAWH,GAAED,CAAC,IAAZ,SAAgBC,GAAED,CAAC,EAAEI,GAAEJ,CAAC,GAAG,MAAM,CAAC,SAAS5B,EAAE,KAAKa,EAAE,IAAIiB,GAAE,IAAIC,GAAE,MAAMF,GAAE,OAAOJ,EAAE,OAAO,CAAC,CAC7a,SAASU,EAAEtB,EAAEK,EAAE,CAAC,MAAM,CAAC,SAASlB,EAAE,KAAKa,EAAE,KAAK,IAAIK,EAAE,IAAIL,EAAE,IAAI,MAAMA,EAAE,MAAM,OAAOA,EAAE,MAAM,CAAC,CAAC,SAASuB,EAAEvB,EAAE,CAAC,OAAiB,OAAOA,GAAlB,UAA4BA,IAAP,MAAUA,EAAE,WAAWb,CAAC,CAAC,SAASqC,EAAOxB,EAAE,CAAC,IAAIK,EAAE,CAAC,IAAI,KAAK,IAAI,IAAI,EAAE,MAAM,IAAIL,EAAE,QAAQ,QAAQ,SAASA,EAAE,CAAC,OAAOK,EAAEL,CAAC,CAAC,CAAC,CAAC,CAAC,IAAIyB,GAAE,OAAO,SAASC,EAAE1B,EAAEK,EAAE,CAAC,OAAiB,OAAOL,GAAlB,UAA4BA,IAAP,MAAgBA,EAAE,KAAR,KAAYwB,EAAO,GAAGxB,EAAE,GAAG,EAAEK,EAAE,SAAS,EAAE,CAAC,CAC/W,SAASsB,EAAE3B,EAAEK,EAAEC,EAAES,EAAEC,GAAE,CAAC,IAAIC,GAAE,OAAOjB,GAAmBiB,KAAd,aAA6BA,KAAZ,aAAcjB,EAAE,MAAK,IAAIkB,GAAE,GAAG,GAAUlB,IAAP,KAASkB,GAAE,OAAQ,QAAOD,GAAC,CAAE,IAAK,SAAS,IAAK,SAASC,GAAE,GAAG,MAAM,IAAK,SAAS,OAAOlB,EAAE,SAAQ,CAAE,KAAKb,EAAE,KAAKC,EAAE8B,GAAE,EAAE,CAAC,CAAC,GAAGA,GAAE,OAAOA,GAAElB,EAAEgB,GAAEA,GAAEE,EAAC,EAAElB,EAAOe,IAAL,GAAO,IAAIW,EAAER,GAAE,CAAC,EAAEH,EAAEL,EAAEM,EAAC,GAAGV,EAAE,GAASN,GAAN,OAAUM,EAAEN,EAAE,QAAQyB,GAAE,KAAK,EAAE,KAAKE,EAAEX,GAAEX,EAAEC,EAAE,GAAG,SAASN,GAAE,CAAC,OAAOA,EAAC,CAAC,GAASgB,IAAN,OAAUO,EAAEP,EAAC,IAAIA,GAAEM,EAAEN,GAAEV,GAAG,CAACU,GAAE,KAAKE,IAAGA,GAAE,MAAMF,GAAE,IAAI,IAAI,GAAGA,GAAE,KAAK,QAAQS,GAAE,KAAK,EAAE,KAAKzB,CAAC,GAAGK,EAAE,KAAKW,EAAC,GAAG,EAAyB,GAAvBE,GAAE,EAAEH,EAAOA,IAAL,GAAO,IAAIA,EAAE,IAAOL,EAAEV,CAAC,EAAE,QAAQmB,GAAE,EAAEA,GAAEnB,EAAE,OAAOmB,KAAI,CAACF,GACrfjB,EAAEmB,EAAC,EAAE,IAAIC,GAAEL,EAAEW,EAAET,GAAEE,EAAC,EAAED,IAAGS,EAAEV,GAAEZ,EAAEC,EAAEc,GAAEJ,EAAC,CAAC,SAASI,GAAErB,EAAEC,CAAC,EAAe,OAAOoB,IAApB,WAAsB,IAAIpB,EAAEoB,GAAE,KAAKpB,CAAC,EAAEmB,GAAE,EAAE,EAAEF,GAAEjB,EAAE,KAAI,GAAI,MAAMiB,GAAEA,GAAE,MAAMG,GAAEL,EAAEW,EAAET,GAAEE,IAAG,EAAED,IAAGS,EAAEV,GAAEZ,EAAEC,EAAEc,GAAEJ,EAAC,UAAqBC,KAAX,SAAa,MAAMZ,EAAE,OAAOL,CAAC,EAAE,MAAM,mDAAuEK,IAApB,kBAAsB,qBAAqB,OAAO,KAAKL,CAAC,EAAE,KAAK,IAAI,EAAE,IAAIK,GAAG,2EAA2E,EAAE,OAAOa,EAAC,CACzZ,SAASU,GAAE5B,EAAEK,EAAEC,EAAE,CAAC,GAASN,GAAN,KAAQ,OAAOA,EAAE,IAAIe,EAAE,GAAGC,GAAE,EAAE,OAAAW,EAAE3B,EAAEe,EAAE,GAAG,GAAG,SAASf,GAAE,CAAC,OAAOK,EAAE,KAAKC,EAAEN,GAAEgB,IAAG,CAAC,CAAC,EAASD,CAAC,CAAC,SAASc,GAAE7B,EAAE,CAAC,GAAQA,EAAE,UAAP,GAAe,CAAC,IAAIK,EAAEL,EAAE,QAAQK,EAAEA,EAAC,EAAGA,EAAE,KAAK,SAASA,EAAE,EAAQL,EAAE,UAAN,GAAoBA,EAAE,UAAP,MAAeA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAC,EAAE,SAASA,EAAE,EAAQL,EAAE,UAAN,GAAoBA,EAAE,UAAP,MAAeA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAC,CAAC,EAAOL,EAAE,UAAP,KAAiBA,EAAE,QAAQ,EAAEA,EAAE,QAAQK,EAAE,CAAC,GAAOL,EAAE,UAAN,EAAc,OAAOA,EAAE,QAAQ,QAAQ,MAAMA,EAAE,OAAQ,CAC5Z,IAAI8B,GAAE,CAAC,QAAQ,IAAI,EAAEC,EAAE,CAAC,WAAW,IAAI,EAAEC,GAAE,CAAC,uBAAuBF,GAAE,wBAAwBC,EAAE,kBAAkBnB,CAAC,EAAE,SAASqB,GAAG,CAAC,MAAM,MAAM,0DAA0D,CAAE,CACzM,OAAAC,GAAA,SAAiB,CAAC,IAAIN,GAAE,QAAQ,SAAS5B,EAAEK,EAAEC,EAAE,CAACsB,GAAE5B,EAAE,UAAU,CAACK,EAAE,MAAM,KAAK,SAAS,CAAC,EAAEC,CAAC,CAAC,EAAE,MAAM,SAASN,EAAE,CAAC,IAAIK,EAAE,EAAE,OAAAuB,GAAE5B,EAAE,UAAU,CAACK,GAAG,CAAC,EAASA,CAAC,EAAE,QAAQ,SAASL,EAAE,CAAC,OAAO4B,GAAE5B,EAAE,SAASA,EAAE,CAAC,OAAOA,CAAC,CAAC,GAAG,EAAE,EAAE,KAAK,SAASA,EAAE,CAAC,GAAG,CAACuB,EAAEvB,CAAC,EAAE,MAAM,MAAM,uEAAuE,EAAE,OAAOA,CAAC,CAAC,EAAEkC,GAAA,UAAkB9B,EAAE8B,YAAiB7C,EAAE6C,GAAA,SAAiB3C,EAAE2C,GAAA,cAAsB1B,EAAE0B,GAAA,WAAmB5C,EAAE4C,GAAA,SAAiBvC,EAClcuC,GAAA,mDAA2DF,GAAEE,GAAA,IAAYD,EACzEC,GAAA,aAAqB,SAASlC,EAAEK,EAAEC,EAAE,CAAC,GAAUN,GAAP,KAAqB,MAAM,MAAM,iFAAiFA,EAAE,GAAG,EAAE,IAAIe,EAAEb,EAAE,GAAGF,EAAE,KAAK,EAAEgB,GAAEhB,EAAE,IAAIiB,GAAEjB,EAAE,IAAIkB,GAAElB,EAAE,OAAO,GAASK,GAAN,KAAQ,CAAoE,GAA1DA,EAAE,MAAX,SAAiBY,GAAEZ,EAAE,IAAIa,GAAEN,EAAE,SAAkBP,EAAE,MAAX,SAAiBW,GAAE,GAAGX,EAAE,KAAQL,EAAE,MAAMA,EAAE,KAAK,aAAa,IAAImB,GAAEnB,EAAE,KAAK,aAAa,IAAIoB,MAAKf,EAAEM,EAAE,KAAKN,EAAEe,EAAC,GAAG,CAACP,EAAE,eAAeO,EAAC,IAAIL,EAAEK,EAAC,EAAWf,EAAEe,EAAC,IAAZ,QAAwBD,KAAT,OAAWA,GAAEC,EAAC,EAAEf,EAAEe,EAAC,EAAE,CAAC,IAAIA,GAAE,UAAU,OAAO,EAAE,GAAOA,KAAJ,EAAML,EAAE,SAAST,UAAU,EAAEc,GAAE,CAACD,GAAE,MAAMC,EAAC,EACtf,QAAQC,GAAE,EAAEA,GAAED,GAAEC,KAAIF,GAAEE,EAAC,EAAE,UAAUA,GAAE,CAAC,EAAEN,EAAE,SAASI,EAAC,CAAC,MAAM,CAAC,SAAShC,EAAE,KAAKa,EAAE,KAAK,IAAIgB,GAAE,IAAIC,GAAE,MAAMF,EAAE,OAAOG,EAAC,CAAC,EAAEgB,GAAA,cAAsB,SAASlC,EAAE,CAAC,OAAAA,EAAE,CAAC,SAASP,EAAE,cAAcO,EAAE,eAAeA,EAAE,aAAa,EAAE,SAAS,KAAK,SAAS,KAAK,cAAc,KAAK,YAAY,IAAI,EAAEA,EAAE,SAAS,CAAC,SAASR,EAAE,SAASQ,CAAC,EAASA,EAAE,SAASA,CAAC,EAAEkC,GAAA,cAAsBpB,EAAEoB,GAAA,cAAsB,SAASlC,EAAE,CAAC,IAAIK,EAAES,EAAE,KAAK,KAAKd,CAAC,EAAE,OAAAK,EAAE,KAAKL,EAASK,CAAC,EAAE6B,GAAA,UAAkB,UAAU,CAAC,MAAM,CAAC,QAAQ,IAAI,CAAC,EAC9dA,GAAA,WAAmB,SAASlC,EAAE,CAAC,MAAM,CAAC,SAASN,EAAE,OAAOM,CAAC,CAAC,EAAEkC,GAAA,eAAuBX,EAAEW,GAAA,KAAa,SAASlC,EAAE,CAAC,MAAM,CAAC,SAASH,EAAE,SAAS,CAAC,QAAQ,GAAG,QAAQG,CAAC,EAAE,MAAM6B,EAAC,CAAC,EAAEK,GAAA,KAAa,SAASlC,EAAEK,EAAE,CAAC,MAAM,CAAC,SAAST,EAAE,KAAKI,EAAE,QAAiBK,IAAT,OAAW,KAAKA,CAAC,CAAC,EAAE6B,GAAA,gBAAwB,SAASlC,EAAE,CAAC,IAAIK,EAAE0B,EAAE,WAAWA,EAAE,WAAW,GAAG,GAAG,CAAC/B,EAAC,CAAE,QAAC,CAAQ+B,EAAE,WAAW1B,CAAC,CAAC,EAAE6B,GAAA,aAAqBD,EAAEC,GAAA,YAAoB,SAASlC,EAAEK,EAAE,CAAC,OAAOyB,GAAE,QAAQ,YAAY9B,EAAEK,CAAC,CAAC,EAAE6B,GAAA,WAAmB,SAASlC,EAAE,CAAC,OAAO8B,GAAE,QAAQ,WAAW9B,CAAC,CAAC,EAC3fkC,GAAA,cAAsB,UAAU,GAAGA,GAAA,iBAAyB,SAASlC,EAAE,CAAC,OAAO8B,GAAE,QAAQ,iBAAiB9B,CAAC,CAAC,EAAEkC,GAAA,UAAkB,SAASlC,EAAEK,EAAE,CAAC,OAAOyB,GAAE,QAAQ,UAAU9B,EAAEK,CAAC,CAAC,EAAE6B,GAAA,MAAc,UAAU,CAAC,OAAOJ,GAAE,QAAQ,MAAK,CAAE,EAAEI,GAAA,oBAA4B,SAASlC,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,GAAE,QAAQ,oBAAoB9B,EAAEK,EAAEC,CAAC,CAAC,EAAE4B,GAAA,mBAA2B,SAASlC,EAAEK,EAAE,CAAC,OAAOyB,GAAE,QAAQ,mBAAmB9B,EAAEK,CAAC,CAAC,EAAE6B,GAAA,gBAAwB,SAASlC,EAAEK,EAAE,CAAC,OAAOyB,GAAE,QAAQ,gBAAgB9B,EAAEK,CAAC,CAAC,EACzd6B,GAAA,QAAgB,SAASlC,EAAEK,EAAE,CAAC,OAAOyB,GAAE,QAAQ,QAAQ9B,EAAEK,CAAC,CAAC,EAAE6B,GAAA,WAAmB,SAASlC,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,GAAE,QAAQ,WAAW9B,EAAEK,EAAEC,CAAC,CAAC,EAAE4B,GAAA,OAAe,SAASlC,EAAE,CAAC,OAAO8B,GAAE,QAAQ,OAAO9B,CAAC,CAAC,EAAEkC,GAAA,SAAiB,SAASlC,EAAE,CAAC,OAAO8B,GAAE,QAAQ,SAAS9B,CAAC,CAAC,EAAEkC,GAAA,qBAA6B,SAASlC,EAAEK,EAAEC,EAAE,CAAC,OAAOwB,GAAE,QAAQ,qBAAqB9B,EAAEK,EAAEC,CAAC,CAAC,EAAE4B,GAAA,cAAsB,UAAU,CAAC,OAAOJ,GAAE,QAAQ,cAAa,CAAE,EAAEI,GAAA,QAAgB,kDCtBlaC,GAAA,QAAiBC,GAAA;;;;;;;;6CCMN,IAAIhB,EAAEgB,GAAA,EAAiBnB,EAAE,OAAO,IAAI,eAAe,EAAE9B,EAAE,OAAO,IAAI,gBAAgB,EAAEkC,EAAE,OAAO,UAAU,eAAejC,EAAEgC,EAAE,mDAAmD,kBAAkB/B,EAAE,CAAC,IAAI,GAAG,IAAI,GAAG,OAAO,GAAG,SAAS,EAAE,EAClP,SAASC,EAAE0B,EAAEhB,EAAEmB,EAAE,CAAC,IAAId,EAAEU,EAAE,GAAGT,EAAE,KAAKY,EAAE,KAAcC,IAAT,SAAab,EAAE,GAAGa,GAAYnB,EAAE,MAAX,SAAiBM,EAAE,GAAGN,EAAE,KAAcA,EAAE,MAAX,SAAiBkB,EAAElB,EAAE,KAAK,IAAIK,KAAKL,EAAEqB,EAAE,KAAKrB,EAAEK,CAAC,GAAG,CAAChB,EAAE,eAAegB,CAAC,IAAIU,EAAEV,CAAC,EAAEL,EAAEK,CAAC,GAAG,GAAGW,GAAGA,EAAE,aAAa,IAAIX,KAAKL,EAAEgB,EAAE,aAAahB,EAAWe,EAAEV,CAAC,IAAZ,SAAgBU,EAAEV,CAAC,EAAEL,EAAEK,CAAC,GAAG,MAAM,CAAC,SAASY,EAAE,KAAKD,EAAE,IAAIV,EAAE,IAAIY,EAAE,MAAMH,EAAE,OAAO3B,EAAE,OAAO,CAAC,CAAC,OAAAiD,YAAiBlD,EAAEkD,GAAA,IAAY/C,EAAE+C,GAAA,KAAa/C,2CCPxWgD,GAAA,QAAiBF,GAAA;;;;;;;;sDCMN,SAAShB,EAAEpB,EAAEK,GAAE,CAAC,IAAIW,EAAEhB,EAAE,OAAOA,EAAE,KAAKK,EAAC,EAAEL,EAAE,KAAK,EAAEgB,GAAG,CAAC,IAAID,EAAEC,EAAE,IAAI,EAAEV,EAAEN,EAAEe,CAAC,EAAE,GAAG,EAAEI,EAAEb,EAAED,EAAC,EAAEL,EAAEe,CAAC,EAAEV,GAAEL,EAAEgB,CAAC,EAAEV,EAAEU,EAAED,MAAO,OAAMf,CAAC,CAAC,CAAC,SAASkB,EAAElB,EAAE,CAAC,OAAWA,EAAE,SAAN,EAAa,KAAKA,EAAE,CAAC,CAAC,CAAC,SAASiB,EAAEjB,EAAE,CAAC,GAAOA,EAAE,SAAN,EAAa,OAAO,KAAK,IAAIK,GAAEL,EAAE,CAAC,EAAEgB,EAAEhB,EAAE,MAAM,GAAGgB,IAAIX,GAAE,CAACL,EAAE,CAAC,EAAEgB,EAAEhB,EAAE,QAAQe,EAAE,EAAET,EAAEN,EAAE,OAAOL,EAAEW,IAAI,EAAES,EAAEpB,GAAG,CAAC,IAAI0B,EAAE,GAAGN,EAAE,GAAG,EAAEb,GAAEF,EAAEqB,CAAC,EAAEjC,GAAEiC,EAAE,EAAEzB,GAAEI,EAAEZ,EAAC,EAAE,GAAG,EAAE+B,EAAEjB,GAAEc,CAAC,EAAE5B,GAAEkB,GAAG,EAAEa,EAAEvB,GAAEM,EAAC,GAAGF,EAAEe,CAAC,EAAEnB,GAAEI,EAAEZ,EAAC,EAAE4B,EAAED,EAAE3B,KAAIY,EAAEe,CAAC,EAAEb,GAAEF,EAAEqB,CAAC,EAAEL,EAAED,EAAEM,WAAWjC,GAAEkB,GAAG,EAAEa,EAAEvB,GAAEoB,CAAC,EAAEhB,EAAEe,CAAC,EAAEnB,GAAEI,EAAEZ,EAAC,EAAE4B,EAAED,EAAE3B,OAAO,OAAMY,CAAC,CAAC,CAAC,OAAOK,EAAC,CAC3c,SAASc,EAAEnB,EAAEK,GAAE,CAAC,IAAIW,EAAEhB,EAAE,UAAUK,GAAE,UAAU,OAAWW,IAAJ,EAAMA,EAAEhB,EAAE,GAAGK,GAAE,EAAE,CAAC,GAAc,OAAO,aAAlB,UAA4C,OAAO,YAAY,KAAhC,WAAoC,CAAC,IAAIlB,EAAE,YAAYoD,EAAA,aAAqB,UAAU,CAAC,OAAOpD,EAAE,IAAG,CAAE,CAAC,KAAK,CAAC,IAAI,EAAE,KAAKG,EAAE,EAAE,IAAG,EAAGiD,EAAA,aAAqB,UAAU,CAAC,OAAO,EAAE,IAAG,EAAGjD,CAAC,CAAC,CAAC,IAAIC,EAAE,GAAGC,EAAE,GAAGC,EAAE,EAAEC,EAAE,KAAKG,EAAE,EAAEC,EAAE,GAAGC,EAAE,GAAGE,EAAE,GAAGE,EAAe,OAAO,YAApB,WAA+B,WAAW,KAAKC,EAAe,OAAO,cAApB,WAAiC,aAAa,KAAKG,EAAgB,OAAO,aAArB,IAAkC,aAAa,KACjd,OAAO,UAArB,KAAyC,UAAU,aAAnB,QAAwC,UAAU,WAAW,iBAA9B,QAA8C,UAAU,WAAW,eAAe,KAAK,UAAU,UAAU,EAAE,SAASC,EAAER,EAAE,CAAC,QAAQK,GAAEa,EAAE1B,CAAC,EAASa,KAAP,MAAU,CAAC,GAAUA,GAAE,WAAT,KAAkBY,EAAEzB,CAAC,UAAUa,GAAE,WAAWL,EAAEiB,EAAEzB,CAAC,EAAEa,GAAE,UAAUA,GAAE,eAAee,EAAE7B,EAAEc,EAAC,MAAO,OAAMA,GAAEa,EAAE1B,CAAC,CAAC,CAAC,CAAC,SAASiB,EAAET,EAAE,CAAW,GAAVC,EAAE,GAAGO,EAAER,CAAC,EAAK,CAACD,EAAE,GAAUmB,EAAE3B,CAAC,IAAV,KAAYQ,EAAE,GAAGW,GAAEC,CAAC,MAAM,CAAC,IAAIN,GAAEa,EAAE1B,CAAC,EAASa,KAAP,MAAUO,GAAEH,EAAEJ,GAAE,UAAUL,CAAC,CAAC,CAAC,CACra,SAASW,EAAEX,EAAEK,GAAE,CAACN,EAAE,GAAGE,IAAIA,EAAE,GAAGG,EAAES,CAAC,EAAEA,EAAE,IAAIf,EAAE,GAAG,IAAIkB,EAAEnB,EAAE,GAAG,CAAM,IAALW,EAAEH,EAAC,EAAMX,EAAEwB,EAAE3B,CAAC,EAASG,IAAP,OAAW,EAAEA,EAAE,eAAeW,KAAIL,GAAG,CAACc,EAAC,IAAK,CAAC,IAAIC,EAAErB,EAAE,SAAS,GAAgB,OAAOqB,GAApB,WAAsB,CAACrB,EAAE,SAAS,KAAKG,EAAEH,EAAE,cAAc,IAAIY,EAAES,EAAErB,EAAE,gBAAgBW,EAAC,EAAEA,GAAEkC,EAAQ,aAAY,EAAgB,OAAOjC,GAApB,WAAsBZ,EAAE,SAASY,EAAEZ,IAAIwB,EAAE3B,CAAC,GAAG0B,EAAE1B,CAAC,EAAEiB,EAAEH,EAAC,CAAC,MAAMY,EAAE1B,CAAC,EAAEG,EAAEwB,EAAE3B,CAAC,CAAC,CAAC,GAAUG,IAAP,KAAS,IAAIC,EAAE,OAAO,CAAC,IAAI0B,EAAEH,EAAE1B,CAAC,EAAS6B,IAAP,MAAUT,GAAEH,EAAEY,EAAE,UAAUhB,EAAC,EAAEV,EAAE,EAAE,CAAC,OAAOA,CAAC,QAAC,CAAQD,EAAE,KAAKG,EAAEmB,EAAElB,EAAE,EAAE,CAAC,CAAC,IAAIwB,EAAE,GAAGC,EAAE,KAAKV,EAAE,GAAGY,EAAE,EAAEC,EAAE,GACtc,SAASZ,GAAG,CAAC,MAAOyB,IAAQ,aAAY,EAAGb,EAAED,EAAO,CAAC,SAASE,IAAG,CAAC,GAAUJ,IAAP,KAAS,CAAC,IAAIvB,EAAEuC,EAAQ,eAAeb,EAAE1B,EAAE,IAAIK,GAAE,GAAG,GAAG,CAACA,GAAEkB,EAAE,GAAGvB,CAAC,CAAC,QAAC,CAAQK,GAAEuB,KAAKN,EAAE,GAAGC,EAAE,KAAK,CAAC,MAAMD,EAAE,EAAE,CAAC,IAAIM,EAAE,GAAgB,OAAOrB,GAApB,WAAsBqB,EAAE,UAAU,CAACrB,EAAEoB,EAAC,CAAC,UAAwB,OAAO,eAArB,IAAoC,CAAC,IAAIE,EAAE,IAAI,eAAeC,GAAED,EAAE,MAAMA,EAAE,MAAM,UAAUF,GAAEC,EAAE,UAAU,CAACE,GAAE,YAAY,IAAI,CAAC,CAAC,MAAMF,EAAE,UAAU,CAACzB,EAAEwB,GAAE,CAAC,CAAC,EAAE,SAASjB,GAAEV,EAAE,CAACuB,EAAEvB,EAAEsB,IAAIA,EAAE,GAAGM,EAAC,EAAG,CAAC,SAAShB,GAAEZ,EAAEK,GAAE,CAACQ,EAAEV,EAAE,UAAU,CAACH,EAAEuC,EAAQ,cAAc,CAAC,EAAElC,EAAC,CAAC,CAC5dkC,EAAA,sBAA8B,EAAEA,EAAA,2BAAmC,EAAEA,EAAA,qBAA6B,EAAEA,EAAA,wBAAgC,EAAEA,EAAA,mBAA2B,KAAKA,EAAA,8BAAsC,EAAEA,EAAA,wBAAgC,SAASvC,EAAE,CAACA,EAAE,SAAS,IAAI,EAAEuC,6BAAmC,UAAU,CAACxC,GAAGD,IAAIC,EAAE,GAAGW,GAAEC,CAAC,EAAE,EAC1U4B,EAAA,wBAAgC,SAASvC,EAAE,CAAC,EAAEA,GAAG,IAAIA,EAAE,QAAQ,MAAM,iHAAiH,EAAEyB,EAAE,EAAEzB,EAAE,KAAK,MAAM,IAAIA,CAAC,EAAE,CAAC,EAAEuC,EAAA,iCAAyC,UAAU,CAAC,OAAO1C,CAAC,EAAE0C,EAAA,8BAAsC,UAAU,CAAC,OAAOrB,EAAE3B,CAAC,CAAC,EAAEgD,EAAA,cAAsB,SAASvC,EAAE,CAAC,OAAOH,EAAC,CAAE,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,IAAIQ,GAAE,EAAE,MAAM,QAAQA,GAAER,CAAC,CAAC,IAAImB,EAAEnB,EAAEA,EAAEQ,GAAE,GAAG,CAAC,OAAOL,EAAC,CAAE,QAAC,CAAQH,EAAEmB,CAAC,CAAC,EAAEuB,EAAA,wBAAgC,UAAU,GAC7fA,EAAA,sBAA8B,UAAU,GAAGA,EAAA,yBAAiC,SAASvC,EAAEK,GAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,MAAM,QAAQA,EAAE,CAAC,CAAC,IAAIgB,EAAEnB,EAAEA,EAAEG,EAAE,GAAG,CAAC,OAAOK,GAAC,CAAE,QAAC,CAAQR,EAAEmB,CAAC,CAAC,EAChMuB,EAAA,0BAAkC,SAASvC,EAAEK,GAAEW,EAAE,CAAC,IAAID,EAAEwB,EAAQ,eAA8F,OAApE,OAAOvB,GAAlB,UAA4BA,IAAP,MAAUA,EAAEA,EAAE,MAAMA,EAAa,OAAOA,GAAlB,UAAqB,EAAEA,EAAED,EAAEC,EAAED,GAAGC,EAAED,EAASf,EAAC,CAAE,IAAK,GAAE,IAAIM,EAAE,GAAG,MAAM,IAAK,GAAEA,EAAE,IAAI,MAAM,IAAK,GAAEA,EAAE,WAAW,MAAM,IAAK,GAAEA,EAAE,IAAI,MAAM,QAAQA,EAAE,GAAG,CAAC,OAAAA,EAAEU,EAAEV,EAAEN,EAAE,CAAC,GAAGP,IAAI,SAASY,GAAE,cAAcL,EAAE,UAAUgB,EAAE,eAAeV,EAAE,UAAU,EAAE,EAAEU,EAAED,GAAGf,EAAE,UAAUgB,EAAEI,EAAE5B,EAAEQ,CAAC,EAASkB,EAAE3B,CAAC,IAAV,MAAaS,IAAIkB,EAAE1B,CAAC,IAAIS,GAAGG,EAAES,CAAC,EAAEA,EAAE,IAAIZ,EAAE,GAAGW,GAAEH,EAAEO,EAAED,CAAC,KAAKf,EAAE,UAAUM,EAAEc,EAAE7B,EAAES,CAAC,EAAED,GAAGD,IAAIC,EAAE,GAAGW,GAAEC,CAAC,IAAWX,CAAC,EACneuC,EAAA,qBAA6BzB,EAAEyB,EAAA,sBAA8B,SAASvC,EAAE,CAAC,IAAIK,GAAER,EAAE,OAAO,UAAU,CAAC,IAAImB,EAAEnB,EAAEA,EAAEQ,GAAE,GAAG,CAAC,OAAOL,EAAE,MAAM,KAAK,SAAS,CAAC,QAAC,CAAQH,EAAEmB,CAAC,CAAC,CAAC,kDCf7JwB,GAAA,QAAiBJ,GAAA;;;;;;;;6CCSN,IAAIK,EAAGL,KAAiBM,EAAGC,GAAA,EAAqB,SAAStD,EAAEW,EAAE,CAAC,QAAQK,EAAE,yDAAyDL,EAAEgB,EAAE,EAAEA,EAAE,UAAU,OAAOA,IAAIX,GAAG,WAAW,mBAAmB,UAAUW,CAAC,CAAC,EAAE,MAAM,yBAAyBhB,EAAE,WAAWK,EAAE,gHAAgH,CAAC,IAAIuC,EAAG,IAAI,IAAIC,EAAG,GAAG,SAASC,EAAG9C,EAAEK,EAAE,CAAC0C,EAAG/C,EAAEK,CAAC,EAAE0C,EAAG/C,EAAE,UAAUK,CAAC,CAAC,CACxb,SAAS0C,EAAG/C,EAAEK,EAAE,CAAS,IAARwC,EAAG7C,CAAC,EAAEK,EAAML,EAAE,EAAEA,EAAEK,EAAE,OAAOL,IAAI4C,EAAG,IAAIvC,EAAEL,CAAC,CAAC,CAAC,CAC5D,IAAIgD,EAAG,EAAgB,OAAO,OAArB,KAA2C,OAAO,OAAO,SAA5B,KAAoD,OAAO,OAAO,SAAS,cAArC,KAAoDC,EAAG,OAAO,UAAU,eAAeC,EAAG,8VAA8VC,EACpgB,GAAGC,EAAG,GAAG,SAASC,EAAGrD,EAAE,CAAC,OAAGiD,EAAG,KAAKG,EAAGpD,CAAC,KAAciD,EAAG,KAAKE,EAAGnD,CAAC,EAAQ,GAAMkD,EAAG,KAAKlD,CAAC,EAASoD,EAAGpD,CAAC,EAAE,IAAGmD,EAAGnD,CAAC,EAAE,GAAS,GAAE,CAAC,SAASsD,EAAGtD,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAUC,IAAP,MAAcA,EAAE,OAAN,EAAW,MAAM,GAAG,OAAO,OAAOX,EAAC,CAAE,IAAK,WAAW,IAAK,SAAS,MAAM,GAAG,IAAK,UAAU,OAAGU,EAAQ,GAAaC,IAAP,KAAe,CAACA,EAAE,iBAAgBhB,EAAEA,EAAE,cAAc,MAAM,EAAE,CAAC,EAAkBA,IAAV,SAAuBA,IAAV,SAAY,QAAQ,QAAQ,CAAC,CACzX,SAASuD,EAAGvD,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAUV,IAAP,MAAwB,OAAOA,EAArB,KAAwBiD,EAAGtD,EAAEK,EAAEW,EAAED,CAAC,EAAE,MAAM,GAAG,GAAGA,EAAE,MAAM,GAAG,GAAUC,IAAP,KAAS,OAAOA,EAAE,KAAI,CAAE,IAAK,GAAE,MAAM,CAACX,EAAE,IAAK,GAAE,OAAWA,IAAL,GAAO,IAAK,GAAE,OAAO,MAAMA,CAAC,EAAE,IAAK,GAAE,OAAO,MAAMA,CAAC,GAAG,EAAEA,CAAC,CAAC,QAAQ,CAAC,SAASX,EAAEM,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAE,CAAC,KAAK,gBAAoBd,IAAJ,GAAWA,IAAJ,GAAWA,IAAJ,EAAM,KAAK,cAAcU,EAAE,KAAK,mBAAmBT,EAAE,KAAK,gBAAgBU,EAAE,KAAK,aAAahB,EAAE,KAAK,KAAKK,EAAE,KAAK,YAAYe,EAAE,KAAK,kBAAkBD,CAAC,CAAC,IAAIrB,EAAE,GACnb,uIAAuI,MAAM,GAAG,EAAE,QAAQ,SAASE,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,gBAAgB,gBAAgB,EAAE,CAAC,YAAY,OAAO,EAAE,CAAC,UAAU,KAAK,EAAE,CAAC,YAAY,YAAY,CAAC,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIK,EAAEL,EAAE,CAAC,EAAEF,EAAEO,CAAC,EAAE,IAAIX,EAAEW,EAAE,EAAE,GAAGL,EAAE,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,kBAAkB,YAAY,aAAa,OAAO,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,GAAG,EAAE,CAAC,CAAC,EAC3e,CAAC,cAAc,4BAA4B,YAAY,eAAe,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,8OAA8O,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,GAAG,EAAE,CAAC,CAAC,EACzb,CAAC,UAAU,WAAW,QAAQ,UAAU,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,UAAU,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,OAAO,OAAO,OAAO,MAAM,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,UAAU,OAAO,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,IAAIwD,EAAG,gBAAgB,SAASC,EAAGzD,EAAE,CAAC,OAAOA,EAAE,CAAC,EAAE,YAAW,CAAE,CACxZ,0jCAA0jC,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIK,EAAEL,EAAE,QAAQwD,EACzmCC,CAAE,EAAE3D,EAAEO,CAAC,EAAE,IAAIX,EAAEW,EAAE,EAAE,GAAGL,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC,EAAE,2EAA2E,MAAM,GAAG,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIK,EAAEL,EAAE,QAAQwD,EAAGC,CAAE,EAAE3D,EAAEO,CAAC,EAAE,IAAIX,EAAEW,EAAE,EAAE,GAAGL,EAAE,+BAA+B,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,WAAW,WAAW,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIK,EAAEL,EAAE,QAAQwD,EAAGC,CAAE,EAAE3D,EAAEO,CAAC,EAAE,IAAIX,EAAEW,EAAE,EAAE,GAAGL,EAAE,uCAAuC,GAAG,EAAE,CAAC,CAAC,EAAE,CAAC,WAAW,aAAa,EAAE,QAAQ,SAASA,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,GAAG,EAAE,CAAC,CAAC,EACndF,EAAE,UAAU,IAAIJ,EAAE,YAAY,EAAE,GAAG,aAAa,+BAA+B,GAAG,EAAE,EAAE,CAAC,MAAM,OAAO,SAAS,YAAY,EAAE,QAAQ,SAASM,EAAE,CAACF,EAAEE,CAAC,EAAE,IAAIN,EAAEM,EAAE,EAAE,GAAGA,EAAE,YAAW,EAAG,KAAK,GAAG,EAAE,CAAC,CAAC,EAC7L,SAAS0D,EAAG1D,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAER,EAAE,eAAeO,CAAC,EAAEP,EAAEO,CAAC,EAAE,MAAeC,IAAP,KAAaA,EAAE,OAAN,EAAWS,GAAG,EAAE,EAAEV,EAAE,SAAeA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,KAAkBA,EAAE,CAAC,IAAT,OAAWkD,EAAGlD,EAAEW,EAAEV,EAAES,CAAC,IAAIC,EAAE,MAAMD,GAAUT,IAAP,KAAS+C,EAAGhD,CAAC,IAAWW,IAAP,KAAShB,EAAE,gBAAgBK,CAAC,EAAEL,EAAE,aAAaK,EAAE,GAAGW,CAAC,GAAGV,EAAE,gBAAgBN,EAAEM,EAAE,YAAY,EAASU,IAAP,KAAaV,EAAE,OAAN,EAAW,GAAG,GAAGU,GAAGX,EAAEC,EAAE,cAAcS,EAAET,EAAE,mBAA0BU,IAAP,KAAShB,EAAE,gBAAgBK,CAAC,GAAGC,EAAEA,EAAE,KAAKU,EAAMV,IAAJ,GAAWA,IAAJ,GAAYU,IAAL,GAAO,GAAG,GAAGA,EAAED,EAAEf,EAAE,eAAee,EAAEV,EAAEW,CAAC,EAAEhB,EAAE,aAAaK,EAAEW,CAAC,IAAG,CACjd,IAAI2C,EAAGlB,EAAG,mDAAmDmB,EAAG,OAAO,IAAI,eAAe,EAAEC,EAAG,OAAO,IAAI,cAAc,EAAEC,EAAG,OAAO,IAAI,gBAAgB,EAAEC,EAAG,OAAO,IAAI,mBAAmB,EAAEC,EAAG,OAAO,IAAI,gBAAgB,EAAEC,EAAG,OAAO,IAAI,gBAAgB,EAAEC,EAAG,OAAO,IAAI,eAAe,EAAEC,GAAG,OAAO,IAAI,mBAAmB,EAAEC,EAAG,OAAO,IAAI,gBAAgB,EAAEC,EAAG,OAAO,IAAI,qBAAqB,EAAEC,GAAG,OAAO,IAAI,YAAY,EAAEC,GAAG,OAAO,IAAI,YAAY,EACtbC,GAAG,OAAO,IAAI,iBAAiB,EAAqGC,EAAG,OAAO,SAAS,SAASC,GAAG1E,EAAE,CAAC,OAAUA,IAAP,MAAqB,OAAOA,GAAlB,SAA2B,MAAKA,EAAEyE,GAAIzE,EAAEyE,CAAE,GAAGzE,EAAE,YAAY,EAAqB,OAAOA,GAApB,WAAsBA,EAAE,KAAI,CAAC,IAAID,EAAE,OAAO,OAAO4E,EAAG,SAASC,EAAG5E,EAAE,CAAC,GAAY2E,IAAT,OAAY,GAAG,CAAC,MAAM,MAAK,CAAG,OAAO3D,EAAE,CAAC,IAAIX,EAAEW,EAAE,MAAM,KAAI,EAAG,MAAM,cAAc,EAAE2D,EAAGtE,GAAGA,EAAE,CAAC,GAAG,EAAE,CAAC,MAAM;AAAA,EAAKsE,EAAG3E,CAAC,CAAC,IAAI6E,EAAG,GACzb,SAASC,EAAG9E,EAAEK,EAAE,CAAC,GAAG,CAACL,GAAG6E,EAAG,MAAM,GAAGA,EAAG,GAAG,IAAI7D,EAAE,MAAM,kBAAkB,MAAM,kBAAkB,OAAO,GAAG,CAAC,GAAGX,EAAE,GAAGA,EAAE,UAAU,CAAC,MAAM,OAAQ,EAAE,OAAO,eAAeA,EAAE,UAAU,QAAQ,CAAC,IAAI,UAAU,CAAC,MAAM,OAAQ,CAAC,CAAC,EAAa,OAAO,SAAlB,UAA2B,QAAQ,UAAU,CAAC,GAAG,CAAC,QAAQ,UAAUA,EAAE,EAAE,CAAC,OAAOlB,GAAE,CAAC,IAAI4B,EAAE5B,EAAC,CAAC,QAAQ,UAAUa,EAAE,GAAGK,CAAC,CAAC,KAAK,CAAC,GAAG,CAACA,EAAE,MAAM,OAAOlB,GAAE,CAAC4B,EAAE5B,EAAC,CAACa,EAAE,KAAKK,EAAE,SAAS,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,MAAK,CAAG,OAAOlB,GAAE,CAAC4B,EAAE5B,EAAC,CAACa,EAAC,CAAE,CAAC,OAAOb,GAAE,CAAC,GAAGA,IAAG4B,GAAc,OAAO5B,GAAE,OAApB,SAA0B,CAAC,QAAQmB,EAAEnB,GAAE,MAAM,MAAM;AAAA,CAAI,EACvfiC,EAAEL,EAAE,MAAM,MAAM;AAAA,CAAI,EAAEI,EAAEb,EAAE,OAAO,EAAEY,EAAEE,EAAE,OAAO,EAAE,GAAGD,GAAG,GAAGD,GAAGZ,EAAEa,CAAC,IAAIC,EAAEF,CAAC,GAAGA,IAAI,KAAK,GAAGC,GAAG,GAAGD,EAAEC,IAAID,IAAI,GAAGZ,EAAEa,CAAC,IAAIC,EAAEF,CAAC,EAAE,CAAC,GAAOC,IAAJ,GAAWD,IAAJ,EAAO,EAAG,IAAGC,IAAID,IAAI,EAAEA,GAAGZ,EAAEa,CAAC,IAAIC,EAAEF,CAAC,EAAE,CAAC,IAAID,GAAE;AAAA,EAAKX,EAAEa,CAAC,EAAE,QAAQ,WAAW,MAAM,EAAE,OAAAnB,EAAE,aAAaiB,GAAE,SAAS,aAAa,IAAIA,GAAEA,GAAE,QAAQ,cAAcjB,EAAE,WAAW,GAAUiB,EAAC,OAAO,GAAGE,GAAG,GAAGD,GAAG,KAAK,CAAC,CAAC,QAAC,CAAQ2D,EAAG,GAAG,MAAM,kBAAkB7D,CAAC,CAAC,OAAOhB,EAAEA,EAAEA,EAAE,aAAaA,EAAE,KAAK,IAAI4E,EAAG5E,CAAC,EAAE,EAAE,CAC9Z,SAAS+E,GAAG/E,EAAE,CAAC,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,OAAO4E,EAAG5E,EAAE,IAAI,EAAE,IAAK,IAAG,OAAO4E,EAAG,MAAM,EAAE,IAAK,IAAG,OAAOA,EAAG,UAAU,EAAE,IAAK,IAAG,OAAOA,EAAG,cAAc,EAAE,IAAK,GAAE,IAAK,GAAE,IAAK,IAAG,OAAO5E,EAAE8E,EAAG9E,EAAE,KAAK,EAAE,EAAEA,EAAE,IAAK,IAAG,OAAOA,EAAE8E,EAAG9E,EAAE,KAAK,OAAO,EAAE,EAAEA,EAAE,IAAK,GAAE,OAAOA,EAAE8E,EAAG9E,EAAE,KAAK,EAAE,EAAEA,EAAE,QAAQ,MAAM,EAAE,CAAC,CACxR,SAASgF,GAAGhF,EAAE,CAAC,GAASA,GAAN,KAAQ,OAAO,KAAK,GAAgB,OAAOA,GAApB,WAAsB,OAAOA,EAAE,aAAaA,EAAE,MAAM,KAAK,GAAc,OAAOA,GAAlB,SAAoB,OAAOA,EAAE,OAAOA,EAAC,CAAE,KAAK8D,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,SAAS,KAAKG,EAAG,MAAM,WAAW,KAAKD,EAAG,MAAM,aAAa,KAAKK,EAAG,MAAM,WAAW,KAAKC,EAAG,MAAM,cAAc,CAAC,GAAc,OAAOrE,GAAlB,SAAoB,OAAOA,EAAE,SAAQ,CAAE,KAAKkE,EAAG,OAAOlE,EAAE,aAAa,WAAW,YAAY,KAAKiE,EAAG,OAAOjE,EAAE,SAAS,aAAa,WAAW,YAAY,KAAKmE,GAAG,IAAI9D,EAAEL,EAAE,OAAO,OAAAA,EAAEA,EAAE,YAAYA,IAAIA,EAAEK,EAAE,aAClfA,EAAE,MAAM,GAAGL,EAAOA,IAAL,GAAO,cAAcA,EAAE,IAAI,cAAqBA,EAAE,KAAKsE,GAAG,OAAOjE,EAAEL,EAAE,aAAa,KAAYK,IAAP,KAASA,EAAE2E,GAAGhF,EAAE,IAAI,GAAG,OAAO,KAAKuE,GAAGlE,EAAEL,EAAE,SAASA,EAAEA,EAAE,MAAM,GAAG,CAAC,OAAOgF,GAAGhF,EAAEK,CAAC,CAAC,CAAC,MAAS,EAAE,CAAC,OAAO,IAAI,CAC3M,SAAS4E,GAAGjF,EAAE,CAAC,IAAIK,EAAEL,EAAE,KAAK,OAAOA,EAAE,IAAG,CAAE,IAAK,IAAG,MAAM,QAAQ,IAAK,GAAE,OAAOK,EAAE,aAAa,WAAW,YAAY,IAAK,IAAG,OAAOA,EAAE,SAAS,aAAa,WAAW,YAAY,IAAK,IAAG,MAAM,qBAAqB,IAAK,IAAG,OAAOL,EAAEK,EAAE,OAAOL,EAAEA,EAAE,aAAaA,EAAE,MAAM,GAAGK,EAAE,cAAmBL,IAAL,GAAO,cAAcA,EAAE,IAAI,cAAc,IAAK,GAAE,MAAM,WAAW,IAAK,GAAE,OAAOK,EAAE,IAAK,GAAE,MAAM,SAAS,IAAK,GAAE,MAAM,OAAO,IAAK,GAAE,MAAM,OAAO,IAAK,IAAG,OAAO2E,GAAG3E,CAAC,EAAE,IAAK,GAAE,OAAOA,IAAI0D,EAAG,aAAa,OAAO,IAAK,IAAG,MAAM,YACtf,IAAK,IAAG,MAAM,WAAW,IAAK,IAAG,MAAM,QAAQ,IAAK,IAAG,MAAM,WAAW,IAAK,IAAG,MAAM,eAAe,IAAK,IAAG,MAAM,gBAAgB,IAAK,GAAE,IAAK,GAAE,IAAK,IAAG,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,GAAgB,OAAO1D,GAApB,WAAsB,OAAOA,EAAE,aAAaA,EAAE,MAAM,KAAK,GAAc,OAAOA,GAAlB,SAAoB,OAAOA,CAAC,CAAC,OAAO,IAAI,CAAC,SAAS6E,GAAGlF,EAAE,CAAC,OAAO,OAAOA,EAAC,CAAE,IAAK,UAAU,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,OAAOA,EAAE,IAAK,SAAS,OAAOA,EAAE,QAAQ,MAAM,EAAE,CAAC,CACra,SAASmF,GAAGnF,EAAE,CAAC,IAAIK,EAAEL,EAAE,KAAK,OAAOA,EAAEA,EAAE,WAAqBA,EAAE,YAAW,IAAvB,UAAyCK,IAAb,YAA0BA,IAAV,QAAY,CAC1G,SAAS+E,GAAGpF,EAAE,CAAC,IAAIK,EAAE8E,GAAGnF,CAAC,EAAE,UAAU,QAAQgB,EAAE,OAAO,yBAAyBhB,EAAE,YAAY,UAAUK,CAAC,EAAEU,EAAE,GAAGf,EAAEK,CAAC,EAAE,GAAG,CAACL,EAAE,eAAeK,CAAC,GAAiB,OAAOW,EAArB,KAAqC,OAAOA,EAAE,KAAtB,YAAwC,OAAOA,EAAE,KAAtB,WAA0B,CAAC,IAAIV,EAAEU,EAAE,IAAII,EAAEJ,EAAE,IAAI,cAAO,eAAehB,EAAEK,EAAE,CAAC,aAAa,GAAG,IAAI,UAAU,CAAC,OAAOC,EAAE,KAAK,IAAI,CAAC,EAAE,IAAI,SAASN,EAAE,CAACe,EAAE,GAAGf,EAAEoB,EAAE,KAAK,KAAKpB,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,eAAeA,EAAEK,EAAE,CAAC,WAAWW,EAAE,UAAU,CAAC,EAAQ,CAAC,SAAS,UAAU,CAAC,OAAOD,CAAC,EAAE,SAAS,SAASf,EAAE,CAACe,EAAE,GAAGf,CAAC,EAAE,aAAa,UAAU,CAACA,EAAE,cACxf,KAAK,OAAOA,EAAEK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAASgF,GAAGrF,EAAE,CAACA,EAAE,gBAAgBA,EAAE,cAAcoF,GAAGpF,CAAC,EAAE,CAAC,SAASsF,GAAGtF,EAAE,CAAC,GAAG,CAACA,EAAE,MAAM,GAAG,IAAIK,EAAEL,EAAE,cAAc,GAAG,CAACK,EAAE,SAAS,IAAIW,EAAEX,EAAE,SAAQ,EAAOU,EAAE,GAAG,OAAAf,IAAIe,EAAEoE,GAAGnF,CAAC,EAAEA,EAAE,QAAQ,OAAO,QAAQA,EAAE,OAAOA,EAAEe,EAASf,IAAIgB,GAAGX,EAAE,SAASL,CAAC,EAAE,IAAI,EAAE,CAAC,SAASuF,GAAGvF,EAAE,CAAsD,GAArDA,EAAEA,IAAkB,OAAO,SAArB,IAA8B,SAAS,QAAyB,OAAOA,EAArB,IAAuB,OAAO,KAAK,GAAG,CAAC,OAAOA,EAAE,eAAeA,EAAE,IAAI,MAAS,CAAC,OAAOA,EAAE,IAAI,CAAC,CACpa,SAASwF,GAAGxF,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAE,QAAQ,OAAON,EAAE,GAAGM,EAAE,CAAC,eAAe,OAAO,aAAa,OAAO,MAAM,OAAO,QAAcW,GAAIhB,EAAE,cAAc,cAAc,CAAC,CAAC,CAAC,SAASyF,GAAGzF,EAAEK,EAAE,CAAC,IAAIW,EAAQX,EAAE,cAAR,KAAqB,GAAGA,EAAE,aAAaU,EAAQV,EAAE,SAAR,KAAgBA,EAAE,QAAQA,EAAE,eAAeW,EAAEkE,GAAS7E,EAAE,OAAR,KAAcA,EAAE,MAAMW,CAAC,EAAEhB,EAAE,cAAc,CAAC,eAAee,EAAE,aAAaC,EAAE,WAAwBX,EAAE,OAAf,YAA+BA,EAAE,OAAZ,QAAuBA,EAAE,SAAR,KAAsBA,EAAE,OAAR,IAAa,CAAC,CAAC,SAASqF,GAAG1F,EAAEK,EAAE,CAACA,EAAEA,EAAE,QAAcA,GAAN,MAASqD,EAAG1D,EAAE,UAAUK,EAAE,EAAE,CAAC,CAC9d,SAASsF,GAAG3F,EAAEK,EAAE,CAACqF,GAAG1F,EAAEK,CAAC,EAAE,IAAIW,EAAEkE,GAAG7E,EAAE,KAAK,EAAEU,EAAEV,EAAE,KAAK,GAASW,GAAN,KAAsBD,IAAX,UAAqBC,IAAJ,GAAYhB,EAAE,QAAP,IAAcA,EAAE,OAAOgB,KAAEhB,EAAE,MAAM,GAAGgB,GAAOhB,EAAE,QAAQ,GAAGgB,IAAIhB,EAAE,MAAM,GAAGgB,WAAsBD,IAAX,UAAwBA,IAAV,QAAY,CAACf,EAAE,gBAAgB,OAAO,EAAE,MAAM,CAACK,EAAE,eAAe,OAAO,EAAEuF,GAAG5F,EAAEK,EAAE,KAAKW,CAAC,EAAEX,EAAE,eAAe,cAAc,GAAGuF,GAAG5F,EAAEK,EAAE,KAAK6E,GAAG7E,EAAE,YAAY,CAAC,EAAQA,EAAE,SAAR,MAAuBA,EAAE,gBAAR,OAAyBL,EAAE,eAAe,CAAC,CAACK,EAAE,eAAe,CACla,SAASwF,GAAG7F,EAAEK,EAAEW,EAAE,CAAC,GAAGX,EAAE,eAAe,OAAO,GAAGA,EAAE,eAAe,cAAc,EAAE,CAAC,IAAIU,EAAEV,EAAE,KAAK,GAAG,EAAaU,IAAX,UAAwBA,IAAV,SAAsBV,EAAE,QAAX,QAAyBA,EAAE,QAAT,MAAgB,OAAOA,EAAE,GAAGL,EAAE,cAAc,aAAagB,GAAGX,IAAIL,EAAE,QAAQA,EAAE,MAAMK,GAAGL,EAAE,aAAaK,CAAC,CAACW,EAAEhB,EAAE,KAAUgB,IAAL,KAAShB,EAAE,KAAK,IAAIA,EAAE,eAAe,CAAC,CAACA,EAAE,cAAc,eAAoBgB,IAAL,KAAShB,EAAE,KAAKgB,EAAE,CACzV,SAAS4E,GAAG5F,EAAEK,EAAEW,EAAE,EAAeX,IAAX,UAAckF,GAAGvF,EAAE,aAAa,IAAIA,KAAQgB,GAAN,KAAQhB,EAAE,aAAa,GAAGA,EAAE,cAAc,aAAaA,EAAE,eAAe,GAAGgB,IAAIhB,EAAE,aAAa,GAAGgB,GAAE,CAAC,IAAI8E,GAAG,MAAM,QAC7K,SAASC,GAAG/F,EAAEK,EAAEW,EAAED,EAAE,CAAa,GAAZf,EAAEA,EAAE,QAAWK,EAAE,CAACA,EAAE,GAAG,QAAQC,EAAE,EAAEA,EAAEU,EAAE,OAAOV,IAAID,EAAE,IAAIW,EAAEV,CAAC,CAAC,EAAE,GAAG,IAAIU,EAAE,EAAEA,EAAEhB,EAAE,OAAOgB,IAAIV,EAAED,EAAE,eAAe,IAAIL,EAAEgB,CAAC,EAAE,KAAK,EAAEhB,EAAEgB,CAAC,EAAE,WAAWV,IAAIN,EAAEgB,CAAC,EAAE,SAASV,GAAGA,GAAGS,IAAIf,EAAEgB,CAAC,EAAE,gBAAgB,GAAG,KAAK,CAAmB,IAAlBA,EAAE,GAAGkE,GAAGlE,CAAC,EAAEX,EAAE,KAASC,EAAE,EAAEA,EAAEN,EAAE,OAAOM,IAAI,CAAC,GAAGN,EAAEM,CAAC,EAAE,QAAQU,EAAE,CAAChB,EAAEM,CAAC,EAAE,SAAS,GAAGS,IAAIf,EAAEM,CAAC,EAAE,gBAAgB,IAAI,MAAM,CAAQD,IAAP,MAAUL,EAAEM,CAAC,EAAE,WAAWD,EAAEL,EAAEM,CAAC,EAAE,CAAQD,IAAP,OAAWA,EAAE,SAAS,GAAG,CAAC,CACxY,SAAS2F,GAAGhG,EAAEK,EAAE,CAAC,GAASA,EAAE,yBAAR,KAAgC,MAAM,MAAMhB,EAAE,EAAE,CAAC,EAAE,OAAOU,EAAE,GAAGM,EAAE,CAAC,MAAM,OAAO,aAAa,OAAO,SAAS,GAAGL,EAAE,cAAc,YAAY,CAAC,CAAC,CAAC,SAASiG,GAAGjG,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAE,MAAM,GAASW,GAAN,KAAQ,CAA+B,GAA9BA,EAAEX,EAAE,SAASA,EAAEA,EAAE,aAAsBW,GAAN,KAAQ,CAAC,GAASX,GAAN,KAAQ,MAAM,MAAMhB,EAAE,EAAE,CAAC,EAAE,GAAGyG,GAAG9E,CAAC,EAAE,CAAC,GAAG,EAAEA,EAAE,OAAO,MAAM,MAAM3B,EAAE,EAAE,CAAC,EAAE2B,EAAEA,EAAE,CAAC,CAAC,CAACX,EAAEW,CAAC,CAAOX,GAAN,OAAUA,EAAE,IAAIW,EAAEX,CAAC,CAACL,EAAE,cAAc,CAAC,aAAakF,GAAGlE,CAAC,CAAC,CAAC,CACnY,SAASkF,GAAGlG,EAAEK,EAAE,CAAC,IAAIW,EAAEkE,GAAG7E,EAAE,KAAK,EAAEU,EAAEmE,GAAG7E,EAAE,YAAY,EAAQW,GAAN,OAAUA,EAAE,GAAGA,EAAEA,IAAIhB,EAAE,QAAQA,EAAE,MAAMgB,GAASX,EAAE,cAAR,MAAsBL,EAAE,eAAegB,IAAIhB,EAAE,aAAagB,IAAUD,GAAN,OAAUf,EAAE,aAAa,GAAGe,EAAE,CAAC,SAASoF,GAAGnG,EAAE,CAAC,IAAIK,EAAEL,EAAE,YAAYK,IAAIL,EAAE,cAAc,cAAmBK,IAAL,IAAeA,IAAP,OAAWL,EAAE,MAAMK,EAAE,CAAC,SAAS+F,GAAGpG,EAAE,CAAC,OAAOA,EAAC,CAAE,IAAK,MAAM,MAAM,6BAA6B,IAAK,OAAO,MAAM,qCAAqC,QAAQ,MAAM,8BAA8B,CAAC,CAC7c,SAASqG,GAAGrG,EAAEK,EAAE,CAAC,OAAaL,GAAN,MAA0CA,IAAjC,+BAAmCoG,GAAG/F,CAAC,EAAiCL,IAA/B,8BAAoDK,IAAlB,gBAAoB,+BAA+BL,CAAC,CAChK,IAAIsG,GAAGC,IAAG,SAASvG,EAAE,CAAC,OAAoB,OAAO,MAArB,KAA4B,MAAM,wBAAwB,SAASK,EAAEW,EAAED,EAAET,EAAE,CAAC,MAAM,wBAAwB,UAAU,CAAC,OAAON,EAAEK,EAAEW,EAAED,EAAET,CAAC,CAAC,CAAC,CAAC,EAAEN,CAAC,GAAE,SAASA,EAAEK,EAAE,CAAC,GAAkCL,EAAE,eAAjC,8BAA+C,cAAcA,EAAEA,EAAE,UAAUK,MAAM,CAA2F,IAA1FiG,GAAGA,IAAI,SAAS,cAAc,KAAK,EAAEA,GAAG,UAAU,QAAQjG,EAAE,QAAO,EAAG,SAAQ,EAAG,SAAaA,EAAEiG,GAAG,WAAWtG,EAAE,YAAYA,EAAE,YAAYA,EAAE,UAAU,EAAE,KAAKK,EAAE,YAAYL,EAAE,YAAYK,EAAE,UAAU,CAAC,CAAC,CAAC,EACpd,SAASmG,GAAGxG,EAAEK,EAAE,CAAC,GAAGA,EAAE,CAAC,IAAIW,EAAEhB,EAAE,WAAW,GAAGgB,GAAGA,IAAIhB,EAAE,WAAegB,EAAE,WAAN,EAAe,CAACA,EAAE,UAAUX,EAAE,MAAM,CAAC,CAACL,EAAE,YAAYK,CAAC,CACtH,IAAIoG,GAAG,CAAC,wBAAwB,GAAG,YAAY,GAAG,kBAAkB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,QAAQ,GAAG,aAAa,GAAG,gBAAgB,GAAG,YAAY,GAAG,QAAQ,GAAG,KAAK,GAAG,SAAS,GAAG,aAAa,GAAG,WAAW,GAAG,aAAa,GAAG,UAAU,GAAG,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,GAAG,aAAa,GAAG,WAAW,GAAG,cAAc,GAAG,eAAe,GAAG,gBAAgB,GAAG,WAAW,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,OAAO,GAAG,OAAO,GAClf,KAAK,GAAG,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,gBAAgB,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,cAAc,GAAG,YAAY,EAAE,EAAEC,GAAG,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,OAAO,KAAKD,EAAE,EAAE,QAAQ,SAASzG,EAAE,CAAC0G,GAAG,QAAQ,SAASrG,EAAE,CAACA,EAAEA,EAAEL,EAAE,OAAO,CAAC,EAAE,YAAW,EAAGA,EAAE,UAAU,CAAC,EAAEyG,GAAGpG,CAAC,EAAEoG,GAAGzG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS2G,GAAG3G,EAAEK,EAAEW,EAAE,CAAC,OAAaX,GAAN,MAAqB,OAAOA,GAAnB,WAA2BA,IAAL,GAAO,GAAGW,GAAc,OAAOX,GAAlB,UAAyBA,IAAJ,GAAOoG,GAAG,eAAezG,CAAC,GAAGyG,GAAGzG,CAAC,GAAG,GAAGK,GAAG,OAAOA,EAAE,IAAI,CACzb,SAASuG,GAAG5G,EAAEK,EAAE,CAACL,EAAEA,EAAE,MAAM,QAAQgB,KAAKX,EAAE,GAAGA,EAAE,eAAeW,CAAC,EAAE,CAAC,IAAID,EAAMC,EAAE,QAAQ,IAAI,IAAlB,EAAoBV,EAAEqG,GAAG3F,EAAEX,EAAEW,CAAC,EAAED,CAAC,EAAYC,IAAV,UAAcA,EAAE,YAAYD,EAAEf,EAAE,YAAYgB,EAAEV,CAAC,EAAEN,EAAEgB,CAAC,EAAEV,CAAC,CAAC,CAAC,IAAIuG,GAAG9G,EAAE,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,GAAG,GAAG,IAAI,GAAG,MAAM,GAAG,OAAO,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC,EACrT,SAAS+G,GAAG9G,EAAEK,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAGwG,GAAG7G,CAAC,IAAUK,EAAE,UAAR,MAAwBA,EAAE,yBAAR,MAAiC,MAAM,MAAMhB,EAAE,IAAIW,CAAC,CAAC,EAAE,GAASK,EAAE,yBAAR,KAAgC,CAAC,GAASA,EAAE,UAAR,KAAiB,MAAM,MAAMhB,EAAE,EAAE,CAAC,EAAE,GAAc,OAAOgB,EAAE,yBAApB,UAA6C,EAAE,WAAWA,EAAE,yBAAyB,MAAM,MAAMhB,EAAE,EAAE,CAAC,CAAE,CAAC,GAASgB,EAAE,OAAR,MAA0B,OAAOA,EAAE,OAApB,SAA0B,MAAM,MAAMhB,EAAE,EAAE,CAAC,CAAE,CAAC,CAClW,SAAS0H,GAAG/G,EAAEK,EAAE,CAAC,GAAQL,EAAE,QAAQ,GAAG,IAAlB,GAAoB,OAAiB,OAAOK,EAAE,IAApB,SAAuB,OAAOL,GAAG,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,YAAY,IAAK,gBAAgB,IAAK,gBAAgB,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,gBAAgB,MAAM,GAAG,QAAQ,MAAM,EAAE,CAAC,CAAC,IAAIgH,GAAG,KAAK,SAASC,GAAGjH,EAAE,CAAC,OAAAA,EAAEA,EAAE,QAAQA,EAAE,YAAY,OAAOA,EAAE,0BAA0BA,EAAEA,EAAE,yBAAoCA,EAAE,WAAN,EAAeA,EAAE,WAAWA,CAAC,CAAC,IAAIkH,GAAG,KAAKC,GAAG,KAAKC,GAAG,KACpc,SAASC,GAAGrH,EAAE,CAAC,GAAGA,EAAEsH,GAAGtH,CAAC,EAAE,CAAC,GAAgB,OAAOkH,IAApB,WAAuB,MAAM,MAAM7H,EAAE,GAAG,CAAC,EAAE,IAAIgB,EAAEL,EAAE,UAAUK,IAAIA,EAAEkH,GAAGlH,CAAC,EAAE6G,GAAGlH,EAAE,UAAUA,EAAE,KAAKK,CAAC,EAAE,CAAC,CAAC,SAASmH,GAAGxH,EAAE,CAACmH,GAAGC,GAAGA,GAAG,KAAKpH,CAAC,EAAEoH,GAAG,CAACpH,CAAC,EAAEmH,GAAGnH,CAAC,CAAC,SAASyH,IAAI,CAAC,GAAGN,GAAG,CAAC,IAAInH,EAAEmH,GAAG9G,EAAE+G,GAAoB,GAAjBA,GAAGD,GAAG,KAAKE,GAAGrH,CAAC,EAAKK,EAAE,IAAIL,EAAE,EAAEA,EAAEK,EAAE,OAAOL,IAAIqH,GAAGhH,EAAEL,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS0H,GAAG1H,EAAEK,EAAE,CAAC,OAAOL,EAAEK,CAAC,CAAC,CAAC,SAASsH,IAAI,EAAE,IAAIC,GAAG,GAAG,SAASC,GAAG7H,EAAEK,EAAEW,EAAE,CAAC,GAAG4G,GAAG,OAAO5H,EAAEK,EAAEW,CAAC,EAAE4G,GAAG,GAAG,GAAG,CAAC,OAAOF,GAAG1H,EAAEK,EAAEW,CAAC,CAAC,QAAC,CAAW4G,GAAG,IAAUT,KAAP,MAAkBC,KAAP,QAAUO,GAAE,EAAGF,GAAE,EAAE,CAAC,CAChb,SAASK,GAAG9H,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,UAAU,GAAUgB,IAAP,KAAS,OAAO,KAAK,IAAID,EAAEwG,GAAGvG,CAAC,EAAE,GAAUD,IAAP,KAAS,OAAO,KAAKC,EAAED,EAAEV,CAAC,EAAEL,EAAE,OAAOK,EAAC,CAAE,IAAK,UAAU,IAAK,iBAAiB,IAAK,gBAAgB,IAAK,uBAAuB,IAAK,cAAc,IAAK,qBAAqB,IAAK,cAAc,IAAK,qBAAqB,IAAK,YAAY,IAAK,mBAAmB,IAAK,gBAAgBU,EAAE,CAACA,EAAE,YAAYf,EAAEA,EAAE,KAAKe,EAAE,EAAaf,IAAX,UAAwBA,IAAV,SAAwBA,IAAX,UAA2BA,IAAb,aAAiBA,EAAE,CAACe,EAAE,MAAMf,EAAE,QAAQA,EAAE,EAAE,CAAC,GAAGA,EAAE,OAAO,KAAK,GAAGgB,GACte,OAAOA,GADke,WAChe,MAAM,MAAM3B,EAAE,IAAIgB,EAAE,OAAOW,CAAC,CAAC,EAAE,OAAOA,CAAC,CAAC,IAAI+G,GAAG,GAAG,GAAG/E,EAAG,GAAG,CAAC,IAAIgF,GAAG,GAAG,OAAO,eAAeA,GAAG,UAAU,CAAC,IAAI,UAAU,CAACD,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,iBAAiB,OAAOC,GAAGA,EAAE,EAAE,OAAO,oBAAoB,OAAOA,GAAGA,EAAE,CAAC,MAAS,CAACD,GAAG,EAAE,CAAC,SAASE,GAAGjI,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAED,EAAED,GAAE,CAAC,IAAI9B,GAAE,MAAM,UAAU,MAAM,KAAK,UAAU,CAAC,EAAE,GAAG,CAACkB,EAAE,MAAMW,EAAE7B,EAAC,CAAC,OAAOkC,GAAE,CAAC,KAAK,QAAQA,EAAC,CAAC,CAAC,CAAC,IAAI6G,GAAG,GAAGC,GAAG,KAAKC,GAAG,GAAGC,GAAG,KAAKC,GAAG,CAAC,QAAQ,SAAStI,EAAE,CAACkI,GAAG,GAAGC,GAAGnI,CAAC,CAAC,EAAE,SAASuI,GAAGvI,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAED,EAAED,GAAE,CAACiH,GAAG,GAAGC,GAAG,KAAKF,GAAG,MAAMK,GAAG,SAAS,CAAC,CACze,SAASE,GAAGxI,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAED,EAAED,GAAE,CAA0B,GAAzBsH,GAAG,MAAM,KAAK,SAAS,EAAKL,GAAG,CAAC,GAAGA,GAAG,CAAC,IAAI/I,GAAEgJ,GAAGD,GAAG,GAAGC,GAAG,IAAI,KAAM,OAAM,MAAM9I,EAAE,GAAG,CAAC,EAAE+I,KAAKA,GAAG,GAAGC,GAAGlJ,GAAE,CAAC,CAAC,SAASsJ,GAAGzI,EAAE,CAAC,IAAIK,EAAEL,EAAEgB,EAAEhB,EAAE,GAAGA,EAAE,UAAU,KAAKK,EAAE,QAAQA,EAAEA,EAAE,WAAW,CAACL,EAAEK,EAAE,GAAGA,EAAEL,GAAOK,EAAE,MAAM,QAAb,IAAqBW,EAAEX,EAAE,QAAQL,EAAEK,EAAE,aAAaL,EAAE,CAAC,OAAWK,EAAE,MAAN,EAAUW,EAAE,IAAI,CAAC,SAAS0H,GAAG1I,EAAE,CAAC,GAAQA,EAAE,MAAP,GAAW,CAAC,IAAIK,EAAEL,EAAE,cAAsE,GAAjDK,IAAP,OAAWL,EAAEA,EAAE,UAAiBA,IAAP,OAAWK,EAAEL,EAAE,gBAA0BK,IAAP,KAAS,OAAOA,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,SAASsI,GAAG3I,EAAE,CAAC,GAAGyI,GAAGzI,CAAC,IAAIA,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,CAAE,CACjf,SAASuJ,GAAG5I,EAAE,CAAC,IAAIK,EAAEL,EAAE,UAAU,GAAG,CAACK,EAAE,CAAS,GAARA,EAAEoI,GAAGzI,CAAC,EAAYK,IAAP,KAAS,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAOgB,IAAIL,EAAE,KAAKA,CAAC,CAAC,QAAQgB,EAAEhB,EAAEe,EAAEV,IAAI,CAAC,IAAIC,EAAEU,EAAE,OAAO,GAAUV,IAAP,KAAS,MAAM,IAAIc,EAAEd,EAAE,UAAU,GAAUc,IAAP,KAAS,CAAY,GAAXL,EAAET,EAAE,OAAiBS,IAAP,KAAS,CAACC,EAAED,EAAE,QAAQ,CAAC,KAAK,CAAC,GAAGT,EAAE,QAAQc,EAAE,MAAM,CAAC,IAAIA,EAAEd,EAAE,MAAMc,GAAG,CAAC,GAAGA,IAAIJ,EAAE,OAAO2H,GAAGrI,CAAC,EAAEN,EAAE,GAAGoB,IAAIL,EAAE,OAAO4H,GAAGrI,CAAC,EAAED,EAAEe,EAAEA,EAAE,OAAO,CAAC,MAAM,MAAM/B,EAAE,GAAG,CAAC,CAAE,CAAC,GAAG2B,EAAE,SAASD,EAAE,OAAOC,EAAEV,EAAES,EAAEK,MAAM,CAAC,QAAQD,EAAE,GAAGD,EAAEZ,EAAE,MAAMY,GAAG,CAAC,GAAGA,IAAIF,EAAE,CAACG,EAAE,GAAGH,EAAEV,EAAES,EAAEK,EAAE,KAAK,CAAC,GAAGF,IAAIH,EAAE,CAACI,EAAE,GAAGJ,EAAET,EAAEU,EAAEI,EAAE,KAAK,CAACF,EAAEA,EAAE,OAAO,CAAC,GAAG,CAACC,EAAE,CAAC,IAAID,EAAEE,EAAE,MAAMF,GAAG,CAAC,GAAGA,IAC5fF,EAAE,CAACG,EAAE,GAAGH,EAAEI,EAAEL,EAAET,EAAE,KAAK,CAAC,GAAGY,IAAIH,EAAE,CAACI,EAAE,GAAGJ,EAAEK,EAAEJ,EAAEV,EAAE,KAAK,CAACY,EAAEA,EAAE,OAAO,CAAC,GAAG,CAACC,EAAE,MAAM,MAAM9B,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC,GAAG2B,EAAE,YAAYD,EAAE,MAAM,MAAM1B,EAAE,GAAG,CAAC,CAAE,CAAC,GAAO2B,EAAE,MAAN,EAAU,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE,OAAO2B,EAAE,UAAU,UAAUA,EAAEhB,EAAEK,CAAC,CAAC,SAASwI,GAAG7I,EAAE,CAAC,OAAAA,EAAE4I,GAAG5I,CAAC,EAAgBA,IAAP,KAAS8I,GAAG9I,CAAC,EAAE,IAAI,CAAC,SAAS8I,GAAG9I,EAAE,CAAC,GAAOA,EAAE,MAAN,GAAeA,EAAE,MAAN,EAAU,OAAOA,EAAE,IAAIA,EAAEA,EAAE,MAAaA,IAAP,MAAU,CAAC,IAAIK,EAAEyI,GAAG9I,CAAC,EAAE,GAAUK,IAAP,KAAS,OAAOA,EAAEL,EAAEA,EAAE,OAAO,CAAC,OAAO,IAAI,CAC1X,IAAI+I,GAAGrG,EAAG,0BAA0BsG,GAAGtG,EAAG,wBAAwBuG,GAAGvG,EAAG,qBAAqBwG,GAAGxG,EAAG,sBAAsBzC,GAAEyC,EAAG,aAAayG,GAAGzG,EAAG,iCAAiC0G,GAAG1G,EAAG,2BAA2B2G,GAAG3G,EAAG,8BAA8B4G,GAAG5G,EAAG,wBAAwB6G,GAAG7G,EAAG,qBAAqB8G,GAAG9G,EAAG,sBAAsB+G,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAG3J,EAAE,CAAC,GAAG0J,IAAiB,OAAOA,GAAG,mBAAvB,WAAyC,GAAG,CAACA,GAAG,kBAAkBD,GAAGzJ,EAAE,QAAcA,EAAE,QAAQ,MAAM,OAAvB,GAA2B,CAAC,MAAS,EAAE,CACve,IAAI4J,GAAG,KAAK,MAAM,KAAK,MAAMC,GAAGC,GAAG,KAAK,IAAIC,GAAG,KAAK,IAAI,SAASF,GAAG7J,EAAE,CAAC,OAAAA,KAAK,EAAaA,IAAJ,EAAM,GAAG,IAAI8J,GAAG9J,CAAC,EAAE+J,GAAG,GAAG,CAAC,CAAC,IAAIC,GAAG,GAAGC,GAAG,QAC7H,SAASC,GAAGlK,EAAE,CAAC,OAAOA,EAAE,CAACA,EAAC,CAAE,IAAK,GAAE,MAAO,GAAE,IAAK,GAAE,MAAO,GAAE,IAAK,GAAE,MAAO,GAAE,IAAK,GAAE,MAAO,GAAE,IAAK,IAAG,MAAO,IAAG,IAAK,IAAG,MAAO,IAAG,IAAK,IAAG,IAAK,KAAI,IAAK,KAAI,IAAK,KAAI,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,OAAM,IAAK,OAAM,IAAK,OAAM,IAAK,QAAO,IAAK,QAAO,IAAK,QAAO,IAAK,SAAQ,IAAK,SAAQ,OAAOA,EAAE,QAAQ,IAAK,SAAQ,IAAK,SAAQ,IAAK,UAAS,IAAK,UAAS,IAAK,UAAS,OAAOA,EAAE,UAAU,IAAK,WAAU,MAAO,WAAU,IAAK,WAAU,MAAO,WAAU,IAAK,WAAU,MAAO,WAAU,IAAK,YAAW,MAAO,YACzgB,QAAQ,OAAOA,CAAC,CAAC,CAAC,SAASmK,GAAGnK,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,aAAa,GAAOgB,IAAJ,EAAM,MAAO,GAAE,IAAID,EAAE,EAAET,EAAEN,EAAE,eAAeoB,EAAEpB,EAAE,YAAYmB,EAAEH,EAAE,UAAU,GAAOG,IAAJ,EAAM,CAAC,IAAID,EAAEC,EAAE,CAACb,EAAMY,IAAJ,EAAMH,EAAEmJ,GAAGhJ,CAAC,GAAGE,GAAGD,EAAMC,IAAJ,IAAQL,EAAEmJ,GAAG9I,CAAC,GAAG,MAAMD,EAAEH,EAAE,CAACV,EAAMa,IAAJ,EAAMJ,EAAEmJ,GAAG/I,CAAC,EAAMC,IAAJ,IAAQL,EAAEmJ,GAAG9I,CAAC,GAAG,GAAOL,IAAJ,EAAM,MAAO,GAAE,GAAOV,IAAJ,GAAOA,IAAIU,IAAQV,EAAEC,KAAP,IAAYA,EAAES,EAAE,CAACA,EAAEK,EAAEf,EAAE,CAACA,EAAEC,GAAGc,GAAQd,IAAL,KAAac,EAAE,WAAP,GAAiB,OAAOf,EAA0C,IAAnCU,EAAE,KAAP,IAAYA,GAAGC,EAAE,IAAIX,EAAEL,EAAE,eAAsBK,IAAJ,EAAM,IAAIL,EAAEA,EAAE,cAAcK,GAAGU,EAAE,EAAEV,GAAGW,EAAE,GAAG4I,GAAGvJ,CAAC,EAAEC,EAAE,GAAGU,EAAED,GAAGf,EAAEgB,CAAC,EAAEX,GAAG,CAACC,EAAE,OAAOS,CAAC,CACvc,SAASqJ,GAAGpK,EAAEK,EAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,OAAOK,EAAE,IAAI,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,IAAK,KAAI,IAAK,KAAI,IAAK,KAAI,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,OAAM,IAAK,OAAM,IAAK,OAAM,IAAK,QAAO,IAAK,QAAO,IAAK,QAAO,IAAK,SAAQ,IAAK,SAAQ,OAAOA,EAAE,IAAI,IAAK,SAAQ,IAAK,SAAQ,IAAK,UAAS,IAAK,UAAS,IAAK,UAAS,MAAM,GAAG,IAAK,WAAU,IAAK,WAAU,IAAK,WAAU,IAAK,YAAW,MAAM,GAAG,QAAQ,MAAM,EAAE,CAAC,CAC/a,SAASgK,GAAGrK,EAAEK,EAAE,CAAC,QAAQW,EAAEhB,EAAE,eAAee,EAAEf,EAAE,YAAYM,EAAEN,EAAE,gBAAgBoB,EAAEpB,EAAE,aAAa,EAAEoB,GAAG,CAAC,IAAID,EAAE,GAAGyI,GAAGxI,CAAC,EAAEF,EAAE,GAAGC,EAAEF,GAAEX,EAAEa,CAAC,EAAUF,KAAL,KAAgBC,EAAEF,KAAP,IAAgBE,EAAEH,KAAP,KAAUT,EAAEa,CAAC,EAAEiJ,GAAGlJ,EAAEb,CAAC,GAAOY,IAAGZ,IAAIL,EAAE,cAAckB,GAAGE,GAAG,CAACF,CAAC,CAAC,CAAC,SAASoJ,GAAGtK,EAAE,CAAC,OAAAA,EAAEA,EAAE,aAAa,YAAuBA,IAAJ,EAAMA,EAAEA,EAAE,WAAW,WAAW,CAAC,CAAC,SAASuK,IAAI,CAAC,IAAIvK,EAAEgK,GAAG,OAAAA,KAAK,GAAOA,GAAG,WAAR,IAAmBA,GAAG,IAAWhK,CAAC,CAAC,SAASwK,GAAGxK,EAAE,CAAC,QAAQK,EAAE,GAAGW,EAAE,EAAE,GAAGA,EAAEA,IAAIX,EAAE,KAAKL,CAAC,EAAE,OAAOK,CAAC,CAC3a,SAASoK,GAAGzK,EAAEK,EAAEW,EAAE,CAAChB,EAAE,cAAcK,EAAcA,IAAZ,YAAgBL,EAAE,eAAe,EAAEA,EAAE,YAAY,GAAGA,EAAEA,EAAE,WAAWK,EAAE,GAAGuJ,GAAGvJ,CAAC,EAAEL,EAAEK,CAAC,EAAEW,CAAC,CAAC,SAAS0J,GAAG1K,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,aAAa,CAACK,EAAEL,EAAE,aAAaK,EAAEL,EAAE,eAAe,EAAEA,EAAE,YAAY,EAAEA,EAAE,cAAcK,EAAEL,EAAE,kBAAkBK,EAAEL,EAAE,gBAAgBK,EAAEA,EAAEL,EAAE,cAAc,IAAIe,EAAEf,EAAE,WAAW,IAAIA,EAAEA,EAAE,gBAAgB,EAAEgB,GAAG,CAAC,IAAIV,EAAE,GAAGsJ,GAAG5I,CAAC,EAAEI,EAAE,GAAGd,EAAED,EAAEC,CAAC,EAAE,EAAES,EAAET,CAAC,EAAE,GAAGN,EAAEM,CAAC,EAAE,GAAGU,GAAG,CAACI,CAAC,CAAC,CACzY,SAASuJ,GAAG3K,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,gBAAgBK,EAAE,IAAIL,EAAEA,EAAE,cAAcgB,GAAG,CAAC,IAAID,EAAE,GAAG6I,GAAG5I,CAAC,EAAEV,EAAE,GAAGS,EAAET,EAAED,EAAEL,EAAEe,CAAC,EAAEV,IAAIL,EAAEe,CAAC,GAAGV,GAAGW,GAAG,CAACV,CAAC,CAAC,CAAC,IAAIJ,GAAE,EAAE,SAAS0K,GAAG5K,EAAE,CAAC,OAAAA,GAAG,CAACA,EAAS,EAAEA,EAAE,EAAEA,GAAOA,EAAE,aAAP,EAAkB,GAAG,UAAU,EAAE,CAAC,CAAC,IAAI6K,GAAGC,GAAGC,GAAGC,GAAGC,GAAGC,GAAG,GAAGC,GAAG,GAAGC,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,IAAI,IAAIC,GAAG,IAAI,IAAIC,GAAG,GAAGC,GAAG,6PAA6P,MAAM,GAAG,EACniB,SAASC,GAAG3L,EAAEK,EAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,UAAU,IAAK,WAAWoL,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,YAAYC,GAAG,KAAK,MAAM,IAAK,YAAY,IAAK,WAAWC,GAAG,KAAK,MAAM,IAAK,cAAc,IAAK,aAAaC,GAAG,OAAOlL,EAAE,SAAS,EAAE,MAAM,IAAK,oBAAoB,IAAK,qBAAqBmL,GAAG,OAAOnL,EAAE,SAAS,CAAC,CAAC,CACnT,SAASuL,GAAG5L,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAE,CAAC,OAAUpB,IAAP,MAAUA,EAAE,cAAcoB,GAASpB,EAAE,CAAC,UAAUK,EAAE,aAAaW,EAAE,iBAAiBD,EAAE,YAAYK,EAAE,iBAAiB,CAACd,CAAC,CAAC,EAASD,IAAP,OAAWA,EAAEiH,GAAGjH,CAAC,EAASA,IAAP,MAAUyK,GAAGzK,CAAC,GAAGL,IAAEA,EAAE,kBAAkBe,EAAEV,EAAEL,EAAE,iBAAwBM,IAAP,MAAeD,EAAE,QAAQC,CAAC,IAAhB,IAAmBD,EAAE,KAAKC,CAAC,EAASN,EAAC,CACpR,SAAS6L,GAAG7L,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,OAAOD,GAAG,IAAK,UAAU,OAAO+K,GAAGQ,GAAGR,GAAGpL,EAAEK,EAAEW,EAAED,EAAET,CAAC,EAAE,GAAG,IAAK,YAAY,OAAO+K,GAAGO,GAAGP,GAAGrL,EAAEK,EAAEW,EAAED,EAAET,CAAC,EAAE,GAAG,IAAK,YAAY,OAAOgL,GAAGM,GAAGN,GAAGtL,EAAEK,EAAEW,EAAED,EAAET,CAAC,EAAE,GAAG,IAAK,cAAc,IAAIc,EAAEd,EAAE,UAAU,OAAAiL,GAAG,IAAInK,EAAEwK,GAAGL,GAAG,IAAInK,CAAC,GAAG,KAAKpB,EAAEK,EAAEW,EAAED,EAAET,CAAC,CAAC,EAAQ,GAAG,IAAK,oBAAoB,OAAOc,EAAEd,EAAE,UAAUkL,GAAG,IAAIpK,EAAEwK,GAAGJ,GAAG,IAAIpK,CAAC,GAAG,KAAKpB,EAAEK,EAAEW,EAAED,EAAET,CAAC,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,CACnW,SAASwL,GAAG9L,EAAE,CAAC,IAAIK,EAAE0L,GAAG/L,EAAE,MAAM,EAAE,GAAUK,IAAP,KAAS,CAAC,IAAIW,EAAEyH,GAAGpI,CAAC,EAAE,GAAUW,IAAP,MAAS,GAAGX,EAAEW,EAAE,IAASX,IAAL,IAAQ,GAAGA,EAAEqI,GAAG1H,CAAC,EAASX,IAAP,KAAS,CAACL,EAAE,UAAUK,EAAE4K,GAAGjL,EAAE,SAAS,UAAU,CAAC+K,GAAG/J,CAAC,CAAC,CAAC,EAAE,MAAM,UAAcX,IAAJ,GAAOW,EAAE,UAAU,QAAQ,cAAc,aAAa,CAAChB,EAAE,UAAcgB,EAAE,MAAN,EAAUA,EAAE,UAAU,cAAc,KAAK,MAAM,EAAC,CAAChB,EAAE,UAAU,IAAI,CAClT,SAASgM,GAAGhM,EAAE,CAAC,GAAUA,EAAE,YAAT,KAAmB,MAAM,GAAG,QAAQK,EAAEL,EAAE,iBAAiB,EAAEK,EAAE,QAAQ,CAAC,IAAIW,EAAEiL,GAAGjM,EAAE,aAAaA,EAAE,iBAAiBK,EAAE,CAAC,EAAEL,EAAE,WAAW,EAAE,GAAUgB,IAAP,KAAS,CAACA,EAAEhB,EAAE,YAAY,IAAIe,EAAE,IAAIC,EAAE,YAAYA,EAAE,KAAKA,CAAC,EAAEgG,GAAGjG,EAAEC,EAAE,OAAO,cAAcD,CAAC,EAAEiG,GAAG,IAAI,KAAM,QAAO3G,EAAEiH,GAAGtG,CAAC,EAASX,IAAP,MAAUyK,GAAGzK,CAAC,EAAEL,EAAE,UAAUgB,EAAE,GAAGX,EAAE,MAAK,CAAE,CAAC,MAAM,EAAE,CAAC,SAAS6L,GAAGlM,EAAEK,EAAEW,EAAE,CAACgL,GAAGhM,CAAC,GAAGgB,EAAE,OAAOX,CAAC,CAAC,CAAC,SAAS8L,IAAI,CAACjB,GAAG,GAAUE,KAAP,MAAWY,GAAGZ,EAAE,IAAIA,GAAG,MAAaC,KAAP,MAAWW,GAAGX,EAAE,IAAIA,GAAG,MAAaC,KAAP,MAAWU,GAAGV,EAAE,IAAIA,GAAG,MAAMC,GAAG,QAAQW,EAAE,EAAEV,GAAG,QAAQU,EAAE,CAAC,CACnf,SAASE,GAAGpM,EAAEK,EAAE,CAACL,EAAE,YAAYK,IAAIL,EAAE,UAAU,KAAKkL,KAAKA,GAAG,GAAGxI,EAAG,0BAA0BA,EAAG,wBAAwByJ,EAAE,GAAG,CAC5H,SAASE,GAAGrM,EAAE,CAAC,SAASK,EAAEA,EAAE,CAAC,OAAO+L,GAAG/L,EAAEL,CAAC,CAAC,CAAC,GAAG,EAAEmL,GAAG,OAAO,CAACiB,GAAGjB,GAAG,CAAC,EAAEnL,CAAC,EAAE,QAAQgB,EAAE,EAAEA,EAAEmK,GAAG,OAAOnK,IAAI,CAAC,IAAID,EAAEoK,GAAGnK,CAAC,EAAED,EAAE,YAAYf,IAAIe,EAAE,UAAU,KAAK,CAAC,CAAyF,IAAjFqK,KAAP,MAAWgB,GAAGhB,GAAGpL,CAAC,EAASqL,KAAP,MAAWe,GAAGf,GAAGrL,CAAC,EAASsL,KAAP,MAAWc,GAAGd,GAAGtL,CAAC,EAAEuL,GAAG,QAAQlL,CAAC,EAAEmL,GAAG,QAAQnL,CAAC,EAAMW,EAAE,EAAEA,EAAEyK,GAAG,OAAOzK,IAAID,EAAE0K,GAAGzK,CAAC,EAAED,EAAE,YAAYf,IAAIe,EAAE,UAAU,MAAM,KAAK,EAAE0K,GAAG,SAASzK,EAAEyK,GAAG,CAAC,EAASzK,EAAE,YAAT,OAAqB8K,GAAG9K,CAAC,EAASA,EAAE,YAAT,MAAoByK,GAAG,OAAO,CAAC,IAAIa,GAAG3I,EAAG,wBAAwB4I,GAAG,GAC5a,SAASC,GAAGxM,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEJ,GAAEkB,EAAEkL,GAAG,WAAWA,GAAG,WAAW,KAAK,GAAG,CAACpM,GAAE,EAAEuM,GAAGzM,EAAEK,EAAEW,EAAED,CAAC,CAAC,QAAC,CAAQb,GAAEI,EAAEgM,GAAG,WAAWlL,CAAC,CAAC,CAAC,SAASsL,GAAG1M,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEJ,GAAEkB,EAAEkL,GAAG,WAAWA,GAAG,WAAW,KAAK,GAAG,CAACpM,GAAE,EAAEuM,GAAGzM,EAAEK,EAAEW,EAAED,CAAC,CAAC,QAAC,CAAQb,GAAEI,EAAEgM,GAAG,WAAWlL,CAAC,CAAC,CACjO,SAASqL,GAAGzM,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAGwL,GAAG,CAAC,IAAIjM,EAAE2L,GAAGjM,EAAEK,EAAEW,EAAED,CAAC,EAAE,GAAUT,IAAP,KAASqM,EAAG3M,EAAEK,EAAEU,EAAE6L,GAAG5L,CAAC,EAAE2K,GAAG3L,EAAEe,CAAC,UAAU8K,GAAGvL,EAAEN,EAAEK,EAAEW,EAAED,CAAC,EAAEA,EAAE,0BAA0B4K,GAAG3L,EAAEe,CAAC,EAAEV,EAAE,GAAG,GAAGqL,GAAG,QAAQ1L,CAAC,EAAE,CAAC,KAAYM,IAAP,MAAU,CAAC,IAAIc,EAAEkG,GAAGhH,CAAC,EAAyD,GAAhDc,IAAP,MAAUyJ,GAAGzJ,CAAC,EAAEA,EAAE6K,GAAGjM,EAAEK,EAAEW,EAAED,CAAC,EAASK,IAAP,MAAUuL,EAAG3M,EAAEK,EAAEU,EAAE6L,GAAG5L,CAAC,EAAKI,IAAId,EAAE,MAAMA,EAAEc,CAAC,CAAQd,IAAP,MAAUS,EAAE,gBAAe,CAAE,MAAM4L,EAAG3M,EAAEK,EAAEU,EAAE,KAAKC,CAAC,CAAC,CAAC,CAAC,IAAI4L,GAAG,KACpU,SAASX,GAAGjM,EAAEK,EAAEW,EAAED,EAAE,CAAyB,GAAxB6L,GAAG,KAAK5M,EAAEiH,GAAGlG,CAAC,EAAEf,EAAE+L,GAAG/L,CAAC,EAAYA,IAAP,KAAS,GAAGK,EAAEoI,GAAGzI,CAAC,EAASK,IAAP,KAASL,EAAE,aAAagB,EAAEX,EAAE,IAASW,IAAL,GAAO,CAAS,GAARhB,EAAE0I,GAAGrI,CAAC,EAAYL,IAAP,KAAS,OAAOA,EAAEA,EAAE,IAAI,SAAagB,IAAJ,EAAM,CAAC,GAAGX,EAAE,UAAU,QAAQ,cAAc,aAAa,OAAWA,EAAE,MAAN,EAAUA,EAAE,UAAU,cAAc,KAAKL,EAAE,IAAI,MAAMK,IAAIL,IAAIA,EAAE,MAAM,OAAA4M,GAAG5M,EAAS,IAAI,CAC7S,SAAS6M,GAAG7M,EAAE,CAAC,OAAOA,EAAC,CAAE,IAAK,SAAS,IAAK,QAAQ,IAAK,QAAQ,IAAK,cAAc,IAAK,OAAO,IAAK,MAAM,IAAK,WAAW,IAAK,WAAW,IAAK,UAAU,IAAK,YAAY,IAAK,OAAO,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,UAAU,IAAK,UAAU,IAAK,WAAW,IAAK,QAAQ,IAAK,YAAY,IAAK,UAAU,IAAK,QAAQ,IAAK,QAAQ,IAAK,OAAO,IAAK,gBAAgB,IAAK,cAAc,IAAK,YAAY,IAAK,aAAa,IAAK,QAAQ,IAAK,SAAS,IAAK,SAAS,IAAK,SAAS,IAAK,cAAc,IAAK,WAAW,IAAK,aAAa,IAAK,eAAe,IAAK,SAAS,IAAK,kBAAkB,IAAK,YAAY,IAAK,mBAAmB,IAAK,iBAAiB,IAAK,oBAAoB,IAAK,aAAa,IAAK,YAAY,IAAK,cAAc,IAAK,OAAO,IAAK,mBAAmB,IAAK,QAAQ,IAAK,aAAa,IAAK,WAAW,IAAK,SAAS,IAAK,cAAc,MAAO,GAAE,IAAK,OAAO,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,SAAS,IAAK,SAAS,IAAK,YAAY,IAAK,QAAQ,IAAK,aAAa,IAAK,aAAa,IAAK,eAAe,IAAK,eAAe,MAAO,GACpqC,IAAK,UAAU,OAAOmJ,GAAE,GAAI,KAAKC,GAAG,MAAO,GAAE,KAAKC,GAAG,MAAO,GAAE,KAAKC,GAAG,KAAKC,GAAG,MAAO,IAAG,KAAKC,GAAG,MAAO,WAAU,QAAQ,MAAO,GAAE,CAAC,QAAQ,MAAO,GAAE,CAAC,CAAC,IAAIsD,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,IAAI,CAAC,GAAGD,GAAG,OAAOA,GAAG,IAAIhN,EAAEK,EAAE0M,GAAG/L,EAAEX,EAAE,OAAOU,EAAET,EAAE,UAAUwM,GAAGA,GAAG,MAAMA,GAAG,YAAY1L,EAAEd,EAAE,OAAO,IAAIN,EAAE,EAAEA,EAAEgB,GAAGX,EAAEL,CAAC,IAAIM,EAAEN,CAAC,EAAEA,IAAI,CAAC,IAAImB,EAAEH,EAAEhB,EAAE,IAAIe,EAAE,EAAEA,GAAGI,GAAGd,EAAEW,EAAED,CAAC,IAAIT,EAAEc,EAAEL,CAAC,EAAEA,IAAI,CAAC,OAAOiM,GAAG1M,EAAE,MAAMN,EAAE,EAAEe,EAAE,EAAEA,EAAE,MAAM,CAAC,CACxY,SAASmM,GAAGlN,EAAE,CAAC,IAAIK,EAAEL,EAAE,QAAQ,mBAAaA,GAAGA,EAAEA,EAAE,SAAaA,IAAJ,GAAYK,IAAL,KAASL,EAAE,KAAKA,EAAEK,EAAOL,IAAL,KAASA,EAAE,IAAW,IAAIA,GAAQA,IAAL,GAAOA,EAAE,CAAC,CAAC,SAASmN,IAAI,CAAC,MAAM,EAAE,CAAC,SAASC,IAAI,CAAC,MAAM,EAAE,CAC5K,SAASC,GAAGrN,EAAE,CAAC,SAASK,EAAEA,EAAEU,EAAET,EAAEc,EAAED,EAAE,CAAC,KAAK,WAAWd,EAAE,KAAK,YAAYC,EAAE,KAAK,KAAKS,EAAE,KAAK,YAAYK,EAAE,KAAK,OAAOD,EAAE,KAAK,cAAc,KAAK,QAAQH,KAAKhB,EAAEA,EAAE,eAAegB,CAAC,IAAIX,EAAEL,EAAEgB,CAAC,EAAE,KAAKA,CAAC,EAAEX,EAAEA,EAAEe,CAAC,EAAEA,EAAEJ,CAAC,GAAG,YAAK,oBAA0BI,EAAE,kBAAR,KAAyBA,EAAE,iBAAsBA,EAAE,cAAP,IAAoB+L,GAAGC,GAAG,KAAK,qBAAqBA,GAAU,IAAI,CAAC,OAAArN,EAAEM,EAAE,UAAU,CAAC,eAAe,UAAU,CAAC,KAAK,iBAAiB,GAAG,IAAI,EAAE,KAAK,YAAY,IAAI,EAAE,eAAe,EAAE,iBAA6B,OAAO,EAAE,aAArB,YACxd,EAAE,YAAY,IAAI,KAAK,mBAAmB8M,GAAG,EAAE,gBAAgB,UAAU,CAAC,IAAI,EAAE,KAAK,YAAY,IAAI,EAAE,gBAAgB,EAAE,gBAAe,EAAe,OAAO,EAAE,cAArB,YAAoC,EAAE,aAAa,IAAI,KAAK,qBAAqBA,GAAG,EAAE,QAAQ,UAAU,GAAG,aAAaA,EAAE,CAAC,EAAS9M,CAAC,CACjR,IAAIiN,GAAG,CAAC,WAAW,EAAE,QAAQ,EAAE,WAAW,EAAE,UAAU,SAAStN,EAAE,CAAC,OAAOA,EAAE,WAAW,KAAK,IAAG,CAAE,EAAE,iBAAiB,EAAE,UAAU,CAAC,EAAEuN,GAAGF,GAAGC,EAAE,EAAEE,GAAGzN,EAAE,GAAGuN,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,EAAEG,GAAGJ,GAAGG,EAAE,EAAEE,GAAGC,GAAGC,GAAGC,GAAG9N,EAAE,GAAGyN,GAAG,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,iBAAiBM,GAAG,OAAO,EAAE,QAAQ,EAAE,cAAc,SAAS9N,EAAE,CAAC,OAAgBA,EAAE,gBAAX,OAAyBA,EAAE,cAAcA,EAAE,WAAWA,EAAE,UAAUA,EAAE,YAAYA,EAAE,aAAa,EAAE,UAAU,SAASA,EAAE,CAAC,MAAG,cAC3eA,EAASA,EAAE,WAAUA,IAAI4N,KAAKA,IAAkB5N,EAAE,OAAhB,aAAsB0N,GAAG1N,EAAE,QAAQ4N,GAAG,QAAQD,GAAG3N,EAAE,QAAQ4N,GAAG,SAASD,GAAGD,GAAG,EAAEE,GAAG5N,GAAU0N,GAAE,EAAE,UAAU,SAAS1N,EAAE,CAAC,MAAM,cAAcA,EAAEA,EAAE,UAAU2N,EAAE,CAAC,CAAC,EAAEI,GAAGV,GAAGQ,EAAE,EAAEG,GAAGjO,EAAE,GAAG8N,GAAG,CAAC,aAAa,CAAC,CAAC,EAAEI,GAAGZ,GAAGW,EAAE,EAAEE,GAAGnO,EAAE,GAAGyN,GAAG,CAAC,cAAc,CAAC,CAAC,EAAEW,GAAGd,GAAGa,EAAE,EAAEE,GAAGrO,EAAE,GAAGuN,GAAG,CAAC,cAAc,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAAEe,GAAGhB,GAAGe,EAAE,EAAEE,GAAGvO,EAAE,GAAGuN,GAAG,CAAC,cAAc,SAAStN,EAAE,CAAC,MAAM,kBAAkBA,EAAEA,EAAE,cAAc,OAAO,aAAa,CAAC,CAAC,EAAEuO,GAAGlB,GAAGiB,EAAE,EAAEE,GAAGzO,EAAE,GAAGuN,GAAG,CAAC,KAAK,CAAC,CAAC,EAAEmB,GAAGpB,GAAGmB,EAAE,EAAEE,GAAG,CAAC,IAAI,SACxf,SAAS,IAAI,KAAK,YAAY,GAAG,UAAU,MAAM,aAAa,KAAK,YAAY,IAAI,SAAS,IAAI,KAAK,KAAK,cAAc,KAAK,cAAc,OAAO,aAAa,gBAAgB,cAAc,EAAEC,GAAG,CAAC,EAAE,YAAY,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,WAAW,GAAG,SAAS,GAAG,IAAI,GAAG,SAAS,GAAG,WAAW,GAAG,MAAM,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,GAAG,SAAS,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,KACtf,IAAI,KAAK,IAAI,KAAK,IAAI,MAAM,IAAI,MAAM,IAAI,MAAM,IAAI,UAAU,IAAI,aAAa,IAAI,MAAM,EAAEC,GAAG,CAAC,IAAI,SAAS,QAAQ,UAAU,KAAK,UAAU,MAAM,UAAU,EAAE,SAASC,GAAG7O,EAAE,CAAC,IAAIK,EAAE,KAAK,YAAY,OAAOA,EAAE,iBAAiBA,EAAE,iBAAiBL,CAAC,GAAGA,EAAE4O,GAAG5O,CAAC,GAAG,CAAC,CAACK,EAAEL,CAAC,EAAE,EAAE,CAAC,SAAS8N,IAAI,CAAC,OAAOe,EAAE,CAChS,IAAIC,GAAG/O,EAAE,GAAGyN,GAAG,CAAC,IAAI,SAASxN,EAAE,CAAC,GAAGA,EAAE,IAAI,CAAC,IAAIK,EAAEqO,GAAG1O,EAAE,GAAG,GAAGA,EAAE,IAAI,GAAoBK,IAAjB,eAAmB,OAAOA,CAAC,CAAC,OAAmBL,EAAE,OAAf,YAAqBA,EAAEkN,GAAGlN,CAAC,EAAOA,IAAL,GAAO,QAAQ,OAAO,aAAaA,CAAC,GAAeA,EAAE,OAAd,WAA8BA,EAAE,OAAZ,QAAiB2O,GAAG3O,EAAE,OAAO,GAAG,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,OAAO,EAAE,iBAAiB8N,GAAG,SAAS,SAAS9N,EAAE,CAAC,OAAmBA,EAAE,OAAf,WAAoBkN,GAAGlN,CAAC,EAAE,CAAC,EAAE,QAAQ,SAASA,EAAE,CAAC,OAAkBA,EAAE,OAAd,WAA8BA,EAAE,OAAZ,QAAiBA,EAAE,QAAQ,CAAC,EAAE,MAAM,SAASA,EAAE,CAAC,OACveA,EAAE,OAD2e,WACtekN,GAAGlN,CAAC,EAAcA,EAAE,OAAd,WAA8BA,EAAE,OAAZ,QAAiBA,EAAE,QAAQ,CAAC,CAAC,CAAC,EAAE+O,GAAG1B,GAAGyB,EAAE,EAAEE,GAAGjP,EAAE,GAAG8N,GAAG,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,mBAAmB,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,YAAY,EAAE,UAAU,CAAC,CAAC,EAAEoB,GAAG5B,GAAG2B,EAAE,EAAEE,GAAGnP,EAAE,GAAGyN,GAAG,CAAC,QAAQ,EAAE,cAAc,EAAE,eAAe,EAAE,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,iBAAiBM,EAAE,CAAC,EAAEqB,GAAG9B,GAAG6B,EAAE,EAAEE,GAAGrP,EAAE,GAAGuN,GAAG,CAAC,aAAa,EAAE,YAAY,EAAE,cAAc,CAAC,CAAC,EAAE+B,GAAGhC,GAAG+B,EAAE,EAAEE,GAAGvP,EAAE,GAAG8N,GAAG,CAAC,OAAO,SAAS7N,EAAE,CAAC,MAAM,WAAWA,EAAEA,EAAE,OAAO,gBAAgBA,EAAE,CAACA,EAAE,YAAY,CAAC,EACnf,OAAO,SAASA,EAAE,CAAC,MAAM,WAAWA,EAAEA,EAAE,OAAO,gBAAgBA,EAAE,CAACA,EAAE,YAAY,eAAeA,EAAE,CAACA,EAAE,WAAW,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,EAAEuP,GAAGlC,GAAGiC,EAAE,EAAEE,GAAG,CAAC,EAAE,GAAG,GAAG,EAAE,EAAEC,GAAGzM,GAAI,qBAAqB,OAAO0M,GAAG,KAAK1M,GAAI,iBAAiB,WAAW0M,GAAG,SAAS,cAAc,IAAIC,GAAG3M,GAAI,cAAc,QAAQ,CAAC0M,GAAGE,GAAG5M,IAAK,CAACyM,IAAIC,IAAI,EAAEA,IAAI,IAAIA,IAAIG,GAAG,IAAwBC,GAAG,GAC1W,SAASC,GAAG/P,EAAEK,EAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,QAAQ,OAAWwP,GAAG,QAAQnP,EAAE,OAAO,IAAzB,GAA2B,IAAK,UAAU,OAAaA,EAAE,UAAR,IAAgB,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,MAAM,GAAG,QAAQ,MAAM,EAAE,CAAC,CAAC,SAAS2P,GAAGhQ,EAAE,CAAC,OAAAA,EAAEA,EAAE,OAAwB,OAAOA,GAAlB,UAAqB,SAASA,EAAEA,EAAE,KAAK,IAAI,CAAC,IAAIiQ,GAAG,GAAG,SAASC,GAAGlQ,EAAEK,EAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,iBAAiB,OAAOgQ,GAAG3P,CAAC,EAAE,IAAK,WAAW,OAAQA,EAAE,QAAP,GAAoB,MAAKyP,GAAG,GAAUD,IAAG,IAAK,YAAY,OAAO7P,EAAEK,EAAE,KAAKL,IAAI6P,IAAIC,GAAG,KAAK9P,EAAE,QAAQ,OAAO,IAAI,CAAC,CACld,SAASmQ,GAAGnQ,EAAEK,EAAE,CAAC,GAAG4P,GAAG,OAAyBjQ,IAAnB,kBAAsB,CAACyP,IAAIM,GAAG/P,EAAEK,CAAC,GAAGL,EAAEiN,GAAE,EAAGD,GAAGD,GAAGD,GAAG,KAAKmD,GAAG,GAAGjQ,GAAG,KAAK,OAAOA,GAAG,IAAK,QAAQ,OAAO,KAAK,IAAK,WAAW,GAAG,EAAEK,EAAE,SAASA,EAAE,QAAQA,EAAE,UAAUA,EAAE,SAASA,EAAE,OAAO,CAAC,GAAGA,EAAE,MAAM,EAAEA,EAAE,KAAK,OAAO,OAAOA,EAAE,KAAK,GAAGA,EAAE,MAAM,OAAO,OAAO,aAAaA,EAAE,KAAK,CAAC,CAAC,OAAO,KAAK,IAAK,iBAAiB,OAAOuP,IAAWvP,EAAE,SAAT,KAAgB,KAAKA,EAAE,KAAK,QAAQ,OAAO,IAAI,CAAC,CACvY,IAAI+P,GAAG,CAAC,MAAM,GAAG,KAAK,GAAG,SAAS,GAAG,iBAAiB,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAI,GAAG,KAAK,EAAE,EAAE,SAASC,GAAGrQ,EAAE,CAAC,IAAIK,EAAEL,GAAGA,EAAE,UAAUA,EAAE,SAAS,YAAW,EAAG,OAAgBK,IAAV,QAAY,CAAC,CAAC+P,GAAGpQ,EAAE,IAAI,EAAeK,IAAb,UAAoB,CAAC,SAASiQ,GAAGtQ,EAAEK,EAAEW,EAAED,EAAE,CAACyG,GAAGzG,CAAC,EAAEV,EAAEkQ,EAAGlQ,EAAE,UAAU,EAAE,EAAEA,EAAE,SAASW,EAAE,IAAIuM,GAAG,WAAW,SAAS,KAAKvM,EAAED,CAAC,EAAEf,EAAE,KAAK,CAAC,MAAMgB,EAAE,UAAUX,CAAC,CAAC,EAAE,CAAC,IAAImQ,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAG1Q,EAAE,CAAC2Q,GAAG3Q,EAAE,CAAC,CAAC,CAAC,SAAS4Q,GAAG5Q,EAAE,CAAC,IAAIK,EAAEwQ,GAAG7Q,CAAC,EAAE,GAAGsF,GAAGjF,CAAC,EAAE,OAAOL,CAAC,CACpe,SAAS8Q,GAAG9Q,EAAEK,EAAE,CAAC,GAAcL,IAAX,SAAa,OAAOK,CAAC,CAAC,IAAI0Q,GAAG,GAAG,GAAG/N,EAAG,CAAC,IAAIgO,GAAG,GAAGhO,EAAG,CAAC,IAAIiO,GAAG,YAAY,SAAS,GAAG,CAACA,GAAG,CAAC,IAAIC,GAAG,SAAS,cAAc,KAAK,EAAEA,GAAG,aAAa,UAAU,SAAS,EAAED,GAAgB,OAAOC,GAAG,SAAvB,UAA8B,CAACF,GAAGC,EAAE,MAAMD,GAAG,GAAGD,GAAGC,KAAK,CAAC,SAAS,cAAc,EAAE,SAAS,aAAa,CAAC,SAASG,IAAI,CAACX,KAAKA,GAAG,YAAY,mBAAmBY,EAAE,EAAEX,GAAGD,GAAG,KAAK,CAAC,SAASY,GAAGpR,EAAE,CAAC,GAAaA,EAAE,eAAZ,SAA0B4Q,GAAGH,EAAE,EAAE,CAAC,IAAIpQ,EAAE,GAAGiQ,GAAGjQ,EAAEoQ,GAAGzQ,EAAEiH,GAAGjH,CAAC,CAAC,EAAE6H,GAAG6I,GAAGrQ,CAAC,CAAC,CAAC,CAC/b,SAASgR,GAAGrR,EAAEK,EAAEW,EAAE,CAAahB,IAAZ,WAAemR,KAAKX,GAAGnQ,EAAEoQ,GAAGzP,EAAEwP,GAAG,YAAY,mBAAmBY,EAAE,GAAgBpR,IAAb,YAAgBmR,GAAE,CAAE,CAAC,SAASG,GAAGtR,EAAE,CAAC,GAAuBA,IAApB,mBAAiCA,IAAV,SAAyBA,IAAZ,UAAc,OAAO4Q,GAAGH,EAAE,CAAC,CAAC,SAASc,GAAGvR,EAAEK,EAAE,CAAC,GAAaL,IAAV,QAAY,OAAO4Q,GAAGvQ,CAAC,CAAC,CAAC,SAASmR,GAAGxR,EAAEK,EAAE,CAAC,GAAaL,IAAV,SAAwBA,IAAX,SAAa,OAAO4Q,GAAGvQ,CAAC,CAAC,CAAC,SAASoR,GAAGzR,EAAEK,EAAE,CAAC,OAAOL,IAAIK,IAAQL,IAAJ,GAAO,EAAEA,IAAI,EAAEK,IAAIL,IAAIA,GAAGK,IAAIA,CAAC,CAAC,IAAIqR,GAAgB,OAAO,OAAO,IAA3B,WAA8B,OAAO,GAAGD,GACtZ,SAASE,GAAG3R,EAAEK,EAAE,CAAC,GAAGqR,GAAG1R,EAAEK,CAAC,EAAE,MAAM,GAAG,GAAc,OAAOL,GAAlB,UAA4BA,IAAP,MAAqB,OAAOK,GAAlB,UAA4BA,IAAP,KAAS,MAAM,GAAG,IAAIW,EAAE,OAAO,KAAKhB,CAAC,EAAEe,EAAE,OAAO,KAAKV,CAAC,EAAE,GAAGW,EAAE,SAASD,EAAE,OAAO,SAAS,IAAIA,EAAE,EAAEA,EAAEC,EAAE,OAAOD,IAAI,CAAC,IAAIT,EAAEU,EAAED,CAAC,EAAE,GAAG,CAACkC,EAAG,KAAK5C,EAAEC,CAAC,GAAG,CAACoR,GAAG1R,EAAEM,CAAC,EAAED,EAAEC,CAAC,CAAC,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC,SAASsR,GAAG5R,EAAE,CAAC,KAAKA,GAAGA,EAAE,YAAYA,EAAEA,EAAE,WAAW,OAAOA,CAAC,CACtU,SAAS6R,GAAG7R,EAAEK,EAAE,CAAC,IAAIW,EAAE4Q,GAAG5R,CAAC,EAAEA,EAAE,EAAE,QAAQe,EAAEC,GAAG,CAAC,GAAOA,EAAE,WAAN,EAAe,CAA0B,GAAzBD,EAAEf,EAAEgB,EAAE,YAAY,OAAUhB,GAAGK,GAAGU,GAAGV,EAAE,MAAM,CAAC,KAAKW,EAAE,OAAOX,EAAEL,CAAC,EAAEA,EAAEe,CAAC,CAACf,EAAE,CAAC,KAAKgB,GAAG,CAAC,GAAGA,EAAE,YAAY,CAACA,EAAEA,EAAE,YAAY,MAAMhB,CAAC,CAACgB,EAAEA,EAAE,UAAU,CAACA,EAAE,MAAM,CAACA,EAAE4Q,GAAG5Q,CAAC,CAAC,CAAC,CAAC,SAAS8Q,GAAG9R,EAAEK,EAAE,CAAC,OAAOL,GAAGK,EAAEL,IAAIK,EAAE,GAAGL,GAAOA,EAAE,WAAN,EAAe,GAAGK,GAAOA,EAAE,WAAN,EAAeyR,GAAG9R,EAAEK,EAAE,UAAU,EAAE,aAAaL,EAAEA,EAAE,SAASK,CAAC,EAAEL,EAAE,wBAAwB,CAAC,EAAEA,EAAE,wBAAwBK,CAAC,EAAE,IAAI,GAAG,EAAE,CAC9Z,SAAS0R,IAAI,CAAC,QAAQ/R,EAAE,OAAOK,EAAEkF,GAAE,EAAGlF,aAAaL,EAAE,mBAAmB,CAAC,GAAG,CAAC,IAAIgB,EAAa,OAAOX,EAAE,cAAc,SAAS,MAA3C,QAA+C,MAAS,CAACW,EAAE,EAAE,CAAC,GAAGA,EAAEhB,EAAEK,EAAE,kBAAmB,OAAMA,EAAEkF,GAAGvF,EAAE,QAAQ,CAAC,CAAC,OAAOK,CAAC,CAAC,SAAS2R,GAAGhS,EAAE,CAAC,IAAIK,EAAEL,GAAGA,EAAE,UAAUA,EAAE,SAAS,YAAW,EAAG,OAAOK,IAAcA,IAAV,UAAuBL,EAAE,OAAX,QAA4BA,EAAE,OAAb,UAA2BA,EAAE,OAAV,OAAwBA,EAAE,OAAV,OAA6BA,EAAE,OAAf,aAAmCK,IAAb,YAAyBL,EAAE,kBAAX,OAA2B,CACxa,SAASiS,GAAGjS,EAAE,CAAC,IAAIK,EAAE0R,GAAE,EAAG/Q,EAAEhB,EAAE,YAAYe,EAAEf,EAAE,eAAe,GAAGK,IAAIW,GAAGA,GAAGA,EAAE,eAAe8Q,GAAG9Q,EAAE,cAAc,gBAAgBA,CAAC,EAAE,CAAC,GAAUD,IAAP,MAAUiR,GAAGhR,CAAC,GAAE,GAAGX,EAAEU,EAAE,MAAMf,EAAEe,EAAE,IAAaf,IAAT,SAAaA,EAAEK,GAAG,mBAAmBW,EAAEA,EAAE,eAAeX,EAAEW,EAAE,aAAa,KAAK,IAAIhB,EAAEgB,EAAE,MAAM,MAAM,UAAUhB,GAAGK,EAAEW,EAAE,eAAe,WAAWX,EAAE,aAAa,OAAOL,EAAE,aAAa,CAACA,EAAEA,EAAE,eAAe,IAAIM,EAAEU,EAAE,YAAY,OAAOI,EAAE,KAAK,IAAIL,EAAE,MAAMT,CAAC,EAAES,EAAWA,EAAE,MAAX,OAAeK,EAAE,KAAK,IAAIL,EAAE,IAAIT,CAAC,EAAE,CAACN,EAAE,QAAQoB,EAAEL,IAAIT,EAAES,EAAEA,EAAEK,EAAEA,EAAEd,GAAGA,EAAEuR,GAAG7Q,EAAEI,CAAC,EAAE,IAAID,EAAE0Q,GAAG7Q,EACvfD,CAAC,EAAET,GAAGa,IAAQnB,EAAE,aAAN,GAAkBA,EAAE,aAAaM,EAAE,MAAMN,EAAE,eAAeM,EAAE,QAAQN,EAAE,YAAYmB,EAAE,MAAMnB,EAAE,cAAcmB,EAAE,UAAUd,EAAEA,EAAE,YAAW,EAAGA,EAAE,SAASC,EAAE,KAAKA,EAAE,MAAM,EAAEN,EAAE,gBAAe,EAAGoB,EAAEL,GAAGf,EAAE,SAASK,CAAC,EAAEL,EAAE,OAAOmB,EAAE,KAAKA,EAAE,MAAM,IAAId,EAAE,OAAOc,EAAE,KAAKA,EAAE,MAAM,EAAEnB,EAAE,SAASK,CAAC,GAAG,EAAM,IAALA,EAAE,GAAOL,EAAEgB,EAAEhB,EAAEA,EAAE,YAAgBA,EAAE,WAAN,GAAgBK,EAAE,KAAK,CAAC,QAAQL,EAAE,KAAKA,EAAE,WAAW,IAAIA,EAAE,SAAS,CAAC,EAAyC,IAA1B,OAAOgB,EAAE,OAAtB,YAA6BA,EAAE,MAAK,EAAOA,EAAE,EAAEA,EAAEX,EAAE,OAAOW,IAAIhB,EAAEK,EAAEW,CAAC,EAAEhB,EAAE,QAAQ,WAAWA,EAAE,KAAKA,EAAE,QAAQ,UAAUA,EAAE,GAAG,CAAC,CACzf,IAAIkS,GAAGlP,GAAI,iBAAiB,UAAU,IAAI,SAAS,aAAamP,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAKC,GAAG,GAC3F,SAASC,GAAGvS,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEC,EAAE,SAASA,EAAEA,EAAE,SAAaA,EAAE,WAAN,EAAeA,EAAEA,EAAE,cAAcsR,IAAUH,IAAN,MAAUA,KAAK5M,GAAGxE,CAAC,IAAIA,EAAEoR,GAAG,mBAAmBpR,GAAGiR,GAAGjR,CAAC,EAAEA,EAAE,CAAC,MAAMA,EAAE,eAAe,IAAIA,EAAE,YAAY,GAAGA,GAAGA,EAAE,eAAeA,EAAE,cAAc,aAAa,QAAQ,aAAY,EAAGA,EAAE,CAAC,WAAWA,EAAE,WAAW,aAAaA,EAAE,aAAa,UAAUA,EAAE,UAAU,YAAYA,EAAE,WAAW,GAAGsR,IAAIV,GAAGU,GAAGtR,CAAC,IAAIsR,GAAGtR,EAAEA,EAAEwP,EAAG6B,GAAG,UAAU,EAAE,EAAErR,EAAE,SAASV,EAAE,IAAIkN,GAAG,WAAW,SAAS,KAAKlN,EAAEW,CAAC,EAAEhB,EAAE,KAAK,CAAC,MAAMK,EAAE,UAAUU,CAAC,CAAC,EAAEV,EAAE,OAAO8R,KAAK,CACtf,SAASK,GAAGxS,EAAEK,EAAE,CAAC,IAAIW,EAAE,GAAG,OAAAA,EAAEhB,EAAE,YAAW,CAAE,EAAEK,EAAE,YAAW,EAAGW,EAAE,SAAShB,CAAC,EAAE,SAASK,EAAEW,EAAE,MAAMhB,CAAC,EAAE,MAAMK,EAASW,CAAC,CAAC,IAAIyR,GAAG,CAAC,aAAaD,GAAG,YAAY,cAAc,EAAE,mBAAmBA,GAAG,YAAY,oBAAoB,EAAE,eAAeA,GAAG,YAAY,gBAAgB,EAAE,cAAcA,GAAG,aAAa,eAAe,CAAC,EAAEE,GAAG,GAAGC,GAAG,GACvU3P,IAAK2P,GAAG,SAAS,cAAc,KAAK,EAAE,MAAM,mBAAmB,SAAS,OAAOF,GAAG,aAAa,UAAU,OAAOA,GAAG,mBAAmB,UAAU,OAAOA,GAAG,eAAe,WAAW,oBAAoB,QAAQ,OAAOA,GAAG,cAAc,YAAY,SAASG,GAAG5S,EAAE,CAAC,GAAG0S,GAAG1S,CAAC,EAAE,OAAO0S,GAAG1S,CAAC,EAAE,GAAG,CAACyS,GAAGzS,CAAC,EAAE,OAAOA,EAAE,IAAIK,EAAEoS,GAAGzS,CAAC,EAAEgB,EAAE,IAAIA,KAAKX,EAAE,GAAGA,EAAE,eAAeW,CAAC,GAAGA,KAAK2R,GAAG,OAAOD,GAAG1S,CAAC,EAAEK,EAAEW,CAAC,EAAE,OAAOhB,CAAC,CAAC,IAAI6S,GAAGD,GAAG,cAAc,EAAEE,GAAGF,GAAG,oBAAoB,EAAEG,GAAGH,GAAG,gBAAgB,EAAEI,GAAGJ,GAAG,eAAe,EAAEK,GAAG,IAAI,IAAIC,GAAG,smBAAsmB,MAAM,GAAG,EAClmC,SAASC,GAAGnT,EAAEK,EAAE,CAAC4S,GAAG,IAAIjT,EAAEK,CAAC,EAAEyC,EAAGzC,EAAE,CAACL,CAAC,CAAC,CAAC,CAAC,QAAQoT,GAAG,EAAEA,GAAGF,GAAG,OAAOE,KAAK,CAAC,IAAIC,GAAGH,GAAGE,EAAE,EAAEE,GAAGD,GAAG,YAAW,EAAGE,GAAGF,GAAG,CAAC,EAAE,YAAW,EAAGA,GAAG,MAAM,CAAC,EAAEF,GAAGG,GAAG,KAAKC,EAAE,CAAC,CAACJ,GAAGN,GAAG,gBAAgB,EAAEM,GAAGL,GAAG,sBAAsB,EAAEK,GAAGJ,GAAG,kBAAkB,EAAEI,GAAG,WAAW,eAAe,EAAEA,GAAG,UAAU,SAAS,EAAEA,GAAG,WAAW,QAAQ,EAAEA,GAAGH,GAAG,iBAAiB,EAAEjQ,EAAG,eAAe,CAAC,WAAW,WAAW,CAAC,EAAEA,EAAG,eAAe,CAAC,WAAW,WAAW,CAAC,EAAEA,EAAG,iBAAiB,CAAC,aAAa,aAAa,CAAC,EAC3dA,EAAG,iBAAiB,CAAC,aAAa,aAAa,CAAC,EAAED,EAAG,WAAW,oEAAoE,MAAM,GAAG,CAAC,EAAEA,EAAG,WAAW,uFAAuF,MAAM,GAAG,CAAC,EAAEA,EAAG,gBAAgB,CAAC,iBAAiB,WAAW,YAAY,OAAO,CAAC,EAAEA,EAAG,mBAAmB,2DAA2D,MAAM,GAAG,CAAC,EAAEA,EAAG,qBAAqB,6DAA6D,MAAM,GAAG,CAAC,EACngBA,EAAG,sBAAsB,8DAA8D,MAAM,GAAG,CAAC,EAAE,IAAI0Q,GAAG,6NAA6N,MAAM,GAAG,EAAEC,GAAG,IAAI,IAAI,0CAA0C,MAAM,GAAG,EAAE,OAAOD,EAAE,CAAC,EAC5Z,SAASE,GAAG1T,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,MAAM,gBAAgBA,EAAE,cAAcgB,EAAEwH,GAAGzH,EAAEV,EAAE,OAAOL,CAAC,EAAEA,EAAE,cAAc,IAAI,CACxG,SAAS2Q,GAAG3Q,EAAEK,EAAE,CAACA,GAAOA,EAAE,KAAP,EAAU,QAAQW,EAAE,EAAEA,EAAEhB,EAAE,OAAOgB,IAAI,CAAC,IAAID,EAAEf,EAAEgB,CAAC,EAAEV,EAAES,EAAE,MAAMA,EAAEA,EAAE,UAAUf,EAAE,CAAC,IAAIoB,EAAE,OAAO,GAAGf,EAAE,QAAQc,EAAEJ,EAAE,OAAO,EAAE,GAAGI,EAAEA,IAAI,CAAC,IAAID,EAAEH,EAAEI,CAAC,EAAEF,GAAEC,EAAE,SAAS/B,GAAE+B,EAAE,cAA2B,GAAbA,EAAEA,EAAE,SAAYD,KAAIG,GAAGd,EAAE,qBAAoB,EAAG,MAAMN,EAAE0T,GAAGpT,EAAEY,EAAE/B,EAAC,EAAEiC,EAAEH,EAAC,KAAM,KAAIE,EAAE,EAAEA,EAAEJ,EAAE,OAAOI,IAAI,CAAoD,GAAnDD,EAAEH,EAAEI,CAAC,EAAEF,GAAEC,EAAE,SAAS/B,GAAE+B,EAAE,cAAcA,EAAEA,EAAE,SAAYD,KAAIG,GAAGd,EAAE,qBAAoB,EAAG,MAAMN,EAAE0T,GAAGpT,EAAEY,EAAE/B,EAAC,EAAEiC,EAAEH,EAAC,CAAC,CAAC,CAAC,GAAGmH,GAAG,MAAMpI,EAAEqI,GAAGD,GAAG,GAAGC,GAAG,KAAKrI,CAAE,CAC5a,SAASG,GAAEH,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAEsT,EAAE,EAAW3S,IAAT,SAAaA,EAAEX,EAAEsT,EAAE,EAAE,IAAI,KAAK,IAAI5S,EAAEf,EAAE,WAAWgB,EAAE,IAAID,CAAC,IAAI6S,GAAGvT,EAAEL,EAAE,EAAE,EAAE,EAAEgB,EAAE,IAAID,CAAC,EAAE,CAAC,SAAS8S,GAAG7T,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAE,EAAEV,IAAIU,GAAG,GAAG6S,GAAG5S,EAAEhB,EAAEe,EAAEV,CAAC,CAAC,CAAC,IAAIyT,GAAG,kBAAkB,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,CAAC,EAAE,SAASC,GAAG/T,EAAE,CAAC,GAAG,CAACA,EAAE8T,EAAE,EAAE,CAAC9T,EAAE8T,EAAE,EAAE,GAAGlR,EAAG,QAAQ,SAASvC,EAAE,CAAqBA,IAApB,oBAAwBoT,GAAG,IAAIpT,CAAC,GAAGwT,GAAGxT,EAAE,GAAGL,CAAC,EAAE6T,GAAGxT,EAAE,GAAGL,CAAC,EAAE,CAAC,EAAE,IAAIK,EAAML,EAAE,WAAN,EAAeA,EAAEA,EAAE,cAAqBK,IAAP,MAAUA,EAAEyT,EAAE,IAAIzT,EAAEyT,EAAE,EAAE,GAAGD,GAAG,kBAAkB,GAAGxT,CAAC,EAAE,CAAC,CACjb,SAASuT,GAAG5T,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAO8L,GAAGxM,CAAC,EAAC,CAAE,IAAK,GAAE,IAAIC,EAAEkM,GAAG,MAAM,IAAK,GAAElM,EAAEoM,GAAG,MAAM,QAAQpM,EAAEmM,EAAE,CAACzL,EAAEV,EAAE,KAAK,KAAKD,EAAEW,EAAEhB,CAAC,EAAEM,EAAE,OAAO,CAACyH,IAAmB1H,IAAf,cAAgCA,IAAd,aAA2BA,IAAV,UAAcC,EAAE,IAAIS,EAAWT,IAAT,OAAWN,EAAE,iBAAiBK,EAAEW,EAAE,CAAC,QAAQ,GAAG,QAAQV,CAAC,CAAC,EAAEN,EAAE,iBAAiBK,EAAEW,EAAE,EAAE,EAAWV,IAAT,OAAWN,EAAE,iBAAiBK,EAAEW,EAAE,CAAC,QAAQV,CAAC,CAAC,EAAEN,EAAE,iBAAiBK,EAAEW,EAAE,EAAE,CAAC,CAClV,SAAS2L,EAAG3M,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIc,EAAEL,EAAE,IAAQV,EAAE,KAAP,IAAgBA,EAAE,KAAP,GAAkBU,IAAP,KAASf,EAAE,OAAO,CAAC,GAAUe,IAAP,KAAS,OAAO,IAAII,EAAEJ,EAAE,IAAI,GAAOI,IAAJ,GAAWA,IAAJ,EAAM,CAAC,IAAID,EAAEH,EAAE,UAAU,cAAc,GAAGG,IAAIZ,GAAOY,EAAE,WAAN,GAAgBA,EAAE,aAAaZ,EAAE,MAAM,GAAOa,IAAJ,EAAM,IAAIA,EAAEJ,EAAE,OAAcI,IAAP,MAAU,CAAC,IAAIF,GAAEE,EAAE,IAAI,IAAOF,KAAJ,GAAWA,KAAJ,KAASA,GAAEE,EAAE,UAAU,cAAcF,KAAIX,GAAOW,GAAE,WAAN,GAAgBA,GAAE,aAAaX,GAAE,OAAOa,EAAEA,EAAE,MAAM,CAAC,KAAYD,IAAP,MAAU,CAAS,GAARC,EAAE4K,GAAG7K,CAAC,EAAYC,IAAP,KAAS,OAAe,GAARF,GAAEE,EAAE,IAAWF,KAAJ,GAAWA,KAAJ,EAAM,CAACF,EAAEK,EAAED,EAAE,SAASnB,CAAC,CAACkB,EAAEA,EAAE,UAAU,CAAC,CAACH,EAAEA,EAAE,MAAM,CAAC8G,GAAG,UAAU,CAAC,IAAI9G,GAAEK,EAAEd,GAAE2G,GAAGjG,CAAC,EAAEG,GAAE,GACpfnB,EAAE,CAAC,IAAIkB,GAAE+R,GAAG,IAAIjT,CAAC,EAAE,GAAYkB,KAAT,OAAW,CAAC,IAAID,GAAEsM,GAAGnO,GAAEY,EAAE,OAAOA,GAAG,IAAK,WAAW,GAAOkN,GAAGlM,CAAC,IAAR,EAAU,MAAMhB,EAAE,IAAK,UAAU,IAAK,QAAQiB,GAAE8N,GAAG,MAAM,IAAK,UAAU3P,GAAE,QAAQ6B,GAAEkN,GAAG,MAAM,IAAK,WAAW/O,GAAE,OAAO6B,GAAEkN,GAAG,MAAM,IAAK,aAAa,IAAK,YAAYlN,GAAEkN,GAAG,MAAM,IAAK,QAAQ,GAAOnN,EAAE,SAAN,EAAa,MAAMhB,EAAE,IAAK,WAAW,IAAK,WAAW,IAAK,YAAY,IAAK,YAAY,IAAK,UAAU,IAAK,WAAW,IAAK,YAAY,IAAK,cAAciB,GAAE8M,GAAG,MAAM,IAAK,OAAO,IAAK,UAAU,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,WAAW,IAAK,YAAY,IAAK,OAAO9M,GAC1iBgN,GAAG,MAAM,IAAK,cAAc,IAAK,WAAW,IAAK,YAAY,IAAK,aAAahN,GAAEkO,GAAG,MAAM,KAAK0D,GAAG,KAAKC,GAAG,KAAKC,GAAG9R,GAAEoN,GAAG,MAAM,KAAK2E,GAAG/R,GAAEoO,GAAG,MAAM,IAAK,SAASpO,GAAEwM,GAAG,MAAM,IAAK,QAAQxM,GAAEsO,GAAG,MAAM,IAAK,OAAO,IAAK,MAAM,IAAK,QAAQtO,GAAEsN,GAAG,MAAM,IAAK,oBAAoB,IAAK,qBAAqB,IAAK,gBAAgB,IAAK,cAAc,IAAK,cAAc,IAAK,aAAa,IAAK,cAAc,IAAK,YAAYtN,GAAEgO,EAAE,CAAC,IAAIzP,IAAOa,EAAE,KAAP,EAAUM,GAAE,CAACnB,IAAcQ,IAAX,SAAaJ,GAAEJ,GAAS0B,KAAP,KAASA,GAAE,UAAU,KAAKA,GAAE1B,GAAE,GAAG,QAAQG,GAAEoB,GAAEtB,GAC7eE,KAD+e,MAC5e,CAACF,GAAEE,GAAE,IAAIY,GAAEd,GAAE,UAAsF,GAAxEA,GAAE,MAAN,GAAkBc,KAAP,OAAWd,GAAEc,GAASX,KAAP,OAAWW,GAAEuH,GAAGnI,GAAEC,EAAC,EAAQW,IAAN,MAASf,GAAE,KAAKwU,EAAGrU,GAAEY,GAAEd,EAAC,CAAC,IAAOkB,GAAE,MAAMhB,GAAEA,GAAE,MAAM,CAAC,EAAEH,GAAE,SAAS0B,GAAE,IAAID,GAAEC,GAAE9B,GAAE,KAAK4B,EAAEV,EAAC,EAAEa,GAAE,KAAK,CAAC,MAAMD,GAAE,UAAU1B,EAAC,CAAC,EAAE,CAAC,CAAC,IAAQa,EAAE,KAAP,EAAU,CAACL,EAAE,CAAyE,GAAxEkB,GAAgBlB,IAAd,aAAiCA,IAAhB,cAAkBiB,GAAejB,IAAb,YAA+BA,IAAf,aAAoBkB,IAAGF,IAAIgG,KAAK5H,GAAE4B,EAAE,eAAeA,EAAE,eAAe+K,GAAG3M,EAAC,GAAGA,GAAE6U,EAAE,GAAG,MAAMjU,EAAE,IAAGiB,IAAGC,MAAGA,GAAEZ,GAAE,SAASA,GAAEA,IAAGY,GAAEZ,GAAE,eAAeY,GAAE,aAAaA,GAAE,aAAa,OAAUD,IAAM7B,GAAE4B,EAAE,eAAeA,EAAE,UAAUC,GAAEF,GAAE3B,GAAEA,GAAE2M,GAAG3M,EAAC,EAAE,KAC1eA,KAD+e,OAC3euB,GAAE8H,GAAGrJ,EAAC,EAAEA,KAAIuB,IAAOvB,GAAE,MAAN,GAAeA,GAAE,MAAN,KAAWA,GAAE,QAAU6B,GAAE,KAAK7B,GAAE2B,IAAKE,KAAI7B,IAAE,CAAgU,GAA/TI,GAAEuO,GAAGxN,GAAE,eAAeX,GAAE,eAAeD,GAAE,SAA0BK,IAAf,cAAkCA,IAAhB,iBAAkBR,GAAEyP,GAAG1O,GAAE,iBAAiBX,GAAE,iBAAiBD,GAAE,WAAUgB,GAAQM,IAAN,KAAQC,GAAE2P,GAAG5P,EAAC,EAAExB,GAAQL,IAAN,KAAQ8B,GAAE2P,GAAGzR,EAAC,EAAE8B,GAAE,IAAI1B,GAAEe,GAAEZ,GAAE,QAAQsB,GAAED,EAAEV,EAAC,EAAEY,GAAE,OAAOP,GAAEO,GAAE,cAAczB,GAAEc,GAAE,KAAKwL,GAAGzL,EAAC,IAAIS,KAAIvB,GAAE,IAAIA,GAAEI,GAAED,GAAE,QAAQP,GAAE4B,EAAEV,EAAC,EAAEd,GAAE,OAAOC,GAAED,GAAE,cAAcmB,GAAEJ,GAAEf,IAAGmB,GAAEJ,GAAKU,IAAG7B,GAAEiB,EAAE,CAAa,IAAZb,GAAEyB,GAAErB,GAAER,GAAEO,GAAE,EAAMF,GAAED,GAAEC,GAAEA,GAAEyU,EAAGzU,EAAC,EAAEE,KAAQ,IAAJF,GAAE,EAAMc,GAAEX,GAAEW,GAAEA,GAAE2T,EAAG3T,EAAC,EAAEd,KAAI,KAAK,EAAEE,GAAEF,IAAGD,GAAE0U,EAAG1U,EAAC,EAAEG,KAAI,KAAK,EAAEF,GAAEE,IAAGC,GACpfsU,EAAGtU,EAAC,EAAEH,KAAI,KAAKE,MAAK,CAAC,GAAGH,KAAII,IAAUA,KAAP,MAAUJ,KAAII,GAAE,UAAU,MAAMS,EAAEb,GAAE0U,EAAG1U,EAAC,EAAEI,GAAEsU,EAAGtU,EAAC,CAAC,CAACJ,GAAE,IAAI,MAAMA,GAAE,KAAYyB,KAAP,MAAUkT,EAAGhT,GAAED,GAAED,GAAEzB,GAAE,EAAE,EAASJ,KAAP,MAAiBuB,KAAP,MAAUwT,EAAGhT,GAAER,GAAEvB,GAAEI,GAAE,EAAE,CAAC,CAAE,CAACQ,EAAE,CAAyD,GAAxDkB,GAAEH,GAAE8P,GAAG9P,EAAC,EAAE,OAAOE,GAAEC,GAAE,UAAUA,GAAE,SAAS,YAAW,EAAiBD,KAAX,UAAwBA,KAAV,SAAsBC,GAAE,OAAX,OAAgB,IAAIkT,GAAGtD,WAAWT,GAAGnP,EAAC,EAAE,GAAG6P,GAAGqD,GAAG5C,OAAO,CAAC4C,GAAG9C,GAAG,IAAI+C,GAAGhD,EAAE,MAAMpQ,GAAEC,GAAE,WAAqBD,GAAE,YAAW,IAAvB,UAAyCC,GAAE,OAAf,YAA+BA,GAAE,OAAZ,WAAoBkT,GAAG7C,IAAI,GAAG6C,KAAKA,GAAGA,GAAGpU,EAAEe,EAAC,GAAG,CAACuP,GAAGnP,GAAEiT,GAAGpT,EAAEV,EAAC,EAAE,MAAMN,CAAC,CAACqU,IAAIA,GAAGrU,EAAEkB,GAAEH,EAAC,EAAef,IAAb,aAAiBqU,GAAGnT,GAAE,gBAClfmT,GAAG,YAAuBnT,GAAE,OAAb,UAAmB0E,GAAG1E,GAAE,SAASA,GAAE,KAAK,CAAC,CAAmB,OAAlBmT,GAAGtT,GAAE8P,GAAG9P,EAAC,EAAE,OAAcf,EAAC,CAAE,IAAK,WAAaqQ,GAAGgE,EAAE,GAAYA,GAAG,kBAAZ,UAA4BlC,GAAGkC,GAAGjC,GAAGrR,GAAEsR,GAAG,MAAK,MAAM,IAAK,WAAWA,GAAGD,GAAGD,GAAG,KAAK,MAAM,IAAK,YAAYG,GAAG,GAAG,MAAM,IAAK,cAAc,IAAK,UAAU,IAAK,UAAUA,GAAG,GAAGC,GAAGpR,GAAEH,EAAEV,EAAC,EAAE,MAAM,IAAK,kBAAkB,GAAG4R,GAAG,MAAM,IAAK,UAAU,IAAK,QAAQK,GAAGpR,GAAEH,EAAEV,EAAC,CAAC,CAAC,IAAIgU,GAAG,GAAG7E,GAAGpP,EAAE,CAAC,OAAOL,EAAC,CAAE,IAAK,mBAAmB,IAAIuU,GAAG,qBAAqB,MAAMlU,EAAE,IAAK,iBAAiBkU,GAAG,mBACpe,MAAMlU,EAAE,IAAK,oBAAoBkU,GAAG,sBAAsB,MAAMlU,CAAC,CAACkU,GAAG,MAAM,MAAMtE,GAAGF,GAAG/P,EAAEgB,CAAC,IAAIuT,GAAG,oBAAgCvU,IAAZ,WAAqBgB,EAAE,UAAR,MAAkBuT,GAAG,sBAAsBA,KAAK3E,IAAW5O,EAAE,SAAT,OAAkBiP,IAA2BsE,KAAvB,qBAA+CA,KAArB,oBAAyBtE,KAAKqE,GAAGrH,GAAE,IAAKH,GAAGxM,GAAEyM,GAAG,UAAUD,GAAGA,GAAG,MAAMA,GAAG,YAAYmD,GAAG,KAAKoE,GAAG9D,EAAGxP,GAAEwT,EAAE,EAAE,EAAEF,GAAG,SAASE,GAAG,IAAI9F,GAAG8F,GAAGvU,EAAE,KAAKgB,EAAEV,EAAC,EAAEa,GAAE,KAAK,CAAC,MAAMoT,GAAG,UAAUF,EAAE,CAAC,EAAEC,GAAGC,GAAG,KAAKD,IAAIA,GAAGtE,GAAGhP,CAAC,EAASsT,KAAP,OAAYC,GAAG,KAAKD,QAAUA,GAAG3E,GAAGO,GAAGlQ,EAAEgB,CAAC,EAAEmP,GAAGnQ,EAAEgB,CAAC,KAAED,GAAEwP,EAAGxP,GAAE,eAAe,EAC1f,EAAEA,GAAE,SAAST,GAAE,IAAImO,GAAG,gBAAgB,cAAc,KAAKzN,EAAEV,EAAC,EAAEa,GAAE,KAAK,CAAC,MAAMb,GAAE,UAAUS,EAAC,CAAC,EAAET,GAAE,KAAKgU,IAAG,CAAC3D,GAAGxP,GAAEd,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS2T,EAAGhU,EAAEK,EAAEW,EAAE,CAAC,MAAM,CAAC,SAAShB,EAAE,SAASK,EAAE,cAAcW,CAAC,CAAC,CAAC,SAASuP,EAAGvQ,EAAEK,EAAE,CAAC,QAAQW,EAAEX,EAAE,UAAUU,EAAE,GAAUf,IAAP,MAAU,CAAC,IAAIM,EAAEN,EAAEoB,EAAEd,EAAE,UAAcA,EAAE,MAAN,GAAkBc,IAAP,OAAWd,EAAEc,EAAEA,EAAE0G,GAAG9H,EAAEgB,CAAC,EAAQI,GAAN,MAASL,EAAE,QAAQiT,EAAGhU,EAAEoB,EAAEd,CAAC,CAAC,EAAEc,EAAE0G,GAAG9H,EAAEK,CAAC,EAAQe,GAAN,MAASL,EAAE,KAAKiT,EAAGhU,EAAEoB,EAAEd,CAAC,CAAC,GAAGN,EAAEA,EAAE,MAAM,CAAC,OAAOe,CAAC,CAAC,SAASmT,EAAGlU,EAAE,CAAC,GAAUA,IAAP,KAAS,OAAO,KAAK,GAAGA,EAAEA,EAAE,aAAaA,GAAOA,EAAE,MAAN,GAAW,OAAOA,GAAI,IAAI,CACnd,SAASmU,EAAGnU,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,QAAQc,EAAEf,EAAE,WAAWc,EAAE,GAAUH,IAAP,MAAUA,IAAID,GAAG,CAAC,IAAIG,EAAEF,EAAEC,GAAEC,EAAE,UAAU/B,GAAE+B,EAAE,UAAU,GAAUD,KAAP,MAAUA,KAAIF,EAAE,MAAUG,EAAE,MAAN,GAAkB/B,KAAP,OAAW+B,EAAE/B,GAAEmB,GAAGW,GAAE6G,GAAG9G,EAAEI,CAAC,EAAQH,IAAN,MAASE,EAAE,QAAQ6S,EAAGhT,EAAEC,GAAEC,CAAC,CAAC,GAAGZ,IAAIW,GAAE6G,GAAG9G,EAAEI,CAAC,EAAQH,IAAN,MAASE,EAAE,KAAK6S,EAAGhT,EAAEC,GAAEC,CAAC,CAAC,IAAIF,EAAEA,EAAE,MAAM,CAAKG,EAAE,SAAN,GAAcnB,EAAE,KAAK,CAAC,MAAMK,EAAE,UAAUc,CAAC,CAAC,CAAC,CAAC,IAAIqT,EAAG,SAASC,EAAG,iBAAiB,SAASC,GAAG1U,EAAE,CAAC,OAAkB,OAAOA,GAAlB,SAAoBA,EAAE,GAAGA,GAAG,QAAQwU,EAAG;AAAA,CAAI,EAAE,QAAQC,EAAG,EAAE,CAAC,CAAC,SAASE,GAAG3U,EAAEK,EAAEW,EAAE,CAAS,GAARX,EAAEqU,GAAGrU,CAAC,EAAKqU,GAAG1U,CAAC,IAAIK,GAAGW,EAAE,MAAM,MAAM3B,EAAE,GAAG,CAAC,CAAE,CAAC,SAASuV,IAAI,EAC7e,IAAIC,GAAG,KAAKC,GAAG,KAAK,SAASC,GAAG/U,EAAEK,EAAE,CAAC,OAAmBL,IAAb,YAA6BA,IAAb,YAA2B,OAAOK,EAAE,UAApB,UAAyC,OAAOA,EAAE,UAApB,UAAyC,OAAOA,EAAE,yBAApB,UAAoDA,EAAE,0BAAT,MAAwCA,EAAE,wBAAwB,QAAhC,IAAsC,CAC5P,IAAI2U,GAAgB,OAAO,YAApB,WAA+B,WAAW,OAAOC,GAAgB,OAAO,cAApB,WAAiC,aAAa,OAAOC,GAAgB,OAAO,SAApB,WAA4B,QAAQ,OAAOC,GAAgB,OAAO,gBAApB,WAAmC,eAA6B,OAAOD,GAArB,IAAwB,SAASlV,EAAE,CAAC,OAAOkV,GAAG,QAAQ,IAAI,EAAE,KAAKlV,CAAC,EAAE,MAAMoV,EAAE,CAAC,EAAEJ,GAAG,SAASI,GAAGpV,EAAE,CAAC,WAAW,UAAU,CAAC,MAAMA,CAAE,CAAC,CAAC,CACpV,SAASqV,GAAGrV,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAEU,EAAE,EAAE,EAAE,CAAC,IAAIT,EAAEU,EAAE,YAA6B,GAAjBhB,EAAE,YAAYgB,CAAC,EAAKV,GAAOA,EAAE,WAAN,EAAe,GAAGU,EAAEV,EAAE,KAAYU,IAAP,KAAS,CAAC,GAAOD,IAAJ,EAAM,CAACf,EAAE,YAAYM,CAAC,EAAE+L,GAAGhM,CAAC,EAAE,MAAM,CAACU,GAAG,MAAWC,IAAN,KAAgBA,IAAP,MAAiBA,IAAP,MAAUD,IAAIC,EAAEV,CAAC,OAAOU,GAAGqL,GAAGhM,CAAC,CAAC,CAAC,SAASiV,GAAGtV,EAAE,CAAC,KAAWA,GAAN,KAAQA,EAAEA,EAAE,YAAY,CAAC,IAAIK,EAAEL,EAAE,SAAS,GAAOK,IAAJ,GAAWA,IAAJ,EAAM,MAAM,GAAOA,IAAJ,EAAM,CAAU,GAATA,EAAEL,EAAE,KAAcK,IAAN,KAAgBA,IAAP,MAAiBA,IAAP,KAAS,MAAM,GAAUA,IAAP,KAAS,OAAO,IAAI,CAAC,CAAC,OAAOL,CAAC,CACjY,SAASuV,GAAGvV,EAAE,CAACA,EAAEA,EAAE,gBAAgB,QAAQK,EAAE,EAAEL,GAAG,CAAC,GAAOA,EAAE,WAAN,EAAe,CAAC,IAAIgB,EAAEhB,EAAE,KAAK,GAASgB,IAAN,KAAgBA,IAAP,MAAiBA,IAAP,KAAS,CAAC,GAAOX,IAAJ,EAAM,OAAOL,EAAEK,GAAG,MAAYW,IAAP,MAAUX,GAAG,CAACL,EAAEA,EAAE,eAAe,CAAC,OAAO,IAAI,CAAC,IAAIwV,GAAG,KAAK,OAAM,EAAG,SAAS,EAAE,EAAE,MAAM,CAAC,EAAEC,GAAG,gBAAgBD,GAAGE,GAAG,gBAAgBF,GAAGvB,GAAG,oBAAoBuB,GAAG7B,GAAG,iBAAiB6B,GAAGG,GAAG,oBAAoBH,GAAGI,GAAG,kBAAkBJ,GAClX,SAASzJ,GAAG/L,EAAE,CAAC,IAAIK,EAAEL,EAAEyV,EAAE,EAAE,GAAGpV,EAAE,OAAOA,EAAE,QAAQW,EAAEhB,EAAE,WAAWgB,GAAG,CAAC,GAAGX,EAAEW,EAAEiT,EAAE,GAAGjT,EAAEyU,EAAE,EAAE,CAAe,GAAdzU,EAAEX,EAAE,UAAoBA,EAAE,QAAT,MAAuBW,IAAP,MAAiBA,EAAE,QAAT,KAAe,IAAIhB,EAAEuV,GAAGvV,CAAC,EAASA,IAAP,MAAU,CAAC,GAAGgB,EAAEhB,EAAEyV,EAAE,EAAE,OAAOzU,EAAEhB,EAAEuV,GAAGvV,CAAC,CAAC,CAAC,OAAOK,CAAC,CAACL,EAAEgB,EAAEA,EAAEhB,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,SAASsH,GAAGtH,EAAE,CAAC,OAAAA,EAAEA,EAAEyV,EAAE,GAAGzV,EAAEiU,EAAE,EAAQ,CAACjU,GAAOA,EAAE,MAAN,GAAeA,EAAE,MAAN,GAAgBA,EAAE,MAAP,IAAgBA,EAAE,MAAN,EAAU,KAAKA,CAAC,CAAC,SAAS6Q,GAAG7Q,EAAE,CAAC,GAAOA,EAAE,MAAN,GAAeA,EAAE,MAAN,EAAU,OAAOA,EAAE,UAAU,MAAM,MAAMX,EAAE,EAAE,CAAC,CAAE,CAAC,SAASkI,GAAGvH,EAAE,CAAC,OAAOA,EAAE0V,EAAE,GAAG,IAAI,CAAC,IAAIG,GAAG,GAAGC,GAAG,GAAG,SAASC,GAAG/V,EAAE,CAAC,MAAM,CAAC,QAAQA,CAAC,CAAC,CACve,SAASI,GAAEJ,EAAE,CAAC,EAAE8V,KAAK9V,EAAE,QAAQ6V,GAAGC,EAAE,EAAED,GAAGC,EAAE,EAAE,KAAKA,KAAK,CAAC,SAAStV,GAAER,EAAEK,EAAE,CAACyV,KAAKD,GAAGC,EAAE,EAAE9V,EAAE,QAAQA,EAAE,QAAQK,CAAC,CAAC,IAAI2V,GAAG,GAAGvV,GAAEsV,GAAGC,EAAE,EAAEC,GAAGF,GAAG,EAAE,EAAEG,GAAGF,GAAG,SAASG,GAAGnW,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,KAAK,aAAa,GAAG,CAACgB,EAAE,OAAOgV,GAAG,IAAIjV,EAAEf,EAAE,UAAU,GAAGe,GAAGA,EAAE,8CAA8CV,EAAE,OAAOU,EAAE,0CAA0C,IAAIT,EAAE,GAAGc,EAAE,IAAIA,KAAKJ,EAAEV,EAAEc,CAAC,EAAEf,EAAEe,CAAC,EAAE,OAAAL,IAAIf,EAAEA,EAAE,UAAUA,EAAE,4CAA4CK,EAAEL,EAAE,0CAA0CM,GAAUA,CAAC,CAC9d,SAAS8V,GAAGpW,EAAE,CAAC,OAAAA,EAAEA,EAAE,kBAAgCA,GAAP,IAAoB,CAAC,SAASqW,IAAI,CAACjW,GAAE6V,EAAE,EAAE7V,GAAEK,EAAC,CAAC,CAAC,SAAS6V,GAAGtW,EAAEK,EAAEW,EAAE,CAAC,GAAGP,GAAE,UAAUuV,GAAG,MAAM,MAAM3W,EAAE,GAAG,CAAC,EAAEmB,GAAEC,GAAEJ,CAAC,EAAEG,GAAEyV,GAAGjV,CAAC,CAAC,CAAC,SAASuV,GAAGvW,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,UAAgC,GAAtBK,EAAEA,EAAE,kBAAkC,OAAOU,EAAE,iBAAtB,WAAsC,OAAOC,EAAED,EAAEA,EAAE,kBAAkB,QAAQT,KAAKS,EAAE,GAAG,EAAET,KAAKD,GAAG,MAAM,MAAMhB,EAAE,IAAI4F,GAAGjF,CAAC,GAAG,UAAUM,CAAC,CAAC,EAAE,OAAOP,EAAE,GAAGiB,EAAED,CAAC,CAAC,CACxX,SAASyV,GAAGxW,EAAE,CAAC,OAAAA,GAAGA,EAAEA,EAAE,YAAYA,EAAE,2CAA2CgW,GAAGE,GAAGzV,GAAE,QAAQD,GAAEC,GAAET,CAAC,EAAEQ,GAAEyV,GAAGA,GAAG,OAAO,IAAU,CAAC,SAASQ,GAAGzW,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,UAAU,GAAG,CAACe,EAAE,MAAM,MAAM1B,EAAE,GAAG,CAAC,EAAE2B,GAAGhB,EAAEuW,GAAGvW,EAAEK,EAAE6V,EAAE,EAAEnV,EAAE,0CAA0Cf,EAAEI,GAAE6V,EAAE,EAAE7V,GAAEK,EAAC,EAAED,GAAEC,GAAET,CAAC,GAAGI,GAAE6V,EAAE,EAAEzV,GAAEyV,GAAGjV,CAAC,CAAC,CAAC,IAAI0V,GAAG,KAAKC,GAAG,GAAGC,GAAG,GAAG,SAASC,GAAG7W,EAAE,CAAQ0W,KAAP,KAAUA,GAAG,CAAC1W,CAAC,EAAE0W,GAAG,KAAK1W,CAAC,CAAC,CAAC,SAAS8W,GAAG9W,EAAE,CAAC2W,GAAG,GAAGE,GAAG7W,CAAC,CAAC,CAC3X,SAAS+W,IAAI,CAAC,GAAG,CAACH,IAAWF,KAAP,KAAU,CAACE,GAAG,GAAG,IAAI5W,EAAE,EAAEK,EAAEH,GAAE,GAAG,CAAC,IAAIc,EAAE0V,GAAG,IAAIxW,GAAE,EAAEF,EAAEgB,EAAE,OAAOhB,IAAI,CAAC,IAAIe,EAAEC,EAAEhB,CAAC,EAAE,GAAGe,EAAEA,EAAE,EAAE,QAAeA,IAAP,KAAS,CAAC2V,GAAG,KAAKC,GAAG,EAAE,OAAOrW,EAAE,CAAC,MAAaoW,KAAP,OAAYA,GAAGA,GAAG,MAAM1W,EAAE,CAAC,GAAG+I,GAAGK,GAAG2N,EAAE,EAAEzW,CAAE,QAAC,CAAQJ,GAAEG,EAAEuW,GAAG,EAAE,CAAC,CAAC,OAAO,IAAI,CAAC,IAAII,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAGC,GAAG,EAAEC,GAAG,KAAKC,GAAG,EAAEC,GAAG,GAAG,SAASC,GAAGzX,EAAEK,EAAE,CAAC2W,GAAGC,IAAI,EAAEE,GAAGH,GAAGC,IAAI,EAAEC,GAAGA,GAAGlX,EAAEmX,GAAG9W,CAAC,CACjV,SAASqX,GAAG1X,EAAEK,EAAEW,EAAE,CAACoW,GAAGC,IAAI,EAAEE,GAAGH,GAAGC,IAAI,EAAEG,GAAGJ,GAAGC,IAAI,EAAEC,GAAGA,GAAGtX,EAAE,IAAIe,EAAEwW,GAAGvX,EAAEwX,GAAG,IAAIlX,EAAE,GAAGsJ,GAAG7I,CAAC,EAAE,EAAEA,GAAG,EAAE,GAAGT,GAAGU,GAAG,EAAE,IAAII,EAAE,GAAGwI,GAAGvJ,CAAC,EAAEC,EAAE,GAAG,GAAGc,EAAE,CAAC,IAAID,EAAEb,EAAEA,EAAE,EAAEc,GAAGL,GAAG,GAAGI,GAAG,GAAG,SAAS,EAAE,EAAEJ,IAAII,EAAEb,GAAGa,EAAEoW,GAAG,GAAG,GAAG3N,GAAGvJ,CAAC,EAAEC,EAAEU,GAAGV,EAAES,EAAEyW,GAAGpW,EAAEpB,CAAC,MAAMuX,GAAG,GAAGnW,EAAEJ,GAAGV,EAAES,EAAEyW,GAAGxX,CAAC,CAAC,SAAS2X,GAAG3X,EAAE,CAAQA,EAAE,SAAT,OAAkByX,GAAGzX,EAAE,CAAC,EAAE0X,GAAG1X,EAAE,EAAE,CAAC,EAAE,CAAC,SAAS4X,GAAG5X,EAAE,CAAC,KAAKA,IAAIkX,IAAIA,GAAGF,GAAG,EAAEC,EAAE,EAAED,GAAGC,EAAE,EAAE,KAAKE,GAAGH,GAAG,EAAEC,EAAE,EAAED,GAAGC,EAAE,EAAE,KAAK,KAAKjX,IAAIsX,IAAIA,GAAGF,GAAG,EAAEC,EAAE,EAAED,GAAGC,EAAE,EAAE,KAAKG,GAAGJ,GAAG,EAAEC,EAAE,EAAED,GAAGC,EAAE,EAAE,KAAKE,GAAGH,GAAG,EAAEC,EAAE,EAAED,GAAGC,EAAE,EAAE,IAAI,CAAC,IAAIQ,GAAG,KAAKC,GAAG,KAAKpX,GAAE,GAAGqX,GAAG,KACje,SAASC,GAAGhY,EAAEK,EAAE,CAAC,IAAIW,EAAEiX,GAAG,EAAE,KAAK,KAAK,CAAC,EAAEjX,EAAE,YAAY,UAAUA,EAAE,UAAUX,EAAEW,EAAE,OAAOhB,EAAEK,EAAEL,EAAE,UAAiBK,IAAP,MAAUL,EAAE,UAAU,CAACgB,CAAC,EAAEhB,EAAE,OAAO,IAAIK,EAAE,KAAKW,CAAC,CAAC,CACxJ,SAASkX,GAAGlY,EAAEK,EAAE,CAAC,OAAOL,EAAE,IAAG,CAAE,IAAK,GAAE,IAAIgB,EAAEhB,EAAE,KAAK,OAAAK,EAAMA,EAAE,WAAN,GAAgBW,EAAE,YAAW,IAAKX,EAAE,SAAS,YAAW,EAAG,KAAKA,EAAgBA,IAAP,MAAUL,EAAE,UAAUK,EAAEwX,GAAG7X,EAAE8X,GAAGxC,GAAGjV,EAAE,UAAU,EAAE,IAAI,GAAG,IAAK,GAAE,OAAOA,EAAOL,EAAE,eAAP,IAAyBK,EAAE,WAAN,EAAe,KAAKA,EAASA,IAAP,MAAUL,EAAE,UAAUK,EAAEwX,GAAG7X,EAAE8X,GAAG,KAAK,IAAI,GAAG,IAAK,IAAG,OAAOzX,EAAMA,EAAE,WAAN,EAAe,KAAKA,EAASA,IAAP,MAAUW,EAASsW,KAAP,KAAU,CAAC,GAAGC,GAAG,SAASC,EAAE,EAAE,KAAKxX,EAAE,cAAc,CAAC,WAAWK,EAAE,YAAYW,EAAE,UAAU,UAAU,EAAEA,EAAEiX,GAAG,GAAG,KAAK,KAAK,CAAC,EAAEjX,EAAE,UAAUX,EAAEW,EAAE,OAAOhB,EAAEA,EAAE,MAAMgB,EAAE6W,GAAG7X,EAAE8X,GAClf,KAAK,IAAI,GAAG,QAAQ,MAAM,EAAE,CAAC,CAAC,SAASK,GAAGnY,EAAE,CAAC,OAAYA,EAAE,KAAK,KAAZ,IAAqBA,EAAE,MAAM,OAAb,CAAiB,CAAC,SAASoY,GAAGpY,EAAE,CAAC,GAAGU,GAAE,CAAC,IAAIL,EAAEyX,GAAG,GAAGzX,EAAE,CAAC,IAAIW,EAAEX,EAAE,GAAG,CAAC6X,GAAGlY,EAAEK,CAAC,EAAE,CAAC,GAAG8X,GAAGnY,CAAC,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEgB,EAAEiV,GAAGtU,EAAE,WAAW,EAAE,IAAID,EAAE8W,GAAGxX,GAAG6X,GAAGlY,EAAEK,CAAC,EAAE2X,GAAGjX,EAAEC,CAAC,GAAGhB,EAAE,MAAMA,EAAE,MAAM,MAAM,EAAEU,GAAE,GAAGmX,GAAG7X,EAAE,CAAC,KAAK,CAAC,GAAGmY,GAAGnY,CAAC,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEW,EAAE,MAAMA,EAAE,MAAM,MAAM,EAAEU,GAAE,GAAGmX,GAAG7X,CAAC,CAAC,CAAC,CAAC,SAASqY,GAAGrY,EAAE,CAAC,IAAIA,EAAEA,EAAE,OAAcA,IAAP,MAAcA,EAAE,MAAN,GAAeA,EAAE,MAAN,GAAgBA,EAAE,MAAP,IAAYA,EAAEA,EAAE,OAAO6X,GAAG7X,CAAC,CACha,SAASsY,GAAGtY,EAAE,CAAC,GAAGA,IAAI6X,GAAG,MAAM,GAAG,GAAG,CAACnX,GAAE,OAAO2X,GAAGrY,CAAC,EAAEU,GAAE,GAAG,GAAG,IAAIL,EAAkG,IAA/FA,EAAML,EAAE,MAAN,IAAY,EAAEK,EAAML,EAAE,MAAN,KAAaK,EAAEL,EAAE,KAAKK,EAAWA,IAAT,QAAqBA,IAAT,QAAY,CAAC0U,GAAG/U,EAAE,KAAKA,EAAE,aAAa,GAAMK,IAAIA,EAAEyX,IAAI,CAAC,GAAGK,GAAGnY,CAAC,EAAE,MAAMuY,GAAE,EAAG,MAAMlZ,EAAE,GAAG,CAAC,EAAE,KAAKgB,GAAG2X,GAAGhY,EAAEK,CAAC,EAAEA,EAAEiV,GAAGjV,EAAE,WAAW,CAAC,CAAO,GAANgY,GAAGrY,CAAC,EAAUA,EAAE,MAAP,GAAW,CAAgD,GAA/CA,EAAEA,EAAE,cAAcA,EAASA,IAAP,KAASA,EAAE,WAAW,KAAQ,CAACA,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEW,EAAE,CAAiB,IAAhBA,EAAEA,EAAE,YAAgBK,EAAE,EAAEL,GAAG,CAAC,GAAOA,EAAE,WAAN,EAAe,CAAC,IAAIgB,EAAEhB,EAAE,KAAK,GAAUgB,IAAP,KAAS,CAAC,GAAOX,IAAJ,EAAM,CAACyX,GAAGxC,GAAGtV,EAAE,WAAW,EAAE,MAAMA,CAAC,CAACK,GAAG,MAAWW,IAAN,KAAgBA,IAAP,MAAiBA,IAAP,MAAUX,GAAG,CAACL,EAAEA,EAAE,WAAW,CAAC8X,GACjgB,IAAI,CAAC,MAAMA,GAAGD,GAAGvC,GAAGtV,EAAE,UAAU,WAAW,EAAE,KAAK,MAAM,EAAE,CAAC,SAASuY,IAAI,CAAC,QAAQvY,EAAE8X,GAAG9X,GAAGA,EAAEsV,GAAGtV,EAAE,WAAW,CAAC,CAAC,SAASwY,IAAI,CAACV,GAAGD,GAAG,KAAKnX,GAAE,EAAE,CAAC,SAAS+X,GAAGzY,EAAE,CAAQ+X,KAAP,KAAUA,GAAG,CAAC/X,CAAC,EAAE+X,GAAG,KAAK/X,CAAC,CAAC,CAAC,IAAI0Y,GAAG/U,EAAG,wBAChM,SAASgV,GAAG3Y,EAAEK,EAAEW,EAAE,CAAS,GAARhB,EAAEgB,EAAE,IAAchB,IAAP,MAAuB,OAAOA,GAApB,YAAkC,OAAOA,GAAlB,SAAoB,CAAC,GAAGgB,EAAE,OAAO,CAAY,GAAXA,EAAEA,EAAE,OAAUA,EAAE,CAAC,GAAOA,EAAE,MAAN,EAAU,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE,IAAI0B,EAAEC,EAAE,SAAS,CAAC,GAAG,CAACD,EAAE,MAAM,MAAM1B,EAAE,IAAIW,CAAC,CAAC,EAAE,IAAIM,EAAES,EAAEK,EAAE,GAAGpB,EAAE,OAAUK,IAAP,MAAiBA,EAAE,MAAT,MAA2B,OAAOA,EAAE,KAAtB,YAA2BA,EAAE,IAAI,aAAae,EAASf,EAAE,KAAIA,EAAE,SAASL,EAAE,CAAC,IAAIK,EAAEC,EAAE,KAAYN,IAAP,KAAS,OAAOK,EAAEe,CAAC,EAAEf,EAAEe,CAAC,EAAEpB,CAAC,EAAEK,EAAE,WAAWe,EAASf,EAAC,CAAC,GAAc,OAAOL,GAAlB,SAAoB,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC2B,EAAE,OAAO,MAAM,MAAM3B,EAAE,IAAIW,CAAC,CAAC,CAAE,CAAC,OAAOA,CAAC,CAC/c,SAAS4Y,GAAG5Y,EAAEK,EAAE,CAAC,MAAAL,EAAE,OAAO,UAAU,SAAS,KAAKK,CAAC,EAAQ,MAAMhB,EAAE,GAAuBW,IAApB,kBAAsB,qBAAqB,OAAO,KAAKK,CAAC,EAAE,KAAK,IAAI,EAAE,IAAIL,CAAC,CAAC,CAAE,CAAC,SAAS6Y,GAAG7Y,EAAE,CAAC,IAAIK,EAAEL,EAAE,MAAM,OAAOK,EAAEL,EAAE,QAAQ,CAAC,CACrM,SAAS8Y,GAAG9Y,EAAE,CAAC,SAASK,EAAEA,GAAEW,GAAE,CAAC,GAAGhB,EAAE,CAAC,IAAIe,GAAEV,GAAE,UAAiBU,KAAP,MAAUV,GAAE,UAAU,CAACW,EAAC,EAAEX,GAAE,OAAO,IAAIU,GAAE,KAAKC,EAAC,CAAC,CAAC,CAAC,SAASA,EAAEA,GAAED,GAAE,CAAC,GAAG,CAACf,EAAE,OAAO,KAAK,KAAYe,KAAP,MAAUV,EAAEW,GAAED,EAAC,EAAEA,GAAEA,GAAE,QAAQ,OAAO,IAAI,CAAC,SAASA,EAAEf,GAAEK,GAAE,CAAC,IAAIL,GAAE,IAAI,IAAWK,KAAP,MAAiBA,GAAE,MAAT,KAAaL,GAAE,IAAIK,GAAE,IAAIA,EAAC,EAAEL,GAAE,IAAIK,GAAE,MAAMA,EAAC,EAAEA,GAAEA,GAAE,QAAQ,OAAOL,EAAC,CAAC,SAASM,EAAEN,GAAEK,GAAE,CAAC,OAAAL,GAAE+Y,GAAG/Y,GAAEK,EAAC,EAAEL,GAAE,MAAM,EAAEA,GAAE,QAAQ,KAAYA,EAAC,CAAC,SAASoB,EAAEf,GAAEW,GAAED,GAAE,CAAW,OAAVV,GAAE,MAAMU,GAAMf,GAA4Be,GAAEV,GAAE,UAAoBU,KAAP,MAAgBA,GAAEA,GAAE,MAAMA,GAAEC,IAAGX,GAAE,OAAO,EAAEW,IAAGD,KAAEV,GAAE,OAAO,EAASW,MAArGX,GAAE,OAAO,QAAQW,GAAqF,CAAC,SAASG,EAAEd,GAAE,CAAC,OAAAL,GACtfK,GAAE,YAAT,OAAqBA,GAAE,OAAO,GAAUA,EAAC,CAAC,SAASa,EAAElB,GAAEK,GAAEW,GAAED,GAAE,CAAC,OAAUV,KAAP,MAAcA,GAAE,MAAN,GAAiBA,GAAE2Y,GAAGhY,GAAEhB,GAAE,KAAKe,EAAC,EAAEV,GAAE,OAAOL,GAAEK,KAAEA,GAAEC,EAAED,GAAEW,EAAC,EAAEX,GAAE,OAAOL,GAASK,GAAC,CAAC,SAASY,GAAEjB,GAAEK,GAAEW,GAAED,GAAE,CAAC,IAAIK,GAAEJ,GAAE,KAAK,OAAGI,KAAI0C,EAAUzC,GAAErB,GAAEK,GAAEW,GAAE,MAAM,SAASD,GAAEC,GAAE,GAAG,EAAYX,KAAP,OAAWA,GAAE,cAAce,IAAc,OAAOA,IAAlB,UAA4BA,KAAP,MAAUA,GAAE,WAAWmD,IAAIsU,GAAGzX,EAAC,IAAIf,GAAE,OAAaU,GAAET,EAAED,GAAEW,GAAE,KAAK,EAAED,GAAE,IAAI4X,GAAG3Y,GAAEK,GAAEW,EAAC,EAAED,GAAE,OAAOf,GAAEe,KAAEA,GAAEkY,GAAGjY,GAAE,KAAKA,GAAE,IAAIA,GAAE,MAAM,KAAKhB,GAAE,KAAKe,EAAC,EAAEA,GAAE,IAAI4X,GAAG3Y,GAAEK,GAAEW,EAAC,EAAED,GAAE,OAAOf,GAASe,GAAC,CAAC,SAAS5B,GAAEa,GAAEK,GAAEW,GAAED,GAAE,CAAC,OAAUV,KAAP,MAAcA,GAAE,MAAN,GAC3eA,GAAE,UAAU,gBAAgBW,GAAE,eAAeX,GAAE,UAAU,iBAAiBW,GAAE,gBAAsBX,GAAE6Y,GAAGlY,GAAEhB,GAAE,KAAKe,EAAC,EAAEV,GAAE,OAAOL,GAAEK,KAAEA,GAAEC,EAAED,GAAEW,GAAE,UAAU,EAAE,EAAEX,GAAE,OAAOL,GAASK,GAAC,CAAC,SAASgB,GAAErB,GAAEK,GAAEW,GAAED,GAAEK,GAAE,CAAC,OAAUf,KAAP,MAAcA,GAAE,MAAN,GAAiBA,GAAE8Y,GAAGnY,GAAEhB,GAAE,KAAKe,GAAEK,EAAC,EAAEf,GAAE,OAAOL,GAAEK,KAAEA,GAAEC,EAAED,GAAEW,EAAC,EAAEX,GAAE,OAAOL,GAASK,GAAC,CAAC,SAASf,GAAEU,GAAEK,GAAEW,GAAE,CAAC,GAAc,OAAOX,IAAlB,UAA0BA,KAAL,IAAmB,OAAOA,IAAlB,SAAoB,OAAOA,GAAE2Y,GAAG,GAAG3Y,GAAEL,GAAE,KAAKgB,EAAC,EAAEX,GAAE,OAAOL,GAAEK,GAAE,GAAc,OAAOA,IAAlB,UAA4BA,KAAP,KAAS,CAAC,OAAOA,GAAE,SAAQ,CAAE,KAAKuD,EAAG,OAAO5C,GAAEiY,GAAG5Y,GAAE,KAAKA,GAAE,IAAIA,GAAE,MAAM,KAAKL,GAAE,KAAKgB,EAAC,EACpfA,GAAE,IAAI2X,GAAG3Y,GAAE,KAAKK,EAAC,EAAEW,GAAE,OAAOhB,GAAEgB,GAAE,KAAK6C,EAAG,OAAOxD,GAAE6Y,GAAG7Y,GAAEL,GAAE,KAAKgB,EAAC,EAAEX,GAAE,OAAOL,GAAEK,GAAE,KAAKkE,GAAG,IAAIxD,GAAEV,GAAE,MAAM,OAAOf,GAAEU,GAAEe,GAAEV,GAAE,QAAQ,EAAEW,EAAC,CAAC,CAAC,GAAG8E,GAAGzF,EAAC,GAAGqE,GAAGrE,EAAC,EAAE,OAAOA,GAAE8Y,GAAG9Y,GAAEL,GAAE,KAAKgB,GAAE,IAAI,EAAEX,GAAE,OAAOL,GAAEK,GAAEuY,GAAG5Y,GAAEK,EAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAASd,GAAES,GAAEK,GAAEW,GAAED,GAAE,CAAC,IAAIT,GAASD,KAAP,KAASA,GAAE,IAAI,KAAK,GAAc,OAAOW,IAAlB,UAA0BA,KAAL,IAAmB,OAAOA,IAAlB,SAAoB,OAAcV,KAAP,KAAS,KAAKY,EAAElB,GAAEK,GAAE,GAAGW,GAAED,EAAC,EAAE,GAAc,OAAOC,IAAlB,UAA4BA,KAAP,KAAS,CAAC,OAAOA,GAAE,SAAQ,CAAE,KAAK4C,EAAG,OAAO5C,GAAE,MAAMV,GAAEW,GAAEjB,GAAEK,GAAEW,GAAED,EAAC,EAAE,KAAK,KAAK8C,EAAG,OAAO7C,GAAE,MAAMV,GAAEnB,GAAEa,GAAEK,GAAEW,GAAED,EAAC,EAAE,KAAK,KAAKwD,GAAG,OAAOjE,GAAEU,GAAE,MAAMzB,GAAES,GACpfK,GAAEC,GAAEU,GAAE,QAAQ,EAAED,EAAC,CAAC,CAAC,GAAG+E,GAAG9E,EAAC,GAAG0D,GAAG1D,EAAC,EAAE,OAAcV,KAAP,KAAS,KAAKe,GAAErB,GAAEK,GAAEW,GAAED,GAAE,IAAI,EAAE6X,GAAG5Y,GAAEgB,EAAC,CAAC,CAAC,OAAO,IAAI,CAAC,SAASnB,GAAEG,GAAEK,GAAEW,GAAED,GAAET,GAAE,CAAC,GAAc,OAAOS,IAAlB,UAA0BA,KAAL,IAAmB,OAAOA,IAAlB,SAAoB,OAAOf,GAAEA,GAAE,IAAIgB,EAAC,GAAG,KAAKE,EAAEb,GAAEL,GAAE,GAAGe,GAAET,EAAC,EAAE,GAAc,OAAOS,IAAlB,UAA4BA,KAAP,KAAS,CAAC,OAAOA,GAAE,SAAQ,CAAE,KAAK6C,EAAG,OAAO5D,GAAEA,GAAE,IAAWe,GAAE,MAAT,KAAaC,GAAED,GAAE,GAAG,GAAG,KAAKE,GAAEZ,GAAEL,GAAEe,GAAET,EAAC,EAAE,KAAKuD,EAAG,OAAO7D,GAAEA,GAAE,IAAWe,GAAE,MAAT,KAAaC,GAAED,GAAE,GAAG,GAAG,KAAK5B,GAAEkB,GAAEL,GAAEe,GAAET,EAAC,EAAE,KAAKiE,GAAG,IAAInD,GAAEL,GAAE,MAAM,OAAOlB,GAAEG,GAAEK,GAAEW,GAAEI,GAAEL,GAAE,QAAQ,EAAET,EAAC,CAAC,CAAC,GAAGwF,GAAG/E,EAAC,GAAG2D,GAAG3D,EAAC,EAAE,OAAOf,GAAEA,GAAE,IAAIgB,EAAC,GAAG,KAAKK,GAAEhB,GAAEL,GAAEe,GAAET,GAAE,IAAI,EAAEsY,GAAGvY,GAAEU,EAAC,CAAC,CAAC,OAAO,IAAI,CAC9f,SAAS3B,GAAEkB,GAAEa,GAAED,GAAED,GAAE,CAAC,QAAQ9B,GAAE,KAAKkC,GAAE,KAAK5B,GAAE0B,GAAExB,GAAEwB,GAAE,EAAEvB,GAAE,KAAYH,KAAP,MAAUE,GAAEuB,GAAE,OAAOvB,KAAI,CAACF,GAAE,MAAME,IAAGC,GAAEH,GAAEA,GAAE,MAAMG,GAAEH,GAAE,QAAQ,IAAIL,GAAEG,GAAEe,GAAEb,GAAEyB,GAAEvB,EAAC,EAAEsB,EAAC,EAAE,GAAU7B,KAAP,KAAS,CAAQK,KAAP,OAAWA,GAAEG,IAAG,KAAK,CAACI,GAAGP,IAAUL,GAAE,YAAT,MAAoBiB,EAAEC,GAAEb,EAAC,EAAE0B,GAAEC,EAAEhC,GAAE+B,GAAExB,EAAC,EAAS0B,KAAP,KAASlC,GAAEC,GAAEiC,GAAE,QAAQjC,GAAEiC,GAAEjC,GAAEK,GAAEG,EAAC,CAAC,GAAGD,KAAIuB,GAAE,OAAO,OAAOF,EAAEV,GAAEb,EAAC,EAAEiB,IAAG+W,GAAGnX,GAAEX,EAAC,EAAER,GAAE,GAAUM,KAAP,KAAS,CAAC,KAAKE,GAAEuB,GAAE,OAAOvB,KAAIF,GAAEH,GAAEgB,GAAEY,GAAEvB,EAAC,EAAEsB,EAAC,EAASxB,KAAP,OAAW0B,GAAEC,EAAE3B,GAAE0B,GAAExB,EAAC,EAAS0B,KAAP,KAASlC,GAAEM,GAAE4B,GAAE,QAAQ5B,GAAE4B,GAAE5B,IAAG,OAAAiB,IAAG+W,GAAGnX,GAAEX,EAAC,EAASR,EAAC,CAAC,IAAIM,GAAEsB,EAAET,GAAEb,EAAC,EAAEE,GAAEuB,GAAE,OAAOvB,KAAIC,GAAEC,GAAEJ,GAAEa,GAAEX,GAAEuB,GAAEvB,EAAC,EAAEsB,EAAC,EAASrB,KAAP,OAAWI,GAAUJ,GAAE,YAAT,MAAoBH,GAAE,OAChfG,GAAE,MADqf,KACjfD,GAAEC,GAAE,GAAG,EAAEuB,GAAEC,EAAExB,GAAEuB,GAAExB,EAAC,EAAS0B,KAAP,KAASlC,GAAES,GAAEyB,GAAE,QAAQzB,GAAEyB,GAAEzB,IAAG,OAAAI,GAAGP,GAAE,QAAQ,SAASO,GAAE,CAAC,OAAOK,EAAEC,GAAEN,EAAC,CAAC,CAAC,EAAEU,IAAG+W,GAAGnX,GAAEX,EAAC,EAASR,EAAC,CAAC,SAASK,GAAEc,GAAEa,GAAED,GAAED,GAAE,CAAC,IAAI9B,GAAEuF,GAAGxD,EAAC,EAAE,GAAgB,OAAO/B,IAApB,WAAsB,MAAM,MAAME,EAAE,GAAG,CAAC,EAAc,GAAZ6B,GAAE/B,GAAE,KAAK+B,EAAC,EAAWA,IAAN,KAAQ,MAAM,MAAM7B,EAAE,GAAG,CAAC,EAAE,QAAQI,GAAEN,GAAE,KAAKkC,GAAEF,GAAExB,GAAEwB,GAAE,EAAEvB,GAAE,KAAKR,GAAE8B,GAAE,KAAI,EAAUG,KAAP,MAAU,CAACjC,GAAE,KAAKO,KAAIP,GAAE8B,GAAE,KAAI,EAAG,CAACG,GAAE,MAAM1B,IAAGC,GAAEyB,GAAEA,GAAE,MAAMzB,GAAEyB,GAAE,QAAQ,IAAI7B,GAAED,GAAEe,GAAEe,GAAEjC,GAAE,MAAM6B,EAAC,EAAE,GAAUzB,KAAP,KAAS,CAAQ6B,KAAP,OAAWA,GAAEzB,IAAG,KAAK,CAACI,GAAGqB,IAAU7B,GAAE,YAAT,MAAoBa,EAAEC,GAAEe,EAAC,EAAEF,GAAEC,EAAE5B,GAAE2B,GAAExB,EAAC,EAASF,KAAP,KAASN,GAAEK,GAAEC,GAAE,QAAQD,GAAEC,GAAED,GAAE6B,GAAEzB,EAAC,CAAC,GAAGR,GAAE,KAAK,OAAO4B,EAAEV,GACzfe,EAAC,EAAEX,IAAG+W,GAAGnX,GAAEX,EAAC,EAAER,GAAE,GAAUkC,KAAP,KAAS,CAAC,KAAK,CAACjC,GAAE,KAAKO,KAAIP,GAAE8B,GAAE,KAAI,EAAG9B,GAAEE,GAAEgB,GAAElB,GAAE,MAAM6B,EAAC,EAAS7B,KAAP,OAAW+B,GAAEC,EAAEhC,GAAE+B,GAAExB,EAAC,EAASF,KAAP,KAASN,GAAEC,GAAEK,GAAE,QAAQL,GAAEK,GAAEL,IAAG,OAAAsB,IAAG+W,GAAGnX,GAAEX,EAAC,EAASR,EAAC,CAAC,IAAIkC,GAAEN,EAAET,GAAEe,EAAC,EAAE,CAACjC,GAAE,KAAKO,KAAIP,GAAE8B,GAAE,KAAI,EAAG9B,GAAES,GAAEwB,GAAEf,GAAEX,GAAEP,GAAE,MAAM6B,EAAC,EAAS7B,KAAP,OAAWY,GAAUZ,GAAE,YAAT,MAAoBiC,GAAE,OAAcjC,GAAE,MAAT,KAAaO,GAAEP,GAAE,GAAG,EAAE+B,GAAEC,EAAEhC,GAAE+B,GAAExB,EAAC,EAASF,KAAP,KAASN,GAAEC,GAAEK,GAAE,QAAQL,GAAEK,GAAEL,IAAG,OAAAY,GAAGqB,GAAE,QAAQ,SAASrB,GAAE,CAAC,OAAOK,EAAEC,GAAEN,EAAC,CAAC,CAAC,EAAEU,IAAG+W,GAAGnX,GAAEX,EAAC,EAASR,EAAC,CAAC,SAASwB,GAAEX,GAAEe,GAAEK,GAAEF,GAAE,CAAgF,GAApE,OAAOE,IAAlB,UAA4BA,KAAP,MAAUA,GAAE,OAAO0C,GAAW1C,GAAE,MAAT,OAAeA,GAAEA,GAAE,MAAM,UAAwB,OAAOA,IAAlB,UAA4BA,KAAP,KAAS,CAAC,OAAOA,GAAE,SAAQ,CAAE,KAAKwC,EAAG5D,EAAE,CAAC,QAAQiB,GAC7hBG,GAAE,IAAIjC,GAAE4B,GAAS5B,KAAP,MAAU,CAAC,GAAGA,GAAE,MAAM8B,GAAE,CAAU,GAATA,GAAEG,GAAE,KAAQH,KAAI6C,GAAI,GAAO3E,GAAE,MAAN,EAAU,CAAC6B,EAAEhB,GAAEb,GAAE,OAAO,EAAE4B,GAAET,EAAEnB,GAAEiC,GAAE,MAAM,QAAQ,EAAEL,GAAE,OAAOf,GAAEA,GAAEe,GAAE,MAAMf,CAAC,UAAUb,GAAE,cAAc8B,IAAc,OAAOA,IAAlB,UAA4BA,KAAP,MAAUA,GAAE,WAAWsD,IAAIsU,GAAG5X,EAAC,IAAI9B,GAAE,KAAK,CAAC6B,EAAEhB,GAAEb,GAAE,OAAO,EAAE4B,GAAET,EAAEnB,GAAEiC,GAAE,KAAK,EAAEL,GAAE,IAAI4X,GAAG3Y,GAAEb,GAAEiC,EAAC,EAAEL,GAAE,OAAOf,GAAEA,GAAEe,GAAE,MAAMf,CAAC,CAACgB,EAAEhB,GAAEb,EAAC,EAAE,KAAK,MAAMkB,EAAEL,GAAEb,EAAC,EAAEA,GAAEA,GAAE,OAAO,CAACiC,GAAE,OAAO0C,GAAI/C,GAAEoY,GAAG/X,GAAE,MAAM,SAASpB,GAAE,KAAKkB,GAAEE,GAAE,GAAG,EAAEL,GAAE,OAAOf,GAAEA,GAAEe,KAAIG,GAAE+X,GAAG7X,GAAE,KAAKA,GAAE,IAAIA,GAAE,MAAM,KAAKpB,GAAE,KAAKkB,EAAC,EAAEA,GAAE,IAAIyX,GAAG3Y,GAAEe,GAAEK,EAAC,EAAEF,GAAE,OAAOlB,GAAEA,GAAEkB,GAAE,CAAC,OAAOC,EAAEnB,EAAC,EAAE,KAAK6D,EAAG7D,EAAE,CAAC,IAAIb,GAAEiC,GAAE,IACrfL,KADyf,MACtf,CAAC,GAAGA,GAAE,MAAM5B,GAAE,GAAO4B,GAAE,MAAN,GAAWA,GAAE,UAAU,gBAAgBK,GAAE,eAAeL,GAAE,UAAU,iBAAiBK,GAAE,eAAe,CAACJ,EAAEhB,GAAEe,GAAE,OAAO,EAAEA,GAAET,EAAES,GAAEK,GAAE,UAAU,EAAE,EAAEL,GAAE,OAAOf,GAAEA,GAAEe,GAAE,MAAMf,CAAC,KAAK,CAACgB,EAAEhB,GAAEe,EAAC,EAAE,KAAK,MAAMV,EAAEL,GAAEe,EAAC,EAAEA,GAAEA,GAAE,OAAO,CAACA,GAAEmY,GAAG9X,GAAEpB,GAAE,KAAKkB,EAAC,EAAEH,GAAE,OAAOf,GAAEA,GAAEe,EAAC,CAAC,OAAOI,EAAEnB,EAAC,EAAE,KAAKuE,GAAG,OAAOpF,GAAEiC,GAAE,MAAMT,GAAEX,GAAEe,GAAE5B,GAAEiC,GAAE,QAAQ,EAAEF,EAAC,CAAC,CAAC,GAAG4E,GAAG1E,EAAC,EAAE,OAAOhC,GAAEY,GAAEe,GAAEK,GAAEF,EAAC,EAAE,GAAGwD,GAAGtD,EAAC,EAAE,OAAO5B,GAAEQ,GAAEe,GAAEK,GAAEF,EAAC,EAAE0X,GAAG5Y,GAAEoB,EAAC,CAAC,CAAC,OAAiB,OAAOA,IAAlB,UAA0BA,KAAL,IAAmB,OAAOA,IAAlB,UAAqBA,GAAE,GAAGA,GAASL,KAAP,MAAcA,GAAE,MAAN,GAAWC,EAAEhB,GAAEe,GAAE,OAAO,EAAEA,GAAET,EAAES,GAAEK,EAAC,EAAEL,GAAE,OAAOf,GAAEA,GAAEe,KACnfC,EAAEhB,GAAEe,EAAC,EAAEA,GAAEiY,GAAG5X,GAAEpB,GAAE,KAAKkB,EAAC,EAAEH,GAAE,OAAOf,GAAEA,GAAEe,IAAGI,EAAEnB,EAAC,GAAGgB,EAAEhB,GAAEe,EAAC,CAAC,CAAC,OAAOJ,EAAC,CAAC,IAAIyY,GAAGN,GAAG,EAAE,EAAEO,GAAGP,GAAG,EAAE,EAAEQ,GAAGvD,GAAG,IAAI,EAAEwD,GAAG,KAAKC,GAAG,KAAKC,GAAG,KAAK,SAASC,IAAI,CAACD,GAAGD,GAAGD,GAAG,IAAI,CAAC,SAASI,GAAG3Z,EAAE,CAAC,IAAIK,EAAEiZ,GAAG,QAAQlZ,GAAEkZ,EAAE,EAAEtZ,EAAE,cAAcK,CAAC,CAAC,SAASuZ,GAAG5Z,EAAEK,EAAEW,EAAE,CAAC,KAAYhB,IAAP,MAAU,CAAC,IAAIe,EAAEf,EAAE,UAA+H,IAApHA,EAAE,WAAWK,KAAKA,GAAGL,EAAE,YAAYK,EAASU,IAAP,OAAWA,EAAE,YAAYV,IAAWU,IAAP,OAAWA,EAAE,WAAWV,KAAKA,IAAIU,EAAE,YAAYV,GAAML,IAAIgB,EAAE,MAAMhB,EAAEA,EAAE,MAAM,CAAC,CACnZ,SAAS6Z,GAAG7Z,EAAEK,EAAE,CAACkZ,GAAGvZ,EAAEyZ,GAAGD,GAAG,KAAKxZ,EAAEA,EAAE,aAAoBA,IAAP,MAAiBA,EAAE,eAAT,QAA6BA,EAAE,MAAMK,KAAb,IAAkByZ,GAAG,IAAI9Z,EAAE,aAAa,KAAK,CAAC,SAAS+Z,GAAG/Z,EAAE,CAAC,IAAIK,EAAEL,EAAE,cAAc,GAAGyZ,KAAKzZ,EAAE,GAAGA,EAAE,CAAC,QAAQA,EAAE,cAAcK,EAAE,KAAK,IAAI,EAASmZ,KAAP,KAAU,CAAC,GAAUD,KAAP,KAAU,MAAM,MAAMla,EAAE,GAAG,CAAC,EAAEma,GAAGxZ,EAAEuZ,GAAG,aAAa,CAAC,MAAM,EAAE,aAAavZ,CAAC,CAAC,MAAMwZ,GAAGA,GAAG,KAAKxZ,EAAE,OAAOK,CAAC,CAAC,IAAI2Z,GAAG,KAAK,SAASC,GAAGja,EAAE,CAAQga,KAAP,KAAUA,GAAG,CAACha,CAAC,EAAEga,GAAG,KAAKha,CAAC,CAAC,CACvY,SAASka,GAAGla,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAED,EAAE,YAAY,OAAOC,IAAP,MAAUU,EAAE,KAAKA,EAAEiZ,GAAG5Z,CAAC,IAAIW,EAAE,KAAKV,EAAE,KAAKA,EAAE,KAAKU,GAAGX,EAAE,YAAYW,EAASmZ,GAAGna,EAAEe,CAAC,CAAC,CAAC,SAASoZ,GAAGna,EAAEK,EAAE,CAACL,EAAE,OAAOK,EAAE,IAAIW,EAAEhB,EAAE,UAAqC,IAApBgB,IAAP,OAAWA,EAAE,OAAOX,GAAGW,EAAEhB,EAAMA,EAAEA,EAAE,OAAcA,IAAP,MAAUA,EAAE,YAAYK,EAAEW,EAAEhB,EAAE,UAAiBgB,IAAP,OAAWA,EAAE,YAAYX,GAAGW,EAAEhB,EAAEA,EAAEA,EAAE,OAAO,OAAWgB,EAAE,MAAN,EAAUA,EAAE,UAAU,IAAI,CAAC,IAAIoZ,GAAG,GAAG,SAASC,GAAGra,EAAE,CAACA,EAAE,YAAY,CAAC,UAAUA,EAAE,cAAc,gBAAgB,KAAK,eAAe,KAAK,OAAO,CAAC,QAAQ,KAAK,YAAY,KAAK,MAAM,CAAC,EAAE,QAAQ,IAAI,CAAC,CAC/e,SAASsa,GAAGta,EAAEK,EAAE,CAACL,EAAEA,EAAE,YAAYK,EAAE,cAAcL,IAAIK,EAAE,YAAY,CAAC,UAAUL,EAAE,UAAU,gBAAgBA,EAAE,gBAAgB,eAAeA,EAAE,eAAe,OAAOA,EAAE,OAAO,QAAQA,EAAE,OAAO,EAAE,CAAC,SAASua,GAAGva,EAAEK,EAAE,CAAC,MAAM,CAAC,UAAUL,EAAE,KAAKK,EAAE,IAAI,EAAE,QAAQ,KAAK,SAAS,KAAK,KAAK,IAAI,CAAC,CACtR,SAASma,GAAGxa,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,YAAY,GAAUe,IAAP,KAAS,OAAO,KAAgB,GAAXA,EAAEA,EAAE,QAAeH,GAAE,KAAP,EAAU,CAAC,IAAIN,EAAES,EAAE,QAAQ,OAAOT,IAAP,KAASD,EAAE,KAAKA,GAAGA,EAAE,KAAKC,EAAE,KAAKA,EAAE,KAAKD,GAAGU,EAAE,QAAQV,EAAS8Z,GAAGna,EAAEgB,CAAC,CAAC,CAAC,OAAAV,EAAES,EAAE,YAAmBT,IAAP,MAAUD,EAAE,KAAKA,EAAE4Z,GAAGlZ,CAAC,IAAIV,EAAE,KAAKC,EAAE,KAAKA,EAAE,KAAKD,GAAGU,EAAE,YAAYV,EAAS8Z,GAAGna,EAAEgB,CAAC,CAAC,CAAC,SAASyZ,GAAGza,EAAEK,EAAEW,EAAE,CAAiB,GAAhBX,EAAEA,EAAE,YAAsBA,IAAP,OAAWA,EAAEA,EAAE,QAAYW,EAAE,WAAP,GAAiB,CAAC,IAAID,EAAEV,EAAE,MAAMU,GAAGf,EAAE,aAAagB,GAAGD,EAAEV,EAAE,MAAMW,EAAE2J,GAAG3K,EAAEgB,CAAC,CAAC,CAAC,CACrZ,SAAS0Z,GAAG1a,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,YAAYe,EAAEf,EAAE,UAAU,GAAUe,IAAP,OAAWA,EAAEA,EAAE,YAAYC,IAAID,GAAG,CAAC,IAAIT,EAAE,KAAKc,EAAE,KAAyB,GAApBJ,EAAEA,EAAE,gBAA0BA,IAAP,KAAS,CAAC,EAAE,CAAC,IAAIG,EAAE,CAAC,UAAUH,EAAE,UAAU,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,QAAQA,EAAE,QAAQ,SAASA,EAAE,SAAS,KAAK,IAAI,EAASI,IAAP,KAASd,EAAEc,EAAED,EAAEC,EAAEA,EAAE,KAAKD,EAAEH,EAAEA,EAAE,IAAI,OAAcA,IAAP,MAAiBI,IAAP,KAASd,EAAEc,EAAEf,EAAEe,EAAEA,EAAE,KAAKf,CAAC,MAAMC,EAAEc,EAAEf,EAAEW,EAAE,CAAC,UAAUD,EAAE,UAAU,gBAAgBT,EAAE,eAAec,EAAE,OAAOL,EAAE,OAAO,QAAQA,EAAE,OAAO,EAAEf,EAAE,YAAYgB,EAAE,MAAM,CAAChB,EAAEgB,EAAE,eAAsBhB,IAAP,KAASgB,EAAE,gBAAgBX,EAAEL,EAAE,KACnfK,EAAEW,EAAE,eAAeX,CAAC,CACpB,SAASsa,GAAG3a,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEN,EAAE,YAAYoa,GAAG,GAAG,IAAIhZ,EAAEd,EAAE,gBAAgBa,EAAEb,EAAE,eAAeY,EAAEZ,EAAE,OAAO,QAAQ,GAAUY,IAAP,KAAS,CAACZ,EAAE,OAAO,QAAQ,KAAK,IAAIW,GAAEC,EAAE/B,GAAE8B,GAAE,KAAKA,GAAE,KAAK,KAAYE,IAAP,KAASC,EAAEjC,GAAEgC,EAAE,KAAKhC,GAAEgC,EAAEF,GAAE,IAAII,GAAErB,EAAE,UAAiBqB,KAAP,OAAWA,GAAEA,GAAE,YAAYH,EAAEG,GAAE,eAAeH,IAAIC,IAAWD,IAAP,KAASG,GAAE,gBAAgBlC,GAAE+B,EAAE,KAAK/B,GAAEkC,GAAE,eAAeJ,IAAG,CAAC,GAAUG,IAAP,KAAS,CAAC,IAAI9B,GAAEgB,EAAE,UAAUa,EAAE,EAAEE,GAAElC,GAAE8B,GAAE,KAAKC,EAAEE,EAAE,EAAE,CAAC,IAAI7B,GAAE2B,EAAE,KAAKrB,GAAEqB,EAAE,UAAU,IAAIH,EAAExB,MAAKA,GAAE,CAAQ8B,KAAP,OAAWA,GAAEA,GAAE,KAAK,CAAC,UAAUxB,GAAE,KAAK,EAAE,IAAIqB,EAAE,IAAI,QAAQA,EAAE,QAAQ,SAASA,EAAE,SACvf,KAAK,IAAI,GAAGlB,EAAE,CAAC,IAAIZ,GAAEY,EAAER,GAAE0B,EAAU,OAAR3B,GAAEc,EAAER,GAAEmB,EAASxB,GAAE,IAAG,CAAE,IAAK,GAAc,GAAZJ,GAAEI,GAAE,QAAwB,OAAOJ,IAApB,WAAsB,CAACE,GAAEF,GAAE,KAAKS,GAAEP,GAAEC,EAAC,EAAE,MAAMS,CAAC,CAACV,GAAEF,GAAE,MAAMY,EAAE,IAAK,GAAEZ,GAAE,MAAMA,GAAE,MAAM,OAAO,IAAI,IAAK,GAAsD,GAApDA,GAAEI,GAAE,QAAQD,GAAe,OAAOH,IAApB,WAAsBA,GAAE,KAAKS,GAAEP,GAAEC,EAAC,EAAEH,GAAYG,IAAP,KAAqB,MAAMS,EAAEV,GAAES,EAAE,GAAGT,GAAEC,EAAC,EAAE,MAAMS,EAAE,IAAK,GAAEoa,GAAG,EAAE,CAAC,CAAQlZ,EAAE,WAAT,MAAuBA,EAAE,OAAN,IAAalB,EAAE,OAAO,GAAGT,GAAEe,EAAE,QAAef,KAAP,KAASe,EAAE,QAAQ,CAACY,CAAC,EAAE3B,GAAE,KAAK2B,CAAC,EAAE,MAAMrB,GAAE,CAAC,UAAUA,GAAE,KAAKN,GAAE,IAAI2B,EAAE,IAAI,QAAQA,EAAE,QAAQ,SAASA,EAAE,SAAS,KAAK,IAAI,EAASG,KAAP,MAAUlC,GAAEkC,GAAExB,GAAEoB,GAAE3B,IAAG+B,GAAEA,GAAE,KAAKxB,GAAEsB,GAAG5B,GAC3e,GAAT2B,EAAEA,EAAE,KAAeA,IAAP,KAAS,IAAGA,EAAEZ,EAAE,OAAO,QAAeY,IAAP,KAAS,MAAW3B,GAAE2B,EAAEA,EAAE3B,GAAE,KAAKA,GAAE,KAAK,KAAKe,EAAE,eAAef,GAAEe,EAAE,OAAO,QAAQ,KAAI,OAAO,IAA+F,GAArFe,KAAP,OAAWJ,GAAE3B,IAAGgB,EAAE,UAAUW,GAAEX,EAAE,gBAAgBnB,GAAEmB,EAAE,eAAee,GAAEhB,EAAEC,EAAE,OAAO,YAAsBD,IAAP,KAAS,CAACC,EAAED,EAAE,GAAGc,GAAGb,EAAE,KAAKA,EAAEA,EAAE,WAAWA,IAAID,EAAE,MAAae,IAAP,OAAWd,EAAE,OAAO,MAAM,GAAGsa,IAAIzZ,EAAEnB,EAAE,MAAMmB,EAAEnB,EAAE,cAAcV,EAAC,CAAC,CAC9V,SAASub,GAAG7a,EAAEK,EAAEW,EAAE,CAA4B,GAA3BhB,EAAEK,EAAE,QAAQA,EAAE,QAAQ,KAAeL,IAAP,KAAS,IAAIK,EAAE,EAAEA,EAAEL,EAAE,OAAOK,IAAI,CAAC,IAAIU,EAAEf,EAAEK,CAAC,EAAEC,EAAES,EAAE,SAAS,GAAUT,IAAP,KAAS,CAAqB,GAApBS,EAAE,SAAS,KAAKA,EAAEC,EAAkB,OAAOV,GAApB,WAAsB,MAAM,MAAMjB,EAAE,IAAIiB,CAAC,CAAC,EAAEA,EAAE,KAAKS,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI+Z,GAAG,GAAGC,GAAGhF,GAAG+E,EAAE,EAAEE,GAAGjF,GAAG+E,EAAE,EAAEG,GAAGlF,GAAG+E,EAAE,EAAE,SAASI,GAAGlb,EAAE,CAAC,GAAGA,IAAI8a,GAAG,MAAM,MAAMzb,EAAE,GAAG,CAAC,EAAE,OAAOW,CAAC,CACnS,SAASmb,GAAGnb,EAAEK,EAAE,CAAuC,OAAtCG,GAAEya,GAAG5a,CAAC,EAAEG,GAAEwa,GAAGhb,CAAC,EAAEQ,GAAEua,GAAGD,EAAE,EAAE9a,EAAEK,EAAE,SAAgBL,EAAC,CAAE,IAAK,GAAE,IAAK,IAAGK,GAAGA,EAAEA,EAAE,iBAAiBA,EAAE,aAAagG,GAAG,KAAK,EAAE,EAAE,MAAM,QAAQrG,EAAMA,IAAJ,EAAMK,EAAE,WAAWA,EAAEA,EAAEL,EAAE,cAAc,KAAKA,EAAEA,EAAE,QAAQK,EAAEgG,GAAGhG,EAAEL,CAAC,CAAC,CAACI,GAAE2a,EAAE,EAAEva,GAAEua,GAAG1a,CAAC,CAAC,CAAC,SAAS+a,IAAI,CAAChb,GAAE2a,EAAE,EAAE3a,GAAE4a,EAAE,EAAE5a,GAAE6a,EAAE,CAAC,CAAC,SAASI,GAAGrb,EAAE,CAACkb,GAAGD,GAAG,OAAO,EAAE,IAAI5a,EAAE6a,GAAGH,GAAG,OAAO,EAAM/Z,EAAEqF,GAAGhG,EAAEL,EAAE,IAAI,EAAEK,IAAIW,IAAIR,GAAEwa,GAAGhb,CAAC,EAAEQ,GAAEua,GAAG/Z,CAAC,EAAE,CAAC,SAASsa,GAAGtb,EAAE,CAACgb,GAAG,UAAUhb,IAAII,GAAE2a,EAAE,EAAE3a,GAAE4a,EAAE,EAAE,CAAC,IAAIna,GAAEkV,GAAG,CAAC,EACzZ,SAASwF,GAAGvb,EAAE,CAAC,QAAQK,EAAEL,EAASK,IAAP,MAAU,CAAC,GAAQA,EAAE,MAAP,GAAW,CAAC,IAAIW,EAAEX,EAAE,cAAc,GAAUW,IAAP,OAAWA,EAAEA,EAAE,WAAkBA,IAAP,MAAiBA,EAAE,OAAT,MAAsBA,EAAE,OAAT,MAAe,OAAOX,CAAC,SAAcA,EAAE,MAAP,IAAqBA,EAAE,cAAc,cAAzB,QAAsC,IAAQA,EAAE,MAAM,OAAb,EAAkB,OAAOA,UAAiBA,EAAE,QAAT,KAAe,CAACA,EAAE,MAAM,OAAOA,EAAEA,EAAEA,EAAE,MAAM,QAAQ,CAAC,GAAGA,IAAIL,EAAE,MAAM,KAAYK,EAAE,UAAT,MAAkB,CAAC,GAAUA,EAAE,SAAT,MAAiBA,EAAE,SAASL,EAAE,OAAO,KAAKK,EAAEA,EAAE,MAAM,CAACA,EAAE,QAAQ,OAAOA,EAAE,OAAOA,EAAEA,EAAE,OAAO,CAAC,OAAO,IAAI,CAAC,IAAImb,GAAG,GACrc,SAASC,IAAI,CAAC,QAAQzb,EAAE,EAAEA,EAAEwb,GAAG,OAAOxb,IAAIwb,GAAGxb,CAAC,EAAE,8BAA8B,KAAKwb,GAAG,OAAO,CAAC,CAAC,IAAIE,GAAG/X,EAAG,uBAAuBgY,GAAGhY,EAAG,wBAAwBiY,GAAG,EAAE9a,GAAE,KAAKQ,GAAE,KAAKC,GAAE,KAAKsa,GAAG,GAAGC,GAAG,GAAGC,GAAG,EAAEC,GAAG,EAAE,SAASva,IAAG,CAAC,MAAM,MAAMpC,EAAE,GAAG,CAAC,CAAE,CAAC,SAAS4c,GAAGjc,EAAEK,EAAE,CAAC,GAAUA,IAAP,KAAS,MAAM,GAAG,QAAQW,EAAE,EAAEA,EAAEX,EAAE,QAAQW,EAAEhB,EAAE,OAAOgB,IAAI,GAAG,CAAC0Q,GAAG1R,EAAEgB,CAAC,EAAEX,EAAEW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAChW,SAASkb,GAAGlc,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAE,CAAuH,GAAtHwa,GAAGxa,EAAEN,GAAET,EAAEA,EAAE,cAAc,KAAKA,EAAE,YAAY,KAAKA,EAAE,MAAM,EAAEqb,GAAG,QAAe1b,IAAP,MAAiBA,EAAE,gBAAT,KAAuBmc,GAAGC,GAAGpc,EAAEgB,EAAED,EAAET,CAAC,EAAKwb,GAAG,CAAC1a,EAAE,EAAE,EAAE,CAAY,GAAX0a,GAAG,GAAGC,GAAG,EAAK,IAAI3a,EAAE,MAAM,MAAM/B,EAAE,GAAG,CAAC,EAAE+B,GAAG,EAAEG,GAAED,GAAE,KAAKjB,EAAE,YAAY,KAAKqb,GAAG,QAAQW,GAAGrc,EAAEgB,EAAED,EAAET,CAAC,CAAC,OAAOwb,GAAG,CAA+D,GAA9DJ,GAAG,QAAQY,GAAGjc,EAASiB,KAAP,MAAiBA,GAAE,OAAT,KAAcsa,GAAG,EAAEra,GAAED,GAAER,GAAE,KAAK+a,GAAG,GAAMxb,EAAE,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAOW,CAAC,CAAC,SAASuc,IAAI,CAAC,IAAIvc,EAAM+b,KAAJ,EAAO,OAAAA,GAAG,EAAS/b,CAAC,CAC/Y,SAASwc,IAAI,CAAC,IAAIxc,EAAE,CAAC,cAAc,KAAK,UAAU,KAAK,UAAU,KAAK,MAAM,KAAK,KAAK,IAAI,EAAE,OAAOuB,KAAP,KAAST,GAAE,cAAcS,GAAEvB,EAAEuB,GAAEA,GAAE,KAAKvB,EAASuB,EAAC,CAAC,SAASkb,IAAI,CAAC,GAAUnb,KAAP,KAAS,CAAC,IAAItB,EAAEc,GAAE,UAAUd,EAASA,IAAP,KAASA,EAAE,cAAc,IAAI,MAAMA,EAAEsB,GAAE,KAAK,IAAIjB,EAASkB,KAAP,KAAST,GAAE,cAAcS,GAAE,KAAK,GAAUlB,IAAP,KAASkB,GAAElB,EAAEiB,GAAEtB,MAAM,CAAC,GAAUA,IAAP,KAAS,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEiC,GAAEtB,EAAEA,EAAE,CAAC,cAAcsB,GAAE,cAAc,UAAUA,GAAE,UAAU,UAAUA,GAAE,UAAU,MAAMA,GAAE,MAAM,KAAK,IAAI,EAASC,KAAP,KAAST,GAAE,cAAcS,GAAEvB,EAAEuB,GAAEA,GAAE,KAAKvB,CAAC,CAAC,OAAOuB,EAAC,CACje,SAASmb,GAAG1c,EAAEK,EAAE,CAAC,OAAmB,OAAOA,GAApB,WAAsBA,EAAEL,CAAC,EAAEK,CAAC,CACnD,SAASsc,GAAG3c,EAAE,CAAC,IAAIK,EAAEoc,GAAE,EAAGzb,EAAEX,EAAE,MAAM,GAAUW,IAAP,KAAS,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE2B,EAAE,oBAAoBhB,EAAE,IAAIe,EAAEO,GAAEhB,EAAES,EAAE,UAAUK,EAAEJ,EAAE,QAAQ,GAAUI,IAAP,KAAS,CAAC,GAAUd,IAAP,KAAS,CAAC,IAAIa,EAAEb,EAAE,KAAKA,EAAE,KAAKc,EAAE,KAAKA,EAAE,KAAKD,CAAC,CAACJ,EAAE,UAAUT,EAAEc,EAAEJ,EAAE,QAAQ,IAAI,CAAC,GAAUV,IAAP,KAAS,CAACc,EAAEd,EAAE,KAAKS,EAAEA,EAAE,UAAU,IAAIG,EAAEC,EAAE,KAAKF,GAAE,KAAK9B,GAAEiC,EAAE,EAAE,CAAC,IAAIC,GAAElC,GAAE,KAAK,IAAIyc,GAAGva,MAAKA,GAASJ,KAAP,OAAWA,GAAEA,GAAE,KAAK,CAAC,KAAK,EAAE,OAAO9B,GAAE,OAAO,cAAcA,GAAE,cAAc,WAAWA,GAAE,WAAW,KAAK,IAAI,GAAG4B,EAAE5B,GAAE,cAAcA,GAAE,WAAWa,EAAEe,EAAE5B,GAAE,MAAM,MAAM,CAAC,IAAIG,GAAE,CAAC,KAAK+B,GAAE,OAAOlC,GAAE,OAAO,cAAcA,GAAE,cACngB,WAAWA,GAAE,WAAW,KAAK,IAAI,EAAS8B,KAAP,MAAUC,EAAED,GAAE3B,GAAE6B,EAAEJ,GAAGE,GAAEA,GAAE,KAAK3B,GAAEwB,GAAE,OAAOO,GAAEuZ,IAAIvZ,EAAC,CAAClC,GAAEA,GAAE,IAAI,OAAcA,KAAP,MAAUA,KAAIiC,GAAUH,KAAP,KAASE,EAAEJ,EAAEE,GAAE,KAAKC,EAAEwQ,GAAG3Q,EAAEV,EAAE,aAAa,IAAIyZ,GAAG,IAAIzZ,EAAE,cAAcU,EAAEV,EAAE,UAAUc,EAAEd,EAAE,UAAUY,GAAED,EAAE,kBAAkBD,CAAC,CAAiB,GAAhBf,EAAEgB,EAAE,YAAsBhB,IAAP,KAAS,CAACM,EAAEN,EAAE,GAAGoB,EAAEd,EAAE,KAAKQ,GAAE,OAAOM,EAAEwZ,IAAIxZ,EAAEd,EAAEA,EAAE,WAAWA,IAAIN,EAAE,MAAaM,IAAP,OAAWU,EAAE,MAAM,GAAG,MAAM,CAACX,EAAE,cAAcW,EAAE,QAAQ,CAAC,CAC9X,SAAS4b,GAAG5c,EAAE,CAAC,IAAIK,EAAEoc,GAAE,EAAGzb,EAAEX,EAAE,MAAM,GAAUW,IAAP,KAAS,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE2B,EAAE,oBAAoBhB,EAAE,IAAIe,EAAEC,EAAE,SAASV,EAAEU,EAAE,QAAQI,EAAEf,EAAE,cAAc,GAAUC,IAAP,KAAS,CAACU,EAAE,QAAQ,KAAK,IAAIG,EAAEb,EAAEA,EAAE,KAAK,GAAGc,EAAEpB,EAAEoB,EAAED,EAAE,MAAM,EAAEA,EAAEA,EAAE,WAAWA,IAAIb,GAAGoR,GAAGtQ,EAAEf,EAAE,aAAa,IAAIyZ,GAAG,IAAIzZ,EAAE,cAAce,EAASf,EAAE,YAAT,OAAqBA,EAAE,UAAUe,GAAGJ,EAAE,kBAAkBI,CAAC,CAAC,MAAM,CAACA,EAAEL,CAAC,CAAC,CAAC,SAAS8b,IAAI,EACnW,SAASC,GAAG9c,EAAEK,EAAE,CAAC,IAAIW,EAAEF,GAAEC,EAAE0b,GAAE,EAAGnc,EAAED,EAAC,EAAGe,EAAE,CAACsQ,GAAG3Q,EAAE,cAAcT,CAAC,EAAqE,GAAnEc,IAAIL,EAAE,cAAcT,EAAEwZ,GAAG,IAAI/Y,EAAEA,EAAE,MAAMgc,GAAGC,GAAG,KAAK,KAAKhc,EAAED,EAAEf,CAAC,EAAE,CAACA,CAAC,CAAC,EAAKe,EAAE,cAAcV,GAAGe,GAAUG,KAAP,MAAUA,GAAE,cAAc,IAAI,EAAE,CAAuD,GAAtDP,EAAE,OAAO,KAAKic,GAAG,EAAEC,GAAG,KAAK,KAAKlc,EAAED,EAAET,EAAED,CAAC,EAAE,OAAO,IAAI,EAAYqB,KAAP,KAAS,MAAM,MAAMrC,EAAE,GAAG,CAAC,GAAOuc,GAAG,MAAR,GAAauB,GAAGnc,EAAEX,EAAEC,CAAC,CAAC,CAAC,OAAOA,CAAC,CAAC,SAAS6c,GAAGnd,EAAEK,EAAEW,EAAE,CAAChB,EAAE,OAAO,MAAMA,EAAE,CAAC,YAAYK,EAAE,MAAMW,CAAC,EAAEX,EAAES,GAAE,YAAmBT,IAAP,MAAUA,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAES,GAAE,YAAYT,EAAEA,EAAE,OAAO,CAACL,CAAC,IAAIgB,EAAEX,EAAE,OAAcW,IAAP,KAASX,EAAE,OAAO,CAACL,CAAC,EAAEgB,EAAE,KAAKhB,CAAC,EAAE,CAClf,SAASkd,GAAGld,EAAEK,EAAEW,EAAED,EAAE,CAACV,EAAE,MAAMW,EAAEX,EAAE,YAAYU,EAAEqc,GAAG/c,CAAC,GAAGgd,GAAGrd,CAAC,CAAC,CAAC,SAASgd,GAAGhd,EAAEK,EAAEW,EAAE,CAAC,OAAOA,EAAE,UAAU,CAACoc,GAAG/c,CAAC,GAAGgd,GAAGrd,CAAC,CAAC,CAAC,CAAC,CAAC,SAASod,GAAGpd,EAAE,CAAC,IAAIK,EAAEL,EAAE,YAAYA,EAAEA,EAAE,MAAM,GAAG,CAAC,IAAIgB,EAAEX,EAAC,EAAG,MAAM,CAACqR,GAAG1R,EAAEgB,CAAC,CAAC,MAAS,CAAC,MAAM,EAAE,CAAC,CAAC,SAASqc,GAAGrd,EAAE,CAAC,IAAIK,EAAE8Z,GAAGna,EAAE,CAAC,EAASK,IAAP,MAAUid,GAAGjd,EAAEL,EAAE,EAAE,EAAE,CAAC,CAClQ,SAASud,GAAGvd,EAAE,CAAC,IAAIK,EAAEmc,GAAE,EAAG,OAAa,OAAOxc,GAApB,aAAwBA,EAAEA,EAAC,GAAIK,EAAE,cAAcA,EAAE,UAAUL,EAAEA,EAAE,CAAC,QAAQ,KAAK,YAAY,KAAK,MAAM,EAAE,SAAS,KAAK,oBAAoB0c,GAAG,kBAAkB1c,CAAC,EAAEK,EAAE,MAAML,EAAEA,EAAEA,EAAE,SAASwd,GAAG,KAAK,KAAK1c,GAAEd,CAAC,EAAQ,CAACK,EAAE,cAAcL,CAAC,CAAC,CAC5P,SAASid,GAAGjd,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAAf,EAAE,CAAC,IAAIA,EAAE,OAAOK,EAAE,QAAQW,EAAE,KAAKD,EAAE,KAAK,IAAI,EAAEV,EAAES,GAAE,YAAmBT,IAAP,MAAUA,EAAE,CAAC,WAAW,KAAK,OAAO,IAAI,EAAES,GAAE,YAAYT,EAAEA,EAAE,WAAWL,EAAE,KAAKA,IAAIgB,EAAEX,EAAE,WAAkBW,IAAP,KAASX,EAAE,WAAWL,EAAE,KAAKA,GAAGe,EAAEC,EAAE,KAAKA,EAAE,KAAKhB,EAAEA,EAAE,KAAKe,EAAEV,EAAE,WAAWL,IAAWA,CAAC,CAAC,SAASyd,IAAI,CAAC,OAAOhB,GAAE,EAAG,aAAa,CAAC,SAASiB,GAAG1d,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEkc,GAAE,EAAG1b,GAAE,OAAOd,EAAEM,EAAE,cAAc2c,GAAG,EAAE5c,EAAEW,EAAE,OAAgBD,IAAT,OAAW,KAAKA,CAAC,CAAC,CAC9Y,SAAS4c,GAAG3d,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEmc,GAAE,EAAG1b,EAAWA,IAAT,OAAW,KAAKA,EAAE,IAAIK,EAAE,OAAO,GAAUE,KAAP,KAAS,CAAC,IAAIH,EAAEG,GAAE,cAA0B,GAAZF,EAAED,EAAE,QAAkBJ,IAAP,MAAUkb,GAAGlb,EAAEI,EAAE,IAAI,EAAE,CAACb,EAAE,cAAc2c,GAAG5c,EAAEW,EAAEI,EAAEL,CAAC,EAAE,MAAM,CAAC,CAACD,GAAE,OAAOd,EAAEM,EAAE,cAAc2c,GAAG,EAAE5c,EAAEW,EAAEI,EAAEL,CAAC,CAAC,CAAC,SAAS6c,GAAG5d,EAAEK,EAAE,CAAC,OAAOqd,GAAG,QAAQ,EAAE1d,EAAEK,CAAC,CAAC,CAAC,SAAS0c,GAAG/c,EAAEK,EAAE,CAAC,OAAOsd,GAAG,KAAK,EAAE3d,EAAEK,CAAC,CAAC,CAAC,SAASwd,GAAG7d,EAAEK,EAAE,CAAC,OAAOsd,GAAG,EAAE,EAAE3d,EAAEK,CAAC,CAAC,CAAC,SAASyd,GAAG9d,EAAEK,EAAE,CAAC,OAAOsd,GAAG,EAAE,EAAE3d,EAAEK,CAAC,CAAC,CAChX,SAAS0d,GAAG/d,EAAEK,EAAE,CAAC,GAAgB,OAAOA,GAApB,WAAsB,OAAOL,EAAEA,IAAIK,EAAEL,CAAC,EAAE,UAAU,CAACK,EAAE,IAAI,CAAC,EAAE,GAAUA,GAAP,KAAqB,OAAOL,EAAEA,EAAC,EAAGK,EAAE,QAAQL,EAAE,UAAU,CAACK,EAAE,QAAQ,IAAI,CAAC,CAAC,SAAS2d,GAAGhe,EAAEK,EAAEW,EAAE,CAAC,OAAAA,EAASA,GAAP,KAAqBA,EAAE,OAAO,CAAChB,CAAC,CAAC,EAAE,KAAY2d,GAAG,EAAE,EAAEI,GAAG,KAAK,KAAK1d,EAAEL,CAAC,EAAEgB,CAAC,CAAC,CAAC,SAASid,IAAI,EAAE,SAASC,GAAGle,EAAEK,EAAE,CAAC,IAAIW,EAAEyb,KAAKpc,EAAWA,IAAT,OAAW,KAAKA,EAAE,IAAIU,EAAEC,EAAE,cAAc,OAAUD,IAAP,MAAiBV,IAAP,MAAU4b,GAAG5b,EAAEU,EAAE,CAAC,CAAC,EAASA,EAAE,CAAC,GAAEC,EAAE,cAAc,CAAChB,EAAEK,CAAC,EAASL,EAAC,CAC7Z,SAASme,GAAGne,EAAEK,EAAE,CAAC,IAAIW,EAAEyb,KAAKpc,EAAWA,IAAT,OAAW,KAAKA,EAAE,IAAIU,EAAEC,EAAE,cAAc,OAAUD,IAAP,MAAiBV,IAAP,MAAU4b,GAAG5b,EAAEU,EAAE,CAAC,CAAC,EAASA,EAAE,CAAC,GAAEf,EAAEA,EAAC,EAAGgB,EAAE,cAAc,CAAChB,EAAEK,CAAC,EAASL,EAAC,CAAC,SAASoe,GAAGpe,EAAEK,EAAEW,EAAE,CAAC,OAAQ4a,GAAG,MAAR,GAAmB5b,EAAE,YAAYA,EAAE,UAAU,GAAG8Z,GAAG,IAAI9Z,EAAE,cAAcgB,IAAE0Q,GAAG1Q,EAAEX,CAAC,IAAIW,EAAEuJ,GAAE,EAAGzJ,GAAE,OAAOE,EAAE4Z,IAAI5Z,EAAEhB,EAAE,UAAU,IAAWK,EAAC,CAAC,SAASge,GAAGre,EAAEK,EAAE,CAAC,IAAIW,EAAEd,GAAEA,GAAMc,IAAJ,GAAO,EAAEA,EAAEA,EAAE,EAAEhB,EAAE,EAAE,EAAE,IAAIe,EAAE4a,GAAG,WAAWA,GAAG,WAAW,GAAG,GAAG,CAAC3b,EAAE,EAAE,EAAEK,EAAC,CAAE,QAAC,CAAQH,GAAEc,EAAE2a,GAAG,WAAW5a,CAAC,CAAC,CAAC,SAASud,IAAI,CAAC,OAAO7B,GAAE,EAAG,aAAa,CAC1d,SAAS8B,GAAGve,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEyd,GAAGxe,CAAC,EAAiE,GAA/DgB,EAAE,CAAC,KAAKD,EAAE,OAAOC,EAAE,cAAc,GAAG,WAAW,KAAK,KAAK,IAAI,EAAKyd,GAAGze,CAAC,EAAE0e,GAAGre,EAAEW,CAAC,UAAUA,EAAEkZ,GAAGla,EAAEK,EAAEW,EAAED,CAAC,EAASC,IAAP,KAAS,CAAC,IAAIV,EAAEqB,KAAI2b,GAAGtc,EAAEhB,EAAEe,EAAET,CAAC,EAAEqe,GAAG3d,EAAEX,EAAEU,CAAC,CAAC,CAAC,CAC/K,SAASyc,GAAGxd,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEyd,GAAGxe,CAAC,EAAEM,EAAE,CAAC,KAAKS,EAAE,OAAOC,EAAE,cAAc,GAAG,WAAW,KAAK,KAAK,IAAI,EAAE,GAAGyd,GAAGze,CAAC,EAAE0e,GAAGre,EAAEC,CAAC,MAAM,CAAC,IAAIc,EAAEpB,EAAE,UAAU,GAAOA,EAAE,QAAN,IAAqBoB,IAAP,MAAcA,EAAE,QAAN,KAAeA,EAAEf,EAAE,oBAA2Be,IAAP,MAAU,GAAG,CAAC,IAAID,EAAEd,EAAE,kBAAkBa,EAAEE,EAAED,EAAEH,CAAC,EAAoC,GAAlCV,EAAE,cAAc,GAAGA,EAAE,WAAWY,EAAKwQ,GAAGxQ,EAAEC,CAAC,EAAE,CAAC,IAAIF,GAAEZ,EAAE,YAAmBY,KAAP,MAAUX,EAAE,KAAKA,EAAE2Z,GAAG5Z,CAAC,IAAIC,EAAE,KAAKW,GAAE,KAAKA,GAAE,KAAKX,GAAGD,EAAE,YAAYC,EAAE,MAAM,CAAC,MAAS,SAAE,CAAO,CAAEU,EAAEkZ,GAAGla,EAAEK,EAAEC,EAAES,CAAC,EAASC,IAAP,OAAWV,EAAEqB,GAAC,EAAG2b,GAAGtc,EAAEhB,EAAEe,EAAET,CAAC,EAAEqe,GAAG3d,EAAEX,EAAEU,CAAC,EAAE,CAAC,CAC/c,SAAS0d,GAAGze,EAAE,CAAC,IAAIK,EAAEL,EAAE,UAAU,OAAOA,IAAIc,IAAUT,IAAP,MAAUA,IAAIS,EAAC,CAAC,SAAS4d,GAAG1e,EAAEK,EAAE,CAACyb,GAAGD,GAAG,GAAG,IAAI7a,EAAEhB,EAAE,QAAegB,IAAP,KAASX,EAAE,KAAKA,GAAGA,EAAE,KAAKW,EAAE,KAAKA,EAAE,KAAKX,GAAGL,EAAE,QAAQK,CAAC,CAAC,SAASse,GAAG3e,EAAEK,EAAEW,EAAE,CAAC,IAAQA,EAAE,WAAP,EAAgB,CAAC,IAAID,EAAEV,EAAE,MAAMU,GAAGf,EAAE,aAAagB,GAAGD,EAAEV,EAAE,MAAMW,EAAE2J,GAAG3K,EAAEgB,CAAC,CAAC,CAAC,CAC9P,IAAIsb,GAAG,CAAC,YAAYvC,GAAG,YAAYtY,GAAE,WAAWA,GAAE,UAAUA,GAAE,oBAAoBA,GAAE,mBAAmBA,GAAE,gBAAgBA,GAAE,QAAQA,GAAE,WAAWA,GAAE,OAAOA,GAAE,SAASA,GAAE,cAAcA,GAAE,iBAAiBA,GAAE,cAAcA,GAAE,iBAAiBA,GAAE,qBAAqBA,GAAE,MAAMA,GAAE,yBAAyB,EAAE,EAAE0a,GAAG,CAAC,YAAYpC,GAAG,YAAY,SAAS/Z,EAAEK,EAAE,CAAC,OAAAmc,GAAE,EAAG,cAAc,CAACxc,EAAWK,IAAT,OAAW,KAAKA,CAAC,EAASL,CAAC,EAAE,WAAW+Z,GAAG,UAAU6D,GAAG,oBAAoB,SAAS5d,EAAEK,EAAEW,EAAE,CAAC,OAAAA,EAASA,GAAP,KAAqBA,EAAE,OAAO,CAAChB,CAAC,CAAC,EAAE,KAAY0d,GAAG,QAC3f,EAAEK,GAAG,KAAK,KAAK1d,EAAEL,CAAC,EAAEgB,CAAC,CAAC,EAAE,gBAAgB,SAAShB,EAAEK,EAAE,CAAC,OAAOqd,GAAG,QAAQ,EAAE1d,EAAEK,CAAC,CAAC,EAAE,mBAAmB,SAASL,EAAEK,EAAE,CAAC,OAAOqd,GAAG,EAAE,EAAE1d,EAAEK,CAAC,CAAC,EAAE,QAAQ,SAASL,EAAEK,EAAE,CAAC,IAAIW,EAAEwb,GAAE,EAAG,OAAAnc,EAAWA,IAAT,OAAW,KAAKA,EAAEL,EAAEA,EAAC,EAAGgB,EAAE,cAAc,CAAChB,EAAEK,CAAC,EAASL,CAAC,EAAE,WAAW,SAASA,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEyb,GAAE,EAAG,OAAAnc,EAAWW,IAAT,OAAWA,EAAEX,CAAC,EAAEA,EAAEU,EAAE,cAAcA,EAAE,UAAUV,EAAEL,EAAE,CAAC,QAAQ,KAAK,YAAY,KAAK,MAAM,EAAE,SAAS,KAAK,oBAAoBA,EAAE,kBAAkBK,CAAC,EAAEU,EAAE,MAAMf,EAAEA,EAAEA,EAAE,SAASue,GAAG,KAAK,KAAKzd,GAAEd,CAAC,EAAQ,CAACe,EAAE,cAAcf,CAAC,CAAC,EAAE,OAAO,SAASA,EAAE,CAAC,IAAIK,EACrfmc,KAAK,OAAAxc,EAAE,CAAC,QAAQA,CAAC,EAASK,EAAE,cAAcL,CAAC,EAAE,SAASud,GAAG,cAAcU,GAAG,iBAAiB,SAASje,EAAE,CAAC,OAAOwc,GAAE,EAAG,cAAcxc,CAAC,EAAE,cAAc,UAAU,CAAC,IAAIA,EAAEud,GAAG,EAAE,EAAEld,EAAEL,EAAE,CAAC,EAAE,OAAAA,EAAEqe,GAAG,KAAK,KAAKre,EAAE,CAAC,CAAC,EAAEwc,GAAE,EAAG,cAAcxc,EAAQ,CAACK,EAAEL,CAAC,CAAC,EAAE,iBAAiB,UAAU,GAAG,qBAAqB,SAASA,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAED,GAAER,EAAEkc,GAAE,EAAG,GAAG9b,GAAE,CAAC,GAAYM,IAAT,OAAW,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE2B,EAAEA,EAAC,CAAE,KAAK,CAAO,GAANA,EAAEX,EAAC,EAAaqB,KAAP,KAAS,MAAM,MAAMrC,EAAE,GAAG,CAAC,GAAOuc,GAAG,MAAR,GAAauB,GAAGpc,EAAEV,EAAEW,CAAC,CAAC,CAACV,EAAE,cAAcU,EAAE,IAAII,EAAE,CAAC,MAAMJ,EAAE,YAAYX,CAAC,EAAE,OAAAC,EAAE,MAAMc,EAAEwc,GAAGZ,GAAG,KAAK,KAAKjc,EACpfK,EAAEpB,CAAC,EAAE,CAACA,CAAC,CAAC,EAAEe,EAAE,OAAO,KAAKkc,GAAG,EAAEC,GAAG,KAAK,KAAKnc,EAAEK,EAAEJ,EAAEX,CAAC,EAAE,OAAO,IAAI,EAASW,CAAC,EAAE,MAAM,UAAU,CAAC,IAAIhB,EAAEwc,GAAE,EAAGnc,EAAEqB,GAAE,iBAAiB,GAAGhB,GAAE,CAAC,IAAIM,EAAEwW,GAAOzW,EAAEwW,GAAGvW,GAAGD,EAAE,EAAE,GAAG,GAAG6I,GAAG7I,CAAC,EAAE,IAAI,SAAS,EAAE,EAAEC,EAAEX,EAAE,IAAIA,EAAE,IAAIW,EAAEA,EAAE+a,KAAK,EAAE/a,IAAIX,GAAG,IAAIW,EAAE,SAAS,EAAE,GAAGX,GAAG,GAAG,MAAMW,EAAEgb,KAAK3b,EAAE,IAAIA,EAAE,IAAIW,EAAE,SAAS,EAAE,EAAE,IAAI,OAAOhB,EAAE,cAAcK,CAAC,EAAE,yBAAyB,EAAE,EAAE+b,GAAG,CAAC,YAAYrC,GAAG,YAAYmE,GAAG,WAAWnE,GAAG,UAAUgD,GAAG,oBAAoBiB,GAAG,mBAAmBH,GAAG,gBAAgBC,GAAG,QAAQK,GAAG,WAAWxB,GAAG,OAAOc,GAAG,SAAS,UAAU,CAAC,OAAOd,GAAGD,EAAE,CAAC,EACrhB,cAAcuB,GAAG,iBAAiB,SAASje,EAAE,CAAC,IAAIK,EAAEoc,GAAE,EAAG,OAAO2B,GAAG/d,EAAEiB,GAAE,cAActB,CAAC,CAAC,EAAE,cAAc,UAAU,CAAC,IAAIA,EAAE2c,GAAGD,EAAE,EAAE,CAAC,EAAErc,EAAEoc,GAAE,EAAG,cAAc,MAAM,CAACzc,EAAEK,CAAC,CAAC,EAAE,iBAAiBwc,GAAG,qBAAqBC,GAAG,MAAMwB,GAAG,yBAAyB,EAAE,EAAEjC,GAAG,CAAC,YAAYtC,GAAG,YAAYmE,GAAG,WAAWnE,GAAG,UAAUgD,GAAG,oBAAoBiB,GAAG,mBAAmBH,GAAG,gBAAgBC,GAAG,QAAQK,GAAG,WAAWvB,GAAG,OAAOa,GAAG,SAAS,UAAU,CAAC,OAAOb,GAAGF,EAAE,CAAC,EAAE,cAAcuB,GAAG,iBAAiB,SAASje,EAAE,CAAC,IAAIK,EAAEoc,GAAE,EAAG,OAClfnb,KADyf,KACvfjB,EAAE,cAAcL,EAAEoe,GAAG/d,EAAEiB,GAAE,cAActB,CAAC,CAAC,EAAE,cAAc,UAAU,CAAC,IAAIA,EAAE4c,GAAGF,EAAE,EAAE,CAAC,EAAErc,EAAEoc,GAAE,EAAG,cAAc,MAAM,CAACzc,EAAEK,CAAC,CAAC,EAAE,iBAAiBwc,GAAG,qBAAqBC,GAAG,MAAMwB,GAAG,yBAAyB,EAAE,EAAE,SAASM,GAAG5e,EAAEK,EAAE,CAAC,GAAGL,GAAGA,EAAE,aAAa,CAACK,EAAEN,EAAE,GAAGM,CAAC,EAAEL,EAAEA,EAAE,aAAa,QAAQgB,KAAKhB,EAAWK,EAAEW,CAAC,IAAZ,SAAgBX,EAAEW,CAAC,EAAEhB,EAAEgB,CAAC,GAAG,OAAOX,CAAC,CAAC,OAAOA,CAAC,CAAC,SAASwe,GAAG7e,EAAEK,EAAEW,EAAED,EAAE,CAACV,EAAEL,EAAE,cAAcgB,EAAEA,EAAED,EAAEV,CAAC,EAAEW,EAASA,GAAP,KAAqBX,EAAEN,EAAE,GAAGM,EAAEW,CAAC,EAAEhB,EAAE,cAAcgB,EAAMhB,EAAE,QAAN,IAAcA,EAAE,YAAY,UAAUgB,EAAE,CACrd,IAAI8d,GAAG,CAAC,UAAU,SAAS9e,EAAE,CAAC,OAAOA,EAAEA,EAAE,iBAAiByI,GAAGzI,CAAC,IAAIA,EAAE,EAAE,EAAE,gBAAgB,SAASA,EAAEK,EAAEW,EAAE,CAAChB,EAAEA,EAAE,gBAAgB,IAAIe,EAAEY,GAAC,EAAGrB,EAAEke,GAAGxe,CAAC,EAAEoB,EAAEmZ,GAAGxZ,EAAET,CAAC,EAAEc,EAAE,QAAQf,EAAqBW,GAAP,OAAWI,EAAE,SAASJ,GAAGX,EAAEma,GAAGxa,EAAEoB,EAAEd,CAAC,EAASD,IAAP,OAAWid,GAAGjd,EAAEL,EAAEM,EAAES,CAAC,EAAE0Z,GAAGpa,EAAEL,EAAEM,CAAC,EAAE,EAAE,oBAAoB,SAASN,EAAEK,EAAEW,EAAE,CAAChB,EAAEA,EAAE,gBAAgB,IAAIe,EAAEY,GAAC,EAAGrB,EAAEke,GAAGxe,CAAC,EAAEoB,EAAEmZ,GAAGxZ,EAAET,CAAC,EAAEc,EAAE,IAAI,EAAEA,EAAE,QAAQf,EAAqBW,GAAP,OAAWI,EAAE,SAASJ,GAAGX,EAAEma,GAAGxa,EAAEoB,EAAEd,CAAC,EAASD,IAAP,OAAWid,GAAGjd,EAAEL,EAAEM,EAAES,CAAC,EAAE0Z,GAAGpa,EAAEL,EAAEM,CAAC,EAAE,EAAE,mBAAmB,SAASN,EAAEK,EAAE,CAACL,EAAEA,EAAE,gBAAgB,IAAIgB,EAAEW,GAAC,EAAGZ,EACnfyd,GAAGxe,CAAC,EAAEM,EAAEia,GAAGvZ,EAAED,CAAC,EAAET,EAAE,IAAI,EAAqBD,GAAP,OAAWC,EAAE,SAASD,GAAGA,EAAEma,GAAGxa,EAAEM,EAAES,CAAC,EAASV,IAAP,OAAWid,GAAGjd,EAAEL,EAAEe,EAAEC,CAAC,EAAEyZ,GAAGpa,EAAEL,EAAEe,CAAC,EAAE,CAAC,EAAE,SAASge,GAAG/e,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAE,CAAC,OAAAnB,EAAEA,EAAE,UAA6B,OAAOA,EAAE,uBAAtB,WAA4CA,EAAE,sBAAsBe,EAAEK,EAAED,CAAC,EAAEd,EAAE,WAAWA,EAAE,UAAU,qBAAqB,CAACsR,GAAG3Q,EAAED,CAAC,GAAG,CAAC4Q,GAAGrR,EAAEc,CAAC,EAAE,EAAE,CAC1S,SAAS4d,GAAGhf,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAE,GAAGT,EAAE0V,GAAO5U,EAAEf,EAAE,YAAY,OAAW,OAAOe,GAAlB,UAA4BA,IAAP,KAASA,EAAE2Y,GAAG3Y,CAAC,GAAGd,EAAE8V,GAAG/V,CAAC,EAAE6V,GAAGzV,GAAE,QAAQM,EAAEV,EAAE,aAAae,GAAGL,EAASA,GAAP,MAAsBoV,GAAGnW,EAAEM,CAAC,EAAE0V,IAAI3V,EAAE,IAAIA,EAAEW,EAAEI,CAAC,EAAEpB,EAAE,cAAqBK,EAAE,QAAT,MAAyBA,EAAE,QAAX,OAAiBA,EAAE,MAAM,KAAKA,EAAE,QAAQye,GAAG9e,EAAE,UAAUK,EAAEA,EAAE,gBAAgBL,EAAEe,IAAIf,EAAEA,EAAE,UAAUA,EAAE,4CAA4CM,EAAEN,EAAE,0CAA0CoB,GAAUf,CAAC,CAC5Z,SAAS4e,GAAGjf,EAAEK,EAAEW,EAAED,EAAE,CAACf,EAAEK,EAAE,MAAmB,OAAOA,EAAE,2BAAtB,YAAiDA,EAAE,0BAA0BW,EAAED,CAAC,EAAe,OAAOV,EAAE,kCAAtB,YAAwDA,EAAE,iCAAiCW,EAAED,CAAC,EAAEV,EAAE,QAAQL,GAAG8e,GAAG,oBAAoBze,EAAEA,EAAE,MAAM,IAAI,CAAC,CACpQ,SAAS6e,GAAGlf,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEN,EAAE,UAAUM,EAAE,MAAMU,EAAEV,EAAE,MAAMN,EAAE,cAAcM,EAAE,KAAK,GAAG+Z,GAAGra,CAAC,EAAE,IAAIoB,EAAEf,EAAE,YAAuB,OAAOe,GAAlB,UAA4BA,IAAP,KAASd,EAAE,QAAQyZ,GAAG3Y,CAAC,GAAGA,EAAEgV,GAAG/V,CAAC,EAAE6V,GAAGzV,GAAE,QAAQH,EAAE,QAAQ6V,GAAGnW,EAAEoB,CAAC,GAAGd,EAAE,MAAMN,EAAE,cAAcoB,EAAEf,EAAE,yBAAsC,OAAOe,GAApB,aAAwByd,GAAG7e,EAAEK,EAAEe,EAAEJ,CAAC,EAAEV,EAAE,MAAMN,EAAE,eAA4B,OAAOK,EAAE,0BAAtB,YAA6D,OAAOC,EAAE,yBAAtB,YAA4D,OAAOA,EAAE,2BAAtB,YAA8D,OAAOA,EAAE,oBAAtB,aAA2CD,EAAEC,EAAE,MACxe,OAAOA,EAAE,oBAAtB,YAA0CA,EAAE,mBAAkB,EAAgB,OAAOA,EAAE,2BAAtB,YAAiDA,EAAE,0BAAyB,EAAGD,IAAIC,EAAE,OAAOwe,GAAG,oBAAoBxe,EAAEA,EAAE,MAAM,IAAI,EAAEqa,GAAG3a,EAAEgB,EAAEV,EAAES,CAAC,EAAET,EAAE,MAAMN,EAAE,eAA4B,OAAOM,EAAE,mBAAtB,aAA0CN,EAAE,OAAO,QAAQ,CAAC,SAASmf,GAAGnf,EAAEK,EAAE,CAAC,GAAG,CAAC,IAAIW,EAAE,GAAGD,EAAEV,EAAE,GAAGW,GAAG+D,GAAGhE,CAAC,EAAEA,EAAEA,EAAE,aAAaA,GAAG,IAAIT,EAAEU,CAAC,OAAOI,EAAE,CAACd,EAAE;AAAA,0BAA6Bc,EAAE,QAAQ;AAAA,EAAKA,EAAE,KAAK,CAAC,MAAM,CAAC,MAAMpB,EAAE,OAAOK,EAAE,MAAMC,EAAE,OAAO,IAAI,CAAC,CAC1d,SAAS8e,GAAGpf,EAAEK,EAAEW,EAAE,CAAC,MAAM,CAAC,MAAMhB,EAAE,OAAO,KAAK,MAAYgB,GAAI,KAAK,OAAaX,GAAI,IAAI,CAAC,CAAC,SAASgf,GAAGrf,EAAEK,EAAE,CAAC,GAAG,CAAC,QAAQ,MAAMA,EAAE,KAAK,CAAC,OAAOW,EAAE,CAAC,WAAW,UAAU,CAAC,MAAMA,CAAE,CAAC,CAAC,CAAC,CAAC,IAAIse,GAAgB,OAAO,SAApB,WAA4B,QAAQ,IAAI,SAASC,GAAGvf,EAAEK,EAAEW,EAAE,CAACA,EAAEuZ,GAAG,GAAGvZ,CAAC,EAAEA,EAAE,IAAI,EAAEA,EAAE,QAAQ,CAAC,QAAQ,IAAI,EAAE,IAAID,EAAEV,EAAE,MAAM,OAAAW,EAAE,SAAS,UAAU,CAACwe,KAAKA,GAAG,GAAGC,GAAG1e,GAAGse,GAAGrf,EAAEK,CAAC,CAAC,EAASW,CAAC,CACrW,SAAS0e,GAAG1f,EAAEK,EAAEW,EAAE,CAACA,EAAEuZ,GAAG,GAAGvZ,CAAC,EAAEA,EAAE,IAAI,EAAE,IAAID,EAAEf,EAAE,KAAK,yBAAyB,GAAgB,OAAOe,GAApB,WAAsB,CAAC,IAAIT,EAAED,EAAE,MAAMW,EAAE,QAAQ,UAAU,CAAC,OAAOD,EAAET,CAAC,CAAC,EAAEU,EAAE,SAAS,UAAU,CAACqe,GAAGrf,EAAEK,CAAC,CAAC,CAAC,CAAC,IAAIe,EAAEpB,EAAE,UAAU,OAAOoB,IAAP,MAAuB,OAAOA,EAAE,mBAAtB,aAA0CJ,EAAE,SAAS,UAAU,CAACqe,GAAGrf,EAAEK,CAAC,EAAe,OAAOU,GAApB,aAA+B4e,KAAP,KAAUA,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,EAAEA,GAAG,IAAI,IAAI,GAAG,IAAI3e,EAAEX,EAAE,MAAM,KAAK,kBAAkBA,EAAE,MAAM,CAAC,eAAsBW,IAAP,KAASA,EAAE,EAAE,CAAC,CAAC,GAAUA,CAAC,CACnb,SAAS4e,GAAG5f,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,UAAU,GAAUe,IAAP,KAAS,CAACA,EAAEf,EAAE,UAAU,IAAIsf,GAAG,IAAIhf,EAAE,IAAI,IAAIS,EAAE,IAAIV,EAAEC,CAAC,CAAC,MAAMA,EAAES,EAAE,IAAIV,CAAC,EAAWC,IAAT,SAAaA,EAAE,IAAI,IAAIS,EAAE,IAAIV,EAAEC,CAAC,GAAGA,EAAE,IAAIU,CAAC,IAAIV,EAAE,IAAIU,CAAC,EAAEhB,EAAE6f,GAAG,KAAK,KAAK7f,EAAEK,EAAEW,CAAC,EAAEX,EAAE,KAAKL,EAAEA,CAAC,EAAE,CAAC,SAAS8f,GAAG9f,EAAE,CAAC,EAAE,CAAC,IAAIK,EAA4E,IAAvEA,EAAOL,EAAE,MAAP,MAAWK,EAAEL,EAAE,cAAcK,EAASA,IAAP,KAAgBA,EAAE,aAAT,KAA0B,IAAMA,EAAE,OAAOL,EAAEA,EAAEA,EAAE,MAAM,OAAcA,IAAP,MAAU,OAAO,IAAI,CAChW,SAAS+f,GAAG/f,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,OAAQN,EAAE,KAAK,KAAZ,GAAsBA,IAAIK,EAAEL,EAAE,OAAO,OAAOA,EAAE,OAAO,IAAIgB,EAAE,OAAO,OAAOA,EAAE,OAAO,OAAWA,EAAE,MAAN,IAAmBA,EAAE,YAAT,KAAmBA,EAAE,IAAI,IAAIX,EAAEka,GAAG,GAAG,CAAC,EAAEla,EAAE,IAAI,EAAEma,GAAGxZ,EAAEX,EAAE,CAAC,IAAIW,EAAE,OAAO,GAAGhB,IAAEA,EAAE,OAAO,MAAMA,EAAE,MAAMM,EAASN,EAAC,CAAC,IAAIggB,GAAGrc,EAAG,kBAAkBmW,GAAG,GAAG,SAASmG,GAAGjgB,EAAEK,EAAEW,EAAED,EAAE,CAACV,EAAE,MAAaL,IAAP,KAASqZ,GAAGhZ,EAAE,KAAKW,EAAED,CAAC,EAAEqY,GAAG/Y,EAAEL,EAAE,MAAMgB,EAAED,CAAC,CAAC,CACnV,SAASmf,GAAGlgB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAACU,EAAEA,EAAE,OAAO,IAAII,EAAEf,EAAE,IAAqC,OAAjCwZ,GAAGxZ,EAAEC,CAAC,EAAES,EAAEmb,GAAGlc,EAAEK,EAAEW,EAAED,EAAEK,EAAEd,CAAC,EAAEU,EAAEub,GAAE,EAAavc,IAAP,MAAU,CAAC8Z,IAAUzZ,EAAE,YAAYL,EAAE,YAAYK,EAAE,OAAO,MAAML,EAAE,OAAO,CAACM,EAAE6f,GAAGngB,EAAEK,EAAEC,CAAC,IAAEI,IAAGM,GAAG2W,GAAGtX,CAAC,EAAEA,EAAE,OAAO,EAAE4f,GAAGjgB,EAAEK,EAAEU,EAAET,CAAC,EAASD,EAAE,MAAK,CACzN,SAAS+f,GAAGpgB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,GAAUN,IAAP,KAAS,CAAC,IAAIoB,EAAEJ,EAAE,KAAK,OAAgB,OAAOI,GAApB,YAAuB,CAACif,GAAGjf,CAAC,GAAYA,EAAE,eAAX,QAAgCJ,EAAE,UAAT,MAA2BA,EAAE,eAAX,QAA+BX,EAAE,IAAI,GAAGA,EAAE,KAAKe,EAAEkf,GAAGtgB,EAAEK,EAAEe,EAAEL,EAAET,CAAC,IAAEN,EAAEiZ,GAAGjY,EAAE,KAAK,KAAKD,EAAEV,EAAEA,EAAE,KAAKC,CAAC,EAAEN,EAAE,IAAIK,EAAE,IAAIL,EAAE,OAAOK,EAASA,EAAE,MAAML,EAAC,CAAW,GAAVoB,EAAEpB,EAAE,OAAcA,EAAE,MAAMM,KAAb,EAAgB,CAAC,IAAIa,EAAEC,EAAE,cAA0C,GAA5BJ,EAAEA,EAAE,QAAQA,EAASA,IAAP,KAASA,EAAE2Q,GAAM3Q,EAAEG,EAAEJ,CAAC,GAAGf,EAAE,MAAMK,EAAE,IAAI,OAAO8f,GAAGngB,EAAEK,EAAEC,CAAC,CAAC,CAAC,OAAAD,EAAE,OAAO,EAAEL,EAAE+Y,GAAG3X,EAAEL,CAAC,EAAEf,EAAE,IAAIK,EAAE,IAAIL,EAAE,OAAOK,EAASA,EAAE,MAAML,CAAC,CAC1b,SAASsgB,GAAGtgB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,GAAUN,IAAP,KAAS,CAAC,IAAIoB,EAAEpB,EAAE,cAAc,GAAG2R,GAAGvQ,EAAEL,CAAC,GAAGf,EAAE,MAAMK,EAAE,IAAI,GAAGyZ,GAAG,GAAGzZ,EAAE,aAAaU,EAAEK,GAAOpB,EAAE,MAAMM,KAAb,GAAqBN,EAAE,MAAM,UAAb,IAAuB8Z,GAAG,QAAS,QAAOzZ,EAAE,MAAML,EAAE,MAAMmgB,GAAGngB,EAAEK,EAAEC,CAAC,CAAC,CAAC,OAAOigB,GAAGvgB,EAAEK,EAAEW,EAAED,EAAET,CAAC,CAAC,CACxN,SAASkgB,GAAGxgB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEV,EAAE,aAAaC,EAAES,EAAE,SAASK,EAASpB,IAAP,KAASA,EAAE,cAAc,KAAK,GAAce,EAAE,OAAb,SAAkB,IAAQV,EAAE,KAAK,KAAZ,EAAeA,EAAE,cAAc,CAAC,UAAU,EAAE,UAAU,KAAK,YAAY,IAAI,EAAEG,GAAEigB,GAAGC,EAAE,EAAEA,IAAI1f,MAAM,CAAC,IAAQA,EAAE,cAAP,EAAmB,OAAOhB,EAASoB,IAAP,KAASA,EAAE,UAAUJ,EAAEA,EAAEX,EAAE,MAAMA,EAAE,WAAW,WAAWA,EAAE,cAAc,CAAC,UAAUL,EAAE,UAAU,KAAK,YAAY,IAAI,EAAEK,EAAE,YAAY,KAAKG,GAAEigB,GAAGC,EAAE,EAAEA,IAAI1gB,EAAE,KAAKK,EAAE,cAAc,CAAC,UAAU,EAAE,UAAU,KAAK,YAAY,IAAI,EAAEU,EAASK,IAAP,KAASA,EAAE,UAAUJ,EAAER,GAAEigB,GAAGC,EAAE,EAAEA,IAAI3f,CAAC,MAChfK,IADsf,MACnfL,EAAEK,EAAE,UAAUJ,EAAEX,EAAE,cAAc,MAAMU,EAAEC,EAAER,GAAEigB,GAAGC,EAAE,EAAEA,IAAI3f,EAAE,OAAAkf,GAAGjgB,EAAEK,EAAEC,EAAEU,CAAC,EAASX,EAAE,KAAK,CAAC,SAASsgB,GAAG3gB,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAE,KAAcL,IAAP,MAAiBgB,IAAP,MAAiBhB,IAAP,MAAUA,EAAE,MAAMgB,KAAEX,EAAE,OAAO,IAAIA,EAAE,OAAO,QAAO,CAAC,SAASkgB,GAAGvgB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIc,EAAEgV,GAAGpV,CAAC,EAAEkV,GAAGzV,GAAE,QAAmD,OAA3CW,EAAE+U,GAAG9V,EAAEe,CAAC,EAAEyY,GAAGxZ,EAAEC,CAAC,EAAEU,EAAEkb,GAAGlc,EAAEK,EAAEW,EAAED,EAAEK,EAAEd,CAAC,EAAES,EAAEwb,GAAE,EAAavc,IAAP,MAAU,CAAC8Z,IAAUzZ,EAAE,YAAYL,EAAE,YAAYK,EAAE,OAAO,MAAML,EAAE,OAAO,CAACM,EAAE6f,GAAGngB,EAAEK,EAAEC,CAAC,IAAEI,IAAGK,GAAG4W,GAAGtX,CAAC,EAAEA,EAAE,OAAO,EAAE4f,GAAGjgB,EAAEK,EAAEW,EAAEV,CAAC,EAASD,EAAE,MAAK,CACla,SAASugB,GAAG5gB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,GAAG8V,GAAGpV,CAAC,EAAE,CAAC,IAAII,EAAE,GAAGoV,GAAGnW,CAAC,CAAC,MAAMe,EAAE,GAAW,GAARyY,GAAGxZ,EAAEC,CAAC,EAAYD,EAAE,YAAT,KAAmBwgB,GAAG7gB,EAAEK,CAAC,EAAE2e,GAAG3e,EAAEW,EAAED,CAAC,EAAEme,GAAG7e,EAAEW,EAAED,EAAET,CAAC,EAAES,EAAE,WAAkBf,IAAP,KAAS,CAAC,IAAImB,EAAEd,EAAE,UAAUa,EAAEb,EAAE,cAAcc,EAAE,MAAMD,EAAE,IAAID,GAAEE,EAAE,QAAQhC,GAAE6B,EAAE,YAAuB,OAAO7B,IAAlB,UAA4BA,KAAP,KAASA,GAAE4a,GAAG5a,EAAC,GAAGA,GAAEiX,GAAGpV,CAAC,EAAEkV,GAAGzV,GAAE,QAAQtB,GAAEgX,GAAG9V,EAAElB,EAAC,GAAG,IAAIkC,GAAEL,EAAE,yBAAyB1B,GAAe,OAAO+B,IAApB,YAAoC,OAAOF,EAAE,yBAAtB,WAA8C7B,IAAgB,OAAO6B,EAAE,kCAAtB,YAAqE,OAAOA,EAAE,2BAAtB,aACpcD,IAAIH,GAAGE,KAAI9B,KAAI8f,GAAG5e,EAAEc,EAAEJ,EAAE5B,EAAC,EAAEib,GAAG,GAAG,IAAI7a,GAAEc,EAAE,cAAcc,EAAE,MAAM5B,GAAEob,GAAGta,EAAEU,EAAEI,EAAEb,CAAC,EAAEW,GAAEZ,EAAE,cAAca,IAAIH,GAAGxB,KAAI0B,IAAGgV,GAAG,SAASmE,IAAiB,OAAO/Y,IAApB,aAAwBwd,GAAGxe,EAAEW,EAAEK,GAAEN,CAAC,EAAEE,GAAEZ,EAAE,gBAAgBa,EAAEkZ,IAAI2E,GAAG1e,EAAEW,EAAEE,EAAEH,EAAExB,GAAE0B,GAAE9B,EAAC,IAAIG,IAAgB,OAAO6B,EAAE,2BAAtB,YAA8D,OAAOA,EAAE,oBAAtB,aAAwD,OAAOA,EAAE,oBAAtB,YAA0CA,EAAE,mBAAkB,EAAgB,OAAOA,EAAE,2BAAtB,YAAiDA,EAAE,6BAA0C,OAAOA,EAAE,mBAAtB,aAA0Cd,EAAE,OAAO,WACre,OAAOc,EAAE,mBAAtB,aAA0Cd,EAAE,OAAO,SAASA,EAAE,cAAcU,EAAEV,EAAE,cAAcY,IAAGE,EAAE,MAAMJ,EAAEI,EAAE,MAAMF,GAAEE,EAAE,QAAQhC,GAAE4B,EAAEG,IAAiB,OAAOC,EAAE,mBAAtB,aAA0Cd,EAAE,OAAO,SAASU,EAAE,GAAG,KAAK,CAACI,EAAEd,EAAE,UAAUia,GAAGta,EAAEK,CAAC,EAAEa,EAAEb,EAAE,cAAclB,GAAEkB,EAAE,OAAOA,EAAE,YAAYa,EAAE0d,GAAGve,EAAE,KAAKa,CAAC,EAAEC,EAAE,MAAMhC,GAAEG,GAAEe,EAAE,aAAad,GAAE4B,EAAE,QAAQF,GAAED,EAAE,YAAuB,OAAOC,IAAlB,UAA4BA,KAAP,KAASA,GAAE8Y,GAAG9Y,EAAC,GAAGA,GAAEmV,GAAGpV,CAAC,EAAEkV,GAAGzV,GAAE,QAAQQ,GAAEkV,GAAG9V,EAAEY,EAAC,GAAG,IAAIpB,GAAEmB,EAAE,0BAA0BK,GAAe,OAAOxB,IAApB,YAAoC,OAAOsB,EAAE,yBAAtB,aAC3c,OAAOA,EAAE,kCAAtB,YAAqE,OAAOA,EAAE,2BAAtB,aAAkDD,IAAI5B,IAAGC,KAAI0B,KAAIge,GAAG5e,EAAEc,EAAEJ,EAAEE,EAAC,EAAEmZ,GAAG,GAAG7a,GAAEc,EAAE,cAAcc,EAAE,MAAM5B,GAAEob,GAAGta,EAAEU,EAAEI,EAAEb,CAAC,EAAE,IAAIlB,GAAEiB,EAAE,cAAca,IAAI5B,IAAGC,KAAIH,IAAG6W,GAAG,SAASmE,IAAiB,OAAOva,IAApB,aAAwBgf,GAAGxe,EAAEW,EAAEnB,GAAEkB,CAAC,EAAE3B,GAAEiB,EAAE,gBAAgBlB,GAAEib,IAAI2E,GAAG1e,EAAEW,EAAE7B,GAAE4B,EAAExB,GAAEH,GAAE6B,EAAC,GAAG,KAAKI,IAAgB,OAAOF,EAAE,4BAAtB,YAA+D,OAAOA,EAAE,qBAAtB,aAAyD,OAAOA,EAAE,qBAAtB,YAA2CA,EAAE,oBAAoBJ,EAAE3B,GAAE6B,EAAC,EAAe,OAAOE,EAAE,4BAAtB,YACteA,EAAE,2BAA2BJ,EAAE3B,GAAE6B,EAAC,GAAgB,OAAOE,EAAE,oBAAtB,aAA2Cd,EAAE,OAAO,GAAgB,OAAOc,EAAE,yBAAtB,aAAgDd,EAAE,OAAO,QAAqB,OAAOc,EAAE,oBAAtB,YAA0CD,IAAIlB,EAAE,eAAeT,KAAIS,EAAE,gBAAgBK,EAAE,OAAO,GAAgB,OAAOc,EAAE,yBAAtB,YAA+CD,IAAIlB,EAAE,eAAeT,KAAIS,EAAE,gBAAgBK,EAAE,OAAO,MAAMA,EAAE,cAAcU,EAAEV,EAAE,cAAcjB,IAAG+B,EAAE,MAAMJ,EAAEI,EAAE,MAAM/B,GAAE+B,EAAE,QAAQF,GAAEF,EAAE5B,KAAiB,OAAOgC,EAAE,oBAAtB,YAA0CD,IAAIlB,EAAE,eAAeT,KACjfS,EAAE,gBAAgBK,EAAE,OAAO,GAAgB,OAAOc,EAAE,yBAAtB,YAA+CD,IAAIlB,EAAE,eAAeT,KAAIS,EAAE,gBAAgBK,EAAE,OAAO,MAAMU,EAAE,GAAG,CAAC,OAAO+f,GAAG9gB,EAAEK,EAAEW,EAAED,EAAEK,EAAEd,CAAC,CAAC,CACnK,SAASwgB,GAAG9gB,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAE,CAACuf,GAAG3gB,EAAEK,CAAC,EAAE,IAAIc,GAAOd,EAAE,MAAM,OAAb,EAAkB,GAAG,CAACU,GAAG,CAACI,EAAE,OAAOb,GAAGmW,GAAGpW,EAAEW,EAAE,EAAE,EAAEmf,GAAGngB,EAAEK,EAAEe,CAAC,EAAEL,EAAEV,EAAE,UAAU2f,GAAG,QAAQ3f,EAAE,IAAIa,EAAEC,GAAgB,OAAOH,EAAE,0BAAtB,WAA+C,KAAKD,EAAE,SAAS,OAAAV,EAAE,OAAO,EAASL,IAAP,MAAUmB,GAAGd,EAAE,MAAM+Y,GAAG/Y,EAAEL,EAAE,MAAM,KAAKoB,CAAC,EAAEf,EAAE,MAAM+Y,GAAG/Y,EAAE,KAAKa,EAAEE,CAAC,GAAG6e,GAAGjgB,EAAEK,EAAEa,EAAEE,CAAC,EAAEf,EAAE,cAAcU,EAAE,MAAMT,GAAGmW,GAAGpW,EAAEW,EAAE,EAAE,EAASX,EAAE,KAAK,CAAC,SAAS0gB,GAAG/gB,EAAE,CAAC,IAAIK,EAAEL,EAAE,UAAUK,EAAE,eAAeiW,GAAGtW,EAAEK,EAAE,eAAeA,EAAE,iBAAiBA,EAAE,OAAO,EAAEA,EAAE,SAASiW,GAAGtW,EAAEK,EAAE,QAAQ,EAAE,EAAE8a,GAAGnb,EAAEK,EAAE,aAAa,CAAC,CAC5e,SAAS2gB,GAAGhhB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,OAAAkY,GAAE,EAAGC,GAAGnY,CAAC,EAAED,EAAE,OAAO,IAAI4f,GAAGjgB,EAAEK,EAAEW,EAAED,CAAC,EAASV,EAAE,KAAK,CAAC,IAAI4gB,GAAG,CAAC,WAAW,KAAK,YAAY,KAAK,UAAU,CAAC,EAAE,SAASC,GAAGlhB,EAAE,CAAC,MAAM,CAAC,UAAUA,EAAE,UAAU,KAAK,YAAY,IAAI,CAAC,CAClM,SAASmhB,GAAGnhB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEV,EAAE,aAAaC,EAAEO,GAAE,QAAQO,EAAE,GAAGD,GAAOd,EAAE,MAAM,OAAb,EAAkBa,EAA0I,IAAvIA,EAAEC,KAAKD,EAASlB,IAAP,MAAiBA,EAAE,gBAAT,KAAuB,IAAQM,EAAE,KAAP,GAAcY,GAAEE,EAAE,GAAGf,EAAE,OAAO,OAAoBL,IAAP,MAAiBA,EAAE,gBAAT,QAAuBM,GAAG,GAAEE,GAAEK,GAAEP,EAAE,CAAC,EAAYN,IAAP,KAAkC,OAAxBoY,GAAG/X,CAAC,EAAEL,EAAEK,EAAE,cAAwBL,IAAP,OAAWA,EAAEA,EAAE,WAAkBA,IAAP,QAAsBK,EAAE,KAAK,KAAZ,EAAeA,EAAE,MAAM,EAASL,EAAE,OAAT,KAAcK,EAAE,MAAM,EAAEA,EAAE,MAAM,WAAW,OAAKc,EAAEJ,EAAE,SAASf,EAAEe,EAAE,SAAgBK,GAAGL,EAAEV,EAAE,KAAKe,EAAEf,EAAE,MAAMc,EAAE,CAAC,KAAK,SAAS,SAASA,CAAC,GAAOJ,EAAE,KAAP,GAAkBK,IAAP,MAAUA,EAAE,WAAW,EAAEA,EAAE,aAC7eD,GAAGC,EAAEggB,GAAGjgB,EAAEJ,EAAE,EAAE,IAAI,EAAEf,EAAEmZ,GAAGnZ,EAAEe,EAAEC,EAAE,IAAI,EAAEI,EAAE,OAAOf,EAAEL,EAAE,OAAOK,EAAEe,EAAE,QAAQpB,EAAEK,EAAE,MAAMe,EAAEf,EAAE,MAAM,cAAc6gB,GAAGlgB,CAAC,EAAEX,EAAE,cAAc4gB,GAAGjhB,GAAGqhB,GAAGhhB,EAAEc,CAAC,GAAoB,GAAlBb,EAAEN,EAAE,cAAwBM,IAAP,OAAWY,EAAEZ,EAAE,WAAkBY,IAAP,MAAU,OAAOogB,GAAGthB,EAAEK,EAAEc,EAAEJ,EAAEG,EAAEZ,EAAEU,CAAC,EAAE,GAAGI,EAAE,CAACA,EAAEL,EAAE,SAASI,EAAEd,EAAE,KAAKC,EAAEN,EAAE,MAAMkB,EAAEZ,EAAE,QAAQ,IAAIW,GAAE,CAAC,KAAK,SAAS,SAASF,EAAE,QAAQ,EAAE,OAAKI,EAAE,KAAP,GAAWd,EAAE,QAAQC,GAAGS,EAAEV,EAAE,MAAMU,EAAE,WAAW,EAAEA,EAAE,aAAaE,GAAEZ,EAAE,UAAU,OAAOU,EAAEgY,GAAGzY,EAAEW,EAAC,EAAEF,EAAE,aAAaT,EAAE,aAAa,UAAiBY,IAAP,KAASE,EAAE2X,GAAG7X,EAAEE,CAAC,GAAGA,EAAE+X,GAAG/X,EAAED,EAAEH,EAAE,IAAI,EAAEI,EAAE,OAAO,GAAGA,EAAE,OACnff,EAAEU,EAAE,OAAOV,EAAEU,EAAE,QAAQK,EAAEf,EAAE,MAAMU,EAAEA,EAAEK,EAAEA,EAAEf,EAAE,MAAMc,EAAEnB,EAAE,MAAM,cAAcmB,EAASA,IAAP,KAAS+f,GAAGlgB,CAAC,EAAE,CAAC,UAAUG,EAAE,UAAUH,EAAE,UAAU,KAAK,YAAYG,EAAE,WAAW,EAAEC,EAAE,cAAcD,EAAEC,EAAE,WAAWpB,EAAE,WAAW,CAACgB,EAAEX,EAAE,cAAc4gB,GAAUlgB,CAAC,CAAC,OAAAK,EAAEpB,EAAE,MAAMA,EAAEoB,EAAE,QAAQL,EAAEgY,GAAG3X,EAAE,CAAC,KAAK,UAAU,SAASL,EAAE,QAAQ,CAAC,GAAOV,EAAE,KAAK,KAAZ,IAAiBU,EAAE,MAAMC,GAAGD,EAAE,OAAOV,EAAEU,EAAE,QAAQ,KAAYf,IAAP,OAAWgB,EAAEX,EAAE,UAAiBW,IAAP,MAAUX,EAAE,UAAU,CAACL,CAAC,EAAEK,EAAE,OAAO,IAAIW,EAAE,KAAKhB,CAAC,GAAGK,EAAE,MAAMU,EAAEV,EAAE,cAAc,KAAYU,CAAC,CACnd,SAASsgB,GAAGrhB,EAAEK,EAAE,CAAC,OAAAA,EAAE+gB,GAAG,CAAC,KAAK,UAAU,SAAS/gB,CAAC,EAAEL,EAAE,KAAK,EAAE,IAAI,EAAEK,EAAE,OAAOL,EAASA,EAAE,MAAMK,CAAC,CAAC,SAASkhB,GAAGvhB,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAOA,IAAP,MAAU0X,GAAG1X,CAAC,EAAEqY,GAAG/Y,EAAEL,EAAE,MAAM,KAAKgB,CAAC,EAAEhB,EAAEqhB,GAAGhhB,EAAEA,EAAE,aAAa,QAAQ,EAAEL,EAAE,OAAO,EAAEK,EAAE,cAAc,KAAYL,CAAC,CAC/N,SAASshB,GAAGthB,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAE,CAAC,GAAGH,EAAG,OAAGX,EAAE,MAAM,KAAWA,EAAE,OAAO,KAAKU,EAAEqe,GAAG,MAAM/f,EAAE,GAAG,CAAC,CAAC,EAAEkiB,GAAGvhB,EAAEK,EAAEc,EAAEJ,CAAC,GAAYV,EAAE,gBAAT,MAA8BA,EAAE,MAAML,EAAE,MAAMK,EAAE,OAAO,IAAI,OAAKe,EAAEL,EAAE,SAAST,EAAED,EAAE,KAAKU,EAAEqgB,GAAG,CAAC,KAAK,UAAU,SAASrgB,EAAE,QAAQ,EAAET,EAAE,EAAE,IAAI,EAAEc,EAAE+X,GAAG/X,EAAEd,EAAEa,EAAE,IAAI,EAAEC,EAAE,OAAO,EAAEL,EAAE,OAAOV,EAAEe,EAAE,OAAOf,EAAEU,EAAE,QAAQK,EAAEf,EAAE,MAAMU,GAAOV,EAAE,KAAK,KAAZ,GAAgB+Y,GAAG/Y,EAAEL,EAAE,MAAM,KAAKmB,CAAC,EAAEd,EAAE,MAAM,cAAc6gB,GAAG/f,CAAC,EAAEd,EAAE,cAAc4gB,GAAU7f,GAAE,IAAQf,EAAE,KAAK,KAAZ,EAAe,OAAOkhB,GAAGvhB,EAAEK,EAAEc,EAAE,IAAI,EAAE,GAAUb,EAAE,OAAT,KAAc,CAChd,GADidS,EAAET,EAAE,aAAaA,EAAE,YAAY,QAC7eS,EAAE,IAAIG,EAAEH,EAAE,KAAK,OAAAA,EAAEG,EAAEE,EAAE,MAAM/B,EAAE,GAAG,CAAC,EAAE0B,EAAEqe,GAAGhe,EAAEL,EAAE,MAAM,EAASwgB,GAAGvhB,EAAEK,EAAEc,EAAEJ,CAAC,CAAC,CAAwB,GAAvBG,GAAOC,EAAEnB,EAAE,cAAT,EAAwB8Z,IAAI5Y,EAAE,CAAK,GAAJH,EAAEW,GAAYX,IAAP,KAAS,CAAC,OAAOI,EAAE,CAACA,EAAC,CAAE,IAAK,GAAEb,EAAE,EAAE,MAAM,IAAK,IAAGA,EAAE,EAAE,MAAM,IAAK,IAAG,IAAK,KAAI,IAAK,KAAI,IAAK,KAAI,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,MAAK,IAAK,OAAM,IAAK,OAAM,IAAK,OAAM,IAAK,QAAO,IAAK,QAAO,IAAK,QAAO,IAAK,SAAQ,IAAK,SAAQ,IAAK,SAAQ,IAAK,SAAQ,IAAK,UAAS,IAAK,UAAS,IAAK,UAASA,EAAE,GAAG,MAAM,IAAK,WAAUA,EAAE,UAAU,MAAM,QAAQA,EAAE,CAAC,CAACA,GAAOA,GAAGS,EAAE,eAAeI,MAAzB,EAA6B,EAAEb,EAC/eA,IAAJ,GAAOA,IAAIc,EAAE,YAAYA,EAAE,UAAUd,EAAE6Z,GAAGna,EAAEM,CAAC,EAAEgd,GAAGvc,EAAEf,EAAEM,EAAE,EAAE,EAAE,CAAC,OAAAkhB,GAAE,EAAGzgB,EAAEqe,GAAG,MAAM/f,EAAE,GAAG,CAAC,CAAC,EAASkiB,GAAGvhB,EAAEK,EAAEc,EAAEJ,CAAC,CAAC,CAAC,OAAUT,EAAE,OAAT,MAAqBD,EAAE,OAAO,IAAIA,EAAE,MAAML,EAAE,MAAMK,EAAEohB,GAAG,KAAK,KAAKzhB,CAAC,EAAEM,EAAE,YAAYD,EAAE,OAAKL,EAAEoB,EAAE,YAAY0W,GAAGxC,GAAGhV,EAAE,WAAW,EAAEuX,GAAGxX,EAAEK,GAAE,GAAGqX,GAAG,KAAY/X,IAAP,OAAWoX,GAAGC,IAAI,EAAEE,GAAGH,GAAGC,IAAI,EAAEG,GAAGJ,GAAGC,IAAI,EAAEC,GAAGC,GAAGvX,EAAE,GAAGwX,GAAGxX,EAAE,SAASsX,GAAGjX,GAAGA,EAAEghB,GAAGhhB,EAAEU,EAAE,QAAQ,EAAEV,EAAE,OAAO,KAAYA,EAAC,CAAC,SAASqhB,GAAG1hB,EAAEK,EAAEW,EAAE,CAAChB,EAAE,OAAOK,EAAE,IAAIU,EAAEf,EAAE,UAAiBe,IAAP,OAAWA,EAAE,OAAOV,GAAGuZ,GAAG5Z,EAAE,OAAOK,EAAEW,CAAC,CAAC,CACxc,SAAS2gB,GAAG3hB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIc,EAAEpB,EAAE,cAAqBoB,IAAP,KAASpB,EAAE,cAAc,CAAC,YAAYK,EAAE,UAAU,KAAK,mBAAmB,EAAE,KAAKU,EAAE,KAAKC,EAAE,SAASV,CAAC,GAAGc,EAAE,YAAYf,EAAEe,EAAE,UAAU,KAAKA,EAAE,mBAAmB,EAAEA,EAAE,KAAKL,EAAEK,EAAE,KAAKJ,EAAEI,EAAE,SAASd,EAAE,CAC3O,SAASshB,GAAG5hB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEV,EAAE,aAAaC,EAAES,EAAE,YAAYK,EAAEL,EAAE,KAAsC,GAAjCkf,GAAGjgB,EAAEK,EAAEU,EAAE,SAASC,CAAC,EAAED,EAAEF,GAAE,SAAgBE,EAAE,KAAP,EAAUA,EAAEA,EAAE,EAAE,EAAEV,EAAE,OAAO,QAAQ,CAAC,GAAUL,IAAP,OAAeA,EAAE,MAAM,OAAb,EAAkBA,EAAE,IAAIA,EAAEK,EAAE,MAAaL,IAAP,MAAU,CAAC,GAAQA,EAAE,MAAP,GAAkBA,EAAE,gBAAT,MAAwB0hB,GAAG1hB,EAAEgB,EAAEX,CAAC,UAAeL,EAAE,MAAP,GAAW0hB,GAAG1hB,EAAEgB,EAAEX,CAAC,UAAiBL,EAAE,QAAT,KAAe,CAACA,EAAE,MAAM,OAAOA,EAAEA,EAAEA,EAAE,MAAM,QAAQ,CAAC,GAAGA,IAAIK,EAAE,MAAML,EAAE,KAAYA,EAAE,UAAT,MAAkB,CAAC,GAAUA,EAAE,SAAT,MAAiBA,EAAE,SAASK,EAAE,MAAML,EAAEA,EAAEA,EAAE,MAAM,CAACA,EAAE,QAAQ,OAAOA,EAAE,OAAOA,EAAEA,EAAE,OAAO,CAACe,GAAG,CAAC,CAAQ,GAAPP,GAAEK,GAAEE,CAAC,GAAUV,EAAE,KAAK,KAAZ,EAAeA,EAAE,cAC/e,SAAU,QAAOC,EAAC,CAAE,IAAK,WAAqB,IAAVU,EAAEX,EAAE,MAAUC,EAAE,KAAYU,IAAP,MAAUhB,EAAEgB,EAAE,UAAiBhB,IAAP,MAAiBub,GAAGvb,CAAC,IAAX,OAAeM,EAAEU,GAAGA,EAAEA,EAAE,QAAQA,EAAEV,EAASU,IAAP,MAAUV,EAAED,EAAE,MAAMA,EAAE,MAAM,OAAOC,EAAEU,EAAE,QAAQA,EAAE,QAAQ,MAAM2gB,GAAGthB,EAAE,GAAGC,EAAEU,EAAEI,CAAC,EAAE,MAAM,IAAK,YAA6B,IAAjBJ,EAAE,KAAKV,EAAED,EAAE,MAAUA,EAAE,MAAM,KAAYC,IAAP,MAAU,CAAe,GAAdN,EAAEM,EAAE,UAAoBN,IAAP,MAAiBub,GAAGvb,CAAC,IAAX,KAAa,CAACK,EAAE,MAAMC,EAAE,KAAK,CAACN,EAAEM,EAAE,QAAQA,EAAE,QAAQU,EAAEA,EAAEV,EAAEA,EAAEN,CAAC,CAAC2hB,GAAGthB,EAAE,GAAGW,EAAE,KAAKI,CAAC,EAAE,MAAM,IAAK,WAAWugB,GAAGthB,EAAE,GAAG,KAAK,KAAK,MAAM,EAAE,MAAM,QAAQA,EAAE,cAAc,IAAI,CAAC,OAAOA,EAAE,KAAK,CAC7d,SAASwgB,GAAG7gB,EAAEK,EAAE,EAAMA,EAAE,KAAK,KAAZ,GAAuBL,IAAP,OAAWA,EAAE,UAAU,KAAKK,EAAE,UAAU,KAAKA,EAAE,OAAO,EAAE,CAAC,SAAS8f,GAAGngB,EAAEK,EAAEW,EAAE,CAAuD,GAA/ChB,IAAP,OAAWK,EAAE,aAAaL,EAAE,cAAc4a,IAAIva,EAAE,OAAcW,EAAEX,EAAE,cAAT,EAAqB,OAAO,KAAK,GAAUL,IAAP,MAAUK,EAAE,QAAQL,EAAE,MAAM,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE,GAAUgB,EAAE,QAAT,KAAe,CAA4C,IAA3CL,EAAEK,EAAE,MAAMW,EAAE+X,GAAG/Y,EAAEA,EAAE,YAAY,EAAEK,EAAE,MAAMW,EAAMA,EAAE,OAAOX,EAASL,EAAE,UAAT,MAAkBA,EAAEA,EAAE,QAAQgB,EAAEA,EAAE,QAAQ+X,GAAG/Y,EAAEA,EAAE,YAAY,EAAEgB,EAAE,OAAOX,EAAEW,EAAE,QAAQ,IAAI,CAAC,OAAOX,EAAE,KAAK,CAC9a,SAASwhB,GAAG7hB,EAAEK,EAAEW,EAAE,CAAC,OAAOX,EAAE,IAAG,CAAE,IAAK,GAAE0gB,GAAG1gB,CAAC,EAAEmY,GAAE,EAAG,MAAM,IAAK,GAAE6C,GAAGhb,CAAC,EAAE,MAAM,IAAK,GAAE+V,GAAG/V,EAAE,IAAI,GAAGmW,GAAGnW,CAAC,EAAE,MAAM,IAAK,GAAE8a,GAAG9a,EAAEA,EAAE,UAAU,aAAa,EAAE,MAAM,IAAK,IAAG,IAAIU,EAAEV,EAAE,KAAK,SAASC,EAAED,EAAE,cAAc,MAAMG,GAAE8Y,GAAGvY,EAAE,aAAa,EAAEA,EAAE,cAAcT,EAAE,MAAM,IAAK,IAAqB,GAAlBS,EAAEV,EAAE,cAAwBU,IAAP,KAAU,OAAUA,EAAE,aAAT,MAA2BP,GAAEK,GAAEA,GAAE,QAAQ,CAAC,EAAER,EAAE,OAAO,IAAI,OAAaW,EAAEX,EAAE,MAAM,cAAf,EAAkC8gB,GAAGnhB,EAAEK,EAAEW,CAAC,GAAER,GAAEK,GAAEA,GAAE,QAAQ,CAAC,EAAEb,EAAEmgB,GAAGngB,EAAEK,EAAEW,CAAC,EAAgBhB,IAAP,KAASA,EAAE,QAAQ,MAAKQ,GAAEK,GAAEA,GAAE,QAAQ,CAAC,EAAE,MAAM,IAAK,IAC7d,GADgeE,GAAOC,EACrfX,EAAE,cAD8e,GAC1dL,EAAE,MAAM,OAAb,EAAkB,CAAC,GAAGe,EAAE,OAAO6gB,GAAG5hB,EAAEK,EAAEW,CAAC,EAAEX,EAAE,OAAO,GAAG,CAA6F,GAA5FC,EAAED,EAAE,cAAqBC,IAAP,OAAWA,EAAE,UAAU,KAAKA,EAAE,KAAK,KAAKA,EAAE,WAAW,MAAME,GAAEK,GAAEA,GAAE,OAAO,EAAKE,EAAE,MAAW,OAAO,KAAK,IAAK,IAAG,IAAK,IAAG,OAAOV,EAAE,MAAM,EAAEmgB,GAAGxgB,EAAEK,EAAEW,CAAC,CAAC,CAAC,OAAOmf,GAAGngB,EAAEK,EAAEW,CAAC,CAAC,CAAC,IAAI8gB,GAAGC,GAAGC,GAAGC,GACxQH,GAAG,SAAS9hB,EAAEK,EAAE,CAAC,QAAQW,EAAEX,EAAE,MAAaW,IAAP,MAAU,CAAC,GAAOA,EAAE,MAAN,GAAeA,EAAE,MAAN,EAAUhB,EAAE,YAAYgB,EAAE,SAAS,UAAcA,EAAE,MAAN,GAAkBA,EAAE,QAAT,KAAe,CAACA,EAAE,MAAM,OAAOA,EAAEA,EAAEA,EAAE,MAAM,QAAQ,CAAC,GAAGA,IAAIX,EAAE,MAAM,KAAYW,EAAE,UAAT,MAAkB,CAAC,GAAUA,EAAE,SAAT,MAAiBA,EAAE,SAASX,EAAE,OAAOW,EAAEA,EAAE,MAAM,CAACA,EAAE,QAAQ,OAAOA,EAAE,OAAOA,EAAEA,EAAE,OAAO,CAAC,EAAE+gB,GAAG,UAAU,GACvTC,GAAG,SAAShiB,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAEN,EAAE,cAAc,GAAGM,IAAIS,EAAE,CAACf,EAAEK,EAAE,UAAU6a,GAAGH,GAAG,OAAO,EAAE,IAAI3Z,EAAE,KAAK,OAAOJ,EAAC,CAAE,IAAK,QAAQV,EAAEkF,GAAGxF,EAAEM,CAAC,EAAES,EAAEyE,GAAGxF,EAAEe,CAAC,EAAEK,EAAE,GAAG,MAAM,IAAK,SAASd,EAAEP,EAAE,GAAGO,EAAE,CAAC,MAAM,MAAM,CAAC,EAAES,EAAEhB,EAAE,GAAGgB,EAAE,CAAC,MAAM,MAAM,CAAC,EAAEK,EAAE,GAAG,MAAM,IAAK,WAAWd,EAAE0F,GAAGhG,EAAEM,CAAC,EAAES,EAAEiF,GAAGhG,EAAEe,CAAC,EAAEK,EAAE,GAAG,MAAM,QAAqB,OAAOd,EAAE,SAAtB,YAA4C,OAAOS,EAAE,SAAtB,aAAgCf,EAAE,QAAQ4U,GAAG,CAAC9N,GAAG9F,EAAED,CAAC,EAAE,IAAII,EAAEH,EAAE,KAAK,IAAI7B,MAAKmB,EAAE,GAAG,CAACS,EAAE,eAAe5B,EAAC,GAAGmB,EAAE,eAAenB,EAAC,GAASmB,EAAEnB,EAAC,GAAT,KAAW,GAAaA,KAAV,QAAY,CAAC,IAAI+B,EAAEZ,EAAEnB,EAAC,EAAE,IAAIgC,KAAKD,EAAEA,EAAE,eAAeC,CAAC,IAClfH,IAAIA,EAAE,IAAIA,EAAEG,CAAC,EAAE,GAAG,MAAiChC,KAA5B,2BAA4CA,KAAb,YAAmDA,KAAnC,kCAAmEA,KAA7B,4BAA8CA,KAAd,cAAkB0D,EAAG,eAAe1D,EAAC,EAAEiC,IAAIA,EAAE,KAAKA,EAAEA,GAAG,IAAI,KAAKjC,GAAE,IAAI,GAAG,IAAIA,MAAK4B,EAAE,CAAC,IAAIE,GAAEF,EAAE5B,EAAC,EAAwB,GAAtB+B,EAAQZ,GAAN,KAAQA,EAAEnB,EAAC,EAAE,OAAU4B,EAAE,eAAe5B,EAAC,GAAG8B,KAAIC,IAAUD,IAAN,MAAeC,GAAN,MAAS,GAAa/B,KAAV,QAAY,GAAG+B,EAAE,CAAC,IAAIC,KAAKD,EAAE,CAACA,EAAE,eAAeC,CAAC,GAAGF,IAAGA,GAAE,eAAeE,CAAC,IAAIH,IAAIA,EAAE,IAAIA,EAAEG,CAAC,EAAE,IAAI,IAAIA,KAAKF,GAAEA,GAAE,eAAeE,CAAC,GAAGD,EAAEC,CAAC,IAAIF,GAAEE,CAAC,IAAIH,IAAIA,EAAE,IAAIA,EAAEG,CAAC,EAAEF,GAAEE,CAAC,EAAE,MAAMH,IAAII,IAAIA,EAAE,IAAIA,EAAE,KAAKjC,GACpf6B,CAAC,GAAGA,EAAEC,QAAkC9B,KAA5B,2BAA+B8B,GAAEA,GAAEA,GAAE,OAAO,OAAOC,EAAEA,EAAEA,EAAE,OAAO,OAAaD,IAAN,MAASC,IAAID,KAAIG,EAAEA,GAAG,IAAI,KAAKjC,GAAE8B,EAAC,GAAgB9B,KAAb,WAA0B,OAAO8B,IAAlB,UAAgC,OAAOA,IAAlB,WAAsBG,EAAEA,GAAG,IAAI,KAAKjC,GAAE,GAAG8B,EAAC,EAAqC9B,KAAnC,kCAAmEA,KAA7B,6BAAiC0D,EAAG,eAAe1D,EAAC,GAAS8B,IAAN,MAAsB9B,KAAb,YAAgBgB,GAAE,SAASH,CAAC,EAAEoB,GAAGF,IAAID,KAAIG,EAAE,MAAMA,EAAEA,GAAG,IAAI,KAAKjC,GAAE8B,EAAC,EAAE,CAACD,IAAII,EAAEA,GAAG,IAAI,KAAK,QAAQJ,CAAC,EAAE,IAAI7B,GAAEiC,GAAKf,EAAE,YAAYlB,MAAEkB,EAAE,OAAO,EAAC,CAAC,EAAE4hB,GAAG,SAASjiB,EAAEK,EAAEW,EAAED,EAAE,CAACC,IAAID,IAAIV,EAAE,OAAO,EAAE,EAChe,SAAS6hB,GAAGliB,EAAEK,EAAE,CAAC,GAAG,CAACK,GAAE,OAAOV,EAAE,SAAQ,CAAE,IAAK,SAASK,EAAEL,EAAE,KAAK,QAAQgB,EAAE,KAAYX,IAAP,MAAiBA,EAAE,YAAT,OAAqBW,EAAEX,GAAGA,EAAEA,EAAE,QAAeW,IAAP,KAAShB,EAAE,KAAK,KAAKgB,EAAE,QAAQ,KAAK,MAAM,IAAK,YAAYA,EAAEhB,EAAE,KAAK,QAAQe,EAAE,KAAYC,IAAP,MAAiBA,EAAE,YAAT,OAAqBD,EAAEC,GAAGA,EAAEA,EAAE,QAAeD,IAAP,KAASV,GAAUL,EAAE,OAAT,KAAcA,EAAE,KAAK,KAAKA,EAAE,KAAK,QAAQ,KAAKe,EAAE,QAAQ,IAAI,CAAC,CAC5U,SAASa,GAAE5B,EAAE,CAAC,IAAIK,EAASL,EAAE,YAAT,MAAoBA,EAAE,UAAU,QAAQA,EAAE,MAAMgB,EAAE,EAAED,EAAE,EAAE,GAAGV,EAAE,QAAQC,EAAEN,EAAE,MAAaM,IAAP,MAAUU,GAAGV,EAAE,MAAMA,EAAE,WAAWS,GAAGT,EAAE,aAAa,SAASS,GAAGT,EAAE,MAAM,SAASA,EAAE,OAAON,EAAEM,EAAEA,EAAE,YAAa,KAAIA,EAAEN,EAAE,MAAaM,IAAP,MAAUU,GAAGV,EAAE,MAAMA,EAAE,WAAWS,GAAGT,EAAE,aAAaS,GAAGT,EAAE,MAAMA,EAAE,OAAON,EAAEM,EAAEA,EAAE,QAAQ,OAAAN,EAAE,cAAce,EAAEf,EAAE,WAAWgB,EAASX,CAAC,CAC7V,SAAS8hB,GAAGniB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEV,EAAE,aAAmB,OAANuX,GAAGvX,CAAC,EAASA,EAAE,KAAK,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAK,GAAE,IAAK,IAAG,IAAK,GAAE,IAAK,GAAE,IAAK,IAAG,IAAK,GAAE,IAAK,IAAG,OAAOuB,GAAEvB,CAAC,EAAE,KAAK,IAAK,GAAE,OAAO+V,GAAG/V,EAAE,IAAI,GAAGgW,GAAE,EAAGzU,GAAEvB,CAAC,EAAE,KAAK,IAAK,GAAE,OAAAU,EAAEV,EAAE,UAAU+a,KAAKhb,GAAE6V,EAAE,EAAE7V,GAAEK,EAAC,EAAEgb,GAAE,EAAG1a,EAAE,iBAAiBA,EAAE,QAAQA,EAAE,eAAeA,EAAE,eAAe,OAAgBf,IAAP,MAAiBA,EAAE,QAAT,QAAesY,GAAGjY,CAAC,EAAEA,EAAE,OAAO,EAASL,IAAP,MAAUA,EAAE,cAAc,eAAmBK,EAAE,MAAM,OAAb,IAAoBA,EAAE,OAAO,KAAY0X,KAAP,OAAYqK,GAAGrK,EAAE,EAAEA,GAAG,QAAOgK,GAAG/hB,EAAEK,CAAC,EAAEuB,GAAEvB,CAAC,EAAS,KAAK,IAAK,GAAEib,GAAGjb,CAAC,EAAE,IAAIC,EAAE4a,GAAGD,GAAG,OAAO,EACpf,GAATja,EAAEX,EAAE,KAAeL,IAAP,MAAgBK,EAAE,WAAR,KAAkB2hB,GAAGhiB,EAAEK,EAAEW,EAAED,EAAET,CAAC,EAAEN,EAAE,MAAMK,EAAE,MAAMA,EAAE,OAAO,IAAIA,EAAE,OAAO,aAAa,CAAC,GAAG,CAACU,EAAE,CAAC,GAAUV,EAAE,YAAT,KAAmB,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAAuC,GAAEvB,CAAC,EAAS,IAAI,CAAkB,GAAjBL,EAAEkb,GAAGH,GAAG,OAAO,EAAKzC,GAAGjY,CAAC,EAAE,CAACU,EAAEV,EAAE,UAAUW,EAAEX,EAAE,KAAK,IAAIe,EAAEf,EAAE,cAA+C,OAAjCU,EAAE0U,EAAE,EAAEpV,EAAEU,EAAE2U,EAAE,EAAEtU,EAAEpB,GAAOK,EAAE,KAAK,KAAZ,EAAsBW,EAAC,CAAE,IAAK,SAASb,GAAE,SAASY,CAAC,EAAEZ,GAAE,QAAQY,CAAC,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQZ,GAAE,OAAOY,CAAC,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAIT,EAAE,EAAEA,EAAEkT,GAAG,OAAOlT,IAAIH,GAAEqT,GAAGlT,CAAC,EAAES,CAAC,EAAE,MAAM,IAAK,SAASZ,GAAE,QAAQY,CAAC,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOZ,GAAE,QACnhBY,CAAC,EAAEZ,GAAE,OAAOY,CAAC,EAAE,MAAM,IAAK,UAAUZ,GAAE,SAASY,CAAC,EAAE,MAAM,IAAK,QAAQ0E,GAAG1E,EAAEK,CAAC,EAAEjB,GAAE,UAAUY,CAAC,EAAE,MAAM,IAAK,SAASA,EAAE,cAAc,CAAC,YAAY,CAAC,CAACK,EAAE,QAAQ,EAAEjB,GAAE,UAAUY,CAAC,EAAE,MAAM,IAAK,WAAWkF,GAAGlF,EAAEK,CAAC,EAAEjB,GAAE,UAAUY,CAAC,CAAC,CAAC+F,GAAG9F,EAAEI,CAAC,EAAEd,EAAE,KAAK,QAAQa,KAAKC,EAAE,GAAGA,EAAE,eAAeD,CAAC,EAAE,CAAC,IAAID,EAAEE,EAAED,CAAC,EAAeA,IAAb,WAA0B,OAAOD,GAAlB,SAAoBH,EAAE,cAAcG,IAASE,EAAE,2BAAP,IAAiCuT,GAAG5T,EAAE,YAAYG,EAAElB,CAAC,EAAEM,EAAE,CAAC,WAAWY,CAAC,GAAc,OAAOA,GAAlB,UAAqBH,EAAE,cAAc,GAAGG,IAASE,EAAE,2BAAP,IAAiCuT,GAAG5T,EAAE,YAC1eG,EAAElB,CAAC,EAAEM,EAAE,CAAC,WAAW,GAAGY,CAAC,GAAG2B,EAAG,eAAe1B,CAAC,GAASD,GAAN,MAAsBC,IAAb,YAAgBhB,GAAE,SAASY,CAAC,CAAC,CAAC,OAAOC,GAAG,IAAK,QAAQqE,GAAGtE,CAAC,EAAE8E,GAAG9E,EAAEK,EAAE,EAAE,EAAE,MAAM,IAAK,WAAWiE,GAAGtE,CAAC,EAAEoF,GAAGpF,CAAC,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,MAAM,QAAqB,OAAOK,EAAE,SAAtB,aAAgCL,EAAE,QAAQ6T,GAAG,CAAC7T,EAAET,EAAED,EAAE,YAAYU,EAASA,IAAP,OAAWV,EAAE,OAAO,EAAE,KAAK,CAACc,EAAMb,EAAE,WAAN,EAAeA,EAAEA,EAAE,cAA+CN,IAAjC,iCAAqCA,EAAEoG,GAAGpF,CAAC,GAAoChB,IAAjC,+BAA8CgB,IAAX,UAAchB,EAAEmB,EAAE,cAAc,KAAK,EAAEnB,EAAE,UAAU,qBAAuBA,EAAEA,EAAE,YAAYA,EAAE,UAAU,GAC9f,OAAOe,EAAE,IAApB,SAAuBf,EAAEmB,EAAE,cAAcH,EAAE,CAAC,GAAGD,EAAE,EAAE,CAAC,GAAGf,EAAEmB,EAAE,cAAcH,CAAC,EAAaA,IAAX,WAAeG,EAAEnB,EAAEe,EAAE,SAASI,EAAE,SAAS,GAAGJ,EAAE,OAAOI,EAAE,KAAKJ,EAAE,QAAQf,EAAEmB,EAAE,gBAAgBnB,EAAEgB,CAAC,EAAEhB,EAAEyV,EAAE,EAAEpV,EAAEL,EAAE0V,EAAE,EAAE3U,EAAE+gB,GAAG9hB,EAAEK,EAAE,GAAG,EAAE,EAAEA,EAAE,UAAUL,EAAEA,EAAE,CAAW,OAAVmB,EAAE4F,GAAG/F,EAAED,CAAC,EAASC,EAAC,CAAE,IAAK,SAASb,GAAE,SAASH,CAAC,EAAEG,GAAE,QAAQH,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,SAAS,IAAK,SAAS,IAAK,QAAQZ,GAAE,OAAOH,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,QAAQ,IAAK,QAAQ,IAAIT,EAAE,EAAEA,EAAEkT,GAAG,OAAOlT,IAAIH,GAAEqT,GAAGlT,CAAC,EAAEN,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,SAASZ,GAAE,QAAQH,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,MAAM,IAAK,QAAQ,IAAK,OAAOZ,GAAE,QAClfH,CAAC,EAAEG,GAAE,OAAOH,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,UAAUZ,GAAE,SAASH,CAAC,EAAEM,EAAES,EAAE,MAAM,IAAK,QAAQ0E,GAAGzF,EAAEe,CAAC,EAAET,EAAEkF,GAAGxF,EAAEe,CAAC,EAAEZ,GAAE,UAAUH,CAAC,EAAE,MAAM,IAAK,SAASM,EAAES,EAAE,MAAM,IAAK,SAASf,EAAE,cAAc,CAAC,YAAY,CAAC,CAACe,EAAE,QAAQ,EAAET,EAAEP,EAAE,GAAGgB,EAAE,CAAC,MAAM,MAAM,CAAC,EAAEZ,GAAE,UAAUH,CAAC,EAAE,MAAM,IAAK,WAAWiG,GAAGjG,EAAEe,CAAC,EAAET,EAAE0F,GAAGhG,EAAEe,CAAC,EAAEZ,GAAE,UAAUH,CAAC,EAAE,MAAM,QAAQM,EAAES,CAAC,CAAC+F,GAAG9F,EAAEV,CAAC,EAAEY,EAAEZ,EAAE,IAAIc,KAAKF,EAAE,GAAGA,EAAE,eAAeE,CAAC,EAAE,CAAC,IAAIH,GAAEC,EAAEE,CAAC,EAAYA,IAAV,QAAYwF,GAAG5G,EAAEiB,EAAC,EAA8BG,IAA5B,2BAA+BH,GAAEA,GAAEA,GAAE,OAAO,OAAaA,IAAN,MAASsF,GAAGvG,EAAEiB,EAAC,GAAgBG,IAAb,WAA0B,OAAOH,IAAlB,UACxdD,IAD6e,YACreC,KAAL,KAASuF,GAAGxG,EAAEiB,EAAC,EAAa,OAAOA,IAAlB,UAAqBuF,GAAGxG,EAAE,GAAGiB,EAAC,EAAqCG,IAAnC,kCAAmEA,IAA7B,4BAA8CA,IAAd,cAAkByB,EAAG,eAAezB,CAAC,EAAQH,IAAN,MAAsBG,IAAb,YAAgBjB,GAAE,SAASH,CAAC,EAAQiB,IAAN,MAASyC,EAAG1D,EAAEoB,EAAEH,GAAEE,CAAC,EAAE,CAAC,OAAOH,EAAC,CAAE,IAAK,QAAQqE,GAAGrF,CAAC,EAAE6F,GAAG7F,EAAEe,EAAE,EAAE,EAAE,MAAM,IAAK,WAAWsE,GAAGrF,CAAC,EAAEmG,GAAGnG,CAAC,EAAE,MAAM,IAAK,SAAee,EAAE,OAAR,MAAef,EAAE,aAAa,QAAQ,GAAGkF,GAAGnE,EAAE,KAAK,CAAC,EAAE,MAAM,IAAK,SAASf,EAAE,SAAS,CAAC,CAACe,EAAE,SAASK,EAAEL,EAAE,MAAYK,GAAN,KAAQ2E,GAAG/F,EAAE,CAAC,CAACe,EAAE,SAASK,EAAE,EAAE,EAAQL,EAAE,cAAR,MAAsBgF,GAAG/F,EAAE,CAAC,CAACe,EAAE,SAASA,EAAE,aAClf,EAAE,EAAE,MAAM,QAAqB,OAAOT,EAAE,SAAtB,aAAgCN,EAAE,QAAQ4U,GAAG,CAAC,OAAO5T,EAAC,CAAE,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAWD,EAAE,CAAC,CAACA,EAAE,UAAU,MAAMf,EAAE,IAAK,MAAMe,EAAE,GAAG,MAAMf,EAAE,QAAQe,EAAE,EAAE,CAAC,CAACA,IAAIV,EAAE,OAAO,EAAE,CAAQA,EAAE,MAAT,OAAeA,EAAE,OAAO,IAAIA,EAAE,OAAO,QAAQ,CAAC,OAAAuB,GAAEvB,CAAC,EAAS,KAAK,IAAK,GAAE,GAAGL,GAASK,EAAE,WAAR,KAAkB4hB,GAAGjiB,EAAEK,EAAEL,EAAE,cAAce,CAAC,MAAM,CAAC,GAAc,OAAOA,GAAlB,UAA4BV,EAAE,YAAT,KAAmB,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAkC,GAAhC2B,EAAEka,GAAGD,GAAG,OAAO,EAAEC,GAAGH,GAAG,OAAO,EAAKzC,GAAGjY,CAAC,EAAE,CAAyC,GAAxCU,EAAEV,EAAE,UAAUW,EAAEX,EAAE,cAAcU,EAAE0U,EAAE,EAAEpV,GAAKe,EAAEL,EAAE,YAAYC,KAAKhB,EACvf6X,GAAU7X,IAAP,MAAS,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE2U,GAAG5T,EAAE,UAAUC,GAAOhB,EAAE,KAAK,KAAZ,CAAc,EAAE,MAAM,IAAK,GAAOA,EAAE,cAAc,2BAArB,IAA+C2U,GAAG5T,EAAE,UAAUC,GAAOhB,EAAE,KAAK,KAAZ,CAAc,CAAC,CAACoB,IAAIf,EAAE,OAAO,EAAE,MAAMU,GAAOC,EAAE,WAAN,EAAeA,EAAEA,EAAE,eAAe,eAAeD,CAAC,EAAEA,EAAE0U,EAAE,EAAEpV,EAAEA,EAAE,UAAUU,CAAC,CAAC,OAAAa,GAAEvB,CAAC,EAAS,KAAK,IAAK,IAA0B,GAAvBD,GAAES,EAAC,EAAEE,EAAEV,EAAE,cAAwBL,IAAP,MAAiBA,EAAE,gBAAT,MAA+BA,EAAE,cAAc,aAAvB,KAAkC,CAAC,GAAGU,IAAUoX,KAAP,OAAgBzX,EAAE,KAAK,KAAZ,IAAqBA,EAAE,MAAM,OAAb,EAAkBkY,GAAE,EAAGC,GAAE,EAAGnY,EAAE,OAAO,MAAMe,EAAE,WAAWA,EAAEkX,GAAGjY,CAAC,EAASU,IAAP,MAAiBA,EAAE,aAAT,KAAoB,CAAC,GACzff,IAD4f,KAC1f,CAAC,GAAG,CAACoB,EAAE,MAAM,MAAM/B,EAAE,GAAG,CAAC,EAAiD,GAA/C+B,EAAEf,EAAE,cAAce,EAASA,IAAP,KAASA,EAAE,WAAW,KAAQ,CAACA,EAAE,MAAM,MAAM/B,EAAE,GAAG,CAAC,EAAE+B,EAAEqU,EAAE,EAAEpV,CAAC,MAAMmY,GAAE,GAAQnY,EAAE,MAAM,OAAb,IAAoBA,EAAE,cAAc,MAAMA,EAAE,OAAO,EAAEuB,GAAEvB,CAAC,EAAEe,EAAE,EAAE,MAAa2W,KAAP,OAAYqK,GAAGrK,EAAE,EAAEA,GAAG,MAAM3W,EAAE,GAAG,GAAG,CAACA,EAAE,OAAOf,EAAE,MAAM,MAAMA,EAAE,IAAI,CAAC,OAAQA,EAAE,MAAM,OAAb,GAAyBA,EAAE,MAAMW,EAAEX,IAAEU,EAASA,IAAP,KAASA,KAAYf,IAAP,MAAiBA,EAAE,gBAAT,OAAyBe,IAAIV,EAAE,MAAM,OAAO,MAAUA,EAAE,KAAK,KAAZ,IAAwBL,IAAP,OAAea,GAAE,QAAQ,KAAf,EAAsBgB,KAAJ,IAAQA,GAAE,GAAG2f,GAAE,IAAYnhB,EAAE,cAAT,OAAuBA,EAAE,OAAO,GAAGuB,GAAEvB,CAAC,EAAS,MAAK,IAAK,GAAE,OAAO+a,GAAE,EACvf2G,GAAG/hB,EAAEK,CAAC,EAASL,IAAP,MAAU+T,GAAG1T,EAAE,UAAU,aAAa,EAAEuB,GAAEvB,CAAC,EAAE,KAAK,IAAK,IAAG,OAAOsZ,GAAGtZ,EAAE,KAAK,QAAQ,EAAEuB,GAAEvB,CAAC,EAAE,KAAK,IAAK,IAAG,OAAO+V,GAAG/V,EAAE,IAAI,GAAGgW,KAAKzU,GAAEvB,CAAC,EAAE,KAAK,IAAK,IAA0B,GAAvBD,GAAES,EAAC,EAAEO,EAAEf,EAAE,cAAwBe,IAAP,KAAS,OAAOQ,GAAEvB,CAAC,EAAE,KAAuC,GAAlCU,GAAOV,EAAE,MAAM,OAAb,EAAkBc,EAAEC,EAAE,UAAoBD,IAAP,KAAS,GAAGJ,EAAEmhB,GAAG9gB,EAAE,EAAE,MAAM,CAAC,GAAOS,KAAJ,GAAc7B,IAAP,OAAeA,EAAE,MAAM,OAAb,EAAkB,IAAIA,EAAEK,EAAE,MAAaL,IAAP,MAAU,CAAS,GAARmB,EAAEoa,GAAGvb,CAAC,EAAYmB,IAAP,KAAS,CAAmG,IAAlGd,EAAE,OAAO,IAAI6hB,GAAG9gB,EAAE,EAAE,EAAEL,EAAEI,EAAE,YAAmBJ,IAAP,OAAWV,EAAE,YAAYU,EAAEV,EAAE,OAAO,GAAGA,EAAE,aAAa,EAAEU,EAAEC,EAAMA,EAAEX,EAAE,MAAaW,IAAP,MAAUI,EAAEJ,EAAEhB,EAAEe,EAAEK,EAAE,OAAO,SAC7eD,EAAEC,EAAE,UAAiBD,IAAP,MAAUC,EAAE,WAAW,EAAEA,EAAE,MAAMpB,EAAEoB,EAAE,MAAM,KAAKA,EAAE,aAAa,EAAEA,EAAE,cAAc,KAAKA,EAAE,cAAc,KAAKA,EAAE,YAAY,KAAKA,EAAE,aAAa,KAAKA,EAAE,UAAU,OAAOA,EAAE,WAAWD,EAAE,WAAWC,EAAE,MAAMD,EAAE,MAAMC,EAAE,MAAMD,EAAE,MAAMC,EAAE,aAAa,EAAEA,EAAE,UAAU,KAAKA,EAAE,cAAcD,EAAE,cAAcC,EAAE,cAAcD,EAAE,cAAcC,EAAE,YAAYD,EAAE,YAAYC,EAAE,KAAKD,EAAE,KAAKnB,EAAEmB,EAAE,aAAaC,EAAE,aAAoBpB,IAAP,KAAS,KAAK,CAAC,MAAMA,EAAE,MAAM,aAAaA,EAAE,YAAY,GAAGgB,EAAEA,EAAE,QAAQ,OAAAR,GAAEK,GAAEA,GAAE,QAAQ,EAAE,CAAC,EAASR,EAAE,KAAK,CAACL,EAClgBA,EAAE,OAAO,CAAQoB,EAAE,OAAT,MAAenB,GAAC,EAAGoiB,KAAKhiB,EAAE,OAAO,IAAIU,EAAE,GAAGmhB,GAAG9gB,EAAE,EAAE,EAAEf,EAAE,MAAM,QAAQ,KAAK,CAAC,GAAG,CAACU,EAAE,GAAGf,EAAEub,GAAGpa,CAAC,EAASnB,IAAP,MAAU,GAAGK,EAAE,OAAO,IAAIU,EAAE,GAAGC,EAAEhB,EAAE,YAAmBgB,IAAP,OAAWX,EAAE,YAAYW,EAAEX,EAAE,OAAO,GAAG6hB,GAAG9gB,EAAE,EAAE,EAASA,EAAE,OAAT,MAA0BA,EAAE,WAAb,UAAuB,CAACD,EAAE,WAAW,CAACT,GAAE,OAAOkB,GAAEvB,CAAC,EAAE,SAAU,GAAEJ,GAAC,EAAGmB,EAAE,mBAAmBihB,IAAiBrhB,IAAb,aAAiBX,EAAE,OAAO,IAAIU,EAAE,GAAGmhB,GAAG9gB,EAAE,EAAE,EAAEf,EAAE,MAAM,SAASe,EAAE,aAAaD,EAAE,QAAQd,EAAE,MAAMA,EAAE,MAAMc,IAAIH,EAAEI,EAAE,KAAYJ,IAAP,KAASA,EAAE,QAAQG,EAAEd,EAAE,MAAMc,EAAEC,EAAE,KAAKD,EAAE,CAAC,OAAUC,EAAE,OAAT,MAAqBf,EAAEe,EAAE,KAAKA,EAAE,UAC9ef,EAAEe,EAAE,KAAKf,EAAE,QAAQe,EAAE,mBAAmBnB,KAAII,EAAE,QAAQ,KAAKW,EAAEH,GAAE,QAAQL,GAAEK,GAAEE,EAAEC,EAAE,EAAE,EAAEA,EAAE,CAAC,EAAEX,IAAEuB,GAAEvB,CAAC,EAAS,MAAK,IAAK,IAAG,IAAK,IAAG,OAAOiiB,GAAE,EAAGvhB,EAASV,EAAE,gBAAT,KAA8BL,IAAP,MAAiBA,EAAE,gBAAT,OAAyBe,IAAIV,EAAE,OAAO,MAAMU,IAAQV,EAAE,KAAK,KAAZ,GAAoBqgB,GAAG,cAAR,IAAsB9e,GAAEvB,CAAC,EAAEA,EAAE,aAAa,IAAIA,EAAE,OAAO,OAAOuB,GAAEvB,CAAC,EAAE,KAAK,IAAK,IAAG,OAAO,KAAK,IAAK,IAAG,OAAO,IAAI,CAAC,MAAM,MAAMhB,EAAE,IAAIgB,EAAE,GAAG,CAAC,CAAE,CAClX,SAASkiB,GAAGviB,EAAEK,EAAE,CAAO,OAANuX,GAAGvX,CAAC,EAASA,EAAE,IAAG,CAAE,IAAK,GAAE,OAAO+V,GAAG/V,EAAE,IAAI,GAAGgW,GAAE,EAAGrW,EAAEK,EAAE,MAAML,EAAE,OAAOK,EAAE,MAAML,EAAE,OAAO,IAAIK,GAAG,KAAK,IAAK,GAAE,OAAO+a,GAAE,EAAGhb,GAAE6V,EAAE,EAAE7V,GAAEK,EAAC,EAAEgb,GAAE,EAAGzb,EAAEK,EAAE,OAAWL,EAAE,SAAP,IAAoBA,EAAE,OAAP,GAAaK,EAAE,MAAML,EAAE,OAAO,IAAIK,GAAG,KAAK,IAAK,GAAE,OAAOib,GAAGjb,CAAC,EAAE,KAAK,IAAK,IAA0B,GAAvBD,GAAES,EAAC,EAAEb,EAAEK,EAAE,cAAwBL,IAAP,MAAiBA,EAAE,aAAT,KAAoB,CAAC,GAAUK,EAAE,YAAT,KAAmB,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAEmZ,GAAE,CAAE,CAAC,OAAAxY,EAAEK,EAAE,MAAaL,EAAE,OAAOK,EAAE,MAAML,EAAE,OAAO,IAAIK,GAAG,KAAK,IAAK,IAAG,OAAOD,GAAES,EAAC,EAAE,KAAK,IAAK,GAAE,OAAOua,GAAE,EAAG,KAAK,IAAK,IAAG,OAAOzB,GAAGtZ,EAAE,KAAK,QAAQ,EAAE,KAAK,IAAK,IAAG,IAAK,IAAG,OAAOiiB,GAAE,EAC5gB,KAAK,IAAK,IAAG,OAAO,KAAK,QAAQ,OAAO,IAAI,CAAC,CAAC,IAAIE,GAAG,GAAG1gB,GAAE,GAAG2gB,GAAgB,OAAO,SAApB,WAA4B,QAAQ,IAAI1gB,GAAE,KAAK,SAAS2gB,GAAG1iB,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,IAAI,GAAUgB,IAAP,KAAS,GAAgB,OAAOA,GAApB,WAAsB,GAAG,CAACA,EAAE,IAAI,CAAC,OAAOD,EAAE,CAACiB,GAAEhC,EAAEK,EAAEU,CAAC,CAAC,MAAMC,EAAE,QAAQ,IAAI,CAAC,SAAS2hB,GAAG3iB,EAAEK,EAAEW,EAAE,CAAC,GAAG,CAACA,EAAC,CAAE,OAAOD,EAAE,CAACiB,GAAEhC,EAAEK,EAAEU,CAAC,CAAC,CAAC,CAAC,IAAI6hB,GAAG,GACxR,SAASC,GAAG7iB,EAAEK,EAAE,CAAc,GAAbwU,GAAGtI,GAAGvM,EAAE+R,GAAE,EAAMC,GAAGhS,CAAC,EAAE,CAAC,GAAG,mBAAmBA,EAAE,IAAIgB,EAAE,CAAC,MAAMhB,EAAE,eAAe,IAAIA,EAAE,YAAY,OAAOA,EAAE,CAACgB,GAAGA,EAAEhB,EAAE,gBAAgBgB,EAAE,aAAa,OAAO,IAAID,EAAEC,EAAE,cAAcA,EAAE,aAAY,EAAG,GAAGD,GAAOA,EAAE,aAAN,EAAiB,CAACC,EAAED,EAAE,WAAW,IAAIT,EAAES,EAAE,aAAaK,EAAEL,EAAE,UAAUA,EAAEA,EAAE,YAAY,GAAG,CAACC,EAAE,SAASI,EAAE,QAAQ,MAAS,CAACJ,EAAE,KAAK,MAAMhB,CAAC,CAAC,IAAImB,EAAE,EAAED,EAAE,GAAGD,GAAE,GAAG9B,GAAE,EAAEkC,GAAE,EAAE/B,GAAEU,EAAET,GAAE,KAAKc,EAAE,OAAO,CAAC,QAAQR,GAAKP,KAAI0B,GAAOV,IAAJ,GAAWhB,GAAE,WAAN,IAAiB4B,EAAEC,EAAEb,GAAGhB,KAAI8B,GAAOL,IAAJ,GAAWzB,GAAE,WAAN,IAAiB2B,GAAEE,EAAEJ,GAAOzB,GAAE,WAAN,IAAiB6B,GACnf7B,GAAE,UAAU,SAAmBO,GAAEP,GAAE,cAAZ,MAA8BC,GAAED,GAAEA,GAAEO,GAAE,OAAO,CAAC,GAAGP,KAAIU,EAAE,MAAMK,EAA8C,GAA5Cd,KAAIyB,GAAG,EAAE7B,KAAImB,IAAIY,EAAEC,GAAG5B,KAAI6B,GAAG,EAAEC,KAAIN,IAAIE,GAAEE,IAActB,GAAEP,GAAE,eAAZ,KAAyB,MAAMA,GAAEC,GAAEA,GAAED,GAAE,UAAU,CAACA,GAAEO,EAAC,CAACmB,EAAOE,IAAL,IAAaD,KAAL,GAAO,KAAK,CAAC,MAAMC,EAAE,IAAID,EAAC,CAAC,MAAMD,EAAE,IAAI,CAACA,EAAEA,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,MAAMA,EAAE,KAA+C,IAA1C8T,GAAG,CAAC,YAAY9U,EAAE,eAAegB,CAAC,EAAEuL,GAAG,GAAOxK,GAAE1B,EAAS0B,KAAP,MAAU,GAAG1B,EAAE0B,GAAE/B,EAAEK,EAAE,OAAWA,EAAE,aAAa,QAApB,GAAkCL,IAAP,KAASA,EAAE,OAAOK,EAAE0B,GAAE/B,MAAO,MAAY+B,KAAP,MAAU,CAAC1B,EAAE0B,GAAE,GAAG,CAAC,IAAI3C,GAAEiB,EAAE,UAAU,IAAQA,EAAE,MAAM,QAAb,EAAmB,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,MACxf,IAAK,GAAE,GAAUjB,KAAP,KAAS,CAAC,IAAII,GAAEJ,GAAE,cAAcuB,GAAEvB,GAAE,cAAcQ,GAAES,EAAE,UAAUV,GAAEC,GAAE,wBAAwBS,EAAE,cAAcA,EAAE,KAAKb,GAAEof,GAAGve,EAAE,KAAKb,EAAC,EAAEmB,EAAC,EAAEf,GAAE,oCAAoCD,EAAC,CAAC,MAAM,IAAK,GAAE,IAAIF,GAAEY,EAAE,UAAU,cAAkBZ,GAAE,WAAN,EAAeA,GAAE,YAAY,GAAOA,GAAE,WAAN,GAAgBA,GAAE,iBAAiBA,GAAE,YAAYA,GAAE,eAAe,EAAE,MAAM,IAAK,GAAE,IAAK,GAAE,IAAK,GAAE,IAAK,IAAG,MAAM,QAAQ,MAAM,MAAMJ,EAAE,GAAG,CAAC,CAAE,CAAC,OAAOkB,GAAE,CAACyB,GAAE3B,EAAEA,EAAE,OAAOE,EAAC,CAAC,CAAa,GAAZP,EAAEK,EAAE,QAAkBL,IAAP,KAAS,CAACA,EAAE,OAAOK,EAAE,OAAO0B,GAAE/B,EAAE,KAAK,CAAC+B,GAAE1B,EAAE,MAAM,CAAC,OAAAjB,GAAEwjB,GAAGA,GAAG,GAAUxjB,EAAC,CAC3f,SAAS0jB,GAAG9iB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEV,EAAE,YAAyC,GAA7BU,EAASA,IAAP,KAASA,EAAE,WAAW,KAAeA,IAAP,KAAS,CAAC,IAAIT,EAAES,EAAEA,EAAE,KAAK,EAAE,CAAC,IAAIT,EAAE,IAAIN,KAAKA,EAAE,CAAC,IAAIoB,EAAEd,EAAE,QAAQA,EAAE,QAAQ,OAAgBc,IAAT,QAAYuhB,GAAGtiB,EAAEW,EAAEI,CAAC,CAAC,CAACd,EAAEA,EAAE,IAAI,OAAOA,IAAIS,EAAE,CAAC,CAAC,SAASgiB,GAAG/iB,EAAEK,EAAE,CAA8C,GAA7CA,EAAEA,EAAE,YAAYA,EAASA,IAAP,KAASA,EAAE,WAAW,KAAeA,IAAP,KAAS,CAAC,IAAIW,EAAEX,EAAEA,EAAE,KAAK,EAAE,CAAC,IAAIW,EAAE,IAAIhB,KAAKA,EAAE,CAAC,IAAIe,EAAEC,EAAE,OAAOA,EAAE,QAAQD,EAAC,CAAE,CAACC,EAAEA,EAAE,IAAI,OAAOA,IAAIX,EAAE,CAAC,CAAC,SAAS2iB,GAAGhjB,EAAE,CAAC,IAAIK,EAAEL,EAAE,IAAI,GAAUK,IAAP,KAAS,CAAC,IAAIW,EAAEhB,EAAE,UAAU,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAEA,EAAEgB,EAAE,MAAM,QAAQhB,EAAEgB,CAAC,CAAc,OAAOX,GAApB,WAAsBA,EAAEL,CAAC,EAAEK,EAAE,QAAQL,CAAC,CAAC,CAClf,SAASijB,GAAGjjB,EAAE,CAAC,IAAIK,EAAEL,EAAE,UAAiBK,IAAP,OAAWL,EAAE,UAAU,KAAKijB,GAAG5iB,CAAC,GAAGL,EAAE,MAAM,KAAKA,EAAE,UAAU,KAAKA,EAAE,QAAQ,KAASA,EAAE,MAAN,IAAYK,EAAEL,EAAE,UAAiBK,IAAP,OAAW,OAAOA,EAAEoV,EAAE,EAAE,OAAOpV,EAAEqV,EAAE,EAAE,OAAOrV,EAAEsT,EAAE,EAAE,OAAOtT,EAAEsV,EAAE,EAAE,OAAOtV,EAAEuV,EAAE,IAAI5V,EAAE,UAAU,KAAKA,EAAE,OAAO,KAAKA,EAAE,aAAa,KAAKA,EAAE,cAAc,KAAKA,EAAE,cAAc,KAAKA,EAAE,aAAa,KAAKA,EAAE,UAAU,KAAKA,EAAE,YAAY,IAAI,CAAC,SAASkjB,GAAGljB,EAAE,CAAC,OAAWA,EAAE,MAAN,GAAeA,EAAE,MAAN,GAAeA,EAAE,MAAN,CAAS,CACna,SAASmjB,GAAGnjB,EAAE,CAACA,EAAE,OAAO,CAAC,KAAYA,EAAE,UAAT,MAAkB,CAAC,GAAUA,EAAE,SAAT,MAAiBkjB,GAAGljB,EAAE,MAAM,EAAE,OAAO,KAAKA,EAAEA,EAAE,MAAM,CAA2B,IAA1BA,EAAE,QAAQ,OAAOA,EAAE,OAAWA,EAAEA,EAAE,QAAYA,EAAE,MAAN,GAAeA,EAAE,MAAN,GAAgBA,EAAE,MAAP,IAAY,CAAyB,GAArBA,EAAE,MAAM,GAAuBA,EAAE,QAAT,MAAoBA,EAAE,MAAN,EAAU,SAASA,EAAOA,EAAE,MAAM,OAAOA,EAAEA,EAAEA,EAAE,KAAK,CAAC,GAAG,EAAEA,EAAE,MAAM,GAAG,OAAOA,EAAE,SAAS,CAAC,CACzT,SAASojB,GAAGpjB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,IAAI,GAAOe,IAAJ,GAAWA,IAAJ,EAAMf,EAAEA,EAAE,UAAUK,EAAMW,EAAE,WAAN,EAAeA,EAAE,WAAW,aAAahB,EAAEK,CAAC,EAAEW,EAAE,aAAahB,EAAEK,CAAC,GAAOW,EAAE,WAAN,GAAgBX,EAAEW,EAAE,WAAWX,EAAE,aAAaL,EAAEgB,CAAC,IAAIX,EAAEW,EAAEX,EAAE,YAAYL,CAAC,GAAGgB,EAAEA,EAAE,oBAA2BA,GAAP,MAA6BX,EAAE,UAAT,OAAmBA,EAAE,QAAQuU,aAAiB7T,IAAJ,IAAQf,EAAEA,EAAE,MAAaA,IAAP,MAAU,IAAIojB,GAAGpjB,EAAEK,EAAEW,CAAC,EAAEhB,EAAEA,EAAE,QAAeA,IAAP,MAAUojB,GAAGpjB,EAAEK,EAAEW,CAAC,EAAEhB,EAAEA,EAAE,OAAO,CAC1X,SAASqjB,GAAGrjB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,IAAI,GAAOe,IAAJ,GAAWA,IAAJ,EAAMf,EAAEA,EAAE,UAAUK,EAAEW,EAAE,aAAahB,EAAEK,CAAC,EAAEW,EAAE,YAAYhB,CAAC,UAAce,IAAJ,IAAQf,EAAEA,EAAE,MAAaA,IAAP,MAAU,IAAIqjB,GAAGrjB,EAAEK,EAAEW,CAAC,EAAEhB,EAAEA,EAAE,QAAeA,IAAP,MAAUqjB,GAAGrjB,EAAEK,EAAEW,CAAC,EAAEhB,EAAEA,EAAE,OAAO,CAAC,IAAIiC,GAAE,KAAKqhB,GAAG,GAAG,SAASC,GAAGvjB,EAAEK,EAAEW,EAAE,CAAC,IAAIA,EAAEA,EAAE,MAAaA,IAAP,MAAUwiB,GAAGxjB,EAAEK,EAAEW,CAAC,EAAEA,EAAEA,EAAE,OAAO,CACnR,SAASwiB,GAAGxjB,EAAEK,EAAEW,EAAE,CAAC,GAAG0I,IAAiB,OAAOA,GAAG,sBAAvB,WAA4C,GAAG,CAACA,GAAG,qBAAqBD,GAAGzI,CAAC,CAAC,MAAS,EAAE,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAEc,IAAG4gB,GAAG1hB,EAAEX,CAAC,EAAE,IAAK,GAAE,IAAIU,EAAEkB,GAAE3B,EAAEgjB,GAAGrhB,GAAE,KAAKshB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAEiB,GAAElB,EAAEuiB,GAAGhjB,EAAS2B,KAAP,OAAWqhB,IAAItjB,EAAEiC,GAAEjB,EAAEA,EAAE,UAAchB,EAAE,WAAN,EAAeA,EAAE,WAAW,YAAYgB,CAAC,EAAEhB,EAAE,YAAYgB,CAAC,GAAGiB,GAAE,YAAYjB,EAAE,SAAS,GAAG,MAAM,IAAK,IAAUiB,KAAP,OAAWqhB,IAAItjB,EAAEiC,GAAEjB,EAAEA,EAAE,UAAchB,EAAE,WAAN,EAAeqV,GAAGrV,EAAE,WAAWgB,CAAC,EAAMhB,EAAE,WAAN,GAAgBqV,GAAGrV,EAAEgB,CAAC,EAAEqL,GAAGrM,CAAC,GAAGqV,GAAGpT,GAAEjB,EAAE,SAAS,GAAG,MAAM,IAAK,GAAED,EAAEkB,GAAE3B,EAAEgjB,GAAGrhB,GAAEjB,EAAE,UAAU,cAAcsiB,GAAG,GAClfC,GAAGvjB,EAAEK,EAAEW,CAAC,EAAEiB,GAAElB,EAAEuiB,GAAGhjB,EAAE,MAAM,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,GAAG,CAACwB,KAAIf,EAAEC,EAAE,YAAmBD,IAAP,OAAWA,EAAEA,EAAE,WAAkBA,IAAP,OAAW,CAACT,EAAES,EAAEA,EAAE,KAAK,EAAE,CAAC,IAAIK,EAAEd,EAAEa,EAAEC,EAAE,QAAQA,EAAEA,EAAE,IAAaD,IAAT,UAAkBC,EAAE,KAAP,IAAyBA,EAAE,KAAP,IAAWuhB,GAAG3hB,EAAEX,EAAEc,CAAC,EAAGb,EAAEA,EAAE,IAAI,OAAOA,IAAIS,EAAE,CAACwiB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAE,MAAM,IAAK,GAAE,GAAG,CAACc,KAAI4gB,GAAG1hB,EAAEX,CAAC,EAAEU,EAAEC,EAAE,UAAuB,OAAOD,EAAE,sBAAtB,YAA4C,GAAG,CAACA,EAAE,MAAMC,EAAE,cAAcD,EAAE,MAAMC,EAAE,cAAcD,EAAE,qBAAoB,CAAE,OAAOG,EAAE,CAACc,GAAEhB,EAAEX,EAAEa,CAAC,CAAC,CAACqiB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAE,MAAM,IAAK,IAAGuiB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAE,MAAM,IAAK,IAAGA,EAAE,KAAK,GAAGc,IAAGf,EAAEe,KAC5ed,EAAE,gBAD8e,KACheuiB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAEc,GAAEf,GAAGwiB,GAAGvjB,EAAEK,EAAEW,CAAC,EAAE,MAAM,QAAQuiB,GAAGvjB,EAAEK,EAAEW,CAAC,CAAC,CAAC,CAAC,SAASyiB,GAAGzjB,EAAE,CAAC,IAAIK,EAAEL,EAAE,YAAY,GAAUK,IAAP,KAAS,CAACL,EAAE,YAAY,KAAK,IAAIgB,EAAEhB,EAAE,UAAiBgB,IAAP,OAAWA,EAAEhB,EAAE,UAAU,IAAIyiB,IAAIpiB,EAAE,QAAQ,SAASA,EAAE,CAAC,IAAIU,EAAE2iB,GAAG,KAAK,KAAK1jB,EAAEK,CAAC,EAAEW,EAAE,IAAIX,CAAC,IAAIW,EAAE,IAAIX,CAAC,EAAEA,EAAE,KAAKU,EAAEA,CAAC,EAAE,CAAC,CAAC,CAAC,CACzQ,SAAS4iB,GAAG3jB,EAAEK,EAAE,CAAC,IAAIW,EAAEX,EAAE,UAAU,GAAUW,IAAP,KAAS,QAAQD,EAAE,EAAEA,EAAEC,EAAE,OAAOD,IAAI,CAAC,IAAIT,EAAEU,EAAED,CAAC,EAAE,GAAG,CAAC,IAAIK,EAAEpB,EAAEmB,EAAEd,EAAEa,EAAEC,EAAEnB,EAAE,KAAYkB,IAAP,MAAU,CAAC,OAAOA,EAAE,KAAK,IAAK,GAAEe,GAAEf,EAAE,UAAUoiB,GAAG,GAAG,MAAMtjB,EAAE,IAAK,GAAEiC,GAAEf,EAAE,UAAU,cAAcoiB,GAAG,GAAG,MAAMtjB,EAAE,IAAK,GAAEiC,GAAEf,EAAE,UAAU,cAAcoiB,GAAG,GAAG,MAAMtjB,CAAC,CAACkB,EAAEA,EAAE,MAAM,CAAC,GAAUe,KAAP,KAAS,MAAM,MAAM5C,EAAE,GAAG,CAAC,EAAEmkB,GAAGpiB,EAAED,EAAEb,CAAC,EAAE2B,GAAE,KAAKqhB,GAAG,GAAG,IAAIriB,GAAEX,EAAE,UAAiBW,KAAP,OAAWA,GAAE,OAAO,MAAMX,EAAE,OAAO,IAAI,OAAOnB,GAAE,CAAC6C,GAAE1B,EAAED,EAAElB,EAAC,CAAC,CAAC,CAAC,GAAGkB,EAAE,aAAa,MAAM,IAAIA,EAAEA,EAAE,MAAaA,IAAP,MAAUujB,GAAGvjB,EAAEL,CAAC,EAAEK,EAAEA,EAAE,OAAO,CACje,SAASujB,GAAG5jB,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,UAAUe,EAAEf,EAAE,MAAM,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAK,IAAiB,GAAd2jB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAKe,EAAE,EAAE,CAAC,GAAG,CAAC+hB,GAAG,EAAE9iB,EAAEA,EAAE,MAAM,EAAE+iB,GAAG,EAAE/iB,CAAC,CAAC,OAAOR,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,GAAG,CAACsjB,GAAG,EAAE9iB,EAAEA,EAAE,MAAM,CAAC,OAAOR,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,CAAC,MAAM,IAAK,GAAEmkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAEe,EAAE,KAAYC,IAAP,MAAU0hB,GAAG1hB,EAAEA,EAAE,MAAM,EAAE,MAAM,IAAK,GAAgD,GAA9C2iB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAEe,EAAE,KAAYC,IAAP,MAAU0hB,GAAG1hB,EAAEA,EAAE,MAAM,EAAKhB,EAAE,MAAM,GAAG,CAAC,IAAIM,EAAEN,EAAE,UAAU,GAAG,CAACwG,GAAGlG,EAAE,EAAE,CAAC,OAAOd,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,CAAC,GAAGuB,EAAE,IAAIT,EAAEN,EAAE,UAAgBM,GAAN,MAAS,CAAC,IAAIc,EAAEpB,EAAE,cAAcmB,EAASH,IAAP,KAASA,EAAE,cAAcI,EAAEF,EAAElB,EAAE,KAAKiB,GAAEjB,EAAE,YACje,GAAnBA,EAAE,YAAY,KAAeiB,KAAP,KAAS,GAAG,CAAWC,IAAV,SAAuBE,EAAE,OAAZ,SAAwBA,EAAE,MAAR,MAAcsE,GAAGpF,EAAEc,CAAC,EAAE2F,GAAG7F,EAAEC,CAAC,EAAE,IAAIhC,GAAE4H,GAAG7F,EAAEE,CAAC,EAAE,IAAID,EAAE,EAAEA,EAAEF,GAAE,OAAOE,GAAG,EAAE,CAAC,IAAIE,GAAEJ,GAAEE,CAAC,EAAE7B,GAAE2B,GAAEE,EAAE,CAAC,EAAYE,KAAV,QAAYuF,GAAGtG,EAAEhB,EAAC,EAA8B+B,KAA5B,0BAA8BkF,GAAGjG,EAAEhB,EAAC,EAAe+B,KAAb,WAAemF,GAAGlG,EAAEhB,EAAC,EAAEoE,EAAGpD,EAAEe,GAAE/B,GAAEH,EAAC,CAAC,CAAC,OAAO+B,EAAC,CAAE,IAAK,QAAQyE,GAAGrF,EAAEc,CAAC,EAAE,MAAM,IAAK,WAAW8E,GAAG5F,EAAEc,CAAC,EAAE,MAAM,IAAK,SAAS,IAAI7B,GAAEe,EAAE,cAAc,YAAYA,EAAE,cAAc,YAAY,CAAC,CAACc,EAAE,SAAS,IAAIvB,GAAEuB,EAAE,MAAYvB,IAAN,KAAQkG,GAAGzF,EAAE,CAAC,CAACc,EAAE,SAASvB,GAAE,EAAE,EAAEN,KAAI,CAAC,CAAC6B,EAAE,WAAiBA,EAAE,cAAR,KAAqB2E,GAAGzF,EAAE,CAAC,CAACc,EAAE,SACnfA,EAAE,aAAa,EAAE,EAAE2E,GAAGzF,EAAE,CAAC,CAACc,EAAE,SAASA,EAAE,SAAS,GAAG,GAAG,EAAE,EAAE,CAACd,EAAEoV,EAAE,EAAEtU,CAAC,OAAO5B,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,CAAC,MAAM,IAAK,GAAgB,GAAdmkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAKe,EAAE,EAAE,CAAC,GAAUf,EAAE,YAAT,KAAmB,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEiB,EAAEN,EAAE,UAAUoB,EAAEpB,EAAE,cAAc,GAAG,CAACM,EAAE,UAAUc,CAAC,OAAO5B,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,CAAC,MAAM,IAAK,GAAgB,GAAdmkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAKe,EAAE,GAAUC,IAAP,MAAUA,EAAE,cAAc,aAAa,GAAG,CAACqL,GAAGhM,EAAE,aAAa,CAAC,OAAOb,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,MAAM,IAAK,GAAEmkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAE,MAAM,IAAK,IAAG2jB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAEM,EAAEN,EAAE,MAAMM,EAAE,MAAM,OAAOc,EAASd,EAAE,gBAAT,KAAuBA,EAAE,UAAU,SAASc,EAAE,CAACA,GAC3ed,EAAE,YAAT,MAA2BA,EAAE,UAAU,gBAAnB,OAAmCwjB,GAAG7jB,GAAC,IAAKc,EAAE,GAAG0iB,GAAGzjB,CAAC,EAAE,MAAM,IAAK,IAAsF,GAAnFqB,GAASL,IAAP,MAAiBA,EAAE,gBAAT,KAAuBhB,EAAE,KAAK,GAAG8B,IAAG3C,GAAE2C,KAAIT,GAAEsiB,GAAGtjB,EAAEL,CAAC,EAAE8B,GAAE3C,IAAGwkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAKe,EAAE,KAAK,CAA0B,GAAzB5B,GAASa,EAAE,gBAAT,MAA2BA,EAAE,UAAU,SAASb,KAAI,CAACkC,KAAQrB,EAAE,KAAK,KAAZ,EAAe,IAAI+B,GAAE/B,EAAEqB,GAAErB,EAAE,MAAaqB,KAAP,MAAU,CAAC,IAAI/B,GAAEyC,GAAEV,GAASU,KAAP,MAAU,CAAe,OAAdxC,GAAEwC,GAAElC,GAAEN,GAAE,MAAaA,GAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAK,IAAGujB,GAAG,EAAEvjB,GAAEA,GAAE,MAAM,EAAE,MAAM,IAAK,GAAEmjB,GAAGnjB,GAAEA,GAAE,MAAM,EAAE,IAAIH,GAAEG,GAAE,UAAU,GAAgB,OAAOH,GAAE,sBAAtB,WAA2C,CAAC2B,EAAExB,GAAEyB,EAAEzB,GAAE,OAAO,GAAG,CAACc,EAAEU,EAAE3B,GAAE,MACpfiB,EAAE,cAAcjB,GAAE,MAAMiB,EAAE,cAAcjB,GAAE,qBAAoB,CAAE,OAAOI,GAAE,CAACwC,GAAEjB,EAAEC,EAAExB,EAAC,CAAC,CAAC,CAAC,MAAM,IAAK,GAAEkjB,GAAGnjB,GAAEA,GAAE,MAAM,EAAE,MAAM,IAAK,IAAG,GAAUA,GAAE,gBAAT,KAAuB,CAACwkB,GAAGzkB,EAAC,EAAE,QAAQ,CAAC,CAAQO,KAAP,MAAUA,GAAE,OAAON,GAAEwC,GAAElC,IAAGkkB,GAAGzkB,EAAC,CAAC,CAAC+B,GAAEA,GAAE,OAAO,CAACrB,EAAE,IAAIqB,GAAE,KAAK/B,GAAEU,IAAI,CAAC,GAAOV,GAAE,MAAN,GAAW,GAAU+B,KAAP,KAAS,CAACA,GAAE/B,GAAE,GAAG,CAACgB,EAAEhB,GAAE,UAAUH,IAAGiC,EAAEd,EAAE,MAAmB,OAAOc,EAAE,aAAtB,WAAkCA,EAAE,YAAY,UAAU,OAAO,WAAW,EAAEA,EAAE,QAAQ,SAASF,EAAE5B,GAAE,UAAU2B,GAAE3B,GAAE,cAAc,MAAM6B,EAAqBF,IAAP,MAAUA,GAAE,eAAe,SAAS,EAAEA,GAAE,QAAQ,KAAKC,EAAE,MAAM,QACzfyF,GAAG,UAAUxF,CAAC,EAAE,OAAO3B,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,CAAC,UAAcF,GAAE,MAAN,GAAW,GAAU+B,KAAP,KAAS,GAAG,CAAC/B,GAAE,UAAU,UAAUH,GAAE,GAAGG,GAAE,aAAa,OAAOE,GAAE,CAACwC,GAAEhC,EAAEA,EAAE,OAAOR,EAAC,CAAC,WAAgBF,GAAE,MAAP,IAAiBA,GAAE,MAAP,IAAmBA,GAAE,gBAAT,MAAwBA,KAAIU,IAAWV,GAAE,QAAT,KAAe,CAACA,GAAE,MAAM,OAAOA,GAAEA,GAAEA,GAAE,MAAM,QAAQ,CAAC,GAAGA,KAAIU,EAAE,MAAMA,EAAE,KAAYV,GAAE,UAAT,MAAkB,CAAC,GAAUA,GAAE,SAAT,MAAiBA,GAAE,SAASU,EAAE,MAAMA,EAAEqB,KAAI/B,KAAI+B,GAAE,MAAM/B,GAAEA,GAAE,MAAM,CAAC+B,KAAI/B,KAAI+B,GAAE,MAAM/B,GAAE,QAAQ,OAAOA,GAAE,OAAOA,GAAEA,GAAE,OAAO,CAAC,CAAC,MAAM,IAAK,IAAGqkB,GAAGtjB,EAAEL,CAAC,EAAE6jB,GAAG7jB,CAAC,EAAEe,EAAE,GAAG0iB,GAAGzjB,CAAC,EAAE,MAAM,IAAK,IAAG,MAAM,QAAQ2jB,GAAGtjB,EACnfL,CAAC,EAAE6jB,GAAG7jB,CAAC,CAAC,CAAC,CAAC,SAAS6jB,GAAG7jB,EAAE,CAAC,IAAIK,EAAEL,EAAE,MAAM,GAAGK,EAAE,EAAE,CAAC,GAAG,CAACL,EAAE,CAAC,QAAQgB,EAAEhB,EAAE,OAAcgB,IAAP,MAAU,CAAC,GAAGkiB,GAAGliB,CAAC,EAAE,CAAC,IAAID,EAAEC,EAAE,MAAMhB,CAAC,CAACgB,EAAEA,EAAE,MAAM,CAAC,MAAM,MAAM3B,EAAE,GAAG,CAAC,CAAE,CAAC,OAAO0B,EAAE,IAAG,CAAE,IAAK,GAAE,IAAIT,EAAES,EAAE,UAAUA,EAAE,MAAM,KAAKyF,GAAGlG,EAAE,EAAE,EAAES,EAAE,OAAO,KAAK,IAAIK,EAAE+hB,GAAGnjB,CAAC,EAAEqjB,GAAGrjB,EAAEoB,EAAEd,CAAC,EAAE,MAAM,IAAK,GAAE,IAAK,GAAE,IAAIa,EAAEJ,EAAE,UAAU,cAAcG,EAAEiiB,GAAGnjB,CAAC,EAAEojB,GAAGpjB,EAAEkB,EAAEC,CAAC,EAAE,MAAM,QAAQ,MAAM,MAAM9B,EAAE,GAAG,CAAC,CAAE,CAAC,OAAO4B,GAAE,CAACe,GAAEhC,EAAEA,EAAE,OAAOiB,EAAC,CAAC,CAACjB,EAAE,OAAO,EAAE,CAACK,EAAE,OAAOL,EAAE,OAAO,MAAM,CAAC,SAASgkB,GAAGhkB,EAAEK,EAAEW,EAAE,CAACe,GAAE/B,EAAEikB,GAAGjkB,CAAK,CAAC,CACvb,SAASikB,GAAGjkB,EAAEK,EAAEW,EAAE,CAAC,QAAQD,GAAOf,EAAE,KAAK,KAAZ,EAAsB+B,KAAP,MAAU,CAAC,IAAIzB,EAAEyB,GAAEX,EAAEd,EAAE,MAAM,GAAQA,EAAE,MAAP,IAAYS,EAAE,CAAC,IAAII,EAASb,EAAE,gBAAT,MAAwBkiB,GAAG,GAAG,CAACrhB,EAAE,CAAC,IAAID,EAAEZ,EAAE,UAAUW,GAASC,IAAP,MAAiBA,EAAE,gBAAT,MAAwBY,GAAEZ,EAAEshB,GAAG,IAAIrjB,GAAE2C,GAAO,GAAL0gB,GAAGrhB,GAAMW,GAAEb,KAAI,CAAC9B,GAAE,IAAI4C,GAAEzB,EAASyB,KAAP,MAAUZ,EAAEY,GAAEd,GAAEE,EAAE,MAAWA,EAAE,MAAP,IAAmBA,EAAE,gBAAT,KAAuB+iB,GAAG5jB,CAAC,EAASW,KAAP,MAAUA,GAAE,OAAOE,EAAEY,GAAEd,IAAGijB,GAAG5jB,CAAC,EAAE,KAAYc,IAAP,MAAUW,GAAEX,EAAE6iB,GAAG7iB,CAAK,EAAEA,EAAEA,EAAE,QAAQW,GAAEzB,EAAEkiB,GAAGthB,EAAEY,GAAE3C,EAAC,CAACglB,GAAGnkB,CAAK,CAAC,MAAWM,EAAE,aAAa,QAApB,GAAkCc,IAAP,MAAUA,EAAE,OAAOd,EAAEyB,GAAEX,GAAG+iB,GAAGnkB,CAAK,CAAC,CAAC,CACvc,SAASmkB,GAAGnkB,EAAE,CAAC,KAAY+B,KAAP,MAAU,CAAC,IAAI1B,EAAE0B,GAAE,IAAQ1B,EAAE,MAAM,QAAb,EAAmB,CAAC,IAAIW,EAAEX,EAAE,UAAU,GAAG,CAAC,IAAQA,EAAE,MAAM,QAAb,EAAmB,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAGyB,IAAGihB,GAAG,EAAE1iB,CAAC,EAAE,MAAM,IAAK,GAAE,IAAIU,EAAEV,EAAE,UAAU,GAAGA,EAAE,MAAM,GAAG,CAACyB,GAAE,GAAUd,IAAP,KAASD,EAAE,kBAAiB,MAAO,CAAC,IAAIT,EAAED,EAAE,cAAcA,EAAE,KAAKW,EAAE,cAAc4d,GAAGve,EAAE,KAAKW,EAAE,aAAa,EAAED,EAAE,mBAAmBT,EAAEU,EAAE,cAAcD,EAAE,mCAAmC,CAAC,CAAC,IAAIK,EAAEf,EAAE,YAAmBe,IAAP,MAAUyZ,GAAGxa,EAAEe,EAAEL,CAAC,EAAE,MAAM,IAAK,GAAE,IAAII,EAAEd,EAAE,YAAY,GAAUc,IAAP,KAAS,CAAQ,GAAPH,EAAE,KAAeX,EAAE,QAAT,KAAe,OAAOA,EAAE,MAAM,IAAG,CAAE,IAAK,GAAEW,EACjhBX,EAAE,MAAM,UAAU,MAAM,IAAK,GAAEW,EAAEX,EAAE,MAAM,SAAS,CAACwa,GAAGxa,EAAEc,EAAEH,CAAC,CAAC,CAAC,MAAM,IAAK,GAAE,IAAIE,EAAEb,EAAE,UAAU,GAAUW,IAAP,MAAUX,EAAE,MAAM,EAAE,CAACW,EAAEE,EAAE,IAAID,GAAEZ,EAAE,cAAc,OAAOA,EAAE,KAAI,CAAE,IAAK,SAAS,IAAK,QAAQ,IAAK,SAAS,IAAK,WAAWY,GAAE,WAAWD,EAAE,QAAQ,MAAM,IAAK,MAAMC,GAAE,MAAMD,EAAE,IAAIC,GAAE,IAAI,CAAC,CAAC,MAAM,IAAK,GAAE,MAAM,IAAK,GAAE,MAAM,IAAK,IAAG,MAAM,IAAK,IAAG,GAAUZ,EAAE,gBAAT,KAAuB,CAAC,IAAIlB,GAAEkB,EAAE,UAAU,GAAUlB,KAAP,KAAS,CAAC,IAAIkC,GAAElC,GAAE,cAAc,GAAUkC,KAAP,KAAS,CAAC,IAAI/B,GAAE+B,GAAE,WAAkB/B,KAAP,MAAU+M,GAAG/M,EAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,IAAK,IAAG,MAClgB,QAAQ,MAAM,MAAMD,EAAE,GAAG,CAAC,CAAE,CAACyC,IAAGzB,EAAE,MAAM,KAAK2iB,GAAG3iB,CAAC,CAAC,OAAOd,GAAE,CAACyC,GAAE3B,EAAEA,EAAE,OAAOd,EAAC,CAAC,CAAC,CAAC,GAAGc,IAAIL,EAAE,CAAC+B,GAAE,KAAK,KAAK,CAAa,GAAZf,EAAEX,EAAE,QAAkBW,IAAP,KAAS,CAACA,EAAE,OAAOX,EAAE,OAAO0B,GAAEf,EAAE,KAAK,CAACe,GAAE1B,EAAE,MAAM,CAAC,CAAC,SAAS0jB,GAAG/jB,EAAE,CAAC,KAAY+B,KAAP,MAAU,CAAC,IAAI1B,EAAE0B,GAAE,GAAG1B,IAAIL,EAAE,CAAC+B,GAAE,KAAK,KAAK,CAAC,IAAIf,EAAEX,EAAE,QAAQ,GAAUW,IAAP,KAAS,CAACA,EAAE,OAAOX,EAAE,OAAO0B,GAAEf,EAAE,KAAK,CAACe,GAAE1B,EAAE,MAAM,CAAC,CACvS,SAAS6jB,GAAGlkB,EAAE,CAAC,KAAY+B,KAAP,MAAU,CAAC,IAAI1B,EAAE0B,GAAE,GAAG,CAAC,OAAO1B,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG,IAAIW,EAAEX,EAAE,OAAO,GAAG,CAAC0iB,GAAG,EAAE1iB,CAAC,CAAC,OAAOY,GAAE,CAACe,GAAE3B,EAAEW,EAAEC,EAAC,CAAC,CAAC,MAAM,IAAK,GAAE,IAAIF,EAAEV,EAAE,UAAU,GAAgB,OAAOU,EAAE,mBAAtB,WAAwC,CAAC,IAAIT,EAAED,EAAE,OAAO,GAAG,CAACU,EAAE,kBAAiB,CAAE,OAAOE,GAAE,CAACe,GAAE3B,EAAEC,EAAEW,EAAC,CAAC,CAAC,CAAC,IAAIG,EAAEf,EAAE,OAAO,GAAG,CAAC2iB,GAAG3iB,CAAC,CAAC,OAAOY,GAAE,CAACe,GAAE3B,EAAEe,EAAEH,EAAC,CAAC,CAAC,MAAM,IAAK,GAAE,IAAIE,EAAEd,EAAE,OAAO,GAAG,CAAC2iB,GAAG3iB,CAAC,CAAC,OAAOY,GAAE,CAACe,GAAE3B,EAAEc,EAAEF,EAAC,CAAC,CAAC,CAAC,OAAOA,GAAE,CAACe,GAAE3B,EAAEA,EAAE,OAAOY,EAAC,CAAC,CAAC,GAAGZ,IAAIL,EAAE,CAAC+B,GAAE,KAAK,KAAK,CAAC,IAAIb,EAAEb,EAAE,QAAQ,GAAUa,IAAP,KAAS,CAACA,EAAE,OAAOb,EAAE,OAAO0B,GAAEb,EAAE,KAAK,CAACa,GAAE1B,EAAE,MAAM,CAAC,CAC7d,IAAI+jB,GAAG,KAAK,KAAKC,GAAG1gB,EAAG,uBAAuB2gB,GAAG3gB,EAAG,kBAAkB4gB,GAAG5gB,EAAG,wBAAwB/C,GAAE,EAAEc,GAAE,KAAK8iB,GAAE,KAAKC,GAAE,EAAE/D,GAAG,EAAED,GAAG1K,GAAG,CAAC,EAAElU,GAAE,EAAE6iB,GAAG,KAAK9J,GAAG,EAAE+J,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,GAAG,KAAKhB,GAAG,EAAEzB,GAAG,IAAS0C,GAAG,KAAKvF,GAAG,GAAGC,GAAG,KAAKE,GAAG,KAAKqF,GAAG,GAAGC,GAAG,KAAKC,GAAG,EAAEC,GAAG,EAAEC,GAAG,KAAKC,GAAG,GAAGC,GAAG,EAAE,SAAS3jB,IAAG,CAAC,OAAYf,GAAE,KAAP,EAAUX,KAASolB,KAAL,GAAQA,GAAGA,GAAGplB,GAAC,CAAE,CAChU,SAASue,GAAGxe,EAAE,CAAC,OAAQA,EAAE,KAAK,KAAZ,EAAsB,GAAUY,GAAE,KAAP,GAAe6jB,KAAJ,EAAaA,GAAE,CAACA,GAAY/L,GAAG,aAAV,MAAgC4M,KAAJ,IAASA,GAAG/a,GAAE,GAAI+a,KAAGtlB,EAAEE,GAASF,IAAJ,IAAeA,EAAE,OAAO,MAAMA,EAAWA,IAAT,OAAW,GAAG6M,GAAG7M,EAAE,IAAI,GAASA,EAAC,CAAC,SAASsd,GAAGtd,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAG,GAAGokB,GAAG,MAAMA,GAAG,EAAEC,GAAG,KAAK,MAAM/lB,EAAE,GAAG,CAAC,EAAEoL,GAAGzK,EAAEgB,EAAED,CAAC,IAAUH,GAAE,KAAP,GAAWZ,IAAI0B,MAAE1B,IAAI0B,MAASd,GAAE,KAAP,IAAY+jB,IAAI3jB,GAAOa,KAAJ,GAAO0jB,GAAGvlB,EAAEykB,EAAC,GAAGe,GAAGxlB,EAAEe,CAAC,EAAMC,IAAJ,GAAWJ,KAAJ,IAAYP,EAAE,KAAK,KAAZ,IAAiBgiB,GAAGpiB,GAAC,EAAG,IAAI0W,IAAII,GAAE,GAAG,CAC1Y,SAASyO,GAAGxlB,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,aAAaqK,GAAGrK,EAAEK,CAAC,EAAE,IAAIU,EAAEoJ,GAAGnK,EAAEA,IAAI0B,GAAE+iB,GAAE,CAAC,EAAE,GAAO1jB,IAAJ,EAAaC,IAAP,MAAUgI,GAAGhI,CAAC,EAAEhB,EAAE,aAAa,KAAKA,EAAE,iBAAiB,UAAUK,EAAEU,EAAE,CAACA,EAAEf,EAAE,mBAAmBK,EAAE,CAAgB,GAATW,GAAN,MAASgI,GAAGhI,CAAC,EAASX,IAAJ,EAAUL,EAAE,MAAN,EAAU8W,GAAG2O,GAAG,KAAK,KAAKzlB,CAAC,CAAC,EAAE6W,GAAG4O,GAAG,KAAK,KAAKzlB,CAAC,CAAC,EAAEmV,GAAG,UAAU,EAAMvU,GAAE,KAAP,GAAWmW,GAAE,CAAE,CAAC,EAAE/V,EAAE,SAAS,CAAC,OAAO4J,GAAG7J,CAAC,EAAC,CAAE,IAAK,GAAEC,EAAEoI,GAAG,MAAM,IAAK,GAAEpI,EAAEqI,GAAG,MAAM,IAAK,IAAGrI,EAAEsI,GAAG,MAAM,IAAK,WAAUtI,EAAEwI,GAAG,MAAM,QAAQxI,EAAEsI,EAAE,CAACtI,EAAE0kB,GAAG1kB,EAAE2kB,GAAG,KAAK,KAAK3lB,CAAC,CAAC,CAAC,CAACA,EAAE,iBAAiBK,EAAEL,EAAE,aAAagB,CAAC,CAAC,CAC7c,SAAS2kB,GAAG3lB,EAAEK,EAAE,CAAY,GAAXglB,GAAG,GAAGC,GAAG,GAAU1kB,GAAE,KAAP,EAAU,MAAM,MAAMvB,EAAE,GAAG,CAAC,EAAE,IAAI2B,EAAEhB,EAAE,aAAa,GAAG4lB,GAAE,GAAI5lB,EAAE,eAAegB,EAAE,OAAO,KAAK,IAAID,EAAEoJ,GAAGnK,EAAEA,IAAI0B,GAAE+iB,GAAE,CAAC,EAAE,GAAO1jB,IAAJ,EAAM,OAAO,KAAK,IAAQA,EAAE,MAAP,IAAiBA,EAAEf,EAAE,gBAAT,GAAwBK,EAAEA,EAAEwlB,GAAG7lB,EAAEe,CAAC,MAAM,CAACV,EAAEU,EAAE,IAAIT,EAAEM,GAAEA,IAAG,EAAE,IAAIQ,EAAE0kB,GAAE,GAAMpkB,KAAI1B,GAAGykB,KAAIpkB,KAAE0kB,GAAG,KAAK1C,GAAGpiB,GAAC,EAAG,IAAI8lB,GAAG/lB,EAAEK,CAAC,GAAE,EAAG,IAAG,CAAC2lB,GAAE,EAAG,KAAK,OAAO9kB,EAAE,CAAC+kB,GAAGjmB,EAAEkB,CAAC,CAAC,OAAO,IAAGwY,GAAE,EAAG2K,GAAG,QAAQjjB,EAAER,GAAEN,EAASkkB,KAAP,KAASnkB,EAAE,GAAGqB,GAAE,KAAK+iB,GAAE,EAAEpkB,EAAEwB,GAAE,CAAC,GAAOxB,IAAJ,EAAM,CAAyC,GAApCA,IAAJ,IAAQC,EAAEgK,GAAGtK,CAAC,EAAMM,IAAJ,IAAQS,EAAET,EAAED,EAAE6lB,GAAGlmB,EAAEM,CAAC,IAAWD,IAAJ,EAAM,MAAMW,EAAE0jB,GAAGqB,GAAG/lB,EAAE,CAAC,EAAEulB,GAAGvlB,EAAEe,CAAC,EAAEykB,GAAGxlB,EAAEC,GAAC,CAAE,EAAEe,EAAE,GAAOX,IAAJ,EAAMklB,GAAGvlB,EAAEe,CAAC,MACjf,CAAuB,GAAtBT,EAAEN,EAAE,QAAQ,WAAkBe,EAAE,MAAP,GAAY,CAAColB,GAAG7lB,CAAC,IAAID,EAAEwlB,GAAG7lB,EAAEe,CAAC,EAAMV,IAAJ,IAAQe,EAAEkJ,GAAGtK,CAAC,EAAMoB,IAAJ,IAAQL,EAAEK,EAAEf,EAAE6lB,GAAGlmB,EAAEoB,CAAC,IAAQf,IAAJ,GAAO,MAAMW,EAAE0jB,GAAGqB,GAAG/lB,EAAE,CAAC,EAAEulB,GAAGvlB,EAAEe,CAAC,EAAEykB,GAAGxlB,EAAEC,GAAC,CAAE,EAAEe,EAAqC,OAAnChB,EAAE,aAAaM,EAAEN,EAAE,cAAce,EAASV,EAAC,CAAE,IAAK,GAAE,IAAK,GAAE,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,IAAK,GAAE+mB,GAAGpmB,EAAE8kB,GAAGC,EAAE,EAAE,MAAM,IAAK,GAAU,GAARQ,GAAGvlB,EAAEe,CAAC,GAAMA,EAAE,aAAaA,IAAIV,EAAEyjB,GAAG,IAAI7jB,GAAC,EAAG,GAAGI,GAAG,CAAC,GAAO8J,GAAGnK,EAAE,CAAC,IAAV,EAAY,MAAyB,GAAnBM,EAAEN,EAAE,gBAAmBM,EAAES,KAAKA,EAAE,CAACY,GAAC,EAAG3B,EAAE,aAAaA,EAAE,eAAeM,EAAE,KAAK,CAACN,EAAE,cAAcgV,GAAGoR,GAAG,KAAK,KAAKpmB,EAAE8kB,GAAGC,EAAE,EAAE1kB,CAAC,EAAE,KAAK,CAAC+lB,GAAGpmB,EAAE8kB,GAAGC,EAAE,EAAE,MAAM,IAAK,GAAU,GAARQ,GAAGvlB,EAAEe,CAAC,GAAMA,EAAE,WAChfA,EAAE,MAAqB,IAAfV,EAAEL,EAAE,WAAeM,EAAE,GAAG,EAAES,GAAG,CAAC,IAAII,EAAE,GAAGyI,GAAG7I,CAAC,EAAEK,EAAE,GAAGD,EAAEA,EAAEd,EAAEc,CAAC,EAAEA,EAAEb,IAAIA,EAAEa,GAAGJ,GAAG,CAACK,CAAC,CAAqG,GAApGL,EAAET,EAAES,EAAEd,KAAIc,EAAEA,GAAG,IAAIA,EAAE,IAAI,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKA,EAAE,KAAK,IAAIA,EAAE,IAAI,KAAKA,EAAE,KAAK,KAAKqjB,GAAGrjB,EAAE,IAAI,GAAGA,EAAK,GAAGA,EAAE,CAACf,EAAE,cAAcgV,GAAGoR,GAAG,KAAK,KAAKpmB,EAAE8kB,GAAGC,EAAE,EAAEhkB,CAAC,EAAE,KAAK,CAACqlB,GAAGpmB,EAAE8kB,GAAGC,EAAE,EAAE,MAAM,IAAK,GAAEqB,GAAGpmB,EAAE8kB,GAAGC,EAAE,EAAE,MAAM,QAAQ,MAAM,MAAM1lB,EAAE,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,OAAAmmB,GAAGxlB,EAAEC,IAAG,EAASD,EAAE,eAAegB,EAAE2kB,GAAG,KAAK,KAAK3lB,CAAC,EAAE,IAAI,CACrX,SAASkmB,GAAGlmB,EAAEK,EAAE,CAAC,IAAIW,EAAE6jB,GAAG,OAAA7kB,EAAE,QAAQ,cAAc,eAAe+lB,GAAG/lB,EAAEK,CAAC,EAAE,OAAO,KAAKL,EAAE6lB,GAAG7lB,EAAEK,CAAC,EAAML,IAAJ,IAAQK,EAAEykB,GAAGA,GAAG9jB,EAASX,IAAP,MAAU+hB,GAAG/hB,CAAC,GAAUL,CAAC,CAAC,SAASoiB,GAAGpiB,EAAE,CAAQ8kB,KAAP,KAAUA,GAAG9kB,EAAE8kB,GAAG,KAAK,MAAMA,GAAG9kB,CAAC,CAAC,CAC5L,SAASmmB,GAAGnmB,EAAE,CAAC,QAAQK,EAAEL,IAAI,CAAC,GAAGK,EAAE,MAAM,MAAM,CAAC,IAAIW,EAAEX,EAAE,YAAY,GAAUW,IAAP,OAAWA,EAAEA,EAAE,OAAcA,IAAP,MAAU,QAAQD,EAAE,EAAEA,EAAEC,EAAE,OAAOD,IAAI,CAAC,IAAIT,EAAEU,EAAED,CAAC,EAAEK,EAAEd,EAAE,YAAYA,EAAEA,EAAE,MAAM,GAAG,CAAC,GAAG,CAACoR,GAAGtQ,EAAC,EAAGd,CAAC,EAAE,MAAM,EAAE,MAAS,CAAC,MAAM,EAAE,CAAC,CAAC,CAAW,GAAVU,EAAEX,EAAE,MAASA,EAAE,aAAa,OAAcW,IAAP,KAASA,EAAE,OAAOX,EAAEA,EAAEW,MAAM,CAAC,GAAGX,IAAIL,EAAE,MAAM,KAAYK,EAAE,UAAT,MAAkB,CAAC,GAAUA,EAAE,SAAT,MAAiBA,EAAE,SAASL,EAAE,MAAM,GAAGK,EAAEA,EAAE,MAAM,CAACA,EAAE,QAAQ,OAAOA,EAAE,OAAOA,EAAEA,EAAE,OAAO,CAAC,CAAC,MAAM,EAAE,CACla,SAASklB,GAAGvlB,EAAEK,EAAE,CAAqD,IAApDA,GAAG,CAACukB,GAAGvkB,GAAG,CAACskB,GAAG3kB,EAAE,gBAAgBK,EAAEL,EAAE,aAAa,CAACK,EAAML,EAAEA,EAAE,gBAAgB,EAAEK,GAAG,CAAC,IAAIW,EAAE,GAAG4I,GAAGvJ,CAAC,EAAEU,EAAE,GAAGC,EAAEhB,EAAEgB,CAAC,EAAE,GAAGX,GAAG,CAACU,CAAC,CAAC,CAAC,SAAS0kB,GAAGzlB,EAAE,CAAC,IAAQY,GAAE,KAAP,EAAU,MAAM,MAAMvB,EAAE,GAAG,CAAC,EAAEumB,GAAE,EAAG,IAAIvlB,EAAE8J,GAAGnK,EAAE,CAAC,EAAE,IAAQK,EAAE,KAAP,EAAU,OAAOmlB,GAAGxlB,EAAEC,GAAC,CAAE,EAAE,KAAK,IAAIe,EAAE6kB,GAAG7lB,EAAEK,CAAC,EAAE,GAAOL,EAAE,MAAN,GAAegB,IAAJ,EAAM,CAAC,IAAID,EAAEuJ,GAAGtK,CAAC,EAAMe,IAAJ,IAAQV,EAAEU,EAAEC,EAAEklB,GAAGlmB,EAAEe,CAAC,EAAE,CAAC,GAAOC,IAAJ,EAAM,MAAMA,EAAE0jB,GAAGqB,GAAG/lB,EAAE,CAAC,EAAEulB,GAAGvlB,EAAEK,CAAC,EAAEmlB,GAAGxlB,EAAEC,GAAC,CAAE,EAAEe,EAAE,GAAOA,IAAJ,EAAM,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE,OAAAW,EAAE,aAAaA,EAAE,QAAQ,UAAUA,EAAE,cAAcK,EAAE+lB,GAAGpmB,EAAE8kB,GAAGC,EAAE,EAAES,GAAGxlB,EAAEC,GAAC,CAAE,EAAS,IAAI,CACvd,SAASomB,GAAGrmB,EAAEK,EAAE,CAAC,IAAIW,EAAEJ,GAAEA,IAAG,EAAE,GAAG,CAAC,OAAOZ,EAAEK,CAAC,CAAC,QAAC,CAAQO,GAAEI,EAAMJ,KAAJ,IAAQyhB,GAAGpiB,GAAC,EAAG,IAAI0W,IAAII,GAAE,EAAG,CAAC,CAAC,SAASuP,GAAGtmB,EAAE,CAAQilB,KAAP,MAAeA,GAAG,MAAP,IAAiBrkB,GAAE,KAAP,GAAWglB,GAAE,EAAG,IAAIvlB,EAAEO,GAAEA,IAAG,EAAE,IAAII,EAAEujB,GAAG,WAAWxjB,EAAEb,GAAE,GAAG,CAAC,GAAGqkB,GAAG,WAAW,KAAKrkB,GAAE,EAAEF,EAAE,OAAOA,EAAC,CAAE,QAAC,CAAQE,GAAEa,EAAEwjB,GAAG,WAAWvjB,EAAEJ,GAAEP,GAAOO,GAAE,KAAP,GAAWmW,IAAI,CAAC,CAAC,SAASuL,IAAI,CAAC5B,GAAGD,GAAG,QAAQrgB,GAAEqgB,EAAE,CAAC,CAChT,SAASsF,GAAG/lB,EAAEK,EAAE,CAACL,EAAE,aAAa,KAAKA,EAAE,cAAc,EAAE,IAAIgB,EAAEhB,EAAE,cAAiD,GAA9BgB,IAAL,KAAShB,EAAE,cAAc,GAAGiV,GAAGjU,CAAC,GAAawjB,KAAP,KAAS,IAAIxjB,EAAEwjB,GAAE,OAAcxjB,IAAP,MAAU,CAAC,IAAID,EAAEC,EAAQ,OAAN4W,GAAG7W,CAAC,EAASA,EAAE,IAAG,CAAE,IAAK,GAAEA,EAAEA,EAAE,KAAK,kBAAyBA,GAAP,MAAsBsV,GAAE,EAAG,MAAM,IAAK,GAAE+E,GAAE,EAAGhb,GAAE6V,EAAE,EAAE7V,GAAEK,EAAC,EAAEgb,GAAE,EAAG,MAAM,IAAK,GAAEH,GAAGva,CAAC,EAAE,MAAM,IAAK,GAAEqa,GAAE,EAAG,MAAM,IAAK,IAAGhb,GAAES,EAAC,EAAE,MAAM,IAAK,IAAGT,GAAES,EAAC,EAAE,MAAM,IAAK,IAAG8Y,GAAG5Y,EAAE,KAAK,QAAQ,EAAE,MAAM,IAAK,IAAG,IAAK,IAAGuhB,GAAE,CAAE,CAACthB,EAAEA,EAAE,MAAM,CAAqE,GAApEU,GAAE1B,EAAEwkB,GAAExkB,EAAE+Y,GAAG/Y,EAAE,QAAQ,IAAI,EAAEykB,GAAE/D,GAAGrgB,EAAEwB,GAAE,EAAE6iB,GAAG,KAAKE,GAAGD,GAAG/J,GAAG,EAAEkK,GAAGD,GAAG,KAAe7K,KAAP,KAAU,CAAC,IAAI3Z,EAC1f,EAAEA,EAAE2Z,GAAG,OAAO3Z,IAAI,GAAGW,EAAEgZ,GAAG3Z,CAAC,EAAEU,EAAEC,EAAE,YAAmBD,IAAP,KAAS,CAACC,EAAE,YAAY,KAAK,IAAIV,EAAES,EAAE,KAAKK,EAAEJ,EAAE,QAAQ,GAAUI,IAAP,KAAS,CAAC,IAAID,EAAEC,EAAE,KAAKA,EAAE,KAAKd,EAAES,EAAE,KAAKI,CAAC,CAACH,EAAE,QAAQD,CAAC,CAACiZ,GAAG,IAAI,CAAC,OAAOha,CAAC,CAC3K,SAASimB,GAAGjmB,EAAEK,EAAE,CAAC,EAAE,CAAC,IAAIW,EAAEwjB,GAAE,GAAG,CAAoB,GAAnB9K,GAAE,EAAGgC,GAAG,QAAQY,GAAMT,GAAG,CAAC,QAAQ9a,EAAED,GAAE,cAAqBC,IAAP,MAAU,CAAC,IAAIT,EAAES,EAAE,MAAaT,IAAP,OAAWA,EAAE,QAAQ,MAAMS,EAAEA,EAAE,IAAI,CAAC8a,GAAG,EAAE,CAA4C,GAA3CD,GAAG,EAAEra,GAAED,GAAER,GAAE,KAAKgb,GAAG,GAAGC,GAAG,EAAEuI,GAAG,QAAQ,KAAetjB,IAAP,MAAiBA,EAAE,SAAT,KAAgB,CAACa,GAAE,EAAE6iB,GAAGrkB,EAAEmkB,GAAE,KAAK,KAAK,CAACxkB,EAAE,CAAC,IAAIoB,EAAEpB,EAAEmB,EAAEH,EAAE,OAAOE,EAAEF,EAAEC,GAAEZ,EAAqB,GAAnBA,EAAEokB,GAAEvjB,EAAE,OAAO,MAAgBD,KAAP,MAAqB,OAAOA,IAAlB,UAAkC,OAAOA,GAAE,MAAtB,WAA2B,CAAC,IAAI9B,GAAE8B,GAAEI,GAAEH,EAAE5B,GAAE+B,GAAE,IAAI,IAAQA,GAAE,KAAK,KAAZ,IAAqB/B,KAAJ,GAAYA,KAAL,IAAaA,KAAL,IAAQ,CAAC,IAAIC,GAAE8B,GAAE,UAAU9B,IAAG8B,GAAE,YAAY9B,GAAE,YAAY8B,GAAE,cAAc9B,GAAE,cACxe8B,GAAE,MAAM9B,GAAE,QAAQ8B,GAAE,YAAY,KAAKA,GAAE,cAAc,KAAK,CAAC,IAAIxB,GAAEigB,GAAG3e,CAAC,EAAE,GAAUtB,KAAP,KAAS,CAACA,GAAE,OAAO,KAAKkgB,GAAGlgB,GAAEsB,EAAED,EAAEE,EAAEf,CAAC,EAAER,GAAE,KAAK,GAAG+f,GAAGxe,EAAEjC,GAAEkB,CAAC,EAAEA,EAAER,GAAEoB,GAAE9B,GAAE,IAAIC,GAAEiB,EAAE,YAAY,GAAUjB,KAAP,KAAS,CAAC,IAAII,GAAE,IAAI,IAAIA,GAAE,IAAIyB,EAAC,EAAEZ,EAAE,YAAYb,EAAC,MAAMJ,GAAE,IAAI6B,EAAC,EAAE,MAAMjB,CAAC,KAAK,CAAC,IAAQK,EAAE,KAAP,EAAU,CAACuf,GAAGxe,EAAEjC,GAAEkB,CAAC,EAAEmhB,GAAE,EAAG,MAAMxhB,CAAC,CAACiB,GAAE,MAAM5B,EAAE,GAAG,CAAC,CAAC,CAAC,SAASqB,IAAGQ,EAAE,KAAK,EAAE,CAAC,IAAIP,GAAEmf,GAAG3e,CAAC,EAAE,GAAUR,KAAP,KAAS,EAAMA,GAAE,MAAM,SAAb,IAAsBA,GAAE,OAAO,KAAKof,GAAGpf,GAAEQ,EAAED,EAAEE,EAAEf,CAAC,EAAEoY,GAAG0G,GAAGle,GAAEC,CAAC,CAAC,EAAE,MAAMlB,CAAC,CAAC,CAACoB,EAAEH,GAAEke,GAAGle,GAAEC,CAAC,EAAMW,KAAJ,IAAQA,GAAE,GAAUgjB,KAAP,KAAUA,GAAG,CAACzjB,CAAC,EAAEyjB,GAAG,KAAKzjB,CAAC,EAAEA,EAAED,EAAE,EAAE,CAAC,OAAOC,EAAE,IAAG,CAAE,IAAK,GAAEA,EAAE,OAAO,MACpff,GAAG,CAACA,EAAEe,EAAE,OAAOf,EAAE,IAAIT,GAAE2f,GAAGne,EAAEH,GAAEZ,CAAC,EAAEqa,GAAGtZ,EAAExB,EAAC,EAAE,MAAMI,EAAE,IAAK,GAAEkB,EAAED,GAAE,IAAItB,GAAEyB,EAAE,KAAK3B,GAAE2B,EAAE,UAAU,IAAQA,EAAE,MAAM,OAAb,IAAiC,OAAOzB,GAAE,0BAAtB,YAAuDF,KAAP,MAAuB,OAAOA,GAAE,mBAAtB,aAAiDkgB,KAAP,MAAW,CAACA,GAAG,IAAIlgB,EAAC,IAAI,CAAC2B,EAAE,OAAO,MAAMf,GAAG,CAACA,EAAEe,EAAE,OAAOf,EAAE,IAAIE,GAAEmf,GAAGte,EAAEF,EAAEb,CAAC,EAAEqa,GAAGtZ,EAAEb,EAAC,EAAE,MAAMP,CAAC,CAAC,CAACoB,EAAEA,EAAE,MAAM,OAAcA,IAAP,KAAS,CAACmlB,GAAGvlB,CAAC,CAAC,OAAOoT,GAAG,CAAC/T,EAAE+T,GAAGoQ,KAAIxjB,GAAUA,IAAP,OAAWwjB,GAAExjB,EAAEA,EAAE,QAAQ,QAAQ,CAAC,KAAK,OAAO,GAAE,CAAC,SAAS8kB,IAAI,CAAC,IAAI9lB,EAAEqkB,GAAG,QAAQ,OAAAA,GAAG,QAAQ/H,GAAiBtc,IAAP,KAASsc,GAAGtc,CAAC,CACrd,SAASwhB,IAAI,EAAQ3f,KAAJ,GAAWA,KAAJ,GAAWA,KAAJ,KAAMA,GAAE,GAASH,KAAP,OAAekZ,GAAG,aAAR,IAAyB+J,GAAG,aAAR,GAAoBY,GAAG7jB,GAAE+iB,EAAC,CAAC,CAAC,SAASoB,GAAG7lB,EAAEK,EAAE,CAAC,IAAIW,EAAEJ,GAAEA,IAAG,EAAE,IAAIG,EAAE+kB,GAAE,GAAMpkB,KAAI1B,GAAGykB,KAAIpkB,KAAE0kB,GAAG,KAAKgB,GAAG/lB,EAAEK,CAAC,GAAE,EAAG,IAAG,CAACmmB,GAAE,EAAG,KAAK,OAAOlmB,EAAE,CAAC2lB,GAAGjmB,EAAEM,CAAC,CAAC,OAAO,IAAyB,GAAtBoZ,GAAE,EAAG9Y,GAAEI,EAAEqjB,GAAG,QAAQtjB,EAAYyjB,KAAP,KAAS,MAAM,MAAMnlB,EAAE,GAAG,CAAC,EAAE,OAAAqC,GAAE,KAAK+iB,GAAE,EAAS5iB,EAAC,CAAC,SAAS2kB,IAAI,CAAC,KAAYhC,KAAP,MAAUiC,GAAGjC,EAAC,CAAC,CAAC,SAASwB,IAAI,CAAC,KAAYxB,KAAP,MAAU,CAACvb,GAAE,GAAIwd,GAAGjC,EAAC,CAAC,CAAC,SAASiC,GAAGzmB,EAAE,CAAC,IAAIK,EAAEqmB,GAAG1mB,EAAE,UAAUA,EAAE0gB,EAAE,EAAE1gB,EAAE,cAAcA,EAAE,aAAoBK,IAAP,KAASkmB,GAAGvmB,CAAC,EAAEwkB,GAAEnkB,EAAEikB,GAAG,QAAQ,IAAI,CAC1d,SAASiC,GAAGvmB,EAAE,CAAC,IAAIK,EAAEL,EAAE,EAAE,CAAC,IAAIgB,EAAEX,EAAE,UAAqB,GAAXL,EAAEK,EAAE,QAAeA,EAAE,MAAM,SAAb,GAAqB,GAAGW,EAAEmhB,GAAGnhB,EAAEX,EAAEqgB,EAAE,EAAS1f,IAAP,KAAS,CAACwjB,GAAExjB,EAAE,MAAM,MAAM,CAAW,GAAVA,EAAEuhB,GAAGvhB,EAAEX,CAAC,EAAYW,IAAP,KAAS,CAACA,EAAE,OAAO,MAAMwjB,GAAExjB,EAAE,MAAM,CAAC,GAAUhB,IAAP,KAASA,EAAE,OAAO,MAAMA,EAAE,aAAa,EAAEA,EAAE,UAAU,SAAS,CAAC6B,GAAE,EAAE2iB,GAAE,KAAK,MAAM,CAAC,CAAa,GAAZnkB,EAAEA,EAAE,QAAkBA,IAAP,KAAS,CAACmkB,GAAEnkB,EAAE,MAAM,CAACmkB,GAAEnkB,EAAEL,CAAC,OAAcK,IAAP,MAAcwB,KAAJ,IAAQA,GAAE,EAAE,CAAC,SAASukB,GAAGpmB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEb,GAAEI,EAAEikB,GAAG,WAAW,GAAG,CAACA,GAAG,WAAW,KAAKrkB,GAAE,EAAEymB,GAAG3mB,EAAEK,EAAEW,EAAED,CAAC,CAAC,QAAC,CAAQwjB,GAAG,WAAWjkB,EAAEJ,GAAEa,CAAC,CAAC,OAAO,IAAI,CAChc,SAAS4lB,GAAG3mB,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAG6kB,WAAkBX,KAAP,MAAW,IAAQrkB,GAAE,KAAP,EAAU,MAAM,MAAMvB,EAAE,GAAG,CAAC,EAAE2B,EAAEhB,EAAE,aAAa,IAAIM,EAAEN,EAAE,cAAc,GAAUgB,IAAP,KAAS,OAAO,KAA2C,GAAtChB,EAAE,aAAa,KAAKA,EAAE,cAAc,EAAKgB,IAAIhB,EAAE,QAAQ,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAEW,EAAE,aAAa,KAAKA,EAAE,iBAAiB,EAAE,IAAIoB,EAAEJ,EAAE,MAAMA,EAAE,WAA8J,GAAnJ0J,GAAG1K,EAAEoB,CAAC,EAAEpB,IAAI0B,KAAI8iB,GAAE9iB,GAAE,KAAK+iB,GAAE,IAAQzjB,EAAE,aAAa,QAApB,IAAgCA,EAAE,MAAM,QAAb,GAAoBgkB,KAAKA,GAAG,GAAGU,GAAGpc,GAAG,UAAU,CAAC,OAAAsc,GAAE,EAAU,IAAI,CAAC,GAAGxkB,GAAOJ,EAAE,MAAM,SAAb,GAA4BA,EAAE,aAAa,SAApB,GAA4BI,EAAE,CAACA,EAAEmjB,GAAG,WAAWA,GAAG,WAAW,KAChf,IAAIpjB,EAAEjB,GAAEA,GAAE,EAAE,IAAIgB,EAAEN,GAAEA,IAAG,EAAE0jB,GAAG,QAAQ,KAAKzB,GAAG7iB,EAAEgB,CAAC,EAAE4iB,GAAG5iB,EAAEhB,CAAC,EAAEiS,GAAG6C,EAAE,EAAEvI,GAAG,CAAC,CAACsI,GAAGC,GAAGD,GAAG,KAAK7U,EAAE,QAAQgB,EAAEgjB,GAAGhjB,CAAK,EAAEkI,GAAE,EAAGtI,GAAEM,EAAEhB,GAAEiB,EAAEojB,GAAG,WAAWnjB,CAAC,MAAMpB,EAAE,QAAQgB,EAAsF,GAApFgkB,KAAKA,GAAG,GAAGC,GAAGjlB,EAAEklB,GAAG5kB,GAAGc,EAAEpB,EAAE,aAAiBoB,IAAJ,IAAQue,GAAG,MAAMhW,GAAG3I,EAAE,SAAW,EAAEwkB,GAAGxlB,EAAEC,GAAC,CAAE,EAAYI,IAAP,KAAS,IAAIU,EAAEf,EAAE,mBAAmBgB,EAAE,EAAEA,EAAEX,EAAE,OAAOW,IAAIV,EAAED,EAAEW,CAAC,EAAED,EAAET,EAAE,MAAM,CAAC,eAAeA,EAAE,MAAM,OAAOA,EAAE,MAAM,CAAC,EAAE,GAAGkf,GAAG,MAAMA,GAAG,GAAGxf,EAAEyf,GAAGA,GAAG,KAAKzf,EAAE,OAAKklB,GAAG,KAAR,GAAgBllB,EAAE,MAAN,GAAW4lB,GAAE,EAAGxkB,EAAEpB,EAAE,cAAkBoB,EAAE,KAAP,EAAUpB,IAAIolB,GAAGD,MAAMA,GAAG,EAAEC,GAAGplB,GAAGmlB,GAAG,EAAEpO,GAAE,EAAU,IAAI,CACre,SAAS6O,IAAI,CAAC,GAAUX,KAAP,KAAU,CAAC,IAAIjlB,EAAE4K,GAAGsa,EAAE,EAAE7kB,EAAEkkB,GAAG,WAAWvjB,EAAEd,GAAE,GAAG,CAAgC,GAA/BqkB,GAAG,WAAW,KAAKrkB,GAAE,GAAGF,EAAE,GAAGA,EAAYilB,KAAP,KAAU,IAAIlkB,EAAE,OAAO,CAAmB,GAAlBf,EAAEilB,GAAGA,GAAG,KAAKC,GAAG,GAAUtkB,GAAE,KAAP,EAAU,MAAM,MAAMvB,EAAE,GAAG,CAAC,EAAE,IAAIiB,EAAEM,GAAO,IAALA,IAAG,EAAMmB,GAAE/B,EAAE,QAAe+B,KAAP,MAAU,CAAC,IAAIX,EAAEW,GAAEZ,EAAEC,EAAE,MAAM,IAAQW,GAAE,MAAM,MAAb,EAAiB,CAAC,IAAIb,EAAEE,EAAE,UAAU,GAAUF,IAAP,KAAS,CAAC,QAAQD,GAAE,EAAEA,GAAEC,EAAE,OAAOD,KAAI,CAAC,IAAI9B,GAAE+B,EAAED,EAAC,EAAE,IAAIc,GAAE5C,GAAS4C,KAAP,MAAU,CAAC,IAAIV,GAAEU,GAAE,OAAOV,GAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAGyhB,GAAG,EAAEzhB,GAAED,CAAC,CAAC,CAAC,IAAI9B,GAAE+B,GAAE,MAAM,GAAU/B,KAAP,KAASA,GAAE,OAAO+B,GAAEU,GAAEzC,OAAO,MAAYyC,KAAP,MAAU,CAACV,GAAEU,GAAE,IAAIxC,GAAE8B,GAAE,QAAQxB,GAAEwB,GAAE,OAAa,GAAN4hB,GAAG5hB,EAAC,EAAKA,KACnflC,GAAE,CAAC4C,GAAE,KAAK,KAAK,CAAC,GAAUxC,KAAP,KAAS,CAACA,GAAE,OAAOM,GAAEkC,GAAExC,GAAE,KAAK,CAACwC,GAAElC,EAAC,CAAC,CAAC,CAAC,IAAIT,GAAEgC,EAAE,UAAU,GAAUhC,KAAP,KAAS,CAAC,IAAII,GAAEJ,GAAE,MAAM,GAAUI,KAAP,KAAS,CAACJ,GAAE,MAAM,KAAK,EAAE,CAAC,IAAIuB,GAAEnB,GAAE,QAAQA,GAAE,QAAQ,KAAKA,GAAEmB,EAAC,OAAcnB,KAAP,KAAS,CAAC,CAACuC,GAAEX,CAAC,CAAC,CAAC,IAAQA,EAAE,aAAa,QAApB,GAAkCD,IAAP,KAASA,EAAE,OAAOC,EAAEW,GAAEZ,OAAOd,EAAE,KAAY0B,KAAP,MAAU,CAAK,GAAJX,EAAEW,IAAUX,EAAE,MAAM,QAAb,EAAmB,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG0hB,GAAG,EAAE1hB,EAAEA,EAAE,MAAM,CAAC,CAAC,IAAIxB,GAAEwB,EAAE,QAAQ,GAAUxB,KAAP,KAAS,CAACA,GAAE,OAAOwB,EAAE,OAAOW,GAAEnC,GAAE,MAAMS,CAAC,CAAC0B,GAAEX,EAAE,MAAM,CAAC,CAAC,IAAIzB,GAAEK,EAAE,QAAQ,IAAI+B,GAAEpC,GAASoC,KAAP,MAAU,CAACZ,EAAEY,GAAE,IAAItC,GAAE0B,EAAE,MAAM,IAAQA,EAAE,aAAa,QAApB,GACvd1B,KADkf,KAChfA,GAAE,OAAO0B,EAAEY,GAAEtC,QAAOY,EAAE,IAAIc,EAAExB,GAASoC,KAAP,MAAU,CAAK,GAAJb,EAAEa,IAAUb,EAAE,MAAM,QAAb,EAAmB,GAAG,CAAC,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAK,IAAG,IAAK,IAAG6hB,GAAG,EAAE7hB,CAAC,CAAC,CAAC,OAAOkT,GAAG,CAACpS,GAAEd,EAAEA,EAAE,OAAOkT,EAAE,CAAC,CAAC,GAAGlT,IAAIC,EAAE,CAACY,GAAE,KAAK,MAAM1B,CAAC,CAAC,IAAIE,GAAEW,EAAE,QAAQ,GAAUX,KAAP,KAAS,CAACA,GAAE,OAAOW,EAAE,OAAOa,GAAExB,GAAE,MAAMF,CAAC,CAAC0B,GAAEb,EAAE,MAAM,CAAC,CAAU,GAATN,GAAEN,EAAEyW,GAAE,EAAMrN,IAAiB,OAAOA,GAAG,uBAAvB,WAA6C,GAAG,CAACA,GAAG,sBAAsBD,GAAGzJ,CAAC,CAAC,MAAU,EAAEe,EAAE,EAAE,CAAC,OAAOA,CAAC,QAAC,CAAQb,GAAEc,EAAEujB,GAAG,WAAWlkB,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,SAASumB,GAAG5mB,EAAEK,EAAEW,EAAE,CAACX,EAAE8e,GAAGne,EAAEX,CAAC,EAAEA,EAAEkf,GAAGvf,EAAEK,EAAE,CAAC,EAAEL,EAAEwa,GAAGxa,EAAEK,EAAE,CAAC,EAAEA,EAAEsB,GAAC,EAAU3B,IAAP,OAAWyK,GAAGzK,EAAE,EAAEK,CAAC,EAAEmlB,GAAGxlB,EAAEK,CAAC,EAAE,CACze,SAAS2B,GAAEhC,EAAEK,EAAEW,EAAE,CAAC,GAAOhB,EAAE,MAAN,EAAU4mB,GAAG5mB,EAAEA,EAAEgB,CAAC,MAAO,MAAYX,IAAP,MAAU,CAAC,GAAOA,EAAE,MAAN,EAAU,CAACumB,GAAGvmB,EAAEL,EAAEgB,CAAC,EAAE,KAAK,SAAaX,EAAE,MAAN,EAAU,CAAC,IAAIU,EAAEV,EAAE,UAAU,GAAgB,OAAOA,EAAE,KAAK,0BAA3B,YAAkE,OAAOU,EAAE,mBAAtB,aAAiD4e,KAAP,MAAW,CAACA,GAAG,IAAI5e,CAAC,GAAG,CAACf,EAAEmf,GAAGne,EAAEhB,CAAC,EAAEA,EAAE0f,GAAGrf,EAAEL,EAAE,CAAC,EAAEK,EAAEma,GAAGna,EAAEL,EAAE,CAAC,EAAEA,EAAE2B,GAAC,EAAUtB,IAAP,OAAWoK,GAAGpK,EAAE,EAAEL,CAAC,EAAEwlB,GAAGnlB,EAAEL,CAAC,GAAG,KAAK,CAAC,CAACK,EAAEA,EAAE,MAAM,CAAC,CACnV,SAASwf,GAAG7f,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAEf,EAAE,UAAiBe,IAAP,MAAUA,EAAE,OAAOV,CAAC,EAAEA,EAAEsB,GAAC,EAAG3B,EAAE,aAAaA,EAAE,eAAegB,EAAEU,KAAI1B,IAAIykB,GAAEzjB,KAAKA,IAAQa,KAAJ,GAAWA,KAAJ,IAAQ4iB,GAAE,aAAaA,IAAG,IAAIxkB,GAAC,EAAG6jB,GAAGiC,GAAG/lB,EAAE,CAAC,EAAE4kB,IAAI5jB,GAAGwkB,GAAGxlB,EAAEK,CAAC,CAAC,CAAC,SAASwmB,GAAG7mB,EAAEK,EAAE,CAAKA,IAAJ,KAAaL,EAAE,KAAK,KAAZ,EAAeK,EAAE,GAAGA,EAAE4J,GAAGA,KAAK,GAAOA,GAAG,aAAR,IAAqBA,GAAG,WAAW,IAAIjJ,EAAEW,GAAC,EAAG3B,EAAEma,GAAGna,EAAEK,CAAC,EAASL,IAAP,OAAWyK,GAAGzK,EAAEK,EAAEW,CAAC,EAAEwkB,GAAGxlB,EAAEgB,CAAC,EAAE,CAAC,SAASygB,GAAGzhB,EAAE,CAAC,IAAIK,EAAEL,EAAE,cAAcgB,EAAE,EAASX,IAAP,OAAWW,EAAEX,EAAE,WAAWwmB,GAAG7mB,EAAEgB,CAAC,CAAC,CACjZ,SAAS0iB,GAAG1jB,EAAEK,EAAE,CAAC,IAAIW,EAAE,EAAE,OAAOhB,EAAE,KAAK,IAAK,IAAG,IAAIe,EAAEf,EAAE,UAAcM,EAAEN,EAAE,cAAqBM,IAAP,OAAWU,EAAEV,EAAE,WAAW,MAAM,IAAK,IAAGS,EAAEf,EAAE,UAAU,MAAM,QAAQ,MAAM,MAAMX,EAAE,GAAG,CAAC,CAAE,CAAQ0B,IAAP,MAAUA,EAAE,OAAOV,CAAC,EAAEwmB,GAAG7mB,EAAEgB,CAAC,CAAC,CAAC,IAAI0lB,GAClNA,GAAG,SAAS1mB,EAAEK,EAAEW,EAAE,CAAC,GAAUhB,IAAP,KAAS,GAAGA,EAAE,gBAAgBK,EAAE,cAAc4V,GAAG,QAAQ6D,GAAG,OAAO,CAAC,IAAQ9Z,EAAE,MAAMgB,KAAb,IAAsBX,EAAE,MAAM,OAAb,EAAkB,OAAOyZ,GAAG,GAAG+H,GAAG7hB,EAAEK,EAAEW,CAAC,EAAE8Y,IAAQ9Z,EAAE,MAAM,UAAb,CAA0B,MAAM8Z,GAAG,GAAGpZ,KAAQL,EAAE,MAAM,WAAb,GAAuBqX,GAAGrX,EAAE8W,GAAG9W,EAAE,KAAK,EAAY,OAAVA,EAAE,MAAM,EAASA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAIU,EAAEV,EAAE,KAAKwgB,GAAG7gB,EAAEK,CAAC,EAAEL,EAAEK,EAAE,aAAa,IAAIC,EAAE6V,GAAG9V,EAAEI,GAAE,OAAO,EAAEoZ,GAAGxZ,EAAEW,CAAC,EAAEV,EAAE4b,GAAG,KAAK7b,EAAEU,EAAEf,EAAEM,EAAEU,CAAC,EAAE,IAAII,EAAEmb,GAAE,EAAG,OAAAlc,EAAE,OAAO,EAAa,OAAOC,GAAlB,UAA4BA,IAAP,MAAuB,OAAOA,EAAE,QAAtB,YAAuCA,EAAE,WAAX,QAAqBD,EAAE,IAAI,EAAEA,EAAE,cAAc,KAAKA,EAAE,YAC1e,KAAK+V,GAAGrV,CAAC,GAAGK,EAAE,GAAGoV,GAAGnW,CAAC,GAAGe,EAAE,GAAGf,EAAE,cAAqBC,EAAE,QAAT,MAAyBA,EAAE,QAAX,OAAiBA,EAAE,MAAM,KAAK+Z,GAAGha,CAAC,EAAEC,EAAE,QAAQwe,GAAGze,EAAE,UAAUC,EAAEA,EAAE,gBAAgBD,EAAE6e,GAAG7e,EAAEU,EAAEf,EAAEgB,CAAC,EAAEX,EAAEygB,GAAG,KAAKzgB,EAAEU,EAAE,GAAGK,EAAEJ,CAAC,IAAIX,EAAE,IAAI,EAAEK,IAAGU,GAAGuW,GAAGtX,CAAC,EAAE4f,GAAG,KAAK5f,EAAEC,EAAEU,CAAC,EAAEX,EAAEA,EAAE,OAAcA,EAAE,IAAK,IAAGU,EAAEV,EAAE,YAAYL,EAAE,CAAqF,OAApF6gB,GAAG7gB,EAAEK,CAAC,EAAEL,EAAEK,EAAE,aAAaC,EAAES,EAAE,MAAMA,EAAET,EAAES,EAAE,QAAQ,EAAEV,EAAE,KAAKU,EAAET,EAAED,EAAE,IAAIymB,GAAG/lB,CAAC,EAAEf,EAAE4e,GAAG7d,EAAEf,CAAC,EAASM,EAAC,CAAE,IAAK,GAAED,EAAEkgB,GAAG,KAAKlgB,EAAEU,EAAEf,EAAEgB,CAAC,EAAE,MAAMhB,EAAE,IAAK,GAAEK,EAAEugB,GAAG,KAAKvgB,EAAEU,EAAEf,EAAEgB,CAAC,EAAE,MAAMhB,EAAE,IAAK,IAAGK,EAAE6f,GAAG,KAAK7f,EAAEU,EAAEf,EAAEgB,CAAC,EAAE,MAAMhB,EAAE,IAAK,IAAGK,EAAE+f,GAAG,KAAK/f,EAAEU,EAAE6d,GAAG7d,EAAE,KAAKf,CAAC,EAAEgB,CAAC,EAAE,MAAMhB,CAAC,CAAC,MAAM,MAAMX,EAAE,IACvgB0B,EAAE,EAAE,CAAC,CAAE,CAAC,OAAOV,EAAE,IAAK,GAAE,OAAOU,EAAEV,EAAE,KAAKC,EAAED,EAAE,aAAaC,EAAED,EAAE,cAAcU,EAAET,EAAEse,GAAG7d,EAAET,CAAC,EAAEigB,GAAGvgB,EAAEK,EAAEU,EAAET,EAAEU,CAAC,EAAE,IAAK,GAAE,OAAOD,EAAEV,EAAE,KAAKC,EAAED,EAAE,aAAaC,EAAED,EAAE,cAAcU,EAAET,EAAEse,GAAG7d,EAAET,CAAC,EAAEsgB,GAAG5gB,EAAEK,EAAEU,EAAET,EAAEU,CAAC,EAAE,IAAK,GAAEhB,EAAE,CAAO,GAAN+gB,GAAG1gB,CAAC,EAAYL,IAAP,KAAS,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE0B,EAAEV,EAAE,aAAae,EAAEf,EAAE,cAAcC,EAAEc,EAAE,QAAQkZ,GAAGta,EAAEK,CAAC,EAAEsa,GAAGta,EAAEU,EAAE,KAAKC,CAAC,EAAE,IAAIG,EAAEd,EAAE,cAA0B,GAAZU,EAAEI,EAAE,QAAWC,EAAE,aAAa,GAAGA,EAAE,CAAC,QAAQL,EAAE,aAAa,GAAG,MAAMI,EAAE,MAAM,0BAA0BA,EAAE,0BAA0B,YAAYA,EAAE,WAAW,EAAEd,EAAE,YAAY,UAChfe,EAAEf,EAAE,cAAce,EAAEf,EAAE,MAAM,IAAI,CAACC,EAAE6e,GAAG,MAAM9f,EAAE,GAAG,CAAC,EAAEgB,CAAC,EAAEA,EAAE2gB,GAAGhhB,EAAEK,EAAEU,EAAEC,EAAEV,CAAC,EAAE,MAAMN,CAAC,SAASe,IAAIT,EAAE,CAACA,EAAE6e,GAAG,MAAM9f,EAAE,GAAG,CAAC,EAAEgB,CAAC,EAAEA,EAAE2gB,GAAGhhB,EAAEK,EAAEU,EAAEC,EAAEV,CAAC,EAAE,MAAMN,CAAC,KAAM,KAAI8X,GAAGxC,GAAGjV,EAAE,UAAU,cAAc,UAAU,EAAEwX,GAAGxX,EAAEK,GAAE,GAAGqX,GAAG,KAAK/W,EAAEqY,GAAGhZ,EAAE,KAAKU,EAAEC,CAAC,EAAEX,EAAE,MAAMW,EAAEA,GAAGA,EAAE,MAAMA,EAAE,MAAM,GAAG,KAAKA,EAAEA,EAAE,YAAY,CAAM,GAALwX,GAAE,EAAMzX,IAAIT,EAAE,CAACD,EAAE8f,GAAGngB,EAAEK,EAAEW,CAAC,EAAE,MAAMhB,CAAC,CAACigB,GAAGjgB,EAAEK,EAAEU,EAAEC,CAAC,CAAC,CAACX,EAAEA,EAAE,KAAK,CAAC,OAAOA,EAAE,IAAK,GAAE,OAAOgb,GAAGhb,CAAC,EAASL,IAAP,MAAUoY,GAAG/X,CAAC,EAAEU,EAAEV,EAAE,KAAKC,EAAED,EAAE,aAAae,EAASpB,IAAP,KAASA,EAAE,cAAc,KAAKmB,EAAEb,EAAE,SAASyU,GAAGhU,EAAET,CAAC,EAAEa,EAAE,KAAYC,IAAP,MAAU2T,GAAGhU,EAAEK,CAAC,IAAIf,EAAE,OAAO,IACnfsgB,GAAG3gB,EAAEK,CAAC,EAAE4f,GAAGjgB,EAAEK,EAAEc,EAAEH,CAAC,EAAEX,EAAE,MAAM,IAAK,GAAE,OAAcL,IAAP,MAAUoY,GAAG/X,CAAC,EAAE,KAAK,IAAK,IAAG,OAAO8gB,GAAGnhB,EAAEK,EAAEW,CAAC,EAAE,IAAK,GAAE,OAAOma,GAAG9a,EAAEA,EAAE,UAAU,aAAa,EAAEU,EAAEV,EAAE,aAAoBL,IAAP,KAASK,EAAE,MAAM+Y,GAAG/Y,EAAE,KAAKU,EAAEC,CAAC,EAAEif,GAAGjgB,EAAEK,EAAEU,EAAEC,CAAC,EAAEX,EAAE,MAAM,IAAK,IAAG,OAAOU,EAAEV,EAAE,KAAKC,EAAED,EAAE,aAAaC,EAAED,EAAE,cAAcU,EAAET,EAAEse,GAAG7d,EAAET,CAAC,EAAE4f,GAAGlgB,EAAEK,EAAEU,EAAET,EAAEU,CAAC,EAAE,IAAK,GAAE,OAAOif,GAAGjgB,EAAEK,EAAEA,EAAE,aAAaW,CAAC,EAAEX,EAAE,MAAM,IAAK,GAAE,OAAO4f,GAAGjgB,EAAEK,EAAEA,EAAE,aAAa,SAASW,CAAC,EAAEX,EAAE,MAAM,IAAK,IAAG,OAAO4f,GAAGjgB,EAAEK,EAAEA,EAAE,aAAa,SAASW,CAAC,EAAEX,EAAE,MAAM,IAAK,IAAGL,EAAE,CACxZ,GADyZe,EAAEV,EAAE,KAAK,SAASC,EAAED,EAAE,aAAae,EAAEf,EAAE,cAClfc,EAAEb,EAAE,MAAME,GAAE8Y,GAAGvY,EAAE,aAAa,EAAEA,EAAE,cAAcI,EAAYC,IAAP,KAAS,GAAGsQ,GAAGtQ,EAAE,MAAMD,CAAC,GAAG,GAAGC,EAAE,WAAWd,EAAE,UAAU,CAAC2V,GAAG,QAAQ,CAAC5V,EAAE8f,GAAGngB,EAAEK,EAAEW,CAAC,EAAE,MAAMhB,CAAC,MAAO,KAAIoB,EAAEf,EAAE,MAAae,IAAP,OAAWA,EAAE,OAAOf,GAAUe,IAAP,MAAU,CAAC,IAAIF,EAAEE,EAAE,aAAa,GAAUF,IAAP,KAAS,CAACC,EAAEC,EAAE,MAAM,QAAQH,GAAEC,EAAE,aAAoBD,KAAP,MAAU,CAAC,GAAGA,GAAE,UAAUF,EAAE,CAAC,GAAOK,EAAE,MAAN,EAAU,CAACH,GAAEsZ,GAAG,GAAGvZ,EAAE,CAACA,CAAC,EAAEC,GAAE,IAAI,EAAE,IAAI9B,GAAEiC,EAAE,YAAY,GAAUjC,KAAP,KAAS,CAACA,GAAEA,GAAE,OAAO,IAAIkC,GAAElC,GAAE,QAAekC,KAAP,KAASJ,GAAE,KAAKA,IAAGA,GAAE,KAAKI,GAAE,KAAKA,GAAE,KAAKJ,IAAG9B,GAAE,QAAQ8B,EAAC,CAAC,CAACG,EAAE,OAAOJ,EAAEC,GAAEG,EAAE,UAAiBH,KAAP,OAAWA,GAAE,OAAOD,GAAG4Y,GAAGxY,EAAE,OAClfJ,EAAEX,CAAC,EAAEa,EAAE,OAAOF,EAAE,KAAK,CAACC,GAAEA,GAAE,IAAI,CAAC,SAAcG,EAAE,MAAP,GAAWD,EAAEC,EAAE,OAAOf,EAAE,KAAK,KAAKe,EAAE,cAAmBA,EAAE,MAAP,GAAW,CAAY,GAAXD,EAAEC,EAAE,OAAiBD,IAAP,KAAS,MAAM,MAAM9B,EAAE,GAAG,CAAC,EAAE8B,EAAE,OAAOH,EAAEE,EAAEC,EAAE,UAAiBD,IAAP,OAAWA,EAAE,OAAOF,GAAG4Y,GAAGzY,EAAEH,EAAEX,CAAC,EAAEc,EAAEC,EAAE,OAAO,MAAMD,EAAEC,EAAE,MAAM,GAAUD,IAAP,KAASA,EAAE,OAAOC,MAAO,KAAID,EAAEC,EAASD,IAAP,MAAU,CAAC,GAAGA,IAAId,EAAE,CAACc,EAAE,KAAK,KAAK,CAAa,GAAZC,EAAED,EAAE,QAAkBC,IAAP,KAAS,CAACA,EAAE,OAAOD,EAAE,OAAOA,EAAEC,EAAE,KAAK,CAACD,EAAEA,EAAE,MAAM,CAACC,EAAED,CAAC,CAAC8e,GAAGjgB,EAAEK,EAAEC,EAAE,SAASU,CAAC,EAAEX,EAAEA,EAAE,KAAK,CAAC,OAAOA,EAAE,IAAK,GAAE,OAAOC,EAAED,EAAE,KAAKU,EAAEV,EAAE,aAAa,SAASwZ,GAAGxZ,EAAEW,CAAC,EAAEV,EAAEyZ,GAAGzZ,CAAC,EAAES,EAAEA,EAAET,CAAC,EAAED,EAAE,OAAO,EAAE4f,GAAGjgB,EAAEK,EAAEU,EAAEC,CAAC,EACrfX,EAAE,MAAM,IAAK,IAAG,OAAOU,EAAEV,EAAE,KAAKC,EAAEse,GAAG7d,EAAEV,EAAE,YAAY,EAAEC,EAAEse,GAAG7d,EAAE,KAAKT,CAAC,EAAE8f,GAAGpgB,EAAEK,EAAEU,EAAET,EAAEU,CAAC,EAAE,IAAK,IAAG,OAAOsf,GAAGtgB,EAAEK,EAAEA,EAAE,KAAKA,EAAE,aAAaW,CAAC,EAAE,IAAK,IAAG,OAAOD,EAAEV,EAAE,KAAKC,EAAED,EAAE,aAAaC,EAAED,EAAE,cAAcU,EAAET,EAAEse,GAAG7d,EAAET,CAAC,EAAEugB,GAAG7gB,EAAEK,CAAC,EAAEA,EAAE,IAAI,EAAE+V,GAAGrV,CAAC,GAAGf,EAAE,GAAGwW,GAAGnW,CAAC,GAAGL,EAAE,GAAG6Z,GAAGxZ,EAAEW,CAAC,EAAEge,GAAG3e,EAAEU,EAAET,CAAC,EAAE4e,GAAG7e,EAAEU,EAAET,EAAEU,CAAC,EAAE8f,GAAG,KAAKzgB,EAAEU,EAAE,GAAGf,EAAEgB,CAAC,EAAE,IAAK,IAAG,OAAO4gB,GAAG5hB,EAAEK,EAAEW,CAAC,EAAE,IAAK,IAAG,OAAOwf,GAAGxgB,EAAEK,EAAEW,CAAC,CAAC,CAAC,MAAM,MAAM3B,EAAE,IAAIgB,EAAE,GAAG,CAAC,CAAE,EAAE,SAASqlB,GAAG1lB,EAAEK,EAAE,CAAC,OAAO0I,GAAG/I,EAAEK,CAAC,CAAC,CACjZ,SAAS0mB,GAAG/mB,EAAEK,EAAEW,EAAED,EAAE,CAAC,KAAK,IAAIf,EAAE,KAAK,IAAIgB,EAAE,KAAK,QAAQ,KAAK,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,KAAK,KAAK,YAAY,KAAK,KAAK,MAAM,EAAE,KAAK,IAAI,KAAK,KAAK,aAAaX,EAAE,KAAK,aAAa,KAAK,cAAc,KAAK,YAAY,KAAK,cAAc,KAAK,KAAK,KAAKU,EAAE,KAAK,aAAa,KAAK,MAAM,EAAE,KAAK,UAAU,KAAK,KAAK,WAAW,KAAK,MAAM,EAAE,KAAK,UAAU,IAAI,CAAC,SAASkX,GAAGjY,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAO,IAAIgmB,GAAG/mB,EAAEK,EAAEW,EAAED,CAAC,CAAC,CAAC,SAASsf,GAAGrgB,EAAE,CAAC,OAAAA,EAAEA,EAAE,UAAgB,EAAE,CAACA,GAAG,CAACA,EAAE,iBAAiB,CACpd,SAAS8mB,GAAG9mB,EAAE,CAAC,GAAgB,OAAOA,GAApB,WAAsB,OAAOqgB,GAAGrgB,CAAC,EAAE,EAAE,EAAE,GAAsBA,GAAP,KAAS,CAAc,GAAbA,EAAEA,EAAE,SAAYA,IAAImE,GAAG,MAAO,IAAG,GAAGnE,IAAIsE,GAAG,MAAO,GAAE,CAAC,MAAO,EAAC,CAC/I,SAASyU,GAAG/Y,EAAEK,EAAE,CAAC,IAAIW,EAAEhB,EAAE,UAAU,OAAOgB,IAAP,MAAUA,EAAEiX,GAAGjY,EAAE,IAAIK,EAAEL,EAAE,IAAIA,EAAE,IAAI,EAAEgB,EAAE,YAAYhB,EAAE,YAAYgB,EAAE,KAAKhB,EAAE,KAAKgB,EAAE,UAAUhB,EAAE,UAAUgB,EAAE,UAAUhB,EAAEA,EAAE,UAAUgB,IAAIA,EAAE,aAAaX,EAAEW,EAAE,KAAKhB,EAAE,KAAKgB,EAAE,MAAM,EAAEA,EAAE,aAAa,EAAEA,EAAE,UAAU,MAAMA,EAAE,MAAMhB,EAAE,MAAM,SAASgB,EAAE,WAAWhB,EAAE,WAAWgB,EAAE,MAAMhB,EAAE,MAAMgB,EAAE,MAAMhB,EAAE,MAAMgB,EAAE,cAAchB,EAAE,cAAcgB,EAAE,cAAchB,EAAE,cAAcgB,EAAE,YAAYhB,EAAE,YAAYK,EAAEL,EAAE,aAAagB,EAAE,aAAoBX,IAAP,KAAS,KAAK,CAAC,MAAMA,EAAE,MAAM,aAAaA,EAAE,YAAY,EAC3fW,EAAE,QAAQhB,EAAE,QAAQgB,EAAE,MAAMhB,EAAE,MAAMgB,EAAE,IAAIhB,EAAE,IAAWgB,CAAC,CACxD,SAASiY,GAAGjZ,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAE,CAAC,IAAID,EAAE,EAAM,GAAJJ,EAAEf,EAAkB,OAAOA,GAApB,WAAsBqgB,GAAGrgB,CAAC,IAAImB,EAAE,WAAsB,OAAOnB,GAAlB,SAAoBmB,EAAE,OAAOnB,EAAE,OAAOA,EAAC,CAAE,KAAK8D,EAAG,OAAOqV,GAAGnY,EAAE,SAASV,EAAEc,EAAEf,CAAC,EAAE,KAAK0D,EAAG5C,EAAE,EAAEb,GAAG,EAAE,MAAM,KAAK0D,EAAG,OAAOhE,EAAEiY,GAAG,GAAGjX,EAAEX,EAAEC,EAAE,CAAC,EAAEN,EAAE,YAAYgE,EAAGhE,EAAE,MAAMoB,EAAEpB,EAAE,KAAKoE,EAAG,OAAOpE,EAAEiY,GAAG,GAAGjX,EAAEX,EAAEC,CAAC,EAAEN,EAAE,YAAYoE,EAAGpE,EAAE,MAAMoB,EAAEpB,EAAE,KAAKqE,EAAG,OAAOrE,EAAEiY,GAAG,GAAGjX,EAAEX,EAAEC,CAAC,EAAEN,EAAE,YAAYqE,EAAGrE,EAAE,MAAMoB,EAAEpB,EAAE,KAAKwE,GAAG,OAAO4c,GAAGpgB,EAAEV,EAAEc,EAAEf,CAAC,EAAE,QAAQ,GAAc,OAAOL,GAAlB,UAA4BA,IAAP,KAAS,OAAOA,EAAE,SAAQ,CAAE,KAAKiE,EAAG9C,EAAE,GAAG,MAAMnB,EAAE,KAAKkE,EAAG/C,EAAE,EAAE,MAAMnB,EAAE,KAAKmE,GAAGhD,EAAE,GACpf,MAAMnB,EAAE,KAAKsE,GAAGnD,EAAE,GAAG,MAAMnB,EAAE,KAAKuE,GAAGpD,EAAE,GAAGJ,EAAE,KAAK,MAAMf,CAAC,CAAC,MAAM,MAAMX,EAAE,IAAUW,GAAN,KAAQA,EAAE,OAAOA,EAAE,EAAE,CAAC,CAAE,CAAC,OAAAK,EAAE4X,GAAG9W,EAAEH,EAAEX,EAAEC,CAAC,EAAED,EAAE,YAAYL,EAAEK,EAAE,KAAKU,EAAEV,EAAE,MAAMe,EAASf,CAAC,CAAC,SAAS8Y,GAAGnZ,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAAf,EAAEiY,GAAG,EAAEjY,EAAEe,EAAEV,CAAC,EAAEL,EAAE,MAAMgB,EAAShB,CAAC,CAAC,SAASohB,GAAGphB,EAAEK,EAAEW,EAAED,EAAE,CAAC,OAAAf,EAAEiY,GAAG,GAAGjY,EAAEe,EAAEV,CAAC,EAAEL,EAAE,YAAYwE,GAAGxE,EAAE,MAAMgB,EAAEhB,EAAE,UAAU,CAAC,SAAS,EAAE,EAASA,CAAC,CAAC,SAASgZ,GAAGhZ,EAAEK,EAAEW,EAAE,CAAC,OAAAhB,EAAEiY,GAAG,EAAEjY,EAAE,KAAKK,CAAC,EAAEL,EAAE,MAAMgB,EAAShB,CAAC,CAC5W,SAASkZ,GAAGlZ,EAAEK,EAAEW,EAAE,CAAC,OAAAX,EAAE4X,GAAG,EAASjY,EAAE,WAAT,KAAkBA,EAAE,SAAS,GAAGA,EAAE,IAAIK,CAAC,EAAEA,EAAE,MAAMW,EAAEX,EAAE,UAAU,CAAC,cAAcL,EAAE,cAAc,gBAAgB,KAAK,eAAeA,EAAE,cAAc,EAASK,CAAC,CACtL,SAAS2mB,GAAGhnB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,KAAK,IAAID,EAAE,KAAK,cAAcL,EAAE,KAAK,aAAa,KAAK,UAAU,KAAK,QAAQ,KAAK,gBAAgB,KAAK,KAAK,cAAc,GAAG,KAAK,aAAa,KAAK,eAAe,KAAK,QAAQ,KAAK,KAAK,iBAAiB,EAAE,KAAK,WAAWwK,GAAG,CAAC,EAAE,KAAK,gBAAgBA,GAAG,EAAE,EAAE,KAAK,eAAe,KAAK,cAAc,KAAK,iBAAiB,KAAK,aAAa,KAAK,YAAY,KAAK,eAAe,KAAK,aAAa,EAAE,KAAK,cAAcA,GAAG,CAAC,EAAE,KAAK,iBAAiBzJ,EAAE,KAAK,mBAAmBT,EAAE,KAAK,gCAC/e,IAAI,CAAC,SAAS2mB,GAAGjnB,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAED,EAAED,GAAE,CAAC,OAAAjB,EAAE,IAAIgnB,GAAGhnB,EAAEK,EAAEW,EAAEE,EAAED,EAAC,EAAMZ,IAAJ,GAAOA,EAAE,EAAOe,IAAL,KAASf,GAAG,IAAIA,EAAE,EAAEe,EAAE6W,GAAG,EAAE,KAAK,KAAK5X,CAAC,EAAEL,EAAE,QAAQoB,EAAEA,EAAE,UAAUpB,EAAEoB,EAAE,cAAc,CAAC,QAAQL,EAAE,aAAaC,EAAE,MAAM,KAAK,YAAY,KAAK,0BAA0B,IAAI,EAAEqZ,GAAGjZ,CAAC,EAASpB,CAAC,CAAC,SAASknB,GAAGlnB,EAAEK,EAAEW,EAAE,CAAC,IAAID,EAAE,EAAE,UAAU,QAAiB,UAAU,CAAC,IAApB,OAAsB,UAAU,CAAC,EAAE,KAAK,MAAM,CAAC,SAAS8C,EAAG,IAAU9C,GAAN,KAAQ,KAAK,GAAGA,EAAE,SAASf,EAAE,cAAcK,EAAE,eAAeW,CAAC,CAAC,CACpa,SAASmmB,GAAGnnB,EAAE,CAAC,GAAG,CAACA,EAAE,OAAOgW,GAAGhW,EAAEA,EAAE,gBAAgBA,EAAE,CAAC,GAAGyI,GAAGzI,CAAC,IAAIA,GAAOA,EAAE,MAAN,EAAU,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE,IAAIgB,EAAEL,EAAE,EAAE,CAAC,OAAOK,EAAE,IAAG,CAAE,IAAK,GAAEA,EAAEA,EAAE,UAAU,QAAQ,MAAML,EAAE,IAAK,GAAE,GAAGoW,GAAG/V,EAAE,IAAI,EAAE,CAACA,EAAEA,EAAE,UAAU,0CAA0C,MAAML,CAAC,CAAC,CAACK,EAAEA,EAAE,MAAM,OAAcA,IAAP,MAAU,MAAM,MAAMhB,EAAE,GAAG,CAAC,CAAE,CAAC,GAAOW,EAAE,MAAN,EAAU,CAAC,IAAIgB,EAAEhB,EAAE,KAAK,GAAGoW,GAAGpV,CAAC,EAAE,OAAOuV,GAAGvW,EAAEgB,EAAEX,CAAC,CAAC,CAAC,OAAOA,CAAC,CACpW,SAAS+mB,GAAGpnB,EAAEK,EAAEW,EAAED,EAAET,EAAEc,EAAED,EAAED,EAAED,GAAE,CAAC,OAAAjB,EAAEinB,GAAGjmB,EAAED,EAAE,GAAGf,EAAEM,EAAEc,EAAED,EAAED,EAAED,EAAC,EAAEjB,EAAE,QAAQmnB,GAAG,IAAI,EAAEnmB,EAAEhB,EAAE,QAAQe,EAAEY,GAAC,EAAGrB,EAAEke,GAAGxd,CAAC,EAAEI,EAAEmZ,GAAGxZ,EAAET,CAAC,EAAEc,EAAE,SAA4Bf,GAAI,KAAKma,GAAGxZ,EAAEI,EAAEd,CAAC,EAAEN,EAAE,QAAQ,MAAMM,EAAEmK,GAAGzK,EAAEM,EAAES,CAAC,EAAEykB,GAAGxlB,EAAEe,CAAC,EAASf,CAAC,CAAC,SAASqnB,GAAGrnB,EAAEK,EAAEW,EAAED,EAAE,CAAC,IAAIT,EAAED,EAAE,QAAQe,EAAEO,GAAC,EAAGR,EAAEqd,GAAGle,CAAC,EAAE,OAAAU,EAAEmmB,GAAGnmB,CAAC,EAASX,EAAE,UAAT,KAAiBA,EAAE,QAAQW,EAAEX,EAAE,eAAeW,EAAEX,EAAEka,GAAGnZ,EAAED,CAAC,EAAEd,EAAE,QAAQ,CAAC,QAAQL,CAAC,EAAEe,EAAWA,IAAT,OAAW,KAAKA,EAASA,IAAP,OAAWV,EAAE,SAASU,GAAGf,EAAEwa,GAAGla,EAAED,EAAEc,CAAC,EAASnB,IAAP,OAAWsd,GAAGtd,EAAEM,EAAEa,EAAEC,CAAC,EAAEqZ,GAAGza,EAAEM,EAAEa,CAAC,GAAUA,CAAC,CAC3b,SAASmmB,GAAGtnB,EAAE,CAAa,GAAZA,EAAEA,EAAE,QAAW,CAACA,EAAE,MAAM,OAAO,KAAK,OAAOA,EAAE,MAAM,IAAG,CAAE,IAAK,GAAE,OAAOA,EAAE,MAAM,UAAU,QAAQ,OAAOA,EAAE,MAAM,SAAS,CAAC,CAAC,SAASunB,GAAGvnB,EAAEK,EAAE,CAAmB,GAAlBL,EAAEA,EAAE,cAAwBA,IAAP,MAAiBA,EAAE,aAAT,KAAoB,CAAC,IAAIgB,EAAEhB,EAAE,UAAUA,EAAE,UAAcgB,IAAJ,GAAOA,EAAEX,EAAEW,EAAEX,CAAC,CAAC,CAAC,SAASmnB,GAAGxnB,EAAEK,EAAE,CAACknB,GAAGvnB,EAAEK,CAAC,GAAGL,EAAEA,EAAE,YAAYunB,GAAGvnB,EAAEK,CAAC,CAAC,CAAC,SAASonB,IAAI,CAAC,OAAO,IAAI,CAAC,IAAIC,GAAgB,OAAO,aAApB,WAAgC,YAAY,SAAS1nB,EAAE,CAAC,QAAQ,MAAMA,CAAC,CAAC,EAAE,SAAS2nB,GAAG3nB,EAAE,CAAC,KAAK,cAAcA,CAAC,CAC5b4nB,GAAG,UAAU,OAAOD,GAAG,UAAU,OAAO,SAAS3nB,EAAE,CAAC,IAAIK,EAAE,KAAK,cAAc,GAAUA,IAAP,KAAS,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAEgoB,GAAGrnB,EAAEK,EAAE,KAAK,IAAI,CAAC,EAAEunB,GAAG,UAAU,QAAQD,GAAG,UAAU,QAAQ,UAAU,CAAC,IAAI3nB,EAAE,KAAK,cAAc,GAAUA,IAAP,KAAS,CAAC,KAAK,cAAc,KAAK,IAAIK,EAAEL,EAAE,cAAcsmB,GAAG,UAAU,CAACe,GAAG,KAAKrnB,EAAE,KAAK,IAAI,CAAC,CAAC,EAAEK,EAAE4T,EAAE,EAAE,IAAI,CAAC,EAAE,SAAS2T,GAAG5nB,EAAE,CAAC,KAAK,cAAcA,CAAC,CAC9V4nB,GAAG,UAAU,2BAA2B,SAAS5nB,EAAE,CAAC,GAAGA,EAAE,CAAC,IAAIK,EAAE2K,GAAE,EAAGhL,EAAE,CAAC,UAAU,KAAK,OAAOA,EAAE,SAASK,CAAC,EAAE,QAAQW,EAAE,EAAEA,EAAEyK,GAAG,QAAYpL,IAAJ,GAAOA,EAAEoL,GAAGzK,CAAC,EAAE,SAASA,IAAI,CAACyK,GAAG,OAAOzK,EAAE,EAAEhB,CAAC,EAAMgB,IAAJ,GAAO8K,GAAG9L,CAAC,CAAC,CAAC,EAAE,SAAS6nB,GAAG7nB,EAAE,CAAC,MAAM,EAAE,CAACA,GAAOA,EAAE,WAAN,GAAoBA,EAAE,WAAN,GAAqBA,EAAE,WAAP,GAAgB,CAAC,SAAS8nB,GAAG9nB,EAAE,CAAC,MAAM,EAAE,CAACA,GAAOA,EAAE,WAAN,GAAoBA,EAAE,WAAN,GAAqBA,EAAE,WAAP,KAAsBA,EAAE,WAAN,GAAiDA,EAAE,YAAnC,gCAA8C,CAAC,SAAS+nB,IAAI,EACva,SAASC,GAAGhoB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,GAAGA,EAAE,CAAC,GAAgB,OAAOS,GAApB,WAAsB,CAAC,IAAIK,EAAEL,EAAEA,EAAE,UAAU,CAAC,IAAIf,GAAEsnB,GAAGnmB,CAAC,EAAEC,EAAE,KAAKpB,EAAC,CAAC,CAAC,CAAC,IAAImB,EAAEimB,GAAG/mB,EAAEU,EAAEf,EAAE,EAAE,KAAK,GAAG,GAAG,GAAG+nB,EAAE,EAAE,OAAA/nB,EAAE,oBAAoBmB,EAAEnB,EAAEiU,EAAE,EAAE9S,EAAE,QAAQ4S,GAAO/T,EAAE,WAAN,EAAeA,EAAE,WAAWA,CAAC,EAAEsmB,GAAE,EAAUnlB,CAAC,CAAC,KAAKb,EAAEN,EAAE,WAAWA,EAAE,YAAYM,CAAC,EAAE,GAAgB,OAAOS,GAApB,WAAsB,CAAC,IAAIG,EAAEH,EAAEA,EAAE,UAAU,CAAC,IAAIf,GAAEsnB,GAAGrmB,EAAC,EAAEC,EAAE,KAAKlB,EAAC,CAAC,CAAC,CAAC,IAAIiB,GAAEgmB,GAAGjnB,EAAE,EAAE,GAAG,KAAK,KAAK,GAAG,GAAG,GAAG+nB,EAAE,EAAE,OAAA/nB,EAAE,oBAAoBiB,GAAEjB,EAAEiU,EAAE,EAAEhT,GAAE,QAAQ8S,GAAO/T,EAAE,WAAN,EAAeA,EAAE,WAAWA,CAAC,EAAEsmB,GAAG,UAAU,CAACe,GAAGhnB,EAAEY,GAAED,EAAED,CAAC,CAAC,CAAC,EAASE,EAAC,CAC9d,SAASgnB,GAAGjoB,EAAEK,EAAEW,EAAED,EAAET,EAAE,CAAC,IAAIc,EAAEJ,EAAE,oBAAoB,GAAGI,EAAE,CAAC,IAAID,EAAEC,EAAE,GAAgB,OAAOd,GAApB,WAAsB,CAAC,IAAIY,EAAEZ,EAAEA,EAAE,UAAU,CAAC,IAAIN,GAAEsnB,GAAGnmB,CAAC,EAAED,EAAE,KAAKlB,EAAC,CAAC,CAAC,CAACqnB,GAAGhnB,EAAEc,EAAEnB,EAAEM,CAAC,CAAC,MAAMa,EAAE6mB,GAAGhnB,EAAEX,EAAEL,EAAEM,EAAES,CAAC,EAAE,OAAOumB,GAAGnmB,CAAC,CAAC,CAAC0J,GAAG,SAAS7K,EAAE,CAAC,OAAOA,EAAE,IAAG,CAAE,IAAK,GAAE,IAAIK,EAAEL,EAAE,UAAU,GAAGK,EAAE,QAAQ,cAAc,aAAa,CAAC,IAAIW,EAAEkJ,GAAG7J,EAAE,YAAY,EAAMW,IAAJ,IAAQ2J,GAAGtK,EAAEW,EAAE,CAAC,EAAEwkB,GAAGnlB,EAAEJ,GAAC,CAAE,GAAOW,GAAE,KAAP,IAAYyhB,GAAGpiB,GAAC,EAAG,IAAI8W,GAAE,GAAI,CAAC,MAAM,IAAK,IAAGuP,GAAG,UAAU,CAAC,IAAIjmB,EAAE8Z,GAAGna,EAAE,CAAC,EAAE,GAAUK,IAAP,KAAS,CAAC,IAAIW,EAAEW,GAAC,EAAG2b,GAAGjd,EAAEL,EAAE,EAAEgB,CAAC,CAAC,CAAC,CAAC,EAAEwmB,GAAGxnB,EAAE,CAAC,CAAC,CAAC,EAC/b8K,GAAG,SAAS9K,EAAE,CAAC,GAAQA,EAAE,MAAP,GAAW,CAAC,IAAIK,EAAE8Z,GAAGna,EAAE,SAAS,EAAE,GAAUK,IAAP,KAAS,CAAC,IAAIW,EAAEW,GAAC,EAAG2b,GAAGjd,EAAEL,EAAE,UAAUgB,CAAC,CAAC,CAACwmB,GAAGxnB,EAAE,SAAS,CAAC,CAAC,EAAE+K,GAAG,SAAS/K,EAAE,CAAC,GAAQA,EAAE,MAAP,GAAW,CAAC,IAAIK,EAAEme,GAAGxe,CAAC,EAAEgB,EAAEmZ,GAAGna,EAAEK,CAAC,EAAE,GAAUW,IAAP,KAAS,CAAC,IAAID,EAAEY,GAAC,EAAG2b,GAAGtc,EAAEhB,EAAEK,EAAEU,CAAC,CAAC,CAACymB,GAAGxnB,EAAEK,CAAC,CAAC,CAAC,EAAE2K,GAAG,UAAU,CAAC,OAAO9K,EAAC,EAAE+K,GAAG,SAASjL,EAAEK,EAAE,CAAC,IAAIW,EAAEd,GAAE,GAAG,CAAC,OAAOA,GAAEF,EAAEK,EAAC,CAAE,QAAC,CAAQH,GAAEc,CAAC,CAAC,EAClSkG,GAAG,SAASlH,EAAEK,EAAEW,EAAE,CAAC,OAAOX,EAAC,CAAE,IAAK,QAAyB,GAAjBsF,GAAG3F,EAAEgB,CAAC,EAAEX,EAAEW,EAAE,KAAkBA,EAAE,OAAZ,SAAwBX,GAAN,KAAQ,CAAC,IAAIW,EAAEhB,EAAEgB,EAAE,YAAYA,EAAEA,EAAE,WAAsF,IAA3EA,EAAEA,EAAE,iBAAiB,cAAc,KAAK,UAAU,GAAGX,CAAC,EAAE,iBAAiB,EAAMA,EAAE,EAAEA,EAAEW,EAAE,OAAOX,IAAI,CAAC,IAAIU,EAAEC,EAAEX,CAAC,EAAE,GAAGU,IAAIf,GAAGe,EAAE,OAAOf,EAAE,KAAK,CAAC,IAAIM,EAAEiH,GAAGxG,CAAC,EAAE,GAAG,CAACT,EAAE,MAAM,MAAMjB,EAAE,EAAE,CAAC,EAAEiG,GAAGvE,CAAC,EAAE4E,GAAG5E,EAAET,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,IAAK,WAAW4F,GAAGlG,EAAEgB,CAAC,EAAE,MAAM,IAAK,SAASX,EAAEW,EAAE,MAAYX,GAAN,MAAS0F,GAAG/F,EAAE,CAAC,CAACgB,EAAE,SAASX,EAAE,EAAE,CAAC,CAAC,EAAEqH,GAAG2e,GAAG1e,GAAG2e,GACpa,IAAI4B,GAAG,CAAC,sBAAsB,GAAG,OAAO,CAAC5gB,GAAGuJ,GAAGtJ,GAAGC,GAAGC,GAAG4e,EAAE,CAAC,EAAE8B,GAAG,CAAC,wBAAwBpc,GAAG,WAAW,EAAE,QAAQ,SAAS,oBAAoB,WAAW,EACrJqc,GAAG,CAAC,WAAWD,GAAG,WAAW,QAAQA,GAAG,QAAQ,oBAAoBA,GAAG,oBAAoB,eAAeA,GAAG,eAAe,kBAAkB,KAAK,4BAA4B,KAAK,4BAA4B,KAAK,cAAc,KAAK,wBAAwB,KAAK,wBAAwB,KAAK,gBAAgB,KAAK,mBAAmB,KAAK,eAAe,KAAK,qBAAqBxkB,EAAG,uBAAuB,wBAAwB,SAAS3D,EAAE,CAAC,OAAAA,EAAE6I,GAAG7I,CAAC,EAAgBA,IAAP,KAAS,KAAKA,EAAE,SAAS,EAAE,wBAAwBmoB,GAAG,yBAC/fV,GAAG,4BAA4B,KAAK,gBAAgB,KAAK,aAAa,KAAK,kBAAkB,KAAK,gBAAgB,KAAK,kBAAkB,iCAAiC,EAAE,GAAiB,OAAO,+BAArB,IAAoD,CAAC,IAAIY,GAAG,+BAA+B,GAAG,CAACA,GAAG,YAAYA,GAAG,cAAc,GAAG,CAAC5e,GAAG4e,GAAG,OAAOD,EAAE,EAAE1e,GAAG2e,EAAE,MAAS,EAAE,CAAC,OAAAC,GAAA,mDAA2DJ,GAC/YI,GAAA,aAAqB,SAAStoB,EAAEK,EAAE,CAAC,IAAIW,EAAE,EAAE,UAAU,QAAiB,UAAU,CAAC,IAApB,OAAsB,UAAU,CAAC,EAAE,KAAK,GAAG,CAAC6mB,GAAGxnB,CAAC,EAAE,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAO6nB,GAAGlnB,EAAEK,EAAE,KAAKW,CAAC,CAAC,EAAEsnB,GAAA,WAAmB,SAAStoB,EAAEK,EAAE,CAAC,GAAG,CAACwnB,GAAG7nB,CAAC,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE,IAAI2B,EAAE,GAAGD,EAAE,GAAGT,EAAEonB,GAAG,OAAOrnB,GAAP,OAA4BA,EAAE,sBAAP,KAA6BW,EAAE,IAAaX,EAAE,mBAAX,SAA8BU,EAAEV,EAAE,kBAA2BA,EAAE,qBAAX,SAAgCC,EAAED,EAAE,qBAAqBA,EAAE4mB,GAAGjnB,EAAE,EAAE,GAAG,KAAK,KAAKgB,EAAE,GAAGD,EAAET,CAAC,EAAEN,EAAEiU,EAAE,EAAE5T,EAAE,QAAQ0T,GAAO/T,EAAE,WAAN,EAAeA,EAAE,WAAWA,CAAC,EAAS,IAAI2nB,GAAGtnB,CAAC,CAAC,EACrfioB,GAAA,YAAoB,SAAStoB,EAAE,CAAC,GAASA,GAAN,KAAQ,OAAO,KAAK,GAAOA,EAAE,WAAN,EAAe,OAAOA,EAAE,IAAIK,EAAEL,EAAE,gBAAgB,GAAYK,IAAT,OAAY,MAAgB,OAAOL,EAAE,QAAtB,WAAmC,MAAMX,EAAE,GAAG,CAAC,GAAEW,EAAE,OAAO,KAAKA,CAAC,EAAE,KAAK,GAAG,EAAQ,MAAMX,EAAE,IAAIW,CAAC,CAAC,GAAG,OAAAA,EAAE6I,GAAGxI,CAAC,EAAEL,EAASA,IAAP,KAAS,KAAKA,EAAE,UAAiBA,CAAC,EAAEsoB,GAAA,UAAkB,SAAStoB,EAAE,CAAC,OAAOsmB,GAAGtmB,CAAC,CAAC,EAAEsoB,GAAA,QAAgB,SAAStoB,EAAEK,EAAEW,EAAE,CAAC,GAAG,CAAC8mB,GAAGznB,CAAC,EAAE,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAO4oB,GAAG,KAAKjoB,EAAEK,EAAE,GAAGW,CAAC,CAAC,EAC/YsnB,GAAA,YAAoB,SAAStoB,EAAEK,EAAEW,EAAE,CAAC,GAAG,CAAC6mB,GAAG7nB,CAAC,EAAE,MAAM,MAAMX,EAAE,GAAG,CAAC,EAAE,IAAI0B,EAAQC,GAAN,MAASA,EAAE,iBAAiB,KAAKV,EAAE,GAAGc,EAAE,GAAGD,EAAEumB,GAAyO,GAA/N1mB,GAAP,OAA4BA,EAAE,sBAAP,KAA6BV,EAAE,IAAaU,EAAE,mBAAX,SAA8BI,EAAEJ,EAAE,kBAA2BA,EAAE,qBAAX,SAAgCG,EAAEH,EAAE,qBAAqBX,EAAE+mB,GAAG/mB,EAAE,KAAKL,EAAE,EAAQgB,GAAI,KAAKV,EAAE,GAAGc,EAAED,CAAC,EAAEnB,EAAEiU,EAAE,EAAE5T,EAAE,QAAQ0T,GAAG/T,CAAC,EAAKe,EAAE,IAAIf,EAAE,EAAEA,EAAEe,EAAE,OAAOf,IAAIgB,EAAED,EAAEf,CAAC,EAAEM,EAAEU,EAAE,YAAYV,EAAEA,EAAEU,EAAE,OAAO,EAAQX,EAAE,iCAAR,KAAwCA,EAAE,gCAAgC,CAACW,EAAEV,CAAC,EAAED,EAAE,gCAAgC,KAAKW,EACvhBV,CAAC,EAAE,OAAO,IAAIsnB,GAAGvnB,CAAC,CAAC,EAAEioB,GAAA,OAAe,SAAStoB,EAAEK,EAAEW,EAAE,CAAC,GAAG,CAAC8mB,GAAGznB,CAAC,EAAE,MAAM,MAAMhB,EAAE,GAAG,CAAC,EAAE,OAAO4oB,GAAG,KAAKjoB,EAAEK,EAAE,GAAGW,CAAC,CAAC,EAAEsnB,GAAA,uBAA+B,SAAStoB,EAAE,CAAC,GAAG,CAAC8nB,GAAG9nB,CAAC,EAAE,MAAM,MAAMX,EAAE,EAAE,CAAC,EAAE,OAAOW,EAAE,qBAAqBsmB,GAAG,UAAU,CAAC2B,GAAG,KAAK,KAAKjoB,EAAE,GAAG,UAAU,CAACA,EAAE,oBAAoB,KAAKA,EAAEiU,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,EAAEqU,GAAA,wBAAgCjC,GAC/UiC,GAAA,oCAA4C,SAAStoB,EAAEK,EAAEW,EAAED,EAAE,CAAC,GAAG,CAAC+mB,GAAG9mB,CAAC,EAAE,MAAM,MAAM3B,EAAE,GAAG,CAAC,EAAE,GAASW,GAAN,MAAkBA,EAAE,kBAAX,OAA2B,MAAM,MAAMX,EAAE,EAAE,CAAC,EAAE,OAAO4oB,GAAGjoB,EAAEK,EAAEW,EAAE,GAAGD,CAAC,CAAC,EAAEunB,GAAA,QAAgB,uFC/T7L,SAASC,GAAW,CAElB,GACE,SAAO,+BAAmC,KAC1C,OAAO,+BAA+B,UAAa,YAcrD,GAAI,CAEF,+BAA+B,SAASA,CAAQ,QACzCC,EAAK,CAGZ,QAAQ,MAAMA,CAAG,EAErB,CAKE,OAAAD,EAAA,EACAE,GAAA,QAAiBrmB,GAAA,uDChCnB,IAAIf,EAAIe,GAAA,EAEN,OAAAsmB,GAAA,WAAqBrnB,EAAE,WACvBqnB,GAAA,YAAsBrnB,EAAE,2BCY1B,MAAMsnB,GAAW,OAGJC,GAAqB,IAElC,eAAeC,GAAaC,EAAaC,EAAmC,CAC1E,MAAMC,EAAM,MAAM,MAAM,GAAGL,EAAQ,GAAGG,CAAG,GAAI,CAC3C,GAAGC,EACH,QAAS,CACP,eAAgB,mBAChB,GAAGA,GAAA,YAAAA,EAAS,QACd,CACD,EACD,GAAI,CAACC,EAAI,GAAI,CACX,MAAMC,EAAY,MAAMD,EAAI,OAE5B,IAAIE,EAAeD,GAAaD,EAAI,WACpC,GAAI,CACF,MAAMG,EAAY,KAAK,MAAMF,CAAS,EAClCE,EAAU,SACZD,EAAeC,EAAU,OAE7B,MAAQ,CAER,CACA,MAAM,IAAI,MAAMD,CAAY,CAC9B,CACA,OAAOF,EAAI,MACb,CAGO,SAASI,GAAaZ,EAAuB,CAElD,OAAIA,aAAe,cAAgBA,EAAI,OAAS,aACvC,GAGFA,aAAe,OAASA,EAAI,OAAS,YAC9C,CAQO,MAAMa,GAAM,CAEjB,UAAW,IAAMR,GAAwB,SAAS,EAGlD,eAAgB,IAAMA,GAAuB,eAAe,EAC5D,kBAAoBS,GAClBT,GAAuB,gBAAiB,CACtC,OAAQ,QACR,KAAM,KAAK,UAAUS,CAAM,EAC5B,EACH,cAAgBC,GACdV,GAA8B,qBAAsB,CAClD,OAAQ,MACR,KAAM,KAAK,UAAU,CAAE,YAAaU,EAAY,EACjD,EACH,kBAAmB,CAACC,EAAQ,KAC1BX,GAA8C,0BAA0BW,CAAK,GAAI,CAC/E,OAAQ,OACT,EACH,YAAa,IACXX,GAA+C,gBAAiB,CAC9D,OAAQ,OACT,EACH,eAAgB,IACdA,GAAmE,mBAAoB,CACrF,OAAQ,OACT,EAGH,YAAa,CAACY,EAAQ,IAAKC,EAAS,IAClCb,GAAqB,mBAAmBY,CAAK,WAAWC,CAAM,EAAE,EAClE,WAAaC,GAAsBd,GAAmB,aAAac,CAAS,EAAE,EAC9E,aAAc,IAAMd,GAA8B,iBAAkB,CAAE,OAAQ,OAAQ,EACtF,kBAAoBc,GAClBd,GAA8B,aAAac,CAAS,gBAAiB,CACnE,OAAQ,OACT,EACH,uBAAyBA,GACvBd,GAA8B,aAAac,CAAS,qBAAsB,CACxE,OAAQ,OACT,EACH,cAAgBA,GACdd,GAA8B,aAAac,CAAS,GAAI,CACtD,OAAQ,SACT,EACH,cAAe,CAACA,EAAmBC,EAAeC,IAChDhB,GAAmB,YAAa,CAC9B,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,WAAYc,EAAW,KAAAC,EAAM,eAAgBC,CAAA,CAAe,EACpF,EACH,gBAAkBF,GAChBd,GAAkD,aAAac,CAAS,aAAc,CACpF,OAAQ,OACT,EACH,iBAAkB,CAACA,EAAmBG,IACpCjB,GAA6B,aAAac,CAAS,aAAc,CAC/D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,SAAAG,EAAU,EAClC,EACH,oBAAqB,CAACH,EAAmBI,IACvClB,GAA2B,aAAac,CAAS,WAAY,CAC3D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,QAAAI,EAAS,EACjC,EAGH,YAAa,IAAMlB,GAAqB,WAAW,EACnD,WAAamB,GAAgBnB,GAAmB,aAAamB,CAAG,EAAE,EAClE,cAAe,CAACJ,EAAcI,IAC5BnB,GAAmB,YAAa,CAC9B,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAAe,EAAM,IAAAI,EAAK,EACnC,EACH,aAAc,IAAMnB,GAA8B,iBAAkB,CAAE,OAAQ,OAAQ,EACtF,cAAgBmB,GACdnB,GAA8B,aAAamB,CAAG,GAAI,CAAE,OAAQ,SAAU,EACxE,gBAAkBA,GAChBnB,GAA2C,aAAamB,CAAG,aAAc,CACvE,OAAQ,OACT,EAGH,YAAa,CACXC,EAMAC,IACG,CACH,MAAMC,EAAe,IAAI,gBACrBF,GAAA,MAAAA,EAAQ,OAAOE,EAAa,IAAI,QAASF,EAAO,MAAM,UAAU,EAChEA,GAAA,MAAAA,EAAQ,QAAQE,EAAa,IAAI,SAAUF,EAAO,OAAO,UAAU,EACnEA,GAAA,MAAAA,EAAQ,MAAME,EAAa,IAAI,OAAQF,EAAO,IAAI,EAClDA,GAAA,MAAAA,EAAQ,kBAAkBE,EAAa,IAAI,mBAAoBF,EAAO,gBAAgB,EAC1F,MAAMG,EAAQD,EAAa,WAC3B,OAAOtB,GAAqB,YAAYuB,EAAQ,IAAIA,CAAK,GAAK,EAAE,GAAI,CAAE,OAAAF,CAAA,CAAQ,CAChF,EACA,gBAAiB,CACfG,EACAC,EAA+B1B,KAE/BC,GACE,yCAAyCyB,CAAoB,GAC7D,CACE,OAAQ,OACR,KAAM,KAAK,UAAUD,CAAa,EACpC,EAEJ,kBAAmB,CAACE,EAAqBC,IACvC3B,GAAmB,mBAAoB,CACrC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,YAAA0B,EAAa,KAAAC,EAAM,EAC3C,EACH,mBAAoB,CAACC,EAAoBD,IACvC3B,GAAmB,oBAAqB,CACtC,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,YAAa4B,EAAY,KAAAD,EAAM,EACvD,EAGH,0BAA2B,IAAM3B,GAA6B,4BAA4B,EAC1F,yBAA2BoB,GAKzBpB,GAAyB,8BAA+B,CACtD,OAAQ,OACR,KAAM,KAAK,UAAUoB,CAAM,EAC5B,EACH,eAAiBS,GACf7B,GAA6B,uBAAwB,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,uBAAwB6B,EAAsB,EACtE,EAGH,YAAa,IACX7B,GAAiD,4BAA6B,CAC5E,OAAQ,OACT,EAGH,YAAa,IAAMA,GAAuB,WAAW,EACrD,eAAiB8B,GACf9B,GAAuB,YAAa,CAClC,OAAQ,QACR,KAAM,KAAK,UAAU8B,CAAQ,EAC9B,EAGH,YAAa,CAACC,EAAwBhe,IACpCic,GAAuB,sBAAuB,CAC5C,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAA+B,EAAM,GAAAhe,EAAI,EAClC,EACH,eAAgB,CAACge,EAAwBhe,IACvCic,GAAuB,sBAAuB,CAC5C,OAAQ,SACR,KAAM,KAAK,UAAU,CAAE,KAAA+B,EAAM,GAAAhe,EAAI,EAClC,EACH,eAAgB,CAACge,EAAwBhe,IACvCic,GAAuB,6BAA8B,CACnD,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,KAAA+B,EAAM,GAAAhe,EAAI,EAClC,EAGH,sBAAuB,CAACie,EAAkBC,IACxCjC,GAA8B,8BAA+B,CAC3D,OAAQ,OACR,KAAM,KAAK,UAAU,CAAE,UAAWgC,EAAU,UAAAC,EAAW,EACxD,EAGH,mBAAqBC,GACnBlC,GAAsC,oBAAqB,CACzD,OAAQ,OACR,KAAM,KAAK,UAAUkC,CAAO,EAC7B,CACL,ECxNO,SAASC,GAAajC,EAA8B,CACzD,MAAMkC,EAAQC,SAAyB,IAAI,EACrCC,EAAsBD,SAAsB,IAAI,EAChD,CAACE,EAAWC,CAAY,EAAIC,WAAS,EAAK,EAM1CC,EAAaL,SAA4BnC,CAAO,EAGtDyC,YAAU,IAAM,CACdD,EAAW,QAAUxC,CACvB,EAAG,CAACA,CAAO,CAAC,EAIZ,MAAM0C,EAAUC,cAAY,IAAM,CAEhC,MAAMC,EAAW,OAAO,SAAS,WAAa,SAAW,OAAS,MAG5DC,EADQ,OAAO,SAAS,OAAS,OAEnC,6BACA,GAAGD,CAAQ,KAAK,OAAO,SAAS,IAAI,UAElCE,EAAK,IAAI,UAAUD,CAAK,EAE9BC,EAAG,OAAS,IAAM,CAChB,QAAQ,IAAI,qBAAqB,EACjCR,EAAa,EAAI,CACnB,EAEAQ,EAAG,QAAU,IAAM,CACjB,QAAQ,IAAI,wBAAwB,EACpCR,EAAa,EAAK,EAClBJ,EAAM,QAAU,KAGhBE,EAAoB,QAAU,OAAO,WAAW,IAAM,CACpD,QAAQ,IAAI,mCAAmC,EAC/CM,EAAA,CACF,EAAG,GAAI,CACT,EAEAI,EAAG,QAAWC,GAAU,CACtB,QAAQ,MAAM,mBAAoBA,CAAK,CACzC,EAEAD,EAAG,UAAaE,GAAU,uBACxB,GAAI,CACF,MAAMC,EAAwB,KAAK,MAAMD,EAAM,IAAI,EAE7CE,EAAWV,EAAW,QAE5B,OAAQS,EAAI,MACV,IAAK,UACHE,EAAAD,EAAS,WAAT,MAAAC,EAAA,KAAAD,EAAoBD,EAAI,MACxB,MACF,IAAK,YACHG,EAAAF,EAAS,aAAT,MAAAE,EAAA,KAAAF,EAAsBD,EAAI,MAC1B,MACF,IAAK,YACHI,EAAAH,EAAS,aAAT,MAAAG,EAAA,KAAAH,EAAsBD,EAAI,MAC1B,MACF,IAAK,WACHK,EAAAJ,EAAS,YAAT,MAAAI,EAAA,KAAAJ,EAAqBD,EAAI,MACzB,MACF,IAAK,WACHM,EAAAL,EAAS,YAAT,MAAAK,EAAA,KAAAL,EAAqBD,EAAI,MACzB,MACF,IAAK,cACHO,EAAAN,EAAS,cAAT,MAAAM,EAAA,KAAAN,EAAuBD,EAAI,MAC3B,MACF,IAAK,gBAAiB,CACpB,MAAMQ,EAAUR,EAAI,MAKpBS,EAAAR,EAAS,iBAAT,MAAAQ,EAAA,KAAAR,EAA0BO,EAAQ,WAAYA,EAAQ,UAAWA,EAAQ,OACzE,KACF,CACA,IAAK,SACHE,EAAAT,EAAS,UAAT,MAAAS,EAAA,KAAAT,EAAmBD,EAAI,MACvB,MACF,IAAK,WACHW,EAAAV,EAAS,YAAT,MAAAU,EAAA,KAAAV,EAAqBD,EAAI,MACzB,MACF,IAAK,OAEH,MACF,QACE,QAAQ,IAAI,kCAAmCA,EAAI,IAAI,EAE7D,OAAS1rB,EAAG,CACV,QAAQ,MAAM,qCAAsCA,CAAC,CACvD,CACF,EAEA2qB,EAAM,QAAUY,CAClB,EAAG,EAAE,EAELL,mBAAU,IAAM,CACdC,EAAA,EAGA,MAAMmB,EAAe,YAAY,IAAM,SACjCV,EAAAjB,EAAM,UAAN,YAAAiB,EAAe,cAAe,UAAU,MAC1CjB,EAAM,QAAQ,KAAK,MAAM,CAE7B,EAAG,GAAK,EAER,MAAO,IAAM,CACX,cAAc2B,CAAY,EACtBzB,EAAoB,SACtB,aAAaA,EAAoB,OAAO,EAEtCF,EAAM,SACRA,EAAM,QAAQ,OAElB,CACF,EAAG,CAACQ,CAAO,CAAC,EAEL,CAAE,UAAAL,CAAA,CACX,CCGO,MAAMyB,GAAwB,ECtI/BC,GAA2B,IAAS,IAG1C,SAASC,GAAsBC,EAAyB,CACtD,MAAMC,EAAQ,KAAK,MAAMD,EAAU,IAAI,EACjCE,EAAO,KAAK,MAAOF,EAAU,KAAQ,EAAE,EACvCG,EAAO,KAAK,MAAMH,EAAU,EAAE,EACpC,MAAO,GAAGC,CAAK,IAAIC,CAAI,IAAIC,CAAI,GACjC,CAGA,SAASC,GAAoBC,EAAqB,CAChD,OAAIA,GAAO,EAAU,IACjBA,GAAO,GAAW,KAClBA,GAAO,GAAW,KAClBA,GAAO,GAAW,KACf,IACT,CAGA,SAASC,GAAmBC,EAA2BC,EAAoC,CAEzF,MAAMC,EADM,KAAK,MAAM,KAAK,MAAQ,GAAI,EACbF,EAAS,UAG9BG,EAAcF,EAAQ,eAAiBD,EAAS,OAChDI,EAAiBH,EAAQ,gBAAkBD,EAAS,UACpDK,EAAiBJ,EAAQ,mBAAqBD,EAAS,UACvDM,EAAiBL,EAAQ,WAAaD,EAAS,UAC/CO,EAAkBN,EAAQ,YAAcD,EAAS,WACjDQ,EAAiBP,EAAQ,WAAaD,EAAS,UAC/CS,EAAkBR,EAAQ,YAAcD,EAAS,WAGjDU,EAAQP,EAAc,EAAKC,EAAiBD,EAAe,IAAM,EACjEQ,EAAQR,EAAc,EAAKE,EAAiBF,EAAe,IAAM,EAGjES,EAAYN,EAAiBC,EAC7BM,EAAYL,EAAiBC,EAE7BK,EAAaF,EAAY,EAAIF,GAASJ,EAAiBM,GAAa,EACpEG,EAAcH,EAAY,EAAIF,GAASH,EAAkBK,GAAa,EACtEI,EAAaH,EAAY,EAAIF,GAASH,EAAiBK,GAAa,EACpEI,EAAcJ,EAAY,EAAIF,GAASF,EAAkBI,GAAa,EAEtEK,EAAUrB,GAAoBa,CAAK,EACnCS,EAAU,KAAK,IAAI,EAAG,IAAMT,EAAQC,CAAK,EAiB/C,MAfc,CACZ,gCACA,aAAanB,GAAsBU,CAAY,CAAC,mBAAmBV,GAAsBW,CAAW,CAAC,IACrG,GACA,GAAGe,CAAO,gBAAgBR,EAAM,QAAQ,CAAC,CAAC,MAAME,EAAU,gBAAgB,SAC1E,YAAYE,EAAW,QAAQ,CAAC,CAAC,MAAMR,EAAe,gBAAgB,SACtE,aAAaS,EAAY,QAAQ,CAAC,CAAC,MAAMR,EAAgB,gBAAgB,SACzE,GACA,eAAeI,EAAM,QAAQ,CAAC,CAAC,MAAME,EAAU,gBAAgB,SAC/D,YAAYG,EAAW,QAAQ,CAAC,CAAC,MAAMR,EAAe,gBAAgB,SACtE,aAAaS,EAAY,QAAQ,CAAC,CAAC,MAAMR,EAAgB,gBAAgB,SACzE,GACA,SAASU,EAAQ,QAAQ,CAAC,CAAC,KAGhB,KAAK;AAAA,CAAI,CACxB,CAGA,SAASC,GAAmBC,EAAyBpE,EAAcqE,EAA4B,CAC7F,MAAMC,EAAM,KAAK,MAAM,KAAK,MAAQ,GAAI,EACxC,MAAO,CACL,GAAI,CAAC,KAAK,MACV,KAAM,OACN,iBAAkBF,EAClB,KAAApE,EACA,iBAAkBsE,EAClB,YAAaA,EACb,MAAO,KACP,SAAU,EACV,UAAW,KACX,SAAAD,EACA,MAAO,EAEX,CASO,SAASE,GACdC,EAC0B,CAC1B,MAAMC,EAAc/D,SAA+B,IAAI,EACjDgE,EAAchE,SAAsB,IAAI,EAGxCiE,EAAezD,cAAY,IAAM,CACjCwD,EAAY,UAAY,OAC1B,cAAcA,EAAY,OAAO,EACjCA,EAAY,QAAU,MAExBD,EAAY,QAAU,IACxB,EAAG,EAAE,EAGCG,EAAmB1D,cAAY,SAAY,CAC/C,MAAM6B,EAAW0B,EAAY,QAC7B,GAAI,CAAC1B,EAAU,OAEf,IAAI8B,EAAsC,KACtCC,EAA0B,KAG9B,QAASC,EAAU,EAAGA,EAAU,EAAGA,IACjC,GAAI,CACFF,EAAY,MAAMhG,GAAI,iBAAiBkE,EAAS,eAAgB,EAAE,EAClE,KACF,OAAS/E,EAAK,CACZ8G,EAAY9G,aAAe,MAAQA,EAAM,IAAI,MAAM,eAAe,EAE9D+G,IAAY,GACd,MAAM,IAAI,QAASC,GAAY,WAAWA,EAAS,GAAI,CAAC,CAE5D,CAGF,GAAIH,EAAW,CACb,MAAMI,EAAed,GACnBpB,EAAS,eACTD,GAAmBC,EAAU8B,CAAS,EACtC,IAEFL,EAAaU,GAAS,CAAC,GAAGA,EAAMD,CAAY,CAAC,CAC/C,KAAO,CACL,MAAMvG,EAAeyF,GACnBpB,EAAS,eACT,wCAAuC+B,GAAA,YAAAA,EAAW,UAAW,eAAe,GAC5E,IAEFN,EAAaU,GAAS,CAAC,GAAGA,EAAMxG,CAAY,CAAC,CAC/C,CACF,EAAG,CAAC8F,CAAW,CAAC,EAGVW,EAAuBjE,cAC3B,MAAO3B,EAAiB6F,IAA6C,CACnE,MAAMC,EAAM9F,EAAQ,OAAO,cAE3B,GAAI8F,IAAQ,kBAAmB,CAE7BV,EAAA,EAGA,IAAIE,EAAsC,KACtCC,EAA0B,KAE9B,QAASC,EAAU,EAAGA,EAAU,EAAGA,IACjC,GAAI,CACFF,EAAY,MAAMhG,GAAI,iBAAiBuG,EAAgB,EAAE,EACzD,KACF,OAASpH,EAAK,CACZ8G,EAAY9G,aAAe,MAAQA,EAAM,IAAI,MAAM,eAAe,EAC9D+G,IAAY,GACd,MAAM,IAAI,QAASC,GAAY,WAAWA,EAAS,GAAI,CAAC,CAE5D,CAGF,GAAI,CAACH,EAAW,CACd,MAAMnG,EAAeyF,GACnBiB,EACA,qDAAoDN,GAAA,YAAAA,EAAW,UAAW,eAAe,GACzF,IAEF,OAAAN,EAAaU,GAAS,CAAC,GAAGA,EAAMxG,CAAY,CAAC,EACtC,EACT,CAGA,MAAM4F,EAAM,KAAK,MAAM,KAAK,MAAQ,GAAI,EACxCG,EAAY,QAAU,CACpB,UAAWH,EACX,OAAQO,EAAU,eAClB,UAAWA,EAAU,gBACrB,UAAWA,EAAU,mBACrB,UAAWA,EAAU,WACrB,WAAYA,EAAU,YACtB,UAAWA,EAAU,WACrB,WAAYA,EAAU,YACtB,eAAAO,CAAA,EAIF,MAAME,EAAenB,GACnBiB,EACA,qDAAqDd,CAAG,2GACxD,IAEF,OAAAE,EAAaU,GAAS,CAAC,GAAGA,EAAMI,CAAY,CAAC,EAG7CZ,EAAY,QAAU,OAAO,YAAYE,EAAkBtC,EAAwB,EAE5E,EACT,CAEA,GAAI+C,IAAQ,iBAAkB,CAC5B,GAAIZ,EAAY,SAAWA,EAAY,QAAQ,iBAAmBW,EAAgB,CAEhF,MAAMR,EAAA,EAEND,EAAA,EAEA,MAAMY,EAAcpB,GAClBiB,EACA,mDACA,IAEFZ,EAAaU,GAAS,CAAC,GAAGA,EAAMK,CAAW,CAAC,CAC9C,KAAO,CACL,MAAMC,EAAoBrB,GACxBiB,EACA,qCACA,IAEFZ,EAAaU,GAAS,CAAC,GAAGA,EAAMM,CAAiB,CAAC,CACpD,CACA,MAAO,EACT,CAEA,MAAO,EACT,EACA,CAAChB,EAAaG,EAAcC,CAAgB,GAI9C5D,mBAAU,IACD,IAAM,CACP0D,EAAY,UAAY,MAC1B,cAAcA,EAAY,OAAO,CAErC,EACC,EAAE,EAEE,CACL,qBAAAS,EACA,aAAAR,CAAA,CAEJ,CCtQO,SAASc,GAAejD,EAAyB,CACtD,GAAIA,EAAU,GAAI,MAAO,GAAGA,CAAO,IAEnC,MAAMkD,EAAO,KAAK,MAAMlD,EAAU,KAAK,EACjCC,EAAQ,KAAK,MAAOD,EAAU,MAAS,IAAI,EAC3CE,EAAO,KAAK,MAAOF,EAAU,KAAQ,EAAE,EAE7C,OAAIkD,EAAO,EACLjD,EAAQ,GAAKC,EAAO,EAAU,GAAGgD,CAAI,IAAIjD,CAAK,IAAIC,CAAI,IACtDD,EAAQ,EAAU,GAAGiD,CAAI,IAAIjD,CAAK,IAClCC,EAAO,EAAU,GAAGgD,CAAI,IAAIhD,CAAI,IAC7B,GAAGgD,CAAI,IAEZjD,EAAQ,EACHC,EAAO,EAAI,GAAGD,CAAK,IAAIC,CAAI,IAAM,GAAGD,CAAK,IAE3C,GAAGC,CAAI,GAChB,CAGO,SAASiD,GAAgBd,EAAsC,CAoBpE,MAnBc,CACZ,YACA,oBAAoBA,EAAU,cAAc,QAAQ,CAAC,CAAC,IACtD,WAAWY,GAAeZ,EAAU,cAAc,CAAC,GACnD,eAAeY,GAAeZ,EAAU,eAAe,CAAC,GACxD,eAAeY,GAAeZ,EAAU,kBAAkB,CAAC,GAC3D,GACA,gBAAgBA,EAAU,eAAe,OACzC,cAAcA,EAAU,aAAa,OACrC,aAAaA,EAAU,YAAY,QAAQ,CAAC,CAAC,MAC7C,GACA,YAAYA,EAAU,iBAAiB,gBAAgB,SAASA,EAAU,aAAa,gBAAgB,MACvG,UAAUA,EAAU,WAAW,gBAAgB,SAASA,EAAU,WAAW,gBAAgB,MAC7F,WAAWA,EAAU,YAAY,gBAAgB,SAASA,EAAU,YAAY,gBAAgB,MAChG,eAAeA,EAAU,WAAW,gBAAgB,YAAYA,EAAU,YAAY,gBAAgB,UACtG,GACA,aAAaA,EAAU,YAAY,GACnC,gBAAgBA,EAAU,WAAW,IAE1B,KAAK;AAAA,CAAI,CACxB,CAGO,SAASe,GAAgBC,EAAmC,CACjE,GAAIA,EAAU,SAAW,EACvB,MAAO;AAAA,uBAGT,MAAMC,EAAS,CAAC,GAAGD,CAAS,EAAE,KAAK,CAACrwB,EAAGK,IAAMA,EAAE,IAAML,EAAE,GAAG,EACpDuwB,EAAQ,CAAC,cAAcD,EAAO,MAAM,GAAG,EAC7C,UAAWlxB,KAAKkxB,EAAQ,CACtB,MAAM1G,EAAOxqB,EAAE,MAAQA,EAAE,cACnBoxB,EAAMpxB,EAAE,KAAO,EAAI,IAAIA,EAAE,IAAI,QAAQ,CAAC,CAAC,GAAKA,EAAE,IAAI,QAAQ,CAAC,EACjEmxB,EAAM,KAAK,GAAG3G,CAAI,KAAK4G,CAAG,QAAQP,GAAe7wB,EAAE,kBAAkB,CAAC,OAAO,CAC/E,CACA,OAAOmxB,EAAM,KAAK;AAAA,CAAI,CACxB,CAGO,SAASE,GAAUC,EAAyB,CACjD,GAAIA,EAAI,SAAW,EACjB,MAAO;AAAA,gBAET,MAAMH,EAAQ,CAAC,QAAQG,EAAI,MAAM,GAAG,EACpC,UAAWC,KAASD,EAAK,CACvB,MAAM9G,EAAO+G,EAAM,MAAQA,EAAM,cACjCJ,EAAM,KAAK,GAAG3G,CAAI,KAAK+G,EAAM,eAAe,EAAE,CAChD,CACA,OAAOJ,EAAM,KAAK;AAAA,CAAI,CACxB,CAGA,SAAS5B,GACPC,EACApE,EACAqE,EACA+B,EAAW,EACF,CACT,MAAM9B,EAAM,KAAK,MAAM,KAAK,MAAQ,GAAI,EACxC,MAAO,CACL,GAAI,CAAC,KAAK,MAAQ8B,EAClB,KAAM,OACN,iBAAkBhC,EAClB,KAAApE,EACA,iBAAkBsE,EAClB,YAAaA,EACb,MAAO,KACP,SAAU,EACV,UAAW,KACX,SAAAD,EACA,MAAO,EAEX,CASO,SAASgC,GACdC,EACAC,EACA/B,EACuB,CACvB,KAAM,CAACgC,EAAkBC,CAAmB,EAAI3F,WAAS,EAAK,EACxD,CAAE,qBAAAqE,EAAsB,aAAAR,GAAiBJ,GAAmBC,CAAW,EAG7ExD,YAAU,IAAM,CACdyF,EAAoB,EAAK,EACzB9B,EAAA,CACF,EAAG,CAAC2B,GAAA,YAAAA,EAAoB,GAAI3B,CAAY,CAAC,EAGzC,MAAM+B,EAA0BC,UAAQ,IAAM,CAC5C,GAAI,CAACL,GAAsBA,EAAmB,OAAS,UAAW,MAAO,GACzE,MAAMM,EAAUL,EAAS,KAAM/vB,GAAMA,EAAE,aAAe8vB,EAAmB,EAAE,EAC3E,OAAOM,GAAA,YAAAA,EAAS,QAASvE,EAC3B,EAAG,CAACiE,EAAoBC,CAAQ,CAAC,EAG3BM,EAAyB3F,cAC7B,MAAO5B,GAAqB,CAC1B,GAAI,GAACgH,GAAsBA,EAAmB,OAAS,YAClDI,EAEL,GAAI,CACF,MAAM7B,EAAY,MAAMhG,GAAI,iBAAiByH,EAAmB,GAAIhH,CAAQ,EAGtEwH,EAAmB3C,GACvBmC,EAAmB,GACnBX,GAAgBd,CAAS,EACzB,GACA,GAGIkC,EAAmB5C,GACvBmC,EAAmB,GACnBV,GAAgBf,EAAU,SAAS,EACnC,GACA,GAGImC,EAAa7C,GACjBmC,EAAmB,GACnBL,GAAUpB,EAAU,GAAG,EACvB,GACA,GAIFL,EAAaU,GAAS,CAAC,GAAGA,EAAM4B,EAAkBC,EAAkBC,CAAU,CAAC,EAG/EP,EAAoB,EAAI,CAC1B,OAASzI,EAAK,CACZ,MAAMU,EAAeyF,GACnBmC,EAAmB,GACnB,6BAA6BtI,aAAe,MAAQA,EAAI,QAAU,eAAe,GACjF,GACA,GAEFwG,EAAaU,GAAS,CAAC,GAAGA,EAAMxG,CAAY,CAAC,CAC/C,CACF,EACA,CAAC4H,EAAoBI,EAAyBlC,CAAW,GAIrDyC,EAAwB/F,cAC5B,MAAO3B,GAAoB,CAMzB,GALI,CAAC+G,GAAsBA,EAAmB,OAAS,WACnD,CAACI,GAA2B,CAACF,GAGjB,MAAMrB,EAAqB5F,EAAS+G,EAAmB,EAAE,EAC5D,OAGb,MAAMY,EAAiB/C,GAAmBmC,EAAmB,GAAI,KAAK/G,CAAO,GAAI,GAAM,CAAC,EACxFiF,EAAaU,GAAS,CAAC,GAAGA,EAAMgC,CAAc,CAAC,EAE/C,GAAI,CACF,MAAMC,EAAW,MAAMtI,GAAI,oBAAoByH,EAAmB,GAAI/G,CAAO,EAGvE6H,EAAkBjD,GACtBmC,EAAmB,GACnBa,EAAS,SACT,GACA,GAEEA,EAAS,mBACXC,EAAgB,iBAAmBD,EAAS,kBAG9C3C,EAAaU,GAAS,CAAC,GAAGA,EAAMkC,CAAe,CAAC,CAClD,OAASpJ,EAAK,CACZ,MAAMU,EAAeyF,GACnBmC,EAAmB,GACnB,mBAAmBtI,aAAe,MAAQA,EAAI,QAAU,eAAe,GACvE,GACA,GAEFwG,EAAaU,GAAS,CAAC,GAAGA,EAAMxG,CAAY,CAAC,CAC/C,CACF,EACA,CACE4H,EACAI,EACAF,EACAhC,EACAW,CAAA,CACF,EAGF,MAAO,CACL,iBAAAqB,EACA,wBAAAE,EACA,uBAAAG,EACA,sBAAAI,CAAA,CAEJ,CCrOA,MAAMI,GAAmB,6BACnBC,GAAiB,uBAMvB,IAAIC,GAA2C,GAKxC,SAASC,GAAqBC,EAAgC,CACnEF,GAAwB,CAAE,GAAGE,CAAA,CAC/B,CAKO,SAASC,IAAyC,CACvD,MAAO,CAAE,GAAGH,EAAA,CACd,CAMO,SAASI,GAAmBnI,EAAac,EAAsC,CACpF,OAAAiH,GAAsB/H,CAAG,EAAIc,EACtB,CAAE,GAAGiH,EAAA,CACd,CAUO,SAASK,GAAYxH,EAA6Bhe,EAAoB,CAC3E,MAAO,GAAGge,CAAI,IAAIhe,CAAE,EACtB,CAKO,SAASylB,IAAsD,CACpE,GAAI,CACF,MAAMC,EAAS,aAAa,QAAQT,EAAgB,EACpD,OAAOS,EAAS,KAAK,MAAMA,CAAM,EAAI,EACvC,MAAQ,CACN,MAAO,EACT,CACF,CAKO,SAASC,IAAuC,CACrD,GAAI,CAEF,OADe,aAAa,QAAQT,EAAc,IAChC,QAAU,QAAU,QACxC,MAAQ,CACN,MAAO,QACT,CACF,CAKO,SAASU,IAA2C,CACzD,GAAI,CACF,aAAa,WAAWX,EAAgB,EACxC,aAAa,WAAWC,EAAc,CACxC,MAAQ,CAER,CACF,CCnEA,SAASW,GAAuBjI,EAAcZ,EAA8B,CAC1E,GAAI,CAACA,EAAM,MAAO,GAElB,MAAM8I,EAAU9I,EAAK,QAAQ,sBAAuB,MAAM,EAE1D,OADuB,IAAI,OAAO,OAAO8I,CAAO,MAAO,GAAG,EACpC,KAAKlI,CAAI,CACjC,CAEO,SAASmI,GACdC,EACA7B,EACAD,EACA+B,EAAwB,KACD,CACvB,KAAM,CAACC,EAAcC,CAAe,EAAIzH,WAAiC,EAAE,EACrE,CAAC0H,EAAUC,CAAW,EAAI3H,WAAkC,EAAE,EAC9D,CAAC4H,EAAkBC,CAAmB,EAAI7H,WAA4B4G,EAAmB,EAGzFkB,EAAYlI,SAAO2H,CAAM,EAC/BrH,YAAU,IAAM,CACd4H,EAAU,QAAUP,CACtB,EAAG,CAACA,CAAM,CAAC,EAGX,MAAMQ,EAAkBnI,SAAoB,IAAI,GAAK,EAC/CoI,EAAkBpI,SAAoB,IAAI,GAAK,EAIrDM,YAAU,IAAM,CACd,MAAM+H,EAAcX,EAAS,OAAQ5xB,GAAM,CAACqyB,EAAgB,QAAQ,IAAIryB,EAAE,GAAG,CAAC,EACxEwyB,EAAczC,EAAS,OAC1B/vB,GAAMA,EAAE,YAAc,CAACsyB,EAAgB,QAAQ,IAAItyB,EAAE,UAAU,GAGlE,GAAIuyB,EAAY,SAAW,GAAKC,EAAY,SAAW,EAAG,OAG1DD,EAAY,QAASvyB,GAAMqyB,EAAgB,QAAQ,IAAIryB,EAAE,GAAG,CAAC,EAC7DwyB,EAAY,QAASxyB,GAAMsyB,EAAgB,QAAQ,IAAItyB,EAAE,UAAU,CAAC,GAEvC,SAAY,CACvC,MAAMqpB,EAA4E,CAChF,GAAGkJ,EAAY,IAAKvyB,IAAO,CAAE,KAAM,OAAiB,iBAAkBA,EAAE,KAAM,EAC9E,GAAGwyB,EAAY,IAAKxyB,IAAO,CAAE,KAAM,OAAiB,iBAAkBA,EAAE,YAAa,GAGvF,GAAIqpB,EAAc,SAAW,EAE7B,GAAI,CAGF,MAAMoJ,EAA0C,GAEhD,QAASC,EAAI,EAAGA,EAAIrJ,EAAc,OAAQqJ,GAAK,IAAW,CACxD,MAAMC,EAAQtJ,EAAc,MAAMqJ,EAAGA,EAAI,GAAS,EAC5CE,GAAc,MAAMvK,GAAI,gBAAgBsK,EAAO/K,EAAkB,EACvE,OAAO,OAAO6K,EAAcG,EAAW,CACzC,CACA,MAAMC,EAA0C,GAC1CC,EAAuC,GACvCC,EAA8C,GAGpD,UAAWC,KAAWT,EAAa,CACjC,MAAMU,EAAOR,EAAa,QAAQO,EAAQ,GAAG,EAAE,GAAK,GACpD,GAAIC,EAAK,OAAS,EAAG,CACnB,MAAMjK,GAAMoI,GAAY,UAAW4B,EAAQ,GAAG,EAExCE,EAAWF,EAAQ,cAAgB,EAEnCG,EAAaF,EAAK,OAAQ5yB,IAAM,CAACA,GAAE,UAAYA,GAAE,YAAc6yB,CAAQ,EACzEC,EAAW,OAAS,IACtBN,EAAgB7J,EAAG,EAAImK,EAAW,OAE9BA,EAAW,KAAM9yB,IAAMoxB,GAAuBpxB,GAAE,KAAM+xB,EAAU,OAAO,CAAC,IAC1EU,EAAY9J,EAAG,EAAI,KAIvB,MAAMoK,GAAa,KAAK,IAAI,GAAGH,EAAK,IAAK5yB,IAAMA,GAAE,WAAW,CAAC,EAC7D0yB,EAAoB/J,EAAG,EAAIoK,GAC3BjC,GAAmBnI,GAAKoK,EAAU,CACpC,CACF,CAGA,UAAWhD,KAAWoC,EAAa,CACjC,MAAMS,EAAOR,EAAa,QAAQrC,EAAQ,UAAU,EAAE,GAAK,GAC3D,GAAI6C,EAAK,OAAS,EAAG,CACnB,MAAMjK,GAAMoI,GAAY,UAAWhB,EAAQ,UAAU,EAE/C8C,EAAW9C,EAAQ,cAAgB,EAEnC+C,EAAaF,EAAK,OAAQ5yB,IAAM,CAACA,GAAE,UAAYA,GAAE,YAAc6yB,CAAQ,EACzEC,EAAW,OAAS,IACtBN,EAAgB7J,EAAG,EAAImK,EAAW,OAE9BA,EAAW,KAAM9yB,IAAMoxB,GAAuBpxB,GAAE,KAAM+xB,EAAU,OAAO,CAAC,IAC1EU,EAAY9J,EAAG,EAAI,KAIvB,MAAMoK,GAAa,KAAK,IAAI,GAAGH,EAAK,IAAK5yB,IAAMA,GAAE,WAAW,CAAC,EAC7D0yB,EAAoB/J,EAAG,EAAIoK,GAC3BjC,GAAmBnI,GAAKoK,EAAU,CACpC,CACF,CAEI,OAAO,KAAKP,CAAe,EAAE,OAAS,GACxCd,EAAiBrD,IAAU,CAAE,GAAGA,EAAM,GAAGmE,GAAkB,EAEzD,OAAO,KAAKC,CAAW,EAAE,OAAS,GACpCb,EAAavD,IAAU,CAAE,GAAGA,EAAM,GAAGoE,GAAc,EAErDX,EAAoBjB,IAAqB,CAC3C,OAAS1J,EAAK,CACZ,QAAQ,MAAM,iCAAkCA,CAAG,CACrD,CACF,GAEA,CACF,EAAG,CAACoK,EAAU7B,CAAQ,CAAC,EAIvBvF,YAAU,IAAM,CACd,GACEsF,GACAA,EAAmB,OAAS,OAC5BA,EAAmB,OAAS,MAC5B,CACA,MAAM9G,EAAMoI,GACVtB,EAAmB,KACnBA,EAAmB,IAIrBiC,EAAiBrD,GAAS,CACxB,GAAIA,EAAK1F,CAAG,EAAG,CACb,MAAMqK,EAAO,CAAE,GAAG3E,CAAA,EAClB,cAAO2E,EAAKrK,CAAG,EACRqK,CACT,CACA,OAAO3E,CACT,CAAC,EAGDuD,EAAavD,GAAS,CACpB,GAAIA,EAAK1F,CAAG,EAAG,CACb,MAAMqK,EAAO,CAAE,GAAG3E,CAAA,EAClB,cAAO2E,EAAKrK,CAAG,EACRqK,CACT,CACA,OAAO3E,CACT,CAAC,EAGGoB,EAAmB,OAAS,UAC9BzH,GAAI,gBAAgByH,EAAmB,EAAE,EAAE,MAAOtI,GAAQ,CACxD,QAAQ,MAAM,4CAA6CA,CAAG,CAChE,CAAC,EACQsI,EAAmB,OAAS,WACrCzH,GAAI,gBAAgByH,EAAmB,EAAE,EAAE,MAAOtI,GAAQ,CACxD,QAAQ,MAAM,4CAA6CA,CAAG,CAChE,CAAC,CAEL,CACF,EAAG,CAACsI,CAAkB,CAAC,EAGvB,MAAMwD,EAAkB5I,cAAY,CAACb,EAAkB0J,IAAyB,CAC9ExB,EAAiBrD,IAAU,CACzB,GAAGA,EACH,CAAC7E,CAAQ,GAAI6E,EAAK7E,CAAQ,GAAK,GAAK,GACpC,EACE0J,GACFtB,EAAavD,IAAU,CACrB,GAAGA,EACH,CAAC7E,CAAQ,EAAG,IACZ,CAEN,EAAG,EAAE,EAIC2J,EAAc9I,cAAY,IAAM,CAEpCqH,EAAgB,EAAE,EAClBE,EAAY,EAAE,EAGd5J,GAAI,cAAc,MAAOb,GAAQ,CAC/B,QAAQ,MAAM,wCAAyCA,CAAG,CAC5D,CAAC,CACH,EAAG,EAAE,EAICiM,EAAuB/I,cAAagJ,GAAuB,CAC/D,GAAIA,EAAK,OAAS,OAASA,EAAK,OAAS,MAAO,OAEhD,MAAM1K,EAAMoI,GAAYsC,EAAK,KAA+BA,EAAK,EAAE,EAGnE3B,EAAiBrD,GAAS,CACxB,GAAIA,EAAK1F,CAAG,EAAG,CACb,MAAMqK,EAAO,CAAE,GAAG3E,CAAA,EAClB,cAAO2E,EAAKrK,CAAG,EACRqK,CACT,CACA,OAAO3E,CACT,CAAC,EAGDuD,EAAavD,GAAS,CACpB,GAAIA,EAAK1F,CAAG,EAAG,CACb,MAAMqK,EAAO,CAAE,GAAG3E,CAAA,EAClB,cAAO2E,EAAKrK,CAAG,EACRqK,CACT,CACA,OAAO3E,CACT,CAAC,EAGGgF,EAAK,OAAS,UAChBrL,GAAI,gBAAgBqL,EAAK,EAAE,EAAE,MAAOlM,GAAQ,CAC1C,QAAQ,MAAM,4CAA6CA,CAAG,CAChE,CAAC,EACQkM,EAAK,OAAS,WACvBrL,GAAI,gBAAgBqL,EAAK,EAAE,EAAE,MAAOlM,GAAQ,CAC1C,QAAQ,MAAM,4CAA6CA,CAAG,CAChE,CAAC,CAEL,EAAG,EAAE,EAGCmM,EAAkBjJ,cAAaM,GAAiB,CACpD,IAAI4C,EAAiC,KAOrC,GANI5C,EAAI,OAAS,QAAUA,EAAI,iBAC7B4C,EAAkBwD,GAAY,UAAWpG,EAAI,gBAAgB,EACpDA,EAAI,OAAS,QAAUA,EAAI,mBACpC4C,EAAkBwD,GAAY,UAAWpG,EAAI,gBAAgB,GAG3D4C,EAAiB,CACnB,MAAM9D,EAAYkB,EAAI,aAAe,KAAK,MAAM,KAAK,MAAQ,GAAI,EAC3D4I,EAAUzC,GAAmBvD,EAAiB9D,CAAS,EAC7DqI,EAAoByB,CAAO,CAC7B,CACF,EAAG,EAAE,EAEL,MAAO,CACL,aAAA9B,EACA,SAAAE,EACA,iBAAAE,EACA,gBAAAoB,EACA,YAAAE,EACA,qBAAAC,EACA,gBAAAE,CAAA,CAEJ,6BC3RA,SAASE,GAAYC,EAAM,CACzB,GAAa,OAAO,SAAY,IAAa,OAC7C,IAAIC,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EAC/DC,EAAQ,SAAS,cAAc,OAAO,EAC1CA,EAAM,KAAO,WACbD,EAAK,YAAYC,CAAK,EACrBA,EAAM,WAAcA,EAAM,WAAW,QAAUF,EAAQE,EAAM,YAAY,SAAS,eAAeF,CAAI,CAAC,CACzG,CAKA,MAAMG,GAAYrK,GAAO,CACrB,OAAOA,EAAI,CACP,IAAK,UACD,OAAOsK,GACX,IAAK,OACD,OAAOC,GACX,IAAK,UACD,OAAOC,GACX,IAAK,QACD,OAAOC,GACX,QACI,OAAO,IACnB,CACA,EACMC,GAAO,MAAM,EAAE,EAAE,KAAK,CAAC,EACvBC,GAAS,CAAC,CAAE,QAAAC,EAAS,UAAAC,KACFC,GAAM,cAAc,MAAO,CAC5C,UAAW,CACP,yBACAD,CACZ,EAAU,OAAO,OAAO,EAAE,KAAK,GAAG,EAC1B,eAAgBD,CACxB,EAAqBE,GAAM,cAAc,MAAO,CACxC,UAAW,gBACnB,EAAOJ,GAAK,IAAI,CAACK,EAAGjC,IAAkBgC,GAAM,cAAc,MAAO,CACrD,UAAW,qBACX,IAAK,eAAehC,CAAC,EACjC,CAAS,CAAC,CAAC,CAAC,EAENwB,GAA4BQ,GAAM,cAAc,MAAO,CACzD,MAAO,6BACP,QAAS,YACT,KAAM,eACN,OAAQ,KACR,MAAO,IACX,EAAiBA,GAAM,cAAc,OAAQ,CACzC,SAAU,UACV,EAAG,yJACH,SAAU,SACd,CAAC,CAAC,EACIN,GAA4BM,GAAM,cAAc,MAAO,CACzD,MAAO,6BACP,QAAS,YACT,KAAM,eACN,OAAQ,KACR,MAAO,IACX,EAAiBA,GAAM,cAAc,OAAQ,CACzC,SAAU,UACV,EAAG,4OACH,SAAU,SACd,CAAC,CAAC,EACIP,GAAyBO,GAAM,cAAc,MAAO,CACtD,MAAO,6BACP,QAAS,YACT,KAAM,eACN,OAAQ,KACR,MAAO,IACX,EAAiBA,GAAM,cAAc,OAAQ,CACzC,SAAU,UACV,EAAG,0OACH,SAAU,SACd,CAAC,CAAC,EACIL,GAA0BK,GAAM,cAAc,MAAO,CACvD,MAAO,6BACP,QAAS,YACT,KAAM,eACN,OAAQ,KACR,MAAO,IACX,EAAiBA,GAAM,cAAc,OAAQ,CACzC,SAAU,UACV,EAAG,sIACH,SAAU,SACd,CAAC,CAAC,EACIE,GAA0BF,GAAM,cAAc,MAAO,CACvD,MAAO,6BACP,MAAO,KACP,OAAQ,KACR,QAAS,YACT,KAAM,OACN,OAAQ,eACR,YAAa,MACb,cAAe,QACf,eAAgB,OACpB,EAAiBA,GAAM,cAAc,OAAQ,CACzC,GAAI,KACJ,GAAI,IACJ,GAAI,IACJ,GAAI,IACR,CAAC,EAAiBA,GAAM,cAAc,OAAQ,CAC1C,GAAI,IACJ,GAAI,IACJ,GAAI,KACJ,GAAI,IACR,CAAC,CAAC,EAEIG,GAAsB,IAAI,CAC5B,KAAM,CAACC,EAAkBC,CAAmB,EAAIL,GAAM,SAAS,SAAS,MAAM,EAC9E,OAAAA,GAAM,UAAU,IAAI,CAChB,MAAMM,EAAW,IAAI,CACjBD,EAAoB,SAAS,MAAM,CACvC,EACA,gBAAS,iBAAiB,mBAAoBC,CAAQ,EAC/C,IAAI,OAAO,oBAAoB,mBAAoBA,CAAQ,CACtE,EAAG,EAAE,EACEF,CACX,EAEA,IAAIG,GAAgB,EACpB,MAAMC,EAAS,CACX,aAAa,CAET,KAAK,UAAaC,IACd,KAAK,YAAY,KAAKA,CAAU,EACzB,IAAI,CACP,MAAMC,EAAQ,KAAK,YAAY,QAAQD,CAAU,EACjD,KAAK,YAAY,OAAOC,EAAO,CAAC,CACpC,GAEJ,KAAK,QAAWC,GAAO,CACnB,KAAK,YAAY,QAASF,GAAaA,EAAWE,CAAI,CAAC,CAC3D,EACA,KAAK,SAAYA,GAAO,CACpB,KAAK,QAAQA,CAAI,EACjB,KAAK,OAAS,CACV,GAAG,KAAK,OACRA,CAChB,CACQ,EACA,KAAK,OAAUA,GAAO,CAClB,IAAIC,EACJ,KAAM,CAAE,QAAAC,EAAS,GAAGC,CAAI,EAAKH,EACvBzpB,EAAK,OAAQypB,GAAQ,KAAO,OAASA,EAAK,KAAQ,YAAcC,EAAWD,EAAK,KAAO,KAAO,OAASC,EAAS,QAAU,EAAID,EAAK,GAAKJ,KACxIQ,EAAgB,KAAK,OAAO,KAAMC,GAC7BA,EAAM,KAAO9pB,CACvB,EACK+pB,EAAcN,EAAK,cAAgB,OAAY,GAAOA,EAAK,YACjE,OAAI,KAAK,gBAAgB,IAAIzpB,CAAE,GAC3B,KAAK,gBAAgB,OAAOA,CAAE,EAE9B6pB,EACA,KAAK,OAAS,KAAK,OAAO,IAAKC,GACvBA,EAAM,KAAO9pB,GACb,KAAK,QAAQ,CACT,GAAG8pB,EACH,GAAGL,EACH,GAAAzpB,EACA,MAAO2pB,CACnC,CAAyB,EACM,CACH,GAAGG,EACH,GAAGL,EACH,GAAAzpB,EACA,YAAA+pB,EACA,MAAOJ,CACnC,GAE2BG,CACV,EAED,KAAK,SAAS,CACV,MAAOH,EACP,GAAGC,EACH,YAAAG,EACA,GAAA/pB,CACpB,CAAiB,EAEEA,CACX,EACA,KAAK,QAAWA,IACRA,GACA,KAAK,gBAAgB,IAAIA,CAAE,EAC3B,sBAAsB,IAAI,KAAK,YAAY,QAASupB,GAAaA,EAAW,CAChE,GAAAvpB,EACA,QAAS,EACrC,CAAyB,CAAC,CAAC,GAEX,KAAK,OAAO,QAAS8pB,GAAQ,CACzB,KAAK,YAAY,QAASP,GAAaA,EAAW,CAC1C,GAAIO,EAAM,GACV,QAAS,EACrC,CAAyB,CAAC,CACV,CAAC,EAEE9pB,GAEX,KAAK,QAAU,CAAC2pB,EAASF,IACd,KAAK,OAAO,CACf,GAAGA,EACH,QAAAE,CAChB,CAAa,EAEL,KAAK,MAAQ,CAACA,EAASF,IACZ,KAAK,OAAO,CACf,GAAGA,EACH,QAAAE,EACA,KAAM,OACtB,CAAa,EAEL,KAAK,QAAU,CAACA,EAASF,IACd,KAAK,OAAO,CACf,GAAGA,EACH,KAAM,UACN,QAAAE,CAChB,CAAa,EAEL,KAAK,KAAO,CAACA,EAASF,IACX,KAAK,OAAO,CACf,GAAGA,EACH,KAAM,OACN,QAAAE,CAChB,CAAa,EAEL,KAAK,QAAU,CAACA,EAASF,IACd,KAAK,OAAO,CACf,GAAGA,EACH,KAAM,UACN,QAAAE,CAChB,CAAa,EAEL,KAAK,QAAU,CAACA,EAASF,IACd,KAAK,OAAO,CACf,GAAGA,EACH,KAAM,UACN,QAAAE,CAChB,CAAa,EAEL,KAAK,QAAU,CAACK,EAASP,IAAO,CAC5B,GAAI,CAACA,EAED,OAEJ,IAAIzpB,EACAypB,EAAK,UAAY,SACjBzpB,EAAK,KAAK,OAAO,CACb,GAAGypB,EACH,QAAAO,EACA,KAAM,UACN,QAASP,EAAK,QACd,YAAa,OAAOA,EAAK,aAAgB,WAAaA,EAAK,YAAc,MAC7F,CAAiB,GAEL,MAAMh3B,EAAI,QAAQ,QAAQu3B,aAAmB,SAAWA,EAAO,EAAKA,CAAO,EAC3E,IAAIC,EAAgBjqB,IAAO,OACvBkqB,EACJ,MAAMC,EAAkB13B,EAAE,KAAK,MAAOsyB,GAAW,CAM7C,GALAmF,EAAS,CACL,UACAnF,CACpB,EAC+C+D,GAAM,eAAe/D,CAAQ,EAExDkF,EAAgB,GAChB,KAAK,OAAO,CACR,GAAAjqB,EACA,KAAM,UACN,QAAS+kB,CACjC,CAAqB,UACMqF,GAAerF,CAAQ,GAAK,CAACA,EAAS,GAAI,CACjDkF,EAAgB,GAChB,MAAMI,EAAc,OAAOZ,EAAK,OAAU,WAAa,MAAMA,EAAK,MAAM,uBAAuB1E,EAAS,MAAM,EAAE,EAAI0E,EAAK,MACnHa,EAAc,OAAOb,EAAK,aAAgB,WAAa,MAAMA,EAAK,YAAY,uBAAuB1E,EAAS,MAAM,EAAE,EAAI0E,EAAK,YAE/Hc,EADmB,OAAOF,GAAgB,UAAY,CAACvB,GAAM,eAAeuB,CAAW,EACpDA,EAAc,CACnD,QAASA,CACjC,EACoB,KAAK,OAAO,CACR,GAAArqB,EACA,KAAM,QACN,YAAAsqB,EACA,GAAGC,CAC3B,CAAqB,CACL,SAAWxF,aAAoB,MAAO,CAClCkF,EAAgB,GAChB,MAAMI,EAAc,OAAOZ,EAAK,OAAU,WAAa,MAAMA,EAAK,MAAM1E,CAAQ,EAAI0E,EAAK,MACnFa,EAAc,OAAOb,EAAK,aAAgB,WAAa,MAAMA,EAAK,YAAY1E,CAAQ,EAAI0E,EAAK,YAE/Fc,EADmB,OAAOF,GAAgB,UAAY,CAACvB,GAAM,eAAeuB,CAAW,EACpDA,EAAc,CACnD,QAASA,CACjC,EACoB,KAAK,OAAO,CACR,GAAArqB,EACA,KAAM,QACN,YAAAsqB,EACA,GAAGC,CAC3B,CAAqB,CACL,SAAWd,EAAK,UAAY,OAAW,CACnCQ,EAAgB,GAChB,MAAMI,EAAc,OAAOZ,EAAK,SAAY,WAAa,MAAMA,EAAK,QAAQ1E,CAAQ,EAAI0E,EAAK,QACvFa,EAAc,OAAOb,EAAK,aAAgB,WAAa,MAAMA,EAAK,YAAY1E,CAAQ,EAAI0E,EAAK,YAE/Fc,EADmB,OAAOF,GAAgB,UAAY,CAACvB,GAAM,eAAeuB,CAAW,EACpDA,EAAc,CACnD,QAASA,CACjC,EACoB,KAAK,OAAO,CACR,GAAArqB,EACA,KAAM,UACN,YAAAsqB,EACA,GAAGC,CAC3B,CAAqB,CACL,CACJ,CAAC,EAAE,MAAM,MAAOrL,GAAQ,CAKpB,GAJAgL,EAAS,CACL,SACAhL,CACpB,EACoBuK,EAAK,QAAU,OAAW,CAC1BQ,EAAgB,GAChB,MAAMI,EAAc,OAAOZ,EAAK,OAAU,WAAa,MAAMA,EAAK,MAAMvK,CAAK,EAAIuK,EAAK,MAChFa,EAAc,OAAOb,EAAK,aAAgB,WAAa,MAAMA,EAAK,YAAYvK,CAAK,EAAIuK,EAAK,YAE5Fc,EADmB,OAAOF,GAAgB,UAAY,CAACvB,GAAM,eAAeuB,CAAW,EACpDA,EAAc,CACnD,QAASA,CACjC,EACoB,KAAK,OAAO,CACR,GAAArqB,EACA,KAAM,QACN,YAAAsqB,EACA,GAAGC,CAC3B,CAAqB,CACL,CACJ,CAAC,EAAE,QAAQ,IAAI,CACPN,IAEA,KAAK,QAAQjqB,CAAE,EACfA,EAAK,QAETypB,EAAK,SAAW,MAAgBA,EAAK,QAAQ,KAAKA,CAAI,CAC1D,CAAC,EACKe,EAAS,IAAI,IAAI,QAAQ,CAAC5H,EAAS6H,IAASN,EAAgB,KAAK,IAAID,EAAO,CAAC,IAAM,SAAWO,EAAOP,EAAO,CAAC,CAAC,EAAItH,EAAQsH,EAAO,CAAC,CAAC,CAAC,EAAE,MAAMO,CAAM,CAAC,EACzJ,OAAI,OAAOzqB,GAAO,UAAY,OAAOA,GAAO,SAEjC,CACH,OAAAwqB,CACpB,EAEuB,OAAO,OAAOxqB,EAAI,CACrB,OAAAwqB,CACpB,CAAiB,CAET,EACA,KAAK,OAAS,CAACE,EAAKjB,IAAO,CACvB,MAAMzpB,GAAMypB,GAAQ,KAAO,OAASA,EAAK,KAAOJ,KAChD,YAAK,OAAO,CACR,IAAKqB,EAAI1qB,CAAE,EACX,GAAAA,EACA,GAAGypB,CACnB,CAAa,EACMzpB,CACX,EACA,KAAK,gBAAkB,IACZ,KAAK,OAAO,OAAQ8pB,GAAQ,CAAC,KAAK,gBAAgB,IAAIA,EAAM,EAAE,CAAC,EAE1E,KAAK,YAAc,GACnB,KAAK,OAAS,GACd,KAAK,gBAAkB,IAAI,GAC/B,CACJ,CACA,MAAMa,GAAa,IAAIrB,GAEjBsB,GAAgB,CAACjB,EAASF,IAAO,CACnC,MAAMzpB,GAAMypB,GAAQ,KAAO,OAASA,EAAK,KAAOJ,KAChD,OAAAsB,GAAW,SAAS,CAChB,MAAOhB,EACP,GAAGF,EACH,GAAAzpB,CACR,CAAK,EACMA,CACX,EACMoqB,GAAkBX,GACbA,GAAQ,OAAOA,GAAS,UAAY,OAAQA,GAAQ,OAAOA,EAAK,IAAO,WAAa,WAAYA,GAAQ,OAAOA,EAAK,QAAW,SAEpIoB,GAAaD,GACbE,GAAa,IAAIH,GAAW,OAC5BI,GAAY,IAAIJ,GAAW,gBAAe,EAE1Cb,GAAQ,OAAO,OAAOe,GAAY,CACpC,QAASF,GAAW,QACpB,KAAMA,GAAW,KACjB,QAASA,GAAW,QACpB,MAAOA,GAAW,MAClB,OAAQA,GAAW,OACnB,QAASA,GAAW,QACpB,QAASA,GAAW,QACpB,QAASA,GAAW,QACpB,QAASA,GAAW,OACxB,EAAG,CACC,WAAAG,GACA,UAAAC,EACJ,CAAC,EAED9C,GAAY,6gdAA6gd,EAEzhd,SAAS+C,GAASC,EAAQ,CACtB,OAAOA,EAAO,QAAU,MAC5B,CAGA,MAAMC,GAAwB,EAExBC,GAAkB,OAElBC,GAAyB,OAEzBC,GAAiB,IAEjBC,GAAc,IAEdC,GAAM,GAENC,GAAkB,GAElBC,GAAsB,IAC5B,SAASC,MAAMC,EAAS,CACpB,OAAOA,EAAQ,OAAO,OAAO,EAAE,KAAK,GAAG,CAC3C,CACA,SAASC,GAA0BC,EAAU,CACzC,KAAM,CAAC54B,EAAGD,CAAC,EAAI64B,EAAS,MAAM,GAAG,EAC3BC,EAAa,GACnB,OAAI74B,GACA64B,EAAW,KAAK74B,CAAC,EAEjBD,GACA84B,EAAW,KAAK94B,CAAC,EAEd84B,CACX,CACA,MAAMC,GAASC,GAAQ,CACnB,IAAIC,EAAmBC,EAAoBC,EAAoBC,EAAoBC,EAAoBC,EAAoBC,EAAoBC,EAAoBC,EACnK,KAAM,CAAE,OAAQC,EAAe,MAAA5C,EAAO,SAAA6C,EAAU,YAAAC,EAAa,WAAAC,EAAY,cAAAC,EAAe,QAAAC,EAAS,MAAAvD,EAAO,OAAAwD,EAAQ,SAAAC,EAAU,YAAAC,EAAa,kBAAAC,EAAmB,YAAaC,EAAwB,MAAAhF,EAAO,kBAAAiF,EAAmB,kBAAAC,EAAmB,UAAAzE,EAAY,GAAI,qBAAA0E,EAAuB,GAAI,SAAUC,GAAqB,SAAA3B,EAAU,IAAA4B,EAAK,gBAAAC,GAAiB,WAAAC,GAAY,MAAAC,GAAO,qBAAAC,EAAuB,aAAa,EAAK7B,EAC5Y,CAAC8B,GAAgBC,CAAiB,EAAIjF,GAAM,SAAS,IAAI,EACzD,CAACkF,EAAmBC,CAAoB,EAAInF,GAAM,SAAS,IAAI,EAC/D,CAACoF,EAASC,CAAU,EAAIrF,GAAM,SAAS,EAAK,EAC5C,CAACsF,GAASC,EAAU,EAAIvF,GAAM,SAAS,EAAK,EAC5C,CAACwF,GAASC,EAAU,EAAIzF,GAAM,SAAS,EAAK,EAC5C,CAAC0F,GAAUC,EAAW,EAAI3F,GAAM,SAAS,EAAK,EAC9C,CAAC4F,GAAUC,EAAW,EAAI7F,GAAM,SAAS,EAAK,EAC9C,CAAC8F,GAAoBC,EAAqB,EAAI/F,GAAM,SAAS,CAAC,EAC9D,CAACgG,GAAeC,EAAgB,EAAIjG,GAAM,SAAS,CAAC,EACpDkG,GAAgBlG,GAAM,OAAOgB,EAAM,UAAY0D,IAAuBnC,EAAc,EACpF4D,GAAgBnG,GAAM,OAAO,IAAI,EACjCoG,GAAWpG,GAAM,OAAO,IAAI,EAC5BqG,GAAU3F,IAAU,EACpB4F,GAAY5F,EAAQ,GAAKsD,EACzBuC,GAAYvF,EAAM,KAClBC,GAAcD,EAAM,cAAgB,GACpCwF,GAAiBxF,EAAM,WAAa,GACpCyF,GAA4BzF,EAAM,sBAAwB,GAE1D0F,GAAc1G,GAAM,QAAQ,IAAIiE,EAAQ,UAAW0C,IAASA,GAAO,UAAY3F,EAAM,EAAE,GAAK,EAAG,CACjGiD,EACAjD,EAAM,EACd,CAAK,EACK4F,GAAc5G,GAAM,QAAQ,IAAI,CAClC,IAAI6G,GACJ,OAAQA,GAAqB7F,EAAM,cAAgB,KAAO6F,GAAqBvC,CACnF,EAAG,CACCtD,EAAM,YACNsD,CACR,CAAK,EACKwC,GAAW9G,GAAM,QAAQ,IAAIgB,EAAM,UAAY0D,IAAuBnC,GAAgB,CACxFvB,EAAM,SACN0D,EACR,CAAK,EACKqC,GAAyB/G,GAAM,OAAO,CAAC,EACvChM,GAASgM,GAAM,OAAO,CAAC,EACvBgH,GAA6BhH,GAAM,OAAO,CAAC,EAC3CiH,GAAkBjH,GAAM,OAAO,IAAI,EACnC,CAAC71B,GAAGD,EAAC,EAAI64B,EAAS,MAAM,GAAG,EAC3BmE,GAAqBlH,GAAM,QAAQ,IAC9BiE,EAAQ,OAAO,CAACjK,GAAMmN,GAAMC,KAE3BA,IAAgBV,GACT1M,GAEJA,GAAOmN,GAAK,OACpB,CAAC,EACL,CACClD,EACAyC,EACR,CAAK,EACKtG,GAAmBD,GAAmB,EACtCkH,GAASrG,EAAM,QAAU4C,EACzB0D,GAAWf,KAAc,UAC/BvS,GAAO,QAAUgM,GAAM,QAAQ,IAAI0G,GAAc/B,EAAMuC,GAAoB,CACvER,GACAQ,EACR,CAAK,EACDlH,GAAM,UAAU,IAAI,CAChBkG,GAAc,QAAUY,EAC5B,EAAG,CACCA,EACR,CAAK,EACD9G,GAAM,UAAU,IAAI,CAEhBqF,EAAW,EAAI,CACnB,EAAG,EAAE,EACLrF,GAAM,UAAU,IAAI,CAChB,MAAMuH,GAAYnB,GAAS,QAC3B,GAAImB,GAAW,CACX,MAAMZ,GAASY,GAAU,sBAAqB,EAAG,OAEjD,OAAAtB,GAAiBU,EAAM,EACvB5C,EAAYv4B,IAAI,CACR,CACI,QAASw1B,EAAM,GACf,OAAA2F,GACA,SAAU3F,EAAM,QACxC,EACoB,GAAGx1B,EACvB,CAAiB,EACE,IAAIu4B,EAAYv4B,IAAIA,GAAE,OAAQm7B,IAASA,GAAO,UAAY3F,EAAM,EAAE,CAAC,CAC9E,CACJ,EAAG,CACC+C,EACA/C,EAAM,EACd,CAAK,EACDhB,GAAM,gBAAgB,IAAI,CAEtB,GAAI,CAACoF,EAAS,OACd,MAAMmC,GAAYnB,GAAS,QACrBoB,GAAiBD,GAAU,MAAM,OACvCA,GAAU,MAAM,OAAS,OACzB,MAAME,GAAYF,GAAU,sBAAqB,EAAG,OACpDA,GAAU,MAAM,OAASC,GACzBvB,GAAiBwB,EAAS,EAC1B1D,EAAYE,IACcA,GAAQ,KAAM0C,IAASA,GAAO,UAAY3F,EAAM,EAAE,EAW7DiD,GAAQ,IAAK0C,IAASA,GAAO,UAAY3F,EAAM,GAAK,CACnD,GAAG2F,GACH,OAAQc,EAChC,EAAwBd,EAAM,EAZP,CACH,CACI,QAAS3F,EAAM,GACf,OAAQyG,GACR,SAAUzG,EAAM,QACxC,EACoB,GAAGiD,EACvB,CAOS,CACL,EAAG,CACCmB,EACApE,EAAM,MACNA,EAAM,YACN+C,EACA/C,EAAM,GACNA,EAAM,IACNA,EAAM,OACNA,EAAM,MACd,CAAK,EACD,MAAM0G,GAAc1H,GAAM,YAAY,IAAI,CAEtCuF,GAAW,EAAI,EACfQ,GAAsB/R,GAAO,OAAO,EACpC+P,EAAYv4B,IAAIA,GAAE,OAAQm7B,IAASA,GAAO,UAAY3F,EAAM,EAAE,CAAC,EAC/D,WAAW,IAAI,CACXoD,EAAYpD,CAAK,CACrB,EAAG2B,EAAmB,CAC1B,EAAG,CACC3B,EACAoD,EACAL,EACA/P,EACR,CAAK,EACDgM,GAAM,UAAU,IAAI,CAChB,GAAIgB,EAAM,SAAWuF,KAAc,WAAavF,EAAM,WAAa,KAAYA,EAAM,OAAS,UAAW,OACzG,IAAI2G,GAsBJ,OAAIxD,GAAYL,GAAe1D,IApBZ,IAAI,CACnB,GAAI4G,GAA2B,QAAUD,GAAuB,QAAS,CAErE,MAAMa,GAAc,IAAI,KAAI,EAAG,QAAO,EAAKb,GAAuB,QAClEb,GAAc,QAAUA,GAAc,QAAU0B,EACpD,CACAZ,GAA2B,QAAU,IAAI,KAAI,EAAG,QAAO,CAC3D,GAcc,GAbK,IAAI,CAIfd,GAAc,UAAY,MAC9Ba,GAAuB,QAAU,IAAI,KAAI,EAAG,QAAO,EAEnDY,GAAY,WAAW,IAAI,CACvB3G,EAAM,aAAe,MAAgBA,EAAM,YAAY,KAAKA,EAAOA,CAAK,EACxE0G,GAAW,CACf,EAAGxB,GAAc,OAAO,EAC5B,GAIc,EAEP,IAAI,aAAayB,EAAS,CACrC,EAAG,CACCxD,EACAL,EACA9C,EACAuF,GACAnG,GACAsH,EACR,CAAK,EACD1H,GAAM,UAAU,IAAI,CACZgB,EAAM,SACN0G,GAAW,EACX1G,EAAM,WAAa,MAAgBA,EAAM,UAAU,KAAKA,EAAOA,CAAK,EAE5E,EAAG,CACC0G,GACA1G,EAAM,MACd,CAAK,EACD,SAAS6G,IAAiB,CACtB,IAAI1E,GACJ,GAAI2B,IAAS,MAAgBA,GAAM,QAAS,CACxC,IAAI1B,GACJ,OAAqBpD,GAAM,cAAc,MAAO,CAC5C,UAAW4C,GAAGiC,IAAc,KAAO,OAASA,GAAW,OAAQ7D,GAAS,OAAiBoC,GAAqBpC,EAAM,aAAe,KAApD,OAAoEoC,GAAmB,OAAQ,eAAe,EAC7L,eAAgBmD,KAAc,SAC9C,EAAezB,GAAM,OAAO,CACpB,CACA,OAAqB9E,GAAM,cAAcH,GAAQ,CAC7C,UAAW+C,GAAGiC,IAAc,KAAO,OAASA,GAAW,OAAQ7D,GAAS,OAAiBmC,GAAoBnC,EAAM,aAAe,KAAnD,OAAmEmC,GAAkB,MAAM,EAC1K,QAASoD,KAAc,SACnC,CAAS,CACL,CACA,MAAMuB,GAAO9G,EAAM,OAAS8D,IAAS,KAAO,OAASA,GAAMyB,EAAS,IAAMhH,GAASgH,EAAS,EAC5F,IAAIwB,GAAmBC,GACvB,OAAqBhI,GAAM,cAAc,KAAM,CAC3C,SAAU,EACV,IAAKoG,GACL,UAAWxD,GAAG7C,EAAWyG,GAAgB3B,IAAc,KAAO,OAASA,GAAW,MAAO7D,GAAS,OAAiBmC,EAAoBnC,EAAM,aAAe,KAAnD,OAAmEmC,EAAkB,MAAO0B,IAAc,KAAO,OAASA,GAAW,QAASA,IAAc,KAAO,OAASA,GAAW0B,EAAS,EAAGvF,GAAS,OAAiBoC,EAAqBpC,EAAM,aAAe,KAApD,OAAoEoC,EAAmBmD,EAAS,CAAC,EAC7Z,oBAAqB,GACrB,oBAAqBwB,GAAoB/G,EAAM,aAAe,KAAO+G,GAAoB1D,EACzF,cAAe,EAASrD,EAAM,KAAOA,EAAM,UAAY6C,GACvD,eAAgBuB,EAChB,eAAgB,EAAQpE,EAAM,QAC9B,cAAe4E,GACf,eAAgBN,GAChB,eAAgBgB,GAChB,kBAAmBn8B,GACnB,kBAAmBD,GACnB,aAAcw2B,EACd,aAAc2F,GACd,eAAgBb,GAChB,mBAAoBvE,GACpB,YAAasF,GACb,cAAec,GACf,iBAAkB3B,GAClB,uBAAwBR,EACxB,gBAAiB,GAAQf,GAAYS,IAAmBQ,GACxD,cAAepE,EAAM,OACrB,MAAO,CACH,UAAWN,EACX,kBAAmBA,EACnB,YAAawD,EAAO,OAASxD,EAC7B,WAAY,GAAG4E,GAAUQ,GAAqB9R,GAAO,OAAO,KAC5D,mBAAoB4Q,GAAkB,OAAS,GAAGoB,EAAa,KAC/D,GAAG1G,EACH,GAAG0B,EAAM,KACrB,EACQ,UAAW,IAAI,CACXyE,GAAW,EAAK,EAChBR,EAAkB,IAAI,EACtBgC,GAAgB,QAAU,IAC9B,EACA,cAAgB5Q,IAAQ,CAChBA,GAAM,SAAW,IACjBiR,IAAY,CAACrG,KACjBkF,GAAc,QAAU,IAAI,KAC5BJ,GAAsB/R,GAAO,OAAO,EAEpCqC,GAAM,OAAO,kBAAkBA,GAAM,SAAS,EAC1CA,GAAM,OAAO,UAAY,WAC7BoP,GAAW,EAAI,EACfwB,GAAgB,QAAU,CACtB,EAAG5Q,GAAM,QACT,EAAGA,GAAM,OACzB,IACQ,EACA,YAAa,IAAI,CACb,IAAI4R,GAAmBC,GAAoBC,GAC3C,GAAIzC,IAAY,CAACzE,GAAa,OAC9BgG,GAAgB,QAAU,KAC1B,MAAMmB,GAAe,SAASH,GAAoB7B,GAAS,UAAY,KAAO,OAAS6B,GAAkB,MAAM,iBAAiB,kBAAkB,EAAE,QAAQ,KAAM,EAAE,IAAM,CAAC,EACrKI,GAAe,SAASH,GAAqB9B,GAAS,UAAY,KAAO,OAAS8B,GAAmB,MAAM,iBAAiB,kBAAkB,EAAE,QAAQ,KAAM,EAAE,IAAM,CAAC,EACvKI,GAAY,IAAI,OAAO,QAAO,IAAOH,GAAyBhC,GAAc,UAAY,KAAO,OAASgC,GAAuB,QAAO,GACtII,GAAcvD,KAAmB,IAAMoD,GAAeC,GACtDG,GAAW,KAAK,IAAID,EAAW,EAAID,GACzC,GAAI,KAAK,IAAIC,EAAW,GAAK7F,IAAmB8F,GAAW,IAAM,CAC7DzC,GAAsB/R,GAAO,OAAO,EACpCgN,EAAM,WAAa,MAAgBA,EAAM,UAAU,KAAKA,EAAOA,CAAK,EAEhEmE,EADAH,KAAmB,IACEoD,GAAe,EAAI,QAAU,OAE7BC,GAAe,EAAI,OAAS,IAFO,EAI5DX,GAAW,EACX/B,GAAY,EAAI,EAChB,MACJ,KAAO,CACH,IAAI8C,GAAoBC,IACvBD,GAAqBrC,GAAS,UAAY,MAAgBqC,GAAmB,MAAM,YAAY,mBAAoB,KAAK,GACxHC,GAAqBtC,GAAS,UAAY,MAAgBsC,GAAmB,MAAM,YAAY,mBAAoB,KAAK,CAC7H,CACA7C,GAAY,EAAK,EACjBJ,GAAW,EAAK,EAChBR,EAAkB,IAAI,CAC1B,EACA,cAAgB5O,IAAQ,CACpB,IAAIsS,GACJV,GAAmBC,GAGnB,GAFI,CAACjB,GAAgB,SAAW,CAAChG,MACT0H,GAAuB,OAAO,aAAY,IAAO,KAAO,OAASA,GAAqB,SAAQ,EAAG,QAAU,EAChH,OACnB,MAAMC,GAASvS,GAAM,QAAU4Q,GAAgB,QAAQ,EACjD4B,GAASxS,GAAM,QAAU4Q,GAAgB,QAAQ,EACvD,IAAI6B,GACJ,MAAMC,IAAmBD,GAAyB5F,EAAM,kBAAoB,KAAO4F,GAAyBhG,GAA0BC,CAAQ,EAE1I,CAACiC,KAAmB,KAAK,IAAI6D,EAAM,EAAI,GAAK,KAAK,IAAID,EAAM,EAAI,IAC/D3D,EAAkB,KAAK,IAAI4D,EAAM,EAAI,KAAK,IAAID,EAAM,EAAI,IAAM,GAAG,EAErE,IAAIL,GAAc,CACd,EAAG,EACH,EAAG,CACnB,EACY,MAAMS,GAAgBC,IAEX,GAAK,IADG,KAAK,IAAIA,EAAK,EAAI,IAIrC,GAAIjE,KAAmB,KAEnB,GAAI+D,GAAgB,SAAS,KAAK,GAAKA,GAAgB,SAAS,QAAQ,EACpE,GAAIA,GAAgB,SAAS,KAAK,GAAKH,GAAS,GAAKG,GAAgB,SAAS,QAAQ,GAAKH,GAAS,EAChGL,GAAY,EAAIK,OACb,CAEH,MAAMM,GAAgBN,GAASI,GAAaJ,EAAM,EAElDL,GAAY,EAAI,KAAK,IAAIW,EAAa,EAAI,KAAK,IAAIN,EAAM,EAAIM,GAAgBN,EACjF,UAEG5D,KAAmB,MAEtB+D,GAAgB,SAAS,MAAM,GAAKA,GAAgB,SAAS,OAAO,GACpE,GAAIA,GAAgB,SAAS,MAAM,GAAKF,GAAS,GAAKE,GAAgB,SAAS,OAAO,GAAKF,GAAS,EAChGN,GAAY,EAAIM,OACb,CAEH,MAAMK,GAAgBL,GAASG,GAAaH,EAAM,EAElDN,GAAY,EAAI,KAAK,IAAIW,EAAa,EAAI,KAAK,IAAIL,EAAM,EAAIK,GAAgBL,EACjF,EAGJ,KAAK,IAAIN,GAAY,CAAC,EAAI,GAAK,KAAK,IAAIA,GAAY,CAAC,EAAI,IACzD1C,GAAY,EAAI,GAEnBoC,GAAoB7B,GAAS,UAAY,MAAgB6B,GAAkB,MAAM,YAAY,mBAAoB,GAAGM,GAAY,CAAC,IAAI,GACrIL,GAAqB9B,GAAS,UAAY,MAAgB8B,GAAmB,MAAM,YAAY,mBAAoB,GAAGK,GAAY,CAAC,IAAI,CAC5I,CACR,EAAO3B,IAAe,CAAC5F,EAAM,KAAOuF,KAAc,UAA0BvG,GAAM,cAAc,SAAU,CAClG,aAAc+E,EACd,gBAAiBuC,GACjB,oBAAqB,GACrB,QAASA,IAAY,CAACrG,GAAc,IAAI,CAAC,EAAI,IAAI,CAC7CyG,GAAW,EACX1G,EAAM,WAAa,MAAgBA,EAAM,UAAU,KAAKA,EAAOA,CAAK,CACxE,EACA,UAAW4B,GAAGiC,IAAc,KAAO,OAASA,GAAW,YAAa7D,GAAS,OAAiBqC,EAAqBrC,EAAM,aAAe,KAApD,OAAoEqC,EAAmB,WAAW,CAC9L,GAAQ2E,GAAelD,IAAS,KAAO,OAASA,GAAM,QAAU,KAAOkD,GAAe9H,EAAS,EAAI,MAAOqG,IAAavF,EAAM,MAAQA,EAAM,UAAYA,EAAM,OAAS,QAAU8D,IAAS,KAAO,OAASA,GAAMyB,EAAS,KAAO,MAAQvF,EAAM,MAAsBhB,GAAM,cAAc,MAAO,CACtR,YAAa,GACb,UAAW4C,GAAGiC,IAAc,KAAO,OAASA,GAAW,KAAM7D,GAAS,OAAiBsC,EAAqBtC,EAAM,aAAe,KAApD,OAAoEsC,EAAmB,IAAI,CAChL,EAAOtC,EAAM,SAAWA,EAAM,OAAS,WAAa,CAACA,EAAM,KAAOA,EAAM,MAAQ6G,KAAmB,KAAM7G,EAAM,OAAS,UAAY8G,GAAO,IAAI,EAAI,KAAoB9H,GAAM,cAAc,MAAO,CAC1L,eAAgB,GAChB,UAAW4C,GAAGiC,IAAc,KAAO,OAASA,GAAW,QAAS7D,GAAS,OAAiBuC,EAAqBvC,EAAM,aAAe,KAApD,OAAoEuC,EAAmB,OAAO,CACtL,EAAqBvD,GAAM,cAAc,MAAO,CACxC,aAAc,GACd,UAAW4C,GAAGiC,IAAc,KAAO,OAASA,GAAW,MAAO7D,GAAS,OAAiBwC,EAAqBxC,EAAM,aAAe,KAApD,OAAoEwC,EAAmB,KAAK,CAClL,EAAOxC,EAAM,IAAMA,EAAM,IAAM,OAAOA,EAAM,OAAU,WAAaA,EAAM,QAAUA,EAAM,KAAK,EAAGA,EAAM,YAA4BhB,GAAM,cAAc,MAAO,CACtJ,mBAAoB,GACpB,UAAW4C,GAAG6B,EAAsBgC,GAA2B5B,IAAc,KAAO,OAASA,GAAW,YAAa7D,GAAS,OAAiByC,EAAqBzC,EAAM,aAAe,KAApD,OAAoEyC,EAAmB,WAAW,CAC/O,EAAO,OAAOzC,EAAM,aAAgB,WAAaA,EAAM,cAAgBA,EAAM,WAAW,EAAI,IAAI,EAAiBhB,GAAM,eAAegB,EAAM,MAAM,EAAIA,EAAM,OAASA,EAAM,QAAUkB,GAASlB,EAAM,MAAM,EAAkBhB,GAAM,cAAc,SAAU,CAClP,cAAe,GACf,cAAe,GACf,MAAOgB,EAAM,mBAAqBuD,EAClC,QAAUlO,IAAQ,CAET6L,GAASlB,EAAM,MAAM,GACrBC,KACLD,EAAM,OAAO,SAAW,MAAgBA,EAAM,OAAO,QAAQ,KAAKA,EAAM,OAAQ3K,EAAK,EACrFqR,GAAW,EACf,EACA,UAAW9E,GAAGiC,IAAc,KAAO,OAASA,GAAW,aAAc7D,GAAS,OAAiB0C,EAAqB1C,EAAM,aAAe,KAApD,OAAoE0C,EAAmB,YAAY,CAChM,EAAO1C,EAAM,OAAO,KAAK,EAAI,KAAoBhB,GAAM,eAAegB,EAAM,MAAM,EAAIA,EAAM,OAASA,EAAM,QAAUkB,GAASlB,EAAM,MAAM,EAAkBhB,GAAM,cAAc,SAAU,CAClL,cAAe,GACf,cAAe,GACf,MAAOgB,EAAM,mBAAqBwD,EAClC,QAAUnO,IAAQ,CAET6L,GAASlB,EAAM,MAAM,IAC1BA,EAAM,OAAO,SAAW,MAAgBA,EAAM,OAAO,QAAQ,KAAKA,EAAM,OAAQ3K,EAAK,EACjF,CAAAA,GAAM,kBACVqR,GAAW,EACf,EACA,UAAW9E,GAAGiC,IAAc,KAAO,OAASA,GAAW,aAAc7D,GAAS,OAAiB2C,EAAqB3C,EAAM,aAAe,KAApD,OAAoE2C,EAAmB,YAAY,CAChM,EAAO3C,EAAM,OAAO,KAAK,EAAI,IAAI,CACjC,EACA,SAASmI,IAAuB,CAE5B,GADI,OAAO,OAAW,KAClB,OAAO,SAAa,IAAa,MAAO,MAC5C,MAAMC,EAAe,SAAS,gBAAgB,aAAa,KAAK,EAChE,OAAIA,IAAiB,QAAU,CAACA,EACrB,OAAO,iBAAiB,SAAS,eAAe,EAAE,UAEtDA,CACX,CACA,SAASC,GAAaC,EAAeC,EAAc,CAC/C,MAAMC,EAAS,GACf,OACIF,EACAC,CACR,EAAM,QAAQ,CAACvV,EAAQ0M,IAAQ,CACvB,MAAM+I,EAAW/I,IAAU,EACrBgJ,EAASD,EAAW,kBAAoB,WACxCE,EAAeF,EAAWnH,GAAyBD,GACzD,SAASuH,EAAU5V,EAAQ,CACvB,CACI,MACA,QACA,SACA,MAChB,EAAc,QAASM,GAAM,CACbkV,EAAO,GAAGE,CAAM,IAAIpV,CAAG,EAAE,EAAI,OAAON,GAAW,SAAW,GAAGA,CAAM,KAAOA,CAC9E,CAAC,CACL,CACI,OAAOA,GAAW,UAAY,OAAOA,GAAW,SAChD4V,EAAU5V,CAAM,EACT,OAAOA,GAAW,SACzB,CACI,MACA,QACA,SACA,MAChB,EAAc,QAASM,GAAM,CACTN,EAAOM,CAAG,IAAM,OAChBkV,EAAO,GAAGE,CAAM,IAAIpV,CAAG,EAAE,EAAIqV,EAE7BH,EAAO,GAAGE,CAAM,IAAIpV,CAAG,EAAE,EAAI,OAAON,EAAOM,CAAG,GAAM,SAAW,GAAGN,EAAOM,CAAG,CAAC,KAAON,EAAOM,CAAG,CAEtG,CAAC,EAEDsV,EAAUD,CAAY,CAE9B,CAAC,EACMH,CACX,CA0CA,MAAMK,GAAwB7J,GAAM,WAAW,SAAiBkD,EAAO4G,EAAK,CACxE,KAAM,CAAE,GAAA5yB,EAAI,OAAAmwB,EAAQ,SAAAtE,EAAW,eAAgB,OAAAgH,EAAS,CACpD,SACA,MACR,EAAO,OAAAC,EAAQ,YAAApD,EAAa,UAAA7G,EAAW,OAAA/L,EAAQ,aAAAuV,EAAc,MAAAU,EAAQ,QAAS,WAAAC,EAAY,SAAApD,EAAU,MAAAxH,EAAO,cAAA0E,EAAgB5B,GAAuB,aAAA+H,EAAc,IAAAC,EAAMjB,KAAwB,IAAAxE,EAAMlC,GAAK,MAAAqC,EAAO,mBAAAuF,EAAqB,eAAe,EAAKnH,EAC/O,CAACgB,EAAQoG,CAAS,EAAItK,GAAM,SAAS,EAAE,EACvCuK,EAAiBvK,GAAM,QAAQ,IAC7B9oB,EACOgtB,EAAO,OAAQlD,GAAQA,EAAM,YAAc9pB,CAAE,EAEjDgtB,EAAO,OAAQlD,GAAQ,CAACA,EAAM,SAAS,EAC/C,CACCkD,EACAhtB,CACR,CAAK,EACKszB,EAAoBxK,GAAM,QAAQ,IAC7B,MAAM,KAAK,IAAI,IAAI,CACtB+C,CACZ,EAAU,OAAOwH,EAAe,OAAQvJ,GAAQA,EAAM,QAAQ,EAAE,IAAKA,GAAQA,EAAM,QAAQ,CAAC,CAAC,CAAC,EACvF,CACCuJ,EACAxH,CACR,CAAK,EACK,CAACkB,EAASF,CAAU,EAAI/D,GAAM,SAAS,EAAE,EACzC,CAACmE,GAAUsG,CAAW,EAAIzK,GAAM,SAAS,EAAK,EAC9C,CAAC8D,EAAa4G,EAAc,EAAI1K,GAAM,SAAS,EAAK,EACpD,CAAC2K,GAAaC,EAAc,EAAI5K,GAAM,SAASiK,IAAU,SAAWA,EAAQ,OAAO,OAAW,KAAc,OAAO,YAAc,OAAO,WAAW,8BAA8B,EAAE,QAAU,OAAmB,OAAO,EACvNY,EAAU7K,GAAM,OAAO,IAAI,EAC3B8K,GAAcf,EAAO,KAAK,GAAG,EAAE,QAAQ,OAAQ,EAAE,EAAE,QAAQ,SAAU,EAAE,EACvEgB,EAAwB/K,GAAM,OAAO,IAAI,EACzCgL,EAAmBhL,GAAM,OAAO,EAAK,EACrCoE,EAAcpE,GAAM,YAAaiL,GAAgB,CACnDX,EAAWpG,GAAS,CAChB,IAAIgH,GACJ,OAAOA,GAAehH,EAAO,KAAMlD,IAAQA,GAAM,KAAOiK,EAAc,EAAE,IAAM,MAAgBC,GAAa,QACvGrJ,GAAW,QAAQoJ,EAAc,EAAE,EAEhC/G,EAAO,OAAO,CAAC,CAAE,GAAAhtB,EAAE,IAAKA,KAAO+zB,EAAc,EAAE,CAC1D,CAAC,CACL,EAAG,EAAE,EACL,OAAAjL,GAAM,UAAU,IACL6B,GAAW,UAAWb,GAAQ,CACjC,GAAIA,EAAM,QAAS,CAEf,sBAAsB,IAAI,CACtBsJ,EAAWpG,GAASA,EAAO,IAAKp6B,IAAIA,GAAE,KAAOk3B,EAAM,GAAK,CAC5C,GAAGl3B,GACH,OAAQ,EACxC,EAAgCA,EAAC,CAAC,CAClB,CAAC,EACD,MACJ,CAEA,WAAW,IAAI,CACXqhC,GAAS,UAAU,IAAI,CACnBb,EAAWpG,GAAS,CAChB,MAAMkH,GAAuBlH,EAAO,UAAWp6B,IAAIA,GAAE,KAAOk3B,EAAM,EAAE,EAEpE,OAAIoK,KAAyB,GAClB,CACH,GAAGlH,EAAO,MAAM,EAAGkH,EAAoB,EACvC,CACI,GAAGlH,EAAOkH,EAAoB,EAC9B,GAAGpK,CACvC,EACgC,GAAGkD,EAAO,MAAMkH,GAAuB,CAAC,CACxE,EAE+B,CACHpK,EACA,GAAGkD,CAC/B,CACoB,CAAC,CACL,CAAC,CACL,CAAC,CACL,CAAC,EACF,CACCA,CACR,CAAK,EACDlE,GAAM,UAAU,IAAI,CAChB,GAAIiK,IAAU,SAAU,CACpBW,GAAeX,CAAK,EACpB,MACJ,CAWA,GAVIA,IAAU,WAEN,OAAO,YAAc,OAAO,WAAW,8BAA8B,EAAE,QAEvEW,GAAe,MAAM,EAGrBA,GAAe,OAAO,GAG1B,OAAO,OAAW,IAAa,OACnC,MAAMS,EAAiB,OAAO,WAAW,8BAA8B,EACvE,GAAI,CAEAA,EAAe,iBAAiB,SAAU,CAAC,CAAE,QAAAC,CAAO,IAAK,CAEjDV,GADAU,EACe,OAEA,OAFM,CAI7B,CAAC,CACL,MAAgB,CAEZD,EAAe,YAAY,CAAC,CAAE,QAAAC,MAAY,CACtC,GAAI,CAEIV,GADAU,GACe,OAEA,OAFM,CAI7B,OAAS1gC,GAAG,CACR,QAAQ,MAAMA,EAAC,CACnB,CACJ,CAAC,CACL,CACJ,EAAG,CACCq/B,CACR,CAAK,EACDjK,GAAM,UAAU,IAAI,CAEZkE,EAAO,QAAU,GACjBuG,EAAY,EAAK,CAEzB,EAAG,CACCvG,CACR,CAAK,EACDlE,GAAM,UAAU,IAAI,CAChB,MAAMuL,EAAiBlV,GAAQ,CAC3B,IAAImV,GAEJ,GADwBzB,EAAO,MAAOzV,IAAM+B,EAAM/B,EAAG,GAAK+B,EAAM,OAAS/B,EAAG,EACvD,CACjB,IAAImX,GACJhB,EAAY,EAAI,GACfgB,GAAoBZ,EAAQ,UAAY,MAAgBY,GAAkB,MAAK,CACpF,CACIpV,EAAM,OAAS,WAAa,SAAS,gBAAkBwU,EAAQ,UAAaW,GAAmBX,EAAQ,UAAY,MAAgBW,GAAiB,SAAS,SAAS,aAAa,IACnLf,EAAY,EAAK,CAEzB,EACA,gBAAS,iBAAiB,UAAWc,CAAa,EAC3C,IAAI,SAAS,oBAAoB,UAAWA,CAAa,CACpE,EAAG,CACCxB,CACR,CAAK,EACD/J,GAAM,UAAU,IAAI,CAChB,GAAI6K,EAAQ,QACR,MAAO,IAAI,CACHE,EAAsB,UACtBA,EAAsB,QAAQ,MAAM,CAChC,cAAe,EACvC,CAAqB,EACDA,EAAsB,QAAU,KAChCC,EAAiB,QAAU,GAEnC,CAER,EAAG,CACCH,EAAQ,OAChB,CAAK,EAEa7K,GAAM,cAAc,UAAW,CACzC,IAAK8J,EACL,aAAc,GAAGO,CAAkB,IAAIS,EAAW,GAClD,SAAU,GACV,YAAa,SACb,gBAAiB,iBACjB,cAAe,QACf,yBAA0B,EAClC,EAAON,EAAkB,IAAI,CAACzH,EAAUrC,IAAQ,CACxC,IAAIgL,GACJ,KAAM,CAACvhC,GAAGD,EAAC,EAAI64B,EAAS,MAAM,GAAG,EACjC,OAAKwH,EAAe,OACCvK,GAAM,cAAc,KAAM,CAC3C,IAAK+C,EACL,IAAKqH,IAAQ,OAASjB,GAAoB,EAAKiB,EAC/C,SAAU,GACV,IAAKS,EACL,UAAW9K,EACX,sBAAuB,GACvB,oBAAqB4K,GACrB,kBAAmBxgC,GACnB,kBAAmBD,GACnB,MAAO,CACH,uBAAwB,KAAKwhC,GAAYzH,EAAQ,CAAC,IAAM,KAAO,OAASyH,GAAU,SAAW,CAAC,KAC9F,UAAW,GAAGlJ,EAAW,KACzB,QAAS,GAAGmC,CAAG,KACf,GAAGrF,EACH,GAAG+J,GAAarV,EAAQuV,CAAY,CACpD,EACY,OAASlT,IAAQ,CACT2U,EAAiB,SAAW,CAAC3U,GAAM,cAAc,SAASA,GAAM,aAAa,IAC7E2U,EAAiB,QAAU,GACvBD,EAAsB,UACtBA,EAAsB,QAAQ,MAAM,CAChC,cAAe,EAC3C,CAAyB,EACDA,EAAsB,QAAU,MAG5C,EACA,QAAU1U,IAAQ,CACWA,GAAM,kBAAkB,aAAeA,GAAM,OAAO,QAAQ,cAAgB,SAEhG2U,EAAiB,UAClBA,EAAiB,QAAU,GAC3BD,EAAsB,QAAU1U,GAAM,cAE9C,EACA,aAAc,IAAIoU,EAAY,EAAI,EAClC,YAAa,IAAIA,EAAY,EAAI,EACjC,aAAc,IAAI,CAET3G,GACD2G,EAAY,EAAK,CAEzB,EACA,UAAW,IAAIA,EAAY,EAAK,EAChC,cAAgBpU,IAAQ,CACKA,GAAM,kBAAkB,aAAeA,GAAM,OAAO,QAAQ,cAAgB,SAErGqU,GAAe,EAAI,CACvB,EACA,YAAa,IAAIA,GAAe,EAAK,CACjD,EAAWH,EAAe,OAAQvJ,IAAQ,CAACA,GAAM,UAAYN,IAAU,GAAKM,GAAM,WAAa+B,CAAQ,EAAE,IAAI,CAAC/B,GAAON,KAAQ,CACjH,IAAIiL,GAAwBC,GAC5B,OAAqB5L,GAAM,cAAciD,GAAO,CAC5C,IAAKjC,GAAM,GACX,MAAO8D,EACP,MAAOpE,GACP,MAAOM,GACP,kBAAmBkJ,EACnB,UAAWyB,GAAyBxB,GAAgB,KAAO,OAASA,EAAa,WAAa,KAAOwB,GAAyB7E,EAC9H,UAAWqD,GAAgB,KAAO,OAASA,EAAa,UACxD,qBAAsBA,GAAgB,KAAO,OAASA,EAAa,qBACnE,OAAQ9C,EACR,cAAerD,EACf,aAAc4H,GAA4BzB,GAAgB,KAAO,OAASA,EAAa,cAAgB,KAAOyB,GAA4BhF,EAC1I,YAAa9C,EACb,SAAUf,EACV,MAAOoH,GAAgB,KAAO,OAASA,EAAa,MACpD,SAAUA,GAAgB,KAAO,OAASA,EAAa,SACvD,WAAYA,GAAgB,KAAO,OAASA,EAAa,WACzD,kBAAmBA,GAAgB,KAAO,OAASA,EAAa,kBAChE,kBAAmBA,GAAgB,KAAO,OAASA,EAAa,kBAChE,qBAAsBA,GAAgB,KAAO,OAASA,EAAa,qBACnE,YAAa/F,EACb,OAAQmG,EAAe,OAAQzgC,IAAIA,GAAE,UAAYk3B,GAAM,QAAQ,EAC/D,QAASiD,EAAQ,OAAQz4B,IAAIA,GAAE,UAAYw1B,GAAM,QAAQ,EACzD,WAAY+C,EACZ,gBAAiBiG,EACjB,IAAKrF,EACL,SAAUR,GACV,gBAAiBjB,EAAM,eACvC,CAAa,CACL,CAAC,CAAC,EAnFiC,IAoFvC,CAAC,CAAC,CACN,CAAC,ECnpCK2G,GAAU,CAAC,CAAE,GAAG3G,KAElBtB,MAACiK,GAAA,CACC,MAAM,OACN,UAAU,gBACV,aAAc,CACZ,WAAY,CACV,MACE,kIACF,YAAa,uCACb,aAAc,mEACd,aAAc,+DAEd,MACE,wIACJ,EAED,GAAG3I,CAAA,GChBJ4I,GAAoB,IAGnB,SAASC,GAAqBzV,EAAsB,CACzD,MAAO,GAAGA,EAAI,IAAI,IAAIA,EAAI,gBAAgB,IAAIA,EAAI,IAAI,IAAIA,EAAI,gBAAgB,EAChF,CAcO,SAAS0V,GACd5Q,EAC+B,CAC/B,KAAM,CAAC6Q,EAAU3S,CAAW,EAAI1D,WAAoB,EAAE,EAChD,CAACsW,EAAiBC,CAAkB,EAAIvW,WAAS,EAAK,EACtD,CAACwW,EAAcC,CAAe,EAAIzW,WAAS,EAAK,EAChD,CAAC0W,EAAkBC,CAAmB,EAAI3W,WAAS,EAAK,EAGxD4W,EAAqBhX,SAAoB,IAAI,GAAK,EAGlDiX,EAAqBjX,SAA+B,IAAI,EAGxDkX,EAA4BlX,SAAsB,IAAI,EAMtDmX,EAAgB3W,cACpB,MAAO4W,EAAc,GAAOpY,IAAyB,CACnD,GAAI,CAAC4G,GAAsBA,EAAmB,OAAS,MAAO,CAC5D9B,EAAY,EAAE,EACdiT,EAAoB,EAAK,EACzB,MACF,CAGA,MAAMrS,EAAiBkB,EAAmB,GAEtCwR,IACFT,EAAmB,EAAI,EAEvB7S,EAAY,EAAE,GAEhB,GAAI,CACF,MAAMqH,EAAO,MAAMhN,GAAI,YACrB,CACE,KAAMyH,EAAmB,OAAS,UAAY,OAAS,OACvD,iBAAkBA,EAAmB,GACrC,MAAO0Q,EAAA,EAETtX,CAAA,EAKF,GAAIkY,EAA0B,UAAYxS,EAExC,OAGFZ,EAAYqH,CAAI,EAEhB6L,EAAmB,QAAQ,QAC3B,UAAWlW,KAAOqK,EAChB6L,EAAmB,QAAQ,IAAIT,GAAqBzV,CAAG,CAAC,EAG1DiW,EAAoB5L,EAAK,QAAUmL,EAAiB,CACtD,OAAShZ,EAAK,CAEZ,GAAIY,GAAaZ,CAAG,EAClB,OAEF,QAAQ,MAAM,4BAA6BA,CAAG,EAC9CkO,GAAM,MAAM,0BAA2B,CACrC,YAAalO,aAAe,MAAQA,EAAI,QAAU,wBACnD,CACH,SACM8Z,GACFT,EAAmB,EAAK,CAE5B,CACF,EACA,CAAC/Q,CAAkB,GAIfyR,EAAqB7W,cAAY,SAAY,CACjD,GACE,GAACoF,GACDA,EAAmB,OAAS,OAC5BgR,GACA,CAACE,GAIH,CAAAD,EAAgB,EAAI,EACpB,GAAI,CACF,MAAM1L,EAAO,MAAMhN,GAAI,YAAY,CACjC,KAAMyH,EAAmB,OAAS,UAAY,OAAS,OACvD,iBAAkBA,EAAmB,GACrC,MAAO0Q,GACP,OAAQG,EAAS,OAClB,EAED,GAAItL,EAAK,OAAS,EAAG,CAEnBrH,EAAaU,GAAS,CAAC,GAAGA,EAAM,GAAG2G,CAAI,CAAC,EAExC,UAAWrK,KAAOqK,EAChB6L,EAAmB,QAAQ,IAAIT,GAAqBzV,CAAG,CAAC,CAE5D,CAEAiW,EAAoB5L,EAAK,QAAUmL,EAAiB,CACtD,OAAShZ,EAAK,CACZ,QAAQ,MAAM,kCAAmCA,CAAG,EACpDkO,GAAM,MAAM,gCAAiC,CAC3C,YAAalO,aAAe,MAAQA,EAAI,QAAU,wBACnD,CACH,SACEuZ,EAAgB,EAAK,CACvB,EACF,EAAG,CAACjR,EAAoBgR,EAAcE,EAAkBL,EAAS,MAAM,CAAC,EAGxEnW,YAAU,IAAM,CAUd,GARI2W,EAAmB,SACrBA,EAAmB,QAAQ,QAI7BC,EAA0B,SAAUtR,GAAA,YAAAA,EAAoB,KAAM,KAG1D,CAACA,GAAsBA,EAAmB,OAAS,MAAO,CAC5D9B,EAAY,EAAE,EACdiT,EAAoB,EAAK,EACzB,MACF,CAGA,MAAMO,EAAa,IAAI,gBACvB,OAAAL,EAAmB,QAAUK,EAG7BH,EAAc,GAAMG,EAAW,MAAM,EAG9B,IAAM,CACXA,EAAW,OACb,CAMF,EAAG,CAAC1R,GAAA,YAAAA,EAAoB,GAAIA,GAAA,YAAAA,EAAoB,IAAI,CAAC,EAIrD,MAAM2R,EAAkB/W,cAAaM,GAA0B,CAC7D,MAAM0W,EAAajB,GAAqBzV,CAAG,EAC3C,GAAIkW,EAAmB,QAAQ,IAAIQ,CAAU,EAC3C,eAAQ,MAAM,qCAAsCA,EAAW,MAAM,EAAG,EAAE,CAAC,EACpE,GAKT,GAHAR,EAAmB,QAAQ,IAAIQ,CAAU,EAGrCR,EAAmB,QAAQ,KAAO,IAAM,CAC1C,MAAMS,EAAU,MAAM,KAAKT,EAAmB,OAAO,EACrDA,EAAmB,QAAU,IAAI,IAAIS,EAAQ,MAAM,IAAI,CAAC,CAC1D,CAEA,OAAA3T,EAAaU,GACPA,EAAK,KAAMruB,GAAMA,EAAE,KAAO2qB,EAAI,EAAE,EAC3B0D,EAEF,CAAC,GAAGA,EAAM1D,CAAG,CACrB,EAEM,EACT,EAAG,EAAE,EAGC4W,EAAmBlX,cACvB,CAACmX,EAAmBC,EAAkBC,IAA0B,CAC9D/T,EAAaU,GAAS,CACpB,MAAMsT,EAAMtT,EAAK,UAAWruB,GAAMA,EAAE,KAAOwhC,CAAS,EACpD,GAAIG,GAAO,EAAG,CACZ,MAAMpO,EAAU,CAAC,GAAGlF,CAAI,EACxB,OAAAkF,EAAQoO,CAAG,EAAI,CACb,GAAGtT,EAAKsT,CAAG,EACX,MAAOF,EACP,GAAIC,IAAU,QAAa,CAAE,MAAAA,CAAA,CAAM,EAE9BnO,CACT,CACA,OAAOlF,CACT,CAAC,CACH,EACA,EAAC,EAGH,MAAO,CACL,SAAAiS,EACA,gBAAAC,EACA,aAAAE,EACA,iBAAAE,EACA,YAAAhT,EACA,cAAAqT,EACA,mBAAAE,EACA,gBAAAE,EACA,iBAAAG,CAAA,CAEJ,CC3OA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOA,MAAMK,GAAeC,GAAWA,EAAO,QAAQ,qBAAsB,OAAO,EAAE,YAAW,EACnFC,GAAeD,GAAWA,EAAO,QACrC,wBACA,CAACE,EAAOC,EAAIC,IAAOA,EAAKA,EAAG,YAAW,EAAKD,EAAG,YAAW,CAC3D,EACME,GAAgBL,GAAW,CAC/B,MAAMM,EAAYL,GAAYD,CAAM,EACpC,OAAOM,EAAU,OAAO,CAAC,EAAE,YAAW,EAAKA,EAAU,MAAM,CAAC,CAC9D,EACMC,GAAe,IAAIlL,IAAYA,EAAQ,OAAO,CAAC9C,EAAWW,EAAOsN,IAC9D,EAAQjO,GAAcA,EAAU,KAAI,IAAO,IAAMiO,EAAM,QAAQjO,CAAS,IAAMW,CACtF,EAAE,KAAK,GAAG,EAAE,KAAI,EACXuN,GAAe/K,GAAU,CAC7B,UAAWgL,KAAQhL,EACjB,GAAIgL,EAAK,WAAW,OAAO,GAAKA,IAAS,QAAUA,IAAS,QAC1D,MAAO,EAGb,ECzBA;AAAA;AAAA;AAAA;AAAA;AAAA,GAOA,IAAIC,GAAoB,CACtB,MAAO,6BACP,MAAO,GACP,OAAQ,GACR,QAAS,YACT,KAAM,OACN,OAAQ,eACR,YAAa,EACb,cAAe,QACf,eAAgB,OAClB,ECjBA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWA,MAAMC,GAAOC,aACX,CAAC,CACC,MAAAC,EAAQ,eACR,KAAAC,EAAO,GACP,YAAAC,EAAc,EACd,oBAAAC,EACA,UAAA1O,EAAY,GACZ,SAAA2O,EACA,SAAAC,EACA,GAAG7N,CACP,EAAKgJ,IAAQ8E,gBACT,MACA,CACE,IAAA9E,EACA,GAAGqE,GACH,MAAOI,EACP,OAAQA,EACR,OAAQD,EACR,YAAaG,EAAsB,OAAOD,CAAW,EAAI,GAAK,OAAOD,CAAI,EAAIC,EAC7E,UAAWT,GAAa,SAAUhO,CAAS,EAC3C,GAAG,CAAC2O,GAAY,CAACT,GAAYnN,CAAI,GAAK,CAAE,cAAe,MAAM,EAC7D,GAAGA,CACT,EACI,CACE,GAAG6N,EAAS,IAAI,CAAC,CAACE,EAAKC,CAAK,IAAMF,gBAAcC,EAAKC,CAAK,CAAC,EAC3D,GAAG,MAAM,QAAQJ,CAAQ,EAAIA,EAAW,CAACA,CAAQ,CACvD,CACA,CACA,ECvCA;AAAA;AAAA;AAAA;AAAA;AAAA,GAWA,MAAMK,GAAmB,CAACC,EAAUL,IAAa,CAC/C,MAAMM,EAAYZ,aAChB,CAAC,CAAE,UAAAtO,EAAW,GAAGmD,CAAK,EAAI4G,IAAQ8E,gBAAcR,GAAM,CACpD,IAAAtE,EACA,SAAA6E,EACA,UAAWZ,GACT,UAAUR,GAAYM,GAAamB,CAAQ,CAAC,CAAC,GAC7C,UAAUA,CAAQ,GAClBjP,CACR,EACM,GAAGmD,CACT,CAAK,CACL,EACE,OAAA+L,EAAU,YAAcpB,GAAamB,CAAQ,EACtCC,CACT,EC1BA;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMC,GAAa,CAAC,CAAC,OAAQ,CAAE,EAAG,kBAAmB,IAAK,QAAQ,CAAE,CAAC,EAC/DC,GAAQJ,GAAiB,QAASG,EAAU,ECVlD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,UAAW,IAAK,QAAQ,CAAE,EACxC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,EACzC,CAAC,OAAQ,CAAE,EAAG,WAAY,IAAK,QAAQ,CAAE,CAC3C,EACME,GAAOL,GAAiB,OAAQG,EAAU,ECdhD;AAAA;AAAA;AAAA;AAAA;AAAA,GASA,MAAMA,GAAa,CACjB,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,EAC3C,CAAC,OAAQ,CAAE,EAAG,aAAc,IAAK,QAAQ,CAAE,CAC7C,EACM3iC,GAAIwiC,GAAiB,IAAKG,EAAU,ECAnC,SAASG,GAAU,CAAE,OAAAC,EAAQ,OAAA1b,EAAQ,gBAAA2b,EAAiB,YAAAC,GAA+B,CAC1F,MAAM9Z,GAAY4Z,GAAA,YAAAA,EAAQ,kBAAmB,GACvC,CAACG,EAAcC,CAAe,EAAI9Z,WAAS,EAAK,EAEhD+Z,EAAkB,SAAY,CAClCD,EAAgB,EAAI,EACpB,GAAI,CACF,MAAMtO,EAAS,MAAMzN,GAAI,iBACrByN,EAAO,WACTJ,GAAM,QAAQ,cAAe,CAAE,YAAaI,EAAO,QAAS,CAEhE,OAAStO,EAAK,CACZkO,GAAM,MAAM,sBAAuB,CACjC,YAAalO,aAAe,MAAQA,EAAI,QAAU,mCACnD,CACH,SACE4c,EAAgB,EAAK,CACvB,CACF,EAEA,OACEE,OAAC,OAAI,UAAU,gFAEZ,UAAAJ,GACC5N,MAAC,UACC,QAAS4N,EACT,UAAU,yEACV,aAAW,YAEX,SAAA5N,MAACwN,GAAA,CAAK,UAAU,UAAU,IAI9BxN,MAAC,MAAG,UAAU,kCAAkC,sBAAU,EAE1DgO,OAAC,OAAI,UAAU,sCACb,UAAAhO,MAAC,OAAI,UAAW,wBAAwBlM,EAAY,eAAiB,WAAW,GAAI,QACnF,QAAK,UAAU,kCACb,SAAAA,EAAY,YAAc,eAC7B,GACF,EAEC9B,GACCgc,OAAC,OAAI,UAAU,gDACb,UAAAhO,MAAC,QAAK,UAAU,iBAAkB,SAAAhO,EAAO,MAAQ,UAAU,EAC3DgO,MAAC,QACC,UAAU,4DACV,QAAS,IAAM,CACb,UAAU,UAAU,UAAUhO,EAAO,UAAU,EAC/CoN,GAAM,QAAQ,oBAAoB,CACpC,EACA,MAAM,2BAEL,SAAApN,EAAO,WAAW,aAAY,EACjC,EACF,EAGD,CAAC8B,GACAkM,MAAC,UACC,QAAS+N,EACT,SAAUF,EACV,UAAU,kKAET,WAAe,kBAAoB,cAGxCG,OAAC,UACC,QAASL,EACT,UAAU,yGAEV,UAAA3N,MAAC,QAAK,KAAK,MAAM,aAAW,WAAW,cAEvC,EAAQ,IAAI,mBAEd,EACF,CAEJ,CC9EO,MAAMiO,GAAuB,GAM7B,SAASC,GAAgBxb,EAAqB,CACnD,OAAOA,EAAI,MAAM,EAAGub,EAAoB,CAC1C,CAwBO,SAASE,GAAsB7b,EAAiC8b,EAAwB,CAC7F,OAAO9b,GAAQ4b,GAAgBE,CAAM,CACvC,CCtCO,MAAM7Y,GAAwB,EAG/B8Y,GAAkB,CACtB,KAAM,KACN,WAAY,UACZ,UAAW,SACb,EAGA,SAASC,GAAWC,EAAqB,CACvC,IAAIC,EAAO,EACX,QAAS,EAAI,EAAG,EAAID,EAAI,OAAQ,IAAK,CACnC,MAAME,EAAOF,EAAI,WAAW,CAAC,EAC7BC,GAAQA,GAAQ,GAAKA,EAAOC,EAC5BD,EAAOA,EAAOA,CAChB,CACA,OAAO,KAAK,IAAIA,CAAI,CACtB,CAGA,MAAME,GACJ,mIASK,SAASC,GAAcrc,EAAqBD,EAA2B,CAC5E,GAAI,CAACC,EAEH,OAAOD,EAAU,MAAM,EAAG,CAAC,EAAE,cAI/B,MAAMuc,EAAatc,EAAK,MAAMoc,EAAU,EACxC,GAAIE,EACF,OAAOA,EAAW,CAAC,EAIrB,MAAMC,EAAUvc,EAAK,MAAM,WAAW,EACtC,GAAI,CAACuc,GAAWA,EAAQ,SAAW,EAEjC,OAAOxc,EAAU,MAAM,EAAG,CAAC,EAAE,cAI/B,MAAMyc,EAAaxc,EAAK,QAAQ,GAAG,EACnC,GAAIwc,IAAe,GAAI,CACrB,MAAMC,EAAcF,EAAQ,CAAC,EAEvBG,EAAa1c,EAAK,MAAMwc,EAAa,CAAC,EAAE,MAAM,UAAU,EAC9D,GAAIE,EACF,OAAQD,EAAcC,EAAW,CAAC,GAAG,aAEzC,CAGA,OAAOH,EAAQ,CAAC,EAAE,aACpB,CAMO,SAASI,GAAe5c,EAG7B,CACA,MAAMmc,EAAOF,GAAWjc,CAAS,EAG3B6c,EAAMV,EAAO,IAGbW,EAAa,IAAOX,GAAQ,GAAK,GAGjCY,EAAY,IAAOZ,GAAQ,IAAM,GAEjCa,EAAa,OAAOH,CAAG,KAAKC,CAAU,MAAMC,CAAS,KAKrDE,EAAYF,EAAY,GAAK,UAAY,UAE/C,MAAO,CAAE,WAAAC,EAAY,KAAMC,CAAA,CAC7B,CAMO,SAASC,GACdjd,EACAD,EACAmd,EAKA,CAEA,GAAIA,IAAgBja,GAClB,OAAO8Y,GAGT,MAAMnb,EAAOyb,GAAcrc,EAAMD,CAAS,EACpCod,EAASR,GAAe5c,CAAS,EAEvC,MAAO,CACL,KAAAa,EACA,WAAYuc,EAAO,WACnB,UAAWA,EAAO,KAEtB,CCxHO,SAASC,GAAc,CAAE,KAAApd,EAAM,UAAAD,EAAW,KAAAsa,EAAO,GAAI,YAAA6C,GAAmC,CAC7F,MAAMG,EAASJ,GAAiBjd,EAAMD,EAAWmd,CAAW,EAE5D,OACExP,MAAC,OACC,UAAU,wFACV,MAAO,CACL,gBAAiB2P,EAAO,WACxB,MAAOA,EAAO,UACd,MAAOhD,EACP,OAAQA,EACR,SAAUA,EAAO,KAGlB,SAAAgD,EAAO,MAGd,CChBA,MAAMC,GAAgB,uBAKf,SAASC,GACdC,EACAxc,EACAhe,EACS,CACT,OAAOw6B,EAAU,KAAMhmC,GAAMA,EAAE,OAASwpB,GAAQxpB,EAAE,KAAOwL,CAAE,CAC7D,CAKO,SAASy6B,IAAwC,CACtD,GAAI,CACF,MAAM/U,EAAS,aAAa,QAAQ4U,EAAa,EACjD,OAAO5U,EAAS,KAAK,MAAMA,CAAM,EAAI,EACvC,MAAQ,CACN,MAAO,EACT,CACF,CAKO,SAASgV,IAAmC,CACjD,GAAI,CACF,aAAa,WAAWJ,EAAa,CACvC,MAAQ,CAER,CACF,CC5CA,SAAS3nC,GAAEe,EAAE,CAAC,IAAId,EAAE4B,EAAEhC,EAAE,GAAG,GAAa,OAAOkB,GAAjB,UAA8B,OAAOA,GAAjB,SAAmBlB,GAAGkB,UAAoB,OAAOA,GAAjB,SAAmB,GAAG,MAAM,QAAQA,CAAC,EAAE,CAAC,IAAIinC,EAAEjnC,EAAE,OAAO,IAAId,EAAE,EAAEA,EAAE+nC,EAAE/nC,IAAIc,EAAEd,CAAC,IAAI4B,EAAE7B,GAAEe,EAAEd,CAAC,CAAC,KAAKJ,IAAIA,GAAG,KAAKA,GAAGgC,EAAE,KAAM,KAAIA,KAAKd,EAAEA,EAAEc,CAAC,IAAIhC,IAAIA,GAAG,KAAKA,GAAGgC,GAAG,OAAOhC,CAAC,CAAQ,SAASooC,IAAM,CAAC,QAAQlnC,EAAEd,EAAE4B,EAAE,EAAEhC,EAAE,GAAGmoC,EAAE,UAAU,OAAOnmC,EAAEmmC,EAAEnmC,KAAKd,EAAE,UAAUc,CAAC,KAAK5B,EAAED,GAAEe,CAAC,KAAKlB,IAAIA,GAAG,KAAKA,GAAGI,GAAG,OAAOJ,CAAC,CCG/W,MAAMqoC,GAAe,CAACC,EAAQC,IAAW,CAEvC,MAAMC,EAAgB,IAAI,MAAMF,EAAO,OAASC,EAAO,MAAM,EAC7D,QAASjU,EAAI,EAAGA,EAAIgU,EAAO,OAAQhU,IACjCkU,EAAclU,CAAC,EAAIgU,EAAOhU,CAAC,EAE7B,QAASA,EAAI,EAAGA,EAAIiU,EAAO,OAAQjU,IACjCkU,EAAcF,EAAO,OAAShU,CAAC,EAAIiU,EAAOjU,CAAC,EAE7C,OAAOkU,CACT,EAGMC,GAA6B,CAACC,EAAcC,KAAe,CAC/D,aAAAD,EACA,UAAAC,CACF,GAEMC,GAAwB,CAACC,EAAW,IAAI,IAAOC,EAAa,KAAMJ,KAAkB,CACxF,SAAAG,EACA,WAAAC,EACA,aAAAJ,CACF,GACMK,GAAuB,IACvBC,GAAkB,GAElBC,GAA4B,cAC5BC,GAAwBhf,GAAU,CACtC,MAAMif,EAAWC,GAAelf,CAAM,EAChC,CACJ,uBAAAmf,EACA,+BAAAC,CACJ,EAAMpf,EA2BJ,MAAO,CACL,gBA3BsBmM,GAAa,CACnC,GAAIA,EAAU,WAAW,GAAG,GAAKA,EAAU,SAAS,GAAG,EACrD,OAAOkT,GAA+BlT,CAAS,EAEjD,MAAMmT,EAAanT,EAAU,MAAM0S,EAAoB,EAEjDU,EAAaD,EAAW,CAAC,IAAM,IAAMA,EAAW,OAAS,EAAI,EAAI,EACvE,OAAOE,GAAkBF,EAAYC,EAAYN,CAAQ,CAC3D,EAoBE,4BAnBkC,CAACT,EAAciB,IAAuB,CACxE,GAAIA,EAAoB,CACtB,MAAMC,EAAoBN,EAA+BZ,CAAY,EAC/DmB,EAAgBR,EAAuBX,CAAY,EACzD,OAAIkB,EACEC,EAEKxB,GAAawB,EAAeD,CAAiB,EAG/CA,EAGFC,GAAiBb,EAC1B,CACA,OAAOK,EAAuBX,CAAY,GAAKM,EACjD,CAIF,CACA,EACMU,GAAoB,CAACF,EAAYC,EAAYK,IAAoB,CAErE,GADyBN,EAAW,OAASC,IACpB,EACvB,OAAOK,EAAgB,aAEzB,MAAMC,EAAmBP,EAAWC,CAAU,EACxCO,EAAsBF,EAAgB,SAAS,IAAIC,CAAgB,EACzE,GAAIC,EAAqB,CACvB,MAAMtS,EAASgS,GAAkBF,EAAYC,EAAa,EAAGO,CAAmB,EAChF,GAAItS,EAAQ,OAAOA,CACrB,CACA,MAAMoR,EAAagB,EAAgB,WACnC,GAAIhB,IAAe,KACjB,OAGF,MAAMmB,EAAYR,IAAe,EAAID,EAAW,KAAKT,EAAoB,EAAIS,EAAW,MAAMC,CAAU,EAAE,KAAKV,EAAoB,EAC7HmB,EAAmBpB,EAAW,OACpC,QAASxU,EAAI,EAAGA,EAAI4V,EAAkB5V,IAAK,CACzC,MAAM6V,EAAerB,EAAWxU,CAAC,EACjC,GAAI6V,EAAa,UAAUF,CAAS,EAClC,OAAOE,EAAa,YAExB,CAEF,EAMMZ,GAAiClT,GAAaA,EAAU,MAAM,EAAG,EAAE,EAAE,QAAQ,GAAG,IAAM,GAAK,QAAa,IAAM,CAClH,MAAM+T,EAAU/T,EAAU,MAAM,EAAG,EAAE,EAC/BgU,EAAaD,EAAQ,QAAQ,GAAG,EAChCE,EAAWF,EAAQ,MAAM,EAAGC,CAAU,EAC5C,OAAOC,EAAWrB,GAA4BqB,EAAW,MAC3D,GAAC,EAIKlB,GAAiBlf,GAAU,CAC/B,KAAM,CACJ,MAAAqW,EACA,YAAAgK,CACJ,EAAMrgB,EACJ,OAAOsgB,GAAmBD,EAAahK,CAAK,CAC9C,EAEMiK,GAAqB,CAACD,EAAahK,IAAU,CACjD,MAAM4I,EAAWP,GAAqB,EACtC,UAAWF,KAAgB6B,EAAa,CACtC,MAAME,EAAQF,EAAY7B,CAAY,EACtCgC,GAA0BD,EAAOtB,EAAUT,EAAcnI,CAAK,CAChE,CACA,OAAO4I,CACT,EACMuB,GAA4B,CAACC,EAAYb,EAAiBpB,EAAcnI,IAAU,CACtF,MAAMqK,EAAMD,EAAW,OACvB,QAASrW,EAAI,EAAGA,EAAIsW,EAAKtW,IAAK,CAC5B,MAAMuW,EAAkBF,EAAWrW,CAAC,EACpCwW,GAAuBD,EAAiBf,EAAiBpB,EAAcnI,CAAK,CAC9E,CACF,EAEMuK,GAAyB,CAACD,EAAiBf,EAAiBpB,EAAcnI,IAAU,CACxF,GAAI,OAAOsK,GAAoB,SAAU,CACvCE,GAAwBF,EAAiBf,EAAiBpB,CAAY,EACtE,MACF,CACA,GAAI,OAAOmC,GAAoB,WAAY,CACzCG,GAA0BH,EAAiBf,EAAiBpB,EAAcnI,CAAK,EAC/E,MACF,CACA0K,GAAwBJ,EAAiBf,EAAiBpB,EAAcnI,CAAK,CAC/E,EACMwK,GAA0B,CAACF,EAAiBf,EAAiBpB,IAAiB,CAClF,MAAMwC,EAAwBL,IAAoB,GAAKf,EAAkBqB,GAAQrB,EAAiBe,CAAe,EACjHK,EAAsB,aAAexC,CACvC,EACMsC,GAA4B,CAACH,EAAiBf,EAAiBpB,EAAcnI,IAAU,CAC3F,GAAI6K,GAAcP,CAAe,EAAG,CAClCH,GAA0BG,EAAgBtK,CAAK,EAAGuJ,EAAiBpB,EAAcnI,CAAK,EACtF,MACF,CACIuJ,EAAgB,aAAe,OACjCA,EAAgB,WAAa,IAE/BA,EAAgB,WAAW,KAAKrB,GAA2BC,EAAcmC,CAAe,CAAC,CAC3F,EACMI,GAA0B,CAACJ,EAAiBf,EAAiBpB,EAAcnI,IAAU,CACzF,MAAMgD,EAAU,OAAO,QAAQsH,CAAe,EACxCD,EAAMrH,EAAQ,OACpB,QAASjP,EAAI,EAAGA,EAAIsW,EAAKtW,IAAK,CAC5B,KAAM,CAAC1J,EAAKygB,CAAK,EAAI9H,EAAQjP,CAAC,EAC9BoW,GAA0BW,EAAOF,GAAQrB,EAAiBlf,CAAG,EAAG8d,EAAcnI,CAAK,CACrF,CACF,EACM4K,GAAU,CAACrB,EAAiBwB,IAAS,CACzC,IAAIld,EAAU0b,EACd,MAAMyB,EAAQD,EAAK,MAAMvC,EAAoB,EACvC6B,EAAMW,EAAM,OAClB,QAASjX,EAAI,EAAGA,EAAIsW,EAAKtW,IAAK,CAC5B,MAAMkX,EAAOD,EAAMjX,CAAC,EACpB,IAAIW,EAAO7G,EAAQ,SAAS,IAAIod,CAAI,EAC/BvW,IACHA,EAAO2T,GAAqB,EAC5Bxa,EAAQ,SAAS,IAAIod,EAAMvW,CAAI,GAEjC7G,EAAU6G,CACZ,CACA,OAAO7G,CACT,EAEMgd,GAAgBK,GAAQ,kBAAmBA,GAAQA,EAAK,gBAAkB,GAG1EC,GAAiBC,GAAgB,CACrC,GAAIA,EAAe,EACjB,MAAO,CACL,IAAK,OACL,IAAK,IAAM,CAAC,CAClB,EAEE,IAAIC,EAAY,EACZC,EAAQ,OAAO,OAAO,IAAI,EAC1BC,EAAgB,OAAO,OAAO,IAAI,EACtC,MAAMC,EAAS,CAACnhB,EAAKygB,IAAU,CAC7BQ,EAAMjhB,CAAG,EAAIygB,EACbO,IACIA,EAAYD,IACdC,EAAY,EACZE,EAAgBD,EAChBA,EAAQ,OAAO,OAAO,IAAI,EAE9B,EACA,MAAO,CACL,IAAIjhB,EAAK,CACP,IAAIygB,EAAQQ,EAAMjhB,CAAG,EACrB,GAAIygB,IAAU,OACZ,OAAOA,EAET,IAAKA,EAAQS,EAAclhB,CAAG,KAAO,OACnC,OAAAmhB,EAAOnhB,EAAKygB,CAAK,EACVA,CAEX,EACA,IAAIzgB,EAAKygB,EAAO,CACVzgB,KAAOihB,EACTA,EAAMjhB,CAAG,EAAIygB,EAEbU,EAAOnhB,EAAKygB,CAAK,CAErB,CACJ,CACA,EACMW,GAAqB,IACrBC,GAAqB,IACrBC,GAAkB,GAElBC,GAAqB,CAACC,EAAWC,EAAsBC,EAAeC,EAA8BC,KAAgB,CACxH,UAAAJ,EACA,qBAAAC,EACA,cAAAC,EACA,6BAAAC,EACA,WAAAC,CACF,GACMC,GAAuBviB,GAAU,CACrC,KAAM,CACJ,OAAA8V,EACA,2BAAA0M,CACJ,EAAMxiB,EAOJ,IAAIyiB,EAAiBtW,GAAa,CAEhC,MAAM+V,EAAY,GAClB,IAAIQ,EAAe,EACfC,EAAa,EACbC,EAAgB,EAChBC,EACJ,MAAMnC,EAAMvU,EAAU,OACtB,QAASW,EAAQ,EAAGA,EAAQ4T,EAAK5T,IAAS,CACxC,MAAMgW,EAAmB3W,EAAUW,CAAK,EACxC,GAAI4V,IAAiB,GAAKC,IAAe,EAAG,CAC1C,GAAIG,IAAqBf,GAAoB,CAC3CG,EAAU,KAAK/V,EAAU,MAAMyW,EAAe9V,CAAK,CAAC,EACpD8V,EAAgB9V,EAAQ,EACxB,QACF,CACA,GAAIgW,IAAqB,IAAK,CAC5BD,EAA0B/V,EAC1B,QACF,CACF,CACIgW,IAAqB,IAAKJ,IAAwBI,IAAqB,IAAKJ,IAAwBI,IAAqB,IAAKH,IAAsBG,IAAqB,KAAKH,GACpL,CACA,MAAMI,EAAqCb,EAAU,SAAW,EAAI/V,EAAYA,EAAU,MAAMyW,CAAa,EAE7G,IAAIR,EAAgBW,EAChBZ,EAAuB,GACvBY,EAAmC,SAASjB,EAAkB,GAChEM,EAAgBW,EAAmC,MAAM,EAAG,EAAE,EAC9DZ,EAAuB,IAMzBY,EAAmC,WAAWjB,EAAkB,IAC9DM,EAAgBW,EAAmC,MAAM,CAAC,EAC1DZ,EAAuB,IAEzB,MAAME,EAA+BQ,GAA2BA,EAA0BD,EAAgBC,EAA0BD,EAAgB,OACpJ,OAAOX,GAAmBC,EAAWC,EAAsBC,EAAeC,CAA4B,CACxG,EACA,GAAIvM,EAAQ,CACV,MAAMkN,EAAalN,EAASiM,GACtBkB,EAAyBR,EAC/BA,EAAiBtW,GAAaA,EAAU,WAAW6W,CAAU,EAAIC,EAAuB9W,EAAU,MAAM6W,EAAW,MAAM,CAAC,EAAIf,GAAmBD,GAAiB,GAAO7V,EAAW,OAAW,EAAI,CACrM,CACA,GAAIqW,EAA4B,CAC9B,MAAMS,EAAyBR,EAC/BA,EAAiBtW,GAAaqW,EAA2B,CACvD,UAAArW,EACA,eAAgB8W,CACtB,CAAK,CACH,CACA,OAAOR,CACT,EAOMS,GAAsBljB,GAAU,CAEpC,MAAMmjB,EAAkB,IAAI,IAE5B,OAAAnjB,EAAO,wBAAwB,QAAQ,CAACojB,EAAKtW,IAAU,CACrDqW,EAAgB,IAAIC,EAAK,IAAUtW,CAAK,CAC1C,CAAC,EACMoV,GAAa,CAClB,MAAM1U,EAAS,GACf,IAAI6V,EAAiB,GAErB,QAASjZ,EAAI,EAAGA,EAAI8X,EAAU,OAAQ9X,IAAK,CACzC,MAAMkZ,EAAWpB,EAAU9X,CAAC,EAEtBmZ,EAAcD,EAAS,CAAC,IAAM,IAC9BE,EAAmBL,EAAgB,IAAIG,CAAQ,EACjDC,GAAeC,GAEbH,EAAe,OAAS,IAC1BA,EAAe,KAAI,EACnB7V,EAAO,KAAK,GAAG6V,CAAc,EAC7BA,EAAiB,IAEnB7V,EAAO,KAAK8V,CAAQ,GAGpBD,EAAe,KAAKC,CAAQ,CAEhC,CAEA,OAAID,EAAe,OAAS,IAC1BA,EAAe,KAAI,EACnB7V,EAAO,KAAK,GAAG6V,CAAc,GAExB7V,CACT,CACF,EACMiW,GAAoBzjB,IAAW,CACnC,MAAOwhB,GAAexhB,EAAO,SAAS,EACtC,eAAgBuiB,GAAqBviB,CAAM,EAC3C,cAAekjB,GAAoBljB,CAAM,EACzC,GAAGgf,GAAsBhf,CAAM,CACjC,GACM0jB,GAAsB,MACtBC,GAAiB,CAACC,EAAWC,IAAgB,CACjD,KAAM,CACJ,eAAApB,EACA,gBAAAqB,EACA,4BAAAC,EACA,cAAAC,CACJ,EAAMH,EAQEI,EAAwB,GACxBhT,EAAa2S,EAAU,KAAI,EAAG,MAAMF,EAAmB,EAC7D,IAAIlW,EAAS,GACb,QAASV,EAAQmE,EAAW,OAAS,EAAGnE,GAAS,EAAGA,GAAS,EAAG,CAC9D,MAAMoX,EAAoBjT,EAAWnE,CAAK,EACpC,CACJ,WAAAwV,EACA,UAAAJ,EACA,qBAAAC,EACA,cAAAC,EACA,6BAAAC,CACN,EAAQI,EAAeyB,CAAiB,EACpC,GAAI5B,EAAY,CACd9U,EAAS0W,GAAqB1W,EAAO,OAAS,EAAI,IAAMA,EAASA,GACjE,QACF,CACA,IAAIiS,EAAqB,CAAC,CAAC4C,EACvB7D,EAAesF,EAAgBrE,EAAqB2C,EAAc,UAAU,EAAGC,CAA4B,EAAID,CAAa,EAChI,GAAI,CAAC5D,EAAc,CACjB,GAAI,CAACiB,EAAoB,CAEvBjS,EAAS0W,GAAqB1W,EAAO,OAAS,EAAI,IAAMA,EAASA,GACjE,QACF,CAEA,GADAgR,EAAesF,EAAgB1B,CAAa,EACxC,CAAC5D,EAAc,CAEjBhR,EAAS0W,GAAqB1W,EAAO,OAAS,EAAI,IAAMA,EAASA,GACjE,QACF,CACAiS,EAAqB,EACvB,CAEA,MAAM0E,EAAkBjC,EAAU,SAAW,EAAI,GAAKA,EAAU,SAAW,EAAIA,EAAU,CAAC,EAAI8B,EAAc9B,CAAS,EAAE,KAAK,GAAG,EACzHkC,EAAajC,EAAuBgC,EAAkBrC,GAAqBqC,EAC3EE,EAAUD,EAAa5F,EAC7B,GAAIyF,EAAsB,QAAQI,CAAO,EAAI,GAE3C,SAEFJ,EAAsB,KAAKI,CAAO,EAClC,MAAMC,EAAiBP,EAA4BvF,EAAciB,CAAkB,EACnF,QAASrV,EAAI,EAAGA,EAAIka,EAAe,OAAQ,EAAEla,EAAG,CAC9C,MAAMmW,EAAQ+D,EAAela,CAAC,EAC9B6Z,EAAsB,KAAKG,EAAa7D,CAAK,CAC/C,CAEA/S,EAAS0W,GAAqB1W,EAAO,OAAS,EAAI,IAAMA,EAASA,EACnE,CACA,OAAOA,CACT,EAWM+W,GAAS,IAAIC,IAAe,CAChC,IAAI1X,EAAQ,EACR2X,EACAC,EACA9K,EAAS,GACb,KAAO9M,EAAQ0X,EAAW,SACpBC,EAAWD,EAAW1X,GAAO,KAC3B4X,EAAgBC,GAAQF,CAAQ,KAClC7K,IAAWA,GAAU,KACrBA,GAAU8K,GAIhB,OAAO9K,CACT,EACM+K,GAAUC,GAAO,CAErB,GAAI,OAAOA,GAAQ,SACjB,OAAOA,EAET,IAAIF,EACA9K,EAAS,GACb,QAASjiC,EAAI,EAAGA,EAAIitC,EAAI,OAAQjtC,IAC1BitC,EAAIjtC,CAAC,IACH+sC,EAAgBC,GAAQC,EAAIjtC,CAAC,CAAC,KAChCiiC,IAAWA,GAAU,KACrBA,GAAU8K,GAIhB,OAAO9K,CACT,EACMiL,GAAsB,CAACC,KAAsBC,IAAqB,CACtE,IAAIlB,EACAmB,EACAC,EACAC,EACJ,MAAMC,EAAoBvB,GAAa,CACrC,MAAM5jB,EAAS+kB,EAAiB,OAAO,CAACK,EAAgBC,IAAwBA,EAAoBD,CAAc,EAAGN,GAAmB,EACxI,OAAAjB,EAAcJ,GAAkBzjB,CAAM,EACtCglB,EAAWnB,EAAY,MAAM,IAC7BoB,EAAWpB,EAAY,MAAM,IAC7BqB,EAAiBI,EACVA,EAAc1B,CAAS,CAChC,EACM0B,EAAgB1B,GAAa,CACjC,MAAM2B,EAAeP,EAASpB,CAAS,EACvC,GAAI2B,EACF,OAAOA,EAET,MAAM/X,EAASmW,GAAeC,EAAWC,CAAW,EACpD,OAAAoB,EAASrB,EAAWpW,CAAM,EACnBA,CACT,EACA,OAAA0X,EAAiBC,EACV,IAAIK,IAASN,EAAeX,GAAO,GAAGiB,CAAI,CAAC,CACpD,EACMC,GAAmB,GACnBC,GAAYhlB,GAAO,CACvB,MAAMilB,EAActP,GAASA,EAAM3V,CAAG,GAAK+kB,GAC3C,OAAAE,EAAY,cAAgB,GACrBA,CACT,EACMC,GAAsB,8BACtBC,GAAyB,8BACzBC,GAAgB,aAChBC,GAAkB,mCAClBC,GAAkB,4HAClBC,GAAqB,qDAErBC,GAAc,kEACdC,GAAa,+FACbC,GAAajF,GAAS2E,GAAc,KAAK3E,CAAK,EAC9CkF,GAAWlF,GAAS,CAAC,CAACA,GAAS,CAAC,OAAO,MAAM,OAAOA,CAAK,CAAC,EAC1DmF,GAAYnF,GAAS,CAAC,CAACA,GAAS,OAAO,UAAU,OAAOA,CAAK,CAAC,EAC9DoF,GAAYpF,GAASA,EAAM,SAAS,GAAG,GAAKkF,GAASlF,EAAM,MAAM,EAAG,EAAE,CAAC,EACvEqF,GAAerF,GAAS4E,GAAgB,KAAK5E,CAAK,EAClDsF,GAAQ,IAAM,GACdC,GAAevF,GAIrB6E,GAAgB,KAAK7E,CAAK,GAAK,CAAC8E,GAAmB,KAAK9E,CAAK,EACvDwF,GAAU,IAAM,GAChBC,GAAWzF,GAAS+E,GAAY,KAAK/E,CAAK,EAC1C0F,GAAU1F,GAASgF,GAAW,KAAKhF,CAAK,EACxC2F,GAAoB3F,GAAS,CAAC4F,GAAiB5F,CAAK,GAAK,CAAC6F,GAAoB7F,CAAK,EACnF8F,GAAkB9F,GAAS+F,GAAoB/F,EAAOgG,GAAaR,EAAO,EAC1EI,GAAmB5F,GAASyE,GAAoB,KAAKzE,CAAK,EAC1DiG,GAAoBjG,GAAS+F,GAAoB/F,EAAOkG,GAAeX,EAAY,EACnFY,GAAoBnG,GAAS+F,GAAoB/F,EAAOoG,GAAelB,EAAQ,EAC/EmB,GAAsBrG,GAAS+F,GAAoB/F,EAAOsG,GAAiBd,EAAO,EAClFe,GAAmBvG,GAAS+F,GAAoB/F,EAAOwG,GAAcd,EAAO,EAC5Ee,GAAoBzG,GAAS+F,GAAoB/F,EAAO0G,GAAejB,EAAQ,EAC/EI,GAAsB7F,GAAS0E,GAAuB,KAAK1E,CAAK,EAChE2G,GAA4B3G,GAAS4G,GAAuB5G,EAAOkG,EAAa,EAChFW,GAAgC7G,GAAS4G,GAAuB5G,EAAO8G,EAAiB,EACxFC,GAA8B/G,GAAS4G,GAAuB5G,EAAOsG,EAAe,EACpFU,GAA0BhH,GAAS4G,GAAuB5G,EAAOgG,EAAW,EAC5EiB,GAA2BjH,GAAS4G,GAAuB5G,EAAOwG,EAAY,EAC9EU,GAA4BlH,GAAS4G,GAAuB5G,EAAO0G,GAAe,EAAI,EAEtFX,GAAsB,CAAC/F,EAAOmH,EAAWC,IAAc,CAC3D,MAAM/a,EAASoY,GAAoB,KAAKzE,CAAK,EAC7C,OAAI3T,EACEA,EAAO,CAAC,EACH8a,EAAU9a,EAAO,CAAC,CAAC,EAErB+a,EAAU/a,EAAO,CAAC,CAAC,EAErB,EACT,EACMua,GAAyB,CAAC5G,EAAOmH,EAAWE,EAAqB,KAAU,CAC/E,MAAMhb,EAASqY,GAAuB,KAAK1E,CAAK,EAChD,OAAI3T,EACEA,EAAO,CAAC,EACH8a,EAAU9a,EAAO,CAAC,CAAC,EAErBgb,EAEF,EACT,EAEMf,GAAkBgB,GAASA,IAAU,YAAcA,IAAU,aAC7Dd,GAAec,GAASA,IAAU,SAAWA,IAAU,MACvDtB,GAAcsB,GAASA,IAAU,UAAYA,IAAU,QAAUA,IAAU,UAC3EpB,GAAgBoB,GAASA,IAAU,SACnClB,GAAgBkB,GAASA,IAAU,SACnCR,GAAoBQ,GAASA,IAAU,cACvCZ,GAAgBY,GAASA,IAAU,SA2BnCC,GAAmB,IAAM,CAM7B,MAAMC,EAAajD,GAAU,OAAO,EAC9BkD,EAAYlD,GAAU,MAAM,EAC5BmD,EAAYnD,GAAU,MAAM,EAC5BoD,EAAkBpD,GAAU,aAAa,EACzCqD,EAAgBrD,GAAU,UAAU,EACpCsD,EAAetD,GAAU,SAAS,EAClCuD,EAAkBvD,GAAU,YAAY,EACxCwD,EAAiBxD,GAAU,WAAW,EACtCyD,EAAezD,GAAU,SAAS,EAClC0D,EAAc1D,GAAU,QAAQ,EAChC2D,EAAc3D,GAAU,QAAQ,EAChC4D,EAAmB5D,GAAU,cAAc,EAC3C6D,EAAkB7D,GAAU,aAAa,EACzC8D,EAAkB9D,GAAU,aAAa,EACzC+D,EAAY/D,GAAU,MAAM,EAC5BgE,EAAmBhE,GAAU,aAAa,EAC1CiE,EAAcjE,GAAU,QAAQ,EAChCkE,EAAYlE,GAAU,MAAM,EAC5BmE,EAAenE,GAAU,SAAS,EAQlCoE,EAAa,IAAM,CAAC,OAAQ,QAAS,MAAO,aAAc,OAAQ,OAAQ,QAAS,QAAQ,EAC3FC,EAAgB,IAAM,CAAC,SAAU,MAAO,SAAU,OAAQ,QAAS,WAEzE,WAAY,YAEZ,YAAa,eAEb,eAAgB,cAEhB,aAAa,EACPC,EAA6B,IAAM,CAAC,GAAGD,EAAa,EAAI/C,GAAqBD,EAAgB,EAC7FkD,EAAgB,IAAM,CAAC,OAAQ,SAAU,OAAQ,UAAW,QAAQ,EACpEC,EAAkB,IAAM,CAAC,OAAQ,UAAW,MAAM,EAClDC,EAA0B,IAAM,CAACnD,GAAqBD,GAAkBoC,CAAY,EACpFiB,EAAa,IAAM,CAAChE,GAAY,OAAQ,OAAQ,GAAG+D,GAAyB,EAC5EE,EAA4B,IAAM,CAAC/D,GAAW,OAAQ,UAAWU,GAAqBD,EAAgB,EACtGuD,EAA6B,IAAM,CAAC,OAAQ,CAChD,KAAM,CAAC,OAAQhE,GAAWU,GAAqBD,EAAgB,CACnE,EAAKT,GAAWU,GAAqBD,EAAgB,EAC7CwD,GAA4B,IAAM,CAACjE,GAAW,OAAQU,GAAqBD,EAAgB,EAC3FyD,EAAwB,IAAM,CAAC,OAAQ,MAAO,MAAO,KAAMxD,GAAqBD,EAAgB,EAChG0D,EAAwB,IAAM,CAAC,QAAS,MAAO,SAAU,UAAW,SAAU,SAAU,UAAW,WAAY,cAAe,UAAU,EACxIC,GAA0B,IAAM,CAAC,QAAS,MAAO,SAAU,UAAW,cAAe,UAAU,EAC/FC,GAAc,IAAM,CAAC,OAAQ,GAAGR,EAAuB,CAAE,EACzDS,GAAc,IAAM,CAACxE,GAAY,OAAQ,OAAQ,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,GAAG+D,GAAyB,EAC5IU,EAAa,IAAM,CAAClC,EAAY3B,GAAqBD,EAAgB,EACrE+D,GAAkB,IAAM,CAAC,GAAGf,EAAa,EAAI7B,GAA6BV,GAAqB,CACnG,SAAU,CAACR,GAAqBD,EAAgB,CACpD,CAAG,EACKgE,EAAgB,IAAM,CAAC,YAAa,CACxC,OAAQ,CAAC,GAAI,IAAK,IAAK,QAAS,OAAO,CAC3C,CAAG,EACKC,EAAc,IAAM,CAAC,OAAQ,QAAS,UAAW7C,GAAyBlB,GAAiB,CAC/F,KAAM,CAACD,GAAqBD,EAAgB,CAChD,CAAG,EACKkE,EAA4B,IAAM,CAAC1E,GAAWuB,GAA2BV,EAAiB,EAC1F8D,EAAc,IAAM,CAE1B,GAAI,OAAQ,OAAQ9B,EAAapC,GAAqBD,EAAgB,EAChEoE,EAAmB,IAAM,CAAC,GAAI9E,GAAUyB,GAA2BV,EAAiB,EACpFgE,GAAiB,IAAM,CAAC,QAAS,SAAU,SAAU,QAAQ,EAC7DC,GAAiB,IAAM,CAAC,SAAU,WAAY,SAAU,UAAW,SAAU,UAAW,cAAe,aAAc,aAAc,aAAc,aAAc,YAAa,MAAO,aAAc,QAAS,YAAY,EACtNC,GAAyB,IAAM,CAACjF,GAAUE,GAAW2B,GAA6BV,EAAmB,EACrG+D,GAAY,IAAM,CAExB,GAAI,OAAQ9B,EAAWzC,GAAqBD,EAAgB,EACtDyE,GAAc,IAAM,CAAC,OAAQnF,GAAUW,GAAqBD,EAAgB,EAC5E0E,GAAa,IAAM,CAAC,OAAQpF,GAAUW,GAAqBD,EAAgB,EAC3E2E,GAAY,IAAM,CAACrF,GAAUW,GAAqBD,EAAgB,EAClE4E,GAAiB,IAAM,CAACvF,GAAY,OAAQ,GAAG+D,EAAuB,CAAE,EAC9E,MAAO,CACL,UAAW,IACX,MAAO,CACL,QAAS,CAAC,OAAQ,OAAQ,QAAS,QAAQ,EAC3C,OAAQ,CAAC,OAAO,EAChB,KAAM,CAAC3D,EAAY,EACnB,WAAY,CAACA,EAAY,EACzB,MAAO,CAACC,EAAK,EACb,UAAW,CAACD,EAAY,EACxB,cAAe,CAACA,EAAY,EAC5B,KAAM,CAAC,KAAM,MAAO,QAAQ,EAC5B,KAAM,CAACM,EAAiB,EACxB,cAAe,CAAC,OAAQ,aAAc,QAAS,SAAU,SAAU,WAAY,OAAQ,YAAa,OAAO,EAC3G,eAAgB,CAACN,EAAY,EAC7B,QAAS,CAAC,OAAQ,QAAS,OAAQ,SAAU,UAAW,OAAO,EAC/D,YAAa,CAAC,WAAY,OAAQ,SAAU,WAAY,UAAW,MAAM,EACzE,OAAQ,CAACA,EAAY,EACrB,OAAQ,CAACA,EAAY,EACrB,QAAS,CAAC,KAAMH,EAAQ,EACxB,KAAM,CAACG,EAAY,EACnB,cAAe,CAACA,EAAY,EAC5B,SAAU,CAAC,UAAW,QAAS,SAAU,OAAQ,QAAS,QAAQ,CACxE,EACI,YAAa,CAQX,OAAQ,CAAC,CACP,OAAQ,CAAC,OAAQ,SAAUJ,GAAYW,GAAkBC,GAAqB2C,CAAW,CACjG,CAAO,EAMD,UAAW,CAAC,WAAW,EAKvB,QAAS,CAAC,CACR,QAAS,CAACtD,GAAUU,GAAkBC,GAAqBkC,CAAc,CACjF,CAAO,EAKD,cAAe,CAAC,CACd,cAAeY,EAAU,CACjC,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgBA,EAAU,CAClC,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgB,CAAC,OAAQ,QAAS,aAAc,cAAc,CACtE,CAAO,EAKD,iBAAkB,CAAC,CACjB,iBAAkB,CAAC,QAAS,OAAO,CAC3C,CAAO,EAKD,IAAK,CAAC,CACJ,IAAK,CAAC,SAAU,SAAS,CACjC,CAAO,EAKD,QAAS,CAAC,QAAS,eAAgB,SAAU,OAAQ,cAAe,QAAS,eAAgB,gBAAiB,aAAc,eAAgB,qBAAsB,qBAAsB,qBAAsB,kBAAmB,YAAa,YAAa,OAAQ,cAAe,WAAY,YAAa,QAAQ,EAKnT,GAAI,CAAC,UAAW,aAAa,EAK7B,MAAO,CAAC,CACN,MAAO,CAAC,QAAS,OAAQ,OAAQ,QAAS,KAAK,CACvD,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAAC,OAAQ,QAAS,OAAQ,OAAQ,QAAS,KAAK,CAC/D,CAAO,EAKD,UAAW,CAAC,UAAW,gBAAgB,EAKvC,aAAc,CAAC,CACb,OAAQ,CAAC,UAAW,QAAS,OAAQ,OAAQ,YAAY,CACjE,CAAO,EAKD,kBAAmB,CAAC,CAClB,OAAQE,EAA0B,CAC1C,CAAO,EAKD,SAAU,CAAC,CACT,SAAUC,EAAa,CAC/B,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAa,CACnC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAa,CACnC,CAAO,EAKD,WAAY,CAAC,CACX,WAAYC,EAAe,CACnC,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgBA,EAAe,CACvC,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgBA,EAAe,CACvC,CAAO,EAKD,SAAU,CAAC,SAAU,QAAS,WAAY,WAAY,QAAQ,EAK9D,MAAO,CAAC,CACN,MAAOE,EAAU,CACzB,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,EAAU,CAC7B,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,EAAU,CAC7B,CAAO,EAKD,MAAO,CAAC,CACN,MAAOA,EAAU,CACzB,CAAO,EAKD,IAAK,CAAC,CACJ,IAAKA,EAAU,CACvB,CAAO,EAKD,IAAK,CAAC,CACJ,IAAKA,EAAU,CACvB,CAAO,EAKD,MAAO,CAAC,CACN,MAAOA,EAAU,CACzB,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQA,EAAU,CAC1B,CAAO,EAKD,KAAM,CAAC,CACL,KAAMA,EAAU,CACxB,CAAO,EAKD,WAAY,CAAC,UAAW,YAAa,UAAU,EAK/C,EAAG,CAAC,CACF,EAAG,CAAC9D,GAAW,OAAQU,GAAqBD,EAAgB,CACpE,CAAO,EAQD,MAAO,CAAC,CACN,MAAO,CAACX,GAAY,OAAQ,OAAQ8C,EAAgB,GAAGiB,EAAuB,CAAE,CACxF,CAAO,EAKD,iBAAkB,CAAC,CACjB,KAAM,CAAC,MAAO,cAAe,MAAO,aAAa,CACzD,CAAO,EAKD,YAAa,CAAC,CACZ,KAAM,CAAC,SAAU,OAAQ,cAAc,CAC/C,CAAO,EAKD,KAAM,CAAC,CACL,KAAM,CAAC9D,GAAUD,GAAY,OAAQ,UAAW,OAAQW,EAAgB,CAChF,CAAO,EAKD,KAAM,CAAC,CACL,KAAM,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CAClE,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQ,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CACpE,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAACT,GAAW,QAAS,OAAQ,OAAQU,GAAqBD,EAAgB,CACzF,CAAO,EAKD,YAAa,CAAC,CACZ,YAAasD,EAAyB,CAC9C,CAAO,EAKD,gBAAiB,CAAC,CAChB,IAAKC,EAA0B,CACvC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaC,GAAyB,CAC9C,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,GAAyB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaF,EAAyB,CAC9C,CAAO,EAKD,gBAAiB,CAAC,CAChB,IAAKC,EAA0B,CACvC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaC,GAAyB,CAC9C,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,GAAyB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC,MAAO,MAAO,QAAS,YAAa,WAAW,CACrE,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaC,EAAqB,CAC1C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAqB,CAC1C,CAAO,EAKD,IAAK,CAAC,CACJ,IAAKL,EAAuB,CACpC,CAAO,EAKD,QAAS,CAAC,CACR,QAASA,EAAuB,CACxC,CAAO,EAKD,QAAS,CAAC,CACR,QAASA,EAAuB,CACxC,CAAO,EAKD,kBAAmB,CAAC,CAClB,QAAS,CAAC,GAAGM,EAAqB,EAAI,QAAQ,CACtD,CAAO,EAKD,gBAAiB,CAAC,CAChB,gBAAiB,CAAC,GAAGC,GAAuB,EAAI,QAAQ,CAChE,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgB,CAAC,OAAQ,GAAGA,GAAuB,CAAE,CAC7D,CAAO,EAKD,gBAAiB,CAAC,CAChB,QAAS,CAAC,SAAU,GAAGD,EAAqB,CAAE,CACtD,CAAO,EAKD,cAAe,CAAC,CACd,MAAO,CAAC,GAAGC,KAA2B,CACpC,SAAU,CAAC,GAAI,MAAM,CAC/B,CAAS,CACT,CAAO,EAKD,aAAc,CAAC,CACb,KAAM,CAAC,OAAQ,GAAGA,KAA2B,CAC3C,SAAU,CAAC,GAAI,MAAM,CAC/B,CAAS,CACT,CAAO,EAKD,gBAAiB,CAAC,CAChB,gBAAiBD,EAAqB,CAC9C,CAAO,EAKD,cAAe,CAAC,CACd,cAAe,CAAC,GAAGC,GAAuB,EAAI,UAAU,CAChE,CAAO,EAKD,aAAc,CAAC,CACb,aAAc,CAAC,OAAQ,GAAGA,GAAuB,CAAE,CAC3D,CAAO,EAMD,EAAG,CAAC,CACF,EAAGP,EAAuB,CAClC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,EAAuB,CACnC,CAAO,EAKD,EAAG,CAAC,CACF,EAAGQ,GAAW,CACtB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,GAAI,CAAC,CACH,GAAIA,GAAW,CACvB,CAAO,EAKD,UAAW,CAAC,CACV,UAAWR,EAAuB,CAC1C,CAAO,EAKD,kBAAmB,CAAC,iBAAiB,EAKrC,UAAW,CAAC,CACV,UAAWA,EAAuB,CAC1C,CAAO,EAKD,kBAAmB,CAAC,iBAAiB,EAQrC,KAAM,CAAC,CACL,KAAMS,GAAW,CACzB,CAAO,EAKD,EAAG,CAAC,CACF,EAAG,CAAC1B,EAAgB,SAAU,GAAG0B,GAAW,CAAE,CACtD,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC1B,EAAgB,SAC1B,OAAQ,GAAG0B,GAAW,CAAE,CAChC,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC1B,EAAgB,SAAU,OACpC,QACA,CACE,OAAQ,CAACD,CAAe,CAClC,EAAW,GAAG2B,GAAW,CAAE,CAC3B,CAAO,EAKD,EAAG,CAAC,CACF,EAAG,CAAC,SAAU,KAAM,GAAGA,GAAW,CAAE,CAC5C,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,SAAU,KAAM,OAAQ,GAAGA,GAAW,CAAE,CAC1D,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,SAAU,KAAM,GAAGA,GAAW,CAAE,CAClD,CAAO,EAQD,YAAa,CAAC,CACZ,KAAM,CAAC,OAAQ/B,EAAWf,GAA2BV,EAAiB,CAC9E,CAAO,EAKD,iBAAkB,CAAC,cAAe,sBAAsB,EAKxD,aAAc,CAAC,SAAU,YAAY,EAKrC,cAAe,CAAC,CACd,KAAM,CAAC0B,EAAiB9B,GAAqBM,EAAiB,CACtE,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgB,CAAC,kBAAmB,kBAAmB,YAAa,iBAAkB,SAAU,gBAAiB,WAAY,iBAAkB,iBAAkBf,GAAWQ,EAAgB,CACpM,CAAO,EAKD,cAAe,CAAC,CACd,KAAM,CAACiB,GAA+BjB,GAAkB6B,CAAS,CACzE,CAAO,EAKD,aAAc,CAAC,aAAa,EAK5B,cAAe,CAAC,SAAS,EAKzB,mBAAoB,CAAC,cAAc,EAKnC,aAAc,CAAC,cAAe,eAAe,EAK7C,cAAe,CAAC,oBAAqB,cAAc,EAKnD,eAAgB,CAAC,qBAAsB,mBAAmB,EAK1D,SAAU,CAAC,CACT,SAAU,CAACG,EAAe/B,GAAqBD,EAAgB,CACvE,CAAO,EAKD,aAAc,CAAC,CACb,aAAc,CAACV,GAAU,OAAQW,GAAqBM,EAAiB,CAC/E,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CACT0B,EAAc,GAAGmB,EAAuB,CAAE,CAClD,CAAO,EAKD,aAAc,CAAC,CACb,aAAc,CAAC,OAAQnD,GAAqBD,EAAgB,CACpE,CAAO,EAKD,sBAAuB,CAAC,CACtB,KAAM,CAAC,SAAU,SAAS,CAClC,CAAO,EAKD,kBAAmB,CAAC,CAClB,KAAM,CAAC,OAAQ,UAAW,OAAQC,GAAqBD,EAAgB,CAC/E,CAAO,EAKD,iBAAkB,CAAC,CACjB,KAAM,CAAC,OAAQ,SAAU,QAAS,UAAW,QAAS,KAAK,CACnE,CAAO,EAMD,oBAAqB,CAAC,CACpB,YAAa8D,EAAU,CAC/B,CAAO,EAKD,aAAc,CAAC,CACb,KAAMA,EAAU,CACxB,CAAO,EAKD,kBAAmB,CAAC,YAAa,WAAY,eAAgB,cAAc,EAK3E,wBAAyB,CAAC,CACxB,WAAY,CAAC,GAAGO,GAAc,EAAI,MAAM,CAChD,CAAO,EAKD,4BAA6B,CAAC,CAC5B,WAAY,CAAC/E,GAAU,YAAa,OAAQW,GAAqBI,EAAiB,CAC1F,CAAO,EAKD,wBAAyB,CAAC,CACxB,WAAYyD,EAAU,CAC9B,CAAO,EAKD,mBAAoB,CAAC,CACnB,mBAAoB,CAACxE,GAAU,OAAQW,GAAqBD,EAAgB,CACpF,CAAO,EAKD,iBAAkB,CAAC,YAAa,YAAa,aAAc,aAAa,EAKxE,gBAAiB,CAAC,WAAY,gBAAiB,WAAW,EAK1D,YAAa,CAAC,CACZ,KAAM,CAAC,OAAQ,SAAU,UAAW,QAAQ,CACpD,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQoD,EAAuB,CACvC,CAAO,EAKD,iBAAkB,CAAC,CACjB,MAAO,CAAC,WAAY,MAAO,SAAU,SAAU,WAAY,cAAe,MAAO,QAASnD,GAAqBD,EAAgB,CACvI,CAAO,EAKD,WAAY,CAAC,CACX,WAAY,CAAC,SAAU,SAAU,MAAO,WAAY,WAAY,cAAc,CACtF,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAAC,SAAU,QAAS,MAAO,MAAM,CAChD,CAAO,EAKD,KAAM,CAAC,CACL,KAAM,CAAC,aAAc,WAAY,QAAQ,CACjD,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,OAAQ,SAAU,MAAM,CAC1C,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,OAAQC,GAAqBD,EAAgB,CAC/D,CAAO,EAQD,gBAAiB,CAAC,CAChB,GAAI,CAAC,QAAS,QAAS,QAAQ,CACvC,CAAO,EAKD,UAAW,CAAC,CACV,UAAW,CAAC,SAAU,UAAW,UAAW,MAAM,CAC1D,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC,SAAU,UAAW,SAAS,CACpD,CAAO,EAKD,cAAe,CAAC,CACd,GAAI+D,GAAe,CAC3B,CAAO,EAKD,YAAa,CAAC,CACZ,GAAIC,EAAa,CACzB,CAAO,EAKD,UAAW,CAAC,CACV,GAAIC,EAAW,CACvB,CAAO,EAKD,WAAY,CAAC,CACX,GAAI,CAAC,OAAQ,CACX,OAAQ,CAAC,CACP,GAAI,CAAC,IAAK,KAAM,IAAK,KAAM,IAAK,KAAM,IAAK,IAAI,CAC3D,EAAa1E,GAAWU,GAAqBD,EAAgB,EACnD,OAAQ,CAAC,GAAIC,GAAqBD,EAAgB,EAClD,MAAO,CAACT,GAAWU,GAAqBD,EAAgB,CAClE,EAAWqB,GAA0BV,EAAgB,CACrD,CAAO,EAKD,WAAY,CAAC,CACX,GAAImD,EAAU,CACtB,CAAO,EAKD,oBAAqB,CAAC,CACpB,KAAMI,EAAyB,CACvC,CAAO,EAKD,mBAAoB,CAAC,CACnB,IAAKA,EAAyB,CACtC,CAAO,EAKD,kBAAmB,CAAC,CAClB,GAAIA,EAAyB,CACrC,CAAO,EAKD,gBAAiB,CAAC,CAChB,KAAMJ,EAAU,CACxB,CAAO,EAKD,eAAgB,CAAC,CACf,IAAKA,EAAU,CACvB,CAAO,EAKD,cAAe,CAAC,CACd,GAAIA,EAAU,CACtB,CAAO,EAQD,QAAS,CAAC,CACR,QAASK,EAAW,CAC5B,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAW,CAChC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,aAAc,CAAC,CACb,aAAcA,EAAW,CACjC,CAAO,EAKD,WAAY,CAAC,CACX,OAAQC,EAAgB,CAChC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,aAAc,CAAC,CACb,WAAYA,EAAgB,CACpC,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,EAAgB,CACpC,CAAO,EAKD,mBAAoB,CAAC,kBAAkB,EAKvC,WAAY,CAAC,CACX,WAAYA,EAAgB,CACpC,CAAO,EAKD,mBAAoB,CAAC,kBAAkB,EAKvC,eAAgB,CAAC,CACf,OAAQ,CAAC,GAAGC,GAAc,EAAI,SAAU,MAAM,CACtD,CAAO,EAKD,eAAgB,CAAC,CACf,OAAQ,CAAC,GAAGA,GAAc,EAAI,SAAU,MAAM,CACtD,CAAO,EAKD,eAAgB,CAAC,CACf,OAAQP,EAAU,CAC1B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,iBAAkB,CAAC,CACjB,WAAYA,EAAU,CAC9B,CAAO,EAKD,eAAgB,CAAC,CACf,OAAQA,EAAU,CAC1B,CAAO,EAKD,gBAAiB,CAAC,CAChB,QAAS,CAAC,GAAGO,GAAc,EAAI,OAAQ,QAAQ,CACvD,CAAO,EAKD,iBAAkB,CAAC,CACjB,iBAAkB,CAAC/E,GAAUW,GAAqBD,EAAgB,CAC1E,CAAO,EAKD,YAAa,CAAC,CACZ,QAAS,CAAC,GAAIV,GAAUyB,GAA2BV,EAAiB,CAC5E,CAAO,EAKD,gBAAiB,CAAC,CAChB,QAASyD,EAAU,CAC3B,CAAO,EAQD,OAAQ,CAAC,CACP,OAAQ,CAER,GAAI,OAAQxB,EAAahB,GAA2BT,EAAiB,CAC7E,CAAO,EAKD,eAAgB,CAAC,CACf,OAAQiD,EAAU,CAC1B,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgB,CAAC,OAAQvB,EAAkBjB,GAA2BT,EAAiB,CAC/F,CAAO,EAKD,qBAAsB,CAAC,CACrB,eAAgBiD,EAAU,CAClC,CAAO,EAKD,SAAU,CAAC,CACT,KAAMM,EAAgB,CAC9B,CAAO,EAOD,eAAgB,CAAC,YAAY,EAK7B,aAAc,CAAC,CACb,KAAMN,EAAU,CACxB,CAAO,EAOD,gBAAiB,CAAC,CAChB,cAAe,CAACxE,GAAUe,EAAiB,CACnD,CAAO,EAOD,oBAAqB,CAAC,CACpB,cAAeyD,EAAU,CACjC,CAAO,EAKD,eAAgB,CAAC,CACf,aAAcM,EAAgB,CACtC,CAAO,EAKD,mBAAoB,CAAC,CACnB,aAAcN,EAAU,CAChC,CAAO,EAKD,cAAe,CAAC,CACd,cAAe,CAAC,OAAQtB,EAAiBlB,GAA2BT,EAAiB,CAC7F,CAAO,EAKD,oBAAqB,CAAC,CACpB,cAAeiD,EAAU,CACjC,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAACxE,GAAUW,GAAqBD,EAAgB,CACjE,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC,GAAGsE,GAAc,EAAI,cAAe,cAAc,CACxE,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,GAAc,CAClC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC,SAAU,UAAW,UAAW,OAAQ,SAAU,MAAM,CAC9E,EAAS,cAAc,EAKjB,iBAAkB,CAAC,CACjB,KAAM,CAAC,MAAO,WAAY,YAAa,SAAS,CACxD,CAAO,EAKD,wBAAyB,CAAC,CACxB,cAAe,CAAChF,EAAQ,CAChC,CAAO,EACD,6BAA8B,CAAC,CAC7B,mBAAoBiF,GAAsB,CAClD,CAAO,EACD,2BAA4B,CAAC,CAC3B,iBAAkBA,GAAsB,CAChD,CAAO,EACD,+BAAgC,CAAC,CAC/B,mBAAoBT,EAAU,CACtC,CAAO,EACD,6BAA8B,CAAC,CAC7B,iBAAkBA,EAAU,CACpC,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,wBAAyB,CAAC,CACxB,cAAeS,GAAsB,CAC7C,CAAO,EACD,sBAAuB,CAAC,CACtB,YAAaA,GAAsB,CAC3C,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAeT,EAAU,CACjC,CAAO,EACD,wBAAyB,CAAC,CACxB,YAAaA,EAAU,CAC/B,CAAO,EACD,oBAAqB,CAAC,CACpB,cAAe,CAAC7D,GAAqBD,EAAgB,CAC7D,CAAO,EACD,6BAA8B,CAAC,CAC7B,mBAAoBuE,GAAsB,CAClD,CAAO,EACD,2BAA4B,CAAC,CAC3B,iBAAkBA,GAAsB,CAChD,CAAO,EACD,+BAAgC,CAAC,CAC/B,mBAAoBT,EAAU,CACtC,CAAO,EACD,6BAA8B,CAAC,CAC7B,iBAAkBA,EAAU,CACpC,CAAO,EACD,0BAA2B,CAAC,CAC1B,cAAe,CAAC,SAAU,SAAS,CAC3C,CAAO,EACD,yBAA0B,CAAC,CACzB,cAAe,CAAC,CACd,QAAS,CAAC,OAAQ,QAAQ,EAC1B,SAAU,CAAC,OAAQ,QAAQ,CACrC,CAAS,CACT,CAAO,EACD,wBAAyB,CAAC,CACxB,iBAAkBd,EAAa,CACvC,CAAO,EACD,uBAAwB,CAAC,CACvB,aAAc,CAAC1D,EAAQ,CAC/B,CAAO,EACD,4BAA6B,CAAC,CAC5B,kBAAmBiF,GAAsB,CACjD,CAAO,EACD,0BAA2B,CAAC,CAC1B,gBAAiBA,GAAsB,CAC/C,CAAO,EACD,8BAA+B,CAAC,CAC9B,kBAAmBT,EAAU,CACrC,CAAO,EACD,4BAA6B,CAAC,CAC5B,gBAAiBA,EAAU,CACnC,CAAO,EAKD,YAAa,CAAC,CACZ,KAAM,CAAC,QAAS,YAAa,OAAO,CAC5C,CAAO,EAKD,cAAe,CAAC,CACd,cAAe,CAAC,SAAU,UAAW,UAAW,OAAQ,SAAU,MAAM,CAChF,CAAO,EAKD,gBAAiB,CAAC,CAChB,KAAMC,GAAe,CAC7B,CAAO,EAKD,cAAe,CAAC,CACd,KAAMC,EAAa,CAC3B,CAAO,EAKD,YAAa,CAAC,CACZ,KAAMC,EAAW,CACzB,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC,QAAS,WAAW,CAC1C,CAAO,EAKD,aAAc,CAAC,CACb,KAAM,CAAC,OAAQhE,GAAqBD,EAAgB,CAC5D,CAAO,EAQD,OAAQ,CAAC,CACP,OAAQ,CAER,GAAI,OAAQC,GAAqBD,EAAgB,CACzD,CAAO,EAKD,KAAM,CAAC,CACL,KAAMwE,GAAS,CACvB,CAAO,EAKD,WAAY,CAAC,CACX,WAAY,CAAClF,GAAUW,GAAqBD,EAAgB,CACpE,CAAO,EAKD,SAAU,CAAC,CACT,SAAU,CAACV,GAAUW,GAAqBD,EAAgB,CAClE,CAAO,EAKD,cAAe,CAAC,CACd,cAAe,CAEf,GAAI,OAAQyC,EAAiBnB,GAA2BT,EAAiB,CACjF,CAAO,EAKD,oBAAqB,CAAC,CACpB,cAAeiD,EAAU,CACjC,CAAO,EAKD,UAAW,CAAC,CACV,UAAW,CAAC,GAAIxE,GAAUW,GAAqBD,EAAgB,CACvE,CAAO,EAKD,aAAc,CAAC,CACb,aAAc,CAACV,GAAUW,GAAqBD,EAAgB,CACtE,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQ,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CACpE,CAAO,EAKD,SAAU,CAAC,CACT,SAAU,CAACV,GAAUW,GAAqBD,EAAgB,CAClE,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CACnE,CAAO,EAKD,kBAAmB,CAAC,CAClB,kBAAmB,CAEnB,GAAI,OAAQC,GAAqBD,EAAgB,CACzD,CAAO,EAKD,gBAAiB,CAAC,CAChB,gBAAiBwE,GAAS,CAClC,CAAO,EAKD,sBAAuB,CAAC,CACtB,sBAAuB,CAAClF,GAAUW,GAAqBD,EAAgB,CAC/E,CAAO,EAKD,oBAAqB,CAAC,CACpB,oBAAqB,CAACV,GAAUW,GAAqBD,EAAgB,CAC7E,CAAO,EAKD,qBAAsB,CAAC,CACrB,qBAAsB,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CAClF,CAAO,EAKD,sBAAuB,CAAC,CACtB,sBAAuB,CAACV,GAAUW,GAAqBD,EAAgB,CAC/E,CAAO,EAKD,kBAAmB,CAAC,CAClB,kBAAmB,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CAC/E,CAAO,EAKD,mBAAoB,CAAC,CACnB,mBAAoB,CAACV,GAAUW,GAAqBD,EAAgB,CAC5E,CAAO,EAKD,oBAAqB,CAAC,CACpB,oBAAqB,CAACV,GAAUW,GAAqBD,EAAgB,CAC7E,CAAO,EAKD,iBAAkB,CAAC,CACjB,iBAAkB,CAAC,GAAIV,GAAUW,GAAqBD,EAAgB,CAC9E,CAAO,EAQD,kBAAmB,CAAC,CAClB,OAAQ,CAAC,WAAY,UAAU,CACvC,CAAO,EAKD,iBAAkB,CAAC,CACjB,iBAAkBoD,EAAuB,CACjD,CAAO,EAKD,mBAAoB,CAAC,CACnB,mBAAoBA,EAAuB,CACnD,CAAO,EAKD,mBAAoB,CAAC,CACnB,mBAAoBA,EAAuB,CACnD,CAAO,EAKD,eAAgB,CAAC,CACf,MAAO,CAAC,OAAQ,OAAO,CAC/B,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,MAAO,QAAQ,CACjC,CAAO,EAQD,WAAY,CAAC,CACX,WAAY,CAAC,GAAI,MAAO,SAAU,UAAW,SAAU,YAAa,OAAQnD,GAAqBD,EAAgB,CACzH,CAAO,EAKD,sBAAuB,CAAC,CACtB,WAAY,CAAC,SAAU,UAAU,CACzC,CAAO,EAKD,SAAU,CAAC,CACT,SAAU,CAACV,GAAU,UAAWW,GAAqBD,EAAgB,CAC7E,CAAO,EAKD,KAAM,CAAC,CACL,KAAM,CAAC,SAAU,UAAW6C,EAAW5C,GAAqBD,EAAgB,CACpF,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAACV,GAAUW,GAAqBD,EAAgB,CAC/D,CAAO,EAKD,QAAS,CAAC,CACR,QAAS,CAAC,OAAQ8C,EAAc7C,GAAqBD,EAAgB,CAC7E,CAAO,EAQD,SAAU,CAAC,CACT,SAAU,CAAC,SAAU,SAAS,CACtC,CAAO,EAKD,YAAa,CAAC,CACZ,YAAa,CAAC2C,EAAkB1C,GAAqBD,EAAgB,CAC7E,CAAO,EAKD,qBAAsB,CAAC,CACrB,qBAAsBiD,EAA0B,CACxD,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQwB,GAAW,CAC3B,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,GAAW,CAC/B,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,GAAW,CAC/B,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,GAAW,CAC/B,CAAO,EAKD,MAAO,CAAC,CACN,MAAOC,GAAU,CACzB,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,GAAU,CAC7B,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,GAAU,CAC7B,CAAO,EAKD,UAAW,CAAC,CACV,UAAWA,GAAU,CAC7B,CAAO,EAKD,WAAY,CAAC,UAAU,EAKvB,KAAM,CAAC,CACL,KAAMC,GAAS,CACvB,CAAO,EAKD,SAAU,CAAC,CACT,SAAUA,GAAS,CAC3B,CAAO,EAKD,SAAU,CAAC,CACT,SAAUA,GAAS,CAC3B,CAAO,EAKD,UAAW,CAAC,CACV,UAAW,CAAC1E,GAAqBD,GAAkB,GAAI,OAAQ,MAAO,KAAK,CACnF,CAAO,EAKD,mBAAoB,CAAC,CACnB,OAAQiD,EAA0B,CAC1C,CAAO,EAKD,kBAAmB,CAAC,CAClB,UAAW,CAAC,KAAM,MAAM,CAChC,CAAO,EAKD,UAAW,CAAC,CACV,UAAW2B,GAAc,CACjC,CAAO,EAKD,cAAe,CAAC,CACd,cAAeA,GAAc,CACrC,CAAO,EAKD,cAAe,CAAC,CACd,cAAeA,GAAc,CACrC,CAAO,EAKD,cAAe,CAAC,CACd,cAAeA,GAAc,CACrC,CAAO,EAKD,iBAAkB,CAAC,gBAAgB,EAQnC,OAAQ,CAAC,CACP,OAAQd,EAAU,CAC1B,CAAO,EAKD,WAAY,CAAC,CACX,WAAY,CAAC,OAAQ,MAAM,CACnC,CAAO,EAKD,cAAe,CAAC,CACd,MAAOA,EAAU,CACzB,CAAO,EAKD,eAAgB,CAAC,CACf,OAAQ,CAAC,SAAU,OAAQ,QAAS,aAAc,YAAa,YAAY,CACnF,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQ,CAAC,OAAQ,UAAW,UAAW,OAAQ,OAAQ,OAAQ,OAAQ,cAAe,OAAQ,eAAgB,WAAY,OAAQ,YAAa,gBAAiB,QAAS,OAAQ,UAAW,OAAQ,WAAY,aAAc,aAAc,aAAc,WAAY,WAAY,WAAY,WAAY,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,cAAe,cAAe,UAAW,WAAY7D,GAAqBD,EAAgB,CAC1d,CAAO,EAKD,eAAgB,CAAC,CACf,eAAgB,CAAC,QAAS,SAAS,CAC3C,CAAO,EAKD,iBAAkB,CAAC,CACjB,iBAAkB,CAAC,OAAQ,MAAM,CACzC,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQ,CAAC,OAAQ,GAAI,IAAK,GAAG,CACrC,CAAO,EAKD,kBAAmB,CAAC,CAClB,OAAQ,CAAC,OAAQ,QAAQ,CACjC,CAAO,EAKD,WAAY,CAAC,CACX,WAAYoD,EAAuB,CAC3C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,WAAY,CAAC,CACX,WAAYA,EAAuB,CAC3C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,YAAa,CAAC,CACZ,YAAaA,EAAuB,CAC5C,CAAO,EAKD,aAAc,CAAC,CACb,KAAM,CAAC,QAAS,MAAO,SAAU,YAAY,CACrD,CAAO,EAKD,YAAa,CAAC,CACZ,KAAM,CAAC,SAAU,QAAQ,CACjC,CAAO,EAKD,YAAa,CAAC,CACZ,KAAM,CAAC,OAAQ,IAAK,IAAK,MAAM,CACvC,CAAO,EAKD,kBAAmB,CAAC,CAClB,KAAM,CAAC,YAAa,WAAW,CACvC,CAAO,EAKD,MAAO,CAAC,CACN,MAAO,CAAC,OAAQ,OAAQ,cAAc,CAC9C,CAAO,EAKD,UAAW,CAAC,CACV,YAAa,CAAC,IAAK,OAAQ,OAAO,CAC1C,CAAO,EAKD,UAAW,CAAC,CACV,YAAa,CAAC,IAAK,KAAM,MAAM,CACvC,CAAO,EAKD,WAAY,CAAC,kBAAkB,EAK/B,OAAQ,CAAC,CACP,OAAQ,CAAC,OAAQ,OAAQ,MAAO,MAAM,CAC9C,CAAO,EAKD,cAAe,CAAC,CACd,cAAe,CAAC,OAAQ,SAAU,WAAY,YAAanD,GAAqBD,EAAgB,CACxG,CAAO,EAQD,KAAM,CAAC,CACL,KAAM,CAAC,OAAQ,GAAG8D,EAAU,CAAE,CACtC,CAAO,EAKD,WAAY,CAAC,CACX,OAAQ,CAACxE,GAAUyB,GAA2BV,GAAmBE,EAAiB,CAC1F,CAAO,EAKD,OAAQ,CAAC,CACP,OAAQ,CAAC,OAAQ,GAAGuD,EAAU,CAAE,CACxC,CAAO,EAQD,sBAAuB,CAAC,CACtB,sBAAuB,CAAC,OAAQ,MAAM,CAC9C,CAAO,CACP,EACI,uBAAwB,CACtB,SAAU,CAAC,aAAc,YAAY,EACrC,WAAY,CAAC,eAAgB,cAAc,EAC3C,MAAO,CAAC,UAAW,UAAW,QAAS,MAAO,MAAO,QAAS,SAAU,MAAM,EAC9E,UAAW,CAAC,QAAS,MAAM,EAC3B,UAAW,CAAC,MAAO,QAAQ,EAC3B,KAAM,CAAC,QAAS,OAAQ,QAAQ,EAChC,IAAK,CAAC,QAAS,OAAO,EACtB,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAClD,GAAI,CAAC,KAAM,IAAI,EACf,GAAI,CAAC,KAAM,IAAI,EACf,EAAG,CAAC,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAI,EAClD,GAAI,CAAC,KAAM,IAAI,EACf,GAAI,CAAC,KAAM,IAAI,EACf,KAAM,CAAC,IAAK,GAAG,EACf,YAAa,CAAC,SAAS,EACvB,aAAc,CAAC,cAAe,mBAAoB,aAAc,cAAe,cAAc,EAC7F,cAAe,CAAC,YAAY,EAC5B,mBAAoB,CAAC,YAAY,EACjC,aAAc,CAAC,YAAY,EAC3B,cAAe,CAAC,YAAY,EAC5B,eAAgB,CAAC,YAAY,EAC7B,aAAc,CAAC,UAAW,UAAU,EACpC,QAAS,CAAC,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,YAAY,EACtM,YAAa,CAAC,aAAc,YAAY,EACxC,YAAa,CAAC,aAAc,YAAY,EACxC,YAAa,CAAC,aAAc,YAAY,EACxC,YAAa,CAAC,aAAc,YAAY,EACxC,YAAa,CAAC,aAAc,YAAY,EACxC,YAAa,CAAC,aAAc,YAAY,EACxC,iBAAkB,CAAC,mBAAoB,kBAAkB,EACzD,WAAY,CAAC,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,aAAc,YAAY,EAC3H,aAAc,CAAC,aAAc,YAAY,EACzC,aAAc,CAAC,aAAc,YAAY,EACzC,eAAgB,CAAC,iBAAkB,iBAAkB,iBAAkB,iBAAkB,iBAAkB,iBAAkB,iBAAkB,gBAAgB,EAC/J,iBAAkB,CAAC,iBAAkB,gBAAgB,EACrD,iBAAkB,CAAC,iBAAkB,gBAAgB,EACrD,UAAW,CAAC,cAAe,cAAe,gBAAgB,EAC1D,iBAAkB,CAAC,YAAa,cAAe,cAAe,aAAa,EAC3E,WAAY,CAAC,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,WAAW,EACnH,YAAa,CAAC,YAAa,WAAW,EACtC,YAAa,CAAC,YAAa,WAAW,EACtC,WAAY,CAAC,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,YAAa,WAAW,EACnH,YAAa,CAAC,YAAa,WAAW,EACtC,YAAa,CAAC,YAAa,WAAW,EACtC,MAAO,CAAC,UAAW,UAAW,UAAU,EACxC,UAAW,CAAC,OAAO,EACnB,UAAW,CAAC,OAAO,EACnB,WAAY,CAAC,OAAO,CAC1B,EACI,+BAAgC,CAC9B,YAAa,CAAC,SAAS,CAC7B,EACI,wBAAyB,CAAC,IAAK,KAAM,QAAS,WAAY,SAAU,kBAAmB,OAAQ,eAAgB,aAAc,SAAU,cAAe,WAAW,CACrK,CACA,EAsDMe,GAAuB/G,GAAoB6D,EAAgB,ECpiG1D,SAAS1Z,MAAM6c,EAAsB,CAC1C,OAAOD,GAAQ1N,GAAK2N,CAAM,CAAC,CAC7B,CCDA,MAAMC,GAAQC,aACZ,CAAC,CAAE,UAAA5f,EAAW,KAAA7K,EAAM,GAAGgO,CAAA,EAAS4G,IAE5BlI,MAAC,SACC,KAAA1M,EACA,UAAW0N,GACT,iYACA7C,CAAA,EAEF,IAAA+J,EACC,GAAG5G,CAAA,EAIZ,EACAwc,GAAM,YAAc,QCjBpB,SAASE,GAAO9V,EAAKiL,EAAO,CAC1B,GAAI,OAAOjL,GAAQ,WACjB,OAAOA,EAAIiL,CAAK,EACPjL,GAAQ,OACjBA,EAAI,QAAUiL,EAElB,CACA,SAAS8K,MAAeC,EAAM,CAC5B,OAAQC,GAAS,CACf,IAAIC,EAAa,GACjB,MAAMC,EAAWH,EAAK,IAAKhW,GAAQ,CACjC,MAAMoW,EAAUN,GAAO9V,EAAKiW,CAAI,EAChC,MAAI,CAACC,GAAc,OAAOE,GAAW,aACnCF,EAAa,IAERE,CACT,CAAC,EACD,GAAIF,EACF,MAAO,IAAM,CACX,QAAShiB,EAAI,EAAGA,EAAIiiB,EAAS,OAAQjiB,IAAK,CACxC,MAAMkiB,EAAUD,EAASjiB,CAAC,EACtB,OAAOkiB,GAAW,WACpBA,EAAO,EAEPN,GAAOE,EAAK9hB,CAAC,EAAG,IAAI,CAExB,CACF,CAEJ,CACF,CACA,SAASmiB,MAAmBL,EAAM,CAChC,OAAOM,cAAkBP,GAAY,GAAGC,CAAI,EAAGA,CAAI,CACrD,CC/BA,IAAIO,GAAkB,OAAO,IAAI,YAAY,EACzCC,GAAMtgB,GAAM,QAAQ,KAAI,EAAG,SAAQ,CAAE,EACzC,SAASugB,GAAcxL,EAAO,CAC5B,OAAO,OAAOA,GAAU,UAAYA,IAAU,MAAQ,SAAUA,CAClE,CACA,SAASyL,GAAgBC,EAAS,CAChC,OAAOA,GAAW,MAAQ,OAAOA,GAAY,UAAY,aAAcA,GAAWA,EAAQ,WAAaJ,IAAmB,aAAcI,GAAWF,GAAcE,EAAQ,QAAQ,CACnL,CAEA,SAASC,GAAWC,EAAW,CAC7B,MAAMC,EAA4BC,GAAgBF,CAAS,EACrDG,EAAQnB,aAAiB,CAACzc,EAAO6d,IAAiB,CACtD,GAAI,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EAC7Bsd,GAAgB9R,CAAQ,GAAK,OAAO4R,IAAQ,aAC9C5R,EAAW4R,GAAI5R,EAAS,QAAQ,GAElC,MAAMuS,EAAgBC,WAAe,QAAQxS,CAAQ,EAC/CyS,EAAYF,EAAc,KAAKG,EAAW,EAChD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAC7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,WAAe,MAAMG,CAAU,EAAI,EAAUH,WAAe,KAAK,IAAI,EAClEM,iBAAqBH,CAAU,EAAIA,EAAW,MAAM,SAAW,KAE/DE,CAEV,EACD,OAAuB3f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAUS,iBAAqBH,CAAU,EAAII,eAAmBJ,EAAY,OAAQC,CAAW,EAAI,KAAM,CACpL,CACA,OAAuB1f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAArS,EAAU,CACrF,CAAC,EACD,OAAAoS,EAAM,YAAc,GAAGH,CAAS,QACzBG,CACT,CACA,IAAIY,GAAuBhB,GAAW,MAAM,EAE5C,SAASG,GAAgBF,EAAW,CAClC,MAAMC,EAAYjB,aAAiB,CAACzc,EAAO6d,IAAiB,CAC1D,GAAI,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EAIjC,GAHIsd,GAAgB9R,CAAQ,GAAK,OAAO4R,IAAQ,aAC9C5R,EAAW4R,GAAI5R,EAAS,QAAQ,GAE9B8S,iBAAqB9S,CAAQ,EAAG,CAClC,MAAMiT,EAAcC,GAAclT,CAAQ,EACpCmT,EAASC,GAAWd,EAAWtS,EAAS,KAAK,EACnD,OAAIA,EAAS,OAASqT,aACpBF,EAAO,IAAMd,EAAelB,GAAYkB,EAAcY,CAAW,EAAIA,GAEhEF,eAAmB/S,EAAUmT,CAAM,CAC5C,CACA,OAAOX,WAAe,MAAMxS,CAAQ,EAAI,EAAIwS,WAAe,KAAK,IAAI,EAAI,IAC1E,CAAC,EACD,OAAAN,EAAU,YAAc,GAAGD,CAAS,aAC7BC,CACT,CACA,IAAIoB,GAAuB,OAAO,iBAAiB,EAWnD,SAASZ,GAAYG,EAAO,CAC1B,OAAOC,iBAAqBD,CAAK,GAAK,OAAOA,EAAM,MAAS,YAAc,cAAeA,EAAM,MAAQA,EAAM,KAAK,YAAcS,EAClI,CACA,SAASF,GAAWd,EAAWiB,EAAY,CACzC,MAAMC,EAAgB,CAAE,GAAGD,CAAU,EACrC,UAAWE,KAAYF,EAAY,CACjC,MAAMG,EAAgBpB,EAAUmB,CAAQ,EAClCE,EAAiBJ,EAAWE,CAAQ,EACxB,WAAW,KAAKA,CAAQ,EAEpCC,GAAiBC,EACnBH,EAAcC,CAAQ,EAAI,IAAI/I,IAAS,CACrC,MAAMhY,EAASihB,EAAe,GAAGjJ,CAAI,EACrC,OAAAgJ,EAAc,GAAGhJ,CAAI,EACdhY,CACT,EACSghB,IACTF,EAAcC,CAAQ,EAAIC,GAEnBD,IAAa,QACtBD,EAAcC,CAAQ,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAc,EACtDF,IAAa,cACtBD,EAAcC,CAAQ,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtF,CACA,MAAO,CAAE,GAAGrB,EAAW,GAAGkB,CAAa,CACzC,CACA,SAASN,GAAcnB,EAAS,SAC9B,IAAI6B,GAAS9rB,EAAA,OAAO,yBAAyBiqB,EAAQ,MAAO,KAAK,IAApD,YAAAjqB,EAAuD,IAChE+rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACK9B,EAAQ,KAEjB6B,GAAS7rB,EAAA,OAAO,yBAAyBgqB,EAAS,KAAK,IAA9C,YAAAhqB,EAAiD,IAC1D8rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACK9B,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CC/FA,MAAM+B,GAAiBzN,GAAQ,OAAOA,GAAU,UAAY,GAAGA,CAAK,GAAKA,IAAU,EAAI,IAAMA,EAChF0N,GAAK3Q,GACL4Q,GAAM,CAACC,EAAM/uB,IAAUsP,GAAQ,CACpC,IAAI0f,EACJ,IAAKhvB,GAAW,KAA4B,OAASA,EAAO,WAAa,KAAM,OAAO6uB,GAAGE,EAAMzf,GAAU,KAA2B,OAASA,EAAM,MAAOA,GAAU,KAA2B,OAASA,EAAM,SAAS,EACvN,KAAM,CAAE,SAAA2f,EAAU,gBAAAC,CAAe,EAAKlvB,EAChCmvB,EAAuB,OAAO,KAAKF,CAAQ,EAAE,IAAKG,GAAU,CAC9D,MAAMC,EAAc/f,GAAU,KAA2B,OAASA,EAAM8f,CAAO,EACzEE,EAAqBJ,GAAoB,KAAqC,OAASA,EAAgBE,CAAO,EACpH,GAAIC,IAAgB,KAAM,OAAO,KACjC,MAAME,EAAaX,GAAcS,CAAW,GAAKT,GAAcU,CAAkB,EACjF,OAAOL,EAASG,CAAO,EAAEG,CAAU,CACvC,CAAC,EACKC,EAAwBlgB,GAAS,OAAO,QAAQA,CAAK,EAAE,OAAO,CAACmgB,EAAKC,IAAQ,CAC9E,GAAI,CAAChvB,EAAKygB,CAAK,EAAIuO,EACnB,OAAIvO,IAAU,SAGdsO,EAAI/uB,CAAG,EAAIygB,GACJsO,CACX,EAAG,EAAE,EACCE,EAA+B3vB,GAAW,OAAsCgvB,EAA2BhvB,EAAO,oBAAsB,MAAQgvB,IAA6B,OAAvG,OAAyHA,EAAyB,OAAO,CAACS,EAAKC,IAAQ,CAC/O,GAAI,CAAE,MAAOE,EAAS,UAAWC,EAAa,GAAGC,CAAsB,EAAKJ,EAC5E,OAAO,OAAO,QAAQI,CAAsB,EAAE,MAAOJ,GAAQ,CACzD,GAAI,CAAChvB,EAAKygB,CAAK,EAAIuO,EACnB,OAAO,MAAM,QAAQvO,CAAK,EAAIA,EAAM,SAAS,CACzC,GAAG+N,EACH,GAAGM,CACvB,EAAkB9uB,CAAG,CAAC,EAAK,CACP,GAAGwuB,EACH,GAAGM,CACvB,EAAmB9uB,CAAG,IAAMygB,CAChB,CAAC,EAAI,CACD,GAAGsO,EACHG,EACAC,CAChB,EAAgBJ,CACR,EAAG,EAAE,EACL,OAAOZ,GAAGE,EAAMI,EAAsBQ,EAA8BrgB,GAAU,KAA2B,OAASA,EAAM,MAAOA,GAAU,KAA2B,OAASA,EAAM,SAAS,CAChM,EChDEygB,GAAiBjB,GACrB,yRACA,CACE,SAAU,CACR,QAAS,CACP,QAAS,yDACT,YAAa,qEACb,QAAS,iFACT,UAAW,+DACX,MAAO,+CACP,KAAM,mDAER,KAAM,CACJ,QAAS,iBACT,GAAI,sBACJ,GAAI,uBACJ,KAAM,YACR,EAEF,gBAAiB,CACf,QAAS,UACT,KAAM,UACR,CAEJ,EAOMkB,GAASjE,aACb,CAAC,CAAE,UAAA5f,EAAW,QAAAijB,EAAS,KAAAzU,EAAM,QAAAsV,EAAU,GAAO,GAAG3gB,CAAA,EAAS4G,IAAQ,CAChE,MAAMga,EAAOD,EAAUnC,GAAO,SAC9B,OACE9f,MAACkiB,EAAA,CAAK,UAAWlhB,GAAG+gB,GAAe,CAAE,QAAAX,EAAS,KAAAzU,EAAM,UAAAxO,CAAA,CAAW,CAAC,EAAG,IAAA+J,EAAW,GAAG5G,CAAA,CAAO,CAE5F,CACF,EACA0gB,GAAO,YAAc,SCTrB,SAASG,GAAkBC,EAAuB,CAChD,OAAOA,GAAS9wB,GAAqB,GAAG8wB,CAAK,IAAM,GAAGA,CAAK,EAC7D,CAEO,SAASC,GAAQ,CACtB,SAAA5oB,EACA,SAAA6B,EACA,mBAAA9B,EACA,qBAAA8oB,EACA,aAAAC,EACA,iBAAA3mB,EACA,aAAAJ,EACA,SAAAE,EACA,YAAA8mB,EACA,eAAAC,EACA,gBAAAC,EACA,cAAAC,EACA,UAAA7S,EACA,UAAW8S,EAAgB,SAC3B,kBAAAC,CACF,EAAiB,CACf,MAAMC,EAAYF,EACZ,CAACG,EAAaC,CAAc,EAAIhvB,WAAS,EAAE,EAE3CivB,EAAmB,IAAM,CAC7B,MAAMC,EAAWJ,IAAc,QAAU,SAAW,QACpDD,GAAA,MAAAA,EAAoBK,EACtB,EAEMC,EAA4BC,GAA+B,CAC/DJ,EAAe,EAAE,EACjBV,EAAqBc,CAAY,CACnC,EAEMC,EAAW,CAAC/vB,EAA4Dhe,KAC5EkkB,GAAA,YAAAA,EAAoB,QAASlG,IAAQkG,GAAA,YAAAA,EAAoB,MAAOlkB,EAG5DguC,EAAiB,CAAChwB,EAA6Bhe,IAAuB,CAC1E,MAAMod,EAAMoI,GAAYxH,EAAMhe,CAAE,EAChC,OAAOkmB,EAAa9I,CAAG,GAAK,CAC9B,EAGMuK,EAAa,CAAC3J,EAA6Bhe,IAAwB,CACvE,MAAMod,EAAMoI,GAAYxH,EAAMhe,CAAE,EAChC,OAAOomB,EAAShJ,CAAG,GAAK,EAC1B,EAEM6wB,EAAqB,CAACjwB,EAA6Bhe,IAAe,CACtE,MAAMod,EAAMoI,GAAYxH,EAAMhe,CAAE,EAChC,OAAOsmB,EAAiBlJ,CAAG,GAAK,CAClC,EAGM8wB,EAAiBloB,EAAS,OAAkB,CAACmmB,EAAK/kB,KACjD+kB,EAAI,KAAM/3C,GAAMA,EAAE,OAASgzB,EAAQ,IAAI,GAC1C+kB,EAAI,KAAK/kB,CAAO,EAEX+kB,GACN,EAAE,EAICgC,EAAiBhqB,EACpB,OAAQ/vB,GAAMA,EAAE,YAAcA,EAAE,WAAW,OAAS,CAAC,EACrD,KAAK,CAAChB,EAAGK,IAEJL,EAAE,MAAQ,CAACK,EAAE,KAAa,GAC1B,CAACL,EAAE,MAAQK,EAAE,KAAa,GACtBL,EAAE,MAAQ,IAAI,cAAcK,EAAE,MAAQ,EAAE,CACjD,EACA,OAAkB,CAAC04C,EAAK3nB,KAClB2nB,EAAI,KAAM/3C,GAAMA,EAAE,aAAeowB,EAAQ,UAAU,GACtD2nB,EAAI,KAAK3nB,CAAO,EAEX2nB,GACN,EAAE,EAGDiC,EAAiB,CAAC,GAAGF,CAAc,EAAE,KAAK,CAAC96C,EAAGK,IAAM,CAExD,GAAIL,EAAE,OAAS,SAAU,MAAO,GAChC,GAAIK,EAAE,OAAS,SAAU,MAAO,GAEhC,GAAI+5C,IAAc,SAAU,CAC1B,MAAMa,EAAQJ,EAAmB,UAAW76C,EAAE,GAAG,EAC3Ck7C,EAAQL,EAAmB,UAAWx6C,EAAE,GAAG,EAEjD,GAAI46C,GAASC,EAAO,OAAOA,EAAQD,EAEnC,GAAIA,GAAS,CAACC,EAAO,MAAO,GAC5B,GAAI,CAACD,GAASC,EAAO,MAAO,EAE9B,CACA,OAAOl7C,EAAE,KAAK,cAAcK,EAAE,IAAI,CACpC,CAAC,EAGK86C,EAAiB,CAAC,GAAGJ,CAAc,EAAE,KAAK,CAAC/6C,EAAGK,IAAM,CACxD,MAAM+6C,EAAcp7C,EAAE,OAAS6sB,GACzBwuB,EAAch7C,EAAE,OAASwsB,GAG/B,GAAIuuB,GAAe,CAACC,EAAa,MAAO,GACxC,GAAI,CAACD,GAAeC,EAAa,MAAO,GAGxC,GAAID,GAAeC,EACjB,OAAQr7C,EAAE,MAAQA,EAAE,YAAY,cAAcK,EAAE,MAAQA,EAAE,UAAU,EAItE,GAAI+5C,IAAc,SAAU,CAC1B,MAAMa,EAAQJ,EAAmB,UAAW76C,EAAE,UAAU,EAClDk7C,GAAQL,EAAmB,UAAWx6C,EAAE,UAAU,EAExD,GAAI46C,GAASC,GAAO,OAAOA,GAAQD,EAEnC,GAAIA,GAAS,CAACC,GAAO,MAAO,GAC5B,GAAI,CAACD,GAASC,GAAO,MAAO,EAE9B,CACA,OAAQl7C,EAAE,MAAQA,EAAE,YAAY,cAAcK,EAAE,MAAQA,EAAE,UAAU,CACtE,CAAC,EAGK+pB,GAAQiwB,EAAY,cAAc,OAClCiB,EAAmBlxB,GACrB4wB,EAAe,OACZh6C,GAAMA,EAAE,KAAK,cAAc,SAASopB,EAAK,GAAKppB,EAAE,IAAI,cAAc,SAASopB,EAAK,GAEnF4wB,EACEO,EAAmBnxB,GACrB+wB,EAAe,OACZn6C,GAAA,OAAM,QAAAkrB,EAAAlrB,EAAE,OAAF,YAAAkrB,EAAQ,cAAc,SAAS9B,MAAUppB,EAAE,WAAW,cAAc,SAASopB,EAAK,IAE3F+wB,EAGEK,GAAmBF,EAAiB,OAAQt6C,GAAMmmC,GAAWC,EAAW,UAAWpmC,EAAE,GAAG,CAAC,EACzFy6C,GAAmBF,EAAiB,OAAQv6C,GAChDmmC,GAAWC,EAAW,UAAWpmC,EAAE,UAAU,GAEzC06C,GAAsBJ,EAAiB,OAC1Ct6C,GAAM,CAACmmC,GAAWC,EAAW,UAAWpmC,EAAE,GAAG,GAE1C26C,EAAsBJ,EAAiB,OAC1Cv6C,GAAM,CAACmmC,GAAWC,EAAW,UAAWpmC,EAAE,UAAU,GAMjD46C,GAAgC,CACpC,GAAGJ,GAAiB,IAAKxnB,IAAa,CAAE,KAAM,UAAoB,QAAAA,CAAA,EAAU,EAC5E,GAAGynB,GAAiB,IAAKrqB,IAAa,CAAE,KAAM,UAAoB,QAAAA,GAAU,GAC5E,KAAK,CAACpxB,EAAGK,IAAM,CACf,MAAM46C,EACJj7C,EAAE,OAAS,UACP66C,EAAmB,UAAW76C,EAAE,QAAQ,GAAG,EAC3C66C,EAAmB,UAAW76C,EAAE,QAAQ,UAAU,EAClDk7C,EACJ76C,EAAE,OAAS,UACPw6C,EAAmB,UAAWx6C,EAAE,QAAQ,GAAG,EAC3Cw6C,EAAmB,UAAWx6C,EAAE,QAAQ,UAAU,EAExD,GAAI46C,GAASC,EAAO,OAAOA,EAAQD,EACnC,GAAIA,GAAS,CAACC,EAAO,MAAO,GAC5B,GAAI,CAACD,GAASC,EAAO,MAAO,GAE5B,MAAMW,EAAQ77C,EAAE,OAAS,UAAYA,EAAE,QAAQ,KAAOA,EAAE,QAAQ,MAAQA,EAAE,QAAQ,WAC5E87C,GAAQz7C,EAAE,OAAS,UAAYA,EAAE,QAAQ,KAAOA,EAAE,QAAQ,MAAQA,EAAE,QAAQ,WAClF,OAAOw7C,EAAM,cAAcC,EAAK,CAClC,CAAC,EAED,OACExW,OAAC,OAAI,UAAU,2EAEb,UAAAA,OAAC,OAAI,UAAU,qEACb,UAAAhO,MAAC,MAAG,UAAU,sDAAsD,yBAAa,EACjFA,MAACgiB,GAAA,CACC,QAAQ,QACR,KAAK,KACL,QAASO,EACT,MAAM,cACN,UAAU,0DACX,cAED,EACF,EAGAvU,OAAC,OAAI,UAAU,4CACb,UAAAhO,MAAC8d,GAAA,CACC,KAAK,OACL,YAAY,YACZ,MAAOiF,EACP,SAAW/5C,GAAMg6C,EAAeh6C,EAAE,OAAO,KAAK,EAC9C,UAAU,qBAEX+5C,GACC/iB,MAAC,UACC,UAAU,6GACV,QAAS,IAAMgjB,EAAe,EAAE,EAChC,MAAM,eACP,cAED,EAEJ,EAGAhV,OAAC,OAAI,UAAU,yBAEZ,WAAClb,IACAkb,OAAC,OACC,UAAWhN,GACT,mGACAqiB,EAAS,MAAO,KAAK,GAAK,8BAE5B,QAAS,IACPF,EAAyB,CACvB,KAAM,MACN,GAAI,MACJ,KAAM,kBACP,EAGH,UAAAnjB,MAAC,QAAK,UAAU,gCAAgC,cAAE,EAClDA,MAAC,QAAK,UAAU,kBAAkB,uBAAW,KAKhD,CAAClN,IACAkb,OAAC,OACC,UAAWhN,GACT,mGACAqiB,EAAS,MAAO,KAAK,GAAK,8BAE5B,QAAS,IACPF,EAAyB,CACvB,KAAM,MACN,GAAI,MACJ,KAAM,WACP,EAGH,UAAAnjB,MAAC,QAAK,UAAU,gCAAgC,eAAG,EACnDA,MAAC,QAAK,UAAU,kBAAkB,oBAAQ,KAK7C,CAAClN,IACAkb,OAAC,OACC,UAAWhN,GACT,mGACAqiB,EAAS,aAAc,YAAY,GAAK,8BAE1C,QAAS,IACPF,EAAyB,CACvB,KAAM,aACN,GAAI,aACJ,KAAM,kBACP,EAGH,UAAAnjB,MAAC,QAAK,UAAU,gCAAgC,aAAC,EACjDA,MAAC,QAAK,UAAU,kBAAkB,2BAAe,KAKpD,CAAClN,IACAkb,OAAC,OACC,UAAWhN,GACT,mGACAwhB,GAAe,8BAEjB,QAASE,EAET,UAAA1iB,MAAC,QAAK,UAAU,gCAAgC,cAAE,EAClDgO,OAAC,QAAK,UAAU,kBACb,UAAAwU,EAAc,OAAS,OAAO,eAC/BxU,OAAC,QACC,UAAWhN,GACT,eACAyhB,EAAiB,iBAAmB,yBAEvC,cACGA,EAAiB,UAAY,UAAU,MAC3C,EACF,KAKH,CAAC3vB,IAAS,OAAO,KAAK0I,CAAY,EAAE,OAAS,GAC5CwS,OAAC,OACC,UAAU,mGACV,QAAS2U,EAET,UAAA3iB,MAAC,QAAK,UAAU,gCAAgC,aAAC,EACjDA,MAAC,QAAK,UAAU,wCAAwC,4BAAgB,KAK3EskB,GAAc,OAAS,GACtBtW,OAAAyW,WAAA,CACE,UAAAzkB,MAAC,OAAI,UAAU,mDACb,SAAAA,MAAC,QAAK,UAAU,8CAA8C,qBAAS,EACzE,EACCskB,GAAc,IAAKI,GAAS,CAC3B,GAAIA,EAAK,OAAS,UAAW,CAC3B,MAAMhoB,EAAUgoB,EAAK,QACfC,EAAcrB,EAAe,UAAW5mB,EAAQ,GAAG,EACnDkoB,EAAY3nB,EAAW,UAAWP,EAAQ,GAAG,EACnD,OACEsR,OAAC,OAEC,UAAWhN,GACT,mGACAqiB,EAAS,UAAW3mB,EAAQ,GAAG,GAAK,6BACpCioB,EAAc,GAAK,iDAErB,QAAS,IACPxB,EAAyB,CACvB,KAAM,UACN,GAAIzmB,EAAQ,IACZ,KAAMA,EAAQ,KACf,EAGH,UAAAsD,MAAC,QAAK,UAAU,uBAAwB,SAAAtD,EAAQ,KAAK,EACpDioB,EAAc,GACb3kB,MAAC,QACC,UAAWgB,GACT,gFACA4jB,EACI,6CACA,sCAGL,YAAkBD,CAAW,GAChC,GAzBG,YAAYjoB,EAAQ,GAAG,GA6BlC,KAAO,CACL,MAAM5C,EAAU4qB,EAAK,QACfC,EAAcrB,EAAe,UAAWxpB,EAAQ,UAAU,EAC1D8qB,EAAY3nB,EAAW,UAAWnD,EAAQ,UAAU,EAC1D,OACEkU,OAAC,OAEC,UAAWhN,GACT,mGACAqiB,EAAS,UAAWvpB,EAAQ,UAAU,GAAK,6BAC3C6qB,EAAc,GAAK,iDAErB,QAAS,IACPxB,EAAyB,CACvB,KAAM,UACN,GAAIrpB,EAAQ,WACZ,KAAMqU,GAAsBrU,EAAQ,KAAMA,EAAQ,UAAU,EAC7D,EAGH,UAAAkG,MAAC0P,GAAA,CACC,KAAM5V,EAAQ,KACd,UAAWA,EAAQ,WACnB,KAAM,GACN,YAAaA,EAAQ,OAEvBkG,MAAC,QAAK,UAAU,uBACb,YAAsBlG,EAAQ,KAAMA,EAAQ,UAAU,EACzD,EACC6qB,EAAc,GACb3kB,MAAC,QACC,UAAWgB,GACT,gFACA4jB,EACI,6CACA,sCAGL,YAAkBD,CAAW,GAChC,GAjCG,eAAe7qB,EAAQ,UAAU,GAqC5C,CACF,CAAC,GACH,EAIDsqB,GAAoB,OAAS,GAC5BpW,OAAAyW,WAAA,CACE,UAAAzW,OAAC,OAAI,UAAU,mDACb,UAAAhO,MAAC,QAAK,UAAU,8CAA8C,oBAAQ,EACtEA,MAAC,UACC,UAAU,oIACV,QAASijB,EACT,MAAOH,IAAc,QAAU,iBAAmB,sBAEjD,SAAAA,IAAc,QAAU,MAAQ,KACnC,EACF,EACCsB,GAAoB,IAAK1nB,GAAY,CACpC,MAAMioB,EAAcrB,EAAe,UAAW5mB,EAAQ,GAAG,EACnDkoB,EAAY3nB,EAAW,UAAWP,EAAQ,GAAG,EACnD,OACEsR,OAAC,OAEC,UAAWhN,GACT,mGACAqiB,EAAS,UAAW3mB,EAAQ,GAAG,GAAK,6BACpCioB,EAAc,GAAK,iDAErB,QAAS,IACPxB,EAAyB,CACvB,KAAM,UACN,GAAIzmB,EAAQ,IACZ,KAAMA,EAAQ,KACf,EAGH,UAAAsD,MAAC,QAAK,UAAU,uBAAwB,SAAAtD,EAAQ,KAAK,EACpDioB,EAAc,GACb3kB,MAAC,QACC,UAAWgB,GACT,gFACA4jB,EACI,6CACA,sCAGL,YAAkBD,CAAW,GAChC,GAzBG,QAAQjoB,EAAQ,GAAG,GA6B9B,CAAC,GACH,EAID2nB,EAAoB,OAAS,GAC5BrW,OAAAyW,WAAA,CACE,UAAAzW,OAAC,OAAI,UAAU,mDACb,UAAAhO,MAAC,QAAK,UAAU,8CAA8C,oBAAQ,EACrEokB,GAAoB,SAAW,GAC9BpkB,MAAC,UACC,UAAU,oIACV,QAASijB,EACT,MAAOH,IAAc,QAAU,iBAAmB,sBAEjD,SAAAA,IAAc,QAAU,MAAQ,KACnC,EAEJ,EACCuB,EAAoB,IAAKvqB,GAAY,CACpC,MAAM6qB,EAAcrB,EAAe,UAAWxpB,EAAQ,UAAU,EAC1D8qB,EAAY3nB,EAAW,UAAWnD,EAAQ,UAAU,EAC1D,OACEkU,OAAC,OAEC,UAAWhN,GACT,mGACAqiB,EAAS,UAAWvpB,EAAQ,UAAU,GAAK,6BAC3C6qB,EAAc,GAAK,iDAErB,QAAS,IACPxB,EAAyB,CACvB,KAAM,UACN,GAAIrpB,EAAQ,WACZ,KAAMqU,GAAsBrU,EAAQ,KAAMA,EAAQ,UAAU,EAC7D,EAGH,UAAAkG,MAAC0P,GAAA,CACC,KAAM5V,EAAQ,KACd,UAAWA,EAAQ,WACnB,KAAM,GACN,YAAaA,EAAQ,OAEvBkG,MAAC,QAAK,UAAU,uBACb,YAAsBlG,EAAQ,KAAMA,EAAQ,UAAU,EACzD,EACC6qB,EAAc,GACb3kB,MAAC,QACC,UAAWgB,GACT,gFACA4jB,EACI,6CACA,sCAGL,YAAkBD,CAAW,GAChC,GAjCG7qB,EAAQ,WAqCnB,CAAC,GACH,EAIDuqB,EAAoB,SAAW,GAC9BD,GAAoB,SAAW,GAC/BE,GAAc,SAAW,SACtB,OAAI,UAAU,wCACZ,SAAAxxB,GAAQ,mBAAqB,uBAChC,GAEN,GACF,CAEJ,CC1iBO,SAAS+xB,GAAoB3xB,EAA0D,CAC5F,MAAMif,EAAajf,EAAK,QAAQ,IAAI,EACpC,GAAIif,EAAa,GAAKA,EAAa,GAAI,CACrC,MAAM2S,EAAkB5xB,EAAK,UAAU,EAAGif,CAAU,EAEpD,GAAI,CAAC2S,EAAgB,SAAS,GAAG,EAC/B,MAAO,CACL,OAAQA,EACR,QAAS5xB,EAAK,UAAUif,EAAa,CAAC,EAG5C,CACA,MAAO,CAAE,OAAQ,KAAM,QAASjf,CAAA,CAClC,CAMO,SAAS6xB,GAAWvxB,EAA2B,CACpD,MAAMwxB,EAAO,IAAI,KAAKxxB,EAAY,GAAI,EAChCgE,MAAU,KACVytB,EAAUD,EAAK,iBAAmBxtB,EAAI,eAEtC0tB,EAAOF,EAAK,mBAAmB,GAAI,CAAE,KAAM,UAAW,OAAQ,UAAW,EAE/E,OAAIC,EACKC,EAKF,GADSF,EAAK,mBAAmB,GAAI,CAAE,MAAO,QAAS,IAAK,UAAW,CAC7D,IAAIE,CAAI,EAC3B,CCHO,SAASC,GAAc/R,EAA2C,CACvE,GAAI,CAACA,GAAQA,EAAK,SAAW,EAC3B,MAAO,GAGT,MAAMgS,EAAahS,EAAK,cAClBiS,EAAiB,GAEvB,QAASjpB,EAAI,EAAGA,EAAIgpB,EAAW,OAAQhpB,GAAK,EACtCA,EAAI,EAAIgpB,EAAW,QACrBC,EAAK,KAAKD,EAAW,MAAMhpB,EAAGA,EAAI,CAAC,CAAC,EAIxC,OAAOipB,CACT,CAKO,SAASC,GACdxd,EACArO,EACA8rB,EAAyB,GACd,CACX,MAAMC,EAAmB1d,EAAO,cAChC,OAAOrO,EAAS,OAAQ,GAClB8rB,GAAiB,EAAE,OAAShwB,GACvB,GAEF,EAAE,WAAW,cAAc,WAAWiwB,CAAgB,CAC9D,CACH,CAMO,SAASC,GACdC,EACAC,EACAC,EACAC,EACe,CACf,GAAIH,IAAS,MAAQC,IAAS,MAAQC,IAAS,MAAQC,IAAS,KAC9D,OAAO,KAGT,MAAMx7C,EAAI,KACJy7C,EAAOC,GAAMH,EAAOF,CAAI,EACxBM,EAAOD,GAAMF,EAAOF,CAAI,EACxBj9C,EACJ,KAAK,IAAIo9C,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EACtC,KAAK,IAAIC,GAAML,CAAI,CAAC,EAAI,KAAK,IAAIK,GAAMH,CAAI,CAAC,EAAI,KAAK,IAAII,EAAO,CAAC,EAAI,KAAK,IAAIA,EAAO,CAAC,EAClFt8C,EAAI,EAAI,KAAK,MAAM,KAAK,KAAKhB,CAAC,EAAG,KAAK,KAAK,EAAIA,CAAC,CAAC,EACvD,OAAO2B,EAAIX,CACb,CAEA,SAASq8C,GAAME,EAAqB,CAClC,OAAQA,EAAM,KAAK,GAAM,GAC3B,CAMO,SAASC,GAAgBC,EAAoBC,EAA6B,CAK/E,MAJI,EAAAD,IAAQ,MAAQC,IAAQ,MAIxBD,IAAQ,GAAKC,IAAQ,EAI3B,CAKO,SAASC,GAAeC,EAAoB,CACjD,OAAIA,EAAK,EACA,GAAG,KAAK,MAAMA,EAAK,GAAI,CAAC,IAE1B,GAAGA,EAAG,QAAQ,CAAC,CAAC,IACzB,CAMO,SAASC,GACd9sB,EACA+sB,EACAC,EACW,CACX,OAAID,IAAY,MAAQC,IAAY,KAC3BhtB,EAGF,CAAC,GAAGA,CAAQ,EAAE,KAAK,CAAC/wB,EAAGK,IAAM,CAClC,MAAM29C,EAAQjB,GAAkBe,EAASC,EAAS/9C,EAAE,IAAKA,EAAE,GAAG,EACxDi+C,EAAQlB,GAAkBe,EAASC,EAAS19C,EAAE,IAAKA,EAAE,GAAG,EAG9D,OAAI29C,IAAU,MAAQC,IAAU,KAAa,EACzCD,IAAU,KAAa,EACvBC,IAAU,KAAa,GAEpBD,EAAQC,CACjB,CAAC,CACH,CAKO,SAASC,GAAYxT,EAAyC,CACnE,MAAI,CAACA,GAAQA,EAAK,SAAW,EACpB,EAEF,KAAK,MAAMA,EAAK,OAAS,CAAC,CACnC,CAOO,SAASyT,GAAgBpb,EAI9B,CACA,GAAI,CAACA,GAASA,EAAM,SAAW,EAC7B,MAAO,CAAE,QAAS,GAAI,UAAW,GAAM,YAAa,IAItD,MAAMqb,EAAYrb,EAAM,IAAK,GAAMmb,GAAY,EAAE,IAAI,CAAC,EAAE,KAAK,CAACl+C,EAAGK,IAAML,EAAIK,CAAC,EAEtEg+C,EAAYD,EAAU,MAAOl9C,GAAMA,IAAM,CAAC,EAC1Co9C,EAAcvb,EAAM,OAAS,EAMnC,MAAO,CAAE,QAHKqb,EAAU,IAAKl9C,GAAOA,IAAM,EAAI,IAAMA,EAAE,UAAW,EAC3C,KAAK,GAAG,EAEZ,UAAAm9C,EAAW,YAAAC,CAAA,CAC/B,CAKO,SAASC,GACd7T,EACA8T,EACAztB,EACAzH,EACc,OACd,MAAMm1B,EAAchC,GAAc/R,CAAI,EAGhCgU,EAAeF,EAAO,kBAAkB,cAAc,MAAM,EAAG,CAAC,EAChEG,EAAiB,CACrB,KAAMH,EAAO,KACb,OAAQE,EACR,IAAKF,EAAO,IACZ,IAAKA,EAAO,KAIRI,IAAiB1yB,EAAA5C,GAAA,YAAAA,EAAQ,aAAR,YAAA4C,EAAoB,cAAc,MAAM,EAAG,KAAM,KAClE2yB,EAAmB,CACvB,MAAMv1B,GAAA,YAAAA,EAAQ,OAAQ,UACtB,OAAQs1B,EACR,KAAKt1B,GAAA,YAAAA,EAAQ,MAAO,KACpB,KAAKA,GAAA,YAAAA,EAAQ,MAAO,KACpB,WAAWA,GAAA,YAAAA,EAAQ,aAAc,MAI7BqzB,EAAkB,GACxB,IAAImC,EAAUN,EAAO,IACjBO,EAAUP,EAAO,IAEjBQ,EAAmB,CAACxB,GAAgBgB,EAAO,IAAKA,EAAO,GAAG,EAE9D,UAAWpf,KAAUqf,EAAa,CAChC,MAAMzd,EAAU4b,GAAqBxd,EAAQrO,EAAU,EAAI,EACrDkuB,EAAgBpB,GAAuB7c,EAAS8d,EAASC,CAAO,EAItE,IAAIG,EAAkC,KACtC,MAAMC,EACJF,EAAc,SAAW,GAAKzB,GAAgByB,EAAc,CAAC,EAAE,IAAKA,EAAc,CAAC,EAAE,GAAG,EACtF,CAACD,GAAoBG,IACvBD,EAAmBnC,GACjB+B,EACAC,EACAE,EAAc,CAAC,EAAE,IACjBA,EAAc,CAAC,EAAE,MAIrBtC,EAAK,KAAK,CACR,OAAAvd,EACA,QAAS6f,EACT,iBAAAC,CAAA,CACD,EAGGD,EAAc,SAAW,GAE3BD,EAAmB,GACnBF,EAAU,KACVC,EAAU,MACDE,EAAc,OAAS,GAEhCD,EAAmB,GAEfxB,GAAgByB,EAAc,CAAC,EAAE,IAAKA,EAAc,CAAC,EAAE,GAAG,GAC5DH,EAAUG,EAAc,CAAC,EAAE,IAC3BF,EAAUE,EAAc,CAAC,EAAE,MAE3BH,EAAU,KACVC,EAAU,OAEHvB,GAAgByB,EAAc,CAAC,EAAE,IAAKA,EAAc,CAAC,EAAE,GAAG,GACnED,EAAmB,GACnBF,EAAUG,EAAc,CAAC,EAAE,IAC3BF,EAAUE,EAAc,CAAC,EAAE,MAG3BD,EAAmB,GACnBF,EAAU,KACVC,EAAU,KAEd,CAGA,MAAMK,EAAiBC,GAAwBV,EAAgBhC,EAAMkC,CAAgB,EAG/ES,EACJ,CAAC9B,GAAgBmB,EAAe,IAAKA,EAAe,GAAG,GACvD,CAACnB,GAAgBqB,EAAiB,IAAKA,EAAiB,GAAG,GAC3DlC,EAAK,KACF4C,GAAQA,EAAI,QAAQ,SAAW,GAAK,CAAC/B,GAAgB+B,EAAI,QAAQ,CAAC,EAAE,IAAKA,EAAI,QAAQ,CAAC,EAAE,GAAG,GAGhG,MAAO,CACL,OAAQZ,EACR,KAAAhC,EACA,SAAUkC,EACV,eAAAO,EACA,QAAAE,CAAA,CAEJ,CAOA,SAASD,GACPb,EACA7B,EACA6C,EACiB,CAEjB,GAAI7C,EAAK,SAAW,EAAG,CACrB,GAAI,CAACa,GAAgBgB,EAAO,IAAKA,EAAO,GAAG,GAAK,CAAChB,GAAgBgC,EAAS,IAAKA,EAAS,GAAG,EACzF,OAAO,KAET,MAAMC,EAAO1C,GAAkByB,EAAO,IAAKA,EAAO,IAAKgB,EAAS,IAAKA,EAAS,GAAG,EACjF,OAAOC,IAAS,KAAO,CAACA,CAAI,EAAI,IAClC,CAGA,IAAIX,EAAUN,EAAO,IACjBO,EAAUP,EAAO,IACjBkB,EAAgB,EAEpB,GAAI,CAAClC,GAAgBsB,EAASC,CAAO,EAAG,CAEtC,QAASrrB,EAAI,EAAGA,EAAIipB,EAAK,OAAQjpB,IAAK,CACpC,MAAM6rB,EAAM5C,EAAKjpB,CAAC,EAClB,GAAI6rB,EAAI,QAAQ,SAAW,GAAK/B,GAAgB+B,EAAI,QAAQ,CAAC,EAAE,IAAKA,EAAI,QAAQ,CAAC,EAAE,GAAG,EAAG,CACvFT,EAAUS,EAAI,QAAQ,CAAC,EAAE,IACzBR,EAAUQ,EAAI,QAAQ,CAAC,EAAE,IACzBG,EAAgBhsB,EAAI,EACpB,KACF,CACF,CAEA,GAAI,CAAC8pB,GAAgBsB,EAASC,CAAO,EACnC,OAAO,IAEX,CAGA,IAAIY,EAAgB,EAChBC,EAAiB,GACjBC,EAA0B,GAE9B,QAASnsB,EAAIgsB,EAAehsB,EAAIipB,EAAK,OAAQjpB,IAAK,CAChD,MAAM6rB,EAAM5C,EAAKjpB,CAAC,EAGlB,GAAI6rB,EAAI,QAAQ,SAAW,GAAK,CAAC/B,GAAgB+B,EAAI,QAAQ,CAAC,EAAE,IAAKA,EAAI,QAAQ,CAAC,EAAE,GAAG,EAAG,CAExFT,EAAU,KACVC,EAAU,KACV,QACF,CAGA,GAAID,IAAY,MAAQC,IAAY,KAAM,CACxC,MAAMU,EAAO1C,GAAkB+B,EAASC,EAASQ,EAAI,QAAQ,CAAC,EAAE,IAAKA,EAAI,QAAQ,CAAC,EAAE,GAAG,EACnFE,IAAS,OACXE,GAAiBF,EACjBG,EAAiB,GAErB,CAGAd,EAAUS,EAAI,QAAQ,CAAC,EAAE,IACzBR,EAAUQ,EAAI,QAAQ,CAAC,EAAE,IACzBM,EAA0BnsB,CAC5B,CAGA,GAAImsB,IAA4BlD,EAAK,OAAS,GAAKmC,IAAY,MAAQC,IAAY,MAC7EvB,GAAgBgC,EAAS,IAAKA,EAAS,GAAG,EAAG,CAC/C,MAAMM,EAAY/C,GAAkB+B,EAASC,EAASS,EAAS,IAAKA,EAAS,GAAG,EAC5EM,IAAc,OAChBH,GAAiBG,EACjBF,EAAiB,GAErB,CAIF,OAAOA,EAAiB,CAACD,CAAa,EAAI,IAC5C,CCzXA,SAASI,GAAqBC,EAAsBC,EAAiB,CAAE,yBAAAC,EAA2B,EAAI,EAAK,GAAI,CAC7G,OAAO,SAAqBn0B,EAAO,CAEjC,GADAi0B,GAAA,MAAAA,EAAuBj0B,GACnBm0B,IAA6B,IAAS,CAACn0B,EAAM,iBAC/C,OAAOk0B,GAAA,YAAAA,EAAkBl0B,EAE7B,CACF,CCNA,SAASo0B,GAAeC,EAAmBC,EAAgB,CACzD,MAAMC,EAAUC,gBAAoBF,CAAc,EAC5CG,EAAY5nB,GAAU,CAC1B,KAAM,CAAE,SAAAwL,EAAU,GAAGqc,CAAO,EAAK7nB,EAC3B6R,EAAQiW,UAAc,IAAMD,EAAS,OAAO,OAAOA,CAAO,CAAC,EACjE,OAAuBnpB,MAAIgpB,EAAQ,SAAU,CAAE,MAAA7V,EAAO,SAAArG,CAAQ,CAAE,CAClE,EACAoc,EAAS,YAAcJ,EAAoB,WAC3C,SAASO,EAAYC,EAAc,CACjC,MAAMH,EAAUI,aAAiBP,CAAO,EACxC,GAAIG,EAAS,OAAOA,EACpB,GAAIJ,IAAmB,OAAQ,OAAOA,EACtC,MAAM,IAAI,MAAM,KAAKO,CAAY,4BAA4BR,CAAiB,IAAI,CACpF,CACA,MAAO,CAACI,EAAUG,CAAW,CAC/B,CACA,SAASG,GAAmBC,EAAWC,EAAyB,GAAI,CAClE,IAAIC,EAAkB,GACtB,SAASC,EAAed,EAAmBC,EAAgB,CACzD,MAAMc,EAAcZ,gBAAoBF,CAAc,EAChDjqB,EAAQ6qB,EAAgB,OAC9BA,EAAkB,CAAC,GAAGA,EAAiBZ,CAAc,EACrD,MAAMG,EAAY5nB,GAAU,OAC1B,KAAM,CAAE,MAAAwoB,EAAO,SAAAhd,EAAU,GAAGqc,CAAO,EAAK7nB,EAClC0nB,IAAUp0B,EAAAk1B,GAAA,YAAAA,EAAQL,KAAR,YAAA70B,EAAqBkK,KAAU+qB,EACzC1W,EAAQiW,UAAc,IAAMD,EAAS,OAAO,OAAOA,CAAO,CAAC,EACjE,OAAuBnpB,MAAIgpB,EAAQ,SAAU,CAAE,MAAA7V,EAAO,SAAArG,CAAQ,CAAE,CAClE,EACAoc,EAAS,YAAcJ,EAAoB,WAC3C,SAASO,EAAYC,EAAcQ,EAAO,OACxC,MAAMd,IAAUp0B,EAAAk1B,GAAA,YAAAA,EAAQL,KAAR,YAAA70B,EAAqBkK,KAAU+qB,EACzCV,EAAUI,aAAiBP,CAAO,EACxC,GAAIG,EAAS,OAAOA,EACpB,GAAIJ,IAAmB,OAAQ,OAAOA,EACtC,MAAM,IAAI,MAAM,KAAKO,CAAY,4BAA4BR,CAAiB,IAAI,CACpF,CACA,MAAO,CAACI,EAAUG,CAAW,CAC/B,CACA,MAAMU,EAAc,IAAM,CACxB,MAAMC,EAAgBL,EAAgB,IAAKZ,GAClCE,gBAAoBF,CAAc,CAC1C,EACD,OAAO,SAAkBe,EAAO,CAC9B,MAAMG,GAAWH,GAAA,YAAAA,EAAQL,KAAcO,EACvC,OAAOZ,UACL,KAAO,CAAE,CAAC,UAAUK,CAAS,EAAE,EAAG,CAAE,GAAGK,EAAO,CAACL,CAAS,EAAGQ,CAAQ,IACnE,CAACH,EAAOG,CAAQ,CACxB,CACI,CACF,EACA,OAAAF,EAAY,UAAYN,EACjB,CAACG,EAAgBM,GAAqBH,EAAa,GAAGL,CAAsB,CAAC,CACtF,CACA,SAASQ,MAAwBC,EAAQ,CACvC,MAAMC,EAAYD,EAAO,CAAC,EAC1B,GAAIA,EAAO,SAAW,EAAG,OAAOC,EAChC,MAAML,EAAc,IAAM,CACxB,MAAMM,EAAaF,EAAO,IAAKG,IAAkB,CAC/C,SAAUA,EAAY,EACtB,UAAWA,EAAa,SAC9B,EAAM,EACF,OAAO,SAA2BC,EAAgB,CAChD,MAAMC,EAAaH,EAAW,OAAO,CAACI,EAAa,CAAE,SAAAC,EAAU,UAAAjB,KAAgB,CAE7E,MAAMkB,EADaD,EAASH,CAAc,EACV,UAAUd,CAAS,EAAE,EACrD,MAAO,CAAE,GAAGgB,EAAa,GAAGE,CAAY,CAC1C,EAAG,EAAE,EACL,OAAOvB,UAAc,KAAO,CAAE,CAAC,UAAUgB,EAAU,SAAS,EAAE,EAAGI,CAAU,GAAK,CAACA,CAAU,CAAC,CAC9F,CACF,EACA,OAAAT,EAAY,UAAYK,EAAU,UAC3BL,CACT,CCzEA,IAAIa,GAAmB,6BAAY,SAAWC,kBAAwB,IAAM,CAC5E,ECAIC,GAAa1sB,GAAM,UAAU,KAAI,EAAG,SAAQ,CAAE,IAAM,QACpDgkB,GAAQ,EACZ,SAAS2I,GAAMC,EAAiB,CAC9B,KAAM,CAAC11C,EAAI21C,CAAK,EAAIC,WAAeJ,GAAU,CAAE,EAC/CK,UAAgB,IAAM,CACEF,EAAOG,GAAYA,GAAW,OAAOhJ,IAAO,CAAC,CACrE,EAAG,CAAC4I,CAAe,CAAC,EACO11C,EAAK,SAASA,CAAE,GAAK,EAClD,CCRA,IAAI+1C,GAAqBjtB,GAAM,uBAAuB,KAAI,EAAG,SAAQ,CAAE,GAAK+sB,GAC5E,SAASG,GAAqB,CAC5B,KAAAhf,EACA,YAAAif,EACA,SAAAC,EAAW,IAAM,CACjB,EACA,OAAAC,CACF,EAAG,CACD,KAAM,CAACC,EAAkBC,EAAqBC,CAAW,EAAIC,GAAqB,CAChF,YAAAN,EACA,SAAAC,CACJ,CAAG,EACKM,EAAexf,IAAS,OACxB6G,EAAQ2Y,EAAexf,EAAOof,EAC1B,CACR,MAAMK,EAAkBC,SAAa1f,IAAS,MAAM,EACpD2f,YAAgB,IAAM,CACpB,MAAMC,EAAgBH,EAAgB,QAClCG,IAAkBJ,GAGpB,QAAQ,KACN,GAAGL,CAAM,qBAHES,EAAgB,aAAe,cAGR,OAFzBJ,EAAe,aAAe,cAEI,4KACrD,EAEMC,EAAgB,QAAUD,CAC5B,EAAG,CAACA,EAAcL,CAAM,CAAC,CAC3B,CACA,MAAMU,EAAW3N,cACd4N,GAAc,OACb,GAAIN,EAAc,CAChB,MAAMO,EAASC,GAAWF,CAAS,EAAIA,EAAU9f,CAAI,EAAI8f,EACrDC,IAAW/f,KACb1X,EAAAg3B,EAAY,UAAZ,MAAAh3B,EAAA,KAAAg3B,EAAsBS,GAE1B,MACEV,EAAoBS,CAAS,CAEjC,EACA,CAACN,EAAcxf,EAAMqf,EAAqBC,CAAW,CACzD,EACE,MAAO,CAACzY,EAAOgZ,CAAQ,CACzB,CACA,SAASN,GAAqB,CAC5B,YAAAN,EACA,SAAAC,CACF,EAAG,CACD,KAAM,CAACrY,EAAOgZ,CAAQ,EAAIjB,WAAeK,CAAW,EAC9CgB,EAAeP,SAAa7Y,CAAK,EACjCyY,EAAcI,SAAaR,CAAQ,EACzC,OAAAH,GAAmB,IAAM,CACvBO,EAAY,QAAUJ,CACxB,EAAG,CAACA,CAAQ,CAAC,EACbS,YAAgB,IAAM,OAChBM,EAAa,UAAYpZ,KAC3Bve,EAAAg3B,EAAY,UAAZ,MAAAh3B,EAAA,KAAAg3B,EAAsBzY,GACtBoZ,EAAa,QAAUpZ,EAE3B,EAAG,CAACA,EAAOoZ,CAAY,CAAC,EACjB,CAACpZ,EAAOgZ,EAAUP,CAAW,CACtC,CACA,SAASU,GAAWnZ,EAAO,CACzB,OAAO,OAAOA,GAAU,UAC1B,CC7DA,SAAS2L,GAAWC,EAAW,CAC7B,MAAMC,EAA4BC,GAAgBF,CAAS,EACrDG,EAAQnB,aAAiB,CAACzc,EAAO6d,IAAiB,CACtD,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EAC7B+d,EAAgBC,WAAe,QAAQxS,CAAQ,EAC/CyS,EAAYF,EAAc,KAAKG,EAAW,EAChD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAC7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,WAAe,MAAMG,CAAU,EAAI,EAAUH,WAAe,KAAK,IAAI,EAClEM,iBAAqBH,CAAU,EAAIA,EAAW,MAAM,SAAW,KAE/DE,CAEV,EACD,OAAuB3f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAUS,iBAAqBH,CAAU,EAAII,eAAmBJ,EAAY,OAAQC,CAAW,EAAI,KAAM,CACpL,CACA,OAAuB1f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAArS,EAAU,CACrF,CAAC,EACD,OAAAoS,EAAM,YAAc,GAAGH,CAAS,QACzBG,CACT,CAGA,SAASD,GAAgBF,EAAW,CAClC,MAAMC,EAAYjB,aAAiB,CAACzc,EAAO6d,IAAiB,CAC1D,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EACnC,GAAIse,iBAAqB9S,CAAQ,EAAG,CAClC,MAAMiT,EAAcC,GAAclT,CAAQ,EACpCmT,EAASC,GAAWd,EAAWtS,EAAS,KAAK,EACnD,OAAIA,EAAS,OAASqT,aACpBF,EAAO,IAAMd,EAAelB,GAAYkB,EAAcY,CAAW,EAAIA,GAEhEF,eAAmB/S,EAAUmT,CAAM,CAC5C,CACA,OAAOX,WAAe,MAAMxS,CAAQ,EAAI,EAAIwS,WAAe,KAAK,IAAI,EAAI,IAC1E,CAAC,EACD,OAAAN,EAAU,YAAc,GAAGD,CAAS,aAC7BC,CACT,CACA,IAAIoB,GAAuB,OAAO,iBAAiB,EAWnD,SAASZ,GAAYG,EAAO,CAC1B,OAAOC,iBAAqBD,CAAK,GAAK,OAAOA,EAAM,MAAS,YAAc,cAAeA,EAAM,MAAQA,EAAM,KAAK,YAAcS,EAClI,CACA,SAASF,GAAWd,EAAWiB,EAAY,CACzC,MAAMC,EAAgB,CAAE,GAAGD,CAAU,EACrC,UAAWE,KAAYF,EAAY,CACjC,MAAMG,EAAgBpB,EAAUmB,CAAQ,EAClCE,EAAiBJ,EAAWE,CAAQ,EACxB,WAAW,KAAKA,CAAQ,EAEpCC,GAAiBC,EACnBH,EAAcC,CAAQ,EAAI,IAAI/I,IAAS,CACrC,MAAMhY,EAASihB,EAAe,GAAGjJ,CAAI,EACrC,OAAAgJ,EAAc,GAAGhJ,CAAI,EACdhY,CACT,EACSghB,IACTF,EAAcC,CAAQ,EAAIC,GAEnBD,IAAa,QACtBD,EAAcC,CAAQ,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAc,EACtDF,IAAa,cACtBD,EAAcC,CAAQ,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtF,CACA,MAAO,CAAE,GAAGrB,EAAW,GAAGkB,CAAa,CACzC,CACA,SAASN,GAAcnB,EAAS,SAC9B,IAAI6B,GAAS9rB,EAAA,OAAO,yBAAyBiqB,EAAQ,MAAO,KAAK,IAApD,YAAAjqB,EAAuD,IAChE+rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACK9B,EAAQ,KAEjB6B,GAAS7rB,EAAA,OAAO,yBAAyBgqB,EAAS,KAAK,IAA9C,YAAAhqB,EAAiD,IAC1D8rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACK9B,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CC3FA,IAAI2N,GAAQ,CACV,IACA,SACA,MACA,OACA,KACA,KACA,MACA,QACA,QACA,KACA,MACA,KACA,IACA,SACA,OACA,MACA,IACF,EACIC,GAAYD,GAAM,OAAO,CAACE,EAAWvO,IAAS,CAChD,MAAM2B,EAAOhB,GAAW,aAAaX,CAAI,EAAE,EACrCwO,EAAO5O,aAAiB,CAACzc,EAAO6d,IAAiB,CACrD,KAAM,CAAE,QAAA8C,EAAS,GAAG2K,CAAc,EAAKtrB,EACjC4gB,EAAOD,EAAUnC,EAAO3B,EAC9B,OAAI,OAAO,OAAW,MACpB,OAAO,OAAO,IAAI,UAAU,CAAC,EAAI,IAEZne,MAAIkiB,EAAM,CAAE,GAAG0K,EAAgB,IAAKzN,EAAc,CAC3E,CAAC,EACD,OAAAwN,EAAK,YAAc,aAAaxO,CAAI,GAC7B,CAAE,GAAGuO,EAAW,CAACvO,CAAI,EAAGwO,CAAI,CACrC,EAAG,EAAE,EACL,SAASE,GAA4BC,EAAQr4B,EAAO,CAC9Cq4B,GAAQC,aAAmB,IAAMD,EAAO,cAAcr4B,CAAK,CAAC,CAClE,CCrCA,SAASu4B,GAAetuB,EAAU,CAChC,MAAMuuB,EAAcjB,SAAattB,CAAQ,EACzCutB,mBAAgB,IAAM,CACpBgB,EAAY,QAAUvuB,CACxB,CAAC,EACM0qB,UAAc,IAAM,IAAI5R,IAAI,OAAK,OAAA5iB,EAAAq4B,EAAY,UAAZ,YAAAr4B,EAAA,KAAAq4B,EAAsB,GAAGzV,IAAO,EAAE,CAC5E,CCLA,SAAS0V,GAAiBC,EAAqBC,EAAgB,mCAAY,SAAU,CACnF,MAAMC,EAAkBL,GAAeG,CAAmB,EAC1DlB,YAAgB,IAAM,CACpB,MAAMtiB,EAAiBlV,GAAU,CAC3BA,EAAM,MAAQ,UAChB44B,EAAgB54B,CAAK,CAEzB,EACA,OAAA24B,EAAc,iBAAiB,UAAWzjB,EAAe,CAAE,QAAS,GAAM,EACnE,IAAMyjB,EAAc,oBAAoB,UAAWzjB,EAAe,CAAE,QAAS,GAAM,CAC5F,EAAG,CAAC0jB,EAAiBD,CAAa,CAAC,CACrC,CCJA,IAAIE,GAAyB,mBACzBC,GAAiB,0BACjBC,GAAuB,sCACvBC,GAAgB,gCAChBC,GACAC,GAA0B1E,gBAAoB,CAChD,OAAwB,IAAI,IAC5B,uCAAwD,IAAI,IAC5D,SAA0B,IAAI,GAChC,CAAC,EACG2E,GAAmB7P,aACrB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CACJ,4BAAA0O,EAA8B,GAC9B,gBAAAR,EACA,qBAAAS,EACA,eAAAC,EACA,kBAAAC,EACA,UAAAC,EACA,GAAGC,CACT,EAAQ5sB,EACE6nB,EAAUI,aAAiBoE,EAAuB,EAClD,CAACxP,EAAMgQ,CAAO,EAAIjD,WAAe,IAAI,EACrCkC,GAAgBjP,GAAA,YAAAA,EAAM,iBAAiB,mCAAY,UACnD,EAAGiQ,CAAK,EAAIlD,WAAe,EAAE,EAC7BmD,EAAe9P,GAAgBY,EAAemP,GAAUH,EAAQG,CAAK,CAAC,EACtEC,EAAS,MAAM,KAAKpF,EAAQ,MAAM,EAClC,CAACqF,CAA4C,EAAI,CAAC,GAAGrF,EAAQ,sCAAsC,EAAE,MAAM,EAAE,EAC7GsF,EAAoDF,EAAO,QAAQC,CAA4C,EAC/G1vB,EAAQqf,EAAOoQ,EAAO,QAAQpQ,CAAI,EAAI,GACtCuQ,EAA8BvF,EAAQ,uCAAuC,KAAO,EACpFwF,EAAyB7vB,GAAS2vB,EAClCG,EAAqBC,GAAuBp6B,GAAU,CAC1D,MAAMq4B,EAASr4B,EAAM,OACfq6B,EAAwB,CAAC,GAAG3F,EAAQ,QAAQ,EAAE,KAAM4F,GAAWA,EAAO,SAASjC,CAAM,CAAC,EACxF,CAAC6B,GAA0BG,IAC/BhB,GAAA,MAAAA,EAAuBr5B,GACvBu5B,GAAA,MAAAA,EAAoBv5B,GACfA,EAAM,kBAAkBw5B,GAAA,MAAAA,IAC/B,EAAGb,CAAa,EACV4B,EAAeC,GAAiBx6B,GAAU,CAC9C,MAAMq4B,EAASr4B,EAAM,OACG,CAAC,GAAG00B,EAAQ,QAAQ,EAAE,KAAM4F,GAAWA,EAAO,SAASjC,CAAM,CAAC,IAEtFiB,GAAA,MAAAA,EAAiBt5B,GACjBu5B,GAAA,MAAAA,EAAoBv5B,GACfA,EAAM,kBAAkBw5B,GAAA,MAAAA,IAC/B,EAAGb,CAAa,EAChB,OAAAF,GAAkBz4B,GAAU,CACHqK,IAAUqqB,EAAQ,OAAO,KAAO,IAEvDkE,GAAA,MAAAA,EAAkB54B,GACd,CAACA,EAAM,kBAAoBw5B,IAC7Bx5B,EAAM,eAAc,EACpBw5B,EAAS,GAEb,EAAGb,CAAa,EAChBnB,YAAgB,IAAM,CACpB,GAAK9N,EACL,OAAI0P,IACE1E,EAAQ,uCAAuC,OAAS,IAC1DuE,GAA4BN,EAAc,KAAK,MAAM,cACrDA,EAAc,KAAK,MAAM,cAAgB,QAE3CjE,EAAQ,uCAAuC,IAAIhL,CAAI,GAEzDgL,EAAQ,OAAO,IAAIhL,CAAI,EACvB+Q,GAAc,EACP,IAAM,CACPrB,GAA+B1E,EAAQ,uCAAuC,OAAS,IACzFiE,EAAc,KAAK,MAAM,cAAgBM,GAE7C,CACF,EAAG,CAACvP,EAAMiP,EAAeS,EAA6B1E,CAAO,CAAC,EAC9D8C,YAAgB,IACP,IAAM,CACN9N,IACLgL,EAAQ,OAAO,OAAOhL,CAAI,EAC1BgL,EAAQ,uCAAuC,OAAOhL,CAAI,EAC1D+Q,GAAc,EAChB,EACC,CAAC/Q,EAAMgL,CAAO,CAAC,EAClB8C,YAAgB,IAAM,CACpB,MAAMkD,EAAe,IAAMf,EAAM,EAAE,EACnC,gBAAS,iBAAiBb,GAAgB4B,CAAY,EAC/C,IAAM,SAAS,oBAAoB5B,GAAgB4B,CAAY,CACxE,EAAG,EAAE,EACkBnvB,MACrBysB,GAAU,IACV,CACE,GAAGyB,EACH,IAAKG,EACL,MAAO,CACL,cAAeK,EAA8BC,EAAyB,OAAS,OAAS,OACxF,GAAGrtB,EAAM,KACnB,EACQ,eAAgBmnB,GAAqBnnB,EAAM,eAAgB0tB,EAAa,cAAc,EACtF,cAAevG,GAAqBnnB,EAAM,cAAe0tB,EAAa,aAAa,EACnF,qBAAsBvG,GACpBnnB,EAAM,qBACNstB,EAAmB,oBAC7B,CACA,CACA,CACE,CACF,EACAhB,GAAiB,YAAcN,GAC/B,IAAI8B,GAAc,yBACdC,GAAyBtR,aAAiB,CAACzc,EAAO6d,IAAiB,CACrE,MAAMgK,EAAUI,aAAiBoE,EAAuB,EAClDzlB,EAAM8jB,SAAa,IAAI,EACvBqC,EAAe9P,GAAgBY,EAAcjX,CAAG,EACtD+jB,mBAAgB,IAAM,CACpB,MAAM9N,EAAOjW,EAAI,QACjB,GAAIiW,EACF,OAAAgL,EAAQ,SAAS,IAAIhL,CAAI,EAClB,IAAM,CACXgL,EAAQ,SAAS,OAAOhL,CAAI,CAC9B,CAEJ,EAAG,CAACgL,EAAQ,QAAQ,CAAC,EACEnpB,MAAIysB,GAAU,IAAK,CAAE,GAAGnrB,EAAO,IAAK+sB,EAAc,CAC3E,CAAC,EACDgB,GAAuB,YAAcD,GACrC,SAASP,GAAsBf,EAAsBV,EAAgB,mCAAY,SAAU,CACzF,MAAMkC,EAA2BtC,GAAec,CAAoB,EAC9DyB,EAA8BvD,SAAa,EAAK,EAChDwD,EAAiBxD,SAAa,IAAM,CAC1C,CAAC,EACDC,mBAAgB,IAAM,CACpB,MAAMwD,EAAqBh7B,GAAU,CACnC,GAAIA,EAAM,QAAU,CAAC86B,EAA4B,QAAS,CACxD,IAAIG,EAA4C,UAAW,CACzDC,GACEnC,GACA8B,EACAM,EACA,CAAE,SAAU,EAAI,CAC5B,CACQ,EAEA,MAAMA,EAAc,CAAE,cAAen7B,CAAK,EACtCA,EAAM,cAAgB,SACxB24B,EAAc,oBAAoB,QAASoC,EAAe,OAAO,EACjEA,EAAe,QAAUE,EACzBtC,EAAc,iBAAiB,QAASoC,EAAe,QAAS,CAAE,KAAM,GAAM,GAE9EE,EAAyC,CAE7C,MACEtC,EAAc,oBAAoB,QAASoC,EAAe,OAAO,EAEnED,EAA4B,QAAU,EACxC,EACMM,EAAU,OAAO,WAAW,IAAM,CACtCzC,EAAc,iBAAiB,cAAeqC,CAAiB,CACjE,EAAG,CAAC,EACJ,MAAO,IAAM,CACX,OAAO,aAAaI,CAAO,EAC3BzC,EAAc,oBAAoB,cAAeqC,CAAiB,EAClErC,EAAc,oBAAoB,QAASoC,EAAe,OAAO,CACnE,CACF,EAAG,CAACpC,EAAekC,CAAwB,CAAC,EACrC,CAEL,qBAAsB,IAAMC,EAA4B,QAAU,EACtE,CACA,CACA,SAASN,GAAgBlB,EAAgBX,EAAgB,mCAAY,SAAU,CAC7E,MAAM0C,EAAqB9C,GAAee,CAAc,EAClDgC,EAA4B/D,SAAa,EAAK,EACpDC,mBAAgB,IAAM,CACpB,MAAM+D,EAAev7B,GAAU,CACzBA,EAAM,QAAU,CAACs7B,EAA0B,SAE7CJ,GAA6BlC,GAAeqC,EADxB,CAAE,cAAer7B,CAAK,EACmC,CAC3E,SAAU,EACpB,CAAS,CAEL,EACA,OAAA24B,EAAc,iBAAiB,UAAW4C,CAAW,EAC9C,IAAM5C,EAAc,oBAAoB,UAAW4C,CAAW,CACvE,EAAG,CAAC5C,EAAe0C,CAAkB,CAAC,EAC/B,CACL,eAAgB,IAAMC,EAA0B,QAAU,GAC1D,cAAe,IAAMA,EAA0B,QAAU,EAC7D,CACA,CACA,SAASb,IAAiB,CACxB,MAAMz6B,EAAQ,IAAI,YAAY84B,EAAc,EAC5C,SAAS,cAAc94B,CAAK,CAC9B,CACA,SAASk7B,GAA6Br9B,EAAM29B,EAASC,EAAQ,CAAE,SAAAC,CAAQ,EAAI,CACzE,MAAMrD,EAASoD,EAAO,cAAc,OAC9Bz7B,EAAQ,IAAI,YAAYnC,EAAM,CAAE,QAAS,GAAO,WAAY,GAAM,OAAA49B,EAAQ,EAC5ED,GAASnD,EAAO,iBAAiBx6B,EAAM29B,EAAS,CAAE,KAAM,GAAM,EAC9DE,EACFtD,GAA4BC,EAAQr4B,CAAK,EAEzCq4B,EAAO,cAAcr4B,CAAK,CAE9B,CC3MA,IAAI27B,GAAqB,8BACrBC,GAAuB,gCACvBC,GAAgB,CAAE,QAAS,GAAO,WAAY,EAAI,EAClDC,GAAmB,aACnBC,GAAazS,aAAiB,CAACzc,EAAO6d,IAAiB,CACzD,KAAM,CACJ,KAAAsR,EAAO,GACP,QAAAC,EAAU,GACV,iBAAkBC,EAClB,mBAAoBC,EACpB,GAAGC,CACP,EAAMvvB,EACE,CAACwvB,EAAWC,CAAY,EAAI7F,WAAe,IAAI,EAC/C8F,EAAmBhE,GAAe2D,CAAoB,EACtDM,EAAqBjE,GAAe4D,CAAsB,EAC1DznB,EAAwB6iB,SAAa,IAAI,EACzCqC,EAAe9P,GAAgBY,EAAehB,GAAS4S,EAAa5S,CAAI,CAAC,EACzE+S,EAAalF,SAAa,CAC9B,OAAQ,GACR,OAAQ,CACN,KAAK,OAAS,EAChB,EACA,QAAS,CACP,KAAK,OAAS,EAChB,CACJ,CAAG,EAAE,QACHC,YAAgB,IAAM,CACpB,GAAIyE,EAAS,CACX,IAAIS,EAAiB,SAAS18B,EAAO,CACnC,GAAIy8B,EAAW,QAAU,CAACJ,EAAW,OACrC,MAAMhE,EAASr4B,EAAM,OACjBq8B,EAAU,SAAShE,CAAM,EAC3B3jB,EAAsB,QAAU2jB,EAEhCsE,GAAMjoB,EAAsB,QAAS,CAAE,OAAQ,EAAI,CAAE,CAEzD,EAAGkoB,EAAkB,SAAS58B,EAAO,CACnC,GAAIy8B,EAAW,QAAU,CAACJ,EAAW,OACrC,MAAMQ,EAAgB78B,EAAM,cACxB68B,IAAkB,OACjBR,EAAU,SAASQ,CAAa,GACnCF,GAAMjoB,EAAsB,QAAS,CAAE,OAAQ,EAAI,CAAE,EAEzD,EAAGooB,EAAmB,SAASC,EAAW,CAExC,GADuB,SAAS,gBACT,SAAS,KAChC,UAAWC,KAAYD,EACjBC,EAAS,aAAa,OAAS,GAAGL,GAAMN,CAAS,CAEzD,EAEA,SAAS,iBAAiB,UAAWK,CAAc,EACnD,SAAS,iBAAiB,WAAYE,CAAe,EACrD,MAAMK,EAAmB,IAAI,iBAAiBH,CAAgB,EAC9D,OAAIT,GAAWY,EAAiB,QAAQZ,EAAW,CAAE,UAAW,GAAM,QAAS,GAAM,EAC9E,IAAM,CACX,SAAS,oBAAoB,UAAWK,CAAc,EACtD,SAAS,oBAAoB,WAAYE,CAAe,EACxDK,EAAiB,WAAU,CAC7B,CACF,CACF,EAAG,CAAChB,EAASI,EAAWI,EAAW,MAAM,CAAC,EAC1CjF,YAAgB,IAAM,CACpB,GAAI6E,EAAW,CACba,GAAiB,IAAIT,CAAU,EAC/B,MAAMU,EAA2B,SAAS,cAE1C,GAAI,CADwBd,EAAU,SAASc,CAAwB,EAC7C,CACxB,MAAMC,EAAa,IAAI,YAAYzB,GAAoBE,EAAa,EACpEQ,EAAU,iBAAiBV,GAAoBY,CAAgB,EAC/DF,EAAU,cAAce,CAAU,EAC7BA,EAAW,mBACdC,GAAWC,GAAYC,GAAsBlB,CAAS,CAAC,EAAG,CAAE,OAAQ,GAAM,EACtE,SAAS,gBAAkBc,GAC7BR,GAAMN,CAAS,EAGrB,CACA,MAAO,IAAM,CACXA,EAAU,oBAAoBV,GAAoBY,CAAgB,EAClE,WAAW,IAAM,CACf,MAAMiB,EAAe,IAAI,YAAY5B,GAAsBC,EAAa,EACxEQ,EAAU,iBAAiBT,GAAsBY,CAAkB,EACnEH,EAAU,cAAcmB,CAAY,EAC/BA,EAAa,kBAChBb,GAAMQ,GAA4B,SAAS,KAAM,CAAE,OAAQ,GAAM,EAEnEd,EAAU,oBAAoBT,GAAsBY,CAAkB,EACtEU,GAAiB,OAAOT,CAAU,CACpC,EAAG,CAAC,CACN,CACF,CACF,EAAG,CAACJ,EAAWE,EAAkBC,EAAoBC,CAAU,CAAC,EAChE,MAAMvnB,EAAgB6U,cACnB/pB,GAAU,CAET,GADI,CAACg8B,GAAQ,CAACC,GACVQ,EAAW,OAAQ,OACvB,MAAMgB,EAAWz9B,EAAM,MAAQ,OAAS,CAACA,EAAM,QAAU,CAACA,EAAM,SAAW,CAACA,EAAM,QAC5E09B,EAAiB,SAAS,cAChC,GAAID,GAAYC,EAAgB,CAC9B,MAAMC,EAAa39B,EAAM,cACnB,CAAC49B,EAAOC,CAAI,EAAIC,GAAiBH,CAAU,EACfC,GAASC,EAIrC,CAAC79B,EAAM,UAAY09B,IAAmBG,GACxC79B,EAAM,eAAc,EAChBg8B,GAAMW,GAAMiB,EAAO,CAAE,OAAQ,EAAI,CAAE,GAC9B59B,EAAM,UAAY09B,IAAmBE,IAC9C59B,EAAM,eAAc,EAChBg8B,GAAMW,GAAMkB,EAAM,CAAE,OAAQ,EAAI,CAAE,GAPpCH,IAAmBC,GAAY39B,EAAM,eAAc,CAU3D,CACF,EACA,CAACg8B,EAAMC,EAASQ,EAAW,MAAM,CACrC,EACE,OAAuBlxB,MAAIysB,GAAU,IAAK,CAAE,SAAU,GAAI,GAAGoE,EAAY,IAAKxC,EAAc,UAAW1kB,CAAa,CAAE,CACxH,CAAC,EACD6mB,GAAW,YAAcD,GACzB,SAASuB,GAAWU,EAAY,CAAE,OAAAC,EAAS,EAAK,EAAK,GAAI,CACvD,MAAMb,EAA2B,SAAS,cAC1C,UAAWc,KAAaF,EAEtB,GADApB,GAAMsB,EAAW,CAAE,OAAAD,EAAQ,EACvB,SAAS,gBAAkBb,EAA0B,MAE7D,CACA,SAASW,GAAiBzB,EAAW,CACnC,MAAM0B,EAAaR,GAAsBlB,CAAS,EAC5CuB,EAAQM,GAAYH,EAAY1B,CAAS,EACzCwB,EAAOK,GAAYH,EAAW,QAAO,EAAI1B,CAAS,EACxD,MAAO,CAACuB,EAAOC,CAAI,CACrB,CACA,SAASN,GAAsBlB,EAAW,CACxC,MAAM8B,EAAQ,GACRC,EAAS,SAAS,iBAAiB/B,EAAW,WAAW,aAAc,CAC3E,WAAa3S,GAAS,CACpB,MAAM2U,EAAgB3U,EAAK,UAAY,SAAWA,EAAK,OAAS,SAChE,OAAIA,EAAK,UAAYA,EAAK,QAAU2U,EAAsB,WAAW,YAC9D3U,EAAK,UAAY,EAAI,WAAW,cAAgB,WAAW,WACpE,CACJ,CAAG,EACD,KAAO0U,EAAO,SAAQ,GAAID,EAAM,KAAKC,EAAO,WAAW,EACvD,OAAOD,CACT,CACA,SAASD,GAAYI,EAAUjC,EAAW,CACxC,UAAWjS,KAAWkU,EACpB,GAAI,CAACC,GAASnU,EAAS,CAAE,KAAMiS,CAAS,CAAE,EAAG,OAAOjS,CAExD,CACA,SAASmU,GAAS7U,EAAM,CAAE,KAAA8U,GAAQ,CAChC,GAAI,iBAAiB9U,CAAI,EAAE,aAAe,SAAU,MAAO,GAC3D,KAAOA,GAAM,CACX,GAAI8U,IAAS,QAAU9U,IAAS8U,EAAM,MAAO,GAC7C,GAAI,iBAAiB9U,CAAI,EAAE,UAAY,OAAQ,MAAO,GACtDA,EAAOA,EAAK,aACd,CACA,MAAO,EACT,CACA,SAAS+U,GAAkBrU,EAAS,CAClC,OAAOA,aAAmB,kBAAoB,WAAYA,CAC5D,CACA,SAASuS,GAAMvS,EAAS,CAAE,OAAA4T,EAAS,EAAK,EAAK,GAAI,CAC/C,GAAI5T,GAAWA,EAAQ,MAAO,CAC5B,MAAM+S,EAA2B,SAAS,cAC1C/S,EAAQ,MAAM,CAAE,cAAe,EAAI,CAAE,EACjCA,IAAY+S,GAA4BsB,GAAkBrU,CAAO,GAAK4T,GACxE5T,EAAQ,OAAM,CAClB,CACF,CACA,IAAI8S,GAAmBwB,GAAsB,EAC7C,SAASA,IAAyB,CAChC,IAAIC,EAAQ,GACZ,MAAO,CACL,IAAIlC,EAAY,CACd,MAAMmC,EAAmBD,EAAM,CAAC,EAC5BlC,IAAemC,IACjBA,GAAA,MAAAA,EAAkB,SAEpBD,EAAQE,GAAYF,EAAOlC,CAAU,EACrCkC,EAAM,QAAQlC,CAAU,CAC1B,EACA,OAAOA,EAAY,OACjBkC,EAAQE,GAAYF,EAAOlC,CAAU,GACrCt8B,EAAAw+B,EAAM,CAAC,IAAP,MAAAx+B,EAAU,QACZ,CACJ,CACA,CACA,SAAS0+B,GAAYlnB,EAAOsY,EAAM,CAChC,MAAM6O,EAAe,CAAC,GAAGnnB,CAAK,EACxBtN,EAAQy0B,EAAa,QAAQ7O,CAAI,EACvC,OAAI5lB,IAAU,IACZy0B,EAAa,OAAOz0B,EAAO,CAAC,EAEvBy0B,CACT,CACA,SAASxB,GAAYyB,EAAO,CAC1B,OAAOA,EAAM,OAAQ9O,GAASA,EAAK,UAAY,GAAG,CACpD,CCvMA,IAAI+O,GAAc,SACdC,GAAS3V,aAAiB,CAACzc,EAAO6d,IAAiB,OACrD,KAAM,CAAE,UAAWwU,EAAe,GAAGC,CAAW,EAAKtyB,EAC/C,CAACkC,EAASC,CAAU,EAAIynB,WAAe,EAAK,EAClDC,GAAgB,IAAM1nB,EAAW,EAAI,EAAG,EAAE,EAC1C,MAAMqtB,EAAY6C,GAAiBnwB,KAAW5O,EAAA,mCAAY,WAAZ,YAAAA,EAAsB,MACpE,OAAOk8B,EAAYvnB,GAAS,aAA6BvJ,MAAIysB,GAAU,IAAK,CAAE,GAAGmH,EAAa,IAAKzU,CAAY,CAAE,EAAG2R,CAAS,EAAI,IACnI,CAAC,EACD4C,GAAO,YAAcD,GCPrB,SAASI,GAAgBC,EAAcC,EAAS,CAC9C,OAAOC,aAAiB,CAACC,EAAOx/B,IACZs/B,EAAQE,CAAK,EAAEx/B,CAAK,GAClBw/B,EACnBH,CAAY,CACjB,CAGA,IAAII,GAAY5yB,GAAU,CACxB,KAAM,CAAE,QAAA6yB,EAAS,SAAArnB,CAAQ,EAAKxL,EACxB8yB,EAAWC,GAAYF,CAAO,EAC9BxU,EAAQ,OAAO7S,GAAa,WAAaA,EAAS,CAAE,QAASsnB,EAAS,SAAS,CAAE,EAAIE,WAAgB,KAAKxnB,CAAQ,EAClH5E,EAAMqW,GAAgB6V,EAAS,IAAKpU,GAAcL,CAAK,CAAC,EAE9D,OADmB,OAAO7S,GAAa,YAClBsnB,EAAS,UAAYG,eAAoB5U,EAAO,CAAE,IAAAzX,CAAG,CAAE,EAAI,IAClF,EACAgsB,GAAS,YAAc,WACvB,SAASG,GAAYF,EAAS,CAC5B,KAAM,CAAChW,EAAMgQ,CAAO,EAAIqG,WAAe,EACjCC,EAAYC,SAAc,IAAI,EAC9BC,EAAiBD,SAAcP,CAAO,EACtCS,EAAuBF,SAAc,MAAM,EAC3CZ,EAAeK,EAAU,UAAY,YACrC,CAACF,EAAOY,CAAI,EAAIhB,GAAgBC,EAAc,CAClD,QAAS,CACP,QAAS,YACT,cAAe,kBACrB,EACI,iBAAkB,CAChB,MAAO,UACP,cAAe,WACrB,EACI,UAAW,CACT,MAAO,SACb,CACA,CAAG,EACDgB,mBAAiB,IAAM,CACrB,MAAMC,EAAuBC,GAAiBP,EAAU,OAAO,EAC/DG,EAAqB,QAAUX,IAAU,UAAYc,EAAuB,MAC9E,EAAG,CAACd,CAAK,CAAC,EACV9I,GAAgB,IAAM,CACpB,MAAMvjB,EAAS6sB,EAAU,QACnBQ,EAAaN,EAAe,QAElC,GAD0BM,IAAed,EAClB,CACrB,MAAMe,EAAoBN,EAAqB,QACzCG,EAAuBC,GAAiBptB,CAAM,EAChDusB,EACFU,EAAK,OAAO,EACHE,IAAyB,SAAUntB,GAAA,YAAAA,EAAQ,WAAY,OAChEitB,EAAK,SAAS,EAIZA,EADEI,GADgBC,IAAsBH,EAEnC,gBAEA,SAFe,EAKxBJ,EAAe,QAAUR,CAC3B,CACF,EAAG,CAACA,EAASU,CAAI,CAAC,EAClB1J,GAAgB,IAAM,CACpB,GAAIhN,EAAM,CACR,IAAIpY,EACJ,MAAMovB,EAAchX,EAAK,cAAc,aAAe,OAChDiX,EAAsB3gC,GAAU,CAEpC,MAAM4gC,EADuBL,GAAiBP,EAAU,OAAO,EACf,SAAS,IAAI,OAAOhgC,EAAM,aAAa,CAAC,EACxF,GAAIA,EAAM,SAAW0pB,GAAQkX,IAC3BR,EAAK,eAAe,EAChB,CAACF,EAAe,SAAS,CAC3B,MAAMW,EAAkBnX,EAAK,MAAM,kBACnCA,EAAK,MAAM,kBAAoB,WAC/BpY,EAAYovB,EAAY,WAAW,IAAM,CACnChX,EAAK,MAAM,oBAAsB,aACnCA,EAAK,MAAM,kBAAoBmX,EAEnC,CAAC,CACH,CAEJ,EACMC,EAAwB9gC,GAAU,CAClCA,EAAM,SAAW0pB,IACnByW,EAAqB,QAAUI,GAAiBP,EAAU,OAAO,EAErE,EACA,OAAAtW,EAAK,iBAAiB,iBAAkBoX,CAAoB,EAC5DpX,EAAK,iBAAiB,kBAAmBiX,CAAkB,EAC3DjX,EAAK,iBAAiB,eAAgBiX,CAAkB,EACjD,IAAM,CACXD,EAAY,aAAapvB,CAAS,EAClCoY,EAAK,oBAAoB,iBAAkBoX,CAAoB,EAC/DpX,EAAK,oBAAoB,kBAAmBiX,CAAkB,EAC9DjX,EAAK,oBAAoB,eAAgBiX,CAAkB,CAC7D,CACF,MACEP,EAAK,eAAe,CAExB,EAAG,CAAC1W,EAAM0W,CAAI,CAAC,EACR,CACL,UAAW,CAAC,UAAW,kBAAkB,EAAE,SAASZ,CAAK,EACzD,IAAKuB,cAAoBlH,GAAU,CACjCmG,EAAU,QAAUnG,EAAQ,iBAAiBA,CAAK,EAAI,KACtDH,EAAQG,CAAK,CACf,EAAG,EAAE,CACT,CACA,CACA,SAAS0G,GAAiBptB,EAAQ,CAChC,OAAOA,GAAA,YAAAA,EAAQ,gBAAiB,MAClC,CACA,SAASoY,GAAcnB,EAAS,SAC9B,IAAI6B,GAAS9rB,EAAA,OAAO,yBAAyBiqB,EAAQ,MAAO,KAAK,IAApD,YAAAjqB,EAAuD,IAChE+rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACK9B,EAAQ,KAEjB6B,GAAS7rB,EAAA,OAAO,yBAAyBgqB,EAAS,KAAK,IAA9C,YAAAhqB,EAAiD,IAC1D8rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACK9B,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CChIA,IAAIuD,GAAQ,EAKZ,SAASqT,IAAiB,CACxBxJ,YAAgB,IAAM,CACpB,MAAMyJ,EAAa,SAAS,iBAAiB,0BAA0B,EACvE,gBAAS,KAAK,sBAAsB,aAAcA,EAAW,CAAC,GAAKC,IAAkB,EACrF,SAAS,KAAK,sBAAsB,YAAaD,EAAW,CAAC,GAAKC,IAAkB,EACpFvT,KACO,IAAM,CACPA,KAAU,GACZ,SAAS,iBAAiB,0BAA0B,EAAE,QAASjE,GAASA,EAAK,QAAQ,EAEvFiE,IACF,CACF,EAAG,EAAE,CACP,CACA,SAASuT,IAAmB,CAC1B,MAAM9W,EAAU,SAAS,cAAc,MAAM,EAC7C,OAAAA,EAAQ,aAAa,yBAA0B,EAAE,EACjDA,EAAQ,SAAW,EACnBA,EAAQ,MAAM,QAAU,OACxBA,EAAQ,MAAM,QAAU,IACxBA,EAAQ,MAAM,SAAW,QACzBA,EAAQ,MAAM,cAAgB,OACvBA,CACT,CCDO,IAAI+W,GAAW,UAAW,CAC/B,OAAAA,GAAW,OAAO,QAAU,SAAkB1tD,EAAG,CAC7C,QAAS2tD,EAAGz5B,EAAI,EAAGt0B,EAAI,UAAU,OAAQs0B,EAAIt0B,EAAGs0B,IAAK,CACjDy5B,EAAI,UAAUz5B,CAAC,EACf,QAASr0B,KAAK8tD,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG9tD,CAAC,IAAGG,EAAEH,CAAC,EAAI8tD,EAAE9tD,CAAC,EAC/E,CACA,OAAOG,CACX,EACO0tD,GAAS,MAAM,KAAM,SAAS,CACvC,EAEO,SAASE,GAAOD,EAAG7sD,EAAG,CAC3B,IAAId,EAAI,GACR,QAASH,KAAK8tD,EAAO,OAAO,UAAU,eAAe,KAAKA,EAAG9tD,CAAC,GAAKiB,EAAE,QAAQjB,CAAC,EAAI,IAC9EG,EAAEH,CAAC,EAAI8tD,EAAE9tD,CAAC,GACd,GAAI8tD,GAAK,MAAQ,OAAO,OAAO,uBAA0B,WACrD,QAASz5B,EAAI,EAAGr0B,EAAI,OAAO,sBAAsB8tD,CAAC,EAAGz5B,EAAIr0B,EAAE,OAAQq0B,IAC3DpzB,EAAE,QAAQjB,EAAEq0B,CAAC,CAAC,EAAI,GAAK,OAAO,UAAU,qBAAqB,KAAKy5B,EAAG9tD,EAAEq0B,CAAC,CAAC,IACzEl0B,EAAEH,EAAEq0B,CAAC,CAAC,EAAIy5B,EAAE9tD,EAAEq0B,CAAC,CAAC,GAE5B,OAAOl0B,CACT,CAiKO,SAAS6tD,GAAcC,EAAIC,EAAMC,EAAM,CAC5C,GAAIA,GAAQ,UAAU,SAAW,EAAG,QAAS95B,EAAI,EAAGv0B,EAAIouD,EAAK,OAAQE,EAAI/5B,EAAIv0B,EAAGu0B,KACxE+5B,GAAM,EAAE/5B,KAAK65B,MACRE,IAAIA,EAAK,MAAM,UAAU,MAAM,KAAKF,EAAM,EAAG75B,CAAC,GACnD+5B,EAAG/5B,CAAC,EAAI65B,EAAK75B,CAAC,GAGtB,OAAO45B,EAAG,OAAOG,GAAM,MAAM,UAAU,MAAM,KAAKF,CAAI,CAAC,CACzD,CC7NO,IAAIG,GAAqB,4BACrBC,GAAqB,0BACrBC,GAAwB,0BAKxBC,GAAyB,iCCM7B,SAASC,GAAUtuB,EAAKiL,EAAO,CAClC,OAAI,OAAOjL,GAAQ,WACfA,EAAIiL,CAAK,EAEJjL,IACLA,EAAI,QAAUiL,GAEXjL,CACX,CCNO,SAAS8kB,GAAeyJ,EAAc/3B,EAAU,CACnD,IAAIwJ,EAAMlU,WAAS,UAAY,CAAE,MAAQ,CAErC,MAAOyiC,EAEP,SAAU/3B,EAEV,OAAQ,CACJ,IAAI,SAAU,CACV,OAAOwJ,EAAI,KACf,EACA,IAAI,QAAQiL,EAAO,CACf,IAAImf,EAAOpqB,EAAI,MACXoqB,IAASnf,IACTjL,EAAI,MAAQiL,EACZjL,EAAI,SAASiL,EAAOmf,CAAI,EAEhC,CACZ,CACA,CAAQ,CAAC,EAAE,CAAC,EAER,OAAApqB,EAAI,SAAWxJ,EACRwJ,EAAI,MACf,CCnCA,IAAIwuB,GAA4B,OAAO,OAAW,IAAc7L,kBAAwBoB,YACpF0K,GAAgB,IAAI,QAejB,SAASC,GAAa1Y,EAAMnW,EAAc,CAC7C,IAAIklB,EAAcD,GAA+B,KAAM,SAAU6J,EAAU,CACvE,OAAO3Y,EAAK,QAAQ,SAAUhW,EAAK,CAAE,OAAOsuB,GAAUtuB,EAAK2uB,CAAQ,CAAG,CAAC,CAC3E,CAAC,EAED,OAAAH,GAA0B,UAAY,CAClC,IAAII,EAAWH,GAAc,IAAI1J,CAAW,EAC5C,GAAI6J,EAAU,CACV,IAAIC,EAAa,IAAI,IAAID,CAAQ,EAC7BE,EAAa,IAAI,IAAI9Y,CAAI,EACzB+Y,EAAYhK,EAAY,QAC5B8J,EAAW,QAAQ,SAAU7uB,EAAK,CACzB8uB,EAAW,IAAI9uB,CAAG,GACnBsuB,GAAUtuB,EAAK,IAAI,CAE3B,CAAC,EACD8uB,EAAW,QAAQ,SAAU9uB,EAAK,CACzB6uB,EAAW,IAAI7uB,CAAG,GACnBsuB,GAAUtuB,EAAK+uB,CAAS,CAEhC,CAAC,CACL,CACAN,GAAc,IAAI1J,EAAa/O,CAAI,CACvC,EAAG,CAACA,CAAI,CAAC,EACF+O,CACX,CC3CA,SAASiK,GAAKxuD,EAAG,CACb,OAAOA,CACX,CACA,SAASyuD,GAAkBC,EAAUC,EAAY,CACzCA,IAAe,SAAUA,EAAaH,IAC1C,IAAII,EAAS,GACTC,EAAW,GACXC,EAAS,CACT,KAAM,UAAY,CACd,GAAID,EACA,MAAM,IAAI,MAAM,kGAAkG,EAEtH,OAAID,EAAO,OACAA,EAAOA,EAAO,OAAS,CAAC,EAE5BF,CACX,EACA,UAAW,SAAUr4B,EAAM,CACvB,IAAI2lB,EAAO2S,EAAWt4B,EAAMw4B,CAAQ,EACpC,OAAAD,EAAO,KAAK5S,CAAI,EACT,UAAY,CACf4S,EAASA,EAAO,OAAO,SAAUhvD,EAAG,CAAE,OAAOA,IAAMo8C,CAAM,CAAC,CAC9D,CACJ,EACA,iBAAkB,SAAUp2C,EAAI,CAE5B,IADAipD,EAAW,GACJD,EAAO,QAAQ,CAClB,IAAIG,EAAMH,EACVA,EAAS,GACTG,EAAI,QAAQnpD,CAAE,CAClB,CACAgpD,EAAS,CACL,KAAM,SAAUhvD,EAAG,CAAE,OAAOgG,EAAGhG,CAAC,CAAG,EACnC,OAAQ,UAAY,CAAE,OAAOgvD,CAAQ,CACrD,CACQ,EACA,aAAc,SAAUhpD,EAAI,CACxBipD,EAAW,GACX,IAAIG,EAAe,GACnB,GAAIJ,EAAO,OAAQ,CACf,IAAIG,EAAMH,EACVA,EAAS,GACTG,EAAI,QAAQnpD,CAAE,EACdopD,EAAeJ,CACnB,CACA,IAAIK,EAAe,UAAY,CAC3B,IAAIF,EAAMC,EACVA,EAAe,GACfD,EAAI,QAAQnpD,CAAE,CAClB,EACIspD,EAAQ,UAAY,CAAE,OAAO,QAAQ,QAAO,EAAG,KAAKD,CAAY,CAAG,EACvEC,EAAK,EACLN,EAAS,CACL,KAAM,SAAU,EAAG,CACfI,EAAa,KAAK,CAAC,EACnBE,EAAK,CACT,EACA,OAAQ,SAAUC,EAAQ,CACtB,OAAAH,EAAeA,EAAa,OAAOG,CAAM,EAClCP,CACX,CAChB,CACQ,CACR,EACI,OAAOE,CACX,CAMO,SAASM,GAAoBrmC,EAAS,CACrCA,IAAY,SAAUA,EAAU,IACpC,IAAI+lC,EAASL,GAAkB,IAAI,EACnC,OAAAK,EAAO,QAAU5B,GAAS,CAAE,MAAO,GAAM,IAAK,EAAK,EAAInkC,CAAO,EACvD+lC,CACX,CC3EA,IAAIO,GAAU,SAAUnjC,EAAI,CACxB,IAAIojC,EAAUpjC,EAAG,QAASsK,EAAO42B,GAAOlhC,EAAI,CAAC,SAAS,CAAC,EACvD,GAAI,CAACojC,EACD,MAAM,IAAI,MAAM,oEAAoE,EAExF,IAAIC,EAASD,EAAQ,KAAI,EACzB,GAAI,CAACC,EACD,MAAM,IAAI,MAAM,0BAA0B,EAE9C,OAAOC,gBAAoBD,EAAQrC,GAAS,GAAI12B,CAAI,CAAC,CACzD,EACA64B,GAAQ,gBAAkB,GACnB,SAASI,GAAcX,EAAQY,EAAU,CAC5C,OAAAZ,EAAO,UAAUY,CAAQ,EAClBL,EACX,CChBO,IAAIM,GAAYP,GAAmB,ECItCQ,GAAU,UAAY,CAE1B,EAIIC,GAAexa,aAAiB,SAAUzc,EAAOk3B,EAAW,CAC5D,IAAItwB,EAAM8jB,SAAa,IAAI,EACvBp3B,EAAKs2B,WAAe,CACpB,gBAAiBoN,GACjB,eAAgBA,GAChB,mBAAoBA,EAC5B,CAAK,EAAGG,EAAY7jC,EAAG,CAAC,EAAG8jC,EAAe9jC,EAAG,CAAC,EACtC+jC,EAAer3B,EAAM,aAAcwL,EAAWxL,EAAM,SAAUnD,EAAYmD,EAAM,UAAWs3B,EAAkBt3B,EAAM,gBAAiBu3B,EAAUv3B,EAAM,QAASw3B,EAASx3B,EAAM,OAAQ02B,EAAU12B,EAAM,QAASy3B,EAAaz3B,EAAM,WAAY03B,EAAc13B,EAAM,YAAa23B,EAAQ33B,EAAM,MAAO43B,EAAiB53B,EAAM,eAAgBzM,EAAKyM,EAAM,GAAI63B,EAAYtkC,IAAO,OAAS,MAAQA,EAAIukC,EAAU93B,EAAM,QAASpC,EAAO42B,GAAOx0B,EAAO,CAAC,eAAgB,WAAY,YAAa,kBAAmB,UAAW,SAAU,UAAW,aAAc,cAAe,QAAS,iBAAkB,KAAM,SAAS,CAAC,EACnlBy2B,EAAUC,EACVqB,EAAezC,GAAa,CAAC1uB,EAAKswB,CAAS,CAAC,EAC5Cc,EAAiB1D,GAASA,GAAS,GAAI12B,CAAI,EAAGu5B,CAAS,EAC3D,OAAQP,gBAAoB/X,WAAgB,KACxC0Y,GAAYX,gBAAoBH,EAAS,CAAE,QAASM,GAAW,gBAAiBO,EAAiB,OAAQE,EAAQ,WAAYC,EAAY,YAAaC,EAAa,MAAOC,EAAO,aAAcP,EAAc,eAAgB,CAAC,CAACQ,EAAgB,QAAShxB,EAAK,QAASkxB,CAAO,CAAE,EAC/QT,EAAgB9Y,eAAmBP,WAAe,KAAKxS,CAAQ,EAAG8oB,GAASA,GAAS,GAAI0D,CAAc,EAAG,CAAE,IAAKD,CAAY,CAAE,CAAC,EAAMnB,gBAAoBiB,EAAWvD,GAAS,GAAI0D,EAAgB,CAAE,UAAWn7B,EAAW,IAAKk7B,CAAY,CAAE,EAAGvsB,CAAQ,CAAE,CACjQ,CAAC,EACDyrB,GAAa,aAAe,CACxB,QAAS,GACT,gBAAiB,GACjB,MAAO,EACX,EACAA,GAAa,WAAa,CACtB,UAAWlC,GACX,UAAWD,EACf,EC9BO,IAAImD,GAAW,UAAY,CAI9B,GAAI,OAAO,kBAAsB,IAC7B,OAAO,iBAGf,ECXA,SAASC,IAAe,CACpB,GAAI,CAAC,SACD,OAAO,KACX,IAAIvsB,EAAM,SAAS,cAAc,OAAO,EACxCA,EAAI,KAAO,WACX,IAAIwsB,EAAQF,GAAQ,EACpB,OAAIE,GACAxsB,EAAI,aAAa,QAASwsB,CAAK,EAE5BxsB,CACX,CACA,SAASysB,GAAazsB,EAAK0sB,EAAK,CAExB1sB,EAAI,WAEJA,EAAI,WAAW,QAAU0sB,EAGzB1sB,EAAI,YAAY,SAAS,eAAe0sB,CAAG,CAAC,CAEpD,CACA,SAASC,GAAe3sB,EAAK,CACzB,IAAIxP,EAAO,SAAS,MAAQ,SAAS,qBAAqB,MAAM,EAAE,CAAC,EACnEA,EAAK,YAAYwP,CAAG,CACxB,CACO,IAAI4sB,GAAsB,UAAY,CACzC,IAAIC,EAAU,EACVC,EAAa,KACjB,MAAO,CACH,IAAK,SAAUr8B,EAAO,CACdo8B,GAAW,IACNC,EAAaP,QACdE,GAAaK,EAAYr8B,CAAK,EAC9Bk8B,GAAeG,CAAU,GAGjCD,GACJ,EACA,OAAQ,UAAY,CAChBA,IACI,CAACA,GAAWC,IACZA,EAAW,YAAcA,EAAW,WAAW,YAAYA,CAAU,EACrEA,EAAa,KAErB,CACR,CACA,ECpCWC,GAAqB,UAAY,CACxC,IAAIC,EAAQJ,GAAmB,EAC/B,OAAO,SAAUjyB,EAAQsyB,EAAW,CAChCjO,YAAgB,UAAY,CACxB,OAAAgO,EAAM,IAAIryB,CAAM,EACT,UAAY,CACfqyB,EAAM,OAAM,CAChB,CACJ,EAAG,CAACryB,GAAUsyB,CAAS,CAAC,CAC5B,CACJ,ECdWC,GAAiB,UAAY,CACpC,IAAIC,EAAWJ,GAAkB,EAC7BK,EAAQ,SAAUzlC,EAAI,CACtB,IAAIgT,EAAShT,EAAG,OAAQ0lC,EAAU1lC,EAAG,QACrC,OAAAwlC,EAASxyB,EAAQ0yB,CAAO,EACjB,IACX,EACA,OAAOD,CACX,ECfWE,GAAU,CACjB,KAAM,EACN,IAAK,EACL,MAAO,EACP,IAAK,CACT,EACIC,GAAQ,SAAUlyD,EAAG,CAAE,OAAO,SAASA,GAAK,GAAI,EAAE,GAAK,CAAG,EAC1DmyD,GAAY,SAAUrB,EAAS,CAC/B,IAAIsB,EAAK,OAAO,iBAAiB,SAAS,IAAI,EAC1CC,EAAOD,EAAGtB,IAAY,UAAY,cAAgB,YAAY,EAC9DwB,EAAMF,EAAGtB,IAAY,UAAY,aAAe,WAAW,EAC3DyB,EAAQH,EAAGtB,IAAY,UAAY,eAAiB,aAAa,EACrE,MAAO,CAACoB,GAAMG,CAAI,EAAGH,GAAMI,CAAG,EAAGJ,GAAMK,CAAK,CAAC,CACjD,EACWC,GAAc,SAAU1B,EAAS,CAExC,GADIA,IAAY,SAAUA,EAAU,UAChC,OAAO,OAAW,IAClB,OAAOmB,GAEX,IAAIQ,EAAUN,GAAUrB,CAAO,EAC3B4B,EAAgB,SAAS,gBAAgB,YACzCC,EAAc,OAAO,WACzB,MAAO,CACH,KAAMF,EAAQ,CAAC,EACf,IAAKA,EAAQ,CAAC,EACd,MAAOA,EAAQ,CAAC,EAChB,IAAK,KAAK,IAAI,EAAGE,EAAcD,EAAgBD,EAAQ,CAAC,EAAIA,EAAQ,CAAC,CAAC,CAC9E,CACA,ECxBIG,GAAQf,GAAc,EACfgB,GAAgB,qBAIvBC,GAAY,SAAUxmC,EAAIymC,EAAejC,EAASkC,EAAW,CAC7D,IAAIX,EAAO/lC,EAAG,KAAMgmC,EAAMhmC,EAAG,IAAKimC,EAAQjmC,EAAG,MAAOmO,EAAMnO,EAAG,IAC7D,OAAIwkC,IAAY,SAAUA,EAAU,UAC7B;AAAA,KAAQ,OAAO9C,GAAuB;AAAA,qBAA0B,EAAE,OAAOgF,EAAW;AAAA,mBAAuB,EAAE,OAAOv4B,EAAK,KAAK,EAAE,OAAOu4B,EAAW;AAAA;AAAA,QAAiB,EAAE,OAAOH,GAAe;AAAA,sBAA4B,EAAE,OAAOG,EAAW;AAAA;AAAA,KAA4C,EAAE,OAAO,CACnSD,GAAiB,sBAAsB,OAAOC,EAAW,GAAG,EAC5DlC,IAAY,UACR;AAAA,oBAAuB,OAAOuB,EAAM;AAAA,kBAAwB,EAAE,OAAOC,EAAK;AAAA,oBAA0B,EAAE,OAAOC,EAAO;AAAA;AAAA;AAAA,mBAAgE,EAAE,OAAO93B,EAAK,KAAK,EAAE,OAAOu4B,EAAW;AAAA,KAAS,EACxOlC,IAAY,WAAa,kBAAkB,OAAOr2B,EAAK,KAAK,EAAE,OAAOu4B,EAAW,GAAG,CAC3F,EACS,OAAO,OAAO,EACd,KAAK,EAAE,EAAG;AAAA;AAAA;AAAA,IAAgB,EAAE,OAAOlF,GAAoB;AAAA,YAAiB,EAAE,OAAOrzB,EAAK,KAAK,EAAE,OAAOu4B,EAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAOjF,GAAoB;AAAA,mBAAwB,EAAE,OAAOtzB,EAAK,KAAK,EAAE,OAAOu4B,EAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAOlF,GAAoB,IAAI,EAAE,OAAOA,GAAoB;AAAA,cAAmB,EAAE,OAAOkF,EAAW;AAAA;AAAA;AAAA,IAAiB,EAAE,OAAOjF,GAAoB,IAAI,EAAE,OAAOA,GAAoB;AAAA,qBAA0B,EAAE,OAAOiF,EAAW;AAAA;AAAA;AAAA,QAAqB,EAAE,OAAOH,GAAe;AAAA,KAAW,EAAE,OAAO5E,GAAwB,IAAI,EAAE,OAAOxzB,EAAK;AAAA;AAAA,CAAY,CAC/kB,EACIw4B,GAAuB,UAAY,CACnC,IAAIzB,EAAU,SAAS,SAAS,KAAK,aAAaqB,EAAa,GAAK,IAAK,EAAE,EAC3E,OAAO,SAASrB,CAAO,EAAIA,EAAU,CACzC,EACW0B,GAAmB,UAAY,CACtCvP,YAAgB,UAAY,CACxB,gBAAS,KAAK,aAAakP,IAAgBI,KAAyB,GAAG,UAAU,EAC1E,UAAY,CACf,IAAIE,EAAaF,GAAoB,EAAK,EACtCE,GAAc,EACd,SAAS,KAAK,gBAAgBN,EAAa,EAG3C,SAAS,KAAK,aAAaA,GAAeM,EAAW,SAAQ,CAAE,CAEvE,CACJ,EAAG,EAAE,CACT,EAIWC,GAAkB,SAAU9mC,EAAI,CACvC,IAAImkC,EAAankC,EAAG,WAAY+mC,EAAc/mC,EAAG,YAAaC,EAAKD,EAAG,QAASwkC,EAAUvkC,IAAO,OAAS,SAAWA,EACpH2mC,GAAgB,EAMhB,IAAIz4B,EAAMqmB,UAAc,UAAY,CAAE,OAAO0R,GAAY1B,CAAO,CAAG,EAAG,CAACA,CAAO,CAAC,EAC/E,OAAOlB,gBAAoBgD,GAAO,CAAE,OAAQE,GAAUr4B,EAAK,CAACg2B,EAAYK,EAAUuC,EAA6B,GAAf,YAAiB,CAAC,CAAE,CACxH,ECpDIC,GAAmB,GACvB,GAAI,OAAO,OAAW,IAClB,GAAI,CACA,IAAInqC,GAAU,OAAO,eAAe,GAAI,UAAW,CAC/C,IAAK,UAAY,CACb,OAAAmqC,GAAmB,GACZ,EACX,CACZ,CAAS,EAED,OAAO,iBAAiB,OAAQnqC,GAASA,EAAO,EAEhD,OAAO,oBAAoB,OAAQA,GAASA,EAAO,CACvD,MACY,CACRmqC,GAAmB,EACvB,CAEG,IAAIC,GAAaD,GAAmB,CAAE,QAAS,EAAK,EAAK,GClB5DE,GAAuB,SAAU3d,EAAM,CAEvC,OAAOA,EAAK,UAAY,UAC5B,EACI4d,GAAuB,SAAU5d,EAAM6d,EAAU,CACjD,GAAI,EAAE7d,aAAgB,SAClB,MAAO,GAEX,IAAIvW,EAAS,OAAO,iBAAiBuW,CAAI,EACzC,OAEAvW,EAAOo0B,CAAQ,IAAM,UAEjB,EAAEp0B,EAAO,YAAcA,EAAO,WAAa,CAACk0B,GAAqB3d,CAAI,GAAKvW,EAAOo0B,CAAQ,IAAM,UACvG,EACIC,GAA0B,SAAU9d,EAAM,CAAE,OAAO4d,GAAqB5d,EAAM,WAAW,CAAG,EAC5F+d,GAA0B,SAAU/d,EAAM,CAAE,OAAO4d,GAAqB5d,EAAM,WAAW,CAAG,EACrFge,GAA0B,SAAUC,EAAMje,EAAM,CACvD,IAAIiP,EAAgBjP,EAAK,cACrBjoB,EAAUioB,EACd,EAAG,CAEK,OAAO,WAAe,KAAejoB,aAAmB,aACxDA,EAAUA,EAAQ,MAEtB,IAAImmC,EAAeC,GAAuBF,EAAMlmC,CAAO,EACvD,GAAImmC,EAAc,CACd,IAAIznC,EAAK2nC,GAAmBH,EAAMlmC,CAAO,EAAGsmC,EAAe5nC,EAAG,CAAC,EAAG6nC,EAAe7nC,EAAG,CAAC,EACrF,GAAI4nC,EAAeC,EACf,MAAO,EAEf,CACAvmC,EAAUA,EAAQ,UACtB,OAASA,GAAWA,IAAYk3B,EAAc,MAC9C,MAAO,EACX,EACIsP,GAAsB,SAAU9nC,EAAI,CACpC,IAAI+nC,EAAY/nC,EAAG,UAAW4nC,EAAe5nC,EAAG,aAAc6nC,EAAe7nC,EAAG,aAChF,MAAO,CACH+nC,EACAH,EACAC,CACR,CACA,EACIG,GAAsB,SAAUhoC,EAAI,CACpC,IAAIioC,EAAajoC,EAAG,WAAYkoC,EAAcloC,EAAG,YAAamoC,EAAcnoC,EAAG,YAC/E,MAAO,CACHioC,EACAC,EACAC,CACR,CACA,EACIT,GAAyB,SAAUF,EAAMje,EAAM,CAC/C,OAAOie,IAAS,IAAMH,GAAwB9d,CAAI,EAAI+d,GAAwB/d,CAAI,CACtF,EACIoe,GAAqB,SAAUH,EAAMje,EAAM,CAC3C,OAAOie,IAAS,IAAMM,GAAoBve,CAAI,EAAIye,GAAoBze,CAAI,CAC9E,EACI6e,GAAqB,SAAUZ,EAAMa,EAAW,CAMhD,OAAOb,IAAS,KAAOa,IAAc,MAAQ,GAAK,CACtD,EACWC,GAAe,SAAUd,EAAMe,EAAW1oC,EAAO2oC,EAAaC,EAAc,CACnF,IAAIC,EAAkBN,GAAmBZ,EAAM,OAAO,iBAAiBe,CAAS,EAAE,SAAS,EACvF91B,EAAQi2B,EAAkBF,EAE1BtQ,EAASr4B,EAAM,OACf8oC,EAAeJ,EAAU,SAASrQ,CAAM,EACxC0Q,EAAqB,GACrBC,EAAkBp2B,EAAQ,EAC1Bq2B,EAAkB,EAClBC,EAAqB,EACzB,EAAG,CACC,GAAI,CAAC7Q,EACD,MAEJ,IAAIl4B,EAAK2nC,GAAmBH,EAAMtP,CAAM,EAAG3rB,EAAWvM,EAAG,CAAC,EAAGgpC,EAAWhpC,EAAG,CAAC,EAAGipC,EAAWjpC,EAAG,CAAC,EAC1FkpC,EAAgBF,EAAWC,EAAWP,EAAkBn8B,GACxDA,GAAY28B,IACRxB,GAAuBF,EAAMtP,CAAM,IACnC4Q,GAAmBI,EACnBH,GAAsBx8B,GAG9B,IAAI48B,EAAWjR,EAAO,WAGtBA,EAAUiR,GAAYA,EAAS,WAAa,KAAK,uBAAyBA,EAAS,KAAOA,CAC9F,OAEC,CAACR,GAAgBzQ,IAAW,SAAS,MAEjCyQ,IAAiBJ,EAAU,SAASrQ,CAAM,GAAKqQ,IAAcrQ,IAElE,OAAI2Q,GACkB,KAAK,IAAIC,CAAe,EAAI,GAGzC,CAACD,GACY,KAAK,IAAIE,CAAkB,EAAI,KACjDH,EAAqB,IAElBA,CACX,ECrGWQ,GAAa,SAAUvpC,EAAO,CACrC,MAAO,mBAAoBA,EAAQ,CAACA,EAAM,eAAe,CAAC,EAAE,QAASA,EAAM,eAAe,CAAC,EAAE,OAAO,EAAI,CAAC,EAAG,CAAC,CACjH,EACWwpC,GAAa,SAAUxpC,EAAO,CAAE,MAAO,CAACA,EAAM,OAAQA,EAAM,MAAM,CAAG,EAC5EypC,GAAa,SAAUh2B,EAAK,CAC5B,OAAOA,GAAO,YAAaA,EAAMA,EAAI,QAAUA,CACnD,EACIi2B,GAAe,SAAU71D,EAAGC,EAAG,CAAE,OAAOD,EAAE,CAAC,IAAMC,EAAE,CAAC,GAAKD,EAAE,CAAC,IAAMC,EAAE,CAAC,CAAG,EACxE61D,GAAgB,SAAU9oD,EAAI,CAAE,MAAO;AAAA,yBAA4B,OAAOA,EAAI;AAAA,wBAAmD,EAAE,OAAOA,EAAI;AAAA,CAA2B,CAAG,EAC5K+oD,GAAY,EACZC,GAAY,GACT,SAASC,GAAoBj9B,EAAO,CACvC,IAAIk9B,EAAqBxS,SAAa,EAAE,EACpCyS,EAAgBzS,SAAa,CAAC,EAAG,CAAC,CAAC,EACnC0S,EAAa1S,SAAY,EACzB12C,EAAK41C,WAAemT,IAAW,EAAE,CAAC,EAClCnD,EAAQhQ,WAAeiP,EAAc,EAAE,CAAC,EACxCwE,EAAY3S,SAAa1qB,CAAK,EAClC2qB,YAAgB,UAAY,CACxB0S,EAAU,QAAUr9B,CACxB,EAAG,CAACA,CAAK,CAAC,EACV2qB,YAAgB,UAAY,CACxB,GAAI3qB,EAAM,MAAO,CACb,SAAS,KAAK,UAAU,IAAI,uBAAuB,OAAOhsB,CAAE,CAAC,EAC7D,IAAIspD,EAAU7I,GAAc,CAACz0B,EAAM,QAAQ,OAAO,GAAIA,EAAM,QAAU,IAAI,IAAI48B,EAAU,EAAG,EAAI,EAAE,OAAO,OAAO,EAC/G,OAAAU,EAAQ,QAAQ,SAAU9uC,EAAI,CAAE,OAAOA,EAAG,UAAU,IAAI,uBAAuB,OAAOxa,CAAE,CAAC,CAAG,CAAC,EACtF,UAAY,CACf,SAAS,KAAK,UAAU,OAAO,uBAAuB,OAAOA,CAAE,CAAC,EAChEspD,EAAQ,QAAQ,SAAU9uC,EAAI,CAAE,OAAOA,EAAG,UAAU,OAAO,uBAAuB,OAAOxa,CAAE,CAAC,CAAG,CAAC,CACpG,CACJ,CAEJ,EAAG,CAACgsB,EAAM,MAAOA,EAAM,QAAQ,QAASA,EAAM,MAAM,CAAC,EACrD,IAAIu9B,EAAoBrgB,cAAkB,SAAU/pB,EAAOqqC,EAAQ,CAC/D,GAAK,YAAarqC,GAASA,EAAM,QAAQ,SAAW,GAAOA,EAAM,OAAS,SAAWA,EAAM,QACvF,MAAO,CAACkqC,EAAU,QAAQ,eAE9B,IAAII,EAAQf,GAAWvpC,CAAK,EACxBuqC,EAAaP,EAAc,QAC3BQ,EAAS,WAAYxqC,EAAQA,EAAM,OAASuqC,EAAW,CAAC,EAAID,EAAM,CAAC,EACnEG,EAAS,WAAYzqC,EAAQA,EAAM,OAASuqC,EAAW,CAAC,EAAID,EAAM,CAAC,EACnEI,EACArS,EAASr4B,EAAM,OACf2qC,EAAgB,KAAK,IAAIH,CAAM,EAAI,KAAK,IAAIC,CAAM,EAAI,IAAM,IAEhE,GAAI,YAAazqC,GAAS2qC,IAAkB,KAAOtS,EAAO,OAAS,QAC/D,MAAO,GAGX,IAAIuS,EAAY,OAAO,aAAY,EAC/BC,EAAaD,GAAaA,EAAU,WACpCE,EAAsBD,EAAaA,IAAexS,GAAUwS,EAAW,SAASxS,CAAM,EAAI,GAC9F,GAAIyS,EACA,MAAO,GAEX,IAAIC,EAA+BrD,GAAwBiD,EAAetS,CAAM,EAChF,GAAI,CAAC0S,EACD,MAAO,GAUX,GARIA,EACAL,EAAcC,GAGdD,EAAcC,IAAkB,IAAM,IAAM,IAC5CI,EAA+BrD,GAAwBiD,EAAetS,CAAM,GAG5E,CAAC0S,EACD,MAAO,GAKX,GAHI,CAACd,EAAW,SAAW,mBAAoBjqC,IAAUwqC,GAAUC,KAC/DR,EAAW,QAAUS,GAErB,CAACA,EACD,MAAO,GAEX,IAAIM,GAAgBf,EAAW,SAAWS,EAC1C,OAAOjC,GAAauC,GAAeX,EAAQrqC,EAAOgrC,KAAkB,IAAMR,EAASC,CAAY,CACnG,EAAG,EAAE,EACDQ,EAAgBlhB,cAAkB,SAAUmhB,EAAQ,CACpD,IAAIlrC,EAAQkrC,EACZ,GAAI,GAACrB,GAAU,QAAUA,GAAUA,GAAU,OAAS,CAAC,IAAMpD,GAI7D,KAAI7zB,EAAQ,WAAY5S,EAAQwpC,GAAWxpC,CAAK,EAAIupC,GAAWvpC,CAAK,EAChEmrC,EAAcpB,EAAmB,QAAQ,OAAO,SAAUx1D,EAAG,CAAE,OAAOA,EAAE,OAASyrB,EAAM,OAASzrB,EAAE,SAAWyrB,EAAM,QAAUA,EAAM,SAAWzrB,EAAE,eAAiBm1D,GAAan1D,EAAE,MAAOq+B,CAAK,CAAG,CAAC,EAAE,CAAC,EAEvM,GAAIu4B,GAAeA,EAAY,OAAQ,CAC/BnrC,EAAM,YACNA,EAAM,eAAc,EAExB,MACJ,CAEA,GAAI,CAACmrC,EAAa,CACd,IAAIC,GAAclB,EAAU,QAAQ,QAAU,IACzC,IAAIT,EAAU,EACd,OAAO,OAAO,EACd,OAAO,SAAU/f,EAAM,CAAE,OAAOA,EAAK,SAAS1pB,EAAM,MAAM,CAAG,CAAC,EAC/DqrC,EAAaD,EAAW,OAAS,EAAIhB,EAAkBpqC,EAAOorC,EAAW,CAAC,CAAC,EAAI,CAAClB,EAAU,QAAQ,YAClGmB,GACIrrC,EAAM,YACNA,EAAM,eAAc,CAGhC,EACJ,EAAG,EAAE,EACDsrC,EAAevhB,cAAkB,SAAUlsB,EAAM+U,EAAOylB,EAAQkT,EAAQ,CACxE,IAAIvrC,EAAQ,CAAE,KAAMnC,EAAM,MAAO+U,EAAO,OAAQylB,EAAQ,OAAQkT,EAAQ,aAAcC,GAAyBnT,CAAM,CAAC,EACtH0R,EAAmB,QAAQ,KAAK/pC,CAAK,EACrC,WAAW,UAAY,CACnB+pC,EAAmB,QAAUA,EAAmB,QAAQ,OAAO,SAAUx1D,EAAG,CAAE,OAAOA,IAAMyrB,CAAO,CAAC,CACvG,EAAG,CAAC,CACR,EAAG,EAAE,EACDyrC,EAAmB1hB,cAAkB,SAAU/pB,EAAO,CACtDgqC,EAAc,QAAUT,GAAWvpC,CAAK,EACxCiqC,EAAW,QAAU,MACzB,EAAG,EAAE,EACDyB,EAAc3hB,cAAkB,SAAU/pB,EAAO,CACjDsrC,EAAatrC,EAAM,KAAMwpC,GAAWxpC,CAAK,EAAGA,EAAM,OAAQoqC,EAAkBpqC,EAAO6M,EAAM,QAAQ,OAAO,CAAC,CAC7G,EAAG,EAAE,EACD8+B,EAAkB5hB,cAAkB,SAAU/pB,EAAO,CACrDsrC,EAAatrC,EAAM,KAAMupC,GAAWvpC,CAAK,EAAGA,EAAM,OAAQoqC,EAAkBpqC,EAAO6M,EAAM,QAAQ,OAAO,CAAC,CAC7G,EAAG,EAAE,EACL2qB,YAAgB,UAAY,CACxB,OAAAqS,GAAU,KAAKpD,CAAK,EACpB55B,EAAM,aAAa,CACf,gBAAiB6+B,EACjB,eAAgBA,EAChB,mBAAoBC,CAChC,CAAS,EACD,SAAS,iBAAiB,QAASV,EAAe7D,EAAU,EAC5D,SAAS,iBAAiB,YAAa6D,EAAe7D,EAAU,EAChE,SAAS,iBAAiB,aAAcqE,EAAkBrE,EAAU,EAC7D,UAAY,CACfyC,GAAYA,GAAU,OAAO,SAAU+B,EAAM,CAAE,OAAOA,IAASnF,CAAO,CAAC,EACvE,SAAS,oBAAoB,QAASwE,EAAe7D,EAAU,EAC/D,SAAS,oBAAoB,YAAa6D,EAAe7D,EAAU,EACnE,SAAS,oBAAoB,aAAcqE,EAAkBrE,EAAU,CAC3E,CACJ,EAAG,EAAE,EACL,IAAIjD,EAAkBt3B,EAAM,gBAAiB23B,EAAQ33B,EAAM,MAC3D,OAAQ42B,gBAAoB/X,WAAgB,KACxC8Y,EAAQf,gBAAoBgD,EAAO,CAAE,OAAQkD,GAAc9oD,CAAE,CAAC,CAAE,EAAI,KACpEsjD,EAAkBV,gBAAoBwD,GAAiB,CAAE,WAAYp6B,EAAM,WAAY,QAASA,EAAM,OAAO,CAAE,EAAI,IAAI,CAC/H,CACA,SAAS2+B,GAAyB9hB,EAAM,CAEpC,QADImiB,EAAe,KACZniB,IAAS,MACRA,aAAgB,aAChBmiB,EAAeniB,EAAK,KACpBA,EAAOA,EAAK,MAEhBA,EAAOA,EAAK,WAEhB,OAAOmiB,CACX,CChKA,MAAAvI,GAAeI,GAAcE,GAAWkG,EAAmB,ECC3D,IAAIgC,GAAoBxiB,aAAiB,SAAUzc,EAAO4G,EAAK,CAAE,OAAQgwB,gBAAoBK,GAAc3C,GAAS,GAAIt0B,EAAO,CAAE,IAAK4G,EAAK,QAAS6vB,GAAS,CAAC,CAAI,CAAC,EACnKwI,GAAkB,WAAahI,GAAa,WCL5C,IAAIiI,GAAmB,SAAUC,EAAgB,CAC7C,GAAI,OAAO,SAAa,IACpB,OAAO,KAEX,IAAIC,EAAe,MAAM,QAAQD,CAAc,EAAIA,EAAe,CAAC,EAAIA,EACvE,OAAOC,EAAa,cAAc,IACtC,EACIC,GAAa,IAAI,QACjBC,GAAoB,IAAI,QACxBC,GAAY,GACZC,GAAY,EACZC,GAAa,SAAU5iB,EAAM,CAC7B,OAAOA,IAASA,EAAK,MAAQ4iB,GAAW5iB,EAAK,UAAU,EAC3D,EACI6iB,GAAiB,SAAUlC,EAAQmC,EAAS,CAC5C,OAAOA,EACF,IAAI,SAAUnU,EAAQ,CACvB,GAAIgS,EAAO,SAAShS,CAAM,EACtB,OAAOA,EAEX,IAAIoU,EAAkBH,GAAWjU,CAAM,EACvC,OAAIoU,GAAmBpC,EAAO,SAASoC,CAAe,EAC3CA,GAEX,QAAQ,MAAM,cAAepU,EAAQ,0BAA2BgS,EAAQ,iBAAiB,EAClF,KACX,CAAC,EACI,OAAO,SAAUx2D,EAAG,CAAE,MAAO,EAAQA,CAAI,CAAC,CACnD,EASI64D,GAAyB,SAAUV,EAAgBW,EAAYC,EAAYC,EAAkB,CAC7F,IAAIL,EAAUD,GAAeI,EAAY,MAAM,QAAQX,CAAc,EAAIA,EAAiB,CAACA,CAAc,CAAC,EACrGI,GAAUQ,CAAU,IACrBR,GAAUQ,CAAU,EAAI,IAAI,SAEhC,IAAIE,EAAgBV,GAAUQ,CAAU,EACpCG,EAAc,GACdC,EAAiB,IAAI,IACrBC,EAAiB,IAAI,IAAIT,CAAO,EAChCU,EAAO,SAAU7xC,EAAI,CACjB,CAACA,GAAM2xC,EAAe,IAAI3xC,CAAE,IAGhC2xC,EAAe,IAAI3xC,CAAE,EACrB6xC,EAAK7xC,EAAG,UAAU,EACtB,EACAmxC,EAAQ,QAAQU,CAAI,EACpB,IAAIC,EAAO,SAAU9C,EAAQ,CACrB,CAACA,GAAU4C,EAAe,IAAI5C,CAAM,GAGxC,MAAM,UAAU,QAAQ,KAAKA,EAAO,SAAU,SAAU3gB,EAAM,CAC1D,GAAIsjB,EAAe,IAAItjB,CAAI,EACvByjB,EAAKzjB,CAAI,MAGT,IAAI,CACA,IAAI0jB,EAAO1jB,EAAK,aAAamjB,CAAgB,EACzCQ,EAAgBD,IAAS,MAAQA,IAAS,QAC1CE,GAAgBpB,GAAW,IAAIxiB,CAAI,GAAK,GAAK,EAC7C6jB,GAAeT,EAAc,IAAIpjB,CAAI,GAAK,GAAK,EACnDwiB,GAAW,IAAIxiB,EAAM4jB,CAAY,EACjCR,EAAc,IAAIpjB,EAAM6jB,CAAW,EACnCR,EAAY,KAAKrjB,CAAI,EACjB4jB,IAAiB,GAAKD,GACtBlB,GAAkB,IAAIziB,EAAM,EAAI,EAEhC6jB,IAAgB,GAChB7jB,EAAK,aAAakjB,EAAY,MAAM,EAEnCS,GACD3jB,EAAK,aAAamjB,EAAkB,MAAM,CAElD,OACOt4D,EAAG,CACN,QAAQ,MAAM,kCAAmCm1C,EAAMn1C,CAAC,CAC5D,CAER,CAAC,CACL,EACA,OAAA44D,EAAKR,CAAU,EACfK,EAAe,MAAK,EACpBX,KACO,UAAY,CACfU,EAAY,QAAQ,SAAUrjB,EAAM,CAChC,IAAI4jB,EAAepB,GAAW,IAAIxiB,CAAI,EAAI,EACtC6jB,EAAcT,EAAc,IAAIpjB,CAAI,EAAI,EAC5CwiB,GAAW,IAAIxiB,EAAM4jB,CAAY,EACjCR,EAAc,IAAIpjB,EAAM6jB,CAAW,EAC9BD,IACInB,GAAkB,IAAIziB,CAAI,GAC3BA,EAAK,gBAAgBmjB,CAAgB,EAEzCV,GAAkB,OAAOziB,CAAI,GAE5B6jB,GACD7jB,EAAK,gBAAgBkjB,CAAU,CAEvC,CAAC,EACDP,KACKA,KAEDH,GAAa,IAAI,QACjBA,GAAa,IAAI,QACjBC,GAAoB,IAAI,QACxBC,GAAY,GAEpB,CACJ,EAQWoB,GAAa,SAAUxB,EAAgBW,EAAYC,EAAY,CAClEA,IAAe,SAAUA,EAAa,oBAC1C,IAAIJ,EAAU,MAAM,KAAK,MAAM,QAAQR,CAAc,EAAIA,EAAiB,CAACA,CAAc,CAAC,EACtFyB,EAAiC1B,GAAiBC,CAAc,EACpE,OAAKyB,GAKLjB,EAAQ,KAAK,MAAMA,EAAS,MAAM,KAAKiB,EAAiB,iBAAiB,qBAAqB,CAAC,CAAC,EACzFf,GAAuBF,EAASiB,EAAkBb,EAAY,aAAa,GALvE,UAAY,CAAE,OAAO,IAAM,CAM1C,ECjIA,SAASviB,GAAWC,EAAW,CAC7B,MAAMC,EAA4BC,GAAgBF,CAAS,EACrDG,EAAQnB,aAAiB,CAACzc,EAAO6d,IAAiB,CACtD,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EAC7B+d,EAAgBC,WAAe,QAAQxS,CAAQ,EAC/CyS,EAAYF,EAAc,KAAKG,EAAW,EAChD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAC7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,WAAe,MAAMG,CAAU,EAAI,EAAUH,WAAe,KAAK,IAAI,EAClEM,iBAAqBH,CAAU,EAAIA,EAAW,MAAM,SAAW,KAE/DE,CAEV,EACD,OAAuB3f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAUS,iBAAqBH,CAAU,EAAII,eAAmBJ,EAAY,OAAQC,CAAW,EAAI,KAAM,CACpL,CACA,OAAuB1f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAArS,EAAU,CACrF,CAAC,EACD,OAAAoS,EAAM,YAAc,GAAGH,CAAS,QACzBG,CACT,CAGA,SAASD,GAAgBF,EAAW,CAClC,MAAMC,EAAYjB,aAAiB,CAACzc,EAAO6d,IAAiB,CAC1D,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EACnC,GAAIse,iBAAqB9S,CAAQ,EAAG,CAClC,MAAMiT,EAAcC,GAAclT,CAAQ,EACpCmT,EAASC,GAAWd,EAAWtS,EAAS,KAAK,EACnD,OAAIA,EAAS,OAASqT,aACpBF,EAAO,IAAMd,EAAelB,GAAYkB,EAAcY,CAAW,EAAIA,GAEhEF,eAAmB/S,EAAUmT,CAAM,CAC5C,CACA,OAAOX,WAAe,MAAMxS,CAAQ,EAAI,EAAIwS,WAAe,KAAK,IAAI,EAAI,IAC1E,CAAC,EACD,OAAAN,EAAU,YAAc,GAAGD,CAAS,aAC7BC,CACT,CACA,IAAIoB,GAAuB,OAAO,iBAAiB,EAWnD,SAASZ,GAAYG,EAAO,CAC1B,OAAOC,iBAAqBD,CAAK,GAAK,OAAOA,EAAM,MAAS,YAAc,cAAeA,EAAM,MAAQA,EAAM,KAAK,YAAcS,EAClI,CACA,SAASF,GAAWd,EAAWiB,EAAY,CACzC,MAAMC,EAAgB,CAAE,GAAGD,CAAU,EACrC,UAAWE,KAAYF,EAAY,CACjC,MAAMG,EAAgBpB,EAAUmB,CAAQ,EAClCE,EAAiBJ,EAAWE,CAAQ,EACxB,WAAW,KAAKA,CAAQ,EAEpCC,GAAiBC,EACnBH,EAAcC,CAAQ,EAAI,IAAI/I,IAAS,CACrC,MAAMhY,EAASihB,EAAe,GAAGjJ,CAAI,EACrC,OAAAgJ,EAAc,GAAGhJ,CAAI,EACdhY,CACT,EACSghB,IACTF,EAAcC,CAAQ,EAAIC,GAEnBD,IAAa,QACtBD,EAAcC,CAAQ,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAc,EACtDF,IAAa,cACtBD,EAAcC,CAAQ,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtF,CACA,MAAO,CAAE,GAAGrB,EAAW,GAAGkB,CAAa,CACzC,CACA,SAASN,GAAcnB,EAAS,SAC9B,IAAI6B,GAAS9rB,EAAA,OAAO,yBAAyBiqB,EAAQ,MAAO,KAAK,IAApD,YAAAjqB,EAAuD,IAChE+rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACK9B,EAAQ,KAEjB6B,GAAS7rB,EAAA,OAAO,yBAAyBgqB,EAAS,KAAK,IAA9C,YAAAhqB,EAAiD,IAC1D8rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACK9B,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CC7EA,IAAIsjB,GAAc,SACd,CAACC,EAAsC,EAAI5Y,GAAmB2Y,EAAW,EACzE,CAACE,GAAgBC,EAAgB,EAAIF,GAAoBD,EAAW,EACpEI,GAAUjhC,GAAU,CACtB,KAAM,CACJ,cAAAkhC,EACA,SAAA11B,EACA,KAAM21B,EACN,YAAAC,EACA,aAAAC,EACA,MAAAC,EAAQ,EACZ,EAAMthC,EACEuhC,EAAa7W,SAAa,IAAI,EAC9B8W,EAAa9W,SAAa,IAAI,EAC9B,CAAC+W,EAAMC,CAAO,EAAI1X,GAAqB,CAC3C,KAAMmX,EACN,YAAaC,GAAe,GAC5B,SAAUC,EACV,OAAQR,EACZ,CAAG,EACD,OAAuBniC,MACrBqiC,GACA,CACE,MAAOG,EACP,WAAAK,EACA,WAAAC,EACA,UAAW/X,GAAK,EAChB,QAASA,GAAK,EACd,cAAeA,GAAK,EACpB,KAAAgY,EACA,aAAcC,EACd,aAAcxkB,cAAkB,IAAMwkB,EAASC,GAAa,CAACA,CAAQ,EAAG,CAACD,CAAO,CAAC,EACjF,MAAAJ,EACA,SAAA91B,CACN,CACA,CACA,EACAy1B,GAAO,YAAcJ,GACrB,IAAIe,GAAe,gBACfC,GAAgBplB,aAClB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,GAAGY,CAAY,EAAK9hC,EACrC6nB,EAAUmZ,GAAiBY,GAAcV,CAAa,EACtDa,EAAqB9kB,GAAgBY,EAAcgK,EAAQ,UAAU,EAC3E,OAAuBnpB,MACrBysB,GAAU,OACV,CACE,KAAM,SACN,gBAAiB,SACjB,gBAAiBtD,EAAQ,KACzB,gBAAiBA,EAAQ,UACzB,aAAcma,GAASna,EAAQ,IAAI,EACnC,GAAGia,EACH,IAAKC,EACL,QAAS5a,GAAqBnnB,EAAM,QAAS6nB,EAAQ,YAAY,CACzE,CACA,CACE,CACF,EACAga,GAAc,YAAcD,GAC5B,IAAIzP,GAAc,eACd,CAAC8P,GAAgBC,EAAgB,EAAIpB,GAAoB3O,GAAa,CACxE,WAAY,MACd,CAAC,EACGgQ,GAAgBniC,GAAU,CAC5B,KAAM,CAAE,cAAAkhC,EAAe,WAAAkB,EAAY,SAAA52B,EAAU,UAAAgkB,CAAS,EAAKxvB,EACrD6nB,EAAUmZ,GAAiB7O,GAAa+O,CAAa,EAC3D,OAAuBxiC,MAAIujC,GAAgB,CAAE,MAAOf,EAAe,WAAAkB,EAAY,SAAUpkB,WAAe,IAAIxS,EAAW6S,GAA0B3f,MAAIk0B,GAAU,CAAE,QAASwP,GAAcva,EAAQ,KAAM,SAA0BnpB,MAAI2jC,GAAiB,CAAE,QAAS,GAAM,UAAA7S,EAAW,SAAUnR,CAAK,CAAE,CAAC,CAAE,CAAC,CAAC,CAAE,CAC3S,EACA8jB,GAAa,YAAchQ,GAC3B,IAAImQ,GAAe,gBACfC,GAAgB9lB,aAClB,CAACzc,EAAO6d,IAAiB,CACvB,MAAM2kB,EAAgBN,GAAiBI,GAActiC,EAAM,aAAa,EAClE,CAAE,WAAAoiC,EAAaI,EAAc,WAAY,GAAGC,CAAY,EAAKziC,EAC7D6nB,EAAUmZ,GAAiBsB,GAActiC,EAAM,aAAa,EAClE,OAAO6nB,EAAQ,MAAwBnpB,MAAIk0B,GAAU,CAAE,QAASwP,GAAcva,EAAQ,KAAM,SAA0BnpB,MAAIgkC,GAAmB,CAAE,GAAGD,EAAc,IAAK5kB,CAAY,CAAE,CAAC,CAAE,EAAI,IAC5L,CACF,EACA0kB,GAAc,YAAcD,GAC5B,IAAI9jB,GAAOhB,GAAW,4BAA4B,EAC9CklB,GAAoBjmB,aACtB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,GAAGuB,CAAY,EAAKziC,EACrC6nB,EAAUmZ,GAAiBsB,GAAcpB,CAAa,EAC5D,OAGkBxiC,MAAIu4B,GAAc,CAAE,GAAIzY,GAAM,eAAgB,GAAM,OAAQ,CAACqJ,EAAQ,UAAU,EAAG,SAA0BnpB,MAC1HysB,GAAU,IACV,CACE,aAAc6W,GAASna,EAAQ,IAAI,EACnC,GAAG4a,EACH,IAAK5kB,EACL,MAAO,CAAE,cAAe,OAAQ,GAAG4kB,EAAa,KAAK,CAC/D,CACA,CAAO,CAAE,CAEP,CACF,EACIE,GAAe,gBACfC,GAAgBnmB,aAClB,CAACzc,EAAO6d,IAAiB,CACvB,MAAM2kB,EAAgBN,GAAiBS,GAAc3iC,EAAM,aAAa,EAClE,CAAE,WAAAoiC,EAAaI,EAAc,WAAY,GAAGK,CAAY,EAAK7iC,EAC7D6nB,EAAUmZ,GAAiB2B,GAAc3iC,EAAM,aAAa,EAClE,OAAuBtB,MAAIk0B,GAAU,CAAE,QAASwP,GAAcva,EAAQ,KAAM,SAAUA,EAAQ,MAAwBnpB,MAAIokC,GAAoB,CAAE,GAAGD,EAAc,IAAKhlB,CAAY,CAAE,EAAoBnf,MAAIqkC,GAAuB,CAAE,GAAGF,EAAc,IAAKhlB,CAAY,CAAE,CAAC,CAAE,CAC9Q,CACF,EACA+kB,GAAc,YAAcD,GAC5B,IAAIG,GAAqBrmB,aACvB,CAACzc,EAAO6d,IAAiB,CACvB,MAAMgK,EAAUmZ,GAAiB2B,GAAc3iC,EAAM,aAAa,EAC5DwhC,EAAa9W,SAAa,IAAI,EAC9BqC,EAAe9P,GAAgBY,EAAcgK,EAAQ,WAAY2Z,CAAU,EACjF7W,mBAAgB,IAAM,CACpB,MAAM/Z,EAAU4wB,EAAW,QAC3B,GAAI5wB,EAAS,OAAO+vB,GAAW/vB,CAAO,CACxC,EAAG,EAAE,EACkBlS,MACrBskC,GACA,CACE,GAAGhjC,EACH,IAAK+sB,EACL,UAAWlF,EAAQ,KACnB,4BAA6B,GAC7B,iBAAkBV,GAAqBnnB,EAAM,iBAAmB7M,GAAU,OACxEA,EAAM,eAAc,GACpBG,EAAAu0B,EAAQ,WAAW,UAAnB,MAAAv0B,EAA4B,OAC9B,CAAC,EACD,qBAAsB6zB,GAAqBnnB,EAAM,qBAAuB7M,GAAU,CAChF,MAAM8vC,EAAgB9vC,EAAM,OAAO,cAC7B+vC,EAAgBD,EAAc,SAAW,GAAKA,EAAc,UAAY,IACzDA,EAAc,SAAW,GAAKC,IACjC/vC,EAAM,eAAc,CACxC,CAAC,EACD,eAAgBg0B,GACdnnB,EAAM,eACL7M,GAAUA,EAAM,eAAc,CACzC,CACA,CACA,CACE,CACF,EACI4vC,GAAwBtmB,aAC1B,CAACzc,EAAO6d,IAAiB,CACvB,MAAMgK,EAAUmZ,GAAiB2B,GAAc3iC,EAAM,aAAa,EAC5DmjC,EAA0BzY,SAAa,EAAK,EAC5C0Y,EAA2B1Y,SAAa,EAAK,EACnD,OAAuBhsB,MACrBskC,GACA,CACE,GAAGhjC,EACH,IAAK6d,EACL,UAAW,GACX,4BAA6B,GAC7B,iBAAmB1qB,GAAU,UAC3BG,EAAA0M,EAAM,mBAAN,MAAA1M,EAAA,KAAA0M,EAAyB7M,GACpBA,EAAM,mBACJgwC,EAAwB,UAAS5vC,EAAAs0B,EAAQ,WAAW,UAAnB,MAAAt0B,EAA4B,QAClEJ,EAAM,eAAc,GAEtBgwC,EAAwB,QAAU,GAClCC,EAAyB,QAAU,EACrC,EACA,kBAAoBjwC,GAAU,UAC5BG,EAAA0M,EAAM,oBAAN,MAAA1M,EAAA,KAAA0M,EAA0B7M,GACrBA,EAAM,mBACTgwC,EAAwB,QAAU,GAC9BhwC,EAAM,OAAO,cAAc,OAAS,gBACtCiwC,EAAyB,QAAU,KAGvC,MAAM5X,EAASr4B,EAAM,SACGI,EAAAs0B,EAAQ,WAAW,UAAnB,YAAAt0B,EAA4B,SAASi4B,KACxCr4B,EAAM,eAAc,EACrCA,EAAM,OAAO,cAAc,OAAS,WAAaiwC,EAAyB,SAC5EjwC,EAAM,eAAc,CAExB,CACR,CACA,CACE,CACF,EACI6vC,GAAoBvmB,aACtB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,UAAAmC,EAAW,gBAAAC,EAAiB,iBAAAC,EAAkB,GAAGV,CAAY,EAAK7iC,EACnF6nB,EAAUmZ,GAAiB2B,GAAczB,CAAa,EACtDM,EAAa9W,SAAa,IAAI,EAC9BqC,EAAe9P,GAAgBY,EAAc2jB,CAAU,EAC7D,OAAArN,GAAc,EACSznB,OAAKyW,WAAU,CAAE,SAAU,CAChCzkB,MACdwwB,GACA,CACE,QAAS,GACT,KAAM,GACN,QAASmU,EACT,iBAAkBC,EAClB,mBAAoBC,EACpB,SAA0B7kC,MACxB4tB,GACA,CACE,KAAM,SACN,GAAIzE,EAAQ,UACZ,mBAAoBA,EAAQ,cAC5B,kBAAmBA,EAAQ,QAC3B,aAAcma,GAASna,EAAQ,IAAI,EACnC,GAAGgb,EACH,IAAK9V,EACL,UAAW,IAAMlF,EAAQ,aAAa,EAAK,CACzD,CACA,CACA,CACA,EACsBnb,OAAKyW,WAAU,CAAE,SAAU,CACzBzkB,MAAI8kC,GAAc,CAAE,QAAS3b,EAAQ,OAAO,CAAE,EAC9CnpB,MAAI+kC,GAAoB,CAAE,WAAAjC,EAAY,cAAe3Z,EAAQ,aAAa,CAAE,CACpG,CAAO,CAAE,CACT,EAAO,CACL,CACF,EACI6b,GAAa,cACbC,GAAclnB,aAChB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,GAAG0C,CAAU,EAAK5jC,EACnC6nB,EAAUmZ,GAAiB0C,GAAYxC,CAAa,EAC1D,OAAuBxiC,MAAIysB,GAAU,GAAI,CAAE,GAAItD,EAAQ,QAAS,GAAG+b,EAAY,IAAK/lB,CAAY,CAAE,CACpG,CACF,EACA8lB,GAAY,YAAcD,GAC1B,IAAIG,GAAmB,oBACnBC,GAAoBrnB,aACtB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,GAAG6C,CAAgB,EAAK/jC,EACzC6nB,EAAUmZ,GAAiB6C,GAAkB3C,CAAa,EAChE,OAAuBxiC,MAAIysB,GAAU,EAAG,CAAE,GAAItD,EAAQ,cAAe,GAAGkc,EAAkB,IAAKlmB,CAAY,CAAE,CAC/G,CACF,EACAimB,GAAkB,YAAcD,GAChC,IAAIG,GAAa,cACbC,GAAcxnB,aAChB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,cAAAqjB,EAAe,GAAGgD,CAAU,EAAKlkC,EACnC6nB,EAAUmZ,GAAiBgD,GAAY9C,CAAa,EAC1D,OAAuBxiC,MACrBysB,GAAU,OACV,CACE,KAAM,SACN,GAAG+Y,EACH,IAAKrmB,EACL,QAASsJ,GAAqBnnB,EAAM,QAAS,IAAM6nB,EAAQ,aAAa,EAAK,CAAC,CACtF,CACA,CACE,CACF,EACAoc,GAAY,YAAcD,GAC1B,SAAShC,GAASP,EAAM,CACtB,OAAOA,EAAO,OAAS,QACzB,CACA,IAAI0C,GAAqB,qBACrB,CAACC,GAAiBC,EAAiB,EAAIC,GAAcH,GAAoB,CAC3E,YAAaxB,GACb,UAAWe,GACX,SAAU,QACZ,CAAC,EACGF,GAAe,CAAC,CAAE,QAAAe,KAAc,CAClC,MAAMC,EAAsBH,GAAkBF,EAAkB,EAC1DM,EAAU,KAAKD,EAAoB,WAAW,mBAAmBA,EAAoB,SAAS;;AAAA,4BAE1EA,EAAoB,SAAS;;AAAA,4EAEmBA,EAAoB,QAAQ,GACtG7Z,mBAAgB,IAAM,CAChB4Z,IACe,SAAS,eAAeA,CAAO,GACjC,QAAQ,MAAME,CAAO,EAExC,EAAG,CAACA,EAASF,CAAO,CAAC,EACd,IACT,EACIG,GAA2B,2BAC3BjB,GAAqB,CAAC,CAAE,WAAAjC,EAAY,cAAAmD,KAAoB,CAE1D,MAAMF,EAAU,6EADkBJ,GAAkBK,EAAwB,EAC2C,WAAW,KAClI/Z,mBAAgB,IAAM,OACpB,MAAMia,GAAgBtxC,EAAAkuC,EAAW,UAAX,YAAAluC,EAAoB,aAAa,oBACnDqxC,GAAiBC,IACI,SAAS,eAAeD,CAAa,GACvC,QAAQ,KAAKF,CAAO,EAE7C,EAAG,CAACA,EAASjD,EAAYmD,CAAa,CAAC,EAChC,IACT,EACIE,GAAO5D,GAEP7O,GAAS+P,GACT2C,GAAUvC,GACVwC,GAAUnC,GACVoC,GAAQrB,GACRsB,GAAcnB,GACdoB,GAAQjB,GCxTZ,MAAMhD,GAASkE,GAIThD,GAAeiD,GAIf7C,GAAgB9lB,aAGpB,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAAC2mC,GAAA,CACC,IAAAz+B,EACA,UAAWlH,GACT,yJACA7C,CAAA,EAED,GAAGmD,CAAA,CACN,CACD,EACDuiC,GAAc,YAAc8C,GAAwB,YAEpD,MAAMzC,GAAgBnmB,aAGpB,CAAC,CAAE,UAAA5f,EAAW,SAAA2O,EAAU,GAAGxL,CAAA,EAAS4G,IACpC8F,OAACy1B,GAAA,CACC,UAAAzjC,MAAC6jC,GAAA,EAAc,EACf71B,OAAC44B,GAAA,CACC,IAAA1+B,EACA,UAAWlH,GACT,8fACA7C,CAAA,EAED,GAAGmD,EAEH,UAAAwL,EACDkB,OAAC64B,GAAA,CAAsB,UAAU,gRAC/B,UAAA7mC,MAACr1B,GAAA,CAAE,UAAU,UAAU,EACvBq1B,MAAC,QAAK,UAAU,UAAU,iBAAK,GACjC,IACF,EACF,CACD,EACDkkC,GAAc,YAAc0C,GAAwB,YAEpD,MAAME,GAAe,CAAC,CAAE,UAAA3oC,EAAW,GAAGmD,CAAA,IACpCtB,MAAC,OAAI,UAAWgB,GAAG,qDAAsD7C,CAAS,EAAI,GAAGmD,CAAA,CAAO,EAElGwlC,GAAa,YAAc,eAE3B,MAAMC,GAAe,CAAC,CAAE,UAAA5oC,EAAW,GAAGmD,KACpCtB,MAAC,OACC,UAAWgB,GAAG,gEAAiE7C,CAAS,EACvF,GAAGmD,CAAA,CACN,EAEFylC,GAAa,YAAc,eAE3B,MAAM9B,GAAclnB,aAGlB,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAACgnC,GAAA,CACC,IAAA9+B,EACA,UAAWlH,GAAG,oDAAqD7C,CAAS,EAC3E,GAAGmD,CAAA,CACN,CACD,EACD2jC,GAAY,YAAc+B,GAAsB,YAEhD,MAAM5B,GAAoBrnB,aAGxB,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAACinC,GAAA,CACC,IAAA/+B,EACA,UAAWlH,GAAG,gCAAiC7C,CAAS,EACvD,GAAGmD,CAAA,CACN,CACD,EACD8jC,GAAkB,YAAc6B,GAA4B,YChFrD,SAASC,IAAuD,CACrE,MAAM14B,EAAO,OAAO,SAAS,KAAK,MAAM,CAAC,EACzC,GAAI,CAACA,EAAM,OAAO,KAElB,GAAIA,IAAS,MACX,MAAO,CAAE,KAAM,MAAO,KAAM,OAG9B,GAAIA,IAAS,MACX,MAAO,CAAE,KAAM,MAAO,KAAM,OAG9B,GAAIA,IAAS,aACX,MAAO,CAAE,KAAM,aAAc,KAAM,cAIrC,GAAIA,EAAK,WAAW,YAAY,EAAG,CACjC,MAAM24B,EAAW34B,EAAK,MAAM,EAAmB,EAC/C,OAAI24B,EACK,CAAE,KAAM,MAAO,KAAM,MAAO,YAAa,mBAAmBA,CAAQ,GAEtE,CAAE,KAAM,MAAO,KAAM,MAC9B,CAEA,MAAMC,EAAa54B,EAAK,QAAQ,GAAG,EACnC,GAAI44B,IAAe,GAAI,OAAO,KAE9B,MAAM9zC,EAAOkb,EAAK,MAAM,EAAG44B,CAAU,EAC/B90C,EAAO,mBAAmBkc,EAAK,MAAM44B,EAAa,CAAC,CAAC,EAE1D,OAAK9zC,IAAS,WAAaA,IAAS,YAAchB,EACzC,CAAE,KAAAgB,EAAM,KAAAhB,CAAA,EAEV,IACT,CAMO,SAAS+0C,GAAgBC,EAAiC,CAC/D,MAAO,cAAc,mBAAmBA,CAAe,CAAC,EAC1D,CAGO,SAASC,GAAoBnqC,EAAmC,CACrE,GAAI,CAACA,EAAM,MAAO,GAClB,GAAIA,EAAK,OAAS,MAAO,MAAO,OAChC,GAAIA,EAAK,OAAS,MAAO,MAAO,OAChC,GAAIA,EAAK,OAAS,aAAc,MAAO,cAEvC,MAAM9K,EACJ8K,EAAK,OAAS,WAAaA,EAAK,KAAK,WAAW,GAAG,EAAIA,EAAK,KAAK,MAAM,CAAC,EAAIA,EAAK,KACnF,MAAO,IAAIA,EAAK,IAAI,IAAI,mBAAmB9K,CAAI,CAAC,EAClD,CAGO,SAASk1C,GAAcpqC,EAAiC,CAC7D,MAAMqqC,EAAUF,GAAoBnqC,CAAI,EACpCqqC,IAAY,OAAO,SAAS,MAC9B,OAAO,QAAQ,aAAa,KAAM,GAAIA,GAAW,OAAO,SAAS,QAAQ,CAE7E,CC1CO,SAASC,GAAU,CAAE,KAAA3E,EAAM,QAAA4E,EAAS,MAAAl8B,EAAO,WAAAm8B,EAAY,SAAAnuC,EAAU,OAAAzH,GAA0B,CAEhG,MAAM61C,EAAgBp8B,EAAM,IAAK1jC,IAAO,CACtC,GAAGA,EACH,SAAUk/C,GAAYl/C,EAAE,KAAM6/D,EAAYnuC,EAAUzH,CAAM,GAC1D,EAEI81C,EAAgBr8B,EAAM,SAAW,EAEvC,OACEzL,MAACuiC,GAAA,CAAO,KAAAQ,EAAY,aAAegF,GAAW,CAACA,GAAUJ,EAAA,EACvD,SAAA35B,OAACk2B,GAAA,CAAc,UAAU,sCACvB,UAAAl2B,OAAC84B,GAAA,CACC,UAAA94B,OAACi3B,GAAA,CAAY,yBAAa,CAAC6C,GAAiB,MAAMr8B,EAAM,MAAM,KAAI,EAClEzL,MAAColC,GAAA,CACE,SAAA0C,EACC95B,OAAAyW,WAAA,CAAE,wBACWzkB,MAAC,MAAG,qBAAS,EAAK,2KAG/B,EAEAgO,OAAAyW,WAAA,CAAE,kDAC+B,UAAQ,UAAAhZ,EAAM,OAAO,qBAAiB,EAAS,qEAEhF,EAEJ,GACF,EAEAuC,OAAC,OAAI,UAAU,wCACZ,UAAA65B,EAAc,IAAI,CAACG,EAAUlpC,WAC3B,OACE,WAACgpC,GACA95B,OAAC,OAAI,UAAU,6EAA6E,kBACpFlP,EAAQ,EAAE,eAAaimB,GAAWijB,EAAS,WAAW,GAC9D,EAEFhoC,MAACioC,GAAA,CACC,SAAUD,EAAS,SACnB,WAAAJ,EACA,iBAAkB,CAACE,CAAA,EACrB,GAVQhpC,CAWV,CACD,EAGA,CAACgpC,GACAD,EAAc,OAAS,IACtB,IAAM,CACL,MAAMxV,EAAQwV,EAAc,CAAC,EAAE,SAC/B,OACE3hB,GAAgBmM,EAAM,OAAO,IAAKA,EAAM,OAAO,GAAG,GAClDnM,GAAgBmM,EAAM,SAAS,IAAKA,EAAM,SAAS,GAAG,EAGpDrkB,OAAC,OAAI,UAAU,mCACb,UAAAhO,MAAC,QAAK,UAAU,gCAAgC,oCAAwB,EACxEA,MAAC,QAAK,UAAU,sBACb,SAAAqmB,GACCZ,GACE4M,EAAM,OAAO,IACbA,EAAM,OAAO,IACbA,EAAM,SAAS,IACfA,EAAM,SAAS,IACjB,CACF,CACF,GACF,EAGG,IACT,IAAG,EACP,QAEC0U,GAAA,CACC,SAAA/mC,MAACgiB,IAAO,QAAS2lB,EAAS,iBAAK,EACjC,GACF,EACF,CAEJ,CASA,SAASM,GAAkB,CAAE,SAAAC,EAAU,WAAAN,EAAY,iBAAAO,GAA4C,CAG7F,MAAMC,EAAmBC,GAAwE,CAC/F,GAAIA,IAAa,EAEf,OAAKniB,GAAgBgiB,EAAS,OAAO,IAAKA,EAAS,OAAO,GAAG,EAGtD,CAAE,IAAKA,EAAS,OAAO,IAAK,IAAKA,EAAS,OAAO,KAF/C,KAIX,MAAMI,EAAUJ,EAAS,KAAKG,EAAW,CAAC,EAM1C,OAJIC,EAAQ,QAAQ,OAAS,GAIzBA,EAAQ,QAAQ,SAAW,EACtB,KAGLpiB,GAAgBoiB,EAAQ,QAAQ,CAAC,EAAE,IAAKA,EAAQ,QAAQ,CAAC,EAAE,GAAG,EACzD,CAAE,IAAKA,EAAQ,QAAQ,CAAC,EAAE,IAAK,IAAKA,EAAQ,QAAQ,CAAC,EAAE,KAEzD,IACT,EAEA,OACEt6B,OAAC,OAAI,UAAU,YAEb,UAAAhO,MAACuoC,GAAA,CACC,MAAM,SACN,KAAML,EAAS,OAAO,KACtB,OAAQA,EAAS,OAAO,OACxB,SAAU,KACV,QAAO,GACP,IAAKA,EAAS,OAAO,IACrB,IAAKA,EAAS,OAAO,IACrB,UAAWN,EAAW,oBAIvBM,EAAS,KAAK,IAAI,CAACjgB,EAAKnpB,IACvBkB,MAACwoC,GAAA,CAEC,IAAAvgB,EACA,UAAWnpB,EAAQ,EACnB,aAAcspC,EAAgBtpC,CAAK,GAH9BA,CAAA,CAKR,EAGDkB,MAACuoC,GAAA,CACC,MAAM,gBACN,KAAML,EAAS,SAAS,KACxB,OAAQA,EAAS,SAAS,OAC1B,SAAUO,GAA0BP,CAAQ,EAC5C,OAAM,GACN,IAAKA,EAAS,SAAS,IACvB,IAAKA,EAAS,SAAS,IACvB,UAAWA,EAAS,SAAS,WAAa,SAI3CA,EAAS,gBAAkBA,EAAS,eAAe,OAAS,GAC3Dl6B,OAAC,OAAI,UAAU,mCACb,UAAAA,OAAC,QAAK,UAAU,gCAAgC,mDACP,KACzC,EACAA,OAAC,QAAK,UAAU,sBACb,UAAAk6B,EAAS,QAAU,IAAM,GACzB7hB,GAAe6hB,EAAS,eAAe,CAAC,CAAC,GAC5C,GACF,EAID,CAACC,GACAjiB,GAAgBgiB,EAAS,OAAO,IAAKA,EAAS,OAAO,GAAG,GACxDhiB,GAAgBgiB,EAAS,SAAS,IAAKA,EAAS,SAAS,GAAG,GAC1Dl6B,OAAC,OACC,UACEk6B,EAAS,gBAAkBA,EAAS,eAAe,OAAS,EACxD,OACA,mCAGN,UAAAloC,MAAC,QAAK,UAAU,gCAAgC,oCAAwB,EACxEA,MAAC,QAAK,UAAU,sBACb,SAAAqmB,GACCZ,GACEyiB,EAAS,OAAO,IAChBA,EAAS,OAAO,IAChBA,EAAS,SAAS,IAClBA,EAAS,SAAS,IACpB,CACF,CACF,IACF,EAEN,CAEJ,CAgBA,SAASK,GAAS,CAChB,MAAA9tB,EACA,KAAAnoB,EACA,OAAAwV,EACA,SAAA4gC,EACA,QAAAC,EACA,OAAAC,EACA,IAAAziB,EACA,IAAAC,EACA,UAAA/zB,CACF,EAAkB,CAChB,MAAMw2C,EAAc3iB,GAAgBC,GAAO,KAAMC,GAAO,IAAI,GAAK/zB,EAEjE,OACE2b,OAAC,OAAI,UAAU,aAEb,UAAAA,OAAC,OAAI,UAAU,+CACZ,WAAC26B,GAAW3oC,MAAC,OAAI,UAAU,sBAAsB,EAClDA,MAAC,OAAI,UAAU,gDAAgD,EAC9D,CAAC4oC,GAAU5oC,MAAC,OAAI,UAAU,yBAAyB,GACtD,EAGAgO,OAAC,OAAI,UAAU,sBACb,UAAAhO,MAAC,OAAI,UAAU,4CAA6C,SAAAya,EAAM,EAClEzM,OAAC,OAAI,UAAU,uBACZ,UAAA1b,EAAK,IAAC0b,OAAC,QAAK,UAAU,0CAA0C,cAAElG,EAAO,KAAC,EAC1E4gC,IAAa,MACZ16B,OAAC,QAAK,UAAU,qCAAqC,eAAGqY,GAAeqiB,CAAQ,GAAE,EAElFG,GAAe7oC,MAAC8oC,GAAA,CAAe,IAAA3iB,EAAW,IAAAC,EAAW,UAAA/zB,CAAA,CAAuB,GAC/E,GACF,GACF,CAEJ,CAQA,SAASm2C,GAAQ,CAAE,IAAAvgB,EAAK,UAAA8gB,EAAW,aAAAC,GAA8B,CAC/D,MAAMC,EAAchhB,EAAI,QAAQ,OAAS,EACnCihB,EAAYjhB,EAAI,QAAQ,SAAW,EAInCkhB,EAAyBrvC,GAIzB,CAACkvC,GAAgBA,EAAa,MAAQ,MAAQA,EAAa,MAAQ,MAInE,CAAC9iB,GAAgBpsB,EAAQ,IAAKA,EAAQ,GAAG,EACpC,KAEF2rB,GAAkBujB,EAAa,IAAKA,EAAa,IAAKlvC,EAAQ,IAAKA,EAAQ,GAAG,EAGvF,OACEkU,OAAC,OAAI,UAAU,aAEb,UAAAA,OAAC,OAAI,UAAU,+CACb,UAAAhO,MAAC,OAAI,UAAU,sBAAsB,EACrCA,MAAC,OAAI,UAAU,yDAAyD,EACxEA,MAAC,OAAI,UAAU,yBAAyB,GAC1C,EAGAgO,OAAC,OAAI,UAAU,sBACb,UAAAA,OAAC,OAAI,UAAU,4CAA4C,iBACpD+6B,EACJE,GAAejpC,MAAC,QAAK,UAAU,uBAAuB,uBAAW,GACpE,EAECkpC,EACCl7B,OAAC,OAAI,UAAU,uCAAuC,sBACxChO,MAAC,QAAK,UAAU,oBAAqB,WAAI,OAAO,EAAO,KACrE,EACEipC,EACFjpC,MAAC,OACE,WAAI,QAAQ,IAAKlG,GAAY,CAC5B,MAAMquB,EAAOghB,EAAsBrvC,CAAO,EACpC+uC,EAAc3iB,GAAgBpsB,EAAQ,IAAKA,EAAQ,GAAG,EAC5D,OACEkU,OAAC,OAA6B,UAAU,uBACrC,UAAAlU,EAAQ,MAAQA,EAAQ,WAAW,MAAM,EAAG,EAAE,EAAG,IAClDkU,OAAC,QAAK,UAAU,0CAA0C,cACtDlU,EAAQ,WAAW,MAAM,EAAG,CAAC,EAAE,cAAc,KACjD,EACCquB,IAAS,MACRna,OAAC,QAAK,UAAU,qCAAqC,eAChDqY,GAAe8B,CAAI,GACxB,EAED0gB,GACC7oC,MAAC8oC,GAAA,CACC,IAAKhvC,EAAQ,IACb,IAAKA,EAAQ,IACb,UAAWA,EAAQ,YACrB,GAfMA,EAAQ,UAiBlB,CAEJ,CAAC,EACH,EAEAkU,OAAC,OAAI,UAAU,uBACZ,UAAAia,EAAI,QAAQ,CAAC,EAAE,MAAQA,EAAI,QAAQ,CAAC,EAAE,WAAW,MAAM,EAAG,EAAE,EAAG,IAChEja,OAAC,QAAK,UAAU,0CAA0C,cAAEia,EAAI,OAAO,KAAC,EACvEA,EAAI,mBAAqB,MACxBja,OAAC,QAAK,UAAU,qCAAqC,eAChDqY,GAAe4B,EAAI,gBAAgB,GACxC,EAED/B,GAAgB+B,EAAI,QAAQ,CAAC,EAAE,IAAKA,EAAI,QAAQ,CAAC,EAAE,GAAG,GACrDjoB,MAAC8oC,GAAA,CACC,IAAK7gB,EAAI,QAAQ,CAAC,EAAE,IACpB,IAAKA,EAAI,QAAQ,CAAC,EAAE,IACpB,UAAWA,EAAI,QAAQ,CAAC,EAAE,YAC5B,EAEJ,GAEJ,GACF,CAEJ,CAKA,SAAS6gB,GAAe,CAAE,IAAA3iB,EAAK,IAAAC,EAAK,UAAA/zB,GAA8D,CAChG,MAAM+2C,EAAepgE,GAAwB,CAC3CA,EAAE,iBACFA,EAAE,kBAEF,MAAMwoB,EAAM,OAAO,SAAS,OAAS,OAAO,SAAS,SAAW61C,GAAgBh1C,CAAS,EACzF,OAAO,KAAKb,EAAK,QAAQ,CAC3B,EAEA,OACEwc,OAAC,QACC,UAAU,oGACV,QAASo7B,EACT,MAAM,cACP,cACGjjB,EAAI,QAAQ,CAAC,EAAE,KAAGC,EAAI,QAAQ,CAAC,EAAE,MAGzC,CAEA,SAASqiB,GAA0BP,EAAuC,CAExE,IAAI1gB,EAAyB,KACzBC,EAAyB,KAE7B,GAAIygB,EAAS,KAAK,OAAS,EAAG,CAC5B,MAAMmB,EAAUnB,EAAS,KAAKA,EAAS,KAAK,OAAS,CAAC,EAGpDmB,EAAQ,QAAQ,SAAW,GAC3BnjB,GAAgBmjB,EAAQ,QAAQ,CAAC,EAAE,IAAKA,EAAQ,QAAQ,CAAC,EAAE,GAAG,IAE9D7hB,EAAU6hB,EAAQ,QAAQ,CAAC,EAAE,IAC7B5hB,EAAU4hB,EAAQ,QAAQ,CAAC,EAAE,IAEjC,MAEMnjB,GAAgBgiB,EAAS,OAAO,IAAKA,EAAS,OAAO,GAAG,IAC1D1gB,EAAU0gB,EAAS,OAAO,IAC1BzgB,EAAUygB,EAAS,OAAO,KAS9B,OALI1gB,IAAY,MAAQC,IAAY,MAKhC,CAACvB,GAAgBgiB,EAAS,SAAS,IAAKA,EAAS,SAAS,GAAG,EACxD,KAGFziB,GAAkB+B,EAASC,EAASygB,EAAS,SAAS,IAAKA,EAAS,SAAS,GAAG,CACzF,CCtZA,SAASoB,GAAuBp2C,EAAcq2C,EAA+B,CAC3E,GAAI,CAACA,EAAW,OAAOr2C,EAEvB,MAAMs2C,EAAiB,iBACjBn2B,EAAqB,GAC3B,IAAIo2B,EAAY,EACZ39B,EACA49B,EAAW,EAEf,MAAQ59B,EAAQ09B,EAAe,KAAKt2C,CAAI,KAAO,MAAM,CAE/C4Y,EAAM,MAAQ29B,GAChBp2B,EAAM,KAAKngB,EAAK,MAAMu2C,EAAW39B,EAAM,KAAK,CAAC,EAG/C,MAAM69B,EAAgB79B,EAAM,CAAC,EACvB89B,EAAeD,IAAkBJ,EAEvCl2B,EAAM,KACJrF,OAAC,QAEC,UAAWhN,GACT,iBACA4oC,EAAe,yCAA2C,0BAE7D,eACID,EAAc,MANZD,GAAA,CAOP,EAGFD,EAAY39B,EAAM,MAAQA,EAAM,CAAC,EAAE,MACrC,CAGA,OAAI29B,EAAYv2C,EAAK,QACnBmgB,EAAM,KAAKngB,EAAK,MAAMu2C,CAAS,CAAC,EAG3Bp2B,EAAM,OAAS,EAAIA,EAAQngB,CACpC,CASA,SAAS22C,GAAc,CAAE,MAAAp+B,EAAO,QAAAq+B,EAAS,QAAA1oB,GAA+B,CAEtE,MAAM3G,EAAQ,IADEoM,GAAgBpb,CAAK,EACX,OAAO,IAE3BtN,EACJijB,IAAY,SACR,0GACA,8FAEN,OACEphB,MAAC,QACC,UAAA7B,EACA,QAAUn1B,GAAM,CACdA,EAAE,kBACF8gE,EAAA,CACF,EACA,MAAM,oBAEL,SAAArvB,CAAA,EAGP,CAEO,SAASsvB,GAAY,CAC1B,SAAA1/B,EACA,SAAA5Q,EACA,QAAAuwC,EACA,aAAAx/B,EAAe,GACf,iBAAAE,EAAmB,GACnB,cAAAu/B,EACA,YAAAC,EACA,UAAAX,EACA,OAAAv3C,CACF,EAAqB,CACnB,MAAMiX,EAAUrV,SAAuB,IAAI,EACrCu2C,EAAwBv2C,SAAe,CAAC,EACxCw2C,EAAmBx2C,SAAgB,EAAI,EACvC,CAACy2C,EAAoBC,CAAqB,EAAIt2C,WAAS,EAAK,EAC5D,CAACu2C,EAAcC,CAAe,EAAIx2C,WAG9B,IAAI,EAGRy2C,EAAiB72C,SAAO,CAC5B,UAAW,EACX,aAAc,EACd,aAAc,EACd,WAAY,GACZ,cAAe,GAChB,EAGDu3B,kBAAgB,IAAM,CACpB,GAAI,CAACliB,EAAQ,QAAS,OAEtB,MAAMyhC,EAAOzhC,EAAQ,QACf0hC,EAAgBtgC,EAAS,OAAS8/B,EAAsB,QAE9D,GAAIC,EAAiB,SAAW//B,EAAS,OAAS,EAEhDqgC,EAAK,UAAYA,EAAK,aACtBN,EAAiB,QAAU,WAClBO,EAAgB,GAAKR,EAAsB,QAAU,EAAG,CAEjE,MAAMS,EAAmBF,EAAK,aAAeD,EAAe,QAAQ,aAEhEA,EAAe,QAAQ,YAAcG,EAAmB,EAE1DF,EAAK,UAAYD,EAAe,QAAQ,UAAYG,EAC3CH,EAAe,QAAQ,gBAEhCC,EAAK,UAAYA,EAAK,aAE1B,CAEAP,EAAsB,QAAU9/B,EAAS,MAC3C,EAAG,CAACA,CAAQ,CAAC,EAGbnW,YAAU,IAAM,CACVmW,EAAS,SAAW,IACtB+/B,EAAiB,QAAU,GAC3BD,EAAsB,QAAU,EAChCM,EAAe,QAAU,CACvB,UAAW,EACX,aAAc,EACd,aAAc,EACd,WAAY,GACZ,cAAe,IAGrB,EAAG,CAACpgC,EAAS,MAAM,CAAC,EAGpB,MAAM6yB,EAAe9oC,cAAY,IAAM,CACrC,GAAI,CAAC6U,EAAQ,QAAS,OAEtB,KAAM,CAAE,UAAA0zB,EAAW,aAAAH,EAAc,aAAAC,CAAA,EAAiBxzB,EAAQ,QACpD4hC,EAAqBrO,EAAeG,EAAYF,EAGtDgO,EAAe,QAAU,CACvB,UAAA9N,EACA,aAAAH,EACA,aAAAC,EACA,WAAYE,EAAY,IACxB,cAAekO,EAAqB,KAItCP,EAAsBO,EAAqB,GAAG,EAE1C,GAACX,GAAe1/B,GAAgB,CAACE,IAGjCiyB,EAAY,KACduN,EAAA,CAEJ,EAAG,CAACA,EAAa1/B,EAAcE,CAAgB,CAAC,EAG1CogC,EAAiB12C,cAAY,IAAM,CACnC6U,EAAQ,UACVA,EAAQ,QAAQ,UAAYA,EAAQ,QAAQ,aAEhD,EAAG,EAAE,EAGC8hC,EAAczzC,GACbA,GACEmC,EAAS,KAAM/vB,GAAMA,EAAE,aAAe4tB,CAAe,GAAK,KAI7D0zC,EAAoB14C,GACjBmH,EAAS,KAAM/vB,GAAMA,EAAE,OAAS4oB,CAAI,GAAK,KAI5C24C,EAAgB,CACpBv2C,EACAoF,EACAoxC,IACe,CACf,GAAIx2C,EAAI,OAAS,QAAUoF,EACzB,MAAO,CACL,KAAMA,EAAQ,MAAQA,EAAQ,WAAW,MAAM,EAAG,EAAE,EACpD,kBAAmBA,EAAQ,WAC3B,IAAKA,EAAQ,IACb,IAAKA,EAAQ,KAIjB,GAAIoxC,EAAc,CAChB,MAAMC,EAAgBH,EAAiBE,CAAY,EACnD,GAAIC,EACF,MAAO,CACL,KAAMD,EACN,kBAAmBC,EAAc,WACjC,IAAKA,EAAc,IACnB,IAAKA,EAAc,IAGzB,CAEA,MAAO,CACL,KAAMD,GAAgB,UACtB,kBAAmBx2C,EAAI,kBAAoB,GAC3C,IAAK,KACL,IAAK,KAET,EAEA,GAAIs1C,EACF,OACEhqC,MAAC,OAAI,UAAU,+DAA+D,+BAE9E,EAIJ,GAAIqK,EAAS,SAAW,EACtB,OACErK,MAAC,OAAI,UAAU,+DAA+D,2BAE9E,EAOJ,MAAMorC,EAAiB,CAAC,GAAG/gC,CAAQ,EAAE,KAAK,CAAC3hC,EAAGK,IAAML,EAAE,YAAcK,EAAE,WAAW,EAG3EsiE,EAAe,CAAC32C,EAAcwyB,IAC9BxyB,EAAI,SAAiB,eACrBA,EAAI,OAAS,QAAUA,EAAI,iBAAyBA,EAAI,iBACrDwyB,GAAU,cAGnB,OACElZ,OAAC,OAAI,UAAU,kCACb,UAAAA,OAAC,OACC,UAAU,mDACV,IAAK/E,EACL,SAAUi0B,EAET,UAAA1yB,GACCxK,MAAC,OAAI,UAAU,iDAAiD,qCAEhE,EAED,CAACwK,GAAgBE,SACf,OAAI,UAAU,iDAAiD,wCAEhE,EAED0gC,EAAe,IAAI,CAAC12C,EAAKoK,IAAU,OAElC,MAAMhF,EAAUpF,EAAI,OAAS,OAASq2C,EAAWr2C,EAAI,gBAAgB,EAAI,KACnE42C,GAAaxxC,GAAA,YAAAA,EAAS,QAASvE,GAG/B,CAAE,OAAA2xB,GAAQ,QAAAhV,CAAA,EAAYo5B,EACxB,CAAE,OAAQ,KAAM,QAAS52C,EAAI,MAC7BmwB,GAAoBnwB,EAAI,IAAI,EAC1B62C,EAAgB72C,EAAI,SACtB,OACAoF,GAAA,YAAAA,EAAS,OAAQotB,MAAUtyB,EAAAF,EAAI,mBAAJ,YAAAE,EAAsB,MAAM,EAAG,KAAM,UAE9D42C,GAAiB,CAAC92C,EAAI,UAAYu1C,GAAiBsB,IAAkB,UAGrEE,GAAmBJ,EAAa32C,EAAKwyB,EAAM,EAC3CwkB,GAAUN,EAAetsC,EAAQ,CAAC,EAClC6sC,EAAgBD,GAClBL,EAAaK,GAAS7mB,GAAoB6mB,GAAQ,IAAI,EAAE,MAAM,EAC9D,KACEE,GAAa,CAACl3C,EAAI,UAAY+2C,KAAqBE,EACnDE,EAAiB/sC,IAAU,EAGjC,IAAIgtC,EAA4B,KAC5BC,EAAoB,GACxB,GAAI,CAACr3C,EAAI,UACP,GAAIA,EAAI,OAAS,QAAUA,EAAI,iBAE7Bo3C,GAAahyC,GAAA,YAAAA,EAAS,OAAQ,KAC9BiyC,EAAYr3C,EAAI,yBACPwyB,GAAQ,CAEjB,MAAMikB,EAAgBH,EAAiB9jB,EAAM,EAC7C4kB,EAAa5kB,GACb6kB,GAAYZ,GAAA,YAAAA,EAAe,aAAc,QAAQjkB,EAAM,EACzD,EAGF,OACElZ,OAAC,OAEC,UAAWhN,GACT,+BACAtM,EAAI,UAAY,4BAChBk3C,IAAc,CAACC,GAAkB,QAGlC,WAACn3C,EAAI,UACJsL,MAAC,OAAI,UAAU,6CACZ,SAAA4rC,IAAcG,GACb/rC,MAAC0P,GAAA,CAAc,KAAMo8B,EAAY,UAAWC,EAAW,KAAM,GAAI,EAErE,EAEF/9B,OAAC,OACC,UAAWhN,GACT,iCACAtM,EAAI,SAAW,eAAiB,YAGjC,UAAAk3C,IACC59B,OAAC,OAAI,UAAU,yDACZ,UAAAw9B,GACCxrC,MAAC,QACC,UAAU,oDACV,QAAS,IAAMiqC,EAAcsB,CAAa,EAC1C,MAAO,WAAWA,CAAa,GAE9B,SAAAA,CAAA,GAGHA,EAEFvrC,MAAC,QAAK,UAAU,wDACb,YAAWtL,EAAI,kBAAoBA,EAAI,WAAW,EACrD,EACC,CAACA,EAAI,UAAYA,EAAI,OAASA,EAAI,MAAM,OAAS,GAChDsL,MAAC6pC,GAAA,CACC,MAAOn1C,EAAI,MACX,QAAQ,SACR,QAAS,IACP81C,EAAgB,CACd,MAAO91C,EAAI,MACX,WAAYu2C,EAAcv2C,EAAKoF,EAASotB,EAAM,EAC/C,GAEL,EAEJ,EAEFlZ,OAAC,OAAI,UAAU,kCACZ,UAAAkE,EAAQ,MAAM;AAAA,CAAI,EAAE,IAAI,CAAC85B,EAAM5vC,GAAG6vC,KACjCj+B,OAAC,QACE,UAAAs7B,GAAuB0C,EAAMzC,CAAS,EACtCntC,GAAI6vC,GAAI,OAAS,SAAM,OAAG,IAFlB7vC,EAGX,CACD,EACA,CAACwvC,IACA59B,OAAAyW,WAAA,CACE,UAAAzkB,MAAC,QAAK,UAAU,4CACb,SAAA+kB,GAAWrwB,EAAI,kBAAoBA,EAAI,WAAW,EACrD,EACC,CAACA,EAAI,UAAYA,EAAI,OAASA,EAAI,MAAM,OAAS,GAChDsL,MAAC6pC,GAAA,CACC,MAAOn1C,EAAI,MACX,QAAQ,SACR,QAAS,IACP81C,EAAgB,CACd,MAAO91C,EAAI,MACX,WAAYu2C,EAAcv2C,EAAKoF,EAASotB,EAAM,EAC/C,GAEL,EAEJ,EAEDxyB,EAAI,WAAaA,EAAI,MAAQ,EAAI,KAAKA,EAAI,MAAQ,EAAIA,EAAI,MAAQ,EAAE,GAAK,OAC5E,IACF,GA9EKA,EAAI,GAiFf,CAAC,KAIF21C,GACCrqC,MAAC,UACC,QAAS8qC,EACT,UAAU,+JACV,MAAM,mBAEN,SAAA9qC,MAAC,OACC,MAAM,6BACN,MAAM,KACN,OAAO,KACP,QAAQ,YACR,KAAK,OACL,OAAO,eACP,YAAY,IACZ,cAAc,QACd,eAAe,QACf,UAAU,wBAEV,SAAAA,MAAC,YAAS,OAAO,iBAAiB,GACpC,GAKHuqC,GACCvqC,MAAC0nC,GAAA,CACC,KAAM,GACN,QAAS,IAAM8C,EAAgB,IAAI,EACnC,MAAOD,EAAa,MACpB,WAAYA,EAAa,WACzB,SAAA9wC,EACA,OAAQzH,GAAU,MACpB,EAEJ,CAEJ,CClbA,MAAMk6C,GAAgB,IAChBC,GAAuB,IACvBC,GAAqB,IACrBC,GAA4B,IAC5BC,GAAwB,EAoBjBC,GAAe9/B,aAAkD,SAC5E,CAAE,OAAA+/B,EAAQ,SAAA9mC,EAAU,YAAA+mC,EAAa,eAAAC,EAAgB,iBAAAC,EAAkB,WAAAC,CAAA,EACnE1kC,EACA,CACA,KAAM,CAAChV,EAAM25C,CAAO,EAAI74C,WAAS,EAAE,EAC7B,CAAC84C,EAASC,CAAU,EAAI/4C,WAAS,EAAK,EACtCg5C,EAAWp5C,SAAyB,IAAI,EAE9Cq5C,sBAAoB/kC,EAAK,KAAO,CAC9B,WAAaglC,GAAyB,OACpCL,EAASz0C,GAASA,EAAO80C,CAAY,GAErCt4C,EAAAo4C,EAAS,UAAT,MAAAp4C,EAAkB,OACpB,GACA,EAGF,MAAMu4C,EAAStzC,UAAQ,IAAM,CAC3B,GAAI8yC,IAAqB,UACvB,MAAO,CACL,UAAWR,GACX,SAAUD,GACV,UAAWA,EAAA,EAEf,GAAWS,IAAqB,UAAW,CAEzC,MAAMS,GAAUR,GAAA,YAAAA,EAAY,SAAU,GAChCS,EAAY,KAAK,IAAI,EAAGjB,GAAqBgB,EAAU,CAAC,EAC9D,MAAO,CACL,UAAWf,GACX,SAAU,KAAK,IAAI,EAAGgB,EAAYf,EAAqB,EACvD,UAAAe,CAAA,CAEJ,CACA,OAAO,IACT,EAAG,CAACV,EAAkBC,CAAU,CAAC,EAG3B,CAAE,WAAAU,EAAY,eAAAC,CAAA,EAAmB1zC,UAAQ,IAG1C,CACH,GAAI,CAACszC,EAAQ,MAAO,CAAE,WAAY,SAAU,eAAgB,MAE5D,MAAMz6B,EAAMxf,EAAK,OACjB,OAAIwf,GAAOy6B,EAAO,UACT,CAAE,WAAY,QAAS,eAAgB,6BAE5Cz6B,GAAOy6B,EAAO,SACT,CAAE,WAAY,SAAU,eAAgB,0CAE7Cz6B,GAAOy6B,EAAO,UACT,CAAE,WAAY,UAAW,eAAgB,0CAE3C,CAAE,WAAY,SAAU,eAAgB,KACjD,EAAG,CAACj6C,EAAK,OAAQi6C,CAAM,CAAC,EAElBK,EAAYL,EAASA,EAAO,UAAYj6C,EAAK,OAAS,EAEtDu6C,EAAer5C,cACnB,MAAOprB,GAAiB,CACtBA,EAAE,iBACF,MAAM0kE,EAAUx6C,EAAK,OAGrB,GAAIw5C,EAAgB,CAClB,GAAII,GAAWpnC,EAAU,OACzBqnC,EAAW,EAAI,EACf,GAAI,CACF,MAAMP,EAAOkB,CAAO,EACpBb,EAAQ,EAAE,CACZ,OAAS37C,EAAK,CACZ,QAAQ,MAAM,+BAAgCA,CAAG,EACjDkO,GAAM,MAAM,8BAA+B,CACzC,YAAalO,aAAe,MAAQA,EAAI,QAAU,yBACnD,EACD,MACF,SACE67C,EAAW,EAAK,CAClB,CAEA,WAAW,WAAM,OAAAn4C,EAAAo4C,EAAS,UAAT,YAAAp4C,EAAkB,SAAS,CAAC,CAC/C,KAAO,CACL,GAAI,CAAC84C,GAAWZ,GAAWpnC,EAAU,OACrCqnC,EAAW,EAAI,EACf,GAAI,CACF,MAAMP,EAAOkB,CAAO,EACpBb,EAAQ,EAAE,CACZ,OAAS37C,EAAK,CACZ,QAAQ,MAAM,0BAA2BA,CAAG,EAC5CkO,GAAM,MAAM,yBAA0B,CACpC,YAAalO,aAAe,MAAQA,EAAI,QAAU,yBACnD,EACD,MACF,SACE67C,EAAW,EAAK,CAClB,CAEA,WAAW,WAAM,OAAAn4C,EAAAo4C,EAAS,UAAT,YAAAp4C,EAAkB,SAAS,CAAC,CAC/C,CACF,EACA,CAAC1B,EAAM45C,EAASpnC,EAAU8mC,EAAQE,CAAc,GAG5C/iC,EAAgBvV,cACnBprB,GAAuC,CAClCA,EAAE,MAAQ,SAAW,CAACA,EAAE,WAC1BA,EAAE,iBACFykE,EAAazkE,CAAyB,EAE1C,EACA,CAACykE,CAAY,GAITE,EAAYjB,EAAiB,GAAOx5C,EAAK,OAAO,OAAS,EAGzD06C,EAAkB,CAAClB,GAAkBS,IAAW,KAEtD,OACEn/B,OAAC,QAAK,UAAU,uDAAuD,SAAUy/B,EAC/E,UAAAz/B,OAAC,OAAI,UAAU,aACb,UAAAhO,MAAC8d,GAAA,CACC,IAAKkvB,EACL,KAAMN,EAAiB,WAAa,OACpC,aAAcA,EAAiB,MAAQ,OACvC,MAAOx5C,EACP,SAAWlqB,GAAM6jE,EAAQ7jE,EAAE,OAAO,KAAK,EACvC,UAAW2gC,EACX,YACE8iC,IACCC,EAAiB,oCAAsC,qBAE1D,SAAUhnC,GAAYonC,EACtB,UAAU,mBAEZ9sC,MAACgiB,GAAA,CACC,KAAK,SACL,SAAUtc,GAAYonC,GAAW,CAACa,EAClC,UAAU,gBAET,SAAAb,EACGJ,EACE,gBACA,aACFA,EACEx5C,EAAK,OACH,uBACA,oCACF,QACR,EACF,EACC06C,GACC5/B,OAAC,OAAI,UAAU,8CACb,UAAAA,OAAC,QACC,UAAWhN,GACT,eACAssC,IAAe,SAAWA,IAAe,SACrC,2BACAA,IAAe,UACb,kBACA,yBAGP,UAAAp6C,EAAK,OAAO,IAAEi6C,EAAQ,UACtBK,EAAY,GAAK,KAAKA,CAAS,OAEjCD,UACE,QAAK,UAAWvsC,GAAGssC,IAAe,QAAU,eAAiB,iBAAiB,EAAG,eAC7EC,CAAA,EACL,GAEJ,GAEJ,CAEJ,CAAC,ECtND,SAASzuB,GAAWC,EAAW,CAC7B,MAAMC,EAA4BC,GAAgBF,CAAS,EACrDG,EAAQnB,aAAiB,CAACzc,EAAO6d,IAAiB,CACtD,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EAC7B+d,EAAgBC,WAAe,QAAQxS,CAAQ,EAC/CyS,EAAYF,EAAc,KAAKG,EAAW,EAChD,GAAID,EAAW,CACb,MAAME,EAAaF,EAAU,MAAM,SAC7BG,EAAcL,EAAc,IAAKM,GACjCA,IAAUJ,EACRD,WAAe,MAAMG,CAAU,EAAI,EAAUH,WAAe,KAAK,IAAI,EAClEM,iBAAqBH,CAAU,EAAIA,EAAW,MAAM,SAAW,KAE/DE,CAEV,EACD,OAAuB3f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAUS,iBAAqBH,CAAU,EAAII,eAAmBJ,EAAY,OAAQC,CAAW,EAAI,KAAM,CACpL,CACA,OAAuB1f,MAAIgf,EAAW,CAAE,GAAGI,EAAW,IAAKD,EAAc,SAAArS,EAAU,CACrF,CAAC,EACD,OAAAoS,EAAM,YAAc,GAAGH,CAAS,QACzBG,CACT,CAGA,SAASD,GAAgBF,EAAW,CAClC,MAAMC,EAAYjB,aAAiB,CAACzc,EAAO6d,IAAiB,CAC1D,KAAM,CAAE,SAAArS,EAAU,GAAGsS,CAAS,EAAK9d,EACnC,GAAIse,iBAAqB9S,CAAQ,EAAG,CAClC,MAAMiT,EAAcC,GAAclT,CAAQ,EACpCmT,EAASC,GAAWd,EAAWtS,EAAS,KAAK,EACnD,OAAIA,EAAS,OAASqT,aACpBF,EAAO,IAAMd,EAAelB,GAAYkB,EAAcY,CAAW,EAAIA,GAEhEF,eAAmB/S,EAAUmT,CAAM,CAC5C,CACA,OAAOX,WAAe,MAAMxS,CAAQ,EAAI,EAAIwS,WAAe,KAAK,IAAI,EAAI,IAC1E,CAAC,EACD,OAAAN,EAAU,YAAc,GAAGD,CAAS,aAC7BC,CACT,CACA,IAAIoB,GAAuB,OAAO,iBAAiB,EAWnD,SAASZ,GAAYG,EAAO,CAC1B,OAAOC,iBAAqBD,CAAK,GAAK,OAAOA,EAAM,MAAS,YAAc,cAAeA,EAAM,MAAQA,EAAM,KAAK,YAAcS,EAClI,CACA,SAASF,GAAWd,EAAWiB,EAAY,CACzC,MAAMC,EAAgB,CAAE,GAAGD,CAAU,EACrC,UAAWE,KAAYF,EAAY,CACjC,MAAMG,EAAgBpB,EAAUmB,CAAQ,EAClCE,EAAiBJ,EAAWE,CAAQ,EACxB,WAAW,KAAKA,CAAQ,EAEpCC,GAAiBC,EACnBH,EAAcC,CAAQ,EAAI,IAAI/I,IAAS,CACrC,MAAMhY,EAASihB,EAAe,GAAGjJ,CAAI,EACrC,OAAAgJ,EAAc,GAAGhJ,CAAI,EACdhY,CACT,EACSghB,IACTF,EAAcC,CAAQ,EAAIC,GAEnBD,IAAa,QACtBD,EAAcC,CAAQ,EAAI,CAAE,GAAGC,EAAe,GAAGC,CAAc,EACtDF,IAAa,cACtBD,EAAcC,CAAQ,EAAI,CAACC,EAAeC,CAAc,EAAE,OAAO,OAAO,EAAE,KAAK,GAAG,EAEtF,CACA,MAAO,CAAE,GAAGrB,EAAW,GAAGkB,CAAa,CACzC,CACA,SAASN,GAAcnB,EAAS,SAC9B,IAAI6B,GAAS9rB,EAAA,OAAO,yBAAyBiqB,EAAQ,MAAO,KAAK,IAApD,YAAAjqB,EAAuD,IAChE+rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eAC7D,OAAIC,EACK9B,EAAQ,KAEjB6B,GAAS7rB,EAAA,OAAO,yBAAyBgqB,EAAS,KAAK,IAA9C,YAAAhqB,EAAiD,IAC1D8rB,EAAUD,GAAU,mBAAoBA,GAAUA,EAAO,eACrDC,EACK9B,EAAQ,MAAM,IAEhBA,EAAQ,MAAM,KAAOA,EAAQ,IACtC,CCxFA,SAASgvB,GAAiBv7C,EAAM,CAC9B,MAAMw7C,EAAgBx7C,EAAO,qBACvB,CAACy7C,EAAyBC,CAAqB,EAAIxkB,GAAmBskB,CAAa,EACnF,CAACG,EAAwBC,CAAoB,EAAIH,EACrDD,EACA,CAAE,cAAe,CAAE,QAAS,IAAI,EAAI,QAAyB,IAAI,GAAK,CAC1E,EACQK,EAAsB7sC,GAAU,CACpC,KAAM,CAAE,MAAAwoB,EAAO,SAAAhd,CAAQ,EAAKxL,EACtB4G,EAAM9J,GAAM,OAAO,IAAI,EACvBgwC,EAAUhwC,GAAM,OAAuB,IAAI,GAAK,EAAE,QACxD,OAAuB4B,MAAIiuC,EAAwB,CAAE,MAAAnkB,EAAO,QAAAskB,EAAS,cAAelmC,EAAK,SAAA4E,EAAU,CACrG,EACAqhC,EAAmB,YAAcL,EACjC,MAAMO,EAAuB/7C,EAAO,iBAC9Bg8C,EAAqBxvB,GAAWuvB,CAAoB,EACpDE,EAAiBnwC,GAAM,WAC3B,CAACkD,EAAO6d,IAAiB,CACvB,KAAM,CAAE,MAAA2K,EAAO,SAAAhd,CAAQ,EAAKxL,EACtB6nB,EAAU+kB,EAAqBG,EAAsBvkB,CAAK,EAC1DuE,EAAe9P,GAAgBY,EAAcgK,EAAQ,aAAa,EACxE,OAAuBnpB,MAAIsuC,EAAoB,CAAE,IAAKjgB,EAAc,SAAAvhB,CAAQ,CAAE,CAChF,CACJ,EACEyhC,EAAe,YAAcF,EAC7B,MAAMG,EAAiBl8C,EAAO,qBACxBm8C,EAAiB,6BACjBC,EAAyB5vB,GAAW0vB,CAAc,EAClDG,EAAqBvwC,GAAM,WAC/B,CAACkD,EAAO6d,IAAiB,CACvB,KAAM,CAAE,MAAA2K,EAAO,SAAAhd,EAAU,GAAG8hC,CAAQ,EAAKttC,EACnC4G,EAAM9J,GAAM,OAAO,IAAI,EACvBiwB,EAAe9P,GAAgBY,EAAcjX,CAAG,EAChDihB,EAAU+kB,EAAqBM,EAAgB1kB,CAAK,EAC1D,OAAA1rB,GAAM,UAAU,KACd+qB,EAAQ,QAAQ,IAAIjhB,EAAK,CAAE,IAAAA,EAAK,GAAG0mC,EAAU,EACtC,IAAM,KAAKzlB,EAAQ,QAAQ,OAAOjhB,CAAG,EAC7C,EACsBlI,MAAI0uC,EAAwB,CAAO,CAACD,CAAc,EAAG,GAAM,IAAKpgB,EAAc,SAAAvhB,EAAU,CACjH,CACJ,EACE6hC,EAAmB,YAAcH,EACjC,SAASK,EAAc/kB,EAAO,CAC5B,MAAMX,EAAU+kB,EAAqB57C,EAAO,qBAAsBw3B,CAAK,EAWvE,OAViB1rB,GAAM,YAAY,IAAM,CACvC,MAAM0wC,EAAiB3lB,EAAQ,cAAc,QAC7C,GAAI,CAAC2lB,EAAgB,MAAO,GAC5B,MAAMC,EAAe,MAAM,KAAKD,EAAe,iBAAiB,IAAIL,CAAc,GAAG,CAAC,EAKtF,OAJc,MAAM,KAAKtlB,EAAQ,QAAQ,QAAQ,EACtB,KACzB,CAACzgD,EAAGK,IAAMgmE,EAAa,QAAQrmE,EAAE,IAAI,OAAO,EAAIqmE,EAAa,QAAQhmE,EAAE,IAAI,OAAO,CAC1F,CAEI,EAAG,CAACogD,EAAQ,cAAeA,EAAQ,OAAO,CAAC,CAE7C,CACA,MAAO,CACL,CAAE,SAAUglB,EAAoB,KAAMI,EAAgB,SAAUI,CAAkB,EAClFE,EACAb,CACJ,CACA,CClEA,IAAIgB,GAAmB/lB,gBAAoB,MAAM,EAKjD,SAASgmB,GAAaC,EAAU,CAC9B,MAAMC,EAAY5lB,aAAiBylB,EAAgB,EACnD,OAAOE,GAAYC,GAAa,KAClC,CCGA,IAAIC,GAAc,gCACd9e,GAAgB,CAAE,QAAS,GAAO,WAAY,EAAI,EAClD+e,GAAa,mBACb,CAACC,GAAYT,GAAeb,EAAqB,EAAIH,GAAiBwB,EAAU,EAChF,CAACE,GAA+BC,EAA2B,EAAIhmB,GACjE6lB,GACA,CAACrB,EAAqB,CACxB,EACI,CAACyB,GAAqBC,EAAqB,EAAIH,GAA8BF,EAAU,EACvFM,GAAmB5xB,aACrB,CAACzc,EAAO6d,IACiBnf,MAAIsvC,GAAW,SAAU,CAAE,MAAOhuC,EAAM,wBAAyB,SAA0BtB,MAAIsvC,GAAW,KAAM,CAAE,MAAOhuC,EAAM,wBAAyB,SAA0BtB,MAAI4vC,GAAsB,CAAE,GAAGtuC,EAAO,IAAK6d,EAAc,CAAC,CAAE,CAAC,CAAE,CAE5Q,EACAwwB,GAAiB,YAAcN,GAC/B,IAAIO,GAAuB7xB,aAAiB,CAACzc,EAAO6d,IAAiB,CACnE,KAAM,CACJ,wBAAA0wB,EACA,YAAAC,EACA,KAAArf,EAAO,GACP,IAAAjoB,EACA,iBAAkBunC,EAClB,wBAAAC,EACA,yBAAAC,EACA,aAAAC,EACA,0BAAAC,EAA4B,GAC5B,GAAGC,CACP,EAAM9uC,EACE4G,EAAM8jB,SAAa,IAAI,EACvBqC,EAAe9P,GAAgBY,EAAcjX,CAAG,EAChD+0B,EAAYgS,GAAazmC,CAAG,EAC5B,CAAC6nC,EAAkBC,CAAmB,EAAIhlB,GAAqB,CACnE,KAAMykB,EACN,YAAaC,GAA2B,KACxC,SAAUC,EACV,OAAQZ,EACZ,CAAG,EACK,CAACkB,EAAkBC,CAAmB,EAAItlB,WAAe,EAAK,EAC9DulB,EAAmBzjB,GAAekjB,CAAY,EAC9CQ,EAAW7B,GAAcgB,CAAuB,EAChDc,EAAkB3kB,SAAa,EAAK,EACpC,CAAC4kB,EAAqBC,CAAsB,EAAI3lB,WAAe,CAAC,EACtEe,mBAAgB,IAAM,CACpB,MAAM9N,EAAOjW,EAAI,QACjB,GAAIiW,EACF,OAAAA,EAAK,iBAAiBixB,GAAaqB,CAAgB,EAC5C,IAAMtyB,EAAK,oBAAoBixB,GAAaqB,CAAgB,CAEvE,EAAG,CAACA,CAAgB,CAAC,EACEzwC,MACrByvC,GACA,CACE,MAAOI,EACP,YAAAC,EACA,IAAK7S,EACL,KAAAxM,EACA,iBAAA4f,EACA,YAAa7xB,cACVsyB,GAAcR,EAAoBQ,CAAS,EAC5C,CAACR,CAAmB,CAC5B,EACM,eAAgB9xB,cAAkB,IAAMgyB,EAAoB,EAAI,EAAG,EAAE,EACrE,mBAAoBhyB,cAClB,IAAMqyB,EAAwBE,GAAcA,EAAY,CAAC,EACzD,EACR,EACM,sBAAuBvyB,cACrB,IAAMqyB,EAAwBE,GAAcA,EAAY,CAAC,EACzD,EACR,EACM,SAA0B/wC,MACxBysB,GAAU,IACV,CACE,SAAU8jB,GAAoBK,IAAwB,EAAI,GAAK,EAC/D,mBAAoBd,EACpB,GAAGM,EACH,IAAK/hB,EACL,MAAO,CAAE,QAAS,OAAQ,GAAG/sB,EAAM,KAAK,EACxC,YAAamnB,GAAqBnnB,EAAM,YAAa,IAAM,CACzDqvC,EAAgB,QAAU,EAC5B,CAAC,EACD,QAASloB,GAAqBnnB,EAAM,QAAU7M,GAAU,CACtD,MAAMu8C,EAAkB,CAACL,EAAgB,QACzC,GAAIl8C,EAAM,SAAWA,EAAM,eAAiBu8C,GAAmB,CAACT,EAAkB,CAChF,MAAMU,EAAkB,IAAI,YAAY7B,GAAa9e,EAAa,EAElE,GADA77B,EAAM,cAAc,cAAcw8C,CAAe,EAC7C,CAACA,EAAgB,iBAAkB,CACrC,MAAMzd,EAAQkd,IAAW,OAAQhsB,IAASA,GAAK,SAAS,EAClDwsB,GAAa1d,EAAM,KAAM9O,IAASA,GAAK,MAAM,EAC7CysB,EAAc3d,EAAM,KAAM9O,IAASA,GAAK,KAAO2rB,CAAgB,EAI/De,GAHiB,CAACF,GAAYC,EAAa,GAAG3d,CAAK,EAAE,OACzD,OAClB,EACsD,IAAK9O,IAASA,GAAK,IAAI,OAAO,EACpEoN,GAAWsf,GAAgBjB,CAAyB,CACtD,CACF,CACAQ,EAAgB,QAAU,EAC5B,CAAC,EACD,OAAQloB,GAAqBnnB,EAAM,OAAQ,IAAMkvC,EAAoB,EAAK,CAAC,CACrF,CACA,CACA,CACA,CACA,CAAC,EACGa,GAAY,uBACZC,GAAuBvzB,aACzB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CACJ,wBAAA0wB,EACA,UAAA0B,EAAY,GACZ,OAAAC,EAAS,GACT,UAAAV,EACA,SAAAhkC,EACA,GAAG2kC,CACT,EAAQnwC,EACEowC,EAAS3mB,GAAK,EACdz1C,EAAKw7D,GAAaY,EAClBvoB,EAAUumB,GAAsB2B,GAAWxB,CAAuB,EAClE8B,EAAmBxoB,EAAQ,mBAAqB7zC,EAChDo7D,EAAW7B,GAAcgB,CAAuB,EAChD,CAAE,mBAAA+B,EAAoB,sBAAAC,EAAuB,iBAAAxB,CAAgB,EAAKlnB,EACxE8C,mBAAgB,IAAM,CACpB,GAAIslB,EACF,OAAAK,EAAkB,EACX,IAAMC,EAAqB,CAEtC,EAAG,CAACN,EAAWK,EAAoBC,CAAqB,CAAC,EAClC7xC,MACrBsvC,GAAW,SACX,CACE,MAAOO,EACP,GAAAv6D,EACA,UAAAi8D,EACA,OAAAC,EACA,SAA0BxxC,MACxBysB,GAAU,KACV,CACE,SAAUklB,EAAmB,EAAI,GACjC,mBAAoBxoB,EAAQ,YAC5B,GAAGsoB,EACH,IAAKtyB,EACL,YAAasJ,GAAqBnnB,EAAM,YAAc7M,GAAU,CACzD88C,EACApoB,EAAQ,YAAY7zC,CAAE,EADXmf,EAAM,eAAc,CAEtC,CAAC,EACD,QAASg0B,GAAqBnnB,EAAM,QAAS,IAAM6nB,EAAQ,YAAY7zC,CAAE,CAAC,EAC1E,UAAWmzC,GAAqBnnB,EAAM,UAAY7M,GAAU,CAC1D,GAAIA,EAAM,MAAQ,OAASA,EAAM,SAAU,CACzC00B,EAAQ,eAAc,EACtB,MACF,CACA,GAAI10B,EAAM,SAAWA,EAAM,cAAe,OAC1C,MAAMq9C,EAAcC,GAAet9C,EAAO00B,EAAQ,YAAaA,EAAQ,GAAG,EAC1E,GAAI2oB,IAAgB,OAAQ,CAC1B,GAAIr9C,EAAM,SAAWA,EAAM,SAAWA,EAAM,QAAUA,EAAM,SAAU,OACtEA,EAAM,eAAc,EAEpB,IAAI28C,EADUV,IAAW,OAAQhsB,GAASA,EAAK,SAAS,EAC7B,IAAKA,GAASA,EAAK,IAAI,OAAO,EACzD,GAAIotB,IAAgB,OAAQV,EAAe,QAAO,UACzCU,IAAgB,QAAUA,IAAgB,OAAQ,CACrDA,IAAgB,QAAQV,EAAe,QAAO,EAClD,MAAMY,EAAeZ,EAAe,QAAQ38C,EAAM,aAAa,EAC/D28C,EAAiBjoB,EAAQ,KAAO8oB,GAAUb,EAAgBY,EAAe,CAAC,EAAIZ,EAAe,MAAMY,EAAe,CAAC,CACrH,CACA,WAAW,IAAMlgB,GAAWsf,CAAc,CAAC,CAC7C,CACF,CAAC,EACD,SAAU,OAAOtkC,GAAa,WAAaA,EAAS,CAAE,iBAAA6kC,EAAkB,WAAYtB,GAAoB,IAAI,CAAE,EAAIvjC,CAC9H,CACA,CACA,CACA,CACE,CACF,EACAwkC,GAAqB,YAAcD,GACnC,IAAIa,GAA0B,CAC5B,UAAW,OACX,QAAS,OACT,WAAY,OACZ,UAAW,OACX,OAAQ,QACR,KAAM,QACN,SAAU,OACV,IAAK,MACP,EACA,SAASC,GAAqBz/C,EAAK8V,EAAK,CACtC,OAAIA,IAAQ,MAAc9V,EACnBA,IAAQ,YAAc,aAAeA,IAAQ,aAAe,YAAcA,CACnF,CACA,SAASq/C,GAAet9C,EAAOq7C,EAAatnC,EAAK,CAC/C,MAAM9V,EAAMy/C,GAAqB19C,EAAM,IAAK+T,CAAG,EAC/C,GAAI,EAAAsnC,IAAgB,YAAc,CAAC,YAAa,YAAY,EAAE,SAASp9C,CAAG,IACtE,EAAAo9C,IAAgB,cAAgB,CAAC,UAAW,WAAW,EAAE,SAASp9C,CAAG,GACzE,OAAOw/C,GAAwBx/C,CAAG,CACpC,CACA,SAASo/B,GAAWU,EAAY4f,EAAgB,GAAO,CACrD,MAAMC,EAA6B,SAAS,cAC5C,UAAW3f,KAAaF,EAGtB,GAFIE,IAAc2f,IAClB3f,EAAU,MAAM,CAAE,cAAA0f,EAAe,EAC7B,SAAS,gBAAkBC,GAA4B,MAE/D,CACA,SAASJ,GAAU7lC,EAAOmF,EAAY,CACpC,OAAOnF,EAAM,IAAI,CAAC/N,EAAGS,IAAUsN,GAAOmF,EAAazS,GAASsN,EAAM,MAAM,CAAC,CAC3E,CACA,IAAI+5B,GAAOwJ,GACP2C,GAAOhB,GChNPiB,GAAY,OACZ,CAACC,EAAkC,EAAIhpB,GAAmB+oB,GAAW,CACvE/C,EACF,CAAC,EACGiD,GAA2BjD,GAA2B,EACtD,CAACkD,GAAcC,EAAc,EAAIH,GAAkBD,EAAS,EAC5DK,GAAO70B,aACT,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CACJ,YAAA0zB,EACA,MAAOC,EACP,cAAAC,EACA,aAAAhrC,EACA,YAAA+nC,EAAc,aACd,IAAAtnC,EACA,eAAAwqC,EAAiB,YACjB,GAAGC,CACT,EAAQ3xC,EACE27B,EAAYgS,GAAazmC,CAAG,EAC5B,CAAC2K,EAAOgZ,CAAQ,EAAIb,GAAqB,CAC7C,KAAMwnB,EACN,SAAUC,EACV,YAAahrC,GAAgB,GAC7B,OAAQwqC,EACd,CAAK,EACD,OAAuBvyC,MACrB0yC,GACA,CACE,MAAOG,EACP,OAAQ9nB,GAAK,EACb,MAAA5X,EACA,cAAegZ,EACf,YAAA2jB,EACA,IAAK7S,EACL,eAAA+V,EACA,SAA0BhzC,MACxBysB,GAAU,IACV,CACE,IAAKwQ,EACL,mBAAoB6S,EACpB,GAAGmD,EACH,IAAK9zB,CACjB,CACA,CACA,CACA,CACE,CACF,EACAyzB,GAAK,YAAcL,GACnB,IAAIW,GAAgB,WAChBC,GAAWp1B,aACb,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,YAAA0zB,EAAa,KAAApiB,EAAO,GAAM,GAAG2iB,CAAS,EAAK9xC,EAC7C6nB,EAAUwpB,GAAeO,GAAeL,CAAW,EACnDQ,EAAwBZ,GAAyBI,CAAW,EAClE,OAAuB7yC,MACrBszC,GACA,CACE,QAAS,GACT,GAAGD,EACH,YAAalqB,EAAQ,YACrB,IAAKA,EAAQ,IACb,KAAAsH,EACA,SAA0BzwB,MACxBysB,GAAU,IACV,CACE,KAAM,UACN,mBAAoBtD,EAAQ,YAC5B,GAAGiqB,EACH,IAAKj0B,CACjB,CACA,CACA,CACA,CACE,CACF,EACAg0B,GAAS,YAAcD,GACvB,IAAIhQ,GAAe,cACfqQ,GAAcx1B,aAChB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,YAAA0zB,EAAa,MAAA1/B,EAAO,SAAAzN,EAAW,GAAO,GAAG09B,CAAY,EAAK9hC,EAC5D6nB,EAAUwpB,GAAezP,GAAc2P,CAAW,EAClDQ,EAAwBZ,GAAyBI,CAAW,EAC5DW,EAAYC,GAActqB,EAAQ,OAAQhW,CAAK,EAC/CugC,EAAYC,GAAcxqB,EAAQ,OAAQhW,CAAK,EAC/CygC,EAAazgC,IAAUgW,EAAQ,MACrC,OAAuBnpB,MACrB6zC,GACA,CACE,QAAS,GACT,GAAGR,EACH,UAAW,CAAC3tC,EACZ,OAAQkuC,EACR,SAA0B5zC,MACxBysB,GAAU,OACV,CACE,KAAM,SACN,KAAM,MACN,gBAAiBmnB,EACjB,gBAAiBF,EACjB,aAAcE,EAAa,SAAW,WACtC,gBAAiBluC,EAAW,GAAK,OACjC,SAAAA,EACA,GAAI8tC,EACJ,GAAGpQ,EACH,IAAKjkB,EACL,YAAasJ,GAAqBnnB,EAAM,YAAc7M,GAAU,CAC1D,CAACiR,GAAYjR,EAAM,SAAW,GAAKA,EAAM,UAAY,GACvD00B,EAAQ,cAAchW,CAAK,EAE3B1e,EAAM,eAAc,CAExB,CAAC,EACD,UAAWg0B,GAAqBnnB,EAAM,UAAY7M,GAAU,CACtD,CAAC,IAAK,OAAO,EAAE,SAASA,EAAM,GAAG,GAAG00B,EAAQ,cAAchW,CAAK,CACrE,CAAC,EACD,QAASsV,GAAqBnnB,EAAM,QAAS,IAAM,CACjD,MAAMwyC,EAAwB3qB,EAAQ,iBAAmB,SACrD,CAACyqB,GAAc,CAACluC,GAAYouC,GAC9B3qB,EAAQ,cAAchW,CAAK,CAE/B,CAAC,CACb,CACA,CACA,CACA,CACE,CACF,EACAogC,GAAY,YAAcrQ,GAC1B,IAAIe,GAAe,cACf8P,GAAch2B,aAChB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,YAAA0zB,EAAa,MAAA1/B,EAAO,WAAAuwB,EAAY,SAAA52B,EAAU,GAAGq3B,CAAY,EAAK7iC,EAChE6nB,EAAUwpB,GAAe1O,GAAc4O,CAAW,EAClDW,EAAYC,GAActqB,EAAQ,OAAQhW,CAAK,EAC/CugC,EAAYC,GAAcxqB,EAAQ,OAAQhW,CAAK,EAC/CygC,EAAazgC,IAAUgW,EAAQ,MAC/B6qB,EAA+BhoB,SAAa4nB,CAAU,EAC5D3nB,mBAAgB,IAAM,CACpB,MAAMgoB,EAAM,sBAAsB,IAAMD,EAA6B,QAAU,EAAK,EACpF,MAAO,IAAM,qBAAqBC,CAAG,CACvC,EAAG,EAAE,EACkBj0C,MAAIk0B,GAAU,CAAE,QAASwP,GAAckQ,EAAY,SAAU,CAAC,CAAE,QAAAzf,CAAO,IAAuBn0B,MACnHysB,GAAU,IACV,CACE,aAAcmnB,EAAa,SAAW,WACtC,mBAAoBzqB,EAAQ,YAC5B,KAAM,WACN,kBAAmBqqB,EACnB,OAAQ,CAACrf,EACT,GAAIuf,EACJ,SAAU,EACV,GAAGvP,EACH,IAAKhlB,EACL,MAAO,CACL,GAAG7d,EAAM,MACT,kBAAmB0yC,EAA6B,QAAU,KAAO,MAC3E,EACQ,SAAU7f,GAAWrnB,CAC7B,CACA,EAAO,CACL,CACF,EACAinC,GAAY,YAAc9P,GAC1B,SAASwP,GAAcS,EAAQ/gC,EAAO,CACpC,MAAO,GAAG+gC,CAAM,YAAY/gC,CAAK,EACnC,CACA,SAASwgC,GAAcO,EAAQ/gC,EAAO,CACpC,MAAO,GAAG+gC,CAAM,YAAY/gC,CAAK,EACnC,CACA,IAAIghC,GAAQvB,GACRwB,GAAOjB,GACPkB,GAAUd,GACVlN,GAAU0N,GCpLd,MAAMnB,GAAO0B,GAEPnB,GAAWp1B,aAGf,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAACu0C,GAAA,CACC,IAAArsC,EACA,UAAWlH,GACT,6FACA7C,CAAA,EAED,GAAGmD,CAAA,CACN,CACD,EACD6xC,GAAS,YAAcoB,GAAmB,YAE1C,MAAMhB,GAAcx1B,aAGlB,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAACw0C,GAAA,CACC,IAAAtsC,EACA,UAAWlH,GACT,sYACA7C,CAAA,EAED,GAAGmD,CAAA,CACN,CACD,EACDiyC,GAAY,YAAciB,GAAsB,YAEhD,MAAMT,GAAch2B,aAGlB,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAACy0C,GAAA,CACC,IAAAvsC,EACA,UAAWlH,GACT,kIACA7C,CAAA,EAED,GAAGmD,CAAA,CACN,CACD,EACDyyC,GAAY,YAAcU,GAAsB,YC/ChD,IAAIjoB,GAAQ,CACV,IACA,SACA,MACA,OACA,KACA,KACA,MACA,QACA,QACA,KACA,MACA,KACA,IACA,SACA,OACA,MACA,IACF,EACIC,GAAYD,GAAM,OAAO,CAACE,EAAWvO,IAAS,CAChD,MAAM2B,EAAOhB,GAAW,aAAaX,CAAI,EAAE,EACrCwO,EAAO5O,aAAiB,CAACzc,EAAO6d,IAAiB,CACrD,KAAM,CAAE,QAAA8C,EAAS,GAAG2K,CAAc,EAAKtrB,EACjC4gB,EAAOD,EAAUnC,EAAO3B,EAC9B,OAAI,OAAO,OAAW,MACpB,OAAO,OAAO,IAAI,UAAU,CAAC,EAAI,IAEZne,MAAIkiB,EAAM,CAAE,GAAG0K,EAAgB,IAAKzN,EAAc,CAC3E,CAAC,EACD,OAAAwN,EAAK,YAAc,aAAaxO,CAAI,GAC7B,CAAE,GAAGuO,EAAW,CAACvO,CAAI,EAAGwO,CAAI,CACrC,EAAG,EAAE,EC9BD+nB,GAAO,QACPC,GAAQ52B,aAAiB,CAACzc,EAAO6d,IACZnf,MACrBysB,GAAU,MACV,CACE,GAAGnrB,EACH,IAAK6d,EACL,YAAc1qB,GAAU,OACPA,EAAM,OACV,QAAQ,iCAAiC,KACpDG,EAAA0M,EAAM,cAAN,MAAA1M,EAAA,KAAA0M,EAAoB7M,GAChB,CAACA,EAAM,kBAAoBA,EAAM,OAAS,GAAGA,EAAM,eAAc,EACvE,CACN,CACA,CACC,EACDkgD,GAAM,YAAcD,GACpB,IAAIvO,GAAOwO,GCfX,MAAMC,GAAgB9zB,GACpB,4FACF,EAEM6zB,GAAQ52B,aAGZ,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAAC60C,GAAA,CAAoB,IAAA3sC,EAAU,UAAWlH,GAAG4zC,GAAA,EAAiBz2C,CAAS,EAAI,GAAGmD,CAAA,CAAO,CACtF,EACDqzC,GAAM,YAAcE,GAAoB,YChBxC,SAASC,GAAY3hC,EAAO,CAC1B,MAAMjL,EAAM8jB,SAAa,CAAE,MAAA7Y,EAAO,SAAUA,CAAK,CAAE,EACnD,OAAOiW,UAAc,KACflhB,EAAI,QAAQ,QAAUiL,IACxBjL,EAAI,QAAQ,SAAWA,EAAI,QAAQ,MACnCA,EAAI,QAAQ,MAAQiL,GAEfjL,EAAI,QAAQ,UAClB,CAACiL,CAAK,CAAC,CACZ,CCRA,SAAS4hC,GAAQl2B,EAAS,CACxB,KAAM,CAAClS,EAAMqoC,CAAO,EAAI9pB,WAAe,MAAM,EAC7CC,UAAgB,IAAM,CACpB,GAAItM,EAAS,CACXm2B,EAAQ,CAAE,MAAOn2B,EAAQ,YAAa,OAAQA,EAAQ,aAAc,EACpE,MAAMo2B,EAAiB,IAAI,eAAgB5pC,GAAY,CAIrD,GAHI,CAAC,MAAM,QAAQA,CAAO,GAGtB,CAACA,EAAQ,OACX,OAEF,MAAMhS,EAAQgS,EAAQ,CAAC,EACvB,IAAI6pC,EACAnwC,EACJ,GAAI,kBAAmB1L,EAAO,CAC5B,MAAM87C,EAAkB97C,EAAM,cACxB+7C,EAAa,MAAM,QAAQD,CAAe,EAAIA,EAAgB,CAAC,EAAIA,EACzED,EAAQE,EAAW,WACnBrwC,EAASqwC,EAAW,SACtB,MACEF,EAAQr2B,EAAQ,YAChB9Z,EAAS8Z,EAAQ,aAEnBm2B,EAAQ,CAAE,MAAAE,EAAO,OAAAnwC,EAAQ,CAC3B,CAAC,EACD,OAAAkwC,EAAe,QAAQp2B,EAAS,CAAE,IAAK,YAAY,CAAE,EAC9C,IAAMo2B,EAAe,UAAUp2B,CAAO,CAC/C,MACEm2B,EAAQ,MAAM,CAElB,EAAG,CAACn2B,CAAO,CAAC,EACLlS,CACT,CCvBA,IAAI0oC,GAAgB,WAChB,CAACC,EAA0C,EAAI9rB,GAAmB6rB,EAAa,EAC/E,CAACE,GAAsBC,EAAkB,EAAIF,GAAsBD,EAAa,EACpF,SAASI,GAAiBn0C,EAAO,CAC/B,KAAM,CACJ,gBAAAo0C,EACA,QAASC,EACT,SAAA7oC,EACA,eAAA8oC,EACA,SAAAlwC,EACA,KAAAmwC,EACA,KAAAvjD,EACA,gBAAAwjD,EACA,SAAAC,EACA,MAAA5iC,EAAQ,KAER,2BAAA6iC,CACJ,EAAM10C,EACE,CAAC20C,EAASC,CAAU,EAAI5qB,GAAqB,CACjD,KAAMqqB,EACN,YAAaC,GAAkB,GAC/B,SAAUE,EACV,OAAQT,EACZ,CAAG,EACK,CAACc,EAASC,CAAU,EAAIlrB,WAAe,IAAI,EAC3C,CAACmrB,EAAaC,CAAc,EAAIprB,WAAe,IAAI,EACnDqrB,EAAmCvqB,SAAa,EAAK,EACrDwqB,EAAgBL,EAAU,CAAC,CAACN,GAAQ,CAAC,CAACM,EAAQ,QAAQ,MAAM,EAEhE,GAEIhtB,EAAU,CACd,QAAA8sB,EACA,SAAAvwC,EACA,WAAAwwC,EACA,QAAAC,EACA,WAAAC,EACA,KAAA9jD,EACA,KAAAujD,EACA,MAAA1iC,EACA,iCAAAojC,EACA,SAAAR,EACA,eAAgBU,GAAgBb,CAAc,EAAI,GAAQA,EAC1D,cAAAY,EACA,YAAAH,EACA,eAAAC,CACJ,EACE,OAAuBt2C,MACrBu1C,GACA,CACE,MAAOG,EACP,GAAGvsB,EACH,SAAUmD,GAAW0pB,CAA0B,EAAIA,EAA2B7sB,CAAO,EAAIrc,CAC/F,CACA,CACA,CACA,IAAIo2B,GAAe,kBACfwT,GAAkB34B,aACpB,CAAC,CAAE,gBAAA23B,EAAiB,UAAAiB,EAAW,QAAA7M,EAAS,GAAG8M,CAAa,EAAIz3B,IAAiB,CAC3E,KAAM,CACJ,QAAAg3B,EACA,MAAAhjC,EACA,SAAAzN,EACA,QAAAuwC,EACA,SAAAF,EACA,WAAAK,EACA,WAAAF,EACA,iCAAAK,EACA,cAAAC,EACA,YAAAH,CACN,EAAQb,GAAmBtS,GAAcwS,CAAe,EAC9CrnB,EAAe9P,GAAgBY,EAAci3B,CAAU,EACvDS,EAAyB7qB,SAAaiqB,CAAO,EACnDhqB,mBAAgB,IAAM,CACpB,MAAM4pB,EAAOM,GAAA,YAAAA,EAAS,KACtB,GAAIN,EAAM,CACR,MAAMiB,EAAQ,IAAMZ,EAAWW,EAAuB,OAAO,EAC7D,OAAAhB,EAAK,iBAAiB,QAASiB,CAAK,EAC7B,IAAMjB,EAAK,oBAAoB,QAASiB,CAAK,CACtD,CACF,EAAG,CAACX,EAASD,CAAU,CAAC,EACDl2C,MACrBysB,GAAU,OACV,CACE,KAAM,SACN,KAAM,WACN,eAAgBgqB,GAAgBR,CAAO,EAAI,QAAUA,EACrD,gBAAiBF,EACjB,aAAczS,GAAS2S,CAAO,EAC9B,gBAAiBvwC,EAAW,GAAK,OACjC,SAAAA,EACA,MAAAyN,EACA,GAAGyjC,EACH,IAAKvoB,EACL,UAAW5F,GAAqBkuB,EAAYliD,GAAU,CAChDA,EAAM,MAAQ,SAASA,EAAM,eAAc,CACjD,CAAC,EACD,QAASg0B,GAAqBqhB,EAAUr1C,GAAU,CAChDyhD,EAAYa,GAAgBN,GAAgBM,CAAW,EAAI,GAAO,CAACA,CAAW,EAC1EV,GAAeG,IACjBD,EAAiC,QAAU9hD,EAAM,qBAAoB,EAChE8hD,EAAiC,SAAS9hD,EAAM,gBAAe,EAExE,CAAC,CACT,CACA,CACE,CACF,EACAiiD,GAAgB,YAAcxT,GAC9B,IAAI8T,GAAWj5B,aACb,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CACJ,gBAAAu2B,EACA,KAAApjD,EACA,QAAA2jD,EACA,eAAAL,EACA,SAAAG,EACA,SAAArwC,EACA,MAAAyN,EACA,gBAAA2iC,EACA,KAAAD,EACA,GAAGe,CACT,EAAQt1C,EACJ,OAAuBtB,MACrBy1C,GACA,CACE,gBAAAC,EACA,QAAAO,EACA,eAAAL,EACA,SAAAlwC,EACA,SAAAqwC,EACA,gBAAAD,EACA,KAAAxjD,EACA,KAAAujD,EACA,MAAA1iC,EACA,2BAA4B,CAAC,CAAE,cAAAqjC,CAAa,IAAuBxoC,OAAKyW,WAAU,CAAE,SAAU,CAC5EzkB,MACd02C,GACA,CACE,GAAGE,EACH,IAAKz3B,EACL,gBAAAu2B,CACd,CACA,EACUc,GAAiCx2C,MAC/Bi3C,GACA,CACE,gBAAAvB,CACd,CACA,CACA,CAAS,CAAE,CACX,CACA,CACE,CACF,EACAsB,GAAS,YAAc3B,GACvB,IAAI6B,GAAiB,oBACjBC,GAAoBp5B,aACtB,CAACzc,EAAO6d,IAAiB,CACvB,KAAM,CAAE,gBAAAu2B,EAAiB,WAAAhS,EAAY,GAAG0T,CAAc,EAAK91C,EACrD6nB,EAAUqsB,GAAmB0B,GAAgBxB,CAAe,EAClE,OAAuB11C,MACrBk0B,GACA,CACE,QAASwP,GAAc+S,GAAgBttB,EAAQ,OAAO,GAAKA,EAAQ,UAAY,GAC/E,SAA0BnpB,MACxBysB,GAAU,KACV,CACE,aAAc6W,GAASna,EAAQ,OAAO,EACtC,gBAAiBA,EAAQ,SAAW,GAAK,OACzC,GAAGiuB,EACH,IAAKj4B,EACL,MAAO,CAAE,cAAe,OAAQ,GAAG7d,EAAM,KAAK,CAC1D,CACA,CACA,CACA,CACE,CACF,EACA61C,GAAkB,YAAcD,GAChC,IAAIG,GAAoB,sBACpBJ,GAAsBl5B,aACxB,CAAC,CAAE,gBAAA23B,EAAiB,GAAGp0C,CAAK,EAAI6d,IAAiB,CAC/C,KAAM,CACJ,QAAAg3B,EACA,iCAAAI,EACA,QAAAN,EACA,eAAAL,EACA,SAAAG,EACA,SAAArwC,EACA,KAAApT,EACA,MAAA6gB,EACA,KAAA0iC,EACA,YAAAQ,EACA,eAAAC,CACN,EAAQd,GAAmB6B,GAAmB3B,CAAe,EACnDrnB,EAAe9P,GAAgBY,EAAcm3B,CAAc,EAC3DS,EAAcjC,GAAYmB,CAAO,EACjCqB,EAAcvC,GAAQoB,CAAO,EACnClqB,YAAgB,IAAM,CACpB,MAAMsrB,EAAQlB,EACd,GAAI,CAACkB,EAAO,OACZ,MAAMC,EAAa,OAAO,iBAAiB,UAKrCtB,EAJa,OAAO,yBACxBsB,EACA,SACR,EACoC,IACxBC,EAAU,CAAClB,EAAiC,QAClD,GAAIQ,IAAgBd,GAAWC,EAAY,CACzC,MAAMzhD,EAAQ,IAAI,MAAM,QAAS,CAAE,QAAAgjD,CAAO,CAAE,EAC5CF,EAAM,cAAgBd,GAAgBR,CAAO,EAC7CC,EAAW,KAAKqB,EAAOd,GAAgBR,CAAO,EAAI,GAAQA,CAAO,EACjEsB,EAAM,cAAc9iD,CAAK,CAC3B,CACF,EAAG,CAAC4hD,EAAaU,EAAad,EAASM,CAAgC,CAAC,EACxE,MAAMmB,EAAoB1rB,SAAayqB,GAAgBR,CAAO,EAAI,GAAQA,CAAO,EACjF,OAAuBj2C,MACrBysB,GAAU,MACV,CACE,KAAM,WACN,cAAe,GACf,eAAgBmpB,GAAkB8B,EAAkB,QACpD,SAAA3B,EACA,SAAArwC,EACA,KAAApT,EACA,MAAA6gB,EACA,KAAA0iC,EACA,GAAGv0C,EACH,SAAU,GACV,IAAK+sB,EACL,MAAO,CACL,GAAG/sB,EAAM,MACT,GAAGg2C,EACH,SAAU,WACV,cAAe,OACf,QAAS,EACT,OAAQ,EAIR,UAAW,mBACrB,CACA,CACA,CACE,CACF,EACAL,GAAoB,YAAcI,GAClC,SAAS/qB,GAAWnZ,EAAO,CACzB,OAAO,OAAOA,GAAU,UAC1B,CACA,SAASsjC,GAAgBR,EAAS,CAChC,OAAOA,IAAY,eACrB,CACA,SAAS3S,GAAS2S,EAAS,CACzB,OAAOQ,GAAgBR,CAAO,EAAI,gBAAkBA,EAAU,UAAY,WAC5E,CCrQA,MAAMe,GAAWj5B,aAGf,CAAC,CAAE,UAAA5f,EAAW,GAAGmD,CAAA,EAAS4G,IAC1BlI,MAAC23C,GAAA,CACC,IAAAzvC,EACA,UAAWlH,GACT,iTACA7C,CAAA,EAED,GAAGmD,EAEJ,SAAAtB,MAAC43C,GAAA,CAA4B,UAAW52C,GAAG,+CAA+C,EACxF,SAAAhB,MAACuN,GAAA,CAAM,UAAU,UAAU,EAC7B,EACF,CACD,EACDypC,GAAS,YAAcW,GAAuB,YCKvC,SAASE,GAAgB,CAC9B,KAAA9U,EACA,SAAAtpC,EACA,iBAAAq+C,EACA,QAAAnQ,EACA,qBAAArlB,EACA,gBAAAy1B,EACA,gBAAAC,EACA,uBAAAC,CACF,EAAyB,CACvB,KAAM,CAACC,EAAKC,CAAM,EAAInkD,WAAc,UAAU,EACxC,CAAC1B,EAAM8lD,CAAO,EAAIpkD,WAAS,EAAE,EAC7B,CAACqkD,EAAYC,CAAa,EAAItkD,WAAS,EAAE,EACzC,CAACukD,EAASC,CAAU,EAAIxkD,WAAS,EAAE,EACnC,CAACzB,EAAekmD,CAAgB,EAAIzkD,WAAS,EAAK,EAClD,CAAC0kD,EAAgBC,CAAiB,EAAI3kD,WAAS,EAAK,EACpD,CAACQ,EAAOokD,CAAQ,EAAI5kD,WAAS,EAAE,EAC/B,CAACg2C,EAAS6O,CAAU,EAAI7kD,WAAS,EAAK,EACtC8kD,EAAkBllD,SAAyB,IAAI,EAE/CmlD,EAAe,SAAY,CAC/BH,EAAS,EAAE,EACXC,EAAW,EAAI,EAEf,GAAI,CACF,GAAIX,IAAQ,cAAe,CACzB,GAAI,CAAC5lD,EAAK,QAAU,CAAC+lD,EAAW,OAAQ,CACtCO,EAAS,kCAAkC,EAC3C,MACF,CAEA,MAAMb,EAAgBzlD,EAAK,OAAQ+lD,EAAW,OAAQ9lD,CAAa,CACrE,SAAW2lD,IAAQ,WAAY,CAC7B,GAAI,CAAC5lD,EAAK,QAAU,CAACimD,EAAQ,OAAQ,CACnCK,EAAS,gCAAgC,EACzC,MACF,CACA,MAAMZ,EAAgB1lD,EAAK,OAAQimD,EAAQ,OAAQhmD,CAAa,CAClE,SAAW2lD,IAAQ,UAAW,CAC5B,MAAMc,EAAc1mD,EAAK,OACnB2mD,EAAkBC,EAAoBF,CAAW,EACvD,GAAIC,EAAiB,CACnBL,EAASK,CAAe,EACxB,MACF,CAEA,MAAME,GAAiBT,EAAiBM,EAAcA,EAAY,cAClE,MAAMf,EAAuB,IAAIkB,EAAc,GAAI5mD,CAAa,CAClE,CACAo1C,EAAA,CACF,OAASz2C,EAAK,CACZ0nD,EAAS1nD,aAAe,MAAQA,EAAI,QAAU,kBAAkB,CAClE,SACE2nD,EAAW,EAAK,CAClB,CACF,EAEMK,EAAuBF,GACtBA,EAGA,iCAAiC,KAAKA,CAAW,EAG/C,KAFE,uEAHA,2BAQLI,EAA4B,SAAY,QAC5CR,EAAS,EAAE,EACX,MAAMI,EAAc1mD,EAAK,OACnB2mD,EAAkBC,EAAoBF,CAAW,EACvD,GAAIC,EAAiB,CACnBL,EAASK,CAAe,EACxB,MACF,CAEAJ,EAAW,EAAI,EACf,GAAI,CAEF,MAAMM,GAAiBT,EAAiBM,EAAcA,EAAY,cAClE,MAAMf,EAAuB,IAAIkB,EAAc,GAAI5mD,CAAa,EAChE6lD,EAAQ,EAAE,GACVxjD,GAAAkkD,EAAgB,UAAhB,MAAAlkD,GAAyB,OAC3B,OAAS1D,GAAK,CACZ0nD,EAAS1nD,cAAe,MAAQA,GAAI,QAAU,kBAAkB,CAClE,SACE2nD,EAAW,EAAK,CAClB,CACF,EAEMQ,GAAuBnB,IAAQ,YAAcJ,EAAmB,EAEtE,OACE93C,MAACuiC,GAAA,CAAO,KAAAQ,EAAY,aAAegF,GAAW,CAACA,GAAUJ,EAAA,EACvD,SAAA35B,OAACk2B,GAAA,CAAc,UAAU,mBACvB,UAAAl2B,OAAC84B,GAAA,CACC,UAAA9mC,MAACilC,IAAY,4BAAgB,EAC7Bj3B,OAACo3B,GAAA,CAAkB,UAAU,UAC1B,UAAA8S,IAAQ,YAAc,qDACtBA,IAAQ,eAAiB,0DACzBA,IAAQ,YAAc,qDACtBA,IAAQ,WAAa,iCACxB,GACF,EAEAlqC,OAAC4kC,GAAA,CAAK,MAAOsF,EAAK,cAAgB9vE,GAAM+vE,EAAO/vE,CAAQ,EAAG,UAAU,SAClE,UAAA4lC,OAACmlC,GAAA,CAAS,UAAU,0BAClB,UAAAnzC,MAACuzC,GAAA,CAAY,MAAM,WAAW,oBAAQ,EACtCvzC,MAACuzC,GAAA,CAAY,MAAM,cAAc,mBAAO,EACxCvzC,MAACuzC,GAAA,CAAY,MAAM,WAAW,gBAAI,EAClCvzC,MAACuzC,GAAA,CAAY,MAAM,UAAU,mBAAO,GACtC,EAEAvzC,MAAC+zC,IAAY,MAAM,WAAW,UAAU,OACtC,SAAA/zC,MAAC,OAAI,UAAU,kDACZ,SAAAvG,EAAS,SAAW,EACnBuG,MAAC,OAAI,UAAU,wCAAwC,iCAAqB,EAE5EvG,EAAS,IAAKK,GACZkG,MAAC,OAEC,UAAU,2CACV,QAAS,IAAM,CACbsiB,EAAqB,CACnB,KAAM,UACN,GAAIxoB,EAAQ,WACZ,KAAMqU,GAAsBrU,EAAQ,KAAMA,EAAQ,UAAU,EAC7D,EACD6tC,EAAA,CACF,EAEC,SAAAx5B,GAAsBrU,EAAQ,KAAMA,EAAQ,UAAU,GAXlDA,EAAQ,WAahB,EAEL,EACF,EAEAkU,OAAC+lC,GAAA,CAAY,MAAM,cAAc,UAAU,iBACzC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,eAAe,gBAAI,EAClC30C,MAAC8d,GAAA,CACC,GAAG,eACH,MAAOxrB,EACP,SAAWtpB,GAAMovE,EAAQpvE,EAAE,OAAO,KAAK,EACvC,YAAY,gBACd,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,cAAc,sBAAU,EACvC30C,MAAC8d,GAAA,CACC,GAAG,cACH,MAAOu6B,EACP,SAAWrvE,GAAMsvE,EAActvE,EAAE,OAAO,KAAK,EAC7C,YAAY,+BACd,EACF,GACF,EAEAglC,OAAC+lC,GAAA,CAAY,MAAM,WAAW,UAAU,iBACtC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,YAAY,qBAAS,EACpC30C,MAAC8d,GAAA,CACC,GAAG,YACH,MAAOxrB,EACP,SAAWtpB,GAAMovE,EAAQpvE,EAAE,OAAO,KAAK,EACvC,YAAY,aACd,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,WAAW,oBAAQ,EAClC3mC,OAAC,OAAI,UAAU,aACb,UAAAhO,MAAC8d,GAAA,CACC,GAAG,WACH,MAAOy6B,EACP,SAAWvvE,GAAMwvE,EAAWxvE,EAAE,OAAO,KAAK,EAC1C,YAAY,uBACZ,UAAU,WAEZg3B,MAACgiB,GAAA,CACC,KAAK,SACL,QAAQ,UACR,KAAK,OACL,QAAS,IAAM,CACb,MAAMs3B,EAAQ,IAAI,WAAW,EAAE,EAC/B,OAAO,gBAAgBA,CAAK,EAC5B,MAAMC,EAAM,MAAM,KAAKD,CAAK,EACzB,IAAKvwE,IAAMA,GAAE,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,CAAC,EAC1C,KAAK,EAAE,EACVyvE,EAAWe,CAAG,CAChB,EACA,MAAM,sBACP,eAED,EACF,GACF,GACF,EAEAvrC,OAAC+lC,GAAA,CAAY,MAAM,UAAU,UAAU,OACrC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,eAAe,2BAAe,EAC7C3mC,OAAC,OAAI,UAAU,0BACb,UAAAhO,MAAC,QAAK,UAAU,gCAAgC,aAAC,EACjDA,MAAC8d,GAAA,CACC,IAAKg7B,EACL,GAAG,eACH,MAAOxmD,EACP,SAAWtpB,GAAMovE,EAAQpvE,EAAE,OAAO,KAAK,EACvC,YAAY,eACZ,UAAU,UACZ,EACF,GACF,EACAglC,OAAC,OAAI,UAAU,iBACb,UAAAA,OAAC,SAAM,UAAU,yCACf,UAAAhO,MAAC,SACC,KAAK,WACL,QAAS04C,EACT,SAAW1vE,GAAM2vE,EAAkB3vE,EAAE,OAAO,OAAO,EACnD,UAAU,gDAEZg3B,MAAC,QAAK,UAAU,UAAU,kDAAsC,GAClE,EACAA,MAAC,KAAE,UAAU,qCAAqC,mEAElD,GACF,GACF,GACF,EAECq5C,IACCrrC,OAAC,OAAI,UAAU,YACb,UAAAA,OAAC,OAAI,UAAU,0CACb,UAAAA,OAAC2mC,GAAA,CACC,QAAQ,iBACR,UAAU,+CACX,4BACiBmD,EAAiB,iBAAiB,iBACjDA,IAAqB,EAAI,IAAM,MAElC93C,MAACg3C,GAAA,CACC,GAAG,iBACH,QAASzkD,EACT,gBAAkB0jD,GAAYwC,EAAiBxC,IAAY,EAAI,GACjE,EACF,EACC1jD,GACCyN,MAAC,KAAE,UAAU,2CAA2C,qEAExD,GAEJ,EAGDxL,GAASwL,MAAC,OAAI,UAAU,2BAA4B,SAAAxL,EAAM,SAE1DuyC,GAAA,CACC,UAAA/mC,MAACgiB,GAAA,CAAO,QAAQ,UAAU,QAAS2lB,EAAS,kBAE5C,EACCuQ,IAAQ,WACPl4C,MAACgiB,GAAA,CAAO,QAAQ,YAAY,QAASo3B,EAA2B,SAAUpP,EACvE,SAAAA,EAAU,cAAgB,uBAC7B,EAEDkO,IAAQ,YACPl4C,MAACgiB,GAAA,CAAO,QAAS+2B,EAAc,SAAU/O,EACtC,SAAAA,EAAU,cAAgB,SAC7B,GAEJ,GACF,EACF,CAEJ,CC5SA,IAAIxd,GAAQ,CACV,IACA,SACA,MACA,OACA,KACA,KACA,MACA,QACA,QACA,KACA,MACA,KACA,IACA,SACA,OACA,MACA,IACF,EACIC,GAAYD,GAAM,OAAO,CAACE,EAAWvO,IAAS,CAChD,MAAM2B,EAAOhB,GAAW,aAAaX,CAAI,EAAE,EACrCwO,EAAO5O,aAAiB,CAACzc,EAAO6d,IAAiB,CACrD,KAAM,CAAE,QAAA8C,EAAS,GAAG2K,CAAc,EAAKtrB,EACjC4gB,EAAOD,EAAUnC,EAAO3B,EAC9B,OAAI,OAAO,OAAW,MACpB,OAAO,OAAO,IAAI,UAAU,CAAC,EAAI,IAEZne,MAAIkiB,EAAM,CAAE,GAAG0K,EAAgB,IAAKzN,EAAc,CAC3E,CAAC,EACD,OAAAwN,EAAK,YAAc,aAAaxO,CAAI,GAC7B,CAAE,GAAGuO,EAAW,CAACvO,CAAI,EAAGwO,CAAI,CACrC,EAAG,EAAE,EChCD+nB,GAAO,YACP8E,GAAsB,aACtBC,GAAe,CAAC,aAAc,UAAU,EACxCC,GAAY37B,aAAiB,CAACzc,EAAO6d,IAAiB,CACxD,KAAM,CAAE,WAAAw6B,EAAY,YAAaC,EAAkBJ,GAAqB,GAAGK,CAAQ,EAAKv4C,EAClFwuC,EAAcgK,GAAmBF,CAAe,EAAIA,EAAkBJ,GAEtEO,EAAgBJ,EAAa,CAAE,KAAM,QAAW,CAAE,mBADhC7J,IAAgB,WAAaA,EAAc,OAC0B,KAAM,WAAW,EAC9G,OAAuB9vC,MACrBysB,GAAU,IACV,CACE,mBAAoBqjB,EACpB,GAAGiK,EACH,GAAGF,EACH,IAAK16B,CACX,CACA,CACA,CAAC,EACDu6B,GAAU,YAAchF,GACxB,SAASoF,GAAmBhK,EAAa,CACvC,OAAO2J,GAAa,SAAS3J,CAAW,CAC1C,CACA,IAAI3J,GAAOuT,GCnBX,MAAMA,GAAY37B,aAGhB,CAAC,CAAE,UAAA5f,EAAW,YAAA2xC,EAAc,aAAc,WAAA6J,EAAa,GAAM,GAAGr4C,CAAA,EAAS4G,IACzElI,MAACg6C,GAAA,CACC,IAAA9xC,EACA,WAAAyxC,EACA,YAAA7J,EACA,UAAW9uC,GACT,qBACA8uC,IAAgB,aAAe,iBAAmB,iBAClD3xC,CAAA,EAED,GAAGmD,CAAA,CACN,CACD,EACDo4C,GAAU,YAAcM,GAAwB,YCIhD,MAAMC,GAA+B,CACnC,CAAE,KAAM,aAAc,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAC1D,CAAE,KAAM,YAAa,KAAM,MAAO,GAAI,IAAK,GAAI,GAAI,GAAI,GACvD,CAAE,KAAM,qBAAsB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAClE,CAAE,KAAM,mBAAoB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAChE,CAAE,KAAM,gBAAiB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAC7D,CAAE,KAAM,cAAe,KAAM,QAAS,GAAI,IAAK,GAAI,GAAI,GAAI,GAC3D,CAAE,KAAM,uBAAwB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GACpE,CAAE,KAAM,+BAAgC,KAAM,QAAS,GAAI,IAAK,GAAI,GAAI,GAAI,GAC5E,CAAE,KAAM,iCAAkC,KAAM,QAAS,GAAI,IAAK,GAAI,GAAI,GAAI,GAC9E,CAAE,KAAM,2BAA4B,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GACxE,CAAE,KAAM,0BAA2B,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GACvE,CAAE,KAAM,uBAAwB,KAAM,OAAQ,GAAI,IAAK,GAAI,GAAI,GAAI,GACnE,CAAE,KAAM,kBAAmB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAC/D,CAAE,KAAM,kBAAmB,KAAM,QAAS,GAAI,KAAM,GAAI,EAAG,GAAI,GAC/D,CAAE,KAAM,UAAW,KAAM,OAAQ,GAAI,IAAK,GAAI,GAAI,GAAI,EACxD,EAiBO,SAASC,GAAc,CAC5B,KAAAnX,EACA,OAAA/wC,EACA,OAAA0b,EACA,YAAAysC,EACA,QAAAxS,EACA,OAAAyS,EACA,kBAAAC,EACA,gBAAAC,EACA,SAAAC,EACA,YAAAC,EACA,gBAAAC,EACA,qBAAAC,CACF,EAAuB,CAGrB,KAAM,CAACC,EAAWC,CAAY,EAAI5mD,WAAsB,OAAO,EAGzD,CAAC1B,EAAM8lD,CAAO,EAAIpkD,WAAS,EAAE,EAC7B,CAACmyB,EAAK00B,CAAM,EAAI7mD,WAAS,EAAE,EAC3B,CAACoyB,EAAK00B,CAAM,EAAI9mD,WAAS,EAAE,EAC3B,CAAC+mD,EAASC,CAAU,EAAIhnD,WAAS,EAAE,EACnC,CAACinD,EAAMC,CAAO,EAAIlnD,WAAS,EAAE,EAC7B,CAACmnD,EAAIC,CAAK,EAAIpnD,WAAS,EAAE,EACzB,CAACvX,EAAI4+D,CAAK,EAAIrnD,WAAS,EAAE,EACzB,CAACsnD,GAAIC,CAAK,EAAIvnD,WAAS,EAAE,EACzB,CAAC/B,EAAYupD,EAAa,EAAIxnD,WAAS,EAAE,EACzC,CAACynD,GAAkBC,EAAmB,EAAI1nD,WAAS,EAAE,EAGrD,CAACg2C,EAAS6O,EAAU,EAAI7kD,WAAS,EAAK,EACtC,CAAC2nD,EAAWC,CAAY,EAAI5nD,WAAS,EAAK,EAC1C,CAAC6nD,EAAaC,CAAc,EAAI9nD,WAAS,EAAK,EAC9C,CAAC+nD,EAAiBC,EAAkB,EAAIhoD,WAAS,EAAK,EACtD,CAACQ,GAAOokD,EAAQ,EAAI5kD,WAAS,EAAE,EAG/B,CAACioD,GAAeC,EAAgB,EAAIloD,WAAS,IAAI,EACjD,CAACmoD,GAAUC,EAAW,EAAIpoD,WAAS,EAAK,EACxC,CAACqoD,GAAqBC,EAAsB,EAAItoD,WAAS,EAAK,EAEpEE,YAAU,IAAM,CACVlC,IACFomD,EAAQpmD,EAAO,IAAI,EACnB6oD,EAAO,OAAO7oD,EAAO,GAAG,CAAC,EACzB8oD,EAAO,OAAO9oD,EAAO,GAAG,CAAC,EACzBgpD,EAAW,OAAOhpD,EAAO,QAAQ,CAAC,EAClCkpD,EAAQ,OAAOlpD,EAAO,MAAM,IAAI,CAAC,EACjCopD,EAAM,OAAOppD,EAAO,MAAM,EAAE,CAAC,EAC7BqpD,EAAM,OAAOrpD,EAAO,MAAM,EAAE,CAAC,EAC7BupD,EAAM,OAAOvpD,EAAO,MAAM,EAAE,CAAC,EAEjC,EAAG,CAACA,CAAM,CAAC,EAEXkC,YAAU,IAAM,CACVimD,IACFuB,GAAoB,OAAOvB,EAAY,kBAAkB,CAAC,EAC1DmC,GAAuBnC,EAAY,yBAAyB,EAEhE,EAAG,CAACA,CAAW,CAAC,EAIhBjmD,YAAU,IAAM,CACV6uC,GACF2X,EAAA,CAEJ,EAAG,CAAC3X,EAAM2X,CAAoB,CAAC,EAG/B,MAAM6B,GAAgB1iD,UAAQ,IAAM,CAClC,MAAM2iD,GAAU,WAAWvB,CAAI,EACzBwB,GAAQ,WAAWtB,CAAE,EACrBuB,GAAQ,SAASjgE,EAAI,EAAE,EACvBkgE,GAAQ,SAASrB,GAAI,EAAE,EAE7B,UAAWsB,MAAU3C,GACnB,GACE2C,GAAO,OAASJ,IAChBI,GAAO,KAAOH,IACdG,GAAO,KAAOF,IACdE,GAAO,KAAOD,GAEd,OAAOC,GAAO,KAGlB,MAAO,QACT,EAAG,CAAC3B,EAAME,EAAI1+D,EAAI6+D,EAAE,CAAC,EAEfuB,GAAsBC,IAAuB,CACjD,GAAIA,KAAe,SAAU,OAC7B,MAAMF,GAAS3C,GAAc,KAAMlyE,IAAMA,GAAE,OAAS+0E,EAAU,EAC1DF,KACF1B,EAAQ,OAAO0B,GAAO,IAAI,CAAC,EAC3BxB,EAAM,OAAOwB,GAAO,EAAE,CAAC,EACvBvB,EAAM,OAAOuB,GAAO,EAAE,CAAC,EACvBrB,EAAM,OAAOqB,GAAO,EAAE,CAAC,EAE3B,EAEMG,GAAoB,IAAM,CAC9B,GAAI,CAAC,UAAU,YAAa,CAC1B39C,GAAM,MAAM,4BAA6B,CACvC,YAAa,4CACd,EACD,MACF,CAEA48C,GAAmB,EAAI,EACvB,UAAU,YAAY,mBACnB76C,IAAa,CACZ05C,EAAO15C,GAAS,OAAO,SAAS,QAAQ,CAAC,CAAC,EAC1C25C,EAAO35C,GAAS,OAAO,UAAU,QAAQ,CAAC,CAAC,EAC3C66C,GAAmB,EAAK,EACxB58C,GAAM,QAAQ,kBAAkB,CAClC,EACClO,IAAQ,CACP8qD,GAAmB,EAAK,EACxB58C,GAAM,MAAM,yBAA0B,CACpC,YAAalO,GAAI,QAClB,CACH,EACA,CAAE,mBAAoB,GAAM,QAAS,IAAM,CAE/C,EAEM8rD,GAAwB,SAAY,CACxCpE,GAAS,EAAE,EACXC,GAAW,EAAI,EAEf,GAAI,CACF,MAAMhlC,GAA4B,CAChC,IAAK,WAAWsS,CAAG,EACnB,IAAK,WAAWC,CAAG,EACnB,SAAU,SAAS20B,EAAS,EAAE,EAC9B,MAAO,CACL,KAAM,WAAWE,CAAI,EACrB,GAAI,WAAWE,CAAE,EACjB,GAAI,SAAS1+D,EAAI,EAAE,EACnB,GAAI,SAAS6+D,GAAI,EAAE,EACrB,EAEF,MAAMlB,EAAOvmC,EAAM,EACnBzU,GAAM,QAAQ,kCAAkC,EAChDy5C,GAAW,EAAK,EAChB+C,EAAa,EAAI,EACjB,MAAMrB,EAAA,EACN5S,EAAA,CACF,OAASz2C,GAAK,CACZ0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,gBAAgB,EAC9D2nD,GAAW,EAAK,CAClB,SACE+C,EAAa,EAAK,CACpB,CACF,EAEMqB,GAAqB,SAAY,CACrCrE,GAAS,EAAE,EACXC,GAAW,EAAI,EAEf,GAAI,CAEF,MAAMuB,EAD4B,CAAE,KAAA9nD,CAAA,CACjB,EACnB8M,GAAM,QAAQ,gBAAgB,CAChC,OAASlO,GAAK,CACZ0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,gBAAgB,CAChE,SACE2nD,GAAW,EAAK,CAClB,CACF,EAEMqE,GAAmB,SAAY,CACnCtE,GAAS,EAAE,EACXC,GAAW,EAAI,EAEf,GAAI,CACF,MAAMsE,GAAsB,SAAS1B,GAAkB,EAAE,EACrD,CAAC,MAAM0B,EAAmB,GAAKA,MAAwBhD,GAAA,YAAAA,EAAa,qBACtE,MAAME,EAAkB,CAAE,mBAAoB8C,GAAqB,EAErE/9C,GAAM,QAAQ,uBAAuB,CACvC,OAASlO,GAAK,CACZ0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,gBAAgB,CAChE,SACE2nD,GAAW,EAAK,CAClB,CACF,EAEMuE,GAAsB,SAAY,CACtC,GAAI,CAACnrD,EAAW,OAAQ,CACtB2mD,GAAS,yBAAyB,EAClC,MACF,CACAA,GAAS,EAAE,EACXC,GAAW,EAAI,EAEf,GAAI,CACF,MAAMyB,EAAgBroD,EAAW,MAAM,EACvCupD,GAAc,EAAE,EAChBp8C,GAAM,QAAQ,+BAA+B,EAC7Cy5C,GAAW,EAAK,EAChB+C,EAAa,EAAI,EACjB,MAAMrB,EAAA,EACN5S,EAAA,CACF,OAASz2C,GAAK,CACZ0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,2BAA2B,EACzE2nD,GAAW,EAAK,CAClB,SACE+C,EAAa,EAAK,CACpB,CACF,EAEMyB,GAAe,SAAY,CAC/B,GACG,QAAQ,kFAAkF,EAI7F,CAAAzE,GAAS,EAAE,EACXgD,EAAa,EAAI,EAEjB,GAAI,CACF,MAAMrB,EAAA,EACN5S,EAAA,CACF,OAASz2C,GAAK,CACZ0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,wBAAwB,CACxE,SACE0qD,EAAa,EAAK,CACpB,EACF,EAEM0B,GAAkB,SAAY,CAClCxB,EAAe,EAAI,EACnB,GAAI,CACF,MAAMtB,EAAA,CACR,SACEsB,EAAe,EAAK,CACtB,CACF,EAEMyB,GAAgB,SAAY,CAChC,MAAM3kD,GAAO,SAASqjD,GAAe,EAAE,EACvC,GAAI,MAAMrjD,EAAI,GAAKA,GAAO,EAAG,CAC3BwG,GAAM,MAAM,yBAA0B,CACpC,YAAa,oCACd,EACD,MACF,CAEAg9C,GAAY,EAAI,EAEhB,GAAI,CACF,MAAM58C,GAAS,MAAMzN,GAAI,eAAe6G,EAAI,EAC5CwG,GAAM,QAAQ,4BAA6B,CACzC,YAAa,WAAWI,GAAO,eAAe,cAAcA,GAAO,kBAAoB,EAAI,GAAK,GAAG,GACpG,EACD,MAAMi7C,EAAA,CACR,OAASvpD,GAAK,CACZ,QAAQ,MAAM,6BAA8BA,EAAG,EAC/CkO,GAAM,MAAM,0BAA2B,CACrC,YAAalO,cAAe,MAAQA,GAAI,QAAU,gBACnD,CACH,SACEkrD,GAAY,EAAK,CACnB,CACF,EAEMoB,GAA6B,SAAY,CAC7C3E,GAAW,EAAI,EACfD,GAAS,EAAE,EAEX,GAAI,CACF,MAAMyB,EAAkB,CAAE,0BAA2BgC,GAAqB,EAC1Ej9C,GAAM,QAAQ,yBAAyB,CACzC,OAASlO,GAAK,CACZ,QAAQ,MAAM,oCAAqCA,EAAG,EACtD0nD,GAAS1nD,cAAe,MAAQA,GAAI,QAAU,gBAAgB,EAC9DkO,GAAM,MAAM,yBAAyB,CACvC,SACEy5C,GAAW,EAAK,CAClB,CACF,EAEA,OACE74C,MAACuiC,GAAA,CAAO,KAAAQ,EAAY,aAAegF,IAAW,CAACA,IAAUJ,EAAA,EACvD,SAAA35B,OAACk2B,GAAA,CAAc,UAAU,gDACvB,UAAAl2B,OAAC84B,GAAA,CACC,UAAA9mC,MAACilC,IAAY,4BAAgB,EAC7Bj3B,OAACo3B,GAAA,CAAkB,UAAU,UAC1B,UAAAuV,IAAc,SAAW,0DACzBA,IAAc,YAAc,iDAC5BA,IAAc,UAAY,yDAC1BA,IAAc,YAAc,oDAC5BA,IAAc,aAAe,wDAChC,GACF,EAEE3oD,EAGAgc,OAAC4kC,GAAA,CACC,MAAO+H,EACP,cAAgBvyE,IAAMwyE,EAAaxyE,EAAgB,EACnD,UAAU,SAEV,UAAA4lC,OAACmlC,GAAA,CAAS,UAAU,0BAClB,UAAAnzC,MAACuzC,GAAA,CAAY,MAAM,QAAQ,iBAAK,EAChCvzC,MAACuzC,GAAA,CAAY,MAAM,WAAW,oBAAQ,EACtCvzC,MAACuzC,GAAA,CAAY,MAAM,SAAS,kBAAM,EAClCvzC,MAACuzC,GAAA,CAAY,MAAM,WAAW,oBAAQ,EACtCvzC,MAACuzC,GAAA,CAAY,MAAM,YAAY,qBAAS,GAC1C,EAGAvlC,OAAC+lC,GAAA,CAAY,MAAM,QAAQ,UAAU,iBACnC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,SAAS,kBAAM,EAC9B3mC,OAAC,UACC,GAAG,SACH,MAAOuuC,GACP,SAAWvzE,IAAM6zE,GAAmB7zE,GAAE,OAAO,KAAK,EAClD,UAAU,mKAEV,UAAAg3B,MAAC,UAAO,MAAM,SAAS,kBAAM,EAC5Bi6C,GAAc,IAAK2C,IAClB58C,MAAC,UAAyB,MAAO48C,GAAO,KACrC,SAAAA,GAAO,MADGA,GAAO,IAEpB,CACD,IACH,EACF,EAEA5uC,OAAC,OAAI,UAAU,yBACb,UAAAA,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,OAAO,2BAAe,EACrC30C,MAAC8d,GAAA,CACC,GAAG,OACH,KAAK,SACL,KAAK,MACL,MAAOm9B,EACP,SAAWjyE,IAAMkyE,EAAQlyE,GAAE,OAAO,KAAK,GACzC,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,KAAK,2BAAe,EACnC30C,MAAC8d,GAAA,CACC,GAAG,KACH,KAAK,SACL,KAAK,MACL,MAAOq9B,EACP,SAAWnyE,IAAMoyE,EAAMpyE,GAAE,OAAO,KAAK,GACvC,EACF,GACF,EAEAglC,OAAC,OAAI,UAAU,yBACb,UAAAA,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,KAAK,4BAAgB,EACpC30C,MAAC8d,GAAA,CACC,GAAG,KACH,KAAK,SACL,IAAI,IACJ,IAAI,KACJ,MAAOrhC,EACP,SAAWzT,IAAMqyE,EAAMryE,GAAE,OAAO,KAAK,GACvC,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,KAAK,uBAAW,EAC/B30C,MAAC8d,GAAA,CACC,GAAG,KACH,KAAK,SACL,IAAI,IACJ,IAAI,IACJ,MAAOw9B,GACP,SAAWtyE,IAAMuyE,EAAMvyE,GAAE,OAAO,KAAK,GACvC,EACF,GACF,EAEAglC,OAAC,OAAI,UAAU,yBACb,UAAAA,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,WAAW,0BAAc,EACxC30C,MAAC8d,GAAA,CACC,GAAG,WACH,KAAK,SACL,MAAOi9B,EACP,SAAW/xE,IAAMgyE,EAAWhyE,GAAE,OAAO,KAAK,GAC5C,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,SAAS,wBAAY,EACpC30C,MAAC8d,GAAA,CAAM,GAAG,SAAS,KAAK,SAAS,MAAO9rB,EAAO,aAAc,SAAQ,GAAC,GACxE,GACF,QAEC0nD,GAAA,EAAU,EAEX1rC,OAAC,OAAI,UAAU,YACb,UAAAA,OAAC,OAAI,UAAU,oCACb,UAAAhO,MAAC20C,IAAM,oBAAQ,EACf30C,MAACgiB,GAAA,CACC,KAAK,SACL,QAAQ,UACR,KAAK,KACL,QAAS+6B,GACT,SAAUhB,EAET,WAAkB,aAAe,sBACpC,EACF,EACA/tC,OAAC,OAAI,UAAU,yBACb,UAAAA,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,MAAM,UAAU,gCAAgC,oBAE/D,EACA30C,MAAC8d,GAAA,CACC,GAAG,MACH,KAAK,SACL,KAAK,MACL,MAAOqI,EACP,SAAWn9C,IAAM6xE,EAAO7xE,GAAE,OAAO,KAAK,GACxC,EACF,EACAglC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,MAAM,UAAU,gCAAgC,qBAE/D,EACA30C,MAAC8d,GAAA,CACC,GAAG,MACH,KAAK,SACL,KAAK,MACL,MAAOsI,EACP,SAAWp9C,IAAM8xE,EAAO9xE,GAAE,OAAO,KAAK,GACxC,EACF,GACF,GACF,EAECwrB,IAASwL,MAAC,OAAI,UAAU,2BAA4B,SAAAxL,GAAM,EAE3DwL,MAACgiB,GAAA,CACC,QAASg7B,GACT,SAAUhT,GAAW2R,EACrB,UAAU,SAET,SAAA3R,GAAW2R,EAAY,wBAA0B,8BACpD,EACF,EAGA3tC,OAAC+lC,GAAA,CAAY,MAAM,WAAW,UAAU,iBACtC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,aAAa,sBAAU,EACtC30C,MAAC8d,GAAA,CACC,GAAG,aACH,MAAO9rB,EAAO,WACd,SAAQ,GACR,UAAU,qBACZ,EACF,EAEAgc,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,OAAO,sBAAU,EAChC30C,MAAC8d,GAAA,CAAM,GAAG,OAAO,MAAOxrB,EAAM,SAAWtpB,IAAMovE,EAAQpvE,GAAE,OAAO,KAAK,EAAG,GAC1E,EAEAg3B,MAACgiB,GAAA,CAAO,QAASi7B,GAAoB,SAAUjT,EAAS,UAAU,SAC/D,SAAAA,EAAU,YAAc,WAC3B,QAEC0P,GAAA,EAAU,EAEX1rC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,cAAc,wCAA4B,EACzD30C,MAAC8d,GAAA,CACC,GAAG,cACH,KAAK,WACL,aAAa,MACb,MAAO7rB,EACP,SAAWjpB,IAAMwyE,GAAcxyE,GAAE,OAAO,KAAK,EAC7C,YAAY,iCAEdg3B,MAACgiB,GAAA,CACC,QAASo7B,GACT,SAAUpT,GAAW2R,GAAa,CAAC1pD,EAAW,OAC9C,UAAU,SAET,SAAA+3C,GAAW2R,EAAY,yBAA2B,4BACrD,EACF,EAECnnD,IAASwL,MAAC,OAAI,UAAU,2BAA4B,SAAAxL,EAAA,CAAM,GAC7D,EAGAwZ,OAAC+lC,GAAA,CAAY,MAAM,SAAS,UAAU,iBACpC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,IAAM,uBAAW,EACjBjnC,GAAA,MAAAA,EAAQ,YACPM,OAAC,OAAI,UAAU,0BACb,UAAAhO,MAAC,OAAI,UAAU,oCAAoC,EACnDA,MAAC,QAAK,UAAU,qDACb,WAAO,YACV,GACF,EAEAgO,OAAC,OAAI,UAAU,gDACb,UAAAhO,MAAC,OAAI,UAAU,mCAAmC,EAClDA,MAAC,QAAK,yBAAa,GACrB,GAEJ,QAEC05C,GAAA,EAAU,EAEX1rC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,eAAe,iCAAqB,EACnD30C,MAAC8d,GAAA,CACC,GAAG,eACH,KAAK,SACL,IAAI,IACJ,IAAI,OACJ,MAAO29B,GACP,SAAWzyE,IAAM0yE,GAAoB1yE,GAAE,OAAO,KAAK,IAErDg3B,MAAC,KAAE,UAAU,gCAAgC,iFAE7C,GACF,EAEAA,MAACgiB,GAAA,CAAO,QAASk7B,GAAkB,SAAUlT,EAAS,UAAU,SAC7D,SAAAA,EAAU,YAAc,gBAC3B,QAEC0P,GAAA,EAAU,EAEX15C,MAACgiB,GAAA,CACC,QAAQ,UACR,QAASq7B,GACT,SAAU1B,GAAa3R,EACvB,UAAU,4DAET,WAAY,eAAiB,iBAG/Bx1C,IAASwL,MAAC,OAAI,UAAU,2BAA4B,SAAAxL,EAAA,CAAM,GAC7D,EAGAwZ,OAAC+lC,GAAA,CAAY,MAAM,WAAW,UAAU,iBACtC,UAAA/lC,OAAC,OAAI,UAAU,YACb,UAAAA,OAAC,OAAI,UAAU,oCACb,UAAAhO,MAAC,QAAK,UAAU,gCAAgC,yBAAa,EAC7DgO,OAAC,QAAK,UAAU,cAAe,WAAAN,GAAA,YAAAA,EAAQ,mBAAoB,IAAI,OAAG,GACpE,EAECA,GAAA,MAAAA,EAAQ,6BACPM,OAAC,OAAI,UAAU,oCACb,UAAAhO,MAAC,QAAK,UAAU,gCAAgC,qCAAyB,EACzEgO,OAAC,QAAK,UAAU,cACb,UAAA+W,GAAWrX,EAAO,4BAA4B,EAC/CM,OAAC,QAAK,UAAU,6BAA6B,cAE1C,KAAK,OACH,KAAK,MAAQ,IAAON,EAAO,8BAAgC,OAC3D,IAAI,aAET,GACF,GACF,EAEAM,OAAC,OAAI,UAAU,oCACb,UAAAhO,MAAC,QAAK,UAAU,gCAAgC,qCAAyB,EACzEA,MAAC,QAAK,UAAU,wBAAwB,gBAAI,GAC9C,GAEJ,QAEC05C,GAAA,EAAU,EAEX1rC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,IAAM,+BAAmB,EAC1B30C,MAAC,KAAE,UAAU,gCAAgC,8JAG7C,EACAgO,OAAC,OAAI,UAAU,uBACb,UAAAA,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,GAAA,CAAM,QAAQ,iBAAiB,UAAU,UAAU,0BAEpD,EACA30C,MAAC8d,GAAA,CACC,GAAG,iBACH,KAAK,SACL,IAAI,IACJ,IAAI,MACJ,MAAOm+B,GACP,SAAWjzE,IAAMkzE,GAAiBlzE,GAAE,OAAO,KAAK,EAChD,UAAU,QACZ,EACF,EACAg3B,MAACgiB,GAAA,CAAO,QAAQ,UAAU,QAASu7B,GAAe,SAAUpB,GACzD,SAAAA,GAAW,cAAgB,UAC9B,GACF,GACF,QAECzC,GAAA,EAAU,EAEX1rC,OAAC,OAAI,UAAU,YACb,UAAAhO,MAAC20C,IAAM,yBAAa,EACpB3mC,OAAC,SAAM,UAAU,yCACf,UAAAhO,MAAC,SACC,KAAK,WACL,QAASq8C,GACT,SAAWrzE,IAAMszE,GAAuBtzE,GAAE,OAAO,OAAO,EACxD,UAAU,gDAEZg3B,MAAC,QAAK,UAAU,UAAU,mEAE1B,GACF,EACAA,MAAC,KAAE,UAAU,gCAAgC,yLAI7C,GACF,EAECxL,IAASwL,MAAC,OAAI,UAAU,2BAA4B,SAAAxL,GAAM,EAE3DwL,MAACgiB,GAAA,CAAO,QAASw7B,GAA4B,SAAUxT,EAAS,UAAU,SACvE,SAAAA,EAAU,YAAc,gBAC3B,GACF,EAGAhqC,MAAC+zC,IAAY,MAAM,YAAY,UAAU,iBACvC,SAAA/lC,OAAC,OAAI,UAAU,mBACb,UAAAhO,MAAC,KAAE,UAAU,6BAA6B,qFAE1C,EACAA,MAACgiB,GAAA,CACC,KAAK,KACL,QAASs7B,GACT,SAAUzB,GAAe,EAACnuC,GAAA,MAAAA,EAAQ,iBAClC,UAAU,gEAET,WAAc,aAAe,uBAE/B,EAACA,GAAA,MAAAA,EAAQ,wBACP,KAAE,UAAU,gCAAgC,+BAAmB,GAEpE,EACF,KArWF1N,MAAC,OAAI,UAAU,yCAAyC,oCAAwB,CAsWhF,EAEJ,EACF,CAEJ,6DChtBA,OAAO,eAAey9C,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,YAAsBA,GAAA,YAAsBA,GAAA,WAAqBA,GAAA,eAAyBA,GAAA,eAAyBA,GAAA,YAAsBA,GAAA,UAAoB,OAC7J,IAAIC,GACH,SAAUA,EAAW,CAClBA,EAAUA,EAAU,eAAoB,CAAC,EAAI,iBAC7CA,EAAUA,EAAU,MAAW,CAAC,EAAI,QACpCA,EAAUA,EAAU,OAAY,CAAC,EAAI,SACrCA,EAAUA,EAAU,gBAAqB,CAAC,EAAI,iBAClD,GAAGA,IAAcD,GAAA,UAAoBC,EAAY,GAAG,EACpD,IAAIC,GACH,SAAUA,EAAa,CACpBA,EAAYA,EAAY,QAAa,CAAC,EAAI,UAC1CA,EAAYA,EAAY,SAAc,CAAC,EAAI,WAC3CA,EAAYA,EAAY,YAAiB,CAAC,EAAI,cAC9CA,EAAYA,EAAY,IAAS,CAAC,EAAI,MACtCA,EAAYA,EAAY,OAAY,CAAC,EAAI,SACzCA,EAAYA,EAAY,UAAe,CAAC,EAAI,YAC5CA,EAAYA,EAAY,UAAe,CAAC,EAAI,YAC5CA,EAAYA,EAAY,YAAiB,CAAC,EAAI,cAC9CA,EAAYA,EAAY,KAAU,CAAC,EAAI,OACvCA,EAAYA,EAAY,MAAW,CAAC,EAAI,QACxCA,EAAYA,EAAY,UAAe,EAAE,EAAI,YAC7CA,EAAYA,EAAY,QAAa,EAAE,EAAI,UAC3CA,EAAYA,EAAY,UAAe,EAAE,EAAI,WACjD,GAAGA,IAAgBF,GAAA,YAAsBE,EAAc,GAAG,EAE1D,IAAIC,GACH,SAAUA,EAAgB,CACvBA,EAAeA,EAAe,gBAAqB,GAAG,EAAI,kBAC1DA,EAAeA,EAAe,iBAAsB,GAAG,EAAI,kBAC/D,GAAGA,IAAmBH,GAAA,eAAyBG,EAAiB,GAAG,EACnE,IAAIC,GACH,SAAUA,EAAgB,CACvBA,EAAeA,EAAe,SAAc,CAAC,EAAI,WACjDA,EAAeA,EAAe,SAAc,CAAC,EAAI,WACjDA,EAAeA,EAAe,SAAc,CAAC,EAAI,WACjDA,EAAeA,EAAe,SAAc,CAAC,EAAI,UACrD,GAAGA,IAAmBJ,GAAA,eAAyBI,EAAiB,GAAG,EACnE,IAAIC,GACH,SAAUA,EAAY,CACnBA,EAAWA,EAAW,QAAa,CAAC,EAAI,UACxCA,EAAWA,EAAW,SAAc,CAAC,EAAI,WACzCA,EAAWA,EAAW,SAAc,CAAC,EAAI,WACzCA,EAAWA,EAAW,WAAgB,CAAC,EAAI,aAC3CA,EAAWA,EAAW,OAAY,CAAC,EAAI,QAC3C,GAAGA,IAAeL,GAAA,WAAqBK,EAAa,GAAG,EACvD,IAAIC,GACH,SAAUA,EAAa,CACpBA,EAAYA,EAAY,YAAiB,EAAE,EAAI,cAC/CA,EAAYA,EAAY,YAAiB,EAAE,EAAI,cAC/CA,EAAYA,EAAY,YAAiB,EAAE,EAAI,cAC/CA,EAAYA,EAAY,QAAa,GAAG,EAAI,SAChD,GAAGA,IAAgBN,GAAA,YAAsBM,EAAc,GAAG,EAC1D,IAAIC,EACJ,OAAC,SAAUA,EAAa,CACpBA,EAAYA,EAAY,SAAc,CAAC,EAAI,WAC3CA,EAAYA,EAAY,UAAe,CAAC,EAAI,YAC5CA,EAAYA,EAAY,iBAAsB,CAAC,EAAI,mBACnDA,EAAYA,EAAY,iBAAsB,CAAC,EAAI,mBACnDA,EAAYA,EAAY,cAAmB,CAAC,EAAI,eACpD,GAAGA,IAAgBP,GAAA,YAAsBO,EAAc,GAAG,qDC7D1D,OAAO,eAAezE,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,UAAoB0E,EACpB1E,GAAA,WAAqB2E,EACrB3E,GAAA,YAAsB4E,EACtB5E,GAAA,WAAqB6E,EAIrB,SAASH,EAAUI,EAAM,CACrB,OAAOA,EAAK,SAAS,EAAE,EAAE,SAAS,EAAG,GAAG,EAAE,YAAW,CACzD,CAIA,SAASH,EAAW5E,EAAO,CACvB,OAAO,MAAM,KAAKA,CAAK,EAAE,IAAI2E,CAAS,EAAE,KAAK,EAAE,CACnD,CAIA,SAASE,EAAYG,EAAKC,EAAY,EAAG,CACrC,OAAQD,IAAQ,GAAG,SAAS,EAAE,EAAE,SAASC,EAAW,GAAG,EAAE,YAAW,CACxE,CAIA,SAASH,EAAW7E,EAAK,CAErB,MAAMiF,EAAWjF,EAAI,QAAQ,MAAO,EAAE,EAAE,YAAW,EAEnD,GAAI,CAAC,cAAc,KAAKiF,CAAQ,EAC5B,MAAM,IAAI,MAAM,sDAAsD,EAE1E,GAAIA,EAAS,OAAS,IAAM,EACxB,MAAM,IAAI,MAAM,gCAAgC,EAEpD,MAAMlF,EAAQ,IAAI,WAAWkF,EAAS,OAAS,CAAC,EAChD,QAASpiD,EAAI,EAAGA,EAAIoiD,EAAS,OAAQpiD,GAAK,EACtCk9C,EAAMl9C,EAAI,CAAC,EAAI,SAASoiD,EAAS,OAAOpiD,EAAG,CAAC,EAAG,EAAE,EAErD,OAAOk9C,CACX,2DCvCA,OAAO,eAAemF,GAAS,aAAc,CAAE,MAAO,GAAM,EAC5DA,GAAA,iBAA2BC,EAC3BD,GAAA,mBAA6BE,EAC7BF,GAAA,sBAAgCG,EAChCH,GAAA,kBAA4BI,EAC5BJ,GAAA,mBAA6BK,EAC7BL,GAAA,sBAAgCM,EAChC,MAAMC,EAAUl0E,GAAA,EAIhB,SAAS4zE,EAAiBO,EAAW,CACjC,OAAQA,EAAS,CACb,KAAKD,EAAQ,UAAU,MAAO,MAAO,QACrC,KAAKA,EAAQ,UAAU,OAAQ,MAAO,SACtC,KAAKA,EAAQ,UAAU,eAAgB,MAAO,iBAC9C,KAAKA,EAAQ,UAAU,gBAAiB,MAAO,kBAC/C,QAAS,MAAO,YAAYC,CAAS,GAC7C,CACA,CAIA,SAASN,EAAmBO,EAAa,CACrC,OAAQA,EAAW,CACf,KAAKF,EAAQ,YAAY,UAAW,MAAO,YAC3C,KAAKA,EAAQ,YAAY,MAAO,MAAO,QACvC,KAAKA,EAAQ,YAAY,OAAQ,MAAO,SACxC,KAAKA,EAAQ,YAAY,UAAW,MAAO,YAC3C,KAAKA,EAAQ,YAAY,UAAW,MAAO,YAC3C,KAAKA,EAAQ,YAAY,QAAS,MAAO,UACzC,KAAKA,EAAQ,YAAY,SAAU,MAAO,WAC1C,KAAKA,EAAQ,YAAY,YAAa,MAAO,cAC7C,KAAKA,EAAQ,YAAY,YAAa,MAAO,cAC7C,KAAKA,EAAQ,YAAY,IAAK,MAAO,MACrC,KAAKA,EAAQ,YAAY,KAAM,MAAO,OACtC,KAAKA,EAAQ,YAAY,UAAW,MAAO,YAC3C,KAAKA,EAAQ,YAAY,QAAS,MAAO,UACzC,QAAS,MAAO,cAAcE,EAAY,SAAS,EAAE,CAAC,GAC9D,CACA,CAIA,SAASN,EAAsBO,EAAS,CACpC,OAAQA,EAAO,CACX,KAAKH,EAAQ,eAAe,SAAU,MAAO,YAC7C,KAAKA,EAAQ,eAAe,SAAU,MAAO,YAC7C,KAAKA,EAAQ,eAAe,SAAU,MAAO,YAC7C,KAAKA,EAAQ,eAAe,SAAU,MAAO,YAC7C,QAAS,MAAO,YAAYG,CAAO,GAC3C,CACA,CAIA,SAASN,EAAkBO,EAAM,CAC7B,OAAQA,EAAI,CACR,KAAKJ,EAAQ,WAAW,QAAS,MAAO,UACxC,KAAKA,EAAQ,WAAW,SAAU,MAAO,YACzC,KAAKA,EAAQ,WAAW,SAAU,MAAO,WACzC,KAAKA,EAAQ,WAAW,WAAY,MAAO,cAC3C,KAAKA,EAAQ,WAAW,OAAQ,MAAO,SACvC,QAAS,MAAO,YAAYI,CAAI,GACxC,CACA,CAIA,SAASN,EAAmBO,EAAa,CACrC,OAAQA,EAAW,CACf,KAAKL,EAAQ,YAAY,SAAU,MAAO,YAC1C,KAAKA,EAAQ,YAAY,UAAW,MAAO,yBAC3C,KAAKA,EAAQ,YAAY,iBAAkB,MAAO,qBAClD,KAAKA,EAAQ,YAAY,iBAAkB,MAAO,uBAClD,KAAKA,EAAQ,YAAY,cAAe,MAAO,kBAC/C,QAAS,MAAO,YAAYK,CAAW,GAC/C,CACA,CAIA,SAASN,EAAsBO,EAAS,CACpC,OAAQA,EAAO,CACX,KAAKN,EAAQ,eAAe,gBAAiB,MAAO,wBACpD,KAAKA,EAAQ,eAAe,iBAAkB,MAAO,yBACrD,QAAS,MAAO,cAAcM,EAAQ,SAAS,EAAE,CAAC,GAC1D,CACA,+RC3FA,MAAAC,GAAe,0LCAb,SAAUC,EAAMC,EAAS,CAGzBC,EAAA,QAA2BD,EAAO,CAUpC,GAAEE,GAAM,UAAY,CAOnB,IAAIC,EAAWA,IAAa,SAAUC,EAAMC,EAAW,CAEnD,IAAIC,EA4BJ,GAzBI,OAAO,OAAW,KAAe,OAAO,SACxCA,EAAS,OAAO,QAIhB,OAAO,KAAS,KAAe,KAAK,SACpCA,EAAS,KAAK,QAId,OAAO,WAAe,KAAe,WAAW,SAChDA,EAAS,WAAW,QAIpB,CAACA,GAAU,OAAO,OAAW,KAAe,OAAO,WACnDA,EAAS,OAAO,UAIhB,CAACA,GAAU,OAAOC,GAAW,KAAeA,GAAO,SACnDD,EAASC,GAAO,QAIhB,CAACD,GAAU,OAAOE,IAAY,WAC9B,GAAI,CACAF,EAASj1E,EACtB,MAAuB,EAQlB,IAAIo1E,EAAwB,UAAY,CACpC,GAAIH,EAAQ,CAER,GAAI,OAAOA,EAAO,iBAAoB,WAClC,GAAI,CACA,OAAOA,EAAO,gBAAgB,IAAI,YAAY,CAAC,CAAC,EAAE,CAAC,CACxE,MAA+B,EAIlB,GAAI,OAAOA,EAAO,aAAgB,WAC9B,GAAI,CACA,OAAOA,EAAO,YAAY,CAAC,EAAE,YAAW,CAC7D,MAA+B,EAE/B,CAES,MAAM,IAAI,MAAM,qEAAqE,CAC9F,EAMSI,EAAS,OAAO,SAAW,UAAY,CACvC,SAASl3E,GAAI,EAEb,OAAO,SAAUm3E,EAAK,CAClB,IAAIC,EAEJ,OAAAp3E,EAAE,UAAYm3E,EAEdC,EAAU,IAAIp3E,EAEdA,EAAE,UAAY,KAEPo3E,CACpB,CACA,KAKSz3E,EAAI,GAKJ03E,EAAQ13E,EAAE,IAAM,GAKhB23E,EAAOD,EAAM,MAAQ,UAAY,CAGjC,MAAO,CAmBH,OAAQ,SAAUE,EAAW,CAEzB,IAAIH,EAAUF,EAAO,IAAI,EAGzB,OAAIK,GACAH,EAAQ,MAAMG,CAAS,GAIvB,CAACH,EAAQ,eAAe,MAAM,GAAK,KAAK,OAASA,EAAQ,QACzDA,EAAQ,KAAO,UAAY,CACvBA,EAAQ,OAAO,KAAK,MAAM,KAAM,SAAS,CAClE,GAIiBA,EAAQ,KAAK,UAAYA,EAGzBA,EAAQ,OAAS,KAEVA,CACxB,EAca,OAAQ,UAAY,CAChB,IAAII,EAAW,KAAK,OAAM,EAC1B,OAAAA,EAAS,KAAK,MAAMA,EAAU,SAAS,EAEhCA,CACxB,EAca,KAAM,UAAY,CAC/B,EAaa,MAAO,SAAUC,EAAY,CACzB,QAASC,KAAgBD,EACjBA,EAAW,eAAeC,CAAY,IACtC,KAAKA,CAAY,EAAID,EAAWC,CAAY,GAKhDD,EAAW,eAAe,UAAU,IACpC,KAAK,SAAWA,EAAW,SAEhD,EAWa,MAAO,UAAY,CACf,OAAO,KAAK,KAAK,UAAU,OAAO,IAAI,CACvD,EAEA,KAQSE,EAAYN,EAAM,UAAYC,EAAK,OAAO,CAa1C,KAAM,SAAUM,EAAOC,EAAU,CAC7BD,EAAQ,KAAK,MAAQA,GAAS,GAE1BC,GAAYhB,EACZ,KAAK,SAAWgB,EAEhB,KAAK,SAAWD,EAAM,OAAS,CAEhD,EAeS,SAAU,SAAUE,EAAS,CACzB,OAAQA,GAAWC,GAAK,UAAU,IAAI,CACnD,EAaS,OAAQ,SAAUC,EAAW,CAEzB,IAAIC,EAAY,KAAK,MACjBC,EAAYF,EAAU,MACtBG,EAAe,KAAK,SACpBC,EAAeJ,EAAU,SAM7B,GAHA,KAAK,MAAK,EAGNG,EAAe,EAEf,QAAShlD,EAAI,EAAGA,EAAIilD,EAAcjlD,IAAK,CACnC,IAAIklD,EAAYH,EAAU/kD,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IAC7D8kD,EAAWE,EAAehlD,IAAO,CAAC,GAAKklD,GAAa,IAAOF,EAAehlD,GAAK,EAAK,CACzG,KAGiB,SAASmlD,EAAI,EAAGA,EAAIF,EAAcE,GAAK,EACnCL,EAAWE,EAAeG,IAAO,CAAC,EAAIJ,EAAUI,IAAM,CAAC,EAG/D,YAAK,UAAYF,EAGV,IACpB,EASS,MAAO,UAAY,CAEf,IAAIR,EAAQ,KAAK,MACbC,EAAW,KAAK,SAGpBD,EAAMC,IAAa,CAAC,GAAK,YAAe,GAAMA,EAAW,EAAK,EAC9DD,EAAM,OAAShB,EAAK,KAAKiB,EAAW,CAAC,CAClD,EAWS,MAAO,UAAY,CACf,IAAIU,EAAQjB,EAAK,MAAM,KAAK,IAAI,EAChC,OAAAiB,EAAM,MAAQ,KAAK,MAAM,MAAM,CAAC,EAEzBA,CACpB,EAeS,OAAQ,SAAUC,EAAQ,CAGtB,QAFIZ,EAAQ,GAEHzkD,EAAI,EAAGA,EAAIqlD,EAAQrlD,GAAK,EAC7BykD,EAAM,KAAKX,GAAuB,EAGtC,OAAO,IAAIU,EAAU,KAAKC,EAAOY,CAAM,CACpD,CACA,CAAM,EAKGC,EAAQ94E,EAAE,IAAM,GAKhBo4E,EAAMU,EAAM,IAAM,CAclB,UAAW,SAAUT,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrBU,EAAW,GACNvlD,EAAI,EAAGA,EAAI0kD,EAAU1kD,IAAK,CAC/B,IAAIwlD,EAAQf,EAAMzkD,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IACrDulD,EAAS,MAAMC,IAAS,GAAG,SAAS,EAAE,CAAC,EACvCD,EAAS,MAAMC,EAAO,IAAM,SAAS,EAAE,CAAC,CACzD,CAEa,OAAOD,EAAS,KAAK,EAAE,CACpC,EAeS,MAAO,SAAUE,EAAQ,CAMrB,QAJIC,EAAeD,EAAO,OAGtBhB,EAAQ,GACHzkD,EAAI,EAAGA,EAAI0lD,EAAc1lD,GAAK,EACnCykD,EAAMzkD,IAAM,CAAC,GAAK,SAASylD,EAAO,OAAOzlD,EAAG,CAAC,EAAG,EAAE,GAAM,GAAMA,EAAI,EAAK,EAG3E,OAAO,IAAIwkD,EAAU,KAAKC,EAAOiB,EAAe,CAAC,CAC9D,GAMSC,EAASL,EAAM,OAAS,CAcxB,UAAW,SAAUT,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrBe,EAAc,GACT5lD,EAAI,EAAGA,EAAI0kD,EAAU1kD,IAAK,CAC/B,IAAIwlD,EAAQf,EAAMzkD,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,IACrD4lD,EAAY,KAAK,OAAO,aAAaJ,CAAI,CAAC,CAC3D,CAEa,OAAOI,EAAY,KAAK,EAAE,CACvC,EAeS,MAAO,SAAUC,EAAW,CAMxB,QAJIC,EAAkBD,EAAU,OAG5BpB,EAAQ,GACHzkD,EAAI,EAAGA,EAAI8lD,EAAiB9lD,IACjCykD,EAAMzkD,IAAM,CAAC,IAAM6lD,EAAU,WAAW7lD,CAAC,EAAI,MAAU,GAAMA,EAAI,EAAK,EAG1E,OAAO,IAAIwkD,EAAU,KAAKC,EAAOqB,CAAe,CAC7D,GAMSC,EAAOT,EAAM,KAAO,CAcpB,UAAW,SAAUT,EAAW,CAC5B,GAAI,CACA,OAAO,mBAAmB,OAAOc,EAAO,UAAUd,CAAS,CAAC,CAAC,CAC9E,MAAyB,CACR,MAAM,IAAI,MAAM,sBAAsB,CACvD,CACA,EAeS,MAAO,SAAUmB,EAAS,CACtB,OAAOL,EAAO,MAAM,SAAS,mBAAmBK,CAAO,CAAC,CAAC,CACtE,GAUSC,EAAyB/B,EAAM,uBAAyBC,EAAK,OAAO,CAQpE,MAAO,UAAY,CAEf,KAAK,MAAQ,IAAIK,EAAU,KAC3B,KAAK,YAAc,CAChC,EAYS,QAAS,SAAU7hD,EAAM,CAEjB,OAAOA,GAAQ,WACfA,EAAOojD,EAAK,MAAMpjD,CAAI,GAI1B,KAAK,MAAM,OAAOA,CAAI,EACtB,KAAK,aAAeA,EAAK,QACtC,EAgBS,SAAU,SAAUujD,EAAS,CACzB,IAAIC,EAGAxjD,EAAO,KAAK,MACZyjD,EAAYzjD,EAAK,MACjB0jD,EAAe1jD,EAAK,SACpB2jD,EAAY,KAAK,UACjBC,EAAiBD,EAAY,EAG7BE,EAAeH,EAAeE,EAC9BL,EAEAM,EAAe/C,EAAK,KAAK+C,CAAY,EAIrCA,EAAe/C,EAAK,KAAK+C,EAAe,GAAK,KAAK,eAAgB,CAAC,EAIvE,IAAIC,EAAcD,EAAeF,EAG7BI,EAAcjD,EAAK,IAAIgD,EAAc,EAAGJ,CAAY,EAGxD,GAAII,EAAa,CACb,QAASzwD,GAAS,EAAGA,GAASywD,EAAazwD,IAAUswD,EAEjD,KAAK,gBAAgBF,EAAWpwD,EAAM,EAI1CmwD,EAAiBC,EAAU,OAAO,EAAGK,CAAW,EAChD9jD,EAAK,UAAY+jD,CAClC,CAGa,OAAO,IAAIlC,EAAU,KAAK2B,EAAgBO,CAAW,CAClE,EAWS,MAAO,UAAY,CACf,IAAItB,EAAQjB,EAAK,MAAM,KAAK,IAAI,EAChC,OAAAiB,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACpB,EAES,eAAgB,CACzB,CAAM,EAOYlB,EAAM,OAAS+B,EAAuB,OAAO,CAItD,IAAK9B,EAAK,OAAM,EAWhB,KAAM,SAAUwC,EAAK,CAEjB,KAAK,IAAM,KAAK,IAAI,OAAOA,CAAG,EAG9B,KAAK,MAAK,CACvB,EASS,MAAO,UAAY,CAEfV,EAAuB,MAAM,KAAK,IAAI,EAGtC,KAAK,SAAQ,CAC1B,EAcS,OAAQ,SAAUW,EAAe,CAE7B,YAAK,QAAQA,CAAa,EAG1B,KAAK,SAAQ,EAGN,IACpB,EAgBS,SAAU,SAAUA,EAAe,CAE3BA,GACA,KAAK,QAAQA,CAAa,EAI9B,IAAIx0C,EAAO,KAAK,YAAW,EAE3B,OAAOA,CACpB,EAES,UAAW,GAeX,cAAe,SAAUy0C,EAAQ,CAC7B,OAAO,SAAUhkD,EAAS8jD,EAAK,CAC3B,OAAO,IAAIE,EAAO,KAAKF,CAAG,EAAE,SAAS9jD,CAAO,CAC7D,CACA,EAeS,kBAAmB,SAAUgkD,EAAQ,CACjC,OAAO,SAAUhkD,EAASvM,EAAK,CAC3B,OAAO,IAAIwwD,EAAO,KAAK,KAAKD,EAAQvwD,CAAG,EAAE,SAASuM,CAAO,CAC1E,CACA,CACA,CAAM,EAKD,IAAIikD,EAASt6E,EAAE,KAAO,GAEtB,OAAOA,CACZ,GAAG,IAAI,EAGN,OAAOg3E,CAER,CAAC,wGCtyBC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,SAAUE,EAAW,CAElB,IAAIl3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACV23E,EAAOD,EAAM,KACb6C,EAAe7C,EAAM,UAKrB8C,EAAQx6E,EAAE,IAAM,GAKNw6E,EAAM,KAAO7C,EAAK,OAAO,CAWnC,KAAM,SAAU8C,EAAMC,EAAK,CACvB,KAAK,KAAOD,EACZ,KAAK,IAAMC,CACxB,CAsKA,CAAM,EAQkBF,EAAM,UAAY7C,EAAK,OAAO,CAqB7C,KAAM,SAAUM,EAAOC,EAAU,CAC7BD,EAAQ,KAAK,MAAQA,GAAS,GAE1BC,GAAYhB,EACZ,KAAK,SAAWgB,EAEhB,KAAK,SAAWD,EAAM,OAAS,CAEhD,EAWS,MAAO,UAAY,CAOf,QALI0C,EAAW,KAAK,MAChBC,EAAiBD,EAAS,OAG1BE,EAAW,GACNrnD,EAAI,EAAGA,EAAIonD,EAAgBpnD,IAAK,CACrC,IAAIsnD,EAAUH,EAASnnD,CAAC,EACxBqnD,EAAS,KAAKC,EAAQ,IAAI,EAC1BD,EAAS,KAAKC,EAAQ,GAAG,CAC1C,CAEa,OAAOP,EAAa,OAAOM,EAAU,KAAK,QAAQ,CAC/D,EAWS,MAAO,UAAY,CAQf,QAPIjC,EAAQjB,EAAK,MAAM,KAAK,IAAI,EAG5BM,EAAQW,EAAM,MAAQ,KAAK,MAAM,MAAM,CAAC,EAGxCmC,EAAc9C,EAAM,OACfzkD,EAAI,EAAGA,EAAIunD,EAAavnD,IAC7BykD,EAAMzkD,CAAC,EAAIykD,EAAMzkD,CAAC,EAAE,MAAK,EAG7B,OAAOolD,CACpB,CACA,CAAM,CACN,GAAE,EAGM5B,CAER,CAAC,wGC/SC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,GAAI,OAAO,aAAe,WAK1B,KAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAGlBsD,EAAYhD,EAAU,KAGtBiD,EAAUjD,EAAU,KAAO,SAAUkD,EAAY,CAqBjD,GAnBIA,aAAsB,cACtBA,EAAa,IAAI,WAAWA,CAAU,IAKtCA,aAAsB,WACrB,OAAO,kBAAsB,KAAeA,aAAsB,mBACnEA,aAAsB,YACtBA,aAAsB,aACtBA,aAAsB,YACtBA,aAAsB,aACtBA,aAAsB,cACtBA,aAAsB,gBAEtBA,EAAa,IAAI,WAAWA,EAAW,OAAQA,EAAW,WAAYA,EAAW,UAAU,GAI3FA,aAAsB,WAAY,CAMlC,QAJIC,EAAuBD,EAAW,WAGlCjD,EAAQ,GACHzkD,EAAI,EAAGA,EAAI2nD,EAAsB3nD,IACtCykD,EAAMzkD,IAAM,CAAC,GAAK0nD,EAAW1nD,CAAC,GAAM,GAAMA,EAAI,EAAK,EAIvDwnD,EAAU,KAAK,KAAM/C,EAAOkD,CAAoB,CAC7D,MAEaH,EAAU,MAAM,KAAM,SAAS,CAE5C,EAEKC,EAAQ,UAAYjD,EACzB,GAAE,EAGMhB,EAAS,IAAI,SAErB,CAAC,wGC3EC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBoB,EAAQ94E,EAAE,IAKA84E,EAAM,MAAQA,EAAM,QAAU,CAcxC,UAAW,SAAUT,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrB+C,EAAa,GACR5nD,EAAI,EAAGA,EAAI0kD,EAAU1kD,GAAK,EAAG,CAClC,IAAI6nD,EAAapD,EAAMzkD,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,MAC1D4nD,EAAW,KAAK,OAAO,aAAaC,CAAS,CAAC,CAC/D,CAEa,OAAOD,EAAW,KAAK,EAAE,CACtC,EAeS,MAAO,SAAUE,EAAU,CAMvB,QAJIC,EAAiBD,EAAS,OAG1BrD,EAAQ,GACHzkD,EAAI,EAAGA,EAAI+nD,EAAgB/nD,IAChCykD,EAAMzkD,IAAM,CAAC,GAAK8nD,EAAS,WAAW9nD,CAAC,GAAM,GAAMA,EAAI,EAAK,GAGhE,OAAOwkD,EAAU,OAAOC,EAAOsD,EAAiB,CAAC,CAC9D,GAMKzC,EAAM,QAAU,CAcZ,UAAW,SAAUT,EAAW,CAO5B,QALIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SAGrB+C,EAAa,GACR5nD,EAAI,EAAGA,EAAI0kD,EAAU1kD,GAAK,EAAG,CAClC,IAAI6nD,EAAYG,EAAYvD,EAAMzkD,IAAM,CAAC,IAAO,GAAMA,EAAI,EAAK,EAAM,KAAM,EAC3E4nD,EAAW,KAAK,OAAO,aAAaC,CAAS,CAAC,CAC/D,CAEa,OAAOD,EAAW,KAAK,EAAE,CACtC,EAeS,MAAO,SAAUE,EAAU,CAMvB,QAJIC,EAAiBD,EAAS,OAG1BrD,EAAQ,GACHzkD,EAAI,EAAGA,EAAI+nD,EAAgB/nD,IAChCykD,EAAMzkD,IAAM,CAAC,GAAKgoD,EAAWF,EAAS,WAAW9nD,CAAC,GAAM,GAAMA,EAAI,EAAK,EAAG,EAG9E,OAAOwkD,EAAU,OAAOC,EAAOsD,EAAiB,CAAC,CAC9D,GAGK,SAASC,EAAWC,EAAM,CACtB,OAASA,GAAQ,EAAK,WAAgBA,IAAS,EAAK,QAC7D,CACA,GAAE,EAGMzE,EAAS,IAAI,KAErB,CAAC,wGCpJC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBoB,EAAQ94E,EAAE,IAKD84E,EAAM,OAAS,CAcxB,UAAW,SAAUT,EAAW,CAE5B,IAAIJ,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SACrBqD,EAAM,KAAK,KAGfrD,EAAU,MAAK,EAIf,QADIsD,EAAc,GACTnoD,EAAI,EAAGA,EAAI0kD,EAAU1kD,GAAK,EAO/B,QANIooD,EAAS3D,EAAMzkD,IAAM,CAAC,IAAa,GAAMA,EAAI,EAAK,EAAY,IAC9DqoD,EAAS5D,EAAOzkD,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAC9DsoD,EAAS7D,EAAOzkD,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAE9DuoD,EAAWH,GAAS,GAAOC,GAAS,EAAKC,EAEpCnD,EAAI,EAAIA,EAAI,GAAOnlD,EAAImlD,EAAI,IAAOT,EAAWS,IAClDgD,EAAY,KAAKD,EAAI,OAAQK,IAAa,GAAK,EAAIpD,GAAO,EAAI,CAAC,EAKvE,IAAIqD,EAAcN,EAAI,OAAO,EAAE,EAC/B,GAAIM,EACA,KAAOL,EAAY,OAAS,GACxBA,EAAY,KAAKK,CAAW,EAIpC,OAAOL,EAAY,KAAK,EAAE,CACvC,EAeS,MAAO,SAAUM,EAAW,CAExB,IAAIC,EAAkBD,EAAU,OAC5BP,EAAM,KAAK,KACXS,EAAa,KAAK,YAEtB,GAAI,CAACA,EAAY,CACTA,EAAa,KAAK,YAAc,GAChC,QAASxD,EAAI,EAAGA,EAAI+C,EAAI,OAAQ/C,IAC5BwD,EAAWT,EAAI,WAAW/C,CAAC,CAAC,EAAIA,CAEzD,CAGa,IAAIqD,EAAcN,EAAI,OAAO,EAAE,EAC/B,GAAIM,EAAa,CACb,IAAII,EAAeH,EAAU,QAAQD,CAAW,EAC5CI,IAAiB,KACjBF,EAAkBE,EAEvC,CAGa,OAAOC,EAAUJ,EAAWC,EAAiBC,CAAU,CAEpE,EAES,KAAM,qEAGV,SAASE,EAAUJ,EAAWC,EAAiBC,EAAY,CAGzD,QAFIlE,EAAQ,GACRY,EAAS,EACJrlD,EAAI,EAAGA,EAAI0oD,EAAiB1oD,IACjC,GAAIA,EAAI,EAAG,CACP,IAAI8oD,EAAQH,EAAWF,EAAU,WAAWzoD,EAAI,CAAC,CAAC,GAAOA,EAAI,EAAK,EAC9D+oD,EAAQJ,EAAWF,EAAU,WAAWzoD,CAAC,CAAC,IAAO,EAAKA,EAAI,EAAK,EAC/DgpD,EAAeF,EAAQC,EAC3BtE,EAAMY,IAAW,CAAC,GAAK2D,GAAiB,GAAM3D,EAAS,EAAK,EAC5DA,GACf,CAEO,OAAOb,EAAU,OAAOC,EAAOY,CAAM,CAC5C,CACA,GAAE,EAGM7B,EAAS,IAAI,MAErB,CAAC,wGCvIC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBoB,EAAQ94E,EAAE,IAKE84E,EAAM,UAAY,CAgB9B,UAAW,SAAUT,EAAWoE,EAAS,CACjCA,IAAY,SACZA,EAAU,IAGd,IAAIxE,EAAQI,EAAU,MAClBH,EAAWG,EAAU,SACrBqD,EAAMe,EAAU,KAAK,UAAY,KAAK,KAG1CpE,EAAU,MAAK,EAIf,QADIsD,EAAc,GACTnoD,EAAI,EAAGA,EAAI0kD,EAAU1kD,GAAK,EAO/B,QANIooD,EAAS3D,EAAMzkD,IAAM,CAAC,IAAa,GAAMA,EAAI,EAAK,EAAY,IAC9DqoD,EAAS5D,EAAOzkD,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAC9DsoD,EAAS7D,EAAOzkD,EAAI,IAAO,CAAC,IAAO,IAAOA,EAAI,GAAK,EAAK,EAAM,IAE9DuoD,EAAWH,GAAS,GAAOC,GAAS,EAAKC,EAEpCnD,EAAI,EAAIA,EAAI,GAAOnlD,EAAImlD,EAAI,IAAOT,EAAWS,IAClDgD,EAAY,KAAKD,EAAI,OAAQK,IAAa,GAAK,EAAIpD,GAAO,EAAI,CAAC,EAKvE,IAAIqD,EAAcN,EAAI,OAAO,EAAE,EAC/B,GAAIM,EACA,KAAOL,EAAY,OAAS,GACxBA,EAAY,KAAKK,CAAW,EAIpC,OAAOL,EAAY,KAAK,EAAE,CACvC,EAiBS,MAAO,SAAUM,EAAWQ,EAAS,CAC7BA,IAAY,SACZA,EAAU,IAId,IAAIP,EAAkBD,EAAU,OAC5BP,EAAMe,EAAU,KAAK,UAAY,KAAK,KACtCN,EAAa,KAAK,YAEtB,GAAI,CAACA,EAAY,CACbA,EAAa,KAAK,YAAc,GAChC,QAASxD,EAAI,EAAGA,EAAI+C,EAAI,OAAQ/C,IAC5BwD,EAAWT,EAAI,WAAW/C,CAAC,CAAC,EAAIA,CAErD,CAGa,IAAIqD,EAAcN,EAAI,OAAO,EAAE,EAC/B,GAAIM,EAAa,CACb,IAAII,EAAeH,EAAU,QAAQD,CAAW,EAC5CI,IAAiB,KACjBF,EAAkBE,EAEvC,CAGa,OAAOC,EAAUJ,EAAWC,EAAiBC,CAAU,CAEpE,EAES,KAAM,oEACN,UAAW,oEAGf,SAASE,EAAUJ,EAAWC,EAAiBC,EAAY,CAGvD,QAFIlE,EAAQ,GACRY,EAAS,EACJrlD,EAAI,EAAGA,EAAI0oD,EAAiB1oD,IACjC,GAAIA,EAAI,EAAG,CACP,IAAI8oD,EAAQH,EAAWF,EAAU,WAAWzoD,EAAI,CAAC,CAAC,GAAOA,EAAI,EAAK,EAC9D+oD,EAAQJ,EAAWF,EAAU,WAAWzoD,CAAC,CAAC,IAAO,EAAKA,EAAI,EAAK,EAC/DgpD,EAAeF,EAAQC,EAC3BtE,EAAMY,IAAW,CAAC,GAAK2D,GAAiB,GAAM3D,EAAS,EAAK,EAC5DA,GACjB,CAES,OAAOb,EAAU,OAAOC,EAAOY,CAAM,CAC9C,CACA,GAAE,EAGM7B,EAAS,IAAI,SAErB,CAAC,wGCnJC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,SAAUC,EAAM,CAEb,IAAIj3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBgF,EAAShF,EAAM,OACf4C,EAASt6E,EAAE,KAGX2B,EAAI,IAGP,UAAY,CACT,QAAS6xB,EAAI,EAAGA,EAAI,GAAIA,IACpB7xB,EAAE6xB,CAAC,EAAKyjD,EAAK,IAAIA,EAAK,IAAIzjD,EAAI,CAAC,CAAC,EAAI,WAAe,CAEhE,GAAM,EAKD,IAAImpD,EAAMrC,EAAO,IAAMoC,EAAO,OAAO,CACjC,SAAU,UAAY,CAClB,KAAK,MAAQ,IAAI1E,EAAU,KAAK,CAC5B,WAAY,WACZ,WAAY,SAC7B,CAAc,CACd,EAES,gBAAiB,SAAUp3E,EAAG4oB,EAAQ,CAElC,QAASgK,EAAI,EAAGA,EAAI,GAAIA,IAAK,CAEzB,IAAIopD,EAAWpzD,EAASgK,EACpBqpD,EAAaj8E,EAAEg8E,CAAQ,EAE3Bh8E,EAAEg8E,CAAQ,GACHC,GAAc,EAAOA,IAAe,IAAO,UAC3CA,GAAc,GAAOA,IAAe,GAAO,UAEnE,CAGa,IAAIt8E,EAAI,KAAK,MAAM,MAEfu8E,EAAcl8E,EAAE4oB,EAAS,CAAC,EAC1BuzD,EAAcn8E,EAAE4oB,EAAS,CAAC,EAC1BwzD,EAAcp8E,EAAE4oB,EAAS,CAAC,EAC1ByzD,EAAcr8E,EAAE4oB,EAAS,CAAC,EAC1B0zD,EAAct8E,EAAE4oB,EAAS,CAAC,EAC1B2zD,EAAcv8E,EAAE4oB,EAAS,CAAC,EAC1B4zD,EAAcx8E,EAAE4oB,EAAS,CAAC,EAC1B6zD,GAAcz8E,EAAE4oB,EAAS,CAAC,EAC1B8zD,EAAc18E,EAAE4oB,EAAS,CAAC,EAC1B+zD,EAAc38E,EAAE4oB,EAAS,CAAC,EAC1Bg0D,GAAc58E,EAAE4oB,EAAS,EAAE,EAC3Bi0D,GAAc78E,EAAE4oB,EAAS,EAAE,EAC3Bk0D,GAAc98E,EAAE4oB,EAAS,EAAE,EAC3Bm0D,EAAc/8E,EAAE4oB,EAAS,EAAE,EAC3Bo0D,GAAch9E,EAAE4oB,EAAS,EAAE,EAC3Bq0D,EAAcj9E,EAAE4oB,EAAS,EAAE,EAG3B1pB,EAAIS,EAAE,CAAC,EACPJ,EAAII,EAAE,CAAC,EACPO,EAAIP,EAAE,CAAC,EACPM,EAAIN,EAAE,CAAC,EAGXT,EAAIg+E,EAAGh+E,EAAGK,EAAGW,EAAGD,EAAGi8E,EAAa,EAAIn7E,EAAE,CAAC,CAAC,EACxCd,EAAIi9E,EAAGj9E,EAAGf,EAAGK,EAAGW,EAAGi8E,EAAa,GAAIp7E,EAAE,CAAC,CAAC,EACxCb,EAAIg9E,EAAGh9E,EAAGD,EAAGf,EAAGK,EAAG68E,EAAa,GAAIr7E,EAAE,CAAC,CAAC,EACxCxB,EAAI29E,EAAG39E,EAAGW,EAAGD,EAAGf,EAAGm9E,EAAa,GAAIt7E,EAAE,CAAC,CAAC,EACxC7B,EAAIg+E,EAAGh+E,EAAGK,EAAGW,EAAGD,EAAGq8E,EAAa,EAAIv7E,EAAE,CAAC,CAAC,EACxCd,EAAIi9E,EAAGj9E,EAAGf,EAAGK,EAAGW,EAAGq8E,EAAa,GAAIx7E,EAAE,CAAC,CAAC,EACxCb,EAAIg9E,EAAGh9E,EAAGD,EAAGf,EAAGK,EAAGi9E,EAAa,GAAIz7E,EAAE,CAAC,CAAC,EACxCxB,EAAI29E,EAAG39E,EAAGW,EAAGD,EAAGf,EAAGu9E,GAAa,GAAI17E,EAAE,CAAC,CAAC,EACxC7B,EAAIg+E,EAAGh+E,EAAGK,EAAGW,EAAGD,EAAGy8E,EAAa,EAAI37E,EAAE,CAAC,CAAC,EACxCd,EAAIi9E,EAAGj9E,EAAGf,EAAGK,EAAGW,EAAGy8E,EAAa,GAAI57E,EAAE,CAAC,CAAC,EACxCb,EAAIg9E,EAAGh9E,EAAGD,EAAGf,EAAGK,EAAGq9E,GAAa,GAAI77E,EAAE,EAAE,CAAC,EACzCxB,EAAI29E,EAAG39E,EAAGW,EAAGD,EAAGf,EAAG29E,GAAa,GAAI97E,EAAE,EAAE,CAAC,EACzC7B,EAAIg+E,EAAGh+E,EAAGK,EAAGW,EAAGD,EAAG68E,GAAa,EAAI/7E,EAAE,EAAE,CAAC,EACzCd,EAAIi9E,EAAGj9E,EAAGf,EAAGK,EAAGW,EAAG68E,EAAa,GAAIh8E,EAAE,EAAE,CAAC,EACzCb,EAAIg9E,EAAGh9E,EAAGD,EAAGf,EAAGK,EAAGy9E,GAAa,GAAIj8E,EAAE,EAAE,CAAC,EACzCxB,EAAI29E,EAAG39E,EAAGW,EAAGD,EAAGf,EAAG+9E,EAAa,GAAIl8E,EAAE,EAAE,CAAC,EAEzC7B,EAAIi+E,EAAGj+E,EAAGK,EAAGW,EAAGD,EAAGk8E,EAAa,EAAIp7E,EAAE,EAAE,CAAC,EACzCd,EAAIk9E,EAAGl9E,EAAGf,EAAGK,EAAGW,EAAGs8E,EAAa,EAAIz7E,EAAE,EAAE,CAAC,EACzCb,EAAIi9E,EAAGj9E,EAAGD,EAAGf,EAAGK,EAAGs9E,GAAa,GAAI97E,EAAE,EAAE,CAAC,EACzCxB,EAAI49E,EAAG59E,EAAGW,EAAGD,EAAGf,EAAGg9E,EAAa,GAAIn7E,EAAE,EAAE,CAAC,EACzC7B,EAAIi+E,EAAGj+E,EAAGK,EAAGW,EAAGD,EAAGs8E,EAAa,EAAIx7E,EAAE,EAAE,CAAC,EACzCd,EAAIk9E,EAAGl9E,EAAGf,EAAGK,EAAGW,EAAG08E,GAAa,EAAI77E,EAAE,EAAE,CAAC,EACzCb,EAAIi9E,EAAGj9E,EAAGD,EAAGf,EAAGK,EAAG09E,EAAa,GAAIl8E,EAAE,EAAE,CAAC,EACzCxB,EAAI49E,EAAG59E,EAAGW,EAAGD,EAAGf,EAAGo9E,EAAa,GAAIv7E,EAAE,EAAE,CAAC,EACzC7B,EAAIi+E,EAAGj+E,EAAGK,EAAGW,EAAGD,EAAG08E,EAAa,EAAI57E,EAAE,EAAE,CAAC,EACzCd,EAAIk9E,EAAGl9E,EAAGf,EAAGK,EAAGW,EAAG88E,GAAa,EAAIj8E,EAAE,EAAE,CAAC,EACzCb,EAAIi9E,EAAGj9E,EAAGD,EAAGf,EAAGK,EAAG88E,EAAa,GAAIt7E,EAAE,EAAE,CAAC,EACzCxB,EAAI49E,EAAG59E,EAAGW,EAAGD,EAAGf,EAAGw9E,EAAa,GAAI37E,EAAE,EAAE,CAAC,EACzC7B,EAAIi+E,EAAGj+E,EAAGK,EAAGW,EAAGD,EAAG88E,EAAa,EAAIh8E,EAAE,EAAE,CAAC,EACzCd,EAAIk9E,EAAGl9E,EAAGf,EAAGK,EAAGW,EAAGk8E,EAAa,EAAIr7E,EAAE,EAAE,CAAC,EACzCb,EAAIi9E,EAAGj9E,EAAGD,EAAGf,EAAGK,EAAGk9E,GAAa,GAAI17E,EAAE,EAAE,CAAC,EACzCxB,EAAI49E,EAAG59E,EAAGW,EAAGD,EAAGf,EAAG49E,GAAa,GAAI/7E,EAAE,EAAE,CAAC,EAEzC7B,EAAIk+E,EAAGl+E,EAAGK,EAAGW,EAAGD,EAAGs8E,EAAa,EAAIx7E,EAAE,EAAE,CAAC,EACzCd,EAAIm9E,EAAGn9E,EAAGf,EAAGK,EAAGW,EAAGw8E,EAAa,GAAI37E,EAAE,EAAE,CAAC,EACzCb,EAAIk9E,EAAGl9E,EAAGD,EAAGf,EAAGK,EAAGs9E,GAAa,GAAI97E,EAAE,EAAE,CAAC,EACzCxB,EAAI69E,EAAG79E,EAAGW,EAAGD,EAAGf,EAAG89E,GAAa,GAAIj8E,EAAE,EAAE,CAAC,EACzC7B,EAAIk+E,EAAGl+E,EAAGK,EAAGW,EAAGD,EAAGk8E,EAAa,EAAIp7E,EAAE,EAAE,CAAC,EACzCd,EAAIm9E,EAAGn9E,EAAGf,EAAGK,EAAGW,EAAGo8E,EAAa,GAAIv7E,EAAE,EAAE,CAAC,EACzCb,EAAIk9E,EAAGl9E,EAAGD,EAAGf,EAAGK,EAAGk9E,GAAa,GAAI17E,EAAE,EAAE,CAAC,EACzCxB,EAAI69E,EAAG79E,EAAGW,EAAGD,EAAGf,EAAG09E,GAAa,GAAI77E,EAAE,EAAE,CAAC,EACzC7B,EAAIk+E,EAAGl+E,EAAGK,EAAGW,EAAGD,EAAG88E,EAAa,EAAIh8E,EAAE,EAAE,CAAC,EACzCd,EAAIm9E,EAAGn9E,EAAGf,EAAGK,EAAGW,EAAGg8E,EAAa,GAAIn7E,EAAE,EAAE,CAAC,EACzCb,EAAIk9E,EAAGl9E,EAAGD,EAAGf,EAAGK,EAAG88E,EAAa,GAAIt7E,EAAE,EAAE,CAAC,EACzCxB,EAAI69E,EAAG79E,EAAGW,EAAGD,EAAGf,EAAGs9E,EAAa,GAAIz7E,EAAE,EAAE,CAAC,EACzC7B,EAAIk+E,EAAGl+E,EAAGK,EAAGW,EAAGD,EAAG08E,EAAa,EAAI57E,EAAE,EAAE,CAAC,EACzCd,EAAIm9E,EAAGn9E,EAAGf,EAAGK,EAAGW,EAAG48E,GAAa,GAAI/7E,EAAE,EAAE,CAAC,EACzCb,EAAIk9E,EAAGl9E,EAAGD,EAAGf,EAAGK,EAAG09E,EAAa,GAAIl8E,EAAE,EAAE,CAAC,EACzCxB,EAAI69E,EAAG79E,EAAGW,EAAGD,EAAGf,EAAGk9E,EAAa,GAAIr7E,EAAE,EAAE,CAAC,EAEzC7B,EAAIm+E,EAAGn+E,EAAGK,EAAGW,EAAGD,EAAGi8E,EAAa,EAAIn7E,EAAE,EAAE,CAAC,EACzCd,EAAIo9E,EAAGp9E,EAAGf,EAAGK,EAAGW,EAAGu8E,GAAa,GAAI17E,EAAE,EAAE,CAAC,EACzCb,EAAIm9E,EAAGn9E,EAAGD,EAAGf,EAAGK,EAAGy9E,GAAa,GAAIj8E,EAAE,EAAE,CAAC,EACzCxB,EAAI89E,EAAG99E,EAAGW,EAAGD,EAAGf,EAAGq9E,EAAa,GAAIx7E,EAAE,EAAE,CAAC,EACzC7B,EAAIm+E,EAAGn+E,EAAGK,EAAGW,EAAGD,EAAG68E,GAAa,EAAI/7E,EAAE,EAAE,CAAC,EACzCd,EAAIo9E,EAAGp9E,EAAGf,EAAGK,EAAGW,EAAGm8E,EAAa,GAAIt7E,EAAE,EAAE,CAAC,EACzCb,EAAIm9E,EAAGn9E,EAAGD,EAAGf,EAAGK,EAAGq9E,GAAa,GAAI77E,EAAE,EAAE,CAAC,EACzCxB,EAAI89E,EAAG99E,EAAGW,EAAGD,EAAGf,EAAGi9E,EAAa,GAAIp7E,EAAE,EAAE,CAAC,EACzC7B,EAAIm+E,EAAGn+E,EAAGK,EAAGW,EAAGD,EAAGy8E,EAAa,EAAI37E,EAAE,EAAE,CAAC,EACzCd,EAAIo9E,EAAGp9E,EAAGf,EAAGK,EAAGW,EAAG+8E,EAAa,GAAIl8E,EAAE,EAAE,CAAC,EACzCb,EAAIm9E,EAAGn9E,EAAGD,EAAGf,EAAGK,EAAGi9E,EAAa,GAAIz7E,EAAE,EAAE,CAAC,EACzCxB,EAAI89E,EAAG99E,EAAGW,EAAGD,EAAGf,EAAG69E,EAAa,GAAIh8E,EAAE,EAAE,CAAC,EACzC7B,EAAIm+E,EAAGn+E,EAAGK,EAAGW,EAAGD,EAAGq8E,EAAa,EAAIv7E,EAAE,EAAE,CAAC,EACzCd,EAAIo9E,EAAGp9E,EAAGf,EAAGK,EAAGW,EAAG28E,GAAa,GAAI97E,EAAE,EAAE,CAAC,EACzCb,EAAIm9E,EAAGn9E,EAAGD,EAAGf,EAAGK,EAAG68E,EAAa,GAAIr7E,EAAE,EAAE,CAAC,EACzCxB,EAAI89E,EAAG99E,EAAGW,EAAGD,EAAGf,EAAGy9E,EAAa,GAAI57E,EAAE,EAAE,CAAC,EAGzCpB,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIT,EAAK,EACpBS,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIJ,EAAK,EACpBI,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIO,EAAK,EACpBP,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIM,EAAK,CACjC,EAES,YAAa,UAAY,CAErB,IAAIs1B,EAAO,KAAK,MACZyjD,EAAYzjD,EAAK,MAEjB+nD,EAAa,KAAK,YAAc,EAChCC,EAAYhoD,EAAK,SAAW,EAGhCyjD,EAAUuE,IAAc,CAAC,GAAK,KAAS,GAAKA,EAAY,GAExD,IAAIC,EAAcnH,EAAK,MAAMiH,EAAa,UAAW,EACjDG,EAAcH,EAClBtE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,GACvCC,GAAe,EAAOA,IAAgB,IAAO,UAC7CA,GAAe,GAAOA,IAAgB,GAAO,WAEpDxE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,GACvCE,GAAe,EAAOA,IAAgB,IAAO,UAC7CA,GAAe,GAAOA,IAAgB,GAAO,WAGpDloD,EAAK,UAAYyjD,EAAU,OAAS,GAAK,EAGzC,KAAK,SAAQ,EAOb,QAJIh0C,EAAO,KAAK,MACZrlC,EAAIqlC,EAAK,MAGJpS,EAAI,EAAGA,EAAI,EAAGA,IAAK,CAExB,IAAI8qD,EAAM/9E,EAAEizB,CAAC,EAEbjzB,EAAEizB,CAAC,GAAO8qD,GAAO,EAAOA,IAAQ,IAAO,UAC7BA,GAAO,GAAOA,IAAQ,GAAO,UACxD,CAGa,OAAO14C,CACpB,EAES,MAAO,UAAY,CACf,IAAIgzC,EAAQ8D,EAAO,MAAM,KAAK,IAAI,EAClC,OAAA9D,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACpB,CACA,CAAM,EAED,SAASkF,EAAGh+E,EAAG,EAAGgB,EAAGD,EAAGnB,EAAGutD,EAAG3tD,EAAG,CAC7B,IAAIJ,EAAIY,GAAM,EAAIgB,EAAM,CAAC,EAAID,GAAMnB,EAAIJ,EACvC,OAASJ,GAAK+tD,EAAM/tD,IAAO,GAAK+tD,GAAO,CAChD,CAEK,SAAS8wB,EAAGj+E,EAAG,EAAGgB,EAAGD,EAAGnB,EAAGutD,EAAG3tD,EAAG,CAC7B,IAAIJ,EAAIY,GAAM,EAAIe,EAAMC,EAAI,CAACD,GAAMnB,EAAIJ,EACvC,OAASJ,GAAK+tD,EAAM/tD,IAAO,GAAK+tD,GAAO,CAChD,CAEK,SAAS+wB,EAAGl+E,EAAG,EAAGgB,EAAGD,EAAGnB,EAAGutD,EAAG3tD,EAAG,CAC7B,IAAIJ,EAAIY,GAAK,EAAIgB,EAAID,GAAKnB,EAAIJ,EAC9B,OAASJ,GAAK+tD,EAAM/tD,IAAO,GAAK+tD,GAAO,CAChD,CAEK,SAASgxB,EAAGn+E,EAAG,EAAGgB,EAAGD,EAAGnB,EAAGutD,EAAG3tD,EAAG,CAC7B,IAAIJ,EAAIY,GAAKgB,GAAK,EAAI,CAACD,IAAMnB,EAAIJ,EACjC,OAASJ,GAAK+tD,EAAM/tD,IAAO,GAAK+tD,GAAO,CAChD,CAgBKjtD,EAAE,IAAM08E,EAAO,cAAcC,CAAG,EAgBhC38E,EAAE,QAAU08E,EAAO,kBAAkBC,CAAG,CAC7C,GAAG,IAAI,EAGC3F,EAAS,GAEjB,CAAC,wGC3QC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBgF,EAAShF,EAAM,OACf4C,EAASt6E,EAAE,KAGX8B,EAAI,GAKJy8E,EAAOjE,EAAO,KAAOoC,EAAO,OAAO,CACnC,SAAU,UAAY,CAClB,KAAK,MAAQ,IAAI1E,EAAU,KAAK,CAC5B,WAAY,WACZ,WAAY,UACZ,UACjB,CAAc,CACd,EAES,gBAAiB,SAAUp3E,EAAG4oB,EAAQ,CAYlC,QAVIjpB,EAAI,KAAK,MAAM,MAGfT,EAAIS,EAAE,CAAC,EACPJ,EAAII,EAAE,CAAC,EACPO,EAAIP,EAAE,CAAC,EACPM,EAAIN,EAAE,CAAC,EACPH,EAAIG,EAAE,CAAC,EAGFizB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,GAAIA,EAAI,GACJ1xB,EAAE0xB,CAAC,EAAI5yB,EAAE4oB,EAASgK,CAAC,EAAI,MACpB,CACH,IAAIt0B,EAAI4C,EAAE0xB,EAAI,CAAC,EAAI1xB,EAAE0xB,EAAI,CAAC,EAAI1xB,EAAE0xB,EAAI,EAAE,EAAI1xB,EAAE0xB,EAAI,EAAE,EAClD1xB,EAAE0xB,CAAC,EAAKt0B,GAAK,EAAMA,IAAM,EAC9C,CAEiB,IAAII,GAAMQ,GAAK,EAAMA,IAAM,IAAOM,EAAI0B,EAAE0xB,CAAC,EACrCA,EAAI,GACJl0B,IAAOa,EAAIW,EAAM,CAACX,EAAIU,GAAM,WACrB2yB,EAAI,GACXl0B,IAAMa,EAAIW,EAAID,GAAK,WACZ2yB,EAAI,GACXl0B,IAAOa,EAAIW,EAAMX,EAAIU,EAAMC,EAAID,GAAM,WAErCvB,IAAMa,EAAIW,EAAID,GAAK,UAGvBT,EAAIS,EACJA,EAAIC,EACJA,EAAKX,GAAK,GAAOA,IAAM,EACvBA,EAAIL,EACJA,EAAIR,CACrB,CAGaiB,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIT,EAAK,EACpBS,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIJ,EAAK,EACpBI,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIO,EAAK,EACpBP,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIM,EAAK,EACpBN,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIH,EAAK,CACjC,EAES,YAAa,UAAY,CAErB,IAAI+1B,EAAO,KAAK,MACZyjD,EAAYzjD,EAAK,MAEjB+nD,EAAa,KAAK,YAAc,EAChCC,EAAYhoD,EAAK,SAAW,EAGhC,OAAAyjD,EAAUuE,IAAc,CAAC,GAAK,KAAS,GAAKA,EAAY,GACxDvE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAI,KAAK,MAAMD,EAAa,UAAW,EACrFtE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAID,EAClD/nD,EAAK,SAAWyjD,EAAU,OAAS,EAGnC,KAAK,SAAQ,EAGN,KAAK,KACzB,EAES,MAAO,UAAY,CACf,IAAIhB,EAAQ8D,EAAO,MAAM,KAAK,IAAI,EAClC,OAAA9D,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACpB,CACA,CAAM,EAgBD54E,EAAE,KAAO08E,EAAO,cAAc6B,CAAI,EAgBlCv+E,EAAE,SAAW08E,EAAO,kBAAkB6B,CAAI,CAC/C,GAAE,EAGMvH,EAAS,IAEjB,CAAC,wGCrJC,SAAUJ,EAAMC,EAAS,CAGzBC,UAA2BD,EAAQ30E,IAAiB,CAUtD,GAAE60E,GAAM,SAAUC,EAAU,CAE3B,OAAC,SAAUC,EAAM,CAEb,IAAIj3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClBgF,EAAShF,EAAM,OACf4C,EAASt6E,EAAE,KAGXO,EAAI,GACJG,EAAI,IAGP,UAAY,CACT,SAAS89E,EAAQt/E,EAAG,CAEhB,QADIu/E,EAAQxH,EAAK,KAAK/3E,CAAC,EACdw/E,EAAS,EAAGA,GAAUD,EAAOC,IAClC,GAAI,EAAEx/E,EAAIw/E,GACN,MAAO,GAIf,MAAO,EACpB,CAES,SAASC,EAAkBz/E,EAAG,CAC1B,OAASA,GAAKA,EAAI,IAAM,WAAe,CACpD,CAIS,QAFIA,EAAI,EACJ0/E,EAAS,EACNA,EAAS,IACRJ,EAAQt/E,CAAC,IACL0/E,EAAS,IACTr+E,EAAEq+E,CAAM,EAAID,EAAkB1H,EAAK,IAAI/3E,EAAG,EAAI,CAAC,CAAC,GAEpDwB,EAAEk+E,CAAM,EAAID,EAAkB1H,EAAK,IAAI/3E,EAAG,EAAI,CAAC,CAAC,EAEhD0/E,KAGJ1/E,GAEb,GAAM,EAGD,IAAI4C,EAAI,GAKJ+8E,EAASvE,EAAO,OAASoC,EAAO,OAAO,CACvC,SAAU,UAAY,CAClB,KAAK,MAAQ,IAAI1E,EAAU,KAAKz3E,EAAE,MAAM,CAAC,CAAC,CACvD,EAES,gBAAiB,SAAUK,EAAG4oB,EAAQ,CAelC,QAbIjpB,EAAI,KAAK,MAAM,MAGfT,EAAIS,EAAE,CAAC,EACPJ,EAAII,EAAE,CAAC,EACPO,EAAIP,EAAE,CAAC,EACPM,EAAIN,EAAE,CAAC,EACPH,EAAIG,EAAE,CAAC,EACPW,EAAIX,EAAE,CAAC,EACPU,EAAIV,EAAE,CAAC,EACPS,EAAIT,EAAE,CAAC,EAGFizB,EAAI,EAAGA,EAAI,GAAIA,IAAK,CACzB,GAAIA,EAAI,GACJ1xB,EAAE0xB,CAAC,EAAI5yB,EAAE4oB,EAASgK,CAAC,EAAI,MACpB,CACH,IAAIsrD,EAAUh9E,EAAE0xB,EAAI,EAAE,EAClBurD,GAAYD,GAAW,GAAOA,IAAY,IAC9BA,GAAW,GAAOA,IAAY,IAC9BA,IAAY,EAExBE,EAAUl9E,EAAE0xB,EAAI,CAAC,EACjByrD,IAAYD,GAAW,GAAOA,IAAY,KAC9BA,GAAW,GAAOA,IAAY,IAC9BA,IAAY,GAE5Bl9E,EAAE0xB,CAAC,EAAIurD,EAASj9E,EAAE0xB,EAAI,CAAC,EAAIyrD,GAASn9E,EAAE0xB,EAAI,EAAE,CACjE,CAEiB,IAAI7Z,EAAOvZ,EAAIc,EAAM,CAACd,EAAIa,EACtBi+E,EAAOp/E,EAAIK,EAAML,EAAIgB,EAAMX,EAAIW,EAE/Bq+E,IAAWr/E,GAAK,GAAOA,IAAM,IAAQA,GAAK,GAAOA,IAAM,KAASA,GAAK,GAAOA,IAAM,IAClFs/E,IAAWh/E,GAAK,GAAOA,IAAM,IAAQA,GAAK,GAAOA,IAAM,KAASA,GAAK,EAAOA,IAAM,IAElFi/E,GAAKr+E,EAAIo+E,GAASzlE,EAAKjZ,EAAE8yB,CAAC,EAAI1xB,EAAE0xB,CAAC,EACjC8rD,EAAKH,GAASD,EAElBl+E,EAAIC,EACJA,EAAIC,EACJA,EAAId,EACJA,EAAKS,EAAIw+E,GAAM,EACfx+E,EAAIC,EACJA,EAAIX,EACJA,EAAIL,EACJA,EAAKu/E,GAAKC,EAAM,CACjC,CAGa/+E,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIT,EAAK,EACpBS,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIJ,EAAK,EACpBI,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIO,EAAK,EACpBP,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIM,EAAK,EACpBN,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIH,EAAK,EACpBG,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIW,EAAK,EACpBX,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIU,EAAK,EACpBV,EAAE,CAAC,EAAKA,EAAE,CAAC,EAAIS,EAAK,CACjC,EAES,YAAa,UAAY,CAErB,IAAIm1B,EAAO,KAAK,MACZyjD,EAAYzjD,EAAK,MAEjB+nD,EAAa,KAAK,YAAc,EAChCC,EAAYhoD,EAAK,SAAW,EAGhC,OAAAyjD,EAAUuE,IAAc,CAAC,GAAK,KAAS,GAAKA,EAAY,GACxDvE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAIlH,EAAK,MAAMiH,EAAa,UAAW,EACrFtE,GAAauE,EAAY,KAAQ,GAAM,GAAK,EAAE,EAAID,EAClD/nD,EAAK,SAAWyjD,EAAU,OAAS,EAGnC,KAAK,SAAQ,EAGN,KAAK,KACzB,EAES,MAAO,UAAY,CACf,IAAIhB,EAAQ8D,EAAO,MAAM,KAAK,IAAI,EAClC,OAAA9D,EAAM,MAAQ,KAAK,MAAM,MAAK,EAEvBA,CACpB,CACA,CAAM,EAgBD54E,EAAE,OAAS08E,EAAO,cAAcmC,CAAM,EAgBtC7+E,EAAE,WAAa08E,EAAO,kBAAkBmC,CAAM,CACnD,GAAG,IAAI,EAGC7H,EAAS,MAEjB,CAAC,wGCtMC,SAAUJ,EAAMC,EAAS0I,EAAO,CAGhCzI,EAAA,QAA2BD,EAAQ30E,GAAA,EAAmBO,IAAmB,CAU3E,GAAEs0E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACVg4E,EAAYN,EAAM,UAClB4C,EAASt6E,EAAE,KACX6+E,EAASvE,EAAO,OAKhBkF,EAASlF,EAAO,OAASuE,EAAO,OAAO,CACvC,SAAU,UAAY,CAClB,KAAK,MAAQ,IAAI7G,EAAU,KAAK,CAC5B,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACrD,CAAc,CACd,EAES,YAAa,UAAY,CACrB,IAAIpyC,EAAOi5C,EAAO,YAAY,KAAK,IAAI,EAEvC,OAAAj5C,EAAK,UAAY,EAEVA,CACpB,CACA,CAAM,EAgBD5lC,EAAE,OAAS6+E,EAAO,cAAcW,CAAM,EAgBtCx/E,EAAE,WAAa6+E,EAAO,kBAAkBW,CAAM,CACnD,GAAE,EAGMxI,EAAS,MAEjB,CAAC,wGC/EC,SAAUJ,EAAMC,EAAS0I,EAAO,CAGhCzI,EAAA,QAA2BD,EAAQ30E,GAAA,EAAmBO,IAAqB,CAU7E,GAAEs0E,GAAM,SAAUC,EAAU,CAE3B,OAAC,UAAY,CAET,IAAIh3E,EAAIg3E,EACJU,EAAQ13E,EAAE,IACV08E,EAAShF,EAAM,OACf8C,EAAQx6E,EAAE,IACVy/E,EAAUjF,EAAM,KAChBkF,EAAelF,EAAM,UACrBF,EAASt6E,EAAE,KAEf,SAAS2/E,GAAiB,CACtB,OAAOF,EAAQ,OAAO,MAAMA,EAAS,SAAS,CACvD,CAGK,IAAI/+E,EAAI,CACJi/E,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,SAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,SAAU,EAC7EA,EAAe,WAAY,UAAU,EAAGA,EAAe,WAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,UAAU,EAC7EA,EAAe,UAAY,UAAU,EAAGA,EAAe,UAAY,SAAU,EAC7EA,EAAe,UA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,IACV,OAAS,SACT,QAAU,SACV,QAAU,EACV,QAAU,SACV,QAAU,SACV,QAAU,MACV,QAAU,MACV,QAAU,IACV,QAAU,EACV,QAAU,IACV,SAAU,SACV,SAAU,MACV,SAAU,MACV,SAAU,SACV,SAAU,SACV,SAAU,SACV,SAAW,SACX,SAAW,MACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,MACX,SAAW,SACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,EACX,SAAW,MACX,SAAW,SACX,SAAW,IACX,SAAW,SACX,SAAW,MACX,SAAW,SACX,SAAW,MACX,SAAW,SACX,SAAW,SACX,SAAW,SACX,SAAW,EACX,SAAW,OAEf,CACI,EAAK,WACL,MAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,EACT,OAAS,QACT,OAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,QACT,OAAS,GACT,OAAS,WACT,OAAS,WACT,OAAS,KACT,OAAS,KACT,OAAS,WACT,MAAQ,WACR,MAAS,GACT,OAAS,WACT,OAAS,WACT,OAAS,QACT,OAAS,WACT,OAAS,EACT,OAAS,WACT,OAAS,KACT,OAAS,WACT,OAAS,QACT,OAAS,KACT,OAAS,WACT,OAAS,QACT,OAAS,QACT,QAAS,WACT,QAAU,QACV,QAAU,QACV,QAAU,WACV,QAAU,EACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,WACV,QAAU,QACV,QAAU,WACV,QAAU,QACV,QAAU,GACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,EACV,QAAU,QACV,QAAU,QACV,QAAU,WACV,QAAU,WACV,QAAU,GACV,QAAU,WACV,QAAU,KACV,QAAU,WACV,QAAU,WACV,QAAU,KACV,QAAU,WACV,QAAU,QACV,QAAU,SAEd,CACI,EAAK,IACL,KAAQ,SACR,KAAQ,OACR,MAAQ,UACR,MAAQ,UACR,MAAQ,SACR,MAAQ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C,UAAY,UAAY,WAAY,WACpC,UAAY,WAAY,SAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,UACpC,WAAY,UAAY,UAAY,UACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UAAU,EAClD,CAAI,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,WAAY,UAAY,WACpC,UAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,UAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,WAAY,SAAY,WAAY,SACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,WACpC,UAAY,WAAY,WAAY,UACpC,UAAY,SAAY,WAAY,WACpC,WAAY,UAAY,UAAY,WACpC,WAAY,WAAY,WAAY,UACpC,WAAY,WAAY,WAAY,WACpC,WAAY,WAAY,WAAY,WACpC,UAAY,WAAY,UA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","names":["l","n","p","q","r","t","u","v","w","x","y","z","A","a","B","C","D","E","b","e","F","G","H","I","J","K","L","M","d","c","k","h","g","f","m","N","O","escape","P","Q","R","S","T","U","V","W","X","react_production_min","reactModule","require$$0","reactJsxRuntime_production_min","jsxRuntimeModule","exports","schedulerModule","aa","ca","require$$1","da","ea","fa","ha","ia","ja","ka","la","ma","oa","pa","qa","ra","sa","ta","ua","va","wa","ya","za","Aa","Ba","Ca","Da","Ea","Fa","Ga","Ha","Ia","Ja","Ka","La","Ma","Na","Oa","Pa","Qa","Ra","Sa","Ta","Ua","Va","Wa","Xa","Ya","Za","ab","bb","cb","db","eb","fb","gb","hb","ib","jb","kb","lb","mb","nb","ob","pb","qb","rb","sb","tb","ub","vb","wb","xb","yb","zb","Ab","Bb","Cb","Db","Eb","Fb","Gb","Hb","Ib","Jb","Kb","Lb","Mb","Nb","Ob","Pb","Qb","Rb","Sb","Tb","Ub","Vb","Wb","Xb","Yb","Zb","$b","ac","bc","cc","dc","ec","fc","gc","hc","ic","jc","kc","lc","mc","oc","nc","pc","qc","rc","sc","tc","uc","vc","wc","xc","yc","zc","Ac","Bc","Cc","Dc","Ec","Fc","Gc","Hc","Ic","Jc","Kc","Lc","Mc","Nc","Oc","Pc","Qc","Rc","Sc","Tc","Uc","Vc","Wc","Xc","Yc","Zc","$c","ad","bd","cd","dd","ed","fd","gd","hd","id","jd","kd","ld","md","nd","od","pd","qd","rd","sd","td","ud","vd","wd","xd","yd","Ad","zd","Bd","Cd","Dd","Ed","Fd","Gd","Hd","Id","Jd","Kd","Ld","Md","Nd","Od","Pd","Qd","Rd","Sd","Td","Ud","Vd","Wd","Xd","Yd","Zd","$d","ae","be","ce","de","ee","fe","ge","he","ie","je","ke","le","me","ne","oe","pe","qe","re","se","te","ue","ve","we","xe","ye","ze","Ae","Be","Ce","De","Ee","Fe","Ge","He","Ie","Je","Ke","Le","Me","Ne","Oe","Pe","Qe","Re","Se","Te","Ue","Ve","We","Xe","Ye","Ze","$e","af","bf","cf","df","ef","ff","gf","hf","jf","kf","lf","mf","nf","of","pf","qf","rf","sf","tf","uf","vf","wf","na","xa","$a","ba","xf","yf","zf","Af","Bf","Cf","Df","Ef","Ff","Gf","Hf","Jf","If","Kf","Lf","Mf","Nf","Of","Pf","Qf","Rf","Sf","Tf","Uf","Vf","Wf","Xf","Yf","Zf","$f","ag","bg","cg","dg","eg","fg","gg","hg","ig","jg","kg","lg","mg","ng","og","pg","qg","rg","sg","tg","ug","vg","wg","xg","yg","zg","Ag","Bg","Cg","Dg","Eg","Fg","Gg","Hg","Ig","Jg","Kg","Lg","Mg","Ng","Og","Pg","Qg","Rg","Sg","Tg","Ug","Vg","Wg","Xg","Yg","Zg","$g","ah","bh","ch","dh","eh","fh","gh","hh","ih","jh","kh","lh","mh","nh","oh","ph","qh","rh","sh","th","uh","vh","wh","xh","yh","zh","Ah","Bh","Ch","Dh","Eh","Fh","Gh","Hh","Ih","Jh","Kh","Lh","Mh","Nh","Oh","Ph","Qh","Rh","Sh","Th","Uh","Vh","Wh","Xh","Yh","Zh","$h","ai","bi","ci","di","ei","fi","gi","hi","ii","ji","ki","li","mi","ni","oi","pi","qi","ri","si","ti","ui","vi","wi","xi","yi","zi","Ai","Bi","Ci","Di","Ei","Fi","Gi","Hi","Ii","Ji","Ki","Li","Mi","Ni","Oi","Pi","Qi","Ri","Si","Ti","Ui","Vi","Wi","Xi","Yi","Zi","$i","aj","bj","cj","dj","ej","fj","gj","hj","ij","jj","kj","lj","mj","nj","oj","pj","qj","rj","sj","tj","uj","vj","wj","xj","yj","zj","Aj","Bj","Cj","Dj","Ej","Fj","Gj","Hj","Ij","Jj","Kj","Lj","Mj","Nj","Oj","Pj","Qj","Rj","Sj","Tj","Uj","Vj","Wj","Xj","Yj","Zj","ak","bk","ck","dk","ek","fk","gk","hk","ik","jk","kk","lk","mk","nk","ok","Y","Z","pk","qk","rk","sk","tk","uk","vk","wk","xk","yk","zk","Ak","Bk","Ck","Dk","Ek","Fk","Gk","Hk","Ik","Jk","Kk","Lk","Mk","Nk","Ok","Pk","Qk","Rk","Sk","Tk","Uk","Vk","Wk","Xk","Yk","Zk","$k","al","bl","cl","dl","el","fl","gl","hl","il","jl","kl","ll","ml","nl","ol","pl","ql","rl","sl","tl","ul","vl","reactDom_production_min","checkDCE","err","reactDomModule","client","API_BASE","UNREAD_FETCH_LIMIT","fetchJson","url","options","res","errorText","errorMessage","errorJson","isAbortError","api","config","privateKey","flood","limit","offset","publicKey","name","tryHistorical","password","command","key","params","signal","searchParams","query","conversations","limitPerConversation","destination","text","channelKey","pruneUndecryptedDays","settings","type","stateKey","timestamp","request","useWebSocket","wsRef","useRef","reconnectTimeoutRef","connected","setConnected","useState","optionsRef","useEffect","connect","useCallback","protocol","wsUrl","ws","error","event","msg","handlers","_a","_b","_c","_d","_e","_f","ackData","_g","_h","_i","pingInterval","CONTACT_TYPE_REPEATER","AIRTIME_POLL_INTERVAL_MS","formatAirtimeDuration","seconds","hours","mins","secs","getTxDutyCycleEmoji","pct","formatAirtimeStats","baseline","current","wallDuration","deltaUptime","deltaTxAirtime","deltaRxAirtime","deltaSentFlood","deltaSentDirect","deltaRecvFlood","deltaRecvDirect","txPct","rxPct","totalSent","totalRecv","txFloodPct","txDirectPct","rxFloodPct","rxDirectPct","txEmoji","idlePct","createLocalMessage","conversationKey","outgoing","now","useAirtimeTracking","setMessages","baselineRef","intervalRef","stopTracking","pollAirtimeStats","telemetry","lastError","attempt","resolve","statsMessage","prev","handleAirtimeCommand","conversationId","cmd","startMessage","stopMessage","notRunningMessage","formatDuration","days","formatTelemetry","formatNeighbors","neighbors","sorted","lines","snr","formatAcl","acl","entry","idOffset","useRepeaterMode","activeConversation","contacts","repeaterLoggedIn","setRepeaterLoggedIn","activeContactIsRepeater","useMemo","contact","handleTelemetryRequest","telemetryMessage","neighborsMessage","aclMessage","handleRepeaterCommand","commandMessage","response","responseMessage","LAST_MESSAGE_KEY","SORT_ORDER_KEY","lastMessageTimesCache","initLastMessageTimes","times","getLastMessageTimes","setLastMessageTime","getStateKey","loadLocalStorageLastMessageTimes","stored","loadLocalStorageSortOrder","clearLocalStorageConversationState","messageContainsMention","escaped","useUnreadCounts","channels","myName","unreadCounts","setUnreadCounts","mentions","setMentions","lastMessageTimes","setLastMessageTimes","myNameRef","fetchedChannels","fetchedContacts","newChannels","newContacts","bulkMessages","i","chunk","chunkResult","newUnreadCounts","newMentions","newLastMessageTimes","channel","msgs","lastRead","unreadMsgs","latestTime","next","incrementUnread","hasMention","markAllRead","markConversationRead","conv","trackNewMessage","updated","__insertCSS","code","head","style","getAsset","SuccessIcon","InfoIcon","WarningIcon","ErrorIcon","bars","Loader","visible","className","React","_","CloseIcon","useIsDocumentHidden","isDocumentHidden","setIsDocumentHidden","callback","toastsCounter","Observer","subscriber","index","data","_data_id","message","rest","alreadyExists","toast","dismissible","promise","shouldDismiss","result","originalPromise","isHttpResponse","promiseData","description","toastSettings","unwrap","reject","jsx","ToastState","toastFunction","basicToast","getHistory","getToasts","isAction","action","VISIBLE_TOASTS_AMOUNT","VIEWPORT_OFFSET","MOBILE_VIEWPORT_OFFSET","TOAST_LIFETIME","TOAST_WIDTH","GAP","SWIPE_THRESHOLD","TIME_BEFORE_UNMOUNT","cn","classes","getDefaultSwipeDirections","position","directions","Toast","props","_toast_classNames","_toast_classNames1","_toast_classNames2","_toast_classNames3","_toast_classNames4","_toast_classNames5","_toast_classNames6","_toast_classNames7","_toast_classNames8","ToasterInvert","unstyled","interacting","setHeights","visibleToasts","heights","toasts","expanded","removeToast","defaultRichColors","closeButtonFromToaster","cancelButtonStyle","actionButtonStyle","descriptionClassName","durationFromToaster","gap","expandByDefault","classNames","icons","closeButtonAriaLabel","swipeDirection","setSwipeDirection","swipeOutDirection","setSwipeOutDirection","mounted","setMounted","removed","setRemoved","swiping","setSwiping","swipeOut","setSwipeOut","isSwiped","setIsSwiped","offsetBeforeRemove","setOffsetBeforeRemove","initialHeight","setInitialHeight","remainingTime","dragStartTime","toastRef","isFront","isVisible","toastType","toastClassname","toastDescriptionClassname","heightIndex","height","closeButton","_toast_closeButton","duration","closeTimerStartTimeRef","lastCloseTimerStartTimeRef","pointerStartRef","toastsHeightBefore","curr","reducerIndex","invert","disabled","toastNode","originalHeight","newHeight","deleteToast","timeoutId","elapsedTime","getLoadingIcon","icon","_toast_richColors","_icons_close","_toastRef_current","_toastRef_current1","_dragStartTime_current","swipeAmountX","swipeAmountY","timeTaken","swipeAmount","velocity","_toastRef_current2","_toastRef_current3","_window_getSelection","yDelta","xDelta","_props_swipeDirections","swipeDirections","getDampening","delta","dampenedDelta","getDocumentDirection","dirAttribute","assignOffset","defaultOffset","mobileOffset","styles","isMobile","prefix","defaultValue","assignAll","Toaster","ref","hotkey","expand","theme","richColors","toastOptions","dir","containerAriaLabel","setToasts","filteredToasts","possiblePositions","setExpanded","setInteracting","actualTheme","setActualTheme","listRef","hotkeyLabel","lastFocusedElementRef","isFocusWithinRef","toastToRemove","_toasts_find","ReactDOM","indexOfExistingToast","darkMediaQuery","matches","handleKeyDown","_listRef_current","_listRef_current1","_heights_","_toastOptions_duration","_toastOptions_closeButton","Sonner","MESSAGE_PAGE_SIZE","getMessageContentKey","useConversationMessages","messages","messagesLoading","setMessagesLoading","loadingOlder","setLoadingOlder","hasOlderMessages","setHasOlderMessages","seenMessageContent","abortControllerRef","fetchingConversationIdRef","fetchMessages","showLoading","fetchOlderMessages","controller","addMessageIfNew","contentKey","entries","updateMessageAck","messageId","ackCount","paths","idx","toKebabCase","string","toCamelCase","match","p1","p2","toPascalCase","camelCase","mergeClasses","array","hasA11yProp","prop","defaultAttributes","Icon","forwardRef","color","size","strokeWidth","absoluteStrokeWidth","children","iconNode","createElement","tag","attrs","createLucideIcon","iconName","Component","__iconNode","Check","Menu","StatusBar","health","onSettingsClick","onMenuClick","reconnecting","setReconnecting","handleReconnect","jsxs","PUBKEY_PREFIX_LENGTH","getPubkeyPrefix","getContactDisplayName","pubkey","REPEATER_AVATAR","hashString","str","hash","char","emojiRegex","getAvatarText","emojiMatch","letters","spaceIndex","firstLetter","afterSpace","getAvatarColor","hue","saturation","lightness","background","textColor","getContactAvatar","contactType","colors","ContactAvatar","avatar","FAVORITES_KEY","isFavorite","favorites","loadLocalStorageFavorites","clearLocalStorageFavorites","o","clsx","concatArrays","array1","array2","combinedArray","createClassValidatorObject","classGroupId","validator","createClassPartObject","nextPart","validators","CLASS_PART_SEPARATOR","EMPTY_CONFLICTS","ARBITRARY_PROPERTY_PREFIX","createClassGroupUtils","classMap","createClassMap","conflictingClassGroups","conflictingClassGroupModifiers","getGroupIdForArbitraryProperty","classParts","startIndex","getGroupRecursive","hasPostfixModifier","modifierConflicts","baseConflicts","classPartObject","currentClassPart","nextClassPartObject","classRest","validatorsLength","validatorObj","content","colonIndex","property","classGroups","processClassGroups","group","processClassesRecursively","classGroup","len","classDefinition","processClassDefinition","processStringDefinition","processFunctionDefinition","processObjectDefinition","classPartObjectToEdit","getPart","isThemeGetter","value","path","parts","part","func","createLruCache","maxCacheSize","cacheSize","cache","previousCache","update","IMPORTANT_MODIFIER","MODIFIER_SEPARATOR","EMPTY_MODIFIERS","createResultObject","modifiers","hasImportantModifier","baseClassName","maybePostfixModifierPosition","isExternal","createParseClassName","experimentalParseClassName","parseClassName","bracketDepth","parenDepth","modifierStart","postfixModifierPosition","currentCharacter","baseClassNameWithImportantModifier","fullPrefix","parseClassNameOriginal","createSortModifiers","modifierWeights","mod","currentSegment","modifier","isArbitrary","isOrderSensitive","createConfigUtils","SPLIT_CLASSES_REGEX","mergeClassList","classList","configUtils","getClassGroupId","getConflictingClassGroupIds","sortModifiers","classGroupsInConflict","originalClassName","variantModifier","modifierId","classId","conflictGroups","twJoin","classLists","argument","resolvedValue","toValue","mix","createTailwindMerge","createConfigFirst","createConfigRest","cacheGet","cacheSet","functionToCall","initTailwindMerge","previousConfig","createConfigCurrent","tailwindMerge","cachedResult","args","fallbackThemeArr","fromTheme","themeGetter","arbitraryValueRegex","arbitraryVariableRegex","fractionRegex","tshirtUnitRegex","lengthUnitRegex","colorFunctionRegex","shadowRegex","imageRegex","isFraction","isNumber","isInteger","isPercent","isTshirtSize","isAny","isLengthOnly","isNever","isShadow","isImage","isAnyNonArbitrary","isArbitraryValue","isArbitraryVariable","isArbitrarySize","getIsArbitraryValue","isLabelSize","isArbitraryLength","isLabelLength","isArbitraryNumber","isLabelNumber","isArbitraryPosition","isLabelPosition","isArbitraryImage","isLabelImage","isArbitraryShadow","isLabelShadow","isArbitraryVariableLength","getIsArbitraryVariable","isArbitraryVariableFamilyName","isLabelFamilyName","isArbitraryVariablePosition","isArbitraryVariableSize","isArbitraryVariableImage","isArbitraryVariableShadow","testLabel","testValue","shouldMatchNoLabel","label","getDefaultConfig","themeColor","themeFont","themeText","themeFontWeight","themeTracking","themeLeading","themeBreakpoint","themeContainer","themeSpacing","themeRadius","themeShadow","themeInsetShadow","themeTextShadow","themeDropShadow","themeBlur","themePerspective","themeAspect","themeEase","themeAnimate","scaleBreak","scalePosition","scalePositionWithArbitrary","scaleOverflow","scaleOverscroll","scaleUnambiguousSpacing","scaleInset","scaleGridTemplateColsRows","scaleGridColRowStartAndEnd","scaleGridColRowStartOrEnd","scaleGridAutoColsRows","scaleAlignPrimaryAxis","scaleAlignSecondaryAxis","scaleMargin","scaleSizing","scaleColor","scaleBgPosition","scaleBgRepeat","scaleBgSize","scaleGradientStopPosition","scaleRadius","scaleBorderWidth","scaleLineStyle","scaleBlendMode","scaleMaskImagePosition","scaleBlur","scaleRotate","scaleScale","scaleSkew","scaleTranslate","twMerge","inputs","Input","React.forwardRef","setRef","composeRefs","refs","node","hasCleanup","cleanups","cleanup","useComposedRefs","React.useCallback","REACT_LAZY_TYPE","use","isPromiseLike","isLazyComponent","element","createSlot","ownerName","SlotClone","createSlotClone","Slot2","forwardedRef","slotProps","childrenArray","React.Children","slottable","isSlottable","newElement","newChildren","child","React.isValidElement","React.cloneElement","Slot","childrenRef","getElementRef","props2","mergeProps","React.Fragment","SLOTTABLE_IDENTIFIER","childProps","overrideProps","propName","slotPropValue","childPropValue","getter","mayWarn","falsyToString","cx","cva","base","_config_compoundVariants","variants","defaultVariants","getVariantClassNames","variant","variantProp","defaultVariantProp","variantKey","propsWithoutUndefined","acc","param","getCompoundVariantClassNames","cvClass","cvClassName","compoundVariantOptions","buttonVariants","Button","asChild","Comp","formatUnreadCount","count","Sidebar","onSelectConversation","onNewMessage","showCracker","crackerRunning","onToggleCracker","onMarkAllRead","sortOrderProp","onSortOrderChange","sortOrder","searchQuery","setSearchQuery","handleSortToggle","newOrder","handleSelectConversation","conversation","isActive","getUnreadCount","getLastMessageTime","uniqueChannels","uniqueContacts","sortedChannels","timeA","timeB","sortedContacts","aIsRepeater","bIsRepeater","filteredChannels","filteredContacts","favoriteChannels","favoriteContacts","nonFavoriteChannels","nonFavoriteContacts","favoriteItems","nameA","nameB","Fragment","item","unreadCount","isMention","parseSenderFromText","potentialSender","formatTime","date","isToday","time","parsePathHops","normalized","hops","findContactsByPrefix","repeatersOnly","normalizedPrefix","calculateDistance","lat1","lon1","lat2","lon2","dLat","toRad","dLon","deg","isValidLocation","lat","lon","formatDistance","km","sortContactsByDistance","fromLat","fromLon","distA","distB","getHopCount","formatHopCounts","hopCounts","allDirect","hasMultiple","resolvePath","sender","hopPrefixes","senderPrefix","resolvedSender","receiverPrefix","resolvedReceiver","prevLat","prevLon","prevHopUncertain","sortedMatches","distanceFromPrev","currentHasValidLocation","totalDistances","calculateTotalDistances","hasGaps","hop","receiver","dist","startHopIndex","totalDistance","hasAnyDistance","lastUnambiguousHopIndex","finalDist","composeEventHandlers","originalEventHandler","ourEventHandler","checkForDefaultPrevented","createContext2","rootComponentName","defaultContext","Context","React.createContext","Provider","context","React.useMemo","useContext2","consumerName","React.useContext","createContextScope","scopeName","createContextScopeDeps","defaultContexts","createContext3","BaseContext","scope","createScope","scopeContexts","contexts","composeContextScopes","scopes","baseScope","scopeHooks","createScope2","overrideScopes","nextScopes","nextScopes2","useScope","currentScope","useLayoutEffect2","React.useLayoutEffect","useReactId","useId","deterministicId","setId","React.useState","useLayoutEffect","reactId","useInsertionEffect","useControllableState","defaultProp","onChange","caller","uncontrolledProp","setUncontrolledProp","onChangeRef","useUncontrolledState","isControlled","isControlledRef","React.useRef","React.useEffect","wasControlled","setValue","nextValue","value2","isFunction","prevValueRef","NODES","Primitive","primitive","Node","primitiveProps","dispatchDiscreteCustomEvent","target","ReactDOM.flushSync","useCallbackRef","callbackRef","useEscapeKeydown","onEscapeKeyDownProp","ownerDocument","onEscapeKeyDown","DISMISSABLE_LAYER_NAME","CONTEXT_UPDATE","POINTER_DOWN_OUTSIDE","FOCUS_OUTSIDE","originalBodyPointerEvents","DismissableLayerContext","DismissableLayer","disableOutsidePointerEvents","onPointerDownOutside","onFocusOutside","onInteractOutside","onDismiss","layerProps","setNode","force","composedRefs","node2","layers","highestLayerWithOutsidePointerEventsDisabled","highestLayerWithOutsidePointerEventsDisabledIndex","isBodyPointerEventsDisabled","isPointerEventsEnabled","pointerDownOutside","usePointerDownOutside","isPointerDownOnBranch","branch","focusOutside","useFocusOutside","dispatchUpdate","handleUpdate","BRANCH_NAME","DismissableLayerBranch","handlePointerDownOutside","isPointerInsideReactTreeRef","handleClickRef","handlePointerDown","handleAndDispatchPointerDownOutsideEvent2","handleAndDispatchCustomEvent","eventDetail","timerId","handleFocusOutside","isFocusInsideReactTreeRef","handleFocus","handler","detail","discrete","AUTOFOCUS_ON_MOUNT","AUTOFOCUS_ON_UNMOUNT","EVENT_OPTIONS","FOCUS_SCOPE_NAME","FocusScope","loop","trapped","onMountAutoFocusProp","onUnmountAutoFocusProp","scopeProps","container","setContainer","onMountAutoFocus","onUnmountAutoFocus","focusScope","handleFocusIn2","focus","handleFocusOut2","relatedTarget","handleMutations2","mutations","mutation","mutationObserver","focusScopesStack","previouslyFocusedElement","mountEvent","focusFirst","removeLinks","getTabbableCandidates","unmountEvent","isTabKey","focusedElement","container2","first","last","getTabbableEdges","candidates","select","candidate","findVisible","nodes","walker","isHiddenInput","elements","isHidden","upTo","isSelectableInput","createFocusScopesStack","stack","activeFocusScope","arrayRemove","updatedArray","items","PORTAL_NAME","Portal","containerProp","portalProps","useStateMachine","initialState","machine","React.useReducer","state","Presence","present","presence","usePresence","React2.Children","React2.cloneElement","React2.useState","stylesRef","React2.useRef","prevPresentRef","prevAnimationNameRef","send","React2.useEffect","currentAnimationName","getAnimationName","wasPresent","prevAnimationName","ownerWindow","handleAnimationEnd","isCurrentAnimation","currentFillMode","handleAnimationStart","React2.useCallback","useFocusGuards","edgeGuards","createFocusGuard","__assign","s","__rest","__spreadArray","to","from","pack","ar","zeroRightClassName","fullWidthClassName","noScrollbarsClassName","removedBarSizeVariable","assignRef","initialValue","useIsomorphicLayoutEffect","currentValues","useMergeRefs","newValue","oldValue","prevRefs_1","nextRefs_1","current_1","ItoI","innerCreateMedium","defaults","middleware","buffer","assigned","medium","cbs","pendingQueue","executeQueue","cycle","filter","createSidecarMedium","SideCar","sideCar","Target","React.createElement","exportSidecar","exported","effectCar","nothing","RemoveScroll","parentRef","callbacks","setCallbacks","forwardProps","removeScrollBar","enabled","shards","noRelative","noIsolation","inert","allowPinchZoom","Container","gapMode","containerRef","containerProps","getNonce","makeStyleTag","nonce","injectStyles","css","insertStyleTag","stylesheetSingleton","counter","stylesheet","styleHookSingleton","sheet","isDynamic","styleSingleton","useStyle","Sheet","dynamic","zeroGap","parse","getOffset","cs","left","top","right","getGapWidth","offsets","documentWidth","windowWidth","Style","lockAttribute","getStyles","allowRelative","important","getCurrentUseCounter","useLockAttribute","newCounter","RemoveScrollBar","noImportant","passiveSupported","nonPassive","alwaysContainsScroll","elementCanBeScrolled","overflow","elementCouldBeVScrolled","elementCouldBeHScrolled","locationCouldBeScrolled","axis","isScrollable","elementCouldBeScrolled","getScrollVariables","scrollHeight","clientHeight","getVScrollVariables","scrollTop","getHScrollVariables","scrollLeft","scrollWidth","clientWidth","getDirectionFactor","direction","handleScroll","endTarget","sourceDelta","noOverscroll","directionFactor","targetInLock","shouldCancelScroll","isDeltaPositive","availableScroll","availableScrollTop","scroll_1","capacity","elementScroll","parent_1","getTouchXY","getDeltaXY","extractRef","deltaCompare","generateStyle","idCounter","lockStack","RemoveScrollSideCar","shouldPreventQueue","touchStartRef","activeAxis","lastProps","allow_1","shouldCancelEvent","parent","touch","touchStart","deltaX","deltaY","currentAxis","moveDirection","selection","anchorNode","isTouchingSelection","canBeScrolledInMainDirection","cancelingAxis","shouldPrevent","_event","sourceEvent","shardNodes","shouldStop","shouldCancel","should","getOutermostShadowParent","scrollTouchStart","scrollWheel","scrollTouchMove","inst","shadowParent","ReactRemoveScroll","getDefaultParent","originalTarget","sampleTarget","counterMap","uncontrolledNodes","markerMap","lockCount","unwrapHost","correctTargets","targets","correctedTarget","applyAttributeToOthers","parentNode","markerName","controlAttribute","markerCounter","hiddenNodes","elementsToKeep","elementsToStop","keep","deep","attr","alreadyHidden","counterValue","markerValue","hideOthers","activeParentNode","DIALOG_NAME","createDialogContext","DialogProvider","useDialogContext","Dialog","__scopeDialog","openProp","defaultOpen","onOpenChange","modal","triggerRef","contentRef","open","setOpen","prevOpen","TRIGGER_NAME","DialogTrigger","triggerProps","composedTriggerRef","getState","PortalProvider","usePortalContext","DialogPortal","forceMount","PortalPrimitive","OVERLAY_NAME","DialogOverlay","portalContext","overlayProps","DialogOverlayImpl","CONTENT_NAME","DialogContent","contentProps","DialogContentModal","DialogContentNonModal","DialogContentImpl","originalEvent","ctrlLeftClick","hasInteractedOutsideRef","hasPointerDownOutsideRef","trapFocus","onOpenAutoFocus","onCloseAutoFocus","TitleWarning","DescriptionWarning","TITLE_NAME","DialogTitle","titleProps","DESCRIPTION_NAME","DialogDescription","descriptionProps","CLOSE_NAME","DialogClose","closeProps","TITLE_WARNING_NAME","WarningProvider","useWarningContext","createContext","titleId","titleWarningContext","MESSAGE","DESCRIPTION_WARNING_NAME","descriptionId","describedById","Root","Overlay","Content","Title","Description","Close","DialogPrimitive.Root","DialogPrimitive.Portal","DialogPrimitive.Overlay","DialogPrimitive.Content","DialogPrimitive.Close","DialogHeader","DialogFooter","DialogPrimitive.Title","DialogPrimitive.Description","parseHashConversation","focusKey","slashIndex","getMapFocusHash","publicKeyPrefix","getConversationHash","updateUrlHash","newHash","PathModal","onClose","senderInfo","resolvedPaths","hasSinglePath","isOpen","pathData","PathVisualization","resolved","hideStraightLine","getPrevLocation","hopIndex","prevHop","PathNode","HopNode","calculateReceiverDistance","distance","isFirst","isLast","hasLocation","CoordinateLink","hopNumber","prevLocation","isAmbiguous","isUnknown","getDistanceForContact","handleClick","lastHop","renderTextWithMentions","radioName","mentionPattern","lastIndex","keyIndex","mentionedName","isOwnMention","HopCountBadge","onClick","MessageList","loading","onSenderClick","onLoadOlder","prevMessagesLengthRef","isInitialLoadRef","showScrollToBottom","setShowScrollToBottom","selectedPath","setSelectedPath","scrollStateRef","list","messagesAdded","scrollHeightDiff","distanceFromBottom","scrollToBottom","getContact","getContactByName","getSenderInfo","parsedSender","senderContact","sortedMessages","getSenderKey","isRepeater","displaySender","canClickSender","currentSenderKey","prevMsg","prevSenderKey","showAvatar","isFirstMessage","avatarName","avatarKey","line","arr","DM_HARD_LIMIT","DM_WARNING_THRESHOLD","CHANNEL_HARD_LIMIT","CHANNEL_WARNING_THRESHOLD","CHANNEL_DANGER_BUFFER","MessageInput","onSend","placeholder","isRepeaterMode","conversationType","senderName","setText","sending","setSending","inputRef","useImperativeHandle","appendedText","limits","nameLen","hardLimit","limitState","warningMessage","remaining","handleSubmit","trimmed","canSubmit","showCharCounter","createCollection","PROVIDER_NAME","createCollectionContext","createCollectionScope","CollectionProviderImpl","useCollectionContext","CollectionProvider","itemMap","COLLECTION_SLOT_NAME","CollectionSlotImpl","CollectionSlot","ITEM_SLOT_NAME","ITEM_DATA_ATTR","CollectionItemSlotImpl","CollectionItemSlot","itemData","useCollection","collectionNode","orderedNodes","DirectionContext","useDirection","localDir","globalDir","ENTRY_FOCUS","GROUP_NAME","Collection","createRovingFocusGroupContext","createRovingFocusGroupScope","RovingFocusProvider","useRovingFocusContext","RovingFocusGroup","RovingFocusGroupImpl","__scopeRovingFocusGroup","orientation","currentTabStopIdProp","defaultCurrentTabStopId","onCurrentTabStopIdChange","onEntryFocus","preventScrollOnEntryFocus","groupProps","currentTabStopId","setCurrentTabStopId","isTabbingBackOut","setIsTabbingBackOut","handleEntryFocus","getItems","isClickFocusRef","focusableItemsCount","setFocusableItemsCount","tabStopId","prevCount","isKeyboardFocus","entryFocusEvent","activeItem","currentItem","candidateNodes","ITEM_NAME","RovingFocusGroupItem","focusable","active","itemProps","autoId","isCurrentTabStop","onFocusableItemAdd","onFocusableItemRemove","focusIntent","getFocusIntent","currentIndex","wrapArray","MAP_KEY_TO_FOCUS_INTENT","getDirectionAwareKey","preventScroll","PREVIOUSLY_FOCUSED_ELEMENT","Item","TABS_NAME","createTabsContext","useRovingFocusGroupScope","TabsProvider","useTabsContext","Tabs","__scopeTabs","valueProp","onValueChange","activationMode","tabsProps","TAB_LIST_NAME","TabsList","listProps","rovingFocusGroupScope","RovingFocusGroup.Root","TabsTrigger","triggerId","makeTriggerId","contentId","makeContentId","isSelected","RovingFocusGroup.Item","isAutomaticActivation","TabsContent","isMountAnimationPreventedRef","rAF","baseId","Root2","List","Trigger","TabsPrimitive.Root","TabsPrimitive.List","TabsPrimitive.Trigger","TabsPrimitive.Content","NAME","Label","labelVariants","LabelPrimitive.Root","usePrevious","useSize","setSize","resizeObserver","width","borderSizeEntry","borderSize","CHECKBOX_NAME","createCheckboxContext","CheckboxProviderImpl","useCheckboxContext","CheckboxProvider","__scopeCheckbox","checkedProp","defaultChecked","form","onCheckedChange","required","internal_do_not_use_render","checked","setChecked","control","setControl","bubbleInput","setBubbleInput","hasConsumerStoppedPropagationRef","isFormControl","isIndeterminate","CheckboxTrigger","onKeyDown","checkboxProps","initialCheckedStateRef","reset","prevChecked","Checkbox","CheckboxBubbleInput","INDICATOR_NAME","CheckboxIndicator","indicatorProps","BUBBLE_INPUT_NAME","controlSize","input","inputProto","bubbles","defaultCheckedRef","CheckboxPrimitive.Root","CheckboxPrimitive.Indicator","NewMessageModal","undecryptedCount","onCreateContact","onCreateChannel","onCreateHashtagChannel","tab","setTab","setName","contactKey","setContactKey","roomKey","setRoomKey","setTryHistorical","permitCapitals","setPermitCapitals","setError","setLoading","hashtagInputRef","handleCreate","channelName","validationError","validateHashtagName","normalizedName","handleCreateAndAddAnother","showHistoricalOption","bytes","hex","DEFAULT_ORIENTATION","ORIENTATIONS","Separator","decorative","orientationProp","domProps","isValidOrientation","semanticProps","SeparatorPrimitive.Root","RADIO_PRESETS","SettingsModal","appSettings","onSave","onSaveAppSettings","onSetPrivateKey","onReboot","onAdvertise","onHealthRefresh","onRefreshAppSettings","activeTab","setActiveTab","setLat","setLon","txPower","setTxPower","freq","setFreq","bw","setBw","setSf","cr","setCr","setPrivateKey","maxRadioContacts","setMaxRadioContacts","rebooting","setRebooting","advertising","setAdvertising","gettingLocation","setGettingLocation","retentionDays","setRetentionDays","cleaning","setCleaning","autoDecryptOnAdvert","setAutoDecryptOnAdvert","currentPreset","freqNum","bwNum","sfNum","crNum","preset","handlePresetChange","presetName","handleGetLocation","handleSaveRadioConfig","handleSaveIdentity","handleSaveSerial","newMaxRadioContacts","handleSetPrivateKey","handleReboot","handleAdvertise","handleCleanup","handleSaveDatabaseSettings","enums","RouteType","PayloadType","ControlSubType","PayloadVersion","DeviceRole","AdvertFlags","RequestType","byteToHex","bytesToHex","numberToHex","hexToBytes","byte","num","padLength","cleanHex","enumNames","getRouteTypeName","getPayloadTypeName","getPayloadVersionName","getDeviceRoleName","getRequestTypeName","getControlSubTypeName","enums_1","routeType","payloadType","version","role","requestType","subType","__viteBrowserExternal","root","factory","module","this","CryptoJS","Math","undefined","crypto","global","require","cryptoSecureRandomInt","create","obj","subtype","C_lib","Base","overrides","instance","properties","propertyName","WordArray","words","sigBytes","encoder","Hex","wordArray","thisWords","thatWords","thisSigBytes","thatSigBytes","thatByte","j","clone","nBytes","C_enc","hexChars","bite","hexStr","hexStrLength","Latin1","latin1Chars","latin1Str","latin1StrLength","Utf8","utf8Str","BufferedBlockAlgorithm","doFlush","processedWords","dataWords","dataSigBytes","blockSize","blockSizeBytes","nBlocksReady","nWordsReady","nBytesReady","cfg","messageUpdate","hasher","C_algo","X32WordArray","C_x64","high","low","x64Words","x64WordsLength","x32Words","x64Word","wordsLength","superInit","subInit","typedArray","typedArrayByteLength","utf16Chars","codePoint","utf16Str","utf16StrLength","swapEndian","word","map","base64Chars","byte1","byte2","byte3","triplet","paddingChar","base64Str","base64StrLength","reverseMap","paddingIndex","parseLoop","bits1","bits2","bitsCombined","urlSafe","Hasher","MD5","offset_i","M_offset_i","M_offset_0","M_offset_1","M_offset_2","M_offset_3","M_offset_4","M_offset_5","M_offset_6","M_offset_7","M_offset_8","M_offset_9","M_offset_10","M_offset_11","M_offset_12","M_offset_13","M_offset_14","M_offset_15","FF","GG","HH","II","nBitsTotal","nBitsLeft","nBitsTotalH","nBitsTotalL","H_i","SHA1","isPrime","sqrtN","factor","getFractionalBits","nPrime","SHA256","gamma0x","gamma0","gamma1x","gamma1","maj","sigma0","sigma1","t1","t2","undef","SHA224","X64Word","X64WordArray","X64Word_create","SHA512","H0","H1","H2","H3","H4","H5","H6","H7","H0h","H0l","H1h","H1l","H2h","H2l","H3h","H3l","H4h","H4l","H5h","H5l","H6h","H6l","H7h","H7l","Wil","Wih","gamma0xh","gamma0xl","gamma0h","gamma0l","gamma1xh","gamma1xl","gamma1h","gamma1l","Wi7","Wi7h","Wi7l","Wi16","Wi16h","Wi16l","chh","chl","majh","majl","sigma0h","sigma0l","sigma1h","sigma1l","Kih","Kil","t1l","t1h","t2l","t2h","require$$2","SHA384","RHO_OFFSETS","PI_INDEXES","ROUND_CONSTANTS","newX","newY","LFSR","roundConstantMsw","roundConstantLsw","bitPosition","SHA3","nBlockSizeLanes","M2i","M2i1","lane","round","tMsw","tLsw","Tx","Tx4","Tx1","Tx1Msw","Tx1Lsw","laneIndex","laneMsw","laneLsw","rhoOffset","TPiLane","T0","state0","TLane","Tx1Lane","Tx2Lane","roundConstant","blockSizeBits","outputLengthBytes","outputLengthLanes","hashWords","_zl","_zr","_sl","_sr","_hl","_hr","RIPEMD160","hr","zl","zr","sr","br","dr","er","f1","f2","f3","f4","f5","rotl","hasherBlockSize","hasherBlockSizeBytes","oKey","iKey","oKeyWords","iKeyWords","innerHash","hmac","HMAC","PBKDF2","salt","derivedKey","blockIndex","derivedKeyWords","blockIndexWords","keySize","iterations","block","blockWords","blockWordsLength","intermediate","intermediateWords","EvpKDF","Base64","Cipher","xformMode","dataUpdate","finalProcessedData","selectCipherStrategy","PasswordBasedCipher","SerializableCipher","cipher","ciphertext","finalProcessedBlocks","C_mode","BlockCipherMode","iv","CBC","xorBlock","thisBlock","C_pad","Pkcs7","nPaddingBytes","paddingWord","paddingWords","padding","modeCreator","mode","CipherParams","cipherParams","formatter","C_format","OpenSSLFormatter","openSSLStr","ciphertextWords","encryptor","cipherCfg","plaintext","format","C_kdf","OpenSSLKdf","ivSize","derivedParams","CFB","generateKeystreamAndEncrypt","keystream","CTR","Encryptor","CTRGladman","incWord","b1","b2","b3","incCounter","OFB","ECB","lastBytePos","require$$3","require$$4","BlockCipher","SBOX","INV_SBOX","SUB_MIX_0","SUB_MIX_1","SUB_MIX_2","SUB_MIX_3","INV_SUB_MIX_0","INV_SUB_MIX_1","INV_SUB_MIX_2","INV_SUB_MIX_3","sx","x2","x4","x8","RCON","AES","keyWords","nRounds","ksRows","keySchedule","ksRow","invKeySchedule","invKsRow","s0","s1","s2","s3","t0","t3","PC1","PC2","BIT_SHIFTS","SBOX_P","SBOX_MASK","DES","keyBits","keyBitPos","subKeys","nSubKey","subKey","bitShift","invSubKeys","exchangeLR","exchangeRL","lBlock","rBlock","mask","TripleDES","key1","key2","key3","StreamCipher","RC4","keySigBytes","keyByteIndex","keyByte","generateKeystreamWord","keystreamWord","RC4Drop","C_","Rabbit","nextState","IV","IV_0","IV_1","i0","i2","i1","i3","gx","ga","RabbitLegacy","ORIG_P","ORIG_S","BLOWFISH_CTX","ctx","BlowFish_Encrypt","Xl","Xr","temp","BlowFish_Decrypt","BlowFishInit","keysize","Row","Col","Data1","Data2","Blowfish","require$$5","require$$6","require$$7","require$$8","require$$9","require$$10","require$$11","require$$12","require$$13","require$$14","require$$15","require$$16","require$$17","require$$18","require$$19","require$$20","require$$21","require$$22","require$$23","require$$24","require$$25","require$$26","require$$27","require$$28","require$$29","require$$30","require$$31","require$$32","require$$33","require$$34","channelCrypto","crypto_js_1","hex_1","ChannelCrypto","cipherMac","channelKey16","macBytes","channelSecret","calculatedMac","calculatedMacFirst2","decrypted","decryptedBytes","flagsAndAttempt","messageBytes","messageText","nullIndex","secretKeyHex","keyManager","channel_crypto_1","MeshCoreKeyStore","initialKeys","pubKey","privKey","normalizedPubKey","channelHash","normalizedHash","secretKeys","secretKey","ed25519_CURVE","Gx","Gy","L2","isBig","isStr","isBytes","abytes","u8n","u8fr","buf","padh","pad","_ch","n1","n2","toU8","subtle","concatBytes","arrs","sum","randomBytes","big","arange","min","max","modN","callHash","fn","etc","apoint","Point","B256","_Point","ex","ey","ez","et","__publicField","zip215","normed","lastByte","bytesToNumLE","y2","isValid","uvRatio","isXOdd","isLastByteOdd","X2","Y2","Z2","Z4","aX2","XY","ZT","other","X1","Y1","Z1","X1Z2","X2Z1","Y1Z2","Y2Z1","x1y1","X3","Y3","T3","Z3","T1","T2","safe","wNAF","iz","numTo32bLE","pow2","power","pow_2_252_3","b4","b5","b10","b20","b40","b80","b160","b240","b250","RM1","v3","v7","pow","vx2","root1","root2","useRoot1","useRoot2","noRoot","modL_LE","sha512a","sha512s","hash2extK","hashed","scalar","point","pointBytes","getExtendedPublicKeyAsync","priv","getExtendedPublicKey","getPublicKeyAsync","getPublicKey","hashFinishA","hashFinishS","_sign","rBytes","signAsync","sign","veriOpts","_verify","sig","pub","opts","SB","hashable","verifyAsync","verify","utils","scalarBits","pwindows","pwindowSize","precompute","points","Gpows","ctneg","cnd","comp","pow_2_w","maxNum","shiftBy","wbits","off","offF","offP","isEven","isNeg","OrlpEd25519","_scriptName","moduleArg","moduleRtn","Module","ENVIRONMENT_IS_WEB","ENVIRONMENT_IS_WORKER","ENVIRONMENT_IS_NODE","scriptDirectory","locateFile","readAsync","readBinary","fs","filename","isFileURI","ret","binary","xhr","wasmBinary","ABORT","readyPromiseResolve","readyPromiseReject","wasmMemory","HEAP8","HEAPU8","runtimeInitialized","updateMemoryViews","preRun","addOnPreRun","callRuntimeCallbacks","onPreRuns","initRuntime","wasmExports","postRun","addOnPostRun","onPostRuns","runDependencies","dependenciesFulfilled","addRunDependency","removeRunDependency","abort","what","wasmBinaryFile","findWasmBinary","getBinarySync","file","getWasmBinary","binaryFile","instantiateArrayBuffer","imports","reason","instantiateAsync","instantiationResult","getWasmImports","wasmImports","createWasm","receiveInstance","assignWasmExports","receiveInstantiationResult","info","stackRestore","val","__emscripten_stack_restore","stackSave","_emscripten_stack_get_current","getCFunc","ident","writeArrayToMemory","lengthBytesUTF8","stringToUTF8Array","heap","outIdx","maxBytesToWrite","startIdx","endIdx","stringToUTF8","outPtr","stackAlloc","sz","__emscripten_stack_alloc","stringToUTF8OnStack","UTF8Decoder","UTF8ArrayToString","heapOrArray","maxBytesToRead","endPtr","u0","u1","u2","UTF8ToString","ptr","ccall","returnType","argTypes","toC","convertReturnValue","cArgs","converter","onDone","cwrap","numericArgs","numericRet","run","doRun","preInit","orlpEd25519Wasm","derivePublicKey","validateKeyPair","getWasmInstance","privateKeyHex","wasmModule","privateKeyBytes","privateKeyPtr","publicKeyPtr","publicKeyBytes","expectedPublicKeyHex","expectedPublicKeyBytes","messageHex","publicKeyHex","messagePtr","signaturePtr","signatureBytes","signatureHex","__createBinding","k2","desc","__setModuleDefault","__importStar","ownKeys","ed25519Verifier","ed25519","orlp_ed25519_wasm_1","sha512Hash","hashBuffer","createHash","sha512HashSync","hashBytes","Ed25519SignatureVerifier","appDataHex","signature","appData","timestampBytes","advert","enum_names_1","ed25519_verifier_1","AdvertPayloadDecoder","payload","segments","segmentOffset","currentOffset","timestampDate","flags","binaryStr","deviceRole","flagDesc","nameBytes","rawName","appDataBytes","signatureValid","trace","TracePayloadDecoder","traceTagRaw","traceTag","authCode","pathHashes","pathHashesStart","pathHashesDisplay","snrValues","hexByte","byteValue","groupText","GroupTextPayloadDecoder","channelKeys","decryptionResult","RequestPayloadDecoder","destinationHash","sourceHash","ResponsePayloadDecoder","anonRequest","AnonRequestPayloadDecoder","senderPublicKey","ack","AckPayloadDecoder","checksum","PathPayloadDecoder","pathLength","extraType","extraData","textMessage","TextMessagePayloadDecoder","ControlPayloadDecoder","rawFlags","prefixOnly","typeFilter","typeFilterNames","since","sinceDate","nodeType","nodeTypeName","snrRaw","snrSigned","publicKeyLength","keyType","types","packetDecoder","key_manager_1","advert_1","trace_1","group_text_1","request_1","response_1","anon_request_1","ack_1","path_1","text_message_1","control_1","MeshCorePacketDecoder","hexData","includeStructure","errorPacket","errorStructure","header","payloadVersion","transportCodes","code1","code2","transportCode","pathLengthDescription","pathBytes","snrDb","pathDescription","payloadBytes","payloadHex","decodedPayload","payloadSegments","messageHash","packet","structure","advertPayload","verifiedAdvert","errors","pathLen","constantHeader","payloadData","hashInput","authToken","createAuthToken","verifyAuthToken","parseAuthToken","decodeAuthTokenPayload","base64urlEncode","base64","base64urlDecode","headerJson","payloadJson","headerBytes","headerEncoded","payloadEncoded","signingInput","signingInputBytes","signingInputHex","token","packet_decoder_1","packet_decoder_2","auth_token_1","EnumUtils","HexUtils","AuthTokenUtils","formatSignalInfo","decodePacketSummary","decryptedInfo","decoded","MeshCoreDecoder","Utils","payloadTypeName","pathStr","summary","details","getRouteTypeColor","getRouteTypeLabel","RawPacketList","packets","decodedPackets","sortedPackets","useAttribution","attribution","attributionRef","updateCircle","layer","prevProps","CONTEXT_VERSION","createLeafletContext","extendContext","source","extra","LeafletContext","LeafletProvider","useLeafletContext","useContext","createContainerComponent","useElement","ContainerComponent","createDivOverlayComponent","OverlayComponent","contentNode","createPortal","createLeafComponent","LeafComponent","useEventHandlers","eventHandlers","eventHandlersRef","withPane","pane","createDivOverlayHook","useLifecycle","elementRef","extend","dest","src","create$2","proto","bind","slice","lastId","stamp","throttle","lock","wrapperFn","later","wrapNum","range","includeMax","falseFn","formatNum","precision","trim","splitWords","setOptions","getParamString","existingUrl","uppercase","templateRe","template","isArray","indexOf","emptyImageUrl","getPrefixed","lastTime","timeoutDefer","timeToCall","requestFn","cancelFn","requestAnimFrame","immediate","cancelAnimFrame","Util","Class","NewClass","parentProto","checkDeprecatedMixinEvents","parentOptions","init","includes","Events","removeAll","_once","newListener","listeners","listener","propagate","_fn","Evented","trunc","toPoint","Bounds","min2","max2","toBounds","bounds","xIntersects","yIntersects","xOverlaps","yOverlaps","bufferRatio","heightBuffer","widthBuffer","LatLngBounds","corner1","corner2","latlngs","sw","sw2","ne2","LatLng","toLatLng","toLatLngBounds","latIntersects","lngIntersects","latOverlaps","lngOverlaps","maxMargin","lng","alt","margin","Earth","sizeInMeters","latAccuracy","lngAccuracy","CRS","latlng","zoom","projectedPoint","scale","untransformedPoint","center","newCenter","latShift","lngShift","newSw","newNe","latlng1","latlng2","rad","sinDLat","sinDLon","earthRadius","SphericalMercator","sin","Transformation","toTransformation","EPSG3857","EPSG900913","svgCreate","pointsToPath","rings","closed","len2","Browser","ielt9","edge","webkit","userAgentContains","android","android23","webkitVer","androidStock","opera","chrome","gecko","safari","phantom","opera12","win","ie3d","webkit3d","gecko3d","any3d","mobile","mobileWebkit","mobileWebkit3d","msPointer","pointer","touchNative","mobileOpera","mobileGecko","retina","passiveEvents","supportsPassiveOption","canvas$1","svg$1","inlineSvg","div","vml","shape","mac","linux","POINTER_DOWN","POINTER_MOVE","POINTER_UP","POINTER_CANCEL","pEvent","handle","_onPointerStart","_handlePointer","_pointers","_pointerDocListener","addPointerListener","_addPointerDocListener","removePointerListener","_globalPointerDown","_globalPointerMove","_globalPointerUp","preventDefault","makeDblclick","newEvent","delay","addDoubleTapListener","simDblclick","getPropagationPath","removeDoubleTapListener","TRANSFORM","testProp","TRANSITION","TRANSITION_END","get","getStyle","create$1","tagName","remove","empty","toFront","toBack","hasClass","getClass","addClass","setClass","removeClass","setOpacity","_setOpacityIE","filterName","setTransform","pos","setPosition","getPosition","disableTextSelection","enableTextSelection","_userSelect","on","userSelectProperty","disableImageDrag","enableImageDrag","_outlineElement","_outlineStyle","preventOutline","restoreOutline","getSizedParentNode","getScale","rect","DomUtil","addOne","eventsKey","batchRemove","removeOne","filterFn","mouseSubst","originalHandler","isExternalTarget","stopPropagation","disableScrollPropagation","disableClickPropagation","stop","ev","getMousePosition","wheelPxFactor","getWheelDelta","related","DomEvent","PosAnimation","newPos","easeLinearity","elapsed","progress","Map","moved","viewHalf","containerPoint","centerOffset","paddingTL","paddingBR","paddingOffset","swPoint","nePoint","targetCenter","targetZoom","startZoom","w0","w1","rho","rho2","sq","log","sinh","cosh","tanh","r0","easeOut","start","frame","oldZoom","pixelCenter","pixelPoint","pixelBounds","paddedBounds","paddedSize","oldSize","newSize","oldCenter","onResponse","onError","HandlerClass","inside","nw","boundsSize","snap","scalex","scaley","topLeftPoint","toZoom","fromZoom","crs","layerPoint","panes","noMoveStart","zoomChanged","supressEvent","onOff","isHover","dragging","canvasTargets","synth","filtered","isMarker","pixelOrigin","topLeft","latLngBounds","centerPoint","viewBounds","newBounds","pxBounds","maxBounds","projectedMaxBounds","minOffset","maxOffset","dx","dy","proxy","transform","startAnim","noUpdate","createMap","Control","corner","corners","createCorner","vSide","hSide","Layers","layerA","layerB","baseLayers","overlays","acceptableHeight","collapsed","section","link","overlay","baseLayersPresent","overlaysPresent","baseLayersCount","radioHtml","radioFragment","holder","addedLayers","removedLayers","that","Zoom","zoomName","html","title","Scale","maxMeters","meters","maxFeet","maxMiles","miles","feet","ratio","pow10","ukrainianFlag","Attribution","attribs","prefixAndAttribs","Handler","Mixin","START","Draggable","dragStartTarget","sizedParent","mouseevent","noInertia","fireDragend","clipPolygon","clippedPoints","edges","_getBitCode","_getEdgeIntersection","polygonCenter","area","isFlat","centroidLatLng","areaBounds","centroid","latlngCenter","coords","latSum","lngSum","PolyUtil","simplify","tolerance","sqTolerance","_reducePoints","_simplifyDP","pointToSegmentDistance","_sqClosestPointOnSegment","closestPointOnSegment","ArrayConstructor","markers","_simplifyDPStep","newPoints","maxSqDist","sqDist","reducedPoints","_sqDist","_lastCode","clipSegment","useLastCode","codeA","codeB","codeOut","newCode","dot","_flat","polylineCenter","halfDist","segDist","LineUtil","LonLat","Mercator","tmp","con","ts","phi","dphi","EPSG3395","EPSG4326","Simple","Layer","targetEl","events","method","minZoom","maxZoom","oldZoomSpan","LayerGroup","layerId","methodName","zIndex","layerGroup","FeatureGroup","featureGroup","oldIcon","img","sizeOption","anchor","IconDefault","strip","MarkerDrag","marker","speed","iconPos","origin","panBounds","movement","shadow","Marker","oldLatLng","classToAdd","addIcon","newShadow","addShadow","opt","draggable","opacity","iconOpts","Path","CircleMarker","radius","r2","circleMarker","Circle","legacyOptions","half","latR","bottom","lngR","circle","Polyline","minDistance","minPoint","closest","jLen","flat","projectedBounds","ring","segment","polyline","Polygon","clipped","polygon","GeoJSON","geojson","features","feature","geometryToLayer","asFeature","geometry","pointToLayer","_coordsToLatLng","coordsToLatLng","_pointToLayer","coordsToLatLngs","geoLayer","featureLayer","pointToLayerFn","levelsDeep","latLngToCoords","latLngsToCoords","getFeature","newGeometry","PointToGeoJSON","multi","holes","isGeometryCollection","jsons","json","geoJSON","geoJson","ImageOverlay","styleOpts","wasElementSupplied","image","errorUrl","imageOverlay","VideoOverlay","vid","sourceElements","sources","videoOverlay","video","SVGOverlay","svgOverlay","DivOverlay","OverlayClass","old","Popup","wrapper","maxHeight","scrolledClass","marginBottom","containerHeight","containerWidth","layerPos","containerPos","popup","Tooltip","subX","subY","tooltipPoint","tooltipWidth","tooltipHeight","tooltip","DivIcon","bgPos","divIcon","GridLayer","tileZoom","compare","edgeZIndex","nextFrame","willPrune","tile","fade","level","z2","coords2","animating","noPrune","tileZoomChanged","translate","tileSize","mapZoom","halfSize","tileRange","tileCenter","queue","noPruneRange","fragment","tileBounds","nwPoint","sePoint","bp","tilePos","newCoords","gridLayer","TileLayer","noRedraw","done","invertedY","zoomReverse","zoomOffset","tilePoint","tileLayer","TileLayerWMS","wmsParams","realRetina","projectionKey","bbox","tileLayerWMS","Renderer","currentCenterPoint","topLeftOffset","Canvas","order","dashArray","dashValue","clickedLayer","candidateHoveredLayer","canvas","vmlCreate","vmlMixin","stroke","fill","SVG","arc","svg","renderer","Rectangle","rectangle","BoxZoom","DoubleClickZoom","Drag","pxCenter","pxWorldCenter","threshold","worldWidth","halfWidth","newX1","newX2","ease","speedVector","limitedSpeed","limitedSpeedVector","decelerationDuration","Keyboard","body","docEl","panDelta","keys","codes","zoomDelta","newLatLng","ScrollWheelZoom","debounce","d2","d3","d4","tapHoldDelay","TapHold","cancelClickPrevent","simulatedEvent","TouchZoom","moveFn","oldL","createElementObject","createElementHook","updateElement","propsRef","useLayerLifecycle","createLayerHook","usePathOptions","createPathHook","createOverlayComponent","useOverlay","createPathComponent","usePath","createTileLayerComponent","useLayer","updateGridLayer","useMap","LeafletCircleMarker","_extends","MapContainerComponent","boundsOptions","whenReady","setContext","mapRef","LeafletMap","contents","MapContainer","LeafletPopup","onPopupOpen","onPopupClose","LeafletTileLayer","getMarkerColor","lastSeen","age","hour","day","MapBoundsHandler","focusedContact","hasInitialized","setHasInitialized","fitToContacts","MapView","focusedKey","mappableContacts","sevenDaysAgo","markerRefs","setMarkerRef","timer","displayName","forceCenter","strength","sy","tree_add","add","tree","leaf","x0","y0","x1","y1","xm","ym","xp","yp","addAll","xz","yz","tree_cover","tree_data","tree_extent","Quad","tree_find","x3","y3","quads","tree_remove","retainer","previous","tree_root","tree_size","tree_visit","tree_visitAfter","defaultX","tree_x","defaultY","tree_y","quadtree","Quadtree","leaf_copy","copy","treeProto","tree_addAll","tree_removeAll","constant","jiggle","random","forceCollide","radii","ri2","prepare","apply","quad","initialize","_nodes","_random","find","nodeById","nodeId","forceLink","links","defaultStrength","strengths","distances","bias","alpha","initializeStrength","initializeDistance","noop","dispatch","Dispatch","parseTypenames","typenames","typename","set","timeout","interval","pokeDelay","taskHead","taskTail","clockLast","clockNow","clockSkew","clock","setFrame","clearNow","Timer","sleep","timerFlush","wake","nap","poke","lcg","initialRadius","initialAngle","forceSimulation","simulation","alphaMin","alphaDecay","alphaTarget","velocityDecay","forces","stepper","step","tick","initializeNodes","angle","initializeForce","forceManyBody","distanceMin2","distanceMax2","theta2","accumulate","weight","forceX","forceY","COLORS","PARTICLE_COLOR_MAP","PARTICLE_SPEED","DEFAULT_OBSERVATION_WINDOW_SEC","FORTY_EIGHT_HOURS_MS","LEGEND_ITEMS","PACKET_LEGEND_ITEMS","simpleHash","parsePacket","getPacketLabel","generatePacketKey","parsed","rawPacket","contentHash","getLinkId","findContactByPrefix","findContactByName","getNodeType","dedupeConsecutive","useVisualizerData","showAmbiguousPaths","showAmbiguousNodes","chargeStrength","letEmDrift","particleSpeedMultiplier","observationWindowSec","dimensions","nodesRef","linksRef","particlesRef","simulationRef","processedRef","pendingRef","timersRef","speedMultiplierRef","observationWindowRef","stats","setStats","sim","syncSimulation","selfNode","linkForce","addNode","ambiguousNames","existing","addLink","sourceId","targetId","publishPacket","packetKey","pending","dedupedPath","resolveNode","showAmbiguous","names","buildPath","myPrefix","hexPrefix","newProcessed","newAnimated","needsUpdate","windowMs","randomizePositions","centerX","centerY","expandContract","startChargeStrength","peakChargeStrength","startLinkStrength","minLinkStrength","expandDuration","holdDuration","contractDuration","startTime","animate","currentChargeStrength","currentLinkStrength","renderLinks","renderParticles","particles","visibleNodeIds","particle","fromNode","toNode","renderNodes","hoveredNodeId","emoji","yOffset","PacketVisualizer","fullScreen","onFullScreenChange","canvasRef","setDimensions","setShowAmbiguousPaths","setShowAmbiguousNodes","setChargeStrength","filterOldRepeaters","setFilterOldRepeaters","setObservationWindowSec","setLetEmDrift","setParticleSpeedMultiplier","hideUI","setHideUI","isDraggingRef","lastMouseRef","setHoveredNodeId","observer","render","dpr","allNodes","visibleNodes","visibleLinks","running","screenToGraph","screenX","screenY","cy","findNodeAt","gy","handleMouseDown","handleMouseMove","handleMouseUp","handleMouseLeave","handleWheel","VisualizerView","setFullScreen","CHARS","CHARS_LEN","CHARS_WITH_DASH","PUBLIC_ROOM_NAME","PUBLIC_KEY","DEFAULT_VALID_SECONDS","roomNameToIndex","length","multiplier","charIdx","charCount","indexToRoomName","prevWasDash","isDash","deriveKeyFromRoomName","roomName","getChannelHash","keyHex","verifyMac","paddedKey","HmacSHA256","countNamesForLength","endsNonDash","endsDash","newEndsNonDash","newEndsDash","middleCount","isTimestampValid","validSeconds","currentTime","isValidUtf8","GpuBruteForce","adapter","shaderModule","pipelineLayout","targetChannelHash","nameLength","batchOffset","batchSize","ciphertextHex","targetMacHex","readBufferIdx","matchCountReadBuffer","matchIndicesReadBuffer","ciphertextLenBits","targetMac","ciphertextBytes","paddedLen","padded","macByte0","macByte1","requiredCiphertextSize","paramsData","commandEncoder","passEncoder","matchCount","indices","isWebGpuSupported","CpuBruteForce","targetHashHex","verifyMacEnabled","nameIdx","VALID_CHARS","NO_DASH_AT_ENDS","NO_CONSECUTIVE_DASHES","isValidRoomName","GroupTextCracker","allWords","packetHex","onProgress","maxLength","startingLength","useDictionary","startFromType","normalizedPacketHex","targetHashByte","totalChecked","lastProgressUpdate","startFromLength","startFromOffset","dictionaryStartIndex","skipDictionary","normalizedStartFrom","wordIndex","totalCandidates","reportProgress","phase","currentLength","currentPosition","rate","eta","verifyMacAndFilters","publicChannelHash","wordChannelHash","INITIAL_BATCH_SIZE","TARGET_DISPATCH_MS","currentBatchSize","batchSizeTuned","totalForLength","dispatchStart","dispatchTime","scaleFactor","optimalBatchSize","rounded","matchIdx","currentPos","media","webm","mp4","oldIOS","nativeWakeLock","NoSleep","handleVisibilityChange","dataURI","wakeLock","extractPayload","CrackerPanel","onChannelCreate","onRunningChange","isRunning","setIsRunning","setMaxLength","retryFailedAtNextLength","setRetryFailedAtNextLength","decryptHistorical","setDecryptHistorical","turboMode","setTurboMode","setProgress","setQueue","crackedRooms","setCrackedRooms","wordlistLoaded","setWordlistLoaded","gpuAvailable","setGpuAvailable","undecryptedPacketCount","setUndecryptedPacketCount","skippedDuplicates","setSkippedDuplicates","crackerRef","noSleepRef","isRunningRef","abortedRef","isProcessingRef","queueRef","retryFailedRef","maxLengthRef","decryptHistoricalRef","turboModeRef","undecryptedIdsRef","seenPayloadsRef","cracker","noSleep","__vitePreload","ENGLISH_WORDLIST","fetchCount","existingChannelKeys","undecryptedGroupText","newSkipped","newQueue","changed","pendingCount","crackedCount","failedCount","processNext","currentQueue","nextItem","nextId","failedItems","currentMaxLength","isRetry","targetLength","prog","newRoom","keyUpper","handleStart","handleStop","room","SheetPrimitive.Root","SheetPortal","SheetPrimitive.Portal","SheetOverlay","SheetPrimitive.Overlay","sheetVariants","SheetContent","side","hideCloseButton","SheetPrimitive.Content","SheetPrimitive.Close","SheetHeader","SheetTitle","SheetPrimitive.Title","SheetDescription","SheetPrimitive.Description","MAX_RAW_PACKETS","App","messageInputRef","activeConversationRef","seenMessageContentRef","setHealth","setConfig","setAppSettings","setContacts","setChannels","rawPackets","setRawPackets","setActiveConversation","showNewMessage","setShowNewMessage","showSettings","setShowSettings","sidebarOpen","setSidebarOpen","setUndecryptedCount","setShowCracker","setCrackerRunning","prevHealthRef","checkMention","wsHandlers","success","activeConv","isForActiveConversation","fetchConfig","fetchAppSettings","fetchUndecryptedCount","hasMigratedRef","localFavorites","localSortOrder","localLastMessageTimes","resolveHashToConversation","hashConv","hasSetDefaultConversation","publicChannel","handleSendMessage","handleSaveConfig","handleSaveAppSettings","handleSenderClick","handleToggleFavorite","optimisticFavorites","updatedSettings","handleDeleteChannel","handleDeleteContact","handleCreateContact","created","handleCreateChannel","handleCreateHashtagChannel","handleSortOrderChange","previousOrder","sidebarContent","distFromUs","createRoot","StrictMode"],"ignoreList":[0,1,2,3,4,5,6,7,8,16,19,20,21,22,23,24,25,31,32,35,36,37,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,84,85,86,87,88,90,91,93,94,95,98,99,102,103,104,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,162,163,164,165,166,167,168,169,170,171,172,173,174,175,176,177,178,179,181,182,183,184,185,186,187,188,189,190,191,192,193,194,195,196,197,198,199,200,201,202,203,204,205,206,209,210,211,212,213,214,215,216],"sources":["../../node_modules/react/cjs/react.production.min.js","../../node_modules/react/index.js","../../node_modules/react/cjs/react-jsx-runtime.production.min.js","../../node_modules/react/jsx-runtime.js","../../node_modules/scheduler/cjs/scheduler.production.min.js","../../node_modules/scheduler/index.js","../../node_modules/react-dom/cjs/react-dom.production.min.js","../../node_modules/react-dom/index.js","../../node_modules/react-dom/client.js","../../src/api.ts","../../src/useWebSocket.ts","../../src/types.ts","../../src/hooks/useAirtimeTracking.ts","../../src/hooks/useRepeaterMode.ts","../../src/utils/conversationState.ts","../../src/hooks/useUnreadCounts.ts","../../node_modules/sonner/dist/index.mjs","../../src/components/ui/sonner.tsx","../../src/hooks/useConversationMessages.ts","../../node_modules/lucide-react/dist/esm/shared/src/utils.js","../../node_modules/lucide-react/dist/esm/defaultAttributes.js","../../node_modules/lucide-react/dist/esm/Icon.js","../../node_modules/lucide-react/dist/esm/createLucideIcon.js","../../node_modules/lucide-react/dist/esm/icons/check.js","../../node_modules/lucide-react/dist/esm/icons/menu.js","../../node_modules/lucide-react/dist/esm/icons/x.js","../../src/components/StatusBar.tsx","../../src/utils/pubkey.ts","../../src/utils/contactAvatar.ts","../../src/components/ContactAvatar.tsx","../../src/utils/favorites.ts","../../node_modules/clsx/dist/clsx.mjs","../../node_modules/tailwind-merge/dist/bundle-mjs.mjs","../../src/lib/utils.ts","../../src/components/ui/input.tsx","../../node_modules/@radix-ui/react-compose-refs/dist/index.mjs","../../node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/class-variance-authority/dist/index.mjs","../../src/components/ui/button.tsx","../../src/components/Sidebar.tsx","../../src/utils/messageParser.ts","../../src/utils/pathUtils.ts","../../node_modules/@radix-ui/primitive/dist/index.mjs","../../node_modules/@radix-ui/react-context/dist/index.mjs","../../node_modules/@radix-ui/react-use-layout-effect/dist/index.mjs","../../node_modules/@radix-ui/react-id/dist/index.mjs","../../node_modules/@radix-ui/react-use-controllable-state/dist/index.mjs","../../node_modules/@radix-ui/react-primitive/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-use-callback-ref/dist/index.mjs","../../node_modules/@radix-ui/react-use-escape-keydown/dist/index.mjs","../../node_modules/@radix-ui/react-dismissable-layer/dist/index.mjs","../../node_modules/@radix-ui/react-focus-scope/dist/index.mjs","../../node_modules/@radix-ui/react-portal/dist/index.mjs","../../node_modules/@radix-ui/react-presence/dist/index.mjs","../../node_modules/@radix-ui/react-focus-guards/dist/index.mjs","../../node_modules/tslib/tslib.es6.mjs","../../node_modules/react-remove-scroll-bar/dist/es2015/constants.js","../../node_modules/use-callback-ref/dist/es2015/assignRef.js","../../node_modules/use-callback-ref/dist/es2015/useRef.js","../../node_modules/use-callback-ref/dist/es2015/useMergeRef.js","../../node_modules/use-sidecar/dist/es2015/medium.js","../../node_modules/use-sidecar/dist/es2015/exports.js","../../node_modules/react-remove-scroll/dist/es2015/medium.js","../../node_modules/react-remove-scroll/dist/es2015/UI.js","../../node_modules/get-nonce/dist/es2015/index.js","../../node_modules/react-style-singleton/dist/es2015/singleton.js","../../node_modules/react-style-singleton/dist/es2015/hook.js","../../node_modules/react-style-singleton/dist/es2015/component.js","../../node_modules/react-remove-scroll-bar/dist/es2015/utils.js","../../node_modules/react-remove-scroll-bar/dist/es2015/component.js","../../node_modules/react-remove-scroll/dist/es2015/aggresiveCapture.js","../../node_modules/react-remove-scroll/dist/es2015/handleScroll.js","../../node_modules/react-remove-scroll/dist/es2015/SideEffect.js","../../node_modules/react-remove-scroll/dist/es2015/sidecar.js","../../node_modules/react-remove-scroll/dist/es2015/Combination.js","../../node_modules/aria-hidden/dist/es2015/index.js","../../node_modules/@radix-ui/react-dialog/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-dialog/dist/index.mjs","../../src/components/ui/dialog.tsx","../../src/utils/urlHash.ts","../../src/components/PathModal.tsx","../../src/components/MessageList.tsx","../../src/components/MessageInput.tsx","../../node_modules/@radix-ui/react-collection/node_modules/@radix-ui/react-slot/dist/index.mjs","../../node_modules/@radix-ui/react-collection/dist/index.mjs","../../node_modules/@radix-ui/react-direction/dist/index.mjs","../../node_modules/@radix-ui/react-roving-focus/dist/index.mjs","../../node_modules/@radix-ui/react-tabs/dist/index.mjs","../../src/components/ui/tabs.tsx","../../node_modules/@radix-ui/react-label/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-label/dist/index.mjs","../../src/components/ui/label.tsx","../../node_modules/@radix-ui/react-use-previous/dist/index.mjs","../../node_modules/@radix-ui/react-use-size/dist/index.mjs","../../node_modules/@radix-ui/react-checkbox/dist/index.mjs","../../src/components/ui/checkbox.tsx","../../src/components/NewMessageModal.tsx","../../node_modules/@radix-ui/react-separator/node_modules/@radix-ui/react-primitive/dist/index.mjs","../../node_modules/@radix-ui/react-separator/dist/index.mjs","../../src/components/ui/separator.tsx","../../src/components/SettingsModal.tsx","../../node_modules/@michaelhart/meshcore-decoder/dist/types/enums.js","../../node_modules/@michaelhart/meshcore-decoder/dist/utils/hex.js","../../node_modules/@michaelhart/meshcore-decoder/dist/utils/enum-names.js","../../__vite-browser-external","../../node_modules/crypto-js/core.js","../../node_modules/crypto-js/x64-core.js","../../node_modules/crypto-js/lib-typedarrays.js","../../node_modules/crypto-js/enc-utf16.js","../../node_modules/crypto-js/enc-base64.js","../../node_modules/crypto-js/enc-base64url.js","../../node_modules/crypto-js/md5.js","../../node_modules/crypto-js/sha1.js","../../node_modules/crypto-js/sha256.js","../../node_modules/crypto-js/sha224.js","../../node_modules/crypto-js/sha512.js","../../node_modules/crypto-js/sha384.js","../../node_modules/crypto-js/sha3.js","../../node_modules/crypto-js/ripemd160.js","../../node_modules/crypto-js/hmac.js","../../node_modules/crypto-js/pbkdf2.js","../../node_modules/crypto-js/evpkdf.js","../../node_modules/crypto-js/cipher-core.js","../../node_modules/crypto-js/mode-cfb.js","../../node_modules/crypto-js/mode-ctr.js","../../node_modules/crypto-js/mode-ctr-gladman.js","../../node_modules/crypto-js/mode-ofb.js","../../node_modules/crypto-js/mode-ecb.js","../../node_modules/crypto-js/pad-ansix923.js","../../node_modules/crypto-js/pad-iso10126.js","../../node_modules/crypto-js/pad-iso97971.js","../../node_modules/crypto-js/pad-zeropadding.js","../../node_modules/crypto-js/pad-nopadding.js","../../node_modules/crypto-js/format-hex.js","../../node_modules/crypto-js/aes.js","../../node_modules/crypto-js/tripledes.js","../../node_modules/crypto-js/rc4.js","../../node_modules/crypto-js/rabbit.js","../../node_modules/crypto-js/rabbit-legacy.js","../../node_modules/crypto-js/blowfish.js","../../node_modules/crypto-js/index.js","../../node_modules/@michaelhart/meshcore-decoder/dist/crypto/channel-crypto.js","../../node_modules/@michaelhart/meshcore-decoder/dist/crypto/key-manager.js","../../node_modules/@noble/ed25519/index.js","../../node_modules/@michaelhart/meshcore-decoder/lib/orlp-ed25519.js","../../node_modules/@michaelhart/meshcore-decoder/dist/crypto/orlp-ed25519-wasm.js","../../node_modules/@michaelhart/meshcore-decoder/dist/crypto/ed25519-verifier.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/advert.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/trace.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/group-text.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/request.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/response.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/anon-request.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/ack.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/path.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/text-message.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/payload-decoders/control.js","../../node_modules/@michaelhart/meshcore-decoder/dist/decoder/packet-decoder.js","../../node_modules/@michaelhart/meshcore-decoder/dist/utils/auth-token.js","../../node_modules/@michaelhart/meshcore-decoder/dist/index.js","../../src/components/RawPacketList.tsx","../../node_modules/@react-leaflet/core/lib/attribution.js","../../node_modules/@react-leaflet/core/lib/circle.js","../../node_modules/@react-leaflet/core/lib/context.js","../../node_modules/@react-leaflet/core/lib/component.js","../../node_modules/@react-leaflet/core/lib/events.js","../../node_modules/@react-leaflet/core/lib/pane.js","../../node_modules/@react-leaflet/core/lib/div-overlay.js","../../node_modules/leaflet/dist/leaflet-src.js","../../node_modules/@react-leaflet/core/lib/element.js","../../node_modules/@react-leaflet/core/lib/layer.js","../../node_modules/@react-leaflet/core/lib/path.js","../../node_modules/@react-leaflet/core/lib/generic.js","../../node_modules/@react-leaflet/core/lib/grid-layer.js","../../node_modules/react-leaflet/lib/hooks.js","../../node_modules/react-leaflet/lib/CircleMarker.js","../../node_modules/react-leaflet/lib/MapContainer.js","../../node_modules/react-leaflet/lib/Popup.js","../../node_modules/react-leaflet/lib/TileLayer.js","../../src/components/MapView.tsx","../../node_modules/d3-force/src/center.js","../../node_modules/d3-quadtree/src/add.js","../../node_modules/d3-quadtree/src/cover.js","../../node_modules/d3-quadtree/src/data.js","../../node_modules/d3-quadtree/src/extent.js","../../node_modules/d3-quadtree/src/quad.js","../../node_modules/d3-quadtree/src/find.js","../../node_modules/d3-quadtree/src/remove.js","../../node_modules/d3-quadtree/src/root.js","../../node_modules/d3-quadtree/src/size.js","../../node_modules/d3-quadtree/src/visit.js","../../node_modules/d3-quadtree/src/visitAfter.js","../../node_modules/d3-quadtree/src/x.js","../../node_modules/d3-quadtree/src/y.js","../../node_modules/d3-quadtree/src/quadtree.js","../../node_modules/d3-force/src/constant.js","../../node_modules/d3-force/src/jiggle.js","../../node_modules/d3-force/src/collide.js","../../node_modules/d3-force/src/link.js","../../node_modules/d3-dispatch/src/dispatch.js","../../node_modules/d3-timer/src/timer.js","../../node_modules/d3-force/src/lcg.js","../../node_modules/d3-force/src/simulation.js","../../node_modules/d3-force/src/manyBody.js","../../node_modules/d3-force/src/x.js","../../node_modules/d3-force/src/y.js","../../src/components/PacketVisualizer.tsx","../../src/components/VisualizerView.tsx","../../node_modules/crypto-js/hmac-sha256.js","../../node_modules/crypto-js/enc-hex.js","../../node_modules/meshcore-hashtag-cracker/dist/core.js","../../node_modules/meshcore-hashtag-cracker/dist/gpu-bruteforce.js","../../node_modules/meshcore-hashtag-cracker/dist/cpu-bruteforce.js","../../node_modules/meshcore-hashtag-cracker/dist/cracker.js","../../node_modules/nosleep.js/src/media.js","../../node_modules/nosleep.js/src/index.js","../../src/components/CrackerPanel.tsx","../../src/components/ui/sheet.tsx","../../src/App.tsx","../../src/main.tsx"],"sourcesContent":["/**\n * @license React\n * react.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var l=Symbol.for(\"react.element\"),n=Symbol.for(\"react.portal\"),p=Symbol.for(\"react.fragment\"),q=Symbol.for(\"react.strict_mode\"),r=Symbol.for(\"react.profiler\"),t=Symbol.for(\"react.provider\"),u=Symbol.for(\"react.context\"),v=Symbol.for(\"react.forward_ref\"),w=Symbol.for(\"react.suspense\"),x=Symbol.for(\"react.memo\"),y=Symbol.for(\"react.lazy\"),z=Symbol.iterator;function A(a){if(null===a||\"object\"!==typeof a)return null;a=z&&a[z]||a[\"@@iterator\"];return\"function\"===typeof a?a:null}\nvar B={isMounted:function(){return!1},enqueueForceUpdate:function(){},enqueueReplaceState:function(){},enqueueSetState:function(){}},C=Object.assign,D={};function E(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}E.prototype.isReactComponent={};\nE.prototype.setState=function(a,b){if(\"object\"!==typeof a&&\"function\"!==typeof a&&null!=a)throw Error(\"setState(...): takes an object of state variables to update or a function which returns an object of state variables.\");this.updater.enqueueSetState(this,a,b,\"setState\")};E.prototype.forceUpdate=function(a){this.updater.enqueueForceUpdate(this,a,\"forceUpdate\")};function F(){}F.prototype=E.prototype;function G(a,b,e){this.props=a;this.context=b;this.refs=D;this.updater=e||B}var H=G.prototype=new F;\nH.constructor=G;C(H,E.prototype);H.isPureReactComponent=!0;var I=Array.isArray,J=Object.prototype.hasOwnProperty,K={current:null},L={key:!0,ref:!0,__self:!0,__source:!0};\nfunction M(a,b,e){var d,c={},k=null,h=null;if(null!=b)for(d in void 0!==b.ref&&(h=b.ref),void 0!==b.key&&(k=\"\"+b.key),b)J.call(b,d)&&!L.hasOwnProperty(d)&&(c[d]=b[d]);var g=arguments.length-2;if(1===g)c.children=e;else if(1>>1,e=a[d];if(0>>1;dg(C,c))ng(x,C)?(a[d]=x,a[n]=c,d=n):(a[d]=C,a[m]=c,d=m);else if(ng(x,c))a[d]=x,a[n]=c,d=n;else break a}}return b}\nfunction g(a,b){var c=a.sortIndex-b.sortIndex;return 0!==c?c:a.id-b.id}if(\"object\"===typeof performance&&\"function\"===typeof performance.now){var l=performance;exports.unstable_now=function(){return l.now()}}else{var p=Date,q=p.now();exports.unstable_now=function(){return p.now()-q}}var r=[],t=[],u=1,v=null,y=3,z=!1,A=!1,B=!1,D=\"function\"===typeof setTimeout?setTimeout:null,E=\"function\"===typeof clearTimeout?clearTimeout:null,F=\"undefined\"!==typeof setImmediate?setImmediate:null;\n\"undefined\"!==typeof navigator&&void 0!==navigator.scheduling&&void 0!==navigator.scheduling.isInputPending&&navigator.scheduling.isInputPending.bind(navigator.scheduling);function G(a){for(var b=h(t);null!==b;){if(null===b.callback)k(t);else if(b.startTime<=a)k(t),b.sortIndex=b.expirationTime,f(r,b);else break;b=h(t)}}function H(a){B=!1;G(a);if(!A)if(null!==h(r))A=!0,I(J);else{var b=h(t);null!==b&&K(H,b.startTime-a)}}\nfunction J(a,b){A=!1;B&&(B=!1,E(L),L=-1);z=!0;var c=y;try{G(b);for(v=h(r);null!==v&&(!(v.expirationTime>b)||a&&!M());){var d=v.callback;if(\"function\"===typeof d){v.callback=null;y=v.priorityLevel;var e=d(v.expirationTime<=b);b=exports.unstable_now();\"function\"===typeof e?v.callback=e:v===h(r)&&k(r);G(b)}else k(r);v=h(r)}if(null!==v)var w=!0;else{var m=h(t);null!==m&&K(H,m.startTime-b);w=!1}return w}finally{v=null,y=c,z=!1}}var N=!1,O=null,L=-1,P=5,Q=-1;\nfunction M(){return exports.unstable_now()-Qa||125d?(a.sortIndex=c,f(t,a),null===h(r)&&a===h(t)&&(B?(E(L),L=-1):B=!0,K(H,c-d))):(a.sortIndex=e,f(r,a),A||z||(A=!0,I(J)));return a};\nexports.unstable_shouldYield=M;exports.unstable_wrapCallback=function(a){var b=y;return function(){var c=y;y=b;try{return a.apply(this,arguments)}finally{y=c}}};\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/scheduler.production.min.js');\n} else {\n module.exports = require('./cjs/scheduler.development.js');\n}\n","/**\n * @license React\n * react-dom.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n/*\n Modernizr 3.0.0pre (Custom Build) | MIT\n*/\n'use strict';var aa=require(\"react\"),ca=require(\"scheduler\");function p(a){for(var b=\"https://reactjs.org/docs/error-decoder.html?invariant=\"+a,c=1;cb}return!1}function v(a,b,c,d,e,f,g){this.acceptsBooleans=2===b||3===b||4===b;this.attributeName=d;this.attributeNamespace=e;this.mustUseProperty=c;this.propertyName=a;this.type=b;this.sanitizeURL=f;this.removeEmptyString=g}var z={};\n\"children dangerouslySetInnerHTML defaultValue defaultChecked innerHTML suppressContentEditableWarning suppressHydrationWarning style\".split(\" \").forEach(function(a){z[a]=new v(a,0,!1,a,null,!1,!1)});[[\"acceptCharset\",\"accept-charset\"],[\"className\",\"class\"],[\"htmlFor\",\"for\"],[\"httpEquiv\",\"http-equiv\"]].forEach(function(a){var b=a[0];z[b]=new v(b,1,!1,a[1],null,!1,!1)});[\"contentEditable\",\"draggable\",\"spellCheck\",\"value\"].forEach(function(a){z[a]=new v(a,2,!1,a.toLowerCase(),null,!1,!1)});\n[\"autoReverse\",\"externalResourcesRequired\",\"focusable\",\"preserveAlpha\"].forEach(function(a){z[a]=new v(a,2,!1,a,null,!1,!1)});\"allowFullScreen async autoFocus autoPlay controls default defer disabled disablePictureInPicture disableRemotePlayback formNoValidate hidden loop noModule noValidate open playsInline readOnly required reversed scoped seamless itemScope\".split(\" \").forEach(function(a){z[a]=new v(a,3,!1,a.toLowerCase(),null,!1,!1)});\n[\"checked\",\"multiple\",\"muted\",\"selected\"].forEach(function(a){z[a]=new v(a,3,!0,a,null,!1,!1)});[\"capture\",\"download\"].forEach(function(a){z[a]=new v(a,4,!1,a,null,!1,!1)});[\"cols\",\"rows\",\"size\",\"span\"].forEach(function(a){z[a]=new v(a,6,!1,a,null,!1,!1)});[\"rowSpan\",\"start\"].forEach(function(a){z[a]=new v(a,5,!1,a.toLowerCase(),null,!1,!1)});var ra=/[\\-:]([a-z])/g;function sa(a){return a[1].toUpperCase()}\n\"accent-height alignment-baseline arabic-form baseline-shift cap-height clip-path clip-rule color-interpolation color-interpolation-filters color-profile color-rendering dominant-baseline enable-background fill-opacity fill-rule flood-color flood-opacity font-family font-size font-size-adjust font-stretch font-style font-variant font-weight glyph-name glyph-orientation-horizontal glyph-orientation-vertical horiz-adv-x horiz-origin-x image-rendering letter-spacing lighting-color marker-end marker-mid marker-start overline-position overline-thickness paint-order panose-1 pointer-events rendering-intent shape-rendering stop-color stop-opacity strikethrough-position strikethrough-thickness stroke-dasharray stroke-dashoffset stroke-linecap stroke-linejoin stroke-miterlimit stroke-opacity stroke-width text-anchor text-decoration text-rendering underline-position underline-thickness unicode-bidi unicode-range units-per-em v-alphabetic v-hanging v-ideographic v-mathematical vector-effect vert-adv-y vert-origin-x vert-origin-y word-spacing writing-mode xmlns:xlink x-height\".split(\" \").forEach(function(a){var b=a.replace(ra,\nsa);z[b]=new v(b,1,!1,a,null,!1,!1)});\"xlink:actuate xlink:arcrole xlink:role xlink:show xlink:title xlink:type\".split(\" \").forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/1999/xlink\",!1,!1)});[\"xml:base\",\"xml:lang\",\"xml:space\"].forEach(function(a){var b=a.replace(ra,sa);z[b]=new v(b,1,!1,a,\"http://www.w3.org/XML/1998/namespace\",!1,!1)});[\"tabIndex\",\"crossOrigin\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!1,!1)});\nz.xlinkHref=new v(\"xlinkHref\",1,!1,\"xlink:href\",\"http://www.w3.org/1999/xlink\",!0,!1);[\"src\",\"href\",\"action\",\"formAction\"].forEach(function(a){z[a]=new v(a,1,!1,a.toLowerCase(),null,!0,!0)});\nfunction ta(a,b,c,d){var e=z.hasOwnProperty(b)?z[b]:null;if(null!==e?0!==e.type:d||!(2h||e[g]!==f[h]){var k=\"\\n\"+e[g].replace(\" at new \",\" at \");a.displayName&&k.includes(\"\")&&(k=k.replace(\"\",a.displayName));return k}while(1<=g&&0<=h)}break}}}finally{Na=!1,Error.prepareStackTrace=c}return(a=a?a.displayName||a.name:\"\")?Ma(a):\"\"}\nfunction Pa(a){switch(a.tag){case 5:return Ma(a.type);case 16:return Ma(\"Lazy\");case 13:return Ma(\"Suspense\");case 19:return Ma(\"SuspenseList\");case 0:case 2:case 15:return a=Oa(a.type,!1),a;case 11:return a=Oa(a.type.render,!1),a;case 1:return a=Oa(a.type,!0),a;default:return\"\"}}\nfunction Qa(a){if(null==a)return null;if(\"function\"===typeof a)return a.displayName||a.name||null;if(\"string\"===typeof a)return a;switch(a){case ya:return\"Fragment\";case wa:return\"Portal\";case Aa:return\"Profiler\";case za:return\"StrictMode\";case Ea:return\"Suspense\";case Fa:return\"SuspenseList\"}if(\"object\"===typeof a)switch(a.$$typeof){case Ca:return(a.displayName||\"Context\")+\".Consumer\";case Ba:return(a._context.displayName||\"Context\")+\".Provider\";case Da:var b=a.render;a=a.displayName;a||(a=b.displayName||\nb.name||\"\",a=\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");return a;case Ga:return b=a.displayName||null,null!==b?b:Qa(a.type)||\"Memo\";case Ha:b=a._payload;a=a._init;try{return Qa(a(b))}catch(c){}}return null}\nfunction Ra(a){var b=a.type;switch(a.tag){case 24:return\"Cache\";case 9:return(b.displayName||\"Context\")+\".Consumer\";case 10:return(b._context.displayName||\"Context\")+\".Provider\";case 18:return\"DehydratedFragment\";case 11:return a=b.render,a=a.displayName||a.name||\"\",b.displayName||(\"\"!==a?\"ForwardRef(\"+a+\")\":\"ForwardRef\");case 7:return\"Fragment\";case 5:return b;case 4:return\"Portal\";case 3:return\"Root\";case 6:return\"Text\";case 16:return Qa(b);case 8:return b===za?\"StrictMode\":\"Mode\";case 22:return\"Offscreen\";\ncase 12:return\"Profiler\";case 21:return\"Scope\";case 13:return\"Suspense\";case 19:return\"SuspenseList\";case 25:return\"TracingMarker\";case 1:case 0:case 17:case 2:case 14:case 15:if(\"function\"===typeof b)return b.displayName||b.name||null;if(\"string\"===typeof b)return b}return null}function Sa(a){switch(typeof a){case \"boolean\":case \"number\":case \"string\":case \"undefined\":return a;case \"object\":return a;default:return\"\"}}\nfunction Ta(a){var b=a.type;return(a=a.nodeName)&&\"input\"===a.toLowerCase()&&(\"checkbox\"===b||\"radio\"===b)}\nfunction Ua(a){var b=Ta(a)?\"checked\":\"value\",c=Object.getOwnPropertyDescriptor(a.constructor.prototype,b),d=\"\"+a[b];if(!a.hasOwnProperty(b)&&\"undefined\"!==typeof c&&\"function\"===typeof c.get&&\"function\"===typeof c.set){var e=c.get,f=c.set;Object.defineProperty(a,b,{configurable:!0,get:function(){return e.call(this)},set:function(a){d=\"\"+a;f.call(this,a)}});Object.defineProperty(a,b,{enumerable:c.enumerable});return{getValue:function(){return d},setValue:function(a){d=\"\"+a},stopTracking:function(){a._valueTracker=\nnull;delete a[b]}}}}function Va(a){a._valueTracker||(a._valueTracker=Ua(a))}function Wa(a){if(!a)return!1;var b=a._valueTracker;if(!b)return!0;var c=b.getValue();var d=\"\";a&&(d=Ta(a)?a.checked?\"true\":\"false\":a.value);a=d;return a!==c?(b.setValue(a),!0):!1}function Xa(a){a=a||(\"undefined\"!==typeof document?document:void 0);if(\"undefined\"===typeof a)return null;try{return a.activeElement||a.body}catch(b){return a.body}}\nfunction Ya(a,b){var c=b.checked;return A({},b,{defaultChecked:void 0,defaultValue:void 0,value:void 0,checked:null!=c?c:a._wrapperState.initialChecked})}function Za(a,b){var c=null==b.defaultValue?\"\":b.defaultValue,d=null!=b.checked?b.checked:b.defaultChecked;c=Sa(null!=b.value?b.value:c);a._wrapperState={initialChecked:d,initialValue:c,controlled:\"checkbox\"===b.type||\"radio\"===b.type?null!=b.checked:null!=b.value}}function ab(a,b){b=b.checked;null!=b&&ta(a,\"checked\",b,!1)}\nfunction bb(a,b){ab(a,b);var c=Sa(b.value),d=b.type;if(null!=c)if(\"number\"===d){if(0===c&&\"\"===a.value||a.value!=c)a.value=\"\"+c}else a.value!==\"\"+c&&(a.value=\"\"+c);else if(\"submit\"===d||\"reset\"===d){a.removeAttribute(\"value\");return}b.hasOwnProperty(\"value\")?cb(a,b.type,c):b.hasOwnProperty(\"defaultValue\")&&cb(a,b.type,Sa(b.defaultValue));null==b.checked&&null!=b.defaultChecked&&(a.defaultChecked=!!b.defaultChecked)}\nfunction db(a,b,c){if(b.hasOwnProperty(\"value\")||b.hasOwnProperty(\"defaultValue\")){var d=b.type;if(!(\"submit\"!==d&&\"reset\"!==d||void 0!==b.value&&null!==b.value))return;b=\"\"+a._wrapperState.initialValue;c||b===a.value||(a.value=b);a.defaultValue=b}c=a.name;\"\"!==c&&(a.name=\"\");a.defaultChecked=!!a._wrapperState.initialChecked;\"\"!==c&&(a.name=c)}\nfunction cb(a,b,c){if(\"number\"!==b||Xa(a.ownerDocument)!==a)null==c?a.defaultValue=\"\"+a._wrapperState.initialValue:a.defaultValue!==\"\"+c&&(a.defaultValue=\"\"+c)}var eb=Array.isArray;\nfunction fb(a,b,c,d){a=a.options;if(b){b={};for(var e=0;e\"+b.valueOf().toString()+\"\";for(b=mb.firstChild;a.firstChild;)a.removeChild(a.firstChild);for(;b.firstChild;)a.appendChild(b.firstChild)}});\nfunction ob(a,b){if(b){var c=a.firstChild;if(c&&c===a.lastChild&&3===c.nodeType){c.nodeValue=b;return}}a.textContent=b}\nvar pb={animationIterationCount:!0,aspectRatio:!0,borderImageOutset:!0,borderImageSlice:!0,borderImageWidth:!0,boxFlex:!0,boxFlexGroup:!0,boxOrdinalGroup:!0,columnCount:!0,columns:!0,flex:!0,flexGrow:!0,flexPositive:!0,flexShrink:!0,flexNegative:!0,flexOrder:!0,gridArea:!0,gridRow:!0,gridRowEnd:!0,gridRowSpan:!0,gridRowStart:!0,gridColumn:!0,gridColumnEnd:!0,gridColumnSpan:!0,gridColumnStart:!0,fontWeight:!0,lineClamp:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,tabSize:!0,widows:!0,zIndex:!0,\nzoom:!0,fillOpacity:!0,floodOpacity:!0,stopOpacity:!0,strokeDasharray:!0,strokeDashoffset:!0,strokeMiterlimit:!0,strokeOpacity:!0,strokeWidth:!0},qb=[\"Webkit\",\"ms\",\"Moz\",\"O\"];Object.keys(pb).forEach(function(a){qb.forEach(function(b){b=b+a.charAt(0).toUpperCase()+a.substring(1);pb[b]=pb[a]})});function rb(a,b,c){return null==b||\"boolean\"===typeof b||\"\"===b?\"\":c||\"number\"!==typeof b||0===b||pb.hasOwnProperty(a)&&pb[a]?(\"\"+b).trim():b+\"px\"}\nfunction sb(a,b){a=a.style;for(var c in b)if(b.hasOwnProperty(c)){var d=0===c.indexOf(\"--\"),e=rb(c,b[c],d);\"float\"===c&&(c=\"cssFloat\");d?a.setProperty(c,e):a[c]=e}}var tb=A({menuitem:!0},{area:!0,base:!0,br:!0,col:!0,embed:!0,hr:!0,img:!0,input:!0,keygen:!0,link:!0,meta:!0,param:!0,source:!0,track:!0,wbr:!0});\nfunction ub(a,b){if(b){if(tb[a]&&(null!=b.children||null!=b.dangerouslySetInnerHTML))throw Error(p(137,a));if(null!=b.dangerouslySetInnerHTML){if(null!=b.children)throw Error(p(60));if(\"object\"!==typeof b.dangerouslySetInnerHTML||!(\"__html\"in b.dangerouslySetInnerHTML))throw Error(p(61));}if(null!=b.style&&\"object\"!==typeof b.style)throw Error(p(62));}}\nfunction vb(a,b){if(-1===a.indexOf(\"-\"))return\"string\"===typeof b.is;switch(a){case \"annotation-xml\":case \"color-profile\":case \"font-face\":case \"font-face-src\":case \"font-face-uri\":case \"font-face-format\":case \"font-face-name\":case \"missing-glyph\":return!1;default:return!0}}var wb=null;function xb(a){a=a.target||a.srcElement||window;a.correspondingUseElement&&(a=a.correspondingUseElement);return 3===a.nodeType?a.parentNode:a}var yb=null,zb=null,Ab=null;\nfunction Bb(a){if(a=Cb(a)){if(\"function\"!==typeof yb)throw Error(p(280));var b=a.stateNode;b&&(b=Db(b),yb(a.stateNode,a.type,b))}}function Eb(a){zb?Ab?Ab.push(a):Ab=[a]:zb=a}function Fb(){if(zb){var a=zb,b=Ab;Ab=zb=null;Bb(a);if(b)for(a=0;a>>=0;return 0===a?32:31-(pc(a)/qc|0)|0}var rc=64,sc=4194304;\nfunction tc(a){switch(a&-a){case 1:return 1;case 2:return 2;case 4:return 4;case 8:return 8;case 16:return 16;case 32:return 32;case 64:case 128:case 256:case 512:case 1024:case 2048:case 4096:case 8192:case 16384:case 32768:case 65536:case 131072:case 262144:case 524288:case 1048576:case 2097152:return a&4194240;case 4194304:case 8388608:case 16777216:case 33554432:case 67108864:return a&130023424;case 134217728:return 134217728;case 268435456:return 268435456;case 536870912:return 536870912;case 1073741824:return 1073741824;\ndefault:return a}}function uc(a,b){var c=a.pendingLanes;if(0===c)return 0;var d=0,e=a.suspendedLanes,f=a.pingedLanes,g=c&268435455;if(0!==g){var h=g&~e;0!==h?d=tc(h):(f&=g,0!==f&&(d=tc(f)))}else g=c&~e,0!==g?d=tc(g):0!==f&&(d=tc(f));if(0===d)return 0;if(0!==b&&b!==d&&0===(b&e)&&(e=d&-d,f=b&-b,e>=f||16===e&&0!==(f&4194240)))return b;0!==(d&4)&&(d|=c&16);b=a.entangledLanes;if(0!==b)for(a=a.entanglements,b&=d;0c;c++)b.push(a);return b}\nfunction Ac(a,b,c){a.pendingLanes|=b;536870912!==b&&(a.suspendedLanes=0,a.pingedLanes=0);a=a.eventTimes;b=31-oc(b);a[b]=c}function Bc(a,b){var c=a.pendingLanes&~b;a.pendingLanes=b;a.suspendedLanes=0;a.pingedLanes=0;a.expiredLanes&=b;a.mutableReadLanes&=b;a.entangledLanes&=b;b=a.entanglements;var d=a.eventTimes;for(a=a.expirationTimes;0=be),ee=String.fromCharCode(32),fe=!1;\nfunction ge(a,b){switch(a){case \"keyup\":return-1!==$d.indexOf(b.keyCode);case \"keydown\":return 229!==b.keyCode;case \"keypress\":case \"mousedown\":case \"focusout\":return!0;default:return!1}}function he(a){a=a.detail;return\"object\"===typeof a&&\"data\"in a?a.data:null}var ie=!1;function je(a,b){switch(a){case \"compositionend\":return he(b);case \"keypress\":if(32!==b.which)return null;fe=!0;return ee;case \"textInput\":return a=b.data,a===ee&&fe?null:a;default:return null}}\nfunction ke(a,b){if(ie)return\"compositionend\"===a||!ae&&ge(a,b)?(a=nd(),md=ld=kd=null,ie=!1,a):null;switch(a){case \"paste\":return null;case \"keypress\":if(!(b.ctrlKey||b.altKey||b.metaKey)||b.ctrlKey&&b.altKey){if(b.char&&1=b)return{node:c,offset:b-a};a=d}a:{for(;c;){if(c.nextSibling){c=c.nextSibling;break a}c=c.parentNode}c=void 0}c=Je(c)}}function Le(a,b){return a&&b?a===b?!0:a&&3===a.nodeType?!1:b&&3===b.nodeType?Le(a,b.parentNode):\"contains\"in a?a.contains(b):a.compareDocumentPosition?!!(a.compareDocumentPosition(b)&16):!1:!1}\nfunction Me(){for(var a=window,b=Xa();b instanceof a.HTMLIFrameElement;){try{var c=\"string\"===typeof b.contentWindow.location.href}catch(d){c=!1}if(c)a=b.contentWindow;else break;b=Xa(a.document)}return b}function Ne(a){var b=a&&a.nodeName&&a.nodeName.toLowerCase();return b&&(\"input\"===b&&(\"text\"===a.type||\"search\"===a.type||\"tel\"===a.type||\"url\"===a.type||\"password\"===a.type)||\"textarea\"===b||\"true\"===a.contentEditable)}\nfunction Oe(a){var b=Me(),c=a.focusedElem,d=a.selectionRange;if(b!==c&&c&&c.ownerDocument&&Le(c.ownerDocument.documentElement,c)){if(null!==d&&Ne(c))if(b=d.start,a=d.end,void 0===a&&(a=b),\"selectionStart\"in c)c.selectionStart=b,c.selectionEnd=Math.min(a,c.value.length);else if(a=(b=c.ownerDocument||document)&&b.defaultView||window,a.getSelection){a=a.getSelection();var e=c.textContent.length,f=Math.min(d.start,e);d=void 0===d.end?f:Math.min(d.end,e);!a.extend&&f>d&&(e=d,d=f,f=e);e=Ke(c,f);var g=Ke(c,\nd);e&&g&&(1!==a.rangeCount||a.anchorNode!==e.node||a.anchorOffset!==e.offset||a.focusNode!==g.node||a.focusOffset!==g.offset)&&(b=b.createRange(),b.setStart(e.node,e.offset),a.removeAllRanges(),f>d?(a.addRange(b),a.extend(g.node,g.offset)):(b.setEnd(g.node,g.offset),a.addRange(b)))}b=[];for(a=c;a=a.parentNode;)1===a.nodeType&&b.push({element:a,left:a.scrollLeft,top:a.scrollTop});\"function\"===typeof c.focus&&c.focus();for(c=0;c=document.documentMode,Qe=null,Re=null,Se=null,Te=!1;\nfunction Ue(a,b,c){var d=c.window===c?c.document:9===c.nodeType?c:c.ownerDocument;Te||null==Qe||Qe!==Xa(d)||(d=Qe,\"selectionStart\"in d&&Ne(d)?d={start:d.selectionStart,end:d.selectionEnd}:(d=(d.ownerDocument&&d.ownerDocument.defaultView||window).getSelection(),d={anchorNode:d.anchorNode,anchorOffset:d.anchorOffset,focusNode:d.focusNode,focusOffset:d.focusOffset}),Se&&Ie(Se,d)||(Se=d,d=oe(Re,\"onSelect\"),0Tf||(a.current=Sf[Tf],Sf[Tf]=null,Tf--)}function G(a,b){Tf++;Sf[Tf]=a.current;a.current=b}var Vf={},H=Uf(Vf),Wf=Uf(!1),Xf=Vf;function Yf(a,b){var c=a.type.contextTypes;if(!c)return Vf;var d=a.stateNode;if(d&&d.__reactInternalMemoizedUnmaskedChildContext===b)return d.__reactInternalMemoizedMaskedChildContext;var e={},f;for(f in c)e[f]=b[f];d&&(a=a.stateNode,a.__reactInternalMemoizedUnmaskedChildContext=b,a.__reactInternalMemoizedMaskedChildContext=e);return e}\nfunction Zf(a){a=a.childContextTypes;return null!==a&&void 0!==a}function $f(){E(Wf);E(H)}function ag(a,b,c){if(H.current!==Vf)throw Error(p(168));G(H,b);G(Wf,c)}function bg(a,b,c){var d=a.stateNode;b=b.childContextTypes;if(\"function\"!==typeof d.getChildContext)return c;d=d.getChildContext();for(var e in d)if(!(e in b))throw Error(p(108,Ra(a)||\"Unknown\",e));return A({},c,d)}\nfunction cg(a){a=(a=a.stateNode)&&a.__reactInternalMemoizedMergedChildContext||Vf;Xf=H.current;G(H,a);G(Wf,Wf.current);return!0}function dg(a,b,c){var d=a.stateNode;if(!d)throw Error(p(169));c?(a=bg(a,b,Xf),d.__reactInternalMemoizedMergedChildContext=a,E(Wf),E(H),G(H,a)):E(Wf);G(Wf,c)}var eg=null,fg=!1,gg=!1;function hg(a){null===eg?eg=[a]:eg.push(a)}function ig(a){fg=!0;hg(a)}\nfunction jg(){if(!gg&&null!==eg){gg=!0;var a=0,b=C;try{var c=eg;for(C=1;a>=g;e-=g;rg=1<<32-oc(b)+e|c<w?(x=u,u=null):x=u.sibling;var n=r(e,u,h[w],k);if(null===n){null===u&&(u=x);break}a&&u&&null===n.alternate&&b(e,u);g=f(n,g,w);null===m?l=n:m.sibling=n;m=n;u=x}if(w===h.length)return c(e,u),I&&tg(e,w),l;if(null===u){for(;ww?(x=m,m=null):x=m.sibling;var t=r(e,m,n.value,k);if(null===t){null===m&&(m=x);break}a&&m&&null===t.alternate&&b(e,m);g=f(t,g,w);null===u?l=t:u.sibling=t;u=t;m=x}if(n.done)return c(e,\nm),I&&tg(e,w),l;if(null===m){for(;!n.done;w++,n=h.next())n=q(e,n.value,k),null!==n&&(g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);I&&tg(e,w);return l}for(m=d(e,m);!n.done;w++,n=h.next())n=y(m,e,w,n.value,k),null!==n&&(a&&null!==n.alternate&&m.delete(null===n.key?w:n.key),g=f(n,g,w),null===u?l=n:u.sibling=n,u=n);a&&m.forEach(function(a){return b(e,a)});I&&tg(e,w);return l}function J(a,d,f,h){\"object\"===typeof f&&null!==f&&f.type===ya&&null===f.key&&(f=f.props.children);if(\"object\"===typeof f&&null!==f){switch(f.$$typeof){case va:a:{for(var k=\nf.key,l=d;null!==l;){if(l.key===k){k=f.type;if(k===ya){if(7===l.tag){c(a,l.sibling);d=e(l,f.props.children);d.return=a;a=d;break a}}else if(l.elementType===k||\"object\"===typeof k&&null!==k&&k.$$typeof===Ha&&Ng(k)===l.type){c(a,l.sibling);d=e(l,f.props);d.ref=Lg(a,l,f);d.return=a;a=d;break a}c(a,l);break}else b(a,l);l=l.sibling}f.type===ya?(d=Tg(f.props.children,a.mode,h,f.key),d.return=a,a=d):(h=Rg(f.type,f.key,f.props,null,a.mode,h),h.ref=Lg(a,d,f),h.return=a,a=h)}return g(a);case wa:a:{for(l=f.key;null!==\nd;){if(d.key===l)if(4===d.tag&&d.stateNode.containerInfo===f.containerInfo&&d.stateNode.implementation===f.implementation){c(a,d.sibling);d=e(d,f.children||[]);d.return=a;a=d;break a}else{c(a,d);break}else b(a,d);d=d.sibling}d=Sg(f,a.mode,h);d.return=a;a=d}return g(a);case Ha:return l=f._init,J(a,d,l(f._payload),h)}if(eb(f))return n(a,d,f,h);if(Ka(f))return t(a,d,f,h);Mg(a,f)}return\"string\"===typeof f&&\"\"!==f||\"number\"===typeof f?(f=\"\"+f,null!==d&&6===d.tag?(c(a,d.sibling),d=e(d,f),d.return=a,a=d):\n(c(a,d),d=Qg(f,a.mode,h),d.return=a,a=d),g(a)):c(a,d)}return J}var Ug=Og(!0),Vg=Og(!1),Wg=Uf(null),Xg=null,Yg=null,Zg=null;function $g(){Zg=Yg=Xg=null}function ah(a){var b=Wg.current;E(Wg);a._currentValue=b}function bh(a,b,c){for(;null!==a;){var d=a.alternate;(a.childLanes&b)!==b?(a.childLanes|=b,null!==d&&(d.childLanes|=b)):null!==d&&(d.childLanes&b)!==b&&(d.childLanes|=b);if(a===c)break;a=a.return}}\nfunction ch(a,b){Xg=a;Zg=Yg=null;a=a.dependencies;null!==a&&null!==a.firstContext&&(0!==(a.lanes&b)&&(dh=!0),a.firstContext=null)}function eh(a){var b=a._currentValue;if(Zg!==a)if(a={context:a,memoizedValue:b,next:null},null===Yg){if(null===Xg)throw Error(p(308));Yg=a;Xg.dependencies={lanes:0,firstContext:a}}else Yg=Yg.next=a;return b}var fh=null;function gh(a){null===fh?fh=[a]:fh.push(a)}\nfunction hh(a,b,c,d){var e=b.interleaved;null===e?(c.next=c,gh(b)):(c.next=e.next,e.next=c);b.interleaved=c;return ih(a,d)}function ih(a,b){a.lanes|=b;var c=a.alternate;null!==c&&(c.lanes|=b);c=a;for(a=a.return;null!==a;)a.childLanes|=b,c=a.alternate,null!==c&&(c.childLanes|=b),c=a,a=a.return;return 3===c.tag?c.stateNode:null}var jh=!1;function kh(a){a.updateQueue={baseState:a.memoizedState,firstBaseUpdate:null,lastBaseUpdate:null,shared:{pending:null,interleaved:null,lanes:0},effects:null}}\nfunction lh(a,b){a=a.updateQueue;b.updateQueue===a&&(b.updateQueue={baseState:a.baseState,firstBaseUpdate:a.firstBaseUpdate,lastBaseUpdate:a.lastBaseUpdate,shared:a.shared,effects:a.effects})}function mh(a,b){return{eventTime:a,lane:b,tag:0,payload:null,callback:null,next:null}}\nfunction nh(a,b,c){var d=a.updateQueue;if(null===d)return null;d=d.shared;if(0!==(K&2)){var e=d.pending;null===e?b.next=b:(b.next=e.next,e.next=b);d.pending=b;return ih(a,c)}e=d.interleaved;null===e?(b.next=b,gh(d)):(b.next=e.next,e.next=b);d.interleaved=b;return ih(a,c)}function oh(a,b,c){b=b.updateQueue;if(null!==b&&(b=b.shared,0!==(c&4194240))){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nfunction ph(a,b){var c=a.updateQueue,d=a.alternate;if(null!==d&&(d=d.updateQueue,c===d)){var e=null,f=null;c=c.firstBaseUpdate;if(null!==c){do{var g={eventTime:c.eventTime,lane:c.lane,tag:c.tag,payload:c.payload,callback:c.callback,next:null};null===f?e=f=g:f=f.next=g;c=c.next}while(null!==c);null===f?e=f=b:f=f.next=b}else e=f=b;c={baseState:d.baseState,firstBaseUpdate:e,lastBaseUpdate:f,shared:d.shared,effects:d.effects};a.updateQueue=c;return}a=c.lastBaseUpdate;null===a?c.firstBaseUpdate=b:a.next=\nb;c.lastBaseUpdate=b}\nfunction qh(a,b,c,d){var e=a.updateQueue;jh=!1;var f=e.firstBaseUpdate,g=e.lastBaseUpdate,h=e.shared.pending;if(null!==h){e.shared.pending=null;var k=h,l=k.next;k.next=null;null===g?f=l:g.next=l;g=k;var m=a.alternate;null!==m&&(m=m.updateQueue,h=m.lastBaseUpdate,h!==g&&(null===h?m.firstBaseUpdate=l:h.next=l,m.lastBaseUpdate=k))}if(null!==f){var q=e.baseState;g=0;m=l=k=null;h=f;do{var r=h.lane,y=h.eventTime;if((d&r)===r){null!==m&&(m=m.next={eventTime:y,lane:0,tag:h.tag,payload:h.payload,callback:h.callback,\nnext:null});a:{var n=a,t=h;r=b;y=c;switch(t.tag){case 1:n=t.payload;if(\"function\"===typeof n){q=n.call(y,q,r);break a}q=n;break a;case 3:n.flags=n.flags&-65537|128;case 0:n=t.payload;r=\"function\"===typeof n?n.call(y,q,r):n;if(null===r||void 0===r)break a;q=A({},q,r);break a;case 2:jh=!0}}null!==h.callback&&0!==h.lane&&(a.flags|=64,r=e.effects,null===r?e.effects=[h]:r.push(h))}else y={eventTime:y,lane:r,tag:h.tag,payload:h.payload,callback:h.callback,next:null},null===m?(l=m=y,k=q):m=m.next=y,g|=r;\nh=h.next;if(null===h)if(h=e.shared.pending,null===h)break;else r=h,h=r.next,r.next=null,e.lastBaseUpdate=r,e.shared.pending=null}while(1);null===m&&(k=q);e.baseState=k;e.firstBaseUpdate=l;e.lastBaseUpdate=m;b=e.shared.interleaved;if(null!==b){e=b;do g|=e.lane,e=e.next;while(e!==b)}else null===f&&(e.shared.lanes=0);rh|=g;a.lanes=g;a.memoizedState=q}}\nfunction sh(a,b,c){a=b.effects;b.effects=null;if(null!==a)for(b=0;bc?c:4;a(!0);var d=Gh.transition;Gh.transition={};try{a(!1),b()}finally{C=c,Gh.transition=d}}function wi(){return Uh().memoizedState}\nfunction xi(a,b,c){var d=yi(a);c={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,c);else if(c=hh(a,b,c,d),null!==c){var e=R();gi(c,a,d,e);Bi(c,b,d)}}\nfunction ii(a,b,c){var d=yi(a),e={lane:d,action:c,hasEagerState:!1,eagerState:null,next:null};if(zi(a))Ai(b,e);else{var f=a.alternate;if(0===a.lanes&&(null===f||0===f.lanes)&&(f=b.lastRenderedReducer,null!==f))try{var g=b.lastRenderedState,h=f(g,c);e.hasEagerState=!0;e.eagerState=h;if(He(h,g)){var k=b.interleaved;null===k?(e.next=e,gh(b)):(e.next=k.next,k.next=e);b.interleaved=e;return}}catch(l){}finally{}c=hh(a,b,e,d);null!==c&&(e=R(),gi(c,a,d,e),Bi(c,b,d))}}\nfunction zi(a){var b=a.alternate;return a===M||null!==b&&b===M}function Ai(a,b){Jh=Ih=!0;var c=a.pending;null===c?b.next=b:(b.next=c.next,c.next=b);a.pending=b}function Bi(a,b,c){if(0!==(c&4194240)){var d=b.lanes;d&=a.pendingLanes;c|=d;b.lanes=c;Cc(a,c)}}\nvar Rh={readContext:eh,useCallback:P,useContext:P,useEffect:P,useImperativeHandle:P,useInsertionEffect:P,useLayoutEffect:P,useMemo:P,useReducer:P,useRef:P,useState:P,useDebugValue:P,useDeferredValue:P,useTransition:P,useMutableSource:P,useSyncExternalStore:P,useId:P,unstable_isNewReconciler:!1},Oh={readContext:eh,useCallback:function(a,b){Th().memoizedState=[a,void 0===b?null:b];return a},useContext:eh,useEffect:mi,useImperativeHandle:function(a,b,c){c=null!==c&&void 0!==c?c.concat([a]):null;return ki(4194308,\n4,pi.bind(null,b,a),c)},useLayoutEffect:function(a,b){return ki(4194308,4,a,b)},useInsertionEffect:function(a,b){return ki(4,2,a,b)},useMemo:function(a,b){var c=Th();b=void 0===b?null:b;a=a();c.memoizedState=[a,b];return a},useReducer:function(a,b,c){var d=Th();b=void 0!==c?c(b):b;d.memoizedState=d.baseState=b;a={pending:null,interleaved:null,lanes:0,dispatch:null,lastRenderedReducer:a,lastRenderedState:b};d.queue=a;a=a.dispatch=xi.bind(null,M,a);return[d.memoizedState,a]},useRef:function(a){var b=\nTh();a={current:a};return b.memoizedState=a},useState:hi,useDebugValue:ri,useDeferredValue:function(a){return Th().memoizedState=a},useTransition:function(){var a=hi(!1),b=a[0];a=vi.bind(null,a[1]);Th().memoizedState=a;return[b,a]},useMutableSource:function(){},useSyncExternalStore:function(a,b,c){var d=M,e=Th();if(I){if(void 0===c)throw Error(p(407));c=c()}else{c=b();if(null===Q)throw Error(p(349));0!==(Hh&30)||di(d,b,c)}e.memoizedState=c;var f={value:c,getSnapshot:b};e.queue=f;mi(ai.bind(null,d,\nf,a),[a]);d.flags|=2048;bi(9,ci.bind(null,d,f,c,b),void 0,null);return c},useId:function(){var a=Th(),b=Q.identifierPrefix;if(I){var c=sg;var d=rg;c=(d&~(1<<32-oc(d)-1)).toString(32)+c;b=\":\"+b+\"R\"+c;c=Kh++;0\\x3c/script>\",a=a.removeChild(a.firstChild)):\n\"string\"===typeof d.is?a=g.createElement(c,{is:d.is}):(a=g.createElement(c),\"select\"===c&&(g=a,d.multiple?g.multiple=!0:d.size&&(g.size=d.size))):a=g.createElementNS(a,c);a[Of]=b;a[Pf]=d;zj(a,b,!1,!1);b.stateNode=a;a:{g=vb(c,d);switch(c){case \"dialog\":D(\"cancel\",a);D(\"close\",a);e=d;break;case \"iframe\":case \"object\":case \"embed\":D(\"load\",a);e=d;break;case \"video\":case \"audio\":for(e=0;eGj&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304)}else{if(!d)if(a=Ch(g),null!==a){if(b.flags|=128,d=!0,c=a.updateQueue,null!==c&&(b.updateQueue=c,b.flags|=4),Dj(f,!0),null===f.tail&&\"hidden\"===f.tailMode&&!g.alternate&&!I)return S(b),null}else 2*B()-f.renderingStartTime>Gj&&1073741824!==c&&(b.flags|=128,d=!0,Dj(f,!1),b.lanes=4194304);f.isBackwards?(g.sibling=b.child,b.child=g):(c=f.last,null!==c?c.sibling=g:b.child=g,f.last=g)}if(null!==f.tail)return b=f.tail,f.rendering=\nb,f.tail=b.sibling,f.renderingStartTime=B(),b.sibling=null,c=L.current,G(L,d?c&1|2:c&1),b;S(b);return null;case 22:case 23:return Hj(),d=null!==b.memoizedState,null!==a&&null!==a.memoizedState!==d&&(b.flags|=8192),d&&0!==(b.mode&1)?0!==(fj&1073741824)&&(S(b),b.subtreeFlags&6&&(b.flags|=8192)):S(b),null;case 24:return null;case 25:return null}throw Error(p(156,b.tag));}\nfunction Ij(a,b){wg(b);switch(b.tag){case 1:return Zf(b.type)&&$f(),a=b.flags,a&65536?(b.flags=a&-65537|128,b):null;case 3:return zh(),E(Wf),E(H),Eh(),a=b.flags,0!==(a&65536)&&0===(a&128)?(b.flags=a&-65537|128,b):null;case 5:return Bh(b),null;case 13:E(L);a=b.memoizedState;if(null!==a&&null!==a.dehydrated){if(null===b.alternate)throw Error(p(340));Ig()}a=b.flags;return a&65536?(b.flags=a&-65537|128,b):null;case 19:return E(L),null;case 4:return zh(),null;case 10:return ah(b.type._context),null;case 22:case 23:return Hj(),\nnull;case 24:return null;default:return null}}var Jj=!1,U=!1,Kj=\"function\"===typeof WeakSet?WeakSet:Set,V=null;function Lj(a,b){var c=a.ref;if(null!==c)if(\"function\"===typeof c)try{c(null)}catch(d){W(a,b,d)}else c.current=null}function Mj(a,b,c){try{c()}catch(d){W(a,b,d)}}var Nj=!1;\nfunction Oj(a,b){Cf=dd;a=Me();if(Ne(a)){if(\"selectionStart\"in a)var c={start:a.selectionStart,end:a.selectionEnd};else a:{c=(c=a.ownerDocument)&&c.defaultView||window;var d=c.getSelection&&c.getSelection();if(d&&0!==d.rangeCount){c=d.anchorNode;var e=d.anchorOffset,f=d.focusNode;d=d.focusOffset;try{c.nodeType,f.nodeType}catch(F){c=null;break a}var g=0,h=-1,k=-1,l=0,m=0,q=a,r=null;b:for(;;){for(var y;;){q!==c||0!==e&&3!==q.nodeType||(h=g+e);q!==f||0!==d&&3!==q.nodeType||(k=g+d);3===q.nodeType&&(g+=\nq.nodeValue.length);if(null===(y=q.firstChild))break;r=q;q=y}for(;;){if(q===a)break b;r===c&&++l===e&&(h=g);r===f&&++m===d&&(k=g);if(null!==(y=q.nextSibling))break;q=r;r=q.parentNode}q=y}c=-1===h||-1===k?null:{start:h,end:k}}else c=null}c=c||{start:0,end:0}}else c=null;Df={focusedElem:a,selectionRange:c};dd=!1;for(V=b;null!==V;)if(b=V,a=b.child,0!==(b.subtreeFlags&1028)&&null!==a)a.return=b,V=a;else for(;null!==V;){b=V;try{var n=b.alternate;if(0!==(b.flags&1024))switch(b.tag){case 0:case 11:case 15:break;\ncase 1:if(null!==n){var t=n.memoizedProps,J=n.memoizedState,x=b.stateNode,w=x.getSnapshotBeforeUpdate(b.elementType===b.type?t:Ci(b.type,t),J);x.__reactInternalSnapshotBeforeUpdate=w}break;case 3:var u=b.stateNode.containerInfo;1===u.nodeType?u.textContent=\"\":9===u.nodeType&&u.documentElement&&u.removeChild(u.documentElement);break;case 5:case 6:case 4:case 17:break;default:throw Error(p(163));}}catch(F){W(b,b.return,F)}a=b.sibling;if(null!==a){a.return=b.return;V=a;break}V=b.return}n=Nj;Nj=!1;return n}\nfunction Pj(a,b,c){var d=b.updateQueue;d=null!==d?d.lastEffect:null;if(null!==d){var e=d=d.next;do{if((e.tag&a)===a){var f=e.destroy;e.destroy=void 0;void 0!==f&&Mj(b,c,f)}e=e.next}while(e!==d)}}function Qj(a,b){b=b.updateQueue;b=null!==b?b.lastEffect:null;if(null!==b){var c=b=b.next;do{if((c.tag&a)===a){var d=c.create;c.destroy=d()}c=c.next}while(c!==b)}}function Rj(a){var b=a.ref;if(null!==b){var c=a.stateNode;switch(a.tag){case 5:a=c;break;default:a=c}\"function\"===typeof b?b(a):b.current=a}}\nfunction Sj(a){var b=a.alternate;null!==b&&(a.alternate=null,Sj(b));a.child=null;a.deletions=null;a.sibling=null;5===a.tag&&(b=a.stateNode,null!==b&&(delete b[Of],delete b[Pf],delete b[of],delete b[Qf],delete b[Rf]));a.stateNode=null;a.return=null;a.dependencies=null;a.memoizedProps=null;a.memoizedState=null;a.pendingProps=null;a.stateNode=null;a.updateQueue=null}function Tj(a){return 5===a.tag||3===a.tag||4===a.tag}\nfunction Uj(a){a:for(;;){for(;null===a.sibling;){if(null===a.return||Tj(a.return))return null;a=a.return}a.sibling.return=a.return;for(a=a.sibling;5!==a.tag&&6!==a.tag&&18!==a.tag;){if(a.flags&2)continue a;if(null===a.child||4===a.tag)continue a;else a.child.return=a,a=a.child}if(!(a.flags&2))return a.stateNode}}\nfunction Vj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?8===c.nodeType?c.parentNode.insertBefore(a,b):c.insertBefore(a,b):(8===c.nodeType?(b=c.parentNode,b.insertBefore(a,c)):(b=c,b.appendChild(a)),c=c._reactRootContainer,null!==c&&void 0!==c||null!==b.onclick||(b.onclick=Bf));else if(4!==d&&(a=a.child,null!==a))for(Vj(a,b,c),a=a.sibling;null!==a;)Vj(a,b,c),a=a.sibling}\nfunction Wj(a,b,c){var d=a.tag;if(5===d||6===d)a=a.stateNode,b?c.insertBefore(a,b):c.appendChild(a);else if(4!==d&&(a=a.child,null!==a))for(Wj(a,b,c),a=a.sibling;null!==a;)Wj(a,b,c),a=a.sibling}var X=null,Xj=!1;function Yj(a,b,c){for(c=c.child;null!==c;)Zj(a,b,c),c=c.sibling}\nfunction Zj(a,b,c){if(lc&&\"function\"===typeof lc.onCommitFiberUnmount)try{lc.onCommitFiberUnmount(kc,c)}catch(h){}switch(c.tag){case 5:U||Lj(c,b);case 6:var d=X,e=Xj;X=null;Yj(a,b,c);X=d;Xj=e;null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?a.parentNode.removeChild(c):a.removeChild(c)):X.removeChild(c.stateNode));break;case 18:null!==X&&(Xj?(a=X,c=c.stateNode,8===a.nodeType?Kf(a.parentNode,c):1===a.nodeType&&Kf(a,c),bd(a)):Kf(X,c.stateNode));break;case 4:d=X;e=Xj;X=c.stateNode.containerInfo;Xj=!0;\nYj(a,b,c);X=d;Xj=e;break;case 0:case 11:case 14:case 15:if(!U&&(d=c.updateQueue,null!==d&&(d=d.lastEffect,null!==d))){e=d=d.next;do{var f=e,g=f.destroy;f=f.tag;void 0!==g&&(0!==(f&2)?Mj(c,b,g):0!==(f&4)&&Mj(c,b,g));e=e.next}while(e!==d)}Yj(a,b,c);break;case 1:if(!U&&(Lj(c,b),d=c.stateNode,\"function\"===typeof d.componentWillUnmount))try{d.props=c.memoizedProps,d.state=c.memoizedState,d.componentWillUnmount()}catch(h){W(c,b,h)}Yj(a,b,c);break;case 21:Yj(a,b,c);break;case 22:c.mode&1?(U=(d=U)||null!==\nc.memoizedState,Yj(a,b,c),U=d):Yj(a,b,c);break;default:Yj(a,b,c)}}function ak(a){var b=a.updateQueue;if(null!==b){a.updateQueue=null;var c=a.stateNode;null===c&&(c=a.stateNode=new Kj);b.forEach(function(b){var d=bk.bind(null,a,b);c.has(b)||(c.add(b),b.then(d,d))})}}\nfunction ck(a,b){var c=b.deletions;if(null!==c)for(var d=0;de&&(e=g);d&=~f}d=e;d=B()-d;d=(120>d?120:480>d?480:1080>d?1080:1920>d?1920:3E3>d?3E3:4320>d?4320:1960*lk(d/1960))-d;if(10a?16:a;if(null===wk)var d=!1;else{a=wk;wk=null;xk=0;if(0!==(K&6))throw Error(p(331));var e=K;K|=4;for(V=a.current;null!==V;){var f=V,g=f.child;if(0!==(V.flags&16)){var h=f.deletions;if(null!==h){for(var k=0;kB()-fk?Kk(a,0):rk|=c);Dk(a,b)}function Yk(a,b){0===b&&(0===(a.mode&1)?b=1:(b=sc,sc<<=1,0===(sc&130023424)&&(sc=4194304)));var c=R();a=ih(a,b);null!==a&&(Ac(a,b,c),Dk(a,c))}function uj(a){var b=a.memoizedState,c=0;null!==b&&(c=b.retryLane);Yk(a,c)}\nfunction bk(a,b){var c=0;switch(a.tag){case 13:var d=a.stateNode;var e=a.memoizedState;null!==e&&(c=e.retryLane);break;case 19:d=a.stateNode;break;default:throw Error(p(314));}null!==d&&d.delete(b);Yk(a,c)}var Vk;\nVk=function(a,b,c){if(null!==a)if(a.memoizedProps!==b.pendingProps||Wf.current)dh=!0;else{if(0===(a.lanes&c)&&0===(b.flags&128))return dh=!1,yj(a,b,c);dh=0!==(a.flags&131072)?!0:!1}else dh=!1,I&&0!==(b.flags&1048576)&&ug(b,ng,b.index);b.lanes=0;switch(b.tag){case 2:var d=b.type;ij(a,b);a=b.pendingProps;var e=Yf(b,H.current);ch(b,c);e=Nh(null,b,d,a,e,c);var f=Sh();b.flags|=1;\"object\"===typeof e&&null!==e&&\"function\"===typeof e.render&&void 0===e.$$typeof?(b.tag=1,b.memoizedState=null,b.updateQueue=\nnull,Zf(d)?(f=!0,cg(b)):f=!1,b.memoizedState=null!==e.state&&void 0!==e.state?e.state:null,kh(b),e.updater=Ei,b.stateNode=e,e._reactInternals=b,Ii(b,d,a,c),b=jj(null,b,d,!0,f,c)):(b.tag=0,I&&f&&vg(b),Xi(null,b,e,c),b=b.child);return b;case 16:d=b.elementType;a:{ij(a,b);a=b.pendingProps;e=d._init;d=e(d._payload);b.type=d;e=b.tag=Zk(d);a=Ci(d,a);switch(e){case 0:b=cj(null,b,d,a,c);break a;case 1:b=hj(null,b,d,a,c);break a;case 11:b=Yi(null,b,d,a,c);break a;case 14:b=$i(null,b,d,Ci(d.type,a),c);break a}throw Error(p(306,\nd,\"\"));}return b;case 0:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),cj(a,b,d,e,c);case 1:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),hj(a,b,d,e,c);case 3:a:{kj(b);if(null===a)throw Error(p(387));d=b.pendingProps;f=b.memoizedState;e=f.element;lh(a,b);qh(b,d,null,c);var g=b.memoizedState;d=g.element;if(f.isDehydrated)if(f={element:d,isDehydrated:!1,cache:g.cache,pendingSuspenseBoundaries:g.pendingSuspenseBoundaries,transitions:g.transitions},b.updateQueue.baseState=\nf,b.memoizedState=f,b.flags&256){e=Ji(Error(p(423)),b);b=lj(a,b,d,c,e);break a}else if(d!==e){e=Ji(Error(p(424)),b);b=lj(a,b,d,c,e);break a}else for(yg=Lf(b.stateNode.containerInfo.firstChild),xg=b,I=!0,zg=null,c=Vg(b,null,d,c),b.child=c;c;)c.flags=c.flags&-3|4096,c=c.sibling;else{Ig();if(d===e){b=Zi(a,b,c);break a}Xi(a,b,d,c)}b=b.child}return b;case 5:return Ah(b),null===a&&Eg(b),d=b.type,e=b.pendingProps,f=null!==a?a.memoizedProps:null,g=e.children,Ef(d,e)?g=null:null!==f&&Ef(d,f)&&(b.flags|=32),\ngj(a,b),Xi(a,b,g,c),b.child;case 6:return null===a&&Eg(b),null;case 13:return oj(a,b,c);case 4:return yh(b,b.stateNode.containerInfo),d=b.pendingProps,null===a?b.child=Ug(b,null,d,c):Xi(a,b,d,c),b.child;case 11:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),Yi(a,b,d,e,c);case 7:return Xi(a,b,b.pendingProps,c),b.child;case 8:return Xi(a,b,b.pendingProps.children,c),b.child;case 12:return Xi(a,b,b.pendingProps.children,c),b.child;case 10:a:{d=b.type._context;e=b.pendingProps;f=b.memoizedProps;\ng=e.value;G(Wg,d._currentValue);d._currentValue=g;if(null!==f)if(He(f.value,g)){if(f.children===e.children&&!Wf.current){b=Zi(a,b,c);break a}}else for(f=b.child,null!==f&&(f.return=b);null!==f;){var h=f.dependencies;if(null!==h){g=f.child;for(var k=h.firstContext;null!==k;){if(k.context===d){if(1===f.tag){k=mh(-1,c&-c);k.tag=2;var l=f.updateQueue;if(null!==l){l=l.shared;var m=l.pending;null===m?k.next=k:(k.next=m.next,m.next=k);l.pending=k}}f.lanes|=c;k=f.alternate;null!==k&&(k.lanes|=c);bh(f.return,\nc,b);h.lanes|=c;break}k=k.next}}else if(10===f.tag)g=f.type===b.type?null:f.child;else if(18===f.tag){g=f.return;if(null===g)throw Error(p(341));g.lanes|=c;h=g.alternate;null!==h&&(h.lanes|=c);bh(g,c,b);g=f.sibling}else g=f.child;if(null!==g)g.return=f;else for(g=f;null!==g;){if(g===b){g=null;break}f=g.sibling;if(null!==f){f.return=g.return;g=f;break}g=g.return}f=g}Xi(a,b,e.children,c);b=b.child}return b;case 9:return e=b.type,d=b.pendingProps.children,ch(b,c),e=eh(e),d=d(e),b.flags|=1,Xi(a,b,d,c),\nb.child;case 14:return d=b.type,e=Ci(d,b.pendingProps),e=Ci(d.type,e),$i(a,b,d,e,c);case 15:return bj(a,b,b.type,b.pendingProps,c);case 17:return d=b.type,e=b.pendingProps,e=b.elementType===d?e:Ci(d,e),ij(a,b),b.tag=1,Zf(d)?(a=!0,cg(b)):a=!1,ch(b,c),Gi(b,d,e),Ii(b,d,e,c),jj(null,b,d,!0,a,c);case 19:return xj(a,b,c);case 22:return dj(a,b,c)}throw Error(p(156,b.tag));};function Fk(a,b){return ac(a,b)}\nfunction $k(a,b,c,d){this.tag=a;this.key=c;this.sibling=this.child=this.return=this.stateNode=this.type=this.elementType=null;this.index=0;this.ref=null;this.pendingProps=b;this.dependencies=this.memoizedState=this.updateQueue=this.memoizedProps=null;this.mode=d;this.subtreeFlags=this.flags=0;this.deletions=null;this.childLanes=this.lanes=0;this.alternate=null}function Bg(a,b,c,d){return new $k(a,b,c,d)}function aj(a){a=a.prototype;return!(!a||!a.isReactComponent)}\nfunction Zk(a){if(\"function\"===typeof a)return aj(a)?1:0;if(void 0!==a&&null!==a){a=a.$$typeof;if(a===Da)return 11;if(a===Ga)return 14}return 2}\nfunction Pg(a,b){var c=a.alternate;null===c?(c=Bg(a.tag,b,a.key,a.mode),c.elementType=a.elementType,c.type=a.type,c.stateNode=a.stateNode,c.alternate=a,a.alternate=c):(c.pendingProps=b,c.type=a.type,c.flags=0,c.subtreeFlags=0,c.deletions=null);c.flags=a.flags&14680064;c.childLanes=a.childLanes;c.lanes=a.lanes;c.child=a.child;c.memoizedProps=a.memoizedProps;c.memoizedState=a.memoizedState;c.updateQueue=a.updateQueue;b=a.dependencies;c.dependencies=null===b?null:{lanes:b.lanes,firstContext:b.firstContext};\nc.sibling=a.sibling;c.index=a.index;c.ref=a.ref;return c}\nfunction Rg(a,b,c,d,e,f){var g=2;d=a;if(\"function\"===typeof a)aj(a)&&(g=1);else if(\"string\"===typeof a)g=5;else a:switch(a){case ya:return Tg(c.children,e,f,b);case za:g=8;e|=8;break;case Aa:return a=Bg(12,c,b,e|2),a.elementType=Aa,a.lanes=f,a;case Ea:return a=Bg(13,c,b,e),a.elementType=Ea,a.lanes=f,a;case Fa:return a=Bg(19,c,b,e),a.elementType=Fa,a.lanes=f,a;case Ia:return pj(c,e,f,b);default:if(\"object\"===typeof a&&null!==a)switch(a.$$typeof){case Ba:g=10;break a;case Ca:g=9;break a;case Da:g=11;\nbreak a;case Ga:g=14;break a;case Ha:g=16;d=null;break a}throw Error(p(130,null==a?a:typeof a,\"\"));}b=Bg(g,c,b,e);b.elementType=a;b.type=d;b.lanes=f;return b}function Tg(a,b,c,d){a=Bg(7,a,d,b);a.lanes=c;return a}function pj(a,b,c,d){a=Bg(22,a,d,b);a.elementType=Ia;a.lanes=c;a.stateNode={isHidden:!1};return a}function Qg(a,b,c){a=Bg(6,a,null,b);a.lanes=c;return a}\nfunction Sg(a,b,c){b=Bg(4,null!==a.children?a.children:[],a.key,b);b.lanes=c;b.stateNode={containerInfo:a.containerInfo,pendingChildren:null,implementation:a.implementation};return b}\nfunction al(a,b,c,d,e){this.tag=b;this.containerInfo=a;this.finishedWork=this.pingCache=this.current=this.pendingChildren=null;this.timeoutHandle=-1;this.callbackNode=this.pendingContext=this.context=null;this.callbackPriority=0;this.eventTimes=zc(0);this.expirationTimes=zc(-1);this.entangledLanes=this.finishedLanes=this.mutableReadLanes=this.expiredLanes=this.pingedLanes=this.suspendedLanes=this.pendingLanes=0;this.entanglements=zc(0);this.identifierPrefix=d;this.onRecoverableError=e;this.mutableSourceEagerHydrationData=\nnull}function bl(a,b,c,d,e,f,g,h,k){a=new al(a,b,c,h,k);1===b?(b=1,!0===f&&(b|=8)):b=0;f=Bg(3,null,null,b);a.current=f;f.stateNode=a;f.memoizedState={element:d,isDehydrated:c,cache:null,transitions:null,pendingSuspenseBoundaries:null};kh(f);return a}function cl(a,b,c){var d=3(url: string, options?: RequestInit): Promise {\n const res = await fetch(`${API_BASE}${url}`, {\n ...options,\n headers: {\n 'Content-Type': 'application/json',\n ...options?.headers,\n },\n });\n if (!res.ok) {\n const errorText = await res.text();\n // FastAPI returns errors as {\"detail\": \"message\"}, extract the message\n let errorMessage = errorText || res.statusText;\n try {\n const errorJson = JSON.parse(errorText);\n if (errorJson.detail) {\n errorMessage = errorJson.detail;\n }\n } catch {\n // Not JSON, use raw text\n }\n throw new Error(errorMessage);\n }\n return res.json();\n}\n\n/** Check if an error is an AbortError (request was cancelled) */\nexport function isAbortError(err: unknown): boolean {\n // DOMException is thrown by fetch when aborted, and it's not an Error subclass\n if (err instanceof DOMException && err.name === 'AbortError') {\n return true;\n }\n // Also check for Error with AbortError name (for compatibility)\n return err instanceof Error && err.name === 'AbortError';\n}\n\ninterface DecryptResult {\n started: boolean;\n total_packets: number;\n message: string;\n}\n\nexport const api = {\n // Health\n getHealth: () => fetchJson('/health'),\n\n // Radio config\n getRadioConfig: () => fetchJson('/radio/config'),\n updateRadioConfig: (config: RadioConfigUpdate) =>\n fetchJson('/radio/config', {\n method: 'PATCH',\n body: JSON.stringify(config),\n }),\n setPrivateKey: (privateKey: string) =>\n fetchJson<{ status: string }>('/radio/private-key', {\n method: 'PUT',\n body: JSON.stringify({ private_key: privateKey }),\n }),\n sendAdvertisement: (flood = true) =>\n fetchJson<{ status: string; flood: boolean }>(`/radio/advertise?flood=${flood}`, {\n method: 'POST',\n }),\n rebootRadio: () =>\n fetchJson<{ status: string; message: string }>('/radio/reboot', {\n method: 'POST',\n }),\n reconnectRadio: () =>\n fetchJson<{ status: string; message: string; connected: boolean }>('/radio/reconnect', {\n method: 'POST',\n }),\n\n // Contacts\n getContacts: (limit = 100, offset = 0) =>\n fetchJson(`/contacts?limit=${limit}&offset=${offset}`),\n getContact: (publicKey: string) => fetchJson(`/contacts/${publicKey}`),\n syncContacts: () => fetchJson<{ synced: number }>('/contacts/sync', { method: 'POST' }),\n addContactToRadio: (publicKey: string) =>\n fetchJson<{ status: string }>(`/contacts/${publicKey}/add-to-radio`, {\n method: 'POST',\n }),\n removeContactFromRadio: (publicKey: string) =>\n fetchJson<{ status: string }>(`/contacts/${publicKey}/remove-from-radio`, {\n method: 'POST',\n }),\n deleteContact: (publicKey: string) =>\n fetchJson<{ status: string }>(`/contacts/${publicKey}`, {\n method: 'DELETE',\n }),\n createContact: (publicKey: string, name?: string, tryHistorical?: boolean) =>\n fetchJson('/contacts', {\n method: 'POST',\n body: JSON.stringify({ public_key: publicKey, name, try_historical: tryHistorical }),\n }),\n markContactRead: (publicKey: string) =>\n fetchJson<{ status: string; public_key: string }>(`/contacts/${publicKey}/mark-read`, {\n method: 'POST',\n }),\n requestTelemetry: (publicKey: string, password: string) =>\n fetchJson(`/contacts/${publicKey}/telemetry`, {\n method: 'POST',\n body: JSON.stringify({ password }),\n }),\n sendRepeaterCommand: (publicKey: string, command: string) =>\n fetchJson(`/contacts/${publicKey}/command`, {\n method: 'POST',\n body: JSON.stringify({ command }),\n }),\n\n // Channels\n getChannels: () => fetchJson('/channels'),\n getChannel: (key: string) => fetchJson(`/channels/${key}`),\n createChannel: (name: string, key?: string) =>\n fetchJson('/channels', {\n method: 'POST',\n body: JSON.stringify({ name, key }),\n }),\n syncChannels: () => fetchJson<{ synced: number }>('/channels/sync', { method: 'POST' }),\n deleteChannel: (key: string) =>\n fetchJson<{ status: string }>(`/channels/${key}`, { method: 'DELETE' }),\n markChannelRead: (key: string) =>\n fetchJson<{ status: string; key: string }>(`/channels/${key}/mark-read`, {\n method: 'POST',\n }),\n\n // Messages\n getMessages: (\n params?: {\n limit?: number;\n offset?: number;\n type?: 'PRIV' | 'CHAN';\n conversation_key?: string;\n },\n signal?: AbortSignal\n ) => {\n const searchParams = new URLSearchParams();\n if (params?.limit) searchParams.set('limit', params.limit.toString());\n if (params?.offset) searchParams.set('offset', params.offset.toString());\n if (params?.type) searchParams.set('type', params.type);\n if (params?.conversation_key) searchParams.set('conversation_key', params.conversation_key);\n const query = searchParams.toString();\n return fetchJson(`/messages${query ? `?${query}` : ''}`, { signal });\n },\n getMessagesBulk: (\n conversations: Array<{ type: 'PRIV' | 'CHAN'; conversation_key: string }>,\n limitPerConversation: number = UNREAD_FETCH_LIMIT\n ) =>\n fetchJson>(\n `/messages/bulk?limit_per_conversation=${limitPerConversation}`,\n {\n method: 'POST',\n body: JSON.stringify(conversations),\n }\n ),\n sendDirectMessage: (destination: string, text: string) =>\n fetchJson('/messages/direct', {\n method: 'POST',\n body: JSON.stringify({ destination, text }),\n }),\n sendChannelMessage: (channelKey: string, text: string) =>\n fetchJson('/messages/channel', {\n method: 'POST',\n body: JSON.stringify({ channel_key: channelKey, text }),\n }),\n\n // Packets\n getUndecryptedPacketCount: () => fetchJson<{ count: number }>('/packets/undecrypted/count'),\n decryptHistoricalPackets: (params: {\n key_type: 'channel' | 'contact';\n channel_key?: string;\n channel_name?: string;\n }) =>\n fetchJson('/packets/decrypt/historical', {\n method: 'POST',\n body: JSON.stringify(params),\n }),\n runMaintenance: (pruneUndecryptedDays: number) =>\n fetchJson('/packets/maintenance', {\n method: 'POST',\n body: JSON.stringify({ prune_undecrypted_days: pruneUndecryptedDays }),\n }),\n\n // Read State\n markAllRead: () =>\n fetchJson<{ status: string; timestamp: number }>('/read-state/mark-all-read', {\n method: 'POST',\n }),\n\n // App Settings\n getSettings: () => fetchJson('/settings'),\n updateSettings: (settings: AppSettingsUpdate) =>\n fetchJson('/settings', {\n method: 'PATCH',\n body: JSON.stringify(settings),\n }),\n\n // Favorites\n addFavorite: (type: Favorite['type'], id: string) =>\n fetchJson('/settings/favorites', {\n method: 'POST',\n body: JSON.stringify({ type, id }),\n }),\n removeFavorite: (type: Favorite['type'], id: string) =>\n fetchJson('/settings/favorites', {\n method: 'DELETE',\n body: JSON.stringify({ type, id }),\n }),\n toggleFavorite: (type: Favorite['type'], id: string) =>\n fetchJson('/settings/favorites/toggle', {\n method: 'POST',\n body: JSON.stringify({ type, id }),\n }),\n\n // Last message time tracking\n updateLastMessageTime: (stateKey: string, timestamp: number) =>\n fetchJson<{ status: string }>('/settings/last-message-time', {\n method: 'POST',\n body: JSON.stringify({ state_key: stateKey, timestamp }),\n }),\n\n // Preferences migration (one-time, from localStorage to database)\n migratePreferences: (request: MigratePreferencesRequest) =>\n fetchJson('/settings/migrate', {\n method: 'POST',\n body: JSON.stringify(request),\n }),\n};\n","import { useEffect, useRef, useCallback, useState } from 'react';\nimport type { HealthStatus, Contact, Channel, Message, MessagePath, RawPacket } from './types';\n\ninterface WebSocketMessage {\n type: string;\n data: unknown;\n}\n\ninterface ErrorEvent {\n message: string;\n details?: string;\n}\n\ninterface SuccessEvent {\n message: string;\n details?: string;\n}\n\ninterface UseWebSocketOptions {\n onHealth?: (health: HealthStatus) => void;\n onContacts?: (contacts: Contact[]) => void;\n onChannels?: (channels: Channel[]) => void;\n onMessage?: (message: Message) => void;\n onContact?: (contact: Contact) => void;\n onRawPacket?: (packet: RawPacket) => void;\n onMessageAcked?: (messageId: number, ackCount: number, paths?: MessagePath[]) => void;\n onError?: (error: ErrorEvent) => void;\n onSuccess?: (success: SuccessEvent) => void;\n}\n\nexport function useWebSocket(options: UseWebSocketOptions) {\n const wsRef = useRef(null);\n const reconnectTimeoutRef = useRef(null);\n const [connected, setConnected] = useState(false);\n\n // Store options in ref to avoid stale closures in WebSocket handlers.\n // The onmessage callback captures this ref, and we keep the ref updated\n // with the latest handlers. This way, even though the WebSocket connection\n // is only created once, it always calls the current handlers.\n const optionsRef = useRef(options);\n\n // Keep the ref updated with latest options\n useEffect(() => {\n optionsRef.current = options;\n }, [options]);\n\n // Connect function - uses ref for handlers to avoid stale closures\n // No dependencies needed since we access handlers through ref\n const connect = useCallback(() => {\n // Determine WebSocket URL based on current location\n const protocol = window.location.protocol === 'https:' ? 'wss:' : 'ws:';\n // In development, connect directly to backend; in production, use same host\n const isDev = window.location.port === '5173';\n const wsUrl = isDev\n ? `ws://localhost:8000/api/ws`\n : `${protocol}//${window.location.host}/api/ws`;\n\n const ws = new WebSocket(wsUrl);\n\n ws.onopen = () => {\n console.log('WebSocket connected');\n setConnected(true);\n };\n\n ws.onclose = () => {\n console.log('WebSocket disconnected');\n setConnected(false);\n wsRef.current = null;\n\n // Reconnect after 3 seconds\n reconnectTimeoutRef.current = window.setTimeout(() => {\n console.log('Attempting WebSocket reconnect...');\n connect();\n }, 3000);\n };\n\n ws.onerror = (error) => {\n console.error('WebSocket error:', error);\n };\n\n ws.onmessage = (event) => {\n try {\n const msg: WebSocketMessage = JSON.parse(event.data);\n // Access handlers through ref to always use current versions\n const handlers = optionsRef.current;\n\n switch (msg.type) {\n case 'health':\n handlers.onHealth?.(msg.data as HealthStatus);\n break;\n case 'contacts':\n handlers.onContacts?.(msg.data as Contact[]);\n break;\n case 'channels':\n handlers.onChannels?.(msg.data as Channel[]);\n break;\n case 'message':\n handlers.onMessage?.(msg.data as Message);\n break;\n case 'contact':\n handlers.onContact?.(msg.data as Contact);\n break;\n case 'raw_packet':\n handlers.onRawPacket?.(msg.data as RawPacket);\n break;\n case 'message_acked': {\n const ackData = msg.data as {\n message_id: number;\n ack_count: number;\n paths?: MessagePath[];\n };\n handlers.onMessageAcked?.(ackData.message_id, ackData.ack_count, ackData.paths);\n break;\n }\n case 'error':\n handlers.onError?.(msg.data as ErrorEvent);\n break;\n case 'success':\n handlers.onSuccess?.(msg.data as SuccessEvent);\n break;\n case 'pong':\n // Heartbeat response, ignore\n break;\n default:\n console.log('Unknown WebSocket message type:', msg.type);\n }\n } catch (e) {\n console.error('Failed to parse WebSocket message:', e);\n }\n };\n\n wsRef.current = ws;\n }, []); // No dependencies - handlers accessed through ref\n\n useEffect(() => {\n connect();\n\n // Ping every 30 seconds to keep connection alive\n const pingInterval = setInterval(() => {\n if (wsRef.current?.readyState === WebSocket.OPEN) {\n wsRef.current.send('ping');\n }\n }, 30000);\n\n return () => {\n clearInterval(pingInterval);\n if (reconnectTimeoutRef.current) {\n clearTimeout(reconnectTimeoutRef.current);\n }\n if (wsRef.current) {\n wsRef.current.close();\n }\n };\n }, [connect]);\n\n return { connected };\n}\n","/**\n * Type aliases for key types used throughout the application.\n * These are all hex strings but serve different purposes.\n */\n\n/** 64-character hex string identifying a contact/node */\nexport type PublicKey = string;\n\n/** 12-character hex prefix of a public key (used in message routing) */\nexport type PubkeyPrefix = string;\n\n/** 32-character hex string identifying a channel */\nexport type ChannelKey = string;\n\nexport interface RadioSettings {\n freq: number;\n bw: number;\n sf: number;\n cr: number;\n}\n\nexport interface RadioConfig {\n public_key: string;\n name: string;\n lat: number;\n lon: number;\n tx_power: number;\n max_tx_power: number;\n radio: RadioSettings;\n}\n\nexport interface RadioConfigUpdate {\n name?: string;\n lat?: number;\n lon?: number;\n tx_power?: number;\n radio?: RadioSettings;\n}\n\nexport interface HealthStatus {\n status: string;\n radio_connected: boolean;\n serial_port: string | null;\n database_size_mb: number;\n oldest_undecrypted_timestamp: number | null;\n}\n\nexport interface MaintenanceResult {\n packets_deleted: number;\n vacuumed: boolean;\n}\n\nexport interface Contact {\n public_key: PublicKey;\n name: string | null;\n type: number;\n flags: number;\n last_path: string | null;\n last_path_len: number;\n last_advert: number | null;\n lat: number | null;\n lon: number | null;\n last_seen: number | null;\n on_radio: boolean;\n last_contacted: number | null;\n last_read_at: number | null;\n}\n\nexport interface Channel {\n key: ChannelKey;\n name: string;\n is_hashtag: boolean;\n on_radio: boolean;\n last_read_at: number | null;\n}\n\n/** A single path that a message took to reach us */\nexport interface MessagePath {\n /** Hex-encoded routing path (2 chars per hop) */\n path: string;\n /** Unix timestamp when this path was received */\n received_at: number;\n}\n\nexport interface Message {\n id: number;\n type: 'PRIV' | 'CHAN';\n /** For PRIV: sender's PublicKey (or prefix). For CHAN: ChannelKey */\n conversation_key: string;\n text: string;\n sender_timestamp: number | null;\n received_at: number;\n /** List of routing paths this message arrived via. Null for outgoing messages. */\n paths: MessagePath[] | null;\n txt_type: number;\n signature: string | null;\n outgoing: boolean;\n /** ACK count: 0 = not acked, 1+ = number of acks/flood echoes received */\n acked: number;\n}\n\nexport type ConversationType = 'contact' | 'channel' | 'raw' | 'map' | 'visualizer';\n\nexport interface Conversation {\n type: ConversationType;\n /** PublicKey for contacts, ChannelKey for channels, 'raw'/'map' for special views */\n id: string;\n name: string;\n /** For map view: public key prefix to focus on */\n mapFocusKey?: string;\n}\n\nexport interface RawPacket {\n id: number;\n timestamp: number;\n data: string; // hex\n payload_type: string;\n snr: number | null; // Signal-to-noise ratio in dB\n rssi: number | null; // Received signal strength in dBm\n decrypted: boolean;\n decrypted_info: {\n channel_name: string | null;\n sender: string | null;\n } | null;\n}\n\nexport interface Favorite {\n type: 'channel' | 'contact';\n id: string; // channel key or contact public key\n}\n\nexport interface AppSettings {\n max_radio_contacts: number;\n favorites: Favorite[];\n auto_decrypt_dm_on_advert: boolean;\n sidebar_sort_order: 'recent' | 'alpha';\n last_message_times: Record;\n preferences_migrated: boolean;\n}\n\nexport interface AppSettingsUpdate {\n max_radio_contacts?: number;\n auto_decrypt_dm_on_advert?: boolean;\n sidebar_sort_order?: 'recent' | 'alpha';\n}\n\nexport interface MigratePreferencesRequest {\n favorites: Favorite[];\n sort_order: string;\n last_message_times: Record;\n}\n\nexport interface MigratePreferencesResponse {\n migrated: boolean;\n settings: AppSettings;\n}\n\n/** Contact type constants */\nexport const CONTACT_TYPE_CLIENT = 1;\nexport const CONTACT_TYPE_REPEATER = 2;\n\nexport interface NeighborInfo {\n pubkey_prefix: string;\n name: string | null;\n snr: number;\n last_heard_seconds: number;\n}\n\nexport interface AclEntry {\n pubkey_prefix: string;\n name: string | null;\n permission: number;\n permission_name: string;\n}\n\nexport interface TelemetryResponse {\n pubkey_prefix: string;\n battery_volts: number;\n tx_queue_len: number;\n noise_floor_dbm: number;\n last_rssi_dbm: number;\n last_snr_db: number;\n packets_received: number;\n packets_sent: number;\n airtime_seconds: number;\n rx_airtime_seconds: number;\n uptime_seconds: number;\n sent_flood: number;\n sent_direct: number;\n recv_flood: number;\n recv_direct: number;\n flood_dups: number;\n direct_dups: number;\n full_events: number;\n neighbors: NeighborInfo[];\n acl: AclEntry[];\n}\n\nexport interface CommandResponse {\n command: string;\n response: string;\n sender_timestamp: number | null;\n}\n","/**\n * Airtime/duty cycle tracking for repeaters.\n *\n * When \"dutycycle_start\" command is issued, this captures baseline telemetry\n * and polls every 5 minutes to display rolling airtime/duty cycle statistics.\n */\n\nimport { useRef, useCallback, useEffect } from 'react';\nimport { api } from '../api';\nimport type { Message, TelemetryResponse } from '../types';\n\n// Baseline telemetry snapshot for airtime tracking\ninterface AirtimeBaseline {\n startTime: number; // epoch seconds\n uptime: number;\n txAirtime: number;\n rxAirtime: number;\n sentFlood: number;\n sentDirect: number;\n recvFlood: number;\n recvDirect: number;\n conversationId: string;\n}\n\n// Polling interval: 5 minutes\nconst AIRTIME_POLL_INTERVAL_MS = 5 * 60 * 1000;\n\n// Format duration in XhXmXs format\nfunction formatAirtimeDuration(seconds: number): string {\n const hours = Math.floor(seconds / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n const secs = Math.floor(seconds % 60);\n return `${hours}h${mins}m${secs}s`;\n}\n\n// Get emoji indicator for TX duty cycle percentage\nfunction getTxDutyCycleEmoji(pct: number): string {\n if (pct <= 5) return '✅';\n if (pct <= 10) return '🟢';\n if (pct <= 25) return '🟡';\n if (pct <= 50) return '🔴';\n return '🚨';\n}\n\n// Format airtime statistics comparing current telemetry to baseline\nfunction formatAirtimeStats(baseline: AirtimeBaseline, current: TelemetryResponse): string {\n const now = Math.floor(Date.now() / 1000);\n const wallDuration = now - baseline.startTime;\n\n // Compute deltas\n const deltaUptime = current.uptime_seconds - baseline.uptime;\n const deltaTxAirtime = current.airtime_seconds - baseline.txAirtime;\n const deltaRxAirtime = current.rx_airtime_seconds - baseline.rxAirtime;\n const deltaSentFlood = current.sent_flood - baseline.sentFlood;\n const deltaSentDirect = current.sent_direct - baseline.sentDirect;\n const deltaRecvFlood = current.recv_flood - baseline.recvFlood;\n const deltaRecvDirect = current.recv_direct - baseline.recvDirect;\n\n // Calculate airtime percentages\n const txPct = deltaUptime > 0 ? (deltaTxAirtime / deltaUptime) * 100 : 0;\n const rxPct = deltaUptime > 0 ? (deltaRxAirtime / deltaUptime) * 100 : 0;\n\n // Estimate flood/direct airtime breakdown based on packet proportions\n const totalSent = deltaSentFlood + deltaSentDirect;\n const totalRecv = deltaRecvFlood + deltaRecvDirect;\n\n const txFloodPct = totalSent > 0 ? txPct * (deltaSentFlood / totalSent) : 0;\n const txDirectPct = totalSent > 0 ? txPct * (deltaSentDirect / totalSent) : 0;\n const rxFloodPct = totalRecv > 0 ? rxPct * (deltaRecvFlood / totalRecv) : 0;\n const rxDirectPct = totalRecv > 0 ? rxPct * (deltaRecvDirect / totalRecv) : 0;\n\n const txEmoji = getTxDutyCycleEmoji(txPct);\n const idlePct = Math.max(0, 100 - txPct - rxPct);\n\n const lines = [\n `Airtime/Duty Cycle Statistics`,\n `Duration: ${formatAirtimeDuration(wallDuration)} (uptime delta: ${formatAirtimeDuration(deltaUptime)})`,\n ``,\n `${txEmoji} TX Airtime: ${txPct.toFixed(3)}% (${totalSent.toLocaleString()} pkts)`,\n ` Flood: ${txFloodPct.toFixed(3)}% (${deltaSentFlood.toLocaleString()} pkts)`,\n ` Direct: ${txDirectPct.toFixed(3)}% (${deltaSentDirect.toLocaleString()} pkts)`,\n ``,\n `RX Airtime: ${rxPct.toFixed(3)}% (${totalRecv.toLocaleString()} pkts)`,\n ` Flood: ${rxFloodPct.toFixed(3)}% (${deltaRecvFlood.toLocaleString()} pkts)`,\n ` Direct: ${rxDirectPct.toFixed(3)}% (${deltaRecvDirect.toLocaleString()} pkts)`,\n ``,\n `Idle: ${idlePct.toFixed(3)}%`,\n ];\n\n return lines.join('\\n');\n}\n\n// Create a local message object (not persisted to database)\nfunction createLocalMessage(conversationKey: string, text: string, outgoing: boolean): Message {\n const now = Math.floor(Date.now() / 1000);\n return {\n id: -Date.now(),\n type: 'PRIV',\n conversation_key: conversationKey,\n text,\n sender_timestamp: now,\n received_at: now,\n paths: null,\n txt_type: 0,\n signature: null,\n outgoing,\n acked: 1,\n };\n}\n\nexport interface UseAirtimeTrackingResult {\n /** Returns true if this was an airtime command that was handled */\n handleAirtimeCommand: (command: string, conversationId: string) => Promise;\n /** Stop any active airtime tracking */\n stopTracking: () => void;\n}\n\nexport function useAirtimeTracking(\n setMessages: React.Dispatch>\n): UseAirtimeTrackingResult {\n const baselineRef = useRef(null);\n const intervalRef = useRef(null);\n\n // Stop tracking and clear interval\n const stopTracking = useCallback(() => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n intervalRef.current = null;\n }\n baselineRef.current = null;\n }, []);\n\n // Poll for airtime stats with one retry on failure\n const pollAirtimeStats = useCallback(async () => {\n const baseline = baselineRef.current;\n if (!baseline) return;\n\n let telemetry: TelemetryResponse | null = null;\n let lastError: Error | null = null;\n\n // Try up to 2 times (initial + 1 retry)\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n telemetry = await api.requestTelemetry(baseline.conversationId, '');\n break; // Success, exit loop\n } catch (err) {\n lastError = err instanceof Error ? err : new Error('Unknown error');\n // Wait a moment before retry\n if (attempt === 0) {\n await new Promise((resolve) => setTimeout(resolve, 2000));\n }\n }\n }\n\n if (telemetry) {\n const statsMessage = createLocalMessage(\n baseline.conversationId,\n formatAirtimeStats(baseline, telemetry),\n false\n );\n setMessages((prev) => [...prev, statsMessage]);\n } else {\n const errorMessage = createLocalMessage(\n baseline.conversationId,\n `Duty cycle poll failed after retry: ${lastError?.message ?? 'Unknown error'}`,\n false\n );\n setMessages((prev) => [...prev, errorMessage]);\n }\n }, [setMessages]);\n\n // Handle airtime commands\n const handleAirtimeCommand = useCallback(\n async (command: string, conversationId: string): Promise => {\n const cmd = command.trim().toLowerCase();\n\n if (cmd === 'dutycycle_start') {\n // Stop any existing tracking\n stopTracking();\n\n // Fetch initial telemetry with one retry\n let telemetry: TelemetryResponse | null = null;\n let lastError: Error | null = null;\n\n for (let attempt = 0; attempt < 2; attempt++) {\n try {\n telemetry = await api.requestTelemetry(conversationId, '');\n break;\n } catch (err) {\n lastError = err instanceof Error ? err : new Error('Unknown error');\n if (attempt === 0) {\n await new Promise((resolve) => setTimeout(resolve, 2000));\n }\n }\n }\n\n if (!telemetry) {\n const errorMessage = createLocalMessage(\n conversationId,\n `Failed to start duty cycle tracking after retry: ${lastError?.message ?? 'Unknown error'}`,\n false\n );\n setMessages((prev) => [...prev, errorMessage]);\n return true;\n }\n\n // Store baseline\n const now = Math.floor(Date.now() / 1000);\n baselineRef.current = {\n startTime: now,\n uptime: telemetry.uptime_seconds,\n txAirtime: telemetry.airtime_seconds,\n rxAirtime: telemetry.rx_airtime_seconds,\n sentFlood: telemetry.sent_flood,\n sentDirect: telemetry.sent_direct,\n recvFlood: telemetry.recv_flood,\n recvDirect: telemetry.recv_direct,\n conversationId,\n };\n\n // Add start message\n const startMessage = createLocalMessage(\n conversationId,\n `Airtime/duty cycle statistics gathering begins at ${now}. Logs will follow every 5 minutes. To stop, run dutycycle_stop or navigate away from this conversation.`,\n false\n );\n setMessages((prev) => [...prev, startMessage]);\n\n // Start polling interval\n intervalRef.current = window.setInterval(pollAirtimeStats, AIRTIME_POLL_INTERVAL_MS);\n\n return true;\n }\n\n if (cmd === 'dutycycle_stop') {\n if (baselineRef.current && baselineRef.current.conversationId === conversationId) {\n // Do one final poll before stopping\n await pollAirtimeStats();\n\n stopTracking();\n\n const stopMessage = createLocalMessage(\n conversationId,\n 'Airtime/duty cycle statistics gathering stopped.',\n false\n );\n setMessages((prev) => [...prev, stopMessage]);\n } else {\n const notRunningMessage = createLocalMessage(\n conversationId,\n 'Duty cycle tracking is not active.',\n false\n );\n setMessages((prev) => [...prev, notRunningMessage]);\n }\n return true;\n }\n\n return false; // Not an airtime command\n },\n [setMessages, stopTracking, pollAirtimeStats]\n );\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n if (intervalRef.current !== null) {\n clearInterval(intervalRef.current);\n }\n };\n }, []);\n\n return {\n handleAirtimeCommand,\n stopTracking,\n };\n}\n","import { useState, useCallback, useMemo, useEffect } from 'react';\nimport { api } from '../api';\nimport type {\n Contact,\n Conversation,\n Message,\n TelemetryResponse,\n NeighborInfo,\n AclEntry,\n} from '../types';\nimport { CONTACT_TYPE_REPEATER } from '../types';\nimport { useAirtimeTracking } from './useAirtimeTracking';\n\n// Format seconds into human-readable duration (e.g., 1d17h2m, 1h5m, 3m)\nexport function formatDuration(seconds: number): string {\n if (seconds < 60) return `${seconds}s`;\n\n const days = Math.floor(seconds / 86400);\n const hours = Math.floor((seconds % 86400) / 3600);\n const mins = Math.floor((seconds % 3600) / 60);\n\n if (days > 0) {\n if (hours > 0 && mins > 0) return `${days}d${hours}h${mins}m`;\n if (hours > 0) return `${days}d${hours}h`;\n if (mins > 0) return `${days}d${mins}m`;\n return `${days}d`;\n }\n if (hours > 0) {\n return mins > 0 ? `${hours}h${mins}m` : `${hours}h`;\n }\n return `${mins}m`;\n}\n\n// Format telemetry response as human-readable text\nexport function formatTelemetry(telemetry: TelemetryResponse): string {\n const lines = [\n `Telemetry`,\n `Battery Voltage: ${telemetry.battery_volts.toFixed(3)}V`,\n `Uptime: ${formatDuration(telemetry.uptime_seconds)}`,\n `TX Airtime: ${formatDuration(telemetry.airtime_seconds)}`,\n `RX Airtime: ${formatDuration(telemetry.rx_airtime_seconds)}`,\n '',\n `Noise Floor: ${telemetry.noise_floor_dbm} dBm`,\n `Last RSSI: ${telemetry.last_rssi_dbm} dBm`,\n `Last SNR: ${telemetry.last_snr_db.toFixed(1)} dB`,\n '',\n `Packets: ${telemetry.packets_received.toLocaleString()} rx / ${telemetry.packets_sent.toLocaleString()} tx`,\n `Flood: ${telemetry.recv_flood.toLocaleString()} rx / ${telemetry.sent_flood.toLocaleString()} tx`,\n `Direct: ${telemetry.recv_direct.toLocaleString()} rx / ${telemetry.sent_direct.toLocaleString()} tx`,\n `Duplicates: ${telemetry.flood_dups.toLocaleString()} flood / ${telemetry.direct_dups.toLocaleString()} direct`,\n '',\n `TX Queue: ${telemetry.tx_queue_len}`,\n `Debug Flags: ${telemetry.full_events}`,\n ];\n return lines.join('\\n');\n}\n\n// Format neighbors list as human-readable text\nexport function formatNeighbors(neighbors: NeighborInfo[]): string {\n if (neighbors.length === 0) {\n return 'Neighbors\\nNo neighbors reported';\n }\n // Sort by SNR descending (highest first)\n const sorted = [...neighbors].sort((a, b) => b.snr - a.snr);\n const lines = [`Neighbors (${sorted.length})`];\n for (const n of sorted) {\n const name = n.name || n.pubkey_prefix;\n const snr = n.snr >= 0 ? `+${n.snr.toFixed(1)}` : n.snr.toFixed(1);\n lines.push(`${name}, ${snr} dB [${formatDuration(n.last_heard_seconds)} ago]`);\n }\n return lines.join('\\n');\n}\n\n// Format ACL list as human-readable text\nexport function formatAcl(acl: AclEntry[]): string {\n if (acl.length === 0) {\n return 'ACL\\nNo ACL entries';\n }\n const lines = [`ACL (${acl.length})`];\n for (const entry of acl) {\n const name = entry.name || entry.pubkey_prefix;\n lines.push(`${name}: ${entry.permission_name}`);\n }\n return lines.join('\\n');\n}\n\n// Create a local message object (not persisted to database)\nfunction createLocalMessage(\n conversationKey: string,\n text: string,\n outgoing: boolean,\n idOffset = 0\n): Message {\n const now = Math.floor(Date.now() / 1000);\n return {\n id: -Date.now() - idOffset,\n type: 'PRIV',\n conversation_key: conversationKey,\n text,\n sender_timestamp: now,\n received_at: now,\n paths: null,\n txt_type: 0,\n signature: null,\n outgoing,\n acked: 1,\n };\n}\n\nexport interface UseRepeaterModeResult {\n repeaterLoggedIn: boolean;\n activeContactIsRepeater: boolean;\n handleTelemetryRequest: (password: string) => Promise;\n handleRepeaterCommand: (command: string) => Promise;\n}\n\nexport function useRepeaterMode(\n activeConversation: Conversation | null,\n contacts: Contact[],\n setMessages: React.Dispatch>\n): UseRepeaterModeResult {\n const [repeaterLoggedIn, setRepeaterLoggedIn] = useState(false);\n const { handleAirtimeCommand, stopTracking } = useAirtimeTracking(setMessages);\n\n // Reset login state and stop airtime tracking when conversation changes\n useEffect(() => {\n setRepeaterLoggedIn(false);\n stopTracking();\n }, [activeConversation?.id, stopTracking]);\n\n // Check if active conversation is a repeater\n const activeContactIsRepeater = useMemo(() => {\n if (!activeConversation || activeConversation.type !== 'contact') return false;\n const contact = contacts.find((c) => c.public_key === activeConversation.id);\n return contact?.type === CONTACT_TYPE_REPEATER;\n }, [activeConversation, contacts]);\n\n // Request telemetry from a repeater\n const handleTelemetryRequest = useCallback(\n async (password: string) => {\n if (!activeConversation || activeConversation.type !== 'contact') return;\n if (!activeContactIsRepeater) return;\n\n try {\n const telemetry = await api.requestTelemetry(activeConversation.id, password);\n\n // Create local messages to display the telemetry (not persisted to database)\n const telemetryMessage = createLocalMessage(\n activeConversation.id,\n formatTelemetry(telemetry),\n false,\n 0\n );\n\n const neighborsMessage = createLocalMessage(\n activeConversation.id,\n formatNeighbors(telemetry.neighbors),\n false,\n 1\n );\n\n const aclMessage = createLocalMessage(\n activeConversation.id,\n formatAcl(telemetry.acl),\n false,\n 2\n );\n\n // Add all messages to the list\n setMessages((prev) => [...prev, telemetryMessage, neighborsMessage, aclMessage]);\n\n // Mark as logged in for CLI command mode\n setRepeaterLoggedIn(true);\n } catch (err) {\n const errorMessage = createLocalMessage(\n activeConversation.id,\n `Telemetry request failed: ${err instanceof Error ? err.message : 'Unknown error'}`,\n false,\n 0\n );\n setMessages((prev) => [...prev, errorMessage]);\n }\n },\n [activeConversation, activeContactIsRepeater, setMessages]\n );\n\n // Send CLI command to a repeater (after logged in)\n const handleRepeaterCommand = useCallback(\n async (command: string) => {\n if (!activeConversation || activeConversation.type !== 'contact') return;\n if (!activeContactIsRepeater || !repeaterLoggedIn) return;\n\n // Check for special airtime commands first (handled locally)\n const handled = await handleAirtimeCommand(command, activeConversation.id);\n if (handled) return;\n\n // Show the command as an outgoing message\n const commandMessage = createLocalMessage(activeConversation.id, `> ${command}`, true, 0);\n setMessages((prev) => [...prev, commandMessage]);\n\n try {\n const response = await api.sendRepeaterCommand(activeConversation.id, command);\n\n // Use the actual timestamp from the repeater if available\n const responseMessage = createLocalMessage(\n activeConversation.id,\n response.response,\n false,\n 1\n );\n if (response.sender_timestamp) {\n responseMessage.sender_timestamp = response.sender_timestamp;\n }\n\n setMessages((prev) => [...prev, responseMessage]);\n } catch (err) {\n const errorMessage = createLocalMessage(\n activeConversation.id,\n `Command failed: ${err instanceof Error ? err.message : 'Unknown error'}`,\n false,\n 1\n );\n setMessages((prev) => [...prev, errorMessage]);\n }\n },\n [\n activeConversation,\n activeContactIsRepeater,\n repeaterLoggedIn,\n setMessages,\n handleAirtimeCommand,\n ]\n );\n\n return {\n repeaterLoggedIn,\n activeContactIsRepeater,\n handleTelemetryRequest,\n handleRepeaterCommand,\n };\n}\n","/**\n * Conversation state utilities.\n *\n * Last message times are tracked in-memory and persisted server-side.\n * This file provides helper functions for generating state keys\n * and managing conversation times.\n *\n * Read state (last_read_at) is tracked server-side for consistency\n * across devices - see useUnreadCounts hook.\n */\n\nconst LAST_MESSAGE_KEY = 'remoteterm-lastMessageTime';\nconst SORT_ORDER_KEY = 'remoteterm-sortOrder';\n\nexport type ConversationTimes = Record;\nexport type SortOrder = 'recent' | 'alpha';\n\n// In-memory cache of last message times (loaded from server on init)\nlet lastMessageTimesCache: ConversationTimes = {};\n\n/**\n * Initialize the last message times cache from server data\n */\nexport function initLastMessageTimes(times: ConversationTimes): void {\n lastMessageTimesCache = { ...times };\n}\n\n/**\n * Get all last message times from the cache\n */\nexport function getLastMessageTimes(): ConversationTimes {\n return { ...lastMessageTimesCache };\n}\n\n/**\n * Update a single message time in the cache and return the updated cache.\n * Note: This does NOT persist to server - caller should sync if needed.\n */\nexport function setLastMessageTime(key: string, timestamp: number): ConversationTimes {\n lastMessageTimesCache[key] = timestamp;\n return { ...lastMessageTimesCache };\n}\n\n/**\n * Generate a state tracking key for message times.\n *\n * This is NOT the same as Message.conversation_key (the database field).\n * This creates prefixed keys for state tracking:\n * - Channels: \"channel-{channelKey}\"\n * - Contacts: \"contact-{publicKey}\"\n */\nexport function getStateKey(type: 'channel' | 'contact', id: string): string {\n return `${type}-${id}`;\n}\n\n/**\n * Load last message times from localStorage (for migration only)\n */\nexport function loadLocalStorageLastMessageTimes(): ConversationTimes {\n try {\n const stored = localStorage.getItem(LAST_MESSAGE_KEY);\n return stored ? JSON.parse(stored) : {};\n } catch {\n return {};\n }\n}\n\n/**\n * Load sort order from localStorage (for migration only)\n */\nexport function loadLocalStorageSortOrder(): SortOrder {\n try {\n const stored = localStorage.getItem(SORT_ORDER_KEY);\n return stored === 'alpha' ? 'alpha' : 'recent';\n } catch {\n return 'recent';\n }\n}\n\n/**\n * Clear conversation state from localStorage (after migration)\n */\nexport function clearLocalStorageConversationState(): void {\n try {\n localStorage.removeItem(LAST_MESSAGE_KEY);\n localStorage.removeItem(SORT_ORDER_KEY);\n } catch {\n // localStorage might be disabled\n }\n}\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { api, UNREAD_FETCH_LIMIT } from '../api';\nimport {\n getLastMessageTimes,\n setLastMessageTime,\n getStateKey,\n type ConversationTimes,\n} from '../utils/conversationState';\nimport type { Channel, Contact, Conversation, Message } from '../types';\n\nexport interface UseUnreadCountsResult {\n unreadCounts: Record;\n /** Tracks which conversations have unread messages that mention the user */\n mentions: Record;\n lastMessageTimes: ConversationTimes;\n incrementUnread: (stateKey: string, hasMention?: boolean) => void;\n markAllRead: () => void;\n markConversationRead: (conv: Conversation) => void;\n trackNewMessage: (msg: Message) => void;\n}\n\n/** Check if a message text contains a mention of the given name in @[name] format */\nfunction messageContainsMention(text: string, name: string | null): boolean {\n if (!name) return false;\n // Escape special regex characters in the name\n const escaped = name.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n const mentionPattern = new RegExp(`@\\\\[${escaped}\\\\]`, 'i');\n return mentionPattern.test(text);\n}\n\nexport function useUnreadCounts(\n channels: Channel[],\n contacts: Contact[],\n activeConversation: Conversation | null,\n myName: string | null = null\n): UseUnreadCountsResult {\n const [unreadCounts, setUnreadCounts] = useState>({});\n const [mentions, setMentions] = useState>({});\n const [lastMessageTimes, setLastMessageTimes] = useState(getLastMessageTimes);\n\n // Keep myName in a ref so callbacks always have current value\n const myNameRef = useRef(myName);\n useEffect(() => {\n myNameRef.current = myName;\n }, [myName]);\n\n // Track which channels/contacts we've already fetched unreads for\n const fetchedChannels = useRef>(new Set());\n const fetchedContacts = useRef>(new Set());\n\n // Fetch messages and count unreads for new channels/contacts\n // Uses server-side last_read_at for consistent read state across devices\n useEffect(() => {\n const newChannels = channels.filter((c) => !fetchedChannels.current.has(c.key));\n const newContacts = contacts.filter(\n (c) => c.public_key && !fetchedContacts.current.has(c.public_key)\n );\n\n if (newChannels.length === 0 && newContacts.length === 0) return;\n\n // Mark as fetched before starting (to avoid duplicate fetches if effect re-runs)\n newChannels.forEach((c) => fetchedChannels.current.add(c.key));\n newContacts.forEach((c) => fetchedContacts.current.add(c.public_key));\n\n const fetchAndCountUnreads = async () => {\n const conversations: Array<{ type: 'PRIV' | 'CHAN'; conversation_key: string }> = [\n ...newChannels.map((c) => ({ type: 'CHAN' as const, conversation_key: c.key })),\n ...newContacts.map((c) => ({ type: 'PRIV' as const, conversation_key: c.public_key })),\n ];\n\n if (conversations.length === 0) return;\n\n try {\n // Fetch messages in chunks to avoid huge single requests\n const chunkSize = 200;\n const bulkMessages: Record = {};\n\n for (let i = 0; i < conversations.length; i += chunkSize) {\n const chunk = conversations.slice(i, i + chunkSize);\n const chunkResult = await api.getMessagesBulk(chunk, UNREAD_FETCH_LIMIT);\n Object.assign(bulkMessages, chunkResult);\n }\n const newUnreadCounts: Record = {};\n const newMentions: Record = {};\n const newLastMessageTimes: Record = {};\n\n // Process channel messages - use server-side last_read_at\n for (const channel of newChannels) {\n const msgs = bulkMessages[`CHAN:${channel.key}`] || [];\n if (msgs.length > 0) {\n const key = getStateKey('channel', channel.key);\n // Use server-side last_read_at, fallback to 0 if never read\n const lastRead = channel.last_read_at || 0;\n\n const unreadMsgs = msgs.filter((m) => !m.outgoing && m.received_at > lastRead);\n if (unreadMsgs.length > 0) {\n newUnreadCounts[key] = unreadMsgs.length;\n // Check if any unread message mentions the user\n if (unreadMsgs.some((m) => messageContainsMention(m.text, myNameRef.current))) {\n newMentions[key] = true;\n }\n }\n\n const latestTime = Math.max(...msgs.map((m) => m.received_at));\n newLastMessageTimes[key] = latestTime;\n setLastMessageTime(key, latestTime);\n }\n }\n\n // Process contact messages - use server-side last_read_at\n for (const contact of newContacts) {\n const msgs = bulkMessages[`PRIV:${contact.public_key}`] || [];\n if (msgs.length > 0) {\n const key = getStateKey('contact', contact.public_key);\n // Use server-side last_read_at, fallback to 0 if never read\n const lastRead = contact.last_read_at || 0;\n\n const unreadMsgs = msgs.filter((m) => !m.outgoing && m.received_at > lastRead);\n if (unreadMsgs.length > 0) {\n newUnreadCounts[key] = unreadMsgs.length;\n // Check if any unread message mentions the user\n if (unreadMsgs.some((m) => messageContainsMention(m.text, myNameRef.current))) {\n newMentions[key] = true;\n }\n }\n\n const latestTime = Math.max(...msgs.map((m) => m.received_at));\n newLastMessageTimes[key] = latestTime;\n setLastMessageTime(key, latestTime);\n }\n }\n\n if (Object.keys(newUnreadCounts).length > 0) {\n setUnreadCounts((prev) => ({ ...prev, ...newUnreadCounts }));\n }\n if (Object.keys(newMentions).length > 0) {\n setMentions((prev) => ({ ...prev, ...newMentions }));\n }\n setLastMessageTimes(getLastMessageTimes());\n } catch (err) {\n console.error('Failed to fetch messages bulk:', err);\n }\n };\n\n fetchAndCountUnreads();\n }, [channels, contacts]);\n\n // Mark conversation as read when user views it\n // Calls server API to persist read state across devices\n useEffect(() => {\n if (\n activeConversation &&\n activeConversation.type !== 'raw' &&\n activeConversation.type !== 'map'\n ) {\n const key = getStateKey(\n activeConversation.type as 'channel' | 'contact',\n activeConversation.id\n );\n\n // Update local state immediately for responsive UI\n setUnreadCounts((prev) => {\n if (prev[key]) {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return prev;\n });\n\n // Also clear mentions for this conversation\n setMentions((prev) => {\n if (prev[key]) {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return prev;\n });\n\n // Persist to server (fire-and-forget, errors logged but not blocking)\n if (activeConversation.type === 'channel') {\n api.markChannelRead(activeConversation.id).catch((err) => {\n console.error('Failed to mark channel as read on server:', err);\n });\n } else if (activeConversation.type === 'contact') {\n api.markContactRead(activeConversation.id).catch((err) => {\n console.error('Failed to mark contact as read on server:', err);\n });\n }\n }\n }, [activeConversation]);\n\n // Increment unread count for a conversation\n const incrementUnread = useCallback((stateKey: string, hasMention?: boolean) => {\n setUnreadCounts((prev) => ({\n ...prev,\n [stateKey]: (prev[stateKey] || 0) + 1,\n }));\n if (hasMention) {\n setMentions((prev) => ({\n ...prev,\n [stateKey]: true,\n }));\n }\n }, []);\n\n // Mark all conversations as read\n // Calls single bulk API endpoint to persist read state\n const markAllRead = useCallback(() => {\n // Update local state immediately\n setUnreadCounts({});\n setMentions({});\n\n // Persist to server with single bulk request\n api.markAllRead().catch((err) => {\n console.error('Failed to mark all as read on server:', err);\n });\n }, []);\n\n // Mark a specific conversation as read\n // Calls server API to persist read state across devices\n const markConversationRead = useCallback((conv: Conversation) => {\n if (conv.type === 'raw' || conv.type === 'map') return;\n\n const key = getStateKey(conv.type as 'channel' | 'contact', conv.id);\n\n // Update local state immediately\n setUnreadCounts((prev) => {\n if (prev[key]) {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return prev;\n });\n\n // Also clear mentions for this conversation\n setMentions((prev) => {\n if (prev[key]) {\n const next = { ...prev };\n delete next[key];\n return next;\n }\n return prev;\n });\n\n // Persist to server (fire-and-forget)\n if (conv.type === 'channel') {\n api.markChannelRead(conv.id).catch((err) => {\n console.error('Failed to mark channel as read on server:', err);\n });\n } else if (conv.type === 'contact') {\n api.markContactRead(conv.id).catch((err) => {\n console.error('Failed to mark contact as read on server:', err);\n });\n }\n }, []);\n\n // Track a new incoming message for unread counts\n const trackNewMessage = useCallback((msg: Message) => {\n let conversationKey: string | null = null;\n if (msg.type === 'CHAN' && msg.conversation_key) {\n conversationKey = getStateKey('channel', msg.conversation_key);\n } else if (msg.type === 'PRIV' && msg.conversation_key) {\n conversationKey = getStateKey('contact', msg.conversation_key);\n }\n\n if (conversationKey) {\n const timestamp = msg.received_at || Math.floor(Date.now() / 1000);\n const updated = setLastMessageTime(conversationKey, timestamp);\n setLastMessageTimes(updated);\n }\n }, []);\n\n return {\n unreadCounts,\n mentions,\n lastMessageTimes,\n incrementUnread,\n markAllRead,\n markConversationRead,\n trackNewMessage,\n };\n}\n","'use client';\nfunction __insertCSS(code) {\n if (!code || typeof document == 'undefined') return\n let head = document.head || document.getElementsByTagName('head')[0]\n let style = document.createElement('style')\n style.type = 'text/css'\n head.appendChild(style)\n ;style.styleSheet ? (style.styleSheet.cssText = code) : style.appendChild(document.createTextNode(code))\n}\n\nimport React from 'react';\nimport ReactDOM from 'react-dom';\n\nconst getAsset = (type)=>{\n switch(type){\n case 'success':\n return SuccessIcon;\n case 'info':\n return InfoIcon;\n case 'warning':\n return WarningIcon;\n case 'error':\n return ErrorIcon;\n default:\n return null;\n }\n};\nconst bars = Array(12).fill(0);\nconst Loader = ({ visible, className })=>{\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: [\n 'sonner-loading-wrapper',\n className\n ].filter(Boolean).join(' '),\n \"data-visible\": visible\n }, /*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-spinner\"\n }, bars.map((_, i)=>/*#__PURE__*/ React.createElement(\"div\", {\n className: \"sonner-loading-bar\",\n key: `spinner-bar-${i}`\n }))));\n};\nconst SuccessIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M10 18a8 8 0 100-16 8 8 0 000 16zm3.857-9.809a.75.75 0 00-1.214-.882l-3.483 4.79-1.88-1.88a.75.75 0 10-1.06 1.061l2.5 2.5a.75.75 0 001.137-.089l4-5.5z\",\n clipRule: \"evenodd\"\n}));\nconst WarningIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 24 24\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M9.401 3.003c1.155-2 4.043-2 5.197 0l7.355 12.748c1.154 2-.29 4.5-2.599 4.5H4.645c-2.309 0-3.752-2.5-2.598-4.5L9.4 3.003zM12 8.25a.75.75 0 01.75.75v3.75a.75.75 0 01-1.5 0V9a.75.75 0 01.75-.75zm0 8.25a.75.75 0 100-1.5.75.75 0 000 1.5z\",\n clipRule: \"evenodd\"\n}));\nconst InfoIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-7-4a1 1 0 11-2 0 1 1 0 012 0zM9 9a.75.75 0 000 1.5h.253a.25.25 0 01.244.304l-.459 2.066A1.75 1.75 0 0010.747 15H11a.75.75 0 000-1.5h-.253a.25.25 0 01-.244-.304l.459-2.066A1.75 1.75 0 009.253 9H9z\",\n clipRule: \"evenodd\"\n}));\nconst ErrorIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n viewBox: \"0 0 20 20\",\n fill: \"currentColor\",\n height: \"20\",\n width: \"20\"\n}, /*#__PURE__*/ React.createElement(\"path\", {\n fillRule: \"evenodd\",\n d: \"M18 10a8 8 0 11-16 0 8 8 0 0116 0zm-8-5a.75.75 0 01.75.75v4.5a.75.75 0 01-1.5 0v-4.5A.75.75 0 0110 5zm0 10a1 1 0 100-2 1 1 0 000 2z\",\n clipRule: \"evenodd\"\n}));\nconst CloseIcon = /*#__PURE__*/ React.createElement(\"svg\", {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: \"12\",\n height: \"12\",\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: \"1.5\",\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n}, /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"18\",\n y1: \"6\",\n x2: \"6\",\n y2: \"18\"\n}), /*#__PURE__*/ React.createElement(\"line\", {\n x1: \"6\",\n y1: \"6\",\n x2: \"18\",\n y2: \"18\"\n}));\n\nconst useIsDocumentHidden = ()=>{\n const [isDocumentHidden, setIsDocumentHidden] = React.useState(document.hidden);\n React.useEffect(()=>{\n const callback = ()=>{\n setIsDocumentHidden(document.hidden);\n };\n document.addEventListener('visibilitychange', callback);\n return ()=>window.removeEventListener('visibilitychange', callback);\n }, []);\n return isDocumentHidden;\n};\n\nlet toastsCounter = 1;\nclass Observer {\n constructor(){\n // We use arrow functions to maintain the correct `this` reference\n this.subscribe = (subscriber)=>{\n this.subscribers.push(subscriber);\n return ()=>{\n const index = this.subscribers.indexOf(subscriber);\n this.subscribers.splice(index, 1);\n };\n };\n this.publish = (data)=>{\n this.subscribers.forEach((subscriber)=>subscriber(data));\n };\n this.addToast = (data)=>{\n this.publish(data);\n this.toasts = [\n ...this.toasts,\n data\n ];\n };\n this.create = (data)=>{\n var _data_id;\n const { message, ...rest } = data;\n const id = typeof (data == null ? void 0 : data.id) === 'number' || ((_data_id = data.id) == null ? void 0 : _data_id.length) > 0 ? data.id : toastsCounter++;\n const alreadyExists = this.toasts.find((toast)=>{\n return toast.id === id;\n });\n const dismissible = data.dismissible === undefined ? true : data.dismissible;\n if (this.dismissedToasts.has(id)) {\n this.dismissedToasts.delete(id);\n }\n if (alreadyExists) {\n this.toasts = this.toasts.map((toast)=>{\n if (toast.id === id) {\n this.publish({\n ...toast,\n ...data,\n id,\n title: message\n });\n return {\n ...toast,\n ...data,\n id,\n dismissible,\n title: message\n };\n }\n return toast;\n });\n } else {\n this.addToast({\n title: message,\n ...rest,\n dismissible,\n id\n });\n }\n return id;\n };\n this.dismiss = (id)=>{\n if (id) {\n this.dismissedToasts.add(id);\n requestAnimationFrame(()=>this.subscribers.forEach((subscriber)=>subscriber({\n id,\n dismiss: true\n })));\n } else {\n this.toasts.forEach((toast)=>{\n this.subscribers.forEach((subscriber)=>subscriber({\n id: toast.id,\n dismiss: true\n }));\n });\n }\n return id;\n };\n this.message = (message, data)=>{\n return this.create({\n ...data,\n message\n });\n };\n this.error = (message, data)=>{\n return this.create({\n ...data,\n message,\n type: 'error'\n });\n };\n this.success = (message, data)=>{\n return this.create({\n ...data,\n type: 'success',\n message\n });\n };\n this.info = (message, data)=>{\n return this.create({\n ...data,\n type: 'info',\n message\n });\n };\n this.warning = (message, data)=>{\n return this.create({\n ...data,\n type: 'warning',\n message\n });\n };\n this.loading = (message, data)=>{\n return this.create({\n ...data,\n type: 'loading',\n message\n });\n };\n this.promise = (promise, data)=>{\n if (!data) {\n // Nothing to show\n return;\n }\n let id = undefined;\n if (data.loading !== undefined) {\n id = this.create({\n ...data,\n promise,\n type: 'loading',\n message: data.loading,\n description: typeof data.description !== 'function' ? data.description : undefined\n });\n }\n const p = Promise.resolve(promise instanceof Function ? promise() : promise);\n let shouldDismiss = id !== undefined;\n let result;\n const originalPromise = p.then(async (response)=>{\n result = [\n 'resolve',\n response\n ];\n const isReactElementResponse = React.isValidElement(response);\n if (isReactElementResponse) {\n shouldDismiss = false;\n this.create({\n id,\n type: 'default',\n message: response\n });\n } else if (isHttpResponse(response) && !response.ok) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(`HTTP error! status: ${response.status}`) : data.error;\n const description = typeof data.description === 'function' ? await data.description(`HTTP error! status: ${response.status}`) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (response instanceof Error) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(response) : data.error;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n } else if (data.success !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.success === 'function' ? await data.success(response) : data.success;\n const description = typeof data.description === 'function' ? await data.description(response) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'success',\n description,\n ...toastSettings\n });\n }\n }).catch(async (error)=>{\n result = [\n 'reject',\n error\n ];\n if (data.error !== undefined) {\n shouldDismiss = false;\n const promiseData = typeof data.error === 'function' ? await data.error(error) : data.error;\n const description = typeof data.description === 'function' ? await data.description(error) : data.description;\n const isExtendedResult = typeof promiseData === 'object' && !React.isValidElement(promiseData);\n const toastSettings = isExtendedResult ? promiseData : {\n message: promiseData\n };\n this.create({\n id,\n type: 'error',\n description,\n ...toastSettings\n });\n }\n }).finally(()=>{\n if (shouldDismiss) {\n // Toast is still in load state (and will be indefinitely — dismiss it)\n this.dismiss(id);\n id = undefined;\n }\n data.finally == null ? void 0 : data.finally.call(data);\n });\n const unwrap = ()=>new Promise((resolve, reject)=>originalPromise.then(()=>result[0] === 'reject' ? reject(result[1]) : resolve(result[1])).catch(reject));\n if (typeof id !== 'string' && typeof id !== 'number') {\n // cannot Object.assign on undefined\n return {\n unwrap\n };\n } else {\n return Object.assign(id, {\n unwrap\n });\n }\n };\n this.custom = (jsx, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n this.create({\n jsx: jsx(id),\n id,\n ...data\n });\n return id;\n };\n this.getActiveToasts = ()=>{\n return this.toasts.filter((toast)=>!this.dismissedToasts.has(toast.id));\n };\n this.subscribers = [];\n this.toasts = [];\n this.dismissedToasts = new Set();\n }\n}\nconst ToastState = new Observer();\n// bind this to the toast function\nconst toastFunction = (message, data)=>{\n const id = (data == null ? void 0 : data.id) || toastsCounter++;\n ToastState.addToast({\n title: message,\n ...data,\n id\n });\n return id;\n};\nconst isHttpResponse = (data)=>{\n return data && typeof data === 'object' && 'ok' in data && typeof data.ok === 'boolean' && 'status' in data && typeof data.status === 'number';\n};\nconst basicToast = toastFunction;\nconst getHistory = ()=>ToastState.toasts;\nconst getToasts = ()=>ToastState.getActiveToasts();\n// We use `Object.assign` to maintain the correct types as we would lose them otherwise\nconst toast = Object.assign(basicToast, {\n success: ToastState.success,\n info: ToastState.info,\n warning: ToastState.warning,\n error: ToastState.error,\n custom: ToastState.custom,\n message: ToastState.message,\n promise: ToastState.promise,\n dismiss: ToastState.dismiss,\n loading: ToastState.loading\n}, {\n getHistory,\n getToasts\n});\n\n__insertCSS(\"[data-sonner-toaster][dir=ltr],html[dir=ltr]{--toast-icon-margin-start:-3px;--toast-icon-margin-end:4px;--toast-svg-margin-start:-1px;--toast-svg-margin-end:0px;--toast-button-margin-start:auto;--toast-button-margin-end:0;--toast-close-button-start:0;--toast-close-button-end:unset;--toast-close-button-transform:translate(-35%, -35%)}[data-sonner-toaster][dir=rtl],html[dir=rtl]{--toast-icon-margin-start:4px;--toast-icon-margin-end:-3px;--toast-svg-margin-start:0px;--toast-svg-margin-end:-1px;--toast-button-margin-start:0;--toast-button-margin-end:auto;--toast-close-button-start:unset;--toast-close-button-end:0;--toast-close-button-transform:translate(35%, -35%)}[data-sonner-toaster]{position:fixed;width:var(--width);font-family:ui-sans-serif,system-ui,-apple-system,BlinkMacSystemFont,Segoe UI,Roboto,Helvetica Neue,Arial,Noto Sans,sans-serif,Apple Color Emoji,Segoe UI Emoji,Segoe UI Symbol,Noto Color Emoji;--gray1:hsl(0, 0%, 99%);--gray2:hsl(0, 0%, 97.3%);--gray3:hsl(0, 0%, 95.1%);--gray4:hsl(0, 0%, 93%);--gray5:hsl(0, 0%, 90.9%);--gray6:hsl(0, 0%, 88.7%);--gray7:hsl(0, 0%, 85.8%);--gray8:hsl(0, 0%, 78%);--gray9:hsl(0, 0%, 56.1%);--gray10:hsl(0, 0%, 52.3%);--gray11:hsl(0, 0%, 43.5%);--gray12:hsl(0, 0%, 9%);--border-radius:8px;box-sizing:border-box;padding:0;margin:0;list-style:none;outline:0;z-index:999999999;transition:transform .4s ease}@media (hover:none) and (pointer:coarse){[data-sonner-toaster][data-lifted=true]{transform:none}}[data-sonner-toaster][data-x-position=right]{right:var(--offset-right)}[data-sonner-toaster][data-x-position=left]{left:var(--offset-left)}[data-sonner-toaster][data-x-position=center]{left:50%;transform:translateX(-50%)}[data-sonner-toaster][data-y-position=top]{top:var(--offset-top)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--offset-bottom)}[data-sonner-toast]{--y:translateY(100%);--lift-amount:calc(var(--lift) * var(--gap));z-index:var(--z-index);position:absolute;opacity:0;transform:var(--y);touch-action:none;transition:transform .4s,opacity .4s,height .4s,box-shadow .2s;box-sizing:border-box;outline:0;overflow-wrap:anywhere}[data-sonner-toast][data-styled=true]{padding:16px;background:var(--normal-bg);border:1px solid var(--normal-border);color:var(--normal-text);border-radius:var(--border-radius);box-shadow:0 4px 12px rgba(0,0,0,.1);width:var(--width);font-size:13px;display:flex;align-items:center;gap:6px}[data-sonner-toast]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-y-position=top]{top:0;--y:translateY(-100%);--lift:1;--lift-amount:calc(1 * var(--gap))}[data-sonner-toast][data-y-position=bottom]{bottom:0;--y:translateY(100%);--lift:-1;--lift-amount:calc(var(--lift) * var(--gap))}[data-sonner-toast][data-styled=true] [data-description]{font-weight:400;line-height:1.4;color:#3f3f3f}[data-rich-colors=true][data-sonner-toast][data-styled=true] [data-description]{color:inherit}[data-sonner-toaster][data-sonner-theme=dark] [data-description]{color:#e8e8e8}[data-sonner-toast][data-styled=true] [data-title]{font-weight:500;line-height:1.5;color:inherit}[data-sonner-toast][data-styled=true] [data-icon]{display:flex;height:16px;width:16px;position:relative;justify-content:flex-start;align-items:center;flex-shrink:0;margin-left:var(--toast-icon-margin-start);margin-right:var(--toast-icon-margin-end)}[data-sonner-toast][data-promise=true] [data-icon]>svg{opacity:0;transform:scale(.8);transform-origin:center;animation:sonner-fade-in .3s ease forwards}[data-sonner-toast][data-styled=true] [data-icon]>*{flex-shrink:0}[data-sonner-toast][data-styled=true] [data-icon] svg{margin-left:var(--toast-svg-margin-start);margin-right:var(--toast-svg-margin-end)}[data-sonner-toast][data-styled=true] [data-content]{display:flex;flex-direction:column;gap:2px}[data-sonner-toast][data-styled=true] [data-button]{border-radius:4px;padding-left:8px;padding-right:8px;height:24px;font-size:12px;color:var(--normal-bg);background:var(--normal-text);margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end);border:none;font-weight:500;cursor:pointer;outline:0;display:flex;align-items:center;flex-shrink:0;transition:opacity .4s,box-shadow .2s}[data-sonner-toast][data-styled=true] [data-button]:focus-visible{box-shadow:0 0 0 2px rgba(0,0,0,.4)}[data-sonner-toast][data-styled=true] [data-button]:first-of-type{margin-left:var(--toast-button-margin-start);margin-right:var(--toast-button-margin-end)}[data-sonner-toast][data-styled=true] [data-cancel]{color:var(--normal-text);background:rgba(0,0,0,.08)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-styled=true] [data-cancel]{background:rgba(255,255,255,.3)}[data-sonner-toast][data-styled=true] [data-close-button]{position:absolute;left:var(--toast-close-button-start);right:var(--toast-close-button-end);top:0;height:20px;width:20px;display:flex;justify-content:center;align-items:center;padding:0;color:var(--gray12);background:var(--normal-bg);border:1px solid var(--gray4);transform:var(--toast-close-button-transform);border-radius:50%;cursor:pointer;z-index:1;transition:opacity .1s,background .2s,border-color .2s}[data-sonner-toast][data-styled=true] [data-close-button]:focus-visible{box-shadow:0 4px 12px rgba(0,0,0,.1),0 0 0 2px rgba(0,0,0,.2)}[data-sonner-toast][data-styled=true] [data-disabled=true]{cursor:not-allowed}[data-sonner-toast][data-styled=true]:hover [data-close-button]:hover{background:var(--gray2);border-color:var(--gray5)}[data-sonner-toast][data-swiping=true]::before{content:'';position:absolute;left:-100%;right:-100%;height:100%;z-index:-1}[data-sonner-toast][data-y-position=top][data-swiping=true]::before{bottom:50%;transform:scaleY(3) translateY(50%)}[data-sonner-toast][data-y-position=bottom][data-swiping=true]::before{top:50%;transform:scaleY(3) translateY(-50%)}[data-sonner-toast][data-swiping=false][data-removed=true]::before{content:'';position:absolute;inset:0;transform:scaleY(2)}[data-sonner-toast][data-expanded=true]::after{content:'';position:absolute;left:0;height:calc(var(--gap) + 1px);bottom:100%;width:100%}[data-sonner-toast][data-mounted=true]{--y:translateY(0);opacity:1}[data-sonner-toast][data-expanded=false][data-front=false]{--scale:var(--toasts-before) * 0.05 + 1;--y:translateY(calc(var(--lift-amount) * var(--toasts-before))) scale(calc(-1 * var(--scale)));height:var(--front-toast-height)}[data-sonner-toast]>*{transition:opacity .4s}[data-sonner-toast][data-x-position=right]{right:0}[data-sonner-toast][data-x-position=left]{left:0}[data-sonner-toast][data-expanded=false][data-front=false][data-styled=true]>*{opacity:0}[data-sonner-toast][data-visible=false]{opacity:0;pointer-events:none}[data-sonner-toast][data-mounted=true][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset)));height:var(--initial-height)}[data-sonner-toast][data-removed=true][data-front=true][data-swipe-out=false]{--y:translateY(calc(var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=true]{--y:translateY(calc(var(--lift) * var(--offset) + var(--lift) * -100%));opacity:0}[data-sonner-toast][data-removed=true][data-front=false][data-swipe-out=false][data-expanded=false]{--y:translateY(40%);opacity:0;transition:transform .5s,opacity .2s}[data-sonner-toast][data-removed=true][data-front=false]::before{height:calc(var(--initial-height) + 20%)}[data-sonner-toast][data-swiping=true]{transform:var(--y) translateY(var(--swipe-amount-y,0)) translateX(var(--swipe-amount-x,0));transition:none}[data-sonner-toast][data-swiped=true]{user-select:none}[data-sonner-toast][data-swipe-out=true][data-y-position=bottom],[data-sonner-toast][data-swipe-out=true][data-y-position=top]{animation-duration:.2s;animation-timing-function:ease-out;animation-fill-mode:forwards}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=left]{animation-name:swipe-out-left}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=right]{animation-name:swipe-out-right}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=up]{animation-name:swipe-out-up}[data-sonner-toast][data-swipe-out=true][data-swipe-direction=down]{animation-name:swipe-out-down}@keyframes swipe-out-left{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) - 100%));opacity:0}}@keyframes swipe-out-right{from{transform:var(--y) translateX(var(--swipe-amount-x));opacity:1}to{transform:var(--y) translateX(calc(var(--swipe-amount-x) + 100%));opacity:0}}@keyframes swipe-out-up{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) - 100%));opacity:0}}@keyframes swipe-out-down{from{transform:var(--y) translateY(var(--swipe-amount-y));opacity:1}to{transform:var(--y) translateY(calc(var(--swipe-amount-y) + 100%));opacity:0}}@media (max-width:600px){[data-sonner-toaster]{position:fixed;right:var(--mobile-offset-right);left:var(--mobile-offset-left);width:100%}[data-sonner-toaster][dir=rtl]{left:calc(var(--mobile-offset-left) * -1)}[data-sonner-toaster] [data-sonner-toast]{left:0;right:0;width:calc(100% - var(--mobile-offset-left) * 2)}[data-sonner-toaster][data-x-position=left]{left:var(--mobile-offset-left)}[data-sonner-toaster][data-y-position=bottom]{bottom:var(--mobile-offset-bottom)}[data-sonner-toaster][data-y-position=top]{top:var(--mobile-offset-top)}[data-sonner-toaster][data-x-position=center]{left:var(--mobile-offset-left);right:var(--mobile-offset-right);transform:none}}[data-sonner-toaster][data-sonner-theme=light]{--normal-bg:#fff;--normal-border:var(--gray4);--normal-text:var(--gray12);--success-bg:hsl(143, 85%, 96%);--success-border:hsl(145, 92%, 87%);--success-text:hsl(140, 100%, 27%);--info-bg:hsl(208, 100%, 97%);--info-border:hsl(221, 91%, 93%);--info-text:hsl(210, 92%, 45%);--warning-bg:hsl(49, 100%, 97%);--warning-border:hsl(49, 91%, 84%);--warning-text:hsl(31, 92%, 45%);--error-bg:hsl(359, 100%, 97%);--error-border:hsl(359, 100%, 94%);--error-text:hsl(360, 100%, 45%)}[data-sonner-toaster][data-sonner-theme=light] [data-sonner-toast][data-invert=true]{--normal-bg:#000;--normal-border:hsl(0, 0%, 20%);--normal-text:var(--gray1)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast][data-invert=true]{--normal-bg:#fff;--normal-border:var(--gray3);--normal-text:var(--gray12)}[data-sonner-toaster][data-sonner-theme=dark]{--normal-bg:#000;--normal-bg-hover:hsl(0, 0%, 12%);--normal-border:hsl(0, 0%, 20%);--normal-border-hover:hsl(0, 0%, 25%);--normal-text:var(--gray1);--success-bg:hsl(150, 100%, 6%);--success-border:hsl(147, 100%, 12%);--success-text:hsl(150, 86%, 65%);--info-bg:hsl(215, 100%, 6%);--info-border:hsl(223, 43%, 17%);--info-text:hsl(216, 87%, 65%);--warning-bg:hsl(64, 100%, 6%);--warning-border:hsl(60, 100%, 9%);--warning-text:hsl(46, 87%, 65%);--error-bg:hsl(358, 76%, 10%);--error-border:hsl(357, 89%, 16%);--error-text:hsl(358, 100%, 81%)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]{background:var(--normal-bg);border-color:var(--normal-border);color:var(--normal-text)}[data-sonner-toaster][data-sonner-theme=dark] [data-sonner-toast] [data-close-button]:hover{background:var(--normal-bg-hover);border-color:var(--normal-border-hover)}[data-rich-colors=true][data-sonner-toast][data-type=success]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=success] [data-close-button]{background:var(--success-bg);border-color:var(--success-border);color:var(--success-text)}[data-rich-colors=true][data-sonner-toast][data-type=info]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=info] [data-close-button]{background:var(--info-bg);border-color:var(--info-border);color:var(--info-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=warning] [data-close-button]{background:var(--warning-bg);border-color:var(--warning-border);color:var(--warning-text)}[data-rich-colors=true][data-sonner-toast][data-type=error]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}[data-rich-colors=true][data-sonner-toast][data-type=error] [data-close-button]{background:var(--error-bg);border-color:var(--error-border);color:var(--error-text)}.sonner-loading-wrapper{--size:16px;height:var(--size);width:var(--size);position:absolute;inset:0;z-index:10}.sonner-loading-wrapper[data-visible=false]{transform-origin:center;animation:sonner-fade-out .2s ease forwards}.sonner-spinner{position:relative;top:50%;left:50%;height:var(--size);width:var(--size)}.sonner-loading-bar{animation:sonner-spin 1.2s linear infinite;background:var(--gray11);border-radius:6px;height:8%;left:-10%;position:absolute;top:-3.9%;width:24%}.sonner-loading-bar:first-child{animation-delay:-1.2s;transform:rotate(.0001deg) translate(146%)}.sonner-loading-bar:nth-child(2){animation-delay:-1.1s;transform:rotate(30deg) translate(146%)}.sonner-loading-bar:nth-child(3){animation-delay:-1s;transform:rotate(60deg) translate(146%)}.sonner-loading-bar:nth-child(4){animation-delay:-.9s;transform:rotate(90deg) translate(146%)}.sonner-loading-bar:nth-child(5){animation-delay:-.8s;transform:rotate(120deg) translate(146%)}.sonner-loading-bar:nth-child(6){animation-delay:-.7s;transform:rotate(150deg) translate(146%)}.sonner-loading-bar:nth-child(7){animation-delay:-.6s;transform:rotate(180deg) translate(146%)}.sonner-loading-bar:nth-child(8){animation-delay:-.5s;transform:rotate(210deg) translate(146%)}.sonner-loading-bar:nth-child(9){animation-delay:-.4s;transform:rotate(240deg) translate(146%)}.sonner-loading-bar:nth-child(10){animation-delay:-.3s;transform:rotate(270deg) translate(146%)}.sonner-loading-bar:nth-child(11){animation-delay:-.2s;transform:rotate(300deg) translate(146%)}.sonner-loading-bar:nth-child(12){animation-delay:-.1s;transform:rotate(330deg) translate(146%)}@keyframes sonner-fade-in{0%{opacity:0;transform:scale(.8)}100%{opacity:1;transform:scale(1)}}@keyframes sonner-fade-out{0%{opacity:1;transform:scale(1)}100%{opacity:0;transform:scale(.8)}}@keyframes sonner-spin{0%{opacity:1}100%{opacity:.15}}@media (prefers-reduced-motion){.sonner-loading-bar,[data-sonner-toast],[data-sonner-toast]>*{transition:none!important;animation:none!important}}.sonner-loader{position:absolute;top:50%;left:50%;transform:translate(-50%,-50%);transform-origin:center;transition:opacity .2s,transform .2s}.sonner-loader[data-visible=false]{opacity:0;transform:scale(.8) translate(-50%,-50%)}\");\n\nfunction isAction(action) {\n return action.label !== undefined;\n}\n\n// Visible toasts amount\nconst VISIBLE_TOASTS_AMOUNT = 3;\n// Viewport padding\nconst VIEWPORT_OFFSET = '24px';\n// Mobile viewport padding\nconst MOBILE_VIEWPORT_OFFSET = '16px';\n// Default lifetime of a toasts (in ms)\nconst TOAST_LIFETIME = 4000;\n// Default toast width\nconst TOAST_WIDTH = 356;\n// Default gap between toasts\nconst GAP = 14;\n// Threshold to dismiss a toast\nconst SWIPE_THRESHOLD = 45;\n// Equal to exit animation duration\nconst TIME_BEFORE_UNMOUNT = 200;\nfunction cn(...classes) {\n return classes.filter(Boolean).join(' ');\n}\nfunction getDefaultSwipeDirections(position) {\n const [y, x] = position.split('-');\n const directions = [];\n if (y) {\n directions.push(y);\n }\n if (x) {\n directions.push(x);\n }\n return directions;\n}\nconst Toast = (props)=>{\n var _toast_classNames, _toast_classNames1, _toast_classNames2, _toast_classNames3, _toast_classNames4, _toast_classNames5, _toast_classNames6, _toast_classNames7, _toast_classNames8;\n const { invert: ToasterInvert, toast, unstyled, interacting, setHeights, visibleToasts, heights, index, toasts, expanded, removeToast, defaultRichColors, closeButton: closeButtonFromToaster, style, cancelButtonStyle, actionButtonStyle, className = '', descriptionClassName = '', duration: durationFromToaster, position, gap, expandByDefault, classNames, icons, closeButtonAriaLabel = 'Close toast' } = props;\n const [swipeDirection, setSwipeDirection] = React.useState(null);\n const [swipeOutDirection, setSwipeOutDirection] = React.useState(null);\n const [mounted, setMounted] = React.useState(false);\n const [removed, setRemoved] = React.useState(false);\n const [swiping, setSwiping] = React.useState(false);\n const [swipeOut, setSwipeOut] = React.useState(false);\n const [isSwiped, setIsSwiped] = React.useState(false);\n const [offsetBeforeRemove, setOffsetBeforeRemove] = React.useState(0);\n const [initialHeight, setInitialHeight] = React.useState(0);\n const remainingTime = React.useRef(toast.duration || durationFromToaster || TOAST_LIFETIME);\n const dragStartTime = React.useRef(null);\n const toastRef = React.useRef(null);\n const isFront = index === 0;\n const isVisible = index + 1 <= visibleToasts;\n const toastType = toast.type;\n const dismissible = toast.dismissible !== false;\n const toastClassname = toast.className || '';\n const toastDescriptionClassname = toast.descriptionClassName || '';\n // Height index is used to calculate the offset as it gets updated before the toast array, which means we can calculate the new layout faster.\n const heightIndex = React.useMemo(()=>heights.findIndex((height)=>height.toastId === toast.id) || 0, [\n heights,\n toast.id\n ]);\n const closeButton = React.useMemo(()=>{\n var _toast_closeButton;\n return (_toast_closeButton = toast.closeButton) != null ? _toast_closeButton : closeButtonFromToaster;\n }, [\n toast.closeButton,\n closeButtonFromToaster\n ]);\n const duration = React.useMemo(()=>toast.duration || durationFromToaster || TOAST_LIFETIME, [\n toast.duration,\n durationFromToaster\n ]);\n const closeTimerStartTimeRef = React.useRef(0);\n const offset = React.useRef(0);\n const lastCloseTimerStartTimeRef = React.useRef(0);\n const pointerStartRef = React.useRef(null);\n const [y, x] = position.split('-');\n const toastsHeightBefore = React.useMemo(()=>{\n return heights.reduce((prev, curr, reducerIndex)=>{\n // Calculate offset up until current toast\n if (reducerIndex >= heightIndex) {\n return prev;\n }\n return prev + curr.height;\n }, 0);\n }, [\n heights,\n heightIndex\n ]);\n const isDocumentHidden = useIsDocumentHidden();\n const invert = toast.invert || ToasterInvert;\n const disabled = toastType === 'loading';\n offset.current = React.useMemo(()=>heightIndex * gap + toastsHeightBefore, [\n heightIndex,\n toastsHeightBefore\n ]);\n React.useEffect(()=>{\n remainingTime.current = duration;\n }, [\n duration\n ]);\n React.useEffect(()=>{\n // Trigger enter animation without using CSS animation\n setMounted(true);\n }, []);\n React.useEffect(()=>{\n const toastNode = toastRef.current;\n if (toastNode) {\n const height = toastNode.getBoundingClientRect().height;\n // Add toast height to heights array after the toast is mounted\n setInitialHeight(height);\n setHeights((h)=>[\n {\n toastId: toast.id,\n height,\n position: toast.position\n },\n ...h\n ]);\n return ()=>setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n }\n }, [\n setHeights,\n toast.id\n ]);\n React.useLayoutEffect(()=>{\n // Keep height up to date with the content in case it updates\n if (!mounted) return;\n const toastNode = toastRef.current;\n const originalHeight = toastNode.style.height;\n toastNode.style.height = 'auto';\n const newHeight = toastNode.getBoundingClientRect().height;\n toastNode.style.height = originalHeight;\n setInitialHeight(newHeight);\n setHeights((heights)=>{\n const alreadyExists = heights.find((height)=>height.toastId === toast.id);\n if (!alreadyExists) {\n return [\n {\n toastId: toast.id,\n height: newHeight,\n position: toast.position\n },\n ...heights\n ];\n } else {\n return heights.map((height)=>height.toastId === toast.id ? {\n ...height,\n height: newHeight\n } : height);\n }\n });\n }, [\n mounted,\n toast.title,\n toast.description,\n setHeights,\n toast.id,\n toast.jsx,\n toast.action,\n toast.cancel\n ]);\n const deleteToast = React.useCallback(()=>{\n // Save the offset for the exit swipe animation\n setRemoved(true);\n setOffsetBeforeRemove(offset.current);\n setHeights((h)=>h.filter((height)=>height.toastId !== toast.id));\n setTimeout(()=>{\n removeToast(toast);\n }, TIME_BEFORE_UNMOUNT);\n }, [\n toast,\n removeToast,\n setHeights,\n offset\n ]);\n React.useEffect(()=>{\n if (toast.promise && toastType === 'loading' || toast.duration === Infinity || toast.type === 'loading') return;\n let timeoutId;\n // Pause the timer on each hover\n const pauseTimer = ()=>{\n if (lastCloseTimerStartTimeRef.current < closeTimerStartTimeRef.current) {\n // Get the elapsed time since the timer started\n const elapsedTime = new Date().getTime() - closeTimerStartTimeRef.current;\n remainingTime.current = remainingTime.current - elapsedTime;\n }\n lastCloseTimerStartTimeRef.current = new Date().getTime();\n };\n const startTimer = ()=>{\n // setTimeout(, Infinity) behaves as if the delay is 0.\n // As a result, the toast would be closed immediately, giving the appearance that it was never rendered.\n // See: https://github.com/denysdovhan/wtfjs?tab=readme-ov-file#an-infinite-timeout\n if (remainingTime.current === Infinity) return;\n closeTimerStartTimeRef.current = new Date().getTime();\n // Let the toast know it has started\n timeoutId = setTimeout(()=>{\n toast.onAutoClose == null ? void 0 : toast.onAutoClose.call(toast, toast);\n deleteToast();\n }, remainingTime.current);\n };\n if (expanded || interacting || isDocumentHidden) {\n pauseTimer();\n } else {\n startTimer();\n }\n return ()=>clearTimeout(timeoutId);\n }, [\n expanded,\n interacting,\n toast,\n toastType,\n isDocumentHidden,\n deleteToast\n ]);\n React.useEffect(()=>{\n if (toast.delete) {\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n }\n }, [\n deleteToast,\n toast.delete\n ]);\n function getLoadingIcon() {\n var _toast_classNames;\n if (icons == null ? void 0 : icons.loading) {\n var _toast_classNames1;\n return /*#__PURE__*/ React.createElement(\"div\", {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1.loader, 'sonner-loader'),\n \"data-visible\": toastType === 'loading'\n }, icons.loading);\n }\n return /*#__PURE__*/ React.createElement(Loader, {\n className: cn(classNames == null ? void 0 : classNames.loader, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.loader),\n visible: toastType === 'loading'\n });\n }\n const icon = toast.icon || (icons == null ? void 0 : icons[toastType]) || getAsset(toastType);\n var _toast_richColors, _icons_close;\n return /*#__PURE__*/ React.createElement(\"li\", {\n tabIndex: 0,\n ref: toastRef,\n className: cn(className, toastClassname, classNames == null ? void 0 : classNames.toast, toast == null ? void 0 : (_toast_classNames = toast.classNames) == null ? void 0 : _toast_classNames.toast, classNames == null ? void 0 : classNames.default, classNames == null ? void 0 : classNames[toastType], toast == null ? void 0 : (_toast_classNames1 = toast.classNames) == null ? void 0 : _toast_classNames1[toastType]),\n \"data-sonner-toast\": \"\",\n \"data-rich-colors\": (_toast_richColors = toast.richColors) != null ? _toast_richColors : defaultRichColors,\n \"data-styled\": !Boolean(toast.jsx || toast.unstyled || unstyled),\n \"data-mounted\": mounted,\n \"data-promise\": Boolean(toast.promise),\n \"data-swiped\": isSwiped,\n \"data-removed\": removed,\n \"data-visible\": isVisible,\n \"data-y-position\": y,\n \"data-x-position\": x,\n \"data-index\": index,\n \"data-front\": isFront,\n \"data-swiping\": swiping,\n \"data-dismissible\": dismissible,\n \"data-type\": toastType,\n \"data-invert\": invert,\n \"data-swipe-out\": swipeOut,\n \"data-swipe-direction\": swipeOutDirection,\n \"data-expanded\": Boolean(expanded || expandByDefault && mounted),\n \"data-testid\": toast.testId,\n style: {\n '--index': index,\n '--toasts-before': index,\n '--z-index': toasts.length - index,\n '--offset': `${removed ? offsetBeforeRemove : offset.current}px`,\n '--initial-height': expandByDefault ? 'auto' : `${initialHeight}px`,\n ...style,\n ...toast.style\n },\n onDragEnd: ()=>{\n setSwiping(false);\n setSwipeDirection(null);\n pointerStartRef.current = null;\n },\n onPointerDown: (event)=>{\n if (event.button === 2) return; // Return early on right click\n if (disabled || !dismissible) return;\n dragStartTime.current = new Date();\n setOffsetBeforeRemove(offset.current);\n // Ensure we maintain correct pointer capture even when going outside of the toast (e.g. when swiping)\n event.target.setPointerCapture(event.pointerId);\n if (event.target.tagName === 'BUTTON') return;\n setSwiping(true);\n pointerStartRef.current = {\n x: event.clientX,\n y: event.clientY\n };\n },\n onPointerUp: ()=>{\n var _toastRef_current, _toastRef_current1, _dragStartTime_current;\n if (swipeOut || !dismissible) return;\n pointerStartRef.current = null;\n const swipeAmountX = Number(((_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.getPropertyValue('--swipe-amount-x').replace('px', '')) || 0);\n const swipeAmountY = Number(((_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.getPropertyValue('--swipe-amount-y').replace('px', '')) || 0);\n const timeTaken = new Date().getTime() - ((_dragStartTime_current = dragStartTime.current) == null ? void 0 : _dragStartTime_current.getTime());\n const swipeAmount = swipeDirection === 'x' ? swipeAmountX : swipeAmountY;\n const velocity = Math.abs(swipeAmount) / timeTaken;\n if (Math.abs(swipeAmount) >= SWIPE_THRESHOLD || velocity > 0.11) {\n setOffsetBeforeRemove(offset.current);\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n if (swipeDirection === 'x') {\n setSwipeOutDirection(swipeAmountX > 0 ? 'right' : 'left');\n } else {\n setSwipeOutDirection(swipeAmountY > 0 ? 'down' : 'up');\n }\n deleteToast();\n setSwipeOut(true);\n return;\n } else {\n var _toastRef_current2, _toastRef_current3;\n (_toastRef_current2 = toastRef.current) == null ? void 0 : _toastRef_current2.style.setProperty('--swipe-amount-x', `0px`);\n (_toastRef_current3 = toastRef.current) == null ? void 0 : _toastRef_current3.style.setProperty('--swipe-amount-y', `0px`);\n }\n setIsSwiped(false);\n setSwiping(false);\n setSwipeDirection(null);\n },\n onPointerMove: (event)=>{\n var _window_getSelection, // Apply transform using both x and y values\n _toastRef_current, _toastRef_current1;\n if (!pointerStartRef.current || !dismissible) return;\n const isHighlighted = ((_window_getSelection = window.getSelection()) == null ? void 0 : _window_getSelection.toString().length) > 0;\n if (isHighlighted) return;\n const yDelta = event.clientY - pointerStartRef.current.y;\n const xDelta = event.clientX - pointerStartRef.current.x;\n var _props_swipeDirections;\n const swipeDirections = (_props_swipeDirections = props.swipeDirections) != null ? _props_swipeDirections : getDefaultSwipeDirections(position);\n // Determine swipe direction if not already locked\n if (!swipeDirection && (Math.abs(xDelta) > 1 || Math.abs(yDelta) > 1)) {\n setSwipeDirection(Math.abs(xDelta) > Math.abs(yDelta) ? 'x' : 'y');\n }\n let swipeAmount = {\n x: 0,\n y: 0\n };\n const getDampening = (delta)=>{\n const factor = Math.abs(delta) / 20;\n return 1 / (1.5 + factor);\n };\n // Only apply swipe in the locked direction\n if (swipeDirection === 'y') {\n // Handle vertical swipes\n if (swipeDirections.includes('top') || swipeDirections.includes('bottom')) {\n if (swipeDirections.includes('top') && yDelta < 0 || swipeDirections.includes('bottom') && yDelta > 0) {\n swipeAmount.y = yDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = yDelta * getDampening(yDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.y = Math.abs(dampenedDelta) < Math.abs(yDelta) ? dampenedDelta : yDelta;\n }\n }\n } else if (swipeDirection === 'x') {\n // Handle horizontal swipes\n if (swipeDirections.includes('left') || swipeDirections.includes('right')) {\n if (swipeDirections.includes('left') && xDelta < 0 || swipeDirections.includes('right') && xDelta > 0) {\n swipeAmount.x = xDelta;\n } else {\n // Smoothly transition to dampened movement\n const dampenedDelta = xDelta * getDampening(xDelta);\n // Ensure we don't jump when transitioning to dampened movement\n swipeAmount.x = Math.abs(dampenedDelta) < Math.abs(xDelta) ? dampenedDelta : xDelta;\n }\n }\n }\n if (Math.abs(swipeAmount.x) > 0 || Math.abs(swipeAmount.y) > 0) {\n setIsSwiped(true);\n }\n (_toastRef_current = toastRef.current) == null ? void 0 : _toastRef_current.style.setProperty('--swipe-amount-x', `${swipeAmount.x}px`);\n (_toastRef_current1 = toastRef.current) == null ? void 0 : _toastRef_current1.style.setProperty('--swipe-amount-y', `${swipeAmount.y}px`);\n }\n }, closeButton && !toast.jsx && toastType !== 'loading' ? /*#__PURE__*/ React.createElement(\"button\", {\n \"aria-label\": closeButtonAriaLabel,\n \"data-disabled\": disabled,\n \"data-close-button\": true,\n onClick: disabled || !dismissible ? ()=>{} : ()=>{\n deleteToast();\n toast.onDismiss == null ? void 0 : toast.onDismiss.call(toast, toast);\n },\n className: cn(classNames == null ? void 0 : classNames.closeButton, toast == null ? void 0 : (_toast_classNames2 = toast.classNames) == null ? void 0 : _toast_classNames2.closeButton)\n }, (_icons_close = icons == null ? void 0 : icons.close) != null ? _icons_close : CloseIcon) : null, (toastType || toast.icon || toast.promise) && toast.icon !== null && ((icons == null ? void 0 : icons[toastType]) !== null || toast.icon) ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-icon\": \"\",\n className: cn(classNames == null ? void 0 : classNames.icon, toast == null ? void 0 : (_toast_classNames3 = toast.classNames) == null ? void 0 : _toast_classNames3.icon)\n }, toast.promise || toast.type === 'loading' && !toast.icon ? toast.icon || getLoadingIcon() : null, toast.type !== 'loading' ? icon : null) : null, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-content\": \"\",\n className: cn(classNames == null ? void 0 : classNames.content, toast == null ? void 0 : (_toast_classNames4 = toast.classNames) == null ? void 0 : _toast_classNames4.content)\n }, /*#__PURE__*/ React.createElement(\"div\", {\n \"data-title\": \"\",\n className: cn(classNames == null ? void 0 : classNames.title, toast == null ? void 0 : (_toast_classNames5 = toast.classNames) == null ? void 0 : _toast_classNames5.title)\n }, toast.jsx ? toast.jsx : typeof toast.title === 'function' ? toast.title() : toast.title), toast.description ? /*#__PURE__*/ React.createElement(\"div\", {\n \"data-description\": \"\",\n className: cn(descriptionClassName, toastDescriptionClassname, classNames == null ? void 0 : classNames.description, toast == null ? void 0 : (_toast_classNames6 = toast.classNames) == null ? void 0 : _toast_classNames6.description)\n }, typeof toast.description === 'function' ? toast.description() : toast.description) : null), /*#__PURE__*/ React.isValidElement(toast.cancel) ? toast.cancel : toast.cancel && isAction(toast.cancel) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-cancel\": true,\n style: toast.cancelButtonStyle || cancelButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.cancel)) return;\n if (!dismissible) return;\n toast.cancel.onClick == null ? void 0 : toast.cancel.onClick.call(toast.cancel, event);\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.cancelButton, toast == null ? void 0 : (_toast_classNames7 = toast.classNames) == null ? void 0 : _toast_classNames7.cancelButton)\n }, toast.cancel.label) : null, /*#__PURE__*/ React.isValidElement(toast.action) ? toast.action : toast.action && isAction(toast.action) ? /*#__PURE__*/ React.createElement(\"button\", {\n \"data-button\": true,\n \"data-action\": true,\n style: toast.actionButtonStyle || actionButtonStyle,\n onClick: (event)=>{\n // We need to check twice because typescript\n if (!isAction(toast.action)) return;\n toast.action.onClick == null ? void 0 : toast.action.onClick.call(toast.action, event);\n if (event.defaultPrevented) return;\n deleteToast();\n },\n className: cn(classNames == null ? void 0 : classNames.actionButton, toast == null ? void 0 : (_toast_classNames8 = toast.classNames) == null ? void 0 : _toast_classNames8.actionButton)\n }, toast.action.label) : null);\n};\nfunction getDocumentDirection() {\n if (typeof window === 'undefined') return 'ltr';\n if (typeof document === 'undefined') return 'ltr'; // For Fresh purpose\n const dirAttribute = document.documentElement.getAttribute('dir');\n if (dirAttribute === 'auto' || !dirAttribute) {\n return window.getComputedStyle(document.documentElement).direction;\n }\n return dirAttribute;\n}\nfunction assignOffset(defaultOffset, mobileOffset) {\n const styles = {};\n [\n defaultOffset,\n mobileOffset\n ].forEach((offset, index)=>{\n const isMobile = index === 1;\n const prefix = isMobile ? '--mobile-offset' : '--offset';\n const defaultValue = isMobile ? MOBILE_VIEWPORT_OFFSET : VIEWPORT_OFFSET;\n function assignAll(offset) {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n styles[`${prefix}-${key}`] = typeof offset === 'number' ? `${offset}px` : offset;\n });\n }\n if (typeof offset === 'number' || typeof offset === 'string') {\n assignAll(offset);\n } else if (typeof offset === 'object') {\n [\n 'top',\n 'right',\n 'bottom',\n 'left'\n ].forEach((key)=>{\n if (offset[key] === undefined) {\n styles[`${prefix}-${key}`] = defaultValue;\n } else {\n styles[`${prefix}-${key}`] = typeof offset[key] === 'number' ? `${offset[key]}px` : offset[key];\n }\n });\n } else {\n assignAll(defaultValue);\n }\n });\n return styles;\n}\nfunction useSonner() {\n const [activeToasts, setActiveToasts] = React.useState([]);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>toasts.filter((t)=>t.id !== toast.id));\n });\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setActiveToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, []);\n return {\n toasts: activeToasts\n };\n}\nconst Toaster = /*#__PURE__*/ React.forwardRef(function Toaster(props, ref) {\n const { id, invert, position = 'bottom-right', hotkey = [\n 'altKey',\n 'KeyT'\n ], expand, closeButton, className, offset, mobileOffset, theme = 'light', richColors, duration, style, visibleToasts = VISIBLE_TOASTS_AMOUNT, toastOptions, dir = getDocumentDirection(), gap = GAP, icons, containerAriaLabel = 'Notifications' } = props;\n const [toasts, setToasts] = React.useState([]);\n const filteredToasts = React.useMemo(()=>{\n if (id) {\n return toasts.filter((toast)=>toast.toasterId === id);\n }\n return toasts.filter((toast)=>!toast.toasterId);\n }, [\n toasts,\n id\n ]);\n const possiblePositions = React.useMemo(()=>{\n return Array.from(new Set([\n position\n ].concat(filteredToasts.filter((toast)=>toast.position).map((toast)=>toast.position))));\n }, [\n filteredToasts,\n position\n ]);\n const [heights, setHeights] = React.useState([]);\n const [expanded, setExpanded] = React.useState(false);\n const [interacting, setInteracting] = React.useState(false);\n const [actualTheme, setActualTheme] = React.useState(theme !== 'system' ? theme : typeof window !== 'undefined' ? window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches ? 'dark' : 'light' : 'light');\n const listRef = React.useRef(null);\n const hotkeyLabel = hotkey.join('+').replace(/Key/g, '').replace(/Digit/g, '');\n const lastFocusedElementRef = React.useRef(null);\n const isFocusWithinRef = React.useRef(false);\n const removeToast = React.useCallback((toastToRemove)=>{\n setToasts((toasts)=>{\n var _toasts_find;\n if (!((_toasts_find = toasts.find((toast)=>toast.id === toastToRemove.id)) == null ? void 0 : _toasts_find.delete)) {\n ToastState.dismiss(toastToRemove.id);\n }\n return toasts.filter(({ id })=>id !== toastToRemove.id);\n });\n }, []);\n React.useEffect(()=>{\n return ToastState.subscribe((toast)=>{\n if (toast.dismiss) {\n // Prevent batching of other state updates\n requestAnimationFrame(()=>{\n setToasts((toasts)=>toasts.map((t)=>t.id === toast.id ? {\n ...t,\n delete: true\n } : t));\n });\n return;\n }\n // Prevent batching, temp solution.\n setTimeout(()=>{\n ReactDOM.flushSync(()=>{\n setToasts((toasts)=>{\n const indexOfExistingToast = toasts.findIndex((t)=>t.id === toast.id);\n // Update the toast if it already exists\n if (indexOfExistingToast !== -1) {\n return [\n ...toasts.slice(0, indexOfExistingToast),\n {\n ...toasts[indexOfExistingToast],\n ...toast\n },\n ...toasts.slice(indexOfExistingToast + 1)\n ];\n }\n return [\n toast,\n ...toasts\n ];\n });\n });\n });\n });\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n if (theme !== 'system') {\n setActualTheme(theme);\n return;\n }\n if (theme === 'system') {\n // check if current preference is dark\n if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {\n // it's currently dark\n setActualTheme('dark');\n } else {\n // it's not dark\n setActualTheme('light');\n }\n }\n if (typeof window === 'undefined') return;\n const darkMediaQuery = window.matchMedia('(prefers-color-scheme: dark)');\n try {\n // Chrome & Firefox\n darkMediaQuery.addEventListener('change', ({ matches })=>{\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n });\n } catch (error) {\n // Safari < 14\n darkMediaQuery.addListener(({ matches })=>{\n try {\n if (matches) {\n setActualTheme('dark');\n } else {\n setActualTheme('light');\n }\n } catch (e) {\n console.error(e);\n }\n });\n }\n }, [\n theme\n ]);\n React.useEffect(()=>{\n // Ensure expanded is always false when no toasts are present / only one left\n if (toasts.length <= 1) {\n setExpanded(false);\n }\n }, [\n toasts\n ]);\n React.useEffect(()=>{\n const handleKeyDown = (event)=>{\n var _listRef_current;\n const isHotkeyPressed = hotkey.every((key)=>event[key] || event.code === key);\n if (isHotkeyPressed) {\n var _listRef_current1;\n setExpanded(true);\n (_listRef_current1 = listRef.current) == null ? void 0 : _listRef_current1.focus();\n }\n if (event.code === 'Escape' && (document.activeElement === listRef.current || ((_listRef_current = listRef.current) == null ? void 0 : _listRef_current.contains(document.activeElement)))) {\n setExpanded(false);\n }\n };\n document.addEventListener('keydown', handleKeyDown);\n return ()=>document.removeEventListener('keydown', handleKeyDown);\n }, [\n hotkey\n ]);\n React.useEffect(()=>{\n if (listRef.current) {\n return ()=>{\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n isFocusWithinRef.current = false;\n }\n };\n }\n }, [\n listRef.current\n ]);\n return(// Remove item from normal navigation flow, only available via hotkey\n /*#__PURE__*/ React.createElement(\"section\", {\n ref: ref,\n \"aria-label\": `${containerAriaLabel} ${hotkeyLabel}`,\n tabIndex: -1,\n \"aria-live\": \"polite\",\n \"aria-relevant\": \"additions text\",\n \"aria-atomic\": \"false\",\n suppressHydrationWarning: true\n }, possiblePositions.map((position, index)=>{\n var _heights_;\n const [y, x] = position.split('-');\n if (!filteredToasts.length) return null;\n return /*#__PURE__*/ React.createElement(\"ol\", {\n key: position,\n dir: dir === 'auto' ? getDocumentDirection() : dir,\n tabIndex: -1,\n ref: listRef,\n className: className,\n \"data-sonner-toaster\": true,\n \"data-sonner-theme\": actualTheme,\n \"data-y-position\": y,\n \"data-x-position\": x,\n style: {\n '--front-toast-height': `${((_heights_ = heights[0]) == null ? void 0 : _heights_.height) || 0}px`,\n '--width': `${TOAST_WIDTH}px`,\n '--gap': `${gap}px`,\n ...style,\n ...assignOffset(offset, mobileOffset)\n },\n onBlur: (event)=>{\n if (isFocusWithinRef.current && !event.currentTarget.contains(event.relatedTarget)) {\n isFocusWithinRef.current = false;\n if (lastFocusedElementRef.current) {\n lastFocusedElementRef.current.focus({\n preventScroll: true\n });\n lastFocusedElementRef.current = null;\n }\n }\n },\n onFocus: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n if (!isFocusWithinRef.current) {\n isFocusWithinRef.current = true;\n lastFocusedElementRef.current = event.relatedTarget;\n }\n },\n onMouseEnter: ()=>setExpanded(true),\n onMouseMove: ()=>setExpanded(true),\n onMouseLeave: ()=>{\n // Avoid setting expanded to false when interacting with a toast, e.g. swiping\n if (!interacting) {\n setExpanded(false);\n }\n },\n onDragEnd: ()=>setExpanded(false),\n onPointerDown: (event)=>{\n const isNotDismissible = event.target instanceof HTMLElement && event.target.dataset.dismissible === 'false';\n if (isNotDismissible) return;\n setInteracting(true);\n },\n onPointerUp: ()=>setInteracting(false)\n }, filteredToasts.filter((toast)=>!toast.position && index === 0 || toast.position === position).map((toast, index)=>{\n var _toastOptions_duration, _toastOptions_closeButton;\n return /*#__PURE__*/ React.createElement(Toast, {\n key: toast.id,\n icons: icons,\n index: index,\n toast: toast,\n defaultRichColors: richColors,\n duration: (_toastOptions_duration = toastOptions == null ? void 0 : toastOptions.duration) != null ? _toastOptions_duration : duration,\n className: toastOptions == null ? void 0 : toastOptions.className,\n descriptionClassName: toastOptions == null ? void 0 : toastOptions.descriptionClassName,\n invert: invert,\n visibleToasts: visibleToasts,\n closeButton: (_toastOptions_closeButton = toastOptions == null ? void 0 : toastOptions.closeButton) != null ? _toastOptions_closeButton : closeButton,\n interacting: interacting,\n position: position,\n style: toastOptions == null ? void 0 : toastOptions.style,\n unstyled: toastOptions == null ? void 0 : toastOptions.unstyled,\n classNames: toastOptions == null ? void 0 : toastOptions.classNames,\n cancelButtonStyle: toastOptions == null ? void 0 : toastOptions.cancelButtonStyle,\n actionButtonStyle: toastOptions == null ? void 0 : toastOptions.actionButtonStyle,\n closeButtonAriaLabel: toastOptions == null ? void 0 : toastOptions.closeButtonAriaLabel,\n removeToast: removeToast,\n toasts: filteredToasts.filter((t)=>t.position == toast.position),\n heights: heights.filter((h)=>h.position == toast.position),\n setHeights: setHeights,\n expandByDefault: expand,\n gap: gap,\n expanded: expanded,\n swipeDirections: props.swipeDirections\n });\n }));\n })));\n});\n\nexport { Toaster, toast, useSonner };\n","import { Toaster as Sonner, toast } from 'sonner';\n\ntype ToasterProps = React.ComponentProps;\n\nconst Toaster = ({ ...props }: ToasterProps) => {\n return (\n \n );\n};\n\nexport { Toaster, toast };\n","import { useState, useCallback, useEffect, useRef } from 'react';\nimport { toast } from '../components/ui/sonner';\nimport { api, isAbortError } from '../api';\nimport type { Conversation, Message, MessagePath } from '../types';\n\nconst MESSAGE_PAGE_SIZE = 200;\n\n// Generate a key for deduplicating messages by content\nexport function getMessageContentKey(msg: Message): string {\n return `${msg.type}-${msg.conversation_key}-${msg.text}-${msg.sender_timestamp}`;\n}\n\nexport interface UseConversationMessagesResult {\n messages: Message[];\n messagesLoading: boolean;\n loadingOlder: boolean;\n hasOlderMessages: boolean;\n setMessages: React.Dispatch>;\n fetchMessages: (showLoading?: boolean) => Promise;\n fetchOlderMessages: () => Promise;\n addMessageIfNew: (msg: Message) => boolean;\n updateMessageAck: (messageId: number, ackCount: number, paths?: MessagePath[]) => void;\n}\n\nexport function useConversationMessages(\n activeConversation: Conversation | null\n): UseConversationMessagesResult {\n const [messages, setMessages] = useState([]);\n const [messagesLoading, setMessagesLoading] = useState(false);\n const [loadingOlder, setLoadingOlder] = useState(false);\n const [hasOlderMessages, setHasOlderMessages] = useState(false);\n\n // Track seen message content for deduplication\n const seenMessageContent = useRef>(new Set());\n\n // AbortController for cancelling in-flight requests on conversation change\n const abortControllerRef = useRef(null);\n\n // Ref to track the conversation ID being fetched to prevent stale responses\n const fetchingConversationIdRef = useRef(null);\n\n // Fetch messages for active conversation\n // Note: This is called manually and from the useEffect. The useEffect handles\n // cancellation via AbortController; manual calls (e.g., after sending a message)\n // don't need cancellation.\n const fetchMessages = useCallback(\n async (showLoading = false, signal?: AbortSignal) => {\n if (!activeConversation || activeConversation.type === 'raw') {\n setMessages([]);\n setHasOlderMessages(false);\n return;\n }\n\n // Track which conversation we're fetching for\n const conversationId = activeConversation.id;\n\n if (showLoading) {\n setMessagesLoading(true);\n // Clear messages first so MessageList resets scroll state for new conversation\n setMessages([]);\n }\n try {\n const data = await api.getMessages(\n {\n type: activeConversation.type === 'channel' ? 'CHAN' : 'PRIV',\n conversation_key: activeConversation.id,\n limit: MESSAGE_PAGE_SIZE,\n },\n signal\n );\n\n // Check if this response is still for the current conversation\n // This handles the race where the conversation changed while awaiting\n if (fetchingConversationIdRef.current !== conversationId) {\n // Stale response - conversation changed while we were fetching\n return;\n }\n\n setMessages(data);\n // Track seen content for new messages\n seenMessageContent.current.clear();\n for (const msg of data) {\n seenMessageContent.current.add(getMessageContentKey(msg));\n }\n // If we got a full page, there might be more\n setHasOlderMessages(data.length >= MESSAGE_PAGE_SIZE);\n } catch (err) {\n // Don't show error toast for aborted requests (user switched conversations)\n if (isAbortError(err)) {\n return;\n }\n console.error('Failed to fetch messages:', err);\n toast.error('Failed to load messages', {\n description: err instanceof Error ? err.message : 'Check your connection',\n });\n } finally {\n if (showLoading) {\n setMessagesLoading(false);\n }\n }\n },\n [activeConversation]\n );\n\n // Fetch older messages (pagination)\n const fetchOlderMessages = useCallback(async () => {\n if (\n !activeConversation ||\n activeConversation.type === 'raw' ||\n loadingOlder ||\n !hasOlderMessages\n )\n return;\n\n setLoadingOlder(true);\n try {\n const data = await api.getMessages({\n type: activeConversation.type === 'channel' ? 'CHAN' : 'PRIV',\n conversation_key: activeConversation.id,\n limit: MESSAGE_PAGE_SIZE,\n offset: messages.length,\n });\n\n if (data.length > 0) {\n // Prepend older messages (they come sorted DESC, so older are at the end)\n setMessages((prev) => [...prev, ...data]);\n // Track seen content\n for (const msg of data) {\n seenMessageContent.current.add(getMessageContentKey(msg));\n }\n }\n // If we got less than a full page, no more messages\n setHasOlderMessages(data.length >= MESSAGE_PAGE_SIZE);\n } catch (err) {\n console.error('Failed to fetch older messages:', err);\n toast.error('Failed to load older messages', {\n description: err instanceof Error ? err.message : 'Check your connection',\n });\n } finally {\n setLoadingOlder(false);\n }\n }, [activeConversation, loadingOlder, hasOlderMessages, messages.length]);\n\n // Fetch messages when conversation changes, with proper cancellation\n useEffect(() => {\n // Abort any previous in-flight request\n if (abortControllerRef.current) {\n abortControllerRef.current.abort();\n }\n\n // Track which conversation we're now fetching\n fetchingConversationIdRef.current = activeConversation?.id ?? null;\n\n // Clear state for new conversation\n if (!activeConversation || activeConversation.type === 'raw') {\n setMessages([]);\n setHasOlderMessages(false);\n return;\n }\n\n // Create new AbortController for this fetch\n const controller = new AbortController();\n abortControllerRef.current = controller;\n\n // Fetch messages with the abort signal\n fetchMessages(true, controller.signal);\n\n // Cleanup: abort request if conversation changes or component unmounts\n return () => {\n controller.abort();\n };\n // NOTE: Intentionally omitting fetchMessages and activeConversation from deps:\n // - fetchMessages is recreated when activeConversation changes, which would cause infinite loops\n // - activeConversation object identity changes on every render; we only care about id/type\n // - We use fetchingConversationIdRef and AbortController to handle stale responses safely\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [activeConversation?.id, activeConversation?.type]);\n\n // Add a message if it's new (deduplication)\n // Returns true if the message was added, false if it was a duplicate\n const addMessageIfNew = useCallback((msg: Message): boolean => {\n const contentKey = getMessageContentKey(msg);\n if (seenMessageContent.current.has(contentKey)) {\n console.debug('Duplicate message content ignored:', contentKey.slice(0, 50));\n return false;\n }\n seenMessageContent.current.add(contentKey);\n\n // Limit set size to prevent memory issues (keep last 500)\n if (seenMessageContent.current.size > 1000) {\n const entries = Array.from(seenMessageContent.current);\n seenMessageContent.current = new Set(entries.slice(-500));\n }\n\n setMessages((prev) => {\n if (prev.some((m) => m.id === msg.id)) {\n return prev;\n }\n return [...prev, msg];\n });\n\n return true;\n }, []);\n\n // Update a message's ack count and paths\n const updateMessageAck = useCallback(\n (messageId: number, ackCount: number, paths?: MessagePath[]) => {\n setMessages((prev) => {\n const idx = prev.findIndex((m) => m.id === messageId);\n if (idx >= 0) {\n const updated = [...prev];\n updated[idx] = {\n ...prev[idx],\n acked: ackCount,\n ...(paths !== undefined && { paths }),\n };\n return updated;\n }\n return prev;\n });\n },\n []\n );\n\n return {\n messages,\n messagesLoading,\n loadingOlder,\n hasOlderMessages,\n setMessages,\n fetchMessages,\n fetchOlderMessages,\n addMessageIfNew,\n updateMessageAck,\n };\n}\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nconst toKebabCase = (string) => string.replace(/([a-z0-9])([A-Z])/g, \"$1-$2\").toLowerCase();\nconst toCamelCase = (string) => string.replace(\n /^([A-Z])|[\\s-_]+(\\w)/g,\n (match, p1, p2) => p2 ? p2.toUpperCase() : p1.toLowerCase()\n);\nconst toPascalCase = (string) => {\n const camelCase = toCamelCase(string);\n return camelCase.charAt(0).toUpperCase() + camelCase.slice(1);\n};\nconst mergeClasses = (...classes) => classes.filter((className, index, array) => {\n return Boolean(className) && className.trim() !== \"\" && array.indexOf(className) === index;\n}).join(\" \").trim();\nconst hasA11yProp = (props) => {\n for (const prop in props) {\n if (prop.startsWith(\"aria-\") || prop === \"role\" || prop === \"title\") {\n return true;\n }\n }\n};\n\nexport { hasA11yProp, mergeClasses, toCamelCase, toKebabCase, toPascalCase };\n//# sourceMappingURL=utils.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nvar defaultAttributes = {\n xmlns: \"http://www.w3.org/2000/svg\",\n width: 24,\n height: 24,\n viewBox: \"0 0 24 24\",\n fill: \"none\",\n stroke: \"currentColor\",\n strokeWidth: 2,\n strokeLinecap: \"round\",\n strokeLinejoin: \"round\"\n};\n\nexport { defaultAttributes as default };\n//# sourceMappingURL=defaultAttributes.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport defaultAttributes from './defaultAttributes.js';\nimport { mergeClasses, hasA11yProp } from './shared/src/utils.js';\n\nconst Icon = forwardRef(\n ({\n color = \"currentColor\",\n size = 24,\n strokeWidth = 2,\n absoluteStrokeWidth,\n className = \"\",\n children,\n iconNode,\n ...rest\n }, ref) => createElement(\n \"svg\",\n {\n ref,\n ...defaultAttributes,\n width: size,\n height: size,\n stroke: color,\n strokeWidth: absoluteStrokeWidth ? Number(strokeWidth) * 24 / Number(size) : strokeWidth,\n className: mergeClasses(\"lucide\", className),\n ...!children && !hasA11yProp(rest) && { \"aria-hidden\": \"true\" },\n ...rest\n },\n [\n ...iconNode.map(([tag, attrs]) => createElement(tag, attrs)),\n ...Array.isArray(children) ? children : [children]\n ]\n )\n);\n\nexport { Icon as default };\n//# sourceMappingURL=Icon.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport { forwardRef, createElement } from 'react';\nimport { mergeClasses, toKebabCase, toPascalCase } from './shared/src/utils.js';\nimport Icon from './Icon.js';\n\nconst createLucideIcon = (iconName, iconNode) => {\n const Component = forwardRef(\n ({ className, ...props }, ref) => createElement(Icon, {\n ref,\n iconNode,\n className: mergeClasses(\n `lucide-${toKebabCase(toPascalCase(iconName))}`,\n `lucide-${iconName}`,\n className\n ),\n ...props\n })\n );\n Component.displayName = toPascalCase(iconName);\n return Component;\n};\n\nexport { createLucideIcon as default };\n//# sourceMappingURL=createLucideIcon.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [[\"path\", { d: \"M20 6 9 17l-5-5\", key: \"1gmf2c\" }]];\nconst Check = createLucideIcon(\"check\", __iconNode);\n\nexport { __iconNode, Check as default };\n//# sourceMappingURL=check.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M4 5h16\", key: \"1tepv9\" }],\n [\"path\", { d: \"M4 12h16\", key: \"1lakjw\" }],\n [\"path\", { d: \"M4 19h16\", key: \"1djgab\" }]\n];\nconst Menu = createLucideIcon(\"menu\", __iconNode);\n\nexport { __iconNode, Menu as default };\n//# sourceMappingURL=menu.js.map\n","/**\n * @license lucide-react v0.562.0 - ISC\n *\n * This source code is licensed under the ISC license.\n * See the LICENSE file in the root directory of this source tree.\n */\n\nimport createLucideIcon from '../createLucideIcon.js';\n\nconst __iconNode = [\n [\"path\", { d: \"M18 6 6 18\", key: \"1bl5f8\" }],\n [\"path\", { d: \"m6 6 12 12\", key: \"d8bk6v\" }]\n];\nconst X = createLucideIcon(\"x\", __iconNode);\n\nexport { __iconNode, X as default };\n//# sourceMappingURL=x.js.map\n","import { useState } from 'react';\nimport { Menu } from 'lucide-react';\nimport type { HealthStatus, RadioConfig } from '../types';\nimport { api } from '../api';\nimport { toast } from './ui/sonner';\n\ninterface StatusBarProps {\n health: HealthStatus | null;\n config: RadioConfig | null;\n onSettingsClick: () => void;\n onMenuClick?: () => void;\n}\n\nexport function StatusBar({ health, config, onSettingsClick, onMenuClick }: StatusBarProps) {\n const connected = health?.radio_connected ?? false;\n const [reconnecting, setReconnecting] = useState(false);\n\n const handleReconnect = async () => {\n setReconnecting(true);\n try {\n const result = await api.reconnectRadio();\n if (result.connected) {\n toast.success('Reconnected', { description: result.message });\n }\n } catch (err) {\n toast.error('Reconnection failed', {\n description: err instanceof Error ? err.message : 'Check radio connection and power',\n });\n } finally {\n setReconnecting(false);\n }\n };\n\n return (\n
\n {/* Mobile menu button - only visible on small screens */}\n {onMenuClick && (\n \n \n \n )}\n\n

RemoteTerm

\n\n
\n
\n \n {connected ? 'Connected' : 'Disconnected'}\n \n
\n\n {config && (\n
\n {config.name || 'Unnamed'}\n {\n navigator.clipboard.writeText(config.public_key);\n toast.success('Public key copied!');\n }}\n title=\"Click to copy public key\"\n >\n {config.public_key.toLowerCase()}\n \n
\n )}\n\n {!connected && (\n \n {reconnecting ? 'Reconnecting...' : 'Reconnect'}\n \n )}\n \n \n 🔧\n {' '}\n Radio & Config\n \n
\n );\n}\n","/**\n * Public key utilities for consistent handling of 64-char full keys\n * and 12-char prefixes throughout the application.\n *\n * MeshCore uses 64-character hex strings for public keys, but messages\n * and some radio operations only provide 12-character prefixes. This\n * module provides utilities for working with both formats consistently.\n */\n\n/** Length of a full public key in hex characters */\nexport const PUBKEY_FULL_LENGTH = 64;\n\n/** Length of a public key prefix in hex characters */\nexport const PUBKEY_PREFIX_LENGTH = 12;\n\n/**\n * Extract the 12-character prefix from a public key.\n * Works with both full keys and existing prefixes.\n */\nexport function getPubkeyPrefix(key: string): string {\n return key.slice(0, PUBKEY_PREFIX_LENGTH);\n}\n\n/**\n * Check if two public keys match by comparing their prefixes.\n * This handles the case where one key is full (64 chars) and\n * the other is a prefix (12 chars).\n */\nexport function pubkeysMatch(a: string, b: string): boolean {\n if (!a || !b) return false;\n return getPubkeyPrefix(a) === getPubkeyPrefix(b);\n}\n\n/**\n * Check if a public key starts with the given prefix.\n * More explicit than using .startsWith() directly.\n */\nexport function pubkeyMatchesPrefix(fullKey: string, prefix: string): boolean {\n if (!fullKey || !prefix) return false;\n return fullKey.startsWith(prefix);\n}\n\n/**\n * Get a display name for a contact, falling back to pubkey prefix.\n */\nexport function getContactDisplayName(name: string | null | undefined, pubkey: string): string {\n return name || getPubkeyPrefix(pubkey);\n}\n\n/**\n * Check if a key is a full 64-character public key.\n */\nexport function isFullPubkey(key: string): boolean {\n return key.length === PUBKEY_FULL_LENGTH;\n}\n\n/**\n * Check if a key is a 12-character prefix.\n */\nexport function isPubkeyPrefix(key: string): boolean {\n return key.length === PUBKEY_PREFIX_LENGTH;\n}\n","/**\n * Generate consistent profile \"images\" for contacts.\n *\n * Uses the contact's public key to generate a consistent background color,\n * and extracts initials or emoji from the name for display.\n * Repeaters (type=2) always show 🛜 with a gray background.\n */\n\n// Contact type constants (matches backend)\nexport const CONTACT_TYPE_REPEATER = 2;\n\n// Repeater avatar styling\nconst REPEATER_AVATAR = {\n text: '🛜',\n background: '#444444',\n textColor: '#ffffff',\n};\n\n// Simple hash function for strings\nfunction hashString(str: string): number {\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = (hash << 5) - hash + char;\n hash = hash & hash; // Convert to 32-bit integer\n }\n return Math.abs(hash);\n}\n\n// Regex to match emoji (covers most common emoji ranges)\nconst emojiRegex =\n /[\\u{1F300}-\\u{1F9FF}]|[\\u{2600}-\\u{26FF}]|[\\u{2700}-\\u{27BF}]|[\\u{1F600}-\\u{1F64F}]|[\\u{1F680}-\\u{1F6FF}]|[\\u{1F1E0}-\\u{1F1FF}]/u;\n\n/**\n * Extract display characters from a contact name.\n * Priority:\n * 1. First emoji in the name\n * 2. First letter + first letter after first space (initials)\n * 3. First letter only\n */\nexport function getAvatarText(name: string | null, publicKey: string): string {\n if (!name) {\n // Use first 2 chars of public key as fallback\n return publicKey.slice(0, 2).toUpperCase();\n }\n\n // Check for emoji first\n const emojiMatch = name.match(emojiRegex);\n if (emojiMatch) {\n return emojiMatch[0];\n }\n\n // Find first letter\n const letters = name.match(/[a-zA-Z]/g);\n if (!letters || letters.length === 0) {\n // No letters, use first 2 chars of public key\n return publicKey.slice(0, 2).toUpperCase();\n }\n\n // Check for space - get initials\n const spaceIndex = name.indexOf(' ');\n if (spaceIndex !== -1) {\n const firstLetter = letters[0];\n // Find first letter after the space\n const afterSpace = name.slice(spaceIndex + 1).match(/[a-zA-Z]/);\n if (afterSpace) {\n return (firstLetter + afterSpace[0]).toUpperCase();\n }\n }\n\n // Single letter\n return letters[0].toUpperCase();\n}\n\n/**\n * Generate a consistent HSL color from a public key.\n * Uses saturation and lightness ranges that work well for backgrounds.\n */\nexport function getAvatarColor(publicKey: string): {\n background: string;\n text: string;\n} {\n const hash = hashString(publicKey);\n\n // Use hash to generate hue (0-360)\n const hue = hash % 360;\n\n // Use different bits of hash for saturation variation (50-80%)\n const saturation = 50 + ((hash >> 8) % 30);\n\n // Lightness in a range that allows readable text (35-55%)\n const lightness = 35 + ((hash >> 16) % 20);\n\n const background = `hsl(${hue}, ${saturation}%, ${lightness}%)`;\n\n // Calculate perceived luminance to determine text color\n // For HSL, we can approximate: if lightness < 50%, use white text\n // We'll use a slightly lower threshold since saturated colors appear darker\n const textColor = lightness < 45 ? '#ffffff' : '#000000';\n\n return { background, text: textColor };\n}\n\n/**\n * Get all avatar properties for a contact.\n * Repeaters (type=2) always get a special gray avatar with 🛜.\n */\nexport function getContactAvatar(\n name: string | null,\n publicKey: string,\n contactType?: number\n): {\n text: string;\n background: string;\n textColor: string;\n} {\n // Repeaters always get the repeater avatar\n if (contactType === CONTACT_TYPE_REPEATER) {\n return REPEATER_AVATAR;\n }\n\n const text = getAvatarText(name, publicKey);\n const colors = getAvatarColor(publicKey);\n\n return {\n text,\n background: colors.background,\n textColor: colors.text,\n };\n}\n","import { getContactAvatar } from '../utils/contactAvatar';\n\ninterface ContactAvatarProps {\n name: string | null;\n publicKey: string;\n size?: number;\n contactType?: number;\n}\n\nexport function ContactAvatar({ name, publicKey, size = 28, contactType }: ContactAvatarProps) {\n const avatar = getContactAvatar(name, publicKey, contactType);\n\n return (\n \n {avatar.text}\n
\n );\n}\n","/**\n * Favorites utilities.\n *\n * Favorites are now stored server-side in the database.\n * This file provides helper functions for checking favorites\n * and loading legacy localStorage data for migration.\n */\n\nimport type { Favorite } from '../types';\n\nconst FAVORITES_KEY = 'remoteterm-favorites';\n\n/**\n * Check if a conversation is favorited (from provided favorites array)\n */\nexport function isFavorite(\n favorites: Favorite[],\n type: 'channel' | 'contact',\n id: string\n): boolean {\n return favorites.some((f) => f.type === type && f.id === id);\n}\n\n/**\n * Load favorites from localStorage (for migration only)\n */\nexport function loadLocalStorageFavorites(): Favorite[] {\n try {\n const stored = localStorage.getItem(FAVORITES_KEY);\n return stored ? JSON.parse(stored) : [];\n } catch {\n return [];\n }\n}\n\n/**\n * Clear favorites from localStorage (after migration)\n */\nexport function clearLocalStorageFavorites(): void {\n try {\n localStorage.removeItem(FAVORITES_KEY);\n } catch {\n // localStorage might be disabled\n }\n}\n\n// Re-export the Favorite type for convenience\nexport type { Favorite };\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t {\n // Pre-allocate for better V8 optimization\n const combinedArray = new Array(array1.length + array2.length);\n for (let i = 0; i < array1.length; i++) {\n combinedArray[i] = array1[i];\n }\n for (let i = 0; i < array2.length; i++) {\n combinedArray[array1.length + i] = array2[i];\n }\n return combinedArray;\n};\n\n// Factory function ensures consistent object shapes\nconst createClassValidatorObject = (classGroupId, validator) => ({\n classGroupId,\n validator\n});\n// Factory ensures consistent ClassPartObject shape\nconst createClassPartObject = (nextPart = new Map(), validators = null, classGroupId) => ({\n nextPart,\n validators,\n classGroupId\n});\nconst CLASS_PART_SEPARATOR = '-';\nconst EMPTY_CONFLICTS = [];\n// I use two dots here because one dot is used as prefix for class groups in plugins\nconst ARBITRARY_PROPERTY_PREFIX = 'arbitrary..';\nconst createClassGroupUtils = config => {\n const classMap = createClassMap(config);\n const {\n conflictingClassGroups,\n conflictingClassGroupModifiers\n } = config;\n const getClassGroupId = className => {\n if (className.startsWith('[') && className.endsWith(']')) {\n return getGroupIdForArbitraryProperty(className);\n }\n const classParts = className.split(CLASS_PART_SEPARATOR);\n // Classes like `-inset-1` produce an empty string as first classPart. We assume that classes for negative values are used correctly and skip it.\n const startIndex = classParts[0] === '' && classParts.length > 1 ? 1 : 0;\n return getGroupRecursive(classParts, startIndex, classMap);\n };\n const getConflictingClassGroupIds = (classGroupId, hasPostfixModifier) => {\n if (hasPostfixModifier) {\n const modifierConflicts = conflictingClassGroupModifiers[classGroupId];\n const baseConflicts = conflictingClassGroups[classGroupId];\n if (modifierConflicts) {\n if (baseConflicts) {\n // Merge base conflicts with modifier conflicts\n return concatArrays(baseConflicts, modifierConflicts);\n }\n // Only modifier conflicts\n return modifierConflicts;\n }\n // Fall back to without postfix if no modifier conflicts\n return baseConflicts || EMPTY_CONFLICTS;\n }\n return conflictingClassGroups[classGroupId] || EMPTY_CONFLICTS;\n };\n return {\n getClassGroupId,\n getConflictingClassGroupIds\n };\n};\nconst getGroupRecursive = (classParts, startIndex, classPartObject) => {\n const classPathsLength = classParts.length - startIndex;\n if (classPathsLength === 0) {\n return classPartObject.classGroupId;\n }\n const currentClassPart = classParts[startIndex];\n const nextClassPartObject = classPartObject.nextPart.get(currentClassPart);\n if (nextClassPartObject) {\n const result = getGroupRecursive(classParts, startIndex + 1, nextClassPartObject);\n if (result) return result;\n }\n const validators = classPartObject.validators;\n if (validators === null) {\n return undefined;\n }\n // Build classRest string efficiently by joining from startIndex onwards\n const classRest = startIndex === 0 ? classParts.join(CLASS_PART_SEPARATOR) : classParts.slice(startIndex).join(CLASS_PART_SEPARATOR);\n const validatorsLength = validators.length;\n for (let i = 0; i < validatorsLength; i++) {\n const validatorObj = validators[i];\n if (validatorObj.validator(classRest)) {\n return validatorObj.classGroupId;\n }\n }\n return undefined;\n};\n/**\n * Get the class group ID for an arbitrary property.\n *\n * @param className - The class name to get the group ID for. Is expected to be string starting with `[` and ending with `]`.\n */\nconst getGroupIdForArbitraryProperty = className => className.slice(1, -1).indexOf(':') === -1 ? undefined : (() => {\n const content = className.slice(1, -1);\n const colonIndex = content.indexOf(':');\n const property = content.slice(0, colonIndex);\n return property ? ARBITRARY_PROPERTY_PREFIX + property : undefined;\n})();\n/**\n * Exported for testing only\n */\nconst createClassMap = config => {\n const {\n theme,\n classGroups\n } = config;\n return processClassGroups(classGroups, theme);\n};\n// Split into separate functions to maintain monomorphic call sites\nconst processClassGroups = (classGroups, theme) => {\n const classMap = createClassPartObject();\n for (const classGroupId in classGroups) {\n const group = classGroups[classGroupId];\n processClassesRecursively(group, classMap, classGroupId, theme);\n }\n return classMap;\n};\nconst processClassesRecursively = (classGroup, classPartObject, classGroupId, theme) => {\n const len = classGroup.length;\n for (let i = 0; i < len; i++) {\n const classDefinition = classGroup[i];\n processClassDefinition(classDefinition, classPartObject, classGroupId, theme);\n }\n};\n// Split into separate functions for each type to maintain monomorphic call sites\nconst processClassDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (typeof classDefinition === 'string') {\n processStringDefinition(classDefinition, classPartObject, classGroupId);\n return;\n }\n if (typeof classDefinition === 'function') {\n processFunctionDefinition(classDefinition, classPartObject, classGroupId, theme);\n return;\n }\n processObjectDefinition(classDefinition, classPartObject, classGroupId, theme);\n};\nconst processStringDefinition = (classDefinition, classPartObject, classGroupId) => {\n const classPartObjectToEdit = classDefinition === '' ? classPartObject : getPart(classPartObject, classDefinition);\n classPartObjectToEdit.classGroupId = classGroupId;\n};\nconst processFunctionDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n if (isThemeGetter(classDefinition)) {\n processClassesRecursively(classDefinition(theme), classPartObject, classGroupId, theme);\n return;\n }\n if (classPartObject.validators === null) {\n classPartObject.validators = [];\n }\n classPartObject.validators.push(createClassValidatorObject(classGroupId, classDefinition));\n};\nconst processObjectDefinition = (classDefinition, classPartObject, classGroupId, theme) => {\n const entries = Object.entries(classDefinition);\n const len = entries.length;\n for (let i = 0; i < len; i++) {\n const [key, value] = entries[i];\n processClassesRecursively(value, getPart(classPartObject, key), classGroupId, theme);\n }\n};\nconst getPart = (classPartObject, path) => {\n let current = classPartObject;\n const parts = path.split(CLASS_PART_SEPARATOR);\n const len = parts.length;\n for (let i = 0; i < len; i++) {\n const part = parts[i];\n let next = current.nextPart.get(part);\n if (!next) {\n next = createClassPartObject();\n current.nextPart.set(part, next);\n }\n current = next;\n }\n return current;\n};\n// Type guard maintains monomorphic check\nconst isThemeGetter = func => 'isThemeGetter' in func && func.isThemeGetter === true;\n\n// LRU cache implementation using plain objects for simplicity\nconst createLruCache = maxCacheSize => {\n if (maxCacheSize < 1) {\n return {\n get: () => undefined,\n set: () => {}\n };\n }\n let cacheSize = 0;\n let cache = Object.create(null);\n let previousCache = Object.create(null);\n const update = (key, value) => {\n cache[key] = value;\n cacheSize++;\n if (cacheSize > maxCacheSize) {\n cacheSize = 0;\n previousCache = cache;\n cache = Object.create(null);\n }\n };\n return {\n get(key) {\n let value = cache[key];\n if (value !== undefined) {\n return value;\n }\n if ((value = previousCache[key]) !== undefined) {\n update(key, value);\n return value;\n }\n },\n set(key, value) {\n if (key in cache) {\n cache[key] = value;\n } else {\n update(key, value);\n }\n }\n };\n};\nconst IMPORTANT_MODIFIER = '!';\nconst MODIFIER_SEPARATOR = ':';\nconst EMPTY_MODIFIERS = [];\n// Pre-allocated result object shape for consistency\nconst createResultObject = (modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition, isExternal) => ({\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition,\n isExternal\n});\nconst createParseClassName = config => {\n const {\n prefix,\n experimentalParseClassName\n } = config;\n /**\n * Parse class name into parts.\n *\n * Inspired by `splitAtTopLevelOnly` used in Tailwind CSS\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v3.2.2/src/util/splitAtTopLevelOnly.js\n */\n let parseClassName = className => {\n // Use simple array with push for better performance\n const modifiers = [];\n let bracketDepth = 0;\n let parenDepth = 0;\n let modifierStart = 0;\n let postfixModifierPosition;\n const len = className.length;\n for (let index = 0; index < len; index++) {\n const currentCharacter = className[index];\n if (bracketDepth === 0 && parenDepth === 0) {\n if (currentCharacter === MODIFIER_SEPARATOR) {\n modifiers.push(className.slice(modifierStart, index));\n modifierStart = index + 1;\n continue;\n }\n if (currentCharacter === '/') {\n postfixModifierPosition = index;\n continue;\n }\n }\n if (currentCharacter === '[') bracketDepth++;else if (currentCharacter === ']') bracketDepth--;else if (currentCharacter === '(') parenDepth++;else if (currentCharacter === ')') parenDepth--;\n }\n const baseClassNameWithImportantModifier = modifiers.length === 0 ? className : className.slice(modifierStart);\n // Inline important modifier check\n let baseClassName = baseClassNameWithImportantModifier;\n let hasImportantModifier = false;\n if (baseClassNameWithImportantModifier.endsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(0, -1);\n hasImportantModifier = true;\n } else if (\n /**\n * In Tailwind CSS v3 the important modifier was at the start of the base class name. This is still supported for legacy reasons.\n * @see https://github.com/dcastil/tailwind-merge/issues/513#issuecomment-2614029864\n */\n baseClassNameWithImportantModifier.startsWith(IMPORTANT_MODIFIER)) {\n baseClassName = baseClassNameWithImportantModifier.slice(1);\n hasImportantModifier = true;\n }\n const maybePostfixModifierPosition = postfixModifierPosition && postfixModifierPosition > modifierStart ? postfixModifierPosition - modifierStart : undefined;\n return createResultObject(modifiers, hasImportantModifier, baseClassName, maybePostfixModifierPosition);\n };\n if (prefix) {\n const fullPrefix = prefix + MODIFIER_SEPARATOR;\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => className.startsWith(fullPrefix) ? parseClassNameOriginal(className.slice(fullPrefix.length)) : createResultObject(EMPTY_MODIFIERS, false, className, undefined, true);\n }\n if (experimentalParseClassName) {\n const parseClassNameOriginal = parseClassName;\n parseClassName = className => experimentalParseClassName({\n className,\n parseClassName: parseClassNameOriginal\n });\n }\n return parseClassName;\n};\n\n/**\n * Sorts modifiers according to following schema:\n * - Predefined modifiers are sorted alphabetically\n * - When an arbitrary variant appears, it must be preserved which modifiers are before and after it\n */\nconst createSortModifiers = config => {\n // Pre-compute weights for all known modifiers for O(1) comparison\n const modifierWeights = new Map();\n // Assign weights to sensitive modifiers (highest priority, but preserve order)\n config.orderSensitiveModifiers.forEach((mod, index) => {\n modifierWeights.set(mod, 1000000 + index); // High weights for sensitive mods\n });\n return modifiers => {\n const result = [];\n let currentSegment = [];\n // Process modifiers in one pass\n for (let i = 0; i < modifiers.length; i++) {\n const modifier = modifiers[i];\n // Check if modifier is sensitive (starts with '[' or in orderSensitiveModifiers)\n const isArbitrary = modifier[0] === '[';\n const isOrderSensitive = modifierWeights.has(modifier);\n if (isArbitrary || isOrderSensitive) {\n // Sort and flush current segment alphabetically\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n currentSegment = [];\n }\n result.push(modifier);\n } else {\n // Regular modifier - add to current segment for batch sorting\n currentSegment.push(modifier);\n }\n }\n // Sort and add any remaining segment items\n if (currentSegment.length > 0) {\n currentSegment.sort();\n result.push(...currentSegment);\n }\n return result;\n };\n};\nconst createConfigUtils = config => ({\n cache: createLruCache(config.cacheSize),\n parseClassName: createParseClassName(config),\n sortModifiers: createSortModifiers(config),\n ...createClassGroupUtils(config)\n});\nconst SPLIT_CLASSES_REGEX = /\\s+/;\nconst mergeClassList = (classList, configUtils) => {\n const {\n parseClassName,\n getClassGroupId,\n getConflictingClassGroupIds,\n sortModifiers\n } = configUtils;\n /**\n * Set of classGroupIds in following format:\n * `{importantModifier}{variantModifiers}{classGroupId}`\n * @example 'float'\n * @example 'hover:focus:bg-color'\n * @example 'md:!pr'\n */\n const classGroupsInConflict = [];\n const classNames = classList.trim().split(SPLIT_CLASSES_REGEX);\n let result = '';\n for (let index = classNames.length - 1; index >= 0; index -= 1) {\n const originalClassName = classNames[index];\n const {\n isExternal,\n modifiers,\n hasImportantModifier,\n baseClassName,\n maybePostfixModifierPosition\n } = parseClassName(originalClassName);\n if (isExternal) {\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n let hasPostfixModifier = !!maybePostfixModifierPosition;\n let classGroupId = getClassGroupId(hasPostfixModifier ? baseClassName.substring(0, maybePostfixModifierPosition) : baseClassName);\n if (!classGroupId) {\n if (!hasPostfixModifier) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n classGroupId = getClassGroupId(baseClassName);\n if (!classGroupId) {\n // Not a Tailwind class\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n continue;\n }\n hasPostfixModifier = false;\n }\n // Fast path: skip sorting for empty or single modifier\n const variantModifier = modifiers.length === 0 ? '' : modifiers.length === 1 ? modifiers[0] : sortModifiers(modifiers).join(':');\n const modifierId = hasImportantModifier ? variantModifier + IMPORTANT_MODIFIER : variantModifier;\n const classId = modifierId + classGroupId;\n if (classGroupsInConflict.indexOf(classId) > -1) {\n // Tailwind class omitted due to conflict\n continue;\n }\n classGroupsInConflict.push(classId);\n const conflictGroups = getConflictingClassGroupIds(classGroupId, hasPostfixModifier);\n for (let i = 0; i < conflictGroups.length; ++i) {\n const group = conflictGroups[i];\n classGroupsInConflict.push(modifierId + group);\n }\n // Tailwind class not in conflict\n result = originalClassName + (result.length > 0 ? ' ' + result : result);\n }\n return result;\n};\n\n/**\n * The code in this file is copied from https://github.com/lukeed/clsx and modified to suit the needs of tailwind-merge better.\n *\n * Specifically:\n * - Runtime code from https://github.com/lukeed/clsx/blob/v1.2.1/src/index.js\n * - TypeScript types from https://github.com/lukeed/clsx/blob/v1.2.1/clsx.d.ts\n *\n * Original code has MIT license: Copyright (c) Luke Edwards (lukeed.com)\n */\nconst twJoin = (...classLists) => {\n let index = 0;\n let argument;\n let resolvedValue;\n let string = '';\n while (index < classLists.length) {\n if (argument = classLists[index++]) {\n if (resolvedValue = toValue(argument)) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst toValue = mix => {\n // Fast path for strings\n if (typeof mix === 'string') {\n return mix;\n }\n let resolvedValue;\n let string = '';\n for (let k = 0; k < mix.length; k++) {\n if (mix[k]) {\n if (resolvedValue = toValue(mix[k])) {\n string && (string += ' ');\n string += resolvedValue;\n }\n }\n }\n return string;\n};\nconst createTailwindMerge = (createConfigFirst, ...createConfigRest) => {\n let configUtils;\n let cacheGet;\n let cacheSet;\n let functionToCall;\n const initTailwindMerge = classList => {\n const config = createConfigRest.reduce((previousConfig, createConfigCurrent) => createConfigCurrent(previousConfig), createConfigFirst());\n configUtils = createConfigUtils(config);\n cacheGet = configUtils.cache.get;\n cacheSet = configUtils.cache.set;\n functionToCall = tailwindMerge;\n return tailwindMerge(classList);\n };\n const tailwindMerge = classList => {\n const cachedResult = cacheGet(classList);\n if (cachedResult) {\n return cachedResult;\n }\n const result = mergeClassList(classList, configUtils);\n cacheSet(classList, result);\n return result;\n };\n functionToCall = initTailwindMerge;\n return (...args) => functionToCall(twJoin(...args));\n};\nconst fallbackThemeArr = [];\nconst fromTheme = key => {\n const themeGetter = theme => theme[key] || fallbackThemeArr;\n themeGetter.isThemeGetter = true;\n return themeGetter;\n};\nconst arbitraryValueRegex = /^\\[(?:(\\w[\\w-]*):)?(.+)\\]$/i;\nconst arbitraryVariableRegex = /^\\((?:(\\w[\\w-]*):)?(.+)\\)$/i;\nconst fractionRegex = /^\\d+\\/\\d+$/;\nconst tshirtUnitRegex = /^(\\d+(\\.\\d+)?)?(xs|sm|md|lg|xl)$/;\nconst lengthUnitRegex = /\\d+(%|px|r?em|[sdl]?v([hwib]|min|max)|pt|pc|in|cm|mm|cap|ch|ex|r?lh|cq(w|h|i|b|min|max))|\\b(calc|min|max|clamp)\\(.+\\)|^0$/;\nconst colorFunctionRegex = /^(rgba?|hsla?|hwb|(ok)?(lab|lch)|color-mix)\\(.+\\)$/;\n// Shadow always begins with x and y offset separated by underscore optionally prepended by inset\nconst shadowRegex = /^(inset_)?-?((\\d+)?\\.?(\\d+)[a-z]+|0)_-?((\\d+)?\\.?(\\d+)[a-z]+|0)/;\nconst imageRegex = /^(url|image|image-set|cross-fade|element|(repeating-)?(linear|radial|conic)-gradient)\\(.+\\)$/;\nconst isFraction = value => fractionRegex.test(value);\nconst isNumber = value => !!value && !Number.isNaN(Number(value));\nconst isInteger = value => !!value && Number.isInteger(Number(value));\nconst isPercent = value => value.endsWith('%') && isNumber(value.slice(0, -1));\nconst isTshirtSize = value => tshirtUnitRegex.test(value);\nconst isAny = () => true;\nconst isLengthOnly = value =>\n// `colorFunctionRegex` check is necessary because color functions can have percentages in them which which would be incorrectly classified as lengths.\n// For example, `hsl(0 0% 0%)` would be classified as a length without this check.\n// I could also use lookbehind assertion in `lengthUnitRegex` but that isn't supported widely enough.\nlengthUnitRegex.test(value) && !colorFunctionRegex.test(value);\nconst isNever = () => false;\nconst isShadow = value => shadowRegex.test(value);\nconst isImage = value => imageRegex.test(value);\nconst isAnyNonArbitrary = value => !isArbitraryValue(value) && !isArbitraryVariable(value);\nconst isArbitrarySize = value => getIsArbitraryValue(value, isLabelSize, isNever);\nconst isArbitraryValue = value => arbitraryValueRegex.test(value);\nconst isArbitraryLength = value => getIsArbitraryValue(value, isLabelLength, isLengthOnly);\nconst isArbitraryNumber = value => getIsArbitraryValue(value, isLabelNumber, isNumber);\nconst isArbitraryPosition = value => getIsArbitraryValue(value, isLabelPosition, isNever);\nconst isArbitraryImage = value => getIsArbitraryValue(value, isLabelImage, isImage);\nconst isArbitraryShadow = value => getIsArbitraryValue(value, isLabelShadow, isShadow);\nconst isArbitraryVariable = value => arbitraryVariableRegex.test(value);\nconst isArbitraryVariableLength = value => getIsArbitraryVariable(value, isLabelLength);\nconst isArbitraryVariableFamilyName = value => getIsArbitraryVariable(value, isLabelFamilyName);\nconst isArbitraryVariablePosition = value => getIsArbitraryVariable(value, isLabelPosition);\nconst isArbitraryVariableSize = value => getIsArbitraryVariable(value, isLabelSize);\nconst isArbitraryVariableImage = value => getIsArbitraryVariable(value, isLabelImage);\nconst isArbitraryVariableShadow = value => getIsArbitraryVariable(value, isLabelShadow, true);\n// Helpers\nconst getIsArbitraryValue = (value, testLabel, testValue) => {\n const result = arbitraryValueRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return testValue(result[2]);\n }\n return false;\n};\nconst getIsArbitraryVariable = (value, testLabel, shouldMatchNoLabel = false) => {\n const result = arbitraryVariableRegex.exec(value);\n if (result) {\n if (result[1]) {\n return testLabel(result[1]);\n }\n return shouldMatchNoLabel;\n }\n return false;\n};\n// Labels\nconst isLabelPosition = label => label === 'position' || label === 'percentage';\nconst isLabelImage = label => label === 'image' || label === 'url';\nconst isLabelSize = label => label === 'length' || label === 'size' || label === 'bg-size';\nconst isLabelLength = label => label === 'length';\nconst isLabelNumber = label => label === 'number';\nconst isLabelFamilyName = label => label === 'family-name';\nconst isLabelShadow = label => label === 'shadow';\nconst validators = /*#__PURE__*/Object.defineProperty({\n __proto__: null,\n isAny,\n isAnyNonArbitrary,\n isArbitraryImage,\n isArbitraryLength,\n isArbitraryNumber,\n isArbitraryPosition,\n isArbitraryShadow,\n isArbitrarySize,\n isArbitraryValue,\n isArbitraryVariable,\n isArbitraryVariableFamilyName,\n isArbitraryVariableImage,\n isArbitraryVariableLength,\n isArbitraryVariablePosition,\n isArbitraryVariableShadow,\n isArbitraryVariableSize,\n isFraction,\n isInteger,\n isNumber,\n isPercent,\n isTshirtSize\n}, Symbol.toStringTag, {\n value: 'Module'\n});\nconst getDefaultConfig = () => {\n /**\n * Theme getters for theme variable namespaces\n * @see https://tailwindcss.com/docs/theme#theme-variable-namespaces\n */\n /***/\n const themeColor = fromTheme('color');\n const themeFont = fromTheme('font');\n const themeText = fromTheme('text');\n const themeFontWeight = fromTheme('font-weight');\n const themeTracking = fromTheme('tracking');\n const themeLeading = fromTheme('leading');\n const themeBreakpoint = fromTheme('breakpoint');\n const themeContainer = fromTheme('container');\n const themeSpacing = fromTheme('spacing');\n const themeRadius = fromTheme('radius');\n const themeShadow = fromTheme('shadow');\n const themeInsetShadow = fromTheme('inset-shadow');\n const themeTextShadow = fromTheme('text-shadow');\n const themeDropShadow = fromTheme('drop-shadow');\n const themeBlur = fromTheme('blur');\n const themePerspective = fromTheme('perspective');\n const themeAspect = fromTheme('aspect');\n const themeEase = fromTheme('ease');\n const themeAnimate = fromTheme('animate');\n /**\n * Helpers to avoid repeating the same scales\n *\n * We use functions that create a new array every time they're called instead of static arrays.\n * This ensures that users who modify any scale by mutating the array (e.g. with `array.push(element)`) don't accidentally mutate arrays in other parts of the config.\n */\n /***/\n const scaleBreak = () => ['auto', 'avoid', 'all', 'avoid-page', 'page', 'left', 'right', 'column'];\n const scalePosition = () => ['center', 'top', 'bottom', 'left', 'right', 'top-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-top', 'top-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-top', 'bottom-right',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'right-bottom', 'bottom-left',\n // Deprecated since Tailwind CSS v4.1.0, see https://github.com/tailwindlabs/tailwindcss/pull/17378\n 'left-bottom'];\n const scalePositionWithArbitrary = () => [...scalePosition(), isArbitraryVariable, isArbitraryValue];\n const scaleOverflow = () => ['auto', 'hidden', 'clip', 'visible', 'scroll'];\n const scaleOverscroll = () => ['auto', 'contain', 'none'];\n const scaleUnambiguousSpacing = () => [isArbitraryVariable, isArbitraryValue, themeSpacing];\n const scaleInset = () => [isFraction, 'full', 'auto', ...scaleUnambiguousSpacing()];\n const scaleGridTemplateColsRows = () => [isInteger, 'none', 'subgrid', isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartAndEnd = () => ['auto', {\n span: ['full', isInteger, isArbitraryVariable, isArbitraryValue]\n }, isInteger, isArbitraryVariable, isArbitraryValue];\n const scaleGridColRowStartOrEnd = () => [isInteger, 'auto', isArbitraryVariable, isArbitraryValue];\n const scaleGridAutoColsRows = () => ['auto', 'min', 'max', 'fr', isArbitraryVariable, isArbitraryValue];\n const scaleAlignPrimaryAxis = () => ['start', 'end', 'center', 'between', 'around', 'evenly', 'stretch', 'baseline', 'center-safe', 'end-safe'];\n const scaleAlignSecondaryAxis = () => ['start', 'end', 'center', 'stretch', 'center-safe', 'end-safe'];\n const scaleMargin = () => ['auto', ...scaleUnambiguousSpacing()];\n const scaleSizing = () => [isFraction, 'auto', 'full', 'dvw', 'dvh', 'lvw', 'lvh', 'svw', 'svh', 'min', 'max', 'fit', ...scaleUnambiguousSpacing()];\n const scaleColor = () => [themeColor, isArbitraryVariable, isArbitraryValue];\n const scaleBgPosition = () => [...scalePosition(), isArbitraryVariablePosition, isArbitraryPosition, {\n position: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleBgRepeat = () => ['no-repeat', {\n repeat: ['', 'x', 'y', 'space', 'round']\n }];\n const scaleBgSize = () => ['auto', 'cover', 'contain', isArbitraryVariableSize, isArbitrarySize, {\n size: [isArbitraryVariable, isArbitraryValue]\n }];\n const scaleGradientStopPosition = () => [isPercent, isArbitraryVariableLength, isArbitraryLength];\n const scaleRadius = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', 'full', themeRadius, isArbitraryVariable, isArbitraryValue];\n const scaleBorderWidth = () => ['', isNumber, isArbitraryVariableLength, isArbitraryLength];\n const scaleLineStyle = () => ['solid', 'dashed', 'dotted', 'double'];\n const scaleBlendMode = () => ['normal', 'multiply', 'screen', 'overlay', 'darken', 'lighten', 'color-dodge', 'color-burn', 'hard-light', 'soft-light', 'difference', 'exclusion', 'hue', 'saturation', 'color', 'luminosity'];\n const scaleMaskImagePosition = () => [isNumber, isPercent, isArbitraryVariablePosition, isArbitraryPosition];\n const scaleBlur = () => [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeBlur, isArbitraryVariable, isArbitraryValue];\n const scaleRotate = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleScale = () => ['none', isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleSkew = () => [isNumber, isArbitraryVariable, isArbitraryValue];\n const scaleTranslate = () => [isFraction, 'full', ...scaleUnambiguousSpacing()];\n return {\n cacheSize: 500,\n theme: {\n animate: ['spin', 'ping', 'pulse', 'bounce'],\n aspect: ['video'],\n blur: [isTshirtSize],\n breakpoint: [isTshirtSize],\n color: [isAny],\n container: [isTshirtSize],\n 'drop-shadow': [isTshirtSize],\n ease: ['in', 'out', 'in-out'],\n font: [isAnyNonArbitrary],\n 'font-weight': ['thin', 'extralight', 'light', 'normal', 'medium', 'semibold', 'bold', 'extrabold', 'black'],\n 'inset-shadow': [isTshirtSize],\n leading: ['none', 'tight', 'snug', 'normal', 'relaxed', 'loose'],\n perspective: ['dramatic', 'near', 'normal', 'midrange', 'distant', 'none'],\n radius: [isTshirtSize],\n shadow: [isTshirtSize],\n spacing: ['px', isNumber],\n text: [isTshirtSize],\n 'text-shadow': [isTshirtSize],\n tracking: ['tighter', 'tight', 'normal', 'wide', 'wider', 'widest']\n },\n classGroups: {\n // --------------\n // --- Layout ---\n // --------------\n /**\n * Aspect Ratio\n * @see https://tailwindcss.com/docs/aspect-ratio\n */\n aspect: [{\n aspect: ['auto', 'square', isFraction, isArbitraryValue, isArbitraryVariable, themeAspect]\n }],\n /**\n * Container\n * @see https://tailwindcss.com/docs/container\n * @deprecated since Tailwind CSS v4.0.0\n */\n container: ['container'],\n /**\n * Columns\n * @see https://tailwindcss.com/docs/columns\n */\n columns: [{\n columns: [isNumber, isArbitraryValue, isArbitraryVariable, themeContainer]\n }],\n /**\n * Break After\n * @see https://tailwindcss.com/docs/break-after\n */\n 'break-after': [{\n 'break-after': scaleBreak()\n }],\n /**\n * Break Before\n * @see https://tailwindcss.com/docs/break-before\n */\n 'break-before': [{\n 'break-before': scaleBreak()\n }],\n /**\n * Break Inside\n * @see https://tailwindcss.com/docs/break-inside\n */\n 'break-inside': [{\n 'break-inside': ['auto', 'avoid', 'avoid-page', 'avoid-column']\n }],\n /**\n * Box Decoration Break\n * @see https://tailwindcss.com/docs/box-decoration-break\n */\n 'box-decoration': [{\n 'box-decoration': ['slice', 'clone']\n }],\n /**\n * Box Sizing\n * @see https://tailwindcss.com/docs/box-sizing\n */\n box: [{\n box: ['border', 'content']\n }],\n /**\n * Display\n * @see https://tailwindcss.com/docs/display\n */\n display: ['block', 'inline-block', 'inline', 'flex', 'inline-flex', 'table', 'inline-table', 'table-caption', 'table-cell', 'table-column', 'table-column-group', 'table-footer-group', 'table-header-group', 'table-row-group', 'table-row', 'flow-root', 'grid', 'inline-grid', 'contents', 'list-item', 'hidden'],\n /**\n * Screen Reader Only\n * @see https://tailwindcss.com/docs/display#screen-reader-only\n */\n sr: ['sr-only', 'not-sr-only'],\n /**\n * Floats\n * @see https://tailwindcss.com/docs/float\n */\n float: [{\n float: ['right', 'left', 'none', 'start', 'end']\n }],\n /**\n * Clear\n * @see https://tailwindcss.com/docs/clear\n */\n clear: [{\n clear: ['left', 'right', 'both', 'none', 'start', 'end']\n }],\n /**\n * Isolation\n * @see https://tailwindcss.com/docs/isolation\n */\n isolation: ['isolate', 'isolation-auto'],\n /**\n * Object Fit\n * @see https://tailwindcss.com/docs/object-fit\n */\n 'object-fit': [{\n object: ['contain', 'cover', 'fill', 'none', 'scale-down']\n }],\n /**\n * Object Position\n * @see https://tailwindcss.com/docs/object-position\n */\n 'object-position': [{\n object: scalePositionWithArbitrary()\n }],\n /**\n * Overflow\n * @see https://tailwindcss.com/docs/overflow\n */\n overflow: [{\n overflow: scaleOverflow()\n }],\n /**\n * Overflow X\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-x': [{\n 'overflow-x': scaleOverflow()\n }],\n /**\n * Overflow Y\n * @see https://tailwindcss.com/docs/overflow\n */\n 'overflow-y': [{\n 'overflow-y': scaleOverflow()\n }],\n /**\n * Overscroll Behavior\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n overscroll: [{\n overscroll: scaleOverscroll()\n }],\n /**\n * Overscroll Behavior X\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-x': [{\n 'overscroll-x': scaleOverscroll()\n }],\n /**\n * Overscroll Behavior Y\n * @see https://tailwindcss.com/docs/overscroll-behavior\n */\n 'overscroll-y': [{\n 'overscroll-y': scaleOverscroll()\n }],\n /**\n * Position\n * @see https://tailwindcss.com/docs/position\n */\n position: ['static', 'fixed', 'absolute', 'relative', 'sticky'],\n /**\n * Top / Right / Bottom / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n inset: [{\n inset: scaleInset()\n }],\n /**\n * Right / Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-x': [{\n 'inset-x': scaleInset()\n }],\n /**\n * Top / Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n 'inset-y': [{\n 'inset-y': scaleInset()\n }],\n /**\n * Start\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n start: [{\n start: scaleInset()\n }],\n /**\n * End\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n end: [{\n end: scaleInset()\n }],\n /**\n * Top\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n top: [{\n top: scaleInset()\n }],\n /**\n * Right\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n right: [{\n right: scaleInset()\n }],\n /**\n * Bottom\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n bottom: [{\n bottom: scaleInset()\n }],\n /**\n * Left\n * @see https://tailwindcss.com/docs/top-right-bottom-left\n */\n left: [{\n left: scaleInset()\n }],\n /**\n * Visibility\n * @see https://tailwindcss.com/docs/visibility\n */\n visibility: ['visible', 'invisible', 'collapse'],\n /**\n * Z-Index\n * @see https://tailwindcss.com/docs/z-index\n */\n z: [{\n z: [isInteger, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------------\n // --- Flexbox and Grid ---\n // ------------------------\n /**\n * Flex Basis\n * @see https://tailwindcss.com/docs/flex-basis\n */\n basis: [{\n basis: [isFraction, 'full', 'auto', themeContainer, ...scaleUnambiguousSpacing()]\n }],\n /**\n * Flex Direction\n * @see https://tailwindcss.com/docs/flex-direction\n */\n 'flex-direction': [{\n flex: ['row', 'row-reverse', 'col', 'col-reverse']\n }],\n /**\n * Flex Wrap\n * @see https://tailwindcss.com/docs/flex-wrap\n */\n 'flex-wrap': [{\n flex: ['nowrap', 'wrap', 'wrap-reverse']\n }],\n /**\n * Flex\n * @see https://tailwindcss.com/docs/flex\n */\n flex: [{\n flex: [isNumber, isFraction, 'auto', 'initial', 'none', isArbitraryValue]\n }],\n /**\n * Flex Grow\n * @see https://tailwindcss.com/docs/flex-grow\n */\n grow: [{\n grow: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Flex Shrink\n * @see https://tailwindcss.com/docs/flex-shrink\n */\n shrink: [{\n shrink: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Order\n * @see https://tailwindcss.com/docs/order\n */\n order: [{\n order: [isInteger, 'first', 'last', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Grid Template Columns\n * @see https://tailwindcss.com/docs/grid-template-columns\n */\n 'grid-cols': [{\n 'grid-cols': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Column Start / End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start-end': [{\n col: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Column Start\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-start': [{\n 'col-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Column End\n * @see https://tailwindcss.com/docs/grid-column\n */\n 'col-end': [{\n 'col-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Template Rows\n * @see https://tailwindcss.com/docs/grid-template-rows\n */\n 'grid-rows': [{\n 'grid-rows': scaleGridTemplateColsRows()\n }],\n /**\n * Grid Row Start / End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start-end': [{\n row: scaleGridColRowStartAndEnd()\n }],\n /**\n * Grid Row Start\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-start': [{\n 'row-start': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Row End\n * @see https://tailwindcss.com/docs/grid-row\n */\n 'row-end': [{\n 'row-end': scaleGridColRowStartOrEnd()\n }],\n /**\n * Grid Auto Flow\n * @see https://tailwindcss.com/docs/grid-auto-flow\n */\n 'grid-flow': [{\n 'grid-flow': ['row', 'col', 'dense', 'row-dense', 'col-dense']\n }],\n /**\n * Grid Auto Columns\n * @see https://tailwindcss.com/docs/grid-auto-columns\n */\n 'auto-cols': [{\n 'auto-cols': scaleGridAutoColsRows()\n }],\n /**\n * Grid Auto Rows\n * @see https://tailwindcss.com/docs/grid-auto-rows\n */\n 'auto-rows': [{\n 'auto-rows': scaleGridAutoColsRows()\n }],\n /**\n * Gap\n * @see https://tailwindcss.com/docs/gap\n */\n gap: [{\n gap: scaleUnambiguousSpacing()\n }],\n /**\n * Gap X\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-x': [{\n 'gap-x': scaleUnambiguousSpacing()\n }],\n /**\n * Gap Y\n * @see https://tailwindcss.com/docs/gap\n */\n 'gap-y': [{\n 'gap-y': scaleUnambiguousSpacing()\n }],\n /**\n * Justify Content\n * @see https://tailwindcss.com/docs/justify-content\n */\n 'justify-content': [{\n justify: [...scaleAlignPrimaryAxis(), 'normal']\n }],\n /**\n * Justify Items\n * @see https://tailwindcss.com/docs/justify-items\n */\n 'justify-items': [{\n 'justify-items': [...scaleAlignSecondaryAxis(), 'normal']\n }],\n /**\n * Justify Self\n * @see https://tailwindcss.com/docs/justify-self\n */\n 'justify-self': [{\n 'justify-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n /**\n * Align Content\n * @see https://tailwindcss.com/docs/align-content\n */\n 'align-content': [{\n content: ['normal', ...scaleAlignPrimaryAxis()]\n }],\n /**\n * Align Items\n * @see https://tailwindcss.com/docs/align-items\n */\n 'align-items': [{\n items: [...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Align Self\n * @see https://tailwindcss.com/docs/align-self\n */\n 'align-self': [{\n self: ['auto', ...scaleAlignSecondaryAxis(), {\n baseline: ['', 'last']\n }]\n }],\n /**\n * Place Content\n * @see https://tailwindcss.com/docs/place-content\n */\n 'place-content': [{\n 'place-content': scaleAlignPrimaryAxis()\n }],\n /**\n * Place Items\n * @see https://tailwindcss.com/docs/place-items\n */\n 'place-items': [{\n 'place-items': [...scaleAlignSecondaryAxis(), 'baseline']\n }],\n /**\n * Place Self\n * @see https://tailwindcss.com/docs/place-self\n */\n 'place-self': [{\n 'place-self': ['auto', ...scaleAlignSecondaryAxis()]\n }],\n // Spacing\n /**\n * Padding\n * @see https://tailwindcss.com/docs/padding\n */\n p: [{\n p: scaleUnambiguousSpacing()\n }],\n /**\n * Padding X\n * @see https://tailwindcss.com/docs/padding\n */\n px: [{\n px: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Y\n * @see https://tailwindcss.com/docs/padding\n */\n py: [{\n py: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Start\n * @see https://tailwindcss.com/docs/padding\n */\n ps: [{\n ps: scaleUnambiguousSpacing()\n }],\n /**\n * Padding End\n * @see https://tailwindcss.com/docs/padding\n */\n pe: [{\n pe: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Top\n * @see https://tailwindcss.com/docs/padding\n */\n pt: [{\n pt: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Right\n * @see https://tailwindcss.com/docs/padding\n */\n pr: [{\n pr: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Bottom\n * @see https://tailwindcss.com/docs/padding\n */\n pb: [{\n pb: scaleUnambiguousSpacing()\n }],\n /**\n * Padding Left\n * @see https://tailwindcss.com/docs/padding\n */\n pl: [{\n pl: scaleUnambiguousSpacing()\n }],\n /**\n * Margin\n * @see https://tailwindcss.com/docs/margin\n */\n m: [{\n m: scaleMargin()\n }],\n /**\n * Margin X\n * @see https://tailwindcss.com/docs/margin\n */\n mx: [{\n mx: scaleMargin()\n }],\n /**\n * Margin Y\n * @see https://tailwindcss.com/docs/margin\n */\n my: [{\n my: scaleMargin()\n }],\n /**\n * Margin Start\n * @see https://tailwindcss.com/docs/margin\n */\n ms: [{\n ms: scaleMargin()\n }],\n /**\n * Margin End\n * @see https://tailwindcss.com/docs/margin\n */\n me: [{\n me: scaleMargin()\n }],\n /**\n * Margin Top\n * @see https://tailwindcss.com/docs/margin\n */\n mt: [{\n mt: scaleMargin()\n }],\n /**\n * Margin Right\n * @see https://tailwindcss.com/docs/margin\n */\n mr: [{\n mr: scaleMargin()\n }],\n /**\n * Margin Bottom\n * @see https://tailwindcss.com/docs/margin\n */\n mb: [{\n mb: scaleMargin()\n }],\n /**\n * Margin Left\n * @see https://tailwindcss.com/docs/margin\n */\n ml: [{\n ml: scaleMargin()\n }],\n /**\n * Space Between X\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x': [{\n 'space-x': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between X Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-x-reverse': ['space-x-reverse'],\n /**\n * Space Between Y\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y': [{\n 'space-y': scaleUnambiguousSpacing()\n }],\n /**\n * Space Between Y Reverse\n * @see https://tailwindcss.com/docs/margin#adding-space-between-children\n */\n 'space-y-reverse': ['space-y-reverse'],\n // --------------\n // --- Sizing ---\n // --------------\n /**\n * Size\n * @see https://tailwindcss.com/docs/width#setting-both-width-and-height\n */\n size: [{\n size: scaleSizing()\n }],\n /**\n * Width\n * @see https://tailwindcss.com/docs/width\n */\n w: [{\n w: [themeContainer, 'screen', ...scaleSizing()]\n }],\n /**\n * Min-Width\n * @see https://tailwindcss.com/docs/min-width\n */\n 'min-w': [{\n 'min-w': [themeContainer, 'screen', /** Deprecated. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'none', ...scaleSizing()]\n }],\n /**\n * Max-Width\n * @see https://tailwindcss.com/docs/max-width\n */\n 'max-w': [{\n 'max-w': [themeContainer, 'screen', 'none', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n 'prose', /** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n {\n screen: [themeBreakpoint]\n }, ...scaleSizing()]\n }],\n /**\n * Height\n * @see https://tailwindcss.com/docs/height\n */\n h: [{\n h: ['screen', 'lh', ...scaleSizing()]\n }],\n /**\n * Min-Height\n * @see https://tailwindcss.com/docs/min-height\n */\n 'min-h': [{\n 'min-h': ['screen', 'lh', 'none', ...scaleSizing()]\n }],\n /**\n * Max-Height\n * @see https://tailwindcss.com/docs/max-height\n */\n 'max-h': [{\n 'max-h': ['screen', 'lh', ...scaleSizing()]\n }],\n // ------------------\n // --- Typography ---\n // ------------------\n /**\n * Font Size\n * @see https://tailwindcss.com/docs/font-size\n */\n 'font-size': [{\n text: ['base', themeText, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Font Smoothing\n * @see https://tailwindcss.com/docs/font-smoothing\n */\n 'font-smoothing': ['antialiased', 'subpixel-antialiased'],\n /**\n * Font Style\n * @see https://tailwindcss.com/docs/font-style\n */\n 'font-style': ['italic', 'not-italic'],\n /**\n * Font Weight\n * @see https://tailwindcss.com/docs/font-weight\n */\n 'font-weight': [{\n font: [themeFontWeight, isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Font Stretch\n * @see https://tailwindcss.com/docs/font-stretch\n */\n 'font-stretch': [{\n 'font-stretch': ['ultra-condensed', 'extra-condensed', 'condensed', 'semi-condensed', 'normal', 'semi-expanded', 'expanded', 'extra-expanded', 'ultra-expanded', isPercent, isArbitraryValue]\n }],\n /**\n * Font Family\n * @see https://tailwindcss.com/docs/font-family\n */\n 'font-family': [{\n font: [isArbitraryVariableFamilyName, isArbitraryValue, themeFont]\n }],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-normal': ['normal-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-ordinal': ['ordinal'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-slashed-zero': ['slashed-zero'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-figure': ['lining-nums', 'oldstyle-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-spacing': ['proportional-nums', 'tabular-nums'],\n /**\n * Font Variant Numeric\n * @see https://tailwindcss.com/docs/font-variant-numeric\n */\n 'fvn-fraction': ['diagonal-fractions', 'stacked-fractions'],\n /**\n * Letter Spacing\n * @see https://tailwindcss.com/docs/letter-spacing\n */\n tracking: [{\n tracking: [themeTracking, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Line Clamp\n * @see https://tailwindcss.com/docs/line-clamp\n */\n 'line-clamp': [{\n 'line-clamp': [isNumber, 'none', isArbitraryVariable, isArbitraryNumber]\n }],\n /**\n * Line Height\n * @see https://tailwindcss.com/docs/line-height\n */\n leading: [{\n leading: [/** Deprecated since Tailwind CSS v4.0.0. @see https://github.com/tailwindlabs/tailwindcss.com/issues/2027#issuecomment-2620152757 */\n themeLeading, ...scaleUnambiguousSpacing()]\n }],\n /**\n * List Style Image\n * @see https://tailwindcss.com/docs/list-style-image\n */\n 'list-image': [{\n 'list-image': ['none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * List Style Position\n * @see https://tailwindcss.com/docs/list-style-position\n */\n 'list-style-position': [{\n list: ['inside', 'outside']\n }],\n /**\n * List Style Type\n * @see https://tailwindcss.com/docs/list-style-type\n */\n 'list-style-type': [{\n list: ['disc', 'decimal', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Alignment\n * @see https://tailwindcss.com/docs/text-align\n */\n 'text-alignment': [{\n text: ['left', 'center', 'right', 'justify', 'start', 'end']\n }],\n /**\n * Placeholder Color\n * @deprecated since Tailwind CSS v3.0.0\n * @see https://v3.tailwindcss.com/docs/placeholder-color\n */\n 'placeholder-color': [{\n placeholder: scaleColor()\n }],\n /**\n * Text Color\n * @see https://tailwindcss.com/docs/text-color\n */\n 'text-color': [{\n text: scaleColor()\n }],\n /**\n * Text Decoration\n * @see https://tailwindcss.com/docs/text-decoration\n */\n 'text-decoration': ['underline', 'overline', 'line-through', 'no-underline'],\n /**\n * Text Decoration Style\n * @see https://tailwindcss.com/docs/text-decoration-style\n */\n 'text-decoration-style': [{\n decoration: [...scaleLineStyle(), 'wavy']\n }],\n /**\n * Text Decoration Thickness\n * @see https://tailwindcss.com/docs/text-decoration-thickness\n */\n 'text-decoration-thickness': [{\n decoration: [isNumber, 'from-font', 'auto', isArbitraryVariable, isArbitraryLength]\n }],\n /**\n * Text Decoration Color\n * @see https://tailwindcss.com/docs/text-decoration-color\n */\n 'text-decoration-color': [{\n decoration: scaleColor()\n }],\n /**\n * Text Underline Offset\n * @see https://tailwindcss.com/docs/text-underline-offset\n */\n 'underline-offset': [{\n 'underline-offset': [isNumber, 'auto', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Text Transform\n * @see https://tailwindcss.com/docs/text-transform\n */\n 'text-transform': ['uppercase', 'lowercase', 'capitalize', 'normal-case'],\n /**\n * Text Overflow\n * @see https://tailwindcss.com/docs/text-overflow\n */\n 'text-overflow': ['truncate', 'text-ellipsis', 'text-clip'],\n /**\n * Text Wrap\n * @see https://tailwindcss.com/docs/text-wrap\n */\n 'text-wrap': [{\n text: ['wrap', 'nowrap', 'balance', 'pretty']\n }],\n /**\n * Text Indent\n * @see https://tailwindcss.com/docs/text-indent\n */\n indent: [{\n indent: scaleUnambiguousSpacing()\n }],\n /**\n * Vertical Alignment\n * @see https://tailwindcss.com/docs/vertical-align\n */\n 'vertical-align': [{\n align: ['baseline', 'top', 'middle', 'bottom', 'text-top', 'text-bottom', 'sub', 'super', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Whitespace\n * @see https://tailwindcss.com/docs/whitespace\n */\n whitespace: [{\n whitespace: ['normal', 'nowrap', 'pre', 'pre-line', 'pre-wrap', 'break-spaces']\n }],\n /**\n * Word Break\n * @see https://tailwindcss.com/docs/word-break\n */\n break: [{\n break: ['normal', 'words', 'all', 'keep']\n }],\n /**\n * Overflow Wrap\n * @see https://tailwindcss.com/docs/overflow-wrap\n */\n wrap: [{\n wrap: ['break-word', 'anywhere', 'normal']\n }],\n /**\n * Hyphens\n * @see https://tailwindcss.com/docs/hyphens\n */\n hyphens: [{\n hyphens: ['none', 'manual', 'auto']\n }],\n /**\n * Content\n * @see https://tailwindcss.com/docs/content\n */\n content: [{\n content: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // -------------------\n // --- Backgrounds ---\n // -------------------\n /**\n * Background Attachment\n * @see https://tailwindcss.com/docs/background-attachment\n */\n 'bg-attachment': [{\n bg: ['fixed', 'local', 'scroll']\n }],\n /**\n * Background Clip\n * @see https://tailwindcss.com/docs/background-clip\n */\n 'bg-clip': [{\n 'bg-clip': ['border', 'padding', 'content', 'text']\n }],\n /**\n * Background Origin\n * @see https://tailwindcss.com/docs/background-origin\n */\n 'bg-origin': [{\n 'bg-origin': ['border', 'padding', 'content']\n }],\n /**\n * Background Position\n * @see https://tailwindcss.com/docs/background-position\n */\n 'bg-position': [{\n bg: scaleBgPosition()\n }],\n /**\n * Background Repeat\n * @see https://tailwindcss.com/docs/background-repeat\n */\n 'bg-repeat': [{\n bg: scaleBgRepeat()\n }],\n /**\n * Background Size\n * @see https://tailwindcss.com/docs/background-size\n */\n 'bg-size': [{\n bg: scaleBgSize()\n }],\n /**\n * Background Image\n * @see https://tailwindcss.com/docs/background-image\n */\n 'bg-image': [{\n bg: ['none', {\n linear: [{\n to: ['t', 'tr', 'r', 'br', 'b', 'bl', 'l', 'tl']\n }, isInteger, isArbitraryVariable, isArbitraryValue],\n radial: ['', isArbitraryVariable, isArbitraryValue],\n conic: [isInteger, isArbitraryVariable, isArbitraryValue]\n }, isArbitraryVariableImage, isArbitraryImage]\n }],\n /**\n * Background Color\n * @see https://tailwindcss.com/docs/background-color\n */\n 'bg-color': [{\n bg: scaleColor()\n }],\n /**\n * Gradient Color Stops From Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from-pos': [{\n from: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops Via Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via-pos': [{\n via: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops To Position\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to-pos': [{\n to: scaleGradientStopPosition()\n }],\n /**\n * Gradient Color Stops From\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-from': [{\n from: scaleColor()\n }],\n /**\n * Gradient Color Stops Via\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-via': [{\n via: scaleColor()\n }],\n /**\n * Gradient Color Stops To\n * @see https://tailwindcss.com/docs/gradient-color-stops\n */\n 'gradient-to': [{\n to: scaleColor()\n }],\n // ---------------\n // --- Borders ---\n // ---------------\n /**\n * Border Radius\n * @see https://tailwindcss.com/docs/border-radius\n */\n rounded: [{\n rounded: scaleRadius()\n }],\n /**\n * Border Radius Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-s': [{\n 'rounded-s': scaleRadius()\n }],\n /**\n * Border Radius End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-e': [{\n 'rounded-e': scaleRadius()\n }],\n /**\n * Border Radius Top\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-t': [{\n 'rounded-t': scaleRadius()\n }],\n /**\n * Border Radius Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-r': [{\n 'rounded-r': scaleRadius()\n }],\n /**\n * Border Radius Bottom\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-b': [{\n 'rounded-b': scaleRadius()\n }],\n /**\n * Border Radius Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-l': [{\n 'rounded-l': scaleRadius()\n }],\n /**\n * Border Radius Start Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ss': [{\n 'rounded-ss': scaleRadius()\n }],\n /**\n * Border Radius Start End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-se': [{\n 'rounded-se': scaleRadius()\n }],\n /**\n * Border Radius End End\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-ee': [{\n 'rounded-ee': scaleRadius()\n }],\n /**\n * Border Radius End Start\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-es': [{\n 'rounded-es': scaleRadius()\n }],\n /**\n * Border Radius Top Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tl': [{\n 'rounded-tl': scaleRadius()\n }],\n /**\n * Border Radius Top Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-tr': [{\n 'rounded-tr': scaleRadius()\n }],\n /**\n * Border Radius Bottom Right\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-br': [{\n 'rounded-br': scaleRadius()\n }],\n /**\n * Border Radius Bottom Left\n * @see https://tailwindcss.com/docs/border-radius\n */\n 'rounded-bl': [{\n 'rounded-bl': scaleRadius()\n }],\n /**\n * Border Width\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w': [{\n border: scaleBorderWidth()\n }],\n /**\n * Border Width X\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-x': [{\n 'border-x': scaleBorderWidth()\n }],\n /**\n * Border Width Y\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-y': [{\n 'border-y': scaleBorderWidth()\n }],\n /**\n * Border Width Start\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-s': [{\n 'border-s': scaleBorderWidth()\n }],\n /**\n * Border Width End\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-e': [{\n 'border-e': scaleBorderWidth()\n }],\n /**\n * Border Width Top\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-t': [{\n 'border-t': scaleBorderWidth()\n }],\n /**\n * Border Width Right\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-r': [{\n 'border-r': scaleBorderWidth()\n }],\n /**\n * Border Width Bottom\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-b': [{\n 'border-b': scaleBorderWidth()\n }],\n /**\n * Border Width Left\n * @see https://tailwindcss.com/docs/border-width\n */\n 'border-w-l': [{\n 'border-l': scaleBorderWidth()\n }],\n /**\n * Divide Width X\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x': [{\n 'divide-x': scaleBorderWidth()\n }],\n /**\n * Divide Width X Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-x-reverse': ['divide-x-reverse'],\n /**\n * Divide Width Y\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y': [{\n 'divide-y': scaleBorderWidth()\n }],\n /**\n * Divide Width Y Reverse\n * @see https://tailwindcss.com/docs/border-width#between-children\n */\n 'divide-y-reverse': ['divide-y-reverse'],\n /**\n * Border Style\n * @see https://tailwindcss.com/docs/border-style\n */\n 'border-style': [{\n border: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Divide Style\n * @see https://tailwindcss.com/docs/border-style#setting-the-divider-style\n */\n 'divide-style': [{\n divide: [...scaleLineStyle(), 'hidden', 'none']\n }],\n /**\n * Border Color\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color': [{\n border: scaleColor()\n }],\n /**\n * Border Color X\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-x': [{\n 'border-x': scaleColor()\n }],\n /**\n * Border Color Y\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-y': [{\n 'border-y': scaleColor()\n }],\n /**\n * Border Color S\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-s': [{\n 'border-s': scaleColor()\n }],\n /**\n * Border Color E\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-e': [{\n 'border-e': scaleColor()\n }],\n /**\n * Border Color Top\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-t': [{\n 'border-t': scaleColor()\n }],\n /**\n * Border Color Right\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-r': [{\n 'border-r': scaleColor()\n }],\n /**\n * Border Color Bottom\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-b': [{\n 'border-b': scaleColor()\n }],\n /**\n * Border Color Left\n * @see https://tailwindcss.com/docs/border-color\n */\n 'border-color-l': [{\n 'border-l': scaleColor()\n }],\n /**\n * Divide Color\n * @see https://tailwindcss.com/docs/divide-color\n */\n 'divide-color': [{\n divide: scaleColor()\n }],\n /**\n * Outline Style\n * @see https://tailwindcss.com/docs/outline-style\n */\n 'outline-style': [{\n outline: [...scaleLineStyle(), 'none', 'hidden']\n }],\n /**\n * Outline Offset\n * @see https://tailwindcss.com/docs/outline-offset\n */\n 'outline-offset': [{\n 'outline-offset': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Outline Width\n * @see https://tailwindcss.com/docs/outline-width\n */\n 'outline-w': [{\n outline: ['', isNumber, isArbitraryVariableLength, isArbitraryLength]\n }],\n /**\n * Outline Color\n * @see https://tailwindcss.com/docs/outline-color\n */\n 'outline-color': [{\n outline: scaleColor()\n }],\n // ---------------\n // --- Effects ---\n // ---------------\n /**\n * Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow\n */\n shadow: [{\n shadow: [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-shadow-color\n */\n 'shadow-color': [{\n shadow: scaleColor()\n }],\n /**\n * Inset Box Shadow\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-shadow\n */\n 'inset-shadow': [{\n 'inset-shadow': ['none', themeInsetShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Inset Box Shadow Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-shadow-color\n */\n 'inset-shadow-color': [{\n 'inset-shadow': scaleColor()\n }],\n /**\n * Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-a-ring\n */\n 'ring-w': [{\n ring: scaleBorderWidth()\n }],\n /**\n * Ring Width Inset\n * @see https://v3.tailwindcss.com/docs/ring-width#inset-rings\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-w-inset': ['ring-inset'],\n /**\n * Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-ring-color\n */\n 'ring-color': [{\n ring: scaleColor()\n }],\n /**\n * Ring Offset Width\n * @see https://v3.tailwindcss.com/docs/ring-offset-width\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-w': [{\n 'ring-offset': [isNumber, isArbitraryLength]\n }],\n /**\n * Ring Offset Color\n * @see https://v3.tailwindcss.com/docs/ring-offset-color\n * @deprecated since Tailwind CSS v4.0.0\n * @see https://github.com/tailwindlabs/tailwindcss/blob/v4.0.0/packages/tailwindcss/src/utilities.ts#L4158\n */\n 'ring-offset-color': [{\n 'ring-offset': scaleColor()\n }],\n /**\n * Inset Ring Width\n * @see https://tailwindcss.com/docs/box-shadow#adding-an-inset-ring\n */\n 'inset-ring-w': [{\n 'inset-ring': scaleBorderWidth()\n }],\n /**\n * Inset Ring Color\n * @see https://tailwindcss.com/docs/box-shadow#setting-the-inset-ring-color\n */\n 'inset-ring-color': [{\n 'inset-ring': scaleColor()\n }],\n /**\n * Text Shadow\n * @see https://tailwindcss.com/docs/text-shadow\n */\n 'text-shadow': [{\n 'text-shadow': ['none', themeTextShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Text Shadow Color\n * @see https://tailwindcss.com/docs/text-shadow#setting-the-shadow-color\n */\n 'text-shadow-color': [{\n 'text-shadow': scaleColor()\n }],\n /**\n * Opacity\n * @see https://tailwindcss.com/docs/opacity\n */\n opacity: [{\n opacity: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Mix Blend Mode\n * @see https://tailwindcss.com/docs/mix-blend-mode\n */\n 'mix-blend': [{\n 'mix-blend': [...scaleBlendMode(), 'plus-darker', 'plus-lighter']\n }],\n /**\n * Background Blend Mode\n * @see https://tailwindcss.com/docs/background-blend-mode\n */\n 'bg-blend': [{\n 'bg-blend': scaleBlendMode()\n }],\n /**\n * Mask Clip\n * @see https://tailwindcss.com/docs/mask-clip\n */\n 'mask-clip': [{\n 'mask-clip': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }, 'mask-no-clip'],\n /**\n * Mask Composite\n * @see https://tailwindcss.com/docs/mask-composite\n */\n 'mask-composite': [{\n mask: ['add', 'subtract', 'intersect', 'exclude']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image-linear-pos': [{\n 'mask-linear': [isNumber]\n }],\n 'mask-image-linear-from-pos': [{\n 'mask-linear-from': scaleMaskImagePosition()\n }],\n 'mask-image-linear-to-pos': [{\n 'mask-linear-to': scaleMaskImagePosition()\n }],\n 'mask-image-linear-from-color': [{\n 'mask-linear-from': scaleColor()\n }],\n 'mask-image-linear-to-color': [{\n 'mask-linear-to': scaleColor()\n }],\n 'mask-image-t-from-pos': [{\n 'mask-t-from': scaleMaskImagePosition()\n }],\n 'mask-image-t-to-pos': [{\n 'mask-t-to': scaleMaskImagePosition()\n }],\n 'mask-image-t-from-color': [{\n 'mask-t-from': scaleColor()\n }],\n 'mask-image-t-to-color': [{\n 'mask-t-to': scaleColor()\n }],\n 'mask-image-r-from-pos': [{\n 'mask-r-from': scaleMaskImagePosition()\n }],\n 'mask-image-r-to-pos': [{\n 'mask-r-to': scaleMaskImagePosition()\n }],\n 'mask-image-r-from-color': [{\n 'mask-r-from': scaleColor()\n }],\n 'mask-image-r-to-color': [{\n 'mask-r-to': scaleColor()\n }],\n 'mask-image-b-from-pos': [{\n 'mask-b-from': scaleMaskImagePosition()\n }],\n 'mask-image-b-to-pos': [{\n 'mask-b-to': scaleMaskImagePosition()\n }],\n 'mask-image-b-from-color': [{\n 'mask-b-from': scaleColor()\n }],\n 'mask-image-b-to-color': [{\n 'mask-b-to': scaleColor()\n }],\n 'mask-image-l-from-pos': [{\n 'mask-l-from': scaleMaskImagePosition()\n }],\n 'mask-image-l-to-pos': [{\n 'mask-l-to': scaleMaskImagePosition()\n }],\n 'mask-image-l-from-color': [{\n 'mask-l-from': scaleColor()\n }],\n 'mask-image-l-to-color': [{\n 'mask-l-to': scaleColor()\n }],\n 'mask-image-x-from-pos': [{\n 'mask-x-from': scaleMaskImagePosition()\n }],\n 'mask-image-x-to-pos': [{\n 'mask-x-to': scaleMaskImagePosition()\n }],\n 'mask-image-x-from-color': [{\n 'mask-x-from': scaleColor()\n }],\n 'mask-image-x-to-color': [{\n 'mask-x-to': scaleColor()\n }],\n 'mask-image-y-from-pos': [{\n 'mask-y-from': scaleMaskImagePosition()\n }],\n 'mask-image-y-to-pos': [{\n 'mask-y-to': scaleMaskImagePosition()\n }],\n 'mask-image-y-from-color': [{\n 'mask-y-from': scaleColor()\n }],\n 'mask-image-y-to-color': [{\n 'mask-y-to': scaleColor()\n }],\n 'mask-image-radial': [{\n 'mask-radial': [isArbitraryVariable, isArbitraryValue]\n }],\n 'mask-image-radial-from-pos': [{\n 'mask-radial-from': scaleMaskImagePosition()\n }],\n 'mask-image-radial-to-pos': [{\n 'mask-radial-to': scaleMaskImagePosition()\n }],\n 'mask-image-radial-from-color': [{\n 'mask-radial-from': scaleColor()\n }],\n 'mask-image-radial-to-color': [{\n 'mask-radial-to': scaleColor()\n }],\n 'mask-image-radial-shape': [{\n 'mask-radial': ['circle', 'ellipse']\n }],\n 'mask-image-radial-size': [{\n 'mask-radial': [{\n closest: ['side', 'corner'],\n farthest: ['side', 'corner']\n }]\n }],\n 'mask-image-radial-pos': [{\n 'mask-radial-at': scalePosition()\n }],\n 'mask-image-conic-pos': [{\n 'mask-conic': [isNumber]\n }],\n 'mask-image-conic-from-pos': [{\n 'mask-conic-from': scaleMaskImagePosition()\n }],\n 'mask-image-conic-to-pos': [{\n 'mask-conic-to': scaleMaskImagePosition()\n }],\n 'mask-image-conic-from-color': [{\n 'mask-conic-from': scaleColor()\n }],\n 'mask-image-conic-to-color': [{\n 'mask-conic-to': scaleColor()\n }],\n /**\n * Mask Mode\n * @see https://tailwindcss.com/docs/mask-mode\n */\n 'mask-mode': [{\n mask: ['alpha', 'luminance', 'match']\n }],\n /**\n * Mask Origin\n * @see https://tailwindcss.com/docs/mask-origin\n */\n 'mask-origin': [{\n 'mask-origin': ['border', 'padding', 'content', 'fill', 'stroke', 'view']\n }],\n /**\n * Mask Position\n * @see https://tailwindcss.com/docs/mask-position\n */\n 'mask-position': [{\n mask: scaleBgPosition()\n }],\n /**\n * Mask Repeat\n * @see https://tailwindcss.com/docs/mask-repeat\n */\n 'mask-repeat': [{\n mask: scaleBgRepeat()\n }],\n /**\n * Mask Size\n * @see https://tailwindcss.com/docs/mask-size\n */\n 'mask-size': [{\n mask: scaleBgSize()\n }],\n /**\n * Mask Type\n * @see https://tailwindcss.com/docs/mask-type\n */\n 'mask-type': [{\n 'mask-type': ['alpha', 'luminance']\n }],\n /**\n * Mask Image\n * @see https://tailwindcss.com/docs/mask-image\n */\n 'mask-image': [{\n mask: ['none', isArbitraryVariable, isArbitraryValue]\n }],\n // ---------------\n // --- Filters ---\n // ---------------\n /**\n * Filter\n * @see https://tailwindcss.com/docs/filter\n */\n filter: [{\n filter: [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Blur\n * @see https://tailwindcss.com/docs/blur\n */\n blur: [{\n blur: scaleBlur()\n }],\n /**\n * Brightness\n * @see https://tailwindcss.com/docs/brightness\n */\n brightness: [{\n brightness: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Contrast\n * @see https://tailwindcss.com/docs/contrast\n */\n contrast: [{\n contrast: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Drop Shadow\n * @see https://tailwindcss.com/docs/drop-shadow\n */\n 'drop-shadow': [{\n 'drop-shadow': [\n // Deprecated since Tailwind CSS v4.0.0\n '', 'none', themeDropShadow, isArbitraryVariableShadow, isArbitraryShadow]\n }],\n /**\n * Drop Shadow Color\n * @see https://tailwindcss.com/docs/filter-drop-shadow#setting-the-shadow-color\n */\n 'drop-shadow-color': [{\n 'drop-shadow': scaleColor()\n }],\n /**\n * Grayscale\n * @see https://tailwindcss.com/docs/grayscale\n */\n grayscale: [{\n grayscale: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Hue Rotate\n * @see https://tailwindcss.com/docs/hue-rotate\n */\n 'hue-rotate': [{\n 'hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Invert\n * @see https://tailwindcss.com/docs/invert\n */\n invert: [{\n invert: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Saturate\n * @see https://tailwindcss.com/docs/saturate\n */\n saturate: [{\n saturate: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Sepia\n * @see https://tailwindcss.com/docs/sepia\n */\n sepia: [{\n sepia: ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Filter\n * @see https://tailwindcss.com/docs/backdrop-filter\n */\n 'backdrop-filter': [{\n 'backdrop-filter': [\n // Deprecated since Tailwind CSS v3.0.0\n '', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Blur\n * @see https://tailwindcss.com/docs/backdrop-blur\n */\n 'backdrop-blur': [{\n 'backdrop-blur': scaleBlur()\n }],\n /**\n * Backdrop Brightness\n * @see https://tailwindcss.com/docs/backdrop-brightness\n */\n 'backdrop-brightness': [{\n 'backdrop-brightness': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Contrast\n * @see https://tailwindcss.com/docs/backdrop-contrast\n */\n 'backdrop-contrast': [{\n 'backdrop-contrast': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Grayscale\n * @see https://tailwindcss.com/docs/backdrop-grayscale\n */\n 'backdrop-grayscale': [{\n 'backdrop-grayscale': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Hue Rotate\n * @see https://tailwindcss.com/docs/backdrop-hue-rotate\n */\n 'backdrop-hue-rotate': [{\n 'backdrop-hue-rotate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Invert\n * @see https://tailwindcss.com/docs/backdrop-invert\n */\n 'backdrop-invert': [{\n 'backdrop-invert': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Opacity\n * @see https://tailwindcss.com/docs/backdrop-opacity\n */\n 'backdrop-opacity': [{\n 'backdrop-opacity': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Saturate\n * @see https://tailwindcss.com/docs/backdrop-saturate\n */\n 'backdrop-saturate': [{\n 'backdrop-saturate': [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Backdrop Sepia\n * @see https://tailwindcss.com/docs/backdrop-sepia\n */\n 'backdrop-sepia': [{\n 'backdrop-sepia': ['', isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n // --------------\n // --- Tables ---\n // --------------\n /**\n * Border Collapse\n * @see https://tailwindcss.com/docs/border-collapse\n */\n 'border-collapse': [{\n border: ['collapse', 'separate']\n }],\n /**\n * Border Spacing\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing': [{\n 'border-spacing': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing X\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-x': [{\n 'border-spacing-x': scaleUnambiguousSpacing()\n }],\n /**\n * Border Spacing Y\n * @see https://tailwindcss.com/docs/border-spacing\n */\n 'border-spacing-y': [{\n 'border-spacing-y': scaleUnambiguousSpacing()\n }],\n /**\n * Table Layout\n * @see https://tailwindcss.com/docs/table-layout\n */\n 'table-layout': [{\n table: ['auto', 'fixed']\n }],\n /**\n * Caption Side\n * @see https://tailwindcss.com/docs/caption-side\n */\n caption: [{\n caption: ['top', 'bottom']\n }],\n // ---------------------------------\n // --- Transitions and Animation ---\n // ---------------------------------\n /**\n * Transition Property\n * @see https://tailwindcss.com/docs/transition-property\n */\n transition: [{\n transition: ['', 'all', 'colors', 'opacity', 'shadow', 'transform', 'none', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Behavior\n * @see https://tailwindcss.com/docs/transition-behavior\n */\n 'transition-behavior': [{\n transition: ['normal', 'discrete']\n }],\n /**\n * Transition Duration\n * @see https://tailwindcss.com/docs/transition-duration\n */\n duration: [{\n duration: [isNumber, 'initial', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Timing Function\n * @see https://tailwindcss.com/docs/transition-timing-function\n */\n ease: [{\n ease: ['linear', 'initial', themeEase, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Transition Delay\n * @see https://tailwindcss.com/docs/transition-delay\n */\n delay: [{\n delay: [isNumber, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Animation\n * @see https://tailwindcss.com/docs/animation\n */\n animate: [{\n animate: ['none', themeAnimate, isArbitraryVariable, isArbitraryValue]\n }],\n // ------------------\n // --- Transforms ---\n // ------------------\n /**\n * Backface Visibility\n * @see https://tailwindcss.com/docs/backface-visibility\n */\n backface: [{\n backface: ['hidden', 'visible']\n }],\n /**\n * Perspective\n * @see https://tailwindcss.com/docs/perspective\n */\n perspective: [{\n perspective: [themePerspective, isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Perspective Origin\n * @see https://tailwindcss.com/docs/perspective-origin\n */\n 'perspective-origin': [{\n 'perspective-origin': scalePositionWithArbitrary()\n }],\n /**\n * Rotate\n * @see https://tailwindcss.com/docs/rotate\n */\n rotate: [{\n rotate: scaleRotate()\n }],\n /**\n * Rotate X\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-x': [{\n 'rotate-x': scaleRotate()\n }],\n /**\n * Rotate Y\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-y': [{\n 'rotate-y': scaleRotate()\n }],\n /**\n * Rotate Z\n * @see https://tailwindcss.com/docs/rotate\n */\n 'rotate-z': [{\n 'rotate-z': scaleRotate()\n }],\n /**\n * Scale\n * @see https://tailwindcss.com/docs/scale\n */\n scale: [{\n scale: scaleScale()\n }],\n /**\n * Scale X\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-x': [{\n 'scale-x': scaleScale()\n }],\n /**\n * Scale Y\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-y': [{\n 'scale-y': scaleScale()\n }],\n /**\n * Scale Z\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-z': [{\n 'scale-z': scaleScale()\n }],\n /**\n * Scale 3D\n * @see https://tailwindcss.com/docs/scale\n */\n 'scale-3d': ['scale-3d'],\n /**\n * Skew\n * @see https://tailwindcss.com/docs/skew\n */\n skew: [{\n skew: scaleSkew()\n }],\n /**\n * Skew X\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-x': [{\n 'skew-x': scaleSkew()\n }],\n /**\n * Skew Y\n * @see https://tailwindcss.com/docs/skew\n */\n 'skew-y': [{\n 'skew-y': scaleSkew()\n }],\n /**\n * Transform\n * @see https://tailwindcss.com/docs/transform\n */\n transform: [{\n transform: [isArbitraryVariable, isArbitraryValue, '', 'none', 'gpu', 'cpu']\n }],\n /**\n * Transform Origin\n * @see https://tailwindcss.com/docs/transform-origin\n */\n 'transform-origin': [{\n origin: scalePositionWithArbitrary()\n }],\n /**\n * Transform Style\n * @see https://tailwindcss.com/docs/transform-style\n */\n 'transform-style': [{\n transform: ['3d', 'flat']\n }],\n /**\n * Translate\n * @see https://tailwindcss.com/docs/translate\n */\n translate: [{\n translate: scaleTranslate()\n }],\n /**\n * Translate X\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-x': [{\n 'translate-x': scaleTranslate()\n }],\n /**\n * Translate Y\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-y': [{\n 'translate-y': scaleTranslate()\n }],\n /**\n * Translate Z\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-z': [{\n 'translate-z': scaleTranslate()\n }],\n /**\n * Translate None\n * @see https://tailwindcss.com/docs/translate\n */\n 'translate-none': ['translate-none'],\n // ---------------------\n // --- Interactivity ---\n // ---------------------\n /**\n * Accent Color\n * @see https://tailwindcss.com/docs/accent-color\n */\n accent: [{\n accent: scaleColor()\n }],\n /**\n * Appearance\n * @see https://tailwindcss.com/docs/appearance\n */\n appearance: [{\n appearance: ['none', 'auto']\n }],\n /**\n * Caret Color\n * @see https://tailwindcss.com/docs/just-in-time-mode#caret-color-utilities\n */\n 'caret-color': [{\n caret: scaleColor()\n }],\n /**\n * Color Scheme\n * @see https://tailwindcss.com/docs/color-scheme\n */\n 'color-scheme': [{\n scheme: ['normal', 'dark', 'light', 'light-dark', 'only-dark', 'only-light']\n }],\n /**\n * Cursor\n * @see https://tailwindcss.com/docs/cursor\n */\n cursor: [{\n cursor: ['auto', 'default', 'pointer', 'wait', 'text', 'move', 'help', 'not-allowed', 'none', 'context-menu', 'progress', 'cell', 'crosshair', 'vertical-text', 'alias', 'copy', 'no-drop', 'grab', 'grabbing', 'all-scroll', 'col-resize', 'row-resize', 'n-resize', 'e-resize', 's-resize', 'w-resize', 'ne-resize', 'nw-resize', 'se-resize', 'sw-resize', 'ew-resize', 'ns-resize', 'nesw-resize', 'nwse-resize', 'zoom-in', 'zoom-out', isArbitraryVariable, isArbitraryValue]\n }],\n /**\n * Field Sizing\n * @see https://tailwindcss.com/docs/field-sizing\n */\n 'field-sizing': [{\n 'field-sizing': ['fixed', 'content']\n }],\n /**\n * Pointer Events\n * @see https://tailwindcss.com/docs/pointer-events\n */\n 'pointer-events': [{\n 'pointer-events': ['auto', 'none']\n }],\n /**\n * Resize\n * @see https://tailwindcss.com/docs/resize\n */\n resize: [{\n resize: ['none', '', 'y', 'x']\n }],\n /**\n * Scroll Behavior\n * @see https://tailwindcss.com/docs/scroll-behavior\n */\n 'scroll-behavior': [{\n scroll: ['auto', 'smooth']\n }],\n /**\n * Scroll Margin\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-m': [{\n 'scroll-m': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin X\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mx': [{\n 'scroll-mx': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Y\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-my': [{\n 'scroll-my': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Start\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ms': [{\n 'scroll-ms': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin End\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-me': [{\n 'scroll-me': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Top\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mt': [{\n 'scroll-mt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Right\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mr': [{\n 'scroll-mr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Bottom\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-mb': [{\n 'scroll-mb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Margin Left\n * @see https://tailwindcss.com/docs/scroll-margin\n */\n 'scroll-ml': [{\n 'scroll-ml': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-p': [{\n 'scroll-p': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding X\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-px': [{\n 'scroll-px': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Y\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-py': [{\n 'scroll-py': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Start\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-ps': [{\n 'scroll-ps': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding End\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pe': [{\n 'scroll-pe': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Top\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pt': [{\n 'scroll-pt': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Right\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pr': [{\n 'scroll-pr': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Bottom\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pb': [{\n 'scroll-pb': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Padding Left\n * @see https://tailwindcss.com/docs/scroll-padding\n */\n 'scroll-pl': [{\n 'scroll-pl': scaleUnambiguousSpacing()\n }],\n /**\n * Scroll Snap Align\n * @see https://tailwindcss.com/docs/scroll-snap-align\n */\n 'snap-align': [{\n snap: ['start', 'end', 'center', 'align-none']\n }],\n /**\n * Scroll Snap Stop\n * @see https://tailwindcss.com/docs/scroll-snap-stop\n */\n 'snap-stop': [{\n snap: ['normal', 'always']\n }],\n /**\n * Scroll Snap Type\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-type': [{\n snap: ['none', 'x', 'y', 'both']\n }],\n /**\n * Scroll Snap Type Strictness\n * @see https://tailwindcss.com/docs/scroll-snap-type\n */\n 'snap-strictness': [{\n snap: ['mandatory', 'proximity']\n }],\n /**\n * Touch Action\n * @see https://tailwindcss.com/docs/touch-action\n */\n touch: [{\n touch: ['auto', 'none', 'manipulation']\n }],\n /**\n * Touch Action X\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-x': [{\n 'touch-pan': ['x', 'left', 'right']\n }],\n /**\n * Touch Action Y\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-y': [{\n 'touch-pan': ['y', 'up', 'down']\n }],\n /**\n * Touch Action Pinch Zoom\n * @see https://tailwindcss.com/docs/touch-action\n */\n 'touch-pz': ['touch-pinch-zoom'],\n /**\n * User Select\n * @see https://tailwindcss.com/docs/user-select\n */\n select: [{\n select: ['none', 'text', 'all', 'auto']\n }],\n /**\n * Will Change\n * @see https://tailwindcss.com/docs/will-change\n */\n 'will-change': [{\n 'will-change': ['auto', 'scroll', 'contents', 'transform', isArbitraryVariable, isArbitraryValue]\n }],\n // -----------\n // --- SVG ---\n // -----------\n /**\n * Fill\n * @see https://tailwindcss.com/docs/fill\n */\n fill: [{\n fill: ['none', ...scaleColor()]\n }],\n /**\n * Stroke Width\n * @see https://tailwindcss.com/docs/stroke-width\n */\n 'stroke-w': [{\n stroke: [isNumber, isArbitraryVariableLength, isArbitraryLength, isArbitraryNumber]\n }],\n /**\n * Stroke\n * @see https://tailwindcss.com/docs/stroke\n */\n stroke: [{\n stroke: ['none', ...scaleColor()]\n }],\n // ---------------------\n // --- Accessibility ---\n // ---------------------\n /**\n * Forced Color Adjust\n * @see https://tailwindcss.com/docs/forced-color-adjust\n */\n 'forced-color-adjust': [{\n 'forced-color-adjust': ['auto', 'none']\n }]\n },\n conflictingClassGroups: {\n overflow: ['overflow-x', 'overflow-y'],\n overscroll: ['overscroll-x', 'overscroll-y'],\n inset: ['inset-x', 'inset-y', 'start', 'end', 'top', 'right', 'bottom', 'left'],\n 'inset-x': ['right', 'left'],\n 'inset-y': ['top', 'bottom'],\n flex: ['basis', 'grow', 'shrink'],\n gap: ['gap-x', 'gap-y'],\n p: ['px', 'py', 'ps', 'pe', 'pt', 'pr', 'pb', 'pl'],\n px: ['pr', 'pl'],\n py: ['pt', 'pb'],\n m: ['mx', 'my', 'ms', 'me', 'mt', 'mr', 'mb', 'ml'],\n mx: ['mr', 'ml'],\n my: ['mt', 'mb'],\n size: ['w', 'h'],\n 'font-size': ['leading'],\n 'fvn-normal': ['fvn-ordinal', 'fvn-slashed-zero', 'fvn-figure', 'fvn-spacing', 'fvn-fraction'],\n 'fvn-ordinal': ['fvn-normal'],\n 'fvn-slashed-zero': ['fvn-normal'],\n 'fvn-figure': ['fvn-normal'],\n 'fvn-spacing': ['fvn-normal'],\n 'fvn-fraction': ['fvn-normal'],\n 'line-clamp': ['display', 'overflow'],\n rounded: ['rounded-s', 'rounded-e', 'rounded-t', 'rounded-r', 'rounded-b', 'rounded-l', 'rounded-ss', 'rounded-se', 'rounded-ee', 'rounded-es', 'rounded-tl', 'rounded-tr', 'rounded-br', 'rounded-bl'],\n 'rounded-s': ['rounded-ss', 'rounded-es'],\n 'rounded-e': ['rounded-se', 'rounded-ee'],\n 'rounded-t': ['rounded-tl', 'rounded-tr'],\n 'rounded-r': ['rounded-tr', 'rounded-br'],\n 'rounded-b': ['rounded-br', 'rounded-bl'],\n 'rounded-l': ['rounded-tl', 'rounded-bl'],\n 'border-spacing': ['border-spacing-x', 'border-spacing-y'],\n 'border-w': ['border-w-x', 'border-w-y', 'border-w-s', 'border-w-e', 'border-w-t', 'border-w-r', 'border-w-b', 'border-w-l'],\n 'border-w-x': ['border-w-r', 'border-w-l'],\n 'border-w-y': ['border-w-t', 'border-w-b'],\n 'border-color': ['border-color-x', 'border-color-y', 'border-color-s', 'border-color-e', 'border-color-t', 'border-color-r', 'border-color-b', 'border-color-l'],\n 'border-color-x': ['border-color-r', 'border-color-l'],\n 'border-color-y': ['border-color-t', 'border-color-b'],\n translate: ['translate-x', 'translate-y', 'translate-none'],\n 'translate-none': ['translate', 'translate-x', 'translate-y', 'translate-z'],\n 'scroll-m': ['scroll-mx', 'scroll-my', 'scroll-ms', 'scroll-me', 'scroll-mt', 'scroll-mr', 'scroll-mb', 'scroll-ml'],\n 'scroll-mx': ['scroll-mr', 'scroll-ml'],\n 'scroll-my': ['scroll-mt', 'scroll-mb'],\n 'scroll-p': ['scroll-px', 'scroll-py', 'scroll-ps', 'scroll-pe', 'scroll-pt', 'scroll-pr', 'scroll-pb', 'scroll-pl'],\n 'scroll-px': ['scroll-pr', 'scroll-pl'],\n 'scroll-py': ['scroll-pt', 'scroll-pb'],\n touch: ['touch-x', 'touch-y', 'touch-pz'],\n 'touch-x': ['touch'],\n 'touch-y': ['touch'],\n 'touch-pz': ['touch']\n },\n conflictingClassGroupModifiers: {\n 'font-size': ['leading']\n },\n orderSensitiveModifiers: ['*', '**', 'after', 'backdrop', 'before', 'details-content', 'file', 'first-letter', 'first-line', 'marker', 'placeholder', 'selection']\n };\n};\n\n/**\n * @param baseConfig Config where other config will be merged into. This object will be mutated.\n * @param configExtension Partial config to merge into the `baseConfig`.\n */\nconst mergeConfigs = (baseConfig, {\n cacheSize,\n prefix,\n experimentalParseClassName,\n extend = {},\n override = {}\n}) => {\n overrideProperty(baseConfig, 'cacheSize', cacheSize);\n overrideProperty(baseConfig, 'prefix', prefix);\n overrideProperty(baseConfig, 'experimentalParseClassName', experimentalParseClassName);\n overrideConfigProperties(baseConfig.theme, override.theme);\n overrideConfigProperties(baseConfig.classGroups, override.classGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroups, override.conflictingClassGroups);\n overrideConfigProperties(baseConfig.conflictingClassGroupModifiers, override.conflictingClassGroupModifiers);\n overrideProperty(baseConfig, 'orderSensitiveModifiers', override.orderSensitiveModifiers);\n mergeConfigProperties(baseConfig.theme, extend.theme);\n mergeConfigProperties(baseConfig.classGroups, extend.classGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroups, extend.conflictingClassGroups);\n mergeConfigProperties(baseConfig.conflictingClassGroupModifiers, extend.conflictingClassGroupModifiers);\n mergeArrayProperties(baseConfig, extend, 'orderSensitiveModifiers');\n return baseConfig;\n};\nconst overrideProperty = (baseObject, overrideKey, overrideValue) => {\n if (overrideValue !== undefined) {\n baseObject[overrideKey] = overrideValue;\n }\n};\nconst overrideConfigProperties = (baseObject, overrideObject) => {\n if (overrideObject) {\n for (const key in overrideObject) {\n overrideProperty(baseObject, key, overrideObject[key]);\n }\n }\n};\nconst mergeConfigProperties = (baseObject, mergeObject) => {\n if (mergeObject) {\n for (const key in mergeObject) {\n mergeArrayProperties(baseObject, mergeObject, key);\n }\n }\n};\nconst mergeArrayProperties = (baseObject, mergeObject, key) => {\n const mergeValue = mergeObject[key];\n if (mergeValue !== undefined) {\n baseObject[key] = baseObject[key] ? baseObject[key].concat(mergeValue) : mergeValue;\n }\n};\nconst extendTailwindMerge = (configExtension, ...createConfig) => typeof configExtension === 'function' ? createTailwindMerge(getDefaultConfig, configExtension, ...createConfig) : createTailwindMerge(() => mergeConfigs(getDefaultConfig(), configExtension), ...createConfig);\nconst twMerge = /*#__PURE__*/createTailwindMerge(getDefaultConfig);\nexport { createTailwindMerge, extendTailwindMerge, fromTheme, getDefaultConfig, mergeConfigs, twJoin, twMerge, validators };\n//# sourceMappingURL=bundle-mjs.mjs.map\n","import { type ClassValue, clsx } from 'clsx';\nimport { twMerge } from 'tailwind-merge';\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","import * as React from 'react';\n\nimport { cn } from '@/lib/utils';\n\nconst Input = React.forwardRef>(\n ({ className, type, ...props }, ref) => {\n return (\n \n );\n }\n);\nInput.displayName = 'Input';\n\nexport { Input };\n","// packages/react/compose-refs/src/compose-refs.tsx\nimport * as React from \"react\";\nfunction setRef(ref, value) {\n if (typeof ref === \"function\") {\n return ref(value);\n } else if (ref !== null && ref !== void 0) {\n ref.current = value;\n }\n}\nfunction composeRefs(...refs) {\n return (node) => {\n let hasCleanup = false;\n const cleanups = refs.map((ref) => {\n const cleanup = setRef(ref, node);\n if (!hasCleanup && typeof cleanup == \"function\") {\n hasCleanup = true;\n }\n return cleanup;\n });\n if (hasCleanup) {\n return () => {\n for (let i = 0; i < cleanups.length; i++) {\n const cleanup = cleanups[i];\n if (typeof cleanup == \"function\") {\n cleanup();\n } else {\n setRef(refs[i], null);\n }\n }\n };\n }\n };\n}\nfunction useComposedRefs(...refs) {\n return React.useCallback(composeRefs(...refs), refs);\n}\nexport {\n composeRefs,\n useComposedRefs\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\nvar REACT_LAZY_TYPE = Symbol.for(\"react.lazy\");\nvar use = React[\" use \".trim().toString()];\nfunction isPromiseLike(value) {\n return typeof value === \"object\" && value !== null && \"then\" in value;\n}\nfunction isLazyComponent(element) {\n return element != null && typeof element === \"object\" && \"$$typeof\" in element && element.$$typeof === REACT_LAZY_TYPE && \"_payload\" in element && isPromiseLike(element._payload);\n}\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n let { children, ...slotProps } = props;\n if (isLazyComponent(children) && typeof use === \"function\") {\n children = use(children._payload);\n }\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","/**\n * Copyright 2022 Joe Bell. All rights reserved.\n *\n * This file is licensed to you under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with the\n * License. You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n * WARRANTIES OR REPRESENTATIONS OF ANY KIND, either express or implied. See the\n * License for the specific language governing permissions and limitations under\n * the License.\n */ import { clsx } from \"clsx\";\nconst falsyToString = (value)=>typeof value === \"boolean\" ? `${value}` : value === 0 ? \"0\" : value;\nexport const cx = clsx;\nexport const cva = (base, config)=>(props)=>{\n var _config_compoundVariants;\n if ((config === null || config === void 0 ? void 0 : config.variants) == null) return cx(base, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n const { variants, defaultVariants } = config;\n const getVariantClassNames = Object.keys(variants).map((variant)=>{\n const variantProp = props === null || props === void 0 ? void 0 : props[variant];\n const defaultVariantProp = defaultVariants === null || defaultVariants === void 0 ? void 0 : defaultVariants[variant];\n if (variantProp === null) return null;\n const variantKey = falsyToString(variantProp) || falsyToString(defaultVariantProp);\n return variants[variant][variantKey];\n });\n const propsWithoutUndefined = props && Object.entries(props).reduce((acc, param)=>{\n let [key, value] = param;\n if (value === undefined) {\n return acc;\n }\n acc[key] = value;\n return acc;\n }, {});\n const getCompoundVariantClassNames = config === null || config === void 0 ? void 0 : (_config_compoundVariants = config.compoundVariants) === null || _config_compoundVariants === void 0 ? void 0 : _config_compoundVariants.reduce((acc, param)=>{\n let { class: cvClass, className: cvClassName, ...compoundVariantOptions } = param;\n return Object.entries(compoundVariantOptions).every((param)=>{\n let [key, value] = param;\n return Array.isArray(value) ? value.includes({\n ...defaultVariants,\n ...propsWithoutUndefined\n }[key]) : ({\n ...defaultVariants,\n ...propsWithoutUndefined\n })[key] === value;\n }) ? [\n ...acc,\n cvClass,\n cvClassName\n ] : acc;\n }, []);\n return cx(base, getVariantClassNames, getCompoundVariantClassNames, props === null || props === void 0 ? void 0 : props.class, props === null || props === void 0 ? void 0 : props.className);\n };\n\n","import * as React from 'react';\nimport { Slot } from '@radix-ui/react-slot';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst buttonVariants = cva(\n 'inline-flex items-center justify-center whitespace-nowrap rounded-md text-sm font-medium ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50',\n {\n variants: {\n variant: {\n default: 'bg-primary text-primary-foreground hover:bg-primary/90',\n destructive: 'bg-destructive text-destructive-foreground hover:bg-destructive/90',\n outline: 'border border-input bg-background hover:bg-accent hover:text-accent-foreground',\n secondary: 'bg-secondary text-secondary-foreground hover:bg-secondary/80',\n ghost: 'hover:bg-accent hover:text-accent-foreground',\n link: 'text-primary underline-offset-4 hover:underline',\n },\n size: {\n default: 'h-10 px-4 py-2',\n sm: 'h-9 rounded-md px-3',\n lg: 'h-11 rounded-md px-8',\n icon: 'h-10 w-10',\n },\n },\n defaultVariants: {\n variant: 'default',\n size: 'default',\n },\n }\n);\n\nexport interface ButtonProps\n extends React.ButtonHTMLAttributes, VariantProps {\n asChild?: boolean;\n}\n\nconst Button = React.forwardRef(\n ({ className, variant, size, asChild = false, ...props }, ref) => {\n const Comp = asChild ? Slot : 'button';\n return (\n \n );\n }\n);\nButton.displayName = 'Button';\n\nexport { Button, buttonVariants };\n","import { useState } from 'react';\nimport type { Contact, Channel, Conversation, Favorite } from '../types';\nimport { getStateKey, type ConversationTimes } from '../utils/conversationState';\nimport { getContactDisplayName } from '../utils/pubkey';\nimport { ContactAvatar } from './ContactAvatar';\nimport { CONTACT_TYPE_REPEATER } from '../utils/contactAvatar';\nimport { isFavorite } from '../utils/favorites';\nimport { UNREAD_FETCH_LIMIT } from '../api';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { cn } from '@/lib/utils';\n\ntype SortOrder = 'alpha' | 'recent';\n\ninterface SidebarProps {\n contacts: Contact[];\n channels: Channel[];\n activeConversation: Conversation | null;\n onSelectConversation: (conversation: Conversation) => void;\n onNewMessage: () => void;\n lastMessageTimes: ConversationTimes;\n unreadCounts: Record;\n /** Tracks which conversations have unread messages that mention the user */\n mentions: Record;\n showCracker: boolean;\n crackerRunning: boolean;\n onToggleCracker: () => void;\n onMarkAllRead: () => void;\n favorites: Favorite[];\n /** Sort order from server settings */\n sortOrder?: SortOrder;\n /** Callback when sort order changes */\n onSortOrderChange?: (order: SortOrder) => void;\n}\n\n/** Format unread count, showing \"X+\" if at the fetch limit (indicating there may be more) */\nfunction formatUnreadCount(count: number): string {\n return count >= UNREAD_FETCH_LIMIT ? `${count}+` : `${count}`;\n}\n\nexport function Sidebar({\n contacts,\n channels,\n activeConversation,\n onSelectConversation,\n onNewMessage,\n lastMessageTimes,\n unreadCounts,\n mentions,\n showCracker,\n crackerRunning,\n onToggleCracker,\n onMarkAllRead,\n favorites,\n sortOrder: sortOrderProp = 'recent',\n onSortOrderChange,\n}: SidebarProps) {\n const sortOrder = sortOrderProp;\n const [searchQuery, setSearchQuery] = useState('');\n\n const handleSortToggle = () => {\n const newOrder = sortOrder === 'alpha' ? 'recent' : 'alpha';\n onSortOrderChange?.(newOrder);\n };\n\n const handleSelectConversation = (conversation: Conversation) => {\n setSearchQuery('');\n onSelectConversation(conversation);\n };\n\n const isActive = (type: 'contact' | 'channel' | 'raw' | 'map' | 'visualizer', id: string) =>\n activeConversation?.type === type && activeConversation?.id === id;\n\n // Get unread count for a conversation\n const getUnreadCount = (type: 'channel' | 'contact', id: string): number => {\n const key = getStateKey(type, id);\n return unreadCounts[key] || 0;\n };\n\n // Check if a conversation has a mention\n const hasMention = (type: 'channel' | 'contact', id: string): boolean => {\n const key = getStateKey(type, id);\n return mentions[key] || false;\n };\n\n const getLastMessageTime = (type: 'channel' | 'contact', id: string) => {\n const key = getStateKey(type, id);\n return lastMessageTimes[key] || 0;\n };\n\n // Deduplicate channels by name, keeping the first (lowest index)\n const uniqueChannels = channels.reduce((acc, channel) => {\n if (!acc.some((c) => c.name === channel.name)) {\n acc.push(channel);\n }\n return acc;\n }, []);\n\n // Deduplicate contacts by public key, preferring ones with names\n // Also filter out any contacts with empty public keys\n const uniqueContacts = contacts\n .filter((c) => c.public_key && c.public_key.length > 0)\n .sort((a, b) => {\n // Sort contacts with names first\n if (a.name && !b.name) return -1;\n if (!a.name && b.name) return 1;\n return (a.name || '').localeCompare(b.name || '');\n })\n .reduce((acc, contact) => {\n if (!acc.some((c) => c.public_key === contact.public_key)) {\n acc.push(contact);\n }\n return acc;\n }, []);\n\n // Sort channels based on sort order, with Public always first\n const sortedChannels = [...uniqueChannels].sort((a, b) => {\n // Public channel always sorts to the top\n if (a.name === 'Public') return -1;\n if (b.name === 'Public') return 1;\n\n if (sortOrder === 'recent') {\n const timeA = getLastMessageTime('channel', a.key);\n const timeB = getLastMessageTime('channel', b.key);\n // If both have messages, sort by most recent first\n if (timeA && timeB) return timeB - timeA;\n // Items with messages come before items without\n if (timeA && !timeB) return -1;\n if (!timeA && timeB) return 1;\n // Fall back to alpha for items without messages\n }\n return a.name.localeCompare(b.name);\n });\n\n // Sort contacts: non-repeaters first (by recent or alpha), then repeaters (always alpha)\n const sortedContacts = [...uniqueContacts].sort((a, b) => {\n const aIsRepeater = a.type === CONTACT_TYPE_REPEATER;\n const bIsRepeater = b.type === CONTACT_TYPE_REPEATER;\n\n // Repeaters always go to the bottom\n if (aIsRepeater && !bIsRepeater) return 1;\n if (!aIsRepeater && bIsRepeater) return -1;\n\n // Both repeaters: always sort alphabetically\n if (aIsRepeater && bIsRepeater) {\n return (a.name || a.public_key).localeCompare(b.name || b.public_key);\n }\n\n // Both non-repeaters: use selected sort order\n if (sortOrder === 'recent') {\n const timeA = getLastMessageTime('contact', a.public_key);\n const timeB = getLastMessageTime('contact', b.public_key);\n // If both have messages, sort by most recent first\n if (timeA && timeB) return timeB - timeA;\n // Items with messages come before items without\n if (timeA && !timeB) return -1;\n if (!timeA && timeB) return 1;\n // Fall back to alpha for items without messages\n }\n return (a.name || a.public_key).localeCompare(b.name || b.public_key);\n });\n\n // Filter by search query\n const query = searchQuery.toLowerCase().trim();\n const filteredChannels = query\n ? sortedChannels.filter(\n (c) => c.name.toLowerCase().includes(query) || c.key.toLowerCase().includes(query)\n )\n : sortedChannels;\n const filteredContacts = query\n ? sortedContacts.filter(\n (c) => c.name?.toLowerCase().includes(query) || c.public_key.toLowerCase().includes(query)\n )\n : sortedContacts;\n\n // Separate favorites from regular items\n const favoriteChannels = filteredChannels.filter((c) => isFavorite(favorites, 'channel', c.key));\n const favoriteContacts = filteredContacts.filter((c) =>\n isFavorite(favorites, 'contact', c.public_key)\n );\n const nonFavoriteChannels = filteredChannels.filter(\n (c) => !isFavorite(favorites, 'channel', c.key)\n );\n const nonFavoriteContacts = filteredContacts.filter(\n (c) => !isFavorite(favorites, 'contact', c.public_key)\n );\n\n // Combine and sort favorites by most recent message (always recent order)\n type FavoriteItem = { type: 'channel'; channel: Channel } | { type: 'contact'; contact: Contact };\n\n const favoriteItems: FavoriteItem[] = [\n ...favoriteChannels.map((channel) => ({ type: 'channel' as const, channel })),\n ...favoriteContacts.map((contact) => ({ type: 'contact' as const, contact })),\n ].sort((a, b) => {\n const timeA =\n a.type === 'channel'\n ? getLastMessageTime('channel', a.channel.key)\n : getLastMessageTime('contact', a.contact.public_key);\n const timeB =\n b.type === 'channel'\n ? getLastMessageTime('channel', b.channel.key)\n : getLastMessageTime('contact', b.contact.public_key);\n // Sort by most recent first\n if (timeA && timeB) return timeB - timeA;\n if (timeA && !timeB) return -1;\n if (!timeA && timeB) return 1;\n // Fall back to name comparison\n const nameA = a.type === 'channel' ? a.channel.name : a.contact.name || a.contact.public_key;\n const nameB = b.type === 'channel' ? b.channel.name : b.contact.name || b.contact.public_key;\n return nameA.localeCompare(nameB);\n });\n\n return (\n
\n {/* Header */}\n
\n

Conversations

\n \n +\n \n
\n\n {/* Search */}\n
\n setSearchQuery(e.target.value)}\n className=\"h-8 text-sm pr-8\"\n />\n {searchQuery && (\n setSearchQuery('')}\n title=\"Clear search\"\n >\n ×\n \n )}\n
\n\n {/* List */}\n
\n {/* Raw Packet Feed */}\n {!query && (\n \n handleSelectConversation({\n type: 'raw',\n id: 'raw',\n name: 'Raw Packet Feed',\n })\n }\n >\n 📡\n Packet Feed\n
\n )}\n\n {/* Node Map */}\n {!query && (\n \n handleSelectConversation({\n type: 'map',\n id: 'map',\n name: 'Node Map',\n })\n }\n >\n 🗺️\n Node Map\n
\n )}\n\n {/* Mesh Visualizer */}\n {!query && (\n \n handleSelectConversation({\n type: 'visualizer',\n id: 'visualizer',\n name: 'Mesh Visualizer',\n })\n }\n >\n \n Mesh Visualizer\n \n )}\n\n {/* Cracker Toggle */}\n {!query && (\n \n 🔓\n \n {showCracker ? 'Hide' : 'Show'} Room Finder\n \n ({crackerRunning ? 'running' : 'stopped'})\n \n \n \n )}\n\n {/* Mark All Read */}\n {!query && Object.keys(unreadCounts).length > 0 && (\n \n \n Mark all as read\n \n )}\n\n {/* Favorites */}\n {favoriteItems.length > 0 && (\n <>\n
\n Favorites\n
\n {favoriteItems.map((item) => {\n if (item.type === 'channel') {\n const channel = item.channel;\n const unreadCount = getUnreadCount('channel', channel.key);\n const isMention = hasMention('channel', channel.key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'channel',\n id: channel.key,\n name: channel.name,\n })\n }\n >\n {channel.name}\n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n } else {\n const contact = item.contact;\n const unreadCount = getUnreadCount('contact', contact.public_key);\n const isMention = hasMention('contact', contact.public_key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n })\n }\n >\n \n \n {getContactDisplayName(contact.name, contact.public_key)}\n \n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n }\n })}\n \n )}\n\n {/* Channels */}\n {nonFavoriteChannels.length > 0 && (\n <>\n
\n Channels\n \n {sortOrder === 'alpha' ? 'A-Z' : '⏱'}\n \n
\n {nonFavoriteChannels.map((channel) => {\n const unreadCount = getUnreadCount('channel', channel.key);\n const isMention = hasMention('channel', channel.key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'channel',\n id: channel.key,\n name: channel.name,\n })\n }\n >\n {channel.name}\n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n })}\n \n )}\n\n {/* Contacts */}\n {nonFavoriteContacts.length > 0 && (\n <>\n
\n Contacts\n {nonFavoriteChannels.length === 0 && (\n \n {sortOrder === 'alpha' ? 'A-Z' : '⏱'}\n \n )}\n
\n {nonFavoriteContacts.map((contact) => {\n const unreadCount = getUnreadCount('contact', contact.public_key);\n const isMention = hasMention('contact', contact.public_key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n })\n }\n >\n \n \n {getContactDisplayName(contact.name, contact.public_key)}\n \n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n })}\n \n )}\n\n {/* Empty state */}\n {nonFavoriteContacts.length === 0 &&\n nonFavoriteChannels.length === 0 &&\n favoriteItems.length === 0 && (\n
\n {query ? 'No matches found' : 'No conversations yet'}\n
\n )}\n \n \n );\n}\n","/**\n * Parse sender from channel message text.\n * Channel messages have format \"sender: message\".\n */\nexport function parseSenderFromText(text: string): { sender: string | null; content: string } {\n const colonIndex = text.indexOf(': ');\n if (colonIndex > 0 && colonIndex < 50) {\n const potentialSender = text.substring(0, colonIndex);\n // Check for colon in potential sender (would indicate it's not a simple name)\n if (!potentialSender.includes(':')) {\n return {\n sender: potentialSender,\n content: text.substring(colonIndex + 2),\n };\n }\n }\n return { sender: null, content: text };\n}\n\n/**\n * Format a Unix timestamp to a time string.\n * Shows date for messages not from today.\n */\nexport function formatTime(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n const now = new Date();\n const isToday = date.toDateString() === now.toDateString();\n\n const time = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n\n if (isToday) {\n return time;\n }\n\n // Show short date for older messages\n const dateStr = date.toLocaleDateString([], { month: 'short', day: 'numeric' });\n return `${dateStr} ${time}`;\n}\n","import type { Contact, RadioConfig, MessagePath } from '../types';\nimport { CONTACT_TYPE_REPEATER } from '../types';\n\nexport interface PathHop {\n prefix: string; // 2-char hex prefix (e.g., \"1A\")\n matches: Contact[]; // Matched repeaters (empty=unknown, multiple=ambiguous)\n distanceFromPrev: number | null; // km from previous hop\n}\n\nexport interface ResolvedPath {\n sender: { name: string; prefix: string; lat: number | null; lon: number | null };\n hops: PathHop[];\n receiver: {\n name: string;\n prefix: string;\n lat: number | null;\n lon: number | null;\n publicKey: string | null;\n };\n totalDistances: number[] | null; // Single-element array with sum of unambiguous distances\n /** True if path has any gaps (unknown, ambiguous, or missing location hops) */\n hasGaps: boolean;\n}\n\nexport interface SenderInfo {\n name: string;\n publicKeyOrPrefix: string;\n lat: number | null;\n lon: number | null;\n}\n\n/**\n * Split hex string into 2-char hops\n */\nexport function parsePathHops(path: string | null | undefined): string[] {\n if (!path || path.length === 0) {\n return [];\n }\n\n const normalized = path.toUpperCase();\n const hops: string[] = [];\n\n for (let i = 0; i < normalized.length; i += 2) {\n if (i + 1 < normalized.length) {\n hops.push(normalized.slice(i, i + 2));\n }\n }\n\n return hops;\n}\n\n/**\n * Find contacts matching first 2 chars of public key (repeaters only for intermediate hops)\n */\nexport function findContactsByPrefix(\n prefix: string,\n contacts: Contact[],\n repeatersOnly: boolean = true\n): Contact[] {\n const normalizedPrefix = prefix.toUpperCase();\n return contacts.filter((c) => {\n if (repeatersOnly && c.type !== CONTACT_TYPE_REPEATER) {\n return false;\n }\n return c.public_key.toUpperCase().startsWith(normalizedPrefix);\n });\n}\n\n/**\n * Calculate distance between two points using Haversine formula\n * @returns Distance in km, or null if coordinates are missing\n */\nexport function calculateDistance(\n lat1: number | null,\n lon1: number | null,\n lat2: number | null,\n lon2: number | null\n): number | null {\n if (lat1 === null || lon1 === null || lat2 === null || lon2 === null) {\n return null;\n }\n\n const R = 6371; // Earth's radius in km\n const dLat = toRad(lat2 - lat1);\n const dLon = toRad(lon2 - lon1);\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n}\n\nfunction toRad(deg: number): number {\n return (deg * Math.PI) / 180;\n}\n\n/**\n * Check if coordinates represent a valid location\n * Returns false for null or (0, 0) which indicates unset location\n */\nexport function isValidLocation(lat: number | null, lon: number | null): boolean {\n if (lat === null || lon === null) {\n return false;\n }\n // (0, 0) is in the Atlantic Ocean - treat as unset\n if (lat === 0 && lon === 0) {\n return false;\n }\n return true;\n}\n\n/**\n * Format distance in human-readable form (m or km)\n */\nexport function formatDistance(km: number): string {\n if (km < 1) {\n return `${Math.round(km * 1000)}m`;\n }\n return `${km.toFixed(1)}km`;\n}\n\n/**\n * Sort contacts by distance from a reference point\n * Contacts without location are placed at the end\n */\nexport function sortContactsByDistance(\n contacts: Contact[],\n fromLat: number | null,\n fromLon: number | null\n): Contact[] {\n if (fromLat === null || fromLon === null) {\n return contacts;\n }\n\n return [...contacts].sort((a, b) => {\n const distA = calculateDistance(fromLat, fromLon, a.lat, a.lon);\n const distB = calculateDistance(fromLat, fromLon, b.lat, b.lon);\n\n // Null distances go to the end\n if (distA === null && distB === null) return 0;\n if (distA === null) return 1;\n if (distB === null) return -1;\n\n return distA - distB;\n });\n}\n\n/**\n * Get simple hop count from path string\n */\nexport function getHopCount(path: string | null | undefined): number {\n if (!path || path.length === 0) {\n return 0;\n }\n return Math.floor(path.length / 2);\n}\n\n/**\n * Format hop counts from multiple paths for display.\n * Returns something like \"d/1/3/3\" for direct, 1-hop, 3-hop, 3-hop paths.\n * Returns null if no paths or only direct.\n */\nexport function formatHopCounts(paths: MessagePath[] | null | undefined): {\n display: string;\n allDirect: boolean;\n hasMultiple: boolean;\n} {\n if (!paths || paths.length === 0) {\n return { display: '', allDirect: true, hasMultiple: false };\n }\n\n // Get hop counts for all paths and sort ascending\n const hopCounts = paths.map((p) => getHopCount(p.path)).sort((a, b) => a - b);\n\n const allDirect = hopCounts.every((h) => h === 0);\n const hasMultiple = paths.length > 1;\n\n // Format: \"d\" for 0, numbers for others\n const parts = hopCounts.map((h) => (h === 0 ? 'd' : h.toString()));\n const display = parts.join('/');\n\n return { display, allDirect, hasMultiple };\n}\n\n/**\n * Build complete path resolution with sender, hops, and receiver\n */\nexport function resolvePath(\n path: string | null | undefined,\n sender: SenderInfo,\n contacts: Contact[],\n config: RadioConfig | null\n): ResolvedPath {\n const hopPrefixes = parsePathHops(path);\n\n // Build sender info\n const senderPrefix = sender.publicKeyOrPrefix.toUpperCase().slice(0, 2);\n const resolvedSender = {\n name: sender.name,\n prefix: senderPrefix,\n lat: sender.lat,\n lon: sender.lon,\n };\n\n // Build receiver info from radio config\n const receiverPrefix = config?.public_key?.toUpperCase().slice(0, 2) || '??';\n const resolvedReceiver = {\n name: config?.name || 'Unknown',\n prefix: receiverPrefix,\n lat: config?.lat ?? null,\n lon: config?.lon ?? null,\n publicKey: config?.public_key ?? null,\n };\n\n // Build hops\n const hops: PathHop[] = [];\n let prevLat = sender.lat;\n let prevLon = sender.lon;\n // Start uncertain if sender has no valid location\n let prevHopUncertain = !isValidLocation(sender.lat, sender.lon);\n\n for (const prefix of hopPrefixes) {\n const matches = findContactsByPrefix(prefix, contacts, true);\n const sortedMatches = sortContactsByDistance(matches, prevLat, prevLon);\n\n // Calculate distance from previous hop\n // Can't calculate if previous hop was uncertain (unknown/ambiguous/no location) or current hop is unknown/invalid\n let distanceFromPrev: number | null = null;\n const currentHasValidLocation =\n sortedMatches.length === 1 && isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon);\n if (!prevHopUncertain && currentHasValidLocation) {\n distanceFromPrev = calculateDistance(\n prevLat,\n prevLon,\n sortedMatches[0].lat,\n sortedMatches[0].lon\n );\n }\n\n hops.push({\n prefix,\n matches: sortedMatches,\n distanceFromPrev,\n });\n\n // Update previous location for next hop\n if (sortedMatches.length === 0) {\n // Unknown hop - can't calculate distance for next hop\n prevHopUncertain = true;\n prevLat = null;\n prevLon = null;\n } else if (sortedMatches.length > 1) {\n // Ambiguous hop - can't calculate distance for next hop (too many combinations)\n prevHopUncertain = true;\n // Use first match's location for sorting purposes, but distance won't be shown\n if (isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon)) {\n prevLat = sortedMatches[0].lat;\n prevLon = sortedMatches[0].lon;\n } else {\n prevLat = null;\n prevLon = null;\n }\n } else if (isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon)) {\n prevHopUncertain = false;\n prevLat = sortedMatches[0].lat;\n prevLon = sortedMatches[0].lon;\n } else {\n // Known hop but no valid location - treat as uncertain for distance purposes\n prevHopUncertain = true;\n prevLat = null;\n prevLon = null;\n }\n }\n\n // Calculate total distances (can be multiple if ambiguous)\n const totalDistances = calculateTotalDistances(resolvedSender, hops, resolvedReceiver);\n\n // Determine if path has any gaps (unknown, ambiguous, or missing location)\n const hasGaps =\n !isValidLocation(resolvedSender.lat, resolvedSender.lon) ||\n !isValidLocation(resolvedReceiver.lat, resolvedReceiver.lon) ||\n hops.some(\n (hop) => hop.matches.length !== 1 || !isValidLocation(hop.matches[0].lat, hop.matches[0].lon)\n );\n\n return {\n sender: resolvedSender,\n hops,\n receiver: resolvedReceiver,\n totalDistances,\n hasGaps,\n };\n}\n\n/**\n * Calculate total distance(s) for the path\n * Returns array for ambiguous paths, null if any segment can't be calculated\n * If sender has no location, starts calculating from first hop with location\n */\nfunction calculateTotalDistances(\n sender: { lat: number | null; lon: number | null },\n hops: PathHop[],\n receiver: { lat: number | null; lon: number | null }\n): number[] | null {\n // Simple case: no hops\n if (hops.length === 0) {\n if (!isValidLocation(sender.lat, sender.lon) || !isValidLocation(receiver.lat, receiver.lon)) {\n return null;\n }\n const dist = calculateDistance(sender.lat, sender.lon, receiver.lat, receiver.lon);\n return dist !== null ? [dist] : null;\n }\n\n // Start from sender if it has valid location, otherwise find first hop with valid location\n let prevLat = sender.lat;\n let prevLon = sender.lon;\n let startHopIndex = 0;\n\n if (!isValidLocation(prevLat, prevLon)) {\n // Find first hop with a known, unambiguous, valid location\n for (let i = 0; i < hops.length; i++) {\n const hop = hops[i];\n if (hop.matches.length === 1 && isValidLocation(hop.matches[0].lat, hop.matches[0].lon)) {\n prevLat = hop.matches[0].lat;\n prevLon = hop.matches[0].lon;\n startHopIndex = i + 1;\n break;\n }\n }\n // If no hop has valid location, can't calculate\n if (!isValidLocation(prevLat, prevLon)) {\n return null;\n }\n }\n\n // Sum up only unambiguous segments (where both endpoints are known and unambiguous)\n let totalDistance = 0;\n let hasAnyDistance = false;\n let lastUnambiguousHopIndex = -1; // Track last unambiguous hop for receiver distance\n\n for (let i = startHopIndex; i < hops.length; i++) {\n const hop = hops[i];\n\n // Skip if hop is unknown or ambiguous or has no valid location\n if (hop.matches.length !== 1 || !isValidLocation(hop.matches[0].lat, hop.matches[0].lon)) {\n // Can't include this segment - reset prevLat/prevLon for next potential segment\n prevLat = null;\n prevLon = null;\n continue;\n }\n\n // Only calculate distance if previous location is known (unambiguous)\n if (prevLat !== null && prevLon !== null) {\n const dist = calculateDistance(prevLat, prevLon, hop.matches[0].lat, hop.matches[0].lon);\n if (dist !== null) {\n totalDistance += dist;\n hasAnyDistance = true;\n }\n }\n\n // Update for next iteration\n prevLat = hop.matches[0].lat;\n prevLon = hop.matches[0].lon;\n lastUnambiguousHopIndex = i;\n }\n\n // Add final leg to receiver only if last hop was unambiguous and receiver has valid location\n if (lastUnambiguousHopIndex === hops.length - 1 && prevLat !== null && prevLon !== null) {\n if (isValidLocation(receiver.lat, receiver.lon)) {\n const finalDist = calculateDistance(prevLat, prevLon, receiver.lat, receiver.lon);\n if (finalDist !== null) {\n totalDistance += finalDist;\n hasAnyDistance = true;\n }\n }\n }\n\n // Return total if we calculated any distance\n return hasAnyDistance ? [totalDistance] : null;\n}\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return
...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes) => (\n
\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes) => (\n \n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import type { Conversation } from '../types';\n\nexport interface ParsedHashConversation {\n type: 'channel' | 'contact' | 'raw' | 'map' | 'visualizer';\n name: string;\n /** For map view: public key prefix to focus on */\n mapFocusKey?: string;\n}\n\n// Parse URL hash to get conversation (e.g., #channel/Public or #contact/JohnDoe or #raw or #map/focus/ABCD1234)\nexport function parseHashConversation(): ParsedHashConversation | null {\n const hash = window.location.hash.slice(1); // Remove leading #\n if (!hash) return null;\n\n if (hash === 'raw') {\n return { type: 'raw', name: 'raw' };\n }\n\n if (hash === 'map') {\n return { type: 'map', name: 'map' };\n }\n\n if (hash === 'visualizer') {\n return { type: 'visualizer', name: 'visualizer' };\n }\n\n // Check for map with focus: #map/focus/{pubkey_prefix}\n if (hash.startsWith('map/focus/')) {\n const focusKey = hash.slice('map/focus/'.length);\n if (focusKey) {\n return { type: 'map', name: 'map', mapFocusKey: decodeURIComponent(focusKey) };\n }\n return { type: 'map', name: 'map' };\n }\n\n const slashIndex = hash.indexOf('/');\n if (slashIndex === -1) return null;\n\n const type = hash.slice(0, slashIndex);\n const name = decodeURIComponent(hash.slice(slashIndex + 1));\n\n if ((type === 'channel' || type === 'contact') && name) {\n return { type, name };\n }\n return null;\n}\n\n/**\n * Generate a URL hash for focusing on a contact in the map view\n * @param publicKeyPrefix - The public key or prefix to focus on\n */\nexport function getMapFocusHash(publicKeyPrefix: string): string {\n return `#map/focus/${encodeURIComponent(publicKeyPrefix)}`;\n}\n\n// Generate URL hash from conversation\nexport function getConversationHash(conv: Conversation | null): string {\n if (!conv) return '';\n if (conv.type === 'raw') return '#raw';\n if (conv.type === 'map') return '#map';\n if (conv.type === 'visualizer') return '#visualizer';\n // Strip leading # from channel names for cleaner URLs\n const name =\n conv.type === 'channel' && conv.name.startsWith('#') ? conv.name.slice(1) : conv.name;\n return `#${conv.type}/${encodeURIComponent(name)}`;\n}\n\n// Update URL hash without adding to history\nexport function updateUrlHash(conv: Conversation | null): void {\n const newHash = getConversationHash(conv);\n if (newHash !== window.location.hash) {\n window.history.replaceState(null, '', newHash || window.location.pathname);\n }\n}\n","import type { Contact, RadioConfig, MessagePath } from '../types';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from './ui/dialog';\nimport { Button } from './ui/button';\nimport {\n resolvePath,\n calculateDistance,\n isValidLocation,\n formatDistance,\n type SenderInfo,\n type ResolvedPath,\n type PathHop,\n} from '../utils/pathUtils';\nimport { formatTime } from '../utils/messageParser';\nimport { getMapFocusHash } from '../utils/urlHash';\n\ninterface PathModalProps {\n open: boolean;\n onClose: () => void;\n paths: MessagePath[];\n senderInfo: SenderInfo;\n contacts: Contact[];\n config: RadioConfig | null;\n}\n\nexport function PathModal({ open, onClose, paths, senderInfo, contacts, config }: PathModalProps) {\n // Resolve all paths\n const resolvedPaths = paths.map((p) => ({\n ...p,\n resolved: resolvePath(p.path, senderInfo, contacts, config),\n }));\n\n const hasSinglePath = paths.length === 1;\n\n return (\n !isOpen && onClose()}>\n \n \n Message Path{!hasSinglePath && `s (${paths.length})`}\n \n {hasSinglePath ? (\n <>\n This shows one route that this message traveled through the mesh network.\n Routers may be incorrectly identified due to prefix collisions between heard and\n non-heard router advertisements.\n \n ) : (\n <>\n This message was received via {paths.length} different routes.\n Routers may be incorrectly identified due to prefix collisions.\n \n )}\n \n \n\n
\n {resolvedPaths.map((pathData, index) => (\n
\n {!hasSinglePath && (\n
\n Path {index + 1} — received {formatTime(pathData.received_at)}\n
\n )}\n \n
\n ))}\n\n {/* Straight-line distance shown once for multi-path (same for all routes) */}\n {!hasSinglePath &&\n resolvedPaths.length > 0 &&\n (() => {\n const first = resolvedPaths[0].resolved;\n if (\n isValidLocation(first.sender.lat, first.sender.lon) &&\n isValidLocation(first.receiver.lat, first.receiver.lon)\n ) {\n return (\n
\n Straight-line distance: \n \n {formatDistance(\n calculateDistance(\n first.sender.lat,\n first.sender.lon,\n first.receiver.lat,\n first.receiver.lon\n )!\n )}\n \n
\n );\n }\n return null;\n })()}\n
\n\n \n \n \n
\n
\n );\n}\n\ninterface PathVisualizationProps {\n resolved: ResolvedPath;\n senderInfo: SenderInfo;\n /** If true, hide the straight-line distance (shown once at container level for multi-path) */\n hideStraightLine?: boolean;\n}\n\nfunction PathVisualization({ resolved, senderInfo, hideStraightLine }: PathVisualizationProps) {\n // Track previous location for each hop to calculate distances\n // Returns null if previous hop was ambiguous or has invalid location\n const getPrevLocation = (hopIndex: number): { lat: number | null; lon: number | null } | null => {\n if (hopIndex === 0) {\n // Check if sender has valid location\n if (!isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n return null;\n }\n return { lat: resolved.sender.lat, lon: resolved.sender.lon };\n }\n const prevHop = resolved.hops[hopIndex - 1];\n // If previous hop was ambiguous, we can't show meaningful distances\n if (prevHop.matches.length > 1) {\n return null;\n }\n // If previous hop was unknown, we also can't calculate\n if (prevHop.matches.length === 0) {\n return null;\n }\n // Check if previous hop has valid location\n if (isValidLocation(prevHop.matches[0].lat, prevHop.matches[0].lon)) {\n return { lat: prevHop.matches[0].lat, lon: prevHop.matches[0].lon };\n }\n return null;\n };\n\n return (\n
\n {/* Sender */}\n \n\n {/* Hops */}\n {resolved.hops.map((hop, index) => (\n \n ))}\n\n {/* Receiver */}\n \n\n {/* Total distance */}\n {resolved.totalDistances && resolved.totalDistances.length > 0 && (\n
\n \n Presumed unambiguous distance covered:{' '}\n \n \n {resolved.hasGaps ? '>' : ''}\n {formatDistance(resolved.totalDistances[0])}\n \n
\n )}\n\n {/* Straight-line distance (when both sender and receiver have coordinates) */}\n {!hideStraightLine &&\n isValidLocation(resolved.sender.lat, resolved.sender.lon) &&\n isValidLocation(resolved.receiver.lat, resolved.receiver.lon) && (\n 0\n ? 'pt-1'\n : 'pt-3 mt-3 border-t border-border'\n }\n >\n Straight-line distance: \n \n {formatDistance(\n calculateDistance(\n resolved.sender.lat,\n resolved.sender.lon,\n resolved.receiver.lat,\n resolved.receiver.lon\n )!\n )}\n \n
\n )}\n
\n );\n}\n\ninterface PathNodeProps {\n label: string;\n name: string;\n prefix: string;\n distance: number | null;\n isFirst?: boolean;\n isLast?: boolean;\n /** Optional coordinates for map link */\n lat?: number | null;\n lon?: number | null;\n /** Public key for map focus link (required if lat/lon provided) */\n publicKey?: string;\n}\n\nfunction PathNode({\n label,\n name,\n prefix,\n distance,\n isFirst,\n isLast,\n lat,\n lon,\n publicKey,\n}: PathNodeProps) {\n const hasLocation = isValidLocation(lat ?? null, lon ?? null) && publicKey;\n\n return (\n
\n {/* Vertical line and dot column */}\n
\n {!isFirst &&
}\n
\n {!isLast &&
}\n
\n\n {/* Content */}\n
\n
{label}
\n
\n {name} ({prefix})\n {distance !== null && (\n - {formatDistance(distance)}\n )}\n {hasLocation && }\n
\n
\n
\n );\n}\n\ninterface HopNodeProps {\n hop: PathHop;\n hopNumber: number;\n prevLocation: { lat: number | null; lon: number | null } | null;\n}\n\nfunction HopNode({ hop, hopNumber, prevLocation }: HopNodeProps) {\n const isAmbiguous = hop.matches.length > 1;\n const isUnknown = hop.matches.length === 0;\n\n // Calculate distance from previous location for a contact\n // Returns null if prev location unknown/ambiguous or contact has no valid location\n const getDistanceForContact = (contact: {\n lat: number | null;\n lon: number | null;\n }): number | null => {\n if (!prevLocation || prevLocation.lat === null || prevLocation.lon === null) {\n return null;\n }\n // Check if contact has valid location\n if (!isValidLocation(contact.lat, contact.lon)) {\n return null;\n }\n return calculateDistance(prevLocation.lat, prevLocation.lon, contact.lat, contact.lon);\n };\n\n return (\n
\n {/* Vertical line and dot column */}\n
\n
\n
\n
\n
\n\n {/* Content */}\n
\n
\n Hop {hopNumber}\n {isAmbiguous && (ambiguous)}\n
\n\n {isUnknown ? (\n
\n <UNKNOWN {hop.prefix}>\n
\n ) : isAmbiguous ? (\n
\n {hop.matches.map((contact) => {\n const dist = getDistanceForContact(contact);\n const hasLocation = isValidLocation(contact.lat, contact.lon);\n return (\n
\n {contact.name || contact.public_key.slice(0, 12)}{' '}\n \n ({contact.public_key.slice(0, 2).toUpperCase()})\n \n {dist !== null && (\n \n - {formatDistance(dist)}\n \n )}\n {hasLocation && (\n \n )}\n
\n );\n })}\n
\n ) : (\n
\n {hop.matches[0].name || hop.matches[0].public_key.slice(0, 12)}{' '}\n ({hop.prefix})\n {hop.distanceFromPrev !== null && (\n \n - {formatDistance(hop.distanceFromPrev)}\n \n )}\n {isValidLocation(hop.matches[0].lat, hop.matches[0].lon) && (\n \n )}\n
\n )}\n
\n
\n );\n}\n\n/**\n * Render clickable coordinates that open the map focused on the contact\n */\nfunction CoordinateLink({ lat, lon, publicKey }: { lat: number; lon: number; publicKey: string }) {\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n // Open map in new tab with focus on this contact\n const url = window.location.origin + window.location.pathname + getMapFocusHash(publicKey);\n window.open(url, '_blank');\n };\n\n return (\n \n ({lat.toFixed(4)}, {lon.toFixed(4)})\n \n );\n}\n\nfunction calculateReceiverDistance(resolved: ResolvedPath): number | null {\n // Get last hop's location (if any)\n let prevLat: number | null = null;\n let prevLon: number | null = null;\n\n if (resolved.hops.length > 0) {\n const lastHop = resolved.hops[resolved.hops.length - 1];\n // Only use last hop if it's unambiguous and has valid location\n if (\n lastHop.matches.length === 1 &&\n isValidLocation(lastHop.matches[0].lat, lastHop.matches[0].lon)\n ) {\n prevLat = lastHop.matches[0].lat;\n prevLon = lastHop.matches[0].lon;\n }\n } else {\n // No hops, calculate from sender to receiver (if sender has valid location)\n if (isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n prevLat = resolved.sender.lat;\n prevLon = resolved.sender.lon;\n }\n }\n\n if (prevLat === null || prevLon === null) {\n return null;\n }\n\n // Check receiver has valid location\n if (!isValidLocation(resolved.receiver.lat, resolved.receiver.lon)) {\n return null;\n }\n\n return calculateDistance(prevLat, prevLon, resolved.receiver.lat, resolved.receiver.lon);\n}\n","import { useEffect, useLayoutEffect, useRef, useCallback, useState, type ReactNode } from 'react';\nimport type { Contact, Message, MessagePath, RadioConfig } from '../types';\nimport { CONTACT_TYPE_REPEATER } from '../types';\nimport { formatTime, parseSenderFromText } from '../utils/messageParser';\nimport { formatHopCounts, type SenderInfo } from '../utils/pathUtils';\nimport { ContactAvatar } from './ContactAvatar';\nimport { PathModal } from './PathModal';\nimport { cn } from '@/lib/utils';\n\ninterface MessageListProps {\n messages: Message[];\n contacts: Contact[];\n loading: boolean;\n loadingOlder?: boolean;\n hasOlderMessages?: boolean;\n onSenderClick?: (sender: string) => void;\n onLoadOlder?: () => void;\n radioName?: string;\n config?: RadioConfig | null;\n}\n\n// Helper to render text with highlighted @[Name] mentions\nfunction renderTextWithMentions(text: string, radioName?: string): ReactNode {\n if (!radioName) return text;\n\n const mentionPattern = /@\\[([^\\]]+)\\]/g;\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n let keyIndex = 0;\n\n while ((match = mentionPattern.exec(text)) !== null) {\n // Add text before the match\n if (match.index > lastIndex) {\n parts.push(text.slice(lastIndex, match.index));\n }\n\n const mentionedName = match[1];\n const isOwnMention = mentionedName === radioName;\n\n parts.push(\n \n @[{mentionedName}]\n \n );\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push(text.slice(lastIndex));\n }\n\n return parts.length > 0 ? parts : text;\n}\n\n// Clickable hop count badge that opens the path modal\ninterface HopCountBadgeProps {\n paths: MessagePath[];\n onClick: () => void;\n variant: 'header' | 'inline';\n}\n\nfunction HopCountBadge({ paths, onClick, variant }: HopCountBadgeProps) {\n const hopInfo = formatHopCounts(paths);\n const label = `(${hopInfo.display})`;\n\n const className =\n variant === 'header'\n ? 'font-normal text-muted-foreground/70 ml-1 text-[11px] cursor-pointer hover:text-primary hover:underline'\n : 'text-[10px] text-muted-foreground/50 ml-1 cursor-pointer hover:text-primary hover:underline';\n\n return (\n {\n e.stopPropagation();\n onClick();\n }}\n title=\"View message path\"\n >\n {label}\n \n );\n}\n\nexport function MessageList({\n messages,\n contacts,\n loading,\n loadingOlder = false,\n hasOlderMessages = false,\n onSenderClick,\n onLoadOlder,\n radioName,\n config,\n}: MessageListProps) {\n const listRef = useRef(null);\n const prevMessagesLengthRef = useRef(0);\n const isInitialLoadRef = useRef(true);\n const [showScrollToBottom, setShowScrollToBottom] = useState(false);\n const [selectedPath, setSelectedPath] = useState<{\n paths: MessagePath[];\n senderInfo: SenderInfo;\n } | null>(null);\n\n // Capture scroll state in the scroll handler BEFORE any state updates\n const scrollStateRef = useRef({\n scrollTop: 0,\n scrollHeight: 0,\n clientHeight: 0,\n wasNearTop: false,\n wasNearBottom: true, // Default to true so initial messages scroll to bottom\n });\n\n // Handle scroll position AFTER render\n useLayoutEffect(() => {\n if (!listRef.current) return;\n\n const list = listRef.current;\n const messagesAdded = messages.length - prevMessagesLengthRef.current;\n\n if (isInitialLoadRef.current && messages.length > 0) {\n // Initial load - scroll to bottom\n list.scrollTop = list.scrollHeight;\n isInitialLoadRef.current = false;\n } else if (messagesAdded > 0 && prevMessagesLengthRef.current > 0) {\n // Messages were added - use scroll state captured before the update\n const scrollHeightDiff = list.scrollHeight - scrollStateRef.current.scrollHeight;\n\n if (scrollStateRef.current.wasNearTop && scrollHeightDiff > 0) {\n // User was near top (loading older) - preserve position by adding the height diff\n list.scrollTop = scrollStateRef.current.scrollTop + scrollHeightDiff;\n } else if (scrollStateRef.current.wasNearBottom) {\n // User was near bottom - scroll to bottom for new messages (including sent)\n list.scrollTop = list.scrollHeight;\n }\n }\n\n prevMessagesLengthRef.current = messages.length;\n }, [messages]);\n\n // Reset initial load flag when conversation changes (messages becomes empty then filled)\n useEffect(() => {\n if (messages.length === 0) {\n isInitialLoadRef.current = true;\n prevMessagesLengthRef.current = 0;\n scrollStateRef.current = {\n scrollTop: 0,\n scrollHeight: 0,\n clientHeight: 0,\n wasNearTop: false,\n wasNearBottom: true,\n };\n }\n }, [messages.length]);\n\n // Handle scroll - capture state and detect when user is near top/bottom\n const handleScroll = useCallback(() => {\n if (!listRef.current) return;\n\n const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n // Always capture current scroll state (needed for scroll preservation)\n scrollStateRef.current = {\n scrollTop,\n scrollHeight,\n clientHeight,\n wasNearTop: scrollTop < 150,\n wasNearBottom: distanceFromBottom < 100,\n };\n\n // Show scroll-to-bottom button when not near the bottom (more than 100px away)\n setShowScrollToBottom(distanceFromBottom > 100);\n\n if (!onLoadOlder || loadingOlder || !hasOlderMessages) return;\n\n // Trigger load when within 100px of top\n if (scrollTop < 100) {\n onLoadOlder();\n }\n }, [onLoadOlder, loadingOlder, hasOlderMessages]);\n\n // Scroll to bottom handler\n const scrollToBottom = useCallback(() => {\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, []);\n\n // Look up contact by public key\n const getContact = (conversationKey: string | null): Contact | null => {\n if (!conversationKey) return null;\n return contacts.find((c) => c.public_key === conversationKey) || null;\n };\n\n // Look up contact by name (for channel messages where we parse sender from text)\n const getContactByName = (name: string): Contact | null => {\n return contacts.find((c) => c.name === name) || null;\n };\n\n // Build sender info for path modal\n const getSenderInfo = (\n msg: Message,\n contact: Contact | null,\n parsedSender: string | null\n ): SenderInfo => {\n if (msg.type === 'PRIV' && contact) {\n return {\n name: contact.name || contact.public_key.slice(0, 12),\n publicKeyOrPrefix: contact.public_key,\n lat: contact.lat,\n lon: contact.lon,\n };\n }\n // For channel messages, try to find contact by parsed sender name\n if (parsedSender) {\n const senderContact = getContactByName(parsedSender);\n if (senderContact) {\n return {\n name: parsedSender,\n publicKeyOrPrefix: senderContact.public_key,\n lat: senderContact.lat,\n lon: senderContact.lon,\n };\n }\n }\n // Fallback: unknown sender\n return {\n name: parsedSender || 'Unknown',\n publicKeyOrPrefix: msg.conversation_key || '',\n lat: null,\n lon: null,\n };\n };\n\n if (loading) {\n return (\n
\n Loading messages...\n
\n );\n }\n\n if (messages.length === 0) {\n return (\n
\n No messages yet\n
\n );\n }\n\n // Sort messages by received_at ascending (oldest first)\n // Note: Deduplication is handled by useConversationMessages.addMessageIfNew()\n // and the database UNIQUE constraint on (type, conversation_key, text, sender_timestamp)\n const sortedMessages = [...messages].sort((a, b) => a.received_at - b.received_at);\n\n // Helper to get a unique sender key for grouping messages\n const getSenderKey = (msg: Message, sender: string | null): string => {\n if (msg.outgoing) return '__outgoing__';\n if (msg.type === 'PRIV' && msg.conversation_key) return msg.conversation_key;\n return sender || '__unknown__';\n };\n\n return (\n
\n \n {loadingOlder && (\n
\n Loading older messages...\n
\n )}\n {!loadingOlder && hasOlderMessages && (\n
\n Scroll up for older messages\n
\n )}\n {sortedMessages.map((msg, index) => {\n // For DMs, look up contact; for channel messages, use parsed sender\n const contact = msg.type === 'PRIV' ? getContact(msg.conversation_key) : null;\n const isRepeater = contact?.type === CONTACT_TYPE_REPEATER;\n\n // Skip sender parsing for repeater messages (CLI responses often have colons)\n const { sender, content } = isRepeater\n ? { sender: null, content: msg.text }\n : parseSenderFromText(msg.text);\n const displaySender = msg.outgoing\n ? 'You'\n : contact?.name || sender || msg.conversation_key?.slice(0, 8) || 'Unknown';\n\n const canClickSender = !msg.outgoing && onSenderClick && displaySender !== 'Unknown';\n\n // Determine if we should show avatar (first message in a chunk from same sender)\n const currentSenderKey = getSenderKey(msg, sender);\n const prevMsg = sortedMessages[index - 1];\n const prevSenderKey = prevMsg\n ? getSenderKey(prevMsg, parseSenderFromText(prevMsg.text).sender)\n : null;\n const showAvatar = !msg.outgoing && currentSenderKey !== prevSenderKey;\n const isFirstMessage = index === 0;\n\n // Get avatar info for incoming messages\n let avatarName: string | null = null;\n let avatarKey: string = '';\n if (!msg.outgoing) {\n if (msg.type === 'PRIV' && msg.conversation_key) {\n // DM: use conversation_key (sender's public key)\n avatarName = contact?.name || null;\n avatarKey = msg.conversation_key;\n } else if (sender) {\n // Channel message: try to find contact by name, or use sender name as pseudo-key\n const senderContact = getContactByName(sender);\n avatarName = sender;\n avatarKey = senderContact?.public_key || `name:${sender}`;\n }\n }\n\n return (\n \n {!msg.outgoing && (\n
\n {showAvatar && avatarKey && (\n \n )}\n
\n )}\n \n {showAvatar && (\n
\n {canClickSender ? (\n onSenderClick(displaySender)}\n title={`Mention ${displaySender}`}\n >\n {displaySender}\n \n ) : (\n displaySender\n )}\n \n {formatTime(msg.sender_timestamp || msg.received_at)}\n \n {!msg.outgoing && msg.paths && msg.paths.length > 0 && (\n \n setSelectedPath({\n paths: msg.paths!,\n senderInfo: getSenderInfo(msg, contact, sender),\n })\n }\n />\n )}\n
\n )}\n
\n {content.split('\\n').map((line, i, arr) => (\n \n {renderTextWithMentions(line, radioName)}\n {i < arr.length - 1 &&
}\n
\n ))}\n {!showAvatar && (\n <>\n \n {formatTime(msg.sender_timestamp || msg.received_at)}\n \n {!msg.outgoing && msg.paths && msg.paths.length > 0 && (\n \n setSelectedPath({\n paths: msg.paths!,\n senderInfo: getSenderInfo(msg, contact, sender),\n })\n }\n />\n )}\n \n )}\n {msg.outgoing && (msg.acked > 0 ? ` ✓${msg.acked > 1 ? msg.acked : ''}` : ' ?')}\n
\n
\n
\n );\n })}\n
\n\n {/* Scroll to bottom button */}\n {showScrollToBottom && (\n \n \n \n \n \n )}\n\n {/* Path modal */}\n {selectedPath && (\n setSelectedPath(null)}\n paths={selectedPath.paths}\n senderInfo={selectedPath.senderInfo}\n contacts={contacts}\n config={config ?? null}\n />\n )}\n
\n );\n}\n","import {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useRef,\n useMemo,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { toast } from './ui/sonner';\nimport { cn } from '@/lib/utils';\n\n// MeshCore message size limits (empirically determined from LoRa packet constraints)\n// Direct delivery allows ~156 bytes; multi-hop requires buffer for path growth.\n// Channels include \"sender: \" prefix in the encrypted payload.\nconst DM_HARD_LIMIT = 156; // Max for direct delivery\nconst DM_WARNING_THRESHOLD = 140; // Conservative for multi-hop\nconst CHANNEL_HARD_LIMIT = 156; // Base limit before sender overhead\nconst CHANNEL_WARNING_THRESHOLD = 120; // Conservative for multi-hop\nconst CHANNEL_DANGER_BUFFER = 8; // Red zone starts this many chars before hard limit\n\ninterface MessageInputProps {\n onSend: (text: string) => Promise;\n disabled: boolean;\n placeholder?: string;\n /** When true, input becomes password field for repeater telemetry */\n isRepeaterMode?: boolean;\n /** Conversation type for character limit calculation */\n conversationType?: 'contact' | 'channel' | 'raw';\n /** Sender name (radio name) for channel message limit calculation */\n senderName?: string;\n}\n\ntype LimitState = 'normal' | 'warning' | 'danger' | 'error';\n\nexport interface MessageInputHandle {\n appendText: (text: string) => void;\n}\n\nexport const MessageInput = forwardRef(function MessageInput(\n { onSend, disabled, placeholder, isRepeaterMode, conversationType, senderName },\n ref\n) {\n const [text, setText] = useState('');\n const [sending, setSending] = useState(false);\n const inputRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n appendText: (appendedText: string) => {\n setText((prev) => prev + appendedText);\n // Focus the input after appending\n inputRef.current?.focus();\n },\n }));\n\n // Calculate character limits based on conversation type\n const limits = useMemo(() => {\n if (conversationType === 'contact') {\n return {\n warningAt: DM_WARNING_THRESHOLD,\n dangerAt: DM_HARD_LIMIT, // Same as hard limit for DMs (no intermediate red zone)\n hardLimit: DM_HARD_LIMIT,\n };\n } else if (conversationType === 'channel') {\n // Channel hard limit = 156 - senderName.length - 2 (for \": \" separator)\n const nameLen = senderName?.length ?? 10;\n const hardLimit = Math.max(1, CHANNEL_HARD_LIMIT - nameLen - 2);\n return {\n warningAt: CHANNEL_WARNING_THRESHOLD,\n dangerAt: Math.max(1, hardLimit - CHANNEL_DANGER_BUFFER),\n hardLimit,\n };\n }\n return null; // Raw/other - no limits\n }, [conversationType, senderName]);\n\n // Determine current limit state\n const { limitState, warningMessage } = useMemo((): {\n limitState: LimitState;\n warningMessage: string | null;\n } => {\n if (!limits) return { limitState: 'normal', warningMessage: null };\n\n const len = text.length;\n if (len >= limits.hardLimit) {\n return { limitState: 'error', warningMessage: 'likely truncated by radio' };\n }\n if (len >= limits.dangerAt) {\n return { limitState: 'danger', warningMessage: 'may impact multi-repeater hop delivery' };\n }\n if (len >= limits.warningAt) {\n return { limitState: 'warning', warningMessage: 'may impact multi-repeater hop delivery' };\n }\n return { limitState: 'normal', warningMessage: null };\n }, [text.length, limits]);\n\n const remaining = limits ? limits.hardLimit - text.length : 0;\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault();\n const trimmed = text.trim();\n\n // For repeater mode, empty password means guest login\n if (isRepeaterMode) {\n if (sending || disabled) return;\n setSending(true);\n try {\n await onSend(trimmed);\n setText('');\n } catch (err) {\n console.error('Failed to request telemetry:', err);\n toast.error('Failed to request telemetry', {\n description: err instanceof Error ? err.message : 'Check radio connection',\n });\n return;\n } finally {\n setSending(false);\n }\n // Refocus after React re-enables the input (now in CLI command mode)\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n if (!trimmed || sending || disabled) return;\n setSending(true);\n try {\n await onSend(trimmed);\n setText('');\n } catch (err) {\n console.error('Failed to send message:', err);\n toast.error('Failed to send message', {\n description: err instanceof Error ? err.message : 'Check radio connection',\n });\n return;\n } finally {\n setSending(false);\n }\n // Refocus after React re-enables the input\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n },\n [text, sending, disabled, onSend, isRepeaterMode]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e as unknown as FormEvent);\n }\n },\n [handleSubmit]\n );\n\n // For repeater mode, always allow submit (empty = guest login)\n const canSubmit = isRepeaterMode ? true : text.trim().length > 0;\n\n // Show character counter for messages (not repeater mode or raw)\n const showCharCounter = !isRepeaterMode && limits !== null;\n\n return (\n
\n
\n setText(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n placeholder ||\n (isRepeaterMode ? 'Enter password for admin login...' : 'Type a message...')\n }\n disabled={disabled || sending}\n className=\"flex-1 min-w-0\"\n />\n \n {sending\n ? isRepeaterMode\n ? 'Logging in...'\n : 'Sending...'\n : isRepeaterMode\n ? text.trim()\n ? 'Log in with password'\n : 'Log in as guest/use repeater ACLs'\n : 'Send'}\n \n
\n {showCharCounter && (\n
\n \n {text.length}/{limits!.hardLimit}\n {remaining < 0 && ` (${remaining})`}\n \n {warningMessage && (\n \n — {warningMessage}\n \n )}\n
\n )}\n
\n );\n});\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '@/lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nconst Label = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & VariantProps\n>(({ className, ...props }, ref) => (\n \n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Checkbox = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n \n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import { useState, useRef } from 'react';\nimport type { Contact, Conversation } from '../types';\nimport { getContactDisplayName } from '../utils/pubkey';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from './ui/dialog';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './ui/tabs';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Checkbox } from './ui/checkbox';\nimport { Button } from './ui/button';\n\ntype Tab = 'existing' | 'new-contact' | 'new-room' | 'hashtag';\n\ninterface NewMessageModalProps {\n open: boolean;\n contacts: Contact[];\n undecryptedCount: number;\n onClose: () => void;\n onSelectConversation: (conversation: Conversation) => void;\n onCreateContact: (name: string, publicKey: string, tryHistorical: boolean) => Promise;\n onCreateChannel: (name: string, key: string, tryHistorical: boolean) => Promise;\n onCreateHashtagChannel: (name: string, tryHistorical: boolean) => Promise;\n}\n\nexport function NewMessageModal({\n open,\n contacts,\n undecryptedCount,\n onClose,\n onSelectConversation,\n onCreateContact,\n onCreateChannel,\n onCreateHashtagChannel,\n}: NewMessageModalProps) {\n const [tab, setTab] = useState('existing');\n const [name, setName] = useState('');\n const [contactKey, setContactKey] = useState('');\n const [roomKey, setRoomKey] = useState('');\n const [tryHistorical, setTryHistorical] = useState(false);\n const [permitCapitals, setPermitCapitals] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n const hashtagInputRef = useRef(null);\n\n const handleCreate = async () => {\n setError('');\n setLoading(true);\n\n try {\n if (tab === 'new-contact') {\n if (!name.trim() || !contactKey.trim()) {\n setError('Name and public key are required');\n return;\n }\n // handleCreateContact sets activeConversation with the backend-normalized key\n await onCreateContact(name.trim(), contactKey.trim(), tryHistorical);\n } else if (tab === 'new-room') {\n if (!name.trim() || !roomKey.trim()) {\n setError('Room name and key are required');\n return;\n }\n await onCreateChannel(name.trim(), roomKey.trim(), tryHistorical);\n } else if (tab === 'hashtag') {\n const channelName = name.trim();\n const validationError = validateHashtagName(channelName);\n if (validationError) {\n setError(validationError);\n return;\n }\n // Normalize to lowercase unless user explicitly permits capitals\n const normalizedName = permitCapitals ? channelName : channelName.toLowerCase();\n await onCreateHashtagChannel(`#${normalizedName}`, tryHistorical);\n }\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create');\n } finally {\n setLoading(false);\n }\n };\n\n const validateHashtagName = (channelName: string): string | null => {\n if (!channelName) {\n return 'Channel name is required';\n }\n if (!/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/.test(channelName)) {\n return 'Use letters, numbers, and single dashes (no leading/trailing dashes)';\n }\n return null;\n };\n\n const handleCreateAndAddAnother = async () => {\n setError('');\n const channelName = name.trim();\n const validationError = validateHashtagName(channelName);\n if (validationError) {\n setError(validationError);\n return;\n }\n\n setLoading(true);\n try {\n // Normalize to lowercase unless user explicitly permits capitals\n const normalizedName = permitCapitals ? channelName : channelName.toLowerCase();\n await onCreateHashtagChannel(`#${normalizedName}`, tryHistorical);\n setName('');\n hashtagInputRef.current?.focus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create');\n } finally {\n setLoading(false);\n }\n };\n\n const showHistoricalOption = tab !== 'existing' && undecryptedCount > 0;\n\n return (\n !isOpen && onClose()}>\n \n \n New Conversation\n \n {tab === 'existing' && 'Select an existing contact to start a conversation'}\n {tab === 'new-contact' && 'Add a new contact by entering their name and public key'}\n {tab === 'new-room' && 'Create a private room with a shared encryption key'}\n {tab === 'hashtag' && 'Join a public hashtag channel'}\n \n \n\n setTab(v as Tab)} className=\"w-full\">\n \n Existing\n Contact\n Room\n Hashtag\n \n\n \n
\n {contacts.length === 0 ? (\n
No contacts available
\n ) : (\n contacts.map((contact) => (\n {\n onSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n });\n onClose();\n }}\n >\n {getContactDisplayName(contact.name, contact.public_key)}\n
\n ))\n )}\n
\n \n\n \n
\n \n setName(e.target.value)}\n placeholder=\"Contact name\"\n />\n
\n
\n \n setContactKey(e.target.value)}\n placeholder=\"64-character hex public key\"\n />\n
\n
\n\n \n
\n \n setName(e.target.value)}\n placeholder=\"Room name\"\n />\n
\n
\n \n
\n setRoomKey(e.target.value)}\n placeholder=\"Pre-shared key (hex)\"\n className=\"flex-1\"\n />\n {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n setRoomKey(hex);\n }}\n title=\"Generate random key\"\n >\n 🎲\n \n
\n
\n
\n\n \n
\n \n
\n #\n setName(e.target.value)}\n placeholder=\"channel-name\"\n className=\"flex-1\"\n />\n
\n
\n
\n \n

\n Not recommended; most companions normalize to lowercase\n

\n
\n
\n \n\n {showHistoricalOption && (\n
\n
\n \n Try decrypting {undecryptedCount.toLocaleString()} stored packet\n {undecryptedCount !== 1 ? 's' : ''}\n \n setTryHistorical(checked === true)}\n />\n
\n {tryHistorical && (\n

\n Messages will stream in as they decrypt in the background\n

\n )}\n
\n )}\n\n {error &&
{error}
}\n\n \n \n {tab === 'hashtag' && (\n \n )}\n {tab !== 'existing' && (\n \n )}\n \n \n \n );\n}\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\n\nimport { cn } from '@/lib/utils';\n\nconst Separator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n \n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import { useState, useEffect, useMemo } from 'react';\nimport type {\n AppSettings,\n AppSettingsUpdate,\n HealthStatus,\n RadioConfig,\n RadioConfigUpdate,\n} from '../types';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './ui/dialog';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Button } from './ui/button';\nimport { Separator } from './ui/separator';\nimport { toast } from './ui/sonner';\nimport { api } from '../api';\nimport { formatTime } from '../utils/messageParser';\n\n// Radio presets for common configurations\ninterface RadioPreset {\n name: string;\n freq: number;\n bw: number;\n sf: number;\n cr: number;\n}\n\nconst RADIO_PRESETS: RadioPreset[] = [\n { name: 'USA/Canada', freq: 910.525, bw: 62.5, sf: 7, cr: 5 },\n { name: 'Australia', freq: 915.8, bw: 250, sf: 10, cr: 5 },\n { name: 'Australia (narrow)', freq: 916.575, bw: 62.5, sf: 7, cr: 8 },\n { name: 'Australia SA, WA', freq: 923.125, bw: 62.5, sf: 8, cr: 8 },\n { name: 'Australia QLD', freq: 923.125, bw: 62.5, sf: 8, cr: 5 },\n { name: 'New Zealand', freq: 917.375, bw: 250, sf: 11, cr: 5 },\n { name: 'New Zealand (narrow)', freq: 917.375, bw: 62.5, sf: 7, cr: 5 },\n { name: 'EU/UK/Switzerland Long Range', freq: 869.525, bw: 250, sf: 11, cr: 5 },\n { name: 'EU/UK/Switzerland Medium Range', freq: 869.525, bw: 250, sf: 10, cr: 5 },\n { name: 'EU/UK/Switzerland Narrow', freq: 869.618, bw: 62.5, sf: 8, cr: 8 },\n { name: 'Czech Republic (Narrow)', freq: 869.432, bw: 62.5, sf: 7, cr: 5 },\n { name: 'EU 433MHz Long Range', freq: 433.65, bw: 250, sf: 11, cr: 5 },\n { name: 'Portugal 433MHz', freq: 433.375, bw: 62.5, sf: 9, cr: 6 },\n { name: 'Portugal 868MHz', freq: 869.618, bw: 62.5, sf: 7, cr: 6 },\n { name: 'Vietnam', freq: 920.25, bw: 250, sf: 11, cr: 5 },\n];\n\ninterface SettingsModalProps {\n open: boolean;\n config: RadioConfig | null;\n health: HealthStatus | null;\n appSettings: AppSettings | null;\n onClose: () => void;\n onSave: (update: RadioConfigUpdate) => Promise;\n onSaveAppSettings: (update: AppSettingsUpdate) => Promise;\n onSetPrivateKey: (key: string) => Promise;\n onReboot: () => Promise;\n onAdvertise: () => Promise;\n onHealthRefresh: () => Promise;\n onRefreshAppSettings: () => Promise;\n}\n\nexport function SettingsModal({\n open,\n config,\n health,\n appSettings,\n onClose,\n onSave,\n onSaveAppSettings,\n onSetPrivateKey,\n onReboot,\n onAdvertise,\n onHealthRefresh,\n onRefreshAppSettings,\n}: SettingsModalProps) {\n // Tab state\n type SettingsTab = 'radio' | 'identity' | 'serial' | 'database' | 'advertise';\n const [activeTab, setActiveTab] = useState('radio');\n\n // Radio config state\n const [name, setName] = useState('');\n const [lat, setLat] = useState('');\n const [lon, setLon] = useState('');\n const [txPower, setTxPower] = useState('');\n const [freq, setFreq] = useState('');\n const [bw, setBw] = useState('');\n const [sf, setSf] = useState('');\n const [cr, setCr] = useState('');\n const [privateKey, setPrivateKey] = useState('');\n const [maxRadioContacts, setMaxRadioContacts] = useState('');\n\n // Loading states\n const [loading, setLoading] = useState(false);\n const [rebooting, setRebooting] = useState(false);\n const [advertising, setAdvertising] = useState(false);\n const [gettingLocation, setGettingLocation] = useState(false);\n const [error, setError] = useState('');\n\n // Database maintenance state\n const [retentionDays, setRetentionDays] = useState('14');\n const [cleaning, setCleaning] = useState(false);\n const [autoDecryptOnAdvert, setAutoDecryptOnAdvert] = useState(false);\n\n useEffect(() => {\n if (config) {\n setName(config.name);\n setLat(String(config.lat));\n setLon(String(config.lon));\n setTxPower(String(config.tx_power));\n setFreq(String(config.radio.freq));\n setBw(String(config.radio.bw));\n setSf(String(config.radio.sf));\n setCr(String(config.radio.cr));\n }\n }, [config]);\n\n useEffect(() => {\n if (appSettings) {\n setMaxRadioContacts(String(appSettings.max_radio_contacts));\n setAutoDecryptOnAdvert(appSettings.auto_decrypt_dm_on_advert);\n }\n }, [appSettings]);\n\n // Refresh settings from server when modal opens\n // This ensures UI reflects actual server state (prevents stale UI after checkbox toggle without save)\n useEffect(() => {\n if (open) {\n onRefreshAppSettings();\n }\n }, [open, onRefreshAppSettings]);\n\n // Detect current preset from form values\n const currentPreset = useMemo(() => {\n const freqNum = parseFloat(freq);\n const bwNum = parseFloat(bw);\n const sfNum = parseInt(sf, 10);\n const crNum = parseInt(cr, 10);\n\n for (const preset of RADIO_PRESETS) {\n if (\n preset.freq === freqNum &&\n preset.bw === bwNum &&\n preset.sf === sfNum &&\n preset.cr === crNum\n ) {\n return preset.name;\n }\n }\n return 'custom';\n }, [freq, bw, sf, cr]);\n\n const handlePresetChange = (presetName: string) => {\n if (presetName === 'custom') return;\n const preset = RADIO_PRESETS.find((p) => p.name === presetName);\n if (preset) {\n setFreq(String(preset.freq));\n setBw(String(preset.bw));\n setSf(String(preset.sf));\n setCr(String(preset.cr));\n }\n };\n\n const handleGetLocation = () => {\n if (!navigator.geolocation) {\n toast.error('Geolocation not supported', {\n description: 'Your browser does not support geolocation',\n });\n return;\n }\n\n setGettingLocation(true);\n navigator.geolocation.getCurrentPosition(\n (position) => {\n setLat(position.coords.latitude.toFixed(6));\n setLon(position.coords.longitude.toFixed(6));\n setGettingLocation(false);\n toast.success('Location updated');\n },\n (err) => {\n setGettingLocation(false);\n toast.error('Failed to get location', {\n description: err.message,\n });\n },\n { enableHighAccuracy: true, timeout: 10000 }\n );\n };\n\n const handleSaveRadioConfig = async () => {\n setError('');\n setLoading(true);\n\n try {\n const update: RadioConfigUpdate = {\n lat: parseFloat(lat),\n lon: parseFloat(lon),\n tx_power: parseInt(txPower, 10),\n radio: {\n freq: parseFloat(freq),\n bw: parseFloat(bw),\n sf: parseInt(sf, 10),\n cr: parseInt(cr, 10),\n },\n };\n await onSave(update);\n toast.success('Radio config saved, rebooting...');\n setLoading(false);\n setRebooting(true);\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n setLoading(false);\n } finally {\n setRebooting(false);\n }\n };\n\n const handleSaveIdentity = async () => {\n setError('');\n setLoading(true);\n\n try {\n const update: RadioConfigUpdate = { name };\n await onSave(update);\n toast.success('Identity saved');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSaveSerial = async () => {\n setError('');\n setLoading(true);\n\n try {\n const newMaxRadioContacts = parseInt(maxRadioContacts, 10);\n if (!isNaN(newMaxRadioContacts) && newMaxRadioContacts !== appSettings?.max_radio_contacts) {\n await onSaveAppSettings({ max_radio_contacts: newMaxRadioContacts });\n }\n toast.success('Serial settings saved');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSetPrivateKey = async () => {\n if (!privateKey.trim()) {\n setError('Private key is required');\n return;\n }\n setError('');\n setLoading(true);\n\n try {\n await onSetPrivateKey(privateKey.trim());\n setPrivateKey('');\n toast.success('Private key set, rebooting...');\n setLoading(false);\n setRebooting(true);\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to set private key');\n setLoading(false);\n } finally {\n setRebooting(false);\n }\n };\n\n const handleReboot = async () => {\n if (\n !confirm('Are you sure you want to reboot the radio? The connection will drop temporarily.')\n ) {\n return;\n }\n setError('');\n setRebooting(true);\n\n try {\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to reboot radio');\n } finally {\n setRebooting(false);\n }\n };\n\n const handleAdvertise = async () => {\n setAdvertising(true);\n try {\n await onAdvertise();\n } finally {\n setAdvertising(false);\n }\n };\n\n const handleCleanup = async () => {\n const days = parseInt(retentionDays, 10);\n if (isNaN(days) || days < 1) {\n toast.error('Invalid retention days', {\n description: 'Retention days must be at least 1',\n });\n return;\n }\n\n setCleaning(true);\n\n try {\n const result = await api.runMaintenance(days);\n toast.success('Database cleanup complete', {\n description: `Deleted ${result.packets_deleted} old packet${result.packets_deleted === 1 ? '' : 's'}`,\n });\n await onHealthRefresh();\n } catch (err) {\n console.error('Failed to run maintenance:', err);\n toast.error('Database cleanup failed', {\n description: err instanceof Error ? err.message : 'Unknown error',\n });\n } finally {\n setCleaning(false);\n }\n };\n\n const handleSaveDatabaseSettings = async () => {\n setLoading(true);\n setError('');\n\n try {\n await onSaveAppSettings({ auto_decrypt_dm_on_advert: autoDecryptOnAdvert });\n toast.success('Database settings saved');\n } catch (err) {\n console.error('Failed to save database settings:', err);\n setError(err instanceof Error ? err.message : 'Failed to save');\n toast.error('Failed to save settings');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n !isOpen && onClose()}>\n \n \n Radio & Settings\n \n {activeTab === 'radio' && 'Configure radio frequency, power, and location settings'}\n {activeTab === 'identity' && 'Manage radio name, public key, and private key'}\n {activeTab === 'serial' && 'View serial port connection and configure contact sync'}\n {activeTab === 'database' && 'View database statistics and clean up old packets'}\n {activeTab === 'advertise' && 'Send a flood advertisement to announce your presence'}\n \n \n\n {!config ? (\n
Loading configuration...
\n ) : (\n setActiveTab(v as SettingsTab)}\n className=\"w-full\"\n >\n \n Radio\n Identity\n Serial\n Database\n Advertise\n \n\n {/* Radio Config Tab */}\n \n
\n \n handlePresetChange(e.target.value)}\n className=\"w-full h-10 px-3 rounded-md border border-input bg-background text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n >\n \n {RADIO_PRESETS.map((preset) => (\n \n ))}\n \n
\n\n
\n
\n \n setFreq(e.target.value)}\n />\n
\n
\n \n setBw(e.target.value)}\n />\n
\n
\n\n
\n
\n \n setSf(e.target.value)}\n />\n
\n
\n \n setCr(e.target.value)}\n />\n
\n
\n\n
\n
\n \n setTxPower(e.target.value)}\n />\n
\n
\n \n \n
\n
\n\n \n\n
\n
\n \n \n {gettingLocation ? 'Getting...' : '📍 Use My Location'}\n \n
\n
\n
\n \n setLat(e.target.value)}\n />\n
\n
\n \n setLon(e.target.value)}\n />\n
\n
\n
\n\n {error &&
{error}
}\n\n \n {loading || rebooting ? 'Saving & Rebooting...' : 'Save Radio Config & Reboot'}\n \n
\n\n {/* Identity Tab */}\n \n
\n \n \n
\n\n
\n \n setName(e.target.value)} />\n
\n\n \n\n \n\n
\n \n setPrivateKey(e.target.value)}\n placeholder=\"64-character hex private key\"\n />\n \n {loading || rebooting ? 'Setting & Rebooting...' : 'Set Private Key & Reboot'}\n \n
\n\n {error &&
{error}
}\n
\n\n {/* Serial Tab */}\n \n
\n \n {health?.serial_port ? (\n
\n
\n \n {health.serial_port}\n \n
\n ) : (\n
\n
\n Not connected\n
\n )}\n
\n\n \n\n
\n \n setMaxRadioContacts(e.target.value)}\n />\n

\n Recent non-repeater contacts loaded to radio for DM auto-ACK (1-1000)\n

\n
\n\n \n\n \n\n \n {rebooting ? 'Rebooting...' : 'Reboot Radio'}\n \n\n {error &&
{error}
}\n \n\n {/* Database Tab */}\n \n
\n
\n Database size\n {health?.database_size_mb ?? '?'} MB\n
\n\n {health?.oldest_undecrypted_timestamp ? (\n
\n Oldest undecrypted packet\n \n {formatTime(health.oldest_undecrypted_timestamp)}\n \n (\n {Math.floor(\n (Date.now() / 1000 - health.oldest_undecrypted_timestamp) / 86400\n )}{' '}\n days old)\n \n \n
\n ) : (\n
\n Oldest undecrypted packet\n None\n
\n )}\n
\n\n \n\n
\n \n

\n Delete undecrypted packets older than the specified days. This helps manage\n storage for packets that couldn't be decrypted (unknown channel keys).\n

\n
\n
\n \n setRetentionDays(e.target.value)}\n className=\"w-24\"\n />\n
\n \n
\n
\n\n \n\n
\n \n \n

\n When enabled, the server will automatically try to decrypt stored DM packets when\n a new contact sends an advertisement. This may cause brief delays on large packet\n backlogs.\n

\n
\n\n {error &&
{error}
}\n\n \n
\n\n {/* Advertise Tab */}\n \n
\n

\n Send a flood advertisement to announce your presence on the mesh network.\n

\n \n {advertising ? 'Sending...' : 'Send Advertisement'}\n \n {!health?.radio_connected && (\n

Radio not connected

\n )}\n
\n
\n \n )}\n \n
\n );\n}\n","\"use strict\";\n// Reference: https://github.com/meshcore-dev/MeshCore/blob/main/docs/packet_structure.md\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestType = exports.AdvertFlags = exports.DeviceRole = exports.PayloadVersion = exports.ControlSubType = exports.PayloadType = exports.RouteType = void 0;\nvar RouteType;\n(function (RouteType) {\n RouteType[RouteType[\"TransportFlood\"] = 0] = \"TransportFlood\";\n RouteType[RouteType[\"Flood\"] = 1] = \"Flood\";\n RouteType[RouteType[\"Direct\"] = 2] = \"Direct\";\n RouteType[RouteType[\"TransportDirect\"] = 3] = \"TransportDirect\";\n})(RouteType || (exports.RouteType = RouteType = {}));\nvar PayloadType;\n(function (PayloadType) {\n PayloadType[PayloadType[\"Request\"] = 0] = \"Request\";\n PayloadType[PayloadType[\"Response\"] = 1] = \"Response\";\n PayloadType[PayloadType[\"TextMessage\"] = 2] = \"TextMessage\";\n PayloadType[PayloadType[\"Ack\"] = 3] = \"Ack\";\n PayloadType[PayloadType[\"Advert\"] = 4] = \"Advert\";\n PayloadType[PayloadType[\"GroupText\"] = 5] = \"GroupText\";\n PayloadType[PayloadType[\"GroupData\"] = 6] = \"GroupData\";\n PayloadType[PayloadType[\"AnonRequest\"] = 7] = \"AnonRequest\";\n PayloadType[PayloadType[\"Path\"] = 8] = \"Path\";\n PayloadType[PayloadType[\"Trace\"] = 9] = \"Trace\";\n PayloadType[PayloadType[\"Multipart\"] = 10] = \"Multipart\";\n PayloadType[PayloadType[\"Control\"] = 11] = \"Control\";\n PayloadType[PayloadType[\"RawCustom\"] = 15] = \"RawCustom\";\n})(PayloadType || (exports.PayloadType = PayloadType = {}));\n// Control packet sub-types (upper 4 bits of first payload byte)\nvar ControlSubType;\n(function (ControlSubType) {\n ControlSubType[ControlSubType[\"NodeDiscoverReq\"] = 128] = \"NodeDiscoverReq\";\n ControlSubType[ControlSubType[\"NodeDiscoverResp\"] = 144] = \"NodeDiscoverResp\";\n})(ControlSubType || (exports.ControlSubType = ControlSubType = {}));\nvar PayloadVersion;\n(function (PayloadVersion) {\n PayloadVersion[PayloadVersion[\"Version1\"] = 0] = \"Version1\";\n PayloadVersion[PayloadVersion[\"Version2\"] = 1] = \"Version2\";\n PayloadVersion[PayloadVersion[\"Version3\"] = 2] = \"Version3\";\n PayloadVersion[PayloadVersion[\"Version4\"] = 3] = \"Version4\";\n})(PayloadVersion || (exports.PayloadVersion = PayloadVersion = {}));\nvar DeviceRole;\n(function (DeviceRole) {\n DeviceRole[DeviceRole[\"Unknown\"] = 0] = \"Unknown\";\n DeviceRole[DeviceRole[\"ChatNode\"] = 1] = \"ChatNode\";\n DeviceRole[DeviceRole[\"Repeater\"] = 2] = \"Repeater\";\n DeviceRole[DeviceRole[\"RoomServer\"] = 3] = \"RoomServer\";\n DeviceRole[DeviceRole[\"Sensor\"] = 4] = \"Sensor\";\n})(DeviceRole || (exports.DeviceRole = DeviceRole = {}));\nvar AdvertFlags;\n(function (AdvertFlags) {\n AdvertFlags[AdvertFlags[\"HasLocation\"] = 16] = \"HasLocation\";\n AdvertFlags[AdvertFlags[\"HasFeature1\"] = 32] = \"HasFeature1\";\n AdvertFlags[AdvertFlags[\"HasFeature2\"] = 64] = \"HasFeature2\";\n AdvertFlags[AdvertFlags[\"HasName\"] = 128] = \"HasName\";\n})(AdvertFlags || (exports.AdvertFlags = AdvertFlags = {}));\nvar RequestType;\n(function (RequestType) {\n RequestType[RequestType[\"GetStats\"] = 1] = \"GetStats\";\n RequestType[RequestType[\"Keepalive\"] = 2] = \"Keepalive\";\n RequestType[RequestType[\"GetTelemetryData\"] = 3] = \"GetTelemetryData\";\n RequestType[RequestType[\"GetMinMaxAvgData\"] = 4] = \"GetMinMaxAvgData\";\n RequestType[RequestType[\"GetAccessList\"] = 5] = \"GetAccessList\";\n})(RequestType || (exports.RequestType = RequestType = {}));\n//# sourceMappingURL=enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byteToHex = byteToHex;\nexports.bytesToHex = bytesToHex;\nexports.numberToHex = numberToHex;\nexports.hexToBytes = hexToBytes;\n/**\n * Convert a single byte to uppercase hex string\n */\nfunction byteToHex(byte) {\n return byte.toString(16).padStart(2, '0').toUpperCase();\n}\n/**\n * Convert a Uint8Array to uppercase hex string\n */\nfunction bytesToHex(bytes) {\n return Array.from(bytes).map(byteToHex).join('');\n}\n/**\n * Convert a number to uppercase hex string with specified padding\n */\nfunction numberToHex(num, padLength = 8) {\n return (num >>> 0).toString(16).padStart(padLength, '0').toUpperCase();\n}\n/**\n * Convert hex string to Uint8Array\n */\nfunction hexToBytes(hex) {\n // Remove any whitespace and convert to uppercase\n const cleanHex = hex.replace(/\\s/g, '').toUpperCase();\n // Validate hex string\n if (!/^[0-9A-F]*$/.test(cleanHex)) {\n throw new Error(`Invalid hex string: invalid characters at position 0`);\n }\n if (cleanHex.length % 2 !== 0) {\n throw new Error('Invalid hex string: odd length');\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = parseInt(cleanHex.substr(i, 2), 16);\n }\n return bytes;\n}\n//# sourceMappingURL=hex.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRouteTypeName = getRouteTypeName;\nexports.getPayloadTypeName = getPayloadTypeName;\nexports.getPayloadVersionName = getPayloadVersionName;\nexports.getDeviceRoleName = getDeviceRoleName;\nexports.getRequestTypeName = getRequestTypeName;\nexports.getControlSubTypeName = getControlSubTypeName;\nconst enums_1 = require(\"../types/enums\");\n/**\n * Get human-readable name for RouteType enum value\n */\nfunction getRouteTypeName(routeType) {\n switch (routeType) {\n case enums_1.RouteType.Flood: return 'Flood';\n case enums_1.RouteType.Direct: return 'Direct';\n case enums_1.RouteType.TransportFlood: return 'TransportFlood';\n case enums_1.RouteType.TransportDirect: return 'TransportDirect';\n default: return `Unknown (${routeType})`;\n }\n}\n/**\n * Get human-readable name for PayloadType enum value\n */\nfunction getPayloadTypeName(payloadType) {\n switch (payloadType) {\n case enums_1.PayloadType.RawCustom: return 'RawCustom';\n case enums_1.PayloadType.Trace: return 'Trace';\n case enums_1.PayloadType.Advert: return 'Advert';\n case enums_1.PayloadType.GroupText: return 'GroupText';\n case enums_1.PayloadType.GroupData: return 'GroupData';\n case enums_1.PayloadType.Request: return 'Request';\n case enums_1.PayloadType.Response: return 'Response';\n case enums_1.PayloadType.TextMessage: return 'TextMessage';\n case enums_1.PayloadType.AnonRequest: return 'AnonRequest';\n case enums_1.PayloadType.Ack: return 'Ack';\n case enums_1.PayloadType.Path: return 'Path';\n case enums_1.PayloadType.Multipart: return 'Multipart';\n case enums_1.PayloadType.Control: return 'Control';\n default: return `Unknown (0x${payloadType.toString(16)})`;\n }\n}\n/**\n * Get human-readable name for PayloadVersion enum value\n */\nfunction getPayloadVersionName(version) {\n switch (version) {\n case enums_1.PayloadVersion.Version1: return 'Version 1';\n case enums_1.PayloadVersion.Version2: return 'Version 2';\n case enums_1.PayloadVersion.Version3: return 'Version 3';\n case enums_1.PayloadVersion.Version4: return 'Version 4';\n default: return `Unknown (${version})`;\n }\n}\n/**\n * Get human-readable name for DeviceRole enum value\n */\nfunction getDeviceRoleName(role) {\n switch (role) {\n case enums_1.DeviceRole.Unknown: return 'Unknown';\n case enums_1.DeviceRole.ChatNode: return 'Chat Node';\n case enums_1.DeviceRole.Repeater: return 'Repeater';\n case enums_1.DeviceRole.RoomServer: return 'Room Server';\n case enums_1.DeviceRole.Sensor: return 'Sensor';\n default: return `Unknown (${role})`;\n }\n}\n/**\n * Get human-readable name for RequestType enum value\n */\nfunction getRequestTypeName(requestType) {\n switch (requestType) {\n case enums_1.RequestType.GetStats: return 'Get Stats';\n case enums_1.RequestType.Keepalive: return 'Keepalive (deprecated)';\n case enums_1.RequestType.GetTelemetryData: return 'Get Telemetry Data';\n case enums_1.RequestType.GetMinMaxAvgData: return 'Get Min/Max/Avg Data';\n case enums_1.RequestType.GetAccessList: return 'Get Access List';\n default: return `Unknown (${requestType})`;\n }\n}\n/**\n * Get human-readable name for ControlSubType enum value\n */\nfunction getControlSubTypeName(subType) {\n switch (subType) {\n case enums_1.ControlSubType.NodeDiscoverReq: return 'Node Discover Request';\n case enums_1.ControlSubType.NodeDiscoverResp: return 'Node Discover Response';\n default: return `Unknown (0x${subType.toString(16)})`;\n }\n}\n//# sourceMappingURL=enum-names.js.map","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChannelCrypto = void 0;\nconst crypto_js_1 = require(\"crypto-js\");\nconst hex_1 = require(\"../utils/hex\");\nclass ChannelCrypto {\n /**\n * Decrypt GroupText message using MeshCore algorithm:\n * - HMAC-SHA256 verification with 2-byte MAC\n * - AES-128 ECB decryption\n */\n static decryptGroupTextMessage(ciphertext, cipherMac, channelKey) {\n try {\n // convert hex strings to byte arrays\n const channelKey16 = (0, hex_1.hexToBytes)(channelKey);\n const macBytes = (0, hex_1.hexToBytes)(cipherMac);\n // MeshCore uses 32-byte channel secret: 16-byte key + 16 zero bytes\n const channelSecret = new Uint8Array(32);\n channelSecret.set(channelKey16, 0);\n // Step 1: Verify HMAC-SHA256 using full 32-byte channel secret\n const calculatedMac = (0, crypto_js_1.HmacSHA256)(crypto_js_1.enc.Hex.parse(ciphertext), crypto_js_1.enc.Hex.parse((0, hex_1.bytesToHex)(channelSecret)));\n const calculatedMacBytes = (0, hex_1.hexToBytes)(calculatedMac.toString(crypto_js_1.enc.Hex));\n const calculatedMacFirst2 = calculatedMacBytes.slice(0, 2);\n if (calculatedMacFirst2[0] !== macBytes[0] || calculatedMacFirst2[1] !== macBytes[1]) {\n return { success: false, error: 'MAC verification failed' };\n }\n // Step 2: Decrypt using AES-128 ECB with first 16 bytes of channel secret\n const keyWords = crypto_js_1.enc.Hex.parse(channelKey);\n const ciphertextWords = crypto_js_1.enc.Hex.parse(ciphertext);\n const decrypted = crypto_js_1.AES.decrypt(crypto_js_1.lib.CipherParams.create({ ciphertext: ciphertextWords }), keyWords, { mode: crypto_js_1.mode.ECB, padding: crypto_js_1.pad.NoPadding });\n const decryptedBytes = (0, hex_1.hexToBytes)(decrypted.toString(crypto_js_1.enc.Hex));\n if (!decryptedBytes || decryptedBytes.length < 5) {\n return { success: false, error: 'Decrypted content too short' };\n }\n // parse MeshCore format: timestamp(4) + flags(1) + message_text\n const timestamp = decryptedBytes[0] |\n (decryptedBytes[1] << 8) |\n (decryptedBytes[2] << 16) |\n (decryptedBytes[3] << 24);\n const flagsAndAttempt = decryptedBytes[4];\n // extract message text with UTF-8 decoding\n const messageBytes = decryptedBytes.slice(5);\n const decoder = new TextDecoder('utf-8');\n let messageText = decoder.decode(messageBytes);\n // remove null terminator if present\n const nullIndex = messageText.indexOf('\\0');\n if (nullIndex >= 0) {\n messageText = messageText.substring(0, nullIndex);\n }\n // parse sender and message (format: \"sender: message\")\n const colonIndex = messageText.indexOf(': ');\n let sender;\n let content;\n if (colonIndex > 0 && colonIndex < 50) {\n const potentialSender = messageText.substring(0, colonIndex);\n if (!/[:\\[\\]]/.test(potentialSender)) {\n sender = potentialSender;\n content = messageText.substring(colonIndex + 2);\n }\n else {\n content = messageText;\n }\n }\n else {\n content = messageText;\n }\n return {\n success: true,\n data: {\n timestamp,\n flags: flagsAndAttempt,\n sender,\n message: content\n }\n };\n }\n catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'Decryption failed' };\n }\n }\n /**\n * Calculate MeshCore channel hash from secret key\n * Returns the first byte of SHA256(secret) as hex string\n */\n static calculateChannelHash(secretKeyHex) {\n const hash = (0, crypto_js_1.SHA256)(crypto_js_1.enc.Hex.parse(secretKeyHex));\n const hashBytes = (0, hex_1.hexToBytes)(hash.toString(crypto_js_1.enc.Hex));\n return hashBytes[0].toString(16).padStart(2, '0');\n }\n}\nexports.ChannelCrypto = ChannelCrypto;\n//# sourceMappingURL=channel-crypto.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeshCoreKeyStore = void 0;\nconst channel_crypto_1 = require(\"./channel-crypto\");\nclass MeshCoreKeyStore {\n constructor(initialKeys) {\n this.nodeKeys = new Map();\n // internal map for hash -> multiple keys (collision handling)\n this.channelHashToKeys = new Map();\n if (initialKeys?.channelSecrets) {\n this.addChannelSecrets(initialKeys.channelSecrets);\n }\n if (initialKeys?.nodeKeys) {\n Object.entries(initialKeys.nodeKeys).forEach(([pubKey, privKey]) => {\n this.addNodeKey(pubKey, privKey);\n });\n }\n }\n addNodeKey(publicKey, privateKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n this.nodeKeys.set(normalizedPubKey, privateKey);\n }\n hasChannelKey(channelHash) {\n const normalizedHash = channelHash.toLowerCase();\n return this.channelHashToKeys.has(normalizedHash);\n }\n hasNodeKey(publicKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n return this.nodeKeys.has(normalizedPubKey);\n }\n /**\n * Get all channel keys that match the given channel hash (handles collisions)\n */\n getChannelKeys(channelHash) {\n const normalizedHash = channelHash.toLowerCase();\n return this.channelHashToKeys.get(normalizedHash) || [];\n }\n getNodeKey(publicKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n return this.nodeKeys.get(normalizedPubKey);\n }\n /**\n * Add channel keys by secret keys (new simplified API)\n * Automatically calculates channel hashes\n */\n addChannelSecrets(secretKeys) {\n for (const secretKey of secretKeys) {\n const channelHash = channel_crypto_1.ChannelCrypto.calculateChannelHash(secretKey).toLowerCase();\n // Handle potential hash collisions\n if (!this.channelHashToKeys.has(channelHash)) {\n this.channelHashToKeys.set(channelHash, []);\n }\n this.channelHashToKeys.get(channelHash).push(secretKey);\n }\n }\n}\nexports.MeshCoreKeyStore = MeshCoreKeyStore;\n//# sourceMappingURL=key-manager.js.map","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 4KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const privKey = ed.utils.randomPrivateKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(privKey); // Sync methods are also present\n const signature = await ed.signAsync(message, privKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d } = ed25519_CURVE;\nconst h = 8n; // cofactor\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\n// error helper, messes-up stack trace\nconst err = (m = '') => {\n throw new Error(m);\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** assert is Uint8Array (of specific length) */\nconst abytes = (a, l) => !isBytes(a) || (typeof l === 'number' && l > 0 && a.length !== l)\n ? err('Uint8Array expected')\n : a;\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\n/** normalize hex or ui8a to ui8a */\nconst toU8 = (a, len) => abytes(isStr(a) ? hexToBytes(a) : u8fr(abytes(a)), len);\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst arange = (n, min, max, msg = 'bad number: out of range') => isBig(n) && min <= n && n < max ? n : err(msg);\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using eucledian GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = etc[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n ex;\n ey;\n ez;\n et;\n constructor(ex, ey, ez, et) {\n const max = B256;\n this.ex = arange(ex, 0n, max);\n this.ey = arange(ey, 0n, max);\n this.ez = arange(ez, 1n, max);\n this.et = arange(et, 0n, max);\n Object.freeze(this);\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n arange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { ex: X, ey: Y, ez: Z, et: T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n throw new Error('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const { ex: X2, ey: Y2, ez: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.ex), this.ey, this.ez, M(-this.et));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n const { ex: X2, ey: Y2, ez: Z2, et: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n arange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { ex: x, ey: y, ez: z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n return { x: M(x * iz), y: M(y * iz) };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n } // encode to hex string\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // multiply by big number CURVE.n\n let p = this.multiply(N / 2n, false).double(); // ensures the point is not \"bad\".\n if (N % 2n)\n p = p.add(this); // P^(N+1) // P*N == (P*(N/2))*2+P\n return p.is0();\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(toU8(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n toRawBytes() {\n return this.toBytes();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(arange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\nconst sha512a = (...m) => etc.sha512Async(...m); // Async SHA512\nconst sha512s = (...m) => callHash('sha512Sync')(...m);\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // private key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, L)).then(hash2extK);\nconst getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, L)));\n/** Creates 32-byte ed25519 public key from 32-byte private key. Async. */\nconst getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte private key. To use, set `etc.sha512Sync` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\nconst _sign = (e, rBytes, msg) => {\n // sign() shared code\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message (NOT message hash) using private key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (msg, privKey) => {\n const m = toU8(msg);\n const e = await getExtendedPublicKeyAsync(privKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message (NOT message hash) using private key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (msg, privKey) => {\n const m = toU8(msg);\n const e = getExtendedPublicKey(privKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst veriOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = veriOpts) => {\n sig = toU8(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = toU8(msg); // Message hex str/Bytes\n pub = toU8(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromHex(pub, zip215); // public key A decoded\n R = Point.fromHex(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (s, m, p, opts = veriOpts) => hashFinishA(_verify(s, m, p, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (s, m, p, opts = veriOpts) => hashFinishS(_verify(s, m, p, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n sha512Async: async (...messages) => {\n const s = subtle();\n const m = concatBytes(...messages);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512Sync: undefined,\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomPrivateKey: () => randomBytes(L),\n precompute: (w = 8, p = G) => {\n p.multiply(3n);\n w;\n return p;\n }, // no-op\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n } // split if bits > max: +224 => 256-32\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { ed25519_CURVE as CURVE, etc, Point as ExtendedPoint, getPublicKey, getPublicKeyAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","var OrlpEd25519 = (() => {\n var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n return (\nasync function(moduleArg = {}) {\n var moduleRtn;\n\nvar Module=moduleArg;var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!=\"undefined\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&process.versions?.node&&process.type!=\"renderer\";var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");scriptDirectory=__dirname+\"/\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith(\"file://\");var readyPromiseResolve,readyPromiseReject;var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"b\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"orlp-ed25519.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports[\"a\"];updateMemoryViews();assignWasmExports(wasmExports);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\";var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"]}Module[\"ccall\"]=ccall;Module[\"cwrap\"]=cwrap;var _orlp_derive_public_key,_orlp_validate_keypair,_orlp_sign,_orlp_verify,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current;function assignWasmExports(wasmExports){Module[\"_orlp_derive_public_key\"]=_orlp_derive_public_key=wasmExports[\"c\"];Module[\"_orlp_validate_keypair\"]=_orlp_validate_keypair=wasmExports[\"d\"];Module[\"_orlp_sign\"]=_orlp_sign=wasmExports[\"e\"];Module[\"_orlp_verify\"]=_orlp_verify=wasmExports[\"f\"];__emscripten_stack_restore=wasmExports[\"g\"];__emscripten_stack_alloc=wasmExports[\"h\"];_emscripten_stack_get_current=wasmExports[\"i\"]}var wasmImports={};var wasmExports=await createWasm();function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}function preInit(){if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}preInit();run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n\n\n return moduleRtn;\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object') {\n module.exports = OrlpEd25519;\n // This default export looks redundant, but it allows TS to import this\n // commonjs style module.\n module.exports.default = OrlpEd25519;\n} else if (typeof define === 'function' && define['amd'])\n define([], () => OrlpEd25519);\n","\"use strict\";\n// WebAssembly wrapper for orlp/ed25519 key derivation\n// This provides the exact orlp algorithm for JavaScript\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.derivePublicKey = derivePublicKey;\nexports.validateKeyPair = validateKeyPair;\nexports.sign = sign;\nexports.verify = verify;\nconst hex_1 = require(\"../utils/hex\");\n// Import the generated WASM module\nconst OrlpEd25519 = require('../../lib/orlp-ed25519.js');\n/**\n * Get a fresh WASM instance\n * Loads a fresh instance each time because the WASM module could behave unpredictably otherwise\n */\nasync function getWasmInstance() {\n return await OrlpEd25519();\n}\n/**\n * Derive Ed25519 public key from private key using the exact orlp/ed25519 algorithm\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\nasync function derivePublicKey(privateKeyHex) {\n const wasmModule = await getWasmInstance();\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Allocate memory buffers directly in WASM heap\n const privateKeyPtr = 1024; // Use fixed memory locations\n const publicKeyPtr = 1024 + 64;\n // Copy private key to WASM memory\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n // Call the orlp key derivation function\n const result = wasmModule.ccall('orlp_derive_public_key', 'number', ['number', 'number'], [publicKeyPtr, privateKeyPtr]);\n if (result !== 0) {\n throw new Error('orlp key derivation failed: invalid private key');\n }\n // Read the public key from WASM memory\n const publicKeyBytes = new Uint8Array(32);\n publicKeyBytes.set(wasmModule.HEAPU8.subarray(publicKeyPtr, publicKeyPtr + 32));\n return (0, hex_1.bytesToHex)(publicKeyBytes);\n}\n/**\n * Validate that a private key and public key pair match using orlp/ed25519\n *\n * @param privateKeyHex - 64-byte private key in hex format\n * @param expectedPublicKeyHex - 32-byte public key in hex format\n * @returns true if the keys match, false otherwise\n */\nasync function validateKeyPair(privateKeyHex, expectedPublicKeyHex) {\n try {\n const wasmModule = await getWasmInstance();\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n const expectedPublicKeyBytes = (0, hex_1.hexToBytes)(expectedPublicKeyHex);\n if (privateKeyBytes.length !== 64) {\n return false;\n }\n if (expectedPublicKeyBytes.length !== 32) {\n return false;\n }\n // Allocate memory buffers directly in WASM heap\n const privateKeyPtr = 2048; // Use different fixed memory locations\n const publicKeyPtr = 2048 + 64;\n // Copy keys to WASM memory\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n wasmModule.HEAPU8.set(expectedPublicKeyBytes, publicKeyPtr);\n // Call the validation function (note: C function expects public_key first, then private_key)\n const result = wasmModule.ccall('orlp_validate_keypair', 'number', ['number', 'number'], [publicKeyPtr, privateKeyPtr]);\n return result === 1;\n }\n catch (error) {\n // Invalid hex strings or other errors should return false\n return false;\n }\n}\n/**\n * Sign a message using Ed25519 with orlp/ed25519 implementation\n *\n * @param messageHex - Message to sign in hex format\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns 64-byte signature in hex format\n */\nasync function sign(messageHex, privateKeyHex, publicKeyHex) {\n const wasmModule = await getWasmInstance();\n const messageBytes = (0, hex_1.hexToBytes)(messageHex);\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n const publicKeyBytes = (0, hex_1.hexToBytes)(publicKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(`Invalid public key length: expected 32 bytes, got ${publicKeyBytes.length}`);\n }\n // Allocate memory buffers with large gaps to avoid conflicts with scratch space\n const messagePtr = 100000;\n const privateKeyPtr = 200000;\n const publicKeyPtr = 300000;\n const signaturePtr = 400000;\n // Copy data to WASM memory\n wasmModule.HEAPU8.set(messageBytes, messagePtr);\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n wasmModule.HEAPU8.set(publicKeyBytes, publicKeyPtr);\n // Call orlp_sign\n wasmModule.ccall('orlp_sign', 'void', ['number', 'number', 'number', 'number', 'number'], [signaturePtr, messagePtr, messageBytes.length, publicKeyPtr, privateKeyPtr]);\n // Read signature\n const signatureBytes = new Uint8Array(64);\n signatureBytes.set(wasmModule.HEAPU8.subarray(signaturePtr, signaturePtr + 64));\n return (0, hex_1.bytesToHex)(signatureBytes);\n}\n/**\n * Verify an Ed25519 signature using orlp/ed25519 implementation\n *\n * @param signatureHex - 64-byte signature in hex format\n * @param messageHex - Message that was signed in hex format\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns true if signature is valid, false otherwise\n */\nasync function verify(signatureHex, messageHex, publicKeyHex) {\n try {\n const wasmModule = await getWasmInstance();\n const signatureBytes = (0, hex_1.hexToBytes)(signatureHex);\n const messageBytes = (0, hex_1.hexToBytes)(messageHex);\n const publicKeyBytes = (0, hex_1.hexToBytes)(publicKeyHex);\n if (signatureBytes.length !== 64) {\n return false;\n }\n if (publicKeyBytes.length !== 32) {\n return false;\n }\n // Allocate memory buffers with large gaps to avoid conflicts with scratch space\n const messagePtr = 500000;\n const signaturePtr = 600000;\n const publicKeyPtr = 700000;\n // Copy data to WASM memory\n wasmModule.HEAPU8.set(signatureBytes, signaturePtr);\n wasmModule.HEAPU8.set(messageBytes, messagePtr);\n wasmModule.HEAPU8.set(publicKeyBytes, publicKeyPtr);\n // Call the orlp verify function\n const result = wasmModule.ccall('orlp_verify', 'number', ['number', 'number', 'number', 'number'], [signaturePtr, messagePtr, messageBytes.length, publicKeyPtr]);\n return result === 1;\n }\n catch (error) {\n return false;\n }\n}\n//# sourceMappingURL=orlp-ed25519-wasm.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Ed25519SignatureVerifier = void 0;\nconst ed25519 = __importStar(require(\"@noble/ed25519\"));\nconst hex_1 = require(\"../utils/hex\");\nconst orlp_ed25519_wasm_1 = require(\"./orlp-ed25519-wasm\");\n// Cross-platform SHA-512 implementation\nasync function sha512Hash(data) {\n // Browser environment - use Web Crypto API\n if (typeof globalThis !== 'undefined' && globalThis.crypto && globalThis.crypto.subtle) {\n const hashBuffer = await globalThis.crypto.subtle.digest('SHA-512', data);\n return new Uint8Array(hashBuffer);\n }\n // Node.js environment - use crypto module\n if (typeof require !== 'undefined') {\n try {\n const { createHash } = require('crypto');\n return createHash('sha512').update(data).digest();\n }\n catch (error) {\n // Fallback for environments where require is not available\n }\n }\n throw new Error('No SHA-512 implementation available');\n}\nfunction sha512HashSync(data) {\n // Node.js environment - use crypto module\n if (typeof require !== 'undefined') {\n try {\n const { createHash } = require('crypto');\n return createHash('sha512').update(data).digest();\n }\n catch (error) {\n // Fallback\n }\n }\n // Browser environment fallback - use crypto-js for sync operation\n try {\n const CryptoJS = require('crypto-js');\n const wordArray = CryptoJS.lib.WordArray.create(data);\n const hash = CryptoJS.SHA512(wordArray);\n const hashBytes = new Uint8Array(64);\n // Convert CryptoJS hash to Uint8Array\n for (let i = 0; i < 16; i++) {\n const word = hash.words[i] || 0;\n hashBytes[i * 4] = (word >>> 24) & 0xff;\n hashBytes[i * 4 + 1] = (word >>> 16) & 0xff;\n hashBytes[i * 4 + 2] = (word >>> 8) & 0xff;\n hashBytes[i * 4 + 3] = word & 0xff;\n }\n return hashBytes;\n }\n catch (error) {\n // Final fallback - this should not happen since crypto-js is a dependency\n throw new Error('No SHA-512 implementation available for synchronous operation');\n }\n}\n// Set up SHA-512 for @noble/ed25519\ned25519.etc.sha512Async = sha512Hash;\n// Always set up sync version - @noble/ed25519 requires it\n// It will throw in browser environments, which @noble/ed25519 can handle\ntry {\n ed25519.etc.sha512Sync = sha512HashSync;\n}\ncatch (error) {\n console.debug('Could not set up synchronous SHA-512:', error);\n}\nclass Ed25519SignatureVerifier {\n /**\n * Verify an Ed25519 signature for MeshCore advertisement packets\n *\n * According to MeshCore protocol, the signed message for advertisements is:\n * timestamp (4 bytes LE) + flags (1 byte) + location (8 bytes LE, if present) + name (variable, if present)\n */\n static async verifyAdvertisementSignature(publicKeyHex, signatureHex, timestamp, appDataHex) {\n try {\n // Convert hex strings to Uint8Arrays\n const publicKey = (0, hex_1.hexToBytes)(publicKeyHex);\n const signature = (0, hex_1.hexToBytes)(signatureHex);\n const appData = (0, hex_1.hexToBytes)(appDataHex);\n // Construct the signed message according to MeshCore format\n const message = this.constructAdvertSignedMessage(publicKeyHex, timestamp, appData);\n // Verify the signature using noble-ed25519\n return await ed25519.verify(signature, message, publicKey);\n }\n catch (error) {\n console.error('Ed25519 signature verification failed:', error);\n return false;\n }\n }\n /**\n * Construct the signed message for MeshCore advertisements\n * According to MeshCore source (Mesh.cpp lines 242-248):\n * Format: public_key (32 bytes) + timestamp (4 bytes LE) + app_data (variable length)\n */\n static constructAdvertSignedMessage(publicKeyHex, timestamp, appData) {\n const publicKey = (0, hex_1.hexToBytes)(publicKeyHex);\n // Timestamp (4 bytes, little-endian)\n const timestampBytes = new Uint8Array(4);\n timestampBytes[0] = timestamp & 0xFF;\n timestampBytes[1] = (timestamp >> 8) & 0xFF;\n timestampBytes[2] = (timestamp >> 16) & 0xFF;\n timestampBytes[3] = (timestamp >> 24) & 0xFF;\n // Concatenate: public_key + timestamp + app_data\n const message = new Uint8Array(32 + 4 + appData.length);\n message.set(publicKey, 0);\n message.set(timestampBytes, 32);\n message.set(appData, 36);\n return message;\n }\n /**\n * Get a human-readable description of what was signed\n */\n static getSignedMessageDescription(publicKeyHex, timestamp, appDataHex) {\n return `Public Key: ${publicKeyHex} + Timestamp: ${timestamp} (${new Date(timestamp * 1000).toISOString()}) + App Data: ${appDataHex}`;\n }\n /**\n * Get the hex representation of the signed message for debugging\n */\n static getSignedMessageHex(publicKeyHex, timestamp, appDataHex) {\n const appData = (0, hex_1.hexToBytes)(appDataHex);\n const message = this.constructAdvertSignedMessage(publicKeyHex, timestamp, appData);\n return (0, hex_1.bytesToHex)(message);\n }\n /**\n * Derive Ed25519 public key from orlp/ed25519 private key format\n * This implements the same algorithm as orlp/ed25519's ed25519_derive_pub()\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\n static async derivePublicKey(privateKeyHex) {\n try {\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Use the orlp/ed25519 WebAssembly implementation\n return await (0, orlp_ed25519_wasm_1.derivePublicKey)(privateKeyHex);\n }\n catch (error) {\n throw new Error(`Failed to derive public key: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n /**\n * Derive Ed25519 public key from orlp/ed25519 private key format (synchronous version)\n * This implements the same algorithm as orlp/ed25519's ed25519_derive_pub()\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\n static derivePublicKeySync(privateKeyHex) {\n try {\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Note: WASM operations are async, so this sync version throws an error\n throw new Error('Synchronous key derivation not supported with WASM. Use derivePublicKey() instead.');\n }\n catch (error) {\n throw new Error(`Failed to derive public key: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n /**\n * Validate that a private key correctly derives to the expected public key\n *\n * @param privateKeyHex - 64-byte private key in hex format\n * @param expectedPublicKeyHex - Expected 32-byte public key in hex format\n * @returns true if the private key derives to the expected public key\n */\n static async validateKeyPair(privateKeyHex, expectedPublicKeyHex) {\n try {\n return await (0, orlp_ed25519_wasm_1.validateKeyPair)(privateKeyHex, expectedPublicKeyHex);\n }\n catch (error) {\n return false;\n }\n }\n}\nexports.Ed25519SignatureVerifier = Ed25519SignatureVerifier;\n//# sourceMappingURL=ed25519-verifier.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AdvertPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nconst enum_names_1 = require(\"../../utils/enum-names\");\nconst ed25519_verifier_1 = require(\"../../crypto/ed25519-verifier\");\nclass AdvertPayloadDecoder {\n static decode(payload, options) {\n try {\n // start of appdata section: public_key(32) + timestamp(4) + signature(64) + flags(1) = 101 bytes\n if (payload.length < 101) {\n const result = {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Advertisement payload too short'],\n publicKey: '',\n timestamp: 0,\n signature: '',\n appData: {\n flags: 0,\n deviceRole: enums_1.DeviceRole.ChatNode,\n hasLocation: false,\n hasName: false\n }\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Advert Data',\n description: 'Advert payload too short (minimum 101 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let currentOffset = 0;\n // parse advertisement structure from payloads.md\n const publicKey = (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 32));\n if (options?.includeSegments) {\n segments.push({\n name: 'Public Key',\n description: 'Ed25519 public key',\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 31,\n value: publicKey\n });\n }\n currentOffset += 32;\n const timestamp = this.readUint32LE(payload, currentOffset);\n if (options?.includeSegments) {\n const timestampDate = new Date(timestamp * 1000);\n segments.push({\n name: 'Timestamp',\n description: `${timestamp} (${timestampDate.toISOString().slice(0, 19)}Z)`,\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 3,\n value: (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 4))\n });\n }\n currentOffset += 4;\n const signature = (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 64));\n if (options?.includeSegments) {\n segments.push({\n name: 'Signature',\n description: 'Ed25519 signature',\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 63,\n value: signature\n });\n }\n currentOffset += 64;\n const flags = payload[currentOffset];\n if (options?.includeSegments) {\n const binaryStr = flags.toString(2).padStart(8, '0');\n const deviceRole = this.parseDeviceRole(flags);\n const roleName = (0, enum_names_1.getDeviceRoleName)(deviceRole);\n const flagDesc = ` | Bits 0-3 (Role): ${roleName} | Bit 4 (Location): ${!!(flags & enums_1.AdvertFlags.HasLocation) ? 'Yes' : 'No'} | Bit 7 (Name): ${!!(flags & enums_1.AdvertFlags.HasName) ? 'Yes' : 'No'}`;\n segments.push({\n name: 'App Flags',\n description: `Binary: ${binaryStr}${flagDesc}`,\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset,\n value: flags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n currentOffset += 1;\n const advert = {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n publicKey,\n timestamp,\n signature,\n appData: {\n flags,\n deviceRole: this.parseDeviceRole(flags),\n hasLocation: !!(flags & enums_1.AdvertFlags.HasLocation),\n hasName: !!(flags & enums_1.AdvertFlags.HasName)\n }\n };\n let offset = currentOffset;\n // location data (if HasLocation flag is set)\n if (flags & enums_1.AdvertFlags.HasLocation && payload.length >= offset + 8) {\n const lat = this.readInt32LE(payload, offset) / 1000000;\n const lon = this.readInt32LE(payload, offset + 4) / 1000000;\n advert.appData.location = {\n latitude: Math.round(lat * 1000000) / 1000000, // Keep precision\n longitude: Math.round(lon * 1000000) / 1000000\n };\n if (options?.includeSegments) {\n segments.push({\n name: 'Latitude',\n description: `${lat}° (${lat})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 4))\n });\n segments.push({\n name: 'Longitude',\n description: `${lon}° (${lon})`,\n startByte: segmentOffset + offset + 4,\n endByte: segmentOffset + offset + 7,\n value: (0, hex_1.bytesToHex)(payload.subarray(offset + 4, offset + 8))\n });\n }\n offset += 8;\n }\n // skip feature fields for now (HasFeature1, HasFeature2)\n if (flags & enums_1.AdvertFlags.HasFeature1)\n offset += 2;\n if (flags & enums_1.AdvertFlags.HasFeature2)\n offset += 2;\n // name data (if HasName flag is set)\n if (flags & enums_1.AdvertFlags.HasName && payload.length > offset) {\n const nameBytes = payload.subarray(offset);\n const rawName = new TextDecoder('utf-8').decode(nameBytes).replace(/\\0.*$/, '');\n advert.appData.name = this.sanitizeControlCharacters(rawName) || rawName;\n if (options?.includeSegments) {\n segments.push({\n name: 'Node Name',\n description: `Node name: \"${advert.appData.name}\"`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(nameBytes)\n });\n }\n }\n if (options?.includeSegments) {\n advert.segments = segments;\n }\n return advert;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode advertisement payload'],\n publicKey: '',\n timestamp: 0,\n signature: '',\n appData: {\n flags: 0,\n deviceRole: enums_1.DeviceRole.ChatNode,\n hasLocation: false,\n hasName: false\n }\n };\n }\n }\n /**\n * Decode advertisement payload with signature verification\n */\n static async decodeWithVerification(payload, options) {\n // First decode normally\n const advert = this.decode(payload, options);\n if (!advert || !advert.isValid) {\n return advert;\n }\n // Perform signature verification\n try {\n // Extract app_data from the payload (everything after public_key + timestamp + signature)\n const appDataStart = 32 + 4 + 64; // public_key + timestamp + signature\n const appDataBytes = payload.subarray(appDataStart);\n const appDataHex = (0, hex_1.bytesToHex)(appDataBytes);\n const signatureValid = await ed25519_verifier_1.Ed25519SignatureVerifier.verifyAdvertisementSignature(advert.publicKey, advert.signature, advert.timestamp, appDataHex);\n advert.signatureValid = signatureValid;\n if (!signatureValid) {\n advert.signatureError = 'Ed25519 signature verification failed';\n advert.isValid = false;\n if (!advert.errors) {\n advert.errors = [];\n }\n advert.errors.push('Invalid Ed25519 signature');\n }\n }\n catch (error) {\n advert.signatureValid = false;\n advert.signatureError = error instanceof Error ? error.message : 'Signature verification error';\n advert.isValid = false;\n if (!advert.errors) {\n advert.errors = [];\n }\n advert.errors.push('Signature verification failed: ' + (error instanceof Error ? error.message : 'Unknown error'));\n }\n return advert;\n }\n static parseDeviceRole(flags) {\n const roleValue = flags & 0x0F;\n switch (roleValue) {\n case 0x01: return enums_1.DeviceRole.ChatNode;\n case 0x02: return enums_1.DeviceRole.Repeater;\n case 0x03: return enums_1.DeviceRole.RoomServer;\n case 0x04: return enums_1.DeviceRole.Sensor;\n default: return enums_1.DeviceRole.ChatNode;\n }\n }\n static readUint32LE(buffer, offset) {\n return buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24);\n }\n static readInt32LE(buffer, offset) {\n const value = this.readUint32LE(buffer, offset);\n // convert unsigned to signed\n return value > 0x7FFFFFFF ? value - 0x100000000 : value;\n }\n static sanitizeControlCharacters(value) {\n if (!value)\n return null;\n const sanitized = value.trim().replace(/[\\x00-\\x1F\\x7F]/g, '');\n return sanitized || null;\n }\n}\nexports.AdvertPayloadDecoder = AdvertPayloadDecoder;\n//# sourceMappingURL=advert.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TracePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass TracePayloadDecoder {\n static decode(payload, pathData, options) {\n try {\n if (payload.length < 9) {\n const result = {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Trace payload too short (need at least tag(4) + auth(4) + flags(1))'],\n traceTag: '00000000',\n authCode: 0,\n flags: 0,\n pathHashes: []\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Trace Data',\n description: 'Trace payload too short (minimum 9 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n // Trace Tag (4 bytes) - unique identifier\n const traceTagRaw = this.readUint32LE(payload, offset);\n const traceTag = (0, hex_1.numberToHex)(traceTagRaw, 8);\n if (options?.includeSegments) {\n segments.push({\n name: 'Trace Tag',\n description: `Unique identifier for this trace: 0x${traceTagRaw.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Auth Code (4 bytes) - authentication/verification code \n const authCode = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Auth Code',\n description: `Authentication/verification code: ${authCode}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Flags (1 byte) - application-defined control flags\n const flags = payload[offset];\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Application-defined control flags: 0x${flags.toString(16).padStart(2, '0')} (${flags.toString(2).padStart(8, '0')}b)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: flags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // remaining bytes are path hashes (node hashes in the trace path)\n const pathHashes = [];\n const pathHashesStart = offset;\n while (offset < payload.length) {\n pathHashes.push((0, hex_1.byteToHex)(payload[offset]));\n offset++;\n }\n if (options?.includeSegments && pathHashes.length > 0) {\n const pathHashesDisplay = pathHashes.join(' ');\n segments.push({\n name: 'Path Hashes',\n description: `Node hashes in trace path: ${pathHashesDisplay}`,\n startByte: segmentOffset + pathHashesStart,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload.slice(pathHashesStart))\n });\n }\n // extract SNR values from path field for TRACE packets\n let snrValues;\n if (pathData && pathData.length > 0) {\n snrValues = pathData.map(hexByte => {\n const byteValue = parseInt(hexByte, 16);\n // convert unsigned byte to signed int8 (SNR values are stored as signed int8 * 4)\n const snrSigned = byteValue > 127 ? byteValue - 256 : byteValue;\n return snrSigned / 4.0; // convert to dB\n });\n }\n const result = {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n traceTag,\n authCode,\n flags,\n pathHashes,\n snrValues\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode trace payload'],\n traceTag: '00000000',\n authCode: 0,\n flags: 0,\n pathHashes: []\n };\n }\n }\n static readUint32LE(buffer, offset) {\n return buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24);\n }\n}\nexports.TracePayloadDecoder = TracePayloadDecoder;\n//# sourceMappingURL=trace.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupTextPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst channel_crypto_1 = require(\"../../crypto/channel-crypto\");\nconst hex_1 = require(\"../../utils/hex\");\nclass GroupTextPayloadDecoder {\n static decode(payload, options) {\n try {\n if (payload.length < 3) {\n const result = {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['GroupText payload too short (need at least channel_hash(1) + MAC(2))'],\n channelHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid GroupText Data',\n description: 'GroupText payload too short (minimum 3 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // channel hash (1 byte) - first byte of SHA256 of channel's shared key\n const channelHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Channel Hash',\n description: 'First byte of SHA256 of channel\\'s shared key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: channelHash\n });\n }\n offset += 1;\n // MAC (2 bytes) - message authentication code\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // ciphertext (remaining bytes) - encrypted message\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted message content (timestamp + flags + message)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const groupText = {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n channelHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 3\n };\n // attempt decryption if key store is provided\n if (options?.keyStore && options.keyStore.hasChannelKey(channelHash)) {\n // try all possible keys for this hash (handles collisions)\n const channelKeys = options.keyStore.getChannelKeys(channelHash);\n for (const channelKey of channelKeys) {\n const decryptionResult = channel_crypto_1.ChannelCrypto.decryptGroupTextMessage(ciphertext, cipherMac, channelKey);\n if (decryptionResult.success && decryptionResult.data) {\n groupText.decrypted = {\n timestamp: decryptionResult.data.timestamp,\n flags: decryptionResult.data.flags,\n sender: decryptionResult.data.sender,\n message: decryptionResult.data.message\n };\n break; // stop trying keys once we find one that works\n }\n }\n }\n if (options?.includeSegments) {\n groupText.segments = segments;\n }\n return groupText;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode GroupText payload'],\n channelHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.GroupTextPayloadDecoder = GroupTextPayloadDecoder;\n//# sourceMappingURL=group-text.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass RequestPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Request payload structure:\n // - destination hash (1 byte)\n // - source hash (1 byte)\n // - cipher MAC (2 bytes)\n // - ciphertext (rest of payload) - contains encrypted timestamp, request type, and request data\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Request payload too short (minimum 4 bytes: dest hash + source hash + MAC)'],\n timestamp: 0,\n requestType: enums_1.RequestType.GetStats,\n requestData: '',\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: ''\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Request Data',\n description: 'Request payload too short (minimum 4 bytes required: 1 for dest hash + 1 for source hash + 2 for MAC)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Parse destination hash (1 byte)\n const destinationHash = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 1));\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: `First byte of destination node public key: 0x${destinationHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Parse source hash (1 byte)\n const sourceHash = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 1));\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: `First byte of source node public key: 0x${sourceHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // Parse cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: `MAC for encrypted data verification (2 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Parse ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: `Encrypted message data (${payload.length - offset} bytes). Contains encrypted plaintext with this structure:\n• Timestamp (4 bytes) - send time as unix timestamp\n• Request Type (1 byte) - type of request (GetStats, GetTelemetryData, etc.)\n• Request Data (remaining bytes) - additional request-specific data`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n timestamp: 0, // Encrypted, cannot be parsed without decryption\n requestType: enums_1.RequestType.GetStats, // Encrypted, cannot be determined without decryption\n requestData: '',\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode request payload'],\n timestamp: 0,\n requestType: enums_1.RequestType.GetStats,\n requestData: '',\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: ''\n };\n }\n }\n}\nexports.RequestPayloadDecoder = RequestPayloadDecoder;\n//# sourceMappingURL=request.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ResponsePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass ResponsePayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Response payload structure:\n // - destination_hash (1 byte)\n // - source_hash (1 byte)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Response payload too short (minimum 4 bytes: dest + source + MAC)'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Response Data',\n description: 'Response payload too short (minimum 4 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Destination Hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: 'First byte of destination node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // source hash (1 byte)\n const sourceHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: 'First byte of source node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data in next field',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted response data (tag + content)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 4\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode response payload'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.ResponsePayloadDecoder = ResponsePayloadDecoder;\n//# sourceMappingURL=response.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnonRequestPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass AnonRequestPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - AnonRequest payload structure:\n // - destination_hash (1 byte)\n // - sender_public_key (32 bytes)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 35) {\n const result = {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)'],\n destinationHash: '',\n senderPublicKey: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid AnonRequest Data',\n description: 'AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Parse destination hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[0]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: `First byte of destination node public key: 0x${destinationHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Parse sender public key (32 bytes)\n const senderPublicKey = (0, hex_1.bytesToHex)(payload.subarray(1, 33));\n if (options?.includeSegments) {\n segments.push({\n name: 'Sender Public Key',\n description: `Ed25519 public key of the sender (32 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 31,\n value: senderPublicKey\n });\n }\n offset += 32;\n // Parse cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(33, 35));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: `MAC for encrypted data verification (2 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Parse ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(35));\n if (options?.includeSegments && payload.length > 35) {\n segments.push({\n name: 'Ciphertext',\n description: `Encrypted message data (${payload.length - 35} bytes). Contains encrypted plaintext with this structure:\n• Timestamp (4 bytes) - send time as unix timestamp\n• Sync Timestamp (4 bytes) - room server only, sender's \"sync messages SINCE x\" timestamp \n• Password (remaining bytes) - password for repeater/room`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n senderPublicKey,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 35\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode AnonRequest payload'],\n destinationHash: '',\n senderPublicKey: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.AnonRequestPayloadDecoder = AnonRequestPayloadDecoder;\n//# sourceMappingURL=anon-request.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AckPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass AckPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Ack payload structure:\n // - checksum (4 bytes) - CRC checksum of message timestamp, text, and sender pubkey\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Ack payload too short (minimum 4 bytes for checksum)'],\n checksum: ''\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Ack Data',\n description: 'Ack payload too short (minimum 4 bytes required for checksum)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n // parse checksum (4 bytes as hex)\n const checksum = (0, hex_1.bytesToHex)(payload.subarray(0, 4));\n if (options?.includeSegments) {\n segments.push({\n name: 'Checksum',\n description: `CRC checksum of message timestamp, text, and sender pubkey: 0x${checksum}`,\n startByte: segmentOffset,\n endByte: segmentOffset + 3,\n value: checksum\n });\n }\n // any additional data (if present)\n if (options?.includeSegments && payload.length > 4) {\n segments.push({\n name: 'Additional Data',\n description: 'Extra data in Ack payload',\n startByte: segmentOffset + 4,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload.subarray(4))\n });\n }\n const result = {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n checksum\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode Ack payload'],\n checksum: ''\n };\n }\n }\n}\nexports.AckPayloadDecoder = AckPayloadDecoder;\n//# sourceMappingURL=ack.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass PathPayloadDecoder {\n static decode(payload) {\n try {\n // Based on MeshCore payloads.md - Path payload structure:\n // - path_length (1 byte)\n // - path (variable length) - list of node hashes (one byte each)\n // - extra_type (1 byte) - bundled payload type\n // - extra (rest of data) - bundled payload content\n if (payload.length < 2) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Path payload too short (minimum 2 bytes: path length + extra type)'],\n pathLength: 0,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n const pathLength = payload[0];\n if (payload.length < 1 + pathLength + 1) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [`Path payload too short (need ${1 + pathLength + 1} bytes for path length + path + extra type)`],\n pathLength,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n // Parse path hashes (one byte each)\n const pathHashes = [];\n for (let i = 0; i < pathLength; i++) {\n pathHashes.push((0, hex_1.byteToHex)(payload[1 + i]));\n }\n // Parse extra type (1 byte after path)\n const extraType = payload[1 + pathLength];\n // Parse extra data (remaining bytes)\n let extraData = '';\n if (payload.length > 1 + pathLength + 1) {\n extraData = (0, hex_1.bytesToHex)(payload.subarray(1 + pathLength + 1));\n }\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n pathLength,\n pathHashes,\n extraType,\n extraData\n };\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode Path payload'],\n pathLength: 0,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n }\n}\nexports.PathPayloadDecoder = PathPayloadDecoder;\n//# sourceMappingURL=path.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextMessagePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass TextMessagePayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - TextMessage payload structure:\n // - destination_hash (1 byte)\n // - source_hash (1 byte)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['TextMessage payload too short (minimum 4 bytes: dest + source + MAC)'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid TextMessage Data',\n description: 'TextMessage payload too short (minimum 4 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Destination Hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: 'First byte of destination node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Source Hash (1 byte)\n const sourceHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: 'First byte of source node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // Cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data in next field',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted message data (timestamp + message text)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 4\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode TextMessage payload'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.TextMessagePayloadDecoder = TextMessagePayloadDecoder;\n//# sourceMappingURL=text-message.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControlPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nconst enum_names_1 = require(\"../../utils/enum-names\");\nclass ControlPayloadDecoder {\n static decode(payload, options) {\n try {\n if (payload.length < 1) {\n return this.createErrorPayload('Control payload too short (minimum 1 byte required)', payload, options);\n }\n const rawFlags = payload[0];\n const subType = rawFlags & 0xF0; // upper 4 bits\n switch (subType) {\n case enums_1.ControlSubType.NodeDiscoverReq:\n return this.decodeDiscoverReq(payload, options);\n case enums_1.ControlSubType.NodeDiscoverResp:\n return this.decodeDiscoverResp(payload, options);\n default:\n return this.createErrorPayload(`Unknown control sub-type: 0x${subType.toString(16).padStart(2, '0')}`, payload, options);\n }\n }\n catch (error) {\n return this.createErrorPayload(error instanceof Error ? error.message : 'Failed to decode control payload', payload, options);\n }\n }\n static decodeDiscoverReq(payload, options) {\n const segments = [];\n const segmentOffset = options?.segmentOffset ?? 0;\n // Minimum size: flags(1) + type_filter(1) + tag(4) = 6 bytes\n if (payload.length < 6) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['DISCOVER_REQ payload too short (minimum 6 bytes required)'],\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags: payload[0],\n prefixOnly: false,\n typeFilter: 0,\n typeFilterNames: [],\n tag: 0,\n since: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid DISCOVER_REQ Data',\n description: 'DISCOVER_REQ payload too short (minimum 6 bytes required)',\n startByte: segmentOffset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n // Byte 0: flags - upper 4 bits is sub_type (0x8), lowest bit is prefix_only\n const rawFlags = payload[offset];\n const prefixOnly = (rawFlags & 0x01) !== 0;\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Sub-type: DISCOVER_REQ (0x8) | Prefix Only: ${prefixOnly}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: rawFlags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Byte 1: type_filter - bit for each ADV_TYPE_*\n const typeFilter = payload[offset];\n const typeFilterNames = this.parseTypeFilter(typeFilter);\n if (options?.includeSegments) {\n segments.push({\n name: 'Type Filter',\n description: `Filter mask: 0b${typeFilter.toString(2).padStart(8, '0')} | Types: ${typeFilterNames.length > 0 ? typeFilterNames.join(', ') : 'None'}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: typeFilter.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Bytes 2-5: tag (uint32, little endian)\n const tag = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Tag',\n description: `Random tag for response matching: 0x${tag.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Optional: Bytes 6-9: since (uint32, little endian) - epoch timestamp\n let since = 0;\n if (payload.length >= offset + 4) {\n since = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n const sinceDate = since > 0 ? new Date(since * 1000).toISOString().slice(0, 19) + 'Z' : 'N/A';\n segments.push({\n name: 'Since',\n description: `Filter timestamp: ${since} (${sinceDate})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n }\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags,\n prefixOnly,\n typeFilter,\n typeFilterNames,\n tag,\n since\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n static decodeDiscoverResp(payload, options) {\n const segments = [];\n const segmentOffset = options?.segmentOffset ?? 0;\n // Minimum size: flags(1) + snr(1) + tag(4) + pubkey(8 for prefix) = 14 bytes\n if (payload.length < 14) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['DISCOVER_RESP payload too short (minimum 14 bytes required)'],\n subType: enums_1.ControlSubType.NodeDiscoverResp,\n rawFlags: payload.length > 0 ? payload[0] : 0,\n nodeType: enums_1.DeviceRole.Unknown,\n nodeTypeName: 'Unknown',\n snr: 0,\n tag: 0,\n publicKey: '',\n publicKeyLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid DISCOVER_RESP Data',\n description: 'DISCOVER_RESP payload too short (minimum 14 bytes required)',\n startByte: segmentOffset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n // Byte 0: flags - upper 4 bits is sub_type (0x9), lower 4 bits is node_type\n const rawFlags = payload[offset];\n const nodeType = (rawFlags & 0x0F);\n const nodeTypeName = (0, enum_names_1.getDeviceRoleName)(nodeType);\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Sub-type: DISCOVER_RESP (0x9) | Node Type: ${nodeTypeName}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: rawFlags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Byte 1: snr (signed int8, represents SNR * 4)\n const snrRaw = payload[offset];\n const snrSigned = snrRaw > 127 ? snrRaw - 256 : snrRaw;\n const snr = snrSigned / 4.0;\n if (options?.includeSegments) {\n segments.push({\n name: 'SNR',\n description: `Inbound SNR: ${snr.toFixed(2)} dB (raw: ${snrRaw}, signed: ${snrSigned})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: snrRaw.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Bytes 2-5: tag (uint32, little endian) - reflected from request\n const tag = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Tag',\n description: `Reflected tag from request: 0x${tag.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Remaining bytes: public key (8 bytes for prefix, 32 bytes for full)\n const remainingBytes = payload.length - offset;\n const publicKeyLength = remainingBytes;\n const publicKeyBytes = payload.slice(offset, offset + publicKeyLength);\n const publicKey = (0, hex_1.bytesToHex)(publicKeyBytes);\n if (options?.includeSegments) {\n const keyType = publicKeyLength === 32 ? 'Full Public Key' : 'Public Key Prefix';\n segments.push({\n name: keyType,\n description: `${keyType} (${publicKeyLength} bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + publicKeyLength - 1,\n value: publicKey\n });\n }\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n subType: enums_1.ControlSubType.NodeDiscoverResp,\n rawFlags,\n nodeType,\n nodeTypeName,\n snr,\n tag,\n publicKey,\n publicKeyLength\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n static parseTypeFilter(filter) {\n const types = [];\n if (filter & (1 << enums_1.DeviceRole.ChatNode))\n types.push('Chat');\n if (filter & (1 << enums_1.DeviceRole.Repeater))\n types.push('Repeater');\n if (filter & (1 << enums_1.DeviceRole.RoomServer))\n types.push('Room');\n if (filter & (1 << enums_1.DeviceRole.Sensor))\n types.push('Sensor');\n return types;\n }\n static createErrorPayload(error, payload, options) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error],\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags: payload.length > 0 ? payload[0] : 0,\n prefixOnly: false,\n typeFilter: 0,\n typeFilterNames: [],\n tag: 0,\n since: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Control Data',\n description: error,\n startByte: options.segmentOffset ?? 0,\n endByte: (options.segmentOffset ?? 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n static readUint32LE(buffer, offset) {\n return (buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24)) >>> 0; // >>> 0 to ensure unsigned\n }\n}\nexports.ControlPayloadDecoder = ControlPayloadDecoder;\n//# sourceMappingURL=control.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeshCorePacketDecoder = void 0;\nconst enums_1 = require(\"../types/enums\");\nconst hex_1 = require(\"../utils/hex\");\nconst enum_names_1 = require(\"../utils/enum-names\");\nconst key_manager_1 = require(\"../crypto/key-manager\");\nconst advert_1 = require(\"./payload-decoders/advert\");\nconst trace_1 = require(\"./payload-decoders/trace\");\nconst group_text_1 = require(\"./payload-decoders/group-text\");\nconst request_1 = require(\"./payload-decoders/request\");\nconst response_1 = require(\"./payload-decoders/response\");\nconst anon_request_1 = require(\"./payload-decoders/anon-request\");\nconst ack_1 = require(\"./payload-decoders/ack\");\nconst path_1 = require(\"./payload-decoders/path\");\nconst text_message_1 = require(\"./payload-decoders/text-message\");\nconst control_1 = require(\"./payload-decoders/control\");\nclass MeshCorePacketDecoder {\n /**\n * Decode a raw packet from hex string\n */\n static decode(hexData, options) {\n const result = this.parseInternal(hexData, false, options);\n return result.packet;\n }\n /**\n * Decode a raw packet from hex string with signature verification for advertisements\n */\n static async decodeWithVerification(hexData, options) {\n const result = await this.parseInternalAsync(hexData, false, options);\n return result.packet;\n }\n /**\n * Analyze packet structure for detailed breakdown\n */\n static analyzeStructure(hexData, options) {\n const result = this.parseInternal(hexData, true, options);\n return result.structure;\n }\n /**\n * Analyze packet structure for detailed breakdown with signature verification for advertisements\n */\n static async analyzeStructureWithVerification(hexData, options) {\n const result = await this.parseInternalAsync(hexData, true, options);\n return result.structure;\n }\n /**\n * Internal unified parsing method\n */\n static parseInternal(hexData, includeStructure, options) {\n const bytes = (0, hex_1.hexToBytes)(hexData);\n const segments = [];\n if (bytes.length < 2) {\n const errorPacket = {\n messageHash: '',\n routeType: enums_1.RouteType.Flood,\n payloadType: enums_1.PayloadType.RawCustom,\n payloadVersion: enums_1.PayloadVersion.Version1,\n pathLength: 0,\n path: null,\n payload: { raw: '', decoded: null },\n totalBytes: bytes.length,\n isValid: false,\n errors: ['Packet too short (minimum 2 bytes required)']\n };\n const errorStructure = {\n segments: [],\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash: '',\n payload: {\n segments: [],\n hex: '',\n startByte: 0,\n type: 'Unknown'\n }\n };\n return { packet: errorPacket, structure: errorStructure };\n }\n try {\n let offset = 0;\n // parse header\n const header = bytes[0];\n const routeType = header & 0x03;\n const payloadType = (header >> 2) & 0x0F;\n const payloadVersion = (header >> 6) & 0x03;\n if (includeStructure) {\n segments.push({\n name: 'Header',\n description: 'Header byte breakdown',\n startByte: 0,\n endByte: 0,\n value: `0x${header.toString(16).padStart(2, '0')}`,\n headerBreakdown: {\n fullBinary: header.toString(2).padStart(8, '0'),\n fields: [\n {\n bits: '0-1',\n field: 'Route Type',\n value: (0, enum_names_1.getRouteTypeName)(routeType),\n binary: (header & 0x03).toString(2).padStart(2, '0')\n },\n {\n bits: '2-5',\n field: 'Payload Type',\n value: (0, enum_names_1.getPayloadTypeName)(payloadType),\n binary: ((header >> 2) & 0x0F).toString(2).padStart(4, '0')\n },\n {\n bits: '6-7',\n field: 'Version',\n value: payloadVersion.toString(),\n binary: ((header >> 6) & 0x03).toString(2).padStart(2, '0')\n }\n ]\n }\n });\n }\n offset = 1;\n // handle transport codes\n let transportCodes;\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n if (bytes.length < offset + 4) {\n throw new Error('Packet too short for transport codes');\n }\n const code1 = bytes[offset] | (bytes[offset + 1] << 8);\n const code2 = bytes[offset + 2] | (bytes[offset + 3] << 8);\n transportCodes = [code1, code2];\n if (includeStructure) {\n const transportCode = (bytes[offset]) | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24);\n segments.push({\n name: 'Transport Code',\n description: 'Used for Direct/Response routing',\n startByte: offset,\n endByte: offset + 3,\n value: `0x${transportCode.toString(16).padStart(8, '0')}`\n });\n }\n offset += 4;\n }\n // parse path\n if (bytes.length < offset + 1) {\n throw new Error('Packet too short for path length');\n }\n const pathLength = bytes[offset];\n if (includeStructure) {\n let pathLengthDescription = `Path contains ${pathLength} bytes`;\n if (routeType === enums_1.RouteType.Direct || routeType === enums_1.RouteType.TransportDirect) {\n pathLengthDescription = `For \"Direct\" packets, this contains routing instructions. ${pathLength} bytes of routing instructions (decreases as packet travels)`;\n }\n else if (routeType === enums_1.RouteType.Flood || routeType === enums_1.RouteType.TransportFlood) {\n pathLengthDescription = `${pathLength} bytes showing route taken (increases as packet floods)`;\n }\n segments.push({\n name: 'Path Length',\n description: pathLengthDescription,\n startByte: offset,\n endByte: offset,\n value: `0x${pathLength.toString(16).padStart(2, '0')}`\n });\n }\n offset += 1;\n if (bytes.length < offset + pathLength) {\n throw new Error('Packet too short for path data');\n }\n // convert path data to hex strings\n const pathBytes = bytes.subarray(offset, offset + pathLength);\n const path = pathLength > 0 ? Array.from(pathBytes).map(hex_1.byteToHex) : null;\n if (includeStructure && pathLength > 0) {\n if (payloadType === enums_1.PayloadType.Trace) {\n // TRACE packets have SNR values in path\n const snrValues = [];\n for (let i = 0; i < pathLength; i++) {\n const snrRaw = bytes[offset + i];\n const snrSigned = snrRaw > 127 ? snrRaw - 256 : snrRaw;\n const snrDb = snrSigned / 4.0;\n snrValues.push(`${snrDb.toFixed(2)}dB (0x${snrRaw.toString(16).padStart(2, '0')})`);\n }\n segments.push({\n name: 'Path SNR Data',\n description: `SNR values collected during trace: ${snrValues.join(', ')}`,\n startByte: offset,\n endByte: offset + pathLength - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset, offset + pathLength))\n });\n }\n else {\n let pathDescription = 'Routing path information';\n if (routeType === enums_1.RouteType.Direct || routeType === enums_1.RouteType.TransportDirect) {\n pathDescription = 'Routing instructions (bytes are stripped at each hop as packet travels to destination)';\n }\n else if (routeType === enums_1.RouteType.Flood || routeType === enums_1.RouteType.TransportFlood) {\n pathDescription = 'Historical route taken (bytes are added as packet floods through network)';\n }\n segments.push({\n name: 'Path Data',\n description: pathDescription,\n startByte: offset,\n endByte: offset + pathLength - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset, offset + pathLength))\n });\n }\n }\n offset += pathLength;\n // extract payload\n const payloadBytes = bytes.subarray(offset);\n const payloadHex = (0, hex_1.bytesToHex)(payloadBytes);\n if (includeStructure && bytes.length > offset) {\n segments.push({\n name: 'Payload',\n description: `${(0, enum_names_1.getPayloadTypeName)(payloadType)} payload data`,\n startByte: offset,\n endByte: bytes.length - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset))\n });\n }\n // decode payload based on type and optionally get segments in one pass\n let decodedPayload = null;\n const payloadSegments = [];\n if (payloadType === enums_1.PayloadType.Advert) {\n const result = advert_1.AdvertPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Trace) {\n const result = trace_1.TracePayloadDecoder.decode(payloadBytes, path, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments; // Remove from decoded payload to keep it clean\n }\n }\n else if (payloadType === enums_1.PayloadType.GroupText) {\n const result = group_text_1.GroupTextPayloadDecoder.decode(payloadBytes, {\n ...options,\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Request) {\n const result = request_1.RequestPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Response) {\n const result = response_1.ResponsePayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.AnonRequest) {\n const result = anon_request_1.AnonRequestPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Ack) {\n const result = ack_1.AckPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Path) {\n decodedPayload = path_1.PathPayloadDecoder.decode(payloadBytes);\n }\n else if (payloadType === enums_1.PayloadType.TextMessage) {\n const result = text_message_1.TextMessagePayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Control) {\n const result = control_1.ControlPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n // if no segments were generated and we need structure, show basic payload info\n if (includeStructure && payloadSegments.length === 0 && bytes.length > offset) {\n payloadSegments.push({\n name: `${(0, enum_names_1.getPayloadTypeName)(payloadType)} Payload`,\n description: `Raw ${(0, enum_names_1.getPayloadTypeName)(payloadType)} payload data (${payloadBytes.length} bytes)`,\n startByte: 0,\n endByte: payloadBytes.length - 1,\n value: (0, hex_1.bytesToHex)(payloadBytes)\n });\n }\n // calculate message hash\n const messageHash = this.calculateMessageHash(bytes, routeType, payloadType, payloadVersion);\n const packet = {\n messageHash,\n routeType,\n payloadType,\n payloadVersion,\n transportCodes,\n pathLength,\n path,\n payload: {\n raw: payloadHex,\n decoded: decodedPayload\n },\n totalBytes: bytes.length,\n isValid: true\n };\n const structure = {\n segments,\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash,\n payload: {\n segments: payloadSegments,\n hex: payloadHex,\n startByte: offset,\n type: (0, enum_names_1.getPayloadTypeName)(payloadType)\n }\n };\n return { packet, structure };\n }\n catch (error) {\n const errorPacket = {\n messageHash: '',\n routeType: enums_1.RouteType.Flood,\n payloadType: enums_1.PayloadType.RawCustom,\n payloadVersion: enums_1.PayloadVersion.Version1,\n pathLength: 0,\n path: null,\n payload: { raw: '', decoded: null },\n totalBytes: bytes.length,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Unknown decoding error']\n };\n const errorStructure = {\n segments: [],\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash: '',\n payload: {\n segments: [],\n hex: '',\n startByte: 0,\n type: 'Unknown'\n }\n };\n return { packet: errorPacket, structure: errorStructure };\n }\n }\n /**\n * Internal unified parsing method with signature verification for advertisements\n */\n static async parseInternalAsync(hexData, includeStructure, options) {\n // First do the regular parsing\n const result = this.parseInternal(hexData, includeStructure, options);\n // If it's an advertisement, verify the signature\n if (result.packet.payloadType === enums_1.PayloadType.Advert && result.packet.payload.decoded) {\n try {\n const advertPayload = result.packet.payload.decoded;\n const verifiedAdvert = await advert_1.AdvertPayloadDecoder.decodeWithVerification((0, hex_1.hexToBytes)(result.packet.payload.raw), {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n if (verifiedAdvert) {\n // Update the payload with signature verification results\n result.packet.payload.decoded = verifiedAdvert;\n // If the advertisement signature is invalid, mark the whole packet as invalid\n if (!verifiedAdvert.isValid) {\n result.packet.isValid = false;\n result.packet.errors = verifiedAdvert.errors || ['Invalid advertisement signature'];\n }\n // Update structure segments if needed\n if (includeStructure && verifiedAdvert.segments) {\n result.structure.payload.segments = verifiedAdvert.segments;\n delete verifiedAdvert.segments;\n }\n }\n }\n catch (error) {\n console.error('Signature verification failed:', error);\n }\n }\n return result;\n }\n /**\n * Validate packet format without full decoding\n */\n static validate(hexData) {\n const bytes = (0, hex_1.hexToBytes)(hexData);\n const errors = [];\n if (bytes.length < 2) {\n errors.push('Packet too short (minimum 2 bytes required)');\n return { isValid: false, errors };\n }\n try {\n let offset = 1; // Skip header\n // check transport codes\n const header = bytes[0];\n const routeType = header & 0x03;\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n if (bytes.length < offset + 4) {\n errors.push('Packet too short for transport codes');\n }\n offset += 4;\n }\n // check path length\n if (bytes.length < offset + 1) {\n errors.push('Packet too short for path length');\n }\n else {\n const pathLength = bytes[offset];\n offset += 1;\n if (bytes.length < offset + pathLength) {\n errors.push('Packet too short for path data');\n }\n offset += pathLength;\n }\n // check if we have payload data\n if (offset >= bytes.length) {\n errors.push('No payload data found');\n }\n }\n catch (error) {\n errors.push(error instanceof Error ? error.message : 'Validation error');\n }\n return { isValid: errors.length === 0, errors: errors.length > 0 ? errors : undefined };\n }\n /**\n * Calculate message hash for a packet\n */\n static calculateMessageHash(bytes, routeType, payloadType, payloadVersion) {\n // for TRACE packets, use the trace tag as hash\n if (payloadType === enums_1.PayloadType.Trace && bytes.length >= 13) {\n let offset = 1;\n // skip transport codes if present\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n offset += 4;\n }\n // skip path data\n if (bytes.length > offset) {\n const pathLen = bytes[offset];\n offset += 1 + pathLen;\n }\n // extract trace tag\n if (bytes.length >= offset + 4) {\n const traceTag = (bytes[offset]) | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24);\n return (0, hex_1.numberToHex)(traceTag, 8);\n }\n }\n // for other packets, create hash from constant parts\n const constantHeader = (payloadType << 2) | (payloadVersion << 6);\n let offset = 1;\n // skip transport codes if present\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n offset += 4;\n }\n // skip path data\n if (bytes.length > offset) {\n const pathLen = bytes[offset];\n offset += 1 + pathLen;\n }\n const payloadData = bytes.slice(offset);\n const hashInput = [constantHeader, ...Array.from(payloadData)];\n // generate hash\n let hash = 0;\n for (let i = 0; i < hashInput.length; i++) {\n hash = ((hash << 5) - hash + hashInput[i]) & 0xffffffff;\n }\n return (0, hex_1.numberToHex)(hash, 8);\n }\n /**\n * Create a key store for decryption\n */\n static createKeyStore(initialKeys) {\n return new key_manager_1.MeshCoreKeyStore(initialKeys);\n }\n}\nexports.MeshCorePacketDecoder = MeshCorePacketDecoder;\n//# sourceMappingURL=packet-decoder.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createAuthToken = createAuthToken;\nexports.verifyAuthToken = verifyAuthToken;\nexports.parseAuthToken = parseAuthToken;\nexports.decodeAuthTokenPayload = decodeAuthTokenPayload;\nconst orlp_ed25519_wasm_1 = require(\"../crypto/orlp-ed25519-wasm\");\nconst hex_1 = require(\"./hex\");\n/**\n * Base64url encode (URL-safe base64 without padding)\n */\nfunction base64urlEncode(data) {\n // Convert to base64\n let base64 = '';\n if (typeof Buffer !== 'undefined') {\n // Node.js\n base64 = Buffer.from(data).toString('base64');\n }\n else {\n // Browser\n const binary = String.fromCharCode(...Array.from(data));\n base64 = btoa(binary);\n }\n // Make URL-safe and remove padding\n return base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n/**\n * Base64url decode\n */\nfunction base64urlDecode(str) {\n // Add padding back\n let base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n while (base64.length % 4) {\n base64 += '=';\n }\n if (typeof Buffer !== 'undefined') {\n // Node.js\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n else {\n // Browser\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n/**\n * Create a signed authentication token\n *\n * @param payload - Token payload containing claims\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns JWT-style token string in format: header.payload.signature\n */\nasync function createAuthToken(payload, privateKeyHex, publicKeyHex) {\n // Create header\n const header = {\n alg: 'Ed25519',\n typ: 'JWT'\n };\n // Ensure publicKey is in the payload (normalize to uppercase)\n if (!payload.publicKey) {\n payload.publicKey = publicKeyHex.toUpperCase();\n }\n else {\n payload.publicKey = payload.publicKey.toUpperCase();\n }\n // Ensure iat is set\n if (!payload.iat) {\n payload.iat = Math.floor(Date.now() / 1000);\n }\n // Encode header and payload\n const headerJson = JSON.stringify(header);\n const payloadJson = JSON.stringify(payload);\n const headerBytes = new TextEncoder().encode(headerJson);\n const payloadBytes = new TextEncoder().encode(payloadJson);\n const headerEncoded = base64urlEncode(headerBytes);\n const payloadEncoded = base64urlEncode(payloadBytes);\n // Create signing input: header.payload\n const signingInput = `${headerEncoded}.${payloadEncoded}`;\n const signingInputBytes = new TextEncoder().encode(signingInput);\n const signingInputHex = (0, hex_1.bytesToHex)(signingInputBytes);\n // Sign the input using the normalized public key from payload\n const signatureHex = await (0, orlp_ed25519_wasm_1.sign)(signingInputHex, privateKeyHex, payload.publicKey);\n // Return token in JWT format: header.payload.signature\n // Note: We use hex for signature instead of base64url for consistency with MeshCore\n return `${headerEncoded}.${payloadEncoded}.${signatureHex}`;\n}\n/**\n * Verify and decode an authentication token\n *\n * @param token - JWT-style token string\n * @param expectedPublicKeyHex - Expected public key in hex format (optional, will check against payload if provided)\n * @returns Decoded payload if valid, null if invalid\n */\nasync function verifyAuthToken(token, expectedPublicKeyHex) {\n try {\n // Parse token\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n const [headerEncoded, payloadEncoded, signatureHex] = parts;\n // Decode header and payload\n const headerBytes = base64urlDecode(headerEncoded);\n const payloadBytes = base64urlDecode(payloadEncoded);\n const headerJson = new TextDecoder().decode(headerBytes);\n const payloadJson = new TextDecoder().decode(payloadBytes);\n const header = JSON.parse(headerJson);\n const payload = JSON.parse(payloadJson);\n // Validate header\n if (header.alg !== 'Ed25519' || header.typ !== 'JWT') {\n return null;\n }\n // Validate payload has required fields\n if (!payload.publicKey || !payload.iat) {\n return null;\n }\n // Check if expected public key matches\n if (expectedPublicKeyHex && payload.publicKey.toUpperCase() !== expectedPublicKeyHex.toUpperCase()) {\n return null;\n }\n // Check expiration if present\n if (payload.exp) {\n const now = Math.floor(Date.now() / 1000);\n if (now > payload.exp) {\n return null; // Token expired\n }\n }\n // Verify signature\n const signingInput = `${headerEncoded}.${payloadEncoded}`;\n const signingInputBytes = new TextEncoder().encode(signingInput);\n const signingInputHex = (0, hex_1.bytesToHex)(signingInputBytes);\n const isValid = await (0, orlp_ed25519_wasm_1.verify)(signatureHex, signingInputHex, payload.publicKey);\n if (!isValid) {\n return null;\n }\n return payload;\n }\n catch (error) {\n return null;\n }\n}\n/**\n * Parse a token without verifying (useful for debugging)\n *\n * @param token - JWT-style token string\n * @returns Parsed token structure or null if invalid format\n */\nfunction parseAuthToken(token) {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n return {\n header: parts[0],\n payload: parts[1],\n signature: parts[2]\n };\n }\n catch (error) {\n return null;\n }\n}\n/**\n * Decode token payload without verification (useful for debugging)\n *\n * @param token - JWT-style token string\n * @returns Decoded payload or null if invalid format\n */\nfunction decodeAuthTokenPayload(token) {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n const payloadBytes = base64urlDecode(parts[1]);\n const payloadJson = new TextDecoder().decode(payloadBytes);\n return JSON.parse(payloadJson);\n }\n catch (error) {\n return null;\n }\n}\n//# sourceMappingURL=auth-token.js.map","\"use strict\";\n// MeshCore Packet Decoder\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Utils = exports.decodeAuthTokenPayload = exports.parseAuthToken = exports.verifyAuthToken = exports.createAuthToken = exports.getControlSubTypeName = exports.getRequestTypeName = exports.getDeviceRoleName = exports.getPayloadVersionName = exports.getPayloadTypeName = exports.getRouteTypeName = exports.numberToHex = exports.byteToHex = exports.bytesToHex = exports.hexToBytes = exports.Ed25519SignatureVerifier = exports.ChannelCrypto = exports.MeshCoreKeyStore = exports.ControlSubType = exports.RequestType = exports.AdvertFlags = exports.DeviceRole = exports.PayloadVersion = exports.PayloadType = exports.RouteType = exports.MeshCoreDecoder = exports.MeshCorePacketDecoder = void 0;\nvar packet_decoder_1 = require(\"./decoder/packet-decoder\");\nObject.defineProperty(exports, \"MeshCorePacketDecoder\", { enumerable: true, get: function () { return packet_decoder_1.MeshCorePacketDecoder; } });\nvar packet_decoder_2 = require(\"./decoder/packet-decoder\");\nObject.defineProperty(exports, \"MeshCoreDecoder\", { enumerable: true, get: function () { return packet_decoder_2.MeshCorePacketDecoder; } });\n// Enum exports\nvar enums_1 = require(\"./types/enums\");\nObject.defineProperty(exports, \"RouteType\", { enumerable: true, get: function () { return enums_1.RouteType; } });\nObject.defineProperty(exports, \"PayloadType\", { enumerable: true, get: function () { return enums_1.PayloadType; } });\nObject.defineProperty(exports, \"PayloadVersion\", { enumerable: true, get: function () { return enums_1.PayloadVersion; } });\nObject.defineProperty(exports, \"DeviceRole\", { enumerable: true, get: function () { return enums_1.DeviceRole; } });\nObject.defineProperty(exports, \"AdvertFlags\", { enumerable: true, get: function () { return enums_1.AdvertFlags; } });\nObject.defineProperty(exports, \"RequestType\", { enumerable: true, get: function () { return enums_1.RequestType; } });\nObject.defineProperty(exports, \"ControlSubType\", { enumerable: true, get: function () { return enums_1.ControlSubType; } });\n// Crypto exports\nvar key_manager_1 = require(\"./crypto/key-manager\");\nObject.defineProperty(exports, \"MeshCoreKeyStore\", { enumerable: true, get: function () { return key_manager_1.MeshCoreKeyStore; } });\nvar channel_crypto_1 = require(\"./crypto/channel-crypto\");\nObject.defineProperty(exports, \"ChannelCrypto\", { enumerable: true, get: function () { return channel_crypto_1.ChannelCrypto; } });\nvar ed25519_verifier_1 = require(\"./crypto/ed25519-verifier\");\nObject.defineProperty(exports, \"Ed25519SignatureVerifier\", { enumerable: true, get: function () { return ed25519_verifier_1.Ed25519SignatureVerifier; } });\n// Utility exports\nvar hex_1 = require(\"./utils/hex\");\nObject.defineProperty(exports, \"hexToBytes\", { enumerable: true, get: function () { return hex_1.hexToBytes; } });\nObject.defineProperty(exports, \"bytesToHex\", { enumerable: true, get: function () { return hex_1.bytesToHex; } });\nObject.defineProperty(exports, \"byteToHex\", { enumerable: true, get: function () { return hex_1.byteToHex; } });\nObject.defineProperty(exports, \"numberToHex\", { enumerable: true, get: function () { return hex_1.numberToHex; } });\nvar enum_names_1 = require(\"./utils/enum-names\");\nObject.defineProperty(exports, \"getRouteTypeName\", { enumerable: true, get: function () { return enum_names_1.getRouteTypeName; } });\nObject.defineProperty(exports, \"getPayloadTypeName\", { enumerable: true, get: function () { return enum_names_1.getPayloadTypeName; } });\nObject.defineProperty(exports, \"getPayloadVersionName\", { enumerable: true, get: function () { return enum_names_1.getPayloadVersionName; } });\nObject.defineProperty(exports, \"getDeviceRoleName\", { enumerable: true, get: function () { return enum_names_1.getDeviceRoleName; } });\nObject.defineProperty(exports, \"getRequestTypeName\", { enumerable: true, get: function () { return enum_names_1.getRequestTypeName; } });\nObject.defineProperty(exports, \"getControlSubTypeName\", { enumerable: true, get: function () { return enum_names_1.getControlSubTypeName; } });\nvar auth_token_1 = require(\"./utils/auth-token\");\nObject.defineProperty(exports, \"createAuthToken\", { enumerable: true, get: function () { return auth_token_1.createAuthToken; } });\nObject.defineProperty(exports, \"verifyAuthToken\", { enumerable: true, get: function () { return auth_token_1.verifyAuthToken; } });\nObject.defineProperty(exports, \"parseAuthToken\", { enumerable: true, get: function () { return auth_token_1.parseAuthToken; } });\nObject.defineProperty(exports, \"decodeAuthTokenPayload\", { enumerable: true, get: function () { return auth_token_1.decodeAuthTokenPayload; } });\nconst EnumUtils = __importStar(require(\"./utils/enum-names\"));\nconst HexUtils = __importStar(require(\"./utils/hex\"));\nconst AuthTokenUtils = __importStar(require(\"./utils/auth-token\"));\nconst orlp_ed25519_wasm_1 = require(\"./crypto/orlp-ed25519-wasm\");\nexports.Utils = {\n ...EnumUtils,\n ...HexUtils,\n ...AuthTokenUtils,\n derivePublicKey: orlp_ed25519_wasm_1.derivePublicKey,\n validateKeyPair: orlp_ed25519_wasm_1.validateKeyPair,\n sign: orlp_ed25519_wasm_1.sign,\n verify: orlp_ed25519_wasm_1.verify\n};\n//# sourceMappingURL=index.js.map","import { useEffect, useRef, useMemo } from 'react';\nimport { MeshCoreDecoder, PayloadType, Utils } from '@michaelhart/meshcore-decoder';\nimport type { RawPacket } from '../types';\n\ninterface RawPacketListProps {\n packets: RawPacket[];\n}\n\nfunction formatTime(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\nfunction formatSignalInfo(packet: RawPacket): string {\n const parts: string[] = [];\n if (packet.snr !== null && packet.snr !== undefined) {\n parts.push(`SNR: ${packet.snr.toFixed(1)} dB`);\n }\n if (packet.rssi !== null && packet.rssi !== undefined) {\n parts.push(`RSSI: ${packet.rssi} dBm`);\n }\n return parts.join(' | ');\n}\n\n// Decrypted info from the packet (validated by backend)\ninterface DecryptedInfo {\n channel_name: string | null;\n sender: string | null;\n}\n\n// Decode a packet and generate a human-readable summary\n// Uses backend's decrypted_info when available (validated), falls back to decoder\nfunction decodePacketSummary(\n hexData: string,\n decryptedInfo: DecryptedInfo | null\n): {\n summary: string;\n routeType: string;\n details?: string;\n} {\n try {\n const decoded = MeshCoreDecoder.decode(hexData);\n\n if (!decoded.isValid) {\n return { summary: 'Invalid packet', routeType: 'Unknown' };\n }\n\n const routeType = Utils.getRouteTypeName(decoded.routeType);\n const payloadTypeName = Utils.getPayloadTypeName(decoded.payloadType);\n\n // Build path string if available\n const pathStr = decoded.path && decoded.path.length > 0 ? ` via ${decoded.path.join('-')}` : '';\n\n // Generate summary based on payload type\n let summary = payloadTypeName;\n let details: string | undefined;\n\n switch (decoded.payloadType) {\n case PayloadType.TextMessage: {\n const payload = decoded.payload.decoded as {\n destinationHash?: string;\n sourceHash?: string;\n } | null;\n if (payload?.sourceHash && payload?.destinationHash) {\n summary = `DM from ${payload.sourceHash} to ${payload.destinationHash}${pathStr}`;\n } else {\n summary = `DM${pathStr}`;\n }\n break;\n }\n\n case PayloadType.GroupText: {\n const payload = decoded.payload.decoded as {\n channelHash?: string;\n } | null;\n // Use backend's validated decrypted_info when available\n if (decryptedInfo?.channel_name) {\n if (decryptedInfo.sender) {\n summary = `GT from ${decryptedInfo.sender} in ${decryptedInfo.channel_name}${pathStr}`;\n } else {\n summary = `GT in ${decryptedInfo.channel_name}${pathStr}`;\n }\n } else if (payload?.channelHash) {\n // Fallback to showing channel hash when not decrypted\n summary = `GT ch:${payload.channelHash}${pathStr}`;\n } else {\n summary = `GroupText${pathStr}`;\n }\n break;\n }\n\n case PayloadType.Advert: {\n const payload = decoded.payload.decoded as {\n publicKey?: string;\n appData?: { name?: string; deviceRole?: number };\n } | null;\n if (payload?.appData?.name) {\n const role =\n payload.appData.deviceRole !== undefined\n ? Utils.getDeviceRoleName(payload.appData.deviceRole)\n : '';\n summary = `Advert: ${payload.appData.name}${role ? ` (${role})` : ''}${pathStr}`;\n } else if (payload?.publicKey) {\n summary = `Advert: ${payload.publicKey.slice(0, 8)}...${pathStr}`;\n } else {\n summary = `Advert${pathStr}`;\n }\n break;\n }\n\n case PayloadType.Ack: {\n summary = `ACK${pathStr}`;\n break;\n }\n\n case PayloadType.Request: {\n summary = `Request${pathStr}`;\n break;\n }\n\n case PayloadType.Response: {\n summary = `Response${pathStr}`;\n break;\n }\n\n case PayloadType.Trace: {\n summary = `Trace${pathStr}`;\n break;\n }\n\n case PayloadType.Path: {\n summary = `Path${pathStr}`;\n break;\n }\n\n default:\n summary = `${payloadTypeName}${pathStr}`;\n }\n\n return { summary, routeType, details };\n } catch {\n return { summary: 'Decode error', routeType: 'Unknown' };\n }\n}\n\n// Get route type badge color\nfunction getRouteTypeColor(routeType: string): string {\n switch (routeType) {\n case 'Flood':\n return 'bg-blue-500/20 text-blue-400';\n case 'Direct':\n return 'bg-green-500/20 text-green-400';\n case 'Transport Flood':\n return 'bg-purple-500/20 text-purple-400';\n case 'Transport Direct':\n return 'bg-orange-500/20 text-orange-400';\n default:\n return 'bg-gray-500/20 text-gray-400';\n }\n}\n\n// Get short route type label\nfunction getRouteTypeLabel(routeType: string): string {\n switch (routeType) {\n case 'Flood':\n return 'F';\n case 'Direct':\n return 'D';\n case 'Transport Flood':\n return 'TF';\n case 'Transport Direct':\n return 'TD';\n default:\n return '?';\n }\n}\n\nexport function RawPacketList({ packets }: RawPacketListProps) {\n const listRef = useRef(null);\n\n // Decode all packets (memoized to avoid re-decoding on every render)\n const decodedPackets = useMemo(() => {\n return packets.map((packet) => ({\n packet,\n decoded: decodePacketSummary(packet.data, packet.decrypted_info),\n }));\n }, [packets]);\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, [packets]);\n\n if (packets.length === 0) {\n return (\n
\n No packets received yet. Packets will appear here in real-time.\n
\n );\n }\n\n // Sort packets by timestamp ascending (oldest first)\n const sortedPackets = [...decodedPackets].sort((a, b) => a.packet.timestamp - b.packet.timestamp);\n\n return (\n
\n {sortedPackets.map(({ packet, decoded }) => (\n
\n
\n {/* Route type badge */}\n \n {getRouteTypeLabel(decoded.routeType)}\n \n\n {/* Encryption status */}\n {!packet.decrypted && 🔒}\n\n {/* Summary */}\n \n {decoded.summary}\n \n\n {/* Time */}\n \n {formatTime(packet.timestamp)}\n \n
\n\n {/* Signal info */}\n {(packet.snr !== null || packet.rssi !== null) && (\n
\n {formatSignalInfo(packet)}\n
\n )}\n\n {/* Raw hex data (always visible) */}\n
\n {packet.data.toUpperCase()}\n
\n
\n ))}\n
\n );\n}\n","import { useEffect, useRef } from 'react';\nexport function useAttribution(map, attribution) {\n const attributionRef = useRef(attribution);\n useEffect(function updateAttribution() {\n if (attribution !== attributionRef.current && map.attributionControl != null) {\n if (attributionRef.current != null) {\n map.attributionControl.removeAttribution(attributionRef.current);\n }\n if (attribution != null) {\n map.attributionControl.addAttribution(attribution);\n }\n }\n attributionRef.current = attribution;\n }, [\n map,\n attribution\n ]);\n}\n","export function updateCircle(layer, props, prevProps) {\n if (props.center !== prevProps.center) {\n layer.setLatLng(props.center);\n }\n if (props.radius != null && props.radius !== prevProps.radius) {\n layer.setRadius(props.radius);\n }\n}\n","import { createContext, useContext } from 'react';\nexport const CONTEXT_VERSION = 1;\nexport function createLeafletContext(map) {\n return Object.freeze({\n __version: CONTEXT_VERSION,\n map\n });\n}\nexport function extendContext(source, extra) {\n return Object.freeze({\n ...source,\n ...extra\n });\n}\nexport const LeafletContext = createContext(null);\nexport const LeafletProvider = LeafletContext.Provider;\nexport function useLeafletContext() {\n const context = useContext(LeafletContext);\n if (context == null) {\n throw new Error('No context provided: useLeafletContext() can only be used in a descendant of ');\n }\n return context;\n}\n","import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { LeafletProvider } from './context.js';\nexport function createContainerComponent(useElement) {\n function ContainerComponent(props, forwardedRef) {\n const { instance , context } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return props.children == null ? null : /*#__PURE__*/ React.createElement(LeafletProvider, {\n value: context\n }, props.children);\n }\n return /*#__PURE__*/ forwardRef(ContainerComponent);\n}\nexport function createDivOverlayComponent(useElement) {\n function OverlayComponent(props, forwardedRef) {\n const [isOpen, setOpen] = useState(false);\n const { instance } = useElement(props, setOpen).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n useEffect(function updateOverlay() {\n if (isOpen) {\n instance.update();\n }\n }, [\n instance,\n isOpen,\n props.children\n ]);\n // @ts-ignore _contentNode missing in type definition\n const contentNode = instance._contentNode;\n return contentNode ? /*#__PURE__*/ createPortal(props.children, contentNode) : null;\n }\n return /*#__PURE__*/ forwardRef(OverlayComponent);\n}\nexport function createLeafComponent(useElement) {\n function LeafComponent(props, forwardedRef) {\n const { instance } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return null;\n }\n return /*#__PURE__*/ forwardRef(LeafComponent);\n}\n","import { useEffect, useRef } from 'react';\nexport function useEventHandlers(element, eventHandlers) {\n const eventHandlersRef = useRef();\n useEffect(function addEventHandlers() {\n if (eventHandlers != null) {\n element.instance.on(eventHandlers);\n }\n eventHandlersRef.current = eventHandlers;\n return function removeEventHandlers() {\n if (eventHandlersRef.current != null) {\n element.instance.off(eventHandlersRef.current);\n }\n eventHandlersRef.current = null;\n };\n }, [\n element,\n eventHandlers\n ]);\n}\n","export function withPane(props, context) {\n const pane = props.pane ?? context.pane;\n return pane ? {\n ...props,\n pane\n } : props;\n}\n","import { useAttribution } from './attribution.js';\nimport { useLeafletContext } from './context.js';\nimport { useEventHandlers } from './events.js';\nimport { withPane } from './pane.js';\nexport function createDivOverlayHook(useElement, useLifecycle) {\n return function useDivOverlay(props, setOpen) {\n const context = useLeafletContext();\n const elementRef = useElement(withPane(props, context), context);\n useAttribution(context.map, props.attribution);\n useEventHandlers(elementRef.current, props.eventHandlers);\n useLifecycle(elementRef.current, context, props, setOpen);\n return elementRef;\n };\n}\n","/* @preserve\n * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));\n})(this, (function (exports) { 'use strict';\n\n var version = \"1.9.4\";\n\n /*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n // @function extend(dest: Object, src?: Object): Object\r\n // Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\n function extend(dest) {\r\n \tvar i, j, len, src;\r\n\r\n \tfor (j = 1, len = arguments.length; j < len; j++) {\r\n \t\tsrc = arguments[j];\r\n \t\tfor (i in src) {\r\n \t\t\tdest[i] = src[i];\r\n \t\t}\r\n \t}\r\n \treturn dest;\r\n }\r\n\r\n // @function create(proto: Object, properties?: Object): Object\r\n // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\n var create$2 = Object.create || (function () {\r\n \tfunction F() {}\r\n \treturn function (proto) {\r\n \t\tF.prototype = proto;\r\n \t\treturn new F();\r\n \t};\r\n })();\r\n\r\n // @function bind(fn: Function, …): Function\r\n // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n // Has a `L.bind()` shortcut.\r\n function bind(fn, obj) {\r\n \tvar slice = Array.prototype.slice;\r\n\r\n \tif (fn.bind) {\r\n \t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n \t}\r\n\r\n \tvar args = slice.call(arguments, 2);\r\n\r\n \treturn function () {\r\n \t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n \t};\r\n }\r\n\r\n // @property lastId: Number\r\n // Last unique ID used by [`stamp()`](#util-stamp)\r\n var lastId = 0;\r\n\r\n // @function stamp(obj: Object): Number\r\n // Returns the unique ID of an object, assigning it one if it doesn't have it.\r\n function stamp(obj) {\r\n \tif (!('_leaflet_id' in obj)) {\r\n \t\tobj['_leaflet_id'] = ++lastId;\r\n \t}\r\n \treturn obj._leaflet_id;\r\n }\r\n\r\n // @function throttle(fn: Function, time: Number, context: Object): Function\r\n // Returns a function which executes function `fn` with the given scope `context`\r\n // (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n // `fn` will be called no more than one time per given amount of `time`. The arguments\r\n // received by the bound function will be any arguments passed when binding the\r\n // function, followed by any arguments passed when invoking the bound function.\r\n // Has an `L.throttle` shortcut.\r\n function throttle(fn, time, context) {\r\n \tvar lock, args, wrapperFn, later;\r\n\r\n \tlater = function () {\r\n \t\t// reset lock and call if queued\r\n \t\tlock = false;\r\n \t\tif (args) {\r\n \t\t\twrapperFn.apply(context, args);\r\n \t\t\targs = false;\r\n \t\t}\r\n \t};\r\n\r\n \twrapperFn = function () {\r\n \t\tif (lock) {\r\n \t\t\t// called too soon, queue to call later\r\n \t\t\targs = arguments;\r\n\r\n \t\t} else {\r\n \t\t\t// call and lock until later\r\n \t\t\tfn.apply(context, arguments);\r\n \t\t\tsetTimeout(later, time);\r\n \t\t\tlock = true;\r\n \t\t}\r\n \t};\r\n\r\n \treturn wrapperFn;\r\n }\r\n\r\n // @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n // Returns the number `num` modulo `range` in such a way so it lies within\r\n // `range[0]` and `range[1]`. The returned value will be always smaller than\r\n // `range[1]` unless `includeMax` is set to `true`.\r\n function wrapNum(x, range, includeMax) {\r\n \tvar max = range[1],\r\n \t min = range[0],\r\n \t d = max - min;\r\n \treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n }\r\n\r\n // @function falseFn(): Function\r\n // Returns a function which always returns `false`.\r\n function falseFn() { return false; }\r\n\r\n // @function formatNum(num: Number, precision?: Number|false): Number\r\n // Returns the number `num` rounded with specified `precision`.\r\n // The default `precision` value is 6 decimal places.\r\n // `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\n function formatNum(num, precision) {\r\n \tif (precision === false) { return num; }\r\n \tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n \treturn Math.round(num * pow) / pow;\r\n }\r\n\r\n // @function trim(str: String): String\r\n // Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\n function trim(str) {\r\n \treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n }\r\n\r\n // @function splitWords(str: String): String[]\r\n // Trims and splits the string on whitespace and returns the array of parts.\r\n function splitWords(str) {\r\n \treturn trim(str).split(/\\s+/);\r\n }\r\n\r\n // @function setOptions(obj: Object, options: Object): Object\r\n // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\n function setOptions(obj, options) {\r\n \tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n \t\tobj.options = obj.options ? create$2(obj.options) : {};\r\n \t}\r\n \tfor (var i in options) {\r\n \t\tobj.options[i] = options[i];\r\n \t}\r\n \treturn obj.options;\r\n }\r\n\r\n // @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n // Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n // translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n // be appended at the end. If `uppercase` is `true`, the parameter names will\r\n // be uppercased (e.g. `'?A=foo&B=bar'`)\r\n function getParamString(obj, existingUrl, uppercase) {\r\n \tvar params = [];\r\n \tfor (var i in obj) {\r\n \t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n \t}\r\n \treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n }\r\n\r\n var templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n // @function template(str: String, data: Object): String\r\n // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n // and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n // `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n // data values — they will be evaluated passing `data` as an argument.\r\n function template(str, data) {\r\n \treturn str.replace(templateRe, function (str, key) {\r\n \t\tvar value = data[key];\r\n\r\n \t\tif (value === undefined) {\r\n \t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n \t\t} else if (typeof value === 'function') {\r\n \t\t\tvalue = value(data);\r\n \t\t}\r\n \t\treturn value;\r\n \t});\r\n }\r\n\r\n // @function isArray(obj): Boolean\r\n // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\n var isArray = Array.isArray || function (obj) {\r\n \treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n };\r\n\r\n // @function indexOf(array: Array, el: Object): Number\r\n // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\n function indexOf(array, el) {\r\n \tfor (var i = 0; i < array.length; i++) {\r\n \t\tif (array[i] === el) { return i; }\r\n \t}\r\n \treturn -1;\r\n }\r\n\r\n // @property emptyImageUrl: String\r\n // Data URI string containing a base64-encoded empty GIF image.\r\n // Used as a hack to free memory from unused images on WebKit-powered\r\n // mobile devices (by setting image `src` to this string).\r\n var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n // inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\n function getPrefixed(name) {\r\n \treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n }\r\n\r\n var lastTime = 0;\r\n\r\n // fallback for IE 7-8\r\n function timeoutDefer(fn) {\r\n \tvar time = +new Date(),\r\n \t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n \tlastTime = time + timeToCall;\r\n \treturn window.setTimeout(fn, timeToCall);\r\n }\r\n\r\n var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\n var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n \t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n // Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n // `context` if given. When `immediate` is set, `fn` is called immediately if\r\n // the browser doesn't have native support for\r\n // [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n // otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\n function requestAnimFrame(fn, context, immediate) {\r\n \tif (immediate && requestFn === timeoutDefer) {\r\n \t\tfn.call(context);\r\n \t} else {\r\n \t\treturn requestFn.call(window, bind(fn, context));\r\n \t}\r\n }\r\n\r\n // @function cancelAnimFrame(id: Number): undefined\r\n // Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\n function cancelAnimFrame(id) {\r\n \tif (id) {\r\n \t\tcancelFn.call(window, id);\r\n \t}\r\n }\n\n var Util = {\n __proto__: null,\n extend: extend,\n create: create$2,\n bind: bind,\n get lastId () { return lastId; },\n stamp: stamp,\n throttle: throttle,\n wrapNum: wrapNum,\n falseFn: falseFn,\n formatNum: formatNum,\n trim: trim,\n splitWords: splitWords,\n setOptions: setOptions,\n getParamString: getParamString,\n template: template,\n isArray: isArray,\n indexOf: indexOf,\n emptyImageUrl: emptyImageUrl,\n requestFn: requestFn,\n cancelFn: cancelFn,\n requestAnimFrame: requestAnimFrame,\n cancelAnimFrame: cancelAnimFrame\n };\n\n // @class Class\r\n // @aka L.Class\r\n\r\n // @section\r\n // @uninheritable\r\n\r\n // Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\n function Class() {}\r\n\r\n Class.extend = function (props) {\r\n\r\n \t// @function extend(props: Object): Function\r\n \t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n \t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n \tvar NewClass = function () {\r\n\r\n \t\tsetOptions(this);\r\n\r\n \t\t// call the constructor\r\n \t\tif (this.initialize) {\r\n \t\t\tthis.initialize.apply(this, arguments);\r\n \t\t}\r\n\r\n \t\t// call all constructor hooks\r\n \t\tthis.callInitHooks();\r\n \t};\r\n\r\n \tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n \tvar proto = create$2(parentProto);\r\n \tproto.constructor = NewClass;\r\n\r\n \tNewClass.prototype = proto;\r\n\r\n \t// inherit parent's statics\r\n \tfor (var i in this) {\r\n \t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n \t\t\tNewClass[i] = this[i];\r\n \t\t}\r\n \t}\r\n\r\n \t// mix static properties into the class\r\n \tif (props.statics) {\r\n \t\textend(NewClass, props.statics);\r\n \t}\r\n\r\n \t// mix includes into the prototype\r\n \tif (props.includes) {\r\n \t\tcheckDeprecatedMixinEvents(props.includes);\r\n \t\textend.apply(null, [proto].concat(props.includes));\r\n \t}\r\n\r\n \t// mix given properties into the prototype\r\n \textend(proto, props);\r\n \tdelete proto.statics;\r\n \tdelete proto.includes;\r\n\r\n \t// merge options\r\n \tif (proto.options) {\r\n \t\tproto.options = parentProto.options ? create$2(parentProto.options) : {};\r\n \t\textend(proto.options, props.options);\r\n \t}\r\n\r\n \tproto._initHooks = [];\r\n\r\n \t// add method for calling all hooks\r\n \tproto.callInitHooks = function () {\r\n\r\n \t\tif (this._initHooksCalled) { return; }\r\n\r\n \t\tif (parentProto.callInitHooks) {\r\n \t\t\tparentProto.callInitHooks.call(this);\r\n \t\t}\r\n\r\n \t\tthis._initHooksCalled = true;\r\n\r\n \t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n \t\t\tproto._initHooks[i].call(this);\r\n \t\t}\r\n \t};\r\n\r\n \treturn NewClass;\r\n };\r\n\r\n\r\n // @function include(properties: Object): this\r\n // [Includes a mixin](#class-includes) into the current class.\r\n Class.include = function (props) {\r\n \tvar parentOptions = this.prototype.options;\r\n \textend(this.prototype, props);\r\n \tif (props.options) {\r\n \t\tthis.prototype.options = parentOptions;\r\n \t\tthis.mergeOptions(props.options);\r\n \t}\r\n \treturn this;\r\n };\r\n\r\n // @function mergeOptions(options: Object): this\r\n // [Merges `options`](#class-options) into the defaults of the class.\r\n Class.mergeOptions = function (options) {\r\n \textend(this.prototype.options, options);\r\n \treturn this;\r\n };\r\n\r\n // @function addInitHook(fn: Function): this\r\n // Adds a [constructor hook](#class-constructor-hooks) to the class.\r\n Class.addInitHook = function (fn) { // (Function) || (String, args...)\r\n \tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n \tvar init = typeof fn === 'function' ? fn : function () {\r\n \t\tthis[fn].apply(this, args);\r\n \t};\r\n\r\n \tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n \tthis.prototype._initHooks.push(init);\r\n \treturn this;\r\n };\r\n\r\n function checkDeprecatedMixinEvents(includes) {\r\n \t/* global L: true */\r\n \tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n \tincludes = isArray(includes) ? includes : [includes];\r\n\r\n \tfor (var i = 0; i < includes.length; i++) {\r\n \t\tif (includes[i] === L.Mixin.Events) {\r\n \t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n \t\t\t\t'this property will be removed in future releases, ' +\r\n \t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n \t\t}\r\n \t}\r\n }\n\n /*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\n var Events = {\r\n \t/* @method on(type: String, fn: Function, context?: Object): this\r\n \t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n \t *\r\n \t * @alternative\r\n \t * @method on(eventMap: Object): this\r\n \t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n \t */\r\n \ton: function (types, fn, context) {\r\n\r\n \t\t// types can be a map of types/handlers\r\n \t\tif (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\t// we don't process space-separated events here for performance;\r\n \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n \t\t\t\tthis._on(type, types[type], fn);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\t// types can be a string of space-separated words\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tthis._on(types[i], fn, context);\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t/* @method off(type: String, fn?: Function, context?: Object): this\r\n \t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n \t *\r\n \t * @alternative\r\n \t * @method off(eventMap: Object): this\r\n \t * Removes a set of type/listener pairs.\r\n \t *\r\n \t * @alternative\r\n \t * @method off: this\r\n \t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n \t */\r\n \toff: function (types, fn, context) {\r\n\r\n \t\tif (!arguments.length) {\r\n \t\t\t// clear all listeners if called without arguments\r\n \t\t\tdelete this._events;\r\n\r\n \t\t} else if (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\tthis._off(type, types[type], fn);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tvar removeAll = arguments.length === 1;\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tif (removeAll) {\r\n \t\t\t\t\tthis._off(types[i]);\r\n \t\t\t\t} else {\r\n \t\t\t\t\tthis._off(types[i], fn, context);\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// attach listener (without syntactic sugar now)\r\n \t_on: function (type, fn, context, _once) {\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// check if fn already there\r\n \t\tif (this._listens(type, fn, context) !== false) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (context === this) {\r\n \t\t\t// Less memory footprint.\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tvar newListener = {fn: fn, ctx: context};\r\n \t\tif (_once) {\r\n \t\t\tnewListener.once = true;\r\n \t\t}\r\n\r\n \t\tthis._events = this._events || {};\r\n \t\tthis._events[type] = this._events[type] || [];\r\n \t\tthis._events[type].push(newListener);\r\n \t},\r\n\r\n \t_off: function (type, fn, context) {\r\n \t\tvar listeners,\r\n \t\t i,\r\n \t\t len;\r\n\r\n \t\tif (!this._events) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tlisteners = this._events[type];\r\n \t\tif (!listeners) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (arguments.length === 1) { // remove all\r\n \t\t\tif (this._firingCount) {\r\n \t\t\t\t// Set all removed listeners to noop\r\n \t\t\t\t// so they are not called if remove happens in fire\r\n \t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\t\t\tlisteners[i].fn = falseFn;\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t\t// clear all listeners for a type if function isn't specified\r\n \t\t\tdelete this._events[type];\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// find fn and remove it\r\n \t\tvar index = this._listens(type, fn, context);\r\n \t\tif (index !== false) {\r\n \t\t\tvar listener = listeners[index];\r\n \t\t\tif (this._firingCount) {\r\n \t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n \t\t\t\tlistener.fn = falseFn;\r\n\r\n \t\t\t\t/* copy array in case events are being fired */\r\n \t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n \t\t\t}\r\n \t\t\tlisteners.splice(index, 1);\r\n \t\t}\r\n \t},\r\n\r\n \t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n \t// Fires an event of the specified type. You can optionally provide a data\r\n \t// object — the first argument of the listener function will contain its\r\n \t// properties. The event can optionally be propagated to event parents.\r\n \tfire: function (type, data, propagate) {\r\n \t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n \t\tvar event = extend({}, data, {\r\n \t\t\ttype: type,\r\n \t\t\ttarget: this,\r\n \t\t\tsourceTarget: data && data.sourceTarget || this\r\n \t\t});\r\n\r\n \t\tif (this._events) {\r\n \t\t\tvar listeners = this._events[type];\r\n \t\t\tif (listeners) {\r\n \t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n \t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\t\t\tvar l = listeners[i];\r\n \t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n \t\t\t\t\tvar fn = l.fn;\r\n \t\t\t\t\tif (l.once) {\r\n \t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n \t\t\t\t\t}\r\n \t\t\t\t\tfn.call(l.ctx || this, event);\r\n \t\t\t\t}\r\n\r\n \t\t\t\tthis._firingCount--;\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\tif (propagate) {\r\n \t\t\t// propagate the event to parents (set with addEventParent)\r\n \t\t\tthis._propagateEvent(event);\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method listens(type: String, propagate?: Boolean): Boolean\r\n \t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n \t// Returns `true` if a particular event type has any listeners attached to it.\r\n \t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n \tlistens: function (type, fn, context, propagate) {\r\n \t\tif (typeof type !== 'string') {\r\n \t\t\tconsole.warn('\"string\" type argument expected');\r\n \t\t}\r\n\r\n \t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n \t\tvar _fn = fn;\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tpropagate = !!fn;\r\n \t\t\t_fn = undefined;\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tvar listeners = this._events && this._events[type];\r\n \t\tif (listeners && listeners.length) {\r\n \t\t\tif (this._listens(type, _fn, context) !== false) {\r\n \t\t\t\treturn true;\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\tif (propagate) {\r\n \t\t\t// also check parents for listeners if event propagates\r\n \t\t\tfor (var id in this._eventParents) {\r\n \t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n \t\t\t}\r\n \t\t}\r\n \t\treturn false;\r\n \t},\r\n\r\n \t// returns the index (number) or false\r\n \t_listens: function (type, fn, context) {\r\n \t\tif (!this._events) {\r\n \t\t\treturn false;\r\n \t\t}\r\n\r\n \t\tvar listeners = this._events[type] || [];\r\n \t\tif (!fn) {\r\n \t\t\treturn !!listeners.length;\r\n \t\t}\r\n\r\n \t\tif (context === this) {\r\n \t\t\t// Less memory footprint.\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n \t\t\t\treturn i;\r\n \t\t\t}\r\n \t\t}\r\n \t\treturn false;\r\n\r\n \t},\r\n\r\n \t// @method once(…): this\r\n \t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n \tonce: function (types, fn, context) {\r\n\r\n \t\t// types can be a map of types/handlers\r\n \t\tif (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\t// we don't process space-separated events here for performance;\r\n \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n \t\t\t\tthis._on(type, types[type], fn, true);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\t// types can be a string of space-separated words\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tthis._on(types[i], fn, context, true);\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method addEventParent(obj: Evented): this\r\n \t// Adds an event parent - an `Evented` that will receive propagated events\r\n \taddEventParent: function (obj) {\r\n \t\tthis._eventParents = this._eventParents || {};\r\n \t\tthis._eventParents[stamp(obj)] = obj;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method removeEventParent(obj: Evented): this\r\n \t// Removes an event parent, so it will stop receiving propagated events\r\n \tremoveEventParent: function (obj) {\r\n \t\tif (this._eventParents) {\r\n \t\t\tdelete this._eventParents[stamp(obj)];\r\n \t\t}\r\n \t\treturn this;\r\n \t},\r\n\r\n \t_propagateEvent: function (e) {\r\n \t\tfor (var id in this._eventParents) {\r\n \t\t\tthis._eventParents[id].fire(e.type, extend({\r\n \t\t\t\tlayer: e.target,\r\n \t\t\t\tpropagatedFrom: e.target\r\n \t\t\t}, e), true);\r\n \t\t}\r\n \t}\r\n };\r\n\r\n // aliases; we should ditch those eventually\r\n\r\n // @method addEventListener(…): this\r\n // Alias to [`on(…)`](#evented-on)\r\n Events.addEventListener = Events.on;\r\n\r\n // @method removeEventListener(…): this\r\n // Alias to [`off(…)`](#evented-off)\r\n\r\n // @method clearAllEventListeners(…): this\r\n // Alias to [`off()`](#evented-off)\r\n Events.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n // @method addOneTimeEventListener(…): this\r\n // Alias to [`once(…)`](#evented-once)\r\n Events.addOneTimeEventListener = Events.once;\r\n\r\n // @method fireEvent(…): this\r\n // Alias to [`fire(…)`](#evented-fire)\r\n Events.fireEvent = Events.fire;\r\n\r\n // @method hasEventListeners(…): Boolean\r\n // Alias to [`listens(…)`](#evented-listens)\r\n Events.hasEventListeners = Events.listens;\r\n\r\n var Evented = Class.extend(Events);\n\n /*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function Point(x, y, round) {\r\n \t// @property x: Number; The `x` coordinate of the point\r\n \tthis.x = (round ? Math.round(x) : x);\r\n \t// @property y: Number; The `y` coordinate of the point\r\n \tthis.y = (round ? Math.round(y) : y);\r\n }\r\n\r\n var trunc = Math.trunc || function (v) {\r\n \treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n };\r\n\r\n Point.prototype = {\r\n\r\n \t// @method clone(): Point\r\n \t// Returns a copy of the current point.\r\n \tclone: function () {\r\n \t\treturn new Point(this.x, this.y);\r\n \t},\r\n\r\n \t// @method add(otherPoint: Point): Point\r\n \t// Returns the result of addition of the current and the given points.\r\n \tadd: function (point) {\r\n \t\t// non-destructive, returns a new point\r\n \t\treturn this.clone()._add(toPoint(point));\r\n \t},\r\n\r\n \t_add: function (point) {\r\n \t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n \t\tthis.x += point.x;\r\n \t\tthis.y += point.y;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method subtract(otherPoint: Point): Point\r\n \t// Returns the result of subtraction of the given point from the current.\r\n \tsubtract: function (point) {\r\n \t\treturn this.clone()._subtract(toPoint(point));\r\n \t},\r\n\r\n \t_subtract: function (point) {\r\n \t\tthis.x -= point.x;\r\n \t\tthis.y -= point.y;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method divideBy(num: Number): Point\r\n \t// Returns the result of division of the current point by the given number.\r\n \tdivideBy: function (num) {\r\n \t\treturn this.clone()._divideBy(num);\r\n \t},\r\n\r\n \t_divideBy: function (num) {\r\n \t\tthis.x /= num;\r\n \t\tthis.y /= num;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method multiplyBy(num: Number): Point\r\n \t// Returns the result of multiplication of the current point by the given number.\r\n \tmultiplyBy: function (num) {\r\n \t\treturn this.clone()._multiplyBy(num);\r\n \t},\r\n\r\n \t_multiplyBy: function (num) {\r\n \t\tthis.x *= num;\r\n \t\tthis.y *= num;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method scaleBy(scale: Point): Point\r\n \t// Multiply each coordinate of the current point by each coordinate of\r\n \t// `scale`. In linear algebra terms, multiply the point by the\r\n \t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n \t// defined by `scale`.\r\n \tscaleBy: function (point) {\r\n \t\treturn new Point(this.x * point.x, this.y * point.y);\r\n \t},\r\n\r\n \t// @method unscaleBy(scale: Point): Point\r\n \t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n \t// each coordinate of `scale`.\r\n \tunscaleBy: function (point) {\r\n \t\treturn new Point(this.x / point.x, this.y / point.y);\r\n \t},\r\n\r\n \t// @method round(): Point\r\n \t// Returns a copy of the current point with rounded coordinates.\r\n \tround: function () {\r\n \t\treturn this.clone()._round();\r\n \t},\r\n\r\n \t_round: function () {\r\n \t\tthis.x = Math.round(this.x);\r\n \t\tthis.y = Math.round(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method floor(): Point\r\n \t// Returns a copy of the current point with floored coordinates (rounded down).\r\n \tfloor: function () {\r\n \t\treturn this.clone()._floor();\r\n \t},\r\n\r\n \t_floor: function () {\r\n \t\tthis.x = Math.floor(this.x);\r\n \t\tthis.y = Math.floor(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method ceil(): Point\r\n \t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n \tceil: function () {\r\n \t\treturn this.clone()._ceil();\r\n \t},\r\n\r\n \t_ceil: function () {\r\n \t\tthis.x = Math.ceil(this.x);\r\n \t\tthis.y = Math.ceil(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method trunc(): Point\r\n \t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n \ttrunc: function () {\r\n \t\treturn this.clone()._trunc();\r\n \t},\r\n\r\n \t_trunc: function () {\r\n \t\tthis.x = trunc(this.x);\r\n \t\tthis.y = trunc(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method distanceTo(otherPoint: Point): Number\r\n \t// Returns the cartesian distance between the current and the given points.\r\n \tdistanceTo: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\tvar x = point.x - this.x,\r\n \t\t y = point.y - this.y;\r\n\r\n \t\treturn Math.sqrt(x * x + y * y);\r\n \t},\r\n\r\n \t// @method equals(otherPoint: Point): Boolean\r\n \t// Returns `true` if the given point has the same coordinates.\r\n \tequals: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\treturn point.x === this.x &&\r\n \t\t point.y === this.y;\r\n \t},\r\n\r\n \t// @method contains(otherPoint: Point): Boolean\r\n \t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n \tcontains: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n \t\t Math.abs(point.y) <= Math.abs(this.y);\r\n \t},\r\n\r\n \t// @method toString(): String\r\n \t// Returns a string representation of the point for debugging purposes.\r\n \ttoString: function () {\r\n \t\treturn 'Point(' +\r\n \t\t formatNum(this.x) + ', ' +\r\n \t\t formatNum(this.y) + ')';\r\n \t}\r\n };\r\n\r\n // @factory L.point(x: Number, y: Number, round?: Boolean)\r\n // Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n // @alternative\r\n // @factory L.point(coords: Number[])\r\n // Expects an array of the form `[x, y]` instead.\r\n\r\n // @alternative\r\n // @factory L.point(coords: Object)\r\n // Expects a plain object of the form `{x: Number, y: Number}` instead.\r\n function toPoint(x, y, round) {\r\n \tif (x instanceof Point) {\r\n \t\treturn x;\r\n \t}\r\n \tif (isArray(x)) {\r\n \t\treturn new Point(x[0], x[1]);\r\n \t}\r\n \tif (x === undefined || x === null) {\r\n \t\treturn x;\r\n \t}\r\n \tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n \t\treturn new Point(x.x, x.y);\r\n \t}\r\n \treturn new Point(x, y, round);\r\n }\n\n /*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function Bounds(a, b) {\r\n \tif (!a) { return; }\r\n\r\n \tvar points = b ? [a, b] : a;\r\n\r\n \tfor (var i = 0, len = points.length; i < len; i++) {\r\n \t\tthis.extend(points[i]);\r\n \t}\r\n }\r\n\r\n Bounds.prototype = {\r\n \t// @method extend(point: Point): this\r\n \t// Extends the bounds to contain the given point.\r\n\r\n \t// @alternative\r\n \t// @method extend(otherBounds: Bounds): this\r\n \t// Extend the bounds to contain the given bounds\r\n \textend: function (obj) {\r\n \t\tvar min2, max2;\r\n \t\tif (!obj) { return this; }\r\n\r\n \t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n \t\t\tmin2 = max2 = toPoint(obj);\r\n \t\t} else {\r\n \t\t\tobj = toBounds(obj);\r\n \t\t\tmin2 = obj.min;\r\n \t\t\tmax2 = obj.max;\r\n\r\n \t\t\tif (!min2 || !max2) { return this; }\r\n \t\t}\r\n\r\n \t\t// @property min: Point\r\n \t\t// The top left corner of the rectangle.\r\n \t\t// @property max: Point\r\n \t\t// The bottom right corner of the rectangle.\r\n \t\tif (!this.min && !this.max) {\r\n \t\t\tthis.min = min2.clone();\r\n \t\t\tthis.max = max2.clone();\r\n \t\t} else {\r\n \t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n \t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n \t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n \t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n \t\t}\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method getCenter(round?: Boolean): Point\r\n \t// Returns the center point of the bounds.\r\n \tgetCenter: function (round) {\r\n \t\treturn toPoint(\r\n \t\t (this.min.x + this.max.x) / 2,\r\n \t\t (this.min.y + this.max.y) / 2, round);\r\n \t},\r\n\r\n \t// @method getBottomLeft(): Point\r\n \t// Returns the bottom-left point of the bounds.\r\n \tgetBottomLeft: function () {\r\n \t\treturn toPoint(this.min.x, this.max.y);\r\n \t},\r\n\r\n \t// @method getTopRight(): Point\r\n \t// Returns the top-right point of the bounds.\r\n \tgetTopRight: function () { // -> Point\r\n \t\treturn toPoint(this.max.x, this.min.y);\r\n \t},\r\n\r\n \t// @method getTopLeft(): Point\r\n \t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n \tgetTopLeft: function () {\r\n \t\treturn this.min; // left, top\r\n \t},\r\n\r\n \t// @method getBottomRight(): Point\r\n \t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n \tgetBottomRight: function () {\r\n \t\treturn this.max; // right, bottom\r\n \t},\r\n\r\n \t// @method getSize(): Point\r\n \t// Returns the size of the given bounds\r\n \tgetSize: function () {\r\n \t\treturn this.max.subtract(this.min);\r\n \t},\r\n\r\n \t// @method contains(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle contains the given one.\r\n \t// @alternative\r\n \t// @method contains(point: Point): Boolean\r\n \t// Returns `true` if the rectangle contains the given point.\r\n \tcontains: function (obj) {\r\n \t\tvar min, max;\r\n\r\n \t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n \t\t\tobj = toPoint(obj);\r\n \t\t} else {\r\n \t\t\tobj = toBounds(obj);\r\n \t\t}\r\n\r\n \t\tif (obj instanceof Bounds) {\r\n \t\t\tmin = obj.min;\r\n \t\t\tmax = obj.max;\r\n \t\t} else {\r\n \t\t\tmin = max = obj;\r\n \t\t}\r\n\r\n \t\treturn (min.x >= this.min.x) &&\r\n \t\t (max.x <= this.max.x) &&\r\n \t\t (min.y >= this.min.y) &&\r\n \t\t (max.y <= this.max.y);\r\n \t},\r\n\r\n \t// @method intersects(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n \t// intersect if they have at least one point in common.\r\n \tintersects: function (bounds) { // (Bounds) -> Boolean\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\tvar min = this.min,\r\n \t\t max = this.max,\r\n \t\t min2 = bounds.min,\r\n \t\t max2 = bounds.max,\r\n \t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n \t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n \t\treturn xIntersects && yIntersects;\r\n \t},\r\n\r\n \t// @method overlaps(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n \t// overlap if their intersection is an area.\r\n \toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\tvar min = this.min,\r\n \t\t max = this.max,\r\n \t\t min2 = bounds.min,\r\n \t\t max2 = bounds.max,\r\n \t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n \t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n \t\treturn xOverlaps && yOverlaps;\r\n \t},\r\n\r\n \t// @method isValid(): Boolean\r\n \t// Returns `true` if the bounds are properly initialized.\r\n \tisValid: function () {\r\n \t\treturn !!(this.min && this.max);\r\n \t},\r\n\r\n\r\n \t// @method pad(bufferRatio: Number): Bounds\r\n \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n \t// Negative values will retract the bounds.\r\n \tpad: function (bufferRatio) {\r\n \t\tvar min = this.min,\r\n \t\tmax = this.max,\r\n \t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n \t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n \t\treturn toBounds(\r\n \t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n \t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n \t},\r\n\r\n\r\n \t// @method equals(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n \tequals: function (bounds) {\r\n \t\tif (!bounds) { return false; }\r\n\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n \t\t\tthis.max.equals(bounds.getBottomRight());\r\n \t},\r\n };\r\n\r\n\r\n // @factory L.bounds(corner1: Point, corner2: Point)\r\n // Creates a Bounds object from two corners coordinate pairs.\r\n // @alternative\r\n // @factory L.bounds(points: Point[])\r\n // Creates a Bounds object from the given array of points.\r\n function toBounds(a, b) {\r\n \tif (!a || a instanceof Bounds) {\r\n \t\treturn a;\r\n \t}\r\n \treturn new Bounds(a, b);\r\n }\n\n /*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n \tif (!corner1) { return; }\r\n\r\n \tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n \tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n \t\tthis.extend(latlngs[i]);\r\n \t}\r\n }\r\n\r\n LatLngBounds.prototype = {\r\n\r\n \t// @method extend(latlng: LatLng): this\r\n \t// Extend the bounds to contain the given point\r\n\r\n \t// @alternative\r\n \t// @method extend(otherBounds: LatLngBounds): this\r\n \t// Extend the bounds to contain the given bounds\r\n \textend: function (obj) {\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2, ne2;\r\n\r\n \t\tif (obj instanceof LatLng) {\r\n \t\t\tsw2 = obj;\r\n \t\t\tne2 = obj;\r\n\r\n \t\t} else if (obj instanceof LatLngBounds) {\r\n \t\t\tsw2 = obj._southWest;\r\n \t\t\tne2 = obj._northEast;\r\n\r\n \t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n \t\t} else {\r\n \t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n \t\t}\r\n\r\n \t\tif (!sw && !ne) {\r\n \t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n \t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n \t\t} else {\r\n \t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n \t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n \t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n \t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method pad(bufferRatio: Number): LatLngBounds\r\n \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n \t// Negative values will retract the bounds.\r\n \tpad: function (bufferRatio) {\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n \t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n \t\treturn new LatLngBounds(\r\n \t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n \t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n \t},\r\n\r\n \t// @method getCenter(): LatLng\r\n \t// Returns the center point of the bounds.\r\n \tgetCenter: function () {\r\n \t\treturn new LatLng(\r\n \t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n \t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n \t},\r\n\r\n \t// @method getSouthWest(): LatLng\r\n \t// Returns the south-west point of the bounds.\r\n \tgetSouthWest: function () {\r\n \t\treturn this._southWest;\r\n \t},\r\n\r\n \t// @method getNorthEast(): LatLng\r\n \t// Returns the north-east point of the bounds.\r\n \tgetNorthEast: function () {\r\n \t\treturn this._northEast;\r\n \t},\r\n\r\n \t// @method getNorthWest(): LatLng\r\n \t// Returns the north-west point of the bounds.\r\n \tgetNorthWest: function () {\r\n \t\treturn new LatLng(this.getNorth(), this.getWest());\r\n \t},\r\n\r\n \t// @method getSouthEast(): LatLng\r\n \t// Returns the south-east point of the bounds.\r\n \tgetSouthEast: function () {\r\n \t\treturn new LatLng(this.getSouth(), this.getEast());\r\n \t},\r\n\r\n \t// @method getWest(): Number\r\n \t// Returns the west longitude of the bounds\r\n \tgetWest: function () {\r\n \t\treturn this._southWest.lng;\r\n \t},\r\n\r\n \t// @method getSouth(): Number\r\n \t// Returns the south latitude of the bounds\r\n \tgetSouth: function () {\r\n \t\treturn this._southWest.lat;\r\n \t},\r\n\r\n \t// @method getEast(): Number\r\n \t// Returns the east longitude of the bounds\r\n \tgetEast: function () {\r\n \t\treturn this._northEast.lng;\r\n \t},\r\n\r\n \t// @method getNorth(): Number\r\n \t// Returns the north latitude of the bounds\r\n \tgetNorth: function () {\r\n \t\treturn this._northEast.lat;\r\n \t},\r\n\r\n \t// @method contains(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle contains the given one.\r\n\r\n \t// @alternative\r\n \t// @method contains (latlng: LatLng): Boolean\r\n \t// Returns `true` if the rectangle contains the given point.\r\n \tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n \t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n \t\t\tobj = toLatLng(obj);\r\n \t\t} else {\r\n \t\t\tobj = toLatLngBounds(obj);\r\n \t\t}\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2, ne2;\r\n\r\n \t\tif (obj instanceof LatLngBounds) {\r\n \t\t\tsw2 = obj.getSouthWest();\r\n \t\t\tne2 = obj.getNorthEast();\r\n \t\t} else {\r\n \t\t\tsw2 = ne2 = obj;\r\n \t\t}\r\n\r\n \t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n \t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n \t},\r\n\r\n \t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n \tintersects: function (bounds) {\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2 = bounds.getSouthWest(),\r\n \t\t ne2 = bounds.getNorthEast(),\r\n\r\n \t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n \t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n \t\treturn latIntersects && lngIntersects;\r\n \t},\r\n\r\n \t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n \toverlaps: function (bounds) {\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2 = bounds.getSouthWest(),\r\n \t\t ne2 = bounds.getNorthEast(),\r\n\r\n \t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n \t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n \t\treturn latOverlaps && lngOverlaps;\r\n \t},\r\n\r\n \t// @method toBBoxString(): String\r\n \t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n \ttoBBoxString: function () {\r\n \t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n \t},\r\n\r\n \t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n \t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n \tequals: function (bounds, maxMargin) {\r\n \t\tif (!bounds) { return false; }\r\n\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n \t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n \t},\r\n\r\n \t// @method isValid(): Boolean\r\n \t// Returns `true` if the bounds are properly initialized.\r\n \tisValid: function () {\r\n \t\treturn !!(this._southWest && this._northEast);\r\n \t}\r\n };\r\n\r\n // TODO International date line?\r\n\r\n // @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n // Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n // @alternative\r\n // @factory L.latLngBounds(latlngs: LatLng[])\r\n // Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\n function toLatLngBounds(a, b) {\r\n \tif (a instanceof LatLngBounds) {\r\n \t\treturn a;\r\n \t}\r\n \treturn new LatLngBounds(a, b);\r\n }\n\n /* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function LatLng(lat, lng, alt) {\r\n \tif (isNaN(lat) || isNaN(lng)) {\r\n \t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n \t}\r\n\r\n \t// @property lat: Number\r\n \t// Latitude in degrees\r\n \tthis.lat = +lat;\r\n\r\n \t// @property lng: Number\r\n \t// Longitude in degrees\r\n \tthis.lng = +lng;\r\n\r\n \t// @property alt: Number\r\n \t// Altitude in meters (optional)\r\n \tif (alt !== undefined) {\r\n \t\tthis.alt = +alt;\r\n \t}\r\n }\r\n\r\n LatLng.prototype = {\r\n \t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n \t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n \tequals: function (obj, maxMargin) {\r\n \t\tif (!obj) { return false; }\r\n\r\n \t\tobj = toLatLng(obj);\r\n\r\n \t\tvar margin = Math.max(\r\n \t\t Math.abs(this.lat - obj.lat),\r\n \t\t Math.abs(this.lng - obj.lng));\r\n\r\n \t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n \t},\r\n\r\n \t// @method toString(): String\r\n \t// Returns a string representation of the point (for debugging purposes).\r\n \ttoString: function (precision) {\r\n \t\treturn 'LatLng(' +\r\n \t\t formatNum(this.lat, precision) + ', ' +\r\n \t\t formatNum(this.lng, precision) + ')';\r\n \t},\r\n\r\n \t// @method distanceTo(otherLatLng: LatLng): Number\r\n \t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n \tdistanceTo: function (other) {\r\n \t\treturn Earth.distance(this, toLatLng(other));\r\n \t},\r\n\r\n \t// @method wrap(): LatLng\r\n \t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n \twrap: function () {\r\n \t\treturn Earth.wrapLatLng(this);\r\n \t},\r\n\r\n \t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n \t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n \ttoBounds: function (sizeInMeters) {\r\n \t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n \t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n \t\treturn toLatLngBounds(\r\n \t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n \t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n \t},\r\n\r\n \tclone: function () {\r\n \t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n \t}\r\n };\r\n\r\n\r\n\r\n // @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n // Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n // @alternative\r\n // @factory L.latLng(coords: Array): LatLng\r\n // Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n // @alternative\r\n // @factory L.latLng(coords: Object): LatLng\r\n // Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\n function toLatLng(a, b, c) {\r\n \tif (a instanceof LatLng) {\r\n \t\treturn a;\r\n \t}\r\n \tif (isArray(a) && typeof a[0] !== 'object') {\r\n \t\tif (a.length === 3) {\r\n \t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n \t\t}\r\n \t\tif (a.length === 2) {\r\n \t\t\treturn new LatLng(a[0], a[1]);\r\n \t\t}\r\n \t\treturn null;\r\n \t}\r\n \tif (a === undefined || a === null) {\r\n \t\treturn a;\r\n \t}\r\n \tif (typeof a === 'object' && 'lat' in a) {\r\n \t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n \t}\r\n \tif (b === undefined) {\r\n \t\treturn null;\r\n \t}\r\n \treturn new LatLng(a, b, c);\r\n }\n\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\n var CRS = {\r\n \t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n \t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n \tlatLngToPoint: function (latlng, zoom) {\r\n \t\tvar projectedPoint = this.projection.project(latlng),\r\n \t\t scale = this.scale(zoom);\r\n\r\n \t\treturn this.transformation._transform(projectedPoint, scale);\r\n \t},\r\n\r\n \t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n \t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n \t// zoom into geographical coordinates.\r\n \tpointToLatLng: function (point, zoom) {\r\n \t\tvar scale = this.scale(zoom),\r\n \t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n \t\treturn this.projection.unproject(untransformedPoint);\r\n \t},\r\n\r\n \t// @method project(latlng: LatLng): Point\r\n \t// Projects geographical coordinates into coordinates in units accepted for\r\n \t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n \tproject: function (latlng) {\r\n \t\treturn this.projection.project(latlng);\r\n \t},\r\n\r\n \t// @method unproject(point: Point): LatLng\r\n \t// Given a projected coordinate returns the corresponding LatLng.\r\n \t// The inverse of `project`.\r\n \tunproject: function (point) {\r\n \t\treturn this.projection.unproject(point);\r\n \t},\r\n\r\n \t// @method scale(zoom: Number): Number\r\n \t// Returns the scale used when transforming projected coordinates into\r\n \t// pixel coordinates for a particular zoom. For example, it returns\r\n \t// `256 * 2^zoom` for Mercator-based CRS.\r\n \tscale: function (zoom) {\r\n \t\treturn 256 * Math.pow(2, zoom);\r\n \t},\r\n\r\n \t// @method zoom(scale: Number): Number\r\n \t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n \t// factor of `scale`.\r\n \tzoom: function (scale) {\r\n \t\treturn Math.log(scale / 256) / Math.LN2;\r\n \t},\r\n\r\n \t// @method getProjectedBounds(zoom: Number): Bounds\r\n \t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n \tgetProjectedBounds: function (zoom) {\r\n \t\tif (this.infinite) { return null; }\r\n\r\n \t\tvar b = this.projection.bounds,\r\n \t\t s = this.scale(zoom),\r\n \t\t min = this.transformation.transform(b.min, s),\r\n \t\t max = this.transformation.transform(b.max, s);\r\n\r\n \t\treturn new Bounds(min, max);\r\n \t},\r\n\r\n \t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n \t// Returns the distance between two geographical coordinates.\r\n\r\n \t// @property code: String\r\n \t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n \t//\r\n \t// @property wrapLng: Number[]\r\n \t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n \t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n \t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n \t//\r\n \t// @property wrapLat: Number[]\r\n \t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n \t// wrapLng: [min, max],\r\n \t// wrapLat: [min, max],\r\n\r\n \t// @property infinite: Boolean\r\n \t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n \tinfinite: false,\r\n\r\n \t// @method wrapLatLng(latlng: LatLng): LatLng\r\n \t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n \t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n \twrapLatLng: function (latlng) {\r\n \t\tvar lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n \t\t lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n \t\t alt = latlng.alt;\r\n\r\n \t\treturn new LatLng(lat, lng, alt);\r\n \t},\r\n\r\n \t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n \t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n \t// that its center is within the CRS's bounds.\r\n \t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n \twrapLatLngBounds: function (bounds) {\r\n \t\tvar center = bounds.getCenter(),\r\n \t\t newCenter = this.wrapLatLng(center),\r\n \t\t latShift = center.lat - newCenter.lat,\r\n \t\t lngShift = center.lng - newCenter.lng;\r\n\r\n \t\tif (latShift === 0 && lngShift === 0) {\r\n \t\t\treturn bounds;\r\n \t\t}\r\n\r\n \t\tvar sw = bounds.getSouthWest(),\r\n \t\t ne = bounds.getNorthEast(),\r\n \t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n \t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n \t\treturn new LatLngBounds(newSw, newNe);\r\n \t}\r\n };\n\n /*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\n var Earth = extend({}, CRS, {\n \twrapLng: [-180, 180],\n\n \t// Mean Earth Radius, as recommended for use by\n \t// the International Union of Geodesy and Geophysics,\n \t// see https://rosettacode.org/wiki/Haversine_formula\n \tR: 6371000,\n\n \t// distance between two geographical points using spherical law of cosines approximation\n \tdistance: function (latlng1, latlng2) {\n \t\tvar rad = Math.PI / 180,\n \t\t lat1 = latlng1.lat * rad,\n \t\t lat2 = latlng2.lat * rad,\n \t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n \t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n \t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n \t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n \t\treturn this.R * c;\n \t}\n });\n\n /*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\n var earthRadius = 6378137;\r\n\r\n var SphericalMercator = {\r\n\r\n \tR: earthRadius,\r\n \tMAX_LATITUDE: 85.0511287798,\r\n\r\n \tproject: function (latlng) {\r\n \t\tvar d = Math.PI / 180,\r\n \t\t max = this.MAX_LATITUDE,\r\n \t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n \t\t sin = Math.sin(lat * d);\r\n\r\n \t\treturn new Point(\r\n \t\t\tthis.R * latlng.lng * d,\r\n \t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n \t},\r\n\r\n \tunproject: function (point) {\r\n \t\tvar d = 180 / Math.PI;\r\n\r\n \t\treturn new LatLng(\r\n \t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n \t\t\tpoint.x * d / this.R);\r\n \t},\r\n\r\n \tbounds: (function () {\r\n \t\tvar d = earthRadius * Math.PI;\r\n \t\treturn new Bounds([-d, -d], [d, d]);\r\n \t})()\r\n };\n\n /*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n // factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n // Creates a `Transformation` object with the given coefficients.\r\n function Transformation(a, b, c, d) {\r\n \tif (isArray(a)) {\r\n \t\t// use array properties\r\n \t\tthis._a = a[0];\r\n \t\tthis._b = a[1];\r\n \t\tthis._c = a[2];\r\n \t\tthis._d = a[3];\r\n \t\treturn;\r\n \t}\r\n \tthis._a = a;\r\n \tthis._b = b;\r\n \tthis._c = c;\r\n \tthis._d = d;\r\n }\r\n\r\n Transformation.prototype = {\r\n \t// @method transform(point: Point, scale?: Number): Point\r\n \t// Returns a transformed point, optionally multiplied by the given scale.\r\n \t// Only accepts actual `L.Point` instances, not arrays.\r\n \ttransform: function (point, scale) { // (Point, Number) -> Point\r\n \t\treturn this._transform(point.clone(), scale);\r\n \t},\r\n\r\n \t// destructive transform (faster)\r\n \t_transform: function (point, scale) {\r\n \t\tscale = scale || 1;\r\n \t\tpoint.x = scale * (this._a * point.x + this._b);\r\n \t\tpoint.y = scale * (this._c * point.y + this._d);\r\n \t\treturn point;\r\n \t},\r\n\r\n \t// @method untransform(point: Point, scale?: Number): Point\r\n \t// Returns the reverse transformation of the given point, optionally divided\r\n \t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n \tuntransform: function (point, scale) {\r\n \t\tscale = scale || 1;\r\n \t\treturn new Point(\r\n \t\t (point.x / scale - this._b) / this._a,\r\n \t\t (point.y / scale - this._d) / this._c);\r\n \t}\r\n };\r\n\r\n // factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n // @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n // Instantiates a Transformation object with the given coefficients.\r\n\r\n // @alternative\r\n // @factory L.transformation(coefficients: Array): Transformation\r\n // Expects an coefficients array of the form\r\n // `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\n function toTransformation(a, b, c, d) {\r\n \treturn new Transformation(a, b, c, d);\r\n }\n\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\n var EPSG3857 = extend({}, Earth, {\r\n \tcode: 'EPSG:3857',\r\n \tprojection: SphericalMercator,\r\n\r\n \ttransformation: (function () {\r\n \t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n \t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n \t}())\r\n });\r\n\r\n var EPSG900913 = extend({}, EPSG3857, {\r\n \tcode: 'EPSG:900913'\r\n });\n\n // @namespace SVG; @section\n // There are several static functions which can be called without instantiating L.SVG:\n\n // @function create(name: String): SVGElement\n // Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n // corresponding to the class name passed. For example, using 'line' will return\n // an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\n function svgCreate(name) {\n \treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n }\n\n // @function pointsToPath(rings: Point[], closed: Boolean): String\n // Generates a SVG path string for multiple rings, with each ring turning\n // into \"M..L..L..\" instructions\n function pointsToPath(rings, closed) {\n \tvar str = '',\n \ti, j, len, len2, points, p;\n\n \tfor (i = 0, len = rings.length; i < len; i++) {\n \t\tpoints = rings[i];\n\n \t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n \t\t\tp = points[j];\n \t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n \t\t}\n\n \t\t// closes the ring for polygons; \"x\" is VML syntax\n \t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n \t}\n\n \t// SVG complains about empty path strings\n \treturn str || 'M0 0';\n }\n\n /*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\n var style = document.documentElement.style;\r\n\r\n // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\n var ie = 'ActiveXObject' in window;\r\n\r\n // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\n var ielt9 = ie && !document.addEventListener;\r\n\r\n // @property edge: Boolean; `true` for the Edge web browser.\r\n var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n // @property webkit: Boolean;\r\n // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\n var webkit = userAgentContains('webkit');\r\n\r\n // @property android: Boolean\r\n // **Deprecated.** `true` for any browser running on an Android platform.\r\n var android = userAgentContains('android');\r\n\r\n // @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\n var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\n var webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n // @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\n var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n // @property opera: Boolean; `true` for the Opera browser\r\n var opera = !!window.opera;\r\n\r\n // @property chrome: Boolean; `true` for the Chrome browser.\r\n var chrome = !edge && userAgentContains('chrome');\r\n\r\n // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\n var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n // @property safari: Boolean; `true` for the Safari browser.\r\n var safari = !chrome && userAgentContains('safari');\r\n\r\n var phantom = userAgentContains('phantom');\r\n\r\n // @property opera12: Boolean\r\n // `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\n var opera12 = 'OTransition' in style;\r\n\r\n // @property win: Boolean; `true` when the browser is running in a Windows platform\r\n var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\n var ie3d = ie && ('transition' in style);\r\n\r\n // @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\n var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n // @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\n var gecko3d = 'MozPerspective' in style;\r\n\r\n // @property any3d: Boolean\r\n // `true` for all browsers supporting CSS transforms.\r\n var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n // @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\n var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\n var mobileWebkit = mobile && webkit;\r\n\r\n // @property mobileWebkit3d: Boolean\r\n // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\n var mobileWebkit3d = mobile && webkit3d;\r\n\r\n // @property msPointer: Boolean\r\n // `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\n var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n // @property pointer: Boolean\r\n // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\n var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n // @property touchNative: Boolean\r\n // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n // **This does not necessarily mean** that the browser is running in a computer with\r\n // a touchscreen, it only means that the browser is capable of understanding\r\n // touch events.\r\n var touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n // @property touch: Boolean\r\n // `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n // Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\n var touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\n var mobileOpera = mobile && opera;\r\n\r\n // @property mobileGecko: Boolean\r\n // `true` for gecko-based browsers running in a mobile device.\r\n var mobileGecko = mobile && gecko;\r\n\r\n // @property retina: Boolean\r\n // `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\n var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n // @property passiveEvents: Boolean\r\n // `true` for browsers that support passive events.\r\n var passiveEvents = (function () {\r\n \tvar supportsPassiveOption = false;\r\n \ttry {\r\n \t\tvar opts = Object.defineProperty({}, 'passive', {\r\n \t\t\tget: function () { // eslint-disable-line getter-return\r\n \t\t\t\tsupportsPassiveOption = true;\r\n \t\t\t}\r\n \t\t});\r\n \t\twindow.addEventListener('testPassiveEventSupport', falseFn, opts);\r\n \t\twindow.removeEventListener('testPassiveEventSupport', falseFn, opts);\r\n \t} catch (e) {\r\n \t\t// Errors can safely be ignored since this is only a browser support test.\r\n \t}\r\n \treturn supportsPassiveOption;\r\n }());\r\n\r\n // @property canvas: Boolean\r\n // `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\n var canvas$1 = (function () {\r\n \treturn !!document.createElement('canvas').getContext;\r\n }());\r\n\r\n // @property svg: Boolean\r\n // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\n var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n var inlineSvg = !!svg$1 && (function () {\r\n \tvar div = document.createElement('div');\r\n \tdiv.innerHTML = '';\r\n \treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n })();\r\n\r\n // @property vml: Boolean\r\n // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\n var vml = !svg$1 && (function () {\r\n \ttry {\r\n \t\tvar div = document.createElement('div');\r\n \t\tdiv.innerHTML = '';\r\n\r\n \t\tvar shape = div.firstChild;\r\n \t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n \t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n \t} catch (e) {\r\n \t\treturn false;\r\n \t}\r\n }());\r\n\r\n\r\n // @property mac: Boolean; `true` when the browser is running in a Mac platform\r\n var mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n // @property mac: Boolean; `true` when the browser is running in a Linux platform\r\n var linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\n function userAgentContains(str) {\r\n \treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n }\r\n\r\n\r\n var Browser = {\r\n \tie: ie,\r\n \tielt9: ielt9,\r\n \tedge: edge,\r\n \twebkit: webkit,\r\n \tandroid: android,\r\n \tandroid23: android23,\r\n \tandroidStock: androidStock,\r\n \topera: opera,\r\n \tchrome: chrome,\r\n \tgecko: gecko,\r\n \tsafari: safari,\r\n \tphantom: phantom,\r\n \topera12: opera12,\r\n \twin: win,\r\n \tie3d: ie3d,\r\n \twebkit3d: webkit3d,\r\n \tgecko3d: gecko3d,\r\n \tany3d: any3d,\r\n \tmobile: mobile,\r\n \tmobileWebkit: mobileWebkit,\r\n \tmobileWebkit3d: mobileWebkit3d,\r\n \tmsPointer: msPointer,\r\n \tpointer: pointer,\r\n \ttouch: touch,\r\n \ttouchNative: touchNative,\r\n \tmobileOpera: mobileOpera,\r\n \tmobileGecko: mobileGecko,\r\n \tretina: retina,\r\n \tpassiveEvents: passiveEvents,\r\n \tcanvas: canvas$1,\r\n \tsvg: svg$1,\r\n \tvml: vml,\r\n \tinlineSvg: inlineSvg,\r\n \tmac: mac,\r\n \tlinux: linux\r\n };\n\n /*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n var POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\n var POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\n var POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\n var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\n var pEvent = {\n \ttouchstart : POINTER_DOWN,\n \ttouchmove : POINTER_MOVE,\n \ttouchend : POINTER_UP,\n \ttouchcancel : POINTER_CANCEL\n };\n var handle = {\n \ttouchstart : _onPointerStart,\n \ttouchmove : _handlePointer,\n \ttouchend : _handlePointer,\n \ttouchcancel : _handlePointer\n };\n var _pointers = {};\n var _pointerDocListener = false;\n\n // Provides a touch events wrapper for (ms)pointer events.\n // ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\n function addPointerListener(obj, type, handler) {\n \tif (type === 'touchstart') {\n \t\t_addPointerDocListener();\n \t}\n \tif (!handle[type]) {\n \t\tconsole.warn('wrong event specified:', type);\n \t\treturn falseFn;\n \t}\n \thandler = handle[type].bind(this, handler);\n \tobj.addEventListener(pEvent[type], handler, false);\n \treturn handler;\n }\n\n function removePointerListener(obj, type, handler) {\n \tif (!pEvent[type]) {\n \t\tconsole.warn('wrong event specified:', type);\n \t\treturn;\n \t}\n \tobj.removeEventListener(pEvent[type], handler, false);\n }\n\n function _globalPointerDown(e) {\n \t_pointers[e.pointerId] = e;\n }\n\n function _globalPointerMove(e) {\n \tif (_pointers[e.pointerId]) {\n \t\t_pointers[e.pointerId] = e;\n \t}\n }\n\n function _globalPointerUp(e) {\n \tdelete _pointers[e.pointerId];\n }\n\n function _addPointerDocListener() {\n \t// need to keep track of what pointers and how many are active to provide e.touches emulation\n \tif (!_pointerDocListener) {\n \t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n \t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n \t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n \t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n \t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n \t\t_pointerDocListener = true;\n \t}\n }\n\n function _handlePointer(handler, e) {\n \tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n \te.touches = [];\n \tfor (var i in _pointers) {\n \t\te.touches.push(_pointers[i]);\n \t}\n \te.changedTouches = [e];\n\n \thandler(e);\n }\n\n function _onPointerStart(handler, e) {\n \t// IE10 specific: MsTouch needs preventDefault. See #2000\n \tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n \t\tpreventDefault(e);\n \t}\n \t_handlePointer(handler, e);\n }\n\n /*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\n function makeDblclick(event) {\r\n \t// in modern browsers `type` cannot be just overridden:\r\n \t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n \tvar newEvent = {},\r\n \t prop, i;\r\n \tfor (i in event) {\r\n \t\tprop = event[i];\r\n \t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n \t}\r\n \tevent = newEvent;\r\n \tnewEvent.type = 'dblclick';\r\n \tnewEvent.detail = 2;\r\n \tnewEvent.isTrusted = false;\r\n \tnewEvent._simulated = true; // for debug purposes\r\n \treturn newEvent;\r\n }\r\n\r\n var delay = 200;\r\n function addDoubleTapListener(obj, handler) {\r\n \t// Most browsers handle double tap natively\r\n \tobj.addEventListener('dblclick', handler);\r\n\r\n \t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n \t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n \t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n \tvar last = 0,\r\n \t detail;\r\n \tfunction simDblclick(e) {\r\n \t\tif (e.detail !== 1) {\r\n \t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (e.pointerType === 'mouse' ||\r\n \t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// When clicking on an , the browser generates a click on its\r\n \t\t//
\n )}\n\n {/* Cracker Toggle */}\n {!query && (\n \n 🔓\n \n {showCracker ? 'Hide' : 'Show'} Room Finder\n \n ({crackerRunning ? 'running' : 'stopped'})\n \n \n
\n )}\n\n {/* Mark All Read */}\n {!query && Object.keys(unreadCounts).length > 0 && (\n \n \n Mark all as read\n \n )}\n\n {/* Favorites */}\n {favoriteItems.length > 0 && (\n <>\n
\n Favorites\n
\n {favoriteItems.map((item) => {\n if (item.type === 'channel') {\n const channel = item.channel;\n const unreadCount = getUnreadCount('channel', channel.key);\n const isMention = hasMention('channel', channel.key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'channel',\n id: channel.key,\n name: channel.name,\n })\n }\n >\n {channel.name}\n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n } else {\n const contact = item.contact;\n const unreadCount = getUnreadCount('contact', contact.public_key);\n const isMention = hasMention('contact', contact.public_key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n })\n }\n >\n \n \n {getContactDisplayName(contact.name, contact.public_key)}\n \n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n }\n })}\n \n )}\n\n {/* Channels */}\n {nonFavoriteChannels.length > 0 && (\n <>\n
\n Channels\n \n {sortOrder === 'alpha' ? 'A-Z' : '⏱'}\n \n
\n {nonFavoriteChannels.map((channel) => {\n const unreadCount = getUnreadCount('channel', channel.key);\n const isMention = hasMention('channel', channel.key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'channel',\n id: channel.key,\n name: channel.name,\n })\n }\n >\n {channel.name}\n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n })}\n \n )}\n\n {/* Contacts */}\n {nonFavoriteContacts.length > 0 && (\n <>\n
\n Contacts\n {nonFavoriteChannels.length === 0 && (\n \n {sortOrder === 'alpha' ? 'A-Z' : '⏱'}\n \n )}\n
\n {nonFavoriteContacts.map((contact) => {\n const unreadCount = getUnreadCount('contact', contact.public_key);\n const isMention = hasMention('contact', contact.public_key);\n return (\n 0 && '[&_.name]:font-bold [&_.name]:text-foreground'\n )}\n onClick={() =>\n handleSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n })\n }\n >\n \n \n {getContactDisplayName(contact.name, contact.public_key)}\n \n {unreadCount > 0 && (\n \n {formatUnreadCount(unreadCount)}\n \n )}\n \n );\n })}\n \n )}\n\n {/* Empty state */}\n {nonFavoriteContacts.length === 0 &&\n nonFavoriteChannels.length === 0 &&\n favoriteItems.length === 0 && (\n
\n {query ? 'No matches found' : 'No conversations yet'}\n
\n )}\n \n \n );\n}\n","/**\n * Parse sender from channel message text.\n * Channel messages have format \"sender: message\".\n */\nexport function parseSenderFromText(text: string): { sender: string | null; content: string } {\n const colonIndex = text.indexOf(': ');\n if (colonIndex > 0 && colonIndex < 50) {\n const potentialSender = text.substring(0, colonIndex);\n // Check for colon in potential sender (would indicate it's not a simple name)\n if (!potentialSender.includes(':')) {\n return {\n sender: potentialSender,\n content: text.substring(colonIndex + 2),\n };\n }\n }\n return { sender: null, content: text };\n}\n\n/**\n * Format a Unix timestamp to a time string.\n * Shows date for messages not from today.\n */\nexport function formatTime(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n const now = new Date();\n const isToday = date.toDateString() === now.toDateString();\n\n const time = date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' });\n\n if (isToday) {\n return time;\n }\n\n // Show short date for older messages\n const dateStr = date.toLocaleDateString([], { month: 'short', day: 'numeric' });\n return `${dateStr} ${time}`;\n}\n","import type { Contact, RadioConfig, MessagePath } from '../types';\nimport { CONTACT_TYPE_REPEATER } from '../types';\n\nexport interface PathHop {\n prefix: string; // 2-char hex prefix (e.g., \"1A\")\n matches: Contact[]; // Matched repeaters (empty=unknown, multiple=ambiguous)\n distanceFromPrev: number | null; // km from previous hop\n}\n\nexport interface ResolvedPath {\n sender: { name: string; prefix: string; lat: number | null; lon: number | null };\n hops: PathHop[];\n receiver: {\n name: string;\n prefix: string;\n lat: number | null;\n lon: number | null;\n publicKey: string | null;\n };\n totalDistances: number[] | null; // Single-element array with sum of unambiguous distances\n /** True if path has any gaps (unknown, ambiguous, or missing location hops) */\n hasGaps: boolean;\n}\n\nexport interface SenderInfo {\n name: string;\n publicKeyOrPrefix: string;\n lat: number | null;\n lon: number | null;\n}\n\n/**\n * Split hex string into 2-char hops\n */\nexport function parsePathHops(path: string | null | undefined): string[] {\n if (!path || path.length === 0) {\n return [];\n }\n\n const normalized = path.toUpperCase();\n const hops: string[] = [];\n\n for (let i = 0; i < normalized.length; i += 2) {\n if (i + 1 < normalized.length) {\n hops.push(normalized.slice(i, i + 2));\n }\n }\n\n return hops;\n}\n\n/**\n * Find contacts matching first 2 chars of public key (repeaters only for intermediate hops)\n */\nexport function findContactsByPrefix(\n prefix: string,\n contacts: Contact[],\n repeatersOnly: boolean = true\n): Contact[] {\n const normalizedPrefix = prefix.toUpperCase();\n return contacts.filter((c) => {\n if (repeatersOnly && c.type !== CONTACT_TYPE_REPEATER) {\n return false;\n }\n return c.public_key.toUpperCase().startsWith(normalizedPrefix);\n });\n}\n\n/**\n * Calculate distance between two points using Haversine formula\n * @returns Distance in km, or null if coordinates are missing\n */\nexport function calculateDistance(\n lat1: number | null,\n lon1: number | null,\n lat2: number | null,\n lon2: number | null\n): number | null {\n if (lat1 === null || lon1 === null || lat2 === null || lon2 === null) {\n return null;\n }\n\n const R = 6371; // Earth's radius in km\n const dLat = toRad(lat2 - lat1);\n const dLon = toRad(lon2 - lon1);\n const a =\n Math.sin(dLat / 2) * Math.sin(dLat / 2) +\n Math.cos(toRad(lat1)) * Math.cos(toRad(lat2)) * Math.sin(dLon / 2) * Math.sin(dLon / 2);\n const c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n return R * c;\n}\n\nfunction toRad(deg: number): number {\n return (deg * Math.PI) / 180;\n}\n\n/**\n * Check if coordinates represent a valid location\n * Returns false for null or (0, 0) which indicates unset location\n */\nexport function isValidLocation(lat: number | null, lon: number | null): boolean {\n if (lat === null || lon === null) {\n return false;\n }\n // (0, 0) is in the Atlantic Ocean - treat as unset\n if (lat === 0 && lon === 0) {\n return false;\n }\n return true;\n}\n\n/**\n * Format distance in human-readable form (m or km)\n */\nexport function formatDistance(km: number): string {\n if (km < 1) {\n return `${Math.round(km * 1000)}m`;\n }\n return `${km.toFixed(1)}km`;\n}\n\n/**\n * Sort contacts by distance from a reference point\n * Contacts without location are placed at the end\n */\nexport function sortContactsByDistance(\n contacts: Contact[],\n fromLat: number | null,\n fromLon: number | null\n): Contact[] {\n if (fromLat === null || fromLon === null) {\n return contacts;\n }\n\n return [...contacts].sort((a, b) => {\n const distA = calculateDistance(fromLat, fromLon, a.lat, a.lon);\n const distB = calculateDistance(fromLat, fromLon, b.lat, b.lon);\n\n // Null distances go to the end\n if (distA === null && distB === null) return 0;\n if (distA === null) return 1;\n if (distB === null) return -1;\n\n return distA - distB;\n });\n}\n\n/**\n * Get simple hop count from path string\n */\nexport function getHopCount(path: string | null | undefined): number {\n if (!path || path.length === 0) {\n return 0;\n }\n return Math.floor(path.length / 2);\n}\n\n/**\n * Format hop counts from multiple paths for display.\n * Returns something like \"d/1/3/3\" for direct, 1-hop, 3-hop, 3-hop paths.\n * Returns null if no paths or only direct.\n */\nexport function formatHopCounts(paths: MessagePath[] | null | undefined): {\n display: string;\n allDirect: boolean;\n hasMultiple: boolean;\n} {\n if (!paths || paths.length === 0) {\n return { display: '', allDirect: true, hasMultiple: false };\n }\n\n // Get hop counts for all paths and sort ascending\n const hopCounts = paths.map((p) => getHopCount(p.path)).sort((a, b) => a - b);\n\n const allDirect = hopCounts.every((h) => h === 0);\n const hasMultiple = paths.length > 1;\n\n // Format: \"d\" for 0, numbers for others\n const parts = hopCounts.map((h) => (h === 0 ? 'd' : h.toString()));\n const display = parts.join('/');\n\n return { display, allDirect, hasMultiple };\n}\n\n/**\n * Build complete path resolution with sender, hops, and receiver\n */\nexport function resolvePath(\n path: string | null | undefined,\n sender: SenderInfo,\n contacts: Contact[],\n config: RadioConfig | null\n): ResolvedPath {\n const hopPrefixes = parsePathHops(path);\n\n // Build sender info\n const senderPrefix = sender.publicKeyOrPrefix.toUpperCase().slice(0, 2);\n const resolvedSender = {\n name: sender.name,\n prefix: senderPrefix,\n lat: sender.lat,\n lon: sender.lon,\n };\n\n // Build receiver info from radio config\n const receiverPrefix = config?.public_key?.toUpperCase().slice(0, 2) || '??';\n const resolvedReceiver = {\n name: config?.name || 'Unknown',\n prefix: receiverPrefix,\n lat: config?.lat ?? null,\n lon: config?.lon ?? null,\n publicKey: config?.public_key ?? null,\n };\n\n // Build hops\n const hops: PathHop[] = [];\n let prevLat = sender.lat;\n let prevLon = sender.lon;\n // Start uncertain if sender has no valid location\n let prevHopUncertain = !isValidLocation(sender.lat, sender.lon);\n\n for (const prefix of hopPrefixes) {\n const matches = findContactsByPrefix(prefix, contacts, true);\n const sortedMatches = sortContactsByDistance(matches, prevLat, prevLon);\n\n // Calculate distance from previous hop\n // Can't calculate if previous hop was uncertain (unknown/ambiguous/no location) or current hop is unknown/invalid\n let distanceFromPrev: number | null = null;\n const currentHasValidLocation =\n sortedMatches.length === 1 && isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon);\n if (!prevHopUncertain && currentHasValidLocation) {\n distanceFromPrev = calculateDistance(\n prevLat,\n prevLon,\n sortedMatches[0].lat,\n sortedMatches[0].lon\n );\n }\n\n hops.push({\n prefix,\n matches: sortedMatches,\n distanceFromPrev,\n });\n\n // Update previous location for next hop\n if (sortedMatches.length === 0) {\n // Unknown hop - can't calculate distance for next hop\n prevHopUncertain = true;\n prevLat = null;\n prevLon = null;\n } else if (sortedMatches.length > 1) {\n // Ambiguous hop - can't calculate distance for next hop (too many combinations)\n prevHopUncertain = true;\n // Use first match's location for sorting purposes, but distance won't be shown\n if (isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon)) {\n prevLat = sortedMatches[0].lat;\n prevLon = sortedMatches[0].lon;\n } else {\n prevLat = null;\n prevLon = null;\n }\n } else if (isValidLocation(sortedMatches[0].lat, sortedMatches[0].lon)) {\n prevHopUncertain = false;\n prevLat = sortedMatches[0].lat;\n prevLon = sortedMatches[0].lon;\n } else {\n // Known hop but no valid location - treat as uncertain for distance purposes\n prevHopUncertain = true;\n prevLat = null;\n prevLon = null;\n }\n }\n\n // Calculate total distances (can be multiple if ambiguous)\n const totalDistances = calculateTotalDistances(resolvedSender, hops, resolvedReceiver);\n\n // Determine if path has any gaps (unknown, ambiguous, or missing location)\n const hasGaps =\n !isValidLocation(resolvedSender.lat, resolvedSender.lon) ||\n !isValidLocation(resolvedReceiver.lat, resolvedReceiver.lon) ||\n hops.some(\n (hop) => hop.matches.length !== 1 || !isValidLocation(hop.matches[0].lat, hop.matches[0].lon)\n );\n\n return {\n sender: resolvedSender,\n hops,\n receiver: resolvedReceiver,\n totalDistances,\n hasGaps,\n };\n}\n\n/**\n * Calculate total distance(s) for the path\n * Returns array for ambiguous paths, null if any segment can't be calculated\n * If sender has no location, starts calculating from first hop with location\n */\nfunction calculateTotalDistances(\n sender: { lat: number | null; lon: number | null },\n hops: PathHop[],\n receiver: { lat: number | null; lon: number | null }\n): number[] | null {\n // Simple case: no hops\n if (hops.length === 0) {\n if (!isValidLocation(sender.lat, sender.lon) || !isValidLocation(receiver.lat, receiver.lon)) {\n return null;\n }\n const dist = calculateDistance(sender.lat, sender.lon, receiver.lat, receiver.lon);\n return dist !== null ? [dist] : null;\n }\n\n // Start from sender if it has valid location, otherwise find first hop with valid location\n let prevLat = sender.lat;\n let prevLon = sender.lon;\n let startHopIndex = 0;\n\n if (!isValidLocation(prevLat, prevLon)) {\n // Find first hop with a known, unambiguous, valid location\n for (let i = 0; i < hops.length; i++) {\n const hop = hops[i];\n if (hop.matches.length === 1 && isValidLocation(hop.matches[0].lat, hop.matches[0].lon)) {\n prevLat = hop.matches[0].lat;\n prevLon = hop.matches[0].lon;\n startHopIndex = i + 1;\n break;\n }\n }\n // If no hop has valid location, can't calculate\n if (!isValidLocation(prevLat, prevLon)) {\n return null;\n }\n }\n\n // Sum up only unambiguous segments (where both endpoints are known and unambiguous)\n let totalDistance = 0;\n let hasAnyDistance = false;\n let lastUnambiguousHopIndex = -1; // Track last unambiguous hop for receiver distance\n\n for (let i = startHopIndex; i < hops.length; i++) {\n const hop = hops[i];\n\n // Skip if hop is unknown or ambiguous or has no valid location\n if (hop.matches.length !== 1 || !isValidLocation(hop.matches[0].lat, hop.matches[0].lon)) {\n // Can't include this segment - reset prevLat/prevLon for next potential segment\n prevLat = null;\n prevLon = null;\n continue;\n }\n\n // Only calculate distance if previous location is known (unambiguous)\n if (prevLat !== null && prevLon !== null) {\n const dist = calculateDistance(prevLat, prevLon, hop.matches[0].lat, hop.matches[0].lon);\n if (dist !== null) {\n totalDistance += dist;\n hasAnyDistance = true;\n }\n }\n\n // Update for next iteration\n prevLat = hop.matches[0].lat;\n prevLon = hop.matches[0].lon;\n lastUnambiguousHopIndex = i;\n }\n\n // Add final leg to receiver only if last hop was unambiguous and receiver has valid location\n if (lastUnambiguousHopIndex === hops.length - 1 && prevLat !== null && prevLon !== null) {\n if (isValidLocation(receiver.lat, receiver.lon)) {\n const finalDist = calculateDistance(prevLat, prevLon, receiver.lat, receiver.lon);\n if (finalDist !== null) {\n totalDistance += finalDist;\n hasAnyDistance = true;\n }\n }\n }\n\n // Return total if we calculated any distance\n return hasAnyDistance ? [totalDistance] : null;\n}\n","// src/primitive.tsx\nvar canUseDOM = !!(typeof window !== \"undefined\" && window.document && window.document.createElement);\nfunction composeEventHandlers(originalEventHandler, ourEventHandler, { checkForDefaultPrevented = true } = {}) {\n return function handleEvent(event) {\n originalEventHandler?.(event);\n if (checkForDefaultPrevented === false || !event.defaultPrevented) {\n return ourEventHandler?.(event);\n }\n };\n}\nfunction getOwnerWindow(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access window outside of the DOM\");\n }\n return element?.ownerDocument?.defaultView ?? window;\n}\nfunction getOwnerDocument(element) {\n if (!canUseDOM) {\n throw new Error(\"Cannot access document outside of the DOM\");\n }\n return element?.ownerDocument ?? document;\n}\nfunction getActiveElement(node, activeDescendant = false) {\n const { activeElement } = getOwnerDocument(node);\n if (!activeElement?.nodeName) {\n return null;\n }\n if (isFrame(activeElement) && activeElement.contentDocument) {\n return getActiveElement(activeElement.contentDocument.body, activeDescendant);\n }\n if (activeDescendant) {\n const id = activeElement.getAttribute(\"aria-activedescendant\");\n if (id) {\n const element = getOwnerDocument(activeElement).getElementById(id);\n if (element) {\n return element;\n }\n }\n }\n return activeElement;\n}\nfunction isFrame(element) {\n return element.tagName === \"IFRAME\";\n}\nexport {\n canUseDOM,\n composeEventHandlers,\n getActiveElement,\n getOwnerDocument,\n getOwnerWindow,\n isFrame\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/context/src/create-context.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createContext2(rootComponentName, defaultContext) {\n const Context = React.createContext(defaultContext);\n const Provider = (props) => {\n const { children, ...context } = props;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName) {\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n}\nfunction createContextScope(scopeName, createContextScopeDeps = []) {\n let defaultContexts = [];\n function createContext3(rootComponentName, defaultContext) {\n const BaseContext = React.createContext(defaultContext);\n const index = defaultContexts.length;\n defaultContexts = [...defaultContexts, defaultContext];\n const Provider = (props) => {\n const { scope, children, ...context } = props;\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const value = React.useMemo(() => context, Object.values(context));\n return /* @__PURE__ */ jsx(Context.Provider, { value, children });\n };\n Provider.displayName = rootComponentName + \"Provider\";\n function useContext2(consumerName, scope) {\n const Context = scope?.[scopeName]?.[index] || BaseContext;\n const context = React.useContext(Context);\n if (context) return context;\n if (defaultContext !== void 0) return defaultContext;\n throw new Error(`\\`${consumerName}\\` must be used within \\`${rootComponentName}\\``);\n }\n return [Provider, useContext2];\n }\n const createScope = () => {\n const scopeContexts = defaultContexts.map((defaultContext) => {\n return React.createContext(defaultContext);\n });\n return function useScope(scope) {\n const contexts = scope?.[scopeName] || scopeContexts;\n return React.useMemo(\n () => ({ [`__scope${scopeName}`]: { ...scope, [scopeName]: contexts } }),\n [scope, contexts]\n );\n };\n };\n createScope.scopeName = scopeName;\n return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];\n}\nfunction composeContextScopes(...scopes) {\n const baseScope = scopes[0];\n if (scopes.length === 1) return baseScope;\n const createScope = () => {\n const scopeHooks = scopes.map((createScope2) => ({\n useScope: createScope2(),\n scopeName: createScope2.scopeName\n }));\n return function useComposedScopes(overrideScopes) {\n const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {\n const scopeProps = useScope(overrideScopes);\n const currentScope = scopeProps[`__scope${scopeName}`];\n return { ...nextScopes2, ...currentScope };\n }, {});\n return React.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);\n };\n };\n createScope.scopeName = baseScope.scopeName;\n return createScope;\n}\nexport {\n createContext2 as createContext,\n createContextScope\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-layout-effect/src/use-layout-effect.tsx\nimport * as React from \"react\";\nvar useLayoutEffect2 = globalThis?.document ? React.useLayoutEffect : () => {\n};\nexport {\n useLayoutEffect2 as useLayoutEffect\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/id/src/id.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useReactId = React[\" useId \".trim().toString()] || (() => void 0);\nvar count = 0;\nfunction useId(deterministicId) {\n const [id, setId] = React.useState(useReactId());\n useLayoutEffect(() => {\n if (!deterministicId) setId((reactId) => reactId ?? String(count++));\n }, [deterministicId]);\n return deterministicId || (id ? `radix-${id}` : \"\");\n}\nexport {\n useId\n};\n//# sourceMappingURL=index.mjs.map\n","// src/use-controllable-state.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nvar useInsertionEffect = React[\" useInsertionEffect \".trim().toString()] || useLayoutEffect;\nfunction useControllableState({\n prop,\n defaultProp,\n onChange = () => {\n },\n caller\n}) {\n const [uncontrolledProp, setUncontrolledProp, onChangeRef] = useUncontrolledState({\n defaultProp,\n onChange\n });\n const isControlled = prop !== void 0;\n const value = isControlled ? prop : uncontrolledProp;\n if (true) {\n const isControlledRef = React.useRef(prop !== void 0);\n React.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const setValue = React.useCallback(\n (nextValue) => {\n if (isControlled) {\n const value2 = isFunction(nextValue) ? nextValue(prop) : nextValue;\n if (value2 !== prop) {\n onChangeRef.current?.(value2);\n }\n } else {\n setUncontrolledProp(nextValue);\n }\n },\n [isControlled, prop, setUncontrolledProp, onChangeRef]\n );\n return [value, setValue];\n}\nfunction useUncontrolledState({\n defaultProp,\n onChange\n}) {\n const [value, setValue] = React.useState(defaultProp);\n const prevValueRef = React.useRef(value);\n const onChangeRef = React.useRef(onChange);\n useInsertionEffect(() => {\n onChangeRef.current = onChange;\n }, [onChange]);\n React.useEffect(() => {\n if (prevValueRef.current !== value) {\n onChangeRef.current?.(value);\n prevValueRef.current = value;\n }\n }, [value, prevValueRef]);\n return [value, setValue, onChangeRef];\n}\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\n\n// src/use-controllable-state-reducer.tsx\nimport * as React2 from \"react\";\nimport { useEffectEvent } from \"@radix-ui/react-use-effect-event\";\nvar SYNC_STATE = Symbol(\"RADIX:SYNC_STATE\");\nfunction useControllableStateReducer(reducer, userArgs, initialArg, init) {\n const { prop: controlledState, defaultProp, onChange: onChangeProp, caller } = userArgs;\n const isControlled = controlledState !== void 0;\n const onChange = useEffectEvent(onChangeProp);\n if (true) {\n const isControlledRef = React2.useRef(controlledState !== void 0);\n React2.useEffect(() => {\n const wasControlled = isControlledRef.current;\n if (wasControlled !== isControlled) {\n const from = wasControlled ? \"controlled\" : \"uncontrolled\";\n const to = isControlled ? \"controlled\" : \"uncontrolled\";\n console.warn(\n `${caller} is changing from ${from} to ${to}. Components should not switch from controlled to uncontrolled (or vice versa). Decide between using a controlled or uncontrolled value for the lifetime of the component.`\n );\n }\n isControlledRef.current = isControlled;\n }, [isControlled, caller]);\n }\n const args = [{ ...initialArg, state: defaultProp }];\n if (init) {\n args.push(init);\n }\n const [internalState, dispatch] = React2.useReducer(\n (state2, action) => {\n if (action.type === SYNC_STATE) {\n return { ...state2, state: action.state };\n }\n const next = reducer(state2, action);\n if (isControlled && !Object.is(next.state, state2.state)) {\n onChange(next.state);\n }\n return next;\n },\n ...args\n );\n const uncontrolledState = internalState.state;\n const prevValueRef = React2.useRef(uncontrolledState);\n React2.useEffect(() => {\n if (prevValueRef.current !== uncontrolledState) {\n prevValueRef.current = uncontrolledState;\n if (!isControlled) {\n onChange(uncontrolledState);\n }\n }\n }, [onChange, uncontrolledState, prevValueRef, isControlled]);\n const state = React2.useMemo(() => {\n const isControlled2 = controlledState !== void 0;\n if (isControlled2) {\n return { ...internalState, state: controlledState };\n }\n return internalState;\n }, [internalState, controlledState]);\n React2.useEffect(() => {\n if (isControlled && !Object.is(controlledState, internalState.state)) {\n dispatch({ type: SYNC_STATE, state: controlledState });\n }\n }, [controlledState, internalState.state, isControlled]);\n return [state, dispatch];\n}\nexport {\n useControllableState,\n useControllableStateReducer\n};\n//# sourceMappingURL=index.mjs.map\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-callback-ref/src/use-callback-ref.tsx\nimport * as React from \"react\";\nfunction useCallbackRef(callback) {\n const callbackRef = React.useRef(callback);\n React.useEffect(() => {\n callbackRef.current = callback;\n });\n return React.useMemo(() => (...args) => callbackRef.current?.(...args), []);\n}\nexport {\n useCallbackRef\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-escape-keydown/src/use-escape-keydown.tsx\nimport * as React from \"react\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nfunction useEscapeKeydown(onEscapeKeyDownProp, ownerDocument = globalThis?.document) {\n const onEscapeKeyDown = useCallbackRef(onEscapeKeyDownProp);\n React.useEffect(() => {\n const handleKeyDown = (event) => {\n if (event.key === \"Escape\") {\n onEscapeKeyDown(event);\n }\n };\n ownerDocument.addEventListener(\"keydown\", handleKeyDown, { capture: true });\n return () => ownerDocument.removeEventListener(\"keydown\", handleKeyDown, { capture: true });\n }, [onEscapeKeyDown, ownerDocument]);\n}\nexport {\n useEscapeKeydown\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dismissable-layer.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { Primitive, dispatchDiscreteCustomEvent } from \"@radix-ui/react-primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useEscapeKeydown } from \"@radix-ui/react-use-escape-keydown\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DISMISSABLE_LAYER_NAME = \"DismissableLayer\";\nvar CONTEXT_UPDATE = \"dismissableLayer.update\";\nvar POINTER_DOWN_OUTSIDE = \"dismissableLayer.pointerDownOutside\";\nvar FOCUS_OUTSIDE = \"dismissableLayer.focusOutside\";\nvar originalBodyPointerEvents;\nvar DismissableLayerContext = React.createContext({\n layers: /* @__PURE__ */ new Set(),\n layersWithOutsidePointerEventsDisabled: /* @__PURE__ */ new Set(),\n branches: /* @__PURE__ */ new Set()\n});\nvar DismissableLayer = React.forwardRef(\n (props, forwardedRef) => {\n const {\n disableOutsidePointerEvents = false,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside,\n onInteractOutside,\n onDismiss,\n ...layerProps\n } = props;\n const context = React.useContext(DismissableLayerContext);\n const [node, setNode] = React.useState(null);\n const ownerDocument = node?.ownerDocument ?? globalThis?.document;\n const [, force] = React.useState({});\n const composedRefs = useComposedRefs(forwardedRef, (node2) => setNode(node2));\n const layers = Array.from(context.layers);\n const [highestLayerWithOutsidePointerEventsDisabled] = [...context.layersWithOutsidePointerEventsDisabled].slice(-1);\n const highestLayerWithOutsidePointerEventsDisabledIndex = layers.indexOf(highestLayerWithOutsidePointerEventsDisabled);\n const index = node ? layers.indexOf(node) : -1;\n const isBodyPointerEventsDisabled = context.layersWithOutsidePointerEventsDisabled.size > 0;\n const isPointerEventsEnabled = index >= highestLayerWithOutsidePointerEventsDisabledIndex;\n const pointerDownOutside = usePointerDownOutside((event) => {\n const target = event.target;\n const isPointerDownOnBranch = [...context.branches].some((branch) => branch.contains(target));\n if (!isPointerEventsEnabled || isPointerDownOnBranch) return;\n onPointerDownOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n const focusOutside = useFocusOutside((event) => {\n const target = event.target;\n const isFocusInBranch = [...context.branches].some((branch) => branch.contains(target));\n if (isFocusInBranch) return;\n onFocusOutside?.(event);\n onInteractOutside?.(event);\n if (!event.defaultPrevented) onDismiss?.();\n }, ownerDocument);\n useEscapeKeydown((event) => {\n const isHighestLayer = index === context.layers.size - 1;\n if (!isHighestLayer) return;\n onEscapeKeyDown?.(event);\n if (!event.defaultPrevented && onDismiss) {\n event.preventDefault();\n onDismiss();\n }\n }, ownerDocument);\n React.useEffect(() => {\n if (!node) return;\n if (disableOutsidePointerEvents) {\n if (context.layersWithOutsidePointerEventsDisabled.size === 0) {\n originalBodyPointerEvents = ownerDocument.body.style.pointerEvents;\n ownerDocument.body.style.pointerEvents = \"none\";\n }\n context.layersWithOutsidePointerEventsDisabled.add(node);\n }\n context.layers.add(node);\n dispatchUpdate();\n return () => {\n if (disableOutsidePointerEvents && context.layersWithOutsidePointerEventsDisabled.size === 1) {\n ownerDocument.body.style.pointerEvents = originalBodyPointerEvents;\n }\n };\n }, [node, ownerDocument, disableOutsidePointerEvents, context]);\n React.useEffect(() => {\n return () => {\n if (!node) return;\n context.layers.delete(node);\n context.layersWithOutsidePointerEventsDisabled.delete(node);\n dispatchUpdate();\n };\n }, [node, context]);\n React.useEffect(() => {\n const handleUpdate = () => force({});\n document.addEventListener(CONTEXT_UPDATE, handleUpdate);\n return () => document.removeEventListener(CONTEXT_UPDATE, handleUpdate);\n }, []);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...layerProps,\n ref: composedRefs,\n style: {\n pointerEvents: isBodyPointerEventsDisabled ? isPointerEventsEnabled ? \"auto\" : \"none\" : void 0,\n ...props.style\n },\n onFocusCapture: composeEventHandlers(props.onFocusCapture, focusOutside.onFocusCapture),\n onBlurCapture: composeEventHandlers(props.onBlurCapture, focusOutside.onBlurCapture),\n onPointerDownCapture: composeEventHandlers(\n props.onPointerDownCapture,\n pointerDownOutside.onPointerDownCapture\n )\n }\n );\n }\n);\nDismissableLayer.displayName = DISMISSABLE_LAYER_NAME;\nvar BRANCH_NAME = \"DismissableLayerBranch\";\nvar DismissableLayerBranch = React.forwardRef((props, forwardedRef) => {\n const context = React.useContext(DismissableLayerContext);\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n context.branches.add(node);\n return () => {\n context.branches.delete(node);\n };\n }\n }, [context.branches]);\n return /* @__PURE__ */ jsx(Primitive.div, { ...props, ref: composedRefs });\n});\nDismissableLayerBranch.displayName = BRANCH_NAME;\nfunction usePointerDownOutside(onPointerDownOutside, ownerDocument = globalThis?.document) {\n const handlePointerDownOutside = useCallbackRef(onPointerDownOutside);\n const isPointerInsideReactTreeRef = React.useRef(false);\n const handleClickRef = React.useRef(() => {\n });\n React.useEffect(() => {\n const handlePointerDown = (event) => {\n if (event.target && !isPointerInsideReactTreeRef.current) {\n let handleAndDispatchPointerDownOutsideEvent2 = function() {\n handleAndDispatchCustomEvent(\n POINTER_DOWN_OUTSIDE,\n handlePointerDownOutside,\n eventDetail,\n { discrete: true }\n );\n };\n var handleAndDispatchPointerDownOutsideEvent = handleAndDispatchPointerDownOutsideEvent2;\n const eventDetail = { originalEvent: event };\n if (event.pointerType === \"touch\") {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n handleClickRef.current = handleAndDispatchPointerDownOutsideEvent2;\n ownerDocument.addEventListener(\"click\", handleClickRef.current, { once: true });\n } else {\n handleAndDispatchPointerDownOutsideEvent2();\n }\n } else {\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n }\n isPointerInsideReactTreeRef.current = false;\n };\n const timerId = window.setTimeout(() => {\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown);\n }, 0);\n return () => {\n window.clearTimeout(timerId);\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown);\n ownerDocument.removeEventListener(\"click\", handleClickRef.current);\n };\n }, [ownerDocument, handlePointerDownOutside]);\n return {\n // ensures we check React component tree (not just DOM tree)\n onPointerDownCapture: () => isPointerInsideReactTreeRef.current = true\n };\n}\nfunction useFocusOutside(onFocusOutside, ownerDocument = globalThis?.document) {\n const handleFocusOutside = useCallbackRef(onFocusOutside);\n const isFocusInsideReactTreeRef = React.useRef(false);\n React.useEffect(() => {\n const handleFocus = (event) => {\n if (event.target && !isFocusInsideReactTreeRef.current) {\n const eventDetail = { originalEvent: event };\n handleAndDispatchCustomEvent(FOCUS_OUTSIDE, handleFocusOutside, eventDetail, {\n discrete: false\n });\n }\n };\n ownerDocument.addEventListener(\"focusin\", handleFocus);\n return () => ownerDocument.removeEventListener(\"focusin\", handleFocus);\n }, [ownerDocument, handleFocusOutside]);\n return {\n onFocusCapture: () => isFocusInsideReactTreeRef.current = true,\n onBlurCapture: () => isFocusInsideReactTreeRef.current = false\n };\n}\nfunction dispatchUpdate() {\n const event = new CustomEvent(CONTEXT_UPDATE);\n document.dispatchEvent(event);\n}\nfunction handleAndDispatchCustomEvent(name, handler, detail, { discrete }) {\n const target = detail.originalEvent.target;\n const event = new CustomEvent(name, { bubbles: false, cancelable: true, detail });\n if (handler) target.addEventListener(name, handler, { once: true });\n if (discrete) {\n dispatchDiscreteCustomEvent(target, event);\n } else {\n target.dispatchEvent(event);\n }\n}\nvar Root = DismissableLayer;\nvar Branch = DismissableLayerBranch;\nexport {\n Branch,\n DismissableLayer,\n DismissableLayerBranch,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-scope.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { jsx } from \"react/jsx-runtime\";\nvar AUTOFOCUS_ON_MOUNT = \"focusScope.autoFocusOnMount\";\nvar AUTOFOCUS_ON_UNMOUNT = \"focusScope.autoFocusOnUnmount\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar FOCUS_SCOPE_NAME = \"FocusScope\";\nvar FocusScope = React.forwardRef((props, forwardedRef) => {\n const {\n loop = false,\n trapped = false,\n onMountAutoFocus: onMountAutoFocusProp,\n onUnmountAutoFocus: onUnmountAutoFocusProp,\n ...scopeProps\n } = props;\n const [container, setContainer] = React.useState(null);\n const onMountAutoFocus = useCallbackRef(onMountAutoFocusProp);\n const onUnmountAutoFocus = useCallbackRef(onUnmountAutoFocusProp);\n const lastFocusedElementRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContainer(node));\n const focusScope = React.useRef({\n paused: false,\n pause() {\n this.paused = true;\n },\n resume() {\n this.paused = false;\n }\n }).current;\n React.useEffect(() => {\n if (trapped) {\n let handleFocusIn2 = function(event) {\n if (focusScope.paused || !container) return;\n const target = event.target;\n if (container.contains(target)) {\n lastFocusedElementRef.current = target;\n } else {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleFocusOut2 = function(event) {\n if (focusScope.paused || !container) return;\n const relatedTarget = event.relatedTarget;\n if (relatedTarget === null) return;\n if (!container.contains(relatedTarget)) {\n focus(lastFocusedElementRef.current, { select: true });\n }\n }, handleMutations2 = function(mutations) {\n const focusedElement = document.activeElement;\n if (focusedElement !== document.body) return;\n for (const mutation of mutations) {\n if (mutation.removedNodes.length > 0) focus(container);\n }\n };\n var handleFocusIn = handleFocusIn2, handleFocusOut = handleFocusOut2, handleMutations = handleMutations2;\n document.addEventListener(\"focusin\", handleFocusIn2);\n document.addEventListener(\"focusout\", handleFocusOut2);\n const mutationObserver = new MutationObserver(handleMutations2);\n if (container) mutationObserver.observe(container, { childList: true, subtree: true });\n return () => {\n document.removeEventListener(\"focusin\", handleFocusIn2);\n document.removeEventListener(\"focusout\", handleFocusOut2);\n mutationObserver.disconnect();\n };\n }\n }, [trapped, container, focusScope.paused]);\n React.useEffect(() => {\n if (container) {\n focusScopesStack.add(focusScope);\n const previouslyFocusedElement = document.activeElement;\n const hasFocusedCandidate = container.contains(previouslyFocusedElement);\n if (!hasFocusedCandidate) {\n const mountEvent = new CustomEvent(AUTOFOCUS_ON_MOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n container.dispatchEvent(mountEvent);\n if (!mountEvent.defaultPrevented) {\n focusFirst(removeLinks(getTabbableCandidates(container)), { select: true });\n if (document.activeElement === previouslyFocusedElement) {\n focus(container);\n }\n }\n }\n return () => {\n container.removeEventListener(AUTOFOCUS_ON_MOUNT, onMountAutoFocus);\n setTimeout(() => {\n const unmountEvent = new CustomEvent(AUTOFOCUS_ON_UNMOUNT, EVENT_OPTIONS);\n container.addEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n container.dispatchEvent(unmountEvent);\n if (!unmountEvent.defaultPrevented) {\n focus(previouslyFocusedElement ?? document.body, { select: true });\n }\n container.removeEventListener(AUTOFOCUS_ON_UNMOUNT, onUnmountAutoFocus);\n focusScopesStack.remove(focusScope);\n }, 0);\n };\n }\n }, [container, onMountAutoFocus, onUnmountAutoFocus, focusScope]);\n const handleKeyDown = React.useCallback(\n (event) => {\n if (!loop && !trapped) return;\n if (focusScope.paused) return;\n const isTabKey = event.key === \"Tab\" && !event.altKey && !event.ctrlKey && !event.metaKey;\n const focusedElement = document.activeElement;\n if (isTabKey && focusedElement) {\n const container2 = event.currentTarget;\n const [first, last] = getTabbableEdges(container2);\n const hasTabbableElementsInside = first && last;\n if (!hasTabbableElementsInside) {\n if (focusedElement === container2) event.preventDefault();\n } else {\n if (!event.shiftKey && focusedElement === last) {\n event.preventDefault();\n if (loop) focus(first, { select: true });\n } else if (event.shiftKey && focusedElement === first) {\n event.preventDefault();\n if (loop) focus(last, { select: true });\n }\n }\n }\n },\n [loop, trapped, focusScope.paused]\n );\n return /* @__PURE__ */ jsx(Primitive.div, { tabIndex: -1, ...scopeProps, ref: composedRefs, onKeyDown: handleKeyDown });\n});\nFocusScope.displayName = FOCUS_SCOPE_NAME;\nfunction focusFirst(candidates, { select = false } = {}) {\n const previouslyFocusedElement = document.activeElement;\n for (const candidate of candidates) {\n focus(candidate, { select });\n if (document.activeElement !== previouslyFocusedElement) return;\n }\n}\nfunction getTabbableEdges(container) {\n const candidates = getTabbableCandidates(container);\n const first = findVisible(candidates, container);\n const last = findVisible(candidates.reverse(), container);\n return [first, last];\n}\nfunction getTabbableCandidates(container) {\n const nodes = [];\n const walker = document.createTreeWalker(container, NodeFilter.SHOW_ELEMENT, {\n acceptNode: (node) => {\n const isHiddenInput = node.tagName === \"INPUT\" && node.type === \"hidden\";\n if (node.disabled || node.hidden || isHiddenInput) return NodeFilter.FILTER_SKIP;\n return node.tabIndex >= 0 ? NodeFilter.FILTER_ACCEPT : NodeFilter.FILTER_SKIP;\n }\n });\n while (walker.nextNode()) nodes.push(walker.currentNode);\n return nodes;\n}\nfunction findVisible(elements, container) {\n for (const element of elements) {\n if (!isHidden(element, { upTo: container })) return element;\n }\n}\nfunction isHidden(node, { upTo }) {\n if (getComputedStyle(node).visibility === \"hidden\") return true;\n while (node) {\n if (upTo !== void 0 && node === upTo) return false;\n if (getComputedStyle(node).display === \"none\") return true;\n node = node.parentElement;\n }\n return false;\n}\nfunction isSelectableInput(element) {\n return element instanceof HTMLInputElement && \"select\" in element;\n}\nfunction focus(element, { select = false } = {}) {\n if (element && element.focus) {\n const previouslyFocusedElement = document.activeElement;\n element.focus({ preventScroll: true });\n if (element !== previouslyFocusedElement && isSelectableInput(element) && select)\n element.select();\n }\n}\nvar focusScopesStack = createFocusScopesStack();\nfunction createFocusScopesStack() {\n let stack = [];\n return {\n add(focusScope) {\n const activeFocusScope = stack[0];\n if (focusScope !== activeFocusScope) {\n activeFocusScope?.pause();\n }\n stack = arrayRemove(stack, focusScope);\n stack.unshift(focusScope);\n },\n remove(focusScope) {\n stack = arrayRemove(stack, focusScope);\n stack[0]?.resume();\n }\n };\n}\nfunction arrayRemove(array, item) {\n const updatedArray = [...array];\n const index = updatedArray.indexOf(item);\n if (index !== -1) {\n updatedArray.splice(index, 1);\n }\n return updatedArray;\n}\nfunction removeLinks(items) {\n return items.filter((item) => item.tagName !== \"A\");\n}\nvar Root = FocusScope;\nexport {\n FocusScope,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/portal.tsx\nimport * as React from \"react\";\nimport ReactDOM from \"react-dom\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { jsx } from \"react/jsx-runtime\";\nvar PORTAL_NAME = \"Portal\";\nvar Portal = React.forwardRef((props, forwardedRef) => {\n const { container: containerProp, ...portalProps } = props;\n const [mounted, setMounted] = React.useState(false);\n useLayoutEffect(() => setMounted(true), []);\n const container = containerProp || mounted && globalThis?.document?.body;\n return container ? ReactDOM.createPortal(/* @__PURE__ */ jsx(Primitive.div, { ...portalProps, ref: forwardedRef }), container) : null;\n});\nPortal.displayName = PORTAL_NAME;\nvar Root = Portal;\nexport {\n Portal,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/presence.tsx\nimport * as React2 from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\n\n// src/use-state-machine.tsx\nimport * as React from \"react\";\nfunction useStateMachine(initialState, machine) {\n return React.useReducer((state, event) => {\n const nextState = machine[state][event];\n return nextState ?? state;\n }, initialState);\n}\n\n// src/presence.tsx\nvar Presence = (props) => {\n const { present, children } = props;\n const presence = usePresence(present);\n const child = typeof children === \"function\" ? children({ present: presence.isPresent }) : React2.Children.only(children);\n const ref = useComposedRefs(presence.ref, getElementRef(child));\n const forceMount = typeof children === \"function\";\n return forceMount || presence.isPresent ? React2.cloneElement(child, { ref }) : null;\n};\nPresence.displayName = \"Presence\";\nfunction usePresence(present) {\n const [node, setNode] = React2.useState();\n const stylesRef = React2.useRef(null);\n const prevPresentRef = React2.useRef(present);\n const prevAnimationNameRef = React2.useRef(\"none\");\n const initialState = present ? \"mounted\" : \"unmounted\";\n const [state, send] = useStateMachine(initialState, {\n mounted: {\n UNMOUNT: \"unmounted\",\n ANIMATION_OUT: \"unmountSuspended\"\n },\n unmountSuspended: {\n MOUNT: \"mounted\",\n ANIMATION_END: \"unmounted\"\n },\n unmounted: {\n MOUNT: \"mounted\"\n }\n });\n React2.useEffect(() => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n prevAnimationNameRef.current = state === \"mounted\" ? currentAnimationName : \"none\";\n }, [state]);\n useLayoutEffect(() => {\n const styles = stylesRef.current;\n const wasPresent = prevPresentRef.current;\n const hasPresentChanged = wasPresent !== present;\n if (hasPresentChanged) {\n const prevAnimationName = prevAnimationNameRef.current;\n const currentAnimationName = getAnimationName(styles);\n if (present) {\n send(\"MOUNT\");\n } else if (currentAnimationName === \"none\" || styles?.display === \"none\") {\n send(\"UNMOUNT\");\n } else {\n const isAnimating = prevAnimationName !== currentAnimationName;\n if (wasPresent && isAnimating) {\n send(\"ANIMATION_OUT\");\n } else {\n send(\"UNMOUNT\");\n }\n }\n prevPresentRef.current = present;\n }\n }, [present, send]);\n useLayoutEffect(() => {\n if (node) {\n let timeoutId;\n const ownerWindow = node.ownerDocument.defaultView ?? window;\n const handleAnimationEnd = (event) => {\n const currentAnimationName = getAnimationName(stylesRef.current);\n const isCurrentAnimation = currentAnimationName.includes(CSS.escape(event.animationName));\n if (event.target === node && isCurrentAnimation) {\n send(\"ANIMATION_END\");\n if (!prevPresentRef.current) {\n const currentFillMode = node.style.animationFillMode;\n node.style.animationFillMode = \"forwards\";\n timeoutId = ownerWindow.setTimeout(() => {\n if (node.style.animationFillMode === \"forwards\") {\n node.style.animationFillMode = currentFillMode;\n }\n });\n }\n }\n };\n const handleAnimationStart = (event) => {\n if (event.target === node) {\n prevAnimationNameRef.current = getAnimationName(stylesRef.current);\n }\n };\n node.addEventListener(\"animationstart\", handleAnimationStart);\n node.addEventListener(\"animationcancel\", handleAnimationEnd);\n node.addEventListener(\"animationend\", handleAnimationEnd);\n return () => {\n ownerWindow.clearTimeout(timeoutId);\n node.removeEventListener(\"animationstart\", handleAnimationStart);\n node.removeEventListener(\"animationcancel\", handleAnimationEnd);\n node.removeEventListener(\"animationend\", handleAnimationEnd);\n };\n } else {\n send(\"ANIMATION_END\");\n }\n }, [node, send]);\n return {\n isPresent: [\"mounted\", \"unmountSuspended\"].includes(state),\n ref: React2.useCallback((node2) => {\n stylesRef.current = node2 ? getComputedStyle(node2) : null;\n setNode(node2);\n }, [])\n };\n}\nfunction getAnimationName(styles) {\n return styles?.animationName || \"none\";\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nvar Root = Presence;\nexport {\n Presence,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/focus-guards.tsx\nimport * as React from \"react\";\nvar count = 0;\nfunction FocusGuards(props) {\n useFocusGuards();\n return props.children;\n}\nfunction useFocusGuards() {\n React.useEffect(() => {\n const edgeGuards = document.querySelectorAll(\"[data-radix-focus-guard]\");\n document.body.insertAdjacentElement(\"afterbegin\", edgeGuards[0] ?? createFocusGuard());\n document.body.insertAdjacentElement(\"beforeend\", edgeGuards[1] ?? createFocusGuard());\n count++;\n return () => {\n if (count === 1) {\n document.querySelectorAll(\"[data-radix-focus-guard]\").forEach((node) => node.remove());\n }\n count--;\n };\n }, []);\n}\nfunction createFocusGuard() {\n const element = document.createElement(\"span\");\n element.setAttribute(\"data-radix-focus-guard\", \"\");\n element.tabIndex = 0;\n element.style.outline = \"none\";\n element.style.opacity = \"0\";\n element.style.position = \"fixed\";\n element.style.pointerEvents = \"none\";\n return element;\n}\nexport {\n FocusGuards,\n FocusGuards as Root,\n useFocusGuards\n};\n//# sourceMappingURL=index.mjs.map\n","/******************************************************************************\nCopyright (c) Microsoft Corporation.\n\nPermission to use, copy, modify, and/or distribute this software for any\npurpose with or without fee is hereby granted.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH\nREGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY\nAND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,\nINDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM\nLOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR\nOTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR\nPERFORMANCE OF THIS SOFTWARE.\n***************************************************************************** */\n/* global Reflect, Promise, SuppressedError, Symbol, Iterator */\n\nvar extendStatics = function(d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n};\n\nexport function __extends(d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n}\n\nexport var __assign = function() {\n __assign = Object.assign || function __assign(t) {\n for (var s, i = 1, n = arguments.length; i < n; i++) {\n s = arguments[i];\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];\n }\n return t;\n }\n return __assign.apply(this, arguments);\n}\n\nexport function __rest(s, e) {\n var t = {};\n for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)\n t[p] = s[p];\n if (s != null && typeof Object.getOwnPropertySymbols === \"function\")\n for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {\n if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))\n t[p[i]] = s[p[i]];\n }\n return t;\n}\n\nexport function __decorate(decorators, target, key, desc) {\n var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n return c > 3 && r && Object.defineProperty(target, key, r), r;\n}\n\nexport function __param(paramIndex, decorator) {\n return function (target, key) { decorator(target, key, paramIndex); }\n}\n\nexport function __esDecorate(ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {\n function accept(f) { if (f !== void 0 && typeof f !== \"function\") throw new TypeError(\"Function expected\"); return f; }\n var kind = contextIn.kind, key = kind === \"getter\" ? \"get\" : kind === \"setter\" ? \"set\" : \"value\";\n var target = !descriptorIn && ctor ? contextIn[\"static\"] ? ctor : ctor.prototype : null;\n var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});\n var _, done = false;\n for (var i = decorators.length - 1; i >= 0; i--) {\n var context = {};\n for (var p in contextIn) context[p] = p === \"access\" ? {} : contextIn[p];\n for (var p in contextIn.access) context.access[p] = contextIn.access[p];\n context.addInitializer = function (f) { if (done) throw new TypeError(\"Cannot add initializers after decoration has completed\"); extraInitializers.push(accept(f || null)); };\n var result = (0, decorators[i])(kind === \"accessor\" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);\n if (kind === \"accessor\") {\n if (result === void 0) continue;\n if (result === null || typeof result !== \"object\") throw new TypeError(\"Object expected\");\n if (_ = accept(result.get)) descriptor.get = _;\n if (_ = accept(result.set)) descriptor.set = _;\n if (_ = accept(result.init)) initializers.unshift(_);\n }\n else if (_ = accept(result)) {\n if (kind === \"field\") initializers.unshift(_);\n else descriptor[key] = _;\n }\n }\n if (target) Object.defineProperty(target, contextIn.name, descriptor);\n done = true;\n};\n\nexport function __runInitializers(thisArg, initializers, value) {\n var useValue = arguments.length > 2;\n for (var i = 0; i < initializers.length; i++) {\n value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);\n }\n return useValue ? value : void 0;\n};\n\nexport function __propKey(x) {\n return typeof x === \"symbol\" ? x : \"\".concat(x);\n};\n\nexport function __setFunctionName(f, name, prefix) {\n if (typeof name === \"symbol\") name = name.description ? \"[\".concat(name.description, \"]\") : \"\";\n return Object.defineProperty(f, \"name\", { configurable: true, value: prefix ? \"\".concat(prefix, \" \", name) : name });\n};\n\nexport function __metadata(metadataKey, metadataValue) {\n if (typeof Reflect === \"object\" && typeof Reflect.metadata === \"function\") return Reflect.metadata(metadataKey, metadataValue);\n}\n\nexport function __awaiter(thisArg, _arguments, P, generator) {\n function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }\n return new (P || (P = Promise))(function (resolve, reject) {\n function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }\n function rejected(value) { try { step(generator[\"throw\"](value)); } catch (e) { reject(e); } }\n function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }\n step((generator = generator.apply(thisArg, _arguments || [])).next());\n });\n}\n\nexport function __generator(thisArg, body) {\n var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === \"function\" ? Iterator : Object).prototype);\n return g.next = verb(0), g[\"throw\"] = verb(1), g[\"return\"] = verb(2), typeof Symbol === \"function\" && (g[Symbol.iterator] = function() { return this; }), g;\n function verb(n) { return function (v) { return step([n, v]); }; }\n function step(op) {\n if (f) throw new TypeError(\"Generator is already executing.\");\n while (g && (g = 0, op[0] && (_ = 0)), _) try {\n if (f = 1, y && (t = op[0] & 2 ? y[\"return\"] : op[0] ? y[\"throw\"] || ((t = y[\"return\"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;\n if (y = 0, t) op = [op[0] & 2, t.value];\n switch (op[0]) {\n case 0: case 1: t = op; break;\n case 4: _.label++; return { value: op[1], done: false };\n case 5: _.label++; y = op[1]; op = [0]; continue;\n case 7: op = _.ops.pop(); _.trys.pop(); continue;\n default:\n if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }\n if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }\n if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }\n if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }\n if (t[2]) _.ops.pop();\n _.trys.pop(); continue;\n }\n op = body.call(thisArg, _);\n } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }\n if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };\n }\n}\n\nexport var __createBinding = Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n});\n\nexport function __exportStar(m, o) {\n for (var p in m) if (p !== \"default\" && !Object.prototype.hasOwnProperty.call(o, p)) __createBinding(o, m, p);\n}\n\nexport function __values(o) {\n var s = typeof Symbol === \"function\" && Symbol.iterator, m = s && o[s], i = 0;\n if (m) return m.call(o);\n if (o && typeof o.length === \"number\") return {\n next: function () {\n if (o && i >= o.length) o = void 0;\n return { value: o && o[i++], done: !o };\n }\n };\n throw new TypeError(s ? \"Object is not iterable.\" : \"Symbol.iterator is not defined.\");\n}\n\nexport function __read(o, n) {\n var m = typeof Symbol === \"function\" && o[Symbol.iterator];\n if (!m) return o;\n var i = m.call(o), r, ar = [], e;\n try {\n while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);\n }\n catch (error) { e = { error: error }; }\n finally {\n try {\n if (r && !r.done && (m = i[\"return\"])) m.call(i);\n }\n finally { if (e) throw e.error; }\n }\n return ar;\n}\n\n/** @deprecated */\nexport function __spread() {\n for (var ar = [], i = 0; i < arguments.length; i++)\n ar = ar.concat(__read(arguments[i]));\n return ar;\n}\n\n/** @deprecated */\nexport function __spreadArrays() {\n for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;\n for (var r = Array(s), k = 0, i = 0; i < il; i++)\n for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)\n r[k] = a[j];\n return r;\n}\n\nexport function __spreadArray(to, from, pack) {\n if (pack || arguments.length === 2) for (var i = 0, l = from.length, ar; i < l; i++) {\n if (ar || !(i in from)) {\n if (!ar) ar = Array.prototype.slice.call(from, 0, i);\n ar[i] = from[i];\n }\n }\n return to.concat(ar || Array.prototype.slice.call(from));\n}\n\nexport function __await(v) {\n return this instanceof __await ? (this.v = v, this) : new __await(v);\n}\n\nexport function __asyncGenerator(thisArg, _arguments, generator) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var g = generator.apply(thisArg, _arguments || []), i, q = [];\n return i = Object.create((typeof AsyncIterator === \"function\" ? AsyncIterator : Object).prototype), verb(\"next\"), verb(\"throw\"), verb(\"return\", awaitReturn), i[Symbol.asyncIterator] = function () { return this; }, i;\n function awaitReturn(f) { return function (v) { return Promise.resolve(v).then(f, reject); }; }\n function verb(n, f) { if (g[n]) { i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; if (f) i[n] = f(i[n]); } }\n function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }\n function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }\n function fulfill(value) { resume(\"next\", value); }\n function reject(value) { resume(\"throw\", value); }\n function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }\n}\n\nexport function __asyncDelegator(o) {\n var i, p;\n return i = {}, verb(\"next\"), verb(\"throw\", function (e) { throw e; }), verb(\"return\"), i[Symbol.iterator] = function () { return this; }, i;\n function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: false } : f ? f(v) : v; } : f; }\n}\n\nexport function __asyncValues(o) {\n if (!Symbol.asyncIterator) throw new TypeError(\"Symbol.asyncIterator is not defined.\");\n var m = o[Symbol.asyncIterator], i;\n return m ? m.call(o) : (o = typeof __values === \"function\" ? __values(o) : o[Symbol.iterator](), i = {}, verb(\"next\"), verb(\"throw\"), verb(\"return\"), i[Symbol.asyncIterator] = function () { return this; }, i);\n function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }\n function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }\n}\n\nexport function __makeTemplateObject(cooked, raw) {\n if (Object.defineProperty) { Object.defineProperty(cooked, \"raw\", { value: raw }); } else { cooked.raw = raw; }\n return cooked;\n};\n\nvar __setModuleDefault = Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n};\n\nvar ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n};\n\nexport function __importStar(mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n}\n\nexport function __importDefault(mod) {\n return (mod && mod.__esModule) ? mod : { default: mod };\n}\n\nexport function __classPrivateFieldGet(receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n}\n\nexport function __classPrivateFieldSet(receiver, state, value, kind, f) {\n if (kind === \"m\") throw new TypeError(\"Private method is not writable\");\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a setter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot write private member to an object whose class did not declare it\");\n return (kind === \"a\" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;\n}\n\nexport function __classPrivateFieldIn(state, receiver) {\n if (receiver === null || (typeof receiver !== \"object\" && typeof receiver !== \"function\")) throw new TypeError(\"Cannot use 'in' operator on non-object\");\n return typeof state === \"function\" ? receiver === state : state.has(receiver);\n}\n\nexport function __addDisposableResource(env, value, async) {\n if (value !== null && value !== void 0) {\n if (typeof value !== \"object\" && typeof value !== \"function\") throw new TypeError(\"Object expected.\");\n var dispose, inner;\n if (async) {\n if (!Symbol.asyncDispose) throw new TypeError(\"Symbol.asyncDispose is not defined.\");\n dispose = value[Symbol.asyncDispose];\n }\n if (dispose === void 0) {\n if (!Symbol.dispose) throw new TypeError(\"Symbol.dispose is not defined.\");\n dispose = value[Symbol.dispose];\n if (async) inner = dispose;\n }\n if (typeof dispose !== \"function\") throw new TypeError(\"Object not disposable.\");\n if (inner) dispose = function() { try { inner.call(this); } catch (e) { return Promise.reject(e); } };\n env.stack.push({ value: value, dispose: dispose, async: async });\n }\n else if (async) {\n env.stack.push({ async: true });\n }\n return value;\n}\n\nvar _SuppressedError = typeof SuppressedError === \"function\" ? SuppressedError : function (error, suppressed, message) {\n var e = new Error(message);\n return e.name = \"SuppressedError\", e.error = error, e.suppressed = suppressed, e;\n};\n\nexport function __disposeResources(env) {\n function fail(e) {\n env.error = env.hasError ? new _SuppressedError(e, env.error, \"An error was suppressed during disposal.\") : e;\n env.hasError = true;\n }\n var r, s = 0;\n function next() {\n while (r = env.stack.pop()) {\n try {\n if (!r.async && s === 1) return s = 0, env.stack.push(r), Promise.resolve().then(next);\n if (r.dispose) {\n var result = r.dispose.call(r.value);\n if (r.async) return s |= 2, Promise.resolve(result).then(next, function(e) { fail(e); return next(); });\n }\n else s |= 1;\n }\n catch (e) {\n fail(e);\n }\n }\n if (s === 1) return env.hasError ? Promise.reject(env.error) : Promise.resolve();\n if (env.hasError) throw env.error;\n }\n return next();\n}\n\nexport function __rewriteRelativeImportExtension(path, preserveJsx) {\n if (typeof path === \"string\" && /^\\.\\.?\\//.test(path)) {\n return path.replace(/\\.(tsx)$|((?:\\.d)?)((?:\\.[^./]+?)?)\\.([cm]?)ts$/i, function (m, tsx, d, ext, cm) {\n return tsx ? preserveJsx ? \".jsx\" : \".js\" : d && (!ext || !cm) ? m : (d + ext + \".\" + cm.toLowerCase() + \"js\");\n });\n }\n return path;\n}\n\nexport default {\n __extends,\n __assign,\n __rest,\n __decorate,\n __param,\n __esDecorate,\n __runInitializers,\n __propKey,\n __setFunctionName,\n __metadata,\n __awaiter,\n __generator,\n __createBinding,\n __exportStar,\n __values,\n __read,\n __spread,\n __spreadArrays,\n __spreadArray,\n __await,\n __asyncGenerator,\n __asyncDelegator,\n __asyncValues,\n __makeTemplateObject,\n __importStar,\n __importDefault,\n __classPrivateFieldGet,\n __classPrivateFieldSet,\n __classPrivateFieldIn,\n __addDisposableResource,\n __disposeResources,\n __rewriteRelativeImportExtension,\n};\n","export var zeroRightClassName = 'right-scroll-bar-position';\nexport var fullWidthClassName = 'width-before-scroll-bar';\nexport var noScrollbarsClassName = 'with-scroll-bars-hidden';\n/**\n * Name of a CSS variable containing the amount of \"hidden\" scrollbar\n * ! might be undefined ! use will fallback!\n */\nexport var removedBarSizeVariable = '--removed-body-scroll-bar-size';\n","/**\n * Assigns a value for a given ref, no matter of the ref format\n * @param {RefObject} ref - a callback function or ref object\n * @param value - a new value\n *\n * @see https://github.com/theKashey/use-callback-ref#assignref\n * @example\n * const refObject = useRef();\n * const refFn = (ref) => {....}\n *\n * assignRef(refObject, \"refValue\");\n * assignRef(refFn, \"refValue\");\n */\nexport function assignRef(ref, value) {\n if (typeof ref === 'function') {\n ref(value);\n }\n else if (ref) {\n ref.current = value;\n }\n return ref;\n}\n","import { useState } from 'react';\n/**\n * creates a MutableRef with ref change callback\n * @param initialValue - initial ref value\n * @param {Function} callback - a callback to run when value changes\n *\n * @example\n * const ref = useCallbackRef(0, (newValue, oldValue) => console.log(oldValue, '->', newValue);\n * ref.current = 1;\n * // prints 0 -> 1\n *\n * @see https://reactjs.org/docs/hooks-reference.html#useref\n * @see https://github.com/theKashey/use-callback-ref#usecallbackref---to-replace-reactuseref\n * @returns {MutableRefObject}\n */\nexport function useCallbackRef(initialValue, callback) {\n var ref = useState(function () { return ({\n // value\n value: initialValue,\n // last callback\n callback: callback,\n // \"memoized\" public interface\n facade: {\n get current() {\n return ref.value;\n },\n set current(value) {\n var last = ref.value;\n if (last !== value) {\n ref.value = value;\n ref.callback(value, last);\n }\n },\n },\n }); })[0];\n // update callback\n ref.callback = callback;\n return ref.facade;\n}\n","import * as React from 'react';\nimport { assignRef } from './assignRef';\nimport { useCallbackRef } from './useRef';\nvar useIsomorphicLayoutEffect = typeof window !== 'undefined' ? React.useLayoutEffect : React.useEffect;\nvar currentValues = new WeakMap();\n/**\n * Merges two or more refs together providing a single interface to set their value\n * @param {RefObject|Ref} refs\n * @returns {MutableRefObject} - a new ref, which translates all changes to {refs}\n *\n * @see {@link mergeRefs} a version without buit-in memoization\n * @see https://github.com/theKashey/use-callback-ref#usemergerefs\n * @example\n * const Component = React.forwardRef((props, ref) => {\n * const ownRef = useRef();\n * const domRef = useMergeRefs([ref, ownRef]); // 👈 merge together\n * return
...
\n * }\n */\nexport function useMergeRefs(refs, defaultValue) {\n var callbackRef = useCallbackRef(defaultValue || null, function (newValue) {\n return refs.forEach(function (ref) { return assignRef(ref, newValue); });\n });\n // handle refs changes - added or removed\n useIsomorphicLayoutEffect(function () {\n var oldValue = currentValues.get(callbackRef);\n if (oldValue) {\n var prevRefs_1 = new Set(oldValue);\n var nextRefs_1 = new Set(refs);\n var current_1 = callbackRef.current;\n prevRefs_1.forEach(function (ref) {\n if (!nextRefs_1.has(ref)) {\n assignRef(ref, null);\n }\n });\n nextRefs_1.forEach(function (ref) {\n if (!prevRefs_1.has(ref)) {\n assignRef(ref, current_1);\n }\n });\n }\n currentValues.set(callbackRef, refs);\n }, [refs]);\n return callbackRef;\n}\n","import { __assign } from \"tslib\";\nfunction ItoI(a) {\n return a;\n}\nfunction innerCreateMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n var buffer = [];\n var assigned = false;\n var medium = {\n read: function () {\n if (assigned) {\n throw new Error('Sidecar: could not `read` from an `assigned` medium. `read` could be used only with `useMedium`.');\n }\n if (buffer.length) {\n return buffer[buffer.length - 1];\n }\n return defaults;\n },\n useMedium: function (data) {\n var item = middleware(data, assigned);\n buffer.push(item);\n return function () {\n buffer = buffer.filter(function (x) { return x !== item; });\n };\n },\n assignSyncMedium: function (cb) {\n assigned = true;\n while (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n }\n buffer = {\n push: function (x) { return cb(x); },\n filter: function () { return buffer; },\n };\n },\n assignMedium: function (cb) {\n assigned = true;\n var pendingQueue = [];\n if (buffer.length) {\n var cbs = buffer;\n buffer = [];\n cbs.forEach(cb);\n pendingQueue = buffer;\n }\n var executeQueue = function () {\n var cbs = pendingQueue;\n pendingQueue = [];\n cbs.forEach(cb);\n };\n var cycle = function () { return Promise.resolve().then(executeQueue); };\n cycle();\n buffer = {\n push: function (x) {\n pendingQueue.push(x);\n cycle();\n },\n filter: function (filter) {\n pendingQueue = pendingQueue.filter(filter);\n return buffer;\n },\n };\n },\n };\n return medium;\n}\nexport function createMedium(defaults, middleware) {\n if (middleware === void 0) { middleware = ItoI; }\n return innerCreateMedium(defaults, middleware);\n}\n// eslint-disable-next-line @typescript-eslint/ban-types\nexport function createSidecarMedium(options) {\n if (options === void 0) { options = {}; }\n var medium = innerCreateMedium(null);\n medium.options = __assign({ async: true, ssr: false }, options);\n return medium;\n}\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nvar SideCar = function (_a) {\n var sideCar = _a.sideCar, rest = __rest(_a, [\"sideCar\"]);\n if (!sideCar) {\n throw new Error('Sidecar: please provide `sideCar` property to import the right car');\n }\n var Target = sideCar.read();\n if (!Target) {\n throw new Error('Sidecar medium not found');\n }\n return React.createElement(Target, __assign({}, rest));\n};\nSideCar.isSideCarExport = true;\nexport function exportSidecar(medium, exported) {\n medium.useMedium(exported);\n return SideCar;\n}\n","import { createSidecarMedium } from 'use-sidecar';\nexport var effectCar = createSidecarMedium();\n","import { __assign, __rest } from \"tslib\";\nimport * as React from 'react';\nimport { fullWidthClassName, zeroRightClassName } from 'react-remove-scroll-bar/constants';\nimport { useMergeRefs } from 'use-callback-ref';\nimport { effectCar } from './medium';\nvar nothing = function () {\n return;\n};\n/**\n * Removes scrollbar from the page and contain the scroll within the Lock\n */\nvar RemoveScroll = React.forwardRef(function (props, parentRef) {\n var ref = React.useRef(null);\n var _a = React.useState({\n onScrollCapture: nothing,\n onWheelCapture: nothing,\n onTouchMoveCapture: nothing,\n }), callbacks = _a[0], setCallbacks = _a[1];\n var forwardProps = props.forwardProps, children = props.children, className = props.className, removeScrollBar = props.removeScrollBar, enabled = props.enabled, shards = props.shards, sideCar = props.sideCar, noRelative = props.noRelative, noIsolation = props.noIsolation, inert = props.inert, allowPinchZoom = props.allowPinchZoom, _b = props.as, Container = _b === void 0 ? 'div' : _b, gapMode = props.gapMode, rest = __rest(props, [\"forwardProps\", \"children\", \"className\", \"removeScrollBar\", \"enabled\", \"shards\", \"sideCar\", \"noRelative\", \"noIsolation\", \"inert\", \"allowPinchZoom\", \"as\", \"gapMode\"]);\n var SideCar = sideCar;\n var containerRef = useMergeRefs([ref, parentRef]);\n var containerProps = __assign(__assign({}, rest), callbacks);\n return (React.createElement(React.Fragment, null,\n enabled && (React.createElement(SideCar, { sideCar: effectCar, removeScrollBar: removeScrollBar, shards: shards, noRelative: noRelative, noIsolation: noIsolation, inert: inert, setCallbacks: setCallbacks, allowPinchZoom: !!allowPinchZoom, lockRef: ref, gapMode: gapMode })),\n forwardProps ? (React.cloneElement(React.Children.only(children), __assign(__assign({}, containerProps), { ref: containerRef }))) : (React.createElement(Container, __assign({}, containerProps, { className: className, ref: containerRef }), children))));\n});\nRemoveScroll.defaultProps = {\n enabled: true,\n removeScrollBar: true,\n inert: false,\n};\nRemoveScroll.classNames = {\n fullWidth: fullWidthClassName,\n zeroRight: zeroRightClassName,\n};\nexport { RemoveScroll };\n","var currentNonce;\nexport var setNonce = function (nonce) {\n currentNonce = nonce;\n};\nexport var getNonce = function () {\n if (currentNonce) {\n return currentNonce;\n }\n if (typeof __webpack_nonce__ !== 'undefined') {\n return __webpack_nonce__;\n }\n return undefined;\n};\n","import { getNonce } from 'get-nonce';\nfunction makeStyleTag() {\n if (!document)\n return null;\n var tag = document.createElement('style');\n tag.type = 'text/css';\n var nonce = getNonce();\n if (nonce) {\n tag.setAttribute('nonce', nonce);\n }\n return tag;\n}\nfunction injectStyles(tag, css) {\n // @ts-ignore\n if (tag.styleSheet) {\n // @ts-ignore\n tag.styleSheet.cssText = css;\n }\n else {\n tag.appendChild(document.createTextNode(css));\n }\n}\nfunction insertStyleTag(tag) {\n var head = document.head || document.getElementsByTagName('head')[0];\n head.appendChild(tag);\n}\nexport var stylesheetSingleton = function () {\n var counter = 0;\n var stylesheet = null;\n return {\n add: function (style) {\n if (counter == 0) {\n if ((stylesheet = makeStyleTag())) {\n injectStyles(stylesheet, style);\n insertStyleTag(stylesheet);\n }\n }\n counter++;\n },\n remove: function () {\n counter--;\n if (!counter && stylesheet) {\n stylesheet.parentNode && stylesheet.parentNode.removeChild(stylesheet);\n stylesheet = null;\n }\n },\n };\n};\n","import * as React from 'react';\nimport { stylesheetSingleton } from './singleton';\n/**\n * creates a hook to control style singleton\n * @see {@link styleSingleton} for a safer component version\n * @example\n * ```tsx\n * const useStyle = styleHookSingleton();\n * ///\n * useStyle('body { overflow: hidden}');\n */\nexport var styleHookSingleton = function () {\n var sheet = stylesheetSingleton();\n return function (styles, isDynamic) {\n React.useEffect(function () {\n sheet.add(styles);\n return function () {\n sheet.remove();\n };\n }, [styles && isDynamic]);\n };\n};\n","import { styleHookSingleton } from './hook';\n/**\n * create a Component to add styles on demand\n * - styles are added when first instance is mounted\n * - styles are removed when the last instance is unmounted\n * - changing styles in runtime does nothing unless dynamic is set. But with multiple components that can lead to the undefined behavior\n */\nexport var styleSingleton = function () {\n var useStyle = styleHookSingleton();\n var Sheet = function (_a) {\n var styles = _a.styles, dynamic = _a.dynamic;\n useStyle(styles, dynamic);\n return null;\n };\n return Sheet;\n};\n","export var zeroGap = {\n left: 0,\n top: 0,\n right: 0,\n gap: 0,\n};\nvar parse = function (x) { return parseInt(x || '', 10) || 0; };\nvar getOffset = function (gapMode) {\n var cs = window.getComputedStyle(document.body);\n var left = cs[gapMode === 'padding' ? 'paddingLeft' : 'marginLeft'];\n var top = cs[gapMode === 'padding' ? 'paddingTop' : 'marginTop'];\n var right = cs[gapMode === 'padding' ? 'paddingRight' : 'marginRight'];\n return [parse(left), parse(top), parse(right)];\n};\nexport var getGapWidth = function (gapMode) {\n if (gapMode === void 0) { gapMode = 'margin'; }\n if (typeof window === 'undefined') {\n return zeroGap;\n }\n var offsets = getOffset(gapMode);\n var documentWidth = document.documentElement.clientWidth;\n var windowWidth = window.innerWidth;\n return {\n left: offsets[0],\n top: offsets[1],\n right: offsets[2],\n gap: Math.max(0, windowWidth - documentWidth + offsets[2] - offsets[0]),\n };\n};\n","import * as React from 'react';\nimport { styleSingleton } from 'react-style-singleton';\nimport { fullWidthClassName, zeroRightClassName, noScrollbarsClassName, removedBarSizeVariable } from './constants';\nimport { getGapWidth } from './utils';\nvar Style = styleSingleton();\nexport var lockAttribute = 'data-scroll-locked';\n// important tip - once we measure scrollBar width and remove them\n// we could not repeat this operation\n// thus we are using style-singleton - only the first \"yet correct\" style will be applied.\nvar getStyles = function (_a, allowRelative, gapMode, important) {\n var left = _a.left, top = _a.top, right = _a.right, gap = _a.gap;\n if (gapMode === void 0) { gapMode = 'margin'; }\n return \"\\n .\".concat(noScrollbarsClassName, \" {\\n overflow: hidden \").concat(important, \";\\n padding-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n body[\").concat(lockAttribute, \"] {\\n overflow: hidden \").concat(important, \";\\n overscroll-behavior: contain;\\n \").concat([\n allowRelative && \"position: relative \".concat(important, \";\"),\n gapMode === 'margin' &&\n \"\\n padding-left: \".concat(left, \"px;\\n padding-top: \").concat(top, \"px;\\n padding-right: \").concat(right, \"px;\\n margin-left:0;\\n margin-top:0;\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n \"),\n gapMode === 'padding' && \"padding-right: \".concat(gap, \"px \").concat(important, \";\"),\n ]\n .filter(Boolean)\n .join(''), \"\\n }\\n \\n .\").concat(zeroRightClassName, \" {\\n right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" {\\n margin-right: \").concat(gap, \"px \").concat(important, \";\\n }\\n \\n .\").concat(zeroRightClassName, \" .\").concat(zeroRightClassName, \" {\\n right: 0 \").concat(important, \";\\n }\\n \\n .\").concat(fullWidthClassName, \" .\").concat(fullWidthClassName, \" {\\n margin-right: 0 \").concat(important, \";\\n }\\n \\n body[\").concat(lockAttribute, \"] {\\n \").concat(removedBarSizeVariable, \": \").concat(gap, \"px;\\n }\\n\");\n};\nvar getCurrentUseCounter = function () {\n var counter = parseInt(document.body.getAttribute(lockAttribute) || '0', 10);\n return isFinite(counter) ? counter : 0;\n};\nexport var useLockAttribute = function () {\n React.useEffect(function () {\n document.body.setAttribute(lockAttribute, (getCurrentUseCounter() + 1).toString());\n return function () {\n var newCounter = getCurrentUseCounter() - 1;\n if (newCounter <= 0) {\n document.body.removeAttribute(lockAttribute);\n }\n else {\n document.body.setAttribute(lockAttribute, newCounter.toString());\n }\n };\n }, []);\n};\n/**\n * Removes page scrollbar and blocks page scroll when mounted\n */\nexport var RemoveScrollBar = function (_a) {\n var noRelative = _a.noRelative, noImportant = _a.noImportant, _b = _a.gapMode, gapMode = _b === void 0 ? 'margin' : _b;\n useLockAttribute();\n /*\n gap will be measured on every component mount\n however it will be used only by the \"first\" invocation\n due to singleton nature of clientHeight) {\n return true;\n }\n }\n current = current.parentNode;\n } while (current && current !== ownerDocument.body);\n return false;\n};\nvar getVScrollVariables = function (_a) {\n var scrollTop = _a.scrollTop, scrollHeight = _a.scrollHeight, clientHeight = _a.clientHeight;\n return [\n scrollTop,\n scrollHeight,\n clientHeight,\n ];\n};\nvar getHScrollVariables = function (_a) {\n var scrollLeft = _a.scrollLeft, scrollWidth = _a.scrollWidth, clientWidth = _a.clientWidth;\n return [\n scrollLeft,\n scrollWidth,\n clientWidth,\n ];\n};\nvar elementCouldBeScrolled = function (axis, node) {\n return axis === 'v' ? elementCouldBeVScrolled(node) : elementCouldBeHScrolled(node);\n};\nvar getScrollVariables = function (axis, node) {\n return axis === 'v' ? getVScrollVariables(node) : getHScrollVariables(node);\n};\nvar getDirectionFactor = function (axis, direction) {\n /**\n * If the element's direction is rtl (right-to-left), then scrollLeft is 0 when the scrollbar is at its rightmost position,\n * and then increasingly negative as you scroll towards the end of the content.\n * @see https://developer.mozilla.org/en-US/docs/Web/API/Element/scrollLeft\n */\n return axis === 'h' && direction === 'rtl' ? -1 : 1;\n};\nexport var handleScroll = function (axis, endTarget, event, sourceDelta, noOverscroll) {\n var directionFactor = getDirectionFactor(axis, window.getComputedStyle(endTarget).direction);\n var delta = directionFactor * sourceDelta;\n // find scrollable target\n var target = event.target;\n var targetInLock = endTarget.contains(target);\n var shouldCancelScroll = false;\n var isDeltaPositive = delta > 0;\n var availableScroll = 0;\n var availableScrollTop = 0;\n do {\n if (!target) {\n break;\n }\n var _a = getScrollVariables(axis, target), position = _a[0], scroll_1 = _a[1], capacity = _a[2];\n var elementScroll = scroll_1 - capacity - directionFactor * position;\n if (position || elementScroll) {\n if (elementCouldBeScrolled(axis, target)) {\n availableScroll += elementScroll;\n availableScrollTop += position;\n }\n }\n var parent_1 = target.parentNode;\n // we will \"bubble\" from ShadowDom in case we are, or just to the parent in normal case\n // this is the same logic used in focus-lock\n target = (parent_1 && parent_1.nodeType === Node.DOCUMENT_FRAGMENT_NODE ? parent_1.host : parent_1);\n } while (\n // portaled content\n (!targetInLock && target !== document.body) ||\n // self content\n (targetInLock && (endTarget.contains(target) || endTarget === target)));\n // handle epsilon around 0 (non standard zoom levels)\n if (isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScroll) < 1) || (!noOverscroll && delta > availableScroll))) {\n shouldCancelScroll = true;\n }\n else if (!isDeltaPositive &&\n ((noOverscroll && Math.abs(availableScrollTop) < 1) || (!noOverscroll && -delta > availableScrollTop))) {\n shouldCancelScroll = true;\n }\n return shouldCancelScroll;\n};\n","import { __spreadArray } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScrollBar } from 'react-remove-scroll-bar';\nimport { styleSingleton } from 'react-style-singleton';\nimport { nonPassive } from './aggresiveCapture';\nimport { handleScroll, locationCouldBeScrolled } from './handleScroll';\nexport var getTouchXY = function (event) {\n return 'changedTouches' in event ? [event.changedTouches[0].clientX, event.changedTouches[0].clientY] : [0, 0];\n};\nexport var getDeltaXY = function (event) { return [event.deltaX, event.deltaY]; };\nvar extractRef = function (ref) {\n return ref && 'current' in ref ? ref.current : ref;\n};\nvar deltaCompare = function (x, y) { return x[0] === y[0] && x[1] === y[1]; };\nvar generateStyle = function (id) { return \"\\n .block-interactivity-\".concat(id, \" {pointer-events: none;}\\n .allow-interactivity-\").concat(id, \" {pointer-events: all;}\\n\"); };\nvar idCounter = 0;\nvar lockStack = [];\nexport function RemoveScrollSideCar(props) {\n var shouldPreventQueue = React.useRef([]);\n var touchStartRef = React.useRef([0, 0]);\n var activeAxis = React.useRef();\n var id = React.useState(idCounter++)[0];\n var Style = React.useState(styleSingleton)[0];\n var lastProps = React.useRef(props);\n React.useEffect(function () {\n lastProps.current = props;\n }, [props]);\n React.useEffect(function () {\n if (props.inert) {\n document.body.classList.add(\"block-interactivity-\".concat(id));\n var allow_1 = __spreadArray([props.lockRef.current], (props.shards || []).map(extractRef), true).filter(Boolean);\n allow_1.forEach(function (el) { return el.classList.add(\"allow-interactivity-\".concat(id)); });\n return function () {\n document.body.classList.remove(\"block-interactivity-\".concat(id));\n allow_1.forEach(function (el) { return el.classList.remove(\"allow-interactivity-\".concat(id)); });\n };\n }\n return;\n }, [props.inert, props.lockRef.current, props.shards]);\n var shouldCancelEvent = React.useCallback(function (event, parent) {\n if (('touches' in event && event.touches.length === 2) || (event.type === 'wheel' && event.ctrlKey)) {\n return !lastProps.current.allowPinchZoom;\n }\n var touch = getTouchXY(event);\n var touchStart = touchStartRef.current;\n var deltaX = 'deltaX' in event ? event.deltaX : touchStart[0] - touch[0];\n var deltaY = 'deltaY' in event ? event.deltaY : touchStart[1] - touch[1];\n var currentAxis;\n var target = event.target;\n var moveDirection = Math.abs(deltaX) > Math.abs(deltaY) ? 'h' : 'v';\n // allow horizontal touch move on Range inputs. They will not cause any scroll\n if ('touches' in event && moveDirection === 'h' && target.type === 'range') {\n return false;\n }\n // allow drag selection (iOS); check if selection's anchorNode is the same as target or contains target\n var selection = window.getSelection();\n var anchorNode = selection && selection.anchorNode;\n var isTouchingSelection = anchorNode ? anchorNode === target || anchorNode.contains(target) : false;\n if (isTouchingSelection) {\n return false;\n }\n var canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n if (!canBeScrolledInMainDirection) {\n return true;\n }\n if (canBeScrolledInMainDirection) {\n currentAxis = moveDirection;\n }\n else {\n currentAxis = moveDirection === 'v' ? 'h' : 'v';\n canBeScrolledInMainDirection = locationCouldBeScrolled(moveDirection, target);\n // other axis might be not scrollable\n }\n if (!canBeScrolledInMainDirection) {\n return false;\n }\n if (!activeAxis.current && 'changedTouches' in event && (deltaX || deltaY)) {\n activeAxis.current = currentAxis;\n }\n if (!currentAxis) {\n return true;\n }\n var cancelingAxis = activeAxis.current || currentAxis;\n return handleScroll(cancelingAxis, parent, event, cancelingAxis === 'h' ? deltaX : deltaY, true);\n }, []);\n var shouldPrevent = React.useCallback(function (_event) {\n var event = _event;\n if (!lockStack.length || lockStack[lockStack.length - 1] !== Style) {\n // not the last active\n return;\n }\n var delta = 'deltaY' in event ? getDeltaXY(event) : getTouchXY(event);\n var sourceEvent = shouldPreventQueue.current.filter(function (e) { return e.name === event.type && (e.target === event.target || event.target === e.shadowParent) && deltaCompare(e.delta, delta); })[0];\n // self event, and should be canceled\n if (sourceEvent && sourceEvent.should) {\n if (event.cancelable) {\n event.preventDefault();\n }\n return;\n }\n // outside or shard event\n if (!sourceEvent) {\n var shardNodes = (lastProps.current.shards || [])\n .map(extractRef)\n .filter(Boolean)\n .filter(function (node) { return node.contains(event.target); });\n var shouldStop = shardNodes.length > 0 ? shouldCancelEvent(event, shardNodes[0]) : !lastProps.current.noIsolation;\n if (shouldStop) {\n if (event.cancelable) {\n event.preventDefault();\n }\n }\n }\n }, []);\n var shouldCancel = React.useCallback(function (name, delta, target, should) {\n var event = { name: name, delta: delta, target: target, should: should, shadowParent: getOutermostShadowParent(target) };\n shouldPreventQueue.current.push(event);\n setTimeout(function () {\n shouldPreventQueue.current = shouldPreventQueue.current.filter(function (e) { return e !== event; });\n }, 1);\n }, []);\n var scrollTouchStart = React.useCallback(function (event) {\n touchStartRef.current = getTouchXY(event);\n activeAxis.current = undefined;\n }, []);\n var scrollWheel = React.useCallback(function (event) {\n shouldCancel(event.type, getDeltaXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n var scrollTouchMove = React.useCallback(function (event) {\n shouldCancel(event.type, getTouchXY(event), event.target, shouldCancelEvent(event, props.lockRef.current));\n }, []);\n React.useEffect(function () {\n lockStack.push(Style);\n props.setCallbacks({\n onScrollCapture: scrollWheel,\n onWheelCapture: scrollWheel,\n onTouchMoveCapture: scrollTouchMove,\n });\n document.addEventListener('wheel', shouldPrevent, nonPassive);\n document.addEventListener('touchmove', shouldPrevent, nonPassive);\n document.addEventListener('touchstart', scrollTouchStart, nonPassive);\n return function () {\n lockStack = lockStack.filter(function (inst) { return inst !== Style; });\n document.removeEventListener('wheel', shouldPrevent, nonPassive);\n document.removeEventListener('touchmove', shouldPrevent, nonPassive);\n document.removeEventListener('touchstart', scrollTouchStart, nonPassive);\n };\n }, []);\n var removeScrollBar = props.removeScrollBar, inert = props.inert;\n return (React.createElement(React.Fragment, null,\n inert ? React.createElement(Style, { styles: generateStyle(id) }) : null,\n removeScrollBar ? React.createElement(RemoveScrollBar, { noRelative: props.noRelative, gapMode: props.gapMode }) : null));\n}\nfunction getOutermostShadowParent(node) {\n var shadowParent = null;\n while (node !== null) {\n if (node instanceof ShadowRoot) {\n shadowParent = node.host;\n node = node.host;\n }\n node = node.parentNode;\n }\n return shadowParent;\n}\n","import { exportSidecar } from 'use-sidecar';\nimport { RemoveScrollSideCar } from './SideEffect';\nimport { effectCar } from './medium';\nexport default exportSidecar(effectCar, RemoveScrollSideCar);\n","import { __assign } from \"tslib\";\nimport * as React from 'react';\nimport { RemoveScroll } from './UI';\nimport SideCar from './sidecar';\nvar ReactRemoveScroll = React.forwardRef(function (props, ref) { return (React.createElement(RemoveScroll, __assign({}, props, { ref: ref, sideCar: SideCar }))); });\nReactRemoveScroll.classNames = RemoveScroll.classNames;\nexport default ReactRemoveScroll;\n","var getDefaultParent = function (originalTarget) {\n if (typeof document === 'undefined') {\n return null;\n }\n var sampleTarget = Array.isArray(originalTarget) ? originalTarget[0] : originalTarget;\n return sampleTarget.ownerDocument.body;\n};\nvar counterMap = new WeakMap();\nvar uncontrolledNodes = new WeakMap();\nvar markerMap = {};\nvar lockCount = 0;\nvar unwrapHost = function (node) {\n return node && (node.host || unwrapHost(node.parentNode));\n};\nvar correctTargets = function (parent, targets) {\n return targets\n .map(function (target) {\n if (parent.contains(target)) {\n return target;\n }\n var correctedTarget = unwrapHost(target);\n if (correctedTarget && parent.contains(correctedTarget)) {\n return correctedTarget;\n }\n console.error('aria-hidden', target, 'in not contained inside', parent, '. Doing nothing');\n return null;\n })\n .filter(function (x) { return Boolean(x); });\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @param {String} [controlAttribute] - html Attribute to control\n * @return {Undo} undo command\n */\nvar applyAttributeToOthers = function (originalTarget, parentNode, markerName, controlAttribute) {\n var targets = correctTargets(parentNode, Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n if (!markerMap[markerName]) {\n markerMap[markerName] = new WeakMap();\n }\n var markerCounter = markerMap[markerName];\n var hiddenNodes = [];\n var elementsToKeep = new Set();\n var elementsToStop = new Set(targets);\n var keep = function (el) {\n if (!el || elementsToKeep.has(el)) {\n return;\n }\n elementsToKeep.add(el);\n keep(el.parentNode);\n };\n targets.forEach(keep);\n var deep = function (parent) {\n if (!parent || elementsToStop.has(parent)) {\n return;\n }\n Array.prototype.forEach.call(parent.children, function (node) {\n if (elementsToKeep.has(node)) {\n deep(node);\n }\n else {\n try {\n var attr = node.getAttribute(controlAttribute);\n var alreadyHidden = attr !== null && attr !== 'false';\n var counterValue = (counterMap.get(node) || 0) + 1;\n var markerValue = (markerCounter.get(node) || 0) + 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n hiddenNodes.push(node);\n if (counterValue === 1 && alreadyHidden) {\n uncontrolledNodes.set(node, true);\n }\n if (markerValue === 1) {\n node.setAttribute(markerName, 'true');\n }\n if (!alreadyHidden) {\n node.setAttribute(controlAttribute, 'true');\n }\n }\n catch (e) {\n console.error('aria-hidden: cannot operate on ', node, e);\n }\n }\n });\n };\n deep(parentNode);\n elementsToKeep.clear();\n lockCount++;\n return function () {\n hiddenNodes.forEach(function (node) {\n var counterValue = counterMap.get(node) - 1;\n var markerValue = markerCounter.get(node) - 1;\n counterMap.set(node, counterValue);\n markerCounter.set(node, markerValue);\n if (!counterValue) {\n if (!uncontrolledNodes.has(node)) {\n node.removeAttribute(controlAttribute);\n }\n uncontrolledNodes.delete(node);\n }\n if (!markerValue) {\n node.removeAttribute(markerName);\n }\n });\n lockCount--;\n if (!lockCount) {\n // clear\n counterMap = new WeakMap();\n counterMap = new WeakMap();\n uncontrolledNodes = new WeakMap();\n markerMap = {};\n }\n };\n};\n/**\n * Marks everything except given node(or nodes) as aria-hidden\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var hideOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-aria-hidden'; }\n var targets = Array.from(Array.isArray(originalTarget) ? originalTarget : [originalTarget]);\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n // we should not hide aria-live elements - https://github.com/theKashey/aria-hidden/issues/10\n // and script elements, as they have no impact on accessibility.\n targets.push.apply(targets, Array.from(activeParentNode.querySelectorAll('[aria-live], script')));\n return applyAttributeToOthers(targets, activeParentNode, markerName, 'aria-hidden');\n};\n/**\n * Marks everything except given node(or nodes) as inert\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var inertOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-inert-ed'; }\n var activeParentNode = parentNode || getDefaultParent(originalTarget);\n if (!activeParentNode) {\n return function () { return null; };\n }\n return applyAttributeToOthers(originalTarget, activeParentNode, markerName, 'inert');\n};\n/**\n * @returns if current browser supports inert\n */\nexport var supportsInert = function () {\n return typeof HTMLElement !== 'undefined' && HTMLElement.prototype.hasOwnProperty('inert');\n};\n/**\n * Automatic function to \"suppress\" DOM elements - _hide_ or _inert_ in the best possible way\n * @param {Element | Element[]} originalTarget - elements to keep on the page\n * @param [parentNode] - top element, defaults to document.body\n * @param {String} [markerName] - a special attribute to mark every node\n * @return {Undo} undo command\n */\nexport var suppressOthers = function (originalTarget, parentNode, markerName) {\n if (markerName === void 0) { markerName = 'data-suppressed'; }\n return (supportsInert() ? inertOthers : hideOthers)(originalTarget, parentNode, markerName);\n};\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/dialog.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContext, createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { hideOthers } from \"aria-hidden\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar DIALOG_NAME = \"Dialog\";\nvar [createDialogContext, createDialogScope] = createContextScope(DIALOG_NAME);\nvar [DialogProvider, useDialogContext] = createDialogContext(DIALOG_NAME);\nvar Dialog = (props) => {\n const {\n __scopeDialog,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n modal = true\n } = props;\n const triggerRef = React.useRef(null);\n const contentRef = React.useRef(null);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: DIALOG_NAME\n });\n return /* @__PURE__ */ jsx(\n DialogProvider,\n {\n scope: __scopeDialog,\n triggerRef,\n contentRef,\n contentId: useId(),\n titleId: useId(),\n descriptionId: useId(),\n open,\n onOpenChange: setOpen,\n onOpenToggle: React.useCallback(() => setOpen((prevOpen) => !prevOpen), [setOpen]),\n modal,\n children\n }\n );\n};\nDialog.displayName = DIALOG_NAME;\nvar TRIGGER_NAME = \"DialogTrigger\";\nvar DialogTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...triggerProps } = props;\n const context = useDialogContext(TRIGGER_NAME, __scopeDialog);\n const composedTriggerRef = useComposedRefs(forwardedRef, context.triggerRef);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n \"aria-haspopup\": \"dialog\",\n \"aria-expanded\": context.open,\n \"aria-controls\": context.contentId,\n \"data-state\": getState(context.open),\n ...triggerProps,\n ref: composedTriggerRef,\n onClick: composeEventHandlers(props.onClick, context.onOpenToggle)\n }\n );\n }\n);\nDialogTrigger.displayName = TRIGGER_NAME;\nvar PORTAL_NAME = \"DialogPortal\";\nvar [PortalProvider, usePortalContext] = createDialogContext(PORTAL_NAME, {\n forceMount: void 0\n});\nvar DialogPortal = (props) => {\n const { __scopeDialog, forceMount, children, container } = props;\n const context = useDialogContext(PORTAL_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(PortalProvider, { scope: __scopeDialog, forceMount, children: React.Children.map(children, (child) => /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, container, children: child }) })) });\n};\nDialogPortal.displayName = PORTAL_NAME;\nvar OVERLAY_NAME = \"DialogOverlay\";\nvar DialogOverlay = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(OVERLAY_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, props.__scopeDialog);\n return context.modal ? /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: /* @__PURE__ */ jsx(DialogOverlayImpl, { ...overlayProps, ref: forwardedRef }) }) : null;\n }\n);\nDialogOverlay.displayName = OVERLAY_NAME;\nvar Slot = createSlot(\"DialogOverlay.RemoveScroll\");\nvar DialogOverlayImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...overlayProps } = props;\n const context = useDialogContext(OVERLAY_NAME, __scopeDialog);\n return (\n // Make sure `Content` is scrollable even when it doesn't live inside `RemoveScroll`\n // ie. when `Overlay` and `Content` are siblings\n /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, shards: [context.contentRef], children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": getState(context.open),\n ...overlayProps,\n ref: forwardedRef,\n style: { pointerEvents: \"auto\", ...overlayProps.style }\n }\n ) })\n );\n }\n);\nvar CONTENT_NAME = \"DialogContent\";\nvar DialogContent = React.forwardRef(\n (props, forwardedRef) => {\n const portalContext = usePortalContext(CONTENT_NAME, props.__scopeDialog);\n const { forceMount = portalContext.forceMount, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || context.open, children: context.modal ? /* @__PURE__ */ jsx(DialogContentModal, { ...contentProps, ref: forwardedRef }) : /* @__PURE__ */ jsx(DialogContentNonModal, { ...contentProps, ref: forwardedRef }) });\n }\n);\nDialogContent.displayName = CONTENT_NAME;\nvar DialogContentModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, context.contentRef, contentRef);\n React.useEffect(() => {\n const content = contentRef.current;\n if (content) return hideOthers(content);\n }, []);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: composedRefs,\n trapFocus: context.open,\n disableOutsidePointerEvents: true,\n onCloseAutoFocus: composeEventHandlers(props.onCloseAutoFocus, (event) => {\n event.preventDefault();\n context.triggerRef.current?.focus();\n }),\n onPointerDownOutside: composeEventHandlers(props.onPointerDownOutside, (event) => {\n const originalEvent = event.detail.originalEvent;\n const ctrlLeftClick = originalEvent.button === 0 && originalEvent.ctrlKey === true;\n const isRightClick = originalEvent.button === 2 || ctrlLeftClick;\n if (isRightClick) event.preventDefault();\n }),\n onFocusOutside: composeEventHandlers(\n props.onFocusOutside,\n (event) => event.preventDefault()\n )\n }\n );\n }\n);\nvar DialogContentNonModal = React.forwardRef(\n (props, forwardedRef) => {\n const context = useDialogContext(CONTENT_NAME, props.__scopeDialog);\n const hasInteractedOutsideRef = React.useRef(false);\n const hasPointerDownOutsideRef = React.useRef(false);\n return /* @__PURE__ */ jsx(\n DialogContentImpl,\n {\n ...props,\n ref: forwardedRef,\n trapFocus: false,\n disableOutsidePointerEvents: false,\n onCloseAutoFocus: (event) => {\n props.onCloseAutoFocus?.(event);\n if (!event.defaultPrevented) {\n if (!hasInteractedOutsideRef.current) context.triggerRef.current?.focus();\n event.preventDefault();\n }\n hasInteractedOutsideRef.current = false;\n hasPointerDownOutsideRef.current = false;\n },\n onInteractOutside: (event) => {\n props.onInteractOutside?.(event);\n if (!event.defaultPrevented) {\n hasInteractedOutsideRef.current = true;\n if (event.detail.originalEvent.type === \"pointerdown\") {\n hasPointerDownOutsideRef.current = true;\n }\n }\n const target = event.target;\n const targetIsTrigger = context.triggerRef.current?.contains(target);\n if (targetIsTrigger) event.preventDefault();\n if (event.detail.originalEvent.type === \"focusin\" && hasPointerDownOutsideRef.current) {\n event.preventDefault();\n }\n }\n }\n );\n }\n);\nvar DialogContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, trapFocus, onOpenAutoFocus, onCloseAutoFocus, ...contentProps } = props;\n const context = useDialogContext(CONTENT_NAME, __scopeDialog);\n const contentRef = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, contentRef);\n useFocusGuards();\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n loop: true,\n trapped: trapFocus,\n onMountAutoFocus: onOpenAutoFocus,\n onUnmountAutoFocus: onCloseAutoFocus,\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n role: \"dialog\",\n id: context.contentId,\n \"aria-describedby\": context.descriptionId,\n \"aria-labelledby\": context.titleId,\n \"data-state\": getState(context.open),\n ...contentProps,\n ref: composedRefs,\n onDismiss: () => context.onOpenChange(false)\n }\n )\n }\n ),\n /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(TitleWarning, { titleId: context.titleId }),\n /* @__PURE__ */ jsx(DescriptionWarning, { contentRef, descriptionId: context.descriptionId })\n ] })\n ] });\n }\n);\nvar TITLE_NAME = \"DialogTitle\";\nvar DialogTitle = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...titleProps } = props;\n const context = useDialogContext(TITLE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.h2, { id: context.titleId, ...titleProps, ref: forwardedRef });\n }\n);\nDialogTitle.displayName = TITLE_NAME;\nvar DESCRIPTION_NAME = \"DialogDescription\";\nvar DialogDescription = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...descriptionProps } = props;\n const context = useDialogContext(DESCRIPTION_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(Primitive.p, { id: context.descriptionId, ...descriptionProps, ref: forwardedRef });\n }\n);\nDialogDescription.displayName = DESCRIPTION_NAME;\nvar CLOSE_NAME = \"DialogClose\";\nvar DialogClose = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeDialog, ...closeProps } = props;\n const context = useDialogContext(CLOSE_NAME, __scopeDialog);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n ...closeProps,\n ref: forwardedRef,\n onClick: composeEventHandlers(props.onClick, () => context.onOpenChange(false))\n }\n );\n }\n);\nDialogClose.displayName = CLOSE_NAME;\nfunction getState(open) {\n return open ? \"open\" : \"closed\";\n}\nvar TITLE_WARNING_NAME = \"DialogTitleWarning\";\nvar [WarningProvider, useWarningContext] = createContext(TITLE_WARNING_NAME, {\n contentName: CONTENT_NAME,\n titleName: TITLE_NAME,\n docsSlug: \"dialog\"\n});\nvar TitleWarning = ({ titleId }) => {\n const titleWarningContext = useWarningContext(TITLE_WARNING_NAME);\n const MESSAGE = `\\`${titleWarningContext.contentName}\\` requires a \\`${titleWarningContext.titleName}\\` for the component to be accessible for screen reader users.\n\nIf you want to hide the \\`${titleWarningContext.titleName}\\`, you can wrap it with our VisuallyHidden component.\n\nFor more information, see https://radix-ui.com/primitives/docs/components/${titleWarningContext.docsSlug}`;\n React.useEffect(() => {\n if (titleId) {\n const hasTitle = document.getElementById(titleId);\n if (!hasTitle) console.error(MESSAGE);\n }\n }, [MESSAGE, titleId]);\n return null;\n};\nvar DESCRIPTION_WARNING_NAME = \"DialogDescriptionWarning\";\nvar DescriptionWarning = ({ contentRef, descriptionId }) => {\n const descriptionWarningContext = useWarningContext(DESCRIPTION_WARNING_NAME);\n const MESSAGE = `Warning: Missing \\`Description\\` or \\`aria-describedby={undefined}\\` for {${descriptionWarningContext.contentName}}.`;\n React.useEffect(() => {\n const describedById = contentRef.current?.getAttribute(\"aria-describedby\");\n if (descriptionId && describedById) {\n const hasDescription = document.getElementById(descriptionId);\n if (!hasDescription) console.warn(MESSAGE);\n }\n }, [MESSAGE, contentRef, descriptionId]);\n return null;\n};\nvar Root = Dialog;\nvar Trigger = DialogTrigger;\nvar Portal = DialogPortal;\nvar Overlay = DialogOverlay;\nvar Content = DialogContent;\nvar Title = DialogTitle;\nvar Description = DialogDescription;\nvar Close = DialogClose;\nexport {\n Close,\n Content,\n Description,\n Dialog,\n DialogClose,\n DialogContent,\n DialogDescription,\n DialogOverlay,\n DialogPortal,\n DialogTitle,\n DialogTrigger,\n Overlay,\n Portal,\n Root,\n Title,\n Trigger,\n WarningProvider,\n createDialogScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as DialogPrimitive from '@radix-ui/react-dialog';\nimport { X } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Dialog = DialogPrimitive.Root;\n\nconst DialogTrigger = DialogPrimitive.Trigger;\n\nconst DialogPortal = DialogPrimitive.Portal;\n\nconst DialogClose = DialogPrimitive.Close;\n\nconst DialogOverlay = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogOverlay.displayName = DialogPrimitive.Overlay.displayName;\n\nconst DialogContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, children, ...props }, ref) => (\n \n \n \n {children}\n \n \n Close\n \n \n \n));\nDialogContent.displayName = DialogPrimitive.Content.displayName;\n\nconst DialogHeader = ({ className, ...props }: React.HTMLAttributes) => (\n
\n);\nDialogHeader.displayName = 'DialogHeader';\n\nconst DialogFooter = ({ className, ...props }: React.HTMLAttributes) => (\n \n);\nDialogFooter.displayName = 'DialogFooter';\n\nconst DialogTitle = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogTitle.displayName = DialogPrimitive.Title.displayName;\n\nconst DialogDescription = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nDialogDescription.displayName = DialogPrimitive.Description.displayName;\n\nexport {\n Dialog,\n DialogPortal,\n DialogOverlay,\n DialogTrigger,\n DialogClose,\n DialogContent,\n DialogHeader,\n DialogFooter,\n DialogTitle,\n DialogDescription,\n};\n","import type { Conversation } from '../types';\n\nexport interface ParsedHashConversation {\n type: 'channel' | 'contact' | 'raw' | 'map' | 'visualizer';\n name: string;\n /** For map view: public key prefix to focus on */\n mapFocusKey?: string;\n}\n\n// Parse URL hash to get conversation (e.g., #channel/Public or #contact/JohnDoe or #raw or #map/focus/ABCD1234)\nexport function parseHashConversation(): ParsedHashConversation | null {\n const hash = window.location.hash.slice(1); // Remove leading #\n if (!hash) return null;\n\n if (hash === 'raw') {\n return { type: 'raw', name: 'raw' };\n }\n\n if (hash === 'map') {\n return { type: 'map', name: 'map' };\n }\n\n if (hash === 'visualizer') {\n return { type: 'visualizer', name: 'visualizer' };\n }\n\n // Check for map with focus: #map/focus/{pubkey_prefix}\n if (hash.startsWith('map/focus/')) {\n const focusKey = hash.slice('map/focus/'.length);\n if (focusKey) {\n return { type: 'map', name: 'map', mapFocusKey: decodeURIComponent(focusKey) };\n }\n return { type: 'map', name: 'map' };\n }\n\n const slashIndex = hash.indexOf('/');\n if (slashIndex === -1) return null;\n\n const type = hash.slice(0, slashIndex);\n const name = decodeURIComponent(hash.slice(slashIndex + 1));\n\n if ((type === 'channel' || type === 'contact') && name) {\n return { type, name };\n }\n return null;\n}\n\n/**\n * Generate a URL hash for focusing on a contact in the map view\n * @param publicKeyPrefix - The public key or prefix to focus on\n */\nexport function getMapFocusHash(publicKeyPrefix: string): string {\n return `#map/focus/${encodeURIComponent(publicKeyPrefix)}`;\n}\n\n// Generate URL hash from conversation\nexport function getConversationHash(conv: Conversation | null): string {\n if (!conv) return '';\n if (conv.type === 'raw') return '#raw';\n if (conv.type === 'map') return '#map';\n if (conv.type === 'visualizer') return '#visualizer';\n // Strip leading # from channel names for cleaner URLs\n const name =\n conv.type === 'channel' && conv.name.startsWith('#') ? conv.name.slice(1) : conv.name;\n return `#${conv.type}/${encodeURIComponent(name)}`;\n}\n\n// Update URL hash without adding to history\nexport function updateUrlHash(conv: Conversation | null): void {\n const newHash = getConversationHash(conv);\n if (newHash !== window.location.hash) {\n window.history.replaceState(null, '', newHash || window.location.pathname);\n }\n}\n","import type { Contact, RadioConfig, MessagePath } from '../types';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from './ui/dialog';\nimport { Button } from './ui/button';\nimport {\n resolvePath,\n calculateDistance,\n isValidLocation,\n formatDistance,\n type SenderInfo,\n type ResolvedPath,\n type PathHop,\n} from '../utils/pathUtils';\nimport { formatTime } from '../utils/messageParser';\nimport { getMapFocusHash } from '../utils/urlHash';\n\ninterface PathModalProps {\n open: boolean;\n onClose: () => void;\n paths: MessagePath[];\n senderInfo: SenderInfo;\n contacts: Contact[];\n config: RadioConfig | null;\n}\n\nexport function PathModal({ open, onClose, paths, senderInfo, contacts, config }: PathModalProps) {\n // Resolve all paths\n const resolvedPaths = paths.map((p) => ({\n ...p,\n resolved: resolvePath(p.path, senderInfo, contacts, config),\n }));\n\n const hasSinglePath = paths.length === 1;\n\n return (\n !isOpen && onClose()}>\n \n \n Message Path{!hasSinglePath && `s (${paths.length})`}\n \n {hasSinglePath ? (\n <>\n This shows one route that this message traveled through the mesh network.\n Routers may be incorrectly identified due to prefix collisions between heard and\n non-heard router advertisements.\n \n ) : (\n <>\n This message was received via {paths.length} different routes.\n Routers may be incorrectly identified due to prefix collisions.\n \n )}\n \n \n\n
\n {resolvedPaths.map((pathData, index) => (\n
\n {!hasSinglePath && (\n
\n Path {index + 1} — received {formatTime(pathData.received_at)}\n
\n )}\n \n
\n ))}\n\n {/* Straight-line distance shown once for multi-path (same for all routes) */}\n {!hasSinglePath &&\n resolvedPaths.length > 0 &&\n (() => {\n const first = resolvedPaths[0].resolved;\n if (\n isValidLocation(first.sender.lat, first.sender.lon) &&\n isValidLocation(first.receiver.lat, first.receiver.lon)\n ) {\n return (\n
\n Straight-line distance: \n \n {formatDistance(\n calculateDistance(\n first.sender.lat,\n first.sender.lon,\n first.receiver.lat,\n first.receiver.lon\n )!\n )}\n \n
\n );\n }\n return null;\n })()}\n
\n\n \n \n \n
\n
\n );\n}\n\ninterface PathVisualizationProps {\n resolved: ResolvedPath;\n senderInfo: SenderInfo;\n /** If true, hide the straight-line distance (shown once at container level for multi-path) */\n hideStraightLine?: boolean;\n}\n\nfunction PathVisualization({ resolved, senderInfo, hideStraightLine }: PathVisualizationProps) {\n // Track previous location for each hop to calculate distances\n // Returns null if previous hop was ambiguous or has invalid location\n const getPrevLocation = (hopIndex: number): { lat: number | null; lon: number | null } | null => {\n if (hopIndex === 0) {\n // Check if sender has valid location\n if (!isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n return null;\n }\n return { lat: resolved.sender.lat, lon: resolved.sender.lon };\n }\n const prevHop = resolved.hops[hopIndex - 1];\n // If previous hop was ambiguous, we can't show meaningful distances\n if (prevHop.matches.length > 1) {\n return null;\n }\n // If previous hop was unknown, we also can't calculate\n if (prevHop.matches.length === 0) {\n return null;\n }\n // Check if previous hop has valid location\n if (isValidLocation(prevHop.matches[0].lat, prevHop.matches[0].lon)) {\n return { lat: prevHop.matches[0].lat, lon: prevHop.matches[0].lon };\n }\n return null;\n };\n\n return (\n
\n {/* Sender */}\n \n\n {/* Hops */}\n {resolved.hops.map((hop, index) => (\n \n ))}\n\n {/* Receiver */}\n \n\n {/* Total distance */}\n {resolved.totalDistances && resolved.totalDistances.length > 0 && (\n
\n \n Presumed unambiguous distance covered:{' '}\n \n \n {resolved.hasGaps ? '>' : ''}\n {formatDistance(resolved.totalDistances[0])}\n \n
\n )}\n\n {/* Straight-line distance (when both sender and receiver have coordinates) */}\n {!hideStraightLine &&\n isValidLocation(resolved.sender.lat, resolved.sender.lon) &&\n isValidLocation(resolved.receiver.lat, resolved.receiver.lon) && (\n 0\n ? 'pt-1'\n : 'pt-3 mt-3 border-t border-border'\n }\n >\n Straight-line distance: \n \n {formatDistance(\n calculateDistance(\n resolved.sender.lat,\n resolved.sender.lon,\n resolved.receiver.lat,\n resolved.receiver.lon\n )!\n )}\n \n
\n )}\n
\n );\n}\n\ninterface PathNodeProps {\n label: string;\n name: string;\n prefix: string;\n distance: number | null;\n isFirst?: boolean;\n isLast?: boolean;\n /** Optional coordinates for map link */\n lat?: number | null;\n lon?: number | null;\n /** Public key for map focus link (required if lat/lon provided) */\n publicKey?: string;\n}\n\nfunction PathNode({\n label,\n name,\n prefix,\n distance,\n isFirst,\n isLast,\n lat,\n lon,\n publicKey,\n}: PathNodeProps) {\n const hasLocation = isValidLocation(lat ?? null, lon ?? null) && publicKey;\n\n return (\n
\n {/* Vertical line and dot column */}\n
\n {!isFirst &&
}\n
\n {!isLast &&
}\n
\n\n {/* Content */}\n
\n
{label}
\n
\n {name} ({prefix})\n {distance !== null && (\n - {formatDistance(distance)}\n )}\n {hasLocation && }\n
\n
\n
\n );\n}\n\ninterface HopNodeProps {\n hop: PathHop;\n hopNumber: number;\n prevLocation: { lat: number | null; lon: number | null } | null;\n}\n\nfunction HopNode({ hop, hopNumber, prevLocation }: HopNodeProps) {\n const isAmbiguous = hop.matches.length > 1;\n const isUnknown = hop.matches.length === 0;\n\n // Calculate distance from previous location for a contact\n // Returns null if prev location unknown/ambiguous or contact has no valid location\n const getDistanceForContact = (contact: {\n lat: number | null;\n lon: number | null;\n }): number | null => {\n if (!prevLocation || prevLocation.lat === null || prevLocation.lon === null) {\n return null;\n }\n // Check if contact has valid location\n if (!isValidLocation(contact.lat, contact.lon)) {\n return null;\n }\n return calculateDistance(prevLocation.lat, prevLocation.lon, contact.lat, contact.lon);\n };\n\n return (\n
\n {/* Vertical line and dot column */}\n
\n
\n
\n
\n
\n\n {/* Content */}\n
\n
\n Hop {hopNumber}\n {isAmbiguous && (ambiguous)}\n
\n\n {isUnknown ? (\n
\n <UNKNOWN {hop.prefix}>\n
\n ) : isAmbiguous ? (\n
\n {hop.matches.map((contact) => {\n const dist = getDistanceForContact(contact);\n const hasLocation = isValidLocation(contact.lat, contact.lon);\n return (\n
\n {contact.name || contact.public_key.slice(0, 12)}{' '}\n \n ({contact.public_key.slice(0, 2).toUpperCase()})\n \n {dist !== null && (\n \n - {formatDistance(dist)}\n \n )}\n {hasLocation && (\n \n )}\n
\n );\n })}\n
\n ) : (\n
\n {hop.matches[0].name || hop.matches[0].public_key.slice(0, 12)}{' '}\n ({hop.prefix})\n {hop.distanceFromPrev !== null && (\n \n - {formatDistance(hop.distanceFromPrev)}\n \n )}\n {isValidLocation(hop.matches[0].lat, hop.matches[0].lon) && (\n \n )}\n
\n )}\n
\n
\n );\n}\n\n/**\n * Render clickable coordinates that open the map focused on the contact\n */\nfunction CoordinateLink({ lat, lon, publicKey }: { lat: number; lon: number; publicKey: string }) {\n const handleClick = (e: React.MouseEvent) => {\n e.preventDefault();\n e.stopPropagation();\n // Open map in new tab with focus on this contact\n const url = window.location.origin + window.location.pathname + getMapFocusHash(publicKey);\n window.open(url, '_blank');\n };\n\n return (\n \n ({lat.toFixed(4)}, {lon.toFixed(4)})\n \n );\n}\n\nfunction calculateReceiverDistance(resolved: ResolvedPath): number | null {\n // Get last hop's location (if any)\n let prevLat: number | null = null;\n let prevLon: number | null = null;\n\n if (resolved.hops.length > 0) {\n const lastHop = resolved.hops[resolved.hops.length - 1];\n // Only use last hop if it's unambiguous and has valid location\n if (\n lastHop.matches.length === 1 &&\n isValidLocation(lastHop.matches[0].lat, lastHop.matches[0].lon)\n ) {\n prevLat = lastHop.matches[0].lat;\n prevLon = lastHop.matches[0].lon;\n }\n } else {\n // No hops, calculate from sender to receiver (if sender has valid location)\n if (isValidLocation(resolved.sender.lat, resolved.sender.lon)) {\n prevLat = resolved.sender.lat;\n prevLon = resolved.sender.lon;\n }\n }\n\n if (prevLat === null || prevLon === null) {\n return null;\n }\n\n // Check receiver has valid location\n if (!isValidLocation(resolved.receiver.lat, resolved.receiver.lon)) {\n return null;\n }\n\n return calculateDistance(prevLat, prevLon, resolved.receiver.lat, resolved.receiver.lon);\n}\n","import { useEffect, useLayoutEffect, useRef, useCallback, useState, type ReactNode } from 'react';\nimport type { Contact, Message, MessagePath, RadioConfig } from '../types';\nimport { CONTACT_TYPE_REPEATER } from '../types';\nimport { formatTime, parseSenderFromText } from '../utils/messageParser';\nimport { formatHopCounts, type SenderInfo } from '../utils/pathUtils';\nimport { ContactAvatar } from './ContactAvatar';\nimport { PathModal } from './PathModal';\nimport { cn } from '@/lib/utils';\n\ninterface MessageListProps {\n messages: Message[];\n contacts: Contact[];\n loading: boolean;\n loadingOlder?: boolean;\n hasOlderMessages?: boolean;\n onSenderClick?: (sender: string) => void;\n onLoadOlder?: () => void;\n radioName?: string;\n config?: RadioConfig | null;\n}\n\n// Helper to render text with highlighted @[Name] mentions\nfunction renderTextWithMentions(text: string, radioName?: string): ReactNode {\n if (!radioName) return text;\n\n const mentionPattern = /@\\[([^\\]]+)\\]/g;\n const parts: ReactNode[] = [];\n let lastIndex = 0;\n let match: RegExpExecArray | null;\n let keyIndex = 0;\n\n while ((match = mentionPattern.exec(text)) !== null) {\n // Add text before the match\n if (match.index > lastIndex) {\n parts.push(text.slice(lastIndex, match.index));\n }\n\n const mentionedName = match[1];\n const isOwnMention = mentionedName === radioName;\n\n parts.push(\n \n @[{mentionedName}]\n \n );\n\n lastIndex = match.index + match[0].length;\n }\n\n // Add remaining text after last match\n if (lastIndex < text.length) {\n parts.push(text.slice(lastIndex));\n }\n\n return parts.length > 0 ? parts : text;\n}\n\n// Clickable hop count badge that opens the path modal\ninterface HopCountBadgeProps {\n paths: MessagePath[];\n onClick: () => void;\n variant: 'header' | 'inline';\n}\n\nfunction HopCountBadge({ paths, onClick, variant }: HopCountBadgeProps) {\n const hopInfo = formatHopCounts(paths);\n const label = `(${hopInfo.display})`;\n\n const className =\n variant === 'header'\n ? 'font-normal text-muted-foreground/70 ml-1 text-[11px] cursor-pointer hover:text-primary hover:underline'\n : 'text-[10px] text-muted-foreground/50 ml-1 cursor-pointer hover:text-primary hover:underline';\n\n return (\n {\n e.stopPropagation();\n onClick();\n }}\n title=\"View message path\"\n >\n {label}\n \n );\n}\n\nexport function MessageList({\n messages,\n contacts,\n loading,\n loadingOlder = false,\n hasOlderMessages = false,\n onSenderClick,\n onLoadOlder,\n radioName,\n config,\n}: MessageListProps) {\n const listRef = useRef(null);\n const prevMessagesLengthRef = useRef(0);\n const isInitialLoadRef = useRef(true);\n const [showScrollToBottom, setShowScrollToBottom] = useState(false);\n const [selectedPath, setSelectedPath] = useState<{\n paths: MessagePath[];\n senderInfo: SenderInfo;\n } | null>(null);\n\n // Capture scroll state in the scroll handler BEFORE any state updates\n const scrollStateRef = useRef({\n scrollTop: 0,\n scrollHeight: 0,\n clientHeight: 0,\n wasNearTop: false,\n wasNearBottom: true, // Default to true so initial messages scroll to bottom\n });\n\n // Handle scroll position AFTER render\n useLayoutEffect(() => {\n if (!listRef.current) return;\n\n const list = listRef.current;\n const messagesAdded = messages.length - prevMessagesLengthRef.current;\n\n if (isInitialLoadRef.current && messages.length > 0) {\n // Initial load - scroll to bottom\n list.scrollTop = list.scrollHeight;\n isInitialLoadRef.current = false;\n } else if (messagesAdded > 0 && prevMessagesLengthRef.current > 0) {\n // Messages were added - use scroll state captured before the update\n const scrollHeightDiff = list.scrollHeight - scrollStateRef.current.scrollHeight;\n\n if (scrollStateRef.current.wasNearTop && scrollHeightDiff > 0) {\n // User was near top (loading older) - preserve position by adding the height diff\n list.scrollTop = scrollStateRef.current.scrollTop + scrollHeightDiff;\n } else if (scrollStateRef.current.wasNearBottom) {\n // User was near bottom - scroll to bottom for new messages (including sent)\n list.scrollTop = list.scrollHeight;\n }\n }\n\n prevMessagesLengthRef.current = messages.length;\n }, [messages]);\n\n // Reset initial load flag when conversation changes (messages becomes empty then filled)\n useEffect(() => {\n if (messages.length === 0) {\n isInitialLoadRef.current = true;\n prevMessagesLengthRef.current = 0;\n scrollStateRef.current = {\n scrollTop: 0,\n scrollHeight: 0,\n clientHeight: 0,\n wasNearTop: false,\n wasNearBottom: true,\n };\n }\n }, [messages.length]);\n\n // Handle scroll - capture state and detect when user is near top/bottom\n const handleScroll = useCallback(() => {\n if (!listRef.current) return;\n\n const { scrollTop, scrollHeight, clientHeight } = listRef.current;\n const distanceFromBottom = scrollHeight - scrollTop - clientHeight;\n\n // Always capture current scroll state (needed for scroll preservation)\n scrollStateRef.current = {\n scrollTop,\n scrollHeight,\n clientHeight,\n wasNearTop: scrollTop < 150,\n wasNearBottom: distanceFromBottom < 100,\n };\n\n // Show scroll-to-bottom button when not near the bottom (more than 100px away)\n setShowScrollToBottom(distanceFromBottom > 100);\n\n if (!onLoadOlder || loadingOlder || !hasOlderMessages) return;\n\n // Trigger load when within 100px of top\n if (scrollTop < 100) {\n onLoadOlder();\n }\n }, [onLoadOlder, loadingOlder, hasOlderMessages]);\n\n // Scroll to bottom handler\n const scrollToBottom = useCallback(() => {\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, []);\n\n // Look up contact by public key\n const getContact = (conversationKey: string | null): Contact | null => {\n if (!conversationKey) return null;\n return contacts.find((c) => c.public_key === conversationKey) || null;\n };\n\n // Look up contact by name (for channel messages where we parse sender from text)\n const getContactByName = (name: string): Contact | null => {\n return contacts.find((c) => c.name === name) || null;\n };\n\n // Build sender info for path modal\n const getSenderInfo = (\n msg: Message,\n contact: Contact | null,\n parsedSender: string | null\n ): SenderInfo => {\n if (msg.type === 'PRIV' && contact) {\n return {\n name: contact.name || contact.public_key.slice(0, 12),\n publicKeyOrPrefix: contact.public_key,\n lat: contact.lat,\n lon: contact.lon,\n };\n }\n // For channel messages, try to find contact by parsed sender name\n if (parsedSender) {\n const senderContact = getContactByName(parsedSender);\n if (senderContact) {\n return {\n name: parsedSender,\n publicKeyOrPrefix: senderContact.public_key,\n lat: senderContact.lat,\n lon: senderContact.lon,\n };\n }\n }\n // Fallback: unknown sender\n return {\n name: parsedSender || 'Unknown',\n publicKeyOrPrefix: msg.conversation_key || '',\n lat: null,\n lon: null,\n };\n };\n\n if (loading) {\n return (\n
\n Loading messages...\n
\n );\n }\n\n if (messages.length === 0) {\n return (\n
\n No messages yet\n
\n );\n }\n\n // Sort messages by received_at ascending (oldest first)\n // Note: Deduplication is handled by useConversationMessages.addMessageIfNew()\n // and the database UNIQUE constraint on (type, conversation_key, text, sender_timestamp)\n const sortedMessages = [...messages].sort((a, b) => a.received_at - b.received_at);\n\n // Helper to get a unique sender key for grouping messages\n const getSenderKey = (msg: Message, sender: string | null): string => {\n if (msg.outgoing) return '__outgoing__';\n if (msg.type === 'PRIV' && msg.conversation_key) return msg.conversation_key;\n return sender || '__unknown__';\n };\n\n return (\n
\n \n {loadingOlder && (\n
\n Loading older messages...\n
\n )}\n {!loadingOlder && hasOlderMessages && (\n
\n Scroll up for older messages\n
\n )}\n {sortedMessages.map((msg, index) => {\n // For DMs, look up contact; for channel messages, use parsed sender\n const contact = msg.type === 'PRIV' ? getContact(msg.conversation_key) : null;\n const isRepeater = contact?.type === CONTACT_TYPE_REPEATER;\n\n // Skip sender parsing for repeater messages (CLI responses often have colons)\n const { sender, content } = isRepeater\n ? { sender: null, content: msg.text }\n : parseSenderFromText(msg.text);\n const displaySender = msg.outgoing\n ? 'You'\n : contact?.name || sender || msg.conversation_key?.slice(0, 8) || 'Unknown';\n\n const canClickSender = !msg.outgoing && onSenderClick && displaySender !== 'Unknown';\n\n // Determine if we should show avatar (first message in a chunk from same sender)\n const currentSenderKey = getSenderKey(msg, sender);\n const prevMsg = sortedMessages[index - 1];\n const prevSenderKey = prevMsg\n ? getSenderKey(prevMsg, parseSenderFromText(prevMsg.text).sender)\n : null;\n const showAvatar = !msg.outgoing && currentSenderKey !== prevSenderKey;\n const isFirstMessage = index === 0;\n\n // Get avatar info for incoming messages\n let avatarName: string | null = null;\n let avatarKey: string = '';\n if (!msg.outgoing) {\n if (msg.type === 'PRIV' && msg.conversation_key) {\n // DM: use conversation_key (sender's public key)\n avatarName = contact?.name || null;\n avatarKey = msg.conversation_key;\n } else if (sender) {\n // Channel message: try to find contact by name, or use sender name as pseudo-key\n const senderContact = getContactByName(sender);\n avatarName = sender;\n avatarKey = senderContact?.public_key || `name:${sender}`;\n }\n }\n\n return (\n \n {!msg.outgoing && (\n
\n {showAvatar && avatarKey && (\n \n )}\n
\n )}\n \n {showAvatar && (\n
\n {canClickSender ? (\n onSenderClick(displaySender)}\n title={`Mention ${displaySender}`}\n >\n {displaySender}\n \n ) : (\n displaySender\n )}\n \n {formatTime(msg.sender_timestamp || msg.received_at)}\n \n {!msg.outgoing && msg.paths && msg.paths.length > 0 && (\n \n setSelectedPath({\n paths: msg.paths!,\n senderInfo: getSenderInfo(msg, contact, sender),\n })\n }\n />\n )}\n
\n )}\n
\n {content.split('\\n').map((line, i, arr) => (\n \n {renderTextWithMentions(line, radioName)}\n {i < arr.length - 1 &&
}\n
\n ))}\n {!showAvatar && (\n <>\n \n {formatTime(msg.sender_timestamp || msg.received_at)}\n \n {!msg.outgoing && msg.paths && msg.paths.length > 0 && (\n \n setSelectedPath({\n paths: msg.paths!,\n senderInfo: getSenderInfo(msg, contact, sender),\n })\n }\n />\n )}\n \n )}\n {msg.outgoing && (msg.acked > 0 ? ` ✓${msg.acked > 1 ? msg.acked : ''}` : ' ?')}\n
\n
\n
\n );\n })}\n
\n\n {/* Scroll to bottom button */}\n {showScrollToBottom && (\n \n \n \n \n \n )}\n\n {/* Path modal */}\n {selectedPath && (\n setSelectedPath(null)}\n paths={selectedPath.paths}\n senderInfo={selectedPath.senderInfo}\n contacts={contacts}\n config={config ?? null}\n />\n )}\n
\n );\n}\n","import {\n useState,\n useCallback,\n useImperativeHandle,\n forwardRef,\n useRef,\n useMemo,\n type FormEvent,\n type KeyboardEvent,\n} from 'react';\nimport { Input } from './ui/input';\nimport { Button } from './ui/button';\nimport { toast } from './ui/sonner';\nimport { cn } from '@/lib/utils';\n\n// MeshCore message size limits (empirically determined from LoRa packet constraints)\n// Direct delivery allows ~156 bytes; multi-hop requires buffer for path growth.\n// Channels include \"sender: \" prefix in the encrypted payload.\nconst DM_HARD_LIMIT = 156; // Max for direct delivery\nconst DM_WARNING_THRESHOLD = 140; // Conservative for multi-hop\nconst CHANNEL_HARD_LIMIT = 156; // Base limit before sender overhead\nconst CHANNEL_WARNING_THRESHOLD = 120; // Conservative for multi-hop\nconst CHANNEL_DANGER_BUFFER = 8; // Red zone starts this many chars before hard limit\n\ninterface MessageInputProps {\n onSend: (text: string) => Promise;\n disabled: boolean;\n placeholder?: string;\n /** When true, input becomes password field for repeater telemetry */\n isRepeaterMode?: boolean;\n /** Conversation type for character limit calculation */\n conversationType?: 'contact' | 'channel' | 'raw';\n /** Sender name (radio name) for channel message limit calculation */\n senderName?: string;\n}\n\ntype LimitState = 'normal' | 'warning' | 'danger' | 'error';\n\nexport interface MessageInputHandle {\n appendText: (text: string) => void;\n}\n\nexport const MessageInput = forwardRef(function MessageInput(\n { onSend, disabled, placeholder, isRepeaterMode, conversationType, senderName },\n ref\n) {\n const [text, setText] = useState('');\n const [sending, setSending] = useState(false);\n const inputRef = useRef(null);\n\n useImperativeHandle(ref, () => ({\n appendText: (appendedText: string) => {\n setText((prev) => prev + appendedText);\n // Focus the input after appending\n inputRef.current?.focus();\n },\n }));\n\n // Calculate character limits based on conversation type\n const limits = useMemo(() => {\n if (conversationType === 'contact') {\n return {\n warningAt: DM_WARNING_THRESHOLD,\n dangerAt: DM_HARD_LIMIT, // Same as hard limit for DMs (no intermediate red zone)\n hardLimit: DM_HARD_LIMIT,\n };\n } else if (conversationType === 'channel') {\n // Channel hard limit = 156 - senderName.length - 2 (for \": \" separator)\n const nameLen = senderName?.length ?? 10;\n const hardLimit = Math.max(1, CHANNEL_HARD_LIMIT - nameLen - 2);\n return {\n warningAt: CHANNEL_WARNING_THRESHOLD,\n dangerAt: Math.max(1, hardLimit - CHANNEL_DANGER_BUFFER),\n hardLimit,\n };\n }\n return null; // Raw/other - no limits\n }, [conversationType, senderName]);\n\n // Determine current limit state\n const { limitState, warningMessage } = useMemo((): {\n limitState: LimitState;\n warningMessage: string | null;\n } => {\n if (!limits) return { limitState: 'normal', warningMessage: null };\n\n const len = text.length;\n if (len >= limits.hardLimit) {\n return { limitState: 'error', warningMessage: 'likely truncated by radio' };\n }\n if (len >= limits.dangerAt) {\n return { limitState: 'danger', warningMessage: 'may impact multi-repeater hop delivery' };\n }\n if (len >= limits.warningAt) {\n return { limitState: 'warning', warningMessage: 'may impact multi-repeater hop delivery' };\n }\n return { limitState: 'normal', warningMessage: null };\n }, [text.length, limits]);\n\n const remaining = limits ? limits.hardLimit - text.length : 0;\n\n const handleSubmit = useCallback(\n async (e: FormEvent) => {\n e.preventDefault();\n const trimmed = text.trim();\n\n // For repeater mode, empty password means guest login\n if (isRepeaterMode) {\n if (sending || disabled) return;\n setSending(true);\n try {\n await onSend(trimmed);\n setText('');\n } catch (err) {\n console.error('Failed to request telemetry:', err);\n toast.error('Failed to request telemetry', {\n description: err instanceof Error ? err.message : 'Check radio connection',\n });\n return;\n } finally {\n setSending(false);\n }\n // Refocus after React re-enables the input (now in CLI command mode)\n setTimeout(() => inputRef.current?.focus(), 0);\n } else {\n if (!trimmed || sending || disabled) return;\n setSending(true);\n try {\n await onSend(trimmed);\n setText('');\n } catch (err) {\n console.error('Failed to send message:', err);\n toast.error('Failed to send message', {\n description: err instanceof Error ? err.message : 'Check radio connection',\n });\n return;\n } finally {\n setSending(false);\n }\n // Refocus after React re-enables the input\n setTimeout(() => inputRef.current?.focus(), 0);\n }\n },\n [text, sending, disabled, onSend, isRepeaterMode]\n );\n\n const handleKeyDown = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === 'Enter' && !e.shiftKey) {\n e.preventDefault();\n handleSubmit(e as unknown as FormEvent);\n }\n },\n [handleSubmit]\n );\n\n // For repeater mode, always allow submit (empty = guest login)\n const canSubmit = isRepeaterMode ? true : text.trim().length > 0;\n\n // Show character counter for messages (not repeater mode or raw)\n const showCharCounter = !isRepeaterMode && limits !== null;\n\n return (\n \n
\n setText(e.target.value)}\n onKeyDown={handleKeyDown}\n placeholder={\n placeholder ||\n (isRepeaterMode ? 'Enter password for admin login...' : 'Type a message...')\n }\n disabled={disabled || sending}\n className=\"flex-1 min-w-0\"\n />\n \n {sending\n ? isRepeaterMode\n ? 'Logging in...'\n : 'Sending...'\n : isRepeaterMode\n ? text.trim()\n ? 'Log in with password'\n : 'Log in as guest/use repeater ACLs'\n : 'Send'}\n \n
\n {showCharCounter && (\n
\n \n {text.length}/{limits!.hardLimit}\n {remaining < 0 && ` (${remaining})`}\n \n {warningMessage && (\n \n — {warningMessage}\n \n )}\n
\n )}\n \n );\n});\n","// src/slot.tsx\nimport * as React from \"react\";\nimport { composeRefs } from \"@radix-ui/react-compose-refs\";\nimport { Fragment as Fragment2, jsx } from \"react/jsx-runtime\";\n// @__NO_SIDE_EFFECTS__\nfunction createSlot(ownerName) {\n const SlotClone = /* @__PURE__ */ createSlotClone(ownerName);\n const Slot2 = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n const childrenArray = React.Children.toArray(children);\n const slottable = childrenArray.find(isSlottable);\n if (slottable) {\n const newElement = slottable.props.children;\n const newChildren = childrenArray.map((child) => {\n if (child === slottable) {\n if (React.Children.count(newElement) > 1) return React.Children.only(null);\n return React.isValidElement(newElement) ? newElement.props.children : null;\n } else {\n return child;\n }\n });\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children: React.isValidElement(newElement) ? React.cloneElement(newElement, void 0, newChildren) : null });\n }\n return /* @__PURE__ */ jsx(SlotClone, { ...slotProps, ref: forwardedRef, children });\n });\n Slot2.displayName = `${ownerName}.Slot`;\n return Slot2;\n}\nvar Slot = /* @__PURE__ */ createSlot(\"Slot\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlotClone(ownerName) {\n const SlotClone = React.forwardRef((props, forwardedRef) => {\n const { children, ...slotProps } = props;\n if (React.isValidElement(children)) {\n const childrenRef = getElementRef(children);\n const props2 = mergeProps(slotProps, children.props);\n if (children.type !== React.Fragment) {\n props2.ref = forwardedRef ? composeRefs(forwardedRef, childrenRef) : childrenRef;\n }\n return React.cloneElement(children, props2);\n }\n return React.Children.count(children) > 1 ? React.Children.only(null) : null;\n });\n SlotClone.displayName = `${ownerName}.SlotClone`;\n return SlotClone;\n}\nvar SLOTTABLE_IDENTIFIER = Symbol(\"radix.slottable\");\n// @__NO_SIDE_EFFECTS__\nfunction createSlottable(ownerName) {\n const Slottable2 = ({ children }) => {\n return /* @__PURE__ */ jsx(Fragment2, { children });\n };\n Slottable2.displayName = `${ownerName}.Slottable`;\n Slottable2.__radixId = SLOTTABLE_IDENTIFIER;\n return Slottable2;\n}\nvar Slottable = /* @__PURE__ */ createSlottable(\"Slottable\");\nfunction isSlottable(child) {\n return React.isValidElement(child) && typeof child.type === \"function\" && \"__radixId\" in child.type && child.type.__radixId === SLOTTABLE_IDENTIFIER;\n}\nfunction mergeProps(slotProps, childProps) {\n const overrideProps = { ...childProps };\n for (const propName in childProps) {\n const slotPropValue = slotProps[propName];\n const childPropValue = childProps[propName];\n const isHandler = /^on[A-Z]/.test(propName);\n if (isHandler) {\n if (slotPropValue && childPropValue) {\n overrideProps[propName] = (...args) => {\n const result = childPropValue(...args);\n slotPropValue(...args);\n return result;\n };\n } else if (slotPropValue) {\n overrideProps[propName] = slotPropValue;\n }\n } else if (propName === \"style\") {\n overrideProps[propName] = { ...slotPropValue, ...childPropValue };\n } else if (propName === \"className\") {\n overrideProps[propName] = [slotPropValue, childPropValue].filter(Boolean).join(\" \");\n }\n }\n return { ...slotProps, ...overrideProps };\n}\nfunction getElementRef(element) {\n let getter = Object.getOwnPropertyDescriptor(element.props, \"ref\")?.get;\n let mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.ref;\n }\n getter = Object.getOwnPropertyDescriptor(element, \"ref\")?.get;\n mayWarn = getter && \"isReactWarning\" in getter && getter.isReactWarning;\n if (mayWarn) {\n return element.props.ref;\n }\n return element.props.ref || element.ref;\n}\nexport {\n Slot as Root,\n Slot,\n Slottable,\n createSlot,\n createSlottable\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/collection-legacy.tsx\nimport React from \"react\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nfunction createCollection(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope(PROVIDER_NAME);\n const [CollectionProviderImpl, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n { collectionRef: { current: null }, itemMap: /* @__PURE__ */ new Map() }\n );\n const CollectionProvider = (props) => {\n const { scope, children } = props;\n const ref = React.useRef(null);\n const itemMap = React.useRef(/* @__PURE__ */ new Map()).current;\n return /* @__PURE__ */ jsx(CollectionProviderImpl, { scope, itemMap, collectionRef: ref, children });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot(COLLECTION_SLOT_NAME);\n const CollectionSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot(ITEM_SLOT_NAME);\n const CollectionItemSlot = React.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n React.useEffect(() => {\n context.itemMap.set(ref, { ref, ...itemData });\n return () => void context.itemMap.delete(ref);\n });\n return /* @__PURE__ */ jsx(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useCollection(scope) {\n const context = useCollectionContext(name + \"CollectionConsumer\", scope);\n const getItems = React.useCallback(() => {\n const collectionNode = context.collectionRef.current;\n if (!collectionNode) return [];\n const orderedNodes = Array.from(collectionNode.querySelectorAll(`[${ITEM_DATA_ATTR}]`));\n const items = Array.from(context.itemMap.values());\n const orderedItems = items.sort(\n (a, b) => orderedNodes.indexOf(a.ref.current) - orderedNodes.indexOf(b.ref.current)\n );\n return orderedItems;\n }, [context.collectionRef, context.itemMap]);\n return getItems;\n }\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n useCollection,\n createCollectionScope\n ];\n}\n\n// src/collection.tsx\nimport React2 from \"react\";\nimport { createContextScope as createContextScope2 } from \"@radix-ui/react-context\";\nimport { useComposedRefs as useComposedRefs2 } from \"@radix-ui/react-compose-refs\";\nimport { createSlot as createSlot2 } from \"@radix-ui/react-slot\";\n\n// src/ordered-dictionary.ts\nvar __instanciated = /* @__PURE__ */ new WeakMap();\nvar OrderedDict = class _OrderedDict extends Map {\n #keys;\n constructor(entries) {\n super(entries);\n this.#keys = [...super.keys()];\n __instanciated.set(this, true);\n }\n set(key, value) {\n if (__instanciated.get(this)) {\n if (this.has(key)) {\n this.#keys[this.#keys.indexOf(key)] = key;\n } else {\n this.#keys.push(key);\n }\n }\n super.set(key, value);\n return this;\n }\n insert(index, key, value) {\n const has = this.has(key);\n const length = this.#keys.length;\n const relativeIndex = toSafeInteger(index);\n let actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n const safeIndex = actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n if (safeIndex === this.size || has && safeIndex === this.size - 1 || safeIndex === -1) {\n this.set(key, value);\n return this;\n }\n const size = this.size + (has ? 0 : 1);\n if (relativeIndex < 0) {\n actualIndex++;\n }\n const keys = [...this.#keys];\n let nextValue;\n let shouldSkip = false;\n for (let i = actualIndex; i < size; i++) {\n if (actualIndex === i) {\n let nextKey = keys[i];\n if (keys[i] === key) {\n nextKey = keys[i + 1];\n }\n if (has) {\n this.delete(key);\n }\n nextValue = this.get(nextKey);\n this.set(key, value);\n } else {\n if (!shouldSkip && keys[i - 1] === key) {\n shouldSkip = true;\n }\n const currentKey = keys[shouldSkip ? i : i - 1];\n const currentValue = nextValue;\n nextValue = this.get(currentKey);\n this.delete(currentKey);\n this.set(currentKey, currentValue);\n }\n }\n return this;\n }\n with(index, key, value) {\n const copy = new _OrderedDict(this);\n copy.insert(index, key, value);\n return copy;\n }\n before(key) {\n const index = this.#keys.indexOf(key) - 1;\n if (index < 0) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position before the given key.\n */\n setBefore(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index, newKey, value);\n }\n after(key) {\n let index = this.#keys.indexOf(key);\n index = index === -1 || index === this.size - 1 ? -1 : index + 1;\n if (index === -1) {\n return void 0;\n }\n return this.entryAt(index);\n }\n /**\n * Sets a new key-value pair at the position after the given key.\n */\n setAfter(key, newKey, value) {\n const index = this.#keys.indexOf(key);\n if (index === -1) {\n return this;\n }\n return this.insert(index + 1, newKey, value);\n }\n first() {\n return this.entryAt(0);\n }\n last() {\n return this.entryAt(-1);\n }\n clear() {\n this.#keys = [];\n return super.clear();\n }\n delete(key) {\n const deleted = super.delete(key);\n if (deleted) {\n this.#keys.splice(this.#keys.indexOf(key), 1);\n }\n return deleted;\n }\n deleteAt(index) {\n const key = this.keyAt(index);\n if (key !== void 0) {\n return this.delete(key);\n }\n return false;\n }\n at(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return this.get(key);\n }\n }\n entryAt(index) {\n const key = at(this.#keys, index);\n if (key !== void 0) {\n return [key, this.get(key)];\n }\n }\n indexOf(key) {\n return this.#keys.indexOf(key);\n }\n keyAt(index) {\n return at(this.#keys, index);\n }\n from(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.at(dest);\n }\n keyFrom(key, offset) {\n const index = this.indexOf(key);\n if (index === -1) {\n return void 0;\n }\n let dest = index + offset;\n if (dest < 0) dest = 0;\n if (dest >= this.size) dest = this.size - 1;\n return this.keyAt(dest);\n }\n find(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return entry;\n }\n index++;\n }\n return void 0;\n }\n findIndex(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return index;\n }\n index++;\n }\n return -1;\n }\n filter(predicate, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n entries.push(entry);\n }\n index++;\n }\n return new _OrderedDict(entries);\n }\n map(callbackfn, thisArg) {\n const entries = [];\n let index = 0;\n for (const entry of this) {\n entries.push([entry[0], Reflect.apply(callbackfn, thisArg, [entry, index, this])]);\n index++;\n }\n return new _OrderedDict(entries);\n }\n reduce(...args) {\n const [callbackfn, initialValue] = args;\n let index = 0;\n let accumulator = initialValue ?? this.at(0);\n for (const entry of this) {\n if (index === 0 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n index++;\n }\n return accumulator;\n }\n reduceRight(...args) {\n const [callbackfn, initialValue] = args;\n let accumulator = initialValue ?? this.at(-1);\n for (let index = this.size - 1; index >= 0; index--) {\n const entry = this.at(index);\n if (index === this.size - 1 && args.length === 1) {\n accumulator = entry;\n } else {\n accumulator = Reflect.apply(callbackfn, this, [accumulator, entry, index, this]);\n }\n }\n return accumulator;\n }\n toSorted(compareFn) {\n const entries = [...this.entries()].sort(compareFn);\n return new _OrderedDict(entries);\n }\n toReversed() {\n const reversed = new _OrderedDict();\n for (let index = this.size - 1; index >= 0; index--) {\n const key = this.keyAt(index);\n const element = this.get(key);\n reversed.set(key, element);\n }\n return reversed;\n }\n toSpliced(...args) {\n const entries = [...this.entries()];\n entries.splice(...args);\n return new _OrderedDict(entries);\n }\n slice(start, end) {\n const result = new _OrderedDict();\n let stop = this.size - 1;\n if (start === void 0) {\n return result;\n }\n if (start < 0) {\n start = start + this.size;\n }\n if (end !== void 0 && end > 0) {\n stop = end - 1;\n }\n for (let index = start; index <= stop; index++) {\n const key = this.keyAt(index);\n const element = this.get(key);\n result.set(key, element);\n }\n return result;\n }\n every(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (!Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return false;\n }\n index++;\n }\n return true;\n }\n some(predicate, thisArg) {\n let index = 0;\n for (const entry of this) {\n if (Reflect.apply(predicate, thisArg, [entry, index, this])) {\n return true;\n }\n index++;\n }\n return false;\n }\n};\nfunction at(array, index) {\n if (\"at\" in Array.prototype) {\n return Array.prototype.at.call(array, index);\n }\n const actualIndex = toSafeIndex(array, index);\n return actualIndex === -1 ? void 0 : array[actualIndex];\n}\nfunction toSafeIndex(array, index) {\n const length = array.length;\n const relativeIndex = toSafeInteger(index);\n const actualIndex = relativeIndex >= 0 ? relativeIndex : length + relativeIndex;\n return actualIndex < 0 || actualIndex >= length ? -1 : actualIndex;\n}\nfunction toSafeInteger(number) {\n return number !== number || number === 0 ? 0 : Math.trunc(number);\n}\n\n// src/collection.tsx\nimport { jsx as jsx2 } from \"react/jsx-runtime\";\nfunction createCollection2(name) {\n const PROVIDER_NAME = name + \"CollectionProvider\";\n const [createCollectionContext, createCollectionScope] = createContextScope2(PROVIDER_NAME);\n const [CollectionContextProvider, useCollectionContext] = createCollectionContext(\n PROVIDER_NAME,\n {\n collectionElement: null,\n collectionRef: { current: null },\n collectionRefObject: { current: null },\n itemMap: new OrderedDict(),\n setItemMap: () => void 0\n }\n );\n const CollectionProvider = ({ state, ...props }) => {\n return state ? /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state }) : /* @__PURE__ */ jsx2(CollectionInit, { ...props });\n };\n CollectionProvider.displayName = PROVIDER_NAME;\n const CollectionInit = (props) => {\n const state = useInitCollection();\n return /* @__PURE__ */ jsx2(CollectionProviderImpl, { ...props, state });\n };\n CollectionInit.displayName = PROVIDER_NAME + \"Init\";\n const CollectionProviderImpl = (props) => {\n const { scope, children, state } = props;\n const ref = React2.useRef(null);\n const [collectionElement, setCollectionElement] = React2.useState(\n null\n );\n const composeRefs = useComposedRefs2(ref, setCollectionElement);\n const [itemMap, setItemMap] = state;\n React2.useEffect(() => {\n if (!collectionElement) return;\n const observer = getChildListObserver(() => {\n });\n observer.observe(collectionElement, {\n childList: true,\n subtree: true\n });\n return () => {\n observer.disconnect();\n };\n }, [collectionElement]);\n return /* @__PURE__ */ jsx2(\n CollectionContextProvider,\n {\n scope,\n itemMap,\n setItemMap,\n collectionRef: composeRefs,\n collectionRefObject: ref,\n collectionElement,\n children\n }\n );\n };\n CollectionProviderImpl.displayName = PROVIDER_NAME + \"Impl\";\n const COLLECTION_SLOT_NAME = name + \"CollectionSlot\";\n const CollectionSlotImpl = createSlot2(COLLECTION_SLOT_NAME);\n const CollectionSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children } = props;\n const context = useCollectionContext(COLLECTION_SLOT_NAME, scope);\n const composedRefs = useComposedRefs2(forwardedRef, context.collectionRef);\n return /* @__PURE__ */ jsx2(CollectionSlotImpl, { ref: composedRefs, children });\n }\n );\n CollectionSlot.displayName = COLLECTION_SLOT_NAME;\n const ITEM_SLOT_NAME = name + \"CollectionItemSlot\";\n const ITEM_DATA_ATTR = \"data-radix-collection-item\";\n const CollectionItemSlotImpl = createSlot2(ITEM_SLOT_NAME);\n const CollectionItemSlot = React2.forwardRef(\n (props, forwardedRef) => {\n const { scope, children, ...itemData } = props;\n const ref = React2.useRef(null);\n const [element, setElement] = React2.useState(null);\n const composedRefs = useComposedRefs2(forwardedRef, ref, setElement);\n const context = useCollectionContext(ITEM_SLOT_NAME, scope);\n const { setItemMap } = context;\n const itemDataRef = React2.useRef(itemData);\n if (!shallowEqual(itemDataRef.current, itemData)) {\n itemDataRef.current = itemData;\n }\n const memoizedItemData = itemDataRef.current;\n React2.useEffect(() => {\n const itemData2 = memoizedItemData;\n setItemMap((map) => {\n if (!element) {\n return map;\n }\n if (!map.has(element)) {\n map.set(element, { ...itemData2, element });\n return map.toSorted(sortByDocumentPosition);\n }\n return map.set(element, { ...itemData2, element }).toSorted(sortByDocumentPosition);\n });\n return () => {\n setItemMap((map) => {\n if (!element || !map.has(element)) {\n return map;\n }\n map.delete(element);\n return new OrderedDict(map);\n });\n };\n }, [element, memoizedItemData, setItemMap]);\n return /* @__PURE__ */ jsx2(CollectionItemSlotImpl, { ...{ [ITEM_DATA_ATTR]: \"\" }, ref: composedRefs, children });\n }\n );\n CollectionItemSlot.displayName = ITEM_SLOT_NAME;\n function useInitCollection() {\n return React2.useState(new OrderedDict());\n }\n function useCollection(scope) {\n const { itemMap } = useCollectionContext(name + \"CollectionConsumer\", scope);\n return itemMap;\n }\n const functions = {\n createCollectionScope,\n useCollection,\n useInitCollection\n };\n return [\n { Provider: CollectionProvider, Slot: CollectionSlot, ItemSlot: CollectionItemSlot },\n functions\n ];\n}\nfunction shallowEqual(a, b) {\n if (a === b) return true;\n if (typeof a !== \"object\" || typeof b !== \"object\") return false;\n if (a == null || b == null) return false;\n const keysA = Object.keys(a);\n const keysB = Object.keys(b);\n if (keysA.length !== keysB.length) return false;\n for (const key of keysA) {\n if (!Object.prototype.hasOwnProperty.call(b, key)) return false;\n if (a[key] !== b[key]) return false;\n }\n return true;\n}\nfunction isElementPreceding(a, b) {\n return !!(b.compareDocumentPosition(a) & Node.DOCUMENT_POSITION_PRECEDING);\n}\nfunction sortByDocumentPosition(a, b) {\n return !a[1].element || !b[1].element ? 0 : isElementPreceding(a[1].element, b[1].element) ? -1 : 1;\n}\nfunction getChildListObserver(callback) {\n const observer = new MutationObserver((mutationsList) => {\n for (const mutation of mutationsList) {\n if (mutation.type === \"childList\") {\n callback();\n return;\n }\n }\n });\n return observer;\n}\nexport {\n createCollection,\n createCollection2 as unstable_createCollection\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/direction/src/direction.tsx\nimport * as React from \"react\";\nimport { jsx } from \"react/jsx-runtime\";\nvar DirectionContext = React.createContext(void 0);\nvar DirectionProvider = (props) => {\n const { dir, children } = props;\n return /* @__PURE__ */ jsx(DirectionContext.Provider, { value: dir, children });\n};\nfunction useDirection(localDir) {\n const globalDir = React.useContext(DirectionContext);\n return localDir || globalDir || \"ltr\";\n}\nvar Provider = DirectionProvider;\nexport {\n DirectionProvider,\n Provider,\n useDirection\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/roving-focus-group.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { jsx } from \"react/jsx-runtime\";\nvar ENTRY_FOCUS = \"rovingFocusGroup.onEntryFocus\";\nvar EVENT_OPTIONS = { bubbles: false, cancelable: true };\nvar GROUP_NAME = \"RovingFocusGroup\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(GROUP_NAME);\nvar [createRovingFocusGroupContext, createRovingFocusGroupScope] = createContextScope(\n GROUP_NAME,\n [createCollectionScope]\n);\nvar [RovingFocusProvider, useRovingFocusContext] = createRovingFocusGroupContext(GROUP_NAME);\nvar RovingFocusGroup = React.forwardRef(\n (props, forwardedRef) => {\n return /* @__PURE__ */ jsx(Collection.Provider, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeRovingFocusGroup, children: /* @__PURE__ */ jsx(RovingFocusGroupImpl, { ...props, ref: forwardedRef }) }) });\n }\n);\nRovingFocusGroup.displayName = GROUP_NAME;\nvar RovingFocusGroupImpl = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n orientation,\n loop = false,\n dir,\n currentTabStopId: currentTabStopIdProp,\n defaultCurrentTabStopId,\n onCurrentTabStopIdChange,\n onEntryFocus,\n preventScrollOnEntryFocus = false,\n ...groupProps\n } = props;\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const direction = useDirection(dir);\n const [currentTabStopId, setCurrentTabStopId] = useControllableState({\n prop: currentTabStopIdProp,\n defaultProp: defaultCurrentTabStopId ?? null,\n onChange: onCurrentTabStopIdChange,\n caller: GROUP_NAME\n });\n const [isTabbingBackOut, setIsTabbingBackOut] = React.useState(false);\n const handleEntryFocus = useCallbackRef(onEntryFocus);\n const getItems = useCollection(__scopeRovingFocusGroup);\n const isClickFocusRef = React.useRef(false);\n const [focusableItemsCount, setFocusableItemsCount] = React.useState(0);\n React.useEffect(() => {\n const node = ref.current;\n if (node) {\n node.addEventListener(ENTRY_FOCUS, handleEntryFocus);\n return () => node.removeEventListener(ENTRY_FOCUS, handleEntryFocus);\n }\n }, [handleEntryFocus]);\n return /* @__PURE__ */ jsx(\n RovingFocusProvider,\n {\n scope: __scopeRovingFocusGroup,\n orientation,\n dir: direction,\n loop,\n currentTabStopId,\n onItemFocus: React.useCallback(\n (tabStopId) => setCurrentTabStopId(tabStopId),\n [setCurrentTabStopId]\n ),\n onItemShiftTab: React.useCallback(() => setIsTabbingBackOut(true), []),\n onFocusableItemAdd: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount + 1),\n []\n ),\n onFocusableItemRemove: React.useCallback(\n () => setFocusableItemsCount((prevCount) => prevCount - 1),\n []\n ),\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n tabIndex: isTabbingBackOut || focusableItemsCount === 0 ? -1 : 0,\n \"data-orientation\": orientation,\n ...groupProps,\n ref: composedRefs,\n style: { outline: \"none\", ...props.style },\n onMouseDown: composeEventHandlers(props.onMouseDown, () => {\n isClickFocusRef.current = true;\n }),\n onFocus: composeEventHandlers(props.onFocus, (event) => {\n const isKeyboardFocus = !isClickFocusRef.current;\n if (event.target === event.currentTarget && isKeyboardFocus && !isTabbingBackOut) {\n const entryFocusEvent = new CustomEvent(ENTRY_FOCUS, EVENT_OPTIONS);\n event.currentTarget.dispatchEvent(entryFocusEvent);\n if (!entryFocusEvent.defaultPrevented) {\n const items = getItems().filter((item) => item.focusable);\n const activeItem = items.find((item) => item.active);\n const currentItem = items.find((item) => item.id === currentTabStopId);\n const candidateItems = [activeItem, currentItem, ...items].filter(\n Boolean\n );\n const candidateNodes = candidateItems.map((item) => item.ref.current);\n focusFirst(candidateNodes, preventScrollOnEntryFocus);\n }\n }\n isClickFocusRef.current = false;\n }),\n onBlur: composeEventHandlers(props.onBlur, () => setIsTabbingBackOut(false))\n }\n )\n }\n );\n});\nvar ITEM_NAME = \"RovingFocusGroupItem\";\nvar RovingFocusGroupItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeRovingFocusGroup,\n focusable = true,\n active = false,\n tabStopId,\n children,\n ...itemProps\n } = props;\n const autoId = useId();\n const id = tabStopId || autoId;\n const context = useRovingFocusContext(ITEM_NAME, __scopeRovingFocusGroup);\n const isCurrentTabStop = context.currentTabStopId === id;\n const getItems = useCollection(__scopeRovingFocusGroup);\n const { onFocusableItemAdd, onFocusableItemRemove, currentTabStopId } = context;\n React.useEffect(() => {\n if (focusable) {\n onFocusableItemAdd();\n return () => onFocusableItemRemove();\n }\n }, [focusable, onFocusableItemAdd, onFocusableItemRemove]);\n return /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeRovingFocusGroup,\n id,\n focusable,\n active,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n tabIndex: isCurrentTabStop ? 0 : -1,\n \"data-orientation\": context.orientation,\n ...itemProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!focusable) event.preventDefault();\n else context.onItemFocus(id);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => context.onItemFocus(id)),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if (event.key === \"Tab\" && event.shiftKey) {\n context.onItemShiftTab();\n return;\n }\n if (event.target !== event.currentTarget) return;\n const focusIntent = getFocusIntent(event, context.orientation, context.dir);\n if (focusIntent !== void 0) {\n if (event.metaKey || event.ctrlKey || event.altKey || event.shiftKey) return;\n event.preventDefault();\n const items = getItems().filter((item) => item.focusable);\n let candidateNodes = items.map((item) => item.ref.current);\n if (focusIntent === \"last\") candidateNodes.reverse();\n else if (focusIntent === \"prev\" || focusIntent === \"next\") {\n if (focusIntent === \"prev\") candidateNodes.reverse();\n const currentIndex = candidateNodes.indexOf(event.currentTarget);\n candidateNodes = context.loop ? wrapArray(candidateNodes, currentIndex + 1) : candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n }\n }),\n children: typeof children === \"function\" ? children({ isCurrentTabStop, hasTabStop: currentTabStopId != null }) : children\n }\n )\n }\n );\n }\n);\nRovingFocusGroupItem.displayName = ITEM_NAME;\nvar MAP_KEY_TO_FOCUS_INTENT = {\n ArrowLeft: \"prev\",\n ArrowUp: \"prev\",\n ArrowRight: \"next\",\n ArrowDown: \"next\",\n PageUp: \"first\",\n Home: \"first\",\n PageDown: \"last\",\n End: \"last\"\n};\nfunction getDirectionAwareKey(key, dir) {\n if (dir !== \"rtl\") return key;\n return key === \"ArrowLeft\" ? \"ArrowRight\" : key === \"ArrowRight\" ? \"ArrowLeft\" : key;\n}\nfunction getFocusIntent(event, orientation, dir) {\n const key = getDirectionAwareKey(event.key, dir);\n if (orientation === \"vertical\" && [\"ArrowLeft\", \"ArrowRight\"].includes(key)) return void 0;\n if (orientation === \"horizontal\" && [\"ArrowUp\", \"ArrowDown\"].includes(key)) return void 0;\n return MAP_KEY_TO_FOCUS_INTENT[key];\n}\nfunction focusFirst(candidates, preventScroll = false) {\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate.focus({ preventScroll });\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root = RovingFocusGroup;\nvar Item = RovingFocusGroupItem;\nexport {\n Item,\n Root,\n RovingFocusGroup,\n RovingFocusGroupItem,\n createRovingFocusGroupScope\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/tabs.tsx\nimport * as React from \"react\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { createRovingFocusGroupScope } from \"@radix-ui/react-roving-focus\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport * as RovingFocusGroup from \"@radix-ui/react-roving-focus\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useId } from \"@radix-ui/react-id\";\nimport { jsx } from \"react/jsx-runtime\";\nvar TABS_NAME = \"Tabs\";\nvar [createTabsContext, createTabsScope] = createContextScope(TABS_NAME, [\n createRovingFocusGroupScope\n]);\nvar useRovingFocusGroupScope = createRovingFocusGroupScope();\nvar [TabsProvider, useTabsContext] = createTabsContext(TABS_NAME);\nvar Tabs = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeTabs,\n value: valueProp,\n onValueChange,\n defaultValue,\n orientation = \"horizontal\",\n dir,\n activationMode = \"automatic\",\n ...tabsProps\n } = props;\n const direction = useDirection(dir);\n const [value, setValue] = useControllableState({\n prop: valueProp,\n onChange: onValueChange,\n defaultProp: defaultValue ?? \"\",\n caller: TABS_NAME\n });\n return /* @__PURE__ */ jsx(\n TabsProvider,\n {\n scope: __scopeTabs,\n baseId: useId(),\n value,\n onValueChange: setValue,\n orientation,\n dir: direction,\n activationMode,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n dir: direction,\n \"data-orientation\": orientation,\n ...tabsProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabs.displayName = TABS_NAME;\nvar TAB_LIST_NAME = \"TabsList\";\nvar TabsList = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, loop = true, ...listProps } = props;\n const context = useTabsContext(TAB_LIST_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Root,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n orientation: context.orientation,\n dir: context.dir,\n loop,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"tablist\",\n \"aria-orientation\": context.orientation,\n ...listProps,\n ref: forwardedRef\n }\n )\n }\n );\n }\n);\nTabsList.displayName = TAB_LIST_NAME;\nvar TRIGGER_NAME = \"TabsTrigger\";\nvar TabsTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, disabled = false, ...triggerProps } = props;\n const context = useTabsContext(TRIGGER_NAME, __scopeTabs);\n const rovingFocusGroupScope = useRovingFocusGroupScope(__scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n return /* @__PURE__ */ jsx(\n RovingFocusGroup.Item,\n {\n asChild: true,\n ...rovingFocusGroupScope,\n focusable: !disabled,\n active: isSelected,\n children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"tab\",\n \"aria-selected\": isSelected,\n \"aria-controls\": contentId,\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n id: triggerId,\n ...triggerProps,\n ref: forwardedRef,\n onMouseDown: composeEventHandlers(props.onMouseDown, (event) => {\n if (!disabled && event.button === 0 && event.ctrlKey === false) {\n context.onValueChange(value);\n } else {\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(props.onKeyDown, (event) => {\n if ([\" \", \"Enter\"].includes(event.key)) context.onValueChange(value);\n }),\n onFocus: composeEventHandlers(props.onFocus, () => {\n const isAutomaticActivation = context.activationMode !== \"manual\";\n if (!isSelected && !disabled && isAutomaticActivation) {\n context.onValueChange(value);\n }\n })\n }\n )\n }\n );\n }\n);\nTabsTrigger.displayName = TRIGGER_NAME;\nvar CONTENT_NAME = \"TabsContent\";\nvar TabsContent = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeTabs, value, forceMount, children, ...contentProps } = props;\n const context = useTabsContext(CONTENT_NAME, __scopeTabs);\n const triggerId = makeTriggerId(context.baseId, value);\n const contentId = makeContentId(context.baseId, value);\n const isSelected = value === context.value;\n const isMountAnimationPreventedRef = React.useRef(isSelected);\n React.useEffect(() => {\n const rAF = requestAnimationFrame(() => isMountAnimationPreventedRef.current = false);\n return () => cancelAnimationFrame(rAF);\n }, []);\n return /* @__PURE__ */ jsx(Presence, { present: forceMount || isSelected, children: ({ present }) => /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-state\": isSelected ? \"active\" : \"inactive\",\n \"data-orientation\": context.orientation,\n role: \"tabpanel\",\n \"aria-labelledby\": triggerId,\n hidden: !present,\n id: contentId,\n tabIndex: 0,\n ...contentProps,\n ref: forwardedRef,\n style: {\n ...props.style,\n animationDuration: isMountAnimationPreventedRef.current ? \"0s\" : void 0\n },\n children: present && children\n }\n ) });\n }\n);\nTabsContent.displayName = CONTENT_NAME;\nfunction makeTriggerId(baseId, value) {\n return `${baseId}-trigger-${value}`;\n}\nfunction makeContentId(baseId, value) {\n return `${baseId}-content-${value}`;\n}\nvar Root2 = Tabs;\nvar List = TabsList;\nvar Trigger = TabsTrigger;\nvar Content = TabsContent;\nexport {\n Content,\n List,\n Root2 as Root,\n Tabs,\n TabsContent,\n TabsList,\n TabsTrigger,\n Trigger,\n createTabsScope\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as TabsPrimitive from '@radix-ui/react-tabs';\n\nimport { cn } from '@/lib/utils';\n\nconst Tabs = TabsPrimitive.Root;\n\nconst TabsList = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsList.displayName = TabsPrimitive.List.displayName;\n\nconst TabsTrigger = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsTrigger.displayName = TabsPrimitive.Trigger.displayName;\n\nconst TabsContent = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n));\nTabsContent.displayName = TabsPrimitive.Content.displayName;\n\nexport { Tabs, TabsList, TabsTrigger, TabsContent };\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/label.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Label\";\nvar Label = React.forwardRef((props, forwardedRef) => {\n return /* @__PURE__ */ jsx(\n Primitive.label,\n {\n ...props,\n ref: forwardedRef,\n onMouseDown: (event) => {\n const target = event.target;\n if (target.closest(\"button, input, select, textarea\")) return;\n props.onMouseDown?.(event);\n if (!event.defaultPrevented && event.detail > 1) event.preventDefault();\n }\n }\n );\n});\nLabel.displayName = NAME;\nvar Root = Label;\nexport {\n Label,\n Root\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as LabelPrimitive from '@radix-ui/react-label';\nimport { cva, type VariantProps } from 'class-variance-authority';\n\nimport { cn } from '@/lib/utils';\n\nconst labelVariants = cva(\n 'text-sm font-medium leading-none peer-disabled:cursor-not-allowed peer-disabled:opacity-70'\n);\n\nconst Label = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef & VariantProps\n>(({ className, ...props }, ref) => (\n \n));\nLabel.displayName = LabelPrimitive.Root.displayName;\n\nexport { Label };\n","// packages/react/use-previous/src/use-previous.tsx\nimport * as React from \"react\";\nfunction usePrevious(value) {\n const ref = React.useRef({ value, previous: value });\n return React.useMemo(() => {\n if (ref.current.value !== value) {\n ref.current.previous = ref.current.value;\n ref.current.value = value;\n }\n return ref.current.previous;\n }, [value]);\n}\nexport {\n usePrevious\n};\n//# sourceMappingURL=index.mjs.map\n","// packages/react/use-size/src/use-size.tsx\nimport * as React from \"react\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nfunction useSize(element) {\n const [size, setSize] = React.useState(void 0);\n useLayoutEffect(() => {\n if (element) {\n setSize({ width: element.offsetWidth, height: element.offsetHeight });\n const resizeObserver = new ResizeObserver((entries) => {\n if (!Array.isArray(entries)) {\n return;\n }\n if (!entries.length) {\n return;\n }\n const entry = entries[0];\n let width;\n let height;\n if (\"borderBoxSize\" in entry) {\n const borderSizeEntry = entry[\"borderBoxSize\"];\n const borderSize = Array.isArray(borderSizeEntry) ? borderSizeEntry[0] : borderSizeEntry;\n width = borderSize[\"inlineSize\"];\n height = borderSize[\"blockSize\"];\n } else {\n width = element.offsetWidth;\n height = element.offsetHeight;\n }\n setSize({ width, height });\n });\n resizeObserver.observe(element, { box: \"border-box\" });\n return () => resizeObserver.unobserve(element);\n } else {\n setSize(void 0);\n }\n }, [element]);\n return size;\n}\nexport {\n useSize\n};\n//# sourceMappingURL=index.mjs.map\n","\"use client\";\n\n// src/checkbox.tsx\nimport * as React from \"react\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { useSize } from \"@radix-ui/react-use-size\";\nimport { Presence } from \"@radix-ui/react-presence\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar CHECKBOX_NAME = \"Checkbox\";\nvar [createCheckboxContext, createCheckboxScope] = createContextScope(CHECKBOX_NAME);\nvar [CheckboxProviderImpl, useCheckboxContext] = createCheckboxContext(CHECKBOX_NAME);\nfunction CheckboxProvider(props) {\n const {\n __scopeCheckbox,\n checked: checkedProp,\n children,\n defaultChecked,\n disabled,\n form,\n name,\n onCheckedChange,\n required,\n value = \"on\",\n // @ts-expect-error\n internal_do_not_use_render\n } = props;\n const [checked, setChecked] = useControllableState({\n prop: checkedProp,\n defaultProp: defaultChecked ?? false,\n onChange: onCheckedChange,\n caller: CHECKBOX_NAME\n });\n const [control, setControl] = React.useState(null);\n const [bubbleInput, setBubbleInput] = React.useState(null);\n const hasConsumerStoppedPropagationRef = React.useRef(false);\n const isFormControl = control ? !!form || !!control.closest(\"form\") : (\n // We set this to true by default so that events bubble to forms without JS (SSR)\n true\n );\n const context = {\n checked,\n disabled,\n setChecked,\n control,\n setControl,\n name,\n form,\n value,\n hasConsumerStoppedPropagationRef,\n required,\n defaultChecked: isIndeterminate(defaultChecked) ? false : defaultChecked,\n isFormControl,\n bubbleInput,\n setBubbleInput\n };\n return /* @__PURE__ */ jsx(\n CheckboxProviderImpl,\n {\n scope: __scopeCheckbox,\n ...context,\n children: isFunction(internal_do_not_use_render) ? internal_do_not_use_render(context) : children\n }\n );\n}\nvar TRIGGER_NAME = \"CheckboxTrigger\";\nvar CheckboxTrigger = React.forwardRef(\n ({ __scopeCheckbox, onKeyDown, onClick, ...checkboxProps }, forwardedRef) => {\n const {\n control,\n value,\n disabled,\n checked,\n required,\n setControl,\n setChecked,\n hasConsumerStoppedPropagationRef,\n isFormControl,\n bubbleInput\n } = useCheckboxContext(TRIGGER_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setControl);\n const initialCheckedStateRef = React.useRef(checked);\n React.useEffect(() => {\n const form = control?.form;\n if (form) {\n const reset = () => setChecked(initialCheckedStateRef.current);\n form.addEventListener(\"reset\", reset);\n return () => form.removeEventListener(\"reset\", reset);\n }\n }, [control, setChecked]);\n return /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"checkbox\",\n \"aria-checked\": isIndeterminate(checked) ? \"mixed\" : checked,\n \"aria-required\": required,\n \"data-state\": getState(checked),\n \"data-disabled\": disabled ? \"\" : void 0,\n disabled,\n value,\n ...checkboxProps,\n ref: composedRefs,\n onKeyDown: composeEventHandlers(onKeyDown, (event) => {\n if (event.key === \"Enter\") event.preventDefault();\n }),\n onClick: composeEventHandlers(onClick, (event) => {\n setChecked((prevChecked) => isIndeterminate(prevChecked) ? true : !prevChecked);\n if (bubbleInput && isFormControl) {\n hasConsumerStoppedPropagationRef.current = event.isPropagationStopped();\n if (!hasConsumerStoppedPropagationRef.current) event.stopPropagation();\n }\n })\n }\n );\n }\n);\nCheckboxTrigger.displayName = TRIGGER_NAME;\nvar Checkbox = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeCheckbox,\n name,\n checked,\n defaultChecked,\n required,\n disabled,\n value,\n onCheckedChange,\n form,\n ...checkboxProps\n } = props;\n return /* @__PURE__ */ jsx(\n CheckboxProvider,\n {\n __scopeCheckbox,\n checked,\n defaultChecked,\n disabled,\n required,\n onCheckedChange,\n name,\n form,\n value,\n internal_do_not_use_render: ({ isFormControl }) => /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n CheckboxTrigger,\n {\n ...checkboxProps,\n ref: forwardedRef,\n __scopeCheckbox\n }\n ),\n isFormControl && /* @__PURE__ */ jsx(\n CheckboxBubbleInput,\n {\n __scopeCheckbox\n }\n )\n ] })\n }\n );\n }\n);\nCheckbox.displayName = CHECKBOX_NAME;\nvar INDICATOR_NAME = \"CheckboxIndicator\";\nvar CheckboxIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeCheckbox, forceMount, ...indicatorProps } = props;\n const context = useCheckboxContext(INDICATOR_NAME, __scopeCheckbox);\n return /* @__PURE__ */ jsx(\n Presence,\n {\n present: forceMount || isIndeterminate(context.checked) || context.checked === true,\n children: /* @__PURE__ */ jsx(\n Primitive.span,\n {\n \"data-state\": getState(context.checked),\n \"data-disabled\": context.disabled ? \"\" : void 0,\n ...indicatorProps,\n ref: forwardedRef,\n style: { pointerEvents: \"none\", ...props.style }\n }\n )\n }\n );\n }\n);\nCheckboxIndicator.displayName = INDICATOR_NAME;\nvar BUBBLE_INPUT_NAME = \"CheckboxBubbleInput\";\nvar CheckboxBubbleInput = React.forwardRef(\n ({ __scopeCheckbox, ...props }, forwardedRef) => {\n const {\n control,\n hasConsumerStoppedPropagationRef,\n checked,\n defaultChecked,\n required,\n disabled,\n name,\n value,\n form,\n bubbleInput,\n setBubbleInput\n } = useCheckboxContext(BUBBLE_INPUT_NAME, __scopeCheckbox);\n const composedRefs = useComposedRefs(forwardedRef, setBubbleInput);\n const prevChecked = usePrevious(checked);\n const controlSize = useSize(control);\n React.useEffect(() => {\n const input = bubbleInput;\n if (!input) return;\n const inputProto = window.HTMLInputElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n inputProto,\n \"checked\"\n );\n const setChecked = descriptor.set;\n const bubbles = !hasConsumerStoppedPropagationRef.current;\n if (prevChecked !== checked && setChecked) {\n const event = new Event(\"click\", { bubbles });\n input.indeterminate = isIndeterminate(checked);\n setChecked.call(input, isIndeterminate(checked) ? false : checked);\n input.dispatchEvent(event);\n }\n }, [bubbleInput, prevChecked, checked, hasConsumerStoppedPropagationRef]);\n const defaultCheckedRef = React.useRef(isIndeterminate(checked) ? false : checked);\n return /* @__PURE__ */ jsx(\n Primitive.input,\n {\n type: \"checkbox\",\n \"aria-hidden\": true,\n defaultChecked: defaultChecked ?? defaultCheckedRef.current,\n required,\n disabled,\n name,\n value,\n form,\n ...props,\n tabIndex: -1,\n ref: composedRefs,\n style: {\n ...props.style,\n ...controlSize,\n position: \"absolute\",\n pointerEvents: \"none\",\n opacity: 0,\n margin: 0,\n // We transform because the input is absolutely positioned but we have\n // rendered it **after** the button. This pulls it back to sit on top\n // of the button.\n transform: \"translateX(-100%)\"\n }\n }\n );\n }\n);\nCheckboxBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction isFunction(value) {\n return typeof value === \"function\";\n}\nfunction isIndeterminate(checked) {\n return checked === \"indeterminate\";\n}\nfunction getState(checked) {\n return isIndeterminate(checked) ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\";\n}\nexport {\n Checkbox,\n CheckboxIndicator,\n CheckboxIndicator as Indicator,\n Checkbox as Root,\n createCheckboxScope,\n CheckboxBubbleInput as unstable_BubbleInput,\n CheckboxBubbleInput as unstable_CheckboxBubbleInput,\n CheckboxProvider as unstable_CheckboxProvider,\n CheckboxTrigger as unstable_CheckboxTrigger,\n CheckboxProvider as unstable_Provider,\n CheckboxTrigger as unstable_Trigger\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as CheckboxPrimitive from '@radix-ui/react-checkbox';\nimport { Check } from 'lucide-react';\n\nimport { cn } from '@/lib/utils';\n\nconst Checkbox = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, ...props }, ref) => (\n \n \n \n \n \n));\nCheckbox.displayName = CheckboxPrimitive.Root.displayName;\n\nexport { Checkbox };\n","import { useState, useRef } from 'react';\nimport type { Contact, Conversation } from '../types';\nimport { getContactDisplayName } from '../utils/pubkey';\nimport {\n Dialog,\n DialogContent,\n DialogHeader,\n DialogTitle,\n DialogDescription,\n DialogFooter,\n} from './ui/dialog';\nimport { Tabs, TabsList, TabsTrigger, TabsContent } from './ui/tabs';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Checkbox } from './ui/checkbox';\nimport { Button } from './ui/button';\n\ntype Tab = 'existing' | 'new-contact' | 'new-room' | 'hashtag';\n\ninterface NewMessageModalProps {\n open: boolean;\n contacts: Contact[];\n undecryptedCount: number;\n onClose: () => void;\n onSelectConversation: (conversation: Conversation) => void;\n onCreateContact: (name: string, publicKey: string, tryHistorical: boolean) => Promise;\n onCreateChannel: (name: string, key: string, tryHistorical: boolean) => Promise;\n onCreateHashtagChannel: (name: string, tryHistorical: boolean) => Promise;\n}\n\nexport function NewMessageModal({\n open,\n contacts,\n undecryptedCount,\n onClose,\n onSelectConversation,\n onCreateContact,\n onCreateChannel,\n onCreateHashtagChannel,\n}: NewMessageModalProps) {\n const [tab, setTab] = useState('existing');\n const [name, setName] = useState('');\n const [contactKey, setContactKey] = useState('');\n const [roomKey, setRoomKey] = useState('');\n const [tryHistorical, setTryHistorical] = useState(false);\n const [permitCapitals, setPermitCapitals] = useState(false);\n const [error, setError] = useState('');\n const [loading, setLoading] = useState(false);\n const hashtagInputRef = useRef(null);\n\n const handleCreate = async () => {\n setError('');\n setLoading(true);\n\n try {\n if (tab === 'new-contact') {\n if (!name.trim() || !contactKey.trim()) {\n setError('Name and public key are required');\n return;\n }\n // handleCreateContact sets activeConversation with the backend-normalized key\n await onCreateContact(name.trim(), contactKey.trim(), tryHistorical);\n } else if (tab === 'new-room') {\n if (!name.trim() || !roomKey.trim()) {\n setError('Room name and key are required');\n return;\n }\n await onCreateChannel(name.trim(), roomKey.trim(), tryHistorical);\n } else if (tab === 'hashtag') {\n const channelName = name.trim();\n const validationError = validateHashtagName(channelName);\n if (validationError) {\n setError(validationError);\n return;\n }\n // Normalize to lowercase unless user explicitly permits capitals\n const normalizedName = permitCapitals ? channelName : channelName.toLowerCase();\n await onCreateHashtagChannel(`#${normalizedName}`, tryHistorical);\n }\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create');\n } finally {\n setLoading(false);\n }\n };\n\n const validateHashtagName = (channelName: string): string | null => {\n if (!channelName) {\n return 'Channel name is required';\n }\n if (!/^[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*$/.test(channelName)) {\n return 'Use letters, numbers, and single dashes (no leading/trailing dashes)';\n }\n return null;\n };\n\n const handleCreateAndAddAnother = async () => {\n setError('');\n const channelName = name.trim();\n const validationError = validateHashtagName(channelName);\n if (validationError) {\n setError(validationError);\n return;\n }\n\n setLoading(true);\n try {\n // Normalize to lowercase unless user explicitly permits capitals\n const normalizedName = permitCapitals ? channelName : channelName.toLowerCase();\n await onCreateHashtagChannel(`#${normalizedName}`, tryHistorical);\n setName('');\n hashtagInputRef.current?.focus();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to create');\n } finally {\n setLoading(false);\n }\n };\n\n const showHistoricalOption = tab !== 'existing' && undecryptedCount > 0;\n\n return (\n !isOpen && onClose()}>\n \n \n New Conversation\n \n {tab === 'existing' && 'Select an existing contact to start a conversation'}\n {tab === 'new-contact' && 'Add a new contact by entering their name and public key'}\n {tab === 'new-room' && 'Create a private room with a shared encryption key'}\n {tab === 'hashtag' && 'Join a public hashtag channel'}\n \n \n\n setTab(v as Tab)} className=\"w-full\">\n \n Existing\n Contact\n Room\n Hashtag\n \n\n \n
\n {contacts.length === 0 ? (\n
No contacts available
\n ) : (\n contacts.map((contact) => (\n {\n onSelectConversation({\n type: 'contact',\n id: contact.public_key,\n name: getContactDisplayName(contact.name, contact.public_key),\n });\n onClose();\n }}\n >\n {getContactDisplayName(contact.name, contact.public_key)}\n
\n ))\n )}\n
\n \n\n \n
\n \n setName(e.target.value)}\n placeholder=\"Contact name\"\n />\n
\n
\n \n setContactKey(e.target.value)}\n placeholder=\"64-character hex public key\"\n />\n
\n
\n\n \n
\n \n setName(e.target.value)}\n placeholder=\"Room name\"\n />\n
\n
\n \n
\n setRoomKey(e.target.value)}\n placeholder=\"Pre-shared key (hex)\"\n className=\"flex-1\"\n />\n {\n const bytes = new Uint8Array(16);\n crypto.getRandomValues(bytes);\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n setRoomKey(hex);\n }}\n title=\"Generate random key\"\n >\n 🎲\n \n
\n
\n
\n\n \n
\n \n
\n #\n setName(e.target.value)}\n placeholder=\"channel-name\"\n className=\"flex-1\"\n />\n
\n
\n
\n \n

\n Not recommended; most companions normalize to lowercase\n

\n
\n
\n \n\n {showHistoricalOption && (\n
\n
\n \n Try decrypting {undecryptedCount.toLocaleString()} stored packet\n {undecryptedCount !== 1 ? 's' : ''}\n \n setTryHistorical(checked === true)}\n />\n
\n {tryHistorical && (\n

\n Messages will stream in as they decrypt in the background\n

\n )}\n
\n )}\n\n {error &&
{error}
}\n\n \n \n {tab === 'hashtag' && (\n \n )}\n {tab !== 'existing' && (\n \n )}\n \n \n \n );\n}\n","// src/primitive.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NODES = [\n \"a\",\n \"button\",\n \"div\",\n \"form\",\n \"h2\",\n \"h3\",\n \"img\",\n \"input\",\n \"label\",\n \"li\",\n \"nav\",\n \"ol\",\n \"p\",\n \"select\",\n \"span\",\n \"svg\",\n \"ul\"\n];\nvar Primitive = NODES.reduce((primitive, node) => {\n const Slot = createSlot(`Primitive.${node}`);\n const Node = React.forwardRef((props, forwardedRef) => {\n const { asChild, ...primitiveProps } = props;\n const Comp = asChild ? Slot : node;\n if (typeof window !== \"undefined\") {\n window[Symbol.for(\"radix-ui\")] = true;\n }\n return /* @__PURE__ */ jsx(Comp, { ...primitiveProps, ref: forwardedRef });\n });\n Node.displayName = `Primitive.${node}`;\n return { ...primitive, [node]: Node };\n}, {});\nfunction dispatchDiscreteCustomEvent(target, event) {\n if (target) ReactDOM.flushSync(() => target.dispatchEvent(event));\n}\nvar Root = Primitive;\nexport {\n Primitive,\n Root,\n dispatchDiscreteCustomEvent\n};\n//# sourceMappingURL=index.mjs.map\n","// src/separator.tsx\nimport * as React from \"react\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { jsx } from \"react/jsx-runtime\";\nvar NAME = \"Separator\";\nvar DEFAULT_ORIENTATION = \"horizontal\";\nvar ORIENTATIONS = [\"horizontal\", \"vertical\"];\nvar Separator = React.forwardRef((props, forwardedRef) => {\n const { decorative, orientation: orientationProp = DEFAULT_ORIENTATION, ...domProps } = props;\n const orientation = isValidOrientation(orientationProp) ? orientationProp : DEFAULT_ORIENTATION;\n const ariaOrientation = orientation === \"vertical\" ? orientation : void 0;\n const semanticProps = decorative ? { role: \"none\" } : { \"aria-orientation\": ariaOrientation, role: \"separator\" };\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-orientation\": orientation,\n ...semanticProps,\n ...domProps,\n ref: forwardedRef\n }\n );\n});\nSeparator.displayName = NAME;\nfunction isValidOrientation(orientation) {\n return ORIENTATIONS.includes(orientation);\n}\nvar Root = Separator;\nexport {\n Root,\n Separator\n};\n//# sourceMappingURL=index.mjs.map\n","'use client';\n\nimport * as React from 'react';\nimport * as SeparatorPrimitive from '@radix-ui/react-separator';\n\nimport { cn } from '@/lib/utils';\n\nconst Separator = React.forwardRef<\n React.ElementRef,\n React.ComponentPropsWithoutRef\n>(({ className, orientation = 'horizontal', decorative = true, ...props }, ref) => (\n \n));\nSeparator.displayName = SeparatorPrimitive.Root.displayName;\n\nexport { Separator };\n","import { useState, useEffect, useMemo } from 'react';\nimport type {\n AppSettings,\n AppSettingsUpdate,\n HealthStatus,\n RadioConfig,\n RadioConfigUpdate,\n} from '../types';\nimport { Dialog, DialogContent, DialogHeader, DialogTitle, DialogDescription } from './ui/dialog';\nimport { Tabs, TabsContent, TabsList, TabsTrigger } from './ui/tabs';\nimport { Input } from './ui/input';\nimport { Label } from './ui/label';\nimport { Button } from './ui/button';\nimport { Separator } from './ui/separator';\nimport { toast } from './ui/sonner';\nimport { api } from '../api';\nimport { formatTime } from '../utils/messageParser';\n\n// Radio presets for common configurations\ninterface RadioPreset {\n name: string;\n freq: number;\n bw: number;\n sf: number;\n cr: number;\n}\n\nconst RADIO_PRESETS: RadioPreset[] = [\n { name: 'USA/Canada', freq: 910.525, bw: 62.5, sf: 7, cr: 5 },\n { name: 'Australia', freq: 915.8, bw: 250, sf: 10, cr: 5 },\n { name: 'Australia (narrow)', freq: 916.575, bw: 62.5, sf: 7, cr: 8 },\n { name: 'Australia SA, WA', freq: 923.125, bw: 62.5, sf: 8, cr: 8 },\n { name: 'Australia QLD', freq: 923.125, bw: 62.5, sf: 8, cr: 5 },\n { name: 'New Zealand', freq: 917.375, bw: 250, sf: 11, cr: 5 },\n { name: 'New Zealand (narrow)', freq: 917.375, bw: 62.5, sf: 7, cr: 5 },\n { name: 'EU/UK/Switzerland Long Range', freq: 869.525, bw: 250, sf: 11, cr: 5 },\n { name: 'EU/UK/Switzerland Medium Range', freq: 869.525, bw: 250, sf: 10, cr: 5 },\n { name: 'EU/UK/Switzerland Narrow', freq: 869.618, bw: 62.5, sf: 8, cr: 8 },\n { name: 'Czech Republic (Narrow)', freq: 869.432, bw: 62.5, sf: 7, cr: 5 },\n { name: 'EU 433MHz Long Range', freq: 433.65, bw: 250, sf: 11, cr: 5 },\n { name: 'Portugal 433MHz', freq: 433.375, bw: 62.5, sf: 9, cr: 6 },\n { name: 'Portugal 868MHz', freq: 869.618, bw: 62.5, sf: 7, cr: 6 },\n { name: 'Vietnam', freq: 920.25, bw: 250, sf: 11, cr: 5 },\n];\n\ninterface SettingsModalProps {\n open: boolean;\n config: RadioConfig | null;\n health: HealthStatus | null;\n appSettings: AppSettings | null;\n onClose: () => void;\n onSave: (update: RadioConfigUpdate) => Promise;\n onSaveAppSettings: (update: AppSettingsUpdate) => Promise;\n onSetPrivateKey: (key: string) => Promise;\n onReboot: () => Promise;\n onAdvertise: () => Promise;\n onHealthRefresh: () => Promise;\n onRefreshAppSettings: () => Promise;\n}\n\nexport function SettingsModal({\n open,\n config,\n health,\n appSettings,\n onClose,\n onSave,\n onSaveAppSettings,\n onSetPrivateKey,\n onReboot,\n onAdvertise,\n onHealthRefresh,\n onRefreshAppSettings,\n}: SettingsModalProps) {\n // Tab state\n type SettingsTab = 'radio' | 'identity' | 'serial' | 'database' | 'advertise';\n const [activeTab, setActiveTab] = useState('radio');\n\n // Radio config state\n const [name, setName] = useState('');\n const [lat, setLat] = useState('');\n const [lon, setLon] = useState('');\n const [txPower, setTxPower] = useState('');\n const [freq, setFreq] = useState('');\n const [bw, setBw] = useState('');\n const [sf, setSf] = useState('');\n const [cr, setCr] = useState('');\n const [privateKey, setPrivateKey] = useState('');\n const [maxRadioContacts, setMaxRadioContacts] = useState('');\n\n // Loading states\n const [loading, setLoading] = useState(false);\n const [rebooting, setRebooting] = useState(false);\n const [advertising, setAdvertising] = useState(false);\n const [gettingLocation, setGettingLocation] = useState(false);\n const [error, setError] = useState('');\n\n // Database maintenance state\n const [retentionDays, setRetentionDays] = useState('14');\n const [cleaning, setCleaning] = useState(false);\n const [autoDecryptOnAdvert, setAutoDecryptOnAdvert] = useState(false);\n\n useEffect(() => {\n if (config) {\n setName(config.name);\n setLat(String(config.lat));\n setLon(String(config.lon));\n setTxPower(String(config.tx_power));\n setFreq(String(config.radio.freq));\n setBw(String(config.radio.bw));\n setSf(String(config.radio.sf));\n setCr(String(config.radio.cr));\n }\n }, [config]);\n\n useEffect(() => {\n if (appSettings) {\n setMaxRadioContacts(String(appSettings.max_radio_contacts));\n setAutoDecryptOnAdvert(appSettings.auto_decrypt_dm_on_advert);\n }\n }, [appSettings]);\n\n // Refresh settings from server when modal opens\n // This ensures UI reflects actual server state (prevents stale UI after checkbox toggle without save)\n useEffect(() => {\n if (open) {\n onRefreshAppSettings();\n }\n }, [open, onRefreshAppSettings]);\n\n // Detect current preset from form values\n const currentPreset = useMemo(() => {\n const freqNum = parseFloat(freq);\n const bwNum = parseFloat(bw);\n const sfNum = parseInt(sf, 10);\n const crNum = parseInt(cr, 10);\n\n for (const preset of RADIO_PRESETS) {\n if (\n preset.freq === freqNum &&\n preset.bw === bwNum &&\n preset.sf === sfNum &&\n preset.cr === crNum\n ) {\n return preset.name;\n }\n }\n return 'custom';\n }, [freq, bw, sf, cr]);\n\n const handlePresetChange = (presetName: string) => {\n if (presetName === 'custom') return;\n const preset = RADIO_PRESETS.find((p) => p.name === presetName);\n if (preset) {\n setFreq(String(preset.freq));\n setBw(String(preset.bw));\n setSf(String(preset.sf));\n setCr(String(preset.cr));\n }\n };\n\n const handleGetLocation = () => {\n if (!navigator.geolocation) {\n toast.error('Geolocation not supported', {\n description: 'Your browser does not support geolocation',\n });\n return;\n }\n\n setGettingLocation(true);\n navigator.geolocation.getCurrentPosition(\n (position) => {\n setLat(position.coords.latitude.toFixed(6));\n setLon(position.coords.longitude.toFixed(6));\n setGettingLocation(false);\n toast.success('Location updated');\n },\n (err) => {\n setGettingLocation(false);\n toast.error('Failed to get location', {\n description: err.message,\n });\n },\n { enableHighAccuracy: true, timeout: 10000 }\n );\n };\n\n const handleSaveRadioConfig = async () => {\n setError('');\n setLoading(true);\n\n try {\n const update: RadioConfigUpdate = {\n lat: parseFloat(lat),\n lon: parseFloat(lon),\n tx_power: parseInt(txPower, 10),\n radio: {\n freq: parseFloat(freq),\n bw: parseFloat(bw),\n sf: parseInt(sf, 10),\n cr: parseInt(cr, 10),\n },\n };\n await onSave(update);\n toast.success('Radio config saved, rebooting...');\n setLoading(false);\n setRebooting(true);\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n setLoading(false);\n } finally {\n setRebooting(false);\n }\n };\n\n const handleSaveIdentity = async () => {\n setError('');\n setLoading(true);\n\n try {\n const update: RadioConfigUpdate = { name };\n await onSave(update);\n toast.success('Identity saved');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSaveSerial = async () => {\n setError('');\n setLoading(true);\n\n try {\n const newMaxRadioContacts = parseInt(maxRadioContacts, 10);\n if (!isNaN(newMaxRadioContacts) && newMaxRadioContacts !== appSettings?.max_radio_contacts) {\n await onSaveAppSettings({ max_radio_contacts: newMaxRadioContacts });\n }\n toast.success('Serial settings saved');\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to save');\n } finally {\n setLoading(false);\n }\n };\n\n const handleSetPrivateKey = async () => {\n if (!privateKey.trim()) {\n setError('Private key is required');\n return;\n }\n setError('');\n setLoading(true);\n\n try {\n await onSetPrivateKey(privateKey.trim());\n setPrivateKey('');\n toast.success('Private key set, rebooting...');\n setLoading(false);\n setRebooting(true);\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to set private key');\n setLoading(false);\n } finally {\n setRebooting(false);\n }\n };\n\n const handleReboot = async () => {\n if (\n !confirm('Are you sure you want to reboot the radio? The connection will drop temporarily.')\n ) {\n return;\n }\n setError('');\n setRebooting(true);\n\n try {\n await onReboot();\n onClose();\n } catch (err) {\n setError(err instanceof Error ? err.message : 'Failed to reboot radio');\n } finally {\n setRebooting(false);\n }\n };\n\n const handleAdvertise = async () => {\n setAdvertising(true);\n try {\n await onAdvertise();\n } finally {\n setAdvertising(false);\n }\n };\n\n const handleCleanup = async () => {\n const days = parseInt(retentionDays, 10);\n if (isNaN(days) || days < 1) {\n toast.error('Invalid retention days', {\n description: 'Retention days must be at least 1',\n });\n return;\n }\n\n setCleaning(true);\n\n try {\n const result = await api.runMaintenance(days);\n toast.success('Database cleanup complete', {\n description: `Deleted ${result.packets_deleted} old packet${result.packets_deleted === 1 ? '' : 's'}`,\n });\n await onHealthRefresh();\n } catch (err) {\n console.error('Failed to run maintenance:', err);\n toast.error('Database cleanup failed', {\n description: err instanceof Error ? err.message : 'Unknown error',\n });\n } finally {\n setCleaning(false);\n }\n };\n\n const handleSaveDatabaseSettings = async () => {\n setLoading(true);\n setError('');\n\n try {\n await onSaveAppSettings({ auto_decrypt_dm_on_advert: autoDecryptOnAdvert });\n toast.success('Database settings saved');\n } catch (err) {\n console.error('Failed to save database settings:', err);\n setError(err instanceof Error ? err.message : 'Failed to save');\n toast.error('Failed to save settings');\n } finally {\n setLoading(false);\n }\n };\n\n return (\n !isOpen && onClose()}>\n \n \n Radio & Settings\n \n {activeTab === 'radio' && 'Configure radio frequency, power, and location settings'}\n {activeTab === 'identity' && 'Manage radio name, public key, and private key'}\n {activeTab === 'serial' && 'View serial port connection and configure contact sync'}\n {activeTab === 'database' && 'View database statistics and clean up old packets'}\n {activeTab === 'advertise' && 'Send a flood advertisement to announce your presence'}\n \n \n\n {!config ? (\n
Loading configuration...
\n ) : (\n setActiveTab(v as SettingsTab)}\n className=\"w-full\"\n >\n \n Radio\n Identity\n Serial\n Database\n Advertise\n \n\n {/* Radio Config Tab */}\n \n
\n \n handlePresetChange(e.target.value)}\n className=\"w-full h-10 px-3 rounded-md border border-input bg-background text-sm ring-offset-background focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2\"\n >\n \n {RADIO_PRESETS.map((preset) => (\n \n ))}\n \n
\n\n
\n
\n \n setFreq(e.target.value)}\n />\n
\n
\n \n setBw(e.target.value)}\n />\n
\n
\n\n
\n
\n \n setSf(e.target.value)}\n />\n
\n
\n \n setCr(e.target.value)}\n />\n
\n
\n\n
\n
\n \n setTxPower(e.target.value)}\n />\n
\n
\n \n \n
\n
\n\n \n\n
\n
\n \n \n {gettingLocation ? 'Getting...' : '📍 Use My Location'}\n \n
\n
\n
\n \n setLat(e.target.value)}\n />\n
\n
\n \n setLon(e.target.value)}\n />\n
\n
\n
\n\n {error &&
{error}
}\n\n \n {loading || rebooting ? 'Saving & Rebooting...' : 'Save Radio Config & Reboot'}\n \n
\n\n {/* Identity Tab */}\n \n
\n \n \n
\n\n
\n \n setName(e.target.value)} />\n
\n\n \n\n \n\n
\n \n setPrivateKey(e.target.value)}\n placeholder=\"64-character hex private key\"\n />\n \n {loading || rebooting ? 'Setting & Rebooting...' : 'Set Private Key & Reboot'}\n \n
\n\n {error &&
{error}
}\n
\n\n {/* Serial Tab */}\n \n
\n \n {health?.serial_port ? (\n
\n
\n \n {health.serial_port}\n \n
\n ) : (\n
\n
\n Not connected\n
\n )}\n
\n\n \n\n
\n \n setMaxRadioContacts(e.target.value)}\n />\n

\n Recent non-repeater contacts loaded to radio for DM auto-ACK (1-1000)\n

\n
\n\n \n\n \n\n \n {rebooting ? 'Rebooting...' : 'Reboot Radio'}\n \n\n {error &&
{error}
}\n \n\n {/* Database Tab */}\n \n
\n
\n Database size\n {health?.database_size_mb ?? '?'} MB\n
\n\n {health?.oldest_undecrypted_timestamp ? (\n
\n Oldest undecrypted packet\n \n {formatTime(health.oldest_undecrypted_timestamp)}\n \n (\n {Math.floor(\n (Date.now() / 1000 - health.oldest_undecrypted_timestamp) / 86400\n )}{' '}\n days old)\n \n \n
\n ) : (\n
\n Oldest undecrypted packet\n None\n
\n )}\n
\n\n \n\n
\n \n

\n Delete undecrypted packets older than the specified days. This helps manage\n storage for packets that couldn't be decrypted (unknown channel keys).\n

\n
\n
\n \n setRetentionDays(e.target.value)}\n className=\"w-24\"\n />\n
\n \n
\n
\n\n \n\n
\n \n \n

\n When enabled, the server will automatically try to decrypt stored DM packets when\n a new contact sends an advertisement. This may cause brief delays on large packet\n backlogs.\n

\n
\n\n {error &&
{error}
}\n\n \n
\n\n {/* Advertise Tab */}\n \n
\n

\n Send a flood advertisement to announce your presence on the mesh network.\n

\n \n {advertising ? 'Sending...' : 'Send Advertisement'}\n \n {!health?.radio_connected && (\n

Radio not connected

\n )}\n
\n
\n \n )}\n \n
\n );\n}\n","\"use strict\";\n// Reference: https://github.com/meshcore-dev/MeshCore/blob/main/docs/packet_structure.md\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestType = exports.AdvertFlags = exports.DeviceRole = exports.PayloadVersion = exports.ControlSubType = exports.PayloadType = exports.RouteType = void 0;\nvar RouteType;\n(function (RouteType) {\n RouteType[RouteType[\"TransportFlood\"] = 0] = \"TransportFlood\";\n RouteType[RouteType[\"Flood\"] = 1] = \"Flood\";\n RouteType[RouteType[\"Direct\"] = 2] = \"Direct\";\n RouteType[RouteType[\"TransportDirect\"] = 3] = \"TransportDirect\";\n})(RouteType || (exports.RouteType = RouteType = {}));\nvar PayloadType;\n(function (PayloadType) {\n PayloadType[PayloadType[\"Request\"] = 0] = \"Request\";\n PayloadType[PayloadType[\"Response\"] = 1] = \"Response\";\n PayloadType[PayloadType[\"TextMessage\"] = 2] = \"TextMessage\";\n PayloadType[PayloadType[\"Ack\"] = 3] = \"Ack\";\n PayloadType[PayloadType[\"Advert\"] = 4] = \"Advert\";\n PayloadType[PayloadType[\"GroupText\"] = 5] = \"GroupText\";\n PayloadType[PayloadType[\"GroupData\"] = 6] = \"GroupData\";\n PayloadType[PayloadType[\"AnonRequest\"] = 7] = \"AnonRequest\";\n PayloadType[PayloadType[\"Path\"] = 8] = \"Path\";\n PayloadType[PayloadType[\"Trace\"] = 9] = \"Trace\";\n PayloadType[PayloadType[\"Multipart\"] = 10] = \"Multipart\";\n PayloadType[PayloadType[\"Control\"] = 11] = \"Control\";\n PayloadType[PayloadType[\"RawCustom\"] = 15] = \"RawCustom\";\n})(PayloadType || (exports.PayloadType = PayloadType = {}));\n// Control packet sub-types (upper 4 bits of first payload byte)\nvar ControlSubType;\n(function (ControlSubType) {\n ControlSubType[ControlSubType[\"NodeDiscoverReq\"] = 128] = \"NodeDiscoverReq\";\n ControlSubType[ControlSubType[\"NodeDiscoverResp\"] = 144] = \"NodeDiscoverResp\";\n})(ControlSubType || (exports.ControlSubType = ControlSubType = {}));\nvar PayloadVersion;\n(function (PayloadVersion) {\n PayloadVersion[PayloadVersion[\"Version1\"] = 0] = \"Version1\";\n PayloadVersion[PayloadVersion[\"Version2\"] = 1] = \"Version2\";\n PayloadVersion[PayloadVersion[\"Version3\"] = 2] = \"Version3\";\n PayloadVersion[PayloadVersion[\"Version4\"] = 3] = \"Version4\";\n})(PayloadVersion || (exports.PayloadVersion = PayloadVersion = {}));\nvar DeviceRole;\n(function (DeviceRole) {\n DeviceRole[DeviceRole[\"Unknown\"] = 0] = \"Unknown\";\n DeviceRole[DeviceRole[\"ChatNode\"] = 1] = \"ChatNode\";\n DeviceRole[DeviceRole[\"Repeater\"] = 2] = \"Repeater\";\n DeviceRole[DeviceRole[\"RoomServer\"] = 3] = \"RoomServer\";\n DeviceRole[DeviceRole[\"Sensor\"] = 4] = \"Sensor\";\n})(DeviceRole || (exports.DeviceRole = DeviceRole = {}));\nvar AdvertFlags;\n(function (AdvertFlags) {\n AdvertFlags[AdvertFlags[\"HasLocation\"] = 16] = \"HasLocation\";\n AdvertFlags[AdvertFlags[\"HasFeature1\"] = 32] = \"HasFeature1\";\n AdvertFlags[AdvertFlags[\"HasFeature2\"] = 64] = \"HasFeature2\";\n AdvertFlags[AdvertFlags[\"HasName\"] = 128] = \"HasName\";\n})(AdvertFlags || (exports.AdvertFlags = AdvertFlags = {}));\nvar RequestType;\n(function (RequestType) {\n RequestType[RequestType[\"GetStats\"] = 1] = \"GetStats\";\n RequestType[RequestType[\"Keepalive\"] = 2] = \"Keepalive\";\n RequestType[RequestType[\"GetTelemetryData\"] = 3] = \"GetTelemetryData\";\n RequestType[RequestType[\"GetMinMaxAvgData\"] = 4] = \"GetMinMaxAvgData\";\n RequestType[RequestType[\"GetAccessList\"] = 5] = \"GetAccessList\";\n})(RequestType || (exports.RequestType = RequestType = {}));\n//# sourceMappingURL=enums.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.byteToHex = byteToHex;\nexports.bytesToHex = bytesToHex;\nexports.numberToHex = numberToHex;\nexports.hexToBytes = hexToBytes;\n/**\n * Convert a single byte to uppercase hex string\n */\nfunction byteToHex(byte) {\n return byte.toString(16).padStart(2, '0').toUpperCase();\n}\n/**\n * Convert a Uint8Array to uppercase hex string\n */\nfunction bytesToHex(bytes) {\n return Array.from(bytes).map(byteToHex).join('');\n}\n/**\n * Convert a number to uppercase hex string with specified padding\n */\nfunction numberToHex(num, padLength = 8) {\n return (num >>> 0).toString(16).padStart(padLength, '0').toUpperCase();\n}\n/**\n * Convert hex string to Uint8Array\n */\nfunction hexToBytes(hex) {\n // Remove any whitespace and convert to uppercase\n const cleanHex = hex.replace(/\\s/g, '').toUpperCase();\n // Validate hex string\n if (!/^[0-9A-F]*$/.test(cleanHex)) {\n throw new Error(`Invalid hex string: invalid characters at position 0`);\n }\n if (cleanHex.length % 2 !== 0) {\n throw new Error('Invalid hex string: odd length');\n }\n const bytes = new Uint8Array(cleanHex.length / 2);\n for (let i = 0; i < cleanHex.length; i += 2) {\n bytes[i / 2] = parseInt(cleanHex.substr(i, 2), 16);\n }\n return bytes;\n}\n//# sourceMappingURL=hex.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.getRouteTypeName = getRouteTypeName;\nexports.getPayloadTypeName = getPayloadTypeName;\nexports.getPayloadVersionName = getPayloadVersionName;\nexports.getDeviceRoleName = getDeviceRoleName;\nexports.getRequestTypeName = getRequestTypeName;\nexports.getControlSubTypeName = getControlSubTypeName;\nconst enums_1 = require(\"../types/enums\");\n/**\n * Get human-readable name for RouteType enum value\n */\nfunction getRouteTypeName(routeType) {\n switch (routeType) {\n case enums_1.RouteType.Flood: return 'Flood';\n case enums_1.RouteType.Direct: return 'Direct';\n case enums_1.RouteType.TransportFlood: return 'TransportFlood';\n case enums_1.RouteType.TransportDirect: return 'TransportDirect';\n default: return `Unknown (${routeType})`;\n }\n}\n/**\n * Get human-readable name for PayloadType enum value\n */\nfunction getPayloadTypeName(payloadType) {\n switch (payloadType) {\n case enums_1.PayloadType.RawCustom: return 'RawCustom';\n case enums_1.PayloadType.Trace: return 'Trace';\n case enums_1.PayloadType.Advert: return 'Advert';\n case enums_1.PayloadType.GroupText: return 'GroupText';\n case enums_1.PayloadType.GroupData: return 'GroupData';\n case enums_1.PayloadType.Request: return 'Request';\n case enums_1.PayloadType.Response: return 'Response';\n case enums_1.PayloadType.TextMessage: return 'TextMessage';\n case enums_1.PayloadType.AnonRequest: return 'AnonRequest';\n case enums_1.PayloadType.Ack: return 'Ack';\n case enums_1.PayloadType.Path: return 'Path';\n case enums_1.PayloadType.Multipart: return 'Multipart';\n case enums_1.PayloadType.Control: return 'Control';\n default: return `Unknown (0x${payloadType.toString(16)})`;\n }\n}\n/**\n * Get human-readable name for PayloadVersion enum value\n */\nfunction getPayloadVersionName(version) {\n switch (version) {\n case enums_1.PayloadVersion.Version1: return 'Version 1';\n case enums_1.PayloadVersion.Version2: return 'Version 2';\n case enums_1.PayloadVersion.Version3: return 'Version 3';\n case enums_1.PayloadVersion.Version4: return 'Version 4';\n default: return `Unknown (${version})`;\n }\n}\n/**\n * Get human-readable name for DeviceRole enum value\n */\nfunction getDeviceRoleName(role) {\n switch (role) {\n case enums_1.DeviceRole.Unknown: return 'Unknown';\n case enums_1.DeviceRole.ChatNode: return 'Chat Node';\n case enums_1.DeviceRole.Repeater: return 'Repeater';\n case enums_1.DeviceRole.RoomServer: return 'Room Server';\n case enums_1.DeviceRole.Sensor: return 'Sensor';\n default: return `Unknown (${role})`;\n }\n}\n/**\n * Get human-readable name for RequestType enum value\n */\nfunction getRequestTypeName(requestType) {\n switch (requestType) {\n case enums_1.RequestType.GetStats: return 'Get Stats';\n case enums_1.RequestType.Keepalive: return 'Keepalive (deprecated)';\n case enums_1.RequestType.GetTelemetryData: return 'Get Telemetry Data';\n case enums_1.RequestType.GetMinMaxAvgData: return 'Get Min/Max/Avg Data';\n case enums_1.RequestType.GetAccessList: return 'Get Access List';\n default: return `Unknown (${requestType})`;\n }\n}\n/**\n * Get human-readable name for ControlSubType enum value\n */\nfunction getControlSubTypeName(subType) {\n switch (subType) {\n case enums_1.ControlSubType.NodeDiscoverReq: return 'Node Discover Request';\n case enums_1.ControlSubType.NodeDiscoverResp: return 'Node Discover Response';\n default: return `Unknown (0x${subType.toString(16)})`;\n }\n}\n//# sourceMappingURL=enum-names.js.map","export default {}",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory();\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory();\n\t}\n}(this, function () {\n\n\t/*globals window, global, require*/\n\n\t/**\n\t * CryptoJS core components.\n\t */\n\tvar CryptoJS = CryptoJS || (function (Math, undefined) {\n\n\t var crypto;\n\n\t // Native crypto from window (Browser)\n\t if (typeof window !== 'undefined' && window.crypto) {\n\t crypto = window.crypto;\n\t }\n\n\t // Native crypto in web worker (Browser)\n\t if (typeof self !== 'undefined' && self.crypto) {\n\t crypto = self.crypto;\n\t }\n\n\t // Native crypto from worker\n\t if (typeof globalThis !== 'undefined' && globalThis.crypto) {\n\t crypto = globalThis.crypto;\n\t }\n\n\t // Native (experimental IE 11) crypto from window (Browser)\n\t if (!crypto && typeof window !== 'undefined' && window.msCrypto) {\n\t crypto = window.msCrypto;\n\t }\n\n\t // Native crypto from global (NodeJS)\n\t if (!crypto && typeof global !== 'undefined' && global.crypto) {\n\t crypto = global.crypto;\n\t }\n\n\t // Native crypto import via require (NodeJS)\n\t if (!crypto && typeof require === 'function') {\n\t try {\n\t crypto = require('crypto');\n\t } catch (err) {}\n\t }\n\n\t /*\n\t * Cryptographically secure pseudorandom number generator\n\t *\n\t * As Math.random() is cryptographically not safe to use\n\t */\n\t var cryptoSecureRandomInt = function () {\n\t if (crypto) {\n\t // Use getRandomValues method (Browser)\n\t if (typeof crypto.getRandomValues === 'function') {\n\t try {\n\t return crypto.getRandomValues(new Uint32Array(1))[0];\n\t } catch (err) {}\n\t }\n\n\t // Use randomBytes method (NodeJS)\n\t if (typeof crypto.randomBytes === 'function') {\n\t try {\n\t return crypto.randomBytes(4).readInt32LE();\n\t } catch (err) {}\n\t }\n\t }\n\n\t throw new Error('Native crypto module could not be used to get secure random number.');\n\t };\n\n\t /*\n\t * Local polyfill of Object.create\n\n\t */\n\t var create = Object.create || (function () {\n\t function F() {}\n\n\t return function (obj) {\n\t var subtype;\n\n\t F.prototype = obj;\n\n\t subtype = new F();\n\n\t F.prototype = null;\n\n\t return subtype;\n\t };\n\t }());\n\n\t /**\n\t * CryptoJS namespace.\n\t */\n\t var C = {};\n\n\t /**\n\t * Library namespace.\n\t */\n\t var C_lib = C.lib = {};\n\n\t /**\n\t * Base object for prototypal inheritance.\n\t */\n\t var Base = C_lib.Base = (function () {\n\n\n\t return {\n\t /**\n\t * Creates a new object that inherits from this object.\n\t *\n\t * @param {Object} overrides Properties to copy into the new object.\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * field: 'value',\n\t *\n\t * method: function () {\n\t * }\n\t * });\n\t */\n\t extend: function (overrides) {\n\t // Spawn\n\t var subtype = create(this);\n\n\t // Augment\n\t if (overrides) {\n\t subtype.mixIn(overrides);\n\t }\n\n\t // Create default initializer\n\t if (!subtype.hasOwnProperty('init') || this.init === subtype.init) {\n\t subtype.init = function () {\n\t subtype.$super.init.apply(this, arguments);\n\t };\n\t }\n\n\t // Initializer's prototype is the subtype object\n\t subtype.init.prototype = subtype;\n\n\t // Reference supertype\n\t subtype.$super = this;\n\n\t return subtype;\n\t },\n\n\t /**\n\t * Extends this object and runs the init method.\n\t * Arguments to create() will be passed to init().\n\t *\n\t * @return {Object} The new object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var instance = MyType.create();\n\t */\n\t create: function () {\n\t var instance = this.extend();\n\t instance.init.apply(instance, arguments);\n\n\t return instance;\n\t },\n\n\t /**\n\t * Initializes a newly created object.\n\t * Override this method to add some logic when your objects are created.\n\t *\n\t * @example\n\t *\n\t * var MyType = CryptoJS.lib.Base.extend({\n\t * init: function () {\n\t * // ...\n\t * }\n\t * });\n\t */\n\t init: function () {\n\t },\n\n\t /**\n\t * Copies properties into this object.\n\t *\n\t * @param {Object} properties The properties to mix in.\n\t *\n\t * @example\n\t *\n\t * MyType.mixIn({\n\t * field: 'value'\n\t * });\n\t */\n\t mixIn: function (properties) {\n\t for (var propertyName in properties) {\n\t if (properties.hasOwnProperty(propertyName)) {\n\t this[propertyName] = properties[propertyName];\n\t }\n\t }\n\n\t // IE won't copy toString using the loop above\n\t if (properties.hasOwnProperty('toString')) {\n\t this.toString = properties.toString;\n\t }\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = instance.clone();\n\t */\n\t clone: function () {\n\t return this.init.prototype.extend(this);\n\t }\n\t };\n\t }());\n\n\t /**\n\t * An array of 32-bit words.\n\t *\n\t * @property {Array} words The array of 32-bit words.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var WordArray = C_lib.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of 32-bit words.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.create();\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607]);\n\t * var wordArray = CryptoJS.lib.WordArray.create([0x00010203, 0x04050607], 6);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 4;\n\t }\n\t },\n\n\t /**\n\t * Converts this word array to a string.\n\t *\n\t * @param {Encoder} encoder (Optional) The encoding strategy to use. Default: CryptoJS.enc.Hex\n\t *\n\t * @return {string} The stringified word array.\n\t *\n\t * @example\n\t *\n\t * var string = wordArray + '';\n\t * var string = wordArray.toString();\n\t * var string = wordArray.toString(CryptoJS.enc.Utf8);\n\t */\n\t toString: function (encoder) {\n\t return (encoder || Hex).stringify(this);\n\t },\n\n\t /**\n\t * Concatenates a word array to this word array.\n\t *\n\t * @param {WordArray} wordArray The word array to append.\n\t *\n\t * @return {WordArray} This word array.\n\t *\n\t * @example\n\t *\n\t * wordArray1.concat(wordArray2);\n\t */\n\t concat: function (wordArray) {\n\t // Shortcuts\n\t var thisWords = this.words;\n\t var thatWords = wordArray.words;\n\t var thisSigBytes = this.sigBytes;\n\t var thatSigBytes = wordArray.sigBytes;\n\n\t // Clamp excess bits\n\t this.clamp();\n\n\t // Concat\n\t if (thisSigBytes % 4) {\n\t // Copy one byte at a time\n\t for (var i = 0; i < thatSigBytes; i++) {\n\t var thatByte = (thatWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t thisWords[(thisSigBytes + i) >>> 2] |= thatByte << (24 - ((thisSigBytes + i) % 4) * 8);\n\t }\n\t } else {\n\t // Copy one word at a time\n\t for (var j = 0; j < thatSigBytes; j += 4) {\n\t thisWords[(thisSigBytes + j) >>> 2] = thatWords[j >>> 2];\n\t }\n\t }\n\t this.sigBytes += thatSigBytes;\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Removes insignificant bits.\n\t *\n\t * @example\n\t *\n\t * wordArray.clamp();\n\t */\n\t clamp: function () {\n\t // Shortcuts\n\t var words = this.words;\n\t var sigBytes = this.sigBytes;\n\n\t // Clamp\n\t words[sigBytes >>> 2] &= 0xffffffff << (32 - (sigBytes % 4) * 8);\n\t words.length = Math.ceil(sigBytes / 4);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = wordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone.words = this.words.slice(0);\n\n\t return clone;\n\t },\n\n\t /**\n\t * Creates a word array filled with random bytes.\n\t *\n\t * @param {number} nBytes The number of random bytes to generate.\n\t *\n\t * @return {WordArray} The random word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.lib.WordArray.random(16);\n\t */\n\t random: function (nBytes) {\n\t var words = [];\n\n\t for (var i = 0; i < nBytes; i += 4) {\n\t words.push(cryptoSecureRandomInt());\n\t }\n\n\t return new WordArray.init(words, nBytes);\n\t }\n\t });\n\n\t /**\n\t * Encoder namespace.\n\t */\n\t var C_enc = C.enc = {};\n\n\t /**\n\t * Hex encoding strategy.\n\t */\n\t var Hex = C_enc.Hex = {\n\t /**\n\t * Converts a word array to a hex string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The hex string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.enc.Hex.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var hexChars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t hexChars.push((bite >>> 4).toString(16));\n\t hexChars.push((bite & 0x0f).toString(16));\n\t }\n\n\t return hexChars.join('');\n\t },\n\n\t /**\n\t * Converts a hex string to a word array.\n\t *\n\t * @param {string} hexStr The hex string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Hex.parse(hexString);\n\t */\n\t parse: function (hexStr) {\n\t // Shortcut\n\t var hexStrLength = hexStr.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < hexStrLength; i += 2) {\n\t words[i >>> 3] |= parseInt(hexStr.substr(i, 2), 16) << (24 - (i % 8) * 4);\n\t }\n\n\t return new WordArray.init(words, hexStrLength / 2);\n\t }\n\t };\n\n\t /**\n\t * Latin1 encoding strategy.\n\t */\n\t var Latin1 = C_enc.Latin1 = {\n\t /**\n\t * Converts a word array to a Latin1 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Latin1 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var latin1String = CryptoJS.enc.Latin1.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var latin1Chars = [];\n\t for (var i = 0; i < sigBytes; i++) {\n\t var bite = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t latin1Chars.push(String.fromCharCode(bite));\n\t }\n\n\t return latin1Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Latin1 string to a word array.\n\t *\n\t * @param {string} latin1Str The Latin1 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Latin1.parse(latin1String);\n\t */\n\t parse: function (latin1Str) {\n\t // Shortcut\n\t var latin1StrLength = latin1Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < latin1StrLength; i++) {\n\t words[i >>> 2] |= (latin1Str.charCodeAt(i) & 0xff) << (24 - (i % 4) * 8);\n\t }\n\n\t return new WordArray.init(words, latin1StrLength);\n\t }\n\t };\n\n\t /**\n\t * UTF-8 encoding strategy.\n\t */\n\t var Utf8 = C_enc.Utf8 = {\n\t /**\n\t * Converts a word array to a UTF-8 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-8 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf8String = CryptoJS.enc.Utf8.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t try {\n\t return decodeURIComponent(escape(Latin1.stringify(wordArray)));\n\t } catch (e) {\n\t throw new Error('Malformed UTF-8 data');\n\t }\n\t },\n\n\t /**\n\t * Converts a UTF-8 string to a word array.\n\t *\n\t * @param {string} utf8Str The UTF-8 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf8.parse(utf8String);\n\t */\n\t parse: function (utf8Str) {\n\t return Latin1.parse(unescape(encodeURIComponent(utf8Str)));\n\t }\n\t };\n\n\t /**\n\t * Abstract buffered block algorithm template.\n\t *\n\t * The property blockSize must be implemented in a concrete subtype.\n\t *\n\t * @property {number} _minBufferSize The number of blocks that should be kept unprocessed in the buffer. Default: 0\n\t */\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm = Base.extend({\n\t /**\n\t * Resets this block algorithm's data buffer to its initial state.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm.reset();\n\t */\n\t reset: function () {\n\t // Initial values\n\t this._data = new WordArray.init();\n\t this._nDataBytes = 0;\n\t },\n\n\t /**\n\t * Adds new data to this block algorithm's buffer.\n\t *\n\t * @param {WordArray|string} data The data to append. Strings are converted to a WordArray using UTF-8.\n\t *\n\t * @example\n\t *\n\t * bufferedBlockAlgorithm._append('data');\n\t * bufferedBlockAlgorithm._append(wordArray);\n\t */\n\t _append: function (data) {\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof data == 'string') {\n\t data = Utf8.parse(data);\n\t }\n\n\t // Append\n\t this._data.concat(data);\n\t this._nDataBytes += data.sigBytes;\n\t },\n\n\t /**\n\t * Processes available data blocks.\n\t *\n\t * This method invokes _doProcessBlock(offset), which must be implemented by a concrete subtype.\n\t *\n\t * @param {boolean} doFlush Whether all blocks and partial blocks should be processed.\n\t *\n\t * @return {WordArray} The processed data.\n\t *\n\t * @example\n\t *\n\t * var processedData = bufferedBlockAlgorithm._process();\n\t * var processedData = bufferedBlockAlgorithm._process(!!'flush');\n\t */\n\t _process: function (doFlush) {\n\t var processedWords;\n\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var dataSigBytes = data.sigBytes;\n\t var blockSize = this.blockSize;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count blocks ready\n\t var nBlocksReady = dataSigBytes / blockSizeBytes;\n\t if (doFlush) {\n\t // Round up to include partial blocks\n\t nBlocksReady = Math.ceil(nBlocksReady);\n\t } else {\n\t // Round down to include only full blocks,\n\t // less the number of blocks that must remain in the buffer\n\t nBlocksReady = Math.max((nBlocksReady | 0) - this._minBufferSize, 0);\n\t }\n\n\t // Count words ready\n\t var nWordsReady = nBlocksReady * blockSize;\n\n\t // Count bytes ready\n\t var nBytesReady = Math.min(nWordsReady * 4, dataSigBytes);\n\n\t // Process blocks\n\t if (nWordsReady) {\n\t for (var offset = 0; offset < nWordsReady; offset += blockSize) {\n\t // Perform concrete-algorithm logic\n\t this._doProcessBlock(dataWords, offset);\n\t }\n\n\t // Remove processed words\n\t processedWords = dataWords.splice(0, nWordsReady);\n\t data.sigBytes -= nBytesReady;\n\t }\n\n\t // Return processed words\n\t return new WordArray.init(processedWords, nBytesReady);\n\t },\n\n\t /**\n\t * Creates a copy of this object.\n\t *\n\t * @return {Object} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = bufferedBlockAlgorithm.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\t clone._data = this._data.clone();\n\n\t return clone;\n\t },\n\n\t _minBufferSize: 0\n\t });\n\n\t /**\n\t * Abstract hasher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this hasher operates on. Default: 16 (512 bits)\n\t */\n\t var Hasher = C_lib.Hasher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Initializes a newly created hasher.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for this hash computation.\n\t *\n\t * @example\n\t *\n\t * var hasher = CryptoJS.algo.SHA256.create();\n\t */\n\t init: function (cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this hasher to its initial state.\n\t *\n\t * @example\n\t *\n\t * hasher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-hasher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Updates this hasher with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {Hasher} This hasher.\n\t *\n\t * @example\n\t *\n\t * hasher.update('message');\n\t * hasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t // Append\n\t this._append(messageUpdate);\n\n\t // Update the hash\n\t this._process();\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the hash computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @example\n\t *\n\t * var hash = hasher.finalize();\n\t * var hash = hasher.finalize('message');\n\t * var hash = hasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Final message update\n\t if (messageUpdate) {\n\t this._append(messageUpdate);\n\t }\n\n\t // Perform concrete-hasher logic\n\t var hash = this._doFinalize();\n\n\t return hash;\n\t },\n\n\t blockSize: 512/32,\n\n\t /**\n\t * Creates a shortcut function to a hasher's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to create a helper for.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var SHA256 = CryptoJS.lib.Hasher._createHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHelper: function (hasher) {\n\t return function (message, cfg) {\n\t return new hasher.init(cfg).finalize(message);\n\t };\n\t },\n\n\t /**\n\t * Creates a shortcut function to the HMAC's object interface.\n\t *\n\t * @param {Hasher} hasher The hasher to use in this HMAC helper.\n\t *\n\t * @return {Function} The shortcut function.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var HmacSHA256 = CryptoJS.lib.Hasher._createHmacHelper(CryptoJS.algo.SHA256);\n\t */\n\t _createHmacHelper: function (hasher) {\n\t return function (message, key) {\n\t return new C_algo.HMAC.init(hasher, key).finalize(message);\n\t };\n\t }\n\t });\n\n\t /**\n\t * Algorithm namespace.\n\t */\n\t var C_algo = C.algo = {};\n\n\t return C;\n\t}(Math));\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var X32WordArray = C_lib.WordArray;\n\n\t /**\n\t * x64 namespace.\n\t */\n\t var C_x64 = C.x64 = {};\n\n\t /**\n\t * A 64-bit word.\n\t */\n\t var X64Word = C_x64.Word = Base.extend({\n\t /**\n\t * Initializes a newly created 64-bit word.\n\t *\n\t * @param {number} high The high 32 bits.\n\t * @param {number} low The low 32 bits.\n\t *\n\t * @example\n\t *\n\t * var x64Word = CryptoJS.x64.Word.create(0x00010203, 0x04050607);\n\t */\n\t init: function (high, low) {\n\t this.high = high;\n\t this.low = low;\n\t }\n\n\t /**\n\t * Bitwise NOTs this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after negating.\n\t *\n\t * @example\n\t *\n\t * var negated = x64Word.not();\n\t */\n\t // not: function () {\n\t // var high = ~this.high;\n\t // var low = ~this.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ANDs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to AND with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ANDing.\n\t *\n\t * @example\n\t *\n\t * var anded = x64Word.and(anotherX64Word);\n\t */\n\t // and: function (word) {\n\t // var high = this.high & word.high;\n\t // var low = this.low & word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise ORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to OR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after ORing.\n\t *\n\t * @example\n\t *\n\t * var ored = x64Word.or(anotherX64Word);\n\t */\n\t // or: function (word) {\n\t // var high = this.high | word.high;\n\t // var low = this.low | word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Bitwise XORs this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to XOR with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after XORing.\n\t *\n\t * @example\n\t *\n\t * var xored = x64Word.xor(anotherX64Word);\n\t */\n\t // xor: function (word) {\n\t // var high = this.high ^ word.high;\n\t // var low = this.low ^ word.low;\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftL(25);\n\t */\n\t // shiftL: function (n) {\n\t // if (n < 32) {\n\t // var high = (this.high << n) | (this.low >>> (32 - n));\n\t // var low = this.low << n;\n\t // } else {\n\t // var high = this.low << (n - 32);\n\t // var low = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Shifts this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to shift.\n\t *\n\t * @return {X64Word} A new x64-Word object after shifting.\n\t *\n\t * @example\n\t *\n\t * var shifted = x64Word.shiftR(7);\n\t */\n\t // shiftR: function (n) {\n\t // if (n < 32) {\n\t // var low = (this.low >>> n) | (this.high << (32 - n));\n\t // var high = this.high >>> n;\n\t // } else {\n\t // var low = this.high >>> (n - 32);\n\t // var high = 0;\n\t // }\n\n\t // return X64Word.create(high, low);\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the left.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotL(25);\n\t */\n\t // rotL: function (n) {\n\t // return this.shiftL(n).or(this.shiftR(64 - n));\n\t // },\n\n\t /**\n\t * Rotates this word n bits to the right.\n\t *\n\t * @param {number} n The number of bits to rotate.\n\t *\n\t * @return {X64Word} A new x64-Word object after rotating.\n\t *\n\t * @example\n\t *\n\t * var rotated = x64Word.rotR(7);\n\t */\n\t // rotR: function (n) {\n\t // return this.shiftR(n).or(this.shiftL(64 - n));\n\t // },\n\n\t /**\n\t * Adds this word with the passed word.\n\t *\n\t * @param {X64Word} word The x64-Word to add with this word.\n\t *\n\t * @return {X64Word} A new x64-Word object after adding.\n\t *\n\t * @example\n\t *\n\t * var added = x64Word.add(anotherX64Word);\n\t */\n\t // add: function (word) {\n\t // var low = (this.low + word.low) | 0;\n\t // var carry = (low >>> 0) < (this.low >>> 0) ? 1 : 0;\n\t // var high = (this.high + word.high + carry) | 0;\n\n\t // return X64Word.create(high, low);\n\t // }\n\t });\n\n\t /**\n\t * An array of 64-bit words.\n\t *\n\t * @property {Array} words The array of CryptoJS.x64.Word objects.\n\t * @property {number} sigBytes The number of significant bytes in this word array.\n\t */\n\t var X64WordArray = C_x64.WordArray = Base.extend({\n\t /**\n\t * Initializes a newly created word array.\n\t *\n\t * @param {Array} words (Optional) An array of CryptoJS.x64.Word objects.\n\t * @param {number} sigBytes (Optional) The number of significant bytes in the words.\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create();\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ]);\n\t *\n\t * var wordArray = CryptoJS.x64.WordArray.create([\n\t * CryptoJS.x64.Word.create(0x00010203, 0x04050607),\n\t * CryptoJS.x64.Word.create(0x18191a1b, 0x1c1d1e1f)\n\t * ], 10);\n\t */\n\t init: function (words, sigBytes) {\n\t words = this.words = words || [];\n\n\t if (sigBytes != undefined) {\n\t this.sigBytes = sigBytes;\n\t } else {\n\t this.sigBytes = words.length * 8;\n\t }\n\t },\n\n\t /**\n\t * Converts this 64-bit word array to a 32-bit word array.\n\t *\n\t * @return {CryptoJS.lib.WordArray} This word array's data as a 32-bit word array.\n\t *\n\t * @example\n\t *\n\t * var x32WordArray = x64WordArray.toX32();\n\t */\n\t toX32: function () {\n\t // Shortcuts\n\t var x64Words = this.words;\n\t var x64WordsLength = x64Words.length;\n\n\t // Convert\n\t var x32Words = [];\n\t for (var i = 0; i < x64WordsLength; i++) {\n\t var x64Word = x64Words[i];\n\t x32Words.push(x64Word.high);\n\t x32Words.push(x64Word.low);\n\t }\n\n\t return X32WordArray.create(x32Words, this.sigBytes);\n\t },\n\n\t /**\n\t * Creates a copy of this word array.\n\t *\n\t * @return {X64WordArray} The clone.\n\t *\n\t * @example\n\t *\n\t * var clone = x64WordArray.clone();\n\t */\n\t clone: function () {\n\t var clone = Base.clone.call(this);\n\n\t // Clone \"words\" array\n\t var words = clone.words = this.words.slice(0);\n\n\t // Clone each X64Word object\n\t var wordsLength = words.length;\n\t for (var i = 0; i < wordsLength; i++) {\n\t words[i] = words[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\t}());\n\n\n\treturn CryptoJS;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Check if typed arrays are supported\n\t if (typeof ArrayBuffer != 'function') {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\n\t // Reference original init\n\t var superInit = WordArray.init;\n\n\t // Augment WordArray.init to handle typed arrays\n\t var subInit = WordArray.init = function (typedArray) {\n\t // Convert buffers to uint8\n\t if (typedArray instanceof ArrayBuffer) {\n\t typedArray = new Uint8Array(typedArray);\n\t }\n\n\t // Convert other array views to uint8\n\t if (\n\t typedArray instanceof Int8Array ||\n\t (typeof Uint8ClampedArray !== \"undefined\" && typedArray instanceof Uint8ClampedArray) ||\n\t typedArray instanceof Int16Array ||\n\t typedArray instanceof Uint16Array ||\n\t typedArray instanceof Int32Array ||\n\t typedArray instanceof Uint32Array ||\n\t typedArray instanceof Float32Array ||\n\t typedArray instanceof Float64Array\n\t ) {\n\t typedArray = new Uint8Array(typedArray.buffer, typedArray.byteOffset, typedArray.byteLength);\n\t }\n\n\t // Handle Uint8Array\n\t if (typedArray instanceof Uint8Array) {\n\t // Shortcut\n\t var typedArrayByteLength = typedArray.byteLength;\n\n\t // Extract bytes\n\t var words = [];\n\t for (var i = 0; i < typedArrayByteLength; i++) {\n\t words[i >>> 2] |= typedArray[i] << (24 - (i % 4) * 8);\n\t }\n\n\t // Initialize this word array\n\t superInit.call(this, words, typedArrayByteLength);\n\t } else {\n\t // Else call normal init\n\t superInit.apply(this, arguments);\n\t }\n\t };\n\n\t subInit.prototype = WordArray;\n\t}());\n\n\n\treturn CryptoJS.lib.WordArray;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * UTF-16 BE encoding strategy.\n\t */\n\t var Utf16BE = C_enc.Utf16 = C_enc.Utf16BE = {\n\t /**\n\t * Converts a word array to a UTF-16 BE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 BE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16String = CryptoJS.enc.Utf16.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = (words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff;\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 BE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 BE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16.parse(utf16String);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= utf16Str.charCodeAt(i) << (16 - (i % 2) * 16);\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t /**\n\t * UTF-16 LE encoding strategy.\n\t */\n\t C_enc.Utf16LE = {\n\t /**\n\t * Converts a word array to a UTF-16 LE string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The UTF-16 LE string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var utf16Str = CryptoJS.enc.Utf16LE.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\n\t // Convert\n\t var utf16Chars = [];\n\t for (var i = 0; i < sigBytes; i += 2) {\n\t var codePoint = swapEndian((words[i >>> 2] >>> (16 - (i % 4) * 8)) & 0xffff);\n\t utf16Chars.push(String.fromCharCode(codePoint));\n\t }\n\n\t return utf16Chars.join('');\n\t },\n\n\t /**\n\t * Converts a UTF-16 LE string to a word array.\n\t *\n\t * @param {string} utf16Str The UTF-16 LE string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Utf16LE.parse(utf16Str);\n\t */\n\t parse: function (utf16Str) {\n\t // Shortcut\n\t var utf16StrLength = utf16Str.length;\n\n\t // Convert\n\t var words = [];\n\t for (var i = 0; i < utf16StrLength; i++) {\n\t words[i >>> 1] |= swapEndian(utf16Str.charCodeAt(i) << (16 - (i % 2) * 16));\n\t }\n\n\t return WordArray.create(words, utf16StrLength * 2);\n\t }\n\t };\n\n\t function swapEndian(word) {\n\t return ((word << 8) & 0xff00ff00) | ((word >>> 8) & 0x00ff00ff);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Utf16;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64 encoding strategy.\n\t */\n\t var Base64 = C_enc.Base64 = {\n\t /**\n\t * Converts a word array to a Base64 string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @return {string} The Base64 string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64.stringify(wordArray);\n\t */\n\t stringify: function (wordArray) {\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64 string to a word array.\n\t *\n\t * @param {string} base64Str The Base64 string.\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64.parse(base64String);\n\t */\n\t parse: function (base64Str) {\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/='\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_enc = C.enc;\n\n\t /**\n\t * Base64url encoding strategy.\n\t */\n\t var Base64url = C_enc.Base64url = {\n\t /**\n\t * Converts a word array to a Base64url string.\n\t *\n\t * @param {WordArray} wordArray The word array.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {string} The Base64url string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var base64String = CryptoJS.enc.Base64url.stringify(wordArray);\n\t */\n\t stringify: function (wordArray, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\t // Shortcuts\n\t var words = wordArray.words;\n\t var sigBytes = wordArray.sigBytes;\n\t var map = urlSafe ? this._safe_map : this._map;\n\n\t // Clamp excess bits\n\t wordArray.clamp();\n\n\t // Convert\n\t var base64Chars = [];\n\t for (var i = 0; i < sigBytes; i += 3) {\n\t var byte1 = (words[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff;\n\t var byte2 = (words[(i + 1) >>> 2] >>> (24 - ((i + 1) % 4) * 8)) & 0xff;\n\t var byte3 = (words[(i + 2) >>> 2] >>> (24 - ((i + 2) % 4) * 8)) & 0xff;\n\n\t var triplet = (byte1 << 16) | (byte2 << 8) | byte3;\n\n\t for (var j = 0; (j < 4) && (i + j * 0.75 < sigBytes); j++) {\n\t base64Chars.push(map.charAt((triplet >>> (6 * (3 - j))) & 0x3f));\n\t }\n\t }\n\n\t // Add padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t while (base64Chars.length % 4) {\n\t base64Chars.push(paddingChar);\n\t }\n\t }\n\n\t return base64Chars.join('');\n\t },\n\n\t /**\n\t * Converts a Base64url string to a word array.\n\t *\n\t * @param {string} base64Str The Base64url string.\n\t *\n\t * @param {boolean} urlSafe Whether to use url safe\n\t *\n\t * @return {WordArray} The word array.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var wordArray = CryptoJS.enc.Base64url.parse(base64String);\n\t */\n\t parse: function (base64Str, urlSafe) {\n\t if (urlSafe === undefined) {\n\t urlSafe = true\n\t }\n\n\t // Shortcuts\n\t var base64StrLength = base64Str.length;\n\t var map = urlSafe ? this._safe_map : this._map;\n\t var reverseMap = this._reverseMap;\n\n\t if (!reverseMap) {\n\t reverseMap = this._reverseMap = [];\n\t for (var j = 0; j < map.length; j++) {\n\t reverseMap[map.charCodeAt(j)] = j;\n\t }\n\t }\n\n\t // Ignore padding\n\t var paddingChar = map.charAt(64);\n\t if (paddingChar) {\n\t var paddingIndex = base64Str.indexOf(paddingChar);\n\t if (paddingIndex !== -1) {\n\t base64StrLength = paddingIndex;\n\t }\n\t }\n\n\t // Convert\n\t return parseLoop(base64Str, base64StrLength, reverseMap);\n\n\t },\n\n\t _map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=',\n\t _safe_map: 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_',\n\t };\n\n\t function parseLoop(base64Str, base64StrLength, reverseMap) {\n\t var words = [];\n\t var nBytes = 0;\n\t for (var i = 0; i < base64StrLength; i++) {\n\t if (i % 4) {\n\t var bits1 = reverseMap[base64Str.charCodeAt(i - 1)] << ((i % 4) * 2);\n\t var bits2 = reverseMap[base64Str.charCodeAt(i)] >>> (6 - (i % 4) * 2);\n\t var bitsCombined = bits1 | bits2;\n\t words[nBytes >>> 2] |= bitsCombined << (24 - (nBytes % 4) * 8);\n\t nBytes++;\n\t }\n\t }\n\t return WordArray.create(words, nBytes);\n\t }\n\t}());\n\n\n\treturn CryptoJS.enc.Base64url;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var T = [];\n\n\t // Compute constants\n\t (function () {\n\t for (var i = 0; i < 64; i++) {\n\t T[i] = (Math.abs(Math.sin(i + 1)) * 0x100000000) | 0;\n\t }\n\t }());\n\n\t /**\n\t * MD5 hash algorithm.\n\t */\n\t var MD5 = C_algo.MD5 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var M_offset_0 = M[offset + 0];\n\t var M_offset_1 = M[offset + 1];\n\t var M_offset_2 = M[offset + 2];\n\t var M_offset_3 = M[offset + 3];\n\t var M_offset_4 = M[offset + 4];\n\t var M_offset_5 = M[offset + 5];\n\t var M_offset_6 = M[offset + 6];\n\t var M_offset_7 = M[offset + 7];\n\t var M_offset_8 = M[offset + 8];\n\t var M_offset_9 = M[offset + 9];\n\t var M_offset_10 = M[offset + 10];\n\t var M_offset_11 = M[offset + 11];\n\t var M_offset_12 = M[offset + 12];\n\t var M_offset_13 = M[offset + 13];\n\t var M_offset_14 = M[offset + 14];\n\t var M_offset_15 = M[offset + 15];\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\n\t // Computation\n\t a = FF(a, b, c, d, M_offset_0, 7, T[0]);\n\t d = FF(d, a, b, c, M_offset_1, 12, T[1]);\n\t c = FF(c, d, a, b, M_offset_2, 17, T[2]);\n\t b = FF(b, c, d, a, M_offset_3, 22, T[3]);\n\t a = FF(a, b, c, d, M_offset_4, 7, T[4]);\n\t d = FF(d, a, b, c, M_offset_5, 12, T[5]);\n\t c = FF(c, d, a, b, M_offset_6, 17, T[6]);\n\t b = FF(b, c, d, a, M_offset_7, 22, T[7]);\n\t a = FF(a, b, c, d, M_offset_8, 7, T[8]);\n\t d = FF(d, a, b, c, M_offset_9, 12, T[9]);\n\t c = FF(c, d, a, b, M_offset_10, 17, T[10]);\n\t b = FF(b, c, d, a, M_offset_11, 22, T[11]);\n\t a = FF(a, b, c, d, M_offset_12, 7, T[12]);\n\t d = FF(d, a, b, c, M_offset_13, 12, T[13]);\n\t c = FF(c, d, a, b, M_offset_14, 17, T[14]);\n\t b = FF(b, c, d, a, M_offset_15, 22, T[15]);\n\n\t a = GG(a, b, c, d, M_offset_1, 5, T[16]);\n\t d = GG(d, a, b, c, M_offset_6, 9, T[17]);\n\t c = GG(c, d, a, b, M_offset_11, 14, T[18]);\n\t b = GG(b, c, d, a, M_offset_0, 20, T[19]);\n\t a = GG(a, b, c, d, M_offset_5, 5, T[20]);\n\t d = GG(d, a, b, c, M_offset_10, 9, T[21]);\n\t c = GG(c, d, a, b, M_offset_15, 14, T[22]);\n\t b = GG(b, c, d, a, M_offset_4, 20, T[23]);\n\t a = GG(a, b, c, d, M_offset_9, 5, T[24]);\n\t d = GG(d, a, b, c, M_offset_14, 9, T[25]);\n\t c = GG(c, d, a, b, M_offset_3, 14, T[26]);\n\t b = GG(b, c, d, a, M_offset_8, 20, T[27]);\n\t a = GG(a, b, c, d, M_offset_13, 5, T[28]);\n\t d = GG(d, a, b, c, M_offset_2, 9, T[29]);\n\t c = GG(c, d, a, b, M_offset_7, 14, T[30]);\n\t b = GG(b, c, d, a, M_offset_12, 20, T[31]);\n\n\t a = HH(a, b, c, d, M_offset_5, 4, T[32]);\n\t d = HH(d, a, b, c, M_offset_8, 11, T[33]);\n\t c = HH(c, d, a, b, M_offset_11, 16, T[34]);\n\t b = HH(b, c, d, a, M_offset_14, 23, T[35]);\n\t a = HH(a, b, c, d, M_offset_1, 4, T[36]);\n\t d = HH(d, a, b, c, M_offset_4, 11, T[37]);\n\t c = HH(c, d, a, b, M_offset_7, 16, T[38]);\n\t b = HH(b, c, d, a, M_offset_10, 23, T[39]);\n\t a = HH(a, b, c, d, M_offset_13, 4, T[40]);\n\t d = HH(d, a, b, c, M_offset_0, 11, T[41]);\n\t c = HH(c, d, a, b, M_offset_3, 16, T[42]);\n\t b = HH(b, c, d, a, M_offset_6, 23, T[43]);\n\t a = HH(a, b, c, d, M_offset_9, 4, T[44]);\n\t d = HH(d, a, b, c, M_offset_12, 11, T[45]);\n\t c = HH(c, d, a, b, M_offset_15, 16, T[46]);\n\t b = HH(b, c, d, a, M_offset_2, 23, T[47]);\n\n\t a = II(a, b, c, d, M_offset_0, 6, T[48]);\n\t d = II(d, a, b, c, M_offset_7, 10, T[49]);\n\t c = II(c, d, a, b, M_offset_14, 15, T[50]);\n\t b = II(b, c, d, a, M_offset_5, 21, T[51]);\n\t a = II(a, b, c, d, M_offset_12, 6, T[52]);\n\t d = II(d, a, b, c, M_offset_3, 10, T[53]);\n\t c = II(c, d, a, b, M_offset_10, 15, T[54]);\n\t b = II(b, c, d, a, M_offset_1, 21, T[55]);\n\t a = II(a, b, c, d, M_offset_8, 6, T[56]);\n\t d = II(d, a, b, c, M_offset_15, 10, T[57]);\n\t c = II(c, d, a, b, M_offset_6, 15, T[58]);\n\t b = II(b, c, d, a, M_offset_13, 21, T[59]);\n\t a = II(a, b, c, d, M_offset_4, 6, T[60]);\n\t d = II(d, a, b, c, M_offset_11, 10, T[61]);\n\t c = II(c, d, a, b, M_offset_2, 15, T[62]);\n\t b = II(b, c, d, a, M_offset_9, 21, T[63]);\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\n\t var nBitsTotalH = Math.floor(nBitsTotal / 0x100000000);\n\t var nBitsTotalL = nBitsTotal;\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = (\n\t (((nBitsTotalH << 8) | (nBitsTotalH >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalH << 24) | (nBitsTotalH >>> 8)) & 0xff00ff00)\n\t );\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotalL << 8) | (nBitsTotalL >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotalL << 24) | (nBitsTotalL >>> 8)) & 0xff00ff00)\n\t );\n\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t function FF(a, b, c, d, x, s, t) {\n\t var n = a + ((b & c) | (~b & d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function GG(a, b, c, d, x, s, t) {\n\t var n = a + ((b & d) | (c & ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function HH(a, b, c, d, x, s, t) {\n\t var n = a + (b ^ c ^ d) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t function II(a, b, c, d, x, s, t) {\n\t var n = a + (c ^ (b | ~d)) + x + t;\n\t return ((n << s) | (n >>> (32 - s))) + b;\n\t }\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.MD5('message');\n\t * var hash = CryptoJS.MD5(wordArray);\n\t */\n\t C.MD5 = Hasher._createHelper(MD5);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacMD5(message, key);\n\t */\n\t C.HmacMD5 = Hasher._createHmacHelper(MD5);\n\t}(Math));\n\n\n\treturn CryptoJS.MD5;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-1 hash algorithm.\n\t */\n\t var SHA1 = C_algo.SHA1 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0x67452301, 0xefcdab89,\n\t 0x98badcfe, 0x10325476,\n\t 0xc3d2e1f0\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\n\t // Computation\n\t for (var i = 0; i < 80; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var n = W[i - 3] ^ W[i - 8] ^ W[i - 14] ^ W[i - 16];\n\t W[i] = (n << 1) | (n >>> 31);\n\t }\n\n\t var t = ((a << 5) | (a >>> 27)) + e + W[i];\n\t if (i < 20) {\n\t t += ((b & c) | (~b & d)) + 0x5a827999;\n\t } else if (i < 40) {\n\t t += (b ^ c ^ d) + 0x6ed9eba1;\n\t } else if (i < 60) {\n\t t += ((b & c) | (b & d) | (c & d)) - 0x70e44324;\n\t } else /* if (i < 80) */ {\n\t t += (b ^ c ^ d) - 0x359d3e2a;\n\t }\n\n\t e = d;\n\t d = c;\n\t c = (b << 30) | (b >>> 2);\n\t b = a;\n\t a = t;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA1('message');\n\t * var hash = CryptoJS.SHA1(wordArray);\n\t */\n\t C.SHA1 = Hasher._createHelper(SHA1);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA1(message, key);\n\t */\n\t C.HmacSHA1 = Hasher._createHmacHelper(SHA1);\n\t}());\n\n\n\treturn CryptoJS.SHA1;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Initialization and round constants tables\n\t var H = [];\n\t var K = [];\n\n\t // Compute constants\n\t (function () {\n\t function isPrime(n) {\n\t var sqrtN = Math.sqrt(n);\n\t for (var factor = 2; factor <= sqrtN; factor++) {\n\t if (!(n % factor)) {\n\t return false;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t function getFractionalBits(n) {\n\t return ((n - (n | 0)) * 0x100000000) | 0;\n\t }\n\n\t var n = 2;\n\t var nPrime = 0;\n\t while (nPrime < 64) {\n\t if (isPrime(n)) {\n\t if (nPrime < 8) {\n\t H[nPrime] = getFractionalBits(Math.pow(n, 1 / 2));\n\t }\n\t K[nPrime] = getFractionalBits(Math.pow(n, 1 / 3));\n\n\t nPrime++;\n\t }\n\n\t n++;\n\t }\n\t }());\n\n\t // Reusable object\n\t var W = [];\n\n\t /**\n\t * SHA-256 hash algorithm.\n\t */\n\t var SHA256 = C_algo.SHA256 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init(H.slice(0));\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var H = this._hash.words;\n\n\t // Working variables\n\t var a = H[0];\n\t var b = H[1];\n\t var c = H[2];\n\t var d = H[3];\n\t var e = H[4];\n\t var f = H[5];\n\t var g = H[6];\n\t var h = H[7];\n\n\t // Computation\n\t for (var i = 0; i < 64; i++) {\n\t if (i < 16) {\n\t W[i] = M[offset + i] | 0;\n\t } else {\n\t var gamma0x = W[i - 15];\n\t var gamma0 = ((gamma0x << 25) | (gamma0x >>> 7)) ^\n\t ((gamma0x << 14) | (gamma0x >>> 18)) ^\n\t (gamma0x >>> 3);\n\n\t var gamma1x = W[i - 2];\n\t var gamma1 = ((gamma1x << 15) | (gamma1x >>> 17)) ^\n\t ((gamma1x << 13) | (gamma1x >>> 19)) ^\n\t (gamma1x >>> 10);\n\n\t W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16];\n\t }\n\n\t var ch = (e & f) ^ (~e & g);\n\t var maj = (a & b) ^ (a & c) ^ (b & c);\n\n\t var sigma0 = ((a << 30) | (a >>> 2)) ^ ((a << 19) | (a >>> 13)) ^ ((a << 10) | (a >>> 22));\n\t var sigma1 = ((e << 26) | (e >>> 6)) ^ ((e << 21) | (e >>> 11)) ^ ((e << 7) | (e >>> 25));\n\n\t var t1 = h + sigma1 + ch + K[i] + W[i];\n\t var t2 = sigma0 + maj;\n\n\t h = g;\n\t g = f;\n\t f = e;\n\t e = (d + t1) | 0;\n\t d = c;\n\t c = b;\n\t b = a;\n\t a = (t1 + t2) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H[0] = (H[0] + a) | 0;\n\t H[1] = (H[1] + b) | 0;\n\t H[2] = (H[2] + c) | 0;\n\t H[3] = (H[3] + d) | 0;\n\t H[4] = (H[4] + e) | 0;\n\t H[5] = (H[5] + f) | 0;\n\t H[6] = (H[6] + g) | 0;\n\t H[7] = (H[7] + h) | 0;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 15] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Return final computed hash\n\t return this._hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA256('message');\n\t * var hash = CryptoJS.SHA256(wordArray);\n\t */\n\t C.SHA256 = Hasher._createHelper(SHA256);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA256(message, key);\n\t */\n\t C.HmacSHA256 = Hasher._createHmacHelper(SHA256);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA256;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\n\t /**\n\t * SHA-224 hash algorithm.\n\t */\n\t var SHA224 = C_algo.SHA224 = SHA256.extend({\n\t _doReset: function () {\n\t this._hash = new WordArray.init([\n\t 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939,\n\t 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA256._doFinalize.call(this);\n\n\t hash.sigBytes -= 4;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA224('message');\n\t * var hash = CryptoJS.SHA224(wordArray);\n\t */\n\t C.SHA224 = SHA256._createHelper(SHA224);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA224(message, key);\n\t */\n\t C.HmacSHA224 = SHA256._createHmacHelper(SHA224);\n\t}());\n\n\n\treturn CryptoJS.SHA224;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\n\t function X64Word_create() {\n\t return X64Word.create.apply(X64Word, arguments);\n\t }\n\n\t // Constants\n\t var K = [\n\t X64Word_create(0x428a2f98, 0xd728ae22), X64Word_create(0x71374491, 0x23ef65cd),\n\t X64Word_create(0xb5c0fbcf, 0xec4d3b2f), X64Word_create(0xe9b5dba5, 0x8189dbbc),\n\t X64Word_create(0x3956c25b, 0xf348b538), X64Word_create(0x59f111f1, 0xb605d019),\n\t X64Word_create(0x923f82a4, 0xaf194f9b), X64Word_create(0xab1c5ed5, 0xda6d8118),\n\t X64Word_create(0xd807aa98, 0xa3030242), X64Word_create(0x12835b01, 0x45706fbe),\n\t X64Word_create(0x243185be, 0x4ee4b28c), X64Word_create(0x550c7dc3, 0xd5ffb4e2),\n\t X64Word_create(0x72be5d74, 0xf27b896f), X64Word_create(0x80deb1fe, 0x3b1696b1),\n\t X64Word_create(0x9bdc06a7, 0x25c71235), X64Word_create(0xc19bf174, 0xcf692694),\n\t X64Word_create(0xe49b69c1, 0x9ef14ad2), X64Word_create(0xefbe4786, 0x384f25e3),\n\t X64Word_create(0x0fc19dc6, 0x8b8cd5b5), X64Word_create(0x240ca1cc, 0x77ac9c65),\n\t X64Word_create(0x2de92c6f, 0x592b0275), X64Word_create(0x4a7484aa, 0x6ea6e483),\n\t X64Word_create(0x5cb0a9dc, 0xbd41fbd4), X64Word_create(0x76f988da, 0x831153b5),\n\t X64Word_create(0x983e5152, 0xee66dfab), X64Word_create(0xa831c66d, 0x2db43210),\n\t X64Word_create(0xb00327c8, 0x98fb213f), X64Word_create(0xbf597fc7, 0xbeef0ee4),\n\t X64Word_create(0xc6e00bf3, 0x3da88fc2), X64Word_create(0xd5a79147, 0x930aa725),\n\t X64Word_create(0x06ca6351, 0xe003826f), X64Word_create(0x14292967, 0x0a0e6e70),\n\t X64Word_create(0x27b70a85, 0x46d22ffc), X64Word_create(0x2e1b2138, 0x5c26c926),\n\t X64Word_create(0x4d2c6dfc, 0x5ac42aed), X64Word_create(0x53380d13, 0x9d95b3df),\n\t X64Word_create(0x650a7354, 0x8baf63de), X64Word_create(0x766a0abb, 0x3c77b2a8),\n\t X64Word_create(0x81c2c92e, 0x47edaee6), X64Word_create(0x92722c85, 0x1482353b),\n\t X64Word_create(0xa2bfe8a1, 0x4cf10364), X64Word_create(0xa81a664b, 0xbc423001),\n\t X64Word_create(0xc24b8b70, 0xd0f89791), X64Word_create(0xc76c51a3, 0x0654be30),\n\t X64Word_create(0xd192e819, 0xd6ef5218), X64Word_create(0xd6990624, 0x5565a910),\n\t X64Word_create(0xf40e3585, 0x5771202a), X64Word_create(0x106aa070, 0x32bbd1b8),\n\t X64Word_create(0x19a4c116, 0xb8d2d0c8), X64Word_create(0x1e376c08, 0x5141ab53),\n\t X64Word_create(0x2748774c, 0xdf8eeb99), X64Word_create(0x34b0bcb5, 0xe19b48a8),\n\t X64Word_create(0x391c0cb3, 0xc5c95a63), X64Word_create(0x4ed8aa4a, 0xe3418acb),\n\t X64Word_create(0x5b9cca4f, 0x7763e373), X64Word_create(0x682e6ff3, 0xd6b2b8a3),\n\t X64Word_create(0x748f82ee, 0x5defb2fc), X64Word_create(0x78a5636f, 0x43172f60),\n\t X64Word_create(0x84c87814, 0xa1f0ab72), X64Word_create(0x8cc70208, 0x1a6439ec),\n\t X64Word_create(0x90befffa, 0x23631e28), X64Word_create(0xa4506ceb, 0xde82bde9),\n\t X64Word_create(0xbef9a3f7, 0xb2c67915), X64Word_create(0xc67178f2, 0xe372532b),\n\t X64Word_create(0xca273ece, 0xea26619c), X64Word_create(0xd186b8c7, 0x21c0c207),\n\t X64Word_create(0xeada7dd6, 0xcde0eb1e), X64Word_create(0xf57d4f7f, 0xee6ed178),\n\t X64Word_create(0x06f067aa, 0x72176fba), X64Word_create(0x0a637dc5, 0xa2c898a6),\n\t X64Word_create(0x113f9804, 0xbef90dae), X64Word_create(0x1b710b35, 0x131c471b),\n\t X64Word_create(0x28db77f5, 0x23047d84), X64Word_create(0x32caab7b, 0x40c72493),\n\t X64Word_create(0x3c9ebe0a, 0x15c9bebc), X64Word_create(0x431d67c4, 0x9c100d4c),\n\t X64Word_create(0x4cc5d4be, 0xcb3e42b6), X64Word_create(0x597f299c, 0xfc657e2a),\n\t X64Word_create(0x5fcb6fab, 0x3ad6faec), X64Word_create(0x6c44198c, 0x4a475817)\n\t ];\n\n\t // Reusable objects\n\t var W = [];\n\t (function () {\n\t for (var i = 0; i < 80; i++) {\n\t W[i] = X64Word_create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-512 hash algorithm.\n\t */\n\t var SHA512 = C_algo.SHA512 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0x6a09e667, 0xf3bcc908), new X64Word.init(0xbb67ae85, 0x84caa73b),\n\t new X64Word.init(0x3c6ef372, 0xfe94f82b), new X64Word.init(0xa54ff53a, 0x5f1d36f1),\n\t new X64Word.init(0x510e527f, 0xade682d1), new X64Word.init(0x9b05688c, 0x2b3e6c1f),\n\t new X64Word.init(0x1f83d9ab, 0xfb41bd6b), new X64Word.init(0x5be0cd19, 0x137e2179)\n\t ]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var H = this._hash.words;\n\n\t var H0 = H[0];\n\t var H1 = H[1];\n\t var H2 = H[2];\n\t var H3 = H[3];\n\t var H4 = H[4];\n\t var H5 = H[5];\n\t var H6 = H[6];\n\t var H7 = H[7];\n\n\t var H0h = H0.high;\n\t var H0l = H0.low;\n\t var H1h = H1.high;\n\t var H1l = H1.low;\n\t var H2h = H2.high;\n\t var H2l = H2.low;\n\t var H3h = H3.high;\n\t var H3l = H3.low;\n\t var H4h = H4.high;\n\t var H4l = H4.low;\n\t var H5h = H5.high;\n\t var H5l = H5.low;\n\t var H6h = H6.high;\n\t var H6l = H6.low;\n\t var H7h = H7.high;\n\t var H7l = H7.low;\n\n\t // Working variables\n\t var ah = H0h;\n\t var al = H0l;\n\t var bh = H1h;\n\t var bl = H1l;\n\t var ch = H2h;\n\t var cl = H2l;\n\t var dh = H3h;\n\t var dl = H3l;\n\t var eh = H4h;\n\t var el = H4l;\n\t var fh = H5h;\n\t var fl = H5l;\n\t var gh = H6h;\n\t var gl = H6l;\n\t var hh = H7h;\n\t var hl = H7l;\n\n\t // Rounds\n\t for (var i = 0; i < 80; i++) {\n\t var Wil;\n\t var Wih;\n\n\t // Shortcut\n\t var Wi = W[i];\n\n\t // Extend message\n\t if (i < 16) {\n\t Wih = Wi.high = M[offset + i * 2] | 0;\n\t Wil = Wi.low = M[offset + i * 2 + 1] | 0;\n\t } else {\n\t // Gamma0\n\t var gamma0x = W[i - 15];\n\t var gamma0xh = gamma0x.high;\n\t var gamma0xl = gamma0x.low;\n\t var gamma0h = ((gamma0xh >>> 1) | (gamma0xl << 31)) ^ ((gamma0xh >>> 8) | (gamma0xl << 24)) ^ (gamma0xh >>> 7);\n\t var gamma0l = ((gamma0xl >>> 1) | (gamma0xh << 31)) ^ ((gamma0xl >>> 8) | (gamma0xh << 24)) ^ ((gamma0xl >>> 7) | (gamma0xh << 25));\n\n\t // Gamma1\n\t var gamma1x = W[i - 2];\n\t var gamma1xh = gamma1x.high;\n\t var gamma1xl = gamma1x.low;\n\t var gamma1h = ((gamma1xh >>> 19) | (gamma1xl << 13)) ^ ((gamma1xh << 3) | (gamma1xl >>> 29)) ^ (gamma1xh >>> 6);\n\t var gamma1l = ((gamma1xl >>> 19) | (gamma1xh << 13)) ^ ((gamma1xl << 3) | (gamma1xh >>> 29)) ^ ((gamma1xl >>> 6) | (gamma1xh << 26));\n\n\t // W[i] = gamma0 + W[i - 7] + gamma1 + W[i - 16]\n\t var Wi7 = W[i - 7];\n\t var Wi7h = Wi7.high;\n\t var Wi7l = Wi7.low;\n\n\t var Wi16 = W[i - 16];\n\t var Wi16h = Wi16.high;\n\t var Wi16l = Wi16.low;\n\n\t Wil = gamma0l + Wi7l;\n\t Wih = gamma0h + Wi7h + ((Wil >>> 0) < (gamma0l >>> 0) ? 1 : 0);\n\t Wil = Wil + gamma1l;\n\t Wih = Wih + gamma1h + ((Wil >>> 0) < (gamma1l >>> 0) ? 1 : 0);\n\t Wil = Wil + Wi16l;\n\t Wih = Wih + Wi16h + ((Wil >>> 0) < (Wi16l >>> 0) ? 1 : 0);\n\n\t Wi.high = Wih;\n\t Wi.low = Wil;\n\t }\n\n\t var chh = (eh & fh) ^ (~eh & gh);\n\t var chl = (el & fl) ^ (~el & gl);\n\t var majh = (ah & bh) ^ (ah & ch) ^ (bh & ch);\n\t var majl = (al & bl) ^ (al & cl) ^ (bl & cl);\n\n\t var sigma0h = ((ah >>> 28) | (al << 4)) ^ ((ah << 30) | (al >>> 2)) ^ ((ah << 25) | (al >>> 7));\n\t var sigma0l = ((al >>> 28) | (ah << 4)) ^ ((al << 30) | (ah >>> 2)) ^ ((al << 25) | (ah >>> 7));\n\t var sigma1h = ((eh >>> 14) | (el << 18)) ^ ((eh >>> 18) | (el << 14)) ^ ((eh << 23) | (el >>> 9));\n\t var sigma1l = ((el >>> 14) | (eh << 18)) ^ ((el >>> 18) | (eh << 14)) ^ ((el << 23) | (eh >>> 9));\n\n\t // t1 = h + sigma1 + ch + K[i] + W[i]\n\t var Ki = K[i];\n\t var Kih = Ki.high;\n\t var Kil = Ki.low;\n\n\t var t1l = hl + sigma1l;\n\t var t1h = hh + sigma1h + ((t1l >>> 0) < (hl >>> 0) ? 1 : 0);\n\t var t1l = t1l + chl;\n\t var t1h = t1h + chh + ((t1l >>> 0) < (chl >>> 0) ? 1 : 0);\n\t var t1l = t1l + Kil;\n\t var t1h = t1h + Kih + ((t1l >>> 0) < (Kil >>> 0) ? 1 : 0);\n\t var t1l = t1l + Wil;\n\t var t1h = t1h + Wih + ((t1l >>> 0) < (Wil >>> 0) ? 1 : 0);\n\n\t // t2 = sigma0 + maj\n\t var t2l = sigma0l + majl;\n\t var t2h = sigma0h + majh + ((t2l >>> 0) < (sigma0l >>> 0) ? 1 : 0);\n\n\t // Update working variables\n\t hh = gh;\n\t hl = gl;\n\t gh = fh;\n\t gl = fl;\n\t fh = eh;\n\t fl = el;\n\t el = (dl + t1l) | 0;\n\t eh = (dh + t1h + ((el >>> 0) < (dl >>> 0) ? 1 : 0)) | 0;\n\t dh = ch;\n\t dl = cl;\n\t ch = bh;\n\t cl = bl;\n\t bh = ah;\n\t bl = al;\n\t al = (t1l + t2l) | 0;\n\t ah = (t1h + t2h + ((al >>> 0) < (t1l >>> 0) ? 1 : 0)) | 0;\n\t }\n\n\t // Intermediate hash value\n\t H0l = H0.low = (H0l + al);\n\t H0.high = (H0h + ah + ((H0l >>> 0) < (al >>> 0) ? 1 : 0));\n\t H1l = H1.low = (H1l + bl);\n\t H1.high = (H1h + bh + ((H1l >>> 0) < (bl >>> 0) ? 1 : 0));\n\t H2l = H2.low = (H2l + cl);\n\t H2.high = (H2h + ch + ((H2l >>> 0) < (cl >>> 0) ? 1 : 0));\n\t H3l = H3.low = (H3l + dl);\n\t H3.high = (H3h + dh + ((H3l >>> 0) < (dl >>> 0) ? 1 : 0));\n\t H4l = H4.low = (H4l + el);\n\t H4.high = (H4h + eh + ((H4l >>> 0) < (el >>> 0) ? 1 : 0));\n\t H5l = H5.low = (H5l + fl);\n\t H5.high = (H5h + fh + ((H5l >>> 0) < (fl >>> 0) ? 1 : 0));\n\t H6l = H6.low = (H6l + gl);\n\t H6.high = (H6h + gh + ((H6l >>> 0) < (gl >>> 0) ? 1 : 0));\n\t H7l = H7.low = (H7l + hl);\n\t H7.high = (H7h + hh + ((H7l >>> 0) < (hl >>> 0) ? 1 : 0));\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 30] = Math.floor(nBitsTotal / 0x100000000);\n\t dataWords[(((nBitsLeft + 128) >>> 10) << 5) + 31] = nBitsTotal;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Convert hash to 32-bit word array before returning\n\t var hash = this._hash.toX32();\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t },\n\n\t blockSize: 1024/32\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA512('message');\n\t * var hash = CryptoJS.SHA512(wordArray);\n\t */\n\t C.SHA512 = Hasher._createHelper(SHA512);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA512(message, key);\n\t */\n\t C.HmacSHA512 = Hasher._createHmacHelper(SHA512);\n\t}());\n\n\n\treturn CryptoJS.SHA512;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./sha512\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./sha512\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var X64WordArray = C_x64.WordArray;\n\t var C_algo = C.algo;\n\t var SHA512 = C_algo.SHA512;\n\n\t /**\n\t * SHA-384 hash algorithm.\n\t */\n\t var SHA384 = C_algo.SHA384 = SHA512.extend({\n\t _doReset: function () {\n\t this._hash = new X64WordArray.init([\n\t new X64Word.init(0xcbbb9d5d, 0xc1059ed8), new X64Word.init(0x629a292a, 0x367cd507),\n\t new X64Word.init(0x9159015a, 0x3070dd17), new X64Word.init(0x152fecd8, 0xf70e5939),\n\t new X64Word.init(0x67332667, 0xffc00b31), new X64Word.init(0x8eb44a87, 0x68581511),\n\t new X64Word.init(0xdb0c2e0d, 0x64f98fa7), new X64Word.init(0x47b5481d, 0xbefa4fa4)\n\t ]);\n\t },\n\n\t _doFinalize: function () {\n\t var hash = SHA512._doFinalize.call(this);\n\n\t hash.sigBytes -= 16;\n\n\t return hash;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA384('message');\n\t * var hash = CryptoJS.SHA384(wordArray);\n\t */\n\t C.SHA384 = SHA512._createHelper(SHA384);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA384(message, key);\n\t */\n\t C.HmacSHA384 = SHA512._createHmacHelper(SHA384);\n\t}());\n\n\n\treturn CryptoJS.SHA384;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_x64 = C.x64;\n\t var X64Word = C_x64.Word;\n\t var C_algo = C.algo;\n\n\t // Constants tables\n\t var RHO_OFFSETS = [];\n\t var PI_INDEXES = [];\n\t var ROUND_CONSTANTS = [];\n\n\t // Compute Constants\n\t (function () {\n\t // Compute rho offset constants\n\t var x = 1, y = 0;\n\t for (var t = 0; t < 24; t++) {\n\t RHO_OFFSETS[x + 5 * y] = ((t + 1) * (t + 2) / 2) % 64;\n\n\t var newX = y % 5;\n\t var newY = (2 * x + 3 * y) % 5;\n\t x = newX;\n\t y = newY;\n\t }\n\n\t // Compute pi index constants\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t PI_INDEXES[x + 5 * y] = y + ((2 * x + 3 * y) % 5) * 5;\n\t }\n\t }\n\n\t // Compute round constants\n\t var LFSR = 0x01;\n\t for (var i = 0; i < 24; i++) {\n\t var roundConstantMsw = 0;\n\t var roundConstantLsw = 0;\n\n\t for (var j = 0; j < 7; j++) {\n\t if (LFSR & 0x01) {\n\t var bitPosition = (1 << j) - 1;\n\t if (bitPosition < 32) {\n\t roundConstantLsw ^= 1 << bitPosition;\n\t } else /* if (bitPosition >= 32) */ {\n\t roundConstantMsw ^= 1 << (bitPosition - 32);\n\t }\n\t }\n\n\t // Compute next LFSR\n\t if (LFSR & 0x80) {\n\t // Primitive polynomial over GF(2): x^8 + x^6 + x^5 + x^4 + 1\n\t LFSR = (LFSR << 1) ^ 0x71;\n\t } else {\n\t LFSR <<= 1;\n\t }\n\t }\n\n\t ROUND_CONSTANTS[i] = X64Word.create(roundConstantMsw, roundConstantLsw);\n\t }\n\t }());\n\n\t // Reusable objects for temporary values\n\t var T = [];\n\t (function () {\n\t for (var i = 0; i < 25; i++) {\n\t T[i] = X64Word.create();\n\t }\n\t }());\n\n\t /**\n\t * SHA-3 hash algorithm.\n\t */\n\t var SHA3 = C_algo.SHA3 = Hasher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} outputLength\n\t * The desired number of bits in the output hash.\n\t * Only values permitted are: 224, 256, 384, 512.\n\t * Default: 512\n\t */\n\t cfg: Hasher.cfg.extend({\n\t outputLength: 512\n\t }),\n\n\t _doReset: function () {\n\t var state = this._state = []\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = new X64Word.init();\n\t }\n\n\t this.blockSize = (1600 - 2 * this.cfg.outputLength) / 32;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcuts\n\t var state = this._state;\n\t var nBlockSizeLanes = this.blockSize / 2;\n\n\t // Absorb\n\t for (var i = 0; i < nBlockSizeLanes; i++) {\n\t // Shortcuts\n\t var M2i = M[offset + 2 * i];\n\t var M2i1 = M[offset + 2 * i + 1];\n\n\t // Swap endian\n\t M2i = (\n\t (((M2i << 8) | (M2i >>> 24)) & 0x00ff00ff) |\n\t (((M2i << 24) | (M2i >>> 8)) & 0xff00ff00)\n\t );\n\t M2i1 = (\n\t (((M2i1 << 8) | (M2i1 >>> 24)) & 0x00ff00ff) |\n\t (((M2i1 << 24) | (M2i1 >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Absorb message into state\n\t var lane = state[i];\n\t lane.high ^= M2i1;\n\t lane.low ^= M2i;\n\t }\n\n\t // Rounds\n\t for (var round = 0; round < 24; round++) {\n\t // Theta\n\t for (var x = 0; x < 5; x++) {\n\t // Mix column lanes\n\t var tMsw = 0, tLsw = 0;\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t tMsw ^= lane.high;\n\t tLsw ^= lane.low;\n\t }\n\n\t // Temporary values\n\t var Tx = T[x];\n\t Tx.high = tMsw;\n\t Tx.low = tLsw;\n\t }\n\t for (var x = 0; x < 5; x++) {\n\t // Shortcuts\n\t var Tx4 = T[(x + 4) % 5];\n\t var Tx1 = T[(x + 1) % 5];\n\t var Tx1Msw = Tx1.high;\n\t var Tx1Lsw = Tx1.low;\n\n\t // Mix surrounding columns\n\t var tMsw = Tx4.high ^ ((Tx1Msw << 1) | (Tx1Lsw >>> 31));\n\t var tLsw = Tx4.low ^ ((Tx1Lsw << 1) | (Tx1Msw >>> 31));\n\t for (var y = 0; y < 5; y++) {\n\t var lane = state[x + 5 * y];\n\t lane.high ^= tMsw;\n\t lane.low ^= tLsw;\n\t }\n\t }\n\n\t // Rho Pi\n\t for (var laneIndex = 1; laneIndex < 25; laneIndex++) {\n\t var tMsw;\n\t var tLsw;\n\n\t // Shortcuts\n\t var lane = state[laneIndex];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\t var rhoOffset = RHO_OFFSETS[laneIndex];\n\n\t // Rotate lanes\n\t if (rhoOffset < 32) {\n\t tMsw = (laneMsw << rhoOffset) | (laneLsw >>> (32 - rhoOffset));\n\t tLsw = (laneLsw << rhoOffset) | (laneMsw >>> (32 - rhoOffset));\n\t } else /* if (rhoOffset >= 32) */ {\n\t tMsw = (laneLsw << (rhoOffset - 32)) | (laneMsw >>> (64 - rhoOffset));\n\t tLsw = (laneMsw << (rhoOffset - 32)) | (laneLsw >>> (64 - rhoOffset));\n\t }\n\n\t // Transpose lanes\n\t var TPiLane = T[PI_INDEXES[laneIndex]];\n\t TPiLane.high = tMsw;\n\t TPiLane.low = tLsw;\n\t }\n\n\t // Rho pi at x = y = 0\n\t var T0 = T[0];\n\t var state0 = state[0];\n\t T0.high = state0.high;\n\t T0.low = state0.low;\n\n\t // Chi\n\t for (var x = 0; x < 5; x++) {\n\t for (var y = 0; y < 5; y++) {\n\t // Shortcuts\n\t var laneIndex = x + 5 * y;\n\t var lane = state[laneIndex];\n\t var TLane = T[laneIndex];\n\t var Tx1Lane = T[((x + 1) % 5) + 5 * y];\n\t var Tx2Lane = T[((x + 2) % 5) + 5 * y];\n\n\t // Mix rows\n\t lane.high = TLane.high ^ (~Tx1Lane.high & Tx2Lane.high);\n\t lane.low = TLane.low ^ (~Tx1Lane.low & Tx2Lane.low);\n\t }\n\t }\n\n\t // Iota\n\t var lane = state[0];\n\t var roundConstant = ROUND_CONSTANTS[round];\n\t lane.high ^= roundConstant.high;\n\t lane.low ^= roundConstant.low;\n\t }\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\t var blockSizeBits = this.blockSize * 32;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x1 << (24 - nBitsLeft % 32);\n\t dataWords[((Math.ceil((nBitsLeft + 1) / blockSizeBits) * blockSizeBits) >>> 5) - 1] |= 0x80;\n\t data.sigBytes = dataWords.length * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var state = this._state;\n\t var outputLengthBytes = this.cfg.outputLength / 8;\n\t var outputLengthLanes = outputLengthBytes / 8;\n\n\t // Squeeze\n\t var hashWords = [];\n\t for (var i = 0; i < outputLengthLanes; i++) {\n\t // Shortcuts\n\t var lane = state[i];\n\t var laneMsw = lane.high;\n\t var laneLsw = lane.low;\n\n\t // Swap endian\n\t laneMsw = (\n\t (((laneMsw << 8) | (laneMsw >>> 24)) & 0x00ff00ff) |\n\t (((laneMsw << 24) | (laneMsw >>> 8)) & 0xff00ff00)\n\t );\n\t laneLsw = (\n\t (((laneLsw << 8) | (laneLsw >>> 24)) & 0x00ff00ff) |\n\t (((laneLsw << 24) | (laneLsw >>> 8)) & 0xff00ff00)\n\t );\n\n\t // Squeeze state to retrieve hash\n\t hashWords.push(laneLsw);\n\t hashWords.push(laneMsw);\n\t }\n\n\t // Return final computed hash\n\t return new WordArray.init(hashWords, outputLengthBytes);\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\n\t var state = clone._state = this._state.slice(0);\n\t for (var i = 0; i < 25; i++) {\n\t state[i] = state[i].clone();\n\t }\n\n\t return clone;\n\t }\n\t });\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.SHA3('message');\n\t * var hash = CryptoJS.SHA3(wordArray);\n\t */\n\t C.SHA3 = Hasher._createHelper(SHA3);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacSHA3(message, key);\n\t */\n\t C.HmacSHA3 = Hasher._createHmacHelper(SHA3);\n\t}(Math));\n\n\n\treturn CryptoJS.SHA3;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t(c) 2012 by Cédric Mesnil. All rights reserved.\n\n\tRedistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:\n\n\t - Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.\n\t - Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.\n\n\tTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n\t*/\n\n\t(function (Math) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var Hasher = C_lib.Hasher;\n\t var C_algo = C.algo;\n\n\t // Constants table\n\t var _zl = WordArray.create([\n\t 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n\t 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8,\n\t 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12,\n\t 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2,\n\t 4, 0, 5, 9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13]);\n\t var _zr = WordArray.create([\n\t 5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12,\n\t 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2,\n\t 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13,\n\t 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14,\n\t 12, 15, 10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11]);\n\t var _sl = WordArray.create([\n\t 11, 14, 15, 12, 5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8,\n\t 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12,\n\t 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5,\n\t 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12,\n\t 9, 15, 5, 11, 6, 8, 13, 12, 5, 12, 13, 14, 11, 8, 5, 6 ]);\n\t var _sr = WordArray.create([\n\t 8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6,\n\t 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11,\n\t 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5,\n\t 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,\n\t 8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11 ]);\n\n\t var _hl = WordArray.create([ 0x00000000, 0x5A827999, 0x6ED9EBA1, 0x8F1BBCDC, 0xA953FD4E]);\n\t var _hr = WordArray.create([ 0x50A28BE6, 0x5C4DD124, 0x6D703EF3, 0x7A6D76E9, 0x00000000]);\n\n\t /**\n\t * RIPEMD160 hash algorithm.\n\t */\n\t var RIPEMD160 = C_algo.RIPEMD160 = Hasher.extend({\n\t _doReset: function () {\n\t this._hash = WordArray.create([0x67452301, 0xEFCDAB89, 0x98BADCFE, 0x10325476, 0xC3D2E1F0]);\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\n\t // Swap endian\n\t for (var i = 0; i < 16; i++) {\n\t // Shortcuts\n\t var offset_i = offset + i;\n\t var M_offset_i = M[offset_i];\n\n\t // Swap\n\t M[offset_i] = (\n\t (((M_offset_i << 8) | (M_offset_i >>> 24)) & 0x00ff00ff) |\n\t (((M_offset_i << 24) | (M_offset_i >>> 8)) & 0xff00ff00)\n\t );\n\t }\n\t // Shortcut\n\t var H = this._hash.words;\n\t var hl = _hl.words;\n\t var hr = _hr.words;\n\t var zl = _zl.words;\n\t var zr = _zr.words;\n\t var sl = _sl.words;\n\t var sr = _sr.words;\n\n\t // Working variables\n\t var al, bl, cl, dl, el;\n\t var ar, br, cr, dr, er;\n\n\t ar = al = H[0];\n\t br = bl = H[1];\n\t cr = cl = H[2];\n\t dr = dl = H[3];\n\t er = el = H[4];\n\t // Computation\n\t var t;\n\t for (var i = 0; i < 80; i += 1) {\n\t t = (al + M[offset+zl[i]])|0;\n\t if (i<16){\n\t\t t += f1(bl,cl,dl) + hl[0];\n\t } else if (i<32) {\n\t\t t += f2(bl,cl,dl) + hl[1];\n\t } else if (i<48) {\n\t\t t += f3(bl,cl,dl) + hl[2];\n\t } else if (i<64) {\n\t\t t += f4(bl,cl,dl) + hl[3];\n\t } else {// if (i<80) {\n\t\t t += f5(bl,cl,dl) + hl[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sl[i]);\n\t t = (t+el)|0;\n\t al = el;\n\t el = dl;\n\t dl = rotl(cl, 10);\n\t cl = bl;\n\t bl = t;\n\n\t t = (ar + M[offset+zr[i]])|0;\n\t if (i<16){\n\t\t t += f5(br,cr,dr) + hr[0];\n\t } else if (i<32) {\n\t\t t += f4(br,cr,dr) + hr[1];\n\t } else if (i<48) {\n\t\t t += f3(br,cr,dr) + hr[2];\n\t } else if (i<64) {\n\t\t t += f2(br,cr,dr) + hr[3];\n\t } else {// if (i<80) {\n\t\t t += f1(br,cr,dr) + hr[4];\n\t }\n\t t = t|0;\n\t t = rotl(t,sr[i]) ;\n\t t = (t+er)|0;\n\t ar = er;\n\t er = dr;\n\t dr = rotl(cr, 10);\n\t cr = br;\n\t br = t;\n\t }\n\t // Intermediate hash value\n\t t = (H[1] + cl + dr)|0;\n\t H[1] = (H[2] + dl + er)|0;\n\t H[2] = (H[3] + el + ar)|0;\n\t H[3] = (H[4] + al + br)|0;\n\t H[4] = (H[0] + bl + cr)|0;\n\t H[0] = t;\n\t },\n\n\t _doFinalize: function () {\n\t // Shortcuts\n\t var data = this._data;\n\t var dataWords = data.words;\n\n\t var nBitsTotal = this._nDataBytes * 8;\n\t var nBitsLeft = data.sigBytes * 8;\n\n\t // Add padding\n\t dataWords[nBitsLeft >>> 5] |= 0x80 << (24 - nBitsLeft % 32);\n\t dataWords[(((nBitsLeft + 64) >>> 9) << 4) + 14] = (\n\t (((nBitsTotal << 8) | (nBitsTotal >>> 24)) & 0x00ff00ff) |\n\t (((nBitsTotal << 24) | (nBitsTotal >>> 8)) & 0xff00ff00)\n\t );\n\t data.sigBytes = (dataWords.length + 1) * 4;\n\n\t // Hash final blocks\n\t this._process();\n\n\t // Shortcuts\n\t var hash = this._hash;\n\t var H = hash.words;\n\n\t // Swap endian\n\t for (var i = 0; i < 5; i++) {\n\t // Shortcut\n\t var H_i = H[i];\n\n\t // Swap\n\t H[i] = (((H_i << 8) | (H_i >>> 24)) & 0x00ff00ff) |\n\t (((H_i << 24) | (H_i >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Return final computed hash\n\t return hash;\n\t },\n\n\t clone: function () {\n\t var clone = Hasher.clone.call(this);\n\t clone._hash = this._hash.clone();\n\n\t return clone;\n\t }\n\t });\n\n\n\t function f1(x, y, z) {\n\t return ((x) ^ (y) ^ (z));\n\n\t }\n\n\t function f2(x, y, z) {\n\t return (((x)&(y)) | ((~x)&(z)));\n\t }\n\n\t function f3(x, y, z) {\n\t return (((x) | (~(y))) ^ (z));\n\t }\n\n\t function f4(x, y, z) {\n\t return (((x) & (z)) | ((y)&(~(z))));\n\t }\n\n\t function f5(x, y, z) {\n\t return ((x) ^ ((y) |(~(z))));\n\n\t }\n\n\t function rotl(x,n) {\n\t return (x<>>(32-n));\n\t }\n\n\n\t /**\n\t * Shortcut function to the hasher's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t *\n\t * @return {WordArray} The hash.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hash = CryptoJS.RIPEMD160('message');\n\t * var hash = CryptoJS.RIPEMD160(wordArray);\n\t */\n\t C.RIPEMD160 = Hasher._createHelper(RIPEMD160);\n\n\t /**\n\t * Shortcut function to the HMAC's object interface.\n\t *\n\t * @param {WordArray|string} message The message to hash.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hmac = CryptoJS.HmacRIPEMD160(message, key);\n\t */\n\t C.HmacRIPEMD160 = Hasher._createHmacHelper(RIPEMD160);\n\t}(Math));\n\n\n\treturn CryptoJS.RIPEMD160;\n\n}));",";(function (root, factory) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var C_algo = C.algo;\n\n\t /**\n\t * HMAC algorithm.\n\t */\n\t var HMAC = C_algo.HMAC = Base.extend({\n\t /**\n\t * Initializes a newly created HMAC.\n\t *\n\t * @param {Hasher} hasher The hash algorithm to use.\n\t * @param {WordArray|string} key The secret key.\n\t *\n\t * @example\n\t *\n\t * var hmacHasher = CryptoJS.algo.HMAC.create(CryptoJS.algo.SHA256, key);\n\t */\n\t init: function (hasher, key) {\n\t // Init hasher\n\t hasher = this._hasher = new hasher.init();\n\n\t // Convert string to WordArray, else assume WordArray already\n\t if (typeof key == 'string') {\n\t key = Utf8.parse(key);\n\t }\n\n\t // Shortcuts\n\t var hasherBlockSize = hasher.blockSize;\n\t var hasherBlockSizeBytes = hasherBlockSize * 4;\n\n\t // Allow arbitrary length keys\n\t if (key.sigBytes > hasherBlockSizeBytes) {\n\t key = hasher.finalize(key);\n\t }\n\n\t // Clamp excess bits\n\t key.clamp();\n\n\t // Clone key for inner and outer pads\n\t var oKey = this._oKey = key.clone();\n\t var iKey = this._iKey = key.clone();\n\n\t // Shortcuts\n\t var oKeyWords = oKey.words;\n\t var iKeyWords = iKey.words;\n\n\t // XOR keys with pad constants\n\t for (var i = 0; i < hasherBlockSize; i++) {\n\t oKeyWords[i] ^= 0x5c5c5c5c;\n\t iKeyWords[i] ^= 0x36363636;\n\t }\n\t oKey.sigBytes = iKey.sigBytes = hasherBlockSizeBytes;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this HMAC to its initial state.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.reset();\n\t */\n\t reset: function () {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Reset\n\t hasher.reset();\n\t hasher.update(this._iKey);\n\t },\n\n\t /**\n\t * Updates this HMAC with a message.\n\t *\n\t * @param {WordArray|string} messageUpdate The message to append.\n\t *\n\t * @return {HMAC} This HMAC instance.\n\t *\n\t * @example\n\t *\n\t * hmacHasher.update('message');\n\t * hmacHasher.update(wordArray);\n\t */\n\t update: function (messageUpdate) {\n\t this._hasher.update(messageUpdate);\n\n\t // Chainable\n\t return this;\n\t },\n\n\t /**\n\t * Finalizes the HMAC computation.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} messageUpdate (Optional) A final message update.\n\t *\n\t * @return {WordArray} The HMAC.\n\t *\n\t * @example\n\t *\n\t * var hmac = hmacHasher.finalize();\n\t * var hmac = hmacHasher.finalize('message');\n\t * var hmac = hmacHasher.finalize(wordArray);\n\t */\n\t finalize: function (messageUpdate) {\n\t // Shortcut\n\t var hasher = this._hasher;\n\n\t // Compute HMAC\n\t var innerHash = hasher.finalize(messageUpdate);\n\t hasher.reset();\n\t var hmac = hasher.finalize(this._oKey.clone().concat(innerHash));\n\n\t return hmac;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha256\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha256\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var SHA256 = C_algo.SHA256;\n\t var HMAC = C_algo.HMAC;\n\n\t /**\n\t * Password-Based Key Derivation Function 2 algorithm.\n\t */\n\t var PBKDF2 = C_algo.PBKDF2 = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hasher to use. Default: SHA256\n\t * @property {number} iterations The number of iterations to perform. Default: 250000\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: SHA256,\n\t iterations: 250000\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.PBKDF2.create();\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.PBKDF2.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init HMAC\n\t var hmac = HMAC.create(cfg.hasher, password);\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\t var blockIndex = WordArray.create([0x00000001]);\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var blockIndexWords = blockIndex.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t var block = hmac.update(salt).finalize(blockIndex);\n\t hmac.reset();\n\n\t // Shortcuts\n\t var blockWords = block.words;\n\t var blockWordsLength = blockWords.length;\n\n\t // Iterations\n\t var intermediate = block;\n\t for (var i = 1; i < iterations; i++) {\n\t intermediate = hmac.finalize(intermediate);\n\t hmac.reset();\n\n\t // Shortcut\n\t var intermediateWords = intermediate.words;\n\n\t // XOR intermediate with block\n\t for (var j = 0; j < blockWordsLength; j++) {\n\t blockWords[j] ^= intermediateWords[j];\n\t }\n\t }\n\n\t derivedKey.concat(block);\n\t blockIndexWords[0]++;\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Computes the Password-Based Key Derivation Function 2.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.PBKDF2(password, salt);\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.PBKDF2(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.PBKDF2 = function (password, salt, cfg) {\n\t return PBKDF2.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.PBKDF2;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./sha1\"), require(\"./hmac\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./sha1\", \"./hmac\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var C_algo = C.algo;\n\t var MD5 = C_algo.MD5;\n\n\t /**\n\t * This key derivation function is meant to conform with EVP_BytesToKey.\n\t * www.openssl.org/docs/crypto/EVP_BytesToKey.html\n\t */\n\t var EvpKDF = C_algo.EvpKDF = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} keySize The key size in words to generate. Default: 4 (128 bits)\n\t * @property {Hasher} hasher The hash algorithm to use. Default: MD5\n\t * @property {number} iterations The number of iterations to perform. Default: 1\n\t */\n\t cfg: Base.extend({\n\t keySize: 128/32,\n\t hasher: MD5,\n\t iterations: 1\n\t }),\n\n\t /**\n\t * Initializes a newly created key derivation function.\n\t *\n\t * @param {Object} cfg (Optional) The configuration options to use for the derivation.\n\t *\n\t * @example\n\t *\n\t * var kdf = CryptoJS.algo.EvpKDF.create();\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8 });\n\t * var kdf = CryptoJS.algo.EvpKDF.create({ keySize: 8, iterations: 1000 });\n\t */\n\t init: function (cfg) {\n\t this.cfg = this.cfg.extend(cfg);\n\t },\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @example\n\t *\n\t * var key = kdf.compute(password, salt);\n\t */\n\t compute: function (password, salt) {\n\t var block;\n\n\t // Shortcut\n\t var cfg = this.cfg;\n\n\t // Init hasher\n\t var hasher = cfg.hasher.create();\n\n\t // Initial values\n\t var derivedKey = WordArray.create();\n\n\t // Shortcuts\n\t var derivedKeyWords = derivedKey.words;\n\t var keySize = cfg.keySize;\n\t var iterations = cfg.iterations;\n\n\t // Generate key\n\t while (derivedKeyWords.length < keySize) {\n\t if (block) {\n\t hasher.update(block);\n\t }\n\t block = hasher.update(password).finalize(salt);\n\t hasher.reset();\n\n\t // Iterations\n\t for (var i = 1; i < iterations; i++) {\n\t block = hasher.finalize(block);\n\t hasher.reset();\n\t }\n\n\t derivedKey.concat(block);\n\t }\n\t derivedKey.sigBytes = keySize * 4;\n\n\t return derivedKey;\n\t }\n\t });\n\n\t /**\n\t * Derives a key from a password.\n\t *\n\t * @param {WordArray|string} password The password.\n\t * @param {WordArray|string} salt A salt.\n\t * @param {Object} cfg (Optional) The configuration options to use for this computation.\n\t *\n\t * @return {WordArray} The derived key.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var key = CryptoJS.EvpKDF(password, salt);\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8 });\n\t * var key = CryptoJS.EvpKDF(password, salt, { keySize: 8, iterations: 1000 });\n\t */\n\t C.EvpKDF = function (password, salt, cfg) {\n\t return EvpKDF.create(cfg).compute(password, salt);\n\t };\n\t}());\n\n\n\treturn CryptoJS.EvpKDF;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./evpkdf\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./evpkdf\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher core components.\n\t */\n\tCryptoJS.lib.Cipher || (function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var Base = C_lib.Base;\n\t var WordArray = C_lib.WordArray;\n\t var BufferedBlockAlgorithm = C_lib.BufferedBlockAlgorithm;\n\t var C_enc = C.enc;\n\t var Utf8 = C_enc.Utf8;\n\t var Base64 = C_enc.Base64;\n\t var C_algo = C.algo;\n\t var EvpKDF = C_algo.EvpKDF;\n\n\t /**\n\t * Abstract base cipher template.\n\t *\n\t * @property {number} keySize This cipher's key size. Default: 4 (128 bits)\n\t * @property {number} ivSize This cipher's IV size. Default: 4 (128 bits)\n\t * @property {number} _ENC_XFORM_MODE A constant representing encryption mode.\n\t * @property {number} _DEC_XFORM_MODE A constant representing decryption mode.\n\t */\n\t var Cipher = C_lib.Cipher = BufferedBlockAlgorithm.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {WordArray} iv The IV to use for this operation.\n\t */\n\t cfg: Base.extend(),\n\n\t /**\n\t * Creates this cipher in encryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createEncryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createEncryptor: function (key, cfg) {\n\t return this.create(this._ENC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Creates this cipher in decryption mode.\n\t *\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {Cipher} A cipher instance.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.createDecryptor(keyWordArray, { iv: ivWordArray });\n\t */\n\t createDecryptor: function (key, cfg) {\n\t return this.create(this._DEC_XFORM_MODE, key, cfg);\n\t },\n\n\t /**\n\t * Initializes a newly created cipher.\n\t *\n\t * @param {number} xformMode Either the encryption or decryption transormation mode constant.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @example\n\t *\n\t * var cipher = CryptoJS.algo.AES.create(CryptoJS.algo.AES._ENC_XFORM_MODE, keyWordArray, { iv: ivWordArray });\n\t */\n\t init: function (xformMode, key, cfg) {\n\t // Apply config defaults\n\t this.cfg = this.cfg.extend(cfg);\n\n\t // Store transform mode and key\n\t this._xformMode = xformMode;\n\t this._key = key;\n\n\t // Set initial values\n\t this.reset();\n\t },\n\n\t /**\n\t * Resets this cipher to its initial state.\n\t *\n\t * @example\n\t *\n\t * cipher.reset();\n\t */\n\t reset: function () {\n\t // Reset data buffer\n\t BufferedBlockAlgorithm.reset.call(this);\n\n\t // Perform concrete-cipher logic\n\t this._doReset();\n\t },\n\n\t /**\n\t * Adds data to be encrypted or decrypted.\n\t *\n\t * @param {WordArray|string} dataUpdate The data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.process('data');\n\t * var encrypted = cipher.process(wordArray);\n\t */\n\t process: function (dataUpdate) {\n\t // Append\n\t this._append(dataUpdate);\n\n\t // Process available blocks\n\t return this._process();\n\t },\n\n\t /**\n\t * Finalizes the encryption or decryption process.\n\t * Note that the finalize operation is effectively a destructive, read-once operation.\n\t *\n\t * @param {WordArray|string} dataUpdate The final data to encrypt or decrypt.\n\t *\n\t * @return {WordArray} The data after final processing.\n\t *\n\t * @example\n\t *\n\t * var encrypted = cipher.finalize();\n\t * var encrypted = cipher.finalize('data');\n\t * var encrypted = cipher.finalize(wordArray);\n\t */\n\t finalize: function (dataUpdate) {\n\t // Final data update\n\t if (dataUpdate) {\n\t this._append(dataUpdate);\n\t }\n\n\t // Perform concrete-cipher logic\n\t var finalProcessedData = this._doFinalize();\n\n\t return finalProcessedData;\n\t },\n\n\t keySize: 128/32,\n\n\t ivSize: 128/32,\n\n\t _ENC_XFORM_MODE: 1,\n\n\t _DEC_XFORM_MODE: 2,\n\n\t /**\n\t * Creates shortcut functions to a cipher's object interface.\n\t *\n\t * @param {Cipher} cipher The cipher to create a helper for.\n\t *\n\t * @return {Object} An object with encrypt and decrypt shortcut functions.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var AES = CryptoJS.lib.Cipher._createHelper(CryptoJS.algo.AES);\n\t */\n\t _createHelper: (function () {\n\t function selectCipherStrategy(key) {\n\t if (typeof key == 'string') {\n\t return PasswordBasedCipher;\n\t } else {\n\t return SerializableCipher;\n\t }\n\t }\n\n\t return function (cipher) {\n\t return {\n\t encrypt: function (message, key, cfg) {\n\t return selectCipherStrategy(key).encrypt(cipher, message, key, cfg);\n\t },\n\n\t decrypt: function (ciphertext, key, cfg) {\n\t return selectCipherStrategy(key).decrypt(cipher, ciphertext, key, cfg);\n\t }\n\t };\n\t };\n\t }())\n\t });\n\n\t /**\n\t * Abstract base stream cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 1 (32 bits)\n\t */\n\t var StreamCipher = C_lib.StreamCipher = Cipher.extend({\n\t _doFinalize: function () {\n\t // Process partial blocks\n\t var finalProcessedBlocks = this._process(!!'flush');\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 1\n\t });\n\n\t /**\n\t * Mode namespace.\n\t */\n\t var C_mode = C.mode = {};\n\n\t /**\n\t * Abstract base block cipher mode template.\n\t */\n\t var BlockCipherMode = C_lib.BlockCipherMode = Base.extend({\n\t /**\n\t * Creates this mode for encryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createEncryptor(cipher, iv.words);\n\t */\n\t createEncryptor: function (cipher, iv) {\n\t return this.Encryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Creates this mode for decryption.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.createDecryptor(cipher, iv.words);\n\t */\n\t createDecryptor: function (cipher, iv) {\n\t return this.Decryptor.create(cipher, iv);\n\t },\n\n\t /**\n\t * Initializes a newly created mode.\n\t *\n\t * @param {Cipher} cipher A block cipher instance.\n\t * @param {Array} iv The IV words.\n\t *\n\t * @example\n\t *\n\t * var mode = CryptoJS.mode.CBC.Encryptor.create(cipher, iv.words);\n\t */\n\t init: function (cipher, iv) {\n\t this._cipher = cipher;\n\t this._iv = iv;\n\t }\n\t });\n\n\t /**\n\t * Cipher Block Chaining mode.\n\t */\n\t var CBC = C_mode.CBC = (function () {\n\t /**\n\t * Abstract base CBC mode.\n\t */\n\t var CBC = BlockCipherMode.extend();\n\n\t /**\n\t * CBC encryptor.\n\t */\n\t CBC.Encryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // XOR and encrypt\n\t xorBlock.call(this, words, offset, blockSize);\n\t cipher.encryptBlock(words, offset);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t /**\n\t * CBC decryptor.\n\t */\n\t CBC.Decryptor = CBC.extend({\n\t /**\n\t * Processes the data block at offset.\n\t *\n\t * @param {Array} words The data words to operate on.\n\t * @param {number} offset The offset where the block starts.\n\t *\n\t * @example\n\t *\n\t * mode.processBlock(data.words, offset);\n\t */\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t // Decrypt and XOR\n\t cipher.decryptBlock(words, offset);\n\t xorBlock.call(this, words, offset, blockSize);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function xorBlock(words, offset, blockSize) {\n\t var block;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Choose mixing block\n\t if (iv) {\n\t block = iv;\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t block = this._prevBlock;\n\t }\n\n\t // XOR blocks\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= block[i];\n\t }\n\t }\n\n\t return CBC;\n\t }());\n\n\t /**\n\t * Padding namespace.\n\t */\n\t var C_pad = C.pad = {};\n\n\t /**\n\t * PKCS #5/7 padding strategy.\n\t */\n\t var Pkcs7 = C_pad.Pkcs7 = {\n\t /**\n\t * Pads data using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to pad.\n\t * @param {number} blockSize The multiple that the data should be padded to.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.pad(wordArray, 4);\n\t */\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Create padding word\n\t var paddingWord = (nPaddingBytes << 24) | (nPaddingBytes << 16) | (nPaddingBytes << 8) | nPaddingBytes;\n\n\t // Create padding\n\t var paddingWords = [];\n\t for (var i = 0; i < nPaddingBytes; i += 4) {\n\t paddingWords.push(paddingWord);\n\t }\n\t var padding = WordArray.create(paddingWords, nPaddingBytes);\n\n\t // Add padding\n\t data.concat(padding);\n\t },\n\n\t /**\n\t * Unpads data that had been padded using the algorithm defined in PKCS #5/7.\n\t *\n\t * @param {WordArray} data The data to unpad.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * CryptoJS.pad.Pkcs7.unpad(wordArray);\n\t */\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t };\n\n\t /**\n\t * Abstract base block cipher template.\n\t *\n\t * @property {number} blockSize The number of 32-bit words this cipher operates on. Default: 4 (128 bits)\n\t */\n\t var BlockCipher = C_lib.BlockCipher = Cipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Mode} mode The block mode to use. Default: CBC\n\t * @property {Padding} padding The padding strategy to use. Default: Pkcs7\n\t */\n\t cfg: Cipher.cfg.extend({\n\t mode: CBC,\n\t padding: Pkcs7\n\t }),\n\n\t reset: function () {\n\t var modeCreator;\n\n\t // Reset cipher\n\t Cipher.reset.call(this);\n\n\t // Shortcuts\n\t var cfg = this.cfg;\n\t var iv = cfg.iv;\n\t var mode = cfg.mode;\n\n\t // Reset block mode\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t modeCreator = mode.createEncryptor;\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t modeCreator = mode.createDecryptor;\n\t // Keep at least one block in the buffer for unpadding\n\t this._minBufferSize = 1;\n\t }\n\n\t if (this._mode && this._mode.__creator == modeCreator) {\n\t this._mode.init(this, iv && iv.words);\n\t } else {\n\t this._mode = modeCreator.call(mode, this, iv && iv.words);\n\t this._mode.__creator = modeCreator;\n\t }\n\t },\n\n\t _doProcessBlock: function (words, offset) {\n\t this._mode.processBlock(words, offset);\n\t },\n\n\t _doFinalize: function () {\n\t var finalProcessedBlocks;\n\n\t // Shortcut\n\t var padding = this.cfg.padding;\n\n\t // Finalize\n\t if (this._xformMode == this._ENC_XFORM_MODE) {\n\t // Pad data\n\t padding.pad(this._data, this.blockSize);\n\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\t } else /* if (this._xformMode == this._DEC_XFORM_MODE) */ {\n\t // Process final blocks\n\t finalProcessedBlocks = this._process(!!'flush');\n\n\t // Unpad data\n\t padding.unpad(finalProcessedBlocks);\n\t }\n\n\t return finalProcessedBlocks;\n\t },\n\n\t blockSize: 128/32\n\t });\n\n\t /**\n\t * A collection of cipher parameters.\n\t *\n\t * @property {WordArray} ciphertext The raw ciphertext.\n\t * @property {WordArray} key The key to this ciphertext.\n\t * @property {WordArray} iv The IV used in the ciphering operation.\n\t * @property {WordArray} salt The salt used with a key derivation function.\n\t * @property {Cipher} algorithm The cipher algorithm.\n\t * @property {Mode} mode The block mode used in the ciphering operation.\n\t * @property {Padding} padding The padding scheme used in the ciphering operation.\n\t * @property {number} blockSize The block size of the cipher.\n\t * @property {Format} formatter The default formatting strategy to convert this cipher params object to a string.\n\t */\n\t var CipherParams = C_lib.CipherParams = Base.extend({\n\t /**\n\t * Initializes a newly created cipher params object.\n\t *\n\t * @param {Object} cipherParams An object with any of the possible cipher parameters.\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.lib.CipherParams.create({\n\t * ciphertext: ciphertextWordArray,\n\t * key: keyWordArray,\n\t * iv: ivWordArray,\n\t * salt: saltWordArray,\n\t * algorithm: CryptoJS.algo.AES,\n\t * mode: CryptoJS.mode.CBC,\n\t * padding: CryptoJS.pad.PKCS7,\n\t * blockSize: 4,\n\t * formatter: CryptoJS.format.OpenSSL\n\t * });\n\t */\n\t init: function (cipherParams) {\n\t this.mixIn(cipherParams);\n\t },\n\n\t /**\n\t * Converts this cipher params object to a string.\n\t *\n\t * @param {Format} formatter (Optional) The formatting strategy to use.\n\t *\n\t * @return {string} The stringified cipher params.\n\t *\n\t * @throws Error If neither the formatter nor the default formatter is set.\n\t *\n\t * @example\n\t *\n\t * var string = cipherParams + '';\n\t * var string = cipherParams.toString();\n\t * var string = cipherParams.toString(CryptoJS.format.OpenSSL);\n\t */\n\t toString: function (formatter) {\n\t return (formatter || this.formatter).stringify(this);\n\t }\n\t });\n\n\t /**\n\t * Format namespace.\n\t */\n\t var C_format = C.format = {};\n\n\t /**\n\t * OpenSSL formatting strategy.\n\t */\n\t var OpenSSLFormatter = C_format.OpenSSL = {\n\t /**\n\t * Converts a cipher params object to an OpenSSL-compatible string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The OpenSSL-compatible string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var openSSLString = CryptoJS.format.OpenSSL.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t var wordArray;\n\n\t // Shortcuts\n\t var ciphertext = cipherParams.ciphertext;\n\t var salt = cipherParams.salt;\n\n\t // Format\n\t if (salt) {\n\t wordArray = WordArray.create([0x53616c74, 0x65645f5f]).concat(salt).concat(ciphertext);\n\t } else {\n\t wordArray = ciphertext;\n\t }\n\n\t return wordArray.toString(Base64);\n\t },\n\n\t /**\n\t * Converts an OpenSSL-compatible string to a cipher params object.\n\t *\n\t * @param {string} openSSLStr The OpenSSL-compatible string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.OpenSSL.parse(openSSLString);\n\t */\n\t parse: function (openSSLStr) {\n\t var salt;\n\n\t // Parse base64\n\t var ciphertext = Base64.parse(openSSLStr);\n\n\t // Shortcut\n\t var ciphertextWords = ciphertext.words;\n\n\t // Test for salt\n\t if (ciphertextWords[0] == 0x53616c74 && ciphertextWords[1] == 0x65645f5f) {\n\t // Extract salt\n\t salt = WordArray.create(ciphertextWords.slice(2, 4));\n\n\t // Remove salt from ciphertext\n\t ciphertextWords.splice(0, 4);\n\t ciphertext.sigBytes -= 16;\n\t }\n\n\t return CipherParams.create({ ciphertext: ciphertext, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A cipher wrapper that returns ciphertext as a serializable cipher params object.\n\t */\n\t var SerializableCipher = C_lib.SerializableCipher = Base.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {Formatter} format The formatting strategy to convert cipher param objects to and from a string. Default: OpenSSL\n\t */\n\t cfg: Base.extend({\n\t format: OpenSSLFormatter\n\t }),\n\n\t /**\n\t * Encrypts a message.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key);\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv });\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher.encrypt(CryptoJS.algo.AES, message, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Encrypt\n\t var encryptor = cipher.createEncryptor(key, cfg);\n\t var ciphertext = encryptor.finalize(message);\n\n\t // Shortcut\n\t var cipherCfg = encryptor.cfg;\n\n\t // Create and return serializable cipher params\n\t return CipherParams.create({\n\t ciphertext: ciphertext,\n\t key: key,\n\t iv: cipherCfg.iv,\n\t algorithm: cipher,\n\t mode: cipherCfg.mode,\n\t padding: cipherCfg.padding,\n\t blockSize: cipher.blockSize,\n\t formatter: cfg.format\n\t });\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {WordArray} key The key.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.SerializableCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, key, { iv: iv, format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, key, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Decrypt\n\t var plaintext = cipher.createDecryptor(key, cfg).finalize(ciphertext.ciphertext);\n\n\t return plaintext;\n\t },\n\n\t /**\n\t * Converts serialized ciphertext to CipherParams,\n\t * else assumed CipherParams already and returns ciphertext unchanged.\n\t *\n\t * @param {CipherParams|string} ciphertext The ciphertext.\n\t * @param {Formatter} format The formatting strategy to use to parse serialized ciphertext.\n\t *\n\t * @return {CipherParams} The unserialized ciphertext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.SerializableCipher._parse(ciphertextStringOrParams, format);\n\t */\n\t _parse: function (ciphertext, format) {\n\t if (typeof ciphertext == 'string') {\n\t return format.parse(ciphertext, this);\n\t } else {\n\t return ciphertext;\n\t }\n\t }\n\t });\n\n\t /**\n\t * Key derivation function namespace.\n\t */\n\t var C_kdf = C.kdf = {};\n\n\t /**\n\t * OpenSSL key derivation function.\n\t */\n\t var OpenSSLKdf = C_kdf.OpenSSL = {\n\t /**\n\t * Derives a key and IV from a password.\n\t *\n\t * @param {string} password The password to derive from.\n\t * @param {number} keySize The size in words of the key to generate.\n\t * @param {number} ivSize The size in words of the IV to generate.\n\t * @param {WordArray|string} salt (Optional) A 64-bit salt to use. If omitted, a salt will be generated randomly.\n\t *\n\t * @return {CipherParams} A cipher params object with the key, IV, and salt.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32);\n\t * var derivedParams = CryptoJS.kdf.OpenSSL.execute('Password', 256/32, 128/32, 'saltsalt');\n\t */\n\t execute: function (password, keySize, ivSize, salt, hasher) {\n\t // Generate random salt\n\t if (!salt) {\n\t salt = WordArray.random(64/8);\n\t }\n\n\t // Derive key and IV\n\t if (!hasher) {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize }).compute(password, salt);\n\t } else {\n\t var key = EvpKDF.create({ keySize: keySize + ivSize, hasher: hasher }).compute(password, salt);\n\t }\n\n\n\t // Separate key and IV\n\t var iv = WordArray.create(key.words.slice(keySize), ivSize * 4);\n\t key.sigBytes = keySize * 4;\n\n\t // Return params\n\t return CipherParams.create({ key: key, iv: iv, salt: salt });\n\t }\n\t };\n\n\t /**\n\t * A serializable cipher wrapper that derives the key from a password,\n\t * and returns ciphertext as a serializable cipher params object.\n\t */\n\t var PasswordBasedCipher = C_lib.PasswordBasedCipher = SerializableCipher.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {KDF} kdf The key derivation function to use to generate a key and IV from a password. Default: OpenSSL\n\t */\n\t cfg: SerializableCipher.cfg.extend({\n\t kdf: OpenSSLKdf\n\t }),\n\n\t /**\n\t * Encrypts a message using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {WordArray|string} message The message to encrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {CipherParams} A cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password');\n\t * var ciphertextParams = CryptoJS.lib.PasswordBasedCipher.encrypt(CryptoJS.algo.AES, message, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t encrypt: function (cipher, message, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, cfg.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Encrypt\n\t var ciphertext = SerializableCipher.encrypt.call(this, cipher, message, derivedParams.key, cfg);\n\n\t // Mix in derived params\n\t ciphertext.mixIn(derivedParams);\n\n\t return ciphertext;\n\t },\n\n\t /**\n\t * Decrypts serialized ciphertext using a password.\n\t *\n\t * @param {Cipher} cipher The cipher algorithm to use.\n\t * @param {CipherParams|string} ciphertext The ciphertext to decrypt.\n\t * @param {string} password The password.\n\t * @param {Object} cfg (Optional) The configuration options to use for this operation.\n\t *\n\t * @return {WordArray} The plaintext.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, formattedCiphertext, 'password', { format: CryptoJS.format.OpenSSL });\n\t * var plaintext = CryptoJS.lib.PasswordBasedCipher.decrypt(CryptoJS.algo.AES, ciphertextParams, 'password', { format: CryptoJS.format.OpenSSL });\n\t */\n\t decrypt: function (cipher, ciphertext, password, cfg) {\n\t // Apply config defaults\n\t cfg = this.cfg.extend(cfg);\n\n\t // Convert string to CipherParams\n\t ciphertext = this._parse(ciphertext, cfg.format);\n\n\t // Derive key and other params\n\t var derivedParams = cfg.kdf.execute(password, cipher.keySize, cipher.ivSize, ciphertext.salt, cfg.hasher);\n\n\t // Add IV to config\n\t cfg.iv = derivedParams.iv;\n\n\t // Decrypt\n\t var plaintext = SerializableCipher.decrypt.call(this, cipher, ciphertext, derivedParams.key, cfg);\n\n\t return plaintext;\n\t }\n\t });\n\t}());\n\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Cipher Feedback block mode.\n\t */\n\tCryptoJS.mode.CFB = (function () {\n\t var CFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t CFB.Encryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // Remember this block to use with next block\n\t this._prevBlock = words.slice(offset, offset + blockSize);\n\t }\n\t });\n\n\t CFB.Decryptor = CFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher;\n\t var blockSize = cipher.blockSize;\n\n\t // Remember this block to use with next block\n\t var thisBlock = words.slice(offset, offset + blockSize);\n\n\t generateKeystreamAndEncrypt.call(this, words, offset, blockSize, cipher);\n\n\t // This block becomes the previous block\n\t this._prevBlock = thisBlock;\n\t }\n\t });\n\n\t function generateKeystreamAndEncrypt(words, offset, blockSize, cipher) {\n\t var keystream;\n\n\t // Shortcut\n\t var iv = this._iv;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t } else {\n\t keystream = this._prevBlock;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\n\t return CFB;\n\t}());\n\n\n\treturn CryptoJS.mode.CFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Counter block mode.\n\t */\n\tCryptoJS.mode.CTR = (function () {\n\t var CTR = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = CTR.Encryptor = CTR.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t var keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Increment counter\n\t counter[blockSize - 1] = (counter[blockSize - 1] + 1) | 0\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTR.Decryptor = Encryptor;\n\n\t return CTR;\n\t}());\n\n\n\treturn CryptoJS.mode.CTR;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/** @preserve\n\t * Counter block mode compatible with Dr Brian Gladman fileenc.c\n\t * derived from CryptoJS.mode.CTR\n\t * Jan Hruby jhruby.web@gmail.com\n\t */\n\tCryptoJS.mode.CTRGladman = (function () {\n\t var CTRGladman = CryptoJS.lib.BlockCipherMode.extend();\n\n\t\tfunction incWord(word)\n\t\t{\n\t\t\tif (((word >> 24) & 0xff) === 0xff) { //overflow\n\t\t\tvar b1 = (word >> 16)&0xff;\n\t\t\tvar b2 = (word >> 8)&0xff;\n\t\t\tvar b3 = word & 0xff;\n\n\t\t\tif (b1 === 0xff) // overflow b1\n\t\t\t{\n\t\t\tb1 = 0;\n\t\t\tif (b2 === 0xff)\n\t\t\t{\n\t\t\t\tb2 = 0;\n\t\t\t\tif (b3 === 0xff)\n\t\t\t\t{\n\t\t\t\t\tb3 = 0;\n\t\t\t\t}\n\t\t\t\telse\n\t\t\t\t{\n\t\t\t\t\t++b3;\n\t\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t\t++b2;\n\t\t\t}\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\t++b1;\n\t\t\t}\n\n\t\t\tword = 0;\n\t\t\tword += (b1 << 16);\n\t\t\tword += (b2 << 8);\n\t\t\tword += b3;\n\t\t\t}\n\t\t\telse\n\t\t\t{\n\t\t\tword += (0x01 << 24);\n\t\t\t}\n\t\t\treturn word;\n\t\t}\n\n\t\tfunction incCounter(counter)\n\t\t{\n\t\t\tif ((counter[0] = incWord(counter[0])) === 0)\n\t\t\t{\n\t\t\t\t// encr_data in fileenc.c from Dr Brian Gladman's counts only with DWORD j < 8\n\t\t\t\tcounter[1] = incWord(counter[1]);\n\t\t\t}\n\t\t\treturn counter;\n\t\t}\n\n\t var Encryptor = CTRGladman.Encryptor = CTRGladman.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var counter = this._counter;\n\n\t // Generate keystream\n\t if (iv) {\n\t counter = this._counter = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\n\t\t\t\tincCounter(counter);\n\n\t\t\t\tvar keystream = counter.slice(0);\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t CTRGladman.Decryptor = Encryptor;\n\n\t return CTRGladman;\n\t}());\n\n\n\n\n\treturn CryptoJS.mode.CTRGladman;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Output Feedback block mode.\n\t */\n\tCryptoJS.mode.OFB = (function () {\n\t var OFB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t var Encryptor = OFB.Encryptor = OFB.extend({\n\t processBlock: function (words, offset) {\n\t // Shortcuts\n\t var cipher = this._cipher\n\t var blockSize = cipher.blockSize;\n\t var iv = this._iv;\n\t var keystream = this._keystream;\n\n\t // Generate keystream\n\t if (iv) {\n\t keystream = this._keystream = iv.slice(0);\n\n\t // Remove IV for subsequent blocks\n\t this._iv = undefined;\n\t }\n\t cipher.encryptBlock(keystream, 0);\n\n\t // Encrypt\n\t for (var i = 0; i < blockSize; i++) {\n\t words[offset + i] ^= keystream[i];\n\t }\n\t }\n\t });\n\n\t OFB.Decryptor = Encryptor;\n\n\t return OFB;\n\t}());\n\n\n\treturn CryptoJS.mode.OFB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Electronic Codebook block mode.\n\t */\n\tCryptoJS.mode.ECB = (function () {\n\t var ECB = CryptoJS.lib.BlockCipherMode.extend();\n\n\t ECB.Encryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.encryptBlock(words, offset);\n\t }\n\t });\n\n\t ECB.Decryptor = ECB.extend({\n\t processBlock: function (words, offset) {\n\t this._cipher.decryptBlock(words, offset);\n\t }\n\t });\n\n\t return ECB;\n\t}());\n\n\n\treturn CryptoJS.mode.ECB;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ANSI X.923 padding strategy.\n\t */\n\tCryptoJS.pad.AnsiX923 = {\n\t pad: function (data, blockSize) {\n\t // Shortcuts\n\t var dataSigBytes = data.sigBytes;\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - dataSigBytes % blockSizeBytes;\n\n\t // Compute last byte position\n\t var lastBytePos = dataSigBytes + nPaddingBytes - 1;\n\n\t // Pad\n\t data.clamp();\n\t data.words[lastBytePos >>> 2] |= nPaddingBytes << (24 - (lastBytePos % 4) * 8);\n\t data.sigBytes += nPaddingBytes;\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Ansix923;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO 10126 padding strategy.\n\t */\n\tCryptoJS.pad.Iso10126 = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Count padding bytes\n\t var nPaddingBytes = blockSizeBytes - data.sigBytes % blockSizeBytes;\n\n\t // Pad\n\t data.concat(CryptoJS.lib.WordArray.random(nPaddingBytes - 1)).\n\t concat(CryptoJS.lib.WordArray.create([nPaddingBytes << 24], 1));\n\t },\n\n\t unpad: function (data) {\n\t // Get number of padding bytes from last byte\n\t var nPaddingBytes = data.words[(data.sigBytes - 1) >>> 2] & 0xff;\n\n\t // Remove padding\n\t data.sigBytes -= nPaddingBytes;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso10126;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * ISO/IEC 9797-1 Padding Method 2.\n\t */\n\tCryptoJS.pad.Iso97971 = {\n\t pad: function (data, blockSize) {\n\t // Add 0x80 byte\n\t data.concat(CryptoJS.lib.WordArray.create([0x80000000], 1));\n\n\t // Zero pad the rest\n\t CryptoJS.pad.ZeroPadding.pad(data, blockSize);\n\t },\n\n\t unpad: function (data) {\n\t // Remove zero padding\n\t CryptoJS.pad.ZeroPadding.unpad(data);\n\n\t // Remove one more byte -- the 0x80 byte\n\t data.sigBytes--;\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.Iso97971;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * Zero padding strategy.\n\t */\n\tCryptoJS.pad.ZeroPadding = {\n\t pad: function (data, blockSize) {\n\t // Shortcut\n\t var blockSizeBytes = blockSize * 4;\n\n\t // Pad\n\t data.clamp();\n\t data.sigBytes += blockSizeBytes - ((data.sigBytes % blockSizeBytes) || blockSizeBytes);\n\t },\n\n\t unpad: function (data) {\n\t // Shortcut\n\t var dataWords = data.words;\n\n\t // Unpad\n\t var i = data.sigBytes - 1;\n\t for (var i = data.sigBytes - 1; i >= 0; i--) {\n\t if (((dataWords[i >>> 2] >>> (24 - (i % 4) * 8)) & 0xff)) {\n\t data.sigBytes = i + 1;\n\t break;\n\t }\n\t }\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.ZeroPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t/**\n\t * A noop padding strategy.\n\t */\n\tCryptoJS.pad.NoPadding = {\n\t pad: function () {\n\t },\n\n\t unpad: function () {\n\t }\n\t};\n\n\n\treturn CryptoJS.pad.NoPadding;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function (undefined) {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var CipherParams = C_lib.CipherParams;\n\t var C_enc = C.enc;\n\t var Hex = C_enc.Hex;\n\t var C_format = C.format;\n\n\t var HexFormatter = C_format.Hex = {\n\t /**\n\t * Converts the ciphertext of a cipher params object to a hexadecimally encoded string.\n\t *\n\t * @param {CipherParams} cipherParams The cipher params object.\n\t *\n\t * @return {string} The hexadecimally encoded string.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var hexString = CryptoJS.format.Hex.stringify(cipherParams);\n\t */\n\t stringify: function (cipherParams) {\n\t return cipherParams.ciphertext.toString(Hex);\n\t },\n\n\t /**\n\t * Converts a hexadecimally encoded ciphertext string to a cipher params object.\n\t *\n\t * @param {string} input The hexadecimally encoded string.\n\t *\n\t * @return {CipherParams} The cipher params object.\n\t *\n\t * @static\n\t *\n\t * @example\n\t *\n\t * var cipherParams = CryptoJS.format.Hex.parse(hexString);\n\t */\n\t parse: function (input) {\n\t var ciphertext = Hex.parse(input);\n\t return CipherParams.create({ ciphertext: ciphertext });\n\t }\n\t };\n\t}());\n\n\n\treturn CryptoJS.format.Hex;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Lookup tables\n\t var SBOX = [];\n\t var INV_SBOX = [];\n\t var SUB_MIX_0 = [];\n\t var SUB_MIX_1 = [];\n\t var SUB_MIX_2 = [];\n\t var SUB_MIX_3 = [];\n\t var INV_SUB_MIX_0 = [];\n\t var INV_SUB_MIX_1 = [];\n\t var INV_SUB_MIX_2 = [];\n\t var INV_SUB_MIX_3 = [];\n\n\t // Compute lookup tables\n\t (function () {\n\t // Compute double table\n\t var d = [];\n\t for (var i = 0; i < 256; i++) {\n\t if (i < 128) {\n\t d[i] = i << 1;\n\t } else {\n\t d[i] = (i << 1) ^ 0x11b;\n\t }\n\t }\n\n\t // Walk GF(2^8)\n\t var x = 0;\n\t var xi = 0;\n\t for (var i = 0; i < 256; i++) {\n\t // Compute sbox\n\t var sx = xi ^ (xi << 1) ^ (xi << 2) ^ (xi << 3) ^ (xi << 4);\n\t sx = (sx >>> 8) ^ (sx & 0xff) ^ 0x63;\n\t SBOX[x] = sx;\n\t INV_SBOX[sx] = x;\n\n\t // Compute multiplication\n\t var x2 = d[x];\n\t var x4 = d[x2];\n\t var x8 = d[x4];\n\n\t // Compute sub bytes, mix columns tables\n\t var t = (d[sx] * 0x101) ^ (sx * 0x1010100);\n\t SUB_MIX_0[x] = (t << 24) | (t >>> 8);\n\t SUB_MIX_1[x] = (t << 16) | (t >>> 16);\n\t SUB_MIX_2[x] = (t << 8) | (t >>> 24);\n\t SUB_MIX_3[x] = t;\n\n\t // Compute inv sub bytes, inv mix columns tables\n\t var t = (x8 * 0x1010101) ^ (x4 * 0x10001) ^ (x2 * 0x101) ^ (x * 0x1010100);\n\t INV_SUB_MIX_0[sx] = (t << 24) | (t >>> 8);\n\t INV_SUB_MIX_1[sx] = (t << 16) | (t >>> 16);\n\t INV_SUB_MIX_2[sx] = (t << 8) | (t >>> 24);\n\t INV_SUB_MIX_3[sx] = t;\n\n\t // Compute next counter\n\t if (!x) {\n\t x = xi = 1;\n\t } else {\n\t x = x2 ^ d[d[d[x8 ^ x2]]];\n\t xi ^= d[d[xi]];\n\t }\n\t }\n\t }());\n\n\t // Precomputed Rcon lookup\n\t var RCON = [0x00, 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36];\n\n\t /**\n\t * AES block cipher algorithm.\n\t */\n\t var AES = C_algo.AES = BlockCipher.extend({\n\t _doReset: function () {\n\t var t;\n\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._nRounds && this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t // Compute number of rounds\n\t var nRounds = this._nRounds = keySize + 6;\n\n\t // Compute number of key schedule rows\n\t var ksRows = (nRounds + 1) * 4;\n\n\t // Compute key schedule\n\t var keySchedule = this._keySchedule = [];\n\t for (var ksRow = 0; ksRow < ksRows; ksRow++) {\n\t if (ksRow < keySize) {\n\t keySchedule[ksRow] = keyWords[ksRow];\n\t } else {\n\t t = keySchedule[ksRow - 1];\n\n\t if (!(ksRow % keySize)) {\n\t // Rot word\n\t t = (t << 8) | (t >>> 24);\n\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\n\t // Mix Rcon\n\t t ^= RCON[(ksRow / keySize) | 0] << 24;\n\t } else if (keySize > 6 && ksRow % keySize == 4) {\n\t // Sub word\n\t t = (SBOX[t >>> 24] << 24) | (SBOX[(t >>> 16) & 0xff] << 16) | (SBOX[(t >>> 8) & 0xff] << 8) | SBOX[t & 0xff];\n\t }\n\n\t keySchedule[ksRow] = keySchedule[ksRow - keySize] ^ t;\n\t }\n\t }\n\n\t // Compute inv key schedule\n\t var invKeySchedule = this._invKeySchedule = [];\n\t for (var invKsRow = 0; invKsRow < ksRows; invKsRow++) {\n\t var ksRow = ksRows - invKsRow;\n\n\t if (invKsRow % 4) {\n\t var t = keySchedule[ksRow];\n\t } else {\n\t var t = keySchedule[ksRow - 4];\n\t }\n\n\t if (invKsRow < 4 || ksRow <= 4) {\n\t invKeySchedule[invKsRow] = t;\n\t } else {\n\t invKeySchedule[invKsRow] = INV_SUB_MIX_0[SBOX[t >>> 24]] ^ INV_SUB_MIX_1[SBOX[(t >>> 16) & 0xff]] ^\n\t INV_SUB_MIX_2[SBOX[(t >>> 8) & 0xff]] ^ INV_SUB_MIX_3[SBOX[t & 0xff]];\n\t }\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t // Swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\n\t this._doCryptBlock(M, offset, this._invKeySchedule, INV_SUB_MIX_0, INV_SUB_MIX_1, INV_SUB_MIX_2, INV_SUB_MIX_3, INV_SBOX);\n\n\t // Inv swap 2nd and 4th rows\n\t var t = M[offset + 1];\n\t M[offset + 1] = M[offset + 3];\n\t M[offset + 3] = t;\n\t },\n\n\t _doCryptBlock: function (M, offset, keySchedule, SUB_MIX_0, SUB_MIX_1, SUB_MIX_2, SUB_MIX_3, SBOX) {\n\t // Shortcut\n\t var nRounds = this._nRounds;\n\n\t // Get input, add round key\n\t var s0 = M[offset] ^ keySchedule[0];\n\t var s1 = M[offset + 1] ^ keySchedule[1];\n\t var s2 = M[offset + 2] ^ keySchedule[2];\n\t var s3 = M[offset + 3] ^ keySchedule[3];\n\n\t // Key schedule row counter\n\t var ksRow = 4;\n\n\t // Rounds\n\t for (var round = 1; round < nRounds; round++) {\n\t // Shift rows, sub bytes, mix columns, add round key\n\t var t0 = SUB_MIX_0[s0 >>> 24] ^ SUB_MIX_1[(s1 >>> 16) & 0xff] ^ SUB_MIX_2[(s2 >>> 8) & 0xff] ^ SUB_MIX_3[s3 & 0xff] ^ keySchedule[ksRow++];\n\t var t1 = SUB_MIX_0[s1 >>> 24] ^ SUB_MIX_1[(s2 >>> 16) & 0xff] ^ SUB_MIX_2[(s3 >>> 8) & 0xff] ^ SUB_MIX_3[s0 & 0xff] ^ keySchedule[ksRow++];\n\t var t2 = SUB_MIX_0[s2 >>> 24] ^ SUB_MIX_1[(s3 >>> 16) & 0xff] ^ SUB_MIX_2[(s0 >>> 8) & 0xff] ^ SUB_MIX_3[s1 & 0xff] ^ keySchedule[ksRow++];\n\t var t3 = SUB_MIX_0[s3 >>> 24] ^ SUB_MIX_1[(s0 >>> 16) & 0xff] ^ SUB_MIX_2[(s1 >>> 8) & 0xff] ^ SUB_MIX_3[s2 & 0xff] ^ keySchedule[ksRow++];\n\n\t // Update state\n\t s0 = t0;\n\t s1 = t1;\n\t s2 = t2;\n\t s3 = t3;\n\t }\n\n\t // Shift rows, sub bytes, add round key\n\t var t0 = ((SBOX[s0 >>> 24] << 24) | (SBOX[(s1 >>> 16) & 0xff] << 16) | (SBOX[(s2 >>> 8) & 0xff] << 8) | SBOX[s3 & 0xff]) ^ keySchedule[ksRow++];\n\t var t1 = ((SBOX[s1 >>> 24] << 24) | (SBOX[(s2 >>> 16) & 0xff] << 16) | (SBOX[(s3 >>> 8) & 0xff] << 8) | SBOX[s0 & 0xff]) ^ keySchedule[ksRow++];\n\t var t2 = ((SBOX[s2 >>> 24] << 24) | (SBOX[(s3 >>> 16) & 0xff] << 16) | (SBOX[(s0 >>> 8) & 0xff] << 8) | SBOX[s1 & 0xff]) ^ keySchedule[ksRow++];\n\t var t3 = ((SBOX[s3 >>> 24] << 24) | (SBOX[(s0 >>> 16) & 0xff] << 16) | (SBOX[(s1 >>> 8) & 0xff] << 8) | SBOX[s2 & 0xff]) ^ keySchedule[ksRow++];\n\n\t // Set output\n\t M[offset] = t0;\n\t M[offset + 1] = t1;\n\t M[offset + 2] = t2;\n\t M[offset + 3] = t3;\n\t },\n\n\t keySize: 256/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.AES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.AES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.AES = BlockCipher._createHelper(AES);\n\t}());\n\n\n\treturn CryptoJS.AES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var WordArray = C_lib.WordArray;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t // Permuted Choice 1 constants\n\t var PC1 = [\n\t 57, 49, 41, 33, 25, 17, 9, 1,\n\t 58, 50, 42, 34, 26, 18, 10, 2,\n\t 59, 51, 43, 35, 27, 19, 11, 3,\n\t 60, 52, 44, 36, 63, 55, 47, 39,\n\t 31, 23, 15, 7, 62, 54, 46, 38,\n\t 30, 22, 14, 6, 61, 53, 45, 37,\n\t 29, 21, 13, 5, 28, 20, 12, 4\n\t ];\n\n\t // Permuted Choice 2 constants\n\t var PC2 = [\n\t 14, 17, 11, 24, 1, 5,\n\t 3, 28, 15, 6, 21, 10,\n\t 23, 19, 12, 4, 26, 8,\n\t 16, 7, 27, 20, 13, 2,\n\t 41, 52, 31, 37, 47, 55,\n\t 30, 40, 51, 45, 33, 48,\n\t 44, 49, 39, 56, 34, 53,\n\t 46, 42, 50, 36, 29, 32\n\t ];\n\n\t // Cumulative bit shift constants\n\t var BIT_SHIFTS = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28];\n\n\t // SBOXes and round permutation constants\n\t var SBOX_P = [\n\t {\n\t 0x0: 0x808200,\n\t 0x10000000: 0x8000,\n\t 0x20000000: 0x808002,\n\t 0x30000000: 0x2,\n\t 0x40000000: 0x200,\n\t 0x50000000: 0x808202,\n\t 0x60000000: 0x800202,\n\t 0x70000000: 0x800000,\n\t 0x80000000: 0x202,\n\t 0x90000000: 0x800200,\n\t 0xa0000000: 0x8200,\n\t 0xb0000000: 0x808000,\n\t 0xc0000000: 0x8002,\n\t 0xd0000000: 0x800002,\n\t 0xe0000000: 0x0,\n\t 0xf0000000: 0x8202,\n\t 0x8000000: 0x0,\n\t 0x18000000: 0x808202,\n\t 0x28000000: 0x8202,\n\t 0x38000000: 0x8000,\n\t 0x48000000: 0x808200,\n\t 0x58000000: 0x200,\n\t 0x68000000: 0x808002,\n\t 0x78000000: 0x2,\n\t 0x88000000: 0x800200,\n\t 0x98000000: 0x8200,\n\t 0xa8000000: 0x808000,\n\t 0xb8000000: 0x800202,\n\t 0xc8000000: 0x800002,\n\t 0xd8000000: 0x8002,\n\t 0xe8000000: 0x202,\n\t 0xf8000000: 0x800000,\n\t 0x1: 0x8000,\n\t 0x10000001: 0x2,\n\t 0x20000001: 0x808200,\n\t 0x30000001: 0x800000,\n\t 0x40000001: 0x808002,\n\t 0x50000001: 0x8200,\n\t 0x60000001: 0x200,\n\t 0x70000001: 0x800202,\n\t 0x80000001: 0x808202,\n\t 0x90000001: 0x808000,\n\t 0xa0000001: 0x800002,\n\t 0xb0000001: 0x8202,\n\t 0xc0000001: 0x202,\n\t 0xd0000001: 0x800200,\n\t 0xe0000001: 0x8002,\n\t 0xf0000001: 0x0,\n\t 0x8000001: 0x808202,\n\t 0x18000001: 0x808000,\n\t 0x28000001: 0x800000,\n\t 0x38000001: 0x200,\n\t 0x48000001: 0x8000,\n\t 0x58000001: 0x800002,\n\t 0x68000001: 0x2,\n\t 0x78000001: 0x8202,\n\t 0x88000001: 0x8002,\n\t 0x98000001: 0x800202,\n\t 0xa8000001: 0x202,\n\t 0xb8000001: 0x808200,\n\t 0xc8000001: 0x800200,\n\t 0xd8000001: 0x0,\n\t 0xe8000001: 0x8200,\n\t 0xf8000001: 0x808002\n\t },\n\t {\n\t 0x0: 0x40084010,\n\t 0x1000000: 0x4000,\n\t 0x2000000: 0x80000,\n\t 0x3000000: 0x40080010,\n\t 0x4000000: 0x40000010,\n\t 0x5000000: 0x40084000,\n\t 0x6000000: 0x40004000,\n\t 0x7000000: 0x10,\n\t 0x8000000: 0x84000,\n\t 0x9000000: 0x40004010,\n\t 0xa000000: 0x40000000,\n\t 0xb000000: 0x84010,\n\t 0xc000000: 0x80010,\n\t 0xd000000: 0x0,\n\t 0xe000000: 0x4010,\n\t 0xf000000: 0x40080000,\n\t 0x800000: 0x40004000,\n\t 0x1800000: 0x84010,\n\t 0x2800000: 0x10,\n\t 0x3800000: 0x40004010,\n\t 0x4800000: 0x40084010,\n\t 0x5800000: 0x40000000,\n\t 0x6800000: 0x80000,\n\t 0x7800000: 0x40080010,\n\t 0x8800000: 0x80010,\n\t 0x9800000: 0x0,\n\t 0xa800000: 0x4000,\n\t 0xb800000: 0x40080000,\n\t 0xc800000: 0x40000010,\n\t 0xd800000: 0x84000,\n\t 0xe800000: 0x40084000,\n\t 0xf800000: 0x4010,\n\t 0x10000000: 0x0,\n\t 0x11000000: 0x40080010,\n\t 0x12000000: 0x40004010,\n\t 0x13000000: 0x40084000,\n\t 0x14000000: 0x40080000,\n\t 0x15000000: 0x10,\n\t 0x16000000: 0x84010,\n\t 0x17000000: 0x4000,\n\t 0x18000000: 0x4010,\n\t 0x19000000: 0x80000,\n\t 0x1a000000: 0x80010,\n\t 0x1b000000: 0x40000010,\n\t 0x1c000000: 0x84000,\n\t 0x1d000000: 0x40004000,\n\t 0x1e000000: 0x40000000,\n\t 0x1f000000: 0x40084010,\n\t 0x10800000: 0x84010,\n\t 0x11800000: 0x80000,\n\t 0x12800000: 0x40080000,\n\t 0x13800000: 0x4000,\n\t 0x14800000: 0x40004000,\n\t 0x15800000: 0x40084010,\n\t 0x16800000: 0x10,\n\t 0x17800000: 0x40000000,\n\t 0x18800000: 0x40084000,\n\t 0x19800000: 0x40000010,\n\t 0x1a800000: 0x40004010,\n\t 0x1b800000: 0x80010,\n\t 0x1c800000: 0x0,\n\t 0x1d800000: 0x4010,\n\t 0x1e800000: 0x40080010,\n\t 0x1f800000: 0x84000\n\t },\n\t {\n\t 0x0: 0x104,\n\t 0x100000: 0x0,\n\t 0x200000: 0x4000100,\n\t 0x300000: 0x10104,\n\t 0x400000: 0x10004,\n\t 0x500000: 0x4000004,\n\t 0x600000: 0x4010104,\n\t 0x700000: 0x4010000,\n\t 0x800000: 0x4000000,\n\t 0x900000: 0x4010100,\n\t 0xa00000: 0x10100,\n\t 0xb00000: 0x4010004,\n\t 0xc00000: 0x4000104,\n\t 0xd00000: 0x10000,\n\t 0xe00000: 0x4,\n\t 0xf00000: 0x100,\n\t 0x80000: 0x4010100,\n\t 0x180000: 0x4010004,\n\t 0x280000: 0x0,\n\t 0x380000: 0x4000100,\n\t 0x480000: 0x4000004,\n\t 0x580000: 0x10000,\n\t 0x680000: 0x10004,\n\t 0x780000: 0x104,\n\t 0x880000: 0x4,\n\t 0x980000: 0x100,\n\t 0xa80000: 0x4010000,\n\t 0xb80000: 0x10104,\n\t 0xc80000: 0x10100,\n\t 0xd80000: 0x4000104,\n\t 0xe80000: 0x4010104,\n\t 0xf80000: 0x4000000,\n\t 0x1000000: 0x4010100,\n\t 0x1100000: 0x10004,\n\t 0x1200000: 0x10000,\n\t 0x1300000: 0x4000100,\n\t 0x1400000: 0x100,\n\t 0x1500000: 0x4010104,\n\t 0x1600000: 0x4000004,\n\t 0x1700000: 0x0,\n\t 0x1800000: 0x4000104,\n\t 0x1900000: 0x4000000,\n\t 0x1a00000: 0x4,\n\t 0x1b00000: 0x10100,\n\t 0x1c00000: 0x4010000,\n\t 0x1d00000: 0x104,\n\t 0x1e00000: 0x10104,\n\t 0x1f00000: 0x4010004,\n\t 0x1080000: 0x4000000,\n\t 0x1180000: 0x104,\n\t 0x1280000: 0x4010100,\n\t 0x1380000: 0x0,\n\t 0x1480000: 0x10004,\n\t 0x1580000: 0x4000100,\n\t 0x1680000: 0x100,\n\t 0x1780000: 0x4010004,\n\t 0x1880000: 0x10000,\n\t 0x1980000: 0x4010104,\n\t 0x1a80000: 0x10104,\n\t 0x1b80000: 0x4000004,\n\t 0x1c80000: 0x4000104,\n\t 0x1d80000: 0x4010000,\n\t 0x1e80000: 0x4,\n\t 0x1f80000: 0x10100\n\t },\n\t {\n\t 0x0: 0x80401000,\n\t 0x10000: 0x80001040,\n\t 0x20000: 0x401040,\n\t 0x30000: 0x80400000,\n\t 0x40000: 0x0,\n\t 0x50000: 0x401000,\n\t 0x60000: 0x80000040,\n\t 0x70000: 0x400040,\n\t 0x80000: 0x80000000,\n\t 0x90000: 0x400000,\n\t 0xa0000: 0x40,\n\t 0xb0000: 0x80001000,\n\t 0xc0000: 0x80400040,\n\t 0xd0000: 0x1040,\n\t 0xe0000: 0x1000,\n\t 0xf0000: 0x80401040,\n\t 0x8000: 0x80001040,\n\t 0x18000: 0x40,\n\t 0x28000: 0x80400040,\n\t 0x38000: 0x80001000,\n\t 0x48000: 0x401000,\n\t 0x58000: 0x80401040,\n\t 0x68000: 0x0,\n\t 0x78000: 0x80400000,\n\t 0x88000: 0x1000,\n\t 0x98000: 0x80401000,\n\t 0xa8000: 0x400000,\n\t 0xb8000: 0x1040,\n\t 0xc8000: 0x80000000,\n\t 0xd8000: 0x400040,\n\t 0xe8000: 0x401040,\n\t 0xf8000: 0x80000040,\n\t 0x100000: 0x400040,\n\t 0x110000: 0x401000,\n\t 0x120000: 0x80000040,\n\t 0x130000: 0x0,\n\t 0x140000: 0x1040,\n\t 0x150000: 0x80400040,\n\t 0x160000: 0x80401000,\n\t 0x170000: 0x80001040,\n\t 0x180000: 0x80401040,\n\t 0x190000: 0x80000000,\n\t 0x1a0000: 0x80400000,\n\t 0x1b0000: 0x401040,\n\t 0x1c0000: 0x80001000,\n\t 0x1d0000: 0x400000,\n\t 0x1e0000: 0x40,\n\t 0x1f0000: 0x1000,\n\t 0x108000: 0x80400000,\n\t 0x118000: 0x80401040,\n\t 0x128000: 0x0,\n\t 0x138000: 0x401000,\n\t 0x148000: 0x400040,\n\t 0x158000: 0x80000000,\n\t 0x168000: 0x80001040,\n\t 0x178000: 0x40,\n\t 0x188000: 0x80000040,\n\t 0x198000: 0x1000,\n\t 0x1a8000: 0x80001000,\n\t 0x1b8000: 0x80400040,\n\t 0x1c8000: 0x1040,\n\t 0x1d8000: 0x80401000,\n\t 0x1e8000: 0x400000,\n\t 0x1f8000: 0x401040\n\t },\n\t {\n\t 0x0: 0x80,\n\t 0x1000: 0x1040000,\n\t 0x2000: 0x40000,\n\t 0x3000: 0x20000000,\n\t 0x4000: 0x20040080,\n\t 0x5000: 0x1000080,\n\t 0x6000: 0x21000080,\n\t 0x7000: 0x40080,\n\t 0x8000: 0x1000000,\n\t 0x9000: 0x20040000,\n\t 0xa000: 0x20000080,\n\t 0xb000: 0x21040080,\n\t 0xc000: 0x21040000,\n\t 0xd000: 0x0,\n\t 0xe000: 0x1040080,\n\t 0xf000: 0x21000000,\n\t 0x800: 0x1040080,\n\t 0x1800: 0x21000080,\n\t 0x2800: 0x80,\n\t 0x3800: 0x1040000,\n\t 0x4800: 0x40000,\n\t 0x5800: 0x20040080,\n\t 0x6800: 0x21040000,\n\t 0x7800: 0x20000000,\n\t 0x8800: 0x20040000,\n\t 0x9800: 0x0,\n\t 0xa800: 0x21040080,\n\t 0xb800: 0x1000080,\n\t 0xc800: 0x20000080,\n\t 0xd800: 0x21000000,\n\t 0xe800: 0x1000000,\n\t 0xf800: 0x40080,\n\t 0x10000: 0x40000,\n\t 0x11000: 0x80,\n\t 0x12000: 0x20000000,\n\t 0x13000: 0x21000080,\n\t 0x14000: 0x1000080,\n\t 0x15000: 0x21040000,\n\t 0x16000: 0x20040080,\n\t 0x17000: 0x1000000,\n\t 0x18000: 0x21040080,\n\t 0x19000: 0x21000000,\n\t 0x1a000: 0x1040000,\n\t 0x1b000: 0x20040000,\n\t 0x1c000: 0x40080,\n\t 0x1d000: 0x20000080,\n\t 0x1e000: 0x0,\n\t 0x1f000: 0x1040080,\n\t 0x10800: 0x21000080,\n\t 0x11800: 0x1000000,\n\t 0x12800: 0x1040000,\n\t 0x13800: 0x20040080,\n\t 0x14800: 0x20000000,\n\t 0x15800: 0x1040080,\n\t 0x16800: 0x80,\n\t 0x17800: 0x21040000,\n\t 0x18800: 0x40080,\n\t 0x19800: 0x21040080,\n\t 0x1a800: 0x0,\n\t 0x1b800: 0x21000000,\n\t 0x1c800: 0x1000080,\n\t 0x1d800: 0x40000,\n\t 0x1e800: 0x20040000,\n\t 0x1f800: 0x20000080\n\t },\n\t {\n\t 0x0: 0x10000008,\n\t 0x100: 0x2000,\n\t 0x200: 0x10200000,\n\t 0x300: 0x10202008,\n\t 0x400: 0x10002000,\n\t 0x500: 0x200000,\n\t 0x600: 0x200008,\n\t 0x700: 0x10000000,\n\t 0x800: 0x0,\n\t 0x900: 0x10002008,\n\t 0xa00: 0x202000,\n\t 0xb00: 0x8,\n\t 0xc00: 0x10200008,\n\t 0xd00: 0x202008,\n\t 0xe00: 0x2008,\n\t 0xf00: 0x10202000,\n\t 0x80: 0x10200000,\n\t 0x180: 0x10202008,\n\t 0x280: 0x8,\n\t 0x380: 0x200000,\n\t 0x480: 0x202008,\n\t 0x580: 0x10000008,\n\t 0x680: 0x10002000,\n\t 0x780: 0x2008,\n\t 0x880: 0x200008,\n\t 0x980: 0x2000,\n\t 0xa80: 0x10002008,\n\t 0xb80: 0x10200008,\n\t 0xc80: 0x0,\n\t 0xd80: 0x10202000,\n\t 0xe80: 0x202000,\n\t 0xf80: 0x10000000,\n\t 0x1000: 0x10002000,\n\t 0x1100: 0x10200008,\n\t 0x1200: 0x10202008,\n\t 0x1300: 0x2008,\n\t 0x1400: 0x200000,\n\t 0x1500: 0x10000000,\n\t 0x1600: 0x10000008,\n\t 0x1700: 0x202000,\n\t 0x1800: 0x202008,\n\t 0x1900: 0x0,\n\t 0x1a00: 0x8,\n\t 0x1b00: 0x10200000,\n\t 0x1c00: 0x2000,\n\t 0x1d00: 0x10002008,\n\t 0x1e00: 0x10202000,\n\t 0x1f00: 0x200008,\n\t 0x1080: 0x8,\n\t 0x1180: 0x202000,\n\t 0x1280: 0x200000,\n\t 0x1380: 0x10000008,\n\t 0x1480: 0x10002000,\n\t 0x1580: 0x2008,\n\t 0x1680: 0x10202008,\n\t 0x1780: 0x10200000,\n\t 0x1880: 0x10202000,\n\t 0x1980: 0x10200008,\n\t 0x1a80: 0x2000,\n\t 0x1b80: 0x202008,\n\t 0x1c80: 0x200008,\n\t 0x1d80: 0x0,\n\t 0x1e80: 0x10000000,\n\t 0x1f80: 0x10002008\n\t },\n\t {\n\t 0x0: 0x100000,\n\t 0x10: 0x2000401,\n\t 0x20: 0x400,\n\t 0x30: 0x100401,\n\t 0x40: 0x2100401,\n\t 0x50: 0x0,\n\t 0x60: 0x1,\n\t 0x70: 0x2100001,\n\t 0x80: 0x2000400,\n\t 0x90: 0x100001,\n\t 0xa0: 0x2000001,\n\t 0xb0: 0x2100400,\n\t 0xc0: 0x2100000,\n\t 0xd0: 0x401,\n\t 0xe0: 0x100400,\n\t 0xf0: 0x2000000,\n\t 0x8: 0x2100001,\n\t 0x18: 0x0,\n\t 0x28: 0x2000401,\n\t 0x38: 0x2100400,\n\t 0x48: 0x100000,\n\t 0x58: 0x2000001,\n\t 0x68: 0x2000000,\n\t 0x78: 0x401,\n\t 0x88: 0x100401,\n\t 0x98: 0x2000400,\n\t 0xa8: 0x2100000,\n\t 0xb8: 0x100001,\n\t 0xc8: 0x400,\n\t 0xd8: 0x2100401,\n\t 0xe8: 0x1,\n\t 0xf8: 0x100400,\n\t 0x100: 0x2000000,\n\t 0x110: 0x100000,\n\t 0x120: 0x2000401,\n\t 0x130: 0x2100001,\n\t 0x140: 0x100001,\n\t 0x150: 0x2000400,\n\t 0x160: 0x2100400,\n\t 0x170: 0x100401,\n\t 0x180: 0x401,\n\t 0x190: 0x2100401,\n\t 0x1a0: 0x100400,\n\t 0x1b0: 0x1,\n\t 0x1c0: 0x0,\n\t 0x1d0: 0x2100000,\n\t 0x1e0: 0x2000001,\n\t 0x1f0: 0x400,\n\t 0x108: 0x100400,\n\t 0x118: 0x2000401,\n\t 0x128: 0x2100001,\n\t 0x138: 0x1,\n\t 0x148: 0x2000000,\n\t 0x158: 0x100000,\n\t 0x168: 0x401,\n\t 0x178: 0x2100400,\n\t 0x188: 0x2000001,\n\t 0x198: 0x2100000,\n\t 0x1a8: 0x0,\n\t 0x1b8: 0x2100401,\n\t 0x1c8: 0x100401,\n\t 0x1d8: 0x400,\n\t 0x1e8: 0x2000400,\n\t 0x1f8: 0x100001\n\t },\n\t {\n\t 0x0: 0x8000820,\n\t 0x1: 0x20000,\n\t 0x2: 0x8000000,\n\t 0x3: 0x20,\n\t 0x4: 0x20020,\n\t 0x5: 0x8020820,\n\t 0x6: 0x8020800,\n\t 0x7: 0x800,\n\t 0x8: 0x8020000,\n\t 0x9: 0x8000800,\n\t 0xa: 0x20800,\n\t 0xb: 0x8020020,\n\t 0xc: 0x820,\n\t 0xd: 0x0,\n\t 0xe: 0x8000020,\n\t 0xf: 0x20820,\n\t 0x80000000: 0x800,\n\t 0x80000001: 0x8020820,\n\t 0x80000002: 0x8000820,\n\t 0x80000003: 0x8000000,\n\t 0x80000004: 0x8020000,\n\t 0x80000005: 0x20800,\n\t 0x80000006: 0x20820,\n\t 0x80000007: 0x20,\n\t 0x80000008: 0x8000020,\n\t 0x80000009: 0x820,\n\t 0x8000000a: 0x20020,\n\t 0x8000000b: 0x8020800,\n\t 0x8000000c: 0x0,\n\t 0x8000000d: 0x8020020,\n\t 0x8000000e: 0x8000800,\n\t 0x8000000f: 0x20000,\n\t 0x10: 0x20820,\n\t 0x11: 0x8020800,\n\t 0x12: 0x20,\n\t 0x13: 0x800,\n\t 0x14: 0x8000800,\n\t 0x15: 0x8000020,\n\t 0x16: 0x8020020,\n\t 0x17: 0x20000,\n\t 0x18: 0x0,\n\t 0x19: 0x20020,\n\t 0x1a: 0x8020000,\n\t 0x1b: 0x8000820,\n\t 0x1c: 0x8020820,\n\t 0x1d: 0x20800,\n\t 0x1e: 0x820,\n\t 0x1f: 0x8000000,\n\t 0x80000010: 0x20000,\n\t 0x80000011: 0x800,\n\t 0x80000012: 0x8020020,\n\t 0x80000013: 0x20820,\n\t 0x80000014: 0x20,\n\t 0x80000015: 0x8020000,\n\t 0x80000016: 0x8000000,\n\t 0x80000017: 0x8000820,\n\t 0x80000018: 0x8020820,\n\t 0x80000019: 0x8000020,\n\t 0x8000001a: 0x8000800,\n\t 0x8000001b: 0x0,\n\t 0x8000001c: 0x20800,\n\t 0x8000001d: 0x820,\n\t 0x8000001e: 0x20020,\n\t 0x8000001f: 0x8020800\n\t }\n\t ];\n\n\t // Masks that select the SBOX input\n\t var SBOX_MASK = [\n\t 0xf8000001, 0x1f800000, 0x01f80000, 0x001f8000,\n\t 0x0001f800, 0x00001f80, 0x000001f8, 0x8000001f\n\t ];\n\n\t /**\n\t * DES block cipher algorithm.\n\t */\n\t var DES = C_algo.DES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\n\t // Select 56 bits according to PC1\n\t var keyBits = [];\n\t for (var i = 0; i < 56; i++) {\n\t var keyBitPos = PC1[i] - 1;\n\t keyBits[i] = (keyWords[keyBitPos >>> 5] >>> (31 - keyBitPos % 32)) & 1;\n\t }\n\n\t // Assemble 16 subkeys\n\t var subKeys = this._subKeys = [];\n\t for (var nSubKey = 0; nSubKey < 16; nSubKey++) {\n\t // Create subkey\n\t var subKey = subKeys[nSubKey] = [];\n\n\t // Shortcut\n\t var bitShift = BIT_SHIFTS[nSubKey];\n\n\t // Select 48 bits according to PC2\n\t for (var i = 0; i < 24; i++) {\n\t // Select from the left 28 key bits\n\t subKey[(i / 6) | 0] |= keyBits[((PC2[i] - 1) + bitShift) % 28] << (31 - i % 6);\n\n\t // Select from the right 28 key bits\n\t subKey[4 + ((i / 6) | 0)] |= keyBits[28 + (((PC2[i + 24] - 1) + bitShift) % 28)] << (31 - i % 6);\n\t }\n\n\t // Since each subkey is applied to an expanded 32-bit input,\n\t // the subkey can be broken into 8 values scaled to 32-bits,\n\t // which allows the key to be used without expansion\n\t subKey[0] = (subKey[0] << 1) | (subKey[0] >>> 31);\n\t for (var i = 1; i < 7; i++) {\n\t subKey[i] = subKey[i] >>> ((i - 1) * 4 + 3);\n\t }\n\t subKey[7] = (subKey[7] << 5) | (subKey[7] >>> 27);\n\t }\n\n\t // Compute inverse subkeys\n\t var invSubKeys = this._invSubKeys = [];\n\t for (var i = 0; i < 16; i++) {\n\t invSubKeys[i] = subKeys[15 - i];\n\t }\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._subKeys);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._doCryptBlock(M, offset, this._invSubKeys);\n\t },\n\n\t _doCryptBlock: function (M, offset, subKeys) {\n\t // Get input\n\t this._lBlock = M[offset];\n\t this._rBlock = M[offset + 1];\n\n\t // Initial permutation\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeLR.call(this, 1, 0x55555555);\n\n\t // Rounds\n\t for (var round = 0; round < 16; round++) {\n\t // Shortcuts\n\t var subKey = subKeys[round];\n\t var lBlock = this._lBlock;\n\t var rBlock = this._rBlock;\n\n\t // Feistel function\n\t var f = 0;\n\t for (var i = 0; i < 8; i++) {\n\t f |= SBOX_P[i][((rBlock ^ subKey[i]) & SBOX_MASK[i]) >>> 0];\n\t }\n\t this._lBlock = rBlock;\n\t this._rBlock = lBlock ^ f;\n\t }\n\n\t // Undo swap from last round\n\t var t = this._lBlock;\n\t this._lBlock = this._rBlock;\n\t this._rBlock = t;\n\n\t // Final permutation\n\t exchangeLR.call(this, 1, 0x55555555);\n\t exchangeRL.call(this, 8, 0x00ff00ff);\n\t exchangeRL.call(this, 2, 0x33333333);\n\t exchangeLR.call(this, 16, 0x0000ffff);\n\t exchangeLR.call(this, 4, 0x0f0f0f0f);\n\n\t // Set output\n\t M[offset] = this._lBlock;\n\t M[offset + 1] = this._rBlock;\n\t },\n\n\t keySize: 64/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t // Swap bits across the left and right words\n\t function exchangeLR(offset, mask) {\n\t var t = ((this._lBlock >>> offset) ^ this._rBlock) & mask;\n\t this._rBlock ^= t;\n\t this._lBlock ^= t << offset;\n\t }\n\n\t function exchangeRL(offset, mask) {\n\t var t = ((this._rBlock >>> offset) ^ this._lBlock) & mask;\n\t this._lBlock ^= t;\n\t this._rBlock ^= t << offset;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.DES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.DES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.DES = BlockCipher._createHelper(DES);\n\n\t /**\n\t * Triple-DES block cipher algorithm.\n\t */\n\t var TripleDES = C_algo.TripleDES = BlockCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t // Make sure the key length is valid (64, 128 or >= 192 bit)\n\t if (keyWords.length !== 2 && keyWords.length !== 4 && keyWords.length < 6) {\n\t throw new Error('Invalid key length - 3DES requires the key length to be 64, 128, 192 or >192.');\n\t }\n\n\t // Extend the key according to the keying options defined in 3DES standard\n\t var key1 = keyWords.slice(0, 2);\n\t var key2 = keyWords.length < 4 ? keyWords.slice(0, 2) : keyWords.slice(2, 4);\n\t var key3 = keyWords.length < 6 ? keyWords.slice(0, 2) : keyWords.slice(4, 6);\n\n\t // Create DES instances\n\t this._des1 = DES.createEncryptor(WordArray.create(key1));\n\t this._des2 = DES.createEncryptor(WordArray.create(key2));\n\t this._des3 = DES.createEncryptor(WordArray.create(key3));\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t this._des1.encryptBlock(M, offset);\n\t this._des2.decryptBlock(M, offset);\n\t this._des3.encryptBlock(M, offset);\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t this._des3.decryptBlock(M, offset);\n\t this._des2.encryptBlock(M, offset);\n\t this._des1.decryptBlock(M, offset);\n\t },\n\n\t keySize: 192/32,\n\n\t ivSize: 64/32,\n\n\t blockSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.TripleDES.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.TripleDES.decrypt(ciphertext, key, cfg);\n\t */\n\t C.TripleDES = BlockCipher._createHelper(TripleDES);\n\t}());\n\n\n\treturn CryptoJS.TripleDES;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t /**\n\t * RC4 stream cipher algorithm.\n\t */\n\t var RC4 = C_algo.RC4 = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var key = this._key;\n\t var keyWords = key.words;\n\t var keySigBytes = key.sigBytes;\n\n\t // Init sbox\n\t var S = this._S = [];\n\t for (var i = 0; i < 256; i++) {\n\t S[i] = i;\n\t }\n\n\t // Key setup\n\t for (var i = 0, j = 0; i < 256; i++) {\n\t var keyByteIndex = i % keySigBytes;\n\t var keyByte = (keyWords[keyByteIndex >>> 2] >>> (24 - (keyByteIndex % 4) * 8)) & 0xff;\n\n\t j = (j + S[i] + keyByte) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\t }\n\n\t // Counters\n\t this._i = this._j = 0;\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t M[offset] ^= generateKeystreamWord.call(this);\n\t },\n\n\t keySize: 256/32,\n\n\t ivSize: 0\n\t });\n\n\t function generateKeystreamWord() {\n\t // Shortcuts\n\t var S = this._S;\n\t var i = this._i;\n\t var j = this._j;\n\n\t // Generate keystream word\n\t var keystreamWord = 0;\n\t for (var n = 0; n < 4; n++) {\n\t i = (i + 1) % 256;\n\t j = (j + S[i]) % 256;\n\n\t // Swap\n\t var t = S[i];\n\t S[i] = S[j];\n\t S[j] = t;\n\n\t keystreamWord |= S[(S[i] + S[j]) % 256] << (24 - n * 8);\n\t }\n\n\t // Update counters\n\t this._i = i;\n\t this._j = j;\n\n\t return keystreamWord;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4 = StreamCipher._createHelper(RC4);\n\n\t /**\n\t * Modified RC4 stream cipher algorithm.\n\t */\n\t var RC4Drop = C_algo.RC4Drop = RC4.extend({\n\t /**\n\t * Configuration options.\n\t *\n\t * @property {number} drop The number of keystream words to drop. Default 192\n\t */\n\t cfg: RC4.cfg.extend({\n\t drop: 192\n\t }),\n\n\t _doReset: function () {\n\t RC4._doReset.call(this);\n\n\t // Drop\n\t for (var i = this.cfg.drop; i > 0; i--) {\n\t generateKeystreamWord.call(this);\n\t }\n\t }\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RC4Drop.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RC4Drop.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RC4Drop = StreamCipher._createHelper(RC4Drop);\n\t}());\n\n\n\treturn CryptoJS.RC4;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm\n\t */\n\t var Rabbit = C_algo.Rabbit = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Swap endian\n\t for (var i = 0; i < 4; i++) {\n\t K[i] = (((K[i] << 8) | (K[i] >>> 24)) & 0x00ff00ff) |\n\t (((K[i] << 24) | (K[i] >>> 8)) & 0xff00ff00);\n\t }\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Rabbit.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Rabbit.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Rabbit = StreamCipher._createHelper(Rabbit);\n\t}());\n\n\n\treturn CryptoJS.Rabbit;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var StreamCipher = C_lib.StreamCipher;\n\t var C_algo = C.algo;\n\n\t // Reusable objects\n\t var S = [];\n\t var C_ = [];\n\t var G = [];\n\n\t /**\n\t * Rabbit stream cipher algorithm.\n\t *\n\t * This is a legacy version that neglected to convert the key to little-endian.\n\t * This error doesn't affect the cipher's security,\n\t * but it does affect its compatibility with other implementations.\n\t */\n\t var RabbitLegacy = C_algo.RabbitLegacy = StreamCipher.extend({\n\t _doReset: function () {\n\t // Shortcuts\n\t var K = this._key.words;\n\t var iv = this.cfg.iv;\n\n\t // Generate initial state values\n\t var X = this._X = [\n\t K[0], (K[3] << 16) | (K[2] >>> 16),\n\t K[1], (K[0] << 16) | (K[3] >>> 16),\n\t K[2], (K[1] << 16) | (K[0] >>> 16),\n\t K[3], (K[2] << 16) | (K[1] >>> 16)\n\t ];\n\n\t // Generate initial counter values\n\t var C = this._C = [\n\t (K[2] << 16) | (K[2] >>> 16), (K[0] & 0xffff0000) | (K[1] & 0x0000ffff),\n\t (K[3] << 16) | (K[3] >>> 16), (K[1] & 0xffff0000) | (K[2] & 0x0000ffff),\n\t (K[0] << 16) | (K[0] >>> 16), (K[2] & 0xffff0000) | (K[3] & 0x0000ffff),\n\t (K[1] << 16) | (K[1] >>> 16), (K[3] & 0xffff0000) | (K[0] & 0x0000ffff)\n\t ];\n\n\t // Carry bit\n\t this._b = 0;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\n\t // Modify the counters\n\t for (var i = 0; i < 8; i++) {\n\t C[i] ^= X[(i + 4) & 7];\n\t }\n\n\t // IV setup\n\t if (iv) {\n\t // Shortcuts\n\t var IV = iv.words;\n\t var IV_0 = IV[0];\n\t var IV_1 = IV[1];\n\n\t // Generate four subvectors\n\t var i0 = (((IV_0 << 8) | (IV_0 >>> 24)) & 0x00ff00ff) | (((IV_0 << 24) | (IV_0 >>> 8)) & 0xff00ff00);\n\t var i2 = (((IV_1 << 8) | (IV_1 >>> 24)) & 0x00ff00ff) | (((IV_1 << 24) | (IV_1 >>> 8)) & 0xff00ff00);\n\t var i1 = (i0 >>> 16) | (i2 & 0xffff0000);\n\t var i3 = (i2 << 16) | (i0 & 0x0000ffff);\n\n\t // Modify counter values\n\t C[0] ^= i0;\n\t C[1] ^= i1;\n\t C[2] ^= i2;\n\t C[3] ^= i3;\n\t C[4] ^= i0;\n\t C[5] ^= i1;\n\t C[6] ^= i2;\n\t C[7] ^= i3;\n\n\t // Iterate the system four times\n\t for (var i = 0; i < 4; i++) {\n\t nextState.call(this);\n\t }\n\t }\n\t },\n\n\t _doProcessBlock: function (M, offset) {\n\t // Shortcut\n\t var X = this._X;\n\n\t // Iterate the system\n\t nextState.call(this);\n\n\t // Generate four keystream words\n\t S[0] = X[0] ^ (X[5] >>> 16) ^ (X[3] << 16);\n\t S[1] = X[2] ^ (X[7] >>> 16) ^ (X[5] << 16);\n\t S[2] = X[4] ^ (X[1] >>> 16) ^ (X[7] << 16);\n\t S[3] = X[6] ^ (X[3] >>> 16) ^ (X[1] << 16);\n\n\t for (var i = 0; i < 4; i++) {\n\t // Swap endian\n\t S[i] = (((S[i] << 8) | (S[i] >>> 24)) & 0x00ff00ff) |\n\t (((S[i] << 24) | (S[i] >>> 8)) & 0xff00ff00);\n\n\t // Encrypt\n\t M[offset + i] ^= S[i];\n\t }\n\t },\n\n\t blockSize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t function nextState() {\n\t // Shortcuts\n\t var X = this._X;\n\t var C = this._C;\n\n\t // Save old counter values\n\t for (var i = 0; i < 8; i++) {\n\t C_[i] = C[i];\n\t }\n\n\t // Calculate new counter values\n\t C[0] = (C[0] + 0x4d34d34d + this._b) | 0;\n\t C[1] = (C[1] + 0xd34d34d3 + ((C[0] >>> 0) < (C_[0] >>> 0) ? 1 : 0)) | 0;\n\t C[2] = (C[2] + 0x34d34d34 + ((C[1] >>> 0) < (C_[1] >>> 0) ? 1 : 0)) | 0;\n\t C[3] = (C[3] + 0x4d34d34d + ((C[2] >>> 0) < (C_[2] >>> 0) ? 1 : 0)) | 0;\n\t C[4] = (C[4] + 0xd34d34d3 + ((C[3] >>> 0) < (C_[3] >>> 0) ? 1 : 0)) | 0;\n\t C[5] = (C[5] + 0x34d34d34 + ((C[4] >>> 0) < (C_[4] >>> 0) ? 1 : 0)) | 0;\n\t C[6] = (C[6] + 0x4d34d34d + ((C[5] >>> 0) < (C_[5] >>> 0) ? 1 : 0)) | 0;\n\t C[7] = (C[7] + 0xd34d34d3 + ((C[6] >>> 0) < (C_[6] >>> 0) ? 1 : 0)) | 0;\n\t this._b = (C[7] >>> 0) < (C_[7] >>> 0) ? 1 : 0;\n\n\t // Calculate the g-values\n\t for (var i = 0; i < 8; i++) {\n\t var gx = X[i] + C[i];\n\n\t // Construct high and low argument for squaring\n\t var ga = gx & 0xffff;\n\t var gb = gx >>> 16;\n\n\t // Calculate high and low result of squaring\n\t var gh = ((((ga * ga) >>> 17) + ga * gb) >>> 15) + gb * gb;\n\t var gl = (((gx & 0xffff0000) * gx) | 0) + (((gx & 0x0000ffff) * gx) | 0);\n\n\t // High XOR low\n\t G[i] = gh ^ gl;\n\t }\n\n\t // Calculate new state values\n\t X[0] = (G[0] + ((G[7] << 16) | (G[7] >>> 16)) + ((G[6] << 16) | (G[6] >>> 16))) | 0;\n\t X[1] = (G[1] + ((G[0] << 8) | (G[0] >>> 24)) + G[7]) | 0;\n\t X[2] = (G[2] + ((G[1] << 16) | (G[1] >>> 16)) + ((G[0] << 16) | (G[0] >>> 16))) | 0;\n\t X[3] = (G[3] + ((G[2] << 8) | (G[2] >>> 24)) + G[1]) | 0;\n\t X[4] = (G[4] + ((G[3] << 16) | (G[3] >>> 16)) + ((G[2] << 16) | (G[2] >>> 16))) | 0;\n\t X[5] = (G[5] + ((G[4] << 8) | (G[4] >>> 24)) + G[3]) | 0;\n\t X[6] = (G[6] + ((G[5] << 16) | (G[5] >>> 16)) + ((G[4] << 16) | (G[4] >>> 16))) | 0;\n\t X[7] = (G[7] + ((G[6] << 8) | (G[6] >>> 24)) + G[5]) | 0;\n\t }\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.RabbitLegacy.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.RabbitLegacy.decrypt(ciphertext, key, cfg);\n\t */\n\t C.RabbitLegacy = StreamCipher._createHelper(RabbitLegacy);\n\t}());\n\n\n\treturn CryptoJS.RabbitLegacy;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./enc-base64\"), require(\"./md5\"), require(\"./evpkdf\"), require(\"./cipher-core\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./enc-base64\", \"./md5\", \"./evpkdf\", \"./cipher-core\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\tfactory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\t(function () {\n\t // Shortcuts\n\t var C = CryptoJS;\n\t var C_lib = C.lib;\n\t var BlockCipher = C_lib.BlockCipher;\n\t var C_algo = C.algo;\n\n\t const N = 16;\n\n\t //Origin pbox and sbox, derived from PI\n\t const ORIG_P = [\n\t 0x243F6A88, 0x85A308D3, 0x13198A2E, 0x03707344,\n\t 0xA4093822, 0x299F31D0, 0x082EFA98, 0xEC4E6C89,\n\t 0x452821E6, 0x38D01377, 0xBE5466CF, 0x34E90C6C,\n\t 0xC0AC29B7, 0xC97C50DD, 0x3F84D5B5, 0xB5470917,\n\t 0x9216D5D9, 0x8979FB1B\n\t ];\n\n\t const ORIG_S = [\n\t [ 0xD1310BA6, 0x98DFB5AC, 0x2FFD72DB, 0xD01ADFB7,\n\t 0xB8E1AFED, 0x6A267E96, 0xBA7C9045, 0xF12C7F99,\n\t 0x24A19947, 0xB3916CF7, 0x0801F2E2, 0x858EFC16,\n\t 0x636920D8, 0x71574E69, 0xA458FEA3, 0xF4933D7E,\n\t 0x0D95748F, 0x728EB658, 0x718BCD58, 0x82154AEE,\n\t 0x7B54A41D, 0xC25A59B5, 0x9C30D539, 0x2AF26013,\n\t 0xC5D1B023, 0x286085F0, 0xCA417918, 0xB8DB38EF,\n\t 0x8E79DCB0, 0x603A180E, 0x6C9E0E8B, 0xB01E8A3E,\n\t 0xD71577C1, 0xBD314B27, 0x78AF2FDA, 0x55605C60,\n\t 0xE65525F3, 0xAA55AB94, 0x57489862, 0x63E81440,\n\t 0x55CA396A, 0x2AAB10B6, 0xB4CC5C34, 0x1141E8CE,\n\t 0xA15486AF, 0x7C72E993, 0xB3EE1411, 0x636FBC2A,\n\t 0x2BA9C55D, 0x741831F6, 0xCE5C3E16, 0x9B87931E,\n\t 0xAFD6BA33, 0x6C24CF5C, 0x7A325381, 0x28958677,\n\t 0x3B8F4898, 0x6B4BB9AF, 0xC4BFE81B, 0x66282193,\n\t 0x61D809CC, 0xFB21A991, 0x487CAC60, 0x5DEC8032,\n\t 0xEF845D5D, 0xE98575B1, 0xDC262302, 0xEB651B88,\n\t 0x23893E81, 0xD396ACC5, 0x0F6D6FF3, 0x83F44239,\n\t 0x2E0B4482, 0xA4842004, 0x69C8F04A, 0x9E1F9B5E,\n\t 0x21C66842, 0xF6E96C9A, 0x670C9C61, 0xABD388F0,\n\t 0x6A51A0D2, 0xD8542F68, 0x960FA728, 0xAB5133A3,\n\t 0x6EEF0B6C, 0x137A3BE4, 0xBA3BF050, 0x7EFB2A98,\n\t 0xA1F1651D, 0x39AF0176, 0x66CA593E, 0x82430E88,\n\t 0x8CEE8619, 0x456F9FB4, 0x7D84A5C3, 0x3B8B5EBE,\n\t 0xE06F75D8, 0x85C12073, 0x401A449F, 0x56C16AA6,\n\t 0x4ED3AA62, 0x363F7706, 0x1BFEDF72, 0x429B023D,\n\t 0x37D0D724, 0xD00A1248, 0xDB0FEAD3, 0x49F1C09B,\n\t 0x075372C9, 0x80991B7B, 0x25D479D8, 0xF6E8DEF7,\n\t 0xE3FE501A, 0xB6794C3B, 0x976CE0BD, 0x04C006BA,\n\t 0xC1A94FB6, 0x409F60C4, 0x5E5C9EC2, 0x196A2463,\n\t 0x68FB6FAF, 0x3E6C53B5, 0x1339B2EB, 0x3B52EC6F,\n\t 0x6DFC511F, 0x9B30952C, 0xCC814544, 0xAF5EBD09,\n\t 0xBEE3D004, 0xDE334AFD, 0x660F2807, 0x192E4BB3,\n\t 0xC0CBA857, 0x45C8740F, 0xD20B5F39, 0xB9D3FBDB,\n\t 0x5579C0BD, 0x1A60320A, 0xD6A100C6, 0x402C7279,\n\t 0x679F25FE, 0xFB1FA3CC, 0x8EA5E9F8, 0xDB3222F8,\n\t 0x3C7516DF, 0xFD616B15, 0x2F501EC8, 0xAD0552AB,\n\t 0x323DB5FA, 0xFD238760, 0x53317B48, 0x3E00DF82,\n\t 0x9E5C57BB, 0xCA6F8CA0, 0x1A87562E, 0xDF1769DB,\n\t 0xD542A8F6, 0x287EFFC3, 0xAC6732C6, 0x8C4F5573,\n\t 0x695B27B0, 0xBBCA58C8, 0xE1FFA35D, 0xB8F011A0,\n\t 0x10FA3D98, 0xFD2183B8, 0x4AFCB56C, 0x2DD1D35B,\n\t 0x9A53E479, 0xB6F84565, 0xD28E49BC, 0x4BFB9790,\n\t 0xE1DDF2DA, 0xA4CB7E33, 0x62FB1341, 0xCEE4C6E8,\n\t 0xEF20CADA, 0x36774C01, 0xD07E9EFE, 0x2BF11FB4,\n\t 0x95DBDA4D, 0xAE909198, 0xEAAD8E71, 0x6B93D5A0,\n\t 0xD08ED1D0, 0xAFC725E0, 0x8E3C5B2F, 0x8E7594B7,\n\t 0x8FF6E2FB, 0xF2122B64, 0x8888B812, 0x900DF01C,\n\t 0x4FAD5EA0, 0x688FC31C, 0xD1CFF191, 0xB3A8C1AD,\n\t 0x2F2F2218, 0xBE0E1777, 0xEA752DFE, 0x8B021FA1,\n\t 0xE5A0CC0F, 0xB56F74E8, 0x18ACF3D6, 0xCE89E299,\n\t 0xB4A84FE0, 0xFD13E0B7, 0x7CC43B81, 0xD2ADA8D9,\n\t 0x165FA266, 0x80957705, 0x93CC7314, 0x211A1477,\n\t 0xE6AD2065, 0x77B5FA86, 0xC75442F5, 0xFB9D35CF,\n\t 0xEBCDAF0C, 0x7B3E89A0, 0xD6411BD3, 0xAE1E7E49,\n\t 0x00250E2D, 0x2071B35E, 0x226800BB, 0x57B8E0AF,\n\t 0x2464369B, 0xF009B91E, 0x5563911D, 0x59DFA6AA,\n\t 0x78C14389, 0xD95A537F, 0x207D5BA2, 0x02E5B9C5,\n\t 0x83260376, 0x6295CFA9, 0x11C81968, 0x4E734A41,\n\t 0xB3472DCA, 0x7B14A94A, 0x1B510052, 0x9A532915,\n\t 0xD60F573F, 0xBC9BC6E4, 0x2B60A476, 0x81E67400,\n\t 0x08BA6FB5, 0x571BE91F, 0xF296EC6B, 0x2A0DD915,\n\t 0xB6636521, 0xE7B9F9B6, 0xFF34052E, 0xC5855664,\n\t 0x53B02D5D, 0xA99F8FA1, 0x08BA4799, 0x6E85076A ],\n\t [ 0x4B7A70E9, 0xB5B32944, 0xDB75092E, 0xC4192623,\n\t 0xAD6EA6B0, 0x49A7DF7D, 0x9CEE60B8, 0x8FEDB266,\n\t 0xECAA8C71, 0x699A17FF, 0x5664526C, 0xC2B19EE1,\n\t 0x193602A5, 0x75094C29, 0xA0591340, 0xE4183A3E,\n\t 0x3F54989A, 0x5B429D65, 0x6B8FE4D6, 0x99F73FD6,\n\t 0xA1D29C07, 0xEFE830F5, 0x4D2D38E6, 0xF0255DC1,\n\t 0x4CDD2086, 0x8470EB26, 0x6382E9C6, 0x021ECC5E,\n\t 0x09686B3F, 0x3EBAEFC9, 0x3C971814, 0x6B6A70A1,\n\t 0x687F3584, 0x52A0E286, 0xB79C5305, 0xAA500737,\n\t 0x3E07841C, 0x7FDEAE5C, 0x8E7D44EC, 0x5716F2B8,\n\t 0xB03ADA37, 0xF0500C0D, 0xF01C1F04, 0x0200B3FF,\n\t 0xAE0CF51A, 0x3CB574B2, 0x25837A58, 0xDC0921BD,\n\t 0xD19113F9, 0x7CA92FF6, 0x94324773, 0x22F54701,\n\t 0x3AE5E581, 0x37C2DADC, 0xC8B57634, 0x9AF3DDA7,\n\t 0xA9446146, 0x0FD0030E, 0xECC8C73E, 0xA4751E41,\n\t 0xE238CD99, 0x3BEA0E2F, 0x3280BBA1, 0x183EB331,\n\t 0x4E548B38, 0x4F6DB908, 0x6F420D03, 0xF60A04BF,\n\t 0x2CB81290, 0x24977C79, 0x5679B072, 0xBCAF89AF,\n\t 0xDE9A771F, 0xD9930810, 0xB38BAE12, 0xDCCF3F2E,\n\t 0x5512721F, 0x2E6B7124, 0x501ADDE6, 0x9F84CD87,\n\t 0x7A584718, 0x7408DA17, 0xBC9F9ABC, 0xE94B7D8C,\n\t 0xEC7AEC3A, 0xDB851DFA, 0x63094366, 0xC464C3D2,\n\t 0xEF1C1847, 0x3215D908, 0xDD433B37, 0x24C2BA16,\n\t 0x12A14D43, 0x2A65C451, 0x50940002, 0x133AE4DD,\n\t 0x71DFF89E, 0x10314E55, 0x81AC77D6, 0x5F11199B,\n\t 0x043556F1, 0xD7A3C76B, 0x3C11183B, 0x5924A509,\n\t 0xF28FE6ED, 0x97F1FBFA, 0x9EBABF2C, 0x1E153C6E,\n\t 0x86E34570, 0xEAE96FB1, 0x860E5E0A, 0x5A3E2AB3,\n\t 0x771FE71C, 0x4E3D06FA, 0x2965DCB9, 0x99E71D0F,\n\t 0x803E89D6, 0x5266C825, 0x2E4CC978, 0x9C10B36A,\n\t 0xC6150EBA, 0x94E2EA78, 0xA5FC3C53, 0x1E0A2DF4,\n\t 0xF2F74EA7, 0x361D2B3D, 0x1939260F, 0x19C27960,\n\t 0x5223A708, 0xF71312B6, 0xEBADFE6E, 0xEAC31F66,\n\t 0xE3BC4595, 0xA67BC883, 0xB17F37D1, 0x018CFF28,\n\t 0xC332DDEF, 0xBE6C5AA5, 0x65582185, 0x68AB9802,\n\t 0xEECEA50F, 0xDB2F953B, 0x2AEF7DAD, 0x5B6E2F84,\n\t 0x1521B628, 0x29076170, 0xECDD4775, 0x619F1510,\n\t 0x13CCA830, 0xEB61BD96, 0x0334FE1E, 0xAA0363CF,\n\t 0xB5735C90, 0x4C70A239, 0xD59E9E0B, 0xCBAADE14,\n\t 0xEECC86BC, 0x60622CA7, 0x9CAB5CAB, 0xB2F3846E,\n\t 0x648B1EAF, 0x19BDF0CA, 0xA02369B9, 0x655ABB50,\n\t 0x40685A32, 0x3C2AB4B3, 0x319EE9D5, 0xC021B8F7,\n\t 0x9B540B19, 0x875FA099, 0x95F7997E, 0x623D7DA8,\n\t 0xF837889A, 0x97E32D77, 0x11ED935F, 0x16681281,\n\t 0x0E358829, 0xC7E61FD6, 0x96DEDFA1, 0x7858BA99,\n\t 0x57F584A5, 0x1B227263, 0x9B83C3FF, 0x1AC24696,\n\t 0xCDB30AEB, 0x532E3054, 0x8FD948E4, 0x6DBC3128,\n\t 0x58EBF2EF, 0x34C6FFEA, 0xFE28ED61, 0xEE7C3C73,\n\t 0x5D4A14D9, 0xE864B7E3, 0x42105D14, 0x203E13E0,\n\t 0x45EEE2B6, 0xA3AAABEA, 0xDB6C4F15, 0xFACB4FD0,\n\t 0xC742F442, 0xEF6ABBB5, 0x654F3B1D, 0x41CD2105,\n\t 0xD81E799E, 0x86854DC7, 0xE44B476A, 0x3D816250,\n\t 0xCF62A1F2, 0x5B8D2646, 0xFC8883A0, 0xC1C7B6A3,\n\t 0x7F1524C3, 0x69CB7492, 0x47848A0B, 0x5692B285,\n\t 0x095BBF00, 0xAD19489D, 0x1462B174, 0x23820E00,\n\t 0x58428D2A, 0x0C55F5EA, 0x1DADF43E, 0x233F7061,\n\t 0x3372F092, 0x8D937E41, 0xD65FECF1, 0x6C223BDB,\n\t 0x7CDE3759, 0xCBEE7460, 0x4085F2A7, 0xCE77326E,\n\t 0xA6078084, 0x19F8509E, 0xE8EFD855, 0x61D99735,\n\t 0xA969A7AA, 0xC50C06C2, 0x5A04ABFC, 0x800BCADC,\n\t 0x9E447A2E, 0xC3453484, 0xFDD56705, 0x0E1E9EC9,\n\t 0xDB73DBD3, 0x105588CD, 0x675FDA79, 0xE3674340,\n\t 0xC5C43465, 0x713E38D8, 0x3D28F89E, 0xF16DFF20,\n\t 0x153E21E7, 0x8FB03D4A, 0xE6E39F2B, 0xDB83ADF7 ],\n\t [ 0xE93D5A68, 0x948140F7, 0xF64C261C, 0x94692934,\n\t 0x411520F7, 0x7602D4F7, 0xBCF46B2E, 0xD4A20068,\n\t 0xD4082471, 0x3320F46A, 0x43B7D4B7, 0x500061AF,\n\t 0x1E39F62E, 0x97244546, 0x14214F74, 0xBF8B8840,\n\t 0x4D95FC1D, 0x96B591AF, 0x70F4DDD3, 0x66A02F45,\n\t 0xBFBC09EC, 0x03BD9785, 0x7FAC6DD0, 0x31CB8504,\n\t 0x96EB27B3, 0x55FD3941, 0xDA2547E6, 0xABCA0A9A,\n\t 0x28507825, 0x530429F4, 0x0A2C86DA, 0xE9B66DFB,\n\t 0x68DC1462, 0xD7486900, 0x680EC0A4, 0x27A18DEE,\n\t 0x4F3FFEA2, 0xE887AD8C, 0xB58CE006, 0x7AF4D6B6,\n\t 0xAACE1E7C, 0xD3375FEC, 0xCE78A399, 0x406B2A42,\n\t 0x20FE9E35, 0xD9F385B9, 0xEE39D7AB, 0x3B124E8B,\n\t 0x1DC9FAF7, 0x4B6D1856, 0x26A36631, 0xEAE397B2,\n\t 0x3A6EFA74, 0xDD5B4332, 0x6841E7F7, 0xCA7820FB,\n\t 0xFB0AF54E, 0xD8FEB397, 0x454056AC, 0xBA489527,\n\t 0x55533A3A, 0x20838D87, 0xFE6BA9B7, 0xD096954B,\n\t 0x55A867BC, 0xA1159A58, 0xCCA92963, 0x99E1DB33,\n\t 0xA62A4A56, 0x3F3125F9, 0x5EF47E1C, 0x9029317C,\n\t 0xFDF8E802, 0x04272F70, 0x80BB155C, 0x05282CE3,\n\t 0x95C11548, 0xE4C66D22, 0x48C1133F, 0xC70F86DC,\n\t 0x07F9C9EE, 0x41041F0F, 0x404779A4, 0x5D886E17,\n\t 0x325F51EB, 0xD59BC0D1, 0xF2BCC18F, 0x41113564,\n\t 0x257B7834, 0x602A9C60, 0xDFF8E8A3, 0x1F636C1B,\n\t 0x0E12B4C2, 0x02E1329E, 0xAF664FD1, 0xCAD18115,\n\t 0x6B2395E0, 0x333E92E1, 0x3B240B62, 0xEEBEB922,\n\t 0x85B2A20E, 0xE6BA0D99, 0xDE720C8C, 0x2DA2F728,\n\t 0xD0127845, 0x95B794FD, 0x647D0862, 0xE7CCF5F0,\n\t 0x5449A36F, 0x877D48FA, 0xC39DFD27, 0xF33E8D1E,\n\t 0x0A476341, 0x992EFF74, 0x3A6F6EAB, 0xF4F8FD37,\n\t 0xA812DC60, 0xA1EBDDF8, 0x991BE14C, 0xDB6E6B0D,\n\t 0xC67B5510, 0x6D672C37, 0x2765D43B, 0xDCD0E804,\n\t 0xF1290DC7, 0xCC00FFA3, 0xB5390F92, 0x690FED0B,\n\t 0x667B9FFB, 0xCEDB7D9C, 0xA091CF0B, 0xD9155EA3,\n\t 0xBB132F88, 0x515BAD24, 0x7B9479BF, 0x763BD6EB,\n\t 0x37392EB3, 0xCC115979, 0x8026E297, 0xF42E312D,\n\t 0x6842ADA7, 0xC66A2B3B, 0x12754CCC, 0x782EF11C,\n\t 0x6A124237, 0xB79251E7, 0x06A1BBE6, 0x4BFB6350,\n\t 0x1A6B1018, 0x11CAEDFA, 0x3D25BDD8, 0xE2E1C3C9,\n\t 0x44421659, 0x0A121386, 0xD90CEC6E, 0xD5ABEA2A,\n\t 0x64AF674E, 0xDA86A85F, 0xBEBFE988, 0x64E4C3FE,\n\t 0x9DBC8057, 0xF0F7C086, 0x60787BF8, 0x6003604D,\n\t 0xD1FD8346, 0xF6381FB0, 0x7745AE04, 0xD736FCCC,\n\t 0x83426B33, 0xF01EAB71, 0xB0804187, 0x3C005E5F,\n\t 0x77A057BE, 0xBDE8AE24, 0x55464299, 0xBF582E61,\n\t 0x4E58F48F, 0xF2DDFDA2, 0xF474EF38, 0x8789BDC2,\n\t 0x5366F9C3, 0xC8B38E74, 0xB475F255, 0x46FCD9B9,\n\t 0x7AEB2661, 0x8B1DDF84, 0x846A0E79, 0x915F95E2,\n\t 0x466E598E, 0x20B45770, 0x8CD55591, 0xC902DE4C,\n\t 0xB90BACE1, 0xBB8205D0, 0x11A86248, 0x7574A99E,\n\t 0xB77F19B6, 0xE0A9DC09, 0x662D09A1, 0xC4324633,\n\t 0xE85A1F02, 0x09F0BE8C, 0x4A99A025, 0x1D6EFE10,\n\t 0x1AB93D1D, 0x0BA5A4DF, 0xA186F20F, 0x2868F169,\n\t 0xDCB7DA83, 0x573906FE, 0xA1E2CE9B, 0x4FCD7F52,\n\t 0x50115E01, 0xA70683FA, 0xA002B5C4, 0x0DE6D027,\n\t 0x9AF88C27, 0x773F8641, 0xC3604C06, 0x61A806B5,\n\t 0xF0177A28, 0xC0F586E0, 0x006058AA, 0x30DC7D62,\n\t 0x11E69ED7, 0x2338EA63, 0x53C2DD94, 0xC2C21634,\n\t 0xBBCBEE56, 0x90BCB6DE, 0xEBFC7DA1, 0xCE591D76,\n\t 0x6F05E409, 0x4B7C0188, 0x39720A3D, 0x7C927C24,\n\t 0x86E3725F, 0x724D9DB9, 0x1AC15BB4, 0xD39EB8FC,\n\t 0xED545578, 0x08FCA5B5, 0xD83D7CD3, 0x4DAD0FC4,\n\t 0x1E50EF5E, 0xB161E6F8, 0xA28514D9, 0x6C51133C,\n\t 0x6FD5C7E7, 0x56E14EC4, 0x362ABFCE, 0xDDC6C837,\n\t 0xD79A3234, 0x92638212, 0x670EFA8E, 0x406000E0 ],\n\t [ 0x3A39CE37, 0xD3FAF5CF, 0xABC27737, 0x5AC52D1B,\n\t 0x5CB0679E, 0x4FA33742, 0xD3822740, 0x99BC9BBE,\n\t 0xD5118E9D, 0xBF0F7315, 0xD62D1C7E, 0xC700C47B,\n\t 0xB78C1B6B, 0x21A19045, 0xB26EB1BE, 0x6A366EB4,\n\t 0x5748AB2F, 0xBC946E79, 0xC6A376D2, 0x6549C2C8,\n\t 0x530FF8EE, 0x468DDE7D, 0xD5730A1D, 0x4CD04DC6,\n\t 0x2939BBDB, 0xA9BA4650, 0xAC9526E8, 0xBE5EE304,\n\t 0xA1FAD5F0, 0x6A2D519A, 0x63EF8CE2, 0x9A86EE22,\n\t 0xC089C2B8, 0x43242EF6, 0xA51E03AA, 0x9CF2D0A4,\n\t 0x83C061BA, 0x9BE96A4D, 0x8FE51550, 0xBA645BD6,\n\t 0x2826A2F9, 0xA73A3AE1, 0x4BA99586, 0xEF5562E9,\n\t 0xC72FEFD3, 0xF752F7DA, 0x3F046F69, 0x77FA0A59,\n\t 0x80E4A915, 0x87B08601, 0x9B09E6AD, 0x3B3EE593,\n\t 0xE990FD5A, 0x9E34D797, 0x2CF0B7D9, 0x022B8B51,\n\t 0x96D5AC3A, 0x017DA67D, 0xD1CF3ED6, 0x7C7D2D28,\n\t 0x1F9F25CF, 0xADF2B89B, 0x5AD6B472, 0x5A88F54C,\n\t 0xE029AC71, 0xE019A5E6, 0x47B0ACFD, 0xED93FA9B,\n\t 0xE8D3C48D, 0x283B57CC, 0xF8D56629, 0x79132E28,\n\t 0x785F0191, 0xED756055, 0xF7960E44, 0xE3D35E8C,\n\t 0x15056DD4, 0x88F46DBA, 0x03A16125, 0x0564F0BD,\n\t 0xC3EB9E15, 0x3C9057A2, 0x97271AEC, 0xA93A072A,\n\t 0x1B3F6D9B, 0x1E6321F5, 0xF59C66FB, 0x26DCF319,\n\t 0x7533D928, 0xB155FDF5, 0x03563482, 0x8ABA3CBB,\n\t 0x28517711, 0xC20AD9F8, 0xABCC5167, 0xCCAD925F,\n\t 0x4DE81751, 0x3830DC8E, 0x379D5862, 0x9320F991,\n\t 0xEA7A90C2, 0xFB3E7BCE, 0x5121CE64, 0x774FBE32,\n\t 0xA8B6E37E, 0xC3293D46, 0x48DE5369, 0x6413E680,\n\t 0xA2AE0810, 0xDD6DB224, 0x69852DFD, 0x09072166,\n\t 0xB39A460A, 0x6445C0DD, 0x586CDECF, 0x1C20C8AE,\n\t 0x5BBEF7DD, 0x1B588D40, 0xCCD2017F, 0x6BB4E3BB,\n\t 0xDDA26A7E, 0x3A59FF45, 0x3E350A44, 0xBCB4CDD5,\n\t 0x72EACEA8, 0xFA6484BB, 0x8D6612AE, 0xBF3C6F47,\n\t 0xD29BE463, 0x542F5D9E, 0xAEC2771B, 0xF64E6370,\n\t 0x740E0D8D, 0xE75B1357, 0xF8721671, 0xAF537D5D,\n\t 0x4040CB08, 0x4EB4E2CC, 0x34D2466A, 0x0115AF84,\n\t 0xE1B00428, 0x95983A1D, 0x06B89FB4, 0xCE6EA048,\n\t 0x6F3F3B82, 0x3520AB82, 0x011A1D4B, 0x277227F8,\n\t 0x611560B1, 0xE7933FDC, 0xBB3A792B, 0x344525BD,\n\t 0xA08839E1, 0x51CE794B, 0x2F32C9B7, 0xA01FBAC9,\n\t 0xE01CC87E, 0xBCC7D1F6, 0xCF0111C3, 0xA1E8AAC7,\n\t 0x1A908749, 0xD44FBD9A, 0xD0DADECB, 0xD50ADA38,\n\t 0x0339C32A, 0xC6913667, 0x8DF9317C, 0xE0B12B4F,\n\t 0xF79E59B7, 0x43F5BB3A, 0xF2D519FF, 0x27D9459C,\n\t 0xBF97222C, 0x15E6FC2A, 0x0F91FC71, 0x9B941525,\n\t 0xFAE59361, 0xCEB69CEB, 0xC2A86459, 0x12BAA8D1,\n\t 0xB6C1075E, 0xE3056A0C, 0x10D25065, 0xCB03A442,\n\t 0xE0EC6E0E, 0x1698DB3B, 0x4C98A0BE, 0x3278E964,\n\t 0x9F1F9532, 0xE0D392DF, 0xD3A0342B, 0x8971F21E,\n\t 0x1B0A7441, 0x4BA3348C, 0xC5BE7120, 0xC37632D8,\n\t 0xDF359F8D, 0x9B992F2E, 0xE60B6F47, 0x0FE3F11D,\n\t 0xE54CDA54, 0x1EDAD891, 0xCE6279CF, 0xCD3E7E6F,\n\t 0x1618B166, 0xFD2C1D05, 0x848FD2C5, 0xF6FB2299,\n\t 0xF523F357, 0xA6327623, 0x93A83531, 0x56CCCD02,\n\t 0xACF08162, 0x5A75EBB5, 0x6E163697, 0x88D273CC,\n\t 0xDE966292, 0x81B949D0, 0x4C50901B, 0x71C65614,\n\t 0xE6C6C7BD, 0x327A140A, 0x45E1D006, 0xC3F27B9A,\n\t 0xC9AA53FD, 0x62A80F00, 0xBB25BFE2, 0x35BDD2F6,\n\t 0x71126905, 0xB2040222, 0xB6CBCF7C, 0xCD769C2B,\n\t 0x53113EC0, 0x1640E3D3, 0x38ABBD60, 0x2547ADF0,\n\t 0xBA38209C, 0xF746CE76, 0x77AFA1C5, 0x20756060,\n\t 0x85CBFE4E, 0x8AE88DD8, 0x7AAAF9B0, 0x4CF9AA7E,\n\t 0x1948C25C, 0x02FB8A8C, 0x01C36AE4, 0xD6EBE1F9,\n\t 0x90D4F869, 0xA65CDEA0, 0x3F09252D, 0xC208E69F,\n\t 0xB74E6132, 0xCE77E25B, 0x578FDFE3, 0x3AC372E6 ]\n\t ];\n\n\t var BLOWFISH_CTX = {\n\t pbox: [],\n\t sbox: []\n\t }\n\n\t function F(ctx, x){\n\t let a = (x >> 24) & 0xFF;\n\t let b = (x >> 16) & 0xFF;\n\t let c = (x >> 8) & 0xFF;\n\t let d = x & 0xFF;\n\n\t let y = ctx.sbox[0][a] + ctx.sbox[1][b];\n\t y = y ^ ctx.sbox[2][c];\n\t y = y + ctx.sbox[3][d];\n\n\t return y;\n\t }\n\n\t function BlowFish_Encrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = 0; i < N; ++i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[N];\n\t Xl = Xl ^ ctx.pbox[N + 1];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t function BlowFish_Decrypt(ctx, left, right){\n\t let Xl = left;\n\t let Xr = right;\n\t let temp;\n\n\t for(let i = N + 1; i > 1; --i){\n\t Xl = Xl ^ ctx.pbox[i];\n\t Xr = F(ctx, Xl) ^ Xr;\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\t }\n\n\t temp = Xl;\n\t Xl = Xr;\n\t Xr = temp;\n\n\t Xr = Xr ^ ctx.pbox[1];\n\t Xl = Xl ^ ctx.pbox[0];\n\n\t return {left: Xl, right: Xr};\n\t }\n\n\t /**\n\t * Initialization ctx's pbox and sbox.\n\t *\n\t * @param {Object} ctx The object has pbox and sbox.\n\t * @param {Array} key An array of 32-bit words.\n\t * @param {int} keysize The length of the key.\n\t *\n\t * @example\n\t *\n\t * BlowFishInit(BLOWFISH_CTX, key, 128/32);\n\t */\n\t function BlowFishInit(ctx, key, keysize)\n\t {\n\t for(let Row = 0; Row < 4; Row++)\n\t {\n\t ctx.sbox[Row] = [];\n\t for(let Col = 0; Col < 256; Col++)\n\t {\n\t ctx.sbox[Row][Col] = ORIG_S[Row][Col];\n\t }\n\t }\n\n\t let keyIndex = 0;\n\t for(let index = 0; index < N + 2; index++)\n\t {\n\t ctx.pbox[index] = ORIG_P[index] ^ key[keyIndex];\n\t keyIndex++;\n\t if(keyIndex >= keysize)\n\t {\n\t keyIndex = 0;\n\t }\n\t }\n\n\t let Data1 = 0;\n\t let Data2 = 0;\n\t let res = 0;\n\t for(let i = 0; i < N + 2; i += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.pbox[i] = Data1;\n\t ctx.pbox[i + 1] = Data2;\n\t }\n\n\t for(let i = 0; i < 4; i++)\n\t {\n\t for(let j = 0; j < 256; j += 2)\n\t {\n\t res = BlowFish_Encrypt(ctx, Data1, Data2);\n\t Data1 = res.left;\n\t Data2 = res.right;\n\t ctx.sbox[i][j] = Data1;\n\t ctx.sbox[i][j + 1] = Data2;\n\t }\n\t }\n\n\t return true;\n\t }\n\n\t /**\n\t * Blowfish block cipher algorithm.\n\t */\n\t var Blowfish = C_algo.Blowfish = BlockCipher.extend({\n\t _doReset: function () {\n\t // Skip reset of nRounds has been set before and key did not change\n\t if (this._keyPriorReset === this._key) {\n\t return;\n\t }\n\n\t // Shortcuts\n\t var key = this._keyPriorReset = this._key;\n\t var keyWords = key.words;\n\t var keySize = key.sigBytes / 4;\n\n\t //Initialization pbox and sbox\n\t BlowFishInit(BLOWFISH_CTX, keyWords, keySize);\n\t },\n\n\t encryptBlock: function (M, offset) {\n\t var res = BlowFish_Encrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t decryptBlock: function (M, offset) {\n\t var res = BlowFish_Decrypt(BLOWFISH_CTX, M[offset], M[offset + 1]);\n\t M[offset] = res.left;\n\t M[offset + 1] = res.right;\n\t },\n\n\t blockSize: 64/32,\n\n\t keySize: 128/32,\n\n\t ivSize: 64/32\n\t });\n\n\t /**\n\t * Shortcut functions to the cipher's object interface.\n\t *\n\t * @example\n\t *\n\t * var ciphertext = CryptoJS.Blowfish.encrypt(message, key, cfg);\n\t * var plaintext = CryptoJS.Blowfish.decrypt(ciphertext, key, cfg);\n\t */\n\t C.Blowfish = BlockCipher._createHelper(Blowfish);\n\t}());\n\n\n\treturn CryptoJS.Blowfish;\n\n}));",";(function (root, factory, undef) {\n\tif (typeof exports === \"object\") {\n\t\t// CommonJS\n\t\tmodule.exports = exports = factory(require(\"./core\"), require(\"./x64-core\"), require(\"./lib-typedarrays\"), require(\"./enc-utf16\"), require(\"./enc-base64\"), require(\"./enc-base64url\"), require(\"./md5\"), require(\"./sha1\"), require(\"./sha256\"), require(\"./sha224\"), require(\"./sha512\"), require(\"./sha384\"), require(\"./sha3\"), require(\"./ripemd160\"), require(\"./hmac\"), require(\"./pbkdf2\"), require(\"./evpkdf\"), require(\"./cipher-core\"), require(\"./mode-cfb\"), require(\"./mode-ctr\"), require(\"./mode-ctr-gladman\"), require(\"./mode-ofb\"), require(\"./mode-ecb\"), require(\"./pad-ansix923\"), require(\"./pad-iso10126\"), require(\"./pad-iso97971\"), require(\"./pad-zeropadding\"), require(\"./pad-nopadding\"), require(\"./format-hex\"), require(\"./aes\"), require(\"./tripledes\"), require(\"./rc4\"), require(\"./rabbit\"), require(\"./rabbit-legacy\"), require(\"./blowfish\"));\n\t}\n\telse if (typeof define === \"function\" && define.amd) {\n\t\t// AMD\n\t\tdefine([\"./core\", \"./x64-core\", \"./lib-typedarrays\", \"./enc-utf16\", \"./enc-base64\", \"./enc-base64url\", \"./md5\", \"./sha1\", \"./sha256\", \"./sha224\", \"./sha512\", \"./sha384\", \"./sha3\", \"./ripemd160\", \"./hmac\", \"./pbkdf2\", \"./evpkdf\", \"./cipher-core\", \"./mode-cfb\", \"./mode-ctr\", \"./mode-ctr-gladman\", \"./mode-ofb\", \"./mode-ecb\", \"./pad-ansix923\", \"./pad-iso10126\", \"./pad-iso97971\", \"./pad-zeropadding\", \"./pad-nopadding\", \"./format-hex\", \"./aes\", \"./tripledes\", \"./rc4\", \"./rabbit\", \"./rabbit-legacy\", \"./blowfish\"], factory);\n\t}\n\telse {\n\t\t// Global (browser)\n\t\troot.CryptoJS = factory(root.CryptoJS);\n\t}\n}(this, function (CryptoJS) {\n\n\treturn CryptoJS;\n\n}));","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ChannelCrypto = void 0;\nconst crypto_js_1 = require(\"crypto-js\");\nconst hex_1 = require(\"../utils/hex\");\nclass ChannelCrypto {\n /**\n * Decrypt GroupText message using MeshCore algorithm:\n * - HMAC-SHA256 verification with 2-byte MAC\n * - AES-128 ECB decryption\n */\n static decryptGroupTextMessage(ciphertext, cipherMac, channelKey) {\n try {\n // convert hex strings to byte arrays\n const channelKey16 = (0, hex_1.hexToBytes)(channelKey);\n const macBytes = (0, hex_1.hexToBytes)(cipherMac);\n // MeshCore uses 32-byte channel secret: 16-byte key + 16 zero bytes\n const channelSecret = new Uint8Array(32);\n channelSecret.set(channelKey16, 0);\n // Step 1: Verify HMAC-SHA256 using full 32-byte channel secret\n const calculatedMac = (0, crypto_js_1.HmacSHA256)(crypto_js_1.enc.Hex.parse(ciphertext), crypto_js_1.enc.Hex.parse((0, hex_1.bytesToHex)(channelSecret)));\n const calculatedMacBytes = (0, hex_1.hexToBytes)(calculatedMac.toString(crypto_js_1.enc.Hex));\n const calculatedMacFirst2 = calculatedMacBytes.slice(0, 2);\n if (calculatedMacFirst2[0] !== macBytes[0] || calculatedMacFirst2[1] !== macBytes[1]) {\n return { success: false, error: 'MAC verification failed' };\n }\n // Step 2: Decrypt using AES-128 ECB with first 16 bytes of channel secret\n const keyWords = crypto_js_1.enc.Hex.parse(channelKey);\n const ciphertextWords = crypto_js_1.enc.Hex.parse(ciphertext);\n const decrypted = crypto_js_1.AES.decrypt(crypto_js_1.lib.CipherParams.create({ ciphertext: ciphertextWords }), keyWords, { mode: crypto_js_1.mode.ECB, padding: crypto_js_1.pad.NoPadding });\n const decryptedBytes = (0, hex_1.hexToBytes)(decrypted.toString(crypto_js_1.enc.Hex));\n if (!decryptedBytes || decryptedBytes.length < 5) {\n return { success: false, error: 'Decrypted content too short' };\n }\n // parse MeshCore format: timestamp(4) + flags(1) + message_text\n const timestamp = decryptedBytes[0] |\n (decryptedBytes[1] << 8) |\n (decryptedBytes[2] << 16) |\n (decryptedBytes[3] << 24);\n const flagsAndAttempt = decryptedBytes[4];\n // extract message text with UTF-8 decoding\n const messageBytes = decryptedBytes.slice(5);\n const decoder = new TextDecoder('utf-8');\n let messageText = decoder.decode(messageBytes);\n // remove null terminator if present\n const nullIndex = messageText.indexOf('\\0');\n if (nullIndex >= 0) {\n messageText = messageText.substring(0, nullIndex);\n }\n // parse sender and message (format: \"sender: message\")\n const colonIndex = messageText.indexOf(': ');\n let sender;\n let content;\n if (colonIndex > 0 && colonIndex < 50) {\n const potentialSender = messageText.substring(0, colonIndex);\n if (!/[:\\[\\]]/.test(potentialSender)) {\n sender = potentialSender;\n content = messageText.substring(colonIndex + 2);\n }\n else {\n content = messageText;\n }\n }\n else {\n content = messageText;\n }\n return {\n success: true,\n data: {\n timestamp,\n flags: flagsAndAttempt,\n sender,\n message: content\n }\n };\n }\n catch (error) {\n return { success: false, error: error instanceof Error ? error.message : 'Decryption failed' };\n }\n }\n /**\n * Calculate MeshCore channel hash from secret key\n * Returns the first byte of SHA256(secret) as hex string\n */\n static calculateChannelHash(secretKeyHex) {\n const hash = (0, crypto_js_1.SHA256)(crypto_js_1.enc.Hex.parse(secretKeyHex));\n const hashBytes = (0, hex_1.hexToBytes)(hash.toString(crypto_js_1.enc.Hex));\n return hashBytes[0].toString(16).padStart(2, '0');\n }\n}\nexports.ChannelCrypto = ChannelCrypto;\n//# sourceMappingURL=channel-crypto.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeshCoreKeyStore = void 0;\nconst channel_crypto_1 = require(\"./channel-crypto\");\nclass MeshCoreKeyStore {\n constructor(initialKeys) {\n this.nodeKeys = new Map();\n // internal map for hash -> multiple keys (collision handling)\n this.channelHashToKeys = new Map();\n if (initialKeys?.channelSecrets) {\n this.addChannelSecrets(initialKeys.channelSecrets);\n }\n if (initialKeys?.nodeKeys) {\n Object.entries(initialKeys.nodeKeys).forEach(([pubKey, privKey]) => {\n this.addNodeKey(pubKey, privKey);\n });\n }\n }\n addNodeKey(publicKey, privateKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n this.nodeKeys.set(normalizedPubKey, privateKey);\n }\n hasChannelKey(channelHash) {\n const normalizedHash = channelHash.toLowerCase();\n return this.channelHashToKeys.has(normalizedHash);\n }\n hasNodeKey(publicKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n return this.nodeKeys.has(normalizedPubKey);\n }\n /**\n * Get all channel keys that match the given channel hash (handles collisions)\n */\n getChannelKeys(channelHash) {\n const normalizedHash = channelHash.toLowerCase();\n return this.channelHashToKeys.get(normalizedHash) || [];\n }\n getNodeKey(publicKey) {\n const normalizedPubKey = publicKey.toUpperCase();\n return this.nodeKeys.get(normalizedPubKey);\n }\n /**\n * Add channel keys by secret keys (new simplified API)\n * Automatically calculates channel hashes\n */\n addChannelSecrets(secretKeys) {\n for (const secretKey of secretKeys) {\n const channelHash = channel_crypto_1.ChannelCrypto.calculateChannelHash(secretKey).toLowerCase();\n // Handle potential hash collisions\n if (!this.channelHashToKeys.has(channelHash)) {\n this.channelHashToKeys.set(channelHash, []);\n }\n this.channelHashToKeys.get(channelHash).push(secretKey);\n }\n }\n}\nexports.MeshCoreKeyStore = MeshCoreKeyStore;\n//# sourceMappingURL=key-manager.js.map","/*! noble-ed25519 - MIT License (c) 2019 Paul Miller (paulmillr.com) */\n/**\n * 4KB JS implementation of ed25519 EdDSA signatures.\n * Compliant with RFC8032, FIPS 186-5 & ZIP215.\n * @module\n * @example\n * ```js\nimport * as ed from '@noble/ed25519';\n(async () => {\n const privKey = ed.utils.randomPrivateKey();\n const message = Uint8Array.from([0xab, 0xbc, 0xcd, 0xde]);\n const pubKey = await ed.getPublicKeyAsync(privKey); // Sync methods are also present\n const signature = await ed.signAsync(message, privKey);\n const isValid = await ed.verifyAsync(signature, message, pubKey);\n})();\n```\n */\n/**\n * Curve params. ed25519 is twisted edwards curve. Equation is −x² + y² = -a + dx²y².\n * * P = `2n**255n - 19n` // field over which calculations are done\n * * N = `2n**252n + 27742317777372353535851937790883648493n` // group order, amount of curve points\n * * h = 8 // cofactor\n * * a = `Fp.create(BigInt(-1))` // equation param\n * * d = -121665/121666 a.k.a. `Fp.neg(121665 * Fp.inv(121666))` // equation param\n * * Gx, Gy are coordinates of Generator / base point\n */\nconst ed25519_CURVE = {\n p: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffedn,\n n: 0x1000000000000000000000000000000014def9dea2f79cd65812631a5cf5d3edn,\n h: 8n,\n a: 0x7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffecn,\n d: 0x52036cee2b6ffe738cc740797779e89800700a4d4141d8ab75eb4dca135978a3n,\n Gx: 0x216936d3cd6e53fec0a4e231fdd6dc5c692cc7609525a7b2c9562d608f25d51an,\n Gy: 0x6666666666666666666666666666666666666666666666666666666666666658n,\n};\nconst { p: P, n: N, Gx, Gy, a: _a, d: _d } = ed25519_CURVE;\nconst h = 8n; // cofactor\nconst L = 32; // field / group byte length\nconst L2 = 64;\n// Helpers and Precomputes sections are reused between libraries\n// ## Helpers\n// ----------\n// error helper, messes-up stack trace\nconst err = (m = '') => {\n throw new Error(m);\n};\nconst isBig = (n) => typeof n === 'bigint'; // is big integer\nconst isStr = (s) => typeof s === 'string'; // is string\nconst isBytes = (a) => a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n/** assert is Uint8Array (of specific length) */\nconst abytes = (a, l) => !isBytes(a) || (typeof l === 'number' && l > 0 && a.length !== l)\n ? err('Uint8Array expected')\n : a;\n/** create Uint8Array */\nconst u8n = (len) => new Uint8Array(len);\nconst u8fr = (buf) => Uint8Array.from(buf);\nconst padh = (n, pad) => n.toString(16).padStart(pad, '0');\nconst bytesToHex = (b) => Array.from(abytes(b))\n .map((e) => padh(e, 2))\n .join('');\nconst C = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 }; // ASCII characters\nconst _ch = (ch) => {\n if (ch >= C._0 && ch <= C._9)\n return ch - C._0; // '2' => 50-48\n if (ch >= C.A && ch <= C.F)\n return ch - (C.A - 10); // 'B' => 66-(65-10)\n if (ch >= C.a && ch <= C.f)\n return ch - (C.a - 10); // 'b' => 98-(97-10)\n return;\n};\nconst hexToBytes = (hex) => {\n const e = 'hex invalid';\n if (!isStr(hex))\n return err(e);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n return err(e);\n const array = u8n(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n // treat each char as ASCII\n const n1 = _ch(hex.charCodeAt(hi)); // parse first char, multiply it by 16\n const n2 = _ch(hex.charCodeAt(hi + 1)); // parse second char\n if (n1 === undefined || n2 === undefined)\n return err(e);\n array[ai] = n1 * 16 + n2; // example: 'A9' => 10*16 + 9\n }\n return array;\n};\n/** normalize hex or ui8a to ui8a */\nconst toU8 = (a, len) => abytes(isStr(a) ? hexToBytes(a) : u8fr(abytes(a)), len);\nconst cr = () => globalThis?.crypto; // WebCrypto is available in all modern environments\nconst subtle = () => cr()?.subtle ?? err('crypto.subtle must be defined');\n// prettier-ignore\nconst concatBytes = (...arrs) => {\n const r = u8n(arrs.reduce((sum, a) => sum + abytes(a).length, 0)); // create u8a of summed length\n let pad = 0; // walk through each array,\n arrs.forEach(a => { r.set(a, pad); pad += a.length; }); // ensure they have proper type\n return r;\n};\n/** WebCrypto OS-level CSPRNG (random number generator). Will throw when not available. */\nconst randomBytes = (len = L) => {\n const c = cr();\n return c.getRandomValues(u8n(len));\n};\nconst big = BigInt;\nconst arange = (n, min, max, msg = 'bad number: out of range') => isBig(n) && min <= n && n < max ? n : err(msg);\n/** modular division */\nconst M = (a, b = P) => {\n const r = a % b;\n return r >= 0n ? r : b + r;\n};\nconst modN = (a) => M(a, N);\n/** Modular inversion using eucledian GCD (non-CT). No negative exponent for now. */\n// prettier-ignore\nconst invert = (num, md) => {\n if (num === 0n || md <= 0n)\n err('no inverse n=' + num + ' mod=' + md);\n let a = M(num, md), b = md, x = 0n, y = 1n, u = 1n, v = 0n;\n while (a !== 0n) {\n const q = b / a, r = b % a;\n const m = x - u * q, n = y - v * q;\n b = a, a = r, x = u, y = v, u = m, v = n;\n }\n return b === 1n ? M(x, md) : err('no inverse'); // b is gcd at this point\n};\nconst callHash = (name) => {\n // @ts-ignore\n const fn = etc[name];\n if (typeof fn !== 'function')\n err('hashes.' + name + ' not set');\n return fn;\n};\nconst apoint = (p) => (p instanceof Point ? p : err('Point expected'));\n// ## End of Helpers\n// -----------------\nconst B256 = 2n ** 256n;\n/** Point in XYZT extended coordinates. */\nclass Point {\n static BASE;\n static ZERO;\n ex;\n ey;\n ez;\n et;\n constructor(ex, ey, ez, et) {\n const max = B256;\n this.ex = arange(ex, 0n, max);\n this.ey = arange(ey, 0n, max);\n this.ez = arange(ez, 1n, max);\n this.et = arange(et, 0n, max);\n Object.freeze(this);\n }\n static fromAffine(p) {\n return new Point(p.x, p.y, 1n, M(p.x * p.y));\n }\n /** RFC8032 5.1.3: Uint8Array to Point. */\n static fromBytes(hex, zip215 = false) {\n const d = _d;\n // Copy array to not mess it up.\n const normed = u8fr(abytes(hex, L));\n // adjust first LE byte = last BE byte\n const lastByte = hex[31];\n normed[31] = lastByte & ~0x80;\n const y = bytesToNumLE(normed);\n // zip215=true: 0 <= y < 2^256\n // zip215=false, RFC8032: 0 <= y < 2^255-19\n const max = zip215 ? B256 : P;\n arange(y, 0n, max);\n const y2 = M(y * y); // y²\n const u = M(y2 - 1n); // u=y²-1\n const v = M(d * y2 + 1n); // v=dy²+1\n let { isValid, value: x } = uvRatio(u, v); // (uv³)(uv⁷)^(p-5)/8; square root\n if (!isValid)\n err('bad point: y not sqrt'); // not square root: bad point\n const isXOdd = (x & 1n) === 1n; // adjust sign of x coordinate\n const isLastByteOdd = (lastByte & 0x80) !== 0; // x_0, last bit\n if (!zip215 && x === 0n && isLastByteOdd)\n err('bad point: x==0, isLastByteOdd'); // x=0, x_0=1\n if (isLastByteOdd !== isXOdd)\n x = M(-x);\n return new Point(x, y, 1n, M(x * y)); // Z=1, T=xy\n }\n /** Checks if the point is valid and on-curve. */\n assertValidity() {\n const a = _a;\n const d = _d;\n const p = this;\n if (p.is0())\n throw new Error('bad point: ZERO'); // TODO: optimize, with vars below?\n // Equation in affine coordinates: ax² + y² = 1 + dx²y²\n // Equation in projective coordinates (X/Z, Y/Z, Z): (aX² + Y²)Z² = Z⁴ + dX²Y²\n const { ex: X, ey: Y, ez: Z, et: T } = p;\n const X2 = M(X * X); // X²\n const Y2 = M(Y * Y); // Y²\n const Z2 = M(Z * Z); // Z²\n const Z4 = M(Z2 * Z2); // Z⁴\n const aX2 = M(X2 * a); // aX²\n const left = M(Z2 * M(aX2 + Y2)); // (aX² + Y²)Z²\n const right = M(Z4 + M(d * M(X2 * Y2))); // Z⁴ + dX²Y²\n if (left !== right)\n throw new Error('bad point: equation left != right (1)');\n // In Extended coordinates we also have T, which is x*y=T/Z: check X*Y == Z*T\n const XY = M(X * Y);\n const ZT = M(Z * T);\n if (XY !== ZT)\n throw new Error('bad point: equation left != right (2)');\n return this;\n }\n /** Equality check: compare points P&Q. */\n equals(other) {\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const { ex: X2, ey: Y2, ez: Z2 } = apoint(other); // checks class equality\n const X1Z2 = M(X1 * Z2);\n const X2Z1 = M(X2 * Z1);\n const Y1Z2 = M(Y1 * Z2);\n const Y2Z1 = M(Y2 * Z1);\n return X1Z2 === X2Z1 && Y1Z2 === Y2Z1;\n }\n is0() {\n return this.equals(I);\n }\n /** Flip point over y coordinate. */\n negate() {\n return new Point(M(-this.ex), this.ey, this.ez, M(-this.et));\n }\n /** Point doubling. Complete formula. Cost: `4M + 4S + 1*a + 6add + 1*2`. */\n double() {\n const { ex: X1, ey: Y1, ez: Z1 } = this;\n const a = _a;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended.html#doubling-dbl-2008-hwcd\n const A = M(X1 * X1);\n const B = M(Y1 * Y1);\n const C = M(2n * M(Z1 * Z1));\n const D = M(a * A);\n const x1y1 = X1 + Y1;\n const E = M(M(x1y1 * x1y1) - A - B);\n const G = D + B;\n const F = G - C;\n const H = D - B;\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /** Point addition. Complete formula. Cost: `8M + 1*k + 8add + 1*2`. */\n add(other) {\n const { ex: X1, ey: Y1, ez: Z1, et: T1 } = this;\n const { ex: X2, ey: Y2, ez: Z2, et: T2 } = apoint(other); // doesn't check if other on-curve\n const a = _a;\n const d = _d;\n // https://hyperelliptic.org/EFD/g1p/auto-twisted-extended-1.html#addition-add-2008-hwcd-3\n const A = M(X1 * X2);\n const B = M(Y1 * Y2);\n const C = M(T1 * d * T2);\n const D = M(Z1 * Z2);\n const E = M((X1 + Y1) * (X2 + Y2) - A - B);\n const F = M(D - C);\n const G = M(D + C);\n const H = M(B - a * A);\n const X3 = M(E * F);\n const Y3 = M(G * H);\n const T3 = M(E * H);\n const Z3 = M(F * G);\n return new Point(X3, Y3, Z3, T3);\n }\n /**\n * Point-by-scalar multiplication. Scalar must be in range 1 <= n < CURVE.n.\n * Uses {@link wNAF} for base point.\n * Uses fake point to mitigate side-channel leakage.\n * @param n scalar by which point is multiplied\n * @param safe safe mode guards against timing attacks; unsafe mode is faster\n */\n multiply(n, safe = true) {\n if (!safe && (n === 0n || this.is0()))\n return I;\n arange(n, 1n, N);\n if (n === 1n)\n return this;\n if (this.equals(G))\n return wNAF(n).p;\n // init result point & fake point\n let p = I;\n let f = G;\n for (let d = this; n > 0n; d = d.double(), n >>= 1n) {\n // if bit is present, add to point\n // if not present, add to fake, for timing safety\n if (n & 1n)\n p = p.add(d);\n else if (safe)\n f = f.add(d);\n }\n return p;\n }\n /** Convert point to 2d xy affine point. (X, Y, Z) ∋ (x=X/Z, y=Y/Z) */\n toAffine() {\n const { ex: x, ey: y, ez: z } = this;\n // fast-paths for ZERO point OR Z=1\n if (this.equals(I))\n return { x: 0n, y: 1n };\n const iz = invert(z, P);\n // (Z * Z^-1) must be 1, otherwise bad math\n if (M(z * iz) !== 1n)\n err('invalid inverse');\n // x = X*Z^-1; y = Y*Z^-1\n return { x: M(x * iz), y: M(y * iz) };\n }\n toBytes() {\n const { x, y } = this.assertValidity().toAffine();\n const b = numTo32bLE(y);\n // store sign in first LE byte\n b[31] |= x & 1n ? 0x80 : 0;\n return b;\n }\n toHex() {\n return bytesToHex(this.toBytes());\n } // encode to hex string\n clearCofactor() {\n return this.multiply(big(h), false);\n }\n isSmallOrder() {\n return this.clearCofactor().is0();\n }\n isTorsionFree() {\n // multiply by big number CURVE.n\n let p = this.multiply(N / 2n, false).double(); // ensures the point is not \"bad\".\n if (N % 2n)\n p = p.add(this); // P^(N+1) // P*N == (P*(N/2))*2+P\n return p.is0();\n }\n static fromHex(hex, zip215) {\n return Point.fromBytes(toU8(hex), zip215);\n }\n get x() {\n return this.toAffine().x;\n }\n get y() {\n return this.toAffine().y;\n }\n toRawBytes() {\n return this.toBytes();\n }\n}\n/** Generator / base point */\nconst G = new Point(Gx, Gy, 1n, M(Gx * Gy));\n/** Identity / zero point */\nconst I = new Point(0n, 1n, 1n, 0n);\n// Static aliases\nPoint.BASE = G;\nPoint.ZERO = I;\nconst numTo32bLE = (num) => hexToBytes(padh(arange(num, 0n, B256), L2)).reverse();\nconst bytesToNumLE = (b) => big('0x' + bytesToHex(u8fr(abytes(b)).reverse()));\nconst pow2 = (x, power) => {\n // pow2(x, 4) == x^(2^4)\n let r = x;\n while (power-- > 0n) {\n r *= r;\n r %= P;\n }\n return r;\n};\n// prettier-ignore\nconst pow_2_252_3 = (x) => {\n const x2 = (x * x) % P; // x^2, bits 1\n const b2 = (x2 * x) % P; // x^3, bits 11\n const b4 = (pow2(b2, 2n) * b2) % P; // x^(2^4-1), bits 1111\n const b5 = (pow2(b4, 1n) * x) % P; // x^(2^5-1), bits 11111\n const b10 = (pow2(b5, 5n) * b5) % P; // x^(2^10)\n const b20 = (pow2(b10, 10n) * b10) % P; // x^(2^20)\n const b40 = (pow2(b20, 20n) * b20) % P; // x^(2^40)\n const b80 = (pow2(b40, 40n) * b40) % P; // x^(2^80)\n const b160 = (pow2(b80, 80n) * b80) % P; // x^(2^160)\n const b240 = (pow2(b160, 80n) * b80) % P; // x^(2^240)\n const b250 = (pow2(b240, 10n) * b10) % P; // x^(2^250)\n const pow_p_5_8 = (pow2(b250, 2n) * x) % P; // < To pow to (p+3)/8, multiply it by x.\n return { pow_p_5_8, b2 };\n};\nconst RM1 = 0x2b8324804fc1df0b2b4d00993dfbd7a72f431806ad2fe478c4ee1b274a0ea0b0n; // √-1\n// for sqrt comp\n// prettier-ignore\nconst uvRatio = (u, v) => {\n const v3 = M(v * v * v); // v³\n const v7 = M(v3 * v3 * v); // v⁷\n const pow = pow_2_252_3(u * v7).pow_p_5_8; // (uv⁷)^(p-5)/8\n let x = M(u * v3 * pow); // (uv³)(uv⁷)^(p-5)/8\n const vx2 = M(v * x * x); // vx²\n const root1 = x; // First root candidate\n const root2 = M(x * RM1); // Second root candidate; RM1 is √-1\n const useRoot1 = vx2 === u; // If vx² = u (mod p), x is a square root\n const useRoot2 = vx2 === M(-u); // If vx² = -u, set x <-- x * 2^((p-1)/4)\n const noRoot = vx2 === M(-u * RM1); // There is no valid root, vx² = -u√-1\n if (useRoot1)\n x = root1;\n if (useRoot2 || noRoot)\n x = root2; // We return root2 anyway, for const-time\n if ((M(x) & 1n) === 1n)\n x = M(-x); // edIsNegative\n return { isValid: useRoot1 || useRoot2, value: x };\n};\n// N == L, just weird naming\nconst modL_LE = (hash) => modN(bytesToNumLE(hash)); // modulo L; but little-endian\nconst sha512a = (...m) => etc.sha512Async(...m); // Async SHA512\nconst sha512s = (...m) => callHash('sha512Sync')(...m);\n// RFC8032 5.1.5\nconst hash2extK = (hashed) => {\n // slice creates a copy, unlike subarray\n const head = hashed.slice(0, L);\n head[0] &= 248; // Clamp bits: 0b1111_1000\n head[31] &= 127; // 0b0111_1111\n head[31] |= 64; // 0b0100_0000\n const prefix = hashed.slice(L, L2); // private key \"prefix\"\n const scalar = modL_LE(head); // modular division over curve order\n const point = G.multiply(scalar); // public key point\n const pointBytes = point.toBytes(); // point serialized to Uint8Array\n return { head, prefix, scalar, point, pointBytes };\n};\n// RFC8032 5.1.5; getPublicKey async, sync. Hash priv key and extract point.\nconst getExtendedPublicKeyAsync = (priv) => sha512a(toU8(priv, L)).then(hash2extK);\nconst getExtendedPublicKey = (priv) => hash2extK(sha512s(toU8(priv, L)));\n/** Creates 32-byte ed25519 public key from 32-byte private key. Async. */\nconst getPublicKeyAsync = (priv) => getExtendedPublicKeyAsync(priv).then((p) => p.pointBytes);\n/** Creates 32-byte ed25519 public key from 32-byte private key. To use, set `etc.sha512Sync` first. */\nconst getPublicKey = (priv) => getExtendedPublicKey(priv).pointBytes;\nconst hashFinishA = (res) => sha512a(res.hashable).then(res.finish);\nconst hashFinishS = (res) => res.finish(sha512s(res.hashable));\nconst _sign = (e, rBytes, msg) => {\n // sign() shared code\n const { pointBytes: P, scalar: s } = e;\n const r = modL_LE(rBytes); // r was created outside, reduce it modulo L\n const R = G.multiply(r).toBytes(); // R = [r]B\n const hashable = concatBytes(R, P, msg); // dom2(F, C) || R || A || PH(M)\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n const S = modN(r + modL_LE(hashed) * s); // S = (r + k * s) mod L; 0 <= s < l\n return abytes(concatBytes(R, numTo32bLE(S)), L2); // 64-byte sig: 32b R.x + 32b LE(S)\n };\n return { hashable, finish };\n};\n/**\n * Signs message (NOT message hash) using private key. Async.\n * Follows RFC8032 5.1.6.\n */\nconst signAsync = async (msg, privKey) => {\n const m = toU8(msg);\n const e = await getExtendedPublicKeyAsync(privKey);\n const rBytes = await sha512a(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishA(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\n/**\n * Signs message (NOT message hash) using private key. To use, set `hashes.sha512` first.\n * Follows RFC8032 5.1.6.\n */\nconst sign = (msg, privKey) => {\n const m = toU8(msg);\n const e = getExtendedPublicKey(privKey);\n const rBytes = sha512s(e.prefix, m); // r = SHA512(dom2(F, C) || prefix || PH(M))\n return hashFinishS(_sign(e, rBytes, m)); // gen R, k, S, then 64-byte signature\n};\nconst veriOpts = { zip215: true };\nconst _verify = (sig, msg, pub, opts = veriOpts) => {\n sig = toU8(sig, L2); // Signature hex str/Bytes, must be 64 bytes\n msg = toU8(msg); // Message hex str/Bytes\n pub = toU8(pub, L);\n const { zip215 } = opts; // switch between zip215 and rfc8032 verif\n let A;\n let R;\n let s;\n let SB;\n let hashable = Uint8Array.of();\n try {\n A = Point.fromHex(pub, zip215); // public key A decoded\n R = Point.fromHex(sig.slice(0, L), zip215); // 0 <= R < 2^256: ZIP215 R can be >= P\n s = bytesToNumLE(sig.slice(L, L2)); // Decode second half as an integer S\n SB = G.multiply(s, false); // in the range 0 <= s < L\n hashable = concatBytes(R.toBytes(), A.toBytes(), msg); // dom2(F, C) || R || A || PH(M)\n }\n catch (error) { }\n const finish = (hashed) => {\n // k = SHA512(dom2(F, C) || R || A || PH(M))\n if (SB == null)\n return false; // false if try-catch catched an error\n if (!zip215 && A.isSmallOrder())\n return false; // false for SBS: Strongly Binding Signature\n const k = modL_LE(hashed); // decode in little-endian, modulo L\n const RkA = R.add(A.multiply(k, false)); // [8]R + [8][k]A'\n return RkA.add(SB.negate()).clearCofactor().is0(); // [8][S]B = [8]R + [8][k]A'\n };\n return { hashable, finish };\n};\n/** Verifies signature on message and public key. Async. Follows RFC8032 5.1.7. */\nconst verifyAsync = async (s, m, p, opts = veriOpts) => hashFinishA(_verify(s, m, p, opts));\n/** Verifies signature on message and public key. To use, set `hashes.sha512` first. Follows RFC8032 5.1.7. */\nconst verify = (s, m, p, opts = veriOpts) => hashFinishS(_verify(s, m, p, opts));\n/** Math, hex, byte helpers. Not in `utils` because utils share API with noble-curves. */\nconst etc = {\n sha512Async: async (...messages) => {\n const s = subtle();\n const m = concatBytes(...messages);\n return u8n(await s.digest('SHA-512', m.buffer));\n },\n sha512Sync: undefined,\n bytesToHex: bytesToHex,\n hexToBytes: hexToBytes,\n concatBytes: concatBytes,\n mod: M,\n invert: invert,\n randomBytes: randomBytes,\n};\n/** ed25519-specific key utilities. */\nconst utils = {\n getExtendedPublicKeyAsync: getExtendedPublicKeyAsync,\n getExtendedPublicKey: getExtendedPublicKey,\n randomPrivateKey: () => randomBytes(L),\n precompute: (w = 8, p = G) => {\n p.multiply(3n);\n w;\n return p;\n }, // no-op\n};\n// ## Precomputes\n// --------------\nconst W = 8; // W is window size\nconst scalarBits = 256;\nconst pwindows = Math.ceil(scalarBits / W) + 1; // 33 for W=8\nconst pwindowSize = 2 ** (W - 1); // 128 for W=8\nconst precompute = () => {\n const points = [];\n let p = G;\n let b = p;\n for (let w = 0; w < pwindows; w++) {\n b = p;\n points.push(b);\n for (let i = 1; i < pwindowSize; i++) {\n b = b.add(p);\n points.push(b);\n } // i=1, bc we skip 0\n p = b.double();\n }\n return points;\n};\nlet Gpows = undefined; // precomputes for base point G\n// const-time negate\nconst ctneg = (cnd, p) => {\n const n = p.negate();\n return cnd ? n : p;\n};\n/**\n * Precomputes give 12x faster getPublicKey(), 10x sign(), 2x verify() by\n * caching multiples of G (base point). Cache is stored in 32MB of RAM.\n * Any time `G.multiply` is done, precomputes are used.\n * Not used for getSharedSecret, which instead multiplies random pubkey `P.multiply`.\n *\n * w-ary non-adjacent form (wNAF) precomputation method is 10% slower than windowed method,\n * but takes 2x less RAM. RAM reduction is possible by utilizing `.subtract`.\n *\n * !! Precomputes can be disabled by commenting-out call of the wNAF() inside Point#multiply().\n */\nconst wNAF = (n) => {\n const comp = Gpows || (Gpows = precompute());\n let p = I;\n let f = G; // f must be G, or could become I in the end\n const pow_2_w = 2 ** W; // 256 for W=8\n const maxNum = pow_2_w; // 256 for W=8\n const mask = big(pow_2_w - 1); // 255 for W=8 == mask 0b11111111\n const shiftBy = big(W); // 8 for W=8\n for (let w = 0; w < pwindows; w++) {\n let wbits = Number(n & mask); // extract W bits.\n n >>= shiftBy; // shift number by W bits.\n if (wbits > pwindowSize) {\n wbits -= maxNum;\n n += 1n;\n } // split if bits > max: +224 => 256-32\n const off = w * pwindowSize;\n const offF = off; // offsets, evaluate both\n const offP = off + Math.abs(wbits) - 1;\n const isEven = w % 2 !== 0; // conditions, evaluate both\n const isNeg = wbits < 0;\n if (wbits === 0) {\n // off == I: can't add it. Adding random offF instead.\n f = f.add(ctneg(isEven, comp[offF])); // bits are 0: add garbage to fake point\n }\n else {\n p = p.add(ctneg(isNeg, comp[offP])); // bits are 1: add to result point\n }\n }\n return { p, f }; // return both real and fake points for JIT\n};\n// !! Remove the export to easily use in REPL / browser console\nexport { ed25519_CURVE as CURVE, etc, Point as ExtendedPoint, getPublicKey, getPublicKeyAsync, Point, sign, signAsync, utils, verify, verifyAsync, };\n","var OrlpEd25519 = (() => {\n var _scriptName = typeof document != 'undefined' ? document.currentScript?.src : undefined;\n return (\nasync function(moduleArg = {}) {\n var moduleRtn;\n\nvar Module=moduleArg;var ENVIRONMENT_IS_WEB=typeof window==\"object\";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!=\"undefined\";var ENVIRONMENT_IS_NODE=typeof process==\"object\"&&process.versions?.node&&process.type!=\"renderer\";var arguments_=[];var thisProgram=\"./this.program\";var quit_=(status,toThrow)=>{throw toThrow};if(typeof __filename!=\"undefined\"){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory=\"\";function locateFile(path){if(Module[\"locateFile\"]){return Module[\"locateFile\"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require(\"fs\");scriptDirectory=__dirname+\"/\";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:\"utf8\");return ret};if(process.argv.length>1){thisProgram=process.argv[1].replace(/\\\\/g,\"/\")}arguments_=process.argv.slice(2);quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){try{scriptDirectory=new URL(\".\",_scriptName).href}catch{}{if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,false);xhr.responseType=\"arraybuffer\";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open(\"GET\",url,true);xhr.responseType=\"arraybuffer\";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:\"same-origin\"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+\" : \"+response.url)}}}else{}var out=console.log.bind(console);var err=console.error.bind(console);var wasmBinary;var ABORT=false;var isFileURI=filename=>filename.startsWith(\"file://\");var readyPromiseResolve,readyPromiseReject;var wasmMemory;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAPF64;var HEAP64,HEAPU64;var runtimeInitialized=false;function updateMemoryViews(){var b=wasmMemory.buffer;Module[\"HEAP8\"]=HEAP8=new Int8Array(b);HEAP16=new Int16Array(b);Module[\"HEAPU8\"]=HEAPU8=new Uint8Array(b);HEAPU16=new Uint16Array(b);Module[\"HEAP32\"]=HEAP32=new Int32Array(b);Module[\"HEAPU32\"]=HEAPU32=new Uint32Array(b);HEAPF32=new Float32Array(b);HEAPF64=new Float64Array(b);HEAP64=new BigInt64Array(b);HEAPU64=new BigUint64Array(b)}function preRun(){if(Module[\"preRun\"]){if(typeof Module[\"preRun\"]==\"function\")Module[\"preRun\"]=[Module[\"preRun\"]];while(Module[\"preRun\"].length){addOnPreRun(Module[\"preRun\"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;wasmExports[\"b\"]()}function postRun(){if(Module[\"postRun\"]){if(typeof Module[\"postRun\"]==\"function\")Module[\"postRun\"]=[Module[\"postRun\"]];while(Module[\"postRun\"].length){addOnPostRun(Module[\"postRun\"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function addRunDependency(id){runDependencies++;Module[\"monitorRunDependencies\"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module[\"monitorRunDependencies\"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module[\"onAbort\"]?.(what);what=\"Aborted(\"+what+\")\";err(what);ABORT=true;what+=\". Build with -sASSERTIONS for more info.\";var e=new WebAssembly.RuntimeError(what);readyPromiseReject?.(e);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile(\"orlp-ed25519.wasm\")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw\"both async and sync fetching of the wasm failed\"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming==\"function\"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:\"same-origin\"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err(\"falling back to ArrayBuffer instantiation\")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){return{a:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports[\"a\"];updateMemoryViews();assignWasmExports(wasmExports);removeRunDependency(\"wasm-instantiate\");return wasmExports}addRunDependency(\"wasm-instantiate\");function receiveInstantiationResult(result){return receiveInstance(result[\"instance\"])}var info=getWasmImports();if(Module[\"instantiateWasm\"]){return new Promise((resolve,reject)=>{Module[\"instantiateWasm\"](info,(mod,inst)=>{resolve(receiveInstance(mod,inst))})})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name=\"ExitStatus\";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.push(cb);var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.push(cb);var noExitRuntime=true;var stackRestore=val=>__emscripten_stack_restore(val);var stackSave=()=>_emscripten_stack_get_current();var getCFunc=ident=>{var func=Module[\"_\"+ident];return func};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63;i++}}heap[outIdx]=0;return outIdx-startIdx};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var UTF8Decoder=typeof TextDecoder!=\"undefined\"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str=\"\";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):\"\";var ccall=(ident,returnType,argTypes,args,opts)=>{var toC={string:str=>{var ret=0;if(str!==null&&str!==undefined&&str!==0){ret=stringToUTF8OnStack(str)}return ret},array:arr=>{var ret=stackAlloc(arr.length);writeArrayToMemory(arr,ret);return ret}};function convertReturnValue(ret){if(returnType===\"string\"){return UTF8ToString(ret)}if(returnType===\"boolean\")return Boolean(ret);return ret}var func=getCFunc(ident);var cArgs=[];var stack=0;if(args){for(var i=0;i{var numericArgs=!argTypes||argTypes.every(type=>type===\"number\"||type===\"boolean\");var numericRet=returnType!==\"string\";if(numericRet&&numericArgs&&!opts){return getCFunc(ident)}return(...args)=>ccall(ident,returnType,argTypes,args,opts)};{if(Module[\"noExitRuntime\"])noExitRuntime=Module[\"noExitRuntime\"];if(Module[\"print\"])out=Module[\"print\"];if(Module[\"printErr\"])err=Module[\"printErr\"];if(Module[\"wasmBinary\"])wasmBinary=Module[\"wasmBinary\"];if(Module[\"arguments\"])arguments_=Module[\"arguments\"];if(Module[\"thisProgram\"])thisProgram=Module[\"thisProgram\"]}Module[\"ccall\"]=ccall;Module[\"cwrap\"]=cwrap;var _orlp_derive_public_key,_orlp_validate_keypair,_orlp_sign,_orlp_verify,__emscripten_stack_restore,__emscripten_stack_alloc,_emscripten_stack_get_current;function assignWasmExports(wasmExports){Module[\"_orlp_derive_public_key\"]=_orlp_derive_public_key=wasmExports[\"c\"];Module[\"_orlp_validate_keypair\"]=_orlp_validate_keypair=wasmExports[\"d\"];Module[\"_orlp_sign\"]=_orlp_sign=wasmExports[\"e\"];Module[\"_orlp_verify\"]=_orlp_verify=wasmExports[\"f\"];__emscripten_stack_restore=wasmExports[\"g\"];__emscripten_stack_alloc=wasmExports[\"h\"];_emscripten_stack_get_current=wasmExports[\"i\"]}var wasmImports={};var wasmExports=await createWasm();function run(){if(runDependencies>0){dependenciesFulfilled=run;return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module[\"calledRun\"]=true;if(ABORT)return;initRuntime();readyPromiseResolve?.(Module);Module[\"onRuntimeInitialized\"]?.();postRun()}if(Module[\"setStatus\"]){Module[\"setStatus\"](\"Running...\");setTimeout(()=>{setTimeout(()=>Module[\"setStatus\"](\"\"),1);doRun()},1)}else{doRun()}}function preInit(){if(Module[\"preInit\"]){if(typeof Module[\"preInit\"]==\"function\")Module[\"preInit\"]=[Module[\"preInit\"]];while(Module[\"preInit\"].length>0){Module[\"preInit\"].shift()()}}}preInit();run();if(runtimeInitialized){moduleRtn=Module}else{moduleRtn=new Promise((resolve,reject)=>{readyPromiseResolve=resolve;readyPromiseReject=reject})}\n\n\n return moduleRtn;\n}\n);\n})();\nif (typeof exports === 'object' && typeof module === 'object') {\n module.exports = OrlpEd25519;\n // This default export looks redundant, but it allows TS to import this\n // commonjs style module.\n module.exports.default = OrlpEd25519;\n} else if (typeof define === 'function' && define['amd'])\n define([], () => OrlpEd25519);\n","\"use strict\";\n// WebAssembly wrapper for orlp/ed25519 key derivation\n// This provides the exact orlp algorithm for JavaScript\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.derivePublicKey = derivePublicKey;\nexports.validateKeyPair = validateKeyPair;\nexports.sign = sign;\nexports.verify = verify;\nconst hex_1 = require(\"../utils/hex\");\n// Import the generated WASM module\nconst OrlpEd25519 = require('../../lib/orlp-ed25519.js');\n/**\n * Get a fresh WASM instance\n * Loads a fresh instance each time because the WASM module could behave unpredictably otherwise\n */\nasync function getWasmInstance() {\n return await OrlpEd25519();\n}\n/**\n * Derive Ed25519 public key from private key using the exact orlp/ed25519 algorithm\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\nasync function derivePublicKey(privateKeyHex) {\n const wasmModule = await getWasmInstance();\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Allocate memory buffers directly in WASM heap\n const privateKeyPtr = 1024; // Use fixed memory locations\n const publicKeyPtr = 1024 + 64;\n // Copy private key to WASM memory\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n // Call the orlp key derivation function\n const result = wasmModule.ccall('orlp_derive_public_key', 'number', ['number', 'number'], [publicKeyPtr, privateKeyPtr]);\n if (result !== 0) {\n throw new Error('orlp key derivation failed: invalid private key');\n }\n // Read the public key from WASM memory\n const publicKeyBytes = new Uint8Array(32);\n publicKeyBytes.set(wasmModule.HEAPU8.subarray(publicKeyPtr, publicKeyPtr + 32));\n return (0, hex_1.bytesToHex)(publicKeyBytes);\n}\n/**\n * Validate that a private key and public key pair match using orlp/ed25519\n *\n * @param privateKeyHex - 64-byte private key in hex format\n * @param expectedPublicKeyHex - 32-byte public key in hex format\n * @returns true if the keys match, false otherwise\n */\nasync function validateKeyPair(privateKeyHex, expectedPublicKeyHex) {\n try {\n const wasmModule = await getWasmInstance();\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n const expectedPublicKeyBytes = (0, hex_1.hexToBytes)(expectedPublicKeyHex);\n if (privateKeyBytes.length !== 64) {\n return false;\n }\n if (expectedPublicKeyBytes.length !== 32) {\n return false;\n }\n // Allocate memory buffers directly in WASM heap\n const privateKeyPtr = 2048; // Use different fixed memory locations\n const publicKeyPtr = 2048 + 64;\n // Copy keys to WASM memory\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n wasmModule.HEAPU8.set(expectedPublicKeyBytes, publicKeyPtr);\n // Call the validation function (note: C function expects public_key first, then private_key)\n const result = wasmModule.ccall('orlp_validate_keypair', 'number', ['number', 'number'], [publicKeyPtr, privateKeyPtr]);\n return result === 1;\n }\n catch (error) {\n // Invalid hex strings or other errors should return false\n return false;\n }\n}\n/**\n * Sign a message using Ed25519 with orlp/ed25519 implementation\n *\n * @param messageHex - Message to sign in hex format\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns 64-byte signature in hex format\n */\nasync function sign(messageHex, privateKeyHex, publicKeyHex) {\n const wasmModule = await getWasmInstance();\n const messageBytes = (0, hex_1.hexToBytes)(messageHex);\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n const publicKeyBytes = (0, hex_1.hexToBytes)(publicKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n if (publicKeyBytes.length !== 32) {\n throw new Error(`Invalid public key length: expected 32 bytes, got ${publicKeyBytes.length}`);\n }\n // Allocate memory buffers with large gaps to avoid conflicts with scratch space\n const messagePtr = 100000;\n const privateKeyPtr = 200000;\n const publicKeyPtr = 300000;\n const signaturePtr = 400000;\n // Copy data to WASM memory\n wasmModule.HEAPU8.set(messageBytes, messagePtr);\n wasmModule.HEAPU8.set(privateKeyBytes, privateKeyPtr);\n wasmModule.HEAPU8.set(publicKeyBytes, publicKeyPtr);\n // Call orlp_sign\n wasmModule.ccall('orlp_sign', 'void', ['number', 'number', 'number', 'number', 'number'], [signaturePtr, messagePtr, messageBytes.length, publicKeyPtr, privateKeyPtr]);\n // Read signature\n const signatureBytes = new Uint8Array(64);\n signatureBytes.set(wasmModule.HEAPU8.subarray(signaturePtr, signaturePtr + 64));\n return (0, hex_1.bytesToHex)(signatureBytes);\n}\n/**\n * Verify an Ed25519 signature using orlp/ed25519 implementation\n *\n * @param signatureHex - 64-byte signature in hex format\n * @param messageHex - Message that was signed in hex format\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns true if signature is valid, false otherwise\n */\nasync function verify(signatureHex, messageHex, publicKeyHex) {\n try {\n const wasmModule = await getWasmInstance();\n const signatureBytes = (0, hex_1.hexToBytes)(signatureHex);\n const messageBytes = (0, hex_1.hexToBytes)(messageHex);\n const publicKeyBytes = (0, hex_1.hexToBytes)(publicKeyHex);\n if (signatureBytes.length !== 64) {\n return false;\n }\n if (publicKeyBytes.length !== 32) {\n return false;\n }\n // Allocate memory buffers with large gaps to avoid conflicts with scratch space\n const messagePtr = 500000;\n const signaturePtr = 600000;\n const publicKeyPtr = 700000;\n // Copy data to WASM memory\n wasmModule.HEAPU8.set(signatureBytes, signaturePtr);\n wasmModule.HEAPU8.set(messageBytes, messagePtr);\n wasmModule.HEAPU8.set(publicKeyBytes, publicKeyPtr);\n // Call the orlp verify function\n const result = wasmModule.ccall('orlp_verify', 'number', ['number', 'number', 'number', 'number'], [signaturePtr, messagePtr, messageBytes.length, publicKeyPtr]);\n return result === 1;\n }\n catch (error) {\n return false;\n }\n}\n//# sourceMappingURL=orlp-ed25519-wasm.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Ed25519SignatureVerifier = void 0;\nconst ed25519 = __importStar(require(\"@noble/ed25519\"));\nconst hex_1 = require(\"../utils/hex\");\nconst orlp_ed25519_wasm_1 = require(\"./orlp-ed25519-wasm\");\n// Cross-platform SHA-512 implementation\nasync function sha512Hash(data) {\n // Browser environment - use Web Crypto API\n if (typeof globalThis !== 'undefined' && globalThis.crypto && globalThis.crypto.subtle) {\n const hashBuffer = await globalThis.crypto.subtle.digest('SHA-512', data);\n return new Uint8Array(hashBuffer);\n }\n // Node.js environment - use crypto module\n if (typeof require !== 'undefined') {\n try {\n const { createHash } = require('crypto');\n return createHash('sha512').update(data).digest();\n }\n catch (error) {\n // Fallback for environments where require is not available\n }\n }\n throw new Error('No SHA-512 implementation available');\n}\nfunction sha512HashSync(data) {\n // Node.js environment - use crypto module\n if (typeof require !== 'undefined') {\n try {\n const { createHash } = require('crypto');\n return createHash('sha512').update(data).digest();\n }\n catch (error) {\n // Fallback\n }\n }\n // Browser environment fallback - use crypto-js for sync operation\n try {\n const CryptoJS = require('crypto-js');\n const wordArray = CryptoJS.lib.WordArray.create(data);\n const hash = CryptoJS.SHA512(wordArray);\n const hashBytes = new Uint8Array(64);\n // Convert CryptoJS hash to Uint8Array\n for (let i = 0; i < 16; i++) {\n const word = hash.words[i] || 0;\n hashBytes[i * 4] = (word >>> 24) & 0xff;\n hashBytes[i * 4 + 1] = (word >>> 16) & 0xff;\n hashBytes[i * 4 + 2] = (word >>> 8) & 0xff;\n hashBytes[i * 4 + 3] = word & 0xff;\n }\n return hashBytes;\n }\n catch (error) {\n // Final fallback - this should not happen since crypto-js is a dependency\n throw new Error('No SHA-512 implementation available for synchronous operation');\n }\n}\n// Set up SHA-512 for @noble/ed25519\ned25519.etc.sha512Async = sha512Hash;\n// Always set up sync version - @noble/ed25519 requires it\n// It will throw in browser environments, which @noble/ed25519 can handle\ntry {\n ed25519.etc.sha512Sync = sha512HashSync;\n}\ncatch (error) {\n console.debug('Could not set up synchronous SHA-512:', error);\n}\nclass Ed25519SignatureVerifier {\n /**\n * Verify an Ed25519 signature for MeshCore advertisement packets\n *\n * According to MeshCore protocol, the signed message for advertisements is:\n * timestamp (4 bytes LE) + flags (1 byte) + location (8 bytes LE, if present) + name (variable, if present)\n */\n static async verifyAdvertisementSignature(publicKeyHex, signatureHex, timestamp, appDataHex) {\n try {\n // Convert hex strings to Uint8Arrays\n const publicKey = (0, hex_1.hexToBytes)(publicKeyHex);\n const signature = (0, hex_1.hexToBytes)(signatureHex);\n const appData = (0, hex_1.hexToBytes)(appDataHex);\n // Construct the signed message according to MeshCore format\n const message = this.constructAdvertSignedMessage(publicKeyHex, timestamp, appData);\n // Verify the signature using noble-ed25519\n return await ed25519.verify(signature, message, publicKey);\n }\n catch (error) {\n console.error('Ed25519 signature verification failed:', error);\n return false;\n }\n }\n /**\n * Construct the signed message for MeshCore advertisements\n * According to MeshCore source (Mesh.cpp lines 242-248):\n * Format: public_key (32 bytes) + timestamp (4 bytes LE) + app_data (variable length)\n */\n static constructAdvertSignedMessage(publicKeyHex, timestamp, appData) {\n const publicKey = (0, hex_1.hexToBytes)(publicKeyHex);\n // Timestamp (4 bytes, little-endian)\n const timestampBytes = new Uint8Array(4);\n timestampBytes[0] = timestamp & 0xFF;\n timestampBytes[1] = (timestamp >> 8) & 0xFF;\n timestampBytes[2] = (timestamp >> 16) & 0xFF;\n timestampBytes[3] = (timestamp >> 24) & 0xFF;\n // Concatenate: public_key + timestamp + app_data\n const message = new Uint8Array(32 + 4 + appData.length);\n message.set(publicKey, 0);\n message.set(timestampBytes, 32);\n message.set(appData, 36);\n return message;\n }\n /**\n * Get a human-readable description of what was signed\n */\n static getSignedMessageDescription(publicKeyHex, timestamp, appDataHex) {\n return `Public Key: ${publicKeyHex} + Timestamp: ${timestamp} (${new Date(timestamp * 1000).toISOString()}) + App Data: ${appDataHex}`;\n }\n /**\n * Get the hex representation of the signed message for debugging\n */\n static getSignedMessageHex(publicKeyHex, timestamp, appDataHex) {\n const appData = (0, hex_1.hexToBytes)(appDataHex);\n const message = this.constructAdvertSignedMessage(publicKeyHex, timestamp, appData);\n return (0, hex_1.bytesToHex)(message);\n }\n /**\n * Derive Ed25519 public key from orlp/ed25519 private key format\n * This implements the same algorithm as orlp/ed25519's ed25519_derive_pub()\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\n static async derivePublicKey(privateKeyHex) {\n try {\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Use the orlp/ed25519 WebAssembly implementation\n return await (0, orlp_ed25519_wasm_1.derivePublicKey)(privateKeyHex);\n }\n catch (error) {\n throw new Error(`Failed to derive public key: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n /**\n * Derive Ed25519 public key from orlp/ed25519 private key format (synchronous version)\n * This implements the same algorithm as orlp/ed25519's ed25519_derive_pub()\n *\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @returns 32-byte public key in hex format\n */\n static derivePublicKeySync(privateKeyHex) {\n try {\n const privateKeyBytes = (0, hex_1.hexToBytes)(privateKeyHex);\n if (privateKeyBytes.length !== 64) {\n throw new Error(`Invalid private key length: expected 64 bytes, got ${privateKeyBytes.length}`);\n }\n // Note: WASM operations are async, so this sync version throws an error\n throw new Error('Synchronous key derivation not supported with WASM. Use derivePublicKey() instead.');\n }\n catch (error) {\n throw new Error(`Failed to derive public key: ${error instanceof Error ? error.message : 'Unknown error'}`);\n }\n }\n /**\n * Validate that a private key correctly derives to the expected public key\n *\n * @param privateKeyHex - 64-byte private key in hex format\n * @param expectedPublicKeyHex - Expected 32-byte public key in hex format\n * @returns true if the private key derives to the expected public key\n */\n static async validateKeyPair(privateKeyHex, expectedPublicKeyHex) {\n try {\n return await (0, orlp_ed25519_wasm_1.validateKeyPair)(privateKeyHex, expectedPublicKeyHex);\n }\n catch (error) {\n return false;\n }\n }\n}\nexports.Ed25519SignatureVerifier = Ed25519SignatureVerifier;\n//# sourceMappingURL=ed25519-verifier.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AdvertPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nconst enum_names_1 = require(\"../../utils/enum-names\");\nconst ed25519_verifier_1 = require(\"../../crypto/ed25519-verifier\");\nclass AdvertPayloadDecoder {\n static decode(payload, options) {\n try {\n // start of appdata section: public_key(32) + timestamp(4) + signature(64) + flags(1) = 101 bytes\n if (payload.length < 101) {\n const result = {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Advertisement payload too short'],\n publicKey: '',\n timestamp: 0,\n signature: '',\n appData: {\n flags: 0,\n deviceRole: enums_1.DeviceRole.ChatNode,\n hasLocation: false,\n hasName: false\n }\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Advert Data',\n description: 'Advert payload too short (minimum 101 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let currentOffset = 0;\n // parse advertisement structure from payloads.md\n const publicKey = (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 32));\n if (options?.includeSegments) {\n segments.push({\n name: 'Public Key',\n description: 'Ed25519 public key',\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 31,\n value: publicKey\n });\n }\n currentOffset += 32;\n const timestamp = this.readUint32LE(payload, currentOffset);\n if (options?.includeSegments) {\n const timestampDate = new Date(timestamp * 1000);\n segments.push({\n name: 'Timestamp',\n description: `${timestamp} (${timestampDate.toISOString().slice(0, 19)}Z)`,\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 3,\n value: (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 4))\n });\n }\n currentOffset += 4;\n const signature = (0, hex_1.bytesToHex)(payload.subarray(currentOffset, currentOffset + 64));\n if (options?.includeSegments) {\n segments.push({\n name: 'Signature',\n description: 'Ed25519 signature',\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset + 63,\n value: signature\n });\n }\n currentOffset += 64;\n const flags = payload[currentOffset];\n if (options?.includeSegments) {\n const binaryStr = flags.toString(2).padStart(8, '0');\n const deviceRole = this.parseDeviceRole(flags);\n const roleName = (0, enum_names_1.getDeviceRoleName)(deviceRole);\n const flagDesc = ` | Bits 0-3 (Role): ${roleName} | Bit 4 (Location): ${!!(flags & enums_1.AdvertFlags.HasLocation) ? 'Yes' : 'No'} | Bit 7 (Name): ${!!(flags & enums_1.AdvertFlags.HasName) ? 'Yes' : 'No'}`;\n segments.push({\n name: 'App Flags',\n description: `Binary: ${binaryStr}${flagDesc}`,\n startByte: segmentOffset + currentOffset,\n endByte: segmentOffset + currentOffset,\n value: flags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n currentOffset += 1;\n const advert = {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n publicKey,\n timestamp,\n signature,\n appData: {\n flags,\n deviceRole: this.parseDeviceRole(flags),\n hasLocation: !!(flags & enums_1.AdvertFlags.HasLocation),\n hasName: !!(flags & enums_1.AdvertFlags.HasName)\n }\n };\n let offset = currentOffset;\n // location data (if HasLocation flag is set)\n if (flags & enums_1.AdvertFlags.HasLocation && payload.length >= offset + 8) {\n const lat = this.readInt32LE(payload, offset) / 1000000;\n const lon = this.readInt32LE(payload, offset + 4) / 1000000;\n advert.appData.location = {\n latitude: Math.round(lat * 1000000) / 1000000, // Keep precision\n longitude: Math.round(lon * 1000000) / 1000000\n };\n if (options?.includeSegments) {\n segments.push({\n name: 'Latitude',\n description: `${lat}° (${lat})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 4))\n });\n segments.push({\n name: 'Longitude',\n description: `${lon}° (${lon})`,\n startByte: segmentOffset + offset + 4,\n endByte: segmentOffset + offset + 7,\n value: (0, hex_1.bytesToHex)(payload.subarray(offset + 4, offset + 8))\n });\n }\n offset += 8;\n }\n // skip feature fields for now (HasFeature1, HasFeature2)\n if (flags & enums_1.AdvertFlags.HasFeature1)\n offset += 2;\n if (flags & enums_1.AdvertFlags.HasFeature2)\n offset += 2;\n // name data (if HasName flag is set)\n if (flags & enums_1.AdvertFlags.HasName && payload.length > offset) {\n const nameBytes = payload.subarray(offset);\n const rawName = new TextDecoder('utf-8').decode(nameBytes).replace(/\\0.*$/, '');\n advert.appData.name = this.sanitizeControlCharacters(rawName) || rawName;\n if (options?.includeSegments) {\n segments.push({\n name: 'Node Name',\n description: `Node name: \"${advert.appData.name}\"`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(nameBytes)\n });\n }\n }\n if (options?.includeSegments) {\n advert.segments = segments;\n }\n return advert;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Advert,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode advertisement payload'],\n publicKey: '',\n timestamp: 0,\n signature: '',\n appData: {\n flags: 0,\n deviceRole: enums_1.DeviceRole.ChatNode,\n hasLocation: false,\n hasName: false\n }\n };\n }\n }\n /**\n * Decode advertisement payload with signature verification\n */\n static async decodeWithVerification(payload, options) {\n // First decode normally\n const advert = this.decode(payload, options);\n if (!advert || !advert.isValid) {\n return advert;\n }\n // Perform signature verification\n try {\n // Extract app_data from the payload (everything after public_key + timestamp + signature)\n const appDataStart = 32 + 4 + 64; // public_key + timestamp + signature\n const appDataBytes = payload.subarray(appDataStart);\n const appDataHex = (0, hex_1.bytesToHex)(appDataBytes);\n const signatureValid = await ed25519_verifier_1.Ed25519SignatureVerifier.verifyAdvertisementSignature(advert.publicKey, advert.signature, advert.timestamp, appDataHex);\n advert.signatureValid = signatureValid;\n if (!signatureValid) {\n advert.signatureError = 'Ed25519 signature verification failed';\n advert.isValid = false;\n if (!advert.errors) {\n advert.errors = [];\n }\n advert.errors.push('Invalid Ed25519 signature');\n }\n }\n catch (error) {\n advert.signatureValid = false;\n advert.signatureError = error instanceof Error ? error.message : 'Signature verification error';\n advert.isValid = false;\n if (!advert.errors) {\n advert.errors = [];\n }\n advert.errors.push('Signature verification failed: ' + (error instanceof Error ? error.message : 'Unknown error'));\n }\n return advert;\n }\n static parseDeviceRole(flags) {\n const roleValue = flags & 0x0F;\n switch (roleValue) {\n case 0x01: return enums_1.DeviceRole.ChatNode;\n case 0x02: return enums_1.DeviceRole.Repeater;\n case 0x03: return enums_1.DeviceRole.RoomServer;\n case 0x04: return enums_1.DeviceRole.Sensor;\n default: return enums_1.DeviceRole.ChatNode;\n }\n }\n static readUint32LE(buffer, offset) {\n return buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24);\n }\n static readInt32LE(buffer, offset) {\n const value = this.readUint32LE(buffer, offset);\n // convert unsigned to signed\n return value > 0x7FFFFFFF ? value - 0x100000000 : value;\n }\n static sanitizeControlCharacters(value) {\n if (!value)\n return null;\n const sanitized = value.trim().replace(/[\\x00-\\x1F\\x7F]/g, '');\n return sanitized || null;\n }\n}\nexports.AdvertPayloadDecoder = AdvertPayloadDecoder;\n//# sourceMappingURL=advert.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TracePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass TracePayloadDecoder {\n static decode(payload, pathData, options) {\n try {\n if (payload.length < 9) {\n const result = {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Trace payload too short (need at least tag(4) + auth(4) + flags(1))'],\n traceTag: '00000000',\n authCode: 0,\n flags: 0,\n pathHashes: []\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Trace Data',\n description: 'Trace payload too short (minimum 9 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n // Trace Tag (4 bytes) - unique identifier\n const traceTagRaw = this.readUint32LE(payload, offset);\n const traceTag = (0, hex_1.numberToHex)(traceTagRaw, 8);\n if (options?.includeSegments) {\n segments.push({\n name: 'Trace Tag',\n description: `Unique identifier for this trace: 0x${traceTagRaw.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Auth Code (4 bytes) - authentication/verification code \n const authCode = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Auth Code',\n description: `Authentication/verification code: ${authCode}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Flags (1 byte) - application-defined control flags\n const flags = payload[offset];\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Application-defined control flags: 0x${flags.toString(16).padStart(2, '0')} (${flags.toString(2).padStart(8, '0')}b)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: flags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // remaining bytes are path hashes (node hashes in the trace path)\n const pathHashes = [];\n const pathHashesStart = offset;\n while (offset < payload.length) {\n pathHashes.push((0, hex_1.byteToHex)(payload[offset]));\n offset++;\n }\n if (options?.includeSegments && pathHashes.length > 0) {\n const pathHashesDisplay = pathHashes.join(' ');\n segments.push({\n name: 'Path Hashes',\n description: `Node hashes in trace path: ${pathHashesDisplay}`,\n startByte: segmentOffset + pathHashesStart,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload.slice(pathHashesStart))\n });\n }\n // extract SNR values from path field for TRACE packets\n let snrValues;\n if (pathData && pathData.length > 0) {\n snrValues = pathData.map(hexByte => {\n const byteValue = parseInt(hexByte, 16);\n // convert unsigned byte to signed int8 (SNR values are stored as signed int8 * 4)\n const snrSigned = byteValue > 127 ? byteValue - 256 : byteValue;\n return snrSigned / 4.0; // convert to dB\n });\n }\n const result = {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n traceTag,\n authCode,\n flags,\n pathHashes,\n snrValues\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Trace,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode trace payload'],\n traceTag: '00000000',\n authCode: 0,\n flags: 0,\n pathHashes: []\n };\n }\n }\n static readUint32LE(buffer, offset) {\n return buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24);\n }\n}\nexports.TracePayloadDecoder = TracePayloadDecoder;\n//# sourceMappingURL=trace.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.GroupTextPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst channel_crypto_1 = require(\"../../crypto/channel-crypto\");\nconst hex_1 = require(\"../../utils/hex\");\nclass GroupTextPayloadDecoder {\n static decode(payload, options) {\n try {\n if (payload.length < 3) {\n const result = {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['GroupText payload too short (need at least channel_hash(1) + MAC(2))'],\n channelHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid GroupText Data',\n description: 'GroupText payload too short (minimum 3 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // channel hash (1 byte) - first byte of SHA256 of channel's shared key\n const channelHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Channel Hash',\n description: 'First byte of SHA256 of channel\\'s shared key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: channelHash\n });\n }\n offset += 1;\n // MAC (2 bytes) - message authentication code\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // ciphertext (remaining bytes) - encrypted message\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted message content (timestamp + flags + message)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const groupText = {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n channelHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 3\n };\n // attempt decryption if key store is provided\n if (options?.keyStore && options.keyStore.hasChannelKey(channelHash)) {\n // try all possible keys for this hash (handles collisions)\n const channelKeys = options.keyStore.getChannelKeys(channelHash);\n for (const channelKey of channelKeys) {\n const decryptionResult = channel_crypto_1.ChannelCrypto.decryptGroupTextMessage(ciphertext, cipherMac, channelKey);\n if (decryptionResult.success && decryptionResult.data) {\n groupText.decrypted = {\n timestamp: decryptionResult.data.timestamp,\n flags: decryptionResult.data.flags,\n sender: decryptionResult.data.sender,\n message: decryptionResult.data.message\n };\n break; // stop trying keys once we find one that works\n }\n }\n }\n if (options?.includeSegments) {\n groupText.segments = segments;\n }\n return groupText;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.GroupText,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode GroupText payload'],\n channelHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.GroupTextPayloadDecoder = GroupTextPayloadDecoder;\n//# sourceMappingURL=group-text.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.RequestPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass RequestPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Request payload structure:\n // - destination hash (1 byte)\n // - source hash (1 byte)\n // - cipher MAC (2 bytes)\n // - ciphertext (rest of payload) - contains encrypted timestamp, request type, and request data\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Request payload too short (minimum 4 bytes: dest hash + source hash + MAC)'],\n timestamp: 0,\n requestType: enums_1.RequestType.GetStats,\n requestData: '',\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: ''\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Request Data',\n description: 'Request payload too short (minimum 4 bytes required: 1 for dest hash + 1 for source hash + 2 for MAC)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Parse destination hash (1 byte)\n const destinationHash = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 1));\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: `First byte of destination node public key: 0x${destinationHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Parse source hash (1 byte)\n const sourceHash = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 1));\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: `First byte of source node public key: 0x${sourceHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // Parse cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: `MAC for encrypted data verification (2 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Parse ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: `Encrypted message data (${payload.length - offset} bytes). Contains encrypted plaintext with this structure:\n• Timestamp (4 bytes) - send time as unix timestamp\n• Request Type (1 byte) - type of request (GetStats, GetTelemetryData, etc.)\n• Request Data (remaining bytes) - additional request-specific data`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n timestamp: 0, // Encrypted, cannot be parsed without decryption\n requestType: enums_1.RequestType.GetStats, // Encrypted, cannot be determined without decryption\n requestData: '',\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Request,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode request payload'],\n timestamp: 0,\n requestType: enums_1.RequestType.GetStats,\n requestData: '',\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: ''\n };\n }\n }\n}\nexports.RequestPayloadDecoder = RequestPayloadDecoder;\n//# sourceMappingURL=request.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ResponsePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass ResponsePayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Response payload structure:\n // - destination_hash (1 byte)\n // - source_hash (1 byte)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Response payload too short (minimum 4 bytes: dest + source + MAC)'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Response Data',\n description: 'Response payload too short (minimum 4 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Destination Hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: 'First byte of destination node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // source hash (1 byte)\n const sourceHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: 'First byte of source node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data in next field',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted response data (tag + content)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 4\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Response,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode response payload'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.ResponsePayloadDecoder = ResponsePayloadDecoder;\n//# sourceMappingURL=response.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AnonRequestPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass AnonRequestPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - AnonRequest payload structure:\n // - destination_hash (1 byte)\n // - sender_public_key (32 bytes)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 35) {\n const result = {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['AnonRequest payload too short (minimum 35 bytes: dest + public key + MAC)'],\n destinationHash: '',\n senderPublicKey: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid AnonRequest Data',\n description: 'AnonRequest payload too short (minimum 35 bytes required: 1 for dest hash + 32 for public key + 2 for MAC)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Parse destination hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[0]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: `First byte of destination node public key: 0x${destinationHash}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Parse sender public key (32 bytes)\n const senderPublicKey = (0, hex_1.bytesToHex)(payload.subarray(1, 33));\n if (options?.includeSegments) {\n segments.push({\n name: 'Sender Public Key',\n description: `Ed25519 public key of the sender (32 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 31,\n value: senderPublicKey\n });\n }\n offset += 32;\n // Parse cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(33, 35));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: `MAC for encrypted data verification (2 bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Parse ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(35));\n if (options?.includeSegments && payload.length > 35) {\n segments.push({\n name: 'Ciphertext',\n description: `Encrypted message data (${payload.length - 35} bytes). Contains encrypted plaintext with this structure:\n• Timestamp (4 bytes) - send time as unix timestamp\n• Sync Timestamp (4 bytes) - room server only, sender's \"sync messages SINCE x\" timestamp \n• Password (remaining bytes) - password for repeater/room`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n senderPublicKey,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 35\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.AnonRequest,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode AnonRequest payload'],\n destinationHash: '',\n senderPublicKey: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.AnonRequestPayloadDecoder = AnonRequestPayloadDecoder;\n//# sourceMappingURL=anon-request.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.AckPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass AckPayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - Ack payload structure:\n // - checksum (4 bytes) - CRC checksum of message timestamp, text, and sender pubkey\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Ack payload too short (minimum 4 bytes for checksum)'],\n checksum: ''\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Ack Data',\n description: 'Ack payload too short (minimum 4 bytes required for checksum)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n // parse checksum (4 bytes as hex)\n const checksum = (0, hex_1.bytesToHex)(payload.subarray(0, 4));\n if (options?.includeSegments) {\n segments.push({\n name: 'Checksum',\n description: `CRC checksum of message timestamp, text, and sender pubkey: 0x${checksum}`,\n startByte: segmentOffset,\n endByte: segmentOffset + 3,\n value: checksum\n });\n }\n // any additional data (if present)\n if (options?.includeSegments && payload.length > 4) {\n segments.push({\n name: 'Additional Data',\n description: 'Extra data in Ack payload',\n startByte: segmentOffset + 4,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload.subarray(4))\n });\n }\n const result = {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n checksum\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Ack,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode Ack payload'],\n checksum: ''\n };\n }\n }\n}\nexports.AckPayloadDecoder = AckPayloadDecoder;\n//# sourceMappingURL=ack.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.PathPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass PathPayloadDecoder {\n static decode(payload) {\n try {\n // Based on MeshCore payloads.md - Path payload structure:\n // - path_length (1 byte)\n // - path (variable length) - list of node hashes (one byte each)\n // - extra_type (1 byte) - bundled payload type\n // - extra (rest of data) - bundled payload content\n if (payload.length < 2) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['Path payload too short (minimum 2 bytes: path length + extra type)'],\n pathLength: 0,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n const pathLength = payload[0];\n if (payload.length < 1 + pathLength + 1) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [`Path payload too short (need ${1 + pathLength + 1} bytes for path length + path + extra type)`],\n pathLength,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n // Parse path hashes (one byte each)\n const pathHashes = [];\n for (let i = 0; i < pathLength; i++) {\n pathHashes.push((0, hex_1.byteToHex)(payload[1 + i]));\n }\n // Parse extra type (1 byte after path)\n const extraType = payload[1 + pathLength];\n // Parse extra data (remaining bytes)\n let extraData = '';\n if (payload.length > 1 + pathLength + 1) {\n extraData = (0, hex_1.bytesToHex)(payload.subarray(1 + pathLength + 1));\n }\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n pathLength,\n pathHashes,\n extraType,\n extraData\n };\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.Path,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode Path payload'],\n pathLength: 0,\n pathHashes: [],\n extraType: 0,\n extraData: ''\n };\n }\n }\n}\nexports.PathPayloadDecoder = PathPayloadDecoder;\n//# sourceMappingURL=path.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.TextMessagePayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nclass TextMessagePayloadDecoder {\n static decode(payload, options) {\n try {\n // Based on MeshCore payloads.md - TextMessage payload structure:\n // - destination_hash (1 byte)\n // - source_hash (1 byte)\n // - cipher_mac (2 bytes)\n // - ciphertext (rest of payload)\n if (payload.length < 4) {\n const result = {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['TextMessage payload too short (minimum 4 bytes: dest + source + MAC)'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid TextMessage Data',\n description: 'TextMessage payload too short (minimum 4 bytes required)',\n startByte: options.segmentOffset || 0,\n endByte: (options.segmentOffset || 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n const segments = [];\n const segmentOffset = options?.segmentOffset || 0;\n let offset = 0;\n // Destination Hash (1 byte)\n const destinationHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Destination Hash',\n description: 'First byte of destination node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: destinationHash\n });\n }\n offset += 1;\n // Source Hash (1 byte)\n const sourceHash = (0, hex_1.byteToHex)(payload[offset]);\n if (options?.includeSegments) {\n segments.push({\n name: 'Source Hash',\n description: 'First byte of source node public key',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: sourceHash\n });\n }\n offset += 1;\n // Cipher MAC (2 bytes)\n const cipherMac = (0, hex_1.bytesToHex)(payload.subarray(offset, offset + 2));\n if (options?.includeSegments) {\n segments.push({\n name: 'Cipher MAC',\n description: 'MAC for encrypted data in next field',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 1,\n value: cipherMac\n });\n }\n offset += 2;\n // Ciphertext (remaining bytes)\n const ciphertext = (0, hex_1.bytesToHex)(payload.subarray(offset));\n if (options?.includeSegments && payload.length > offset) {\n segments.push({\n name: 'Ciphertext',\n description: 'Encrypted message data (timestamp + message text)',\n startByte: segmentOffset + offset,\n endByte: segmentOffset + payload.length - 1,\n value: ciphertext\n });\n }\n const result = {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n destinationHash,\n sourceHash,\n cipherMac,\n ciphertext,\n ciphertextLength: payload.length - 4\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n catch (error) {\n return {\n type: enums_1.PayloadType.TextMessage,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Failed to decode TextMessage payload'],\n destinationHash: '',\n sourceHash: '',\n cipherMac: '',\n ciphertext: '',\n ciphertextLength: 0\n };\n }\n }\n}\nexports.TextMessagePayloadDecoder = TextMessagePayloadDecoder;\n//# sourceMappingURL=text-message.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.ControlPayloadDecoder = void 0;\nconst enums_1 = require(\"../../types/enums\");\nconst hex_1 = require(\"../../utils/hex\");\nconst enum_names_1 = require(\"../../utils/enum-names\");\nclass ControlPayloadDecoder {\n static decode(payload, options) {\n try {\n if (payload.length < 1) {\n return this.createErrorPayload('Control payload too short (minimum 1 byte required)', payload, options);\n }\n const rawFlags = payload[0];\n const subType = rawFlags & 0xF0; // upper 4 bits\n switch (subType) {\n case enums_1.ControlSubType.NodeDiscoverReq:\n return this.decodeDiscoverReq(payload, options);\n case enums_1.ControlSubType.NodeDiscoverResp:\n return this.decodeDiscoverResp(payload, options);\n default:\n return this.createErrorPayload(`Unknown control sub-type: 0x${subType.toString(16).padStart(2, '0')}`, payload, options);\n }\n }\n catch (error) {\n return this.createErrorPayload(error instanceof Error ? error.message : 'Failed to decode control payload', payload, options);\n }\n }\n static decodeDiscoverReq(payload, options) {\n const segments = [];\n const segmentOffset = options?.segmentOffset ?? 0;\n // Minimum size: flags(1) + type_filter(1) + tag(4) = 6 bytes\n if (payload.length < 6) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['DISCOVER_REQ payload too short (minimum 6 bytes required)'],\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags: payload[0],\n prefixOnly: false,\n typeFilter: 0,\n typeFilterNames: [],\n tag: 0,\n since: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid DISCOVER_REQ Data',\n description: 'DISCOVER_REQ payload too short (minimum 6 bytes required)',\n startByte: segmentOffset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n // Byte 0: flags - upper 4 bits is sub_type (0x8), lowest bit is prefix_only\n const rawFlags = payload[offset];\n const prefixOnly = (rawFlags & 0x01) !== 0;\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Sub-type: DISCOVER_REQ (0x8) | Prefix Only: ${prefixOnly}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: rawFlags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Byte 1: type_filter - bit for each ADV_TYPE_*\n const typeFilter = payload[offset];\n const typeFilterNames = this.parseTypeFilter(typeFilter);\n if (options?.includeSegments) {\n segments.push({\n name: 'Type Filter',\n description: `Filter mask: 0b${typeFilter.toString(2).padStart(8, '0')} | Types: ${typeFilterNames.length > 0 ? typeFilterNames.join(', ') : 'None'}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: typeFilter.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Bytes 2-5: tag (uint32, little endian)\n const tag = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Tag',\n description: `Random tag for response matching: 0x${tag.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Optional: Bytes 6-9: since (uint32, little endian) - epoch timestamp\n let since = 0;\n if (payload.length >= offset + 4) {\n since = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n const sinceDate = since > 0 ? new Date(since * 1000).toISOString().slice(0, 19) + 'Z' : 'N/A';\n segments.push({\n name: 'Since',\n description: `Filter timestamp: ${since} (${sinceDate})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n }\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags,\n prefixOnly,\n typeFilter,\n typeFilterNames,\n tag,\n since\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n static decodeDiscoverResp(payload, options) {\n const segments = [];\n const segmentOffset = options?.segmentOffset ?? 0;\n // Minimum size: flags(1) + snr(1) + tag(4) + pubkey(8 for prefix) = 14 bytes\n if (payload.length < 14) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: ['DISCOVER_RESP payload too short (minimum 14 bytes required)'],\n subType: enums_1.ControlSubType.NodeDiscoverResp,\n rawFlags: payload.length > 0 ? payload[0] : 0,\n nodeType: enums_1.DeviceRole.Unknown,\n nodeTypeName: 'Unknown',\n snr: 0,\n tag: 0,\n publicKey: '',\n publicKeyLength: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid DISCOVER_RESP Data',\n description: 'DISCOVER_RESP payload too short (minimum 14 bytes required)',\n startByte: segmentOffset,\n endByte: segmentOffset + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n let offset = 0;\n // Byte 0: flags - upper 4 bits is sub_type (0x9), lower 4 bits is node_type\n const rawFlags = payload[offset];\n const nodeType = (rawFlags & 0x0F);\n const nodeTypeName = (0, enum_names_1.getDeviceRoleName)(nodeType);\n if (options?.includeSegments) {\n segments.push({\n name: 'Flags',\n description: `Sub-type: DISCOVER_RESP (0x9) | Node Type: ${nodeTypeName}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: rawFlags.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Byte 1: snr (signed int8, represents SNR * 4)\n const snrRaw = payload[offset];\n const snrSigned = snrRaw > 127 ? snrRaw - 256 : snrRaw;\n const snr = snrSigned / 4.0;\n if (options?.includeSegments) {\n segments.push({\n name: 'SNR',\n description: `Inbound SNR: ${snr.toFixed(2)} dB (raw: ${snrRaw}, signed: ${snrSigned})`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset,\n value: snrRaw.toString(16).padStart(2, '0').toUpperCase()\n });\n }\n offset += 1;\n // Bytes 2-5: tag (uint32, little endian) - reflected from request\n const tag = this.readUint32LE(payload, offset);\n if (options?.includeSegments) {\n segments.push({\n name: 'Tag',\n description: `Reflected tag from request: 0x${tag.toString(16).padStart(8, '0')}`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + 3,\n value: (0, hex_1.bytesToHex)(payload.slice(offset, offset + 4))\n });\n }\n offset += 4;\n // Remaining bytes: public key (8 bytes for prefix, 32 bytes for full)\n const remainingBytes = payload.length - offset;\n const publicKeyLength = remainingBytes;\n const publicKeyBytes = payload.slice(offset, offset + publicKeyLength);\n const publicKey = (0, hex_1.bytesToHex)(publicKeyBytes);\n if (options?.includeSegments) {\n const keyType = publicKeyLength === 32 ? 'Full Public Key' : 'Public Key Prefix';\n segments.push({\n name: keyType,\n description: `${keyType} (${publicKeyLength} bytes)`,\n startByte: segmentOffset + offset,\n endByte: segmentOffset + offset + publicKeyLength - 1,\n value: publicKey\n });\n }\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: true,\n subType: enums_1.ControlSubType.NodeDiscoverResp,\n rawFlags,\n nodeType,\n nodeTypeName,\n snr,\n tag,\n publicKey,\n publicKeyLength\n };\n if (options?.includeSegments) {\n result.segments = segments;\n }\n return result;\n }\n static parseTypeFilter(filter) {\n const types = [];\n if (filter & (1 << enums_1.DeviceRole.ChatNode))\n types.push('Chat');\n if (filter & (1 << enums_1.DeviceRole.Repeater))\n types.push('Repeater');\n if (filter & (1 << enums_1.DeviceRole.RoomServer))\n types.push('Room');\n if (filter & (1 << enums_1.DeviceRole.Sensor))\n types.push('Sensor');\n return types;\n }\n static createErrorPayload(error, payload, options) {\n const result = {\n type: enums_1.PayloadType.Control,\n version: enums_1.PayloadVersion.Version1,\n isValid: false,\n errors: [error],\n subType: enums_1.ControlSubType.NodeDiscoverReq,\n rawFlags: payload.length > 0 ? payload[0] : 0,\n prefixOnly: false,\n typeFilter: 0,\n typeFilterNames: [],\n tag: 0,\n since: 0\n };\n if (options?.includeSegments) {\n result.segments = [{\n name: 'Invalid Control Data',\n description: error,\n startByte: options.segmentOffset ?? 0,\n endByte: (options.segmentOffset ?? 0) + payload.length - 1,\n value: (0, hex_1.bytesToHex)(payload)\n }];\n }\n return result;\n }\n static readUint32LE(buffer, offset) {\n return (buffer[offset] |\n (buffer[offset + 1] << 8) |\n (buffer[offset + 2] << 16) |\n (buffer[offset + 3] << 24)) >>> 0; // >>> 0 to ensure unsigned\n }\n}\nexports.ControlPayloadDecoder = ControlPayloadDecoder;\n//# sourceMappingURL=control.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MeshCorePacketDecoder = void 0;\nconst enums_1 = require(\"../types/enums\");\nconst hex_1 = require(\"../utils/hex\");\nconst enum_names_1 = require(\"../utils/enum-names\");\nconst key_manager_1 = require(\"../crypto/key-manager\");\nconst advert_1 = require(\"./payload-decoders/advert\");\nconst trace_1 = require(\"./payload-decoders/trace\");\nconst group_text_1 = require(\"./payload-decoders/group-text\");\nconst request_1 = require(\"./payload-decoders/request\");\nconst response_1 = require(\"./payload-decoders/response\");\nconst anon_request_1 = require(\"./payload-decoders/anon-request\");\nconst ack_1 = require(\"./payload-decoders/ack\");\nconst path_1 = require(\"./payload-decoders/path\");\nconst text_message_1 = require(\"./payload-decoders/text-message\");\nconst control_1 = require(\"./payload-decoders/control\");\nclass MeshCorePacketDecoder {\n /**\n * Decode a raw packet from hex string\n */\n static decode(hexData, options) {\n const result = this.parseInternal(hexData, false, options);\n return result.packet;\n }\n /**\n * Decode a raw packet from hex string with signature verification for advertisements\n */\n static async decodeWithVerification(hexData, options) {\n const result = await this.parseInternalAsync(hexData, false, options);\n return result.packet;\n }\n /**\n * Analyze packet structure for detailed breakdown\n */\n static analyzeStructure(hexData, options) {\n const result = this.parseInternal(hexData, true, options);\n return result.structure;\n }\n /**\n * Analyze packet structure for detailed breakdown with signature verification for advertisements\n */\n static async analyzeStructureWithVerification(hexData, options) {\n const result = await this.parseInternalAsync(hexData, true, options);\n return result.structure;\n }\n /**\n * Internal unified parsing method\n */\n static parseInternal(hexData, includeStructure, options) {\n const bytes = (0, hex_1.hexToBytes)(hexData);\n const segments = [];\n if (bytes.length < 2) {\n const errorPacket = {\n messageHash: '',\n routeType: enums_1.RouteType.Flood,\n payloadType: enums_1.PayloadType.RawCustom,\n payloadVersion: enums_1.PayloadVersion.Version1,\n pathLength: 0,\n path: null,\n payload: { raw: '', decoded: null },\n totalBytes: bytes.length,\n isValid: false,\n errors: ['Packet too short (minimum 2 bytes required)']\n };\n const errorStructure = {\n segments: [],\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash: '',\n payload: {\n segments: [],\n hex: '',\n startByte: 0,\n type: 'Unknown'\n }\n };\n return { packet: errorPacket, structure: errorStructure };\n }\n try {\n let offset = 0;\n // parse header\n const header = bytes[0];\n const routeType = header & 0x03;\n const payloadType = (header >> 2) & 0x0F;\n const payloadVersion = (header >> 6) & 0x03;\n if (includeStructure) {\n segments.push({\n name: 'Header',\n description: 'Header byte breakdown',\n startByte: 0,\n endByte: 0,\n value: `0x${header.toString(16).padStart(2, '0')}`,\n headerBreakdown: {\n fullBinary: header.toString(2).padStart(8, '0'),\n fields: [\n {\n bits: '0-1',\n field: 'Route Type',\n value: (0, enum_names_1.getRouteTypeName)(routeType),\n binary: (header & 0x03).toString(2).padStart(2, '0')\n },\n {\n bits: '2-5',\n field: 'Payload Type',\n value: (0, enum_names_1.getPayloadTypeName)(payloadType),\n binary: ((header >> 2) & 0x0F).toString(2).padStart(4, '0')\n },\n {\n bits: '6-7',\n field: 'Version',\n value: payloadVersion.toString(),\n binary: ((header >> 6) & 0x03).toString(2).padStart(2, '0')\n }\n ]\n }\n });\n }\n offset = 1;\n // handle transport codes\n let transportCodes;\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n if (bytes.length < offset + 4) {\n throw new Error('Packet too short for transport codes');\n }\n const code1 = bytes[offset] | (bytes[offset + 1] << 8);\n const code2 = bytes[offset + 2] | (bytes[offset + 3] << 8);\n transportCodes = [code1, code2];\n if (includeStructure) {\n const transportCode = (bytes[offset]) | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24);\n segments.push({\n name: 'Transport Code',\n description: 'Used for Direct/Response routing',\n startByte: offset,\n endByte: offset + 3,\n value: `0x${transportCode.toString(16).padStart(8, '0')}`\n });\n }\n offset += 4;\n }\n // parse path\n if (bytes.length < offset + 1) {\n throw new Error('Packet too short for path length');\n }\n const pathLength = bytes[offset];\n if (includeStructure) {\n let pathLengthDescription = `Path contains ${pathLength} bytes`;\n if (routeType === enums_1.RouteType.Direct || routeType === enums_1.RouteType.TransportDirect) {\n pathLengthDescription = `For \"Direct\" packets, this contains routing instructions. ${pathLength} bytes of routing instructions (decreases as packet travels)`;\n }\n else if (routeType === enums_1.RouteType.Flood || routeType === enums_1.RouteType.TransportFlood) {\n pathLengthDescription = `${pathLength} bytes showing route taken (increases as packet floods)`;\n }\n segments.push({\n name: 'Path Length',\n description: pathLengthDescription,\n startByte: offset,\n endByte: offset,\n value: `0x${pathLength.toString(16).padStart(2, '0')}`\n });\n }\n offset += 1;\n if (bytes.length < offset + pathLength) {\n throw new Error('Packet too short for path data');\n }\n // convert path data to hex strings\n const pathBytes = bytes.subarray(offset, offset + pathLength);\n const path = pathLength > 0 ? Array.from(pathBytes).map(hex_1.byteToHex) : null;\n if (includeStructure && pathLength > 0) {\n if (payloadType === enums_1.PayloadType.Trace) {\n // TRACE packets have SNR values in path\n const snrValues = [];\n for (let i = 0; i < pathLength; i++) {\n const snrRaw = bytes[offset + i];\n const snrSigned = snrRaw > 127 ? snrRaw - 256 : snrRaw;\n const snrDb = snrSigned / 4.0;\n snrValues.push(`${snrDb.toFixed(2)}dB (0x${snrRaw.toString(16).padStart(2, '0')})`);\n }\n segments.push({\n name: 'Path SNR Data',\n description: `SNR values collected during trace: ${snrValues.join(', ')}`,\n startByte: offset,\n endByte: offset + pathLength - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset, offset + pathLength))\n });\n }\n else {\n let pathDescription = 'Routing path information';\n if (routeType === enums_1.RouteType.Direct || routeType === enums_1.RouteType.TransportDirect) {\n pathDescription = 'Routing instructions (bytes are stripped at each hop as packet travels to destination)';\n }\n else if (routeType === enums_1.RouteType.Flood || routeType === enums_1.RouteType.TransportFlood) {\n pathDescription = 'Historical route taken (bytes are added as packet floods through network)';\n }\n segments.push({\n name: 'Path Data',\n description: pathDescription,\n startByte: offset,\n endByte: offset + pathLength - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset, offset + pathLength))\n });\n }\n }\n offset += pathLength;\n // extract payload\n const payloadBytes = bytes.subarray(offset);\n const payloadHex = (0, hex_1.bytesToHex)(payloadBytes);\n if (includeStructure && bytes.length > offset) {\n segments.push({\n name: 'Payload',\n description: `${(0, enum_names_1.getPayloadTypeName)(payloadType)} payload data`,\n startByte: offset,\n endByte: bytes.length - 1,\n value: (0, hex_1.bytesToHex)(bytes.slice(offset))\n });\n }\n // decode payload based on type and optionally get segments in one pass\n let decodedPayload = null;\n const payloadSegments = [];\n if (payloadType === enums_1.PayloadType.Advert) {\n const result = advert_1.AdvertPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Trace) {\n const result = trace_1.TracePayloadDecoder.decode(payloadBytes, path, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments; // Remove from decoded payload to keep it clean\n }\n }\n else if (payloadType === enums_1.PayloadType.GroupText) {\n const result = group_text_1.GroupTextPayloadDecoder.decode(payloadBytes, {\n ...options,\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Request) {\n const result = request_1.RequestPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Response) {\n const result = response_1.ResponsePayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0 // Payload segments are relative to payload start\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.AnonRequest) {\n const result = anon_request_1.AnonRequestPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Ack) {\n const result = ack_1.AckPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Path) {\n decodedPayload = path_1.PathPayloadDecoder.decode(payloadBytes);\n }\n else if (payloadType === enums_1.PayloadType.TextMessage) {\n const result = text_message_1.TextMessagePayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n else if (payloadType === enums_1.PayloadType.Control) {\n const result = control_1.ControlPayloadDecoder.decode(payloadBytes, {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n decodedPayload = result;\n if (result?.segments) {\n payloadSegments.push(...result.segments);\n delete result.segments;\n }\n }\n // if no segments were generated and we need structure, show basic payload info\n if (includeStructure && payloadSegments.length === 0 && bytes.length > offset) {\n payloadSegments.push({\n name: `${(0, enum_names_1.getPayloadTypeName)(payloadType)} Payload`,\n description: `Raw ${(0, enum_names_1.getPayloadTypeName)(payloadType)} payload data (${payloadBytes.length} bytes)`,\n startByte: 0,\n endByte: payloadBytes.length - 1,\n value: (0, hex_1.bytesToHex)(payloadBytes)\n });\n }\n // calculate message hash\n const messageHash = this.calculateMessageHash(bytes, routeType, payloadType, payloadVersion);\n const packet = {\n messageHash,\n routeType,\n payloadType,\n payloadVersion,\n transportCodes,\n pathLength,\n path,\n payload: {\n raw: payloadHex,\n decoded: decodedPayload\n },\n totalBytes: bytes.length,\n isValid: true\n };\n const structure = {\n segments,\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash,\n payload: {\n segments: payloadSegments,\n hex: payloadHex,\n startByte: offset,\n type: (0, enum_names_1.getPayloadTypeName)(payloadType)\n }\n };\n return { packet, structure };\n }\n catch (error) {\n const errorPacket = {\n messageHash: '',\n routeType: enums_1.RouteType.Flood,\n payloadType: enums_1.PayloadType.RawCustom,\n payloadVersion: enums_1.PayloadVersion.Version1,\n pathLength: 0,\n path: null,\n payload: { raw: '', decoded: null },\n totalBytes: bytes.length,\n isValid: false,\n errors: [error instanceof Error ? error.message : 'Unknown decoding error']\n };\n const errorStructure = {\n segments: [],\n totalBytes: bytes.length,\n rawHex: hexData.toUpperCase(),\n messageHash: '',\n payload: {\n segments: [],\n hex: '',\n startByte: 0,\n type: 'Unknown'\n }\n };\n return { packet: errorPacket, structure: errorStructure };\n }\n }\n /**\n * Internal unified parsing method with signature verification for advertisements\n */\n static async parseInternalAsync(hexData, includeStructure, options) {\n // First do the regular parsing\n const result = this.parseInternal(hexData, includeStructure, options);\n // If it's an advertisement, verify the signature\n if (result.packet.payloadType === enums_1.PayloadType.Advert && result.packet.payload.decoded) {\n try {\n const advertPayload = result.packet.payload.decoded;\n const verifiedAdvert = await advert_1.AdvertPayloadDecoder.decodeWithVerification((0, hex_1.hexToBytes)(result.packet.payload.raw), {\n includeSegments: includeStructure,\n segmentOffset: 0\n });\n if (verifiedAdvert) {\n // Update the payload with signature verification results\n result.packet.payload.decoded = verifiedAdvert;\n // If the advertisement signature is invalid, mark the whole packet as invalid\n if (!verifiedAdvert.isValid) {\n result.packet.isValid = false;\n result.packet.errors = verifiedAdvert.errors || ['Invalid advertisement signature'];\n }\n // Update structure segments if needed\n if (includeStructure && verifiedAdvert.segments) {\n result.structure.payload.segments = verifiedAdvert.segments;\n delete verifiedAdvert.segments;\n }\n }\n }\n catch (error) {\n console.error('Signature verification failed:', error);\n }\n }\n return result;\n }\n /**\n * Validate packet format without full decoding\n */\n static validate(hexData) {\n const bytes = (0, hex_1.hexToBytes)(hexData);\n const errors = [];\n if (bytes.length < 2) {\n errors.push('Packet too short (minimum 2 bytes required)');\n return { isValid: false, errors };\n }\n try {\n let offset = 1; // Skip header\n // check transport codes\n const header = bytes[0];\n const routeType = header & 0x03;\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n if (bytes.length < offset + 4) {\n errors.push('Packet too short for transport codes');\n }\n offset += 4;\n }\n // check path length\n if (bytes.length < offset + 1) {\n errors.push('Packet too short for path length');\n }\n else {\n const pathLength = bytes[offset];\n offset += 1;\n if (bytes.length < offset + pathLength) {\n errors.push('Packet too short for path data');\n }\n offset += pathLength;\n }\n // check if we have payload data\n if (offset >= bytes.length) {\n errors.push('No payload data found');\n }\n }\n catch (error) {\n errors.push(error instanceof Error ? error.message : 'Validation error');\n }\n return { isValid: errors.length === 0, errors: errors.length > 0 ? errors : undefined };\n }\n /**\n * Calculate message hash for a packet\n */\n static calculateMessageHash(bytes, routeType, payloadType, payloadVersion) {\n // for TRACE packets, use the trace tag as hash\n if (payloadType === enums_1.PayloadType.Trace && bytes.length >= 13) {\n let offset = 1;\n // skip transport codes if present\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n offset += 4;\n }\n // skip path data\n if (bytes.length > offset) {\n const pathLen = bytes[offset];\n offset += 1 + pathLen;\n }\n // extract trace tag\n if (bytes.length >= offset + 4) {\n const traceTag = (bytes[offset]) | (bytes[offset + 1] << 8) | (bytes[offset + 2] << 16) | (bytes[offset + 3] << 24);\n return (0, hex_1.numberToHex)(traceTag, 8);\n }\n }\n // for other packets, create hash from constant parts\n const constantHeader = (payloadType << 2) | (payloadVersion << 6);\n let offset = 1;\n // skip transport codes if present\n if (routeType === enums_1.RouteType.TransportFlood || routeType === enums_1.RouteType.TransportDirect) {\n offset += 4;\n }\n // skip path data\n if (bytes.length > offset) {\n const pathLen = bytes[offset];\n offset += 1 + pathLen;\n }\n const payloadData = bytes.slice(offset);\n const hashInput = [constantHeader, ...Array.from(payloadData)];\n // generate hash\n let hash = 0;\n for (let i = 0; i < hashInput.length; i++) {\n hash = ((hash << 5) - hash + hashInput[i]) & 0xffffffff;\n }\n return (0, hex_1.numberToHex)(hash, 8);\n }\n /**\n * Create a key store for decryption\n */\n static createKeyStore(initialKeys) {\n return new key_manager_1.MeshCoreKeyStore(initialKeys);\n }\n}\nexports.MeshCorePacketDecoder = MeshCorePacketDecoder;\n//# sourceMappingURL=packet-decoder.js.map","\"use strict\";\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createAuthToken = createAuthToken;\nexports.verifyAuthToken = verifyAuthToken;\nexports.parseAuthToken = parseAuthToken;\nexports.decodeAuthTokenPayload = decodeAuthTokenPayload;\nconst orlp_ed25519_wasm_1 = require(\"../crypto/orlp-ed25519-wasm\");\nconst hex_1 = require(\"./hex\");\n/**\n * Base64url encode (URL-safe base64 without padding)\n */\nfunction base64urlEncode(data) {\n // Convert to base64\n let base64 = '';\n if (typeof Buffer !== 'undefined') {\n // Node.js\n base64 = Buffer.from(data).toString('base64');\n }\n else {\n // Browser\n const binary = String.fromCharCode(...Array.from(data));\n base64 = btoa(binary);\n }\n // Make URL-safe and remove padding\n return base64\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_')\n .replace(/=/g, '');\n}\n/**\n * Base64url decode\n */\nfunction base64urlDecode(str) {\n // Add padding back\n let base64 = str.replace(/-/g, '+').replace(/_/g, '/');\n while (base64.length % 4) {\n base64 += '=';\n }\n if (typeof Buffer !== 'undefined') {\n // Node.js\n return new Uint8Array(Buffer.from(base64, 'base64'));\n }\n else {\n // Browser\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n }\n}\n/**\n * Create a signed authentication token\n *\n * @param payload - Token payload containing claims\n * @param privateKeyHex - 64-byte private key in hex format (orlp/ed25519 format)\n * @param publicKeyHex - 32-byte public key in hex format\n * @returns JWT-style token string in format: header.payload.signature\n */\nasync function createAuthToken(payload, privateKeyHex, publicKeyHex) {\n // Create header\n const header = {\n alg: 'Ed25519',\n typ: 'JWT'\n };\n // Ensure publicKey is in the payload (normalize to uppercase)\n if (!payload.publicKey) {\n payload.publicKey = publicKeyHex.toUpperCase();\n }\n else {\n payload.publicKey = payload.publicKey.toUpperCase();\n }\n // Ensure iat is set\n if (!payload.iat) {\n payload.iat = Math.floor(Date.now() / 1000);\n }\n // Encode header and payload\n const headerJson = JSON.stringify(header);\n const payloadJson = JSON.stringify(payload);\n const headerBytes = new TextEncoder().encode(headerJson);\n const payloadBytes = new TextEncoder().encode(payloadJson);\n const headerEncoded = base64urlEncode(headerBytes);\n const payloadEncoded = base64urlEncode(payloadBytes);\n // Create signing input: header.payload\n const signingInput = `${headerEncoded}.${payloadEncoded}`;\n const signingInputBytes = new TextEncoder().encode(signingInput);\n const signingInputHex = (0, hex_1.bytesToHex)(signingInputBytes);\n // Sign the input using the normalized public key from payload\n const signatureHex = await (0, orlp_ed25519_wasm_1.sign)(signingInputHex, privateKeyHex, payload.publicKey);\n // Return token in JWT format: header.payload.signature\n // Note: We use hex for signature instead of base64url for consistency with MeshCore\n return `${headerEncoded}.${payloadEncoded}.${signatureHex}`;\n}\n/**\n * Verify and decode an authentication token\n *\n * @param token - JWT-style token string\n * @param expectedPublicKeyHex - Expected public key in hex format (optional, will check against payload if provided)\n * @returns Decoded payload if valid, null if invalid\n */\nasync function verifyAuthToken(token, expectedPublicKeyHex) {\n try {\n // Parse token\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n const [headerEncoded, payloadEncoded, signatureHex] = parts;\n // Decode header and payload\n const headerBytes = base64urlDecode(headerEncoded);\n const payloadBytes = base64urlDecode(payloadEncoded);\n const headerJson = new TextDecoder().decode(headerBytes);\n const payloadJson = new TextDecoder().decode(payloadBytes);\n const header = JSON.parse(headerJson);\n const payload = JSON.parse(payloadJson);\n // Validate header\n if (header.alg !== 'Ed25519' || header.typ !== 'JWT') {\n return null;\n }\n // Validate payload has required fields\n if (!payload.publicKey || !payload.iat) {\n return null;\n }\n // Check if expected public key matches\n if (expectedPublicKeyHex && payload.publicKey.toUpperCase() !== expectedPublicKeyHex.toUpperCase()) {\n return null;\n }\n // Check expiration if present\n if (payload.exp) {\n const now = Math.floor(Date.now() / 1000);\n if (now > payload.exp) {\n return null; // Token expired\n }\n }\n // Verify signature\n const signingInput = `${headerEncoded}.${payloadEncoded}`;\n const signingInputBytes = new TextEncoder().encode(signingInput);\n const signingInputHex = (0, hex_1.bytesToHex)(signingInputBytes);\n const isValid = await (0, orlp_ed25519_wasm_1.verify)(signatureHex, signingInputHex, payload.publicKey);\n if (!isValid) {\n return null;\n }\n return payload;\n }\n catch (error) {\n return null;\n }\n}\n/**\n * Parse a token without verifying (useful for debugging)\n *\n * @param token - JWT-style token string\n * @returns Parsed token structure or null if invalid format\n */\nfunction parseAuthToken(token) {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n return {\n header: parts[0],\n payload: parts[1],\n signature: parts[2]\n };\n }\n catch (error) {\n return null;\n }\n}\n/**\n * Decode token payload without verification (useful for debugging)\n *\n * @param token - JWT-style token string\n * @returns Decoded payload or null if invalid format\n */\nfunction decodeAuthTokenPayload(token) {\n try {\n const parts = token.split('.');\n if (parts.length !== 3) {\n return null;\n }\n const payloadBytes = base64urlDecode(parts[1]);\n const payloadJson = new TextDecoder().decode(payloadBytes);\n return JSON.parse(payloadJson);\n }\n catch (error) {\n return null;\n }\n}\n//# sourceMappingURL=auth-token.js.map","\"use strict\";\n// MeshCore Packet Decoder\n// Copyright (c) 2025 Michael Hart: https://github.com/michaelhart/meshcore-decoder\n// MIT License\nvar __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n var desc = Object.getOwnPropertyDescriptor(m, k);\n if (!desc || (\"get\" in desc ? !m.__esModule : desc.writable || desc.configurable)) {\n desc = { enumerable: true, get: function() { return m[k]; } };\n }\n Object.defineProperty(o, k2, desc);\n}) : (function(o, m, k, k2) {\n if (k2 === undefined) k2 = k;\n o[k2] = m[k];\n}));\nvar __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {\n Object.defineProperty(o, \"default\", { enumerable: true, value: v });\n}) : function(o, v) {\n o[\"default\"] = v;\n});\nvar __importStar = (this && this.__importStar) || (function () {\n var ownKeys = function(o) {\n ownKeys = Object.getOwnPropertyNames || function (o) {\n var ar = [];\n for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;\n return ar;\n };\n return ownKeys(o);\n };\n return function (mod) {\n if (mod && mod.__esModule) return mod;\n var result = {};\n if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== \"default\") __createBinding(result, mod, k[i]);\n __setModuleDefault(result, mod);\n return result;\n };\n})();\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Utils = exports.decodeAuthTokenPayload = exports.parseAuthToken = exports.verifyAuthToken = exports.createAuthToken = exports.getControlSubTypeName = exports.getRequestTypeName = exports.getDeviceRoleName = exports.getPayloadVersionName = exports.getPayloadTypeName = exports.getRouteTypeName = exports.numberToHex = exports.byteToHex = exports.bytesToHex = exports.hexToBytes = exports.Ed25519SignatureVerifier = exports.ChannelCrypto = exports.MeshCoreKeyStore = exports.ControlSubType = exports.RequestType = exports.AdvertFlags = exports.DeviceRole = exports.PayloadVersion = exports.PayloadType = exports.RouteType = exports.MeshCoreDecoder = exports.MeshCorePacketDecoder = void 0;\nvar packet_decoder_1 = require(\"./decoder/packet-decoder\");\nObject.defineProperty(exports, \"MeshCorePacketDecoder\", { enumerable: true, get: function () { return packet_decoder_1.MeshCorePacketDecoder; } });\nvar packet_decoder_2 = require(\"./decoder/packet-decoder\");\nObject.defineProperty(exports, \"MeshCoreDecoder\", { enumerable: true, get: function () { return packet_decoder_2.MeshCorePacketDecoder; } });\n// Enum exports\nvar enums_1 = require(\"./types/enums\");\nObject.defineProperty(exports, \"RouteType\", { enumerable: true, get: function () { return enums_1.RouteType; } });\nObject.defineProperty(exports, \"PayloadType\", { enumerable: true, get: function () { return enums_1.PayloadType; } });\nObject.defineProperty(exports, \"PayloadVersion\", { enumerable: true, get: function () { return enums_1.PayloadVersion; } });\nObject.defineProperty(exports, \"DeviceRole\", { enumerable: true, get: function () { return enums_1.DeviceRole; } });\nObject.defineProperty(exports, \"AdvertFlags\", { enumerable: true, get: function () { return enums_1.AdvertFlags; } });\nObject.defineProperty(exports, \"RequestType\", { enumerable: true, get: function () { return enums_1.RequestType; } });\nObject.defineProperty(exports, \"ControlSubType\", { enumerable: true, get: function () { return enums_1.ControlSubType; } });\n// Crypto exports\nvar key_manager_1 = require(\"./crypto/key-manager\");\nObject.defineProperty(exports, \"MeshCoreKeyStore\", { enumerable: true, get: function () { return key_manager_1.MeshCoreKeyStore; } });\nvar channel_crypto_1 = require(\"./crypto/channel-crypto\");\nObject.defineProperty(exports, \"ChannelCrypto\", { enumerable: true, get: function () { return channel_crypto_1.ChannelCrypto; } });\nvar ed25519_verifier_1 = require(\"./crypto/ed25519-verifier\");\nObject.defineProperty(exports, \"Ed25519SignatureVerifier\", { enumerable: true, get: function () { return ed25519_verifier_1.Ed25519SignatureVerifier; } });\n// Utility exports\nvar hex_1 = require(\"./utils/hex\");\nObject.defineProperty(exports, \"hexToBytes\", { enumerable: true, get: function () { return hex_1.hexToBytes; } });\nObject.defineProperty(exports, \"bytesToHex\", { enumerable: true, get: function () { return hex_1.bytesToHex; } });\nObject.defineProperty(exports, \"byteToHex\", { enumerable: true, get: function () { return hex_1.byteToHex; } });\nObject.defineProperty(exports, \"numberToHex\", { enumerable: true, get: function () { return hex_1.numberToHex; } });\nvar enum_names_1 = require(\"./utils/enum-names\");\nObject.defineProperty(exports, \"getRouteTypeName\", { enumerable: true, get: function () { return enum_names_1.getRouteTypeName; } });\nObject.defineProperty(exports, \"getPayloadTypeName\", { enumerable: true, get: function () { return enum_names_1.getPayloadTypeName; } });\nObject.defineProperty(exports, \"getPayloadVersionName\", { enumerable: true, get: function () { return enum_names_1.getPayloadVersionName; } });\nObject.defineProperty(exports, \"getDeviceRoleName\", { enumerable: true, get: function () { return enum_names_1.getDeviceRoleName; } });\nObject.defineProperty(exports, \"getRequestTypeName\", { enumerable: true, get: function () { return enum_names_1.getRequestTypeName; } });\nObject.defineProperty(exports, \"getControlSubTypeName\", { enumerable: true, get: function () { return enum_names_1.getControlSubTypeName; } });\nvar auth_token_1 = require(\"./utils/auth-token\");\nObject.defineProperty(exports, \"createAuthToken\", { enumerable: true, get: function () { return auth_token_1.createAuthToken; } });\nObject.defineProperty(exports, \"verifyAuthToken\", { enumerable: true, get: function () { return auth_token_1.verifyAuthToken; } });\nObject.defineProperty(exports, \"parseAuthToken\", { enumerable: true, get: function () { return auth_token_1.parseAuthToken; } });\nObject.defineProperty(exports, \"decodeAuthTokenPayload\", { enumerable: true, get: function () { return auth_token_1.decodeAuthTokenPayload; } });\nconst EnumUtils = __importStar(require(\"./utils/enum-names\"));\nconst HexUtils = __importStar(require(\"./utils/hex\"));\nconst AuthTokenUtils = __importStar(require(\"./utils/auth-token\"));\nconst orlp_ed25519_wasm_1 = require(\"./crypto/orlp-ed25519-wasm\");\nexports.Utils = {\n ...EnumUtils,\n ...HexUtils,\n ...AuthTokenUtils,\n derivePublicKey: orlp_ed25519_wasm_1.derivePublicKey,\n validateKeyPair: orlp_ed25519_wasm_1.validateKeyPair,\n sign: orlp_ed25519_wasm_1.sign,\n verify: orlp_ed25519_wasm_1.verify\n};\n//# sourceMappingURL=index.js.map","import { useEffect, useRef, useMemo } from 'react';\nimport { MeshCoreDecoder, PayloadType, Utils } from '@michaelhart/meshcore-decoder';\nimport type { RawPacket } from '../types';\n\ninterface RawPacketListProps {\n packets: RawPacket[];\n}\n\nfunction formatTime(timestamp: number): string {\n const date = new Date(timestamp * 1000);\n return date.toLocaleTimeString([], { hour: '2-digit', minute: '2-digit', second: '2-digit' });\n}\n\nfunction formatSignalInfo(packet: RawPacket): string {\n const parts: string[] = [];\n if (packet.snr !== null && packet.snr !== undefined) {\n parts.push(`SNR: ${packet.snr.toFixed(1)} dB`);\n }\n if (packet.rssi !== null && packet.rssi !== undefined) {\n parts.push(`RSSI: ${packet.rssi} dBm`);\n }\n return parts.join(' | ');\n}\n\n// Decrypted info from the packet (validated by backend)\ninterface DecryptedInfo {\n channel_name: string | null;\n sender: string | null;\n}\n\n// Decode a packet and generate a human-readable summary\n// Uses backend's decrypted_info when available (validated), falls back to decoder\nfunction decodePacketSummary(\n hexData: string,\n decryptedInfo: DecryptedInfo | null\n): {\n summary: string;\n routeType: string;\n details?: string;\n} {\n try {\n const decoded = MeshCoreDecoder.decode(hexData);\n\n if (!decoded.isValid) {\n return { summary: 'Invalid packet', routeType: 'Unknown' };\n }\n\n const routeType = Utils.getRouteTypeName(decoded.routeType);\n const payloadTypeName = Utils.getPayloadTypeName(decoded.payloadType);\n\n // Build path string if available\n const pathStr = decoded.path && decoded.path.length > 0 ? ` via ${decoded.path.join('-')}` : '';\n\n // Generate summary based on payload type\n let summary = payloadTypeName;\n let details: string | undefined;\n\n switch (decoded.payloadType) {\n case PayloadType.TextMessage: {\n const payload = decoded.payload.decoded as {\n destinationHash?: string;\n sourceHash?: string;\n } | null;\n if (payload?.sourceHash && payload?.destinationHash) {\n summary = `DM from ${payload.sourceHash} to ${payload.destinationHash}${pathStr}`;\n } else {\n summary = `DM${pathStr}`;\n }\n break;\n }\n\n case PayloadType.GroupText: {\n const payload = decoded.payload.decoded as {\n channelHash?: string;\n } | null;\n // Use backend's validated decrypted_info when available\n if (decryptedInfo?.channel_name) {\n if (decryptedInfo.sender) {\n summary = `GT from ${decryptedInfo.sender} in ${decryptedInfo.channel_name}${pathStr}`;\n } else {\n summary = `GT in ${decryptedInfo.channel_name}${pathStr}`;\n }\n } else if (payload?.channelHash) {\n // Fallback to showing channel hash when not decrypted\n summary = `GT ch:${payload.channelHash}${pathStr}`;\n } else {\n summary = `GroupText${pathStr}`;\n }\n break;\n }\n\n case PayloadType.Advert: {\n const payload = decoded.payload.decoded as {\n publicKey?: string;\n appData?: { name?: string; deviceRole?: number };\n } | null;\n if (payload?.appData?.name) {\n const role =\n payload.appData.deviceRole !== undefined\n ? Utils.getDeviceRoleName(payload.appData.deviceRole)\n : '';\n summary = `Advert: ${payload.appData.name}${role ? ` (${role})` : ''}${pathStr}`;\n } else if (payload?.publicKey) {\n summary = `Advert: ${payload.publicKey.slice(0, 8)}...${pathStr}`;\n } else {\n summary = `Advert${pathStr}`;\n }\n break;\n }\n\n case PayloadType.Ack: {\n summary = `ACK${pathStr}`;\n break;\n }\n\n case PayloadType.Request: {\n summary = `Request${pathStr}`;\n break;\n }\n\n case PayloadType.Response: {\n summary = `Response${pathStr}`;\n break;\n }\n\n case PayloadType.Trace: {\n summary = `Trace${pathStr}`;\n break;\n }\n\n case PayloadType.Path: {\n summary = `Path${pathStr}`;\n break;\n }\n\n default:\n summary = `${payloadTypeName}${pathStr}`;\n }\n\n return { summary, routeType, details };\n } catch {\n return { summary: 'Decode error', routeType: 'Unknown' };\n }\n}\n\n// Get route type badge color\nfunction getRouteTypeColor(routeType: string): string {\n switch (routeType) {\n case 'Flood':\n return 'bg-blue-500/20 text-blue-400';\n case 'Direct':\n return 'bg-green-500/20 text-green-400';\n case 'Transport Flood':\n return 'bg-purple-500/20 text-purple-400';\n case 'Transport Direct':\n return 'bg-orange-500/20 text-orange-400';\n default:\n return 'bg-gray-500/20 text-gray-400';\n }\n}\n\n// Get short route type label\nfunction getRouteTypeLabel(routeType: string): string {\n switch (routeType) {\n case 'Flood':\n return 'F';\n case 'Direct':\n return 'D';\n case 'Transport Flood':\n return 'TF';\n case 'Transport Direct':\n return 'TD';\n default:\n return '?';\n }\n}\n\nexport function RawPacketList({ packets }: RawPacketListProps) {\n const listRef = useRef(null);\n\n // Decode all packets (memoized to avoid re-decoding on every render)\n const decodedPackets = useMemo(() => {\n return packets.map((packet) => ({\n packet,\n decoded: decodePacketSummary(packet.data, packet.decrypted_info),\n }));\n }, [packets]);\n\n useEffect(() => {\n if (listRef.current) {\n listRef.current.scrollTop = listRef.current.scrollHeight;\n }\n }, [packets]);\n\n if (packets.length === 0) {\n return (\n
\n No packets received yet. Packets will appear here in real-time.\n
\n );\n }\n\n // Sort packets by timestamp ascending (oldest first)\n const sortedPackets = [...decodedPackets].sort((a, b) => a.packet.timestamp - b.packet.timestamp);\n\n return (\n
\n {sortedPackets.map(({ packet, decoded }) => (\n
\n
\n {/* Route type badge */}\n \n {getRouteTypeLabel(decoded.routeType)}\n \n\n {/* Encryption status */}\n {!packet.decrypted && 🔒}\n\n {/* Summary */}\n \n {decoded.summary}\n \n\n {/* Time */}\n \n {formatTime(packet.timestamp)}\n \n
\n\n {/* Signal info */}\n {(packet.snr !== null || packet.rssi !== null) && (\n
\n {formatSignalInfo(packet)}\n
\n )}\n\n {/* Raw hex data (always visible) */}\n
\n {packet.data.toUpperCase()}\n
\n
\n ))}\n
\n );\n}\n","import { useEffect, useRef } from 'react';\nexport function useAttribution(map, attribution) {\n const attributionRef = useRef(attribution);\n useEffect(function updateAttribution() {\n if (attribution !== attributionRef.current && map.attributionControl != null) {\n if (attributionRef.current != null) {\n map.attributionControl.removeAttribution(attributionRef.current);\n }\n if (attribution != null) {\n map.attributionControl.addAttribution(attribution);\n }\n }\n attributionRef.current = attribution;\n }, [\n map,\n attribution\n ]);\n}\n","export function updateCircle(layer, props, prevProps) {\n if (props.center !== prevProps.center) {\n layer.setLatLng(props.center);\n }\n if (props.radius != null && props.radius !== prevProps.radius) {\n layer.setRadius(props.radius);\n }\n}\n","import { createContext, useContext } from 'react';\nexport const CONTEXT_VERSION = 1;\nexport function createLeafletContext(map) {\n return Object.freeze({\n __version: CONTEXT_VERSION,\n map\n });\n}\nexport function extendContext(source, extra) {\n return Object.freeze({\n ...source,\n ...extra\n });\n}\nexport const LeafletContext = createContext(null);\nexport const LeafletProvider = LeafletContext.Provider;\nexport function useLeafletContext() {\n const context = useContext(LeafletContext);\n if (context == null) {\n throw new Error('No context provided: useLeafletContext() can only be used in a descendant of ');\n }\n return context;\n}\n","import React, { forwardRef, useEffect, useImperativeHandle, useState } from 'react';\nimport { createPortal } from 'react-dom';\nimport { LeafletProvider } from './context.js';\nexport function createContainerComponent(useElement) {\n function ContainerComponent(props, forwardedRef) {\n const { instance , context } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return props.children == null ? null : /*#__PURE__*/ React.createElement(LeafletProvider, {\n value: context\n }, props.children);\n }\n return /*#__PURE__*/ forwardRef(ContainerComponent);\n}\nexport function createDivOverlayComponent(useElement) {\n function OverlayComponent(props, forwardedRef) {\n const [isOpen, setOpen] = useState(false);\n const { instance } = useElement(props, setOpen).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n useEffect(function updateOverlay() {\n if (isOpen) {\n instance.update();\n }\n }, [\n instance,\n isOpen,\n props.children\n ]);\n // @ts-ignore _contentNode missing in type definition\n const contentNode = instance._contentNode;\n return contentNode ? /*#__PURE__*/ createPortal(props.children, contentNode) : null;\n }\n return /*#__PURE__*/ forwardRef(OverlayComponent);\n}\nexport function createLeafComponent(useElement) {\n function LeafComponent(props, forwardedRef) {\n const { instance } = useElement(props).current;\n useImperativeHandle(forwardedRef, ()=>instance);\n return null;\n }\n return /*#__PURE__*/ forwardRef(LeafComponent);\n}\n","import { useEffect, useRef } from 'react';\nexport function useEventHandlers(element, eventHandlers) {\n const eventHandlersRef = useRef();\n useEffect(function addEventHandlers() {\n if (eventHandlers != null) {\n element.instance.on(eventHandlers);\n }\n eventHandlersRef.current = eventHandlers;\n return function removeEventHandlers() {\n if (eventHandlersRef.current != null) {\n element.instance.off(eventHandlersRef.current);\n }\n eventHandlersRef.current = null;\n };\n }, [\n element,\n eventHandlers\n ]);\n}\n","export function withPane(props, context) {\n const pane = props.pane ?? context.pane;\n return pane ? {\n ...props,\n pane\n } : props;\n}\n","import { useAttribution } from './attribution.js';\nimport { useLeafletContext } from './context.js';\nimport { useEventHandlers } from './events.js';\nimport { withPane } from './pane.js';\nexport function createDivOverlayHook(useElement, useLifecycle) {\n return function useDivOverlay(props, setOpen) {\n const context = useLeafletContext();\n const elementRef = useElement(withPane(props, context), context);\n useAttribution(context.map, props.attribution);\n useEventHandlers(elementRef.current, props.eventHandlers);\n useLifecycle(elementRef.current, context, props, setOpen);\n return elementRef;\n };\n}\n","/* @preserve\n * Leaflet 1.9.4, a JS library for interactive maps. https://leafletjs.com\n * (c) 2010-2023 Vladimir Agafonkin, (c) 2010-2011 CloudMade\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.leaflet = {}));\n})(this, (function (exports) { 'use strict';\n\n var version = \"1.9.4\";\n\n /*\r\n * @namespace Util\r\n *\r\n * Various utility functions, used by Leaflet internally.\r\n */\r\n\r\n // @function extend(dest: Object, src?: Object): Object\r\n // Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter. Has an `L.extend` shortcut.\r\n function extend(dest) {\r\n \tvar i, j, len, src;\r\n\r\n \tfor (j = 1, len = arguments.length; j < len; j++) {\r\n \t\tsrc = arguments[j];\r\n \t\tfor (i in src) {\r\n \t\t\tdest[i] = src[i];\r\n \t\t}\r\n \t}\r\n \treturn dest;\r\n }\r\n\r\n // @function create(proto: Object, properties?: Object): Object\r\n // Compatibility polyfill for [Object.create](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Object/create)\r\n var create$2 = Object.create || (function () {\r\n \tfunction F() {}\r\n \treturn function (proto) {\r\n \t\tF.prototype = proto;\r\n \t\treturn new F();\r\n \t};\r\n })();\r\n\r\n // @function bind(fn: Function, …): Function\r\n // Returns a new function bound to the arguments passed, like [Function.prototype.bind](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Function/bind).\r\n // Has a `L.bind()` shortcut.\r\n function bind(fn, obj) {\r\n \tvar slice = Array.prototype.slice;\r\n\r\n \tif (fn.bind) {\r\n \t\treturn fn.bind.apply(fn, slice.call(arguments, 1));\r\n \t}\r\n\r\n \tvar args = slice.call(arguments, 2);\r\n\r\n \treturn function () {\r\n \t\treturn fn.apply(obj, args.length ? args.concat(slice.call(arguments)) : arguments);\r\n \t};\r\n }\r\n\r\n // @property lastId: Number\r\n // Last unique ID used by [`stamp()`](#util-stamp)\r\n var lastId = 0;\r\n\r\n // @function stamp(obj: Object): Number\r\n // Returns the unique ID of an object, assigning it one if it doesn't have it.\r\n function stamp(obj) {\r\n \tif (!('_leaflet_id' in obj)) {\r\n \t\tobj['_leaflet_id'] = ++lastId;\r\n \t}\r\n \treturn obj._leaflet_id;\r\n }\r\n\r\n // @function throttle(fn: Function, time: Number, context: Object): Function\r\n // Returns a function which executes function `fn` with the given scope `context`\r\n // (so that the `this` keyword refers to `context` inside `fn`'s code). The function\r\n // `fn` will be called no more than one time per given amount of `time`. The arguments\r\n // received by the bound function will be any arguments passed when binding the\r\n // function, followed by any arguments passed when invoking the bound function.\r\n // Has an `L.throttle` shortcut.\r\n function throttle(fn, time, context) {\r\n \tvar lock, args, wrapperFn, later;\r\n\r\n \tlater = function () {\r\n \t\t// reset lock and call if queued\r\n \t\tlock = false;\r\n \t\tif (args) {\r\n \t\t\twrapperFn.apply(context, args);\r\n \t\t\targs = false;\r\n \t\t}\r\n \t};\r\n\r\n \twrapperFn = function () {\r\n \t\tif (lock) {\r\n \t\t\t// called too soon, queue to call later\r\n \t\t\targs = arguments;\r\n\r\n \t\t} else {\r\n \t\t\t// call and lock until later\r\n \t\t\tfn.apply(context, arguments);\r\n \t\t\tsetTimeout(later, time);\r\n \t\t\tlock = true;\r\n \t\t}\r\n \t};\r\n\r\n \treturn wrapperFn;\r\n }\r\n\r\n // @function wrapNum(num: Number, range: Number[], includeMax?: Boolean): Number\r\n // Returns the number `num` modulo `range` in such a way so it lies within\r\n // `range[0]` and `range[1]`. The returned value will be always smaller than\r\n // `range[1]` unless `includeMax` is set to `true`.\r\n function wrapNum(x, range, includeMax) {\r\n \tvar max = range[1],\r\n \t min = range[0],\r\n \t d = max - min;\r\n \treturn x === max && includeMax ? x : ((x - min) % d + d) % d + min;\r\n }\r\n\r\n // @function falseFn(): Function\r\n // Returns a function which always returns `false`.\r\n function falseFn() { return false; }\r\n\r\n // @function formatNum(num: Number, precision?: Number|false): Number\r\n // Returns the number `num` rounded with specified `precision`.\r\n // The default `precision` value is 6 decimal places.\r\n // `false` can be passed to skip any processing (can be useful to avoid round-off errors).\r\n function formatNum(num, precision) {\r\n \tif (precision === false) { return num; }\r\n \tvar pow = Math.pow(10, precision === undefined ? 6 : precision);\r\n \treturn Math.round(num * pow) / pow;\r\n }\r\n\r\n // @function trim(str: String): String\r\n // Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)\r\n function trim(str) {\r\n \treturn str.trim ? str.trim() : str.replace(/^\\s+|\\s+$/g, '');\r\n }\r\n\r\n // @function splitWords(str: String): String[]\r\n // Trims and splits the string on whitespace and returns the array of parts.\r\n function splitWords(str) {\r\n \treturn trim(str).split(/\\s+/);\r\n }\r\n\r\n // @function setOptions(obj: Object, options: Object): Object\r\n // Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`. Has an `L.setOptions` shortcut.\r\n function setOptions(obj, options) {\r\n \tif (!Object.prototype.hasOwnProperty.call(obj, 'options')) {\r\n \t\tobj.options = obj.options ? create$2(obj.options) : {};\r\n \t}\r\n \tfor (var i in options) {\r\n \t\tobj.options[i] = options[i];\r\n \t}\r\n \treturn obj.options;\r\n }\r\n\r\n // @function getParamString(obj: Object, existingUrl?: String, uppercase?: Boolean): String\r\n // Converts an object into a parameter URL string, e.g. `{a: \"foo\", b: \"bar\"}`\r\n // translates to `'?a=foo&b=bar'`. If `existingUrl` is set, the parameters will\r\n // be appended at the end. If `uppercase` is `true`, the parameter names will\r\n // be uppercased (e.g. `'?A=foo&B=bar'`)\r\n function getParamString(obj, existingUrl, uppercase) {\r\n \tvar params = [];\r\n \tfor (var i in obj) {\r\n \t\tparams.push(encodeURIComponent(uppercase ? i.toUpperCase() : i) + '=' + encodeURIComponent(obj[i]));\r\n \t}\r\n \treturn ((!existingUrl || existingUrl.indexOf('?') === -1) ? '?' : '&') + params.join('&');\r\n }\r\n\r\n var templateRe = /\\{ *([\\w_ -]+) *\\}/g;\r\n\r\n // @function template(str: String, data: Object): String\r\n // Simple templating facility, accepts a template string of the form `'Hello {a}, {b}'`\r\n // and a data object like `{a: 'foo', b: 'bar'}`, returns evaluated string\r\n // `('Hello foo, bar')`. You can also specify functions instead of strings for\r\n // data values — they will be evaluated passing `data` as an argument.\r\n function template(str, data) {\r\n \treturn str.replace(templateRe, function (str, key) {\r\n \t\tvar value = data[key];\r\n\r\n \t\tif (value === undefined) {\r\n \t\t\tthrow new Error('No value provided for variable ' + str);\r\n\r\n \t\t} else if (typeof value === 'function') {\r\n \t\t\tvalue = value(data);\r\n \t\t}\r\n \t\treturn value;\r\n \t});\r\n }\r\n\r\n // @function isArray(obj): Boolean\r\n // Compatibility polyfill for [Array.isArray](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray)\r\n var isArray = Array.isArray || function (obj) {\r\n \treturn (Object.prototype.toString.call(obj) === '[object Array]');\r\n };\r\n\r\n // @function indexOf(array: Array, el: Object): Number\r\n // Compatibility polyfill for [Array.prototype.indexOf](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/indexOf)\r\n function indexOf(array, el) {\r\n \tfor (var i = 0; i < array.length; i++) {\r\n \t\tif (array[i] === el) { return i; }\r\n \t}\r\n \treturn -1;\r\n }\r\n\r\n // @property emptyImageUrl: String\r\n // Data URI string containing a base64-encoded empty GIF image.\r\n // Used as a hack to free memory from unused images on WebKit-powered\r\n // mobile devices (by setting image `src` to this string).\r\n var emptyImageUrl = 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs=';\r\n\r\n // inspired by https://paulirish.com/2011/requestanimationframe-for-smart-animating/\r\n\r\n function getPrefixed(name) {\r\n \treturn window['webkit' + name] || window['moz' + name] || window['ms' + name];\r\n }\r\n\r\n var lastTime = 0;\r\n\r\n // fallback for IE 7-8\r\n function timeoutDefer(fn) {\r\n \tvar time = +new Date(),\r\n \t timeToCall = Math.max(0, 16 - (time - lastTime));\r\n\r\n \tlastTime = time + timeToCall;\r\n \treturn window.setTimeout(fn, timeToCall);\r\n }\r\n\r\n var requestFn = window.requestAnimationFrame || getPrefixed('RequestAnimationFrame') || timeoutDefer;\r\n var cancelFn = window.cancelAnimationFrame || getPrefixed('CancelAnimationFrame') ||\r\n \t\tgetPrefixed('CancelRequestAnimationFrame') || function (id) { window.clearTimeout(id); };\r\n\r\n // @function requestAnimFrame(fn: Function, context?: Object, immediate?: Boolean): Number\r\n // Schedules `fn` to be executed when the browser repaints. `fn` is bound to\r\n // `context` if given. When `immediate` is set, `fn` is called immediately if\r\n // the browser doesn't have native support for\r\n // [`window.requestAnimationFrame`](https://developer.mozilla.org/docs/Web/API/window/requestAnimationFrame),\r\n // otherwise it's delayed. Returns a request ID that can be used to cancel the request.\r\n function requestAnimFrame(fn, context, immediate) {\r\n \tif (immediate && requestFn === timeoutDefer) {\r\n \t\tfn.call(context);\r\n \t} else {\r\n \t\treturn requestFn.call(window, bind(fn, context));\r\n \t}\r\n }\r\n\r\n // @function cancelAnimFrame(id: Number): undefined\r\n // Cancels a previous `requestAnimFrame`. See also [window.cancelAnimationFrame](https://developer.mozilla.org/docs/Web/API/window/cancelAnimationFrame).\r\n function cancelAnimFrame(id) {\r\n \tif (id) {\r\n \t\tcancelFn.call(window, id);\r\n \t}\r\n }\n\n var Util = {\n __proto__: null,\n extend: extend,\n create: create$2,\n bind: bind,\n get lastId () { return lastId; },\n stamp: stamp,\n throttle: throttle,\n wrapNum: wrapNum,\n falseFn: falseFn,\n formatNum: formatNum,\n trim: trim,\n splitWords: splitWords,\n setOptions: setOptions,\n getParamString: getParamString,\n template: template,\n isArray: isArray,\n indexOf: indexOf,\n emptyImageUrl: emptyImageUrl,\n requestFn: requestFn,\n cancelFn: cancelFn,\n requestAnimFrame: requestAnimFrame,\n cancelAnimFrame: cancelAnimFrame\n };\n\n // @class Class\r\n // @aka L.Class\r\n\r\n // @section\r\n // @uninheritable\r\n\r\n // Thanks to John Resig and Dean Edwards for inspiration!\r\n\r\n function Class() {}\r\n\r\n Class.extend = function (props) {\r\n\r\n \t// @function extend(props: Object): Function\r\n \t// [Extends the current class](#class-inheritance) given the properties to be included.\r\n \t// Returns a Javascript function that is a class constructor (to be called with `new`).\r\n \tvar NewClass = function () {\r\n\r\n \t\tsetOptions(this);\r\n\r\n \t\t// call the constructor\r\n \t\tif (this.initialize) {\r\n \t\t\tthis.initialize.apply(this, arguments);\r\n \t\t}\r\n\r\n \t\t// call all constructor hooks\r\n \t\tthis.callInitHooks();\r\n \t};\r\n\r\n \tvar parentProto = NewClass.__super__ = this.prototype;\r\n\r\n \tvar proto = create$2(parentProto);\r\n \tproto.constructor = NewClass;\r\n\r\n \tNewClass.prototype = proto;\r\n\r\n \t// inherit parent's statics\r\n \tfor (var i in this) {\r\n \t\tif (Object.prototype.hasOwnProperty.call(this, i) && i !== 'prototype' && i !== '__super__') {\r\n \t\t\tNewClass[i] = this[i];\r\n \t\t}\r\n \t}\r\n\r\n \t// mix static properties into the class\r\n \tif (props.statics) {\r\n \t\textend(NewClass, props.statics);\r\n \t}\r\n\r\n \t// mix includes into the prototype\r\n \tif (props.includes) {\r\n \t\tcheckDeprecatedMixinEvents(props.includes);\r\n \t\textend.apply(null, [proto].concat(props.includes));\r\n \t}\r\n\r\n \t// mix given properties into the prototype\r\n \textend(proto, props);\r\n \tdelete proto.statics;\r\n \tdelete proto.includes;\r\n\r\n \t// merge options\r\n \tif (proto.options) {\r\n \t\tproto.options = parentProto.options ? create$2(parentProto.options) : {};\r\n \t\textend(proto.options, props.options);\r\n \t}\r\n\r\n \tproto._initHooks = [];\r\n\r\n \t// add method for calling all hooks\r\n \tproto.callInitHooks = function () {\r\n\r\n \t\tif (this._initHooksCalled) { return; }\r\n\r\n \t\tif (parentProto.callInitHooks) {\r\n \t\t\tparentProto.callInitHooks.call(this);\r\n \t\t}\r\n\r\n \t\tthis._initHooksCalled = true;\r\n\r\n \t\tfor (var i = 0, len = proto._initHooks.length; i < len; i++) {\r\n \t\t\tproto._initHooks[i].call(this);\r\n \t\t}\r\n \t};\r\n\r\n \treturn NewClass;\r\n };\r\n\r\n\r\n // @function include(properties: Object): this\r\n // [Includes a mixin](#class-includes) into the current class.\r\n Class.include = function (props) {\r\n \tvar parentOptions = this.prototype.options;\r\n \textend(this.prototype, props);\r\n \tif (props.options) {\r\n \t\tthis.prototype.options = parentOptions;\r\n \t\tthis.mergeOptions(props.options);\r\n \t}\r\n \treturn this;\r\n };\r\n\r\n // @function mergeOptions(options: Object): this\r\n // [Merges `options`](#class-options) into the defaults of the class.\r\n Class.mergeOptions = function (options) {\r\n \textend(this.prototype.options, options);\r\n \treturn this;\r\n };\r\n\r\n // @function addInitHook(fn: Function): this\r\n // Adds a [constructor hook](#class-constructor-hooks) to the class.\r\n Class.addInitHook = function (fn) { // (Function) || (String, args...)\r\n \tvar args = Array.prototype.slice.call(arguments, 1);\r\n\r\n \tvar init = typeof fn === 'function' ? fn : function () {\r\n \t\tthis[fn].apply(this, args);\r\n \t};\r\n\r\n \tthis.prototype._initHooks = this.prototype._initHooks || [];\r\n \tthis.prototype._initHooks.push(init);\r\n \treturn this;\r\n };\r\n\r\n function checkDeprecatedMixinEvents(includes) {\r\n \t/* global L: true */\r\n \tif (typeof L === 'undefined' || !L || !L.Mixin) { return; }\r\n\r\n \tincludes = isArray(includes) ? includes : [includes];\r\n\r\n \tfor (var i = 0; i < includes.length; i++) {\r\n \t\tif (includes[i] === L.Mixin.Events) {\r\n \t\t\tconsole.warn('Deprecated include of L.Mixin.Events: ' +\r\n \t\t\t\t'this property will be removed in future releases, ' +\r\n \t\t\t\t'please inherit from L.Evented instead.', new Error().stack);\r\n \t\t}\r\n \t}\r\n }\n\n /*\r\n * @class Evented\r\n * @aka L.Evented\r\n * @inherits Class\r\n *\r\n * A set of methods shared between event-powered classes (like `Map` and `Marker`). Generally, events allow you to execute some function when something happens with an object (e.g. the user clicks on the map, causing the map to fire `'click'` event).\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * map.on('click', function(e) {\r\n * \talert(e.latlng);\r\n * } );\r\n * ```\r\n *\r\n * Leaflet deals with event listeners by reference, so if you want to add a listener and then remove it, define it as a function:\r\n *\r\n * ```js\r\n * function onClick(e) { ... }\r\n *\r\n * map.on('click', onClick);\r\n * map.off('click', onClick);\r\n * ```\r\n */\r\n\r\n var Events = {\r\n \t/* @method on(type: String, fn: Function, context?: Object): this\r\n \t * Adds a listener function (`fn`) to a particular event type of the object. You can optionally specify the context of the listener (object the this keyword will point to). You can also pass several space-separated types (e.g. `'click dblclick'`).\r\n \t *\r\n \t * @alternative\r\n \t * @method on(eventMap: Object): this\r\n \t * Adds a set of type/listener pairs, e.g. `{click: onClick, mousemove: onMouseMove}`\r\n \t */\r\n \ton: function (types, fn, context) {\r\n\r\n \t\t// types can be a map of types/handlers\r\n \t\tif (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\t// we don't process space-separated events here for performance;\r\n \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n \t\t\t\tthis._on(type, types[type], fn);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\t// types can be a string of space-separated words\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tthis._on(types[i], fn, context);\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t/* @method off(type: String, fn?: Function, context?: Object): this\r\n \t * Removes a previously added listener function. If no function is specified, it will remove all the listeners of that particular event from the object. Note that if you passed a custom context to `on`, you must pass the same context to `off` in order to remove the listener.\r\n \t *\r\n \t * @alternative\r\n \t * @method off(eventMap: Object): this\r\n \t * Removes a set of type/listener pairs.\r\n \t *\r\n \t * @alternative\r\n \t * @method off: this\r\n \t * Removes all listeners to all events on the object. This includes implicitly attached events.\r\n \t */\r\n \toff: function (types, fn, context) {\r\n\r\n \t\tif (!arguments.length) {\r\n \t\t\t// clear all listeners if called without arguments\r\n \t\t\tdelete this._events;\r\n\r\n \t\t} else if (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\tthis._off(type, types[type], fn);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tvar removeAll = arguments.length === 1;\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tif (removeAll) {\r\n \t\t\t\t\tthis._off(types[i]);\r\n \t\t\t\t} else {\r\n \t\t\t\t\tthis._off(types[i], fn, context);\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// attach listener (without syntactic sugar now)\r\n \t_on: function (type, fn, context, _once) {\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// check if fn already there\r\n \t\tif (this._listens(type, fn, context) !== false) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (context === this) {\r\n \t\t\t// Less memory footprint.\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tvar newListener = {fn: fn, ctx: context};\r\n \t\tif (_once) {\r\n \t\t\tnewListener.once = true;\r\n \t\t}\r\n\r\n \t\tthis._events = this._events || {};\r\n \t\tthis._events[type] = this._events[type] || [];\r\n \t\tthis._events[type].push(newListener);\r\n \t},\r\n\r\n \t_off: function (type, fn, context) {\r\n \t\tvar listeners,\r\n \t\t i,\r\n \t\t len;\r\n\r\n \t\tif (!this._events) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tlisteners = this._events[type];\r\n \t\tif (!listeners) {\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (arguments.length === 1) { // remove all\r\n \t\t\tif (this._firingCount) {\r\n \t\t\t\t// Set all removed listeners to noop\r\n \t\t\t\t// so they are not called if remove happens in fire\r\n \t\t\t\tfor (i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\t\t\tlisteners[i].fn = falseFn;\r\n \t\t\t\t}\r\n \t\t\t}\r\n \t\t\t// clear all listeners for a type if function isn't specified\r\n \t\t\tdelete this._events[type];\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tconsole.warn('wrong listener type: ' + typeof fn);\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// find fn and remove it\r\n \t\tvar index = this._listens(type, fn, context);\r\n \t\tif (index !== false) {\r\n \t\t\tvar listener = listeners[index];\r\n \t\t\tif (this._firingCount) {\r\n \t\t\t\t// set the removed listener to noop so that's not called if remove happens in fire\r\n \t\t\t\tlistener.fn = falseFn;\r\n\r\n \t\t\t\t/* copy array in case events are being fired */\r\n \t\t\t\tthis._events[type] = listeners = listeners.slice();\r\n \t\t\t}\r\n \t\t\tlisteners.splice(index, 1);\r\n \t\t}\r\n \t},\r\n\r\n \t// @method fire(type: String, data?: Object, propagate?: Boolean): this\r\n \t// Fires an event of the specified type. You can optionally provide a data\r\n \t// object — the first argument of the listener function will contain its\r\n \t// properties. The event can optionally be propagated to event parents.\r\n \tfire: function (type, data, propagate) {\r\n \t\tif (!this.listens(type, propagate)) { return this; }\r\n\r\n \t\tvar event = extend({}, data, {\r\n \t\t\ttype: type,\r\n \t\t\ttarget: this,\r\n \t\t\tsourceTarget: data && data.sourceTarget || this\r\n \t\t});\r\n\r\n \t\tif (this._events) {\r\n \t\t\tvar listeners = this._events[type];\r\n \t\t\tif (listeners) {\r\n \t\t\t\tthis._firingCount = (this._firingCount + 1) || 1;\r\n \t\t\t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\t\t\tvar l = listeners[i];\r\n \t\t\t\t\t// off overwrites l.fn, so we need to copy fn to a var\r\n \t\t\t\t\tvar fn = l.fn;\r\n \t\t\t\t\tif (l.once) {\r\n \t\t\t\t\t\tthis.off(type, fn, l.ctx);\r\n \t\t\t\t\t}\r\n \t\t\t\t\tfn.call(l.ctx || this, event);\r\n \t\t\t\t}\r\n\r\n \t\t\t\tthis._firingCount--;\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\tif (propagate) {\r\n \t\t\t// propagate the event to parents (set with addEventParent)\r\n \t\t\tthis._propagateEvent(event);\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method listens(type: String, propagate?: Boolean): Boolean\r\n \t// @method listens(type: String, fn: Function, context?: Object, propagate?: Boolean): Boolean\r\n \t// Returns `true` if a particular event type has any listeners attached to it.\r\n \t// The verification can optionally be propagated, it will return `true` if parents have the listener attached to it.\r\n \tlistens: function (type, fn, context, propagate) {\r\n \t\tif (typeof type !== 'string') {\r\n \t\t\tconsole.warn('\"string\" type argument expected');\r\n \t\t}\r\n\r\n \t\t// we don't overwrite the input `fn` value, because we need to use it for propagation\r\n \t\tvar _fn = fn;\r\n \t\tif (typeof fn !== 'function') {\r\n \t\t\tpropagate = !!fn;\r\n \t\t\t_fn = undefined;\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tvar listeners = this._events && this._events[type];\r\n \t\tif (listeners && listeners.length) {\r\n \t\t\tif (this._listens(type, _fn, context) !== false) {\r\n \t\t\t\treturn true;\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\tif (propagate) {\r\n \t\t\t// also check parents for listeners if event propagates\r\n \t\t\tfor (var id in this._eventParents) {\r\n \t\t\t\tif (this._eventParents[id].listens(type, fn, context, propagate)) { return true; }\r\n \t\t\t}\r\n \t\t}\r\n \t\treturn false;\r\n \t},\r\n\r\n \t// returns the index (number) or false\r\n \t_listens: function (type, fn, context) {\r\n \t\tif (!this._events) {\r\n \t\t\treturn false;\r\n \t\t}\r\n\r\n \t\tvar listeners = this._events[type] || [];\r\n \t\tif (!fn) {\r\n \t\t\treturn !!listeners.length;\r\n \t\t}\r\n\r\n \t\tif (context === this) {\r\n \t\t\t// Less memory footprint.\r\n \t\t\tcontext = undefined;\r\n \t\t}\r\n\r\n \t\tfor (var i = 0, len = listeners.length; i < len; i++) {\r\n \t\t\tif (listeners[i].fn === fn && listeners[i].ctx === context) {\r\n \t\t\t\treturn i;\r\n \t\t\t}\r\n \t\t}\r\n \t\treturn false;\r\n\r\n \t},\r\n\r\n \t// @method once(…): this\r\n \t// Behaves as [`on(…)`](#evented-on), except the listener will only get fired once and then removed.\r\n \tonce: function (types, fn, context) {\r\n\r\n \t\t// types can be a map of types/handlers\r\n \t\tif (typeof types === 'object') {\r\n \t\t\tfor (var type in types) {\r\n \t\t\t\t// we don't process space-separated events here for performance;\r\n \t\t\t\t// it's a hot path since Layer uses the on(obj) syntax\r\n \t\t\t\tthis._on(type, types[type], fn, true);\r\n \t\t\t}\r\n\r\n \t\t} else {\r\n \t\t\t// types can be a string of space-separated words\r\n \t\t\ttypes = splitWords(types);\r\n\r\n \t\t\tfor (var i = 0, len = types.length; i < len; i++) {\r\n \t\t\t\tthis._on(types[i], fn, context, true);\r\n \t\t\t}\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method addEventParent(obj: Evented): this\r\n \t// Adds an event parent - an `Evented` that will receive propagated events\r\n \taddEventParent: function (obj) {\r\n \t\tthis._eventParents = this._eventParents || {};\r\n \t\tthis._eventParents[stamp(obj)] = obj;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method removeEventParent(obj: Evented): this\r\n \t// Removes an event parent, so it will stop receiving propagated events\r\n \tremoveEventParent: function (obj) {\r\n \t\tif (this._eventParents) {\r\n \t\t\tdelete this._eventParents[stamp(obj)];\r\n \t\t}\r\n \t\treturn this;\r\n \t},\r\n\r\n \t_propagateEvent: function (e) {\r\n \t\tfor (var id in this._eventParents) {\r\n \t\t\tthis._eventParents[id].fire(e.type, extend({\r\n \t\t\t\tlayer: e.target,\r\n \t\t\t\tpropagatedFrom: e.target\r\n \t\t\t}, e), true);\r\n \t\t}\r\n \t}\r\n };\r\n\r\n // aliases; we should ditch those eventually\r\n\r\n // @method addEventListener(…): this\r\n // Alias to [`on(…)`](#evented-on)\r\n Events.addEventListener = Events.on;\r\n\r\n // @method removeEventListener(…): this\r\n // Alias to [`off(…)`](#evented-off)\r\n\r\n // @method clearAllEventListeners(…): this\r\n // Alias to [`off()`](#evented-off)\r\n Events.removeEventListener = Events.clearAllEventListeners = Events.off;\r\n\r\n // @method addOneTimeEventListener(…): this\r\n // Alias to [`once(…)`](#evented-once)\r\n Events.addOneTimeEventListener = Events.once;\r\n\r\n // @method fireEvent(…): this\r\n // Alias to [`fire(…)`](#evented-fire)\r\n Events.fireEvent = Events.fire;\r\n\r\n // @method hasEventListeners(…): Boolean\r\n // Alias to [`listens(…)`](#evented-listens)\r\n Events.hasEventListeners = Events.listens;\r\n\r\n var Evented = Class.extend(Events);\n\n /*\r\n * @class Point\r\n * @aka L.Point\r\n *\r\n * Represents a point with `x` and `y` coordinates in pixels.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var point = L.point(200, 300);\r\n * ```\r\n *\r\n * All Leaflet methods and options that accept `Point` objects also accept them in a simple Array form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```js\r\n * map.panBy([200, 300]);\r\n * map.panBy(L.point(200, 300));\r\n * ```\r\n *\r\n * Note that `Point` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function Point(x, y, round) {\r\n \t// @property x: Number; The `x` coordinate of the point\r\n \tthis.x = (round ? Math.round(x) : x);\r\n \t// @property y: Number; The `y` coordinate of the point\r\n \tthis.y = (round ? Math.round(y) : y);\r\n }\r\n\r\n var trunc = Math.trunc || function (v) {\r\n \treturn v > 0 ? Math.floor(v) : Math.ceil(v);\r\n };\r\n\r\n Point.prototype = {\r\n\r\n \t// @method clone(): Point\r\n \t// Returns a copy of the current point.\r\n \tclone: function () {\r\n \t\treturn new Point(this.x, this.y);\r\n \t},\r\n\r\n \t// @method add(otherPoint: Point): Point\r\n \t// Returns the result of addition of the current and the given points.\r\n \tadd: function (point) {\r\n \t\t// non-destructive, returns a new point\r\n \t\treturn this.clone()._add(toPoint(point));\r\n \t},\r\n\r\n \t_add: function (point) {\r\n \t\t// destructive, used directly for performance in situations where it's safe to modify existing point\r\n \t\tthis.x += point.x;\r\n \t\tthis.y += point.y;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method subtract(otherPoint: Point): Point\r\n \t// Returns the result of subtraction of the given point from the current.\r\n \tsubtract: function (point) {\r\n \t\treturn this.clone()._subtract(toPoint(point));\r\n \t},\r\n\r\n \t_subtract: function (point) {\r\n \t\tthis.x -= point.x;\r\n \t\tthis.y -= point.y;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method divideBy(num: Number): Point\r\n \t// Returns the result of division of the current point by the given number.\r\n \tdivideBy: function (num) {\r\n \t\treturn this.clone()._divideBy(num);\r\n \t},\r\n\r\n \t_divideBy: function (num) {\r\n \t\tthis.x /= num;\r\n \t\tthis.y /= num;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method multiplyBy(num: Number): Point\r\n \t// Returns the result of multiplication of the current point by the given number.\r\n \tmultiplyBy: function (num) {\r\n \t\treturn this.clone()._multiplyBy(num);\r\n \t},\r\n\r\n \t_multiplyBy: function (num) {\r\n \t\tthis.x *= num;\r\n \t\tthis.y *= num;\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method scaleBy(scale: Point): Point\r\n \t// Multiply each coordinate of the current point by each coordinate of\r\n \t// `scale`. In linear algebra terms, multiply the point by the\r\n \t// [scaling matrix](https://en.wikipedia.org/wiki/Scaling_%28geometry%29#Matrix_representation)\r\n \t// defined by `scale`.\r\n \tscaleBy: function (point) {\r\n \t\treturn new Point(this.x * point.x, this.y * point.y);\r\n \t},\r\n\r\n \t// @method unscaleBy(scale: Point): Point\r\n \t// Inverse of `scaleBy`. Divide each coordinate of the current point by\r\n \t// each coordinate of `scale`.\r\n \tunscaleBy: function (point) {\r\n \t\treturn new Point(this.x / point.x, this.y / point.y);\r\n \t},\r\n\r\n \t// @method round(): Point\r\n \t// Returns a copy of the current point with rounded coordinates.\r\n \tround: function () {\r\n \t\treturn this.clone()._round();\r\n \t},\r\n\r\n \t_round: function () {\r\n \t\tthis.x = Math.round(this.x);\r\n \t\tthis.y = Math.round(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method floor(): Point\r\n \t// Returns a copy of the current point with floored coordinates (rounded down).\r\n \tfloor: function () {\r\n \t\treturn this.clone()._floor();\r\n \t},\r\n\r\n \t_floor: function () {\r\n \t\tthis.x = Math.floor(this.x);\r\n \t\tthis.y = Math.floor(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method ceil(): Point\r\n \t// Returns a copy of the current point with ceiled coordinates (rounded up).\r\n \tceil: function () {\r\n \t\treturn this.clone()._ceil();\r\n \t},\r\n\r\n \t_ceil: function () {\r\n \t\tthis.x = Math.ceil(this.x);\r\n \t\tthis.y = Math.ceil(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method trunc(): Point\r\n \t// Returns a copy of the current point with truncated coordinates (rounded towards zero).\r\n \ttrunc: function () {\r\n \t\treturn this.clone()._trunc();\r\n \t},\r\n\r\n \t_trunc: function () {\r\n \t\tthis.x = trunc(this.x);\r\n \t\tthis.y = trunc(this.y);\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method distanceTo(otherPoint: Point): Number\r\n \t// Returns the cartesian distance between the current and the given points.\r\n \tdistanceTo: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\tvar x = point.x - this.x,\r\n \t\t y = point.y - this.y;\r\n\r\n \t\treturn Math.sqrt(x * x + y * y);\r\n \t},\r\n\r\n \t// @method equals(otherPoint: Point): Boolean\r\n \t// Returns `true` if the given point has the same coordinates.\r\n \tequals: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\treturn point.x === this.x &&\r\n \t\t point.y === this.y;\r\n \t},\r\n\r\n \t// @method contains(otherPoint: Point): Boolean\r\n \t// Returns `true` if both coordinates of the given point are less than the corresponding current point coordinates (in absolute values).\r\n \tcontains: function (point) {\r\n \t\tpoint = toPoint(point);\r\n\r\n \t\treturn Math.abs(point.x) <= Math.abs(this.x) &&\r\n \t\t Math.abs(point.y) <= Math.abs(this.y);\r\n \t},\r\n\r\n \t// @method toString(): String\r\n \t// Returns a string representation of the point for debugging purposes.\r\n \ttoString: function () {\r\n \t\treturn 'Point(' +\r\n \t\t formatNum(this.x) + ', ' +\r\n \t\t formatNum(this.y) + ')';\r\n \t}\r\n };\r\n\r\n // @factory L.point(x: Number, y: Number, round?: Boolean)\r\n // Creates a Point object with the given `x` and `y` coordinates. If optional `round` is set to true, rounds the `x` and `y` values.\r\n\r\n // @alternative\r\n // @factory L.point(coords: Number[])\r\n // Expects an array of the form `[x, y]` instead.\r\n\r\n // @alternative\r\n // @factory L.point(coords: Object)\r\n // Expects a plain object of the form `{x: Number, y: Number}` instead.\r\n function toPoint(x, y, round) {\r\n \tif (x instanceof Point) {\r\n \t\treturn x;\r\n \t}\r\n \tif (isArray(x)) {\r\n \t\treturn new Point(x[0], x[1]);\r\n \t}\r\n \tif (x === undefined || x === null) {\r\n \t\treturn x;\r\n \t}\r\n \tif (typeof x === 'object' && 'x' in x && 'y' in x) {\r\n \t\treturn new Point(x.x, x.y);\r\n \t}\r\n \treturn new Point(x, y, round);\r\n }\n\n /*\r\n * @class Bounds\r\n * @aka L.Bounds\r\n *\r\n * Represents a rectangular area in pixel coordinates.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var p1 = L.point(10, 10),\r\n * p2 = L.point(40, 60),\r\n * bounds = L.bounds(p1, p2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept `Bounds` objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * otherBounds.intersects([[10, 10], [40, 60]]);\r\n * ```\r\n *\r\n * Note that `Bounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function Bounds(a, b) {\r\n \tif (!a) { return; }\r\n\r\n \tvar points = b ? [a, b] : a;\r\n\r\n \tfor (var i = 0, len = points.length; i < len; i++) {\r\n \t\tthis.extend(points[i]);\r\n \t}\r\n }\r\n\r\n Bounds.prototype = {\r\n \t// @method extend(point: Point): this\r\n \t// Extends the bounds to contain the given point.\r\n\r\n \t// @alternative\r\n \t// @method extend(otherBounds: Bounds): this\r\n \t// Extend the bounds to contain the given bounds\r\n \textend: function (obj) {\r\n \t\tvar min2, max2;\r\n \t\tif (!obj) { return this; }\r\n\r\n \t\tif (obj instanceof Point || typeof obj[0] === 'number' || 'x' in obj) {\r\n \t\t\tmin2 = max2 = toPoint(obj);\r\n \t\t} else {\r\n \t\t\tobj = toBounds(obj);\r\n \t\t\tmin2 = obj.min;\r\n \t\t\tmax2 = obj.max;\r\n\r\n \t\t\tif (!min2 || !max2) { return this; }\r\n \t\t}\r\n\r\n \t\t// @property min: Point\r\n \t\t// The top left corner of the rectangle.\r\n \t\t// @property max: Point\r\n \t\t// The bottom right corner of the rectangle.\r\n \t\tif (!this.min && !this.max) {\r\n \t\t\tthis.min = min2.clone();\r\n \t\t\tthis.max = max2.clone();\r\n \t\t} else {\r\n \t\t\tthis.min.x = Math.min(min2.x, this.min.x);\r\n \t\t\tthis.max.x = Math.max(max2.x, this.max.x);\r\n \t\t\tthis.min.y = Math.min(min2.y, this.min.y);\r\n \t\t\tthis.max.y = Math.max(max2.y, this.max.y);\r\n \t\t}\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method getCenter(round?: Boolean): Point\r\n \t// Returns the center point of the bounds.\r\n \tgetCenter: function (round) {\r\n \t\treturn toPoint(\r\n \t\t (this.min.x + this.max.x) / 2,\r\n \t\t (this.min.y + this.max.y) / 2, round);\r\n \t},\r\n\r\n \t// @method getBottomLeft(): Point\r\n \t// Returns the bottom-left point of the bounds.\r\n \tgetBottomLeft: function () {\r\n \t\treturn toPoint(this.min.x, this.max.y);\r\n \t},\r\n\r\n \t// @method getTopRight(): Point\r\n \t// Returns the top-right point of the bounds.\r\n \tgetTopRight: function () { // -> Point\r\n \t\treturn toPoint(this.max.x, this.min.y);\r\n \t},\r\n\r\n \t// @method getTopLeft(): Point\r\n \t// Returns the top-left point of the bounds (i.e. [`this.min`](#bounds-min)).\r\n \tgetTopLeft: function () {\r\n \t\treturn this.min; // left, top\r\n \t},\r\n\r\n \t// @method getBottomRight(): Point\r\n \t// Returns the bottom-right point of the bounds (i.e. [`this.max`](#bounds-max)).\r\n \tgetBottomRight: function () {\r\n \t\treturn this.max; // right, bottom\r\n \t},\r\n\r\n \t// @method getSize(): Point\r\n \t// Returns the size of the given bounds\r\n \tgetSize: function () {\r\n \t\treturn this.max.subtract(this.min);\r\n \t},\r\n\r\n \t// @method contains(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle contains the given one.\r\n \t// @alternative\r\n \t// @method contains(point: Point): Boolean\r\n \t// Returns `true` if the rectangle contains the given point.\r\n \tcontains: function (obj) {\r\n \t\tvar min, max;\r\n\r\n \t\tif (typeof obj[0] === 'number' || obj instanceof Point) {\r\n \t\t\tobj = toPoint(obj);\r\n \t\t} else {\r\n \t\t\tobj = toBounds(obj);\r\n \t\t}\r\n\r\n \t\tif (obj instanceof Bounds) {\r\n \t\t\tmin = obj.min;\r\n \t\t\tmax = obj.max;\r\n \t\t} else {\r\n \t\t\tmin = max = obj;\r\n \t\t}\r\n\r\n \t\treturn (min.x >= this.min.x) &&\r\n \t\t (max.x <= this.max.x) &&\r\n \t\t (min.y >= this.min.y) &&\r\n \t\t (max.y <= this.max.y);\r\n \t},\r\n\r\n \t// @method intersects(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle intersects the given bounds. Two bounds\r\n \t// intersect if they have at least one point in common.\r\n \tintersects: function (bounds) { // (Bounds) -> Boolean\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\tvar min = this.min,\r\n \t\t max = this.max,\r\n \t\t min2 = bounds.min,\r\n \t\t max2 = bounds.max,\r\n \t\t xIntersects = (max2.x >= min.x) && (min2.x <= max.x),\r\n \t\t yIntersects = (max2.y >= min.y) && (min2.y <= max.y);\r\n\r\n \t\treturn xIntersects && yIntersects;\r\n \t},\r\n\r\n \t// @method overlaps(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds\r\n \t// overlap if their intersection is an area.\r\n \toverlaps: function (bounds) { // (Bounds) -> Boolean\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\tvar min = this.min,\r\n \t\t max = this.max,\r\n \t\t min2 = bounds.min,\r\n \t\t max2 = bounds.max,\r\n \t\t xOverlaps = (max2.x > min.x) && (min2.x < max.x),\r\n \t\t yOverlaps = (max2.y > min.y) && (min2.y < max.y);\r\n\r\n \t\treturn xOverlaps && yOverlaps;\r\n \t},\r\n\r\n \t// @method isValid(): Boolean\r\n \t// Returns `true` if the bounds are properly initialized.\r\n \tisValid: function () {\r\n \t\treturn !!(this.min && this.max);\r\n \t},\r\n\r\n\r\n \t// @method pad(bufferRatio: Number): Bounds\r\n \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n \t// Negative values will retract the bounds.\r\n \tpad: function (bufferRatio) {\r\n \t\tvar min = this.min,\r\n \t\tmax = this.max,\r\n \t\theightBuffer = Math.abs(min.x - max.x) * bufferRatio,\r\n \t\twidthBuffer = Math.abs(min.y - max.y) * bufferRatio;\r\n\r\n\r\n \t\treturn toBounds(\r\n \t\t\ttoPoint(min.x - heightBuffer, min.y - widthBuffer),\r\n \t\t\ttoPoint(max.x + heightBuffer, max.y + widthBuffer));\r\n \t},\r\n\r\n\r\n \t// @method equals(otherBounds: Bounds): Boolean\r\n \t// Returns `true` if the rectangle is equivalent to the given bounds.\r\n \tequals: function (bounds) {\r\n \t\tif (!bounds) { return false; }\r\n\r\n \t\tbounds = toBounds(bounds);\r\n\r\n \t\treturn this.min.equals(bounds.getTopLeft()) &&\r\n \t\t\tthis.max.equals(bounds.getBottomRight());\r\n \t},\r\n };\r\n\r\n\r\n // @factory L.bounds(corner1: Point, corner2: Point)\r\n // Creates a Bounds object from two corners coordinate pairs.\r\n // @alternative\r\n // @factory L.bounds(points: Point[])\r\n // Creates a Bounds object from the given array of points.\r\n function toBounds(a, b) {\r\n \tif (!a || a instanceof Bounds) {\r\n \t\treturn a;\r\n \t}\r\n \treturn new Bounds(a, b);\r\n }\n\n /*\r\n * @class LatLngBounds\r\n * @aka L.LatLngBounds\r\n *\r\n * Represents a rectangular geographical area on a map.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var corner1 = L.latLng(40.712, -74.227),\r\n * corner2 = L.latLng(40.774, -74.125),\r\n * bounds = L.latLngBounds(corner1, corner2);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLngBounds objects also accept them in a simple Array form (unless noted otherwise), so the bounds example above can be passed like this:\r\n *\r\n * ```js\r\n * map.fitBounds([\r\n * \t[40.712, -74.227],\r\n * \t[40.774, -74.125]\r\n * ]);\r\n * ```\r\n *\r\n * Caution: if the area crosses the antimeridian (often confused with the International Date Line), you must specify corners _outside_ the [-180, 180] degrees longitude range.\r\n *\r\n * Note that `LatLngBounds` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function LatLngBounds(corner1, corner2) { // (LatLng, LatLng) or (LatLng[])\r\n \tif (!corner1) { return; }\r\n\r\n \tvar latlngs = corner2 ? [corner1, corner2] : corner1;\r\n\r\n \tfor (var i = 0, len = latlngs.length; i < len; i++) {\r\n \t\tthis.extend(latlngs[i]);\r\n \t}\r\n }\r\n\r\n LatLngBounds.prototype = {\r\n\r\n \t// @method extend(latlng: LatLng): this\r\n \t// Extend the bounds to contain the given point\r\n\r\n \t// @alternative\r\n \t// @method extend(otherBounds: LatLngBounds): this\r\n \t// Extend the bounds to contain the given bounds\r\n \textend: function (obj) {\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2, ne2;\r\n\r\n \t\tif (obj instanceof LatLng) {\r\n \t\t\tsw2 = obj;\r\n \t\t\tne2 = obj;\r\n\r\n \t\t} else if (obj instanceof LatLngBounds) {\r\n \t\t\tsw2 = obj._southWest;\r\n \t\t\tne2 = obj._northEast;\r\n\r\n \t\t\tif (!sw2 || !ne2) { return this; }\r\n\r\n \t\t} else {\r\n \t\t\treturn obj ? this.extend(toLatLng(obj) || toLatLngBounds(obj)) : this;\r\n \t\t}\r\n\r\n \t\tif (!sw && !ne) {\r\n \t\t\tthis._southWest = new LatLng(sw2.lat, sw2.lng);\r\n \t\t\tthis._northEast = new LatLng(ne2.lat, ne2.lng);\r\n \t\t} else {\r\n \t\t\tsw.lat = Math.min(sw2.lat, sw.lat);\r\n \t\t\tsw.lng = Math.min(sw2.lng, sw.lng);\r\n \t\t\tne.lat = Math.max(ne2.lat, ne.lat);\r\n \t\t\tne.lng = Math.max(ne2.lng, ne.lng);\r\n \t\t}\r\n\r\n \t\treturn this;\r\n \t},\r\n\r\n \t// @method pad(bufferRatio: Number): LatLngBounds\r\n \t// Returns bounds created by extending or retracting the current bounds by a given ratio in each direction.\r\n \t// For example, a ratio of 0.5 extends the bounds by 50% in each direction.\r\n \t// Negative values will retract the bounds.\r\n \tpad: function (bufferRatio) {\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t heightBuffer = Math.abs(sw.lat - ne.lat) * bufferRatio,\r\n \t\t widthBuffer = Math.abs(sw.lng - ne.lng) * bufferRatio;\r\n\r\n \t\treturn new LatLngBounds(\r\n \t\t new LatLng(sw.lat - heightBuffer, sw.lng - widthBuffer),\r\n \t\t new LatLng(ne.lat + heightBuffer, ne.lng + widthBuffer));\r\n \t},\r\n\r\n \t// @method getCenter(): LatLng\r\n \t// Returns the center point of the bounds.\r\n \tgetCenter: function () {\r\n \t\treturn new LatLng(\r\n \t\t (this._southWest.lat + this._northEast.lat) / 2,\r\n \t\t (this._southWest.lng + this._northEast.lng) / 2);\r\n \t},\r\n\r\n \t// @method getSouthWest(): LatLng\r\n \t// Returns the south-west point of the bounds.\r\n \tgetSouthWest: function () {\r\n \t\treturn this._southWest;\r\n \t},\r\n\r\n \t// @method getNorthEast(): LatLng\r\n \t// Returns the north-east point of the bounds.\r\n \tgetNorthEast: function () {\r\n \t\treturn this._northEast;\r\n \t},\r\n\r\n \t// @method getNorthWest(): LatLng\r\n \t// Returns the north-west point of the bounds.\r\n \tgetNorthWest: function () {\r\n \t\treturn new LatLng(this.getNorth(), this.getWest());\r\n \t},\r\n\r\n \t// @method getSouthEast(): LatLng\r\n \t// Returns the south-east point of the bounds.\r\n \tgetSouthEast: function () {\r\n \t\treturn new LatLng(this.getSouth(), this.getEast());\r\n \t},\r\n\r\n \t// @method getWest(): Number\r\n \t// Returns the west longitude of the bounds\r\n \tgetWest: function () {\r\n \t\treturn this._southWest.lng;\r\n \t},\r\n\r\n \t// @method getSouth(): Number\r\n \t// Returns the south latitude of the bounds\r\n \tgetSouth: function () {\r\n \t\treturn this._southWest.lat;\r\n \t},\r\n\r\n \t// @method getEast(): Number\r\n \t// Returns the east longitude of the bounds\r\n \tgetEast: function () {\r\n \t\treturn this._northEast.lng;\r\n \t},\r\n\r\n \t// @method getNorth(): Number\r\n \t// Returns the north latitude of the bounds\r\n \tgetNorth: function () {\r\n \t\treturn this._northEast.lat;\r\n \t},\r\n\r\n \t// @method contains(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle contains the given one.\r\n\r\n \t// @alternative\r\n \t// @method contains (latlng: LatLng): Boolean\r\n \t// Returns `true` if the rectangle contains the given point.\r\n \tcontains: function (obj) { // (LatLngBounds) or (LatLng) -> Boolean\r\n \t\tif (typeof obj[0] === 'number' || obj instanceof LatLng || 'lat' in obj) {\r\n \t\t\tobj = toLatLng(obj);\r\n \t\t} else {\r\n \t\t\tobj = toLatLngBounds(obj);\r\n \t\t}\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2, ne2;\r\n\r\n \t\tif (obj instanceof LatLngBounds) {\r\n \t\t\tsw2 = obj.getSouthWest();\r\n \t\t\tne2 = obj.getNorthEast();\r\n \t\t} else {\r\n \t\t\tsw2 = ne2 = obj;\r\n \t\t}\r\n\r\n \t\treturn (sw2.lat >= sw.lat) && (ne2.lat <= ne.lat) &&\r\n \t\t (sw2.lng >= sw.lng) && (ne2.lng <= ne.lng);\r\n \t},\r\n\r\n \t// @method intersects(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle intersects the given bounds. Two bounds intersect if they have at least one point in common.\r\n \tintersects: function (bounds) {\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2 = bounds.getSouthWest(),\r\n \t\t ne2 = bounds.getNorthEast(),\r\n\r\n \t\t latIntersects = (ne2.lat >= sw.lat) && (sw2.lat <= ne.lat),\r\n \t\t lngIntersects = (ne2.lng >= sw.lng) && (sw2.lng <= ne.lng);\r\n\r\n \t\treturn latIntersects && lngIntersects;\r\n \t},\r\n\r\n \t// @method overlaps(otherBounds: LatLngBounds): Boolean\r\n \t// Returns `true` if the rectangle overlaps the given bounds. Two bounds overlap if their intersection is an area.\r\n \toverlaps: function (bounds) {\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\tvar sw = this._southWest,\r\n \t\t ne = this._northEast,\r\n \t\t sw2 = bounds.getSouthWest(),\r\n \t\t ne2 = bounds.getNorthEast(),\r\n\r\n \t\t latOverlaps = (ne2.lat > sw.lat) && (sw2.lat < ne.lat),\r\n \t\t lngOverlaps = (ne2.lng > sw.lng) && (sw2.lng < ne.lng);\r\n\r\n \t\treturn latOverlaps && lngOverlaps;\r\n \t},\r\n\r\n \t// @method toBBoxString(): String\r\n \t// Returns a string with bounding box coordinates in a 'southwest_lng,southwest_lat,northeast_lng,northeast_lat' format. Useful for sending requests to web services that return geo data.\r\n \ttoBBoxString: function () {\r\n \t\treturn [this.getWest(), this.getSouth(), this.getEast(), this.getNorth()].join(',');\r\n \t},\r\n\r\n \t// @method equals(otherBounds: LatLngBounds, maxMargin?: Number): Boolean\r\n \t// Returns `true` if the rectangle is equivalent (within a small margin of error) to the given bounds. The margin of error can be overridden by setting `maxMargin` to a small number.\r\n \tequals: function (bounds, maxMargin) {\r\n \t\tif (!bounds) { return false; }\r\n\r\n \t\tbounds = toLatLngBounds(bounds);\r\n\r\n \t\treturn this._southWest.equals(bounds.getSouthWest(), maxMargin) &&\r\n \t\t this._northEast.equals(bounds.getNorthEast(), maxMargin);\r\n \t},\r\n\r\n \t// @method isValid(): Boolean\r\n \t// Returns `true` if the bounds are properly initialized.\r\n \tisValid: function () {\r\n \t\treturn !!(this._southWest && this._northEast);\r\n \t}\r\n };\r\n\r\n // TODO International date line?\r\n\r\n // @factory L.latLngBounds(corner1: LatLng, corner2: LatLng)\r\n // Creates a `LatLngBounds` object by defining two diagonally opposite corners of the rectangle.\r\n\r\n // @alternative\r\n // @factory L.latLngBounds(latlngs: LatLng[])\r\n // Creates a `LatLngBounds` object defined by the geographical points it contains. Very useful for zooming the map to fit a particular set of locations with [`fitBounds`](#map-fitbounds).\r\n function toLatLngBounds(a, b) {\r\n \tif (a instanceof LatLngBounds) {\r\n \t\treturn a;\r\n \t}\r\n \treturn new LatLngBounds(a, b);\r\n }\n\n /* @class LatLng\r\n * @aka L.LatLng\r\n *\r\n * Represents a geographical point with a certain latitude and longitude.\r\n *\r\n * @example\r\n *\r\n * ```\r\n * var latlng = L.latLng(50.5, 30.5);\r\n * ```\r\n *\r\n * All Leaflet methods that accept LatLng objects also accept them in a simple Array form and simple object form (unless noted otherwise), so these lines are equivalent:\r\n *\r\n * ```\r\n * map.panTo([50, 30]);\r\n * map.panTo({lon: 30, lat: 50});\r\n * map.panTo({lat: 50, lng: 30});\r\n * map.panTo(L.latLng(50, 30));\r\n * ```\r\n *\r\n * Note that `LatLng` does not inherit from Leaflet's `Class` object,\r\n * which means new classes can't inherit from it, and new methods\r\n * can't be added to it with the `include` function.\r\n */\r\n\r\n function LatLng(lat, lng, alt) {\r\n \tif (isNaN(lat) || isNaN(lng)) {\r\n \t\tthrow new Error('Invalid LatLng object: (' + lat + ', ' + lng + ')');\r\n \t}\r\n\r\n \t// @property lat: Number\r\n \t// Latitude in degrees\r\n \tthis.lat = +lat;\r\n\r\n \t// @property lng: Number\r\n \t// Longitude in degrees\r\n \tthis.lng = +lng;\r\n\r\n \t// @property alt: Number\r\n \t// Altitude in meters (optional)\r\n \tif (alt !== undefined) {\r\n \t\tthis.alt = +alt;\r\n \t}\r\n }\r\n\r\n LatLng.prototype = {\r\n \t// @method equals(otherLatLng: LatLng, maxMargin?: Number): Boolean\r\n \t// Returns `true` if the given `LatLng` point is at the same position (within a small margin of error). The margin of error can be overridden by setting `maxMargin` to a small number.\r\n \tequals: function (obj, maxMargin) {\r\n \t\tif (!obj) { return false; }\r\n\r\n \t\tobj = toLatLng(obj);\r\n\r\n \t\tvar margin = Math.max(\r\n \t\t Math.abs(this.lat - obj.lat),\r\n \t\t Math.abs(this.lng - obj.lng));\r\n\r\n \t\treturn margin <= (maxMargin === undefined ? 1.0E-9 : maxMargin);\r\n \t},\r\n\r\n \t// @method toString(): String\r\n \t// Returns a string representation of the point (for debugging purposes).\r\n \ttoString: function (precision) {\r\n \t\treturn 'LatLng(' +\r\n \t\t formatNum(this.lat, precision) + ', ' +\r\n \t\t formatNum(this.lng, precision) + ')';\r\n \t},\r\n\r\n \t// @method distanceTo(otherLatLng: LatLng): Number\r\n \t// Returns the distance (in meters) to the given `LatLng` calculated using the [Spherical Law of Cosines](https://en.wikipedia.org/wiki/Spherical_law_of_cosines).\r\n \tdistanceTo: function (other) {\r\n \t\treturn Earth.distance(this, toLatLng(other));\r\n \t},\r\n\r\n \t// @method wrap(): LatLng\r\n \t// Returns a new `LatLng` object with the longitude wrapped so it's always between -180 and +180 degrees.\r\n \twrap: function () {\r\n \t\treturn Earth.wrapLatLng(this);\r\n \t},\r\n\r\n \t// @method toBounds(sizeInMeters: Number): LatLngBounds\r\n \t// Returns a new `LatLngBounds` object in which each boundary is `sizeInMeters/2` meters apart from the `LatLng`.\r\n \ttoBounds: function (sizeInMeters) {\r\n \t\tvar latAccuracy = 180 * sizeInMeters / 40075017,\r\n \t\t lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat);\r\n\r\n \t\treturn toLatLngBounds(\r\n \t\t [this.lat - latAccuracy, this.lng - lngAccuracy],\r\n \t\t [this.lat + latAccuracy, this.lng + lngAccuracy]);\r\n \t},\r\n\r\n \tclone: function () {\r\n \t\treturn new LatLng(this.lat, this.lng, this.alt);\r\n \t}\r\n };\r\n\r\n\r\n\r\n // @factory L.latLng(latitude: Number, longitude: Number, altitude?: Number): LatLng\r\n // Creates an object representing a geographical point with the given latitude and longitude (and optionally altitude).\r\n\r\n // @alternative\r\n // @factory L.latLng(coords: Array): LatLng\r\n // Expects an array of the form `[Number, Number]` or `[Number, Number, Number]` instead.\r\n\r\n // @alternative\r\n // @factory L.latLng(coords: Object): LatLng\r\n // Expects an plain object of the form `{lat: Number, lng: Number}` or `{lat: Number, lng: Number, alt: Number}` instead.\r\n\r\n function toLatLng(a, b, c) {\r\n \tif (a instanceof LatLng) {\r\n \t\treturn a;\r\n \t}\r\n \tif (isArray(a) && typeof a[0] !== 'object') {\r\n \t\tif (a.length === 3) {\r\n \t\t\treturn new LatLng(a[0], a[1], a[2]);\r\n \t\t}\r\n \t\tif (a.length === 2) {\r\n \t\t\treturn new LatLng(a[0], a[1]);\r\n \t\t}\r\n \t\treturn null;\r\n \t}\r\n \tif (a === undefined || a === null) {\r\n \t\treturn a;\r\n \t}\r\n \tif (typeof a === 'object' && 'lat' in a) {\r\n \t\treturn new LatLng(a.lat, 'lng' in a ? a.lng : a.lon, a.alt);\r\n \t}\r\n \tif (b === undefined) {\r\n \t\treturn null;\r\n \t}\r\n \treturn new LatLng(a, b, c);\r\n }\n\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.Base\r\n * Object that defines coordinate reference systems for projecting\r\n * geographical points into pixel (screen) coordinates and back (and to\r\n * coordinates in other units for [WMS](https://en.wikipedia.org/wiki/Web_Map_Service) services). See\r\n * [spatial reference system](https://en.wikipedia.org/wiki/Spatial_reference_system).\r\n *\r\n * Leaflet defines the most usual CRSs by default. If you want to use a\r\n * CRS not defined by default, take a look at the\r\n * [Proj4Leaflet](https://github.com/kartena/Proj4Leaflet) plugin.\r\n *\r\n * Note that the CRS instances do not inherit from Leaflet's `Class` object,\r\n * and can't be instantiated. Also, new classes can't inherit from them,\r\n * and methods can't be added to them with the `include` function.\r\n */\r\n\r\n var CRS = {\r\n \t// @method latLngToPoint(latlng: LatLng, zoom: Number): Point\r\n \t// Projects geographical coordinates into pixel coordinates for a given zoom.\r\n \tlatLngToPoint: function (latlng, zoom) {\r\n \t\tvar projectedPoint = this.projection.project(latlng),\r\n \t\t scale = this.scale(zoom);\r\n\r\n \t\treturn this.transformation._transform(projectedPoint, scale);\r\n \t},\r\n\r\n \t// @method pointToLatLng(point: Point, zoom: Number): LatLng\r\n \t// The inverse of `latLngToPoint`. Projects pixel coordinates on a given\r\n \t// zoom into geographical coordinates.\r\n \tpointToLatLng: function (point, zoom) {\r\n \t\tvar scale = this.scale(zoom),\r\n \t\t untransformedPoint = this.transformation.untransform(point, scale);\r\n\r\n \t\treturn this.projection.unproject(untransformedPoint);\r\n \t},\r\n\r\n \t// @method project(latlng: LatLng): Point\r\n \t// Projects geographical coordinates into coordinates in units accepted for\r\n \t// this CRS (e.g. meters for EPSG:3857, for passing it to WMS services).\r\n \tproject: function (latlng) {\r\n \t\treturn this.projection.project(latlng);\r\n \t},\r\n\r\n \t// @method unproject(point: Point): LatLng\r\n \t// Given a projected coordinate returns the corresponding LatLng.\r\n \t// The inverse of `project`.\r\n \tunproject: function (point) {\r\n \t\treturn this.projection.unproject(point);\r\n \t},\r\n\r\n \t// @method scale(zoom: Number): Number\r\n \t// Returns the scale used when transforming projected coordinates into\r\n \t// pixel coordinates for a particular zoom. For example, it returns\r\n \t// `256 * 2^zoom` for Mercator-based CRS.\r\n \tscale: function (zoom) {\r\n \t\treturn 256 * Math.pow(2, zoom);\r\n \t},\r\n\r\n \t// @method zoom(scale: Number): Number\r\n \t// Inverse of `scale()`, returns the zoom level corresponding to a scale\r\n \t// factor of `scale`.\r\n \tzoom: function (scale) {\r\n \t\treturn Math.log(scale / 256) / Math.LN2;\r\n \t},\r\n\r\n \t// @method getProjectedBounds(zoom: Number): Bounds\r\n \t// Returns the projection's bounds scaled and transformed for the provided `zoom`.\r\n \tgetProjectedBounds: function (zoom) {\r\n \t\tif (this.infinite) { return null; }\r\n\r\n \t\tvar b = this.projection.bounds,\r\n \t\t s = this.scale(zoom),\r\n \t\t min = this.transformation.transform(b.min, s),\r\n \t\t max = this.transformation.transform(b.max, s);\r\n\r\n \t\treturn new Bounds(min, max);\r\n \t},\r\n\r\n \t// @method distance(latlng1: LatLng, latlng2: LatLng): Number\r\n \t// Returns the distance between two geographical coordinates.\r\n\r\n \t// @property code: String\r\n \t// Standard code name of the CRS passed into WMS services (e.g. `'EPSG:3857'`)\r\n \t//\r\n \t// @property wrapLng: Number[]\r\n \t// An array of two numbers defining whether the longitude (horizontal) coordinate\r\n \t// axis wraps around a given range and how. Defaults to `[-180, 180]` in most\r\n \t// geographical CRSs. If `undefined`, the longitude axis does not wrap around.\r\n \t//\r\n \t// @property wrapLat: Number[]\r\n \t// Like `wrapLng`, but for the latitude (vertical) axis.\r\n\r\n \t// wrapLng: [min, max],\r\n \t// wrapLat: [min, max],\r\n\r\n \t// @property infinite: Boolean\r\n \t// If true, the coordinate space will be unbounded (infinite in both axes)\r\n \tinfinite: false,\r\n\r\n \t// @method wrapLatLng(latlng: LatLng): LatLng\r\n \t// Returns a `LatLng` where lat and lng has been wrapped according to the\r\n \t// CRS's `wrapLat` and `wrapLng` properties, if they are outside the CRS's bounds.\r\n \twrapLatLng: function (latlng) {\r\n \t\tvar lng = this.wrapLng ? wrapNum(latlng.lng, this.wrapLng, true) : latlng.lng,\r\n \t\t lat = this.wrapLat ? wrapNum(latlng.lat, this.wrapLat, true) : latlng.lat,\r\n \t\t alt = latlng.alt;\r\n\r\n \t\treturn new LatLng(lat, lng, alt);\r\n \t},\r\n\r\n \t// @method wrapLatLngBounds(bounds: LatLngBounds): LatLngBounds\r\n \t// Returns a `LatLngBounds` with the same size as the given one, ensuring\r\n \t// that its center is within the CRS's bounds.\r\n \t// Only accepts actual `L.LatLngBounds` instances, not arrays.\r\n \twrapLatLngBounds: function (bounds) {\r\n \t\tvar center = bounds.getCenter(),\r\n \t\t newCenter = this.wrapLatLng(center),\r\n \t\t latShift = center.lat - newCenter.lat,\r\n \t\t lngShift = center.lng - newCenter.lng;\r\n\r\n \t\tif (latShift === 0 && lngShift === 0) {\r\n \t\t\treturn bounds;\r\n \t\t}\r\n\r\n \t\tvar sw = bounds.getSouthWest(),\r\n \t\t ne = bounds.getNorthEast(),\r\n \t\t newSw = new LatLng(sw.lat - latShift, sw.lng - lngShift),\r\n \t\t newNe = new LatLng(ne.lat - latShift, ne.lng - lngShift);\r\n\r\n \t\treturn new LatLngBounds(newSw, newNe);\r\n \t}\r\n };\n\n /*\n * @namespace CRS\n * @crs L.CRS.Earth\n *\n * Serves as the base for CRS that are global such that they cover the earth.\n * Can only be used as the base for other CRS and cannot be used directly,\n * since it does not have a `code`, `projection` or `transformation`. `distance()` returns\n * meters.\n */\n\n var Earth = extend({}, CRS, {\n \twrapLng: [-180, 180],\n\n \t// Mean Earth Radius, as recommended for use by\n \t// the International Union of Geodesy and Geophysics,\n \t// see https://rosettacode.org/wiki/Haversine_formula\n \tR: 6371000,\n\n \t// distance between two geographical points using spherical law of cosines approximation\n \tdistance: function (latlng1, latlng2) {\n \t\tvar rad = Math.PI / 180,\n \t\t lat1 = latlng1.lat * rad,\n \t\t lat2 = latlng2.lat * rad,\n \t\t sinDLat = Math.sin((latlng2.lat - latlng1.lat) * rad / 2),\n \t\t sinDLon = Math.sin((latlng2.lng - latlng1.lng) * rad / 2),\n \t\t a = sinDLat * sinDLat + Math.cos(lat1) * Math.cos(lat2) * sinDLon * sinDLon,\n \t\t c = 2 * Math.atan2(Math.sqrt(a), Math.sqrt(1 - a));\n \t\treturn this.R * c;\n \t}\n });\n\n /*\r\n * @namespace Projection\r\n * @projection L.Projection.SphericalMercator\r\n *\r\n * Spherical Mercator projection — the most common projection for online maps,\r\n * used by almost all free and commercial tile providers. Assumes that Earth is\r\n * a sphere. Used by the `EPSG:3857` CRS.\r\n */\r\n\r\n var earthRadius = 6378137;\r\n\r\n var SphericalMercator = {\r\n\r\n \tR: earthRadius,\r\n \tMAX_LATITUDE: 85.0511287798,\r\n\r\n \tproject: function (latlng) {\r\n \t\tvar d = Math.PI / 180,\r\n \t\t max = this.MAX_LATITUDE,\r\n \t\t lat = Math.max(Math.min(max, latlng.lat), -max),\r\n \t\t sin = Math.sin(lat * d);\r\n\r\n \t\treturn new Point(\r\n \t\t\tthis.R * latlng.lng * d,\r\n \t\t\tthis.R * Math.log((1 + sin) / (1 - sin)) / 2);\r\n \t},\r\n\r\n \tunproject: function (point) {\r\n \t\tvar d = 180 / Math.PI;\r\n\r\n \t\treturn new LatLng(\r\n \t\t\t(2 * Math.atan(Math.exp(point.y / this.R)) - (Math.PI / 2)) * d,\r\n \t\t\tpoint.x * d / this.R);\r\n \t},\r\n\r\n \tbounds: (function () {\r\n \t\tvar d = earthRadius * Math.PI;\r\n \t\treturn new Bounds([-d, -d], [d, d]);\r\n \t})()\r\n };\n\n /*\r\n * @class Transformation\r\n * @aka L.Transformation\r\n *\r\n * Represents an affine transformation: a set of coefficients `a`, `b`, `c`, `d`\r\n * for transforming a point of a form `(x, y)` into `(a*x + b, c*y + d)` and doing\r\n * the reverse. Used by Leaflet in its projections code.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * var transformation = L.transformation(2, 5, -1, 10),\r\n * \tp = L.point(1, 2),\r\n * \tp2 = transformation.transform(p), // L.point(7, 8)\r\n * \tp3 = transformation.untransform(p2); // L.point(1, 2)\r\n * ```\r\n */\r\n\r\n\r\n // factory new L.Transformation(a: Number, b: Number, c: Number, d: Number)\r\n // Creates a `Transformation` object with the given coefficients.\r\n function Transformation(a, b, c, d) {\r\n \tif (isArray(a)) {\r\n \t\t// use array properties\r\n \t\tthis._a = a[0];\r\n \t\tthis._b = a[1];\r\n \t\tthis._c = a[2];\r\n \t\tthis._d = a[3];\r\n \t\treturn;\r\n \t}\r\n \tthis._a = a;\r\n \tthis._b = b;\r\n \tthis._c = c;\r\n \tthis._d = d;\r\n }\r\n\r\n Transformation.prototype = {\r\n \t// @method transform(point: Point, scale?: Number): Point\r\n \t// Returns a transformed point, optionally multiplied by the given scale.\r\n \t// Only accepts actual `L.Point` instances, not arrays.\r\n \ttransform: function (point, scale) { // (Point, Number) -> Point\r\n \t\treturn this._transform(point.clone(), scale);\r\n \t},\r\n\r\n \t// destructive transform (faster)\r\n \t_transform: function (point, scale) {\r\n \t\tscale = scale || 1;\r\n \t\tpoint.x = scale * (this._a * point.x + this._b);\r\n \t\tpoint.y = scale * (this._c * point.y + this._d);\r\n \t\treturn point;\r\n \t},\r\n\r\n \t// @method untransform(point: Point, scale?: Number): Point\r\n \t// Returns the reverse transformation of the given point, optionally divided\r\n \t// by the given scale. Only accepts actual `L.Point` instances, not arrays.\r\n \tuntransform: function (point, scale) {\r\n \t\tscale = scale || 1;\r\n \t\treturn new Point(\r\n \t\t (point.x / scale - this._b) / this._a,\r\n \t\t (point.y / scale - this._d) / this._c);\r\n \t}\r\n };\r\n\r\n // factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n\r\n // @factory L.transformation(a: Number, b: Number, c: Number, d: Number)\r\n // Instantiates a Transformation object with the given coefficients.\r\n\r\n // @alternative\r\n // @factory L.transformation(coefficients: Array): Transformation\r\n // Expects an coefficients array of the form\r\n // `[a: Number, b: Number, c: Number, d: Number]`.\r\n\r\n function toTransformation(a, b, c, d) {\r\n \treturn new Transformation(a, b, c, d);\r\n }\n\n /*\r\n * @namespace CRS\r\n * @crs L.CRS.EPSG3857\r\n *\r\n * The most common CRS for online maps, used by almost all free and commercial\r\n * tile providers. Uses Spherical Mercator projection. Set in by default in\r\n * Map's `crs` option.\r\n */\r\n\r\n var EPSG3857 = extend({}, Earth, {\r\n \tcode: 'EPSG:3857',\r\n \tprojection: SphericalMercator,\r\n\r\n \ttransformation: (function () {\r\n \t\tvar scale = 0.5 / (Math.PI * SphericalMercator.R);\r\n \t\treturn toTransformation(scale, 0.5, -scale, 0.5);\r\n \t}())\r\n });\r\n\r\n var EPSG900913 = extend({}, EPSG3857, {\r\n \tcode: 'EPSG:900913'\r\n });\n\n // @namespace SVG; @section\n // There are several static functions which can be called without instantiating L.SVG:\n\n // @function create(name: String): SVGElement\n // Returns a instance of [SVGElement](https://developer.mozilla.org/docs/Web/API/SVGElement),\n // corresponding to the class name passed. For example, using 'line' will return\n // an instance of [SVGLineElement](https://developer.mozilla.org/docs/Web/API/SVGLineElement).\n function svgCreate(name) {\n \treturn document.createElementNS('http://www.w3.org/2000/svg', name);\n }\n\n // @function pointsToPath(rings: Point[], closed: Boolean): String\n // Generates a SVG path string for multiple rings, with each ring turning\n // into \"M..L..L..\" instructions\n function pointsToPath(rings, closed) {\n \tvar str = '',\n \ti, j, len, len2, points, p;\n\n \tfor (i = 0, len = rings.length; i < len; i++) {\n \t\tpoints = rings[i];\n\n \t\tfor (j = 0, len2 = points.length; j < len2; j++) {\n \t\t\tp = points[j];\n \t\t\tstr += (j ? 'L' : 'M') + p.x + ' ' + p.y;\n \t\t}\n\n \t\t// closes the ring for polygons; \"x\" is VML syntax\n \t\tstr += closed ? (Browser.svg ? 'z' : 'x') : '';\n \t}\n\n \t// SVG complains about empty path strings\n \treturn str || 'M0 0';\n }\n\n /*\r\n * @namespace Browser\r\n * @aka L.Browser\r\n *\r\n * A namespace with static properties for browser/feature detection used by Leaflet internally.\r\n *\r\n * @example\r\n *\r\n * ```js\r\n * if (L.Browser.ielt9) {\r\n * alert('Upgrade your browser, dude!');\r\n * }\r\n * ```\r\n */\r\n\r\n var style = document.documentElement.style;\r\n\r\n // @property ie: Boolean; `true` for all Internet Explorer versions (not Edge).\r\n var ie = 'ActiveXObject' in window;\r\n\r\n // @property ielt9: Boolean; `true` for Internet Explorer versions less than 9.\r\n var ielt9 = ie && !document.addEventListener;\r\n\r\n // @property edge: Boolean; `true` for the Edge web browser.\r\n var edge = 'msLaunchUri' in navigator && !('documentMode' in document);\r\n\r\n // @property webkit: Boolean;\r\n // `true` for webkit-based browsers like Chrome and Safari (including mobile versions).\r\n var webkit = userAgentContains('webkit');\r\n\r\n // @property android: Boolean\r\n // **Deprecated.** `true` for any browser running on an Android platform.\r\n var android = userAgentContains('android');\r\n\r\n // @property android23: Boolean; **Deprecated.** `true` for browsers running on Android 2 or Android 3.\r\n var android23 = userAgentContains('android 2') || userAgentContains('android 3');\r\n\r\n /* See https://stackoverflow.com/a/17961266 for details on detecting stock Android */\r\n var webkitVer = parseInt(/WebKit\\/([0-9]+)|$/.exec(navigator.userAgent)[1], 10); // also matches AppleWebKit\r\n // @property androidStock: Boolean; **Deprecated.** `true` for the Android stock browser (i.e. not Chrome)\r\n var androidStock = android && userAgentContains('Google') && webkitVer < 537 && !('AudioNode' in window);\r\n\r\n // @property opera: Boolean; `true` for the Opera browser\r\n var opera = !!window.opera;\r\n\r\n // @property chrome: Boolean; `true` for the Chrome browser.\r\n var chrome = !edge && userAgentContains('chrome');\r\n\r\n // @property gecko: Boolean; `true` for gecko-based browsers like Firefox.\r\n var gecko = userAgentContains('gecko') && !webkit && !opera && !ie;\r\n\r\n // @property safari: Boolean; `true` for the Safari browser.\r\n var safari = !chrome && userAgentContains('safari');\r\n\r\n var phantom = userAgentContains('phantom');\r\n\r\n // @property opera12: Boolean\r\n // `true` for the Opera browser supporting CSS transforms (version 12 or later).\r\n var opera12 = 'OTransition' in style;\r\n\r\n // @property win: Boolean; `true` when the browser is running in a Windows platform\r\n var win = navigator.platform.indexOf('Win') === 0;\r\n\r\n // @property ie3d: Boolean; `true` for all Internet Explorer versions supporting CSS transforms.\r\n var ie3d = ie && ('transition' in style);\r\n\r\n // @property webkit3d: Boolean; `true` for webkit-based browsers supporting CSS transforms.\r\n var webkit3d = ('WebKitCSSMatrix' in window) && ('m11' in new window.WebKitCSSMatrix()) && !android23;\r\n\r\n // @property gecko3d: Boolean; `true` for gecko-based browsers supporting CSS transforms.\r\n var gecko3d = 'MozPerspective' in style;\r\n\r\n // @property any3d: Boolean\r\n // `true` for all browsers supporting CSS transforms.\r\n var any3d = !window.L_DISABLE_3D && (ie3d || webkit3d || gecko3d) && !opera12 && !phantom;\r\n\r\n // @property mobile: Boolean; `true` for all browsers running in a mobile device.\r\n var mobile = typeof orientation !== 'undefined' || userAgentContains('mobile');\r\n\r\n // @property mobileWebkit: Boolean; `true` for all webkit-based browsers in a mobile device.\r\n var mobileWebkit = mobile && webkit;\r\n\r\n // @property mobileWebkit3d: Boolean\r\n // `true` for all webkit-based browsers in a mobile device supporting CSS transforms.\r\n var mobileWebkit3d = mobile && webkit3d;\r\n\r\n // @property msPointer: Boolean\r\n // `true` for browsers implementing the Microsoft touch events model (notably IE10).\r\n var msPointer = !window.PointerEvent && window.MSPointerEvent;\r\n\r\n // @property pointer: Boolean\r\n // `true` for all browsers supporting [pointer events](https://msdn.microsoft.com/en-us/library/dn433244%28v=vs.85%29.aspx).\r\n var pointer = !!(window.PointerEvent || msPointer);\r\n\r\n // @property touchNative: Boolean\r\n // `true` for all browsers supporting [touch events](https://developer.mozilla.org/docs/Web/API/Touch_events).\r\n // **This does not necessarily mean** that the browser is running in a computer with\r\n // a touchscreen, it only means that the browser is capable of understanding\r\n // touch events.\r\n var touchNative = 'ontouchstart' in window || !!window.TouchEvent;\r\n\r\n // @property touch: Boolean\r\n // `true` for all browsers supporting either [touch](#browser-touch) or [pointer](#browser-pointer) events.\r\n // Note: pointer events will be preferred (if available), and processed for all `touch*` listeners.\r\n var touch = !window.L_NO_TOUCH && (touchNative || pointer);\r\n\r\n // @property mobileOpera: Boolean; `true` for the Opera browser in a mobile device.\r\n var mobileOpera = mobile && opera;\r\n\r\n // @property mobileGecko: Boolean\r\n // `true` for gecko-based browsers running in a mobile device.\r\n var mobileGecko = mobile && gecko;\r\n\r\n // @property retina: Boolean\r\n // `true` for browsers on a high-resolution \"retina\" screen or on any screen when browser's display zoom is more than 100%.\r\n var retina = (window.devicePixelRatio || (window.screen.deviceXDPI / window.screen.logicalXDPI)) > 1;\r\n\r\n // @property passiveEvents: Boolean\r\n // `true` for browsers that support passive events.\r\n var passiveEvents = (function () {\r\n \tvar supportsPassiveOption = false;\r\n \ttry {\r\n \t\tvar opts = Object.defineProperty({}, 'passive', {\r\n \t\t\tget: function () { // eslint-disable-line getter-return\r\n \t\t\t\tsupportsPassiveOption = true;\r\n \t\t\t}\r\n \t\t});\r\n \t\twindow.addEventListener('testPassiveEventSupport', falseFn, opts);\r\n \t\twindow.removeEventListener('testPassiveEventSupport', falseFn, opts);\r\n \t} catch (e) {\r\n \t\t// Errors can safely be ignored since this is only a browser support test.\r\n \t}\r\n \treturn supportsPassiveOption;\r\n }());\r\n\r\n // @property canvas: Boolean\r\n // `true` when the browser supports [``](https://developer.mozilla.org/docs/Web/API/Canvas_API).\r\n var canvas$1 = (function () {\r\n \treturn !!document.createElement('canvas').getContext;\r\n }());\r\n\r\n // @property svg: Boolean\r\n // `true` when the browser supports [SVG](https://developer.mozilla.org/docs/Web/SVG).\r\n var svg$1 = !!(document.createElementNS && svgCreate('svg').createSVGRect);\r\n\r\n var inlineSvg = !!svg$1 && (function () {\r\n \tvar div = document.createElement('div');\r\n \tdiv.innerHTML = '';\r\n \treturn (div.firstChild && div.firstChild.namespaceURI) === 'http://www.w3.org/2000/svg';\r\n })();\r\n\r\n // @property vml: Boolean\r\n // `true` if the browser supports [VML](https://en.wikipedia.org/wiki/Vector_Markup_Language).\r\n var vml = !svg$1 && (function () {\r\n \ttry {\r\n \t\tvar div = document.createElement('div');\r\n \t\tdiv.innerHTML = '';\r\n\r\n \t\tvar shape = div.firstChild;\r\n \t\tshape.style.behavior = 'url(#default#VML)';\r\n\r\n \t\treturn shape && (typeof shape.adj === 'object');\r\n\r\n \t} catch (e) {\r\n \t\treturn false;\r\n \t}\r\n }());\r\n\r\n\r\n // @property mac: Boolean; `true` when the browser is running in a Mac platform\r\n var mac = navigator.platform.indexOf('Mac') === 0;\r\n\r\n // @property mac: Boolean; `true` when the browser is running in a Linux platform\r\n var linux = navigator.platform.indexOf('Linux') === 0;\r\n\r\n function userAgentContains(str) {\r\n \treturn navigator.userAgent.toLowerCase().indexOf(str) >= 0;\r\n }\r\n\r\n\r\n var Browser = {\r\n \tie: ie,\r\n \tielt9: ielt9,\r\n \tedge: edge,\r\n \twebkit: webkit,\r\n \tandroid: android,\r\n \tandroid23: android23,\r\n \tandroidStock: androidStock,\r\n \topera: opera,\r\n \tchrome: chrome,\r\n \tgecko: gecko,\r\n \tsafari: safari,\r\n \tphantom: phantom,\r\n \topera12: opera12,\r\n \twin: win,\r\n \tie3d: ie3d,\r\n \twebkit3d: webkit3d,\r\n \tgecko3d: gecko3d,\r\n \tany3d: any3d,\r\n \tmobile: mobile,\r\n \tmobileWebkit: mobileWebkit,\r\n \tmobileWebkit3d: mobileWebkit3d,\r\n \tmsPointer: msPointer,\r\n \tpointer: pointer,\r\n \ttouch: touch,\r\n \ttouchNative: touchNative,\r\n \tmobileOpera: mobileOpera,\r\n \tmobileGecko: mobileGecko,\r\n \tretina: retina,\r\n \tpassiveEvents: passiveEvents,\r\n \tcanvas: canvas$1,\r\n \tsvg: svg$1,\r\n \tvml: vml,\r\n \tinlineSvg: inlineSvg,\r\n \tmac: mac,\r\n \tlinux: linux\r\n };\n\n /*\n * Extends L.DomEvent to provide touch support for Internet Explorer and Windows-based devices.\n */\n\n var POINTER_DOWN = Browser.msPointer ? 'MSPointerDown' : 'pointerdown';\n var POINTER_MOVE = Browser.msPointer ? 'MSPointerMove' : 'pointermove';\n var POINTER_UP = Browser.msPointer ? 'MSPointerUp' : 'pointerup';\n var POINTER_CANCEL = Browser.msPointer ? 'MSPointerCancel' : 'pointercancel';\n var pEvent = {\n \ttouchstart : POINTER_DOWN,\n \ttouchmove : POINTER_MOVE,\n \ttouchend : POINTER_UP,\n \ttouchcancel : POINTER_CANCEL\n };\n var handle = {\n \ttouchstart : _onPointerStart,\n \ttouchmove : _handlePointer,\n \ttouchend : _handlePointer,\n \ttouchcancel : _handlePointer\n };\n var _pointers = {};\n var _pointerDocListener = false;\n\n // Provides a touch events wrapper for (ms)pointer events.\n // ref https://www.w3.org/TR/pointerevents/ https://www.w3.org/Bugs/Public/show_bug.cgi?id=22890\n\n function addPointerListener(obj, type, handler) {\n \tif (type === 'touchstart') {\n \t\t_addPointerDocListener();\n \t}\n \tif (!handle[type]) {\n \t\tconsole.warn('wrong event specified:', type);\n \t\treturn falseFn;\n \t}\n \thandler = handle[type].bind(this, handler);\n \tobj.addEventListener(pEvent[type], handler, false);\n \treturn handler;\n }\n\n function removePointerListener(obj, type, handler) {\n \tif (!pEvent[type]) {\n \t\tconsole.warn('wrong event specified:', type);\n \t\treturn;\n \t}\n \tobj.removeEventListener(pEvent[type], handler, false);\n }\n\n function _globalPointerDown(e) {\n \t_pointers[e.pointerId] = e;\n }\n\n function _globalPointerMove(e) {\n \tif (_pointers[e.pointerId]) {\n \t\t_pointers[e.pointerId] = e;\n \t}\n }\n\n function _globalPointerUp(e) {\n \tdelete _pointers[e.pointerId];\n }\n\n function _addPointerDocListener() {\n \t// need to keep track of what pointers and how many are active to provide e.touches emulation\n \tif (!_pointerDocListener) {\n \t\t// we listen document as any drags that end by moving the touch off the screen get fired there\n \t\tdocument.addEventListener(POINTER_DOWN, _globalPointerDown, true);\n \t\tdocument.addEventListener(POINTER_MOVE, _globalPointerMove, true);\n \t\tdocument.addEventListener(POINTER_UP, _globalPointerUp, true);\n \t\tdocument.addEventListener(POINTER_CANCEL, _globalPointerUp, true);\n\n \t\t_pointerDocListener = true;\n \t}\n }\n\n function _handlePointer(handler, e) {\n \tif (e.pointerType === (e.MSPOINTER_TYPE_MOUSE || 'mouse')) { return; }\n\n \te.touches = [];\n \tfor (var i in _pointers) {\n \t\te.touches.push(_pointers[i]);\n \t}\n \te.changedTouches = [e];\n\n \thandler(e);\n }\n\n function _onPointerStart(handler, e) {\n \t// IE10 specific: MsTouch needs preventDefault. See #2000\n \tif (e.MSPOINTER_TYPE_TOUCH && e.pointerType === e.MSPOINTER_TYPE_TOUCH) {\n \t\tpreventDefault(e);\n \t}\n \t_handlePointer(handler, e);\n }\n\n /*\r\n * Extends the event handling code with double tap support for mobile browsers.\r\n *\r\n * Note: currently most browsers fire native dblclick, with only a few exceptions\r\n * (see https://github.com/Leaflet/Leaflet/issues/7012#issuecomment-595087386)\r\n */\r\n\r\n function makeDblclick(event) {\r\n \t// in modern browsers `type` cannot be just overridden:\r\n \t// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Errors/Getter_only\r\n \tvar newEvent = {},\r\n \t prop, i;\r\n \tfor (i in event) {\r\n \t\tprop = event[i];\r\n \t\tnewEvent[i] = prop && prop.bind ? prop.bind(event) : prop;\r\n \t}\r\n \tevent = newEvent;\r\n \tnewEvent.type = 'dblclick';\r\n \tnewEvent.detail = 2;\r\n \tnewEvent.isTrusted = false;\r\n \tnewEvent._simulated = true; // for debug purposes\r\n \treturn newEvent;\r\n }\r\n\r\n var delay = 200;\r\n function addDoubleTapListener(obj, handler) {\r\n \t// Most browsers handle double tap natively\r\n \tobj.addEventListener('dblclick', handler);\r\n\r\n \t// On some platforms the browser doesn't fire native dblclicks for touch events.\r\n \t// It seems that in all such cases `detail` property of `click` event is always `1`.\r\n \t// So here we rely on that fact to avoid excessive 'dblclick' simulation when not needed.\r\n \tvar last = 0,\r\n \t detail;\r\n \tfunction simDblclick(e) {\r\n \t\tif (e.detail !== 1) {\r\n \t\t\tdetail = e.detail; // keep in sync to avoid false dblclick in some cases\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\tif (e.pointerType === 'mouse' ||\r\n \t\t\t(e.sourceCapabilities && !e.sourceCapabilities.firesTouchEvents)) {\r\n\r\n \t\t\treturn;\r\n \t\t}\r\n\r\n \t\t// When clicking on an , the browser generates a click on its\r\n \t\t//