{"version":3,"file":"static/chunks/346-e64eb9ae502d9ec8.js","mappings":"wNASA,IAAMA,EAAoB,IACxBC,EAAKC,OAAO,CAAC,GAASC,aAAaC,UAAU,CAACC,GAChD,EAkDA,IAAAC,EAhDgD,OAAC,CAAEC,QAAAA,CAAO,CAAE,CAAAC,EAC1D,MACE,GAAAC,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sFACb,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,iHACb,GAAAH,EAAAC,GAAA,EAACI,KAAAA,CAAGF,UAAU,oDAA2C,4CAGzD,GAAAH,EAAAC,GAAA,EAACK,IAAAA,CAAEH,UAAU,oCAA2B,qIAIxC,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,oFACb,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,gBACLL,UAAU,2GACVM,QAAS,KACPlB,EAAkB,CAAC,qBAAsB,uBAAuB,EAChEO,GACF,WACD,qCAGD,GAAAE,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,QACLL,UAAU,2GACVM,QAAS,KACPlB,EAAkB,CAChB,kBACA,eACA,yBACD,EACDO,GACF,WACD,6BAIH,GAAAE,EAAAC,GAAA,EAACC,MAAAA,CACCC,UAAU,yDACVM,QAASX,WAET,GAAAE,EAAAC,GAAA,EAACS,EAAAA,GAAOA,CAAAA,CAACC,KAAM,WAKzB,ECwBAC,EA1E4C,OAAC,CAAEd,QAAAA,CAAO,CAAE,CAAAC,EAChD,CAACc,EAAYC,EAAc,CAAGC,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACvC,CAACC,EAAmBC,EAAqB,CAAGF,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAE3DG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAaRC,CAZkB,UAChB,IAAMC,EAAc1B,aAAa2B,OAAO,CAAC,mBACnCC,EAAkB5B,aAAa2B,OAAO,CAAC,gBACvCE,EAAqB7B,aAAa2B,OAAO,CAAC,sBAC1CG,EAAyB9B,aAAa2B,OAAO,CACjD,wBAGFP,EAAc,CAAC,CAACM,GAAe,CAAC,CAACE,GACjCL,EAAqB,CAAC,CAACM,GAAsB,CAAC,CAACC,EACjD,IAGF,EAAG,EAAE,EAGL,IAAMC,EAAiB,GACd,EACLC,SAAUb,CAAAA,EAAAA,KAAcG,CAAAA,GAAoB,CAACW,EAC7CxB,UAAW,sHAMVyB,MAAA,CALCf,GAAcG,EACVW,EACE,+CACA,+CACF,+CAER,GAGF,MACE,GAAA3B,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sFACb,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,iHACb,GAAAH,EAAAC,GAAA,EAACI,KAAAA,CAAGF,UAAU,oDACXU,GAAcG,EACX,+BACA,oCAEN,GAAAhB,EAAAC,GAAA,EAACK,IAAAA,CAAEH,UAAU,oCACVU,GAAcG,EACX,iHACA,yHAEN,GAAAhB,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,oFACb,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAMQ,EAAoB,oBAAsB,gBAC/C,GAAGS,EAAeT,EAAkB,CACrCP,QAASX,WACV,qCAGD,GAAAE,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAMK,EAAa,YAAc,QAChC,GAAGY,EAAeZ,EAAW,CAC9BJ,QAASX,WACV,6BAIH,GAAAE,EAAAC,GAAA,EAACC,MAAAA,CACCC,UAAU,yDACVM,QAASX,WAET,GAAAE,EAAAC,GAAA,EAACS,EAAAA,GAAOA,CAAAA,CAACC,KAAM,WAKzB,EEzEe,SAASkB,IACtB,GAAM,CAACC,EAAUC,EAAY,CAAGhB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACnC,CAACiB,EAAYC,EAAc,CAAGlB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACvC,CAACmB,EAAeC,EAAiB,CAAGpB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC7C,CAACqB,EAAmBC,EAAqB,CAAGtB,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAO3D,MALAG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAERe,EAAcK,OADEC,CAAAA,EAAAA,EAAAA,EAAAA,IAElB,EAAG,EAAE,EAGH,GAAAvC,EAAAI,IAAA,EAACoC,SAAAA,CAAOrC,UAAU,2EAChB,GAAAH,EAAAI,IAAA,EAACqC,MAAAA,CAAItC,UAAU,qEACb,GAAAH,EAAAI,IAAA,EAACG,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,4EACVK,KAAK,IACLkC,aAAW,qBAEX,GAAA1C,EAAAC,GAAA,EAAC0C,EAAAA,OAAKA,CAAAA,CAACC,IAAI,aAAazC,UAAU,YAAY0C,IAAKC,EAAAA,EAAIA,GAAI,WAG7D,GAAA9C,EAAAC,GAAA,EAAC8C,SAAAA,CACC5C,UAAW,uDAEVyB,MAAA,CADCE,EAAW,SAAW,QAExBY,aAAW,cACXjC,QAAS,IAAMsB,EAAY,CAACD,YAE5B,GAAA9B,EAAAI,IAAA,EAAC4C,MAAAA,CACC7C,UAAU,6BACV8C,QAAQ,YACRC,MAAM,uCAEN,GAAAlD,EAAAC,GAAA,EAACkD,QAAAA,UAAM,gBACP,GAAAnD,EAAAC,GAAA,EAACmD,OAAAA,CAAKC,EAAE,qDAGZ,GAAArD,EAAAI,IAAA,EAACkD,KAAAA,CACCnD,UAAW,2EAEVyB,MAAA,CADCE,EAAW,GAAK,oBAGjBE,EACC,GAAAhC,EAAAC,GAAA,EAAAD,EAAAuD,QAAA,WACE,GAAAvD,EAAAC,GAAA,EAACuD,KAAAA,UACC,GAAAxD,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,mDACVK,KAAK,IACLC,QAAS,IAAM4B,EAAqB,aACrC,iCAcL,GAUF,GAAArC,EAAAC,GAAA,EAACuD,KAAAA,UACC,GAAAxD,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,gBACLL,UAAU,4DACX,uBAIH,GAAAH,EAAAC,GAAA,EAACuD,KAAAA,UACC,GAAAxD,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,OACLL,UAAU,4DACX,aAKL,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,oJACVK,KAAK,IACLC,QAAS,IAAM0B,EAAiB,aAE/BH,EAAa,wBAAuB,8BAGxCF,GACC,GAAA9B,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,sCACb,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,yDACf,GAAAH,EAAAI,IAAA,EAACqC,MAAAA,CAAItC,UAAU,iHACb,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,mCACb,GAAAH,EAAAI,IAAA,EAACG,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,oFACVK,KAAK,IACLkC,aAAW,qBAEX,GAAA1C,EAAAC,GAAA,EAAC0C,EAAAA,OAAKA,CAAAA,CAACC,IAAI,aAAazC,UAAU,YAAY0C,IAAKC,EAAAA,EAAIA,GAAK,IAAI,WAGlE,GAAA9C,EAAAC,GAAA,EAAC8C,SAAAA,CACC5C,UAAU,eACVuC,aAAW,aACXjC,QAAS,IAAMsB,EAAY,aAE3B,GAAA/B,EAAAC,GAAA,EAAC+C,MAAAA,CACC7C,UAAU,2DACV+C,MAAM,6BACNO,KAAK,OACLR,QAAQ,YACRS,OAAO,wBAEP,GAAA1D,EAAAC,GAAA,EAACmD,OAAAA,CACCO,cAAc,QACdC,eAAe,QACfC,YAAY,IACZR,EAAE,gCAKV,GAAArD,EAAAC,GAAA,EAACC,MAAAA,UACC,GAAAF,EAAAI,IAAA,EAACkD,KAAAA,WACEtB,EACC,GAAAhC,EAAAI,IAAA,EAAAJ,EAAAuD,QAAA,YACE,GAAAvD,EAAAC,GAAA,EAACuD,KAAAA,CAAGrD,UAAU,gBACZ,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,wEACVK,KAAK,IACLC,QAAS,IAAM4B,EAAqB,aACrC,+BAYH,GAAArC,EAAAC,GAAA,EAACuD,KAAAA,CAAGrD,UAAU,gBACZ,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,wEACVK,KAAK,IACLC,QAAS,IAAM0B,EAAiB,aAEjC,+BAML,GAWF,GAAAnC,EAAAC,GAAA,EAACuD,KAAAA,CAAGrD,UAAU,gBACZ,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,wEACVK,KAAK,gBACLC,QAAS,IAAMsB,EAAY,aAC5B,uBAIH,GAAA/B,EAAAC,GAAA,EAACuD,KAAAA,CAAGrD,UAAU,gBACZ,GAAAH,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHJ,UAAU,wEACVK,KAAK,OACLC,QAAS,IAAMsB,EAAY,aAC5B,qBAUZG,GAAiB,GAAAlC,EAAAC,GAAA,EAAC6D,EAASA,CAAChE,QAAS,IAAMqC,EAAiB,MAC5DC,GACC,GAAApC,EAAAC,GAAA,EAAC8D,EAAaA,CAACjE,QAAS,IAAMuC,EAAqB,QAI3D,sCCjNA,IAAM2B,EAAgB,OAetBC,CAAAA,EAAA,QAbiC,KAC/B/C,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACcxB,aAAa2B,OAAO,CAAC,mBAErB2C,IACpBtE,aAAawE,KAAK,GAClBxE,aAAayE,OAAO,CAAC,gBAAiBH,GAE1C,EAAG,EAAE,EAEE,yECoCTC,CAAAA,EAAA,QA7CoB,IAClB,IAAMG,EAAWC,CAAAA,EAAAA,EAAAA,WAAAA,IACXC,EAAYF,MAAAA,EAAAA,KAAAA,EAAAA,EAAUG,KAAK,CAAC,KAAKC,MAAM,CAAC,GAAOlE,GAErD,MACE,GAAAmE,EAAAxE,GAAA,EAACwC,MAAAA,CAAItC,UAAU,sCACb,GAAAsE,EAAArE,IAAA,EAACkD,KAAAA,CAAGnD,UAAU,kDACZ,GAAAsE,EAAAxE,GAAA,EAACuD,KAAAA,UACC,GAAAiB,EAAAxE,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,IACLL,UAAU,uDACX,cAIFmE,MAAAA,EAAAA,KAAAA,EAAAA,EAAWI,GAAG,CAAC,CAACC,EAASC,KACxB,IAAMxB,EAAO,IAA4CxB,MAAA,CAAxC0C,EAAUO,KAAK,CAAC,EAAGD,EAAQ,GAAGE,IAAI,CAAC,MAC9CC,EAASH,IAAUN,EAAUU,MAAM,CAAG,EAC5C,MACE,GAAAP,EAAArE,IAAA,EAAAqE,EAAAlB,QAAA,YACE,GAAAkB,EAAAxE,GAAA,EAACuD,KAAAA,CAAcrD,UAAU,6BACvB,GAAAsE,EAAAxE,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,8BAAqB,OAD9BiD,GAGR2B,EACC,GAAAN,EAAAxE,GAAA,EAACuD,KAAAA,CAAcrD,UAAU,6BACvB,GAAAsE,EAAAxE,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,kCAA0B+E,EAAM/B,KAAK,IAD9CC,GAIT,GAAAqB,EAAAxE,GAAA,EAACuD,KAAAA,CAAcrD,UAAU,6BACvB,GAAAsE,EAAAxE,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAM4C,EACNjD,UAAU,uDACX,sBAJMiD,KAWjB,OAIR,sDC0FAa,CAAAA,EAAA,QA1IqB,OAAC,CAAEkB,iBAAAA,CAAgB,CAAiC,CAAApF,EAGjE,CAACqF,EAAUC,EAAY,CAAGtE,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,CACvCuE,IAHe,QAIfC,QAAS,GACTC,KAAM,GACNC,MAAO,GACPC,QAAS,EACX,GAEAxE,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACRmE,EAAY,GAAsB,EAChC,GAAGM,CAAe,CACpB,EACF,EAAG,EAAE,EAEL,IAAMC,EAAc,UAClB,GAAI,CACe,MAAMC,MACrB,+EACA,CACEC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAACd,EACvB,EAEJ,CAAE,MAAOe,EAAO,CAAC,CACnB,EACA,MACE,GAAA1B,EAAAxE,GAAA,EAACmG,OAAAA,CAAKjG,UAAWgF,EAAkBzC,aAAW,wBAC5C,GAAA+B,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iDACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,4DACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,WACC,GAAAuE,EAAAxE,GAAA,EAACoG,QAAAA,CACCC,QAAQ,aACRnG,UAAU,+DACX,QAGD,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,OACLC,GAAG,aACHjB,KAAK,YACLkB,aAAa,aACbvG,UAAU,6MACVuC,aAAW,aACXiE,MAAOvB,EAASG,OAAO,CACvBqB,SAAU,GACRvB,EAAY,CAAE,GAAGD,CAAQ,CAAEG,QAASsB,EAAEC,MAAM,CAACH,KAAK,UAK1D,GAAAlC,EAAArE,IAAA,EAACF,MAAAA,WACC,GAAAuE,EAAAxE,GAAA,EAACoG,QAAAA,CACCC,QAAQ,YACRnG,UAAU,+DACX,cAGD,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,OACLC,GAAG,YACHjB,KAAK,WACLkB,aAAa,cACbvG,UAAU,6MACVuC,aAAW,YACXiE,MAAOvB,EAASI,IAAI,CACpBoB,SAAU,GACRvB,EAAY,CAAE,GAAGD,CAAQ,CAAEI,KAAMqB,EAAEC,MAAM,CAACH,KAAK,UAKvD,GAAAlC,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,0BACb,GAAAsE,EAAAxE,GAAA,EAACoG,QAAAA,CACCC,QAAQ,QACRnG,UAAU,+DACX,UAGD,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,QACLC,GAAG,QACHjB,KAAK,QACLkB,aAAa,QACbvG,UAAU,6MACVuC,aAAW,gBACXiE,MAAOvB,EAASK,KAAK,CACrBmB,SAAU,GACRvB,EAAY,CAAE,GAAGD,CAAQ,CAAEK,MAAOoB,EAAEC,MAAM,CAACH,KAAK,UAKxD,GAAAlC,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,0BACb,GAAAsE,EAAAxE,GAAA,EAACoG,QAAAA,CACCC,QAAQ,UACRnG,UAAU,+DACX,gCAGD,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kBACb,GAAAsE,EAAAxE,GAAA,EAAC8G,WAAAA,CACCN,GAAG,UACHjB,KAAK,UACLwB,KAAM,EACN7G,UAAU,6MACVuC,aAAW,UACXiE,MAAOvB,EAASM,OAAO,CACvBkB,SAAU,GACRvB,EAAY,CAAE,GAAGD,CAAQ,CAAEM,QAASmB,EAAEC,MAAM,CAACH,KAAK,aAM5D,GAAAlC,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,iCACb,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCyD,KAAK,SACLrG,UAAU,mOACVuC,aAAW,eACXjC,QAASmF,WACV,gCAOX,sFC5IA,IAAMqB,EAAW,CACf,CACE9D,MACE,gKACF+D,YACE,4HACJ,EACA,CACE/D,MACE,gIACF+D,YACE,4MACJ,EACA,CACE/D,MACE,gLACF+D,YACE,4PACJ,EACD,CCkDD,IAAAC,EA/DgB,IACd,GAAM,CAACC,EAAUC,EAAY,CAAGtG,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,MAEnCuG,EAAY,IAChBD,EAAYD,IAAaxC,EAAQ,KAAOA,EAC1C,EAEA,MACE,GAAA5E,EAAAC,GAAA,EAACsH,UAAAA,CAAQpH,UAAU,uCAAuCsG,GAAG,eAC3D,GAAAzG,EAAAC,GAAA,EAACqD,KAAAA,CAAGnD,UAAU,qBACX8G,EAASvC,GAAG,CAAC,CAACgB,EAASd,IACtB,GAAA5E,EAAAI,IAAA,EAACoD,KAAAA,WACC,GAAAxD,EAAAI,IAAA,EAAC2C,SAAAA,CACC5C,UAAU,4HACVqH,gBAAeJ,IAAaxC,EAC5BnE,QAAS,IAAM6G,EAAU1C,GACzBlC,aAAW,gEAEX,GAAA1C,EAAAC,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,4CACbuF,EAAQvC,KAAK,GAEhB,GAAAnD,EAAAI,IAAA,EAAC4C,MAAAA,CACC7C,UAAU,6CACV8C,QAAQ,YACRC,MAAM,uCAEN,GAAAlD,EAAAC,GAAA,EAACwH,OAAAA,CACCC,EAAE,IACFC,MAAM,KACNC,OAAO,IACPC,GAAG,IACH1H,UAAW,4DAEVyB,MAAA,CADCwF,IAAaxC,EAAQ,YAAc,MAGvC,GAAA5E,EAAAC,GAAA,EAACwH,OAAAA,CACCC,EAAE,IACFC,MAAM,KACNC,OAAO,IACPC,GAAG,IACH1H,UAAU,mEAIhB,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CACCC,UAAW,2DAEVyB,MAAA,CADCwF,IAAaxC,EAAQ,eAAiB,WAExCkD,MAAO,CAAEC,WAAY,gCAAiC,WAEtD,GAAA/H,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,gCACb,GAAAH,EAAAC,GAAA,EAACK,IAAAA,CAAEH,UAAU,qCACVuF,EAAQwB,WAAW,SAzCnBtC,OAkDnB,4ECoMAX,CAAAA,EAAA,QAvPmB,KACjB,IAAM+D,EAASC,CAAAA,EAAAA,EAAAA,SAAAA,IACT,CAACC,EAAWC,EAAa,CAAGpH,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACrC,CAACqH,EAAYC,EAAc,CAAGtH,CAAAA,EAAAA,EAAAA,QAAAA,EAAqB,CACvDuH,IAAK,GACLC,OAAQ,GACR9C,MAAO,EACT,GACM,CAAC+C,EAAQC,EAAU,CAAG1H,CAAAA,EAAAA,EAAAA,QAAAA,EAA8B,CAAC,GACrD,CAAC2H,EAAaC,EAAe,CAAG5H,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACzC,CAAC6H,EAAYC,EAAc,CAAG9H,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,sBACvC,CAAC+H,EAAaC,EAAe,CAAGhI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,gBACzC,CAACiI,EAASC,EAAW,CAAGlI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjC,CAACmI,EAAUC,EAAY,CAAGpI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAEnCqI,EAAe,GACnB,EACK,0BAA0BC,IAAI,CAAC7D,UAC3B,wCAFS,0BAMd8D,EAAgB,GACpB,EAEKC,6BAAWF,IAAI,CAAC5D,UAAe,iCAFjB,2BAMf+D,EAAgB,GACbjD,EAAMkD,OAAO,CAAC,WAAY,IAG7BC,EAAe,IAGnB,GAAM,CAAElE,KAAAA,CAAI,CAAEmB,MAAAA,CAAK,CAAE,CAAGE,EAAEC,MAAM,CAC1B6C,EAAiBH,EAAc7C,GACrC0B,EAAc,CAAE,GAAGD,CAAU,CAAE,CAAC5C,EAAK,CAAEmE,CAAe,GAEtD,IAAIC,EAAY,CAAE,GAAGpB,CAAM,CACvBhD,CAAS,QAATA,GAAkBA,WAAAA,EACpBoE,CAAS,CAACpE,EAAK,CAAG4D,EAAaO,GACb,UAATnE,GACToE,CAAAA,EAAUnE,KAAK,CAAG6D,EAAcK,EAAAA,EAElClB,EAAUmB,EACZ,EAEMC,EAAgB,UACpBZ,EAAW,IACXJ,EAAc,qBACdE,EAAe,gBACf,GAAI,CAEF,IAAMe,EAAYpK,aAAa2B,OAAO,CAAC,mBACvC,GAAI,CAACyI,EAAW,OAChB,IAAMC,EAAe,MAAMlE,MAAM,8BAA+B,CAC9DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,UACb,EACF,GACMC,EAAO,MAAMF,EAAaG,IAAI,GACpCf,EAAY,IAGZ,IAAMgB,EAAiB,MAAMtE,MAAM,2BAA4B,CAC7DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,WACXxE,KAAM4C,EAAWG,MAAM,CACvBhD,QAAS6C,EAAWE,GAAG,CACvB7C,MAAO2C,EAAW3C,KAAK,EAE3B,EACyB,OAAM0E,EAAeD,IAAI,GAClDf,EAAY,IAEZ,IAAMiB,EAAc,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,IACpBC,EAAc,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAAiBN,EAAKO,OAAO,EACjDC,EAAiB,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAA6BJ,GAE1DzB,EAAc,8BACE,MAAM8B,CAAAA,EAAAA,EAAAA,CAAAA,EACpBvC,EAAWG,MAAM,CACjB,WACA6B,EACAE,EACAG,EACA,GACEtB,EAAYyB,IAKhB/B,EAAc,uBAEd,IAAMgC,EAAW,MAAMhF,MAAM,iBAAkB,CAC7CC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnB4E,GAAI1C,EAAW3C,KAAK,CACpBsF,YAAa,CAAC,CAEhB,EACF,GACA5B,EAAY,KAGR0B,EAASG,EAAE,EACbnC,EAAc,eACdE,EAAe,gBAEfkC,WAAW,KACT9C,EAAa,IACbH,EAAOkD,IAAI,CAAC,mBACd,EAAG,OAEHrC,EAAc,mCACdE,EAAe,cAEfkC,WAAW,KACTpC,EAAc,sBACdE,EAAe,eACjB,EAAG,KAEP,CAAE,MAAO5C,EAAO,CACd0C,EAAc,mCACdE,EAAe,cAEfkC,WAAW,KACTpC,EAAc,sBACdE,EAAe,eACjB,EAAG,IACL,QAAU,CACRE,EAAW,IACXgC,WAAW,IAAM9B,EAAY,GAAI,IACnC,CACF,EAcA,MAZAjI,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAMiK,EAAW/B,EAAahB,EAAWE,GAAG,EACtC8C,EAAchC,EAAahB,EAAWG,MAAM,EAC5C8C,EAAa/B,EAAclB,EAAW3C,KAAK,CAE7C,CAAC0F,GAAaC,GAAgBC,EAGhC1C,EAAe,IAFfA,EAAe,GAInB,EAAG,CAACP,EAAW,EAGb,GAAA3D,EAAArE,IAAA,EAACgG,OAAAA,CAAKjG,UAAU,8GACd,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iEACb,GAAAsE,EAAAxE,GAAA,EAACI,KAAAA,CAAGF,UAAU,uFAA8E,yCAG5F,GAAAsE,EAAArE,IAAA,EAACE,IAAAA,CAAEH,UAAU,sFAA4E,4FAEhF,OAET,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,uFAA8E,yDAK7F,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,mEACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,mBACb,GAAAsE,EAAAxE,GAAA,EAACoG,QAAAA,CAAMlG,UAAU,+BAAsB,QACvC,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,OACLhB,KAAK,MACLmB,MAAOyB,EAAWE,GAAG,CACrB1B,SAAU8C,EACVvJ,UAAW,2BAEVyB,MAAA,CADC4G,EAAOF,GAAG,CAAG,iBAAmB,kBACjC,cAEFE,EAAOF,GAAG,EAAI,GAAA7D,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,gCAAwBqI,EAAOF,GAAG,MAGhE,GAAA7D,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,mBACb,GAAAsE,EAAAxE,GAAA,EAACoG,QAAAA,CAAMlG,UAAU,+BAAsB,cACvC,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,OACLhB,KAAK,SACLmB,MAAOyB,EAAWG,MAAM,CACxB3B,SAAU8C,EACVvJ,UAAW,2BAEVyB,MAAA,CADC4G,EAAOD,MAAM,CAAG,iBAAmB,kBACpC,cAEFC,EAAOD,MAAM,EACZ,GAAA9D,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,gCAAwBqI,EAAOD,MAAM,SAKxD,GAAA9D,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,mBACb,GAAAsE,EAAAxE,GAAA,EAACoG,QAAAA,CAAMlG,UAAU,+BAAsB,UACvC,GAAAsE,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,QACLhB,KAAK,QACLmB,MAAOyB,EAAW3C,KAAK,CACvBmB,SAAU8C,EACVvJ,UAAW,2BAEVyB,MAAA,CADC4G,EAAO/C,KAAK,CAAG,iBAAmB,kBACnC,cAEF+C,EAAO/C,KAAK,EAAI,GAAAhB,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,gCAAwBqI,EAAO/C,KAAK,MAGnEuD,GACC,GAAAvE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,iDACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CACCC,UAAU,8FACV2H,MAAO,CAAEH,MAAO,GAAY/F,MAAA,CAATsH,EAAS,IAAG,MAKrC,GAAAzE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,gEACb,GAAAsE,EAAArE,IAAA,EAAC2C,SAAAA,CACCyD,KAAK,SACL/F,QAASoJ,EACTnI,SAAU,CAACgH,GAAeM,EAC1B7I,UAAW,0EAAsFyB,MAAA,CAAZkH,aAEpFF,EAAW,IAAEI,GAAW,IAAapH,MAAA,CAATsH,EAAS,aAKhD,2DC1NAjF,CAAAA,EAAA,QAtCwB,OAAC,CACvBqH,YAAAA,CAAW,CACXnG,iBAAAA,CAAgB,CAChBoG,QAAAA,CAAO,CAKR,CAAAxL,EACC,MACE,GAAA0E,EAAArE,IAAA,EAACoL,IAAAA,CACChL,KAAK,8IACLL,UAAWgF,EACXzC,aAAW,wDACXS,MAAM,wDACNsI,IAAI,sBACJ3E,OAAO,SACPrG,QAAS,IACPiL,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,CACVC,MAAO,aACPhF,MAAO,kBAA8B/E,MAAA,CAAZ0J,EAC3B,aAGF,GAAA7G,EAAAxE,GAAA,EAAC+C,MAAAA,CACC7C,UAAU,4BACV8C,QAAQ,sBACRC,MAAM,6BACN0I,cAAY,OACZC,UAAU,iBAEV,GAAApH,EAAAxE,GAAA,EAACmD,OAAAA,CAAKC,EAAE,o9BAEV,GAAAoB,EAAAxE,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,gBAAQoL,MAAAA,EAAAA,EAAW,wCAGzC,0GCnCAO,EAAAA,EAAKA,CAACC,QAAQ,CAACC,EAAAA,CAAeA,EAmE9B,IAAAC,EA/DqB,IACnB,GAAM,CAACC,EAAUC,EAAY,CAAGpL,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EAElDG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAMkL,EAAgB1M,aAAa2B,OAAO,CAAC,gBAC3C,GAAI+K,EAAe,CAEjB,IAAMC,EAAcC,KADOC,KAAK,CAACH,GAE9BI,IAAI,CAAC,CAAChB,EAAQiB,IAAWA,EAAEC,UAAU,CAAGlB,EAAEkB,UAAU,EACpD7H,KAAK,CAAC,EAAG,GACZsH,EAAYE,GACZM,QAAQC,GAAG,CAACP,EACd,CACF,EAAG,EAAE,EAELnL,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJgL,EAASlH,MAAM,CAAG,GACpB6H,GAEJ,EAAG,CAACX,EAAS,EAEb,IAAMW,EAAc,KAClB,IAAMC,EAAMC,SAASC,cAAc,CAAC,YACpC,IAAIlB,EAAAA,EAAKA,CAACgB,EAAK,CACbtG,KAAM,MACNyD,KAAMgD,IACNC,QAASC,IACTC,QAAS,CAACpB,EAAAA,CAAeA,CAAC,EAE9B,EAEMiB,EAAa,IAAO,EACxBI,OAAQnB,EAASxH,GAAG,CAAC,GAAS4I,EAAIA,GAAG,EACrCC,SAAU,CACR,CACEtD,KAAMiC,EAASxH,GAAG,CAAC,GAAS4I,EAAIZ,UAAU,CAACc,OAAO,CAAC,IACnDC,gBAAiB,CAAC,0BAA2B,0BAA0B,CACvEC,YAAa,CAAC,wBAAyB,wBAAwB,CAC/DC,YAAa,CACf,EACD,CACH,EAEMR,EAAoB,IAAO,EAC/BS,WAAY,GACZC,oBAAqB,GACrBC,OAAQ,CACNC,EAAG,CAAEC,YAAa,GAAMC,KAAM,CAAEC,QAAS,EAAM,CAAE,EACjDxG,EAAG,CAAEsG,YAAa,GAAMG,IAAK,IAAKF,KAAM,CAAEC,QAAS,EAAK,CAAE,CAC5D,EACAd,QAAS,CACPgB,OAAQ,CAAEF,QAAS,EAAM,EACzBG,QAAS,CAAEC,QAAS,EAAK,CAC3B,CACF,GAEA,MACE,GAAAtO,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,mDACb,GAAAH,EAAAC,GAAA,EAACsO,SAAAA,CAAO9H,GAAG,WAAWqB,MAAO,CAAEH,MAAO,OAAQC,OAAQ,MAAO,KAGnE,YCiBA4G,EArFsB,SAiDXC,EAIAA,EApDT,GAAM,CAACA,EAAWC,EAAa,CAAG3N,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EAC9C,CAAC4N,EAAWC,EAAa,CAAG7N,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,YAE1DG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KA0BR2N,CAzBuB,UACrB,IAAM/E,EAAYpK,aAAa2B,OAAO,CAAC,mBACvC,GAAKyI,EAEL,GAAI,CACF,IAAMe,EAAW,MAAMhF,MAAM,8BAA+B,CAC1DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,UACb,EACF,GAEMC,EAAO,MAAMY,EAASX,IAAI,GAC1B4E,EAAe7E,EAAKO,OAAO,CAC9BgC,IAAI,CAAC,CAAChB,EAAQiB,IAAWA,EAAE9F,KAAK,CAAG6E,EAAE7E,KAAK,EAC1C9B,KAAK,CAAC,EAAG,GACZ6J,EAAaI,GACbF,EAAa3E,EAAK0E,SAAS,CAC7B,CAAE,MAAOxI,EAAO,CAAC,CACnB,IAGF,EAAG,EAAE,EAcH,GAAAnG,EAAAI,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,4DACjB,GAAAH,EAAAI,IAAA,EAACE,IAAAA,CAAEH,UAAU,kDAAwC,sCACxB,IAC3B,GAAAH,EAAAC,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,qBACbsO,CAAAA,OAAAA,CAAAA,EAAAA,CAAS,CAAC,EAAE,GAAZA,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAcM,KAAK,GAAI,2BAClB,IAAI,uBACM,IAClB,GAAA/O,EAAAC,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,qBACbsO,CAAAA,OAAAA,CAAAA,EAAAA,CAAS,CAAC,EAAE,GAAZA,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAcM,KAAK,GAAI,uCACnB,2GAIT,GAAA/O,EAAAC,GAAA,EAACK,IAAAA,CACCH,UAAU,iDACV6O,kBAAgB,oBAChBC,qBAAmB,eA3BvB,OAAIN,EAA2B,GAC3BA,EAAY,IACP,kIACEA,EAAY,GACd,0HAEA,uFAyBP,GAAA3O,EAAAC,GAAA,EAACiP,EAAAA,CAAOA,CAAAA,CAACzI,GAAG,6BACV,GAAAzG,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,wBACb,GAAAH,EAAAC,GAAA,EAACK,IAAAA,UAAE,0DACH,GAAAN,EAAAC,GAAA,EAACK,IAAAA,UAAE,2DACH,GAAAN,EAAAC,GAAA,EAACK,IAAAA,UAAE,+DAGP,GAAAN,EAAAC,GAAA,EAACK,IAAAA,CAAEH,UAAU,gDAAuC,oKAW1D,mDCkGAgP,EA1KmB,KACjB,GAAM,CAACC,EAASC,EAAW,CAAGtO,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAChD,CAACuO,EAAcC,EAAgB,CAAGxO,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EACpD,CAACmI,EAAUC,EAAY,CAAGpI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACnC,CAACyO,EAAcC,EAAgB,CAAG1O,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC3C,CAAC2O,EAAQC,EAAU,CAAG5O,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAC9CiH,EAASC,CAAAA,EAAAA,EAAAA,SAAAA,UAEf/G,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KA+CR0O,CA9Ca,UACX,IAAMxD,EAAgB1M,aAAa2B,OAAO,CAAC,gBACvC+K,GAKFiD,EAAWQ,KAJgBtD,KAAK,CAACH,GACD0D,MAAM,CAAC,CAACC,EAAWC,IACjDD,EAAKrD,UAAU,CAAGsD,EAAQtD,UAAU,CAAGqD,EAAOC,GAE3B1C,GAAG,EAI1BiC,EAAgBU,CADGC,EAAAA,EAAAA,EAAAA,KACW,EAAE,EAEhC,IAAMpG,EAAYpK,aAAa2B,OAAO,CAAC,mBACvC,GAAI,CAACyI,EAAW,CACdqG,MAAM,sBACN,MACF,CAEA,IAAMpG,EAAe,MAAMlE,MAAM,8BAA+B,CAC9DC,OAAQ,OACRC,QAAS,CAAE,eAAgB,kBAAmB,EAC9CC,KAAMC,KAAKC,SAAS,CAAC,CAAEO,GAAIqD,EAAWE,UAAW,UAAW,EAC9D,GAEM,CAAEQ,QAAAA,CAAO,CAAE,CAAG,MAAMT,EAAaG,IAAI,GACrCE,EAAc,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,IACpBC,EAAc,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAAiBC,GACrCC,EAAiB,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAA6BJ,GAIpD8F,EAAU,MAAMzF,CAAAA,EAAAA,EAAAA,CAAAA,EAFP,cAIb,WACAP,EACAE,EACAG,EACA,GAActB,EAAYkH,IAI5BV,EADYW,OAAOC,GAAG,CAACC,eAAe,CAACJ,IAEvCX,EAAgB,GAClB,IAGF,EAAG,EAAE,EAmBH,GAAAzP,EAAAI,IAAA,EAACmH,UAAAA,CACCpH,UAAU,uDACVuC,aAAW,yBAEX,GAAA1C,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,0DACf,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,wMACf,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,yFACb,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,gFACb,GAAAH,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,mIACb,GAAAH,EAAAI,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,gCACjB,GAAAH,EAAAC,GAAA,EAACwQ,KAAAA,CAAGtQ,UAAU,yCAAgC,YAC9C,GAAAH,EAAAC,GAAA,EAACwQ,KAAAA,CAAGtQ,UAAU,0BAAiB,uGAI9BiP,GACC,GAAApP,EAAAC,GAAA,EAACI,KAAAA,CAAGF,UAAU,sFACXiP,EAAQsB,WAAW,QAK1B,GAAA1Q,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAH,EAAAC,GAAA,EAAC0Q,KAAAA,CAAGxQ,UAAU,qDAA4C,oDAG1D,GAAAH,EAAAC,GAAA,EAACqD,KAAAA,CAAGnD,UAAU,qCACXmP,EAAatK,MAAM,CAAG,EACrBsK,EAAa5K,GAAG,CAAC,CAAC4I,EAAK1I,IACrB,GAAA5E,EAAAI,IAAA,EAACoD,KAAAA,CAAerD,UAAU,wBACvBmN,EAAIA,GAAG,CAAC,KAAGA,EAAIZ,UAAU,CAACc,OAAO,CAAC,GAAG,OAD/B5I,IAKX,GAAA5E,EAAAC,GAAA,EAACuD,KAAAA,UAAG,yCAIR,GAAAxD,EAAAC,GAAA,EAAC8C,SAAAA,CACCtC,QA5Cc,KAC1BuH,EAAOkD,IAAI,CAAC,0BACd,EA2Cc/K,UAAU,wFACX,kDAKH,GAAAH,EAAAC,GAAA,EAAC2Q,EAAaA,CAAAA,MAGhB,GAAA5Q,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sGACb,GAAAH,EAAAC,GAAA,EAAC4Q,EAAYA,CAAAA,QAIjB,GAAA7Q,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAH,EAAAC,GAAA,EAACK,IAAAA,CAAEH,UAAU,kDAAyC,sDAGrDqP,GACC,GAAAxP,EAAAC,GAAA,EAACC,MAAAA,CAAIC,UAAU,sDACb,GAAAH,EAAAC,GAAA,EAACC,MAAAA,CACCC,UAAU,8FACV2H,MAAO,CAAEH,MAAO,GAAY/F,MAAA,CAATsH,EAAS,IAAG,SAMvC,GAAAlJ,EAAAI,IAAA,EAACF,MAAAA,CAAIC,UAAU,wDACb,GAAAH,EAAAC,GAAA,EAAC8C,SAAAA,CACCtC,QAvFa,KACrB,GAAI,CAACiP,EAAQ,OAEb,IAAMoB,EAAO/D,SAASgE,aAAa,CAAC,IACpCD,CAAAA,EAAKtQ,IAAI,CAAGkP,EACZoB,EAAKE,QAAQ,CAAG,cAChBjE,SAAS/G,IAAI,CAACiL,WAAW,CAACH,GAC1BA,EAAKI,KAAK,GACVJ,EAAKK,MAAM,GACXb,OAAOC,GAAG,CAACa,eAAe,CAAC1B,EAC7B,EA8EUhO,SAAU8N,GAAgB,CAACE,EAC3BvP,UAAW,2DAIVyB,MAAA,CAHC4N,EACI,4CACA,qDAGLA,EACG,mCAAsC5N,MAAA,CAATsH,EAAS,MACtC,+CAGN,GAAAlJ,EAAAC,GAAA,EAACM,EAAAA,OAAIA,CAAAA,CACHC,KAAK,cACLL,UAAU,4GACX,oCAOX,6ECpDA8D,CAAAA,EAAA,QAzH0B,KACxB,GAAM,CAACoN,EAAYC,EAAc,CAAGvQ,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EAChD,CAACwQ,EAAiBC,EAAmB,CAAGzQ,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EAEhEG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAMkL,EAAgB1M,aAAa2B,OAAO,CAAC,gBACvC+K,GAQFkF,EAHsBG,KAJKlF,KAAK,CAACH,GACK5H,MAAM,CAC1C,GAAiBkN,EAAOhF,UAAU,CAAG,IAEDF,IAAI,CACxC,CAAChB,EAAQiB,IAAWA,EAAEC,UAAU,CAAGlB,EAAEkB,UAAU,GAInD,IAAMiF,EAAmBzB,CAAAA,EAAAA,EAAAA,EAAAA,IACrByB,GACFH,EAAmBG,EAEvB,EAAG,EAAE,EAEL,IAAMC,EAAa,GACjB,EAAKF,KAAWA,EAAOpE,GAAG,IAAKoE,EAAOhF,UAAU,EAIzC6E,EAAgBM,IAAI,CACzB,GACEC,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAGxE,GAAG,GACNoE,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAQpE,GAAG,GACXwE,EAAExE,GAAG,GAAKoE,EAAOpE,GAAG,EACpBwE,EAAEpF,UAAU,GAAKgF,EAAOhF,UAAU,EAIlCqF,EAAkB,QAKlBC,EAJJ,GAAI,GAAYN,EAAOpE,GAAG,EAK1B,GAAIsE,EAAWF,GACbM,EAAoBT,EAAgB/M,MAAM,CACxC,GAAOsN,EAAExE,GAAG,EAAIwE,EAAExE,GAAG,GAAKoE,EAAOpE,GAAG,OAEjC,IAAIiE,CAAAA,EAAgBvM,MAAM,CAAG,GAGlC,OAFAgN,EAAoB,IAAIT,EAAiBG,EAAO,CAKlDF,EAAmBQ,GACnBC,CAAAA,EAAAA,EAAAA,EAAAA,EAAqBD,GACvB,EAEME,EAAoB,GACxB,EAAgB,IACP,eACEvD,EAAY,GACd,eAEA,IAIX,MACE,GAAAlK,EAAArE,IAAA,EAACmH,UAAAA,CACCpH,UAAU,6GACVsG,GAAG,mBAEH,GAAAhC,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iEACb,GAAAsE,EAAAxE,GAAA,EAACI,KAAAA,CAAGF,UAAU,uFAA8E,kDAG5F,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,qFAA4E,2JAM3F,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,0DACZkR,EAAW3M,GAAG,CAAC,CAACgN,EAAQ9M,KACvB,IAAM0I,EAAM6E,EAASC,IAAI,CAAC,GAAS9E,EAAInK,KAAK,GAAKuO,EAAOpE,GAAG,EACrD+E,EAAW/E,MAAAA,EAAAA,KAAAA,EAAAA,CAAK,CAAC,aAAa,CAC9BgF,EACJD,GAAYE,CAAO,CAACF,EAAiC,CACjDE,CAAO,CAACF,EAAiC,CACzCE,EAAAA,MAAc,CAEpB,MACE,GAAA9N,EAAAxE,GAAA,EAACC,MAAAA,CAECC,UAAU,4EACVM,QAAS,IAAMsR,EAAgBL,YAE/B,GAAAjN,EAAArE,IAAA,EAACF,MAAAA,CACCC,UAAW,gEAEVyB,MAAA,CADCgQ,EAAWF,GAAU,iBAAmB,4BAG1C,GAAAjN,EAAAxE,GAAA,EAACqS,EAAAA,CACCnS,UAAU,0CACVQ,KAAM,KAER,GAAA8D,EAAArE,IAAA,EAACE,IAAAA,CAAEH,UAAU,kCAAwB,IACjCyE,EAAQ,EAAE,IAAE8M,EAAOpE,GAAG,IAE1B,GAAA7I,EAAArE,IAAA,EAAC6E,OAAAA,WACEyM,EAAOhF,UAAU,CAACc,OAAO,CAAC,GAAG,IAAE,IAC/B0E,EAAkBR,EAAO/C,SAAS,SAlBlC/J,EAuBX,OAIR,yDC3DAX,CAAAA,EAAA,QA/DwB,IACtB,GAAM,CAACuO,EAAYC,EAAc,CAAG1R,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACvC2R,EAAeC,CAAAA,EAAAA,EAAAA,eAAAA,IAUrB,MARAzR,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAGU,SAFAwR,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAAcE,GAAG,CAAC,eAGlCH,EAAc,GAElB,EAAG,CAACC,EAAa,EAGf,GAAAjO,EAAArE,IAAA,EAACF,MAAAA,CACCC,UAAW,2BAEVyB,MAAA,CADC4Q,EAAa,gBAAkB,UAEjCK,kBAAgB,cAChBC,aAAW,iBAEX,GAAArO,EAAAxE,GAAA,EAACC,MAAAA,CACCC,UAAU,6DACVyL,cAAY,SAGd,GAAAnH,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,uDACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,2FACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,oIACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,kCACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,0DACb,GAAAsE,EAAAxE,GAAA,EAACwQ,KAAAA,CACCtQ,UAAU,kDACVsG,GAAG,uBACJ,uCAGD,GAAAhC,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,gBACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,iCAAwB,+KAS7C,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,oEACb,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCyD,KAAK,SACLrG,UAAU,6IACVM,QAAS,IAAMgS,EAAc,aAC9B,sBASf,gIC5CA3G,EAAAA,EAAKA,CAACC,QAAQ,CACZgH,EAAAA,EAAiBA,CACjBC,EAAAA,EAAYA,CACZC,EAAAA,EAAWA,CACXC,EAAAA,EAAMA,CACNhE,EAAAA,CAAOA,CACPiE,EAAAA,EAAMA,CACNC,EAAAA,EAAcA,EAgVhBnP,EAAA,QA1TuB,KACrB,GAAM,CAACoP,EAAWC,EAAa,CAAGvS,CAAAA,EAAAA,EAAAA,QAAAA,EAAqB,EAAE,EACnD,CAACwS,EAAMC,EAAQ,CAAGzS,CAAAA,EAAAA,EAAAA,QAAAA,EAAoB,EAAE,EACxC,CAAC0S,EAAaC,EAAe,CAAG3S,CAAAA,EAAAA,EAAAA,QAAAA,EAAiB,IACjD4S,EAAWC,CAAAA,EAAAA,EAAAA,MAAAA,EAAY,MACvB,CAAClH,EAAYmH,EAAc,CAAG9S,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACvC,CAAC4N,EAAWC,EAAa,CAAG7N,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACrC,CAAC+S,EAAgBC,EAAkB,CAAGhT,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAC/C,CAACiT,EAAQC,EAAU,CAAGlT,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAErCG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAyBRgT,CAxB4B,UAC1BD,EAAU,IACV,IAAME,EAAezU,aAAa2B,OAAO,CAAC,gBAC1C,GAAI,CAAC8S,EAAc,OAEnB,IAAMtJ,EAAW,MAAMhF,MAAM,sCAAuC,CAClEC,OAAQ,OACRC,QAAS,CAAE,eAAgB,kBAAmB,EAC9CC,KAAMC,KAAKC,SAAS,CAAC,CAAEiO,aAAAA,CAAa,EACtC,GAGMC,EAAanK,CADK,MAAMY,EAASX,IAAI,IAExC1F,MAAM,CAAC,GAAS8I,EAAIZ,UAAU,CAAG,IACjCF,IAAI,CAAC,CAAChB,EAAGiB,IAAMA,EAAEC,UAAU,CAAGlB,EAAEkB,UAAU,EAC7C8G,EAAQY,GAER,IAAMC,EAAYC,CAAAA,EAAAA,EAAAA,EAAAA,IACZC,EAAaF,MAAAA,EAAAA,EAAaD,CAAU,CAAC,EAAE,CAAC9G,GAAG,CACjDoG,EAAea,GACfC,EAAWJ,EAAWhC,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKiH,IAChDN,EAAU,GACZ,IAGF,EAAG,EAAE,EAEL,IAAMO,EAAa,IACjB,GAAI,CAAClH,EAAK,OAEV,IAAMmH,EAAgBnH,EAAIoH,SAAS,CAAChQ,GAAG,CAAC,GAAQ,EAC9CiQ,QAASC,EAAE7F,KAAK,CAChB8F,OAAQD,EAAEE,SAAS,CACnBC,QAASH,EAAEI,UAAU,CACrBC,OAAQL,EAAEM,SAAS,CACrB,GAEA5B,EAAamB,GACbU,CAAAA,EAAAA,EAAAA,EAAAA,EAAmBV,GACnBW,CAAAA,EAAAA,EAAAA,CAAAA,EAA0B9H,EAAIA,GAAG,CACnC,EAEApM,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAImS,EAAUrO,MAAM,CAAG,EAAG,CACxB,IAAMqQ,EAAmBhC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKP,OAAO,EAAEjQ,IAAI,CAAC,IAC9DyQ,EAAkBlC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKL,MAAM,EAAEnQ,IAAI,CAAC,IAC5D0Q,EAAkBnC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKT,MAAM,EAAE/P,IAAI,CAAC,IAC5D2Q,EAAcC,CAAAA,EAAAA,EAAAA,CAAAA,EAAaF,GAC3BG,EAAgBC,CAAAA,EAAAA,EAAAA,CAAAA,EACpBJ,EACAC,EACAJ,GAEIQ,EAAeC,CAAAA,EAAAA,EAAAA,EAAAA,EAAaT,EAAkBG,GAC9CO,EAAWC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmBT,EAAiBF,GAErDxB,EAAc8B,GACd/G,EAAaiH,GACb9B,EAAkBgC,EACpB,CACF,EAAG,CAAC1C,EAAU,EA+Bd,IAAMhG,EAASgG,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKX,OAAO,EAC7CsB,EAAe5C,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKL,MAAM,EAClDiB,EAAgB7C,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKP,OAAO,EACpDoB,EAAe9C,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKT,MAAM,EAElDuB,EAAkB,GACtB,EAAW,GACF,CAAE/P,MAAO,UAAWgQ,QAAS,IAAKC,MAAO,cAAe,EAC7DC,EAAO,GACF,CAAElQ,MAAO,UAAWgQ,QAAS,GAAIC,MAAO,eAAgB,EAC7DC,EAAO,GACF,CAAElQ,MAAO,UAAWgQ,QAAS,GAAIC,MAAO,eAAgB,EAC1D,CAAEjQ,MAAO,SAAUgQ,QAAS,GAAIC,MAAO,YAAa,EAGvDE,EAAoB,GACxB,EAAU,GAAW,sBACjBC,EAAM,IAAY,qBACf,sBASHvH,EAAU,OAAC,CAAExJ,QAAAA,CAAO,CAAuB,CAAA3F,QAC/C,GAAA0E,EAAArE,IAAA,EAAC6E,OAAAA,CAAK9E,UAAU,6DACd,GAAAsE,EAAAxE,GAAA,EAACyW,EAAAA,CAAIA,CAAAA,CAACvW,UAAU,mBAChB,GAAAsE,EAAAxE,GAAA,EAACgF,OAAAA,CAAK9E,UAAU,uKACbuF,QAKP,MACE,GAAAjB,EAAAxE,GAAA,EAAC0W,OAAAA,CAAKxW,UAAU,gGACb6T,EACC,GAAAvP,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,4FACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,uCAA8B,oBAG/C,GAAAsE,EAAArE,IAAA,EAAAqE,EAAAlB,QAAA,YACE,GAAAkB,EAAAxE,GAAA,EAACsH,UAAAA,CAAQpH,UAAU,wDACjB,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,sBACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,kCAAyB,2BACvC,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,wBAAe,sGAI5B,GAAAsE,EAAArE,IAAA,EAACkD,KAAAA,CAAGnD,UAAU,+CACZ,GAAAsE,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,gCAAiC,2EAG3C,GAAApS,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,uBAA2B,4FAGrC,GAAApS,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,+BAAmC,kHAMjD,GAAApS,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,6BAAoB,uBAClC,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,qCACb,GAAAsE,EAAArE,IAAA,EAACE,IAAAA,WACC,GAAAmE,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,iBACPpD,KAEH,GAAAhP,EAAArE,IAAA,EAACE,IAAAA,CACCH,UAAW,mCAETyB,MAAA,CAxDlB,GAAa,GAAW,iBACpB+E,GAAS,GAAW,kBACjB,0BAwDS,GAAAlC,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,qBAAsB,IAAEnK,EAAWc,OAAO,CAAC,GAAG,IACtD,GAAA/I,EAAAxE,GAAA,EAACiP,EAAAA,CACCxJ,QAAS,kCAGPgH,MAAAA,CAHmCA,EAAWc,OAAO,CACrD,GACA,mCAMD5L,MAAA,CALC8K,GAAc,GACV,sCACAA,GAAc,GACd,kFACA,mDAIV,GAAAjI,EAAArE,IAAA,EAACE,IAAAA,CAAEH,UAAU,8BACX,GAAAsE,EAAArE,IAAA,EAACyW,SAAAA,WAAO,UAAQL,EAAkB7H,MAClC,GAAAlK,EAAAxE,GAAA,EAACiP,EAAAA,CACCxJ,QAAS,kBAGPiJ,MAAAA,CAHyB6H,EACzB7H,GACA,sDAMD/M,MAAA,CALC+M,EAAY,GACR,2GACAA,EAAY,IACZ,8HACA,6DAMd,GAAAlK,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,6BAAoB,8CAGlC,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,sCAA6B,wGAI1C,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,iCACViW,EAAgBtC,GAAgBzN,KAAK,GAOxC,GAAA5B,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,oEACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CACCC,UAAW,OAA6CyB,MAAA,CAAtCwU,EAAgBtC,GAAgBwC,KAAK,EACvDxO,MAAO,CAAEH,MAAO,GAAwB/F,MAAA,CAArB,IAAMkS,EAAe,IAAG,iBAOvD,GAAArP,EAAArE,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,uDACjB,GAAAsE,EAAAxE,GAAA,EAAC6W,SAAAA,CACC3W,UAAU,yCACVwG,MAAO8M,EACP7M,SAzKY,IACtB,IAAMmQ,EAASlQ,EAAEC,MAAM,CAACH,KAAK,CAC7B+M,EAAeqD,GACfvC,EAAWjB,EAAKnB,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKyJ,GAC5C,WAuKaxD,EAAK7O,GAAG,CAAC,GACR,GAAAD,EAAArE,IAAA,EAAC4W,SAAAA,CAAqBrQ,MAAO2G,EAAIA,GAAG,WACjCA,EAAIA,GAAG,CAAC,KAAGA,EAAIZ,UAAU,CAACc,OAAO,CAAC,GAAG,OAD3BF,EAAIA,GAAG,KAKxB,GAAA7I,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,+BACb,GAAAsE,EAAAxE,GAAA,EAACgX,EAAAA,EAAKA,CAAAA,CACJC,IAAKvD,EACL1J,KAAM,CACJoD,OAAAA,EACAE,SAAU,CACR,CACElH,MAAO,uBACP4D,KAAMiM,EACNzI,gBAAiB,uBACjBC,YAAa,qBACbyJ,qBAAsB,qBACtBxJ,YAAa,EACbyJ,YAAa,CACf,EACA,CACE/Q,MAAO,SACP4D,KAAMgM,EACNxI,gBAAiB,0BACjBC,YAAa,qBACbyJ,qBAAsB,qBACtBxJ,YAAa,EACbyJ,YAAa,CACf,EACA,CACE/Q,MAAOoN,EACPxJ,KAAMkM,EACN1I,gBAAiB,0BACjBC,YAAa,mBACbyJ,qBAAsB,mBACtBxJ,YAAa,EACbyJ,YAAa,CACf,EACD,EAEHlK,QAAS,CACPU,WAAY,GACZC,oBAAqB,GACrBC,OAAQ,CACNgE,EAAG,CACD9D,YAAa,GACbG,IAAK,EACLkJ,MAAO,CAAEC,SAAU,CAAE,CACvB,CACF,EACAlK,QAAS,CACPmK,SAAU,CAAEC,MAAO,EAAGC,OApNrB,CACjBC,EACAC,EACA/S,EACA+B,KAEA,GAAIgR,IAAAA,GAAsBhR,OAAAA,EAAgB,OAE1C,IAAIiR,EAAWC,KAAK1J,GAAG,CAAC,EAAG0J,KAAKC,GAAG,CAAC,EAAGD,KAAKL,KAAK,CAAC7Q,KAElD2M,EAAa,IACX,IAAMyE,EAAU,IAAIC,EAAS,CAG7B,OAFAD,CAAO,CAACnT,EAAM,CAACmQ,OAAO,CAAG6C,EACzBzC,CAAAA,EAAAA,EAAAA,EAAAA,EAAmB4C,GACZA,CACT,EACF,CAoM2D,CAC3C,CACF,MAGJ,GAAAtT,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QA/NQ,KAElB+T,EADgBjB,EAAKnB,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKmG,GAEjD,EA6NYtT,UAAU,yEACX,4BAQb,0GCvQA8D,CAAAA,EAAA,QAvF0B,IACxB,IAAM+D,EAASC,CAAAA,EAAAA,EAAAA,SAAAA,IACT,CAACW,EAAYC,EAAc,CAAG9H,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,uCACvC,CAAC+H,EAAaC,EAAe,CAAGhI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,YACzC,CAACW,EAAUuW,EAAY,CAAGlX,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACnC,CAACmI,EAAUC,EAAY,CAAGpI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAEnCmX,EAAc,KAClBrP,EAAc,uCACdE,EAAe,YACfkP,EAAY,IACZ9O,EAAY,EACd,EAEMU,EAAgB,UACpBoO,EAAY,IACZlP,EAAe,YACfF,EAAc,eACdM,EAAY,IAEZ,GAAI,CACF,IAAMsK,EAAc,MAAMa,CAAAA,EAAAA,EAAAA,EAAAA,IACpBf,EACJ,MAAM4E,CAAAA,EAAAA,EAAAA,EAAAA,IACRhP,EAAY,IAEZ,IAAIwM,EAAgB,EAChBE,EAAe,EACfE,EAAW,EAEf,GAAIxC,EAAKvO,MAAM,CAAG,EAAG,CACnB,IAAMqQ,EAAmB9B,EAAK7O,GAAG,CAAC,GAAU4Q,EAAKP,OAAO,EAAEjQ,IAAI,CAAC,IACzDyQ,EAAkBhC,EAAK7O,GAAG,CAAC,GAAU4Q,EAAKL,MAAM,EAAEnQ,IAAI,CAAC,IACvD0Q,EAAkBjC,EAAK7O,GAAG,CAAC,GAAU4Q,EAAKT,MAAM,EAAE/P,IAAI,CAAC,IACvD2Q,EAAcC,CAAAA,EAAAA,EAAAA,CAAAA,EAAaF,GACjCG,EAAgBC,CAAAA,EAAAA,EAAAA,CAAAA,EACdJ,EACAC,EACAJ,GAEFQ,EAAeC,CAAAA,EAAAA,EAAAA,EAAAA,EAAaT,EAAkBG,GAC9CO,EAAWC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmBT,EAAiBF,EACjD,CAEAxM,EAAc,6BACd,MAAMuP,CAAAA,EAAAA,EAAAA,CAAAA,EACJ3E,EACAF,EACAwC,EACAF,EACAF,EACA,GAA2BxM,EAAYyB,IAGzCzB,EAAY,KACZN,EAAc,6BACdE,EAAe,gBAEfkC,WAAW,KACTjD,EAAOkD,IAAI,CAAC,6BACZgN,GACF,EAAG,IACL,CAAE,MAAO/R,EAAO,CACdwG,QAAQxG,KAAK,CAAC,+BAA0BA,GACxC0C,EAAc,yBACdE,EAAe,cAEfkC,WAAW,KACTiN,GACF,EAAG,IACL,CACF,EAEA,MACE,GAAAzT,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,yDACb,GAAAsE,EAAArE,IAAA,EAAC2C,SAAAA,CACCtC,QAASoJ,EACTnI,SAAUA,EACVvB,UAAW,mGAA+GyB,MAAA,CAAZkH,aAE7GF,EACAM,EAAW,GAAKA,EAAW,KAAO,KAActH,MAAA,CAATsH,EAAS,UAIzD,uFC0KAjF,CAAAA,EAAA,QA9OyB,KACvB,GAAM,CAACoP,EAAWC,EAAa,CAAGvS,CAAAA,EAAAA,EAAAA,QAAAA,EAAqB,EAAE,EACnD,CAACwS,EAAMC,EAAQ,CAAGzS,CAAAA,EAAAA,EAAAA,QAAAA,EAAoB,EAAE,EACxC,CAAC0S,EAAaC,EAAe,CAAG3S,CAAAA,EAAAA,EAAAA,QAAAA,EAAiB,IACjD,CAAC2L,EAAYmH,EAAc,CAAG9S,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACvC,CAAC4N,EAAWC,EAAa,CAAG7N,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACrC,CAAC+S,EAAgBC,EAAkB,CAAGhT,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GAC/C,CAACiT,EAAQC,EAAU,CAAGlT,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAErCG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAyBRgT,CAxB4B,UAC1BD,EAAU,IACV,IAAME,EAAezU,aAAa2B,OAAO,CAAC,gBAC1C,GAAI,CAAC8S,EAAc,OAEnB,IAAMtJ,EAAW,MAAMhF,MAAM,sCAAuC,CAClEC,OAAQ,OACRC,QAAS,CAAE,eAAgB,kBAAmB,EAC9CC,KAAMC,KAAKC,SAAS,CAAC,CAAEiO,aAAAA,CAAa,EACtC,GAGMC,EAAanK,CADK,MAAMY,EAASX,IAAI,IAExC1F,MAAM,CAAC,GAAS8I,EAAIZ,UAAU,CAAG,IACjCF,IAAI,CAAC,CAAChB,EAAGiB,IAAMA,EAAEC,UAAU,CAAGlB,EAAEkB,UAAU,EAC7C8G,EAAQY,GAER,IAAMC,EAAYC,CAAAA,EAAAA,EAAAA,EAAAA,IACZC,EAAaF,MAAAA,EAAAA,EAAaD,CAAU,CAAC,EAAE,CAAC9G,GAAG,CACjDoG,EAAea,GACfC,EAAWJ,EAAWhC,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKiH,IAChDN,EAAU,GACZ,IAGF,EAAG,EAAE,EAEL,IAAMO,EAAa,IACjB,GAAI,CAAClH,EAAK,OAEV,IAAMmH,EAAgBnH,EAAIoH,SAAS,CAAChQ,GAAG,CAAC,GAAQ,EAC9CiQ,QAASC,EAAE7F,KAAK,CAChB8F,OAAQD,EAAEE,SAAS,CACnBC,QAASH,EAAEI,UAAU,CACrBC,OAAQL,EAAEM,SAAS,CACrB,GAEA5B,EAAamB,GACbU,CAAAA,EAAAA,EAAAA,EAAAA,EAAmBV,GACnBW,CAAAA,EAAAA,EAAAA,CAAAA,EAA0B9H,EAAIA,GAAG,CACnC,EAEApM,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,GAAImS,EAAUrO,MAAM,CAAG,EAAG,CACxB,IAAMqQ,EAAmBhC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKP,OAAO,EAAEjQ,IAAI,CAAC,IAC9DyQ,EAAkBlC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKL,MAAM,EAAEnQ,IAAI,CAAC,IAC5D0Q,EAAkBnC,EAAU3O,GAAG,CAAC,GAAU4Q,EAAKT,MAAM,EAAE/P,IAAI,CAAC,IAC5D2Q,EAAcC,CAAAA,EAAAA,EAAAA,CAAAA,EAAaF,GAC3BG,EAAgBC,CAAAA,EAAAA,EAAAA,CAAAA,EACpBJ,EACAC,EACAJ,GAEIQ,EAAeC,CAAAA,EAAAA,EAAAA,EAAAA,EAAaT,EAAkBG,GAC9CO,EAAWC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmBT,EAAiBF,GAErDxB,EAAc8B,GACd/G,EAAaiH,GACb9B,EAAkBgC,EACpB,CACF,EAAG,CAAC1C,EAAU,EAad,IAAM+C,EAAkB,GACtB,EAAW,GACF,CAAE/P,MAAO,UAAWgQ,QAAS,IAAKC,MAAO,cAAe,EAC7DC,EAAO,GACF,CAAElQ,MAAO,UAAWgQ,QAAS,GAAIC,MAAO,eAAgB,EAC7DC,EAAO,GACF,CAAElQ,MAAO,UAAWgQ,QAAS,GAAIC,MAAO,eAAgB,EAC1D,CAAEjQ,MAAO,SAAUgQ,QAAS,GAAIC,MAAO,YAAa,EAe7D,MACE,GAAA7R,EAAAxE,GAAA,EAAC0W,OAAAA,CAAKxW,UAAU,yFACb6T,EACC,GAAAvP,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,4FACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,uCAA8B,oBAG/C,GAAAsE,EAAArE,IAAA,EAAAqE,EAAAlB,QAAA,YACE,GAAAkB,EAAAxE,GAAA,EAACsH,UAAAA,CAAQpH,UAAU,wDACjB,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,sBACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,kCAAyB,2BACvC,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,wBAAe,sGAI5B,GAAAsE,EAAArE,IAAA,EAACkD,KAAAA,CAAGnD,UAAU,+CACZ,GAAAsE,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,gCAAiC,2EAG3C,GAAApS,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,uBAA2B,4FAGrC,GAAApS,EAAArE,IAAA,EAACoD,KAAAA,WACC,GAAAiB,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,+BAAmC,kHAMjD,GAAApS,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,6BAAoB,uBAClC,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,qCACb,GAAAsE,EAAArE,IAAA,EAACE,IAAAA,WACC,GAAAmE,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,iBACPpD,KAEH,GAAAhP,EAAArE,IAAA,EAACE,IAAAA,CACCH,UAAW,mCAETyB,MAAA,CA/ClB,GAAa,GAAW,iBACpB+E,GAAS,GAAW,kBACjB,0BA+CS,GAAAlC,EAAAxE,GAAA,EAAC4W,SAAAA,UAAO,qBAAsB,IAAEnK,EAAWc,OAAO,CAAC,GAAG,OAExD,GAAA/I,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,6BACX,GAAAsE,EAAArE,IAAA,EAACyW,SAAAA,WAAO,UA1DxB,EAAU,GAAW,sBACjBJ,EAAM,IAAY,qBACf,iCA4DG,GAAAhS,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,6BAAoB,8CAGlC,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,sCAA6B,wGAI1C,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,iCACViW,EAAgBtC,GAAgBzN,KAAK,GAExC,GAAA5B,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,oEACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CACCC,UAAW,OAA6CyB,MAAA,CAAtCwU,EAAgBtC,GAAgBwC,KAAK,EACvDxO,MAAO,CAAEH,MAAO,GAAwB/F,MAAA,CAArB,IAAMkS,EAAe,IAAG,iBAOvD,GAAArP,EAAArE,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,uDACjB,GAAAsE,EAAAxE,GAAA,EAAC6W,SAAAA,CACC3W,UAAU,yCACVwG,MAAO8M,EACP7M,SA9GY,IACtB,IAAMmQ,EAASlQ,EAAEC,MAAM,CAACH,KAAK,CAC7B+M,EAAeqD,GACfvC,EAAWjB,EAAKnB,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKyJ,GAC5C,WA4GaxD,EAAK7O,GAAG,CAAC,GACR,GAAAD,EAAArE,IAAA,EAAC4W,SAAAA,CAAqBrQ,MAAO2G,EAAIA,GAAG,WACjCA,EAAIA,GAAG,CAAC,KAAGA,EAAIZ,UAAU,CAACc,OAAO,CAAC,GAAG,OAD3BF,EAAIA,GAAG,KAKxB,GAAA7I,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,sCACZkT,EAAU3O,GAAG,CAAC,CAAC4Q,EAAM1Q,IACpB,GAAAH,EAAArE,IAAA,EAACF,MAAAA,CAECC,UAAU,mEAEV,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,iCAAyBmV,EAAKX,OAAO,GAClD,GAAAlQ,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,uDACb,GAAAsE,EAAArE,IAAA,EAAC6E,OAAAA,WAAK,aAAWqQ,EAAKP,OAAO,IAC7B,GAAAtQ,EAAArE,IAAA,EAAC6E,OAAAA,WAAK,YAAUqQ,EAAKL,MAAM,IAC3B,GAAAxQ,EAAArE,IAAA,EAAC6E,OAAAA,WAAK,eAAUqQ,EAAKT,MAAM,OAE7B,GAAApQ,EAAAxE,GAAA,EAACsG,QAAAA,CACCC,KAAK,QACLsR,IAAI,IACJ3J,IAAI,IACJkK,KAAK,IACL1R,MAAO2O,EAAKP,OAAO,CACnBnO,SAAU,IACR,IAAMgR,EAAWC,KAAK1J,GAAG,CACvB,EACA0J,KAAKC,GAAG,CAAC,EAAGD,KAAKL,KAAK,CAACc,OAAOzR,EAAEC,MAAM,CAACH,KAAK,KAE9C2M,EAAa,IACX,IAAMyE,EAAU,IAAIC,EAAS,CAG7B,OAFAD,CAAO,CAACnT,EAAM,CAACmQ,OAAO,CAAG6C,EACzBzC,CAAAA,EAAAA,EAAAA,EAAAA,EAAmB4C,GACZA,CACT,EACF,EACA5X,UAAU,aA3BPyE,MAgCX,GAAAH,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QApJQ,KAElB+T,EADgBjB,EAAKnB,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKmG,GAEjD,EAkJYtT,UAAU,yEACX,4BAQb,uIChQA,IAAMoY,EAAQ,CACZ,CAAEC,UAAWC,EAAAA,SAASA,CAAE9R,MAAO,CAAE,EACjC,CAAE6R,UAAWE,EAAAA,GAAWA,CAAE/R,MAAO,CAAE,EACnC,CAAE6R,UAAWG,EAAAA,KAAKA,CAAEhS,MAAO,CAAE,EAC7B,CAAE6R,UAAWI,EAAAA,OAAOA,CAAEjS,MAAO,CAAE,EAC/B,CAAE6R,UAAWK,EAAAA,OAAOA,CAAElS,MAAO,CAAE,EAChC,CAEKmS,EAAoC,CACxC,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,UACH,EAAG,SACL,CA8VA7U,CAAAA,EAAA,QA5V8B,KAE5B,IAAM8U,EAAiBC,EAAAA,EAAkB,CAAChU,MAAM,CAC1CiU,EAAapB,KAAKqB,IAAI,CAACH,EAFJ,GAInB,CAACI,EAAaC,EAAe,CAAGrY,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACzC,CAACmI,EAAUC,EAAY,CAAGpI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,GACnC,CAACsY,EAAYC,EAAc,CAAGvY,CAAAA,EAAAA,EAAAA,QAAAA,EAAgB,EAAE,EAChD,CAAC+I,EAAWyP,EAAa,CAAGxY,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MACpD,CAACyY,EAAeC,EAAiB,CAAG1Y,CAAAA,EAAAA,EAAAA,QAAAA,EAAiB,IACrD,CAACiI,EAASC,EAAW,CAAGlI,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACjC,CAAC2Y,EAAWC,EAAa,CAAG5Y,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAE3CG,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACR,IAAM0Y,EAAoBC,CAAAA,EAAAA,EAAAA,EAAAA,IACtBD,GACFL,EAAaK,GACbE,EAAgBF,IAEhBG,GAEJ,EAAG,EAAE,EAEL7Y,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJmY,EAAWrU,MAAM,CAAG,GACtBmE,EAAY6Q,IAEhB,EAAG,CAACX,EAAW,EAEf,IAAMS,EAAkB,MAAOhQ,IAC7B,GAAI,CACF,IAAMe,EAAW,MAAMhF,MAAM,wBAAyB,CACpDC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,UACb,EACF,GACMC,EAAO,MAAMY,EAASX,IAAI,GAEhC,GAAID,GAAQA,EAAKO,OAAO,CAAE,CACxB,IAAMyP,EAAcjB,EAAAA,EAAkB,CAACtU,GAAG,CACxC,CAACwV,EAAetV,KACd,IAAMuV,EAASlQ,EAAKO,OAAO,CAAC4H,IAAI,CAC9B,GAAY5G,EAAE4O,eAAe,GAAKxV,GAEpC,MAAO,CACL6B,GAAI,YAAkB7E,MAAA,CAANgD,GAChB+B,MAAOwT,EAASE,SAASF,EAAOxT,KAAK,EAAI,KACzCO,YAAaiT,EACTnB,EAAAA,EAAkB,CAACmB,EAAOC,eAAe,CAAC,CAAClN,OAAO,CAChDmN,SAASF,EAAOxT,KAAK,EAAI,EAC1B,CAACO,WAAW,CACb,IACN,CACF,GAEFoS,EAAcW,EAChB,MACEX,EACEN,EAAAA,EAAkB,CAACtU,GAAG,CAAC,CAACgT,EAAG9S,IAAW,EACpC6B,GAAI,YAAkB7E,MAAA,CAANgD,GAChB+B,MAAO,KACPO,YAAa,IACf,KAIJ+B,EAAW,GACb,CAAE,MAAO9C,EAAO,CACd8C,EAAW,GACb,CACF,EAEMqR,EAAiBC,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,KACjC,IAAMC,EAAQrB,EAAAA,EAEd,OAAOE,EAAWxU,KAAK,CAAC2V,EADZA,EA9EW,GA+Ea3I,IAAI,CAAC,GAAO+C,OAAAA,EAAEjO,KAAK,CACzD,EAAG,CAACwS,EAhFqB,EAgFUE,EAAW,EAExCU,EAAoB,UACxB,GAAI,CACF,IAAMlP,EAAW,MAAMhF,MAAM,8BAA+B,CAC1DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CAAE8D,UAAW,UAAW,EAC/C,GACMC,EAAO,MAAMY,EAASX,IAAI,GAChCqP,EAAatP,EAAKxD,EAAE,EACpBgU,CAAAA,EAAAA,EAAAA,EAAAA,EAAcxQ,EAAKxD,EAAE,EAErB6S,EACEN,EAAAA,EAAkB,CAACtU,GAAG,CAAC,CAACgT,EAAG9S,IAAW,EACpC6B,GAAI,YAAkB7E,MAAA,CAANgD,GAChB+B,MAAO,KACPO,YAAa,IACf,KAEF+B,EAAW,GACb,CAAE,MAAO9C,EAAO,CACd8C,EAAW,GACb,CACF,EAEM+Q,EAAoBO,CAAAA,EAAAA,EAAAA,WAAAA,EAAY,IAE7BG,EAD8BlW,MAAM,CAAC,GAAOoQ,OAAAA,EAAEjO,KAAK,EAAW3B,MAAM,CAC/C+T,EAAkB,IAC7C,CAACM,EAAYN,EAAe,EAEzB4B,EAAe,MAAO/V,EAAe+B,KACzC,GAAI,CAACmD,EAAW,OAEhB,IAAM8Q,EAAkB5B,EAAAA,EAAkB,CAACpU,EAAM,CAC3CuV,EAAS,CACbU,QAAS,WACTC,WAAYF,EAAgBG,SAAS,CACrChM,MAAO6L,EAAgB7L,KAAK,CAC5BqL,gBAAiBxV,EACjB+B,MAAOA,EAAMqU,QAAQ,EACvB,EAGMC,EAAYC,IADFC,OACMC,WAAW,GACjC,GAAI,CACF,MAAMvV,MAAM,0BAA2B,CACrCC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,WACXQ,QAAS,CAAC2P,EAAO,CACjBX,cAAeA,EACf6B,cAAeJ,CACjB,EACF,EACF,CAAE,MAAO9U,EAAO,CAAC,CACnB,EAEMmV,EAAe,MAAO1W,IAC1B,GAAKkF,EAEL,GAAI,CACF,MAAMjE,MAAM,yBAA0B,CACpCC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,WACXoQ,gBAAiBxV,CACnB,EACF,EACF,CAAE,MAAOuB,EAAO,CAAC,CACnB,EAEMoV,EAAoB,CAAC5U,EAAe/B,KACpCyU,CAAU,CAACzU,EAAM,CAAC+B,KAAK,GAAKA,IAEA,OAA5B0S,CAAU,CAACzU,EAAM,CAAC+B,KAAK,EACzB2U,EAAa1W,GAGf0U,EAAc,IACZ,IAAMW,EAAc,IAAIuB,EAAY,CAIpC,OAHAvB,CAAW,CAACrV,EAAM,CAAC+B,KAAK,CAAGA,EAC3BsT,CAAW,CAACrV,EAAM,CAACsC,WAAW,CAC5B8R,EAAAA,EAAkB,CAACpU,EAAM,CAACsI,OAAO,CAACvG,EAAQ,EAAE,CAACO,WAAW,CACnD+S,CACT,GAEAU,EAAa/V,EAAO+B,GACpB8U,EAAiB7W,GACnB,EAEM8W,EAAmB,KACvB,IAAMlC,EAAgBH,EAAW3U,GAAG,CAAC,GAAOkQ,EAAEjO,KAAK,EAAI,GAAG7B,IAAI,CAAC,IAC/D2U,EAAiBD,GAEjB,IAAMnI,EAAac,EAASzN,GAAG,CAAC,QAE5B4I,EADF,IAAMkI,EACJlI,CAAAA,OAAAA,CAAAA,EAAAA,EAAIqO,UAAU,CAACvJ,IAAI,CAAC,GAAOwJ,aAAAA,EAAE5R,SAAS,CAAK,GAA3CsD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAwD5H,OAAO,GAAI,GAC/D+P,EAAcC,CAAAA,EAAAA,EAAAA,CAAAA,EAAaF,GAC3B9I,EAAakJ,CAAAA,EAAAA,EAAAA,CAAAA,EAASJ,EAAiBC,EAAa+D,GACpD7K,EAAYmH,CAAAA,EAAAA,EAAAA,EAAAA,EAAa0D,EAAehE,GAC9C,MAAO,CAAElI,IAAKA,EAAInK,KAAK,CAAEuJ,WAAAA,EAAYiC,UAAAA,EAAW6K,cAAAA,CAAc,CAChE,GAEA7M,QAAQC,GAAG,CAACyE,GAEZwK,CAAAA,EAAAA,EAAAA,EAAAA,EAAYxK,GACZyK,EAAazK,EAAYmI,GAEzBlJ,OAAOyL,QAAQ,CAACvb,IAAI,CAAG,yBACzB,EAEMsb,EAAe,MAAOxZ,EAAckX,KAExC,IAAMyB,EAAYC,IADFC,OACMC,WAAW,GAEjC,GAAI,CACF,MAAMvV,MAAM,yBAA0B,CACpCC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBO,GAAIqD,EACJE,UAAW,WACX1H,QAAAA,EACAkX,cAAeA,EACf6B,cAAeJ,CACjB,EACF,EACF,CAAE,MAAO9U,EAAO,CAAC,CACnB,EAEM6V,EAAmB,IACvB5C,EAAe6C,EACjB,EAEMR,EAAmB,IACvB,IAAMS,EAAkBnP,SAASC,cAAc,CAAC,YAAkBpL,MAAA,CAANgD,IACxDsX,GACFA,EAAgBC,cAAc,CAAC,CAAEC,SAAU,SAAUC,MAAO,QAAS,EAEzE,EAEMC,EAAmBtD,EAAAA,EAAkB,CAACnU,KAAK,CAC/CsU,EAAAA,EACAA,EAAAA,EA5OuB,SA6PzB,CAdAjY,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAER,GAAKwY,EAQHC,EAAa,QARC,CACd,IAAM4C,EAAgBxP,SAASC,cAAc,CAC3C,YAA2CpL,MAAA,CAA/BuX,EAAAA,IAEVoD,GACFA,EAAcJ,cAAc,CAAC,CAAEC,SAAU,SAAUC,MAAO,QAAS,EAEvE,CAGF,EAAG,CAAClD,EA3PqB,EA2PUO,EAAU,EAEzC1Q,GAEA,GAAAvE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,4DACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,iCAAwB,8CAQzC,GAAAsE,EAAArE,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,kFACjB,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,wFACb,GAAAsE,EAAArE,IAAA,EAACE,IAAAA,CAAEH,UAAU,sBAAa0X,KAAK2E,KAAK,CAACtT,GAAU,OAC/C,GAAAzE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,+CACb,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CACCC,UAAU,4FACV2H,MAAO,CAAEH,MAAO,GAAY/F,MAAA,CAATsH,EAAS,IAAG,SAKpCoT,EAAiB5X,GAAG,CAAC,CAACwV,EAAUtV,SAgC1ByU,EAEIA,EAjCT,IAAMoD,EAActD,EAAAA,EAAiCvU,EACrD,MACE,GAAAH,EAAArE,IAAA,EAACF,MAAAA,CAECuG,GAAI,YAAwB7E,MAAA,CAAZ6a,GAChBtc,UAAU,iEAEV,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,6CAAqC+Z,EAASwC,IAAI,GAC/D,GAAAjY,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,2DACZoY,EAAM7T,GAAG,CAAC,QAQH2U,EAMEA,KAdE,CAAEb,UAAWmE,CAAI,CAAEhW,MAAAA,CAAK,CAAE,CAAA5G,QACpC,GAAA0E,EAAAxE,GAAA,EAAC8C,SAAAA,CAECtC,QAAS,IAAM8a,EAAkB5U,EAAO8V,GACxCtc,UAAU,4DAEV,GAAAsE,EAAAxE,GAAA,EAAC0c,EAAAA,CACCxc,UAAW,+BAIVyB,MAAA,CAHCyX,CAAAA,OAAAA,CAAAA,EAAAA,CAAU,CAACoD,EAAY,GAAvBpD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAyB1S,KAAK,IAAKA,EAC/B,4CACA,4DAENmB,MAAO,CACLwO,MACE+C,CAAAA,OAAAA,CAAAA,EAAAA,CAAU,CAACoD,EAAY,GAAvBpD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAyB1S,KAAK,IAAKA,EAC/BmS,CAAM,CAACnS,EAAM,CACb,MACR,KAfGA,OAoBV0S,CAAAA,OAAAA,CAAAA,EAAAA,CAAU,CAACoD,EAAY,GAAvBpD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAyBnS,WAAW,GACnC,GAAAzC,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,qCACa,OAAvBkZ,CAAAA,EAAAA,CAAU,CAACoD,EAAY,GAAvBpD,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAAyBnS,WAAW,GAGzC,GAAAzC,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,+CAjCVsc,EAoCX,GAEA,GAAAhY,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,kDACb,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IAAMub,EAAiB7C,EAAc,GAC9CzX,SAAUyX,IAAAA,EACVhZ,UAAU,4IACX,oBAGAgZ,EAAcF,EAAa,EAC1B,GAAAxU,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IAAMub,EAAiB7C,EAAc,GAC9CzX,SAAU4Y,IACVna,UAAU,4IACX,YAID,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IAAMib,IACfha,SAAU4Y,IACVna,UAAU,4IACX,8CAOX,qHChWAyc,EAAAA,EAAOA,CAAC7Q,QAAQ,CACd8Q,EAAAA,EAAaA,CACbC,EAAAA,EAAWA,CACXC,EAAAA,EAAUA,CACVC,EAAAA,EAAKA,CACL9N,EAAAA,CAAOA,CACPiE,EAAAA,EAAMA,CACNJ,EAAAA,EAAiBA,CACjBC,EAAAA,EAAYA,CACZC,EAAAA,EAAWA,CACXC,EAAAA,EAAMA,EAGR,IAAM+J,EAAqB,CACzB,EAAK,8BACL,EAAK,8BACL,EAAK,0BACL,EAAK,iCACL,EAAK,qCACL,EAAK,yBACL,EAAK,8BACL,EAAK,+BACL,EAAK,oCACL,GAAM,8BACN,GAAM,6BACR,EAyRMC,EAAiB,OAAC,CACtBC,aAAAA,CAAY,CACZC,aAAAA,CAAY,CACZC,eAAAA,CAAc,CACV,CAAAtd,QACJ,GAAA0E,EAAArE,IAAA,EAACF,MAAAA,CACCuG,GAAG,cACHqB,MAAO,CACLH,MAAO,SACPC,OAAQ,SACR0V,QAAS,OACT7P,gBAAiB,UACjBS,QAAS,OACTqP,cAAe,SACfC,WAAY,SACZC,eAAgB,eAClB,YAEA,GAAAhZ,EAAArE,IAAA,EAACF,MAAAA,CAAI4H,MAAO,CAAE4V,UAAW,SAAUC,aAAc,MAAO,YACtD,GAAAlZ,EAAAxE,GAAA,EAACwQ,KAAAA,CACC3I,MAAO,CACL8V,SAAU,OACVC,WAAY,OACZvH,MAAO,UACPqH,aAAc,MAChB,WACD,YAGD,GAAAlZ,EAAAxE,GAAA,EAACK,IAAAA,CAAEwH,MAAO,CAAE8V,SAAU,OAAQD,aAAc,MAAO,WAAG,mFAGrDR,GACC,GAAA1Y,EAAAxE,GAAA,EAACI,KAAAA,CACCyH,MAAO,CACL8V,SAAU,OACVC,WAAY,OACZvH,MAAO,UACPqH,aAAc,MAChB,WAECR,EAAazM,WAAW,QAI/B,GAAAjM,EAAAxE,GAAA,EAACC,MAAAA,CAAI4H,MAAO,CAAEgW,KAAM,EAAGnW,MAAO,MAAOgW,aAAc,MAAO,WACxD,GAAAlZ,EAAAxE,GAAA,EAAC8d,EAAAA,EAAGA,CAAAA,CACF9T,KAAMmT,EACNlQ,QAAS,CACPE,QAAS,CACPgB,OAAQ,CACNF,QAAS,GACT8P,SAAU,MACV3Q,OAAQ,CACN4Q,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAwC,MAAO,CACL+K,QAAS,GACTwO,KAAM,iDACNuB,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAmN,OAAQ,CACNpG,EAAG,CACDsG,YAAa,GACbqJ,MAAO,CACLC,SAAU,GACV4G,SAAU,GAA4B,GAAStc,MAAA,CAAN+E,EAAM,KAC/CsX,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAoN,EAAG,CACDsJ,MAAO,CACL4G,KAAM,CACJtd,KAAM,EACR,CACF,CACF,CACF,CACF,MAGJ,GAAA8D,EAAAxE,GAAA,EAACC,MAAAA,CAAI4H,MAAO,CAAEgW,KAAM,EAAGnW,MAAO,KAAM,WAClC,GAAAlD,EAAAxE,GAAA,EAACgX,EAAAA,EAAKA,CAAAA,CACJhN,KAAMoT,EACNnQ,QAAS,CACPE,QAAS,CACPgB,OAAQ,CACNF,QAAS,GACT8P,SAAU,MACV3Q,OAAQ,CACN4Q,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAwC,MAAO,CACL+K,QAAS,GACTwO,KAAM,2BACNuB,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAmN,OAAQ,CACNgE,EAAG,CACD9D,YAAa,GACbqJ,MAAO,CACLC,SAAU,GACVpJ,QAAS,EACX,EACAiQ,YAAa,CACXF,KAAM,CACJtd,KAAM,EACR,CACF,CACF,CACF,CACF,SAMRsD,CAAAA,EAAA,QA1ZsB,KACpB,GAAM,CAACkZ,EAAciB,EAAgB,CAAGrd,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAC1D,CAACsd,EAAkBC,EAAoB,CAAGvd,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EACrD,CAACwd,EAAeC,EAAiB,CAAGzd,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,EAAE,EAC/C,CAAC0d,EAAmBC,EAAqB,CAAG3d,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IACrD,CAAC4d,EAAgBC,EAAkB,CAAG7d,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAC9D,CAAC8d,EAAgBC,EAAkB,CAAG/d,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAC/C,CAACqL,EAAe2S,EAAiB,CAAGhe,CAAAA,EAAAA,EAAAA,QAAAA,EAAwB,MAC5D,CAACie,EAAcC,EAAgB,CAAGle,CAAAA,EAAAA,EAAAA,QAAAA,EAAS,IAE3Cme,EAAeC,EAAQ3a,MAAM,CAAC,GAAS8I,EAAI8R,QAAQ,GAAKjC,GAE9Djc,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KAORC,CANkB,UAChB,IAAMke,EAAQ3f,aAAa2B,OAAO,CAAC,wBAC/Bge,GACFN,EAAiBM,EAErB,IAEF,EAAG,EAAE,EAGLne,CAAAA,EAAAA,EAAAA,SAAAA,EAAU,KACJkL,GACFkT,GAEJ,EAAG,CAAClT,EAAc,EAElB,IAAMkT,EAAqB,UACzB,GAAIlT,EACF,GAAI,KAOcmT,EANhB,IAAMjT,EAAgB,MAAMrG,KAAKsG,KAAK,CAACH,GACjCmT,EAAyB,CAC7BjT,EAAckT,iBAAiB,EAAI,EAAE,EACrChT,IAAI,CAAC,CAAChB,EAAQiB,IAAWA,EAAEgT,OAAO,CAAGjU,EAAEiU,OAAO,EAChDnB,EAAoBiB,GACpBf,EAAiBlS,EAAcoT,cAAc,EAAI,EAAE,EACnDtB,EAAAA,OAAgBmB,CAAAA,EAAAA,CAAsB,CAAC,EAAE,GAAzBA,KAAAA,IAAAA,EAAAA,KAAAA,EAAAA,EAA2BH,QAAQ,CACrD,CAAE,MAAOjZ,EAAO,CACdwG,QAAQxG,KAAK,CAAC,gCAAiCA,EACjD,CAEJ,EAEMiX,EAAe,CACnB/P,OAAQgR,EAAiB3Z,GAAG,CAAC,GAAmB0a,EAASA,QAAQ,EACjE7R,SAAU,CACR,CACElH,MAAO,cACP4D,KAAMoU,EAAiB3Z,GAAG,CAAC,GAAmB0a,EAASK,OAAO,EAC9DhS,gBAAiB,yBACjBC,YAAa,uBACbC,YAAa,CACf,EACD,EAGG0P,EAAiB,CACrBhQ,OAAQkR,EAAc7Z,GAAG,CACvB,GACEuY,CAAkB,CAAC0C,EAAMtZ,KAAK,CAAC,EAEnCkH,SAAU,CACR,CACElH,MAAO,uBACP4D,KAAMsU,EAAc7Z,GAAG,CAAC,GAAgBib,EAAMF,OAAO,EACrDhS,gBAAiB,yBACjBC,YAAa,uBACbC,YAAa,EACbwJ,qBAAsB,sBACxB,EACD,EAoBH,MACE,GAAA1S,EAAArE,IAAA,EAACmH,UAAAA,CACCpH,UAAU,qCACVuC,aAAW,yBAEV+b,GACC,GAAAha,EAAAxE,GAAA,EAACid,EAAAA,CACCC,aAAcA,EACdC,aAAcA,EACdC,eAAgBA,IAIpB,GAAA5Y,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,6HACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,oDACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,yDACb,GAAAsE,EAAArE,IAAA,EAACmH,UAAAA,CAAQpH,UAAU,gCACjB,GAAAsE,EAAAxE,GAAA,EAACwQ,KAAAA,CAAGtQ,UAAU,kDAAyC,YAGvD,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,+BAAsB,4IAIlCgd,GACC,GAAA1Y,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,oCACb,GAAAsE,EAAAxE,GAAA,EAACI,KAAAA,CAAGF,UAAU,4EACXgd,EAAazM,WAAW,KAE3B,GAAAjM,EAAAxE,GAAA,EAAC8C,SAAAA,CAAOtC,QAAS,IAAMwe,EAAgB,aACrC,GAAAxa,EAAAxE,GAAA,EAAC2f,EAAAA,GAAaA,CAAAA,CACZjf,KAAM,GACNR,UAAU,8CAOpB,GAAAsE,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,gBACb,GAAAsE,EAAAxE,GAAA,EAAC8d,EAAAA,EAAGA,CAAAA,CAAC9T,KAAMmT,SAIf,GAAA3Y,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,uEACb,GAAAsE,EAAAxE,GAAA,EAACgX,EAAAA,EAAKA,CAAAA,CAAChN,KAAMoT,SAGjB,GAAA5Y,EAAAxE,GAAA,EAACC,MAAAA,UACC,GAAAuE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAnEY,KACpBie,EAAqB,IAErBzT,WAAW,KACT,IAAM4U,EAAa9S,SAASC,cAAc,CAAC,eACvC6S,GACFC,CAAAA,EAAAA,EAAAA,EAAAA,EAAMD,GACHE,IAAI,CAAC,IACJnB,EAAkBoB,GAClBlB,EAAkB,GACpB,GACCmB,KAAK,CAAC,GAAStT,QAAQxG,KAAK,CAAC,+BAA0B+Z,IACvDC,OAAO,CAAC,IAAMzB,EAAqB,IAE1C,EAAG,IACL,EAqDUve,UAAU,mHACX,+CAMJ0e,GACC,GAAApa,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,sFACb,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,8FACb,GAAAsE,EAAAxE,GAAA,EAAC2W,KAAAA,CAAGzW,UAAU,4DAAmD,wDAIhEwe,GACC,GAAAla,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,+CAAsC,8CAGnD,GAAAsE,EAAAxE,GAAA,EAACmgB,MAAAA,CACCvd,IAAK8b,EACL/b,IAAI,sBACJzC,UAAU,+CAEZ,GAAAsE,EAAAxE,GAAA,EAACuL,IAAAA,CACChL,KAAMme,EACN3N,SAAS,oBACT7Q,UAAU,+IACX,iCAML,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,iBACb,GAAAsE,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,+CAAsC,8DAGnD,GAAAsE,EAAArE,IAAA,EAACF,MAAAA,CAAIC,UAAU,gCACb,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IACP6P,OAAO+P,IAAI,CACT,gIACA,UAGJlgB,UAAU,8GACX,YAGD,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IACP6P,OAAO+P,IAAI,CAAC,6BAA8B,UAE5ClgB,UAAU,8GACX,cAGD,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACCtC,QAAS,IACP6P,OAAO+P,IAAI,CAAC,0BAA2B,UAEzClgB,UAAU,2GACX,iBAML,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACC5C,UAAU,8DACVM,QAAS,IAAMqe,EAAkB,aAEjC,GAAAra,EAAAxE,GAAA,EAACS,EAAAA,GAAOA,CAAAA,CAACC,KAAM,YAMvB,GAAA8D,EAAAxE,GAAA,EAACqgB,EAAAA,CAAeA,CAAAA,UACbtB,GACC,GAAAva,EAAAxE,GAAA,EAACsgB,EAAAA,CAAMA,CAACrgB,GAAG,EACTC,UAAU,6EACVqgB,QAAS,CAAEC,QAAS,CAAE,EACtBC,QAAS,CAAED,QAAS,CAAE,EACtBE,KAAM,CAAEF,QAAS,CAAE,WAEnB,GAAAhc,EAAArE,IAAA,EAACmgB,EAAAA,CAAMA,CAACrgB,GAAG,EACTC,UAAU,qGACVqgB,QAAS,CAAE9Y,EAAG,GAAI+Y,QAAS,CAAE,EAC7BC,QAAS,CAAEhZ,EAAG,EAAG+Y,QAAS,CAAE,EAC5BE,KAAM,CAAEjZ,EAAG,GAAI+Y,QAAS,CAAE,YAE1B,GAAAhc,EAAArE,IAAA,EAACwW,KAAAA,CAAGzW,UAAU,kDAAwC,4BAC9B,GAAAsE,EAAAxE,GAAA,EAAC2gB,KAAAA,CAAAA,GACvB,GAAAnc,EAAArE,IAAA,EAAC6E,OAAAA,CAAK9E,UAAU,0BAAgB,IAAEgd,QAGpC,GAAA1Y,EAAAxE,GAAA,EAACC,MAAAA,CAAIC,UAAU,mIACZ+e,EAAala,MAAM,CAAG,EACrB,GAAAP,EAAAxE,GAAA,EAACqD,KAAAA,CAAGnD,UAAU,2CACX+e,EAAaxa,GAAG,CAAC,CAAC4I,EAAK1I,IACtB,GAAAH,EAAAxE,GAAA,EAACuD,KAAAA,CAECrD,UAAU,2EAETmN,EAAInK,KAAK,EAHLyB,MAQX,GAAAH,EAAAxE,GAAA,EAACK,IAAAA,CAAEH,UAAU,yBAAgB,kCAIjC,GAAAsE,EAAAxE,GAAA,EAAC8C,SAAAA,CACC5C,UAAU,0FACVM,QAAS,IAAMwe,EAAgB,aAChC,WAID,GAAAxa,EAAAxE,GAAA,EAAC8C,SAAAA,CACC5C,UAAU,2DACVM,QAAS,IAAMwe,EAAgB,aAE/B,GAAAxa,EAAAxE,GAAA,EAACS,EAAAA,GAAOA,CAAAA,CAACC,KAAM,gBAQ/B,wDC5TO,SAASiV,EAASJ,CAAe,CAAEC,CAAW,CAAE+D,CAAa,EAChE,IAAIqH,EAAW,EAAGC,EAAW,EAE7B,IAAK,IAAIC,EAAI,EAAGA,EAAIvH,EAAcxU,MAAM,CAAE+b,IAAK,CAC3C,IAAMC,EAAaxL,EAAgByL,MAAM,CAACF,GAAKvH,EAAcyH,MAAM,CAACF,EAEhEC,CAAAA,EAAa,EACbF,GAAYjJ,KAAKqJ,GAAG,CAAC,EAAG,CAACF,GACH,IAAfA,GACPH,CAAAA,GAAYhJ,KAAKqJ,GAAG,CAAC,EAAGF,EAAAA,CAEhC,CAEA,OAAOnJ,KAAK1J,GAAG,CAAC,CAAGsH,EAAcoL,EAAWC,CAAAA,EAAYrL,EAAgB,EAACA,EAAcqL,EAAWD,CAAAA,EAAYpL,CAAAA,EAAgB,IAAK,EACvI,wDCOO,SAASC,EAAayL,CAAS,EAClC,OAAOC,SAbaD,CAAS,CAAEE,CAAM,EACrC,IAAMC,EAXCC,EAAIhd,KAAK,CAAC,IAAIuL,MAAM,CAAC,CAACwR,EAAKE,IAASF,EAAMjH,SAASmH,GAAO,GAYjE,OAAOF,EAW0B,IAXT,IAClBD,GAASxJ,KAAKqJ,GAAG,CAAC,EAAGI,EAUM,IAT3BD,EAASxJ,KAAKqJ,GAAG,CAAC,EAAG,EAAII,EAAMD,EACzC,EAQ0BF,EAAW,GACrC,wBC3BO,SAASM,EAASN,CAAS,EAChC,IAAIO,EAAO,EACX,IAAK,IAAIX,EAAI,EAAGA,EAAII,EAAUnc,MAAM,CAAE+b,IAAK,CACzC,IAAMY,EACJZ,IAAMI,EAAUnc,MAAM,CAAG,EAAImc,CAAS,CAAC,EAAE,CAAGA,CAAS,CAACJ,EAAI,EAAE,CAC9DW,GAAQP,CAAU,CAACJ,EAAE,CAAGY,EAAY9J,KAAK+J,GAAG,CAAC,EAAK/J,KAAKgK,EAAE,CAAI,IAAO,CACtE,CACA,OAAOH,CACT,CAQO,SAAS5L,EAAa0D,CAAa,CAAE2H,CAAS,EACnD,IAAMW,EAAWL,EAASjI,GAE1B,OAAO3B,KAAMkK,IAAI,CADDN,EAASN,IACItJ,KAAKkK,IAAI,CAACD,GAAa,GACtD,CAEO,SAAS9L,EAAmBT,CAAe,CAAEF,CAAgB,EAClE,GAAIE,EAAgBvQ,MAAM,GAAKqQ,EAAiBrQ,MAAM,CACpD,MAAM,MAAU,oDAGlB,IAAIgd,EAAa,EACbC,EAAc,EACdC,EAAe,EAEnB,IAAK,IAAInB,EAAI,EAAGA,EAAIxL,EAAgBvQ,MAAM,CAAE+b,IAAK,CAC/C,IAAMoB,EAAS7J,OAAO/C,CAAe,CAACwL,EAAE,EAClCqB,EAAS9J,OAAOjD,CAAgB,CAAC0L,EAAE,EAEzCkB,GAAeE,EACfD,GAAgBE,EAChBJ,GAAcnK,KAAKwK,GAAG,CAACF,EAASC,EAClC,CAOA,MAJE,CAAC,EAAIvK,KAAKwK,GAAG,CAACJ,EAAcC,GAAgBD,CAAAA,EAC3C,GAAID,EAAaC,CAAAA,EAClB,GAGJ,uLCvCO,eAAe5X,IAEpB,MAAOiY,CADkBpS,EAAAA,EAAAA,EAAAA,IAEpBxL,GAAG,CAAC,GAAqE,EACxEmQ,OAAQnD,EAAOpE,GAAG,CAClBiV,MAAOC,WAAW9Q,EAAOhF,UAAU,CAACc,OAAO,CAAC,IAC5CmB,UAAW+C,EAAO/C,SAAS,CAC7B,GACCnC,IAAI,CAAC,CAAChB,EAAuBiB,IAA0BA,EAAE8V,KAAK,CAAG/W,EAAE+W,KAAK,CAC/E,CAEO,eAAe7X,EACpBF,CAA2B,EAE3B,IAAMiY,EAAoE,CAAC,EAiB3E,OAfAjY,EAAQ/K,OAAO,CAAC,IACd,IAAMkH,EAAQ0T,SAASF,EAAOxT,KAAK,CAC9B8b,CAAAA,CAAY,CAACtI,EAAOW,UAAU,CAAC,EAClC2H,CAAAA,CAAY,CAACtI,EAAOW,UAAU,CAAC,CAAG,CAAE4H,MAAO,EAAGC,MAAO,CAAE,GAEzDF,CAAY,CAACtI,EAAOW,UAAU,CAAC,CAAC4H,KAAK,EAAI/b,EACzC8b,CAAY,CAACtI,EAAOW,UAAU,CAAC,CAAC6H,KAAK,EAAI,CAC3C,GAEmBC,OAAOpjB,IAAI,CAACijB,GAAc/d,GAAG,CAAC,IAC/C,GAAM,CAAEge,MAAAA,CAAK,CAAEC,MAAAA,CAAK,CAAE,CAAGF,CAAY,CAACI,EAAK,CAE3C,MAAO,CAAErd,KAAMqd,EAAMpD,QAAS5H,KAAKL,KAAK,CADxBkL,EAAUC,CAAAA,EAAAA,CAAQ,EAAM,IACU,CACpD,EAGF,CAEO,eAAepY,EAAiBuY,CAAmB,EACxD,OAAOA,EAAepe,GAAG,CAAC,IACxB,IAAMwV,EAAWoC,EAAAA,EAA0B,CAAClK,IAAI,CAC9C,GAAOwC,EAAE7F,KAAK,GAAKoL,EAAOpL,KAAK,EAGjC,GAAI,CAACmL,EACH,MAAM,MAAU,SAAsBtY,MAAA,CAAbuY,EAAOpL,KAAK,CAAC,4BAGxC,MAAO,CACLgU,WAAY,SACZlI,QAAS,WACTC,WAAYZ,EAASa,SAAS,CAC9BhM,MAAOoL,EAAOpL,KAAK,CACnBqL,gBAAiBF,EAAS8I,cAAc,CACxCrc,MAAOwT,EAAOxT,KAAK,CAEvB,EACF,mEC/DA,IAAMsc,EAAY,IAAIC,IAEhBC,EAAW,MAAOC,IACtB,IAAMvY,EAAW,MAAMhF,MAAMud,GAC7B,GAAI,CAACvY,EAASG,EAAE,CACd,MAAM,MAAU,4CAAgDpJ,MAAA,CAAJwhB,IAE9D,OAAO,MAAMvY,EAASwY,WAAW,EACnC,EAEaC,EAAY,MAAOC,IAC9BA,EAAOC,eAAe,CAACC,EAAAA,CAAOA,EAQ9B,IAAMC,EAAc,CAAC,EAErB,IAAK,GAAM,CAACC,EAASC,EAAQ,GAAIhB,OAAOiB,OAAO,CAR3B,CAClBC,aAAe,gCACfC,UAAY,mCACZC,SAAW,iCACb,GAKE,GAAIf,EAAUgB,GAAG,CAACL,GAChBF,CAAW,CAACC,EAAQ,CAAGV,EAAUrQ,GAAG,CAACgR,OAChC,CACL,IAAMM,EAAY,MAAMf,EAASS,GAC3BO,EAAe,MAAMZ,EAAOa,SAAS,CAACF,GAC5CjB,EAAUoB,GAAG,CAACT,EAASO,GACvBT,CAAW,CAACC,EAAQ,CAAGQ,CACzB,CAGF,OAAOT,CACT,wDCnCO,IAAMY,EAAS,CAClBC,UAAW,KACXC,WAAY,KACZC,OAAQ,EACZ,sECFO,IAAMC,EAAS,CAClBC,cAAe,CAAErO,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAAMjkB,KAAM,EAAG,EACpEkkB,WAAY,CAAEvO,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAAMjkB,KAAM,EAAG,EAEjEmkB,cAAe,CAAExO,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAAMjkB,KAAM,EAAG,EACpEokB,UAAW,CAAEzO,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAAMjkB,KAAM,EAAG,EAChEqkB,cAAe,CAAE1O,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAAMjkB,KAAM,EAAG,CACxE,gnECIO,IAAMskB,EAAoC,MAC/C1B,EACAtZ,EACAib,EACAC,KAEA,IAAMC,EAAWnb,EAAKwJ,WAAW,CAAC/C,WAAW,GAEvC2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAY,yBACZC,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WAAY,CACd,GAEMC,EAAgBF,CAAAA,EAAAA,EAAAA,EAAAA,EACpB,MAAMG,EAAsB3b,EAAK4L,YAAY,EAC7C,IAEIgQ,EAAkBJ,CAAAA,EAAAA,EAAAA,EAAAA,EACtB,MAAMK,EAAuB7b,EAAK0L,aAAa,GAG3CoQ,EAAWN,CAAAA,EAAAA,EAAAA,EAAAA,EAAW,MAAMO,EAAiB/b,EAAK8L,QAAQ,GAE1DkQ,EAA0B3B,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IAE9DyB,EAAyBC,CAAAA,EAAAA,EAAAA,EAAAA,EAC7B,cACAhB,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CACtBslB,EACAvB,KAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,EAExBylB,EACEf,EACAM,EACAR,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBT,EAAAA,CAAMA,CAACG,MAAM,CACbyB,EAAyB,IAG3B,IAAMG,EACJF,CAAAA,EAAAA,EAAAA,EAAAA,EACER,EACAR,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrBulB,EAAyB,GACzBxB,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,EACnB,GACNylB,EACEf,EACAQ,EACAV,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBT,EAAAA,CAAMA,CAACG,MAAM,CACb4B,EAA4B,IAG9B,IAAMC,EACJH,CAAAA,EAAAA,EAAAA,EAAAA,EACER,EACAR,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrB0lB,EAA4B,GAC5B3B,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,EACnB,GAUN,OATAylB,EACEf,EACAU,EACAZ,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBT,EAAAA,CAAMA,CAACG,MAAM,CACb6B,EAAqB,IAGhBjB,CACT,EAEMO,EAAwB,MAAO/P,IACnC,IAAI0Q,EAAW,GAEbA,EADE1Q,EAAe,IACN,2FAMVjU,MAAA,CALCiU,EAAe,GACX,2GACAA,EAAe,IACf,8HACA,kDAEGA,EAAe,GACb,0FAMVjU,MAAA,CALCiU,EAAe,GACX,2GACAA,EAAe,IACf,8HACA,kDAGK,2FAMVjU,MAAA,CALCiU,EAAe,GACX,2GACAA,EAAe,IACf,8HACA,kDAIR,IAAM2Q,EAAqB,MAAM3gB,MAAM,wBAAyB,CAC9DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAM6J,EACNE,WAAY9X,CACd,EACF,GAGA,MAAO+X,CAFW,MAAMF,EAAmBtc,IAAI,IAE9BD,IAAI,CAACvE,OAAO,EAGzBogB,EAAyB,MAAOnQ,IACpC,IAAM4Q,EAAW,kCAGf5Q,MAAAA,CAH2CA,EAAcnI,OAAO,CAChE,GACA,mCAMD5L,MAAA,CALC+T,GAAiB,GACb,sCACAA,GAAiB,GACjB,kFACA,8CAGAgR,EAAsB,MAAM9gB,MAAM,wBAAyB,CAC/DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAM6J,EACNE,WAAY/Z,CACd,EACF,GAGA,MAAOka,CAFe,MAAMD,EAAoBzc,IAAI,IAE/BD,IAAI,CAACvE,OAAO,EAG7BsgB,EAAmB,MAAOjQ,IAC9B,IAAIwQ,EAAW,GAEbA,EADExQ,GAAY,GACH,6DACFA,GAAY,GACV,2DACFA,GAAY,GACV,2DAEA,2DAGb,IAAM4Q,EAAsB,MAAM9gB,MAAM,wBAAyB,CAC/DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAM6J,EACNE,WAAYlQ,CACd,EACF,GAGA,MAAOqQ,CAFe,MAAMD,EAAoBzc,IAAI,IAE/BD,IAAI,CAACvE,OAAO,EAG7B0gB,EAAkB,CAACf,EAAM3I,EAAMuB,EAAMnW,EAAOiG,EAAGrG,KACnD,GAAM,CAAEqG,EAAG8Y,CAAS,CAAEnf,EAAGof,CAAS,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,EACrCrK,EACAuB,EACAnW,EAAMnH,IAAI,CACV+G,EACA,QAEF2d,EAAK2B,QAAQ,CAACtK,EAAM,CAClB3O,EAAG8Y,EACHnf,EAAGof,EACHnmB,KAAMmH,EAAMnH,IAAI,CAChBsd,KAAMA,EACN3H,MAAOxO,EAAMwO,KAAK,EAAIsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KACnDqC,WAAYnf,KAAAA,EAAMnH,IAAI,EAE1B,ECvMaumB,EAAkC,eAC7C3D,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,CACAC,CAAAA,EACAgC,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,EAAAA,SAAAA,CAAAA,EAAAA,CAEA,IAAM/B,EAAWnb,EAAKwJ,WAAW,CAAC/C,WAAW,GACvC2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAY,kBACZC,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WAAY,CACd,GAEM0B,EAAqB,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAAsBpd,GAEjDqd,EAAuB,MAAMzhB,MAAMuhB,GAAoBrH,IAAI,CAAC,GAChEwH,EAAIlE,WAAW,IAEXmE,EAAuB,MAAMjE,EAAOkE,QAAQ,CAACH,GAE7CI,EAAcC,IAAcH,EAAqB7f,KAAK,CACtDigB,EAAYJ,EAAqBK,KAAK,CAACH,GAS7C,OAPArC,EAAKyC,SAAS,CAACN,EAAsB,CACnCzZ,EAAGuW,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAIqD,EAAUjgB,KAAK,CAAG,EAC5CD,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGmD,EAAUhgB,MAAM,CAAG,IAC1DD,MAAOigB,EAAUjgB,KAAK,CACtBC,OAAQggB,EAAUhgB,MAAM,GAGnByd,CACT,eEvBO,IAAMjN,EAAwB,MACnC3E,EACAF,EACAwC,EACAF,EACAF,EACAoS,KAEA,IAAMxE,EAAS,MAAMyE,EAAAA,WAAWA,CAACC,MAAM,GACjC9C,EAAQ,MAAM7B,CAAAA,EAAAA,EAAAA,CAAAA,EAAUC,GACxB,CAAE2E,MAAAA,CAAK,CAAEC,UAAAA,CAAS,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IAEvBne,EAAO,CACXwJ,YAAAA,EACAF,KAAAA,EACAwC,SAAAA,EACAF,aAAAA,EACAF,cAAAA,CACF,EAaA,OAXAoS,EAAiB,IAEjB,MAAMM,CAAAA,EAAAA,EAAAA,EAAAA,EAA4B9E,EAAQtZ,EAAMie,EAAO,GAAM/C,GAC7D4C,EAAiB,IAEjB,MAAM9C,EAAkC1B,EAAQtZ,EAAMie,EAAO/C,GAC7D4C,EAAiB,IACjB,MAAMb,EAAgC3D,EAAQtZ,EAAMie,EAAO/C,GAE3D4C,EAAiB,KAEV,MAAMO,CAAAA,EAAAA,EAAAA,EAAAA,EAAkB/E,EAAQ,iBACzC,qMEzCO,IAAMgF,EAAoB,MAC/BhF,EACAtZ,EACAib,EACAsD,EACArD,KAEA,IAAME,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEuD,KAAMD,EACN9C,WAAY,GACd,GAEMgD,EAAmB,sEAAuF9mB,MAAA,CAAvBqI,EAAK3H,OAAO,CAAC,EAAE,CAACuS,MAAM,EAEzG,CAAE9G,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACf2B,EACAvD,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,CACzB2jB,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IACpC,QAYF,OATAY,EAAK2B,QAAQ,CAAC0B,EAAkB,CAC9B3a,EAAGA,EACHrG,EAAGA,EACH/G,KAAM+jB,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,CAC/Bsd,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOoO,EAAAA,CAAMA,CAACI,aAAa,CAACxO,KAAK,CACjC2Q,WAAYvC,IAAAA,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,GAGhC0kB,CACT,EChCasD,EAAqB,MAC9BpF,EACAtZ,EACAib,EACAC,KAEF,IAAME,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CAACQ,WAAY,GAAG,GAElFviB,EAAQ,WACRylB,EAActE,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IAElD,CAAE1W,EAAG8a,CAAM,CAAEnhB,EAAGohB,CAAM,CAAE,CAAG/B,CAAAA,EAAAA,EAAAA,EAAAA,EAC7B5jB,EACAgiB,EAAMrB,YAAY,CAClBY,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CACtBioB,EACA,UAGJvD,EAAK2B,QAAQ,CAAC7jB,EAAO,CACnB4K,EAAG8a,EACHnhB,EAAGohB,EACHnoB,KAAM+jB,KAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CAC5Bsd,KAAMkH,EAAMrB,YAAY,CACxBxN,MAAOoO,EAAAA,CAAMA,CAACG,UAAU,CAACvO,KAAK,CAC9B2Q,WAAYvC,IAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,GAQpC,IAAM+b,EAAO,CACX,CACEhX,QANAuE,IAAAA,EAAK3H,OAAO,CAAC0C,MAAM,CACb,8CACA,+BAAgDpD,MAAA,CAApBqI,EAAK3H,OAAO,CAAC0C,MAAM,CAAC,uBAKtDiZ,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,MACV,EACA,CAAErjB,QAAS,GAAIuY,KAAMkH,EAAMnB,QAAQ,CAAErjB,KAAM+jB,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,EAChE,CACE+E,QAAS,qDACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,MACV,EACA,CACErjB,QAAS,sCACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACA,CACErjB,QAAS,wCACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACA,CACErjB,QAAS,kDACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACA,CACErjB,QAAS,sBACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACA,CAAErjB,QAAS,GAAIuY,KAAMkH,EAAMnB,QAAQ,CAAErjB,KAAM+jB,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,EAChE,CACE+E,QAAS,sDACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,MACV,EACA,CACErjB,QAAS,2CACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACA,CACErjB,QAAS,mCACTuY,KAAMkH,EAAMnB,QAAQ,CACpBrjB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3BooB,OAAQ,QACV,EACD,CAEGC,EAAWJ,EAAc,IAiB7B,OAfAlM,EAAKjd,OAAO,CAAC,OAAC,CAAEiG,QAAAA,CAAO,CAAEuY,KAAAA,CAAI,CAAEtd,KAAAA,CAAI,CAAEooB,OAAAA,CAAM,CAAE,CAAAhpB,EACrC,CAAEgO,EAAAA,CAAC,CAAE,CAAGgZ,CAAAA,EAAAA,EAAAA,EAAAA,EAAsBrhB,EAASuY,EAAMtd,EAAMqoB,EAAU,QACnE3D,EAAK2B,QAAQ,CAACthB,EAAS,CACrBqI,EAAAA,EACArG,EAAGshB,EACHroB,KAAAA,EACAsd,KAAAA,EACA3H,MAAOoO,EAAAA,CAAMA,CAACK,SAAS,CAACzO,KAAK,CAC7B2Q,WAAYtmB,IAAAA,EACZkd,WAAYkL,CACd,GAEAC,GAAYroB,IAAAA,CACd,GAEO0kB,CACT,EExGa4D,EAAgB,MAC3B1F,EACAtZ,EACAib,EACAC,SAuEIzI,EArEJ,IAAMwM,EAAYzD,CAAAA,EAAAA,EAAAA,EAAAA,EAAY,8BAAqB,IAC7CJ,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEM,UAAW0D,EACXxD,WAAY,GACd,GAEMrS,EAAY,CAChB/Q,QAAS2H,EAAK3H,OAAO,CAACoC,GAAG,CAAC,CAACgN,EAAQ9M,IAAW,EAC5CiQ,OAAQ5K,EAAK3H,OAAO,CAACsC,EAAM,CAACiQ,MAAM,CAClC0N,MAAO7Q,EAAO6Q,KAAK,CACrB,EACF,EAEM4G,EAAmB,MAAMtc,CAAAA,EAAAA,EAAAA,EAAAA,EAAY,MAAOwG,EAAW,CAC3DjG,QAAS,CACPW,EAAG,CACD5K,MAAO,CAAE+K,QAAS,GAAOwO,KAAM,YAAU,EACzC1O,YAAa,GACbC,KAAM,CAAEC,QAAS,EAAM,EACvBoI,MAAO,OACPe,MAAO,CACL4G,KAAM,CAAEtd,KAAM,EAAG,CACnB,CACF,EACA+G,EAAG,CACDsG,YAAa,GACbG,IAAK,IACLmI,MAAO,OACPnT,MAAO,CAAE+K,QAAS,GAAMwO,KAAM,WAAY,EAC1CzO,KAAM,CAAEC,QAAS,EAAK,CACxB,EACAE,OAAQ,CACNF,QAAS,GACTb,OAAQ,CAAE4Q,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC/B,EACAwC,MAAO,CACL+K,QAAS,GACTwO,KAAM,+BACR,EACA0M,WAAY,CACVC,OAAQ,SACRC,MAAO,SACPhT,MAAO,OACP2H,KAAM,CACJtd,KAAM,GACNooB,OAAQ,MACV,EACAQ,UAAW,CAAC5iB,EAAO6iB,IACV,GAAS5nB,MAAA,CAAN+E,EAAM,IAEpB,CACF,CACF,GAEM8iB,EAAqB,MAAM5jB,MAAMsjB,GAAkBpJ,IAAI,CAAC,GAC5DwH,EAAIlE,WAAW,IAEXqG,EAAqB,MAAMnG,EAAOkE,QAAQ,CAACgC,GAE3C/B,EAAcC,IAAc+B,EAAmB/hB,KAAK,CACpDigB,EAAY8B,EAAmB7B,KAAK,CAACH,GAE3CrC,EAAKyC,SAAS,CAAC4B,EAAoB,CACjC3b,EAAGuW,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAIqD,EAAUjgB,KAAK,CAAG,EAC5CD,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGmD,EAAUhgB,MAAM,CAAG,IAC1DD,MAAOigB,EAAUjgB,KAAK,CACtBC,OAAQggB,EAAUhgB,MAAM,GAKxB8U,EADEzS,IAAAA,EAAK3H,OAAO,CAAC0C,MAAM,CAEnB,+FAGOiF,IAAAA,EAAK3H,OAAO,CAAC0C,MAAM,CAE1B,4JAMA,8HAGA,OAA+BpD,MAAA,CAAxBqI,EAAK3H,OAAO,CAAC0C,MAAM,CAAG,EAAE,iCAGnC0X,EAAOiN,CAAAA,EAAAA,EAAAA,EAAAA,EAAiBjN,GAExB,IAAMkN,EACJtF,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGmD,EAAUhgB,MAAM,CAAG,IAEnD,CAAEmG,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACfrK,EACAyI,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrBipB,EAAuB,GACvB,UAaF,OAVAvE,EAAK2B,QAAQ,CAACtK,EAAM,CAClB3O,EAAGA,EACHrG,EAAGA,EACH/G,KAAM+jB,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3Bsd,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOoO,EAAAA,CAAMA,CAACK,SAAS,CAACzO,KAAK,CAC7B2Q,WAAYvC,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACjCkpB,UAAW,QACb,GAEOxE,CACT,0BC5HO,IAAMyE,EAA8B,MACzCvG,EACAtZ,EACAib,EACAC,KAEA,IAAM4E,EAAc,CAClBC,iBAAkB,EAAE,CACpBC,gBAAiB,EAAE,CACnBC,gBAAiB,EAAE,EAGrBjgB,EAAKxK,OAAO,CAAC,IACP6N,EAAIqB,SAAS,CAAG,GAClBob,EAAYC,gBAAgB,CAAC9e,IAAI,CAACoC,GACzBA,EAAIqB,SAAS,CAAG,IACzBob,EAAYG,eAAe,CAAChf,IAAI,CAACoC,GAEjCyc,EAAYE,eAAe,CAAC/e,IAAI,CAACoC,EAErC,GAEA,IAAM6c,EAAc,CAClBH,iBAAkB,kCAClBC,gBAAiB,kCACjBC,gBAAiB,gCACnB,EAEA,IAAK,GAAM,CAACE,EAAO7W,EAAK,GAAIqP,OAAOiB,OAAO,CAACkG,GACzC,GAAIxW,EAAKvO,MAAM,CAAG,EAAG,CACnB,IAAMoP,EAAab,EAAK/G,IAAI,CAAC,CAAChB,EAAGiB,IAAMA,EAAEC,UAAU,CAAGlB,EAAEkB,UAAU,CAClE,OAAM2d,EACJ9G,EACAnP,EACA8Q,EACAC,EACAgF,CAAW,CAACC,EAAM,CAEtB,CAEJ,EAEMC,EAA6B,MACjC9G,EACAhQ,EACA2R,EACAC,EACAhiB,KAEA,IAAMkiB,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQ,CAAC,EAAG2B,EAAoB,CACpEM,UAAW,cACXD,WAAYpiB,EAAMuN,WAAW,GAC7BgV,WAAY,GAAe9jB,MAAA,CAAZ2R,EAAKvO,MAAM,CAAC,cAC7B,GAEMmkB,EAAmB,MAAMmB,EAAsB/W,GAE/CkW,EAAqB,MAAM5jB,MAAMsjB,GAAkBpJ,IAAI,CAAC,GAC5DwH,EAAIlE,WAAW,IAEXqG,EAAqB,MAAMnG,EAAOkE,QAAQ,CAACgC,GAE3C/B,EAAcC,IAAc+B,EAAmB/hB,KAAK,CACpDigB,EAAY8B,EAAmB7B,KAAK,CAACH,GAS3C,OAPArC,EAAKyC,SAAS,CAAC4B,EAAoB,CACjC3b,EAAGuW,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAIqD,EAAUjgB,KAAK,CAAG,EAC5CD,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAG,EAAIoD,EAAUhgB,MAAM,CAAG,EAAI,GAClDD,MAAOigB,EAAUjgB,KAAK,CACtBC,OAAQggB,EAAUhgB,MAAM,GAGnByd,CACT,EAEMiF,EAAwB,MAAO/W,GAC5B,IAAIgX,QAAQ,IACjB,IAAMhc,EAASxB,SAASgE,aAAa,CAAC,UAChCjE,EAAMyB,EAAOic,UAAU,CAAC,MAOxBC,EAAMna,OAAOoa,gBAAgB,EAAI,EAOvC,GANAnc,EAAOzG,KAAK,CAACH,KAAK,CAAG,GAAS/F,MAAA,CALhB,IAKgB,MAC9B2M,EAAOzG,KAAK,CAACF,MAAM,CAAG,GAAUhG,MAAA,CALjB,IAKiB,MAChC2M,EAAO5G,KAAK,CAAGA,IAAQ8iB,EACvBlc,EAAO3G,MAAM,CAAGA,IAAS6iB,EACzB3d,EAAI+a,KAAK,CAAC4C,EAAKA,GAEX,CAAC3d,EAEH,OADAH,QAAQxG,KAAK,CAAC,kDACPwkB,OAAO,sBAGhB7e,EAAAA,EAAKA,CAACC,QAAQ,CAACC,EAAAA,CAAeA,EAE9B,IAAM4e,EAAiBrX,EAAK/O,MAAM,CAAC,GAAS8I,EAAIZ,UAAU,EAAI,IACxDme,EAAoBtX,EAAK/O,MAAM,CAAC,GAAS8I,EAAIZ,UAAU,CAAG,IAE1Doe,EAAYvX,EAAK7O,GAAG,CAAC,GAAS4I,EAAIA,GAAG,EACrCyd,EAAiBD,EAAUpmB,GAAG,CAAC,IACnC,IAAM4I,EAAMsd,EAAexY,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKjH,GACrD,OAAOiH,EAAMA,EAAIZ,UAAU,CAAG,IAChC,GAEMse,EAAoBF,EAAUpmB,GAAG,CAAC,IACtC,IAAM4I,EAAMud,EAAkBzY,IAAI,CAAC,GAAS9E,EAAIA,GAAG,GAAKjH,GACxD,OAAOiH,EAAMA,EAAIZ,UAAU,CAAG,IAChC,GAEA,IAAIZ,EAAAA,EAAKA,CAACgB,EAAK,CACbtG,KAAM,MACNyD,KAAM,CACJoD,OAAQyd,EACRvd,SAAU,CACR,CACElH,MAAO,yBACP4D,KAAM8gB,EACNtd,gBAAiB,yBACjBC,YAAa,uBACbC,YAAa,CACf,EACA,CACEtH,MAAO,6BACP4D,KAAM+gB,EACNvd,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,CACf,EACD,EAEHT,QAAS,CACP+d,UAAW,IACXrd,WAAY,GACZsd,UAAW,GACXrd,oBAAqB,GACrBC,OAAQ,CACNC,EAAG,CACD+J,IAAK,EACL3J,IAAK,IACLkJ,MAAO,CACLC,SAAU,GACV2G,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACA+G,EAAG,CACD2P,MAAO,CACL8T,SAAU,GACVlN,KAAM,CACJtd,KAAM,EACR,CACF,CACF,CACF,EACAyM,QAAS,CACPgB,OAAQ,CACNF,QAAS,GACT8P,SAAU,MACV3Q,OAAQ,CACN4Q,KAAM,CACJtd,KAAM,EACR,CACF,CACF,EACAyoB,WAAY,CACVlb,QAAS,EACX,CAoBF,EACAkd,mBAAoB,EACpBC,cAAe,CACjB,CACF,GAEApgB,WAAW,KAETqgB,EADiB/c,EAAOgd,SAAS,CAAC,aAEpC,EAAG,IACL,GC1MWlD,EAA8B,MACzC9E,EACAtZ,EACAib,EACAsD,EACArD,KAEA,IAAME,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEuD,KAAMD,EACN9C,WAAY,CACd,GAEMgD,EAAmB,GAEiDze,MAAAA,CADxEA,EAAKwJ,WAAW,CACjB,iFAEC7R,MAAA,CAFwEqI,EAAK0L,aAAa,CAACnI,OAAO,CAClG,GACA,KAEI,CAAEO,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACf2B,EACAvD,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,CACzB2jB,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IACpC,QAYF,OATAY,EAAK2B,QAAQ,CAAC0B,EAAkB,CAC9B3a,EAAGA,EACHrG,EAAGA,EACH/G,KAAM+jB,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,CAC/Bsd,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOoO,EAAAA,CAAMA,CAACI,aAAa,CAACxO,KAAK,CACjC2Q,WAAYvC,IAAAA,EAAAA,CAAMA,CAACI,aAAa,CAACnkB,IAAI,GAGhC0kB,CACT,6GEnCA,IAAMmG,EAAa,IAAItI,IAEVoC,EAAqB,eAChC/B,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,MACAhY,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAU,CAAC,EAEL,CACJub,KAAAA,EAAO,IAAI,CACXjD,UAAAA,EAAY,IAAI,CAChBD,WAAAA,EAAa,IAAI,CACjBG,WAAAA,EAAa,IAAI,CAClB,CAAGxY,EAEEmY,EAAO9B,EAAOkI,OAAO,CAAC,CAACnH,EAAAA,CAAMA,CAACC,SAAS,CAAED,EAAAA,CAAMA,CAACE,UAAU,CAAC,EAC3DW,EAAQ,MAAM7B,CAAAA,EAAAA,EAAAA,CAAAA,EAAUC,GAwB9B,OArBI2B,GACF,MAAMwG,EAAoBnI,EAAQ8B,EAAMH,GAItCuD,EACF,MAAMkD,EAASpI,EAAQ8B,GACdG,GACToG,EAAcvG,EAAMG,EAAWL,GAI7BI,GACFsG,EAAexG,EAAME,EAAYJ,GAI/BO,GACFoG,EAAezG,EAAM0G,OAAOrG,GAAaP,GAGpCE,CACT,EAGMqG,EAAsB,MAAOnI,EAAQ8B,EAAM2G,SAC3CC,EACJ,GAAIT,EAAWvH,GAAG,CAAC+H,GACjBC,EAAaT,EAAW5Y,GAAG,CAACoZ,OACvB,CACL,IAAME,EAAa,MAAMC,CAAAA,EAAAA,EAAAA,EAAAA,EAAUH,GACnCC,EAAa,MAAM1I,EAAOkE,QAAQ,CAACyE,GACnCV,EAAWnH,GAAG,CAAC2H,EAAUC,EAC3B,CAEA,IAAMG,EAAa9H,EAAAA,CAAMA,CAACC,SAAS,CAC7B8H,EAAc/H,EAAAA,CAAMA,CAACE,UAAU,CAErCsD,CAAAA,EAAAA,EAAAA,EAAAA,EAAUzC,EAAM4G,EAAY,CAC1Ble,EAAG,CAACuW,EAAAA,CAAMA,CAACC,SAAS,CAAG6H,CAAAA,EAAc,EACrC1kB,EAAG,CAAC4c,EAAAA,CAAMA,CAACE,UAAU,CAAG6H,CAAAA,EAAe,EACvC1kB,MAAOykB,EACPxkB,OAAQykB,CACV,EACF,EAGMV,EAAW,MAAOpI,EAAQ8B,SAG1BiH,EAFJ,IAAMC,EAAY,uBAGlB,GAAIf,EAAWvH,GAAG,CAACsI,GACjBD,EAAYd,EAAW5Y,GAAG,CAAC2Z,OACtB,CACL,IAAMC,EAAY,MAAML,CAAAA,EAAAA,EAAAA,EAAAA,EAAUI,GAClCD,EAAY,MAAM/I,EAAOkE,QAAQ,CAAC+E,GAClChB,EAAWnH,GAAG,CAACkI,EAAUD,EAC3B,CAEA,IAAMG,EAAWH,EAAUzE,KAAK,CAAC,KACjCC,CAAAA,EAAAA,EAAAA,EAAAA,EAAUzC,EAAMiH,EAAW,CACzBve,EAAGuW,EAAAA,CAAMA,CAACG,MAAM,CAChB/c,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGgI,EAAS7kB,MAAM,CACtDD,MAAO8kB,EAAS9kB,KAAK,CACrBC,OAAQ6kB,EAAS7kB,MAAM,EAE3B,EAGMgkB,EAAgB,CAACvG,EAAMliB,EAAOgiB,KAClC,IAAMvH,EAAW8G,EAAAA,CAAMA,CAACC,aAAa,CAAChkB,IAAI,CACpC,CAAEoN,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACf5jB,EACAgiB,EAAMrB,YAAY,CAClBlG,EACA0G,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG7G,EACpC,QAEFyH,EAAK2B,QAAQ,CAAC7jB,EAAO,CACnB4K,EAAAA,EACArG,EAAAA,EACA/G,KAAMid,EACNK,KAAMkH,EAAMrB,YAAY,CACxBxN,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KACpCqC,WAAYrJ,IAAAA,CACd,EACF,EAGMiO,EAAiB,CAACxG,EAAMliB,EAAOgiB,KACnC,IAAMvH,EAAW8G,EAAAA,CAAMA,CAACC,aAAa,CAAChkB,IAAI,CACpC,CAAEoN,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACf5jB,EACAgiB,EAAMrB,YAAY,CAClBlG,EACA0G,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG7G,EACpC,SAEFyH,EAAK2B,QAAQ,CAAC7jB,EAAO,CACnB4K,EAAAA,EACArG,EAAAA,EACA/G,KAAMid,EACNK,KAAMkH,EAAMrB,YAAY,CACxBxN,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KACpCqC,WAAYrJ,IAAAA,CACd,EACF,EAGMkO,EAAiB,CAACzG,EAAMK,EAAYP,KACxC,IAAMvH,EAAW8G,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAChC,CAAEoN,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACfrB,EACAP,EAAMnB,QAAQ,CACdpG,EACA0G,EAAAA,CAAMA,CAACG,MAAM,CACb,SAEFY,EAAK2B,QAAQ,CAACtB,EAAY,CACxB3X,EAAAA,EACArG,EAAAA,EACA/G,KAAMid,EACNK,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,IAAM,IAAK,IAAM,IAAK,IAAM,IACzC,EACF,wHC3IO,IAAM8H,EAAwB,eACnCnJ,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,CACAC,CAAAA,MACAgC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAW,EAGL/B,EAAWnb,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,CAACnE,WAAW,GACpD2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAY,kBACZC,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WALiB,GAAiC9jB,MAAA,CAA9B,CAACulB,EAAW,GAAK,EAAIA,EAM3C,GAEMwF,EAAiB1iB,EAAK2iB,UAAU,CAIhCC,EAAevf,EAHJiG,IAAI,CAACnB,IAAI,CACxB,GAAS9E,EAAInK,KAAK,GAAK8G,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,EAE7B8G,UAAU,CAACvJ,IAAI,CACtC,GAAe+O,EAAUnX,SAAS,GAAKC,EAAKD,SAAS,EAGjD8iB,EAAgB,CACpB,CAAEtnB,KAAM,oBAAkBia,QAASsN,EAAiBF,EAAc,EAAG,GAAI,EACzE,CACErnB,KAAM,iCACNia,QAASsN,EAAiBF,EAAc,GAAI,GAC9C,EACA,CAAErnB,KAAM,cAAeia,QAASsN,EAAiBF,EAAc,GAAI,GAAI,EACxE,CAEKzF,EAAqB,MAAMva,CAAAA,EAAAA,EAAAA,EAAAA,EAAY,QAAS,CACpDigB,cAAeA,EACfH,eAAgBA,CAClB,GAEMrF,EAAuB,MAAMzhB,MAAMuhB,GAAoBrH,IAAI,CAAC,GAChEwH,EAAIlE,WAAW,IAEXmE,EAAuB,MAAMjE,EAAOkE,QAAQ,CAACH,GAE7CI,EAAcC,IAAcH,EAAqB7f,KAAK,CACtDigB,EAAYJ,EAAqBK,KAAK,CAACH,GAE7CrC,EAAKyC,SAAS,CAACN,EAAsB,CACnCzZ,EAAGuW,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAIqD,EAAUjgB,KAAK,CAAG,EAC5CD,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGmD,EAAUhgB,MAAM,CAAG,IAC1DD,MAAOigB,EAAUjgB,KAAK,CACtBC,OAAQggB,EAAUhgB,MAAM,GAI1B,GAAM,CAAEolB,eAAAA,CAAc,CAAEC,eAAAA,CAAc,CAAEC,YAAAA,CAAW,CAAE,CAD/BC,CAAAA,EAAAA,EAAAA,EAAAA,EAAyBL,EAAeH,GAG1DjQ,EAAO,EACPsQ,CAAAA,EAAehoB,MAAM,CAAG,GAC1B0X,CAAAA,GAAQ,yBAEN9a,MAAA,CAF4BorB,EAAeloB,IAAI,CAC/C,QACA,8CACAmoB,EAAejoB,MAAM,CAAG,GAC1B0X,CAAAA,GAAQ,yBAEN9a,MAAA,CAF4BqrB,EAAenoB,IAAI,CAC/C,QACA,qDACAooB,EAAYloB,MAAM,CAAG,GACvB0X,CAAAA,GAAQ,yBAEN9a,MAAA,CAF4BsrB,EAAYpoB,IAAI,CAC5C,QACA,gDACS,KAAT4X,GACFA,CAAAA,EACE,+EAEJ,IAAM0Q,EAAgBzD,CAAAA,EAAAA,EAAAA,EAAAA,EAAiBlE,CAAAA,EAAAA,EAAAA,EAAAA,EAAW/I,IAC5C,CAAE3O,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAE,CAAGqf,CAAAA,EAAAA,EAAAA,EAAAA,EACfqG,EACAjI,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrB2jB,EAAAA,CAAMA,CAACE,UAAU,CAAGoD,EAAUhgB,MAAM,CAAG,IACvC,UAYF,OATAyd,EAAK2B,QAAQ,CAACoG,EAAe,CAC3Brf,EAAGA,EACHrG,EAAGA,EACH/G,KAAM+jB,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3Bsd,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOoO,EAAAA,CAAMA,CAACK,SAAS,CAACzO,KAAK,CAC7B2Q,WAAYvC,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,GAG5B0kB,CACT,EAEM0H,EAAmB,CAAC5L,EAAW3G,EAAO6S,IAExClM,EAAWzb,OAAO,CACfb,KAAK,CAAC2V,EAAO6S,GACb9oB,KAAK,CAAC,IACNuL,MAAM,CAAC,CAACwR,EAAKjR,IAAQiR,EAAMjH,SAAShK,GAAM,GAC1C,EAACgd,EAAM7S,CAAAA,EAAS,GACnB,ICzGS8S,EAAsB,CAACC,EAAaC,KAmB7C,IAAM1e,EAAe2e,EAjBU/oB,GAAG,CAAC,CAACyV,EAAQvV,KACxC,IAAM8oB,EAAYrT,SAASF,EAAOxT,KAAK,CAAE,IACnCgnB,EAAgBtT,SAASmT,EAAc9nB,OAAO,CAACd,EAAM,CAAE,IAE7D,MAAO,CACHmK,MAAOoL,EAAOpL,KAAK,CACnBgM,UAAWZ,EAAOW,UAAU,CAC5B4S,UAAAA,EACAC,cAAAA,EACA3M,WANe2M,EAAgBD,CAOnC,CACJ,GAGkClpB,MAAM,CAACuK,GAASA,EAAM4e,aAAa,EAAI,GAGrCnhB,IAAI,CAAC,CAAChB,EAAGiB,IAAMA,EAAEuU,UAAU,CAAGxV,EAAEwV,UAAU,EAG1EvS,EAAYK,EAAatK,MAAM,CAACuK,GAASA,IAAAA,EAAM4e,aAAa,EAAU5e,EAAMiS,UAAU,EAAI,GAa9F,OAVIvS,EAAUzJ,MAAM,CAAG,GACnByJ,CAAAA,EAAYA,EAAU7M,MAAM,CAACkN,EAAatK,MAAM,CAACuK,GAASA,IAAAA,EAAM4e,aAAa,EAAU5e,EAAMiS,UAAU,EAAI,KAI3GvS,EAAUzJ,MAAM,CAAG,GACnByJ,CAAAA,EAAYA,EAAU7M,MAAM,CAACkN,EAAatK,MAAM,CAACuK,GAASA,IAAAA,EAAM4e,aAAa,EAAU5e,EAAM2e,SAAS,EAAI,KAIvGjf,EAAU5J,KAAK,CAAC,EAAG,EAC9B,urBC9BO,IAAM+oB,EAA6B,eACxCrK,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,CACAC,CAAAA,MACAgC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAW,EAEL/B,EAAWnb,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,CAACnE,WAAW,GAEpD2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAY,cACZC,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WAJiB,GAAsB9jB,MAAA,CAAnB,CAACulB,EAAW,GAAK,EAKvC,GAKMqG,EAAgBlgB,EAHLiG,IAAI,CAACnB,IAAI,CACxB,GAAS9E,EAAInK,KAAK,GAAK8G,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,EAE5B8G,UAAU,CAACvJ,IAAI,CACvC,GAAe+O,EAAUnX,SAAS,GAAKC,EAAKD,SAAS,EAEjDyE,EAAY6e,EAAoBrjB,EAAKO,OAAO,CAAEgjB,GAE9CjL,EAAQtY,EAAK3H,OAAO,CAAC6kB,EAAS,CAAC5E,KAAK,CACpC5T,EAAY1E,EAAK3H,OAAO,CAAC6kB,EAAS,CAACxY,SAAS,CAE5CgX,EAAgBF,CAAAA,EAAAA,EAAAA,EAAAA,EAAWoI,EAAsBtL,EAAO5T,GAAY,IACpEkX,EAAkBJ,CAAAA,EAAAA,EAAAA,EAAAA,EAAW,MAAMqI,EAAwBrf,IAE3DwX,EAA0B3B,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IACpE2B,EACEf,EACA,cACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjBP,EAAAA,CAAMA,CAACG,MAAM,CACbwB,GAGF,IAAMC,EAAyBC,CAAAA,EAAAA,EAAAA,EAAAA,EAC7B,cACAhB,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CACtBslB,EACAvB,KAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,EAExBylB,EACEf,EACAM,EACAR,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBT,EAAAA,CAAMA,CAACG,MAAM,CACbyB,EAAyB,IAG3B,IAAMG,EACJF,CAAAA,EAAAA,EAAAA,EAAAA,EACER,EACAR,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrBulB,EAAyB,GACzBxB,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,EACnB,GAmBN,OAlBAylB,EACEf,EACA,yBACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjBP,EAAAA,CAAMA,CAACG,MAAM,CACb4B,GAGFD,EACEf,EACAQ,EACAV,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBT,EAAAA,CAAMA,CAACG,MAAM,CACb4B,EAA4B,IAGvBhB,CACT,EAEMwI,EAAwB,CAACtL,EAAO5T,KAMpC,IAAIof,EAAgB,GAYpB,OAVEA,EADEpf,EAAY,IAEZ,qHACOA,EAAY,GAEnB,6GAGA,mFAGG4X,oFACJ9c,OAAO,CAAC,UAfO8Y,EAAQ,GAAK,gBAAkB,UAgB9C9Y,OAAO,CAAC,cAAeskB,EAC5B,EAEMD,EAA0B,MAAOrf,IACrC,IAAMuf,EAAevf,EAAU/J,GAAG,CAAC,GAAWqK,EAAMA,KAAK,EAAEvK,MAAM,CAACypB,SAElE,GAAID,IAAAA,EAAahpB,MAAM,CAAQ,CAG7B,IAAMkpB,EAAwB,MAAMroB,MAAM,wBAAyB,CACjEC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAPF,uKAQE+J,WAAY0H,CACd,EACF,GAEA,MAAOzc,CADQ,MAAMwc,EAAsBhkB,IAAI,IACjCD,IAAI,CAACvE,OAAO,CAG5B,IAAM0oB,EAAWJ,EAAanpB,KAAK,CAAC,EAAG,GAAGH,GAAG,CAAC,MAAO2pB,EAAazpB,KAOhE,IAAM0pB,EAAsBC,CALzB,iCAA4C3sB,MAAA,CAAZysB,EAAY,mDAC5C,0CAAkDzsB,MAAA,CAAZysB,EAAY,mCAClD,qBAA6BzsB,MAAA,CAAZysB,EAAY,oDAC/B,CAE4CzpB,EAAM,CAC7CspB,EAAwB,MAAMroB,MAAM,wBAAyB,CACjEC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAM4R,EACN7H,WAAY0H,CACd,EACF,GAEA,MAAOzc,CADQ,MAAMwc,EAAsBhkB,IAAI,IACjCD,IAAI,CAACvE,OAAO,GAI5B,MAAO8oB,CADqB,MAAMjE,QAAQkE,GAAG,CAACL,EAAAA,EACnBtpB,IAAI,CAAC,OAClC,EAEMshB,EAAkB,CAACf,EAAM3I,EAAMuB,EAAMnW,EAAOiG,EAAGrG,KACnD,GAAM,CAAEqG,EAAG8Y,CAAS,CAAEnf,EAAGof,CAAS,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,EACrCrK,EACAuB,EACAnW,EAAMnH,IAAI,CACV+G,EACA,QAEF2d,EAAK2B,QAAQ,CAACtK,EAAM,CAClB3O,EAAG8Y,EACHnf,EAAGof,EACHnmB,KAAMmH,EAAMnH,IAAI,CAChBsd,KAAMA,EACN3H,MAAOxO,EAAMwO,KAAK,EAAIsO,CAAAA,EAAAA,EAAAA,GAAAA,EAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KACnDqC,WAAYnf,KAAAA,EAAMnH,IAAI,EAE1B,gBC/KO,IAAM+tB,EAA6B,eACxCnL,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,CACAC,CAAAA,MACAgC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAW,EAKL0F,EAAevf,EAHJiG,IAAI,CAACnB,IAAI,CACxB,GAAS9E,EAAInK,KAAK,GAAK8G,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,EAE7B8G,UAAU,CAACvJ,IAAI,CACtC,GAAe+O,EAAUnX,SAAS,GAAKC,EAAKD,SAAS,EACrDtE,OAAO,CAEHipB,EAAsBC,EAAkB3kB,EAAKO,OAAO,CAAEqiB,GAGtDzH,EAAWnb,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,CAACnE,WAAW,GACpD2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAYE,CAAAA,EAAAA,EAAAA,EAAAA,EAAW,gCAA2B,IAClDD,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WALiB,GAAiC9jB,MAAA,CAA9B,CAACulB,EAAW,GAAK,EAAIA,EAM3C,GAEMC,EAAqB,MAAMyH,EAAiBF,GAC5CrH,EAAuB,MAAMzhB,MAAMuhB,GAAoBrH,IAAI,CAAC,GAChEwH,EAAIlE,WAAW,IAEXmE,EAAuB,MAAMjE,EAAOkE,QAAQ,CAACH,GAE7CI,EAAcC,IAAcH,EAAqB7f,KAAK,CACtDigB,EAAYJ,EAAqBK,KAAK,CAACH,GAE7CrC,EAAKyC,SAAS,CAACN,EAAsB,CACnCzZ,EAAGuW,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAIqD,EAAUjgB,KAAK,CAAG,EAC5CD,EAAG4c,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAGmD,EAAUhgB,MAAM,CAAG,IAC1DD,MAAOigB,EAAUjgB,KAAK,CACtBC,OAAQggB,EAAUhgB,MAAM,EAE5B,EAEMgnB,EAAoB,CAACrB,EAAaV,KACtC,IAAMiC,EAAUvB,EAAYzd,MAAM,CAAC,CAACif,EAAK5U,KACvC,GAAM,CAAEW,WAAAA,CAAU,CAAE/L,MAAAA,CAAK,CAAEqL,gBAAAA,CAAe,CAAEzT,MAAAA,CAAK,CAAE,CAAGwT,EAChDwT,EAAgBtT,SAASwS,CAAY,CAACzS,EAAgB,CAAE,IACxDsT,EAAYrT,SAAS1T,EAAO,IAGlC,OAFKooB,CAAG,CAACjU,EAAW,EAAEiU,CAAAA,CAAG,CAACjU,EAAW,CAAG,EAAE,EAC1CiU,CAAG,CAACjU,EAAW,CAAC5P,IAAI,CAAC,CAAE6D,MAAAA,EAAO4e,cAAAA,EAAeD,UAAAA,CAAU,GAChDqB,CACT,EAAG,CAAC,GAOJ,OAJAnM,OAAOpjB,IAAI,CAACsvB,GAASrvB,OAAO,CAAC,IAC3BqvB,CAAO,CAAC/T,EAAU,CAAGiU,EAAsBF,CAAO,CAAC/T,EAAU,CAC/D,GAEO+T,CACT,EAEME,EAAwB,IAC5B,IAAMC,EAAO,IAAIC,IACjB,OAAOC,EAAO3qB,MAAM,CAAC,GACnB,CAAIyqB,EAAKhL,GAAG,CAAClV,EAAMA,KAAK,IAGxBkgB,EAAKG,GAAG,CAACrgB,EAAMA,KAAK,EACb,IAEX,EAEM8f,EAAmB,MAAOF,GACvB,IAAIpE,QAAQ,IACjB,IAAMhc,EAASxB,SAASgE,aAAa,CAAC,UAChCjE,EAAMyB,EAAOic,UAAU,CAAC,MAOxBC,EAAMna,OAAOoa,gBAAgB,EAAI,EAOvC,GANAnc,EAAOzG,KAAK,CAACH,KAAK,CAAG,GAAS/F,MAAA,CALhB,IAKgB,MAC9B2M,EAAOzG,KAAK,CAACF,MAAM,CAAG,GAAUhG,MAAA,CALjB,IAKiB,MAChC2M,EAAO5G,KAAK,CAAGA,IAAQ8iB,EACvBlc,EAAO3G,MAAM,CAAGA,IAAS6iB,EACzB3d,EAAI+a,KAAK,CAAC4C,EAAKA,GAEX,CAAC3d,EAEH,OADAH,QAAQxG,KAAK,CAAC,kDACPwkB,OAAO,sBAIhB,IAAM0E,EAAYC,MAAMC,IAAI,CAC1B,IAAIL,IACFtM,OAAOiB,OAAO,CAAC8K,GAAqBa,OAAO,CAAC,OAAC,EAAGC,EAAW,CAAA1vB,SACzD0vB,EAAW/qB,GAAG,CAAC,GAAWqK,EAAMA,KAAK,MAKrCxB,EAAW,EAAE,CAGnBqV,OAAOiB,OAAO,CAAC8K,GAAqBlvB,OAAO,CACzC,CAAAM,EAA0B6E,QAAzB,CAACmW,EAAW0U,EAAW,CAAA1vB,EAChB2vB,EAAYC,EAAc/qB,GAEhC2I,EAASrC,IAAI,CAAC,CACZ7E,MAAO,GAAazE,MAAA,CAAVmZ,GACV9Q,KAAMolB,EAAU3qB,GAAG,CAAC,IAClB,IAAMkrB,EAAYH,EAAWrd,IAAI,CAAC,GAAOwJ,EAAE7M,KAAK,GAAKA,GACrD,OAAO6gB,EAAYA,EAAUlC,SAAS,CAAG,CAC3C,GACAjgB,gBAAiB,QAAkB7L,MAAA,CAAV8tB,EAAU,UACnChiB,YAAa,QAAkB9L,MAAA,CAAV8tB,EAAU,QAC/B/hB,YAAa,EACbwJ,qBAAsB,QAAkBvV,MAAA,CAAV8tB,EAAU,QACxCjsB,KAAM,EACR,EACF,GAIF8J,EAASrC,IAAI,CAAC,CACZ7E,MAAO,0BACP4D,KAAMolB,EAAU3qB,GAAG,CAAC,IAClB,IAAMkrB,EAAYhN,OAAOiN,MAAM,CAAClB,GAC7BmB,IAAI,GACJ1d,IAAI,CAAC,GAAOwJ,EAAE7M,KAAK,GAAKA,GAC3B,OAAO6gB,EAAYA,EAAUjC,aAAa,CAAG,CAC/C,GACAjgB,YAAa,2BACbC,YAAa,EACbwJ,qBAAsB,2BACtB1T,KAAM,EACR,GAGA,IAAIqI,EAAAA,EAAKA,CAACgB,EAAK,CACbtG,KAAM,QACNyD,KAAM,CACJoD,OAAQgiB,EACR9hB,SAAAA,CACF,EACAL,QAAS,CACPU,WAAY,GACZsd,UAAW,GACXrd,oBAAqB,GACrBC,OAAQ,CACNgE,EAAG,CACDie,WAAY,CAAE7hB,QAAS,EAAK,EAC5B8hB,aAAc,EACdC,aAAc,EACd5Y,MAAO,CAAEC,SAAU,EAAGpJ,QAAS,EAAM,EACrCiQ,YAAa,CAAEF,KAAM,CAAEtd,KAAM,EAAG2c,QAAS,EAAG,CAAE,CAChD,CACF,EACAlQ,QAAS,CACPgB,OAAQ,CACN4P,SAAU,MACV3Q,OAAQ,CAAE4Q,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC/B,EACAyoB,WAAY,CACVlb,QAAS,EACX,CACF,CACF,CACF,GAEAjD,WAAW,KAETqgB,EADiB/c,EAAOgd,SAAS,CAAC,aAEpC,EAAG,IACL,GAGIoE,EAAgB,IACpB,IAAM7W,EAAS,CACb,cACA,cACA,cACD,CACD,OAAOA,CAAM,CAAClU,EAAQkU,EAAO9T,MAAM,CAAC,ygECjL/B,IAAMkrB,EAAyB,eACpC3M,CAAAA,CACAtZ,CAAAA,CACAib,CAAAA,CACAC,CAAAA,MACAgC,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAW,EAGL/B,EAAWnb,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,CAACnE,WAAW,GACpD2U,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CACtEK,WAAY,kBACZC,UAAWC,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAU,IAChCM,WALiB,GAAiC9jB,MAAA,CAA9B,CAACulB,EAAW,GAAK,EAAIA,EAM3C,GAEMgJ,EAAUlmB,EAAKmmB,QAAQ,CAAChe,IAAI,CAChC,GAAS9E,EAAI+iB,SAAS,GAAKpmB,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,EAGpDyb,EAAchM,EAAAA,CAAMA,CAACG,MAAM,CAC3B8L,EAAejM,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAClCiM,EAAc,CAAClM,EAAAA,CAAMA,CAACC,SAAS,CAAG,EAAID,EAAAA,CAAMA,CAACG,MAAM,EAAI,EACvDgM,EAAmBnM,EAAAA,CAAMA,CAACE,UAAU,CAAGF,EAAAA,CAAMA,CAACG,MAAM,CAAG,IAGzDiM,EAAeD,EACnBrK,EACEf,EACA,UACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjByL,EACAI,GAGF,IAAMC,EAAqB,GAA0BR,MAAAA,CAAvBA,EAAQE,SAAS,CAAC,OAAqBzuB,MAAA,CAAhBuuB,EAAQS,OAAO,EAC9DC,EAAuB,MAAMhrB,MAAM,wBAAyB,CAChEC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAMiU,EACNlK,WAAYqK,CACd,EACF,GACMC,EAAgB,MAAMF,EAAqB3mB,IAAI,GAYrDwmB,EAVetK,EACbf,EAFkBI,CAAAA,EAAAA,EAAAA,EAAAA,EAAWsL,EAAc9mB,IAAI,CAACvE,OAAO,CAAE8qB,EAAc,IAIvErL,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBuL,EACAI,EAAe,IAID,GAChBtK,EACEf,EACA,eACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjByL,EACAI,GAMFA,EAAetK,EACbf,EAJmB8K,EAAQa,UAAU,CACpCtsB,GAAG,CAAC,GAAc,KAA4C9C,MAAA,CAAvC6jB,CAAAA,EAAAA,EAAAA,EAAAA,EAAWwL,EAAUT,EAAc,MAC1D1rB,IAAI,CAAC,MAINqgB,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBuL,EACAI,EAAe,IAIjB,IAAIQ,EAAgBT,EACpBrK,EACEf,EACA,wBACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjB0L,EACAW,GAGF,IAAMC,EAAsB,MAAMtrB,MAAM,wBAAyB,CAC/DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAMyT,EAAQiB,MAAM,CACpB3K,WAAY4K,CACd,EACF,GACMC,EAAe,MAAMH,EAAoBjnB,IAAI,GAYnDgnB,EAVgB9K,EACdf,EAFiBI,CAAAA,EAAAA,EAAAA,EAAAA,EAAW6L,EAAarnB,IAAI,CAACvE,OAAO,CAAE8qB,EAAc,IAIrErL,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBwL,EACAW,EAAgB,IAID,GACjB9K,EACEf,EACA,wBACAF,EAAMpB,SAAS,CACfW,EAAAA,CAAMA,CAACG,UAAU,CACjB0L,EACAW,GAGF,IAAMK,EAAsB,MAAM1rB,MAAM,wBAAyB,CAC/DC,OAAQ,OACRC,QAAS,CACP,eAAgB,kBAClB,EACAC,KAAMC,KAAKC,SAAS,CAAC,CACnBwW,KAAMyT,EAAQqB,UAAU,CACxB/K,WAAYgL,CACd,EACF,GACMC,EAAe,MAAMH,EAAoBrnB,IAAI,GAcnD,OATAkc,EACEf,EALqBI,CAAAA,EAAAA,EAAAA,EAAAA,EACrBiM,EAAaznB,IAAI,CAACvE,OAAO,CACzB8qB,EAAc,IAKdrL,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAChBwL,EACAW,EAAgB,IAGX7L,CACT,EAGMe,EAAkB,CAACf,EAAM3I,EAAMuB,EAAMnW,EAAOiG,EAAGrG,KAC/B,UAAhB,OAAOgV,GACTA,CAAAA,EAAOqP,OAAOrP,EAAAA,EAEhB,IAAMiV,EAAQjV,EAAKnY,KAAK,CAAC,MACrBykB,EAAWthB,EAiBf,OAfAiqB,EAAMlyB,OAAO,CAAC,IACMwe,EAAK2T,iBAAiB,CAACC,EAAM/pB,EAAMnH,IAAI,EAGzD0kB,EAAK2B,QAAQ,CAAC6K,EAAM,CAClB9jB,EAHgBA,EAIhBrG,EAAGshB,EACHroB,KAAMmH,EAAMnH,IAAI,CAChBsd,KAAMA,EACN3H,MAAOxO,EAAMwO,KAAK,EAAIsO,IAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KACnDqC,WAAYnf,IAAAA,EAAMnH,IAAI,GAExBqoB,GAAYlhB,IAAAA,EAAMnH,IAAI,GAGjBqoB,CACT,gq7DErLO,IAAM8I,EAAuB,MAAOvO,EAAQtZ,EAAMib,EAAoBC,EAAOgC,KAEhF,IAAM/B,EAAWnb,EAAK3H,OAAO,CAAC6kB,EAAS,CAACtS,MAAM,CACxCsb,EAAUlmB,EAAKmmB,QAAQ,CAAChe,IAAI,CAAC9E,GAAOA,EAAI+iB,SAAS,GAAKjL,GACtD2M,EAAiB5B,CAAAA,MAAAA,EAAAA,KAAAA,EAAAA,EAASS,OAAO,GAAI,yCAGrCvL,EAAO,MAAMC,CAAAA,EAAAA,EAAAA,CAAAA,EAAmB/B,EAAQtZ,EAAMib,EAAoB,CAACQ,WAFtD,GAAuC9jB,MAAA,CAApC,CAAEulB,EAAW,GAAK,EAAMA,CAAAA,EAAS,GAEwC,GAEzF6K,EAAoBrI,CAAAA,EAAAA,EAAAA,EAAAA,EAAiBlE,CAAAA,EAAAA,EAAAA,EAAAA,EAAWL,EAAS1U,WAAW,GAAI,KACxE,CAAE3C,EAAG8a,CAAM,CAAEnhB,EAAGohB,CAAM,CAAE,CAAG/B,CAAAA,EAAAA,EAAAA,EAAAA,EAC7BiL,EACA7M,EAAMrB,YAAY,CAClBY,IAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CACtB2jB,EAAAA,CAAMA,CAACE,UAAU,CAAG,EAAI,IACxB,UAEJa,EAAK2B,QAAQ,CAACgL,EAAmB,CAC7BjkB,EAAG8a,EAAS,GACZnhB,EAAGohB,EACHnoB,KAAM+jB,IAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,CAC5Bsd,KAAMkH,EAAMrB,YAAY,CACxBxN,MAAOoO,EAAAA,CAAMA,CAACG,UAAU,CAACvO,KAAK,EAAIsO,IAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAC/DqC,WAAYvC,IAAAA,EAAAA,CAAMA,CAACG,UAAU,CAAClkB,IAAI,GAKtC,IAAMsxB,EAA0BxM,CAAAA,EAAAA,EAAAA,EAAAA,EAAWsM,EAAgB,IACrD,CAAEhkB,EAAGmkB,CAAK,CAAExqB,EAAGyqB,CAAK,CAAE,CAAGpL,CAAAA,EAAAA,EAAAA,EAAAA,EAC3BkL,EACA9M,EAAMnB,QAAQ,CACdU,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CACrBmoB,EAAS,IACT,UAWJ,OATAzD,EAAK2B,QAAQ,CAACiL,EAAyB,CACnClkB,EAAGmkB,EACHxqB,EAAGyqB,EACHxxB,KAAM+jB,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,CAC3Bsd,KAAMkH,EAAMnB,QAAQ,CACpB1N,MAAOoO,EAAAA,CAAMA,CAACK,SAAS,CAACzO,KAAK,EAAIsO,IAAI,GAAK,IAAK,GAAK,IAAK,GAAK,KAC9DqC,WAAYvC,KAAAA,EAAAA,CAAMA,CAACK,SAAS,CAACpkB,IAAI,GAG9B0kB,CACX,EChCa1a,EAAc,MACzBnF,EACAwE,EACAI,EACAE,EACAG,EACAsd,KAEA,IAAMxE,EAAS,MAAMyE,EAAAA,WAAWA,CAACC,MAAM,GACjC9C,EAAQ,MAAM7B,CAAAA,EAAAA,EAAAA,CAAAA,EAAUC,GACxB,CAAE2E,MAAAA,CAAK,CAAEC,UAAAA,CAAS,CAAE,CAAGC,CAAAA,EAAAA,EAAAA,EAAAA,IAEvBne,EAAO,CACXzE,KAAAA,EACAwE,UAAAA,EACA1H,QAAS8H,EACTmJ,KAAIA,EACJ6c,SAAQA,EACRxD,WAAYniB,EACZD,QAASF,CACX,EAEAyd,EAAiB,IAEjB,MAAMQ,CAAAA,EAAAA,EAAAA,EAAAA,EAAkBhF,EAAQtZ,EAAMie,EAAO,GAAM/C,GACnD4C,EAAiB,IAEjB,MAAMY,CAAAA,EAAAA,EAAAA,EAAAA,EAAmBpF,EAAQtZ,EAAMie,EAAO/C,GAC9C4C,EAAiB,IAEjB,MAAMkB,CAAAA,EAAAA,EAAAA,EAAAA,EAAc1F,EAAQtZ,EAAMke,EAAWhD,GAC7C4C,EAAiB,IAGjB,IAAK,IAAIhH,EAAI,EAAGA,EAAI9W,EAAK3H,OAAO,CAAC0C,MAAM,CAAE+b,IACvC,MAAM+Q,EAAqBvO,EAAQtZ,EAAMie,EAAO/C,EAAOpE,GACvDgH,EAAiB,GAAKhH,EAAK9W,EAAK3H,OAAO,CAAC0C,MAAM,CAAI,IAClD,MAAM4oB,EAA2BrK,EAAQtZ,EAAMie,EAAO/C,EAAOpE,GAC7D,MAAM2L,EAAsBnJ,EAAQtZ,EAAMke,EAAWhD,EAAOpE,GAC5D,MAAM2N,EAA2BnL,EAAQtZ,EAAMke,EAAWhD,EAAOpE,GACjE,MAAMmP,EAAuB3M,EAAQtZ,EAAMie,EAAO/C,EAAOpE,GAiB3D,OAdAgH,EAAiB,IAEjB,MAAM+B,CAAAA,EAAAA,EAAAA,EAAAA,EACJvG,EACAtd,KAAKsG,KAAK,CAAC7M,aAAa2B,OAAO,CAAC,iBAChC8mB,EACAhD,GAEF4C,EAAiB,IAIjBA,EAAiB,KAEV,MAAMqK,CAAAA,EAAAA,EAAAA,EAAAA,EAAQ7O,EAAQ,cAC/B,iWCvEO,IAAM4J,EAA2B,CAACL,EAAeH,KACtD,IAAM0F,EAAgBvF,EAAcpoB,GAAG,CAAC,CAAC4tB,EAAU1tB,KAEjD,IAAMoc,EAAauR,CADa,CAAC3tB,EAAM,CACV6a,OAAO,CAAG6S,EAAS7S,OAAO,CACvD,MAAO,CACLja,KAAM8sB,EAAS9sB,IAAI,CACnBwb,WAAAA,CACF,CACF,GAaA,MAAO,CACLgM,eAXqBqF,EACpB7tB,MAAM,CAAC,GAAWuK,EAAMiS,UAAU,CAAG,GACrCtc,GAAG,CAAC,GAAWqK,EAAMvJ,IAAI,EAU1BynB,eATqBoF,EACpB7tB,MAAM,CAAC,GAAWuK,EAAMiS,UAAU,CAAG,GACrCtc,GAAG,CAAC,GAAWqK,EAAMvJ,IAAI,EAQ1B0nB,YAPkBmF,EACjB7tB,MAAM,CAAC,GAAWuK,IAAAA,EAAMiS,UAAU,EAClCtc,GAAG,CAAC,GAAWqK,EAAMvJ,IAAI,CAM5B,CACF,EAEamkB,EAAmB,IACV,UAAhB,OAAOjN,GACTA,CAAAA,EAAOqP,OAAOrP,EAAAA,EAEhB,IAAMiV,EAAQjV,EAAKnY,KAAK,CAAC,MACnBiuB,EAAY3a,KAAK1J,GAAG,IAAIwjB,EAAMjtB,GAAG,CAAC,GAAUmtB,EAAK7sB,MAAM,GAS7D,OAAOytB,EAPqB/tB,GAAG,CAAC,IAC9B,IAAM4Y,EAAU,CAACkV,EAAYX,EAAK7sB,MAAM,EAAI,EAG5C,MAAO0tB,IAFiBC,MAAM,CAAC9a,KAAK+a,KAAK,CAACtV,IAErBuU,EADA,IAAIc,MAAM,CAAC9a,KAAKqB,IAAI,CAACoE,GAE5C,GAEqBxY,IAAI,CAAC,KAC5B,EAEaiiB,EAAwB,SACnCrK,CAAAA,CACAuB,CAAAA,CACAL,CAAAA,CACAiV,CAAAA,MAiBI9kB,EAhBJub,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAQ,QACR/E,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAYD,EAAAA,CAAMA,CAACC,SAAS,CAC5BE,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAASH,EAAAA,CAAMA,CAACG,MAAM,CAGF,UAAhB,OAAO/H,GACTA,CAAAA,EAAOqP,OAAOrP,EAAAA,EAKhB,IAAMoW,EAAWjb,KAAK1J,GAAG,IACpBwjB,EAJcptB,KAAK,CAAC,OAIdG,GAAG,CAAC,GAAUuZ,MAAAA,EAAAA,KAAAA,EAAAA,EAAM2T,iBAAiB,CAACC,EAAMjU,KAKvD,GAAI0L,UAAAA,EACFvb,EAAIwW,EAAYE,EAASqO,OACpB,GAAIxJ,SAAAA,EACTvb,EAAI0W,OACC,GAAI6E,WAAAA,EACTvb,EAAI,CAACwW,EAAYuO,CAAAA,EAAY,OAE7B,MAAM,MAAU,sBAA4BlxB,MAAA,CAAN0nB,IAUxC,MAAO,CAAEvb,EAAAA,EAAGrG,EAFFmrB,EAJSjV,IAAAA,CAML,CAChB,EAEa6H,EAAa,SAAC/I,CAAAA,MAAMqW,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAgB,EAC3B,WAAhB,OAAOrW,GACTA,CAAAA,EAAOqP,OAAOrP,EAAAA,EAEhB,IAAMsW,EAAQtW,EAAKnY,KAAK,CAAC,KACrBotB,EAAQ,EAAE,CACVsB,EAAc,GAElB,IAAK,IAAIlS,EAAI,EAAGA,EAAIiS,EAAMhuB,MAAM,CAAE+b,IAAK,CACrC,IAAMmS,EAAOF,CAAK,CAACjS,EAAE,CACjBkS,EAAYjuB,MAAM,CAAGkuB,EAAKluB,MAAM,EAAI+tB,EACtCE,GAAeC,EAAO,KAEtBvB,EAAMzmB,IAAI,CAAC+nB,EAAYE,IAAI,IAC3BF,EAAcC,EAAO,IAEzB,CAGA,OADAvB,EAAMzmB,IAAI,CAAC+nB,EAAYE,IAAI,IACpBxB,EAAM7sB,IAAI,CAAC,KACpB,EAEaqhB,EAAqB,CAChCzJ,EACAuB,EACAL,EACAiV,EACA5L,KAGoB,UAAhB,OAAOvK,GACTA,CAAAA,EAAOqP,OAAOrP,EAAAA,EAQTmW,EAHiBlB,EAHLptB,KAAK,CAAC,MAGKS,MAAM,CAAGiiB,GAO5BmB,EAAsB,IAAO,EACxCF,MAAQ,yBACRC,UAAY,6BACd,GAEaiK,EAAU,MAAO7O,EAAQ6P,IAEvB,IAAIC,KAAK,CADL,MAAM9P,EAAO+P,IAAI,GACF,CAAE,CAAE9sB,KAAM,iBAAkB,GAQjD8hB,EAAoB,MAAO/E,EAAQ6P,KAE9C,IAAMG,EAAO,IAAIF,KAAK,CADL,MAAM9P,EAAO+P,IAAI,GACF,CAAE,CAAE9sB,KAAM,iBAAkB,GACtDsK,EAAO/D,SAASgE,aAAa,CAAC,IACpCD,CAAAA,EAAKtQ,IAAI,CAAG+P,IAAIC,eAAe,CAAC+iB,GAChCziB,EAAKE,QAAQ,CAAGoiB,EAChBtiB,EAAKI,KAAK,EACZ,EAGaib,EAAY,MAAOH,IAC9B,GAAI,CACF,IAAMnhB,EAAW,MAAMhF,MAAMmmB,GAC7B,GAAI,CAACnhB,EAASG,EAAE,CACd,MAAM,MAAU,yBAA6CpJ,MAAA,CAApBiJ,EAAS2oB,UAAU,GAE9D,OAAO,MAAM3oB,EAASwY,WAAW,EACnC,CAAE,MAAOld,EAAO,CACd,MAAMA,CACR,CACF,EAEa2hB,EAAY,CAACzC,EAAM4G,EAAY/e,KAC1C,GAAM,CAAEa,EAAAA,CAAC,CAAErG,EAAAA,CAAC,CAAEC,MAAAA,CAAK,CAAEC,OAAAA,CAAM,CAAE,CAAGsF,EAChCmY,EAAKyC,SAAS,CAACmE,EAAY,CACzBle,EAAAA,EACArG,EAAAA,EACAC,MAAAA,EACAC,OAAAA,CACF,EACF,EAIaiF,EAAc,eAAOrG,CAAAA,CAAMyD,CAAAA,MAAMwpB,EAAAA,UAAAA,MAAAA,CAAAA,GAAAA,KAAAA,IAAAA,SAAAA,CAAAA,EAAAA,CAAAA,SAAAA,CAAAA,EAAAA,CAAe,CAAC,EAC5D,OAAO,IAAIlJ,QAAQ,IACjB,IAAMhc,EAASxB,SAASgE,aAAa,CAAC,UAChCjE,EAAMyB,EAAOic,UAAU,CAAC,MAOxBC,EAAMna,OAAOoa,gBAAgB,EAAI,EAOvC,GANAnc,EAAOzG,KAAK,CAACH,KAAK,CAAG,GAAS/F,MAAA,CALhB,IAKgB,MAC9B2M,EAAOzG,KAAK,CAACF,MAAM,CAAG,GAAUhG,MAAA,CALjB,IAKiB,MAChC2M,EAAO5G,KAAK,CAAGA,IAAQ8iB,EACvBlc,EAAO3G,MAAM,CAAGA,IAAS6iB,EACzB3d,EAAI+a,KAAK,CAAC4C,EAAKA,GAEX,CAAC3d,EAEH,OADAH,QAAQxG,KAAK,CAAC,kDACPwkB,OAAO,sBAGhB,IAAI7e,EAAAA,EAAKA,CAACgB,EAAK,CACbtG,KAAMA,EACNyD,KACEzD,UAAAA,EACIktB,EAAazpB,GACbzD,QAAAA,EACAyG,EAAWhD,GACX0pB,EAAe1pB,GACrBiD,QAAS,CACP,GAAGC,EAAkB3G,EAAMyD,EAAK,CAChC,GAAGwpB,CAAY,CACf7lB,WAAY,GACZsd,UAAW,EACb,CACF,GAGAjgB,WAAW,KAETqgB,EADiB/c,EAAOgd,SAAS,CAAC,aAEpC,EAAG,IACL,EACF,EAGMmI,EAAe,OAAC,CAAE5G,cAAAA,CAAa,CAAEH,eAAAA,CAAc,CAAE,CAAA5sB,QAAM,CAC3DsN,OAAQyf,EAAcpoB,GAAG,CAAC,GAAUme,EAAKrd,IAAI,CAACjB,KAAK,CAAC,MACpDgJ,SAAU,CACR,CACElH,MAAO,SACP4D,KAAM6iB,EAAcpoB,GAAG,CAAC,GAAUme,EAAKpD,OAAO,EAC9ChS,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,CACf,EACA,CACEtH,MAAO,SACP4D,KAAM0iB,EAAejoB,GAAG,CAAC,GAAUme,EAAKpD,OAAO,EAC/ChS,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,CACf,EACD,GAIGV,EAAa,GAAW,EAC5BI,OAAQpD,EAAK3H,OAAO,CAACoC,GAAG,CAAC,GAAYgN,EAAOmD,MAAM,CAACtQ,KAAK,CAAC,MACzDgJ,SAAU,CACR,CACEtD,KAAMA,EAAK3H,OAAO,CAACoC,GAAG,CAAC,GAAYgN,EAAO6Q,KAAK,EAC/C9U,gBAAiB,CACf,0BACA,0BACA,0BACA,0BACD,CACDC,YAAa,CACX,wBACA,wBACA,wBACA,wBACD,CACDC,YAAa,CACf,EACD,CACH,EAGMgmB,EAAiB,GAAiB,EACtCpmB,SAAU,CACR,CACElH,MAAO,SACP4D,KAAMwlB,EAAW/qB,GAAG,CAAC,CAACqK,EAAOnK,IAAW,EACtCmJ,EAAGgB,EAAM2e,SAAS,CAClBhmB,EAAG9C,EAAQ,CACb,IACA6I,gBAAiB,0BACjBC,YAAa,wBACb0J,YAAa,GACbwc,iBAAkB,EACpB,EACA,CACEvtB,MAAO,SACP4D,KAAMwlB,EAAW/qB,GAAG,CAAC,CAACqK,EAAOnK,IAAW,EACtCmJ,EAAGgB,EAAM4e,aAAa,CACtBjmB,EAAG9C,EAAQ,CACb,IACA6I,gBAAiB,0BACjBC,YAAa,wBACb0J,YAAa,GACbwc,iBAAkB,EACpB,EACD,CACH,EAGMzmB,EAAoB,CAAC3G,EAAMyD,IAAU,EACzC2D,WAAY,GACZC,oBAAqB,GACrBC,OACEtH,UAAAA,EACI,CACEsL,EAAG,CACDuF,MAAO,CAAEnJ,QAAS,EAAM,EACxBiQ,YAAa,CAAEF,KAAM,CAAEtd,KAAM,GAAI2c,QAAS,CAAE,CAAE,CAChD,CACF,EACA9W,YAAAA,EACA,CACEuH,EAAG,CACD5K,MAAO,CAAE+K,QAAS,GAAMwO,KAAM,0BAAwB,EACtD5E,IAAK,EACL3J,IAAK,EACLmJ,SAAU,EACVrJ,KAAM,CAAEC,QAAS,GAAMoI,MAAO,oBAAqB,CACrD,EACA5O,EAAG,CACDvE,MAAO,CAAE+K,QAAS,GAAMwO,KAAM,gBAAc,EAC5CrF,MAAO,CACL6G,SAAU,SAAUvX,CAAK,CAAE/B,CAAK,EAC9B,OAAOqF,CAAI,CAACrF,EAAM,CAAGqF,CAAI,CAACrF,EAAM,CAACmK,KAAK,CAACxK,KAAK,CAAC,KAAO,EACtD,EACA+S,SAAU,EACV2G,KAAM,CAAEtd,KAAM,EAAG,CACnB,EACAsN,KAAM,CAAEC,QAAS,GAAMoI,MAAO,oBAAqB,CACrD,CACF,EACA,CACEvI,EAAG,CACD5K,MAAO,CAAE+K,QAAS,GAAOwO,KAAM,YAAU,EACzC1O,YAAa,GACbC,KAAM,CAAEC,QAAS,EAAM,EACvBmJ,MAAO,CAAE4G,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC9B,EACA+G,EAAG,CACDsG,YAAa,GACbG,IAAK,IACLhL,MAAO,CAAE+K,QAAS,GAAOwO,KAAM,WAAY,EAC3CzO,KAAM,CAAEC,QAAS,EAAK,EACtBmJ,MAAO,CAAE4G,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC9B,CACF,EACNyM,QAAS,CACPgB,OAAQ,CACN4P,SAAU,MACV3Q,OAAQ,CAAE4Q,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC/B,EACA0N,QAAS,CACPC,QAAS,GACTb,gBAAiB,kBACjBsW,UAAW,CAAEpjB,KAAM,EAAG,EACtBqjB,SAAU,CAAErjB,KAAM,EAAG,CACvB,EACAyoB,WAAY,CACVlb,QAAS,EACX,CACF,CACF,GAEamZ,EAAwB,MAAOpd,GACnC,IAAIsgB,QAAQ,IACjB,IAAMhc,EAASxB,SAASgE,aAAa,CAAC,UAChCjE,EAAMyB,EAAOic,UAAU,CAAC,MAQxBC,EAAMna,OAAOoa,gBAAgB,EAAI,EAOvC,GANAnc,EAAOzG,KAAK,CAACH,KAAK,CAAG,GAAS/F,MAAA,CALhB,IAKgB,MAC9B2M,EAAOzG,KAAK,CAACF,MAAM,CAAG,GAAUhG,MAAA,CALjB,IAKiB,MAChC2M,EAAO5G,KAAK,CAAGA,IAAQ8iB,EACvBlc,EAAO3G,MAAM,CAAGA,IAAS6iB,EACzB3d,EAAI+a,KAAK,CAAC4C,EAAKA,GAEX,CAAC3d,EAEH,OADAH,QAAQxG,KAAK,CAAC,kDACPwkB,OAAO,sBAIhB,IAAI7e,EAAAA,EAAKA,CAACgB,EAAK,CACbtG,KArBW,QAsBXyD,KAAM4pB,EAAwB5pB,EAAKsJ,IAAI,EACvCrG,QAAS,CACPU,WAAY,GACZsd,UAAW,GACX,GAAG4I,GAA6B,CAEpC,GAKA7oB,WAAW,KAETqgB,EADiB/c,EAAOgd,SAAS,CAAC,aAEpC,EAAG,IACL,GAGIsI,EAA0B,GAAW,EACzCxmB,OAAQkG,EAAK7O,GAAG,CAAC,GAAS4I,EAAIqH,OAAO,EACrCpH,SAAU,CACR,CACElH,MAAO,UACP4D,KAAMsJ,EAAK7O,GAAG,CAAC,GAAS4I,EAAIyH,OAAO,EACnCtH,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,CACf,EACA,CACEtH,MAAO,YACP4D,KAAMsJ,EAAK7O,GAAG,CAAC,GAAS4I,EAAIuH,MAAM,EAClCpH,gBAAiB,0BACjBC,YAAa,wBACbC,YAAa,CACf,EACD,CACH,EAEMmmB,EAA8B,IAAO,EACzClmB,WAAY,GACZC,oBAAqB,GACrBC,OAAQ,CACNgE,EAAG,CACDgG,IAAK,EACL3J,IAAK,EACLkJ,MAAO,CAAEnJ,QAAS,EAAM,EACxBiQ,YAAa,CAAEF,KAAM,CAAEtd,KAAM,GAAI2c,QAAS,EAAG,CAAE,CACjD,CACF,EACAlQ,QAAS,CACPgB,OAAQ,CACN4P,SAAU,MACV3Q,OAAQ,CAAE4Q,KAAM,CAAEtd,KAAM,EAAG,CAAE,CAC/B,EACA0N,QAAS,CACPC,QAAS,GACTb,gBAAiB,kBACjBsW,UAAW,CAAEpjB,KAAM,EAAG,EACtBqjB,SAAU,CAAErjB,KAAM,EAAG,CACvB,CACF,CACF,iUCvcA,IAAMozB,EAAiB,kBACjBC,EAAc,eACdC,EAAqB,yBAKrBC,EAAuB,iBACvBC,EAAoC,cAE7B1Z,EAAgB,IAEzB/a,aAAayE,OAAO,CAAC4vB,EAAgBjqB,EAEzC,EAEa+P,EAAe,IAEjBna,aAAa2B,OAAO,CAAC0yB,GAWnBlY,EAAc,IAEvBnc,aAAayE,OAAO,CAAC6vB,EAAa/tB,KAAKC,SAAS,CAAC5D,GAErD,EAEaC,EAAa,KACW,CACjC,IAAMD,EAAU5C,aAAa2B,OAAO,CAAC2yB,GACrC,OAAO1xB,EAAU2D,KAAKsG,KAAK,CAACjK,GAAW,IACzC,CAEF,EAQa2P,EAAuB,IAEhCvS,aAAayE,OAAO,CAAC8vB,EAAoBhuB,KAAKC,SAAS,CAAC5D,GAE5D,EAEa4N,EAAsB,KACE,CACjC,IAAM5N,EAAU5C,aAAa2B,OAAO,CAAC4yB,GACrC,OAAO3xB,EAAU2D,KAAKsG,KAAK,CAACjK,GAAW,IACzC,CAEF,EAQa8xB,EAAuB,IAEhC10B,aAAayE,OAAO,CAnEO,qBAmEkBkwB,EAEjD,EAeaC,EAAqB,IAE9B50B,aAAayE,OAAO,CArFI,uBAqFkB8B,KAAKC,SAAS,CAAC5D,GAE7D,EAgBa6V,EAAoB,KACI,CACjC,IAAM7V,EAAU5C,aAAa2B,OAAO,CAAC6yB,GACrC,OAAO5xB,EAAU2D,KAAKsG,KAAK,CAACjK,GAAW,IACzC,CAEF,EAEa6S,EAAqB,IAE9BzV,aAAayE,OAAO,CAAC+vB,EAAsBjuB,KAAKC,SAAS,CAAC5D,GAE9D,EAQagS,EAA2B,KACH,CACjC,IAAMhS,EAAU5C,aAAa2B,OAAO,CAAC8yB,GACrC,OAAO7xB,EAAU2D,KAAKsG,KAAK,CAACjK,GAAW,IACzC,CAEF,EAEa8S,EAA4B,IAErC1V,aAAayE,OAAO,CAClBgwB,EACAluB,KAAKC,SAAS,CAAC5D,GAGrB,mOE/IA2B,EAAA,QAAe,CAAC,kNAA2G,uDCA3HA,EAAA,QAAe,CAAC,wTAAuG,uDCAvHA,EAAA,QAAe,CAAC,0PAAyG,uDCAzHA,EAAA,QAAe,CAAC,qVAA4G,uDCA5HA,EAAA,QAAe,CAAC,uTAA8G,uDCA9HA,EAAA,QAAe,CAAC,2RAA8G,uDCA9HA,EAAA,QAAe,CAAC,+RAA8G,uDCA9HA,EAAA,QAAe,CAAC,+RAA8G,uDCA9HA,EAAA,QAAe,CAAC,sVAA6G,uDCA7HA,EAAA,QAAe,CAAC,4VAAmG,uDCAnHA,EAAA,QAAe,CAAC,gSAA2G,uDCA3HA,EAAA,QAAe,CAAC,kRAAyG,uDCAzHA,EAAA,QAAe,CAAC,sfAAqG,uDCArHA,EAAA,QAAe,CAAC,iSAA4G,sDCA5HA,EAAA,QAAe,CAAC,oZAAuG,uDCAvHA,EAAA,QAAe,CAAC,qVAA4G","sources":["webpack://_N_E/./components/popup/redoQuizPopup.tsx","webpack://_N_E/./components/popup/quizPopup.tsx","webpack://_N_E/./components/popup.ts","webpack://_N_E/./components/common/nav/nav_1.tsx","webpack://_N_E/./components/common/otherComponents/LocalStorageVersionCheck.tsx","webpack://_N_E/./components/common/otherComponents/breadcrumbs.tsx","webpack://_N_E/./components/common/otherComponents/contact-form.tsx","webpack://_N_E/./constants/arrayFAQ.ts","webpack://_N_E/./components/common/otherComponents/faq-page.tsx","webpack://_N_E/./components/common/otherComponents/form-result.tsx","webpack://_N_E/./components/common/otherComponents/google-play-btn.tsx","webpack://_N_E/./components/common/otherComponents/chart-hero-job.tsx","webpack://_N_E/./components/common/otherComponents/skills-section-result.tsx","webpack://_N_E/./components/common/otherComponents/hero-result.tsx","webpack://_N_E/./components/common/otherComponents/job-result-section.tsx","webpack://_N_E/./components/common/otherComponents/modal-email-sent.tsx","webpack://_N_E/./components/common/otherComponents/projection-radar-chart.tsx","webpack://_N_E/./components/common/otherComponents/projection-rapport.tsx","webpack://_N_E/./components/common/otherComponents/projection-slider.tsx","webpack://_N_E/./components/common/otherComponents/quiz-section.tsx","webpack://_N_E/./components/common/otherComponents/student-result.tsx","webpack://_N_E/./lib/algorithms/calcNote.js","webpack://_N_E/./lib/algorithms/power.js","webpack://_N_E/./lib/algorithms/utils.js","webpack://_N_E/./lib/dataFormatting.ts","webpack://_N_E/./lib/pdf/config/fonts.js","webpack://_N_E/./lib/pdf/config/layout.js","webpack://_N_E/./lib/pdf/config/styles.js","webpack://_N_E/./lib/pdf/templates/projection/syntheseProjectionTemplate.js","webpack://_N_E/./lib/pdf/templates/projection/generalProjectionTemplate.js","webpack://_N_E/./lib/pdf/templates/projection/index.js","webpack://_N_E/./lib/pdf/utils/generateProjectionPdf.js","webpack://_N_E/./lib/pdf/index.js","webpack://_N_E/./lib/pdf/templates/common/accueilTemplate.js","webpack://_N_E/./lib/pdf/templates/common/sommaireTemplate.js","webpack://_N_E/./lib/pdf/templates/common/ctaTemplate.js","webpack://_N_E/./lib/pdf/templates/common/topTemplate.js","webpack://_N_E/./lib/pdf/templates/common/jobSynthesisTemplate.js","webpack://_N_E/./lib/pdf/templates/common/accueilProjectionTemplate.js","webpack://_N_E/./lib/pdf/templates/common/index.js","webpack://_N_E/./lib/pdf/templates/pageTemplate.js","webpack://_N_E/./lib/pdf/templates/metier/generalTemplate.js","webpack://_N_E/./lib/algorithms/skillGapAnalyzer.js","webpack://_N_E/./lib/pdf/templates/metier/syntheseTemplate.js","webpack://_N_E/./lib/pdf/templates/metier/skillDetailsTemplate.js","webpack://_N_E/./lib/pdf/templates/metier/jobInfosTemplate.js","webpack://_N_E/./lib/pdf/templates/metier/index.js","webpack://_N_E/./lib/pdf/templates/common/transitionTemplate.js","webpack://_N_E/./lib/pdf/utils/generatePdf.js","webpack://_N_E/./lib/pdf/utils/utils.js","webpack://_N_E/./lib/sessionStorage.ts","webpack://_N_E/./public/index.jsx","webpack://_N_E/./public/CTA-bg.webp","webpack://_N_E/./public/CTA.webp","webpack://_N_E/./public/error.webp","webpack://_N_E/./public/feature.webp","webpack://_N_E/./public/feature2-1.webp","webpack://_N_E/./public/feature2-2.webp","webpack://_N_E/./public/feature2-3.webp","webpack://_N_E/./public/feature2-4.webp","webpack://_N_E/./public/feature4.webp","webpack://_N_E/./public/ficher-metier/data.png","webpack://_N_E/./public/hero-2.webp","webpack://_N_E/./public/hero.webp","webpack://_N_E/./public/ico2.png","webpack://_N_E/./public/landing.webp","webpack://_N_E/./public/logo.png","webpack://_N_E/./public/results.webp"],"sourcesContent":["\"use client\";\nimport React from \"react\";\nimport Link from \"next/link\";\nimport { MdClose } from \"react-icons/md\";\n\ninterface QuizPopupProps {\n onClose: () => void;\n}\n\nconst clearLocalStorage = (keys: string[]) => {\n keys.forEach((key) => localStorage.removeItem(key));\n};\n\nconst RedoQuizPopup: React.FC = ({ onClose }) => {\n return (\n
\n
\n

\n Prêt à retenter l’expérience ?\n

\n

\n Collégien, lycéen ou professionnel, sélectionne le quiz qui te\n correspond et explore à nouveau ton avenir dans l’IT.\n

\n
\n {\n clearLocalStorage([\"student_session_id\", \"student_quiz_results\"]);\n onClose();\n }}\n >\n Je suis collégien / lycéen\n \n {\n clearLocalStorage([\n \"quiz_session_id\",\n \"quiz_results\",\n \"quiz_results_selection\",\n ]);\n onClose();\n }}\n >\n Je suis professionnel\n \n
\n \n \n
\n
\n \n );\n};\n\nexport default RedoQuizPopup;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport Link from \"next/link\";\nimport { MdClose } from \"react-icons/md\";\n\ninterface QuizPopupProps {\n onClose: () => void;\n}\n\nconst QuizPopup: React.FC = ({ onClose }) => {\n const [isQuizDone, setIsQuizDone] = useState(false);\n const [isStudentQuizDone, setIsStudentQuizDone] = useState(false);\n\n useEffect(() => {\n const fetchData = async () => {\n const localQuizId = localStorage.getItem(\"quiz_session_id\");\n const localQuizResult = localStorage.getItem(\"quiz_results\");\n const localStudentQuizId = localStorage.getItem(\"student_session_id\");\n const localStudentQuizResult = localStorage.getItem(\n \"student_quiz_results\"\n );\n\n setIsQuizDone(!!localQuizId && !!localQuizResult);\n setIsStudentQuizDone(!!localStudentQuizId && !!localStudentQuizResult);\n };\n\n fetchData();\n }, []);\n\n // Détermine si le bouton doit être désactivé\n const getButtonState = (quizDone: boolean) => {\n return {\n disabled: isQuizDone || isStudentQuizDone ? !quizDone : false,\n className: `rounded-lg shadow sm:mx-2 flex items-center justify-center px-8 py-4 text-base font-medium transition duration-200 ${\n isQuizDone || isStudentQuizDone\n ? quizDone\n ? \"bg-[#111213] text-white hover:text-[#EBA41B]\"\n : \"bg-gray-400 text-gray-600 cursor-not-allowed\"\n : \"bg-[#111213] text-white hover:text-[#EBA41B]\"\n }`,\n };\n };\n\n return (\n
\n
\n

\n {isQuizDone || isStudentQuizDone\n ? \"Curieux de ton résultat ?\"\n : \"Quel quiz souhaites-tu passer ?\"}\n

\n

\n {isQuizDone || isStudentQuizDone\n ? \"Tu veux revoir tes résultats ? Sélectionne le quiz correspondant et redécouvre ton avenir dans l’IT !\"\n : \"Que tu sois collégien, lycéen ou professionnel, choisis le quiz adapté et découvre ton avenir dans l’IT.\"}\n

\n
\n \n Je suis collégien / lycéen\n \n \n Je suis professionnel\n \n
\n \n \n
\n
\n \n );\n};\n\nexport default QuizPopup;\n","import RedoQuizPopup from \"./popup/redoQuizPopup\";\nimport QuizPopup from \"./popup/quizPopup\";\n\nexport { RedoQuizPopup, QuizPopup };\n","\"use client\";\nimport React, { useState, useEffect } from \"react\";\nimport Link from \"next/link\";\nimport Image from \"next/image\";\nimport { Logo } from \"@/public\";\nimport { getResults } from \"@/lib/sessionStorage\";\nimport { QuizPopup, RedoQuizPopup } from \"@/components/popup\";\n\nexport default function Nav() {\n const [menuOpen, setMenuOpen] = useState(false);\n const [hasResults, setHasResults] = useState(false);\n const [showQuizPopup, setShowQuizPopup] = useState(false);\n const [showRedoQuizPopup, setShowRedoQuizPopup] = useState(false);\n\n useEffect(() => {\n const results = getResults();\n setHasResults(results !== null);\n }, []);\n\n return (\n
\n \n {menuOpen && (\n
\n
\n \n
\n )}\n\n {showQuizPopup && setShowQuizPopup(false)} />}\n {showRedoQuizPopup && (\n setShowRedoQuizPopup(false)} />\n )}\n
\n );\n}\n","\"use client\";\nimport { useEffect } from \"react\";\n\n// BUILD_VERSION est une constante qui représente la version de construction de l'application.\n// Il est utilisé pour suivre les versions de l'application, afin de flush le localStorage à chaque push\n// Il doit être incrémenté manuellement avant chaque push (surtout les push qui modifient le parcours résultat du Q1, Q2 et/ou projet).\nconst BUILD_VERSION = \"1.0.1\";\n\nconst LocalStorageVersionCheck = () => {\n useEffect(() => {\n const storedVersion = localStorage.getItem(\"build_version\");\n\n if (storedVersion !== BUILD_VERSION) {\n localStorage.clear();\n localStorage.setItem(\"build_version\", BUILD_VERSION);\n }\n }, []);\n\n return null;\n};\n\nexport default LocalStorageVersionCheck;\n","\"use client\";\nimport React from \"react\";\nimport Link from \"next/link\";\nimport { usePathname } from \"next/navigation\";\n\ntype Props = {\n title: string;\n};\n\nconst breadcrumbs = (props: Props) => {\n const pathname = usePathname();\n const pathArray = pathname?.split(\"/\").filter((p) => p); // Divise l'URL et filtre les vides\n\n return (\n \n );\n};\n\nexport default breadcrumbs;\n","\"use client\";\n\nimport React, { useEffect, useState } from \"react\";\n\nconst contact_form = ({ contentClassName }: { contentClassName?: string }) => {\n const appTitle = \"IOVIA\";\n\n const [formData, setFormData] = useState({\n app: appTitle,\n surname: \"\",\n name: \"\",\n email: \"\",\n content: \"\",\n });\n\n useEffect(() => {\n setFormData((currentFormData) => ({\n ...currentFormData,\n }));\n }, []);\n\n const sendMessage = async () => {\n try {\n const response = await fetch(\n \"https://e7jhminbhb.execute-api.eu-west-1.amazonaws.com/TEST_MAIL_DEV/contact\",\n {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify(formData),\n }\n );\n } catch (error) {}\n };\n return (\n
\n
\n
\n
\n \n Nom\n \n
\n \n setFormData({ ...formData, surname: e.target.value })\n }\n />\n
\n
\n
\n \n Prénom\n \n
\n \n setFormData({ ...formData, name: e.target.value })\n }\n />\n
\n
\n
\n \n Email\n \n
\n \n setFormData({ ...formData, email: e.target.value })\n }\n />\n
\n
\n
\n \n Ton message personnalisé\n \n
\n \n setFormData({ ...formData, content: e.target.value })\n }\n >\n
\n
\n
\n
\n \n Envoyer mon message !\n \n
\n
\n
\n );\n};\n\nexport default contact_form;\n","const arrayFAQ = [\n {\n title:\n \"J’aimerais bien devenir Product Owner, ça a l’air sympa. Mais en vérité je ne sais pas en quoi consiste le métier, ni ce qu’il me faut apprendre.\",\n description:\n \"Sur IOVIA, tu trouveras une fiche pour chaque métier pour te guider : missions, activités et parcours professionnel.\",\n },\n {\n title:\n \"Est-ce que le métier de Chef de Projet est un métier d’avenir ? Avec l’agilité j’ai entendu qu’il va disparaître…\",\n description:\n \"Tout évolue et se transforme ! Tu auras dans l’application IOVIA des informations de tendance sur les métiers, comme par exemple les nouvelles compétences qui seront demandées dans le futur.\",\n },\n {\n title:\n \"Je suis un peu perdu car les annonces parlent de métiers à chaque fois différents. J’aimerais juste savoir quels sont les métiers possibles pour moi maintenant ?\",\n description:\n \"Quand tu auras répondu à un questionnaire, les 50 métiers seront évalués, en précisant s’ils sont adaptés à ton profil maintenant. Tu pourras voir tes points forts et tes axes d’amélioration pour une adéquation parfaite.\",\n },\n];\n\nexport { arrayFAQ };\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { arrayFAQ } from \"@/constants/arrayFAQ\";\n\ntype Props = {};\n\nconst FaqPage = (props: Props) => {\n const [expanded, setExpanded] = useState(null);\n\n const toggleFAQ = (index: any) => {\n setExpanded(expanded === index ? null : index);\n };\n\n return (\n
\n
    \n {arrayFAQ.map((content, index) => (\n
  • \n toggleFAQ(index)}\n aria-label=\"Toggle FAQ: How secure is my insurance information?\"\n >\n \n {content.title}\n \n \n \n \n \n \n \n
    \n

    \n {content.description}\n

    \n
    \n \n
  • \n ))}\n
\n
\n );\n};\n\nexport default FaqPage;\n","\"use client\";\nimport React, { useState, useEffect } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport { generatePdf } from \"@/lib/pdf/utils/generatePdf\";\nimport {\n transformAnswersToSkillPools,\n formatResults,\n transformAnswers,\n} from \"@/lib/dataFormatting\";\n\ntype FormValues = {\n nom: string;\n prenom: string;\n email: string;\n};\n\nconst FormResult = () => {\n const router = useRouter();\n const [emailSent, setEmailSent] = useState(false);\n const [formValues, setFormValues] = useState({\n nom: \"\",\n prenom: \"\",\n email: \"\",\n });\n const [errors, setErrors] = useState>({});\n const [isFormValid, setIsFormValid] = useState(false);\n const [buttonText, setButtonText] = useState(\"Obtenir le rapport\");\n const [buttonColor, setButtonColor] = useState(\"bg-[#111213]\");\n const [loading, setLoading] = useState(false);\n const [progress, setProgress] = useState(0);\n\n const validateName = (name: string): string | undefined => {\n if (!name) return \"Le nom est obligatoire.\";\n if (!/^[a-zA-ZÀ-ÖØ-öø-ÿ\\- ]+$/.test(name))\n return \"Le nom doit contenir que des lettres.\";\n return undefined; // Remplacez null par undefined\n };\n\n const validateEmail = (email: string): string | undefined => {\n if (!email) return \"L'email est obligatoire.\";\n const emailRegex = /^[^\\s@]+@[^\\s@]+\\.[^\\s@]+$/;\n if (!emailRegex.test(email)) return \"L'email est au mauvais format.\";\n return undefined; // Remplacez null par undefined\n };\n\n const sanitizeInput = (input: string): string => {\n return input.replace(/[<>/\\\\]/g, \"\");\n };\n\n const handleChange = (\n e: React.ChangeEvent\n ) => {\n const { name, value } = e.target;\n const sanitizedValue = sanitizeInput(value);\n setFormValues({ ...formValues, [name]: sanitizedValue });\n\n let newErrors = { ...errors };\n if (name === \"nom\" || name === \"prenom\") {\n newErrors[name] = validateName(sanitizedValue);\n } else if (name === \"email\") {\n newErrors.email = validateEmail(sanitizedValue);\n }\n setErrors(newErrors);\n };\n\n const handleSendPDF = async () => {\n setLoading(true);\n setButtonText(\"Envoi en cours...\");\n setButtonColor(\"bg-[#111213]\"); // Maintien de la couleur noire pendant l'envoi\n try {\n //fetch answers\n const sessionId = localStorage.getItem(\"quiz_session_id\");\n if (!sessionId) return;\n const responseQuiz = await fetch(\"/api/quiz/getAnswersResults\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n }),\n });\n const data = await responseQuiz.json();\n setProgress(20);\n\n //fetch updateUserInfo to store nom, prenom, email\n const updateUserInfo = await fetch(\"/api/quiz/updateUserInfo\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n name: formValues.prenom,\n surname: formValues.nom,\n email: formValues.email,\n }),\n });\n const updateUserResult = await updateUserInfo.json(); // TODO : Handle exception here\n setProgress(30);\n\n const resultsQuiz = await formatResults();\n const answersQuiz = await transformAnswers(data.answers);\n const skillPoolsQuiz = await transformAnswersToSkillPools(answersQuiz);\n\n setButtonText(\"Génération du PDF...\");\n const pdfFile = await generatePdf(\n formValues.prenom,\n \"CIG_SIMP\",\n resultsQuiz,\n answersQuiz,\n skillPoolsQuiz,\n (progressValue: React.SetStateAction) =>\n setProgress(progressValue)\n );\n\n // const pdfBase64 = Buffer.from(pdfFile).toString(\"base64\");\n\n setButtonText(\"Envoi de l'email...\");\n\n const response = await fetch(\"/api/sendEmail\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n to: formValues.email,\n dynamicData: {},\n // pdfBase64,\n }),\n });\n setProgress(100);\n\n // gestion de l'état du bouton\"\n if (response.ok) {\n setButtonText(\"Envoyé !\");\n setButtonColor(\"bg-green-500\");\n\n setTimeout(() => {\n setEmailSent(true);\n router.push(\"/?emailSent=true\");\n }, 2000);\n } else {\n setButtonText(\"Échec, veuillez réessayer\");\n setButtonColor(\"bg-red-500\");\n\n setTimeout(() => {\n setButtonText(\"Obtenir le rapport\");\n setButtonColor(\"bg-[#111213]\");\n }, 3000);\n }\n } catch (error) {\n setButtonText(\"Échec, veuillez réessayer\");\n setButtonColor(\"bg-red-500\");\n\n setTimeout(() => {\n setButtonText(\"Obtenir le rapport\");\n setButtonColor(\"bg-[#111213]\");\n }, 3000);\n } finally {\n setLoading(false);\n setTimeout(() => setProgress(0), 3000);\n }\n };\n\n useEffect(() => {\n const nomError = validateName(formValues.nom);\n const prenomError = validateName(formValues.prenom);\n const emailError = validateEmail(formValues.email);\n\n if (!nomError && !prenomError && !emailError) {\n setIsFormValid(true);\n } else {\n setIsFormValid(false);\n }\n }, [formValues]); // Dépend des valeurs du formulaire\n\n return (\n
\n
\n

\n Étape 2/2 - Remplir le formulaire\n

\n

\n Dernière étape : complète les champs et ton rapport te sera envoyé par\n mail !{\" \"}\n

\n

\n Le rapport est en construction ! (20-30 secondes)\n

\n
\n\n
\n
\n \n \n {errors.nom &&

{errors.nom}

}\n
\n\n
\n \n \n {errors.prenom && (\n

{errors.prenom}

\n )}\n
\n
\n\n
\n \n \n {errors.email &&

{errors.email}

}\n
\n\n {loading && (\n
\n
\n \n )}\n\n
\n \n {buttonText} {loading && `(${progress}%)`}\n \n
\n
\n );\n};\n\nexport default FormResult;\n","\"use client\";\n\nimport React from \"react\";\nimport { sendGAEvent } from \"@next/third-parties/google\";\n\nconst google_play_btn = ({\n sectionName,\n contentClassName,\n ctaText,\n}: {\n sectionName: string;\n contentClassName?: string;\n ctaText?: string;\n}) => {\n return (\n \n sendGAEvent({\n event: \"ctaClicked\",\n value: `CTA clicked on ${sectionName}`,\n })\n }\n >\n \n \n \n {ctaText ?? \"Télécharger sur Google Play\"}\n \n );\n};\n\nexport default google_play_btn;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport Chart from \"chart.js/auto\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\"; // 👈 import du plugin\n\n// Enregistrement du plugin\nChart.register(ChartDataLabels); // 👈 enregistrement dans Chart.js\n\ntype Props = {};\n\nconst ChartHeroJob = (props: Props) => {\n const [jobChart, setJobChart] = useState([]);\n\n useEffect(() => {\n const storedResults = localStorage.getItem(\"quiz_results\");\n if (storedResults) {\n const parsedResults = JSON.parse(storedResults);\n const topFourJobs = parsedResults\n .sort((a: any, b: any) => b.percentage - a.percentage)\n .slice(0, 4);\n setJobChart(topFourJobs);\n console.log(topFourJobs);\n }\n }, []);\n\n useEffect(() => {\n if (jobChart.length > 0) {\n renderChart();\n }\n }, [jobChart]);\n\n const renderChart = () => {\n const ctx = document.getElementById(\"jobChart\") as HTMLCanvasElement;\n new Chart(ctx, {\n type: \"bar\",\n data: getBarData(),\n options: getDefaultOptions(),\n plugins: [ChartDataLabels],\n });\n };\n\n const getBarData = () => ({\n labels: jobChart.map((job) => job.job),\n datasets: [\n {\n data: jobChart.map((job) => job.percentage.toFixed(2)),\n backgroundColor: [\"rgba(209, 53, 104, 0.8)\", \"rgba(255, 142, 49, 0.8)\"],\n borderColor: [\"rgba(209, 53, 104, 1)\", \"rgba(255, 142, 49, 1)\"],\n borderWidth: 1,\n },\n ],\n });\n\n const getDefaultOptions = () => ({\n responsive: true,\n maintainAspectRatio: false,\n scales: {\n x: { beginAtZero: true, grid: { display: false } },\n y: { beginAtZero: true, max: 100, grid: { display: true } },\n },\n plugins: {\n legend: { display: false },\n tooltip: { enabled: true },\n },\n });\n\n return (\n
\n \n
\n );\n};\n\nexport default ChartHeroJob;\n","import React, { useEffect, useState } from \"react\";\nimport { Tooltip } from \"react-tooltip\";\n\nconst SkillsSection = () => {\n const [topSkills, setTopSkills] = useState([]);\n const [dimension, setDimension] = useState(null);\n\n useEffect(() => {\n const fetchTopSkills = async () => {\n const sessionId = localStorage.getItem(\"quiz_session_id\");\n if (!sessionId) return;\n\n try {\n const response = await fetch(\"/api/quiz/getAnswersResults\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n }),\n });\n\n const data = await response.json();\n const sortedSkills = data.answers\n .sort((a: any, b: any) => b.value - a.value)\n .slice(0, 2);\n setTopSkills(sortedSkills);\n setDimension(data.dimension);\n } catch (error) {}\n };\n\n fetchTopSkills();\n }, []);\n\n const getDimensionText = () => {\n if (dimension === null) return \"\";\n if (dimension > 120) {\n return \"D'après notre analyse, le métier est sur-dimensionné pour ton profil, tu risques d'être challengé ! 🔼\";\n } else if (dimension < 90) {\n return \"D'après notre analyse, le métier est sous-dimensionné pour ton profil, tu risques de t'ennuyer... 🔽\";\n } else {\n return \"D'après notre analyse, le métier est bien dimensionné pour ton profil ! ✅\";\n }\n };\n\n return (\n
\n

\n Grâce à tes compétences en{\" \"}\n \n {topSkills[0]?.skill || \"[compétence clé]\"}\n {\" \"}\n et ta capacité en{\" \"}\n \n {topSkills[1]?.skill || \"[compétence ou trait personnel]\"}\n \n , tu es fait(e) pour exceller dans ce domaine. Prêt(e) à franchir cette\n étape ? 🚀\n

\n \n {getDimensionText()}\n

\n \n
\n

La dimension du métier est calculée en fonction

\n

de tes compétences par rapport à celles requises

\n

pour le métier ainsi que leur importance relative.

\n
\n
\n

\n Ton parcours est unique, et ce métier reflète parfaitement tes points\n forts. Tu es maintenant à un pas d'une carrière qui te correspond\n vraiment.\n

\n {/*

\n Psst, tu peux scroller vers le bas pour découvrir ton classement complet\n et télécharger ton rapport personnalisé !\n

*/}\n
\n );\n};\n\nexport default SkillsSection;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport ChartHeroJob from \"./chart-hero-job\";\nimport SkillsSection from \"@/components/common/otherComponents/skills-section-result\";\nimport { generatePdf } from \"@/lib/pdf\";\nimport {\n formatResults,\n transformAnswers,\n transformAnswersToSkillPools,\n} from \"@/lib/dataFormatting\";\nimport { getResultsSelection } from \"@/lib/sessionStorage\";\nimport { useRouter } from \"next/navigation\";\nimport Link from \"next/link\";\n\nconst HeroResult = () => {\n const [bestJob, setBestJob] = useState(null);\n const [selectedJobs, setSelectedJobs] = useState([]);\n const [progress, setProgress] = useState(0);\n const [isGenerating, setIsGenerating] = useState(true);\n const [pdfUrl, setPdfUrl] = useState(null);\n const router = useRouter();\n\n useEffect(() => {\n const init = async () => {\n const storedResults = localStorage.getItem(\"quiz_results\");\n if (storedResults) {\n const parsedResults = JSON.parse(storedResults);\n const bestMatch = parsedResults.reduce((prev: any, current: any) =>\n prev.percentage > current.percentage ? prev : current\n );\n setBestJob(bestMatch.job);\n }\n\n const selections = getResultsSelection();\n setSelectedJobs(selections || []);\n\n const sessionId = localStorage.getItem(\"quiz_session_id\");\n if (!sessionId) {\n alert(\"Session manquante.\");\n return;\n }\n\n const responseQuiz = await fetch(\"/api/quiz/getAnswersResults\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ id: sessionId, quiz_code: \"CIG_SIMP\" }),\n });\n\n const { answers } = await responseQuiz.json();\n const resultsQuiz = await formatResults();\n const answersQuiz = await transformAnswers(answers);\n const skillPoolsQuiz = await transformAnswersToSkillPools(answersQuiz);\n\n const prenom = \"Utilisateur\";\n\n const pdfFile = await generatePdf(\n prenom,\n \"CIG_SIMP\",\n resultsQuiz,\n answersQuiz,\n skillPoolsQuiz,\n (val: any) => setProgress(val)\n );\n\n const url = window.URL.createObjectURL(pdfFile);\n setPdfUrl(url);\n setIsGenerating(false);\n };\n\n init();\n }, []);\n\n const handleDownload = () => {\n if (!pdfUrl) return;\n\n const link = document.createElement(\"a\");\n link.href = pdfUrl;\n link.download = \"rapport.pdf\";\n document.body.appendChild(link);\n link.click();\n link.remove();\n window.URL.revokeObjectURL(pdfUrl);\n };\n\n const handleEditSelection = () => {\n router.push(\"/quiz/selection-metiers\");\n };\n\n return (\n \n
\n
\n
\n
\n
\n
\n

Bravo !

\n

\n En analysant tes compétences, nous avons identifié le métier qui\n te correspond le mieux :\n

\n {bestJob && (\n

\n {bestJob.toUpperCase()}\n

\n )}\n
\n\n
\n

\n Métiers sélectionnés pour le rapport :\n

\n
    \n {selectedJobs.length > 0 ? (\n selectedJobs.map((job, index) => (\n
  • \n {job.job} ({job.percentage.toFixed(1)}%)\n
  • \n ))\n ) : (\n
  • Aucun métier sélectionné.
  • \n )}\n
\n\n \n Modifier les métiers sélectionnés\n \n
\n\n \n
\n\n
\n \n
\n
\n\n
\n

\n Le rapport est en construction ! (20-30 secondes)\n

\n {isGenerating && (\n
\n
\n
\n )}\n
\n\n
\n \n {isGenerating\n ? `Génération du rapport... (${progress}%)`\n : \"📄 Télécharger mon rapport\"}\n \n\n \n Projette ta carrière\n \n
\n \n \n );\n};\n\nexport default HeroResult;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport * as FaIcons from \"react-icons/fa\";\nimport jobsData from \"@/data/metiers.json\";\nimport {\n saveResultsSelection,\n getResultsSelection,\n} from \"@/lib/sessionStorage\";\n\nconst JobResultsSection = () => {\n const [jobResults, setJobResults] = useState([]);\n const [selectedResults, setSelectedResults] = useState([]);\n\n useEffect(() => {\n const storedResults = localStorage.getItem(\"quiz_results\");\n if (storedResults) {\n const parsedResults = JSON.parse(storedResults);\n const filteredResults = parsedResults.filter(\n (result: any) => result.percentage > 20\n );\n const sortedResults = filteredResults.sort(\n (a: any, b: any) => b.percentage - a.percentage\n );\n setJobResults(sortedResults);\n }\n const storedSelections = getResultsSelection();\n if (storedSelections) {\n setSelectedResults(storedSelections);\n }\n }, []);\n\n const isSelected = (result: any) => {\n if (!result || !result.job || !result.percentage) {\n return false;\n }\n\n return selectedResults.some(\n (r) =>\n r?.job &&\n result?.job &&\n r.job === result.job &&\n r.percentage === result.percentage\n );\n };\n\n const toggleSelection = (result: any) => {\n if (!result || !result.job) {\n return;\n }\n\n let updatedSelections;\n if (isSelected(result)) {\n updatedSelections = selectedResults.filter(\n (r) => r.job && r.job !== result.job\n );\n } else if (selectedResults.length < 4) {\n updatedSelections = [...selectedResults, result];\n } else {\n return;\n }\n\n setSelectedResults(updatedSelections);\n saveResultsSelection(updatedSelections);\n };\n\n const getDimensionEmoji = (dimension: number) => {\n if (dimension > 120) {\n return \"🔼\";\n } else if (dimension < 90) {\n return \"🔽\";\n } else {\n return \"✅\";\n }\n };\n\n return (\n \n
\n

\n Étape 1/2 - Découvre tes résultats !\n

\n

\n Commence par sélectionner 4 métiers dont tu souhaites voir les\n détails, puis scroll jusqu'en bas pour obtenir ton rapport\n personnalisé.\n

\n
\n
\n {jobResults.map((result, index) => {\n const job = jobsData.find((job) => job.title === result.job);\n const iconName = job?.[\"react-icon\"];\n const IconComponent =\n iconName && FaIcons[iconName as keyof typeof FaIcons]\n ? FaIcons[iconName as keyof typeof FaIcons]\n : FaIcons.FaUser;\n\n return (\n toggleSelection(result)}\n >\n \n \n

\n #{index + 1} {result.job}\n

\n \n {result.percentage.toFixed(2)}%{\" \"}\n {getDimensionEmoji(result.dimension)}\n \n
\n \n );\n })}\n \n \n );\n};\n\nexport default JobResultsSection;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { useSearchParams } from \"next/navigation\";\n\ntype Props = {};\n\nconst Modal_emailSent = (props: Props) => {\n const [closeModal, setCloseModal] = useState(false);\n const searchParams = useSearchParams();\n\n useEffect(() => {\n const emailSent = searchParams?.get(\"emailSent\"); // Récupère le paramètre 'emailSent' de l'URL\n\n if (emailSent === \"true\") {\n setCloseModal(true); // Affiche la modal si le paramètre est défini\n }\n }, [searchParams]);\n\n return (\n \n \n\n
\n
\n
\n
\n
\n
\n \n Rapport envoyé avec succès !\n \n
\n

\n Ton rapport a bien été envoyé par email. Pense à vérifier\n ta boîte de réception, ainsi que tes courriers\n indésirables, pour le consulter.\n

\n
\n
\n
\n
\n
\n setCloseModal(false)}\n >\n Fermer\n \n
\n
\n
\n
\n \n );\n};\n\nexport default Modal_emailSent;\n","\"use client\";\n\nimport { useEffect, useState, useRef } from \"react\";\nimport { Radar } from \"react-chartjs-2\";\nimport Chart, {\n Filler,\n Legend,\n LineElement,\n PointElement,\n RadialLinearScale,\n Tooltip,\n} from \"chart.js/auto\";\nimport dragDataPlugin from \"chartjs-plugin-dragdata\";\nimport { powerCigSimp } from \"@/lib/algorithms/power\";\nimport { calcNote } from \"@/lib/algorithms/calcNote\";\nimport { calcProjectionTime, getDimension } from \"@/lib/algorithms/utils\";\nimport {\n getSelectedJobProjection,\n saveRadarChartData,\n saveSelectedJobProjection,\n} from \"@/lib/sessionStorage\";\nimport { Info } from \"lucide-react\";\n\nChart.register(\n RadialLinearScale,\n PointElement,\n LineElement,\n Filler,\n Tooltip,\n Legend,\n dragDataPlugin // 👈 important ici\n);\n\ninterface DataItem {\n domaine: string;\n actuel: number;\n souhait: number;\n metier: number;\n}\n\ninterface JobData {\n job: string;\n percentage: number;\n questions: {\n skill: string;\n userSig: number;\n metierSig: number;\n souhaitSig: number;\n actuelSig: number;\n }[];\n}\n\nconst ProjectionPage = () => {\n const [chartData, setChartData] = useState([]);\n const [jobs, setJobs] = useState([]);\n const [selectedJob, setSelectedJob] = useState(\"\");\n const chartRef = useRef(null);\n const [percentage, setPercentage] = useState(0);\n const [dimension, setDimension] = useState(0);\n const [projectionTime, setProjectionTime] = useState(0);\n const [isBusy, setIsBusy] = useState(true);\n\n useEffect(() => {\n const fetchProjectionData = async () => {\n setIsBusy(true);\n const quiz_results = localStorage.getItem(\"quiz_results\");\n if (!quiz_results) return;\n\n const response = await fetch(\"/api/projection/getProjectionObject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ quiz_results }),\n });\n\n const data: JobData[] = await response.json();\n const sortedJobs = data\n .filter((job) => job.percentage > 25)\n .sort((a, b) => b.percentage - a.percentage);\n setJobs(sortedJobs);\n\n const storedJob = getSelectedJobProjection();\n const defaultJob = storedJob ?? sortedJobs[0].job;\n setSelectedJob(defaultJob);\n updateData(sortedJobs.find((job) => job.job === defaultJob));\n setIsBusy(false);\n };\n\n fetchProjectionData();\n }, []);\n\n const updateData = (job: JobData | undefined) => {\n if (!job) return;\n\n const formattedData = job.questions.map((q) => ({\n domaine: q.skill,\n metier: q.metierSig,\n souhait: q.souhaitSig,\n actuel: q.actuelSig,\n }));\n\n setChartData(formattedData);\n saveRadarChartData(formattedData);\n saveSelectedJobProjection(job.job);\n };\n\n useEffect(() => {\n if (chartData.length > 0) {\n const souhaitSignature = chartData.map((item) => item.souhait).join(\"\");\n const actuelSignature = chartData.map((item) => item.actuel).join(\"\");\n const metierSignature = chartData.map((item) => item.metier).join(\"\");\n const metierPower = powerCigSimp(metierSignature);\n const newPercentage = calcNote(\n metierSignature,\n metierPower,\n souhaitSignature\n );\n const newDimension = getDimension(souhaitSignature, metierSignature);\n const projTime = calcProjectionTime(actuelSignature, souhaitSignature);\n\n setPercentage(newPercentage);\n setDimension(newDimension);\n setProjectionTime(projTime);\n }\n }, [chartData]);\n\n const handleJobChange = (e: React.ChangeEvent) => {\n const newJob = e.target.value;\n setSelectedJob(newJob);\n updateData(jobs.find((job) => job.job === newJob));\n };\n\n const handleReset = () => {\n const jobData = jobs.find((job) => job.job === selectedJob);\n updateData(jobData);\n };\n\n const handleDrag = (\n _: any,\n datasetIndex: number,\n index: number,\n value: number | null\n ) => {\n if (datasetIndex === 1 || value === null) return;\n\n let newValue = Math.max(1, Math.min(5, Math.round(value)));\n\n setChartData((prevData) => {\n const newData = [...prevData];\n newData[index].souhait = newValue;\n saveRadarChartData(newData);\n return newData;\n });\n };\n\n const labels = chartData.map((item) => item.domaine);\n const actuelValues = chartData.map((item) => item.actuel);\n const souhaitValues = chartData.map((item) => item.souhait);\n const metierValues = chartData.map((item) => item.metier);\n\n const getTimeCategory = (time: number) => {\n if (time > 90)\n return { label: \"1-3 ans\", percent: 100, color: \"bg-green-500\" };\n if (time > 75)\n return { label: \"3-5 ans\", percent: 75, color: \"bg-yellow-400\" };\n if (time > 50)\n return { label: \"5-8 ans\", percent: 50, color: \"bg-orange-400\" };\n return { label: \"8+ ans\", percent: 25, color: \"bg-red-500\" };\n };\n\n const getDimensionLabel = (dim: number) => {\n if (dim < 90) return \"sous-dimensionné\";\n if (dim > 120) return \"sur-dimensionné\";\n return \"bien dimensionné\";\n };\n\n const getAdequationColor = (value: number) => {\n if (value >= 80) return \"text-green-600\";\n if (value >= 70) return \"text-yellow-500\";\n return \"text-red-500\";\n };\n\n const Tooltip = ({ content }: { content: string }) => (\n \n \n \n \n );\n\n return (\n
\n {isBusy ? (\n
\n
Chargement...
\n
\n ) : (\n <>\n
\n
\n
\n

Comment ça marche ?

\n

\n Découvre en quelques étapes comment booster tes compétences et\n transformer ton potentiel\n

\n
    \n
  • \n Ajuste tes compétences : augmente d’un ou\n deux niveaux celles que tu souhaites développer.\n
  • \n
  • \n Observe l’impact : notre algorithme compare\n ton profil actuel et futur pour te montrer ton évolution.\n
  • \n
  • \n Visualise ta progression : notre modèle te\n fournit une estimation réaliste basée sur l’intensité de tes\n changements.\n
  • \n
\n
\n
\n

Métier ciblé

\n
\n

\n Métier : \n {selectedJob}\n

\n \n Adéquation : {percentage.toFixed(1)}%\n = 80\n ? \"Ton profil correspond au métier.\"\n : percentage >= 70\n ? \"Ton profil correspond presque au métier, cela risque d'être challengeant.\"\n : \"Ton profil ne correspond pas au métier.\"\n }`}\n />\n

\n

\n Profil {getDimensionLabel(dimension)}\n 120\n ? \"Un profil sur-dimensionné signifie que tu vises un métier demandant plus de compétences que ton profil projeté.\"\n : \"Tu es bien dimensionné, ce qui est optimal.\"\n }`}\n />\n

\n
\n
\n
\n

\n Temps estimé pour atteindre ton niveau\n

\n

\n Ton temps de progression dépend de l’écart entre ton profil\n actuel et ton profil projeté :\n

\n
\n

\n {getTimeCategory(projectionTime).label}\n {/*\n \n ({projectionTime.toFixed(1)}%)\n \n */}\n

\n
\n \n
\n
\n
\n
\n
\n
\n \n {jobs.map((job) => (\n \n ))}\n \n
\n \n
\n \n Réinitialiser\n \n
\n \n )}\n
\n );\n};\n\nexport default ProjectionPage;\n","\"use client\";\nimport React, { useState } from \"react\";\nimport { useRouter } from \"next/navigation\";\nimport {\n getSelectedJobProjection,\n getRadarChartData,\n} from \"@/lib/sessionStorage\";\nimport { powerCigSimp } from \"@/lib/algorithms/power\";\nimport { calcNote } from \"@/lib/algorithms/calcNote\";\nimport { calcProjectionTime, getDimension } from \"@/lib/algorithms/utils\";\nimport { generateProjectionPdf } from \"@/lib/pdf\";\n\ntype Props = {};\n\nconst ProjectionRapport = (props: Props) => {\n const router = useRouter();\n const [buttonText, setButtonText] = useState(\"Génère ton rapport projection\");\n const [buttonColor, setButtonColor] = useState(\"bg-black\");\n const [disabled, setDisabled] = useState(false);\n const [progress, setProgress] = useState(0);\n\n const resetButton = () => {\n setButtonText(\"Génère ton rapport projection\");\n setButtonColor(\"bg-black\");\n setDisabled(false);\n setProgress(0);\n };\n\n const handleSendPDF = async () => {\n setDisabled(true);\n setButtonColor(\"bg-black\");\n setButtonText(\"En cours...\");\n setProgress(10);\n\n try {\n const selectedJob = await getSelectedJobProjection();\n const jobs: { souhait: string; actuel: string; metier: string }[] =\n await getRadarChartData();\n setProgress(30);\n\n let newPercentage = 0;\n let newDimension = 0;\n let projTime = 0;\n\n if (jobs.length > 0) {\n const souhaitSignature = jobs.map((item) => item.souhait).join(\"\");\n const actuelSignature = jobs.map((item) => item.actuel).join(\"\");\n const metierSignature = jobs.map((item) => item.metier).join(\"\");\n const metierPower = powerCigSimp(metierSignature);\n newPercentage = calcNote(\n metierSignature,\n metierPower,\n souhaitSignature\n );\n newDimension = getDimension(souhaitSignature, metierSignature);\n projTime = calcProjectionTime(actuelSignature, souhaitSignature);\n }\n\n setButtonText(\"Génération en cours\");\n await generateProjectionPdf(\n selectedJob,\n jobs,\n projTime,\n newDimension,\n newPercentage,\n (progressValue: number) => setProgress(progressValue)\n );\n\n setProgress(100);\n setButtonText(\"Rapport généré !\");\n setButtonColor(\"bg-green-600\");\n\n setTimeout(() => {\n router.push(\"/projection?download=true\");\n resetButton();\n }, 2000);\n } catch (error) {\n console.error(\"Erreur génération PDF:\", error);\n setButtonText(\"Erreur, réessaye !\");\n setButtonColor(\"bg-red-600\");\n\n setTimeout(() => {\n resetButton();\n }, 3000);\n }\n };\n\n return (\n
\n \n {buttonText}\n {progress > 0 && progress < 100 && ` (${progress}%)`}\n \n
\n );\n};\n\nexport default ProjectionRapport;\n","\"use client\";\n\nimport { useEffect, useState } from \"react\";\nimport { powerCigSimp } from \"@/lib/algorithms/power\";\nimport { calcNote } from \"@/lib/algorithms/calcNote\";\nimport { calcProjectionTime, getDimension } from \"@/lib/algorithms/utils\";\nimport {\n getSelectedJobProjection,\n saveRadarChartData,\n saveSelectedJobProjection,\n} from \"@/lib/sessionStorage\";\n\ninterface DataItem {\n domaine: string;\n actuel: number;\n souhait: number;\n metier: number;\n}\n\ninterface JobData {\n job: string;\n percentage: number;\n questions: {\n skill: string;\n userSig: number;\n metierSig: number;\n souhaitSig: number;\n actuelSig: number;\n }[];\n}\n\nconst ProjectionSlider = () => {\n const [chartData, setChartData] = useState([]);\n const [jobs, setJobs] = useState([]);\n const [selectedJob, setSelectedJob] = useState(\"\");\n const [percentage, setPercentage] = useState(0);\n const [dimension, setDimension] = useState(0);\n const [projectionTime, setProjectionTime] = useState(0);\n const [isBusy, setIsBusy] = useState(true);\n\n useEffect(() => {\n const fetchProjectionData = async () => {\n setIsBusy(true);\n const quiz_results = localStorage.getItem(\"quiz_results\");\n if (!quiz_results) return;\n\n const response = await fetch(\"/api/projection/getProjectionObject\", {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({ quiz_results }),\n });\n\n const data: JobData[] = await response.json();\n const sortedJobs = data\n .filter((job) => job.percentage > 25)\n .sort((a, b) => b.percentage - a.percentage);\n setJobs(sortedJobs);\n\n const storedJob = getSelectedJobProjection();\n const defaultJob = storedJob ?? sortedJobs[0].job;\n setSelectedJob(defaultJob);\n updateData(sortedJobs.find((job) => job.job === defaultJob));\n setIsBusy(false);\n };\n\n fetchProjectionData();\n }, []);\n\n const updateData = (job: JobData | undefined) => {\n if (!job) return;\n\n const formattedData = job.questions.map((q) => ({\n domaine: q.skill,\n metier: q.metierSig,\n souhait: q.souhaitSig,\n actuel: q.actuelSig,\n }));\n\n setChartData(formattedData);\n saveRadarChartData(formattedData);\n saveSelectedJobProjection(job.job);\n };\n\n useEffect(() => {\n if (chartData.length > 0) {\n const souhaitSignature = chartData.map((item) => item.souhait).join(\"\");\n const actuelSignature = chartData.map((item) => item.actuel).join(\"\");\n const metierSignature = chartData.map((item) => item.metier).join(\"\");\n const metierPower = powerCigSimp(metierSignature);\n const newPercentage = calcNote(\n metierSignature,\n metierPower,\n souhaitSignature\n );\n const newDimension = getDimension(souhaitSignature, metierSignature);\n const projTime = calcProjectionTime(actuelSignature, souhaitSignature);\n\n setPercentage(newPercentage);\n setDimension(newDimension);\n setProjectionTime(projTime);\n }\n }, [chartData]);\n\n const handleJobChange = (e: React.ChangeEvent) => {\n const newJob = e.target.value;\n setSelectedJob(newJob);\n updateData(jobs.find((job) => job.job === newJob));\n };\n\n const handleReset = () => {\n const jobData = jobs.find((job) => job.job === selectedJob);\n updateData(jobData);\n };\n\n const getTimeCategory = (time: number) => {\n if (time > 90)\n return { label: \"1-3 ans\", percent: 100, color: \"bg-green-500\" };\n if (time > 75)\n return { label: \"3-5 ans\", percent: 75, color: \"bg-yellow-400\" };\n if (time > 50)\n return { label: \"5-8 ans\", percent: 50, color: \"bg-orange-400\" };\n return { label: \"8+ ans\", percent: 25, color: \"bg-red-500\" };\n };\n\n const getDimensionLabel = (dim: number) => {\n if (dim < 90) return \"sous-dimensionné\";\n if (dim > 120) return \"sur-dimensionné\";\n return \"bien dimensionné\";\n };\n\n const getAdequationColor = (value: number) => {\n if (value >= 80) return \"text-green-600\";\n if (value >= 70) return \"text-yellow-500\";\n return \"text-red-500\";\n };\n\n return (\n
\n {isBusy ? (\n
\n
Chargement...
\n
\n ) : (\n <>\n
\n
\n
\n

Comment ça marche ?

\n

\n Découvre en quelques étapes comment booster tes compétences et\n transformer ton potentiel\n

\n
    \n
  • \n Ajuste tes compétences : augmente d’un ou\n deux niveaux celles que tu souhaites développer.\n
  • \n
  • \n Observe l’impact : notre algorithme compare\n ton profil actuel et futur pour te montrer ton évolution.\n
  • \n
  • \n Visualise ta progression : notre modèle te\n fournit une estimation réaliste basée sur l’intensité de tes\n changements.\n
  • \n
\n
\n
\n

Métier ciblé

\n
\n

\n Métier : \n {selectedJob}\n

\n \n Adéquation : {percentage.toFixed(1)}%\n

\n

\n Profil {getDimensionLabel(dimension)}\n

\n
\n
\n
\n

\n Temps estimé pour atteindre ton niveau\n

\n

\n Ton temps de progression dépend de l’écart entre ton profil\n actuel et ton profil projeté :\n

\n
\n

\n {getTimeCategory(projectionTime).label}\n

\n
\n \n
\n
\n
\n
\n
\n
\n \n {jobs.map((job) => (\n \n ))}\n \n
\n {chartData.map((item, index) => (\n \n

{item.domaine}

\n
\n Souhait : {item.souhait}\n Actuel : {item.actuel}\n Métier : {item.metier}\n
\n {\n const newValue = Math.max(\n 1,\n Math.min(5, Math.round(Number(e.target.value)))\n );\n setChartData((prevData) => {\n const newData = [...prevData];\n newData[index].souhait = newValue;\n saveRadarChartData(newData);\n return newData;\n });\n }}\n className=\"w-full\"\n />\n
\n ))}\n \n \n Réinitialiser\n \n
\n \n )}\n
\n );\n};\n\nexport default ProjectionSlider;\n","\"use client\";\nimport React, { useState, useEffect, useCallback } from \"react\";\nimport { FaLaugh, FaMeh, FaSadTear, FaSmile } from \"react-icons/fa\";\nimport { FaFaceFrown } from \"react-icons/fa6\";\nimport { powerCigSimp } from \"@/lib/algorithms/power\";\nimport { calcNote } from \"@/lib/algorithms/calcNote\";\nimport CIG_SIMP from \"@/data/CIG_SIMP.json\";\nimport jobsData from \"@/data/metiers.json\";\nimport { saveSessionId, getSessionId, saveResults } from \"@/lib/sessionStorage\";\nimport { calcArea, getDimension } from \"@/lib/algorithms/utils\";\n\nconst icons = [\n { component: FaSadTear, value: 1 },\n { component: FaFaceFrown, value: 2 },\n { component: FaMeh, value: 3 },\n { component: FaSmile, value: 4 },\n { component: FaLaugh, value: 5 },\n];\n\nconst colors: { [key: number]: string } = {\n 1: \"#FF602E\",\n 2: \"#FEB448\",\n 3: \"#FFEE5D\",\n 4: \"#83EBAC\",\n 5: \"#29B767\",\n};\n\nconst QuizSection: React.FC = () => {\n const questionsPerPage = 5;\n const totalQuestions = CIG_SIMP.questions.length;\n const totalPages = Math.ceil(totalQuestions / questionsPerPage);\n\n const [currentPage, setCurrentPage] = useState(0);\n const [progress, setProgress] = useState(0);\n const [resultQuiz, setResultQuiz] = useState([]);\n const [sessionId, setSessionId] = useState(null);\n const [userSignature, setUserSignature] = useState(\"\");\n const [loading, setLoading] = useState(true);\n const [firstLoad, setFirstLoad] = useState(true);\n\n useEffect(() => {\n const existingSessionId = getSessionId();\n if (existingSessionId) {\n setSessionId(existingSessionId);\n loadQuizResults(existingSessionId);\n } else {\n createQuizSession();\n }\n }, []);\n\n useEffect(() => {\n if (resultQuiz.length > 0) {\n setProgress(calculateProgress());\n }\n }, [resultQuiz]);\n\n const loadQuizResults = async (sessionId: string) => {\n try {\n const response = await fetch(\"/api/quiz/refreshQuiz\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n }),\n });\n const data = await response.json();\n\n if (data && data.answers) {\n const updatedQuiz = CIG_SIMP.questions.map(\n (question: any, index: number) => {\n const answer = data.answers.find(\n (a: any) => a.signature_index === index\n );\n return {\n id: `question-${index}`,\n value: answer ? parseInt(answer.value) : null,\n description: answer\n ? CIG_SIMP.questions[answer.signature_index].options[\n parseInt(answer.value) - 1\n ].description\n : null,\n };\n }\n );\n setResultQuiz(updatedQuiz);\n } else {\n setResultQuiz(\n CIG_SIMP.questions.map((_, index) => ({\n id: `question-${index}`,\n value: null,\n description: null,\n }))\n );\n }\n\n setLoading(false);\n } catch (error) {\n setLoading(false);\n }\n };\n\n const isNextDisabled = useCallback(() => {\n const start = currentPage * questionsPerPage;\n const end = start + questionsPerPage;\n return resultQuiz.slice(start, end).some((q) => q.value === null);\n }, [currentPage, questionsPerPage, resultQuiz]);\n\n const createQuizSession = async () => {\n try {\n const response = await fetch(\"/api/quiz/createQuizSession\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({ quiz_code: \"CIG_SIMP\" }),\n });\n const data = await response.json();\n setSessionId(data.id);\n saveSessionId(data.id);\n\n setResultQuiz(\n CIG_SIMP.questions.map((_, index) => ({\n id: `question-${index}`,\n value: null,\n description: null,\n }))\n );\n setLoading(false);\n } catch (error) {\n setLoading(false);\n }\n };\n\n const calculateProgress = useCallback(() => {\n const answeredQuestions = resultQuiz.filter((q) => q.value !== null).length;\n return (answeredQuestions / totalQuestions) * 100;\n }, [resultQuiz, totalQuestions]);\n\n const submitAnswer = async (index: number, value: number) => {\n if (!sessionId) return;\n\n const currentQuestion = CIG_SIMP.questions[index];\n const answer = {\n quiz_id: \"CIG_SIMP\",\n skill_pool: currentQuestion.skillPool,\n skill: currentQuestion.skill,\n signature_index: index,\n value: value.toString(),\n };\n\n const now = new Date();\n const timestamp = now.toISOString();\n try {\n await fetch(\"/api/quiz/submitAnswers\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n answers: [answer],\n userSignature: userSignature,\n dateSignature: timestamp,\n }),\n });\n } catch (error) {}\n };\n\n const deleteAnswer = async (index: number) => {\n if (!sessionId) return;\n\n try {\n await fetch(\"/api/quiz/deleteAnswer\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n signature_index: index,\n }),\n });\n } catch (error) {}\n };\n\n const handleValueChange = (value: number, index: number) => {\n if (resultQuiz[index].value === value) return;\n\n if (resultQuiz[index].value !== null) {\n deleteAnswer(index);\n }\n\n setResultQuiz((prevResults) => {\n const updatedQuiz = [...prevResults];\n updatedQuiz[index].value = value;\n updatedQuiz[index].description =\n CIG_SIMP.questions[index].options[value - 1].description;\n return updatedQuiz;\n });\n\n submitAnswer(index, value);\n scrollToQuestion(index);\n };\n\n const calculateResults = () => {\n const userSignature = resultQuiz.map((q) => q.value || 0).join(\"\");\n setUserSignature(userSignature);\n\n const jobResults = jobsData.map((job) => {\n const metierSignature =\n job.signatures.find((s) => s.quiz_code === \"CIG_SIMP\")?.content || \"\";\n const metierPower = powerCigSimp(metierSignature);\n const percentage = calcNote(metierSignature, metierPower, userSignature);\n const dimension = getDimension(userSignature, metierSignature);\n return { job: job.title, percentage, dimension, userSignature };\n });\n\n console.log(jobResults);\n\n saveResults(jobResults);\n storeResults(jobResults, userSignature);\n\n window.location.href = \"/quiz/selection-metiers\";\n };\n\n const storeResults = async (results: any, userSignature: string) => {\n const now = new Date();\n const timestamp = now.toISOString();\n\n try {\n await fetch(\"/api/quiz/storeResults\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n id: sessionId,\n quiz_code: \"CIG_SIMP\",\n results,\n userSignature: userSignature,\n dateSignature: timestamp,\n }),\n });\n } catch (error) {}\n };\n\n const handlePageChange = (newPage: number) => {\n setCurrentPage(newPage);\n };\n\n const scrollToQuestion = (index: number) => {\n const questionElement = document.getElementById(`question-${index}`);\n if (questionElement) {\n questionElement.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n };\n\n const currentQuestions = CIG_SIMP.questions.slice(\n currentPage * questionsPerPage,\n currentPage * questionsPerPage + questionsPerPage\n );\n\n useEffect(() => {\n // Ne pas scroller lors de la première visite\n if (!firstLoad) {\n const firstQuestion = document.getElementById(\n `question-${currentPage * questionsPerPage}`\n );\n if (firstQuestion) {\n firstQuestion.scrollIntoView({ behavior: \"smooth\", block: \"center\" });\n }\n } else {\n setFirstLoad(false); // La première visite est passée\n }\n }, [currentPage, questionsPerPage, firstLoad]);\n\n if (loading) {\n return (\n
\n

\n Chargement du questionnaire en cours...\n

\n
\n );\n }\n\n return (\n
\n
\n

{Math.trunc(progress)}%

\n
\n
\n
\n \n\n {currentQuestions.map((question, index) => {\n const globalIndex = currentPage * questionsPerPage + index;\n return (\n \n

{question.text}

\n
\n {icons.map(({ component: Icon, value }) => (\n handleValueChange(value, globalIndex)}\n className=\"hover:opacity-80 transition-opacity duration-200\"\n >\n \n \n ))}\n
\n {resultQuiz[globalIndex]?.description && (\n

\n {resultQuiz[globalIndex]?.description}\n

\n )}\n
\n \n );\n })}\n\n
\n handlePageChange(currentPage - 1)}\n disabled={currentPage === 0}\n className=\"bg-[#111213] text-white px-8 py-2 font-semibold rounded-lg disabled:bg-gray-300 transition-all hover:text-[#EBA41B] duration-200\"\n >\n Précédent\n \n {currentPage < totalPages - 1 ? (\n handlePageChange(currentPage + 1)}\n disabled={isNextDisabled()}\n className=\"bg-[#111213] text-white px-8 py-2 font-semibold rounded-lg disabled:bg-gray-300 transition-all hover:text-[#EBA41B] duration-200\"\n >\n Suivant\n \n ) : (\n calculateResults()}\n disabled={isNextDisabled()}\n className=\"bg-green-500 text-white px-8 py-2 font-semibold rounded-lg disabled:bg-gray-300 transition-all hover:text-[#EBA41B] duration-200\"\n >\n Envoyer et calculer les résultats\n \n )}\n
\n
\n );\n};\n\nexport default QuizSection;\n","\"use client\";\nimport React, { useEffect, useState } from \"react\";\nimport { toPng } from \"html-to-image\";\nimport { Bar, Radar } from \"react-chartjs-2\";\nimport {\n Chart as ChartJS,\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n RadialLinearScale,\n PointElement,\n LineElement,\n Filler,\n} from \"chart.js\";\nimport { MdClose, MdInfoOutline } from \"react-icons/md\";\nimport jobList from \"@/data/metiers.json\";\nimport { motion, AnimatePresence } from \"framer-motion\";\n\nChartJS.register(\n CategoryScale,\n LinearScale,\n BarElement,\n Title,\n Tooltip,\n Legend,\n RadialLinearScale,\n PointElement,\n LineElement,\n Filler\n);\n\nconst mappingTraitsNames = {\n \"1\": \"Communication et leadership\",\n \"2\": \"Curiosité et exploration\",\n \"3\": \"Organisation et rigueur\",\n \"4\": \"Créativité et innovation\",\n \"5\": \"Résilience et gestion du stress\",\n \"6\": \"Observation et analyse\",\n \"7\": \"Communication et persuasion\",\n \"8\": \"Indépendance et autonomie\",\n \"9\": \"Flexibilité et adaptabilité\",\n \"10\": \"Décision et stratégie\",\n \"11\": \"Éthique et bienveillance\",\n};\n\nconst StudentResult = () => {\n const [bestCategory, setBestCategory] = useState(null);\n const [categoryAverages, setCategoryAverages] = useState([]);\n const [traitAverages, setTraitAverages] = useState([]);\n const [isGeneratingImage, setIsGeneratingImage] = useState(false);\n const [generatedImage, setGeneratedImage] = useState(null);\n const [showShareModal, setShowShareModal] = useState(false);\n const [storedResults, setStoredResults] = useState(null);\n const [showJobModal, setShowJobModal] = useState(false);\n\n const filteredJobs = jobList.filter((job) => job.category === bestCategory);\n\n useEffect(() => {\n const fetchData = async () => {\n const local = localStorage.getItem(\"student_quiz_results\");\n if (local) {\n setStoredResults(local);\n }\n };\n fetchData();\n }, []);\n\n // Exécute fetchStoredResults quand storedResults est mis à jour\n useEffect(() => {\n if (storedResults) {\n fetchStoredResults();\n }\n }, [storedResults]);\n\n const fetchStoredResults = async () => {\n if (storedResults) {\n try {\n const parsedResults = await JSON.parse(storedResults);\n const sortedCategoryAverages = (\n parsedResults.category_averages || []\n ).sort((a: any, b: any) => b.average - a.average);\n setCategoryAverages(sortedCategoryAverages);\n setTraitAverages(parsedResults.trait_averages || []);\n setBestCategory(sortedCategoryAverages[0]?.category);\n } catch (error) {\n console.error(\"Erreur lors du parsing JSON :\", error);\n }\n }\n };\n\n const barChartData = {\n labels: categoryAverages.map((category: any) => category.category),\n datasets: [\n {\n label: \"Moyenne (%)\",\n data: categoryAverages.map((category: any) => category.average),\n backgroundColor: \"rgba(255, 138, 0, 0.5)\",\n borderColor: \"rgba(255, 138, 0, 1)\",\n borderWidth: 1,\n },\n ],\n };\n\n const radarChartData = {\n labels: traitAverages.map(\n (trait: { label: keyof typeof mappingTraitsNames }) =>\n mappingTraitsNames[trait.label]\n ),\n datasets: [\n {\n label: \"Traits du profil (%)\",\n data: traitAverages.map((trait: any) => trait.average),\n backgroundColor: \"rgba(225, 1, 105, 0.2)\",\n borderColor: \"rgba(225, 1, 105, 1)\",\n borderWidth: 2,\n pointBackgroundColor: \"rgba(225, 1, 105, 1)\",\n },\n ],\n };\n\n const generateImage = () => {\n setIsGeneratingImage(true);\n\n setTimeout(() => {\n const exportView = document.getElementById(\"export-view\");\n if (exportView) {\n toPng(exportView)\n .then((dataUrl) => {\n setGeneratedImage(dataUrl);\n setShowShareModal(true);\n })\n .catch((err) => console.error(\"Erreur de génération :\", err))\n .finally(() => setIsGeneratingImage(false));\n }\n }, 1000);\n };\n\n return (\n \n {isGeneratingImage && (\n \n )}\n\n
\n
\n
\n
\n

\n Bravo !\n

\n

\n En analysant tes réponses, nous avons identifié ton profil et la\n famille de métiers informatiques la plus adaptée à toi.\n

\n {bestCategory && (\n
\n

\n {bestCategory.toUpperCase()}\n

\n \n
\n )}\n
\n\n
\n \n
\n
\n\n
\n \n
\n
\n
\n \n Partager sur les réseaux sociaux !\n \n
\n
\n\n {showShareModal && (\n
\n
\n

\n Partage tes résultats sur les réseaux sociaux\n

\n\n {generatedImage && (\n
\n

\n Étape 1 : Télécharge cette image\n

\n \n \n Télécharger l'image\n \n
\n )}\n\n
\n

\n Étape 2 : Choisis ton réseau social pour partager !\n

\n
\n \n window.open(\n \"https://twitter.com/intent/tweet?text=Découvre mes résultats au quiz d'orientation IT IOVIA !&url=https://www.iovia.fr/\",\n \"_blank\"\n )\n }\n className=\"px-6 py-2 lg:py-4 bg-blue-500 text-white font-bold rounded-lg hover:bg-blue-600 text-sm lg:text-lg\"\n >\n Twitter\n \n \n window.open(\"https://www.instagram.com/\", \"_blank\")\n }\n className=\"px-6 py-2 lg:py-4 bg-pink-500 text-white font-bold rounded-lg hover:bg-pink-600 text-sm lg:text-lg\"\n >\n Instagram\n \n \n window.open(\"https://www.tiktok.com/\", \"_blank\")\n }\n className=\"px-6 py-2 lg:py-4 bg-black text-white font-bold rounded-lg hover:bg-gray-800 text-sm lg:text-lg\"\n >\n TikTok\n \n
\n
\n\n setShowShareModal(false)}\n >\n \n \n
\n
\n )}\n\n \n {showJobModal && (\n \n \n

\n Métiers de la famille
\n {bestCategory}\n

\n\n
\n {filteredJobs.length > 0 ? (\n
    \n {filteredJobs.map((job, index) => (\n \n {job.title}\n \n ))}\n
\n ) : (\n

Aucune donnée disponible

\n )}\n
\n\n setShowJobModal(false)}\n >\n Fermer\n \n\n setShowJobModal(false)}\n >\n \n \n \n \n )}\n
\n \n );\n};\n\nconst ExportableView = ({\n bestCategory,\n barChartData,\n radarChartData,\n}: any) => (\n \n
\n \n Bravo !\n \n

\n Ton profil et la famille de métiers informatiques la plus adaptée sont :\n

\n {bestCategory && (\n \n {bestCategory.toUpperCase()}\n \n )}\n
\n
\n `${value}%`,\n font: {\n size: 30, // Increase y-axis labels font size\n },\n },\n },\n x: {\n ticks: {\n font: {\n size: 30, // Increase x-axis labels font size\n },\n },\n },\n },\n }}\n />\n
\n
\n \n
\n \n);\n\nexport default StudentResult;\n","/**\n * Calculate a note based on the difference between metierSignature and userSignature,\n * affected by the metierPower.\n *\n * @param {string} metierSignature - The reference signature to compare against.\n * @param {number} metierPower - The power or weight of the metier signature.\n * @param {string} userSignature - The user's signature to be compared.\n * @return {number} The calculated note as a percentage.\n */\nexport function calcNote(metierSignature, metierPower, userSignature) {\n let cubeMino = 0, cubeMajo = 0;\n\n for (let i = 0; i < userSignature.length; i++) {\n const difference = metierSignature.charAt(i) - userSignature.charAt(i);\n\n if (difference < 0) {\n cubeMajo += Math.pow(3, -difference);\n } else if (difference !== 0) {\n cubeMino += Math.pow(3, difference);\n }\n }\n\n return Math.max((((metierPower - cubeMino + cubeMajo) / metierPower) * ((metierPower - cubeMajo - cubeMino) / metierPower)) * 100, 0);\n}\n","/**\n * Concatenates the characters of the input string, converts each character to an integer,\n * and returns the sum of these integers.\n *\n * @param {string} str - The input string containing numeric characters to be summed.\n * @return {number} The sum of the numeric characters in the input string.\n */\nfunction concatAndSum(str) {\n return str.split('').reduce((sum, char) => sum + parseInt(char), 0);\n}\n\n/**\n * Calculates the power of a signature based on a given factor.\n *\n * @param {string} signature - The signature to be processed.\n * @param {number} factor - The factor to be used in the calculation.\n * @return {number} The calculated power of the signature.\n */\nfunction calculatePower(signature, factor) {\n const sum = concatAndSum(signature);\n return (sum / factor >= 2.5)\n ? factor * Math.pow(3, sum / factor)\n : factor * Math.pow(3, 5 - sum / factor);\n}\n\n/**\n * Calculates the power of a signature based on a factor of 33.\n * @param {string} signature - The signature to be processed.\n * @returns {number} The calculated power of the signature.\n */\nexport function powerCigSimp(signature) {\n return calculatePower(signature, 33);\n}\n","/**\n * Calcule l'aire totale pour une signature donnée\n * @param {string} signature - La signature à traiter\n * @returns {number} - L'aire totale\n */\nexport function calcArea(signature) {\n let area = 0;\n for (let i = 0; i < signature.length; i++) {\n const nextValue =\n i === signature.length - 1 ? signature[0] : signature[i + 1];\n area += (signature[i] * nextValue * Math.sin((2 * Math.PI) / 33)) / 2;\n }\n return area;\n}\n\n/**\n * Donne le dimmensionnement de la signature pour un métier donné\n * @param {string} signature - La signature du métier à traiter\n * @param {string} userSignature - La signature de l'utilisateur\n * @returns {number} - Le dimmensionnement\n */\nexport function getDimension(userSignature, signature) {\n const userArea = calcArea(userSignature);\n const jobArea = calcArea(signature);\n return (Math.sqrt(jobArea) / Math.sqrt(userArea)) * 100;\n}\n\nexport function calcProjectionTime(actuelSignature, souhaitSignature) {\n if (actuelSignature.length !== souhaitSignature.length) {\n throw new Error(\"Les chaînes doivent avoir la même longueur\");\n }\n\n let sommeDelta = 0;\n let sommeActuel = 0;\n let sommeSouhait = 0;\n\n for (let i = 0; i < actuelSignature.length; i++) {\n const digit1 = Number(actuelSignature[i]);\n const digit2 = Number(souhaitSignature[i]);\n\n sommeActuel += digit1;\n sommeSouhait += digit2;\n sommeDelta += Math.abs(digit1 - digit2);\n }\n\n const projectionTime =\n (1 - Math.abs(sommeActuel - sommeSouhait) / sommeActuel) *\n (1 - sommeDelta / sommeActuel) *\n 100;\n\n return projectionTime;\n}\n","import currentQuestions from \"@/data/CIG_SIMP.json\";\nimport { getResultsSelection } from \"./sessionStorage\";\n\ntype AnswerSkillPools = {\n __typename: string;\n quiz_id: string;\n skill_pool: string;\n skill: string;\n signature_index: number;\n value: string;\n};\n\nexport async function formatResults() {\n const resultsSelection = getResultsSelection();\n return resultsSelection\n .map((result: { job: string; percentage: number, dimension: number }) => ({\n metier: result.job,\n score: parseFloat(result.percentage.toFixed(2)),\n dimension: result.dimension\n }))\n .sort((a: { score: number; }, b: { score: number; }) => b.score - a.score);\n}\n\nexport async function transformAnswersToSkillPools(\n answers: AnswerSkillPools[]\n) {\n const skillPoolMap: { [key: string]: { total: number; count: number } } = {};\n\n answers.forEach((answer) => {\n const value = parseInt(answer.value);\n if (!skillPoolMap[answer.skill_pool]) {\n skillPoolMap[answer.skill_pool] = { total: 0, count: 0 };\n }\n skillPoolMap[answer.skill_pool].total += value;\n skillPoolMap[answer.skill_pool].count += 1;\n });\n\n const skillPools = Object.keys(skillPoolMap).map((pool) => {\n const { total, count } = skillPoolMap[pool];\n const average = (total / (count * 5)) * 100;\n return { name: pool, average: Math.round(average) };\n });\n\n return skillPools;\n}\n\nexport async function transformAnswers(currentAnswers: any) {\n return currentAnswers.map((answer: any) => {\n const question = currentQuestions.questions.find(\n (q) => q.skill === answer.skill\n );\n\n if (!question) {\n throw new Error(`Skill ${answer.skill} not found in questions`);\n }\n\n return {\n __typename: \"Answer\",\n quiz_id: \"CIG_SIMP\",\n skill_pool: question.skillPool,\n skill: answer.skill,\n signature_index: question.signatureIndex,\n value: answer.value, // On utilise la valeur correcte\n };\n });\n}\n","import fontkit from \"@pdf-lib/fontkit\";\n\nconst fontCache = new Map(); // Cache pour les polices chargées\n\nconst loadFont = async (url) => {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Erreur lors du chargement de la police : ${url}`);\n }\n return await response.arrayBuffer();\n};\n\nexport const loadFonts = async (pdfDoc) => {\n pdfDoc.registerFontkit(fontkit);\n\n const fontsToLoad = {\n topTitleFont: `/pdf/fonts/LEMONMILK-Bold.otf`,\n titleFont: `/pdf/fonts/LEMONMILK-Regular.otf`,\n bodyFont: `/pdf/fonts/Capriola-Regular.ttf`,\n };\n\n const loadedFonts = {};\n\n for (const [fontKey, fontUrl] of Object.entries(fontsToLoad)) {\n if (fontCache.has(fontUrl)) {\n loadedFonts[fontKey] = fontCache.get(fontUrl);\n } else {\n const fontBytes = await loadFont(fontUrl);\n const embeddedFont = await pdfDoc.embedFont(fontBytes);\n fontCache.set(fontUrl, embeddedFont);\n loadedFonts[fontKey] = embeddedFont;\n }\n }\n\n return loadedFonts;\n};\n","export const layout = {\n pageWidth: 1080,\n pageHeight: 1080,\n margin: 90,\n};","import { rgb } from 'pdf-lib';\n\nexport const styles = {\n topTitleStyle: { color: rgb(35 / 255, 40 / 255, 58 / 255), size: 32 },\n titleStyle: { color: rgb(35 / 255, 40 / 255, 58 / 255), size: 28 },\n\n bodyHomeStyle: { color: rgb(35 / 255, 40 / 255, 58 / 255), size: 46 },\n bodyStyle: { color: rgb(35 / 255, 40 / 255, 58 / 255), size: 20 },\n subtitleStyle: { color: rgb(35 / 255, 40 / 255, 58 / 255), size: 20 },\n};","import { rgb } from \"pdf-lib\";\nimport { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport {\n calculateTextPosition,\n formatText,\n getBottomYPosition,\n} from \"../../utils/utils\";\nimport dimension from \"@/data/promptProjection/dimension.json\";\nimport percentage from \"@/data/promptProjection/percentage.json\";\nimport time from \"@/data/promptProjection/time.json\";\n\nexport const createSynthesisProjectionTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts\n) => {\n const jobTitle = data.selectedJob.toUpperCase();\n\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: \"SYNTHÈSE PROJECTION\",\n leftTitle: formatText(jobTitle, 24),\n pagination: 2,\n });\n\n const synthesisText = formatText(\n await generateDimensionText(data.newDimension),\n 60\n );\n const improvementText = formatText(\n await generatePercentageText(data.newPercentage)\n );\n\n const timeText = formatText(await generateTimeText(data.projTime));\n\n const synthesisTitleYPosition = layout.pageHeight - layout.margin - 160;\n\n const synthesisTextYPosition = getBottomYPosition(\n \"SYNTHÈSE\",\n fonts.titleFont,\n styles.titleStyle.size,\n synthesisTitleYPosition,\n styles.titleStyle.size * 1.33\n );\n drawTextElement(\n page,\n synthesisText,\n fonts.bodyFont,\n styles.bodyStyle,\n layout.margin,\n synthesisTextYPosition - 10\n );\n\n const improvementTitleYPosition =\n getBottomYPosition(\n synthesisText,\n fonts.bodyFont,\n styles.bodyStyle.size,\n synthesisTextYPosition - 30,\n styles.bodyStyle.size * 1.33\n ) - 80;\n drawTextElement(\n page,\n improvementText,\n fonts.bodyFont,\n styles.bodyStyle,\n layout.margin,\n improvementTitleYPosition - 60\n );\n\n const timeTitleYPosition =\n getBottomYPosition(\n synthesisText,\n fonts.bodyFont,\n styles.bodyStyle.size,\n improvementTitleYPosition - 30,\n styles.bodyStyle.size * 1.33\n ) - 80;\n drawTextElement(\n page,\n timeText,\n fonts.bodyFont,\n styles.bodyStyle,\n layout.margin,\n timeTitleYPosition - 60\n );\n\n return page;\n};\n\nconst generateDimensionText = async (newDimension) => {\n let baseText = \"\";\n if (newDimension > 120) {\n baseText = `Ton profil est sous-dimensionné par rapport au niveau attendu pour ce métier. \\n\\n${\n newDimension < 90\n ? \"Un profil sous-dimensionné signifie que tes compétences sont inférieures à celles attendues.\"\n : newDimension > 120\n ? \"Un profil sur-dimensionné signifie que tu vises un métier demandant plus de compétences que ton profil projeté.\"\n : \"Tu es bien dimensionné, ce qui est optimal.\"\n }`;\n } else if (newDimension < 90) {\n baseText = `Ton profil est sur-dimensionné par rapport au niveau attendu pour ce métier. \\n\\n${\n newDimension < 90\n ? \"Un profil sous-dimensionné signifie que tes compétences sont inférieures à celles attendues.\"\n : newDimension > 120\n ? \"Un profil sur-dimensionné signifie que tu vises un métier demandant plus de compétences que ton profil projeté.\"\n : \"Tu es bien dimensionné, ce qui est optimal.\"\n }`;\n } else {\n baseText = `Ton profil est bien dimensionné par rapport au niveau attendu pour ce métier. \\n\\n${\n newDimension < 90\n ? \"Un profil sous-dimensionné signifie que tes compétences sont inférieures à celles attendues.\"\n : newDimension > 120\n ? \"Un profil sur-dimensionné signifie que tu vises un métier demandant plus de compétences que ton profil projeté.\"\n : \"Tu es bien dimensionné, ce qui est optimal.\"\n }`;\n }\n\n const resultDimensionGPT = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: baseText,\n textPrompt: dimension,\n }),\n });\n const resultDim = await resultDimensionGPT.json();\n\n return resultDim.data.content;\n};\n\nconst generatePercentageText = async (newPercentage) => {\n const baseText = `Ton profil projeté est à ${newPercentage.toFixed(\n 1\n )}% aligné avec ce métier. ${\n newPercentage >= 80\n ? \"Ton profil correspond au métier.\"\n : newPercentage >= 70\n ? \"Ton profil correspond presque au métier, cela risque d'être challengeant.\"\n : \"Ton profil ne correspond pas au métier.\"\n }`;\n\n const resultPercentageGPT = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: baseText,\n textPrompt: percentage,\n }),\n });\n const resultPercent = await resultPercentageGPT.json();\n\n return resultPercent.data.content;\n};\n\nconst generateTimeText = async (projTime) => {\n let baseText = \"\";\n if (projTime <= 50) {\n baseText = \"Ton temps de progression est estimé à plus de 8 ans.\";\n } else if (projTime <= 75) {\n baseText = \"Ton temps de progression est estimé entre 5 et 8 ans.\";\n } else if (projTime <= 90) {\n baseText = \"Ton temps de progression est estimé entre 3 et 5 ans.\";\n } else {\n baseText = \"Ton temps de progression est estimé entre 1 et 3 ans.\";\n }\n\n const resultPercentageGPT = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: baseText,\n textPrompt: time,\n }),\n });\n const resultPercent = await resultPercentageGPT.json();\n\n return resultPercent.data.content;\n};\n\nconst drawTextElement = (page, text, font, style, x, y) => {\n const { x: adjustedX, y: adjustedY } = calculateTextPosition(\n text,\n font,\n style.size,\n y,\n \"left\"\n );\n page.drawText(text, {\n x: adjustedX,\n y: adjustedY,\n size: style.size,\n font: font,\n color: style.color || rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: style.size * 1.33,\n });\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport { formatText, renderProjectionChart } from \"../../utils/utils\";\n\nexport const createGeneralProjectionTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts,\n jobIndex = 0\n) => {\n const jobTitle = data.selectedJob.toUpperCase();\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: \"ANALYSE GLOBALE\",\n leftTitle: formatText(jobTitle, 24),\n pagination: 3,\n });\n\n const radarChartImageUrl = await renderProjectionChart(data);\n\n const radarChartImageBytes = await fetch(radarChartImageUrl).then((res) =>\n res.arrayBuffer()\n );\n const radarChartImageEmbed = await pdfDoc.embedPng(radarChartImageBytes);\n const targetWidth = 900; // Taille idéale dans le PDF\n const scaleFactor = targetWidth / radarChartImageEmbed.width;\n const chartDims = radarChartImageEmbed.scale(scaleFactor);\n\n page.drawImage(radarChartImageEmbed, {\n x: layout.pageWidth / 2 - chartDims.width / 2,\n y: layout.pageHeight - layout.margin - chartDims.height - 180,\n width: chartDims.width,\n height: chartDims.height,\n });\n\n return page;\n};\n","export { createSynthesisProjectionTemplate } from \"./syntheseProjectionTemplate\";\nexport { createGeneralProjectionTemplate } from \"./generalProjectionTemplate\";\n","import { PDFDocument } from \"pdf-lib\";\nimport {\n createProjectionAccueilPage,\n // createJobSynthesisTemplates,\n // createSommairePage,\n // createTopPage,\n} from \"../templates/common\";\nimport {\n createSynthesisProjectionTemplate,\n createGeneralProjectionTemplate,\n} from \"../templates/projection\";\nimport { loadFonts } from \"../config/fonts\";\nimport { getBackgroundImages, saveProjectionPdf } from \"./utils\";\n\nexport const generateProjectionPdf = async (\n selectedJob,\n jobs,\n projTime,\n newDimension,\n newPercentage,\n onProgressUpdate // paramètre pour les maj progression\n) => {\n const pdfDoc = await PDFDocument.create();\n const fonts = await loadFonts(pdfDoc);\n const { bgPdf, bgPdfFlou } = getBackgroundImages();\n\n const data = {\n selectedJob,\n jobs,\n projTime,\n newDimension,\n newPercentage,\n };\n\n onProgressUpdate(10);\n\n await createProjectionAccueilPage(pdfDoc, data, bgPdf, true, fonts);\n onProgressUpdate(20);\n\n await createSynthesisProjectionTemplate(pdfDoc, data, bgPdf, fonts);\n onProgressUpdate(50);\n await createGeneralProjectionTemplate(pdfDoc, data, bgPdf, fonts);\n\n onProgressUpdate(100);\n\n return await saveProjectionPdf(pdfDoc, \"projection.pdf\");\n};\n","export { generatePdf } from \"./utils/generatePdf\";\nexport { generateProjectionPdf } from \"./utils/generateProjectionPdf\";\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport { calculateTextPosition } from \"../../utils/utils\";\n\nexport const createAccueilPage = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n logoImageUrl,\n fonts\n) => {\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n logo: logoImageUrl,\n pagination: \"1\",\n });\n\n const personalizedText = `D'après notre analyse,\\nton profil correspond\\nau métier de\\n${data.results[0].metier}`;\n\n const { x, y } = calculateTextPosition(\n personalizedText,\n fonts.bodyFont,\n styles.bodyHomeStyle.size,\n layout.pageHeight - layout.margin - 340,\n \"left\"\n );\n\n page.drawText(personalizedText, {\n x: x,\n y: y,\n size: styles.bodyHomeStyle.size,\n font: fonts.bodyFont,\n color: styles.bodyHomeStyle.color,\n lineHeight: styles.bodyHomeStyle.size * 1.5,\n });\n\n return page;\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport { calculateTextPosition } from \"../../utils/utils\";\n\nexport const createSommairePage = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts\n) => {\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {pagination: \"2\"});\n\n const title = \"Sommaire\";\n const startYTitle = layout.pageHeight - layout.margin - 100;\n\n const { x: titleX, y: titleY } = calculateTextPosition(\n title,\n fonts.topTitleFont,\n styles.titleStyle.size,\n startYTitle,\n \"center\"\n );\n\n page.drawText(title, {\n x: titleX,\n y: titleY,\n size: styles.titleStyle.size * 1.33,\n font: fonts.topTitleFont,\n color: styles.titleStyle.color,\n lineHeight: styles.titleStyle.size * 1.2,\n });\n\n const metiersText =\n data.results.length === 1\n ? \"• Tes résultats pour le métier choisi\"\n : `• Tes résultats pour les ${data.results.length} métiers choisis`;\n\n const text = [\n {\n content: metiersText,\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.5,\n weight: \"bold\",\n },\n { content: \"\", font: fonts.bodyFont, size: styles.bodyStyle.size },\n {\n content: \"• Tes détails de résultats (par métier) :\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.5,\n weight: \"bold\",\n },\n {\n content: \" - Groupes de compétences forts\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n {\n content: \" - Forces & Faiblesses de ton profil\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n {\n content: \" - Synthèse profil & axes d’amélioration\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n {\n content: \" - Fiche Métier\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n { content: \"\", font: fonts.bodyFont, size: styles.bodyStyle.size },\n {\n content: \"• Synthèse des résultats pour 50 métiers :\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.5,\n weight: \"bold\",\n },\n {\n content: \" - Correspondance par type de métier\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n {\n content: \" - Correspondance par métier\",\n font: fonts.bodyFont,\n size: styles.bodyStyle.size * 1.2,\n weight: \"normal\",\n },\n ];\n\n let currentY = startYTitle - 200;\n\n text.forEach(({ content, font, size, weight }) => {\n const { x } = calculateTextPosition(content, font, size, currentY, \"left\");\n page.drawText(content, {\n x,\n y: currentY,\n size,\n font,\n color: styles.bodyStyle.color,\n lineHeight: size * 1.4,\n fontWeight: weight,\n });\n\n currentY -= size * 1.6;\n });\n\n return page;\n};\n","import {createPageTemplate} from \"../pageTemplate\";\n\nexport const createCtaPage = async (pdfDoc, data, backgroundImageUrl, logoImageUrl, fonts) => {\n\n return await createPageTemplate(pdfDoc, data, backgroundImageUrl, false);\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport {\n addCenteredStyle,\n calculateTextPosition,\n formatText,\n renderChart,\n} from \"../../utils/utils\";\nimport { styles } from \"../../config/styles\";\nimport { color } from \"framer-motion\";\n\nexport const createTopPage = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts\n) => {\n const pageTitle = formatText(`RÉSULTATS généraux`, 30);\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n leftTitle: pageTitle,\n pagination: \"3\",\n });\n\n const chartData = {\n results: data.results.map((result, index) => ({\n metier: data.results[index].metier,\n score: result.score,\n })),\n };\n\n const barChartImageUrl = await renderChart(\"bar\", chartData, {\n plugins: {\n x: {\n title: { display: false, text: \"Métiers\" },\n beginAtZero: true,\n grid: { display: false },\n color: \"#000\",\n ticks: {\n font: { size: 32 },\n },\n },\n y: {\n beginAtZero: true,\n max: 100,\n color: \"#000\",\n title: { display: true, text: \"Score (%)\" },\n grid: { display: true },\n },\n legend: {\n display: false,\n labels: { font: { size: 24 } },\n },\n title: {\n display: false,\n text: \"Correspondance des métiers\",\n },\n datalabels: {\n anchor: \"center\",\n align: \"center\",\n color: \"#000\",\n font: {\n size: 12,\n weight: \"bold\",\n },\n formatter: (value, context) => {\n return `${value}%`;\n },\n },\n },\n });\n\n const barChartImageBytes = await fetch(barChartImageUrl).then((res) =>\n res.arrayBuffer()\n );\n const barChartImageEmbed = await pdfDoc.embedPng(barChartImageBytes);\n const targetWidth = 850; // Taille idéale dans le PDF\n const scaleFactor = targetWidth / barChartImageEmbed.width;\n const chartDims = barChartImageEmbed.scale(scaleFactor);\n\n page.drawImage(barChartImageEmbed, {\n x: layout.pageWidth / 2 - chartDims.width / 2,\n y: layout.pageHeight - layout.margin - chartDims.height - 100,\n width: chartDims.width,\n height: chartDims.height,\n });\n\n let text;\n if (data.results.length === 1) {\n text =\n \"Retrouve la correspondance en\\n\" +\n \"pourcentage pour le métier que\\n\" +\n \"tu as sélectionné.\\n\";\n } else if (data.results.length === 2) {\n text =\n \"Retrouve la correspondance en\\n\" +\n \"pourcentage entre le métier pour lequel\\n\" +\n \"Ton profil a la meilleure adéquation, suivi\\n\" +\n \"de l'autre métier choisi.\\n\";\n } else {\n text =\n \"Retrouve la correspondance en\\n\" +\n \"pourcentage entre le métier pour lequel\\n\" +\n \"ton profil a la meilleure adéquation, suivi\\n\" +\n `des ${data.results.length - 1} autres métiers choisis.\\n`;\n }\n\n text = addCenteredStyle(text);\n\n const bottomChartYPosition =\n layout.pageHeight - layout.margin - chartDims.height - 100;\n\n const { x, y } = calculateTextPosition(\n text,\n fonts.bodyFont,\n styles.bodyStyle.size,\n bottomChartYPosition - 40,\n \"center\"\n );\n\n page.drawText(text, {\n x: x,\n y: y,\n size: styles.bodyStyle.size,\n font: fonts.bodyFont,\n color: styles.bodyStyle.color,\n lineHeight: styles.bodyStyle.size * 1.33,\n alignment: \"center\",\n });\n\n return page;\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { formatText } from \"../../utils/utils\";\nimport Chart from \"chart.js/auto\";\nimport ChartDataLabels from \"chartjs-plugin-datalabels\";\n\nexport const createJobSynthesisTemplates = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts\n) => {\n const groupedJobs = {\n underDimensioned: [],\n wellDimensioned: [],\n overDimensioned: [],\n };\n\n data.forEach((job) => {\n if (job.dimension < 90) {\n groupedJobs.underDimensioned.push(job);\n } else if (job.dimension > 120) {\n groupedJobs.overDimensioned.push(job);\n } else {\n groupedJobs.wellDimensioned.push(job);\n }\n });\n\n const groupTitles = {\n underDimensioned: \"Métiers Sous-Dimensionnés\",\n wellDimensioned: \"Métiers Bien Dimensionnés\",\n overDimensioned: \"Métiers Sur-Dimensionnés\",\n };\n\n for (const [group, jobs] of Object.entries(groupedJobs)) {\n if (jobs.length > 0) {\n const sortedJobs = jobs.sort((a, b) => b.percentage - a.percentage);\n await createJobSynthesisTemplate(\n pdfDoc,\n sortedJobs,\n backgroundImageUrl,\n fonts,\n groupTitles[group]\n );\n }\n }\n};\n\nconst createJobSynthesisTemplate = async (\n pdfDoc,\n jobs,\n backgroundImageUrl,\n fonts,\n title\n) => {\n const page = await createPageTemplate(pdfDoc, {}, backgroundImageUrl, {\n leftTitle: \"SYNTHÈSE\",\n rightTitle: title.toUpperCase(),\n pagination: `${jobs.length} Métiers`,\n });\n\n const barChartImageUrl = await generateBarChartImage(jobs);\n\n const barChartImageBytes = await fetch(barChartImageUrl).then((res) =>\n res.arrayBuffer()\n );\n const barChartImageEmbed = await pdfDoc.embedPng(barChartImageBytes);\n const targetWidth = 900; // Taille idéale dans le PDF\n const scaleFactor = targetWidth / barChartImageEmbed.width;\n const chartDims = barChartImageEmbed.scale(scaleFactor);\n\n page.drawImage(barChartImageEmbed, {\n x: layout.pageWidth / 2 - chartDims.width / 2,\n y: layout.pageHeight / 2 - chartDims.height / 2 - 20,\n width: chartDims.width,\n height: chartDims.height,\n });\n\n return page;\n};\n\nconst generateBarChartImage = async (jobs) => {\n return new Promise((resolve) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n // Taille fixe du canvas\n const width = 800;\n const height = 600;\n\n // Forcer la résolution\n const dpr = window.devicePixelRatio || 1;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n if (!ctx) {\n console.error(\"❌ Impossible de récupérer le contexte 2D\");\n return reject(\"Pas de contexte 2D\");\n }\n\n Chart.register(ChartDataLabels);\n\n const accessibleJobs = jobs.filter((job) => job.percentage >= 80);\n const nonAccessibleJobs = jobs.filter((job) => job.percentage < 80);\n\n const allLabels = jobs.map((job) => job.job);\n const accessibleData = allLabels.map((label) => {\n const job = accessibleJobs.find((job) => job.job === label);\n return job ? job.percentage : null; // Use null for non-accessible jobs\n });\n\n const nonAccessibleData = allLabels.map((label) => {\n const job = nonAccessibleJobs.find((job) => job.job === label);\n return job ? job.percentage : null; // Use null for accessible jobs\n });\n\n new Chart(ctx, {\n type: \"bar\",\n data: {\n labels: allLabels,\n datasets: [\n {\n label: \"Métiers accessibles\",\n data: accessibleData,\n backgroundColor: \"rgba(225, 1, 105, 0.6)\",\n borderColor: \"rgba(225, 1, 105, 1)\",\n borderWidth: 1,\n },\n {\n label: \"Métiers non compatibles\",\n data: nonAccessibleData,\n backgroundColor: \"rgba(255, 142, 49, 0.6)\",\n borderColor: \"rgba(255, 142, 49, 1)\",\n borderWidth: 1,\n },\n ],\n },\n options: {\n indexAxis: \"y\",\n responsive: false,\n animation: false,\n maintainAspectRatio: false,\n scales: {\n x: {\n min: 0,\n max: 100,\n ticks: {\n stepSize: 20,\n font: {\n size: 16,\n },\n },\n },\n y: {\n ticks: {\n autoSkip: false,\n font: {\n size: 14,\n },\n },\n },\n },\n plugins: {\n legend: {\n display: true,\n position: \"top\",\n labels: {\n font: {\n size: 16,\n },\n },\n },\n datalabels: {\n display: false,\n },\n /*\n datalabels: {\n anchor: \"center\",\n align: \"center\",\n color: \"#fff\",\n font: {\n size: 18,\n weight: \"bold\",\n },\n formatter: (value, context) => {\n return value !== null\n ? `${context.chart.data.labels[context.dataIndex]} (${value.toFixed(\n 2\n )}%)`\n : \"\";\n },\n },\n\n */\n },\n categoryPercentage: 1,\n barPercentage: 1,\n },\n });\n // canvas.toDataURL(\"image/png\");\n setTimeout(() => {\n const imageUrl = canvas.toDataURL(\"image/png\");\n resolve(imageUrl);\n }, 500);\n });\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport { calculateTextPosition } from \"../../utils/utils\";\n\nexport const createProjectionAccueilPage = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n logoImageUrl,\n fonts\n) => {\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n logo: logoImageUrl,\n pagination: 1,\n });\n\n const personalizedText = `${\n data.selectedJob\n }\\n\\nD'après notre\\nanalyse, ton nouveau match\\naprès projection\\nest : ${data.newPercentage.toFixed(\n 1\n )}%`;\n\n const { x, y } = calculateTextPosition(\n personalizedText,\n fonts.bodyFont,\n styles.bodyHomeStyle.size,\n layout.pageHeight - layout.margin - 340,\n \"left\"\n );\n\n page.drawText(personalizedText, {\n x: x,\n y: y,\n size: styles.bodyHomeStyle.size,\n font: fonts.bodyFont,\n color: styles.bodyHomeStyle.color,\n lineHeight: styles.bodyHomeStyle.size * 1.5,\n });\n\n return page;\n};\n","export { createAccueilPage } from \"./accueilTemplate\";\nexport { createSommairePage } from \"./sommaireTemplate\";\nexport { createCtaPage } from \"./ctaTemplate\";\nexport { createTopPage } from \"./topTemplate\";\nexport { createJobSynthesisTemplates } from \"./jobSynthesisTemplate\";\n\nexport { createProjectionAccueilPage } from \"./accueilProjectionTemplate\";\n","import { layout } from \"../config/layout\";\nimport { styles } from \"../config/styles\";\nimport { loadFonts } from \"../config/fonts\";\nimport { calculateTextPosition, loadImage, drawImage } from \"../utils/utils\";\nimport { rgb } from \"pdf-lib\";\n\nconst imageCache = new Map();\n\nexport const createPageTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n options = {}\n) => {\n const {\n logo = null,\n leftTitle = null,\n rightTitle = null,\n pagination = null,\n } = options;\n\n const page = pdfDoc.addPage([layout.pageWidth, layout.pageHeight]);\n const fonts = await loadFonts(pdfDoc);\n\n // Set background image if available\n if (backgroundImageUrl) {\n await drawBackgroundImage(pdfDoc, page, backgroundImageUrl);\n }\n\n // Draw logo or left title\n if (logo) {\n await drawLogo(pdfDoc, page);\n } else if (leftTitle) {\n drawLeftTitle(page, leftTitle, fonts);\n }\n\n // Draw right title\n if (rightTitle) {\n drawRightTitle(page, rightTitle, fonts);\n }\n\n // Add pagination if provided\n if (pagination) {\n drawPagination(page, String(pagination), fonts);\n }\n\n return page;\n};\n\n// Utility function to draw the background image\nconst drawBackgroundImage = async (pdfDoc, page, imageUrl) => {\n let imageEmbed;\n if (imageCache.has(imageUrl)) {\n imageEmbed = imageCache.get(imageUrl);\n } else {\n const imageBytes = await loadImage(imageUrl);\n imageEmbed = await pdfDoc.embedPng(imageBytes);\n imageCache.set(imageUrl, imageEmbed);\n }\n\n const imageWidth = layout.pageWidth;\n const imageHeight = layout.pageHeight;\n\n drawImage(page, imageEmbed, {\n x: (layout.pageWidth - imageWidth) / 2,\n y: (layout.pageHeight - imageHeight) / 2,\n width: imageWidth,\n height: imageHeight,\n });\n};\n\n// Utility function to draw the logo\nconst drawLogo = async (pdfDoc, page) => {\n const logoPath = `/pdf/images/logo.png`;\n\n let logoEmbed;\n if (imageCache.has(logoPath)) {\n logoEmbed = imageCache.get(logoPath);\n } else {\n const logoBytes = await loadImage(logoPath);\n logoEmbed = await pdfDoc.embedPng(logoBytes);\n imageCache.set(logoPath, logoEmbed);\n }\n\n const logoDims = logoEmbed.scale(0.66);\n drawImage(page, logoEmbed, {\n x: layout.margin,\n y: layout.pageHeight - layout.margin - logoDims.height,\n width: logoDims.width,\n height: logoDims.height,\n });\n};\n\n// Utility function to draw the left title\nconst drawLeftTitle = (page, title, fonts) => {\n const fontSize = styles.topTitleStyle.size;\n const { x, y } = calculateTextPosition(\n title,\n fonts.topTitleFont,\n fontSize,\n layout.pageHeight - layout.margin - fontSize,\n \"left\"\n );\n page.drawText(title, {\n x,\n y,\n size: fontSize,\n font: fonts.topTitleFont,\n color: rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: fontSize * 1.2,\n });\n};\n\n// Utility function to draw the right title\nconst drawRightTitle = (page, title, fonts) => {\n const fontSize = styles.topTitleStyle.size;\n const { x, y } = calculateTextPosition(\n title,\n fonts.topTitleFont,\n fontSize,\n layout.pageHeight - layout.margin - fontSize,\n \"right\"\n );\n page.drawText(title, {\n x,\n y,\n size: fontSize,\n font: fonts.topTitleFont,\n color: rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: fontSize * 1.2,\n });\n};\n\n// Utility function to draw the pagination\nconst drawPagination = (page, pagination, fonts) => {\n const fontSize = styles.bodyStyle.size;\n const { x, y } = calculateTextPosition(\n pagination,\n fonts.bodyFont,\n fontSize,\n layout.margin,\n \"right\"\n );\n page.drawText(pagination, {\n x,\n y,\n size: fontSize,\n font: fonts.bodyFont,\n color: rgb(100 / 255, 100 / 255, 100 / 255),\n });\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport {\n calculateTextPosition,\n formatText,\n renderChart,\n analyzeSkillsDifferences,\n addCenteredStyle,\n} from \"../../utils/utils\";\n\nexport const createGeneralTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts,\n jobIndex = 0\n) => {\n const pagination = `${(jobIndex + 1) * 6 - jobIndex}`;\n const jobTitle = data.results[jobIndex].metier.toUpperCase();\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: \"ANALYSE GLOBALE\",\n leftTitle: formatText(jobTitle, 24),\n pagination: pagination,\n });\n\n const userSkillPools = data.skillPools;\n const job = data.jobs.find(\n (job) => job.title === data.results[jobIndex].metier\n );\n const jobSignature = job.signatures.find(\n (signature) => signature.quiz_code === data.quiz_code\n );\n\n const jobSkillPools = [\n { name: \"Compétences SI\", average: calculateAverage(jobSignature, 0, 12) },\n {\n name: \"Compétences Générales\",\n average: calculateAverage(jobSignature, 12, 27),\n },\n { name: \"Relationnel\", average: calculateAverage(jobSignature, 27, 33) },\n ];\n\n const radarChartImageUrl = await renderChart(\"radar\", {\n jobSkillPools: jobSkillPools,\n userSkillPools: userSkillPools,\n });\n\n const radarChartImageBytes = await fetch(radarChartImageUrl).then((res) =>\n res.arrayBuffer()\n );\n const radarChartImageEmbed = await pdfDoc.embedPng(radarChartImageBytes);\n const targetWidth = 900; // Taille idéale dans le PDF\n const scaleFactor = targetWidth / radarChartImageEmbed.width;\n const chartDims = radarChartImageEmbed.scale(scaleFactor);\n\n page.drawImage(radarChartImageEmbed, {\n x: layout.pageWidth / 2 - chartDims.width / 2,\n y: layout.pageHeight - layout.margin - chartDims.height - 180,\n width: chartDims.width,\n height: chartDims.height,\n });\n\n const skillAnalysis = analyzeSkillsDifferences(jobSkillPools, userSkillPools);\n const { superiorSkills, inferiorSkills, equalSkills } = skillAnalysis;\n\n let text = \"\";\n if (superiorSkills.length > 0)\n text += `Tes compétences en ${superiorSkills.join(\n \" et \"\n )} dépassent les attentes du métier. `;\n if (inferiorSkills.length > 0)\n text += `Tes compétences en ${inferiorSkills.join(\n \" et \"\n )} sont inférieures aux attentes du métier. `;\n if (equalSkills.length > 0)\n text += `Tes compétences en ${equalSkills.join(\n \" et \"\n )} sont égales aux attentes du métier. `;\n if (text === \"\")\n text =\n \"Au global, ton profil présente des forces et des axes d'amélioration.\";\n\n const formattedText = addCenteredStyle(formatText(text));\n const { x, y } = calculateTextPosition(\n formattedText,\n fonts.bodyFont,\n styles.bodyStyle.size,\n layout.pageHeight - chartDims.height - 220,\n \"center\"\n );\n\n page.drawText(formattedText, {\n x: x,\n y: y,\n size: styles.bodyStyle.size,\n font: fonts.bodyFont,\n color: styles.bodyStyle.color,\n lineHeight: styles.bodyStyle.size * 1.33,\n });\n\n return page;\n};\n\nconst calculateAverage = (signature, start, end) => {\n return (\n (signature.content\n .slice(start, end)\n .split(\"\")\n .reduce((sum, val) => sum + parseInt(val), 0) /\n ((end - start) * 5)) *\n 100\n );\n};\n","/**\n * Analyzes the skill gaps between the user's skills and the job requirements.\n * @param {Array} userAnswers - The user's skill levels, with each item containing a skill, its level, and index.\n * @param {Object} jobSignatures - The job's skill requirements, containing a signature content string.\n * @returns {Array} - An array of top skills with the largest gaps, up to a maximum of 3.\n */\nexport const analyzeTopSkillGaps = (userAnswers, jobSignatures) => {\n // Map userAnswers and jobSignatures to calculate skill gaps\n const skillsData = userAnswers.map((answer, index) => {\n const userLevel = parseInt(answer.value, 10);\n const requiredLevel = parseInt(jobSignatures.content[index], 10);\n const difference = requiredLevel - userLevel;\n return {\n skill: answer.skill,\n skillPool: answer.skill_pool,\n userLevel,\n requiredLevel,\n difference\n };\n });\n\n // Filter skills with a required level of at least 3\n const filteredSkills = skillsData.filter(skill => skill.requiredLevel >= 3);\n\n // Sort skills by difference in descending order\n const sortedSkills = filteredSkills.sort((a, b) => b.difference - a.difference);\n\n // Select skills where the required level is 5 and the gap is at least 2\n let topSkills = sortedSkills.filter(skill => skill.requiredLevel === 5 && skill.difference >= 2);\n\n // If fewer than 3 skills found, consider level 4 skills with a gap of at least 2\n if (topSkills.length < 3) {\n topSkills = topSkills.concat(sortedSkills.filter(skill => skill.requiredLevel === 4 && skill.difference >= 2));\n }\n\n // If still fewer than 3 skills, consider level 3 skills where the user level is 1 or less\n if (topSkills.length < 3) {\n topSkills = topSkills.concat(sortedSkills.filter(skill => skill.requiredLevel === 3 && skill.userLevel <= 1));\n }\n\n // Limit to a maximum of 3 top skills\n return topSkills.slice(0, 3);\n};","import { rgb } from \"pdf-lib\";\nimport { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport {\n calculateTextPosition,\n formatText,\n getBottomYPosition,\n} from \"../../utils/utils\";\nimport { analyzeTopSkillGaps } from \"../../../algorithms/skillGapAnalyzer\";\nimport promptProgress from \"@/data/prompt/prompt_progress.json\";\n\nexport const createSynthesisJobTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts,\n jobIndex = 0\n) => {\n const jobTitle = data.results[jobIndex].metier.toUpperCase();\n const pagination = `${(jobIndex + 1) * 5}`;\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: \"SYNTHÈSE\",\n leftTitle: formatText(jobTitle, 24),\n pagination: pagination,\n });\n\n const job = data.jobs.find(\n (job) => job.title === data.results[jobIndex].metier\n );\n const jobSignatures = job.signatures.find(\n (signature) => signature.quiz_code === data.quiz_code\n );\n const topSkills = analyzeTopSkillGaps(data.answers, jobSignatures);\n\n const score = data.results[jobIndex].score;\n const dimension = data.results[jobIndex].dimension;\n\n const synthesisText = formatText(generateSynthesisText(score, dimension), 60);\n const improvementText = formatText(await generateImprovementText(topSkills));\n\n const synthesisTitleYPosition = layout.pageHeight - layout.margin - 160;\n drawTextElement(\n page,\n \"SYNTHÈSE\",\n fonts.titleFont,\n styles.titleStyle,\n layout.margin,\n synthesisTitleYPosition\n );\n\n const synthesisTextYPosition = getBottomYPosition(\n \"SYNTHÈSE\",\n fonts.titleFont,\n styles.titleStyle.size,\n synthesisTitleYPosition,\n styles.titleStyle.size * 1.33\n );\n drawTextElement(\n page,\n synthesisText,\n fonts.bodyFont,\n styles.bodyStyle,\n layout.margin,\n synthesisTextYPosition - 10\n );\n\n const improvementTitleYPosition =\n getBottomYPosition(\n synthesisText,\n fonts.bodyFont,\n styles.bodyStyle.size,\n synthesisTextYPosition - 40,\n styles.bodyStyle.size * 1.33\n ) - 80;\n drawTextElement(\n page,\n \"AXES D'AMÉLIORATION\",\n fonts.titleFont,\n styles.titleStyle,\n layout.margin,\n improvementTitleYPosition\n );\n\n drawTextElement(\n page,\n improvementText,\n fonts.bodyFont,\n styles.bodyStyle,\n layout.margin,\n improvementTitleYPosition - 60\n );\n\n return page;\n};\n\nconst generateSynthesisText = (score, dimension) => {\n const baseText =\n \"D'après tes résultats, ton profil [MATCH] avec ce métier.\\n\\n[DIMENSION]\";\n\n const textScore = score < 70 ? \"ne matche pas\" : \"matche\";\n\n let textDimension = \"\";\n if (dimension > 120) {\n textDimension =\n \"D'après notre analyse, le métier est sur-dimensionné pour ton profil, tu risques d'être challengé !\";\n } else if (dimension < 90) {\n textDimension =\n \"D'après notre analyse, le métier est sous-dimensionné pour ton profil, tu risques de t'ennuyer...\";\n } else {\n textDimension =\n \"D'après notre analyse, le métier est bien dimensionné pour ton profil !\";\n }\n\n return baseText\n .replace(\"[MATCH]\", textScore)\n .replace(\"[DIMENSION]\", textDimension);\n};\n\nconst generateImprovementText = async (topSkills) => {\n const placeholders = topSkills.map((skill) => skill.skill).filter(Boolean);\n\n if (placeholders.length === 0) {\n const textProgressjobInfo =\n \"Tu sembles avoir le niveau pour chacune des compétences essentielles de ce métier, garde le cap, perfectionne-les et n'hésite pas à faire de la veille !\";\n const resultProgressJobInfo = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: textProgressjobInfo,\n textPrompt: promptProgress,\n }),\n });\n const result = await resultProgressJobInfo.json();\n return result.data.content;\n }\n\n const messages = placeholders.slice(0, 3).map(async (placeholder, index) => {\n const improvementTexts = [\n `Tu sembles avoir une certaine ${placeholder}, mais il est essentiel de la faire progresser.`,\n `Tu devrais développer davantage ton ${placeholder} pour maximiser ta réussite.`,\n `Ta capacité en ${placeholder} semble en deçà des attentes du métier.`,\n ];\n\n const textProgressjobInfo = improvementTexts[index];\n const resultProgressJobInfo = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: textProgressjobInfo,\n textPrompt: promptProgress,\n }),\n });\n const result = await resultProgressJobInfo.json();\n return result.data.content;\n });\n\n const improvementMessages = await Promise.all(messages);\n return improvementMessages.join(\"\\n\\n\");\n};\n\nconst drawTextElement = (page, text, font, style, x, y) => {\n const { x: adjustedX, y: adjustedY } = calculateTextPosition(\n text,\n font,\n style.size,\n y,\n \"left\"\n );\n page.drawText(text, {\n x: adjustedX,\n y: adjustedY,\n size: style.size,\n font: font,\n color: style.color || rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: style.size * 1.33,\n });\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { PDFDocument } from \"pdf-lib\";\nimport Chart from \"chart.js/auto\";\nimport { formatText } from \"../../utils/utils\";\n\nexport const createSkillDetailsTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts,\n jobIndex = 0\n) => {\n const job = data.jobs.find(\n (job) => job.title === data.results[jobIndex].metier\n );\n const jobSignature = job.signatures.find(\n (signature) => signature.quiz_code === data.quiz_code\n ).content;\n\n const skillsGroupedByType = groupSkillsByType(data.answers, jobSignature);\n\n const pagination = `${(jobIndex + 1) * 7 - jobIndex}`;\n const jobTitle = data.results[jobIndex].metier.toUpperCase();\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: formatText(\"DÉTAILS DES COMPÉTENCES\", 20),\n leftTitle: formatText(jobTitle, 24),\n pagination: pagination,\n });\n\n const radarChartImageUrl = await renderRadarChart(skillsGroupedByType);\n const radarChartImageBytes = await fetch(radarChartImageUrl).then((res) =>\n res.arrayBuffer()\n );\n const radarChartImageEmbed = await pdfDoc.embedPng(radarChartImageBytes);\n const targetWidth = 900; // Taille idéale dans le PDF\n const scaleFactor = targetWidth / radarChartImageEmbed.width;\n const chartDims = radarChartImageEmbed.scale(scaleFactor);\n\n page.drawImage(radarChartImageEmbed, {\n x: layout.pageWidth / 2 - chartDims.width / 2,\n y: layout.pageHeight - layout.margin - chartDims.height - 200,\n width: chartDims.width,\n height: chartDims.height,\n });\n};\n\nconst groupSkillsByType = (userAnswers, jobSignature) => {\n const grouped = userAnswers.reduce((acc, answer) => {\n const { skill_pool, skill, signature_index, value } = answer;\n const requiredLevel = parseInt(jobSignature[signature_index], 10);\n const userLevel = parseInt(value, 10);\n if (!acc[skill_pool]) acc[skill_pool] = [];\n acc[skill_pool].push({ skill, requiredLevel, userLevel });\n return acc;\n }, {});\n\n // Supprimer les doublons dans chaque groupe de compétences\n Object.keys(grouped).forEach((skillPool) => {\n grouped[skillPool] = removeDuplicateSkills(grouped[skillPool]);\n });\n\n return grouped;\n};\n\nconst removeDuplicateSkills = (skills) => {\n const seen = new Set();\n return skills.filter((skill) => {\n if (seen.has(skill.skill)) {\n return false;\n }\n seen.add(skill.skill);\n return true;\n });\n};\n\nconst renderRadarChart = async (skillsGroupedByType) => {\n return new Promise((resolve) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n // Taille fixe du canvas\n const width = 850;\n const height = 650;\n\n // Forcer la résolution\n const dpr = window.devicePixelRatio || 1;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n if (!ctx) {\n console.error(\"❌ Impossible de récupérer le contexte 2D\");\n return reject(\"Pas de contexte 2D\");\n }\n\n // Créer la liste complète des compétences à partir de skillsGroupedByType\n const allSkills = Array.from(\n new Set(\n Object.entries(skillsGroupedByType).flatMap(([, skillsData]) =>\n skillsData.map((skill) => skill.skill)\n )\n )\n );\n\n const datasets = [];\n\n // Ajouter les séries pour chaque skillPool (Utilisateur)\n Object.entries(skillsGroupedByType).forEach(\n ([skillPool, skillsData], index) => {\n const colorBase = generateColor(index); // Couleur pour le skillPool\n\n datasets.push({\n label: `${skillPool}`,\n data: allSkills.map((skill) => {\n const skillData = skillsData.find((s) => s.skill === skill);\n return skillData ? skillData.userLevel : 0; // Ajouter 0 si absent\n }),\n backgroundColor: `rgba(${colorBase}, 0.2)`,\n borderColor: `rgba(${colorBase}, 1)`,\n borderWidth: 2,\n pointBackgroundColor: `rgba(${colorBase}, 1)`,\n fill: true,\n });\n }\n );\n\n // Ajouter la série pour le métier\n datasets.push({\n label: \"Compétences requises\",\n data: allSkills.map((skill) => {\n const skillData = Object.values(skillsGroupedByType)\n .flat()\n .find((s) => s.skill === skill);\n return skillData ? skillData.requiredLevel : 0;\n }),\n borderColor: \"rgba(128, 128, 128, 0.4)\",\n borderWidth: 2,\n pointBackgroundColor: \"rgba(128, 128, 128, 0.4)\",\n fill: false, // Pas de remplissage\n });\n\n // Créer le radar chart\n new Chart(ctx, {\n type: \"radar\",\n data: {\n labels: allSkills, // Inclure toutes les compétences\n datasets,\n },\n options: {\n responsive: false,\n animation: false,\n maintainAspectRatio: false,\n scales: {\n r: {\n angleLines: { display: true },\n suggestedMin: 0,\n suggestedMax: 5,\n ticks: { stepSize: 1, display: false },\n pointLabels: { font: { size: 9, padding: 30 } },\n },\n },\n plugins: {\n legend: {\n position: \"top\",\n labels: { font: { size: 12 } },\n },\n datalabels: {\n display: false,\n },\n },\n },\n });\n // canvas.toDataURL(\"image/png\");\n setTimeout(() => {\n const imageUrl = canvas.toDataURL(\"image/png\");\n resolve(imageUrl);\n }, 500);\n });\n};\n\nconst generateColor = (index) => {\n const colors = [\n \"225, 1, 105\", // Rose\n \"255, 138, 0\", // Orange\n \"255, 214, 0\", // Jaune\n ];\n return colors[index % colors.length];\n};\n","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport {\n calculateTextPosition,\n formatText,\n getBottomYPosition,\n} from \"../../utils/utils\";\nimport promptMission from \"@/data/prompt/prompt_mission.json\";\nimport promptTrendsMarket from \"@/data/prompt/prompt_trends.json\";\nimport promptCareer from \"@/data/prompt/prompt_career.json\";\n\nexport const createJobInfosTemplate = async (\n pdfDoc,\n data,\n backgroundImageUrl,\n fonts,\n jobIndex = 0\n) => {\n const pagination = `${(jobIndex + 1) * 8 - jobIndex}`;\n const jobTitle = data.results[jobIndex].metier.toUpperCase();\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {\n rightTitle: \"FICHE MÉTIER\",\n leftTitle: formatText(jobTitle, 24),\n pagination: pagination,\n });\n\n const jobInfo = data.jobInfos.find(\n (job) => job.metierNom === data.results[jobIndex].metier\n );\n\n const leftColumnX = layout.margin;\n const rightColumnX = layout.pageWidth / 2;\n const columnWidth = (layout.pageWidth - 3 * layout.margin) / 2;\n const initialYPosition = layout.pageHeight - layout.margin - 200;\n\n // MISSION Section\n let currentYLeft = initialYPosition;\n drawTextElement(\n page,\n \"MISSION\",\n fonts.titleFont,\n styles.titleStyle,\n leftColumnX,\n currentYLeft\n );\n\n const textMissionjobInfo = `${jobInfo.metierNom} : ${jobInfo.mission}`;\n const resultMissionjobInfo = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: textMissionjobInfo,\n textPrompt: promptMission,\n }),\n });\n const resultMission = await resultMissionjobInfo.json();\n const textMission = formatText(resultMission.data.content, columnWidth / 10); // Ajustement pour largeur\n currentYLeft = drawTextElement(\n page,\n textMission,\n fonts.bodyFont,\n styles.bodyStyle,\n leftColumnX,\n currentYLeft - 30\n );\n\n // ACTIVITÉS Section\n currentYLeft -= 50; // Espace entre les sections\n drawTextElement(\n page,\n \"ACTIVITÉS\",\n fonts.titleFont,\n styles.titleStyle,\n leftColumnX,\n currentYLeft\n );\n\n const activityText = jobInfo.activities\n .map((activity) => `• ${formatText(activity, columnWidth / 10)}`)\n .join(\"\\n\");\n currentYLeft = drawTextElement(\n page,\n activityText,\n fonts.bodyFont,\n styles.bodyStyle,\n leftColumnX,\n currentYLeft - 30\n );\n\n // TENDANCE DU MARCHÉ Section (Right Column)\n let currentYRight = initialYPosition;\n drawTextElement(\n page,\n \"TENDANCE DU MARCHÉ\",\n fonts.titleFont,\n styles.titleStyle,\n rightColumnX,\n currentYRight\n );\n\n const resultTrendsjobInfo = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: jobInfo.trends,\n textPrompt: promptTrendsMarket,\n }),\n });\n const resultTrends = await resultTrendsjobInfo.json();\n const textTrends = formatText(resultTrends.data.content, columnWidth / 10); // Ajustement pour largeur\n currentYRight = drawTextElement(\n page,\n textTrends,\n fonts.bodyFont,\n styles.bodyStyle,\n rightColumnX,\n currentYRight - 30\n );\n\n // CHEMIN DE CARRIÈRE Section\n currentYRight -= 50; // Espace entre les sections\n drawTextElement(\n page,\n \"CHEMIN DE CARRIÈRE\",\n fonts.titleFont,\n styles.titleStyle,\n rightColumnX,\n currentYRight\n );\n\n const resultCareerjobInfo = await fetch(\"/api/customJobInfoGPT\", {\n method: \"POST\",\n headers: {\n \"Content-Type\": \"application/json\",\n },\n body: JSON.stringify({\n text: jobInfo.careerPath,\n textPrompt: promptCareer,\n }),\n });\n const resultCareer = await resultCareerjobInfo.json();\n const careerPathText = formatText(\n resultCareer.data.content,\n columnWidth / 10\n ); // Ajustement pour largeur\n drawTextElement(\n page,\n careerPathText,\n fonts.bodyFont,\n styles.bodyStyle,\n rightColumnX,\n currentYRight - 30\n );\n\n return page;\n};\n\n// Helper function for drawing text\nconst drawTextElement = (page, text, font, style, x, y) => {\n if (typeof text !== \"string\") {\n text = String(text);\n }\n const lines = text.split(\"\\n\");\n let currentY = y;\n\n lines.forEach((line) => {\n const textWidth = font.widthOfTextAtSize(line, style.size);\n const adjustedX = x;\n\n page.drawText(line, {\n x: adjustedX,\n y: currentY,\n size: style.size,\n font: font,\n color: style.color || rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: style.size * 1.3,\n });\n currentY -= style.size * 1.5; // Update Y for next line\n });\n\n return currentY; // Return updated Y position\n};\n","export { createGeneralTemplate } from './generalTemplate';\nexport { createSynthesisJobTemplate } from './syntheseTemplate';\nexport { createSkillDetailsTemplate } from './skillDetailsTemplate';\nexport { createJobInfosTemplate } from './jobInfosTemplate';","import { createPageTemplate } from \"../pageTemplate\";\nimport { layout } from \"../../config/layout\";\nimport { styles } from \"../../config/styles\";\nimport {addCenteredStyle, calculateTextPosition, formatText, getBottomYPosition} from \"../../utils/utils\";\n\nexport const createTransitionPage = async (pdfDoc, data, backgroundImageUrl, fonts, jobIndex) => {\n\n const jobTitle = data.results[jobIndex].metier;\n const jobInfo = data.jobInfos.find(job => job.metierNom === jobTitle);\n const jobDescription = jobInfo?.mission || \"Description du métier indisponible.\";\n const pagination = `${((jobIndex + 1) * 5) - (jobIndex+1)}`;\n\n const page = await createPageTemplate(pdfDoc, data, backgroundImageUrl, {pagination: pagination});\n\n const formattedJobTitle = addCenteredStyle(formatText(jobTitle.toUpperCase(), 25));\n const { x: titleX, y: titleY } = calculateTextPosition(\n formattedJobTitle,\n fonts.topTitleFont,\n styles.titleStyle.size*1.5,\n layout.pageHeight / 2 + 250,\n \"center\"\n );\n page.drawText(formattedJobTitle, {\n x: titleX - 30,\n y: titleY,\n size: styles.titleStyle.size*1.5,\n font: fonts.topTitleFont,\n color: styles.titleStyle.color || rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: styles.titleStyle.size * 1.5,\n });\n\n // const bottomYTitle = getBottomYPosition(titleY, styles.titleStyle.size + 10, titleY, 1.5);\n\n const formattedJobDescription = formatText(jobDescription, 70);\n const { x: descX, y: descY } = calculateTextPosition(\n formattedJobDescription,\n fonts.bodyFont,\n styles.bodyStyle.size,\n titleY - 200,\n \"center\"\n );\n page.drawText(formattedJobDescription, {\n x: descX,\n y: descY,\n size: styles.bodyStyle.size,\n font: fonts.bodyFont,\n color: styles.bodyStyle.color || rgb(35 / 255, 40 / 255, 58 / 255),\n lineHeight: styles.bodyStyle.size * 1.33,\n });\n\n return page;\n};\n","import { PDFDocument } from \"pdf-lib\";\nimport {\n createAccueilPage,\n createJobSynthesisTemplates,\n createSommairePage,\n createTopPage,\n} from \"../templates/common\";\nimport {\n createGeneralTemplate,\n createJobInfosTemplate,\n createSkillDetailsTemplate,\n createSynthesisJobTemplate,\n} from \"../templates/metier\";\nimport { loadFonts } from \"../config/fonts\";\nimport { getBackgroundImages, savePdf } from \"./utils\";\nimport jobs from \"@/data/metiers.json\";\nimport jobInfos from \"@/data/metier_infos.json\";\nimport { createTransitionPage } from \"@/lib/pdf/templates/common/transitionTemplate\";\n\nexport const generatePdf = async (\n name,\n quiz_code,\n resultsQuiz,\n answersQuiz,\n skillPoolsQuiz,\n onProgressUpdate // paramètre pour les maj progression\n) => {\n const pdfDoc = await PDFDocument.create();\n const fonts = await loadFonts(pdfDoc);\n const { bgPdf, bgPdfFlou } = getBackgroundImages();\n\n const data = {\n name,\n quiz_code,\n results: resultsQuiz,\n jobs,\n jobInfos,\n skillPools: skillPoolsQuiz,\n answers: answersQuiz,\n };\n\n onProgressUpdate(10);\n\n await createAccueilPage(pdfDoc, data, bgPdf, true, fonts);\n onProgressUpdate(20);\n\n await createSommairePage(pdfDoc, data, bgPdf, fonts);\n onProgressUpdate(30);\n\n await createTopPage(pdfDoc, data, bgPdfFlou, fonts);\n onProgressUpdate(40);\n\n // Boucle sur les templates de résultats\n for (let i = 0; i < data.results.length; i++) {\n await createTransitionPage(pdfDoc, data, bgPdf, fonts, i);\n onProgressUpdate(40 + (i / data.results.length) * 30);\n await createSynthesisJobTemplate(pdfDoc, data, bgPdf, fonts, i);\n await createGeneralTemplate(pdfDoc, data, bgPdfFlou, fonts, i);\n await createSkillDetailsTemplate(pdfDoc, data, bgPdfFlou, fonts, i);\n await createJobInfosTemplate(pdfDoc, data, bgPdf, fonts, i);\n }\n\n onProgressUpdate(80);\n\n await createJobSynthesisTemplates(\n pdfDoc,\n JSON.parse(localStorage.getItem(\"quiz_results\")),\n bgPdfFlou,\n fonts\n );\n onProgressUpdate(90);\n\n // await createCtaPage(pdfDoc, data, bgNew, false, fonts);\n // onProgressUpdate(95);\n onProgressUpdate(100);\n\n return await savePdf(pdfDoc, \"rapport.pdf\");\n};\n","import Chart from \"chart.js/auto\";\n\nimport { layout } from \"../config/layout\";\nimport { get } from \"http\";\n\n// Utility function to analyze differences between job skill requirements and user skills\nexport const analyzeSkillsDifferences = (jobSkillPools, userSkillPools) => {\n const skillAnalysis = jobSkillPools.map((jobSkill, index) => {\n const userSkill = userSkillPools[index];\n const difference = userSkill.average - jobSkill.average;\n return {\n name: jobSkill.name,\n difference,\n };\n });\n\n // Separate the skills into superior, inferior, and equal categories\n const superiorSkills = skillAnalysis\n .filter((skill) => skill.difference > 0)\n .map((skill) => skill.name);\n const inferiorSkills = skillAnalysis\n .filter((skill) => skill.difference < 0)\n .map((skill) => skill.name);\n const equalSkills = skillAnalysis\n .filter((skill) => skill.difference === 0)\n .map((skill) => skill.name);\n\n return {\n superiorSkills,\n inferiorSkills,\n equalSkills,\n };\n};\n\nexport const addCenteredStyle = (text) => {\n if (typeof text !== \"string\") {\n text = String(text);\n }\n const lines = text.split(\"\\n\");\n const maxLength = Math.max(...lines.map((line) => line.length));\n\n const centeredLines = lines.map((line) => {\n const padding = (maxLength - line.length) / 2;\n const leftPadding = \" \".repeat(Math.floor(padding));\n const rightPadding = \" \".repeat(Math.ceil(padding));\n return leftPadding + line + rightPadding;\n });\n\n return centeredLines.join(\"\\n\");\n};\n\nexport const calculateTextPosition = (\n text,\n font,\n fontSize,\n startY,\n align = \"right\",\n pageWidth = layout.pageWidth,\n margin = layout.margin\n) => {\n // Diviser le texte en lignes en fonction des sauts de ligne\n if (typeof text !== \"string\") {\n text = String(text);\n }\n const lines = text.split(/\\n+/);\n\n // Calculer la largeur maximale des lignes\n const maxWidth = Math.max(\n ...lines.map((line) => font?.widthOfTextAtSize(line, fontSize))\n );\n\n // Calculer la position X basée sur l'alignement\n let x;\n if (align === \"right\") {\n x = pageWidth - margin - maxWidth;\n } else if (align === \"left\") {\n x = margin;\n } else if (align === \"center\") {\n x = (pageWidth - maxWidth) / 2;\n } else {\n throw new Error(`Invalid alignment: ${align}`);\n }\n\n // Calculer la hauteur totale en fonction du nombre de lignes\n const lineHeight = fontSize * 1.2; // Multiplication par 1.2 pour l'espacement entre les lignes\n // const totalHeight = lineHeight * lines.length * 1.5;\n\n // Calculer la position Y basée sur la hauteur totale du texte\n const y = startY - lineHeight;\n\n return { x, y };\n};\n\nexport const formatText = (text, maxLineLength = 70) => {\n if (typeof text !== \"string\") {\n text = String(text);\n }\n const words = text.split(\" \");\n let lines = [];\n let currentLine = \"\";\n\n for (let i = 0; i < words.length; i++) {\n const word = words[i];\n if (currentLine.length + word.length <= maxLineLength) {\n currentLine += word + \" \";\n } else {\n lines.push(currentLine.trim());\n currentLine = word + \" \";\n }\n }\n\n lines.push(currentLine.trim());\n return lines.join(\"\\n\");\n};\n\nexport const getBottomYPosition = (\n text,\n font,\n fontSize,\n startY,\n lineHeight\n) => {\n // Diviser le texte en lignes en fonction des sauts de ligne\n if (typeof text !== \"string\") {\n text = String(text);\n }\n const lines = text.split(\"\\n\");\n\n // Calculer la hauteur totale du bloc de texte en multipliant le nombre de lignes par la hauteur de la ligne\n const totalTextHeight = lines.length * lineHeight;\n\n // Calculer la position Y en bas du texte (position de départ - hauteur totale du texte)\n return startY - totalTextHeight;\n};\n\n/** PDF Utils **/\nexport const getBackgroundImages = () => ({\n bgPdf: `/pdf/images/bg_pdf.png`,\n bgPdfFlou: `/pdf/images/bg_pdf_flou.png`,\n});\n\nexport const savePdf = async (pdfDoc, filename) => {\n const pdfBytes = await pdfDoc.save(); // ✅ important !\n const blob = new Blob([pdfBytes], { type: \"application/pdf\" });\n return blob;\n // const link = document.createElement(\"a\");\n // link.href = URL.createObjectURL(blob);\n // link.download = filename;\n // link.click();\n};\n\nexport const saveProjectionPdf = async (pdfDoc, filename) => {\n const pdfBytes = await pdfDoc.save(); // ✅ important !\n const blob = new Blob([pdfBytes], { type: \"application/pdf\" });\n const link = document.createElement(\"a\");\n link.href = URL.createObjectURL(blob);\n link.download = filename;\n link.click();\n};\n\n/** Image Utils **/\nexport const loadImage = async (imageUrl) => {\n try {\n const response = await fetch(imageUrl);\n if (!response.ok) {\n throw new Error(`Failed to load image: ${response.statusText}`);\n }\n return await response.arrayBuffer();\n } catch (error) {\n throw error;\n }\n};\n\nexport const drawImage = (page, imageEmbed, options) => {\n const { x, y, width, height } = options;\n page.drawImage(imageEmbed, {\n x,\n y,\n width,\n height,\n });\n};\n\n/** Chart Utils **/\n// Render a chart based on the specified type and data\nexport const renderChart = async (type, data, chartOptions = {}) => {\n return new Promise((resolve) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n\n // Taille fixe du canvas\n const width = 800;\n const height = 600;\n\n // Forcer la résolution\n const dpr = window.devicePixelRatio || 1;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n if (!ctx) {\n console.error(\"❌ Impossible de récupérer le contexte 2D\");\n return reject(\"Pas de contexte 2D\");\n }\n\n new Chart(ctx, {\n type: type,\n data:\n type === \"radar\"\n ? getRadarData(data)\n : type === \"bar\"\n ? getBarData(data)\n : getScatterData(data),\n options: {\n ...getDefaultOptions(type, data),\n ...chartOptions,\n responsive: false,\n animation: false,\n },\n });\n\n // Petite attente pour assurer que le rendu est terminé\n setTimeout(() => {\n const imageUrl = canvas.toDataURL(\"image/png\");\n resolve(imageUrl);\n }, 500); // on peut réduire le timeout si le rendu est rapide\n });\n};\n\n// Helper function to get data for radar charts\nconst getRadarData = ({ jobSkillPools, userSkillPools }) => ({\n labels: jobSkillPools.map((pool) => pool.name.split(\" \")),\n datasets: [\n {\n label: \"Requis\",\n data: jobSkillPools.map((pool) => pool.average),\n backgroundColor: \"rgba(209, 53, 104, 0.2)\",\n borderColor: \"rgba(209, 53, 104, 1)\",\n borderWidth: 2,\n },\n {\n label: \"Acquis\",\n data: userSkillPools.map((pool) => pool.average),\n backgroundColor: \"rgba(255, 142, 49, 0.2)\",\n borderColor: \"rgba(255, 142, 49, 1)\",\n borderWidth: 2,\n },\n ],\n});\n\n// Helper function to get data for bar charts (updated to use job titles correctly)\nconst getBarData = (data) => ({\n labels: data.results.map((result) => result.metier.split(\" \")),\n datasets: [\n {\n data: data.results.map((result) => result.score),\n backgroundColor: [\n \"rgba(209, 53, 104, 0.8)\",\n \"rgba(255, 142, 49, 0.8)\",\n \"rgba(209, 53, 104, 0.8)\",\n \"rgba(255, 142, 49, 0.8)\",\n ],\n borderColor: [\n \"rgba(209, 53, 104, 1)\",\n \"rgba(255, 142, 49, 1)\",\n \"rgba(209, 53, 104, 1)\",\n \"rgba(255, 142, 49, 1)\",\n ],\n borderWidth: 1,\n },\n ],\n});\n\n// Helper function to get data for scatter charts\nconst getScatterData = (skillsData) => ({\n datasets: [\n {\n label: \"Acquis\",\n data: skillsData.map((skill, index) => ({\n x: skill.userLevel,\n y: index + 1,\n })),\n backgroundColor: \"rgba(255, 142, 49, 0.6)\",\n borderColor: \"rgba(255, 142, 49, 1)\",\n pointRadius: 10,\n pointHoverRadius: 12,\n },\n {\n label: \"Requis\",\n data: skillsData.map((skill, index) => ({\n x: skill.requiredLevel,\n y: index + 1,\n })),\n backgroundColor: \"rgba(209, 53, 104, 0.6)\",\n borderColor: \"rgba(209, 53, 104, 1)\",\n pointRadius: 10,\n pointHoverRadius: 12,\n },\n ],\n});\n\n// Get default chart options based on chart type\nconst getDefaultOptions = (type, data) => ({\n responsive: false,\n maintainAspectRatio: false,\n scales:\n type === \"radar\"\n ? {\n r: {\n ticks: { display: false },\n pointLabels: { font: { size: 13, padding: 5 } },\n },\n }\n : type === \"scatter\"\n ? {\n x: {\n title: { display: true, text: \"Niveau de compétences\" },\n min: 1,\n max: 5,\n stepSize: 1,\n grid: { display: true, color: \"rgba(0, 0, 0, 0.1)\" },\n },\n y: {\n title: { display: true, text: \"Compétences\" },\n ticks: {\n callback: function (value, index) {\n return data[index] ? data[index].skill.split(\" \") : \"\";\n },\n stepSize: 1,\n font: { size: 24 },\n },\n grid: { display: true, color: \"rgba(0, 0, 0, 0.1)\" },\n },\n }\n : {\n x: {\n title: { display: false, text: \"Métiers\" },\n beginAtZero: true,\n grid: { display: false },\n ticks: { font: { size: 20 } },\n },\n y: {\n beginAtZero: true,\n max: 100,\n title: { display: false, text: \"Score (%)\" },\n grid: { display: true },\n ticks: { font: { size: 20 } },\n },\n },\n plugins: {\n legend: {\n position: \"top\",\n labels: { font: { size: 16 } },\n },\n tooltip: {\n enabled: true,\n backgroundColor: \"rgba(0,0,0,0.8)\",\n titleFont: { size: 12 },\n bodyFont: { size: 12 },\n },\n datalabels: {\n display: false,\n },\n },\n});\n\nexport const renderProjectionChart = async (data) => {\n return new Promise((resolve) => {\n const canvas = document.createElement(\"canvas\");\n const ctx = canvas.getContext(\"2d\");\n const type = \"radar\";\n\n // Taille fixe du canvas\n const width = 800;\n const height = 600;\n\n // Forcer la résolution\n const dpr = window.devicePixelRatio || 1;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n canvas.width = width * dpr;\n canvas.height = height * dpr;\n ctx.scale(dpr, dpr);\n\n if (!ctx) {\n console.error(\"❌ Impossible de récupérer le contexte 2D\");\n return reject(\"Pas de contexte 2D\");\n }\n\n // Création du graphique\n new Chart(ctx, {\n type: type,\n data: getRadarProjectionChart(data.jobs),\n options: {\n responsive: false,\n animation: false,\n ...getDefaultProjectionOptions(),\n },\n });\n\n // canvas.toDataURL(\"image/png\");\n\n // Petite attente pour assurer que le rendu est terminé\n setTimeout(() => {\n const imageUrl = canvas.toDataURL(\"image/png\");\n resolve(imageUrl);\n }, 500); // on peut réduire le timeout si le rendu est rapide\n });\n};\n\nconst getRadarProjectionChart = (jobs) => ({\n labels: jobs.map((job) => job.domaine),\n datasets: [\n {\n label: \"Souhait\",\n data: jobs.map((job) => job.souhait),\n backgroundColor: \"rgba(209, 53, 104, 0.2)\",\n borderColor: \"rgba(209, 53, 104, 1)\",\n borderWidth: 2,\n },\n {\n label: \"Métier\",\n data: jobs.map((job) => job.metier),\n backgroundColor: \"rgba(255, 142, 49, 0.2)\",\n borderColor: \"rgba(255, 142, 49, 1)\",\n borderWidth: 2,\n },\n ],\n});\n\nconst getDefaultProjectionOptions = () => ({\n responsive: false,\n maintainAspectRatio: false,\n scales: {\n r: {\n min: 0,\n max: 5,\n ticks: { display: false },\n pointLabels: { font: { size: 13, padding: 10 } },\n },\n },\n plugins: {\n legend: {\n position: \"top\",\n labels: { font: { size: 16 } },\n },\n tooltip: {\n enabled: true,\n backgroundColor: \"rgba(0,0,0,0.8)\",\n titleFont: { size: 12 },\n bodyFont: { size: 12 },\n },\n },\n});\n","const SESSION_ID_KEY = \"quiz_session_id\";\nconst RESULTS_KEY = \"quiz_results\";\nconst SELECT_RESULTS_KEY = \"quiz_results_selection\";\n\nconst STUDENT_SESSION_ID_KEY = \"student_session_id\";\nconst STUDENT_RESULTS_KEY = \"student_quiz_results\";\n\nconst RADAR_CHART_DATA_KEY = \"radarChartData\";\nconst SELECTED_JOB_RADAR_CHART_DATA_KEY = \"selectedJob\";\n\nexport const saveSessionId = (sessionId: string) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(SESSION_ID_KEY, sessionId);\n }\n};\n\nexport const getSessionId = (): string | null => {\n if (typeof window !== \"undefined\") {\n return localStorage.getItem(SESSION_ID_KEY);\n }\n return null;\n};\n\nexport const clearSessionId = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(SESSION_ID_KEY);\n }\n};\n\nexport const saveResults = (results: any) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(RESULTS_KEY, JSON.stringify(results));\n }\n};\n\nexport const getResults = (): any | null => {\n if (typeof window !== \"undefined\") {\n const results = localStorage.getItem(RESULTS_KEY);\n return results ? JSON.parse(results) : null;\n }\n return null;\n};\n\nexport const clearResults = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(RESULTS_KEY);\n }\n};\n\nexport const saveResultsSelection = (results: any) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(SELECT_RESULTS_KEY, JSON.stringify(results));\n }\n};\n\nexport const getResultsSelection = (): any | null => {\n if (typeof window !== \"undefined\") {\n const results = localStorage.getItem(SELECT_RESULTS_KEY);\n return results ? JSON.parse(results) : null;\n }\n return null;\n};\n\nexport const clearResultsSelection = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(SELECT_RESULTS_KEY);\n }\n};\n\nexport const saveStudentSessionId = (studentSessionId: string) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(STUDENT_SESSION_ID_KEY, studentSessionId);\n }\n};\n\nexport const getStudentSessionId = (): string | null => {\n if (typeof window !== \"undefined\") {\n return localStorage.getItem(STUDENT_SESSION_ID_KEY);\n }\n return null;\n};\n\nexport const clearStudentSessionId = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(STUDENT_SESSION_ID_KEY);\n }\n};\n\nexport const saveStudentResults = (results: any) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(STUDENT_RESULTS_KEY, JSON.stringify(results));\n }\n};\n\nexport const getStudentResults = (): any | null => {\n if (typeof window !== \"undefined\") {\n const results = localStorage.getItem(STUDENT_RESULTS_KEY);\n return results ? JSON.parse(results) : null;\n }\n return null;\n};\n\nexport const clearStudentResults = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(STUDENT_RESULTS_KEY);\n }\n};\n\nexport const getRadarChartData = (): any | null => {\n if (typeof window !== \"undefined\") {\n const results = localStorage.getItem(RADAR_CHART_DATA_KEY);\n return results ? JSON.parse(results) : null;\n }\n return null;\n};\n\nexport const saveRadarChartData = (results: any) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(RADAR_CHART_DATA_KEY, JSON.stringify(results));\n }\n};\n\nexport const clearRadarChartData = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(RADAR_CHART_DATA_KEY);\n }\n};\n\nexport const getSelectedJobProjection = (): any | null => {\n if (typeof window !== \"undefined\") {\n const results = localStorage.getItem(SELECTED_JOB_RADAR_CHART_DATA_KEY);\n return results ? JSON.parse(results) : null;\n }\n return null;\n};\n\nexport const saveSelectedJobProjection = (results: any) => {\n if (typeof window !== \"undefined\") {\n localStorage.setItem(\n SELECTED_JOB_RADAR_CHART_DATA_KEY,\n JSON.stringify(results)\n );\n }\n};\n\nexport const clearSelectedJobProjection = () => {\n if (typeof window !== \"undefined\") {\n localStorage.removeItem(SELECTED_JOB_RADAR_CHART_DATA_KEY);\n }\n};\n","import Hero_2_img from \"./hero-2.webp\";\nimport CTA_bg_img from \"./CTA-bg.webp\";\n// import Features_3_img from \"./feature3.webp\";\nimport Features_3_img from \"./feature.webp\";\nimport Features_4_img from \"./feature4.webp\";\nimport Features_2_1_img from \"./feature2-1.webp\";\nimport Features_2_2_img from \"./feature2-2.webp\";\nimport Features_2_3_img from \"./feature2-3.webp\";\nimport Features_2_4_img from \"./feature2-4.webp\";\nimport Result_img from \"./results.webp\";\nimport Logo from \"./logo.png\";\nimport CTA_img from \"./CTA.webp\";\nimport Logo_cyde from \"./ico2.png\";\nimport Error_img from \"./error.webp\";\nimport Hero from \"./hero.webp\";\nimport Landing from \"./landing.webp\";\n\n//fiche métier\nimport dataFiche from \"./ficher-metier/data.png\";\n\nexport {\n Hero_2_img,\n Features_3_img,\n Features_4_img,\n Features_2_1_img,\n Features_2_2_img,\n Features_2_3_img,\n Features_2_4_img,\n Result_img,\n Logo,\n CTA_img,\n CTA_bg_img,\n Logo_cyde,\n Error_img,\n Hero,\n Landing,\n dataFiche,\n};\n","export default {\"src\":\"/_next/static/media/CTA-bg.01a5fab5.webp\",\"height\":1000,\"width\":1000,\"blurDataURL\":\"data:image/webp;base64,UklGRkYAAABXRUJQVlA4IDoAAADQAQCdASoIAAgAAkA4JbACdAD0SRsI4ADVVBrcJSj+dRj+4PK/uoG7aF+Z0/3FK/+6X+/7kqn6JAAA\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/CTA.a8f98a01.webp\",\"height\":1172,\"width\":797,\"blurDataURL\":\"data:image/webp;base64,UklGRpQAAABXRUJQVlA4WAoAAAAQAAAABAAABwAAQUxQSCkAAAAANErCwFus/////a7////+rv////6u/////q7////+mP7/3OcPTY8WEQBWUDggRAAAAPABAJ0BKgUACAACQDgllAJ0AQ8Jp+KaAAD+6KbJ8r/apeQRXse9oy9LlW6/mJ7SS9WkLiB85rKuRgzYYj1KDZlxeAAA\",\"blurWidth\":5,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/error.e10a31c0.webp\",\"height\":1024,\"width\":415,\"blurDataURL\":\"data:image/webp;base64,UklGRmIAAABXRUJQVlA4WAoAAAAQAAAAAgAABwAAQUxQSBkAAAAA6e/I/f/8/f/8/v/8/v/9/v/9/v/95/zrAFZQOCAiAAAAsAEAnQEqAwAIAAJAOCWkAALnaut5gAD++xxrxEMn4WAAAA==\",\"blurWidth\":3,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature.ccb992b5.webp\",\"height\":1004,\"width\":1367,\"blurDataURL\":\"data:image/webp;base64,UklGRqQAAABXRUJQVlA4WAoAAAAQAAAABwAABQAAQUxQSC4AAAABT6CgkaQ2+L2ZoINHIiJgmuqrxh8KIVmh+nqEEkoWT+EpPOEYIvofC+RJ/Q/pVlA4IFAAAAAwAgCdASoIAAYAAkA4JbACdLoAA5OSZP+IAAD++8dcLSLKwoGeWJCvJBo/KaEq2U46DbSK09jy/1qfCT17mJlmuw61E5JfLbBpBX3AbZQAAA==\",\"blurWidth\":8,\"blurHeight\":6};","export default {\"src\":\"/_next/static/media/feature2-1.8bce86d9.webp\",\"height\":1024,\"width\":501,\"blurDataURL\":\"data:image/webp;base64,UklGRowAAABXRUJQVlA4WAoAAAAQAAAAAwAABwAAQUxQSCEAAAAA3v7+3vr///j8///7/P///Pj///j4///4+P//+N/+/t8AVlA4IEQAAACwAQCdASoEAAgAAkA4JZACdAEOunwQAP73Q3vSkab664oREuvJrcfUHEQEHYeMDyW0swpEvdEUCKqPZ4xyG3mwMAAAAA==\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature2-2.791fda2c.webp\",\"height\":1025,\"width\":502,\"blurDataURL\":\"data:image/webp;base64,UklGRngAAABXRUJQVlA4WAoAAAAQAAAAAwAABwAAQUxQSCEAAAAA3Pz82/n///f7///5+///+vf///f3///39///997+/t0AVlA4IDAAAADQAQCdASoEAAgAAkA4JZQCw7EO+KeoAAD+89DX8TqlQuheT41SdTEudifO8iCCxAA=\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature2-3.6f3486fb.webp\",\"height\":1025,\"width\":502,\"blurDataURL\":\"data:image/webp;base64,UklGRnoAAABXRUJQVlA4WAoAAAAQAAAAAwAABwAAQUxQSCEAAAAA3v7+3fn///f7///5+///+vf///f3///39///99z8/NsAVlA4IDIAAADQAQCdASoEAAgAAkA4JYwCw7EPDAbPAAD+90Nldd0cgbnaGztjAfVIZRn9bbButZhAAA==\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature2-4.fec34113.webp\",\"height\":1025,\"width\":502,\"blurDataURL\":\"data:image/webp;base64,UklGRnwAAABXRUJQVlA4WAoAAAAQAAAAAwAABwAAQUxQSCEAAAAA3Pz82/n///f7///5+///+vf///f3///39///997+/t0AVlA4IDQAAACwAQCdASoEAAgAAkA4JQBOgCHgim3YAP72TB+/8ouYJDV5irftavt3lPeRe+qVetE5QAAA\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/feature4.941a1a66.webp\",\"height\":1004,\"width\":1367,\"blurDataURL\":\"data:image/webp;base64,UklGRqQAAABXRUJQVlA4WAoAAAAQAAAABwAABQAAQUxQSC8AAAABT6CgjSQ1eAz/HhhEfkQELFN7tfGHQkhWqL4eoYSSxVN4Ck84hoj+xwJ5Uv9DOgBWUDggTgAAABACAJ0BKggABgACQDglsAJ0ugADHZ6yBwAA/vuwW0PbBndMBgCYpqPestNf6ZNAt/8+L7v4nDMYAtXluzXYdvkTkl8tsGkFfcBtlAAAAA==\",\"blurWidth\":8,\"blurHeight\":6};","export default {\"src\":\"/_next/static/media/data.226c2d4e.png\",\"height\":96,\"width\":96,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAG1BMVEVERERMaXFFRUVBQUFAQEBHR0c/Pz9CQkJCQkJlGAH/AAAACXRSTlOpALV1bQIMnYNgLve9AAAACXBIWXMAAAsTAAALEwEAmpwYAAAAMElEQVR4nC3LsREAIQzEQOlsQ/8dM/CvaBPhbUYcq/yQuMRl2IhsIGL4Ud3dJW9XDxLbAHs57meKAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/hero-2.8f1a1483.webp\",\"height\":3375,\"width\":1850,\"blurDataURL\":\"data:image/webp;base64,UklGRn4AAABXRUJQVlA4WAoAAAAQAAAAAwAABwAAQUxQSBIAAAABD9D/iAiIBZPe+SsHEdH/0ABWUDggRgAAABACAJ0BKgQACAACQDglsAJ0a4ACh50AZgAA/eOEWvd89575tXqjqcEWoD4xyNvvV7h/8oue23pByWXNP9/7onxpedwAAAA=\",\"blurWidth\":4,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/hero.06748108.webp\",\"height\":1057,\"width\":2114,\"blurDataURL\":\"data:image/webp;base64,UklGRnQAAABXRUJQVlA4WAoAAAAQAAAABwAAAwAAQUxQSCEAAAAAJC2dsrKdLSTR////////0dH////////Rz/7//////s8AVlA4ICwAAACwAQCdASoIAAQAAkA4JZwCdAD0qP3gAP77XoTaKfVy6lmA/UDdjQCyyGAAAA==\",\"blurWidth\":8,\"blurHeight\":4};","export default {\"src\":\"/_next/static/media/ico2.cce14447.png\",\"height\":473,\"width\":447,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAZlBMVEVMaXH9owT0ow8ZpvOQjIUsr97btwAVtPQUsPodtfkRrvx/duAYsvj/oQD7pAO3R/9zvwyzqFgpu8F5wgB6tCn/ogAcr/QPt/8dsvYdsfa4tgB6wwn/nQB6rEItr+WSdP+uu0rrtCcTjFZXAAAAH3RSTlMAb9gKHBMOJEj5YTrpHkxuuq39i9/wdtPWtv2epfutcEUKtwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAEFJREFUeJwVyzUSwDAQALE1+xxmpv9/MuNKlcDMyVuATdLQAlECx9hYorhzv54Csy767csA4f666AA16SonauWzP2EjAoGIO/rlAAAAAElFTkSuQmCC\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/landing.331b8d12.webp\",\"height\":1158,\"width\":2114,\"blurDataURL\":\"data:image/webp;base64,UklGRn4AAABXRUJQVlA4WAoAAAAQAAAABwAAAwAAQUxQSCEAAAAAGyKiuLiiIhvR////////0dH////////RMT2aqqqaPTEAVlA4IDYAAACwAQCdASoIAAQAAkA4JQBOgB6Q/0uAAP7ubtnOe4av67VMgBg9N4gQ+1W+La50yuVeryuAAAA=\",\"blurWidth\":8,\"blurHeight\":4};","export default {\"src\":\"/_next/static/media/logo.0c9862e3.png\",\"height\":1024,\"width\":1024,\"blurDataURL\":\"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAgAAAAICAMAAADz0U65AAAAPFBMVEVMaXH9ZijXDXL/PDnzAGf5vSH8wK/m7MT8Uhj29pL/z9r/wAT9wQb7DVv8tST/wQDxxrD/9K7/46z/mNY10TgnAAAAEXRSTlMAw5X3RY/dDSIc/bv0wclXvXGHWVIAAAAJcEhZcwAACxMAAAsTAQCanBgAAAAtSURBVHicY2BABpzsYIqfj42RA8TgFuRiBjE4eYSEeUEC7KwCTCwQtRClMAAAIG4A3j2q8NEAAAAASUVORK5CYII=\",\"blurWidth\":8,\"blurHeight\":8};","export default {\"src\":\"/_next/static/media/results.404e1e5c.webp\",\"height\":1312,\"width\":1338,\"blurDataURL\":\"data:image/webp;base64,UklGRqYAAABXRUJQVlA4WAoAAAAQAAAABwAABwAAQUxQSDIAAAABYFLbVqwnUWRBIimCpQGWDJNFUWTuNcP/ESJiAlBMKUkA3FcPQLYmWD+H/7QxTnFOAVZQOCBOAAAA0AEAnQEqCAAIAAJAOCWYAnQBDv3XSQAA/vC2tF9+t44wDa7VWbcjMUNh7jwSsvt+Gd0lmGBK3aJAmSw21vVwy9kf0ysgwJoq5CiWwAAA\",\"blurWidth\":8,\"blurHeight\":8};"],"names":["clearLocalStorage","keys","forEach","localStorage","removeItem","key","redoQuizPopup","onClose","param","jsx_runtime","jsx","div","className","jsxs","h1","p","Link","href","onClick","MdClose","size","quizPopup","isQuizDone","setIsQuizDone","useState","isStudentQuizDone","setIsStudentQuizDone","useEffect","fetchData","localQuizId","getItem","localQuizResult","localStudentQuizId","localStudentQuizResult","getButtonState","disabled","quizDone","concat","Nav","menuOpen","setMenuOpen","hasResults","setHasResults","showQuizPopup","setShowQuizPopup","showRedoQuizPopup","setShowRedoQuizPopup","results","getResults","header","nav","aria-label","Image","alt","src","Logo","button","svg","viewBox","xmlns","title","path","d","ul","Fragment","li","fill","stroke","strokeLinecap","strokeLinejoin","strokeWidth","QuizPopup","RedoQuizPopup","BUILD_VERSION","__webpack_exports__","clear","setItem","pathname","usePathname","pathArray","split","filter","react_jsx_runtime__WEBPACK_IMPORTED_MODULE_0__","map","segment","index","slice","join","isLast","length","span","props","contentClassName","formData","setFormData","app","surname","name","email","content","currentFormData","sendMessage","fetch","method","headers","body","JSON","stringify","error","form","label","htmlFor","input","type","id","autoComplete","value","onChange","e","target","textarea","rows","arrayFAQ","description","faq_page","expanded","setExpanded","toggleFAQ","section","aria-expanded","rect","y","width","height","rx","style","transition","router","useRouter","emailSent","setEmailSent","formValues","setFormValues","nom","prenom","errors","setErrors","isFormValid","setIsFormValid","buttonText","setButtonText","buttonColor","setButtonColor","loading","setLoading","progress","setProgress","validateName","test","validateEmail","emailRegex","sanitizeInput","replace","handleChange","sanitizedValue","newErrors","handleSendPDF","sessionId","responseQuiz","quiz_code","data","json","updateUserInfo","resultsQuiz","formatResults","answersQuiz","transformAnswers","answers","skillPoolsQuiz","transformAnswersToSkillPools","generatePdf","progressValue","response","to","dynamicData","ok","setTimeout","push","nomError","prenomError","emailError","sectionName","ctaText","a","rel","sendGAEvent","event","aria-hidden","focusable","Chart","register","ChartDataLabels","chart_hero_job","jobChart","setJobChart","storedResults","topFourJobs","parsedResults","parse","sort","b","percentage","console","log","renderChart","ctx","document","getElementById","getBarData","options","getDefaultOptions","plugins","labels","job","datasets","toFixed","backgroundColor","borderColor","borderWidth","responsive","maintainAspectRatio","scales","x","beginAtZero","grid","display","max","legend","tooltip","enabled","canvas","skills_section_result","topSkills","setTopSkills","dimension","setDimension","fetchTopSkills","sortedSkills","skill","data-tooltip-id","data-tooltip-place","Tooltip","hero_result","bestJob","setBestJob","selectedJobs","setSelectedJobs","isGenerating","setIsGenerating","pdfUrl","setPdfUrl","init","bestMatch","reduce","prev","current","selections","getResultsSelection","alert","pdfFile","val","window","URL","createObjectURL","h3","toUpperCase","h4","SkillsSection","ChartHeroJob","link","createElement","download","appendChild","click","remove","revokeObjectURL","jobResults","setJobResults","selectedResults","setSelectedResults","filteredResults","result","storedSelections","isSelected","some","r","toggleSelection","updatedSelections","saveResultsSelection","getDimensionEmoji","jobsData","find","iconName","IconComponent","FaIcons","closeModal","setCloseModal","searchParams","useSearchParams","get","aria-labelledby","aria-modal","RadialLinearScale","PointElement","LineElement","Filler","Legend","dragDataPlugin","chartData","setChartData","jobs","setJobs","selectedJob","setSelectedJob","chartRef","useRef","setPercentage","projectionTime","setProjectionTime","isBusy","setIsBusy","fetchProjectionData","quiz_results","sortedJobs","storedJob","getSelectedJobProjection","defaultJob","updateData","formattedData","questions","domaine","q","metier","metierSig","souhait","souhaitSig","actuel","actuelSig","saveRadarChartData","saveSelectedJobProjection","souhaitSignature","item","actuelSignature","metierSignature","metierPower","powerCigSimp","newPercentage","calcNote","newDimension","getDimension","projTime","calcProjectionTime","actuelValues","souhaitValues","metierValues","getTimeCategory","percent","color","time","getDimensionLabel","dim","Info","main","h2","strong","select","newJob","option","Radar","ref","pointBackgroundColor","pointRadius","ticks","stepSize","dragData","round","onDrag","_","datasetIndex","newValue","Math","min","newData","prevData","setDisabled","resetButton","getRadarChartData","generateProjectionPdf","step","Number","icons","component","FaSadTear","FaFaceFrown","FaMeh","FaSmile","FaLaugh","colors","totalQuestions","CIG_SIMP","totalPages","ceil","currentPage","setCurrentPage","resultQuiz","setResultQuiz","setSessionId","userSignature","setUserSignature","firstLoad","setFirstLoad","existingSessionId","getSessionId","loadQuizResults","createQuizSession","calculateProgress","updatedQuiz","question","answer","signature_index","parseInt","isNextDisabled","useCallback","start","saveSessionId","answeredQuestions","submitAnswer","currentQuestion","quiz_id","skill_pool","skillPool","toString","timestamp","now","Date","toISOString","dateSignature","deleteAnswer","handleValueChange","prevResults","scrollToQuestion","calculateResults","signatures","s","saveResults","storeResults","location","handlePageChange","newPage","questionElement","scrollIntoView","behavior","block","currentQuestions","firstQuestion","trunc","globalIndex","text","Icon","ChartJS","CategoryScale","LinearScale","BarElement","Title","mappingTraitsNames","ExportableView","bestCategory","barChartData","radarChartData","padding","flexDirection","alignItems","justifyContent","textAlign","marginBottom","fontSize","fontWeight","flex","Bar","position","font","callback","pointLabels","setBestCategory","categoryAverages","setCategoryAverages","traitAverages","setTraitAverages","isGeneratingImage","setIsGeneratingImage","generatedImage","setGeneratedImage","showShareModal","setShowShareModal","setStoredResults","showJobModal","setShowJobModal","filteredJobs","jobList","category","local","fetchStoredResults","sortedCategoryAverages","category_averages","average","trait_averages","trait","MdInfoOutline","exportView","toPng","then","dataUrl","catch","err","finally","img","open","AnimatePresence","motion","initial","opacity","animate","exit","br","cubeMino","cubeMajo","i","difference","charAt","pow","signature","calculatePower","factor","sum","str","char","calcArea","area","nextValue","sin","PI","userArea","sqrt","sommeDelta","sommeActuel","sommeSouhait","digit1","digit2","abs","resultsSelection","score","parseFloat","skillPoolMap","total","count","Object","pool","currentAnswers","__typename","signatureIndex","fontCache","Map","loadFont","url","arrayBuffer","loadFonts","pdfDoc","registerFontkit","fontkit","loadedFonts","fontKey","fontUrl","entries","topTitleFont","titleFont","bodyFont","has","fontBytes","embeddedFont","embedFont","set","layout","pageWidth","pageHeight","margin","styles","topTitleStyle","rgb","titleStyle","bodyHomeStyle","bodyStyle","subtitleStyle","createSynthesisProjectionTemplate","backgroundImageUrl","fonts","jobTitle","page","createPageTemplate","rightTitle","leftTitle","formatText","pagination","synthesisText","generateDimensionText","improvementText","generatePercentageText","timeText","generateTimeText","synthesisTitleYPosition","synthesisTextYPosition","getBottomYPosition","drawTextElement","improvementTitleYPosition","timeTitleYPosition","baseText","resultDimensionGPT","textPrompt","resultDim","resultPercentageGPT","resultPercent","adjustedX","adjustedY","calculateTextPosition","drawText","lineHeight","createGeneralProjectionTemplate","jobIndex","radarChartImageUrl","renderProjectionChart","radarChartImageBytes","res","radarChartImageEmbed","embedPng","scaleFactor","targetWidth","chartDims","scale","drawImage","onProgressUpdate","PDFDocument","create","bgPdf","bgPdfFlou","getBackgroundImages","createProjectionAccueilPage","saveProjectionPdf","createAccueilPage","logoImageUrl","logo","personalizedText","createSommairePage","startYTitle","titleX","titleY","weight","currentY","createTopPage","pageTitle","barChartImageUrl","datalabels","anchor","align","formatter","context","barChartImageBytes","barChartImageEmbed","addCenteredStyle","bottomChartYPosition","alignment","createJobSynthesisTemplates","groupedJobs","underDimensioned","wellDimensioned","overDimensioned","groupTitles","group","createJobSynthesisTemplate","generateBarChartImage","Promise","getContext","dpr","devicePixelRatio","reject","accessibleJobs","nonAccessibleJobs","allLabels","accessibleData","nonAccessibleData","indexAxis","animation","autoSkip","categoryPercentage","barPercentage","resolve","toDataURL","imageCache","addPage","drawBackgroundImage","drawLogo","drawLeftTitle","drawRightTitle","drawPagination","String","imageUrl","imageEmbed","imageBytes","loadImage","imageWidth","imageHeight","logoEmbed","logoPath","logoBytes","logoDims","createGeneralTemplate","userSkillPools","skillPools","jobSignature","jobSkillPools","calculateAverage","superiorSkills","inferiorSkills","equalSkills","analyzeSkillsDifferences","formattedText","end","analyzeTopSkillGaps","userAnswers","jobSignatures","filteredSkills","userLevel","requiredLevel","createSynthesisJobTemplate","generateSynthesisText","generateImprovementText","textDimension","placeholders","Boolean","resultProgressJobInfo","promptProgress","messages","placeholder","textProgressjobInfo","improvementTexts","improvementMessages","all","createSkillDetailsTemplate","skillsGroupedByType","groupSkillsByType","renderRadarChart","grouped","acc","removeDuplicateSkills","seen","Set","skills","add","allSkills","Array","from","flatMap","skillsData","colorBase","generateColor","skillData","values","flat","angleLines","suggestedMin","suggestedMax","createJobInfosTemplate","jobInfo","jobInfos","metierNom","leftColumnX","rightColumnX","columnWidth","initialYPosition","currentYLeft","textMissionjobInfo","mission","resultMissionjobInfo","promptMission","resultMission","activities","activity","currentYRight","resultTrendsjobInfo","trends","promptTrendsMarket","resultTrends","resultCareerjobInfo","careerPath","promptCareer","resultCareer","lines","widthOfTextAtSize","line","createTransitionPage","jobDescription","formattedJobTitle","formattedJobDescription","descX","descY","savePdf","skillAnalysis","jobSkill","userSkill","maxLength","centeredLines","leftPadding","repeat","floor","startY","maxWidth","maxLineLength","words","currentLine","word","trim","filename","Blob","save","blob","statusText","chartOptions","getRadarData","getScatterData","pointHoverRadius","getRadarProjectionChart","getDefaultProjectionOptions","SESSION_ID_KEY","RESULTS_KEY","SELECT_RESULTS_KEY","RADAR_CHART_DATA_KEY","SELECTED_JOB_RADAR_CHART_DATA_KEY","saveStudentSessionId","studentSessionId","saveStudentResults"],"sourceRoot":""}