{"version":3,"file":"static/js/6418c6eab83538831c5a.bundle.js","mappings":";4NAiBM,MAAOA,EAAbC,cAGW,KAAAC,YAAc,IAAM,kBACpB,KAAAC,mBAAqB,IAAM,kBAC3B,KAAAC,cAAgB,IAAiB,WAgBrCC,eAAeC,EAAsBC,EAAmCC,GAC3E,MAAO,CACHC,mBAAeC,EACfC,uBAAmBD,GAM3B,SAAeE,EAAAA,EAAAA,IAA6C,CACxDC,OAAmCP,EACnCC,MAjBiBO,GACV,IAAId,mRCDT,MAAOe,EAWTd,YAAYe,EAAoBC,EAAqBC,EAAkBC,EAA6BC,GAQ7F,KAAAlB,YAAc,IAAM,oCAEpB,KAAAC,mBAAqB,IAAM,oCAE3B,KAAAC,cAAgB,IAAiB,OAXpCiB,KAAKC,SAAWN,EAChBK,KAAKE,UAAYN,EACjBI,KAAKG,OAASN,EACdG,KAAKI,kBAAoBN,EACzBE,KAAKK,eAAiBN,GAcvB,MAAMO,EAAwCb,GAC1C,IAAIC,EAORV,eAAeuB,EAAgBC,GAClC,OAAOC,EAAAA,EAAAA,SAAgC,IAAIC,EAAAA,kBAAqBF,GAQ7DxB,eAAe2B,EAClBzB,EACAC,GAAmB,IAAAyB,EAEnB,UAAsBvB,IAAjBH,EAAMiB,QAAyBjB,EAAMe,UAAaf,EAAMgB,WAAehB,EAAMmB,gBAE9E,MAAO,GAGX,MAAMQ,EAAyB,CAC3BZ,SAAUf,EAAMe,SAChBC,UAAWhB,EAAMgB,UACjBC,OAAQjB,EAAMiB,OACdC,kBAAmBlB,EAAMkB,mBAAqB,GAG5CU,QAAqBP,EAAgBpB,GACrC4B,EAAoCD,MAAAA,GAEzC,QAFqDF,EAAZE,EAAcE,MACpDC,GAAsB,oEAAdA,EAAKC,cAChB,IAAAN,OAAA,EAFyCA,EAEvCO,UAEH,OAAOC,EAAAA,EAAAA,gCACH,CACIC,cAAelC,EACfmC,oBAAqBC,EAAAA,yBAAyBC,qCAAqCrC,IAEvF0B,GAECY,MAAKzC,MAAAA,IAGF,IAAI0C,EAA+D,GAGnE,GAAIX,EAAmC,CACnC,MAAMY,EAAiBC,EAAOC,KAAIC,GAASA,EAAMC,YACjDL,QA6DhB1C,eACIgD,EACA7C,GAEA,GAAkC,KAA9B6C,MAAAA,OAAiB,EAAjBA,EAAmBC,cAAsC5C,IAAtB2C,EACnC,OAGJ,MAAME,EAA0B,GAShC,OARAF,MAAAA,GAAAA,EAAmBH,KAAIM,IACnB,QAAW9C,IAAP8C,EACA,OAAOD,EAAcE,KAAKD,OAM3BE,EAAAA,EAAAA,gCACH,CACIhB,cAAelC,EACfmC,oBAAqBC,EAAAA,yBAAyBC,qCAAqCrC,IAEvF+C,EACA,GAECT,MAAMa,IACH,GAAIA,KAA4BA,aAAkCC,OAC9D,OAAOD,KAKdE,OAAOC,IACJtD,EAAIuD,MACA,8HAEJvD,EAAIuD,MAAMD,EAAME,SAChBxD,EAAIyD,UAAUC,UAAUJ,GACxBtD,EAAIyD,UAAUE,MACV,+HAEG,MAtG6BC,CAAgCpB,EAAgBxC,GAEpF,MAAM6D,EAAsBpB,EAAOC,KAAIC,IAAQ,IAAAmB,EAC3C,MAAMC,EAAgD,QAA1BD,EAAGvB,SAAuB,IAAAuB,OAAA,EAAvBA,EAAyBjC,MACpDmC,GAA0BA,EAAuBpB,YAAcD,EAAMC,YAEzE,OAoBhB/C,eACIoE,EACAC,EACAlE,GAEA,IAAKiE,IAAoBA,EAAgBE,cACrC,MAAO,CAAEC,yBAAqBlE,GAGlC,OAAOmE,EAAAA,EAAAA,oBAAmB,CAAEnC,cAAelC,GAAOiE,EAAgBE,eAC7D7B,MAAMgC,IACH,MAAMC,EAAoC,CACtCC,gBAAiBP,GAGrB,OAAIK,GAAWA,aAAiBlB,MAIzB,CAAEgB,oBAAqBG,EAAcE,2BAA4BP,GAH7D,CAAEE,oBAAqBG,EAAcG,WAAYJ,EAAOG,2BAA4BP,MAKlGb,OAAOC,IACJtD,EAAIuD,MAAM,2EACVvD,EAAIuD,MAAMD,EAAME,SAChBxD,EAAIyD,UAAUC,UAAUJ,GACxBtD,EAAIyD,UAAUE,MAAM,2EACb,CAAES,oBAAqB,OA9CnBO,CAAsBhC,EAAOoB,EAAwB/D,MAEhE,OAAO4E,QAAQC,IAAIhB,MAEtBR,OAAOC,IACJtD,EAAIuD,MAAM,uDACVvD,EAAIuD,MAAMD,EAAME,SAChBxD,EAAIyD,UAAUH,MAAMA,EAAME,SAC1BxD,EAAIyD,UAAUE,MAAM,uDACb,MA8FZ,MAAMmB,GAAsC1E,EAAAA,EAAAA,IAA2B,CAC1E4C,GAAI,2EACJ3C,OAAyDmB,EACzDzB,MAAOoB,IAGX,4IClNO,MAAM4D,EAAwEC,IAKhF,IALiF,wBAClFC,EAAuB,6BACvBC,EAA4B,iBAC5BC,EAAgB,QAChBC,GACHJ,EACG,MAAMK,GAAoBC,EAAAA,EAAAA,kBAAiB,QAASH,EAAmB,kBACjEI,GAAaC,EAAAA,EAAAA,wBAAuBL,EAAmBE,GAE7D,OACII,EAAAA,cAAA,SAAAC,OAAAC,OAAA,CACIC,KAAK,SACLC,UAAU,8CAA6C,aAC3CX,EACZY,QAASV,GACLG,GAEHN,ICbP,MAAOc,UAA8BN,EAAAA,cAA3ChG,kCAeqB,KAAAuG,kBAAqBC,IAClC,IAAKA,GAAgC,IAApBA,EAASnD,OACtB,OAAO,KAEX,MAAMoD,EAAuC,GAoB7C,OAnBAD,EAASE,SAAQ,CAACC,EAAMC,KAEpB,MAAMhB,GAAUC,EAAAA,EAAAA,kBAAiB,QAASzE,KAAKyF,MAAMnB,iBAAkB,GAAI,IACrEoB,EAAWH,EAAKG,SAAWH,EAAKG,SAAW,GACjDlB,EAAQmB,cAAcC,MAAQF,EAC9B,MAAMhB,GAAaC,EAAAA,EAAAA,wBAAuB3E,KAAKyF,MAAMnB,iBAAkBE,GACjEqB,EAAoC,CACtCC,UAAWP,EAAKO,UAChBd,UAAW,OACXU,SAAUH,EAAKG,SACfK,QAASR,EAAKQ,QAAQC,eACtBC,aAAcV,EAAKU,aACnBC,KAAM,OACNC,qBAAsBzB,EACtBO,SAASmB,EAAAA,EAAAA,kBAAiBpG,KAAKyF,MAAMnB,iBAAkBE,EAASkB,IAEpEL,EAAcjD,KAAKyD,MAGhBR,GAtCJgB,SACH,MAAMhB,EAAgBrF,KAAKmF,kBAAkBnF,KAAKyF,MAAMa,OACxD,OACI1B,EAAAA,cAAA,QAAMI,UAAU,mCACXK,GAAiBA,EAAcpD,OAAS,EACrC2C,EAAAA,cAAC2B,EAAAA,GAAc,CACXD,MAAOjB,EACPmB,UAAW,CAAEC,aAAczG,KAAKyF,MAAMgB,aAAcC,eAAgB1G,KAAKyF,MAAMiB,kBAEnF,4kBCJb,IAAKC,GAAZ,SAAYA,GACRA,EAAA,wBACAA,EAAA,sBACAA,EAAA,4BAHJ,CAAYA,IAAAA,EAAY,KA0BxB,MAAMC,UAAyBhC,EAAAA,cAS3BhG,YAAmB6G,GACfoB,MAAMpB,GAPO,KAAAnB,kBAAsCwC,EAAAA,EAAAA,oBACnD9G,KAAKyF,MAAMjF,QAAQuG,QAAQC,kBAC3BhH,KAAKyF,MAAMwB,aACXjH,KAAKyF,MAAM7C,WAiKR,KAAAsE,qBAAwBC,GAAuBC,IAA8C,IAAAC,EAC/D,QAAjCA,EAAIrH,KAAKyF,MAAM6B,OAAOC,mBAAW,IAAAF,GAA7BA,EAAgCF,KAChCnH,KAAKyF,MAAM6B,OAAOC,YAAYJ,GAAWzB,SAAW0B,EAAMI,OAAOC,QAQlE,KAAAC,oBAAuBN,IAC1BpH,KAAKyF,MAAM6B,OAAOK,QAAUP,EAAMI,OAAOC,OAvKzCzH,KAAK4H,MAAQ,CACTC,SAAS,EACTC,kBAAmB,CACf,CACIC,KAAMpB,EAAaqB,WACnBP,OAAO,GAEX,CACIM,KAAMpB,EAAasB,UACnBR,OAAO,GAEX,CACIM,KAAMpB,EAAauB,aACnBT,OAAO,KAInBzH,KAAKmI,UAAYvD,EAAAA,YACjB5E,KAAKoI,WAAapI,KAAKoI,WAAWC,KAAKrI,MAGpCsI,oBACH,MAAM,QAAE9H,GAAYR,KAAKyF,MAEnB8C,EAAgB/H,EAAQuG,QAAQyB,QAAQC,IAAI,iBAC5CC,EAAiBlI,EAAQuG,QAAQyB,QAAQC,IAAI,oBAE/CjI,EAAQuG,QAAQyB,QAAQG,kBAAqBJ,MAAAA,GAAAA,EAAed,OAAUiB,MAAAA,GAAAA,EAAgBjB,QACtFjH,EAAQuG,QAAQyB,QAAQI,sBACxB5I,KAAK6I,SAAS,CAAEhB,SAAS,KAGzBrH,GAAWA,EAAQuG,SAAWvG,EAAQuG,QAAQyB,UAAYhI,EAAQuG,QAAQyB,QAAQG,kBAClF3I,KAAK6I,SAAS,CAAEhB,SAAS,IAI1BiB,sBAAsBtD,GACzB,MAAMuD,EAAuB,IAAI/I,KAAK4H,MAAME,mBAC5CiB,EAAqBvD,GAAOiC,OAASsB,EAAqBvD,GAAOiC,MACjEzH,KAAK6I,SAAS,CAAEf,kBAAmBiB,IAGhC1C,SACH,MAAM,OAAEiB,EAAM,QAAE9G,EAAO,UAAEwI,EAAS,UAAEpG,GAAc5C,KAAKyF,OACjD,wBAAErB,EAAuB,uBAAE6E,GAA2BD,GACtD,QAAEnB,GAAY7H,KAAK4H,MAEnBe,EAAiBnI,GAAWA,EAAQuG,SAAWvG,EAAQuG,QAAQyB,SAAWhI,EAAQuG,QAAQyB,QAAQG,iBACxG,IAAIO,EAEJ,IACIA,EAAe5B,EACjB,MAAO7E,GAGL,OAFAG,EAAUH,MAAM,+DAA+DA,KAExEmC,EAAAA,cAAA,WAAMnC,GAGjB,GAAIkG,IAAmBd,EAEnB,OADA7H,KAAKyF,MAAMjF,QAAQoC,UAAUH,MAAM,2DAC5B,KAGX,IAAK0G,EAAAA,GAA0BC,UAC3B,OAAOxE,EAAAA,cAAAA,EAAAA,SAAA,MAGX,MAAMyE,EAASC,EAAAA,EAAA,GACRtJ,KAAKyF,OAAK,IACb8D,UAAWvJ,KAAKoI,WAChBoB,uBAAwB,CACpBC,YAAazJ,KAAKyF,MAClBT,UAAW0E,GAAAA,CAAW,uBAAwBR,EAAalE,WAC3D2E,IAAK3J,KAAKmI,WAEdyB,WAAY,CACR5E,UAAW,kCACX6E,MAAO,QACPC,MAAM,GAEVC,QAAS,CACL/E,UAAW,iCAEfgF,KAAMd,EAAavB,SACf/C,EAAAA,cAACuE,EAAAA,GAA0B,CACvBnE,UAAU,6BACVgF,KAAMd,EAAavB,QACnBnB,UAAW,CAAEyD,OAAQjK,KAAK0H,oBAAqBhB,eAAgB1G,KAAKyF,MAAMjF,QAAQuG,WAG1FmD,WACItF,EAAAA,cAAA,OAAKI,UAAU,oCACXJ,EAAAA,cAAA,OAAKI,UAAU,kCACXJ,EAAAA,cAAA,SACII,UAAU,wCACV+C,KAAM/H,KAAK4H,MAAME,kBAAkB,GAAGC,KACtC5F,GAAInC,KAAK4H,MAAME,kBAAkB,GAAGC,KACpChD,KAAK,WACLoF,QAASnK,KAAK4H,MAAME,kBAAkB,GAAGL,MACzCxC,QAASA,IAAMmF,MAAMpK,KAAKyF,MAAM6B,OAAO+C,uBACxC,IACHzF,EAAAA,cAAA,SAAO0F,QAAStK,KAAK4H,MAAME,kBAAkB,GAAGC,MAAI,eAGxDnD,EAAAA,cAAA,OAAKI,UAAU,kCACXJ,EAAAA,cAAA,SACII,UAAU,wCACV+C,KAAM/H,KAAK4H,MAAME,kBAAkB,GAAGC,KACtC5F,GAAInC,KAAK4H,MAAME,kBAAkB,GAAGC,KACpChD,KAAK,WACLoF,QAASnK,KAAK4H,MAAME,kBAAkB,GAAGL,MACzC8C,SAAUA,IAAMvK,KAAK8I,sBAAsB,KAC5C,IACHlE,EAAAA,cAAA,SAAO0F,QAAStK,KAAK4H,MAAME,kBAAkB,GAAGC,MAAI,cAGxDnD,EAAAA,cAAA,OAAKI,UAAU,kCACXJ,EAAAA,cAAA,SACII,UAAU,wCACV+C,KAAM/H,KAAK4H,MAAME,kBAAkB,GAAGC,KACtC5F,GAAInC,KAAK4H,MAAME,kBAAkB,GAAGC,KACpChD,KAAK,WACLoF,QAASnK,KAAK4H,MAAME,kBAAkB,GAAGL,MACzC8C,SAAUA,IAAMvK,KAAK8I,sBAAsB,KAC5C,IACHlE,EAAAA,cAAA,SAAO0F,QAAStK,KAAK4H,MAAME,kBAAkB,GAAGC,MAAI,kBAIhEzB,MAAOkE,EAAAA,gBAAgBC,YAAYvB,EAAa3B,cAC5C3C,EAAAA,cAACM,EAAqB,CAClBoB,MAAO4C,EAAa3B,YACpBd,aAAczG,KAAKkH,qBACnBR,eAAgB1G,KAAKyF,MAAMjF,QAAQuG,QACnCzC,iBAAkBtE,KAAKsE,mBAG/BoG,aACI9F,EAAAA,cAACV,EAA4B,CACzBK,QAASvE,KAAKoI,WACdhE,wBAAyBA,EACzBC,6BAA8B4E,EAC9B3E,iBAAkBtE,KAAKsE,qBAKnC,OAAOtE,KAAKyF,MAAMkF,WAAWtB,GAsBzBjB,aACJ,MAAM,QAAE5H,GAAYR,KAAKyF,MAEzB,GAAIjF,GAAWA,EAAQuG,SAAWvG,EAAQuG,QAAQyB,QAAS,CACvDhI,EAAQuG,QAAQyB,QAAQoC,mBAExB,MAAMrC,EAAgBvI,KAAK4H,MAAME,kBACjCtH,EAAQuG,QAAQyB,QAAQqC,IAAI,gBAAiBtC,EAAe,CACxDuC,QAAS,IAAIC,MAAK,IAAIA,MAAOC,UAAY,WAE7CxK,EAAQuG,QAAQyB,QAAQqC,IAAI,kBAAmB,GAAI,CAAEC,QAAS,IAAIC,MAAK,IAAIA,MAAOC,UAAY,WAC9FC,SAASC,SAEblL,KAAK6I,SAAS,CAAEhB,SAAS,KAIjC,6DClPA,MAWA,EAXoDpC,GAE5Cb,EAAAA,cAACuG,EAAAA,MAAK,CAACC,OAAQ3F,EAAM2F,OAAQC,gBAAiB,aAAcC,WAAW,EAAMtG,UAAW,iBAAiBS,EAAMT,aAC1GS,EAAM8F,YAAc3G,EAAAA,cAAC4G,EAAAA,YAAW,SAAG/F,EAAM8F,YACzC9F,EAAMgG,gBAAkB7G,EAAAA,cAAC8G,EAAAA,UAAS,CAAC1G,UAAU,sBAAsBS,EAAMgG,gBACzEhG,EAAMkG,kBAAoB/G,EAAAA,cAAC8G,EAAAA,UAAS,CAAC1G,UAAU,sBAAsBS,EAAMkG,kBAC3ElG,EAAMmG,aAAehH,EAAAA,cAACiH,EAAAA,YAAW,KAAEpG,EAAMmG,6MCDhD,MAAOlL,EAAb9B,cACoB,KAAAkN,aAAyB,CACrC,oDACA,kEACA,kEACA,yDAGG,KAAAjN,YAAc,IAAM,eACpB,KAAAC,mBAAqB,IAAM,eAC3B,KAAAC,cAAgB,IAAiB,eAOrC,MAAMgN,EAA8BtM,GAChC,IAAIiB,EAQR1B,eAAegN,EAAsB9M,EAA0BC,GAElE,aAD2B8M,EAAAA,EAAAA,uBAAsB,CAAE5K,cAAelC,GAAOD,EAAM4M,cAS5E,MAAMrL,GAAkClB,EAAAA,EAAAA,IAA2C,CACtF4C,GAAI,8DACJ3C,OAAiCwM,EACjC9M,MAAO6M,IAEX,2GC7CA,IAAqBG,EAArB,cAAsCtH,EAAAA,cASlChG,YAAY6G,GACRoB,MAAMpB,GAHF,KAAA0G,SAA8CvH,EAAAA,YAgK9C,KAAAwH,aAAe,KACnB,MAAMC,OAA8BhN,IAAnBW,KAAKyF,MAAM6G,IAAoB,EAAItM,KAAKyF,MAAM6G,IAC3DC,MAAMvM,KAAK4H,MAAM4E,eAAiBxM,KAAK4H,MAAM4E,aAAeH,EAC5DrM,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAAS8B,GAE3CrM,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAASvK,KAAK4H,MAAM4E,eAjK1DxM,KAAK4H,MAAQ,CAAE4E,aAAc/G,EAAMgH,cAAgB,GACnDzM,KAAK0M,aAAe1M,KAAK0M,aAAarE,KAAKrI,MAC3CA,KAAK2M,aAAe3M,KAAK2M,aAAatE,KAAKrI,MAC3CA,KAAK4M,cAAgB5M,KAAK4M,cAAcvE,KAAKrI,MAE1CsI,qBACHuE,EAAAA,EAAAA,KACI,IAAM7M,KAAKyF,MAAMgH,eACjB,KACIzM,KAAK6I,SAAS,CAAE2D,aAAcxM,KAAKyF,MAAMgH,cAAgB,OAI9DK,sBACHD,EAAAA,EAAAA,KACI,IAAM7M,KAAKyF,MAAMgH,eACjB,KACIzM,KAAK6I,SAAS,CAAE2D,aAAcxM,KAAKyF,MAAMgH,cAAgB,OAK9DpG,SACH,MAAM0G,EAA8B,GAAG/M,KAAKyF,MAAMuH,+CAC5CC,EAA6B,GAAGjN,KAAKyF,MAAMyH,+CAC3CC,EAAWnN,KAAK4H,MAAM4E,eAAiBxM,KAAKyF,MAAM6G,IAClDc,EAAcpN,KAAK4H,MAAM4E,eAAiBxM,KAAKyF,MAAM4H,IACrDC,EAAetN,KAAK4H,MAAM4E,aAChC,IAAIe,EAAa,GACbJ,EAEAI,EAAa,WACNvN,KAAKyF,MAAM0H,WAElBI,EAAa,cAEjB,IAAIC,EAAgB,GAQpB,OAPIJ,EAEAI,EAAgB,WACTxN,KAAKyF,MAAM0H,WAElBK,EAAgB,cAGhB5I,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,OAAKI,UAAU,WAAW7C,GAAInC,KAAKyF,MAAMtD,KACA,IAApCnC,KAAKyF,MAAMgI,sBACR7I,EAAAA,cAAA,UACIuI,SAAUnN,KAAKyF,MAAM0H,UAAYA,EACjCO,MAAOP,EAAW,GAAKnN,KAAKyF,MAAMkI,yBAClC3I,UAAW,gCAAgCuI,IAC3CtI,QAASjF,KAAK2M,aAAY,eACb,EAAI,aACL,GAAG3M,KAAKyF,MAAMkI,2BAC1BC,UAAW,EACX/D,MAAO,aAEPjF,EAAAA,cAAA,QAAMI,UAAW+H,KAGzBnI,EAAAA,cAAA,SACIG,KAAK,SACLC,UAAU,iBACV6I,QAAQ,SACRpG,MAAOzH,KAAK4H,MAAM4E,aAClBjC,SAAUvK,KAAK4M,cACfkB,OAAQ9N,KAAKoM,aAAY,YACf,SAAQ,aACN,GAAGpM,KAAKyF,MAAMsI,yBAC1B7H,KAAK,aAAY,gBACFlG,KAAKyF,MAAM6G,IAAG,gBACdtM,KAAKyF,MAAM4H,IAAG,gBACdC,EACf3D,IAAK3J,KAAKmM,SACVgB,SAAUnN,KAAKyF,MAAM0H,UAAYnN,KAAKyF,MAAMuI,iBAEX,IAApChO,KAAKyF,MAAMgI,sBACR7I,EAAAA,cAAA,UACIuI,SAAUnN,KAAKyF,MAAM0H,UAAYC,EACjCM,MAAON,EAAc,GAAKpN,KAAKyF,MAAMwI,yBACrCjJ,UAAW,gCAAgCwI,IAC3CvI,QAASjF,KAAK0M,aAAY,eACb,EAAI,aACL,GAAG1M,KAAKyF,MAAMwI,2BAC1BL,UAAW,EACX/D,MAAO,aAEPjF,EAAAA,cAAA,QAAMI,UAAWiI,OAQjCP,eACJ,IAAIwB,GAAiB,EACrB,MAAMC,EAAenO,KAAK4H,MAAM4E,aAChC,IAAI4B,EAEAD,EAAenO,KAAKyF,MAAM4H,KAC1Ba,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkBpO,KAAKyF,MAAM4H,KAGjCa,GAAkBlO,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAAS6D,GAGzDzB,eACJ,IAAIuB,GAAiB,EACrB,MAAMC,EAAenO,KAAK4H,MAAM4E,aAChC,IAAI4B,EAEAD,EAAe,GACfD,GAAiB,EACjBE,EAAkBD,EAAe,IAEjCD,GAAiB,EACjBE,EAAkB,GAGtBF,GAAkBlO,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAAS6D,GAGzDxB,cAAcyB,GAClB,MAAMf,EAAegB,SAASD,EAAE7G,OAAOC,MAAO,IACxC4E,OAA8BhN,IAAnBW,KAAKyF,MAAM6G,IAAoB,EAAItM,KAAKyF,MAAM6G,IACzDiC,EACFvO,KAAKmM,UAAYnM,KAAKmM,SAASqC,SAAWxO,KAAKmM,SAASqC,mBAAmBC,kBAAoBzO,KAAKmM,SAASqC,QAE7GlB,EAAetN,KAAKyF,MAAM4H,IAC1BrN,KAAK6I,SAAS,CAAE2D,aAAcxM,KAAKyF,MAAM4H,MAAO,KAC5CqB,GAAAA,EAAS,KACL1O,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAASvK,KAAK4H,MAAM4E,gBACvD,IAFHkC,MAKJ1O,KAAK6I,SAAS,CAAE2D,aAAcc,IAAgB,KAC1CoB,GAAAA,EAAS,KACAnC,MAAMvM,KAAK4H,MAAM4E,eAAmBxM,KAAK4H,MAAM4E,aAAeH,IAC/DrM,KAAKyF,MAAM8E,UAAYvK,KAAKyF,MAAM8E,SAASvK,KAAK4H,MAAM4E,cAElD+B,IACAA,EAAaI,aAAa,gBAAiBrB,EAAasB,YACxDL,EAAaI,aAAa,QAASrB,EAAasB,gBAGzD,IATHF,QAxJExC,EAAA2C,aAAwC,CAClDvC,IAAK,EACLU,oBAAqB,eACrBE,oBAAqB,eAJRhB,GAAQ4C,EAAAA,EAAAA,IAAA,CAD5BC,EAAAA,IACoB7C,2NCwFrB,MAuFM8C,EAvFUhQ,MACZiQ,EACAxJ,EACAyJ,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,MAAMC,EAAYC,EAAenK,GACjC,IAAIoK,EAAepK,EAAMqK,KAAKC,QAE9B,GAAIJ,EACAK,EAAevK,EAAOkK,QAU1B,GAPAT,GAAY,QAEuB7P,IAA7BoG,EAAMwK,qBACRJ,QAAsBpK,EAAMwK,oBAAuBxK,EAAMqK,KAAKC,UAIhD,IAAdV,IAA0C,IAApBI,EACtBH,GAAgB,GAChBC,GAA6B,GAC7BL,GAAY,GACZM,GAAW,OAER,CACH,MAAMU,QAAkBC,EAAAA,EAAAA,cAAa1K,EAAMjF,QAAQ4P,gBAE/C5P,SACI6P,KAAK,OAAE/I,KAEX7B,EAEE6K,EAAWhJ,GAAUA,EAAOiJ,wBAE5BL,EACDM,iBAAiB,CACdT,QAASF,EACTY,MAAOhL,EAAMiL,SACbC,kBAAmBlL,EAAMmL,qBAAuBnL,EAAMmL,oBAAoBC,kBAC1E1K,qBAAsB,CAClB2K,oCAAqCrL,EAAMsL,qCAE/CC,iBAAkBvL,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,iBAE3CC,eAAgBxL,EAAMwL,eACtBC,YAAazL,EAAM0L,kBACnBC,6BAA8B3L,EAAM2L,+BAGvC3P,MAAK4P,IACoB,YAAlBA,EAAOC,QACH7L,EAAM8L,eAA8B,cAAbjB,GACvBpB,GAAY,GACZC,GAAU,KACH1J,EAAM+L,oBAA+BnS,IAAbiR,GAAuC,YAAbA,GAAuC,aAAbA,IAOnFpB,GAAY,GACZK,GAA6B,GAC7BH,GAAe,IAEf3J,MAAAA,OAAK,EAALA,EAAOgM,oBAAoBhM,MAAAA,OAAK,EAALA,EAAOgM,kBAAmB,GAAK/B,GAA4B,IAG1FgC,EAAgBjM,EAAO4L,KAEvBrB,EAAevK,EAAO,CAAEkM,cAAe,mBAAoBC,iBAAkBP,IAC7EnC,GAAY,GACZE,GAAe,SAc7ByC,EAAwBA,CAC1BpM,EACAqM,EACAC,EACAC,KAUA,MAAMC,EAAQC,EAAYzM,GACpB0M,GAAU1N,EAAAA,EAAAA,kBAAiB2N,EAAAA,GAAeC,UAAW5M,EAAMnB,iBAAmB2N,EAAO,IACrFvN,GAAaC,EAAAA,EAAAA,wBAAuBc,EAAMnB,iBAAmB6N,GAC7DG,EAAmBN,QAAoC3S,EACvDkT,EAAeC,EAAqB/M,GAAO,IAC1CgN,EAASC,IAAcC,EAAAA,EAAAA,WAAS,GACjCC,EAAanN,EAAM0H,UAAY2E,GAAae,EAAoBpN,IAAU8M,EAChF,OACI3N,IAAAA,cAAA,OACII,UAAU,OACV8N,aAAczE,IACVqE,GAAW,IAEfK,aAAc1E,IACLuE,GACDF,GAAW,KAInB9N,IAAAA,cAAA,SAAAC,OAAAC,OAAA,CACIE,UAAW0E,GAAAA,CAAW,mBAAoB6I,EAAe,gCAAkC,GAAI9M,EAAMT,WAAU,aACnGiN,GACRvN,EAAU,CACdO,QAAS8M,EACT5E,SAAUyF,GACNN,EAAgB,mBACH7M,EAAMqK,KAAKC,QAAQiD,SAEpCpO,IAAAA,cAAA,OAAKI,UAAWyN,EAAU,4BAA8B,uBAEvDP,EAAYzM,MAOhB4M,EAAa5M,IACtB,MAAO0H,EAAU+B,IAAeyD,EAAAA,EAAAA,WAAS,IAClCM,EAAWC,IAAgBP,EAAAA,EAAAA,WAAS,IAIpCtD,EAAWC,IAAmBqD,EAAAA,EAAAA,WAAS,IAEvCQ,EAA2B5D,IAAgCoD,EAAAA,EAAAA,WAAS,IAEpExI,EAASqF,IAAcmD,EAAAA,EAAAA,WAAS,IAChClD,EAAiB2D,IAAsBT,EAAAA,EAAAA,WAAS,IAEhDU,EAAajE,IAAkBuD,EAAAA,EAAAA,WAAS,IAExCW,EAA0B5D,IAA+BiD,EAAAA,EAAAA,WAAS,IAEzEY,EAAAA,EAAAA,YAAU,KACN9N,EAAM+N,wBAA0BJ,EAAmB3N,EAAM+N,2BAG7D,MAAMzB,EAAiB/S,MAAAA,UACbgQ,EACF5H,EACA3B,EACAyJ,EACAgE,EACA9D,EACAC,EACAC,EACAC,EACAC,EACAC,EACAC,GAEDjK,EAAMgO,oBACLhO,EAAMgO,sBAKRC,EAAiBjO,EAAMqK,KAAK6D,MAC9B/O,IAAAA,cAACgP,EAAAA,eAAc,CACX9D,KAAM,CAAE6D,MAAOlO,EAAMqK,KAAK6D,OAC1BnT,QAASiF,EAAMjF,QACf2B,GAAIsD,EAAMtD,GACV0R,SAAUpO,EAAMoO,SAChBC,cAAerO,EAAM8L,eAAiB9L,EAAM8L,cAAcuC,cAC1DC,kBAAmBtO,EAAM8L,eAAiB9L,EAAM8L,cAAcwC,kBAC9DC,iBAAkBvO,EAAM8L,eAAiB9L,EAAM8L,cAAcyC,mBAGjE,GAGEC,EAA0B,CAC5BzT,QAASiF,EAAMjF,QACfwE,UAAW,kBACX7C,GAAIsD,EAAMtD,GACV0R,SAAUpO,EAAMoO,SAChB/D,KAAM,CAAEC,QAAStK,EAAMqK,KAAKC,QAAS4D,MAAOlO,EAAMqK,KAAK6D,OACvDpC,cAAe9L,EAAM8L,cACrB2C,cAAezO,EAAMyO,cACrBC,aAAc1O,EAAMjF,QAAQuG,QAAQoN,aACpCC,qBAAoC/U,IAAnBoG,EAAMiL,SAAyBjL,EAAMiL,SAAW,EACjEgD,eAAgBA,EAChBlC,cAAe/L,EAAM+L,cACrByB,UAAWA,EACXC,aAAcA,GAGZmB,EAAmBzP,IAAAA,cAAC0P,EAAAA,MAAKzP,OAAAC,OAAA,GAAKmP,KAC9B,cAAE1C,EAAa,uBAAEgD,GAA2B9O,EAElD,MAAO,CACH+O,gBACI5P,IAAAA,cAAAA,IAAAA,SAAA,KACKyP,EAGAxC,EAAsBpM,EAAO0H,EAAU4E,GAEvCR,GACG3M,IAAAA,cAAC6P,EAAAA,GAAY,CACTrJ,OAAQ+H,EACR5H,WAAYmJ,EAAoBnF,EAA8BD,EAAiBE,EAAY/J,GAAO,GAClGkG,iBAAkBgJ,EAAmBxK,EAASqF,EAAY/J,GAC1DmG,YAAagJ,EACTzK,EACAqF,EACAuC,EACAxC,EACAD,EACA7J,EACA0H,GAEJnI,UAAU,yCAGlBJ,IAAAA,cAAC6P,EAAAA,GAAY,CACTrJ,UAAWkI,IAA4BiB,GACvChJ,WAAYmJ,EAAoBhF,EAA6BJ,EAAiBE,EAAY/J,GAC1FkG,iBAAkBkJ,EAA6BpP,GAC/CmG,YAAahH,IAAAA,cAAAA,IAAAA,SAAA,MACbI,UAAU,0CAItB8P,cAAezB,IAOjBwB,EAAgCpP,IAClC,MAAM,uBAAE8O,GAA2B9O,EACnC,GAAI8O,MAAAA,EAGJ,OAAO3P,IAAAA,aAAmB2P,IAIxBG,EAAsBA,CACxBxB,EACA5D,EACAE,EACA/J,EACAsP,KAEA,MAMM,cAAExD,GAAkB9L,EAE1B,OACIb,IAAAA,cAAA,OAAKI,UAAU,0BACVuM,GAAiBwD,GACdnQ,IAAAA,cAAA,MAAII,UAAU,8BAA8BuM,EAAcyD,6BAE5DD,GAAyBnQ,IAAAA,cAAA,8BAC3BA,IAAAA,cAAA,QAAMsB,KAAK,SAASjB,QAdTgQ,KACf/B,GAAa,GACb5D,GAAgB,GAChBE,GAAW,IAWkCxK,UAAU,sBAMzD2P,EAAqBA,CAACxK,EAAkBqF,EAAwC/J,KAKlF,MAAM,cAAE8L,GAAkB9L,EAE1B,OACIb,IAAAA,cAAAA,IAAAA,SAAA,KACK2M,EACG3M,IAAAA,cAAA,OAAKI,UAAU,wBACXJ,IAAAA,cAAA,KAAGI,UAAU,wBAAwBuM,EAAc2D,oBACnDtQ,IAAAA,cAAA,SAAOI,UAAU,gCACbJ,IAAAA,cAAA,SACII,UAAU,wCACVD,KAAK,WACLE,QAfxB,WACIuK,GAAYrF,IAc+B,eACTA,EACdA,QAASA,IAEbvF,IAAAA,cAAA,QAAMI,UAAU,qCAAqCuM,EAAc4D,kBAEvEvQ,IAAAA,cAAA,KAAGI,UAAU,+BAA+BuM,EAAc6D,8BAG9D/V,IAMVuV,EAAuBA,CACzBzK,EACAqF,EACAuC,EACAsD,EACA/F,EACA7J,EACA0H,KAEA,MAMM6E,EAAkB7H,EAAU,CAAEgD,UAAU,EAAOlI,QAAS8M,GAAmB,CAAE5E,UAAU,GAC7F,OACIvI,IAAAA,cAAA,OAAKI,UAAU,0BACXJ,IAAAA,cAAA,UAAQK,QATGgQ,KACfI,GAAkB,GAClB/F,GAAgB,GAChBE,GAAW,IAMsBxK,UAAU,wCAClCS,EAAM8L,eAAiB9L,EAAM8L,cAAc+D,mBAE/CzD,EAAsBpM,EAAO0H,EAAU4E,EAAgBC,KAMpEK,EAAUxD,aAAe,CACrB6B,SAAU,GAGd,MAAMwB,EAAezM,GACV+M,EAAqB/M,GAAO,GAASA,EAAM8P,eAAiB9P,EAAM+P,gBAGvE5F,EAAkBnK,IAEpB,MAAM,KACFqK,EAAI,oBACJc,EAAmB,sBACnB6E,EAAqB,kBACrBtE,EAAiB,kBACjBuE,EAAiB,kBACjBC,EAAiB,yBACjBC,EAA2B,IAAG,yBAC9BC,EAA2B,IAC3BpQ,EAEJ,IAAKqK,IAASA,EAAKC,QAAQ+F,SAEvB,MAAO,CAAEnE,cAAe,cAG5B,GAAI7B,EAAKC,QAAQgG,WAAY,CACzB,MAAMC,EAAoBlG,EAAKC,QAAQgG,WAAWE,QAC9CC,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAGxE,GAAIJ,EAAkB/T,OAAS,EAE3B,MAAO,CAAE0P,cAAe,mBAAoBqE,kBAAmBA,GAIvE,GAAIxD,EAAqB/M,GAAO,GAAO,CACnC,MAAMkL,EAAqBC,GAAuBA,EAAoBC,mBAAsB,EAG5F,MAAO,CAAEc,cAAe,aAAc0E,UAFpBC,KAAKjJ,IAAIsD,EAAmB,IAMlD,OACI8E,KACEtE,GACEA,GAAqBuE,GAAqBE,IAC1CzE,GAAqBwE,GAAqBE,IAEvC,CAAElE,cAAe,4BAN5B,GAaEa,EAAuBA,CAAC/M,EAAiC8Q,KAC3D,QACkDlX,IAA9CoG,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,mBACqB,IAA9CvL,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,kBACzBvL,EAAM+Q,WACN/Q,EAAMgR,qBACNhR,EAAMiR,wBAENjR,EAAMkR,0BACNlR,EAAMmR,0BAIN,OAAO,EAGX,IAAKnR,EAAMqK,OAASrK,EAAMqK,KAAKC,QAAQ+F,SAEnC,OAAO,EAGX,GAAIrQ,EAAMqK,KAAKC,QAAQgG,YACftQ,EAAMqK,KAAKC,QAAQgG,WAAW/U,MAAKkV,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAEvG,OAAO,EAGf,MAAMS,EAAyBN,GAA0B9Q,EAAMiL,SAAWjL,EAAMiL,SAAW,EAE3F,QAAOjL,EAAMmL,0BACuCvR,IAAhDoG,EAAMmL,oBAAoBC,mBAC1BpL,EAAMmL,oBAAoBC,mBAAqBgG,IAKjDhE,EAAuBpN,KACrBA,EAAMqK,KAAKC,QAAQgG,aACftQ,EAAMqK,KAAKC,QAAQgG,WAAW/U,MAAKkV,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,cAO1G3Q,EAAM+Q,WACN/Q,EAAMgR,qBAENhR,EAAMkR,0BACNlR,EAAMmR,2BASTlF,EAAkBA,CAACjM,EAAiC4L,KAClD5L,EAAMqR,OACNrR,EAAMqR,MAAMzF,IAIdrB,EAAiBA,CAACvK,EAAiC4L,KACjD5L,EAAMsR,SACNtR,EAAMsR,QAAQ1F,IAStB,kOC5jBM,SAAU2F,EACZ3F,EACA4F,EACAjO,EACAxI,EACAuP,EACAa,EACA3F,GAEA,GAA6B,eAAzBoG,EAAOM,cACP,OAAO3I,EAAUkO,0BACd,GAA6B,qBAAzB7F,EAAOM,cAAsC,CACpD,GAAIN,EAAOO,kBAA0D,gBAAtCP,EAAOO,iBAAiBuF,UAA6B,CAEhF,IAAIC,GAA0B,EAC9B,MAAMC,EAAkBtH,GAAWA,EAAQ+F,SAE3C,IAAK,IAAIwB,EAAI,EAAGA,EAAIL,EAAMA,KAAKM,UAAWtV,OAAQqV,IAC9C,GACIL,EAAMA,KAAKM,UAAWD,GAAGE,YAAcH,IACtCJ,EAAMA,KAAKM,UAAWD,GAAGG,cAAgB,OACpCxM,GACEzK,EAAQ4P,cAAc1J,eAAegR,SACrClX,EAAQ4P,cAAc1J,eAAegR,QAAQC,wBAC7C,MACPV,EAAMA,KAAKM,UAAWD,GAAGM,oBAAsB,OAAU3M,GAAYA,EAAS3H,eAAkB,IACnG,CACE8T,EAAiBE,EAEjB,MAIR,IAAIO,EAAsB,EAE1B,IAAwB,IAApBT,EAAuB,CAEvBS,uWADsBvO,CAAA,GAAQ2N,EAAMA,KAAKM,UAAWH,IACrBlL,UAAY,EAI/C,MAAM4L,EAA6BtX,EAAQ6P,IAAI/I,OAAOwQ,2BAChDC,EAAenH,GAAuBA,EAAoBC,kBAEhE,IAAImH,EAYJ,OATIA,OAD+B3Y,IAA/ByY,QAA6DzY,IAAjB0Y,EAC5B,QACQ1Y,IAAjB0Y,EACSD,OACsBzY,IAA/ByY,EACSC,EAEAzB,KAAKhK,IAAIwL,EAA4BC,GAGlD/O,EAAUiP,qBACZC,QAAQ,gBAAiBL,EAAYjJ,YACrCsJ,QAAQ,gBAAiBF,EAAcpJ,YAC8C,IAAAuJ,EAAvF,OAAI9G,EAAOO,kBAA0D,mBAAtCP,EAAOO,iBAAiBuF,UAC5B,QAA9BgB,EAAO9G,EAAOO,wBAAgB,IAAAuG,GAAc,QAAdA,EAAvBA,EAAyBC,oBAAY,IAAAD,OAAA,EAArCA,EAAuCE,iBAG3CrP,EAAUkO,2BAMnB,SAAUoB,EACZjH,EACArI,EACAuP,GAEA,IAAKlH,EACD,MAAO,GAGX,MAAMmH,EAA4D,GAMlE,OAJAnH,EAAO/L,SAAQ4Q,IACXsC,EAAWtC,EAAUuC,oBAMvB,SAAkCC,EAA4B1P,EAA6BuP,GAC7F,OAAQG,GACJ,KAAK,EACD,OAAO1P,EAAU2P,sCACrB,KAAK,EACD,OAAO3P,EAAU4P,8CACrB,KAAK,EACD,OAAO5P,EAAU6P,qCACrB,KAAK,EACD,OAAON,EAAavP,EAAU8P,uCAAyC9P,EAAU+P,sCACrF,QACI,MAAO,IAjBgCC,CAAwB9C,EAAUuC,mBAAoBzP,EAAWuP,MAGzGC,ECrEX,IAAIlU,EACG,MAAM2U,EAAqE9U,IAQ7E,IAR8E,UAC/E+U,EAAS,gBACTC,EAAe,cACfC,EAAa,kBACbC,EAAiB,WACjBC,EAAU,UACVtQ,EAAS,WACTuQ,GACHpV,EACOqV,EAAwC,GAkB5C,OAhBAA,EAAgB3U,OAAO4U,OAAON,GAAiBlD,QAAOtT,QAAuBtD,IAAZsD,IAE7DyW,IACAI,EAAcpX,KAAKgX,GACnBG,GAAW,IAGXF,GACAG,EAAcpX,KAAKiX,GAGnBC,IACAE,EAAcpX,KAAKkX,GACnBC,GAAW,IAIX3U,EAAAA,cAAC8U,EAAAA,MAAK,CACFtO,OAAQ8N,GAAaM,EAAcvX,OAAS,EAC5C4H,MAAM,SACN8P,WAAW,EAAI,aACH3Q,EAAU4Q,0BAEtBhV,EAAAA,cAAA,OAAKI,UAAU,qBAAoB,cAAa,QAC5CJ,EAAAA,cAAA,OAAKI,UAAU,8BACXJ,EAAAA,cAAA,QAAMI,UAAU,6BAChBJ,EAAAA,cAAA,YAAOoE,EAAU4Q,4BAGxBJ,EAAc3X,KAAIc,GACXA,EACOiC,EAAAA,cAAA,OAAKI,UAAU,mBAAmBrC,GAElC,SAQrBkX,EAAwCpU,IAAyD,IAAAqU,EAAAC,EAInG,KAH2D,QAAjCD,EAAGrU,EAAMqK,KAAKhP,aAAauQ,cAAM,IAAAyI,GAE1D,QAF0DA,EAA9BA,EAAgC9Y,MACzDF,GAH2D,oEAG3CA,EAAaI,cAChC,IAAA4Y,OAAA,EAF4BA,EAE1B3Y,WAEC,OAAO,EAEX,MAAM6Y,EAAuD,QAAhBD,EAAGtU,EAAMjF,eAAO,IAAAuZ,GAAS,QAATA,EAAbA,EAAehT,eAAO,IAAAgT,GAAK,QAALA,EAAtBA,EAAwB1J,WAAG,IAAA0J,GAAU,QAAVA,EAA3BA,EAA6BE,gBAAQ,IAAAF,OAAA,EAArCA,EAAuCG,iCACvF,GAAgD,SAA5CF,EACA,OAAO,EAGX,GAAgD,QAA5CA,EACA,OAAO,EAGX,MAAMG,EAAe1U,EAAMqK,KAAKsK,oBAAoB/I,OACpD,OACI8I,IAC8C,QAA5CH,GAAqDG,EAAaE,OACnB,QAA5CL,IAAsDG,EAAaE,QClE1E,SAAUC,EACZ7U,EACAmC,EACA2S,EACAvR,EACAyK,GAA8B,IAAA+G,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAE9B,MAAM,KACFlL,EACAmL,OAAO,eAAEC,GACTlS,WAAW,UACPmS,EAAS,kBACTpH,EAAiB,iBACjBC,EAAgB,sBAChBoH,EAAqB,2BACrBC,EAA0B,oBAC1BC,EAAmB,mBACnBC,EAAkB,2BAClBC,EAA0B,qBAC1BC,EAAoB,8BACpBC,EAA6B,wBAC7BC,EAAuB,sCACvBC,IAEJnW,GAGGoW,EAAStC,GAAc3U,EAAAA,UAAe,IACtCkQ,EAAegH,GAAoBlX,EAAAA,UAAe,IAClDmX,EAAeC,GAAoBpX,EAAAA,SAAe,IAClDqX,EAAQC,GAAatX,EAAAA,UAAe,IACpC6N,EAASC,GAAc9N,EAAAA,UAAe,GACvCmL,EAAUD,MAAAA,GAAa,QAAT0K,EAAJ1K,EAAMC,eAAO,IAAAyK,OAAA,EAAbA,EAAenJ,OACzBsC,EAAQ7D,MAAAA,GAAkB,QAAd2K,EAAJ3K,EAAMqM,oBAAY,IAAA1B,OAAA,EAAlBA,EAAoBpJ,OAC5B+K,EAA4BtM,MAAAA,GAA+B,QAA3B4K,EAAJ5K,EAAMsM,iCAAyB,IAAA1B,OAAA,EAA/BA,EAAiCrJ,OAC7DgL,EAAkBvM,MAAAA,GAAqB,QAAjB6K,EAAJ7K,EAAMuM,uBAAe,IAAA1B,OAAA,EAArBA,EAAuBtJ,OACzCtQ,EAAoC+O,MAAAA,GAAkB,QAAd8K,EAAJ9K,EAAMhP,oBAAY,IAAA8Z,GAAQ,QAARA,EAAlBA,EAAoBvJ,cAAM,IAAAuJ,GAEnE,QAFmEA,EAA1BA,EAA4B5Z,MAClEF,GAXkC,oEAWlBA,EAAaI,cAChC,IAAA0Z,OAAA,EAFyCA,EAEvCzZ,WAGCmb,YAAY,gBAAEnD,EAAe,cAAEC,EAAa,WAAEE,EAAU,UAAEiD,GAAW,UACrEtJ,GAAS,SACTvC,IACA9I,EAEE4U,GAAYH,MAAAA,GAAgC,QAAjBxB,EAAfwB,EAAiBI,uBAAe,IAAA5B,OAAA,EAAhCA,EAAkC7Z,MAAK0b,GAA0B,aAAhBA,EAAOC,OAC1E/X,EAAAA,WAAgB,KACZ,GAAIwX,GAA6BlB,GAA4C,IAA1BA,EAAejZ,QAAgBua,GAAW,CACzF,MAAMI,EAAgBnX,EAAMqK,KAAK+M,kBAAkBxL,OAE7CyL,EACFF,GACAA,EAAc5b,MAAK+b,GAEU,yBADHA,EAAU7b,MAAQ6b,EAAU7b,KAAK8b,OAAOC,iBAGhEC,EACFJ,GAA4BA,EAAyBK,WAAaL,EAAyBK,UAAUH,OAAOC,eAE3F,MADEC,IAAoD,QAA1BA,GAA6D,SAA1BA,KACtDhB,GAAU,MAE7C,CAACnM,IAEJ,MAAM9K,GAAWmY,GAkIrBpe,eACIyG,EACAmC,EACA2S,EACAvR,EACA8S,EACAsB,EACApB,EACAvI,GAA8B,IAAA4J,EAE9B,MACIvN,MACIsM,2BAA6B/K,OAAQ+K,GACrCnF,MAAQ5F,OAAQ4F,GAChBqG,0BAA4BjM,OAAQiM,IACvC,QACD9c,EAAO,QACP+c,GACA9X,GAEE,gBAAE+X,EAAe,SAAE9M,GAAa9I,EAEtCoU,EAAiBoB,GAEjB,IAAIK,EAAchY,EAAMqK,KAAKC,QAAQsB,OACrC,MAAMqM,EAAgC,kEAChC3c,EAA8C,QAAbsc,EAAG5X,EAAMqK,YAAI,IAAAuN,GAAc,QAAdA,EAAVA,EAAYvc,oBAAY,IAAAuc,GAAQ,QAARA,EAAxBA,EAA0BhM,cAAM,IAAAgM,GAEzE,QAFyEA,EAAhCA,EAAkCrc,MACxEF,GAAgBA,EAAaI,OAASwc,WACzC,IAAAL,OAAA,EAFyCA,EAEvClc,UAECqc,IACAC,QAAqBD,GAAoBC,GAG7C,IAAKA,IAAgBrB,EACjB,OAGJ,MAAMrM,EAAU0N,EAEVzH,EACFjG,EAAQgG,YAAchG,EAAQgG,WAAWE,QAAOC,KAAeA,EAAUC,gBAAkBD,EAAUC,eAAeC,SACxH,IAAIuH,EAA0B,GAC1BJ,GAAW1Y,OAAO+Y,KAAKL,GAAStb,OAAS,GAAKsb,EAAQrC,gBAAkBqC,EAAQrC,eAAejZ,OAAS,IACxG0b,EAAkBJ,EAAQrC,eAAekC,GAAKjb,IAG9C6T,GAAqBA,EAAkB/T,OAAS,EAC5CsY,EAAUsD,kBACVtD,EAAUsD,iBAAiB,CACvBtB,UAAW,cACXpD,gBAAiBb,EAAmBtC,EAAmBhN,KAI/DoT,EACK0B,WAAW,CACR/N,QAAAA,EACA5N,GAAIwb,EACJtB,gBAAiBtb,EAAoC0E,EAAMqK,KAAKuM,gBAAgBhL,YAAShS,EACzF0e,mBAAoBA,CAAC3a,EAAiB4a,KAClC,IAAK/G,EACD,OAAOlT,QAAQka,UAGnB,MACIzd,SACI6P,KAAK,OAAE/I,KAEX7B,EACE6K,EAAWhJ,GAAUA,EAAOiJ,kBAElC,OAAO0G,EACFzG,iBAAiB,CAAET,QAASA,EAASU,MAAOC,EAAUzF,SAAU7H,EAAiB4a,aAAcA,IAC/Fvc,MAAK4P,IACF,GAAsB,WAAlBA,EAAOC,QAA4C,gBAArBD,EAAO8F,UAA6B,CAClEoD,EAAU2D,iBAAgB,GAE1B,MAAMtN,EAAsBhJ,EAAM0V,yBAC5B1V,EAAM0V,yBAAyBa,yBAC/Bb,GAA4BA,EAAyBrb,OACrDqb,EAAyB,GAAGa,8BAC5B9e,EAEA+e,EAAyC,CAC3CzM,cAAe,mBACfC,iBAAkB,CAAEN,OAAQD,EAAOC,OAAQ6F,UAAW9F,EAAO8F,YAEjEoD,EAAUsD,iBAAiB,CACvBtB,UAAW,YACXpD,gBAAiB,GACjBG,WAAYtC,EACRoH,EACAnH,EACAjO,EACAxI,EACAuP,EACAa,EACAxN,eAIS/D,IAAbiR,GAAuC,aAAbA,GAAwC,YAAbA,EAC/B,YAAlBe,EAAOC,SACPwK,GAAiB,GACbrI,GACAA,KAGY,cAAbnD,IACPiK,EAAUsD,iBAAiB,CACvB1E,gBAAiB,KAErBoB,EAAU2D,iBAAgB,OAIrC1b,OAAOC,IACAgD,EAAM7C,YACN6C,EAAM7C,UAAUC,UAAUJ,GAC1BgD,EAAM7C,UAAUE,MAAM,wCAMzCN,OAAOC,IACAgD,EAAM7C,YACN6C,EAAM7C,UAAUH,MAAMA,EAAME,SAC5B8C,EAAM7C,UAAUE,MAAM,+BAMtC,OAzQiCub,CAAmB5Y,EAAOmC,EAAO2S,EAAWvR,EAAW8S,EAAkBsB,EAAKpB,EAAkBvI,GAS3HlC,GAAgB,CAClB+M,aAAc/C,EACdgD,qBAAsB/C,EACtBgD,kBAAmB/C,EACnBgD,qBAAsB/C,EACtBgD,kBAAmB/C,EACnB7H,cAAeqH,EACfpH,kBAAmBA,EACnBC,iBAAkBA,GAEhBN,GAAiBC,EACnB/O,EAAAA,cAACgP,EAAAA,eAAc,CACX9D,KAAM,CAAE6D,MAAOA,GACfnT,QAASiF,EAAMjF,QACf2B,GAAIsD,EAAMtD,GACV0R,SAAUpO,EAAMoO,SAChBC,cAAevC,GAAcuC,cAC7BC,kBAAmBxC,GAAcwC,kBACjCC,iBAAkBzC,GAAcyC,mBAGpC,GAEE2K,GAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAERlL,GAA0B,CAC5BzT,QAASiF,EAAMjF,QACfwE,UAAW,YACX7C,GAAIsD,EAAMtD,GACV0R,SAAUpO,EAAMoO,SAChB/D,KAAM,CAAEC,QAA2B,QAApB+K,EAAErV,EAAMqK,KAAKC,eAAO,IAAA+K,OAAA,EAAlBA,EAAoBzJ,OAAQsC,MAA8B,QAAzBoH,EAAEtV,EAAMqK,KAAKqM,oBAAY,IAAApB,OAAA,EAAvBA,EAAyB1J,QAC7EE,cAAeA,GACf2C,cAAeyK,GACfxK,aAAc1O,EAAMjF,QAAQuG,QAAQoN,aACpCC,gBAAiB1D,GACjBgD,eAAgBA,GAChBlC,eAAe4N,EAAAA,EAAAA,IAAW,OAAQ3Z,EAAMjF,QAAQ4P,eAChD6C,UAAWA,GACXC,aAAcqH,EAAU2D,iBAEtB7J,GAAmBzP,EAAAA,cAAC0P,EAAAA,MAAKzP,OAAAC,OAAA,GAAKmP,KAEpC,MAAO,CACHoL,eAAgB,CACZra,UAAW,4BAEfsa,cAAepE,EAAea,GAC9BwD,sBAAuBA,IAAMta,GAAQ,GACrCua,QAAS5a,EAAAA,cAAC6a,EAAAA,QAAO,CAACza,UAAU,mCAAmC0a,WAAW,KAAK1V,KAAMoR,IACrFuE,YAAa/a,EAAAA,cAAA,KAAGI,UAAU,wCAAwCqW,GAClEuE,wBAAyB7e,EACrB6D,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,KAAGI,UAAU,wCAAwC4W,GACrDhX,EAAAA,cAAA,MAAIsB,KAAK,OAAOlB,UAAW,mCACtBqX,MAAAA,GAAgC,QAAjBrB,EAAfqB,EAAiBI,uBAAe,IAAAzB,OAAA,EAAhCA,EAAkCnZ,KAAKZ,GAEhC2D,EAAAA,cAAA,MAAIsB,KAAK,eAAelB,UAAW,yCAA0C6a,IAAK5e,EAAK0b,MAClF1b,EAAK6e,iBAM1B,KACJC,OACInb,EAAAA,cAACqU,EAAgB,CACbE,gBAAiBA,EACjBC,cAAeA,EACfE,WAAYA,EACZtQ,UAAWvD,EAAMuD,UACjBkQ,UAAyB,gBAAdqD,EACXhD,WAAYA,IAGpByG,WACIpb,EAAAA,cAAA,UACII,UAAU,yCACVC,QAASA,IAAMA,GAAQ,GAAE,aACd,mCAEXL,EAAAA,cAAA,OAAKI,UAAU,gDACXJ,EAAAA,cAAA,OAAKI,UAAU,iBAGP,oCAIpBib,gBAAiBzD,IACb5X,EAAAA,cAAA,UAAQI,UAAU,kBAAkBmI,UAAW8O,EAAM,aAAcX,EAAqBrW,QAASA,IAAMA,GAAQ,IAC3GL,EAAAA,cAAA,OACII,UAAU,sCACV6E,MAAM,YACNiJ,aAAczE,IACVqE,GAAW,IAEfK,aAAc1E,IACN4N,GACAvJ,GAAW,KAInB9N,EAAAA,cAAA,OAAKI,UAAWyN,EAAU,6BAA+B,wBAEzD7N,EAAAA,cAAA,OAAKI,UAAU,4BAA4BsW,KAIvDO,QAASA,EACT/G,cAAeA,EACfoL,MAAO7L,mCCnNT,MAAO8L,EAgBTvhB,YAAYwhB,GACRA,EAAcA,GAAe,GAE7BpgB,KAAKqgB,GAAKD,EAAYC,GAEtB,IAAIC,EAAS,CACTC,OAAQH,EAAYG,OACpBC,iBAAkBJ,EAAYI,kBASlC,GAJAxgB,KAAKqR,OAASiP,EAGdtgB,KAAKygB,yBAAsBphB,EACvB+gB,EAAYK,oBAAqB,CACjCzgB,KAAKygB,oBAAsB,GAC3B,IAAK,IAAInJ,EAAI,EAAGA,EAAI8I,EAAYK,oBAAoBxe,OAAQqV,IACxD,GAAI8I,EAAYK,oBAAoBnJ,GAChC,GAAI8I,EAAYK,oBAAoBnJ,GAAG,eAAgB,CACnD,IAAItS,EAAoBob,EAAYK,oBAAoBnJ,GAAG,eAC3DtS,EAAYA,EAAU0b,OAAO1b,EAAU2b,YAAY,KAAO,GAAGC,OAAO,SAChEC,EAAc7b,KACdhF,KAAKygB,oBAAoBnJ,GAAK,IAAIuJ,EAAc7b,GAAWob,EAAYK,oBAAoBnJ,UAG/FtX,KAAKygB,oBAAoBnJ,GAAK,IAAIuJ,EAAAA,sBAAoCT,EAAYK,oBAAoBnJ,SAI1GtX,KAAKygB,oBAAoBnJ,QAAKjY,IC9C5C,SAAUyhB,EACZC,EACAC,EACAC,EACAC,EACAxQ,EACAyQ,EACAC,GAGA,OAfJ,SAAgCjf,GAC5B,MAAM0d,EAAM1d,EAAK,CAAEke,GAAIle,GAAO,KAC9B,OAAO,IAAIkf,EAAAA,iBAAiB,wBAAyB,oBAAqBC,EAAqDzB,GAYjH0B,GACDC,qCACT,0BACA,EACAF,EACA,QACA,CAAEG,YAAa,MAAOC,aAAc,0CACpC,CAAEX,WAAAA,EAAYC,qBAAAA,EAAsBC,YAAAA,EAAaC,QAAAA,EAASxQ,SAAAA,EAAUyQ,UAAAA,EAAWC,oBAAAA,4pBC2BvF,IAAIO,EAAkB,EACtB,MA8rCMC,EAAgB5iB,MAClByG,EACAoc,EACAC,EACAC,EACAC,KAEA,MACIxhB,SAAS,cAAE4P,IACX3K,EAEEwc,EAAwB,IAAIviB,EAAAA,kCAC9BmiB,EACAC,EACAC,EACAC,GACA,GAGJ,aAD+BrhB,EAAAA,EAAAA,8BAA6BshB,EAAuB7R,IAiGjF8R,GAAmBljB,MAAOyG,EAAoD0c,EAAmBC,EAAkBC,EAAgDC,EAAyFC,EAA2BC,KAAgC,IAAAC,EACzT,GAAIF,EAEA,WAhG6BvjB,OAAOyG,EAAoD0c,EAAmBC,EAAkBC,EAAgDC,EAAyFC,EAA2BC,KAAgC,IAAAE,EACrU,MAAMxS,QAAkBC,EAAAA,EAAAA,cAAa1K,EAAMjF,QAAQ4P,eAC7CuS,EAA6B,QAA3BD,EAAGxS,EAAU+G,KAAKM,iBAAS,IAAAmL,OAAA,EAAxBA,EAA0B1hB,MAAK4hB,GAAKA,EAAEpL,YAAc2K,IACzDU,EAAyCR,EAAarhB,MAAK4hB,GAAKA,EAAE9M,WAAaqM,IACrF,GAAIK,GAAwB,EAAG,KAAAM,EAC3B,MACMC,GAA2E,QAA3DD,EADNrd,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QAC7BC,IAAI,uDAA+C,IAAAqa,OAAA,EAA3DA,EAA6Drb,QAAS,GAC5F,GAAIub,MAAMC,QAAQF,GACd,IAAK,MAAMG,KAAQH,EACf,GAAIG,EAAKf,YAAcA,EAAW,CAC9BK,EAAuBU,EAAKC,YAC5B,OAKhB,GAAIR,GAAMA,EAAGzW,UAAYsW,GAAwBK,EAAe,KAAAO,EAC5D,GAAGhB,EAAWI,EACV,OAEJ,MAAMa,EAAiBjB,EAAWO,EAAGzW,SAC/BmQ,QAAwBiH,EAAAA,EAAAA,yBAC1B,CAAEjiB,cAAeoE,EAAMjF,QAAQ4P,cAAe9O,oBAAqB,IACnE,CAAC6gB,IAECoB,EAA0E,QAArDH,EAAG3d,EAAMjF,QAAQ4P,cAAc1J,eAAegR,eAAO,IAAA0L,OAAA,EAAlDA,EAAoDI,sBAClF,GAAGH,EAAiB,EAAG,CACnB,IAAII,EAAwB,CACxB1T,QAAS8S,EACTnS,SAAU2S,EACVrS,iBAAkBvL,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,iBAC3CL,kBAAmB6R,EACnBpR,6BACI5G,EAAAA,gBAAgBC,YAAY4R,IAC5B7R,EAAAA,gBAAgBC,YAAY4R,EAAgB,GAAGI,kBAC/CJ,EAAgB,GAAGI,gBAAgB,GAAGE,OAAS4G,GAEvD,MACMG,EADUje,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QAC/BC,IAAI,gBAAgBhB,OAAS,GACzD,GAAIub,MAAMC,QAAQS,IAAgBA,EAAYC,SAASd,EAAc7P,QAAS,KAAA4Q,EAK1E,IAAIC,SAJ0BP,EAAAA,EAAAA,yBAC1B,CAAEjiB,cAAeoE,EAAMjF,QAAQ4P,cAAe9O,oBAAqB,IACnE,CAACuhB,EAAc/M,YAGHjU,KAAIiiB,IAAO,IAAAC,EACH,QAApBA,EAAAD,EAAKrH,uBAAe,IAAAsH,GAApBA,EAAsBliB,KAAImiB,IACF,aAAhBA,EAAOrH,OACPkH,EAAYG,SAIxB,MACMC,SADmBrC,EAAcnc,EAAO,WAAY,WAAY,EAAG,IACxCzE,MAAKkjB,IAAK,IAAAC,EACvC,OAA6B,QAAtBA,EAAAD,EAAG3gB,2BAAmB,IAAA4gB,GAAiB,QAAjBA,EAAtBA,EAAwBxgB,uBAAe,IAAAwgB,OAAA,EAAvCA,EAAyCC,uBAAwBzB,EAAG/K,sBAEN,IAAAyM,EAAAC,EAArEL,GAAkD,QAArCL,EAAIK,EAAc1gB,2BAAmB,IAAAqgB,GAAjCA,EAAmCjgB,iBACpDuM,EAAUM,iBAAiB,CAAET,QAAS8S,EAAepS,MAAO4S,EAAgBpY,SAA2C,QAAnCoZ,EAAEJ,EAAc1gB,2BAAmB,IAAA8gB,OAAA,EAAjCA,EAAmC1gB,gBAAiBqa,aAAuB,QAAXsG,EAAET,SAAS,IAAAS,OAAA,EAATA,EAAW3H,OAClKlb,MAAKzC,MAAAA,IACoB,YAAlBqS,EAAOC,QACP7L,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAAEW,mBAAmB,OAEnGkD,OAAM6L,aAGT6B,EAAUM,iBAAiBiT,GAC9BhiB,MAAKzC,MAAAA,IACoB,YAAlBqS,EAAOC,QACP7L,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAAEW,mBAAmB,OAEnGkD,OAAM6L,aAIEgV,EAAiB,IACxBmB,EAAAA,EAAAA,KACI,EACAtU,EACAzK,EAAMjF,QAAQ4P,cAAcxN,UAC5B,CAACigB,GACDF,EACAP,GAEC3gB,MAAMmQ,GAC8B,aAA7BA,MAAAA,OAAgB,EAAhBA,EAAkBN,UAClB7L,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAAEW,mBAAmB,KACnF,KAGZkD,OAAM6L,UAMjBoW,CAA6Bhf,EAAO0c,EAAWC,EAAUC,EAAcC,EAAiBC,EAAkBC,GAG9G,MAAMha,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACrDkc,GAAiE,QAArCjC,EAAAja,EAAQC,IAAI,iCAAyB,IAAAga,OAAA,EAArCA,EAAuChb,QAAS,GAC5Ekd,EAAmBtC,EAAaxgB,KAAI+iB,GAAMA,IAC1CC,EAAkD,GACxD,GAAI7B,MAAMC,QAAQyB,GAA4B,CAC1C,IAAK,MAAMI,KAAQJ,EACf,GAAII,EAAe,YAAM3C,EAAW,CAChC,MAAM4C,EAAmB3C,EACzB,GAAG2C,EAAmB,EAAG,CACrBF,EAAgBziB,KAAK,CAAE+f,UAAW2C,EAAe,UAAGnR,MAAOmR,EAAW,MAAGpU,SAAUqU,EAAkB5B,YAAa2B,EAAiB,YAAGE,oBAAqBF,EAAyB,sBACpL,IAAI,MAAMF,KAAMD,EACRC,EAAG9O,WAAagP,EAAe,YAC/BF,EAAGlU,SAAWqU,SAK1BF,EAAgBziB,KAAK,CAAE+f,UAAW2C,EAAe,UAAGnR,MAAOmR,EAAW,MAAGpU,SAAUoU,EAAc,SAAG3B,YAAa2B,EAAiB,YAAGE,oBAAqBF,EAAyB,sBAG3Ltc,EAAQqC,IAAI,yBAA0Bga,GACtCvC,EAAgBqC,GAChBlf,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAAEW,mBAAmB,MAG5F2lB,GAAmBA,CAACC,EAAuBzf,EAAoD4c,EAAgDC,EAAyF6C,EAAiCC,EAA0EC,EAAsCC,EAA8E/C,KAA6B,IAAAgD,EACte,IAAIC,EAAa,EAEjB,IAAIC,GAA8D,QAArCF,EADb9f,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACtBC,IAAI,iCAAyB,IAAA8c,OAAA,EAArCA,EAAuC9d,QAAS,GAC7E,MAAMie,EAASnD,EAAmB,gCAAiC,0BAC7DoD,EAAOxc,EAAAA,GAASC,WAAawc,QAAUA,OAAOC,SAASC,eAAeJ,GAEtEK,EAAuBxD,GAAqBpZ,EAAAA,GAASC,WAAawc,QAAUA,OAAOI,YAAc,MAAQ7c,EAAAA,GAASC,WAAawc,QAAUA,OAAOI,YAAc,KAAS,EAAG,EAC1KC,EAAY1D,EAAmB,qBAAsB,eACrD2D,EAAc3D,EAAmB,uBAAwB,iBAC/D,IAAI4D,EAAY5D,EAAmB8C,EAA+BF,EAClE,MACMiB,EAAwB3gB,EAAM6B,OAAO+e,+BAAiC5gB,EAAM6B,OAAO+e,+BAAiC,kFACpG,IAAAC,EAAAC,EAAtB,GAAIhE,GAEA,IADAF,EAAeA,EAAapM,QAAO2O,IAAE,IAAA4B,EAAA,QAA0B,QAAtBA,EAAA/gB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAmV,GAAgB,QAAhBA,EAAtBA,EAAwBvP,KAAKM,iBAAS,IAAAiP,IAAtCA,EAAwCxlB,MAAK2hB,GAAMA,EAAGnL,YAAcoN,EAAG9O,iBACtE,QAA1BwQ,EAAI7gB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAiV,GAAtBA,EAAwBrP,KAAKM,WAAmC,QAA1BgP,EAAI9gB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAkV,GAAtBA,EAAwBtP,KAAKM,UAAUtV,OACjG,IAAI,MAAM2gB,KAA2B,QAA1B6D,EAAIhhB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAoV,OAAA,EAAtBA,EAAwBxP,KAAKM,UAAW,KAAAkP,EACnD,IAAK,MAAM7B,KAAMvC,EACVO,EAAEpL,YAAcoN,EAAG9O,WAClB8O,EAAGlU,SAAWkS,EAAE1W,gBAMhCmW,EAAeA,EAAapM,QAAO2O,GAAM5B,MAAMC,QAAQwC,IAA2BA,EAAuBzkB,MAAK0lB,GAAKA,EAAa,YAAM9B,EAAG9O,aAE7I,OAAOlR,IAAAA,cAAAA,IAAAA,SAAA,KACNyd,GAAgBA,EAAapgB,OAAS8jB,EAAsBnhB,IAAAA,cAAC+hB,EAAAA,OAAM,CAACxkB,GAAI8jB,EAAWhhB,QAASA,KACtF0gB,IACKA,EAAKiB,UAxBC,IAwBwB,EAC9BjB,EAAKiB,WAzBC,IA2BNjB,EAAKiB,UAAY,EAElBrE,EACC+C,EAAgCK,EAAKiB,WAErCxB,EAA2BO,EAAKiB,aAGzCC,UAAQlB,GAASQ,EAAY,MAA8BvhB,IAAAA,cAAAA,IAAAA,SAAA,MAC9DA,IAAAA,cAAA,OAAKzC,GAAIujB,EAAQ1gB,UAAU,8BAA8B8hB,SAAUA,KAC/D,GAAGnB,GAAQrP,KAAKyQ,IAAKzQ,KAAK0Q,KAAKrB,EAAKiB,WAAatQ,KAAK0Q,KAAKb,IAhCtC,GAgCuE,CACxF,GAAI5D,EAMG,EACAoD,EAAKiB,WAxCK,IAwCUvE,EAAapgB,OAAS8jB,EAAsB,IAExDJ,EAAKiB,UAAY,KADxBtB,EAAgCK,MAAAA,OAAI,EAAJA,EAAMiB,WAI1C,MAAMK,EAAU9d,EAAAA,GAASC,WAAawc,QAAUA,OAAOC,SAASC,eAAeG,GACzEiB,EAAY/d,EAAAA,GAASC,WAAawc,QAAUA,OAAOC,SAASC,eAAeI,GAE9EP,EAAKiB,UAAY,GACbK,IACCA,EAAQJ,QAAS,GAGlBI,IACCA,EAAQJ,QAAS,GAGrBlB,EAAKiB,UAzDI,IAyDUvE,EAAapgB,OAAS8jB,GACtCmB,IACCA,EAAUL,QAAS,GAGpBK,IACCA,EAAUL,QAAS,QA7BxBlB,EAAKiB,WAlCK,IAkCUvE,EAAapgB,QAAU8jB,EAAsB,KAEzDJ,EAAKiB,UAAY,KADxBxB,EAA2BO,MAAAA,OAAI,EAAJA,EAAMiB,WAgCzCT,EAAYR,EAAKiB,aAGpBvE,EAAaxgB,KAAI,CAACkO,EAASvK,KAAS,IAAA2hB,EAAAC,EACjC,IAAIC,EACAC,EACC9E,EAAuB,EACxB+E,GAAoC,EACxC,MAAMC,EAAmBzX,IAAW0X,EAAAA,EAAAA,qBAAoB1X,EAAQiD,OAAQvN,EAAMjF,QAAQ4P,cAAc1J,eAAeghB,aAC7G/E,EAAoB,QAAlBwE,EAAG1hB,EAAMqK,KAAKmH,YAAI,IAAAkQ,GAAQ,QAARA,EAAfA,EAAiB9V,cAAM,IAAA8V,GAAgB,QAAhBA,EAAvBA,EAAyBlQ,KAAKM,iBAAS,IAAA4P,OAAA,EAAvCA,EAAyCnmB,MAAK4hB,GAAKA,EAAEpL,YAAczH,EAAQ+F,WActF,GAbIkN,MAAMC,QAAQwC,KACd4B,EAAiB5B,EAAuBzkB,MAAK0lB,GAAKA,EAAa,YAAM3W,EAAQ+F,WAC1EuR,IACCC,EAAeD,EAAqB,MACpC7E,EAAuB6E,EAA2B,YAC9C9E,IACAxS,EAAQW,SAAW2W,EAAwB,SACvC1E,GAAMA,EAAGzW,UAAY6D,EAAQW,UAAY8R,IACzC+E,EAAqCxX,EAAQW,SAAWiS,EAAGzW,SAAYsW,MAKnFA,GAAwB,EAAG,KAAAmF,EAC3B,MACM5E,GAA2E,QAA3D4E,EADNliB,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QAC7BC,IAAI,uDAA+C,IAAAkf,OAAA,EAA3DA,EAA6DlgB,QAAS,GAC5F,GAAIub,MAAMC,QAAQF,GACd,IAAK,MAAMG,KAAQH,EACf,GAAIG,EAAKf,YAAcpS,EAAQ+F,SAAU,CACrC0M,EAAuBU,EAAKC,YAC5B,OAKbpT,EAAQW,UAAaX,EAAQW,UAAY8R,IACxC+E,GAAoC,GAExC,MAAMK,EAAyB,CAC3BC,UAAW9X,EAAQ8X,UACnBC,cAAeR,GAA4BvX,EAAQgY,MACnDC,wBAAyBV,GAA4BvX,EAAQgY,OAEjEvC,IAA4B8B,EAAcW,OAAOX,GAAevX,EAAQgY,QAAUhY,EAAQW,SAAWX,EAAQW,SAAU,GACvH,MAQMwX,EAAuBziB,EAAMjF,QAAQuG,QAAQ2gB,YAAYQ,aAI/D,OACItjB,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,OAAKI,UAAU,4CACPJ,IAAAA,cAAA,OAAKI,UAAU,0BACXJ,IAAAA,cAAA,OAAKI,UAAU,gCACXJ,IAAAA,cAAC2B,EAAAA,GAAc,CACX4hB,IAAK,GAAGD,IAAenY,EAAQqY,mBAAqB,GACpDC,YAAab,EACbc,QAASvY,EAAQ7O,KACjBiT,aAAc1O,EAAMjF,QAAQuG,QAAQoN,aACpCD,cAtBN,CAClB0K,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCuJ,GAAI,CAAEzJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAiBcqJ,oBAAoB,WAG5B5jB,IAAAA,cAAA,WACIA,IAAAA,cAAA,KAAGI,UAAU,eAAe0I,MAAOqC,GAAWA,EAAQ7O,MAAO6O,GAAWA,EAAQ7O,MAChF0D,IAAAA,cAACgP,EAAAA,EAAc,CACXpT,QAASiF,EAAMjF,QACf2B,GAAI,6BACJ0R,SAAU,6BACV/D,KAAM,CAAE6D,MAAOiU,GACfa,iBAAappB,EACbyU,cAAe,OACfC,kBAAmB,iBACnB2U,kBAAcrpB,EACdspB,SAAgC,QAAxBvB,EAAE3hB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAA+V,OAAA,EAAtBA,EAAwBnQ,KAClC2R,aAActB,GAA4BvX,EAAQgY,MAClDc,eAAWxpB,EACXypB,8BAA0BzpB,IAG9BuF,IAAAA,cAAA,KAAGI,UAAU,oBAAkB,cAC/BJ,IAAAA,cAACsH,EAAAA,SAAQ,CACL/J,GAAI,2BAA2B4N,EAAQ+F,WACvCrJ,aAAcsD,EAAQW,SACtBnG,SAAWwe,IACP7G,GAAiBzc,EAAOsK,EAAQ+F,SAAUiT,EAAQ1G,EAAcC,EAAiBC,EAAkBC,IAEvG/U,sBAAsB,EACtBO,eAAe,EACfX,IAAKmV,EACLlW,IAAK,IAERib,GAAqC3iB,IAAAA,cAAA,KAAGI,UAAU,sBAAsBohB,KAGjFxhB,IAAAA,cAAC+hB,EAAAA,OAAM,CAAC3hB,UAAU,iBAAkBC,QAASA,KAAK,IAAA+jB,EAC9C,IAAIzG,EAAkB,KAAA0G,EAClB,MAAMzgB,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QAC3D,IAAIid,GAA8D,QAArCwD,EAAAzgB,EAAQC,IAAI,iCAAyB,IAAAwgB,OAAA,EAArCA,EAAuCxhB,QAAS,GAC7E,GAAIub,MAAMC,QAAQwC,GAAyB,CACvC,IAAI,IAAInO,EAAI,EAAGA,EAAImO,EAAuBxjB,OAAQqV,IAC1CmO,EAAuBnO,GAAc,YAAMvH,EAAQ+F,iBAC5C2P,EAAuBnO,GAGtC,MAAM4R,EAAgE,GACtEzD,EAAuB5jB,KAAIsnB,IACvB,GAAGA,GAAQA,EAAgB,UAAG,CAC1B,MAAMC,EAAmD,GACzDA,EAAmBjH,UAAYgH,EAAgB,UAC/CC,EAAmB1Y,SAAYyY,EAAe,SAC9CC,EAAmBzV,MAAQwV,EAAY,MACvCC,EAAmBjG,YAAcgG,EAAkB,YACnDD,EAA8B9mB,KAAKgnB,OAG3C5gB,EAAQqC,IAAI,yBAA0Bqe,GACtCzjB,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAACS,eAAe,IAEzF,OAEJ,MAAMiqB,EAAyC,QAAzBL,EAAGvjB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAA2X,GAAgB,QAAhBA,EAAtBA,EAAwB/R,KAAKM,iBAAS,IAAAyR,OAAA,EAAtCA,EAAwChoB,MAAK2hB,GAAMA,EAAGnL,YAAczH,EAAQ+F,WACrG,GAAGuT,EAAkB,KAAAC,EACjB,MAAMpqB,EAAQ,CACVqqB,YAAa,CAACF,EAAiBG,OAAQ5a,aAErB,QAAtB0a,EAAA7jB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAiY,GAAtBA,EAAwBG,gBAAgBvqB,GAAOuC,MAAK,KAChDgE,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAACS,eAAe,OAExFoD,OAAMC,IACHgD,EAAM7C,UAAU8mB,QAAQjnB,GACxBgD,EAAM7C,UAAUE,MAAM,sCAG1B2C,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAACS,eAAe,aAUpHijB,GAAgBA,EAAapgB,OAAS8jB,EAAsBnhB,IAAAA,cAAC+hB,EAAAA,OAAM,CAACxkB,GAAI+jB,EAAajhB,QAASA,KACxF0gB,IACCA,EAAKiB,WAjOK,IAkOPrE,EACC+C,EAAgCK,EAAKiB,WAErCxB,EAA2BO,EAAKiB,aAGzCC,UAAQlB,GAASQ,EAnOK,IAmOS9D,EAAapgB,OAAS8jB,MAAoEnhB,IAAAA,cAAAA,IAAAA,SAAA,MAC5HA,IAAAA,cAAA,KAAGI,UAAU,8BAA8BS,EAAM6B,OAAOqiB,eAAiBlkB,EAAM6B,OAAOqiB,eAAiB,eAAe/kB,IAAAA,cAAA,gBAClH,IAAIglB,KAAKC,aAAa,QAAS,CAC3BC,MAAO,WACPC,gBAAiB,SACjBC,SAAU,MACVC,sBAAuB,IACxBC,OAAO1E,OAKZ2E,GAAgBA,CAClBpa,EACA6M,EACAwN,EACAC,EACAC,EACAnO,KACA,IAAAoO,EACA,MAAMC,EAAeC,GAAgB7N,GAC/B8N,EAAYJ,GAAkBK,GAA4BL,GAC1DM,EAAkBzO,GAAgB0O,GAAgB1O,GAClD2O,EAAcR,GAAkBA,EAAeS,kBAKrD,OACInmB,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,GAAGimB,MAAM,sBAAsBC,OAAO,WAClDtmB,IAAAA,cAAA,QAAMumB,SAAS,OAAOxjB,QAASoI,MAAAA,OAAO,EAAPA,EAAS7O,OACxC0D,IAAAA,cAAA,QAAMumB,SAAS,cAAcxjB,QAASoI,MAAAA,OAAO,EAAPA,EAAS+P,cAC/Clb,IAAAA,cAAA,QAAMumB,SAAS,QAAQxjB,QAAS6iB,IAChC5lB,IAAAA,cAAA,QAAMumB,SAAS,QAAQxjB,QAAS,GAAG0iB,IAAWta,MAAAA,OAAO,EAAPA,EAASqY,oBACvDxjB,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,OAAOpmB,UAAU,GAAGmmB,SAAS,SAASD,OAAO,kBACnDtmB,IAAAA,cAAA,QAAMumB,SAAS,MAAMxjB,QAASyiB,IAC9BxlB,IAAAA,cAAA,QAAMumB,SAAS,gBAAgBxjB,QAAQ,QACvC/C,IAAAA,cAAA,QAAMumB,SAAS,WAAWxjB,QAASijB,MAAAA,OAAe,EAAfA,EAAiBS,SAASzc,aAC7DhK,IAAAA,cAAA,QAAMumB,SAAS,YAAYxjB,QAASijB,MAAAA,OAAe,EAAfA,EAAiBU,UAAU1c,cAElEkc,GAAeA,EAAc,EAC1BlmB,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,OAAOpmB,UAAU,GAAGmmB,SAAS,kBAAkBD,OAAO,mBAC5DtmB,IAAAA,cAAA,QAAMumB,SAAS,cAAcxjB,QAAS2iB,MAAAA,GAA6B,QAAfC,EAAdD,EAAgBiB,qBAAa,IAAAhB,OAAA,EAA7BA,EAA+B3b,aACrEhK,IAAAA,cAAA,QAAMumB,SAAS,cAAcxjB,QAASmjB,MAAAA,OAAW,EAAXA,EAAalc,aACnDhK,IAAAA,cAAA,QAAMumB,SAAS,aAAaxjB,QAAS+iB,MAAAA,OAAS,EAATA,EAAWc,WAAW5c,aAC3DhK,IAAAA,cAAA,QAAMumB,SAAS,cAAcxjB,QAAS+iB,MAAAA,OAAS,EAATA,EAAWe,YAAY7c,mBAGjEvP,IAQVorB,GAAmB7N,IACrB,MAAM8O,EAAiB9O,GAAiBA,EAAc5b,MAAK2qB,GAAgB,UAAXA,EAAEzqB,OAClE,OAAQwqB,GAAkBA,EAAevO,WAAc,WAGrD0N,GAAmBlX,IACrB,IAAI0X,EAAW,EACXC,EAAY,EAShB,OARI3X,KACIA,MAAAA,OAAK,EAALA,EAAOmU,kBAAkBnU,MAAAA,OAAK,EAALA,EAAOqU,0BAChCqD,OAA8ChsB,KAAnCsU,MAAAA,OAAK,EAALA,EAAOqU,yBAAwCrU,MAAAA,OAAK,EAALA,EAAOqU,wBAA0BqD,EAC3FC,OAAqCjsB,KAAzBsU,MAAAA,OAAK,EAALA,EAAOmU,eAA8BnU,MAAAA,OAAK,EAALA,EAAOmU,cAAgBwD,IACjE3X,MAAAA,OAAK,EAALA,EAAOmU,kBAAkBnU,MAAAA,OAAK,EAALA,EAAOqU,2BACvCqD,EAAWC,OAAqCjsB,KAAzBsU,MAAAA,OAAK,EAALA,EAAOmU,eAA8BnU,MAAAA,OAAK,EAALA,EAAOmU,cAAgBuD,IAGpF,CAAEA,SAAAA,EAAUC,UAAAA,IAGjBX,GAA+BiB,IACjC,IAAIJ,EAAa,EACbC,EAAc,EAiClB,OAhCIG,GACIA,GAAkD,KAAnCA,MAAAA,OAAW,EAAXA,EAAab,qBACG,IAA3Ba,EAAYC,aACZL,EAAa,EACbC,EAAc,GAEa,IAA3BG,EAAYE,aACO,IAAfN,IACAA,EAAa,GAEjBC,EAAc,GAEa,IAA3BG,EAAYG,aACO,IAAfP,IACAA,EAAa,GAEjBC,EAAc,GAEa,IAA3BG,EAAYI,aACO,IAAfR,IACAA,EAAa,GAEjBC,EAAc,GAEa,IAA3BG,EAAYK,aACO,IAAfT,IACAA,EAAa,GAEjBC,EAAc,IAInB,CAAED,WAAAA,EAAYC,YAAAA,IAGnBS,GAAsBltB,MACxBmtB,EACAC,EACAC,EACAC,EACAC,EACAC,KAEA,GAAIH,GAAmBA,EAAgBpqB,QAAUoqB,EAAgBpqB,OAAS,EAEtE,OAEJ,IAAKmqB,GAAuBA,GAAoD,IAA9BA,EAAmBnqB,OACjE,OAEJ,MAAM2a,EAAgBuP,EAChBM,EAAqC,GAE3CL,GACIA,EAAmBvqB,KAAI6qB,IACnB,MAAMC,EAAwBD,EAAkB1P,OAAOC,cAEjD2P,EAAoBhQ,EAAc5b,MAAK+b,IAAY,IAAA8P,EACrD,OAAOF,KAAwC,QAAnBE,EAAK9P,EAAU7b,YAAI,IAAA2rB,OAAA,EAAdA,EAAgB5P,kBAErD2P,GAAqBH,EAAiBrqB,KAAKwqB,MAGnDN,EAAcG,GAEd,MAAMK,EACFlQ,GACAA,EAAc5b,MAAK+rB,IACf,MAAMC,EAAgBD,EAAgB7rB,MAAQ6rB,EAAgB7rB,KAAK8b,OAAOC,cAC1E,MAAyB,mBAAlB+P,GAAwD,oBAAlBA,KAGrDF,GACIA,EAAuB3P,WACmC,SAA1D2P,EAAuB3P,UAAUH,OAAOC,eACxCsP,GAAmB,GAEvB,MAAMzP,EACFF,GACAA,EAAc5b,MAAK+b,GAEU,yBADHA,EAAU7b,MAAQ6b,EAAU7b,KAAK8b,OAAOC,iBAGhEC,EACFJ,GAA4BA,EAAyBK,WAAaL,EAAyBK,UAAUH,OAAOC,eAE3F,MADEC,IAAoD,QAA1BA,GAA6D,SAA1BA,KACtDsP,GAAmB,IAI/CS,GAAiCA,CAACjkB,EAA6BwI,KACjE,MAAM,wBAAEmK,EAAuB,mBAAEJ,GAAuBvS,EAClDkkB,EAAwC,CAC1CpnB,UAAWyV,EACX7V,SAAU6V,EACVxV,QAASyL,EACTtL,KAAM,UAEV,OACItB,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,kCACZJ,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,uCAAuC2W,GACvD/W,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,wCACZJ,IAAAA,cAAC2B,EAAAA,GAAa,CAAChB,KAAM2nB,OAO/BC,GAAqBA,CAACC,EAAkCpkB,KAC1D,MAAM,uBAAEqkB,EAAsB,wBAAEC,GAA4BtkB,EAC5D,IAAIukB,EAAgBH,EAGpB,OADAG,EAAgBH,GAA8B,EAE1CxoB,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,MAAMpmB,UAAU,oCACtBJ,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,OAAOpmB,UAAU,iBACtBuoB,GAEL3oB,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,OAAOpmB,UAAU,uBACL,IAAjBooB,EAAqBC,EAAyBC,KAOzDE,GAAoBC,IACtB,GAAKA,GAAoC,IAAtBA,EAAWxrB,OAG9B,OAAO2C,IAAAA,cAAAA,IAAAA,SAAA,KAAG6oB,EAAW,KAInBC,GAAkBA,CACpBC,EACApT,EACA9U,EACAmC,EACAgmB,KAEA,MAAM,eAAEvO,GAAmBsO,GAErB,UACF3kB,EACAxI,SACI6P,KACI/I,QAAQ,2BAAEwQ,MAGlBrS,GAEE,SAAEiL,GAAa9I,EAQrB,OACIhD,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,IAAAA,cAACsH,EAAAA,SAAQ,CACL/J,GAAG,oCACHkL,IAAKyK,GAA8B,GACnCrL,aAAciE,EACdnG,SAZM6X,IACV7H,EAAUsT,gBACVtT,EAAUsT,eAAezL,IAWrBrU,uBAAwB/E,EAAU+E,uBAClCJ,yBAA0BigB,EAAmBjgB,yBAC7CM,yBAA0B2f,EAAmB3f,6BAOvD6f,GAAoBC,IACtB,MAAM,OAAEC,EAAM,eAAE3O,GAAmB0O,EAEnC,OAAOnpB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GAAiB2O,IAGhCC,GAAwBC,IAC1B,MAAM,eAAE7O,EAAc,WAAE8O,EAAU,OAAEH,GAAWE,EAE/C,OACItpB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACL8O,EACAH,IAKPI,GAAoBC,IACtB,MAAM,eAAEhP,EAAc,UAAEiP,GAAcD,EAEtC,OAAOzpB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GAAiBiP,EAAUzsB,IAAI0sB,MAG9CC,GAAsBC,IACxB,GAAKA,GAAsC,IAAvBA,EAAYxsB,OAIhC,OAAO2C,IAAAA,cAAAA,IAAAA,SAAA,KAAG6pB,EAAY,KAGpBF,GAA4BG,IAC9B,MAAM,eAAErP,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,OAAEO,EAAM,OAAE6O,GAAWF,EAEzE,OACI9pB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GACLnP,EACAO,GAEJ6O,IAKPC,GAAsBC,IACxB,MAAM,eAAEzP,EAAc,cAAEC,EAAa,OAAES,EAAM,MAAEG,GAAU4O,EAEzD,OACIlqB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLC,EAGAS,EACAG,IAKP6O,GAA0BC,IAC5B,MAAM,eAAE3P,EAAc,OAAEU,EAAM,MAAE7gB,GAAU8vB,EAE1C,OACIpqB,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLU,EACA7gB,IAIb,GAj4D6FuG,IAAQ,IAAAwpB,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACjG,MAAM,YACFC,EAAW,0BACXC,EAAyB,cACzB9B,EAAa,UACbG,EAAS,MACT3gB,EAAK,OACLuiB,EAAM,gBACNC,EACAlnB,WAAW,gBAAEmnB,GACb3vB,SACI4P,eACI1J,gBAAgB,QAAE8B,MAG1B/C,GAGAqK,MAAM,eAAEwa,EAAc,kBAAEzN,EAAiB,aAAEV,EAAY,QAAEpM,GACzDzI,QAAQ,mBAAE8kB,GAAkB,gBAAEgE,GAAe,aAAEC,IAAc,SAC7D3f,GAAQ,UACR6J,GAAS,MACT3S,GAAK,UACLoB,GACAiS,OAAO,2BAAEqV,KACT7qB,EAEE2kB,GAAU3kB,EAAMjF,QAAQuG,QAAQwpB,IAAIC,WAAWC,KAAK7hB,WACpDyb,GAAW5kB,EAAMjF,QAAQuG,QAAQ2gB,YAAYQ,aAAatZ,WAE1DgO,GAAgBC,EAAkBxL,OAIlCoC,GAAqBA,KACpBhO,EAAMjF,QAAQ6P,IAAI/I,OAAOopB,2BACxBC,IAA6B,IAG/B7B,GAAcxU,EAAqB7U,EAAOmC,GAAO2S,GAAWvR,GAAWyK,IACvE2Z,GAAe9C,GAAkBA,EAAejZ,QAAUiZ,EAAejZ,OAAO+b,aAEhFwD,IAAkBC,EAAAA,EAAAA,QAAuB,OAGxCnsB,GAAY4nB,KAAiB3Z,EAAAA,EAAAA,UAA2B,KACxDme,GAAiBtE,KAAsB7Z,EAAAA,EAAAA,WAAS,IAChDlD,GAAiB8c,KAAsB5Z,EAAAA,EAAAA,WAAS,IAChDoe,GAAoBC,KAAyBre,EAAAA,EAAAA,WAAS,GACvDnB,GAAgBjL,EAAAA,GAAoB,OAAQd,EAAMjF,QAAQ4P,gBACzD6gB,GAAoBC,KAAyBve,EAAAA,EAAAA,WAA8B,IAC3Ewe,GAAcC,KAAmBze,EAAAA,EAAAA,WAAS,IAC1C0e,GAAiBC,KAAsB3e,EAAAA,EAAAA,WAAS,IAEhDsH,GAAUsX,KAAe5e,EAAAA,EAAAA,UAAS,KAClC6e,KAA0B7e,EAAAA,EAAAA,WAAS,IACnC8e,GAAeC,KAAoB/e,EAAAA,EAAAA,UAAS,KAC5Cgf,GAAsBC,KAA2Bjf,EAAAA,EAAAA,WAAS,IAC1Dkf,GAAuBC,KAA4Bnf,EAAAA,EAAAA,WAA8B,IACjFof,GAAsBC,KAA2Brf,EAAAA,EAAAA,WAAS,IAC1Dsf,GAAqBC,KAA0Bvf,EAAAA,EAAAA,WAAS,IACxDwf,GAAeC,KAAoBzf,EAAAA,EAAAA,aACnC,CAAE0f,KAA2B1f,EAAAA,EAAAA,eAA2BtT,IAExDizB,GAAeC,KAAoB5f,EAAAA,EAAAA,WAAS,IAC5C6f,GAAcC,KAAmB9f,EAAAA,EAAAA,YAKlC+f,IAHazD,EAAGxpB,EAAM6B,OAAOqrB,cAChBzD,EAAGzpB,EAAM6B,OAAOsrB,cAE4B,QAA9CzD,IAA0B,QAAtBC,EAAC3pB,EAAMjF,QAAQuG,eAAO,IAAAqoB,GAAO,QAAPA,EAArBA,EAAuByD,aAAK,IAAAzD,IAA5BA,EAA8BsD,oBAAW,IAAAvD,GAAAA,IACxD9M,GAAcC,KAAmB3P,EAAAA,EAAAA,UAA2C,KAC5EmgB,GAA2BnC,KAAgChe,EAAAA,EAAAA,WAAS,IACpEwS,GAAyBC,KAA8BzS,EAAAA,EAAAA,UAAS,IAChE0S,GAA8BC,KAAmC3S,EAAAA,EAAAA,UAAS,IAC1EogB,GAAsBC,KAA2BrgB,EAAAA,EAAAA,WAAS,IAMjEY,EAAAA,EAAAA,YAAU,KAAK,IAAA0f,EAAAC,GACiE,KAA9B,QAA1CD,EAAAxtB,EAAMqK,KAAKqjB,yBAAyB9hB,cAAM,IAAA4hB,OAAA,EAA1CA,EAA4CG,0BAAqCL,IAEF,KAA9B,QAA1CG,EAAAztB,EAAMqK,KAAKqjB,yBAAyB9hB,cAAM,IAAA6hB,OAAA,EAA1CA,EAA4CE,0BAAqCL,IACxFC,IAAwB,GAFxBA,IAAwB,KAK7B,CAACvtB,EAAMqK,KAAKqjB,yBAAyB9hB,SAExC,MAsGMgiB,GAAoBr0B,UAAU,IAAAs0B,EAAAC,EAAAC,EAChC,MAAMC,EAA6C,QAAtBH,EAAA7tB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAiiB,GAAtBA,EAAwBrc,KAAKM,UAAkC,QAAzBgc,EAAG9tB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAkiB,GAAgB,QAAhBA,EAAtBA,EAAwBtc,KAAKM,iBAAS,IAAAgc,OAAA,EAAtCA,EAAwC1xB,KAAI6xB,GAAYA,EAASlc,YAAc,IAAK,GACpJhP,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACrDmrB,GAAqD,QAArCH,EAAAhrB,EAAQC,IAAI,iCAAyB,IAAA+qB,OAAA,EAArCA,EAAuC/rB,QAAS,GACtE,GAAGub,MAAMC,QAAQ0Q,GACb,IAAK,MAAMC,KAAMD,EACRF,EAAW9P,SAASiQ,EAAc,YACnCH,EAAWrxB,KAAKwxB,EAAc,WAI1C,MAAMC,EAAwBrrB,EAAQC,IAAI,0BACpCqrB,EAA8B,GACpC,GAAI9Q,MAAMC,QAAQwQ,GACd,IAAK,MAAMM,KAAUN,EACjB,GAAII,GAAyB7Q,MAAMC,QAAQ4Q,EAAsBpsB,QAAUosB,EAAsBpsB,MAAc,OAAI,EAC/G,IAAI,MAAMusB,KAAUH,EAAsBpsB,OAClCusB,EAAOC,SAAWF,GAClBD,EAAkB1xB,KAAK2xB,GAM3C,IAaIG,EAbqB1pB,EAAAA,gBAAgB2pB,kBAC/BC,EAAAA,EAAAA,eACF,CACI/yB,cAAeoE,EAAMjF,QAAQ4P,cAC7B9O,oBAAqBC,EAAAA,yBAAyBC,qCAAqCiE,EAAMjF,QAAQ4P,gBAErG3K,EAAMjF,QAAQ4P,cAAc1J,eAAeghB,YAAY2M,UAAY5uB,EAAMjF,QAAQ4P,cAAc1J,eAAeghB,YAAY2M,WAAa,EACvIP,EACA,KACAruB,EAAMjF,QAAQ4P,cAAc1J,eAAeghB,YAAY4M,YAITzyB,KAAI0yB,IAAK,IAAAC,EAC3D,MAAMC,EAAgBnrB,EAAAA,EAAA,GAAuCirB,GAAE,IAAE7jB,SAAU,IACrEiS,EAA2B,QAAzB6R,EAAG/uB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAmjB,GAAgB,QAAhBA,EAAtBA,EAAwBvd,KAAKM,iBAAS,IAAAid,OAAA,EAAtCA,EAAwCxzB,MAAK4hB,GAAKA,EAAEpL,YAAcid,EAAiB3e,WAC9F,GAAGkN,MAAMC,QAAQ0Q,GACb,IAAK,MAAMC,KAAMD,EACTc,EAAiB3e,WAAa8d,EAAc,YAC5Ca,EAAiB/jB,SAAWkjB,EAAa,SACtCjR,GAAM8R,EAAiB/jB,UAAYiS,EAAGzW,WACrCuoB,EAAiB/jB,UAAYiS,EAAGzW,WAQhD,OAHGyW,GAAMA,EAAGzW,UAAYuoB,EAAiB/jB,UAAa+jB,EAAiB/jB,UAAYiS,EAAGzW,WAClFuoB,EAAiB/jB,SAAWiS,EAAGzW,UAE5BuoB,KAEX,MAAMC,EAAgBR,EAA6BryB,KAAIsnB,GAAQA,EAAKrT,WAC9D6e,EAAiBtS,GAAaxgB,KAAI+yB,GAAYA,EAAS9e,WAE7D,GA7K8B+e,EA6KCF,GA7KdG,EA6KDJ,GA5KPzyB,SAAW4yB,EAAE5yB,QAAU6yB,EAAEC,OAAM,CAACC,EAAG1d,IAAM0d,IAAMH,EAAEvd,MAgNtD,GAAG4c,EAA8B,CAC7B,IAAIe,GAAc,EAClB,IAAK,MAAMrQ,KAAMvC,GAAc,CAC3B,MAAMuR,EAAKM,EAA6BlzB,MAAK0lB,GAAKA,EAAE5Q,WAAa8O,EAAG9O,YAChE8d,MAAAA,OAAE,EAAFA,EAAIljB,YAAakU,EAAGlU,WACpBukB,GAAc,GAGtB,GAAGA,EAAa,CACZ,MAAMC,EAAkC,CACpCnzB,UAAW0D,EAAMjF,QAAQuG,QAAQ2gB,YAAY2M,UAC7Cc,UAAW1vB,EAAMjF,QAAQuG,QAAQ2gB,YAAY4M,WAE3Cc,EAAOlB,EAA6BryB,KAAI6kB,GAAKA,EAAE5Q,iBAC/Cuf,EAAAA,EAAAA,sBACF,CACIh0B,cAAeoE,EAAMjF,QAAQ4P,cAC7B9O,oBAAqB,IAEzB4zB,EACAE,EACA,IAAIrqB,KACJ,KACA,MACA,GACFtJ,MAAM6zB,IACAA,GAAwBA,EAAqBrzB,OAAS,IACtDiyB,EAA+BA,EAA6BryB,KAAI0yB,IAC5D,MAAMgB,EAAcD,EAAqBt0B,MAAK2S,GAASA,EAAM6D,YAAc+c,EAAGze,WAC7D,IAAA0f,EAAbD,IACAhB,EAAGxM,MAA2C,QAAtCyN,EAAGD,EAAYvN,+BAAuB,IAAAwN,EAAAA,EAAIjB,EAAGxM,MACrDwM,EAAG1M,UAAYvR,KAAKjJ,IAChBkoB,EAAY1N,WAAa,EACzB0N,EAAYE,qBAAuB,EACnCF,EAAYzN,eAAiB,IAGrC,OAAOyM,SAGhB/xB,OAAOC,QAEV6f,GAAgB4R,SA9EoB,CAC5C,MAAMgB,EAAkC,CACpCnzB,UAAW0D,EAAMjF,QAAQuG,QAAQ2gB,YAAY2M,UAC7Cc,UAAW1vB,EAAMjF,QAAQuG,QAAQ2gB,YAAY4M,WAE3Cc,EAAOlB,EAA6BryB,KAAI6kB,GAAKA,EAAE5Q,iBAC/Cuf,EAAAA,EAAAA,sBACF,CACIh0B,cAAeoE,EAAMjF,QAAQ4P,cAC7B9O,oBAAqB,IAEzB4zB,EACAE,EACA,IAAIrqB,KACJ,KACA,MACA,GACFtJ,MAAM6zB,IACAA,GAAwBA,EAAqBrzB,OAAS,IACtDiyB,EAA+BA,EAA6BryB,KAAI0yB,IAC5D,MAAMgB,EAAcD,EAAqBt0B,MAAK2S,GAASA,EAAM6D,YAAc+c,EAAGze,WAC7D,IAAA4f,EAAbH,IACAhB,EAAGxM,MAA2C,QAAtC2N,EAAGH,EAAYvN,+BAAuB,IAAA0N,EAAAA,EAAInB,EAAGxM,MACrDwM,EAAG1M,UAAYvR,KAAKjJ,IAChBkoB,EAAY1N,WAAa,EACzB0N,EAAYE,qBAAuB,EACnCF,EAAYzN,eAAiB,IAGrC,OAAOyM,SAGhB/xB,OAAOC,QAEV6f,GAAgB4R,GA/MJyB,IAACb,EAAaD,EA+P9BpvB,EAAMjF,QAAQ4P,cAAcmU,OAAO,IAAI5lB,EAAAA,2BAA8B,CAACS,eAAe,KAGnF2uB,GJ/RI,SACVtoB,EACAmC,EACA2S,EACAvR,EACAyG,EACAoG,EACAD,EACAnC,GAA8B,IAAAmiB,EAAAC,EAAAzS,EAAA0S,EAE9B,MAAM,GACF3zB,EAAE,SACF0R,EAAQ,QACRrT,EACA8G,QAAQ,kBAAEqO,EAAiB,kBAAED,GAC7BuF,OAAO,uBAAE1G,GACTzE,MACImH,MAAQ5F,OAAQ4F,GAChBlH,SAAWsB,OAAQtB,GACnBuN,0BAA4BjM,OAAQiM,GACpCT,mBAAqBxL,OAAQwL,GAC7BkZ,4BAA8B1kB,OAAQ0kB,KAE1CtwB,EAEEuwB,GAAwBD,MAAAA,OAA0B,EAA1BA,EAA4BtkB,mBAAoB,GAE1E1K,SACIsJ,KACI/I,QAAQ,yBAAE2uB,EAAwB,8BAAEC,MAG5CzwB,EAAMjF,QACJwsB,EAAgBiJ,EAChBA,EACKrnB,WACAqO,cACAD,OACL,kBACAmZ,EAAqBD,EACrBA,EACKtnB,WACAqO,cACAD,OACL,SAEAoZ,EAA2BvZ,MAAAA,OAAiB,EAAjBA,EAAmB7b,MAAK+b,IAAS,IAAA8P,EAAA,OAAI9P,MAAAA,GAAe,QAAN8P,EAAT9P,EAAW7b,YAAI,IAAA2rB,OAAA,EAAfA,EAAiB5P,iBAAkB+P,KACnGqJ,EAAqBD,IAA8D,QAAlCR,EAAAQ,EAAyBjZ,iBAAS,IAAAyY,OAAA,EAAlCA,EAAoC3Y,iBAAkBkZ,GACtGta,EAAStC,GAAc3U,EAAAA,UAAe,IACvC,SACF8L,EACA4L,YAAY,gBAAEnD,EAAe,cAAEC,EAAa,WAAEE,EAAU,UAAEiD,EAAS,kBAAElD,GAAmB,gBACxFmE,EAAe,oBACf/G,EAAmB,cACnB6f,EAAa,0BACb1f,EAAyB,iBACzB2f,GACA3uB,EAEEgJ,EAAsBhJ,EAAM0V,yBAC5B1V,EAAM0V,yBAAyBa,yBAC/Bb,GAA4BA,EAAyBrb,OACrDqb,EAAyB,GAAGa,8BAC5B9e,EAEAm3B,GAAqBnlB,IACvB,IAAIolB,EACAC,EACAC,EAAyC3f,EACzC3F,EACA4F,EACAjO,EACAxI,EACAuP,EACAa,OACAvR,GAYJ,GAV6B,eAAzBgS,EAAOM,cACP8kB,EAAiD,eAAzBplB,EAAOM,cDtLrC,SAA2B0E,EAA+BrN,GAC5D,OAAKqN,GAAaA,GAAa,EACpBrN,EAAU4tB,oBACI,IAAdvgB,EACArN,EAAU6tB,8BAEV7tB,EAAU8tB,6BAA6B5e,QAAQ,YAAa7B,EAAUzH,YCgLTmoB,CAAiB1lB,EAAOgF,UAAWrN,QAAa3J,EAEvF,qBAAzBgS,EAAOM,gBACPN,EAAOO,kBACgC,gBAAtCP,EAAOO,iBAAiBuF,WAAqE,mBAAtC9F,EAAOO,iBAAiBuF,YAEhFsf,EAAwBzf,EAAgB3F,EAAQ4F,EAAMjO,EAAWxI,EAASuP,EAASa,OAAqBvR,GACxGs3B,OAAqBt3B,GAEI,wBAAzBgS,EAAOM,cACP,QAAyBtS,IAArBk3B,GAAkCA,GAAoB5gB,GAAqBE,GAA2B,KAAAmhB,EACtG,MAAMC,EAAsBxxB,EAAMjF,QAAQ02B,iBAAiBC,eAAexhB,GAAqBE,EAAiD,QAAzBmhB,EAAEx2B,EAAQuG,QAAQ2Q,eAAO,IAAAsf,OAAA,EAAvBA,EAAyBI,UAClJV,EAA4B1tB,EAAUquB,6BAA6Bnf,QAAQ,cAAe+e,QACvF,GAAIV,GAAoB7gB,GAAqBE,GAA2B,KAAA0hB,EAC3E,MAAML,EAAsBxxB,EAAMjF,QAAQ02B,iBAAiBC,eAAezhB,GAAqBE,EAAiD,QAAzB0hB,EAAE92B,EAAQuG,QAAQ2Q,eAAO,IAAA4f,OAAA,EAAvBA,EAAyBF,UAClJV,EAA4B1tB,EAAUuuB,6BAA6Brf,QAAQ,cAAe+e,GAGlG1c,EAAUsD,iBAAiB,CACvBtB,UAAW,YACXnD,cAAeqd,EACftd,gBAC6B,qBAAzB9H,EAAOM,cACD2G,EAAmBjH,EAAO2E,kBAAmBhN,EAAW+G,MAAAA,OAAO,EAAPA,EAASynB,YACjE,GACVne,kBAAmBqd,EACnBpd,WAAYqd,KAIdplB,GAAgB,CAClB+M,aAActV,EAAUuS,mBACxBgD,qBAAsBvV,EAAUwS,2BAChCgD,kBAAmBxV,EAAUyS,qBAC7BgD,qBAAsBzV,EAAU0S,8BAChCgD,kBAAmB1V,EAAU2S,wBAC7B7H,cAAe9K,EAAUmS,UACzBpH,kBAAmB/K,EAAU+K,kBAC7BC,iBAAkBhL,EAAUgL,iBAC5BgB,2BAA4BhM,EAAUgM,2BACtCE,mBAAoBlM,EAAUkM,mBAC9BC,gBAAiBnM,EAAUmM,gBAC3BC,uBAAwBpM,EAAUoM,uBAClCE,kBAAmBtM,EAAUsM,kBAC7BqG,wBAAyB3S,EAAU2S,wBACnCJ,mBAAoBvS,EAAUuS,oBAE5BoD,GAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAGR3I,GAA2D,YAA/C/Q,EAAMqK,KAAKwN,yBAAyBhM,OAChDqF,GAAwC,cAAb9C,GAAmE,aAAb,QAA1BgiB,EAAApwB,EAAMqK,KAAKuM,uBAAe,IAAAwZ,OAAA,EAA1BA,EAA4BvkB,QACrFqF,IAA4B4D,EAAUkd,+BACtCld,EAAUkd,+BAA8B,GAExCjhB,IACA+D,EAAUmd,yBAAwB,GAEtCpzB,GAAmBwC,EAAAA,EAAAA,oBAAmBrB,EAAMjF,QAAQuG,QAAQC,kBAAoBvB,EAAMwB,aAAcxB,EAAM7C,WAG1G,MAAM2gB,GAA0E,QAArDH,EAAG3d,EAAMjF,QAAQ4P,cAAc1J,eAAegR,eAAO,IAAA0L,OAAA,EAAlDA,EAAoDI,sBAC5EnH,GAA4C,QAA7ByZ,EAAGrwB,EAAMqK,KAAKuM,uBAAe,IAAAyZ,OAAA,EAA1BA,EAA4BzkB,OAC9CsmB,GACFtb,IACAA,GAAgBI,iBAChBjS,EAAAA,gBAAgBC,YAAY4R,GAAgBI,kBAC5CJ,GAAgBI,gBAAgB,GAAGE,OAAS4G,GAChD,IAAIqU,GACJ,GAAI7nB,EAAS,CACT,MAAM8nB,EAAoD,CACtDC,cAAe9uB,EAAU8uB,cACzBviB,eAAgBvM,EAAU4tB,oBAC1BphB,gBAAiBxM,EAAUwM,gBAC3BhE,eAAe4N,EAAAA,EAAAA,IAAW,OAAQ5e,EAAQ4P,eAC1CM,SAAUA,EACVZ,KAAM,CAAEC,QAASA,EAAS4D,MAAO/L,EAAMuU,cACvC3I,uBAAwB/D,EACxBsoB,qBAAsB1B,EACtB9hB,uBAAwBA,GAA0BA,EAAuB,GACzE9C,iBAAkBukB,EAClBx1B,QAASA,EACT2B,GAAIA,EACJ0R,SAAUA,EACV+C,0BAA2BA,EAC3BG,QAASyf,GACT7f,yBAA0BA,GAC1B8gB,8BAA+Bld,EAAUkd,8BACzCxnB,mBAAoBuN,EACpB5M,oBAAqBA,EACrB4F,UAAWA,GACXC,oBAAqBA,EACrBihB,wBAAyBnd,EAAUmd,wBACnCnmB,cAAeA,GACf4C,aAAc1O,EAAMjF,QAAQuG,QAAQoN,aACpCD,cAAeyK,GACfra,iBAAkBA,EAClBoS,uBAAwB4f,EACxBrlB,eAAgBrJ,EAAMqJ,eACtBE,kBAAmBvJ,EAAM2uB,iBACzB9gB,sBAAuB7N,EAAM6N,sBAC7BC,kBAAmBjQ,EAAM6B,OAAOoO,kBAChCC,kBAAmBlQ,EAAM6B,OAAOqO,kBAChCE,yBAA0BA,EAC1BD,yBAA0BA,EAC1B7E,oCAAqC8I,EAAqCpU,GAC1E2L,6BAA8BumB,GAC9BlkB,mBAAoBA,GAExBmkB,GAAkBvlB,EAAUwlB,GAEhC,MAAO,CACHxY,eAAgB,CACZra,UAAW,oCAEfgpB,OAAQ4J,IAAmBA,GAAgBpjB,gBAC3C2Z,WACIvpB,EAAAA,cAACqU,EAAgB,CACbE,gBAAiBA,EACjBC,cAAeA,EACfE,WAAYA,EACZD,kBAAmBA,EACnBrQ,UAAWA,EACXkQ,UAAyB,cAAdqD,EACXhD,WAAYA,IAGpBsC,QAASA,EACT/G,cAAe8iB,IAAmBA,GAAgB9iB,eI2EpCkjB,CACdvyB,EACAmC,GACA2S,GACAvR,GACAyG,GArT6B,GACA,IAuT7BgE,KAGE,WAAE0a,GAAU,QAAEtS,IAAYkS,GAE1BkK,GAAkBA,KACpB/F,IAAwBD,KAQtBiG,GAAsBA,KAAK,IAAAC,EAC7BvG,IAAwB,GACxBF,GAAwD,QAAxCyG,EAAC1yB,EAAMjF,QAAQuG,QAAQqxB,KAAKC,oBAAY,IAAAF,EAAAA,EAAI,IAC5D/G,IAAgB,GAChBY,IAAwB,KAe5Bze,EAAAA,EAAAA,YAAU,KACN8f,OACF,CAAuB,QAAvBhE,EAAC5pB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAge,OAAA,EAAtBA,EAAwBpY,KAAKM,aACjChE,EAAAA,EAAAA,YAAU,KAAI,IAAA+kB,EACmB,QAA7BA,EAAG7yB,EAAMqK,KAAKyoB,uBAAe,IAAAD,GAAQ,QAARA,EAA1BA,EAA4BjnB,cAAM,IAAAinB,GAAlCA,EAAoCl5B,eACnCi0B,OAEL,CAAkC,QAAlC/D,EAAC7pB,EAAMqK,KAAKyoB,gBAAgBlnB,cAAM,IAAAie,OAAA,EAAjCA,EAAmClwB,iBACvCmU,EAAAA,EAAAA,YAAU,KACN,MAAM/K,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QAC3DA,EAAQgwB,OAAO,0BACfhwB,EAAQgwB,OAAO,oCACflW,GAAgB,IAChB+Q,OAED,IAEF,MA0FMoF,GACFtG,IACAA,GAActwB,KAAIub,GACPA,GAAOA,EAAIpc,MAAK2qB,GAAKA,EAAE+M,UAAYjzB,EAAMjF,QAAQ6P,IAAI/I,OAAOqxB,eAIrEC,GAjBY/P,MAAK,IAAAgQ,EACnB,IAAiC,QAA7BA,EAAApzB,EAAMqK,KAAKgpB,YAAYznB,cAAM,IAAAwnB,GAAgB,QAAhBA,EAA7BA,EAA+BE,qBAAc,IAAAF,OAAA,EAA7CA,EAA+C52B,QAAS,EAAG,KAAA+2B,EAAAC,EAC3D,MAAMC,EAA+E,QAAnDF,EAAGvzB,EAAMqK,KAAKgpB,YAAYznB,OAAQ0nB,cAAe,UAAE,IAAAC,OAAA,EAAhDA,EAAkDG,6BACjFC,EAAmE,QAAnDH,EAAGxzB,EAAMqK,KAAKgpB,YAAYznB,OAAQ0nB,cAAe,UAAE,IAAAE,OAAA,EAAhDA,EAAkDI,iBACrEC,EAAkBF,MAAAA,OAAgB,EAAhBA,EAAkBp4B,MAAKu4B,GAAQA,EAAKzjB,WAAaojB,IACzE,OAAOI,MAAAA,OAAe,EAAfA,EAAiBE,sBAYP3Q,KAAgBpjB,EAAMjF,QAAQ6P,IAAI/I,OAAOmyB,oBAAuBp6B,EA+GnFq6B,GAAmB16B,MAAOyG,EAAuEk0B,KACnG,MAAMC,EAAOD,GAASl0B,EAAMjF,QAAQuG,QAAQqxB,KAAKC,cAAgB,GAEjE,GADA/G,IAAmB,GA1PAqI,CAAAA,GACL,0JACDE,KAAKC,OAAOH,GAAO1c,eAyP3B8c,CAAcH,GAEZ,KAAAI,EAAAC,EACH7I,IAAgB,GAEhB,MAAM8I,EAAuB,QAAjBF,EAAGjqB,EAAQsB,cAAM,IAAA2oB,OAAA,EAAdA,EAAgBhnB,OACzBmnB,EAAsB,QAAjBF,EAAGlqB,EAAQsB,cAAM,IAAA4oB,OAAA,EAAdA,EAAgBnkB,SAE9B,IAAKokB,IAAWC,EAAO,OACvB,IAAI,IAAAC,EAAAC,EAAAC,QD7nBV,SACF95B,EACAugB,EACAC,EACAC,EACAC,EACAxQ,EACAyQ,EACAC,GAEA,MAAMra,EAAU+Z,EACZC,EACAC,EACAC,EACAC,EACAxQ,EACAyQ,EACAC,GAEJ,OAAOmZ,EAAAA,EAAAA,qBAA4DxzB,EAASvG,EAAQa,eC2mBlEm5B,CACF,CAAEn5B,cAAeoE,EAAMjF,QAAQ4P,eACiB,QADFgqB,EAC9C30B,EAAMjF,QAAQuG,QAAQqxB,KAAKqC,6BAAqB,IAAAL,EAAAA,EAAI,GACpDR,EACAM,EACkD,QAD5CG,EACW,QADXC,EACN70B,EAAMjF,QAAQ6P,WAAG,IAAAiqB,GAAQ,QAARA,EAAjBA,EAAmBhzB,cAAM,IAAAgzB,OAAA,EAAzBA,EAA2BI,+BAAuB,IAAAL,EAAAA,EAAI,MACtD,KACA,EACAF,GAEN,MAAO9rB,GACLssB,QAAQC,IAAIvsB,GACd,QACE2jB,IAAwB,SAtB5BZ,IAAgB,IAsDlByJ,GAAqBA,KAAc,IAAAC,EAErC,IAAIrV,GAA8D,QAArCqV,EADbr1B,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACtBC,IAAI,iCAAyB,IAAAqyB,OAAA,EAArCA,EAAuCrzB,QAAS,GAC7E,QAAGub,MAAMC,QAAQwC,KACLA,EAAuBxjB,QAKjC84B,GAA2BA,KAC7BpK,IAA6B,KAQjCpd,EAAAA,EAAAA,YAAU,KAAK,IAAAynB,EAAAC,EACPv2B,IAAcA,GAAWzC,OAAS,GAAK2a,IACvCsP,GAAoBtP,GAAewP,GAAoB1nB,GAAY4nB,GAAeC,GAAoBC,IAAoBhqB,OACtH04B,UAKFnK,IAAsBjC,IAAeA,GAAYha,eAAmBiZ,IAAaA,GAAUjZ,gBAC7Fkc,IAAsB,GAG1B,MAAMmK,EACF11B,EAAMqK,KAAKwN,yBAAyBjM,QACpC5L,EAAMqK,KAAKwN,yBAAyBjM,OAAOrQ,MAAK0C,IACD,IAApCA,EAAa03B,qBAEtBC,EAAuD,QAA7CL,EAAGv1B,EAAMqK,KAAKwN,yBAAyBjM,cAAM,IAAA2pB,OAAA,EAA1CA,EAA4Ch6B,MAAKs6B,IAAI,IAAAC,EAAA,OAAID,EAAKnd,yBAAyB3G,aAA4B,QAAnB+jB,EAAKxrB,EAAQsB,cAAM,IAAAkqB,OAAA,EAAdA,EAAgBzlB,WAAYwlB,EAAKnd,yBAAyBtN,qBAC5KsS,GAAcqY,EAAAA,EAAAA,IAChB/1B,EAAMjF,QAAQ6P,IAAI/I,OAAOwQ,2BACzBrS,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,mBAAoB,EAC7CqqB,MAAAA,GAAAA,EAAYld,yBAAyBtN,kBAAoBwqB,EAAWld,yBAAyBtN,kBAAoB,EACjH4qB,MACA1rB,MAAAA,GAAe,QAARkrB,EAAPlrB,EAASsB,cAAM,IAAA4pB,GAAU,QAAVA,EAAfA,EAAiBS,gBAAQ,IAAAT,OAAA,EAAzBA,EAA2BU,kBAAmB,GA5BNN,CAAAA,IAC5B51B,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACnDqC,IAAI,mCAAoCwwB,IA4BhDO,CAAuCzY,GAA4B,GACrD+N,KAAdiK,GAAoCA,EAAYC,sBACjD,CAACrK,GAAoBjC,MAExBvb,EAAAA,EAAAA,YAAU,KAAK,IAAAsoB,EACX,MAAMC,EAActzB,EAAQC,IAAsB,iBAAiBhB,MAE7Ds0B,EAAmBD,MAAAA,OAAW,EAAXA,EAAa96B,MAAKg7B,GAAUA,EAAOj0B,OAASpB,EAAAA,aAAasB,YAC9E8zB,MAAAA,GAAAA,EAAkBt0B,OA9EPw0B,MAEf,IAAIC,EAA0C,GAC9C,MAAMC,EAAe,CAAEC,OAFoB,QAK3C,IAAIC,EADqC7zB,EAAQC,IAAI,mBACDhB,MAE7B,IAAA60B,EAAAC,EAUhBC,EACsCC,EAXzCJ,GACIA,EAAkB1Y,SAAkC,QAA1B2Y,EAAC72B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAirB,OAAA,EAAzBA,EAA2BxmB,YAEtDumB,EAAoBA,EAAkBpmB,QAAO0V,IAAC,IAAA+Q,EAAA,OAAI/Q,KAA+B,QAA9B+Q,EAAKj3B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAqrB,OAAA,EAAzBA,EAA2B5mB,cAGnFumB,EAAkBp6B,QAAU,KAC5Bo6B,EAAoBA,EAAkBM,MAAM,EAAGN,EAAkBp6B,OAAS,IAE9Ei6B,EAAoB,CAA0B,QAA1BK,EAAC92B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAkrB,OAAA,EAAzBA,EAA2BzmB,YAAaumB,IAEhC,QAA7BG,EAAI/2B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAmrB,GAAzBA,EAA2B1mB,WAC3BomB,EAAoB,CAA0B,QAA1BO,EAACh3B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAorB,OAAA,EAAzBA,EAA2B3mB,WAIxDtN,EAAQqC,IAAI,kBAAmBqxB,EAAmBC,IAuD9CF,GAvSiBj9B,WACrB,IAAI,IAAA49B,EACA,MAAMC,EAAoB,CACtB,CACIC,cAAer3B,EAAMjF,QAAQ6P,IAAI/I,OAAOw1B,cACxCrD,cAAeh0B,EAAMjF,QAAQ6P,IAAI/I,OAAOmyB,cACxCsD,qBAAsBt3B,EAAMjF,QAAQ6P,IAAI/I,OAAOy1B,qBAC/CC,gBAAiB,GACjBC,WAAY,GACZxc,oBAAqB,KAIvByc,EAAqB,GAC3BA,EAAc96B,KAAmB,QAAfw6B,EAAC7sB,EAAQsB,cAAM,IAAAurB,OAAA,EAAdA,EAAgB9mB,UACnC,MAAMof,EAAkC,CACpCnzB,UAAW0D,EAAMjF,QAAQuG,QAAQ2gB,YAAY2M,UAC7Cc,UAAW1vB,EAAMjF,QAAQuG,QAAQ2gB,YAAY4M,WAE3Crd,QAAakmB,EAAAA,EAAAA,qBAAoB13B,EAAMjF,QAAQ4P,eAErDiiB,GAAwBpb,SAElBoe,EAAAA,EAAAA,sBACF,CAAEh0B,cAAeoE,EAAMjF,QAAQ4P,cAAe9O,oBAAqB,IACnE4zB,EACAgI,EACA,IAAInyB,KACJ,KACA8xB,GACA,GAECp7B,MAAM6zB,IAEH,MAAM5M,EAAe4M,EAAqBzzB,KAAIu7B,GAAaA,EAAUC,gBAC/DC,EAAuBhI,EAAqBzzB,KAAIu7B,GAAaA,EAAUpV,0BAEzEU,IACA+J,GAAgB6K,GAChBlL,GAAiB1J,GACjB6J,IAAiB,OAGxB/vB,OAAOC,IAOJ,MANA8vB,IAAiB,GACjB9sB,EAAMjF,QAAQ4P,cAAc1N,MAAMD,EAAME,SACxC8C,EAAMjF,QAAQ4P,cAAcxN,UAAUC,UAAUJ,GAChDgD,EAAMjF,QAAQ4P,cAAcxN,UAAUE,MAClC,mFAEE,IAAIP,MAAM,qFAE1B,MAAO24B,GACLP,QAAQC,IAAIM,EAAK,WAqPrBqC,GArTI,+EAA+E1D,KAAK2D,UAAUC,WAC1FD,UAAUC,UAAUC,MAAM,YAC1BnM,GAAY,WACLiM,UAAUC,UAAUC,MAAM,sBACjCnM,GAAY,OAGhBA,GAAY,OAiTO,QAAvBsK,EAAAjL,GAAgBpiB,eAAO,IAAAqtB,GAAvBA,EAAyB8B,iBAAiB,eAAetvB,IACrDA,EAAEuvB,sBAEP,IAEH,MAAM3J,GAASlkB,MAAAA,GAAe,QAARwf,EAAPxf,EAASsB,cAAM,IAAAke,OAAA,EAAfA,EAAiBvc,OAE1ByoB,GAAoCA,KAAc,IAAA1hB,EACpD,MAAMC,EAAuD,QAAhBD,EAAGtU,EAAMjF,eAAO,IAAAuZ,GAAS,QAATA,EAAbA,EAAehT,eAAO,IAAAgT,GAAK,QAALA,EAAtBA,EAAwB1J,WAAG,IAAA0J,GAAU,QAAVA,EAA3BA,EAA6BE,gBAAQ,IAAAF,OAAA,EAArCA,EAAuCG,iCACvF,GAAgD,SAA5CF,EACA,OAAO,EAGX,IAAI,IAAA6jB,EACA,MAAMC,EAAkBr4B,EAAMqK,KAAKhP,aAAauQ,OAKhD,MAHIysB,MAAAA,GAEC,QAFcD,EAAfC,EAAiB98B,MACbF,GAAsC,oEAAtBA,EAAaI,cAChC,IAAA28B,OAAA,EAFDA,EAEG18B,aAAa,GAEhB,OAAO,EAEb,MAAOsB,GAGL,OAFAgD,EAAM7C,UAAU8mB,QAAQjnB,GACxBgD,EAAM7C,UAAUE,MAAM,iCACf,EAGX,GAAgD,QAA5CkX,EACA,OAAO,EAEX,IACI,MAAMG,EAAe1U,EAAMqK,KAAKsK,oBAAoB/I,OACpD,QACM8I,IAC4C,QAA5CH,GAAqDG,EAAaE,OACnB,QAA5CL,IAAsDG,EAAaE,OAE9E,MAAO5X,GAGL,OAFAgD,EAAM7C,UAAU8mB,QAAQjnB,GACxBgD,EAAM7C,UAAUE,MAAM,gCACf,IAKTi7B,GAAiB32B,IACnB,MAAMuyB,EAAQvyB,EAAMI,OAAOC,MAC3BiqB,GAAiBiI,IAcfqE,GAAmB52B,IACrBwqB,GAAwBxqB,EAAMI,OAAO2C,UAInC8zB,GAAuBA,KAAkC,IAAAC,EACvDlW,EAIJ,OAHIwK,KACAxK,EAA0BwK,IAAgBA,GAAa,IAAMA,GAAa,IAEhD,QAA9B0L,EAAOlW,SAAuB,IAAAkW,OAAA,EAAvBA,EAAyBC,QAAQ,IAEtCC,GAAiB34B,EAAMwV,MAAMojB,qBAAuB54B,EAAMwV,MAAMojB,oBAAoB,IAAM51B,GAAAA,CAAIhD,EAAMwV,MAAMojB,oBAAoB,GAAI,4CAA8C,GAChLC,MAAoBF,KAAkBA,GAAen8B,QACrDs8B,GAAsB94B,EAAMwV,MAAMujB,0BAA4B/4B,EAAMwV,MAAMujB,yBAAyB,IAAM/1B,GAAAA,CAAIhD,EAAMwV,MAAMujB,yBAAyB,GAAI,4CAA8C,GACpMC,MAAyBF,KAAuBA,GAAoBt8B,QAoC1D,IAAZ0f,IACAA,IAnCmB3iB,WAAW,IAAA0/B,EAU9B,MAAMvc,EAA6C,QAApCuc,EAAWj5B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAqtB,OAAA,EAAzBA,EAA2B5oB,SAC/CuG,QAAwBiH,EAAAA,EAAAA,yBAAwB,CAAEjiB,cAAeoE,EAAMjF,QAAQ4P,cAAe9O,oBAAqB,IAAM,CAC3H6gB,IAGEwc,QAAyCC,EAAAA,EAAAA,+BAC3C,CAAEv9B,cAAeoE,EAAMjF,QAAQ4P,eAC/B,CAAEyuB,WAAY,CAAC1c,GAAY2c,sBAAsB,EAAOC,iCAAiC,IAGzFJ,GAAoCA,EAAiCK,0CACrEL,EAAiCK,yCAAyCn9B,KAAID,IACkB,IAAAq9B,EAAxFr9B,EAAO4V,YAAc2K,GAA4D,QAA/CvgB,EAAOs9B,sCAEU,QADnDD,EAAA5iB,EACKrb,MAAK0b,GAAUA,EAAOlF,YAAc2K,WAAU,IAAA8c,GAC9B,QAD8BA,EADnDA,EAEMxiB,uBAAe,IAAAwiB,GAFrBA,EAEuBp9B,KAAI6a,IACC,aAAhBA,EAAOC,MACPmV,IAAyB,WASjDqN,IAsMJ,OACIv6B,IAAAA,cAAAA,IAAAA,SAAA,KACAA,IAAAA,cAACw6B,EAAAA,OAAMv6B,OAAAC,OAAA,GAAKirB,GACRnrB,IAAAA,cAAA,OAAK+E,IAAKinB,GAAiB5rB,UAAU,4BAChCS,EAAM45B,cAEXz6B,IAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKkrB,GACNprB,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,2BAA2BomB,IAAI,MAjqB/BkU,MAAa,IAAAC,EAEjCC,EAAY9xB,MAAAA,GAAY,QAAP6xB,EAAL7xB,EAAOjI,aAAK,IAAA85B,OAAA,EAAZA,EAAcv1B,KAC9B,MAAMy1B,EAAW7iB,IAAiBA,GAAc5b,MAAK0+B,GAAgB,aAAXA,EAAEx+B,OAGrD,IAAAy+B,EAFHF,GAAmC,KAAvBA,EAAStiB,WAA2C,OAAvBsiB,EAAStiB,UAClDqiB,EAAYC,MAAAA,OAAQ,EAARA,EAAUtiB,UAGtBqiB,EAAY9xB,MAAAA,GAAY,QAAPiyB,EAALjyB,EAAOjI,aAAK,IAAAk6B,OAAA,EAAZA,EAAc31B,KAE9B,OAAOw1B,GAwpBMF,IAGL16B,IAAAA,cAAA,OAAKI,UAAU,+BACVS,EAAMkO,MAEN8kB,IAAsBA,GAAmB,SAA2Bp5B,IAArBu5B,IAC5Ch0B,IAAAA,cAAA,OAAKI,UAAU,qBACXJ,IAAAA,cAAA,OACII,UACIitB,GACM,sDACA,oCAGTA,IACGrtB,IAAAA,cAAA,OAAKI,UAAU,wCACXJ,IAAAA,cAAA,OAAKK,QAASA,IAAMgzB,KAAmBjzB,UAAU,qCACjDJ,IAAAA,cAAA,KAAGI,UAAU,8BAA4B,wEACiC,IACtEJ,IAAAA,cAAA,YACK,IACDA,IAAAA,cAAA,KAAG6rB,KAAMhrB,EAAM6B,OAAOs4B,kBAAoBn6B,EAAM6B,OAAOs4B,kBAAoB,IAAE,oBAO7Fh7B,IAAAA,cAAA,OAAKI,UAAU,8BACXJ,IAAAA,cAAA,KAAGI,UAAU,qBAAmB,mBACZJ,IAAAA,cAAA,QAAMI,UAAU,oCAAkC,IAAGi5B,OAGzEr5B,IAAAA,cAAA,OAAKI,UAAU,mCACXJ,IAAAA,cAAA,KAAGK,QAASA,IAAMgzB,MAAiB,SAMtDQ,IAAsBA,GAAmB,IAAMG,IAC5Ch0B,IAAAA,cAAA,OAAKI,UAAU,qBACXJ,IAAAA,cAAA,OAAKI,UAAU,kEACXJ,IAAAA,cAAA,KAAGI,UAAU,qBAAmB,mBACZJ,IAAAA,cAAA,QAAMI,UAAU,oCAAkC,IAAGi5B,UAOzFr5B,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,MAAMpmB,UAAU,iBACrBirB,EACA9C,GAAmBC,GAAcpkB,IACjCklB,GAAiBD,GAAqBC,IAE1CG,GAAaD,GAAiBC,GAC9B4F,IACGrvB,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,mBACXmrB,EACA8D,IAnMa4L,MAAK,IAAAhK,EAAAiK,EAAAC,EAAAC,EAGnC,MAAMC,EAA6Cx6B,EAAM6B,OAAO24B,uBAQhE,GAAIA,EAAwB,KAAAC,EAAAC,EACxB,MAAMC,EAAyC,QAA3BF,EAAGrjB,EAAkBxL,cAAM,IAAA6uB,OAAA,EAAxBA,EAA0Bl/B,MAAKq/B,IAAI,IAAAC,EAAA,OAAa,QAATA,EAAAD,EAAKn/B,YAAI,IAAAo/B,OAAA,EAATA,EAAWrjB,kBAAkBgjB,MAAAA,OAAsB,EAAtBA,EAAwBhjB,kBACnH,GAAImjB,GAA8D,SAApB,QAAxBD,EAAAC,EAAejjB,iBAAS,IAAAgjB,OAAA,EAAxBA,EAA0BljB,eAC5C,OAAOrY,IAAAA,cAAAA,IAAAA,SAAA,MAKf,MAAMyX,EAA4C,QAA7BwZ,EAAGpwB,EAAMqK,KAAKuM,uBAAe,IAAAwZ,GAAQ,QAARA,EAA1BA,EAA4BxkB,cAAM,IAAAwkB,OAAA,EAAlCA,EAAoCpZ,gBAEtD8jB,EAAQlkB,MAAAA,OAAe,EAAfA,EAAiBmkB,MAAKC,GAAoB,aAAbA,EAAI9jB,OACzC+jB,EAC+G,SAAzF,QAAxBZ,EAAAjjB,EAAkBxL,cAAM,IAAAyuB,GAA0D,QAA1DA,EAAxBA,EAA0B9+B,MAAKq/B,IAAI,IAAAM,EAAA,MAAiC,iBAApB,QAATA,EAAAN,EAAKn/B,YAAI,IAAAy/B,OAAA,EAATA,EAAW1jB,yBAAgC,IAAA6iB,GAAW,QAAXA,EAAlFA,EAAoF3iB,iBAAS,IAAA2iB,OAAA,EAA7FA,EAA+F7iB,eAE7F2jB,EACqH,SAA/F,QAAxBb,EAAAljB,EAAkBxL,cAAM,IAAA0uB,GAAgE,QAAhEA,EAAxBA,EAA0B/+B,MAAKq/B,IAAI,IAAAQ,EAAA,MAAuC,iBAA1B,QAATA,EAAAR,EAAKn/B,YAAI,IAAA2/B,OAAA,EAATA,EAAWC,+BAAsC,IAAAf,GAAW,QAAXA,EAAxFA,EAA0F5iB,iBAAS,IAAA4iB,OAAA,EAAnGA,EAAqG9iB,eAGnG8jB,EADqH,SAA/F,QAAxBf,EAAAnjB,EAAkBxL,cAAM,IAAA2uB,GAAgE,QAAhEA,EAAxBA,EAA0Bh/B,MAAKq/B,IAAI,IAAAW,EAAA,MAAuC,iBAA1B,QAATA,EAAAX,EAAKn/B,YAAI,IAAA8/B,OAAA,EAATA,EAAWF,+BAAsC,IAAAd,GAAW,QAAXA,EAAxFA,EAA0F7iB,iBAAS,IAAA6iB,OAAA,EAAnGA,EAAqG/iB,iBAChEgU,GACzC,KAAMA,KAAsBlD,IAAc6S,IAAUL,EAAO,KAAAU,EACvD,MAAMz4B,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACrDkb,EAAclb,EAAQC,IAAI,gBAAgBhB,OAAS,GACwB,IAAAy5B,EAAjF,GAAIle,MAAMC,QAAQS,KAAiBA,EAAYC,SAAuB,QAAfsd,EAAClxB,EAAQsB,cAAM,IAAA4vB,OAAA,EAAdA,EAAgBjuB,QACpE0Q,EAAYthB,KAAmB,QAAf8+B,EAACnxB,EAAQsB,cAAM,IAAA6vB,OAAA,EAAdA,EAAgBluB,QAErCxK,EAAQqC,IAAI,eAAgB6Y,GAGhC,OACI9e,IAAAA,cAAA,OAAKI,UAAU,yBACXJ,IAAAA,cAAA,KAAGI,UAAU,uBAAuB+7B,EAAmB,wCAA0CH,EAAQ,uCAAyC,cAClJh8B,IAAAA,cAAA,OAAKI,UAAU,yBACb+7B,GAAoBjS,IAAeD,GAAmBC,IACvD8R,IACIG,GACGn8B,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,MAAMpmB,UAAW0E,GAAAA,CAAW,kBAAmBonB,IAAmB,kBAAmB,qBAC1FpgB,IAAYgd,GAAgBhd,GAAU6J,GAAW9U,EAAOmC,GAAOoB,IAChEpE,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,MAAMpmB,UAAU,qBACrB+oB,KAAc6S,GAAS9S,GAAiBC,IACxCwS,EACG1O,GACI/C,MAAAA,QAAW,EAAXA,GAAa7O,gBAEbrb,IAAAA,cAAA,UACII,UAAU,uCACVmI,UAAU,EAAI,aACF1H,EAAMuD,UAAUsS,qBAE5B1W,IAAAA,cAAA,OAAKI,UAAU,sCAAsC6E,MAAM,aACvDjF,IAAAA,cAAA,OAAKI,UAAW,wBAChBJ,IAAAA,cAAA,OAAKI,UAAU,4BAA4BS,EAAMuD,UAAUsS,uBAKvE,MAUlBylB,GAAoBH,GAASL,EAC3B1O,GACIjtB,IAAAA,cAAComB,EAAAA,KAAI,CAACI,IAAI,MAAMpmB,UAAU,sBACrBu7B,IAASzR,MAAAA,QAAW,EAAXA,GAAa7O,kBAG3Brb,IAAAA,cAAA,UACII,UAAU,gDACVmI,UAAU,EAAI,aACF1H,EAAMuD,UAAUsS,qBAE5B1W,IAAAA,cAAA,OAAKI,UAAU,sCAAsC6E,MAAM,aACvDjF,IAAAA,cAAA,OAAKI,UAAW,wBAChBJ,IAAAA,cAAA,OAAKI,UAAU,4BAA4BS,EAAMuD,UAAUsS,uBAKvE,GAEJ1W,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,gBACV+7B,IAAoBjS,MAAAA,QAAW,EAAXA,GAAa9O,YACjC4gB,EAeIL,GACI37B,IAAAA,cAAA,OAAKI,UAAU,mCACXJ,IAAAA,cAAA,OAAKI,UAAU,8BAA8B,iDAhBpDisB,IACDyP,GACI97B,IAAAA,cAAA,UACII,UAAW,qBAAoB+7B,EAAmB,oBAAsB,IACxE97B,QAASizB,GACTruB,MAAM,YAAW,aACN,+BAEXjF,IAAAA,cAAA,OAAKI,UAAU,gDACXJ,IAAAA,cAAA,OAAKI,UAAU,sBAAsB,iCAY3DJ,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAW6W,GAAU,kDAAoD,IAAKsS,MAgFnF0R,GAGA9N,IACGntB,IAAAA,cAAC6P,EAAAA,EAAY,CACTrJ,OAAQ2mB,GACRxmB,WA1sBZ3G,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,eAAeomB,IAAI,OAC/BxmB,IAAAA,cAAComB,EAAAA,KAAI,CAAC9kB,KAAK,SAASjB,QAASA,IAAM+sB,IAAwB,GAAQhtB,UAAU,2BAE7EJ,IAAAA,cAAC2B,EAAAA,GAAa,CAACvB,UAAW,iBAAkBgF,KAAM,iCAwsB1C2B,iBAhmBZ/G,IAAAA,cAAA,OAAKI,UAAU,+BACXJ,IAAAA,cAAA,WACKa,EAAMjF,QAAQuG,QAAQqxB,KAAK+I,gBACxBv8B,IAAAA,cAAAA,IAAAA,SAAA,KACIA,IAAAA,cAAA,gGACAA,IAAAA,cAAA,KAAGI,UAAU,0BACTJ,IAAAA,cAAA,4BACCa,EAAMjF,QAAQuG,QAAQqxB,KAAKC,cAEhCzzB,IAAAA,cAAA,mDAGJA,IAAAA,cAAA,iGAYRA,IAAAA,cAAA,OAAKI,UAAU,uBACXJ,IAAAA,cAAA,SACIG,KAAK,QACLwF,SAAU8D,GAAK0vB,GAAc1vB,GAAE,aACpB,gBACXrJ,UAAU,2BACVo8B,YAAa37B,EAAMuD,UAAUq4B,4BAC7B55B,MAAOgqB,GACP6P,UAAQ,MAgBdnQ,IAAgBvsB,IAAAA,cAAA,OAAKI,UAAU,sBAAoB,4BAErDJ,IAAAA,cAAA,WACIA,IAAAA,cAAA,OAAKI,UAAU,2BACXJ,IAAAA,cAAA,OAAKI,UAAU,mCACXJ,IAAAA,cAAA,SACIG,KAAK,WACLC,UAAU,sBAAqB,aACpB,wBAAuB,eACrB,QACbuF,SAAU8D,GAAK2vB,GAAgB3vB,GAC/BlM,GAAG,0BAEPyC,IAAAA,cAAA,QAAMI,UAAU,gCACZJ,IAAAA,cAAA,wBACiB,IACbA,IAAAA,cAAA,KACII,UAAW,yBACXyrB,KAAMlqB,EAAAA,GAAoB,gBAAiBd,EAAMjF,QAAQ4P,gBAAkB,GAC3E5I,OAAO,UAAQ,uBAUvC5C,IAAAA,cAAA,OAAKI,UAAU,2BACXJ,IAAAA,cAAA,UACIuI,UAAWwkB,GACX5sB,KAAK,SACLE,QAASA,IAAMy0B,GAAiBj0B,EAAOgsB,IACvCzsB,UAAU,iBAEVJ,IAAAA,cAAA,wBAKJA,IAAAA,cAAA,UAAQG,KAAK,SAASE,QAASA,IAAM+sB,IAAwB,GAAQhtB,UAAU,+BAA6B,YAwgBxG4G,YAtmBThH,IAAAA,cAAAA,IAAAA,SAAA,MAumBSI,UAAU,wDAGjBwsB,IAA0BH,IACvBzsB,IAAAA,cAAA,OAAKI,UAAU,wBACXJ,IAAAA,cAAA,OAAKI,UAAU,oBACXJ,IAAAA,cAAA,KAAGI,UAAU,cACZqrB,IAELzrB,IAAAA,cAAA,SAAIwrB,KAIXW,IAAsB9D,GAA+BjkB,GAAWwI,KAE5C,IAApB/B,IAA4B+d,GAAiB8C,IAC7C9C,GAAiB/nB,EAAMwV,MAAMwS,YAC9B7oB,IAAAA,cAAC2B,EAAAA,GAA0B,CACvByD,KAAMvE,EAAMqK,MAAQrK,EAAMqK,KAAKC,SAAWtK,EAAMqK,KAAKC,QAAQsB,QAAU5L,EAAMqK,KAAKC,QAAQsB,OAAOyO,YACjG9a,UAAU,qCAGZ0tB,IACE9tB,IAAAA,cAAAA,IAAAA,SAAA,KACKF,IAAcE,IAAAA,cAAC28B,EAAAA,GAAc,CAACC,MAAO98B,KACtCE,IAAAA,cAAA,WACAA,IAAAA,cAAA,YACC,EAGA4pB,GAAmB/oB,EAAMwV,OAASxV,EAAMwV,MAAMwT,aAC9CyB,GAAmBnB,GAAuBmB,MAIrDwC,IAAevI,GAAcpa,MAAAA,OAAO,EAAPA,EAASsB,OAAQuL,GAAewN,GAASC,GAAUC,MAAAA,OAAc,EAAdA,EAAgBjZ,OAAQ8K,MAAAA,OAAY,EAAZA,EAAc9K,UAE1H0hB,IAAwBuL,IAAqB15B,IAAAA,cAAA,OAAKI,UAAU,0BAC9DJ,IAAAA,cAAA,OAAKI,UAAU,kBACXJ,IAAAA,cAAA,MAAII,UAAU,2BAAyB,wBACvCJ,IAAAA,cAAA,OAAKI,UAAU,4BACXJ,IAAAA,cAAA,OAAKI,UAAU,uBACVS,EAAMwV,MAAMojB,qBAAuB54B,EAAMwV,MAAMojB,oBAAoB,IAEvE54B,EAAMwV,MAAMojB,qBACTz5B,IAAAA,cAAA,OAAKI,UAAU,yBACXJ,IAAAA,cAAA,OAAKI,UAAW,kBAAkB61B,KAAwB,QAAU,KAChEj2B,IAAAA,cAAA,UAAKa,EAAM6B,OAAOm6B,+BAAiCh8B,EAAM6B,OAAOm6B,+BAAiC,iBAEhGxc,GAAuC,QAAtBuK,EAAA/pB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAme,GAAtBA,EAAwBvY,KAAKM,UAAkC,QAAzBkY,EAAGhqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAoe,OAAA,EAAtBA,EAAwBxY,KAAKM,UAAW,GAAI9R,EAAO4c,GAAcC,GAAiB6C,GAAyBC,GAA4BC,GAA8BC,IAAiC,GAC7P1gB,IAAAA,cAAC+hB,EAAAA,OAAM,CAAC3hB,UAAU,kBAAkBmI,SAAW0tB,MAjjC5C6G,MAAc,IAAAC,EACzC,MACMlc,GAA8D,QAArCkc,EADfl8B,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACpBC,IAAI,iCAAyB,IAAAk5B,OAAA,EAArCA,EAAuCl6B,QAAS,GACzEm6B,EAAc,IAAI5e,MACgBX,GAAapM,QAAO2O,IACxD,GAAI5B,MAAMC,QAAQwC,GAAyB,CAEvC,QADWA,EAAuBzkB,MAAK6gC,GAAUA,EAAkB,YAAMjd,EAAG9O,WAGhF,OAAO,KAEIjU,KAAI6kB,IACf,IAAIhW,EAAW,EACf,GAAIsS,MAAMC,QAAQwC,GAAyB,KAAAqc,EACvC,MAAMlO,EAAKnO,EAAuBzkB,MAAK6gC,GAAUA,EAAkB,YAAMnb,EAAE5Q,WAC3EpF,EAAWkjB,EAAa,SACxB,MAAMmO,EAAmC,QAAzBD,EAAGr8B,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAywB,GAAgB,QAAhBA,EAAtBA,EAAwB7qB,KAAKM,iBAAS,IAAAuqB,OAAA,EAAtCA,EAAwC9gC,MAAK2hB,GAAMA,EAAGnL,YAAcoc,EAAc,YAClGmO,GAAcA,EAAW71B,UACpBwE,EAAWqxB,EAAW71B,SAAY0nB,EAAgB,cAClDljB,GAAY,GAIxBkxB,EAAYx/B,KAAK,CACb2N,QAAS2W,EACTjW,MAAOC,EACPM,iBAAkBvL,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,sBAGnD,IAAI,MAAMujB,KAAMqN,EACZ,IAAkB,IAAdrN,EAAG9jB,MACH,OAAO,EAGf,OAAO,GA+gCwFixB,GAA2Bh0B,MAAM,UAAUzI,QAASA,KA7gCzHjG,WAAyB,IAAAgjC,EAAAC,EACnD,MAAMz5B,EAAU/C,EAAMjF,QAAQ4P,cAAc1J,eAAe8B,QACrDid,GAA8D,QAArCuc,EAAAx5B,EAAQC,IAAI,iCAAyB,IAAAu5B,OAAA,EAArCA,EAAuCv6B,QAAS,GACzEm6B,EAAc,IAAI5e,MAClBkf,QAAkBtgB,EAAcnc,EAAO,WAAY,WAAY,EAAG,GAChC4c,GAAapM,QAAO2O,KACpD5B,MAAMC,QAAQwC,MACHA,EAAuBzkB,MAAK6gC,GAAUA,EAAkB,YAAMjd,EAAG9O,aAKrEjU,KAAI6kB,IACf,IAAIhW,EAAW,EACf,GAAIsS,MAAMC,QAAQwC,GAAyB,KAAA0c,EACvC,MAAMvO,EAAKnO,EAAuBzkB,MAAK6gC,GAAUA,EAAkB,YAAMnb,EAAE5Q,WAC3EpF,EAAWkjB,EAAa,SACxB,MAAMmO,EAAmC,QAAzBI,EAAG18B,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAA8wB,GAAgB,QAAhBA,EAAtBA,EAAwBlrB,KAAKM,iBAAS,IAAA4qB,OAAA,EAAtCA,EAAwCnhC,MAAK2hB,GAAMA,EAAGnL,YAAcoc,EAAc,YAClGmO,GAAcA,EAAW71B,UACpBwE,EAAWqxB,EAAW71B,SAAY0nB,EAAgB,cAClDljB,GAAY,GAGpB,MAAMsU,EAAsB4O,EAAwB,oBACpD,GAAI5O,EAAqB,KAAAod,EACrB,MAAMne,EAAgBie,EAAUlhC,MAAKkjB,IAAK,IAAAme,EACtC,OAA6B,QAAtBA,EAAAne,EAAG3gB,2BAAmB,IAAA8+B,GAAiB,QAAjBA,EAAtBA,EAAwB1+B,uBAAe,IAAA0+B,OAAA,EAAvCA,EAAyCje,uBAAwBY,KAEH,IAAAsd,EAArEre,GAAkD,QAArCme,EAAIne,EAAc1gB,2BAAmB,IAAA6+B,GAAjCA,EAAmCz+B,iBACpDi+B,EAAYx/B,KAAK,CAAE2N,QAAS2W,EAAGjW,MAAOC,EAAUzF,SAA2C,QAAnCq3B,EAAEre,EAAc1gB,2BAAmB,IAAA++B,OAAA,EAAjCA,EAAmC3+B,gBAAiBqa,aAAc,kBAQhI4jB,EAAYx/B,KAAK,CACb2N,QAAS2W,EACTjW,MAAOC,EACPM,iBAAkBvL,EAAMjF,QAAQ6P,IAAI/I,OAAO0J,uBAW3D,IAAI,MAAMujB,KAAMqN,EACZ,IAAkB,IAAdrN,EAAG9jB,MACH,OAGc,QAAtBwxB,EAAAx8B,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAA4wB,GAAtBA,EACMM,kBAAkBX,GACnBngC,MAAM4P,IACHlI,EAAAA,GAASC,WAAawc,QAAUA,OAAO3a,SAASnG,OAAO,SACvD0D,EAAQgwB,OAAO,6BAElBh2B,OAAMC,IACHk4B,QAAQl4B,MAAM,QAASA,OA+8BH+/B,KAEC3H,KAAuB,cAAgB,iBAGhDj2B,IAAAA,cAAA,SAAIa,EAAM6B,OAAOm7B,6BAA+Bh9B,EAAM6B,OAAOm7B,6BAA8B,wDAQjH1P,IAAwB0L,IAA0Bh5B,EAAMjF,QAAQ6P,IAAI/I,OAAOopB,2BAC7EjrB,EAAMwV,MAAMujB,0BAA4B/4B,EAAMwV,MAAMujB,yBAAyB,IACzE55B,IAAAA,cAACuG,EAAAA,MAAK,CAACnG,UAAU,uBAAuBoG,OAAQ0nB,GAA4B4P,OAAQ3H,IACnFn2B,IAAAA,cAAC8G,EAAAA,UAAS,KACP9G,IAAAA,cAAA,OAAKI,UAAU,0BACXJ,IAAAA,cAAA,OAAKI,UAAU,kBACfJ,IAAAA,cAAA,UAAQG,KAAK,SAASC,UAAU,cAAa,eAAc,QAAO,aAAY,QAAQC,QAAS81B,KAE3Fn2B,IAAAA,cAAA,MAAII,UAAU,2BAAyB,wBACvCJ,IAAAA,cAAA,OAAKI,UAAU,4BACXJ,IAAAA,cAAA,OAAKI,UAAU,uBACVS,EAAMwV,MAAMujB,0BAA4B/4B,EAAMwV,MAAMujB,yBAAyB,IAElF55B,IAAAA,cAAA,OAAKI,UAAU,yBACXJ,IAAAA,cAAA,OAAKI,UAAW,kBAAwC,QAAvB0qB,EAACjqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAqe,GAAgB,QAAhBA,EAAtBA,EAAwBzY,KAAKM,iBAAS,IAAAmY,GAAtCA,EAAwCztB,OAAmB,GAAV,UAC/E2C,IAAAA,cAAA,yBACCqgB,GAAuC,QAAtB0K,EAAAlqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAse,GAAtBA,EAAwB1Y,KAAKM,UAAkC,QAAzBqY,EAAGnqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAue,OAAA,EAAtBA,EAAwB3Y,KAAKM,UAAW,GAAI9R,EAAO4c,GAAcC,GAAiB6C,GAAyBC,GAA4BC,GAA8BC,IAAiC,GACjQ1gB,IAAAA,cAAC+hB,EAAAA,OAAM,CAAC3hB,UAAU,kBAAkBmI,SAAiC,QAAvB0iB,EAACpqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAwe,GAAgB,QAAhBA,EAAtBA,EAAwB5Y,KAAKM,iBAAS,IAAAsY,IAAtCA,EAAwC5tB,OAAuByL,MAAM,UAAUzI,QAASA,KAC/HkE,EAAAA,GAASC,WAAawc,QAAUA,OAAO3a,SAASnG,OAAO,WAEnC,QAAvBgrB,EAACrqB,EAAMqK,KAAKmH,KAAK5F,cAAM,IAAAye,GAAgB,QAAhBA,EAAtBA,EAAwB7Y,KAAKM,iBAAS,IAAAuY,GAAtCA,EAAwC7tB,OAAyB,mBAAhB,eAEvD2C,IAAAA,cAAA,SAAIa,EAAM6B,OAAOm7B,6BAA+Bh9B,EAAM6B,OAAOm7B,6BAA8B,+GChuC3H,MAkBA,EAlBoDh9B,GAE5Cb,EAAAA,cAACuG,EAAAA,MAAK,CACFC,OAAQ3F,EAAM2F,OACdu3B,OAAQ,KACRt3B,gBAAiB,aACjBC,WAAW,EACXo3B,OAAQj9B,EAAMm9B,cACd59B,UAAW,iBAAiBS,EAAMT,aAEjCS,EAAM8F,YAAc3G,EAAAA,cAAC4G,EAAAA,YAAW,SAAG/F,EAAM8F,YACzC9F,EAAMgG,gBAAkB7G,EAAAA,cAAC8G,EAAAA,UAAS,CAAC1G,UAAU,sBAAsBS,EAAMgG,gBACzEhG,EAAMkG,kBAAoB/G,EAAAA,cAAC8G,EAAAA,UAAS,CAAC1G,UAAU,sBAAsBS,EAAMkG,kBAC3ElG,EAAMmG,aAAehH,EAAAA,cAACiH,EAAAA,YAAW,KAAEpG,EAAMmG,iGCXtD,MAmCA,EAnCuDnG,IACnD,MAAOo9B,EAAYC,IAAiBnwB,EAAAA,EAAAA,UAAiB,GAIrD,OACI/N,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,gBAAgBomB,IAAI,MAC/B3lB,EAAM+7B,OACH/7B,EAAM+7B,MACDvrB,QAAQ8G,GACEA,EAAUI,YAEpBtb,KAAI,CAACkb,EAA2BvX,KAC7B,MAAMu9B,EAAWF,IAAer9B,EAChC,OACIZ,IAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,mBAAmBomB,IAAI,KAAKvL,IAAKra,GAC7CZ,IAAAA,cAAComB,EAAAA,KAAI,CACDhmB,UAAW+9B,EAAW,4BAA8B,6BACpD99B,SAhBP+9B,EAgBgCx9B,EAhBP,KAChBs9B,EAA9BE,IAAiBH,EAA2BG,GAA+B,KAehB,gBAChBD,EACf3X,IAAI,MACJvL,IAAKra,GAELZ,IAAAA,cAAA,cAASmY,EAAU7b,OAEvB0D,IAAAA,cAACq+B,EAAAA,SAAQ,CAACj+B,UAAW,mBAAoBoG,OAAQ23B,EAAUG,QAAS,KAChEt+B,IAAAA,cAAC2B,EAAAA,GAA0B,CAACyD,KAAM+S,EAAUI,cAxBnD6lB,IAAAA,wUCQ7B,MAiBMG,EAA4B19B,IAC9B,MAAM29B,EAAgBC,EAAiB59B,GAEvC,SAAI29B,IAAiB39B,EAAMqK,KAAK6D,MAAMqU,0BAC3Bob,EAAgB39B,EAAMqK,KAAK6D,MAAMqU,yBAM1Cqb,EAAoB59B,GACf6Q,KAAKjJ,IAAI5H,EAAMqK,KAAK6D,MAAMkU,WAAa,EAAGpiB,EAAMqK,KAAK6D,MAAM8hB,qBAAuB,EAAGhwB,EAAMqK,KAAK6D,MAAMmU,eAAiB,GAG5Hwb,EAAqBA,CAAC79B,EAA6BqjB,EAAyC8P,KAC9F,MAAM2K,EAAepM,EAAe1xB,EAAOA,EAAMqK,KAAK6D,MAAMqU,yBAC5D,OACIpjB,EAAAA,cAAA,QAAMI,UAAW,sBAAqB8jB,GAA4B8P,EAAmB,2BAA6B,IAAM4K,SAAS,SAC5HD,IAKPpM,EAAiBA,CAAC1xB,EAA6BkO,KACjD,QAActU,IAAVsU,EAIJ,OAAc,IAAVA,GAAelO,EAAMqO,cACdrO,EAAMqO,cAGVrO,EAAMjF,QAAQ02B,iBAAiBC,eAAexjB,EAAOlO,EAAMg+B,eAGhEC,EAAuCj+B,IACzC,MAAM29B,EAAgBC,EAAiB59B,GACjC89B,EAAepM,EAAe1xB,EAAO29B,GAErCO,EAAyBl+B,EAAMijB,cAAgBjjB,EAAMijB,aAAa1nB,MAAK2qB,GAAKA,EAAE+M,UAAYjzB,EAAMjF,QAAQ6P,IAAI/I,OAAOqxB,aACnHC,KAAmBnzB,EAAMojB,WAAapjB,EAAMojB,cAAgBpjB,EAAMjF,QAAQ6P,IAAI/I,OAAOmyB,qBAAuBp6B,EAI5GukC,EAA4Bn+B,EAAMijB,cAAgBjjB,EAAMijB,aAAa1nB,MAAK2qB,GAAKA,EAAE+M,UAAYjzB,EAAMjF,QAAQ6P,IAAI/I,OAAOqxB,aAiC5H,OACI/zB,EAAAA,cAAAA,EAAAA,SAAA,KACK++B,GAA0B/K,EACvBh0B,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMI,UAAU,WACX,IACAS,EAAMsO,kBAAiB,IAAGwvB,EAAY,IAAG99B,EAAMuO,iBAAgB,IAAGsvB,EAAmB79B,IAK1Fb,EAAAA,cAAA,QAAMI,UAAU,2BAA0B,cAAa,QAClDu+B,IAGTI,GAA0BC,QAAkDvkC,IAArBu5B,EACvDh0B,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMI,UAAU,WACX,IACAS,EAAMsO,kBAAiB,IAAGwvB,EAAY,IAAG99B,EAAMuO,iBAAgB,IAAGsvB,EAAmB79B,IAI1Fb,EAAAA,cAAA,QAAMI,UAAU,2BAA0B,cAAa,QAClDu+B,GAEL3+B,EAAAA,cAAA,QAAMI,UAAU,uBAAsB,cAAa,QAnC/BS,CAAAA,IAChC,MAAM89B,EAvBqBM,EAC3Bp+B,EACAkO,EACAmwB,KACoB,IAAA3U,EACpB,QAAc9vB,IAAVsU,EAAJ,CAGA,GAAc,IAAVA,GAAelO,EAAMqO,cACrB,OAAOrO,EAAMqO,cAGjB,QAAyBzU,IAArBykC,EAGJ,OAAyB,IAArBA,GAA0Br+B,EAAMqO,cACzBrO,EAAMqO,cAGVrO,EAAMjF,QAAQ02B,iBAAiBC,eAAe2M,EAA+C,QAA/B3U,EAAE1pB,EAAMjF,QAAQuG,QAAQ2Q,eAAO,IAAAyX,OAAA,EAA7BA,EAA+BiI,YAIjFyM,CAAuBp+B,EAAOA,EAAMqK,KAAK6D,MAAMqU,wBAAyBviB,EAAMmjB,cACnG,OACIhkB,EAAAA,cAAA,QAAMI,UAAU,oBAAoBw+B,SAAS,SACxCD,IAgCQQ,CAA2Bt+B,IAG/BA,EAAMgjB,aAAe7jB,EAAAA,cAAA,QAAMI,UAAU,sBAAsBS,EAAMgjB,cAEtEkb,QAA+CtkC,IAArBu5B,EAC1Bh0B,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMI,UAAU,WACX,IACAS,EAAMsO,kBAAiB,IAAGwvB,EAAY,IAAG99B,EAAMuO,iBAAgB,IAAGsvB,EAAmB79B,IAK1Fb,EAAAA,cAAA,QAAMI,UAAU,oBAAmB,cAAa,QAC3Cu+B,IAIT3+B,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,QAAMI,UAAU,WACX,IACAS,EAAMsO,kBAAiB,IAAGwvB,EAAY,IAAG99B,EAAMuO,iBAAgB,IAAGsvB,EAAmB79B,IAI1Fb,EAAAA,cAAA,QAAMI,UAAU,2BAA0B,cAAa,QAClDu+B,GAEJ99B,EAAMqjB,0BAA4B8P,EAC/Bh0B,EAAAA,cAAA,QAAMI,UAAU,uBAAsB,cAAa,QAC9Cs+B,EAAmB79B,EAAOA,EAAMqjB,yBAA0B8P,IAG/Dh0B,EAAAA,cAAA,QAAMI,UAAU,uBAAsB,cAAa,QAC9Cs+B,EAAmB79B,IAI3BA,EAAMgjB,aAAe7jB,EAAAA,cAAA,QAAMI,UAAU,sBAAsBS,EAAMgjB,gBAQzE7U,EAAgEowB,EAAAA,GAAiBC,wBAC1F,6WAAO36B,CAAA,CACL46B,UAxKyCz+B,QAEMpG,IAA7CoG,EAAMqK,KAAK6D,MAAMqU,wBACV,KAMPpjB,EAAAA,cAAA,QAAMI,UAAW0E,GAAAA,CAAW,YAAajE,EAAMT,YAC1Cm+B,EAAyB19B,GAASi+B,EAAoCj+B,GAAS69B,EAAmB79B,KAZjF,KA6K9B,ymBCtMA,MAAM0+B,EAAU,CAAE5mB,QAAS,GAAI6mB,YAAa,IAmBlCC,EAA8BA,CAACC,EAAqBC,KAUlD,GADAJ,EAAQC,YAAYE,GAAuBC,GACtCJ,EAAQC,YAAYE,GAAqBE,QAC1C,MAAM,IAAIjiC,MAAM,oBAAsB+hC,EAAsB,mCAEhEH,EAAQC,YAAYE,GAAqBE,QAAQC,UAAUC,eAAiBJ,EACxEH,EAAQC,YAAYE,GAAqBE,QAAQC,UAAUtiC,KAC3DgiC,EAAQC,YAAYD,EAAQC,YAAYE,GAAqBE,QAAQC,UAAUtiC,IAAMmiC,IAMhGH,EAAQ5mB,QAAgB,OAAI,CACzBqF,EAAGA,IAAM+hB,EAAQ,MACjBC,MAAO,kBACPC,GAAI,CAAC,CAAC98B,KAAK,OAAS+8B,KAAK,+EAAgFC,MAAO,GAAG,CAACh9B,KAAK,oBAAsB+8B,KAAK,4EAA6EC,MAAO,GAAG,CAACh9B,KAAK,WAAa+8B,KAAK,kEAAmEC,MAAO,GAAG,CAACh9B,KAAK,8BAAgC+8B,KAAK,+FAAgGC,MAAO,GAAG,CAACh9B,KAAK,sBAAwB+8B,KAAK,kEAAmEC,MAAO,GAAG,CAACh9B,KAAK,kBAAoB+8B,KAAK,+FAAgGC,MAAO,GAAG,CAACh9B,KAAK,eAAiB+8B,KAAK,uEAAwEC,MAAO,GAAG,CAACh9B,KAAK,iBAAmB+8B,KAAK,iGAAkGC,MAAO,GAAG,CAACh9B,KAAK,UAAY+8B,KAAK,0EAA2EC,MAAO,GAAG,CAACh9B,KAAK,2BAA6B+8B,KAAK,qGAAsGC,MAAO,GAAG,CAACh9B,KAAK,oBAAsB+8B,KAAK,yFAA0FC,MAAO,GAAG,CAACh9B,KAAK,eAAiB+8B,KAAK,oFAAqFC,MAAO,GAAG,CAACh9B,KAAK,iBAAmB+8B,KAAK,yEAA0EC,MAAO,GAAG,CAACh9B,KAAK,4BAA8B+8B,KAAK,4HAA6HC,MAAO,GAAG,CAACh9B,KAAK,YAAc+8B,KAAK,iFAAkFC,MAAO,IAE92DC,KAAK,EACLC,GAAI,6BACJC,EAAG,SACHxe,EAAG,SAEHye,IAAK,GAGLC,GAAI,0EAOAf,EAF4B,4HACXM,EAAQ,KAQzBN,EAF4B,4EACXM,EAAQ,MAQzBN,EAF4B,kEACXM,EAAQ,MAQzBN,EAF4B,+FACXM,EAAQ,KAQzBN,EAF4B,kEACXM,EAAQ,KAQzBN,EAF4B,+FACXM,EAAQ,MAQzBN,EAF4B,yFACXM,EAAQ,MAQzBN,EAF4B,uEACXM,EAAQ,KAQzBN,EAF4B,oFACXM,EAAQ,MAQzBN,EAF4B,qGACXM,EAAQ,MAQzBN,EAF4B,yEACXM,EAAQ,MAQzBN,EAF4B,0EACXM,EAAQ,KAQzBN,EAF4B,iFACXM,EAAQ,MAQzBN,EAF4B,iGACXM,EAAQ,MAQzBN,EAF4B,+EACXM,EAAQ,KAMjC/e,OAAOyf,aAAezf,OAAOyf,cAAgB,GAC7Czf,OAAOyf,aAAa9nB,QAAOjU,EAAAA,EAAA,GACpBsc,OAAOyf,aAAa9nB,SAAW,IAC/B4mB,EAAQ5mB,SAGXqI,OAAOyf,aAAajB,YAAW96B,EAAAA,EAAA,GAC5Bsc,OAAOyf,aAAajB,aAAe,IACnCD,EAAQC,aAEY,MAAMkB,EAAiB,GAC9BA,EAAe,mDAAqD,CAC5E1iB,EAAGA,IAAM+hB,EAAQ,MACjBY,GAAI,8BAEpBD,EAAe,2DAA6D,CAC5D1iB,EAAGA,IAAM+hB,EAAQ,MACjBY,GAAI,4CAEpBD,EAAe,gFAAkF,CACjF1iB,EAAGA,IAAM+hB,EAAQ,MACjBY,GAAI,yDAEpBD,EAAe,yFAA2F,CAC1F1iB,EAAGA,IAAM+hB,EAAQ,MACjBY,GAAI,4DAEpB3f,OAAOyf,aAAezf,OAAOyf,cAAgB,GAC7Czf,OAAOyf,aAAaC,eAAch8B,EAAAA,EAAA,GACPsc,OAAOyf,aAAaC,gBAAkB,IACtCA,2ECrKpBtmC,eAAewmC,EAClBvuB,EACArU,EACA6iC,GAC2B,IAEvBC,EACAC,EAHJC,IAAAC,UAAA5jC,OAAA,QAAA5C,IAAAwmC,UAAA,KAAAA,UAAA,GAIA,IACIH,QAAmBzuB,EACnB0uB,EAAcD,EAAWzuB,KAAK6uB,QAChC,MAAOrjC,GAGL,OAFAG,EAAU8mB,QAAQjnB,GAClBG,EAAUE,MAAM,uCACTijC,EAAAA,YAAY9nB,UAGvB,IAAI0nB,EAmCA,OADA/iC,EAAU8mB,QAAQ,uDACXqc,EAAAA,YAAY9nB,UAlCnB,IAAK,IAAD+nB,EACA,MAAMC,QAAoDC,EAAAA,iBAAAA,yBACtD,CAAE7kC,cAAeokC,EAAar1B,cAAeqR,YAAa,QAC1DikB,EAAWzuB,KAAKoJ,GAChBslB,GAGJ,aAAaI,EAAAA,YAAY9nB,QAAkD,QAA3C+nB,EAACC,EAAiBE,iCAAyB,IAAAH,EAAAA,OAAI3mC,GACjF,MAAOoD,GAEL,GAAImjC,GAA8B,2DAAfnjC,EAAMsF,KAAmE,CACxF,UACU29B,EAAWU,YAAY,IAC/B,MAAOC,GAGL,OAFAzjC,EAAU8mB,QAAQ2c,GAClBzjC,EAAUE,MAAM,0BACTijC,EAAAA,YAAY9nB,UAEvB,IAEI,aADMunB,EAAkBvuB,EAAMrU,EAAW6iC,GAAc,GAChDM,EAAAA,YAAY9nB,UACrB,MAAOqoB,GAGL,OAFA1jC,EAAU8mB,QAAQ4c,GAClB1jC,EAAUE,MAAM,2BACTijC,EAAAA,YAAY9nB,WAM3B,OAFArb,EAAU8mB,QAAQjnB,GAClBG,EAAUE,MAAM,2BACTijC,EAAAA,YAAY9nB,WAiExBjf,eAAewlB,EAClB+hB,EACAb,EACA9iC,EACA4jC,EACAC,EACA/1B,GAEA,GAAIg1B,EAAY,CACZ,IAAIgB,GAA0C,EAC9C,GAAIl8B,EAAAA,gBAAgBC,YAAY+7B,IAAaD,EAAgC,CAAC,IAADI,EACzE,MAAMC,EAA6CJ,EAASxlC,MACvD+O,GAA2BA,EAAQ+F,WAAa2wB,EAAiBjvB,YAEtEkvB,IAAmCE,KAA6C,QAAzBD,EAACC,EAAgBlL,gBAAQ,IAAAiL,IAAxBA,EAA0BhL,sBAElF+K,GAAiC,EAGrC,MAAMxnC,EAAQ,CACV2nC,WAAYJ,EAAiBjd,OAAQ5a,WACrCk4B,YAAap2B,EACbvK,qBAAsB,CAAEugC,+BAAAA,IAG5B,IACI,MAAMK,QAA4CrB,EAAWsB,uBAAuB9nC,GACpF,aAAa6mC,EAAAA,YAAY9nB,QAAQ8oB,GACnC,MAAOtkC,GACLG,EAAU8mB,QAASjnB,EAAgBE,SACnCC,EAAUE,MAAM,wCAIxB,OAAOijC,EAAAA,YAAY9nB,sFClJvB,MAmEMuP,EAAoBC,IACtB,GAAKA,GAAoC,IAAtBA,EAAWxrB,OAI9B,OAAO2C,EAAAA,cAAAA,EAAAA,SAAA,KAAG6oB,EAAW,KAGnBe,EAAsBC,IACxB,GAAKA,GAAsC,IAAvBA,EAAYxsB,OAIhC,OAAO2C,EAAAA,cAAAA,EAAAA,SAAA,KAAG6pB,EAAY,KAGpBwY,EAAwBA,CAC1BlZ,EACAmZ,EACAhZ,KAEA,GAAKH,GAAcG,EAInB,OACItpB,EAAAA,cAAA,OAAKI,UAAU,uBACV+oB,GAAaA,EAAUI,WACvB+Y,GAAsBA,EAAmB/Y,WACzCD,GAAiBA,EAAcC,WAChCvpB,EAAAA,cAAA,OAAKI,UAAU,WACV+oB,GAAaA,EAAUC,OACvBkZ,GAAsBA,EAAmBlZ,OACzCE,GAAiBA,EAAcF,UAM1CI,EAAoBC,IACtB,MAAM,eAAEhP,EAAc,UAAEiP,GAAcD,EAEtC,OAAOzpB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GAAiBiP,EAAUzsB,IAAI0sB,KAG9CA,EAA4BG,IAC9B,MAAM,eAAErP,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,OAAEO,EAAM,OAAE6O,GAAWF,EAEzE,OACI9pB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GACLnP,EACAO,GAEJ6O,IAKPC,EAAsBC,IACxB,MAAM,eAAEzP,EAAc,cAAEC,EAAa,QAAEE,EAAO,YAAEG,EAAW,OAAEI,EAAM,OAAEiO,EAAM,MAAE9N,EAAK,wBAAEN,GAA4BkP,EAEhH,OACIlqB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLC,EACAE,EACAI,EACAD,EACAI,EACAiO,EACA9N,IAUPinB,EAAmB5sB,GAAiC6H,IAClD7H,EAAUsT,gBACHtT,EAAUsT,eAAezL,GAKlCsL,EAAkBA,CACpBC,EACApT,EACA9U,EACAmC,EACAgmB,EACAwZ,EACA96B,EACAe,EACAg6B,EACA/iC,KAEA,MAAM,eAAE+a,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,OAAEO,GAAW4N,GAE3D,UAAE3kB,GAAcvD,GAEhB,SAAEiL,GAAa9I,EAErB,OACIhD,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GACLnP,EACAO,GAGLnb,EAAAA,cAAC0iC,EAAAA,oBAAmB,CAChBnlC,GAAG,oCACHmK,IAAKA,EACLe,IAAKA,EACLg6B,0BAA2BA,EAC3B56B,aAAciE,EACdnG,SAAU48B,EAAgB5sB,GAC1BxM,uBAAwB/E,EAAU+E,uBAClCJ,yBAA0BigB,EAAmBjgB,yBAC7CM,yBAA0B2f,EAAmB3f,yBAC7Cs5B,gBAAiB3Z,EAAmB2Z,gBACpCC,gBAAiB5Z,EAAmB4Z,gBACpCljC,iBAAkBA,IAErB8iC,IAKPK,EAAqBC,IACvB,MAAM,eAAEroB,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,MAAEtgB,GAAUwoC,EAEhE,OACI9iC,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GAAsBnP,GAC/BtgB,IAKP6vB,EAA0BC,IAC5B,MAAM,eAAE3P,EAAc,OAAEU,EAAM,MAAE7gB,GAAU8vB,EAE1C,OACIpqB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLU,EACA7gB,IAKb,EA5NoFuG,IAChF,MAAM,YACFsqB,EAAW,2BACX4X,EAA0B,0BAC1B3X,EAAyB,UACzBjC,EAAS,mBACTmZ,EAAkB,cAClBhZ,EAAa,iBACb5pB,EAAgB,UAChB+pB,EAAS,YACT1O,EAAW,YACXmP,EAAW,SACXpe,EAAQ,MACRiD,EAAK,MACLjG,EAAK,OACLuiB,EAAM,UACN1V,EAAS,MACT3S,EAAK,UACLoB,EAAS,eACT4+B,EAAc,gBACd1X,EAAe,WACfwX,EAAU,uBACVN,EAAsB,IACtB96B,EAAG,IACHe,EAAG,0BACHg6B,EAAyB,uBACzBQ,EAAsB,cACtBC,GACAriC,EAEJ,OACIb,EAAAA,cAACw6B,EAAAA,OAAMv6B,OAAAC,OAAA,GAAKirB,GACRnrB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6iC,GAA6BliC,EAAM45B,cAC7Cz6B,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKkrB,GACLtiB,EACAiG,EACAm0B,EACAriC,EAAMsiC,iBACNpoB,EACA6N,EAAiB/nB,EAAMwV,MAAMwS,YAC7BwC,EACA5B,GAAaD,EAAiBC,GAC9BqZ,GAAcD,EAAkBC,GAChCh3B,GACGgd,EACIhd,EACA6J,EACA9U,EACAmC,EACAoB,EACAo+B,EACA96B,EACAe,EACAg6B,EACA/iC,GAEPsjC,EACAX,EAAsBlZ,EAAWmZ,EAAoBhZ,GACrDY,GAAeD,EAAmBC,GAClCN,EAAmB/oB,EAAMwV,OAASxV,EAAMwV,MAAMwT,aAC9CyB,GAAmBnB,EAAuBmB,GAC1C2X,GAA0B9Y,EAAuB8Y,yJC3DlE,SAASG,EAA0Ch/B,GAC/C,MAAO,CACHi/B,yBAA0Bj/B,EAAUi/B,yBAEpCC,wBAAyBl/B,EAAUk/B,wBACnCC,4BAA6Bn/B,EAAUm/B,4BAEvCC,gCAAiCp/B,EAAUo/B,gCAC3CC,iCAAkCr/B,EAAUq/B,iCAC5CC,sCAAuCt/B,EAAUs/B,sCAEjDC,oBAAqBv/B,EAAUu/B,oBAC/BC,wBAAyBx/B,EAAUw/B,wBACnCC,cAAez/B,EAAUy/B,eASjC,SAASC,EAAyC1/B,GAC9C,MAAO,CACH2/B,yBAA0B3/B,EAAU4/B,0BACpCC,wBAAyB7/B,EAAU8/B,mBACnCC,2BAA4B//B,EAAU+/B,2BACtCC,yBAA0BhgC,EAAUigC,+BAEpCC,yBAA0BlgC,EAAUkgC,yBAEpCC,yBAA0BngC,EAAUogC,8BACpCC,+BAAgCrgC,EAAUsgC,0CASlD,SAASC,EAAgDvgC,GACrD,MAAO,CACHwgC,4BAA6BxgC,EAAUwgC,4BACvCC,2BAA4BzgC,EAAUygC,2BACtCC,0CAA2C1gC,EAAU0gC,0CACrDC,6CAA8C3gC,EAAU2gC,6CACxDC,0CAA2C5gC,EAAU4gC,0CACrD91B,cAAe9K,EAAUmS,UACzBpH,kBAAmB/K,EAAU+K,kBAC7BC,iBAAkBhL,EAAUgL,kBASpC,SAAS61B,EACL7gC,GAEA,MAAO,CACH8gC,yBAA0B9gC,EAAU8gC,yBACpCC,8BAA+B/gC,EAAU+gC,8BACzCC,yBAA0BhhC,EAAUghC,yBACpCC,+BAAgCjhC,EAAUihC,gCAWlD,MAAMC,EAA6BA,CAAC3vB,EAA6BvR,EAAmC+G,IAChGsB,IAEAkJ,EAAUsD,iBAAiB,CACvBtB,UAAW,iBACXpD,gBACsB,sBAAlB9H,EAAOC,QAAiCgH,EAAAA,EAAAA,IAAmBjH,EAAO2E,kBAAmBhN,EAAW+G,MAAAA,OAAO,EAAPA,EAASynB,YAAc,MC1E5H,IAAK2S,GAAZ,SAAYA,GACRA,EAAAA,EAAA,eADJ,CAAYA,IAAAA,EAAe,KAS3B,MAAMhD,EAAmB5sB,GAAiC6H,IAClD7H,EAAUsT,gBACHtT,EAAUsT,eAAezL,GAiIlCgoB,EAA2BA,CAC7B3kC,EACAmC,EACA2S,KAEA,MAAMxK,EAAUtK,EAAMqK,KAAKC,QAAQsB,OACnC,IAAK5L,EAAMyhC,qBAAuBn3B,EAC9B,OAAO,KAGX,MAAMs6B,EDhEoCC,EAC1C7kC,EACAmC,EACA2S,EACAxK,KAEA,MAAM,GAEF5N,EAAE,SACF0R,EAAQ,QACRrT,EACAsP,MACIy6B,gBAAkBl5B,OAAQk5B,GAC1BnwB,qBAAuB/I,OAAQ+I,IAClC,UACDpR,EAAS,OACT1B,GACA7B,GAEE,SAAEiL,GAAa9I,EAGf4iC,EAAmC/kC,EAAMglC,0CAA2C,EAC1F,OACIF,GACI3lC,EAAAA,cAAC8lC,EAAAA,4BAA2B7lC,OAAAC,OAAA,CACxBE,UAAU,gCACV2lC,6BAA8B3hC,EAAU2hC,6BACxCC,gCAAiC5hC,EAAU4hC,gCAC3CC,kCAAmC7C,EAA0Ch/B,GAC7E8hC,mCAAoCpC,EAAyC1/B,GAC7E+hC,wCAAyCxB,EAAgDvgC,GACzFgiC,uDAAwDnB,EACpD7gC,GAEJ8G,KAAM,CAAEC,QAAAA,EAASW,SAAAA,EAAU65B,eAAAA,EAAgBnwB,oBAAAA,GAC3C5Z,QAASA,EACT2B,GAAIA,EACJ0R,SAAUA,EACVkD,QAASmzB,EAA2B3vB,EAAWvR,EAAW+G,GAC1Dk7B,8BAA+BrjC,EAAM6N,sBACrCy1B,mBAAmB,EACnBC,gBArBa,EAsBbj3B,cAAe5M,QAAmCjI,IAAzBiI,EAAO4M,cAA8B5M,EAAO4M,mBAAgB7U,EACrF+rC,oCAAqCZ,GAChCA,GAAoC,CAAElW,UAAW7uB,EAAM4lC,qBCmB5Cf,CAA+B7kC,EAAOmC,EAAO2S,EAAWxK,GAEpF,OACInL,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKW,EAAMyhC,mBAAmB7nB,gBAC9B5Z,EAAMyhC,mBAAmB/Y,WACzBkc,IAYPiB,EAAwBA,CAAC/wB,EAA6BvR,EAAmC+G,IAC3FsB,IAEAkJ,EAAUsD,iBAAiB,CACvBtB,UAAW,WACXpD,gBACsB,qBAAlB9H,EAAOC,QAAgCgH,EAAAA,EAAAA,IAAmBjH,EAAO2E,kBAAmBhN,EAAW+G,MAAAA,OAAO,EAAPA,EAASynB,YAAc,MAmD5H+T,EAAsBA,CACxB9lC,EACAmC,EACA2S,KAEA,MAAMxK,EAAUtK,EAAMqK,KAAKC,QAAQsB,OACnC,IAAK5L,EAAMyoB,gBAAkBne,EACzB,OAAO,KAGX,IAAKtK,EAAM6B,OAAOkkC,eACd,OAAO,KAGX,MAAMC,EArDwBC,EAC9BjmC,EACAmC,EACA2S,EACAxK,KAEA,MAAM,QAAEvP,EAAO,UAAEwI,GAAcvD,EACzBkmC,EAAYlmC,EAAMqK,KAAK67B,UAAUt6B,OAEvC,OACIzM,EAAAA,cAACgnC,EAAAA,uBAAsB,CACnB5mC,UAAU,gCACV6mC,wBAAyB7iC,EAAU6iC,wBACnCC,6BAA8B9iC,EAAU8iC,6BACxCC,qBAAsB/iC,EAAU+iC,qBAChCC,2BAA4BhjC,EAAUgjC,2BACtCC,uBAAwBjjC,EAAUijC,uBAClCC,4BAA6BljC,EAAUkjC,4BACvCC,eAAgBnjC,EAAUmjC,eAC1Br8B,KAAM,CAAEC,QAAAA,EAAS47B,UAAAA,GACjBnrC,QAASA,EACT4rC,SAAS,SACTjqC,GAAIsD,EAAMtD,GACV0R,SAAUpO,EAAMoO,SAChBkD,QAASu0B,EAAsB/wB,EAAWvR,EAAW+G,GACrDE,mBAAoBrI,EAAM4V,gBAC1B2tB,gBAlBwB,EAmBxBD,mBAAmB,KA0BJQ,CAA0BjmC,EAAOmC,EAAO2S,EAAWxK,GAC1E,OACInL,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKW,EAAMyoB,cAAc7O,gBACzB5Z,EAAMyoB,cAAcC,WACpBsd,IAUPY,EAAyBrd,IAE3B,MAAM,eAAE3P,EAAc,OAAEU,EAAM,MAAE7gB,GAAU8vB,EAE1C,OACIpqB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLU,EACA7gB,IAuBPotC,EAA2B5d,IAC7B,MAAM,eAAErP,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,OAAEO,EAAM,OAAE6O,GAAWF,EAEzE,OACI9pB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GAAsBnP,GAC/BoP,EACA7O,IAoPb,EA/NoFta,IAAQ,IAAA62B,EAAAiQ,EAAAhQ,EAExF,MAAM,YACFxM,EAAW,2BAEX4X,EAA0B,0BAE1B3X,EAAyB,UACzBjC,EAAS,mBACTmZ,EAAkB,cAClBhZ,EAAa,wBACbse,EAAuB,UACvBne,EAAS,YACT1O,EAAW,YACXmP,EAAW,SACXpe,EAAQ,MACRiD,EAAK,MACLjG,EAAK,OACLuiB,EAAM,eACN2X,EAAc,gBACd1X,EAAe,WACfwX,EAAU,uBACVG,EAAsB,IACtBv7B,EAAG,IAEHe,EAAG,0BACHg6B,EAAyB,cACzBS,EAAa,UACbvtB,EAAS,MACT3S,EAAK,UACLoB,EAAS,uBACTo+B,EAAsB,iBACtB9iC,EACA+L,KAAO/I,OAAQmlC,GAAW,SAC1BC,GACAjnC,EACJ,IAAIknC,EAAkBlnC,EAAMuD,UAAU2jC,QACtCA,GAAoC,QAA7BrQ,EAAI72B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAirB,OAAA,EAAzBA,EAA2BtpB,OACtC,MAAM45B,EAAwF,QAAtEL,EAA2B9mC,EAAMqK,KAAKsM,0BAA0B/K,cAAM,IAAAk7B,OAAA,EAA3CA,EAA6CM,eAC1FC,EAAmBF,MAAAA,GAAAA,EAAoBG,QAAUH,EAAmBG,QAAU,GAC9EC,EAAqBJ,MAAAA,GAAAA,EAAoBK,UAAYL,EAAmBK,UAAY,IAEnFvpC,EAAcwpC,GAAmBtoC,EAAAA,SAAuB,KACxDuoC,EAAeC,GAAoBxoC,EAAAA,UAAwB,GAsB5DyoC,EAAezoC,EAAAA,aAAkB5F,UAAW,IAAA09B,EAC9C,MAAMx9B,EAAQ,IAAIouC,EAAAA,qCACW,QADyB5Q,EAClDj3B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAqrB,OAAA,EAAzBA,EAA2B5mB,SAC3Bq0B,EAAgBoD,KAChBpD,EAAgBoD,KAChBpD,EAAgBoD,KAChBpD,EAAgBoD,MAChB,SAoBEC,EAAAA,EAAAA,iCAAgCtuC,EAAOuG,EAAMjF,QAAQ4P,eACtD5N,OAAOC,IACJgD,EAAM7C,UAAUH,MAAMA,EAAME,YAE/BlB,MAAKgsC,IACF,GAAIA,GAAYjjC,EAAAA,gBAAgBC,YAAYgjC,GAAW,CAAC,IAADC,EACnD,MAAMC,EAAoBlmC,IAA+B,IAAAmmC,EAAA,OAC5B,QAAzBA,EAAAnmC,EAAMlE,2BAAmB,IAAAqqC,GAAiB,QAAjBA,EAAzBA,EAA2BjqC,uBAAe,IAAAiqC,OAAA,EAA1CA,EAA4CtqC,iBAAkBwpC,GAC5De,EAAkCJ,EAASx3B,OAAO03B,GAClDG,EAA6BtjC,EAAAA,gBAAgBC,YAAYojC,GACzDA,EAAgC1D,EAAgBoD,WAChDluC,EACA0uC,EAtDUC,CAAAA,IAC5B,GAAIA,GAAyBxjC,EAAAA,gBAAgBC,YAAYujC,EAAsBC,6BAC3E,IAAK,MAAMC,KAA+BF,EAAsBC,4BAA6B,CAAC,IAADE,EACzF,IAC6C,QAAzCA,EAAAH,EAAsBzqC,2BAAmB,IAAA4qC,GAAiB,QAAjBA,EAAzCA,EAA2CxqC,uBAAe,IAAAwqC,OAAA,EAA1DA,EAA4D/pB,uBAC5D8pB,EAA4BE,iBAE5B,OAAOF,EAA4BG,kBA+CUC,CAAuBR,GAE9DS,GA1BQC,EAyBqBV,MAAAA,GAA+C,QAArBJ,EAA1BI,EAA4BvqC,2BAAmB,IAAAmqC,OAAA,EAA/CA,EAAiDe,oBAxBvFhC,EAAUz7B,oBAIXxG,EAAAA,gBAAgBC,YAAY+jC,IACrBA,EAAmBrE,EAAgBoD,MAAM18B,kBAAqBs5B,EAAgBoD,MAoB/C9nC,EAAMuD,UAAU0lC,YAAcjpC,EAAMuD,UAAUuM,eAC1Eo5B,EAAgCZ,GAAsCQ,EACtEK,EAAiC,IAAG1kB,EAAAA,EAAAA,QACtCzkB,EAAMuD,UAAU6lC,iCAChB7B,MACC2B,IACLzB,EAAgB0B,GAhCFJ,IAAAA,KAoC1BpB,GAAiB,KAClB,CAC0B,QAD1B7Q,EACC92B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAkrB,OAAA,EAAzBA,EAA2BzmB,SAC3B22B,EAAUz7B,iBACV87B,EACAE,EACAvnC,EAAMjF,QAAQ4P,cACd3K,EAAMuD,UAAU6lC,iCAChBppC,EAAMuD,UAAU0lC,YAChBjpC,EAAMuD,UAAUuM,eAChB9P,EAAM7C,YAGVgC,EAAAA,WAAgB,KACRa,EAAM6B,OAAOwnC,0BACbzB,IAAe7qC,OAAOC,IAClBgD,EAAM7C,UAAUH,MAAMA,EAAME,cAGrC,CAAC0qC,EAAcF,EAAe1nC,EAAM7C,UAAW6C,EAAM6B,OAAOwnC,4BAE/DjiC,EAAAA,EAAAA,KACI,SAAAkiC,EAAA,OAAiD,QAAjDA,EAAMtpC,EAAMqK,KAAKsM,0BAA0B/K,cAAM,IAAA09B,OAAA,EAA3CA,EAA6CC,2BACnD,KACI5B,GAAiB,MAoBzB,OACIxoC,EAAAA,cAACw6B,EAAAA,OAAMv6B,OAAAC,OAAA,GAAKirB,GACRnrB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6iC,GAA6BliC,EAAM45B,cAC7Cz6B,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKkrB,GACL0c,GAAYA,EAAS,GAAGxrC,KACxBwM,EACD9I,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,+BACZJ,EAAAA,cAAA,OAAKI,UAAU,wCAAwC2nC,GACtD1c,GAELrrB,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,6BACZJ,EAAAA,cAAA,OAAKI,UAAU,kCAAkCS,EAAMuD,UAAUimC,WAChEt7B,GAEJ0a,GAzLQA,CAAAA,IACrB,MAAM,eAAEhP,EAAc,UAAEiP,GAAcD,EAEtC,OAAOzpB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GAAiBiP,EAAUzsB,IAAIyqC,KAsLtB4C,CAAgB7gB,GAC7BqZ,GAlZSA,CAAAA,IACtB,MAAM,eAAEroB,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,MAAEtgB,GAAUwoC,EAEhE,OACI9iC,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GAAsBnP,GAC/BtgB,IA4YkBiwC,CAAiBzH,GAChC9iC,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,qCACZJ,EAAAA,cAAA,OAAKI,UAAU,yCACV0L,GA3cF0+B,EACnBzhB,EACApT,EACA9U,EACAmC,EACAgmB,EACAwZ,EAGA96B,EACAe,EACAg6B,EACA/iC,EACAwjC,KAGA,MAAM,eAAEzoB,EAAc,oBAAEsP,EAAmB,QAAEnP,EAAO,OAAEO,GAAW4N,GAE3D,UAAE3kB,GAAcvD,GAEhB,SAAEiL,GAAa9I,EAErB,OACIhD,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACNza,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAK6pB,GACLnP,EACAO,GAGLnb,EAAAA,cAAC0iC,EAAAA,oBAAmB,CAChBnlC,GAAG,oCACHmK,IAAKA,EACLe,IAAKA,EACLg6B,0BAA2BA,EAC3B56B,aAAciE,EACdnG,SAAU48B,EAAgB5sB,GAC1BxM,uBAAwB/E,EAAU+E,uBAClCJ,yBAA0B3E,EAAU2E,yBACpCM,yBAA0BjF,EAAUiF,yBACpCs5B,gBAAiB3Z,EAAmB2Z,gBACpCC,gBAAiB5Z,EAAmB4Z,gBACpCljC,iBAAkBA,IAErBwjC,EACAV,IAgaegI,CACI1+B,EACA6J,EACA9U,EACAmC,EACAoB,EACAo+B,EACA96B,EACAe,EACAg6B,EACA/iC,EACAwjC,GAEPriC,EAAMsiC,mBAGdtiC,EAAM6B,OAAOwnC,0BAA4BhC,GA/CXuC,MAA8B,IAAA7S,EAAAC,EAErE,GAD6BjyB,EAAAA,gBAAgBC,YAAqC,QAA1B+xB,EAAC/2B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAmrB,OAAA,EAAzBA,EAA2BzmB,kBACT1W,KAAtB,QAAzBo9B,EAAAh3B,EAAMqK,KAAKC,QAAQsB,cAAM,IAAAorB,OAAA,EAAzBA,EAA2B6S,iBACnD,OAOJ,OAAO1qC,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GALuB,CAC/BE,UAAW,0CACXomB,IAAK,SAGyB1nB,IAqCoC2rC,GAC7DzH,EAvZQ7Z,CAAAA,IAErB,MAAM,eAAE1O,EAAc,WAAE8O,EAAU,OAAEH,GAAWD,EAE/C,OACInpB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACL8O,EACAH,IAiZIuhB,CAAgBxhB,GAChBe,GAxYUA,CAAAA,IAEvB,MAAM,eAAEzP,EAAc,cAAEC,EAAa,QAAEE,EAAO,YAAEG,EAAW,OAAEI,EAAM,OAAEiO,EAAM,MAAE9N,EAAK,wBAAEN,GAA4BkP,EAEhH,OACIlqB,EAAAA,cAAComB,EAAAA,KAAInmB,OAAAC,OAAA,GAAKua,GACLC,EACAE,EACAI,EACAD,EACAI,EACAiO,EACA9N,IA4XmBsvB,CAAkB1gB,GACjCZ,GAAiBqd,EAAoB9lC,EAAOmC,EAAO2S,GACnDiyB,EACAtF,GAAsBkD,EAAyB3kC,EAAOmC,EAAO2S,GAC7DuU,MAAAA,GAAAA,EAAalP,wBACVhb,EAAAA,cAAA,OAAKI,UAAU,8BAA8B8pB,EAAYlP,yBACzD,KArPQ6O,CAAAA,IACxB,GAAKA,GAAsC,IAAvBA,EAAYxsB,OAIhC,OAAO2C,EAAAA,cAAAA,EAAAA,SAAA,KAAG6pB,EAAY,KAiPTD,CAAmB/oB,EAAMwV,OAASxV,EAAMwV,MAAMwT,aAC/C7pB,EAAAA,cAAA,OAAKI,UAAU,gCAAgCS,EAAMuD,UAAUymC,UAC/D7qC,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,gCACXkrB,GAAmBmc,EAAsBnc,GACzC2X,GAA0BwE,EAAsBxE,IAErDjjC,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,mCACZJ,EAAAA,cAAA,OAAKI,UAAU,wCAAwCS,EAAMuD,UAAU0mC,iBACtE/vB,GAEJnV,EAAAA,gBAAgBC,YAAYhF,EAAMwV,MAAM00B,sBACrC/qC,EAAAA,cAAComB,EAAAA,KAAI,CAAChmB,UAAU,qCAAqCS,EAAMwV,MAAM00B,qBAAqB,IACtF,eCvjBpBC,EAAOC,QAAUjrC,cCAjBgrC,EAAOC,QAAUC","sources":["webpack://Dobbies.Commerce/./src/actions/cart-state-share.ts?609c","webpack://Dobbies.Commerce/./src/actions/get-all-store-location-information.ts?4981","webpack://Dobbies.Commerce/./src/modules/dobbies-cookie-compliance/components/accept-button.tsx?7cb3","webpack://Dobbies.Commerce/./src/modules/dobbies-cookie-compliance/components/links.tsx?52fd","webpack://Dobbies.Commerce/./src/modules/dobbies-cookie-compliance/dobbies-cookie-compliance.tsx?e5f5","webpack://Dobbies.Commerce/./src/modules/dobbies-marketing-content-block/components/dobbies-modal.tsx?7007","webpack://Dobbies.Commerce/./src/themes/dobbies/actions/get-feature-state.override.action.ts?6984","webpack://Dobbies.Commerce/./src/themes/dobbies/utilities/quantity/Quantity.tsx?0e68","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/add-to-cart-component.tsx?4d05","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/utilities/error-utilities.ts?5ccb","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/get-add-to-cart.tsx?3e2e","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/get-buybox-find-in-store.tsx?aa1c","webpack://Dobbies.Commerce/./src/dotdigital-extension/BackInStockDataService.g.ts?86ca","webpack://Dobbies.Commerce/./src/dotdigital-extension/BackInStockDataAction.g.ts?5cd6","webpack://Dobbies.Commerce/./src/themes/dobbies/views/buybox.view.tsx?fe36","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/dobbies-modal.tsx?9a82","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/custom-collapse.tsx?5df4","webpack://Dobbies.Commerce/./src/themes/dobbies/views/custom-components/product-price-component.tsx?086b","webpack://Dobbies.Commerce/./lib/buybox/module-registration.js?bcce","webpack://Dobbies.Commerce/./src/validate-cart.ts?cd50","webpack://Dobbies.Commerce/./src/modules/fabrikam/views/buybox.view.tsx?aec4","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/components/buybox-add-to-order-template.tsx?ceb4","webpack://Dobbies.Commerce/./src/modules/adventureworks/views/buybox.view.tsx?98cf","webpack://Dobbies.Commerce/external var \"React\"?0d3b","webpack://Dobbies.Commerce/external var \"ReactDOM\"?853b"],"sourcesContent":["/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\n/**\r\n * CheckoutModulesStateShare Input Action\r\n */\r\nexport class CartModulesStateShareInput implements IActionInput {\r\n // TODO: Determine if the results of this get action should cache the results and if so provide\r\n // a cache object type and an appropriate cache key\r\n public getCacheKey = () => `cartSharedState`;\r\n public getCacheObjectType = () => 'cartSharedState';\r\n public dataCacheType = (): CacheType => 'request';\r\n}\r\n// TODO: Create a data model here or import one to capture the response of the action\r\nexport interface ICartSharedState {\r\n isCartUpdated?: boolean; // Used to display msg in delivery section\r\n isQuantityUpdated?: boolean;\r\n}\r\n/**\r\n * TODO: Use this function to create the input required to make the action call\r\n */\r\nconst createInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new CartModulesStateShareInput();\r\n};\r\n/**\r\n * TODO: Use this function to call your action and process the results as needed\r\n */\r\nexport async function updateCartStateAction(input: CartModulesStateShareInput, ctx: IActionContext): Promise {\r\n return {\r\n isCartUpdated: undefined,\r\n isQuantityUpdated: undefined\r\n };\r\n}\r\n/**\r\n * SampleState - create action\r\n */\r\nexport default createObservableDataAction({\r\n action: >updateCartStateAction,\r\n input: createInput\r\n});\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\n\r\nimport {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n ICreateActionContext\r\n} from '@msdyn365-commerce/core';\r\nimport {\r\n ChannelDeliveryOption,\r\n FeatureState,\r\n OrgUnitAvailability,\r\n OrgUnitLocation,\r\n SearchArea,\r\n StoreHours\r\n} from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getChannelDeliveryOptionsAsync,\r\n getOrgUnitLocationsByAreaAsync,\r\n getStoreHoursAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/OrgUnitsDataActions.g';\r\nimport getFeatureStateActionDataAction, { FeatureStateInput } from '../themes/dobbies/actions/get-feature-state.override.action';\r\nimport { QueryResultSettingsProxy, IFullOrgUnitAvailability } from '@msdyn365-commerce-modules/retail-actions';\r\n\r\n/**\r\n * Get selected variant action input class.\r\n */\r\nexport class GetAllOrgUnitLocationsByAreaInput implements IActionInput {\r\n public Latitude?: number;\r\n\r\n public Longitude?: number;\r\n\r\n public Radius?: number;\r\n\r\n public DistanceUnitValue?: number;\r\n\r\n public IgnoreLocation?: boolean;\r\n\r\n constructor(_Latitude?: number, _Longitude?: number, _Radius?: number, _DistanceUnitValue?: number, _IgnoreLocation?: boolean) {\r\n this.Latitude = _Latitude;\r\n this.Longitude = _Longitude;\r\n this.Radius = _Radius;\r\n this.DistanceUnitValue = _DistanceUnitValue;\r\n this.IgnoreLocation = _IgnoreLocation;\r\n }\r\n\r\n public getCacheKey = () => 'GetAllOrgUnitLocationsByAreaInput';\r\n\r\n public getCacheObjectType = () => 'GetAllOrgUnitLocationsByAreaInput';\r\n\r\n public dataCacheType = (): CacheType => 'none';\r\n}\r\n\r\n/**\r\n * CreateInput method for the getSelectedVariant data action.\r\n * @param inputData The input data passed to the createInput method.\r\n */\r\nexport const createGetOrgUnitLocationsByAreaInput = (inputData: ICreateActionContext): GetAllOrgUnitLocationsByAreaInput => {\r\n return new GetAllOrgUnitLocationsByAreaInput();\r\n};\r\n\r\n/**\r\n * Calls the Retail Feature State API and returns a list of feature with isEnabled flag.\r\n * @param context\r\n */\r\nexport async function getFeatureState(context: IActionContext): Promise {\r\n return getFeatureStateActionDataAction(new FeatureStateInput(), context);\r\n}\r\n\r\n/**\r\n * Action method for the getSelectedVariant data action.\r\n * @param input The action input class.\r\n * @param ctx The action context.\r\n */\r\nexport async function getAllOrgUnitLocationsByArea(\r\n input: GetAllOrgUnitLocationsByAreaInput,\r\n ctx: IActionContext\r\n): Promise {\r\n if ((input.Radius === undefined || !input.Latitude || !input.Longitude) && !input.IgnoreLocation) {\r\n // No valid location we want to return empty array so module can show no locations message\r\n return [];\r\n }\r\n\r\n const searchArea: SearchArea = {\r\n Latitude: input.Latitude,\r\n Longitude: input.Longitude,\r\n Radius: input.Radius,\r\n DistanceUnitValue: input.DistanceUnitValue || 0 // 0 is miles\r\n };\r\n\r\n const featureState = await getFeatureState(ctx);\r\n const retailMulitplePickupMFeatureState = featureState?.find(\r\n item => item.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\r\n )?.IsEnabled;\r\n\r\n return getOrgUnitLocationsByAreaAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n searchArea\r\n )\r\n .then(async (stores: OrgUnitLocation[]) => {\r\n // console.log(\"🚀 ~ file: get-store-location-information-s.ts:112 ~ .then ~ stores:\", stores)\r\n // return stores\r\n let locationDeliveryOptions: ChannelDeliveryOption[] | undefined = [];\r\n\r\n // If mulitple pickup mode is enable then call getchanneldeliveryoption\r\n if (retailMulitplePickupMFeatureState) {\r\n const orgUnitChannel = stores.map(store => store.ChannelId);\r\n locationDeliveryOptions = await _getLocationPickUpDeliveryModes(orgUnitChannel, ctx);\r\n }\r\n const locationPromiseList = stores.map(store => {\r\n const locationDeliveryOption = locationDeliveryOptions?.find(\r\n _channeldeliveryoption => _channeldeliveryoption.ChannelId === store.ChannelId\r\n );\r\n return _getLocationWithHours(store, locationDeliveryOption, ctx);\r\n });\r\n return Promise.all(locationPromiseList);\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetOrgUnitLocationsByArea] error getting Locations');\r\n ctx.trace(error.message);\r\n ctx.telemetry.error(error.message);\r\n ctx.telemetry.debug('[GetOrgUnitLocationsByArea] error getting Locations');\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the store information.\r\n * @param orgUnitLocation The org unit location.\r\n * @param storeMap A map that contains store information group by the inventory location id.\r\n * @param channelDeleiveryOptions\r\n * @param ctx The action context.\r\n */\r\nasync function _getLocationWithHours(\r\n orgUnitLocation: OrgUnitLocation,\r\n channelDeleiveryOptions: ChannelDeliveryOption | undefined,\r\n ctx: IActionContext\r\n): Promise {\r\n if (!orgUnitLocation || !orgUnitLocation.OrgUnitNumber) {\r\n return { OrgUnitAvailability: undefined };\r\n }\r\n\r\n return getStoreHoursAsync({ callerContext: ctx }, orgUnitLocation.OrgUnitNumber)\r\n .then((hours: StoreHours) => {\r\n const availability: OrgUnitAvailability = {\r\n OrgUnitLocation: orgUnitLocation\r\n };\r\n\r\n if (hours && !(hours instanceof Error)) {\r\n return { OrgUnitAvailability: availability, StoreHours: hours, OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\r\n }\r\n\r\n return { OrgUnitAvailability: availability, OrgUnitPickUpDeliveryModes: channelDeleiveryOptions };\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug('[GetFullAvailableInventoryNearby] error getting availability with hours');\r\n return { OrgUnitAvailability: {} };\r\n });\r\n}\r\n\r\n/**\r\n * Action method that obtains the store information.\r\n * @param channelCollection The org unit channel Id list.\r\n * @param ctx The action context.\r\n */\r\nasync function _getLocationPickUpDeliveryModes(\r\n channelCollection: (number | undefined)[],\r\n ctx: IActionContext\r\n): Promise {\r\n if (channelCollection?.length === 0 || channelCollection === undefined) {\r\n return undefined;\r\n }\r\n\r\n const channelIdList: number[] = [];\r\n channelCollection?.map(id => {\r\n if (id !== undefined) {\r\n return channelIdList.push(id);\r\n }\r\n return;\r\n });\r\n\r\n // To get all channel pickup delivery mode filterOption should be 4\r\n return getChannelDeliveryOptionsAsync(\r\n {\r\n callerContext: ctx,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(ctx)\r\n },\r\n channelIdList,\r\n 4\r\n )\r\n .then((channelDeliveryOptions: ChannelDeliveryOption[]) => {\r\n if (channelDeliveryOptions && !(channelDeliveryOptions instanceof Error)) {\r\n return channelDeliveryOptions;\r\n }\r\n\r\n return undefined;\r\n })\r\n .catch((error: Error) => {\r\n ctx.trace(\r\n '[GetFullAvailableInventoryNearby][getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n ctx.trace(error.message);\r\n ctx.telemetry.exception(error);\r\n ctx.telemetry.debug(\r\n '[GetFullAvailableInventoryNearby] [getChannelDeliveryOptionsAsync] error getting availability with channel delivery options'\r\n );\r\n return [];\r\n });\r\n}\r\n\r\n/**\r\n * The complete getAllOrgUnitLocationsByArea data action.\r\n */\r\nexport const getOrgUnitLocationsByAreaDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-store-location-information',\r\n action: >getAllOrgUnitLocationsByArea,\r\n input: createGetOrgUnitLocationsByAreaInput\r\n});\r\n\r\nexport default getOrgUnitLocationsByAreaDataAction;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport { getPayloadObject, getTelemetryAttributes, IPayLoad, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface ICookieComplianceAcceptButton {\r\n acceptCookiesButtonText?: string;\r\n acceptCookiesButtonAriaLabel?: string;\r\n\r\n /**\r\n * The telemetry content\r\n */\r\n telemetryContent?: ITelemetryContent;\r\n onClose(): void;\r\n}\r\n\r\nexport const CookieComplianceAcceptButton: React.FC = ({\r\n acceptCookiesButtonText,\r\n acceptCookiesButtonAriaLabel,\r\n telemetryContent,\r\n onClose\r\n}) => {\r\n const payLoad: IPayLoad = getPayloadObject('click', telemetryContent!, 'accept cookies');\r\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\r\n\r\n return (\r\n \r\n {acceptCookiesButtonText}\r\n \r\n );\r\n};\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IActionLinksData } from '../dobbies-cookie-compliance.props.autogenerated';\r\n\r\nexport interface ICookieComplianceLinks {\r\n links: IActionLinksData[];\r\n requestContext: Msdyn365.IRequestContext;\r\n telemetryContent: ITelemetryContent;\r\n onTextChange?(index: number): (event: Msdyn365.ContentEditableEvent) => void;\r\n}\r\n\r\n/**\r\n *\r\n * ContentCardLinks component.\r\n * @extends {React.PureComponent}\r\n */\r\nexport class CookieComplianceLinks extends React.PureComponent {\r\n public render(): JSX.Element {\r\n const editableLinks = this._mapEditableLinks(this.props.links);\r\n return (\r\n \r\n {editableLinks && editableLinks.length > 0 ? (\r\n \r\n ) : null}\r\n \r\n );\r\n }\r\n\r\n private readonly _mapEditableLinks = (linkdata: IActionLinksData[]): Msdyn365.ILinksData[] | null => {\r\n if (!linkdata || linkdata.length === 0) {\r\n return null;\r\n }\r\n const editableLinks: Msdyn365.ILinksData[] = [];\r\n linkdata.forEach((link, index) => {\r\n // Construct telemetry attribute to render\r\n const payLoad = getPayloadObject('click', this.props.telemetryContent, '', '');\r\n const linkText = link.linkText ? link.linkText : '';\r\n payLoad.contentAction.etext = linkText;\r\n const attributes = getTelemetryAttributes(this.props.telemetryContent, payLoad);\r\n const editableLink: Msdyn365.ILinksData = {\r\n ariaLabel: link.ariaLabel,\r\n className: 'link',\r\n linkText: link.linkText,\r\n linkUrl: link.linkUrl.destinationUrl,\r\n openInNewTab: link.openInNewTab,\r\n role: 'link',\r\n additionalProperties: attributes,\r\n onClick: onTelemetryClick(this.props.telemetryContent, payLoad, linkText)\r\n };\r\n editableLinks.push(editableLink);\r\n });\r\n\r\n return editableLinks;\r\n };\r\n}\r\n\r\nexport default CookieComplianceLinks;\r\n","/*--------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * See License.txt in the project root for license information.\r\n *--------------------------------------------------------------*/\r\n\r\n/* eslint-disable no-duplicate-imports */\r\n/* eslint-disable security/detect-object-injection */\r\nimport * as MsDyn365 from '@msdyn365-commerce/core';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { getTelemetryObject, IAlertProps, IModuleProps, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\nimport { CookieComplianceAcceptButton, CookieComplianceLinks } from './components';\r\nimport { IDobbiesCookieComplianceConfig, IDobbiesCookieComplianceProps } from './dobbies-cookie-compliance.props.autogenerated';\r\n\r\n/**\r\n * Alert state interface.\r\n */\r\n\r\nexport interface ICheckboxState {\r\n name: CheckboxType;\r\n value: boolean;\r\n}\r\n\r\nexport interface IAlertState {\r\n visible: boolean;\r\n checkboxesChecked: ICheckboxState[];\r\n}\r\n\r\nexport enum CheckboxType {\r\n Functional = 'Functional',\r\n Analytics = 'Analytics',\r\n Unclassified = 'Unclassified'\r\n}\r\n\r\n/**\r\n * Cookie compliance view props interface.\r\n */\r\nexport interface ICookieComplianceViewProps extends IDobbiesCookieComplianceProps<{}> {\r\n CookieComplianceBanner: IModuleProps;\r\n AlertProps: IAlertProps;\r\n Content: INodeProps;\r\n text?: React.ReactNode;\r\n checkboxes?: React.ReactNode;\r\n links?: React.ReactNode;\r\n acceptButton?: React.ReactNode;\r\n className: string;\r\n onDismiss(): void;\r\n}\r\n\r\n/**\r\n *\r\n * CookieCompliance component.\r\n * @extends {React.PureComponent>}\r\n */\r\nclass CookieCompliance extends React.PureComponent, IAlertState> {\r\n private readonly cookieRef: React.RefObject;\r\n\r\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\r\n this.props.context.request.telemetryPageName!,\r\n this.props.friendlyName,\r\n this.props.telemetry\r\n );\r\n\r\n public constructor(props: IDobbiesCookieComplianceProps) {\r\n super(props);\r\n this.state = {\r\n visible: false,\r\n checkboxesChecked: [\r\n {\r\n name: CheckboxType.Functional,\r\n value: true\r\n },\r\n {\r\n name: CheckboxType.Analytics,\r\n value: true\r\n },\r\n {\r\n name: CheckboxType.Unclassified,\r\n value: true\r\n }\r\n ]\r\n };\r\n this.cookieRef = React.createRef();\r\n this._onDismiss = this._onDismiss.bind(this);\r\n }\r\n\r\n public componentDidMount(): void {\r\n const { context } = this.props;\r\n\r\n const cookieConsent = context.request.cookies.get('cookieConsent');\r\n const recentlyViewed = context.request.cookies.get('recently-viewed');\r\n\r\n if (context.request.cookies.isConsentGiven() && !cookieConsent?.value && !recentlyViewed?.value) {\r\n context.request.cookies.deleteConsentCookie();\r\n this.setState({ visible: true });\r\n }\r\n\r\n if (context && context.request && context.request.cookies && !context.request.cookies.isConsentGiven()) {\r\n this.setState({ visible: true });\r\n }\r\n }\r\n\r\n public handleCheckboxClicked(index: number) {\r\n const newCheckboxesChecked = [...this.state.checkboxesChecked];\r\n newCheckboxesChecked[index].value = !newCheckboxesChecked[index].value;\r\n this.setState({ checkboxesChecked: newCheckboxesChecked });\r\n }\r\n\r\n public render(): JSX.Element | null {\r\n const { config, context, resources, telemetry } = this.props;\r\n const { acceptCookiesButtonText, acceptCookiesAriaLabel } = resources;\r\n const { visible } = this.state;\r\n\r\n const isConsentGiven = context && context.request && context.request.cookies && context.request.cookies.isConsentGiven();\r\n let moduleConfig: IDobbiesCookieComplianceConfig;\r\n\r\n try {\r\n moduleConfig = config;\r\n } catch (error) {\r\n telemetry.error(`Something went wrong while rendering the alert module ------${error}`);\r\n // @ts-ignore\r\n return
{error}
;\r\n }\r\n\r\n if (isConsentGiven && !visible) {\r\n this.props.context.telemetry.error('Cookie Compliance content is empty, module wont render.');\r\n return null;\r\n }\r\n\r\n if (!MsDyn365.msdyn365Commerce.isBrowser) {\r\n return <>;\r\n }\r\n\r\n const viewProps = {\r\n ...this.props,\r\n onDismiss: this._onDismiss,\r\n CookieComplianceBanner: {\r\n moduleProps: this.props,\r\n className: classnames('ms-cookie-compliance', moduleConfig.className),\r\n ref: this.cookieRef\r\n },\r\n AlertProps: {\r\n className: 'ms-cookie-compliance__container',\r\n color: 'white',\r\n fade: false\r\n },\r\n Content: {\r\n className: 'ms-cookie-compliance__content'\r\n },\r\n text: moduleConfig.content && (\r\n \r\n ),\r\n checkboxes: (\r\n
\r\n
\r\n alert(this.props.config.functionalAlertText)}\r\n />{' '}\r\n \r\n
\r\n\r\n
\r\n this.handleCheckboxClicked(1)}\r\n />{' '}\r\n \r\n
\r\n\r\n
\r\n this.handleCheckboxClicked(2)}\r\n />{' '}\r\n \r\n
\r\n
\r\n ),\r\n links: ArrayExtensions.hasElements(moduleConfig.actionLinks) && (\r\n \r\n ),\r\n acceptButton: (\r\n \r\n )\r\n };\r\n\r\n return this.props.renderView(viewProps) as React.ReactElement;\r\n }\r\n\r\n /**\r\n * Handles Link content change event.\r\n * @param linkIndex - Index of link in linkarray.\r\n * @returns Void.\r\n */\r\n public handleLinkTextChange = (linkIndex: number) => (event: MsDyn365.ContentEditableEvent): void => {\r\n if (this.props.config.actionLinks?.[linkIndex]) {\r\n this.props.config.actionLinks[linkIndex].linkText = event.target.value;\r\n }\r\n };\r\n\r\n /**\r\n * Handles content change event.\r\n * @param event - Event.\r\n */\r\n public handleContentChange = (event: MsDyn365.ContentEditableEvent): void => {\r\n this.props.config.content = event.target.value;\r\n };\r\n\r\n private _onDismiss(): void {\r\n const { context } = this.props;\r\n\r\n if (context && context.request && context.request.cookies) {\r\n context.request.cookies.setConsentCookie();\r\n\r\n const cookieConsent = this.state.checkboxesChecked;\r\n context.request.cookies.set('cookieConsent', cookieConsent, {\r\n expires: new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365)\r\n });\r\n context.request.cookies.set('recently-viewed', [], { expires: new Date(new Date().getTime() + 1000 * 60 * 60 * 24 * 365) });\r\n location.reload();\r\n }\r\n this.setState({ visible: false });\r\n }\r\n}\r\n\r\nexport default CookieCompliance;\r\n","import { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IDobbiesModalProps {\r\n modalBodySlots?: React.ReactNode[];\r\n modalBodyElement?: JSX.Element;\r\n isOpen: boolean;\r\n className: string;\r\n modalTitle: JSX.Element;\r\n modalFooter: JSX.Element;\r\n}\r\n\r\nconst DobbiesModal: React.FC = (props: IDobbiesModalProps) => {\r\n return (\r\n \r\n {props.modalTitle && {props.modalTitle}}\r\n {props.modalBodySlots && {props.modalBodySlots}}\r\n {props.modalBodyElement && {props.modalBodyElement}}\r\n {props.modalFooter && {props.modalFooter}}\r\n \r\n );\r\n};\r\n\r\nexport default DobbiesModal;\r\n","import {\r\n CacheType,\r\n createObservableDataAction,\r\n IAction,\r\n IActionContext,\r\n IActionInput,\r\n IAny,\r\n ICreateActionContext,\r\n IGeneric\r\n} from '@msdyn365-commerce/core';\r\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\r\n\r\nimport { getFeatureStatesAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\r\n\r\n/**\r\n * Input class for the getFeatureState data action\r\n */\r\nexport class FeatureStateInput implements IActionInput {\r\n public readonly featureNames: string[] = [\r\n 'Dynamics.AX.Application.RetailB2BEcommerceFeature',\r\n 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature',\r\n 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature',\r\n 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\r\n ];\r\n\r\n public getCacheKey = () => `FeatureState`;\r\n public getCacheObjectType = () => 'FeatureState';\r\n public dataCacheType = (): CacheType => 'application';\r\n}\r\n\r\n/**\r\n * createInput method for the getFeatureState method\r\n * @param inputData The input data passed to the createInput method\r\n */\r\nexport const createGetFeatureStateInput = (inputData: ICreateActionContext>): IActionInput => {\r\n return new FeatureStateInput();\r\n};\r\n\r\n/**\r\n * The action method for the getFeatureState data action\r\n * @param input The action input\r\n * @param ctx The action context\r\n */\r\nexport async function getFeatureStateAction(input: FeatureStateInput, ctx: IActionContext): Promise {\r\n const featureState = await getFeatureStatesAsync({ callerContext: ctx }, input.featureNames);\r\n return featureState;\r\n}\r\n\r\n/**\r\n * The getFeatureState data action\r\n * Gets the feature state via the read RetailServer API\r\n * Returns address information associated with the retrieved customer\r\n */\r\nexport const getFeatureStateActionDataAction = createObservableDataAction({\r\n id: '@msdyn365-commerce-modules/retail-actions/get-feature-state',\r\n action: >getFeatureStateAction,\r\n input: createGetFeatureStateInput\r\n});\r\nexport default getFeatureStateActionDataAction;\r\n","import debounce from 'lodash/debounce';\r\nimport { reaction } from 'mobx';\r\nimport { observer } from 'mobx-react';\r\nimport * as React from 'react';\r\nimport { IQuantityProps } from './Quantity.props';\r\n\r\ninterface IQuantityState {\r\n currentInput: number;\r\n}\r\n/**\r\n * Quantity Component - This component is used to add or remove quantity\r\n */\r\n@observer\r\nexport default class Quantity extends React.PureComponent {\r\n public static defaultProps: Partial = {\r\n min: 1,\r\n decrementGlyphClass: 'fas fa-minus',\r\n incrementGlyphClass: 'fas fa-plus'\r\n };\r\n\r\n private inputRef: React.RefObject = React.createRef();\r\n\r\n constructor(props: IQuantityProps) {\r\n super(props);\r\n this.state = { currentInput: props.currentCount || 1 };\r\n this._onIncrement = this._onIncrement.bind(this);\r\n this._onDecrement = this._onDecrement.bind(this);\r\n this._handleChange = this._handleChange.bind(this);\r\n }\r\n public componentDidMount(): void {\r\n reaction(\r\n () => this.props.currentCount,\r\n () => {\r\n this.setState({ currentInput: this.props.currentCount || 1 });\r\n }\r\n );\r\n }\r\n public componentDidUpdate(): void {\r\n reaction(\r\n () => this.props.currentCount,\r\n () => {\r\n this.setState({ currentInput: this.props.currentCount || 1 });\r\n }\r\n );\r\n }\r\n\r\n public render(): JSX.Element {\r\n const glyphMinusClassName: string = `${this.props.decrementGlyphClass!} quantity__controls-glyph`;\r\n const glyphPlusClassName: string = `${this.props.incrementGlyphClass!} quantity__controls-glyph`;\r\n const disabled = this.state.currentInput === this.props.min;\r\n const incDisabled = this.state.currentInput === this.props.max;\r\n const currentValue = this.state.currentInput;\r\n let extraClass = '';\r\n if (disabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClass = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClass = 'transition';\r\n }\r\n let extraClassInc = '';\r\n if (incDisabled) {\r\n // The quantity has reached its boundaries (max or min)\r\n extraClassInc = 'disabled';\r\n } else if (this.props.disabled) {\r\n // this.props.disabled shows if the state is not succeded yet\r\n extraClassInc = 'transition';\r\n }\r\n return (\r\n <>\r\n
\r\n {this.props.hideQuantityControls !== true && (\r\n \r\n \r\n \r\n )}\r\n \r\n {this.props.hideQuantityControls !== true && (\r\n \r\n \r\n \r\n )}\r\n
\r\n \r\n );\r\n }\r\n\r\n private _onIncrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity < this.props.max) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity + 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = this.props.max;\r\n }\r\n\r\n invokeCallback && this.props.onChange && this.props.onChange(updatedQuantity);\r\n }\r\n\r\n private _onDecrement(): void {\r\n let invokeCallback = false;\r\n const currQuantity = this.state.currentInput;\r\n let updatedQuantity: number;\r\n\r\n if (currQuantity > 1) {\r\n invokeCallback = true;\r\n updatedQuantity = currQuantity - 1;\r\n } else {\r\n invokeCallback = false;\r\n updatedQuantity = 1;\r\n }\r\n\r\n invokeCallback && this.props.onChange && this.props.onChange(updatedQuantity);\r\n }\r\n\r\n private _handleChange(e: React.ChangeEvent): void {\r\n const currentValue = parseInt(e.target.value, 10);\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n const inputElement =\r\n this.inputRef && this.inputRef.current && this.inputRef.current instanceof HTMLInputElement && this.inputRef.current;\r\n\r\n if (currentValue > this.props.max) {\r\n this.setState({ currentInput: this.props.max }, () => {\r\n debounce(() => {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }, 200)();\r\n });\r\n } else {\r\n this.setState({ currentInput: currentValue }, () => {\r\n debounce(() => {\r\n if (!isNaN(this.state.currentInput) && !(this.state.currentInput < minValue)) {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n\r\n if (inputElement) {\r\n inputElement.setAttribute('aria-valuenow', currentValue.toString());\r\n inputElement.setAttribute('value', currentValue.toString());\r\n }\r\n }\r\n }, 200)();\r\n });\r\n }\r\n }\r\n\r\n private _validateMin = (): void => {\r\n const minValue = this.props.min === undefined ? 1 : this.props.min;\r\n if (isNaN(this.state.currentInput) || this.state.currentInput < minValue) {\r\n this.props.onChange && this.props.onChange(minValue);\r\n } else {\r\n this.props.onChange && this.props.onChange(this.state.currentInput);\r\n }\r\n };\r\n}\r\n","import classnames from 'classnames';\r\nimport React, { useEffect, useState } from 'react';\r\n\r\nimport { getPayloadObject, getTelemetryAttributes, IPopupProps, ITelemetryContent, Popup } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from '@msdyn365-commerce/components';\r\nimport { IComponent, IComponentProps, IGridSettings, IImageSettings, TelemetryEvent } from '@msdyn365-commerce/core';\r\nimport { getCartState, ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport { ProductAvailableQuantity, ProductDimension, ProductPrice, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { DobbiesModal } from '.';\r\n\r\nexport interface IDialogueStrings {\r\n goToCartText: string;\r\n continueShoppingText: string; // popupHeading\r\n headerItemOneText: string; // ageConfirmationHeaderText\r\n headerItemFormatText: string; // ageConfirmationText\r\n headerMessageText: string; // ageConfirmationFooterText\r\n freePriceText: string;\r\n originalPriceText: string;\r\n currentPriceText: string;\r\n ageRestrictionPopupHeading: string;\r\n ageRestrictionNote: string;\r\n ageConfirmation: string;\r\n ageVerificationDetails: string;\r\n cancelButtonLabel: string;\r\n buyBoxHeaderMessageText: string;\r\n buyBoxGoToCartText: string;\r\n}\r\n\r\nexport interface IAddToCartComponentProps extends IComponentProps<{ product: SimpleProduct; price?: ProductPrice }> {\r\n className?: string;\r\n addToCartText: string;\r\n addToCartTextHd: string;\r\n\r\n outOfStockText: string;\r\n disabled?: boolean;\r\n quantity?: number;\r\n navigationUrl?: string;\r\n productAvailability?: ProductAvailableQuantity;\r\n getSelectedProduct?: Promise;\r\n // VSI Customization to display pots products when plant product is added to bag\r\n plantsPotsProductsSlot?: React.ReactNode;\r\n potsProductCount?: number;\r\n // END\r\n imageSettings?: IImageSettings;\r\n gridSettings?: IGridSettings;\r\n\r\n isLoading?: boolean;\r\n isUpdatingDimension?: boolean;\r\n isAddServiceItemToCart?: boolean;\r\n /* Upgraded to 10.0.16 - START */\r\n isLoadingDeliveryOptions?: boolean;\r\n isUpdatingDeliveryOptions?: boolean;\r\n isAddEmailDeliveryItemToCart?: boolean;\r\n isPriceKeyedIn?: boolean;\r\n customPriceAmount?: number;\r\n isOrderQuantityLimitsFeatureEnabled?: boolean;\r\n /* Upgraded to 10.0.16 - END */\r\n dialogStrings?: IDialogueStrings;\r\n isAgeRestrictedProduct?: boolean;\r\n isFulfillmentProduct?: boolean;\r\n /* Upgraded to 10.0.16 - START */\r\n isCustomPriceSelected?: boolean;\r\n maximumKeyInPrice?: number;\r\n minimumKeyInPrice?: number;\r\n defaultMaximumKeyInPrice?: number;\r\n defaultMinimumKeyInPrice?: number;\r\n /* Upgraded to 10.0.16 - END */\r\n telemetryContent?: ITelemetryContent;\r\n\r\n onAdd?(result: ICartActionResult): void;\r\n onError?(result: IAddToCartFailureResult): void;\r\n changeUpdatingDimension?(isUpdatingDimension: boolean): void;\r\n /* Upgraded to 10.0.16 - START */\r\n changeUpdatingDeliveryOptions?(isUpdatingDeliveryOptions: boolean): void;\r\n /* Upgraded to 10.0.16 - END */\r\n onAddToCartClicked?(): void;\r\n}\r\n\r\nexport interface IAddToCartResult {\r\n addToCartButton: JSX.Element;\r\n isAddedToCart: boolean;\r\n}\r\n\r\nexport declare type ICartActionFailureReason =\r\n | 'EMPTYINPUT'\r\n | 'MISSINGDIMENSION'\r\n | 'OUTOFSTOCK'\r\n | 'CARTACTIONFAILED'\r\n | 'INVALIDCUSTOMAMOUNT'; /* Upgraded to 10.0.16 - INVALIDCUSTOMAMOUNT added */\r\nexport interface IAddToCartFailureResult {\r\n failureReason: ICartActionFailureReason;\r\n\r\n stockLeft?: number;\r\n cartActionResult?: ICartActionResult;\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\nexport interface IAddtoCartComponent extends IComponent {\r\n onClick(): (event: React.MouseEvent, props: IAddToCartComponentProps) => void;\r\n}\r\n\r\nconst onClick = async (\r\n _event: React.MouseEvent,\r\n props: IAddToCartComponentProps,\r\n setDisabled: (disabled: boolean) => void,\r\n openModal: (opened: boolean) => void,\r\n setAddedtoCart: React.Dispatch>,\r\n firstCase: boolean,\r\n toggleFirstCase: (firstCase: boolean) => void,\r\n setIsAgeRestrictionModalOpen: (disabled: boolean) => void,\r\n setChecked: (checked: boolean) => void,\r\n isAgeRestricted: boolean,\r\n setRelatedProductsModalOpen: React.Dispatch>\r\n): Promise => {\r\n const cartError = addToCartError(props);\r\n let productToAdd = props.data.product;\r\n\r\n if (cartError) {\r\n propogateError(props, cartError);\r\n return;\r\n }\r\n setDisabled(true);\r\n\r\n if (!(props.getSelectedProduct === undefined)) {\r\n productToAdd = (await props.getSelectedProduct) || props.data.product;\r\n }\r\n /* VSI Customization - START - 05/11/20 */\r\n /* If condition checks if product has age restriciton and 'Addtobasket' is clicked for the first time, open age restrcition popup */\r\n if (firstCase === true && isAgeRestricted === true) {\r\n toggleFirstCase(false);\r\n setIsAgeRestrictionModalOpen(true);\r\n setDisabled(false);\r\n setChecked(false);\r\n /* VSI Customization - END */\r\n } else {\r\n const cartState = await getCartState(props.context.actionContext);\r\n const {\r\n context: {\r\n app: { config }\r\n }\r\n } = props;\r\n\r\n const behavior = config && config.addToCartBehavior;\r\n\r\n await cartState\r\n .addProductToCart({\r\n product: productToAdd,\r\n count: props.quantity,\r\n availableQuantity: props.productAvailability && props.productAvailability.AvailableQuantity,\r\n additionalProperties: {\r\n orderQuantityLimitsFeatureIsEnabled: props.isOrderQuantityLimitsFeatureEnabled\r\n } /* Upgraded to 10.0.16 */,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n /* Upgraded to 10.0.16 - START */\r\n isPriceKeyedIn: props.isPriceKeyedIn,\r\n customPrice: props.customPriceAmount,\r\n isAddEmailDeliveryItemToCart: props.isAddEmailDeliveryItemToCart\r\n /* Upgraded to 10.0.16 - END */\r\n })\r\n .then(result => {\r\n if (result.status === 'SUCCESS') {\r\n if (props.dialogStrings && behavior === 'showModal') {\r\n setDisabled(false);\r\n openModal(true);\r\n } else if (props.navigationUrl && (behavior === undefined || behavior === 'nothing' || behavior === 'goToCart')) {\r\n /* VSI Customization - START - 26/10/20 */\r\n // Added addToCartBehavior === 'nothing' in if condition do the same when this settings is selected\r\n /* When user clicks on 'ADD TO BAG' button,\r\n - It would just ADD Product to CART and will not route to CART page.\r\n - 'ADD TO BAG' button will not be disabled */\r\n // window && window.location.assign(props.navigationUrl);\r\n setDisabled(false);\r\n setIsAgeRestrictionModalOpen(false);\r\n setAddedtoCart(true);\r\n // If product is of FulfillmentCategory, open related products popup\r\n props?.potsProductCount && props?.potsProductCount > 0 && setRelatedProductsModalOpen(true);\r\n /* VSI Customization - END */\r\n }\r\n propogateResult(props, result);\r\n } else {\r\n propogateError(props, { failureReason: 'CARTACTIONFAILED', cartActionResult: result });\r\n setDisabled(false);\r\n setAddedtoCart(false);\r\n }\r\n });\r\n }\r\n};\r\n\r\nconst AddToCartComponentActions = {\r\n onClick: onClick\r\n};\r\n\r\n/* VSI Customization - START - 06/11/20 */\r\n/* This function renders 'Add to Basket' button.\r\npopupAttributes decided whether to render it on PDP or on popup\r\nif rendered on popup, it has additional attributes */\r\nconst _getAddtoBasketButton = (\r\n props: IAddToCartComponentProps,\r\n _disabled: boolean,\r\n onClickHandler: (event: React.MouseEvent) => Promise,\r\n popupAttributes?:\r\n | {\r\n disabled: boolean;\r\n onClick(event: React.MouseEvent): Promise;\r\n }\r\n | {\r\n disabled: boolean;\r\n onClick?: undefined;\r\n }\r\n) => {\r\n const label = getLinkText(props);\r\n const payload = getPayloadObject(TelemetryEvent.AddToCart, props.telemetryContent!, label, '');\r\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\r\n const _popupAttributes = popupAttributes ? popupAttributes : undefined;\r\n const isOutOfStock = shouldShowOutOfStock(props, false);\r\n const [isHover, setIsHover] = useState(false);\r\n const isDisabled = props.disabled || _disabled || isIntermediateState(props) || isOutOfStock;\r\n return (\r\n {\r\n setIsHover(false);\r\n }}\r\n onMouseEnter={e => {\r\n if (!isDisabled) {\r\n setIsHover(true);\r\n }\r\n }}\r\n >\r\n \r\n
\r\n\r\n {getLinkText(props)}\r\n \r\n
\r\n );\r\n};\r\n/* VSI Customization - START - 05/11/20\r\n ** Converted component to function to return addedToCart variable */\r\nexport const AddToCart = (props: IAddToCartComponentProps): IAddToCartResult => {\r\n const [disabled, setDisabled] = useState(false);\r\n const [modalOpen, setModalOpen] = useState(false);\r\n /* VSI Customization - START - 26/10/20\r\n /* Following hook is used for age restriction popup.\r\n By default its value is true to handle first click and When user clicks 'Add to Cart' button for first time it sets to false for rest of the clicks */\r\n const [firstCase, toggleFirstCase] = useState(true);\r\n /* Following hook is used to open age restriction popup */\r\n const [isAgeRestrictionModalOpen, setIsAgeRestrictionModalOpen] = useState(false);\r\n /* Following hook is used to toggle checkbox on age restriction popup */\r\n const [checked, setChecked] = useState(false);\r\n const [isAgeRestricted, setIsAgeRestricted] = useState(false);\r\n /* Following Hook is used to check if product has been added to Cart or not when user clicks on 'ADD TO CART' button. */\r\n const [addedtoCart, setAddedtoCart] = useState(false);\r\n /* Following hook is used to display related products list if product is of FulfillmentCategory */\r\n const [relatedProductsModalOpen, setRelatedProductsModalOpen] = useState(false);\r\n\r\n useEffect(() => {\r\n props.isAgeRestrictedProduct && setIsAgeRestricted(props.isAgeRestrictedProduct);\r\n });\r\n /* Added one more parameter 'setAddedtoCart' to onClick method*/\r\n const onClickHandler = async (event: React.MouseEvent) => {\r\n await AddToCartComponentActions.onClick(\r\n event,\r\n props,\r\n setDisabled,\r\n setModalOpen,\r\n setAddedtoCart,\r\n firstCase,\r\n toggleFirstCase,\r\n setIsAgeRestrictionModalOpen,\r\n setChecked,\r\n isAgeRestricted,\r\n setRelatedProductsModalOpen\r\n );\r\n if(props.onAddToCartClicked) {\r\n props.onAddToCartClicked();\r\n }\r\n };\r\n\r\n /* VSI Customization - END */\r\n const priceComponent = props.data.price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'msc-add-to-cart',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data.product, price: props.data.price },\r\n dialogStrings: props.dialogStrings,\r\n imageSettings: props.imageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: props.quantity !== undefined ? props.quantity : 1,\r\n priceComponent: priceComponent,\r\n navigationUrl: props.navigationUrl,\r\n modalOpen: modalOpen,\r\n setModalOpen: setModalOpen\r\n };\r\n\r\n const renderModalPopup = ;\r\n const { dialogStrings, plantsPotsProductsSlot } = props;\r\n\r\n return {\r\n addToCartButton: (\r\n <>\r\n {renderModalPopup}\r\n {/* VSI Customization - START - 26/10/20 */}\r\n {/* Moved AddtoBasket button into a function as it is used twice one on PDP page, second on age restriction popup */}\r\n {_getAddtoBasketButton(props, disabled, onClickHandler)}\r\n {/* DobbiesModal is used for popups i.e. age restriction popup */}\r\n {dialogStrings && (\r\n \r\n )}\r\n }\r\n className='msc-dobbies-modal__add-to-cart-modal'\r\n />\r\n \r\n ),\r\n isAddedToCart: addedtoCart\r\n };\r\n};\r\n\r\n/* VSI Customization - START - 05/11/20 */\r\n\r\n// Following function renders popup body including checkbox\r\nconst displayRelatedProductsModule = (props: IAddToCartComponentProps): JSX.Element | undefined => {\r\n const { plantsPotsProductsSlot } = props;\r\n if (plantsPotsProductsSlot === null || plantsPotsProductsSlot === undefined) {\r\n return undefined;\r\n }\r\n return React.cloneElement(plantsPotsProductsSlot as React.ReactElement);\r\n};\r\n\r\n// Following function renders popup header\r\nconst addToCartModalTitle = (\r\n setModalOpen: (disabled: boolean) => void,\r\n toggleFirstCase: (firstCase: boolean) => void,\r\n setChecked: (checked: boolean) => void,\r\n props: IAddToCartComponentProps,\r\n isAgeRestrictionPopup?: boolean // Check if to render modal for age restriction popup or for related products\r\n): JSX.Element => {\r\n const closeModal = () => {\r\n setModalOpen(false);\r\n toggleFirstCase(true);\r\n setChecked(false);\r\n };\r\n\r\n const { dialogStrings } = props;\r\n\r\n return (\r\n
\r\n {dialogStrings && isAgeRestrictionPopup && (\r\n

{dialogStrings.ageRestrictionPopupHeading}

\r\n )}\r\n {!isAgeRestrictionPopup &&

Related Products

}\r\n \r\n
\r\n );\r\n};\r\n\r\n// Following function renders popup body including checkbox\r\nconst addToCartModalBody = (checked: boolean, setChecked: (checked: boolean) => void, props: IAddToCartComponentProps): JSX.Element => {\r\n function toggleCheckBox(): void {\r\n setChecked(!checked);\r\n }\r\n\r\n const { dialogStrings } = props;\r\n\r\n return (\r\n <>\r\n {dialogStrings ? (\r\n
\r\n

{dialogStrings.ageRestrictionNote}

\r\n \r\n

{dialogStrings.ageVerificationDetails}

\r\n
\r\n ) : (\r\n undefined\r\n )}\r\n \r\n );\r\n};\r\n// Following function renders popup footer including 'Add to Basket' button\r\nconst addToCartModalFooter = (\r\n checked: boolean,\r\n setChecked: (checked: boolean) => void,\r\n onClickHandler: (event: React.MouseEvent) => Promise,\r\n setAddtoCartModal: (disabled: boolean) => void,\r\n toggleFirstCase: (firstCase: boolean) => void,\r\n props: IAddToCartComponentProps,\r\n disabled: boolean\r\n): JSX.Element => {\r\n const closeModal = () => {\r\n setAddtoCartModal(false);\r\n toggleFirstCase(true);\r\n setChecked(false);\r\n };\r\n // if checkbox is checked, only then 'Add to Basket' button will be enabled\r\n const popupAttributes = checked ? { disabled: false, onClick: onClickHandler } : { disabled: true };\r\n return (\r\n
\r\n \r\n {_getAddtoBasketButton(props, disabled, onClickHandler, popupAttributes)}\r\n
\r\n );\r\n};\r\n/* VSI Customization - END - 06/11/20 */\r\n// Set default props\r\nAddToCart.defaultProps = {\r\n quantity: 1\r\n};\r\n\r\nconst getLinkText = (props: IAddToCartComponentProps) => {\r\n return shouldShowOutOfStock(props, false) ? props.outOfStockText : props.addToCartTextHd;\r\n};\r\n\r\nconst addToCartError = (props: IAddToCartComponentProps): IAddToCartFailureResult | undefined => {\r\n /* Upgraded to 10.0.16 - START */\r\n const {\r\n data,\r\n productAvailability,\r\n isCustomPriceSelected,\r\n customPriceAmount,\r\n maximumKeyInPrice,\r\n minimumKeyInPrice,\r\n defaultMaximumKeyInPrice = 100,\r\n defaultMinimumKeyInPrice = 10\r\n } = props;\r\n /* Upgraded to 10.0.16 - END */\r\n if (!data || !data.product.RecordId) {\r\n // No product exists, won't be able to add to cart\r\n return { failureReason: 'EMPTYINPUT' };\r\n }\r\n\r\n if (data.product.Dimensions) {\r\n const missingDimensions = data.product.Dimensions.filter(\r\n dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value)\r\n );\r\n\r\n if (missingDimensions.length > 0) {\r\n // At least one dimension with no value exists on the product, won't be able to add to cart\r\n return { failureReason: 'MISSINGDIMENSION', missingDimensions: missingDimensions };\r\n }\r\n }\r\n\r\n if (shouldShowOutOfStock(props, true)) {\r\n const availableQuantity = (productAvailability && productAvailability.AvailableQuantity) || 0;\r\n const stockLeft = Math.max(availableQuantity, 0);\r\n\r\n return { failureReason: 'OUTOFSTOCK', stockLeft: stockLeft };\r\n }\r\n /* Upgraded to 10.0.16 - START */\r\n // When Custom price is selected, if there is no keyed-in price or keyed-in price is out of limit, should return error.\r\n if (\r\n isCustomPriceSelected &&\r\n (!customPriceAmount ||\r\n customPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice) ||\r\n customPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice))\r\n ) {\r\n return { failureReason: 'INVALIDCUSTOMAMOUNT' };\r\n }\r\n /* Upgraded to 10.0.16 - END */\r\n // Only allow adding to cart if not showing out of stock\r\n return undefined;\r\n};\r\n\r\nconst shouldShowOutOfStock = (props: IAddToCartComponentProps, includeCurrentQuantity: boolean): boolean => {\r\n if (\r\n props.context.app.config.enableStockCheck === undefined ||\r\n props.context.app.config.enableStockCheck === false ||\r\n props.isLoading ||\r\n props.isUpdatingDimension ||\r\n props.isAddServiceItemToCart ||\r\n /* Upgraded to 10.0.16 - START */\r\n props.isLoadingDeliveryOptions ||\r\n props.isUpdatingDeliveryOptions\r\n /* Upgraded to 10.0.16 - END */\r\n ) {\r\n // Out of stock turn off, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (!props.data || !props.data.product.RecordId) {\r\n // No product exists, don't bother showing out of stock\r\n return false;\r\n }\r\n\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also don't show out of stock\r\n return false;\r\n }\r\n }\r\n const includedQuantityNumber = includeCurrentQuantity && props.quantity ? props.quantity : 1;\r\n\r\n return props.productAvailability &&\r\n props.productAvailability.AvailableQuantity !== undefined &&\r\n props.productAvailability.AvailableQuantity >= includedQuantityNumber\r\n ? false\r\n : true;\r\n};\r\n\r\nconst isIntermediateState = (props: IAddToCartComponentProps): boolean => {\r\n if (props.data.product.Dimensions) {\r\n if (props.data.product.Dimensions.find(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value))) {\r\n // At least one dimension with no value exists on the product, so also not in intermediate state\r\n return false;\r\n }\r\n }\r\n\r\n if (\r\n !props.isLoading &&\r\n !props.isUpdatingDimension &&\r\n /* Upgraded to 10.0.16 - START */\r\n !props.isLoadingDeliveryOptions &&\r\n !props.isUpdatingDeliveryOptions\r\n /* Upgraded to 10.0.16 - END */\r\n ) {\r\n return false;\r\n }\r\n\r\n return true;\r\n};\r\n\r\nconst propogateResult = (props: IAddToCartComponentProps, result: ICartActionResult): void => {\r\n if (props.onAdd) {\r\n props.onAdd(result);\r\n }\r\n};\r\n\r\nconst propogateError = (props: IAddToCartComponentProps, result: IAddToCartFailureResult): void => {\r\n if (props.onError) {\r\n props.onError(result);\r\n }\r\n};\r\n\r\n/* export const AddToCartComponent: React.FunctionComponent = msdyn365Commerce.createComponent(\r\n 'AddToCart',\r\n { component: AddToCart, ...AddToCartComponentActions }\r\n); */\r\n\r\nexport default AddToCart;\r\n","import { IAddToCartFailureResult } from '@msdyn365-commerce/components';\r\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\r\nimport { ICartState } from '@msdyn365-commerce/global-state';\r\nimport { OrgUnitLocation, ProductAvailableQuantity, ProductDimension, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IBuyboxResources } from '../../../definition-extensions/buybox.ext.props.autogenerated';\r\n\r\nexport function getQuantityError(stockLeft: number | undefined, resources: IBuyboxResources): string | undefined {\r\n if (!stockLeft || stockLeft <= 0) {\r\n return resources.outOfStockTextForHd;\r\n } else if (stockLeft === 1) {\r\n return resources.errorMessageOutOfRangeOneLeft;\r\n } else {\r\n return resources.errorMessageOutOfRangeFormat.replace('{numLeft}', stockLeft.toString());\r\n }\r\n}\r\n\r\n// tslint:disable-next-line:cyclomatic-complexity\r\nexport function getGenericError(\r\n result: IAddToCartFailureResult,\r\n cart: ICartState | undefined,\r\n resources: IBuyboxResources,\r\n context: ICoreContext>,\r\n product: SimpleProduct | undefined,\r\n productAvailability: ProductAvailableQuantity | undefined,\r\n location: OrgUnitLocation | undefined\r\n): string | undefined {\r\n if (result.failureReason === 'EMPTYINPUT') {\r\n return resources.addedToCartFailureMessage;\r\n } else if (result.failureReason === 'CARTACTIONFAILED') {\r\n if (result.cartActionResult && result.cartActionResult.substatus === 'MAXQUANTITY') {\r\n // get the quantity of the product in cart\r\n let elementFoundAt: number = -1;\r\n const productIdToFind = product && product.RecordId;\r\n\r\n for (let i = 0; i < cart!.cart.CartLines!.length; i++) {\r\n if (\r\n cart!.cart.CartLines![i].ProductId === productIdToFind &&\r\n (cart!.cart.CartLines![i].DeliveryMode || '') ===\r\n ((location &&\r\n context.actionContext.requestContext.channel &&\r\n context.actionContext.requestContext.channel.PickupDeliveryModeCode) ||\r\n '') &&\r\n (cart!.cart.CartLines![i].FulfillmentStoreId || '') === ((location && location.OrgUnitNumber) || '')\r\n ) {\r\n elementFoundAt = i;\r\n\r\n break;\r\n }\r\n }\r\n\r\n let curQuantity: number = 0;\r\n\r\n if (elementFoundAt !== -1) {\r\n const cartLineToUpdate = { ...cart!.cart.CartLines![elementFoundAt] };\r\n curQuantity = cartLineToUpdate.Quantity || 0;\r\n }\r\n\r\n // get the quantity limit for the product\r\n const maxQuantityForCartLineItem = context.app.config.maxQuantityForCartLineItem;\r\n const availableQty = productAvailability && productAvailability.AvailableQuantity;\r\n\r\n let quantityLimit: number;\r\n\r\n if (maxQuantityForCartLineItem === undefined && availableQty === undefined) {\r\n quantityLimit = 10;\r\n } else if (availableQty === undefined) {\r\n quantityLimit = maxQuantityForCartLineItem;\r\n } else if (maxQuantityForCartLineItem === undefined) {\r\n quantityLimit = availableQty;\r\n } else {\r\n quantityLimit = Math.min(maxQuantityForCartLineItem, availableQty);\r\n }\r\n\r\n return resources.maxQuantityLimitText\r\n .replace('{curQuantity}', curQuantity.toString())\r\n .replace('{maxQuantity}', quantityLimit.toString());\r\n } else if (result.cartActionResult && result.cartActionResult.substatus === 'QUANTITYLIMITS') {\r\n return result.cartActionResult?.errorDetails?.LocalizedMessage;\r\n }\r\n\r\n return resources.addedToCartFailureMessage;\r\n }\r\n\r\n return undefined;\r\n}\r\n\r\nexport function getConfigureErrors(\r\n result: ProductDimension[] | undefined,\r\n resources: IBuyboxResources,\r\n isGiftCard?: Boolean\r\n): { [configureId: string]: string | undefined } {\r\n if (!result) {\r\n return {};\r\n }\r\n\r\n const dimensions: { [configureId: string]: string | undefined } = {};\r\n\r\n result.forEach(dimension => {\r\n dimensions[dimension.DimensionTypeValue] = getDimensionErrorString(dimension.DimensionTypeValue, resources, isGiftCard);\r\n });\r\n\r\n return dimensions;\r\n}\r\n\r\nexport function getDimensionErrorString(dimensionTypeValue: number, resources: IBuyboxResources, isGiftCard?: Boolean): string {\r\n switch (dimensionTypeValue) {\r\n case 1: // ProductDimensionType.Color\r\n return resources.productDimensionTypeColorErrorMessage;\r\n case 2: // ProductDimensionType.Configuration\r\n return resources.productDimensionTypeConfigurationErrorMessage;\r\n case 3: // ProductDimensionType.Size\r\n return resources.productDimensionTypeSizeErrorMessage;\r\n case 4: // ProductDimensionType.Style\r\n return isGiftCard ? resources.productDimensionTypeAmountErrorMessage : resources.productDimensionTypeStyleErrorMessage;\r\n default:\r\n return '';\r\n }\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { IBuyboxCallbacks, IBuyboxData, IBuyboxResources, IBuyboxState, IBuyboxViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { Alert, getTelemetryObject, INodeProps, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\r\nimport { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { IBuyboxProps, IBuyboxResources as IBuyboxViewResources } from '../../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { IBuyboxData as IBuyboxViewData } from '../buybox.data';\r\nimport AddToCart, { IAddToCartComponentProps, IAddToCartFailureResult } from './add-to-cart-component';\r\nimport { getConfigureErrors, getGenericError, getQuantityError } from './utilities/error-utilities';\r\n\r\nexport interface IBuyboxAddToCartViewProps {\r\n ContainerProps: INodeProps;\r\n errorBlock?: React.ReactNode;\r\n button?: React.ReactNode;\r\n isError?: boolean; // VSI Customization\r\n isAddedToCart?: boolean; // VSI Customization - To check if product added to cart on clicking 'Addtobag' button\r\n}\r\n\r\nexport interface IBuyboxErrorBlockProps {\r\n configureErrors: { [configureId: string]: string | undefined };\r\n quantityError?: string;\r\n customAmountError?: string;\r\n otherError?: string;\r\n resources: IBuyboxResources;\r\n showError: boolean;\r\n}\r\n/* VSI Customization - START - 25/01/21 */\r\nexport interface IErrorMessage {\r\n SetIsError: React.Dispatch>;\r\n}\r\n/* VSI Customization - END */\r\nlet telemetryContent: ITelemetryContent;\r\nexport const BuyboxErrorBlock: React.FC = ({\r\n showError,\r\n configureErrors,\r\n quantityError,\r\n customAmountError,\r\n otherError,\r\n resources,\r\n SetIsError\r\n}) => {\r\n let errorMessages: (string | undefined)[] = [];\r\n\r\n errorMessages = Object.values(configureErrors).filter(message => message !== undefined);\r\n\r\n if (quantityError) {\r\n errorMessages.push(quantityError);\r\n SetIsError(true);\r\n }\r\n\r\n if (customAmountError) {\r\n errorMessages.push(customAmountError);\r\n }\r\n\r\n if (otherError) {\r\n errorMessages.push(otherError);\r\n SetIsError(true);\r\n }\r\n\r\n return (\r\n 0}\r\n color='danger'\r\n assertive={true}\r\n aria-label={resources.buyboxErrorMessageHeader}\r\n >\r\n \r\n {errorMessages.map(message => {\r\n if (message) {\r\n return
{message}
;\r\n } else {\r\n return null;\r\n }\r\n })}\r\n \r\n );\r\n};\r\n/* Upgraded - 10.0.16 - START */\r\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\r\nconst _isOrderQuantityLimitsFeatureEnabled = (props: IBuyboxProps): boolean | undefined => {\r\n const isFeatureEnabledInHq = props.data.featureState.result?.find(\r\n featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName\r\n )?.IsEnabled;\r\n if (!isFeatureEnabledInHq) {\r\n return false;\r\n }\r\n const defaultOrderQuantityLimitsFeatureConfig = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n\r\n const customerInfo = props.data.customerInformation.result;\r\n return (\r\n customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n};\r\n/* Upgraded - END */\r\n// tslint:disable-next-line: max-func-body-length\r\nexport default function getBuyboxAddToCart(\r\n props: IBuyboxViewProps & IBuyboxProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n resources: IBuyboxViewResources,\r\n isAgeRestricted: boolean,\r\n defaultMinimumKeyInPrice: number,\r\n defaultMaximumKeyInPrice: number,\r\n onAddToCartClicked? : ()=>void\r\n): IBuyboxAddToCartViewProps {\r\n const {\r\n id,\r\n typeName,\r\n context,\r\n config: { minimumKeyInPrice, maximumKeyInPrice },\r\n slots: { plantsPotsProductsSlot },\r\n data: {\r\n cart: { result: cart },\r\n product: { result: product },\r\n productAvailableQuantity: { result: productAvailableQuantity },\r\n productAttributes: { result: productAttributes },\r\n plantPotsProductCountState: { result: plantPotsProductCountState }\r\n }\r\n } = props;\r\n // Check if there is pots products, display popup otherwise not\r\n const plantPotsProductCount = plantPotsProductCountState?.potsProductCount || 0;\r\n const {\r\n request: {\r\n app: {\r\n config: { fulfillmentAttributeName, fulfillmentAttributeTextValue }\r\n }\r\n }\r\n } = props.context;\r\n const attributeName = fulfillmentAttributeName\r\n ? fulfillmentAttributeName\r\n .toString()\r\n .toLowerCase()\r\n .trim()\r\n : 'fulfillmenttype';\r\n const attributeTextValue = fulfillmentAttributeTextValue\r\n ? fulfillmentAttributeTextValue\r\n .toString()\r\n .toLowerCase()\r\n .trim()\r\n : 'plants';\r\n\r\n const fulfillmentTypeAttribute = productAttributes?.find(attribute => attribute?.Name?.toLowerCase() === attributeName);\r\n const isPlantFulfillment = fulfillmentTypeAttribute && fulfillmentTypeAttribute.TextValue?.toLowerCase() === attributeTextValue;\r\n const [isError, SetIsError] = React.useState(false);\r\n const {\r\n quantity,\r\n errorState: { configureErrors, quantityError, otherError, errorHost, customAmountError },\r\n selectedProduct,\r\n isUpdatingDimension,\r\n isServiceItem,\r\n isUpdatingDeliveryOptions,\r\n keyInPriceAmount\r\n } = state;\r\n\r\n const productAvailability = state.productAvailableQuantity\r\n ? state.productAvailableQuantity.ProductAvailableQuantity\r\n : productAvailableQuantity && productAvailableQuantity.length\r\n ? productAvailableQuantity[0].ProductAvailableQuantity\r\n : undefined;\r\n\r\n const onAddToCartFailed = (result: IAddToCartFailureResult) => {\r\n let quantityErrorForState: string | undefined;\r\n let customAmountErrorForState: string | undefined;\r\n let otherErrorForState: string | undefined = getGenericError(\r\n result,\r\n cart,\r\n resources,\r\n context,\r\n product,\r\n productAvailability,\r\n undefined\r\n );\r\n if (result.failureReason === 'OUTOFSTOCK') {\r\n quantityErrorForState = result.failureReason === 'OUTOFSTOCK' ? getQuantityError(result.stockLeft, resources) : undefined;\r\n } else if (\r\n result.failureReason === 'CARTACTIONFAILED' &&\r\n result.cartActionResult &&\r\n (result.cartActionResult.substatus === 'MAXQUANTITY' || result.cartActionResult.substatus === 'QUANTITYLIMITS')\r\n ) {\r\n quantityErrorForState = getGenericError(result, cart, resources, context, product, productAvailability, undefined);\r\n otherErrorForState = undefined; // prevent error duplication in otherError and quantityError\r\n }\r\n if (result.failureReason === 'INVALIDCUSTOMAMOUNT') {\r\n if (keyInPriceAmount === undefined || keyInPriceAmount < (minimumKeyInPrice || defaultMinimumKeyInPrice)) {\r\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(minimumKeyInPrice || defaultMinimumKeyInPrice, context.request.channel?.Currency);\r\n customAmountErrorForState = resources.invalidSmallCustomAmountText.replace('{minAmount}', formatedAmountLimit);\r\n } else if (keyInPriceAmount > (maximumKeyInPrice || defaultMaximumKeyInPrice)) {\r\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(maximumKeyInPrice || defaultMaximumKeyInPrice, context.request.channel?.Currency);\r\n customAmountErrorForState = resources.invalidLargeCustomAmountText.replace('{maxAmount}', formatedAmountLimit);\r\n }\r\n }\r\n callbacks.updateErrorState({\r\n errorHost: 'ADDTOCART',\r\n quantityError: quantityErrorForState,\r\n configureErrors:\r\n result.failureReason === 'MISSINGDIMENSION'\r\n ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard)\r\n : {},\r\n customAmountError: customAmountErrorForState,\r\n otherError: otherErrorForState\r\n });\r\n };\r\n\r\n const dialogStrings = {\r\n goToCartText: resources.buyBoxGoToCartText,\r\n continueShoppingText: resources.buyBoxContinueShoppingText,\r\n headerItemOneText: resources.buyBoxSingleItemText,\r\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\r\n headerMessageText: resources.buyBoxHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText,\r\n ageRestrictionPopupHeading: resources.ageRestrictionPopupHeading,\r\n ageRestrictionNote: resources.ageRestrictionNote,\r\n ageConfirmation: resources.ageConfirmation,\r\n ageVerificationDetails: resources.ageVerificationDetails,\r\n cancelButtonLabel: resources.cancelButtonLabel,\r\n buyBoxHeaderMessageText: resources.buyBoxHeaderMessageText,\r\n buyBoxGoToCartText: resources.buyBoxGoToCartText\r\n };\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=240&h=240&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n\r\n const isLoading = props.data.productAvailableQuantity.status === 'LOADING';\r\n const isLoadingDeliveryOptions = typeName !== 'quickview' && props.data.deliveryOptions?.status === 'LOADING';\r\n if (isLoadingDeliveryOptions && callbacks.changeUpdatingDeliveryOptions) {\r\n callbacks.changeUpdatingDeliveryOptions(false);\r\n }\r\n if (isLoading) {\r\n callbacks.changeUpdatingDimension(false);\r\n }\r\n telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\r\n\r\n // check if the product delivery mode is electronic\r\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\r\n const deliveryOptions = props.data.deliveryOptions?.result;\r\n const isEmailDelivery =\r\n deliveryOptions &&\r\n deliveryOptions.DeliveryOptions &&\r\n ArrayExtensions.hasElements(deliveryOptions.DeliveryOptions) &&\r\n deliveryOptions.DeliveryOptions[0].Code === emailDeliveryModeCode;\r\n let addToCartResult;\r\n if (product) {\r\n const addToCartComponentProps: IAddToCartComponentProps = {\r\n addToCartText: resources.addToCartText,\r\n outOfStockText: resources.outOfStockTextForHd,\r\n addToCartTextHd: resources.addToCartTextHd,\r\n navigationUrl: getUrlSync('cart', context.actionContext),\r\n quantity: quantity,\r\n data: { product: product, price: state.productPrice },\r\n isAgeRestrictedProduct: isAgeRestricted, // To display age restriction popup\r\n isFulfillmentProduct: isPlantFulfillment /* && plantPotsProductCount > 0 */, // To display popup against fulfillment type products and if there is any product(s) available\r\n plantsPotsProductsSlot: plantsPotsProductsSlot && plantsPotsProductsSlot[0], // To display pots products on clicking add-to-bag button for plant products\r\n potsProductCount: plantPotsProductCount,\r\n context: context,\r\n id: id,\r\n typeName: typeName,\r\n isUpdatingDeliveryOptions: isUpdatingDeliveryOptions,\r\n onError: onAddToCartFailed,\r\n isLoadingDeliveryOptions: isLoadingDeliveryOptions,\r\n changeUpdatingDeliveryOptions: callbacks.changeUpdatingDeliveryOptions,\r\n getSelectedProduct: selectedProduct,\r\n productAvailability: productAvailability,\r\n isLoading: isLoading,\r\n isUpdatingDimension: isUpdatingDimension,\r\n changeUpdatingDimension: callbacks.changeUpdatingDimension,\r\n dialogStrings: dialogStrings,\r\n gridSettings: props.context.request.gridSettings,\r\n imageSettings: defaultImageSettings,\r\n telemetryContent: telemetryContent,\r\n isAddServiceItemToCart: isServiceItem,\r\n isPriceKeyedIn: state.isPriceKeyedIn,\r\n customPriceAmount: state.keyInPriceAmount,\r\n isCustomPriceSelected: state.isCustomPriceSelected,\r\n maximumKeyInPrice: props.config.maximumKeyInPrice,\r\n minimumKeyInPrice: props.config.minimumKeyInPrice,\r\n defaultMinimumKeyInPrice: defaultMinimumKeyInPrice,\r\n defaultMaximumKeyInPrice: defaultMaximumKeyInPrice,\r\n isOrderQuantityLimitsFeatureEnabled: _isOrderQuantityLimitsFeatureEnabled(props),\r\n isAddEmailDeliveryItemToCart: isEmailDelivery,\r\n onAddToCartClicked: onAddToCartClicked\r\n };\r\n addToCartResult = AddToCart(addToCartComponentProps);\r\n }\r\n return {\r\n ContainerProps: {\r\n className: 'ms-buybox__add-to-cart-container'\r\n },\r\n button: addToCartResult && addToCartResult.addToCartButton,\r\n errorBlock: (\r\n \r\n ),\r\n isError: isError,\r\n isAddedToCart: addToCartResult && addToCartResult.isAddedToCart\r\n };\r\n}\r\n","import * as React from 'react';\r\n\r\nimport { IBuyboxCallbacks, IBuyboxData, IBuyboxState, IBuyboxViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport { Heading, INodeProps, IPopupProps, Popup } from '@msdyn365-commerce-modules/utilities';\r\nimport { IAddToCartFailureResult, PriceComponent } from '@msdyn365-commerce/components';\r\nimport { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\r\nimport { DeliveryOption, ProductDimension } from '@msdyn365-commerce/retail-proxy';\r\nimport { IBuyboxProps, IBuyboxResources as IBuyboxViewResources } from '../../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { IBuyboxData as IBuyboxViewData } from '../buybox.data';\r\nimport { BuyboxErrorBlock } from './get-add-to-cart';\r\nimport { getConfigureErrors, getGenericError } from './utilities/error-utilities';\r\nexport interface IFindInStoreFailureResult {\r\n missingDimensions?: ProductDimension[];\r\n}\r\n\r\nexport interface IBuyboxFindInStoreViewProps {\r\n storeSelector?: React.ReactNode;\r\n storeSelectors?: React.ReactNode;\r\n\r\n heading?: React.ReactNode;\r\n description?: React.ReactNode;\r\n errors?: React.ReactNode;\r\n clickAndCollect?: React.ReactNode;\r\n checkStock?: React.ReactNode;\r\n productPickupOptionList?: React.ReactNode;\r\n\r\n modal?: React.ReactNode;\r\n\r\n ContainerProps: INodeProps;\r\n /* VSI Customization - START - 12/02/21 - To display error if any */\r\n isError?: boolean;\r\n isAddedToCart?: boolean;\r\n /* VSI Customization - END */\r\n openFindInStoreDialog(): Promise;\r\n}\r\n\r\n// Custom Implementation of Buybox props\r\n\r\n// tslint:disable-next-line: max-func-body-length\r\nexport function getBuyboxFindInStore(\r\n props: IBuyboxViewProps & IBuyboxProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n resources: IBuyboxViewResources,\r\n onAddToCartClicked? : ()=>void\r\n): IBuyboxFindInStoreViewProps | undefined {\r\n const {\r\n data,\r\n slots: { storeSelectors },\r\n resources: {\r\n priceFree,\r\n originalPriceText,\r\n currentPriceText,\r\n findInStoreHeaderText,\r\n findInStoreDescriptionText,\r\n findInStoreLinkText,\r\n buyBoxGoToCartText,\r\n buyBoxContinueShoppingText,\r\n buyBoxSingleItemText,\r\n buyBoxMultiLineItemFormatText,\r\n buyBoxHeaderMessageText,\r\n descriptionTextToShowAllPickupOptions\r\n }\r\n } = props;\r\n\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const [isError, SetIsError] = React.useState(false);\r\n const [isAddedToCart, SetIsAddedToCart] = React.useState(false);\r\n const [localSelected, setLocalSelected] = React.useState(1);\r\n const [hasCnC, setHasCnC] = React.useState(false);\r\n const [isHover, setIsHover] = React.useState(false);\r\n const product = data?.product?.result;\r\n const price = data?.productPrice?.result;\r\n const storeSelectorStateManager = data?.storeSelectorStateManager?.result;\r\n const deliveryOptions = data?.deliveryOptions?.result;\r\n const retailMulitplePickupMFeatureState = data?.featureState?.result?.find(\r\n featureState => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n const {\r\n errorState: { configureErrors, quantityError, otherError, errorHost },\r\n modalOpen,\r\n quantity\r\n } = state;\r\n\r\n const optionCnC = deliveryOptions?.DeliveryOptions?.find(option => option.Code === 'ClickCol');\r\n React.useEffect(() => {\r\n if (storeSelectorStateManager && storeSelectors && storeSelectors.length !== 0 && optionCnC) {\r\n const allAttributes = props.data.productAttributes.result;\r\n\r\n const isvendorShippedAttribute =\r\n allAttributes &&\r\n allAttributes.find(attribute => {\r\n const attributeName = attribute.Name && attribute.Name.trim().toLowerCase();\r\n return attributeName === 'isvendershipproduct';\r\n });\r\n const isVendorShipTextValue =\r\n isvendorShippedAttribute && isvendorShippedAttribute.TextValue && isvendorShippedAttribute.TextValue.trim().toLowerCase();\r\n const isVendorShiped = isVendorShipTextValue && (isVendorShipTextValue === 'yes' || isVendorShipTextValue === 'true');\r\n !!isVendorShiped === false && setHasCnC(true);\r\n }\r\n }, [product]);\r\n\r\n const onClick = (val: number) => findInStoreOnClick(props, state, callbacks, resources, SetIsAddedToCart, val, setLocalSelected, onAddToCartClicked);\r\n // if (!product || !storeSelectorStateManager || storeSelectors.length === 0) {\r\n // return undefined;\r\n // }\r\n // // If no delivery options present on the product, or none of the delivery options\r\n // // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\r\n // if (!deliveryOptions || !deliveryOptions.DeliveryOptions || !PickupDeliveryModeCode || !deliveryOptions.DeliveryOptions.find(option => option.Code === PickupDeliveryModeCode)) {\r\n // return undefined;\r\n // }\r\n const dialogStrings = {\r\n goToCartText: buyBoxGoToCartText,\r\n continueShoppingText: buyBoxContinueShoppingText,\r\n headerItemOneText: buyBoxSingleItemText,\r\n headerItemFormatText: buyBoxMultiLineItemFormatText,\r\n headerMessageText: buyBoxHeaderMessageText,\r\n freePriceText: priceFree,\r\n originalPriceText: originalPriceText,\r\n currentPriceText: currentPriceText\r\n };\r\n const priceComponent = price ? (\r\n \r\n ) : (\r\n ''\r\n );\r\n const defaultImageSettings: IImageSettings = {\r\n viewports: {\r\n xs: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n lg: { q: `w=240&h=240&m=6`, w: 0, h: 0 },\r\n xl: { q: `w=240&h=240&m=6`, w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n const popupProps: IPopupProps = {\r\n context: props.context,\r\n className: 'ms-buybox',\r\n id: props.id,\r\n typeName: props.typeName,\r\n data: { product: props.data.product?.result, price: props.data.productPrice?.result },\r\n dialogStrings: dialogStrings,\r\n imageSettings: defaultImageSettings,\r\n gridSettings: props.context.request.gridSettings,\r\n productQuantity: quantity,\r\n priceComponent: priceComponent,\r\n navigationUrl: getUrlSync('cart', props.context.actionContext),\r\n modalOpen: modalOpen,\r\n setModalOpen: callbacks.changeModalOpen\r\n };\r\n const renderModalPopup = ;\r\n\r\n return {\r\n ContainerProps: {\r\n className: 'ms-buybox__find-in-store'\r\n },\r\n storeSelector: storeSelectors[localSelected],\r\n openFindInStoreDialog: () => onClick(0),\r\n heading: ,\r\n description:

{findInStoreDescriptionText}

,\r\n productPickupOptionList: retailMulitplePickupMFeatureState ? (\r\n \r\n

{descriptionTextToShowAllPickupOptions}

\r\n
    \r\n {deliveryOptions?.DeliveryOptions?.map((item: DeliveryOption) => {\r\n return (\r\n
  • \r\n {item.Description}\r\n
  • \r\n );\r\n })}\r\n
\r\n
\r\n ) : null,\r\n errors: (\r\n \r\n ),\r\n checkStock: (\r\n onClick(1)}\r\n aria-label='Check stock in your local store'\r\n >\r\n
\r\n
\r\n {/* isCnC is not used for now, the stores are displayed in general */}\r\n\r\n {true ? 'Check stock in your local store' : 'Unavailable in your local store'}\r\n
\r\n \r\n ),\r\n clickAndCollect: optionCnC && (\r\n \r\n ),\r\n isError: isError,\r\n isAddedToCart: isAddedToCart,\r\n modal: renderModalPopup\r\n };\r\n}\r\n\r\n// tslint:disable-next-line: max-func-body-length\r\nasync function findInStoreOnClick(\r\n props: IBuyboxViewProps & IBuyboxProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n resources: IBuyboxViewResources,\r\n SetIsAddedToCart: React.Dispatch>,\r\n val: number,\r\n setLocalSelected: React.Dispatch>,\r\n onAddToCartClicked? : ()=>void\r\n): Promise {\r\n const {\r\n data: {\r\n storeSelectorStateManager: { result: storeSelectorStateManager },\r\n cart: { result: cart },\r\n productAvailableQuantity: { result: productAvailableQuantity }\r\n },\r\n context,\r\n modules\r\n } = props;\r\n\r\n const { selectedProduct, quantity } = state;\r\n\r\n setLocalSelected(val);\r\n\r\n let dataProduct = props.data.product.result;\r\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\r\n const retailMulitplePickupMFeatureState = props.data?.featureState?.result?.find(\r\n featureState => featureState.Name === multiplePickupStoreSwitchName\r\n )?.IsEnabled;\r\n\r\n if (selectedProduct) {\r\n dataProduct = (await selectedProduct) || dataProduct;\r\n }\r\n\r\n if (!dataProduct || !storeSelectorStateManager) {\r\n return;\r\n }\r\n\r\n const product = dataProduct;\r\n\r\n const missingDimensions =\r\n product.Dimensions && product.Dimensions.filter(dimension => !(dimension.DimensionValue && dimension.DimensionValue.Value));\r\n let storeSelectorId: string = '';\r\n if (modules && Object.keys(modules).length > 0 && modules.storeSelectors && modules.storeSelectors.length > 0) {\r\n storeSelectorId = modules.storeSelectors[val].id;\r\n }\r\n\r\n if (missingDimensions && missingDimensions.length > 0) {\r\n if (callbacks.updateErrorState) {\r\n callbacks.updateErrorState({\r\n errorHost: 'FINDINSTORE',\r\n configureErrors: getConfigureErrors(missingDimensions, resources)\r\n });\r\n }\r\n } else {\r\n storeSelectorStateManager\r\n .openDialog({\r\n product,\r\n id: storeSelectorId,\r\n deliveryOptions: retailMulitplePickupMFeatureState ? props.data.deliveryOptions.result : undefined,\r\n onLocationSelected: (orgUnitLocation, deliveryMode) => {\r\n if (!cart) {\r\n return Promise.resolve();\r\n }\r\n\r\n const {\r\n context: {\r\n app: { config }\r\n }\r\n } = props;\r\n const behavior = config && config.addToCartBehavior;\r\n\r\n return cart\r\n .addProductToCart({ product: product, count: quantity, location: orgUnitLocation, deliveryMode: deliveryMode })\r\n .then(result => {\r\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\r\n callbacks.changeModalOpen(false);\r\n\r\n const productAvailability = state.productAvailableQuantity\r\n ? state.productAvailableQuantity.ProductAvailableQuantity\r\n : productAvailableQuantity && productAvailableQuantity.length\r\n ? productAvailableQuantity[0].ProductAvailableQuantity\r\n : undefined;\r\n\r\n const failureResult: IAddToCartFailureResult = {\r\n failureReason: 'CARTACTIONFAILED',\r\n cartActionResult: { status: result.status, substatus: result.substatus }\r\n };\r\n callbacks.updateErrorState({\r\n errorHost: 'ADDTOCART',\r\n configureErrors: {},\r\n otherError: getGenericError(\r\n failureResult,\r\n cart,\r\n resources,\r\n context,\r\n product,\r\n productAvailability,\r\n orgUnitLocation\r\n )\r\n });\r\n } else {\r\n if (behavior === undefined || behavior === 'goToCart' || behavior === 'nothing') {\r\n if (result.status === 'SUCCESS') {\r\n SetIsAddedToCart(true);\r\n if (onAddToCartClicked) {\r\n onAddToCartClicked();\r\n }\r\n }\r\n } else if (behavior === 'showModal') {\r\n callbacks.updateErrorState({\r\n configureErrors: {}\r\n });\r\n callbacks.changeModalOpen(true);\r\n }\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.exception(error);\r\n props.telemetry.debug('Unable to add product to cart');\r\n }\r\n return;\r\n });\r\n }\r\n })\r\n .catch((error: Error) => {\r\n if (props.telemetry) {\r\n props.telemetry.error(error.message);\r\n props.telemetry.debug('Unable to find in store');\r\n }\r\n return;\r\n });\r\n }\r\n\r\n return;\r\n}\r\n","// tslint:disable\r\n/* eslint-disable security/detect-object-injection */\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as Entities from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\r\n\r\n/**\r\n * VSIRestAPIHandler entity interface.\r\n */\r\nexport interface IVSIRestAPIHandler {\r\n Id: number;\r\n result?: string;\r\n ExtensionProperties?: Entities.CommerceProperty[];\r\n}\r\n\r\n/**\r\n * VSIRestAPIHandler entity class.\r\n */\r\nexport class VSIRestAPIHandlerExtensionClass implements IVSIRestAPIHandler {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public Id: number;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public result: Object;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n public ExtensionProperties: Entities.CommerceProperty[];\r\n\r\n // Navigation properties names\r\n\r\n /**\r\n * Construct an object from odata response.\r\n * @param {any} odataObject The odata result object.\r\n */\r\n constructor(odataObject?: any) {\r\n odataObject = odataObject || {};\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.Id = odataObject.Id;\r\n\r\n var newObj = {\r\n Status: odataObject.Status,\r\n NoOfTransactions: odataObject.NoOfTransactions\r\n };\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n // this.result = odataObject.result;\r\n this.result = newObj;\r\n\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties = undefined;\r\n if (odataObject.ExtensionProperties) {\r\n this.ExtensionProperties = [];\r\n for (var i = 0; i < odataObject.ExtensionProperties.length; i++) {\r\n if (odataObject.ExtensionProperties[i]) {\r\n if (odataObject.ExtensionProperties[i]['@odata.type']) {\r\n var className: string = odataObject.ExtensionProperties[i]['@odata.type'];\r\n className = className.substr(className.lastIndexOf('.') + 1).concat('Class');\r\n if (EntityClasses[className]) {\r\n this.ExtensionProperties[i] = new EntityClasses[className](odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n this.ExtensionProperties[i] = new EntityClasses.CommercePropertyClass(odataObject.ExtensionProperties[i]);\r\n }\r\n } else {\r\n // @ts-ignore - TODO bug fix #23427261 - remove ts-ignore - https://microsoft.visualstudio.com/DefaultCollection/OSGS/_workitems/edit/23427261/\r\n this.ExtensionProperties[i] = undefined;\r\n }\r\n }\r\n }\r\n }\r\n}\r\n","/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n * THIS FILE IS AN AUTOGENERATED TYPESCRIPT PROXY EXTENSION.\r\n * TO USE THIS FILE, IT MUST BE ADDED TO A D365COMMERCE APPLICATION\r\n */\r\n// tslint:disable\r\nimport { AsyncResult, callActionOrExecute, DataServiceQuery, IContext, IDataServiceRequest } from '@msdyn365-commerce/retail-proxy';\r\n// @ts-ignore\r\nimport * as EntityClasses from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceModels.g';\r\nimport * as DataServiceEntities from './BackInStockDataService.g';\r\n\r\n// @ts-ignore\r\nfunction vSIGetAPIResponseQuery(id?: number): DataServiceQuery {\r\n const key = id ? { Id: id } : null;\r\n return new DataServiceQuery('VSIGetRestAPIResponse', 'VSIRestAPIHandler', DataServiceEntities.VSIRestAPIHandlerExtensionClass, key);\r\n}\r\n\r\nexport function createVSIInitiateRestCallInput(\r\n customerId: string,\r\n customerEmailAddress: string,\r\n productCode: string,\r\n company: string,\r\n quantity: string,\r\n emailSent: boolean,\r\n productCodeRefRecId: number\r\n): IDataServiceRequest {\r\n const query = vSIGetAPIResponseQuery();\r\n return query.createDataServiceRequestForOperation(\r\n 'VSI_AddPorductInterest',\r\n true,\r\n DataServiceEntities.VSIRestAPIHandlerExtensionClass,\r\n 'false',\r\n { bypassCache: 'get', returnEntity: 'DataServiceEntities.IVSIRestAPIHandler' },\r\n { customerId, customerEmailAddress, productCode, company, quantity, emailSent, productCodeRefRecId }\r\n );\r\n}\r\n\r\nexport function vSIInitiateRestCallAsync(\r\n context: IContext,\r\n customerId: string,\r\n customerEmailAddress: string,\r\n productCode: string,\r\n company: string,\r\n quantity: string,\r\n emailSent: boolean,\r\n productCodeRefRecId: number\r\n): AsyncResult {\r\n const request = createVSIInitiateRestCallInput(\r\n customerId,\r\n customerEmailAddress,\r\n productCode,\r\n company,\r\n quantity,\r\n emailSent,\r\n productCodeRefRecId\r\n );\r\n return callActionOrExecute(request, context.callerContext);\r\n}\r\n","/*---------------------------------------------------------------------------------------------\r\n * Copyright (c) Microsoft Corporation. All rights reserved.\r\n * Licensed under the MIT License. See License.txt in the project root for license information.\r\n *--------------------------------------------------------------------------------------------*/\r\n// @ts-ignore\r\nimport {\r\n IBuyboxAddToWishlistViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxShopSimilarLookViewProps\r\n} from '@msdyn365-commerce-modules/buybox/src/common/buyboxInterface';\r\nimport { IBuyboxCallbacks, IBuyboxData, IBuyboxState, IBuyboxViewProps } from '@msdyn365-commerce-modules/buybox/src/modules/buybox/../..';\r\nimport { RatingsSummary } from '@msdyn365-commerce/commerce-entities';\r\nimport { Module, Node, Button } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { AttributeValue, ProductPrice, SimpleProduct, ProjectionDomain, DiscountLine, Cart, DeliveryOption } from '@msdyn365-commerce/retail-proxy';\r\n/* VSI Customization - START - 27/10/20 */\r\nimport classnames from 'classnames';\r\nimport React, { useEffect, useRef, useState } from 'react';\r\nimport { IBuyboxProps, IBuyboxResources } from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { Quantity } from '../utilities/quantity';\r\nimport { IBuyboxData as IBuyboxViewData } from './buybox.data';\r\nimport { CustomCollapse } from './custom-components';\r\nimport getBuyboxAddToCart, { IBuyboxAddToCartViewProps } from './custom-components/get-add-to-cart';\r\nimport { getBuyboxFindInStore, IBuyboxFindInStoreViewProps } from './custom-components/get-buybox-find-in-store';\r\nimport DobbiesModal from '../../../modules/dobbies-marketing-content-block/components/dobbies-modal';\r\nimport { vSIInitiateRestCallAsync } from '../../../dotdigital-extension/BackInStockDataAction.g';\r\nimport { getCartFromCustomer } from '@msdyn365-commerce/global-state';\r\nimport {\r\n getActivePricesAsync,\r\n getDeliveryOptionsAsync,\r\n getEstimatedAvailabilityAsync\r\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport { CheckboxType, ICheckboxState } from '../../../modules/dobbies-cookie-compliance/dobbies-cookie-compliance';\r\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\r\nimport { getByIdsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\nimport {\r\n ArrayExtensions,\r\n QueryResultSettingsProxy,\r\n getFallbackImageUrl\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { CartModulesStateShareInput } from '../../../actions/cart-state-share';\r\nimport { IDobbiesAddedProductToBundle } from '../../../modules/dobbies-product-collection/dobbies-product-collection';\r\nimport get from 'lodash/get';\r\nimport { Modal, ModalBody } from '@msdyn365-commerce-modules/utilities';\r\nimport { PriceComponent } from './custom-components/product-price-component';\r\nimport { getCartState } from '@msdyn365-commerce/global-state';\r\nimport { cartLineQuantityUpdatedAsync } from '@msdyn365-commerce-modules/cart-utilities';\r\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\r\nimport MsDyn365 from '@msdyn365-commerce/core';\r\nimport { _getCartItemMaxQuantity } from '../../../modules/dobbies-cart/components/dobbies-cart-line-items';\r\nimport { getAllOrgUnitLocationsByArea, GetAllOrgUnitLocationsByAreaInput } from '../../../actions/get-all-store-location-information';\r\nimport { IFullOrgUnitAvailability } from '../actions/utilities/full-org-unit-availability';\r\n\r\nexport interface IDobbiesMiniCartSummaryProduct extends SimpleProduct {\r\n quantity?: number;\r\n}\r\n/* VSI Customization - END -*/\r\n\r\n// const NON_HD_DELIVERY_LINES = ['ClickCol', 'Common MOD'];\r\nlet counter: number = 0;\r\nconst BuyboxView: React.FC> = props => {\r\n const {\r\n ModuleProps,\r\n ProductInfoContainerProps,\r\n addToWishlist,\r\n configure,\r\n title,\r\n rating,\r\n shopSimilarLook,\r\n resources: { productCodeText },\r\n context: {\r\n actionContext: {\r\n requestContext: { cookies }\r\n }\r\n }\r\n } = props;\r\n\r\n const {\r\n data: { ratingsSummary, productAttributes, productPrice, product },\r\n config: { selectedAttributes, backInStockText, thankYouText },\r\n quantity,\r\n callbacks,\r\n state,\r\n resources,\r\n slots: { ageRestrictionNotification }\r\n } = props;\r\n\r\n const pageUrl = props.context.request.url.requestUrl.href.toString();\r\n const imageUrl = props.context.request.apiSettings.baseImageUrl.toString();\r\n\r\n const allAttributes = productAttributes.result;\r\n const defaultMinimumKeyInPrice = 10;\r\n const defaultMaximumKeyInPrice = 100;\r\n /* VSI Customization - START - 27/10/20 */\r\n const onAddToCartClicked = () => {\r\n if(props.context.app.config.showProductBundlesInModal) {\r\n setRenderProductBundlesModal(true);\r\n }\r\n };\r\n const findInStore = getBuyboxFindInStore(props, state, callbacks, resources, onAddToCartClicked);\r\n const reviewsCount = ratingsSummary && ratingsSummary.result && ratingsSummary.result.reviewsCount;\r\n\r\n const mediaGalleryRef = useRef(null);\r\n\r\n /* Following hook is used to set attributes value to state */\r\n const [attributes, setAttributes] = useState([]);\r\n const [isVendorShipped, SetIsVendorShipped] = useState(true); // Check if product is vendor ship, hide click & collect option\r\n const [isAgeRestricted, SetIsAgeRestricted] = useState(false); // Check if product has age restriction\r\n const [productAddedToCart, SetProductAddedToCart] = useState(false); // Check if product is added to cart or not\r\n const navigationUrl = Msdyn365.getUrlSync('cart', props.context.actionContext); // Url to goto cart on clicking addtocart notification\r\n const [isProductAvailable, setIsProductAvailable] = useState(true); // Checks if product is oos, display back in stock form\r\n const [isValidEmail, setIsValidEmail] = useState(true); // Check whether its valid email or not\r\n const [isFormSubmitted, setIsFormSubmitted] = useState(false); // Check if form for back in stock notification is submitted or not\r\n // const [requiredQuantity] = useState(1); // Check required quantity of product for customer\r\n const [platform, setPlatform] = useState('');\r\n const [backInStockModalIsOpen] = useState(false);\r\n const [customerEmail, setCustomerEmail] = useState('');\r\n const [privacyPolicyChecked, setPrivacyPolicyChecked] = useState(false);\r\n const [isCnCProductAvailable, setIsCnCProductAvailable] = useState(false);\r\n const [showBackInStockModal, setShowBackInStockModal] = useState(false);\r\n const [displayClubPlusInfo, setDisplayClubPlusInfo] = useState(false);\r\n const [discountLines, setDiscountLines] = useState<(DiscountLine[] | undefined)[]>();\r\n const [, setCustomerAffiliations] = useState(undefined);\r\n // @ts-ignore\r\n const [showProdPrice, setShowProdPrice] = useState(false);\r\n const [activePrices, setActivePrices] = useState<(number | undefined)[]>();\r\n\r\n const appleStoreUrl = props.config.appleStoreUrl ?? 'https://apps.apple.com/us/app/planta-keep-your-plants-alive/id1410126781';\r\n const googlePlayUrl = props.config.googlePlayUrl ?? 'https://play.google.com/store/apps/details?id=com.stromming.planta';\r\n\r\n const isQuickView = !!props.context.request?.query?.isQuickView ?? false;\r\n const [cartProducts, setCartProducts] = useState([]);\r\n const [renderProductBundlesModal, setRenderProductBundlesModal] = useState(false);\r\n const [bundlesSummaryScrollPos, setBundlesSummaryScrollPos] = useState(0);\r\n const [bundlesModalSummaryScrollPos, setBundlesModalSummaryScrollPos] = useState(0);\r\n const [allBundleProductsOOS, setAllBundleProductsOOS] = useState(false);\r\n /* VSI Customization - END - 19/9/2023 */\r\n const equalsCheck = (a: number[], b: number[]) => {\r\n return a.length === b.length && a.every((v, i) => v === b[i]);\r\n }\r\n\r\n useEffect(() => {\r\n if (props.data.bundleProductsShareState.result?.areAllBundleProductsOOS === true && !allBundleProductsOOS) {\r\n setAllBundleProductsOOS(true);\r\n } else if (props.data.bundleProductsShareState.result?.areAllBundleProductsOOS === false && allBundleProductsOOS) {\r\n setAllBundleProductsOOS(false);\r\n }\r\n\r\n }, [props.data.bundleProductsShareState.result])\r\n\r\n const isMaximumQuantityAdded = (): boolean => {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const productsAddedInBundles = cookies.get(\"added_products_bundles\")?.value || [];\r\n const productList = new Array();\r\n const simpleProducts: SimpleProduct[] = cartProducts.filter(cp => {\r\n if (Array.isArray(productsAddedInBundles)) {\r\n const ap = productsAddedInBundles.find(addedp => addedp['productId'] === cp.RecordId);\r\n return ap ? true : false;\r\n }\r\n return false;\r\n });\r\n simpleProducts.map(p => {\r\n let quantity = 1;\r\n if (Array.isArray(productsAddedInBundles)) {\r\n const ap = productsAddedInBundles.find(addedp => addedp['productId'] === p.RecordId);\r\n quantity = ap['quantity'];\r\n const prodInCart = props.data.cart.result?.cart.CartLines?.find(cl => cl.ProductId === ap['productId']);\r\n if(prodInCart && prodInCart.Quantity) {\r\n if((quantity + prodInCart.Quantity) > ap['maxQuantity']) {\r\n quantity = -1;\r\n }\r\n }\r\n }\r\n productList.push({\r\n product: p,\r\n count: quantity,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n });\r\n });\r\n for(const sp of productList) {\r\n if (sp.count === -1) {\r\n return true;\r\n }\r\n }\r\n return false;\r\n }\r\n const _addAllProductsToCart = async(): Promise => {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const productsAddedInBundles = cookies.get(\"added_products_bundles\")?.value || [];\r\n const productList = new Array();\r\n const allStores = await _getAllStores(props, 31.5070767, 74.4315609, 0, 0);\r\n const simpleProducts: SimpleProduct[] = cartProducts.filter(cp => {\r\n if (Array.isArray(productsAddedInBundles)) {\r\n const ap = productsAddedInBundles.find(addedp => addedp['productId'] === cp.RecordId);\r\n return ap ? true : false;\r\n }\r\n return false;\r\n });\r\n simpleProducts.map(p => {\r\n let quantity = 1;\r\n if (Array.isArray(productsAddedInBundles)) {\r\n const ap = productsAddedInBundles.find(addedp => addedp['productId'] === p.RecordId);\r\n quantity = ap['quantity'];\r\n const prodInCart = props.data.cart.result?.cart.CartLines?.find(cl => cl.ProductId === ap['productId']);\r\n if(prodInCart && prodInCart.Quantity) {\r\n if((quantity + prodInCart.Quantity) > ap['maxQuantity']) {\r\n quantity = -1;\r\n }\r\n }\r\n const inventoryLocationId = ap['inventoryLocationId'];\r\n if (inventoryLocationId) {\r\n const storeLocation = allStores.find(sl => {\r\n return sl.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId === inventoryLocationId\r\n });\r\n if (storeLocation && storeLocation.OrgUnitAvailability?.OrgUnitLocation) {\r\n productList.push({ product: p, count: quantity, location: storeLocation.OrgUnitAvailability?.OrgUnitLocation, deliveryMode: 'ClickCol' });\r\n // productList.push({\r\n // product: p,\r\n // count: quantity,\r\n // enableStockCheck: props.context.app.config.enableStockCheck,\r\n // });\r\n }\r\n } else {\r\n productList.push({\r\n product: p,\r\n count: quantity,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n });\r\n }\r\n }\r\n \r\n // productList.push({\r\n // product: p,\r\n // count: quantity,\r\n // enableStockCheck: props.context.app.config.enableStockCheck,\r\n // });\r\n });\r\n for(const sp of productList) {\r\n if (sp.count === -1) {\r\n return;\r\n }\r\n }\r\n props.data.cart.result\r\n ?.addProductsToCart(productList)\r\n .then((result) => {\r\n MsDyn365.isBrowser && window && window.location.assign('/cart');\r\n cookies.remove('added_products_bundles');\r\n })\r\n .catch(error => {\r\n console.error('Error', error);\r\n });\r\n }\r\n const updateCartProduct = async() => {\r\n const productIds: number[] = props.data.cart.result?.cart.CartLines ? props.data.cart.result?.cart.CartLines?.map(cartline => cartline.ProductId || -1) : [];\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const addedProducts = cookies.get(\"added_products_bundles\")?.value || [];\r\n if(Array.isArray(addedProducts)) {\r\n for (const ap of addedProducts) {\r\n if (!productIds.includes(ap['productId'])) {\r\n productIds.push(ap['productId']);\r\n }\r\n }\r\n }\r\n const productBundleProducts = cookies.get(\"productBundle_products\");\r\n const updatedProductIds: number[] = [];\r\n if (Array.isArray(productIds)) {\r\n for (const prodId of productIds) {\r\n if (productBundleProducts && Array.isArray(productBundleProducts.value) && productBundleProducts.value['length'] > 0) {\r\n for(const prodBP of productBundleProducts.value){\r\n if(+prodBP.itemId === prodId){\r\n updatedProductIds.push(prodId)\r\n }\r\n }\r\n }\r\n }\r\n }\r\n let simpleProductsData = ArrayExtensions.validValues(\r\n await getByIdsAsync(\r\n {\r\n callerContext: props.context.actionContext,\r\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(props.context.actionContext)\r\n },\r\n props.context.actionContext.requestContext.apiSettings.channelId ? props.context.actionContext.requestContext.apiSettings.channelId : -1,\r\n updatedProductIds,\r\n null,\r\n props.context.actionContext.requestContext.apiSettings.catalogId\r\n )\r\n );\r\n \r\n let simpleProductsWithQuantities = simpleProductsData.map(sp => {\r\n const prodWithQuantity: IDobbiesMiniCartSummaryProduct = {...sp, quantity: 1};\r\n const cl = props.data.cart.result?.cart.CartLines?.find(c => c.ProductId === prodWithQuantity.RecordId);\r\n if(Array.isArray(addedProducts)) {\r\n for (const ap of addedProducts) {\r\n if (prodWithQuantity.RecordId === ap['productId']) {\r\n prodWithQuantity.quantity = ap['quantity'];\r\n if(cl && prodWithQuantity.quantity && cl.Quantity) {\r\n prodWithQuantity.quantity += cl.Quantity;\r\n }\r\n }\r\n }\r\n }\r\n if(cl && cl.Quantity && prodWithQuantity.quantity && (prodWithQuantity.quantity <= cl.Quantity)) {\r\n prodWithQuantity.quantity = cl.Quantity;\r\n }\r\n return prodWithQuantity;\r\n });\r\n const simpleProdIds = simpleProductsWithQuantities.map(prod => prod.RecordId);\r\n const cartProductIds = cartProducts.map(cartProd => cartProd.RecordId);\r\n \r\n if(!equalsCheck(simpleProdIds, cartProductIds)) {\r\n const projectDomain: ProjectionDomain = {\r\n ChannelId: props.context.request.apiSettings.channelId,\r\n CatalogId: props.context.request.apiSettings.catalogId\r\n };\r\n const pIds = simpleProductsWithQuantities.map(p => p.RecordId);\r\n await getActivePricesAsync(\r\n {\r\n callerContext: props.context.actionContext,\r\n queryResultSettings: {}\r\n },\r\n projectDomain,\r\n pIds,\r\n new Date(),\r\n null,\r\n null,\r\n true\r\n ).then((activePricesResponse: ProductPrice[]) => {\r\n if (activePricesResponse && activePricesResponse.length > 0) {\r\n simpleProductsWithQuantities = simpleProductsWithQuantities.map(sp => {\r\n const activePrice = activePricesResponse.find(price => price.ProductId === sp.RecordId);\r\n if (activePrice) {\r\n sp.Price = activePrice.CustomerContextualPrice ?? sp.Price;\r\n sp.BasePrice = Math.max(\r\n activePrice.BasePrice || 0,\r\n activePrice.TradeAgreementPrice || 0,\r\n activePrice.AdjustedPrice || 0\r\n );\r\n }\r\n return sp;\r\n });\r\n }\r\n }).catch((error: Error) => {\r\n });\r\n setCartProducts(simpleProductsWithQuantities);\r\n } else {\r\n if(simpleProductsWithQuantities) {\r\n let needsUpdate = false;\r\n for (const cp of cartProducts) {\r\n const ap = simpleProductsWithQuantities.find(p => p.RecordId === cp.RecordId);\r\n if (ap?.quantity !== cp.quantity) {\r\n needsUpdate = true;\r\n }\r\n }\r\n if(needsUpdate) {\r\n const projectDomain: ProjectionDomain = {\r\n ChannelId: props.context.request.apiSettings.channelId,\r\n CatalogId: props.context.request.apiSettings.catalogId\r\n };\r\n const pIds = simpleProductsWithQuantities.map(p => p.RecordId);\r\n await getActivePricesAsync(\r\n {\r\n callerContext: props.context.actionContext,\r\n queryResultSettings: {}\r\n },\r\n projectDomain,\r\n pIds,\r\n new Date(),\r\n null,\r\n null,\r\n true\r\n ).then((activePricesResponse: ProductPrice[]) => {\r\n if (activePricesResponse && activePricesResponse.length > 0) {\r\n simpleProductsWithQuantities = simpleProductsWithQuantities.map(sp => {\r\n const activePrice = activePricesResponse.find(price => price.ProductId === sp.RecordId);\r\n if (activePrice) {\r\n sp.Price = activePrice.CustomerContextualPrice ?? sp.Price;\r\n sp.BasePrice = Math.max(\r\n activePrice.BasePrice || 0,\r\n activePrice.TradeAgreementPrice || 0,\r\n activePrice.AdjustedPrice || 0\r\n );\r\n }\r\n return sp;\r\n });\r\n }\r\n }).catch((error: Error) => {\r\n });\r\n setCartProducts(simpleProductsWithQuantities);\r\n }\r\n }\r\n }\r\n props.context.actionContext.update(new CartModulesStateShareInput(), {isCartUpdated: false});\r\n };\r\n\r\n const addToCart = getBuyboxAddToCart(\r\n props,\r\n state,\r\n callbacks,\r\n resources,\r\n isAgeRestricted,\r\n defaultMinimumKeyInPrice,\r\n defaultMaximumKeyInPrice,\r\n onAddToCartClicked\r\n );\r\n\r\n const { errorBlock, isError } = addToCart;\r\n\r\n const displayClubPlus = () => {\r\n setDisplayClubPlusInfo(!displayClubPlusInfo);\r\n };\r\n\r\n // Validates email\r\n const validateEmail = (email: string) => {\r\n const regix = /^(([^<>()\\[\\]\\\\.,;:\\s@\"]+(\\.[^<>()\\[\\]\\\\.,;:\\s@\"]+)*)|(\".+\"))@((\\[[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\.[0-9]{1,3}\\])|(([a-zA-Z\\-0-9]+\\.)+[a-zA-Z]{2,}))$/;\r\n return regix.test(String(email).toLowerCase());\r\n };\r\n const handleNotifyMeClick = () => {\r\n setPrivacyPolicyChecked(false);\r\n setCustomerEmail(props.context.request.user.emailAddress ?? '');\r\n setIsValidEmail(true);\r\n setShowBackInStockModal(true);\r\n };\r\n\r\n const _renderProductTitle = (): string => {\r\n // @ts-ignore\r\n var prodTitle = title?.props?.text;\r\n const attrEcom = allAttributes && allAttributes.find(s => s.Name === 'EComName');\r\n if (attrEcom && attrEcom.TextValue !== '' && attrEcom.TextValue !== null) {\r\n prodTitle = attrEcom?.TextValue;\r\n } else {\r\n // @ts-ignore\r\n prodTitle = title?.props?.text;\r\n }\r\n return prodTitle;\r\n };\r\n useEffect(() => {\r\n updateCartProduct();\r\n }, [props.data.cart.result?.cart.CartLines]);\r\n useEffect(()=> {\r\n if(props.data.cartSharedState?.result?.isCartUpdated) {\r\n updateCartProduct();\r\n }\r\n }, [props.data.cartSharedState.result?.isCartUpdated]);\r\n useEffect(() => {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n cookies.remove('added_products_bundles');\r\n cookies.remove('pdp_product_quantity_for_bundles');\r\n setCartProducts([]);\r\n updateCartProduct();\r\n\r\n }, []);\r\n // Render Popup title\r\n const _renderPopupTitle = () => {\r\n // const { popUpHeading } = props.config;\r\n return (\r\n \r\n setShowBackInStockModal(false)} className='newsletter-popup-cross' />\r\n\r\n \r\n \r\n );\r\n };\r\n\r\n const getPlatform = () => {\r\n if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Windows Phone/i.test(navigator.userAgent)) {\r\n if (navigator.userAgent.match(/Android/i)) {\r\n setPlatform('Android');\r\n } else if (navigator.userAgent.match(/iPhone|iPad|iPod/i)) {\r\n setPlatform('IOS');\r\n }\r\n } else {\r\n setPlatform('Web');\r\n }\r\n };\r\n\r\n const getProductPrices = async () => {\r\n try {\r\n const priceAffiliations = [\r\n {\r\n AffiliationId: props.context.app.config.AffiliationId,\r\n LoyaltyTierId: props.context.app.config.LoyaltyTierId,\r\n AffiliationTypeValue: props.context.app.config.AffiliationTypeValue,\r\n ReasonCodeLines: [],\r\n CustomerId: '',\r\n ExtensionProperties: []\r\n }\r\n ];\r\n\r\n const productRecIds: any = [];\r\n productRecIds.push(product.result?.RecordId);\r\n const projectDomain: ProjectionDomain = {\r\n ChannelId: props.context.request.apiSettings.channelId,\r\n CatalogId: props.context.request.apiSettings.catalogId\r\n };\r\n const cart = await getCartFromCustomer(props.context.actionContext);\r\n // const affliations = cart?.AffiliationLines;\r\n setCustomerAffiliations(cart);\r\n\r\n await getActivePricesAsync(\r\n { callerContext: props.context.actionContext, queryResultSettings: {} },\r\n projectDomain,\r\n productRecIds,\r\n new Date(),\r\n null,\r\n priceAffiliations,\r\n true\r\n )\r\n .then((activePricesResponse: ProductPrice[]) => {\r\n // const productPrices = activePricesResponse;\r\n const discountLine = activePricesResponse.map(priceResp => priceResp.DiscountLines);\r\n const customerContextPrice = activePricesResponse.map(priceResp => priceResp.CustomerContextualPrice);\r\n\r\n if (discountLine) {\r\n setActivePrices(customerContextPrice);\r\n setDiscountLines(discountLine);\r\n setShowProdPrice(true);\r\n }\r\n })\r\n .catch((error: Error) => {\r\n setShowProdPrice(true);\r\n props.context.actionContext.trace(error.message);\r\n props.context.actionContext.telemetry.exception(error);\r\n props.context.actionContext.telemetry.debug(\r\n '[get Affiliation based price on search result container ]Error executing action'\r\n );\r\n throw new Error('[get Affiliation based price on search result container]Error executing action');\r\n });\r\n } catch (err) {\r\n console.log(err, 'ERROR');\r\n }\r\n };\r\n //VSI CUSTOMIZATION -START - Check current loyalty tier id.\r\n const getTierId = () => {\r\n if (props.data.loyaltyCard.result?.LoyaltyGroups!?.length > 0) {\r\n const highestActiveLoyaltyCardTier = props.data.loyaltyCard.result!.LoyaltyGroups![0]?.HighestActiveLoyaltyCardTier;\r\n const loyaltyCardTiers = props.data.loyaltyCard.result!.LoyaltyGroups![0]?.LoyaltyCardTiers;\r\n const loyaltyCardTier = loyaltyCardTiers?.find(tier => tier.RecordId === highestActiveLoyaltyCardTier);\r\n return loyaltyCardTier?.LoyaltyTierRecordId;\r\n }\r\n return undefined;\r\n };\r\n //VSI CUSTOMIZATION -END\r\n const checkUserDiscounts =\r\n discountLines &&\r\n discountLines.map(val => {\r\n return val && val.find(x => x.OfferId === props.context.app.config.discountId);\r\n });\r\n\r\n // const checkUserDiscounts = discountLines && discountLines.find(x => x.OfferId === \"D000000002\")\r\n const checkUserLoyalty = getTierId() === props.context.app.config.LoyaltyTierId ? true : undefined;\r\n // customerAffiliations &&\r\n // customerAffiliations.AffiliationLines &&\r\n // customerAffiliations.AffiliationLines.find(x => x.LoyaltyTierId === props.context.app.config.LoyaltyTierId);\r\n\r\n // Render popup footer\r\n\r\n const _renderPopupFooter = () => {\r\n return <>;\r\n };\r\n // Render popup body to show input fields\r\n const _renderPopupBody = () => {\r\n return (\r\n
\r\n
\r\n {props.context.request.user.isAuthenticated ? (\r\n <>\r\n

Please enter your email address and we'll email you when the item becomes available

\r\n

\r\n Email address: \r\n {props.context.request.user.emailAddress}\r\n

\r\n

Want to send to another email address

\r\n \r\n ) : (\r\n

Please enter your email address and we'll email you when the item becomes available

\r\n )}\r\n
\r\n {/*
\r\n \r\n
*/}\r\n
\r\n onChangeEmail(e)}\r\n aria-label='Email address'\r\n className='email-address-input-text'\r\n placeholder={props.resources.emailAddressPlaceholderText}\r\n value={customerEmail}\r\n required\r\n />\r\n
\r\n\r\n {/*
\r\n onChangeQuantity(e)}\r\n aria-label='Quantity'\r\n placeholder={props.resources.emailAddressPlaceholderText}\r\n value={requiredQuantity}\r\n required\r\n />\r\n\r\n
*/}\r\n\r\n {!isValidEmail &&
Please input valid email
}\r\n\r\n
\r\n
\r\n
\r\n onChangePrivacy(e)}\r\n id='privacyPolicyCheckbox'\r\n />\r\n \r\n

\r\n I accept the{' '}\r\n \r\n Privacy Policy\r\n \r\n

\r\n
\r\n
\r\n
\r\n
\r\n\r\n
\r\n showThankyouNote(props, customerEmail)}\r\n className='msc-notify-me'\r\n >\r\n
\r\n Email me\r\n
\r\n \r\n\r\n \r\n
\r\n
\r\n );\r\n };\r\n\r\n // Renders thankyou note when email is added for back in stock notification\r\n const showThankyouNote = async (props: IBuyboxViewProps & IBuyboxProps, email: string) => {\r\n const mail = email || props.context.request.user.emailAddress || '';\r\n setIsFormSubmitted(true);\r\n if (!validateEmail(mail)) {\r\n setIsValidEmail(false);\r\n } else {\r\n setIsValidEmail(true);\r\n\r\n const itemID = product.result?.ItemId;\r\n const recID = product.result?.RecordId;\r\n\r\n if (!itemID || !recID) return;\r\n try {\r\n await vSIInitiateRestCallAsync(\r\n { callerContext: props.context.actionContext },\r\n props.context.request.user.customerAccountNumber ?? '',\r\n mail,\r\n itemID,\r\n props.context.app?.config?.popularityBannerCompany ?? 'DGC',\r\n '1',\r\n false,\r\n recID\r\n );\r\n } catch (e) {\r\n console.log(e);\r\n } finally {\r\n setShowBackInStockModal(false);\r\n }\r\n }\r\n };\r\n\r\n const setCookies = () => {\r\n const _cookieExpirationInSeconds: number = 5_184_000;\r\n let newRecentlyViewed: number[] | undefined = [];\r\n const cookieConfig = { maxAge: _cookieExpirationInSeconds };\r\n\r\n const recentlyViewedProdIdsCookie: any = cookies.get('recently-viewed');\r\n let recentlyViewedArr = recentlyViewedProdIdsCookie.value;\r\n\r\n if (recentlyViewedArr) {\r\n if (recentlyViewedArr.includes(props.data.product.result?.RecordId)) {\r\n // @ts-ignore\r\n recentlyViewedArr = recentlyViewedArr.filter(x => x !== props.data.product.result?.RecordId);\r\n }\r\n\r\n if (recentlyViewedArr.length >= 10) {\r\n recentlyViewedArr = recentlyViewedArr.slice(0, recentlyViewedArr.length - 1);\r\n }\r\n newRecentlyViewed = [props.data.product.result?.RecordId, ...recentlyViewedArr];\r\n } else {\r\n if (props.data.product.result?.RecordId) {\r\n newRecentlyViewed = [props.data.product.result?.RecordId];\r\n }\r\n }\r\n\r\n cookies.set('recently-viewed', newRecentlyViewed, cookieConfig);\r\n };\r\n\r\n const isVirtualCartEmpty = (): boolean => {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n let productsAddedInBundles = cookies.get(\"added_products_bundles\")?.value || [];\r\n if(Array.isArray(productsAddedInBundles)) {\r\n return !productsAddedInBundles.length\r\n }\r\n return false;\r\n }\r\n\r\n const closeProductBundlesModal = () => {\r\n setRenderProductBundlesModal(false);\r\n }\r\n\r\n const setProductAvailabilityCookieForBundles = (qAvailable: number) => {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n cookies.set('pdp_product_quantity_for_bundles', qAvailable);\r\n }\r\n\r\n useEffect(() => {\r\n if (attributes && attributes.length < 1 && allAttributes) {\r\n _getCustomAttribute(allAttributes, selectedAttributes, attributes, setAttributes, SetIsAgeRestricted, SetIsVendorShipped).catch(\r\n err => {\r\n return;\r\n }\r\n );\r\n }\r\n if ((!productAddedToCart && findInStore && findInStore.isAddedToCart) || (addToCart && addToCart.isAddedToCart)) {\r\n SetProductAddedToCart(true);\r\n }\r\n\r\n const isAvailable =\r\n props.data.productAvailableQuantity.result &&\r\n props.data.productAvailableQuantity.result.find(availability => {\r\n return availability.IsProductAvailable === true;\r\n });\r\n const qAvailable = props.data.productAvailableQuantity.result?.find(info => info.ProductAvailableQuantity.ProductId === product.result?.RecordId && info.ProductAvailableQuantity.AvailableQuantity);\r\n const maxQuantity = _getCartItemMaxQuantity(\r\n props.context.app.config.maxQuantityForCartLineItem,\r\n props.context.app.config.enableStockCheck || false,\r\n qAvailable?.ProductAvailableQuantity.AvailableQuantity ? qAvailable.ProductAvailableQuantity.AvailableQuantity : 0,\r\n getOrderQuantityLimitsFeatureFlag(),\r\n product?.result?.Behavior?.MaximumQuantity || 0\r\n );\r\n setProductAvailabilityCookieForBundles(maxQuantity ? maxQuantity : 0);\r\n isAvailable ? setIsProductAvailable(isAvailable.IsProductAvailable) : setIsProductAvailable(false);\r\n }, [productAddedToCart, findInStore]);\r\n\r\n useEffect(() => {\r\n const cookieValue = cookies.get('cookieConsent').value;\r\n\r\n const analyticsCookies = cookieValue?.find(cookie => cookie.name === CheckboxType.Analytics);\r\n if (analyticsCookies?.value) {\r\n setCookies();\r\n }\r\n\r\n getProductPrices();\r\n getPlatform();\r\n\r\n mediaGalleryRef.current?.addEventListener('contextmenu', e => {\r\n e.preventDefault();\r\n });\r\n }, []);\r\n\r\n const itemId = product?.result?.ItemId;\r\n\r\n const getOrderQuantityLimitsFeatureFlag = (): boolean => {\r\n const defaultOrderQuantityLimitsFeatureConfig = props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\r\n return false;\r\n }\r\n\r\n try {\r\n const featureStatuses = props.data.featureState.result;\r\n const isQuantityLimitsFeatureEnabledInHq =\r\n featureStatuses?.find(\r\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature'\r\n )?.IsEnabled || false;\r\n if (!isQuantityLimitsFeatureEnabledInHq) {\r\n return false;\r\n }\r\n } catch (error) {\r\n props.telemetry.warning(error as string);\r\n props.telemetry.debug('Unable to get feature states');\r\n return false;\r\n }\r\n\r\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\r\n return true;\r\n }\r\n try {\r\n const customerInfo = props.data.customerInformation.result;\r\n return (\r\n !!customerInfo &&\r\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\r\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\r\n );\r\n } catch (error) {\r\n props.telemetry.warning(error as string);\r\n props.telemetry.debug('Unable to get customer info');\r\n return false;\r\n }\r\n };\r\n\r\n // Input for email\r\n const onChangeEmail = (event: React.ChangeEvent) => {\r\n const email = event.target.value;\r\n setCustomerEmail(email);\r\n // if (!validateEmail(email.toString())) {\r\n // setIsValidEmail(false);\r\n // } else {\r\n // setIsValidEmail(true);\r\n // }\r\n };\r\n // Input for quantity\r\n // const onChangeQuantity = (event: React.ChangeEvent) => {\r\n // const parseQuantity = parseInt(event.target.value);\r\n // const productQty = parseQuantity ? parseQuantity : 1;\r\n // setRequiredQuantity(productQty);\r\n // };\r\n\r\n const onChangePrivacy = (event: React.ChangeEvent) => {\r\n setPrivacyPolicyChecked(event.target.checked);\r\n };\r\n\r\n // ts-ignore\r\n const renderClubPlusBadges = (): number | string | undefined => {\r\n var CustomerContextualPrice;\r\n if (activePrices) {\r\n CustomerContextualPrice = activePrices && activePrices[0] && activePrices[0];\r\n }\r\n return CustomerContextualPrice?.toFixed(2);\r\n };\r\n const bundleProducts = props.slots.bundledProductsSlot && props.slots.bundledProductsSlot[0] && get(props.slots.bundledProductsSlot[0], 'props.config.productCollection.products') || [];\r\n const bundleHasProducts = bundleProducts && bundleProducts.length ? true : false;\r\n const bundleProductsModal = props.slots.bundledProductsModalSlot && props.slots.bundledProductsModalSlot[0] && get(props.slots.bundledProductsModalSlot[0], 'props.config.productCollection.products') || [];\r\n const bundleModalHasProducts = bundleProductsModal && bundleProductsModal.length ? true : false;\r\n //Customization where stock check for the click and collect\r\n const isCncAvailable = async () => {\r\n // const pickupStores = await searchOrgUnitLocationsAsync(\r\n // { callerContext: props.context.actionContext, bypassCache: 'none' },\r\n // {\r\n // DeliveryModeTypeFilterValue: 2\r\n // }\r\n // );\r\n // const pickupIds = pickupStores.map(store => store.ChannelId);\r\n // setCnCPickupIds(pickupIds);\r\n\r\n const productId: number = props.data.product.result?.RecordId!;\r\n const deliveryOptions = await getDeliveryOptionsAsync({ callerContext: props.context.actionContext, queryResultSettings: {} }, [\r\n productId\r\n ]);\r\n\r\n const productAvailabilitesNonPlantsCNC = await getEstimatedAvailabilityAsync(\r\n { callerContext: props.context.actionContext },\r\n { ProductIds: [productId], DefaultWarehouseOnly: false, FilterByChannelFulfillmentGroup: true }\r\n );\r\n\r\n if (productAvailabilitesNonPlantsCNC && productAvailabilitesNonPlantsCNC.AggregatedProductInventoryAvailabilities) {\r\n productAvailabilitesNonPlantsCNC.AggregatedProductInventoryAvailabilities.map(stores => {\r\n if (stores.ProductId === productId && stores.PhysicalAvailableInventoryLevelCode !== 'OOS') {\r\n deliveryOptions\r\n .find(option => option.ProductId === productId)\r\n ?.DeliveryOptions?.map(option => {\r\n if (option.Code === 'ClickCol') {\r\n setIsCnCProductAvailable(true);\r\n }\r\n });\r\n }\r\n });\r\n }\r\n };\r\n if (counter === 0) {\r\n counter++;\r\n isCncAvailable();\r\n }\r\n const _renderPlantaBlock = (): JSX.Element => {\r\n return (\r\n
\r\n
\r\n \r\n
\r\n
\r\n

Planta: Never kill a plant again

\r\n
\r\n

\r\n Individuals care schedule and reminders for your plants, recommendations, step by step guides, identification, light\r\n meter and more. Keep your plants alive with Planta!\r\n

\r\n
\r\n\r\n {platform === 'Web' ? (\r\n
\r\n \r\n \r\n \r\n \r\n \r\n \r\n
\r\n ) : (\r\n \r\n
\r\n \r\n \r\n
\r\n
\r\n )}\r\n
\r\n
\r\n );\r\n };\r\n\r\n const _renderAddToCartContainer = () => {\r\n\r\n // const categoryPaths = props.data.categoryPaths.result;\r\n const comingSoonCategoryName: string | undefined = props.config.comingSoonCategoryName;\r\n // if (categoryPaths && categoryPaths.length) {\r\n // for (const cp of categoryPaths) {\r\n // if (comingSoonCategoryName && cp.Name?.toLowerCase().includes(comingSoonCategoryName?.toLowerCase()) || cp.Name?.toLowerCase() === comingSoonCategoryName?.toLowerCase()) {\r\n // return <>;\r\n // }\r\n // }\r\n // }\r\n if (comingSoonCategoryName) {\r\n const comingSoonAttr = productAttributes.result?.find(attr => attr.Name?.toLowerCase() === comingSoonCategoryName?.toLowerCase());\r\n if (comingSoonAttr && comingSoonAttr.TextValue?.toLowerCase() === 'yes') {\r\n return <>;\r\n }\r\n }\r\n\r\n\r\n const deliveryOptions = props.data.deliveryOptions?.result?.DeliveryOptions;\r\n // const isHD = deliveryOptions?.some(opt => opt.Code && !NON_HD_DELIVERY_LINES.includes(opt.Code));\r\n const isCnC = deliveryOptions?.some(opt => opt.Code === 'ClickCol');\r\n const isBackInStockEnabled =\r\n productAttributes.result?.find(attr => attr.Name?.toLowerCase() === 'backinstock')?.TextValue?.toLowerCase() === 'yes';\r\n //const isISO = !(isHD || isCnC);\r\n const isISO =\r\n productAttributes.result?.find(attr => attr.Name?.toLocaleLowerCase() === 'onlyinstore')?.TextValue?.toLowerCase() === 'yes';\r\n const outOfSeason =\r\n productAttributes.result?.find(attr => attr.Name?.toLocaleLowerCase() === 'outofseason')?.TextValue?.toLowerCase() === 'yes';\r\n const outOfSeasonCheck = outOfSeason && !isProductAvailable;\r\n if (!(isProductAvailable && addToCart && !isISO) && isCnC) {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const cncProducts = cookies.get('cnc_products').value || [];\r\n if (Array.isArray(cncProducts) && !cncProducts.includes(product.result?.ItemId)) {\r\n cncProducts.push(product.result?.ItemId);\r\n }\r\n cookies.set('cnc_products', cncProducts);\r\n }\r\n\r\n return (\r\n
\r\n

{outOfSeasonCheck ? 'THIS ITEM IS CURRENTLY OUT OF SEASON' : isISO ? 'THIS ITEM IS ONLY AVAILABLE IN-STORE' : 'ADD TO BAG'}

\r\n
\r\n {!outOfSeasonCheck && findInStore && _renderFindInStore(findInStore)}\r\n {isISO || (\r\n !outOfSeasonCheck && (\r\n \r\n {quantity && _renderQuantity(quantity, callbacks, props, state, resources)}\r\n \r\n {addToCart && !isISO && _renderAddToCart(addToCart)}\r\n {isCnC ? (\r\n isCnCProductAvailable ? (\r\n findInStore?.clickAndCollect\r\n ) : (\r\n \r\n
\r\n
\r\n
{props.resources.findInStoreLinkText}
\r\n
\r\n \r\n )\r\n ) : (\r\n ''\r\n )}\r\n {/* {CnCPickupIds.includes(location.ChannelId)\t\r\n ? isCnC && isCnCProductAvailable && findInStore?.clickAndCollect\t\r\n : ''} */}\r\n \r\n \r\n )\r\n )}\r\n {/* adding click & collect button for only in store items */}\r\n {!outOfSeasonCheck && isISO && isCnC ? (\r\n isCnCProductAvailable ? (\r\n \r\n {isCnC && findInStore?.clickAndCollect}\r\n \r\n ) : (\r\n \r\n
\r\n
\r\n
{props.resources.findInStoreLinkText}
\r\n
\r\n \r\n )\r\n ) : (\r\n ''\r\n )}\r\n \r\n {!outOfSeasonCheck && findInStore?.checkStock}\r\n {!isISO\r\n ? !isProductAvailable &&\r\n isBackInStockEnabled && (\r\n \r\n
\r\n
\r\n Email me when back in stock\r\n
\r\n \r\n )\r\n : isCnC && (\r\n
\r\n
\r\n This item is not available for Home Delivery\r\n
\r\n )}\r\n \r\n {errorBlock}\r\n
\r\n );\r\n };\r\n\r\n /* VSI Customization - END - 18/01/21 */\r\n return (\r\n <>\r\n \r\n
\r\n {props.mediaGallery}\r\n
\r\n \r\n \r\n {_renderProductTitle()}\r\n \r\n {/* {title} */}\r\n
\r\n {props.price}\r\n\r\n {checkUserDiscounts && checkUserDiscounts[0] && checkUserLoyalty === undefined && (\r\n
\r\n \r\n {displayClubPlusInfo && (\r\n
\r\n
displayClubPlus()} className='product-card-club-plus-cross-pdp'>
\r\n

\r\n Join Club Plus and save 10% on plants, bulbs and seeds all year round{' '}\r\n \r\n {' '}\r\n \r\n Find out more\r\n \r\n \r\n

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

\r\n Club Plus Price £{renderClubPlusBadges()}\r\n

\r\n\r\n
\r\n

displayClubPlus()}>?

\r\n
\r\n
\r\n
\r\n
\r\n )}\r\n {checkUserDiscounts && checkUserDiscounts[0] && checkUserLoyalty && (\r\n
\r\n
\r\n

\r\n Club Plus Price £{renderClubPlusBadges()}\r\n

\r\n
\r\n
\r\n )}\r\n
\r\n\r\n \r\n {rating}\r\n {_renderReviewCount(reviewsCount, resources)}\r\n {addToWishlist && _renderAddToWishlist(addToWishlist)}\r\n \r\n {configure && _renderConfigure(configure)}\r\n {itemId && (\r\n \r\n {productCodeText}\r\n {itemId}\r\n \r\n )}\r\n {/* VSI Customization - START - 27/10/20 */}\r\n {/* {!isComingSoonProduct ? _renderAddToCartContainer() : <>} */}\r\n {_renderAddToCartContainer()}\r\n {/* FALSE TO HIDE NOTIFY ME BUTTON */}\r\n\r\n {showBackInStockModal && (\r\n \r\n )}\r\n {backInStockModalIsOpen && isFormSubmitted && (\r\n
\r\n
\r\n \r\n {thankYouText}\r\n
\r\n

{backInStockText}

\r\n
\r\n )}\r\n\r\n {productAddedToCart && _renderAddedToCartNotification(resources, navigationUrl)}\r\n {/* Render notification only if age restriction attribute is true */}\r\n {isAgeRestricted === true && _renderTextBlock(ageRestrictionNotification)}\r\n {_renderTextBlock(props.slots.textBlocks)}\r\n \r\n\r\n {!isQuickView && (\r\n <>\r\n {attributes && }\r\n
\r\n
\r\n {false && _renderPlantaBlock()}\r\n\r\n {/* VSI Customization - END - 10/11/20 */}\r\n {_renderSocialShare(props.slots && props.slots.socialShare)}\r\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\r\n \r\n )}\r\n
\r\n {!isQuickView && _renderSchema(product?.result, allAttributes, pageUrl, imageUrl, ratingsSummary?.result, productPrice?.result)}\r\n \r\n {!allBundleProductsOOS && bundleHasProducts &&
\r\n
\r\n

You might also like…

\r\n
\r\n
\r\n {props.slots.bundledProductsSlot && props.slots.bundledProductsSlot[0]}\r\n
\r\n {props.slots.bundledProductsSlot && \r\n
\r\n
\r\n

{props.config.productBundlesOrderSummaryText ? props.config.productBundlesOrderSummaryText : 'Price summary'}

\r\n \r\n {_renderCartLines(props.data.cart.result?.cart.CartLines ? props.data.cart.result?.cart.CartLines: [], props, cartProducts, setCartProducts, bundlesSummaryScrollPos, setBundlesSummaryScrollPos, bundlesModalSummaryScrollPos, setBundlesModalSummaryScrollPos, false)}\r\n \r\n

{props.config.discountAppliedInCartMessage ? props.config.discountAppliedInCartMessage: 'Any offers/discounts will be applied in basket'}

\r\n
\r\n
\r\n }\r\n
\r\n
\r\n
\r\n }\r\n {!allBundleProductsOOS && bundleModalHasProducts && props.context.app.config.showProductBundlesInModal &&\r\n props.slots.bundledProductsModalSlot && props.slots.bundledProductsModalSlot[0] &&\r\n \r\n \r\n
\r\n
\r\n \r\n

You might also like…

\r\n
\r\n
\r\n {props.slots.bundledProductsModalSlot && props.slots.bundledProductsModalSlot[0]}\r\n
\r\n
\r\n
\r\n

Your basket

\r\n {_renderCartLines(props.data.cart.result?.cart.CartLines ? props.data.cart.result?.cart.CartLines: [], props, cartProducts, setCartProducts, bundlesSummaryScrollPos, setBundlesSummaryScrollPos, bundlesModalSummaryScrollPos, setBundlesModalSummaryScrollPos, true)}\r\n \r\n

{props.config.discountAppliedInCartMessage ? props.config.discountAppliedInCartMessage: 'Any offers/discounts will be applied at checkout'}

\r\n
\r\n
\r\n
\r\n
\r\n
\r\n
\r\n {/* */}\r\n
\r\n }\r\n\r\n );\r\n};\r\n\r\n\r\nconst _getAllStores = async (\r\n props: IBuyboxProps,\r\n latitude?: number,\r\n longitude?: number,\r\n radius?: number,\r\n distanceUnitValue?: number\r\n): Promise => {\r\n const {\r\n context: { actionContext }\r\n } = props;\r\n\r\n const orgUnitLocationsInput = new GetAllOrgUnitLocationsByAreaInput(\r\n latitude,\r\n longitude,\r\n radius,\r\n distanceUnitValue,\r\n false\r\n );\r\n const orgUnitLocations = await getAllOrgUnitLocationsByArea(orgUnitLocationsInput, actionContext);\r\n return orgUnitLocations;\r\n};\r\n\r\nconst changeQinBundlesModalSummary = async (props: IBuyboxProps, productId: number, newValue: number, cartProducts: IDobbiesMiniCartSummaryProduct[], setCartProducts: React.Dispatch>, isSummaryInModal: boolean, maxQuantityForBundle: number) => {\r\n const cartState = await getCartState(props.context.actionContext);\r\n const cl = cartState.cart.CartLines?.find(c => c.ProductId === productId);\r\n const simpleProduct: SimpleProduct|undefined = cartProducts.find(c => c.RecordId === productId);\r\n if (maxQuantityForBundle <= 0) {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const maxQuantities = cookies.get(\"product_bundles_maximum_available_quantities\")?.value || [];\r\n if (Array.isArray(maxQuantities)) {\r\n for (const maxQ of maxQuantities) {\r\n if (maxQ.productId === productId) {\r\n maxQuantityForBundle = maxQ.maxQuantity;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if (cl && cl.Quantity && maxQuantityForBundle && simpleProduct) {\r\n if(newValue > maxQuantityForBundle) {\r\n return;\r\n }\r\n const diffInQuantity = newValue - cl.Quantity;\r\n const deliveryOptions = await getDeliveryOptionsAsync(\r\n { callerContext: props.context.actionContext, queryResultSettings: {} },\r\n [productId]\r\n );\r\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\r\n if(diffInQuantity > 0) {\r\n let addProductToCartInput = {\r\n product: simpleProduct,\r\n quantity: diffInQuantity,\r\n enableStockCheck: props.context.app.config.enableStockCheck,\r\n availableQuantity: maxQuantityForBundle,\r\n isAddEmailDeliveryItemToCart:\r\n ArrayExtensions.hasElements(deliveryOptions) &&\r\n ArrayExtensions.hasElements(deliveryOptions[0].DeliveryOptions) &&\r\n deliveryOptions[0].DeliveryOptions[0].Code === emailDeliveryModeCode\r\n };\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const cncProducts = cookies.get('cnc_products').value || [];\r\n if (Array.isArray(cncProducts) && cncProducts.includes(simpleProduct.ItemId)) {\r\n const deliveryOptions = await getDeliveryOptionsAsync(\r\n { callerContext: props.context.actionContext, queryResultSettings: {} },\r\n [simpleProduct.RecordId]\r\n );\r\n let cncOption : DeliveryOption | undefined;\r\n deliveryOptions.map(dopt => {\r\n dopt.DeliveryOptions?.map(delOpt => {\r\n if (delOpt.Code === 'ClickCol') {\r\n cncOption = delOpt;\r\n }\r\n });\r\n });\r\n const sLocations = await _getAllStores(props, 31.5070767, 74.4315609, 0, 0);\r\n const storeLocation = sLocations.find(sl => {\r\n return sl.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId === cl.FulfillmentStoreId\r\n });\r\n if (storeLocation && storeLocation.OrgUnitAvailability?.OrgUnitLocation) {\r\n cartState.addProductToCart({ product: simpleProduct, count: diffInQuantity, location: storeLocation.OrgUnitAvailability?.OrgUnitLocation, deliveryMode: cncOption?.Code })\r\n .then(async result => {\r\n if (result.status === 'SUCCESS') {\r\n props.context.actionContext.update(new CartModulesStateShareInput(), { isQuantityUpdated: true });\r\n }\r\n }).catch(e => {});\r\n }\r\n } else {\r\n cartState.addProductToCart(addProductToCartInput)\r\n .then(async result => {\r\n if (result.status === 'SUCCESS') {\r\n props.context.actionContext.update(new CartModulesStateShareInput(), { isQuantityUpdated: true });\r\n }\r\n }).catch(e => {});\r\n }\r\n\r\n \r\n } else if (diffInQuantity < 0) {\r\n cartLineQuantityUpdatedAsync(\r\n true,\r\n cartState,\r\n props.context.actionContext.telemetry,\r\n [simpleProduct],\r\n cl,\r\n newValue\r\n )\r\n .then((cartActionResult: ICartActionResult | undefined): boolean => {\r\n if (cartActionResult?.status === 'SUCCESS') {\r\n props.context.actionContext.update(new CartModulesStateShareInput(), { isQuantityUpdated: true });\r\n return true;\r\n }\r\n return false;\r\n }).catch(e => {});\r\n }\r\n }\r\n}\r\nconst onQuantityChange = async (props: IBuyboxProps, productId: number, newValue: number, cartProducts: IDobbiesMiniCartSummaryProduct[], setCartProducts: React.Dispatch>, isSummaryInModal: boolean, maxQuantityForBundle: number) => {\r\n if (isSummaryInModal) {\r\n changeQinBundlesModalSummary(props, productId, newValue, cartProducts, setCartProducts, isSummaryInModal, maxQuantityForBundle);\r\n return;\r\n }\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const addedProductsToCollection = cookies.get(\"added_products_bundles\")?.value || [];\r\n const cartProductsCopy = cartProducts.map(cp => cp);\r\n const updatedProducts: IDobbiesAddedProductToBundle[] = [];\r\n if (Array.isArray(addedProductsToCollection)) {\r\n for (const obj of addedProductsToCollection) {\r\n if (obj['productId'] === productId) {\r\n const valueToBeUpdated = newValue;\r\n if(valueToBeUpdated > 0) {\r\n updatedProducts.push({ productId: obj['productId'], price: obj['price'], quantity: valueToBeUpdated, maxQuantity: obj['maxQuantity'], inventoryLocationId: obj['inventoryLocationId'] });\r\n for(const cp of cartProductsCopy) {\r\n if (cp.RecordId === obj['productId']) {\r\n cp.quantity = valueToBeUpdated;\r\n }\r\n }\r\n }\r\n } else {\r\n updatedProducts.push({ productId: obj['productId'], price: obj['price'], quantity: obj['quantity'], maxQuantity: obj['maxQuantity'], inventoryLocationId: obj['inventoryLocationId'] });\r\n }\r\n }\r\n cookies.set('added_products_bundles', updatedProducts);\r\n setCartProducts(cartProductsCopy);\r\n props.context.actionContext.update(new CartModulesStateShareInput(), { isQuantityUpdated: true });\r\n }\r\n};\r\nconst _renderCartLines = (cartLines: CartLine[], props: IBuyboxProps, cartProducts: IDobbiesMiniCartSummaryProduct[], setCartProducts: React.Dispatch>, bundlesSummaryScrollPos: number, setBundlesSummaryScrollPos: React.Dispatch>, bundlesModalSummaryScrollPos: number, setBundlesModalSummaryScrollPos: React.Dispatch>,isSummaryInModal: boolean) => {\r\n let totalPrice = 0.0;\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n let productsAddedInBundles = cookies.get(\"added_products_bundles\")?.value || [];\r\n const elemId = isSummaryInModal ? 'product_bundles_summary_modal': 'product_bundles_summary'\r\n const elem = MsDyn365.isBrowser && window && window.document.getElementById(elemId);\r\n const rowHeight = 116;\r\n const minProductsToScroll = (isSummaryInModal || (MsDyn365.isBrowser && window && window.innerWidth >= 1280 && MsDyn365.isBrowser && window && window.innerWidth <= 1476)) ? 2: 3;\r\n const upArrowId = isSummaryInModal ? 'up-arrow-btn-modal' :'up-arrow-btn';\r\n const downArrowId = isSummaryInModal ? 'down-arrow-btn-modal' :'down-arrow-btn';\r\n let scrollPos = isSummaryInModal ? bundlesModalSummaryScrollPos : bundlesSummaryScrollPos;\r\n const rowHeightForCalc = 90;\r\n const maxQuantityReachedMsg = props.config.maxQuantityReachedInBundlesmsg ? props.config.maxQuantityReachedInBundlesmsg : `There is only 1 product left. Please choose quantity within the available range`;\r\n if (isSummaryInModal) {\r\n cartProducts = cartProducts.filter(cp => props.data.cart.result?.cart.CartLines?.find(cl => cl.ProductId === cp.RecordId) ? true : false);\r\n if (cartProducts && props.data.cart.result?.cart.CartLines && props.data.cart.result?.cart.CartLines.length) {\r\n for(const c of props.data.cart.result?.cart.CartLines) {\r\n for (const cp of cartProducts) {\r\n if(c.ProductId === cp.RecordId) {\r\n cp.quantity = c.Quantity;\r\n }\r\n }\r\n }\r\n }\r\n } else {\r\n cartProducts = cartProducts.filter(cp => Array.isArray(productsAddedInBundles) && productsAddedInBundles.find(p => p['productId'] === cp.RecordId));\r\n }\r\n return <>\r\n {cartProducts && cartProducts.length > minProductsToScroll ? : <>}\r\n
{\r\n if(elem && Math.abs((Math.ceil(elem.scrollTop) - Math.ceil(scrollPos))) > rowHeightForCalc) {\r\n if(!isSummaryInModal) {\r\n if(elem.scrollTop >= ((cartProducts.length - (minProductsToScroll + 1)) * rowHeightForCalc)) {\r\n setBundlesSummaryScrollPos(elem?.scrollTop);\r\n } else if (elem.scrollTop < 50) {\r\n setBundlesSummaryScrollPos(elem?.scrollTop); \r\n }\r\n } else {\r\n if(elem.scrollTop >= ((cartProducts.length - minProductsToScroll + 1) * rowHeightForCalc)) {\r\n setBundlesModalSummaryScrollPos(elem?.scrollTop);\r\n } else if (elem.scrollTop < 50) {\r\n setBundlesModalSummaryScrollPos(elem?.scrollTop); \r\n }\r\n const upArrow = MsDyn365.isBrowser && window && window.document.getElementById(upArrowId);\r\n const downArrow = MsDyn365.isBrowser && window && window.document.getElementById(downArrowId);\r\n \r\n if(elem.scrollTop < 50) {\r\n if(upArrow) {\r\n upArrow.hidden = true;\r\n }\r\n } else {\r\n if(upArrow) {\r\n upArrow.hidden = false;\r\n }\r\n }\r\n if((elem.scrollTop > ((cartProducts.length - minProductsToScroll) * rowHeightForCalc))) {\r\n if(downArrow) {\r\n downArrow.hidden = true;\r\n }\r\n } else {\r\n if(downArrow) {\r\n downArrow.hidden = false;\r\n }\r\n }\r\n }\r\n scrollPos = elem.scrollTop;\r\n }\r\n }}>\r\n {cartProducts.map((product, index) => {\r\n let prodInBundles = undefined;\r\n let cookiePrice = undefined;\r\n let maxQuantityForBundle = 0;\r\n let shouldShowQuantityReachedErrorMsg = false;\r\n const fallbackImageUrl = product && getFallbackImageUrl(product.ItemId, props.context.actionContext.requestContext.apiSettings);\r\n const cl = props.data.cart?.result?.cart.CartLines?.find(c => c.ProductId === product.RecordId);\r\n if (Array.isArray(productsAddedInBundles)) {\r\n prodInBundles = productsAddedInBundles.find(p => p['productId'] === product.RecordId);\r\n if(prodInBundles) {\r\n cookiePrice = prodInBundles['price'];\r\n maxQuantityForBundle = prodInBundles['maxQuantity'];\r\n if(!isSummaryInModal) {\r\n product.quantity = prodInBundles['quantity'];\r\n if (cl && cl.Quantity && product.quantity && maxQuantityForBundle) {\r\n shouldShowQuantityReachedErrorMsg = (product.quantity + cl.Quantity) > maxQuantityForBundle;\r\n }\r\n }\r\n }\r\n }\r\n if (maxQuantityForBundle <= 0) {\r\n const cookies = props.context.actionContext.requestContext.cookies;\r\n const maxQuantities = cookies.get(\"product_bundles_maximum_available_quantities\")?.value || [];\r\n if (Array.isArray(maxQuantities)) {\r\n for (const maxQ of maxQuantities) {\r\n if (maxQ.productId === product.RecordId) {\r\n maxQuantityForBundle = maxQ.maxQuantity;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n if(product.quantity && (product.quantity >= maxQuantityForBundle)) {\r\n shouldShowQuantityReachedErrorMsg = true;\r\n }\r\n const priceObj: ProductPrice = {\r\n BasePrice: product.BasePrice,\r\n AdjustedPrice: cookiePrice ? cookiePrice : product.Price,\r\n CustomerContextualPrice: cookiePrice ? cookiePrice : product.Price\r\n };\r\n totalPrice = totalPrice + ((cookiePrice ? Number(cookiePrice) : product.Price) * (product.quantity ? product.quantity: 0));\r\n const imageSettings = {\r\n viewports: {\r\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\r\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\r\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\r\n },\r\n lazyload: true\r\n };\r\n const baseImageUrl: string = props.context.request.apiSettings.baseImageUrl;\r\n
\r\n \r\n
\r\n return (\r\n <> \r\n
\r\n
\r\n
\r\n \r\n
\r\n
\r\n

{product && product.Name}

\r\n \r\n {/*

Quantity: {product.quantity}

*/}\r\n

Quantity:

\r\n {\r\n onQuantityChange(props, product.RecordId, newVal, cartProducts, setCartProducts, isSummaryInModal, maxQuantityForBundle);\r\n }}\r\n hideQuantityControls={false}\r\n disabledInput={false}\r\n max={maxQuantityForBundle}\r\n min={1}\r\n />\r\n {shouldShowQuantityReachedErrorMsg &&

{maxQuantityReachedMsg}

}\r\n
\r\n
\r\n \r\n
\r\n \r\n );\r\n })\r\n }\r\n
\r\n \r\n {cartProducts && cartProducts.length > minProductsToScroll ? : <>}\r\n

{props.config.totalPriceText ? props.config.totalPriceText : 'Total price:'} {\r\n new Intl.NumberFormat(\"en-US\", {\r\n style: 'currency',\r\n currencyDisplay: 'symbol',\r\n currency: \"GBP\",\r\n minimumFractionDigits: 2\r\n }).format(totalPrice)\r\n }

\r\n \r\n}\r\n// Function for product schema\r\nconst _renderSchema = (\r\n product: SimpleProduct | undefined,\r\n allAttributes: AttributeValue[] | undefined,\r\n pageUrl: string,\r\n imageUrl: string,\r\n ratingsSummary: RatingsSummary | undefined,\r\n productPrice: ProductPrice | undefined\r\n) => {\r\n const productBrand = getProductBrand(allAttributes);\r\n const ratingObj = ratingsSummary && calculateBestAndWorstRating(ratingsSummary);\r\n const productPriceObj = productPrice && getProductPrice(productPrice);\r\n const ratingCount = ratingsSummary && ratingsSummary.totalRatingsCount;\r\n\r\n {\r\n /** Node added for schema */\r\n }\r\n return (\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {ratingCount && ratingCount > 0 ? (\r\n \r\n \r\n \r\n \r\n \r\n \r\n ) : (\r\n undefined\r\n )}\r\n \r\n );\r\n};\r\n\r\n/* VSI Customization - START - 27/10/20 */\r\n\r\nconst getProductBrand = (allAttributes: AttributeValue[] | undefined) => {\r\n const brandAttribute = allAttributes && allAttributes.find(x => x.Name === 'Brand');\r\n return (brandAttribute && brandAttribute.TextValue) || 'Dobbies';\r\n};\r\n\r\nconst getProductPrice = (price: ProductPrice | undefined) => {\r\n let lowPrice = 0;\r\n let highPrice = 0;\r\n if (price) {\r\n if (price?.AdjustedPrice !== price?.CustomerContextualPrice) {\r\n lowPrice = price?.CustomerContextualPrice !== undefined ? price?.CustomerContextualPrice : lowPrice;\r\n highPrice = price?.AdjustedPrice !== undefined ? price?.AdjustedPrice : highPrice;\r\n } else if (price?.AdjustedPrice === price?.CustomerContextualPrice) {\r\n lowPrice = highPrice = price?.AdjustedPrice !== undefined ? price?.AdjustedPrice : lowPrice;\r\n }\r\n }\r\n return { lowPrice, highPrice };\r\n};\r\n\r\nconst calculateBestAndWorstRating = (ratingValue: RatingsSummary | undefined) => {\r\n let bestRating = 0;\r\n let worstRating = 0;\r\n if (ratingValue) {\r\n if (ratingValue && ratingValue?.totalRatingsCount !== 0) {\r\n if (ratingValue.star5Count !== 0) {\r\n bestRating = 5;\r\n worstRating = 5;\r\n }\r\n if (ratingValue.star4Count !== 0) {\r\n if (bestRating === 0) {\r\n bestRating = 4;\r\n }\r\n worstRating = 4;\r\n }\r\n if (ratingValue.star3Count !== 0) {\r\n if (bestRating === 0) {\r\n bestRating = 3;\r\n }\r\n worstRating = 3;\r\n }\r\n if (ratingValue.star2Count !== 0) {\r\n if (bestRating === 0) {\r\n bestRating = 2;\r\n }\r\n worstRating = 2;\r\n }\r\n if (ratingValue.star1Count !== 0) {\r\n if (bestRating === 0) {\r\n bestRating = 1;\r\n }\r\n worstRating = 1;\r\n }\r\n }\r\n }\r\n return { bestRating, worstRating };\r\n};\r\n/* Following function returns attributes of current product */\r\nconst _getCustomAttribute = async (\r\n _allAttributes: AttributeValue[],\r\n selectedAttributes: string[] | undefined,\r\n stateAttributes: AttributeValue[],\r\n setAttributes: React.Dispatch>,\r\n SetIsAgeRestricted: React.Dispatch>,\r\n SetIsVendorShipped: React.Dispatch>\r\n) => {\r\n if (stateAttributes && stateAttributes.length && stateAttributes.length > 0) {\r\n // State is already set\r\n return;\r\n }\r\n if (!selectedAttributes || (selectedAttributes && selectedAttributes.length === 0)) {\r\n return;\r\n }\r\n const allAttributes = _allAttributes;\r\n const customAttributes: AttributeValue[] = [];\r\n\r\n selectedAttributes &&\r\n selectedAttributes.map(selectedAttribute => {\r\n const selectedAttributeName = selectedAttribute.trim().toLowerCase();\r\n // Check if it is found in action response, add it in attribute array\r\n const matchingAttribute = allAttributes.find(attribute => {\r\n return selectedAttributeName === attribute.Name?.toLowerCase();\r\n });\r\n matchingAttribute && customAttributes.push(matchingAttribute);\r\n });\r\n\r\n setAttributes(customAttributes);\r\n\r\n const ageRestrictedAttribute =\r\n allAttributes &&\r\n allAttributes.find(customAttribute => {\r\n const attributeName = customAttribute.Name && customAttribute.Name.trim().toLowerCase();\r\n return attributeName === 'agerestriction' || attributeName === 'age restriction';\r\n });\r\n // check if product has age restriction\r\n ageRestrictedAttribute &&\r\n ageRestrictedAttribute.TextValue &&\r\n ageRestrictedAttribute.TextValue.trim().toLowerCase() === 'true' &&\r\n SetIsAgeRestricted(true);\r\n // check if product is vendorshipped\r\n const isvendorShippedAttribute =\r\n allAttributes &&\r\n allAttributes.find(attribute => {\r\n const attributeName = attribute.Name && attribute.Name.trim().toLowerCase();\r\n return attributeName === 'isvendershipproduct';\r\n });\r\n const isVendorShipTextValue =\r\n isvendorShippedAttribute && isvendorShippedAttribute.TextValue && isvendorShippedAttribute.TextValue.trim().toLowerCase();\r\n const isVendorShiped = isVendorShipTextValue && (isVendorShipTextValue === 'yes' || isVendorShipTextValue === 'true');\r\n !!isVendorShiped === false && SetIsVendorShipped(false);\r\n};\r\n\r\n// Following function renders 'Add to bag' notification'\r\nconst _renderAddedToCartNotification = (resources: IBuyboxResources, navigationUrl: string | undefined): JSX.Element => {\r\n const { buyBoxHeaderMessageText, buyBoxGoToCartText } = resources;\r\n const gotoCartLinkData: Msdyn365.ILinksData = {\r\n ariaLabel: buyBoxGoToCartText,\r\n linkText: buyBoxGoToCartText,\r\n linkUrl: navigationUrl,\r\n role: 'button'\r\n };\r\n return (\r\n \r\n {buyBoxHeaderMessageText}\r\n \r\n \r\n \r\n \r\n );\r\n};\r\n\r\n// Following function renders reviews count\r\nconst _renderReviewCount = (reviewsCount: number | undefined, resources: IBuyboxResources): JSX.Element => {\r\n const { reviewCountLabelForOne, reviewCountLabelForMore } = resources;\r\n let _reviewsCount = reviewsCount;\r\n // display 0 if there is no reviews\r\n _reviewsCount = reviewsCount ? reviewsCount : 0;\r\n return (\r\n \r\n \r\n {_reviewsCount}\r\n \r\n \r\n {reviewsCount === 1 ? reviewCountLabelForOne : reviewCountLabelForMore}\r\n \r\n \r\n );\r\n};\r\n\r\n// Following function is used to render text block for showing banner\r\nconst _renderTextBlock = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!textBlocks || textBlocks.length === 0) {\r\n return undefined;\r\n }\r\n return <>{textBlocks[0]};\r\n};\r\n\r\n// Following function renders quantity with plus and minus buttons\r\nconst _renderQuantity = (\r\n quantityComponent: IBuyboxProductQuantityViewProps,\r\n callbacks: IBuyboxCallbacks,\r\n props: IBuyboxProps,\r\n state: IBuyboxState,\r\n extentionResources: IBuyboxResources\r\n): JSX.Element => {\r\n const { ContainerProps } = quantityComponent;\r\n\r\n const {\r\n resources,\r\n context: {\r\n app: {\r\n config: { maxQuantityForCartLineItem }\r\n }\r\n }\r\n } = props;\r\n\r\n const { quantity } = state;\r\n\r\n const onChange = (newValue: number) => {\r\n if (callbacks.updateQuantity) {\r\n callbacks.updateQuantity(newValue);\r\n }\r\n };\r\n /* VSI Customization - Removed errors from here and displayed it in _renderAddToCart() function only */\r\n return (\r\n \r\n \r\n \r\n );\r\n};\r\n/* VSI Customization - END - 10/11/20 */\r\n\r\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n const { button, ContainerProps } = addToCart;\r\n\r\n return {button};\r\n};\r\n\r\nconst _renderAddToWishlist = (addToWishlist: IBuyboxAddToWishlistViewProps): JSX.Element => {\r\n const { ContainerProps, errorBlock, button } = addToWishlist;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return {dropdowns.map(_renderConfigureDropdown)};\r\n};\r\n\r\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\r\n if (!socialShare || socialShare.length === 0) {\r\n return undefined;\r\n }\r\n\r\n return <>{socialShare[0]};\r\n};\r\n\r\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n {select}\r\n \r\n );\r\n};\r\n\r\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n const { ContainerProps, storeSelector, errors, modal } = findInStore;\r\n\r\n return (\r\n \r\n {storeSelector}\r\n {/* {heading} */}\r\n {/* {description} */}\r\n {errors}\r\n {modal}\r\n \r\n );\r\n};\r\n\r\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\r\n const { ContainerProps, errors, input } = shopSimilarItem;\r\n\r\n return (\r\n \r\n {errors}\r\n {input}\r\n \r\n );\r\n};\r\nexport default BuyboxView;\r\n","import { Modal, ModalBody, ModalFooter, ModalHeader } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nexport interface IDobbiesModalProps {\r\n modalBodySlots?: React.ReactNode[];\r\n modalBodyElement?: JSX.Element;\r\n isOpen: boolean;\r\n className: string;\r\n modalTitle: JSX.Element;\r\n modalFooter: JSX.Element;\r\n onModalToggle?(): void;\r\n}\r\n\r\nconst DobbiesModal: React.FC = (props: IDobbiesModalProps) => {\r\n return (\r\n \r\n {props.modalTitle && {props.modalTitle}}\r\n {props.modalBodySlots && {props.modalBodySlots}}\r\n {props.modalBodyElement && {props.modalBodyElement}}\r\n {props.modalFooter && {props.modalFooter}}\r\n \r\n );\r\n};\r\n\r\nexport default DobbiesModal;\r\n","import { Collapse, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as Msdyn365 from '@msdyn365-commerce/core';\r\nimport { AttributeValue } from '@msdyn365-commerce/retail-proxy';\r\nimport React, { useState } from 'react';\r\n\r\ninterface ICustomCollapseProps {\r\n child: AttributeValue[];\r\n}\r\n/**\r\n * VSI Customization\r\n * The CustomCollapse component renders collapse text along with collapse name. For each item, this collapse is called separately.\r\n * That's why multiple collapse can be expanded at a time.\r\n * @extends {React.PureComponent}\r\n */\r\n\r\nconst CustomCollapse: React.FC = props => {\r\n const [activeItem, SetActiveItem] = useState(0);\r\n const _toggleCollapse = (selectedItem: number) => () => {\r\n selectedItem !== activeItem ? SetActiveItem(selectedItem) : SetActiveItem(-1);\r\n };\r\n return (\r\n \r\n {props.child &&\r\n props.child\r\n .filter((attribute: AttributeValue) => {\r\n return attribute.TextValue;\r\n })\r\n .map((attribute: AttributeValue, index: number) => {\r\n const isActive = activeItem === index;\r\n return (\r\n \r\n \r\n {attribute.Name}\r\n \r\n \r\n \r\n \r\n \r\n );\r\n })}\r\n \r\n );\r\n};\r\n\r\nexport default CustomCollapse;\r\n","import classnames from 'classnames';\r\nimport * as React from 'react';\r\n\r\n/*!\r\n * Copyright (c) Microsoft Corporation.\r\n * All rights reserved. See LICENSE in the project root for license information.\r\n */\r\nimport { IComponent, IComponentProps, msdyn365Commerce } from '@msdyn365-commerce/core';\r\nimport { ProductPrice, DiscountLine, Cart } from '@msdyn365-commerce/retail-proxy';\r\n\r\nexport interface IPriceComponentProps extends IComponentProps<{ price: ProductPrice }> {\r\n className?: string;\r\n savingsText?: string;\r\n freePriceText?: string;\r\n originalPriceText?: string;\r\n currentPriceText?: string;\r\n discountLine?: DiscountLine[] | undefined;\r\n cartData?: Cart;\r\n updatedPrice?: number;\r\n currencyCode?: string;\r\n getTierId?: () => number | undefined;\r\n clubPlusDiscountsOfferId?: DiscountLine | undefined | false;\r\n}\r\nexport interface IPriceComponent extends IComponent {}\r\n\r\nconst PriceComponentActions = {};\r\n\r\nconst Price: React.FC = (props: IPriceComponentProps) => {\r\n // CustomerContextualPrice could be 0\r\n if (props.data.price.CustomerContextualPrice === undefined) {\r\n return null;\r\n }\r\n\r\n //loyalty &&\r\n\r\n return (\r\n \r\n {showStrikethroughPricing(props) ? renderCurrentPriceWithOriginalPrice(props) : renderCurrentPrice(props)}\r\n \r\n );\r\n};\r\n\r\nconst showStrikethroughPricing = (props: IPriceComponentProps) => {\r\n const originalPrice = getOriginalPrice(props);\r\n\r\n if (originalPrice && props.data.price.CustomerContextualPrice) {\r\n return originalPrice > props.data.price.CustomerContextualPrice;\r\n }\r\n\r\n return false;\r\n};\r\n\r\nconst getOriginalPrice = (props: IPriceComponentProps) => {\r\n return Math.max(props.data.price.BasePrice || 0, props.data.price.TradeAgreementPrice || 0, props.data.price.AdjustedPrice || 0);\r\n};\r\n\r\nconst renderCurrentPrice = (props: IPriceComponentProps, clubPlusDiscountsOfferId?: DiscountLine, checkUserLoyalty?: boolean): JSX.Element | undefined => {\r\n const initialPrice = formatCurrency(props, props.data.price.CustomerContextualPrice);\r\n return (\r\n \r\n {initialPrice}\r\n \r\n );\r\n};\r\n\r\nconst formatCurrency = (props: IPriceComponentProps, price: number | undefined): string | undefined => {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(price, props.currencyCode);\r\n};\r\n\r\nconst renderCurrentPriceWithOriginalPrice = (props: IPriceComponentProps): JSX.Element | null => {\r\n const originalPrice = getOriginalPrice(props);\r\n const initialPrice = formatCurrency(props, originalPrice);\r\n\r\n const checkClubPlusDiscounts = props.discountLine && props.discountLine.find(x => x.OfferId === props.context.app.config.discountId);\r\n const checkUserLoyalty = props.getTierId && props.getTierId() === props.context.app.config.LoyaltyTierId ? true : undefined;\r\n // props.cartData &&\r\n // props.cartData.AffiliationLines &&\r\n // props.cartData.AffiliationLines.find(x => x.LoyaltyTierId === props.context.app.config.LoyaltyTierId);\r\n const checkNonClubPlusDiscounts = props.discountLine && props.discountLine.find(x => x.OfferId !== props.context.app.config.discountId);\r\n\r\n const clubPlusFormatCurrency = (\r\n props: IPriceComponentProps,\r\n price: number | undefined,\r\n nonClubPlusPrice: number | undefined\r\n ): string | undefined => {\r\n if (price === undefined) {\r\n return undefined;\r\n }\r\n if (price === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n if (nonClubPlusPrice === undefined) {\r\n return undefined;\r\n }\r\n if (nonClubPlusPrice === 0 && props.freePriceText) {\r\n return props.freePriceText;\r\n }\r\n\r\n return props.context.cultureFormatter.formatCurrency(nonClubPlusPrice, props.context.request.channel?.Currency);\r\n };\r\n\r\n const renderClubPlusCurrentPrice = (props: IPriceComponentProps): JSX.Element | undefined => {\r\n const initialPrice = clubPlusFormatCurrency(props, props.data.price.CustomerContextualPrice, props.updatedPrice);\r\n return (\r\n \r\n {initialPrice}\r\n \r\n );\r\n };\r\n\r\n return (\r\n <>\r\n {checkClubPlusDiscounts && checkUserLoyalty ? (\r\n <>\r\n \r\n {' '}\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n {/* VSI Customization - Start - 23/10/2020 */}\r\n {/* Displayed discounted price on the left, Actual price on the right */}\r\n\r\n \r\n \r\n ) : checkClubPlusDiscounts && checkNonClubPlusDiscounts && checkUserLoyalty === undefined ? (\r\n <>\r\n \r\n {' '}\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n {/* VSI Customization - Start - 23/10/2020 */}\r\n {/* Displayed discounted price on the left, Actual price on the right */}\r\n \r\n \r\n {/* VSI - Customization - End */}\r\n {props.savingsText && {props.savingsText}}\r\n \r\n ) : checkClubPlusDiscounts && checkUserLoyalty === undefined ? (\r\n <>\r\n \r\n {' '}\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n {/* VSI Customization - Start - 23/10/2020 */}\r\n {/* Displayed discounted price on the left, Actual price on the right */}\r\n\r\n \r\n \r\n ) : (\r\n <>\r\n \r\n {' '}\r\n {props.originalPriceText} {initialPrice} {props.currentPriceText} {renderCurrentPrice(props)}\r\n \r\n {/* VSI Customization - Start - 23/10/2020 */}\r\n {/* Displayed discounted price on the left, Actual price on the right */}\r\n \r\n {props.clubPlusDiscountsOfferId && checkUserLoyalty ? (\r\n \r\n ) : (\r\n \r\n )}\r\n {/* VSI - Customization - End */}\r\n {props.savingsText && {props.savingsText}}\r\n \r\n )}\r\n \r\n );\r\n};\r\n\r\n// @ts-ignore\r\nexport const PriceComponent: React.FunctionComponent = msdyn365Commerce.createComponentOverride(\r\n 'Price',\r\n { component: Price, ...PriceComponentActions }\r\n);\r\n\r\nexport default PriceComponent;\r\n","const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['buybox'] = {\n c: () => require('@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox'),\n $type: 'containerModule',\n da: [{name:'cart', path:'@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action', runOn: 0},{name:'cartConfiguration', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration', runOn: 0},{name:'catalogs', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs', runOn: 0},{name:'channelDeliveryOptionConfig', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration', runOn: 0},{name:'customerInformation', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer', runOn: 0},{name:'deliveryOptions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant', runOn: 0},{name:'featureState', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state', runOn: 0},{name:'orderTemplates', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview', runOn: 1},{name:'product', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant', runOn: 0},{name:'productAvailableQuantity', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant', runOn: 0},{name:'productDimensions', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant', runOn: 0},{name:'productPrice', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant', runOn: 0},{name:'ratingsSummary', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary', runOn: 1},{name:'storeSelectorStateManager', path:'@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action', runOn: 1},{name:'wishlists', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'buybox',\n p: 'buybox',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action';\n let dataAction = require('@msdyn365-commerce-modules/bopis-utilities/dist/lib/store-selector-state-manager/store-selector-state-manager-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-cart-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-catalogs');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-channel-delivery-option-configuration');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-customer');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-delivery-options-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-dimensions-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-feature-state');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-price-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-product-availabilities-for-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-ratings-summary');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-selected-variant');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-wishlist-by-customer-id');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/order-templates/get-order-templates-preview');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action';\n let dataAction = require('@msdyn365-commerce/global-state/dist/lib/data-actions/cart-state-data-action');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['__local__|__local__|themes|dobbies|views|buybox'] = {\n c: () => require('partner/themes/dobbies/views/buybox.view.tsx'),\n cn: '__local__-__local__-buybox'\n };\nviewDictionary['@msdyn365-commerce-modules|buybox|modules|buybox|buybox'] = {\n c: () => require('@msdyn365-commerce-modules/buybox/dist/lib/modules/buybox/buybox.view.js'),\n cn: '@msdyn365-commerce-modules-buybox-buybox'\n };\nviewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|buybox'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/buybox.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-buybox'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|buybox'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/buybox.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-buybox'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ICoreContext } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport {\n AsyncResult,\n CartLine,\n CartLineValidationResults,\n CartLineValidationResultsByLineId,\n CartsDataActions,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\n\nimport { ITelemetry } from '@msdyn365-commerce/telemetry-internal';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\n\n/**\n * Validate the cart.\n * @param isQuantityLimitsFeatureEnabled -- Is the quantity limits feature enabled.\n * @param cart -- The cart state to validate.\n * @param telemetry -- The telemetry.\n * @param propsContext -- The props context.\n * @param shouldRetry -- Should retry.\n * @returns A list of line data validation failures.\n */\nexport async function validateCartAsync(\n cart: AsyncResult,\n telemetry: ITelemetry,\n propsContext: ICoreContext,\n shouldRetry: boolean = true\n): Promise {\n let cartResult: ICartState;\n let cartVersion: number | undefined;\n try {\n cartResult = await cart;\n cartVersion = cartResult.cart.Version;\n } catch (error) {\n telemetry.warning(error);\n telemetry.debug('Unable to get cart or cart version.');\n return AsyncResult.resolve();\n }\n\n if (cartVersion) {\n try {\n const validationResult: CartLineValidationResults = await CartsDataActions.validateForCheckoutAsync(\n { callerContext: propsContext.actionContext, bypassCache: 'none' },\n cartResult.cart.Id,\n cartVersion\n );\n\n return await AsyncResult.resolve(validationResult.ValidationResultsByLineId ?? undefined);\n } catch (error) {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- error type is not defined.\n if (shouldRetry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n try {\n await cartResult.refreshCart({});\n } catch (refreshError) {\n telemetry.warning(refreshError);\n telemetry.debug('Unable to refresh Cart');\n return AsyncResult.resolve();\n }\n try {\n await validateCartAsync(cart, telemetry, propsContext, false);\n return AsyncResult.resolve();\n } catch (validateError) {\n telemetry.warning(validateError);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n }\n\n telemetry.warning(error);\n telemetry.debug('Unable to validate Cart');\n return AsyncResult.resolve();\n }\n } else {\n telemetry.warning('Cart version not found for Cart validation request.');\n return AsyncResult.resolve();\n }\n}\n\n/**\n * Check if cart line quantity update is success.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function isCartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult.status === 'SUCCESS');\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve(false);\n}\n\n/**\n * Update cart line with cart action result.\n * @param isQuantityLimitsFeatureEnabled -- Is quantity limits feature enabled.\n * @param cartResult -- The cart result.\n * @param telemetry -- The telemetry.\n * @param products -- The products.\n * @param cartLineToUpdate -- The cart line to update.\n * @param quantity -- The quantity.\n * @returns Boolean to indicate if the cart line quantity is updated.\n */\nexport async function cartLineQuantityUpdatedAsync(\n isQuantityLimitsFeatureEnabled: boolean | undefined,\n cartResult: ICartState | undefined,\n telemetry: ITelemetry,\n products: SimpleProduct[] | undefined,\n cartLineToUpdate: CartLine,\n quantity: number\n): Promise {\n if (cartResult) {\n let isUsingDefaultOrderSettingsMax: boolean = false;\n if (ArrayExtensions.hasElements(products) && isQuantityLimitsFeatureEnabled) {\n const modifiedProduct: SimpleProduct | undefined = products.find(\n (product: SimpleProduct) => product.RecordId === cartLineToUpdate.ProductId\n );\n isUsingDefaultOrderSettingsMax = !!modifiedProduct && !!modifiedProduct.Behavior?.MaximumQuantity;\n } else {\n isUsingDefaultOrderSettingsMax = false;\n }\n\n const input = {\n cartLineId: cartLineToUpdate.LineId!.toString(),\n newQuantity: quantity,\n additionalProperties: { isUsingDefaultOrderSettingsMax }\n };\n\n try {\n const updateLineResult: ICartActionResult = await cartResult.updateCartLineQuantity(input);\n return await AsyncResult.resolve(updateLineResult);\n } catch (error) {\n telemetry.warning((error as Error).message);\n telemetry.debug('Unable to update Cart Line quantity');\n }\n }\n\n return AsyncResult.resolve();\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxProps,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport { IncrementalQuantity, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxProps as IBuyboxExtentionProps,\n IBuyboxResources as IBuyboxExtentionResources\n} from '../definition-extensions/buybox.ext.props.autogenerated';\n\nconst BuyboxView: React.FC> = props => {\n const {\n ModuleProps,\n MediaGalleryContainerProps,\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n telemetryContent,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n callbacks,\n state,\n resources,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n quantityLimitsMessages,\n min,\n max,\n applyDefaultOrderSettings,\n shopSimilarDescription,\n unitOfMeasure\n } = props;\n\n return (\n \n {props.mediaGallery}\n \n {title}\n {price}\n {unitOfMeasure}\n {props.bulkPurchaseLink}\n {description}\n {_renderTextBlock(props.slots.textBlocks)}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity &&\n _renderQuantity(\n quantity,\n callbacks,\n props,\n state,\n resources,\n quantityLimitsMessages,\n min,\n max,\n applyDefaultOrderSettings,\n telemetryContent\n )}\n {inventoryLabel}\n {_renderCartAndActions(addToCart, addToOrderTemplate, addToWishlist)}\n {findInStore && _renderFindInStore(findInStore)}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\n \n \n );\n};\n\nconst _renderTextBlock = (textBlocks: React.ReactNode[]): JSX.Element | undefined => {\n if (!textBlocks || textBlocks.length === 0) {\n return undefined;\n }\n\n return <>{textBlocks[0]};\n};\n\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\nconst _renderCartAndActions = (\n addToCart?: IBuyboxAddToCartViewProps,\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps,\n addToWishlist?: IBuyboxAddToWishlistViewProps\n): JSX.Element | undefined => {\n if (!addToCart && !addToWishlist) {\n return undefined;\n }\n\n return (\n
\n {addToCart && addToCart.errorBlock}\n {addToOrderTemplate && addToOrderTemplate.errorBlock}\n {addToWishlist && addToWishlist.errorBlock}\n
\n {addToCart && addToCart.button}\n {addToOrderTemplate && addToOrderTemplate.button}\n {addToWishlist && addToWishlist.button}\n
\n
\n );\n};\n\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(_renderConfigureDropdown)};\n};\n\nconst _renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n \n {heading}\n {errors}\n \n {select}\n \n );\n};\n\nconst _renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\nconst _renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n min: number | undefined,\n max: number | undefined,\n applyDefaultOrderSettings?: boolean,\n telemetryContent?: ITelemetryContent\n): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {quantityLimitsMessages}\n \n );\n};\n\nconst _renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\nconst _renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\nexport default BuyboxView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToOrderTemplateComponent,\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateActionErrorResult,\n IOrderTemplateNameDialogResources\n} from '@msdyn365-commerce/components';\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getConfigureErrors,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\n\n/**\n * To generate AddToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\n */\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\n return {\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\n\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\n\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\n\n selectTemplatesText: resources.selectTemplatesText,\n addToTemplateButtonText: resources.addToTemplateButtonText,\n lineItemsText: resources.lineItemsText\n };\n}\n\n/**\n * To generate OrderTemplateNameDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\n */\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\n return {\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\n orderTemplateTitleLabel: resources.orderTemplateTitle,\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\n orderTemplateDescription: resources.createOrderTemplateDescription,\n\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\n\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\n };\n}\n\n/**\n * To generate ItemAddedToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\n */\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\n return {\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\n continueShoppingButtonText: resources.continueShoppingButtonText,\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\n freePriceText: resources.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText\n };\n}\n\n/**\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\n * @param resources - The resources.\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\n */\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(\n resources: IBuyboxCommonResources\n): IDuplicateItemsWhenAddingToOrderTemplateDialogResources {\n return {\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\n updateQuantityButtonText: resources.updateQuantityButtonText,\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\n };\n}\n\n/**\n * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IOrderTemplateActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'ORDER_TEMPLATE',\n configureErrors:\n result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToOrderTemplateButton.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns JSX element.\n */\nexport const renderAddToOrderTemplateButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\n id,\n typeName,\n context,\n data: {\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n resources,\n config\n } = props;\n\n const { quantity } = state;\n\n const isShowButtonText = true;\n const isMultipleCatalogsFeatureEnabled = props.isChannelMultipleCatalogsFeatureEnabled || false;\n return (\n orderTemplates && (\n \n )\n );\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\nimport { format, ItemAvailability, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\nimport {\n getConfigureErrors,\n IBuyboxAddToCartViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxData,\n IBuyboxFindInStoreViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxResources as IBuyboxExtentionResources,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IBuyboxViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport {\n ArrayExtensions,\n getFullAvailableInventoryNearby,\n GetFullAvailableInventoryNearbyInput,\n IFullOrgUnitAvailability\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { IncrementalQuantity, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport { reaction } from 'mobx';\nimport * as React from 'react';\n\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\n\n/**\n * BuyBoxConstants enum.\n */\nexport enum BuyBoxConstants {\n zero = 0\n}\n\n/**\n * On Change function.\n * @param callbacks -Callbacks.\n * @returns Update quantity.\n */\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n};\n\n/**\n * RenderQuantity.\n * @param quantityComponent - QuantityComponent.\n * @param callbacks - Callbacks.\n * @param props - Props.\n * @param state - State.\n * @param extentionResources - ExtentionResources.\n * @param quantityLimitsMessages - QuantityLimitsMessages.\n * @param max - Max.\n * @param telemetryContent - TelemetryContent.\n * @param unitOfMeasure - Unit Of Measure.\n * @returns -- Returns.\n */\nconst renderQuantity = (\n quantityComponent: IBuyboxProductQuantityViewProps,\n callbacks: IBuyboxCallbacks,\n props: IBuyboxProps,\n state: IBuyboxState,\n extentionResources: IBuyboxExtentionResources,\n quantityLimitsMessages: React.ReactNode,\n\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n min: number | undefined,\n max: number | undefined,\n applyDefaultOrderSettings?: boolean,\n telemetryContent?: ITelemetryContent,\n unitOfMeasure?: React.ReactNode\n): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\n\n const { resources } = props;\n\n const { quantity } = state;\n\n return (\n \n \n {heading}\n {errors}\n \n\n \n {unitOfMeasure}\n {quantityLimitsMessages}\n \n );\n};\n\n/**\n * Render key in price function.\n * @param keyInPrice - KeyInPrice.\n * @returns -- Returns.\n */\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\n};\n\n/**\n * RenderAddToCart.\n * @param addToCart - AddToCart.\n * @returns -- Returns.\n */\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\n/**\n * RenderFindInStore.\n * @param findInStore - FindInStore.\n * @returns -- Returns.\n */\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\n\n return (\n \n {storeSelector}\n {heading}\n {productPickupOptionList}\n {description}\n {errors}\n {button}\n {modal}\n \n );\n};\n\n/**\n * RenderAddToOrderTemplate.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToOrderTemplate = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToOrderTemplate || !product) {\n return null;\n }\n\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\n\n return (\n \n {props.addToOrderTemplate.errorBlock}\n {orderTemplateButton}\n \n );\n};\n\n/**\n * Add to wishlist failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox resources.\n * @param product -Simple product.\n * @returns Update error state.\n */\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\n result: IWishlistActionErrorResult\n) => {\n callbacks.updateErrorState({\n errorHost: 'WISHLIST',\n configureErrors:\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\n });\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox view props.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns.\n */\nconst renderAddtoWishlistButton = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n product: SimpleProduct\n): React.ReactNode => {\n const { context, resources } = props;\n const wishlists = props.data.wishlists.result;\n const isShowWishlitButtonText = true;\n return (\n \n );\n};\n\n/**\n * RenderAddToWishlist.\n * @param props - Buybox viewprops.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @returns -- Returns.\n */\nconst renderAddToWishlist = (\n props: IBuyboxViewProps & IBuyboxExtentionProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): JSX.Element | null => {\n const product = props.data.product.result;\n if (!props.addToWishlist || !product) {\n return null;\n }\n\n if (!props.config.enableWishlist) {\n return null;\n }\n\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\n return (\n \n {props.addToWishlist.errorBlock}\n {wishlistButton}\n \n );\n};\n\n/**\n * RRenderShopSimilarItem.\n * @param shopSimilarItem - ShopSimilarItem.\n * @returns -- Returns.\n */\nconst renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const { ContainerProps, errors, input } = shopSimilarItem;\n\n return (\n \n {errors}\n {input}\n \n );\n};\n\n/**\n * RenderSocialShare.\n * @param socialShare - Social share react node array.\n * @returns -- Returns.\n */\nconst _renderSocialShare = (socialShare: React.ReactNode[]): JSX.Element | undefined => {\n if (!socialShare || socialShare.length === 0) {\n return undefined;\n }\n\n return <>{socialShare[0]};\n};\n\n/**\n * RenderConfigureDropdown.\n * @param dropdown - Buybox product configure dropdown view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigureDropdown = (dropdown: IBuyboxProductConfigureDropdownViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, errors, select } = dropdown;\n\n return (\n \n {heading}\n {select}\n {errors}\n \n );\n};\n\n/**\n * RenderConfigure.\n * @param configure - Buybox product configure view props.\n * @returns -- Returns JSX.Element.\n */\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(renderConfigureDropdown)};\n};\n\n/**\n * BuyboxView.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst BuyboxView: React.FC> = props => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n const {\n ModuleProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n MediaGalleryContainerProps,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n productComparisonButton,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n shopSimilarDescription,\n min,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\n max,\n applyDefaultOrderSettings,\n unitOfMeasure,\n callbacks,\n state,\n resources,\n quantityLimitsMessages,\n telemetryContent,\n app: { config: appConfig },\n catalogs\n } = props;\n let skuText: string = props.resources.skuText;\n skuText += props.data.product.result?.ItemId;\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\n\n const [availability, setAvailability] = React.useState('');\n const [isStoreChange, setIsStoreChange] = React.useState(false);\n\n /**\n * GetStockInventoryLabel.\n * @param availabilityWithHours - Stock availability with hours.\n * @returns -- Returns.\n */\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\n if (\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\n productInventoryInformation.InventLocationId\n ) {\n return productInventoryInformation.StockLevelLabel;\n }\n }\n }\n\n return undefined;\n };\n\n const getInventory = React.useCallback(async () => {\n const input = new GetFullAvailableInventoryNearbyInput(\n props.data.product.result?.RecordId,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n BuyBoxConstants.zero,\n true\n );\n\n /**\n * IsProductInStock.\n * @param itemAvailabilities - Item availability array.\n * @returns -- Returns.\n */\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\n if (!appConfig.enableStockCheck) {\n return true;\n }\n\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\n }\n\n return false;\n };\n\n await getFullAvailableInventoryNearby(input, props.context.actionContext)\n .catch((error: Error) => {\n props.telemetry.error(error.message);\n })\n .then(response => {\n if (response && ArrayExtensions.hasElements(response)) {\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\n : undefined;\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\n const preferredStoreAvailabilityText = `${format(\n props.resources.availabilityAtPreferredStoreText,\n preferredStoreName\n )} ${stockText}`;\n setAvailability(preferredStoreAvailabilityText);\n }\n });\n\n setIsStoreChange(false);\n }, [\n props.data.product.result?.RecordId,\n appConfig.enableStockCheck,\n preferredStoreId,\n preferredStoreName,\n props.context.actionContext,\n props.resources.availabilityAtPreferredStoreText,\n props.resources.inStockText,\n props.resources.outOfStockText,\n props.telemetry\n ]);\n\n React.useEffect(() => {\n if (props.config.displayStockAvailability) {\n getInventory().catch((error: Error) => {\n props.telemetry.error(error.message);\n });\n }\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability]);\n\n reaction(\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\n () => {\n setIsStoreChange(true);\n }\n );\n\n /**\n * RenderAvailabiltyAtPreferredStore.\n * @returns -- Returns.\n */\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\n return undefined;\n }\n const containerProps: INodeProps = {\n className: 'ms-buybox__preferred-store-availability',\n tag: 'span'\n };\n\n return {availability};\n };\n return (\n \n {props.mediaGallery}\n \n {catalogs && catalogs[0].Name}\n {title}\n \n
{skuText}
\n {rating}\n
\n \n
{props.resources.priceText}
\n {price}\n
\n {configure && renderConfigure(configure)}\n {keyInPrice && renderKeyInPrice(keyInPrice)}\n \n
\n {quantity &&\n renderQuantity(\n quantity,\n callbacks,\n props,\n state,\n resources,\n quantityLimitsMessages,\n min,\n max,\n applyDefaultOrderSettings,\n telemetryContent,\n unitOfMeasure\n )}\n {props.bulkPurchaseLink}\n
\n
\n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\n {inventoryLabel}\n {renderAddToCart(addToCart)}\n {findInStore && renderFindInStore(findInStore)}\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\n {productComparisonButton}\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\n {findInStore?.productPickupOptionList ? (\n
{findInStore.productPickupOptionList}
\n ) : null}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n
{props.resources.shopText}
\n \n {shopSimilarLook && renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && renderShopSimilarItem(shopSimilarDescription)}\n \n \n
{props.resources.descriptionText}
\n {description}\n
\n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\n {props.slots.productSpecification[0]}\n ) : null}\n
\n
\n );\n};\n\nexport default BuyboxView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["CartModulesStateShareInput","constructor","getCacheKey","getCacheObjectType","dataCacheType","async","updateCartStateAction","input","ctx","isCartUpdated","undefined","isQuantityUpdated","createObservableDataAction","action","inputData","GetAllOrgUnitLocationsByAreaInput","_Latitude","_Longitude","_Radius","_DistanceUnitValue","_IgnoreLocation","this","Latitude","Longitude","Radius","DistanceUnitValue","IgnoreLocation","createGetOrgUnitLocationsByAreaInput","getFeatureState","context","getFeatureStateActionDataAction","FeatureStateInput","getAllOrgUnitLocationsByArea","_featureState$find","searchArea","featureState","retailMulitplePickupMFeatureState","find","item","Name","IsEnabled","getOrgUnitLocationsByAreaAsync","callerContext","queryResultSettings","QueryResultSettingsProxy","getPagingFromInputDataOrDefaultValue","then","locationDeliveryOptions","orgUnitChannel","stores","map","store","ChannelId","channelCollection","length","channelIdList","id","push","getChannelDeliveryOptionsAsync","channelDeliveryOptions","Error","catch","error","trace","message","telemetry","exception","debug","_getLocationPickUpDeliveryModes","locationPromiseList","_locationDeliveryOpti","locationDeliveryOption","_channeldeliveryoption","orgUnitLocation","channelDeleiveryOptions","OrgUnitNumber","OrgUnitAvailability","getStoreHoursAsync","hours","availability","OrgUnitLocation","OrgUnitPickUpDeliveryModes","StoreHours","_getLocationWithHours","Promise","all","getOrgUnitLocationsByAreaDataAction","CookieComplianceAcceptButton","_ref","acceptCookiesButtonText","acceptCookiesButtonAriaLabel","telemetryContent","onClose","payLoad","getPayloadObject","attributes","getTelemetryAttributes","React","Object","assign","type","className","onClick","CookieComplianceLinks","_mapEditableLinks","linkdata","editableLinks","forEach","link","index","props","linkText","contentAction","etext","editableLink","ariaLabel","linkUrl","destinationUrl","openInNewTab","role","additionalProperties","onTelemetryClick","render","links","Msdyn365","editProps","onTextChange","requestContext","CheckboxType","CookieCompliance","super","getTelemetryObject","request","telemetryPageName","friendlyName","handleLinkTextChange","linkIndex","event","_this$props$config$ac","config","actionLinks","target","value","handleContentChange","content","state","visible","checkboxesChecked","name","Functional","Analytics","Unclassified","cookieRef","_onDismiss","bind","componentDidMount","cookieConsent","cookies","get","recentlyViewed","isConsentGiven","deleteConsentCookie","setState","handleCheckboxClicked","newCheckboxesChecked","resources","acceptCookiesAriaLabel","moduleConfig","MsDyn365","isBrowser","viewProps","_objectSpread","onDismiss","CookieComplianceBanner","moduleProps","classnames","ref","AlertProps","color","fade","Content","text","onEdit","checkboxes","checked","alert","functionalAlertText","htmlFor","onChange","ArrayExtensions","hasElements","acceptButton","renderView","setConsentCookie","set","expires","Date","getTime","location","reload","Modal","isOpen","applicationNode","autoFocus","modalTitle","ModalHeader","modalBodySlots","ModalBody","modalBodyElement","modalFooter","ModalFooter","featureNames","createGetFeatureStateInput","getFeatureStateAction","getFeatureStatesAsync","Quantity","inputRef","_validateMin","minValue","min","isNaN","currentInput","currentCount","_onIncrement","_onDecrement","_handleChange","reaction","componentDidUpdate","glyphMinusClassName","decrementGlyphClass","glyphPlusClassName","incrementGlyphClass","disabled","incDisabled","max","currentValue","extraClass","extraClassInc","hideQuantityControls","title","decrementButtonAriaLabel","tabIndex","pattern","onBlur","inputQuantityAriaLabel","disabledInput","incrementButtonAriaLabel","invokeCallback","currQuantity","updatedQuantity","e","parseInt","inputElement","current","HTMLInputElement","debounce","setAttribute","toString","defaultProps","__decorate","observer","AddToCartComponentActions","_event","setDisabled","openModal","setAddedtoCart","firstCase","toggleFirstCase","setIsAgeRestrictionModalOpen","setChecked","isAgeRestricted","setRelatedProductsModalOpen","cartError","addToCartError","productToAdd","data","product","propogateError","getSelectedProduct","cartState","getCartState","actionContext","app","behavior","addToCartBehavior","addProductToCart","count","quantity","availableQuantity","productAvailability","AvailableQuantity","orderQuantityLimitsFeatureIsEnabled","isOrderQuantityLimitsFeatureEnabled","enableStockCheck","isPriceKeyedIn","customPrice","customPriceAmount","isAddEmailDeliveryItemToCart","result","status","dialogStrings","navigationUrl","potsProductCount","propogateResult","failureReason","cartActionResult","_getAddtoBasketButton","_disabled","onClickHandler","popupAttributes","label","getLinkText","payload","TelemetryEvent","AddToCart","_popupAttributes","isOutOfStock","shouldShowOutOfStock","isHover","setIsHover","useState","isDisabled","isIntermediateState","onMouseLeave","onMouseEnter","ItemId","modalOpen","setModalOpen","isAgeRestrictionModalOpen","setIsAgeRestricted","addedtoCart","relatedProductsModalOpen","useEffect","isAgeRestrictedProduct","onAddToCartClicked","priceComponent","price","PriceComponent","typeName","freePriceText","originalPriceText","currentPriceText","popupProps","imageSettings","gridSettings","productQuantity","renderModalPopup","Popup","plantsPotsProductsSlot","addToCartButton","DobbiesModal","addToCartModalTitle","addToCartModalBody","addToCartModalFooter","displayRelatedProductsModule","isAddedToCart","isAgeRestrictionPopup","ageRestrictionPopupHeading","closeModal","ageRestrictionNote","ageConfirmation","ageVerificationDetails","setAddtoCartModal","cancelButtonLabel","outOfStockText","addToCartTextHd","isCustomPriceSelected","maximumKeyInPrice","minimumKeyInPrice","defaultMaximumKeyInPrice","defaultMinimumKeyInPrice","RecordId","Dimensions","missingDimensions","filter","dimension","DimensionValue","Value","stockLeft","Math","includeCurrentQuantity","isLoading","isUpdatingDimension","isAddServiceItemToCart","isLoadingDeliveryOptions","isUpdatingDeliveryOptions","includedQuantityNumber","onAdd","onError","getGenericError","cart","addedToCartFailureMessage","substatus","elementFoundAt","productIdToFind","i","CartLines","ProductId","DeliveryMode","channel","PickupDeliveryModeCode","FulfillmentStoreId","curQuantity","maxQuantityForCartLineItem","availableQty","quantityLimit","maxQuantityLimitText","replace","_result$cartActionRes","errorDetails","LocalizedMessage","getConfigureErrors","isGiftCard","dimensions","DimensionTypeValue","dimensionTypeValue","productDimensionTypeColorErrorMessage","productDimensionTypeConfigurationErrorMessage","productDimensionTypeSizeErrorMessage","productDimensionTypeAmountErrorMessage","productDimensionTypeStyleErrorMessage","getDimensionErrorString","BuyboxErrorBlock","showError","configureErrors","quantityError","customAmountError","otherError","SetIsError","errorMessages","values","Alert","assertive","buyboxErrorMessageHeader","_isOrderQuantityLimitsFeatureEnabled","_props$data$featureSt","_props$context","defaultOrderQuantityLimitsFeatureConfig","platform","enableDefaultOrderQuantityLimits","customerInfo","customerInformation","IsB2b","getBuyboxFindInStore","callbacks","_data$product","_data$productPrice","_data$storeSelectorSt","_data$deliveryOptions","_data$featureState","_deliveryOptions$Deli","_props$data$product","_props$data$productPr","_deliveryOptions$Deli2","slots","storeSelectors","priceFree","findInStoreHeaderText","findInStoreDescriptionText","findInStoreLinkText","buyBoxGoToCartText","buyBoxContinueShoppingText","buyBoxSingleItemText","buyBoxMultiLineItemFormatText","buyBoxHeaderMessageText","descriptionTextToShowAllPickupOptions","isError","SetIsAddedToCart","localSelected","setLocalSelected","hasCnC","setHasCnC","productPrice","storeSelectorStateManager","deliveryOptions","errorState","errorHost","optionCnC","DeliveryOptions","option","Code","allAttributes","productAttributes","isvendorShippedAttribute","attribute","trim","toLowerCase","isVendorShipTextValue","TextValue","val","_props$data","productAvailableQuantity","modules","selectedProduct","dataProduct","multiplePickupStoreSwitchName","storeSelectorId","keys","updateErrorState","openDialog","onLocationSelected","deliveryMode","resolve","changeModalOpen","ProductAvailableQuantity","failureResult","findInStoreOnClick","goToCartText","continueShoppingText","headerItemOneText","headerItemFormatText","headerMessageText","defaultImageSettings","viewports","xs","q","w","h","lg","xl","lazyload","getUrlSync","ContainerProps","storeSelector","openFindInStoreDialog","heading","Heading","headingTag","description","productPickupOptionList","key","Description","errors","checkStock","clickAndCollect","modal","VSIRestAPIHandlerExtensionClass","odataObject","Id","newObj","Status","NoOfTransactions","ExtensionProperties","substr","lastIndexOf","concat","EntityClasses","createVSIInitiateRestCallInput","customerId","customerEmailAddress","productCode","company","emailSent","productCodeRefRecId","DataServiceQuery","DataServiceEntities","vSIGetAPIResponseQuery","createDataServiceRequestForOperation","bypassCache","returnEntity","counter","_getAllStores","latitude","longitude","radius","distanceUnitValue","orgUnitLocationsInput","onQuantityChange","productId","newValue","cartProducts","setCartProducts","isSummaryInModal","maxQuantityForBundle","_cookies$get6","_cartState$cart$CartL","cl","c","simpleProduct","_cookies$get5","maxQuantities","Array","isArray","maxQ","maxQuantity","_props$context$action","diffInQuantity","getDeliveryOptionsAsync","emailDeliveryModeCode","EmailDeliveryModeCode","addProductToCartInput","cncProducts","includes","_storeLocation$OrgUni3","cncOption","dopt","_dopt$DeliveryOptions","delOpt","storeLocation","sl","_sl$OrgUnitAvailabili2","InventoryLocationId","_storeLocation$OrgUni4","_cncOption","update","cartLineQuantityUpdatedAsync","changeQinBundlesModalSummary","addedProductsToCollection","cartProductsCopy","cp","updatedProducts","obj","valueToBeUpdated","inventoryLocationId","_renderCartLines","cartLines","bundlesSummaryScrollPos","setBundlesSummaryScrollPos","bundlesModalSummaryScrollPos","setBundlesModalSummaryScrollPos","_cookies$get7","totalPrice","productsAddedInBundles","elemId","elem","window","document","getElementById","minProductsToScroll","innerWidth","upArrowId","downArrowId","scrollPos","maxQuantityReachedMsg","maxQuantityReachedInBundlesmsg","_props$data$cart$resu16","_props$data$cart$resu17","_props$data$cart$resu15","_props$data$cart$resu18","p","Button","scrollTop","hidden","onScroll","abs","ceil","upArrow","downArrow","_props$data$cart","_props$data$cart$resu19","prodInBundles","cookiePrice","shouldShowQuantityReachedErrorMsg","fallbackImageUrl","getFallbackImageUrl","apiSettings","_cookies$get8","priceObj","BasePrice","AdjustedPrice","Price","CustomerContextualPrice","Number","baseImageUrl","src","PrimaryImageUrl","fallBackSrc","altText","sm","loadFailureBehavior","savingsText","discountLine","cartData","updatedPrice","getTierId","clubPlusDiscountsOfferId","newVal","_props$data$cart$resu20","_cookies$get9","updatedProductsAddedInBundles","prod","dobbiesProductData","cartlineToRemove","_props$data$cart$resu21","cartLineIds","LineId","removeCartLines","warning","totalPriceText","Intl","NumberFormat","style","currencyDisplay","currency","minimumFractionDigits","format","_renderSchema","pageUrl","imageUrl","ratingsSummary","_ratingsSummary$avera","productBrand","getProductBrand","ratingObj","calculateBestAndWorstRating","productPriceObj","getProductPrice","ratingCount","totalRatingsCount","Node","vocab","typeof","property","tag","lowPrice","highPrice","averageRating","bestRating","worstRating","brandAttribute","x","ratingValue","star5Count","star4Count","star3Count","star2Count","star1Count","_getCustomAttribute","_allAttributes","selectedAttributes","stateAttributes","setAttributes","SetIsAgeRestricted","SetIsVendorShipped","customAttributes","selectedAttribute","selectedAttributeName","matchingAttribute","_attribute$Name","ageRestrictedAttribute","customAttribute","attributeName","_renderAddedToCartNotification","gotoCartLinkData","_renderReviewCount","reviewsCount","reviewCountLabelForOne","reviewCountLabelForMore","_reviewsCount","_renderTextBlock","textBlocks","_renderQuantity","quantityComponent","extentionResources","updateQuantity","_renderAddToCart","addToCart","button","_renderAddToWishlist","addToWishlist","errorBlock","_renderConfigure","configure","dropdowns","_renderConfigureDropdown","_renderSocialShare","socialShare","dropdown","LabelContainerProps","select","_renderFindInStore","findInStore","_renderShopSimilarItem","shopSimilarItem","_props$config$appleSt","_props$config$googleP","_props$context$reques","_props$context$reques2","_props$data$cart$resu7","_props$data$cartShare2","_product$result6","_props$data$cart$resu8","_props$data$cart$resu9","_props$data$cart$resu10","_props$data$cart$resu11","_props$data$cart$resu12","_props$data$cart$resu13","_props$data$cart$resu14","ModuleProps","ProductInfoContainerProps","rating","shopSimilarLook","productCodeText","backInStockText","thankYouText","ageRestrictionNotification","url","requestUrl","href","showProductBundlesInModal","setRenderProductBundlesModal","mediaGalleryRef","useRef","isVendorShipped","productAddedToCart","SetProductAddedToCart","isProductAvailable","setIsProductAvailable","isValidEmail","setIsValidEmail","isFormSubmitted","setIsFormSubmitted","setPlatform","backInStockModalIsOpen","customerEmail","setCustomerEmail","privacyPolicyChecked","setPrivacyPolicyChecked","isCnCProductAvailable","setIsCnCProductAvailable","showBackInStockModal","setShowBackInStockModal","displayClubPlusInfo","setDisplayClubPlusInfo","discountLines","setDiscountLines","setCustomerAffiliations","showProdPrice","setShowProdPrice","activePrices","setActivePrices","isQuickView","appleStoreUrl","googlePlayUrl","query","renderProductBundlesModal","allBundleProductsOOS","setAllBundleProductsOOS","_props$data$bundlePro","_props$data$bundlePro2","bundleProductsShareState","areAllBundleProductsOOS","updateCartProduct","_props$data$cart$resu4","_props$data$cart$resu5","_cookies$get3","productIds","cartline","addedProducts","ap","productBundleProducts","updatedProductIds","prodId","prodBP","itemId","simpleProductsWithQuantities","validValues","getByIdsAsync","channelId","catalogId","sp","_props$data$cart$resu6","prodWithQuantity","simpleProdIds","cartProductIds","cartProd","b","a","every","v","needsUpdate","projectDomain","CatalogId","pIds","getActivePricesAsync","activePricesResponse","activePrice","_activePrice$Customer2","TradeAgreementPrice","_activePrice$Customer","equalsCheck","_fulfillmentTypeAttri","_props$data$deliveryO","_props$data$deliveryO2","plantPotsProductCountState","plantPotsProductCount","fulfillmentAttributeName","fulfillmentAttributeTextValue","attributeTextValue","fulfillmentTypeAttribute","isPlantFulfillment","isServiceItem","keyInPriceAmount","onAddToCartFailed","quantityErrorForState","customAmountErrorForState","otherErrorForState","outOfStockTextForHd","errorMessageOutOfRangeOneLeft","errorMessageOutOfRangeFormat","getQuantityError","_context$request$chan","formatedAmountLimit","cultureFormatter","formatCurrency","Currency","invalidSmallCustomAmountText","_context$request$chan2","invalidLargeCustomAmountText","IsGiftCard","changeUpdatingDeliveryOptions","changeUpdatingDimension","isEmailDelivery","addToCartResult","addToCartComponentProps","addToCartText","isFulfillmentProduct","getBuyboxAddToCart","displayClubPlus","handleNotifyMeClick","_props$context$reques3","user","emailAddress","_props$data$cartShare","cartSharedState","remove","checkUserDiscounts","OfferId","discountId","checkUserLoyalty","_props$data$loyaltyCa","loyaltyCard","LoyaltyGroups","_props$data$loyaltyCa2","_props$data$loyaltyCa3","highestActiveLoyaltyCardTier","HighestActiveLoyaltyCardTier","loyaltyCardTiers","LoyaltyCardTiers","loyaltyCardTier","tier","LoyaltyTierRecordId","LoyaltyTierId","showThankyouNote","email","mail","test","String","validateEmail","_product$result2","_product$result3","itemID","recID","_props$context$reques4","_props$context$app$co","_props$context$app","callActionOrExecute","vSIInitiateRestCallAsync","customerAccountNumber","popularityBannerCompany","console","log","isVirtualCartEmpty","_cookies$get4","closeProductBundlesModal","_props$data$productAv","_product$result5","err","isAvailable","IsProductAvailable","qAvailable","info","_product$result4","_getCartItemMaxQuantity","getOrderQuantityLimitsFeatureFlag","Behavior","MaximumQuantity","setProductAvailabilityCookieForBundles","_mediaGalleryRef$curr","cookieValue","analyticsCookies","cookie","setCookies","newRecentlyViewed","cookieConfig","maxAge","recentlyViewedArr","_props$data$product$r","_props$data$product$r3","_props$data$product$r4","_props$data$product$r5","_props$data$product$r2","slice","_product$result","priceAffiliations","AffiliationId","AffiliationTypeValue","ReasonCodeLines","CustomerId","productRecIds","getCartFromCustomer","priceResp","DiscountLines","customerContextPrice","getProductPrices","navigator","userAgent","match","addEventListener","preventDefault","_featureStatuses$find","featureStatuses","onChangeEmail","onChangePrivacy","renderClubPlusBadges","_CustomerContextualPr","toFixed","bundleProducts","bundledProductsSlot","bundleHasProducts","bundleProductsModal","bundledProductsModalSlot","bundleModalHasProducts","_props$data$product$r6","productAvailabilitesNonPlantsCNC","getEstimatedAvailabilityAsync","ProductIds","DefaultWarehouseOnly","FilterByChannelFulfillmentGroup","AggregatedProductInventoryAvailabilities","_deliveryOptions$find","PhysicalAvailableInventoryLevelCode","isCncAvailable","Module","mediaGallery","_renderProductTitle","_title$props","prodTitle","attrEcom","s","_title$props2","clubPlusBadgeLink","_renderAddToCartContainer","_productAttributes$re2","_productAttributes$re3","_productAttributes$re4","comingSoonCategoryName","_productAttributes$re","_comingSoonAttr$TextV","comingSoonAttr","attr","_attr$Name","isCnC","some","opt","isBackInStockEnabled","_attr$Name2","isISO","_attr$Name3","toLocaleLowerCase","outOfSeasonCheck","_attr$Name4","_product$result7","_product$result8","isAuthenticated","placeholder","emailAddressPlaceholderText","required","CustomCollapse","child","productBundlesOrderSummaryText","isMaximumQuantityAdded","_cookies$get","productList","addedp","_props$data$cart$resu","prodInCart","_cookies$get2","_props$data$cart$resu3","allStores","_props$data$cart$resu2","_storeLocation$OrgUni","_sl$OrgUnitAvailabili","_storeLocation$OrgUni2","addProductsToCart","_addAllProductsToCart","discountAppliedInCartMessage","toggle","zIndex","onModalToggle","activeItem","SetActiveItem","isActive","selectedItem","Collapse","timeout","showStrikethroughPricing","originalPrice","getOriginalPrice","renderCurrentPrice","initialPrice","itemProp","currencyCode","renderCurrentPriceWithOriginalPrice","checkClubPlusDiscounts","checkNonClubPlusDiscounts","clubPlusFormatCurrency","nonClubPlusPrice","renderClubPlusCurrentPrice","msdyn365Commerce","createComponentOverride","component","binding","dataActions","registerSanitizedActionPath","sanitizedActionPath","dataAction","default","prototype","RegistrationId","require","$type","da","path","runOn","iNM","ns","n","pdp","md","__bindings__","viewDictionary","cn","validateCartAsync","propsContext","cartResult","cartVersion","shouldRetry","arguments","Version","AsyncResult","_validationResult$Val","validationResult","CartsDataActions","ValidationResultsByLineId","refreshCart","refreshError","validateError","isQuantityLimitsFeatureEnabled","products","cartLineToUpdate","isUsingDefaultOrderSettingsMax","_modifiedProduct$Beha2","modifiedProduct","cartLineId","newQuantity","updateLineResult","updateCartLineQuantity","_renderCartAndActions","addToOrderTemplate","onChangeHandler","quantityLimitsMessages","applyDefaultOrderSettings","IncrementalQuantity","minQuantityText","maxQuantityText","_renderKeyInPrice","keyInPrice","MediaGalleryContainerProps","inventoryLabel","shopSimilarDescription","unitOfMeasure","bulkPurchaseLink","generateAddToOrderTemplateDialogResources","addToOrderTemplateHeader","noOrderTemplatesMessage","noOrderTemplatesDescription","createAnOrderTemplateButtonText","createNewOrderTemplateButtonText","cancelOrderTemplateCreationButtonText","selectTemplatesText","addToTemplateButtonText","lineItemsText","generateOrderTemplateNameDialogResources","orderTemplateHeaderLabel","createOrderTemplateHeader","orderTemplateTitleLabel","orderTemplateTitle","orderTemplateNameAriaLabel","orderTemplateDescription","createOrderTemplateDescription","defaultOrderTemplateName","orderTemplateButtonLabel","createOrderTemplateButtonText","orderTemplateCancelButtonLabel","cancelNewOrderTemplateCreationButtonText","generateItemAddedToOrderTemplateDialogResources","viewOrderTemplateButtonText","continueShoppingButtonText","itemAddedToOrderTemplateHeaderItemOneText","itemAddedToOrderTemplateHeaderItemFormatText","itemAddedToOrderTemplateHeaderMessageText","generateDuplicateItemsWhenAddingToOrderTemplateDialogResources","duplicatedProductsHeader","duplicatedProductsDescription","updateQuantityButtonText","cancelDuplicateItemsButtonText","onAddToOrderTemplateFailed","BuyBoxConstants","renderAddToOrderTemplate","orderTemplateButton","renderAddToOrderTemplateButton","orderTemplates","isMultipleCatalogsFeatureEnabled","isChannelMultipleCatalogsFeatureEnabled","AddToOrderTemplateComponent","addToOrderTemplateButtonText","addToOrderTemplateButtonTooltip","addToOrderTemplateDialogResources","createOrderTemplateDialogResources","itemAddedToOrderTemplateDialogResources","duplicateItemsWhenAddingToOrderTemplateDialogResources","shouldShowButtonFailedTooltip","showButtonTooltip","showButtonText","isMultipleCatalogFeatureEnabledInHq","currentCatalogId","onAddToWishlistFailed","renderAddToWishlist","enableWishlist","wishlistButton","renderAddtoWishlistButton","wishlists","AddToWishlistComponent","addToWishlistButtonText","removeFromWishlistButtonText","addToWishlistMessage","removedFromWishlistMessage","addItemToWishlistError","removeItemFromWishlistError","nameOfWishlist","ariaRole","renderShopSimilarItem","renderConfigureDropdown","_props$data$storeSele","productComparisonButton","appConfig","catalogs","skuText","preferredStoreInfo","preferredStore","preferredStoreId","StoreId","preferredStoreName","StoreName","setAvailability","isStoreChange","setIsStoreChange","getInventory","GetFullAvailableInventoryNearbyInput","zero","getFullAvailableInventoryNearby","response","_preferredStoreAvaila","isPreferredStore","_value$OrgUnitAvailab","filteredFullOrgUnitAvailability","preferredStoreAvailability","stockStatusLabel","availabilityWithHours","ProductInventoryInformation","productInventoryInformation","_availabilityWithHour","InventLocationId","StockLevelLabel","getStockInventoryLabel","resourceLabel","itemAvailabilities","ItemAvailabilities","inStockText","stockText","preferredStoreAvailabilityText","availabilityAtPreferredStoreText","displayStockAvailability","_props$data$storeSele2","selectedStoreLocationId","priceText","renderConfigure","renderKeyInPrice","renderQuantity","renderAvailabilityAtPreferredStore","MasterProductId","renderAddToCart","renderFindInStore","shopText","descriptionText","productSpecification","module","exports","ReactDOM"],"sourceRoot":""}