{"version":3,"file":"static/js/f63ed9bd55b5e92589e1.bundle.js","mappings":";6uBAWA,MAAMA,EAA2B,CAC7B,wEACA,0EACA,iHACA,mHACA,2GACA,kEACA,iEACA,0FAaJ,SAASC,EACLC,EACAC,GAOA,IAAIC,EAeJ,OAXIA,GADqC,IAArCD,EAAUE,uBACMH,MAAAA,EAAAA,EAHW,QAIWI,IAA/BJ,QAA4EI,IAAhCH,EAAUI,kBAJlC,QAMYD,IAAhCH,EAAUI,kBACDL,MAAAA,EAAAA,EAPW,QAQWI,IAA/BJ,EACSC,EAAUI,kBAEVC,KAAKC,IAAIP,EAA4BC,EAAUI,mBAG5DH,EASX,SAASM,EAAgBC,EAAmBC,GACxC,IAAIC,GAA0B,EAC9B,MAAMC,EAAkBF,EAAcG,UAEtC,IAAK,MAAOC,EAAOC,KAASN,EAAMO,UAC9B,GACID,EAAKF,YAAcD,IAClBG,EAAKE,cAAgB,OAASP,EAAcO,cAAgB,MAC5DF,EAAKG,oBAAsB,OAASR,EAAcQ,oBAAsB,IAC3E,CACEP,EAAiBG,EAEjB,MAIR,OAAOH,EAyNXQ,eAAeC,EACXC,EACAC,EACAC,GAIA,IAAKF,EAAKG,UACN,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MACMC,EAAeJ,EAAMK,KAAI3B,IAAY,IAAA4B,EACvC,MAAMC,EAAQC,EAAA,GAAQ9B,EAAUS,eAEhC,OADAoB,EAASE,SAA4B,QAApBH,EAAGC,EAASE,gBAAQ,IAAAH,EAAAA,EAHjB,EAIbC,KAEX,IAAIG,EAEJ,OAAIZ,EAAKa,SACEC,EAAAA,EAAAA,mBAAkB,CAAEC,cAAed,GAAiBD,EAAKgB,GAAIV,EAAcN,EAAKa,SAClFI,MAAKC,IACFN,EAAqB,CAAEZ,KAAMkB,EAASd,OAAQ,UAAWC,UAAW,gBAC7DO,KAEVO,OAAMC,IAAQ,IAAAC,EAYX,OAVApB,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,4BAE9BX,EAAqB,CACjBZ,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZN,EAAED,EAAMQ,YAAI,IAAAP,OAAA,EAAVA,EAAYQ,mBAE5BjB,MAInBX,EAAcqB,UAAUQ,QAAQ,gEAEhClB,EAAqB,CAAEZ,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,iBAC9DO,GAGJd,eAAeiC,EAClB/B,EACAC,EACAC,GAOA,OAAOH,EAAqCC,EAAMC,EAAeC,GA2BrE,QAxBOJ,eACHE,EACAX,EACAY,EACA+B,EACAhD,EACAiD,EACAC,EACAC,GAEA,OAAIA,EACOpC,EAAqCC,EAAMC,EAAe,CAAC,CAAEZ,cAAAA,KAGpE2C,EAhSRlC,eACIE,EACAC,EACAC,GAOA,IAAKF,EAAKG,UACN,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,IAAK,MAAMzB,KAAasB,EACpB,GAAItB,EAAUqD,kBAAoBrD,EAAUI,kBAAmB,CAC3D,IAAIM,GAA0B,EAC9B,MAAMC,EAAkBX,EAAUS,cAAcG,UAEhD,IAAK,IAAI4C,EAAI,EAAGA,EAAIpC,EAAKG,UAAUkC,OAAQD,IACvC,GACIpC,EAAKG,UAAUiC,GAAG5C,YAAcD,IAC/BS,EAAKG,UAAUiC,GAAGxC,cAAgB,OAAShB,EAAUS,cAAcO,cAAgB,MACnFI,EAAKG,UAAUiC,GAAGvC,oBAAsB,OAASjB,EAAUS,cAAcQ,oBAAsB,IAClG,CACEP,EAAiB8C,EAEjB,MAIR,IAAKxD,EAAUsD,yBAA8C,IAApB5C,IACfoB,EAAA,GAAQV,EAAKG,UAAUb,IACRqB,UAAY,IAE9B/B,EAAUS,cAAcsB,UAAY,GAAK/B,EAAUI,kBAClE,MAAO,CACHgB,KAAM,CACFgB,GAAIhB,EAAKgB,GACTb,UAAWH,EAAKG,WAEpBC,OAAQ,SACRC,UAAW,eAO/B,MAAMC,EAAeJ,EAAMK,KAAI3B,GACb8B,EAAA,GAAQ9B,EAAUS,iBAGpC,IAAIuB,EAEJ,OAAIZ,EAAKa,SACEC,EAAAA,EAAAA,mBAAkB,CAAEC,cAAed,GAAiBD,EAAKgB,GAAIV,EAAcN,EAAKa,SAClFI,MAAKC,IACFN,EAAqB,CAAEZ,KAAMkB,EAASd,OAAQ,UAAWC,UAAW,gBAC7DO,KAEVO,OAAMC,IAAQ,IAAAkB,EAAAC,EAMX,OALAtC,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,2BAEN9C,EAAe+D,SAASpB,EAAMqB,OAGlD7B,EAAqB,CACjBZ,UAAMjB,EACNqB,OAAQ,SACRC,UAAW,iBACXmB,aAAc,CAAEC,iBAAkBL,EAAMM,UAErCd,IAG4B,QAAjB0B,EAAGtC,EAAKG,iBAAS,IAAAmC,OAAA,EAAdA,EAAgBI,MAAKC,IAAuC,IAA3BA,EAASC,kBAE/DhC,EAAqB,CACjBZ,UAAMjB,EACNqB,OAAQ,SACRC,UAAW,gBACXmB,aAAc,CAAEC,iBAAkBL,EAAMM,UAErCd,IAGXA,EAAqB,CACjBZ,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZY,EAAEnB,EAAMQ,YAAI,IAAAW,OAAA,EAAVA,EAAYV,mBAG5BjB,OAGnBX,EAAcqB,UAAUQ,QAAQ,+DAEhClB,EAAqB,CAAEZ,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,iBAC9DO,GA2LIiC,CAAqD7C,EAAMC,EAAe,CAC7E,CAAEZ,cAAAA,EAAeL,kBAAAA,EAAmBiD,iBAAAA,EAAkBC,uBAAAA,KAzLlEpC,eACIE,EACAC,EACAC,GAOA,IAAKF,EAAKG,UACN,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MAAM1B,EAAiDsB,EAAc6C,eAAeC,IAAIC,OAAOrE,2BAE/F,IAAK,MAAMC,KAAasB,EAAO,CAC3B,MAAMrB,EAAwBH,EAAiBC,EAA4B,CACvEU,cAAeT,EAAUS,cACzBL,kBAAmBJ,EAAUI,kBAC7BF,uBAAwBF,EAAUqD,iBAClCC,uBAAwBtD,EAAUsD,yBAEhC5C,EAAyBH,EAAgBa,EAAKG,UAAWvB,EAAUS,eAEzE,IAAKT,EAAUsD,yBAA8C,IAApB5C,IACfoB,EAAA,GAAQV,EAAKG,UAAUb,IACJqB,UAAY,IAE9B/B,EAAUS,cAAcsB,UAAY,GAAK9B,EAC5D,MAAO,CACHmB,KAAM,CACFgB,GAAIhB,EAAKgB,GACTb,UAAWH,EAAKG,WAEpBC,OAAQ,SACRC,UAAW,eAKvB,IACKzB,EAAUsD,wBACXtD,EAAUS,eACVT,EAAUS,cAAcsB,UACxB/B,EAAUS,cAAcsB,SAAW9B,EAEnC,MAAO,CACHmB,KAAM,CACFgB,GAAIhB,EAAKgB,GACTb,UAAWH,EAAKG,WAEpBC,OAAQ,SACRC,UAAW,eAKvB,MAAMC,EAAeJ,EAAMK,KAAI3B,IAC3B,MAAM6B,EAAQC,EAAA,GAAQ9B,EAAUS,eAEhC,OADAoB,EAASE,SAAWF,EAASE,UAAY,EAClCF,KAEX,IAAIwC,EAEJ,OAAIjD,EAAKa,SACEC,EAAAA,EAAAA,mBAAkB,CAAEC,cAAed,GAAiBD,EAAKgB,GAAIV,EAAcN,EAAKa,SAClFI,MAAKC,IACF+B,EAAmB,CAAEjD,KAAMkB,EAASd,OAAQ,UAAWC,UAAW,gBAC3D4C,KAEV9B,OAAMC,IAAQ,IAAA8B,EAAAC,EAKX,OAJAlD,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,4BAES,QAAjB2B,EAAGlD,EAAKG,iBAAS,IAAA+C,OAAA,EAAdA,EAAgBR,MAAKC,IAAuC,IAA3BA,EAASC,kBAE/DK,EAAmB,CACfjD,UAAMjB,EACNqB,OAAQ,SACRC,UAAW,gBACXmB,aAAc,CAAEC,iBAAkBL,EAAMM,UAErCuB,IAGXA,EAAmB,CACfjD,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZwB,EAAE/B,EAAMQ,YAAI,IAAAuB,OAAA,EAAVA,EAAYtB,mBAE5BoB,OAGnBhD,EAAcqB,UAAUQ,QAAQ,+DAEhCmB,EAAmB,CAAEjD,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,iBAC5D4C,GAyFAG,CAA6CpD,EAAMC,EAAe,CACrE,CAAEZ,cAAAA,EAAeL,kBAAAA,EAAmBiD,iBAAAA,EAAkBC,uBAAAA,2EC/W/CpC,eAAeuD,EAC1BrD,EACAsD,EACArD,GAEA,OAAKD,EAIDuD,EAAavD,EAAMsD,GACZ,CAAEtD,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,iBAGpDmD,EAAAA,EAAAA,sBAAqB,CAAEzC,cAAed,GAAiBD,EAAKgB,GAAIsC,GAClErC,MAAKC,GAIEqC,EAAarC,EAASoC,GACY,CAAEtD,KAAMkB,EAASd,OAAQ,WAE7B,CAAEJ,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,sBAErFc,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAQhC,MAPkD,CAC9CpB,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAvBzC,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aA8B/D,SAASkD,EAAavD,EAAYyD,GAM9B,OALczD,EAAK0D,QACb1D,EAAK0D,QAAQnD,KAAKoD,GACPA,EAAOC,KAAMC,gBAExB,IACOrB,SAASiB,EAAKI,gTCHxB,MAAMC,UAAsBC,EAAAA,EA2C/BC,YAAY/D,GACRgE,MAAMhE,GAHF,KAAAiE,gBAAiCC,QAAQC,UAI7CC,KAAKC,MAAc,GACnBD,KAAKE,iBAAmB,GACxBF,KAAKG,qBAAuB,GAC5BH,KAAKI,uBAAwB,EA7CvB,WACN,OAAOJ,KAAKC,MAKN,sBACN,OAAOD,KAAKE,iBAKN,0BACN,OAAOF,KAAKG,qBAGN,uBACN,OAAIH,KAAKC,MAAMnE,UACJkE,KAAKC,MAAMnE,UAAUI,KAAIE,GAAYA,EAASE,UAAY,IAAG+D,QAAO,CAACC,EAAOC,IAAQD,EAAQC,GAAK,GAGrG,EAKD,2BACN,OAAOP,KAAKI,sBAGN,cACN,QAASJ,KAAKC,MAAMnE,WAAakE,KAAKC,MAAMnE,UAAUkC,OAAS,GAGzD,qBACN,SAAUgC,KAAKC,MAAMnE,YAAakE,KAAKC,MAAMnE,UAAU0E,MAAKlC,IAAuC,IAA3BA,EAASC,iBAwB9E,kBAAkB1C,GACrB,OAAOmE,KAAKS,gBAAkChF,UAC1C,MAAMoB,QAAgB6D,EAAAA,EAAAA,GAAoBV,KAAKrE,KAAKgB,GAAIqD,KAAKpE,eAE7D,OAAIiB,GACAmD,KAAKC,MAAQpD,EAEN,CAAEd,OAAQ,YAGd,CAAEA,OAAQ,aAwBlB,uBAAuBF,GAe1B,OAAOmE,KAAKS,gBAAkChF,UAAW,IAAAkF,EAAAC,EACrD,MAAMxE,EAAqB,CACvByE,UAA0B,QAAjBF,EAAE9E,EAAMiF,iBAAS,IAAAH,EAAAA,GAAII,EAAAA,EAAAA,IAAaf,KAAKpE,cAAc6C,gBAC9DuC,YAAanF,EAAMoF,QAAQD,YAG3BE,qBAAsB,EACtBC,OAAQtF,EAAMoF,QAAQE,OACtBhG,UAAWU,EAAMoF,QAAQG,SACzB9E,SAAUT,EAAMwF,OAAS,EACzBC,WAAY,GACZC,oBAAqB1F,EAAMoF,QAAQO,qBACnCC,eAAgB5F,EAAM6F,eACtBC,eAAgB9F,EAAMoF,QAAQW,WAC9BC,MAAOhG,EAAMiG,YAAcjG,EAAMiG,YAAcjG,EAAMoF,QAAQY,OAGjE,GAAIhG,EAAMkG,SAAU,CAChB,IAAK/B,KAAKpE,cAAc6C,eAAeuD,QACnC,MAAO,CAAEjG,OAAQ,eAIMrB,IAAvBmB,EAAMoG,aACN7F,EAASb,aAAeM,EAAMoG,aAE9B7F,EAASb,aAAeM,EAAMqG,qCACxBxH,EACAsF,KAAKpE,cAAc6C,eAAeuD,QAAQG,uBAGpD/F,EAASZ,mBAAqBK,EAAMkG,SAASK,cAC7ChG,EAASiG,YAAcxG,EAAMkG,SAASO,oBACtClG,EAASmG,gBAAkBvC,KAAKwC,iCAAiC3G,EAAMkG,UAG3E,GAAIlG,EAAM4G,6BAA8B,CACpC,IAAKzC,KAAKpE,cAAc6C,eAAeuD,QACnC,MAAO,CAAEjG,OAAQ,UAGrBK,EAASb,aAAeyE,KAAKpE,cAAc6C,eAAeuD,QAAQU,sBAItE,MAAM7E,EAAyBhC,EAAMoF,QAAQ0B,gBAAkBC,EAAAA,oBAAoBC,QAG7EC,IAAwD,QAA3BlC,EAAC/E,EAAMkH,4BAAoB,IAAAnC,IAA1BA,EAA4BkC,kBAChE,OAAO9C,KAAKgD,2BAA0B,KAClCC,EAAAA,EAAAA,IACIjD,KAAKrE,KACLS,EACA4D,KAAKpE,cACLkH,EACAjH,EAAMlB,kBACNkB,EAAM+B,iBACNC,EACAhC,EAAMiC,6BAuBf,wBACHjC,GAeA,OAAOmE,KAAKS,gBAAkChF,UAC1C,MAAMyH,EAKA,GAEN,IAAK,MAAM3I,KAAasB,EAAO,CAAC,IAADsH,EAC3B,MAAM/G,EAAqB,CACvByE,UAA8B,QAArBsC,EAAE5I,EAAUuG,iBAAS,IAAAqC,EAAAA,GAAIpC,EAAAA,EAAAA,IAAaf,KAAKpE,cAAc6C,gBAClEuC,YAAazG,EAAU0G,QAAQD,YAG/BE,qBAAsB,EACtBC,OAAQ5G,EAAU0G,QAAQE,OAC1BhG,UAAWZ,EAAU0G,QAAQG,SAC7B9E,SAAU/B,EAAU8G,OAAS,EAC7BC,WAAY,GACZC,oBAAqBhH,EAAU0G,QAAQO,qBACvCC,eAAgBlH,EAAUmH,eAC1BC,eAAgBpH,EAAU0G,QAAQW,WAClCC,MAAOtH,EAAUuH,YAAcvH,EAAUuH,YAAcvH,EAAU0G,QAAQY,OAG7E,GAAItH,EAAUwH,SAAU,CACpB,IAAK/B,KAAKpE,cAAc6C,eAAeuD,QACnC,MAAO,CAAEjG,OAAQ,eAIUrB,IAA3BH,EAAU0H,aACV7F,EAASb,aAAehB,EAAU0H,aAElC7F,EAASb,aAAehB,EAAU2H,qCAC5BxH,EACAsF,KAAKpE,cAAc6C,eAAeuD,QAAQG,uBAGpD/F,EAASZ,mBAAqBjB,EAAUwH,SAASK,cACjDhG,EAASiG,YAAc9H,EAAUwH,SAASO,oBAC1ClG,EAASmG,gBAAkBvC,KAAKwC,iCAAiCjI,EAAUwH,UAGlC,IAADqB,EAA5C,GAAI7I,EAAUkI,6BACVrG,EAASb,aAAwD,QAA5C6H,EAAGpD,KAAKpE,cAAc6C,eAAeuD,eAAO,IAAAoB,OAAA,EAAzCA,EAA2CV,sBAIvE,MAAMW,EAAmB,EACnBxF,EAAyBtD,EAAU0G,QAAQ0B,gBAAkBU,EAEnEH,EAAcI,KAAK,CACftI,cAAeoB,EACfzB,kBAAmBJ,EAAUI,kBAC7B4I,oBAAqBhJ,EAAUqD,iBAC/BC,uBAAAA,IAIR,OAAOmC,KAAKgD,2BAA0B,KAAMtF,EAAAA,EAAAA,IAA0BsC,KAAKrE,KAAMqE,KAAKpE,cAAesH,QAYtG,wBAAwBrH,GAC3B,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,IClUnCvH,eACXE,EACA6H,EACA5H,GAEA,OAAK4H,GAAoC,IAAtBA,EAAWxF,OAK1BrC,EAAKa,QACEiH,EAAAA,iBAAAA,iBAAkC,CAAE/G,cAAed,GAAiBD,EAAKgB,GAAI6G,GAC/E5G,MAAgCC,IACtB,CAAElB,KAAMkB,EAASd,OAAQ,cAEnCe,OAAMC,IACHnB,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,kCAKiB,CAAEvB,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAD5CJ,EAAMQ,UAK1D3B,EAAcqB,UAAUQ,QAAQ,2DAEzB,CAAE9B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,mBAtBnDJ,EAAcqB,UAAUC,MAAM,0DACvB,CAAEvB,KAAAA,EAAMI,OAAQ,SAAUC,UAAW,eD2TI0H,CAA0B1D,KAAKrE,KAAME,EAAM2H,WAAYxD,KAAKpE,mBAazG,4BAA4BC,GAK/B,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,IEpVnCvH,eACXE,EACAgI,EACAC,EACAhI,GAEA,OAAK+H,GAA2B,KAAdA,EAKdhI,EAAKa,SACEqH,EAAAA,EAAAA,sBAAqB,CAAEnH,cAAed,GAAiBD,EAAKgB,GAAIgH,EAAWC,GAC7EhH,MAAgCC,IACK,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,uCAEoB,CAC9CvB,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,cAMxDzB,EAAcqB,UAAUQ,QAAQ,gEAEE,CAAE9B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,mBAzB9EJ,EAAcqB,UAAUC,MAAM,uDACvB,CAAEvB,KAAAA,EAAMI,OAAQ,SAAUC,UAAW,eF6UpC8H,CAA8B9D,KAAKrE,KAAME,EAAM8H,UAAW9H,EAAM+H,gBAAiB5D,KAAKpE,mBAYnF,0BAA0BC,GACrC,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0BvH,UAClCsI,EAAAA,EAAAA,GAA4B/D,KAAKrE,KAAME,EAAMmI,WAAYnI,EAAMoI,MAAOjE,KAAKpE,mBAahF,sBAAsBC,GACzB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMkB,EAAAA,EAAAA,GAAuBlE,KAAKrE,KAAME,EAAMsI,YAAanE,KAAKpE,mBAavG,kCAAkCC,GACrC,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMoB,EAAAA,EAAAA,GAAkCpE,KAAKrE,KAAME,EAAMmI,WAAYhE,KAAKpE,mBAYjH,wCAAwCC,GAI3C,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClCqB,EAAAA,EAAAA,GAAkCrE,KAAKrE,KAAMqE,KAAKpE,cAAeC,EAAMyI,wCAgB5E,mCAAmCzI,GAMtC,OAAOmE,KAAKS,gBAAkChF,UAC1C,IAAKuE,KAAKpE,cAAc6C,eAAeuD,QACnC,MAAO,CAAEjG,OAAQ,UAGrB,MAAMwI,EAAgC,CAClCC,OAAQ3I,EAAMmI,WACdS,sBAAuB,CACnBC,oBAC2BhK,IAAvBmB,EAAMoG,aACApG,EAAMoG,aACNjC,KAAKpE,cAAc6C,eAAeuD,QAAQG,uBACpDwC,4BAA6B,EAC7BC,cAAe/I,EAAMkG,SAASK,cAC9ByC,gBAAiB7E,KAAKwC,iCAAiC3G,EAAMkG,YAIrE,OAAO/B,KAAKgD,2BAA0B,KAClC8B,EAAAA,EAAAA,GAA6C9E,KAAKrE,KAAM,CAAC4I,GAAgCvE,KAAKpE,oBAgBnG,0CAA0CC,GAM7C,OAAOmE,KAAKS,gBAAkChF,UAC1C,IAAKuE,KAAKpE,cAAc6C,eAAeuD,QACnC,MAAO,CAAEjG,OAAQ,UAGrB,MAAMwI,EAAgC,CAClCC,OAAQ3I,EAAMmI,WACdS,sBAAuB,CACnBC,oBAC2BhK,IAAvBmB,EAAMoG,aACApG,EAAMoG,aACNjC,KAAKpE,cAAc6C,eAAeuD,QAAQG,uBACpDwC,4BAA6B,IAIrC,OAAO3E,KAAKgD,2BAA0B,KAClC8B,EAAAA,EAAAA,GAA6C9E,KAAKrE,KAAM,CAAC4I,GAAgCvE,KAAKpE,oBAYnG,uCAAuCC,GAG1C,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClC8B,EAAAA,EAAAA,GAA6C9E,KAAKrE,KAAME,EAAMkJ,2BAA4B/E,KAAKpE,mBAepG,sCAAsCC,GAMzC,OAAOmE,KAAKS,gBAAkChF,UAC1C,GAAoC,KAAhCI,EAAMmJ,eAAeC,OACrB,MAAO,CAAElJ,OAAQ,SAAUC,UAAW,cAG1C,MAAMkJ,EACFlF,KAAKpE,cAAc6C,eAAeuD,SAAWhC,KAAKpE,cAAc6C,eAAeuD,QAAQG,uBACrFgD,EACFnF,KAAKpE,cAAc6C,eAAeuD,SAAWhC,KAAKpE,cAAc6C,eAAeuD,QAAQU,sBAC3F,IAAI0C,EAAmC,GAkBvC,GAhBAA,OAC0C1K,IAAtCmB,EAAMwJ,6BACCrF,KAAKrE,KAAKG,WAAa,IAAIwJ,QAAOlJ,IAAQ,IAAAmJ,EAAA,OACvCnJ,EAASb,cAA0C,KAA1Ba,EAASb,aAC5Ba,EAASb,gBAC4B,QADhBgK,EACjB1J,EAAMwJ,mCAA2B,IAAAE,GAAyB,QAAzBA,EAAjCA,EAAmCC,+BAAuB,IAAAD,OAAA,EAA1DA,EAA4DlH,MACxD4D,GAAgBA,IAAiB7F,EAASb,iBACzCa,EAASb,eAAiB4J,EACnC/I,MAET4D,KAAKrE,KAAKG,WAAa,IAAIwJ,QAAOlJ,GAC/BA,EAASb,cAA0C,KAA1Ba,EAASb,aAC5Ba,EAASb,eAAiB2J,GAA0B9I,EAASb,eAAiB4J,EAC9E/I,IAGhBgJ,EAAqBpH,OAAS,EAAG,CACjC,MAAMyH,EAAyBL,EAAqBlJ,KAAIE,IAC7C,CACHoI,OAAQpI,EAASoI,OACjBC,sBAAuB,CACnBC,eAAgB7I,EAAMmJ,eACtBL,4BAA6B,EAC7BE,gBAAiBhJ,EAAM6J,qBAKnC,OAAO1F,KAAKgD,2BAA0B,KAClC8B,EAAAA,EAAAA,GAA6C9E,KAAKrE,KAAM8J,EAAwBzF,KAAKpE,iBAI7F,MAAO,CAAEG,OAAQ,SAAUC,UAAW,gBAavC,6BAA6BH,GAKhC,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,SAAA2C,EAAA,OAClCC,EAAAA,EAAAA,GACI5F,KAAKrE,KACLE,EAAMmI,WACNnI,EAAMgK,YACN7F,KAAKpE,cAGqB,QAD1B+J,EACA9J,EAAMkH,4BAAoB,IAAA4C,OAAA,EAA1BA,EAA4BG,qCAarC,2CAA2CjK,GAG9C,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClC8B,EAAAA,EAAAA,GAA6C9E,KAAKrE,KAAME,EAAMkJ,2BAA4B/E,KAAKpE,mBAapG,0BAA0BC,GAI7B,OAAKA,EAAMkK,kBAIJ/F,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClCgD,EAAAA,EAAAA,GAA4BhG,KAAKrE,KAAME,EAAMkK,kBAAoB/F,KAAKpE,mBALnE,CAAEG,OAAQ,SAAUC,UAAW,cAkBvCgD,aAAanD,GAChB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMiD,EAAAA,EAAAA,GAAqBjG,KAAKrE,KAAME,EAAMoD,UAAWe,KAAKpE,mBAYnGsK,iBAAiBrK,GACpB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMmD,EAAAA,EAAAA,GAAyBnG,KAAKrE,KAAME,EAAMuK,WAAYpG,KAAKpE,mBAWxGyK,oBAAoBxK,GACvB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMsD,EAAAA,EAAAA,GAA4BtG,KAAKrE,KAAMqE,KAAKpE,mBAezF,yBAAyBC,GAO5B,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,IG3rBnCvH,eACXE,EACA4K,EACA3K,EACA4K,EACAC,EACAC,GAEA,IAAK/K,EACD,MAAO,CAAEA,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MAAM2K,EAAoB,CACtBhK,GAAIhB,EAAKgB,GACTiK,aAAcL,EACdM,QAASL,EACTM,oBAAqBL,EACrBM,WAAgBrM,IAATgM,EAAqB,CAACA,QAAQhM,GAGzC,OAAOsM,EAAAA,EAAAA,aAAY,CAAEtK,cAAed,GAAiB+K,GAChD/J,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,2CAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aH+pB3G6J,CACIlH,KAAKrE,KACLE,EAAMsL,SACNnH,KAAKpE,cACLC,EAAM2K,kBACN3K,EAAM4K,oBACN5K,EAAM6K,UAcf,4BAA4B7K,GAI/B,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0BvH,UAClC2L,EAAAA,EAAAA,GAAsBpH,KAAKrE,KAAME,EAAMwL,mBAAoBrH,KAAKpE,mBAarE,4BAA4BC,GAI/BmE,KAAKE,iBAAmBrE,EAAMyL,mBAC9B,MAAMC,EAAsB,CACxB5K,GAAIqD,KAAKrE,KAAKgB,GACd6K,gBAAiB3L,EAAMyL,oBAE3B,OAAOtH,KAAKyH,WAAW,CAAEF,cAAAA,IAWtB,gCAAgC1L,GAInCmE,KAAKG,qBAAuBtE,EAAM6L,uBAClC,MAAMH,EAAsB,CACxB5K,GAAIqD,KAAKrE,KAAKgB,GACdgL,oBAAqB9L,EAAM6L,wBAE/B,OAAO1H,KAAKyH,WAAW,CAAEF,cAAAA,IAWtB,iBAAiB1L,GACpB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAAMyE,EAAAA,EAAAA,GAAWzH,KAAKrE,KAAME,EAAM0L,cAAevH,KAAKpE,mBAW7F,sBAAsBC,GACzB,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClC4E,EAAAA,EAAAA,GAAwB5H,KAAKrE,KAAME,EAAMgM,uBAAwB7H,KAAKpE,mBAa3E,oCAAoCC,GACvC,OAAOmE,KAAKS,gBAAkChF,SACnCuE,KAAKgD,2BAA0B,KAClC4E,EAAAA,EAAAA,GAAwB5H,KAAKrE,KAAME,EAAMgM,uBAAwB7H,KAAKpE,mBAQ3E,mBACH,GAAIoE,KAAK8H,cACL,OAGJ,MAAMjL,QAAgBkL,EAAAA,EAAAA,IAAsB/H,KAAKpE,eAE7CiB,GACAmD,KAAKC,MAAQpD,EACbmD,KAAKgI,QAAU,SAEfhI,KAAKgI,QAAU,QAGnBhI,KAAK8H,eAAgB,EAQjB,gCAAgCG,GACpC,MACMxJ,EADgBuB,KAAKpE,cACU6C,eACrC,GAAIA,EAAeyJ,UAAYzJ,EAAeyJ,SAASC,uCAAwC,CAE3F,MAAMC,EAAmBpI,KAAKH,gBAAgBjD,MAC1CnB,UACI,IAAI4M,EAEJ,IAII,GAFAA,QAAuBJ,IAEO,YAA1BI,EAAetM,OAAsB,CAGJ,mBADDiE,KAAKsI,YAAY,KAC3BvM,SAClBsM,QAAuBJ,KAY/B,MAP8B,YAA1BI,EAAetM,QAAwBsM,EAAe1M,OACtDqE,KAAKC,MAAQoI,EAAe1M,MAIhCqE,KAAKI,sBAAkD,YAA1BiI,EAAetM,QAAqD,iBAA7BsM,EAAerM,UAE5E,CACHD,OAAQsM,EAAetM,OACvBC,UAAWqM,EAAerM,UAC1BmB,aAAckL,EAAelL,aAC7BG,kBAAmB+K,EAAe/K,mBAExC,MAAOP,GAIL,MAAO,CACHhB,OAH6B,SAI7BC,eAAWtB,EACXyC,aAAc,GACdG,kBAAmB,QAUnC,OAHA0C,KAAKH,gBAAkBuI,EAAiBxL,MAAK,SAGtCwL,EACJ,CACH,IAAIC,QAAuBJ,IAE3B,GAA8B,YAA1BI,EAAetM,OACXsM,EAAe1M,OACfqE,KAAKC,MAAQoI,EAAe1M,UAE7B,CAG8B,mBAFDqE,KAAKsI,YAAY,KAE3BvM,SAClBsM,QAAuBJ,IAEO,YAA1BI,EAAetM,QACXsM,EAAe1M,OACfqE,KAAKC,MAAQoI,EAAe1M,OAY5C,MAN8B,YAA1B0M,EAAetM,QAAwBsM,EAAerM,WAA0C,iBAA7BqM,EAAerM,UAClFgE,KAAKI,uBAAwB,EAE7BJ,KAAKI,uBAAwB,EAG1B,CACHrE,OAAQsM,EAAetM,OACvBC,UAAWqM,EAAerM,UAC1BmB,aAAckL,EAAelL,aAC7BG,kBAAmB+K,EAAe/K,oBAUtCkF,iCAAiCT,GACrC,MAAO,CACHX,SAAUW,EAASwG,gBACnBC,KAAMzG,EAAS0G,YACfC,YAAa3G,EAAS4G,QACtBC,OAAQ7G,EAAS6G,OACjBC,aAAc9G,EAAS8G,aACvBC,KAAM/G,EAAS+G,KACfC,aAAchH,EAASgH,aACvBC,mBAAoBjH,EAASiH,mBAC7BC,QAASlH,EAASkH,QAClBC,yBAA0BnH,EAASoH,QACnCC,QAASrH,EAASsH,IAClBC,OAAQvH,EAASuH,OACjBC,WAAYxH,EAASwH,WACrBC,MAAOzH,EAASyH,MAChBC,UAAW1H,EAAS0H,aAh5BhBC,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,6BAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,0BAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,4CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,yCAICF,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,sCAQGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,6CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,0CAICF,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,6BAICF,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,oCAyBTF,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iCAmCPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sCAiGPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uCAyFPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uCAgBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2CAoBCH,EAAAA,EAAAA,IAAA,CAAPG,EAAAA,IAAM,yCAgBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,qCAgBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iDAePH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uDAuBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,kDA0CPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yDAoCPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sDAqBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,qDAgEPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4CA4BPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0DAmBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yCAwBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,kCAePH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sCAcPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yCAkBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,wCA8BPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2CAoBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2CAqBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+CAqBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gCAcPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,qCAiBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yWIvyBIpO,eAAeqO,EAC1BnO,EACAqI,EACApI,GAA6B,IAAAmO,EAE7B,IAAKpO,IAASA,EAAKG,UACf,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MAAMgO,EAAgBrO,EAAKG,UAAUwJ,QAAOlJ,GAAYA,EAASoI,SAAWR,IAE5E,GAA6B,IAAzBgG,EAAchM,OACd,MAAkC,CAAErC,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,qBAGtF,MAAMiO,uWAAY5N,CAAA,GAAkB2N,EAAc,IAOlD,OALAC,EAAa1O,aAAe,GAC5B0O,EAAazO,mBAAqB,GAClCyO,EAAa1H,gBAAkB,GAC/B0H,EAAa5H,aAAkD,QAApC0H,EAAAnO,EAAc6C,eAAeuD,eAAO,IAAA+H,OAAA,EAApCA,EAAsCG,iBAAkBvO,EAAK0G,aAEjF8H,EAAAA,EAAAA,sBAAqB,CAAEzN,cAAed,GAAiBD,EAAKgB,GAAI,CAACsN,GAAe,MAClFrN,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,8BAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,sGC9B5G5B,eAAe4I,EAC1B1I,EACAC,EACAyJ,GAAgE,IAAA0E,EAAAK,EAEhE,IAAKzO,IAASA,EAAKG,UACf,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAE3D,IAAIgO,EAA4B,GAChC,MAAM9E,EACFtJ,GAAiBA,EAAc6C,iBAAsD,QAAxCsL,EAAInO,EAAc6C,eAAeuD,eAAO,IAAA+H,OAAA,EAApCA,EAAsC5H,wBACrFgD,EACFvJ,GAAiBA,EAAc6C,iBAAsD,QAAxC2L,EAAIxO,EAAc6C,eAAeuD,eAAO,IAAAoI,OAAA,EAApCA,EAAsC1H,uBAoB3F,GAlBIsH,OADgCtP,IAAhC2K,EACgB1J,EAAKG,UAAUwJ,QAC3BlJ,IAAQ,IAAAiO,EAAA,OACJjO,EAASb,cACTa,EAASb,gBAAoE,QAAxD8O,EAAKhF,EAA4BG,+BAAuB,IAAA6E,OAAA,EAAnDA,EAAqDhM,MAAKiM,GAAMA,IAAOlO,EAASb,iBAC1Ga,EAASb,eAAiB4J,GAC1B/I,EAASoI,UAGD7I,EAAKG,UAAUwJ,QAC3BlJ,GACIA,EAASb,cACTa,EAASb,eAAiB2J,GAC1B9I,EAASb,eAAiB4J,GAC1B/I,EAASoI,SAKQ,IAAzBwF,EAAchM,OACd,MAAkC,CAAErC,KAAAA,EAAMI,OAAQ,WAGtD,MAAMwO,EAA0BC,GAAAA,CAAUR,GAQ1C,OANAO,EAAYE,SAAQpP,IAChBA,EAAKE,aAAe,GACpBF,EAAKG,mBAAqB,GAC1BH,EAAKkH,gBAAkB,OAGpB4H,EAAAA,EAAAA,sBAAqB,CAAEzN,cAAed,GAAiBD,EAAKgB,GAAI4N,EAAa,MAC/E3N,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAOC,IACJnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,+BAEI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,2DClChH2N,yoBAKUjP,eAAesM,EAAsB4C,GAChD,IAAIhP,EACJ,MACMiP,EADqBD,EAAIlM,eAAeoM,QAAQC,gBACTC,MAAM,KACnD,IAEIpP,QAyEDF,eAAiCmP,EAA2BD,GAC/D,IAAIK,EACAC,EAAqB,GAEzB,MAAMC,EAAkBP,EAAIlM,eAAe0M,KAAKD,gBAChD,GAAIN,GAA8C,IAA3BA,EAAgB5M,SAM9BkN,GAAmBN,EAAgB,KAAOF,EAAgBU,OACzDF,GAAmBN,EAAgB,KAAOF,EAAgBW,MAE5D,IACIJ,EAAaL,EAAgB,GAC7B,MAAMI,QAAiBM,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,QAAUX,EAAgB,IAE9F,GAAII,GAAYA,EAASrO,GAErB,OADAgO,EAAIlM,eAAeoM,QAAQW,cAAcR,EAAUL,EAAIlM,eAAe0M,KAAKD,iBACpEF,EAEb,MAAOjO,GACD0O,EAAgCd,EAAK5N,KACrCiO,QAAiBM,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,QAAUN,IAE5EN,EAAI1N,UAAUF,MAAM,6CACpB4N,EAAI1N,UAAUyO,UAAU3O,GACxB4O,QAAQC,IAAI,qBAAsB7O,GAK9C,OAAOiO,EA1GUa,CAAkBjB,EAAiBD,GAChD,MAAMmB,IAAsBnQ,GAAQA,EAAKgB,GAGnChB,GAAQA,EAAKgB,KACfhB,QAwGLF,eAAmCkP,GACtC,GAAIA,EAAIlM,eAAe0M,KAAKD,gBACxB,IACI,MAAMa,QAsNXtQ,eAA2BkP,GAC9B,MAAMqB,EAAyC,CAC3CC,kBAAkB,EAClBC,cAAe,GAGbC,EAA2C,CAC7CC,OAAQ,CACJC,IAAK,EACLC,KAAM,GAEVC,QAAS,CACLC,QAAS,CACL,CACIC,WAAY,mBACZC,cAAc,MAM9B,OAAOC,EAAAA,EAAAA,aAAY,CAAEjQ,cAAeiO,EAAKwB,oBAAAA,GAAuBH,GA3OhCY,CAAYjC,GACpC,GAAIoB,GAAaA,EAAU/N,OAAS,EAEhC,OADA2M,EAAIlM,eAAeoM,QAAQW,cAAcO,EAAU,GAAIpB,EAAIlM,eAAe0M,KAAKD,iBACxEa,EAAU,GAEvB,MAAOhP,GACL4N,EAAI1N,UAAUF,MAAM,wCACpB4N,EAAI1N,UAAUyO,UAAU3O,GACxB4O,QAAQC,IAAI,qBAAsB7O,GAI1C,OAvHqB8P,CAAoBlC,IAMrC,MAAMmC,QAoHPrR,eACHmP,EACAmC,EACApC,GAEA,IAAIqC,EAEJ,GACIrC,EAAIlM,eAAe0M,KAAKD,iBACxBN,GAC2B,IAA3BA,EAAgB5M,QAChB4M,EAAgB,KAAOF,EAAgBW,KACzC,CACE,IACI2B,QAAwB1B,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,QAAUX,EAAgB,IACjG,MAAO7N,GACD0O,EAAgCd,EAAK5N,KACrCiQ,QAAwB1B,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,QAAUX,EAAgB,IAC/Fe,QAAQC,IAAI,+BAAgC7O,IAIpD,GAAIiQ,IAAoBD,EAAa,CACjC,MAAMlQ,QA6JXpB,eAAyBwR,EAAgBtC,GAC5C,MAAMuC,QAAsBlG,EAAAA,EAAAA,aACxB,CAAEtK,cAAeiO,GACjB,CACIhO,GAAIsQ,IAGZ,KAAMC,aAAyBC,QAAUD,GAAiBA,EAAcvQ,GACpE,OAAOuQ,EAGX,OADAvB,QAAQC,IAAI,sBAAuBsB,GACtB,GAxKiBE,CAAUJ,EAAgBrQ,GAAIgO,GACpD,GAAI9N,GAAWA,EAAQF,GAEnB,OADAgO,EAAIlM,eAAeoM,QAAQW,cAAc3O,EAAS8N,EAAIlM,eAAe0M,KAAKD,iBACnErO,EAIf,GAAImQ,GAAmBA,EAAgBrQ,IAAMoQ,EAAa,CACtD,MAAMM,QA2CX5R,eAA4B6R,EAAkBC,EAAuB5C,GACxE,IAAIhE,EACJ,MAAM6G,EAAwB,GACxBC,EAA8B,GACpC,IAAIC,EACJ,MAAMC,EAAuBhD,EAAIlM,eAAeuD,QAC1C4L,EAAyB,CAAC,mEAChC,GAAIL,EAAgB/Q,QAAS,CACzB,GAAI8Q,EAAWxR,WAAawR,EAAWxR,UAAUkC,OAAS,EACtD,IAAK,MAAMM,KAAYgP,EAAWxR,UAAW,CACzC,IAAI+R,EAEJ,GAAIvP,EAASqD,eACTkM,EAAcC,EAAkBxP,OAC7B,CAAC,IAADyP,EACHF,EAAc,GACd,MAAMG,QAAsBC,EAAAA,EAAAA,uBAAsB,CAAEvR,cAAeiO,GAAOiD,GAM1E,IAJII,MAAAA,GAGC,QAHYD,EAAbC,EAAe3P,MACV6P,GACyB,oEAAtBA,EAAa1F,cACpB,IAAAuF,OAAA,EAHDA,EAGGI,aAAa,EACQ,CAAC,IAAD9D,EACxB,MAAMhF,QAAoC+I,EAAAA,EAAAA,4CAA2C,CAAE1R,cAAeiO,IACtG+C,EACIpP,EAAS/C,gBAC0C,QAD9B8O,EACrBhF,EAA4BG,+BAAuB,IAAA6E,OAAA,EAAnDA,EAAqDhM,MAChD4D,GAAyBA,IAAiB3D,EAAS/C,qBAG9Bb,IAA1B4D,EAAS/C,cAA8BmS,IACvCG,EAAYtS,aAAe+C,EAAS/C,aACpCsS,EAAYrS,mBAAqB8C,EAAS9C,mBAC1CqS,EAAYtL,gBAAkBjE,EAASiE,gBACvCsL,EAAYxL,YAAc/D,EAAS+D,kBAE/BgM,GAAAA,CAAQ/P,EAAS/C,eAAiB+C,EAAS/C,gBAAiBoS,MAAAA,OAAoB,EAApBA,EAAsBxL,0BAC1F0L,EAAYtS,aAAeoS,MAAAA,OAAoB,EAApBA,EAAsBxL,uBACjD0L,EAAYrS,mBAAqB8C,EAAS9C,mBAC1CqS,EAAYtL,gBAAkBjE,EAASiE,gBACvCsL,EAAYxL,YAAc/D,EAAS+D,aAEvCwL,EAAY1S,UAAYmD,EAASnD,UACjC0S,EAAYvR,SAAWgC,EAAShC,SAChCuR,EAAYlG,oBAAsBrJ,EAASqJ,oBAC3CkG,EAAY7M,YAAc1C,EAAS0C,YACnC6M,EAAYS,gBAAkBhQ,EAASgQ,gBACvCT,EAAYrG,gBAAkBlJ,EAASkJ,gBACvCqG,EAAYhN,UAAYvC,EAASuC,UACjCgN,EAAY3M,qBAAuB5C,EAAS4C,qBAC5C2M,EAAY1M,OAAS7C,EAAS6C,OAG9B0M,EAAYtM,oBAAsBjD,EAASiD,oBACvCjD,EAASmD,iBACToM,EAAYhM,MAAQvD,EAASuD,MAC7BgM,EAAYpM,eAAiBnD,EAASmD,gBAI9C+L,EAAUlK,KAAIjH,EAAC,GAAKwR,IAChBvP,EAASkG,QACTiJ,EAAkBnK,KAAKhF,EAASkG,QAK5C,GAAIgJ,EAAUxP,OAAS,EACnB,IACI2I,QAAoBlK,EAAAA,EAAAA,mBAAkB,CAAEC,cAAeiO,GAAO4C,EAAgB5Q,GAAI6Q,EAAWD,EAAgB/Q,SAEzGiR,EAAkBzP,OAAS,IAC3BsP,QAAmBiB,EAAAA,EAAAA,sBAAqB,CAAE7R,cAAeiO,GAAO2C,EAAW3Q,GAAI8Q,IAErF,MAAO1Q,GAGL,OAFA4N,EAAI1N,UAAUF,MAAM,8CACpB4N,EAAI1N,UAAUyO,UAAU3O,GACjBwQ,EAKf,GAAID,EAAWjO,SAAWiO,EAAWjO,QAAQrB,OAAS,EAAG,CACrD,MAAMwQ,EAAUlB,EAAWjO,QAAQnD,KAAKoD,GAC7BA,EAAOC,OAGlB,IACIoH,QAAoB8H,EAAAA,EAAAA,iBAAgB,CAAE/R,cAAeiO,GAAO4C,EAAgB5Q,GAAI6R,GAAS,GAC3F,MAAOzR,GAGL,OAFA4N,EAAI1N,UAAUF,MAAM,kDACpB4N,EAAI1N,UAAUyO,UAAU3O,GACjBwQ,IAKnB,OAAO5G,GAAe4G,EA5IWmB,CAAa1B,EAAiBD,EAAapC,GAGpE,KAAM0C,aAAsBF,QAAUE,EAAW1Q,GAE7C,OADAgO,EAAIlM,eAAeoM,QAAQW,cAAc6B,EAAY1C,EAAIlM,eAAe0M,KAAKD,iBACtEmC,GAKnB,OA7J2BsB,CAAc/D,EAAiBjP,EAAMgP,GAS5D,GARImC,IACAnR,EAAOmR,GAILnR,GAAQA,EAAKgB,KACfhB,QAAaiT,EAAcjE,KAE1BmB,GAAqBnB,EAAIlM,eAAe0M,KAAKD,iBAAmBvP,IAASA,EAAKkT,cAAe,CAC9F,MAAMC,QAAcC,EAAAA,EAAAA,8BAA6B,CAAErS,cAAeiO,EAAKwB,oBAAqB,IAAM,KAAM,CACpG6C,UAAmBrT,EAAKqT,YAE5B,GAAIF,GAASA,EAAM9Q,OAAS,EAAG,CAC3B,MAAMiR,EAAoBH,EAAMxJ,QAAO4J,GAAQA,EAAKC,sBAAwBC,EAAAA,sBAAsBC,UAC9FJ,GAAqBA,EAAkBjR,OAAS,IAChDrC,QAAaqL,EAAAA,EAAAA,aACT,CAAEtK,cAAeiO,GACjB,CACIhO,GAAIhB,EAAKgB,GACTkS,cAAeI,EAAkB,GAAGK,gBAM1D,MAAOvS,GACL4N,EAAI1N,UAAUF,MAAM,qCAAqCA,KACzD4O,QAAQC,IAAI,qBAAsB7O,GAClCpB,QAAaiT,EAAcjE,GAE/B,OAAOhP,EASX,SAAS8P,EAAgCd,EAAqB4E,GAE1D,IAAIC,GAAW,EAMf,OAPcD,GAEc,oEAFdA,EAEKnR,OACfuM,EAAI1N,UAAUwS,YAAY,gDAC1BD,GAAW,GAGRA,EAGJ/T,eAAemT,EAAcjE,GAChC,MAAM9N,QAAgB6S,EAAAA,EAAAA,iBAAgB,CAAEhT,cAAeiO,GAAa,IACpE,GAAI9N,GAAWA,EAAQF,GAGnB,OAFAgO,EAAIlM,eAAeoM,QAAQW,cAAc3O,EAAS8N,EAAIlM,eAAe0M,KAAKD,iBAEnErO,EA4Gf,SAASiR,EAAkBxP,GACvB,MAAO,CACH/C,aAAc+C,EAAS/C,aACvBsF,UAAWvC,EAASuC,UACpBG,YAAa1C,EAAS0C,YACtBE,qBAAsB5C,EAAS4C,sBAAwB,EACvDC,OAAQ7C,EAAS6C,OACjBhG,UAAWmD,EAASnD,UACpBmB,SAAUgC,EAAShC,SACnBuF,MAAOvD,EAASuD,MAChB8N,SAAUrR,EAASqR,SACnBC,gBAAiBtR,EAASsR,gBAC1BtO,WAAY,GACZC,oBAAqBjD,EAASiD,oBAC9BE,gBAAgB,EAChBE,gBAAgB,EAChBgG,oBAAqBrJ,EAASqJ,sBA1MtC,SAAK+C,GACDA,EAAA,SACAA,EAAA,SAFJ,CAAKA,IAAAA,EAAe,y7BCrBLjP,eAAe6M,EAAY2E,EAAgBtC,GACtD,OAAOW,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,OAAS0B,GACxDrQ,MAAKjB,GACKA,IAEVmB,OAAMC,wECHAtB,eAAe4K,EAC1B1K,EACAC,GAEA,IAAKD,EACD,MAAO,CAAEA,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,GAAIL,EAAK0D,SAAW1D,EAAK0D,QAAQrB,OAAS,EAAG,CACzC,MAAMoI,EAAazK,EAAK0D,QAAQnD,KAAIoD,GACzBA,EAAOC,MAAQ,KAG1B,OAAOsQ,EAAAA,EAAAA,0BAAyB,CAAEnT,cAAed,GAAiBD,EAAKgB,GAAIyJ,GACtExJ,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAGE,CAAEpB,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAI3H,MAAkC,CAAE1B,KAAAA,EAAMI,OAAQ,2ECzBvCN,eAAeqU,EAC1BnU,EACAwI,EACAvI,GAEA,OAAKD,GAIE4S,EAAAA,EAAAA,sBAAqB,CAAE7R,cAAed,GAAiBD,EAAKgB,GAAIwH,GAClEvH,MAAKC,IAIgC,CAAElB,KAFfoU,MAAMC,QAAQnT,GAAWA,EAAQ,GAAKA,EAEHd,OAAQ,cAEnEe,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,8BAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAf5G,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,6ECNhDP,eAAeyK,EAC1BvK,EACAyK,EACAxK,GAEA,OAAKD,GAIEkU,EAAAA,EAAAA,0BAAyB,CAAEnT,cAAed,GAAiBD,EAAKgB,GAAIyJ,GACtExJ,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAGE,CAAEpB,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAX5G,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,6ECkC/D,QAjCOP,eACHE,EACAqI,EACAC,EACArI,GAEA,IAAKD,EAAKa,QAEN,OADAZ,EAAcqB,UAAUQ,QAAQ,qEACzB,CAAE9B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,iBAG3D,IAQI,MAAO,CAAEL,WAPa8H,EAAAA,iBAAAA,yBAClB,CAAE/G,cAAed,GACjBD,EAAKgB,GACLqH,EACAC,EACAtI,EAAKa,SAEeT,OAAQ,WAClC,MAAOgB,GACL,MAAMkT,EAAgBlT,EAItB,OAHAnB,EAAcqB,UAAUC,MAAMH,GAC9BnB,EAAcqB,UAAUC,MAAM,oCAEvB,CACHvB,UAAMjB,EACNqB,OAAQ,SACRoB,aAAc,CAAEC,iBAAkB6S,EAAc5S,2ECnC7C5B,eAAeqJ,EAC1BnJ,EACAuU,EACAtU,GAEA,OAAKD,GAASA,EAAKG,WAAuD,IAA1CoU,EAA+BlS,QAIxDmS,EAAAA,EAAAA,uCAAsC,CAAEzT,cAAed,GAAiBD,EAAKgB,GAAIuT,GACnFtT,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,mDAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAZ5G,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,gqBCNhDP,eAAemK,EAC1BjK,EACAqI,EACA6B,EACAjK,EACAkK,GAEA,OAAIA,EAKRrK,eACIE,EACAqI,EACA6B,EACAjK,GAEA,IAAKD,IAASA,EAAKG,UACf,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MAAMgO,EAAgBrO,EAAKG,UAAUwJ,QAAOlJ,GAAYA,EAASoI,SAAWR,IAE5E,GAA6B,IAAzBgG,EAAchM,OACd,MAAO,CAAErC,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,qBAG3D,MAAMiO,EAAY5N,EAAA,GAAkB2N,EAAc,IAIlD,OAFAC,EAAa3N,SAAWuJ,GAEjBsE,EAAAA,EAAAA,sBAAqB,CAAEzN,cAAed,GAAiBD,EAAKgB,GAAI,CAACsN,GAAe,MAClFrN,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IAAQ,IAAA+B,EACX,IAAIF,EAOD,IAADV,EAHF,OAFAtC,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,8BAEX,0EAAflK,EAAMqB,MACS,4EAAfrB,EAAMqB,MAENQ,EAAmB,CACfjD,UAAMjB,EACNqB,OAAQ,SACRC,UAAW,iBAEXmB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZY,EAAEnB,EAAMQ,YAAI,IAAAW,OAAA,EAAVA,EAAYV,mBAE5BoB,IAGXA,EAAmB,CACfjD,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZwB,EAAE/B,EAAMQ,YAAI,IAAAuB,OAAA,EAAVA,EAAYtB,mBAE5BoB,MAvDJwR,CAA6DzU,EAAMqI,EAAY6B,EAAajK,GA2D3GH,eACIE,EACAqI,EACA6B,EACAjK,GAEA,IAAKD,IAASA,EAAKG,UACf,MAAO,CAAEH,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,aAG3D,MAAMgO,EAAgBrO,EAAKG,UAAUwJ,QAAOlJ,GAAYA,EAASoI,SAAWR,IAE5E,GAA6B,IAAzBgG,EAAchM,OACd,MAAO,CAAErC,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,qBAG3D,MAAMiO,EAAY5N,EAAA,GAAkB2N,EAAc,IAGlD,OAFAC,EAAa3N,SAAW1B,KAAKC,IAAIgL,EAAajK,EAAc6C,eAAeC,IAAIC,OAAOrE,4BAA8B,KAE7G6P,EAAAA,EAAAA,sBAAqB,CAAEzN,cAAed,GAAiBD,EAAKgB,GAAI,CAACsN,GAAe,MAClFrN,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IAAQ,IAAAC,EAGX,OAFApB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,8BACI,CAC9BtL,UAAMjB,EACNqB,OAAQ,SAERoB,aAAc,CAAEC,iBAAkBL,EAAMM,SACxCC,kBAA6B,QAAZN,EAAED,EAAMQ,YAAI,IAAAP,OAAA,EAAVA,EAAYQ,sBAxFpC6S,CAAqD1U,EAAMqI,EAAY6B,EAAajK,mECVhFH,eAAemM,EAC1BjM,EACA2U,EACA1U,GAEA,OAAKD,GAASA,EAAKG,WAIZqO,EAAAA,EAAAA,sBAAqB,CAAEzN,cAAed,GAAiBD,EAAKgB,GAAI2T,EAAmB,MACrF1T,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAOC,IACJnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,+BAEI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,OAXtG,CAAEpB,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,gqBCNhDP,eAAegM,EAC1B9L,EACA4U,EACA3U,GAEA,OAAKD,GAIEqL,EAAAA,EAAAA,aAAY,CAAEtK,cAAed,GAAeS,EAAAA,EAAA,GAAOkU,GAAiB,IAAE5T,GAAIhB,EAAKgB,MACjFC,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,6BAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAZ5G,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,6ECNhDP,eAAe+U,EAC1B7U,EACA8U,EACA7U,GAEA,OAAKD,GAIEqL,EAAAA,EAAAA,aACH,CAAEtK,cAAed,GACjB,CACIe,GAAIhB,EAAKgB,GACTkS,cAAe4B,IAGlB7T,MAAKC,IACgC,CAAElB,KAAMkB,EAASd,OAAQ,cAE9De,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,oCAGI,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAlB5G,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,6EC6B/D,QA7BOP,eACHE,EACA+J,EACA9J,GAEA,OAAKD,EAIE8H,EAAAA,iBAAAA,YACH,CAAE/G,cAAed,GACjB,CACIe,GAAIhB,EAAKgB,GACT4F,gBAAiBmD,IAGpB9I,MAAKC,IACwC,CAAElB,KAAMkB,EAASd,OAAQ,cAGtEe,OAAMC,IACHnB,EAAcqB,UAAUQ,QAAQV,GAChCnB,EAAcqB,UAAUgK,MAAM,iDAGvB,CAAEtL,UAAMjB,EAAWqB,OAAQ,SAAUoB,aAAc,CAAEC,iBAAkBL,EAAMM,aAnBjF,CAAE1B,UAAMjB,EAAWqB,OAAQ,SAAUC,UAAW,wFCZxD,MAAM0U,UAA8BjR,EAAAA,EAChC,mBACH,GAAIO,KAAK8H,cACL,OAGJ,MAAMjL,QAAgB8T,EAAAA,EAAAA,IAAgB,IAAIC,EAAAA,GAAqB5Q,KAAKpE,cAAc6C,eAAeoS,aAAc7Q,KAAKpE,eAEhHiB,GACAmD,KAAKC,MAAQpD,EACbmD,KAAKgI,QAAU,SAEfhI,KAAKgI,QAAU,QAGnBhI,KAAK8H,eAAgB,0DCrBjBgJ,4pBAAZ,SAAYA,GACRA,EAAA,gCACAA,EAAA,oBACAA,EAAA,sCACAA,EAAA,8BACAA,EAAA,sCACAA,EAAA,4CACAA,EAAA,sCACAA,EAAA,wDACAA,EAAA,oDATJ,CAAYA,IAAAA,EAAkB,KCiCvB,MAAMC,UAA0BrR,EAAAA,EAqTnCC,YAAY/D,GACRgE,MAAMhE,GApNY,KAAAoV,iBAAsC,GAYtC,KAAAC,eAAyB,EAMzB,KAAAC,oBAA8B,GAsG9B,KAAAC,uBAAiC,EAwBjC,KAAAC,iCAA2C,GAiE3C,KAAAC,qBAA+B,GAIjDrR,KAAKsR,cAAgB,IAAIZ,EAAAA,EAAsB9U,GAC/CoE,KAAKE,iBAAmB,GACxBF,KAAKG,qBAAuB,GAG5BH,KAAKuR,gDAAkD3V,EAAc6C,eAAeC,IAAIC,OACnF6S,+CAGLxR,KAAKyR,2CAA6C7V,EAAc6C,eAAeC,IAAIC,OAC9E+S,0CA9TC,mBACN,OAAO1R,KAAKsR,cAKN,iBACN,OAAOtR,KAAK2R,YAKN,sBACN,OAAO3R,KAAKE,iBAKN,0BACN,OAAOF,KAAKG,qBAKN,sBACN,OAAOH,KAAK4R,iBAKN,2BACN,OAAO5R,KAAK6R,sBAKN,iBACN,OAAO7R,KAAK8R,YAKN,qBACN,OAAO9R,KAAK+R,gBAKN,4CACN,OAAO/R,KAAKgS,uCAKN,sBACN,OAAOhS,KAAKiS,iBAKN,mCACN,OAAOjS,KAAKkS,8BAKN,yBACN,OAAOlS,KAAKmS,oBAKN,0BACN,OAAOnS,KAAKoS,qBAKN,iBACN,OAAOpS,KAAKqS,YAKN,wBACN,OAAOrS,KAAKsS,mBAMN,gBACN,OAAOtS,KAAKuS,gBAKN,sBACN,OAAOvS,KAAKgR,iBAKN,wBACN,OAAOhR,KAAKwS,mBAKN,oBACN,OAAOxS,KAAKiR,eAKN,yBACN,OAAOjR,KAAKkR,oBAKN,4BACN,OAAOlR,KAAKyS,uBAKN,kCACN,OAAOzS,KAAK0S,6BAKN,iCACN,OAAO1S,KAAK2S,4BAKN,qDACN,OAAO3S,KAAKuR,gDAKN,gDACN,OAAOvR,KAAKyR,2CAKN,mCACN,OAAOzR,KAAK4S,8BAKN,yCACN,OAAO5S,KAAK6S,oCAKN,qCACN,OAAO7S,KAAK8S,gCAKN,8BACN,OAAO9S,KAAK+S,yBAKN,wCACN,OAAO/S,KAAKgT,mCAKN,gCACN,OAAOhT,KAAKiT,2BAKN,iCACN,OAAOjT,KAAKkT,4BAKN,sCACN,OAAOlT,KAAKmT,iCAKN,uCACN,OAAOnT,KAAKoT,kCAKN,oCACN,OAAOpT,KAAKqT,+BAKN,2BACN,OAAOrT,KAAKsT,sBAKN,4BACN,OAAOtT,KAAKmR,uBAKN,4CACN,OAAOnR,KAAKuT,uCAKN,wCACN,OAAOvT,KAAKwT,mCAKN,yCACN,OAAOxT,KAAKyT,oCAKN,sCACN,OAAOzT,KAAKoR,iCAKN,wCACN,OAAOpR,KAAK0T,mCAKN,+BACN,OAAO1T,KAAK2T,0BAKN,8BACN,OAAO3T,KAAK4T,yBAKN,yCACN,OAAO5T,KAAK6T,oCAKN,mCACN,OAAO7T,KAAK8T,8BAGN,uCACN,MAAM,gBAAEC,EAAe,MAAEC,GAAUhU,KAAKpE,cAAc6C,eACtD,SAAUuV,GAAsB,MAAbA,EAAMC,KAAeF,IAAmBC,EAAME,gBAK3D,oBACN,OAAOlU,KAAKmU,eAKN,+BACN,OAAOnU,KAAKoU,0BAKN,yBACN,OAAOpU,KAAKqU,oBAKN,iCACN,OAAOrU,KAAKsU,4BAqBTC,iBAAiB1Y,GAUpB,OALAmE,KAAK2R,YAAc9V,EAAM2Y,cACzBxU,KAAK4R,iBAAmB/V,EAAM4Y,mBAC9BzU,KAAKE,iBAAmBrE,EAAM2Y,cAAchN,iBAAmB,GAC/DxH,KAAKG,qBAAuBtE,EAAM2Y,cAAc7M,qBAAuB,GAEhE7H,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,4BAA4BF,GAM/B,OAFAmE,KAAKE,iBAAmBrE,EAAMyL,mBAEvBxH,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,gCAAgCF,GAMnC,OAFAmE,KAAKG,qBAAuBtE,EAAM6L,uBAE3B5H,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD2Y,2BAA2B7Y,GAM9B,OAFAmE,KAAK6R,sBAAwBhW,EAAM8Y,wBAE5B7U,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD6Y,iBAAiB/Y,GAGpB,OAFAmE,KAAK8R,YAAcjW,EAAMgZ,cAElB/U,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,4BAA4BF,GAM/B,OAFAmE,KAAKiS,iBAAmBpW,EAAMwL,mBAEvBvH,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,qCAAqCF,GAMxC,OAFAmE,KAAKkS,8BAAgCrW,EAAMiZ,gCAEpChV,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,+BAEHF,GAEAmE,KAAKmS,oBAAsBtW,EAAMkZ,sBAGjC,OAAOjV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,gCAEHF,GAEAmE,KAAKoS,qBAAuBvW,EAAMmZ,uBAGlC,OAAOlV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,yCAAyCF,GAM5C,OAFAmE,KAAK0S,6BAA+B7W,EAAMoZ,+BAEnCnV,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,wCAEHF,GAEAmE,KAAK2S,4BAA8B9W,EAAMqZ,8BAGzC,OAAOpV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,yCAEHF,GAEAmE,KAAK4S,8BAAgC/W,EAAMsZ,gCAG3C,OAAOrV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,+CAEHF,GAEAmE,KAAK6S,oCAAsChX,EAAMuZ,sCAGjD,OAAOtV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,2CAEHF,GAEAmE,KAAK8S,gCAAkCjX,EAAMwZ,kCAG7C,OAAOvV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,oCAAoCF,GAIvCmE,KAAK+S,yBAA2BlX,EAAMyZ,2BAGtC,OAAOxV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,8CAEHF,GAEAmE,KAAKgT,mCAAqCnX,EAAM0Z,qCAGhD,OAAOzV,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,sCAAsCF,GAIzCmE,KAAKiT,2BAA6BpX,EAAM2Z,6BAGxC,OAAO1V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,uCAAuCF,GAI1CmE,KAAKkT,4BAA8BrX,EAAM4Z,8BAGzC,OAAO3V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,4CAA4CF,GAI/CmE,KAAKmT,iCAAmCtX,EAAM6Z,mCAG9C,OAAO5V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,iCAEHF,GAEAmE,KAAKsT,sBAAwBzX,EAAM8Z,wBAGnC,OAAO7V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,6CAEHF,GAEAmE,KAAKoT,kCAAoCvX,EAAM+Z,oCAG/C,OAAO9V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,0CAEHF,GAEAmE,KAAKqT,+BAAiCxX,EAAMga,iCAG5C,OAAO/V,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C+Z,qBAAqBja,GAAoE,IAAA+E,EAM5F,OALAZ,KAAK+R,gBAAkBlW,EAAMka,kBAG7B/V,KAAKgS,wCAAmE,QAA1BpR,EAAA/E,EAAMkH,4BAAoB,IAAAnC,OAAA,EAA1BA,EAA4BoV,yCAAyC,EAE5GlW,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDka,qBAAqBpa,GAIxB,OAHAmE,KAAK+R,qBAAkBrX,EACvBsF,KAAKgS,4CAAyCtX,EAEvCoF,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDma,wBAAwBra,GAM3B,OAFAmE,KAAKsS,mBAAqBzW,EAAMsa,qBAEzBrW,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDqa,iBAAiBva,GAGpB,OAFAmE,KAAKqS,YAAcxW,EAAMwa,cAElBvW,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDua,eAAeza,GAGlB,OAFAmE,KAAKgR,iBAAmBhR,KAAKgR,iBAAiB1L,QAAOiR,GAAYA,EAAS5Z,KAAOd,EAAM2a,iBAEhF1W,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD0a,qBAAqB5a,GAGxB,OAFAmE,KAAKgR,iBAAmBhR,KAAKgR,iBAAiB1L,QAAOiR,GAAYA,EAAS5Z,KAAOd,EAAM2a,iBAEhF1W,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD2a,YAAY7a,GAEf,MAAM,IAAE8a,EAAG,eAAEC,EAAc,aAAEC,GAAiBhb,EAAMkH,sBAAwB,GAEtE+T,EAAaza,EAAAA,EAAA,GAAQR,EAAM0a,UAAa,CAAEI,IAAAA,EAAKC,eAAAA,EAAgBC,aAAAA,IAIrE,OAFA7W,KAAKgR,iBAAmB,CAAC8F,KAAkB9W,KAAKgR,kBAEzClR,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDgb,kBAAkBlb,GAGrB,OAFAmE,KAAKgR,iBAAmB,CAACnV,EAAM0a,YAAavW,KAAKgR,kBAE1ClR,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDib,wBAAwBnb,GAG3B,OAFAmE,KAAKwS,mBAAqB3W,EAAMob,qBAEzBnX,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDmb,oBAAoBrb,GAGvB,OAFAmE,KAAKiR,eAAiBkG,OAAOtb,EAAMub,UAAUC,QAAQ,IAE9CvX,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,+BAA+BF,GAMrC,IAAAyb,EAAAC,EACGvX,KAAKkR,oBAAsBrV,EAAM2b,sBACjC,MAAMC,EAAczX,KAAK0X,aAAa/b,KAAKiL,aACrC+Q,EAAoB3X,KAAK0X,aAAa/b,KAAKmL,oBAC3C8Q,EAAoB5X,KAAK0X,aAAa/b,KAAKkL,QAC3CgR,EAAa7X,KAAK0X,aAAa/b,KAAKoL,MACpC+Q,EAAYjc,MAAAA,OAAK,EAALA,EAAO6K,KAezB,OAbI+Q,IAAgB5b,EAAM2b,uBACtBI,IAAsB/b,EAAM2K,mBAC5BmR,IAAsB9b,EAAM4K,2BACZ/L,IAAfmd,IAAyC,QAAjBP,EAAIO,EAAW,UAAE,IAAAP,OAAA,EAAbA,EAAetW,sBAAgCtG,IAAdod,IAAuC,QAAhBP,EAAIO,EAAU,UAAE,IAAAP,OAAA,EAAZA,EAAcvW,qBAEjGhB,KAAK0X,aAAaxQ,mBAAmB,CACvCC,SAAUtL,EAAM2b,sBAChBhR,kBAAmB3K,EAAM2K,kBACzBC,oBAAqB5K,EAAM4K,oBAC3BC,KAAM7K,EAAM6K,OAIb5G,QAAQC,QAA+B,CAAEhE,OAAQ,YAUrD,sBAAsBF,GAEzB,aADMmE,KAAK0X,aAAaK,gBAAgB,CAAElQ,uBAAwBhM,EAAMgM,yBACjE/H,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,kCAEHF,GAQAmE,KAAKyS,uBAAyB5W,EAAMmc,yBAGpC,OAAOlY,QAAQC,QADuB,CAAEhE,OAAQ,YAK7Ckc,qBAAqBpc,GAExB,OADAmE,KAAKpE,cAAc6C,eAAeoM,QAAQqN,2BACnCpY,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDoc,kBAAkBtc,GACrB,MAAM,eAAEuc,GAAmBpY,KAAKpE,cAAc6C,eAG1CuB,KAAKqY,gBACLD,EAAeE,oBAAoBxH,EAAmByH,eAAgB,CAClEF,eAAgBrY,KAAKqY,eACrBrC,sCAAuChW,KAAKgW,wCAIhDhW,KAAKuS,iBAAmBvS,KAAKuS,gBAAgBvU,OAAS,GACtDoa,EAAeE,oBAAoBxH,EAAmB0H,SAAUxY,KAAKuS,iBAGrEvS,KAAK+F,mBACLqS,EAAeE,oBAAoBxH,EAAmB2H,kBAAmB,CAAE1S,kBAAmB/F,KAAK+F,oBAGnG/F,KAAK0Y,eACLN,EAAeE,oBAAoBxH,EAAmB6H,cAAe,CAAED,cAAe1Y,KAAK0Y,gBAG3F1Y,KAAK4Y,6BACLR,EAAeE,oBAAoBxH,EAAmB+H,kBAAmB,CACrED,4BAA6B5Y,KAAK4Y,8BAItC5Y,KAAK8Y,mBACLC,OAAOX,eAAeY,QAAQlI,EAAmBmI,kBAAmBjZ,KAAK8Y,mBAGzE9Y,KAAKkZ,4BACLH,OAAOX,eAAeY,QAAQlI,EAAmBqI,2BAA4BnZ,KAAKkZ,4BAGlFlZ,KAAKoZ,0BACLL,OAAOX,eAAeY,QAAQlI,EAAmBuI,yBAA0BrZ,KAAKoZ,yBAAyBE,YAI7G,MAAMC,EAAWC,OAAOC,KAAKzZ,KAAKqR,sBAAsBhR,QAAO,CAACqZ,EAAsBC,KAC9E3Z,KAAKqR,qBAAqBsI,GAAKC,yBAC/BF,EAAaC,GAAO3Z,KAAKqR,qBAAqBsI,IAE3CD,IACR,IAMH,OAJIF,OAAOC,KAAKF,GAAUvb,OAAS,GAC/Boa,EAAeE,oBAAoBxH,EAAmB+I,oBAAqB,CAAEC,oBAAqBP,IAG/FzZ,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrDge,4BAA4Ble,GAG/B,OAFAmE,KAAKmR,uBAAyBgG,OAAOtb,EAAMub,UAAUC,QAAQ,IAEtDvX,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD,8CAA8CF,GAIjDmE,KAAK0T,mCAAqC7X,EAAMme,qCAGhD,OAAOla,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,+CAA+CF,GAIlDmE,KAAKyT,oCAAsC5X,EAAMoe,sCAGjD,OAAOna,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,4CAA4CF,GAI/CmE,KAAKoR,iCAAmCvV,EAAMqe,mCAG9C,OAAOpa,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,kDAEHF,GAEAmE,KAAKuT,uCAAyC1X,EAAMse,yCAGpD,OAAOra,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,8CAEHF,GAEAmE,KAAKwT,mCAAqC3X,EAAMue,qCAGhD,OAAOta,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,qCAEHF,GAEAmE,KAAK2T,0BAA4B9X,EAAMwe,4BAGvC,OAAOva,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,oCAEHF,GAEAmE,KAAK4T,yBAA2B/X,EAAMye,2BAGtC,OAAOxa,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,+CAEHF,GAEAmE,KAAK6T,oCAAsChY,EAAM0e,sCAGjD,OAAOza,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,qCAEHF,GAEAmE,KAAKoU,0BAA4BvY,EAAM2e,4BAGvC,OAAO1a,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,yCAEHF,GAKAmE,KAAK8T,8BAAgCjY,EAAM4e,gCAG3C,OAAO3a,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,mCAAmCF,GAYtCmE,KAAK2T,0BAA4B9X,EAAMwe,iCAEE3f,IAArCmB,EAAMye,6BACNta,KAAK4T,yBAA2B/X,EAAMye,iCAGD5f,IAArCmB,EAAMyZ,6BACNtV,KAAK+S,yBAA2BlX,EAAMyZ,iCAGP5a,IAA/BmB,EAAMsa,uBACNnW,KAAKsS,mBAAqBzW,EAAMsa,2BAGEzb,IAAlCmB,EAAM8Y,0BACN3U,KAAK6R,sBAAwBhW,EAAM8Y,8BAGXja,IAAxBmB,EAAMgZ,gBACN7U,KAAK8R,YAAcjW,EAAMgZ,eAGzBhZ,EAAMqe,qCACNla,KAAKoR,iCAAmCvV,EAAMqe,oCAIlD,OAAOpa,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,0BAA0BF,GAI7BmE,KAAKmU,eAAiBtY,EAAM6e,iBAG5B,OAAO5a,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C4e,uBAAuB9e,GAM1B,OADAmE,KAAKqR,qBAAqBxV,EAAM8d,KAAO9d,EAAMie,oBACtCha,QAAQC,QAA+B,CAAEhE,OAAQ,YAIrD6e,uBAAuB/e,GAC1B,OAAOmE,KAAKqR,qBAAqBxV,EAAM8d,KAIpC,+BAEH9d,GAEAmE,KAAKqU,oBAAsBxY,EAAMgf,sBAGjC,OAAO/a,QAAQC,QADuB,CAAEhE,OAAQ,YAK7C,uCAEHF,GAEAmE,KAAKsU,4BAA8BzY,EAAMif,8BAGzC,OAAOhb,QAAQC,QADuB,CAAEhE,OAAQ,YAI7C,mBACCiE,KAAK8H,sBAIH9H,KAAKsR,cAAcyJ,aAEzB/a,KAAKgb,iBACLhb,KAAK8H,eAAgB,EACrB9H,KAAKgI,QAAU,QACfhI,KAAKE,iBAAmB,GACxBF,KAAKG,qBAAuB,IAIxB8a,kBAAkBpf,GAEtB,OADAmE,KAAKpE,cAAc6C,eAAe2Z,eAAe8C,yBAC1Cpb,QAAQC,QAA+B,CAAEhE,OAAQ,YAGpDif,iBACJ,MAAM,eAAE5C,GAAmBpY,KAAKpE,cAAc6C,eAE9C,GAAIuB,KAAKmb,iCAAkC,CAAC,IAADC,EACvC,MAAM/C,EAAiBD,EAAeiD,oBAAoBvK,EAAmByH,gBACvEhC,EAAW6B,EAAeiD,oBAAoBvK,EAAmB0H,UAEvExY,KAAK+R,gBAAkBuJ,GAAAA,CAAIjD,EAAgB,kBAC3CrY,KAAKgS,uCAAyCsJ,GAAAA,CAAIjD,EAAgB,yCAClErY,KAAKgR,iBAAoBuF,GAAYxG,MAAMC,QAAQuG,GAAYA,EAAW,GAC1EvW,KAAKwS,mBAAqB8I,GAAAA,CAAIlD,EAAeiD,oBAAoBvK,EAAmB2H,mBAAoB,qBACxGzY,KAAKiR,eAAiBqK,GAAAA,CAAIlD,EAAeiD,oBAAoBvK,EAAmB6H,eAAgB,iBAChG3Y,KAAK0S,6BAA+B4I,GAAAA,CAChClD,EAAeiD,oBAAoBvK,EAAmB+H,mBACtD,+BAEJ7Y,KAAKqR,qBACDiK,GAAAA,CAAIlD,EAAeiD,oBAAoBvK,EAAmB+I,qBAAsB,wBAA0B,GAC9G7Z,KAAKsS,mBAAwF,QAAtE8I,EAAGrC,OAAOX,eAAemD,QAAQzK,EAAmBmI,0BAAkB,IAAAmC,EAAAA,OAAI1gB,EACjGsF,KAAKkT,4BAA8B6F,OAAOX,eAAemD,QAAQzK,EAAmBqI,4BACpFnZ,KAAK2T,4BAA6BoF,OAAOX,eAAemD,QAAQzK,EAAmBuI,0BAKvFrZ,KAAKib,kBAAkB,MA3/BfvR,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,kCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,4CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,yCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,6CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,0CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,uCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,oCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,8DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,2DAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,kDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,4CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,yCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,0CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,uCAOCF,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,+BAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,0CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,uCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,mCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,8CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,2CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,oDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,iDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,uEAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,oEAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,kEAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,+DAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,kDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,uDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,oDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,6CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,0DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,uDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,kDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,+CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,yDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,sDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,mDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,6CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,0CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,8CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,2CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,8DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,2DAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,0DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,uDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,wDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,qDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,0DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,uDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,iDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,8CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,gDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,6CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2DAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,qDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,kDAICF,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,sDAKGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,sCAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,mCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,iDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,8CAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,2CAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,wCAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,mDAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,gDAIGF,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,4CAkBXD,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sCAePH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gDAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sCAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,oDAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8CAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,+CAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,wDAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,wDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,mDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,6DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,qDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,gDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0CASPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,6CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sCAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,oCAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0CAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iCAaPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uCAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,6CAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yCAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8CAsCPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,qCAOPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iDAkBPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,0CAOPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,uCA0DPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iDAQPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,6DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,2DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,iEAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,6DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,oDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,mDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8DAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,oDAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,wDAePH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,kDA4CPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yCAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4CAWPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,4CAMPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,8CAYPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,sDA0BPH,EAAAA,EAAAA,IAAA,CADCG,EAAAA,IAAM,yJC1/BX,SAAe2R,SAAAA,IAAwC,YAAa/b,EAAAA,yECApE,SAAe+b,SAAAA,IAA4C,gBAAiBzK,EAAAA,yICerE,MAAM0K,EAKT9b,YAAYkR,EAAmCpS,GAOxC,KAAAid,YAAc,SAAAC,EAAA,MAAM,qBAAqB3b,KAAK6Q,YAAY+K,uBAAqC,QAA5BD,EAAc3b,KAAKc,iBAAS,IAAA6a,EAAAA,EAAI,KAEnG,KAAAE,mBAAqB,IAAM,OAE3B,KAAAC,cAAgB,IAAiB,OAVpC9b,KAAK6Q,YAAcA,EACfpS,IACAuB,KAAKc,WAAYC,EAAAA,EAAAA,IAAatC,KAoBnChD,eAAesgB,EAAiBlgB,EAA8B8O,GACjE,MAAMqR,QAAkBC,EAAAA,EAAAA,GAAatR,GACrC,GAAIqR,QAAmCthB,IAAtBshB,EAAUrgB,KAAKgB,GAC5B,OAAOqf,EAMf,SAAeE,EAAAA,EAAAA,IAA2B,CACtCC,GAAI,sDACJtS,OAAmCkS,EACnClgB,MArBiBugB,GACV,IAAIX,EAAsBW,EAAU3d,eAAeoS,YAAauL,EAAU3d,8FChC9E,SAASwd,EAAatR,GACzB,OAAO0R,EAAAA,EAAAA,SACH,IAAIC,EAAAA,GAA6B,YAAa7c,EAAAA,EAAekL,EAAIlM,eAAeoS,YAAalG,EAAIlM,gBACjGkM,qECqBHD,0BAdE,MAAMkG,EAGTjR,YAAYkR,GAIL,KAAA6K,YAAc,IAAM,0BAA0B1b,KAAK6Q,YAAY+K,kCAAkC5b,KAAK6Q,YAAY/P,YAElH,KAAA+a,mBAAqB,IAAM,eAE3B,KAAAC,cAAgB,IAAiB,UAPpC9b,KAAK6Q,YAAcA,IAU3B,SAAKnG,GACDA,EAAA,SACAA,EAAA,SAFJ,CAAKA,IAAAA,EAAe,KA2Db,MAMP,GANyCwR,EAAAA,EAAAA,IAA2B,CAChEC,GAAI,oDACJtS,OA/CGpO,eAA+BI,EAA6B8O,GAC/D,MACMC,EADsBD,EAAIlM,eAAeoM,QAAQ0R,wBACDxR,MAAM,KAC5D,IAAIyR,EAAiB,KACrB,MAAMtR,EAAkBP,EAAIlM,eAAe0M,KAAKD,gBAShD,IAAIwM,EAEJ,IARKxM,GAAmBN,EAAgB,KAAOF,EAAgBU,OACzDF,GAAmBN,EAAgB,KAAOF,EAAgBW,QAE5DmR,EAAiB5R,EAAgB,IAKjC4R,EACA,IACI9E,QAAqBpM,EAAAA,EAAAA,WAAU,CAAE5O,cAAeiO,EAAKY,YAAa,QAAUiR,GAC9E,MAAOzf,GACL4N,EAAI1N,UAAUF,MAAM,+DACpB4N,EAAI1N,UAAUyO,UAAU3O,GAIhC,MAAMif,QAAkBC,EAAAA,EAAAA,GAAatR,GACrC,GAAIqR,QAAmCthB,IAAtBshB,EAAUrgB,KAAKgB,GAC5B,OAAI+a,GAAgBA,EAAalb,SAAWwf,EAAUrgB,KAAKa,SAAWkb,EAAalb,QAAUwf,EAAUrgB,KAAKa,QACjGsD,QAAQC,QAAQ2X,IAGpB+E,EAAAA,EAAAA,WAAU,CAAE/f,cAAeiO,GAAOqR,EAAUrgB,KAAKgB,GAAI,GACvDC,MAAKjB,IACFgP,EAAIlM,eAAeoM,QAAQ6R,sBAAsB/gB,EAAMuP,GAChDvP,KAEVmB,OAAMC,IACH4N,EAAI1N,UAAUF,MAAM,sBACpB4N,EAAI1N,UAAUyO,UAAU3O,OAWpClB,MAzDiBugB,GACV,IAAIxL,EAAqBwL,EAAU3d,eAAeoS,sFCjBtD,MAAMyL,EAST3c,YACIga,EACAgD,EACA9L,EACApS,GAWG,KAAAid,YAAc,SAAAC,EAAA,MAAM,OAAO3b,KAAK2Z,iBAAiB3Z,KAAK6Q,YAAY+K,uBAAqC,QAA5BD,EAAc3b,KAAKc,iBAAS,IAAA6a,EAAAA,EAAI,KAE3G,KAAAE,mBAAqB,IAAM7b,KAAK2Z,IAEhC,KAAAmC,cAAgB,IAAiB,WAbpC9b,KAAK6Q,YAAcA,EACnB7Q,KAAK2c,iBAAmBA,EACxB3c,KAAK2Z,IAAMA,EAEPlb,IACAuB,KAAKc,WAAYC,EAAAA,EAAAA,IAAatC,KAWnChD,eAAemhB,EAAoC/gB,EAA+B8O,GACrF,MAAMkS,EC7CC,ID6CmBC,EAAkBjhB,EAAM8gB,kBAAkBhS,GAIpE,aAFMkS,EAAkB9B,aAEjB8B,EAGI,SAASrB,EACpB7B,EACAgD,GAEA,OAAOT,EAAAA,EAAAA,IAA2B,CAC9BrS,OAAuB+S,EACvB/gB,MAAQkhB,GACG,IAAIT,EAAiB3C,EAAKgD,EAAkBI,EAAKte,eAAeoS,YAAakM,EAAKte,uME3D9F,SAASue,EAAiBrS,GAC7B,OAAOsS,EAAAA,EAAAA,SACH,IAAIX,EAAAA,GAAiC,gBAAiBvL,EAAAA,EAAmBpG,EAAIlM,eAAeoS,YAAalG,EAAIlM,gBAC7GkM,2ECFD,MAAMjL,EAWTC,YAAY/D,GAVF,KAAAkM,eAAyB,EAW/B9H,KAAKpE,cAAgBA,EACrBoE,KAAKgI,QAAU,WANT,aACN,OAAOhI,KAAKgI,QAQT,mBACHhI,KAAK8H,eAAgB,EACrB9H,KAAKgI,QAAU,QAKT,qBAA2BkV,GAGjC,OAFAld,KAAKgI,QAAU,WAERkV,IACFtgB,MAAKugB,IACFnd,KAAKgI,QAAU,QACRmV,KAEVrgB,OAAMC,IACH4O,QAAQC,IAAI7O,GACZiD,KAAKgI,QAAU,QAERlI,QAAQsd,OAAOrgB,QA9BtB2M,EAAAA,EAAAA,IAAA,CAAXC,EAAAA,IAAU,+BAEDD,EAAAA,EAAAA,IAAA,CAATE,EAAAA,IAAQ,2zDCfN,IAAKyT,EAkCAC,EAoCAC,EAiBAC,+FAvFZ,SAAYH,GACRA,EAAA,0BACAA,EAAA,gHACAA,EAAA,wKACAA,EAAA,8KACAA,EAAA,wLACAA,EAAA,8MACAA,EAAA,wLACAA,EAAA,0KACAA,EAAA,8FACAA,EAAA,oIACAA,EAAA,4HACAA,EAAA,gHACAA,EAAA,4HACAA,EAAA,sHACAA,EAAA,wIACAA,EAAA,+JACAA,EAAA,gIACAA,EAAA,wKACAA,EAAA,kHACAA,EAAA,sHACAA,EAAA,oHACAA,EAAA,0IACAA,EAAA,8IACAA,EAAA,0IACAA,EAAA,kIACAA,EAAA,4HACAA,EAAA,sLACAA,EAAA,sLACAA,EAAA,sHACAA,EAAA,8HACAA,EAAA,0JA/BJ,CAAYA,IAAAA,EAAS,KAkCrB,SAAYC,GACRA,EAAA,gEACAA,EAAA,0DACAA,EAAA,wHACAA,EAAA,8HACAA,EAAA,wIACAA,EAAA,8JACAA,EAAA,wIACAA,EAAA,0HACAA,EAAA,8CACAA,EAAA,oFACAA,EAAA,4EACAA,EAAA,gEACAA,EAAA,4EACAA,EAAA,oFACAA,EAAA,sEACAA,EAAA,wFACAA,EAAA,8GACAA,EAAA,gFACAA,EAAA,wHACAA,EAAA,kEACAA,EAAA,sEACAA,EAAA,oEACAA,EAAA,0FACAA,EAAA,4GACAA,EAAA,8FACAA,EAAA,0FACAA,EAAA,kFACAA,EAAA,sIACAA,EAAA,sIACAA,EAAA,4EACAA,EAAA,sEACAA,EAAA,8EACAA,EAAA,0GAjCJ,CAAYA,IAAAA,EAAoB,KAoChC,SAAYC,GACRA,EAAAA,EAAA,uBACAA,EAAAA,EAAA,mDACAA,EAAAA,EAAA,mEACAA,EAAAA,EAAA,qDACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,uCACAA,EAAAA,EAAA,+CACAA,EAAAA,EAAA,qCACAA,EAAAA,EAAA,yDACAA,EAAAA,EAAA,mCACAA,EAAAA,EAAA,sDACAA,EAAAA,EAAA,4DACAA,EAAAA,EAAA,sBACAA,EAAAA,EAAA,gDAdJ,CAAYA,IAAAA,EAAa,KAiBzB,SAAYC,GACRA,EAAA,kDACAA,EAAA,mEACAA,EAAA,oDACAA,EAAA,mCACAA,EAAA,sCACAA,EAAA,8CACAA,EAAA,mCACAA,EAAA,wDACAA,EAAA,iCACAA,EAAA,oDACAA,EAAA,2DACAA,EAAA,YAZJ,CAAYA,IAAAA,EAAc,iCC3F1B,IAAIC,EAAsB,EAAQ,IAC9BnE,EAAW,EAAQ,IACnBoE,EAAyB,EAAQ,IAEjCC,EAAcC,WAIlBC,EAAOC,QAAU,SAAgBzc,GAC/B,IAAI0c,EAAMzE,EAASoE,EAAuB1d,OACtCmd,EAAS,GACTa,EAAIP,EAAoBpc,GAC5B,GAAI2c,EAAI,GAAKA,IAAMC,EAAAA,EAAU,MAAM,IAAIN,EAAY,+BACnD,KAAMK,EAAI,GAAIA,KAAO,KAAOD,GAAOA,GAAc,EAAJC,IAAOb,GAAUY,GAC9D,OAAOZ,+BCdT,IAAIe,EAAc,EAAQ,IAI1BL,EAAOC,QAAUI,EAAY,GAAIC,oCCJjC,IAAIC,EAAI,EAAQ,IACZF,EAAc,EAAQ,IACtBT,EAAsB,EAAQ,IAC9BY,EAAkB,EAAQ,KAC1BC,EAAU,EAAQ,KAClBC,EAAQ,EAAQ,IAEhBZ,EAAcC,WACdY,EAAUC,OACVC,EAAQ9jB,KAAK8jB,MACbC,EAAST,EAAYI,GACrBM,EAAcV,EAAY,GAAGW,OAC7BC,EAAgBZ,EAAY,GAAI7G,SAEhC0H,EAAM,SAAUC,EAAGhB,EAAGiB,GACxB,OAAa,IAANjB,EAAUiB,EAAMjB,EAAI,GAAM,EAAIe,EAAIC,EAAGhB,EAAI,EAAGiB,EAAMD,GAAKD,EAAIC,EAAIA,EAAGhB,EAAI,EAAGiB,IAgB9EC,EAAW,SAAU3hB,EAAMygB,EAAGmB,GAGhC,IAFA,IAAI/jB,GAAS,EACTgkB,EAAKD,IACA/jB,EAAQ,GACfgkB,GAAMpB,EAAIzgB,EAAKnC,GACfmC,EAAKnC,GAASgkB,EAAK,IACnBA,EAAKV,EAAMU,EAAK,MAIhBC,EAAS,SAAU9hB,EAAMygB,GAG3B,IAFA,IAAI5iB,EAAQ,EACR+jB,EAAI,IACC/jB,GAAS,GAChB+jB,GAAK5hB,EAAKnC,GACVmC,EAAKnC,GAASsjB,EAAMS,EAAInB,GACxBmB,EAAKA,EAAInB,EAAK,KAIdsB,EAAe,SAAU/hB,GAG3B,IAFA,IAAInC,EAAQ,EACRmkB,EAAI,KACCnkB,GAAS,GAChB,GAAU,KAANmkB,GAAsB,IAAVnkB,GAA+B,IAAhBmC,EAAKnC,GAAc,CAChD,IAAIokB,EAAIhB,EAAQjhB,EAAKnC,IACrBmkB,EAAU,KAANA,EAAWC,EAAID,EAAIZ,EAAO,IAAK,EAAIa,EAAExhB,QAAUwhB,EAErD,OAAOD,GAeXnB,EAAE,CAAEqB,OAAQ,SAAUC,OAAO,EAAMC,OAZtBpB,GAAM,WACjB,MAAqC,UAA9BO,EAAc,KAAS,IACF,MAA1BA,EAAc,GAAK,IACS,SAA5BA,EAAc,MAAO,IACuB,wBAA5CA,EAAc,kBAAuB,QAClCP,GAAM,WAEXO,EAAc,QAKqC,CACnDzH,QAAS,SAAiBuI,GACxB,IAKIC,EAAGC,EAAGC,EAAGC,EALTC,EAAS5B,EAAgBre,MACzBkgB,EAAczC,EAAoBmC,GAClCriB,EAAO,CAAC,EAAG,EAAG,EAAG,EAAG,EAAG,GACvB4iB,EAAO,GACPhD,EAAS,IAIb,GAAI+C,EAAc,GAAKA,EAAc,GAAI,MAAM,IAAIvC,EAAY,6BAE/D,GAAIsC,GAAWA,EAAQ,MAAO,MAC9B,GAAIA,IAAW,MAAQA,GAAU,KAAM,OAAOzB,EAAQyB,GAKtD,GAJIA,EAAS,IACXE,EAAO,IACPF,GAAUA,GAERA,EAAS,MAKX,GAHAH,GADAD,EA3EI,SAAUb,GAGlB,IAFA,IAAIhB,EAAI,EACJoC,EAAKpB,EACFoB,GAAM,MACXpC,GAAK,GACLoC,GAAM,KAER,KAAOA,GAAM,GACXpC,GAAK,EACLoC,GAAM,EACN,OAAOpC,EAiEDpS,CAAIqU,EAASlB,EAAI,EAAG,GAAI,IAAM,IAC1B,EAAIkB,EAASlB,EAAI,GAAIc,EAAG,GAAKI,EAASlB,EAAI,EAAGc,EAAG,GACxDC,GAAK,kBACLD,EAAI,GAAKA,GACD,EAAG,CAGT,IAFAX,EAAS3hB,EAAM,EAAGuiB,GAClBC,EAAIG,EACGH,GAAK,GACVb,EAAS3hB,EAAM,IAAK,GACpBwiB,GAAK,EAIP,IAFAb,EAAS3hB,EAAMwhB,EAAI,GAAIgB,EAAG,GAAI,GAC9BA,EAAIF,EAAI,EACDE,GAAK,IACVV,EAAO9hB,EAAM,GAAK,IAClBwiB,GAAK,GAEPV,EAAO9hB,EAAM,GAAKwiB,GAClBb,EAAS3hB,EAAM,EAAG,GAClB8hB,EAAO9hB,EAAM,GACb4f,EAASmC,EAAa/hB,QAEtB2hB,EAAS3hB,EAAM,EAAGuiB,GAClBZ,EAAS3hB,EAAM,IAAMsiB,EAAG,GACxB1C,EAASmC,EAAa/hB,GAAQohB,EAAO,IAAKuB,GAU5C,OALA/C,EAFE+C,EAAc,EAEPC,IADTH,EAAI7C,EAAOnf,SACWkiB,EAClB,KAAOvB,EAAO,IAAKuB,EAAcF,GAAK7C,EACtCyB,EAAYzB,EAAQ,EAAG6C,EAAIE,GAAe,IAAMtB,EAAYzB,EAAQ6C,EAAIE,IAEnEC,EAAOhD","sources":["webpack://nss-commerce/./src/cart-state/add-product-to-cart.ts?85ba","webpack://nss-commerce/./src/cart-state/add-promo-code.ts?2e69","webpack://nss-commerce/./src/cart-state/base-cart-state.ts?592c","webpack://nss-commerce/./src/cart-state/add-invoices-to-cart.ts?cb4a","webpack://nss-commerce/./src/cart-state/add-order-invoice-to-cart.ts?d6f8","webpack://nss-commerce/./src/cart-state/update-receipt-email.ts?a0ea","webpack://nss-commerce/./src/cart-state/clear-cart-line-delivery-mode.ts?86b9","webpack://nss-commerce/./src/cart-state/clear-cart-lines-delivery-information.ts?527a","webpack://nss-commerce/./src/cart-state/get-or-create-active-cart.ts?26ce","webpack://nss-commerce/./src/cart-state/refresh-cart.ts?3943","webpack://nss-commerce/./src/cart-state/remove-all-promo-codes.ts?1bb2","webpack://nss-commerce/./src/cart-state/remove-cart-lines.ts?2e16","webpack://nss-commerce/./src/cart-state/remove-promo-codes.ts?ffc1","webpack://nss-commerce/./src/cart-state/set-invoice-line-price.ts?9cb9","webpack://nss-commerce/./src/cart-state/update-cart-line-delivery-specifications.ts?6d68","webpack://nss-commerce/./src/cart-state/update-cart-line-quantity.ts?a037","webpack://nss-commerce/./src/cart-state/update-cart-lines.ts?cd2f","webpack://nss-commerce/./src/cart-state/update-cart.ts?8850","webpack://nss-commerce/./src/cart-state/update-loyalty-card-id.ts?c304","webpack://nss-commerce/./src/cart-state/update-shipping-address.ts?4d06","webpack://nss-commerce/./src/checkout-state/base-checkout-cart-state.ts?509c","webpack://nss-commerce/./src/checkout-state/checkout-state-storage.ts?b049","webpack://nss-commerce/./src/checkout-state/base-checkout-state.ts?a438","webpack://nss-commerce/./src/data-actions/cart-state-data-action.ts?5695","webpack://nss-commerce/./src/data-actions/checkout-state-data-action.ts?ad58","webpack://nss-commerce/./src/data-actions/get-cart-state-data-action.ts?9f8e","webpack://nss-commerce/./src/data-actions/get-cart-state.ts?4428","webpack://nss-commerce/./src/data-actions/get-checkout-cart.ts?2235","webpack://nss-commerce/./src/data-actions/global-state-data-action.ts?901a","webpack://nss-commerce/./src/global-state/i-global-state.ts?6850","webpack://nss-commerce/./src/data-actions/get-checkout-state.ts?61f7","webpack://nss-commerce/./src/global-state/global-state.ts?008e","webpack://nss-commerce/./src/state-interfaces/checkout-state-enums.ts?13e8","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/string-repeat.js?2e62","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/internals/this-number-value.js?3fc7","webpack://nss-commerce/./node_modules/@msdyn365-commerce/bootloader/node_modules/core-js/modules/es.number.to-fixed.js?c9e0"],"sourcesContent":["/*!\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 { addCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nconst quantityErrors: string[] = [\n    'Microsoft_Dynamics_Commerce_Runtime_AddingItem_ExceedsMaximumQuantity',\n    'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_ExceedsMaximumQuantity',\n    'Microsoft_Dynamics_Commerce_Runtime_AddingItem_QuantityExceedsMaximumAndViolatesMultiplicityOfConfiguredNumber',\n    'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_QuantityExceedsMaximumAndViolatesMultiplicityOfConfiguredNumber',\n    'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityLessThanMinimumAndViolatesMultiplicityOfConfiguredNumber',\n    'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityLessThanMinimum',\n    'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityExceedsMaximum',\n    'Microsoft_Dynamics_Commerce_Runtime_ItemQuantityViolatesMultiplicityOfConfiguredNumber'\n];\n\n/**\n * Get the quantity limit.\n * @param maxQuantityForCartLineItem - Max quantity for cart line.\n * @param inputItem - The input item.\n * @param inputItem.cartLineToAdd - Cart line to add.\n * @param inputItem.availableQuantity - Available quantity.\n * @param inputItem.shouldEnableStockCheck - Is stock check enabled.\n * @param inputItem.isAddServiceItemToCart - Is add service item to cart.\n * @returns The quantity limit.\n */\nfunction getQuantityLimit(\n    maxQuantityForCartLineItem: number | undefined,\n    inputItem: {\n        cartLineToAdd: CartLine;\n        availableQuantity?: number;\n        shouldEnableStockCheck?: boolean;\n        isAddServiceItemToCart?: boolean;\n    }\n): number {\n    let quantityLimit: number;\n    const defaultSiteMaxQuantity = 10;\n\n    if (inputItem.shouldEnableStockCheck === false) {\n        quantityLimit = maxQuantityForCartLineItem ?? defaultSiteMaxQuantity;\n    } else if (maxQuantityForCartLineItem === undefined && inputItem.availableQuantity === undefined) {\n        quantityLimit = defaultSiteMaxQuantity;\n    } else if (inputItem.availableQuantity === undefined) {\n        quantityLimit = maxQuantityForCartLineItem ?? defaultSiteMaxQuantity;\n    } else if (maxQuantityForCartLineItem === undefined) {\n        quantityLimit = inputItem.availableQuantity;\n    } else {\n        quantityLimit = Math.min(maxQuantityForCartLineItem, inputItem.availableQuantity);\n    }\n\n    return quantityLimit;\n}\n\n/**\n * Get the index of the item to add.\n * @param lines - The cart lines.\n * @param cartLineToAdd - The cart line to add.\n * @returns The index of the item to add.\n */\nfunction getElementIndex(lines: CartLine[], cartLineToAdd: CartLine): number {\n    let elementFoundAt: number = -1;\n    const productIdToFind = cartLineToAdd.ProductId;\n\n    for (const [index, line] of lines.entries()) {\n        if (\n            line.ProductId === productIdToFind &&\n            (line.DeliveryMode || '') === (cartLineToAdd.DeliveryMode || '') &&\n            (line.FulfillmentStoreId || '') === (cartLineToAdd.FulfillmentStoreId || '')\n        ) {\n            elementFoundAt = index;\n\n            break;\n        }\n    }\n\n    return elementFoundAt;\n}\n\nasync function addProductsToCartValidateAgainstDefaultOrderSettings(\n    cart: Readonly<Cart>,\n    actionContext: IActionContext,\n    input: {\n        cartLineToAdd: CartLine;\n        availableQuantity?: number;\n        enableStockCheck?: boolean;\n        isAddServiceItemToCart?: boolean;\n    }[]\n): Promise<ICartActionResultWithCart> {\n    if (!cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    for (const inputItem of input) {\n        if (inputItem.enableStockCheck && inputItem.availableQuantity) {\n            let elementFoundAt: number = -1;\n            const productIdToFind = inputItem.cartLineToAdd.ProductId;\n\n            for (let i = 0; i < cart.CartLines.length; i++) {\n                if (\n                    cart.CartLines[i].ProductId === productIdToFind &&\n                    (cart.CartLines[i].DeliveryMode || '') === (inputItem.cartLineToAdd.DeliveryMode || '') &&\n                    (cart.CartLines[i].FulfillmentStoreId || '') === (inputItem.cartLineToAdd.FulfillmentStoreId || '')\n                ) {\n                    elementFoundAt = i;\n\n                    break;\n                }\n            }\n\n            if (!inputItem.isAddServiceItemToCart && elementFoundAt !== -1) {\n                const cartLineToUpdate = { ...cart.CartLines[elementFoundAt] };\n                const curQuantity = cartLineToUpdate.Quantity || 0;\n\n                if (curQuantity + (inputItem.cartLineToAdd.Quantity || 1) > inputItem.availableQuantity) {\n                    return {\n                        cart: {\n                            Id: cart.Id,\n                            CartLines: cart.CartLines\n                        },\n                        status: 'FAILED',\n                        substatus: 'MAXQUANTITY'\n                    };\n                }\n            }\n        }\n    }\n\n    const newCartLines = input.map(inputItem => {\n        const cartLine = { ...inputItem.cartLineToAdd };\n        return cartLine;\n    });\n    let addCartLinesResult: ICartActionResultWithCart;\n\n    if (cart.Version) {\n        return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n            .then(newCart => {\n                addCartLinesResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n                return addCartLinesResult;\n            })\n            .catch(error => {\n                actionContext.telemetry.trace(error);\n                actionContext.telemetry.trace('Unable to add Cart Line');\n\n                const isQuantityError = quantityErrors.includes(error.name);\n\n                if (isQuantityError) {\n                    addCartLinesResult = {\n                        cart: undefined,\n                        status: 'FAILED',\n                        substatus: 'QUANTITYLIMITS',\n                        errorDetails: { LocalizedMessage: error.message }\n                    };\n                    return addCartLinesResult;\n                }\n\n                const hasInvoiceInCart = cart.CartLines?.find(cartline => cartline.IsInvoiceLine === true);\n                if (hasInvoiceInCart) {\n                    addCartLinesResult = {\n                        cart: undefined,\n                        status: 'FAILED',\n                        substatus: 'INVOICEINCART',\n                        errorDetails: { LocalizedMessage: error.message }\n                    };\n                    return addCartLinesResult;\n                }\n\n                addCartLinesResult = {\n                    cart: undefined,\n                    status: 'FAILED',\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                    errorDetails: { LocalizedMessage: error.message },\n                    validationResults: error.data?.ValidationResults\n                };\n\n                return addCartLinesResult;\n            });\n    }\n    actionContext.telemetry.warning('Unable to update Cart Line, Cart Version could not be found');\n\n    addCartLinesResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n    return addCartLinesResult;\n}\n\nasync function addProductsToCartValidateAgainstSiteSettings(\n    cart: Readonly<Cart>,\n    actionContext: IActionContext,\n    input: {\n        cartLineToAdd: CartLine;\n        availableQuantity?: number;\n        enableStockCheck?: boolean;\n        isAddServiceItemToCart?: boolean;\n    }[]\n): Promise<ICartActionResultWithCart> {\n    if (!cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const maxQuantityForCartLineItem: number | undefined = actionContext.requestContext.app.config.maxQuantityForCartLineItem;\n\n    for (const inputItem of input) {\n        const quantityLimit: number = getQuantityLimit(maxQuantityForCartLineItem, {\n            cartLineToAdd: inputItem.cartLineToAdd,\n            availableQuantity: inputItem.availableQuantity,\n            shouldEnableStockCheck: inputItem.enableStockCheck,\n            isAddServiceItemToCart: inputItem.isAddServiceItemToCart\n        });\n        const elementFoundAt: number = getElementIndex(cart.CartLines, inputItem.cartLineToAdd);\n\n        if (!inputItem.isAddServiceItemToCart && elementFoundAt !== -1) {\n            const cartLineToUpdate = { ...cart.CartLines[elementFoundAt] };\n            const currentQuantity = cartLineToUpdate.Quantity || 0;\n\n            if (currentQuantity + (inputItem.cartLineToAdd.Quantity || 1) > quantityLimit) {\n                return {\n                    cart: {\n                        Id: cart.Id,\n                        CartLines: cart.CartLines\n                    },\n                    status: 'FAILED',\n                    substatus: 'MAXQUANTITY'\n                };\n            }\n        }\n\n        if (\n            !inputItem.isAddServiceItemToCart &&\n            inputItem.cartLineToAdd &&\n            inputItem.cartLineToAdd.Quantity &&\n            inputItem.cartLineToAdd.Quantity > quantityLimit\n        ) {\n            return {\n                cart: {\n                    Id: cart.Id,\n                    CartLines: cart.CartLines\n                },\n                status: 'FAILED',\n                substatus: 'MAXQUANTITY'\n            };\n        }\n    }\n\n    const newCartLines = input.map(inputItem => {\n        const cartLine = { ...inputItem.cartLineToAdd };\n        cartLine.Quantity = cartLine.Quantity || 1;\n        return cartLine;\n    });\n    let cartActionResult: ICartActionResultWithCart;\n\n    if (cart.Version) {\n        return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n            .then(newCart => {\n                cartActionResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n                return cartActionResult;\n            })\n            .catch(error => {\n                actionContext.telemetry.trace(error);\n                actionContext.telemetry.trace('Unable to add Cart Line');\n\n                const hasInvoiceInCart = cart.CartLines?.find(cartline => cartline.IsInvoiceLine === true);\n                if (hasInvoiceInCart) {\n                    cartActionResult = {\n                        cart: undefined,\n                        status: 'FAILED',\n                        substatus: 'INVOICEINCART',\n                        errorDetails: { LocalizedMessage: error.message }\n                    };\n                    return cartActionResult;\n                }\n\n                cartActionResult = {\n                    cart: undefined,\n                    status: 'FAILED',\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                    errorDetails: { LocalizedMessage: error.message },\n                    validationResults: error.data?.ValidationResults\n                };\n                return cartActionResult;\n            });\n    }\n    actionContext.telemetry.warning('Unable to update Cart Line, Cart Version could not be found');\n\n    cartActionResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n    return cartActionResult;\n}\n\n/**\n * Add products to cart without site settings validation.\n * @param cart - The cart.\n * @param actionContext - The action context.\n * @param input - The cart lines to add.\n * @returns The results.\n */\nasync function addProductsToCartWithoutSiteSettings(\n    cart: Readonly<Cart>,\n    actionContext: IActionContext,\n    input: {\n        cartLineToAdd: CartLine;\n    }[]\n): Promise<ICartActionResultWithCart> {\n    if (!cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const defaultQuantity = 1;\n    const newCartLines = input.map(inputItem => {\n        const cartLine = { ...inputItem.cartLineToAdd };\n        cartLine.Quantity = cartLine.Quantity ?? defaultQuantity;\n        return cartLine;\n    });\n    let addCartLinesResult: ICartActionResultWithCart;\n\n    if (cart.Version) {\n        return addCartLinesAsync({ callerContext: actionContext }, cart.Id, newCartLines, cart.Version)\n            .then(newCart => {\n                addCartLinesResult = { cart: newCart, status: 'SUCCESS', substatus: 'PRODUCTADDED' };\n                return addCartLinesResult;\n            })\n            .catch(error => {\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-argument -- existing error type.\n                actionContext.telemetry.trace(error);\n                actionContext.telemetry.trace('Unable to add cart lines');\n\n                addCartLinesResult = {\n                    cart: undefined,\n                    status: 'FAILED',\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                    errorDetails: { LocalizedMessage: error.message },\n                    validationResults: error.data?.ValidationResults\n                };\n                return addCartLinesResult;\n            });\n    }\n\n    actionContext.telemetry.warning('Unable to update cart lines, cart version could not be found');\n\n    addCartLinesResult = { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n    return addCartLinesResult;\n}\n\nexport async function addProductsToCartInternal(\n    cart: Readonly<Cart>,\n    actionContext: IActionContext,\n    input: {\n        cartLineToAdd: CartLine;\n        availableQuantity?: number;\n        isStockCheckEnabled?: boolean;\n        isAddServiceItemToCart?: boolean;\n    }[]\n): Promise<ICartActionResultWithCart> {\n    return addProductsToCartWithoutSiteSettings(cart, actionContext, input);\n}\n\nexport async function addProductToCartInternal(\n    cart: Readonly<Cart>,\n    cartLineToAdd: CartLine,\n    actionContext: IActionContext,\n    validateOrderQuantityLimits: boolean,\n    availableQuantity?: number,\n    enableStockCheck?: boolean,\n    isAddServiceItemToCart?: boolean,\n    shouldSkipSiteSettings?: boolean\n): Promise<ICartActionResultWithCart> {\n    if (shouldSkipSiteSettings) {\n        return addProductsToCartWithoutSiteSettings(cart, actionContext, [{ cartLineToAdd }]);\n    }\n\n    if (validateOrderQuantityLimits) {\n        return addProductsToCartValidateAgainstDefaultOrderSettings(cart, actionContext, [\n            { cartLineToAdd, availableQuantity, enableStockCheck, isAddServiceItemToCart }\n        ]);\n    }\n    return addProductsToCartValidateAgainstSiteSettings(cart, actionContext, [\n        { cartLineToAdd, availableQuantity, enableStockCheck, isAddServiceItemToCart }\n    ]);\n}\n\nexport default addProductToCartInternal;\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 { addDiscountCodeAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, Coupon } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addPromoCode(\n    cart: Readonly<Cart | undefined>,\n    promoCode: string,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    if (hasPromoCode(cart, promoCode)) {\n        return { cart: undefined, status: 'FAILED', substatus: 'ALREADYADDED' };\n    }\n\n    return addDiscountCodeAsync({ callerContext: actionContext }, cart.Id, promoCode)\n        .then(newCart => {\n            // Retail server will still return success if a promo code is not valid,\n            // but it won't actually add that promo code. So need to check if promo\n            // code is actually in the new cart\n            if (hasPromoCode(newCart, promoCode)) {\n                return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n            }\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', substatus: 'INVALIDPROMOCODE' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            const resultWithCart: ICartActionResultWithCart = {\n                cart: undefined,\n                status: 'FAILED',\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                errorDetails: { LocalizedMessage: error.message }\n            };\n\n            return resultWithCart;\n        });\n}\n\nfunction hasPromoCode(cart: Cart, code: string): boolean {\n    const codes = cart.Coupons\n        ? cart.Coupons.map((coupon: Coupon) => {\n              return coupon.Code!.toLowerCase();\n          })\n        : [];\n    return codes.includes(code.toLowerCase());\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getCatalogId, IActionContext } from '@msdyn365-commerce/core';\nimport {\n    Address,\n    Cart,\n    CartLine,\n    ChannelDeliveryOptionConfiguration,\n    OrgUnitLocation,\n    SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n    AttributeValueBase,\n    CommerceProperty,\n    LineDeliverySpecification,\n    Note,\n    ReleasedProductType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { action, computed, observable } from 'mobx';\n\nimport { GlobalState } from '../global-state/global-state';\nimport { ICartActionResult, ICartState } from '../state-interfaces/i-cart-state';\nimport addInvoicesToCartInternal from './add-invoices-to-cart';\nimport addOrderInvoiceToCartInternal from './add-order-invoice-to-cart';\nimport addProductToCartInternal, { addProductsToCartInternal } from './add-product-to-cart';\nimport addPromoCodeInternal from './add-promo-code';\nimport { ICartActionResultWithCart } from './cart-action-result';\nimport clearCartLineDeliveryModeInternal from './clear-cart-line-delivery-mode';\nimport clearCartLinesDeliveryInformation from './clear-cart-lines-delivery-information';\nimport getOrCreateActiveCart from './get-or-create-active-cart';\nimport refreshCartInternal from './refresh-cart';\nimport removeAllPromoCodesInternal from './remove-all-promo-codes';\nimport removeCartLineInternal from './remove-cart-lines';\nimport removePromoCodesInternal from './remove-promo-codes';\nimport setInvoiceLinePriceInternal from './set-invoice-line-price';\nimport updateCart from './update-cart';\nimport updateCartLineDeliverySpecificationsInternal from './update-cart-line-delivery-specifications';\nimport updateCartLineQuantityInternal from './update-cart-line-quantity';\nimport updateLoyaltyCardIdInternal from './update-loyalty-card-id';\nimport updateReceiptEmail from './update-receipt-email';\nimport updateShippingAddress from './update-shipping-address';\nimport updateCartLinesInternal from './update-cart-lines';\nimport { IActionStatus } from '../global-state';\n\n/**\n * Cart state information.\n */\nexport class BaseCartState extends GlobalState implements ICartState {\n    @observable protected _cart: Cart;\n\n    @computed public get cart(): Readonly<Cart> {\n        return this._cart;\n    }\n\n    @observable protected _attributeValues: AttributeValueBase[];\n\n    @computed public get attributeValues(): AttributeValueBase[] {\n        return this._attributeValues;\n    }\n\n    @observable protected _extensionProperties: CommerceProperty[];\n\n    @computed public get extensionProperties(): CommerceProperty[] {\n        return this._extensionProperties;\n    }\n\n    @computed public get totalItemsInCart(): number {\n        if (this._cart.CartLines) {\n            return this._cart.CartLines.map(cartLine => cartLine.Quantity || 1).reduce((total, num) => total + num, 0);\n        }\n\n        return 0;\n    }\n\n    @observable protected _isProductAddedToCart: boolean;\n\n    @computed public get isProductAddedToCart(): boolean {\n        return this._isProductAddedToCart;\n    }\n\n    @computed public get isEmpty(): boolean {\n        return !(this._cart.CartLines && this._cart.CartLines.length > 0);\n    }\n\n    @computed public get hasInvoiceLine(): boolean {\n        return !!(this._cart.CartLines && this._cart.CartLines.some(cartline => cartline.IsInvoiceLine === true));\n    }\n\n    private _operationQueue: Promise<void> = Promise.resolve();\n\n    constructor(actionContext: IActionContext) {\n        super(actionContext);\n        this._cart = <Cart>{};\n        this._attributeValues = [];\n        this._extensionProperties = [];\n        this._isProductAddedToCart = false;\n    }\n\n    /**\n     * Refreshes the cart by getting it from the server.\n     *\n     * Other actions should keep cart up to date so shouldn't need to call this\n     * outside of initialization but still might be scenarios where a manual\n     * refresh is needed.\n     * @param input - Input.\n     * @param input.additionalProperties - Additional properties.\n     * @returns - The cart action result.\n     */\n    @action\n    public async refreshCart(input: { additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            const newCart = await refreshCartInternal(this.cart.Id, this.actionContext);\n\n            if (newCart) {\n                this._cart = newCart;\n\n                return { status: 'SUCCESS' };\n            }\n\n            return { status: 'FAILED' };\n        });\n    }\n\n    /**\n     * Adds the specified product to the current cart. If product is already in cart\n     * will update its cart line, otherwise will add a new cart line to the cart.\n     * @param input - The input.\n     * @param input.product - The product to add to the cart.\n     * @param input.count - How many copies of the product to add.\n     * @param input.location - The org unit location, used for BuyOnlinePickupInStore scenarios\n     * (If you want item to simply be shipped, leave this parameter undefined).\n     * @param input.additionalProperties - Additional properties.\n     * @param input.availableQuantity - Available quantity.\n     * @param input.enableStockCheck - Is stock check enabled.\n     * @param input.isAddEmailDeliveryItemToCart - Is add email delivery item to cart.\n     * @param input.isPriceKeyedIn - Is price keyed in.\n     * @param input.customPrice - Custom price.\n     * @param input.deliveryMode - Delivery mode.\n     * @param input.shouldSkipSiteSettings - Should skip site settings.\n     * @param input.catalogId - Should skip site settings.\n     * @returns Cart action result.\n     */\n    @action\n    public async addProductToCart(input: {\n        product: SimpleProduct;\n        count?: number;\n        location?: OrgUnitLocation;\n        additionalProperties?: object;\n        availableQuantity?: number;\n        enableStockCheck?: boolean;\n        isAddEmailDeliveryItemToCart?: boolean;\n        isPriceKeyedIn?: boolean;\n        customPrice?: number;\n        deliveryMode?: string;\n        shouldSkipSiteSettings?: boolean;\n        catalogId?: number;\n        retailMultiplePickupModeEnabled?: boolean;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            const cartLine: CartLine = {\n                CatalogId: input.catalogId ?? getCatalogId(this.actionContext.requestContext),\n                Description: input.product.Description,\n\n                // TODO: Investigate this value and what it represents\n                EntryMethodTypeValue: 3,\n                ItemId: input.product.ItemId,\n                ProductId: input.product.RecordId,\n                Quantity: input.count || 1,\n                TrackingId: '',\n                UnitOfMeasureSymbol: input.product.DefaultUnitOfMeasure,\n                IsPriceKeyedIn: input.isPriceKeyedIn,\n                IsGiftCardLine: input.product.IsGiftCard,\n                Price: input.customPrice ? input.customPrice : input.product.Price\n            };\n\n            if (input.location) {\n                if (!this.actionContext.requestContext.channel) {\n                    return { status: 'FAILED' };\n                }\n\n                // If curbside pick is not available use the default one\n                if (input.deliveryMode !== undefined) {\n                    cartLine.DeliveryMode = input.deliveryMode;\n                } else {\n                    cartLine.DeliveryMode = input.retailMultiplePickupModeEnabled\n                        ? undefined\n                        : this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n                }\n\n                cartLine.FulfillmentStoreId = input.location.OrgUnitNumber;\n                cartLine.WarehouseId = input.location.InventoryLocationId;\n                cartLine.ShippingAddress = this._buildAddressFromOrgUnitLocation(input.location);\n            }\n\n            if (input.isAddEmailDeliveryItemToCart) {\n                if (!this.actionContext.requestContext.channel) {\n                    return { status: 'FAILED' };\n                }\n\n                cartLine.DeliveryMode = this.actionContext.requestContext.channel.EmailDeliveryModeCode;\n            }\n\n            // Check if the product is service or not by product type\n            const isAddServiceItemToCart = input.product.ItemTypeValue === ReleasedProductType.Service;\n\n            // @ts-expect-error\n            const validateQuantity: boolean = !!input.additionalProperties?.validateQuantity;\n            return this._doCartOperationWithRetry(() =>\n                addProductToCartInternal(\n                    this.cart,\n                    cartLine,\n                    this.actionContext,\n                    validateQuantity,\n                    input.availableQuantity,\n                    input.enableStockCheck,\n                    isAddServiceItemToCart,\n                    input.shouldSkipSiteSettings\n                )\n            );\n        });\n    }\n\n    /**\n     * Adds the specified product to the current cart. If product is already in cart\n     * will update its cart line, otherwise will add a new cart line to the cart.\n     * @param input - Input.\n     * @param input.product - Product.\n     * @param input.count - Count.\n     * @param input.location - Location.\n     * @param input.additionalProperties - Additional properties.\n     * @param input.availableQuantity - Available quantity.\n     * @param input.enableStockCheck - Enable stock check.\n     * @param input.isAddEmailDeliveryItemToCart - Is add email delivery item to cart.\n     * @param input.isPriceKeyedIn - Is price keyed in.\n     * @param input.customPrice - Custom price.\n     * @param input.deliveryMode - Delivery mode.\n     * @returns Cart action result.\n     */\n    @action\n    public async addProductsToCart(\n        input: {\n            product: SimpleProduct;\n            count?: number;\n            location?: OrgUnitLocation;\n            additionalProperties?: object;\n            availableQuantity?: number;\n            enableStockCheck?: boolean;\n            isAddEmailDeliveryItemToCart?: boolean;\n            isPriceKeyedIn?: boolean;\n            customPrice?: number;\n            deliveryMode?: string;\n            catalogId?: number;\n            retailMultiplePickupModeEnabled?: boolean;\n        }[]\n    ): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            const internalInput: {\n                cartLineToAdd: CartLine;\n                availableQuantity?: number;\n                isStockCheckEnabled?: boolean;\n                isAddServiceItemToCart?: boolean;\n            }[] = [];\n\n            for (const inputItem of input) {\n                const cartLine: CartLine = {\n                    CatalogId: inputItem.catalogId ?? getCatalogId(this.actionContext.requestContext),\n                    Description: inputItem.product.Description,\n\n                    // TODO: Investigate this value and what it represents\n                    EntryMethodTypeValue: 3,\n                    ItemId: inputItem.product.ItemId,\n                    ProductId: inputItem.product.RecordId,\n                    Quantity: inputItem.count || 1,\n                    TrackingId: '',\n                    UnitOfMeasureSymbol: inputItem.product.DefaultUnitOfMeasure,\n                    IsPriceKeyedIn: inputItem.isPriceKeyedIn,\n                    IsGiftCardLine: inputItem.product.IsGiftCard,\n                    Price: inputItem.customPrice ? inputItem.customPrice : inputItem.product.Price\n                };\n\n                if (inputItem.location) {\n                    if (!this.actionContext.requestContext.channel) {\n                        return { status: 'FAILED' };\n                    }\n\n                    // If curbside pick is not available use the default one\n                    if (inputItem.deliveryMode !== undefined) {\n                        cartLine.DeliveryMode = inputItem.deliveryMode;\n                    } else {\n                        cartLine.DeliveryMode = inputItem.retailMultiplePickupModeEnabled\n                            ? undefined\n                            : this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n                    }\n\n                    cartLine.FulfillmentStoreId = inputItem.location.OrgUnitNumber;\n                    cartLine.WarehouseId = inputItem.location.InventoryLocationId;\n                    cartLine.ShippingAddress = this._buildAddressFromOrgUnitLocation(inputItem.location);\n                }\n\n                if (inputItem.isAddEmailDeliveryItemToCart) {\n                    cartLine.DeliveryMode = this.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n                }\n\n                // Check if the product is service or not by product type\n                const PRODUCTASSERVICE = 2 as ReleasedProductType.Service;\n                const isAddServiceItemToCart = inputItem.product.ItemTypeValue === PRODUCTASSERVICE;\n\n                internalInput.push({\n                    cartLineToAdd: cartLine,\n                    availableQuantity: inputItem.availableQuantity,\n                    isStockCheckEnabled: inputItem.enableStockCheck,\n                    isAddServiceItemToCart\n                });\n            }\n\n            return this._doCartOperationWithRetry(() => addProductsToCartInternal(this.cart, this.actionContext, internalInput));\n        });\n    }\n\n    /**\n     * Adds the specified invoices to the current cart.\n     * @param input - The input.\n     * @param input.invoiceIds - Invoice Ids.\n     * @param input.additionalProperties - Additional properties.\n     * @returns Cart action result.\n     */\n    @action\n    public async addInvoicesToCart(input: { invoiceIds: string[]; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => addInvoicesToCartInternal(this.cart, input.invoiceIds, this.actionContext));\n        });\n    }\n\n    /**\n     * Adds the specified order invoice to the current cart.\n     * @param input - Input.\n     * @param input.invoiceId - Invoice id.\n     * @param input.lineDescription - Line description.\n     * @param input.additionalProperties - Additional properties.\n     * @returns Cart action result.\n     */\n    @action\n    public async addOrderInvoiceToCart(input: {\n        invoiceId: string;\n        lineDescription: string;\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                addOrderInvoiceToCartInternal(this.cart, input.invoiceId, input.lineDescription, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Sets price for the given cart line with an invoice. Used to complete partial invoice payments.\n     * @param input - Input for the operation.\n     * @param input.cartLineId - The cart line with the invoice for which to update the price.\n     * @param input.price - The new value of price of the invoice.\n     * @returns The cart action result.\n     */\n    @action public async setInvoiceLinePrice(input: { cartLineId: string | null; price: number }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(async () =>\n                setInvoiceLinePriceInternal(this.cart, input.cartLineId, input.price, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Removes the cart lines with the provided ids from the cart.\n     * @param input - Input.\n     * @param input.cartLineIds - Cart line ids.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public async removeCartLines(input: { cartLineIds: string[]; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => removeCartLineInternal(this.cart, input.cartLineIds, this.actionContext));\n        });\n    }\n\n    /**\n     * Clears the pickup location information from the provided cart line,\n     * resulting in it getting shipped to the customer.\n     * @param input - Input.\n     * @param input.cartLineId - Cart line id.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public async clearCartLinePickupLocation(input: { cartLineId: string; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => clearCartLineDeliveryModeInternal(this.cart, input.cartLineId, this.actionContext));\n        });\n    }\n\n    /**\n     * Clears the delivery mode, and other information for the shipping cart lines.\n     * @param input - Input.\n     * @param input.additionalProperties - Additional properties.\n     * @param input.channelDeliveryOptionConfiguration -- Channel delivery option configuration.\n     * @returns The cart action result.\n     */\n    @action\n    public async clearCartLinesDeliveryInformation(input: {\n        additionalProperties?: object;\n        channelDeliveryOptionConfiguration?: ChannelDeliveryOptionConfiguration;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                clearCartLinesDeliveryInformation(this.cart, this.actionContext, input.channelDeliveryOptionConfiguration)\n            );\n        });\n    }\n\n    /**\n     * Marks the provided cart line for pickup in store, with the provided location as\n     * the pickup location.\n     * @param input - Input.\n     * @param input.cartLineId - Cart line id.\n     * @param input.location -  Location.\n     * @param input.additionalProperties - Additional properties.\n     * @param input.deliveryMode - Delivery mode.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartLinePickupLocation(input: {\n        cartLineId: string;\n        location: OrgUnitLocation;\n        additionalProperties?: object;\n        deliveryMode?: string;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            if (!this.actionContext.requestContext.channel) {\n                return { status: 'FAILED' };\n            }\n\n            const cartLineDeliverySpecification = {\n                LineId: input.cartLineId,\n                DeliverySpecification: {\n                    DeliveryModeId:\n                        input.deliveryMode !== undefined\n                            ? input.deliveryMode\n                            : this.actionContext.requestContext.channel.PickupDeliveryModeCode,\n                    DeliveryPreferenceTypeValue: 2, // Pick up in store\n                    PickUpStoreId: input.location.OrgUnitNumber,\n                    DeliveryAddress: this._buildAddressFromOrgUnitLocation(input.location)\n                }\n            };\n\n            return this._doCartOperationWithRetry(() =>\n                updateCartLineDeliverySpecificationsInternal(this.cart, [cartLineDeliverySpecification], this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Marks the provided cart line for pickup in store, with the provided location as\n     * the pickup location.\n     * @param input - Input.\n     * @param input.cartLineId - Cart line id.\n     * @param input.location -  Location.\n     * @param input.additionalProperties - Additional properties.\n     * @param input.deliveryMode - Delivery mode.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartLineDeliverySpecification(input: {\n        cartLineId: string;\n        additionalProperties?: object;\n        deliveryMode?: string;\n        channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            if (!this.actionContext.requestContext.channel) {\n                return { status: 'FAILED' };\n            }\n\n            const cartLineDeliverySpecification = {\n                LineId: input.cartLineId,\n                DeliverySpecification: {\n                    DeliveryModeId:\n                        input.deliveryMode !== undefined\n                            ? input.deliveryMode\n                            : this.actionContext.requestContext.channel.PickupDeliveryModeCode,\n                    DeliveryPreferenceTypeValue: 2 // Pick up in store\n                }\n            };\n\n            return this._doCartOperationWithRetry(() =>\n                updateCartLineDeliverySpecificationsInternal(this.cart, [cartLineDeliverySpecification], this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Updates cart line pick up date.\n     * @param input - The cart line.\n     * @param input.lineDeliverySpecifications - Line delivery specifications.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartLinePickupDateTimeslot(input: {\n        lineDeliverySpecifications: LineDeliverySpecification[];\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateCartLineDeliverySpecificationsInternal(this.cart, input.lineDeliverySpecifications, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Updates the delivery mode for items in the cart with the desired delivery mode, preserving BOPIS status for stuff already marked as BOPIS.\n     * @param input - The input.\n     * @param input.deliveryModeId - Delivery mode id.\n     * @param input.shippingAddress - Shipping address.\n     * @param input.additionalProperties - Additional properties.\n     * @param input.channelDeliveryOptionConfig - Channel delivery option configuration.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartDeliverySpecification(input: {\n        deliveryModeId: string;\n        shippingAddress: Address | undefined;\n        additionalProperties?: object;\n        channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            if (input.deliveryModeId.trim() === '') {\n                return { status: 'FAILED', substatus: 'EMPTYINPUT' };\n            }\n\n            const pickupDeliveryModeCode =\n                this.actionContext.requestContext.channel && this.actionContext.requestContext.channel.PickupDeliveryModeCode;\n            const emailDeliveryModeCode =\n                this.actionContext.requestContext.channel && this.actionContext.requestContext.channel.EmailDeliveryModeCode;\n            let cartLinesForShipping: CartLine[] = [];\n\n            cartLinesForShipping =\n                input.channelDeliveryOptionConfig !== undefined\n                    ? (this.cart.CartLines || []).filter(cartLine =>\n                          cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n                              ? cartLine.DeliveryMode !==\n                                    input.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n                                        deliveryMode => deliveryMode === cartLine.DeliveryMode\n                                    ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n                              : cartLine\n                      )\n                    : (this.cart.CartLines || []).filter(cartLine =>\n                          cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n                              ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n                              : cartLine\n                      );\n\n            if (cartLinesForShipping.length > 0) {\n                const deliverySpecifications = cartLinesForShipping.map(cartLine => {\n                    return {\n                        LineId: cartLine.LineId,\n                        DeliverySpecification: {\n                            DeliveryModeId: input.deliveryModeId,\n                            DeliveryPreferenceTypeValue: 1, // Ship\n                            DeliveryAddress: input.shippingAddress\n                        }\n                    };\n                });\n\n                return this._doCartOperationWithRetry(() =>\n                    updateCartLineDeliverySpecificationsInternal(this.cart, deliverySpecifications, this.actionContext)\n                );\n            }\n\n            return { status: 'FAILED', substatus: 'NOCONTENT' };\n        });\n    }\n\n    /**\n     * Updates the quantity of the cart line.\n     * @param input - The input.\n     * @param input.cartLineId - Cart line id.\n     * @param input.newQuantity - New quantity.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartLineQuantity(input: {\n        cartLineId: string;\n        newQuantity: number;\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateCartLineQuantityInternal(\n                    this.cart,\n                    input.cartLineId,\n                    input.newQuantity,\n                    this.actionContext,\n\n                    // @ts-expect-error\n                    input.additionalProperties?.isUsingDefaultOrderSettingsMax\n                )\n            );\n        });\n    }\n\n    /**\n     * Updates cart line pick up date.\n     * @param input - The cart line.\n     * @param input.lineDeliverySpecifications - Line delivery specifications.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateCartLinesDeliverySpecification(input: {\n        lineDeliverySpecifications: LineDeliverySpecification[];\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateCartLineDeliverySpecificationsInternal(this.cart, input.lineDeliverySpecifications, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Updates the loyalty card ID on the card.\n     * @param input - The input.\n     * @param input.loyaltyCardNumber - The loyalty card id to use.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateLoyaltyCardId(input: {\n        loyaltyCardNumber: string | undefined;\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        if (!input.loyaltyCardNumber) {\n            return { status: 'FAILED', substatus: 'EMPTYINPUT' };\n        }\n\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateLoyaltyCardIdInternal(this.cart, input.loyaltyCardNumber!, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Adds promo code to the cart.\n     * @param input - The input.\n     * @param input.promoCode - The promo code to add.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public addPromoCode(input: { promoCode: string; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => addPromoCodeInternal(this.cart, input.promoCode, this.actionContext));\n        });\n    }\n\n    /**\n     * Removes promo codes from the cart.\n     * @param input - The input.\n     * @param input.promoCodes - The promo codes to remove.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public removePromoCodes(input: { promoCodes: string[]; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => removePromoCodesInternal(this.cart, input.promoCodes, this.actionContext));\n        });\n    }\n\n    /**\n     * Removes all promo code from the cart.\n     * @param input - The input.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public removeAllPromoCodes(input: { additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => removeAllPromoCodesInternal(this.cart, this.actionContext));\n        });\n    }\n\n    /**\n     * Updates receipt email.\n     * @param input - The input.\n     * @param input.newEmail - The receipt email.\n     * @param input.customerReference - The customer reference.\n     * @param input.customerRequisition - The customer requisition.\n     * @param input.note - The note.\n     * @param input.additionalProperties - Additional properties.\n     * @returns The cart action result.\n     */\n    @action\n    public async updateReceiptEmail(input: {\n        newEmail: string;\n        customerReference?: string;\n        customerRequisition?: string;\n        note?: Note;\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateReceiptEmail(\n                    this.cart,\n                    input.newEmail,\n                    this.actionContext,\n                    input.customerReference,\n                    input.customerRequisition,\n                    input.note\n                )\n            );\n        });\n    }\n\n    /**\n     * Updates shipping address.\n     * @param input - The input.\n     * @param input.newShippingAddress - The shipping address.\n     * @param input.additionalProperties - The additional properties.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateShippingAddress(input: {\n        newShippingAddress: Address;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(async () =>\n                updateShippingAddress(this.cart, input.newShippingAddress, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Updates the attribute values.\n     * @param input - The input.\n     * @param input.newAttributeValues - The new attribute values to update.\n     * @param input.additionalProperties - The additional properties.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateAttributeValues(input: {\n        newAttributeValues: AttributeValueBase[];\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        this._attributeValues = input.newAttributeValues;\n        const newCartObject: Cart = {\n            Id: this.cart.Id,\n            AttributeValues: input.newAttributeValues\n        };\n        return this.updateCart({ newCartObject });\n    }\n\n    /**\n     * Updates the extension properties.\n     * @param input - The input.\n     * @param input.newExtensionProperties - The new extension properties.\n     * @param input.additionalProperties - The additional properties.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateExtensionProperties(input: {\n        newExtensionProperties: CommerceProperty[];\n        additionalProperties?: object;\n    }): Promise<ICartActionResult> {\n        this._extensionProperties = input.newExtensionProperties;\n        const newCartObject: Cart = {\n            Id: this.cart.Id,\n            ExtensionProperties: input.newExtensionProperties\n        };\n        return this.updateCart({ newCartObject });\n    }\n\n    /**\n     * Updates cart object.\n     * @param input - The input.\n     * @param input.newCartObject - The new cart object.\n     * @param input.additionalProperties - Additional properties.\n     * @returns Promise of cart action result.\n     */\n    @action\n    public async updateCart(input: { newCartObject: Cart; additionalProperties?: object }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() => updateCart(this.cart, input.newCartObject, this.actionContext));\n        });\n    }\n\n    /**\n     * Updates cartLines objects in cart.\n     * @param input - The input.\n     * @param input.updatedCartLinesObject - updated cartline.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateCartLines(input: { updatedCartLinesObject: CartLine[] }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateCartLinesInternal(this.cart, input.updatedCartLinesObject, this.actionContext)\n            );\n            // eslint-disable-next-line max-lines\n        });\n    }\n\n    /**\n     * Updates cartLines objects in cart.\n     * @param input - The input.\n     * @param input.updatedCartLinesObject - updated cartline.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateCartLineShippingAddress(input: { updatedCartLinesObject: CartLine[] }): Promise<ICartActionResult> {\n        return this._doAsyncAction<ICartActionResult>(async () => {\n            return this._doCartOperationWithRetry(() =>\n                updateCartLinesInternal(this.cart, input.updatedCartLinesObject, this.actionContext)\n            );\n        });\n    }\n\n    /**\n     * Initialize function.\n     */\n    public async initialize(): Promise<void> {\n        if (this.isInitialized) {\n            return;\n        }\n\n        const newCart = await getOrCreateActiveCart(this.actionContext);\n\n        if (newCart) {\n            this._cart = newCart;\n            this._status = 'READY';\n        } else {\n            this._status = 'ERROR';\n        }\n\n        this.isInitialized = true;\n    }\n\n    /**\n     * Validates inventory across cart lines.\n     * @param callback - Callback function.\n     * @returns ICartActionResult.\n     */\n    private async _doCartOperationWithRetry(callback: () => Promise<ICartActionResultWithCart>): Promise<ICartActionResult> {\n        const actionContext = this.actionContext;\n        const requestContext = actionContext.requestContext;\n        if (requestContext.features && requestContext.features.enable_checkout_race_condition_hot_fix) {\n            // Enqueue the operation\n            const operationPromise = this._operationQueue.then(\n                async (): Promise<ICartActionResult> => {\n                    let callbackResult: ICartActionResultWithCart;\n\n                    try {\n                        // First attempt to execute the callback\n                        callbackResult = await callback();\n\n                        if (callbackResult.status !== 'SUCCESS') {\n                            // If it fails, refresh the cart and retry\n                            const refreshCartResult = await this.refreshCart({});\n                            if (refreshCartResult.status === 'SUCCESS') {\n                                callbackResult = await callback();\n                            }\n                        }\n\n                        // Update cart if operation was successful\n                        if (callbackResult.status === 'SUCCESS' && callbackResult.cart) {\n                            this._cart = callbackResult.cart;\n                        }\n\n                        // Set the product added flag based on substatus\n                        this._isProductAddedToCart = callbackResult.status === 'SUCCESS' && callbackResult.substatus === 'PRODUCTADDED';\n\n                        return {\n                            status: callbackResult.status,\n                            substatus: callbackResult.substatus,\n                            errorDetails: callbackResult.errorDetails,\n                            validationResults: callbackResult.validationResults\n                        };\n                    } catch (error) {\n                        // Handle any unexpected errors\n                        const exception: IActionStatus = 'FAILED';\n\n                        return {\n                            status: exception, // Cast to correct type\n                            substatus: undefined, // Provide a valid substatus\n                            errorDetails: {}, // Cast to correct type\n                            validationResults: [] // Provide a valid empty array\n                        };\n                    }\n                }\n            );\n\n            // Update the operation queue\n            this._operationQueue = operationPromise.then(() => undefined);\n\n            // Wait for the operation to complete and return its result\n            return operationPromise;\n        } else {\n            let callbackResult = await callback();\n\n            if (callbackResult.status === 'SUCCESS') {\n                if (callbackResult.cart) {\n                    this._cart = callbackResult.cart;\n                }\n            } else {\n                const refreshCartResult = await this.refreshCart({});\n\n                if (refreshCartResult.status === 'SUCCESS') {\n                    callbackResult = await callback();\n\n                    if (callbackResult.status === 'SUCCESS') {\n                        if (callbackResult.cart) {\n                            this._cart = callbackResult.cart;\n                        }\n                    }\n                }\n            }\n\n            if (callbackResult.status === 'SUCCESS' && callbackResult.substatus && callbackResult.substatus === 'PRODUCTADDED') {\n                this._isProductAddedToCart = true;\n            } else {\n                this._isProductAddedToCart = false;\n            }\n\n            return {\n                status: callbackResult.status,\n                substatus: callbackResult.substatus,\n                errorDetails: callbackResult.errorDetails,\n                validationResults: callbackResult.validationResults\n            };\n        }\n    }\n\n    /**\n     * Build address from org unit location.\n     * @param location - The location.\n     * @returns Address.\n     */\n    private _buildAddressFromOrgUnitLocation(location: OrgUnitLocation): Address {\n        return {\n            RecordId: location.PostalAddressId,\n            Name: location.OrgUnitName,\n            FullAddress: location.Address,\n            Street: location.Street,\n            StreetNumber: location.StreetNumber,\n            City: location.City,\n            DistrictName: location.DistrictName,\n            BuildingCompliment: location.BuildingCompliment,\n            Postbox: location.Postbox,\n            ThreeLetterISORegionName: location.Country,\n            ZipCode: location.Zip,\n            County: location.County,\n            CountyName: location.CountyName,\n            State: location.State,\n            StateName: location.StateName\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 { IActionContext } from '@msdyn365-commerce/core';\nimport { Cart, CartsDataActions, CommerceException } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addInvoicesToCartInternal(\n    cart: Readonly<Cart>,\n    invoiceIds: string[],\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!invoiceIds || invoiceIds.length === 0) {\n        actionContext.telemetry.trace('Invoice ids are empty, unable to add invoices to cart.');\n        return { cart, status: 'FAILED', substatus: 'EMPTYINPUT' };\n    }\n\n    if (cart.Version) {\n        return CartsDataActions.addInvoicesAsync({ callerContext: actionContext }, cart.Id, invoiceIds)\n            .then<ICartActionResultWithCart>(newCart => {\n                return { cart: newCart, status: 'SUCCESS' };\n            })\n            .catch(error => {\n                actionContext.telemetry.trace(error);\n                actionContext.telemetry.trace('Unable to add invoices to cart');\n\n                // Error object comes from API and doesn't have type definitions yet.\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- No type definition for error.\n                const errorDetails: CommerceException = error.data;\n                const errorResult: ICartActionResultWithCart = { cart: undefined, status: 'FAILED', errorDetails };\n                return errorResult;\n            });\n    }\n    actionContext.telemetry.warning('Unable to add invoices, Cart Version could not be found');\n\n    return { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\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 { addOrderInvoiceAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function addOrderInvoiceToCartInternal(\n    cart: Readonly<Cart>,\n    invoiceId: string,\n    lineDescription: string,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!invoiceId || invoiceId === '') {\n        actionContext.telemetry.trace('Invoice id is empty, unable to add invoice to cart.');\n        return { cart, status: 'FAILED', substatus: 'EMPTYINPUT' };\n    }\n\n    if (cart.Version) {\n        return addOrderInvoiceAsync({ callerContext: actionContext }, cart.Id, invoiceId, lineDescription)\n            .then<ICartActionResultWithCart>(newCart => {\n                return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n            })\n            .catch(error => {\n                actionContext.telemetry.trace(error);\n                actionContext.telemetry.trace('Unable to add order invoice to cart');\n\n                const resultWithCart: ICartActionResultWithCart = {\n                    cart: undefined,\n                    status: 'FAILED',\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                    errorDetails: { LocalizedMessage: error.message }\n                };\n\n                return resultWithCart;\n            });\n    }\n    actionContext.telemetry.warning('Unable to add order invoice, Cart Version could not be found');\n\n    return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\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 { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, Note } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateReceiptEmail(\n    cart: Readonly<Cart | undefined>,\n    email: string,\n    actionContext: IActionContext,\n    customerReference?: string,\n    customerRequisition?: string,\n    note?: Note\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const updatedCart: Cart = {\n        Id: cart.Id,\n        ReceiptEmail: email,\n        Comment: customerReference,\n        CustomerRequisition: customerRequisition,\n        Notes: note !== undefined ? [note] : undefined\n    };\n\n    return updateAsync({ callerContext: actionContext }, updatedCart)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to add receipt email to the cart');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function clearCartLineDeliveryMode(\n    cart: Readonly<Cart | undefined>,\n    cartLineId: string,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n    if (matchingLines.length === 0) {\n        return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n    }\n\n    const copyCartLine: CartLine = { ...matchingLines[0] };\n\n    copyCartLine.DeliveryMode = '';\n    copyCartLine.FulfillmentStoreId = '';\n    copyCartLine.ShippingAddress = {};\n    copyCartLine.WarehouseId = actionContext.requestContext.channel?.InventLocation || cart.WarehouseId;\n\n    return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Update Cart Line');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine, ChannelDeliveryOptionConfiguration } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { cloneDeep } from 'lodash';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function clearCartLinesDeliveryInformation(\n    cart: Readonly<Cart | undefined>,\n    actionContext: IActionContext,\n    channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n    let matchingLines: CartLine[] = [];\n    const pickupDeliveryModeCode =\n        actionContext && actionContext.requestContext && actionContext.requestContext.channel?.PickupDeliveryModeCode;\n    const emailDeliveryModeCode =\n        actionContext && actionContext.requestContext && actionContext.requestContext.channel?.EmailDeliveryModeCode;\n    if (channelDeliveryOptionConfig !== undefined) {\n        matchingLines = cart.CartLines.filter(\n            cartLine =>\n                cartLine.DeliveryMode &&\n                cartLine.DeliveryMode !== channelDeliveryOptionConfig.PickupDeliveryModeCodes?.find(dM => dM === cartLine.DeliveryMode) &&\n                cartLine.DeliveryMode !== emailDeliveryModeCode &&\n                cartLine.LineId\n        );\n    } else {\n        matchingLines = cart.CartLines.filter(\n            cartLine =>\n                cartLine.DeliveryMode &&\n                cartLine.DeliveryMode !== pickupDeliveryModeCode &&\n                cartLine.DeliveryMode !== emailDeliveryModeCode &&\n                cartLine.LineId\n        );\n    }\n\n    // If there are no lines needing updates, just return success\n    if (matchingLines.length === 0) {\n        return <ICartActionResultWithCart>{ cart, status: 'SUCCESS' };\n    }\n\n    const copiedLines: CartLine[] = cloneDeep(matchingLines);\n\n    copiedLines.forEach(line => {\n        line.DeliveryMode = '';\n        line.FulfillmentStoreId = '';\n        line.ShippingAddress = {};\n    });\n\n    return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, copiedLines, null)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch((error: string) => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Update Cart Lines');\n\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error } };\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 { FeatureState, LoyaltyCardTenderType } from '@msdyn365-commerce/retail-proxy';\nimport {\n    addCartLinesAsync,\n    addCouponsAsync,\n    createCartAsync,\n    readAsync,\n    removeCartLinesAsync,\n    searchAsync,\n    updateAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n    getChannelDeliveryOptionConfigurationAsync,\n    getCustomerLoyaltyCardsAsync,\n    getFeatureStatesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n    Cart,\n    CartLine,\n    CartSearchCriteria,\n    Coupon,\n    QueryResultSettings\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport isEmpty from 'lodash/isEmpty';\n\nenum CartTokenPrefix {\n    Auth = 't',\n    Anon = 'p'\n}\n\nexport default async function getOrCreateActiveCart(ctx: IActionContext): Promise<Cart | undefined> {\n    let cart: Cart | undefined;\n    const cartCookie: string = ctx.requestContext.cookies.getCartCookie();\n    const cartCookieParts: string[] = cartCookie.split(':');\n    try {\n        // Check if there are already is a cart cookie and it is in the format we understand\n        cart = await getCartFromCookie(cartCookieParts, ctx);\n        const wasReadFromCookie = !!cart && cart.Id;\n\n        // If the customer is authenticated, and the auth cookie didn't give us a cart OR doesn't have a cookie, search for the customer's cart\n        if (!(cart && cart.Id)) {\n            cart = await getCartFromCustomer(ctx);\n        }\n\n        // If the customer just went from anon to signed in state then get that anon cart\n        // if the search of carts didn't result in a cart, claim the current anon cart as a new auth cart for the customer\n        // if the search resulted in a cart, and the read also resulted in cart, then go ahead an merge the carts\n        const anonCart = await claimAnonCart(cartCookieParts, cart, ctx);\n        if (anonCart) {\n            cart = anonCart;\n        }\n\n        // If there is no cookie or everything else fails, create an empty cart and return that for the customer\n        if (!(cart && cart.Id)) {\n            cart = await createNewCart(ctx);\n        }\n        if (!wasReadFromCookie && ctx.requestContext.user.isAuthenticated && cart && !cart.LoyaltyCardId) {\n            const cards = await getCustomerLoyaltyCardsAsync({ callerContext: ctx, queryResultSettings: {} }, null, {\n                ChannelId: <number>cart.ChannelId\n            });\n            if (cards && cards.length > 0) {\n                const noneBlockingCards = cards.filter(card => card.CardTenderTypeValue !== LoyaltyCardTenderType.Blocked);\n                if (noneBlockingCards && noneBlockingCards.length > 0) {\n                    cart = await updateAsync(\n                        { callerContext: ctx },\n                        {\n                            Id: cart.Id,\n                            LoyaltyCardId: noneBlockingCards[0].CardNumber\n                        }\n                    );\n                }\n            }\n        }\n    } catch (error) {\n        ctx.telemetry.error(`Caught exception in getting cart: ${error}`);\n        console.log('Error getting cart', error);\n        cart = await createNewCart(ctx);\n    }\n    return cart;\n}\n\n/**\n * Function to check cart exception due to product no available\n *\n * @param ctx Request context.\n * @param errorObj Error Object.\n */\nfunction handleItemDiscontinuedException(ctx: IActionContext, errorObj: object): boolean {\n    const error = errorObj as Error;\n    let response = false;\n    if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ItemDiscontinuedFromChannel') {\n        ctx.telemetry.information('Caught cart ItemDiscontinuedException error.');\n        response = true;\n    }\n\n    return response;\n}\n\nexport async function createNewCart(ctx: IActionContext): Promise<Cart | undefined> {\n    const newCart = await createCartAsync({ callerContext: ctx }, <Cart>{});\n    if (newCart && newCart.Id) {\n        ctx.requestContext.cookies.setCartCookie(newCart, ctx.requestContext.user.isAuthenticated);\n\n        return newCart;\n    }\n\n    return undefined;\n}\n\nexport async function getCartFromCookie(cartCookieParts: string[], ctx: IActionContext): Promise<Cart | undefined> {\n    let readCart: Cart | undefined;\n    let readCartId: string = '';\n\n    const isAuthenticated = ctx.requestContext.user.isAuthenticated;\n    if (cartCookieParts && cartCookieParts.length === 2) {\n        // If the customer is authenticated and they have an auth cookie\n        // OR if the customer is not authenticated and then have an anon cookie\n        // just get the cart and return that\n\n        if (\n            (isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Auth) ||\n            (!isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Anon)\n        ) {\n            try {\n                readCartId = cartCookieParts[1];\n                const readCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n\n                if (readCart && readCart.Id) {\n                    ctx.requestContext.cookies.setCartCookie(readCart, ctx.requestContext.user.isAuthenticated);\n                    return readCart;\n                }\n            } catch (error) {\n                if (handleItemDiscontinuedException(ctx, error)) {\n                    readCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, readCartId);\n                }\n                ctx.telemetry.error('Error getting cart based on saved card id');\n                ctx.telemetry.exception(error);\n                console.log('Error getting cart', error);\n            }\n        }\n    }\n\n    return readCart;\n}\n\nexport async function getCartFromCustomer(ctx: IActionContext): Promise<Cart | undefined> {\n    if (ctx.requestContext.user.isAuthenticated) {\n        try {\n            const authCarts = await searchCarts(ctx);\n            if (authCarts && authCarts.length > 0) {\n                ctx.requestContext.cookies.setCartCookie(authCarts[0], ctx.requestContext.user.isAuthenticated);\n                return authCarts[0];\n            }\n        } catch (error) {\n            ctx.telemetry.error('Error getting cart based on customer');\n            ctx.telemetry.exception(error);\n            console.log('Error getting cart', error);\n        }\n    }\n\n    return undefined;\n}\n\nexport async function claimAnonCart(\n    cartCookieParts: string[],\n    currentCart: Cart | undefined,\n    ctx: IActionContext\n): Promise<Cart | undefined> {\n    let anonCurrentCart: Cart | undefined;\n\n    if (\n        ctx.requestContext.user.isAuthenticated &&\n        cartCookieParts &&\n        cartCookieParts.length === 2 &&\n        cartCookieParts[0] === CartTokenPrefix.Anon\n    ) {\n        try {\n            anonCurrentCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n        } catch (error) {\n            if (handleItemDiscontinuedException(ctx, error)) {\n                anonCurrentCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, cartCookieParts[1]);\n                console.log('Error getting anonymous cart', error);\n            }\n        }\n\n        if (anonCurrentCart && !currentCart) {\n            const newCart = await claimCart(anonCurrentCart.Id, ctx);\n            if (newCart && newCart.Id) {\n                ctx.requestContext.cookies.setCartCookie(newCart, ctx.requestContext.user.isAuthenticated);\n                return newCart;\n            }\n        }\n\n        if (anonCurrentCart && anonCurrentCart.Id && currentCart) {\n            const mergedCart = await addCartLines(anonCurrentCart, currentCart, ctx);\n\n            // Once updated, take that merged cart ID and store the cart ID in the cookie\n            if (!(mergedCart instanceof Error) && mergedCart.Id) {\n                ctx.requestContext.cookies.setCartCookie(mergedCart, ctx.requestContext.user.isAuthenticated);\n                return mergedCart;\n            }\n        }\n    }\n\n    return undefined;\n}\n\n/**\n * Function that copies a cartline for giftcard.\n * @param cartline Source CartLine you want to copy.\n */\nfunction buildGiftCardLine(cartline: CartLine): CartLine {\n    return {\n        DeliveryMode: cartline.DeliveryMode,\n        CatalogId: cartline.CatalogId,\n        Description: cartline.Description,\n        EntryMethodTypeValue: cartline.EntryMethodTypeValue || 3,\n        ItemId: cartline.ItemId,\n        ProductId: cartline.ProductId,\n        Quantity: cartline.Quantity,\n        Price: cartline.Price,\n        NetPrice: cartline.NetPrice,\n        GiftCardBalance: cartline.GiftCardBalance,\n        TrackingId: '',\n        UnitOfMeasureSymbol: cartline.UnitOfMeasureSymbol,\n        IsPriceKeyedIn: true,\n        IsGiftCardLine: true,\n        ExtensionProperties: cartline.ExtensionProperties\n    };\n}\n\n/**\n * Function that adds cart lines from source cart to destination cart.\n * @param sourceCart Source cart you want to add cart lines from.\n * @param destinationCart Destination cart that you want to add cart lines to.\n * @param ctx Request context.\n */\nexport async function addCartLines(sourceCart: Cart, destinationCart: Cart, ctx: IActionContext): Promise<Cart> {\n    let updatedCart;\n    const cartLines: CartLine[] = [];\n    const cartLinesToDelete: string[] = [];\n    let hasShippingMethod: boolean;\n    const channelConfiguration = ctx.requestContext.channel;\n    const featureNames: string[] = ['Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'];\n    if (destinationCart.Version) {\n        if (sourceCart.CartLines && sourceCart.CartLines.length > 0) {\n            for (const cartline of sourceCart.CartLines) {\n                let newCartLine: CartLine;\n\n                if (cartline.IsGiftCardLine) {\n                    newCartLine = buildGiftCardLine(cartline);\n                } else {\n                    newCartLine = {};\n                    const featureStates = await getFeatureStatesAsync({ callerContext: ctx }, featureNames);\n                    const isfeatureStatesEnabled =\n                        featureStates?.find(\n                            (featureState: FeatureState) =>\n                                featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n                        )?.IsEnabled || false;\n                    if (isfeatureStatesEnabled) {\n                        const channelDeliveryOptionConfig = await getChannelDeliveryOptionConfigurationAsync({ callerContext: ctx });\n                        hasShippingMethod =\n                            cartline.DeliveryMode ===\n                            channelDeliveryOptionConfig.PickupDeliveryModeCodes?.find(\n                                (deliveryMode: string) => deliveryMode === cartline.DeliveryMode\n                            );\n\n                        if (cartline.DeliveryMode !== undefined && hasShippingMethod) {\n                            newCartLine.DeliveryMode = cartline.DeliveryMode;\n                            newCartLine.FulfillmentStoreId = cartline.FulfillmentStoreId;\n                            newCartLine.ShippingAddress = cartline.ShippingAddress;\n                            newCartLine.WarehouseId = cartline.WarehouseId;\n                        }\n                    } else if (!isEmpty(cartline.DeliveryMode) && cartline.DeliveryMode === channelConfiguration?.PickupDeliveryModeCode) {\n                        newCartLine.DeliveryMode = channelConfiguration?.PickupDeliveryModeCode;\n                        newCartLine.FulfillmentStoreId = cartline.FulfillmentStoreId;\n                        newCartLine.ShippingAddress = cartline.ShippingAddress;\n                        newCartLine.WarehouseId = cartline.WarehouseId;\n                    }\n                    newCartLine.ProductId = cartline.ProductId;\n                    newCartLine.Quantity = cartline.Quantity;\n                    newCartLine.ExtensionProperties = cartline.ExtensionProperties;\n                    newCartLine.Description = cartline.Description;\n                    newCartLine.ReasonCodeLines = cartline.ReasonCodeLines;\n                    newCartLine.AttributeValues = cartline.AttributeValues;\n                    newCartLine.CatalogId = cartline.CatalogId;\n                    newCartLine.EntryMethodTypeValue = cartline.EntryMethodTypeValue;\n                    newCartLine.ItemId = cartline.ItemId;\n\n                    // without unitofmeasure cartline wont be aggregated in customer cart.\n                    newCartLine.UnitOfMeasureSymbol = cartline.UnitOfMeasureSymbol;\n                    if (cartline.IsPriceKeyedIn) {\n                        newCartLine.Price = cartline.Price;\n                        newCartLine.IsPriceKeyedIn = cartline.IsPriceKeyedIn;\n                    }\n                }\n\n                cartLines.push({ ...newCartLine });\n                if (cartline.LineId) {\n                    cartLinesToDelete.push(cartline.LineId);\n                }\n            }\n        }\n\n        if (cartLines.length > 0) {\n            try {\n                updatedCart = await addCartLinesAsync({ callerContext: ctx }, destinationCart.Id, cartLines, destinationCart.Version);\n\n                if (cartLinesToDelete.length > 0) {\n                    sourceCart = await removeCartLinesAsync({ callerContext: ctx }, sourceCart.Id, cartLinesToDelete);\n                }\n            } catch (error) {\n                ctx.telemetry.error('Error adding cart lines to desination cart');\n                ctx.telemetry.exception(error);\n                return destinationCart;\n            }\n        }\n\n        // Copy over coupon codes from source cart to destination cart so that the customer doesn't lose couponCodes while migration\n        if (sourceCart.Coupons && sourceCart.Coupons.length > 0) {\n            const coupons = sourceCart.Coupons.map((coupon: Coupon) => {\n                return coupon.Code!;\n            });\n\n            try {\n                updatedCart = await addCouponsAsync({ callerContext: ctx }, destinationCart.Id, coupons, false);\n            } catch (error) {\n                ctx.telemetry.error('Error adding existing coupon codes to the cart');\n                ctx.telemetry.exception(error);\n                return destinationCart;\n            }\n        }\n    }\n\n    return updatedCart || destinationCart;\n}\n\n/**\n * Function to claim a cart as auth cart and set the browser cookie accordingly.\n *\n * @param cartId Cart Id to claim as auth cart.\n * @param ctx Request Context.\n */\nexport async function claimCart(cartId: string, ctx: IActionContext): Promise<Cart> {\n    const claimAuthCart = await updateAsync(\n        { callerContext: ctx },\n        {\n            Id: cartId\n        }\n    );\n    if (!(claimAuthCart instanceof Error) && claimAuthCart && claimAuthCart.Id) {\n        return claimAuthCart;\n    }\n    console.log('Error claiming cart', claimAuthCart);\n    return <Cart>{};\n}\n\n/**\n * Function to search carts that belong to a customer.\n *\n * @param ctx Request context.\n */\nexport async function searchCarts(ctx: IActionContext): Promise<Cart[]> {\n    const cartSearchCriteria: CartSearchCriteria = {\n        IncludeAnonymous: false,\n        CartTypeValue: 1\n    };\n\n    const queryResultSettings: QueryResultSettings = {\n        Paging: {\n            Top: 1,\n            Skip: 0\n        },\n        Sorting: {\n            Columns: [\n                {\n                    ColumnName: 'ModifiedDateTime',\n                    IsDescending: true\n                }\n            ]\n        }\n    };\n\n    return searchAsync({ callerContext: ctx, queryResultSettings }, cartSearchCriteria);\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 { readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nexport default async function refreshCart(cartId: string, ctx: IActionContext): Promise<Cart | undefined> {\n    return readAsync({ callerContext: ctx, bypassCache: 'get' }, cartId)\n        .then(cart => {\n            return cart;\n        })\n        .catch(error => {\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 { removeDiscountCodesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removeAllPromoCodes(\n    cart: Readonly<Cart | undefined>,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    if (cart.Coupons && cart.Coupons.length > 0) {\n        const promoCodes = cart.Coupons.map(coupon => {\n            return coupon.Code || '';\n        });\n\n        return removeDiscountCodesAsync({ callerContext: actionContext }, cart.Id, promoCodes)\n            .then(newCart => {\n                return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n            })\n            .catch(error => {\n                actionContext.telemetry.warning(error);\n\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n            });\n    }\n\n    return <ICartActionResultWithCart>{ cart, status: 'SUCCESS' };\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 { removeCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removeCartLinesInternal(\n    cart: Readonly<Cart | undefined>,\n    cartLineIds: string[],\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return removeCartLinesAsync({ callerContext: actionContext }, cart.Id, cartLineIds)\n        .then(newCart => {\n            // This is because of a TSProxy typing error\n            const returnedCart = Array.isArray(newCart) ? newCart[0] : newCart;\n\n            return <ICartActionResultWithCart>{ cart: returnedCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Remove Cart Line');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { removeDiscountCodesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function removePromoCodes(\n    cart: Readonly<Cart | undefined>,\n    promoCodes: string[],\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return removeDiscountCodesAsync({ callerContext: actionContext }, cart.Id, promoCodes)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { Cart, CartsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\n/**\n * Sets price for the given cart line with an invoice. Used to complete partial invoice payments.\n * @param cart - Cart where the invoice is located.\n * @param cartLineId - The cart line with the invoice for which to update the price.\n * @param price - The new value of price of the invoice.\n * @param actionContext - The action context from SDK.\n * @returns Result of the operation with the details.\n */\nexport async function setInvoiceLinePriceInternal(\n    cart: Readonly<Cart>,\n    cartLineId: string | null,\n    price: number,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart.Version) {\n        actionContext.telemetry.warning('Unable to set invoice line price, Cart Version could not be found');\n        return { cart: undefined, status: 'FAILED', substatus: 'NOCARTVERSION' };\n    }\n\n    try {\n        const newCart = await CartsDataActions.setInvoiceLinePriceAsync(\n            { callerContext: actionContext },\n            cart.Id,\n            cartLineId,\n            price,\n            cart.Version\n        );\n        return { cart: newCart, status: 'SUCCESS' };\n    } catch (error) {\n        const errorInstance = error as Error;\n        actionContext.telemetry.trace(error as string);\n        actionContext.telemetry.trace('Unable to set invoice line price');\n\n        return {\n            cart: undefined,\n            status: 'FAILED',\n            errorDetails: { LocalizedMessage: errorInstance.message }\n        };\n    }\n}\n\nexport default setInvoiceLinePriceInternal;\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 { updateLineDeliverySpecificationsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, LineDeliverySpecification } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLineDeliverySpecificationsInternal(\n    cart: Readonly<Cart | undefined>,\n    cartLineDeliverySpecifications: LineDeliverySpecification[],\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines || cartLineDeliverySpecifications.length === 0) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return updateLineDeliverySpecificationsAsync({ callerContext: actionContext }, cart.Id, cartLineDeliverySpecifications)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to updateLineDeliverySpecificationsAsync');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLineQuantityInternal(\n    cart: Readonly<Cart | undefined>,\n    cartLineId: string,\n    newQuantity: number,\n    actionContext: IActionContext,\n    isUsingDefaultOrderSettingsMax: boolean\n): Promise<ICartActionResultWithCart> {\n    if (isUsingDefaultOrderSettingsMax) {\n        return updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings(cart, cartLineId, newQuantity, actionContext);\n    }\n    return updateCartLineQuantityValidateMaxAgainstSiteSettings(cart, cartLineId, newQuantity, actionContext);\n}\nasync function updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings(\n    cart: Readonly<Cart | undefined>,\n    cartLineId: string,\n    newQuantity: number,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n    if (matchingLines.length === 0) {\n        return { cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n    }\n\n    const copyCartLine: CartLine = { ...matchingLines[0] };\n\n    copyCartLine.Quantity = newQuantity;\n\n    return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            let cartActionResult: ICartActionResultWithCart;\n\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Update Cart Line');\n            if (\n                error.name === 'Microsoft_Dynamics_Commerce_Runtime_AddingItem_ExceedsMaximumQuantity' ||\n                error.name === 'Microsoft_Dynamics_Commerce_Runtime_UpdatingItem_ExceedsMaximumQuantity'\n            ) {\n                cartActionResult = {\n                    cart: undefined,\n                    status: 'FAILED',\n                    substatus: 'QUANTITYLIMITS',\n                    // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                    errorDetails: { LocalizedMessage: error.message },\n                    validationResults: error.data?.ValidationResults\n                };\n                return cartActionResult;\n            }\n\n            cartActionResult = {\n                cart: undefined,\n                status: 'FAILED',\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                errorDetails: { LocalizedMessage: error.message },\n                validationResults: error.data?.ValidationResults\n            };\n            return cartActionResult;\n        });\n}\n\nasync function updateCartLineQuantityValidateMaxAgainstSiteSettings(\n    cart: Readonly<Cart | undefined>,\n    cartLineId: string,\n    newQuantity: number,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    const matchingLines = cart.CartLines.filter(cartLine => cartLine.LineId === cartLineId);\n\n    if (matchingLines.length === 0) {\n        return { cart: undefined, status: 'FAILED', substatus: 'NOMATCHEDCARTLINE' };\n    }\n\n    const copyCartLine: CartLine = { ...matchingLines[0] };\n    copyCartLine.Quantity = Math.min(newQuantity, actionContext.requestContext.app.config.maxQuantityForCartLineItem || 10);\n\n    return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, [copyCartLine], null)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Update Cart Line');\n            return <ICartActionResultWithCart>{\n                cart: undefined,\n                status: 'FAILED',\n                // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n                errorDetails: { LocalizedMessage: error.message },\n                validationResults: error.data?.ValidationResults\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 { IActionContext } from '@msdyn365-commerce/core';\nimport { updateCartLinesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCartLinesInternal(\n    cart: Readonly<Cart | undefined>,\n    cartLinesToUpdate: CartLine[],\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart || !cart.CartLines) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return updateCartLinesAsync({ callerContext: actionContext }, cart.Id, cartLinesToUpdate, null)\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch((error: string) => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to Update Cart Lines');\n\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error } };\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 { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateCart(\n    cart: Readonly<Cart | undefined>,\n    updatedCartObject: Cart,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return updateAsync({ callerContext: actionContext }, { ...updatedCartObject, Id: cart.Id })\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to update the cart');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { updateAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { Cart } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\nexport default async function updateLoyaltyCardId(\n    cart: Readonly<Cart | undefined>,\n    newLoyaltyCardId: string,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return updateAsync(\n        { callerContext: actionContext },\n        {\n            Id: cart.Id,\n            LoyaltyCardId: newLoyaltyCardId\n        }\n    )\n        .then(newCart => {\n            return <ICartActionResultWithCart>{ cart: newCart, status: 'SUCCESS' };\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to update loyalty card id');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return <ICartActionResultWithCart>{ cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\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 { Address, Cart, CartsDataActions } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartActionResultWithCart } from './cart-action-result';\n\n/**\n * Update shipping address in cart.\n * @param cart - The cart object.\n * @param shippingAddress - The new shipping address.\n * @param actionContext - The action context.\n * @returns The updated cart with new shipping address.\n */\nexport async function updateShippingAddress(\n    cart: Readonly<Cart | undefined>,\n    shippingAddress: Address,\n    actionContext: IActionContext\n): Promise<ICartActionResultWithCart> {\n    if (!cart) {\n        return { cart: undefined, status: 'FAILED', substatus: 'EMPTYCART' };\n    }\n\n    return CartsDataActions.updateAsync(\n        { callerContext: actionContext },\n        {\n            Id: cart.Id,\n            ShippingAddress: shippingAddress\n        }\n    )\n        .then(newCart => {\n            const result: ICartActionResultWithCart = { cart: newCart, status: 'SUCCESS' };\n            return result;\n        })\n        .catch(error => {\n            actionContext.telemetry.warning(error);\n            actionContext.telemetry.debug('Unable to update shipping address to the cart');\n\n            // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access -- existing error type.\n            return { cart: undefined, status: 'FAILED', errorDetails: { LocalizedMessage: error.message } };\n        });\n}\n\nexport default updateShippingAddress;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport getCheckoutCart, { GetCheckoutCartInput } from '../data-actions/get-checkout-cart';\n\n/**\n * Version of BaseCartState that uses the checkout cart.\n */\nexport class BaseCheckoutCartState extends BaseCartState {\n    public async initialize(): Promise<void> {\n        if (this.isInitialized) {\n            return;\n        }\n\n        const newCart = await getCheckoutCart(new GetCheckoutCartInput(this.actionContext.requestContext.apiSettings), this.actionContext);\n\n        if (newCart) {\n            this._cart = newCart;\n            this._status = 'READY';\n        } else {\n            this._status = 'ERROR';\n        }\n\n        this.isInitialized = true;\n    }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum CheckoutStorageKey {\n    BillingAddress = 'BillingAddress',\n    GiftCard = 'GiftCard',\n    LoyaltyCardNumber = 'LoyaltyCardNumber',\n    LoyaltyAmount = 'LoyaltyAmount',\n    TermsAndCondition = 'TermsAndCondition',\n    CheckoutGenericData = 'Checkout-Generic-Data',\n    PaymentTenderType = 'PaymentTenderType',\n    RedirectPaymentConnectorId = 'RedirectPaymentConnectorId',\n    IsExpressCheckoutApplied = 'IsExpressCheckoutApplied'\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 {\n    Address,\n    AttributeValueBase,\n    CardPaymentAcceptResult,\n    CartLine,\n    CommerceProperty,\n    GiftCard,\n    Note,\n    SalesOrder,\n    SimpleProduct,\n    TenderLine,\n    TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport get from 'lodash/get';\nimport { action, computed, observable } from 'mobx';\n\nimport { GlobalState } from '../global-state/global-state';\nimport { CheckoutModule } from '../state-interfaces';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport {\n    ICheckoutActionResult,\n    ICheckoutGenericData,\n    ICheckoutState,\n    IGiftCardExtend,\n    ICheckoutError\n} from '../state-interfaces/i-checkout-state';\nimport { BaseCheckoutCartState } from './base-checkout-cart-state';\nimport { CheckoutStorageKey } from './checkout-state-storage';\n\n/**\n * State information related to what is needed to succesfully perform a checkout.\n */\nexport class BaseCheckoutState extends GlobalState implements ICheckoutState {\n    @observable protected _checkoutCart: ICartState;\n\n    @computed public get checkoutCart(): ICartState {\n        return this._checkoutCart;\n    }\n\n    @observable protected _salesOrder?: SalesOrder;\n\n    @computed public get salesOrder(): Readonly<SalesOrder | undefined> {\n        return this._salesOrder;\n    }\n\n    @observable protected _attributeValues: AttributeValueBase[];\n\n    @computed public get attributeValues(): Readonly<AttributeValueBase[] | undefined> {\n        return this._attributeValues;\n    }\n\n    @observable protected _extensionProperties: CommerceProperty[];\n\n    @computed public get extensionProperties(): Readonly<CommerceProperty[] | undefined> {\n        return this._extensionProperties;\n    }\n\n    @observable protected _orderedProducts?: SimpleProduct[];\n\n    @computed public get orderedProducts(): Readonly<SimpleProduct[] | undefined> {\n        return this._orderedProducts;\n    }\n\n    @observable protected _tokenizedPaymentCard?: TokenizedPaymentCard;\n\n    @computed public get tokenizedPaymentCard(): Readonly<TokenizedPaymentCard | undefined> {\n        return this._tokenizedPaymentCard;\n    }\n\n    @observable protected _tenderLine?: TenderLine;\n\n    @computed public get tenderLine(): Readonly<TenderLine | undefined> {\n        return this._tenderLine;\n    }\n\n    @observable protected _billingAddress?: Address;\n\n    @computed public get billingAddress(): Readonly<Address | undefined> {\n        return this._billingAddress;\n    }\n\n    @observable protected _isBillingAddressSameAsShippingAddress?: boolean;\n\n    @computed public get isBillingAddressSameAsShippingAddress(): Readonly<boolean | undefined> {\n        return this._isBillingAddressSameAsShippingAddress;\n    }\n\n    @observable protected _shippingAddress?: Address;\n\n    @computed public get shippingAddress(): Readonly<Address | undefined> {\n        return this._shippingAddress;\n    }\n\n    @observable protected _cartLinesWithShippingAddress?: CartLine[];\n\n    @computed public get cartLinesWithShippingAddress(): Readonly<CartLine[] | undefined> {\n        return this._cartLinesWithShippingAddress;\n    }\n\n    @observable protected _hasShippingAddress?: boolean;\n\n    @computed public get hasShippingAddress(): Readonly<boolean | undefined> {\n        return this._hasShippingAddress;\n    }\n\n    @observable protected _hasCartDeliveryMode?: boolean;\n\n    @computed public get hasCartDeliveryMode(): Readonly<boolean | undefined> {\n        return this._hasCartDeliveryMode;\n    }\n\n    @observable protected _cardPrefix?: string;\n\n    @computed public get cardPrefix(): Readonly<string | undefined> {\n        return this._cardPrefix;\n    }\n\n    @observable protected _paymentTenderType?: string;\n\n    @computed public get paymentTenderType(): Readonly<string | undefined> {\n        return this._paymentTenderType;\n    }\n\n    /**\n     * @deprecated Use giftCardExtends method.\n     */\n    @computed public get giftCards(): Readonly<GiftCard[]> {\n        return this.giftCardExtends;\n    }\n\n    @observable protected _giftCardExtends: IGiftCardExtend[] = [];\n\n    @computed public get giftCardExtends(): Readonly<IGiftCardExtend[]> {\n        return this._giftCardExtends;\n    }\n\n    @observable protected _loyaltyCardNumber?: string;\n\n    @computed public get loyaltyCardNumber(): Readonly<string | undefined> {\n        return this._loyaltyCardNumber;\n    }\n\n    @observable protected _loyaltyAmount: number = 0;\n\n    @computed public get loyaltyAmount(): Readonly<number> {\n        return this._loyaltyAmount;\n    }\n\n    @observable protected _guestCheckoutEmail: string = '';\n\n    @computed public get guestCheckoutEmail(): Readonly<string> {\n        return this._guestCheckoutEmail;\n    }\n\n    @observable protected _hasGuestCheckoutEmail?: boolean;\n\n    @computed public get hasGuestCheckoutEmail(): Readonly<boolean | undefined> {\n        return this._hasGuestCheckoutEmail;\n    }\n\n    @observable protected _isTermsAndConditionAccepted?: boolean;\n\n    @computed public get isTermsAndConditionAccepted(): Readonly<boolean | undefined> {\n        return this._isTermsAndConditionAccepted;\n    }\n\n    @observable protected _isTermsAndConditionChecked?: boolean;\n\n    @computed public get isTermsAndConditionChecked(): Readonly<boolean | undefined> {\n        return this._isTermsAndConditionChecked;\n    }\n\n    @observable protected _shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n\n    @computed public get shouldEnableSinglePaymentAuthorizationCheckout(): Readonly<boolean | undefined> {\n        return this._shouldEnableSinglePaymentAuthorizationCheckout;\n    }\n\n    @observable protected _shouldEnableCheckoutErrorDisplayMessaging?: boolean;\n\n    @computed public get shouldEnableCheckoutErrorDisplayMessaging(): Readonly<boolean | undefined> {\n        return this._shouldEnableCheckoutErrorDisplayMessaging;\n    }\n\n    @observable protected _shouldCollapsePaymentSection?: boolean;\n\n    @computed public get shouldCollapsePaymentSection(): Readonly<boolean | undefined> {\n        return this._shouldCollapsePaymentSection;\n    }\n\n    @observable protected _shouldTriggerPaymentWithPlaceOrder?: boolean;\n\n    @computed public get shouldTriggerPaymentWithPlaceOrder(): Readonly<boolean | undefined> {\n        return this._shouldTriggerPaymentWithPlaceOrder;\n    }\n\n    @observable protected _isPaymentSectionContainerReady?: boolean;\n\n    @computed public get isPaymentSectionContainerReady(): Readonly<boolean | undefined> {\n        return this._isPaymentSectionContainerReady;\n    }\n\n    @observable protected _cardPaymentAcceptResult?: CardPaymentAcceptResult;\n\n    @computed public get cardPaymentAcceptResult(): Readonly<CardPaymentAcceptResult | undefined> {\n        return this._cardPaymentAcceptResult;\n    }\n\n    @observable protected _isPaymentSectionContainerHasError?: boolean;\n\n    @computed public get isPaymentSectionContainerHasError(): Readonly<boolean | undefined> {\n        return this._isPaymentSectionContainerHasError;\n    }\n\n    @observable protected _redirectAdditionalContext?: string;\n\n    @computed public get redirectAdditionalContext(): Readonly<string | undefined> {\n        return this._redirectAdditionalContext;\n    }\n\n    @observable protected _redirectPaymentConnectorId?: string;\n\n    @computed public get redirectPaymentConnectorId(): Readonly<string | undefined> {\n        return this._redirectPaymentConnectorId;\n    }\n\n    @observable protected _checkoutErrorPaymentConnectorId?: string;\n\n    @computed public get checkoutErrorPaymentConnectorId(): Readonly<string | undefined> {\n        return this._checkoutErrorPaymentConnectorId;\n    }\n\n    @observable protected _isPlaceOrderEnabledInRedirection?: boolean;\n\n    @computed public get isPlaceOrderEnabledInRedirection(): Readonly<boolean | undefined> {\n        return this._isPlaceOrderEnabledInRedirection;\n    }\n\n    @observable protected _isPaymentVerificationRequired?: boolean;\n\n    @computed public get isPaymentVerificationRequired(): Readonly<boolean | undefined> {\n        return this._isPaymentVerificationRequired;\n    }\n\n    @observable protected _isCheckoutCallFailed?: boolean;\n\n    @computed public get isCheckoutCallFailed(): Readonly<boolean | undefined> {\n        return this._isCheckoutCallFailed;\n    }\n\n    @observable protected _customerAccountAmount: number = 0;\n\n    @computed public get customerAccountAmount(): Readonly<number> {\n        return this._customerAccountAmount;\n    }\n\n    @observable protected _shouldEnableExpressCheckoutInCheckout?: boolean;\n\n    @computed public get shouldEnableExpressCheckoutInCheckout(): Readonly<boolean | undefined> {\n        return this._shouldEnableExpressCheckoutInCheckout;\n    }\n\n    @observable protected _shouldEnableExpressCheckoutInCart?: boolean;\n\n    @computed public get shouldEnableExpressCheckoutInCart(): Readonly<boolean | undefined> {\n        return this._shouldEnableExpressCheckoutInCart;\n    }\n\n    @observable protected _shippingAddressFromExpressCheckout?: Address;\n\n    @computed public get shippingAddressFromExpressCheckout(): Readonly<Address | undefined> {\n        return this._shippingAddressFromExpressCheckout;\n    }\n\n    @observable protected _emailAddressFromExpressCheckout: string = '';\n\n    @computed public get emailAddressFromExpressCheckout(): Readonly<string> {\n        return this._emailAddressFromExpressCheckout;\n    }\n\n    @observable protected _billingAddressFromExpressCheckout?: Address;\n\n    @computed public get billingAddressFromExpressCheckout(): Readonly<Address | undefined> {\n        return this._billingAddressFromExpressCheckout;\n    }\n\n    @observable protected _isExpressCheckoutApplied?: boolean;\n\n    @computed public get isExpressCheckoutApplied(): Readonly<boolean | undefined> {\n        return this._isExpressCheckoutApplied;\n    }\n\n    @observable protected _isExpressAddressApplied?: boolean;\n\n    @computed public get isExpressAddressApplied(): Readonly<boolean | undefined> {\n        return this._isExpressAddressApplied;\n    }\n\n    @observable protected _isExpressCheckoutAppliedInCartPage?: boolean;\n\n    @computed public get isExpressCheckoutAppliedInCartPage(): Readonly<boolean | undefined> {\n        return this._isExpressCheckoutAppliedInCartPage;\n    }\n\n    @observable protected _isExpressPaymentModulesReady?: CommerceProperty[];\n\n    @computed public get isExpressPaymentModulesReady(): Readonly<CommerceProperty[] | undefined> {\n        return this._isExpressPaymentModulesReady;\n    }\n\n    @computed public get isPaymentVerificationRedirection(): Readonly<boolean> {\n        const { requestFormData, query } = this.actionContext.requestContext;\n        return !!(query && query.pv === '1' && (requestFormData || query.redirectResult));\n    }\n\n    @observable protected _checkoutError?: ICheckoutError;\n\n    @computed public get checkoutError(): Readonly<ICheckoutError | undefined> {\n        return this._checkoutError;\n    }\n\n    @observable protected _isBillingAddressHasError?: boolean;\n\n    @computed public get isBillingAddressHasError(): Readonly<boolean | undefined> {\n        return this._isBillingAddressHasError;\n    }\n\n    @observable protected _checkoutErrorFocus?: CheckoutModule;\n\n    @computed public get checkoutErrorFocus(): Readonly<CheckoutModule | undefined> {\n        return this._checkoutErrorFocus;\n    }\n\n    @observable protected _shouldFocusOnCheckoutError?: boolean;\n\n    @computed public get shouldFocusOnCheckoutError(): Readonly<boolean | undefined> {\n        return this._shouldFocusOnCheckoutError;\n    }\n\n    @observable protected _checkoutGenericData: object = {};\n\n    constructor(actionContext: IActionContext) {\n        super(actionContext);\n        this._checkoutCart = new BaseCheckoutCartState(actionContext);\n        this._attributeValues = [];\n        this._extensionProperties = [];\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\n        this._shouldEnableSinglePaymentAuthorizationCheckout = actionContext.requestContext.app.config\n            .shouldEnableSinglePaymentAuthorizationCheckout as boolean;\n\n        // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for app settings.\n        this._shouldEnableCheckoutErrorDisplayMessaging = actionContext.requestContext.app.config\n            .shouldEnableCheckoutErrorDisplayMessaging as boolean;\n    }\n\n    @action\n    public updateSalesOrder(input: {\n        newSalesOrder: SalesOrder;\n        newOrderedProducts: SimpleProduct[];\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._salesOrder = input.newSalesOrder;\n        this._orderedProducts = input.newOrderedProducts;\n        this._attributeValues = input.newSalesOrder.AttributeValues || [];\n        this._extensionProperties = input.newSalesOrder.ExtensionProperties || [];\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateAttributeValues(input: {\n        newAttributeValues: AttributeValueBase[];\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._attributeValues = input.newAttributeValues;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateExtensionProperties(input: {\n        newExtensionProperties: CommerceProperty[];\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._extensionProperties = input.newExtensionProperties;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateTokenizedPaymentCard(input: {\n        newTokenizedPaymentCard?: TokenizedPaymentCard;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateTenderLine(input: { newTenderLine?: TenderLine; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._tenderLine = input.newTenderLine;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateShippingAddress(input: {\n        newShippingAddress: Address;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._shippingAddress = input.newShippingAddress;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateCartLinesShippingAddress(input: {\n        newCartLinesWithShippingAddress: CartLine[];\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._cartLinesWithShippingAddress = input.newCartLinesWithShippingAddress;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateHasShippingAddress(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newHasShippingAddress: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._hasShippingAddress = input.newHasShippingAddress;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateHasCartDeliveryMode(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newHasCartDeliveryMode: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._hasCartDeliveryMode = input.newHasCartDeliveryMode;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateTermsAndConditionsAcceptance(input: {\n        newIsTermsAndConditionAccepted: boolean;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._isTermsAndConditionAccepted = input.newIsTermsAndConditionAccepted;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateIsTermsAndConditionsChecked(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsTermsAndConditionChecked: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isTermsAndConditionChecked = input.newIsTermsAndConditionChecked;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShouldCollapsePaymentSection(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newShouldCollapsePaymentSection: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._shouldCollapsePaymentSection = input.newShouldCollapsePaymentSection;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShouldTriggerPaymentWithPlaceOrder(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newShouldTriggerPaymentWithPlaceOrder: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._shouldTriggerPaymentWithPlaceOrder = input.newShouldTriggerPaymentWithPlaceOrder;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsPaymentSectionContainerReady(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsPaymentSectionContainerReady: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isPaymentSectionContainerReady = input.newIsPaymentSectionContainerReady;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateCardPaymentAcceptResult(input: {\n        newCardPaymentAcceptResult: CardPaymentAcceptResult;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsPaymentSectionContainerHasError(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsPaymentSectionContainerHasError: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isPaymentSectionContainerHasError = input.newIsPaymentSectionContainerHasError;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateRedirectAdditionalContext(input: {\n        newRedirectAdditionalContext: string;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._redirectAdditionalContext = input.newRedirectAdditionalContext;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateRedirectPaymentConnectorId(input: {\n        newRedirectPaymentConnectorId: string;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._redirectPaymentConnectorId = input.newRedirectPaymentConnectorId;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateCheckoutErrorPaymentConnectorId(input: {\n        newCheckoutErrorPaymentConnectorId: string;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._checkoutErrorPaymentConnectorId = input.newCheckoutErrorPaymentConnectorId;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsCheckoutCallFailed(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsCheckoutCallFailed: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isCheckoutCallFailed = input.newIsCheckoutCallFailed;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsPlaceOrderEnabledInRedirection(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsPlaceOrderEnabledInRedirection: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isPlaceOrderEnabledInRedirection = input.newIsPlaceOrderEnabledInRedirection;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsPaymentVerificationRequired(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsPaymentVerificationRequired: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isPaymentVerificationRequired = input.newIsPaymentVerificationRequired;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public updateBillingAddress(input: { newBillingAddress: Address; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._billingAddress = input.newBillingAddress;\n\n        // @ts-expect-error\n        this._isBillingAddressSameAsShippingAddress = input.additionalProperties?.isBillingAddressSameAsShippingAddress || false;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public removeBillingAddress(input: { additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._billingAddress = undefined;\n        this._isBillingAddressSameAsShippingAddress = undefined;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updatePaymentTenderType(input: {\n        newPaymentTenderType?: string;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._paymentTenderType = input.newPaymentTenderType;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateCardPrefix(input: { newCardPrefix: string; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._cardPrefix = input.newCardPrefix;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public removeGiftCard(input: { giftCardNumber: string; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public removeGiftCardExtend(input: { giftCardNumber: string; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._giftCardExtends = this._giftCardExtends.filter(giftCard => giftCard.Id !== input.giftCardNumber);\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public addGiftCard(input: { giftCard: GiftCard; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        // @ts-expect-error\n        const { Pin, ExpirationDate, TenderTypeId } = input.additionalProperties || {};\n\n        const gitCardExtend = { ...input.giftCard, ...{ Pin, ExpirationDate, TenderTypeId } };\n\n        this._giftCardExtends = [gitCardExtend, ...this._giftCardExtends];\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public addGiftCardExtend(input: { giftCard: IGiftCardExtend; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._giftCardExtends = [input.giftCard, ...this._giftCardExtends];\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateLoyaltyCardNumber(input: { newLoyaltyCardNumber: string; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._loyaltyCardNumber = input.newLoyaltyCardNumber;\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateLoyaltyAmount(input: { newAmount: number; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._loyaltyAmount = Number(input.newAmount.toFixed(2));\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateGuestCheckoutEmail(input: {\n        newGuestCheckoutEmail: string;\n        customerReference?: string;\n        customerRequisition?: string;\n        note?: Note;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._guestCheckoutEmail = input.newGuestCheckoutEmail;\n        const emailOnCart = this.checkoutCart.cart.ReceiptEmail;\n        const customerReqOnCart = this.checkoutCart.cart.CustomerRequisition;\n        const customerRefOnCart = this.checkoutCart.cart.Comment;\n        const noteOnCart = this.checkoutCart.cart.Notes;\n        const noteInput = input?.note;\n        if (\n            emailOnCart !== input.newGuestCheckoutEmail ||\n            customerRefOnCart !== input.customerReference ||\n            customerReqOnCart !== input.customerRequisition ||\n            (noteOnCart !== undefined && noteOnCart[0]?.Description) !== (noteInput !== undefined && noteInput[0]?.Description)\n        ) {\n            await this.checkoutCart.updateReceiptEmail({\n                newEmail: input.newGuestCheckoutEmail,\n                customerReference: input.customerReference,\n                customerRequisition: input.customerRequisition,\n                note: input.note\n            });\n        }\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    /**\n     * Updates cartLines objects in cart.\n     * @param input - The input.\n     * @param input.updatedCartLinesObject - updated cartline.\n     * @returns ICartActionResult.\n     */\n    @action\n    public async updateCartLines(input: { updatedCartLinesObject: CartLine[] }): Promise<ICheckoutActionResult> {\n        await this.checkoutCart.updateCartLines({ updatedCartLinesObject: input.updatedCartLinesObject });\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateHasGuestCheckoutEmail(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: {\n            newHasGuestCheckoutEmail: boolean;\n            customerReference?: string;\n            customerRequisition?: string;\n            note?: Note;\n            additionalProperties?: { [key: string]: unknown };\n        }\n    ): Promise<ICheckoutActionResult> {\n        this._hasGuestCheckoutEmail = input.newHasGuestCheckoutEmail;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public removeCheckoutCartId(input: { additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this.actionContext.requestContext.cookies.removeCheckoutCartCookie();\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public saveDataInStorage(input: { additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        const { sessionStorage } = this.actionContext.requestContext;\n\n        // Add all local data to session storage\n        if (this.billingAddress) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.BillingAddress, {\n                billingAddress: this.billingAddress,\n                isBillingAddressSameAsShippingAddress: this.isBillingAddressSameAsShippingAddress\n            });\n        }\n\n        if (this.giftCardExtends && this.giftCardExtends.length > 0) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.GiftCard, this.giftCardExtends);\n        }\n\n        if (this.loyaltyCardNumber) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber, { loyaltyCardNumber: this.loyaltyCardNumber });\n        }\n\n        if (this.loyaltyAmount) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.LoyaltyAmount, { loyaltyAmount: this.loyaltyAmount });\n        }\n\n        if (this.isTermsAndConditionAccepted) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.TermsAndCondition, {\n                isTermsAndConditionAccepted: this.isTermsAndConditionAccepted\n            });\n        }\n\n        if (this.paymentTenderType) {\n            window.sessionStorage.setItem(CheckoutStorageKey.PaymentTenderType, this.paymentTenderType);\n        }\n\n        if (this.redirectPaymentConnectorId) {\n            window.sessionStorage.setItem(CheckoutStorageKey.RedirectPaymentConnectorId, this.redirectPaymentConnectorId);\n        }\n\n        if (this.isExpressCheckoutApplied) {\n            window.sessionStorage.setItem(CheckoutStorageKey.IsExpressCheckoutApplied, this.isExpressCheckoutApplied.toString());\n        }\n\n        // Save generic data with SaveDataBeforeRedirect value true\n        const filtered = Object.keys(this._checkoutGenericData).reduce((filteredData: object, key: string) => {\n            if (this._checkoutGenericData[key].SaveDataBeforeRedirect) {\n                filteredData[key] = this._checkoutGenericData[key];\n            }\n            return filteredData;\n        }, {});\n\n        if (Object.keys(filtered).length > 0) {\n            sessionStorage.setCheckoutCartData(CheckoutStorageKey.CheckoutGenericData, { checkoutGenericData: filtered });\n        }\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public updateCustomerAccountAmount(input: { newAmount: number; additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this._customerAccountAmount = Number(input.newAmount.toFixed(2));\n\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public async updateBillingAddressFromExpressCheckout(input: {\n        newBillingAddressFromExpressCheckout: Address;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._billingAddressFromExpressCheckout = input.newBillingAddressFromExpressCheckout;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShippingAddressFromExpressCheckout(input: {\n        newShippingAddressFromExpressCheckout: Address;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._shippingAddressFromExpressCheckout = input.newShippingAddressFromExpressCheckout;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateEmailAddressFromExpressCheckout(input: {\n        newEmailAddressFromExpressCheckout: string;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShouldEnableExpressCheckoutInCheckout(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newShouldEnableExpressCheckoutInCheckout: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._shouldEnableExpressCheckoutInCheckout = input.newShouldEnableExpressCheckoutInCheckout;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShouldEnableExpressCheckoutInCart(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newShouldEnableExpressCheckoutInCart: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._shouldEnableExpressCheckoutInCart = input.newShouldEnableExpressCheckoutInCart;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsExpressCheckoutApplied(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsExpressCheckoutApplied: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsExpressAddressApplied(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsExpressAddressApplied: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isExpressAddressApplied = input.newIsExpressAddressApplied;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsExpressCheckoutAppliedInCartPage(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsExpressCheckoutAppliedInCartPage: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isExpressCheckoutAppliedInCartPage = input.newIsExpressCheckoutAppliedInCartPage;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsBillingAddressHasError(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newIsBillingAddressHasError: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._isBillingAddressHasError = input.newIsBillingAddressHasError;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateIsExpressPaymentModulesReady(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: {\n            newIsExpressPaymentModulesReady: CommerceProperty[];\n            additionalProperties?: { [key: string]: unknown };\n        }\n    ): Promise<ICheckoutActionResult> {\n        this._isExpressPaymentModulesReady = input.newIsExpressPaymentModulesReady;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateExpressCheckoutDetails(input: {\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        newIsExpressCheckoutApplied: boolean;\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        newIsExpressAddressApplied?: boolean;\n        newCardPaymentAcceptResult?: CardPaymentAcceptResult;\n        newEmailAddressFromExpressCheckout: string;\n        newTenderLine?: TenderLine;\n        newPaymentTenderType?: string;\n        newTokenizedPaymentCard?: TokenizedPaymentCard;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._isExpressCheckoutApplied = input.newIsExpressCheckoutApplied;\n\n        if (input.newIsExpressAddressApplied !== undefined) {\n            this._isExpressAddressApplied = input.newIsExpressAddressApplied;\n        }\n\n        if (input.newCardPaymentAcceptResult !== undefined) {\n            this._cardPaymentAcceptResult = input.newCardPaymentAcceptResult;\n        }\n\n        if (input.newPaymentTenderType !== undefined) {\n            this._paymentTenderType = input.newPaymentTenderType;\n        }\n\n        if (input.newTokenizedPaymentCard !== undefined) {\n            this._tokenizedPaymentCard = input.newTokenizedPaymentCard;\n        }\n\n        if (input.newTenderLine !== undefined) {\n            this._tenderLine = input.newTenderLine;\n        }\n\n        if (input.newEmailAddressFromExpressCheckout) {\n            this._emailAddressFromExpressCheckout = input.newEmailAddressFromExpressCheckout;\n        }\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateCheckoutError(input: {\n        newCheckoutError: ICheckoutError;\n        additionalProperties?: { [key: string]: unknown };\n    }): Promise<ICheckoutActionResult> {\n        this._checkoutError = input.newCheckoutError;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public setCheckoutGenericData(input: {\n        key: string;\n        checkoutGenericData: ICheckoutGenericData;\n        additionalProperties?: object;\n    }): Promise<ICheckoutActionResult> {\n        this._checkoutGenericData[input.key] = input.checkoutGenericData;\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    @action\n    public getCheckoutGenericData(input: { key: string }): ICheckoutGenericData | undefined {\n        return this._checkoutGenericData[input.key];\n    }\n\n    @action\n    public async updateCheckoutErrorFocus(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newCheckoutErrorFocus: CheckoutModule; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._checkoutErrorFocus = input.newCheckoutErrorFocus;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    @action\n    public async updateShouldFocusOnCheckoutError(\n        // eslint-disable-next-line @typescript-eslint/naming-convention -- Keep the same naming pattern.\n        input: { newShouldFocusOnCheckoutError: boolean; additionalProperties?: { [key: string]: unknown } }\n    ): Promise<ICheckoutActionResult> {\n        this._shouldFocusOnCheckoutError = input.newShouldFocusOnCheckoutError;\n\n        const result: ICheckoutActionResult = { status: 'SUCCESS' };\n        return Promise.resolve(result);\n    }\n\n    public async initialize(): Promise<void> {\n        if (this.isInitialized) {\n            return;\n        }\n\n        await this._checkoutCart.initialize();\n\n        this.setInitialData();\n        this.isInitialized = true;\n        this._status = 'READY';\n        this._attributeValues = [];\n        this._extensionProperties = [];\n    }\n\n    @action\n    private cleanCheckoutData(input: { additionalProperties?: object }): Promise<ICheckoutActionResult> {\n        this.actionContext.requestContext.sessionStorage.removeCheckoutCartData();\n        return Promise.resolve(<ICheckoutActionResult>{ status: 'SUCCESS' });\n    }\n\n    private setInitialData() {\n        const { sessionStorage } = this.actionContext.requestContext;\n\n        if (this.isPaymentVerificationRedirection) {\n            const billingAddress = sessionStorage.getCheckoutCartData(CheckoutStorageKey.BillingAddress);\n            const giftCard = sessionStorage.getCheckoutCartData(CheckoutStorageKey.GiftCard);\n\n            this._billingAddress = get(billingAddress, 'billingAddress');\n            this._isBillingAddressSameAsShippingAddress = get(billingAddress, 'isBillingAddressSameAsShippingAddress');\n            this._giftCardExtends = (giftCard && Array.isArray(giftCard) ? giftCard : []) as IGiftCardExtend[];\n            this._loyaltyCardNumber = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyCardNumber), 'loyaltyCardNumber');\n            this._loyaltyAmount = get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.LoyaltyAmount), 'loyaltyAmount');\n            this._isTermsAndConditionAccepted = get(\n                sessionStorage.getCheckoutCartData(CheckoutStorageKey.TermsAndCondition),\n                'isTermsAndConditionAccepted'\n            );\n            this._checkoutGenericData =\n                get(sessionStorage.getCheckoutCartData(CheckoutStorageKey.CheckoutGenericData), 'checkoutGenericData') || {};\n            this._paymentTenderType = window.sessionStorage.getItem(CheckoutStorageKey.PaymentTenderType) ?? undefined;\n            this._redirectPaymentConnectorId = window.sessionStorage.getItem(CheckoutStorageKey.RedirectPaymentConnectorId) as string;\n            this._isExpressCheckoutApplied = (window.sessionStorage.getItem(CheckoutStorageKey.IsExpressCheckoutApplied) as string)\n                ? true\n                : false;\n        }\n\n        this.cleanCheckoutData({});\n    }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport createGlobalStateDataAction from './global-state-data-action';\n\nexport default createGlobalStateDataAction<ICartState>('CARTSTATE', BaseCartState);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { BaseCheckoutState } from '../checkout-state/base-checkout-state';\nimport { ICheckoutState } from '../state-interfaces/i-checkout-state';\nimport createGlobalStateDataAction from './global-state-data-action';\n\nexport default createGlobalStateDataAction<ICheckoutState>('CHECKOUTSTATE', BaseCheckoutState);\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    getCatalogId,\n    IAction,\n    IActionContext,\n    IActionInput,\n    ICommerceApiSettings,\n    ICreateActionContext,\n    IRequestContext\n} from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICartState } from '../state-interfaces';\nimport { getCartState } from './get-cart-state';\n\n/**\n * Input class for getCart data action.\n */\nexport class GetCartStateDataInput implements IActionInput {\n    private readonly apiSettings: ICommerceApiSettings;\n\n    private readonly catalogId?: number;\n\n    constructor(apiSettings: ICommerceApiSettings, requestContext?: IRequestContext) {\n        this.apiSettings = apiSettings;\n        if (requestContext) {\n            this.catalogId = getCatalogId(requestContext);\n        }\n    }\n\n    public getCacheKey = () => `GetCart-ChannelId:${this.apiSettings.channelId}-CatalogId:${this.catalogId ?? 0}`;\n\n    public getCacheObjectType = () => 'Cart';\n\n    public dataCacheType = (): CacheType => 'none';\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n    return new GetCartStateDataInput(inputData.requestContext.apiSettings, inputData.requestContext);\n};\n\n/**\n * Data action to copy the cart for  actions.\n * @param input\n * @param ctx\n */\nexport async function getCartStateData(input: GetCartStateDataInput, ctx: IActionContext): Promise<ICartState | undefined> {\n    const cartState = await getCartState(ctx);\n    if (cartState && cartState.cart.Id !== undefined) {\n        return cartState;\n    }\n\n    return undefined;\n}\n\nexport default createObservableDataAction({\n    id: '@msdyn365-commerce/global-state/get-cart-state-data',\n    action: <IAction<Cart | undefined>>getCartStateData,\n    input: createInput\n});\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, IActionContext } from '@msdyn365-commerce/core';\n\nimport { BaseCartState } from '../cart-state/base-cart-state';\nimport { ICartState } from '../state-interfaces/i-cart-state';\nimport cartStateDataAction from './cart-state-data-action';\nimport { GlobalStateInput } from './global-state-data-action';\n\nexport function getCartState(ctx: IActionContext): AsyncResult<ICartState> {\n    return cartStateDataAction(\n        new GlobalStateInput<ICartState>('CARTSTATE', BaseCartState, ctx.requestContext.apiSettings, ctx.requestContext),\n        ctx\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    CacheType,\n    createObservableDataAction,\n    IAction,\n    IActionContext,\n    IActionInput,\n    ICommerceApiSettings,\n    ICreateActionContext\n} from '@msdyn365-commerce/core';\nimport { Cart } from '@msdyn365-commerce/retail-proxy';\nimport { copyAsync, readAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\n\nimport { getCartState } from './get-cart-state';\n\n/**\n * Input class for getCheckoutCart data action.\n */\nexport class GetCheckoutCartInput implements IActionInput {\n    private readonly apiSettings: ICommerceApiSettings;\n\n    constructor(apiSettings: ICommerceApiSettings) {\n        this.apiSettings = apiSettings;\n    }\n\n    public getCacheKey = () => `CheckoutCart-ChannelId:${this.apiSettings.channelId}-ApiSettingsCatalogId:${this.apiSettings.catalogId}`;\n\n    public getCacheObjectType = () => 'CheckoutCart';\n\n    public dataCacheType = (): CacheType => 'request';\n}\n\nenum CartTokenPrefix {\n    Auth = 't',\n    Anon = 'p'\n}\n\nconst createInput = (inputData: ICreateActionContext) => {\n    return new GetCheckoutCartInput(inputData.requestContext.apiSettings);\n};\n\n/**\n * Data action to copy the cart for checkout actions.\n * @param input\n * @param ctx\n */\nexport async function getCheckoutCart(input: GetCheckoutCartInput, ctx: IActionContext): Promise<Cart | undefined> {\n    const savedCheckoutCartId = ctx.requestContext.cookies.getCheckoutCartCookie();\n    const cartCookieParts: string[] = savedCheckoutCartId.split(':');\n    let checkoutCartId = null;\n    const isAuthenticated = ctx.requestContext.user.isAuthenticated;\n\n    if (\n        (isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Auth) ||\n        (!isAuthenticated && cartCookieParts[0] === CartTokenPrefix.Anon)\n    ) {\n        checkoutCartId = cartCookieParts[1];\n    }\n\n    let checkoutCart: Cart | undefined;\n\n    if (checkoutCartId) {\n        try {\n            checkoutCart = await readAsync({ callerContext: ctx, bypassCache: 'none' }, checkoutCartId);\n        } catch (error) {\n            ctx.telemetry.error('Error getting checkout cart based on saved checkout card id');\n            ctx.telemetry.exception(error);\n        }\n    }\n\n    const cartState = await getCartState(ctx);\n    if (cartState && cartState.cart.Id !== undefined) {\n        if (checkoutCart && checkoutCart.Version && cartState.cart.Version && checkoutCart.Version > cartState.cart.Version) {\n            return Promise.resolve(checkoutCart);\n        }\n\n        return copyAsync({ callerContext: ctx }, cartState.cart.Id, 2)\n            .then(cart => {\n                ctx.requestContext.cookies.setCheckoutCartCookie(cart, isAuthenticated);\n                return cart;\n            })\n            .catch(error => {\n                ctx.telemetry.error('Error copying cart');\n                ctx.telemetry.exception(error);\n                return undefined;\n            });\n    }\n\n    return undefined;\n}\n\nexport const getCheckoutCartDataAction = createObservableDataAction({\n    id: '@msdyn365-commerce/global-state/get-checkout-cart',\n    action: <IAction<Cart | undefined>>getCheckoutCart,\n    input: createInput\n});\n\nexport default getCheckoutCartDataAction;\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    getCatalogId,\n    IAction,\n    IActionContext,\n    IActionInput,\n    ICommerceApiSettings,\n    ICreateActionContext,\n    IObservableAction,\n    IRequestContext\n} from '@msdyn365-commerce/core';\n\nimport { createGlobalState, GlobalStateConstructor, IGlobalState } from '../global-state/i-global-state';\n\nexport declare type GlobalStateType = 'CARTSTATE' | 'CHECKOUTSTATE';\n\n/**\n * Shared class that handles global state inputs.\n */\nexport class GlobalStateInput<TOut extends IGlobalState> implements IActionInput {\n    public readonly stateConstructor: GlobalStateConstructor<TOut>;\n\n    public readonly key: GlobalStateType;\n\n    public readonly catalogId?: number;\n\n    private readonly apiSettings: ICommerceApiSettings;\n\n    public constructor(\n        key: GlobalStateType,\n        stateConstructor: GlobalStateConstructor<TOut>,\n        apiSettings: ICommerceApiSettings,\n        requestContext?: IRequestContext\n    ) {\n        this.apiSettings = apiSettings;\n        this.stateConstructor = stateConstructor;\n        this.key = key;\n\n        if (requestContext) {\n            this.catalogId = getCatalogId(requestContext);\n        }\n    }\n\n    public getCacheKey = () => `Key:${this.key}-ChannelId:${this.apiSettings.channelId}-CatalogId:${this.catalogId ?? 0}`;\n\n    public getCacheObjectType = () => this.key;\n\n    public dataCacheType = (): CacheType => 'instance';\n}\n\nexport async function getState<TOut extends IGlobalState>(input: GlobalStateInput<TOut>, ctx: IActionContext): Promise<TOut> {\n    const globalStateObject = createGlobalState(input.stateConstructor, ctx);\n\n    await globalStateObject.initialize();\n\n    return globalStateObject;\n}\n\nexport default function createGlobalStateDataAction<TOut extends IGlobalState>(\n    key: GlobalStateType,\n    stateConstructor: GlobalStateConstructor<TOut>\n): IObservableAction<TOut> {\n    return createObservableDataAction({\n        action: <IAction<TOut>>getState,\n        input: (args: ICreateActionContext) => {\n            return new GlobalStateInput(key, stateConstructor, args.requestContext.apiSettings, args.requestContext);\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 { IActionContext } from '@msdyn365-commerce/core';\n\nexport declare type GlobalStateStatus = 'READY' | 'UPDATING' | 'ERROR';\n\nexport type GlobalStateConstructor<T extends IGlobalState> = new (actionContext: IActionContext) => T;\n\nexport function createGlobalState<T extends IGlobalState>(ctor: GlobalStateConstructor<T>, actionContext: IActionContext): T {\n    return new ctor(actionContext);\n}\n\nexport interface IGlobalState {\n    readonly status: GlobalStateStatus;\n\n    initialize(): Promise<void>;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AsyncResult, IActionContext } from '@msdyn365-commerce/core';\n\nimport { BaseCheckoutState } from '../checkout-state/base-checkout-state';\nimport { ICheckoutState } from '../state-interfaces/i-checkout-state';\nimport checkoutStateDataAction from './checkout-state-data-action';\nimport { GlobalStateInput } from './global-state-data-action';\n\nexport function getCheckoutState(ctx: IActionContext): AsyncResult<ICheckoutState> {\n    return checkoutStateDataAction(\n        new GlobalStateInput<ICheckoutState>('CHECKOUTSTATE', BaseCheckoutState, ctx.requestContext.apiSettings, ctx.requestContext),\n        ctx\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 { computed, observable } from 'mobx';\n\nimport { GlobalStateStatus, IGlobalState } from './i-global-state';\n\n/**\n * Base global state that handles common global state behavior that other state can extend from.\n */\nexport class GlobalState implements IGlobalState {\n    protected isInitialized: boolean = false;\n\n    protected actionContext: IActionContext;\n\n    @observable protected _status: GlobalStateStatus;\n\n    @computed public get status(): Readonly<GlobalStateStatus> {\n        return this._status;\n    }\n\n    constructor(actionContext: IActionContext) {\n        this.actionContext = actionContext;\n        this._status = 'UPDATING';\n    }\n\n    public async initialize(): Promise<void> {\n        this.isInitialized = true;\n        this._status = 'READY';\n\n        return;\n    }\n\n    protected async _doAsyncAction<TOut>(lambda: () => Promise<TOut>): Promise<TOut> {\n        this._status = 'UPDATING';\n\n        return lambda()\n            .then(result => {\n                this._status = 'READY';\n                return result;\n            })\n            .catch(error => {\n                console.log(error);\n                this._status = 'ERROR';\n\n                return Promise.reject(error);\n            });\n    }\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nexport enum ErrorCode {\n    ActionError = 'ActionError',\n    Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard = 'Microsoft_Dynamics_Commerce_Runtime_BlockedLoyaltyCard',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountLimitSignDifferentFromAmountDue',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsAvailableCreditLimit',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsCustomerAccountFloorLimit',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItems',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentForCustomerWithoutAllowOnAccount',\n    Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices = 'Microsoft_Dynamics_Commerce_Runtime_CustomerAccountPaymentNotAllowedForOpenInvoices',\n    Microsoft_Dynamics_Commerce_Runtime_FraudRisk = 'Microsoft_Dynamics_Commerce_Runtime_FraudRisk',\n    Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed = 'Microsoft_Dynamics_Commerce_Runtime_GiftCardBalanceInquiryFailed',\n    Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch = 'Microsoft_Dynamics_Commerce_Runtime_GiftCardCurrencyMismatch',\n    Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion = 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion',\n    Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber = 'Microsoft_Dynamics_Commerce_Runtime_InvalidLoyaltyCardNumber',\n    Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest = 'Microsoft_Dynamics_Commerce_Runtime_InvalidPaymentRequest',\n    Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines = 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines',\n    Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed = ' Microsoft_Dynamics_Commerce_Runtime_MultipleCustomerAccountPaymentsNotAllowed',\n    Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender = 'Microsoft_Dynamics_Commerce_Runtime_NoMoreThanOneLoyaltyTender',\n    Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry = 'Microsoft_Dynamics_Commerce_Runtime_NoResponseFromGatewayForGiftCardBalanceInquiry',\n    Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard = 'Microsoft_Dynamics_Commerce_Runtime_NoTenderLoyaltyCard',\n    Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints = 'Microsoft_Dynamics_Commerce_Runtime_NotEnoughRewardPoints',\n    Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided = 'Microsoft_Dynamics_Commerce_Runtime_PaymentAlreadyVoided',\n    Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance = 'Microsoft_Dynamics_Commerce_Runtime_PaymentAmountExceedsGiftBalance',\n    Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties = 'Microsoft_Dynamics_Commerce_Runtime_PaymentRequiresMerchantProperties',\n    Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount = 'Microsoft_Dynamics_Commerce_Runtime_PaymentUsingUnauthorizedAccount',\n    Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed = 'Microsoft_Dynamics_Commerce_Runtime_RefundAmountMoreThanAllowed',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardAdditionalContextRequired',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported = 'Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePaymentCardTypeMissingOrNotSupported',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment = 'Microsoft_Dynamics_Commerce_Runtime_UnableToCancelPayment',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo = 'Microsoft_Dynamics_Commerce_Runtime_UnableToReadCardTokenInfo',\n    Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult = 'Microsoft_Dynamics_Commerce_Runtime_UnableToRetrieveCardPaymentAcceptResult'\n}\n\nexport enum ErrorMessageResource {\n    blockedLoyaltyCardErrorMessage = 'blockedLoyaltyCardErrorMessage',\n    checkoutTimeoutErrorMessage = 'checkoutTimeoutErrorMessage',\n    customerAccountLimitSignDifferentFromAmountDueErrorMessage = 'customerAccountLimitSignDifferentFromAmountDueErrorMessage',\n    customerAccountPaymentExceedsAvailableCreditLimitErrorMessage = 'customerAccountPaymentExceedsAvailableCreditLimitErrorMessage',\n    customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage = 'customerAccountPaymentExceedsCustomerAccountFloorLimitErrorMessage',\n    customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage = 'customerAccountPaymentExceedsTotalAmountForCarryOutAndReturnItemsErrorMessage',\n    customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage = 'customerAccountPaymentForCustomerWithoutAllowOnAccountErrorMessage',\n    customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage = 'customerAccountPaymentNotAllowedForOpenInvoicesErrorMessage',\n    fraudRiskErrorMessage = 'fraudRiskErrorMessage',\n    giftCardBalanceInquiryFailedErrorMessage = 'giftCardBalanceInquiryFailedErrorMessage',\n    giftCardCurrencyMismatchErrorMessage = 'giftCardCurrencyMismatchErrorMessage',\n    invalidCartVersionErrorMessage = 'invalidCartVersionErrorMessage',\n    invalidLoyaltyCardNumberErrorMessage = 'invalidLoyaltyCardNumberErrorMessage',\n    invalidPaymentRequestConsoleErrorMessage = 'invalidPaymentRequestConsoleErrorMessage',\n    invalidPaymentRequestErrorMessage = 'invalidPaymentRequestErrorMessage',\n    missingRequiredCartTenderLinesErrorMessage = 'missingRequiredCartTenderLinesErrorMessage',\n    multipleCustomerAccountPaymentsNotAllowedErrorMessage = 'multipleCustomerAccountPaymentsNotAllowedErrorMessage',\n    noMoreThanOneLoyaltyTenderErrorMessage = 'noMoreThanOneLoyaltyTenderErrorMessage',\n    noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage = 'noResponseFromGatewayForGiftCardBalanceInquiryErrorMessage',\n    noTenderLoyaltyCardErrorMessage = 'noTenderLoyaltyCardErrorMessage',\n    notEnoughRewardPointsErrorMessage = 'notEnoughRewardPointsErrorMessage',\n    paymentAlreadyVoidedErrorMessage = 'paymentAlreadyVoidedErrorMessage',\n    paymentAmountExceedsGiftBalanceErrorMessage = 'paymentAmountExceedsGiftBalanceErrorMessage',\n    paymentRequiresMerchantPropertiesConsoleErrorMessage = 'paymentRequiresMerchantPropertiesConsoleErrorMessage',\n    paymentRequiresMerchantPropertiesErrorMessage = 'paymentRequiresMerchantPropertiesErrorMessage',\n    paymentUsingUnauthorizedAccountErrorMessage = 'paymentUsingUnauthorizedAccountErrorMessage',\n    refundAmountMoreThanAllowedErrorMessage = 'refundAmountMoreThanAllowedErrorMessage',\n    unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage = 'unableToAuthorizePaymentCardAdditionalContextRequiredErrorMessage',\n    unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage = 'unableToAuthorizePaymentCardTypeMissingOrNotSupportedErrorMessage',\n    unableToAuthorizePaymentErrorMessage = 'unableToAuthorizePaymentErrorMessage',\n    unableToCancelPaymentErrorMessage = 'unableToCancelPaymentErrorMessage',\n    unableToReadCardTokenInfoErrorMessage = 'unableToReadCardTokenInfoErrorMessage',\n    unableToRetrieveCardPaymentAcceptResultErrorMessage = 'unableToRetrieveCardPaymentAcceptResultErrorMessage'\n}\n\nexport enum ErrorLocation {\n    Checkout,\n    CheckoutBillingAddress,\n    CheckoutCustomerAccountPayment,\n    CheckoutDeliveryOptions,\n    CheckoutExpress,\n    CheckoutGiftCard,\n    CheckoutGuestProfile,\n    CheckoutLoyalty,\n    CheckoutPaymentInstrument,\n    CheckoutPickup,\n    CheckoutShippingAddress,\n    CheckoutTermsAndConditions,\n    Console,\n    GiftCardBalanceCheck\n}\n\nexport enum CheckoutModule {\n    CheckoutBillingAddress = 'checkout-billing-address',\n    CheckoutCustomerAccountPayment = 'checkout-customer-account-payment',\n    CheckoutDeliveryOptions = 'checkout-delivery-options',\n    CheckoutExpress = 'checkout-express',\n    CheckoutGiftCard = 'checkout-gift-card',\n    CheckoutGuestProfile = 'checkout-guest-profile',\n    CheckoutLoyalty = 'checkout-loyalty',\n    CheckoutPaymentInstrument = 'checkout-payment-instrument',\n    CheckoutPickup = 'checkout-pickup',\n    CheckoutShippingAddress = 'checkout-shipping-address',\n    CheckoutTermsAndConditions = 'checkout-terms-and-conditions',\n    None = 'none'\n}\n","'use strict';\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar toString = require('../internals/to-string');\nvar requireObjectCoercible = require('../internals/require-object-coercible');\n\nvar $RangeError = RangeError;\n\n// `String.prototype.repeat` method implementation\n// https://tc39.es/ecma262/#sec-string.prototype.repeat\nmodule.exports = function repeat(count) {\n  var str = toString(requireObjectCoercible(this));\n  var result = '';\n  var n = toIntegerOrInfinity(count);\n  if (n < 0 || n === Infinity) throw new $RangeError('Wrong number of repetitions');\n  for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str;\n  return result;\n};\n","'use strict';\nvar uncurryThis = require('../internals/function-uncurry-this');\n\n// `thisNumberValue` abstract operation\n// https://tc39.es/ecma262/#sec-thisnumbervalue\nmodule.exports = uncurryThis(1.0.valueOf);\n","'use strict';\nvar $ = require('../internals/export');\nvar uncurryThis = require('../internals/function-uncurry-this');\nvar toIntegerOrInfinity = require('../internals/to-integer-or-infinity');\nvar thisNumberValue = require('../internals/this-number-value');\nvar $repeat = require('../internals/string-repeat');\nvar fails = require('../internals/fails');\n\nvar $RangeError = RangeError;\nvar $String = String;\nvar floor = Math.floor;\nvar repeat = uncurryThis($repeat);\nvar stringSlice = uncurryThis(''.slice);\nvar nativeToFixed = uncurryThis(1.0.toFixed);\n\nvar pow = function (x, n, acc) {\n  return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc);\n};\n\nvar log = function (x) {\n  var n = 0;\n  var x2 = x;\n  while (x2 >= 4096) {\n    n += 12;\n    x2 /= 4096;\n  }\n  while (x2 >= 2) {\n    n += 1;\n    x2 /= 2;\n  } return n;\n};\n\nvar multiply = function (data, n, c) {\n  var index = -1;\n  var c2 = c;\n  while (++index < 6) {\n    c2 += n * data[index];\n    data[index] = c2 % 1e7;\n    c2 = floor(c2 / 1e7);\n  }\n};\n\nvar divide = function (data, n) {\n  var index = 6;\n  var c = 0;\n  while (--index >= 0) {\n    c += data[index];\n    data[index] = floor(c / n);\n    c = (c % n) * 1e7;\n  }\n};\n\nvar dataToString = function (data) {\n  var index = 6;\n  var s = '';\n  while (--index >= 0) {\n    if (s !== '' || index === 0 || data[index] !== 0) {\n      var t = $String(data[index]);\n      s = s === '' ? t : s + repeat('0', 7 - t.length) + t;\n    }\n  } return s;\n};\n\nvar FORCED = fails(function () {\n  return nativeToFixed(0.00008, 3) !== '0.000' ||\n    nativeToFixed(0.9, 0) !== '1' ||\n    nativeToFixed(1.255, 2) !== '1.25' ||\n    nativeToFixed(1000000000000000128.0, 0) !== '1000000000000000128';\n}) || !fails(function () {\n  // V8 ~ Android 4.3-\n  nativeToFixed({});\n});\n\n// `Number.prototype.toFixed` method\n// https://tc39.es/ecma262/#sec-number.prototype.tofixed\n$({ target: 'Number', proto: true, forced: FORCED }, {\n  toFixed: function toFixed(fractionDigits) {\n    var number = thisNumberValue(this);\n    var fractDigits = toIntegerOrInfinity(fractionDigits);\n    var data = [0, 0, 0, 0, 0, 0];\n    var sign = '';\n    var result = '0';\n    var e, z, j, k;\n\n    // TODO: ES2018 increased the maximum number of fraction digits to 100, need to improve the implementation\n    if (fractDigits < 0 || fractDigits > 20) throw new $RangeError('Incorrect fraction digits');\n    // eslint-disable-next-line no-self-compare -- NaN check\n    if (number !== number) return 'NaN';\n    if (number <= -1e21 || number >= 1e21) return $String(number);\n    if (number < 0) {\n      sign = '-';\n      number = -number;\n    }\n    if (number > 1e-21) {\n      e = log(number * pow(2, 69, 1)) - 69;\n      z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1);\n      z *= 0x10000000000000;\n      e = 52 - e;\n      if (e > 0) {\n        multiply(data, 0, z);\n        j = fractDigits;\n        while (j >= 7) {\n          multiply(data, 1e7, 0);\n          j -= 7;\n        }\n        multiply(data, pow(10, j, 1), 0);\n        j = e - 1;\n        while (j >= 23) {\n          divide(data, 1 << 23);\n          j -= 23;\n        }\n        divide(data, 1 << j);\n        multiply(data, 1, 1);\n        divide(data, 2);\n        result = dataToString(data);\n      } else {\n        multiply(data, 0, z);\n        multiply(data, 1 << -e, 0);\n        result = dataToString(data) + repeat('0', fractDigits);\n      }\n    }\n    if (fractDigits > 0) {\n      k = result.length;\n      result = sign + (k <= fractDigits\n        ? '0.' + repeat('0', fractDigits - k) + result\n        : stringSlice(result, 0, k - fractDigits) + '.' + stringSlice(result, k - fractDigits));\n    } else {\n      result = sign + result;\n    } return result;\n  }\n});\n"],"names":["quantityErrors","getQuantityLimit","maxQuantityForCartLineItem","inputItem","quantityLimit","shouldEnableStockCheck","undefined","availableQuantity","Math","min","getElementIndex","lines","cartLineToAdd","elementFoundAt","productIdToFind","ProductId","index","line","entries","DeliveryMode","FulfillmentStoreId","async","addProductsToCartWithoutSiteSettings","cart","actionContext","input","CartLines","status","substatus","newCartLines","map","_cartLine$Quantity","cartLine","_objectSpread","Quantity","addCartLinesResult","Version","addCartLinesAsync","callerContext","Id","then","newCart","catch","error","_error$data3","telemetry","trace","errorDetails","LocalizedMessage","message","validationResults","data","ValidationResults","warning","addProductsToCartInternal","validateOrderQuantityLimits","enableStockCheck","isAddServiceItemToCart","shouldSkipSiteSettings","i","length","_cart$CartLines","_error$data","includes","name","find","cartline","IsInvoiceLine","addProductsToCartValidateAgainstDefaultOrderSettings","requestContext","app","config","cartActionResult","_cart$CartLines2","_error$data2","addProductsToCartValidateAgainstSiteSettings","addPromoCode","promoCode","hasPromoCode","addDiscountCodeAsync","code","Coupons","coupon","Code","toLowerCase","BaseCartState","GlobalState","constructor","super","_operationQueue","Promise","resolve","this","_cart","_attributeValues","_extensionProperties","_isProductAddedToCart","reduce","total","num","some","_doAsyncAction","refreshCartInternal","_input$catalogId","_input$additionalProp","CatalogId","catalogId","getCatalogId","Description","product","EntryMethodTypeValue","ItemId","RecordId","count","TrackingId","UnitOfMeasureSymbol","DefaultUnitOfMeasure","IsPriceKeyedIn","isPriceKeyedIn","IsGiftCardLine","IsGiftCard","Price","customPrice","location","channel","deliveryMode","retailMultiplePickupModeEnabled","PickupDeliveryModeCode","OrgUnitNumber","WarehouseId","InventoryLocationId","ShippingAddress","_buildAddressFromOrgUnitLocation","isAddEmailDeliveryItemToCart","EmailDeliveryModeCode","ItemTypeValue","ReleasedProductType","Service","validateQuantity","additionalProperties","_doCartOperationWithRetry","addProductToCartInternal","internalInput","_inputItem$catalogId","_this$actionContext$r","PRODUCTASSERVICE","push","isStockCheckEnabled","invoiceIds","CartsDataActions","addInvoicesToCartInternal","invoiceId","lineDescription","addOrderInvoiceAsync","addOrderInvoiceToCartInternal","setInvoiceLinePriceInternal","cartLineId","price","removeCartLineInternal","cartLineIds","clearCartLineDeliveryModeInternal","clearCartLinesDeliveryInformation","channelDeliveryOptionConfiguration","cartLineDeliverySpecification","LineId","DeliverySpecification","DeliveryModeId","DeliveryPreferenceTypeValue","PickUpStoreId","DeliveryAddress","updateCartLineDeliverySpecificationsInternal","lineDeliverySpecifications","deliveryModeId","trim","pickupDeliveryModeCode","emailDeliveryModeCode","cartLinesForShipping","channelDeliveryOptionConfig","filter","_input$channelDeliver","PickupDeliveryModeCodes","deliverySpecifications","shippingAddress","_input$additionalProp2","updateCartLineQuantityInternal","newQuantity","isUsingDefaultOrderSettingsMax","loyaltyCardNumber","updateLoyaltyCardIdInternal","addPromoCodeInternal","removePromoCodes","removePromoCodesInternal","promoCodes","removeAllPromoCodes","removeAllPromoCodesInternal","email","customerReference","customerRequisition","note","updatedCart","ReceiptEmail","Comment","CustomerRequisition","Notes","updateAsync","debug","updateReceiptEmail","newEmail","updateShippingAddress","newShippingAddress","newAttributeValues","newCartObject","AttributeValues","updateCart","newExtensionProperties","ExtensionProperties","updateCartLinesInternal","updatedCartLinesObject","isInitialized","getOrCreateActiveCart","_status","callback","features","enable_checkout_race_condition_hot_fix","operationPromise","callbackResult","refreshCart","PostalAddressId","Name","OrgUnitName","FullAddress","Address","Street","StreetNumber","City","DistrictName","BuildingCompliment","Postbox","ThreeLetterISORegionName","Country","ZipCode","Zip","County","CountyName","State","StateName","__decorate","observable","computed","action","clearCartLineDeliveryMode","_actionContext$reques","matchingLines","copyCartLine","InventLocation","updateCartLinesAsync","_actionContext$reques2","_channelDeliveryOptio","dM","copiedLines","_cloneDeep","forEach","CartTokenPrefix","ctx","cartCookieParts","cookies","getCartCookie","split","readCart","readCartId","isAuthenticated","user","Auth","Anon","readAsync","bypassCache","setCartCookie","handleItemDiscontinuedException","exception","console","log","getCartFromCookie","wasReadFromCookie","authCarts","cartSearchCriteria","IncludeAnonymous","CartTypeValue","queryResultSettings","Paging","Top","Skip","Sorting","Columns","ColumnName","IsDescending","searchAsync","searchCarts","getCartFromCustomer","anonCart","currentCart","anonCurrentCart","cartId","claimAuthCart","Error","claimCart","mergedCart","sourceCart","destinationCart","cartLines","cartLinesToDelete","hasShippingMethod","channelConfiguration","featureNames","newCartLine","buildGiftCardLine","_featureStates$find","featureStates","getFeatureStatesAsync","featureState","IsEnabled","getChannelDeliveryOptionConfigurationAsync","isEmpty","ReasonCodeLines","removeCartLinesAsync","coupons","addCouponsAsync","addCartLines","claimAnonCart","createNewCart","LoyaltyCardId","cards","getCustomerLoyaltyCardsAsync","ChannelId","noneBlockingCards","card","CardTenderTypeValue","LoyaltyCardTenderType","Blocked","CardNumber","errorObj","response","information","createCartAsync","NetPrice","GiftCardBalance","removeDiscountCodesAsync","removeCartLinesInternal","Array","isArray","errorInstance","cartLineDeliverySpecifications","updateLineDeliverySpecificationsAsync","updateCartLineQuantityValidateMaxAgainstDefaultOrderSettings","updateCartLineQuantityValidateMaxAgainstSiteSettings","cartLinesToUpdate","updatedCartObject","updateLoyaltyCardId","newLoyaltyCardId","BaseCheckoutCartState","getCheckoutCart","GetCheckoutCartInput","apiSettings","CheckoutStorageKey","BaseCheckoutState","_giftCardExtends","_loyaltyAmount","_guestCheckoutEmail","_customerAccountAmount","_emailAddressFromExpressCheckout","_checkoutGenericData","_checkoutCart","_shouldEnableSinglePaymentAuthorizationCheckout","shouldEnableSinglePaymentAuthorizationCheckout","_shouldEnableCheckoutErrorDisplayMessaging","shouldEnableCheckoutErrorDisplayMessaging","_salesOrder","_orderedProducts","_tokenizedPaymentCard","_tenderLine","_billingAddress","_isBillingAddressSameAsShippingAddress","_shippingAddress","_cartLinesWithShippingAddress","_hasShippingAddress","_hasCartDeliveryMode","_cardPrefix","_paymentTenderType","giftCardExtends","_loyaltyCardNumber","_hasGuestCheckoutEmail","_isTermsAndConditionAccepted","_isTermsAndConditionChecked","_shouldCollapsePaymentSection","_shouldTriggerPaymentWithPlaceOrder","_isPaymentSectionContainerReady","_cardPaymentAcceptResult","_isPaymentSectionContainerHasError","_redirectAdditionalContext","_redirectPaymentConnectorId","_checkoutErrorPaymentConnectorId","_isPlaceOrderEnabledInRedirection","_isPaymentVerificationRequired","_isCheckoutCallFailed","_shouldEnableExpressCheckoutInCheckout","_shouldEnableExpressCheckoutInCart","_shippingAddressFromExpressCheckout","_billingAddressFromExpressCheckout","_isExpressCheckoutApplied","_isExpressAddressApplied","_isExpressCheckoutAppliedInCartPage","_isExpressPaymentModulesReady","requestFormData","query","pv","redirectResult","_checkoutError","_isBillingAddressHasError","_checkoutErrorFocus","_shouldFocusOnCheckoutError","updateSalesOrder","newSalesOrder","newOrderedProducts","updateTokenizedPaymentCard","newTokenizedPaymentCard","updateTenderLine","newTenderLine","newCartLinesWithShippingAddress","newHasShippingAddress","newHasCartDeliveryMode","newIsTermsAndConditionAccepted","newIsTermsAndConditionChecked","newShouldCollapsePaymentSection","newShouldTriggerPaymentWithPlaceOrder","newIsPaymentSectionContainerReady","newCardPaymentAcceptResult","newIsPaymentSectionContainerHasError","newRedirectAdditionalContext","newRedirectPaymentConnectorId","newCheckoutErrorPaymentConnectorId","newIsCheckoutCallFailed","newIsPlaceOrderEnabledInRedirection","newIsPaymentVerificationRequired","updateBillingAddress","newBillingAddress","isBillingAddressSameAsShippingAddress","removeBillingAddress","updatePaymentTenderType","newPaymentTenderType","updateCardPrefix","newCardPrefix","removeGiftCard","giftCard","giftCardNumber","removeGiftCardExtend","addGiftCard","Pin","ExpirationDate","TenderTypeId","gitCardExtend","addGiftCardExtend","updateLoyaltyCardNumber","newLoyaltyCardNumber","updateLoyaltyAmount","Number","newAmount","toFixed","_noteOnCart$","_noteInput$","newGuestCheckoutEmail","emailOnCart","checkoutCart","customerReqOnCart","customerRefOnCart","noteOnCart","noteInput","updateCartLines","newHasGuestCheckoutEmail","removeCheckoutCartId","removeCheckoutCartCookie","saveDataInStorage","sessionStorage","billingAddress","setCheckoutCartData","BillingAddress","GiftCard","LoyaltyCardNumber","loyaltyAmount","LoyaltyAmount","isTermsAndConditionAccepted","TermsAndCondition","paymentTenderType","window","setItem","PaymentTenderType","redirectPaymentConnectorId","RedirectPaymentConnectorId","isExpressCheckoutApplied","IsExpressCheckoutApplied","toString","filtered","Object","keys","filteredData","key","SaveDataBeforeRedirect","CheckoutGenericData","checkoutGenericData","updateCustomerAccountAmount","newBillingAddressFromExpressCheckout","newShippingAddressFromExpressCheckout","newEmailAddressFromExpressCheckout","newShouldEnableExpressCheckoutInCheckout","newShouldEnableExpressCheckoutInCart","newIsExpressCheckoutApplied","newIsExpressAddressApplied","newIsExpressCheckoutAppliedInCartPage","newIsBillingAddressHasError","newIsExpressPaymentModulesReady","newCheckoutError","setCheckoutGenericData","getCheckoutGenericData","newCheckoutErrorFocus","newShouldFocusOnCheckoutError","initialize","setInitialData","cleanCheckoutData","removeCheckoutCartData","isPaymentVerificationRedirection","_window$sessionStorag","getCheckoutCartData","get","getItem","createGlobalStateDataAction","GetCartStateDataInput","getCacheKey","_this$catalogId","channelId","getCacheObjectType","dataCacheType","getCartStateData","cartState","getCartState","createObservableDataAction","id","inputData","cartStateDataAction","GlobalStateInput","getCheckoutCartCookie","checkoutCartId","copyAsync","setCheckoutCartCookie","stateConstructor","getState","globalStateObject","createGlobalState","args","getCheckoutState","checkoutStateDataAction","lambda","result","reject","ErrorCode","ErrorMessageResource","ErrorLocation","CheckoutModule","toIntegerOrInfinity","requireObjectCoercible","$RangeError","RangeError","module","exports","str","n","Infinity","uncurryThis","valueOf","$","thisNumberValue","$repeat","fails","$String","String","floor","repeat","stringSlice","slice","nativeToFixed","pow","x","acc","multiply","c","c2","divide","dataToString","s","t","target","proto","forced","fractionDigits","e","z","j","k","number","fractDigits","sign","x2"],"sourceRoot":""}