{"version":3,"file":"static/js/6f0cf066b6932ebaef29.bundle.js","mappings":";iLAqBA,MAuCMA,EAAqBC,GAEnBC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKJ,EAAWK,yBAChBL,EAAWM,iBACXN,EAAWO,oBACXP,EAAWQ,kBAMtBC,EAAmBA,CACrBC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAM,cAAEC,GAAkBT,EAE1B,OAAII,EACOd,EAAAA,cAAAA,EAAAA,SAAA,KAAGc,GAEVL,EACOA,EAAUW,KAAI,CAACC,EAAUC,IAExBtB,EAAAA,cAAA,OAAKuB,UAAU,sBAAsBC,IAAKF,GACrCD,EAASI,SACTR,EAAiB,KAAOS,EAAkBL,EAAUX,EAAWC,EAAeK,EAAkBE,GAChGD,EACGjB,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,sCACXI,EAAuBN,EAAUX,EAAWC,EAAeK,EAAkBE,GAC7EG,EAASO,mBACTP,EAASQ,cACTR,EAASS,QAEdT,EAASO,mBACT5B,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,gCACXF,EAASO,mBACTP,EAASQ,cACTR,EAASS,QAGd9B,EAAAA,cAAAA,EAAAA,SAAA,KACKqB,EAASQ,cACTR,EAASS,WAO3Bf,EACHf,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiBJ,GAC7BP,GAGLZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGa,IAULkB,EAAuBA,CAACV,EAA+BW,IAA6B,KACtFX,EAASY,eAAiBZ,EAASY,cAAcC,UAAUC,aAAaH,IAQtEI,EAAwBf,GAAkC,KAC5DA,EAASY,eAAiBZ,EAASY,cAAcC,UAAUC,aAAY,IAGrET,EAAoBA,CACtBL,EACAX,EACAC,EACAK,EACAE,KACoB,IAAAmB,EAEpB,IAAKhB,EAASY,gBAAkBtB,IAA8B,QAAb0B,EAAAhB,EAASiB,YAAI,IAAAD,OAAA,EAAbA,EAAeZ,SAASc,gBAAiBrB,EACtF,OAAO,KAGX,MAAM,uBACFsB,EAAsB,yBACtBC,EAAwB,oBACxBC,EAAmB,8BACnBC,EAA6B,uBAC7BC,GACAlC,EAEEsB,EAAkBX,EAASY,cAAcD,gBAEzCa,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS9B,EAAmB+B,EAAAA,kBAAkBC,eACzEC,GAAyBC,EAAAA,EAAAA,wBAAuBlC,EAAmB6B,GAEzE,OACI7C,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKkB,EAASY,cAAckB,gBAC7BnD,EAAAA,cAAA,OAAKuB,UAAU,+BACVS,EACGhC,EAAAA,cAAA,QAAMuB,UAAU,WAAWoB,GAE3B3C,EAAAA,cAAA,QAAMuB,UAAU,QAAQkB,IAG/BT,GACGhC,EAAAA,cAAA,OAAKuB,UAAU,oCACXvB,EAAAA,cAAA,QAAMuB,UAAU,0CAA0CF,EAASY,cAAcmB,aACjFpD,EAAAA,cAACqD,EAAAA,OAAM,CAACC,KAAK,OAAO/B,UAAU,mCAAmCgC,QAASnB,EAAqBf,IAC1FuB,IAIb5C,EAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACHoB,UAAU,4BACN0B,EAAsB,CAC1BM,QAASxB,EAAqBV,EAAUW,KAEvCA,EAAkBQ,EAAyBE,KAMtDc,EAAqBC,GAClBA,GAAyC,IAA5BA,EAAUC,OAAOC,OAI/B3D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKsD,EAAUG,SACfH,EAAUI,OACVJ,EAAUC,QALR,KAUTI,EAA2BA,CAC7BC,EACAC,EACAC,IAEKF,EAID/D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLC,EAAMC,UACNH,EAAkBI,SAClBJ,EAAkBK,SAClBL,EAAkBM,YAClBN,EAAkBO,IAClBP,EAAkBQ,eAAiBR,EAAkBQ,eAAiB,KACtER,EAAkBS,YAVhB,KAeTC,EAA6BA,CAC/BC,EACAV,EACAC,IAEKS,EAKD1E,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLU,EAAoBC,SACpBD,EAAoBE,SACpBF,EAAoBG,QACpBH,EAAoBF,aARzBP,EAAMa,QAAQC,UAAUC,MAAM,uDACvB,MAYTC,EAAwBA,CAAChB,EAAuBvD,IAC9CuD,EAAMiB,gBAAkBjB,EAAMiB,eAAevB,OAAS,EAElD3D,EAAAA,cAAA,OAAKuB,UAAU,wBACV0C,EAAMiB,eAAe9D,KAAI+D,IAAY,IAAAC,EAAAC,EAClC,OACIrF,EAAAA,cAAA,OAAKuB,UAAU,+BACV+D,EACGH,EAAU,GACVlB,EAAMtD,cACND,EACA6E,EAAYJ,GACsC,QAD5BC,EACtBnB,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAN,OAAA,EAAlDA,EAAoDO,uBAEvDnF,EACG2E,EACAlB,EAAMvD,UACNuD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,eACNkD,EAAMjD,iBACNiD,EAAM2B,sBAC4C,QADvBP,EAC3BpB,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAL,OAAA,EAAlDA,EAAoDM,4BAQzE1B,EAAMlD,eACTf,EAAAA,cAAA,OAAKuB,UAAU,uBACXvB,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiB0C,EAAMvD,UAAUS,eAC7C8C,EAAMrD,uBAIfZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGiE,EAAMpD,kBAGXyE,EAA8BA,CAChCjE,EACAV,EACAD,EACAmF,EACA3E,KACA,IAAA4E,EACA,MAAM9D,EAAwC,QAAzB8D,EAAGzE,EAASY,qBAAa,IAAA6D,OAAA,EAAtBA,EAAwB9D,iBAC1C,WAAE+D,EAAU,aAAEC,EAAY,kBAAEC,GAAsBvF,EACxD,IAAIwF,EAKJ,OAHAA,EAAalE,EAAkB+D,EAAaC,EAC5CE,EAAa7E,EAASiB,MAAQjB,EAASiB,KAAKb,SAASc,eAAiBrB,EAAwB+E,EAAoBC,EAG9GlG,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKuB,UAAU,8CACXvB,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,uBACvEnG,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,iBAAkBD,GACxFE,EAA2B/E,EAAUX,EAAWmF,MAM3DlE,EAAyBA,CAC3BN,EACAX,EACAC,EACAK,EACAE,KACoB,IAAAmF,EAEpB,IAAKhF,EAASY,gBAAkBtB,IAA8B,QAAb0F,EAAAhF,EAASiB,YAAI,IAAA+D,OAAA,EAAbA,EAAe5E,SAASc,gBAAiBrB,EACtF,OAAO,KAGX,MAAM,uBAAE0B,EAAsB,uBAAEJ,EAAsB,oBAAEE,GAAwBhC,EAE1EsB,EAAkBX,EAASY,cAAcD,gBAEzCa,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS9B,EAAmB+B,EAAAA,kBAAkBC,eACzEC,GAAyBC,EAAAA,EAAAA,wBAAuBlC,EAAmB6B,GAEzE,OACI7C,EAAAA,cAAAA,EAAAA,SAAA,KACKgC,EACGhC,EAAAA,cAACqD,EAAAA,OAAM,CAAC9B,UAAU,qCAAqCgC,QAASnB,EAAqBf,IAChFuB,GAEL,KACJ5C,EAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACHoB,UAAU,sCACN0B,EAAsB,CAC1BM,QAASxB,EAAqBV,EAAUW,KAEvCA,EAAkBQ,EAAyBE,KAMtD6C,EAAelE,IACjB,IAAIiF,EAAY,EAIhB,OAHAA,EAAYjF,EAASkF,QAAO,CAACV,EAAOW,KAAQ,IAAAC,EACxC,OAAOZ,IAAkB,QAATY,EAAAD,EAAKlE,YAAI,IAAAmE,OAAA,EAATA,EAAWhF,SAASiF,WAAY,KACjD,GACIJ,GAGLF,EAA6BA,CAAC/E,EAA+BX,EAA2BmF,KAAiB,IAAAc,EAAAC,EAAAC,EAC3G,MAAM7E,EAAwC,QAAzB2E,EAAGtF,EAASY,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwB3E,iBAC1C,UAAE8E,EAAS,WAAEC,GAAerG,EAC5BsG,EAASnB,EAAQ,EAAIkB,EAAaD,EACxC,OACI9G,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,oDACXS,EACGhC,EAAAA,cAAA,KAAGuB,UAAU,uDACc,QADuCqF,EAC7DvF,EAASY,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJxF,EAASY,qBAAa,IAAA4E,OAAA,EAAtBA,EAAwBzD,aAE7B,KACJpD,EAAAA,cAAA,KAAGuB,UAAU,uDAAqD,IAC5DsE,EAAK,IAAGmB,EAAM,QAOpC,EA9W4C/C,IAAqB,IAAAiD,EAAAC,EAAA,OAC7DnH,EAAAA,cAAA,MAAAE,OAAAC,OAAA,CAAKoB,UAAW0C,EAAM1C,UAAW6F,GAAInD,EAAMmD,IAAQnD,EAAMoD,uBAAuBpD,IAC3EA,EAAMqD,MACNrD,EAAMsD,kBAAoBzH,EAAkBmE,EAAMsD,kBAClDtD,EAAM2B,sBACHX,EAAsBhB,EAAOA,EAAMvD,WAEnCV,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMuD,kBACXhH,EACGyD,EAAMkB,UACNlB,EAAMvD,UACNuD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,eACNkD,EAAMjD,iBACNiD,EAAM2B,sBAC4C,QADvBsB,EAC3BjD,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAwB,OAAA,EAAlDA,EAAoDvB,wBAI/D1B,EAAMwD,qBACHzH,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMyD,qBACXzD,EAAMwD,oBACI,QAAVN,EAAAlD,EAAM0D,YAAI,IAAAR,GAAVA,EAAYS,eACPnD,EAA2BR,EAAM4D,wBAAyB5D,EAAMD,kBAAmBC,GACnFH,EAAyBG,EAAM6D,sBAAuB7D,EAAMD,kBAAmBC,GACpFT,EAAkBS,EAAM8D,oBACxB9D,EAAM+D,2BACN/D,EAAMgE,sBACNhE,EAAMrD,qBACNqD,EAAMiE,8BAGdjE,EAAMtD,qnBCxDf,MAAMwH,EAAU,CAAEC,QAAS,GAAIC,YAAa,IAmBlCC,EAA8BA,CAACC,EAAqBC,KAUlD,GADAL,EAAQE,YAAYE,GAAuBC,GACtCL,EAAQE,YAAYE,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEJ,EAAQE,YAAYE,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEJ,EAAQE,YAAYE,GAAqBE,QAAQE,UAAUvB,KAC3De,EAAQE,YAAYF,EAAQE,YAAYE,GAAqBE,QAAQE,UAAUvB,IAAMmB,IAMhGJ,EAAQC,QAAc,KAAI,CACvBS,EAAGA,IAAMC,EAAQ,MACjBC,MAAO,kBACPC,GAAI,CAAC,CAACC,KAAK,OAASC,KAAK,+EAAgFC,MAAO,GAAG,CAACF,KAAK,oBAAsBC,KAAK,4EAA6EC,MAAO,GAAG,CAACF,KAAK,yBAA2BC,KAAK,sFAAuFC,MAAO,GAAG,CAACF,KAAK,WAAaC,KAAK,kEAAmEC,MAAO,GAAG,CAACF,KAAK,8BAAgCC,KAAK,+FAAgGC,MAAO,GAAG,CAACF,KAAK,mBAAqBC,KAAK,0EAA2EC,MAAO,GAAG,CAACF,KAAK,sBAAwBC,KAAK,kEAAmEC,MAAO,GAAG,CAACF,KAAK,kBAAoBC,KAAK,wFAAyFC,MAAO,GAAG,CAACF,KAAK,eAAiBC,KAAK,uEAAwEC,MAAO,GAAG,CAACF,KAAK,iBAAmBC,KAAK,iGAAkGC,MAAO,GAAG,CAACF,KAAK,mBAAqBC,KAAK,+EAAgFC,MAAO,GAAG,CAACF,KAAK,uBAAyBC,KAAK,kFAAmFC,MAAO,GAAG,CAACF,KAAK,WAAaC,KAAK,iFAAkFC,MAAO,GAAG,CAACF,KAAK,4BAA8BC,KAAK,4HAA6HC,MAAO,GAAG,CAACF,KAAK,gBAAkBC,KAAK,2EAA4EC,MAAO,GAAG,CAACF,KAAK,YAAcC,KAAK,iFAAkFC,MAAO,IAE/8DC,KAAK,EACLC,GAAI,6BACJC,EAAG,OACHC,EAAG,OAEHC,IAAK,GAGLC,GAAI,sEAOAnB,EAF4B,4HACXQ,EAAQ,KAQzBR,EAF4B,kFACXQ,EAAQ,MAQzBR,EAF4B,4EACXQ,EAAQ,MAQzBR,EAF4B,kEACXQ,EAAQ,MAQzBR,EAF4B,+FACXQ,EAAQ,KAQzBR,EAF4B,kEACXQ,EAAQ,KAQzBR,EAF4B,0EACXQ,EAAQ,MAQzBR,EAF4B,wFACXQ,EAAQ,MAQzBR,EAF4B,uEACXQ,EAAQ,KAQzBR,EAF4B,2EACXQ,EAAQ,MAQzBR,EAF4B,sFACXQ,EAAQ,MAQzBR,EAF4B,iFACXQ,EAAQ,MAQzBR,EAF4B,iFACXQ,EAAQ,MAQzBR,EAF4B,iGACXQ,EAAQ,MAQzBR,EAF4B,+EACXQ,EAAQ,MAQzBR,EAF4B,+EACXQ,EAAQ,KAMjCY,OAAOC,aAAeD,OAAOC,cAAgB,GAC7CD,OAAOC,aAAavB,QAAOwB,EAAAA,EAAA,GACpBF,OAAOC,aAAavB,SAAW,IAC/BD,EAAQC,SAGXsB,OAAOC,aAAatB,YAAWuB,EAAAA,EAAA,GAC5BF,OAAOC,aAAatB,aAAe,IACnCF,EAAQE,aAEY,MAAMwB,EAAiB,GAC9BA,EAAe,2DAA6D,CACpFhB,EAAGA,IAAMC,EAAQ,MACjBgB,GAAI,4BAEpBD,EAAe,qDAAuD,CACtDhB,EAAGA,IAAMC,EAAQ,MACjBgB,GAAI,wCAEpBD,EAAe,8EAAgF,CAC/EhB,EAAGA,IAAMC,EAAQ,MACjBgB,GAAI,uDAEpBJ,OAAOC,aAAeD,OAAOC,cAAgB,GAC7CD,OAAOC,aAAaE,eAAcD,EAAAA,EAAA,GACPF,OAAOC,aAAaE,gBAAkB,IACtCA,8LC/KpB,MAAeE,EAyBlBC,cAVmB,KAAAC,iBAAsC,CAAEC,aAAa,EAAMC,YAAY,GAQzE,KAAAC,8BAAwC,6BAGrDC,KAAKC,mBAAoB,EACzB,MAAMC,EAAQF,KAAKG,kBAAkBH,KAAKD,+BAC1C,IACI,MAAMK,EAAoCF,EAAQG,KAAKC,MAAMJ,QAASK,EAClEH,IACAJ,KAAKQ,eAAiBJ,GAE5B,MAAAK,GACET,KAAKQ,oBAAiBD,GAjCpB,mBACN,YAAyBA,IAAlBP,KAAKU,SAGN,cACN,OAAOV,KAAKU,SAqCT,+BACHV,KAAKJ,iBAAmB,CACpBC,aAAcG,KAAKJ,iBAAiBC,YACpCC,YAAaE,KAAKJ,iBAAiBE,YAKpC,yBAAyBa,GAC5BX,KAAKC,kBAAoBU,EAItB,iCAAiCA,GACpCX,KAAKU,SAAWC,EAIb,iCAAiCC,GACpCZ,KAAKa,wBAA0BD,EAI5B,gCACHA,EACAE,GAGkB,IAFlBC,EAAAC,UAAA1H,OAAA,QAAAiH,IAAAS,UAAA,IAAAA,UAAA,GAIA,MAAMZ,EAAwB,CAAEa,QAASL,EAASM,UAAWJ,EAAWK,SAHvDH,UAAA1H,OAAA,EAAA0H,UAAA,QAAAT,EAG2Ea,UAF1EJ,UAAA1H,OAAA,EAAA0H,UAAA,QAAAT,GAGlBP,KAAKQ,eAAiBJ,EAClBW,GACAf,KAAKqB,eAAerB,KAAKD,8BAA+BM,KAAKiB,UAAUlB,IAKxE,6BAA6BmB,EAAmBC,GACnD,MAAMpB,EAAwB,CAAEa,QAAS,GAAIC,UAAW,GAAIC,SAAUI,EAAUH,UAAWI,GAC3FxB,KAAKyB,yBAA2BrB,EAI7B,0BAA0BW,GAC7Bf,KAAKQ,oBAAiBD,EAClBQ,GACAf,KAAK0B,cAAc1B,KAAKD,+BAKzB,iBAAiBY,GACpB,GAAIX,KAAKU,UAAYV,KAAKU,SAAS3D,KAAO4D,EAAM5D,GAC5C,MAAM,IAAIsB,MAAM,4BAGpB2B,KAAKU,SAAWC,EAIb,oBACHX,KAAKU,cAAWH,EAGZmB,cAAcvK,GAClB,GAAKA,GAGDwK,EAAAA,GAASC,UAAW,CACJvC,OAAOwC,aACfC,WAAW3K,IAInBkK,eAAelK,EAAa+I,GAChC,GAAK/I,GAAQ+I,GAGTyB,EAAAA,GAASC,UAAW,CACJvC,OAAOwC,aACfE,QAAQ5K,EAAK+I,IAIrBC,kBAAkBhJ,GACtB,GAAKA,GAGDwK,EAAAA,GAASC,UAAW,CACpB,MACMI,EADU3C,OAAOwC,aACKI,QAAQ9K,GACpC,GAAI6K,EACA,OAAOA,KAvITE,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,kCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,6BAIGD,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,sCAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,+CAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,sCAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,wCAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,yCAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,gDAECF,EAAAA,EAAAA,IAAA,CAAXE,EAAAA,IAAU,gCAsBXF,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4CASPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,wCAMPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gDAMPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gDAMPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+CAgBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4CAOPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yCASPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gCAUPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gCCzGJ,MAAMC,UAAqC5C,EAAlDC,cAAA,oBACqB,KAAA4C,iBAA2B,wCAE3B,KAAAC,iBAA2B,gEAGrC,gBAAgBC,EAAoBtH,GACvC,KACKsH,GACAtH,EAAcC,eAAeC,SAC7BF,EAAcC,eAAeC,QAAQqH,gBACrCvH,EAAcC,eAAeC,QAAQsH,iBAEtC,OAGJ,IAAIC,EAAwBH,EAE5B,MAAMI,EAAQ,qBAAqBC,OAAOC,gBAAgB,IAAIC,YAAY,IAAI,KAE1E7H,EAAcC,eAAeC,QAAQ4H,8BACrCL,EAAgB,GAAGH,EAAWS,UAAU/H,EAAcC,eAAeC,QAAQ4H,+BAGjF,MAAME,EAAQC,UAAUR,GAClBzL,EAAMiM,UAAUjI,EAAcC,eAAeC,QAAQqH,gBAErDW,EACFlI,EAAcC,eAAekI,KAC7BnI,EAAcC,eAAekI,IAAIC,QACjCpI,EAAcC,eAAekI,IAAIC,OAAOF,kBACtCG,EAAa,GACfH,GAAwCrD,KAAKuC,oCAC7BY,SAAahM,WAAa0L,IAE9C,OAAO,IAAIY,SAA4CC,IACnD,MAAMC,EAASC,SAASC,cAAc,UACtCF,EAAOG,aAAa,OAAQ,mBAC5BH,EAAOG,aAAa,MAAON,GAE3BnE,OAAOwD,GAAU5K,WACNoH,OAAOwD,GACdc,EAAOlM,SAEHQ,GAAQA,EAAK8L,cAAgB9L,EAAK8L,aAAazK,OAAS,GAAKrB,EAAK8L,aAAa,GAAG1N,UAAUiD,OAAS,GACrGoK,EAAQ,CACJnC,SAAUtJ,EAAK8L,aAAa,GAAG1N,UAAU,GAAG2N,MAAMC,YAAY,GAC9DzC,UAAWvJ,EAAK8L,aAAa,GAAG1N,UAAU,GAAG2N,MAAMC,YAAY,KAIvEP,OAAQnD,IAGZqD,SAASM,KAAKC,YAAYR,MAK3B,iBAAiBhD,GAAuB,IAAAyD,EAC3C,GAAIC,EAAAA,iBAAiBC,cAAc3D,EAAMxJ,KACrC,OAAOsM,QAAQC,UAKnB,KAFwC,QAATU,EAACR,gBAAQ,IAAAQ,IAARA,EAAUG,eAAe,yBAE9B,CACvB,GAAIlF,OAAQ,CACR,MAAMmF,EAAmBnF,OAAOoF,YAChCpF,OAAOoF,YAAc,KACbD,GACAA,IAEJxE,KAAK0E,gBAAiB,GAI9B,OAAOjB,QAAQC,UAGnB,MAAMiB,EAAM,GAAG3E,KAAKwC,mBAAmB7B,EAAMxJ,IAAM,QAAQwJ,EAAMxJ,MAAQ,KAAKwJ,EAAMiE,KAAO,YAAYjE,EAAMiE,OAAS,KAClHjE,EAAMkE,OAAS,WAAWlE,EAAMkE,SAAW,KAG/C,OAAO,IAAIpB,SAAQ,CAACC,EAASoB,KAAU,IAAAC,EAAAC,EACnC,MAAMrB,EAAiB,QAAXoB,EAAGnB,gBAAQ,IAAAmB,OAAA,EAARA,EAAUlB,cAAc,UACvCF,EAAOsB,KAAO,kBACdtB,EAAOuB,OAAQ,EACfvB,EAAOwB,OAAQ,EACfxB,EAAOyB,IAAMT,EACbhB,EAAO5G,GAAK,uBACRsC,SACAA,OAAOoF,YAAc,KACjBzE,KAAK0E,gBAAiB,EACtBhB,MAGRC,EAAO0B,iBAAiB,SAAU1K,IAC9BmK,EAAOnK,MAEH,QAARqK,EAAApB,gBAAQ,IAAAoB,GAAM,QAANA,EAARA,EAAUd,YAAI,IAAAc,GAAdA,EAAgBb,YAAYR,OC5GjC,SAAS2B,EAA8BC,GAC1C,OAAO,IAAIC,EAAAA,aAAyC,UAAWD,EAAQ,+BDavErD,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+BAsDPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+BC9DX,MAIaoD,GAA6BC,EAAAA,EAAAA,IAA2B,CACjErD,OAA6CsD,EAAAA,iBAC7ChF,MAN2CiF,GACpCN,EAA8B,IAAIhD,KAQ7C,4ECIO4C,eAAeW,EAClBvI,EACA5C,EACAoL,GAC2B,IAEvBC,EACAC,EAHJC,IAAAjF,UAAA1H,OAAA,QAAAiH,IAAAS,UAAA,KAAAA,UAAA,GAIA,IACI+E,QAAmBzI,EACnB0I,EAAcD,EAAWzI,KAAK4I,QAChC,MAAOvL,GAGL,OAFAD,EAAUyL,QAAQxL,GAClBD,EAAU0L,MAAM,uCACTC,EAAAA,YAAY3C,UAGvB,IAAIsC,EAmCA,OADAtL,EAAUyL,QAAQ,uDACXE,EAAAA,YAAY3C,UAlCnB,IAAK,IAAD4C,EACA,MAAMC,QAAoDC,EAAAA,iBAAAA,yBACtD,CAAEC,cAAeX,EAAa3K,cAAeuL,YAAa,QAC1DX,EAAWzI,KAAKqJ,GAChBX,GAGJ,aAAaK,EAAAA,YAAY3C,QAAkD,QAA3C4C,EAACC,EAAiBK,iCAAyB,IAAAN,EAAAA,OAAI/F,GACjF,MAAO5F,GAEL,GAAIsL,GAA8B,2DAAftL,EAAMiE,KAAmE,CACxF,UACUmH,EAAWc,YAAY,IAC/B,MAAOC,GAGL,OAFApM,EAAUyL,QAAQW,GAClBpM,EAAU0L,MAAM,0BACTC,EAAAA,YAAY3C,UAEvB,IAEI,aADMmC,EAAkBvI,EAAM5C,EAAWoL,GAAc,GAChDO,EAAAA,YAAY3C,UACrB,MAAOqD,GAGL,OAFArM,EAAUyL,QAAQY,GAClBrM,EAAU0L,MAAM,2BACTC,EAAAA,YAAY3C,WAM3B,OAFAhJ,EAAUyL,QAAQxL,GAClBD,EAAU0L,MAAM,2BACTC,EAAAA,YAAY3C,WAiExBwB,eAAe8B,EAClBC,EACAlB,EACArL,EACAwM,EACAC,EACAC,GAEA,GAAIrB,EAAY,CACZ,IAAIsB,GAA0C,EAC9C,GAAIC,EAAAA,gBAAgBC,YAAYL,IAAaD,EAAgC,CAAC,IAADO,EACzE,MAAMC,EAA6CP,EAASQ,MACvDC,GAA2BA,EAAQC,WAAaT,EAAiBU,YAEtER,IAAmCI,KAA6C,QAAzBD,EAACC,EAAgBK,gBAAQ,IAAAN,IAAxBA,EAA0BO,sBAElFV,GAAiC,EAGrC,MAAM1G,EAAQ,CACVqH,WAAYb,EAAiBc,OAAQC,WACrCC,YAAaf,EACbgB,qBAAsB,CAAEf,+BAAAA,IAG5B,IACI,MAAMgB,QAA4CtC,EAAWuC,uBAAuB3H,GACpF,aAAa0F,EAAAA,YAAY3C,QAAQ2E,GACnC,MAAO1N,GACLD,EAAUyL,QAASxL,EAAgB4N,SACnC7N,EAAU0L,MAAM,wCAIxB,OAAOC,EAAAA,YAAY3C,8DChKhB,SAAS8E,EAAsBC,EAA+BvB,GACjE,QAAkB3G,IAAdkI,GAA2BnB,EAAAA,gBAAgBC,YAAYL,GACvD,OAAOA,EAASQ,MAAKC,GACVc,IAAcd,EAAQC,WAelC,SAASc,EACZD,EACAvB,EACAyB,EACAC,GAEA,MAAMC,EAAuBF,MAAAA,EAAAA,EAAeC,MAAAA,OAAS,EAATA,EAAWtL,KAAKwL,YAE5D,QAAkBvI,IAAdkI,GAA2BnB,EAAAA,gBAAgBC,YAAYL,GACvD,OAAOA,EAASQ,MAAKC,IAAU,IAAAoB,EAC3B,OAAON,IAAcd,EAAQC,WAA4B,QAAhBmB,EAAApB,EAAQG,gBAAQ,IAAAiB,OAAA,EAAhBA,EAAkBC,uBAAwBH,yOCdxF,MAAMI,EAGTtJ,YAAmBuJ,GAQZ,KAAAC,YAAc,KAAcC,EAAAA,EAAAA,eAAc,mCAAoCpJ,KAAKkJ,aAMnF,KAAAG,mBAAqB,IAAc,mCAMnC,KAAAC,cAAgB,IAAiB,OAnBpCtJ,KAAKkJ,YAAcA,GAqCpBhE,eAAeqE,EAClB5I,EACAlG,GAGA,IAAKkG,EAAMuI,YAAYM,UACnB,MAAM,IAAInL,MAAM,0EAEpB,MACMf,SADkBmM,EAAAA,EAAAA,cAAahP,IACd6C,KACjB4J,QAAiBwC,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2BlP,GAE5EmP,EAAqC,GAG3C,QAAarJ,IAATjD,IAAuBgK,EAAAA,gBAAgBC,YAAYL,GACnD,OAAOzD,QAAQC,QAAQkG,GAa3B,aAV4BC,EAAAA,oBAAAA,wBACxB,CACIpD,cAAehM,EACfqP,oBAAqBC,EAAAA,yBAAyBC,qCAAqCvP,IAEvFyM,EAASnQ,KAAI4Q,GAAWA,EAAQC,WAChC,GAdiB,IAyBiClC,EAAAA,EAAAA,IAA2B,CACjF3I,GAAI,6EACJsF,OAAQkH,EACR5I,MAjDiBiF,GACV,IAAIqD,EAAqCrD,EAAUxK,eAAe8N,8ECdtE,MAAMe,EAAiBrQ,IAC1B,MAmBMsQ,EAAgBvS,IAClB,MAAM,0BAAEwS,EAAyB,QAAExC,EAAO,SAAEvQ,EAAQ,UAAEwR,EAAS,sBAAEwB,GAA0BxQ,EAE3F,GAAIjC,EAAiB,CACjB,IAAKwS,EACD,OAEJA,EACKE,WAAW,CACRtN,GAAIqN,EACJzC,QAAAA,EACA2C,wBAAyB,CACrBC,cAAenT,EAASoT,oBAE5BC,gBAAiB7Q,EAAM6Q,gBACvBC,mBAAoBxF,MAAOyF,EAAiBC,IAlCzB1F,OAC/ByF,EACA/B,EACAxR,EACAwT,IAEKhC,EAGEA,EACFiC,6BAA6B,CAAE7C,WAAY5Q,EAAS6Q,OAAS6C,SAAUH,EAAiBC,aAAAA,IACxFG,MAAKxF,IACoB,YAAlBA,EAAOyF,QACPpR,EAAMqR,4BAGbC,OAAMvQ,QATA8I,QAAQC,UA4BIyH,CAA2BR,EAAiB/B,EAAWxR,EAAUwT,KAG/EM,OAAMvQ,YACR,CACH,IAAKiO,EACD,OAEJxR,EAASc,aAAe,GACxBd,EAASoT,mBAAqB,GAC9BpT,EAASgU,gBAAkB,GAC3BxC,EACKyC,4BAA4B,CAAErD,WAAY5Q,EAAS6Q,SACnD8C,MAAKxF,IACoB,YAAlBA,EAAOyF,QACPpR,EAAMqR,4BAGbC,OAAMvQ,UAIb2Q,EAAkBA,CAACC,EAAwCC,KAC7D,IAAKA,IAAqBD,GAAkD,IAA5BC,EAAiBlS,OAC7D,MAAO,GAGX,MAAMmS,EAAgBD,EAAiB9D,MAAKiD,GACjCA,EAAgBJ,gBAAkBgB,IAG7C,OAAIE,EACOA,EAAcC,YAElBH,GAwFX,GAAK3R,EAAM6Q,iBAAoB7Q,EAAM6Q,gBAAgBkB,gBAArD,CAIkF,IAADC,EAAjF,GAAIhS,EAAMiS,kCAAoCjS,EAAMkS,6BAChD,IAvByBC,EACzBC,EACAC,KAEA,MAAMrP,EAA2B,GASjC,OARAoP,MAAAA,GAAAA,EAAwBjV,KAAImV,IACxB,MAAMC,EAASF,MAAAA,OAAqB,EAArBA,EAAuBvE,MAAK0E,GAAgBA,IAAiBF,EAASG,OAIrF,OAHIF,GACAvP,EAAe0P,KAAKH,GAEjBvP,KAGJ0K,EAAAA,gBAAgBC,YAAY3K,IAU9BmP,CAAqBnS,EAAM6Q,gBAAgBkB,gBAAkD,QAAnCC,EAAEhS,EAAMkS,mCAA2B,IAAAF,OAAA,EAAjCA,EAAmCW,yBAChG,YAED,IACF3S,EAAM4S,yBACN5S,EAAM6Q,gBAAgBkB,gBAAgBjE,MAAK+E,GAAUA,EAAOJ,OAASzS,EAAM4S,yBAE5E,OAGJ,MAAO,CACH3U,UAAW,CACPC,YAAaoS,GAEjBwC,iBAxG0BC,EAC1B3V,EACA4V,EACAC,EACAC,EACAtB,KAEA,MAAMzS,EAAcuS,EAAgBtU,EAASwT,mBAAoBgB,GAC3DuB,IAAkB/V,EAASwT,mBAE3BwC,EAAerV,GACV,KACHuS,EAAavS,IAIrB,OACIhC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,SAAOuB,UAAU,iCACbvB,EAAAA,cAAA,SACIoH,GAAI,6BAA6B/F,EAASiR,SAC1ChD,KAAK,QACLrG,KAAM,gBAAgB5H,EAASiR,SAC/BgF,SAAUD,GAAY,GACtB9M,MAAO0M,EACPM,SAAUH,EAAa,gBACRA,EACf5V,IAAK,GAAGH,EAASiR,kBAEpB2E,GAELjX,EAAAA,cAAA,SAAOuB,UAAU,qCACbvB,EAAAA,cAAA,SACIoH,GAAI,+BAA+B/F,EAASiR,SAC5ChD,KAAK,QACLrG,KAAM,gBAAgB5H,EAASiR,SAC/BgF,SAAUD,GAAY,GACtB9M,MAAO2M,EACPK,QAASH,EAAa,eACRA,EACd5V,IAAK,GAAGH,EAASiR,kBAEpB4E,GAEJ7V,EAASwT,mBACN7U,EAAAA,cAAA,OAAKuB,UAAU,qCACXvB,EAAAA,cAAA,QAAMuB,UAAU,2CAA2C6B,GAC3DpD,EAAAA,cAAA,UAAQuB,UAAU,uCAAuCgC,QAAS8T,GAAY,IACzEF,IAGT,OAqDMH,CACd/S,EAAMxC,SACNwC,EAAMuT,WACNvT,EAAMwT,kBACNxT,EAAMkT,gBACNlT,EAAM4R,kBAEVzS,YAAauS,EAAgB1R,EAAMxC,SAASoT,mBAAoB5Q,EAAM4R,kBACtE7T,kBAAmBiC,EAAMxC,SAASoT,mBAClC5N,eAzDuByQ,EAACC,EAAkC7C,KAA2C,IAAA8C,EACrG,MAAMrB,EAAWzB,MAAAA,GAAgC,QAAjB8C,EAAf9C,EAAiBkB,uBAAe,IAAA4B,OAAA,EAAhCA,EAAkC7F,MAAK+E,GAAUA,EAAOJ,OAASiB,EAAYd,yBAC9F,OAAON,MAAAA,OAAQ,EAARA,EAAUsB,aAuDDH,CAAmBzT,EAAOA,EAAM6Q,iBAChD3R,eAAgB,CACZ5B,UAAW,qCCiBjBuW,EAAgBA,CAClBrW,EACAuQ,EACA/N,EACA3C,EACAyW,EACAC,KACqB,IAAA5E,EAAA6E,EAAAC,EAAAC,EAAAC,EACrB,MAAM,cACFC,EAAa,aACbC,EAAY,GACZlR,EAAE,SACFmR,EAAQ,QACRzT,EAAO,UACPpE,EAAS,iBACT8X,EAAgB,uBAChBC,EAAsB,6BACtBC,EAA4B,6BAC5BC,EAA4B,gCAC5BC,EAA+B,kCAC/BC,EAAiC,mCACjCC,EAAkC,wCAClCC,EAAuC,uDACvCC,EAAsD,wBACtDC,EAAuB,6BACvBC,EAA4B,eAC5BC,EAAc,oBACdC,EAAmB,UACnBC,EAAS,oBACTC,EAAmB,sBACnB7E,EAAqB,oCACrB8E,GACAtV,EAEEuV,EAAkB1U,EAAQ2U,QAAQC,KAAKF,gBACvCG,EAAiBN,GAAaA,EAAU1V,OAAS,GAAK0V,EAAU,GAAGO,KAAOP,EAAU,GAAGO,KAAON,EAC9FO,GAnJNC,EAmJ+D7V,EAAM6V,oBAlJrEC,EAkJ0FhC,EA/IrF+B,GACAC,GACAA,EAAoBC,0BACpBD,EAAoBE,oBACpBF,EAAoBC,yBAAyBE,kBAK3CH,EAAoBC,yBAAyBE,kBAHzC,GAXuBC,IAClCL,EACAC,EAoJA,MAAMK,EACFpI,GAtIwBqI,EAC5BC,EACAR,EACAD,EACAvI,EACAiJ,KAEA,GAAIjJ,EAAgC,CAChC,IAAIkJ,EAAmCD,EAQvC,OAJKA,IACDC,EAAmCF,GAAuB,IAGvDR,EACDU,EAAmCX,EAC/BW,EACAX,EACJW,EAEV,OAAIV,GACOD,EAA2BS,EAAsBT,EAErDS,GA8GHD,CACIpW,EAAMwW,oBACNxW,EAAM6V,oBACND,EACA5V,EAAMqN,gCACNU,MAAAA,GAAiB,QAAVoB,EAAPpB,EAASG,gBAAQ,IAAAiB,OAAA,EAAjBA,EAAmBhB,kBAAmB,GAIxCsI,GAAuB1I,MAAAA,OAAO,EAAPA,EAAS2I,iBAAkBC,EAAAA,oBAAoBC,WAAapZ,EAASqZ,cAE5FC,EAAeC,EAAAA,iBAAiBC,kBAAkBb,QAClDxP,EAvHesQ,EACrBrB,EACAsB,EACAlX,EACAyW,EACArZ,EACA+Z,EACArD,KACoB,IAAAsD,EACpB,MAAMC,EAA+B,GAGrC,GADuE,aAAb,QAAzBD,EAAApX,EAAM8V,2BAAmB,IAAAsB,OAAA,EAAzBA,EAA2BhG,QAExD,OAGJ,GAAIpR,EAAMsX,sBAAwB5J,EAAAA,gBAAgBC,YAAY3N,EAAMsX,4BAC/B3Q,IAA7BmN,EAEA,OADAuD,EAAmB3E,KAAK1S,EAAMuX,gBACvBF,EAAmB/I,WAG9BtO,EAAMwX,eAAiBxX,EAAM6V,sBAAwBY,IACjDb,GAA4B,EAC5ByB,EAAmB3E,KAAK1S,EAAMuX,gBACvB3B,EAA2BsB,IACD,IAA7BtB,EACAyB,EAAmB3E,KAAK1S,EAAMyX,mBAE9BJ,EAAmB3E,KAAK1S,EAAM0X,qBAAqBC,QAAQ,YAAa/B,EAAyBtH,eAM7G,MAAMsJ,EAAiB5X,EAAM6X,gBAAgBC,uBACvCC,EAAsBH,MAAAA,OAAc,EAAdA,EAAgBI,QAAO3a,GAASA,EAAMgR,SAAW8I,IAC7E,QAA4BxQ,IAAxBoR,EACA,IAAK,MAAME,KAAKF,EACRrK,EAAAA,gBAAgBC,YAAYsK,EAAEC,qBAC9BD,EAAEC,mBAAmBC,SAAQC,SACOzR,IAA5ByR,EAAWC,cACXhB,EAAmB3E,KAAK0F,EAAWC,iBAOvD,OAAI3K,EAAAA,gBAAgBC,YAAY0J,GACrBA,EAAmBiB,KAAK,UADnC,GAuEMrB,CACIrB,EACApY,EAASiF,SACTzC,EACAyW,EACAjZ,EACAA,EAAS6Q,OACTyF,GAGJyE,EApEoBC,EAAChE,EAA8DhX,IAAuB,KAChHgX,EAAuBhX,IAmEMgb,CAAsBhE,EAAwBhX,GAErEib,GAAU5Z,EAAAA,EAAAA,kBAAiB6Z,EAAAA,GAAeC,eAAgB3Y,EAAMjD,iBAAmBwX,EAAkB,IACrGqE,GAAa3Z,EAAAA,EAAAA,wBAAuBe,EAAMjD,iBAAmB0b,GAE7DI,EAAe/E,MAAAA,OAAwB,EAAxBA,EAA0BgF,gBACzCC,GAAgBjF,EAChB,gCAAuE,QAAvEE,EAAgCF,EAAyBkF,sBAAc,IAAAhF,OAAA,EAAvCA,EAAyC9R,qBACzEyE,EAGAsS,GAEF,YADAlL,MAAAA,GAAmB,QAAZkG,EAAPlG,EAASmL,kBAAU,IAAAjF,GAA8E,QAA9EA,EAAnBA,EAAqBnG,MAAKqL,GAHL,IAGkBA,EAAUC,4BAAgD,IAAAnF,GAAgB,QAAhBA,EAAjGA,EAAmGoF,sBAAc,IAAApF,OAAA,EAAjHA,EAAmHqF,OAGvH,IAAIC,GACJ,GAAIxL,GAGA,GAFAwL,IAAaC,EAAAA,EAAAA,mBAAkBzL,EAAS/N,EAAMa,QAAQU,mBAAeoF,GAEjEoB,EAAAA,GAASC,YAAayR,EAAAA,EAAAA,IAAiBzZ,EAAMa,QAAQU,cAAcC,gBAAiB,CAAC,IAADkY,GACpF,MAAMC,EAAU,IAAIC,IAAIL,GAAY9T,OAAOyL,SAAS2I,MACpDF,EAAQG,aAAaC,IAAI,YAAa,GAAqB,QAArBL,GAAGlc,EAASwc,iBAAS,IAAAN,GAAAA,GAAI,KAC/DH,GAAaI,EAAQE,WAGzBN,IAAaU,EAAAA,EAAAA,8BAA6Bzc,EAASoW,aAAe,GAAI5T,EAAMa,QAAQU,eAGxF,MAAO,CACHlD,KAAM,CACF0P,QAAAA,EACAvQ,SAAAA,GAEJ0c,WAAY1c,EAAS6Q,OACrBtN,MAAO+V,EACPqD,WACM1D,IAAwBzW,EAAM6V,sBAAsBrY,EAASiF,UAAa0T,MAAAA,EAAAA,EAAe,KACzFY,EAAAA,iBAAiBC,kBAAkBF,KAAkBrM,EAAAA,iBAAiBC,cAAcoM,GAC1FtZ,SACIzB,EAAAA,cAACqe,EAAAA,sBAAqB,CAClB/b,KAAM,CACFjB,SAAUI,EACVwR,UAAWhP,EAAMgP,UACjBjB,QAAAA,EACAsM,SAAUra,EAAMqa,UAEpBnD,gBAAiB1Z,EAASiF,SAC1B0T,YAAaA,EACbmE,eAAe7D,IAAwBzW,EAAM6V,sBAAsBD,GAA4B,EAC/FvB,aAAcA,EACdD,cAAeA,EACfjR,GAAIA,EACJmR,SAAUA,EACViF,WAAYA,GACZ1Y,QAASA,EACTpE,UAAWA,EACXc,IAAK,GAAGF,KAASkc,KACjBgB,UAAWld,EACXmd,oBAAqBzD,EAAAA,iBAAiBC,kBAAkBjJ,GACxD0M,iBAAkBza,EAAM0a,sCACxBC,gBAAiB5M,MAAAA,OAAO,EAAPA,EAAS6M,gBAC1B9D,aAAcA,EACd+D,0BAA2BhC,EAC3BiC,wBAAyB/B,GACzBgC,iBAA8C,WAAb,QAAf7G,EAAAlU,EAAMgP,iBAAS,IAAAkF,OAAA,EAAfA,EAAiB9C,QACnC4J,gCAAiChb,EAAMgb,gCACvCje,iBAAkBiD,EAAMjD,iBACxBmV,4BAA6BlS,EAAMkS,4BACnC+I,cAAsC,QAAzB9G,EAAEtT,EAAQ2U,QAAQ/T,eAAO,IAAA0S,OAAA,EAAvBA,EAAyB+G,WAGhDld,cAAe+P,EACTsC,EAAc,CACVG,sBAAAA,EACAxB,UAAWhP,EAAMgP,UACjBxR,SAAAA,EACAuQ,QAAAA,EACAwF,WAAYvT,EAAMgT,WAClBQ,kBAAmBxT,EAAMmb,aACzBjI,gBAAiBlT,EAAMkT,gBACvB3C,0BAA2BvQ,EAAMuQ,0BACjCqB,iBAAkB5R,EAAM4R,iBACxBf,gBAAiBkD,EACjBnB,uBAC4C,KAAxCpV,EAASc,aAAqCd,EAASc,aAAe0B,EAAM4S,uBAChFX,iCAAkCjS,EAAMiS,iCACxCC,4BAA6BlS,EAAMkS,4BACnCb,uBAAwBrR,EAAMqR,8BAElC1K,EACN9I,OACI9B,EAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CAACoB,UAAU,6BAA6BgC,QAASiZ,EAAsBlV,MAAOkR,GAAsBqE,GACtGrE,GAGT3W,cACI2X,GAAmBxH,IAAYkL,GAC3Bld,EAAAA,cAACqf,EAAAA,uBAAsB,CACnB9d,UAAU,iCACV0X,wBAAyBA,EACzBC,6BAA8BA,EAC9BpU,QAASA,EACTsC,GAAIA,EACJ5F,IAAKC,EAAS6Q,OACdiG,SAAUA,EACVoB,eAAgBA,EAChBlY,SAAUA,EACV6d,gBAAc,EACdC,mBAAmB,EACnBC,kBAAkB,EAClBC,mBAAmB,EACnBC,SAAS,SACTpd,KAAM,CACF+W,UAAAA,EACArH,QAAAA,GAEJ2N,UAAWjH,SAGf9N,EAERhJ,mBACI4X,GAAmBL,GAAkBnH,EACjChS,EAAAA,cAAC4f,EAAAA,4BAA2B,CACxBre,UAAWse,GAAAA,CAAW,uCAAwC3C,GAAwB,WAAa,IACnGvE,6BAA8BA,EAC9BC,gCAAiCA,EACjCC,kCAAmCA,EACnCC,mCAAoCA,EACpCC,wCAAyCA,EACzCC,uDAAwDA,EACxD1W,KAAM,CAAE0P,QAAAA,EAASP,SAAUhQ,EAASiF,UAAY,EAAGyS,eAAAA,EAAgBC,oBAAAA,GACnEtU,QAASA,EACTwa,gBAAc,EACdQ,8BAA+B5C,GAC/B6C,cAAe7C,GACf9V,GAAIA,EACJmR,SAAUA,EAEVkH,mBAAoBxb,EAAMa,QAAQ6I,IAAIC,OAAOoS,iBAAkB,EAC/D3H,mBAAuCzN,IAAxB3G,EAAMoU,cAA8BpU,EAAMoU,mBAAgBzN,EACzE2O,oCAAqCA,IAAuC,EAC5E0G,UAAWxe,EAASwc,iBAGxBrT,IAKHsV,EAAoBA,CAC7B/a,EACAoM,EACAtN,KAEA,MAAMkc,EAAoC,GA0C1C,OAxCAhb,EAAU/D,KAAI,CAACK,EAAUH,KACrB,IAAI0Q,EAQA+F,EAJA/F,EAHA/N,EAAMqN,gCAGIyB,EAAAA,EAAAA,GAAkCtR,EAASyQ,UAAWX,EAAU9P,EAAS0R,YAAalP,EAAMgP,YAE5FJ,EAAAA,EAAAA,GAAsBpR,EAASyQ,UAAWX,GAKxD,MAAM6O,GAAeC,EAAAA,EAAAA,0BACjB5e,EACAwC,EAAMiS,iCACNjS,EAAMkS,4BACNlS,EAAM4S,wBAeV,IAAImB,EAbA/T,EAAMsX,sBAAwB5J,EAAAA,gBAAgBC,YAAY3N,EAAMsX,wBAChExD,EAA2B9T,EAAMsX,qBAAqBxJ,MAAKgI,IACJ,IAADuG,EAAAC,EAAAC,EAAlD,OAAKvc,EAAMwc,uBAAyBL,GAGgB,QAA5CE,EAAAvG,EAAoBC,gCAAwB,IAAAsG,OAAA,EAA5CA,EAA8CpO,aAAczQ,EAASyQ,YACjC,QAApCqO,EAAAxG,EAAoB2G,wBAAgB,IAAAH,OAAA,EAApCA,EAAsCI,kBAAsC,QAAzBH,EAAK/e,EAAS0R,mBAAW,IAAAqN,OAAA,EAApBA,EAAsBG,eAG/E5G,EAAoBC,yBAAyB9H,YAAczQ,EAASyQ,mBAKhDtH,IAA/B3G,EAAM+T,sBAAsCrG,EAAAA,gBAAgBC,YAAY3N,EAAM+T,wBAC9EA,EAAuB/T,EAAM+T,qBAAqBjG,MAAK9K,GAC5CA,GAAkBA,EAAeiL,YAAczQ,EAASyQ,aAGvEiO,EAAWxJ,KAAKmB,EAAcrW,EAAUuQ,EAAS/N,EAAO3C,EAAOyW,EAA0BC,OAGtFmI,GC5bES,EAAsB3c,IAC/B,MAAM,SAAEsN,EAAQ,UAAEpM,EAAS,eAAEyC,GAAmB3D,EAChD,OAAO2D,EAtB4BiZ,EACnCpgB,EACA8Q,EACAtN,KAEA,MAAMkc,EAAsC,GAC5C,GAAI1f,GAAaA,EAAUkD,OAAS,EAAG,CAEnC,MAAMmd,EAAmBZ,EAAkBzf,EAAW8Q,EAAUtN,GACvC,OAArB6c,GACAX,EAAWxJ,KAAKmK,GAGxB,OAAOX,GAUDU,CAA+B1b,EAAWoM,EAAUtN,GA7D9B8c,EAC5B5b,EACAoM,EACAtN,KAEA,MAAMkc,EAAsC,GAC5C,IAAK5O,GAAgC,IAApBA,EAAS5N,OAEtB,OADAM,EAAMa,QAAQC,UAAUC,MAAM,iDACvB,KAGX,MAAMgc,EAAyBC,GAAsBC,GAAAA,CAAQD,GAAOza,GAAQA,EAAKqO,qBAE3EsM,GADsBF,EACa9b,EADS+b,GAAAA,CAAQD,GAAOza,GAAQA,EAAKjE,gBAAlD0e,IAAAA,EAE5B,MAAM/b,EAA6B,GAqBnC,OAlBAhF,OAAOkhB,QAAQD,GAAe/E,SAAQiF,IAAwC,IAAtCC,EAAcC,GAAoBF,EAEtEF,EAAcG,GAAgBN,EAAsBO,GACpDrc,EAAeyR,KAAKqK,EAAsBO,OAI9CrhB,OAAOshB,KAAKtc,GAAgBkX,SAAQ5a,IAChC,MAAMf,EAAYyE,EAAe1D,GACjCtB,OAAOshB,KAAK/gB,GAAW2b,SAAQ9a,IAC3B,MAAMD,EAAWZ,EAAUa,GACrBwf,EAAmBZ,EAAkB7e,EAAUkQ,EAAUtN,GACtC,OAArB6c,GACAX,EAAWxJ,KAAKmK,SAKrBX,GA2BDY,CAAwB5b,EAAWoM,EAAUtN,ICpDhDsL,eAAekS,EAAiBC,GACnC,MAAMC,EAAgC,GAatC,aAXMC,EAAAA,EAAAA,qCAAoC,IAAIC,EAAAA,iCAAiCH,EAAIjc,eAAe8N,aAAcmO,GAC3GtM,MAAK7N,IACEA,IACAoa,EAAcpa,iBAAmBA,MAGxCgO,OAAMvQ,IACH0c,EAAI3c,UAAU+c,UAAU9c,GACjB,MAGR2c,ukBCqFX,IAAMI,EAAN,cAAmB/hB,IAAAA,UAafgK,YAAmB/F,GACf+d,MAAM/d,GAPF,KAAAqN,gCAA0C,EAE1C,KAAA2Q,YAAsB,EAEb,KAAAC,iBAA2B,uBA0P3B,KAAAC,mBAAsBC,IACnC/X,KAAKgY,SAAS,CACVC,qBAAsBjY,KAAKkY,MAAMD,uBAOxB,KAAAE,0BAA4B,KACzCnY,KAAKoY,wBA+dQ,KAAAC,iBAAoBrK,GAE7BA,GAAiB,CACbsK,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GASL,KAAAC,0BAA6BC,IAC1C,GAAI/Y,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAAQ,CAC7B,MAAM5E,EAAQ,CACVqY,YAAa,CAACD,EAAiB9Q,OAAQC,aAE3ClI,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAChB0T,gBAAgBtY,GAChBoK,MAAK,KACF/K,KAAKkZ,eAAehO,OAAMvQ,IACtBqF,KAAKpG,MAAMc,UAAUyL,QAAQxL,GAC7BqF,KAAKpG,MAAMc,UAAU0L,MAAM,iCAGlC8E,OAAMvQ,IACHqF,KAAKpG,MAAMc,UAAUyL,QAAQxL,GAC7BqF,KAAKpG,MAAMc,UAAU0L,MAAM,mCAU1B,KAAAiI,6BAA+B,CAAC9I,EAAsCnO,KAC7D,UAAlBmO,EAAOyF,QAAsB5T,GAC7B4I,KAAK8Y,0BAA0B1hB,IAWtB,KAAA+hB,uBAAyB,CAACC,EAA4BhS,EAAkB+M,MACrFnN,EAAAA,EAAAA,IACIhH,KAAKiH,+BACLjH,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OACrBvF,KAAKpG,MAAMc,UACXsF,KAAKpG,MAAM3B,KAAKiP,SAAS3B,OACzB6T,EACAhS,GAEC2D,MAAMsO,IACH,GAAiC,aAA7BA,MAAAA,OAAgB,EAAhBA,EAAkBrO,QAMlB,OALAhL,KAAKkZ,eAAehO,OAAMvQ,IACtBqF,KAAKpG,MAAMc,UAAUyL,QAASxL,EAAgB4N,SAC9CvI,KAAKpG,MAAMc,UAAU0L,MAAM,+BAGxB,EAGX,IAAKuK,EAAAA,iBAAiBC,kBAAkByI,GAAmB,CAAC,IAADC,EAEvD,MAAMC,EAA0C,CAC5CtR,OAAQ0I,EAAAA,iBAAiBC,kBAAkBwI,EAAiBnR,QAAU,IAAMmR,EAAiBnR,OAC7F6J,mBAAoB,CAChB,CACIG,aAAc3K,EAAAA,gBAAgBC,YAAY8R,EAAiBG,mBACrDH,EAAiBG,kBAAkB,GAAGvH,aACtC,GACNwH,iBAA+C,QAA/BH,EAAED,EAAiBK,oBAAY,IAAAJ,OAAA,EAA7BA,EAA+BG,oBAK7DzZ,KAAKgY,SAAS,CACVvG,gBAAiB,CAAEC,uBAAwB,CAAC6H,MAIpD,OAAO,KAEVrO,OAAM,KACI,KAGR,GAMM,KAAAyO,0BAA4B,KACrC3Z,KAAKiH,iCAELyC,EAAAA,EAAAA,6BAA4B,IAAIC,EAAAA,wBAA2B3J,KAAKpG,MAAMa,QAAQU,eACzE4P,MAAK7F,SAAYlF,KAAKkZ,iBACtBhO,OAAOvQ,IACJqF,KAAKpG,MAAMc,UAAUyL,QAAQxL,EAAM4N,SACnCvI,KAAKpG,MAAMc,UAAU0L,MAAM,+BA/0BvCpG,KAAKrJ,kBAAmBijB,EAAAA,EAAAA,oBACpB5Z,KAAKpG,MAAMa,QAAQ2U,QAAQyK,kBAC3B7Z,KAAKpG,MAAMkgB,aACX9Z,KAAKpG,MAAMc,WAEfsF,KAAKxH,SAAUC,EAAAA,EAAAA,kBAAiB,QAASuH,KAAKrJ,iBAAkB,IAChEqJ,KAAK8X,mBAAqB9X,KAAK8X,mBAAmBiC,KAAK/Z,MACvDA,KAAKmY,0BAA4BnY,KAAKmY,0BAA0B4B,KAAK/Z,MAErEA,KAAKkY,MAAQ,CACTD,qBAAqB,EACrBX,cAAe,GACf0C,aAAa,EACbrM,0BAAsBpN,EACtBkR,gBAAiB,IAOlB,0BACHzR,KAAK4X,YAAa,EAClB,MAAM,OACFrU,EACA9I,SAAS,cAAEU,IACX6E,KAAKpG,MAQ4B,IAADqgB,GANpCja,KAAKiH,qCACMjH,KAAKka,2CAA+Cla,KAAKma,iCAChEna,KAAKiH,sCACCjH,KAAKkZ,eAGX3V,EAAO6W,2BACHpa,KAAK4X,YAAyC,QAA/BqC,EAAIja,KAAKpG,MAAM3B,KAAKqF,KAAKiI,cAAM,IAAA0U,GAA3BA,EAA6B3c,KAAK+c,WACrDra,KAAKgY,SAAS,CAAEV,oBAAqBF,EAAiBjc,MAG1Dmf,EAAAA,EAAAA,KACI,SAAAC,EAAA,OAAiC,QAAjCA,EAAMva,KAAKpG,MAAM3B,KAAKqF,KAAKiI,cAAM,IAAAgV,OAAA,EAA3BA,EAA6Bjd,KAAK+c,aACxCnV,UACQlF,KAAK4X,YACL5X,KAAKgY,SAAS,CAAEV,oBAAqBF,EAAiBjc,UAKtEmf,EAAAA,EAAAA,KACI,SAAAE,EAAA,OAAiC,QAAjCA,EAAMxa,KAAKpG,MAAM3B,KAAKqF,KAAKiI,cAAM,IAAAiV,OAAA,EAA3BA,EAA6Bld,KAAK+c,aACxCnV,UACI,GAAIlF,KAAK4X,WAAY,CACjB,MAAMjX,EAAQ,IAAIsI,EAAAA,qCAAqC9N,EAAcC,eAAe8N,aACpFlJ,KAAKgY,SAAS,CAAErK,2BAA4BpE,EAAiC5I,EAAOxF,SAS7Fsf,uBACHza,KAAK4X,YAAa,EASf8C,sBAAsBC,EAAkCC,GAC3D,OAAI5a,KAAKkY,QAAU0C,GAAa5a,KAAKpG,MAAM3B,OAAS0iB,EAAU1iB,KAO3D4iB,SAAM,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MACIjjB,MACIqF,MAAQiI,OAAQjI,GAChB4J,UAAY3B,OAAQ2B,IAExBzM,SACI2U,SACIC,MAAM,gBAAEF,EAAe,UAAEgM,KAEhC,UACD9kB,GACA2J,KAAKpG,MAEHwhB,GAAmBC,EAAAA,EAAAA,IAAW,WAAYrb,KAAKpG,MAAMa,QAAQU,gBAAkB,GAC/EmgB,GAAoBD,EAAAA,EAAAA,IAAW,OAAQrb,KAAKpG,MAAMa,QAAQU,gBAAkB,GAC5EogB,EAAcvb,KAAKwb,eAAerM,EAAiBiM,EAAkBD,GAAa,IAClFM,EAAcne,GAAQA,EAAKA,KAAK+c,WAA4C,IAA/B/c,EAAKA,KAAK+c,UAAU/gB,OACjElD,EAAY4J,KAAK0b,gBACjB7kB,EAA0D,QAArCikB,EAAG9a,KAAKpG,MAAMa,QAAQ2U,QAAQ/T,eAAO,IAAAyf,OAAA,EAAlCA,EAAoCxf,sBAC5DqgB,GAAgCC,EAAAA,EAAAA,4BACd,QADwCb,EAC5Dzd,MAAAA,OAAI,EAAJA,EAAMA,KAAK+c,iBAAS,IAAAU,EAAAA,EAAI,GACmB,QADjBC,EAC1Bhb,KAAKpG,MAAM3B,KAAKiZ,qBAAqB3L,cAAM,IAAAyV,EAAAA,EAAI,GAC/Chb,KAAKpG,MAAMa,QAAQU,cACnB+L,MAAAA,EAAAA,EAAY,GACZrQ,GAGEkd,IACD4H,MAAAA,GAAAA,EAA+BE,WAC9BF,IAAkC3b,KAAKkY,MAAM8B,eAC9C5jB,GAAYA,EAAU0lB,MAAK1kB,GAAYA,EAAS2c,WAC/CgI,EAAsE,QAAtCd,EAAGjb,KAAKpG,MAAM3B,KAAK+jB,aAAazW,cAAM,IAAA0V,OAAA,EAAnCA,EAAqCvT,MAC1EsU,GAAsC,oEAAtBA,EAAazM,OAE3BhU,EAAwBwgB,MAAAA,OAAgC,EAAhCA,EAAkCE,WAE1D,aAAED,GAAiBhc,KAAKpG,MAAM3B,KAC9BikB,GACiB,QAAnBhB,EAAAc,EAAazW,cAAM,IAAA2V,GAA4E,QAA5EA,EAAnBA,EAAqBxT,MAAMvL,GAHQ,2DAGeA,EAAKoT,cAAwC,IAAA2L,OAAA,EAA/FA,EAAiGe,aAAa,EAC5GE,GAAmBC,EAAAA,EAAAA,IAAapc,KAAKpG,MAAMa,QAAQ2U,UACzDiN,EAAAA,EAAAA,mBAAkBF,GAClB,MAAMthB,EAAiByC,MAAAA,GAAAA,EAAMC,gBAAkBhC,EAAwByE,KAAKsc,oBAAsB,KAClGtc,KAAKxH,QAAQ+jB,cAAcC,MAAQ9jB,EAAAA,kBAAkB+jB,SACrD,MAAMC,GAA6B7jB,EAAAA,EAAAA,wBAAuBmH,KAAKrJ,iBAAkBqJ,KAAKxH,SACtFwH,KAAKxH,QAAQ+jB,cAAcC,MAAQ9jB,EAAAA,kBAAkBikB,cACrD,MAAMC,GAA4B/jB,EAAAA,EAAAA,wBAAuBmH,KAAKrJ,iBAAkBqJ,KAAKxH,SACrFwH,KAAKxH,QAAQ+jB,cAAcC,MAAQ9jB,EAAAA,kBAAkBmkB,eACrD,MAAMC,GAA2BjkB,EAAAA,EAAAA,wBAAuBmH,KAAKrJ,iBAAkBqJ,KAAKxH,SAGpF,GAAImjB,IAAkCA,EAA8BE,QAAS,CACzE,GAAItgB,GAA4C,OAAnBV,EACzB,IAAK,MAAMkiB,KAAiBliB,EACxBmF,KAAKgd,wCAAwCD,EAAepB,GAIpE3b,KAAKgd,wCAAwC5mB,EAAWulB,GAG5D,MAAMsB,EAAS1d,EAAAA,EAAA,GACRS,KAAKpG,OAAK,IACb1C,UAAWse,GAAAA,CAAW,WACtBvY,MAAOtH,IAAAA,cAAA,MAAIuB,UAAU,qBAAqBb,EAAU6mB,WACpD5f,KAAM0C,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAC3BpI,iBAAkB,CAAEjG,UAAW,uBAC/BmG,oBAAqB,CAAEnG,UAAWoG,MAAAA,GAAAA,EAAMC,eAAiB,8BAAgC,6BACzF5D,kBAAmB,CAAEzC,UAAWoG,MAAAA,GAAAA,EAAMC,eAAiB,6BAA+B,4BACtFzC,UAAW1E,EACXyE,eAAAA,EACAhB,UAAWmG,KAAKmd,gBAChBjgB,iBAAkB8C,KAAKod,iBACvB3iB,QAASuF,KAAKpG,MAAMa,QACpByT,SAAUlO,KAAKpG,MAAMsU,SACrBxT,UAAWsF,KAAKpG,MAAMc,UACtBqC,GAAIiD,KAAKpG,MAAMmD,GACfxB,sBAAAA,EACA8hB,2BAA4BhnB,EAAUgnB,2BACtCjgB,oBAAqBkK,EAAAA,gBAAgBC,YAAYjK,MAAAA,OAAI,EAAJA,EAAMA,KAAK+c,WACxD/c,MAAAA,GAAAA,EAAMC,eACF5H,IAAAA,cAAA,MAAIuB,UAAU,gCAAgCb,EAAUinB,qBAExD3nB,IAAAA,cAAA,MAAIuB,UAAU,8BAA8Bb,EAAUknB,mBAE1D,KACJ9f,sBAAuBuC,KAAKwd,4BAC5BhgB,wBAAyBwC,KAAKyd,8BAC9B9f,2BAA6B8d,EAUzB,KATA9lB,IAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACH4nB,SAAU3J,EACV7c,UAAU,yBACVuc,KAAM8H,EACNte,MAAO5G,EAAUsnB,qBACbjB,GAEHrmB,EAAUsnB,qBAGnB/f,sBACK6d,GAAgBtM,IAAmBnP,KAAKpG,MAAM2J,OAAOqa,wBAUlD,KATAjoB,IAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACH4nB,SAAU3J,EACV7c,UAAU,8BACVuc,KAAM2H,EACNne,MAAO5G,EAAUwnB,0BACbjB,GAEHvmB,EAAUwnB,0BAGvBC,sBAAwBrC,EAAgD,KAAlCzb,KAAKpG,MAAMmkB,MAAMC,eACvDC,8BAA+B,CAAE/mB,UAAW,8CAC5CX,qBACIZ,IAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACHoB,UAAU,gCACN4lB,EAAwB,CAC5BrJ,KAAM6H,EACNre,MAAO5G,EAAU6nB,4BAEhB7nB,EAAU6nB,2BAGnBrgB,6BACImC,KAAKme,6BAA+BjX,EAChCvR,IAAAA,cAACyoB,EAAAA,iCAAgC,CAC7B5P,kCAAmCxO,KAAKqe,2CAA2ChoB,GACnFoY,mCAAoCzO,KAAKse,0CAA0CjoB,GACnFkoB,yCAA0Cve,KAAKwe,kDAAkDnoB,GACjGsY,uDAAwD3O,KAAKye,gEACzDpoB,GAEJqoB,kCAAmCroB,EAAUqoB,kCAC7CC,yCAA0CtoB,EAAUsoB,yCACpDlkB,QAASuF,KAAKpG,MAAMa,QACpBsC,GAAIiD,KAAKpG,MAAMmD,GACfmR,SAAUlO,KAAKpG,MAAMsU,SACrBgB,oCAAqCgN,IAAoC,EACzEtG,UAAWuG,EACXlkB,KAAM,CACF6W,eAAgB9O,KAAKpG,MAAM3B,KAAK6W,eAAevJ,OAC/CnP,UAAW4J,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAAQjI,KAAK+c,UAC7CtL,oBAAqB/O,KAAKpG,MAAM3B,KAAK8W,oBAAoBxJ,UAGjE,KACRqZ,qCAAsC,KACtCtoB,cACI0J,KAAKpG,MAAMmkB,MAAMznB,eAAiB0J,KAAKpG,MAAMmkB,MAAMznB,cAAcgD,OAAS,EAAI0G,KAAKpG,MAAMmkB,MAAMznB,cAAc,GAAK,KACtH8X,uBAAwBpO,KAAK8Y,0BAC7BzK,6BAA8BrO,KAAKqO,6BACnC7X,iBAAkBb,IAAAA,cAACkpB,EAAAA,QAAO,CAAC3nB,UAAU,wCACrCT,kBAAmD,WAAhCuJ,KAAKpG,MAAM3B,KAAKqF,KAAK0N,OAAsBhL,KAAKpG,MAAMvD,UAAUyoB,wBAA0B,KAC7GpoB,eAAgBsJ,KAAKpG,MAAM3B,KAAKqF,KAAKiI,QAAUvF,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAAOwZ,QAC3ErhB,mBAAoBsC,KAAKgf,uBAAuB5oB,GAChDO,iBAAkBqJ,KAAKrJ,mBAG3B,OAAOqJ,KAAKpG,MAAMqlB,WAAWhC,GAwBzB7E,uBACJpY,KAAKgY,SAAS,CACVC,qBAAqB,IAQrBkG,4BAAyB,IAAAe,EAAAC,EAC7B,MAAM7hB,EAA2B,QAAvB4hB,EAAGlf,KAAKpG,MAAM3B,KAAKqF,YAAI,IAAA4hB,OAAA,EAApBA,EAAsB3Z,OACnC,OAAIoL,EAAAA,iBAAiBC,kBAAkBtT,KAASA,EAAKC,oBAKjD8V,EAAAA,EAAAA,IAAiBrT,KAAKpG,MAAMa,QAAQU,cAAcC,iBAClD4E,KAAKpG,MAAM3B,KAAK6W,eAAevJ,QAC/B+B,EAAAA,gBAAgBC,YAAqB,QAAV4X,EAAC7hB,EAAKA,YAAI,IAAA6hB,OAAA,EAATA,EAAW9E,YACvCra,KAAKpG,MAAM3B,KAAK8W,oBAAoBxJ,QAYpC6X,iBACJ,OACIpd,KAAKpG,MAAM2J,OAAO6W,yBC7YCxgB,CAAAA,IAC3B,MAAM,GACFmD,EAAE,mBACFqiB,EAAkB,WAClB1pB,EACAW,WAAW,kBAAEgpB,EAAiB,sBAAEC,GAAuB,mBACvDC,EAAkB,cAClBC,GACA5lB,EAEJ,IAAK0N,EAAAA,gBAAgBC,YAAY7R,GAC7B,OAGJ,MAAM+pB,EAAU,GAAG1iB,UACb7F,EAAY,sBAClB,MAAO,CACHnB,wBAAyB,CACrBmB,UAAW,uBAEflB,iBACIL,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,QAAMuB,UAAU,uBAChBvB,IAAAA,cAAA,gBAAQiE,EAAMvD,UAAUqpB,yBAGhCzpB,oBACIN,IAAAA,cAAA,KAAGuB,UAAU,2BAA2ByoB,SAAU,EAAG1mB,KAAK,OAAOC,QAASsmB,GACrE,IACAH,EAAiB,IAAG,KAG7BnpB,gBACIP,IAAAA,cAACiqB,EAAAA,MAAK,CAACC,OAAQT,EAAoBloB,UAAW,GAAGA,IAAa4oB,OAAQP,GAClE5pB,IAAAA,cAACoqB,EAAAA,YAAW,CAAC7oB,UAAW,GAAGA,oBAA6B4oB,OAAQP,GAC5D5pB,IAAAA,cAAA,MAAIoH,GAAI0iB,EAASvoB,UAAU,mCACtBooB,IAGT3pB,IAAAA,cAACqqB,EAAAA,UAAS,CAAC9oB,UAAW,GAAGA,mBACrBvB,IAAAA,cAAA,UACKD,EAAWqB,KAAIkpB,IAAa,IAAAC,EACzB,OACIvqB,IAAAA,cAAA,MAAIuB,UAAU,iCAAiCC,IAAK8oB,EAAWhY,QACtC,QAD4CiY,EAChED,EAAWE,iBAAS,IAAAD,OAAA,EAApBA,EAAsBE,UAAS,IAAG,UAMvDzqB,IAAAA,cAAC0qB,EAAAA,YAAW,CAACnpB,UAAW,GAAGA,yBD4V/BopB,CAAe,CACXvjB,GAAIiD,KAAK6X,iBACTuH,mBAAoBpf,KAAKkY,MAAMD,oBAC/BuH,cAAexf,KAAK8X,mBACpByH,mBAAoBvf,KAAKmY,0BACzBziB,WAAYsK,KAAKkY,MAAMZ,cAAcpa,iBACrC7G,UAAW,CACPqpB,uBAAwB1f,KAAKpG,MAAMvD,UAAUqpB,uBAC7CL,kBAAmBrf,KAAKpG,MAAMvD,UAAUgpB,kBACxCC,sBAAuBtf,KAAKpG,MAAMvD,UAAUipB,sBAC5CiB,8BAA+BvgB,KAAKpG,MAAMvD,UAAUkqB,iCAW5DvD,wCACJ5mB,EACAoqB,GAEA,MAAM,UAAEnqB,GAAc2J,KAAKpG,MAE3B,GACI0N,EAAAA,gBAAgBC,YAAYnR,KAC3BoqB,EAAkC3E,SACnCvU,EAAAA,gBAAgBC,YAAYiZ,EAAkCC,qBAE9D,IAAK,MAAMC,KAAsBF,EAAkCC,oBAAqB,CACpF,MAAMzpB,EAAWZ,MAAAA,OAAS,EAATA,EAAWsR,MAAKiZ,IAAO,IAAAC,EAAA,OAAgB,QAAZA,EAAAD,EAAQ1oB,YAAI,IAAA2oB,OAAA,EAAZA,EAAcxpB,SAASyQ,aAAc6Y,KAC7E1pB,IACAA,EAAS2D,MAAQtE,EAAUwqB,uBAC3B7pB,EAAS+c,UAAW,IAW5BiL,uBAAuB5oB,GAC3B,MAAM0qB,EACD1qB,GACGA,EACKW,KAAIK,IAAW,IAAA2pB,EAIZ,MAFmC,QAAbA,EAAA3pB,EAASa,YAAI,IAAA8oB,GAAS,QAATA,EAAbA,EAAepZ,eAAO,IAAAoZ,OAAA,EAAtBA,EAAwBzQ,iBAAkBC,EAAAA,oBAAoBC,UAE9DpZ,EAASuD,MAAO,CAAC,IAADqmB,EAClC,MAAMC,EACF7pB,EAASa,MAA6B,QAAzB+oB,EAAI5pB,EAASa,KAAK0P,eAAO,IAAAqZ,GAArBA,EAAuBzR,KAClC,GAAGnY,EAASa,KAAK0P,QAAQ4H,SAASnY,EAASuD,QAC3CvD,EAASuD,MAEnB,OACIhF,IAAAA,cAAA,OAAKwB,IAAK8pB,EAAW/pB,UAAU,mBAC1B+pB,GAKb,OAAO,QAEVrP,QAAQsP,KAAgCA,KACjD,GAEJ,MAAO,CACH3nB,QAAS,CACL4nB,IAAKC,EAAAA,MACLlqB,UAAW,YACX2oB,OAAQiB,EAAUxnB,OAAS,EAC3B+nB,MAAO,SACPC,WAAW,EACX,aAActhB,KAAKpG,MAAMvD,UAAUkrB,8BAEvC/nB,OACI7D,IAAAA,cAAA,OAAKuB,UAAU,oBAAmB,cAAa,QAC3CvB,IAAAA,cAAA,QAAMuB,UAAU,6BAChBvB,IAAAA,cAAA,YAAOqK,KAAKpG,MAAMvD,UAAUkrB,+BAGpCloB,OAAQynB,GAQRrD,8BACJ,MACIxlB,MACIqF,MAAQiI,OAAQjI,IACnB,UACD5C,EAAS,UACTrE,GACA2J,KAAKpG,MAET,OAAO0D,MAAAA,GAAAA,EAAMC,gBACPikB,EAAAA,EAAAA,GAAe,CACXC,gBAAiBprB,EAAUqrB,iBAC3BC,aAActrB,EAAUsrB,aACxBrkB,KAAMA,EAAKA,KACX7C,QAASuF,KAAKpG,MAAMa,QACpByT,SAAUlO,KAAKpG,MAAMsU,SACrBxT,UAAAA,EACAqC,GAAIiD,KAAKpG,MAAMmD,UAEnBwD,EAOFid,4BAAyB,IAAAoE,EAAAC,EAAAC,EAC7B,MACI7pB,MACIqF,MAAQiI,OAAQjI,GAAM,4BACtBwO,GACH,UACDpR,EAAS,UACTrE,GACA2J,KAAKpG,MAEHmoB,EAAuB/hB,KAAKpG,MAAMa,SAAWuF,KAAKpG,MAAMa,QAAQ2U,SAAWpP,KAAKpG,MAAMa,QAAQ2U,QAAQ/T,QAEtG2gB,EAAyB,QAAb4F,EAAG5hB,KAAKpG,aAAK,IAAAgoB,GAAM,QAANA,EAAVA,EAAY3pB,YAAI,IAAA2pB,OAAA,EAAhBA,EAAkB5F,aACjCgG,EAAoChG,MAAAA,GAAoB,QAAR6F,EAAZ7F,EAAczW,cAAM,IAAAsc,GAA2D,QAA3DA,EAApBA,EAAsBna,MAAKvL,GAF/B,oEAEuCA,EAAKoT,cAAuC,IAAAsS,OAAA,EAA/EA,EACpC5F,UAEAgG,GAA+G,KAAjD,QAArCH,EAAA9hB,KAAKpG,MAAMa,QAAQ2U,QAAQ9L,IAAIC,cAAM,IAAAue,OAAA,EAArCA,EAAuCI,4CAEtE,OAAOH,IAAwBza,EAAAA,gBAAgBC,YAAYjK,MAAAA,OAAI,EAAJA,EAAMA,KAAK+c,YAAe/c,MAAAA,GAAAA,EAAMC,oBAqBrFgD,GApBA4hB,EAAAA,EAAAA,GAAa,CACT7kB,KAAMA,EAAMA,KACZ8kB,cAAe/rB,EAAUgsB,oBACzBC,cAAejsB,EAAUksB,uBACzBC,iBAAkBnsB,EAAUosB,aAC5BC,SAAUrsB,EAAUssB,kBACpBlB,gBAAiBprB,EAAU8D,WAC3ByoB,oBAAqBvsB,EAAUusB,oBAC/BnoB,QAASuF,KAAKpG,MAAMa,QACpByT,SAAUlO,KAAKpG,MAAMsU,SACrBnR,GAAIiD,KAAKpG,MAAMmD,GACf8lB,mBAAoBxsB,EAAUysB,sBAC9BC,SAAU1sB,EAAU2sB,UACpBjB,qBAAAA,EACAC,kCAAAA,EACAlW,4BAA6BA,MAAAA,OAA2B,EAA3BA,EAA6BvG,OAC1D7K,UAAAA,EACAuoB,qBAAsB3lB,EAAMA,KAAK4lB,qBACjCC,iBAAkBlB,IASxB9E,gBACJ,MACIllB,MACIqF,MAAQiI,OAAQjI,IACnB,UACDjH,GACA2J,KAAKpG,MAET,OACI0D,GACI3H,IAAAA,cAACytB,EAAAA,mBAAkB,CACf9lB,KAAMA,EACN+lB,qBAAsBhtB,EAAUgtB,qBAChCC,qBAAsBjtB,EAAUitB,qBAChCC,yBAA0BltB,EAAUktB,yBACpCC,4BAA6BntB,EAAUmtB,4BACvCC,gBAAiB,IACjBpG,2BAA4BhnB,EAAUgnB,2BACtCqG,gBAAiBrtB,EAAUqtB,gBAC3BC,0BAA2BttB,EAAUstB,0BACrCC,8BAA+BvtB,EAAUutB,8BACzCC,iCAAkCxtB,EAAUwtB,iCAC5CC,4BAA6BztB,EAAU0tB,4BACvCtpB,QAASuF,KAAKpG,MAAMa,QACpBsC,GAAIiD,KAAKpG,MAAMmD,GACfmR,SAAUlO,KAAKpG,MAAMsU,SACrBjW,KAAM,GACNtB,iBAAkBqJ,KAAKrJ,mBAW/B0nB,2CAA2ChoB,GAC/C,MAAO,CACH2tB,yBAA0B3tB,EAAU2tB,yBAEpCC,wBAAyB5tB,EAAU4tB,wBACnCC,4BAA6B7tB,EAAU6tB,4BAEvCC,gCAAiC9tB,EAAU8tB,gCAC3CC,iCAAkC/tB,EAAU+tB,iCAC5CC,sCAAuChuB,EAAUguB,sCAEjDC,oBAAqBjuB,EAAUiuB,oBAC/BC,wBAAyBluB,EAAUkuB,wBACnCC,cAAenuB,EAAUmuB,eASzBC,iDAAiDpuB,GACrD,MAAO,CACHquB,4BAA6BruB,EAAUquB,4BACvCC,2BAA4BtuB,EAAUsuB,2BACtCC,0CAA2CvuB,EAAUuuB,0CACrDC,6CAA8CxuB,EAAUwuB,6CACxDC,0CAA2CzuB,EAAUyuB,0CACrDC,cAAe1uB,EAAU0uB,cACzBC,kBAAmB3uB,EAAU2uB,kBAC7BC,iBAAkB5uB,EAAU4uB,kBAS5BzG,kDAAkDnoB,GACtD,MAAO,CACHquB,4BAA6BruB,EAAUquB,4BACvCC,2BAA4BtuB,EAAUsuB,2BACtCO,4CAA6C7uB,EAAU6uB,4CACvDC,+CAAgD9uB,EAAU8uB,+CAC1DC,4CAA6C/uB,EAAU+uB,4CACvDC,+CAAgDhvB,EAAUgvB,+CAC1DC,2CAA4CjvB,EAAUivB,2CACtDC,qDAAsDlvB,EAAUkvB,sDAShE9G,gEACJpoB,GAEA,MAAO,CACHmvB,yBAA0BnvB,EAAUmvB,yBACpCC,8BAA+BpvB,EAAUovB,8BACzCC,yBAA0BrvB,EAAUqvB,yBACpCC,+BAAgCtvB,EAAUsvB,gCAS1CrH,0CAA0CjoB,GAC9C,MAAO,CACHuvB,yBAA0BvvB,EAAUwvB,0BACpCC,wBAAyBzvB,EAAU0vB,mBACnCC,2BAA4B3vB,EAAU2vB,2BACtCC,yBAA0B5vB,EAAU6vB,+BAEpCC,yBAA0B9vB,EAAU8vB,yBAEpCC,yBAA0B/vB,EAAUgwB,8BACpCC,+BAAgCjwB,EAAUkwB,0CAQ1C7K,gBAAa,IAAA8K,EAAAC,EAAAC,EACjB,MACIzuB,MACIqF,MAAQiI,OAAQjI,GAChB0R,WAAazJ,OAAQyJ,GACrBF,gBAAkBvJ,OAAQuJ,GAC1BC,qBAAuBxJ,OAAQwJ,IAEnCtU,SACI2U,SAAW/T,SAAS,uBAAEsrB,GAA2B,CAAEA,4BAAwBpmB,KAC9E,OACDgD,EAAM,UACN7I,EAAS,UACTrE,EAAS,QACT0H,GACAiC,KAAKpG,MAEHoU,EAAgBhO,KAAKqY,iBAAiB9U,EAAOyK,eAE7C+N,EAAsE,QAAtCyK,EAAGxmB,KAAKpG,MAAM3B,KAAK+jB,aAAazW,cAAM,IAAAihB,OAAA,EAAnCA,EAAqC9e,MAC1EsU,GAAsC,oEAAtBA,EAAazM,OAE3BhU,EAAwBwgB,MAAAA,OAAgC,EAAhCA,EAAkCE,UAE1DxK,EAAqDzR,KAAKkY,MAAMzG,gBACtE,IAAImV,EAA0B,GAC1B7oB,GAAWlI,OAAOshB,KAAKpZ,GAASzE,OAAS,GAAKyE,EAAQzH,eAAiByH,EAAQzH,cAAcgD,OAAS,IACtGstB,EAAkB7oB,EAAQzH,cAAc,GAAGyG,IAE/C,MACMmf,GACiC,QAAnCuK,EAAAzmB,KAAKpG,MAAM3B,KAAK+jB,aAAazW,cAAM,IAAAkhB,GAA4E,QAA5EA,EAAnCA,EAAqC/e,MAAMvL,GAFR,2DAE+BA,EAAKoT,cAAwC,IAAAkX,OAAA,EAA/GA,EAAiHxK,aACjH,EACJ,OAAO3U,EAAAA,gBAAgBC,YAAYjK,MAAAA,OAAI,EAAJA,EAAMA,KAAK+c,WHnPxBzgB,CAAAA,IAC1B,MAAM,SAAEsN,EAAQ,UAAEpM,GAAclB,EAChC,OAAOic,EAAkB/a,EAAWoM,EAAUtN,IGkPpCitB,CAAc,CACV/rB,UAAWwC,EAAMA,KAAK+c,UACtBjQ,sBAAuBwc,EACvBnV,gBAAAA,EACAvK,SAAUlH,KAAKpG,MAAM3B,KAAKiP,SAAS3B,OACnC2L,qBAAsBlR,KAAKpG,MAAM3B,KAAKiZ,qBAAqB3L,OAC3DuhB,uBAAwB9mB,KAAKpG,MAAM3B,KAAKwS,gBAAgBlF,OACxD0O,SAAkC,QAA1ByS,EAAE1mB,KAAKpG,MAAM3B,KAAKgc,gBAAQ,IAAAyS,OAAA,EAAxBA,EAA0BnhB,OACpCyI,cAAAA,EACAyB,oBAAqBzP,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAOwjB,mBAAoB,EACvE3W,qBAAqB4W,EAAAA,EAAAA,kCAAiChnB,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAO0jB,4BACpF7Q,sBAA8E,aAAvDpW,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAO2jB,qBACrDjZ,aAAcjO,KAAKpG,MAAMa,QAAQ2U,QAAQnB,aACzCxT,QAASuF,KAAKpG,MAAMa,QACpByT,SAAUlO,KAAKpG,MAAMsU,SACrBnR,GAAIiD,KAAKpG,MAAMmD,GACf8O,iCAAkCtQ,EAClClF,UAAW,CACP8wB,WAAY9wB,EAAU+wB,yBACtBC,YAAahxB,EAAUixB,0BACvBC,aAAclxB,EAAUmxB,kCACxBC,YAAapxB,EAAUqxB,0BACvBC,aAActxB,EAAUuxB,2BACxBC,sBAAuBxxB,EAAUyxB,oBACjCC,uBAAwB1xB,EAAU0xB,uBAClCC,yBAA0B3xB,EAAU2xB,yBACpCC,yBAA0B5xB,EAAU4xB,yBACpCC,mBAAoB7xB,EAAU6xB,mBAC9BlD,kBAAmB3uB,EAAU2uB,kBAC7BC,iBAAkB5uB,EAAU4uB,iBAC5BkD,oBAAqB9xB,EAAU+xB,gBAC/BC,0BAA2BhyB,EAAUgyB,0BACrCC,qBAAoB/oB,EAAA,GACblJ,IAGXqE,UAAAA,EACAkU,wBAAyBvY,EAAUuY,wBACnCC,6BAA8BxY,EAAUwY,6BACxCV,iBAAkB9X,EAAUkyB,qBAC5B3b,WAAYvW,EAAU8B,uBACtB4c,aAAc1e,EAAUgC,oBACxByU,gBAAiBzW,EAAUkC,uBAC3B4R,0BAA2BnK,KAAKpG,MAAM3B,KAAKkS,0BAA0B5E,OACrE4L,eAAgB9a,EAAUwqB,uBAC1BxP,kBAAmBhb,EAAUmyB,8BAC7BlX,qBAAsBjb,EAAUoyB,6BAChC7f,UAAW5I,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAChCiG,iBAAkBxL,KAAKpG,MAAM3B,KAAKuT,iBAAiBjG,OACnD6I,uBAAwBpO,KAAK8Y,0BAC7BzK,6BAA8BrO,KAAKqO,6BACnCiG,sCAAuCtU,KAAKmZ,uBAC5ClO,uBAAwBjL,KAAK2Z,0BAC7B3K,UAAAA,EACAC,oBAAqB5Y,EAAU4Y,oBAC/BzC,uBAAwBma,EACxBvV,cAAe7N,EAAOmlB,qBACtB9T,gCAAiCrR,EAAOqR,gCACxCje,iBAAkBqJ,KAAKrJ,iBACvBsQ,+BAAgCjH,KAAKiH,+BAErCuH,kCAAmCxO,KAAKqe,2CAA2ChoB,GACnFoY,mCAAoCzO,KAAKse,0CAA0CjoB,GACnFqY,wCAAyC1O,KAAKykB,iDAAiDpuB,GAC/FsY,uDAAwD3O,KAAKye,gEACzDpoB,GAGJiY,6BAA8BjY,EAAUiY,6BACxCC,gCAAiClY,EAAUkY,gCAC3Coa,0BAA2BtyB,EAAUsyB,0BACrCC,4BAA6BvyB,EAAUuyB,4BACvC9Z,eAAAA,EACAC,oBAAAA,EACAW,oBAAqB1P,KAAKpG,MAAM3B,KAAKiZ,qBACrChC,oCAAqCgN,IAAoC,IAE7E,KAUFV,eAAerM,EAA0BiM,EAA0BD,GACvE,GAAIhM,EACA,OAAOiM,EAGX,MAAMyN,GAAgBC,EAAAA,EAAAA,UAAS1N,GAC/B,IAAI2N,EAAY3N,EAKhB,OAJIzZ,EAAAA,GAASC,YAAcinB,IACvBE,EAAY,GAAG1pB,OAAOyL,SAASke,SAAS5N,KAGrC,GAAGD,IAAaA,EAAU8N,SAAS,KAAa,IAAN,SAAeF,IAiI5D,qBACJ,IAAK/oB,KAAKiH,+BAEN,OADAjH,KAAKgY,SAAS,CAAEgC,aAAa,IACtB3T,EAAAA,YAAY3C,UAGvB,MACIzL,MAAM,KAAEqF,GAAM,UACd5C,EAAS,QACTD,GACAuF,KAAKpG,MAEH4f,QAAyE3T,EAAAA,EAAAA,IAAkBvI,EAAM5C,EAAWD,GAAS,GAE3H,GAAI+e,EAAmB,CACnB,MAAMqC,GAAWvU,EAAAA,gBAAgBC,YAAYiS,EAAkB9H,wBAC/D1R,KAAKgY,SAAS,CACVvG,gBAAiB+H,EACjBQ,YAAa6B,SAGjB7b,KAAKgY,SAAS,CAAEgC,aAAa,IAGjC,OAAO3T,EAAAA,YAAY3C,UAOf,0CAAuC,IAAAwlB,EAC3C,MAAMC,QAAwBnpB,KAAKpG,MAAM3B,KAAK+jB,aAE9C,IAAK,IAADoN,EAKA,MADK,QAFDA,EAAAD,EAAgBzhB,MACZsU,GAAsC,oEAAtBA,EAAazM,cAChC,IAAA6Z,OAAA,EAFDA,EAEGnN,aAAa,GAEhB,OAAO,EAEb,MAAOthB,GAGL,OAFAqF,KAAKpG,MAAMc,UAAUyL,QAAQxL,GAC7BqF,KAAKpG,MAAMc,UAAU0L,MAAM,iCACpB,EAOX,KAJ+B+iB,MAAAA,GAE9B,QAF6CD,EAAfC,EAAiBzhB,MAC5CsU,GAAsC,mDAAtBA,EAAazM,cAChC,IAAA2Z,OAAA,EAF8BA,EAE5BjN,WAwBI,CAAC,IAADoN,EACH,MAAMC,QAA0BtpB,KAAKpG,MAAM3B,KAAKqxB,kBAChD,QAA+C,QAAxCD,EAAEC,MAAAA,OAAiB,EAAjBA,EAAmBC,2BAAmB,IAAAF,GAAAA,GAxBvB,CAAC,IAADG,EACxB,MAAMC,EAA4D,QAArBD,EAAGxpB,KAAKpG,MAAMa,eAAO,IAAA+uB,GAAS,QAATA,EAAlBA,EAAoBpa,eAAO,IAAAoa,GAAK,QAALA,EAA3BA,EAA6BlmB,WAAG,IAAAkmB,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCAC5F,GAAgD,SAA5CF,EACA,OAAO,EAGX,GAAgD,QAA5CA,EACA,OAAO,EAGX,IACI,MAAMG,QAAqB5pB,KAAKpG,MAAM3B,KAAK8W,oBAC3C,QACM6a,IAC4C,QAA5CH,GAAqDG,EAAaC,OACnB,QAA5CJ,IAAsDG,EAAaC,OAE9E,MAAOlvB,GAGL,OAFAqF,KAAKpG,MAAMc,UAAUyL,QAAQxL,GAC7BqF,KAAKpG,MAAMc,UAAU0L,MAAM,gCACpB,IAQX,uCAAoC,IAAA0jB,EACxC,MAAMX,QAAwBnpB,KAAKpG,MAAM3B,KAAK+jB,aAExC+N,EAAoCZ,MAAAA,GAEzC,QAFwDW,EAAfX,EAAiBzhB,MACvDsU,GAAsC,wEAAtBA,EAAazM,cAChC,IAAAua,OAAA,EAFyCA,EAEvC7N,UAEH,OAAO8N,MAAAA,GAAAA,EAOHzN,oBAAiB,IAAA0N,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACrB,MACIpyB,MACIqF,MAAQiI,OAAQjI,GAChB0R,WAAazJ,OAAQyJ,GACrBF,gBAAkBvJ,OAAQuJ,GAC1BC,qBAAuBxJ,OAAQwJ,IAEnCtU,SACI2U,SAAW/T,SAAS,uBAAEsrB,GAA2B,CAAEA,4BAAwBpmB,KAC9E,OACDgD,EAAM,UACN7I,EAAS,UACTrE,EAAS,QACT0H,GACAiC,KAAKpG,MAEHoU,EAAgBhO,KAAKqY,iBAAiB9U,EAAOyK,eAC7CyD,EAAqDzR,KAAKkY,MAAMzG,gBACtE,IAAImV,EAA0B,GAC1B7oB,GAAWlI,OAAOshB,KAAKpZ,GAASzE,OAAS,GAAKyE,EAAQzH,eAAiByH,EAAQzH,cAAcgD,OAAS,IACtGstB,EAAkB7oB,EAAQzH,cAAc,GAAGyG,IAG/C,MAAMgf,EAAsE,QAAtCiO,EAAGhqB,KAAKpG,MAAM3B,KAAK+jB,aAAazW,cAAM,IAAAykB,OAAA,EAAnCA,EAAqCtiB,MAC1EsU,GAAsC,oEAAtBA,EAAazM,OAE3BhU,EAAwBwgB,MAAAA,OAAgC,EAAhCA,EAAkCE,WAC1D,aAAED,GAAiBhc,KAAKpG,MAAM3B,KAE9BikB,GACiB,QAAnB+N,EAAAjO,EAAazW,cAAM,IAAA0kB,GAA4E,QAA5EA,EAAnBA,EAAqBviB,MAAMvL,GAFQ,2DAEeA,EAAKoT,cAAwC,IAAA0a,OAAA,EAA/FA,EAAiGhO,aAAa,EAClH,OAAOjc,KAAKpG,MAAM3B,KAAKiP,WAClB5J,MAAAA,GAAAA,EAAMC,gBAAkByC,KAAKpG,MAAM3B,KAAKiP,SAAS3B,SAClDjI,GACAA,EAAKA,KAAK+c,WACV/c,EAAKA,KAAK+c,UAAU/gB,OAAS,GACc,QADb4wB,EAC9BlqB,KAAKpG,MAAM3B,KAAK6T,mCAA2B,IAAAoe,GAA3CA,EAA6C3kB,OAC3CgR,EAAmB,CACfzb,UAAWwC,EAAKA,KAAK+c,UACrBjQ,sBAAuBwc,EACvBnV,gBAAAA,EACAvK,SAAUlH,KAAKpG,MAAM3B,KAAKiP,SAAS3B,OACnC2L,qBAAsBlR,KAAKpG,MAAM3B,KAAKiZ,qBAAqB3L,OAC3DuhB,uBAAwB9mB,KAAKpG,MAAM3B,KAAKwS,gBAAgBlF,OACxD0O,SAAkC,QAA1BkW,EAAEnqB,KAAKpG,MAAM3B,KAAKgc,gBAAQ,IAAAkW,OAAA,EAAxBA,EAA0B5kB,OACpCyI,cAAAA,EACAyB,oBAAqBzP,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAOwjB,mBAAoB,EACvExpB,gBAAgBD,MAAAA,OAAI,EAAJA,EAAMC,kBAAkB,EACxC6S,qBAAqB4W,EAAAA,EAAAA,kCAAiChnB,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAO0jB,4BACpFhZ,aAAcjO,KAAKpG,MAAMa,QAAQ2U,QAAQnB,aACzCxT,QAASuF,KAAKpG,MAAMa,QACpBoR,iCAAkCtQ,EAClC2S,SAAUlO,KAAKpG,MAAMsU,SACrBnR,GAAIiD,KAAKpG,MAAMmD,GACf1G,UAAW,CACP8wB,WAAY9wB,EAAU+wB,yBACtBC,YAAahxB,EAAUixB,0BACvBC,aAAclxB,EAAUmxB,kCACxBC,YAAapxB,EAAUqxB,0BACvBC,aAActxB,EAAUuxB,2BACxBC,sBAAuBxxB,EAAUyxB,oBACjCC,uBAAwB1xB,EAAU0xB,uBAClCC,yBAA0B3xB,EAAU2xB,yBACpCC,yBAA0B5xB,EAAU4xB,yBACpCC,mBAAoB7xB,EAAU6xB,mBAC9BlD,kBAAmB3uB,EAAU2uB,kBAC7BC,iBAAkB5uB,EAAU4uB,iBAC5BkD,oBAAqB9xB,EAAU+xB,gBAC/BC,0BAA2BhyB,EAAUgyB,0BACrCC,qBAAoB/oB,EAAA,GACblJ,IAGXqE,UAAAA,EACAkU,wBAAyBvY,EAAUuY,wBACnCC,6BAA8BxY,EAAUwY,6BACxCV,iBAAkB9X,EAAUkyB,qBAC5B3b,WAAYvW,EAAU8B,uBACtB4c,aAAc1e,EAAUgC,oBACxByU,gBAAiBzW,EAAUkC,uBAC3B4R,0BAA2BnK,KAAKpG,MAAM3B,KAAKkS,0BAA0B5E,OACrE4L,eAAgB9a,EAAUwqB,uBAC1BxP,kBAAmBhb,EAAUmyB,8BAC7BlX,qBAAsBjb,EAAUoyB,6BAChC7f,UAAW5I,KAAKpG,MAAM3B,KAAKqF,KAAKiI,OAChCiG,iBAAkBxL,KAAKpG,MAAM3B,KAAKuT,iBAAiBjG,OACnD6I,uBAAwBpO,KAAK8Y,0BAC7BzK,6BAA8BrO,KAAKqO,6BACnCiG,sCAAuCtU,KAAKmZ,uBAC5ClO,uBAAwBjL,KAAK2Z,0BAC7B3K,UAAAA,EACAC,oBAAqB5Y,EAAU4Y,oBAC/BzC,uBAAwBma,EACxBvV,cAAe7N,EAAOmlB,qBACtB9T,gCAAiCrR,EAAOqR,gCACxCje,iBAAkBqJ,KAAKrJ,iBACvBsQ,+BAAgCjH,KAAKiH,+BAErCuH,kCAAmCxO,KAAKqe,2CAA2ChoB,GACnFoY,mCAAoCzO,KAAKse,0CAA0CjoB,GACnFqY,wCAAyC1O,KAAKykB,iDAAiDpuB,GAC/FsY,uDAAwD3O,KAAKye,gEACzDpoB,GAGJiY,6BAA8BjY,EAAUiY,6BACxCC,gCAAiClY,EAAUkY,gCAC3Coa,0BAA2BtyB,EAAUsyB,0BACrCC,4BAA6BvyB,EAAUuyB,4BACvC9Z,eAAAA,EACAC,oBAAAA,EACAjD,4BAAwE,QAA7Cse,EAAEpqB,KAAKpG,MAAM3B,KAAK6T,mCAA2B,IAAAse,OAAA,EAA3CA,EAA6C7kB,OAC1E6Q,sBAA8E,aAAvDpW,KAAKpG,MAAMa,QAAQ6I,IAAIC,OAAO2jB,qBACrDxX,oBAAqB1P,KAAKpG,MAAM3B,KAAKiZ,qBACrCvD,qBAAsB3N,KAAKkY,MAAMvK,uBAA8D,QAA1C0c,EAAIrqB,KAAKpG,MAAM3B,KAAKqyB,8BAAsB,IAAAD,OAAA,EAAtCA,EAAwC9kB,QACjG2J,oCAAqCgN,IAAoC,IAE7E,OA3jCRxE,GAAIxV,EAAAA,EAAAA,IAAA,CADTqoB,EAAAA,IACK7S,GA+jCN,mGEtqCA,MAAMvhB,EAAmBA,CACrBC,EACAo0B,EACArtB,EACA7G,EACAC,EACAC,EACAC,EACAC,IAEID,EACOd,EAAAA,cAAAA,EAAAA,SAAA,KAAGc,GAEVL,EACOA,EAAUW,KAAIC,IAAW,IAAAyzB,EAC5B,OACI90B,EAAAA,cAAA,OAAKuB,UAAU,sBAAsBC,IAAK,GAAsB,QAAtBszB,EAAGzzB,EAAS8c,kBAAU,IAAA2W,EAAAA,EAAI,MAAM9oB,EAAAA,GAASC,UAAUsG,cACxFlR,EAASI,SACTd,GAAiBU,EAASY,cACvBjC,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKkB,EAASY,cAAckB,gBAAiB9B,EAASY,cAAc8U,kBACzE,KACH1V,EAASO,mBACN5B,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,gCACXF,EAASS,OACTT,EAASQ,cACTR,EAASO,oBAGd5B,EAAAA,cAAAA,EAAAA,SAAA,KACKqB,EAASS,OACTT,EAASQ,mBAO3Bd,EACHf,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiBszB,GAC7Bj0B,GAGLZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGa,GA8HLk0B,EAA6BA,CAC/BhvB,EACAC,EACAgvB,EACAC,EACA5zB,EACAH,KACA,IAAA2F,EAEA,IAAIX,EAOJ,OALAA,GAHmE,QAA9CW,EAAwBxF,EAASY,qBAAa,IAAA4E,OAAA,EAAtBA,EAAwB7E,iBAGtC+D,EAAaC,EACvC0I,EAAAA,iBAAiBC,cAAczN,KAChCgF,EAAa7E,EAASiB,MAAQjB,EAASiB,KAAKb,SAASc,eAAiBrB,EAAwB8zB,EAAoB9uB,GAIlHlG,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKuB,UAAU,8CACXvB,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,uBACvEnG,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,iBAAkBD,GA/CvEgvB,EAAC7zB,EAA+B4zB,KAAyB,IAAAnvB,EAAAa,EAAAC,EACvF,MAAM5E,EAA6D,QAA9C8D,EAAwBzE,EAASY,qBAAa,IAAA6D,OAAA,EAAtBA,EAAwB9D,gBACrE,OACIhC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,oDACXS,EACGhC,EAAAA,cAAA,KAAGuB,UAAU,uDACc,QADuCoF,EAC7DtF,EAASY,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwBM,eACxBguB,EACsB,QADTruB,EACbvF,EAASY,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBxD,aAE7B,QAqCH8xB,CAA0B7zB,EAAU4zB,MA8FrD,EAxC4ChxB,IAAqB,IAAAkD,EAAAguB,EAhMtC1xB,EAwEA1D,EAwHsC,OAC7DC,EAAAA,cAAA,MAAAE,OAAAC,OAAA,CAAKoB,UAAW0C,EAAM1C,UAAW6F,GAAInD,EAAMmD,IAAQnD,EAAMoD,uBAAuBpD,IAC3EA,EAAMqD,QACK,QAAXH,EAAClD,EAAM0D,YAAI,IAAAR,GAAVA,EAAYS,iBAAkB3D,EAAMsD,mBA3HnBxH,EA2HyDkE,EAAMsD,iBAzHlFvH,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKJ,EAAWK,yBAChBL,EAAWM,iBACXN,EAAWO,oBACXP,EAAWQ,mBAsHnB0D,EAAM2B,sBA/Ce3B,CAAAA,GACtBA,EAAMiB,gBAAkByM,EAAAA,gBAAgBC,YAAY3N,EAAMiB,gBAEtDlF,EAAAA,cAAA,OAAKuB,UAAU,wBACV0C,EAAMiB,eAAe9D,KAAI+D,IAAY,IAAA+B,EAClC,OACIlH,EAAAA,cAAA,OAAKwB,IAAK2D,EAAU,GAAGgZ,WAAY5c,UAAU,+BACxCwzB,EACG9wB,EAAMvD,UAAUqF,WAChB9B,EAAMvD,UAAUsF,aAChB/B,EAAMvD,UAAUuF,kBAChBhC,EAAMvD,UAAUu0B,cAChB9vB,EAAU,GACwC,QADtC+B,EACZjD,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAwB,OAAA,EAAlDA,EAAoDvB,uBAEvDnF,EACG2E,EACAlB,EAAMvD,UAAUS,cAChB8C,EAAMuD,iBACNvD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,qBAQ3BkD,EAAMlD,eACTf,EAAAA,cAAA,OAAKuB,UAAU,uBACXvB,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiB0C,EAAMvD,UAAUS,eAC7C8C,EAAMrD,uBAIfZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGiE,EAAMpD,kBASLu0B,CAAqBnxB,GAErBjE,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMuD,kBACXhH,EACGyD,EAAMkB,UACNlB,EAAMvD,UAAUS,cAChB8C,EAAMuD,iBACNvD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,iBAIjBkD,EAAMwD,qBACHzH,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMyD,qBACXzD,EAAMwD,oBACI,QAAV0tB,EAAAlxB,EAAM0D,YAAI,IAAAwtB,GAAVA,EAAYvtB,eApMMnD,EAC/BC,EACAV,EACAC,IAEKS,EAKD1E,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLU,EAAoBC,SACpBD,EAAoBE,SACpBF,EAAoBG,QACpBH,EAAoBF,aARzBP,EAAMa,QAAQC,UAAUC,MAAM,uDACvB,MA8LOP,CAA2BR,EAAM4D,wBAAyB5D,EAAMD,kBAAmBC,GA3KxEH,EAC7BC,EACAC,EACAC,IAEKF,EAKD/D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLC,EAAMC,UACNH,EAAkBI,SAClBJ,EAAkBK,SAClBL,EAAkBM,YAClBN,EAAkBO,IAClBP,EAAkBQ,eAAiBR,EAAkBQ,eAAiB,KACtER,EAAkBS,aAXvBP,EAAMa,QAAQC,UAAUC,MAAM,qDACvB,MAqKOlB,CAAyBG,EAAM6D,sBAAuB7D,EAAMD,kBAAmBC,IAzN1ER,EA0NQQ,EAAM8D,qBAzNlB4J,EAAAA,gBAAgBC,YAAYnO,EAAUC,QAIrD1D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKsD,EAAUG,SACfH,EAAUI,OACVJ,EAAUC,QALR,KAyNEO,EAAM+D,2BACN/D,EAAMgE,sBACNhE,EAAMkkB,uBAAyBxW,EAAAA,gBAAgBC,YAAY3N,EAAMkkB,uBAC9DnoB,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMqkB,+BAAgCrkB,EAAMkkB,uBACtD,KACHlkB,EAAMrD,qBACNqD,EAAMiE,8BAGdjE,EAAMtD,yGClRf,MA0CMb,EAAqBC,GAEnBC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKJ,EAAWK,yBAChBL,EAAWM,iBACXN,EAAWO,oBACXP,EAAWQ,kBAMtBC,EAAmBA,CACrBC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAM,cAAEC,GAAkBT,EAE1B,OAAII,EACOd,EAAAA,cAAAA,EAAAA,SAAA,KAAGc,GAEVL,EACOA,EAAUW,KAAI,CAACC,EAAUC,IAExBtB,EAAAA,cAAA,OAAKuB,UAAU,sBAAsBC,IAAK,GAAGF,KAAS0K,EAAAA,GAASC,UAAUsG,cACpElR,EAASI,SACTR,EAAiB,KAAOS,EAAkBL,EAAUX,EAAWC,EAAeK,EAAkBE,GAChGD,EACGjB,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,sCACXI,EAAuBN,EAAUX,EAAWC,EAAeK,EAAkBE,GAC7EG,EAASO,mBACTP,EAASQ,cACTR,EAASS,QAEdT,EAASO,mBACT5B,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,gCACXF,EAASO,mBACTP,EAASQ,cACTR,EAASS,QAGd9B,EAAAA,cAAAA,EAAAA,SAAA,KACKqB,EAASQ,cACTR,EAASS,WAO3Bf,EACHf,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiBJ,GAC7BP,GAGLZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGa,IAULkB,EAAuBA,CAACV,EAA+BW,IAA6B,KACtFX,EAASY,eAAiBZ,EAASY,cAAcC,UAAUC,aAAaH,IAQtEI,EAAwBf,GAAkC,KAC5DA,EAASY,eAAiBZ,EAASY,cAAcC,UAAUC,aAAY,IAGrET,EAAoBA,CACtBL,EACAX,EACAC,EACAK,EACAE,KACoB,IAAAmB,EAEpB,IAAKhB,EAASY,gBAAkBtB,IAA8B,QAAb0B,EAAAhB,EAASiB,YAAI,IAAAD,OAAA,EAAbA,EAAeZ,SAASc,gBAAiBrB,EACtF,OAAO,KAGX,MAAM,uBACFsB,EAAsB,yBACtBC,EAAwB,oBACxBC,EAAmB,8BACnBC,EAA6B,uBAC7BC,GACAlC,EAEEsB,EAAkBX,EAASY,cAAcD,gBAEzCa,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS9B,EAAmB+B,EAAAA,kBAAkBC,eACzEC,GAAyBC,EAAAA,EAAAA,wBAAuBlC,EAAmB6B,GAEzE,OACI7C,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKkB,EAASY,cAAckB,gBAC7BnD,EAAAA,cAAA,OAAKuB,UAAU,+BACVS,EACGhC,EAAAA,cAAA,QAAMuB,UAAU,WAAWoB,GAE3B3C,EAAAA,cAAA,QAAMuB,UAAU,QAAQkB,IAG/BT,GACGhC,EAAAA,cAAA,OAAKuB,UAAU,oCACXvB,EAAAA,cAAA,QAAMuB,UAAU,0CAA0CF,EAASY,cAAcmB,aACjFpD,EAAAA,cAACqD,EAAAA,OAAM,CAACC,KAAK,OAAO/B,UAAU,mCAAmCgC,QAASnB,EAAqBf,IAC1FuB,IAIb5C,EAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACHoB,UAAU,4BACN0B,EAAsB,CAC1BM,QAASxB,EAAqBV,EAAUW,KAEvCA,EAAkBQ,EAAyBE,KAMtDc,EAAqBC,GAClBA,GAAyC,IAA5BA,EAAUC,OAAOC,OAI/B3D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAKsD,EAAUG,SACfH,EAAUI,OACVJ,EAAUC,QALR,KAUTI,EAA2BA,CAC7BC,EACAC,EACAC,IAEKF,EAID/D,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLC,EAAMC,UACNH,EAAkBI,SAClBJ,EAAkBK,SAClBL,EAAkBM,YAClBN,EAAkBO,IAClBP,EAAkBQ,eAAiBR,EAAkBQ,eAAiB,KACtER,EAAkBS,YAVhB,KAeTC,EAA6BA,CAC/BC,EACAV,EACAC,IAEKS,EAKD1E,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK6D,GACLU,EAAoBC,SACpBD,EAAoBE,SACpBF,EAAoBG,QACpBH,EAAoBF,aARzBP,EAAMa,QAAQC,UAAUC,MAAM,uDACvB,MAYTC,EAAwBA,CAAChB,EAAuBvD,IAC9CuD,EAAMiB,gBAAkBjB,EAAMiB,eAAevB,OAAS,EAElD3D,EAAAA,cAAA,OAAKuB,UAAU,wBACV0C,EAAMiB,eAAe9D,KAAI+D,IAAY,IAAAC,EAAAC,EAClC,OACIrF,EAAAA,cAAA,OAAKwB,IAAK2D,EAAU,GAAGgZ,WAAY5c,UAAU,+BACxC+D,EACGH,EAAU,GACVlB,EAAMtD,cACND,EACA6E,EAAYJ,GACsC,QAD5BC,EACtBnB,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAN,OAAA,EAAlDA,EAAoDO,uBAEvDnF,EACG2E,EACAlB,EAAMvD,UACNuD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,eACNkD,EAAMjD,iBACNiD,EAAM2B,sBAC4C,QADvBP,EAC3BpB,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAL,OAAA,EAAlDA,EAAoDM,4BAQzE1B,EAAMlD,eACTf,EAAAA,cAAA,OAAKuB,UAAU,uBACXvB,EAAAA,cAAA,OAAKuB,UAAU,wBACXvB,EAAAA,cAAA,KAAGuB,UAAU,iBAAiB0C,EAAMvD,UAAUS,eAC7C8C,EAAMrD,uBAIfZ,EAAAA,cAAAA,EAAAA,SAAA,KAAGiE,EAAMpD,kBAGXyE,EAA8BA,CAChCjE,EACAV,EACAD,EACAmF,EACA3E,KACA,IAAA4E,EACA,MAAM9D,EAAwC,QAAzB8D,EAAGzE,EAASY,qBAAa,IAAA6D,OAAA,EAAtBA,EAAwB9D,iBAC1C,WAAE+D,EAAU,aAAEC,EAAY,kBAAEC,EAAiB,uBAAEovB,GAA2B30B,EAChF,IAAIwF,EASJ,OAPAA,EAAalE,EAAkB+D,EAAaC,EACxC3E,EAASiB,MAAQjB,EAASiB,KAAKb,SAASqZ,cACxC5U,EAAamvB,EACL3mB,EAAAA,iBAAiBC,cAAczN,KACvCgF,EAAa7E,EAASiB,MAAQjB,EAASiB,KAAKb,SAASc,eAAiBrB,EAAwB+E,EAAoBC,GAIlHlG,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKuB,UAAU,8CACXvB,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,uBACvEnG,EAAAA,cAAA,KAAGuB,UAAW,8CAA8C2E,EAAWC,iBAAkBD,GACxFE,EAA2B/E,EAAUX,EAAWmF,MAM3DlE,EAAyBA,CAC3BN,EACAX,EACAC,EACAK,EACAE,KACoB,IAAAmF,EAEpB,IAAKhF,EAASY,gBAAkBtB,IAA8B,QAAb0F,EAAAhF,EAASiB,YAAI,IAAA+D,OAAA,EAAbA,EAAe5E,SAASc,gBAAiBrB,EACtF,OAAO,KAGX,MAAM,uBAAE0B,EAAsB,uBAAEJ,EAAsB,oBAAEE,GAAwBhC,EAE1EsB,EAAkBX,EAASY,cAAcD,gBAEzCa,GAAUC,EAAAA,EAAAA,kBAAiB,QAAS9B,EAAmB+B,EAAAA,kBAAkBC,eACzEC,GAAyBC,EAAAA,EAAAA,wBAAuBlC,EAAmB6B,GAEzE,OACI7C,EAAAA,cAAAA,EAAAA,SAAA,KACKgC,EACGhC,EAAAA,cAACqD,EAAAA,OAAM,CAAC9B,UAAU,qCAAqCgC,QAASnB,EAAqBf,GAAS,YAAY,UACrGuB,GAEL,KACJ5C,EAAAA,cAACqD,EAAAA,OAAMnD,OAAAC,OAAA,CACHoB,UAAU,sCACN0B,EAAsB,CAC1BM,QAASxB,EAAqBV,EAAUW,KAEvCA,EAAkBQ,EAAyBE,KAMtD6C,EAAelE,IACjB,IAAIiF,EAAY,EAIhB,OAHAA,EAAYjF,EAASkF,QAAO,CAACV,EAAOW,KAAQ,IAAAC,EACxC,OAAOZ,IAAkB,QAATY,EAAAD,EAAKlE,YAAI,IAAAmE,OAAA,EAATA,EAAWhF,SAASiF,WAAY,KACjD,GACIJ,GAGLF,EAA6BA,CAAC/E,EAA+BX,EAA2BmF,KAAiB,IAAAc,EAAAC,EAAAC,EAC3G,MAAM7E,EAAwC,QAAzB2E,EAAGtF,EAASY,qBAAa,IAAA0E,OAAA,EAAtBA,EAAwB3E,iBAC1C,UAAE8E,EAAS,WAAEC,GAAerG,EAC5BsG,EAASnB,EAAQ,EAAIkB,EAAaD,EACxC,OACI9G,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACC,EAAAA,KAAI,CAACsB,UAAU,oDACXS,EACGhC,EAAAA,cAAA,KAAGuB,UAAU,uDACc,QADuCqF,EAC7DvF,EAASY,qBAAa,IAAA2E,OAAA,EAAtBA,EAAwBK,eACxB,KACsB,QADlBJ,EACJxF,EAASY,qBAAa,IAAA4E,OAAA,EAAtBA,EAAwBzD,aAE7B,KACJpD,EAAAA,cAAA,KAAGuB,UAAU,uDAAqD,IAC5DsE,EACD,IACAmB,EAAM,QAO3B,EAvX4C/C,IAAqB,IAAAkD,EAAAD,EAAAiuB,EAAA,OAC7Dn1B,EAAAA,cAAA,MAAAE,OAAAC,OAAA,CAAKoB,UAAW0C,EAAM1C,UAAW6F,GAAInD,EAAMmD,IAAQnD,EAAMoD,uBAAuBpD,IAC3EA,EAAMqD,MACNrD,EAAMsD,kBAAoBzH,EAAkBmE,EAAMsD,kBACxC,QAAVJ,EAAAlD,EAAM0D,YAAI,IAAAR,GAAVA,EAAYS,gBAAkB3D,EAAM2B,sBACjCX,EAAsBhB,EAAOA,EAAMvD,WAEnCV,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMuD,kBACXhH,EACGyD,EAAMkB,UACNlB,EAAMvD,UACNuD,EAAMtD,cACNsD,EAAMrD,qBACNqD,EAAMpD,iBACNoD,EAAMnD,kBACNmD,EAAMlD,eACNkD,EAAMjD,iBACNiD,EAAM2B,sBAC4C,QADvBsB,EAC3BjD,EAAMa,QAAQU,cAAcC,eAAeC,eAAO,IAAAwB,OAAA,EAAlDA,EAAoDvB,wBAI/D1B,EAAMwD,qBACHzH,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMyD,qBACXzD,EAAMwD,oBACI,QAAV0tB,EAAAlxB,EAAM0D,YAAI,IAAAwtB,GAAVA,EAAYvtB,eACPnD,EAA2BR,EAAM4D,wBAAyB5D,EAAMD,kBAAmBC,GACnFH,EAAyBG,EAAM6D,sBAAuB7D,EAAMD,kBAAmBC,GACpFT,EAAkBS,EAAM8D,oBACxB9D,EAAM+D,2BACN/D,EAAMgE,sBACNhE,EAAMkkB,uBAAyBxW,EAAAA,gBAAgBC,YAAY3N,EAAMkkB,uBAC9DnoB,EAAAA,cAACC,EAAAA,KAAIC,OAAAC,OAAA,GAAK8D,EAAMqkB,+BAAgCrkB,EAAMkkB,uBACtD,KACHlkB,EAAMrD,qBACNqD,EAAMiE,8BAGdjE,EAAMtD,2pBCdf,MAAM20B,EAAyDjU,IAS1D,IAT2D,MAC5DkU,EAAK,MACLC,EAAK,QACL1wB,EAAO,GACPsC,EAAE,SACFmR,EAAQ,mBACR2U,EAAkB,SAClBE,EAAQ,SACRqI,GACHpU,EACG,OACIrhB,EAAAA,cAAA,KAAGuB,UAAW,6BAA6Bk0B,KACvCz1B,EAAAA,cAAA,QAAMuB,UAAU,8BAA8Bi0B,GAC7CD,GAAmB,IAAVA,EACNv1B,EAAAA,cAAC01B,EAAAA,eAAc,CACXpzB,KAAM,CACFizB,MAAO,CAAEI,wBAAyBJ,IAEtCnG,cAAehC,EACftoB,QAASA,EACTsC,GAAIA,EACJmR,SAAUA,EACVhX,UAAU,+BAGdvB,EAAAA,cAAA,QAAMuB,UAAU,8BAA8B2rB,KAMxD0I,EAA8BA,CAChC3xB,EACAsxB,EACAC,EACAC,IAGIz1B,EAAAA,cAACs1B,EAAkB,CACfC,MAAOA,EACPC,MAAOA,EACP1wB,QAASb,EAAMa,QACfsC,GAAInD,EAAMmD,GACVmR,SAAUtU,EAAMsU,SAChB2U,mBAAoBjpB,EAAMipB,mBAC1BE,SAAUnpB,EAAMmpB,SAChBroB,UAAWd,EAAMc,UACjB0wB,SAAUA,IAKhBI,EAA0BC,GACpBA,GAAiBA,EAAcC,eAAkB,EAYhDlK,EAAkB5nB,IAC3B,MAAM,YAAE+xB,EAAW,UAAEtR,GAAczgB,EAAM0D,KACnCsuB,EAAevR,MAAAA,OAAS,EAATA,EAAWzI,QAAO5a,GAAYA,EAASyZ,gBACtDqF,EAAmC,CACrCxb,SAAUsxB,MAAAA,OAAY,EAAZA,EAAc70B,KAAK80B,GAClBN,EACH3xB,EACAiyB,EAAYC,eACZC,EAAAA,EAAAA,QAAOnyB,EAAM+nB,aAAckK,EAAYG,WACvC,aAGR7xB,WAAYoxB,EAA4B3xB,EAAO+xB,EAAa/xB,EAAM6nB,gBAAiB,UAGvF,GAAI7nB,EAAM6xB,cAAe,CACrB,MAAMQ,EAzBiBC,EAACT,EAA+BnuB,KAC3D,MAGM6uB,GAAsBV,EAAcW,iBAAmB,IAAIlwB,QAHzCmwB,CAAC7wB,EAAejB,IAC7BiB,GAASjB,EAAS+xB,SAAW,IAEiD,GACnFC,GAAUjvB,EAAKquB,aAAe,GAAKH,EAAuBC,GAChE,OAAOe,KAAKC,IAAIN,EAAoBI,IAmBTL,CAAuBtyB,EAAM6xB,cAAe7xB,EAAM0D,MACnEouB,EAAgBF,EAAuB5xB,EAAM6xB,eAC7CiB,GAA4Bf,GAAe,GAAKM,EAAiBP,EAEnEA,EAAgB,IAChB5V,EAAWtb,QAAU+wB,EAA4B3xB,GAAQ8xB,EAAe9xB,EAAM+yB,cAAgB,iBAAkB,YAGhHV,EAAiB,IACjBnW,EAAWvb,SAAWgxB,EAClB3xB,GACCqyB,EACDryB,EAAMgzB,eAAiB,mBACvB,cAIR9W,EAAW3b,WAAaoxB,EAA2BhsB,EAAAA,EAAC,GAC3C3F,GAAK,IAAEmpB,cAAUxiB,IACtBmsB,EACA9yB,EAAM6nB,gBACN,SAIR,OAAO3L,uoBClFX,MAAM+W,EAAqD7V,IAUtD,IAVuD,MACxDkU,EAAK,MACLC,EAAK,QACL1wB,EAAO,GACPsC,EAAE,SACFmR,EAAQ,mBACR2U,EAAkB,SAClBE,EAAQ,SACRqI,EAAQ,cACRvW,GACHmC,EACG,OACIrhB,EAAAA,cAAA,KAAGuB,UAAW,2BAA2Bk0B,KACrCz1B,EAAAA,cAAA,QAAMuB,UAAU,4BAA4Bi0B,GAC3CD,GAAmB,IAAVA,EACNv1B,EAAAA,cAAC01B,EAAAA,eAAc,CACXpzB,KAAM,CACFizB,MAAO,CAAEI,wBAAyBJ,IAEtCnG,cAAehC,EACftoB,QAASA,EACTsC,GAAIA,EACJmR,SAAUA,EACVhX,UAAU,2BACV41B,aAAcjY,IAGlBlf,EAAAA,cAAA,QAAMuB,UAAU,4BAA4B2rB,KAMtDkK,EAA4B,SAC9BnzB,EACAsxB,EACAE,GAEiB,IADjBD,EAAAnqB,UAAA1H,OAAA,QAAAiH,IAAAS,UAAA,GAAAA,UAAA,GAAgB,GAEhB,OACIrL,EAAAA,cAACk3B,EAAgB,CACb3B,MAAOA,EACPC,MAAOA,EACP1wB,QAASb,EAAMa,QACfsC,GAAInD,EAAMmD,GACVmR,SAAUtU,EAAMsU,SAChB2U,mBAAoBjpB,EAAMipB,mBAC1BE,SAAUnpB,EAAMmpB,SAChBroB,UAAWd,EAAMc,UACjB0wB,SAAUA,EACVvW,cAAejb,EAAMmoB,qBAAqBjN,YAKhD0W,EAA0BC,GACpBA,GAAiBA,EAAcC,eAAkB,EAmEvDsB,EAAkB,SACpBpiB,GAIA,IAAAqiB,EAAA,IAHAC,EAAAlsB,UAAA1H,OAAA,QAAAiH,IAAAS,UAAA,IAAAA,UAAA,GACA8K,EAAgE9K,UAAA1H,OAAA,EAAA0H,UAAA,QAAAT,EAChE4sB,EAA2BnsB,UAAA1H,OAAA,EAAA0H,UAAA,QAAAT,EAE3B,OAAK2sB,EAGEphB,MAAAA,GAAoD,QAAzBmhB,EAA3BnhB,EAA6BS,+BAAuB,IAAA0gB,OAAA,EAApDA,EAAsDvlB,MAAK0lB,GAAMA,IAAOxiB,IAFpEuiB,GAMFhL,EAAgBvoB,IACzB,MAAM,eACFyzB,EAAc,yBAEdC,EAAwB,UACxBC,EAAS,wBAETC,EAAuB,eACvBC,EAAiB,EAAC,YAClB9B,EAAW,kBACX+B,GACA9zB,EAAM0D,MAEJ,QAAEqwB,EAAO,kBAAEC,EAAiB,kBAAEC,EAAiB,WAAEC,GA7E1BC,EAC7BzwB,EACAykB,EACAjW,EACAkW,EACAiB,EACAE,KAEA,MAAM3W,EAAyBuV,GAAwBA,EAAqB4E,uBACtE9vB,EAAwBkrB,GAAwBA,EAAqBzmB,sBAErE0yB,GADY1wB,EAAK+c,WAAa,IACJtjB,KAAIC,GAAYA,EAASkB,eACnD+1B,OAAmD1tB,IAA7BjD,EAAK4wB,oBAAoC5wB,EAAK4wB,oBAAsB,EAC1FC,OAAqD5tB,IAA9BjD,EAAK8wB,qBAAqC9wB,EAAK8wB,qBAAuB,EAOnG,IAAIN,EAAiC,EAuBrC,OArBIA,OADyBvtB,IAAzB0iB,QAA2D1iB,IAArB4iB,EACzB7lB,EAAK8wB,qBAELnL,IAAyBE,EAAmBgL,EAAuBF,EAAsB3wB,EAAK8wB,qBAmBxG,CACHT,QAlBYK,EAAclS,MAC1BlR,KAEyB,KAAjBA,IACCA,IACGoiB,EAAgBpiB,EAAcoX,EAAmClW,EAA6BU,IAC9F5B,IAAiB/T,MAa7B+2B,kBAVsBI,EAAclS,MAAKlR,KAAkBA,GAAgBA,IAAiB/T,IAW5Fg3B,kBAVsBG,EAAclS,MACpClR,KACMA,GACFA,IACIoiB,EAAgBpiB,EAAcoX,EAAmClW,EAA6BU,IAClG5B,IAAiB/T,IAMrBi3B,WAAAA,IA8BkEC,CAClEn0B,EAAM0D,KACN1D,EAAMmoB,qBACNnoB,EAAMkS,4BACNlS,EAAMooB,kCACNpoB,EAAMqpB,qBACNrpB,EAAMupB,kBAGV,IAAIrN,EAEJ,QAAmCvV,IAA/B3G,EAAMqpB,2BAAiE1iB,IAA3B3G,EAAMupB,iBAClDrN,EAAa,CACThc,SAAUizB,EAA0BnzB,EAAOyzB,EAAgB,YAAazzB,EAAMwoB,eAC9EnoB,IAAK8yB,EAA0BnzB,EAAOg0B,EAAoBL,OAAYhtB,EAAW,aAAc3G,EAAM8oB,UACrGvoB,WAAY4yB,EAA0BnzB,EAAO+xB,EAAa,QAAS/xB,EAAM6nB,iBACzEznB,YACK0zB,GAAqBX,EAA0BnzB,EAAO8zB,EAAmB,gBAAiB9zB,EAAM4oB,wBACjGjiB,OAEL,CACH,MAAM8tB,OAA0C9tB,IAAtBmtB,EAAkCA,EAAoB,EAC1EY,OAAsD/tB,IAA5BitB,EAAwCA,EAA0B,EAC5Fe,OAAqChuB,IAAdgtB,GAA2BA,EAAY,EAM9DiB,EACF50B,EAAMqpB,uBAAyBrpB,EAAMupB,iBAAmBkL,EAAoBC,EAA0BD,EAEpGI,EAAuB70B,EAAMqpB,sBAAwBrpB,EAAMupB,iBAAmBmK,EAA2BD,EAE/GvX,EAAa,CACThc,SAAUizB,EAA0BnzB,EAAO60B,EAAsB,YAAa70B,EAAMwoB,eACpFnoB,IAAKL,EAAMupB,iBACL4J,EACInzB,EACAg0B,GAAqBW,EAAuBhB,OAAYhtB,EACxD,aACA3G,EAAM8oB,UAEV,GACNvoB,WAAY4yB,EAA0BnzB,EAAO+xB,EAAa,QAAS/xB,EAAM6nB,iBACzEznB,YACK0zB,GAAqBX,EAA0BnzB,EAAO40B,EAAwB,gBAAiB50B,EAAM4oB,wBACtGjiB,GAMZ,GAHIotB,IACA7X,EAAW/b,SAAWgzB,EAA0BnzB,EAAOi0B,EAAoBC,OAAavtB,EAAW,WAAY3G,EAAM0oB,gBAErH1oB,EAAM6xB,cAAe,CACrB,MAAMQ,EA5IiBC,EAACT,EAA+BnuB,KAC3D,MAGM6uB,GAAsBV,EAAcW,iBAAmB,IAAIlwB,QAHzCmwB,CAAC7wB,EAAejB,IAC7BiB,GAASjB,EAAS+xB,SAAW,IAEiD,GACnFC,GAAUjvB,EAAKquB,aAAe,GAAKH,EAAuBC,GAChE,OAAOe,KAAKC,IAAIN,EAAoBI,IAsITL,CAAuBtyB,EAAM6xB,cAAe7xB,EAAM0D,MACnEouB,EAAgBF,EAAuB5xB,EAAM6xB,eAC7CiD,GAlJ0BjD,EAkJ6B7xB,EAAM6xB,gBAjJ9CA,EAAciD,uBAA0B,EAkJvDhC,GAA4Bf,GAAe,GAAKM,EAAiBP,EAAgBgD,EAEnFhD,EAAgB,IAChB5V,EAAWtb,QAAUuyB,EAA0BnzB,GAAQ8xB,EAAe,UAAW9xB,EAAM+yB,cAAgB,mBAGvGV,EAAiB,IACjBnW,EAAWvb,SAAWwyB,EAA0BnzB,GAAQqyB,EAAgB,YAAaryB,EAAMgzB,eAAiB,qBAG5G8B,EAAwB,IACxB5Y,EAAW6Y,gBAAkB5B,EACzBnzB,GACC80B,EACD,yBACA90B,EAAMg1B,sBAAwB,2BAItC9Y,EAAW3b,WAAa4yB,EAAyBxtB,EAAAA,EAAC,GACzC3F,GAAK,IAAEmpB,cAAUxiB,IACtBmsB,EACA,QACA9yB,EAAM6nB,iBA1KsBgK,IAAAA,EAkLpC,OAJIgC,EAAiB,IACjB3X,EAAW5b,eAAiB6yB,EAA0BnzB,GAAQ6zB,EAAgB,kBAAmB7zB,EAAMgpB,sBAGpG9M,yNC9RJ,MAAM+Y,EAAblvB,cACW,KAAAwJ,YAAc,IAAM,yBAEpB,KAAAE,mBAAqB,IAAM,yBAE3B,KAAAC,cAAgB,IAAiB,WAQrC,MAAMwlB,EAAyClpB,GAC3C,IAAIipB,EASR3pB,eAAe6pB,EAClBpuB,EACAlG,GASA,aAP+Bu0B,EAAAA,EAAAA,6BAC3B,CACIvoB,cAAehM,GAEnB,IAMD,MAAMw0B,GAAyBvpB,EAAAA,EAAAA,IAA2B,CAC7D3I,GAAI,sEACJsF,OAAoC0sB,EACpCpuB,MAAOmuB,IAGX,WChEAI,EAAOC,QAAUx5B,cCAjBu5B,EAAOC,QAAUC","sources":["webpack://Bayer.Commerce.Online/./src/themes/bayerscustomtheme/views/cart.view.tsx?c56d","webpack://Bayer.Commerce.Online/./lib/cart/module-registration.js?d21f","webpack://Bayer.Commerce.Online/./src/store-selector-state-manager/base-store-selector-state-manager.ts?281e","webpack://Bayer.Commerce.Online/./src/store-selector-state-manager/map-store-selector-state-manager.ts?2ae0","webpack://Bayer.Commerce.Online/./src/store-selector-state-manager/store-selector-state-manager-data-action.ts?bd3e","webpack://Bayer.Commerce.Online/./src/validate-cart.ts?cd50","webpack://Bayer.Commerce.Online/./src/Common/get-product.ts?0a21","webpack://Bayer.Commerce.Online/./src/modules/cart/actions/get-pickup-options-for-cartlines.ts?acad","webpack://Bayer.Commerce.Online/./src/modules/cart/components/cart-pick-up-in-store.tsx?dca8","webpack://Bayer.Commerce.Online/./src/modules/cart/components/cart-line-items.tsx?f6b2","webpack://Bayer.Commerce.Online/./src/modules/cart/components/cart-line-groups.tsx?f076","webpack://Bayer.Commerce.Online/./src/modules/cart/utils/get-promotion-in-cart.ts?4195","webpack://Bayer.Commerce.Online/./src/modules/cart/cart.tsx?d4e4","webpack://Bayer.Commerce.Online/./src/modules/cart/components/cart-line-items-promotion.tsx?80d9","webpack://Bayer.Commerce.Online/./src/modules/cart/cart.view.tsx?d8c2","webpack://Bayer.Commerce.Online/./src/modules/fabrikam/views/cart.view.tsx?ac8f","webpack://Bayer.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Bayer.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Bayer.Commerce.Online/../../src/search-org-unit-locations.ts?d18d","webpack://Bayer.Commerce.Online/external var \"React\"?0d3b","webpack://Bayer.Commerce.Online/external var \"ReactDOM\"?853b"],"sourcesContent":["/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\r\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\r\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\r\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\r\nimport {\r\n Button,\r\n getPayloadObject,\r\n getTelemetryAttributes,\r\n INodeProps,\r\n ITelemetryContent,\r\n Node,\r\n TelemetryConstant\r\n} from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nconst CartView: React.FC = (props: ICartViewProps) => (\r\n
\r\n {props.title}\r\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\r\n {props.multiplePickUpEnabled ? (\r\n _renderCartLinesGroup(props, props.resources)\r\n ) : (\r\n \r\n {_renderCartlines(\r\n props.cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.telemetryContent,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n \r\n )}\r\n {props.orderSummaryHeading && (\r\n \r\n {props.orderSummaryHeading}\r\n {props.cart?.hasInvoiceLine\r\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\r\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\r\n {_renderErrorBlock(props.OrderSummaryErrors)}\r\n {props.checkoutAsSignInUserButton}\r\n {props.checkoutAsGuestButton}\r\n {props.backToShoppingButton}\r\n {props.createTemplateFromCartButton}\r\n \r\n )}\r\n {props.storeSelector}\r\n
\r\n);\r\n\r\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\r\n return (\r\n <>\r\n \r\n {promotions.promotionMessage}\r\n {promotions.promotionSeeAllLink}\r\n {promotions.promotionDialog}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _renderCartlines = (\r\n cartLines: ICartlinesViewProps[] | undefined,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n backToShoppingButton: React.ReactNode,\r\n waitingComponent: React.ReactNode,\r\n cartLoadingStatus: string,\r\n cartDataResult: boolean,\r\n telemetryContent?: ITelemetryContent,\r\n mulitplePickUp?: boolean,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element[] | JSX.Element => {\r\n const { emptyCartText } = resources;\r\n\r\n if (cartLoadingStatus) {\r\n return <>{cartLoadingStatus};\r\n }\r\n if (cartLines) {\r\n return cartLines.map((cartLine, index) => {\r\n return (\r\n
\r\n {cartLine.cartline}\r\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {mulitplePickUp ? (\r\n \r\n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n ) : cartLine.addToOrderTemplate ? (\r\n \r\n {cartLine.addToOrderTemplate}\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n ) : (\r\n <>\r\n {cartLine.addToWishlist}\r\n {cartLine.remove}\r\n \r\n )}\r\n
\r\n );\r\n });\r\n }\r\n return cartDataResult ? (\r\n
\r\n

{emptyCartText}

\r\n {backToShoppingButton}\r\n
\r\n ) : (\r\n <>{waitingComponent}\r\n );\r\n};\r\n\r\n/**\r\n * On Toggle function.\r\n * @param cartLine -Cartline.\r\n * @param isBopisSelected -Boolean.\r\n * @returns Set state of button.\r\n */\r\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\r\n};\r\n\r\n/**\r\n * On change store function.\r\n * @param cartLine -CartLine items prop.\r\n * @returns Set state of button.\r\n */\r\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\r\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\r\n};\r\n\r\nconst _renderBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for BOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const {\r\n shipInsteadDisplayText,\r\n shipToAddressDisplayText,\r\n pickItUpDisplayText,\r\n pickUpAtStoreWithLocationText,\r\n changeStoreDisplayText\r\n } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n
\r\n {isBopisSelected ? (\r\n {pickUpAtStoreWithLocationText}\r\n ) : (\r\n {shipToAddressDisplayText}\r\n )}\r\n
\r\n {isBopisSelected && (\r\n
\r\n {cartLine.pickUpInStore.orgUnitName}\r\n \r\n
\r\n )}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n
\r\n );\r\n};\r\n\r\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\r\n if (!errorData || errorData.errors.length === 0) {\r\n return null;\r\n }\r\n return (\r\n \r\n {errorData.header}\r\n {errorData.errors}\r\n \r\n );\r\n};\r\n\r\nconst _renderOrderSummarylines = (\r\n orderSummaryLines: IOrderSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!orderSummaryLines) {\r\n return null;\r\n }\r\n return (\r\n \r\n {props.promoCode}\r\n {orderSummaryLines.subtotal}\r\n {orderSummaryLines.shipping}\r\n {orderSummaryLines.otherCharge}\r\n {orderSummaryLines.tax}\r\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\r\n {orderSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderInvoiceSummarylines = (\r\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\r\n OrderSummaryItems: INodeProps,\r\n props: ICartViewProps\r\n): JSX.Element | null => {\r\n if (!invoiceSummaryLines) {\r\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\r\n return null;\r\n }\r\n return (\r\n \r\n {invoiceSummaryLines.invoices}\r\n {invoiceSummaryLines.giftCard}\r\n {invoiceSummaryLines.loyalty}\r\n {invoiceSummaryLines.orderTotal}\r\n \r\n );\r\n};\r\n\r\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\r\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\r\n return (\r\n
\r\n {props.cartLinesGroup.map(cartlines => {\r\n return (\r\n
\r\n {_renderCartLinesGroupHeader(\r\n cartlines[0],\r\n props.storeSelector,\r\n resources,\r\n _countItems(cartlines),\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n {_renderCartlines(\r\n cartlines,\r\n props.resources,\r\n props.storeSelector,\r\n props.backToShoppingButton,\r\n props.waitingComponent,\r\n props.cartLoadingStatus,\r\n props.cartDataResult,\r\n props.telemetryContent,\r\n props.multiplePickUpEnabled,\r\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\r\n )}\r\n
\r\n );\r\n })}\r\n
\r\n );\r\n }\r\n return props.cartDataResult ? (\r\n
\r\n
\r\n

{props.resources.emptyCartText}

\r\n {props.backToShoppingButton}\r\n
\r\n
\r\n ) : (\r\n <>{props.waitingComponent}\r\n );\r\n};\r\nconst _renderCartLinesGroupHeader = (\r\n cartLine: ICartlinesViewProps,\r\n storeSelector: React.ReactNode | undefined,\r\n resources: ICartResources,\r\n count: number,\r\n emailDeliveryModeCode?: string\r\n) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { pickUpText, shippingText, emailshippingText } = resources;\r\n let groupTitle: string;\r\n\r\n groupTitle = isBopisSelected ? pickUpText : shippingText;\r\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\r\n\r\n return (\r\n <>\r\n
\r\n

\r\n

{groupTitle}

\r\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\r\n
\r\n \r\n );\r\n};\r\n\r\nconst _renderGroupBOPISBlock = (\r\n cartLine: ICartlinesViewProps,\r\n resources: ICartResources,\r\n storeSelector: React.ReactNode | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n emailDeliveryModeCode?: string\r\n): JSX.Element | null => {\r\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\r\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\r\n return null;\r\n }\r\n\r\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\r\n\r\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\r\n\r\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\r\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n <>\r\n {isBopisSelected ? (\r\n \r\n ) : null}\r\n \r\n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\r\n \r\n \r\n );\r\n};\r\n\r\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\r\n let countItem = 0;\r\n countItem = cartLine.reduce((count, item) => {\r\n return count + (item.data?.cartline.Quantity || 0);\r\n }, 0);\r\n return countItem;\r\n};\r\n\r\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\r\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\r\n const { itemLabel, itemsLabel } = resources;\r\n const suffix = count > 1 ? itemsLabel : itemLabel;\r\n return (\r\n <>\r\n \r\n {isBopisSelected ? (\r\n

\r\n {cartLine.pickUpInStore?.deliveryOption}\r\n {', '}\r\n {cartLine.pickUpInStore?.orgUnitName}\r\n

\r\n ) : null}\r\n

\r\n ({count} {suffix})\r\n

\r\n
\r\n \r\n );\r\n};\r\n\r\nexport default CartView;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['cart'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'cartConfiguration', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration', runOn: 0},{name:'cartLinesPickUpOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerBalances', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'orgUnitLocations', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations', runOn: 0},{name:'productAvailabilites', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines', runOn: 0},{name:'products', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart', runOn: 0},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlistItems', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 1}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'cart',\n p: 'cart',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/cart/dist/lib/modules/cart'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-availabilities-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer-balance');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-items-in-wishlist');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-pickup-options-for-cartlines');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-products-in-active-cart');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/search-org-unit-locations');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|bayerscustomtheme|views|cart'] = {\n c: () => require('partner/themes/bayerscustomtheme/views/cart.view.tsx'),\n cn: '__local__-__local__-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|cart|modules|cart|cart'] = {\n c: () => require('@msdyn365-commerce-modules/cart/dist/lib/modules/cart/cart.view.js'),\n cn: '@msdyn365-commerce-modules-cart-cart'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|cart'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/cart.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-cart'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365, { IActionContext } from '@msdyn365-commerce/core';\nimport { action, computed, observable } from 'mobx';\n\nimport {\n IListMapViewState,\n ILoadMapApiInput,\n IStoreInfo,\n IStoreSelectionStateContext,\n IStoreSelectorLocation,\n IStoreSelectorStateManager\n} from './i-store-selection-state-manager';\n\n/**\n * Abstract instance of IStoreSelectorStateManager with base implementation\n * of everything except the geoLocate function.\n */\nexport abstract class BaseStoreSelectorStateManager implements IStoreSelectorStateManager {\n @computed public get isDialogOpen(): Readonly {\n return this._context !== undefined;\n }\n\n @computed public get context(): Readonly {\n return this._context;\n }\n\n @observable public isMapApiLoaded?: boolean;\n\n @observable public selectedStoreLocationId?: string;\n\n @observable public preferredStore?: IStoreInfo;\n\n @observable public listMapViewState: IListMapViewState = { displayList: true, displayMap: false };\n\n @observable public isMapModuleLoaded?: boolean;\n\n @observable public lastInlineShownStoreInfo?: IStoreInfo;\n\n @observable protected _context?: IStoreSelectionStateContext;\n\n private readonly preferredStoreLocalStorageKey: string = '_msdyn365__preferredStore_';\n\n constructor() {\n this.isMapModuleLoaded = false;\n const value = this._readFromToCookie(this.preferredStoreLocalStorageKey);\n try {\n const storeInfo: IStoreInfo | undefined = value ? JSON.parse(value) : undefined;\n if (storeInfo) {\n this.preferredStore = storeInfo;\n }\n } catch {\n this.preferredStore = undefined;\n }\n }\n\n public abstract geoLocate(searchTerm: string, actionContext: IActionContext): Promise;\n\n public abstract loadMapApi(input: ILoadMapApiInput): Promise;\n\n @action\n public async toggleListMapViewState(): Promise {\n this.listMapViewState = {\n displayList: !this.listMapViewState.displayList,\n displayMap: !this.listMapViewState.displayMap\n };\n }\n\n @action\n public async setMapModuleLoaded(input: boolean): Promise {\n this.isMapModuleLoaded = input;\n }\n\n @action\n public async setOrgUnitStoreInformation(input: IStoreSelectionStateContext): Promise {\n this._context = input;\n }\n\n @action\n public async setSelectedStoreLocationId(storeId: string | undefined): Promise {\n this.selectedStoreLocationId = storeId;\n }\n\n @action\n public async setPreferredStoreLocation(\n storeId?: string,\n storeName?: string | undefined,\n writeToCookie: boolean = false,\n latitude?: number,\n longitude?: number\n ): Promise {\n const storeInfo: IStoreInfo = { StoreId: storeId, StoreName: storeName, Latitude: latitude, Longitude: longitude };\n this.preferredStore = storeInfo;\n if (writeToCookie) {\n this._writeToCookie(this.preferredStoreLocalStorageKey, JSON.stringify(storeInfo));\n }\n }\n\n @action\n public async setLastInlineStoreInfo(latitude?: number, longitude?: number): Promise {\n const storeInfo: IStoreInfo = { StoreId: '', StoreName: '', Latitude: latitude, Longitude: longitude };\n this.lastInlineShownStoreInfo = storeInfo;\n }\n\n @action\n public async clearPreferredStore(writeToCookie: boolean): Promise {\n this.preferredStore = undefined;\n if (writeToCookie) {\n this._removeCookie(this.preferredStoreLocalStorageKey);\n }\n }\n\n @action\n public async openDialog(input: IStoreSelectionStateContext): Promise {\n if (this._context && this._context.id === input.id) {\n throw new Error('Dialog is already opened');\n }\n\n this._context = input;\n }\n\n @action\n public async closeDialog(): Promise {\n this._context = undefined;\n }\n\n private _removeCookie(key: string): void {\n if (!key) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.removeItem(key);\n }\n }\n\n private _writeToCookie(key: string, value: string | undefined): void {\n if (!key || !value) {\n return;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n storage.setItem(key, value);\n }\n }\n\n private _readFromToCookie(key: string): string | undefined {\n if (!key) {\n return undefined;\n }\n if (MsDyn365.isBrowser) {\n const storage = window.localStorage;\n const cookieValue = storage.getItem(key);\n if (cookieValue) {\n return cookieValue;\n }\n }\n\n return undefined;\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { action } from 'mobx';\n\nimport { BaseStoreSelectorStateManager } from './base-store-selector-state-manager';\nimport { ILoadMapApiInput, IStoreSelectorLocation } from './i-store-selection-state-manager';\nimport { IMapWindow, MapLocationsResult } from './models/map-data';\n\ndeclare const window: IMapWindow;\n\n/**\n * Instance of IStoreSelectorStateManager manager that uses Map service\n * for geo location.\n */\nexport class MapStoreSelectorStateManager extends BaseStoreSelectorStateManager {\n private readonly SERVICE_ENDPOINT: string = 'https://dev.virtualearth.net/REST/v1/';\n\n private readonly MAP_API_ENDPOINT: string = 'https://www.bing.com/api/maps/mapcontrol?callback=mapAPIReady';\n\n @action\n public async geoLocate(searchTerm: string, actionContext: IActionContext): Promise {\n if (\n !searchTerm ||\n !actionContext.requestContext.channel ||\n !actionContext.requestContext.channel.BingMapsApiKey ||\n !actionContext.requestContext.channel.BingMapsEnabled\n ) {\n return undefined;\n }\n\n let searchContent: string = searchTerm;\n\n const jsonp = `mapSearchCallback_${crypto.getRandomValues(new Uint32Array(1))[0]}`;\n\n if (actionContext.requestContext.channel.ChannelCountryRegionISOCode) {\n searchContent = `${searchTerm.trim()} ${actionContext.requestContext.channel.ChannelCountryRegionISOCode}`;\n }\n\n const query = encodeURI(searchContent);\n const key = encodeURI(actionContext.requestContext.channel.BingMapsApiKey);\n\n const geolocationApiUrl =\n actionContext.requestContext.app &&\n actionContext.requestContext.app.config &&\n actionContext.requestContext.app.config.geolocationApiUrl;\n const requestUrl = `${\n geolocationApiUrl ? geolocationApiUrl : this.SERVICE_ENDPOINT\n }/Locations?query=${query}&key=${key}&jsonp=${jsonp}`;\n\n return new Promise(resolve => {\n const script = document.createElement('script');\n script.setAttribute('type', 'text/javascript');\n script.setAttribute('src', requestUrl);\n\n window[jsonp] = (data: MapLocationsResult) => {\n delete window[jsonp];\n script.remove();\n\n if (data && data.resourceSets && data.resourceSets.length > 0 && data.resourceSets[0].resources.length > 0) {\n resolve({\n latitude: data.resourceSets[0].resources[0].point.coordinates[0],\n longitude: data.resourceSets[0].resources[0].point.coordinates[1]\n });\n }\n\n resolve(undefined);\n };\n\n document.body.appendChild(script);\n });\n }\n\n @action\n public async loadMapApi(input: ILoadMapApiInput): Promise {\n if (StringExtensions.isNullOrEmpty(input.key)) {\n return Promise.resolve();\n }\n\n const isScriptAlreadyLoaded = !!document?.getElementById('msdyn_map-api-script');\n\n if (isScriptAlreadyLoaded) {\n if (window) {\n const currentWindowAPI = window.mapAPIReady;\n window.mapAPIReady = () => {\n if (currentWindowAPI) {\n currentWindowAPI();\n }\n this.isMapApiLoaded = true;\n };\n }\n // Prevents from loading multiple script into the body\n return Promise.resolve();\n }\n\n const url = `${this.MAP_API_ENDPOINT}${input.key ? `&key=${input.key}` : ''}${input.lang ? `&setLang=${input.lang}` : ''}${\n input.market ? `&setMkt=${input.market}` : ''\n }`;\n\n return new Promise((resolve, reject) => {\n const script = document?.createElement('script');\n script.type = 'text/javascript';\n script.async = true;\n script.defer = true;\n script.src = url;\n script.id = 'msdyn_map-api-script';\n if (window) {\n window.mapAPIReady = () => {\n this.isMapApiLoaded = true;\n resolve();\n };\n }\n script.addEventListener('error', (error: string | Event) => {\n reject(error);\n });\n document?.body?.appendChild(script);\n });\n }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { createObservableDataAction, IAction, IActionInput, IAny, ICreateActionContext, IGeneric } from '@msdyn365-commerce/core';\nimport { GenericInput, getGenericAction } from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IStoreSelectorStateManager } from './i-store-selection-state-manager';\nimport { MapStoreSelectorStateManager } from './map-store-selector-state-manager';\n\nexport function createStoreSelectorStateInput(result: IStoreSelectorStateManager): GenericInput {\n return new GenericInput('mapSSSM', result, 'IStoreSelectorStateManager');\n}\n\nconst createStoreSelectorStateInputInternal = (inputData: ICreateActionContext>): IActionInput => {\n return createStoreSelectorStateInput(new MapStoreSelectorStateManager());\n};\n\nexport const getGenericActionDataAction = createObservableDataAction({\n action: >getGenericAction,\n input: createStoreSelectorStateInputInternal\n});\n\nexport default getGenericActionDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Find the product in array of products considering product id.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @returns - The found product.\n */\nexport function getProductByProductId(productId: number | undefined, products?: SimpleProduct[]): SimpleProduct | undefined {\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId;\n });\n }\n\n return undefined;\n}\n\n/**\n * Find the product in array of products considering product id and product behavior's warehouse.\n * @param productId - The searched product id.\n * @param products - The array of products in which search is executed.\n * @param warehouseId - Warehouse id of cartLine.\n * @param cartState - The cart start in case cart line has no warehouse.\n * @returns - The found product.\n */\nexport function getProductByProductIdAndWarehouse(\n productId: number | undefined,\n products?: SimpleProduct[],\n warehouseId?: string,\n cartState?: ICartState\n): SimpleProduct | undefined {\n const targetWarehouseValue = warehouseId ?? cartState?.cart.WarehouseId;\n\n if (productId !== undefined && ArrayExtensions.hasElements(products)) {\n return products.find(product => {\n return productId === product.RecordId && product.Behavior?.InventoryLocationId === targetWarehouseValue;\n });\n }\n\n return undefined;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IActionContext,\n IActionInput,\n IAny,\n ICommerceApiSettings,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { getCartState } from '@msdyn365-commerce/global-state';\nimport { ProductDeliveryOptions, ProductsDataActions } from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n ActiveCartProductsInput,\n QueryResultSettingsProxy,\n buildCacheKey,\n getActiveCartProductsAction\n} from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Input class for pickup delivery options for items in cart.\n */\nexport class ProductPickUpOptionsForCartLineItems implements IActionInput {\n public readonly apiSettings: ICommerceApiSettings;\n\n public constructor(apiSettings: ICommerceApiSettings) {\n this.apiSettings = apiSettings;\n }\n\n /**\n * Get Cache Key.\n * @returns - Cache key string.\n */\n public getCacheKey = (): string => buildCacheKey('ActiveCartLineItemsPickUpOptions', this.apiSettings);\n\n /**\n * Get Cachetype Name.\n * @returns - Cache name string.\n */\n public getCacheObjectType = (): string => 'ActiveCartLineItemsPickUpOptions';\n\n /**\n * Get Cachetype.\n * @returns - CacheType enum.\n */\n public dataCacheType = (): CacheType => 'none';\n}\n\n/**\n * CreateInput method for the GetPickUpOptionCartLineItems method.\n * @param inputData - The input data passed to the createInput method.\n * @returns - Input for data action.\n */\nconst createInput = (inputData: ICreateActionContext>) => {\n return new ProductPickUpOptionsForCartLineItems(inputData.requestContext.apiSettings);\n};\n\n/**\n * The action method for the GetPickUpOptionCartLineItems data action.\n * @param input - The action input.\n * @param context - The action context.\n * @returns - Order Template object.\n */\nexport async function getPickUpOptionsForCartLineItems(\n input: ProductPickUpOptionsForCartLineItems,\n context: IActionContext\n): Promise {\n // If no input is provided fail out\n if (!input.apiSettings.channelId) {\n throw new Error('[getPickUpOptionsForCartLineItems]No valid Input was provided, failing');\n }\n const cartState = await getCartState(context);\n const cart = cartState.cart;\n const products = await getActiveCartProductsAction(new ActiveCartProductsInput(), context);\n const filterOption = 4;\n const response: ProductDeliveryOptions[] = [];\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- existing code.\n if (cart === undefined || !ArrayExtensions.hasElements(products)) {\n return Promise.resolve(response);\n }\n\n const pickupoptions = await ProductsDataActions.getDeliveryOptionsAsync(\n {\n callerContext: context,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context)\n },\n products.map(product => product.RecordId),\n {},\n filterOption\n );\n\n return pickupoptions;\n}\n\n/**\n * The GetPickupOptionCartLineItems Data Action\n * Returns pickup options.\n */\nexport const getPickUpOptionsForCartLineItemsDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/get-pickup-options-for-cartlines',\n action: getPickUpOptionsForCartLineItems as IAction,\n input: createInput\n});\n\nexport default getPickUpOptionsForCartLineItemsDataAction;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n CartLine,\n ChannelDeliveryOptionConfiguration,\n DeliveryOption,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IPickUpInStoreViewProps {\n callbacks: {\n toggleBopis(isBopisSelected: boolean): void;\n };\n defaultComponent?: React.ReactNode;\n orgUnitName?: string;\n isBopisSelected: boolean;\n ContainerProps: INodeProps;\n deliveryOption?: string;\n}\n\nexport interface IPickUpInStoreProps {\n cartline: CartLine;\n product: SimpleProduct;\n shipitText: string;\n pickUpInStoreText: string;\n changeStoreText: string;\n cartState: ICartState | undefined;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n orgUnitLocations?: OrgUnitLocation[] | undefined;\n deliveryOptions?: ProductDeliveryOptions;\n pickupDeliveryModeCode?: string;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n retailMulitplePickupFeatureState?: boolean;\n locationChangedHandler(): void;\n}\n\nexport const PickUpInStore = (props: IPickUpInStoreProps): IPickUpInStoreViewProps | undefined => {\n const _onLocationChangedCallback = async (\n orgUnitLocation: OrgUnitLocation,\n cartState: ICartState | undefined,\n cartline: CartLine,\n deliveryMode?: string\n ) => {\n if (!cartState) {\n return Promise.resolve();\n }\n return cartState\n .updateCartLinePickupLocation({ cartLineId: cartline.LineId!, location: orgUnitLocation, deliveryMode })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n };\n\n const _toggleBOPIS = (isBopisSelected: boolean) => {\n const { storeSelectorStateManager, product, cartline, cartState, storeSelectorModuleId } = props;\n\n if (isBopisSelected) {\n if (!storeSelectorStateManager) {\n return;\n }\n storeSelectorStateManager\n .openDialog({\n id: storeSelectorModuleId,\n product,\n alreadySelectedLocation: {\n OrgUnitNumber: cartline.FulfillmentStoreId\n },\n deliveryOptions: props.deliveryOptions,\n onLocationSelected: async (orgUnitLocation, deliveryMode: string | undefined) => {\n return _onLocationChangedCallback(orgUnitLocation, cartState, cartline, deliveryMode);\n }\n })\n .catch(error => {});\n } else {\n if (!cartState) {\n return;\n }\n cartline.DeliveryMode = '';\n cartline.FulfillmentStoreId = '';\n cartline.ShippingAddress = {};\n cartState\n .clearCartLinePickupLocation({ cartLineId: cartline.LineId! })\n .then(result => {\n if (result.status === 'SUCCESS') {\n props.locationChangedHandler();\n }\n })\n .catch(error => {});\n }\n };\n\n const _getOrgUnitName = (fulfillmentStoreId: string | undefined, orgUnitLocations: OrgUnitLocation[] | undefined) => {\n if (!orgUnitLocations || !fulfillmentStoreId || orgUnitLocations.length === 0) {\n return '';\n }\n\n const foundLocation = orgUnitLocations.find(orgUnitLocation => {\n return orgUnitLocation.OrgUnitNumber === fulfillmentStoreId;\n });\n\n if (foundLocation) {\n return foundLocation.OrgUnitName;\n }\n return fulfillmentStoreId;\n };\n\n const _renderShippingMethod = (\n cartLine: CartLine,\n shipItText: string,\n pickupInStoretext: string,\n changeStoreText: string,\n orgUnitLocations: OrgUnitLocation[] | undefined\n ): JSX.Element => {\n const orgUnitName = _getOrgUnitName(cartLine.FulfillmentStoreId, orgUnitLocations);\n const bopisSelected = !!cartLine.FulfillmentStoreId;\n\n const toggleBOPIS = (isBopisSelected: boolean) => {\n return () => {\n _toggleBOPIS(isBopisSelected);\n };\n };\n\n return (\n <>\n \n \n {cartLine.FulfillmentStoreId ? (\n
\n {orgUnitName}\n \n
\n ) : null}\n \n );\n };\n\n const _getDeliveryOption = (pickupStore: IPickUpInStoreProps, deliveryOptions: ProductDeliveryOptions) => {\n const delivery = deliveryOptions?.DeliveryOptions?.find(option => option.Code === pickupStore.pickupDeliveryModeCode);\n return delivery?.Description;\n };\n\n /**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\n const matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n ): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n };\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (!props.deliveryOptions || !props.deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n if (props.retailMulitplePickupFeatureState && props.channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(props.deliveryOptions.DeliveryOptions, props.channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !props.pickupDeliveryModeCode ||\n !props.deliveryOptions.DeliveryOptions.find(option => option.Code === props.pickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n return {\n callbacks: {\n toggleBopis: _toggleBOPIS\n },\n defaultComponent: _renderShippingMethod(\n props.cartline,\n props.shipitText,\n props.pickUpInStoreText,\n props.changeStoreText,\n props.orgUnitLocations\n ),\n orgUnitName: _getOrgUnitName(props.cartline.FulfillmentStoreId, props.orgUnitLocations),\n isBopisSelected: !!props.cartline.FulfillmentStoreId,\n deliveryOption: _getDeliveryOption(props, props.deliveryOptions),\n ContainerProps: {\n className: 'msc-cart-line__bopis-container'\n }\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n CartLineItemComponent,\n IAddToOrderTemplateDialogResources,\n ICartlineResourceString,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult\n} from '@msdyn365-commerce/components';\nimport MsDyn365, {\n IAny,\n ICoreContext,\n IGeneric,\n IGridSettings,\n IImageSettings,\n ITelemetry,\n TelemetryEvent,\n isChannelTypeB2B\n} from '@msdyn365-commerce/core';\nimport { ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResultsByLineId,\n ChannelDeliveryOptionConfiguration,\n CommerceList,\n Customer,\n OrgUnitLocation,\n ProductDeliveryOptions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { ProductCatalog, ProductDimensionType, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IStoreSelectorStateManager } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n ArrayExtensions,\n getInvoiceDetailsPageUrlSync,\n getProductUrlSync,\n IProductInventoryInformation,\n isCartLineItemPickUpType,\n ObjectExtensions,\n OrderTemplate,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { getProductByProductId, getProductByProductIdAndWarehouse } from '../../../Common/get-product';\nimport { IPickUpInStoreViewProps, PickUpInStore } from './cart-pick-up-in-store';\n\nexport interface ICartLineItemsProps {\n cartlines: CartLine[];\n cartlinesErrors: CartLineValidationResultsByLineId;\n cartState: ICartState | undefined;\n orgUnitLocations: OrgUnitLocation[] | undefined;\n resources: ICartlineResourceString;\n productAvailabilites: IProductInventoryInformation[] | undefined;\n products: SimpleProduct[] | undefined;\n productDeliveryOptions: ProductDeliveryOptions[] | undefined;\n pickupDeliveryModeCode?: string;\n catalogs?: ProductCatalog[];\n retailMulitplePickupFeatureState?: boolean;\n\n /* GridSettings for the product image in cartline */\n gridSettings: IGridSettings;\n\n /* ImageSettings for the product image in cartline */\n imageSettings: IImageSettings;\n id: string;\n typeName: string;\n context: ICoreContext>;\n telemetry: ITelemetry;\n removeButtonText: string;\n addToWishlistButtonText: string;\n removeFromWishlistButtonText: string;\n shipItText: string;\n pickitUpText: string;\n changeStoreText: string;\n outOfStockText: string;\n outOfRangeOneText: string;\n outOfRangeFormatText: string;\n storeSelectorStateManager: IStoreSelectorStateManager | undefined;\n isStockCheckEnabled: boolean;\n wishlists: CommerceList[] | undefined;\n defaultWishlistName: string;\n maxCartlineQuantity: number;\n includeErrors?: boolean;\n showShippingChargesForLineItems?: boolean;\n telemetryContent?: ITelemetryContent;\n isQuantityLimitsFeatureEnabled: boolean;\n hasInvoiceLine?: boolean;\n storeSelectorModuleId?: string;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n addToOrderTemplateDialogResources: IAddToOrderTemplateDialogResources;\n createOrderTemplateDialogResources: IOrderTemplateNameDialogResources;\n itemAddedToOrderTemplateDialogResources: IItemAddedToOrderTemplateDialogResources;\n duplicateItemsWhenAddingToOrderTemplateDialogResources: IDuplicateItemsWhenAddingToOrderTemplateDialogResources;\n\n addToOrderTemplateButtonText: string;\n addToOrderTemplateButtonTooltip: string;\n addToOrderTemplateMessage: string;\n addItemToOrderTemplateError: string;\n orderTemplates: OrderTemplate[] | undefined;\n customerInformation: Customer | undefined;\n shouldIgnoreWarehouse: boolean | undefined;\n productAvailability?: AsyncResult;\n productPickUpOptions?: ProductDeliveryOptions[] | undefined;\n isMultipleCatalogFeatureEnabledInHq: boolean;\n catalogId?: number;\n\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n updateCartLinesQuantitySuccessHandler(cartline: CartLine, quantity: number, lineIndex?: number): boolean;\n locationChangedHandler(): void;\n}\n\nexport interface ICartlinesViewProps {\n cartline: React.ReactNode;\n pickUpInStore?: IPickUpInStoreViewProps;\n remove: React.ReactNode;\n addToWishlist: React.ReactNode | undefined;\n addToOrderTemplate: React.ReactNode | undefined;\n\n error?: string;\n cartlineId?: string;\n hasError?: boolean;\n data?: {\n product?: SimpleProduct;\n cartline: CartLine;\n };\n}\n\nconst _getCartItemAvailableQuantity = (\n isStockCheckEnabled: boolean,\n productAvailability: IProductInventoryInformation | undefined\n): number => {\n if (\n !isStockCheckEnabled ||\n !productAvailability ||\n !productAvailability.ProductAvailableQuantity ||\n !productAvailability.IsProductAvailable ||\n !productAvailability.ProductAvailableQuantity.AvailableQuantity\n ) {\n return 0;\n }\n\n return productAvailability.ProductAvailableQuantity.AvailableQuantity;\n};\n\nconst _getCartItemMaxQuantity = (\n maxQuantityByConfig: number,\n isStockCheckEnabled: boolean,\n availableQuantityInStock: number,\n isQuantityLimitsFeatureEnabled: boolean,\n maxByQuantityLimitsFeature: number\n) => {\n if (isQuantityLimitsFeatureEnabled) {\n let maxByQuantityLimitsFeatureResult = maxByQuantityLimitsFeature;\n\n // If max by feature in not defined when feature is on then we suggest that there no max by feature\n // and consider available qty if stock check enabled and max from config in site settings.\n if (!maxByQuantityLimitsFeature) {\n maxByQuantityLimitsFeatureResult = maxQuantityByConfig || 10;\n }\n\n return isStockCheckEnabled\n ? maxByQuantityLimitsFeatureResult < availableQuantityInStock\n ? maxByQuantityLimitsFeatureResult\n : availableQuantityInStock\n : maxByQuantityLimitsFeatureResult;\n }\n if (isStockCheckEnabled) {\n return availableQuantityInStock < maxQuantityByConfig ? availableQuantityInStock : maxQuantityByConfig;\n }\n return maxQuantityByConfig;\n};\n\nconst _getErrorMessage = (\n availableQuantityInStock: number,\n currentQuantity: number,\n props: ICartLineItemsProps,\n shouldSkipStockCheck: boolean,\n cartLine: CartLine,\n lineId: string | undefined,\n foundProductAvailability?: IProductInventoryInformation\n): string | undefined => {\n const finalErrorMessages: string[] = [];\n\n const isLoadingDeliveryOptions = props.productAvailability?.status === 'LOADING';\n if (isLoadingDeliveryOptions) {\n return undefined;\n }\n // check availability passed as prop for each cartline\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n if (foundProductAvailability === undefined) {\n finalErrorMessages.push(props.outOfStockText);\n return finalErrorMessages.toString();\n }\n }\n if (props.includeErrors && props.isStockCheckEnabled && !shouldSkipStockCheck) {\n if (availableQuantityInStock <= 0) {\n finalErrorMessages.push(props.outOfStockText);\n } else if (availableQuantityInStock < currentQuantity) {\n if (availableQuantityInStock === 1) {\n finalErrorMessages.push(props.outOfRangeOneText);\n } else {\n finalErrorMessages.push(props.outOfRangeFormatText.replace('{numLeft}', availableQuantityInStock.toString()));\n }\n }\n }\n\n // Server-side validation\n const checkForErrors = props.cartlinesErrors.ValidationResultsPairs;\n const errorsFoundByLineId = checkForErrors?.filter(index => index.LineId === lineId);\n if (errorsFoundByLineId !== undefined) {\n for (const i of errorsFoundByLineId) {\n if (ArrayExtensions.hasElements(i.ValidationFailures)) {\n i.ValidationFailures.forEach(validation => {\n if (validation.ErrorContext !== undefined) {\n finalErrorMessages.push(validation.ErrorContext);\n }\n });\n }\n }\n }\n\n if (ArrayExtensions.hasElements(finalErrorMessages)) {\n return finalErrorMessages.join(' ');\n }\n\n return undefined;\n};\n\n/**\n * On Remove Click functionality.\n * @param removeItemClickHandler -Remove item click function.\n * @param cartline -CartLine.\n * @returns Remove change value.\n */\nconst onRemoveClickFunction = (removeItemClickHandler: (cartlineToRemove: CartLine) => void, cartline: CartLine) => () => {\n removeItemClickHandler(cartline);\n};\n\n// eslint-disable-next-line complexity -- Auto-suppressed.\nconst _assembleNode = (\n cartline: CartLine,\n product: SimpleProduct | undefined,\n props: ICartLineItemsProps,\n index: number,\n foundProductAvailability?: IProductInventoryInformation,\n productPickUpOptions?: ProductDeliveryOptions\n): ICartlinesViewProps => {\n const {\n imageSettings,\n gridSettings,\n id,\n typeName,\n context,\n resources,\n removeButtonText,\n removeItemClickHandler,\n moveToWishlistSuccessHandler,\n addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip,\n addToOrderTemplateDialogResources,\n createOrderTemplateDialogResources,\n itemAddedToOrderTemplateDialogResources,\n duplicateItemsWhenAddingToOrderTemplateDialogResources,\n addToWishlistButtonText,\n removeFromWishlistButtonText,\n orderTemplates,\n customerInformation,\n wishlists,\n defaultWishlistName,\n storeSelectorModuleId,\n isMultipleCatalogFeatureEnabledInHq\n } = props;\n\n const isAuthenticated = context.request.user.isAuthenticated;\n const nameOfWishlist = wishlists && wishlists.length > 0 && wishlists[0].Name ? wishlists[0].Name : defaultWishlistName;\n const availableQuantityInStock = _getCartItemAvailableQuantity(props.isStockCheckEnabled, foundProductAvailability);\n\n const maxQuantity =\n product &&\n _getCartItemMaxQuantity(\n props.maxCartlineQuantity,\n props.isStockCheckEnabled,\n availableQuantityInStock,\n props.isQuantityLimitsFeatureEnabled,\n product?.Behavior?.MaximumQuantity || 0\n );\n\n // Skip stock check if the cart line is a service item or an invoice line\n const shouldSkipStockCheck = product?.ItemTypeValue === ReleasedProductType.Service || !!cartline.IsInvoiceLine;\n\n const errorMessage = ObjectExtensions.isNullOrUndefined(maxQuantity)\n ? undefined\n : _getErrorMessage(\n availableQuantityInStock,\n cartline.Quantity!,\n props,\n shouldSkipStockCheck,\n cartline,\n cartline.LineId,\n foundProductAvailability\n );\n\n const onRemoveClickHandler = onRemoveClickFunction(removeItemClickHandler, cartline);\n\n const payload = getPayloadObject(TelemetryEvent.RemoveFromCart, props.telemetryContent!, removeButtonText, '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n\n const inventoryLbl = foundProductAvailability?.StockLevelLabel;\n const inventoryCode = foundProductAvailability\n ? `ms-cart-line__inventory-code-${foundProductAvailability.StockLevelCode?.toLowerCase()}`\n : undefined;\n const productDimension = 4;\n const customPriceDimensionType = productDimension as ProductDimensionType.Style;\n const isCustomPriceSelected =\n product?.Dimensions?.find(dimension => dimension.DimensionTypeValue === customPriceDimensionType)?.DimensionValue?.Value ===\n 'Custom';\n\n let productUrl: string | undefined;\n if (product) {\n productUrl = getProductUrlSync(product, props.context.actionContext, undefined);\n\n if (MsDyn365.isBrowser && isChannelTypeB2B(props.context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartline.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n } else {\n productUrl = getInvoiceDetailsPageUrlSync(cartline.Description || '', props.context.actionContext);\n }\n\n return {\n data: {\n product,\n cartline\n },\n cartlineId: cartline.LineId,\n error: errorMessage,\n hasError:\n (!shouldSkipStockCheck && props.isStockCheckEnabled ? cartline.Quantity! > (maxQuantity ?? 0) : false) ||\n (!ObjectExtensions.isNullOrUndefined(errorMessage) && !StringExtensions.isNullOrEmpty(errorMessage)),\n cartline: (\n \n ),\n pickUpInStore: product\n ? PickUpInStore({\n storeSelectorModuleId,\n cartState: props.cartState,\n cartline,\n product,\n shipitText: props.shipItText,\n pickUpInStoreText: props.pickitUpText,\n changeStoreText: props.changeStoreText,\n storeSelectorStateManager: props.storeSelectorStateManager,\n orgUnitLocations: props.orgUnitLocations,\n deliveryOptions: productPickUpOptions,\n pickupDeliveryModeCode:\n cartline.DeliveryMode !== (undefined || '') ? cartline.DeliveryMode : props.pickupDeliveryModeCode,\n retailMulitplePickupFeatureState: props.retailMulitplePickupFeatureState,\n channelDeliveryOptionConfig: props.channelDeliveryOptionConfig,\n locationChangedHandler: props.locationChangedHandler\n })\n : undefined,\n remove: (\n \n ),\n addToWishlist:\n isAuthenticated && product && !isCustomPriceSelected ? (\n \n ) : (\n undefined\n ),\n addToOrderTemplate:\n isAuthenticated && orderTemplates && product ? (\n \n ) : (\n undefined\n )\n };\n};\n\nexport const assembleCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[] | null => {\n const reactNodes: ICartlinesViewProps[] = [];\n\n cartlines.map((cartline, index) => {\n let product;\n if (props.isQuantityLimitsFeatureEnabled) {\n // When feature is enabled the same products could have different quantity limits in Behavior so we need\n // to check productId and WarehouseId for identification.\n product = getProductByProductIdAndWarehouse(cartline.ProductId, products, cartline.WarehouseId, props.cartState);\n } else {\n product = getProductByProductId(cartline.ProductId, products);\n }\n let foundProductAvailability;\n\n // check if cartlineitem is pickup item\n const isPickUpItem = isCartLineItemPickUpType(\n cartline,\n props.retailMulitplePickupFeatureState,\n props.channelDeliveryOptionConfig,\n props.pickupDeliveryModeCode\n );\n if (props.productAvailabilites && ArrayExtensions.hasElements(props.productAvailabilites)) {\n foundProductAvailability = props.productAvailabilites.find(productAvailability => {\n if (!props.shouldIgnoreWarehouse && isPickUpItem) {\n // check warehouse only if siteBuilder setting is not \"Based on aggregate for shipping and pickup warehouses\" and cartlineitem is pickupitem\n return (\n productAvailability.ProductAvailableQuantity?.ProductId === cartline.ProductId &&\n productAvailability.InventLocationId?.toUpperCase() === cartline.WarehouseId?.toUpperCase()\n );\n }\n return productAvailability.ProductAvailableQuantity.ProductId === cartline.ProductId;\n });\n }\n\n let productPickUpOptions;\n if (props.productPickUpOptions !== undefined && ArrayExtensions.hasElements(props.productPickUpOptions)) {\n productPickUpOptions = props.productPickUpOptions.find(deliveryOption => {\n return deliveryOption && deliveryOption.ProductId === cartline.ProductId;\n });\n }\n reactNodes.push(_assembleNode(cartline, product, props, index, foundProductAvailability, productPickUpOptions));\n });\n\n return reactNodes;\n};\n\n/**\n * CartLineItems component.\n * @param props\n */\nexport const CartLineItems = (props: ICartLineItemsProps) => {\n const { products, cartlines } = props;\n return assembleCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport groupBy from 'lodash/groupBy';\n\nimport { assembleCartlines, ICartLineItemsProps, ICartlinesViewProps } from './cart-line-items';\n\nconst _assembleGroupCartlines = (\n cartlines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (!products || products.length === 0) {\n props.context.telemetry.error('Products content is empty, module wont render');\n return null;\n }\n\n const getGroupByStorePickup = (items: CartLine[]) => groupBy(items, item => item.FulfillmentStoreId);\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.DeliveryMode);\n const groupDelivery = getGroupByDelivery(cartlines);\n const cartLinesGroup: CartLine[] = [];\n\n // 1) Group by store and pick up mode\n Object.entries(groupDelivery).forEach(([deliveryType, groupByDeliveryType]) => {\n // @ts-expect-error\n groupDelivery[deliveryType] = getGroupByStorePickup(groupByDeliveryType);\n cartLinesGroup.push(getGroupByStorePickup(groupByDeliveryType));\n });\n\n // 2) Create cartlines group\n Object.keys(cartLinesGroup).forEach(key => {\n const cartLines = cartLinesGroup[key];\n Object.keys(cartLines).forEach(index => {\n const cartLine = cartLines[index];\n const carLineViewProps = assembleCartlines(cartLine, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n });\n });\n\n return reactNodes;\n};\n\nconst _assembleGroupInvoiceCartlines = (\n cartLines: CartLine[],\n products: SimpleProduct[] | undefined,\n props: ICartLineItemsProps\n): ICartlinesViewProps[][] | null => {\n const reactNodes: ICartlinesViewProps[][] = [];\n if (cartLines && cartLines.length > 0) {\n // Create invoice cartLines group\n const carLineViewProps = assembleCartlines(cartLines, products, props);\n if (carLineViewProps !== null) {\n reactNodes.push(carLineViewProps);\n }\n }\n return reactNodes;\n};\n\n/**\n * CartLine Group component.\n * @param props\n */\nexport const CartLineGroupItems = (props: ICartLineItemsProps) => {\n const { products, cartlines, hasInvoiceLine } = props;\n return hasInvoiceLine\n ? _assembleGroupInvoiceCartlines(cartlines, products, props)\n : _assembleGroupCartlines(cartlines, products, props);\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { getPromotionOptionsForCartLineItems, PromotionOptionsForCartLineItems } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * IPromotionData entity interface.\n */\nexport interface IPromotionData {\n promotionOptions?: CartPromotionLine[];\n}\n\n/**\n * Calls the Retail API and returns a promotion data.\n * @param ctx\n */\nexport async function getPromotionData(ctx: IActionContext): Promise {\n const promotionData: IPromotionData = {};\n\n await getPromotionOptionsForCartLineItems(new PromotionOptionsForCartLineItems(ctx.requestContext.apiSettings), ctx)\n .then(promotionOptions => {\n if (promotionOptions) {\n promotionData.promotionOptions = promotionOptions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n return {};\n });\n\n return promotionData;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n ILinesAddedToOrderTemplateDialogResources,\n IOrderTemplateNameDialogResources,\n IWishlistActionSuccessResult,\n PromoCodeComponent,\n SaveCartToOrderTemplateComponent\n} from '@msdyn365-commerce/components';\nimport MsDyn365, { getCatalogId, getUrlSync, IImageSettings, isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { AsyncResult, CartLine, CartLineValidationResultsByLineId, LineValidationResult } from '@msdyn365-commerce/retail-proxy';\nimport { FeatureState, ProductDeliveryOptions, ReleasedProductType } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cartLineQuantityUpdatedAsync, validateCartAsync } from '@msdyn365-commerce-modules/cart-utilities';\nimport { IInvoiceSummaryLines, InvoiceSummary } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines, OrderSummary } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport {\n ActiveCartProductsInput,\n ArrayExtensions,\n getActiveCartProductsAction,\n ICartLineInventoryValidationResult,\n ObjectExtensions,\n validateCartLinesInventory,\n ProductPickUpOptionsForCartLineItems,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n INodeProps,\n IPayLoad,\n ITelemetryContent,\n TelemetryConstant,\n Waiting,\n updateMaxQuantityForCartLineItem,\n urlCheck\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { reaction } from 'mobx';\nimport { observer } from 'mobx-react';\nimport React from 'react';\nimport { getPickUpOptionsForCartLineItems } from './actions/get-pickup-options-for-cartlines';\n\nimport { ICartData } from './cart.data';\nimport { ICartProps, ICartResources } from './cart.props.autogenerated';\nimport { CartLineGroupItems } from './components/cart-line-groups';\nimport { CartLineItems, ICartlinesViewProps } from './components/cart-line-items';\nimport { cartPromotions, ICartLineItemViewProps } from './components/cart-line-items-promotion';\nimport { getPromotionData, IPromotionData } from './utils/get-promotion-in-cart';\n\n/**\n * Cart view props interface.\n */\nexport interface ICartViewProps extends ICartProps {\n className: string;\n title?: React.ReactNode;\n CartlinesWrapper: INodeProps;\n cartlines?: ICartlinesViewProps[];\n cartLinesGroup?: ICartlinesViewProps[][];\n cart: ICartState | undefined;\n orderSummaryHeading: React.ReactNode;\n orderSummaryLineitems?: IOrderSummaryLines;\n invoiceSummaryLineitems?: IInvoiceSummaryLines;\n OrderSummaryWrapper: INodeProps;\n OrderSummaryItems: INodeProps;\n OrderSummaryErrors?: IOrderSummaryErrors;\n checkoutAsGuestButton: React.ReactNode;\n checkoutAsSignInUserButton: React.ReactNode;\n storeSelector?: React.ReactNode;\n expressCheckoutButton?: React.ReactNode[];\n ExpressCheckoutSectionWrapper: INodeProps;\n backToShoppingButton: React.ReactNode;\n waitingComponent: React.ReactNode;\n promotionOptions?: ICartLineItemViewProps;\n promoCode: React.ReactNode;\n cartLoadingStatus: string;\n cartDataResult: boolean;\n multiplePickUpEnabled?: boolean;\n createTemplateFromCartButton: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n checkoutBlockedDueToUnavailableFunds?: React.ReactNode;\n removeItemClickHandler(cartlineToRemove: CartLine): void;\n moveToWishlistSuccessHandler(result: IWishlistActionSuccessResult, cartlineId: CartLine): void;\n}\n\n/**\n * Order summary errors interface.\n */\nexport interface IOrderSummaryErrors {\n Wrapper: INodeProps;\n header: React.ReactNode;\n errors: React.ReactNode[];\n}\n\n/**\n * Cart component state interface.\n */\ninterface ICartComponentState {\n showPromotionDialog: boolean;\n cartlinesErrors: CartLineValidationResultsByLineId;\n promotionData: IPromotionData;\n isCartValid: boolean;\n productPickUpOptions?: ProductDeliveryOptions[];\n}\n\n/**\n * Cart component.\n * @extends {React.PureComponent>}\n */\n@observer\nclass Cart extends React.Component> {\n public state: ICartComponentState;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n private isQuantityLimitsFeatureEnabled: boolean = false;\n\n private _isMounted: boolean = false;\n\n private readonly promotionPopupId: string = 'cart-promotion-popup';\n\n public constructor(props: ICartProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.payLoad = getPayloadObject('click', this.telemetryContent, '');\n this.promotionLinkClick = this.promotionLinkClick.bind(this);\n this.promotionCloseButtonclick = this.promotionCloseButtonclick.bind(this);\n\n this.state = {\n showPromotionDialog: false,\n promotionData: {},\n isCartValid: true,\n productPickUpOptions: undefined,\n cartlinesErrors: {}\n };\n }\n\n /**\n * Component did mount function.\n */\n public async componentDidMount(): Promise {\n this._isMounted = true;\n const {\n config,\n context: { actionContext }\n } = this.props;\n\n this.isQuantityLimitsFeatureEnabled =\n (await this.getOrderQuantityLimitsFeatureFlag()) || (await this._isChannelLimitsFeatureEnabled());\n if (this.isQuantityLimitsFeatureEnabled) {\n await this.validateCart();\n }\n\n if (config.showAvailablePromotions) {\n if (this._isMounted && this.props.data.cart.result?.cart.CartLines) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n this.setState({ promotionData: await getPromotionData(actionContext) });\n }\n }\n );\n }\n reaction(\n () => this.props.data.cart.result?.cart.CartLines,\n async () => {\n if (this._isMounted) {\n const input = new ProductPickUpOptionsForCartLineItems(actionContext.requestContext.apiSettings);\n this.setState({ productPickUpOptions: await getPickUpOptionsForCartLineItems(input, actionContext) });\n }\n }\n );\n }\n\n /**\n * Component will unmount function.\n */\n public componentWillUnmount(): void {\n this._isMounted = false;\n }\n\n /**\n * Should component update function.\n * @param nextProps - Next props.\n * @param nextState - Next state.\n * @returns True if component should update, false otherwise.\n */\n public shouldComponentUpdate(nextProps: ICartProps, nextState: ICartComponentState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n /* eslint-disable complexity -- Disabling complexity for render method */\n public render(): JSX.Element | null {\n const {\n data: {\n cart: { result: cart },\n products: { result: products }\n },\n context: {\n request: {\n user: { isAuthenticated, signInUrl }\n }\n },\n resources\n } = this.props;\n\n const guestCheckoutUrl = getUrlSync('checkout', this.props.context.actionContext) || '';\n const backToShoppingUrl = getUrlSync('home', this.props.context.actionContext) || '';\n const checkoutURL = this.getCheckoutURL(isAuthenticated, guestCheckoutUrl, signInUrl || '');\n const isCartEmpty = cart && cart.cart.CartLines && cart.cart.CartLines.length === 0;\n const cartLines = this._getCartLines();\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n const validInventoryAcrossCartLines = validateCartLinesInventory(\n cart?.cart.CartLines ?? [],\n this.props.data.productAvailabilites.result ?? [],\n this.props.context.actionContext,\n products ?? [],\n emailDeliveryModeCode\n );\n\n const hasError =\n !validInventoryAcrossCartLines?.isValid ||\n (!validInventoryAcrossCartLines && !this.state.isCartValid) ||\n (cartLines ? cartLines.some(cartline => cartline.hasError) : false);\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const currentCatalogId = getCatalogId(this.props.context.request);\n validateCatalogId(currentCatalogId);\n const cartLinesGroup = cart?.hasInvoiceLine || multiplePickUpEnabled ? this.getCartLinesGroup() : null;\n this.payLoad.contentAction.etext = TelemetryConstant.Checkout;\n const checkoutBySignInAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.GuestCheckout;\n const checkoutByGuestAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n this.payLoad.contentAction.etext = TelemetryConstant.BackToShopping;\n const backtoShoppingAttributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n\n // If there's inventory issues across multiple cart lines then update the error and display as part of the order summary\n if (validInventoryAcrossCartLines && !validInventoryAcrossCartLines.isValid) {\n if (multiplePickUpEnabled && cartLinesGroup !== null) {\n for (const cartLineGroup of cartLinesGroup) {\n this._updateCartLineErrorForInvalidInventory(cartLineGroup, validInventoryAcrossCartLines);\n }\n }\n\n this._updateCartLineErrorForInvalidInventory(cartLines, validInventoryAcrossCartLines);\n }\n\n const viewProps = {\n ...this.props,\n className: classnames('ms-cart'),\n title:

{resources.cartTitle}

,\n cart: this.props.data.cart.result,\n CartlinesWrapper: { className: 'msc-cartline-wraper' },\n OrderSummaryWrapper: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary-wrapper' : 'msc-order-summary-wrapper' },\n OrderSummaryItems: { className: cart?.hasInvoiceLine ? 'msc-invoice-summary__items' : 'msc-order-summary__items' },\n cartlines: cartLines,\n cartLinesGroup,\n promoCode: this._getPromoCode(),\n promotionOptions: this._getPromotions(),\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry: this.props.telemetry,\n id: this.props.id,\n multiplePickUpEnabled,\n removePromoAriaLabelFormat: resources.removePromoAriaLabelFormat,\n orderSummaryHeading: ArrayExtensions.hasElements(cart?.cart.CartLines) ? (\n cart?.hasInvoiceLine ? (\n

{resources.invoiceSummaryTitle}

\n ) : (\n

{resources.orderSummaryTitle}

\n )\n ) : null,\n orderSummaryLineitems: this._getOrderSummaryLineItems(),\n invoiceSummaryLineitems: this._getInvoiceSummaryLineItems(),\n checkoutAsSignInUserButton: !isCartEmpty ? (\n \n {resources.checkoutButtonTitle}\n \n ) : null,\n checkoutAsGuestButton:\n !isCartEmpty && !isAuthenticated && this.props.config.showGuestCheckoutButton ? (\n \n {resources.guestCheckoutButtonTitle}\n \n ) : null,\n expressCheckoutButton: !isCartEmpty ? this.props.slots.paymentExpress : null,\n ExpressCheckoutSectionWrapper: { className: 'msc-express-payment-container-in-cart-page' },\n backToShoppingButton: (\n \n {resources.backToShoppingButtonTitle}\n \n ),\n createTemplateFromCartButton:\n this._displayAddCartToTemplate() && products ? (\n \n ) : null,\n checkoutBlockedDueToUnavailableFunds: null,\n storeSelector:\n this.props.slots.storeSelector && this.props.slots.storeSelector.length > 0 ? this.props.slots.storeSelector[0] : null,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n waitingComponent: ,\n cartLoadingStatus: this.props.data.cart.status === 'FAILED' ? this.props.resources.cartLoadingErrorMessage : null,\n cartDataResult: this.props.data.cart.result && this.props.data.cart.result.isEmpty,\n OrderSummaryErrors: this._getOrderSummaryErrors(cartLines),\n telemetryContent: this.telemetryContent\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n /* eslint-enable complexity -- Disabling complexity for render method */\n\n /**\n * Promotion click event handler.\n * @param event - The mouse event.\n */\n private readonly promotionLinkClick = (event: React.MouseEvent) => {\n this.setState({\n showPromotionDialog: !this.state.showPromotionDialog\n });\n };\n\n /**\n * Promotion close button click.\n */\n private readonly promotionCloseButtonclick = () => {\n this._hidePromotionDialog();\n };\n\n /**\n * Hide promotion dialog.\n */\n private _hidePromotionDialog(): void {\n this.setState({\n showPromotionDialog: false\n });\n }\n\n /**\n * Display add to cart template.\n * @returns True if should display, false otherwise.\n */\n private _displayAddCartToTemplate(): boolean {\n const cart = this.props.data.cart?.result;\n if (ObjectExtensions.isNullOrUndefined(cart) || cart.hasInvoiceLine) {\n return false;\n }\n\n if (\n isChannelTypeB2B(this.props.context.actionContext.requestContext) &&\n this.props.data.orderTemplates.result &&\n ArrayExtensions.hasElements(cart.cart?.CartLines) &&\n this.props.data.customerInformation.result\n ) {\n return true;\n }\n\n return false;\n }\n\n /**\n * Get promotions.\n * @returns React node with the promotions.\n */\n private _getPromotions(): React.ReactNode {\n return (\n this.props.config.showAvailablePromotions &&\n cartPromotions({\n id: this.promotionPopupId,\n showPromotionPopup: this.state.showPromotionDialog,\n onSeeAllClick: this.promotionLinkClick,\n onCloseButtonClick: this.promotionCloseButtonclick,\n promotions: this.state.promotionData.promotionOptions,\n resources: {\n promotionStringHeading: this.props.resources.promotionStringHeading,\n promotionLinkText: this.props.resources.promotionLinkText,\n promotionPopupHeading: this.props.resources.promotionPopupHeading,\n promotionCloseButtonAriaLabel: this.props.resources.promotionCloseButtonAriaLabel\n }\n })\n );\n }\n\n /**\n * Add error message in cart line in case the quantity exceeds the current inventory.\n * @param cartLines - The cart lines.\n * @param cartLineInventoryValidationResult - The cart line inventory result.\n */\n private _updateCartLineErrorForInvalidInventory(\n cartLines: ICartlinesViewProps[] | null,\n cartLineInventoryValidationResult: ICartLineInventoryValidationResult\n ) {\n const { resources } = this.props;\n\n if (\n ArrayExtensions.hasElements(cartLines) &&\n !cartLineInventoryValidationResult.isValid &&\n ArrayExtensions.hasElements(cartLineInventoryValidationResult.productIdWithErrors)\n ) {\n for (const productIdWithError of cartLineInventoryValidationResult.productIdWithErrors) {\n const cartLine = cartLines?.find(element => element.data?.cartline.ProductId === productIdWithError);\n if (cartLine) {\n cartLine.error = resources.outOfStockErrorMessage;\n cartLine.hasError = true;\n }\n }\n }\n }\n\n /**\n * Get order summary errors.\n * @param cartLines - The cart lines.\n * @returns Order summary errors.\n */\n private _getOrderSummaryErrors(cartLines: ICartlinesViewProps[] | null): IOrderSummaryErrors | undefined {\n const allErrors =\n (cartLines &&\n cartLines\n .map(cartline => {\n // Check if the product is service or not by product type\n const isServiceItem = cartline.data?.product?.ItemTypeValue === ReleasedProductType.Service;\n\n if (!isServiceItem && cartline.error) {\n const fullError =\n cartline.data && cartline.data.product?.Name\n ? `${cartline.data.product.Name}: ${cartline.error}`\n : cartline.error;\n\n return (\n
\n {fullError}\n
\n );\n }\n\n return null;\n })\n .filter((line): line is JSX.Element => !!line)) ||\n [];\n\n return {\n Wrapper: {\n tag: Alert,\n className: 'msc-alert',\n isOpen: allErrors.length > 0,\n color: 'danger',\n assertive: true,\n 'aria-label': this.props.resources.outOfStockErrorMessageHeader\n },\n header: (\n \n ),\n errors: allErrors\n };\n }\n\n /**\n * Gets invoice summary line items.\n * @returns Invoice summary lines.\n */\n private _getInvoiceSummaryLineItems(): IInvoiceSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart }\n },\n telemetry,\n resources\n } = this.props;\n\n return cart?.hasInvoiceLine\n ? InvoiceSummary({\n orderTotalLabel: resources.totalAmountLabel,\n invoiceLabel: resources.invoiceLabel,\n cart: cart.cart,\n context: this.props.context,\n typeName: this.props.typeName,\n telemetry,\n id: this.props.id\n })\n : undefined;\n }\n\n /**\n * Gets order summary line items.\n * @returns Order summary lines.\n */\n private _getOrderSummaryLineItems(): IOrderSummaryLines | undefined {\n const {\n data: {\n cart: { result: cart },\n channelDeliveryOptionConfig\n },\n telemetry,\n resources\n } = this.props;\n\n const channelConfiguration = this.props.context && this.props.context.request && this.props.context.request.channel;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const featureState = this.props?.data?.featureState;\n const retailMultiplePickUpOptionEnabled = featureState?.result?.find(item => item.Name === multiplePickupStoreSwitchName)\n ?.IsEnabled;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- app configs are of generic type\n const isShowOrHideTaxEnabled = this.props.context.request.app.config?.isEnableShowOrHideSalesTaxECommerceEnabled === true;\n\n return channelConfiguration && ArrayExtensions.hasElements(cart?.cart.CartLines) && !cart?.hasInvoiceLine\n ? OrderSummary({\n cart: cart!.cart,\n subTotalLabel: resources.itemsWithCountLabel,\n shippingLabel: resources.estimatedShippingLabel,\n otherChargeLabel: resources.otherCharges,\n taxLabel: resources.estimatedTaxLabel,\n orderTotalLabel: resources.orderTotal,\n totalDiscountsLabel: resources.totalDiscountsLabel,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n toBeCalculatedText: resources.yetToBeCalculatedText,\n freeText: resources.priceFree,\n channelConfiguration,\n retailMultiplePickUpOptionEnabled,\n channelDeliveryOptionConfig: channelDeliveryOptionConfig?.result,\n telemetry,\n isTaxIncludedInPrice: cart!.cart.IsTaxIncludedInPrice,\n isShowTaxBreakup: isShowOrHideTaxEnabled\n })\n : undefined;\n }\n\n /**\n * Gets promo code.\n * @returns React node with the promo code.\n */\n private _getPromoCode(): React.ReactNode {\n const {\n data: {\n cart: { result: cart }\n },\n resources\n } = this.props;\n\n return (\n cart && (\n \n )\n );\n }\n\n /**\n * Generate add to order template dialog resources.\n * @param resources - The resources.\n * @returns IAddToOrderTemplateDialogResources.\n */\n private _generateAddToOrderTemplateDialogResources(resources: ICartResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n }\n\n /**\n * Generate item added to order template dialog resources.\n * @param resources - The resources.\n * @returns IItemAddedToOrderTemplateDialogResources.\n */\n private _generateItemAddedToOrderTemplateDialogResources(resources: ICartResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.freePriceText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n }\n\n /**\n * Generate lines added to order template dialog resources.\n * @param resources - The resources.\n * @returns ILinesAddedToOrderTemplateDialogResources.\n */\n private _generateLinesAddedToOrderTemplateDialogResources(resources: ICartResources): ILinesAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n linesAddedToOrderTemplateHeaderItemsOneText: resources.linesAddedToOrderTemplateHeaderItemsOneText,\n linesAddedToOrderTemplateHeaderItemsFormatText: resources.linesAddedToOrderTemplateHeaderItemsFormatText,\n linesAddedToOrderTemplateHeaderLinesOneText: resources.linesAddedToOrderTemplateHeaderLinesOneText,\n linesAddedToOrderTemplateHeaderLinesFormatText: resources.linesAddedToOrderTemplateHeaderLinesFormatText,\n linesAddedToOrderTemplateHeaderMessageText: resources.linesAddedToOrderTemplateHeaderMessageText,\n linesAddedToOrderTemplateCustomPriceAlertMessageText: resources.linesAddedToOrderTemplateCustomPriceAlertMessageText\n };\n }\n\n /**\n * Generate duplicate items when adding to order template dialog resources.\n * @param resources - The resources.\n * @returns IDuplicateItemsWhenAddingToOrderTemplateDialogResources.\n */\n private _generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: ICartResources\n ): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n }\n\n /**\n * Generate order template name dialog resources.\n * @param resources - The resources.\n * @returns IOrderTemplateNameDialogResources.\n */\n private _generateOrderTemplateNameDialogResources(resources: ICartResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n }\n\n /**\n * Gets the cart lines view props.\n * @returns ICartlinesViewProps [].\n */\n private _getCartLines(): ICartlinesViewProps[] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n this.props.data.featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled ||\n false;\n return ArrayExtensions.hasElements(cart?.cart.CartLines)\n ? CartLineItems({\n cartlines: cart!.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n typeName: this.props.typeName,\n id: this.props.id,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n productAvailability: this.props.data.productAvailabilites,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n\n /**\n * Gets the checkout URL.\n * @param isAuthenticated - Is authenticated flag.\n * @param guestCheckoutUrl - Guest checkout URL.\n * @param signInUrl -The sign in URL.\n * @returns The checkout URL.\n */\n private getCheckoutURL(isAuthenticated: boolean, guestCheckoutUrl: string, signInUrl: string): string {\n if (isAuthenticated) {\n return guestCheckoutUrl;\n }\n\n const isAbsoluteUrl = urlCheck(guestCheckoutUrl);\n let returnURL = guestCheckoutUrl;\n if (MsDyn365.isBrowser && !isAbsoluteUrl) {\n returnURL = `${window.location.origin}${guestCheckoutUrl}`;\n }\n\n return `${signInUrl}${!signInUrl.includes('?') ? '?' : '&'}ru=${returnURL}`;\n }\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n /**\n * Remove item from cart handler.\n * @param cartlineToRemove - The cart line to remove.\n */\n private readonly removeItemFromCartHandler = (cartlineToRemove: CartLine) => {\n if (this.props.data.cart.result) {\n const input = {\n cartLineIds: [cartlineToRemove.LineId!.toString()]\n };\n this.props.data.cart.result\n .removeCartLines(input)\n .then(() => {\n this.validateCart().catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to Remove Cart Line');\n });\n }\n };\n\n /**\n * Move to wish list handler.\n * @param result - The wish list action success result.\n * @param cartline - The cart line.\n */\n private readonly moveToWishlistSuccessHandler = (result: IWishlistActionSuccessResult, cartline?: CartLine) => {\n if (result.status === 'ADDED' && cartline) {\n this.removeItemFromCartHandler(cartline);\n }\n };\n\n /**\n * Updates the cart line quantity.\n * @param cartlineToUpdate - The cart line.\n * @param quantity - The quantity.\n * @param lineIndex - The line index.\n * @returns True if the cart line was updated, false otherwise.\n */\n private readonly updateCartlineQuantity = (cartlineToUpdate: CartLine, quantity: number, lineIndex?: number): boolean => {\n cartLineQuantityUpdatedAsync(\n this.isQuantityLimitsFeatureEnabled,\n this.props.data.cart.result,\n this.props.telemetry,\n this.props.data.products.result,\n cartlineToUpdate,\n quantity\n )\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\n if (cartActionResult?.status === 'SUCCESS') {\n this.validateCart().catch(error => {\n this.props.telemetry.warning((error as Error).message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n\n return true;\n }\n\n if (!ObjectExtensions.isNullOrUndefined(cartActionResult)) {\n // Show update line error message.\n const lineUpdateFailure: LineValidationResult = {\n LineId: ObjectExtensions.isNullOrUndefined(cartlineToUpdate.LineId) ? '0' : cartlineToUpdate.LineId,\n ValidationFailures: [\n {\n ErrorContext: ArrayExtensions.hasElements(cartActionResult.validationResults)\n ? cartActionResult.validationResults[0].ErrorContext\n : '',\n LocalizedMessage: cartActionResult.errorDetails?.LocalizedMessage\n }\n ]\n };\n\n this.setState({\n cartlinesErrors: { ValidationResultsPairs: [lineUpdateFailure] }\n });\n }\n\n return false;\n })\n .catch(() => {\n return false;\n });\n\n return false;\n };\n\n /**\n * Fulfillment store id is updated.\n */\n private readonly fulfillmentStoreIdUpdated = () => {\n if (this.isQuantityLimitsFeatureEnabled) {\n // Refresh products (in props.data) based on latest cart.\n getActiveCartProductsAction(new ActiveCartProductsInput(), this.props.context.actionContext)\n .then(async () => this.validateCart())\n .catch((error: Error) => {\n this.props.telemetry.warning(error.message);\n this.props.telemetry.debug('Unable to validate Cart');\n });\n }\n };\n\n /**\n * Validates cart.\n * @returns Void promise.\n */\n private async validateCart(): Promise {\n if (!this.isQuantityLimitsFeatureEnabled) {\n this.setState({ isCartValid: true });\n return AsyncResult.resolve();\n }\n\n const {\n data: { cart },\n telemetry,\n context\n } = this.props;\n\n const validationResults: CartLineValidationResultsByLineId | undefined = await validateCartAsync(cart, telemetry, context, true);\n\n if (validationResults) {\n const isValid = !ArrayExtensions.hasElements(validationResults.ValidationResultsPairs);\n this.setState({\n cartlinesErrors: validationResults,\n isCartValid: isValid\n });\n } else {\n this.setState({ isCartValid: true });\n }\n\n return AsyncResult.resolve();\n }\n\n /**\n * Get order quantity limit feature flag.\n * @returns True if flag is enabled, false otherwise.\n */\n private async getOrderQuantityLimitsFeatureFlag(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n try {\n const isQuantityLimitsFeatureEnabledInHq =\n featureStatuses.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\n )?.IsEnabled || false;\n if (!isQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get feature states');\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n\n try {\n const customerInfo = await this.props.data.customerInformation;\n return (\n !!customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } catch (error) {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to get customer info');\n return false;\n }\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n /**\n * Gets the cart lines group.\n * @returns ICartlinesViewProps [][].\n */\n private getCartLinesGroup(): ICartlinesViewProps[][] | null {\n const {\n data: {\n cart: { result: cart },\n wishlists: { result: wishlists },\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n },\n config,\n telemetry,\n resources,\n modules\n } = this.props;\n\n const imageSettings = this.getImageSettings(config.imageSettings);\n const cartlinesErrors: CartLineValidationResultsByLineId = this.state.cartlinesErrors;\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n const RetailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n const multiplePickUpEnabled = RetailMultiplePickupFeatureState?.IsEnabled;\n const { featureState } = this.props.data;\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const isMultipleCatalogsFeatureEnabled =\n featureState.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n return this.props.data.products &&\n (cart?.hasInvoiceLine || this.props.data.products.result) &&\n cart &&\n cart.cart.CartLines &&\n cart.cart.CartLines.length > 0 &&\n this.props.data.channelDeliveryOptionConfig?.result\n ? CartLineGroupItems({\n cartlines: cart.cart.CartLines,\n storeSelectorModuleId: storeSelectorId,\n cartlinesErrors,\n products: this.props.data.products.result,\n productAvailabilites: this.props.data.productAvailabilites.result,\n productDeliveryOptions: this.props.data.deliveryOptions.result,\n catalogs: this.props.data.catalogs?.result,\n imageSettings,\n isStockCheckEnabled: this.props.context.app.config.enableStockCheck || false,\n hasInvoiceLine: cart?.hasInvoiceLine || false,\n maxCartlineQuantity: updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem),\n gridSettings: this.props.context.request.gridSettings!,\n context: this.props.context,\n retailMulitplePickupFeatureState: multiplePickUpEnabled,\n typeName: this.props.typeName,\n id: this.props.id,\n resources: {\n sizeString: resources.productDimensionTypeSize,\n colorString: resources.productDimensionTypeColor,\n configString: resources.productDimensionTypeConfiguration,\n styleString: resources.productDimensionTypeStyle,\n amountString: resources.productDimensionTypeAmount,\n quantityDisplayString: resources.quantityDisplayText,\n inputQuantityAriaLabel: resources.inputQuantityAriaLabel,\n decrementButtonAriaLabel: resources.decrementButtonAriaLabel,\n incrementButtonAriaLabel: resources.incrementButtonAriaLabel,\n discountStringText: resources.discountStringText,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n shippingChargesText: resources.shippingCharges,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n priceEditorResources: {\n ...resources\n }\n },\n telemetry,\n addToWishlistButtonText: resources.addToWishlistButtonText,\n removeFromWishlistButtonText: resources.removeFromWishlistButtonText,\n removeButtonText: resources.removeCartButtonText,\n shipItText: resources.shipInsteadDisplayText,\n pickitUpText: resources.pickItUpDisplayText,\n changeStoreText: resources.changeStoreDisplayText,\n storeSelectorStateManager: this.props.data.storeSelectorStateManager.result,\n outOfStockText: resources.outOfStockErrorMessage,\n outOfRangeOneText: resources.errorMessageOutOfRangeOneLeft,\n outOfRangeFormatText: resources.errorMessageOutOfRangeFormat,\n cartState: this.props.data.cart.result,\n orgUnitLocations: this.props.data.orgUnitLocations.result,\n removeItemClickHandler: this.removeItemFromCartHandler,\n moveToWishlistSuccessHandler: this.moveToWishlistSuccessHandler,\n updateCartLinesQuantitySuccessHandler: this.updateCartlineQuantity,\n locationChangedHandler: this.fulfillmentStoreIdUpdated,\n wishlists,\n defaultWishlistName: resources.defaultWishlistName,\n pickupDeliveryModeCode: PickupDeliveryModeCode,\n includeErrors: config.showOutOfStockErrors,\n showShippingChargesForLineItems: config.showShippingChargesForLineItems,\n telemetryContent: this.telemetryContent,\n isQuantityLimitsFeatureEnabled: this.isQuantityLimitsFeatureEnabled,\n\n addToOrderTemplateDialogResources: this._generateAddToOrderTemplateDialogResources(resources),\n createOrderTemplateDialogResources: this._generateOrderTemplateNameDialogResources(resources),\n itemAddedToOrderTemplateDialogResources: this._generateItemAddedToOrderTemplateDialogResources(resources),\n duplicateItemsWhenAddingToOrderTemplateDialogResources: this._generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources\n ),\n\n addToOrderTemplateButtonText: resources.addToOrderTemplateButtonText,\n addToOrderTemplateButtonTooltip: resources.addToOrderTemplateButtonTooltip,\n addToOrderTemplateMessage: resources.addToOrderTemplateMessage,\n addItemToOrderTemplateError: resources.addItemToOrderTemplateError,\n orderTemplates,\n customerInformation,\n channelDeliveryOptionConfig: this.props.data.channelDeliveryOptionConfig?.result,\n shouldIgnoreWarehouse: this.props.context.app.config.warehouseAggregation === 'multiple',\n productAvailability: this.props.data.productAvailabilites,\n productPickUpOptions: this.state.productPickUpOptions || this.props.data.cartLinesPickUpOptions?.result,\n isMultipleCatalogFeatureEnabledInHq: isMultipleCatalogsFeatureEnabled || false\n })\n : null;\n }\n}\n\nexport default Cart;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartPromotionLine } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\nimport React from 'react';\n\nexport interface ICartLineItemPromotion {\n id: string;\n showPromotionPopup: boolean;\n promotions: CartPromotionLine[] | undefined;\n resources: ICartLineItemPromotionResourceString;\n onSeeAllClick(event: React.MouseEvent): void;\n onCloseButtonClick(): void;\n}\n\nexport interface ICartLineItemViewProps {\n promotionMessageWrapper: INodeProps;\n promotionMessage: React.ReactNode;\n promotionSeeAllLink: React.ReactElement;\n promotionDialog: React.ReactNode;\n}\n\nexport interface ICartLineItemPromotionResourceString {\n promotionLinkText: string;\n promotionStringHeading: string;\n promotionPopupHeading: string;\n promotionCloseButtonAriaLabel: string;\n}\n\nexport const cartPromotions = (props: ICartLineItemPromotion): ICartLineItemViewProps | undefined => {\n const {\n id,\n showPromotionPopup,\n promotions,\n resources: { promotionLinkText, promotionPopupHeading },\n onCloseButtonClick,\n onSeeAllClick\n } = props;\n\n if (!ArrayExtensions.hasElements(promotions)) {\n return;\n }\n\n const titleId = `${id}_title`;\n const className = 'msc-cart__promotion';\n return {\n promotionMessageWrapper: {\n className: 'msc-cart__promotion'\n },\n promotionMessage: (\n <>\n \n {props.resources.promotionStringHeading}\n \n ),\n promotionSeeAllLink: (\n \n {` `}\n {promotionLinkText} {` `}\n \n ),\n promotionDialog: (\n \n \n
\n {promotionPopupHeading}\n
\n
\n \n
    \n {promotions.map(_promotion => {\n return (\n
  • \n {_promotion.Promotion?.OfferName} {` `}\n
  • \n );\n })}\n
\n
\n \n
\n )\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { INodeProps, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICartViewProps, IOrderSummaryErrors } from './cart';\nimport { ICartlinesViewProps } from './components/cart-line-items';\nimport { ICartLineItemViewProps } from './components/cart-line-items-promotion';\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n cartEmptyText: string,\n CartlinesWrapper: INodeProps,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean\n): JSX.Element[] | JSX.Element => {\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map(cartLine => {\n return (\n
\n {cartLine.cartline}\n {storeSelector && cartLine.pickUpInStore ? (\n {cartLine.pickUpInStore.defaultComponent}\n ) : null}\n {cartLine.addToOrderTemplate ? (\n \n {cartLine.remove}\n {cartLine.addToWishlist}\n {cartLine.addToOrderTemplate}\n \n ) : (\n <>\n {cartLine.remove}\n {cartLine.addToWishlist}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{cartEmptyText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * Method will render error block.\n * @param errorData -The order summary errors interface.\n * @returns Jsx element.\n */\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || !ArrayExtensions.hasElements(errorData.errors)) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\n/**\n * Method will render invoice summary lines.\n * @param invoiceSummaryLines -The invoicesummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render order summary lines.\n * @param orderSummaryLines -The ordersummary lines interface.\n * @param OrderSummaryItems -The order summary items props.\n * @param props -The cartview props.\n * @returns Jsx element.\n */\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n props.context.telemetry.error('OrderSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\n/**\n * Method will render cart promotions.\n * @param promotions -The cartline item view props.\n * @returns Jsx element.\n */\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\n/**\n * Method will render cartlines group title.\n * @param cartLine -The cartline view props.\n * @param titleSeparate -The title separate.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, titleSeparate: string) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {titleSeparate}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n
\n \n );\n};\n\n/**\n * Method will render cartlines groups header title.\n * @param pickUpText -The pickup text for group.\n * @param shippingText -The shipping text for group.\n * @param emailShippingText -The email shipping text for group.\n * @param titleSeparate -The title separator.\n * @param cartLine -The cartline view props.\n * @param emailDeliveryModeCode -The email delivery code from channel.\n * @returns Jsx element.\n */\nconst renderCartLinesGroupHeader = (\n pickUpText: string,\n shippingText: string,\n emailShippingText: string,\n titleSeparate: string,\n cartLine: ICartlinesViewProps,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected: boolean | undefined = cartLine.pickUpInStore?.isBopisSelected;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailShippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {renderCartLinesGroupTitle(cartLine, titleSeparate)}\n
\n \n );\n};\n\n/**\n * Method will render cartlines in groups.\n * @param props -The cartline.\n * @returns Jsx element.\n */\nconst renderCartLinesGroup = (props: ICartViewProps): JSX.Element | undefined => {\n if (props.cartLinesGroup && ArrayExtensions.hasElements(props.cartLinesGroup)) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {renderCartLinesGroupHeader(\n props.resources.pickUpText,\n props.resources.shippingText,\n props.resources.emailshippingText,\n props.resources.titleSeparate,\n cartlines[0],\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {!props.cart?.hasInvoiceLine && props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.multiplePickUpEnabled ? (\n renderCartLinesGroup(props)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources.emptyCartText,\n props.CartlinesWrapper,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport MsDyn365 from '@msdyn365-commerce/core';\nimport { ICartlinesViewProps, ICartResources, ICartViewProps, IOrderSummaryErrors } from '@msdyn365-commerce-modules/cart';\nimport { ICartLineItemViewProps } from '@msdyn365-commerce-modules/cart/dist/types/modules/cart/components/cart-line-items-promotion';\nimport { IInvoiceSummaryLines } from '@msdyn365-commerce-modules/invoice-payment-summary';\nimport { IOrderSummaryLines } from '@msdyn365-commerce-modules/order-summary-utilities';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n INodeProps,\n ITelemetryContent,\n Node,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nconst CartView: React.FC = (props: ICartViewProps) => (\n
\n {props.title}\n {props.promotionOptions && _renderPromotions(props.promotionOptions)}\n {props.cart?.hasInvoiceLine || props.multiplePickUpEnabled ? (\n _renderCartLinesGroup(props, props.resources)\n ) : (\n \n {_renderCartlines(\n props.cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n \n )}\n {props.orderSummaryHeading && (\n \n {props.orderSummaryHeading}\n {props.cart?.hasInvoiceLine\n ? _renderInvoiceSummarylines(props.invoiceSummaryLineitems, props.OrderSummaryItems, props)\n : _renderOrderSummarylines(props.orderSummaryLineitems, props.OrderSummaryItems, props)}\n {_renderErrorBlock(props.OrderSummaryErrors)}\n {props.checkoutAsSignInUserButton}\n {props.checkoutAsGuestButton}\n {props.expressCheckoutButton && ArrayExtensions.hasElements(props.expressCheckoutButton) ? (\n {props.expressCheckoutButton}\n ) : null}\n {props.backToShoppingButton}\n {props.createTemplateFromCartButton}\n \n )}\n {props.storeSelector}\n
\n);\n\nconst _renderPromotions = (promotions: ICartLineItemViewProps): JSX.Element | undefined => {\n return (\n <>\n \n {promotions.promotionMessage}\n {promotions.promotionSeeAllLink}\n {promotions.promotionDialog}\n \n \n );\n};\n\nconst _renderCartlines = (\n cartLines: ICartlinesViewProps[] | undefined,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n backToShoppingButton: React.ReactNode,\n waitingComponent: React.ReactNode,\n cartLoadingStatus: string,\n cartDataResult: boolean,\n telemetryContent?: ITelemetryContent,\n mulitplePickUp?: boolean,\n emailDeliveryModeCode?: string\n): JSX.Element[] | JSX.Element => {\n const { emptyCartText } = resources;\n\n if (cartLoadingStatus) {\n return <>{cartLoadingStatus};\n }\n if (cartLines) {\n return cartLines.map((cartLine, index) => {\n return (\n
\n {cartLine.cartline}\n {mulitplePickUp ? null : _renderBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {mulitplePickUp ? (\n \n {_renderGroupBOPISBlock(cartLine, resources, storeSelector, telemetryContent, emailDeliveryModeCode)}\n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : cartLine.addToOrderTemplate ? (\n \n {cartLine.addToOrderTemplate}\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n ) : (\n <>\n {cartLine.addToWishlist}\n {cartLine.remove}\n \n )}\n
\n );\n });\n }\n return cartDataResult ? (\n
\n

{emptyCartText}

\n {backToShoppingButton}\n
\n ) : (\n <>{waitingComponent}\n );\n};\n\n/**\n * On Toggle function.\n * @param cartLine -Cartline.\n * @param isBopisSelected -Boolean.\n * @returns Set state of button.\n */\nconst onToggleBopisHandler = (cartLine: ICartlinesViewProps, isBopisSelected: boolean) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(!isBopisSelected);\n};\n\n/**\n * On change store function.\n * @param cartLine -CartLine items prop.\n * @returns Set state of button.\n */\nconst onChangeStoreHandler = (cartLine: ICartlinesViewProps) => () => {\n cartLine.pickUpInStore && cartLine.pickUpInStore.callbacks.toggleBopis(true);\n};\n\nconst _renderBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for BOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const {\n shipInsteadDisplayText,\n shipToAddressDisplayText,\n pickItUpDisplayText,\n pickUpAtStoreWithLocationText,\n changeStoreDisplayText\n } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n
\n {isBopisSelected ? (\n {pickUpAtStoreWithLocationText}\n ) : (\n {shipToAddressDisplayText}\n )}\n
\n {isBopisSelected && (\n
\n {cartLine.pickUpInStore.orgUnitName}\n \n
\n )}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n
\n );\n};\n\nconst _renderErrorBlock = (errorData: IOrderSummaryErrors | undefined): JSX.Element | null => {\n if (!errorData || errorData.errors.length === 0) {\n return null;\n }\n return (\n \n {errorData.header}\n {errorData.errors}\n \n );\n};\n\nconst _renderOrderSummarylines = (\n orderSummaryLines: IOrderSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!orderSummaryLines) {\n return null;\n }\n return (\n \n {props.promoCode}\n {orderSummaryLines.subtotal}\n {orderSummaryLines.shipping}\n {orderSummaryLines.otherCharge}\n {orderSummaryLines.tax}\n {orderSummaryLines.totalDiscounts ? orderSummaryLines.totalDiscounts : null}\n {orderSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderInvoiceSummarylines = (\n invoiceSummaryLines: IInvoiceSummaryLines | undefined,\n OrderSummaryItems: INodeProps,\n props: ICartViewProps\n): JSX.Element | null => {\n if (!invoiceSummaryLines) {\n props.context.telemetry.error('InvoiceSummary content is empty, module wont render');\n return null;\n }\n return (\n \n {invoiceSummaryLines.invoices}\n {invoiceSummaryLines.giftCard}\n {invoiceSummaryLines.loyalty}\n {invoiceSummaryLines.orderTotal}\n \n );\n};\n\nconst _renderCartLinesGroup = (props: ICartViewProps, resources: ICartResources): JSX.Element | undefined => {\n if (props.cartLinesGroup && props.cartLinesGroup.length > 0) {\n return (\n
\n {props.cartLinesGroup.map(cartlines => {\n return (\n
\n {_renderCartLinesGroupHeader(\n cartlines[0],\n props.storeSelector,\n resources,\n _countItems(cartlines),\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n {_renderCartlines(\n cartlines,\n props.resources,\n props.storeSelector,\n props.backToShoppingButton,\n props.waitingComponent,\n props.cartLoadingStatus,\n props.cartDataResult,\n props.telemetryContent,\n props.multiplePickUpEnabled,\n props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode\n )}\n
\n );\n })}\n
\n );\n }\n return props.cartDataResult ? (\n
\n
\n

{props.resources.emptyCartText}

\n {props.backToShoppingButton}\n
\n
\n ) : (\n <>{props.waitingComponent}\n );\n};\nconst _renderCartLinesGroupHeader = (\n cartLine: ICartlinesViewProps,\n storeSelector: React.ReactNode | undefined,\n resources: ICartResources,\n count: number,\n emailDeliveryModeCode?: string\n) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { pickUpText, shippingText, emailshippingText, payInvoicesDisplayText } = resources;\n let groupTitle: string;\n\n groupTitle = isBopisSelected ? pickUpText : shippingText;\n if (cartLine.data && cartLine.data.cartline.IsInvoiceLine) {\n groupTitle = payInvoicesDisplayText;\n } else if (!StringExtensions.isNullOrEmpty(emailDeliveryModeCode)) {\n groupTitle = cartLine.data && cartLine.data.cartline.DeliveryMode === emailDeliveryModeCode ? emailshippingText : groupTitle;\n }\n\n return (\n <>\n
\n

\n

{groupTitle}

\n {_renderCartLinesGroupTitle(cartLine, resources, count)}\n
\n \n );\n};\n\nconst _renderGroupBOPISBlock = (\n cartLine: ICartlinesViewProps,\n resources: ICartResources,\n storeSelector: React.ReactNode | undefined,\n telemetryContent?: ITelemetryContent,\n emailDeliveryModeCode?: string\n): JSX.Element | null => {\n // If it is electronic item cart line, then return null for GroupBOPISBlock.\n if (!cartLine.pickUpInStore || !storeSelector || cartLine.data?.cartline.DeliveryMode === emailDeliveryModeCode) {\n return null;\n }\n\n const { changeStoreDisplayText, shipInsteadDisplayText, pickItUpDisplayText } = resources;\n\n const isBopisSelected = cartLine.pickUpInStore.isBopisSelected;\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.PickupInStore);\n const puckUpinStoreAttribute = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n <>\n {isBopisSelected ? (\n \n ) : null}\n \n {isBopisSelected ? shipInsteadDisplayText : pickItUpDisplayText}\n \n \n );\n};\n\nconst _countItems = (cartLine: ICartlinesViewProps[]): number => {\n let countItem = 0;\n countItem = cartLine.reduce((count, item) => {\n return count + (item.data?.cartline.Quantity || 0);\n }, 0);\n return countItem;\n};\n\nconst _renderCartLinesGroupTitle = (cartLine: ICartlinesViewProps, resources: ICartResources, count: number) => {\n const isBopisSelected = cartLine.pickUpInStore?.isBopisSelected;\n const { itemLabel, itemsLabel } = resources;\n const suffix = count > 1 ? itemsLabel : itemLabel;\n return (\n <>\n \n {isBopisSelected ? (\n

\n {cartLine.pickUpInStore?.deliveryOption}\n {', '}\n {cartLine.pickUpInStore?.orgUnitName}\n

\n ) : null}\n

\n ({count}\n {` `}\n {suffix})\n

\n
\n \n );\n};\n\nexport default CartView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelConfiguration, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy';\nimport * as React from 'react';\n\nexport interface IOrderSummaryProps {\n subTotalLabel: string;\n shippingLabel: string;\n taxLabel: string;\n orderTotalLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n totalDiscountsLabel: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n id: string;\n typeName: string;\n otherChargeLabel?: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n retailMultiplePickUpOptionEnabled?: boolean;\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n isTaxIncludedInPrice?: boolean;\n isShowTaxBreakup?: boolean;\n customerAccountLabel?: string;\n}\n\nexport interface IOrderSummaryLines {\n subtotal: React.ReactNode;\n shipping?: React.ReactNode;\n otherCharge?: React.ReactNode;\n tax: React.ReactNode;\n orderTotal: React.ReactNode;\n totalDiscounts?: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n customerAccount?: React.ReactNode;\n}\n\ninterface IOrderSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n priceCurrency?: string;\n}\n\ninterface IShippingOrderLine {\n cart: Cart;\n channelConfiguration: ChannelConfiguration;\n canShip?: boolean;\n hasDeliveryMethod?: boolean;\n hasShippingMethod?: boolean;\n freightFee?: number;\n}\n\nconst OrderSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel,\n priceCurrency\n}) => {\n return (\n

\n {label}\n {price || price === 0 ? (\n \n ) : (\n {toBeCalculatedText}\n )}\n

\n );\n};\n\nconst _buildOrderSummarySection = (\n props: IOrderSummaryProps,\n price: number | undefined,\n cssLabel: string,\n label: string = ''\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computedCustomerAccountAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.customerAccountAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nconst getDeliveryConfiguration = (\n cart: Cart,\n channelConfiguration: ChannelConfiguration,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n retailMultiplePickUpOptionEnabled?: boolean,\n isTaxIncludedInPrice?: boolean,\n isShowTaxBreakup?: boolean\n): IShippingOrderLine => {\n const pickupDeliveryModeCode = channelConfiguration && channelConfiguration.PickupDeliveryModeCode;\n const emailDeliveryModeCode = channelConfiguration && channelConfiguration.EmailDeliveryModeCode;\n const cartLines = cart.CartLines || [];\n const deliveryModes = cartLines.map(cartLine => cartLine.DeliveryMode);\n const taxOnShippingCharge = cart.TaxOnShippingCharge !== undefined ? cart.TaxOnShippingCharge : 0;\n const shippingChargeAmount = cart.ShippingChargeAmount !== undefined ? cart.ShippingChargeAmount : 0;\n\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True shippingChargeAmount\n // True True shippingChargeAmount\n // True false shippingChargeAmount + taxOnShippingCharge\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n let freightFee: number | undefined = 0;\n if (isTaxIncludedInPrice === undefined || isShowTaxBreakup === undefined) {\n freightFee = cart.ShippingChargeAmount;\n } else {\n freightFee = isTaxIncludedInPrice && !isShowTaxBreakup ? shippingChargeAmount + taxOnShippingCharge : cart.ShippingChargeAmount;\n }\n const canShip = deliveryModes.some(\n deliveryMode =>\n !(\n deliveryMode !== '' &&\n (deliveryMode ===\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) ||\n deliveryMode === emailDeliveryModeCode)\n )\n );\n const hasDeliveryMethod = deliveryModes.some(deliveryMode => !!deliveryMode && deliveryMode !== emailDeliveryModeCode);\n const hasShippingMethod = deliveryModes.some(\n deliveryMode =>\n !!deliveryMode &&\n deliveryMode !==\n getDeliveryMode(deliveryMode, retailMultiplePickUpOptionEnabled, channelDeliveryOptionConfig, pickupDeliveryModeCode) &&\n deliveryMode !== emailDeliveryModeCode\n );\n return {\n canShip,\n hasDeliveryMethod,\n hasShippingMethod,\n freightFee\n } as IShippingOrderLine;\n};\n\nconst getDeliveryMode = (\n deliveryMode?: string,\n featureSate: boolean = false,\n channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration,\n pickupDeliveryMode?: string\n) => {\n if (!featureSate) {\n return pickupDeliveryMode;\n }\n return channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(dM => dM === deliveryMode);\n};\n\n// eslint-disable-next-line complexity\nexport const OrderSummary = (props: IOrderSummaryProps) => {\n const {\n SubtotalAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n SubtotalAmountWithoutTax,\n TaxAmount,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Existing Property.\n TaxOnNonShippingCharges,\n DiscountAmount = 0,\n TotalAmount,\n OtherChargeAmount\n } = props.cart;\n\n const { canShip, hasDeliveryMethod, hasShippingMethod, freightFee } = getDeliveryConfiguration(\n props.cart,\n props.channelConfiguration,\n props.channelDeliveryOptionConfig,\n props.retailMultiplePickUpOptionEnabled,\n props.isTaxIncludedInPrice,\n props.isShowTaxBreakup\n );\n\n let reactNodes: IOrderSummaryLines;\n // if either of isTaxIncludedInPrice or isShowTaxBreakup is undefined then we will execute old logic\n if (props.isTaxIncludedInPrice === undefined || props.isShowTaxBreakup === undefined) {\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, SubtotalAmount, 'sub-total', props.subTotalLabel),\n tax: _buildOrderSummarySection(props, hasDeliveryMethod ? TaxAmount : undefined, 'tax-amount', props.taxLabel),\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, OtherChargeAmount, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n } else {\n const otherChargeAmount = OtherChargeAmount !== undefined ? OtherChargeAmount : 0;\n const taxOnNonShippingCharges = TaxOnNonShippingCharges !== undefined ? TaxOnNonShippingCharges : 0;\n const isTaxGreaterThanZero = TaxAmount !== undefined && TaxAmount > 0;\n // isTaxIncludedInPrice isShowTaxBreakup useProperties\n // False False/True otherChargeAmount\n // True True otherChargeAmount\n // True false otherChargeAmount+TaxOnNonShippingCharges\n\n const otherChargeAmountTotal =\n props.isTaxIncludedInPrice && !props.isShowTaxBreakup ? otherChargeAmount + taxOnNonShippingCharges : otherChargeAmount;\n\n const subtotalAmountActual = props.isTaxIncludedInPrice && props.isShowTaxBreakup ? SubtotalAmountWithoutTax : SubtotalAmount;\n\n reactNodes = {\n subtotal: _buildOrderSummarySection(props, subtotalAmountActual, 'sub-total', props.subTotalLabel),\n tax: props.isShowTaxBreakup\n ? _buildOrderSummarySection(\n props,\n hasDeliveryMethod || isTaxGreaterThanZero ? TaxAmount : undefined,\n 'tax-amount',\n props.taxLabel\n )\n : '',\n orderTotal: _buildOrderSummarySection(props, TotalAmount, 'total', props.orderTotalLabel),\n otherCharge:\n (OtherChargeAmount && _buildOrderSummarySection(props, otherChargeAmountTotal, 'other-charges', props.otherChargeLabel)) ||\n undefined\n };\n }\n if (canShip) {\n reactNodes.shipping = _buildOrderSummarySection(props, hasShippingMethod ? freightFee : undefined, 'shipping', props.shippingLabel);\n }\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const customerAccountAmount = _computedCustomerAccountAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount - customerAccountAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildOrderSummarySection(props, -loyaltyAmount, 'loyalty', props.loyaltyLabel || 'Loyalty amount');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildOrderSummarySection(props, -giftCardAmount, 'gift-card', props.giftcardLabel || 'Gift card amount');\n }\n\n if (customerAccountAmount > 0) {\n reactNodes.customerAccount = _buildOrderSummarySection(\n props,\n -customerAccountAmount,\n 'customer-credit-amount',\n props.customerAccountLabel || 'Customer Credit amount'\n );\n }\n\n reactNodes.orderTotal = _buildOrderSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n 'total',\n props.orderTotalLabel\n );\n }\n\n if (DiscountAmount > 0) {\n reactNodes.totalDiscounts = _buildOrderSummarySection(props, -DiscountAmount, 'total-discounts', props.totalDiscountsLabel);\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n CacheType,\n createObservableDataAction,\n IAction,\n IAny,\n IActionContext,\n IActionInput,\n ICreateActionContext,\n IGeneric\n} from '@msdyn365-commerce/core';\nimport { OrgUnitLocation } from '@msdyn365-commerce/retail-proxy';\nimport { searchOrgUnitLocationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\n\n/**\n * Input for search-org-unit-locations data action.\n */\nexport class SearchOrgUnitLocationsInput implements IActionInput {\n public getCacheKey = () => 'SearchOrgUnitLocations';\n\n public getCacheObjectType = () => 'SearchOrgUnitLocations';\n\n public dataCacheType = (): CacheType => 'request';\n}\n\n/**\n * Creates the input required to make the retail api call.\n * @param inputData -- Input data.\n * @returns -- IActionInput.\n */\nexport const createSearchOrgUnitLocationsInputFunc = (inputData: ICreateActionContext>): IActionInput => {\n return new SearchOrgUnitLocationsInput();\n};\n\n/**\n * Calls the Retail API and returns all the orgUnitLocations as array.\n * @param input - Input.\n * @param ctx - Context.\n * @returns - orgUnitLocations.\n */\nexport async function getSearchOrgUnitLocationsAction(\n input: SearchOrgUnitLocationsInput,\n context: IActionContext\n): Promise {\n const OrgUnitLocations = await searchOrgUnitLocationsAsync(\n {\n callerContext: context\n },\n {}\n );\n\n return OrgUnitLocations;\n}\n\nexport const retailActionDataAction = createObservableDataAction({\n id: '@msdyn365-commerce-modules/retail-actions/search-org-unit-locations',\n action: >getSearchOrgUnitLocationsAction,\n input: createSearchOrgUnitLocationsInputFunc\n});\n\nexport default retailActionDataAction;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["_renderPromotions","promotions","React","Node","Object","assign","promotionMessageWrapper","promotionMessage","promotionSeeAllLink","promotionDialog","_renderCartlines","cartLines","resources","storeSelector","backToShoppingButton","waitingComponent","cartLoadingStatus","cartDataResult","telemetryContent","mulitplePickUp","emailDeliveryModeCode","emptyCartText","map","cartLine","index","className","key","cartline","_renderBOPISBlock","_renderGroupBOPISBlock","addToOrderTemplate","addToWishlist","remove","onToggleBopisHandler","isBopisSelected","pickUpInStore","callbacks","toggleBopis","onChangeStoreHandler","_cartLine$data","data","DeliveryMode","shipInsteadDisplayText","shipToAddressDisplayText","pickItUpDisplayText","pickUpAtStoreWithLocationText","changeStoreDisplayText","payLoad","getPayloadObject","TelemetryConstant","PickupInStore","puckUpinStoreAttribute","getTelemetryAttributes","ContainerProps","orgUnitName","Button","role","onClick","_renderErrorBlock","errorData","errors","length","Wrapper","header","_renderOrderSummarylines","orderSummaryLines","OrderSummaryItems","props","promoCode","subtotal","shipping","otherCharge","tax","totalDiscounts","orderTotal","_renderInvoiceSummarylines","invoiceSummaryLines","invoices","giftCard","loyalty","context","telemetry","error","_renderCartLinesGroup","cartLinesGroup","cartlines","_props$context$action2","_props$context$action3","_renderCartLinesGroupHeader","_countItems","actionContext","requestContext","channel","EmailDeliveryModeCode","multiplePickUpEnabled","count","_cartLine$pickUpInSto","pickUpText","shippingText","emailshippingText","groupTitle","toLowerCase","_renderCartLinesGroupTitle","_cartLine$data2","countItem","reduce","item","_item$data","Quantity","_cartLine$pickUpInSto2","_cartLine$pickUpInSto3","_cartLine$pickUpInSto4","itemLabel","itemsLabel","suffix","deliveryOption","_props$context$action","_props$cart","id","renderModuleAttributes","title","promotionOptions","CartlinesWrapper","orderSummaryHeading","OrderSummaryWrapper","cart","hasInvoiceLine","invoiceSummaryLineitems","orderSummaryLineitems","OrderSummaryErrors","checkoutAsSignInUserButton","checkoutAsGuestButton","createTemplateFromCartButton","binding","modules","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","window","__bindings__","_objectSpread","viewDictionary","cn","BaseStoreSelectorStateManager","constructor","listMapViewState","displayList","displayMap","preferredStoreLocalStorageKey","this","isMapModuleLoaded","value","_readFromToCookie","storeInfo","JSON","parse","undefined","preferredStore","_unused","_context","input","storeId","selectedStoreLocationId","storeName","writeToCookie","arguments","StoreId","StoreName","Latitude","Longitude","_writeToCookie","stringify","latitude","longitude","lastInlineShownStoreInfo","_removeCookie","MsDyn365","isBrowser","localStorage","removeItem","setItem","cookieValue","getItem","__decorate","computed","observable","action","MapStoreSelectorStateManager","SERVICE_ENDPOINT","MAP_API_ENDPOINT","searchTerm","BingMapsApiKey","BingMapsEnabled","searchContent","jsonp","crypto","getRandomValues","Uint32Array","ChannelCountryRegionISOCode","trim","query","encodeURI","geolocationApiUrl","app","config","requestUrl","Promise","resolve","script","document","createElement","setAttribute","resourceSets","point","coordinates","body","appendChild","_document","StringExtensions","isNullOrEmpty","getElementById","currentWindowAPI","mapAPIReady","isMapApiLoaded","url","lang","market","reject","_document2","_document3","type","async","defer","src","addEventListener","createStoreSelectorStateInput","result","GenericInput","getGenericActionDataAction","createObservableDataAction","getGenericAction","inputData","validateCartAsync","propsContext","cartResult","cartVersion","shouldRetry","Version","warning","debug","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","callerContext","bypassCache","Id","ValidationResultsByLineId","refreshCart","refreshError","validateError","cartLineQuantityUpdatedAsync","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","quantity","isUsingDefaultOrderSettingsMax","ArrayExtensions","hasElements","_modifiedProduct$Beha2","modifiedProduct","find","product","RecordId","ProductId","Behavior","MaximumQuantity","cartLineId","LineId","toString","newQuantity","additionalProperties","updateLineResult","updateCartLineQuantity","message","getProductByProductId","productId","getProductByProductIdAndWarehouse","warehouseId","cartState","targetWarehouseValue","WarehouseId","_product$Behavior","InventoryLocationId","ProductPickUpOptionsForCartLineItems","apiSettings","getCacheKey","buildCacheKey","getCacheObjectType","dataCacheType","getPickUpOptionsForCartLineItems","channelId","getCartState","getActiveCartProductsAction","ActiveCartProductsInput","response","ProductsDataActions","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","PickUpInStore","_toggleBOPIS","storeSelectorStateManager","storeSelectorModuleId","openDialog","alreadySelectedLocation","OrgUnitNumber","FulfillmentStoreId","deliveryOptions","onLocationSelected","orgUnitLocation","deliveryMode","updateCartLinePickupLocation","location","then","status","locationChangedHandler","catch","_onLocationChangedCallback","ShippingAddress","clearCartLinePickupLocation","_getOrgUnitName","fulfillmentStoreId","orgUnitLocations","foundLocation","OrgUnitName","DeliveryOptions","_props$channelDeliver","retailMulitplePickupFeatureState","channelDeliveryOptionConfig","matchDeliveryOptions","productdeliveryOptions","storePickUpOptionList","delivery","pickup","deliveryCode","Code","push","PickupDeliveryModeCodes","pickupDeliveryModeCode","option","defaultComponent","_renderShippingMethod","shipItText","pickupInStoretext","changeStoreText","bopisSelected","toggleBOPIS","onChange","checked","shipitText","pickUpInStoreText","_getDeliveryOption","pickupStore","_deliveryOptions$Deli","Description","_assembleNode","foundProductAvailability","productPickUpOptions","_foundProductAvailabi","_product$Dimensions","_props$cartState","_context$request$chan","imageSettings","gridSettings","typeName","removeButtonText","removeItemClickHandler","moveToWishlistSuccessHandler","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","addToWishlistButtonText","removeFromWishlistButtonText","orderTemplates","customerInformation","wishlists","defaultWishlistName","isMultipleCatalogFeatureEnabledInHq","isAuthenticated","request","user","nameOfWishlist","Name","availableQuantityInStock","isStockCheckEnabled","productAvailability","ProductAvailableQuantity","IsProductAvailable","AvailableQuantity","_getCartItemAvailableQuantity","maxQuantity","_getCartItemMaxQuantity","maxQuantityByConfig","maxByQuantityLimitsFeature","maxByQuantityLimitsFeatureResult","maxCartlineQuantity","shouldSkipStockCheck","ItemTypeValue","ReleasedProductType","Service","IsInvoiceLine","errorMessage","ObjectExtensions","isNullOrUndefined","_getErrorMessage","currentQuantity","lineId","_props$productAvailab","finalErrorMessages","productAvailabilites","outOfStockText","includeErrors","outOfRangeOneText","outOfRangeFormatText","replace","checkForErrors","cartlinesErrors","ValidationResultsPairs","errorsFoundByLineId","filter","i","ValidationFailures","forEach","validation","ErrorContext","join","onRemoveClickHandler","onRemoveClickFunction","payload","TelemetryEvent","RemoveFromCart","attributes","inventoryLbl","StockLevelLabel","inventoryCode","StockLevelCode","isCustomPriceSelected","Dimensions","dimension","DimensionTypeValue","DimensionValue","Value","productUrl","getProductUrlSync","isChannelTypeB2B","_cartline$CatalogId","fullUrl","URL","href","searchParams","set","CatalogId","getInvoiceDetailsPageUrlSync","cartlineId","hasError","CartLineItemComponent","catalogs","isOutOfStock","lineIndex","isQuantityEditable","quantityOnChange","updateCartLinesQuantitySuccessHandler","primaryImageUrl","PrimaryImageUrl","inventoryInformationLabel","inventoryLabelClassName","isCartStateReady","showShippingChargesForLineItems","priceCurrency","Currency","pickitUpText","AddToWishlistComponent","showButtonText","showStatusMessage","showRemoveButton","showButtonTooltip","ariaRole","onSuccess","AddToOrderTemplateComponent","classnames","shouldShowButtonFailedTooltip","disableButton","disableTooltip","catalogId","assembleCartlines","reactNodes","isPickUpItem","isCartLineItemPickUpType","_productAvailability$","_productAvailability$2","_cartline$WarehouseId","shouldIgnoreWarehouse","InventLocationId","toUpperCase","CartLineGroupItems","_assembleGroupInvoiceCartlines","carLineViewProps","_assembleGroupCartlines","getGroupByStorePickup","items","groupBy","groupDelivery","entries","_ref","deliveryType","groupByDeliveryType","keys","getPromotionData","ctx","promotionData","getPromotionOptionsForCartLineItems","PromotionOptionsForCartLineItems","exception","Cart","super","_isMounted","promotionPopupId","promotionLinkClick","event","setState","showPromotionDialog","state","promotionCloseButtonclick","_hidePromotionDialog","getImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","removeItemFromCartHandler","cartlineToRemove","cartLineIds","removeCartLines","validateCart","updateCartlineQuantity","cartlineToUpdate","cartActionResult","_cartActionResult$err","lineUpdateFailure","validationResults","LocalizedMessage","errorDetails","fulfillmentStoreIdUpdated","getTelemetryObject","telemetryPageName","friendlyName","bind","isCartValid","_this$props$data$cart","getOrderQuantityLimitsFeatureFlag","_isChannelLimitsFeatureEnabled","showAvailablePromotions","CartLines","reaction","_this$props$data$cart2","_this$props$data$cart3","componentWillUnmount","shouldComponentUpdate","nextProps","nextState","render","_this$props$context$r","_cart$cart$CartLines","_this$props$data$prod","_this$props$data$feat","_featureState$result","signInUrl","guestCheckoutUrl","getUrlSync","backToShoppingUrl","checkoutURL","getCheckoutURL","isCartEmpty","_getCartLines","validInventoryAcrossCartLines","validateCartLinesInventory","isValid","some","RetailMultiplePickupFeatureState","featureState","IsEnabled","isMultipleCatalogsFeatureEnabled","currentCatalogId","getCatalogId","validateCatalogId","getCartLinesGroup","contentAction","etext","Checkout","checkoutBySignInAttributes","GuestCheckout","checkoutByGuestAttributes","BackToShopping","backtoShoppingAttributes","cartLineGroup","_updateCartLineErrorForInvalidInventory","viewProps","cartTitle","_getPromoCode","_getPromotions","removePromoAriaLabelFormat","invoiceSummaryTitle","orderSummaryTitle","_getOrderSummaryLineItems","_getInvoiceSummaryLineItems","disabled","checkoutButtonTitle","showGuestCheckoutButton","guestCheckoutButtonTitle","expressCheckoutButton","slots","paymentExpress","ExpressCheckoutSectionWrapper","backToShoppingButtonTitle","_displayAddCartToTemplate","SaveCartToOrderTemplateComponent","_generateAddToOrderTemplateDialogResources","_generateOrderTemplateNameDialogResources","linesAddedToOrderTemplateDialogResources","_generateLinesAddedToOrderTemplateDialogResources","_generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","createOrderTemplateFromCartButton","createOrderTemplateFromCartButtonTooltip","checkoutBlockedDueToUnavailableFunds","Waiting","cartLoadingErrorMessage","isEmpty","_getOrderSummaryErrors","renderView","_this$props$data$cart4","_cart$cart","showPromotionPopup","promotionLinkText","promotionPopupHeading","onCloseButtonClick","onSeeAllClick","titleId","promotionStringHeading","tabIndex","Modal","isOpen","toggle","ModalHeader","ModalBody","_promotion","_promotion$Promotion","Promotion","OfferName","ModalFooter","cartPromotions","promotionCloseButtonAriaLabel","cartLineInventoryValidationResult","productIdWithErrors","productIdWithError","element","_element$data","outOfStockErrorMessage","allErrors","_cartline$data","_cartline$data$produc","fullError","line","tag","Alert","color","assertive","outOfStockErrorMessageHeader","InvoiceSummary","orderTotalLabel","totalAmountLabel","invoiceLabel","_this$props","_featureState$result2","_this$props$context$r2","channelConfiguration","retailMultiplePickUpOptionEnabled","isShowOrHideTaxEnabled","isEnableShowOrHideSalesTaxECommerceEnabled","OrderSummary","subTotalLabel","itemsWithCountLabel","shippingLabel","estimatedShippingLabel","otherChargeLabel","otherCharges","taxLabel","estimatedTaxLabel","totalDiscountsLabel","toBeCalculatedText","yetToBeCalculatedText","freeText","priceFree","isTaxIncludedInPrice","IsTaxIncludedInPrice","isShowTaxBreakup","PromoCodeComponent","promoCodeHeadingText","promoPlaceholderText","promoCodeApplyButtonText","appliedPromoCodeHeadingText","collapseTimeOut","removePromoText","invalidPromoCodeErrorText","failedToAddPromoCodeErrorText","failedToRemovePromoCodeErrorText","duplicatePromoCodeErrorText","duplicatePromotionErrorText","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","_generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","freePriceText","originalPriceText","currentPriceText","linesAddedToOrderTemplateHeaderItemsOneText","linesAddedToOrderTemplateHeaderItemsFormatText","linesAddedToOrderTemplateHeaderLinesOneText","linesAddedToOrderTemplateHeaderLinesFormatText","linesAddedToOrderTemplateHeaderMessageText","linesAddedToOrderTemplateCustomPriceAlertMessageText","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","_this$props$data$feat2","_this$props$data$feat3","_this$props$data$cata","PickupDeliveryModeCode","storeSelectorId","CartLineItems","productDeliveryOptions","enableStockCheck","updateMaxQuantityForCartLineItem","maxQuantityForCartLineItem","warehouseAggregation","sizeString","productDimensionTypeSize","colorString","productDimensionTypeColor","configString","productDimensionTypeConfiguration","styleString","productDimensionTypeStyle","amountString","productDimensionTypeAmount","quantityDisplayString","quantityDisplayText","inputQuantityAriaLabel","decrementButtonAriaLabel","incrementButtonAriaLabel","discountStringText","shippingChargesText","shippingCharges","salesAgreementPricePrompt","priceEditorResources","removeCartButtonText","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","showOutOfStockErrors","addToOrderTemplateMessage","addItemToOrderTemplateError","isAbsoluteUrl","urlCheck","returnURL","origin","includes","_featureStatuses$find2","featureStatuses","_featureStatuses$find","_cartConfiguration$Ig","cartConfiguration","IgnoreOrderSettings","_this$props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","IsB2b","_featureStatuses$find3","isChannelLimitsFeatureEnabledInHq","_this$props$data$feat4","_featureState$result3","_this$props$data$chan","_this$props$data$cata2","_this$props$data$chan2","_this$props$data$cart5","cartLinesPickUpOptions","observer","cartEmptyText","_cartLine$cartlineId","renderCartLinesGroupHeader","emailShippingText","titleSeparate","renderCartLinesGroupTitle","_props$cart2","renderCartLinesGroup","payInvoicesDisplayText","InvoiceSummaryLine","price","label","cssLabel","PriceComponent","CustomerContextualPrice","_buildPaymentSummarySection","_computedLoyaltyAmount","checkoutState","loyaltyAmount","TotalAmount","invoiceLines","invoiceLine","InvoiceAmount","format","InvoiceId","giftCardAmount","_computeGiftCardAmount","giftCardTotalValue","giftCardExtends","giftCardCounter","Balance","amount","Math","min","totalAmountAfterGiftCard","loyaltyLabel","giftcardLabel","OrderSummaryLine","currencyCode","_buildOrderSummarySection","getDeliveryMode","_channelDeliveryOptio","featureSate","pickupDeliveryMode","dM","SubtotalAmount","SubtotalAmountWithoutTax","TaxAmount","TaxOnNonShippingCharges","DiscountAmount","OtherChargeAmount","canShip","hasDeliveryMethod","hasShippingMethod","freightFee","getDeliveryConfiguration","deliveryModes","taxOnShippingCharge","TaxOnShippingCharge","shippingChargeAmount","ShippingChargeAmount","otherChargeAmount","taxOnNonShippingCharges","isTaxGreaterThanZero","otherChargeAmountTotal","subtotalAmountActual","customerAccountAmount","customerAccount","customerAccountLabel","SearchOrgUnitLocationsInput","createSearchOrgUnitLocationsInputFunc","getSearchOrgUnitLocationsAction","searchOrgUnitLocationsAsync","retailActionDataAction","module","exports","ReactDOM"],"sourceRoot":""}