{"version":3,"file":"static/js/19.76e9c3dc9390270dfabb.chunk.js","mappings":";00BAsDO,MAAMA,UAAqBC,EAAAA,cAM9BC,YAAmBC,GACfC,MAAMD,GALO,KAAAE,eAAyB,SACzB,KAAAC,oBAA8B,8BAC9B,KAAAC,YAAyCN,EAAAA,YAsDlD,KAAAO,yBAA2B,KAAK,IAAAC,EACZ,QAAxBA,EAAAC,KAAKH,YAAYI,eAAO,IAAAF,GAAxBA,EAA0BG,kBAAkB,EA8DxC,KAAAC,gBAAmBC,IACvBJ,KAAKK,SAAS,CACVC,aAAc,CACVC,YAAaH,EACbI,gBAAiBR,KAAKL,eACtBc,aAAcT,KAAKJ,oBACnBc,QAAQ,IAEd,EAMW,KAAAC,gBAAkB,KAC/BX,KAAKK,UAASO,IAAK,CACfC,YAAaD,EAAMC,cACpB,EAjIHb,KAAKY,MAAQ,CACTC,YAAY,EAEpB,CAEOC,SAAM,IAAAC,EACT,MAAMC,EAAuBC,EAAAA,gBAAgBC,YAAYlB,KAAKP,MAAM0B,mBAC9DC,EAAsBH,EAAAA,gBAAgBC,YAA6C,QAAlCH,EAACf,KAAKP,MAAM4B,KAAKF,yBAAiB,IAAAJ,OAAA,EAAjCA,EAAmCO,QAC3F,IAAKN,IAAyBI,EAC1B,OAAO,KAGX,MAAMG,EAASC,EAAAA,EAAA,GACRxB,KAAKP,OAAK,IACbgC,UAAW,CACPC,YAAa1B,KAAKP,MAClBkC,UAAWC,IAAWtC,EAAaqC,UAAW3B,KAAKP,MAAMoC,OAAOF,YAEpEG,QAAS9B,KAAK+B,uBAAuB,GAAGzC,EAAaqC,wBAGzD,OAAO3B,KAAKP,MAAMuC,WAAWT,EACjC,CAEQQ,uBAAuBJ,GAC3B,OACIpC,EAAAA,cAAA,OAAKoC,UAAWA,GACX3B,KAAKiC,sBAAsB,GAAGN,sBAC9B3B,KAAKkC,gBAAgB,GAAGP,eAGrC,CAEQM,sBAAsBN,GAC1B,OACIpC,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAWA,EACXS,QAASpC,KAAKW,gBAAe,gBACdX,KAAKY,MAAMC,WAC1BwB,MAAOrC,KAAKP,MAAM6C,UAAUC,yBAE3BvC,KAAKP,MAAM6C,UAAUC,wBAGlC,CASQL,gBAAgBP,GACpB,OACIpC,EAAAA,cAACiD,EAAAA,SAAQ,CAACb,UAAWA,EAAWjB,OAAQV,KAAKY,MAAMC,WAAY4B,IAAKzC,KAAKH,aACpEG,KAAK0C,mBAAmB,GAAGf,mBAGxC,CAEQe,mBAAmBf,GACvB,MAAMgB,EAAsG,QAArFC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUC,QAAShD,KAAKP,MAAMuD,QAAQC,UAEvFC,EAAkBlD,KAAKY,MAAMN,aAC/Bf,EAAAA,cAAC4D,EAAAA,MAAK,CAACC,MAAOpD,KAAKY,MAAMN,aAAaE,gBAAiBE,OAAQV,KAAKY,MAAMN,aAAaI,QACnFnB,EAAAA,cAAA,QAAMoC,UAAW3B,KAAKY,MAAMN,aAAaG,eACzClB,EAAAA,cAAA,YAAOS,KAAKY,MAAMN,aAAaC,mBAGnC8C,EAGJ,OACI9D,EAAAA,cAAA,OAAKoC,UAAWA,IACVgB,GACEpD,EAAAA,cAAA,OAAKoC,UAAW,GAAGA,kBACfpC,EAAAA,cAAC+D,EAAAA,GAAiB,CAACC,KAAMvD,KAAKP,MAAM6C,UAAUkB,+BAGrDN,EACAlD,KAAKyD,cAAc,GAAG9B,uBAGnC,CAEQ8B,cAAc9B,GAAiB,IAAA+B,EAAAC,EAAAC,EACnC,MAAM5C,EAAuBC,EAAAA,gBAAgBC,YAAYlB,KAAKP,MAAM0B,oBAE9D,aAAE0C,GAAiB7D,KAAKP,MAAM4B,KAC9ByC,GACFD,SAAoB,QAARH,EAAZG,EAAcvC,cAAM,IAAAoC,GAA4E,QAA5EA,EAApBA,EAAsBK,MAAMC,GAHO,2DAGgBA,EAAKC,cAAwC,IAAAP,OAAA,EAAhGA,EAAkGQ,aAAa,EAC7GC,GAAYC,EAAAA,EAAAA,IAAapE,KAAKP,MAAMuD,QAAQC,SAElD,OADAoB,EAAAA,EAAAA,mBAAkBF,GAEd5E,EAAAA,cAAC+E,EAAAA,wBAAuB,CACpB3C,UAAWA,EACXqB,QAAShD,KAAKP,MAAMuD,QACpB3B,KAAM,CACFkD,WAAYvD,EAAuBhB,KAAKP,MAAM0B,kBAAqBnB,KAAKP,MAAM4B,KAAKF,kBAAmBG,OACtGkD,eAA8C,QAAhCb,EAAE3D,KAAKP,MAAM4B,KAAKmD,sBAAc,IAAAb,OAAA,EAA9BA,EAAgCrC,OAChDmD,oBAAwD,QAArCb,EAAE5D,KAAKP,MAAM4B,KAAKoD,2BAAmB,IAAAb,OAAA,EAAnCA,EAAqCtC,QAE9DgB,UAAWtC,KAAKP,MAAM6C,UACtBoC,kBAAmB1E,KAAKF,yBACxB6E,eAAgB3E,KAAKG,gBACrByE,oCAAqCd,EACrCK,UAAWA,GAGvB,EAtHuB7E,EAAAqC,UAAY,mBA6IvC,4PCrKA,MAAMkD,EAAgEtF,EAAAA,YAkChEuF,EAA4BA,CAACrF,EAAkCmB,EAAqBmE,IAAgCC,gBA8R1HA,eAAkCvF,EAAkCmB,EAAqBmE,GAA2B,IAAAE,EAChH,MACI5D,MACI6D,2BAA6B5D,OAAQ4D,GACrCC,MAAQ7D,OAAQ6D,GAChBC,0BAA4B9D,OAAQ8D,IACvC,UACD9C,EAAS,QACTU,EAAO,QACPqC,GACA5F,GAEE,gBAAE6F,EAAe,SAAEC,GAAa3E,EAEtC,IAAI4E,EAAc/F,EAAM4B,KAAKoE,QAAQnE,OACrC,MAAMoE,EAAgC,kEAChCC,EAA8C,QAAbV,EAAGxF,EAAM4B,YAAI,IAAA4D,GAAc,QAAdA,EAAVA,EAAYpB,oBAAY,IAAAoB,GAAQ,QAARA,EAAxBA,EAA0B3D,cAAM,IAAA2D,GAEzE,QAFyEA,EAAhCA,EAAkClB,MACvEF,GAA+BA,EAAaI,OAASyB,WACzD,IAAAT,OAAA,EAFyCA,EAEvCf,UAECoB,IACAE,QAAqBF,GAAoBE,GAG7C,IAAKA,IAAgBN,EACjB,OAGJ,MAAMO,EAAUD,EAEVI,EACFH,EAAQI,YACRJ,EAAQI,WAAWC,QAAQC,KAAkCA,EAAUC,gBAAkBD,EAAUC,eAAeC,SAEtH,IAAIC,EAA0B,GAC1Bb,GAAWc,OAAOC,KAAKf,GAASgB,OAAS,GAAKhB,EAAQiB,eAAiBjB,EAAQiB,cAAcD,OAAS,IACtGH,EAAkBb,EAAQiB,cAAc,GAAGC,IAG3CX,GAAqBA,EAAkBS,OAAS,EAC5CtB,EAAUyB,kBACVzB,EAAUyB,iBAAiB,CACvBC,UAAW,cACXC,iBAAiBC,EAAAA,EAAAA,IAAmBf,EAAmBtD,KAI/D4C,EACK0B,WAAW,CACRnB,UACAc,GAAIL,EACJW,iBAAkBhC,EAClBiC,gBAAiBnB,EAAoClG,EAAM4B,KAAKyF,gBAAgBxF,YAAS+B,EACzF0D,mBAAoB/B,MAAOgC,EAAkCC,KAAwB,IAAAC,EACjF,IAAK/B,EACD,OAAOgC,QAAQC,UAGnB,MAAMC,EAAwB,QAAhBH,EAAGzH,EAAMuD,eAAO,IAAAkE,GAAK,QAALA,EAAbA,EAAeI,WAAG,IAAAJ,GAAQ,QAARA,EAAlBA,EAAoBrF,cAAM,IAAAqF,OAAA,EAA1BA,EAA4BK,kBAE7C,OAAOpC,EACFqC,iBAAiB,CAAE/B,UAASgC,MAAOlC,EAAUmC,SAAUV,EAAiBC,iBACxEU,MAAMrG,IACH,GAAsB,WAAlBA,EAAOsG,QAA4C,gBAArBtG,EAAOuG,UAA6B,CAElE,IAAIC,EACJ,GAFA/C,EAAUgD,iBAAgB,GAEtBnH,EAAMwE,yBACN0C,EAAsBlH,EAAMwE,yBAAyB4C,8BAClD,GAAI5C,GAA4BnE,EAAAA,gBAAgBC,YAAYkE,GAA2B,CAC1F,MAAM6C,EAAoB7C,EAAyBrB,MAC/CmE,GAAYA,EAASC,eAAiBC,EAAAA,aAAaC,SAEvDP,EAAsBG,aAAiB,EAAjBA,EAAmBD,wBAAyB,MAElEF,OAAsBzE,EAE1B,MAAMiF,EAAyC,CAC3CC,cAAe,mBACfC,iBAAkB,CAAEZ,OAAQtG,EAAOsG,OAAQC,UAAWvG,EAAOuG,YAEjE9C,EAAUyB,iBAAiB,CACvBC,UAAW,YACXC,gBAAiB,CAAC,EAClB+B,YAAYC,EAAAA,EAAAA,IACRJ,EACAnD,EACA7C,EACAU,EACAyC,EACAqC,EACAd,IAEL,KACA,CACHjC,EAAUyB,iBAAiB,CACvBE,gBAAiB,CAAC,IAEtB,MAAMiC,GAAgBC,EAAAA,EAAAA,IAAW,OAAQ5F,EAAQ6F,eACjD,QAAiBxF,IAAbgE,GAA0BA,IAAayB,EAAAA,kBAAkBC,SACnC,YAAlBzH,EAAOsG,QAAwBe,GAC/BK,OAAOtB,SAASuB,OAAON,QAExB,GAAItB,IAAayB,EAAAA,kBAAkBI,UACtCnE,EAAUgD,iBAAgB,QACvB,GAAIV,IAAayB,EAAAA,kBAAkBK,iBAAkB,CAAC,IAADC,EACxD,MAAMC,EAAuC,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,GAERC,GAAmBC,EAAAA,EAAAA,oBACrBtK,EAAMuD,QAAQC,QAAQ+G,kBACtBvK,EAAMwK,aACNxK,EAAMyK,WAEJC,EAAqC,CACvCC,aAAc9H,EAAU+H,mBACxBC,qBAAsBhI,EAAUiI,2BAChCC,uBAAwBlI,EAAUkI,uBAClCC,kBAAmBnI,EAAUoI,qBAC7BC,qBAAsBrI,EAAUsI,8BAChCC,kBAAmBvI,EAAUwI,wBAC7BC,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAC5BC,kBAAmB7I,EAAU6I,mBAE3BC,EAAe,IAAIC,EAAAA,wCACrB5L,EAAMuD,QACNmH,EACAd,EACA5J,EAAMuD,QAAQC,QAAQqI,aACtB7F,EACuB,QADhB2D,EACP3J,EAAM4B,KAAKkK,oBAAY,IAAAnC,OAAA,EAAvBA,EAAyB9H,OACzBiE,EACAoD,EACAmB,EACArK,EAAM8G,GACN9G,EAAM+L,UAEVC,EAAAA,qBAAqBC,WAAWC,gBAAgBP,EAAc,CAAD,KAIxEQ,OAAOC,IACApM,EAAMyK,YACNzK,EAAMyK,UAAU4B,UAAUD,GAC1BpM,EAAMyK,UAAU6B,MAAM,iCAAiC,GAE7D,IAGbH,OAAOC,IACApM,EAAMyK,YACNzK,EAAMyK,UAAU2B,MAAMA,EAAMG,SAC5BvM,EAAMyK,UAAU6B,MAAM,2BAA2B,GAIrE,CA/bUE,CAAmBxM,EAAOmB,EAAOmE,EAAU,EAgG9C,SAASmH,EACZzM,EACAmB,EACAmE,GAA2B,IAAAoH,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAE3B,MAAM,KACFvL,EACAwL,OAAO,cAAEvG,GACThE,WAAW,UACP0I,EAAS,kBACTC,EAAiB,iBACjBC,EAAgB,sBAChB4B,EAAqB,mBACrBzC,EAAkB,2BAClBE,EAA0B,uBAC1BC,EAAsB,qBACtBE,EAAoB,8BACpBE,EAA6B,wBAC7BE,EAAuB,sCACvBiC,GAEJ/J,SACIC,SAAW+J,SAAS,uBAAEC,GAA2B,CAAEA,4BAAwB5J,MAE/E5D,EAGEgG,EAAUpE,SAAa,QAAT8K,EAAJ9K,EAAMoE,eAAO,IAAA0G,OAAA,EAAbA,EAAe7K,OACzB4L,EAAQ7L,SAAkB,QAAd+K,EAAJ/K,EAAMkK,oBAAY,IAAAa,OAAA,EAAlBA,EAAoB9K,OAC5B6D,EAAO9D,SAAU,QAANgL,EAAJhL,EAAM8D,YAAI,IAAAkH,OAAA,EAAVA,EAAY/K,OACnBwF,EAAkBzF,SAAqB,QAAjBiL,EAAJjL,EAAMyF,uBAAe,IAAAwF,OAAA,EAArBA,EAAuBhL,OACzCwG,EAAmD,QAAhCyE,EAAGlL,EAAK+D,gCAAwB,IAAAmH,OAAA,EAA7BA,EAA+BjL,OACrDqE,EAAoCtE,SAAkB,QAAdmL,EAAJnL,EAAMwC,oBAAY,IAAA2I,GAAQ,QAARA,EAAlBA,EAAoBlL,cAAM,IAAAkL,GAEnE,QAFmEA,EAA1BA,EAA4BzI,MACjEF,GAPiC,oEAOFA,EAAaI,cAChD,IAAAuI,OAAA,EAFyCA,EAEvCtI,UACGiJ,EAA8B9L,SAAiC,QAA7BoL,EAAJpL,EAAM8L,mCAA2B,IAAAV,OAAA,EAAjCA,EAAmCnL,OAEjEsE,EAAoBH,SAAmB,QAAZiH,EAAPjH,EAASI,kBAAU,IAAA6G,OAAA,EAAnBA,EAAqB5G,QAAOC,IAAS,IAAAqH,EAAA,QAA6B,QAAzBA,EAACrH,EAAUC,sBAAc,IAAAoH,GAAxBA,EAA0BnH,MAAM,KAGhGoH,YAAY,gBAAE3G,EAAe,cAAE4G,EAAa,WAAE7E,EAAU,UAAEhC,GAAW,UACrE8G,EAAS,SACThI,GACA3E,GAEE,kBAAE4M,EAAiB,WAAEC,EAAU,YAAEC,GAxH3C,SACI1K,EACA2K,EACA7F,EACA8F,EACAC,GAKA,IAAIL,EACAC,EACAC,EAEAI,EAEJ,OAAKH,GAAgBE,EACV,CACHL,mBAAmB,EACnBC,WAAYG,EAAgBG,oBAC5BL,YAAaE,EAAgBI,6BAIjClG,IACAgG,EAAkBhG,EAAoB/D,MAAKsE,GAAUA,EAAOF,eAAiBC,EAAAA,aAAaC,WAK1F4F,EAAAA,EAAAA,uBAAsBjL,EAAQ6F,eAC1Bf,GAAsC,QAAnBoG,EAAIJ,SAAe,IAAAI,GAAfA,EAAiBC,oBACxCX,GAAoB,EACpBC,EAAaG,EAAgBG,oBAC7BL,EAAcE,EAAgBI,6BAE9BR,GAAoB,EACpBC,EAAaG,EAAgBQ,kCAC7BV,EAAcE,EAAgBS,qCAGlCb,GAAoB,EACpBC,EAAaG,EAAgBG,oBAC7BL,EAAcE,EAAgBI,4BAG3B,CACHR,oBACAE,cACAD,eAnB+C,IAADS,CAqBtD,CAqE2DI,CACnD7O,EAAMuD,QACNvD,EAAMuD,QAAQsE,IAAIzF,OAAO0M,iBACzBzG,EACArI,EAAM6C,UACyC,YAA/C7C,EAAM4B,KAAK+D,yBAAyBwC,QAAwB3G,EAAAA,gBAAgBC,YAAY0E,IAG5F,IAAKH,IAAYxE,EAAAA,gBAAgBC,YAAYoF,GACzC,OAGJ,IAAKQ,IAAoBA,EAAgB0H,gBACrC,OAKJ,GAAI7I,GAAqCwH,GACrC,IAhFqBsB,EACzBC,EACAC,KAEA,MAAMC,EAA2B,GASjC,OARAF,SAAAA,EAAwBG,KAAIC,IACxB,MAAMzG,EAASsG,aAAqB,EAArBA,EAAuB5K,MAAKgL,GAAgBA,IAAiBD,EAASE,OAIrF,OAHI3G,GACAuG,EAAeK,KAAK5G,GAEjBuG,CAAc,IAGlB3N,EAAAA,gBAAgBC,YAAY0N,EAAe,EAmEzCH,CAAqB3H,EAAgB0H,gBAAiBrB,aAA2B,EAA3BA,EAA6B+B,yBACpF,YAED,IACFjC,IACAnG,EAAgB0H,gBAAgBzK,MAAMoL,GAA2BA,EAAOH,OAAS/B,IAElF,OAGJ,MAAM9C,EAAgB,CAClBC,aAAcC,EACdC,qBAAsBC,EACtBC,yBACAC,kBAAmBC,EACnBC,qBAAsBC,EACtBC,kBAAmBC,EACnBC,cAAeC,EACfC,oBACAC,oBAGEkE,EAAiBlC,EACnB3N,EAAAA,cAAC8P,EAAAA,eAAc,CACXhO,KAAM,CAAE6L,SACRlK,QAASvD,EAAMuD,QACfuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBT,cAAeZ,EAAcY,cAC7BE,kBAAmBd,EAAcc,kBACjCC,iBAAkBf,EAAce,mBAGpC,GAYEoE,GAA0B,CAC5BtM,QAASvD,EAAMuD,QACfrB,UAAW,YACX4E,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBnK,KAAM,CAAEoE,QAA2B,QAApBkH,EAAElN,EAAM4B,KAAKoE,eAAO,IAAAkH,OAAA,EAAlBA,EAAoBrL,OAAQ4L,MAA8B,QAAzBN,EAAEnN,EAAM4B,KAAKkK,oBAAY,IAAAqB,OAAA,EAAvBA,EAAyBtL,QAC7E6I,gBACAoF,cAhByC,CACzCjG,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,GAWVyB,aAAc7L,EAAMuD,QAAQC,QAAQqI,aACpCkE,gBAAiBjK,EACjB6J,iBACAzG,eAAeC,EAAAA,EAAAA,IAAW,OAAQnJ,EAAMuD,QAAQ6F,eAChD0E,YACAkC,aAAc1K,EAAUgD,iBAEtB2H,GAAmBnQ,EAAAA,cAACoQ,EAAAA,MAAKxJ,OAAA8C,OAAA,GAAKqG,MAC9B,6BAAEM,IAAiCnQ,EAAMuD,QAAQC,QAAQ4M,SAC/D,MAAO,CACHC,eAAgB,CACZnO,UAAW,4BAGf2E,cAAeA,EAAc,GAE7ByJ,sBAAuBjL,EAA0BrF,EAAOmB,EAAOmE,GAE/DiL,QAASzQ,EAAAA,cAAC0Q,EAAAA,QAAO,CAACtO,UAAU,mCAAmCuO,WAAW,KAAK3M,KAAMuJ,IAErFY,YAAanO,EAAAA,cAAA,KAAGoC,UAAU,wCAAwC+L,GAClEyC,wBACIxK,IAAsC6H,EAClCjO,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,KAAGoC,UAAU,wCAAwCoL,GACrDxN,EAAAA,cAAA,MAAIoC,UAAU,kCAAiC,aAAaoL,GACvDjG,EAAgB0H,gBAAgBK,KAAK7K,GAE9BzE,EAAAA,cAAA,MAAIoC,UAAU,yCAAwC,aAAaqC,EAAKoM,YAAaC,IAAKrM,EAAKgL,MAC1FhL,EAAKoM,iBAM1B,KACRE,OACI/Q,EAAAA,cAACgR,EAAAA,GAAgB,CACb7J,gBAAiBA,EACjB4G,cAAeA,EACf7E,WAAYA,EACZnG,UAAW7C,EAAM6C,UACjBkO,UAAyB,gBAAd/J,EACXmJ,6BAA8BA,KAItCa,OACIlR,EAAAA,cAAA,UACIoC,UAAU,kCACVS,QAAS0C,EAA0BrF,EAAOmB,EAAOmE,GACjD3B,MAAM,YACNX,IAAKoC,EAAyB,aAClB4I,EACZiD,cAAmBrN,IAAT8B,GAAsBqI,EAChCnL,MAAOoL,GAENA,GAITkD,MAAOjB,GAEf,olBCpNA,MAAMkB,UAAerR,EAAAA,cA0FjBC,YAAmBC,EAAkCmB,GACjDlB,MAAMD,GAnFO,KAAAoR,qBAA4C,IAAIC,EAAAA,mBAAyB,GAElF,KAAAvM,WAAuC,CAAC,EACxC,KAAAwM,sBAAqC,IAAIC,IAEhC,KAAAC,gBAAoC,CACjDC,eAAiBC,IACb,MAAM9D,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YAKnC,OAJAA,EAAWC,mBAAgBjK,EAC3BgK,EAAW5E,gBAAapF,EAExBrD,KAAKK,SAAS,CAAEkF,SAAU4L,EAAa9D,gBAChC,CAAI,EAEf7G,iBAAmB4K,IACfpR,KAAKK,SAAS,CAAEgN,WAAY+D,GAAgB,EAEhDC,sBAAuBA,CACnBC,EACAC,EACAC,EACAC,KAEAzR,KAAKK,SAAS,CACViF,gBAAiBgM,EACjBlM,yBAA0BmM,EAC1BG,uBAAwBD,IAE5BzR,KAAK2R,aAAaH,EAAS,EAE/BI,oBAAsBC,IACdA,GACA7R,KAAK+Q,sBAAsBe,IAAID,EAAsB,EAG7DE,uBAAwB/M,MAAOgN,EAA6BC,KAAmD,IAAAlR,EAG3G,GAFAf,KAAKuE,WAAWyN,GAAuBC,EAEnCjS,KAAK+Q,sBAAsBmB,SAAwC,QAA9BnR,EAAAf,KAAKP,MAAM4B,KAAKoE,QAAQnE,cAAM,IAAAP,GAAY,QAAZA,EAA9BA,EAAgC8E,kBAAU,IAAA9E,OAAA,EAA1CA,EAA4CsF,SAAU,GAC3F,OAAOrG,KAAK6Q,qBACPsB,SAAQnN,SACEhF,KAAKoS,sBAEfxG,OAAOC,IAEJ,GAAIA,IAAUwG,EAAAA,wBAAwBC,gCAClC,MAAMzG,CAAM,GAEjB,EAGf0G,gBAAiBA,CAACC,EAAuBlQ,IAC9BtC,KAAKyS,iBAAiBD,EAAelQ,GAEhDyF,gBAAkB2K,IACd1S,KAAKK,SAAS,CAAEkN,UAAWmF,GAAc,EAE7CC,wBAA0BC,IACtB5S,KAAKK,SAAS,CAAEuS,uBAAsB,EAQ1CC,8BAAgCC,IAC5B9S,KAAKK,SAAS,CAAEyS,6BAA4B,EAGhDC,iBAAmBC,IAEf,MAAM3F,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YACnCA,EAAW4F,uBAAoB5P,EAE/BrD,KAAKK,SAAS,CAAE6S,gBAAgB,EAAMC,iBAAkBH,EAAa3F,eACrErN,KAAK2R,aAAa3R,KAAKY,MAAM2K,aAAcyH,EAAY,GA6L9C,KAAAI,yBAA4BC,GAAgC,KACzE,MAAMC,EAAeD,EAAmBE,wBAClCC,EAAUF,EAAaG,KAAOzK,OAAO0K,YACrCC,EAAUL,EAAaM,IAAM5K,OAAO6K,YAE1C7K,OAAO8K,SAASN,EAASG,EAAQ,EAEpB,KAAAI,yCAA2C,KACxD,IAAInP,GAAsC,EACP,IAADoP,EAA9BhU,KAAKP,MAAM4B,KAAKwC,eAChBe,GACuC,QAAnCoP,EAAAhU,KAAKP,MAAM4B,KAAKwC,aAAavC,cAAM,IAAA0S,GAElC,QAFkCA,EAAnCA,EAAqCjQ,MACjCkQ,GAA4B,2DAAjBA,EAAQhQ,cACtB,IAAA+P,OAAA,EAFDA,EAEG9P,aAAa,GAExB,OAAOU,CAAmC,EAwF7B,KAAAwN,kBAAoBpN,UACjC,MAAMS,EAAUzF,KAAKP,MAAM4B,KAAKoE,QAAQnE,OAElCH,EAAoBnB,KAAKP,MAAM4B,KAAKF,kBAAkBG,OAEtD4S,EAAuBjT,EAAAA,gBAAgBC,YAAYC,GAEzD,IAAKsE,IAAYyO,EACb,OAGJ,MAAMC,EAAkB3S,EAAA,GAAkCxB,KAAKuE,YAK/D,GAHAvE,KAAKK,SAAS,CAAEuS,qBAAqB,EAAME,2BAA2B,IAGlE9S,KAAKY,MAAMyM,WAAW5E,YAAczI,KAAKY,MAAMyM,WAAWC,cAAe,CACzE,MAAM8G,EAAe5S,EAAA,GAAQxB,KAAKY,MAAMyM,YACxC+G,EAAgB3L,gBAAapF,EACW,cAApCrD,KAAKY,MAAMyM,WAAW5G,YACtB2N,EAAgB9G,mBAAgBjK,EAChC+Q,EAAgB3N,eAAYpD,GAEhCrD,KAAKK,SAAS,CAAEgN,WAAY+G,GAAmB,CAInD,IAAK,MAAM/D,KAAOlK,OAAOC,KAAK+N,GACtBnU,KAAKY,MAAMyM,WAAW3G,gBAAgB2J,IACtCrQ,KAAKK,UAASgU,IACV,MAAMhH,EAAagH,EAAchH,WAEjC,OADAA,EAAW3G,gBAAgB2J,QAAOhN,EAC3B,CAAEgK,aAAY,IAKjC,MAAMhM,EAAOrB,KAAKsU,mBAAmBH,GAC/BI,QAA6ClT,EAAKmT,sBAExD,IAAKD,EACD,OAGJ,MAAME,EAA4B,CAC9BzU,KAAK0U,iCAAiCH,EAAgBlT,EAAKsT,kBAC3D3U,KAAK4U,sBAAsBL,GAC3BvU,KAAK6U,cAAcN,GACnBvU,KAAK8U,wBAAwBP,GAC7BvU,KAAK+U,yBAAyBR,UAG5BpN,QAAQ6N,IAAIP,EAAS,EAoLd,KAAAhC,iBAAmB,CAACD,EAAuBlQ,KAAuC,IAAA2S,EAC/F,MAAMC,EAA2C,QAAjCD,EAAGjV,KAAKP,MAAM4B,KAAKoE,QAAQnE,cAAM,IAAA2T,OAAA,EAA9BA,EAAgCE,WAEnD,OAAQ3C,GACJ,KAAK,EACD,OAAOlQ,EAAU8S,0BACrB,KAAK,EACD,OAAO9S,EAAU+S,kCACrB,KAAK,EACD,OAAO/S,EAAUgT,yBACrB,KAAK,EACD,OAAOJ,EAAa5S,EAAUiT,2BAA6BjT,EAAUkT,0BACzE,QACI,MAAO,GAAG,EAjhBlBxV,KAAKY,MAAQ,CACTyM,WAAY,CACR3G,gBAAiB,CAAC,GAEtBnB,SAAU,EACVkQ,SAAKpS,EACLqS,SAAKrS,EACLiC,qBAAiBjC,EACjBkI,kBAAclI,EACdqO,4BAAwBrO,EAExBkK,WAAW,EACXqF,qBAAqB,EACrBE,2BAA2B,EAC3B6C,kBAAkB,GAEtB3V,KAAK8J,kBAAmBC,EAAAA,EAAAA,oBAAmBtK,EAAMuD,QAAQC,QAAQ+G,kBAAoBvK,EAAMwK,aAAcxK,EAAMyK,UACnH,CAEOlF,0BACH,MACI3D,MACIoE,SAAWnE,OAAQmE,GAAS,aAC5B8F,GACH,QACDvI,GACAhD,KAAKP,OAOiBmW,EAAAA,EAAAA,6BAA4B5V,KAAKP,MAAMuD,QAAQC,QAAQ4S,IAAIC,YAG/DzP,OAAS,EAC3BrG,KAAKK,SAAS,CAAEsV,kBAAkB,IAElC3V,KAAKK,SAAS,CAAEsV,kBAAkB,IAGtCpK,EAAa5D,MAAK3C,UACdhF,KAAK2R,aAAarQ,EAAO,IAGzBmE,IAEIA,EAAQsQ,gBAAkBC,EAAAA,oBAAoBC,SAC9CjW,KAAKK,SAAS,CAAE6V,eAAe,UAE7BlW,KAAK+U,yBAAyBtP,IAGpCA,GAAWzC,EAAQsE,IAAIzF,OAAOsU,4BAA8B,GAC5DC,EAAAA,GAAoB1K,SAAS1L,KAAKP,MAAMuD,QAASA,EAAQsE,IAAIzF,OAAOsU,4BAA6B1Q,EAAQ4Q,SAEjH,CAEOvV,SAAM,IAAAwV,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MACI7J,OAAO,aAAE8J,EAAY,wBAAEC,GACvBvV,MACIoE,SAAWnE,OAAQmE,IAEvB5D,QAAQ,UAAEF,EAAY,KACtB3B,KAAKP,OAEH,IAAEgW,EAAG,IAAEC,GAAQ1V,KAAKY,MAE1B,IAAK6E,EAED,OADAzF,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,gDAC5B,KAGX,MAAMpM,EAAQO,KAAKP,MAKboX,EADU7W,KAAKP,MAAMuD,QACIsE,IAAIzF,OAAOgV,eACpCC,EAA+B7V,EAAAA,gBAAgB8V,QACjD9V,EAAAA,gBAAgB+V,YAAoD,QAAzCV,EAACtW,KAAKP,MAAM4B,KAAKF,kBAAkBG,cAAM,IAAAgV,OAAA,EAAxCA,EAA0CzH,KAAIoI,GAASA,EAAMH,iCAEvFI,EAEa,QADfX,EAA6B,QAA7BC,EAACxW,KAAKP,MAAM4B,KAAKwC,oBAAY,IAAA2S,GAAQ,QAARA,EAA5BA,EAA8BlV,cAAM,IAAAkV,GAAyF,QAAzFA,EAApCA,EAAsCzS,MAAKF,GAAgBA,EAAaI,OAASkT,EAAAA,YAA4C,IAAAX,OAAA,EAA7HA,EACKtS,iBAAS,IAAAqS,GAAAA,GAEgE,QADtEE,EACyB,QADzBC,EACR1W,KAAKP,MAAM4B,KAAK+V,yBAAiB,IAAAV,GAAQ,QAARA,EAAjCA,EAAmCpV,cAAM,IAAAoV,OAAA,EAAzCA,EAA2CW,2CAAmC,IAAAZ,GAAAA,EAC7Ea,GACDrW,EAAAA,gBAAgBC,YAAY4V,IAC7BA,EAA6BS,MAAMN,IACJO,EAAAA,EAAAA,yCACvBP,EACAJ,KAE0BY,EAAAA,qBAAqBC,aAErDvT,GAAYC,EAAAA,EAAAA,IAAapE,KAAKP,MAAMuD,QAAQC,UAClDoB,EAAAA,EAAAA,mBAAkBF,GAElB,MAAM5C,EAASC,EAAAA,EAAA,GACPxB,KAAKP,OAAmC,IAC5CmB,MAAOZ,KAAKY,MACZ+V,aAAcA,GAAgBA,EAAatQ,OAAS,EAAIsQ,EAAa,QAAKtT,EAC1EsU,YAAa,CACTjW,YAAa1B,KAAKP,MAClBkC,UAAWC,IAAW,YAAaD,IAEvCiW,0BAA2B,CACvBjW,UAAW,sBAEfkW,2BAA4B,CACxBlW,UAAW,4BAEfmI,iBAAkB9J,KAAK8J,iBACvB/E,UAAW/E,KAAKiR,gBAChB5O,OAAOyV,EAAAA,EAAAA,IAAsBrY,GAC7BiO,aAAaqK,EAAAA,EAAAA,IAA4BtY,GACzCuY,iBAAkBhY,KAAKiY,gCACvBC,eAAeC,EAAAA,EAAAA,IAA8B1Y,GAC7C2Y,WAAWC,EAAAA,EAAAA,GAA0B5Y,EAAOO,KAAKY,MAAOZ,KAAKiR,iBAC7DqH,YAAapM,EAAqBlM,KAAKP,MAAOO,KAAKY,MAAOZ,KAAKiR,iBAC/D/D,OAAOqL,EAAAA,EAAAA,IAAsB9Y,EAAOO,KAAKY,OACzC4X,WAAWC,EAAAA,EAAAA,IACPhZ,EACAO,KAAKY,MACLZ,KAAKiR,gBAnDoB,GACA,SAqDzB5N,EACAiU,GAEJV,wBAAyB3V,EAAAA,gBAAgBC,YAAY0V,IAC/C8B,EAAAA,EAAAA,IACI9B,EAAwB,GACxBnR,GACArB,EAAAA,EAAAA,IAAapE,KAAKP,MAAMuD,QAAQC,SAChCjD,KAAKY,YAETyC,EACNsV,oBAAoBC,EAAAA,EAAAA,IAChBnZ,EACAO,KAAKY,MACLZ,KAAKiR,gBACLjR,KAAK+T,2CACL5P,GAEJ0U,eAAeC,EAAAA,EAAAA,IAA8BrZ,EAAOO,KAAKY,MAAOZ,KAAKiR,iBACrE8H,QAAStZ,EAAMuD,QAAQsE,IAAIzF,OAAOmX,aAAcC,EAAAA,EAAAA,IAAuBxZ,GACvE8F,SAAUE,EAAQ0P,gBAAa9R,GAAY6V,EAAAA,EAAAA,IAAyBzZ,EAAOO,KAAKY,MAAOZ,KAAKiR,iBAC5FkI,gBAAgBC,EAAAA,EAAAA,IAAwB3Z,GACxC4Z,gBACIrZ,KAAKP,MAAMoC,OAAOyX,yBAA2B7T,EAAQ0P,YAC/CoE,EAAAA,EAAAA,IAA2B9Z,EAAO+Z,EAAAA,EAAuBC,YACzDpW,EACVqW,uBACI1Z,KAAKP,MAAMoC,OAAO8X,+BAAiClU,EAAQ0P,YACrDoE,EAAAA,EAAAA,IAA2B9Z,EAAO+Z,EAAAA,EAAuBpJ,kBACzD/M,EACVuW,WACI5Z,KAAKP,MAAMoC,OAAOgY,kBAAoB7Z,KAAKY,MAAMkZ,uBAC3CC,EAAAA,EAAAA,IAAoBta,EAAOO,KAAKY,MAAOZ,KAAKiR,sBAC5C5N,EACV2W,wBAAwBC,EAAAA,EAAAA,IAA0Bxa,EAAOO,KAAKY,OAC9D6U,IAAKyB,EAA4BzB,EAAM,EACvCC,MACAwB,0BAA2BA,EAC3BgD,wCAAyCla,KAAK+T,2CAC9CoG,iBAAkBhW,EAClBiW,SAAUpa,KAAKqa,wBAAwBlW,KAG3C,OAAOnE,KAAKP,MAAMuC,WAAWT,EACjC,CAyBQ0W,gCAEJ,IAAKjY,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOyY,sBAC/B,OAAO,KAGX,IAAKC,EAAAA,GAAiBC,UAClB,OAAO,KAGX,MAAMC,EAAsBC,MAAMC,KAAKC,SAASC,uBAAuBvb,EAAAA,aAAaqC,YAEpF,OAAKV,EAAAA,gBAAgBC,YAAYuZ,GAK7Blb,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAU,kCACVU,MAAOrC,KAAKP,MAAM6C,UAAUwY,qBAC5B1Y,QAASpC,KAAKoT,yBAAyBqH,EAAoB,KAE1Dza,KAAKP,MAAM6C,UAAUwY,sBATnB,IAYf,CAEQnJ,aAAaH,GAAiG,IAA7DwB,EAAA+H,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAkC/a,KAAKY,MAAMuS,iBAC9FnT,KAAKY,MAAMkZ,uBAAyBtI,IACpCA,EAASwJ,wBAA0BhI,GAEvChT,KAAKK,SAAS,CAAEkL,aAAciG,GAClC,CAEQ8C,mBAAmBH,GACvB,MACI9S,MACIoE,SAAWnE,OAAQmE,IAEvBzC,SAAS,cACL6F,EACA5F,SACIgY,aAAa,UAAEC,MAGvBlb,KAAKP,MAMHkV,EAJoB3U,KAAKP,MAAM4B,KAAKF,kBAAkBG,OAKvDuN,KAAI9I,IAAY,IAAAoV,EAAAC,EAAAC,EAAAC,EACb,MAAM/W,EACuB,QADb4W,EAA0C,QAA1CC,EAAIrV,EAAU+Q,oCAA4B,IAAAsE,EAAAA,EACtDrV,EAAUwV,uBAAe,IAAAJ,EAAAA,EACzB,GACJ,MAAO,CACHK,mBAAoBzV,EAAUyV,mBAC9BxV,eAGqB,QAHPqV,EAGT,QAHSC,EACV/W,EAAWR,MACPkT,IAAK,IAAAwE,EAAA,OAAwB,QAApBA,EAAAxE,EAAMjR,sBAAc,IAAAyV,OAAA,EAApBA,EAAsBpF,SAASqF,cAAevH,EAAmBpO,EAAUyV,mBAAmB,WAC1G,IAAAF,OAAA,EAFDA,EAEGtV,sBAAc,IAAAqV,EAAAA,EAAItV,EAAUC,eACnC2V,oBAAqB5V,EAAU4V,oBAClC,IAEJ7V,QAAOC,GAAaA,EAAUC,kBACnC4V,EAAAA,EAAAA,2BAA0B5b,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eAAehG,IAAIC,WAAYnB,GAI1F,MAAMmH,GAAyBC,EAAAA,EAAAA,oBAC3B,IAAIC,EAAAA,qBACAvW,EAASwW,gBAAkBxW,EAASwW,gBAAkBxW,EAAS4Q,SAC/D6E,OACA7X,OACAA,EACArD,KAAKP,MAAMuD,QAAQC,SAEvB4F,GAIJ,OAFA7I,KAAKK,SAAS,CAAEiF,gBAAiBwW,IAE1B,CAAEtH,sBAAuBsH,EAAwBnH,mBAC5D,CAyDQ3P,uCACJuP,EACAI,SAQMuH,EAAAA,EAAAA,iCACF,IAAIC,EAAAA,qCACA5H,EAAe0H,gBAAkB1H,EAAe0H,gBAAkB1H,EAAe8B,SACjFrW,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UACvCvG,EACA3U,KAAKP,MAAMuD,QAAQC,SAEvBjD,KAAKP,MAAMuD,QAAQ6F,cAE3B,CAEQ7D,4BAA4BuP,GAA6B,IAAA6H,EAG7D,MAAMC,QAA6BC,EAAAA,EAAAA,4CAC/B,IAAIC,EAAAA,6CACAhI,EAAe8B,SACfrW,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UACvC3G,GAEJvU,KAAKP,MAAMuD,QAAQ6F,eAGjB2T,EAAsBH,aAAoB,EAApBA,EAAsBtY,MAG7CmE,GAAoCA,EAASC,eAAiBC,EAAAA,aAAaF,YAEzB,QAA5BkU,EAAG7H,EAAe1O,kBAAU,IAAAuW,OAAA,EAAzBA,EAA2BrY,MACrDgC,IAAS,IAAAqH,EAAA,OAC4B,IAAjCrH,EAAUyV,oBAA4BzV,EAAUC,gBAAoE,YAApB,QAA9BoH,EAAArH,EAAUC,eAAeC,aAAK,IAAAmH,OAAA,EAA9BA,EAAgCqP,cAA0B,KAGhIzc,KAAKK,SAAS,CAAEyZ,uBAAuB,IAEvC9Z,KAAKK,UAASgU,IACV,MAAMhH,EAAagH,EAAchH,WAEjC,OADAA,EAAW4F,uBAAoB5P,EACxB,CAAEyW,uBAAuB,EAAO5G,gBAAgB,EAAO7F,aAAY,IAI9EmP,EACAxc,KAAKK,SAAS,CAAE+E,yBAA0BoX,IAE1Cxc,KAAKK,SAAS,CAAE+E,8BAA0B/B,GAElD,CAEQ2B,oBAAoBuP,GAIxB,IAAKvU,KAAKY,MAAM+U,iBAEZ,YADA3V,KAAKK,SAAS,CAAEsV,kBAAkB,IAKtC,MAAMnE,QAAiBkL,EAAAA,EAAAA,4BACnB,IAAIC,EAAAA,6BAA6BpI,EAAe8B,SAAUrW,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UAAW3G,GAC5GvU,KAAKP,MAAMuD,QAAQ6F,eAGnB2I,GACAxR,KAAK2R,aAAaH,EAE1B,CAEQxM,8BAA8BuP,GAA6B,IAAAqI,EAC/D,MAAMC,EAAsE,QAAtCD,EAAG5c,KAAKP,MAAM4B,KAAKwC,aAAavC,cAAM,IAAAsb,OAAA,EAAnCA,EAAqC7Y,MAC1EF,GAAsC,oEAAtBA,EAAaI,OAI3BwN,QAA2BqL,EAAAA,EAAAA,sCAC7B,IAAIC,EAAAA,0CACAxI,EAAe8B,SACfrW,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UACvC3G,OACAlR,EACAwZ,aAAgC,EAAhCA,EAAkC3Y,WAEtClE,KAAKP,MAAMuD,QAAQ6F,eAGnB4I,GACAzR,KAAKK,SAAS,CAAEqR,uBAAwBD,GAEhD,CAEQzM,+BAA+BS,GACnC,MAAMuX,QAA4Chd,KAAKid,uCACjDC,QAAsCld,KAAKmd,iCAE3C1H,EAAczV,KAAKod,+BAA+BJ,EAAqCvX,GACvFiQ,EAAc1V,KAAKqd,+BACrBH,GAAiCF,EACjCvX,GAEJ,IAAIF,EAAmBvF,KAAKsd,aAAa7X,EAASuX,GAClDzX,EAAWgY,KAAK7H,IAAInQ,EAAUkQ,GAE9BzV,KAAKK,SAAS,CACVoV,MACAC,MACAnQ,YAER,CAEQ6X,+BAA+BJ,EAA8CvX,GAAsB,IAAA+X,EACvG,OACIR,GACAhd,KAAKyd,2BADLT,MAEAvX,GAAiB,QAAV+X,EAAP/X,EAASiY,gBAAQ,IAAAF,GAAjBA,EAAmBG,iBACnBlY,EAAQiY,SAASC,gBAAkB,EAE5BlY,EAAQiY,SAASC,gBAGrB,CACX,CAEQN,+BAA+BO,EAAyCnY,GAAsB,IAAAoY,EAClG,OACID,GACA5d,KAAKyd,2BADLG,MAEAnY,GAAiB,QAAVoY,EAAPpY,EAASiY,gBAAQ,IAAAG,GAAjBA,EAAmBC,iBACnBrY,EAAQiY,SAASI,gBAAkB,EAE5BrY,EAAQiY,SAASI,iBAGrBC,EAAAA,EAAAA,kCAAiC/d,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOmc,2BAC1E,CAOQP,0BAAuB,IAAAQ,EAAAC,EAC3B,MAAM9G,EAAoBpX,KAAKP,MAAM4B,KAAK+V,kBAC1C,QAAuD,QAAhD6G,EAAE7G,SAAyB,QAAR8G,EAAjB9G,EAAmB9V,cAAM,IAAA4c,OAAA,EAAzBA,EAA2BC,2BAAmB,IAAAF,GAAAA,EAC3D,CAEQX,aAAa7X,EAAwBuX,GAA4C,IAAAoB,EAAAC,EAAAC,EACrF,MAAM,SAAE/Y,GAAavF,KAAKY,MAC1B,IAAI2d,EAAkB,EAEtB,GAAIhZ,IAAagZ,IAAoBvB,EACjC,OAAOzX,EAGX,MAAM6R,EAAoBpX,KAAKP,MAAM4B,KAAK+V,kBAE1C,OAD2G,QAAjEgH,EAAGhH,SAAyB,QAARiH,EAAjBjH,EAAmB9V,cAAM,IAAA+c,OAAA,EAAzBA,EAA2BhH,2CAAmC,IAAA+G,GAAAA,GAKvG3Y,SAAiB,QAAV6Y,EAAP7Y,EAASiY,gBAAQ,IAAAY,GAAjBA,EAAmBE,iBAAmB/Y,EAAQiY,SAASc,gBAAkB,IACzED,EAAkB9Y,EAAQiY,SAASc,iBAGhCD,GAPIhZ,CAQf,CAmBQP,6CAA0C,IAAAyZ,EAAAC,EAC9C,MAAMC,QAAwB3e,KAAKP,MAAM4B,KAAKwC,aAK9C,KAH6B8a,SAE5B,QAF2CF,EAAfE,EAAiB5a,MAC1CF,GAAgBA,EAAaI,OAASkT,EAAAA,YACzC,IAAAsH,OAAA,EAF4BA,EAE1Bva,WAEC,OAAO,EAMX,GAJ+Bya,SAE9B,QAF6CD,EAAfC,EAAiB5a,MAC5CF,GAAgBA,EAAaI,OAAS2a,EAAAA,YACzC,IAAAF,OAAA,EAF8BA,EAE5Bxa,UAEyB,CAAC,IAAD2a,EACxB,MAAMC,EAA4D,QAArBD,EAAG7e,KAAKP,MAAMuD,eAAO,IAAA6b,GAAS,QAATA,EAAlBA,EAAoB5b,eAAO,IAAA4b,GAAK,QAALA,EAA3BA,EAA6BvX,WAAG,IAAAuX,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCAC5F,GAAgD,SAA5CF,EACA,OAAO,EAGX,GAAgD,QAA5CA,EACA,OAAO,EAEX,IAAIG,EACJ,IACIA,QAAqBjf,KAAKP,MAAM4B,KAAKoD,mBAIxB,CAHf,MAAOoH,GAGL,OAFA7L,KAAKP,MAAMyK,UAAUgV,YAAYrT,GACjC7L,KAAKP,MAAMyK,UAAU6B,MAAM,0EACpB,CAAM,CAGjB,OACIkT,IAC8C,QAA5CH,GAAqDG,EAAaE,OACnB,QAA5CL,IAAsDG,EAAaE,MAAO,CAEhF,CAAC,IAADC,EACH,MAAMhI,QAA0BpX,KAAKP,MAAM4B,KAAK+V,kBAChD,QAA+C,QAAxCgI,EAAEhI,aAAiB,EAAjBA,EAAmB+G,2BAAmB,IAAAiB,GAAAA,EAAW,CAElE,CAEQ/E,wBAAwBlW,GAAiB,IAAAkb,EAC7C,MAAMjF,EAAmC,QAA3BiF,EAAGrf,KAAKP,MAAM4B,KAAK+Y,gBAAQ,IAAAiF,GAAQ,QAARA,EAAxBA,EAA0B/d,cAAM,IAAA+d,OAAA,EAAhCA,EAAkCvZ,QAAO9B,GAAQA,EAAKqS,WAAalS,IACpF,IAAIlD,EAAAA,gBAAgBC,YAAYkZ,IAAsC,IAAzBA,EAAS,GAAG/D,SAIzD,OAAO+D,CACX,CAEQpV,uCAAoC,IAAAsa,EACxC,MAAMX,QAAwB3e,KAAKP,MAAM4B,KAAKwC,aAExC0b,EAAoCZ,SAEzC,QAFwDW,EAAfX,EAAiB5a,MACvDF,GAAgBA,EAAaI,OAASub,EAAAA,YACzC,IAAAF,OAAA,EAFyCA,EAEvCpb,UAEH,OAAOqb,SAAAA,CACX,EAGJ,4PCnyBO,SAASE,EACZzc,EACA0c,EACAC,EACAC,GAAqB,IAAAC,EAErB,OAAK7c,SAAY,QAAL6c,EAAP7c,EAASsE,WAAG,IAAAuY,GAAQ,QAARA,EAAZA,EAAche,cAAM,IAAAge,GAApBA,EAAsBC,kBAGvBJ,EACOE,EAHAD,CAMf,CCjBO3a,eAAe+a,EAClBC,EACA9E,EACArS,EACA0G,EACAjK,GAEA,MAAMnB,GAAYC,EAAAA,EAAAA,IAAayE,EAAcgT,gBACvCoE,EAAc,IAAIC,EAAAA,sCAAsCF,EAAW9E,EAAW5V,EAAiBnB,GAErG,OAAOgc,EAAAA,EAAAA,qCAAoCF,EAAapX,GACnDlB,MAAKyY,GACEA,EACOjZ,QAAQ6N,IAAIoL,EAAevR,KAAI7J,SAgBtDA,eAAyCqb,EAA8B9Q,GACnE,MAAM+Q,EAAY,CACdC,IAAKF,EAAcG,KAAO,GAC1BC,QAASJ,EAAcK,SAAW,IAGtC,GAAsB,KAAlBJ,EAAUC,IACV,MAAO,CAACD,GAAW,GAGvB,OAAO,IAAInZ,SAA+BC,IACtC,IACI,MAAMuZ,EAAO,IAAIC,eACjBD,EAAKE,KAAK,OAAQP,EAAUC,KAAK,GAEjCI,EAAKG,iBAAiB,QAAQ,KAC1B1Z,EAAQ,CAACkZ,EAA2B,MAAhBK,EAAK/Y,QAAkC,MAAhB+Y,EAAK/Y,QAAgB,IAGpE+Y,EAAKG,iBAAiB,SAAS,KAC3B1Z,EAAQ,CAACkZ,GAAW,GAAO,IAG/BK,EAAKI,MAEuB,CAD9B,MAAAC,GACE5Z,EAAQ,CAACkZ,GAAW,GAAQ,IAGxC,CA5C6EW,CAA0BZ,MAAgC1Y,MACnHuZ,GACWA,EAAMpb,QAAOqb,GAAQA,EAAK,KAAItS,KAAIsS,GAAQA,EAAK,OAI3D,KAEVvV,OAAMC,IACHhD,EAAcqB,UAAU4B,UAAUD,GAClChD,EAAcqB,UAAU6B,MAAM,sDACvB,KAEnB,4lBCgJA,MAAMqV,UAAkB7hB,IAAAA,UAuGpBC,YAAmBC,GACfC,MAAMD,GAhGO,KAAAoR,qBAA4C,IAAIC,EAAAA,mBAAyB,GAElF,KAAAvM,WAAuC,CAAC,EAExC,KAAAwM,sBAAqC,IAAIC,IAMhC,KAAAqQ,mBAAuC,CACpDnQ,eAAiBC,IACb,MAAM9D,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YAKnC,OAJAA,EAAWC,mBAAgBjK,EAC3BgK,EAAW5E,gBAAapF,EAExBrD,KAAKK,SAAS,CAAEkF,SAAU4L,EAAa9D,gBAChC,CAAI,EAEf7G,iBAAmB4K,IACfpR,KAAKK,SAAS,CAAEgN,WAAY+D,GAAgB,EAEhDC,sBAAuBA,CACnBC,EACAC,EACAC,EACAC,KAEAzR,KAAKK,SAAS,CACViF,gBAAiBgM,EACjBlM,yBAA0BmM,EAC1BG,uBAAwBD,IAE5BzR,KAAK2R,aAAaH,EAAS,EAE/BI,oBAAsBC,IACdA,GACA7R,KAAK+Q,sBAAsBe,IAAID,EAAsB,EAG7DE,uBAAwB/M,MAAOgN,EAA6BC,KAAmD,IAAAqP,EAG3G,GAFAthB,KAAKuE,WAAWyN,GAAuBC,EAEnCjS,KAAK+Q,sBAAsBmB,QAA4B,QAAxBoP,EAAKthB,KAAKuhB,sBAAc,IAAAD,GAAS,QAATA,EAAnBA,EAAqB7b,eAAO,IAAA6b,GAAY,QAAZA,EAA5BA,EAA8Bzb,kBAAU,IAAAyb,OAAA,EAAxCA,EAA0Cjb,QAC9E,OAAOrG,KAAK6Q,qBACPsB,SAAQnN,SACEhF,KAAKoS,sBAEfxG,OAAOC,IAEJ,GAAIA,IAAUwG,EAAAA,wBAAwBC,gCAClC,MAAMzG,CAAM,GAEjB,EAGf0G,gBAAiBA,CAACC,EAAuBlQ,IAC9BtC,KAAKyS,iBAAiBD,EAAelQ,GAEhDyF,gBAAkB2K,IACd1S,KAAKwhB,sBAAsB,EAE/B7O,wBAA0BC,IACtB5S,KAAKK,SAAS,CAAEuS,uBAAsB,EAE1CG,iBAAmBC,IAEf,MAAM3F,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YACnCA,EAAW4F,uBAAoB5P,EAE/BrD,KAAKK,SAAS,CAAE6S,gBAAgB,EAAMC,iBAAkBH,EAAa3F,eACrErN,KAAK2R,aAAa3R,KAAKY,MAAM2K,aAAcyH,EAAY,GAI9C,KAAAyO,4BAA8C,CAC3DnY,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCgY,GAAI,CAAElY,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCiY,GAAI,CAAEnY,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,YAAaC,EAAG,EAAGC,EAAG,IAEnCG,UAAU,EACV+X,iBAAiB,GAGJ,KAAAC,8BAAgD,CAC7DvY,UAAW,CACPC,GAAI,CAAEC,EAAG,YAAaC,EAAG,IAAKC,EAAG,GACjCC,GAAI,CAAEH,EAAG,YAAaC,EAAG,IAAKC,EAAG,IAErCG,UAAU,EACV+X,iBAAiB,GAmJJ,KAAAE,uBAA0Brc,IACvC,MAAM,OAAE5D,GAAW7B,KAAKP,MAClBsiB,GAAUC,EAAAA,EAAAA,kBAAiB,QAAShiB,KAAK8J,iBAAkBmY,EAAAA,kBAAkBC,WAAY,IACzFC,GAAaC,EAAAA,EAAAA,wBAAuBpiB,KAAK8J,iBAAkBiY,GAEjE,OACIxiB,IAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAU,iCACVS,SAASigB,EAAAA,EAAAA,kBAAiBriB,KAAK8J,iBAAkBiY,EAASE,EAAAA,kBAAkBC,aACxEC,EAAU,cACFtgB,EAAOygB,mBACnBC,KAAMviB,KAAKwiB,eAAe/c,KAEzB5D,EAAOygB,mBACH,EAQA,KAAAG,gBAAkB,KAAiB,IAAAC,EAChD,MAAM,OAAE7gB,EAAM,UAAES,GAActC,KAAKP,MACnC,IAAIkjB,EACAvc,EACJ,MAAMwc,EAAuB/gB,EAAO+gB,qBAChCA,IACAA,EAAqBhB,iBAAkB,GAGvC3gB,EAAAA,gBAAgBC,YAAYlB,KAAKY,MAAM+hB,oBACvCA,EAAoB3iB,KAAKY,MAAM+hB,kBAAkB9T,KAAI,CAAC7K,EAAkB6e,IAC7D7iB,KAAK8iB,6BAA6B9e,EAAM4e,GAAwB5iB,KAAKyhB,4BAA6BoB,KAE7Gzc,EAAO,IAAIpG,KAAKY,MAAM+hB,kBAAkB9T,KAAI7K,GAAQA,EAAKuc,SAEzDoC,EAAoB,CAAC3iB,KAAK+iB,kBAAkBH,IAC5Cxc,EAAO,CAAC,UAoBZ,MAjBmD,CAC/C4c,IAAKC,EAAAA,SACLthB,UAAW,6BACXuhB,MAAOP,EACPQ,YAAmC,QAAxBT,EAAE1iB,KAAKY,MAAMuiB,mBAAW,IAAAT,EAAAA,EAAI,EACvCU,KAAMpjB,KAAKojB,KACXC,SAAUrjB,KAAKqjB,SACfC,UAAU,EACVC,kBAAmBjhB,EAAUkhB,8BAC7BC,kBAAmBnhB,EAAUohB,0BAC7BC,kBAAmBrhB,EAAUshB,kBAC7BC,yBAA0B7jB,KAAK8jB,UAC/BC,eAAgB/jB,KAAKgkB,SACrBC,gBAAiBjkB,KAAKkkB,UACtB7T,IAAKjK,EAGG,EAOC,KAAA+d,kBAAoB,KACjC,MAAM,OAAEtiB,EAAM,GAAE0E,EAAE,UAAEjE,GAActC,KAAKP,MAEjC2kB,EAAyBviB,EAAOuiB,uBAKtC,IAAIzB,EACAvc,EAgBJ,OArBIge,IACAA,EAAuBxC,iBAAkB,GAKzC3gB,EAAAA,gBAAgBC,YAAYlB,KAAKY,MAAM+hB,oBACvCA,EAAoB3iB,KAAKY,MAAM+hB,kBAAkB9T,KAAI,CAAC7K,EAAkB6e,IAC7D7iB,KAAKqkB,kBACRrgB,EACAogB,QAAAA,EAA0BpkB,KAAK6hB,8BAC/BgB,EACA7iB,KAAKY,MAAMuiB,eAGnB/c,EAAO,IAAIpG,KAAKY,MAAM+hB,kBAAkB9T,KAAI7K,GAAQA,EAAKuc,SAEzDoC,EAAoB,GACpBvc,EAAO,IAGJ,CACHke,yBAA0B,CAAE3iB,UAAW,0CACvC4iB,kCAAmC,CAC/BvB,IAAKwB,EAAAA,oBACL7iB,UAAW,+BACX8iB,iBAAkBniB,EAAUkhB,8BAC5BkB,iBAAkBpiB,EAAUohB,0BAC5BiB,SAAUpe,EACVqe,YAAY,EACZvU,IAAKwU,KAAKC,UAAU1e,IAExB8c,MAAOP,EACV,EAoBY,KAAAvQ,kBAAoBpN,UACjC,MACIhC,SAAS,cACL6F,EACA5F,SACIgY,aAAa,UAAEC,MAGvBlb,KAAKP,OAEH,QAAEgG,EAAO,kBAAEtE,GAAsBnB,KAAKuhB,eAE5C,IAAK9b,IAAYtE,EACb,OAGJ,MAAMgT,EAAkB3S,EAAA,GAAkCxB,KAAKuE,YAI/D,GAHAvE,KAAKK,SAAS,CAAEuS,qBAAqB,IAGjC5S,KAAKY,MAAMyM,WAAW5E,YAAczI,KAAKY,MAAMyM,WAAWC,cAAe,CACzE,MAAM8G,EAAe5S,EAAA,GAAQxB,KAAKY,MAAMyM,YACxC+G,EAAgB3L,gBAAapF,EACW,cAApCrD,KAAKY,MAAMyM,WAAW5G,YACtB2N,EAAgB9G,mBAAgBjK,EAChC+Q,EAAgB3N,eAAYpD,GAEhCrD,KAAKK,SAAS,CAAEgN,WAAY+G,GAAmB,CAInD,IAAK,MAAM/D,KAAOlK,OAAOC,KAAK+N,GAC1B,GAAInU,KAAKY,MAAMyM,WAAW3G,gBAAgB2J,GAAM,CAC5C,MAAMhD,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YACnCA,EAAW3G,gBAAgB2J,QAAOhN,EAElCrD,KAAKK,SAAS,CAAEgN,cAAc,CAMtC,MAAMsH,EAAmBxT,EACpB0N,KAAI9I,IACM,CACHyV,mBAAoBzV,EAAUyV,mBAC9BxV,eACIhG,KAAK+kB,sBAAsBhf,EAAWoO,EAAmBpO,EAAUyV,sBAAwBzV,EAAUC,eACzG2V,oBAAqB5V,EAAU4V,wBAGtC7V,QAAOC,GACGA,GAAaA,EAAUC,iBAKhCV,EAAkB,IAAI6B,SAAiCnC,UACzD,MAAMggB,QAAmBjJ,EAAAA,EAAAA,oBACrB,IAAIC,EAAAA,qBACAvW,EAAQwW,gBAAkBxW,EAAQwW,gBAAkBxW,EAAQ4Q,SAC5D6E,EACAvG,OACAtR,EACArD,KAAKP,MAAMuD,QAAQC,SAEvB4F,GAEAmc,IAEAhlB,KAAKuhB,eAAepgB,wBAA0B+a,EAAAA,EAAAA,iCAC1C,IAAIC,EAAAA,qCACA6I,EAAW/I,gBAAkB+I,EAAW/I,gBAAkB+I,EAAW3O,SACrE6E,EACAvG,EACA3U,KAAKP,MAAMuD,QAAQC,SAEvB4F,IAIRzB,EAAQ4d,EAAW,IAGvBhlB,KAAKK,SAAS,CAAEiF,oBAChB,MAAM2f,QAAuB3f,EAE7B,GAAI2f,GAAkBjlB,KAAKuhB,eAAgB,CAAC,IAAD2D,EAAAlR,EAGvChU,KAAKuhB,eAAe9b,QAAUwf,EAC9B,IAAIE,QAA6BnlB,KAAKolB,oBAAoB3f,EAASwf,GACnEE,EAASnlB,KAAKqlB,8BAA8BF,EAAQF,GACpDjlB,KAAKK,SAAS,CACVsiB,kBAAmB,IAAIwC,GACvBhC,YAAa,EACbmC,WAAYC,KAAKC,QAGrB,MAAMnJ,QAA6BC,EAAAA,EAAAA,4CAC/B,IAAIC,EAAAA,6CAA6C0I,EAAe5O,SAAU6E,GAC1ErS,GAGJ7I,KAAKuhB,eAAenc,yBAA2BiX,EAM/C,GAJuD,QAA5B6I,EAAGD,EAAepf,kBAAU,IAAAqf,OAAA,EAAzBA,EAA2BnhB,MACrDgC,IAAS,IAAAqH,EAAA,OAAqC,IAAjCrH,EAAUyV,oBAA+E,YAA3B,QAAxBpO,EAAArH,EAAUC,sBAAc,IAAAoH,GAAO,QAAPA,EAAxBA,EAA0BnH,aAAK,IAAAmH,OAAA,EAA/BA,EAAiCqP,cAA0B,IAI9Gzc,KAAKK,SAAS,CAAEyZ,uBAAuB,QACpC,CAEH,MAAMzM,EAAU7L,EAAA,GAAQxB,KAAKY,MAAMyM,YACnCA,EAAW4F,uBAAoB5P,EAE/BrD,KAAKK,SAAS,CAAEyZ,uBAAuB,EAAO5G,gBAAgB,EAAO7F,cAAc,CAGnFgP,GAAwBA,EAAqBhW,OAAS,EACtDrG,KAAKK,SAAS,CAAE+E,yBAA0BiX,EAAqB,KAE/Drc,KAAKK,SAAS,CAAE+E,8BAA0B/B,IAI9C,MAAMmO,QAAiBkL,EAAAA,EAAAA,4BACnB,IAAIC,EAAAA,6BAA6BsI,EAAe5O,SAAU6E,GAC1DrS,GAGA2I,GACAxR,KAAK2R,aAAaH,GAGtB,MAAMiU,EAAuE,QAAtCzR,EAAGhU,KAAKP,MAAM4B,KAAKwC,aAAavC,cAAM,IAAA0S,OAAA,EAAnCA,EAAqCjQ,MAC3EF,GAAsC,oEAAtBA,EAAaI,OAI3BwN,QAA2BqL,EAAAA,EAAAA,sCAC7B,IAAIC,EAAAA,0CACAkI,EAAe5O,SACf6E,OACA7X,OACAA,EACAoiB,aAAiC,EAAjCA,EAAmCvhB,WAEvC2E,GAGA4I,GACAzR,KAAKK,SAAS,CAAEqR,uBAAwBD,IAG5CzR,KAAKK,SAAS,CAAEuS,qBAAqB,UAC/B5S,KAAK+U,yBAAyBkQ,EAAgB,GAuBpD,KAAAvF,oBAAsB,IACc,YAApC1f,KAAKP,MAAMoC,OAAO6jB,cAqGT,KAAAX,sBAAwB,CACrCY,EACAC,KAEA,GAAIA,GAAcD,EAAqBpK,gBACnC,OAAOoK,EAAqBpK,gBAAgBxX,MAAKgC,GAAaA,EAAUsQ,YAAcuP,GAG1E,EAGH,KAAAnT,iBAAmB,CAACD,EAAuBlQ,KAA0C,IAAAujB,EAClG,MAAM3Q,EAAgC,QAAtB2Q,EAAG7lB,KAAKuhB,sBAAc,IAAAsE,GAAS,QAATA,EAAnBA,EAAqBpgB,eAAO,IAAAogB,OAAA,EAA5BA,EAA8B1Q,WAEjD,OAAQ3C,GACJ,KAAK,EACD,OAAOlQ,EAAU8S,0BACrB,KAAK,EACD,OAAO9S,EAAU+S,kCACrB,KAAK,EACD,OAAO/S,EAAUgT,yBACrB,KAAK,EACD,OAAOJ,EAAa5S,EAAUiT,2BAA6BjT,EAAUkT,0BACzE,QACI,MAAO,GAAG,EAwDL,KAAA0O,UAAY,KACzBlkB,KAAKK,SAAS,CAAEylB,WAAW,GAAO,EAGrB,KAAA9B,SAAW,KACxBhkB,KAAKK,SAAS,CAAEylB,WAAW,GAAQ,EAGtB,KAAA1C,KAAO,KACpB,QAA0B/f,IAAtBrD,KAAK+lB,aACL,OAGJ,MAAMC,EAAYhmB,KAAK+lB,aAAe,EAAI/lB,KAAKY,MAAMuiB,YAAe,EACpEnjB,KAAK8jB,UAAUkC,EAAU,EAGZ,KAAA3C,SAAW,KACxB,MAAM2C,EAAYhmB,KAAKimB,cACjBjmB,KAAKY,MAAM+hB,kBACP3iB,KAAKY,MAAM+hB,kBAAkBtc,OAAS,EACtC,EACJrG,KAAKY,MAAMuiB,YAAe,EAChCnjB,KAAK8jB,UAAUkC,EAAU,EAGZ,KAAAlC,UAAajB,IAC1B7iB,KAAKK,SAAS,CAAE8iB,YAAaN,GAAQ,EAOxB,KAAAqD,iBAAmB,CAACC,EAAmB5W,EAA+BsT,IACnFtjB,IAAAA,cAAC6mB,EAAAA,GAAKjgB,OAAA8C,OAAA,CACF4S,eAAgB7b,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eACjDla,UAAU,0BACNwkB,EAAK,CACT7a,aAActL,KAAKP,MAAMuD,QAAQC,QAAQqI,aACzCiE,cAAeA,EACf8W,oBAAoB,UACpBC,KAAK,WACLjW,IAAK8V,EAAM5F,IACXha,GAAI,GAAGvG,KAAKP,MAAM8G,sBAAsBsc,OAI/B,KAAAwB,kBAAoB,CACjC8B,EACA5W,EACAsT,EACA0D,KAOO,CACHC,4BAA6B,CACzBxD,IAAK,KACLrhB,UARQC,IACZ,mCACA2kB,IAAwB1D,EAAQ,0CAA4C,IAOxEyD,KAAM,MACNG,SAAU,EACVpW,IAAKwS,EACL,aAAcsD,EAAM1F,QACpB,gBAAiB8F,IAAwB1D,EACzC,gBAAiB,GAAG7iB,KAAKP,MAAM8G,sBAAsBsc,IACrDzgB,QAASpC,KAAK0mB,0BAA0B7D,GACxC8D,UAAW3mB,KAAK4mB,4BAA4B/D,IAEhDgE,QACItnB,IAAAA,cAAC6mB,EAAAA,GAAKjgB,OAAA8C,OAAA,CACF4S,eAAgB7b,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eACjDla,UAAU,+BACNwkB,EAAK,CACT9V,IAAK8V,EAAM5F,IACXjV,aAActL,KAAKP,MAAMuD,QAAQC,QAAQqI,aACzCiE,cAAeA,EACf8W,oBAAoB,eAMnB,KAAAO,4BAA+B/D,GACpCiE,IACAA,EAAMC,QAAUC,EAAAA,SAASC,OAASH,EAAMC,QAAUC,EAAAA,SAASE,QAC3DJ,EAAMK,iBACNnnB,KAAK8jB,UAAUjB,GAAO,EAKjB,KAAA6D,0BAA6B7D,GAClCiE,IACJA,EAAMK,iBACNnnB,KAAK8jB,UAAUjB,EAAM,EAWZ,KAAAoD,YAAc,IAAiC,IAA3BjmB,KAAKY,MAAMuiB,YAE/B,KAAA4C,WAAa,IAAM/lB,KAAKY,MAAM+hB,mBAAqB3iB,KAAKY,MAAMuiB,cAAgBnjB,KAAKY,MAAM+hB,kBAAkBtc,OAAS,EAEpH,KAAA+gB,eAAiBpiB,SACvBhF,KAAKqnB,SAASP,EAAO9mB,KAAKP,OAGpB,KAAA4nB,SAAWriB,MAAOsiB,EAAuC7nB,KACtE,IAAK8nB,EAAAA,iBAAiBC,kBAAkB/nB,EAAMgoB,mBAAoB,CAC9D,MACIzkB,SAAS,cACL6F,EACA5F,SACIgY,aAAa,UAAEC,MAGvBlb,KAAKP,MAET,GAAIO,KAAKP,MAAMgoB,kBAAmB,CAC9BznB,KAAKK,SAAS,CAAEkN,WAAW,IAC3B,MAAMyS,EAAYhgB,KAAKP,MAAMgoB,kBACvBC,EAAqB1nB,KAAKP,MAAMioB,mBACtC1nB,KAAKuhB,qBCn/Bdvc,eACHgb,EACA9E,EACAyM,EACAD,GAEA,MAAMnG,EAAkC,CAAC,EAEzC,GAAIvB,EAAY,GAAK9E,EAAY,EAAG,CAChC,MAAM0M,GAAWC,EAAAA,EAAAA,iBAAgBF,GAC3BG,GAAkBC,EAAAA,EAAAA,kBAAiBJ,SAGnC5L,EAAAA,EAAAA,oBAAmB,IAAIC,EAAAA,qBAAqBgE,EAAW9E,EAAWwM,EAAoB,MAAOC,EAAI9L,gBAAiB8L,GACnHhgB,MAAK3C,UACEgjB,IACAzG,EAAe9b,QAAUuiB,EAAc,IAG9Cpc,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,UAIhCyQ,EAAAA,EAAAA,4CAA2C,IAAIC,EAAAA,6CAA6CyD,EAAW9E,GAAYyM,GACpHhgB,MAAKsgB,IACEA,IACA1G,EAAenc,yBAA2B6iB,EAAsB,IAGvErc,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,UAIhC6Q,EAAAA,EAAAA,4BAA2B,IAAIC,EAAAA,6BAA6BqD,EAAW9E,OAAW7X,GAAYskB,GAC/FhgB,MAAK4D,IACEA,IACAgW,EAAehW,aAAeA,EAAa,IAGlDK,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,UAIhCqQ,EAAAA,EAAAA,iCACF,IAAIC,EAAAA,qCAAqC6D,EAAW9E,EAAWwM,EAAoBC,EAAI9L,gBACvF8L,GAEChgB,MAAKxG,IACEA,IACAogB,EAAepgB,kBAAoBA,EAAkB,IAG5DyK,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,UAIhCqc,EAAAA,EAAAA,kBAAiB,IAAIC,EAAAA,sBAAsBR,EAAI9L,eAAeZ,YAAa0M,EAAI9L,gBAAiB8L,GACjGhgB,MAAKygB,IACF7G,EAAepc,KAAOijB,CAAS,IAElCxc,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,IAIlC+b,GAAYE,SACNO,EAAAA,EAAAA,mBAAkB,IAAIC,EAAAA,uBAAuBtI,EAAUtE,WAAYkM,EAAUE,GAAkBH,GAChGhgB,MAAK4gB,IACEA,IACAhH,EAAeiH,eAAiBD,EAAmB,IAG1D3c,OAAMC,IACH8b,EAAIzd,UAAU4B,UAAUD,EAAM,GAChC,CAId,OAAO0V,CACX,CDg6B4CkH,CAAkBzI,EAAW9E,EAAWrS,EAAe6e,GACnF,MAAM,QAAEjiB,EAAO,aAAE8F,GAAiBvL,KAAKuhB,eACjCmH,EAAsBnD,KAAKC,MAMjC,GALAxlB,KAAK2oB,kBAAkBD,GACnBnd,GACAvL,KAAK2R,aAAapG,GAGlB9F,EAAS,CACT,MAAM,QAAEzC,GAAYhD,KAAKP,MACrBuD,EAAQsE,IAAIzF,OAAOsU,4BAA8B,GACjDC,EAAAA,GAAoB1K,SAAS1L,KAAKP,MAAMuD,QAASA,EAAQsE,IAAIzF,OAAOsU,4BAA6B1Q,EAAQ4Q,UAGzG5Q,EAAQsQ,gBAAkBC,EAAAA,oBAAoBC,SAC9CjW,KAAKK,SAAS,CAAE6V,eAAe,UAE7BlW,KAAK+U,yBAAyBtP,GACpC,IAAI0f,QAAenlB,KAAKolB,oBAAoB3f,EAASA,GACrD0f,EAASnlB,KAAKqlB,8BAA8BF,GAC5CnlB,KAAKK,SAAS,CACVsiB,kBAAmB,IAAIwC,GACvBhC,YAAa,EACbmC,WAAYoD,IAGhB,MAAMjX,QAA2BmX,EAAAA,EAAAA,yBAC7B,CACIC,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,cAClCigB,oBAAqBC,EAAAA,yBAAyBC,qCAC1ChpB,KAAKP,MAAMuD,QAAQ6F,gBAG3B,CAAC7I,KAAKP,MAAMgoB,oBAEZhW,GAAsBA,EAAmBpL,OAAS,GAClDrG,KAAKK,SAAS,CAAEqR,uBAAwBD,EAAmB,IAAK,CAGxEzR,KAAKK,SAAS,CAAE4oB,cAAc,GAAQ,CAAD,GAKzC,KAAA7D,oBAAsBpgB,MAAOS,EAA2Bwf,KAA2D,IAAAiE,EACvH,IAAI/D,EACmD,IAADgE,EAS/CC,EAAAC,EATmB,QAA1BH,EAAIlpB,KAAKP,MAAMuD,QAAQsE,WAAG,IAAA4hB,GAAQ,QAARA,EAAtBA,EAAwBrnB,cAAM,IAAAqnB,GAA9BA,EAAgCpJ,iBAChCqF,QDl/BLngB,eACHgb,EACAN,EACAxE,EACArS,EACA8W,EACAra,GAA+B,IAAAgkB,EAE/B,MAAMnlB,GAAYC,EAAAA,EAAAA,IAAayE,EAAcgT,gBAC7C,GAAgC,QAAhCyN,EAAIzgB,EAAcgT,sBAAc,IAAAyN,GAAQ,QAARA,EAA5BA,EAA8BC,cAAM,IAAAD,GAApCA,EAAsCE,UAAW,CACjD,MAAMC,QAAiBC,EAAAA,EAAAA,IAAmB7gB,EAAcgT,eAAgB,iCAAkC,OAAQ,CAC9GmE,UAAWA,EACX9E,UAAWA,EACX/W,UAAWA,IAEf,GAAwB,MAApBslB,EAAS7hB,OAET,OADAiB,EAAcqB,UAAU6B,MAAM,2EACvB,GAEX,MAAM4d,EAAmBF,aAAQ,EAARA,EAAUpoB,KACnC,OAAIsoB,EACOA,EAAiB9a,KAAIwR,IAAgB,IAAAuJ,EACxC,MAAO,CACHrJ,IAAsB,QAAnBqJ,EAAEvJ,EAAcG,WAAG,IAAAoJ,EAAAA,EAAI,GAC1BnJ,QAAShB,EAAW5W,EAAcgT,eAAgB6D,EAAqBC,EAAaU,EAAcK,SAClGmJ,qBAAsBxJ,EAAcyJ,6BAC9B,CACIC,6BAA8B,aAElC1mB,EACT,IAGF,EAAG,CAEd,MAAM4c,EAAc,IAAIC,EAAAA,sCAAsCF,EAAW9E,EAAW5V,EAAiBnB,GACrG,OAAOgc,EAAAA,EAAAA,qCAAoCF,EAAapX,GACnDlB,MAAKyY,GACEA,EACOA,EAAevR,KAAIwR,IAAgB,IAAA2J,EACtC,MAAO,CACHzJ,IAAsB,QAAnByJ,EAAE3J,EAAcG,WAAG,IAAAwJ,EAAAA,EAAI,GAC1BvJ,QAAShB,EAAW5W,EAAcgT,eAAgB6D,EAAqBC,EAAaU,EAAcK,SAClGmJ,qBAAsBxJ,EAAcyJ,6BAC9B,CACIC,6BAA8B,aAElC1mB,EACT,IAGF,KAEVuI,OAAMC,IACHhD,EAAcqB,UAAU4B,UAAUD,GAClChD,EAAcqB,UAAU6B,MAAM,sDACvB,KAEnB,CCw7B2Bke,CACXxkB,EAAQ4Q,SACRrW,KAAK0f,uBACJ1f,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UACxClb,KAAKP,MAAMuD,QAAQ6F,cACnBpD,EAAQxB,KACc,QADVklB,EACZ1jB,EAAQ8O,sBAAc,IAAA4U,EAAAA,EAAIlE,GAG9BE,QAAepF,EACXta,EAAQ4Q,UAAY,GACnBrW,KAAKP,MAAMuD,QAAQC,QAAQgY,YAAYC,UACxClb,KAAKP,MAAMuD,QAAQ6F,cACqB,QADRugB,EAChCppB,KAAKP,MAAMoC,OAAOuiB,8BAAsB,IAAAgF,GAAIppB,KAAK6hB,8BAC3B,QADwDwH,EAC9E5jB,EAAQ8O,sBAAc,IAAA8U,EAAAA,EAAIpE,GAGlC,OAAOE,CAAM,EAGA,KAAA+E,2BAA6B,KAC1ClqB,KAAKwhB,sBAAsB,EA+Bd,KAAA2I,gBAAmBplB,GAAiCqlB,IAC7DrlB,EAAUmM,gBACHnM,EAAUmM,eAAekZ,GAKvB,KAAAC,gBAAkB,CAC/B5qB,EACAmB,EACAmE,KAEA,MAAM,UAAEzC,GAAc7C,GAEhB,SACF8F,EAAQ,IACRkQ,EAAG,IACHC,EACArI,YAAY,cAAEC,IACd1M,EAEJ,MAAO,CACHkP,eAAgB,CACZnO,UAAW,0BAEf2oB,oBAAqB,CACjBtH,IAAK,QACLrhB,UAAW,uCACX4oB,QAAS,wCAEbva,QAASzQ,IAAAA,cAAA,OAAKoC,UAAU,gDAAgDW,EAAUkoB,wBAClFla,OAAQhD,GACJ/N,IAAAA,cAAA,QAAMoC,UAAU,iDACZpC,IAAAA,cAAA,QAAMoC,UAAU,2BAA0B,cAAa,SACvDpC,IAAAA,cAAA,YAAO+N,IAGfmd,MACIlrB,IAAAA,cAACmrB,EAAAA,oBAAmB,CAChBnkB,GAAG,oCACHkP,IAAKA,EACLC,IAAKA,EACLiV,aAAcplB,EACdqlB,SAAU5qB,KAAKmqB,gBAAgBplB,GAC/B8lB,uBAAwBvoB,EAAUuoB,uBAClCC,yBAA0BxoB,EAAUwoB,yBACpCC,yBAA0BzoB,EAAUyoB,yBACpCC,gBAAiB1oB,EAAU0oB,gBAC3BC,gBAAiB3oB,EAAU2oB,gBAC3BnhB,iBAAkB9J,KAAK8J,iBACvB4G,SAAU1Q,KAAKY,MAAMgS,sBAGhC,EA94BD5S,KAAKY,MAAQ,CACT2M,WAAW,EACXhI,SAAU,EACVkQ,SAAKpS,EACLqS,SAAKrS,EACLgK,WAAY,CACR3G,gBAAiB,CAAC,GAEtBpB,qBAAiBjC,EACjBkI,kBAAclI,EACdqO,4BAAwBrO,EACxBuP,qBAAqB,EACrBuQ,YAAa,EACb2C,WAAW,EACXnD,uBAAmBtf,EACnB4lB,cAAc,GAGlBjpB,KAAKkqB,2BAA6BlqB,KAAKkqB,2BAA2BgB,KAAKlrB,MACvEA,KAAK8J,kBAAmBC,EAAAA,EAAAA,oBAAmBtK,EAAMuD,QAAQC,QAAQ+G,kBAAoBvK,EAAMwK,aAAcxK,EAAMyK,UACnH,CAQOihB,sBAAsBC,EAA4CC,GACrE,OAAIrrB,KAAKY,QAAUyqB,GAAarrB,KAAKP,MAAM4B,OAAS+pB,EAAU/pB,IAIlE,CAEOP,SAAM,IAAAwqB,EAAAC,EACT,MACI1pB,QAAQ,UAAEF,EAAY,IAAI,UAC1BW,GACAtC,KAAKP,OACH,IAAEiW,GAAQ1V,KAAKY,MACf6E,EAA6B,QAAnB6lB,EAAAtrB,KAAKuhB,sBAAc,IAAA+J,GAAnBA,EAAqB7lB,QAAUzF,KAAKuhB,eAAe9b,aAAUpC,EACvE5D,EAAQO,KAAKP,MAGbkD,EAAsG,QAArFC,EAAAA,EAAAA,UAAS,CAAEC,QAASC,EAAAA,YAAYC,SAAUC,QAAShD,KAAKP,MAAMuD,QAAQC,UACvFuoB,EAAShqB,EAAAA,EAAA,GACPxB,KAAKP,OAAiD,IAC1DmB,MAAOZ,KAAKY,MACZ2gB,eAAgBvhB,KAAKuhB,eACrB7O,YAAa1S,KAAKY,MAAM2M,UACxBke,UAAW,CACP/pB,YAAa1B,KAAKP,MAClBkC,UAAWC,IAAW,eAAgBD,GACtCqhB,IAAK,OAETrgB,iBACA+oB,gBACInsB,IAAAA,cAAA,UAAQoC,UAAU,uBAAuBS,QAASpC,KAAKonB,eAAc,aAAc9kB,EAAUqpB,qBACxFrpB,EAAUqpB,qBAGnBC,eAAgB,CACZlqB,YAAa1B,KAAKP,MAClBujB,IAAK6I,EAAAA,MACLlqB,UAAW,uBACXjB,OAAQV,KAAKY,MAAM2M,UACnB,cAAcue,EAAAA,EAAAA,QAAOxpB,EAAUypB,mBAAuC,QAArBR,EAAEvrB,KAAKuhB,sBAAc,IAAAgK,GAAS,QAATA,EAAnBA,EAAqB9lB,eAAO,IAAA8lB,OAAA,EAA5BA,EAA8BtnB,MACjF+nB,OAAQhsB,KAAKkqB,2BACb+B,gBAAiB,CAAEC,QAAS,GAC5BC,gCAAiCnsB,KAAKY,MAAMqoB,cAEhDmD,qBAAsB,CAClBpJ,IAAKqJ,EAAAA,YACL1qB,UAAW,uBACXqqB,OAAQhsB,KAAKkqB,4BAEjBoC,qBAAsB,CAClBtJ,IAAKuJ,EAAAA,YACL5qB,UAAW,wBAEf6qB,mBAAoB,GACpBC,mBAAoB,CAChBzJ,IAAK0J,EAAAA,UACL/qB,UAAW,sBAEfgrB,mBAAoB,CAChBhrB,UAAW,qCAEfiW,0BAA2B,CACvBjW,UAAW,yBAEfkW,2BAA4B,CACxBlW,UAAW,+BAEfirB,iBAAkB5sB,KAAK8hB,uBAAuBrc,GAC9ConB,SAAU7sB,KAAKY,MAAMqoB,cACjB1pB,IAAAA,cAACutB,EAAAA,EAAO,CAACnrB,UAAU,8BAA8BorB,MAAOzqB,EAAU0qB,YAAa9a,KAAM+a,EAAAA,EAAYC,QAErGnoB,UAAW/E,KAAKqhB,mBAChBhf,MAAOrC,KAAKY,MAAMqoB,eAAgBnR,EAAAA,EAAAA,IAAsBrY,EAAOO,KAAKuhB,gBACpE7T,YAAa1N,KAAKY,MAAMqoB,eAAgBlR,EAAAA,EAAAA,IAA4BtY,EAAOO,KAAKuhB,gBAChFnJ,UAAWpY,KAAKY,MAAMqoB,cAChB5Q,EAAAA,EAAAA,GAA0B5Y,EAAOO,KAAKY,MAAOZ,KAAKqhB,mBAAoBrhB,KAAKuhB,eAAgBvhB,KAAKP,MAAMioB,yBACtGrkB,EACN6J,MAAOlN,KAAKY,MAAMqoB,eAAgB1Q,EAAAA,EAAAA,IAAsB9Y,EAAOO,KAAKY,OACpEsX,cAAelY,KAAKY,MAAMqoB,eAAgB9Q,EAAAA,EAAAA,IAA8B1Y,EAAOO,KAAKuhB,gBACpFxI,OACI/Y,KAAKY,MAAMqoB,eAAiBjpB,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOmX,aAAcC,EAAAA,EAAAA,IAAuBxZ,EAAOO,KAAKuhB,gBAC/G/I,UAAWxY,KAAKY,MAAMqoB,cAChBxQ,EAAAA,EAAAA,IACIhZ,EACAO,KAAKY,MACLZ,KAAKqhB,mBAtEc,GACA,IAwEnBrhB,KAAKuhB,qBAETle,EACNuW,WACI5Z,KAAKY,MAAMqoB,cAAgBjpB,KAAKP,MAAMoC,OAAOgY,kBAAoB7Z,KAAKY,MAAMkZ,uBACtEC,EAAAA,EAAAA,IAAoBta,EAAOO,KAAKY,MAAOZ,KAAKqhB,yBAC5Che,EACVkC,SAAUE,SAAAA,EAAS0P,gBAAa9R,EAAYrD,KAAKqqB,gBAAgBrqB,KAAKP,MAAOO,KAAKY,MAAOZ,KAAKqhB,oBAC9FlI,eAAgBnZ,KAAKY,MAAMqoB,eAAgB7P,EAAAA,EAAAA,IAAwB3Z,EAAOO,KAAKuhB,gBAC/E1I,cAAe7Y,KAAKY,MAAMqoB,cACpBnQ,EAAAA,EAAAA,IAA8BrZ,EAAOO,KAAKY,MAAOZ,KAAKqhB,mBAAoBrhB,KAAKuhB,qBAC/Ele,EACN2W,uBAAwBha,KAAKY,MAAMqoB,eAAgBhP,EAAAA,EAAAA,IAA0Bxa,EAAOO,KAAKY,OACzF8U,MACAyX,cAAentB,KAAKyiB,kBACpB2K,WAAYptB,KAAKmkB,sBAGrB,OAAOnkB,KAAKP,MAAMuC,WAAWwpB,EACjC,CAgHQ7C,kBAAkB0E,GAAuB,IAAAC,EAC7C,MAAM7nB,EAA6B,QAAtB6nB,EAAGttB,KAAKuhB,sBAAc,IAAA+L,OAAA,EAAnBA,EAAqB7nB,SAChCzF,KAAKY,MAAM+hB,mBAAZ,MAAiCld,GAAAA,EAAS8nB,iBAC1CvtB,KAAKK,SAAS,CACVsiB,kBAAmB,CAAC3iB,KAAKwtB,uBAAuB/nB,IAChD6f,WAAY+H,GAGxB,CAEQ1b,aAAaH,GAAiG,IAA7DwB,EAAA+H,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAkC/a,KAAKY,MAAMuS,iBAC9FnT,KAAKY,MAAMkZ,uBAAyBtI,IACpCA,EAASwJ,wBAA0BhI,GAEvChT,KAAKK,SAAS,CAAEkL,aAAciG,GAClC,CAmKQgR,eAAe/c,GAAkC,IAAAiH,EACrD,IAAKjH,IAAY8U,EAAAA,GAAiBC,UAC9B,MAAO,GAGX,IAAIiT,EAAa,GACjBA,GAAaC,EAAAA,EAAAA,uBAAsBjoB,EAAQxB,MAAQ,GAAIwB,EAAQ4Q,SAAUrW,KAAKP,MAAMuD,QAAQ6F,mBAAexF,GAE3G,MAAMsqB,EAAU,IAAIC,IAAIH,EAAYzkB,OAAOtB,SAAS6a,MAQpD,OAPkB,QAAlB7V,EAAAjH,EAAQI,kBAAU,IAAA6G,GAAlBA,EAAoBmC,KAAI9I,IAAY,IAAA8nB,EAChC,MAAMC,EAAyC,QAA3BD,EAAG9nB,EAAUC,sBAAc,IAAA6nB,OAAA,EAAxBA,EAA0B5nB,MACjD,IAAK8nB,EAAAA,iBAAiBC,mBAAmBF,GAAiB,CACtD,MAAMG,GAAgBC,EAAAA,EAAAA,6CAA4CnoB,EAAUyV,oBAC5EmS,EAAQQ,aAAaC,IAAIH,EAAeH,EAAiB,KAG1DH,EAAQpL,IACnB,CAUQvd,+BAA+BS,GACnC,MAAMuX,QAA4Chd,KAAKid,uCACjDC,QAAsCld,KAAKmd,iCAE3C1H,EAAczV,KAAKod,+BAA+BJ,EAAqCvX,GACvFiQ,EAAc1V,KAAKqd,+BACrBH,GAAiCF,EACjCvX,GAEJ,IAAIF,EAAmBvF,KAAKsd,aAAa7X,EAASuX,GAClDzX,EAAWgY,KAAK7H,IAAInQ,EAAUkQ,GAE9BzV,KAAKK,SAAS,CACVoV,MACAC,MACAnQ,YAER,CAEQ6X,+BAA+BJ,EAA8CvX,GAAsB,IAAA+X,EACvG,OACIR,GACAhd,KAAKyd,2BADLT,MAEAvX,GAAiB,QAAV+X,EAAP/X,EAASiY,gBAAQ,IAAAF,GAAjBA,EAAmBG,iBACnBlY,EAAQiY,SAASC,gBAAkB,EAE5BlY,EAAQiY,SAASC,gBAGrB,CACX,CAEQN,+BAA+BO,EAAyCnY,GAAsB,IAAAoY,EAClG,OACID,GACA5d,KAAKyd,2BADLG,MAEAnY,GAAiB,QAAVoY,EAAPpY,EAASiY,gBAAQ,IAAAG,GAAjBA,EAAmBC,iBACnBrY,EAAQiY,SAASI,gBAAkB,EAE5BrY,EAAQiY,SAASI,iBAGrBC,EAAAA,EAAAA,kCAAiC/d,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOmc,2BAC1E,CAOQP,0BAAuB,IAAAQ,EAAAC,EAC3B,MAAM9G,EAAoBpX,KAAKP,MAAM4B,KAAK+V,kBAC1C,QAAuD,QAAhD6G,EAAE7G,SAAyB,QAAR8G,EAAjB9G,EAAmB9V,cAAM,IAAA4c,OAAA,EAAzBA,EAA2BC,2BAAmB,IAAAF,GAAAA,EAC3D,CAEQX,aAAa7X,EAAwBuX,GAA4C,IAAAoB,EAAAC,EAAAC,EACrF,MAAM,SAAE/Y,GAAavF,KAAKY,MAC1B,IAAI2d,EAAkB,EAEtB,GAAIhZ,IAAagZ,IAAoBvB,EACjC,OAAOzX,EAGX,MAAM6R,EAAoBpX,KAAKP,MAAM4B,KAAK+V,kBAE1C,OAD2G,QAAjEgH,EAAGhH,SAAyB,QAARiH,EAAjBjH,EAAmB9V,cAAM,IAAA+c,OAAA,EAAzBA,EAA2BhH,2CAAmC,IAAA+G,GAAAA,GAKvG3Y,SAAiB,QAAV6Y,EAAP7Y,EAASiY,gBAAQ,IAAAY,GAAjBA,EAAmBE,iBAAmB/Y,EAAQiY,SAASc,gBAAkB,IACzED,EAAkB9Y,EAAQiY,SAASc,iBAGhCD,GAPIhZ,CAQf,CAEQ8f,8BAA8BF,EAAuB1f,GAAiC,IAAA4oB,EAC1F,MAAMC,EAAmF,QAA5DD,EAAGruB,KAAKP,MAAMoC,OAAO0sB,+CAAuC,IAAAF,GAAAA,EACzF,IAAIG,EAAgBrJ,QAAAA,EAAU,GAC9B,MAAMsJ,GACDlH,EAAAA,iBAAiBC,kBAAkB/hB,aAAO,EAAPA,EAASwW,mBAAqBsL,EAAAA,iBAAiBC,kBAAkB/hB,aAAO,EAAPA,EAAS8O,gBAC5Gma,EAASjpB,aAAO,EAAPA,EAASkpB,OAUxB,OATIL,GAA2BG,GAAoBC,IAC/CF,EAAgBA,EAAc1oB,QAAO9B,IAAO,IAAA4qB,EAExC,QAD8D,QAA5BA,EAAG5qB,EAAK6lB,4BAAoB,IAAA+E,OAAA,EAAzBA,EAA2B7E,6BAC5B,IAEnC9oB,EAAAA,gBAAgBC,YAAYstB,KAC7BA,EAAgBrJ,QAAAA,EAAU,KAG3BqJ,CACX,CA8BQxpB,6CAA0C,IAAAyZ,EAAAC,EAC9C,MAAMC,QAAwB3e,KAAKP,MAAM4B,KAAKwC,aAK9C,KAH6B8a,SAE5B,QAF2CF,EAAfE,EAAiB5a,MAC1CF,GAAgBA,EAAaI,OAASkT,EAAAA,YACzC,IAAAsH,OAAA,EAF4BA,EAE1Bva,WAEC,OAAO,EAMX,GAJ+Bya,SAE9B,QAF6CD,EAAfC,EAAiB5a,MAC5CF,GAAgBA,EAAaI,OAAS2a,EAAAA,YACzC,IAAAF,OAAA,EAF8BA,EAE5Bxa,UAEyB,CAAC,IAAD2a,EACxB,MAAMC,EAA4D,QAArBD,EAAG7e,KAAKP,MAAMuD,eAAO,IAAA6b,GAAS,QAATA,EAAlBA,EAAoB5b,eAAO,IAAA4b,GAAK,QAALA,EAA3BA,EAA6BvX,WAAG,IAAAuX,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCAC5F,GAAgD,SAA5CF,EACA,OAAO,EAGX,GAAgD,QAA5CA,EACA,OAAO,EAEX,IAAIG,EACJ,IACIA,QAAqBjf,KAAKP,MAAM4B,KAAKoD,mBAIxB,CAHf,MAAOoH,GAGL,OAFA7L,KAAKP,MAAMyK,UAAUgV,YAAYrT,GACjC7L,KAAKP,MAAMyK,UAAU6B,MAAM,0EACpB,CAAM,CAGjB,OACIkT,IAC8C,QAA5CH,GAAqDG,EAAaE,OACnB,QAA5CL,IAAsDG,EAAaE,MAAO,CAEhF,CAAC,IAADC,EACH,MAAMhI,QAA0BpX,KAAKP,MAAM4B,KAAK+V,kBAChD,QAA+C,QAAxCgI,EAAEhI,aAAiB,EAAjBA,EAAmB+G,2BAAmB,IAAAiB,GAAAA,EAAW,CAElE,CAEQpa,uCAAoC,IAAAsa,EACxC,MAAMX,QAAwB3e,KAAKP,MAAM4B,KAAKwC,aAExC0b,EAAoCZ,SAEzC,QAFwDW,EAAfX,EAAiB5a,MACvDF,GAAgBA,EAAaI,OAASub,EAAAA,YACzC,IAAAF,OAAA,EAFyCA,EAEvCpb,UAEH,OAAOqb,SAAAA,CACX,CAgCQuD,6BAA6BqD,EAAmB5W,EAA+BsT,GACnF,OAAOtjB,IAAAA,cAAAA,IAAAA,SAAA,KAAGS,KAAKkmB,iBAAiBC,EAAO5W,EAAesT,GAC1D,CAsEQ2K,uBAAuB/nB,GAC3B,MAAO,CACH8a,IAAK9a,EAAQ8nB,iBAAmB,GAChC9M,QAAShb,EAAQxB,KAEzB,CAgGQud,uBACJxhB,KAAKuE,WAAa,GAClBvE,KAAKK,SAAS,CACVkN,WAAW,EACXhI,SAAU,EACVkQ,SAAKpS,EACLqS,SAAKrS,EACLgK,WAAY,CACR3G,gBAAiB,CAAC,GAEtBpB,qBAAiBjC,EACjBkI,kBAAclI,EACdqO,4BAAwBrO,EACxBuP,qBAAqB,EACrBxN,8BAA0B/B,EAC1BiiB,gBAAYjiB,EACZ8f,iBAAa9f,EACbyiB,eAAWziB,EACXsf,kBAAmB,GACnBsG,cAAc,GAEtB,CA+DQlG,kBAAkBxT,GACtB,OACIhQ,IAAAA,cAAA,OAAKoC,UAAU,0BACXpC,IAAAA,cAAC6mB,EAAAA,GAAK,CACFvK,eAAgB7b,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eACjDla,UAAU,gCACV4e,IAAI,QACJjV,aAActL,KAAKP,MAAMuD,QAAQC,QAAQqI,aACzCiE,cAAeA,QAAAA,EAAiBvP,KAAKyhB,4BACrC4E,oBAAoB,UAIpC,EAEJ,yGExqCA,MAkDMwI,EAAoBrW,IACtB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAITue,EAA6BrW,IAC/B,MAAM,eAAE7I,EAAc,WAAEgf,EAAU,OAAEre,GAAWkI,EAE/C,OACIpZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAITwe,EAAwBpW,IAC1B,MAAM,eAAE/I,EAAc,WAAEgf,EAAU,OAAEre,GAAWoI,EAE/C,OACItZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAITye,EAAoB9W,IACtB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIugB,GAAiC,EAG/EC,EAAsBC,IACxB,GAAKA,GAAsC,IAAvBA,EAAYjpB,OAIhC,OAAO9G,EAAAA,cAAAA,EAAAA,SAAA,KAAG+vB,EAAY,GAAM,EAG1BF,EAA4BG,IAC9B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAEJkf,EACE,EAITC,EAAsBnX,IACxB,MAAM,eAAExI,EAAc,cAAExJ,EAAa,QAAE0J,EAAO,YAAEtC,EAAW,OAAE4C,EAAM,OAAEG,EAAM,MAAEE,EAAK,wBAAER,GAA4BmI,EAEhH,OACI/Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLxJ,EACA0J,EACAG,EACAzC,EACA4C,EACAG,EACAE,EACE,EAIT0Z,EAAmB9kB,IACrB,MAAM,eAAEuK,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,EAAK,OAAEna,GAAW/K,EAExE,OACIhG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAEJma,EACE,EAITiF,EAAqB9V,IACvB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EAITkF,EAA0BC,IAC5B,MAAM,eAAE9f,EAAc,OAAEQ,EAAM,MAAEma,GAAUmF,EAE1C,OACIrwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLQ,EACAma,EACE,EAGf,EAlK+ChrB,IAC3C,MAAM,YACFkY,EAAW,2BACXE,EAA0B,0BAC1BD,EAAyB,UACzBY,EAAS,mBACTG,EAAkB,cAClBE,EAAa,UACbT,EAAS,YACT1K,EAAW,YACX4K,EAAW,SACX/S,EAAQ,MACR2H,EAAK,MACL7K,EAAK,OACL0W,EAAM,eACNI,EAAc,gBACdE,EAAe,WACfO,EAAU,uBACVF,EAAsB,cACtBxB,EAAa,wBACbtB,GACAnX,EAEJ,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK0O,GACRpY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GAA6BpY,EAAMkX,cAC7CpX,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACLvV,EACA6K,EACAgL,EACAzY,EAAMuY,iBACNtK,EACAqL,EACAX,GAAa8W,EAAiB9W,GAC9BwB,GAAc8V,EAAkB9V,GAChCrU,GAAY8kB,EAAgB9kB,GAC5B4T,EACAX,GAAaqW,EAAiBrW,GAC9BF,GAAemX,EAAmBnX,GAClCK,GAAsBqW,EAA0BrW,GAChDE,GAAiBoW,EAAqBpW,GACtCwW,EAAmB5vB,EAAMoN,OAASpN,EAAMoN,MAAMyiB,aAC9C1Y,EACAyC,GAAmBsW,EAAuBtW,GAC1CK,GAA0BiW,EAAuBjW,IAEjD,6HCjDjB,MAsBM0V,EAA4BG,IAC9B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAEJkf,EACE,EAITM,EAAyBrwB,IAC3B,MAAM,eACFmsB,EAAc,qBACdQ,EAAoB,qBACpBE,EAAoB,mBACpBE,EAAkB,mBAClBC,EAAkB,cAClB5T,EAAa,UACbL,EAAS,mBACTmU,GACAltB,EAEJ,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK2iB,GACRrsB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKmjB,GAAuBI,GACjCjtB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKwjB,GAAqBsD,EAAmBtwB,IAClDF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqjB,GACN/sB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK0jB,GACLnU,GAtDKA,KACtB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EA+CmBoe,CAAiBrW,GAC9BK,GA5CSA,KAC1B,MAAM,eAAE/I,EAAc,WAAEgf,EAAU,OAAEre,GAAWoI,EAE/C,OACItZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAqCuBwe,CAAqBpW,KAG1C,EAoCXkX,EAAsBtwB,IACxB,MAAM,MACF4C,EAAK,MACL6K,EAAK,OACL6L,EAAM,WACNa,EAAU,SACVrU,EAAQ,UACR6S,EAAS,eACTe,EAAc,uBACda,EAAsB,iBACtB4S,EAAgB,QAChBC,EAAO,0BACPjV,EAAyB,2BACzBC,EAA0B,cAC1BsV,EAAa,cACbjV,GACAzY,EACJ,OAAIotB,EACOttB,EAAAA,cAAAA,EAAAA,SAAA,KAAGstB,GAGVttB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GACNtY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKkkB,KAEd5tB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACLvV,EACA6K,EACAgL,EACAa,EACAX,GApCSA,KACtB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIugB,GAAiC,EAiCvDF,CAAiB9W,GAC9BwB,GAhDUA,KACvB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EAyCgBiF,CAAkB9V,GAChCrU,GAhEO8kB,EAAC9kB,EAA2CyU,KAChE,MAAM,eAAElK,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,EAAK,OAAEna,GAAW/K,EAExE,OACIhG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAEJma,EACAzQ,EACE,EAqDcqQ,CAAgB9kB,EAAUyU,GACtC4S,EACAzT,GAEN,EASE6W,EAA+DvwB,IACxE,MAAM,UAAEgsB,EAAS,gBAAEC,EAAe,YAAEhZ,EAAW,eAAE/P,GAAmBlD,EACpE,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKwiB,IACN9oB,GAAkB+oB,EACnBhZ,GAAeod,EAAsBrwB,GACjC,EAIjB,k7BClBA,IAAMwwB,EAAN,cAAuB1wB,EAAAA,cAAvBC,cAAA,IAAA0wB,EAAA,2BAiEW,KAAAtvB,MAAwB,CAC3BR,aAAc,GACd+vB,oBAAoB,EACpBC,qBAAqB,EACrBC,qBAAqB,GAGR,KAAAvmB,kBAAsCC,EAAAA,EAAAA,oBACnD/J,KAAKP,MAAMuD,QAAQC,QAAQ+G,kBAC3BhK,KAAKP,MAAMwK,aACXjK,KAAKP,MAAMyK,WAGE,KAAAomB,iBAAiD/wB,EAAAA,YAid3D,KAAAgxB,4BAA+BzJ,GACjC9mB,KAAKP,MAAMoC,OAAO2uB,gBAAiBjtB,KAAOujB,EAAM2J,OAAOxZ,MAM3C,KAAApJ,UAAY,KACjB7N,KAAK0wB,YAAkC,YAApB1wB,KAAK0wB,YAA4B1wB,KAAK2wB,cAAgB3wB,KAAKY,MAAMuvB,mBAQ/E,KAAAS,aAAgBvgB,IAC7B,MAAM,MAAExD,GAAU7M,KAAKP,MACvB,OAAOoN,GAASA,EAAMwD,IAAQxD,EAAMwD,GAAKhK,OAAS,EAAIwG,EAAMwD,QAAOhN,CAAS,EAM/D,KAAAwtB,6BAA+B7rB,UAA0B,IAAA8rB,EACtE9wB,KAAKK,SAAS,CAAE+vB,qBAAqB,UAEA,QAArCU,EAAM9wB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwvB,OAAA,EAA/BA,EAAiCE,yCAAyC,CAC5EC,uCAAwCjxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAO4vB,qCAC1E,EAOW,KAAAC,aAAensB,UAA0B,IAAAosB,EACtD,MACI9uB,WAAW,+BAAE+uB,GACbruB,SAAS,cACL6F,EACAvB,KACIzF,QAAQ,iBAAE0M,GAAmB,KAGrC1B,OAAO,kBAAEykB,GACTjwB,MAAM,SAAE0vB,EAAQ,SAAEQ,IAClBvxB,KAAKP,MAMT,GAJAO,KAAKP,MAAMyK,UAAUgV,YAAY,oCACjClf,KAAKK,SAAS,CAAEgwB,qBAAqB,IAID,QAAhCe,EAACpxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA8vB,GAA/BA,EAAiCI,aAAaC,iBAC/CljB,UACOvO,KAAK0xB,yBAAyBX,GAAUS,aAAarsB,WAAYosB,GAMrE,CAAC,IAADI,EAAAC,EAAAC,EACH,MAAMC,EAAuBR,GAAqBA,EAAkBjrB,OAAS,EAEvE0rB,QAA2B/xB,KAAKgyB,4BAA0D,QAA/BL,EAAA3xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAqwB,OAAA,EAA/BA,EAAiCM,qBAAsB,UAElHC,EAAAA,EAAAA,GACFrpB,EACA7I,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OACzBtB,KAAKP,MAAM4B,KAAKkwB,SAASjwB,QACxBwwB,EACDC,EAC+B,QADbH,EAClB5xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAswB,OAAA,EAA/BA,EAAiCO,kCACnCvmB,OAAMC,IACJ7L,KAAKoyB,oBAAoBvmB,EAAM,UAGd,QAArBgmB,EAAMd,EAASzvB,cAAM,IAAAuwB,OAAA,EAAfA,EAAiBQ,qCAAqC,CAAEC,mCAAmC,IAAQ,MApBzGtyB,KAAKK,SAAS,CACVD,aAAcixB,IAElBrxB,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAMwlB,EAiBsE,EAShG,KAAAW,2BAA6BhtB,UAAqE,IAAAutB,EAAAC,EAAAC,EAC/G,MAAMC,EAA0D,QAArCH,EAAGvyB,KAAKP,MAAMuD,QAAQC,QAAQ+J,eAAO,IAAAulB,OAAA,EAAlCA,EAAoCI,sBAElE,IAAIC,EAEJ,MAAMC,EAA6C,QAA3BL,EAAGxyB,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAyB,GAAQ,QAARA,EAAxBA,EAA0BlxB,cAAM,IAAAkxB,OAAA,EAAhCA,EAAkCK,mBAEsC,IAADC,EAA9FD,GAAsB7yB,KAAKP,MAAMoC,OAAOkxB,uDACxCH,EAA2D,QAA3BE,EAAG9yB,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA+B,GAAQ,QAARA,EAAxBA,EAA0BxxB,cAAM,IAAAwxB,OAAA,EAAhCA,EAAkCE,iBAGzE,MAAMC,EAAwD,QAAlCR,EAAGzyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAmxB,GAA6B,QAA7BA,EAA/BA,EAAiCjB,aAAarsB,KAAK+tB,iBAAS,IAAAT,OAAA,EAA5DA,EAA8D3sB,QACzFqtB,GAAYA,EAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,cAAuB+qB,EAAS/qB,eAAiBsqB,IAGnG,IAAIX,EACJ,GAAIkB,GAA0BA,EAAuB5sB,OAAS,EAAG,CAC7D,MAAM+sB,EAA0DH,EAAuBpkB,KAAIwkB,IAChF,CACHC,OAAQD,EAAKC,OACbC,sBAAuB,CACnBC,eAAgBd,EAChBe,4BAA6BC,EAAAA,uBAAuBC,mBACpDC,+BAAgCC,EAChCC,gBAAiBjB,EAAqBD,OAAmCvvB,aAK/E0wB,EAAAA,EAAAA,uCACF,CAAElL,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,sBAC7B7I,KAAKP,MAAM4B,KAAK0vB,UAAUS,aAAarsB,KAAK6uB,GACnDZ,GAECzrB,MAAKssB,IACFlC,EAAqBkC,EAAYC,OAAO,IAE3CtoB,OAAMC,IAEH,MADA7L,KAAKP,MAAMuD,QAAQ6F,cAAcqB,UAAU4B,UAAUD,GAC/C,IAAIsoB,MAAM,qGAAqG,GACtH,CAGX,OAAOpC,CAAkB,EASZ,KAAAL,kBAAoB1sB,MAAOG,EAAYosB,KAA+C,IAAA6C,EACnG,IAAI1C,GAAoB,EACxB,MAAMgB,EAA0D,QAArC0B,EAAGp0B,KAAKP,MAAMuD,QAAQC,QAAQ+J,eAAO,IAAAonB,OAAA,EAAlCA,EAAoCzB,sBA4ClE,aA1CM0B,EAAAA,EAAAA,mCACF,IAAIC,EAAAA,sCAAsCt0B,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eAAeZ,aAC1Fjb,KAAKP,MAAMuD,QAAQ6F,eAElBlB,MAAK4sB,IAA8B,IAAAC,EAAAC,EAChC,MAAMC,EAAsE,GAE9D,QAAdF,EAAArvB,EAAK+tB,iBAAS,IAAAsB,GAAdA,EAAgB3lB,KAAI8lB,IAAW,IAAAC,EAC3B,MAAMC,EAAkBtD,EAASxtB,MAAK0B,GAAWA,EAAQ4Q,WAAase,EAASG,YAGzEC,EAAgBF,SAAyB,QAAVD,EAAfC,EAAiBnX,gBAAQ,IAAAkX,OAAA,EAAzBA,EAA2BI,iBAC3CC,KACFN,EAASvsB,cAA0C,KAA1BusB,EAASvsB,eAAsBusB,EAASvsB,eAAiBsqB,EAEtF,MADkCqC,GAAiBE,IAClBh0B,EAAAA,gBAAgBC,YAAYqzB,GAA8B,CACvF,MAAMW,EAA2BX,EAA4BxwB,MAAKoxB,IAAmB,IAAAC,EACjF,OAAgD,QAAzCA,EAAAD,EAAiBntB,gCAAwB,IAAAotB,OAAA,EAAzCA,EAA2CN,aAAeH,EAASG,SAAS,IAEnFI,GACAR,EAAoCzlB,KAAKimB,EAAyB,KAK9E,MAAMG,GAA+BC,EAAAA,EAAAA,4BACnB,QAD6Cb,EAC3DtvB,EAAK+tB,iBAAS,IAAAuB,EAAAA,EAAI,GAClBC,EACA10B,KAAKP,MAAMuD,QAAQ6F,cACnB0oB,EACAmB,GAKJ,OADAhB,GAAqB2D,EAA6BE,QAC3C7D,CAAiB,IAE3B9lB,OAAMC,IAEH,MADA7L,KAAKP,MAAMuD,QAAQ6F,cAAcqB,UAAU4B,UAAUD,GAC/C,IAAIsoB,MAAM,iGAAiG,IAGlHzC,CAAiB,EAOX,KAAA8D,2BAA6B,KAC1C,MAAM,SAAEC,EAAQ,UAAEC,GAAc11B,KAAKP,MAAMk2B,YAC3C,OAAOF,EACF5mB,IAAI6mB,GACJ5vB,QAAQlF,KAA0CA,IAAUA,EAAMg1B,YAAch1B,EAAMi1B,gBAAe,EAM7F,KAAAC,iBAAmB,KAChC91B,KAAKP,MAAMyK,UAAUgV,YAAY,wCAEjClf,KAAKw1B,6BAA6BO,SAAQn1B,IACtCA,EAAMo1B,SAAWp1B,EAAMk1B,kBAAoBl1B,EAAMk1B,kBAAkB,GACrE,EAOW,KAAAG,mBAAsBC,IACnC,MAAMC,EAAeC,EAAAA,GAAoB,OAAQp2B,KAAKP,MAAMuD,QAAQ6F,gBAAkB,GAClFG,QAAUmtB,EACVntB,OAAOtB,SAASuB,OAAOktB,IAEvBn2B,KAAKK,SAAS,CACVD,aAAcJ,KAAKP,MAAM6C,UAAU+zB,sBAEvCr2B,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAMqqB,GAA6B,EAQvD,KAAAI,oBAAsB,WAAgC,IAA/BC,IAAAxb,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,KAAAA,UAAA,GACpC,MAAMmb,EAA8B,0DAC9B/wB,EAAO+qB,EAAKzwB,MAAM4B,KAAK0vB,SAASzvB,OAAQkwB,aAAarsB,MACrD,GAAE6uB,EAAE,QAAEE,GAAY/uB,EACpB+qB,EAAKsG,gCACDtC,GAAWF,GACXyC,EAAAA,EAAAA,0BAAyB,CAAE5N,cAAeqH,EAAKzwB,MAAMuD,QAAQ6F,cAAe6tB,YAAa,QAAU1C,EAAIE,GAClGvsB,MAAMrG,IAAqC,IAAAq1B,EACa,KAAb,QAApCA,EAAAr1B,EAAOs1B,qCAA6B,IAAAD,OAAA,EAApCA,EAAsCtwB,QACtC6pB,EAAK+F,mBAAmBC,GAExBhG,EAAK7vB,SAAS,CAAE8vB,oBAAoB,GAAQ,IAGnDvkB,OAAMC,IAGH,GAFAqkB,EAAKzwB,MAAMyK,UAAU2sB,QAAQhrB,GAC7BqkB,EAAKzwB,MAAMyK,UAAU6B,MAAM,2BACvBwqB,GAAwB,2DAAf1qB,EAAMirB,KAAmE,CAAC,IAADC,EAClF,MAAM3O,EAA2C,QAAlC2O,EAAG7G,EAAKzwB,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAy1B,OAAA,EAA/BA,EAAiCvF,aACnDpJ,SAAAA,EACM4O,YAAY,CAAC,GACdrvB,MAAK,KACFuoB,EAAKoG,qBAAoB,EAAM,IAElC1qB,OAAOqrB,IACJ/G,EAAKzwB,MAAMyK,UAAU2sB,QAAQI,EAAajrB,SAC1CkkB,EAAKzwB,MAAMyK,UAAU6B,MAAM,yBAAyB,GACrD,MAEPmkB,EAAK+F,mBAAmBC,EAA6B,IAIjEhG,EAAK+F,mBAAmBC,GAG5BhG,EAAK7vB,SAAS,CAAE8vB,oBAAoB,GAE5C,EAGiB,KAAA+G,iBAAoB92B,IACjCJ,KAAKP,MAAMyK,UAAU2B,MAAMzL,GAC3BJ,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKP,MAAMk2B,YAAYyB,aACvBp3B,KAAKK,SAAS,CACVD,gBACF,EAGW,KAAAo2B,8BAAgC,KAAc,IAAA/X,EAAAC,EAAAY,EAC3D,MAAMX,EAAkB3e,KAAKP,MAAM4B,KAAKwC,aAAavC,OAMrD,IAJIqd,SAEC,QAFcF,EAAfE,EAAiB5a,MACbF,GAAsC,wEAAtBA,EAAaI,cAChC,IAAAwa,OAAA,EAFDA,EAEGva,aAAa,EAGhB,OAAO,EAOX,MAHIya,SAA8H,QAA/GD,EAAfC,EAAiB5a,MAAKF,GAAsC,oEAAtBA,EAAaI,cAA2E,IAAAya,OAAA,EAA9HA,EACMxa,aAAa,GAGnB,OAAO,EAOX,GAJ+Bya,SAE9B,QAF6CW,EAAfX,EAAiB5a,MAC5CF,GAAsC,mDAAtBA,EAAaI,cAChC,IAAAqb,OAAA,EAF8BA,EAE5Bpb,UAEyB,CAAC,IAAD2a,EACxB,MAAMC,EAA4D,QAArBD,EAAG7e,KAAKP,MAAMuD,eAAO,IAAA6b,GAAS,QAATA,EAAlBA,EAAoB5b,eAAO,IAAA4b,GAAK,QAALA,EAA3BA,EAA6BvX,WAAG,IAAAuX,GAAU,QAAVA,EAAhCA,EAAkCE,gBAAQ,IAAAF,OAAA,EAA1CA,EAA4CG,iCACtFC,EAAejf,KAAKP,MAAM4B,KAAKoD,oBAAoBnD,OACnD+1B,GAAYC,EAAAA,EAAAA,IAAiBt3B,KAAKP,MAAMuD,QAAQ6F,cAAcgT,gBAE9D0b,EAC0C,QAA5CzY,GACCG,IACiD,QAA5CH,GAAqDuY,GACN,QAA5CvY,IAAsDuY,GAEnE,OAAOE,SAAAA,CAA2D,CAC/D,CAAC,IAAD9gB,EAAA2I,EACH,MAAMhI,EAAqD,QAApCX,EAAGzW,KAAKP,MAAM4B,KAAK+V,yBAAiB,IAAAX,OAAA,EAAjCA,EAAmCnV,OAC7D,QAA+C,QAAxC8d,EAAEhI,aAAiB,EAAjBA,EAAmB+G,2BAAmB,IAAAiB,GAAAA,EAAW,GAQjD,KAAAoY,+BAAiCxyB,UAC9C,MAAMyyB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAG/C,GAAIm2B,GAAiBC,GAAwBA,EAAqBC,IAAK,CACnE,MAAMC,EAAmB53B,KAAK63B,oCAAoCH,SAE5DD,EAAcK,wCAAwC,CAAEC,qCAAsCH,UAC9FH,EAAcO,yCAAyC,CAAEC,sCAAuCL,GAAW,GASxG,KAAAC,oCAAuCH,IAC3B,CACrBQ,uBAAwBR,EAAqBS,QAC7Cl0B,KAAMyzB,EAAqBU,WAC3BC,OAAQX,EAAqBY,SAC7BC,aAAcb,EAAqBc,SACnCC,KAAMf,EAAqBe,KAC3BC,MAAOhB,EAAqBgB,MAC5BC,QAASjB,EAAqBC,IAC9BiB,MAAOlB,EAAqBkB,QAWnB,KAAAxG,oBAAuBvmB,IAEpC,MACIvJ,WAAW,oBACP+zB,EAAmB,+BACnBwC,EAA8B,2CAC9BC,EAA0C,+BAC1CC,EAA8B,sCAC9BC,GAEJh2B,SAAS,cAAE6F,IACX7I,KAAKP,MACHw5B,EAAiBj5B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC1C43B,EAAWrtB,GAASA,EAAMG,QAChC,GAA0B,OAAtBH,aAAK,EAALA,EAAOstB,YAAoB,CAC3B,MAAM/4B,EAAe24B,EAMrB,OALA/4B,KAAKK,SAAS,CACVD,iBAEJJ,KAAKP,MAAMyK,UAAU4B,UAAUD,QAC/B7L,KAAKK,SAAS,CAAE+vB,qBAAqB,GAC9B,CAEX,GAAI6I,GAAkBA,EAAeG,0CAA2C,CAC5E,MAAMC,EAAYxtB,GAASA,EAAMirB,KAAOjrB,EAAMirB,KAAO,IAErDwC,EAAAA,EAAAA,IAAkBD,EAAWr5B,KAAKP,MAAM6C,YAAa22B,EAAeM,yBAA0B1wB,EAAeqwB,EAAU,KACpH,CAAC,IAADM,EAAAC,EAAAC,EACH,IAAIt5B,EAAei2B,EAoBnB,GAnBAr2B,KAAKK,SAAS,CAAEgwB,qBAAqB,IAEjCxkB,GAAwB,2DAAfA,EAAMirB,KACf12B,EAAey4B,EAERhtB,GAAwB,uEAAfA,EAAMirB,KACtB12B,EAAe04B,EACRjtB,GAAwB,uFAAfA,EAAMirB,KAEtB12B,EAAe84B,GAAY7C,EAEX,YAAZxqB,EAAMjE,QAAoD,wBAAZiE,EAAMjE,SACpDxH,EAAe64B,SAAAA,EAAgBzH,aAAaC,eACtCuH,EACAD,GAMqB,QAA/BS,EAAAx5B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAk4B,GAA/BA,EAAiCG,gDACvB,QADqEF,EAC/E5tB,EAAMxK,YAAI,IAAAo4B,GAAVA,EAAYG,oBACoB,QAAhCF,EAAC15B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAo4B,IAA/BA,EAAiCvH,kCAElC,OAGJnyB,KAAKK,SAAS,CACVD,iBAEJJ,KAAKP,MAAMyK,UAAU4B,UAAUD,EAAO,EAGlD,CAt8BkB6kB,iBAAU,IAAAmJ,EACpB,OAA+B,QAA/BA,EAAO75B,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA8I,OAAA,EAAxBA,EAA0BjyB,MACrC,CAEc+oB,kBAAW,IAAAmJ,EACrB,GAAI95B,KAAK+5B,gBAEL,OAAO,EAEX,MAAM50B,EAA+B,QAA3B20B,EAAG95B,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA+I,GAAQ,QAARA,EAAxBA,EAA0Bx4B,cAAM,IAAAw4B,GAAc,QAAdA,EAAhCA,EAAkCtI,oBAAY,IAAAsI,OAAA,EAA9CA,EAAgD30B,KAC7D,QAA2B,YAApBnF,KAAK0wB,aAA8BvrB,GAAS60B,IAAQ70B,IAAWA,EAAK+tB,WAAuC,IAA1B/tB,EAAK+tB,UAAU7sB,OAC3G,CAEc4zB,eAAQ,IAAAC,EAClB,MAAM/0B,EAA+B,QAA3B+0B,EAAGl6B,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAmJ,GAAQ,QAARA,EAAxBA,EAA0B54B,cAAM,IAAA44B,GAAc,QAAdA,EAAhCA,EAAkC1I,oBAAY,IAAA0I,OAAA,EAA9CA,EAAgD/0B,KAC7D,MAA2B,WAApBnF,KAAK0wB,YAAgD,YAApB1wB,KAAK0wB,cAA8BvrB,GAAQ60B,IAAQ70B,GAC/F,CAEc40B,sBACV,OAAO/5B,KAAKP,MAAMuD,QAAQC,QAAQsmB,OAAO4Q,QAC7C,CAEcC,oBAAa,IAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACvB,MAAMC,EAA8B16B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,SAAyC,QAAnC+4B,EAAIr6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA+4B,OAAA,EAA/BA,EAAiCK,6BAElGf,EAC6E,QAD/BW,EACjB,QADiBC,EAChDv6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAi5B,OAAA,EAA/BA,EAAiCZ,sDAA8C,IAAAW,GAAAA,EAE7EK,EAAgBvE,EAAAA,GAAsBp2B,KAAKP,MAAMuD,QAAQC,WAAajD,KAAK46B,2BAGjF,OACI56B,KAAKP,MAAMk2B,YAAYK,eACU3yB,IAAhCq3B,GAA6CA,GAA+Bf,KAChD,KAA5B35B,KAAKY,MAAMR,cACRu5B,GACkE,QADpBa,EACd,QADcC,EAC7Cz6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAm5B,OAAA,EAA/BA,EAAiCtI,wCAAgC,IAAAqI,GAAAA,MACpEb,GAAkDgB,EAE5D,CAEcC,iCAA0B,IAAAC,EAAAC,EAAAC,EAAAC,EACpC,MAAMC,EAA0E,QAAjEJ,EAAkC,QAAlCC,EAAG96B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAw5B,OAAA,EAA/BA,EAAiCtJ,aAAarsB,KAAK+1B,mBAAW,IAAAL,EAAAA,EAAI,EAGpF,OAFoF,QAAzDE,EAAkC,QAAlCC,EAAGh7B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA05B,OAAA,EAA/BA,EAAiCG,6BAAqB,IAAAJ,EAAAA,EAAI,KAEvDE,CACrC,CAEcG,kBAAW,IAAAC,EACrB,QACqC,QAAhCA,EAACr7B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA+5B,GAAc,QAAdA,EAA/BA,EAAiC7J,oBAAY,IAAA6J,IAA7CA,EAA+Cl2B,OACF,YAA/CnF,KAAKP,MAAM4B,KAAKoD,oBAAoBmD,QACI,YAAxC5H,KAAKP,MAAM4B,KAAKwC,aAAa+D,MAErC,CAEW0zB,wCAAiC,IAAAC,EAAAC,EACxC,MAAMC,EAGmB,QAHTF,EACY,QADZC,EACZx7B,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAyK,GAAQ,QAARA,EAAxBA,EAA0Bl6B,cAAM,IAAAk6B,GAAc,QAAdA,EAAhCA,EAAkChK,oBAAY,IAAAgK,GAAM,QAANA,EAA9CA,EAAgDr2B,YAAI,IAAAq2B,GAAqB,QAArBA,EAApDA,EAAsD7f,2BAAmB,IAAA6f,GAExE,QAFwEA,EAAzEA,EAA2Ez3B,MACvE23B,GAA6B,0BAAjBA,EAASC,aACxB,IAAAH,GAAO,QAAPA,EAFDA,EAEGv1B,aAAK,IAAAu1B,OAAA,EAFRA,EAEUI,mBAAW,IAAAL,EAAAA,EAAI,GAC7B,OAAOE,EAAc5W,KAAKgX,MAAMJ,GAAyC,IAC7E,CAiBOK,oBACH,MACIx5B,WAAW,oBAAE+zB,IACbr2B,KAAKP,OAETs8B,EAAAA,EAAAA,KACI,IAAM/7B,KAAKg8B,oBAAsBC,EAAAA,sBAAsBC,UACvDl3B,UACI,GAAIhF,KAAKs7B,kCAAmC,CAAC,IAADa,EAAAC,EACxC,MAAM,MACFC,EAAK,WACLC,EAAU,qBACV5E,EACA6E,kBAAmBC,EAA6B,mCAChDC,EAAkC,kCAClCC,EAAiC,wBACjCC,EAAuB,QACvB/E,GACA53B,KAAKs7B,kCAY0C,IAADsB,EAAAC,EAAlD,GAV+B,QAA/BV,EAAAn8B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA66B,GAA/BA,EAAiCW,6BAA6B,CAC1DC,mCAAoCV,QAAAA,EAAS,GAC7CW,cAAeV,EACfW,wBAAyBvF,EACzBwF,qBAAsBV,EACtBW,4BAA6BV,EAC7BW,2BAA4BV,EAC5BW,2BAA4BV,IAG5BD,GAAqC9E,EACN,QAA/BgF,EAAA58B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAs7B,GAA/BA,EAAiC9E,wCAAwC,CACrEC,qCAAsCH,IAEX,QAA/BiF,EAAA78B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAu7B,GAA/BA,EAAiC7E,yCAAyC,CACtEC,sCAAuCL,SAGtC53B,KAAKw3B,+BAA+BE,GAGd,QAA/B0E,EAAAp8B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA86B,GAA/BA,EAAiC5K,aAAa8L,0BAA0B,CACpEC,uBAAwB,CACpB,CACI5B,IAAK,wBACL11B,MAAO,CAAE21B,YAAa,OAG/B,MAKfG,EAAAA,EAAAA,KACI,IAAM/7B,KAAKi6B,WACX,KACIj6B,KAAKK,SAAS,CACVD,aAAci2B,IAElBr2B,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,qBAAqB,KAIhEkwB,EAAAA,EAAAA,KACI,IACW/7B,KAAK2wB,cAEhB,KACI3wB,KAAKi2B,mBAAmB,2CAA2C,KAI3E8F,EAAAA,EAAAA,KACI,IAAM/7B,KAAKo7B,cACX,KACIp7B,KAAKs2B,qBAAqB,KAIlCkH,EAAAA,EAAAA,KACI,IAAMx9B,KAAKP,MAAMk2B,YAAYK,UAC7B,KACIh2B,KAAK81B,kBAAkB,KAK/B0H,EAAAA,EAAAA,KACI,SAAAC,EAAA,OAAqC,QAArCA,EAAMz9B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAm8B,OAAA,EAA/BA,EAAiCC,8BAA8B,IACrE14B,UAAgB,IAAA24B,EAAAC,EAAAC,EAAAC,EAEuB,QAA/BH,EAAA39B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAq8B,IAA/BA,EAAiChE,iDACjC3D,GACgC,QAAhC4H,EAAC59B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAs8B,GAA/BA,EAAiCG,2BACD,QAAhCF,EAAC79B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAu8B,GAA/BA,EAAiCtE,2BACA,QADwBuE,EACvD99B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAw8B,IAA/BA,EAAiC3L,oCAEhCnyB,KAAKY,MAAMwvB,qBACZpwB,KAAKK,SAAS,CAAE+vB,qBAAqB,IAGzCpwB,KAAKP,MAAMyK,UAAUgV,YACjB,+GAGElf,KAAKmxB,eAGNnxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAO08B,+BACjCh+B,KAAKK,SAAS,CAAE+vB,qBAAqB,IAAQ,KAO7DoN,EAAAA,EAAAA,KACI,SAAAS,EAAA,OAAqC,QAArCA,EAAMj+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA28B,OAAA,EAA/BA,EAAiCC,iCAAiC,IACxEjE,IAAW,IAAAkE,EAC4B,QAA/BA,EAAAn+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA68B,GAA/BA,EAAiCxE,gDAAkDM,GACnFj6B,KAAKK,SAAS,CAAE+vB,qBAAqB,IAErCpwB,KAAKP,MAAMyK,UAAUgV,YACjB,6HAGJlf,KAAKP,MAAMyK,UAAUgV,YACjB,qGACF,KAKdse,EAAAA,EAAAA,KACI,SAAAY,EAAA,OAAqC,QAArCA,EAAMp+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA88B,OAAA,EAA/BA,EAAiCC,wBAAwB,IAC/DpE,IAAW,IAAAqE,EAC0FC,EAA9D,QAA/BD,EAAAt+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAg9B,GAA/BA,EAAiC3E,gDAAkDM,GACnFj6B,KAAKK,SAAS,CAAE+vB,qBAAqB,IAEN,QAA/BmO,EAAAv+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAi9B,GAA/BA,EAAiCC,+BAA+B,CAAEC,6BAA6B,IAE/Fz+B,KAAKP,MAAMyK,UAAUgV,YACjB,oHAGJlf,KAAKP,MAAMyK,UAAUgV,YACjB,4FACF,KAMdse,EAAAA,EAAAA,KACI,IAAMx9B,KAAKo6B,gBACXp1B,UAAW,IAAA05B,EACoGC,EAAxE,QAA/BD,EAAA1+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAo9B,GAA/BA,EAAiC/E,gDAAkD35B,KAAKo6B,cACrD,QAAnCuE,EAAI3+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAq9B,GAA/BA,EAAiCxM,wCAC3BnyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOs9B,uCAAuC,CACzEC,qCAAqC,IAGzC7+B,KAAKP,MAAMyK,UAAUgV,YACjB,6HAGJlf,KAAKP,MAAMyK,UAAUgV,YACjB,4HAEJlf,KAAKP,MAAMyK,UAAUgV,YACjB,mBAAmBkX,EAAAA,GAAsBp2B,KAAKP,MAAMuD,QAAQC,iCACxDjD,KAAKo6B,mBAKjBp6B,KAAKP,MAAMyK,UAAUgV,YAAY,iFAAkF,KAM/Hse,EAAAA,EAAAA,KACI,SAAAsB,EAAA,OAAqC,QAArCA,EAAM9+B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAw9B,OAAA,EAA/BA,EAAiCC,aAAa,IACpDA,IAAgB,IAAAC,EACZ,MAAMC,GAAiCF,aAAa,EAAbA,EAAeG,iBAAkBC,EAAAA,cAAclP,SAEhFmP,GACFL,aAAa,EAAbA,EAAe1F,aAAcgG,EAAAA,UAAUC,6DACjCP,EAAcG,gBAAkBC,EAAAA,cAAcI,0BAC9CN,EAEyB,QAA/BD,EAAAh/B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA09B,GAA/BA,EAAiC5F,2CACjC2F,GACAA,EAAc3+B,eACb6+B,GAAgDG,IAEjDp/B,KAAKk3B,iBAAiB6H,EAAc3+B,aAAc,GAIlE,CAEOo/B,qBAAkB,IAAAC,EAAAC,EAEc,QAA/BD,EAAAz/B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAm+B,GAA/BA,EAAiCrG,2CACF,QAD2CsG,EAC1E1/B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAo+B,GAA/BA,EAAiCC,4BACjC3/B,KAAKY,MAAMR,eAEXw/B,EAAAA,EAAAA,IAAqB5/B,KAAKswB,iBAAkBtwB,KAAKP,MAAMuD,QAAQ6F,cAEvE,CAGO/H,SAAM,IAAA++B,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EACT,MAAM,YACFjL,EACA9zB,QAAQ,UAAEF,EAAS,gBAAE6uB,EAAe,0BAAEqQ,GAA2B,UACjEv+B,EACAU,SACIC,SACI69B,MAAM,gBAAEC,MAGhB/gC,KAAKP,OACH,aAAEW,GAAiBJ,KAAKY,OACxB,eAAEogC,EAAc,eAAEC,EAAc,mBAAEC,EAAkB,6BAAEC,EAA4B,oBAAE9K,GAAwB/zB,EAC5G8+B,EAAgBx/B,IAAW,cAAeD,GAC1C0/B,EAAyBrhC,KAAK4wB,aAAa,uBAG3C0Q,EAAsBD,aAAsB,EAAtBA,EAAwBv7B,QAAOy7B,KAASA,SAAAA,EAAMlxB,IAAImxB,SAAS,sBAGjFC,EAAkCJ,aAAsB,EAAtBA,EAAwBt9B,MAAKw9B,GAAQA,aAAI,EAAJA,EAAMlxB,IAAImxB,SAAS,qBAE1FE,EACF1hC,KAAKP,MAAMuD,QAAQC,SACnBjD,KAAKP,MAAMuD,QAAQC,QAAQ0+B,SAC3B3hC,KAAKP,MAAMuD,QAAQC,QAAQ0+B,QAAQD,gBACnC1hC,KAAKP,MAAMuD,QAAQC,QAAQ0+B,QAAQD,iBAEjC9+B,EACF5C,KAAKP,MAAMuD,QAAQC,SACnBjD,KAAKP,MAAMuD,QAAQC,QAAQ2+B,QACgC,WAA1D5hC,KAAKP,MAAMuD,QAAQC,QAAQ2+B,OAAOC,KAEjCC,EAAoB1L,EAAAA,GAAoB,OAAQp2B,KAAKP,MAAMuD,QAAQ6F,gBAAkB,GACrFstB,EAAeC,EAAAA,GAAoB,OAAQp2B,KAAKP,MAAMuD,QAAQ6F,gBAAkB,GAEhFk5B,EACF/hC,KAAKP,MAAMoN,MAAMk1B,oBAAsB/hC,KAAKP,MAAMoN,MAAMk1B,mBAAmB17B,OAAS,GAAKrG,KAAKP,MAAMoN,MAAMk1B,mBAAmB,GAE3HhgB,GAAUC,EAAAA,EAAAA,kBAAiB,QAAShiB,KAAK8J,iBAAkBmY,EAAAA,kBAAkB+f,gBAC7EC,GAA2B7f,EAAAA,EAAAA,wBAAuBpiB,KAAK8J,iBAAkBiY,GAEzE0P,EAAiBzxB,KAAKP,MAAM4B,KAAK0vB,WAA2C,QAAnC8O,EAAI7/B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAu+B,OAAA,EAA/BA,EAAiCrO,aAAaC,gBAC3FyQ,EAAkBzQ,EAAiByP,EAAqBD,EAGxDtH,EAC8E,QADhCmG,EACxB,QADwBC,EAChD//B,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAgP,GAAQ,QAARA,EAAxBA,EAA0Bz+B,cAAM,IAAAy+B,OAAA,EAAhCA,EAAkCpG,sDAA8C,IAAAmG,GAAAA,EAG9EvG,EAAqF,QAA7DyG,EAA2B,QAA3BC,EAAGjgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAkP,GAAQ,QAARA,EAAxBA,EAA0B3+B,cAAM,IAAA2+B,OAAA,EAAhCA,EAAkC1G,gCAAwB,IAAAyG,GAAAA,EAGrFnN,GAA6C,QAA3BqN,EAAGlgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAmP,GAAQ,QAARA,EAAxBA,EAA0B5+B,cAAM,IAAA4+B,OAAA,EAAhCA,EAAkCrN,mBAGvDsP,GAA8C,QAA3BhC,EAAGngC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAoP,GAAQ,QAARA,EAAxBA,EAA0B7+B,cAAM,IAAA6+B,OAAA,EAAhCA,EAAkCgC,oBAGxDC,GAAgD,QAA3BhC,EAAGpgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAqP,GAAQ,QAARA,EAAxBA,EAA0B9+B,cAAM,IAAA8+B,OAAA,EAAhCA,EAAkCgC,sBAG1D1H,GAAsD,QAA3B2F,EAAGrgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAsP,GAAQ,QAARA,EAAxBA,EAA0B/+B,cAAM,IAAA++B,OAAA,EAAhCA,EAAkC3F,4BAGhEvI,GAAqG,QAArEmO,EAA2B,QAA3BC,EAAGvgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAwP,GAAQ,QAARA,EAAxBA,EAA0Bj/B,cAAM,IAAAi/B,OAAA,EAAhCA,EAAkCpO,wCAAgC,IAAAmO,GAAAA,EAGrGlH,GACyE,QADhCoH,EACnB,QADmBC,EAC3CzgC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA0P,GAAQ,QAARA,EAAxBA,EAA0Bn/B,cAAM,IAAAm/B,OAAA,EAAhCA,EAAkCrH,iDAAyC,IAAAoH,GAAAA,EAGzEb,GAAqD,QAA3Be,EAAG1gC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA2P,GAAQ,QAARA,EAAxBA,EAA0Bp/B,cAAM,IAAAo/B,OAAA,EAAhCA,EAAkCf,2BAErE,IAAI0C,IAA6B,EAGX,oBAAXr5B,QACmH,MAAjH,QAAR23B,EAAA/lB,gBAAQ,IAAA+lB,GAA6F,QAA7FA,EAARA,EAAU9lB,uBA9XgB,iCA8XyE,UAAE,IAAA8lB,OAAA,EAArGA,EAAuG2B,MAAMC,WAE9GF,IAA6B,GAGjC,IAAI9gC,GAASC,EAAAA,EAAA,GACNxB,KAAKP,OAAK,IACbkC,UAAWy/B,EACX9Q,iBAAkBtwB,KAAKswB,iBACvBK,YAAa3wB,KAAK2wB,YAClB+Q,iBACAzH,SAAUj6B,KAAKi6B,SACf9H,iCAA0D,QAA1ByO,EAAE5gC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAA6P,GAAQ,QAARA,EAAxBA,EAA0Bt/B,cAAM,IAAAs/B,OAAA,EAAhCA,EAAkCzO,iCACpEwH,iDACA6I,cACIxiC,KAAKP,MAAM4B,KAAK0vB,eACoB1tB,IAApCrD,KAAKP,MAAM4B,KAAK0vB,SAASzvB,aACsB+B,IAA/CrD,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOmhC,WACpChR,iBACAf,WAAY1wB,KAAK0wB,WACjB9tB,WACAk/B,oBACA3L,eACA4D,gBAAiB/5B,KAAK+5B,gBACtBzI,kBACItxB,KAAKP,MAAMoN,MAAMykB,mBAAqBtxB,KAAKP,MAAMoN,MAAMykB,kBAAkBjrB,OAAS,EAC5ErG,KAAKP,MAAMoN,MAAMykB,kBAAkB,QACnCjuB,EACVq/B,cAAe,CAAEhhC,YAAa1B,KAAKP,MAAOkC,UAAWy/B,GACrDuB,YAAa,CAAEhhC,UAAW,qBAC1BihC,UAAW,CAAEjhC,UAAW,qBACxBkhC,UAAW,CAAElhC,UAAW,qBACxBmhC,iBAAkB,CAAEnhC,UAAW,6BAC/BohC,UAAW,CAAEphC,UAAW0gC,GAA6B,gCAAkC,qBACvFW,sBAAuB,CAAErhC,UAAW,mCACpCshC,uBAAwB,CAAEthC,UAAW,oCACrCuhC,wBAAyB,CAAEvhC,UAAW,qCACtCU,MAAOmuB,GAAmBxwB,KAAKmjC,mBAAmB3S,GAClDiR,oCAGJ,IAAKC,GAAkBX,EACnBx/B,GAASC,EAAAA,EAAA,GACFD,IAAS,IACZ6hC,MAAO7jC,EAAAA,cAAC8jC,EAAAA,EAAcl9B,OAAA8C,OAAA,GAAK,CAAE+C,QAASm1B,YAEvC,GAAInhC,KAAK6N,YACZtM,GAASC,EAAAA,EAAA,GACFD,IAAS,IACZsrB,QAASttB,EAAAA,cAAC+jC,EAAAA,QAAO,CAAC3hC,UAAU,+CAE7B,GAAI3B,KAAKi6B,SACZ14B,GAASC,EAAAA,EAAA,GACFD,IAAS,IACZ6hC,MAAO7jC,EAAAA,cAAC8jC,EAAAA,EAAcl9B,OAAA8C,OAAA,GAAK,CAAE+C,QAASqqB,WAEvC,CAAC,IAADkN,GAAAC,GACHjiC,GAASC,EAAAA,EAAA,GACFD,IAAS,IACZ6hC,MAAOhjC,GAAgBb,EAAAA,cAAC8jC,EAAAA,EAAcl9B,OAAA8C,OAAA,GAAK,CAAE+C,QAAS5L,KACtDqjC,SAAS,EACTC,WAAYpC,EACR/hC,EAAAA,cAACokC,EAAAA,EAAmBx9B,OAAA8C,OAAA,GACZ,CACAia,MAAOoe,EACP3L,cACAkL,4BACA+C,SAAUthC,EACVuZ,eAAgB7b,KAAKP,MAAMuD,QAC3BJ,WACAu3B,SAAUn6B,KAAK+5B,gBACfjwB,iBAAkB9J,KAAK8J,iBACvBqoB,iCAA0D,QAA1BoR,GAAEvjC,KAAKP,MAAM4B,KAAK0vB,gBAAQ,IAAAwS,IAAQ,QAARA,GAAxBA,GAA0BjiC,cAAM,IAAAiiC,QAAA,EAAhCA,GAAkCpR,iCACpEwH,iDACAM,WAAY75B,EACZyyB,sBACAsP,uBACAC,yBACA1H,+BACAtB,6CACAuG,sCAIRt8B,EAEJwgC,cAAcC,EAAAA,EAAAA,GAAgB9jC,KAAKP,OACnCskC,uBAAuBC,EAAAA,EAAAA,GAAyBhkC,KAAKP,OACrDwkC,UAAWxS,OAAiBpuB,GAAY6gC,EAAAA,EAAAA,GAAalkC,KAAKP,MAAOO,KAAK8J,kBACtEq6B,iBACI5kC,EAAAA,cAAC6kC,EAAAA,EAAyBj+B,OAAA8C,OAAA,GAClB,CACAi5B,kBACAhQ,YACKqH,GAA4BI,EACvB35B,KAAK6wB,6BACL7wB,KAAKmxB,aAEfiJ,cAAep6B,KAAKo6B,cACpBtwB,iBAAkB9J,KAAK8J,iBACvB6vB,+CAA+E,QAAjC6J,GAAExjC,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAkiC,QAAA,EAA/BA,GAC1C7J,+CACNvJ,oBAAqBpwB,KAAKY,MAAMwvB,oBAChCmJ,2BACApH,uCAIZ4P,qBACAsC,mBAAoBvC,GAChBviC,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAU,yCACVU,MAAO2+B,EACP59B,MAAM,YACNmf,KAAMuf,GACFG,EAAwB,CAC5BvxB,SAAU1Q,KAAKY,MAAMyvB,sBAEpB2Q,GAGTrL,cACA7rB,iBAAkB9J,KAAK8J,iBACvBw6B,6BAA8BlkC,GAChC,CAGN,OAAOJ,KAAKP,MAAMuC,WAAWT,GACjC,CAEqBy6B,wBAEjB,GADkB71B,OAAOo+B,OAAOvkC,KAAKP,MAAM4B,MAAMkW,MAAKlW,IAAQmjC,EAAAA,EAAAA,IAAInjC,EAAM,YAAc46B,EAAAA,sBAAsBC,UAExG,OAAOD,EAAAA,sBAAsBC,QAIjC,GADkB/1B,OAAOo+B,OAAOvkC,KAAKP,MAAM4B,MAAMojC,OAAMpjC,IAAQmjC,EAAAA,EAAAA,IAAInjC,EAAM,YAAc46B,EAAAA,sBAAsByI,UAEzG,OAAOzI,EAAAA,sBAAsByI,QAIjC,OADiBv+B,OAAOo+B,OAAOvkC,KAAKP,MAAM4B,MAAMkW,MAAKlW,IAAQmjC,EAAAA,EAAAA,IAAInjC,EAAM,YAAc46B,EAAAA,sBAAsB0I,SAEhG1I,EAAAA,sBAAsB0I,YADjC,CAKJ,CAOOxB,mBAAmB3S,GACtB,OACIjxB,EAAAA,cAAC62B,EAAAA,GAAajwB,OAAA8C,OAAA,GACNunB,EAAe,CACnBxN,IAAKwN,EAAgBxN,KAAO,KAC5BrhB,UAAU,qBACV4B,KAAMitB,EAAgBjtB,KACtBqhC,UAAW,CAAEC,OAAQ7kC,KAAKuwB,4BAA6B1U,eAAgB7b,KAAKP,MAAMuD,QAAQC,WAGtG,IAvhBU6hC,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,gCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCASCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,8BAKCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,qCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,mCAmBCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,gDAOCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCAqcCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,uCAwTTD,EAAAA,EAAAA,IAAA,CADCE,EAAAA,IAAM,uCA7yBL/U,GAAQ6U,EAAAA,EAAAA,IAAA,CAFbG,EAAAA,gBACAC,EAAAA,IACKjV,GAy8BN,kSC3kCA,MASA,EAT+F9U,IAA+B,IAA9B,YAAEzN,EAAW,UAAE/L,GAAWwZ,EACtH,IAAKzN,EACD,OAAO,KAGX,MAAMy3B,EAAgBpX,EAAAA,iBAAiBqX,cAAczjC,GAAa,4CAA8CA,EAChH,OAAOpC,EAAAA,cAAA,QAAMoC,UAAWwjC,GAAgBz3B,EAAmB,ECA/D,EARiGyN,IAAgB,IAAf,QAAEnP,GAASmP,EACzG,OAAKnP,EAIEzM,EAAAA,cAAA,KAAGoC,UAAU,+CAA+CqK,GAHxD,IAGoE,ECGnF,EAR6FmP,IAAc,IAAb,MAAE9Y,GAAO8Y,EACnG,OAAK9Y,EAIE9C,EAAAA,cAAA,KAAGoC,UAAU,6CAA6CU,GAHtD,IAGgE,ECyC/E,EAjC+F8Y,IAQ1F,IAR2F,UAC5FkqB,EAAS,MACTpuB,EAAK,YACLquB,EAAW,aACXC,EAAY,UACZC,EAAS,iBACT17B,EAAgB,SAChB8gB,GACHzP,EACG,IAAKlE,EACD,OAAO,KAGX,MAAM8K,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAmBmY,EAAAA,kBAAkBzT,iBACzE2T,GAAaC,EAAAA,EAAAA,wBAAuBtY,EAAmBiY,GAE7D,OACIxiB,EAAAA,cAAA,QAAA4G,OAAA8C,OAAA,CACItH,UAAU,4CACV8jC,QAASJ,EAAS,eACJA,EACdK,KAAK,QAAO,eACEJ,EAAW,gBACVC,EAAY,aACfxjB,EAAQ4jB,cAAcC,OAASJ,EAAY,GAAGzjB,EAAQ4jB,cAAcC,SAASJ,KAAeA,EACxGvuB,MAAOA,EACP6f,KAAK,mBACD3U,EAAU,CACdyI,SAAUA,IACZ,gBCvCH,MAAMib,EAAoEpmC,IAC7E,MAAM,UAAEqmC,EAAS,MAAE7uB,GAAUxX,EAEvBkC,EAAY,qEAClB,OACIpC,EAAAA,cAAA,QAAMoC,UAAW,GAAGA,KAChBpC,EAAAA,cAAA,QAAMoC,UAAW,GAAGA,WAAoBmkC,GACxCvmC,EAAAA,cAAA,QAAMoC,UAAW,GAAGA,WAAoBsV,GACrC,OCCf,MA0FA,EA1FmFkE,IAa9E,IAb+E,UAChFxZ,EAAS,WACTi0B,EAAU,gBACVmQ,EAAe,UACfP,EAAS,iBACT17B,EAAgB,iBAChBk8B,EAAgB,cAChBC,EAAa,eACbC,EAAc,QACdl2B,EAAO,UACPm2B,EAAS,oBACTC,EAAmB,SACnBxb,GACHzP,EACG,MAAOkrB,EAAcC,IAAmBC,EAAAA,EAAAA,UAAS,KAC1CC,EAAeC,IAAoBF,EAAAA,EAAAA,WAAS,IAE5CG,EAASC,IAAcJ,EAAAA,EAAAA,UAAS,KAGvCA,EAAAA,EAAAA,WAAS,KACL,MAAMK,GAAQ,IAAIrhB,MAAOshB,cAAcC,MAAM,KAAK,GAClDH,EAAWC,EAAM,IAGrB,MA6BM7kB,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAmBmY,EAAAA,kBAAkBzT,iBACzE2T,GAAaC,EAAAA,EAAAA,wBAAuBtY,EAAmBiY,GAE7D,OACIxiB,IAAAA,cAAA,OAAKoC,UAAWA,GACZpC,IAAAA,cAAA,WACIA,IAAAA,cAAA,SACIoC,UAAW,GAAGA,cACd+jC,KAAK,WAAU,aACHF,EACZ1O,KAAK,sBACL2O,QAASe,EACT5b,SAhBamc,KACzBN,GAAkBD,EAAc,IAiBxBjnC,IAAAA,cAAA,QAAMoC,UAAW,GAAGA,UAAmBskC,IAE3C1mC,IAAAA,cAAA,QAAMoC,UAAW,GAAGA,iBAA0BukC,GAC9C3mC,IAAAA,cAAA,OAAKoC,UAAW,GAAGA,eACfpC,IAAAA,cAAA,QAAMoC,UAAW,GAAGA,iBAA0BqO,GAC9CzQ,IAAAA,cAAA,QAAA4G,OAAA8C,OAAA,CACItH,UAAW,GAAGA,gBACd+jC,KAAK,OACL5O,KAAK,YACL7f,MAAOovB,EACPzb,SArDU9D,IACtB,MAAMkgB,EAAgBlgB,EAAM2J,OAAOxZ,MASnC,GAPI+vB,GAAiBN,GACjBJ,EAAgBU,GAChBC,QAAQC,IAAI,4BAA6BF,IAEzCC,QAAQC,IAAI,sCAGY7jC,IAAxB+iC,QAAmD/iC,IAAd8iC,EAAyB,CAAC,IAADgB,EAC9D,MAAMC,EAA4B,GAClChB,SAAgC,QAAbe,EAAnBf,EAAqBiB,mBAAW,IAAAF,GAAhCA,EAAkCt4B,KAAIy4B,IAClC,MAAMC,EAAepB,aAAS,EAATA,EAAWpiC,MAAKovB,IAAQ,IAAAqU,EAAA,OAAIF,KAAenU,SAAgB,QAARqU,EAARrU,EAAUG,cAAM,IAAAkU,OAAA,EAAhBA,EAAkB9rB,WAAW,SACxErY,IAAjBkkC,GACAH,EAAcn4B,KAAKs4B,EAAc,SAInBlkC,IAAlB+jC,GACAxc,EAAS9D,EAAOsgB,EAAc,GAmC1B3xB,IAAKixB,EACLe,QAAS1B,GACL5jB,EAAU,CACdzR,UAAU81B,GAAgB5Q,MAGhC,EC9Cd,EArCqGza,IAUhG,IAViG,UAClGxZ,EAAS,UACT0jC,EAAS,MACTpuB,EAAK,YACLquB,EAAW,aACXC,EAAY,UACZC,EAAS,UACTkC,EAAS,iBACT59B,EAAgB,SAChB8gB,GACHzP,EACG,IAAKlE,EACD,OAAO,KAGX,MAAM8K,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAmBmY,EAAAA,kBAAkBzT,iBACzE2T,GAAaC,EAAAA,EAAAA,wBAAuBtY,EAAmBiY,GACvD4lB,EAAuDpoC,EAAAA,YAE7D,OACIA,EAAAA,cAAA,QAAA4G,OAAA8C,OAAA,CACItH,UAAWA,EACX8jC,QAASJ,EAAS,eACJA,EACdK,KAAK,QAAO,eACEJ,EAAW,gBACVC,EAAY,aACfxjB,EAAQ4jB,cAAcC,OAASJ,EAAY,GAAGA,KAAazjB,EAAQ4jB,cAAcC,QAAUJ,EACvGvuB,MAAOA,EACP6f,KAAM4Q,GACFvlB,EAAU,CACd1f,IAAKklC,EACL/c,SAAUA,IACZ,ECmEV,EArFyGzP,IAiBpG,IAjBqG,UACtGxZ,EAAS,SACTimC,EAAQ,YACRtC,EAAW,aACXC,EAAY,UACZC,EAAS,iBACT17B,EAAgB,gBAChBhD,EAAe,UACfkE,EAAS,eACT68B,EAAc,SACdr8B,EAAQ,UACRk8B,EAAS,QACT1kC,EAAO,UACPmjC,EAAS,WACTmB,EAAU,oBACVlB,EAAmB,SACnBxb,GACHzP,EACG,MAAM4G,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAmBmY,EAAAA,kBAAkBzT,iBACzE2T,GAAaC,EAAAA,EAAAA,wBAAuBtY,EAAmBiY,GAC7DklB,QAAQC,IAAI/kB,GACZ,MAAM2lB,EAAgB9kC,EAAQ6F,cAAcgT,eAAe7O,QACrDvF,EAAQX,EAAgBT,OAC9B,GAAc,IAAVoB,EACA,OAAO,KAEX,MAAMsgC,EAA6B,GACgC,IAADZ,OAAtC9jC,IAAxB+iC,QAAmD/iC,IAAd8iC,IACrCC,SAAgC,QAAbe,EAAnBf,EAAqBiB,mBAAW,IAAAF,GAAhCA,EAAkCt4B,KAAIy4B,IAClC,MAAMC,EAAepB,aAAS,EAATA,EAAWpiC,MAAKovB,IAAQ,IAAAqU,EAAA,OAAIF,KAAenU,SAAgB,QAARqU,EAARrU,EAAUG,cAAM,IAAAkU,OAAA,EAAhBA,EAAkB9rB,WAAW,SACxErY,IAAjBkkC,GACAQ,EAAe94B,KAAKs4B,EAAc,KAK9C,MAAMS,EAA8BzoC,EAAAA,aAC/BunB,SAC0BzjB,IAAnB0kC,GAAgCA,EAAe1hC,OAAS,EACxDukB,EAAS9D,EAAOihB,OAAgB1kC,GAEhCunB,EAAS9D,EAAOqf,EAAWmB,EAAY,GAG/C,CAAC1c,EAAUmd,EAAgBT,IAGzBW,EAAoB,GAAGtmC,mBACvBumC,EAAkB,GAAGD,QACrBxe,EAAW3iB,EAAgB+H,KAAI,CAACD,EAAgCiU,IAClEtjB,EAAAA,cAAA,OAAK8Q,IAAKwS,EAAOlhB,UAAWumC,GACxB3oC,EAAAA,cAAC4oC,EAAoBhiC,OAAA8C,OAAA,GACb,CACAy+B,UAAWA,EACXrC,UAAWz2B,EAAeI,OAAS64B,EACnC5wB,MAAOrI,EAAeI,KACtBs2B,YAAa79B,EACb89B,aAAc1iB,EAAQ,EACtB2iB,UAAW,GAAG52B,EAAewB,cAC7Bwa,SAAUod,EACVl+B,iBAAkBA,EAClBnI,UAAW,GAAGumC,WAGtB3oC,EAAAA,cAAC6oC,EAAoBjiC,OAAA8C,OAAA,GACb,CACAyE,YAAakB,EAAewB,YAC5BzO,UAAW,GAAGumC,WAGtB3oC,EAAAA,cAAC8P,EAAAA,eAAc,CACX9I,GAAIqhC,EACJp8B,SAAUA,EACVxI,QAASA,EACTrB,UAAW,GAAGumC,OACd7mC,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyBwpB,IAAI51B,EAAgB,uBAAwB,KACtF7D,cAAeC,EACfq9B,aAAcP,aAAa,EAAbA,EAAeQ,cAKzC,OAAO/oC,EAAAA,cAAA,OAAKoC,UAAWsmC,GAAoBxe,EAAe,+BC7E9D,MA+Da8e,EAAkE9oC,IAC3E,MAAM8xB,EAAW9xB,EAAM8xB,SACjBiX,EAAgB/oC,EAAMkC,UACtB8mC,EAAoB,GAAGD,SACvBH,EAAe5oC,EAAM4oC,aACrBK,EAAajpC,EAAM6C,UAAUqmC,kBAC5BC,EAAoBC,IAAyBtC,EAAAA,EAAAA,WAAS,GAEvDuC,EAAcA,KAChBD,GAAuBD,EAAmB,EAE9C,IAAKnpC,EAAM0mC,WAAwC,IAA3B1mC,EAAM0mC,UAAU9/B,SAAiBkrB,GAAgC,IAApBA,EAASlrB,aAAiChD,IAAjBglC,EAC1F,OAAO,KAEX,MAAMt5B,EAAetP,EAAMqH,gBAAgB/C,MAAKoL,GAAUA,EAAOH,OAASvP,EAAMooC,iBAC1EkB,GAAU/mB,EAAAA,EAAAA,kBAAiBgnB,EAAAA,GAAeC,aAAcxpC,EAAMqK,sBAAkCzG,IAAfqlC,EAA2BA,EAAa,GAAI,IAC7HvmB,GAAaC,EAAAA,EAAAA,wBAAuB3iB,EAAMqK,iBAAmBi/B,GAC7Dtf,EAAWhqB,EAAM0mC,UAAUt3B,KAAIskB,IACjC,MAAM1tB,EAAU0tB,EAAS2B,WAxBboU,EAAClpB,EAAmBuR,IAC7BA,EAASxtB,MAAMolC,GACXnpB,IAAcmpB,EAAS9yB,WAsBQ6yB,CAAY/V,EAAS2B,UAAWvD,GACtE,OAAK9rB,EAIDlG,IAAAA,cAAA,OAAK8Q,IAAK8iB,EAASG,OAAQ3xB,UAAW8mC,GAtFpBW,EAC1BpmC,EACAmwB,EACA1tB,EACAmiC,EACAp8B,EACA69B,EACA95B,EACAjN,EACA+lC,EACAjuB,EACA9O,EACAg8B,KAEA,IAAI7Z,GAAa6b,EAAAA,EAAAA,mBAAkB7jC,EAASzC,EAAQ6F,mBAAexF,GACnE,GAAIkmC,EAAAA,GAAS/uB,YAAa8c,EAAAA,EAAAA,IAAiBt0B,EAAQ6F,cAAcgT,gBAAiB,CAAC,IAAD2tB,EAC9E,MAAM7b,EAAU,IAAIC,IAAIH,EAAYzkB,OAAOtB,SAAS6a,MACpDoL,EAAQQ,aAAaC,IAAI,YAAa,GAAqB,QAArBob,EAAGrW,EAASsW,iBAAS,IAAAD,EAAAA,EAAI,KAC/D/b,EAAaE,EAAQpL,IAAK,CAG9B,OACIhjB,IAAAA,cAACmqC,EAAAA,sBAAqB,CAClBnjC,GAAIqhC,EACJp8B,SAAUA,EACVxI,QAASA,EACTV,UAAW,CACPqnC,WAAYrnC,EAAUgT,yBACtBs0B,YAAatnC,EAAU8S,0BACvBy0B,YAAavnC,EAAUkT,0BACvBs0B,aAAcxnC,EAAUiT,2BACxBw0B,sBAAuBznC,EAAU0nC,2BACjCC,aAAc3nC,EAAU2nC,aACxBpf,uBAAwB,GACxBqf,mBAAoB5nC,EAAU4nC,mBAC9Bj/B,kBAAmB,GACnBC,iBAAkB,GAClBi/B,oBAAqB7nC,EAAU6nC,oBAC/BC,0BAA2B,0BAE/BC,oBAAoB,EACpB96B,cAAeA,EACfjE,aAAcA,EACdmiB,WAAYA,EACZ6c,gBAAiB7kC,EAAQ8nB,gBACzBlsB,KAAM,CACF8xB,WACA1tB,UACA2U,YAEJivB,gCAAiCA,EAEjCkB,cAAelC,GACjB,EAkCOe,CACG3pC,EAAMuD,QACNmwB,EACA1tB,EACAhG,EAAMmoC,SACNnoC,EAAM+L,SACN/L,EAAM4pC,gCACN5pC,EAAM8P,cACN9P,EAAM6C,UACN+lC,EACA5oC,EAAM2a,SACN3a,EAAM6L,cAEV/L,IAAAA,cAAA,OAAKoC,UAAU,gCAAgClC,EAAM6C,UAAUkoC,qBAC/DjrC,IAAAA,cAAA,OAAKoC,UAAU,gCACXpC,IAAAA,cAAA,YAAOwP,aAAY,EAAZA,EAAcqB,aACrB7Q,IAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CAACtH,UAAU,mCAAmCS,QAAS0mC,EAAazmC,MAAOqmC,GAAgBvmB,GAC7FumB,IAGRE,EACGrpC,IAAAA,cAACkrC,EAAoC,CACjC9oC,UAAU,wBACVmF,gBAAiBrH,EAAMqH,gBACvBkE,UAAWvL,EAAM6C,UAAU0I,UAC3B68B,eAAgBpoC,EAAMooC,eACtBr8B,SAAU/L,EAAM+L,SAChBxI,QAASvD,EAAMuD,QACfmjC,UAAW,CAAChT,GACZmU,WAAYnU,EAASG,OACrB1I,SAAUnrB,EAAMmrB,SAChB4a,UAAW/lC,EAAM6C,UAAUkjC,UAC3B17B,iBAAkBrK,EAAMqK,iBACxB89B,SAAU,GACVtC,YAAa,EACbC,aAAc,EACdmC,UAAW,mBAAmBvU,EAASG,WAE3C,MA1CD,IA2CD,IAId,OAAO/zB,IAAAA,cAAA,OAAKoC,UAAW6mC,GAAgB/e,EAAe,ECjJ7CihB,EAAuEvvB,IAAmC,IAAlC,gBAAEwvB,EAAe,UAAExE,GAAWhrB,EAC/G,OAAKla,EAAAA,gBAAgBC,YAAYilC,GAK7B5mC,EAAAA,cAAA,OAAKoC,UAAW,GAAGgpC,mBACfprC,EAAAA,cAAA,OAAKoC,UAAW,GAAGgpC,yBACdxE,EAAUt3B,KAAKskB,IACZ,MAAMxxB,EAAY,GAAGgpC,gCACrB,OACIprC,EAAAA,cAAA,OAAKoC,UAAWA,EAAW0O,IAAK8iB,EAASyX,QACrCrrC,EAAAA,cAAC6mB,EAAAA,GAAKjgB,OAAA8C,OAAA,GAAKkqB,EAAS0X,aACpBtrC,EAAAA,cAAA,OAAKoC,UAAU,0DAA0DwxB,EAAS2X,oBAClFvrC,EAAAA,cAAA,YACAA,EAAAA,cAAA,OAAKoC,UAAU,0DAA0DwxB,EAAS4X,qBAChF,MAdf,IAkBD,EAOD1hC,EAAuC,CAChDC,UAAW,CACPC,GAAI,CAAEC,EAAG,6BAA8BC,EAAG,IAAKC,EAAG,KAClDC,GAAI,CAAEH,EAAG,6BAA8BC,EAAG,IAAKC,EAAG,KAClDE,GAAI,CAAEJ,EAAG,6BAA8BC,EAAG,IAAKC,EAAG,MAEtDG,UAAU,EACVmhC,QAAS,ykBCgEb,IAAMC,EAAN,cAAsC1rC,EAAAA,UAoDlCC,YAAmBC,GACfC,MAAMD,GApDU,KAAAooC,eAAyB,GAEzB,KAAA/gC,gBAAoC,GAEpC,KAAA+G,WAAqB,EAIrB,KAAAq9B,qBAAyD,GAEzD,KAAAC,gCAAqE,GAyBjF,KAAAC,mCAA8C,EAQrC,KAAA9a,iBAAiD/wB,EAAAA,YAM1D,KAAA8rC,yBAA8D,GA4KrD,KAAAC,KAAOtmC,UACpBhF,KAAKP,MAAMk2B,YAAY2V,KAAK,CACxBzG,OAAQ7kC,KAAKurC,kCAA+BloC,EAAYrD,KAAK6kC,OAC7D2G,SAAUxrC,KAAKurC,kCAA+BloC,EAAYrD,KAAKwrC,SAC/DC,SAAUzrC,KAAKurC,kCAA+BloC,EAAYrD,KAAKyrC,SAC/D7jC,OACgD,qCAA1C5H,KAAKP,MAAMoC,OAAO6pC,0BACpB1rC,KAAK2rC,UACC,WACA,aAGd3rC,KAAK4rC,iBAAmB5rC,KAAK6rC,yBACzB7rC,KAAK8rC,kCACL9rC,KAAK+rC,wCAEH/rC,KAAKgsC,qBAAqB,EAGnB,KAAAL,QAAU,KAAc,IAAA7a,EAErC,QADkD,QAAlCA,EAAG9wB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwvB,OAAA,EAA/BA,EAAiCU,aAAaC,iBAC3CzxB,KAAKisC,0BAA0B5lC,OAAS,CAAC,EAGlD,KAAA6lC,qBAAwBjlC,MACjCA,IACIjH,KAAK8G,gBAAgB/C,MAAK6K,GAAkBA,EAAeI,OAAS/H,KAO/D,KAAAklC,0BAA4B,KACzC,MAAMC,EAAepsC,KAAK8G,gBAAgB/C,MAAK6K,GAAkBA,EAAeI,OAAShP,KAAK6nC,iBAC9F,IAAKuE,EAED,OADApsC,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,kEAC5B,KAGX,MAAM,GAAEtF,EAAE,SAAEiF,EAAQ,QAAExI,GAAYhD,KAAKP,OACjC,UAAEuL,GAAchL,KAAKP,MAAM6C,UAC3B4K,EAAQs3B,IAAI4H,EAAc,uBAAwB,GAClDtE,EAAgB9nC,KAAKP,MAAMuD,QAAQC,QAAQ+J,QACjD,MAAO,CACHq/B,eAAgB,CAAE1qC,UAAW,iDAC7B+L,YAAanO,EAAAA,cAAC6oC,EAAoBjiC,OAAA8C,OAAA,GAAK,CAAEyE,YAAa0+B,EAAah8B,eACnElD,MACI3N,EAAAA,cAAC8P,EAAAA,eAAc,CACX9I,GAAIA,EACJiF,SAAUA,EACVxI,QAASA,EACTrB,UAAU,sCACVN,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyB9N,IAC1CnC,cAAeC,EACfq9B,aAAcP,aAAa,EAAbA,EAAeQ,WAGxC,EAGY,KAAAgE,gBAAkB,KAC/B,MAAM,kBAAEC,GAAsBvsC,KAAKP,MAAM6C,UACzC,MAAO,CAEHkqC,6BAA8B,CAAExpB,IAAK,OAAQrhB,UAAW,yBAA0B2kB,KAAM,QAAS,YAAa,aAC9GjkB,MAAO9C,EAAAA,cAACktC,EAAmBtmC,OAAA8C,OAAA,GAAK,CAAE5G,MAAOkqC,KACzCvgC,QAASzM,EAAAA,cAACmtC,EAAqBvmC,OAAA8C,OAAA,GAAK,CAAE+C,QAAShM,KAAKI,gBACvD,EAGY,KAAAusC,sBAAwB,KACrC,MAAMllC,EAAQzH,KAAK8G,gBAAgBT,QAC7B,UAAE2E,GAAchL,KAAKP,MAAM6C,WAC3B,GAAEiE,EAAE,SAAEiF,EAAQ,QAAExI,GAAYhD,KAAKP,MACjCqoC,EAAgB9nC,KAAKP,MAAMuD,QAAQC,QAAQ+J,QAEjD,OAAOhN,KAAK8G,gBAAgB+H,KAAI,CAACD,EAAgCiU,KAC7D,MAAM+pB,EAAwBpI,IAAI51B,EAAgB,uBAAwB,GAC1E,MAAO,CACHy9B,eAAgB,CAAE1qC,UAAW,uCAAwC2kB,KAAM,YAC3EumB,KAAMj+B,EAAeI,MAAQ,GAC7B89B,YACIvtC,EAAAA,cAAC4oC,EAAoBhiC,OAAA8C,OAAA,GACb,CACAo8B,UAAWz2B,EAAeI,OAAShP,KAAK6nC,eACxC5wB,MAAOrI,EAAeI,KACtBs2B,YAAa79B,EACb89B,aAAc1iB,EAAQ,EACtB2iB,UAAW,GAAG52B,EAAewB,eAA0C,IAA1Bw8B,EAA8B5hC,EAAY4hC,IACvFhiB,SAAU5qB,KAAK+sC,uBACfjjC,iBAAkB9J,KAAK8J,oBAInC4D,YACInO,EAAAA,cAAC6oC,EAAoBjiC,OAAA8C,OAAA,GACb,CACAyE,YAAakB,EAAewB,eAIxClD,MACI3N,EAAAA,cAAC8P,EAAAA,eAAc,CACX9I,GAAIA,EACJiF,SAAUA,EACVxI,QAASA,EACTrB,UAAU,sCACVN,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyBwpB,IAAI51B,EAAgB,uBAAwB,KACtF7D,cAAeC,EACfq9B,aAAcP,aAAa,EAAbA,EAAeQ,WAGxC,GACH,EAGW,KAAA0E,cAAgB,KAC7B,MAAM,aAAEC,EAAe,QAAWjtC,KAAKP,MAAM6C,UAC7C,OACI/C,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAU,yCACVU,MAAO4qC,EACP7pC,MAAM,UACNsN,UAAW1Q,KAAK6nC,eAChBzlC,QAASpC,KAAKktC,QAEbD,EACI,EAIA,KAAAE,cAAgB,KAC7B,MAAM,aAAEC,EAAe,UAAaptC,KAAKP,MAAM6C,UAC/C,OACI/C,EAAAA,cAAC4C,EAAAA,OAAM,CAACR,UAAU,yCAAyCU,MAAO+qC,EAAchqC,MAAM,UAAUhB,QAASpC,KAAK6kC,QACzGuI,EACI,EAIA,KAAAC,gBAAkB,KAC/B,MAAM,eAAEC,EAAiB,UAAattC,KAAKP,MAAM6C,UACjD,OACI/C,EAAAA,cAAC4C,EAAAA,OAAM,CAACR,UAAU,2CAA2CU,MAAOirC,EAAgBlqC,MAAM,YAAYhB,QAASpC,KAAKwrC,UAC/G8B,EACI,EAIA,KAAAC,SAAYntC,IACzBJ,KAAKP,MAAMyK,UAAU2B,MAAMzL,GAC3BJ,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKP,MAAMk2B,YAAYyB,aACvBp3B,KAAKI,aAAeA,CAAY,EAGnB,KAAAotC,WAAa,KAC1BxtC,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKI,kBAAeiD,CAAS,EAGhB,KAAA6pC,OAASloC,gBAChBhF,KAAKyrC,UAAU,EAGR,KAAA5G,OAAS7/B,UAA0B,IAAAosB,EAChDpxB,KAAKP,MAAMyK,UAAUgV,YAAY,sCAEjClf,KAAKwtC,aACLxtC,KAAKo3B,mBACgC,QAArChG,EAAMpxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA8vB,OAAA,EAA/BA,EAAiCqc,mCAAmC,CAAEC,iCAAiC,IAAO,EAGvG,KAAAjC,SAAWzmC,UAA0B,IAAA2sB,EAClD3xB,KAAKP,MAAMyK,UAAUgV,YAAY,wCAC7Blf,KAAK8rC,iCACL9rC,KAAK2tC,6CAEC3tC,KAAK4tC,gCAAgC5tC,KAAK6nC,sBAEf,QAArClW,EAAM3xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAqwB,OAAA,EAA/BA,EAAiC8b,mCAAmC,CAAEC,iCAAiC,IAAQ,EAGxG,KAAAlC,SAAWxmC,UACxBhF,KAAKP,MAAMyK,UAAUgV,YAAY,wCAGjC,MAAM2uB,EAAsB7tC,KAAK6rC,yBACP,IAADja,EAArBic,GACA7tC,KAAK6nC,eAAiBgG,EACtB7tC,KAAK8tC,gBAEgC,QAArClc,EAAM5xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAswB,OAAA,EAA/BA,EAAiC6b,mCAAmC,CAAEC,iCAAiC,MAE7G1tC,KAAKo3B,YAAa,EAIT,KAAAyU,uBAAyB,KACtC,MAAMkC,EAAuB/tC,KAAKisC,0BAClC,OAAO8B,EAAqB,IAAMA,EAAqB,GAAG3lC,YAAY,EAGzD,KAAA2jC,gCAAkC,KAClB/rC,KAAKisC,0BACblW,SAAQ5C,IACzB,MAAMlsB,OAAyC5D,IAA1B8vB,EAAS/qB,aAA6B+qB,EAAS/qB,aAAe,GACnF,IAAK+qB,EAASG,QAAUvF,EAAAA,iBAAiBqX,cAAcn+B,GACnD,OAEJ,MAAMqgC,EAAanU,aAAQ,EAARA,EAAUG,OACvB0a,EAAyChuC,KAAKqrC,yBAAyBtnC,MACzEkqC,GAA0BA,EAAuB3G,aAAeA,IAEhE0G,EACAA,EAAuCE,uBAAyBjnC,OAE7C5D,IAAfikC,GACAtnC,KAAKqrC,yBAAyBp8B,KAAK,CAAEq4B,aAAY4G,uBAAwBjnC,GAAe,GAGlG,EAGW,KAAA2mC,gCAAkC5oC,UAC/C,GAA8B,KAA1BmpC,EAAeC,OACf,OAGJ,MAAM,UAAE9rC,GAActC,KAAKP,MACrBg4B,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OACzC+sC,EAAuC,CACzCF,iBACAnb,gBAAiByE,EAAczE,gBAC/B7lB,4BAA6BnN,KAAKorC,kCAAoCprC,KAAKmN,iCAA8B9J,GAG7GrD,KAAKwtC,aACLxtC,KAAKsuC,kBAEC7W,EAAcjG,aACfoc,gCAAgCS,GAChC1mC,MAAK8hB,IACF,GAAwB,WAApBA,EAAS7hB,OAAqB,CAAC,IAAD2mC,EAC9B,MAAMnuC,EAAe,GAAwB,QAAxBmuC,EAAG9kB,EAAS+kB,oBAAY,IAAAD,OAAA,EAArBA,EAAuBE,mBAC/CzuC,KAAKutC,SAASxf,EAAAA,iBAAiBqX,cAAchlC,GAAgBkC,EAAU+zB,oBAAsBj2B,EAAc,CAG/GJ,KAAK8tC,UACL9tC,KAAKP,MAAMk2B,YAAY+Y,kBAAiB,EAAK,IAEhD9iC,OAAM,KACH5L,KAAKutC,SAASjrC,EAAU+zB,oBAAoB,GAC9C,EAIO,KAAAsX,qCAAuC3oC,UAA0B,IAAAwtB,EAC9E,IAAKxyB,KAAKmrC,kCAAoCnrC,KAAKmrC,gCAAgC9kC,OAC/E,OAEJ,MAAM,UAAE/D,GAActC,KAAKP,MAC3B,IAAIkvC,EAAyC,GAC7C,MAAMC,EAAmD,QAAlCpc,EAAGxyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAkxB,OAAA,EAA/BA,EAAiChB,aAAarsB,KAAK+tB,UAE7ElzB,KAAKmrC,gCAAgCpV,SAAQ8Y,IAAQ,IAAAC,EACjD,MAAMlX,EAAUgX,SAAyE,QAAxDE,EAAjBF,EAAmB7qC,MAAKovB,GAAYA,EAASG,SAAWub,EAAMvH,oBAAW,IAAAwH,OAAA,EAAzEA,EAA2EC,gBACrFC,EAAW,CACb1b,OAAQub,EAAMvH,WACd/T,sBAAuB,CACnBC,eAAgBqb,EAAMX,uBACtBza,4BAA6BC,EAAAA,uBAAuBub,cACpDnb,gBAAiB8D,IAGzB+W,EAAU1/B,KAAK+/B,EAAS,IAG5B,IACI,MAAMvX,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAK/C,GAAwB,kBAJDm2B,EAAcjG,aAAamc,qCAAqC,CACnFva,2BAA4Bub,KAGnB/mC,OACT5H,KAAKutC,SAASjrC,EAAU+zB,yBACrB,CAAC,IAADvD,EACH,MAAMqT,EAA2C,QAAlCrT,EAAG9yB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwxB,OAAA,EAA/BA,EAAiCtB,aAAarsB,KAAK+tB,eACnD7vB,IAAd8iC,GAA2BA,EAAU9/B,OAAS,IAC9C8/B,SAAAA,EAAWpQ,SAAQ5C,IAAW,IAAAqU,EAC1B,MAAMF,EAA4B,QAAlBE,EAAGrU,EAASG,cAAM,IAAAkU,OAAA,EAAfA,EAAiB9rB,WAC9BsyB,EAAyChuC,KAAKmrC,gCAAgCpnC,MAChFmrC,GAAkCA,EAA+B5H,aAAeA,IAEhF0G,IACA7a,EAASgc,sBAAwBnB,EAAuCjD,oBAClE,IAAIxlB,KAAKyoB,EAAuCjD,0BAChD1nC,EAAU,UAGlBo0B,EAAcjG,aAAa4d,gBAAgB,CAAEC,uBAAwBlJ,KAE/EnmC,KAAK8tC,UACL9tC,KAAKP,MAAMk2B,YAAY+Y,kBAAiB,EAAM,CAGL,CAD/C,MAAA1tB,GACEhhB,KAAKutC,SAASjrC,EAAU+zB,oBAAqB,GAIpC,KAAA4V,wBAA0B,KACvC,MAAM,QAAEhpC,GAAYjD,KAAKP,MAAMuD,QACzBssC,EAAyBrsC,GAAWA,EAAQ+J,SAAW/J,EAAQ+J,QAAQC,uBACvEylB,EAAwBzvB,GAAWA,EAAQ+J,SAAW/J,EAAQ+J,QAAQ2lB,sBAE5E,OAAO3yB,KAAKorC,mCACJprC,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,KAAK+tB,WAAc,IAAIptB,QAAOqtB,IAAQ,IAAAoc,EAAA,OACpHpc,EAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,aAC5B+qB,EAAS/qB,gBAC2B,QADfmnC,EACjBvvC,KAAKmN,mCAA2B,IAAAoiC,GAAyB,QAAzBA,EAAhCA,EAAkCrgC,+BAAuB,IAAAqgC,OAAA,EAAzDA,EAA2DxrC,MACvDkD,GAAgBA,IAAiBksB,EAAS/qB,iBACzC+qB,EAAS/qB,eAAiBsqB,EACnCS,CAAQ,KAEhBnzB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,KAAK+tB,WAAc,IAAIptB,QAAOqtB,GAC5GA,EAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,aAC5B+qB,EAAS/qB,eAAiBknC,GAA0Bnc,EAAS/qB,eAAiBsqB,EAC9ES,GACT,EAGM,KAAAqc,mBAAqBxqC,UAAkD,IAAAytB,EACpF,IAAKzyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC1B,OAGJ,MAAM,QAAE0B,EAAO,UAAEV,EAAS,OAAET,GAAW7B,KAAKP,MACtC2oB,EAA2C,QAAlCqK,EAAGzyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAmxB,OAAA,EAA/BA,EAAiCjB,aAC7Cie,EAAUrnB,EAAUjjB,KAAc6uB,GAExC,GAAIhxB,EAAS,CACThD,KAAK6N,WAAY,EACjB7N,KAAK8G,gBAAkB,GACvB9G,KAAK6nC,eAAiB,GACtB7nC,KAAKwtC,aAEL,IACI,IAAIkC,EAA+B,GACnC,MAAMC,EAAoB3vC,KAAKisC,0BACzB2D,EAA2BD,GAAqBA,EAAkBtpC,OAAS,GAAKspC,EAAkB,GAAGvnC,aAC3G,GAAIwnC,EAA0B,CAE1BF,EAAuBC,EAAkB,GAAGvnC,cAAgB,GAG5D,MAAMjD,EAAOijB,EAAUjjB,WACjBijB,EAAUynB,kCAAkC,CAC9C1qC,OACA2qC,mCAAoC9vC,KAAKmN,6BAC1C,CAIP,IAAI4iC,EACJ,GACQ,SADAluC,EAAOmuC,yBAEPD,EAAuBE,EAAAA,yBAAyBC,UAMhDH,EAAuBE,EAAAA,yBAAyBE,gCAExD,MAAM1mB,QAAiBb,EAAAA,EAAAA,yBACnB,CACIC,cAAe7lB,EAAQ6F,cACvBigB,oBAAqBC,EAAAA,yBAAyBC,qCAAqChmB,EAAQ6F,gBAE/F4mC,EACAzc,EACA,GACA+c,GACA,GAGAH,SACM5vC,KAAK4tC,gCAAgC8B,GAG3CjmB,GAAYA,EAASpjB,OAAS,IAC9BrG,KAAK8G,gBAAkB2iB,EAGkB,CAD/C,MAAA2mB,GACEpwC,KAAKutC,SAASjrC,EAAU+zB,oBAAqB,CAGjD,GAAoC,IAAhCr2B,KAAK8G,gBAAgBT,OACrBrG,KAAKutC,SAASjrC,EAAU+tC,8BACrB,GAAIrwC,KAAK4rC,kBAAoB5rC,KAAKksC,qBAAqBlsC,KAAK4rC,kBAAmB,CAAC,IAAD7U,EAAAyC,EAClFx5B,KAAK6nC,eAAiB7nC,KAAK4rC,iBAC3B5rC,KAAK4rC,sBAAmBvoC,EACxBrD,KAAK8tC,UAG0B,QAA/B/W,EAAA/2B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAy1B,GAA/BA,EAAiCuZ,0BAA0B,CAAEC,wBAAwB,IAEjD,QAAhC/W,EAACx5B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAk4B,GAA/BA,EAAiCrH,wCAC5BnyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOmsC,mCAAmC,CAAEC,iCAAiC,GAAQ,KAErH,CAAC,IAADhU,EACH15B,KAAKo3B,aACLp3B,KAAK6nC,eAAiB7nC,KAAK8G,gBAAgBT,OAAS,GAAIrG,KAAK8G,gBAAgB,GAAGkI,MAAa,GAG9D,QAA/B0qB,EAAA15B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAo4B,GAA/BA,EAAiC4W,0BAA0B,CAAEC,yBAA0BvwC,KAAKurC,8BAAgC,CAGhIvrC,KAAK6N,WAAY,CAAM,GAId,KAAA2iC,yBAA2BxrC,UACxC,IAAKhF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC1B,OAGJ,MAAM,QAAE0B,GAAYhD,KAAKP,MACnB2oB,EAAYpoB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAElD,GAAIxuB,EAAS,CACThD,KAAK6N,WAAY,EACjB7N,KAAK8G,gBAAkB,GACvB9G,KAAK6nC,eAAiB,GACtB7nC,KAAKwtC,aAEL,IAAIkC,EAA+B,GACnC,MAAMC,EAAoB3vC,KAAKisC,0BACzB2D,EAA2BD,GAAqBA,EAAkBtpC,OAAS,GAAKspC,EAAkB,GAAGvnC,aAC3G,GAAIwnC,EAA0B,CAE1BF,EAAuBC,EAAkB,GAAGvnC,cAAgB,GAG5D,MAAMjD,EAAOijB,EAAUjjB,WACjBijB,EAAUynB,kCAAkC,CAC9C1qC,OACA2qC,mCAAoC9vC,KAAKmN,8BAEzCyiC,SACM5vC,KAAK4tC,gCAAgC8B,EAAqB,CAI5C,IAAD7V,EAA3B,GAAI75B,KAAK4rC,iBACL5rC,KAAK6nC,eAAiB7nC,KAAK4rC,iBAC3B5rC,KAAK4rC,sBAAmBvoC,EACxBrD,KAAK8tC,UAG0B,QAA/BjU,EAAA75B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAu4B,GAA/BA,EAAiCyW,0BAA0B,CAAEC,wBAAwB,IAEhFvwC,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAO6wB,wCAC3BnyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOmsC,mCAAmC,CAAEC,iCAAiC,IAIpH1tC,KAAK6N,WAAY,CAAM,GAId,KAAAm+B,oBAAsBhnC,UACnC,MAAM,SAAE+rB,GAAa/wB,KAAKP,MAAM4B,MAC1B,OAAEC,GAAWyvB,GAAY,CAAC,GAC1B,gBAAEiC,EAAe,6BAAEyd,EAA4B,iCAAEte,EAAgC,yBAAEoH,GAA6Bj4B,GAAU,CAAC,GAC3H,SAAEuO,GAAa7P,KAAKP,MAAMuD,QAAQ6F,cAAcgT,gBAAkB,CAAC,EAEzE,IAAK7b,KAAK2rC,YAAe3Y,IAAmByd,EACxC,OAGJ,MAAMC,EAAe1wC,KAAKurC,8BAAgChS,GAA4Bv5B,KAAK2wC,kCAEvF9gC,SAAAA,EAAU+gC,uCACNze,QACMnyB,KAAKwwC,2BAENre,IAAoCue,SAC/B1wC,KAAK6wC,kCAAkC7d,IAIhDb,IAAoCue,SAC/B1wC,KAAK6wC,kCAAkC7d,GAG7Cb,SACMnyB,KAAKwwC,4BAIfE,SACM1wC,KAAKyrC,UAAW,EAIb,KAAAoF,kCAAoC7rC,UAC7ChF,KAAK8rC,iCACD9Y,QACMhzB,KAAK8wC,wBAAwB9d,SAE7BhzB,KAAK8wC,0BAER9d,SACDhzB,KAAKwvC,mBAAmBxc,EAAiB,EAItC,KAAA+Z,uBAA0BjmB,IACvC,MAAMqnB,EAAiBrnB,EAAMiqB,cAAc95B,MAC3CjX,KAAK6nC,eAAiBsG,CAAc,EAGvB,KAAA6C,+BAAiC,CAC9ClqB,EACAqf,EACAmB,KAEA,MAAM6G,EAAiBrnB,EAAMiqB,cAAc95B,MAC3C,QAAmB5T,IAAfikC,EAYJnB,EAAUpQ,SAAQ5C,IACd,IAAKA,EAASG,OACV,OAEJ,MAAMgU,EAAanU,aAAQ,EAARA,EAAUG,OAAO5X,WAC9BsyB,EAAyChuC,KAAKmrC,gCAAgCpnC,MAChFmrC,GAAkCA,EAA+B5H,aAAeA,IAEhF0G,EACAA,EAAuCE,uBAAyBC,EAEhEnuC,KAAKmrC,gCAAgCl8B,KAAK,CAAEq4B,aAAY4G,uBAAwBC,GAAkB,QAvB1G,CACI,MAAMH,EAAyChuC,KAAKmrC,gCAAgCpnC,MAChFmrC,GAAkCA,EAA+B5H,aAAeA,IAEhF0G,EACAA,EAAuCE,uBAAyBC,EAEhEnuC,KAAKmrC,gCAAgCl8B,KAAK,CAAEq4B,aAAY4G,uBAAwBC,GAE7E,CAgBT,EAGW,KAAA8C,oCAAsC,CAACnqB,EAA4Cqf,KAChG,MAAM+K,EAAepqB,EAAMiqB,cAAc95B,MACzCkvB,EAAUpQ,SAAQ5C,IACd,IAAKA,EAASG,OACV,OAEJ,MAAMgU,EAAanU,aAAQ,EAARA,EAAUG,OAAO5X,WAC9BsyB,EAAyChuC,KAAKmrC,gCAAgCpnC,MAChFmrC,GAAkCA,EAA+B5H,aAAeA,IAEpF,GAAI0G,EACAA,EAAuCjD,oBAAsBmG,MAC1D,CACH,MAAM/C,OAA2C9qC,IAA1B8vB,EAAS/qB,aAA6B+qB,EAAS/qB,aAAe,GACrFpI,KAAKmrC,gCAAgCl8B,KAAK,CACtCq4B,aACA4G,uBAAwBC,EACxBpD,oBAAqBmG,GACtB,IAET,EAGW,KAAApD,QAAU,KACyB,qCAA1C9tC,KAAKP,MAAMoC,OAAO6pC,0BACpB1rC,KAAKP,MAAMk2B,YAAYmY,SAAU,EAIxB,KAAA1W,WAAa,KACsB,qCAA1Cp3B,KAAKP,MAAMoC,OAAO6pC,0BACpB1rC,KAAKP,MAAMk2B,YAAYyB,YAAa,EAI3B,KAAAkX,UAAY,KACpBtuC,KAAKurC,8BACNvrC,KAAKP,MAAMk2B,YAAY2Y,WAAY,EAI1B,KAAA6C,wCAA0C,KACvD,MAAM,UAAE7uC,EAAS,OAAET,GAAW7B,KAAKP,MAC7BkwC,EAAoB3vC,KAAKisC,0BAC/B,IAAKhrC,EAAAA,gBAAgBC,YAAYyuC,KAAuB1uC,EAAAA,gBAAgBC,YAAYlB,KAAKkrC,sBACrF,OAAO,KAEX,MAAM37B,EAAgBvP,KAAKoxC,iBAAiBvvC,EAAO0N,eAC7C8hC,GAAkE,IAArCxvC,EAAOyvC,4BAAgF,IAA1CtxC,KAAK8rC,iCACrF,OACIvsC,EAAAA,cAAA,OAAKoC,UAAU,+CACV3B,KAAKkrC,qBAAqBr8B,KAAI,CAACu3B,EAAqDvjB,KACjF,MAAMykB,OAAiDjkC,IAApC+iC,EAAoBiB,YAA4BjB,EAAoBiB,YAAY,GAAK,GAClGkK,EAAY5B,EAAkB5rC,MAAKovB,IAAQ,IAAAhY,EAAAq2B,EAAA,OAA+C,QAA/Cr2B,EAAImsB,KAAenU,SAAgB,QAARqe,EAARre,EAAUG,cAAM,IAAAke,OAAA,EAAhBA,EAAkB91B,mBAAU,IAAAP,EAAAA,EAAI,EAAE,IAChGgY,EAAWwc,EAAkB7pC,QAC/BqtB,IAAQ,IAAAse,EAAAC,EAAA,OAAItL,IAAmE,QAAhDqL,EAAKnK,KAAenU,SAAgB,QAARue,EAARve,EAAUG,cAAM,IAAAoe,OAAA,EAAhBA,EAAkBh2B,mBAAU,IAAA+1B,EAAAA,EAAI,GAAG,IAE1F,QAA4BpuC,IAAxB+iC,EAAmC,CAAC,IAADuL,EAAAC,EAAAC,EAAA1K,EACnC,MAAM+G,EAEL,QAF2ByD,EAAG3xC,KAAKmrC,gCAAgCpnC,MAChEmrC,GAAkCA,EAA+B5H,aAAenU,EAAS,GAAGG,gBAC/F,IAAAqe,OAAA,EAF8BA,EAE5BzD,uBACH,OACI3uC,EAAAA,cAAA,OAAKoC,UAAU,oDAAoD0O,IAAKi3B,GACpE/nC,EAAAA,cAAA,OAAKoC,UAAU,6DACXpC,EAAAA,cAACsmC,EAAkC,CAC/BiM,WAAW,EACXC,aAAa,EACbjM,UAAWxjC,EAAU0vC,kCACrBlb,KAAK,UACL7f,MAA8C,QAAzC26B,EAAEL,SAA0B,QAAjBM,EAATN,EAAWxC,uBAAe,IAAA8C,OAAA,EAA1BA,EAA4BI,mBAAW,IAAAL,EAAAA,EAAI,MAG1DryC,EAAAA,cAAA,OAAKoC,UAAU,0DACXpC,EAAAA,cAAA,OAAKoC,UAAU,+DACXpC,EAAAA,cAAA,QAAMoC,UAAU,iEACXW,EAAU4vC,mCAEf3yC,EAAAA,cAAA,QAAMoC,UAAU,iEACXW,EAAU6vC,kCAEdd,EACG9xC,EAAAA,cAAC6yC,EAA4B,CACzB5M,UAAWljC,EAAU4vC,kCACrBpoC,iBAAkB9J,KAAK8J,iBACvBkG,QAAS1N,EAAU+vC,6CACnBnM,eAAgB5jC,EAAUgwC,uDAC1BrM,cAAe3jC,EAAUiwC,yCACzBpM,UAAWwJ,EACXvJ,oBAAqBA,EACrBzkC,UAAU,oEACVipB,SAAU5qB,KAAKixC,sCAEnB,KACJ1xC,EAAAA,cAACkrC,EAAoC,CACjC9oC,UAAU,yDACVmF,gBAAiBs/B,EAAoBt/B,gBACrCkE,UAAW1I,EAAU0I,UACrB68B,eAAgBqG,QAAAA,EAA0B,GAC1C1iC,SAAUxL,KAAKP,MAAM+L,SACrBxI,QAAShD,KAAKP,MAAMuD,QACpBmjC,UAAWwJ,EACXvJ,oBAAqBA,EACrBkB,WAAYiK,aAAS,EAATA,EAAWje,OACvB1I,SAAU5qB,KAAKgxC,+BACfxL,UAAWljC,EAAU4vC,kCACrBpoC,iBAAkB9J,KAAK8J,iBACvB89B,SAAU,GACVtC,YAAa,EACbC,aAAc,EACdmC,UAAW,mBAAmB6J,aAAS,EAATA,EAAWje,UAAUzQ,OAG3B,QAD1BskB,EACLf,EAAoBiB,mBAAW,IAAAF,OAAA,EAA/BA,EAAiCt4B,KAAIy4B,IAAa,IAAAkL,EAAAzxC,EAAAse,EAC/C,MAAMkyB,EAAY5B,EAAkB5rC,MAChCovB,IAAQ,IAAAsf,EAAAC,EAAA,OAA+C,QAA/CD,EAAInL,KAAenU,SAAgB,QAARuf,EAARvf,EAAUG,cAAM,IAAAof,OAAA,EAAhBA,EAAkBh3B,mBAAU,IAAA+2B,EAAAA,EAAI,EAAE,IAE3DE,EAGL,QAH4BH,EAAGxyC,KAAKmrC,gCAAgCpnC,MACjEmrC,GACIA,EAA+B5H,cAAeiK,aAAS,EAATA,EAAWje,iBAChE,IAAAkf,OAAA,EAH+BA,EAG7BtE,uBACH,OACI3uC,EAAAA,cAACgpC,EAAY,CACTl4B,IAAKi3B,EACL3lC,UAAU,+DACVqB,QAAShD,KAAKP,MAAMuD,QACpBmjC,eAAyB9iC,IAAdkuC,EAA0B,CAACA,GAAa,GACnDhgB,SAAkC,QAA1BxwB,EAAEf,KAAKP,MAAM4B,KAAKkwB,gBAAQ,IAAAxwB,OAAA,EAAxBA,EAA0BO,OACpCiO,cAAeA,EACfjE,aAActL,KAAKP,MAAMuD,QAAQC,QAAQqI,aACzCu8B,eAAgB8K,QAAAA,EAA2B,GAC3CrL,WAAYiK,aAAS,EAATA,EAAWje,OACvBhxB,UAAW,CACP2nC,aAAc3nC,EAAU2nC,aACxBC,mBAAoB5nC,EAAU4nC,mBAC9BC,oBAAqB7nC,EAAUswC,sBAC/Bx9B,0BAA2B9S,EAAU8S,0BACrCE,yBAA0BhT,EAAUgT,yBACpCE,0BAA2BlT,EAAUkT,0BACrCD,2BAA4BjT,EAAUiT,2BACtCy0B,2BAA4B1nC,EAAUynC,sBACtC/+B,UAAW1I,EAAU0I,UACrBw6B,UAAWljC,EAAU4vC,kCACrBvJ,iBAAkBrmC,EAAUqmC,iBAC5B6B,oBAAqBloC,EAAUkoC,qBAEnCnC,aAAcroC,KAAKqoC,aACnBjuB,SAAkC,QAA1BiF,EAAErf,KAAKP,MAAM4B,KAAK+Y,gBAAQ,IAAAiF,OAAA,EAAxBA,EAA0B/d,OACpCsmC,SAAU5nC,KAAKP,MAAM8G,GACrBiF,SAAUxL,KAAKP,MAAM+L,SACrB69B,iCAAiC,EACjCviC,gBAAiBs/B,EAAoBt/B,gBACrC8jB,SAAU5qB,KAAKgxC,+BACflnC,iBAAkB9J,KAAK8J,iBACvBw7B,YAAa,EACbC,aAAc,GAChB,KAIZ,CAGV,OAAO,IAAK,IAGlB,EAIG,KAAAuL,wBAA0B9rC,UAAmD,IAAA80B,EAC1F,IAAK95B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC1B,OAGJ,MAAM,QAAE0B,EAAO,UAAEV,EAAS,OAAET,GAAW7B,KAAKP,MACtC2oB,EAA2C,QAAlC0R,EAAG95B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAw4B,OAAA,EAA/BA,EAAiCtI,aAEnD,GAAIxuB,EAAS,CACThD,KAAK6N,WAAY,EACjB7N,KAAK8G,gBAAkB,GACvB9G,KAAK6nC,eAAiB,GACtB7nC,KAAKwtC,aAEL,IACI,IAAIkC,EAA+B,GACnC,MAAMC,EAAoB3vC,KAAKisC,0BACzB8B,EAAmC,GACzC,GAAI9sC,EAAAA,gBAAgBC,YAAYyuC,GAAoB,CAChD,MAAMkD,EAAsB3vB,GAAsB4vB,IAAQ5vB,GAAOlf,IAAI,IAAA+uC,EAAA,OAAwB,QAAxBA,EAAI/uC,EAAK+qC,uBAAe,IAAAgE,OAAA,EAApBA,EAAsB18B,QAAQ,IACvG03B,EAAqB9+B,KAAK4jC,EAAmBlD,IAC7C1I,QAAQC,IAAI,wCAAyC,CAEzD,MAAM0I,EAA2BD,GAAqBA,EAAkBtpC,OAAS,GAAKspC,EAAkB,GAAGvnC,aACrGjD,EAAOijB,EAAUjjB,KAavB,IAAI4qC,EACJ,GAbIH,IAEAF,EAAuBC,EAAkB,GAAGvnC,cAAgB,SAGtDggB,EAAUynB,kCAAkC,CAC9C1qC,OACA2qC,mCAAoC9vC,KAAKmN,+BAOzC,SADAtL,EAAOmuC,yBAEPD,EAAuBE,EAAAA,yBAAyBC,UAMhDH,EAAuBE,EAAAA,yBAAyBE,gCAExD,IAAI1mB,EAA6C,GACjD,QAAwBpmB,IAApB2vB,QAA8D3vB,IAA7B2vB,EAAgB3c,SAAwB,CACzE,MAAMohB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OACzC+lC,EAAcsI,EAAkB9gC,KAAIskB,QAAiC9vB,IAApB8vB,EAASG,OAAuBH,EAASG,OAAS,WACnG1K,EAAAA,EAAAA,yBACF,CACIC,cAAe7lB,EAAQ6F,cACvBigB,oBAAqBC,EAAAA,yBAAyBC,qCAAqChmB,EAAQ6F,gBAE/F1D,EAAK6uB,GACLhB,EACA,GACA+c,GACA,GACFpoC,MAAK3C,UACC1D,GAAUA,EAAO+E,OAAS,GAC1BojB,EAASxa,KAAK,CAAEnI,gBAAiBxF,EAAQ24B,UAAU,EAAOpuB,WAAOxI,EAAWgkC,YAAaA,IACzFsI,SAAAA,EAAmB5Z,SAAQ5C,IACvBA,EAAS4b,gBAAkB/b,CAAe,UAExCyE,EAAcjG,aAAa4d,gBAAgB,CAAEC,uBAAwBM,KAG3ElmB,EAASxa,KAAK,CACVnI,gBAAiB,GACjBmzB,UAAU,EACVpuB,MAAO,gCACPw7B,YAAaA,GACd,GAER,KACA,CACH,MAAM2L,EAAY,IAAIC,EAAAA,0CAA0ClD,EAAsBJ,GACtFlmB,QAAiBypB,EAAAA,EAAAA,sCAAqCF,EAAWhwC,EAAQ6F,cAAe,CAExF4gB,GAAYA,EAASpjB,OAAS,IAC9BrG,KAAKkrC,qBAAuBzhB,EAC5Bwd,QAAQC,IAAI,yBAEyB,IAArClnC,KAAKkrC,qBAAqB7kC,OAC1BrG,KAAKutC,SAASjrC,EAAU+tC,yBACwB,IAAzCrwC,KAAKqrC,yBAAyBhlC,QACrCrG,KAAKmrC,gCAAkCnrC,KAAKqrC,yBAC5CrrC,KAAKqrC,yBAA2B,GAChCrrC,KAAK8tC,YAEL9tC,KAAKo3B,aACLp3B,KAAKkrC,qBAAqBnV,SAAQ8Y,IAAQ,IAAAsE,EACtC,MAAMjF,EACFW,EAAM/nC,gBAAgBT,OAAS,QAAuChD,IAAlCwrC,EAAM/nC,gBAAgB,GAAGkI,KACvD6/B,EAAM/nC,gBAAgB,GAAGkI,KACzB,GACO,QAAjBmkC,EAAAtE,EAAMxH,mBAAW,IAAA8L,GAAjBA,EAAmBpd,SAAQuR,IACvB,MAAM0G,EAAyChuC,KAAKmrC,gCAAgCpnC,MAChFkqC,GAA0BA,EAAuB3G,aAAeA,IAEhE0G,EACAA,EAAuCE,uBAAyBA,EAEhEluC,KAAKmrC,gCAAgCl8B,KAAK,CACtCq4B,aACA4G,0BACD,GAET,KAIN0B,SACM5vC,KAAK4tC,gCAAgC8B,EAGF,CAD/C,MAAA0D,GACEpzC,KAAKutC,SAASjrC,EAAU+zB,oBAAqB,CAAD,CAGpDr2B,KAAK6N,WAAY,CAAK,EAQT,KAAAujC,iBAAoB7hC,GAE7BA,GAAiB,CACbjG,UAAW,CACPC,GAAI,CAAEC,EAAG,gBAAiBC,EAAG,EAAGC,EAAG,GACnCgY,GAAI,CAAElY,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAKL,KAAAwpC,kCAAoC,KAAsC,IAAAp+B,EACvF,MAAMsc,EAAmC,QAA3Btc,EAAGjV,KAAKP,MAAM4B,KAAKkwB,gBAAQ,IAAAtc,OAAA,EAAxBA,EAA0B3T,OACrCgyC,EAAkD,GA0CxD,OAxCAtzC,KAAKmrC,gCAAgCt8B,KAAIo/B,IAAyB,IAAA/T,EAC9D,MAAM/G,EAA0C,QAAlC+G,EAAGl6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA44B,GAA6B,QAA7BA,EAA/BA,EAAiC1I,aAAarsB,KAAK+tB,iBAAS,IAAAgH,OAAA,EAA5DA,EAA8Dn2B,MAC1EovB,GAAuBA,EAASG,SAAW2a,EAAuB3G,aAEvE,GAAInU,EAAU,CAAC,IAADogB,EAAAhhB,EAAAihB,EAAAC,EACV,MAAMhuC,EAAU8rB,aAAQ,EAARA,EAAUxtB,MAAM0B,GAA2BA,EAAQ4Q,WAAa8c,EAAS2B,YACnF+V,EAA0B,CAC5BhvB,eAAgB7b,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eACjDla,UAAW,8DACX8e,QAAShb,aAAO,EAAPA,EAASxB,KAClBsc,IAA6B,QAA1BgzB,EAAE9tC,aAAO,EAAPA,EAAS8nB,uBAAe,IAAAgmB,EAAAA,EAAI,GACjCG,aAAaC,EAAAA,EAAAA,qBACTluC,aAAO,EAAPA,EAASkpB,OACT3uB,KAAKP,MAAMuD,QAAQ6F,cAAcgT,eAAeZ,YAClB,QAD6BsX,EAC3DvyB,KAAKP,MAAMuD,QAAQC,QAAQqE,WAAG,IAAAirB,GAAQ,QAARA,EAA9BA,EAAgC1wB,cAAM,IAAA0wB,OAAA,EAAtCA,EAAwCzS,kBAE5CxU,aAActL,KAAKP,MAAMuD,QAAQC,QAAQqI,aACzCiE,cAA8C,QAAjCikC,EAAExzC,KAAKP,MAAMoC,OAAO0N,qBAAa,IAAAikC,EAAAA,EAAInqC,EAClDgd,oBAAqB,SAEzB,IAAIutB,EAEH,QAFmBH,EAAGzzC,KAAK8G,gBAAgB/C,MACxC6K,GAAkBA,EAAeI,OAASi/B,EAAuBC,gCACpE,IAAAuF,OAAA,EAFsBA,EAEpBrjC,YACH,GAAI2d,EAAAA,iBAAiBqX,cAAcwO,GAAmB,CAClD,MAAM/E,EAAQ7uC,KAAKkrC,qBAAqBnnC,MAAK8qC,IAAK,IAAAgF,EAAA,OAAqB,QAArBA,EAAIhF,EAAMxH,mBAAW,IAAAwM,OAAA,EAAjBA,EAAmBrS,SAASyM,EAAuB3G,WAAW,IAC9G14B,EAAiBigC,aAAK,EAALA,EAAO/nC,gBAAgB/C,MAC1CoL,GAAUA,EAAOH,OAASi/B,EAAuBC,yBAErD0F,EAAmBhlC,aAAc,EAAdA,EAAgBwB,WAAY,CAEnD,MAAM0jC,EAAkB,CACpBlJ,OAAQzX,EAASG,OACjBuX,WAAYA,EACZC,mBAAoB8I,EACpB7I,oBAAqBkD,EAAuBlD,qBAEhDuI,EAAerkC,KAAK6kC,EAAiB,KAItCR,CAAc,EA3jCrBtzC,KAAK8J,kBAAmBC,EAAAA,EAAAA,oBACpB/J,KAAKP,MAAMuD,QAAQC,QAAQ+G,kBAC3BhK,KAAKP,MAAMwK,aACXjK,KAAKP,MAAMyK,WAEflK,KAAKurC,6BACDvrC,KAAKP,MAAMoC,OAAO6pC,0BAAsE,SAA1C1rC,KAAKP,MAAMoC,OAAO6pC,yBACpE1rC,KAAK8rC,iCAAmC9rC,KAAKP,MAAMoC,OAAOkyC,+BAC1D/zC,KAAKg0C,uBAA8D3wC,IAA1CrD,KAAKP,MAAMoC,OAAOoyC,oBAAoCj0C,KAAKP,MAAMoC,OAAOoyC,oBAAsB,CAC3H,CAlDsBC,kBAClB,MAAgF,aAAxEl0C,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASnpB,OACxE,CAEcygC,mBACV,OAAO7D,IAAIxkC,KAAKP,MAAO,mCAC3B,CAEW67B,wCAAiC,IAAA7kB,EAAAC,EAExC,MAAM+kB,EAEe,QAFLhlB,EACQ,QADRC,EACZ1W,KAAKP,MAAM4B,KAAK8D,YAAI,IAAAuR,GAAQ,QAARA,EAApBA,EAAsBpV,cAAM,IAAAoV,GAAM,QAANA,EAA5BA,EAA8BvR,YAAI,IAAAuR,GAAqB,QAArBA,EAAlCA,EAAoCiF,2BAAmB,IAAAjF,GAA4D,QAA5DA,EAAvDA,EAAyD3S,MAAK23B,GAA6B,0BAAjBA,EAASC,aAAgC,IAAAjlB,GAAO,QAAPA,EAAnHA,EAAqHzQ,aAAK,IAAAyQ,OAAA,EAA1HA,EACMklB,mBAAW,IAAAnlB,EAAAA,EAAI,GAEzB,OAAOglB,EAAa5W,KAAKgX,MAAMJ,GAAc,IACjD,CAEWkV,wCAAiC,IAAAwD,EAAAC,EACxC,OAAiF,QAAjFD,EAA6C,QAA7CC,EAAOp0C,KAAKs7B,yCAAiC,IAAA8Y,OAAA,EAAtCA,EAAwC3X,0CAAkC,IAAA0X,GAAAA,CACrF,CAiCOnvC,0BAAuB,IAAA+1B,GAC1BgB,EAAAA,EAAAA,KACI,IAAM/7B,KAAKk0C,cACXlvC,UAAW,IAAAq1B,EAE6B,QAA/BA,EAAAr6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA+4B,GAA/BA,EAAiCd,0BAA4Bv5B,KAAK2rC,WACnE3rC,KAAK2wC,yCAKC,IAAIxpC,SAAQC,GAAWitC,WAAWjtC,EAASpH,KAAKg0C,2BAHhDh0C,KAAKsrC,MAKO,KAK9B9N,EAAAA,EAAAA,KACI,SAAAlD,EAAA,OAAqC,QAArCA,EAAMt6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAg5B,OAAA,EAA/BA,EAAiCtH,eAAe,IACtDhuB,UAAW,IAAAu1B,QACDv6B,KAAKgsC,sBACXhsC,KAAKP,MAAMk2B,YAAY+Y,kBAAiB,SAEH,QAArCnU,EAAMv6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAi5B,OAAA,EAA/BA,EAAiCkT,mCAAmC,CAAEC,iCAAiC,IAAO,KAI5HlQ,EAAAA,EAAAA,KACI,SAAAhD,EAAA,OAAqC,QAArCA,EAAMx6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAk5B,OAAA,EAA/BA,EAAiCiW,4BAA4B,IACnEzrC,UAAW,IAAAy1B,QACDz6B,KAAKgsC,sBACXhsC,KAAKP,MAAMk2B,YAAY+Y,kBAAiB,SAEH,QAArCjU,EAAMz6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAm5B,OAAA,EAA/BA,EAAiCgT,mCAAmC,CAAEC,iCAAiC,IAAO,KAI5HlQ,EAAAA,EAAAA,KACI,SAAA3C,EAAA,OAAqC,QAArCA,EAAM76B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAu5B,OAAA,EAA/BA,EAAiCtB,wBAAwB,IAC/Dv0B,UACgG,IAAD81B,EAAvFvB,GAA4Bv5B,KAAK2rC,YAAc3rC,KAAK2wC,0CAC9C3wC,KAAKgsC,sBACXhsC,KAAKP,MAAMk2B,YAAY+Y,kBAAiB,SAEH,QAArC5T,EAAM96B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAw5B,OAAA,EAA/BA,EAAiC2S,mCAAmC,CAAEC,iCAAiC,KAAO,IAK7F,QAAnC3S,EAAI/6B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAy5B,GAA/BA,EAAiC3B,6CACjCoE,EAAAA,EAAAA,KACI,SAAAxC,EAAA,OAAqC,QAArCA,EAAMh7B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA05B,OAAA,EAA/BA,EAAiC+D,aAAa,IACpDA,IAEQA,GACAA,EAAcG,gBAAkBC,EAAAA,cAAc8L,yBAC9ClM,EAAc3+B,cAEdJ,KAAKutC,SAASxO,EAAc3+B,aAAc,KAKtDo9B,EAAAA,EAAAA,KACI,SAAAnC,EAAA,OAAqC,QAArCA,EAAMr7B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA+5B,OAAA,EAA/BA,EAAiCiZ,kBAAkB,IACzDA,IACQA,IAAuBC,EAAAA,eAAetJ,0BACtCrL,EAAAA,EAAAA,IAAqB5/B,KAAKswB,iBAAkBtwB,KAAKP,MAAMuD,QAAQ6F,cAAe,IAKlG,CAEOsiB,sBAAsBC,EAAgDC,GACzE,OAAIrrB,KAAKY,QAAUyqB,GAAarrB,KAAKP,MAAM4B,OAAS+pB,EAAU/pB,IAIlE,CAEOP,SAAM,IAAA0zC,EAAAxgC,EAOT,GALAhU,KAAKmN,4BAAyE,QAA9CqnC,EAAGx0C,KAAKP,MAAM4B,KAAK8L,mCAA2B,IAAAqnC,OAAA,EAA3CA,EAA6ClzC,OAChFtB,KAAKorC,kCAAgE,QAA/Bp3B,EAAGhU,KAAKP,MAAM4B,KAAKwC,oBAAY,IAAAmQ,GAAQ,QAARA,EAA5BA,EAA8B1S,cAAM,IAAA0S,GAE5E,QAF4EA,EAApCA,EAAsCjQ,MAC3EkQ,GAHkC,oEAGvBA,EAAQhQ,cACtB,IAAA+P,OAAA,EAFwCA,EAEtC9P,WAEElE,KAAK2rC,UAEN,OADA3rC,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,kEAC5B,KAGX,MACI8pB,aAAa,QAAEK,EAAO,WAAEye,EAAU,SAAExa,IACpCj6B,KAAKP,MACHi1C,GAAW10C,KAAK6N,WAAaosB,EAC7B0a,GAAc30C,KAAK6N,YAAcosB,GAAYwa,IAAez0C,KAAKurC,6BACjEqJ,GAAkB50C,KAAK6N,YAAcosB,GAAYjE,GACjD,kBAAEuW,EAAiB,wBAAEsI,GAA4B70C,KAAKP,MAAM6C,UAE5DwyC,EAAkD,CACpDnK,gBAAiB,+BACjBxE,UAHqBnmC,KAAKqzC,oCAGEvtC,QAAOivC,IAAMxtB,EAAAA,iBAAiBC,kBAAkButB,MAG1EzB,EAAkC/zC,EAAAA,cAACmrC,EAAyBvkC,OAAA8C,OAAA,GAAK6rC,IAEjEvzC,EAASC,EAAAA,EAAA,GACRxB,KAAKP,OAAK,IACbstC,uBAAwB/sC,KAAK+sC,uBAC7BlF,eAAgB7nC,KAAK6nC,eACrBmN,oBAAqBh1C,KAAK8G,gBAC1B+G,UAAW7N,KAAK6N,UAChBu1B,MAAOpjC,KAAKI,cAAgBb,EAAAA,cAAC01C,EAAAA,EAAc9uC,OAAA8C,OAAA,GAAK,CAAE5G,MAAOkqC,EAAmBvgC,QAAShM,KAAKI,gBAC1F80C,iBAAkBl1C,KAAKI,aACvB+0C,UAAW,CACPtnC,UAAW7N,KAAK6N,UAChB6mC,UACAC,aACAC,iBACAQ,iBAAkBT,IAAe30C,KAAKP,MAAMk2B,YAAY0f,uBACxDC,iBAAkBV,IAAmB50C,KAAKP,MAAMk2B,YAAY0f,uBAC5DE,mBAAoBZ,IAAe30C,KAAKP,MAAMk2B,YAAY0f,0BAA4Br1C,KAAK6rC,0BAE/FZ,wBAAyB,CACrBvpC,YAAa1B,KAAKP,MAClBkC,UAAW6zC,IAAU,+BAAgCx1C,KAAKP,MAAMoC,OAAOF,YAE3EmF,gBAAiB,CACb2uC,oBAAqB,CACjB9zC,UAAW,qCACX2kB,KAAM,OACN,aAAcuuB,GAElBa,KAAM11C,KAAK2sC,yBAEfgJ,uBAAwB31C,KAAKmsC,4BAC7B/rC,aAAcJ,KAAKssC,kBACnBsJ,QAASr2C,EAAAA,cAAC+jC,EAAAA,QAAO,MACjBhT,iBAAkBtwB,KAAKswB,iBACvBulB,qCAAsC71C,KAAKmxC,0CAC3C2E,sCAAuC91C,KAAK8rC,iCAC5CwH,iBACAyC,WAAY/1C,KAAKgtC,gBACjBgJ,WAAYh2C,KAAKmtC,gBACjB8I,aAAcj2C,KAAKqtC,kBACnBH,OAAQltC,KAAKktC,OACbrI,OAAQ7kC,KAAK6kC,OACb2G,SAAUxrC,KAAKwrC,WAGnB,OAAOxrC,KAAKP,MAAMuC,WAAWT,EACjC,IA1NYujC,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,sCAECpR,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,uCAECpR,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,iCAECpR,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,oCAECpR,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,4CAECpR,EAAAA,EAAAA,IAAA,CAAXoR,EAAAA,IAAU,uDAEDpR,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,kCA6MTD,EAAAA,EAAAA,IAAA,CADCE,EAAAA,IAAM,4BAmQPF,EAAAA,EAAAA,IAAA,CADCE,EAAAA,IAAM,2DA/dLiG,GAAuBnG,EAAAA,EAAAA,IAAA,CAF5BG,EAAAA,gBACAC,EAAAA,IACK+F,GAqnCN,iTC7rCA,MAAMkL,EAAkBC,GAAyCpxC,UAC7D8hB,EAAMK,uBACAivB,GAAiB,EAQrBC,EAAyBC,GAA6DxvB,IACxF,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EF,EAAsBr/B,EAAM,EAQ1Bw/B,EAAsBC,GAAuD5vB,IAC/E,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EE,EAAmBz/B,EAAM,EASvB0/B,EAAsBC,GAAuD9vB,IAC/E,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EI,EAAmB3/B,EAAM,EAGhB4/B,EAAWC,IACpB,MAAM,aACF12C,EAAY,SACZ22C,EAAQ,YACRC,EAAW,YACXC,EAAW,eACXC,EAAc,YACdC,EAAW,YACXC,EAAW,sBACXd,EAAqB,mBACrBI,EAAkB,mBAClBE,EAAkB,gBAClBR,EAAe,wBACfiB,EAAuB,iBACvBC,EAAgB,mBAChBC,EACAj1C,WAAW,oBACPk1C,EAAmB,kBACnBC,EAAiB,oBACjBC,EAAmB,iBACnBC,EAAgB,iBAChBC,EAAgB,mBAChBC,EAAkB,2BAClBC,EAA0B,2BAC1BC,IAEJjB,EAEEkB,EAAY,CACdr2C,UAAWC,IAAW,8BAA+B,CAAE,eAAgBxB,IACvEqrC,SAAU0K,EAAeC,GACzBpzB,IAAK,QAGH+J,EACFxtB,EAAAA,cAAA,SAAOgH,GAAG,+BAA+B5E,UAAU,sCAC9C81C,GAIHQ,EACF14C,EAAAA,cAAA,SAAOgH,GAAG,yCAAyC5E,UAAU,0CACxDg2C,GAIHO,EACF34C,EAAAA,cAAA,SAAOgH,GAAG,yCAAyC5E,UAAU,0CACxDi2C,GAIHO,EACF54C,EAAAA,cAAA,SAAOgH,GAAG,qCAAqC5E,UAAU,4CACpDk2C,GAIHzU,EACF7jC,EAAAA,cAAC4D,EAAAA,MAAK,CACF6f,IAAI,OACJzc,GAAG,+BACH5E,UAAU,qCACV2kB,KAAK,QACL8xB,WAAW,EACXC,MAAM,EACNC,mBAAmB,EACnB53C,SAAUN,GAETA,GAoBHm4C,EACFh5C,EAAAA,cAAA,SACIkD,IAAKs0C,EACLrR,KAAK,OACL/jC,UAAU,iDAAgD,aAC9C+1C,EACZ9sB,SAAUyrB,EAAsBC,GAChCr/B,MAAOigC,EAAc,kBACL,8DAIlBsB,EACFj5C,EAAAA,cAAA,SACIkD,IAAKu0C,EACLtR,KAAK,OACL/jC,UAAU,oDAAmD,aACjDg2C,EACZc,YAAaX,EACbltB,SAAU6rB,EAAmBC,GAC7Bz/B,MAAOkgC,EAAW,kBACF,8DAIlBuB,EACFn5C,EAAAA,cAAA,SACIkD,IAAKw0C,EACLvR,KAAK,OACL/jC,UAAU,oDAAmD,aACjD,GAAGi2C,KAAoBG,IACnCU,YAAaV,EACbntB,SAAU+rB,EAAmBC,GAC7B3/B,MAAOmgC,EAAW,mBACD,8DAInBuB,EACFp5C,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAU,mCACVS,QAAS+zC,EAAeC,GAAgB,aAC5BoB,EACZ9mC,SAAU6mC,IAAuBL,GAEhCM,GAIT,IAAIoB,GAAuB,EACvBC,GAAuB,EAE3B,OAAQvB,GACJ,IAAI,MACAsB,GAAuB,EACvB,MACJ,IAAI,iBACAC,GAAuB,EACvB,MACJ,IAAI,uBACAD,GAAuB,EACvBC,GAAuB,EAK/B,MAAO,CACHb,YACAjrB,QACAkrB,gBACAC,gBACA9U,QACA0V,WAxFe,CACfn3C,UAAW,uCAwFXo3C,cArFkB,CAClBp3C,UAAW,2CAqFXq3C,cAlFkB,CAClBr3C,UAAW,2CAkFXs3C,cA/EkB,CAClBt3C,UAAW,2CA+EX42C,cACAC,WACAE,WACAC,cACAtB,0BACAuB,uBACAC,uBACAV,kBACH,EC9OCe,EAAkBA,CAACC,EAAoDC,IAA8B,KAAW,IAAAC,EAClHF,EAA4B,QAAZE,EAACD,EAASplB,UAAE,IAAAqlB,EAAAA,EAAI,GAAG,EAgB1BC,EAAUn+B,IAMI,IANH,SACpBi+B,EAAQ,kBACRG,EAAiB,UACjBC,EAAS,iBACTL,EACA72C,WAAW,qBAAEm3C,EAAoB,8BAAEC,EAA6B,qBAAEC,IACtDx+B,EACZ,MAAMy+B,EAAUL,EAAkBH,EAASS,QAAST,EAASU,kBACvDC,GAAsBX,EAASplB,IAAM,IAAIgmB,QAAQ,GAMjDC,EACF16C,EAAAA,cAAA,QAAMoC,UAAU,oCACX83C,EACA,IACAM,EACA,KACAL,EACA,IACDn6C,EAAAA,cAAA,QAAMoC,UAAU,kCAAkCi4C,GACjD,KAIHM,EAAeV,GACjBj6C,EAAAA,cAAC4C,EAAAA,OAAM,CAACR,UAAU,oCAAoCS,QAAS82C,EAAgBC,EAAkBC,IAC5FO,GAIT,MAAO,CACHQ,UAxBc,CACdx4C,UAAW,+BAwBX4E,GAAI6yC,EAASplB,GACbimB,mBACAC,eACH,EC9DQE,EAAUj/B,IAA+G,IAA9G,UAAEk/B,EAAS,UAAEb,EAAS,UAAEl3C,EAAS,kBAAEi3C,EAAiB,iBAAEJ,GAAiCh+B,EAC3G,IAAKk/B,GAAkC,IAArBA,EAAUh0C,OACxB,OAiBJ,MAAO,CACHi0C,UAfc,CACd34C,UAAW,+BAeX+zC,KAZS2E,EAAUxrC,KAAIuqC,GACvBE,EAAQ,CACJE,YACAD,oBACAH,WACAD,mBACA72C,gBAOP,ECpCL,EAFqD6Y,IAAA,IAAC,MAAE9Y,GAAO8Y,EAAA,OAAK5b,EAAAA,cAAA,SAAOoC,UAAU,gCAAgCU,EAAc,MCkC9Hk4C,klBAAL,SAAKA,GACDA,EAAA,oBACAA,EAAA,oBACAA,EAAA,WACH,CAJD,CAAKA,IAAAA,EAAqB,KA4C1B,IAAaC,EAAb,cAAsCj7C,EAAAA,UAAtCC,cAAA,IAAA0wB,EAAA,2BACW,KAAAtvB,MAAgC,CACnC65C,oBAAoB,EACpBr6C,aAAc,GACd82C,eAAgB,GAChBC,YAAa,GACbC,YAAa,IAGA,KAAAL,SAA8Cx3C,EAAAA,YAE9C,KAAAy3C,YAAiDz3C,EAAAA,YAEjD,KAAA03C,YAAiD13C,EAAAA,YAEjD,KAAA+wB,iBAAiD/wB,EAAAA,YAqLjD,KAAA+rC,KAAO,KAAW,IAAAxa,EAAAM,EAC/BpxB,KAAKP,MAAMk2B,YAAY2V,KAAI9pC,EAAC,CACxBqjC,OAAQ7kC,KAAK6kC,OACb2G,SAAUxrC,KAAKwrC,SACfC,SAAUzrC,KAAKyrC,SACfiP,YAAY,IACP16C,KAAK26C,aAAe,CAAE/yC,OAAQ,cAGvC,MAAMyyC,EAA2C,QAAlCvpB,EAAG9wB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwvB,OAAA,EAA/BA,EAAiC8pB,gBAC/CP,GAAaA,EAAUh0C,OAAS,EAChCrG,KAAKP,MAAMk2B,YAAYmY,UACe,QAAnC1c,EAAIpxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA8vB,GAA/BA,EAAiCe,kCACxCnyB,KAAKP,MAAMk2B,YAAYklB,QAAS,EAIvB,KAAAC,oBAAsB,KAAc,IAAAnpB,EACjD,MAAMxsB,EAAOnF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAqD,QAA/CqwB,EAAG3xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,oBAAY,IAAAG,OAAA,EAA5CA,EAA8CxsB,UAAO9B,EACpG,QAAK8B,IAKGA,EAAK+1B,aAAe,GAAK,CAAC,EAGrB,KAAAyf,UAAY,OAEpB36C,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKC,iBACjC/gC,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,oBAAsBR,EAAsBS,WACzEh7C,KAAKP,MAAMoC,OAAOo5C,0BAIhBj7C,KAAK86C,sBAGC,KAAAjW,OAAS,KACtB7kC,KAAKP,MAAMyK,UAAUgV,YAAY,+CAGjClf,KAAKP,MAAMk2B,YAAYyB,YAAY,EAGtB,KAAAoU,SAAW,KACxBxrC,KAAKP,MAAMyK,UAAUgV,YAAY,iDAEjClf,KAAKk7C,sBAAsB,EAGd,KAAAzP,SAAW,KACxBzrC,KAAKP,MAAMyK,UAAUgV,YAAY,iDAEjClf,KAAKk7C,sBAAsB,EAGd,KAAAA,qBAAuB,KAChCl7C,KAAKm7C,gBAELn7C,KAAKP,MAAMk2B,YAAYmY,UAGvB9tC,KAAKP,MAAMk2B,YAAYklB,QAAS,EAIvB,KAAAtB,kBAAoB,WAA4D,IAA3DrsC,EAAA6N,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAgB,EAAGstB,EAAAttB,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAuB,MAC5E,OAAOmV,EAAKzwB,MAAMuD,QAAQo4C,iBAAiBC,eAAenuC,EAAOm7B,EACrE,EAEiB,KAAAiT,oBAAuBpE,IACpCl3C,KAAKK,SAAS,CACV62C,mBAEJl3C,KAAKwtC,YAAY,EAGJ,KAAA+N,iBAAoBpE,IACjCn3C,KAAKK,SAAS,CACV82C,gBAEJn3C,KAAKwtC,YAAY,EAGJ,KAAAgO,iBAAoBpE,IACjCp3C,KAAKK,SAAS,CACV+2C,gBAEJp3C,KAAKwtC,YAAY,EAGJ,KAAAD,SAAYntC,IACzBJ,KAAKP,MAAMyK,UAAU2B,MAAM,QAASzL,GACpCJ,KAAKP,MAAMyK,UAAU6B,MAAM,QAAS3L,GACpCJ,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKK,SAAS,CACVD,gBACF,EAGW,KAAAotC,WAAa,KAC1BxtC,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKK,SAAS,CACVD,aAAc,IAChB,EAGW,KAAAq7C,eAAiBz2C,UAC9BhF,KAAKP,MAAMyK,UAAUgV,YAAY,+CAEjC,MAAMuY,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC1Cm2B,SAICA,EAAcgkB,eAAe,CAAEvE,kBAAiB,EAGzC,KAAAwE,cAAgB12C,UAG7B,GAFAhF,KAAKP,MAAMyK,UAAUgV,YAAY,8CAE7Blf,KAAKY,MAAM65C,mBACX,OAEJz6C,KAAKK,SAAS,CACVo6C,oBAAoB,IAGxB,MAAMhjB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OACzC41C,EAAiBl3C,KAAKY,MAAMs2C,eAAe9I,OAC3C+I,EAAcn3C,KAAKY,MAAMu2C,YAAY/I,OACrCgJ,EAAcp3C,KAAKY,MAAMw2C,YAAYhJ,OAErCuN,QAAsB37C,KAAK47C,iBAAiB1E,GAC5C2E,EAAeF,GAAiBA,EAAc,GAC9CG,EAAgBD,GAAgBA,EAAaE,cAC7CC,EAAgBH,GAAgBA,EAAaI,yBAC7CC,EAAeL,GAAgBA,EAAaM,gBAC5C/C,QAAiBp5C,KAAKo8C,YAAYlF,EAAgBC,EAAaC,EAAa0E,EAAeE,EAAeE,GAEhH,GAAIzkB,GAAiB2hB,EAYjB,aAXM3hB,EAAc4kB,YAAY,CAC5BjD,WACAvvB,qBAAsB,CAAEyyB,IAAKnF,EAAaoF,eAAgBnF,EAAaoF,aAAcN,KAEzFl8C,KAAKwtC,aACLxtC,KAAKK,SAAS,CACV62C,eAAgB,GAChBC,YAAa,GACbC,YAAa,GACbqD,oBAAoB,IAEjBtzC,QAAQC,UAEnB,MAAMqjB,EAAQzqB,KAAK+2C,UAAY/2C,KAAK+2C,SAAS92C,SAAWD,KAAK+2C,SAAS92C,QAAQw8C,OAAUz8C,KAAK+2C,SAAS92C,QACtGwqB,GAASA,EAAMgyB,QACfz8C,KAAKK,SAAS,CACVo6C,oBAAoB,IAExBz6C,KAAKP,MAAMyK,UAAUgV,YAAY,gDAAgD,EAGpE,KAAAw9B,wBAA0B,CACvCC,EACAC,EACAC,KAEA,IAAIC,EAEJ,OAAQD,GACJ,KAAKtC,EAAsBwC,SACvBD,EAAqBH,EAAY72C,QAC7Bk3C,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,KAAK3C,EAAsBS,SACvB8B,EAAqBH,EAAY72C,QAC7Bk3C,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,QACI,MAAM,IAAI/oB,MAAM,0BAGxB,GAAI2oB,EACA,OAAOA,EAAmBjuC,KAAImuC,GAAcA,EAAWR,cAAgB,IAErE,EAGO,KAAAJ,YAAcp3C,MAC3BkyC,EACAC,EACAC,EACA0E,EACAE,EACAE,KAEA,MACI55C,WAAW,eAAE66C,EAAc,qBAAEC,EAAoB,qBAAEC,EAAoB,eAAEC,EAAc,eAAEC,IACzFv9C,KAAKP,MAEH+9C,EAAwBx9C,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,kBAE5D,IAAKmB,EACD,OAGJ,MAAMS,QAAoBc,EAAAA,EAAAA,qBAAoB,CAAE50B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,cAAeigB,oBAAqB,CAAC,IAAKld,OACxHC,IACI,MAAMA,CAAK,IAInB,IAAK8wC,EACD,MAAM,IAAIxoB,MAAM,qCAEpB,MAAMupB,EAA8B19C,KAAK08C,wBACrCC,EACAgB,EAAAA,WAAWC,mBACXrD,EAAsBwC,UAEpBc,EAA8B79C,KAAK08C,wBACrCC,EACAgB,EAAAA,WAAWC,mBACXrD,EAAsBS,UAG1B,OAAQwC,GACJ,UAAKn6C,EACL,KAAKk3C,EAAsBwC,SACvB,GAAKW,UAAAA,EAA6Blc,SAAS0a,GAEvC,YADAl8C,KAAKutC,SAAS8P,GAGlB,MACJ,KAAK9C,EAAsBS,SACvB,GAAK6C,UAAAA,EAA6Brc,SAAS0a,GAEvC,YADAl8C,KAAKutC,SAAS8P,GAGlB,MACJ,KAAK9C,EAAsBuD,KACvB,KAAKJ,SAAAA,EAA6Blc,SAAS0a,IAAkB2B,SAAAA,EAA6Brc,SAAS0a,IAE/F,YADAl8C,KAAKutC,SAAS8P,GAGlB,MACJ,QACI,MAAM,IAAIlpB,MAAM,8BAGxB,GAAI2nB,GAAiC,KAAhB3E,EAEjB,YADAn3C,KAAKutC,SAAS+P,GAIlB,GAAItB,GAAiC,KAAhB5E,EAEjB,YADAp3C,KAAKutC,SAASgQ,GAIlB,MAAMQ,EAAQC,OAAOC,SAAS7G,EAAYtQ,MAAM,KAAK,GAAI,IACnDoX,EAAOF,OAAOC,SAAS7G,EAAYtQ,MAAM,KAAK,GAAI,IAExD,OAAOqX,EAAAA,EAAAA,kBAAiB,CAAEt1B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,eAAiBquC,EAAgBgF,EAAc/E,EAAa4G,EAAOG,GAC1Hv2C,MAAKy2C,IACF,GAAKA,EAAevE,SAAsC,IAA3BuE,EAAevE,QAI9C,OAAOuE,EAHHp+C,KAAKutC,SAAS4P,EAGG,IAExBvxC,OAAMC,IACH7L,KAAKutC,SAAS6P,EACE,GAClB,EAGO,KAAAxB,iBAAmB52C,UAChC,MACI1C,WAAW,gBAAE+7C,EAAe,oBAAEC,EAAmB,iBAAEC,GACnDl9C,MAAM,SAAE0vB,IACR/wB,KAAKP,MAET,IAAKy3C,EAED,YADAl3C,KAAKutC,SAAS8Q,GAKlB,IADqBttB,EAASzvB,SAAUyvB,EAASzvB,OAAOs5C,gBAAgBrjC,MAAMinC,GAAmBA,EAAKxqB,KAAOkjB,IAM7G,OAAOuH,EAAAA,EAAAA,uBAAsB,CAAE51B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,eAAiBquC,EAAgBwH,EAAAA,SAASC,UACtGh3C,MAAKg0C,IACF,GAAKA,GAA0C,IAAzBA,EAAct1C,aAAqChD,IAArBs4C,EAAc,GAIlE,OAAOA,EAHH37C,KAAKutC,SAASgR,EAGE,IAEvB3yC,OAAMC,IACH7L,KAAKutC,SAASgR,EACE,IAdpBv+C,KAAKutC,SAAS+Q,EAeZ,CAEd,CAzekBpK,kBACV,MAAgF,aAAxEl0C,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASnpB,OACxE,CAEcg3C,uBACV,MAAMnnB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC/C,OAAKm2B,GAAkBA,EAAconB,cAG9BpnB,EAAconB,cAFV,CAGf,CAEcC,+BACV,MAAMrnB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC/C,OAAOm2B,GAAiBA,EAAc0D,sBAAwB1D,EAAc0D,sBAAwB,CACxG,CAEc4jB,6BACV,MAAMtnB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC/C,OAAKm2B,GAAkBA,EAAcmjB,gBAG9BnjB,EAAcmjB,gBAAgBoE,QAAO,CAACv3C,EAAe2xC,IAEjD3xC,GADiB2xC,EAASS,SAAW,IAE7C,GALQ,CAMf,CAEctC,yBACV,MAAMpyC,EAAOnF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAStB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,UAAO9B,EACnG,OAAK8B,IAGGA,EAAK+1B,aAAe,GAAKl7B,KAAK4+C,iBAAmB5+C,KAAK++C,wBAA0B,CAC5F,CAEcE,wBACV,MAAM95C,EAAOnF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAStB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,UAAO9B,EACnG,IAAK8B,EACD,OAAO,EAKX,OADmBA,EAAK+1B,aAAe,GAAKl7B,KAAK4+C,iBAAmB5+C,KAAK8+C,yBACtD,CACvB,CAEc3D,sBACV,MACI95C,MAAM,SAAE0vB,IACR/wB,KAAKP,MACH46C,EAAYtpB,EAASzvB,QAAUyvB,EAASzvB,OAAOs5C,gBACrD,QAASP,GAAaA,EAAUh0C,OAAS,CAC7C,CAEOy1B,oBAAiB,IAAAlK,GACpBmK,EAAAA,EAAAA,KACI,IAAM/7B,KAAKk0C,cACX,KACIl0C,KAAKsrC,MAAM,IAIgB,QAAnC1Z,EAAI5xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAswB,GAA/BA,EAAiCwH,6CACjCoE,EAAAA,EAAAA,KACI,SAAAhL,EAAA,OAAqC,QAArCA,EAAMxyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAkxB,OAAA,EAA/BA,EAAiCuM,aAAa,IACpDA,IACQA,GAAiBA,EAAcG,gBAAkBC,EAAAA,cAAcqb,kBAAoBzb,EAAc3+B,cACjGJ,KAAKutC,SAASxO,EAAc3+B,aAAc,KAKtDo9B,EAAAA,EAAAA,KACI,SAAA1K,EAAA,OAAqC,QAArCA,EAAM9yB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwxB,OAAA,EAA/BA,EAAiCwhB,kBAAkB,IACzDA,IACQA,IAAuBC,EAAAA,eAAeiG,mBACtC5a,EAAAA,EAAAA,IAAqB5/B,KAAKswB,iBAAkBtwB,KAAKP,MAAMuD,QAAQ6F,cAAe,IAKlG,CAEOsiB,sBAAsBC,EAAyCC,GAClE,OAAIrrB,KAAKY,QAAUyqB,GAAarrB,KAAKP,MAAM4B,OAAS+pB,EAAU/pB,IAIlE,CAEOP,SACH,MACI60B,aAAa,QAAEK,GACf30B,MAAM,SAAE0vB,GACRlvB,QAAQ,UAAEF,EAAS,qBAAEu9C,GAAsB,UAC3C58C,GACAtC,KAAKP,OACH,aAAEW,EAAY,eAAE82C,EAAc,YAAEC,EAAW,YAAEC,GAAgBp3C,KAAKY,MAClEy5C,EAAYtpB,EAASzvB,QAAUyvB,EAASzvB,OAAOs5C,gBAC/CtD,EAAmB4H,EACnB1B,EAAwBx9C,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,kBAE5D,IAAK/6C,KAAK26C,cAAiB36C,KAAKi/C,oBAAsBjpB,EAElD,OADAh2B,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,0DAC5B,KAGX,GAAI7L,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKqe,cAAmD,IAAnCC,EAAAA,sBAAsBT,SAEtE,OADA3+C,KAAKP,MAAMuD,QAAQkH,UAAUgV,YAAY,kEAClC,KAGX,MAAMm4B,EAA0BmG,IAA0BjD,EAAsBwC,SAE1EpS,EAAkB6K,IAAU,wBAAyB7zC,EAAWq0B,EAAU,OAAS,OAEnFz0B,EAASC,EAAAA,EAAAA,EAAA,GACRxB,KAAKP,OACLO,KAAKY,OAAK,IACbe,UAAWgpC,EACXra,iBAAkBtwB,KAAKswB,iBAEvB+uB,sBAAuB,CAAE39C,YAAa1B,KAAKP,MAAOkC,UAAWgpC,GAC7DmQ,oBAAqB96C,KAAK86C,sBAC1BH,UAAW36C,KAAK26C,YAChB9V,OAAQ7kC,KAAK6kC,OACb2G,SAAUxrC,KAAKwrC,SACfC,SAAUzrC,KAAKyrC,SACf6P,oBAAqBt7C,KAAKs7C,oBAC1BC,iBAAkBv7C,KAAKu7C,iBACvBC,iBAAkBx7C,KAAKw7C,iBACvBC,eAAgBz7C,KAAKy7C,eACrBC,cAAe17C,KAAK07C,cACpB4D,aAActpB,EACR,CACI3zB,MAAO9C,EAAAA,cAACggD,EAAa,CAACl9C,MAAOC,EAAUm1C,oBACvC/B,KAAM0E,EAAQ,CACVZ,WAAW,EACXD,kBAAmBv5C,KAAKu5C,kBACxBc,UAAWA,GAAa,IAAIA,GAC5BlB,iBAAkBn5C,KAAKy7C,eACvBn5C,oBAGRe,EACNg5C,YAAcrmB,OA2BR3yB,EA1BA,CACIm8C,KAAM3I,EAAQ,CACVz2C,eACA82C,iBACAC,cACAC,cACAL,SAAU/2C,KAAK+2C,SACfC,YAAah3C,KAAKg3C,YAClBC,YAAaj3C,KAAKi3C,YAClB30C,YACAg0C,sBAAuBt2C,KAAKs7C,oBAC5B5E,mBAAoB12C,KAAKu7C,iBACzB3E,mBAAoB52C,KAAKw7C,iBACzBpF,gBAAiBp2C,KAAK07C,cACtBrE,0BACAC,mBACAC,mBAAoBv3C,KAAKu3C,qBAE7B7B,KAAM0E,EAAQ,CACVZ,WAAW,EACXD,kBAAmBv5C,KAAKu5C,kBACxBc,UAAWA,GAAa,IAAIA,GAC5BlB,iBAAkBn5C,KAAKy7C,eACvBn5C,iBAMlB,OAAOtC,KAAKP,MAAMuC,WAAWT,EACjC,IAjLUujC,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCAICD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,sCAQCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,8CAKCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,4CAWCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,wCAQCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,uCAWCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,oCAhEAyV,GAAgB1V,EAAAA,EAAAA,IAAA,CAD5BI,EAAAA,IACYsV,GA4fb,SAAevV,EAAAA,EAAAA,iBAAgBuV,2WClkBxB,MAAMiF,EAAmDtkC,IAAA,IAAC,cAAEukC,EAAa,MAAE3yB,EAAK,SAAErlB,GAAUyT,EAAA,OAC/F5b,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKy2C,GACL3yB,EACArlB,EACE,EAGEi4C,EAAmDlO,IAAA,IAAC,cAAEmO,EAAa,MAAE7yB,GAAO0kB,EAAA,OAAKlyC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK22C,GAAgB7yB,EAAa,EAExH8yB,EAAyCpN,IAAA,IAAC,SAAEqN,EAAQ,KAAE97C,EAAI,cAAE+7C,EAAa,cAAEC,GAAevN,EAAA,OACnGlzC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK62C,GACL97C,EACA+7C,GAAiBxgD,EAAAA,cAACkgD,EAAsBt5C,OAAA8C,OAAA,GAAK82C,IAC7CC,GAAiBzgD,EAAAA,cAACogD,EAAsBx5C,OAAA8C,OAAA,GAAK+2C,IAC3C,EAGEC,EAA2DC,IAAA,IAAC,sBAAEC,EAAqB,aAAEC,EAAY,QAAEpwC,EAAO,UAAEi0B,GAAWic,EAAA,OAChI3gD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKk3C,GACLnwC,EACDzQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKm3C,GACLnc,EAAUp1B,KAAIwxC,GACX9gD,EAAAA,cAACsgD,EAAiB15C,OAAA8C,OAAA,CAACoH,IAAKgwC,EAAS/sB,QAAY+sB,OAGlD,EAGEC,EAA6EC,IAAA,IAAC,sBACvFJ,EAAqB,aACrBC,EAAY,QACZpwC,EAAO,UACPi0B,EAAS,eACTuc,EAAc,mBACdC,GACHF,EAAA,OACGhhD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKk3C,GACLM,EACAD,EACAxwC,EACDzQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKm3C,GACLnc,EAAUp1B,KAAIwxC,GACX9gD,EAAAA,cAACmhD,EAAmCv6C,OAAA8C,OAAA,CAACoH,IAAKgwC,EAAS/sB,QAAY+sB,OAGpE,EAGEK,EAA2DC,IAAA,IAAC,SAAEb,EAAQ,KAAE97C,EAAI,cAAE+7C,EAAa,cAAEC,GAAeW,EAAA,OACrHphD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK62C,GACL97C,EACAg8C,GAAiBzgD,EAAAA,cAACogD,EAAsBx5C,OAAA8C,OAAA,GAAK+2C,IAC3C,EAGEY,EAAqEC,IAAA,IAAC,cAAEnB,EAAa,MAAE3yB,EAAK,SAAErlB,GAAUm5C,EAAA,OACjHthD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKy2C,GACL3yB,EACArlB,EACE,EAGEo5C,EAA2CC,IAAA,IAAC,UACrDC,EAAS,OACTC,EAAM,QACNjxC,EAAO,SACPkxC,EAAQ,eACRC,EAAc,aACdC,EAAY,cACZC,EAAa,iCACbC,GACHP,EAAA,OACGxhD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+3C,GACNzhD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKg4C,GACLjxC,EACAkxC,QAEiC79C,IAArCi+C,GAAkDH,GAAkB5hD,EAAAA,cAAC0gD,EAAsB95C,OAAA8C,OAAA,GAAKk4C,SAC3D99C,IAArCi+C,GAAkDD,GAAiB9hD,EAAAA,cAAC0gD,EAAsB95C,OAAA8C,OAAA,GAAKo4C,SAC1Dh+C,IAArCi+C,GAAkDF,GAAgB7hD,EAAAA,cAAC0gD,EAAsB95C,OAAA8C,OAAA,GAAKm4C,SACzD/9C,IAArCi+C,EACKA,EAAiCzyC,KAAI,CAAC7K,EAAM6e,IACjCtjB,EAAAA,cAAC+gD,EAAwCn6C,OAAA8C,OAAA,GAAKjF,EAAI,CAAEqM,IAAKwS,OAEpE,KACH,EAGL0+B,EAAiDC,IAAA,IAAC,QAAExxC,EAAO,MAAEyxC,GAAOD,EAAA,OACtEjiD,EAAAA,cAAA,OAAKoC,UAAU,6BACVqO,EACDzQ,EAAAA,cAAA,OAAKoC,UAAU,4BACV8/C,GACGliD,EAAAA,cAAAA,EAAAA,SAAA,KACKkiD,EAAMC,SACND,EAAMv5C,SACNu5C,EAAME,YACNF,EAAMG,IACNH,EAAMI,eACNJ,EAAMK,QACNL,EAAMM,gBACNN,EAAMrI,SACNqI,EAAMO,aAIjB,EAGJC,EAA4DC,IAAA,IAAC,QAAElyC,EAAO,MAAEyxC,GAAOS,EAAA,OACjF3iD,EAAAA,cAAA,OAAKoC,UAAU,+BACVqO,EACDzQ,EAAAA,cAAA,OAAKoC,UAAU,8BACV8/C,GACGliD,EAAAA,cAAAA,EAAAA,SAAA,KACKkiD,EAAMU,SACNV,EAAMrI,SACNqI,EAAMK,QACNL,EAAMO,aAIjB,EAiFV,EA9EmDviD,IAC/C,MAAM,iCACF0yB,EAAgC,+CAChCwH,EAA8C,QAC9C8J,EAAO,cACPf,EAAa,YACbC,EAAW,cACXH,EAAa,eACb/Q,EAAc,UACdmR,EAAS,UACTC,EAAS,iBACTC,EAAgB,UAChBC,EAAS,sBACTC,EAAqB,uBACrBC,EAAsB,wBACtBC,EAAuB,kBACvB5R,EAAiB,QACjBzE,EAAO,MACPuW,EAAK,MACL/gC,EAAK,WACLqhC,EAAU,aACVG,EAAY,sBACZE,EAAqB,UACrBE,EAAS,iBACTE,EAAgB,mBAChBpC,EAAkB,mBAClBsC,EAAkB,gCAClB5C,EAA+B,iBAC/BnR,GACA7wB,EAEJ,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKy5B,EAAa,CAAEjgC,IAAK6tB,KAC1BkS,IAAkBf,GAAmCliC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK05B,GAActgC,IAC7EmgC,GAAiBrQ,GAAoCwH,IAAmDyJ,IAAUvW,GAChHttB,EAAAA,cAAC+jC,EAAAA,QAAO,CAAC3hC,UAAU,yCAErB6gC,GACEjjC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK25B,GACL/V,EACAuW,EACAK,GACGlkC,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK45B,GACLpB,EACAA,GAAmCliC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK05B,GAActgC,GAC3DqhC,EACDnkC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKi6B,GAA0BnB,GACpCxiC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK65B,GACLqB,EACAE,IAGT9kC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK85B,GACJtR,EAEIsS,GAAyBxkC,EAAAA,cAAC0iD,EAAuB97C,OAAA8C,OAAA,GAAK86B,IADtDF,GAAgBtkC,EAAAA,cAACgiD,EAAqBp7C,OAAA8C,OAAA,GAAK46B,IAEjDtkC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+5B,GACNzjC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKi6B,GAA0BnB,GACnCoC,EACAE,GAEJJ,GAAa1kC,EAAAA,cAACuhD,EAAkB36C,OAAA8C,OAAA,GAAKg7B,IACtC1kC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKg6B,GACN1jC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKi6B,GAA0BnB,GACnCoC,EACAE,MAOxB7B,GAAiBlR,EACb,8NCpMjB,MA8BA,EA9BqDnW,IAAA,IAAC,UAClDxZ,EAAS,KACT+jC,EAAI,MACJzuB,EAAK,IACLxB,EAAG,IACHC,EAAG,KACH0sC,EAAI,aACJC,EAAY,aACZC,EAAY,aACZC,EAAY,SACZ33B,EAAQ,OACR43B,EAAM,GACNj8C,GACH4U,EAAA,OACG5b,EAAAA,cAAA,SACIoC,UAAWA,EACX+jC,KAAMA,EACNzuB,MAAOA,EACPxB,IAAKA,EACLC,IAAKA,EACL0sC,KAAMA,EAAI,gBACKC,EAAY,gBACZC,EAAY,gBACZC,EACf33B,SAAUA,EACV43B,OAAQA,EACRj8C,GAAIA,GACN,ECpBN,EARmE4U,IAAiC,IAAhC,UAAExZ,EAAS,KAAE4B,EAAI,QAAEgnB,GAASpP,EAC5F,OACI5b,EAAAA,cAAA,SAAOoC,UAAWA,EAAW4oB,QAASA,GACjChnB,EACG,ECEhB,EARiE4X,IAAwB,IAAvB,UAAExZ,EAAS,KAAE4B,GAAM4X,EACjF,OAAK5X,EAIEhE,EAAAA,cAAA,QAAMoC,UAAWA,GAAY4B,GAHzB,IAGqC,+lBCiEpD,IAAMk/C,EAAN,cAA8BljD,EAAAA,UAS1BC,YAAYC,GACRC,MAAMD,GAPO,KAAAkrC,gBAA0B,sBAE1B,KAAA+X,sBAAgC,EAEhC,KAAApyB,iBAAiD/wB,EAAAA,YA8RjD,KAAA+rC,KAAOtmC,UAA0B,IAAA8rB,EAAAM,EAC9CpxB,KAAKP,MAAMk2B,YAAY2V,KAAI9pC,EAAC,CACxBqjC,OAAQ7kC,KAAK6kC,OACb2G,SAAUxrC,KAAKwrC,SACfC,SAAUzrC,KAAKyrC,SACfiP,YAAY,IACP16C,KAAK26C,aAAe,CAAE/yC,OAAQ,eAGmB,QAAlCkpB,EAAG9wB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAwvB,OAAA,EAA/BA,EAAiC+tB,eAExD7+C,KAAKP,MAAMk2B,YAAYmY,UACe,QAAnC1c,EAAIpxB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAA8vB,GAA/BA,EAAiCe,iCACxCnyB,KAAKP,MAAMk2B,YAAYklB,SAEvB76C,KAAKP,MAAM4B,KAAKshD,YAAYrhD,QAC5BtB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QACzBtB,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OAAOshD,aAAe5iD,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,KAAK09C,eAEpG7iD,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAC3BsxB,oBAAoB,CAAEC,kBAAmB/iD,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OAAOshD,aAC5Eh3C,OAAMC,IACC7L,KAAKgD,QAAQkH,YACblK,KAAKgD,QAAQkH,UAAU2sB,QAAQhrB,GAC/B7L,KAAKgD,QAAQkH,UAAU6B,MAAM,qCAAqC,GAEvE,EAIE,KAAA84B,OAAS,KACtB7kC,KAAKP,MAAMyK,UAAUgV,YAAY,6CAEjClf,KAAKP,MAAMk2B,YAAYyB,YAAY,EAGtB,KAAAoU,SAAW,KACxBxrC,KAAKP,MAAMyK,UAAUgV,YAAY,+CAEjClf,KAAKk7C,sBAAsB,EAGd,KAAAzP,SAAW,KACxBzrC,KAAKP,MAAMyK,UAAUgV,YAAY,+CAEjClf,KAAKk7C,sBAAsB,EAGd,KAAAA,qBAAuB,KACpC,MAAMzjB,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC3Cm2B,GAAiBA,EAAconB,cAAgB,EAE/C7+C,KAAKP,MAAMk2B,YAAYmY,UAGvB9tC,KAAKP,MAAMk2B,YAAYklB,QAAS,EAIvB,KAAAF,UAAY,IAErB36C,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKC,iBAChC/gC,KAAKP,MAAM4B,KAAKshD,YAAYrhD,QAC5BtB,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OAAOshD,YACnC5iD,KAAKgjD,iBA6FI,KAAA9rB,iBAAoB92B,IACjCJ,KAAKP,MAAMyK,UAAU2B,MAAMzL,GAC3BJ,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKP,MAAMk2B,YAAYyB,aACvBp3B,KAAKK,SAAS,CACVD,gBACF,EAGW,KAAA6iD,YAAc,KAC3BjjD,KAAKP,MAAMk2B,YAAYwB,aAAY,GACnCn3B,KAAKK,SAAS,CACVD,aAAc,IAChB,EApcFJ,KAAKkjD,iBAAmB3jD,EAAAA,YACxBS,KAAKmjD,oBAAsBnjD,KAAKmjD,oBAAoBj4B,KAAKlrB,MACzDA,KAAKojD,qBAAuBpjD,KAAKojD,qBAAqBl4B,KAAKlrB,MAC3DA,KAAKqjD,eAAiBrjD,KAAKqjD,eAAen4B,KAAKlrB,MAC/CA,KAAKsjD,QAAUtjD,KAAKsjD,QAAQp4B,KAAKlrB,MACjCA,KAAKY,MAAQ,CAAE2iD,eAAgBvjD,KAAKwjD,WAAYC,uBAAuB,EAC3E,CAEcT,uBACV,MAAM79C,EAAOnF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAStB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,UAAO9B,EACnG,IAAK8B,EACD,OAAO,EAKX,OADkBA,EAAK+1B,aAAe,GACnB,CACvB,CAEcgZ,kBACV,MAC6E,aAAxEl0C,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASnpB,SACW,aAAvE5H,KAAKP,MAAM4B,KAAKshD,aAAe3iD,KAAKP,MAAM4B,KAAKshD,YAAY/6C,SAC8C,aAAzG5H,KAAKP,MAAM4B,KAAKqiD,8BAAgC1jD,KAAKP,MAAM4B,KAAKqiD,6BAA6B97C,OAEtG,CAEc47C,iBACV,OAAOxjD,KAAKP,MAAM4B,KAAKqiD,6BAA6BpiD,QAChDtB,KAAKP,MAAM4B,KAAKqiD,6BAA6BpiD,OAAOqiD,gCAClD3jD,KAAKP,MAAM4B,KAAKqiD,6BAA6BpiD,OAAOqiD,gCACpD,CACV,CAEO3+C,0BAAuB,IAAA2sB,GAC1BoK,EAAAA,EAAAA,KACI,IAAM/7B,KAAKk0C,cACXlvC,gBACUhF,KAAKsrC,MAAM,KAIzB9N,EAAAA,EAAAA,KACI,IAAMx9B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,QAAUtB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,OACtFH,UACIhF,KAAK4jD,iBAAiB,KAI9BpmB,EAAAA,EAAAA,KACI,IAAMx9B,KAAKP,MAAM4B,KAAKshD,YAAYrhD,SAClC0D,UACIhF,KAAK6jD,gBAAgB,IAIM,QAAnClyB,EAAI3xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAqwB,GAA/BA,EAAiCyH,6CACjCoE,EAAAA,EAAAA,KACI,SAAA5L,EAAA,OAAqC,QAArCA,EAAM5xB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAswB,OAAA,EAA/BA,EAAiCmN,aAAa,IACpDA,IACQA,GAAiBA,EAAcG,gBAAkBC,EAAAA,cAAcsjB,iBAAmB1jB,EAAc3+B,cAChGJ,KAAKk3B,iBAAiB6H,EAAc3+B,aAAc,KAK9Do9B,EAAAA,EAAAA,KACI,SAAAhL,EAAA,OAAqC,QAArCA,EAAMxyB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,cAAM,IAAAkxB,OAAA,EAA/BA,EAAiC8hB,kBAAkB,IACzDA,IACQA,IAAuBC,EAAAA,eAAekO,kBACtC7iB,EAAAA,EAAAA,IAAqB5/B,KAAKswB,iBAAkBtwB,KAAKP,MAAMuD,QAAQ6F,cAAe,IAKlG,CAEOsiB,sBAAsBC,EAAwCC,GACjE,OAAIrrB,KAAKY,QAAUyqB,GAAarrB,KAAKP,MAAM4B,OAAS+pB,EAAU/pB,IAIlE,CAEOP,SACH,MAAM,OACFe,EAAM,UACNS,EAAS,WACTN,EACA2zB,aAAa,SAAEsE,EAAQ,QAAEjE,IACzBh2B,KAAKP,MAET,GAAIO,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKqe,cAAkD,IAAlCC,EAAAA,sBAAsB0E,QAEtE,OADA9jD,KAAKP,MAAMuD,QAAQkH,UAAUgV,YAAY,gEAClC,KAGX,GACIlf,KAAKP,MAAM4B,KAAKshD,aAChB3iD,KAAKP,MAAM4B,KAAKshD,YAAYrhD,QAC5BtB,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OAAOshD,YACnC5iD,KAAKgjD,iBACP,CACE,MAAML,EAAc3iD,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OAC1Cm2B,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAC/C,IAAIyiD,GAAgB,EACpB,MAAM3jD,EAAeJ,KAAKY,MAAMR,aAEhC,GAAI41B,EAAS,CACT,IAAKyB,GAAiD,IAAhCA,EAAconB,cAChC,OAAO,KAEXkF,GAAgB,CAAK,CAEzB,MAAMjc,EAAgB9nC,KAAKP,MAAMuD,QAAQC,QAAQ+J,QAwHjD,OAAOhL,EAvHQR,EAAAA,EAAA,GACRxB,KAAKP,OAAK,IACb6wB,iBAAkBtwB,KAAKswB,iBACvB6kB,UAAW,CACP4O,gBACAC,kBAAmBhuB,IAAYn0B,EAAOoiD,4BAE1C7gB,MAAOnJ,GAAY75B,GAAgBb,EAAAA,cAAC01C,EAAAA,EAAc9uC,OAAA8C,OAAA,GAAK,CAAE5G,MAAOC,EAAUiqC,kBAAmBvgC,QAAS5L,KACtG8jD,gBAAiB,CACbxiD,YAAa1B,KAAKP,MAClBkC,UAAWC,IACP5B,KAAK2qC,gBACL,CAAE,CAAC,GAAG3qC,KAAK2qC,4BAA6BoZ,GACxC/jD,KAAKP,MAAMoC,OAAOF,YAG1BwiD,YAAa,CACTn0C,QAASzQ,EAAAA,cAAC0Q,EAAAA,QAAO,CAACC,WAAW,KAAKvO,UAAW,GAAG3B,KAAK2qC,2BAA4BpnC,KAAMjB,EAAU8hD,qBACjGC,kBACI9kD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,wBAAyBpnC,KAAMjB,EAAUiiD,2BAE/EC,OACIjlD,EAAAA,cAAC8P,EAAAA,eAAc,CACX1N,UAAW,GAAG3B,KAAK2qC,iCACnBpkC,GAAIvG,KAAKP,MAAM8G,GACfiF,SAAUxL,KAAKP,MAAM+L,SACrBxI,QAAShD,KAAKP,MAAMuD,QACpB3B,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyByc,GAAiBA,EAAconB,gBACzExW,cAAcP,aAAa,EAAbA,EAAeQ,WAAY,MAIrDmc,WAAY,CACRz0C,QAASzQ,EAAAA,cAAC0Q,EAAAA,QAAO,CAACC,WAAW,KAAKvO,UAAW,GAAG3B,KAAK2qC,2BAA4BpnC,KAAMjB,EAAU8hD,qBACjGM,OAAQ,CACJ1hC,IAAK2hC,EAAAA,OACLhjD,UAAW,GAAG3B,KAAK2qC,0BACnBia,iBAAkB5kD,KAAK6kD,gBACvBC,UAAW,GAAG9kD,KAAK2qC,+BACnBoa,WAAY,GAAG/kD,KAAK2qC,gCACpBqa,eAAgB,OAEpBC,WAAY1lD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,+BAAgCpnC,KAAMo/C,EAAYC,YAAc,KAC9GsC,aACIvC,EAAYwC,cACZxC,EAAYwC,aAAat2C,KAAI,CAACu2C,EAAQviC,IAC3B7iB,KAAKqlD,oBAAoBD,EAAQ9iD,EAAUgjD,qBAAsBhjD,EAAUijD,8BAE1FC,uBAAwB,CACpB7jD,UAAW,GAAG3B,KAAK2qC,2BAEvB8a,8BAA+B,CAC3B9jD,UAAW,GAAG3B,KAAK2qC,mCAEvB+a,mBACInmD,EAAAA,cAAComD,EAAc,CACXhkD,UAAW,GAAG3B,KAAK2qC,gCACnBpnC,KAAMjB,EAAUsjD,0BAChBr7B,QAAS,GAAGvqB,KAAKP,MAAM8G,aAG/Bs/C,mBACItmD,EAAAA,cAACumD,EAAc,CACXnkD,UAAW,GAAG3B,KAAK2qC,gCACnB/f,SAAU5qB,KAAKqjD,eACfb,OAAQxiD,KAAKsjD,QACb5d,KAAK,SACL0c,KAAK,MACLnrC,MAAOjX,KAAKY,MAAM2iD,eAClB9tC,IAAK,EACLC,IAAK1V,KAAKwjD,WACVnB,aAAcriD,KAAKwjD,WACnBlB,aAAc,EACdC,aAAcviD,KAAKY,MAAM2iD,eACzBh9C,GAAI,GAAGvG,KAAKP,MAAM8G,aAG1Bw/C,yBACIxmD,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAW,GAAG3B,KAAK2qC,iCACnBtoC,MAAOrC,KAAKP,MAAM6C,UAAU0jD,gCAC5B5jD,QAASpC,KAAKmjD,oBACdzyC,SACI1Q,KAAKY,MAAM2iD,eAAiBvjD,KAAKwjD,YACjCxjD,KAAKY,MAAM2iD,gBAAkB,GAC7B0C,MAAMjmD,KAAKY,MAAM2iD,iBACjBvjD,KAAKY,MAAM6iD,uBAGdzjD,KAAKP,MAAM6C,UAAU0jD,iCAG9BE,kBAAmBzuB,GAAiBA,EAAconB,cAAgB,EAClEsH,yBACI5mD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,gCAAiCpnC,KAAMjB,EAAUiiD,2BAEvF6B,0BACI7mD,EAAAA,cAAC8P,EAAAA,eAAc,CACX1N,UAAW,GAAG3B,KAAK2qC,iCACnBpkC,GAAIvG,KAAKP,MAAM8G,GACfiF,SAAUxL,KAAKP,MAAM+L,SACrBxI,QAAShD,KAAKP,MAAMuD,QACpB3B,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyByc,GAAiBA,EAAconB,gBACzExW,cAAcP,aAAa,EAAbA,EAAeQ,WAAY,KAGjD+d,0BACI9mD,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAU,iCACVU,MAAOrC,KAAKP,MAAM6C,UAAUgkD,iCAC5BlkD,QAASpC,KAAKojD,qBACdmD,SAAUvmD,KAAKkjD,kBAEdljD,KAAKP,MAAM6C,UAAUgkD,qCAMa,CAGvD,OADAtmD,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,yDAC5B,IACX,CAEQg5C,gBACJ,MAAM/c,EAAgB9nC,KAAKP,MAAMuD,QAAQC,QAAQ+J,QACjD,OACIzN,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAAA,KAAGoC,UAAW,GAAG3B,KAAK2qC,iCAAkC3qC,KAAKP,MAAM6C,UAAUiiD,0BAC7EhlD,EAAAA,cAAC8P,EAAAA,eAAc,CACX1N,UAAW,GAAG3B,KAAK2qC,iCACnBpkC,GAAIvG,KAAKP,MAAM8G,GACfiF,SAAUxL,KAAKP,MAAM+L,SACrBxI,QAAShD,KAAKP,MAAMuD,QACpB3B,KAAM,CAAE6L,MAAO,CAAE8N,wBAAyBhb,KAAKwjD,aAC/Cnb,cAAcP,aAAa,EAAbA,EAAeQ,WAAY,KAIzD,CAEQ+c,oBACJmB,EACAjC,EACAgB,GAEA,MAAO,CACHl1C,IAAKm2C,EAAMC,eAAiB,GAC5BC,2BAA4B,CACxB/kD,UAAW,GAAG3B,KAAK2qC,4BAEvBtoC,MAAO9C,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,iCAAkCpnC,KAAMijD,EAAMp2C,cACvFu2C,oBAAqBpnD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,qCAAsCpnC,KAAMghD,IACnGqC,aACIrnD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,kCAAmCpnC,MAAOijD,GAASA,EAAMK,cAAenrC,aAE9GorC,mBAAoBvnD,EAAAA,cAAC+kD,EAAa,CAAC3iD,UAAW,GAAG3B,KAAK2qC,oCAAqCpnC,KAAMgiD,IACjGwB,eACIxnD,EAAAA,cAAC+kD,EAAa,CACV3iD,UAAW,GAAG3B,KAAK2qC,kCACnBpnC,MAAOijD,GAASA,EAAMQ,oBAAqBtrC,aAI3D,CAsEQ1W,4BACJhF,KAAKP,MAAMyK,UAAUgV,YAAY,2DAEjC,MAAMuY,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAE1Cm2B,IAILz3B,KAAKijD,oBACCxrB,EAAcwvB,oBAAoB,CAAEC,UAAWlJ,OAAOmJ,WAAWnnD,KAAKY,MAAM2iD,eAAe7nC,cACjG1b,KAAKK,SAAS,CACVojD,uBAAuB,IAE/B,CAEQz+C,6BACJhF,KAAKP,MAAMyK,UAAUgV,YAAY,4DAEjC,MAAMuY,EAAgBz3B,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAE1Cm2B,IAILz3B,KAAKijD,oBACCxrB,EAAcwvB,oBAAoB,CAAEC,UAAW,IACrDlnD,KAAKK,SAAS,CACVkjD,eAAgB,IAExB,CAEQF,eAAev8B,GACnB,MAAM7P,EAAQ6P,EAAMiqB,cAAc95B,MAClCjX,KAAKK,SAAS,CAAEkjD,eAAgBtsC,EAAM5Q,OAAS,EAAI23C,OAAO/mC,GAAS+mC,OAAOmJ,WAAWlwC,GAAQwsC,uBAAuB,GACxH,CAEQH,QAAQx8B,GACZ,MAAMsgC,EAAMpJ,OAAOmJ,WAAWrgC,EAAMiqB,cAAc95B,OAAOowC,QAAQ,GAC3DC,EAAU1sC,SAAS2sC,eAAe,GAAGvnD,KAAKP,MAAM8G,YAClD+gD,GAAWF,IACXE,EAAQrwC,MAAQmwC,EAChBpnD,KAAKK,SAAS,CAAEkjD,eAAgBvF,OAAOmJ,WAAWC,KAE1D,CAEQvD,iBACA7jD,KAAKP,MAAMk2B,YAAYC,YAAc51B,KAAK26C,cAC1C36C,KAAK4jD,kBACL5jD,KAAKP,MAAMk2B,YAAYyB,aAE/B,CAEQwsB,kBACJ,MAAMpF,EAAOx+C,KAAKP,MAAM4B,KAAKshD,YAAYrhD,OACnCyvB,EAAW/wB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OACpC6D,EAAOnF,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAStB,KAAKP,MAAM4B,KAAK0vB,SAASzvB,OAAOkwB,aAAarsB,UAAO9B,EAC7FykC,EAAgB9nC,KAAKP,MAAMuD,QAAQC,QAAQ+J,QACjD,GAAIwxC,GAAQA,EAAKoE,YAAcz9C,GAAQ2iC,EAAe,CAClD,MAAMO,EAAeP,EAAcQ,UAAY,GACzCkf,GAAqBC,EAAAA,EAAAA,6DAA4DtiD,EAAK6uB,GAAIwqB,EAAKoE,WAAYva,GAIjHmf,EAAmBE,OAAO5Q,QAAQpgB,YAAc,OAEhDixB,EAAAA,EAAAA,qBAAoDH,EAAoBxnD,KAAKP,MAAMuD,QAAQ6F,eACtFlB,MAAK3C,UAAe,IAAA4iD,EACjB5nD,KAAKP,MAAMuD,QAAQ6F,cAAcg/C,OAC7B,IAAIC,EAAAA,qCAAqC9nD,KAAKP,MAAMuD,QAAQC,QAAQgY,aACpEmqC,GAEJ,MAAM2C,EAAqD,QAAzCH,EAAGxC,EAAOzB,uCAA+B,IAAAiE,EAAAA,EAAI5nD,KAAK0iD,sBAGhE3xB,GAAYA,EAAS8tB,cAAgBkJ,SAC/Bh3B,EAASk2B,oBAAoB,CAAEC,UAAWa,IAGpD/nD,KAAKK,SAAS,CAAEkjD,eAAgBwE,EAActE,uBAAuB,GAAQ,IAEhF73C,OAAMC,IACH7L,KAAKP,MAAMuD,QAAQ6F,cAAcqB,UAAU4B,UAAUD,GACrD7L,KAAKP,MAAMuD,QAAQ6F,cAAcqB,UAAU6B,MAAM,kDAAkD,GACpG,CAEf,IA5aU+4B,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,sCAWCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,iCAQCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,gCA4ZTD,EAAAA,EAAAA,IAAA,CADCE,EAAAA,IAAM,uCAjcLyd,GAAe3d,EAAAA,EAAAA,IAAA,CAFpBG,EAAAA,gBACAC,EAAAA,IACKud,GAmdN,gOC9eA,MAAMtM,EAAkBC,GAAyCpxC,UAC7D8hB,EAAMK,uBACAivB,GAAiB,EAQrBC,EAAyBC,GAA6DxvB,IACxF,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EF,EAAsBr/B,EAAM,EAQ1Bw/B,EAAsBC,GAAuD5vB,IAC/E,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EE,EAAmBz/B,EAAM,EAQvB0/B,EAAsBC,GAAuD9vB,IAC/E,MAAM7P,GAAS6P,EAAM2J,OAAOxZ,OAAS,IAAIs/B,QAAQ,IAAIC,OAAO,OAAQ,MAAO,IAC3EI,EAAmB3/B,EAAM,EAGhB4/B,EAAWC,IACpB,MAAM,aACF12C,EAAY,SACZ22C,EAAQ,YACRC,EAAW,YACXC,EAAW,eACXC,EAAc,YACdC,EAAW,YACXC,EAAW,sBACXd,EAAqB,mBACrBI,EAAkB,mBAClBE,EAAkB,gBAClBR,EAAe,wBACfiB,EAAuB,iBACvBC,EACAh1C,WAAW,mBACP0lD,EAAkB,kBAClBvQ,EAAiB,oBACjBC,EAAmB,iBACnBC,EAAgB,iBAChBC,EAAgB,mBAChBC,EAAkB,2BAClBC,EAA0B,2BAC1BC,IAEJjB,EAEEkB,EAAY,CACdr2C,UAAWC,IAAW,mCAAoC,CAAE,eAAgBxB,IAC5EqrC,SAAU0K,EAAeC,GACzBpzB,IAAK,QAGH+J,EACFxtB,EAAAA,cAAA,SAAOgH,GAAG,oCAAoC5E,UAAU,2CACnD81C,GAIHQ,EACF14C,EAAAA,cAAA,SAAOgH,GAAG,8CAA8C5E,UAAU,+CAC7Dg2C,GAIHO,EACF34C,EAAAA,cAAA,SAAOgH,GAAG,8CAA8C5E,UAAU,+CAC7Di2C,GAIHO,EACF54C,EAAAA,cAAA,SAAOgH,GAAG,0CAA0C5E,UAAU,iDACzDk2C,GAIHzU,EACF7jC,EAAAA,cAAC4D,EAAAA,MAAK,CACF6f,IAAI,OACJzc,GAAG,oCACH5E,UAAU,0CACV2kB,KAAK,QACL8xB,WAAW,EACXC,MAAM,EACNC,mBAAmB,EACnB53C,SAAUN,GAETA,GAoBHm4C,EACFh5C,EAAAA,cAAA,SACIkD,IAAKs0C,EACLrR,KAAK,OACL/jC,UAAU,sDAAqD,aACnD+1C,EACZ9sB,SAAUyrB,EAAsBC,GAChCr/B,MAAOigC,EAAc,kBACL,wEAIlBsB,EACFj5C,EAAAA,cAAA,SACIkD,IAAKu0C,EACLtR,KAAK,OACL/jC,UAAU,yDAAwD,aACtDg2C,EACZc,YAAaX,EACbltB,SAAU6rB,EAAmBC,GAC7Bz/B,MAAOkgC,EAAW,kBACF,wEAIlBuB,EACFn5C,EAAAA,cAAA,SACIkD,IAAKw0C,EACLvR,KAAK,OACL/jC,UAAU,yDAAwD,aACtDi2C,EACZa,YAAaV,EACbntB,SAAU+rB,EAAmBC,GAC7B3/B,MAAOmgC,EAAW,kBACF,wEAIlBuB,EACFp5C,EAAAA,cAAC4C,EAAAA,OAAM,CACHR,UAAU,wCACVS,QAAS+zC,EAAeC,GAAgB,aAC5B4R,EACZt3C,UAAWwmC,GAEV8Q,GAIT,IAAIpP,GAAuB,EACvBC,GAAuB,EAE3B,OAAQvB,GACJ,IAAI,MACAsB,GAAuB,EACvB,MACJ,IAAI,iBACAC,GAAuB,EACvB,MACJ,IAAI,uBACAD,GAAuB,EACvBC,GAAuB,EAK/B,MAAO,CACHb,YACAjrB,QACAkrB,gBACAC,gBACA9U,QACA0V,WAxFe,CACfn3C,UAAW,4CAwFXo3C,cArFkB,CAClBp3C,UAAW,gDAqFXq3C,cAlFkB,CAClBr3C,UAAW,gDAkFXs3C,cA/EkB,CAClBt3C,UAAW,gDA+EX42C,cACAC,WACAE,WACAC,cACAtB,0BACAuB,uBACAC,uBACAV,kBACH,EC1OQmB,EAAUn+B,IAII,IAJH,SACpBi+B,EAAQ,kBACRG,EACAj3C,WAAW,qBAAEm3C,EAAoB,8BAAEC,IACvBv+B,EACZ,MAAMy+B,EAAUL,EAAkBH,EAASS,QAAST,EAASU,kBACvDC,GAAsBX,EAASplB,IAAM,IAAIgmB,QAAQ,GAMjDC,EACF16C,EAAAA,cAAA,QAAMoC,UAAU,yCACX83C,EACA,IACAM,EACA,IAAG,IAAGL,EACN,IACDn6C,EAAAA,cAAA,QAAMoC,UAAU,uCAAuCi4C,GAAe,KAI9E,MAAO,CACHO,UAhBc,CACdx4C,UAAW,oCAgBX4E,GAAI6yC,GAAYA,EAASplB,GACzBimB,mBACH,ukBC3BL,IAAKM,GAAL,SAAKA,GACDA,EAAA,oBACAA,EAAA,oBACAA,EAAA,WACH,CAJD,CAAKA,IAAAA,EAAqB,KA2BnB,MAAM0N,UAA6B1oD,EAAAA,UAA1CC,cAAA,IAAA0wB,EAAA,2BACW,KAAAtvB,MAAoC,CACvC65C,oBAAoB,EACpBr6C,aAAc,GACd82C,eAAgB,GAChBC,YAAa,GACbC,YAAa,IAGA,KAAAL,SAA8Cx3C,EAAAA,YAE9C,KAAAy3C,YAAiDz3C,EAAAA,YAEjD,KAAA03C,YAAiD13C,EAAAA,YAkEjD,KAAA2oD,WAAa,OAErBloD,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKC,iBACjC/gC,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,oBAAsBR,EAAsBS,WACzEh7C,KAAKP,MAAMoC,OAAOo5C,yBAOV,KAAAkN,mBAAqB,WAA4D,IAA3Dj7C,EAAA6N,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAgB,EAAGstB,EAAAttB,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAuB,MAC7E,OAAOmV,EAAKzwB,MAAMuD,QAAQo4C,iBAAiBC,eAAenuC,EAAOm7B,EACrE,EAEiB,KAAA+f,qBAAwBlR,IACrCl3C,KAAKK,SAAS,CACV62C,mBAEJl3C,KAAKijD,aAAa,EAGL,KAAAoF,kBAAqBlR,IAClCn3C,KAAKK,SAAS,CACV82C,gBAEJn3C,KAAKijD,aAAa,EAGL,KAAAqF,kBAAqBlR,IAClCp3C,KAAKK,SAAS,CACV+2C,gBAEJp3C,KAAKijD,aAAa,EAGL,KAAAA,YAAc,KAC3BjjD,KAAKK,SAAS,CACVD,aAAc,IAChB,EAGW,KAAAmoD,UAAanoD,IAC1BJ,KAAKP,MAAMyK,UAAU2B,MAAM,QAASzL,GACpCJ,KAAKP,MAAMyK,UAAU6B,MAAM,QAAS3L,GACpCJ,KAAKK,SAAS,CACVD,gBACF,EAGW,KAAAooD,eAAiBxjD,UAC9B,GAAIhF,KAAKY,MAAM65C,mBACX,OAEJz6C,KAAKK,SAAS,CACVo6C,oBAAoB,IAGxB,MAAMvD,EAAiBl3C,KAAKY,MAAMs2C,eAAe9I,OAC3C+I,EAAcn3C,KAAKY,MAAMu2C,YAAY/I,OACrCgJ,EAAcp3C,KAAKY,MAAMw2C,YAAYhJ,OAErCuN,QAAsB37C,KAAKyoD,kBAAkBvR,GAC7C2E,EAAeF,GAAiBA,EAAc,GAC9CG,EAAgBD,GAAgBA,EAAaE,cAC7CC,EAAgBH,GAAgBA,EAAaI,yBAC7CC,EAAeL,GAAgBA,EAAaM,gBAC5C/C,QAAiBp5C,KAAK0oD,aAAaxR,EAAgBC,EAAaC,EAAa0E,EAAeE,EAAeE,GAEjH,GAAI9C,EASA,OARAp5C,KAAKijD,cACLjjD,KAAKK,SAAS,CACV62C,eAAgB,GAChBC,YAAa,GACbC,YAAa,GACbqD,oBAAoB,EACpBrB,aAEGjyC,QAAQC,UAEnB,MAAMqjB,EAAQzqB,KAAK+2C,UAAY/2C,KAAK+2C,SAAS92C,SAAWD,KAAK+2C,SAAS92C,QAAQw8C,OAAUz8C,KAAK+2C,SAAS92C,QACtGwqB,GAASA,EAAMgyB,QACfz8C,KAAKK,SAAS,CACVo6C,oBAAoB,EACpBrB,cAAU/1C,GACZ,EAGW,KAAAslD,yBAA2B,CACxChM,EACAC,EACAC,KAEA,IAAIC,EAEJ,OAAQD,GACJ,KAAKtC,EAAsBwC,SACvBD,EAAqBH,EAAY72C,QAC7Bk3C,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,KAAK3C,EAAsBS,SACvB8B,EAAqBH,EAAY72C,QAC7Bk3C,GAAcA,EAAWC,cAAgBL,GAA0C,KAA3BI,EAAWE,cAEvE,MACJ,QACI,MAAM,IAAI/oB,MAAM,0BAGxB,GAAI2oB,EACA,OAAOA,EAAmBjuC,KAAImuC,GAAcA,EAAWR,cAAgB,IAErE,EAGO,KAAAkM,aAAe1jD,MAC5BkyC,EACAC,EACAC,EACA0E,EACAE,EACAE,KAEA,MACI55C,WAAW,qBAAE+6C,EAAoB,eAAEF,EAAc,qBAAEC,EAAoB,eAAEE,EAAc,eAAEC,IACzFv9C,KAAKP,MAEH+9C,EAAwBx9C,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,kBAE5D,IAAKmB,EACD,OAGJ,MAAMS,QAAoBc,EAAAA,EAAAA,qBAAoB,CAAE50B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,cAAeigB,oBAAqB,CAAC,IAAKld,OACxHC,IACI,MAAMA,CAAK,IAInB,IAAK8wC,EACD,MAAM,IAAIxoB,MAAM,qCAGpB,MAAMupB,EAA8B19C,KAAK2oD,yBACrChM,EACAgB,EAAAA,WAAWC,mBACXrD,EAAsBwC,UAEpBc,EAA8B79C,KAAK2oD,yBACrChM,EACAgB,EAAAA,WAAWC,mBACXrD,EAAsBS,UAG1B,OAAQwC,GACJ,UAAKn6C,EACL,KAAKk3C,EAAsBwC,SACvB,GAAKW,UAAAA,EAA6Blc,SAAS0a,GAEvC,YADAl8C,KAAKuoD,UAAUlL,GAGnB,MACJ,KAAK9C,EAAsBS,SACvB,GAAK6C,UAAAA,EAA6Brc,SAAS0a,GAEvC,YADAl8C,KAAKuoD,UAAUlL,GAGnB,MACJ,KAAK9C,EAAsBuD,KACvB,KAAKJ,SAAAA,EAA6Blc,SAAS0a,IAAkB2B,SAAAA,EAA6Brc,SAAS0a,IAE/F,YADAl8C,KAAKuoD,UAAUlL,GAGnB,MACJ,QACI,MAAM,IAAIlpB,MAAM,8BAGxB,IAAKn0B,KAAKP,MAAMuD,QAAQC,QAAQ69B,KAAKC,iBAAjC,MAAoD2c,GAAAA,EAA6Blc,SAAS0a,GAE1F,YADAl8C,KAAKuoD,UAAUlL,GAInB,GAAIvB,GAAiC,KAAhB3E,EAEjB,YADAn3C,KAAKuoD,UAAUjL,GAInB,GAAItB,GAAiC,KAAhB5E,EAEjB,YADAp3C,KAAKuoD,UAAUhL,GAInB,MAAMQ,EAAQC,OAAOC,SAAS7G,EAAYtQ,MAAM,KAAK,GAAI,IACnDoX,EAAOF,OAAOC,SAAS7G,EAAYtQ,MAAM,KAAK,GAAI,IAExD,OAAOqX,EAAAA,EAAAA,kBAAiB,CAAEt1B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,eAAiBquC,EAAgBgF,EAAc/E,EAAa4G,EAAOG,GAC1Hv2C,MAAKy2C,IACF,GAAKA,EAAevE,SAAsC,IAA3BuE,EAAevE,QAI9C,OAAOuE,EAHHp+C,KAAKuoD,UAAUpL,EAGE,IAExBvxC,OAAMC,IACH7L,KAAKuoD,UAAUnL,EACC,GAClB,EAGO,KAAAqL,kBAAoBzjD,UACjC,MACI1C,WAAW,gBAAE+7C,EAAe,iBAAEE,IAC9Bv+C,KAAKP,MAET,GAAKy3C,EAKL,OAAOuH,EAAAA,EAAAA,uBAAsB,CAAE51B,cAAe7oB,KAAKP,MAAMuD,QAAQ6F,eAAiBquC,EAAgBwH,EAAAA,SAASC,UACtGh3C,MAAKg0C,IACF,GAAKA,GAA0C,IAAzBA,EAAct1C,aAAqChD,IAArBs4C,EAAc,GAIlE,OAAOA,EAHH37C,KAAKuoD,UAAUhK,EAGC,IAEvB3yC,OAAMC,IACH7L,KAAKuoD,UAAUhK,EACC,IAdpBv+C,KAAKuoD,UAAUlK,EAeb,CAEd,CA1SWlzB,sBAAsBC,EAA6CC,GACtE,OAAIrrB,KAAKY,QAAUyqB,GAAarrB,KAAKP,MAAM4B,OAAS+pB,EAAU/pB,IAIlE,CAEOP,SACH,MACIe,QAAQ,UAAEF,EAAS,qBAAEu9C,GAAsB,UAC3C58C,GACAtC,KAAKP,OACH,aAAEW,EAAY,eAAE82C,EAAc,YAAEC,EAAW,YAAEC,GAAgBp3C,KAAKY,MAElE48C,EAAwBx9C,KAAKP,MAAMuD,QAAQsE,IAAIzF,OAAOk5C,kBAE5D,IAAK/6C,KAAKkoD,aAEN,OADAloD,KAAKP,MAAMuD,QAAQkH,UAAU2B,MAAM,gEAC5B,KAGX,MAAMwrC,EAA0BmG,IAA0BjD,EAAsBwC,SAE1EpS,EAAkB6K,IAAU,6BAA8B7zC,GAE1DJ,EAASC,EAAAA,EAAAA,EAAA,GACRxB,KAAKP,OACLO,KAAKY,OAAK,IACbe,UAAWgpC,EACXie,0BAA2B,CAAElnD,YAAa1B,KAAKP,MAAOkC,UAAWgpC,GAEjE2Q,oBAAqBt7C,KAAKooD,qBAC1B7M,iBAAkBv7C,KAAKqoD,kBACvB7M,iBAAkBx7C,KAAKsoD,kBACvB5M,cAAe17C,KAAKwoD,eAEpBhJ,KAAM3I,EAAQ,CACVz2C,eACA82C,iBACAC,cACAC,cACAL,SAAU/2C,KAAK+2C,SACfC,YAAah3C,KAAKg3C,YAClBC,YAAaj3C,KAAKi3C,YAClB30C,YACA+0C,0BACAC,iBAAkB4H,EAClB5I,sBAAuBt2C,KAAKooD,qBAC5B1R,mBAAoB12C,KAAKqoD,kBACzBzR,mBAAoB52C,KAAKsoD,kBACzBlS,gBAAiBp2C,KAAKwoD,iBAE1BxkD,KACIhE,KAAKY,MAAMw4C,UACXE,EAAQ,CACJF,SAAUp5C,KAAKY,MAAMw4C,SACrBG,kBAAmBv5C,KAAKmoD,mBACxB7lD,gBAIZ,OAAOtC,KAAKP,MAAMuC,WAAWT,EACjC,EA8OJ,0NC5VA,SAASsnD,EAA0CvmD,GAC/C,MAAO,CACHwmD,yBAA0BxmD,EAAUwmD,yBAEpCC,wBAAyBzmD,EAAUymD,wBACnCC,4BAA6B1mD,EAAU0mD,4BAEvCC,gCAAiC3mD,EAAU2mD,gCAC3CC,iCAAkC5mD,EAAU4mD,iCAC5CC,sCAAuC7mD,EAAU6mD,sCAEjDC,oBAAqB9mD,EAAU8mD,oBAC/BC,wBAAyB/mD,EAAU+mD,wBACnCC,cAAehnD,EAAUgnD,cAEjC,CAOA,SAASC,EAAyCjnD,GAC9C,MAAO,CACHknD,yBAA0BlnD,EAAUmnD,0BACpCC,wBAAyBpnD,EAAUqnD,mBACnCC,2BAA4BtnD,EAAUsnD,2BACtCC,yBAA0BvnD,EAAUwnD,+BAEpCC,yBAA0BznD,EAAUynD,yBAEpCC,yBAA0B1nD,EAAU2nD,8BACpCC,+BAAgC5nD,EAAU6nD,yCAElD,CAOA,SAASC,EAAgD9nD,GACrD,MAAO,CACH+nD,4BAA6B/nD,EAAU+nD,4BACvCC,2BAA4BhoD,EAAUgoD,2BACtCC,0CAA2CjoD,EAAUioD,0CACrDC,6CAA8CloD,EAAUkoD,6CACxDC,0CAA2CnoD,EAAUmoD,0CACrD1/C,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAEpC,CAOA,SAASw/C,EAA+DpoD,GAEpE,MAAO,CACHqoD,yBAA0BroD,EAAUqoD,yBACpCC,8BAA+BtoD,EAAUsoD,8BACzCC,yBAA0BvoD,EAAUuoD,yBACpCC,+BAAgCxoD,EAAUwoD,+BAElD,CASA,MAAMC,EAA6BA,CAAChmD,EAChCzC,EAAmCmD,IAAwCnE,IAC3EyD,EAAUyB,iBAAiB,CACvBC,UAAW,iBACXC,gBAAmC,sBAAlBpF,EAAOsG,QAAiCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC3I,MC/DM61C,kBAAZ,SAAYA,GACRA,EAAAA,EAAA,cACH,CAFD,CAAYA,IAAAA,EAAe,KAS3B,MAAM7gC,EAAmBplB,GAAiCqlB,IAClDrlB,EAAUmM,gBACHnM,EAAUmM,eAAekZ,GAiKlC6gC,EAA2BA,CAC7BxrD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMkZ,qBAAuBlT,EAC9B,OAAO,KAGX,MAAMylD,ED5GoCC,EAAC1rD,EAC3CmB,EAAqBmE,EAA6BU,KAElD,MAAM,GAEFc,EAAE,SACFiF,EAAQ,QACRxI,EACA3B,MACImD,gBAAkBlD,OAAQkD,GAC1BC,qBAAuBnD,OAAQmD,IAClC,UACDnC,GACA7C,GAGA,SACI8F,GACA3E,EAIR,OAAO4D,GACHjF,EAAAA,cAAC6rD,EAAAA,4BAA2B,CACxBzpD,UAAU,gCACV0pD,6BAA8B/oD,EAAU+oD,6BACxCC,gCAAiChpD,EAAUgpD,gCAC3CC,kCAAmC1C,EAA0CvmD,GAC7EkpD,mCAAoCjC,EAAyCjnD,GAC7EmpD,wCAAyCrB,EAAgD9nD,GACzFopD,uDAAwDhB,EAA+DpoD,GACvHjB,KAAM,CAAEoE,UAASF,WAAUf,iBAAgBC,uBAC3CzB,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACVmgD,QAASZ,EAA2BhmD,EAAWzC,EAAWmD,GAC1DmmD,8BAA+BhrD,EAAMkZ,sBACrC+xC,mBAAmB,EACnBC,gBAlBiB,GAoBxB,ECoE2BX,CAA+B1rD,EAAOmB,EAAOmE,EAAWU,GAEpF,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMkZ,mBAAmB7I,gBAC9BrQ,EAAMkZ,mBAAmBmW,WACzBo8B,EACE,EAWTa,EAAwBA,CAAChnD,EAA6BzC,EAAmCmD,IAC3FnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,WACXC,gBACsB,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC7H,EAkDA62C,EAAsBA,CACxBvsD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,MAAMwmD,EAjDwBC,EAC9BzsD,EACAmB,EACAmE,EACAU,KAEA,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACT4pD,SAAS,SACTrmD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAlBwB,EAmBxBD,mBAAmB,GACrB,EAqBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EASTa,EAAyBl9B,IAE3B,MAAM,eAAE9f,EAAc,OAAEQ,EAAM,MAAEma,GAAUmF,EAE1C,OACIrwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLQ,EACAma,EACE,EAsBTsiC,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bwf,EACAlf,EACE,EAwTf,EApS4F7Q,IAAQ,IAAAutD,EAAAC,EAAAC,EAAAC,EAAAC,EAEhG,MAAM,YACFz1C,EAAW,2BAEXE,EAA0B,0BAE1BD,EAAyB,UACzBY,EAAS,mBACTG,EAAkB,cAClBE,EAAa,UACbT,EAAS,YACTE,EAAW,SACX/S,EAAQ,MACR2H,EAAK,MACL7K,EAAK,OACL0W,EAAM,eACNI,EAAc,gBACdE,EAAe,WACfO,EAAU,uBACVF,EAAsB,IAEtBhE,EAAG,cACHwC,EAAa,UACbnT,EAAS,MACTnE,EAAK,UACL0B,EACAA,WAAW,mBAAE+qD,EAAkB,uBAAEC,GACjCjsD,MAAM,oBAAEksD,GAAqB,uBAC7BvzC,EAAsB,iBACtBlQ,EACAjI,QAAQ,+BAAE2rD,EAA8B,6BAAE7zC,EAA4B,uBAAEL,EAAsB,sBAAEm0C,GAChGzqD,SACIC,SACI69B,MAAM,UAAE4sB,EAAS,gBAAE3sB,KAG3Bz5B,KAAOzF,OAAQ8rD,KACfluD,EAEJ,IAAImuD,GAAkBnuD,EAAM6C,UAAUsrD,QACtCA,IAAoC,QAA7BZ,EAAIvtD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA0rD,OAAA,EAAzBA,EAA2Br+B,OACtC,MAAMk/B,GAAwF,QAAtEZ,EAA2BxtD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAA2rD,OAAA,EAA3CA,EAA6Ca,eAC1FC,GAAmBF,UAAAA,GAAoBG,QAAUH,GAAmBG,QAAU,GAC9EC,GAAqBJ,UAAAA,GAAoBK,UAAYL,GAAmBK,UAAY,GACpFzoD,GAAUhG,EAAM4B,KAAKoE,QAAQnE,QAE5B6sD,GAAcC,IAAmB7uD,EAAAA,SAAuB,KAExD8uD,GAAeC,IAAoB/uD,EAAAA,UAAwB,IAC3DgvD,GAA2BC,IAAgCjvD,EAAAA,UAAwB,IACnFkvD,GAAqBC,IAA0BnvD,EAAAA,SAAkC,KACjFovD,GAAwBC,IAA6BrvD,EAAAA,SAAwD,IAoBpHA,EAAAA,WAAgB,KAlBIyF,WAA0B,IAAA6pD,EAC1C,GAAIN,GACA,OAEJ,MAAM7/B,GAAkC,QAAzBmgC,EAAApvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAutD,OAAA,EAAzBA,EAA2BlgC,SAAU,GAC9CmgC,QAAaC,EAAAA,EAAAA,IAA6B,CAAElmC,cAAeppB,EAAMuD,QAAQ6F,eAAiB,CAAC6lB,IAEjG8/B,IAA6B,GAC7BE,GAAuBI,EAAK,EAWvBE,GARuBhqD,WAA0B,IAAAiqD,EAAAC,EACtD,MAAMC,EAAmC,QAA5BF,EAAGxvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA2tD,OAAA,EAAzBA,EAA2B54C,SACrC+4C,GAAiBC,EAAAA,EAAAA,2CAA0C5vD,EAAMuD,QAAQ6F,cAAe,CAACsmD,IAAU,GACnG1lC,QAAiB6lC,EAAAA,EAAAA,+BAA8B,CAAEzmC,cAAeppB,EAAMuD,QAAQ6F,eAAiBumD,GACrGR,GAA0E,QAAjDM,EAACzlC,EAAS8lC,+CAAuC,IAAAL,EAAAA,EAAI,GAAG,EAK5EM,EAAyB,GAC/B,CAAC/vD,EAAM4B,KAAKoE,UAEf,MAuBMgqD,GAAwB91C,GAAgCL,EAqBxDo2C,GAAenwD,EAAAA,aAAkByF,UAAW,IAAA2qD,EAC9C,MAAMllC,EAAQ,IAAImlC,EAAAA,qCACW,QADyBD,EAClDlwD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAquD,OAAA,EAAzBA,EAA2Bt5C,SAC3B20C,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,MAChB,SAoBEC,EAAAA,EAAAA,iCAAgCrlC,EAAOhrB,EAAMuD,QAAQ6F,eACtD+C,OAAOC,IACJpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,IAEvCrE,MAAK8hB,IACF,GAAIA,GAAYxoB,EAAAA,gBAAgBC,YAAYuoB,GAAW,KAAAsmC,EACnD,MAAMC,EAAoB/4C,IAA+B,IAAAg5C,EAAA,OAC5B,QAAzBA,EAAAh5C,EAAMi5C,2BAAmB,IAAAD,GAAiB,QAAjBA,EAAzBA,EAA2BE,uBAAe,IAAAF,OAAA,EAA1CA,EAA4CG,iBAAkBrC,EAAgB,EAC5EsC,EAAkC5mC,EAAS3jB,OAAOkqD,GAClDM,EAA6BrvD,EAAAA,gBAAgBC,YAAYmvD,GACzDA,EAAgCrF,EAAgB6E,WAChDxsD,EACAktD,EAtDUC,KAC5B,GAAIA,GAAyBvvD,EAAAA,gBAAgBC,YAAYsvD,EAAsBC,6BAC3E,IAAK,MAAMl8B,KAA+Bi8B,EAAsBC,4BAA6B,KAAAC,EACzF,IAC6C,QAAzCA,EAAAF,EAAsBN,2BAAmB,IAAAQ,GAAiB,QAAjBA,EAAzCA,EAA2CP,uBAAe,IAAAO,OAAA,EAA1DA,EAA4DC,uBAC5Dp8B,EAA4Bq8B,iBAE5B,OAAOr8B,EAA4Bs8B,gBAK/B,EA0CyCC,CAAuBR,GAE9DS,GA1BQC,EAyBqBV,SAA+C,QAArBP,EAA1BO,EAA4BJ,2BAAmB,IAAAH,OAAA,EAA/CA,EAAiDkB,oBAxBvFtD,GAAUp/C,oBAIXtN,EAAAA,gBAAgBC,YAAY8vD,IACrBA,EAAmBhG,EAAgB6E,MAAMqB,kBAAqBlG,EAAgB6E,MAoB/CpwD,EAAM6C,UAAU6uD,YAAc1xD,EAAM6C,UAAU8uD,eAC1EC,EAAgCd,GAAsCQ,EACtEO,EAAiC,IAAGxlC,EAAAA,EAAAA,QACtCrsB,EAAM6C,UAAUivD,iCAChBtD,OACCoD,IACLjD,GAAgBkD,GAhCFN,SAoC1B1C,IAAiB,EAAM,GACxB,CAC0B,QAD1BpB,EACCztD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA4rD,OAAA,EAAzBA,EAA2B72C,SAC3Bs3C,GAAUp/C,iBACVw/C,GACAE,GACAxuD,EAAMuD,QAAQ6F,cACdpJ,EAAM6C,UAAUivD,iCAChB9xD,EAAM6C,UAAU6uD,YAChB1xD,EAAM6C,UAAU8uD,eAChB3xD,EAAMyK,YAGV3K,EAAAA,WAAgB,KACRE,EAAMoC,OAAO2vD,0BACb9B,KAAe9jD,OAAOC,IAClBpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,MAG7C,CAAC0jD,GAAcrB,GAAe5uD,EAAMyK,UAAWzK,EAAMoC,OAAO2vD,4BAE/Dh0B,EAAAA,EAAAA,KACI,SAAAi0B,EAAA,OAAiD,QAAjDA,EAAMhyD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAAmwD,OAAA,EAA3CA,EAA6CC,uBAAuB,IAC1E,KACIpD,IAAiB,EAAK,IAQ9B,MAaMqD,GA5IqBt7C,KACvB,MAAMu7C,EAAUjD,GAAuB5qD,MAAK0B,GAAWA,EAAQqvB,YAAcze,IACvE0W,EAAQ6kC,aAAO,EAAPA,EAASC,kCACjBhlB,EAAO+kB,aAAO,EAAPA,EAASE,iCAGtB,MAAa,OAATjlB,EAEI9f,GACIxtB,EAAAA,cAAAA,EAAAA,SAAA,KACKwtB,EAAK,IAAExtB,EAAAA,cAAA,WAAM,IAAEE,EAAMoC,OAAOkwD,uBAMhC,QAATllB,EACO,KAGJ9f,CAAK,EAwHGilC,CAA2C,QAA1B7E,EAAC1tD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA6rD,OAAA,EAAzBA,EAA2B92C,UAEhE,OACI9W,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK0O,GACRpY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GAA6BpY,EAAMkX,cAC7CpX,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACLvV,EACD9C,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,+BACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwCisD,IACtD70C,GAEJgoB,IAAoBysB,EACjBjuD,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,6BACZpC,EAAAA,cAAA,OAAKoC,UAAU,kCAAkClC,EAAM6C,UAAU2vD,WAChE/kD,IAziBA2I,GA4iBW63C,EA5iBGnqD,GA4iBQ8pD,EA1iBvC9tD,EAAAA,cAAA,KAAGoC,UAAU,yBACTpC,EAAAA,cAAA,KAAGgjB,KAAM1M,IAAMtS,MA4iBV6U,GAxPQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIk+C,GAAgC,EAqPtDmF,CAAgB95C,GAC7BwB,GA1eSA,KACtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EAmegB0nC,CAAiBv4C,GAChCra,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACZpC,EAAAA,cAAA,OAAKoC,UAAU,yCACV4D,GA9hBF6sD,EACnBC,EACAttD,EACAtF,EACAmB,EACA0xD,EACAt4C,EAEAtE,EACA5L,EACAoO,KAGA,MAAM,eAAEpI,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,GAAW+hD,GAE3D,UAAE/vD,GAAc7C,GAEhB,SAAE8F,GAAa3E,EAErB,OACIrB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAGL/Q,EAAAA,cAACmrB,EAAAA,oBAAmB,CAChBnkB,GAAG,oCACHmP,IAAKA,EACLiV,aAAcplB,EACdqlB,SAAUT,EAAgBplB,GAC1B8lB,uBAAwBvoB,EAAUuoB,uBAClCC,yBAA0BxoB,EAAUwoB,yBACpCC,yBAA0BzoB,EAAUyoB,yBACpCC,gBAAiBsnC,EAAmBtnC,gBACpCC,gBAAiBqnC,EAAmBrnC,gBACpCnhB,iBAAkBA,IAErBoO,EACA8B,EACE,EAufao4C,CACI7sD,EACAR,EACAtF,EACAmB,EACA0B,EACA0X,EACAtE,EACA5L,EACAoO,GAEPzY,EAAMuY,mBAGdy2C,IAAuBlvD,EAAAA,cAAA,OAAKoC,UAAU,6BAA6BgwD,IAEnElyD,EAAMoC,OAAO2vD,0BAA4BzD,IAtDXwE,MAA8B,IAAAC,EAAAC,EAErE,GAD6BxxD,EAAAA,gBAAgBC,YAAqC,QAA1BsxD,EAAC/yD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAkxD,OAAA,EAAzBA,EAA2B3sD,kBACTxC,KAAtB,QAAzBovD,EAAAhzD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAmxD,OAAA,EAAzBA,EAA2Bx2C,iBACnD,OAOJ,OAAO1c,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GALuB,CAC/BtH,UAAW,0CACXqhB,IAAK,SAGyBmrC,GAAoB,EA4CgBoE,GAC7Dp5C,EA/eOu5C,EACpBl6C,EACA/S,EACAgpD,EACAkE,KAGA,MAAM,eAAE7iD,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,GAAI/S,EAAS,KAAAmtD,EAAAC,EACT,MAAMC,GAAmBC,EAAAA,EAAAA,GACrBttD,EAAQkW,oBACRq3C,EAAAA,EAAgBC,UAChBC,EAAAA,EAA0BC,QAExBC,EAAmBN,EAAmBA,EAAiBp3C,WAAa,IACpE23C,EAAmBpV,SAASmV,EAAkB,IACpD,IAAIE,EACJ7E,EAAoB5/C,KAAI0kD,IAAK,IAAAC,EACzB,MAAMC,EAAyB,QAAbD,EAAGD,EAAGG,eAAO,IAAAF,OAAA,EAAVA,EAAYzvD,MAAK4vD,GAAKA,EAAEhlC,SAAWlpB,EAAQkpB,QAAqB,QAAXglC,EAAE3kD,OACxEykD,IACAH,EAAaG,MAIrB,MAIMG,EAAeP,IAHP,QAAVT,EAAAU,SAAU,IAAAV,GAAVA,EAAYiB,eAAe,6BAA8DxwD,KAA1B,QAAVwvD,EAAAS,SAAU,IAAAT,OAAA,EAAVA,EAAYiB,qBAC3DR,EAAWQ,oBACX,GAGV,OACIv0D,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACC8kC,EAAwBr0D,EAAAA,cAAA,OAAKoC,UAAU,6BAA6BgxD,GAArDliD,GAI7B,OAAOlR,EAAAA,cAAAA,EAAAA,SAAA,KAAK,EA0cCmzD,CAAgBl6C,EAAW/S,GAASgpD,GAAqBnB,GACzDh1C,GAncUA,KAEvB,MAAM,eAAExI,EAAc,cAAExJ,EAAa,QAAE0J,EAAO,YAAEtC,EAAW,OAAE4C,EAAM,OAAEG,EAAM,MAAEE,EAAK,wBAAER,GAA4BmI,EAEhH,OACI/Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLxJ,EACA0J,EACAG,EACAzC,EACA4C,EACAG,EACAE,EACE,EAsbiBojD,CAAkBz7C,GACjCm1C,GAAyB50C,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,GAC5E4T,GAAsBsyC,EAAyBxrD,EAAOmB,EAAOmE,GAC7DuT,SAAAA,EAAanI,wBACV5Q,EAAAA,cAAA,OAAKoC,UAAU,8BAA8B2W,EAAYnI,yBACzD,KAnTQmf,KACxB,GAAKA,GAAsC,IAAvBA,EAAYjpB,OAIhC,OAAO9G,EAAAA,cAAAA,EAAAA,SAAA,KAAG+vB,EAAY,GAAM,EA+SfD,CAAmB5vB,EAAMoN,OAASpN,EAAMoN,MAAMyiB,aAC9CmgC,GACGlwD,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAKoC,UAAU,gCAAgClC,EAAM6C,UAAU0xD,UAC/Dz0D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACX0X,GAAmByzC,EAAsBzzC,GACzCK,GAA0BozC,EAAsBpzC,KAGzD,KAEJna,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,mCACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwClC,EAAM6C,UAAU2xD,iBAGvE10D,EAAAA,cAAC+D,EAAAA,GAAiB,CAACC,KAAgC,QAA5B6pD,EAAEG,EAAoBjsD,cAAM,IAAA8rD,OAAA,EAA1BA,EAA4B1/C,eAExDzM,EAAAA,gBAAgBC,YAAYzB,EAAMoN,MAAMqnD,sBACrC30D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCAAqClC,EAAMoN,MAAMqnD,qBAAqB,IACtF,OAhmBIC,IAACt+C,GAActS,EAkmBtB,2uBCtoBjB,MAmBMwoD,EAAwBA,CAAChnD,EAC3BzC,EAAmCmD,IAAwCnE,IAC3EyD,SAAAA,EAAWyB,iBAAiB,CACxBC,UAAW,WACXC,gBAAmC,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC1I,EA6CA62C,EAAsBA,CAACvsD,EACzBmB,EAAqBmE,KAA+D,IAAAqvD,EACpF,MAAM3uD,EAA8B,QAAvB2uD,EAAG30D,EAAM8hB,sBAAc,IAAA6yC,OAAA,EAApBA,EAAsB3uD,QACtC,IAAKhG,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,MAAMwmD,EAzCwBC,EAACzsD,EAC/BmB,EAAqBmE,EAAyCU,KAC9D,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACTuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAjBwB,EAkBxBD,mBAAmB,GACrB,EAkBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EAqDTc,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJwf,EACAlf,EACE,EAwBT+jD,EAAqB50D,IACvB,MAAM,MAAEyN,EAAK,WAAE0M,EAAU,SAAErU,EAAQ,eAAE4T,EAAc,uBAAEa,EAAsB,QAAE6S,EAAO,0BAEhFjV,EAAyB,2BAAEC,EAA0B,cAAEsV,EAAa,cAAEtU,EAAa,UAAET,EAAS,UAAErT,EAAS,MAAEnE,GAAUnB,EACzH,OAAIotB,EAEIttB,EAAAA,cAAAA,EAAAA,SAAA,KACKstB,GAMTttB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GACNtY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKkkB,KAEd5tB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACNrY,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACZpC,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACXlC,EAAM6C,UAAU2vD,UAChB/kD,GAEJ2L,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,IAEvDqT,GAxCQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OACI7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLqf,EAAUtgB,IAAIk+C,GACZ,EAkCemF,CAAgB95C,GAC7BwB,GA/ESA,KAEtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJya,EACE,EAqEgB0nC,CAAiBv4C,GAC/BrU,GAvGM6sD,EAAC7sD,EAA2CyU,EAAyCva,KAExG,MAAM,eAAEqQ,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,EAAK,OAAEna,GAAW/K,GAClE,cAAE2S,GAAkBzY,EAE1B,OACIF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJya,EACAvS,EACA8B,EACA1J,EACE,EAyFc8hD,CAAe7sD,EAAUyU,EAAwBva,GAC7D0Z,GAEN,EAULm7C,EAAwB70D,IAAuE,IAAA80D,EAAAC,EAEjG,MAAM,eAAE5oC,EAAc,qBAAEQ,EAAoB,qBAAEE,EAAoB,mBAAEE,EAAkB,mBAAEC,EAAkB,UAAEjU,EAAS,mBACjHmU,EAAkB,iBAAEC,GAAqBntB,EAE7C,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK2iB,GACRrsB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKmjB,GACLI,EACDjtB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,0BACXlC,EAAM4C,MACL5C,EAAMotB,SAAYkB,EAAAA,iBAAiBqX,cAAsC,QAAzBmvB,EAAC90D,EAAMmB,MAAM2K,oBAAY,IAAAgpD,OAAA,EAAxBA,EAA0B5lC,QAGnE,GAH6EpvB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,2BAClGlC,EAAM6C,UAAUsrD,QACQ,QADD4G,EACvB/0D,EAAMmB,MAAM2K,oBAAY,IAAAipD,OAAA,EAAxBA,EAA0B7lC,QAE9BlvB,EAAMsZ,SAGfxZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKwjB,GACL4nC,EAAkB50D,IAEvBF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqjB,GACN/sB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK0jB,GACLnU,GAAaoU,EACbpU,GAxOIA,KAErB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAgOmBiiD,CAAgBl6C,KAGjC,EASJwX,EACgDvwB,IACzD,MAAM,UAAEgsB,EAAS,gBAAEC,EAAe,YAAEhZ,GAAgBjT,EAC9Cg1D,EAAqBjzD,EAAAA,EAAA,GAAsBiqB,GAAS,IAAEppB,MAAO5C,EAAM6C,UAAUqpB,sBACnF,OACIpsB,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKwrD,GACP/oC,EACAhZ,GAAe4hD,EAAqB70D,GAChC,EAIjB,kLC9PA,SAASopD,EAA0CvmD,GAC/C,MAAO,CACHwmD,yBAA0BxmD,EAAUwmD,yBAEpCC,wBAAyBzmD,EAAUymD,wBACnCC,4BAA6B1mD,EAAU0mD,4BAEvCC,gCAAiC3mD,EAAU2mD,gCAC3CC,iCAAkC5mD,EAAU4mD,iCAC5CC,sCAAuC7mD,EAAU6mD,sCAEjDC,oBAAqB9mD,EAAU8mD,oBAC/BC,wBAAyB/mD,EAAU+mD,wBACnCC,cAAehnD,EAAUgnD,cAEjC,CAOA,SAASC,EAAyCjnD,GAC9C,MAAO,CACHknD,yBAA0BlnD,EAAUmnD,0BACpCC,wBAAyBpnD,EAAUqnD,mBACnCC,2BAA4BtnD,EAAUsnD,2BACtCC,yBAA0BvnD,EAAUwnD,+BAEpCC,yBAA0BznD,EAAUynD,yBAEpCC,yBAA0B1nD,EAAU2nD,8BACpCC,+BAAgC5nD,EAAU6nD,yCAElD,CAOA,SAASC,EAAgD9nD,GACrD,MAAO,CACH+nD,4BAA6B/nD,EAAU+nD,4BACvCC,2BAA4BhoD,EAAUgoD,2BACtCC,0CAA2CjoD,EAAUioD,0CACrDC,6CAA8CloD,EAAUkoD,6CACxDC,0CAA2CnoD,EAAUmoD,0CACrD1/C,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAEpC,CAOA,SAASw/C,EAA+DpoD,GAEpE,MAAO,CACHqoD,yBAA0BroD,EAAUqoD,yBACpCC,8BAA+BtoD,EAAUsoD,8BACzCC,yBAA0BvoD,EAAUuoD,yBACpCC,+BAAgCxoD,EAAUwoD,+BAElD,CASA,MAAMC,EAA6BA,CAAChmD,EAChCzC,EAAmCmD,IAAwCnE,IAC3EyD,EAAUyB,iBAAiB,CACvBC,UAAW,iBACXC,gBAAmC,sBAAlBpF,EAAOsG,QAAiCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC3I,MCjEM61C,sCAAZ,SAAYA,GACRA,EAAAA,EAAA,cACH,CAFD,CAAYA,IAAAA,EAAe,KAc3B,MAAM7gC,EAAmBplB,GAAiCqlB,IAClDrlB,EAAUmM,gBACHnM,EAAUmM,eAAekZ,GAqIlC6gC,EAA2BA,CAC7BxrD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMkZ,qBAAuBlT,EAC9B,OAAO,KAGX,MAAMylD,EDnFoCC,EAAC1rD,EAC3CmB,EAAqBmE,EAA6BU,KAElD,MAAM,GAEFc,EAAE,SACFiF,EAAQ,QACRxI,EACA3B,MACImD,gBAAkBlD,OAAQkD,GAC1BC,qBAAuBnD,OAAQmD,IAClC,UACDnC,GACA7C,GAGA,SACI8F,GACA3E,EAIR,OAAO4D,GACHjF,EAAAA,cAAC6rD,EAAAA,4BAA2B,CACxBzpD,UAAU,gCACV0pD,6BAA8B/oD,EAAU+oD,6BACxCC,gCAAiChpD,EAAUgpD,gCAC3CC,kCAAmC1C,EAA0CvmD,GAC7EkpD,mCAAoCjC,EAAyCjnD,GAC7EmpD,wCAAyCrB,EAAgD9nD,GACzFopD,uDAAwDhB,EAA+DpoD,GACvHjB,KAAM,CAAEoE,UAASF,WAAUf,iBAAgBC,uBAC3CzB,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACVmgD,QAASZ,EAA2BhmD,EAAWzC,EAAWmD,GAC1DmmD,8BAA+BhrD,EAAMkZ,sBACrC+xC,mBAAmB,EACnBC,gBAlBiB,GAoBxB,EC2C2BX,CAA+B1rD,EAAOmB,EAAOmE,EAAWU,GAEpF,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMkZ,mBAAmB7I,gBAC9BrQ,EAAMkZ,mBAAmBmW,WACzBo8B,EACE,EAWTa,EAAwBA,CAAChnD,EAA6BzC,EAAmCmD,IAC3FnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,WACXC,gBACsB,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC7H,EAkDA62C,EAAsBA,CACxBvsD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,MAAMwmD,EAjDwBC,EAC9BzsD,EACAmB,EACAmE,EACAU,KAEA,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACT4pD,SAAS,SACTrmD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAlBwB,EAmBxBD,mBAAmB,GACrB,EAqBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EASTa,EAAyBl9B,IAE3B,MAAM,eAAE9f,EAAc,OAAEQ,EAAM,MAAEma,GAAUmF,EAE1C,OACIrwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLQ,EACAma,EACE,EAsBTsiC,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bwf,EACAlf,EACE,EA2YTyiD,EAAiCA,CAACt3B,EAA4CprB,EAAaqkD,KAAwC,IAAAC,EACrI,MAAMj5B,EAAWD,SAAoC,QAA1Bk5B,EAAVl5B,EAAY13B,MAAK4vD,GAAKA,EAAEh4B,MAAQtrB,WAAI,IAAAskD,OAAA,EAApCA,EAAsC1uD,MAIvD,OADYy1B,EAAWA,EAASg5B,GAAa,IACnC,EAGd,EA/X4Fj1D,IAAQ,IAAAutD,EAAAC,EAAAgC,EAAA7B,EAEhG,MAAM,YACFz1C,EAAW,2BAEXE,EAA0B,0BAE1BD,EAAyB,UACzBY,EAAS,mBACTG,EAAkB,cAClBE,EAAa,UACbT,EAAS,YAETE,EAAW,SACX/S,EAAQ,MACR2H,EAAK,MACL7K,EAAK,OACL0W,EAAM,gBAENM,EAAe,WACfO,EAAU,uBACVF,EAAsB,IAEtBhE,EAAG,cACHwC,EAAa,UACbnT,EAAS,MACTnE,EAAK,UACL0B,EACAA,WAAW,mBAAE+qD,EAAkB,kBAAEuH,EAAiB,uBAAEC,GACpDxzD,MAAM,QAAEoE,EAAO,oBAAE8nD,GAAqB,uBACtCvzC,EAAsB,iBACtBlQ,EACAjI,QAAQ,+BAAE2rD,EAA8B,6BAAE7zC,EAA4B,uBAAEL,GACxEtW,SACIC,SACI69B,MAAM,UAAE4sB,EAAS,gBAAE3sB,KAG3Bz5B,KAAOzF,OAAQ8rD,IACfluD,EACJ,IAAImuD,GAAkBnuD,EAAM6C,UAAUsrD,QACtCA,IAAoC,QAA7BZ,EAAIvtD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA0rD,OAAA,EAAzBA,EAA2Br+B,OACtC,MAAMk/B,GAAwF,QAAtEZ,EAA2BxtD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAA2rD,OAAA,EAA3CA,EAA6Ca,eAC1FC,GAAmBF,UAAAA,GAAoBG,QAAUH,GAAmBG,QAAU,GAC9EC,GAAqBJ,UAAAA,GAAoBK,UAAYL,GAAmBK,UAAY,IAEnFC,GAAcC,IAAmB7uD,EAAAA,SAAuB,KACxD8uD,GAAeC,IAAoB/uD,EAAAA,UAAwB,GAE5DkwD,GAAwB91C,GAAgCL,GAEvDw7C,GAAYC,IAAiBx1D,EAAAA,YAC7By1D,GAAoBC,IAAyB11D,EAAAA,UAAwB,GAyB5EA,EAAAA,WAAgB,KACRwhC,GAxBsB/7B,WAA0B,IAAAkwD,EACpD,MAAMxmC,SAAgBjpB,GAASkpB,OAE/B,IAAKD,EACD,OAEJ,MAAMvpB,EAAO1F,EAAM4B,KAAK8D,KAClBslB,EAAQ,IAAI0qC,EAAAA,2BAA2B,CAACzmC,IAAS,GAAOvpB,SAAY,QAAR+vD,EAAJ/vD,EAAM7D,cAAM,IAAA4zD,GAAM,QAANA,EAAZA,EAAc/vD,YAAI,IAAA+vD,OAAA,EAAlBA,EAAoBlhC,KAAM,GAAI,KAAM,KAAM,aAC1EohC,EAAAA,EAAAA,SAA4B3qC,EAAOhrB,EAAMuD,QAAQ6F,gBAE/DktB,SAASs/B,IACrB,MAAM9uD,EAAKwsD,EAA+BsC,EAAE15C,oBAAqB,SAAUu3C,EAAAA,EAA0BC,QACrG,GAAImC,OAAO/uD,KAAQmoB,EAAQ,CACvB,MAAM1qB,EAAqB,CACvB2qB,OAAQ2mC,OAAO/uD,GACfgvD,WAAYF,EAAEE,YAElBR,GAAc/wD,GACdwxD,QAEN,EAKOC,KAEV,CAACh2D,EAAM4B,OAEV,MAAMm0D,GAAyBA,KAC3B,MAAME,EAAsBj2D,EAAM4B,KAAK+D,yBAAyB9D,OAChE,IAAIq0D,GAAmB,EAEnBD,GAAuBA,EAAoBrvD,OAAS,IACpDsvD,EAAmBD,EAAoB,GAAGvnD,oBAE9C8mD,GAAsBU,EAAiB,EAuBrCjG,GAAenwD,EAAAA,aAAkByF,UAAW,IAAA6pD,EAC9C,MAAMpkC,EAAQ,IAAImlC,EAAAA,qCACW,QADyBf,EAClDpvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAutD,OAAA,EAAzBA,EAA2Bx4C,SAC3B20C,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,MAChB,SAoBEC,EAAAA,EAAAA,iCAAgCrlC,EAAOhrB,EAAMuD,QAAQ6F,eACtD+C,OAAOC,IACJpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,IAEvCrE,MAAK8hB,IACF,GAAIA,GAAYxoB,EAAAA,gBAAgBC,YAAYuoB,GAAW,KAAAsmC,EACnD,MAAMC,EAAoB/4C,IAA+B,IAAAg5C,EAAA,OAC5B,QAAzBA,EAAAh5C,EAAMi5C,2BAAmB,IAAAD,GAAiB,QAAjBA,EAAzBA,EAA2BE,uBAAe,IAAAF,OAAA,EAA1CA,EAA4CG,iBAAkBrC,EAAgB,EAC5EsC,EAAkC5mC,EAAS3jB,OAAOkqD,GAClDM,EAA6BrvD,EAAAA,gBAAgBC,YAAYmvD,GACzDA,EAAgCrF,EAAgB6E,WAChDxsD,EACAktD,EAtDUC,KAC5B,GAAIA,GAAyBvvD,EAAAA,gBAAgBC,YAAYsvD,EAAsBC,6BAC3E,IAAK,MAAMl8B,KAA+Bi8B,EAAsBC,4BAA6B,KAAAC,EACzF,IAC6C,QAAzCA,EAAAF,EAAsBN,2BAAmB,IAAAQ,GAAiB,QAAjBA,EAAzCA,EAA2CP,uBAAe,IAAAO,OAAA,EAA1DA,EAA4DC,uBAC5Dp8B,EAA4Bq8B,iBAE5B,OAAOr8B,EAA4Bs8B,gBAK/B,EA0CyCC,CAAuBR,GAE9DS,GA1BQC,EAyBqBV,SAA+C,QAArBP,EAA1BO,EAA4BJ,2BAAmB,IAAAH,OAAA,EAA/CA,EAAiDkB,oBAxBvFtD,EAAUp/C,oBAIXtN,EAAAA,gBAAgBC,YAAY8vD,IACrBA,EAAmBhG,EAAgB6E,MAAMqB,kBAAqBlG,EAAgB6E,MAoB/CpwD,EAAM6C,UAAU6uD,YAAc1xD,EAAM6C,UAAU8uD,eAC1EC,EAAgCd,GAAsCQ,EACtEO,EAAiC,IAAGxlC,EAAAA,EAAAA,QACtCrsB,EAAM6C,UAAUivD,iCAChBtD,OACCoD,IACLjD,GAAgBkD,GAhCFN,SAoC1B1C,IAAiB,EAAM,GACxB,CAC0B,QAD1BW,EACCxvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA2tD,OAAA,EAAzBA,EAA2B54C,SAC3Bs3C,EAAUp/C,iBACVw/C,GACAE,GACAxuD,EAAMuD,QAAQ6F,cACdpJ,EAAM6C,UAAUivD,iCAChB9xD,EAAM6C,UAAU6uD,YAChB1xD,EAAM6C,UAAU8uD,eAChB3xD,EAAMyK,YAGV3K,EAAAA,WAAgB,KACRE,EAAMoC,OAAO2vD,0BACb9B,KAAe9jD,OAAOC,IAClBpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,MAG7C,CAAC0jD,GAAcrB,GAAe5uD,EAAMyK,UAAWzK,EAAMoC,OAAO2vD,4BAE/Dh0B,EAAAA,EAAAA,KACI,SAAAi0B,EAAA,OAAiD,QAAjDA,EAAMhyD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAAmwD,OAAA,EAA3CA,EAA6CC,uBAAuB,IAC1E,KACIpD,IAAiB,EAAK,IAI9B,MAAOsH,GAAkBC,IAAuBt2D,EAAAA,SAAsD,MA4FtG,IAAI4F,GAAO1F,EAAM4B,KAAK8D,KAAK7D,OACvB6kC,GAAYhhC,cAAI,EAAJA,GAAMA,KAAK+tB,UACvB4iC,IAAY,EACZC,GAAa5wD,cAAI,EAAJA,GAAMssB,eACvB0U,UAAAA,GAAWpQ,SAAQigC,IACEjD,EAA+BiD,EAAEr6C,oBAAqB,WAAYu3C,EAAAA,EAA0BC,UAEzG2C,IAAY,MAGpB,IAAIG,GAAe12D,EAAAA,cAAA,OAAKoC,UAAU,aAAalC,EAAM6C,UAAU4zD,WAC3DC,GAAa52D,EAAAA,cAAA,OAAKoC,UAAU,aAAalC,EAAM6C,UAAU6zD,YAC7D,OACI52D,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK0O,GACRpY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GAA6BpY,EAAMkX,cAC7CpX,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACLvV,EAED9C,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,+BACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwCisD,KA5GnEruD,EAAAA,WAAgB,KAAK,IAAA62D,EACjB,MAAMC,EAA2C,QAAjBD,EAAG3wD,EAAQnE,cAAM,IAAA80D,OAAA,EAAdA,EAAgBz6C,oBAEnD,GAAI06C,GAA8BA,EAA2BhwD,OAAS,EAAG,CACrE,IAAIiwD,EACAC,EAEJF,EAA2BtgC,SAAQygC,IAAK,IAAAC,EAAAC,EAAAC,EAAAC,EAEpC,OADYJ,EAAG76B,KAAO,IAElB,KAAKq3B,EAAAA,EAAgB6D,eACjBP,EAAyB,QAAXG,EAAGD,EAAGvwD,aAAK,IAAAwwD,OAAA,EAARA,EAAU76B,YACvB06B,KAAiC,QAAnBI,EAAKjxD,EAAQnE,cAAM,IAAAo1D,OAAA,EAAdA,EAAgBzyD,QACnCqyD,OAAiBjzD,GAErB,MACJ,KAAK2vD,EAAAA,EAAgB8D,aACjBP,EAAuB,QAAXI,EAAGH,EAAGvwD,aAAK,IAAA0wD,OAAA,EAARA,EAAU/6B,YACrB26B,KAA+B,QAAnBK,EAAKnxD,EAAQnE,cAAM,IAAAs1D,OAAA,EAAdA,EAAgBjoC,UACjC4nC,OAAelzD,QAM3BizD,GAAkBC,IAClBV,GAAoB,CAAE/+B,KAAMw/B,EAAgB/vD,GAAIgwD,OAGzD,CAAe,QAAfQ,GAACtxD,EAAQnE,cAAM,IAAAy1D,QAAA,EAAdA,GAAgBp7C,sBAEfi6C,GAKDr2D,EAAAA,cAAA,OAAKoC,UAAW,qBACZpC,EAAAA,cAAA,SACKq1D,EAAiB,IAAGgB,GAAiB9+B,KAAI,KAAI8+B,GAAiBrvD,GAAE,MANlE,MA8EEwS,GAEJgoB,IAAoBysB,EACjBjuD,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,6BACZpC,EAAAA,cAAA,OAAKoC,UAAU,kCAAkClC,EAAM6C,UAAU2vD,WAChE/kD,IA5lBA2I,GA+lBW63C,EA/lBGnqD,GA+lBQ8pD,EA7lBvC9tD,EAAAA,cAAA,KAAGoC,UAAU,yBACTpC,EAAAA,cAAA,KAAGgjB,KAAM1M,IAAMtS,MA+lBV6U,GAvUQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIk+C,GAAgC,EAoUtDmF,CAAgB95C,GAC7B09C,IAAaG,GACbF,IAAcI,GACdv8C,GA/hBSA,KACtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EAwhBgB0nC,CAAiBv4C,GAEhCra,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACZpC,EAAAA,cAAA,OAAKoC,UAAU,yCACV4D,IACIuwD,KACAC,IAtlBN3D,EACnBC,EACAttD,EACAtF,EACAmB,EACA0xD,EACAt4C,EAEAtE,EACA5L,EACAoO,KAGA,MAAM,eAAEpI,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,GAAW+hD,GAE3D,UAAE/vD,GAAc7C,GAEhB,SAAE8F,GAAa3E,EAErB,OACIrB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAGL/Q,EAAAA,cAACmrB,EAAAA,oBAAmB,CAChBnkB,GAAG,oCACHmP,IAAKA,EACLiV,aAAcplB,EACdqlB,SAAUT,EAAgBplB,GAC1B8lB,uBAAwBvoB,EAAUuoB,uBAClCC,yBAA0BxoB,EAAUwoB,yBACpCC,yBAA0BzoB,EAAUyoB,yBACpCC,gBAAiBsnC,EAAmBtnC,gBACpCC,gBAAiBqnC,EAAmBrnC,gBACpCnhB,iBAAkBA,IAErBoO,EACA8B,EACE,EA+iBao4C,CACI7sD,EACAR,EACAtF,EACAmB,EACA0B,EACA0X,EACAtE,EACA5L,EACAoO,GAEPzY,EAAMuY,mBAGdvY,EAAMoC,OAAO2vD,0BAA4BzD,IAjGXwE,MAA8B,IAAA5C,EAAAzC,EAErE,GAD6BjsD,EAAAA,gBAAgBC,YAAqC,QAA1ByuD,EAAClwD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAquD,OAAA,EAAzBA,EAA2B9pD,kBACTxC,KAAtB,QAAzB6pD,EAAAztD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA4rD,OAAA,EAAzBA,EAA2BjxC,iBACnD,OAQJ,OAAO1c,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GALuB,CAC/BtH,UAAW,0CACXqhB,IAAK,SAGyBmrC,GAAoB,EAsFgBoE,GAnF1Cn5C,MAC5B,MAAM3T,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OAC7Bo0D,EAAsBj2D,EAAM4B,KAAK+D,yBAAyB9D,OAChE,IAAKmE,IAAYiwD,EACb,OAGJ,IAAIsB,EAAkB,GAUtB,OARKlC,UAAAA,GAAYS,aACbyB,EAAkBnC,GAOfC,UAAAA,GAAYS,WACf91D,EAAM0Z,eAEN5Z,EAAAA,cAAA,OAAKoC,UAAW,6BACZpC,EAAAA,cAAA,QAAMoC,UAbmB,8BAaaq1D,GAE7C,EA8DQ59C,IACC08C,KAAcC,IAAcjB,IAtiBtBpC,EAACl6C,EAAsCs8C,EAA0BE,KAErF,MAAM,eAAEllD,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAC/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAgmC,SAAAA,EAAYS,YAAcP,EAAqBvkD,EAAS,GAEtD,EA8hB6CiiD,CAAgBl6C,EAAWs8C,GAAYE,IAClF18C,GAthBUA,KAEvB,MAAM,eAAExI,EAAc,cAAExJ,EAAa,QAAE0J,EAAO,YAAEtC,EAAW,OAAE4C,EAAM,OAAEG,EAAM,MAAEE,EAAK,wBAAER,GAA4BmI,EAEhH,OACI/Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLxJ,EACA0J,EACAG,EACAzC,EACA4C,EACAG,EACAE,EACE,EAygBiBojD,CAAkBz7C,GACjCO,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,GACnD4T,GAAsBsyC,EAAyBxrD,EAAOmB,EAAOmE,GAC7DuT,SAAAA,EAAanI,wBACV5Q,EAAAA,cAAA,OAAKoC,UAAU,8BAA8B2W,EAAYnI,yBACzD,KAtYQmf,KACxB,GAAKA,GAAsC,IAAvBA,EAAYjpB,OAIhC,OAAO9G,EAAAA,cAAAA,EAAAA,SAAA,KAAG+vB,EAAY,GAAM,EAkYfD,CAAmB5vB,EAAMoN,OAASpN,EAAMoN,MAAMyiB,aAC9CmgC,GACGlwD,EAAAA,cAACA,EAAAA,SAAc,KACXA,EAAAA,cAAA,OAAKoC,UAAU,gCAAgClC,EAAM6C,UAAU0xD,UAC/Dz0D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACX0X,GAAmByzC,EAAsBzzC,GACzCK,GAA0BozC,EAAsBpzC,KAGzD,KAEJna,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,mCACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwClC,EAAM6C,UAAU2xD,iBAGvE10D,EAAAA,cAAC+D,EAAAA,GAAiB,CAACC,KAAgC,QAA5B6pD,EAAEG,EAAoBjsD,cAAM,IAAA8rD,OAAA,EAA1BA,EAA4B1/C,eAExDzM,EAAAA,gBAAgBC,YAAYzB,EAAMoN,MAAMqnD,sBACrC30D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCAAqClC,EAAMoN,MAAMqnD,qBAAqB,IACtF,OAvpBIC,IAACt+C,GAActS,GAweEwzD,EAiLxB,2uBChsBjB,MAmBMhL,EAAwBA,CAAChnD,EAC3BzC,EAAmCmD,IAAwCnE,IAC3EyD,SAAAA,EAAWyB,iBAAiB,CACxBC,UAAW,WACXC,gBAAmC,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC1I,EA6CA62C,EAAsBA,CAACvsD,EACzBmB,EAAqBmE,KAA+D,IAAAqvD,EACpF,MAAM3uD,EAA8B,QAAvB2uD,EAAG30D,EAAM8hB,sBAAc,IAAA6yC,OAAA,EAApBA,EAAsB3uD,QACtC,IAAKhG,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,MAAMwmD,EAzCwBC,EAACzsD,EAC/BmB,EAAqBmE,EAAyCU,KAC9D,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACTuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAjBwB,EAkBxBD,mBAAmB,GACrB,EAkBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EAqDTc,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJwf,EACAlf,EACE,EAwBT+jD,EAAqB50D,IACvB,MAAM,MAAEyN,EAAK,WAAE0M,EAAU,SAAErU,EAAQ,eAAE4T,EAAc,uBAAEa,EAAsB,QAAE6S,EAAO,0BAEhFjV,EAAyB,2BAAEC,EAA0B,cAAEsV,EAAa,cAAEtU,EAAa,UAAET,EAAS,UAAErT,EAAS,MAAEnE,GAAUnB,EACzH,OAAIotB,EAEIttB,EAAAA,cAAAA,EAAAA,SAAA,KACKstB,GAMTttB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GACNtY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKkkB,KAEd5tB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACNrY,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACZpC,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACXlC,EAAM6C,UAAU2vD,UAChB/kD,GAEJ2L,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,IAEvDqT,GAxCQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OACI7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLqf,EAAUtgB,IAAIk+C,GACZ,EAkCemF,CAAgB95C,GAC7BwB,GA/ESA,KAEtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJya,EACE,EAqEgB0nC,CAAiBv4C,GAC/BrU,GAvGM6sD,EAAC7sD,EAA2CyU,EAAyCva,KAExG,MAAM,eAAEqQ,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,EAAK,OAAEna,GAAW/K,GAClE,cAAE2S,GAAkBzY,EAE1B,OACIF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,GAEJya,EACAvS,EACA8B,EACA1J,EACE,EAyFc8hD,CAAe7sD,EAAUyU,EAAwBva,GAC7D0Z,GAEN,EAULm7C,EAAwB70D,IAAuE,IAAA80D,EAAAC,EAEjG,MAAM,eAAE5oC,EAAc,qBAAEQ,EAAoB,qBAAEE,EAAoB,mBAAEE,EAAkB,mBAAEC,EAAkB,UAAEjU,EAAS,mBACjHmU,EAAkB,iBAAEC,GAAqBntB,EAE7C,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK2iB,GACRrsB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKmjB,GACLI,EACDjtB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,0BACXlC,EAAM4C,MACL5C,EAAMotB,SAAYkB,EAAAA,iBAAiBqX,cAAsC,QAAzBmvB,EAAC90D,EAAMmB,MAAM2K,oBAAY,IAAAgpD,OAAA,EAAxBA,EAA0B5lC,QAGnE,GAH6EpvB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,2BAClGlC,EAAM6C,UAAUsrD,QACQ,QADD4G,EACvB/0D,EAAMmB,MAAM2K,oBAAY,IAAAipD,OAAA,EAAxBA,EAA0B7lC,QAE9BlvB,EAAMsZ,SAGfxZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKwjB,GACL4nC,EAAkB50D,IAEvBF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqjB,GACN/sB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK0jB,GACLnU,GAAaoU,EACbpU,GAxOIA,KAErB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAgOmBiiD,CAAgBl6C,KAGjC,EASJwX,EACgDvwB,IACzD,MAAM,UAAEgsB,EAAS,gBAAEC,EAAe,YAAEhZ,GAAgBjT,EAC9Cg1D,EAAqBjzD,EAAAA,EAAA,GAAsBiqB,GAAS,IAAEppB,MAAO5C,EAAM6C,UAAUqpB,sBACnF,OACIpsB,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKwrD,GACP/oC,EACAhZ,GAAe4hD,EAAqB70D,GAChC,EAIjB,mGC5QA,MAAMw3D,EAA6D97C,IAAkC,IAAjC,oBAAEs6B,EAAmB,KAAEC,GAAMv6B,EAC7F,OAAKu6B,GAAwB,IAAhBA,EAAKrvC,OAKd9G,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKwsC,GACLC,EAAK7mC,KAAKD,GAEHrP,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2F,EAAey9B,eAAc,CAAEh8B,IAAKzB,EAAei+B,KAAI,aAAa,qCACzEj+B,EAAek+B,YACfl+B,EAAelB,YACfkB,EAAe1B,UAVzB,IAcA,EAITgqD,EAA4DzlB,IAA2C,IAA1C,eAAEpF,EAAc,YAAE3+B,EAAW,MAAER,GAAOukC,EACrG,OACIlyC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKojC,GACL3+B,EACAR,EACE,EAuCf,EAnCiFzN,IAC7E,MAAM,wBACFwrC,EAAuB,sCACvB6K,EAAqC,iBACrCxlB,EAAgB,UAChB6kB,EAAS,gBACTruC,EAAe,uBACf6uC,EAAsB,MACtBvS,EAAK,QACLwS,EAAO,WACPG,EAAU,WACVC,EAAU,aACVC,EAAY,qCACZJ,EAAoC,eACpCvC,GACA7zC,EAEJ,OAEIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKgiC,EAAuB,CAAExoC,IAAK6tB,IACrC6kB,EAAUtnC,WAAa+nC,EACvBT,EAAUT,SAAWtR,EACrB+R,EAAUR,YAAc7tC,IAAoBgvC,GACzCv2C,EAAAA,cAAC03D,EAAkB9wD,OAAA8C,OAAA,GAAKnC,IAE3BquC,EAAUR,YAAcmB,GAAyCD,EACjEV,EAAUP,gBAAkBkB,GAAyCxC,EACrE6B,EAAUP,gBAAkBe,GAA0Bp2C,EAAAA,cAAC23D,EAAsB/wD,OAAA8C,OAAA,GAAK0sC,IAClFR,EAAUC,kBAAoBW,EAC9BZ,EAAUG,kBAAoBU,EAC9Bb,EAAUI,oBAAsBU,EAC5B,8MCjEJkhB,EAAwBh8C,IAAA,IAAC,UAClC68B,EAAS,MACTjrB,EAAK,cACLkrB,EAAa,cACbC,EAAa,MACb9U,EAAK,WACL0V,EAAU,cACVC,EAAa,cACbC,EAAa,cACbC,EAAa,YACbV,EAAW,SACXC,EAAQ,SACRE,EAAQ,YACRC,EAAW,wBACXtB,EAAuB,qBACvBuB,EAAoB,qBACpBC,EAAoB,gBACpBV,GACHh9B,EAAA,OACG5b,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+uC,GACL5U,EACAiU,EACG93C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6vC,GACNv5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK8vC,GACLhsB,EACAwrB,GAEJK,GACGr5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+vC,GACLf,EACAO,GAGRK,GACGt5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKgwC,GACLf,EACAQ,IAGPE,GAAwBC,IAAyBV,GAGvD54C,EAAAA,cAAAA,EAAAA,SAAA,KACKwtB,EACAwrB,GAGRI,EACE,EAGEye,EAAoC3lB,IAAA,IAAC,UAAE0I,EAAS,iBAAEF,EAAgB,aAAEC,GAAczI,EAAA,OAC3FlyC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,CAACqd,KAAK,QAAO,YAAW,aAAgB6zB,GACxCF,EACAC,EACE,EAGEmd,EAAgC5kB,IAAA,IAAC,UAAE6H,EAAS,KAAE5E,GAAMjD,EAAA,OAC7DlzC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqxC,GACL5E,EAAK7mC,KAAIqxC,IAAA,IAAC,GAAE35C,GAAa25C,EAANl8C,GAAIszD,EAAAA,EAAAA,GAAApX,EAAAqX,GAAA,OACpBh4D,EAAAA,cAAC63D,EAAgBjxD,OAAA8C,OAAA,CAACoH,IAAK9J,GAAQvC,GAAQ,IAExC,EAGEwzD,EAAsCjX,IAAA,IAAC,KAAEf,EAAI,KAAE9J,GAAM6K,EAAA,OAC9DhhD,EAAAA,cAAAA,EAAAA,SAAA,KACKigD,GAAQjgD,EAAAA,cAAC43D,EAAIhxD,OAAA8C,OAAA,GAAKu2C,IAClB9J,GAAQn2C,EAAAA,cAAC83D,EAAYlxD,OAAA8C,OAAA,GAAKysC,IAC5B,EAGM+hB,EAAwC9W,IAAA,IAAC,MAAEt+C,EAAK,KAAEqzC,GAAMiL,EAAA,OACjEphD,EAAAA,cAAAA,EAAAA,SAAA,KACK8C,EACAqzC,GAAQn2C,EAAAA,cAAC83D,EAAYlxD,OAAA8C,OAAA,GAAKysC,IAC5B,EAaP,EAVmEj2C,IAC/D,MAAM,sBAAE4/C,EAAqB,iBAAE/uB,EAAgB,aAAEgvB,EAAY,YAAEjD,GAAgB58C,EAC/E,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKo2C,EAAqB,CAAE58C,IAAK6tB,IACnCgvB,GAAgB//C,EAAAA,cAACk4D,EAAYtxD,OAAA8C,OAAA,GAAKq2C,IAClCjD,GAAe98C,EAAAA,cAACi4D,EAAWrxD,OAAA8C,OAAA,GAAKozC,IAC5B,0FCtFjB,MAAMqb,EAAoDv8C,IAcrD,IAdsD,QACvDnL,EAAO,WACPi1C,EAAU,OACVP,EAAM,aACNQ,EAAY,uBACZM,EAAsB,8BACtBC,EAA6B,mBAC7BC,EAAkB,mBAClBG,EAAkB,yBAClBE,EAAwB,kBACxBG,EAAiB,yBACjBC,EAAwB,0BACxBC,EAAyB,0BACzBC,GACHlrC,EACG,OACI5b,EAAAA,cAAAA,EAAAA,SAAA,KACKyQ,EACAi1C,EACD1lD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKy7C,GACLQ,EAAar2C,KAAK8oD,GAEXp4D,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK0uD,EAAYjR,2BAA0B,CAAEr2C,IAAKsnD,EAAYtnD,MAC9DsnD,EAAYt1D,MACZs1D,EAAYhR,oBACZgR,EAAY/Q,aACZ+Q,EAAY7Q,mBACZ6Q,EAAY5Q,mBAK7BxnD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKu8C,GACLE,EACAG,EACAE,EACAG,GACG3mD,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKw8C,GACLU,EACAC,EACAC,IAId,EAILuR,EAAsDnmB,IAA2C,IAA1C,QAAEzhC,EAAO,kBAAEq0C,EAAiB,OAAEG,GAAQ/S,EAC/F,OACIlyC,EAAAA,cAAAA,EAAAA,SAAA,KACKyQ,EACAq0C,EACAG,EACF,EAgBX,EAZiE/kD,IAC7D,MAAM,gBAAEykD,EAAe,iBAAE5zB,EAAgB,MAAE8S,EAAK,UAAE+R,EAAS,YAAEgP,EAAW,WAAEM,GAAehlD,EAEzF,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKi7C,EAAe,CAAEzhD,IAAK6tB,IAC7B8S,EACA+R,EAAU4O,eAAiBxkD,EAAAA,cAACq4D,EAAmBzxD,OAAA8C,OAAA,GAAKk7C,IACpDhP,EAAU6O,kBAAoBzkD,EAAAA,cAACm4D,EAAkBvxD,OAAA8C,OAAA,GAAKw7C,IAClD,gHClEV,MAAMoT,EAAwB18C,IAAA,IAAC,UAClC68B,EAAS,MACTjrB,EAAK,cACLkrB,EAAa,cACbC,EAAa,MACb9U,EAAK,WACL0V,EAAU,cACVC,EAAa,cACbC,EAAa,cACbC,EAAa,YACbV,EAAW,SACXC,EAAQ,SACRE,EAAQ,YACRC,EAAW,wBACXtB,EAAuB,qBACvBuB,EAAoB,qBACpBC,EAAoB,gBACpBV,GACHh9B,EAAA,OACG5b,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+uC,GACL5U,EACAiU,EACG93C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6vC,GACNv5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK8vC,GACLhsB,EACAwrB,GAEJK,GACGr5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK+vC,GACLf,EACAO,GAGRK,GACGt5C,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKgwC,GACLf,EACAQ,IAGPE,GAAwBC,IAAyBV,GAGvD54C,EAAAA,cAAAA,EAAAA,SAAA,KACKwtB,EACAwrB,GAGRI,EACE,EAGEmf,EAAwBrmB,IAAA,IAAC,UAAE0I,EAAS,iBAAEF,GAAkBxI,EAAA,OAAKlyC,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKkxC,GAAYF,EAAwB,EAYxH,EAV2Ex6C,IACvE,MAAM,0BAAEmpD,EAAyB,KAAEpJ,EAAI,KAAEx7C,GAASvE,EAClD,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK2/C,GACPpJ,GAAQjgD,EAAAA,cAACs4D,EAAI1xD,OAAA8C,OAAA,GAAKu2C,IAClBx7C,GAAQzE,EAAAA,cAACu4D,EAAI3xD,OAAA8C,OAAA,GAAKjF,IACd,2KCtCjB,SAAS6kD,EAA0CvmD,GAC/C,MAAO,CACHwmD,yBAA0BxmD,EAAUwmD,yBAEpCC,wBAAyBzmD,EAAUymD,wBACnCC,4BAA6B1mD,EAAU0mD,4BAEvCC,gCAAiC3mD,EAAU2mD,gCAC3CC,iCAAkC5mD,EAAU4mD,iCAC5CC,sCAAuC7mD,EAAU6mD,sCAEjDC,oBAAqB9mD,EAAU8mD,oBAC/BC,wBAAyB/mD,EAAU+mD,wBACnCC,cAAehnD,EAAUgnD,cAEjC,CAOA,SAASC,EAAyCjnD,GAC9C,MAAO,CACHknD,yBAA0BlnD,EAAUmnD,0BACpCC,wBAAyBpnD,EAAUqnD,mBACnCC,2BAA4BtnD,EAAUsnD,2BACtCC,yBAA0BvnD,EAAUwnD,+BAEpCC,yBAA0BznD,EAAUynD,yBAEpCC,yBAA0B1nD,EAAU2nD,8BACpCC,+BAAgC5nD,EAAU6nD,yCAElD,CAOA,SAASC,EAAgD9nD,GACrD,MAAO,CACH+nD,4BAA6B/nD,EAAU+nD,4BACvCC,2BAA4BhoD,EAAUgoD,2BACtCC,0CAA2CjoD,EAAUioD,0CACrDC,6CAA8CloD,EAAUkoD,6CACxDC,0CAA2CnoD,EAAUmoD,0CACrD1/C,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAEpC,CAOA,SAASw/C,EACLpoD,GAEA,MAAO,CACHqoD,yBAA0BroD,EAAUqoD,yBACpCC,8BAA+BtoD,EAAUsoD,8BACzCC,yBAA0BvoD,EAAUuoD,yBACpCC,+BAAgCxoD,EAAUwoD,+BAElD,CASA,MAAMC,EAA6BA,CAAChmD,EAA6BzC,EAAmCmD,IAChGnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,iBACXC,gBACsB,sBAAlBpF,EAAOsG,QAAiCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC9H,EC3EC,IAAK61C,GAAZ,SAAYA,GACRA,EAAAA,EAAA,cACH,CAFD,CAAYA,IAAAA,EAAe,KAS3B,MAAM7gC,EAAmBplB,GAAiCqlB,IAClDrlB,EAAUmM,gBACHnM,EAAUmM,eAAekZ,GAiIlC6gC,EAA2BA,CAC7BxrD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMkZ,qBAAuBlT,EAC9B,OAAO,KAGX,MAAMylD,EDhEoCC,EAC1C1rD,EACAmB,EACAmE,EACAU,KAEA,MAAM,GAEFc,EAAE,SACFiF,EAAQ,QACRxI,EACA3B,MACImD,gBAAkBlD,OAAQkD,GAC1BC,qBAAuBnD,OAAQmD,IAClC,UACDnC,EAAS,OACTT,GACApC,GAEE,SAAE8F,GAAa3E,EAGfkD,EAAmCrE,EAAMya,0CAA2C,EAC1F,OACI1V,GACIjF,EAAAA,cAAC6rD,EAAAA,4BAA2BjlD,OAAA8C,OAAA,CACxBtH,UAAU,gCACV0pD,6BAA8B/oD,EAAU+oD,6BACxCC,gCAAiChpD,EAAUgpD,gCAC3CC,kCAAmC1C,EAA0CvmD,GAC7EkpD,mCAAoCjC,EAAyCjnD,GAC7EmpD,wCAAyCrB,EAAgD9nD,GACzFopD,uDAAwDhB,EACpDpoD,GAEJjB,KAAM,CAAEoE,UAASF,WAAUf,iBAAgBC,uBAC3CzB,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACVmgD,QAASZ,EAA2BhmD,EAAWzC,EAAWmD,GAC1DmmD,8BAA+BhrD,EAAMkZ,sBACrC+xC,mBAAmB,EACnBC,gBArBa,EAsBbv8C,cAAe1N,QAAmCwB,IAAzBxB,EAAO0N,cAA8B1N,EAAO0N,mBAAgBlM,EACrFuB,oCAAqCd,GAChCA,GAAoC,CAAEK,UAAW1E,EAAM0a,mBAEnE,ECiBuBgxC,CAA+B1rD,EAAOmB,EAAOmE,EAAWU,GAEpF,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMkZ,mBAAmB7I,gBAC9BrQ,EAAMkZ,mBAAmBmW,WACzBo8B,EACE,EAWTa,EAAwBA,CAAChnD,EAA6BzC,EAAmCmD,IAC3FnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,WACXC,gBACsB,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC7H,EAkDA62C,EAAsBA,CACxBvsD,EACAmB,EACAmE,KAEA,MAAMU,EAAUhG,EAAM4B,KAAKoE,QAAQnE,OACnC,IAAK7B,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,IAAKhG,EAAMoC,OAAOk2D,eACd,OAAO,KAGX,MAAM9L,EArDwBC,EAC9BzsD,EACAmB,EACAmE,EACAU,KAEA,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACT4pD,SAAS,SACTrmD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAlBwB,EAmBxBD,mBAAmB,GACrB,EAyBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EASTa,EAAyBl9B,IAE3B,MAAM,eAAE9f,EAAc,OAAEQ,EAAM,MAAEma,GAAUmF,EAE1C,OACIrwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLQ,EACAma,EACE,EAsBTsiC,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bwf,EACAlf,EACE,EAmPf,EA/NoF7Q,IAAQ,IAAAutD,EAAAC,EAAAgC,EAExF,MAAM,YACFt3C,EAAW,2BAEXE,EAA0B,0BAE1BD,EAAyB,UACzBY,EAAS,mBACTG,EAAkB,cAClBE,EAAa,wBACbjC,EAAuB,UACvBwB,EAAS,YACT1K,EAAW,YACX4K,EAAW,SACX/S,EAAQ,MACR2H,EAAK,MACL7K,EAAK,OACL0W,EAAM,eACNI,EAAc,gBACdE,EAAe,WACfO,EAAU,uBACVF,EAAsB,IACtBjE,EAAG,IAEHC,EAAG,0BACHwB,EAAyB,cACzBgB,EAAa,UACbnT,EAAS,MACTnE,EAAK,UACL0B,EAAS,uBACT0X,EAAsB,iBACtBlQ,EACAxC,KAAOzF,OAAQ8rD,GAAW,SAC1BvzC,GACA3a,EACJ,IAAImuD,EAAkBnuD,EAAM6C,UAAUsrD,QACtCA,GAAoC,QAA7BZ,EAAIvtD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA0rD,OAAA,EAAzBA,EAA2Br+B,OACtC,MAAMk/B,EAAwF,QAAtEZ,EAA2BxtD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAA2rD,OAAA,EAA3CA,EAA6Ca,eAC1FC,EAAmBF,SAAAA,EAAoBG,QAAUH,EAAmBG,QAAU,GAC9EC,EAAqBJ,SAAAA,EAAoBK,UAAYL,EAAmBK,UAAY,IAEnFC,EAAcC,GAAmB7uD,EAAAA,SAAuB,KACxD8uD,EAAeC,GAAoB/uD,EAAAA,UAAwB,GAsB5DmwD,EAAenwD,EAAAA,aAAkByF,UAAW,IAAA6pD,EAC9C,MAAMpkC,EAAQ,IAAImlC,EAAAA,qCACW,QADyBf,EAClDpvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAutD,OAAA,EAAzBA,EAA2Bx4C,SAC3B20C,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,KAChB7E,EAAgB6E,MAChB,SAoBEC,EAAAA,EAAAA,iCAAgCrlC,EAAOhrB,EAAMuD,QAAQ6F,eACtD+C,OAAOC,IACJpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,IAEvCrE,MAAK8hB,IACF,GAAIA,GAAYxoB,EAAAA,gBAAgBC,YAAYuoB,GAAW,CAAC,IAADsmC,EACnD,MAAMC,EAAoB/4C,IAA+B,IAAAg5C,EAAA,OAC5B,QAAzBA,EAAAh5C,EAAMi5C,2BAAmB,IAAAD,GAAiB,QAAjBA,EAAzBA,EAA2BE,uBAAe,IAAAF,OAAA,EAA1CA,EAA4CG,iBAAkBrC,CAAgB,EAC5EsC,EAAkC5mC,EAAS3jB,OAAOkqD,GAClDM,EAA6BrvD,EAAAA,gBAAgBC,YAAYmvD,GACzDA,EAAgCrF,EAAgB6E,WAChDxsD,EACAktD,EAtDUC,KAC5B,GAAIA,GAAyBvvD,EAAAA,gBAAgBC,YAAYsvD,EAAsBC,6BAC3E,IAAK,MAAMl8B,KAA+Bi8B,EAAsBC,4BAA6B,CAAC,IAADC,EACzF,IAC6C,QAAzCA,EAAAF,EAAsBN,2BAAmB,IAAAQ,GAAiB,QAAjBA,EAAzCA,EAA2CP,uBAAe,IAAAO,OAAA,EAA1DA,EAA4DC,uBAC5Dp8B,EAA4Bq8B,iBAE5B,OAAOr8B,EAA4Bs8B,eAAe,CAK9C,EA0CyCC,CAAuBR,GAE9DS,GA1BQC,EAyBqBV,SAA+C,QAArBP,EAA1BO,EAA4BJ,2BAAmB,IAAAH,OAAA,EAA/CA,EAAiDkB,oBAxBvFtD,EAAUp/C,oBAIXtN,EAAAA,gBAAgBC,YAAY8vD,IACrBA,EAAmBhG,EAAgB6E,MAAMqB,kBAAqBlG,EAAgB6E,MAoB/CpwD,EAAM6C,UAAU6uD,YAAc1xD,EAAM6C,UAAU8uD,eAC1EC,EAAgCd,GAAsCQ,EACtEO,EAAiC,IAAGxlC,EAAAA,EAAAA,QACtCrsB,EAAM6C,UAAUivD,iCAChBtD,MACCoD,IACLjD,EAAgBkD,EAAgC,CAhClCN,KAgCkC,IAI5D1C,GAAiB,EAAM,GACxB,CAC0B,QAD1BW,EACCxvD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA2tD,OAAA,EAAzBA,EAA2B54C,SAC3Bs3C,EAAUp/C,iBACVw/C,EACAE,EACAxuD,EAAMuD,QAAQ6F,cACdpJ,EAAM6C,UAAUivD,iCAChB9xD,EAAM6C,UAAU6uD,YAChB1xD,EAAM6C,UAAU8uD,eAChB3xD,EAAMyK,YAGV3K,EAAAA,WAAgB,KACRE,EAAMoC,OAAO2vD,0BACb9B,IAAe9jD,OAAOC,IAClBpM,EAAMyK,UAAU2B,MAAMA,EAAMG,QAAQ,GACrC,GAER,CAAC0jD,EAAcrB,EAAe5uD,EAAMyK,UAAWzK,EAAMoC,OAAO2vD,4BAE/Dh0B,EAAAA,EAAAA,KACI,SAAAi0B,EAAA,OAAiD,QAAjDA,EAAMhyD,EAAM4B,KAAK6D,0BAA0B5D,cAAM,IAAAmwD,OAAA,EAA3CA,EAA6CC,uBAAuB,IAC1E,KACIpD,GAAiB,EAAK,IAoB9B,OACI/uD,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK0O,GACRpY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GAA6BpY,EAAMkX,cAC7CpX,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACLwC,GAAYA,EAAS,GAAGnW,KACxB5B,EACD9C,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,+BACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwCisD,GACtD70C,GAELxZ,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,6BACZpC,EAAAA,cAAA,OAAKoC,UAAU,kCAAkClC,EAAM6C,UAAU2vD,WAChE/kD,GAEJkL,GAzLQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIk+C,GAAgC,EAsLtDmF,CAAgB95C,GAC7BwB,GAlZSA,KACtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EA2YgB0nC,CAAiBv4C,GAChCra,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACZpC,EAAAA,cAAA,OAAKoC,UAAU,yCACV4D,GA3cF6sD,EACnBC,EACAttD,EACAtF,EACAmB,EACA0xD,EACAt4C,EAGAvE,EACAC,EACAwB,EACApN,EACAoO,KAGA,MAAM,eAAEpI,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,GAAW+hD,GAE3D,UAAE/vD,GAAc7C,GAEhB,SAAE8F,GAAa3E,EAErB,OACIrB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GACLta,EACAM,GAGL/Q,EAAAA,cAACmrB,EAAAA,oBAAmB,CAChBnkB,GAAG,oCACHkP,IAAKA,EACLC,IAAKA,EACLwB,0BAA2BA,EAC3ByT,aAAcplB,EACdqlB,SAAUT,EAAgBplB,GAC1B8lB,uBAAwBvoB,EAAUuoB,uBAClCC,yBAA0BxoB,EAAUwoB,yBACpCC,yBAA0BzoB,EAAUyoB,yBACpCC,gBAAiBsnC,EAAmBtnC,gBACpCC,gBAAiBqnC,EAAmBrnC,gBACpCnhB,iBAAkBA,IAErBoO,EACA8B,EACE,EA+Zao4C,CACI7sD,EACAR,EACAtF,EACAmB,EACA0B,EACA0X,EACAvE,EACAC,EACAwB,EACApN,EACAoO,GAEPzY,EAAMuY,mBAGdvY,EAAMoC,OAAO2vD,0BAA4BzD,GA/CXwE,MAA8B,IAAA5C,EAAAzC,EAErE,GAD6BjsD,EAAAA,gBAAgBC,YAAqC,QAA1ByuD,EAAClwD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAAquD,OAAA,EAAzBA,EAA2B9pD,kBACTxC,KAAtB,QAAzB6pD,EAAAztD,EAAM4B,KAAKoE,QAAQnE,cAAM,IAAA4rD,OAAA,EAAzBA,EAA2BjxC,iBACnD,OAOJ,OAAO1c,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GALuB,CAC/BtH,UAAW,0CACXqhB,IAAK,SAGyBmrC,EAAoB,EAqCgBoE,GAC7Dp5C,EAvZQX,KAErB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAgZEiiD,CAAgBl6C,GAChBF,GAxYUA,KAEvB,MAAM,eAAExI,EAAc,cAAExJ,EAAa,QAAE0J,EAAO,YAAEtC,EAAW,OAAE4C,EAAM,OAAEG,EAAM,MAAEE,EAAK,wBAAER,GAA4BmI,EAEhH,OACI/Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLxJ,EACA0J,EACAG,EACAzC,EACA4C,EACAG,EACAE,EACE,EA2XiBojD,CAAkBz7C,GACjCO,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,GACnD6R,EACA+B,GAAsBsyC,EAAyBxrD,EAAOmB,EAAOmE,GAC7DuT,SAAAA,EAAanI,wBACV5Q,EAAAA,cAAA,OAAKoC,UAAU,8BAA8B2W,EAAYnI,yBACzD,KArPQmf,KACxB,GAAKA,GAAsC,IAAvBA,EAAYjpB,OAIhC,OAAO9G,EAAAA,cAAAA,EAAAA,SAAA,KAAG+vB,EAAY,GAAM,EAiPfD,CAAmB5vB,EAAMoN,OAASpN,EAAMoN,MAAMyiB,aAC/C/vB,EAAAA,cAAA,OAAKoC,UAAU,gCAAgClC,EAAM6C,UAAU0xD,UAC/Dz0D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACX0X,GAAmByzC,EAAsBzzC,GACzCK,GAA0BozC,EAAsBpzC,IAErDna,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,mCACZpC,EAAAA,cAAA,OAAKoC,UAAU,wCAAwClC,EAAM6C,UAAU2xD,iBACtEvmD,GAEJzM,EAAAA,gBAAgBC,YAAYzB,EAAMoN,MAAMqnD,sBACrC30D,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCAAqClC,EAAMoN,MAAMqnD,qBAAqB,IACtF,MAEH,2uBC3hBjB,MAmBMnI,EAAwBA,CAC1BhnD,EACAzC,EACAmD,IACEnE,IACFyD,SAAAA,EAAWyB,iBAAiB,CACxBC,UAAW,WACXC,gBACsB,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC7H,EAiDA62C,EAAsBA,CACxBvsD,EACAmB,EACAmE,KACoB,IAAAqvD,EACpB,MAAM3uD,EAA8B,QAAvB2uD,EAAG30D,EAAM8hB,sBAAc,IAAA6yC,OAAA,EAApBA,EAAsB3uD,QACtC,IAAKhG,EAAMoZ,gBAAkBpT,EACzB,OAAO,KAGX,MAAMwmD,EAhDwBC,EAC9BzsD,EACAmB,EACAmE,EACAU,KAEA,MAAM,QAAEzC,EAAO,UAAEV,GAAc7C,EACzB0sD,EAAY1sD,EAAM4B,KAAK8qD,UAAU7qD,OAEvC,OACI/B,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACTuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBjsD,EAAM0E,gBAC1BwmD,gBAjBwB,EAkBxBD,mBAAmB,GACrB,EAqBiBK,CAA0BzsD,EAAOmB,EAAOmE,EAAWU,GAC1E,OACIlG,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKxJ,EAAMoZ,cAAc/I,gBACzBrQ,EAAMoZ,cAAciW,WACpBm9B,EACE,EAqDTc,EAA2Bx9B,IAC7B,MAAM,eAAEzf,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,OAAEM,EAAM,OAAEkf,GAAWD,EAEzE,OACIhwB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bwf,EACAlf,EACE,EAoBT+jD,EAAqB50D,IACvB,MAAM,MACFyN,EAAK,WACL0M,EAAU,SACVrU,EAAQ,eACR4T,EAAc,uBACda,EAAsB,QACtB6S,EAAO,0BAEPjV,EAAyB,2BACzBC,EAA0B,cAC1BsV,EAAa,cACbtU,EAAa,UACbT,EAAS,UACTrT,EAAS,MACTnE,GACAnB,EACJ,OAAIotB,EACOttB,EAAAA,cAAAA,EAAAA,SAAA,KAAGstB,GAIVttB,EAAAA,cAAAA,EAAAA,SAAA,KACIA,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK4O,GACNtY,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKkkB,KAEd5tB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK2O,GACNrY,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,gCACZpC,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,qCACXlC,EAAM6C,UAAU2vD,UAChB/kD,GAEJ2L,GAAiBmzC,EAAoBvsD,EAAOmB,EAAOmE,IAEvDqT,GA7CQA,KACrB,MAAM,eAAEtI,EAAc,UAAEqf,GAAc/W,EAEtC,OAAO7Y,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GAAiBqf,EAAUtgB,IAAIk+C,GAAgC,EA0CtDmF,CAAgB95C,GAC7BwB,GAhFSA,KAEtB,MAAM,eAAE9J,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,GAAU7Q,EAEhE,OACIra,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACE,EAwEgB0nC,CAAiBv4C,GAC/BrU,GA1GM6sD,EACnB7sD,EACAyU,EACAva,KAGA,MAAM,eAAEqQ,EAAc,oBAAEwa,EAAmB,QAAEta,EAAO,MAAEya,EAAK,OAAEna,GAAW/K,GAClE,cAAE2S,GAAkBzY,EAE1B,OACIF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACNvQ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqhB,GAAsBta,GAC/Bya,EACAvS,EACA8B,EACA1J,EACE,EA0Fc8hD,CAAe7sD,EAAUyU,EAAwBva,GAC7D0Z,GAEN,EASLm7C,EAAwB70D,IAAuE,IAAA80D,EAAAC,EAEjG,MAAM,eACF5oC,EAAc,qBACdQ,EAAoB,qBACpBE,EAAoB,mBACpBE,EAAkB,mBAClBC,EAAkB,UAClBjU,EAAS,mBACTmU,EAAkB,iBAClBC,GACAntB,EAEJ,OACIF,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAK2iB,GACRrsB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKmjB,GACLI,EACDjtB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,0BACXlC,EAAM4C,MACL5C,EAAMotB,SAAYkB,EAAAA,iBAAiBqX,cAAsC,QAAzBmvB,EAAC90D,EAAMmB,MAAM2K,oBAAY,IAAAgpD,OAAA,EAAxBA,EAA0B5lC,QAMzE,GALApvB,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,2BACXlC,EAAM6C,UAAUsrD,QACQ,QADD4G,EACvB/0D,EAAMmB,MAAM2K,oBAAY,IAAAipD,OAAA,EAAxBA,EAA0B7lC,QAKlClvB,EAAMsZ,SAGfxZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKwjB,GAAqB4nC,EAAkB50D,IACjDF,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAKqjB,GACN/sB,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK0jB,GACLnU,GAAaoU,EACbpU,GA/PIA,KAErB,MAAM,eAAE1I,EAAc,WAAEgf,EAAU,OAAEre,GAAW+H,EAE/C,OACIjZ,EAAAA,cAACwvB,EAAAA,KAAI5oB,OAAA8C,OAAA,GAAK6G,GACLgf,EACAre,EACE,EAuPmBiiD,CAAgBl6C,KAGjC,EASJwX,EACTvwB,IAEA,MAAM,UAAEgsB,EAAS,gBAAEC,EAAe,YAAEhZ,GAAgBjT,EAC9Cg1D,EAAqBjzD,EAAAA,EAAA,GAAsBiqB,GAAS,IAAEppB,MAAO5C,EAAM6C,UAAUqpB,sBACnF,OACIpsB,EAAAA,cAACswB,EAAAA,OAAM1pB,OAAA8C,OAAA,GAAKwrD,GACP/oC,EACAhZ,GAAe4hD,EAAqB70D,GAChC,EAIjB,iCCtTO,IAAKuzD,mBAAZ,SAAYA,GACVA,EAAA,kCACAA,EAAA,sCACAA,EAAA,qBACD,CAJD,CAAYA,IAAAA,EAAe,4wBC8C3B,MAAMgF,EAAyD78C,IAS1D,IAT2D,MAC5DjO,EAAK,MACL6f,EAAK,QACL/pB,EAAO,GACPuD,EAAE,SACFiF,EAAQ,mBACRysD,EAAkB,SAClBC,EAAQ,SACRC,GACHh9C,EACG,OACI5b,EAAAA,cAAA,KAAGoC,UAAW,6BAA6Bw2D,KACvC54D,EAAAA,cAAA,QAAMoC,UAAU,8BAA8BorB,GAC7C7f,GAAmB,IAAVA,EACN3N,EAAAA,cAAC8P,EAAAA,eAAc,CACXhO,KAAM,CACF6L,MAAO,CAAE8N,wBAAyB9N,IAEtCnC,cAAemtD,EACfl1D,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACV7J,UAAU,+BAGdpC,EAAAA,cAAA,QAAMoC,UAAU,8BAA8Bs2D,GAElD,EAING,EAA8BA,CAChC34D,EACAyN,EACA6f,EACAorC,IAGI54D,EAAAA,cAACy4D,EAAkB,CACf9qD,MAAOA,EACP6f,MAAOA,EACP/pB,QAASvD,EAAMuD,QACfuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBysD,mBAAoBx4D,EAAMw4D,mBAC1BC,SAAUz4D,EAAMy4D,SAChBhuD,UAAWzK,EAAMyK,UACjBiuD,SAAUA,IAKhBE,EAA0B5gC,GACpBA,GAAiBA,EAAconB,eAAkB,EAYhDyZ,EAAkB74D,IAC3B,MAAM,YAAEy7B,EAAW,UAAEhI,GAAczzB,EAAM0F,KACnCozD,EAAerlC,aAAS,EAATA,EAAWptB,QAAOqtB,GAAYA,EAASqlC,gBACtDC,EAAmC,CACrCtW,SAAUoW,aAAY,EAAZA,EAAc1pD,KAAK6pD,GAClBN,EACH34D,EACAi5D,EAAYC,eACZ7sC,EAAAA,EAAAA,QAAOrsB,EAAMm5D,aAAcF,EAAYG,WACvC,aAGR7W,WAAYoW,EAA4B34D,EAAOy7B,EAAaz7B,EAAMq5D,gBAAiB,UAGvF,GAAIr5D,EAAMg4B,cAAe,CACrB,MAAMshC,EAzBiBC,EAACvhC,EAA+BtyB,KAC3D,MAGM8zD,GAAsBxhC,EAAcmjB,iBAAmB,IAAIoE,QAHzCka,CAACzxD,EAAe2xC,IAC7B3xC,GAAS2xC,EAASS,SAAW,IAEiD,GACnF2K,GAAUr/C,EAAK+1B,aAAe,GAAKm9B,EAAuB5gC,GAChE,OAAOla,KAAK9H,IAAIwjD,EAAoBzU,EAAO,EAmBhBwU,CAAuBv5D,EAAMg4B,cAAeh4B,EAAM0F,MACnE05C,EAAgBwZ,EAAuB54D,EAAMg4B,eAC7C0hC,GAA4Bj+B,GAAe,GAAK69B,EAAiBla,EAEnEA,EAAgB,IAChB4Z,EAAW3W,QAAUsW,EAA4B34D,GAAQo/C,EAAep/C,EAAM25D,cAAgB,iBAAkB,YAGhHL,EAAiB,IACjBN,EAAWrf,SAAWgf,EAClB34D,GACCs5D,EACDt5D,EAAM45D,eAAiB,mBACvB,cAIRZ,EAAWzW,WAAaoW,EAA2B52D,EAAAA,EAAC,CAAD,EAC1C/B,GAAK,IAAEy4D,cAAU70D,IACtB81D,EACA15D,EAAMq5D,gBACN,QACF,CAGN,OAAOL,CAAU,mTC/FrB,MAAMa,EAAuB9tD,GACe,cAAjCA,EAAS+tD,oBAAsC,eAAiB,YAGpE,SAASngD,EACZ3Z,EACA8hB,GAAgC,IAAAi4C,EAAAC,EAEhC,MAAM,SAAEjuD,GAAa/L,EAIf2F,EAAsE,QAA9Co0D,EAAsC,QAAtCC,EAAGh6D,EAAM4B,KAAK+D,gCAAwB,IAAAq0D,OAAA,EAAnCA,EAAqCn4D,cAAM,IAAAk4D,EAAAA,EAAIj4C,aAAc,EAAdA,EAAgBnc,yBAE1FzD,EAAY23D,EAAoB9tD,GACtC,IAAKpG,IAA6BnE,EAAAA,gBAAgBC,YAAYkE,GAC1D,OAEJ,MAAM6C,EAAoB7C,EAAyBrB,MAAKmE,GAAYA,EAASC,eAAiBC,EAAAA,aAAaF,WAE3G,GAAID,EAAmB,CACnB,IAAIyxD,EAMJ,OAJIA,EADAzxD,EAAkB0xD,eACG,GAAGh4D,sBAA8BA,qBAA6BsG,EAAkB0xD,eAAel9C,gBAE/F,GAAG9a,qBAGxBpC,EAAAA,cAAA,OAAKoC,UAAW,GAAGA,qBACfpC,EAAAA,cAAA,QAAMoC,UAAW+3D,GAAqBzxD,EAAkB4oD,iBACtD,CAKlB,CAEO,SAAS/4C,EACZrY,EACA8hB,GAAgC,IAAApG,EAAA6xC,EAAArgD,EAAAitD,EAEhC,MACI/3D,QAAQ,gBAAEg4D,EAAkB,MAAM,SAClCruD,GACA/L,EACEkC,EAAY23D,EAAoB9tD,GAIhC/F,EAA+D,QAAxD0V,EAA6B,QAA7B6xC,EAAqB,QAArBrgD,EAAGlN,EAAM4B,KAAKoE,eAAO,IAAAkH,OAAA,EAAlBA,EAAoBrL,cAAM,IAAA0rD,EAAAA,EAAIzrC,aAAc,EAAdA,EAAgB9b,eAAO,IAAA0V,EAAAA,OAAI9X,EAEzE,OAAOoC,GAAWlG,EAAAA,cAAC0Q,EAAAA,QAAO,CAACtO,UAAW,GAAGA,mBAA4BuO,WAAY2pD,EAAiBt2D,KAAkB,QAAdq2D,EAAEn0D,EAAQxB,YAAI,IAAA21D,EAAAA,EAAI,IAC5H,CAEO,SAAS7hD,EACZtY,EACA8hB,GAAgC,IAAAkwB,EAAAod,EAAAiL,EAEhC,MAAM,SAAEtuD,GAAa/L,EACfkC,EAAY23D,EAAoB9tD,GAIhC/F,EAA+D,QAAxDgsC,EAA6B,QAA7Bod,EAAqB,QAArBiL,EAAGr6D,EAAM4B,KAAKoE,eAAO,IAAAq0D,OAAA,EAAlBA,EAAoBx4D,cAAM,IAAAutD,EAAAA,EAAIttC,aAAc,EAAdA,EAAgB9b,eAAO,IAAAgsC,EAAAA,OAAIpuC,EAEzE,OAAOoC,GAAWlG,EAAAA,cAAA,KAAGoC,UAAW,GAAGA,0BAAmC8D,EAAQ2K,YAClF,CAQO,SAAS+H,EACZ1Y,EACA8hB,GAAgC,IAAA0tC,EAAA8K,EAEhC,MAAM,SAAEvuD,GAAa/L,EACfkC,EAAY23D,EAAoB9tD,GAEtC,GACI/L,EAAMuD,QAAQsE,IAAIzF,UAChBpC,EAAMuD,QAAQsE,IAAIzF,OAAOm4D,0BAAkF,SAAtDv6D,EAAMuD,QAAQsE,IAAIzF,OAAOm4D,0BAEhF,OAKJ,MAAMv0D,EAAoC,QAA7BwpD,EAAqB,QAArB8K,EAAGt6D,EAAM4B,KAAKoE,eAAO,IAAAs0D,OAAA,EAAlBA,EAAoBz4D,cAAM,IAAA2tD,EAAAA,EAAI1tC,aAAc,EAAdA,EAAgB9b,QAC9D,GAAKA,GAAYA,EAAQw0D,qBAKzB,OACI16D,EAAAA,cAAA,OAAKoC,UAAW,GAAGA,8BACfpC,EAAAA,cAAA,YAAOkG,EAAQw0D,uBANnBx6D,EAAMyK,UAAU2sB,QAAQ,8CAShC,CAEA,IAAI/sB,EAcJ,MAAMowD,EAAoBA,CACtBz6D,EACAmB,EACAmE,EACAo1D,EACAC,EACAj1D,EACAM,EACAqC,IACExG,IACF,IAAI+4D,EACAC,EACAC,GAAyC7xD,EAAAA,EAAAA,IACzCpH,EACA6D,EACA1F,EAAM6C,UACN7C,EAAMuD,QACNyC,EACAqC,OACAzE,GAcJ,GAX6B,eAAzB/B,EAAOiH,cACP8xD,EAAiD,eAAzB/4D,EAAOiH,eAAiCiyD,EAAAA,EAAAA,IAAiBl5D,EAAOm5D,UAAWh7D,EAAM6C,gBAAae,EAE7F,qBAAzB/B,EAAOiH,gBACPjH,EAAOkH,kBACgC,gBAAtClH,EAAOkH,iBAAiBX,WAAqE,mBAAtCvG,EAAOkH,iBAAiBX,YAEhFwyD,GAAwB3xD,EAAAA,EAAAA,IAAgBpH,EAAQ6D,EAAM1F,EAAM6C,UAAW7C,EAAMuD,QAASyC,EAASqC,OAAqBzE,GACpHk3D,OAAqBl3D,GAGI,wBAAzB/B,EAAOiH,cACP,QAA+BlF,IAA3BzC,EAAMuS,kBAAkCvS,EAAMuS,kBAAoB1T,EAAMoC,OAAO64D,mBAAqBP,GAA2B,CAC/H,MAAMQ,EAAsBl7D,EAAMuD,QAAQo4C,iBAAiBC,eACvD57C,EAAMoC,OAAO64D,mBAAqBP,GAEtCG,EAA4B76D,EAAM6C,UAAUs4D,6BAA6BrkB,QAAQ,cAAeokB,EAAqB,MAClH,GAAI/5D,EAAMuS,kBAAoB1T,EAAMoC,OAAOg5D,mBAAqBT,GAA2B,CAC9F,MAAMO,EAAsBl7D,EAAMuD,QAAQo4C,iBAAiBC,eACvD57C,EAAMoC,OAAOg5D,mBAAqBT,GAEtCE,EAA4B76D,EAAM6C,UAAUw4D,6BAA6BvkB,QAAQ,cAAeokB,EAAqB,CAI7H51D,EAAUyB,iBAAiB,CACvBC,UAAW,YACX6G,cAAe+sD,EACf3zD,gBAC6B,qBAAzBpF,EAAOiH,eACD5B,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBnG,EAAM6C,UAAWmD,aAAO,EAAPA,EAAS0P,YACvE,CAAC,EACXlC,kBAAmBqnD,EACnB7xD,WAAY8xD,GACd,EASAQ,EAAoBA,CAACvvD,EAAkBzG,IAAiCzD,IACzD,cAAbkK,GACAzG,EAAUgD,iBAAgB,EAAO,EAIlC,SAAS0Q,EACZhZ,EACAmB,EACAmE,EACAo1D,EACAC,EACA74C,EACAjK,GAA8B,IAAAq4C,EAAAqL,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAAAC,EAE9B,MAAM,GAAEh1D,EAAE,SAAEiF,EAAQ,QAAExI,EAAO,UAAEV,GAAc7C,EAIvCgG,EAAoC,QAA7BkqD,EAAqB,QAArBqL,EAAGv7D,EAAM4B,KAAKoE,eAAO,IAAAu1D,OAAA,EAAlBA,EAAoB15D,cAAM,IAAAquD,EAAAA,EAAIpuC,aAAc,EAAdA,EAAgB9b,QAIxDN,EAA8B,QAA1B81D,EAAkB,QAAlBC,EAAGz7D,EAAM4B,KAAK8D,YAAI,IAAA+1D,OAAA,EAAfA,EAAiB55D,cAAM,IAAA25D,EAAAA,EAAI15C,aAAc,EAAdA,EAAgBpc,KAIlDC,EAAsE,QAA9C+1D,EAAsC,QAAtCC,EAAG37D,EAAM4B,KAAK+D,gCAAwB,IAAAg2D,OAAA,EAAnCA,EAAqC95D,cAAM,IAAA65D,EAAAA,EAAI55C,aAAc,EAAdA,EAAgBnc,0BAE1F,SACFG,EACA8H,YAAY,gBAAE3G,EAAe,cAAE4G,EAAa,kBAAE2F,EAAiB,WAAExK,EAAU,UAAEhC,GAAW,gBACxFnB,EAAe,oBACfsN,EAAmB,0BACnBE,EAAyB,cACzBoD,GACAtV,EAEEkH,EAAsBlH,EAAMwE,yBAC5BxE,EAAMwE,yBAAyB4C,yBAC/B5C,GAA4BA,EAAyBiB,OAAS,EAC9DjB,EAAyB,GAAG4C,8BAC5B3E,EAEA8G,EAAqC,CACvCC,aAAc9H,EAAU+H,mBACxBC,qBAAsBhI,EAAUiI,2BAChCC,uBAAwBlI,EAAUkI,uBAClCC,kBAAmBnI,EAAUoI,qBAC7BC,qBAAsBrI,EAAUsI,8BAChCC,kBAAmBvI,EAAUwI,wBAC7BC,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAC5BC,kBAAmB7I,EAAU6I,mBAY3BqwD,EAAwC,cAAbhwD,GAA2E,YAA/C/L,EAAM4B,KAAK+D,yBAAyBwC,OAC7F4zD,GACAz2D,EAAU4N,yBAAwB,GAGtC,MAAM8oD,EAAwC,cAAbjwD,GAAmE,aAAb,QAA1B6vD,EAAA57D,EAAM4B,KAAKyF,uBAAe,IAAAu0D,OAAA,EAA1BA,EAA4BzzD,QACrF6zD,GAA4B12D,EAAU8N,+BACtC9N,EAAU8N,+BAA8B,GAG5C/I,GAAmBC,EAAAA,EAAAA,oBAAmBtK,EAAMuD,QAAQC,QAAQ+G,kBAAoBvK,EAAM+L,SAAU/L,EAAMyK,WAGtG,MAAMwoB,EAA0E,QAArD4oC,EAAG77D,EAAMuD,QAAQ6F,cAAcgT,eAAe7O,eAAO,IAAAsuD,OAAA,EAAlDA,EAAoD3oC,sBAE5E7rB,EAA+B,cAAb0E,EAA2B5K,EAAM8Q,uBAAmD,QAA7B6pD,EAAG97D,EAAM4B,KAAKyF,uBAAe,IAAAy0D,OAAA,EAA1BA,EAA4Bj6D,OACxG2zB,EACFh0B,EAAAA,gBAAgBC,YAAY4F,aAAe,EAAfA,EAAiB0H,kBAAoB1H,EAAiB0H,gBAAgB,GAAGQ,OAAS0jB,EAC5G/wB,EAAY23D,EAAoB9tD,GAChCoqB,EAAahjB,GAAoC,cAAbpH,GACpC,6BAAEoE,IAAiCnQ,EAAMuD,QAAQC,QAAQ4M,SAC/D,MAAO,CACHC,eAAgB,CACZnO,UAAW,GAAGA,4BAElB8O,OAAQhL,GACJlG,EAAAA,cAACm8D,EAAAA,mBAAkB,CACfC,cAAer5D,EAAUq5D,cACzBvK,eAAgB9uD,EAAU8uD,eAC1BzoD,eAAeC,EAAAA,EAAAA,IAAW,OAAQ5F,EAAQ6F,eAC1CtD,SAAUA,EACVlE,KAAM,CAAEoE,UAASyH,MAAOtM,EAAM2K,cAC9BvI,QAASA,EACT0N,SAAUklB,EACVrvB,GAAIA,EACJ+Q,qBAAsBA,EACtB9L,SAAUA,EACVmgD,QAASuO,EACLz6D,EACAmB,EACAmE,EACAo1D,EACAC,EACAj1D,EACAM,EACAqC,GAEJ+kD,mBAAoBvnD,EACpBwC,oBAAqBA,EACrB0zD,yBAA0BA,EAC1B5oD,oBAAqBA,EACrBD,wBAAyB5N,EAAU4N,wBACnC8oD,yBAA0BA,EAC1B3oD,0BAA2BA,EAC3BD,8BAA+B9N,EAAU8N,8BACzC1I,cAAeA,EACfmB,aAAc7L,EAAMuD,QAAQC,QAAQqI,aACpCiE,cAlEiC,CACzCjG,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,GA6DFC,iBAAkBA,EAClB8xD,uBAAwB1lD,EACxBhD,eAAgBtS,EAAMsS,eACtB2oD,kBAAmBj7D,EAAMuS,iBACzB2G,sBAAuBlZ,EAAMkZ,sBAC7B+gD,kBAAmBp7D,EAAMoC,OAAOg5D,kBAChCH,kBAAmBj7D,EAAMoC,OAAO64D,kBAChCP,yBAA0BA,EAC1BC,yBAA0BA,EAC1Bp9C,oCAAqCC,EAAqCxd,IAAU0d,EAA+B1d,GACnHq8D,6BAA8B7mC,EAC9B8mC,MAAOhB,EAAkBvvD,EAAUzG,GACnCi3D,+BAA6C,cAAbxwD,IAGxCsjB,WACIvvB,EAAAA,cAACgR,EAAgB,CACb7J,gBAAiBA,EACjB4G,cAAeA,EACf2F,kBAAmBA,EACnBxK,WAAYA,EACZnG,UAAWA,EACXkO,UAAyB,cAAd/J,EACXmJ,6BAA8BA,KAI9C,CAQO,SAAS2I,EAAsB9Y,EAAgDmB,GAAmB,IAAAq7D,EAAAC,EAAAC,EACrG,MAAM,GAAE51D,EAAE,SAAEiF,EAAQ,QAAExI,EAAO,UAAEV,GAAc7C,EAE7C,OACImB,EAAM2K,cACFhM,EAAAA,cAAC8P,EAAAA,eAAc,CACX9I,GAAIA,EACJiF,SAAUA,EACVxI,QAASA,EACT3B,KAAM,CAAE6L,MAAOtM,EAAM2K,cACrB9F,QAA2B,QAApBw2D,EAAEx8D,EAAM4B,KAAKoE,eAAO,IAAAw2D,OAAA,EAAlBA,EAAoB36D,OAC7B86D,qBACkC,QADdF,EAChBz8D,EAAM4B,KAAKwC,aAAavC,cAAM,IAAA46D,GAE7B,QAF6BA,EAA9BA,EAAgCn4D,MAC5BF,GAAsC,0DAAtBA,EAAaI,cAChC,IAAAi4D,OAAA,EAFDA,EAEGh4D,UAEPm4D,oCACkC,QADCF,EAC/B18D,EAAM4B,KAAKwC,aAAavC,cAAM,IAAA66D,GAE7B,QAF6BA,EAA9BA,EAAgCp4D,MAC5BF,GAAsC,oEAAtBA,EAAaI,cAChC,IAAAk4D,OAAA,EAFDA,EAEGj4D,UAEPo4D,eAAgB,CACZC,oBAAqBj6D,EAAUi6D,oBAC/BnyB,0BAA2B9nC,EAAU8nC,0BACrCoyB,mCAAoCl6D,EAAUk6D,mCAC9CC,sCAAuCn6D,EAAUm6D,sCACjDC,sCAAuCp6D,EAAUo6D,uCAErD3xD,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,kBAI5C,CAEO,SAAS+N,EACZxZ,EACA8hB,GAAgC,IAAAo7C,EAAAC,EAEhC,MAAM,GAAEr2D,EAAE,SAAEiF,EAAQ,QAAExI,EAAO,UAAEV,GAAc7C,EAIvC+oB,EAAkD,QAApCm0C,EAA4B,QAA5BC,EAAGn9D,EAAM4B,KAAKmnB,sBAAc,IAAAo0C,OAAA,EAAzBA,EAA2Bt7D,cAAM,IAAAq7D,EAAAA,EAAIp7C,aAAc,EAAdA,EAAgBiH,eAC5E,IAAKA,IAAmBA,EAAeq0C,cACnC,OAAOt9D,EAAAA,cAAA,YAeX,OAZIA,EAAAA,cAACu9D,EAAAA,gBAAe,CACZC,UAAWv0C,EAAeq0C,eAAiB,EAC3CG,UAAQ,EACRx3B,WAAW1Z,EAAAA,EAAAA,QAAOxpB,EAAU26D,uBAAwBz0C,EAAeq0C,cAAe,KAClFK,YAAa,GAAG10C,EAAe20C,eAC/B97D,KAAM,CAAC,EACP2B,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,GAKtB,CAEA,SAASq9C,EAA0CvmD,GAC/C,MAAO,CACHwmD,yBAA0BxmD,EAAUwmD,yBAEpCC,wBAAyBzmD,EAAUymD,wBACnCC,4BAA6B1mD,EAAU0mD,4BAEvCC,gCAAiC3mD,EAAU2mD,gCAC3CC,iCAAkC5mD,EAAU4mD,iCAC5CC,sCAAuC7mD,EAAU6mD,sCAEjDC,oBAAqB9mD,EAAU8mD,oBAC/BC,wBAAyB/mD,EAAU+mD,wBACnCC,cAAehnD,EAAUgnD,cAEjC,CAEA,SAASC,EAAyCjnD,GAC9C,MAAO,CACHknD,yBAA0BlnD,EAAUmnD,0BACpCC,wBAAyBpnD,EAAUqnD,mBACnCC,2BAA4BtnD,EAAUsnD,2BACtCC,yBAA0BvnD,EAAUwnD,+BAEpCC,yBAA0BznD,EAAUynD,yBAEpCC,yBAA0B1nD,EAAU2nD,8BACpCC,+BAAgC5nD,EAAU6nD,yCAElD,CAEA,SAASC,EAAgD9nD,GACrD,MAAO,CACH+nD,4BAA6B/nD,EAAU+nD,4BACvCC,2BAA4BhoD,EAAUgoD,2BACtCC,0CAA2CjoD,EAAUioD,0CACrDC,6CAA8CloD,EAAUkoD,6CACxDC,0CAA2CnoD,EAAUmoD,0CACrD1/C,cAAezI,EAAU0I,UACzBC,kBAAmB3I,EAAU2I,kBAC7BC,iBAAkB5I,EAAU4I,iBAEpC,CAEA,SAASw/C,EACLpoD,GAEA,MAAO,CACHqoD,yBAA0BroD,EAAUqoD,yBACpCC,8BAA+BtoD,EAAUsoD,8BACzCC,yBAA0BvoD,EAAUuoD,yBACpCC,+BAAgCxoD,EAAUwoD,+BAElD,CASA,MAAMC,EAA6BA,CAAChmD,EAA6BzC,EAAmCmD,IAChGnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,iBACXC,gBACsB,sBAAlBpF,EAAOsG,QAAiCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC9H,EAGC,SAASyD,EACZnZ,EACAmB,EACAmE,EACAjB,EACAK,GAAkB,IAAAi5D,EAElB,MAAM,GACF72D,EAAE,SACFiF,EAAQ,QACRxI,EACA3B,MACImD,gBAAkBlD,OAAQkD,GAC1BC,qBAAuBnD,OAAQmD,IAClC,UACDnC,GACA7C,EAEEgG,EAA4B,QAArB23D,EAAG39D,EAAM4B,KAAKoE,eAAO,IAAA23D,OAAA,EAAlBA,EAAoB97D,QAGhC+L,YAAY,gBAAE3G,EAAe,cAAE4G,EAAa,kBAAE2F,EAAiB,WAAExK,EAAU,UAAEhC,GAAW,SACxFlB,GACA3E,EAGJ,GAAIA,EAAMkZ,sBACN,OAEJ,MAAMnY,EAAY23D,EAAoB9tD,IAChC,6BAAEoE,GAAiCnQ,EAAMuD,QAAQC,QAAQ4M,SAE/D,MAAO,CACHC,eAAgB,CACZnO,UAAW,GAAGA,sCAElB8O,OAAQhL,GAAWjB,GACfjF,EAAAA,cAAC6rD,EAAAA,4BAA2BjlD,OAAA8C,OAAA,CACxBtH,UAAU,gCACV0pD,6BAA8B/oD,EAAU+oD,6BACxCC,gCAAiChpD,EAAUgpD,gCAC3CC,kCAAmC1C,EAA0CvmD,GAC7EkpD,mCAAoCjC,EAAyCjnD,GAC7EmpD,wCAAyCrB,EAAgD9nD,GACzFopD,uDAAwDhB,EACpDpoD,GAEJjB,KAAM,CAAEoE,UAASF,WAAUf,iBAAgBC,uBAC3CzB,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACVmgD,QAASZ,EAA2BhmD,EAAWzC,EAAWmD,GAC1DmmD,8BAA+BhrD,EAAMkZ,sBACrClV,oCAAqCd,GAChCA,GAAoC,CAAEK,UAAWA,KAG9D2qB,WACIvvB,EAAAA,cAACgR,EAAgB,CACb7J,gBAAiBA,EACjB4G,cAAeA,EACf2F,kBAAmBA,EACnBxK,WAAYA,EACZnG,UAAWA,EACXkO,UAAyB,mBAAd/J,EACXmJ,6BAA8BA,IAI9C,CAUO,SAAS8I,EACZ9B,EACAnR,EACAtB,EACAvD,GAEA,IAAIA,EAAMkZ,sBAKV,OADAzV,EAAAA,EAAAA,mBAAkBF,GACX5E,EAAAA,aAAmBqX,EAA+C,CAAEnR,UAAStB,aACxF,CASA,MAAM4nD,EAAwBA,CAAChnD,EAA6BzC,EAAmCmD,IAC3FnE,IAEAyD,EAAUyB,iBAAiB,CACvBC,UAAW,WACXC,gBACsB,qBAAlBpF,EAAOsG,QAAgCjB,EAAAA,EAAAA,IAAmBrF,EAAOsE,kBAAmBtD,EAAWmD,aAAO,EAAPA,EAAS0P,YAAc,CAAC,GAC7H,EAGC,SAAS2D,EACZrZ,EACAmB,EACAmE,EACAwc,GAAgC,IAAA87C,EAEhC,MAAM,GACF92D,EAAE,SACFiF,EAAQ,QACRxI,EACA3B,MACI8qD,WAAa7qD,OAAQ6qD,IACxB,UACD7pD,GACA7C,EAEEgG,EAA4B,QAAlB43D,EAAA59D,EAAM4B,KAAKoE,eAAO,IAAA43D,GAAlBA,EAAoB/7D,OAAS7B,EAAM4B,KAAKoE,QAAQnE,OAASigB,aAAc,EAAdA,EAAgB9b,SAGrF4H,YAAY,gBAAE3G,EAAe,cAAE4G,EAAa,kBAAE2F,EAAiB,WAAExK,EAAU,UAAEhC,GAAW,gBACxFnB,GACA1E,EAGJ,GAAIA,EAAMkZ,sBACN,OAGJ,MAAMnY,EAAY23D,EAAoB9tD,IAChC,6BAAEoE,GAAiCnQ,EAAMuD,QAAQC,QAAQ4M,SAC/D,MAAO,CACHC,eAAgB,CACZnO,UAAW,GAAGA,gCAElB8O,OAAQhL,GACJlG,EAAAA,cAAC6sD,EAAAA,uBAAsB,CACnBzqD,UAAU,gCACV0qD,wBAAyB/pD,EAAU+pD,wBACnCC,6BAA8BhqD,EAAUgqD,6BACxCC,qBAAsBjqD,EAAUiqD,qBAChCC,2BAA4BlqD,EAAUkqD,2BACtCC,uBAAwBnqD,EAAUmqD,uBAClCC,4BAA6BpqD,EAAUoqD,4BACvCC,eAAgBrqD,EAAUqqD,eAC1BtrD,KAAM,CAAEoE,UAAS0mD,aACjBnpD,QAASA,EACTuD,GAAIA,EACJqmD,SAAS,SACTphD,SAAUA,EACVmgD,QAASI,EAAsBhnD,EAAWzC,EAAWmD,GACrDonD,mBAAoBvnD,IAG5BwpB,WACIvvB,EAAAA,cAACgR,EAAgB,CACb7J,gBAAiBA,EACjB4G,cAAeA,EACf2F,kBAAmBA,EACnBxK,WAAYA,EACZnG,UAAWA,EACXkO,UAAyB,aAAd/J,EACXmJ,6BAA8BA,IAI9C,CAOA,MAAM0tD,EAA2Bv4D,GAAiCqlB,IAC1DrlB,EAAUmM,gBACVnM,EAAUmM,eAAekZ,EAAU,EAIpC,SAASlR,EACZzZ,EACAmB,EACAmE,GAEA,MAAM,UAAEzC,EAAS,SAAEkJ,GAAa/L,GAE1B,SACF8F,EAAQ,IACRkQ,EAAG,IACHC,EACArI,YAAY,cAAEC,IACd1M,EAEEe,EAAY23D,EAAoB9tD,GAEtC,MAAO,CACHsE,eAAgB,CACZnO,UAAW,GAAGA,eAElB2oB,oBAAqB,CACjBtH,IAAK,QACLrhB,UAAW,GAAGA,4BACd4oB,QAAS,GAAG5oB,6BAEhBqO,QAASzQ,EAAAA,cAAA,OAAKoC,UAAW,GAAGA,qCAA8CW,EAAUkoB,wBACpFla,OAAQhD,GACJ/N,EAAAA,cAAA,QAAMoC,UAAU,iDACZpC,EAAAA,cAAA,QAAMoC,UAAU,2BAA0B,cAAa,SACvDpC,EAAAA,cAAA,YAAO+N,IAGfmd,MACIlrB,EAAAA,cAACg+D,EAAAA,SAAQ,CACLh3D,GAAI,GAAG5E,4BACP8T,IAAKA,EACLC,IAAKA,EACLiV,aAAcplB,EACdqlB,SAAU0yC,EAAwBv4D,GAClC8lB,uBAAwBvoB,EAAUuoB,uBAClC/gB,iBAAkBA,IAIlC,CAEO,SAASyP,EACZ9Z,EACA+9D,GAAkC,IAAAC,EAElC,MAAM,UAAEn7D,EAAS,QAAEU,EAAO,SAAEwI,GAAa/L,EACnCgG,EAA4B,QAArBg4D,EAAGh+D,EAAM4B,KAAKoE,eAAO,IAAAg4D,OAAA,EAAlBA,EAAoBn8D,OAE9BK,EAAY23D,EAAoB9tD,GAOhCkyD,EACFF,IAAehkD,EAAAA,EAAuBC,MAAQwI,EAAAA,kBAAkB07C,iBAAmB17C,EAAAA,kBAAkB27C,uBACnG77C,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAkB4zD,GACtDG,GAAYz7C,EAAAA,EAAAA,wBAAuBtY,EAAkBiY,GACrDxe,EAAOi6D,IAAehkD,EAAAA,EAAuBC,MAAQnX,EAAUw7D,qBAAuBx7D,EAAUy7D,2BAEtG,MAAO,CACHjuD,eAAgB,CACZnO,UAAW,GAAGA,iBAAyB67D,KAE3C/yC,MACIlrB,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACH5G,MAAOkB,EACP5B,UAAW,GAAGA,mBAA2B67D,WAAmB,aAChDj6D,EACZnB,SArBW47D,EAqBYR,EArBuC,KACtE,MAAMS,GAAYr1D,EAAAA,EAAAA,IAAW,SAAU5F,GAAWA,EAAQ6F,eACpDq1D,EAAYD,EAAWz8B,SAAS,KAAO,IAAM,IACnD5mB,SAASlT,SAAS6a,KAAO,GAAG07C,IAAYC,cAAsBz4D,GAC1DA,EAAQ4Q,2BAA2B2nD,GAAwB,IAkBnDH,GAEHt6D,IAxBUy6D,KA4B3B,CAOA,MAAMG,EAAwBp5D,GAAiC+hB,IAC3D,MAAM7P,EAAQ6P,EAAMiqB,cAAc95B,MAClClS,EAAUgO,iBAAiBkE,EAAM5Q,OAAS,EAAI23C,OAAO/mC,GAAS+mC,OAAOmJ,WAAWlwC,GAAO,EAGpF,SAAS8C,EACZta,EACAmB,EACAmE,GAEA,MAAM,OAAElD,EAAM,UAAES,GAAc7C,GAG1B4N,eACAzM,EAEEe,EAAY23D,EAAoB75D,EAAM+L,UAE5C,MAAO,CACHsE,eAAgB,CACZnO,UAAW,GAAGA,mBAElB2oB,oBAAqB,CACjBtH,IAAK,QACLrhB,UAAW,GAAGA,wBACd4oB,QAAS,GAAG5oB,mBAEhBqO,QAASzQ,EAAAA,cAAA,OAAKoC,UAAW,GAAGA,iCAA0CW,EAAU87D,8BAChF3zC,MACIlrB,EAAAA,cAAA,SACImmC,KAAK,SACL/jC,UAAW,GAAGA,uCACdipB,SAAUuzC,EAAqBp5D,GAAU,aAC7BzC,EAAU87D,6BAA4B,gBACnCv8D,EAAO64D,kBAAiB,gBACxB74D,EAAO64D,kBAAiB,gBACxB95D,EAAMuS,iBACrB8D,MAAOrW,EAAMuS,iBACbsC,IAAK5T,EAAO64D,kBACZhlD,IAAK7T,EAAO64D,oBAI5B,CAEO,MAAMnqD,EAAqDkiC,IAQ7D,IAR8D,UAC/DjiC,EAAS,gBACT9J,EAAe,cACf4G,EAAa,kBACb2F,EAAiB,WACjBxK,EAAU,UACVnG,EAAS,6BACTsN,GACH6iC,EACO4rB,EAAwC,GAoB5C,OAjBKzuD,IACDyuD,EAAgBl4D,OAAOo+B,OAAO79B,GAAiBZ,QAAOkG,QAAuB3I,IAAZ2I,KAIjEsB,IAAkBsC,GAClByuD,EAAcpvD,KAAK3B,GAGnB2F,GACAorD,EAAcpvD,KAAKgE,GAGnBxK,GACA41D,EAAcpvD,KAAKxG,GAInBlJ,EAAAA,cAAC4D,EAAAA,MAAK,CAACzC,OAAQ8P,GAAa6tD,EAAch4D,OAAS,EAAGjD,MAAM,SAASg1C,WAAS,eAAa91C,EAAUg8D,0BACjG/+D,EAAAA,cAAA,OAAKoC,UAAU,oBAAmB,cAAa,QAC3CpC,EAAAA,cAAA,QAAMoC,UAAU,6BAChBpC,EAAAA,cAAA,YAAO+C,EAAUg8D,2BAEpBD,EAAcxvD,KAAI,CAAC7C,EAAS6W,IAErBtjB,EAAAA,cAAA,OAAK8Q,IAAKwS,EAAOlhB,UAAU,mBACtBqK,KAIT,EAIT,SAASiO,EACZxa,EACAmB,GAEA,MAAM,UAAE0B,GAAc7C,GAEhB,IAAEgW,EAAG,IAAEC,GAAQ9U,EAErB,GAAKqc,EAAqCxd,IAAW0d,EAA+B1d,GAIpF,OACIF,EAAAA,cAACwvB,EAAAA,KAAI,CAACptB,UAAU,yBACX48D,EAAgB9+D,EAAOiW,EAAKpT,EAAU2oB,iBACtCuzC,EAAgB/+D,EAAOgW,EAAKnT,EAAU0oB,iBAGnD,CAEO,MAAM7T,EAAsD,kEACtDqI,EACT,sEACSZ,EAAuE,iDAE9E2/C,EAAkBA,CACpB9+D,EACAiW,EACAuV,KAEA,MAAM,UAAE3oB,EAAS,SAAEkJ,GAAa/L,EAC1BkC,EAAY23D,EAAoB9tD,GACtC,GAAIkK,GAAe,IAARA,GAAaA,IAAQsoC,OAAOygB,UACnC,OACIl/D,EAAAA,cAAA,KAAGoC,UAAW,GAAGA,wBACbpC,EAAAA,cAAA,QAAMoC,UAAU,WAAWW,EAAUo8D,qBACrCn/D,EAAAA,cAAA,KAAGoC,UAAU,iBAAgB,cAAa,SACzCspB,EAAgBsrB,QAAQ,QAAS7gC,EAAIgG,YAIlC,EAGd8iD,EAAkBA,CACpB/+D,EACAgW,EACAuV,KAEA,MAAM,UAAE1oB,EAAS,SAAEkJ,GAAa/L,EAC1BkC,EAAY23D,EAAoB9tD,GACtC,GAAIiK,GAAOA,EAAM,EACb,OACIlW,EAAAA,cAAA,KAAGoC,UAAW,GAAGA,wBACbpC,EAAAA,cAAA,QAAMoC,UAAU,WAAWW,EAAUo8D,qBACrCn/D,EAAAA,cAAA,KAAGoC,UAAU,iBAAgB,cAAa,SACzCqpB,EAAgBurB,QAAQ,QAAS9gC,EAAIiG,YAIlC,EAGduB,EAAwCxd,IAAuE,IAAAgf,EAAAC,EACjH,MAAMC,EAAkBlf,EAAM4B,KAAKwC,aAAavC,OAIhD,KAF6Bqd,SAAwG,QAAzFF,EAAfE,EAAiB5a,MAAKF,GAAgBA,EAAaI,OAASkT,WAA4C,IAAAsH,OAAA,EAAxGA,EACvBva,WAEF,OAAO,EAOX,GAJ+Bya,SAE9B,QAF6CD,EAAfC,EAAiB5a,MAC5CF,GAAgBA,EAAaI,OAAS2a,WACzC,IAAAF,OAAA,EAF8BA,EAE5Bxa,UAEyB,CAAC,IAADgD,EACxB,MAAM4X,EAAuD,QAAhB5X,EAAGzH,EAAMuD,eAAO,IAAAkE,GAAS,QAATA,EAAbA,EAAejE,eAAO,IAAAiE,GAAK,QAALA,EAAtBA,EAAwBI,WAAG,IAAAJ,GAAU,QAAVA,EAA3BA,EAA6B6X,gBAAQ,IAAA7X,OAAA,EAArCA,EAAuC8X,iCACvF,GAAgD,SAA5CF,EACA,OAAO,EAGX,GAAgD,QAA5CA,EACA,OAAO,EAGX,MAAMG,EAAexf,EAAM4B,KAAKoD,oBAAoBnD,OACpD,OACI2d,IAC8C,QAA5CH,GAAqDG,EAAaE,OACnB,QAA5CL,IAAsDG,EAAaE,MAAO,CAEhF,CAAC,IAADw/C,EAAAv/C,EACH,MAAMhI,EAAgD,QAA/BunD,EAAGl/D,EAAM4B,KAAK+V,yBAAiB,IAAAunD,OAAA,EAA5BA,EAA8Br9D,OACxD,QAA+C,QAAxC8d,EAAEhI,aAAiB,EAAjBA,EAAmB+G,2BAAmB,IAAAiB,GAAAA,EAAW,GAI5DjC,EAAkC1d,IAA2D,IAAA6f,EAC/F,MAAMX,EAAkBlf,EAAM4B,KAAKwC,aAAavC,OAE1Cie,EAAoCZ,SAEzC,QAFwDW,EAAfX,EAAiB5a,MACvDF,GAAgBA,EAAaI,OAASub,WACzC,IAAAF,OAAA,EAFyCA,EAEvCpb,UAEH,OAAOqb,SAAAA,CAA0C,iVCv6B9C,SAASi7C,EAAiBC,EAA+Bn4D,GAC5D,OAAKm4D,GAAaA,GAAa,EACpBn4D,EAAUs8D,uBACI,IAAdnE,EACAn4D,EAAUu8D,8BAEdv8D,EAAUw8D,6BAA6BvoB,QAAQ,YAAakkB,EAAU/+C,WACjF,CAEO,SAAShT,EACZpH,EACA6D,EACA7C,EACAU,EACAyC,EACAqC,EACAJ,GAEA,GAA6B,eAAzBpG,EAAOiH,cACP,OAAOjG,EAAUy8D,0BACd,GAA6B,qBAAzBz9D,EAAOiH,cAAsC,CAAC,IAADy2D,EAmBlDC,EAlBF,GAAI39D,EAAOkH,kBAA0D,gBAAtClH,EAAOkH,iBAAiBX,UAA6B,CAEhF,MAAMq3D,EA/CX,SACH/5D,EACAM,EACAiC,GAGA,IAAIw3D,GAA0B,EAE9B,MAAMC,EAAkB15D,aAAO,EAAPA,EAAS4Q,SAEjC,IAAK,IAAIwM,EAAQ,EAAGA,EAAQ1d,EAAMA,KAAK+tB,UAAW7sB,OAAQwc,IACtD,GACI1d,EAAMA,KAAK+tB,UAAWrQ,GAAOiS,YAAcqqC,IAC1Ch6D,EAAMA,KAAK+tB,UAAWrQ,GAAOu8C,oBAAsB,QAAS13D,aAAQ,EAARA,EAAU0oD,gBAAiB,IAC1F,CACE8O,EAAiBr8C,EAEjB,KAAM,CAId,OAAOq8C,CACX,CAyB2CG,CAAgBl6D,EAAMM,EAASiC,GAE9D,IAAI43D,EAA0B,EAC9B,IAAwB,IAApBJ,EAAuB,CAAC,IAADK,EACvB,MAAMC,uWAAgBh+D,CAAA,GAAQ2D,EAAMA,KAAK+tB,UAAWgsC,IACpDI,EAA2C,QAA5BC,EAAGC,EAAiBjC,gBAAQ,IAAAgC,EAAAA,EAAI,CAAE,CAIrD,MAAME,EArFX,SAA0Bz8D,EAAuC8E,GAGpE,MAAMkW,EAAiDhb,EAAQsE,IAAIzF,OAAOmc,2BACpE0hD,EAAe53D,aAAmB,EAAnBA,EAAqBopD,kBAG1C,IAAIuO,EAYJ,OATIA,OAD+Bp8D,IAA/B2a,QAA6D3a,IAAjBq8D,EAJnB,QAMDr8D,IAAjBq8D,EACS1hD,QAAAA,EAPS,QAQa3a,IAA/B2a,EACS0hD,EAEAniD,KAAK9H,IAAIuI,EAA4B0hD,GAGlDD,CACX,CAiEkCE,CAAiB38D,EAAS8E,GAChD,OAAOxF,EAAUs9D,qBACZrpB,QAAQ,gBAAiB+oB,EAAgB5jD,YACzC66B,QAAQ,gBAAiBkpB,EAAc/jD,WAAY,CACrD,OACHpa,EAAOkH,kBACgC,mBAAtClH,EAAOkH,iBAAiBX,WAAwE,kBAAtCvG,EAAOkH,iBAAiBX,UAK5D,QAAvBm3D,EAAA19D,EAAOkH,wBAAgB,IAAAw2D,GAAvBA,EAAyBa,mBAAqB5+D,EAAAA,gBAAgBC,YAAYI,EAAOkH,iBAAiBq3D,mBAC3Fv+D,EAAOkH,iBAAiBq3D,kBAC1BhxD,KAAI7K,IAAO,IAAA87D,EACR,OAAO/xC,EAAAA,iBAAiBqX,cAAcphC,EAAKyqC,kBACpB,QADqCqxB,EACtD97D,EAAK+7D,oBAAY,IAAAD,EAAAA,EAAI97D,EAAKg8D,gBAC1Bh8D,EAAKyqC,gBAAgB,IAE9B/yB,WAGFpZ,EAAUy8D,0BAb8B,QAA3CE,EAAO39D,EAAOkH,iBAAiBgmC,oBAAY,IAAAywB,OAAA,EAApCA,EAAsCxwB,gBAaN,CAInD,CAEO,SAAS9nC,EACZrF,EACAgB,EACA4S,GAEA,IAAK5T,EACD,MAAO,CAAC,EAGZ,MAAMiD,EAA4D,CAAC,EAEnE,IAAK,MAAMwB,KAAazE,EACpBiD,EAAWwB,EAAUyV,oBAAsBykD,EAAwBl6D,EAAUyV,mBAAoBlZ,EAAW4S,GAGhH,OAAO3Q,CACX,CAEO,SAAS07D,EAAwBC,EAA4B59D,EAAmC4S,GACnG,OAAQgrD,GACJ,KAAK,EACD,OAAO59D,EAAU69D,sCACrB,KAAK,EACD,OAAO79D,EAAU89D,8CACrB,KAAK,EACD,OAAO99D,EAAU+9D,qCACrB,KAAK,EACD,OAAOnrD,EAAa5S,EAAUg+D,uCAAyCh+D,EAAUi+D,sCACrF,QACI,MAAO,GAEnB,+BCvJO,IAAKC,mBAAZ,SAAYA,GACRA,EAAAA,EAAA,uBACAA,EAAAA,EAAA,kBACH,CAHD,CAAYA,IAAAA,EAAa,0MCwDlB,MAAMt8B,EAAeA,CAACzZ,EAAsC3gB,KAAgE,IAAApG,EAC/H,MAAM4rC,EAAyB9K,IAAI/Z,EAAO,kDACpCiI,EAAwB8R,IAAI/Z,EAAO,kDAEnC,4BAAEtd,EAA2B,aAAEtJ,GAAiB4mB,EAAMppB,KACtD+pC,EAAoCvnC,SAAoB,QAARH,EAAZG,EAAcvC,cAAM,IAAAoC,GAAiE,QAAjEA,EAApBA,EAAsBK,MAAKkQ,GAF/B,oEAE0CA,EAAQhQ,cAAuC,IAAAP,OAAA,EAArFA,EACpCQ,UAEAu8D,EAAwBttC,IAC1B,MAAMutC,EAAmBl8B,IAAI/Z,EAAO,gCACpC,IAAK0I,EAASisC,qBAAuBsB,EACjC,MAAO,GAGX,MAAMC,GAAiBD,GAAoB,IAAI38D,MAAM2D,GAC1CA,EAAS0oD,gBAAkBj9B,EAASisC,qBAG/C,OAAOuB,GAAiBA,EAAcC,WAAW,EAU/Cx3B,EAAyBjW,IAA+C,IAAA0tC,EAC1E,MAAMp7D,EAAU0tB,EAAS2B,YARR9U,EAQiCmT,EAAS2B,WAP1C0P,IAAI/Z,EAAO,yBAA2B,IACvC1mB,MAAMolC,GACXnpB,IAAcmpB,EAAS9yB,YAHjB2J,MASjB,MAAM,GACFzZ,EAAE,SACFiF,EAAQ,QACRxI,EACAnB,QAAQ,cAAE0N,EAAa,gCAAE85B,GACzB/mC,WAAW,sBACPynC,EAAqB,0BACrB30B,EAAyB,yBACzBE,EAAwB,0BACxBE,EAAyB,2BACzBD,EAA0B,aAC1B00B,EAAY,uBACZpf,EAAsB,mBACtBqf,EAAkB,gBAClB42B,GAEJ99D,SACIC,SAAS,aAAEqI,KAEfmf,EACErQ,EAA8B,QAAtBymD,EAAGp2C,EAAMppB,KAAK+Y,gBAAQ,IAAAymD,OAAA,EAAnBA,EAAqBv/D,OACtC,IAAKmE,EACD,OAGJ,IAAIgoB,GAAa6b,EAAAA,EAAAA,mBAAkB7jC,EAASzC,EAAQ6F,mBAAexF,GACnE,GAAIkmC,EAAAA,GAAS/uB,YAAa8c,EAAAA,EAAAA,IAAiBt0B,EAAQ6F,cAAcgT,gBAAiB,CAAC,IAAD2tB,EAC9E,MAAM7b,EAAU,IAAIC,IAAIH,EAAYzkB,OAAOtB,SAAS6a,MACpDoL,EAAQQ,aAAaC,IAAI,YAAa,GAAqB,QAArBob,EAAGrW,EAASsW,iBAAS,IAAAD,EAAAA,EAAI,KAC/D/b,EAAaE,EAAQpL,IAAK,CAE9B,MAAM8lB,EAAe7D,IAAI/Z,EAAO,oCAChC,OACIlrB,EAAAA,cAACmqC,EAAAA,sBAAqB,CAClBnjC,GAAIA,EACJiF,SAAUA,EACVxI,QAASA,EACTV,UAAW,CACPqnC,WAAYr0B,EACZs0B,YAAax0B,EACby0B,YAAar0B,EACbs0B,aAAcv0B,EACdw0B,wBACAE,eACApf,yBACAqf,qBACAj/B,kBAAmB,GACnBC,iBAAkB,GAClBi/B,oBAAqB22B,EACrB12B,0BAA2B,0BAE/BC,oBAAoB,EACpB96B,cAAeA,EACfjE,aAAcA,EACdmiB,WAAYA,EACZ6c,gBAAiB7kC,EAAQ8nB,gBACzBlsB,KAAM,CACF8xB,WACA1tB,UACA2U,YAEJivB,gCAAiCA,EACjCv/B,iBAAkBA,EAClBqD,4BAA6BA,aAA2B,EAA3BA,EAA6B7L,OAC1DipC,cAAelC,GACjB,EAIJ04B,EAA+BC,IACjC,MACI1+D,WAAW,8BAAE2+D,IACbx2C,EAEJ,MAAO,CACHi1B,cAAe,CAAE/9C,UAAW,iCAC5BorB,MAAOxtB,EAAAA,cAAA,QAAMoC,UAAU,4BAA4Bs/D,GACnDv5D,SAAUnI,EAAAA,cAAA,OAAKoC,UAAU,+BAA+Bq/D,GAC3D,EAGCE,EAA8BA,KAChC,MACI5+D,WAAW,kBAAE6+D,IACb12C,EAEJ,MAAO,CACHm1B,cAAe,CAAEj+C,UAAW,+BAC5BorB,MAAOxtB,EAAAA,cAAA,QAAMoC,UAAU,4BAA4Bw/D,GACtD,EAGCC,EAA2Bl+C,GACtBA,EAAMrU,KAAIskB,IACb,MAAM6tC,EAAyBP,EAAqBttC,GAC9CkuC,EAAWC,EAAyBnuC,GACpC8B,KACF9B,EAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,eAAsB+qB,EAAS/qB,eAAiBsqB,EACtF,MAAO,CACHY,OAAQH,EAASG,QAAU,GAC3BwsB,SAAU,CAAEn+C,UAAW,0BACvBqC,KAAMolC,EAAsBjW,GAC5B4sB,cAAeshB,EAAWN,EAA4BC,QAA0B39D,EAChF28C,cAAe/qB,EAAkBisC,SAAgC79D,EACpE,IAIHi+D,EAA4BC,IAAmC,IAAAC,EACjE,OAAQzzC,EAAAA,iBAAiBC,mBAAmBuzC,EAAan5D,gBACnDgjC,EACIm2B,EAAan5D,gBACb+E,SAAmC,QAARq0D,EAA3Br0D,EAA6B7L,cAAM,IAAAkgE,GAAyB,QAAzBA,EAAnCA,EAAqCtyD,+BAAuB,IAAAsyD,OAAA,EAA5DA,EAA8Dz9D,MAC1DkD,GAAgBA,IAAiBs6D,EAAan5D,gBAElDm5D,EAAan5D,eAAiBknC,EAC7B,EAsCTmyB,EAAev+C,GACVA,EAAM87B,QAAO,CAACv3C,EAAOzD,IACjByD,GAASzD,EAAKu5D,UAAY,IAClC,GAGDmE,EAA8Bh8B,IAChC,MAAMvgC,EAAOq/B,IAAI/Z,EAAO,0CACxB,MAAa,SAATib,EACOvgC,EAAK+tB,UAAUptB,QAAQqtB,IAC1BA,SAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,cA7CZm5D,EA8CSpuC,GA7C/BpF,EAAAA,iBAAiBC,mBAAmBuzC,EAAan5D,gBACnDgjC,EACIm2B,EAAan5D,gBACb+E,SAAmC,QAARw0D,EAA3Bx0D,EAA6B7L,cAAM,IAAAqgE,GAAyB,QAAzBA,EAAnCA,EAAqCzyD,+BAAuB,IAAAyyD,OAAA,EAA5DA,EAA8D59D,MAC1DkD,GAAgBA,IAAiBs6D,EAAan5D,gBAElDm5D,EAAan5D,eAAiBknC,IAuCYnc,EAAS/qB,eAAiBsqB,GAChES,EA/CgBouC,MAAmCI,CA+C3C,IAEF,WAATj8B,EACAvgC,EAAK+tB,UAAUptB,QAAQqtB,GAC1BA,EAAS/qB,cAA0C,KAA1B+qB,EAAS/qB,aAAsBk5D,EAAyBnuC,GAAY,OAG9FhuB,EAAK+tB,UAAUptB,QAAQqtB,GAAuBA,EAAS/qB,eAAiBsqB,GAAsB,EAGnGkvC,EAA+Bl8B,IACjC,KAAgC,KAA3B4J,QAA4DjsC,IAA3BisC,GAAmD,WAAT5J,GAA8B,UAATA,GACjG,OAGJ,MAAMxiB,EAAQw+C,EAA2Bh8B,GAEzC,GAAqB,IAAjBxiB,EAAM7c,OACN,OAGJ,MACMhE,EA1DsBw/D,EAACp6D,EAAei+B,KAA8B,IAAAo8B,EAC1E,MACIx/D,WAAW,UAAEy/D,EAAS,WAAEC,EAAU,mBAAEC,EAAkB,8BAAEC,IACxDz3C,EAEJ,IAAI03C,EAAgC,GAEH,QAAjCL,EAAAr3C,EAAMppB,KAAKyF,gBAAgBxF,cAAM,IAAAwgE,GAAjCA,EAAmC/9D,MAAK2N,IAAyB,IAAA0wD,EAC7DD,EAAwBA,IAEoB,QADjBC,EACrB1wD,EAAuBlD,uBAAe,IAAA4zD,GAAuE,QAAvEA,EAAtCA,EAAwCr+D,MAAK6K,GAAkBA,EAAeI,OAAS0jB,WAAsB,IAAA0vC,OAAA,EAA7GA,EACMhyD,YAAY,IAG5B,MAAMiyD,EAAS56D,EAAQ,EAAIu6D,EAAaD,EAOxC,OALa,SAATr8B,EACMw8B,EACS,WAATx8B,EACAu8B,EACA,GAAGE,MAA0B16D,KAAS46D,MACnC9rB,QAAQ,UAAW9uC,EAAMiU,YAAY66B,QAAQ,WAAY8rB,EAAO,EAqC/DR,CADAJ,EAAYv+C,GACmBwiB,GAE7C,MAAO,CACHya,sBAAuB,CAAEx+C,UAAWC,IAAW,yCAA0C8jC,IACzF0a,aAAc,CAAEz+C,UAAW,gCAC3BqO,QAASzQ,EAAAA,cAAA,OAAKoC,UAAU,uCAAuCU,GAC/D4hC,UAAWm9B,EAAwBl+C,GACtC,EAmDCo/C,EAA+Bx7C,IACjC,MACIjlB,QAAQ,iBAAE0gE,IACV93C,EACA83C,IACAA,EAAiBh/D,KAAOujB,EAAM2J,OAAOxZ,MAAM,EAmE7CurD,EAAoDA,KACtD,GAA+B,KAA3BlzB,QAA4DjsC,IAA3BisC,EACjC,OAGJ,MACIhtC,WAAW,oBAAEmgE,EAAmB,cAAEC,IAClCj4C,EAEEvH,EAnC+By/C,MACrC,MAAMx9D,EAAOq/B,IAAI/Z,EAAO,0CAClBm4C,EAAyB1/C,GAAsB4vB,IAAQ5vB,GAAOlf,GAAQA,EAAKo7D,qBAE3EyD,GADsB3/C,EACa/d,EAAK+tB,UADI4f,IAAQ5vB,GAAOlf,GAAQA,EAAKoE,gBAAlD8a,MAE5B,MAAM4/C,EAA6B,GAC7BC,EAA6B,GAiBnC,OAdA58D,OAAO68D,QAAQH,GAAe9sC,SAAQ5a,IAAwC,IAAtClU,EAAcg8D,GAAoB9nD,EAEtE0nD,EAAc57D,GAAgB27D,EAAsBK,GACpDH,EAAe7zD,KAAK2zD,EAAsBK,GAAqB,IAGnE98D,OAAOC,KAAK08D,GAAgB/sC,SAAQ1lB,IAChC,MAAM81B,EAAY28B,EAAezyD,GACjClK,OAAOC,KAAK+/B,GAAWpQ,SAAQlT,IAC3B,MAAMsQ,EAAWgT,EAAUtjB,GAC3BkgD,EAAa9zD,KAAKkkB,EAAS,GAC7B,IAGC4vC,CAAY,EAYLJ,GAEd,GAAqB,IAAjBz/C,EAAM7c,OACN,OAGJ,MAAM68D,EAAkD,GA0BxD,OAzBAhgD,EAAMrU,KAAI7K,IACN,MAAMyD,EAAQg6D,EAAYz9D,GACpBmvB,EAAWnvB,EAAK,GAChBg9D,EAAyBP,EAAqBttC,GAC9CuS,EACFvS,EAASisC,oBAAsBjsC,EAAS/qB,aAClC,SACgC,KAAhC+qB,EAASisC,oBACTjsC,EAAS/qB,eAAiBsqB,GACzB3E,EAAAA,iBAAiBqX,cAAc1S,GAEhC,OADA,QAEJrwB,EA3FoC8gE,EAC9C17D,EACAi+B,EACAz+B,EACAm8D,KACQ,IAAAC,EAAAC,EACR,MACIhhE,WAAW,UAAEy/D,EAAS,WAAEC,IACxBv3C,EAEJ,IAAI03C,EAAgC,GAChCoB,EAAiC,GAEJ,QAAjCF,EAAA54C,EAAMppB,KAAKyF,gBAAgBxF,cAAM,IAAA+hE,GAAjCA,EAAmCt/D,MAAK2N,IAAyB,IAAA8xD,EAC7DrB,EAAwBA,IAEoB,QADjBqB,EACrB9xD,EAAuBlD,uBAAe,IAAAg1D,GAAuE,QAAvEA,EAAtCA,EAAwCz/D,MAAK6K,GAAkBA,EAAeI,OAAS0jB,WAAsB,IAAA8wC,OAAA,EAA7GA,EACMpzD,YAAY,IAGK,QAAjCkzD,EAAA74C,EAAMppB,KAAKyF,gBAAgBxF,cAAM,IAAAgiE,GAAjCA,EAAmCv/D,MAAK2N,IAAyB,IAAA+xD,EAC7DF,EAAyBA,IAEmB,QADhBE,EACtB/xD,EAAuBlD,uBAAe,IAAAi1D,GAA8D,QAA9DA,EAAtCA,EAAwC1/D,MAAK6K,GAAkBA,EAAeI,OAAS/H,WAAa,IAAAw8D,OAAA,EAApGA,EAAsGrzD,YAAY,IAG5H,MACMiyD,EAAS56D,EAAQ,EAAIu6D,EAAaD,EAOxC,OALa,SAATr8B,EACM,IAAIj+B,KAAS46D,KACJ,WAAT38B,EACA,GANqB69B,MAA2BH,MAM7B37D,KAAS46D,KAC5B,GAAGF,MAA0B16D,KAAS46D,MACnC9rB,QAAQ,UAAW9uC,EAAMiU,YAAY66B,QAAQ,WAAY8rB,EAAO,EAyD3Dc,CAA0C17D,EAAOi+B,EAAMvS,EAAS/qB,aAAc44D,GACtF0C,EAAsB,WAATh+B,EAAoB+8B,EAA+B,SAAT/8B,EAAkBg9B,EAAgB,QACzFiB,EAAY,uDAAuDj+B,QACzEw9B,EAAsBj0D,KAAK,CACvBkxC,sBAAuB,CAAEx+C,UAAWC,IAAW,yDAA0D8jC,IACzG0a,aAAc,CAAEz+C,UAAW,gCAC3B8+C,mBAAoBlhD,EAAAA,cAAA,OAAKoC,UAAWgiE,IACpCnjB,eAAgBjhD,EAAAA,cAAA,OAAKoC,UAAU,+DAA+D+hE,GAC9F1zD,QAASzQ,EAAAA,cAAA,OAAKoC,UAAU,kEAAkEU,GAC1F4hC,UAAWm9B,EAAwBp9D,IACrC,IAGCk/D,CAAqB,EAGhC,MApKsBU,MAClB,MAAM,QACF5gE,EACAnB,QAAQ,iBAAE0gE,GACVlhE,MAAM,SAAEkwB,GACRjvB,WAAW,aAAEuhE,IACbp5C,EAEE1I,GAAUC,EAAAA,EAAAA,kBAAiB,QAASlY,EAAmBmY,EAAAA,kBAAkB6hD,UACzEjG,GAAYz7C,EAAAA,EAAAA,wBAAuBtY,EAAmBiY,GACtD5c,EAAOq/B,IAAI/Z,EAAO,0CAClBs5C,EAAa34B,EAAoC,2BAA6B,GACpF,GAAKjmC,GAASA,EAAK+tB,WAAuC,IAA1B/tB,EAAK+tB,UAAU7sB,QAAiBkrB,EAIhE,MAAO,CACHyvB,UAAW,CAAEr/C,UAAW,0BAA0BoiE,KAClD9iB,OAAQ,CAAEt/C,UAAW,kCACrBqO,QAASuyD,GAAoBA,EAAiBh/D,MAC1ChE,EAAAA,cAAC62B,EAAAA,GAAajwB,OAAA8C,OAAA,CACVtH,UAAU,mCACN4gE,EAAgB,CACpBv/C,IAAKu/C,EAAiBv/C,KAAO,KAC7Bzf,KAAMg/D,EAAiBh/D,KACvBqhC,UAAW,CAAEC,OAAQy9B,EAA6BzmD,eAAgB7Y,EAAQC,YAGlFi+C,SACI3hD,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAU,yCACVU,MAAOwhE,EACPzgE,MAAM,OACNmf,KAAM6T,EAAAA,GAAoB,OAAQpzB,EAAQ6F,gBAAkB,IACxDg1D,GAEHgG,GAGT1iB,eAAgBygB,EAA4B,UAC5CxgB,aAAcwgB,EAA4B,QAC1CvgB,cAAeugB,EAA4B,SAC3CtgB,iCAAkClW,EAC5Bo3B,SACAn/D,EACT,EAuHEugE,EAAe,qGCxbnB,MAAM9/B,EAAmBrZ,IAAuD,IAAA/mB,EACnF,MACI7B,QAAQ,oBAAEmiE,GACV3iE,MAAM,SAAE0vB,GACRzuB,WAAW,cACP2hE,EAAa,cACbC,EAAa,SACbC,EAAQ,gBACRrL,EAAe,aACfM,EAAY,cACZC,EAAa,oBACb+K,EAAmB,SACnBlM,EAAQ,mBACRD,EAAkB,aAClBoM,EAAY,qBACZC,GACH,QACDthE,EAAO,SACPwI,EAAQ,GACRjF,EAAE,UACF2D,GACAugB,EAEEgN,EAAgB+M,IAAIzT,EAAU,UAC9B5rB,EAAOq/B,IAAIzT,EAAU,4BACrBwzC,EAAgBp/D,EAAK+tB,WAAa/tB,EAAK+tB,UAAU7sB,OAAS,EAC1Dm+D,EAAuBxhE,EAAQC,QAAQ+J,SAEvC,4BAAEG,EAA2B,aAAEtJ,GAAiB4mB,EAAMppB,KACtD+pC,EAAoCvnC,SAAoB,QAARH,EAAZG,EAAcvC,cAAM,IAAAoC,GAAiE,QAAjEA,EAApBA,EAAsBK,MAAKkQ,GAF/B,oEAE0CA,EAAQhQ,cAAuC,IAAAP,OAAA,EAArFA,EACpCQ,UAEAugE,GAAmG,IAA1EzhE,EAAQC,QAAQqE,IAAIzF,OAAO6iE,2CAW1D,MAAO,CACHC,kBAAmB,CAAEhjE,UAAW,4CAChCqO,QAASg0D,GAAuBA,EAAoBzgE,MAChDhE,EAAAA,cAAC62B,EAAAA,GAAajwB,OAAA8C,OAAA,CACVtH,UAAU,8BACNqiE,EAAmB,CACvBhhD,IAAKghD,EAAoBhhD,KAAO,KAChCzf,KAAMygE,EAAoBzgE,KAC1BqhC,UAAW,CAAEC,OAjBgB/d,IACrC,MACIjlB,QAAQ,oBAAEmiE,IACVv5C,EACAu5C,IACAA,EAAoBzgE,KAAOujB,EAAM2J,OAAOxZ,MAAM,EAYY4E,eAAgB7Y,EAAQC,YAGtFw+C,MAAO8iB,GACDK,EAAAA,EAAAA,GAAa,CACTntC,gBACAtyB,OACA8+D,gBACAC,gBACAC,WACArL,kBACAM,eACAC,gBACA+K,sBACAlM,WACAD,qBACAj1D,UACAwI,WACAjF,KACAi+D,uBACAt6D,YACA26D,iBAAkBR,EAClBj5B,oCACAj+B,4BAA6BA,aAA2B,EAA3BA,EAA6B7L,OAE1DwjE,qBAAsB3/D,EAAK4/D,qBAC3BC,iBAAkBP,EAClBH,8BAEJjhE,EACT,gtBC5DL,IAAIyG,EA6EG,SAASuO,EACZ5Y,EACAmB,EACAmE,EACAwc,EACAmG,GAAuC,IAAA/a,EAAAs4D,EAAAC,EAEvC,MAAM,UAAE5iE,EAAS,SAAEkJ,GAAa/L,GAG5B4N,YAAY,gBAAE3G,IACd9F,GAEE,gBAAE2R,GAAoBxN,EAEtB/B,EAAUvD,EAAMuD,QAIhByC,EAA4B,QAAlBkH,EAAAlN,EAAM4B,KAAKoE,eAAO,IAAAkH,GAAlBA,EAAoBrL,OAAS7B,EAAM4B,KAAKoE,QAAQnE,OAASigB,aAAc,EAAdA,EAAgB9b,QAInF0/D,EAA4D,QAAvCF,EAA+B,QAA/BC,EAAGzlE,EAAM4B,KAAKF,yBAAiB,IAAA+jE,OAAA,EAA5BA,EAA8B5jE,cAAM,IAAA2jE,EAAAA,EAAI1jD,aAAc,EAAdA,EAAgBpgB,kBAGhFoN,EAAmB9O,EAAMuD,QAAQsE,IAAIzF,OAAO0M,iBAE5C2F,EAAuBjT,EAAAA,gBAAgBC,YAAYikE,GAEzD,IAAK1/D,IAAYyO,EACb,OAGJ,MAAMvS,EAAY23D,EAAoB9tD,GAEhC45D,EAAYpgE,SACdqgE,EAAWj6D,EAAcrG,EAAUgN,wBAEjCuzD,EAAyBtgE,SAC3BugE,EAAwBn6D,EAAcrG,EAAU6M,qBAEpD9H,GAAmBC,EAAAA,EAAAA,oBAAmB/G,EAAQC,QAAQ+G,kBAAoBvK,EAAM+L,SAAU/L,EAAMyK,WAEhG,MAAM2M,EAAiB7T,EAAQsE,IAAIzF,OAAOgV,eAE1C,IAAI2uD,EAA0C,GAI9CA,EAF0BL,EAESt2D,KAAI8W,IAAuB,IAAAxK,EAAAsqD,EAuB1D,MAAO,CACHC,aAvBiBnzD,EAAgBoT,EAAqBnK,mBAAoBlZ,GAwB1EqjE,WAvBehgD,EAAqBnK,mBAAmBE,WAwBvDkqD,cArBoC,QADxBzqD,EAAqD,QAArDsqD,EAAI9/C,EAAqB7O,oCAA4B,IAAA2uD,EAAAA,EACjE9/C,EAAqBpK,uBAAe,IAAAJ,EAAAA,EACpC,IAC0CrV,QAC1CmR,IAAK,IAAAwE,EAAAoqD,EAAA,OAAKt+C,EAAAA,iBAAiBC,kBAAgD,QAA/B/L,EAAqB,QAArBoqD,EAAC5uD,EAAMjR,sBAAc,IAAA6/D,OAAA,EAApBA,EAAsBxvD,gBAAQ,IAAAoF,EAAAA,EAAIxE,EAAMZ,SAAS,IAG5BxH,KAAwBiI,IAA+B,IAAAgvD,EAAAC,EACzH,MAAMj4C,EAA4D,QAA9Cg4C,EAAGhvD,EAA6B9Q,sBAAc,IAAA8/D,EAAAA,EAAIhvD,EAChEkvD,GAAqBxuD,EAAAA,EAAAA,yCAAwCV,EAA8BD,GACjG,MAAO,CACHI,MAA2B,QAAtB8uD,EAAEj4C,EAAe7nB,aAAK,IAAA8/D,EAAAA,EAAI,GAC/Bx/D,GAAIunB,EAAezX,SAASqF,WAC5BuqD,aAAcn4C,EAAeo4C,aAC7BC,SAAUr4C,EAAes4C,SACzBxwC,WAAYrnB,GAAoBy3D,IAAuBvuD,EAAAA,qBAAqBC,WAC5E2uD,oBAAqB/jE,EAAU+jE,oBAAsB/jE,EAAU+jE,oBAAsB,GACxF,IAMJ,IAGL,MAAMC,EAAoB5+C,QAAAA,GAAsB9R,EAAAA,EAAAA,6BAA4B5S,EAAQC,QAAQ4S,IAAIC,YAChG,IAAK,MAAMywD,KAAiBf,EAAgB,CACxC,MAAMgB,EAA6BF,EAAkBxgE,QACjD2gE,GAAsBA,EAAmBjrD,mBAAmBE,aAAe6qD,EAAcZ,aAE7F,IAAK1kE,EAAAA,gBAAgBC,YAAYslE,GAC7B,SAEJ,MAAME,EAA4BF,EAA2B,GACvDG,EAAwBJ,EAAcX,aAAa9/D,QACrD8gE,IAAa,IAAAC,EAAA,OACTD,EAAc3vD,MAAMsiD,uBAAgE,QAA7CsN,EAAKH,EAA0B1gE,sBAAc,IAAA6gE,GAAO,QAAPA,EAAxCA,EAA0C5gE,aAAK,IAAA4gE,OAAA,EAA/CA,EAAiDtN,oBAAmB,IAEnHt4D,EAAAA,gBAAgBC,YAAYylE,KAGjCA,EAAsB,GAAGG,WAAY,EAAK,CAG9C,MAAM33C,EAAwDq2C,EAAe32D,KAAI03D,GAtJjC9mE,KAChD,MAAMsnE,EAAc/oB,OAAOC,SAASx+C,EAAMkmE,WAAY,IAChDqB,GAAqBl7C,EAAAA,EAAAA,QAAOrsB,EAAM6C,UAAU2kE,4BAA6BxnE,EAAMimE,cAE/EtlE,EAAeX,EAAMiH,gBAAgBjH,EAAMkmE,YAEjD,IAAIuB,EAAyB1G,EAAAA,EAAcjxC,SAE3C,MAAM/c,GAAgB0b,EAAAA,EAAAA,6CAA4C64C,GAE5DI,EAAkC1nE,EAAMuD,QAAQsE,IAAIzF,OAAOulE,uBASjE,OAPInmE,EAAAA,gBAAgBC,YAAYimE,KAC3BA,EAAgC3lC,SAAS6lC,EAAAA,eAAeC,OACzDH,EAAgC3lC,SAAShvB,KAEzC00D,EAAyB1G,EAAAA,EAAc+G,QAGpC,CACHz3D,eAAgB,CACZnO,UAAW,GAAGlC,EAAMkC,uBAExB2oB,oBAAqB,CACjBtH,IAAK,QACLrhB,UAAW,GAAGlC,EAAMkC,qCACpB4oB,QAAS,GAAG9qB,EAAMkC,qCAAqClC,EAAMkmE,cAEjEr1D,OAAQlQ,GACJb,EAAAA,cAAA,QAAMoC,UAAU,gDAAgD2kB,KAAK,QAAO,YAAW,aACnF/mB,EAAAA,cAAA,QAAMoC,UAAU,2BAA0B,cAAa,SACvDpC,EAAAA,cAAA,YAAOa,IAGf4P,QAASzQ,EAAAA,cAAA,WAAME,EAAMimE,cACrBl2C,OACIjwB,EAAAA,cAACioE,EAAAA,EAAQ,CACL7B,WAAYlmE,EAAMkmE,WAClBD,aAAcjmE,EAAMimE,aACpBsB,mBAAoBA,EACpBpB,aAAcnmE,EAAMmmE,aACpBh7C,SAAUnrB,EAAMgoE,iBAChBC,aAAcjoE,EAAMkoE,mBACpB79D,iBAAkBA,EAClB89D,cAAeV,EACfjsD,YAAaxb,EAAMuD,QAAQC,QAAQgY,cAG9C,EAuGU4sD,CAA0CrmE,EAAAA,EAAC,CAAC,EAC5C+kE,GAAa,IAChBjkE,YACAoE,kBACA6L,kBACAk1D,iBAAkBrC,EAClBuC,mBAAoBrC,EACpB3jE,YACAqB,eAIR,MAAO,CACH8M,eAAgB,CACZnO,UAAW,GAAGA,gBAElBwtB,YAER,CAEA,MAAMk2C,EAAargE,MACfoG,EACA08D,WAEMA,GAAkB18D,EAAau6D,WAAYv6D,EAAa28D,SAAS,EAGrExC,EAA0BA,CAC5Bn6D,EACAwG,KAEIA,GACAA,EAAoBxG,EAAayG,qBAAsB,EAIzDynD,EAAuB9tD,GACe,cAAjCA,EAAS+tD,oBAAsC,eAAiB,ysBClOpE,MAAMiO,UAAiBjoE,EAAAA,cAK1BC,YAAmBC,EAAuBmB,GACtClB,MAAMD,GALO,KAAAuoE,WAAiDzoE,EAAAA,YA0FjD,KAAA0oE,cAAgBjjE,UAC7BhF,KAAKK,SAAS,CAAE6nE,cAAelkE,EAAK0qB,SAEhC1uB,KAAKP,MAAMmrB,gBACL5qB,KAAKP,MAAMmrB,SAAS,CACtB+6C,WAAY3lE,KAAKP,MAAMkmE,WACvBoC,SAAU/jE,EAAK0qB,OACfsY,cAAehjC,EAAKiT,OACrB,EAIM,KAAAouD,WAAargE,UAC1BhF,KAAKK,SAAS,CAAE6nE,cAAephD,EAAM2J,OAAOxZ,QAExCjX,KAAKP,MAAMmrB,gBACL5qB,KAAKP,MAAMmrB,SAAS,CACtB+6C,WAAY3lE,KAAKP,MAAMkmE,WACvBoC,SAAUjhD,EAAM2J,OAAOxZ,MACvB+vB,cAAelgB,EAAM2J,OAAO03C,WAC7B,EAvGHnoE,KAAKP,MAAMioE,cACX1nE,KAAKP,MAAMioE,aAAa,CACpB71D,qBAAsB7R,KAAKP,MAAMkmE,aAIzC,MAAMv5B,EAAepsC,KAAKP,MAAMmmE,aAAa7hE,MAAKC,GAAQA,EAAK8iE,YAC3D16B,GACApsC,KAAKY,MAAQ,CACTsnE,cAAe97B,EAAa7lC,GAAGmV,YAE/B1b,KAAKP,MAAMmrB,UAEX5qB,KAAKP,MAAMmrB,SAAS,CAChB+6C,WAAY3lE,KAAKP,MAAMkmE,WACvBoC,SAAU37B,EAAa7lC,GACvBygC,cAAeoF,EAAan1B,SAIpCjX,KAAKY,MAAQ,CACTsnE,cAAe,IAGvBloE,KAAK+hB,SAAUC,EAAAA,EAAAA,kBAAiB,QAASviB,EAAMqK,iBAAmB9J,KAAKP,MAAMimE,aACjF,CAEO5kE,SACH,OAAId,KAAKP,MAAMwb,aAAejb,KAAKP,MAAMmoE,gBAAkBpH,EAAAA,EAAc+G,OAC9DvnE,KAAKooE,gBAGTpoE,KAAKqoE,iBAChB,CAEQA,kBACJ,MAAM,WAAE1C,EAAU,aAAEC,EAAY,aAAEF,EAAY,mBAAEsB,GAAuBhnE,KAAKP,MACtEo+D,GAAYz7C,EAAAA,EAAAA,wBAAuBpiB,KAAKP,MAAMqK,iBAAmB9J,KAAK+hB,SAC5E,OACIxiB,EAAAA,cAAA,SAAA4G,OAAA8C,OAAA,CACI1C,GAAI,uBAAuBo/D,IAC3BljE,IAAKzC,KAAKgoE,WAAU,aACRtC,EACZ/jE,UAAU,uBACVipB,SAAU5qB,KAAKqlE,YACXxH,GAEJt+D,EAAAA,cAAA,UAAQ0X,MAAM,GAAE,gBAA6C,KAA7BjX,KAAKY,MAAMsnE,cAAsBI,SAAuC,KAA7BtoE,KAAKY,MAAMsnE,cAAsBK,QAAM,EAAC73D,UAAQ,GACtHs2D,GAEJpB,EAAa/2D,KACT7K,GACGA,GACIzE,EAAAA,cAAA,UACI0X,MAAOjT,EAAKuC,GACZ8J,IAAKrM,EAAKuC,GACV+hE,SAAUtoE,KAAKY,MAAMsnE,gBAAkBlkE,EAAKuC,GAAGmV,WAAU,gBAC1C1b,KAAKY,MAAMsnE,gBAAkBlkE,EAAKuC,GAAGmV,WACpD/Z,UAAWqC,EAAK4xB,WAAa,sCAAmCvyB,GAE/DW,EAAKiT,SAMlC,CAEQmxD,gBACJ,MAAMI,EAAcxoE,KAAKP,MAAMmmE,aAAa/2D,KAAiB7K,GACzDxC,EAAAA,EAAA,GACOwC,GAAI,IACP0qB,OAAQ1qB,EAAKuC,GACbiM,cAAexS,KAAKP,MAAMimE,iBAGlC,OAAOnmE,EAAAA,cAACkpE,EAAAA,gBAAe,CAAC/yB,KAAM8yB,EAAavtD,YAAajb,KAAKP,MAAMwb,YAAcytD,aAAc1oE,KAAKioE,eACxG,kDCvGG,MAAMU,UCFN,MAGHnpE,YAAmBkvB,GACf1uB,KAAK0uB,OAASA,CAClB,GDMAlvB,YAAmBwgB,EAAmB7b,GAElCzE,MADeipE,EAA0BC,UAAU5oD,EAAW7b,IAG9DnE,KAAKggB,UAAYA,EACjBhgB,KAAKmE,UAAYA,CACrB,CAVO0kE,iBAAiB7oD,EAAmB7b,GACvC,MAAO,GAAG6b,KAAa7b,GAC3B,oBEHG,MAAMiS,UCJN,MAOH5W,cAAmC,QAAAspE,EAAA/tD,UAAA1U,OAAb6c,EAAa,IAAAxI,MAAAouD,GAAAC,EAAA,EAAAA,EAAAD,EAAAC,IAAb7lD,EAAa6lD,GAAAhuD,UAAAguD,GAC/B/oE,KAAKgpE,qBAAuB9lD,CAChC,CANWA,YACP,OAAOljB,KAAKgpE,oBAChB,GDEOH,gBAAgB7lE,EAAuBmT,EAAqC6J,GAC/E,MAAMipD,EAAgCjmE,EAAQC,QAAQ0+B,QACtD,IAAIze,EAAQ9M,EAAoB8yD,0BAA0BD,GAE1D,MAAM9kE,GAAYC,EAAAA,EAAAA,IAAapB,EAAQC,SAEjCe,EAAO,IAAI2kE,EAA0B3oD,EAAW7b,GAChDuR,EAAcS,EAA8B,GAAK,GACjD0M,EAAgBK,EAAMrU,KAAIs6D,GAAUA,EAAOnpD,YAAWopD,QAAQplE,EAAKgc,WACrEhc,IAAmB,IAAX6e,EACRK,EAAMjU,KAAKjL,GAEXkf,EAAMmmD,OAAOnmD,EAAM7c,OAAS,EAAG,EAAG6c,EAAMmmD,OAAOxmD,EAAO,GAAG,IAEzDK,EAAM7c,OAASqP,IACfwN,EAAQA,EAAMomD,MAAM/rD,KAAK7H,IAAIwN,EAAM7c,OAASqP,EAAK,KAGrDU,EAAoBmzD,eAAeN,EAAe7yD,EAAoBozD,+BAAgCtmD,EAC1G,CAEQ2lD,iCAAiCI,GACrC,MAAM/lD,EAAQ9M,EAAoBqzD,gBAAgBR,EAAe7yD,EAAoBozD,gCACrF,OAAKvoE,EAAAA,gBAAgBC,YAAYgiB,GAG1BA,EAFI,EAGf,CAEQ2lD,uBAAuBI,EAA+BS,GAC1D,IAAKA,EACD,OAGJ,IAAKT,EAAcvnC,iBACf,OAKJ,OAFoBunC,EAAczkC,IAAoDklC,GAEnEzyD,KACvB,CAEQ4xD,sBAAsBI,EAA+BS,EAAmBzyD,GACvEyyD,GAILT,EAAc76C,IAAIs7C,EAAWzyD,EAAO,CAAE0yD,QAAQ,EAAMC,OAAQ,QAChE,EAnDwBxzD,EAAAozD,+BAAyC,4rBEuDrE,MAAMK,EAAqD1uD,IAUtD,IAVuD,MACxDjO,EAAK,MACL6f,EAAK,QACL/pB,EAAO,GACPuD,EAAE,SACFiF,EAAQ,mBACRysD,EAAkB,SAClBC,EAAQ,SACRC,EAAQ,cACR5tB,GACHpvB,EACG,OACI5b,EAAAA,cAAA,KAAGoC,UAAW,2BAA2Bw2D,KACrC54D,EAAAA,cAAA,QAAMoC,UAAU,4BAA4BorB,GAC3C7f,GAAmB,IAAVA,EACN3N,EAAAA,cAAC8P,EAAAA,eAAc,CACXhO,KAAM,CACF6L,MAAO,CAAE8N,wBAAyB9N,IAEtCnC,cAAemtD,EACfl1D,QAASA,EACTuD,GAAIA,EACJiF,SAAUA,EACV7J,UAAU,2BACV0mC,aAAckC,IAGlBhrC,EAAAA,cAAA,QAAMoC,UAAU,4BAA4Bs2D,GAEhD,EAIN6R,EAA4B,SAC9BrqE,EACAyN,EACAirD,GAEiB,IADjBprC,EAAAhS,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,GAAAA,UAAA,GAAgB,GAEhB,OACIxb,EAAAA,cAACsqE,EAAgB,CACb38D,MAAOA,EACP6f,MAAOA,EACP/pB,QAASvD,EAAMuD,QACfuD,GAAI9G,EAAM8G,GACViF,SAAU/L,EAAM+L,SAChBysD,mBAAoBx4D,EAAMw4D,mBAC1BC,SAAUz4D,EAAMy4D,SAChBhuD,UAAWzK,EAAMyK,UACjBiuD,SAAUA,EACV5tB,cAAe9qC,EAAM+kE,qBAAqBl8B,UAGtD,EAEM+vB,EAA0B5gC,GACpBA,GAAiBA,EAAconB,eAAkB,EAmEvDkrB,EAAkB,SACpB9iE,GAIA,IAAAu6D,EAAA,IAHAwI,EAAAjvD,UAAA1U,OAAA,QAAAhD,IAAA0X,UAAA,IAAAA,UAAA,GACA5N,EAAgE4N,UAAA1U,OAAA,EAAA0U,UAAA,QAAA1X,EAChE4mE,EAA2BlvD,UAAA1U,OAAA,EAAA0U,UAAA,QAAA1X,EAE3B,OAAK2mE,EAGE78D,SAAoD,QAAzBq0D,EAA3Br0D,EAA6B+B,+BAAuB,IAAAsyD,OAAA,EAApDA,EAAsDz9D,MAAKmmE,GAAMA,IAAOjjE,IAFpEgjE,CAGf,EAGarF,EAAgBnlE,IACzB,MAAM,eACF0qE,EAAc,yBAEdC,EAAwB,UACxBC,EAAS,wBAETC,EAAuB,eACvBC,EAAiB,EAAC,YAClBrvC,EAAW,kBACXsvC,GACA/qE,EAAM0F,MAEJ,QAAEwmC,EAAO,kBAAE8+B,EAAiB,kBAAEC,EAAiB,WAAEC,GA7E1BC,EAC7BzlE,EACAq/D,EACAr3D,EACAi+B,EACA05B,EACAE,KAEA,MAAM11B,EAAyBk1B,GAAwBA,EAAqBv3D,uBACtEylB,EAAwB8xC,GAAwBA,EAAqB7xC,sBAErEk4C,GADY1lE,EAAK+tB,WAAa,IACJrkB,KAAIskB,GAAYA,EAAS/qB,eACnD0iE,OAAmDznE,IAA7B8B,EAAK4lE,oBAAoC5lE,EAAK4lE,oBAAsB,EAC1FC,OAAqD3nE,IAA9B8B,EAAK8lE,qBAAqC9lE,EAAK8lE,qBAAuB,EAOnG,IAAIN,EAAiC,EAuBrC,OArBIA,OADyBtnE,IAAzByhE,QAA2DzhE,IAArB2hE,EACzB7/D,EAAK8lE,qBAELnG,IAAyBE,EAAmBgG,EAAuBF,EAAsB3lE,EAAK8lE,qBAmBxG,CACHt/B,QAlBYk/B,EAActzD,MAC1BtQ,KAEyB,KAAjBA,IACCA,IACG8iE,EAAgB9iE,EAAcmkC,EAAmCj+B,EAA6BmiC,IAC9FroC,IAAiByrB,MAa7B+3C,kBAVsBI,EAActzD,MAAKtQ,KAAkBA,GAAgBA,IAAiByrB,IAW5Fg4C,kBAVsBG,EAActzD,MACpCtQ,KACMA,GACFA,IACI8iE,EAAgB9iE,EAAcmkC,EAAmCj+B,EAA6BmiC,IAClGroC,IAAiByrB,IAMrBi4C,aACmB,EA6B+CC,CAClEnrE,EAAM0F,KACN1F,EAAM+kE,qBACN/kE,EAAM0N,4BACN1N,EAAM2rC,kCACN3rC,EAAMqlE,qBACNrlE,EAAMulE,kBAGV,IAAIvM,EAEJ,QAAmCp1D,IAA/B5D,EAAMqlE,2BAAiEzhE,IAA3B5D,EAAMulE,iBAClDvM,EAAa,CACT/W,SAAUooB,EAA0BrqE,EAAO0qE,EAAgB,YAAa1qE,EAAMwkE,eAC9EriB,IAAKkoB,EAA0BrqE,EAAOgrE,EAAoBJ,OAAYhnE,EAAW,aAAc5D,EAAM0kE,UACrGniB,WAAY8nB,EAA0BrqE,EAAOy7B,EAAa,QAASz7B,EAAMq5D,iBACzEnX,YACK6oB,GAAqBV,EAA0BrqE,EAAO+qE,EAAmB,gBAAiB/qE,EAAMolE,wBACjGxhE,OAEL,CACH,MAAM6nE,OAA0C7nE,IAAtBmnE,EAAkCA,EAAoB,EAC1EW,OAAsD9nE,IAA5BinE,EAAwCA,EAA0B,EAC5Fc,OAAqC/nE,IAAdgnE,GAA2BA,EAAY,EAM9DgB,EACF5rE,EAAMqlE,uBAAyBrlE,EAAMulE,iBAAmBkG,EAAoBC,EAA0BD,EAEpGI,EAAuB7rE,EAAMqlE,sBAAwBrlE,EAAMulE,iBAAmBoF,EAA2BD,EAE/G1R,EAAa,CACT/W,SAAUooB,EAA0BrqE,EAAO6rE,EAAsB,YAAa7rE,EAAMwkE,eACpFriB,IAAKniD,EAAMulE,iBACL8E,EACIrqE,EACAgrE,GAAqBW,EAAuBf,OAAYhnE,EACxD,aACA5D,EAAM0kE,UAEV,GACNniB,WAAY8nB,EAA0BrqE,EAAOy7B,EAAa,QAASz7B,EAAMq5D,iBACzEnX,YACK6oB,GAAqBV,EAA0BrqE,EAAO4rE,EAAwB,gBAAiB5rE,EAAMolE,wBACtGxhE,EACN,CAKN,GAHIsoC,IACA8sB,EAAWvwD,SAAW4hE,EAA0BrqE,EAAOirE,EAAoBC,OAAatnE,EAAW,WAAY5D,EAAMykE,gBAErHzkE,EAAMg4B,cAAe,CACrB,MAAMshC,EA5IiBC,EAACvhC,EAA+BtyB,KAC3D,MAGM8zD,GAAsBxhC,EAAcmjB,iBAAmB,IAAIoE,QAHzCka,CAACzxD,EAAe2xC,IAC7B3xC,GAAS2xC,EAASS,SAAW,IAEiD,GACnF2K,GAAUr/C,EAAK+1B,aAAe,GAAKm9B,EAAuB5gC,GAChE,OAAOla,KAAK9H,IAAIwjD,EAAoBzU,EAAO,EAsIhBwU,CAAuBv5D,EAAMg4B,cAAeh4B,EAAM0F,MACnE05C,EAAgBwZ,EAAuB54D,EAAMg4B,eAC7C0D,GAlJ0B1D,EAkJ6Bh4B,EAAMg4B,gBAjJ9CA,EAAc0D,uBAA0B,EAkJvDg+B,GAA4Bj+B,GAAe,GAAK69B,EAAiBla,EAAgB1jB,EAEnF0jB,EAAgB,IAChB4Z,EAAW3W,QAAUgoB,EAA0BrqE,GAAQo/C,EAAe,UAAWp/C,EAAM25D,cAAgB,mBAGvGL,EAAiB,IACjBN,EAAWrf,SAAW0wB,EAA0BrqE,GAAQs5D,EAAgB,YAAat5D,EAAM45D,eAAiB,qBAG5Gl+B,EAAwB,IACxBs9B,EAAW1W,gBAAkB+nB,EACzBrqE,GACC07B,EACD,yBACA17B,EAAM6kE,sBAAwB,2BAItC7L,EAAWzW,WAAa8nB,EAAyBtoE,EAAAA,EAAC,CAAD,EACxC/B,GAAK,IAAEy4D,cAAU70D,IACtB81D,EACA,QACA15D,EAAMq5D,gBACR,CA3K8BrhC,MAkLpC,OAJI8yC,EAAiB,IACjB9R,EAAW5W,eAAiBioB,EAA0BrqE,GAAQ8qE,EAAgB,kBAAmB9qE,EAAM2kE,sBAGpG3L,CAAU,kICpQrB,MAAM8S,EAA4B,qBAQlC,IAAMC,EAAN,cAAiCjsE,EAAAA,cAAjCC,cAAA,oBAgCW,KAAAoB,MAAkC,CACrC6qE,YAAa,GA0FA,KAAAC,kBAAoB,KACjC,MACI/1C,aAAa,SAAEF,EAAQ,UAAEC,IACzB11B,KAAKP,MACT,OAAOg2B,EAAS3vB,QAAQ6lE,IACpB,MAAM/qE,EAAQ80B,EAAUi2C,GACxB,QAAS/qE,IAAUA,EAAMg1B,UAAU,GACrC,EASW,KAAAg2C,mBAAqB,KAClC,MAAMn2C,EAAqBz1B,KAAKP,MAAMyjB,MAAMrU,KAAK7K,GAA0BwgC,IAAIxgC,EAAM,cAAa8B,OAAO+lE,SACzG,IAAItlE,EAAa,GACjB,IAAK,IAAI8uD,EAAI,EAAGA,EAAI5/B,EAASpvB,OAAS,EAAGgvD,IAAK,CAC1C,MAAMsW,EAAUl2C,EAAS4/B,GACnByW,EAAcr2C,EAAS4/B,EAAI,GAC7Br1D,KAAK+rE,2BAA2BJ,IAAYG,IAC5CvlE,EAAKulE,EAAW,CAGxB,OAAOvlE,CAAE,EAQI,KAAAwlE,2BAA8BnkC,IAA6B,IAAAokC,EACxE,MAAMC,EAAejsE,KAAKP,MAAMk2B,YAAYD,UAAUkS,GAMtD,QALkC3mC,EAAAA,gBAAgBC,YAEzB,QAFoC8qE,EAEzDC,EAAax2C,gBAAQ,IAAAu2C,OAAA,EAArBA,EAAuBlmE,QAAOomE,GAAaA,aAAS,EAATA,EAAW1qC,SAAS+pC,KAMvD,EAGC,KAAAY,QAAW5lE,GACjBvG,KAAK0rE,oBAAoBtC,QAAQ7iE,GAG3B,KAAA6lE,MAASpoE,GACfwgC,IAAIxgC,EAAM,aAAe,GAGnB,KAAAqoE,WAAcroE,GACpBwgC,IAAIxgC,EAAM,yBAA2B,GAG/B,KAAAnD,WAAa,CAACuhD,EAAckqB,EAAuBX,MAC5D3rE,KAAKP,MAAM06B,cAIXn6B,KAAKP,MAAMk6B,gDAAkD2yC,IAAkBX,IAG5EvpB,GAAQ,GAAKA,GAAQpiD,KAAKY,MAAM6qE,aAG1B,KAAAc,SAAYnqB,GAClBA,IAASpiD,KAAKY,MAAM6qE,YAGd,KAAAe,SAAYpqB,GAClBA,GAAQ,GAAKA,EAAOpiD,KAAKY,MAAM6qE,YAGzB,KAAAgB,OAAS,KACtBzsE,KAAKK,SAAS,CACVorE,YAAazrE,KAAKY,MAAM6qE,YAAc,GACxC,CAEV,CA7MyBiB,qBACjB,OACsC,IAAlC1sE,KAAKP,MAAMozB,qBACwB,IAAnC7yB,KAAKP,MAAM0iC,sBAC0B,IAArCniC,KAAKP,MAAM2iC,wBACgC,IAA3CpiC,KAAKP,MAAMi7B,2BAMnB,CAEqBiyC,oBACjB,IAAK,MAAM3oE,KAAQhE,KAAKP,MAAMyjB,MAAO,CAAC,IAAD0pD,EACjC,MAAMjB,EAAU3rE,KAAKosE,MAAMpoE,GACrBpD,EAAQZ,KAAKP,MAAMk2B,YAAYD,UAAUi2C,GAO/C,IALkC1qE,EAAAA,gBAAgBC,YAEhC,QAF2C0rE,EAEzDhsE,EAAM60B,gBAAQ,IAAAm3C,OAAA,EAAdA,EAAgB9mE,QAAOomE,GAAaA,aAAS,EAATA,EAAW1qC,SAAS+pC,QAGzB3qE,EAAMg1B,YAAch1B,EAAMq5B,SACzD,OAAO,CAAI,CAInB,OAAO,CACX,CAMO6B,oBAIH,MAAMrG,EAAWz1B,KAAKP,MAAMyjB,MAAMrU,KAAK7K,GAA0BwgC,IAAIxgC,EAAM,cAC3EhE,KAAKP,MAAMk2B,YAAY2V,KAAK,CAAE7V,YAClC,CAEO30B,SACH,MAAM,YAAE60B,EAAW,MAAEzS,EAAK,SAAE0gB,GAAa5jC,KAAKP,MAC9C,IAAKyjB,IAAUyS,EACX,OAAO,KAGX,MAAMk3C,EACF7sE,KAAKP,MAAM0yB,kCACXnyB,KAAKP,MAAMk6B,iDACV35B,KAAKP,MAAMw6B,WACXj6B,KAAK0sE,iBACL1sE,KAAK2sE,cAEV,IAAIG,GAAyB,EAC7B,MAAMC,EAAc/sE,KAAK4rE,qBACzB,OACIrsE,EAAAA,cAAA,OAAKoC,UAAU,4BACVuhB,EAAMrU,KAAK7K,IAAyB,IAAAgpE,EACjC,MAAMrB,EAAU3rE,KAAKosE,MAAMpoE,GACrBo+C,EAAOpiD,KAAKmsE,QAAQR,GACpBtpE,EAAQrC,KAAKqsE,WAAWroE,GACxBpD,EAAQZ,KAAKP,MAAMk2B,YAAYD,UAAUi2C,IACzC,QACF31C,EAAO,UACPi3C,EAAS,WACTx4B,EAAU,WACV7e,EAAU,gBACVs3C,EAAe,OACfroC,EAAM,SACN2G,EAAQ,SACRC,EAAQ,eACR5V,EAAc,eACds3C,EAAc,SACdlzC,GACAr5B,GAAU,CAAC,EAEf,IAAIwsE,IACEptE,KAAKP,MAAM25B,6CACXp5B,KAAKP,MAAMkgC,6BACZmtC,GACD7yC,EAGJ,OAFA6yC,EAAyBA,GAA0BM,EAG/C7tE,EAAAA,cAAC8tE,EAAAA,EAAU,CACP9mE,GAAIvG,KAAKosE,MAAMpoE,GACfqM,IAAKs7D,EACLvpB,KAAMA,EACN//C,MAAOA,EACPuhC,SAAUA,EACVlzB,UAAWmlB,GAAkBD,EAC7B22C,UAAWM,GAA+B7sE,KAAKusE,SAASnqB,GACxDoqB,UAAWK,GAA+B7sE,KAAKwsE,SAASpqB,GACxDvhD,YAAagsE,GAA+B7sE,KAAKa,WAAWuhD,EAAM2qB,EAAapB,GAC/E2B,aAAcL,EACdrqE,SAAU5C,KAAKP,MAAMmD,SACrBqqE,UAAWA,EACXx4B,WAAYA,EACZ04B,eAAgBA,EAChBn3C,QAASA,EACTk3C,gBAAiBA,EACjBzhC,SAAUA,EACVD,SAAUA,EACV3G,OAAQA,EACR4nC,OAAQzsE,KAAKysE,OACbc,iBAAkBvtE,KAAKP,MAAMohC,2BAA6BssC,EAC1DrjE,iBAAkB9J,KAAKP,MAAMqK,iBAC7B6rB,YAAaA,EACb9sB,cAAwC,QAA3BmkE,EAAEhtE,KAAKP,MAAMoc,sBAAc,IAAAmxD,OAAA,EAAzBA,EAA2BnkE,cAC1CukE,YAAaA,GAEZ7tE,EAAAA,aAAmByE,EAA4B,CAAEwpE,eAAe,IACxD,IAKjC,IAxHU1oC,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,oCAaCD,EAAAA,EAAAA,IAAA,CAATC,EAAAA,IAAQ,kCAdPymC,GAAkB1mC,EAAAA,EAAAA,IAAA,CADvBI,EAAAA,IACKsmC,GAgNN,4UC5PA,MAMA,EAN6CrwD,IAAA,IAAC,QAAEnP,GAASmP,EAAA,OACrD5b,EAAAA,cAAA,KAAGoC,UAAU,6BAA6B2kB,KAAK,QAAO,YAAW,aAC5Dta,EACD,uFCED,MAAMg4B,EAA4BvZ,IACrC,MACIppB,MAAM,SAAE0vB,GACRzuB,WAAW,iBAAEmrE,EAAgB,aAAE7U,EAAY,oBAAE8U,GAAqB,QAClE1qE,EAAO,SACPwI,EAAQ,GACRjF,EAAE,UACF2D,GACAugB,EAEE+G,EAAegT,IAAIzT,EAAU,uBAC7B5rB,EAAOq/B,IAAIzT,EAAU,4BAE3B,MAAO,CACH/gB,QAASzQ,EAAAA,cAAA,MAAIoC,UAAU,gCAAgC+rE,GACvDjsB,MAAOjwB,SAAAA,EAAcC,gBACf6mC,EAAAA,EAAAA,GAAe,CACXQ,gBAAiB2U,EACjB7U,eACAzzD,OACAnC,UACAwI,WACAtB,YACA3D,KACAkxB,cAAe1G,EAASzvB,cAE5B+B,EACT,8HCiBL,MAAMsqE,UAA2BpuE,EAAAA,cAO7BC,YAAYC,GACRC,MAAMD,GAPO,KAAAmuE,cAAoDruE,EAAAA,YAEpD,KAAAsuE,YAA+CtuE,EAAAA,YA8H/C,KAAAuuE,aAAe,KAC5B,MAAM,SAAEtB,EAAQ,QAAEx2C,EAAO,aAAEs3C,EAAY,gBAAEJ,EAAe,gBAAEK,EAAe,SAAE/hC,EAAQ,SAAEC,EAAQ,SAAE7H,GAAa5jC,KAAKP,OAC3G,aAAEwtC,EAAY,eAAEK,EAAc,wBAAEygC,GAA4BnqC,EAE5DoqC,GAAah4C,GAAWyV,EACxBwiC,GAAaj4C,GAAWw2C,GAAYU,GAAmB1hC,EAE7D,IAAK+hC,IAAqBS,IAAcC,EACpC,OAAO,KAGXjuE,KAAK+hB,QAAQ4jB,cAAcC,MAAQ4mC,EAAWvqD,EAAAA,kBAAkBisD,KAAOjsD,EAAAA,kBAAkBksD,aACzF,MAAMC,GAAoBhsD,EAAAA,EAAAA,wBAAuBpiB,KAAKP,MAAMqK,iBAAmB9J,KAAK+hB,SACpF/hB,KAAK+hB,QAAQ4jB,cAAcC,MAAQ3jB,EAAAA,kBAAkBosD,OACrD,MAAMC,GAAsBlsD,EAAAA,EAAAA,wBAAuBpiB,KAAKP,MAAMqK,iBAAmB9J,KAAK+hB,SAEtF,OACIxiB,EAAAA,cAAA,OAAKoC,UAAU,mCACVqsE,GACGzuE,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAW6zC,IAAU,oCAAqC,CAAE,gBAAiB83B,IAC7EjrE,MAAOmqE,EAAWv/B,EAAe8gC,EACjC3qE,MAAM,UACNsN,SAAU48D,EACVlrE,QAASqpC,GACL2iC,GAEH5B,GAAYU,EAAkBjgC,EAAe8gC,GAGrDE,GACG1uE,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAU,sCACVU,MAAOirC,EACPlqC,MAAM,YACNhB,QAASopC,GACL8iC,GAEHhhC,GAGP,EAIG,KAAAihC,6BAA+B,KAC5C,MAAMC,EAAOxuE,KAAK6tE,YAAY5tE,QAcxBwuE,EAAQD,GAAQA,EAAKE,eAAkBF,EAAKE,cAbvB,6dAc3BD,GAASA,EAAMhyB,OAASgyB,EAAMhyB,OAAO,EAGxB,KAAAkyB,kBAAoB,KAEjC,MAAM34B,EACFh2C,KAAK4tE,eACL5tE,KAAK4tE,cAAc3tE,SACnBD,KAAK4tE,cAAc3tE,QAAQw8C,OAC1Bz8C,KAAK4tE,cAAc3tE,QACxB+1C,GAAcA,EAAWyG,OAAO,EAGnB,KAAAmyB,cAAgB,KAE7B,MAAMC,EAAW7uE,KAAKP,MAAMmD,UAAY5C,KAAK6tE,aAAe7tE,KAAK6tE,YAAY5tE,SAAYD,KAAK6tE,YAAY5tE,QAC1G4uE,GAAYA,EAASC,gBAAgB,EAGxB,KAAAC,SAAW,KACxB,MAAM,KAAE3sB,EAAI,MAAE//C,GAAUrC,KAAKP,OACrByQ,WAAY8+D,EAAM,KAAI,KAAEzrE,EAAO,IAAOlB,GAAS,CAAC,EACxD,OACI9C,EAAAA,cAACyvE,EAAG,CAACrtE,UAAU,kCACXpC,EAAAA,cAAA,QAAMoC,UAAU,uCACXygD,EAAO,EAAC,KAAI,KAEhB7+C,GAAQhE,EAAAA,cAAA,QAAMoC,UAAU,uCAAuC4B,GAC9D,EAKG,KAAA0rE,YAAejrE,GACrBwgC,IAAIxgC,EAAM,0BAA4B,GAGhC,KAAAkrE,OAAUlrE,GAChBwgC,IAAIxgC,EAAM,OAAS,GA3N1BhE,KAAK+hB,SAAUC,EAAAA,EAAAA,kBAAiB,QAASviB,EAAMqK,iBAAmB,GACtE,CAEO01B,mBAAmB2vC,GAItB,MAAM,SAAE5C,EAAQ,QAAEv2C,EAAO,OAAEy2C,EAAM,SAAED,EAAQ,OAAE3nC,EAAM,YAAEuoC,EAAW,SAAEgC,EAAQ,YAAEz5C,EAAW,cAAE9sB,GAAkB7I,KAAKP,MAG5G8sE,GAAYv2C,GACZy2C,IAmBJ,KAdoB0C,EAAUn5C,SAAWm5C,EAAU3C,YAAc2C,EAAUtqC,UAC3D7O,GAAWw2C,KAAc3nC,KAErC7kC,KAAK2uE,oBACL3uE,KAAK4uE,iBAKLO,EAAUn5C,UAAYA,GACtBh2B,KAAKuuE,+BAILnB,GAAevkE,EAAe,CAC9B,MAAMwmE,EAAkBrvE,KAAKivE,YAAYG,GAGzC,GAAIC,EAAgBhpE,OAAS,EACzB,IAAK,MAAM0mE,KAAesC,EAAiB,CACvC,MAAM1D,EAAU3rE,KAAKkvE,OAAOnC,GACtBuC,EAAa35C,aAAW,EAAXA,EAAaD,UAAUi2C,GAE1C,GAAI2D,SAAAA,EAAYr1C,SAEZ,YADAs1C,EAAAA,EAAAA,IAAsB5D,EAAS9iE,EAC/B,MAIR+2B,EAAAA,EAAAA,IAAqB5/B,KAAK6tE,YAAahlE,EAAc,CAGjE,CAEO/H,SACH,MAAM,MACFuB,EAAK,SACLqO,EAAQ,WACR7P,EAAU,SACV0rE,EAAQ,SACRC,EAAQ,SACR4C,EAAQ,QACRp5C,EAAO,UACPi3C,EAAS,WACTx4B,EAAU,eACV04B,EAAc,gBACdI,EAAe,OACf1oC,EAAM,SACNjB,GACA5jC,KAAKP,OACH,eAAE+vE,GAAmB5rC,EAE3B5jC,KAAK+hB,QAAQ4jB,cAAcC,MAAQ3jB,EAAAA,kBAAkBwtD,eACrD,MAAMC,GAAsBttD,EAAAA,EAAAA,wBAAuBpiB,KAAKP,MAAMqK,iBAAmB9J,KAAK+hB,SAChF4tD,EAAUpC,GAAmBv3C,GAAWw2C,GAAY3nC,EAE1D,OACItlC,EAAAA,cAAA,OACIoC,UAAW6zC,IAAU,2BAA4B,CAC7Co6B,OAAQrD,EACRsD,SAAUhvE,EACVivE,QAASjvE,EACTkvE,OAAQvD,EACRjE,OAAQ73D,EACRs/D,YAAa7C,EACbz8D,WACAu/D,MAAOj6C,EACPk6C,QAASjD,EACTkD,SAAU17B,IAEdhyC,IAAKzC,KAAK6tE,aAEVtuE,EAAAA,cAAA,OAAKoC,UAAU,mCACV3B,KAAK+uE,WAELY,GACGpwE,EAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHs9C,SAAUvmD,KAAK4tE,cACfjsE,UAAU,oCACVU,MAAOmtE,EACPpsE,MAAM,OACNhB,QAASyiC,EACTve,KAAK,SAAQ,aACDjkB,GAASA,EAAMkB,KAAO,GAAGisE,KAAkBntE,EAAMkB,OAAS,IAClEmsE,GAEHF,IAKbjwE,EAAAA,cAAA,OACIoC,UAAW6zC,IAAU,gCAAiC,CAClD+yB,QAAS1nE,KAGbtB,EAAAA,cAAA,OAAKoC,UAAU,oCAAoCytE,GAElDpvE,KAAK8tE,gBAItB,EAyGJ,gIC/QA,MAAMsC,EAAiE,GASjEC,EAAsBA,CAACC,EAAiBl2C,EAAwBlI,IAAoCltB,WAClGsrE,GAAWl2C,IAGfg2C,EAAcvhE,KAAI0hE,IACdA,GAAe,IACR,WAELr+C,IAAY,EA+CtB,EA5C2E/W,IAStE,IATuE,gBACxE+mB,EAAe,cACf9H,EAAa,WACblI,EAAU,iBACVpoB,EAAgB,+CAChB6vB,EAA8C,oBAC9CvJ,EAAmB,yBACnBmJ,EAAwB,iCACxBpH,GACHhX,EACG,MAAOm1D,EAAQE,IAAajqC,EAAAA,EAAAA,WAAS,GACrC6pC,EAAcnhE,KAAKuhE,GACnB,MAAMznC,GAAU/mB,EAAAA,EAAAA,kBAAiBgnB,EAAAA,GAAeynC,SAAU3mE,EAAmBo4B,EAAiB,IACxF/f,GAAaC,EAAAA,EAAAA,wBAAuBtY,EAAmBi/B,GAE7D,OAAIpP,GAAoDJ,IAA4BpH,EAgBhF5yB,IAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAWC,IAAW,+BAAgC,CAAE,UAAW0uE,IACnEltE,MAAM,UACNhB,QAASiuE,EAAoBC,EAAQl2C,EAAelI,GACpD7vB,MAAO6/B,GACH/f,EAAU,CACdzR,UAAW0pB,GAAiBk2C,IAE3BpuC,GAtBD3iC,IAAAA,cAAC4C,EAAAA,OAAMgE,OAAA8C,OAAA,CACHtH,UAAWC,IAAW,+BAAgC,CAAE,UAAWwuB,SAAAA,IACnEhtB,MAAM,UACNhB,QAAS8vB,EACT7vB,MAAO6/B,GACH/f,EAAU,CACdzR,UAAW0pB,GAAiBhK,IAE3B8R,EAeA,mECvEjB,cACIva,EACA8P,EACAi5C,EACAC,EACA5+C,EACAI,KAEOy+C,EAAAA,EAAAA,GAAWjpD,EAAK8P,EAAei5C,EAAiBC,EAAU5+C,EAAoBI,sKCTlF,MAAMwrB,EAAa,CACtBkzB,QAAS,IACTjzB,mBAAoB,IACpBkzB,WAAY,IACZC,mBAAoB,kDCgGjB,IAAKv3D,EA6FAqgD,mBA7FZ,SAAYrgD,GACRA,EAAA,cACAA,EAAA,0BACH,CAHD,CAAYA,IAAAA,EAAsB,KA6FlC,SAAYqgD,GACRA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,QACAA,EAAA,OACH,CAPD,CAAYA,IAAAA,EAAe","sources":["webpack://Msdyn365.Commerce.Online/./src/modules/bulk-purchase/bulk-purchase.tsx?9fd5","webpack://Msdyn365.Commerce.Online/./src/modules/buybox/components/buybox-find-in-store.tsx?3ef8","webpack://Msdyn365.Commerce.Online/./src/modules/buybox/buybox.tsx?e22d","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/utilities/helper.ts?f31d","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/utilities/get-valid-product-images.ts?78b7","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/quickview.tsx?4080","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/utilities/get-product-details.ts?5cc2","webpack://Msdyn365.Commerce.Online/./src/modules/buybox/buybox.view.tsx?376b","webpack://Msdyn365.Commerce.Online/./src/modules/quickview/quickview.view.tsx?ee5b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.tsx?6737","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.description.tsx?840c","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-message.tsx?8ca3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.error-title.tsx?f7e7","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-delivery-options.radio-button.tsx?9df9","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/address-detail-item.tsx?d9a2","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-date.tsx?bd12","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-grp.tsx?3a15","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-cartLine-delivery-options-radio.tsx?045f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/get-line-items.tsx?e389","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/components/checkout-shipping-cartlines-images.tsx?ab7c","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.tsx?6764","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-form.tsx?4540","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-item.tsx?d186","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/get-list.tsx?a3f3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/components/title.tsx?3b2f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.tsx?8fc3","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/checkout.view.tsx?e4cc","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-input.tsx?cadb","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-label.tsx?e02b","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/components/checkout-loyalty-text.tsx?895a","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.tsx?8b4b","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-form.tsx?e249","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/components/get-item.tsx?4862","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.tsx?d1f8","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/components/buybox-add-to-order-template.tsx?c57b","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/buybox.view.tsx?6f3d","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme-b2c/views/quickview.view.tsx?efa8","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/components/buybox-add-to-order-template.tsx?7592","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/buybox.view.tsx?abca","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/views/quickview.view.tsx?5429","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-delivery-options/checkout-delivery-options.view.tsx?1e75","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-gift-card/checkout-gift-card.view.tsx?d99f","webpack://Msdyn365.Commerce.Online/./src/modules/checkout-loyalty/checkout-loyalty.view.tsx?b79f","webpack://Msdyn365.Commerce.Online/./src/modules/gift-card-balance-check/gift-card-balance-check.view.tsx?a0c9","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/components/buybox-add-to-order-template.tsx?ceb4","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/buybox.view.tsx?98cf","webpack://Msdyn365.Commerce.Online/./src/modules/adventureworks/views/quickview.view.tsx?8e29","webpack://Msdyn365.Commerce.Online/./src/themes/gardner-theme/models/SupersessionKey.ts?818f","webpack://Msdyn365.Commerce.Online/./src/invoice-summary-lineitem.tsx?5f61","webpack://Msdyn365.Commerce.Online/./src/common/buybox-components.tsx?42b4","webpack://Msdyn365.Commerce.Online/./src/common/utilities/error-utilities.ts?bb69","webpack://Msdyn365.Commerce.Online/./src/common/dropdown/dropdown.props.ts?7676","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-line-items.tsx?92f8","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-order-summary.tsx?4a81","webpack://Msdyn365.Commerce.Online/./src/common/buybox-product-configure.tsx?139c","webpack://Msdyn365.Commerce.Online/./src/common/dropdown/dropdown.tsx?f1d3","webpack://Msdyn365.Commerce.Online/./src/modules/recently-viewed/base/recently-viewed-product-item.ts?4982","webpack://Msdyn365.Commerce.Online/./src/modules/recently-viewed/base/recently-viewed-item.ts?54c9","webpack://Msdyn365.Commerce.Online/./src/modules/recently-viewed/recently-viewed-state.ts?c73b","webpack://Msdyn365.Commerce.Online/./src/modules/recently-viewed/recently-viewed-manager.ts?a2a8","webpack://Msdyn365.Commerce.Online/./src/order-summary-lineitem.tsx?8a98","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-form.tsx?f018","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/alert.tsx?cb1e","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/get-invoice-payment-summary.tsx?9549","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/guided-card.tsx?58e0","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/components/place-order-button.tsx?9b41","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/place-order.ts?5aa0","webpack://Msdyn365.Commerce.Online/./src/modules/checkout/methods/checkout.ts?7b6b","webpack://Msdyn365.Commerce.Online/./src/common/buyboxInterface.ts?9d60"],"sourcesContent":["/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IProductDimensionsWithAvailabilitiesFull } from '@msdyn365-commerce/commerce-entities';\nimport { ProductDimensionsMatrix } from '@msdyn365-commerce/components';\nimport { RichTextComponent } from '@msdyn365-commerce/core';\nimport { ICoreContext, getCatalogId } from '@msdyn365-commerce/core-internal';\nimport { ArrayExtensions, IDimensionsApp, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport { Alert, Button, Collapse, IModuleProps, isMobile, VariantType } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { FeatureState } from '@msdyn365-commerce/retail-proxy';\nimport { IBulkPurchaseData } from './bulk-purchase.data';\nimport { IBulkPurchaseProps } from './bulk-purchase.props.autogenerated';\n\n/**\n * Additional optional props for the bulk purchase.\n */\nexport interface IBulkPurchaseExtendedProps extends IBulkPurchaseProps {\n productDimensions?: IProductDimensionsWithAvailabilitiesFull[];\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseViewProps extends IBulkPurchaseProps {\n container: IModuleProps;\n content: React.ReactElement;\n}\n\n/**\n * BulkPurchase state message Interface.\n */\nexport interface IBulkPurchaseStateMessage {\n isOpen: boolean;\n messageGlyph: string;\n messageText: string;\n statusCssString: string;\n}\n\n/**\n * View for the bulk purchase module.\n */\nexport interface IBulkPurchaseState {\n isExpanded: boolean;\n stateMessage?: IBulkPurchaseStateMessage;\n}\n\n/**\n * Bulk-purchase module.\n */\nexport class BulkPurchase extends React.PureComponent {\n public static readonly className = 'ms-bulk-purchase';\n private readonly _errorCssClass: string = 'danger';\n private readonly _errorCssGlyphClass: string = 'fas fa-exclamation-triangle';\n private readonly collapseRef: React.RefObject = React.createRef();\n\n public constructor(props: IBulkPurchaseExtendedProps) {\n super(props);\n\n this.state = {\n isExpanded: false\n };\n }\n\n public render(): React.ReactElement | null {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const hasDimensionsInData = ArrayExtensions.hasElements(this.props.data.productDimensions?.result);\n if (!hasDimensionsInProps && !hasDimensionsInData) {\n return null;\n }\n\n const viewProps: IBulkPurchaseViewProps = {\n ...this.props,\n container: {\n moduleProps: this.props,\n className: classnames(BulkPurchase.className, this.props.config.className)\n },\n content: this._renderCollapseContent(`${BulkPurchase.className}__content`)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _renderCollapseContent(className: string): React.ReactElement {\n return (\n
\n {this._renderCollapseButton(`${className}__collapse-button`)}\n {this._renderCollapse(`${className}__collapse`)}\n
\n );\n }\n\n private _renderCollapseButton(className: string): React.ReactElement {\n return (\n \n {this.props.resources.bulkPurchaseHeaderTitle}\n \n );\n }\n\n /**\n *This function is being used to handel variant change dropdown.\n */\n private _dimensionDropDownChange = () => {\n this.collapseRef.current?.reEvaluateHeight();\n };\n\n private _renderCollapse(className: string): React.ReactElement {\n return (\n \n {this._renderMainContent(`${className}__main-content`)}\n \n );\n }\n\n private _renderMainContent(className: string): React.ReactElement {\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n\n const userMessageNode = this.state.stateMessage ? (\n \n \n {this.state.stateMessage.messageText}\n \n ) : (\n undefined\n );\n\n return (\n
\n {!isMobileDevice && (\n
\n \n
\n )}\n {userMessageNode}\n {this._renderMatrix(`${className}__matrix-container`)}\n
\n );\n }\n\n private _renderMatrix(className: string): React.ReactElement {\n const hasDimensionsInProps = ArrayExtensions.hasElements(this.props.productDimensions);\n const channelMultipleCatalogsFeature = 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature';\n const { featureState } = this.props.data;\n const isMultipleCatalogsFeatureEnabled =\n featureState?.result?.find((item: FeatureState) => item.Name === channelMultipleCatalogsFeature)?.IsEnabled || false;\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n return (\n }\n data={{\n dimensions: hasDimensionsInProps ? this.props.productDimensions! : this.props.data.productDimensions!.result!,\n orderTemplates: this.props.data.orderTemplates?.result,\n customerInformation: this.props.data.customerInformation?.result\n }}\n resources={this.props.resources}\n dimensionOnChange={this._dimensionDropDownChange}\n onErrorMessage={this._onErrorMessage}\n isMultipleCatalogFeatureEnabledInHq={isMultipleCatalogsFeatureEnabled}\n catalogId={catalogId}\n />\n );\n }\n\n private _onErrorMessage = (errorMessage: string) => {\n this.setState({\n stateMessage: {\n messageText: errorMessage,\n statusCssString: this._errorCssClass,\n messageGlyph: this._errorCssGlyphClass,\n isOpen: true\n }\n });\n };\n\n /**\n * Callback which toggles collapse mode.\n */\n private readonly _toggleCollapse = () => {\n this.setState(state => ({\n isExpanded: !state.isExpanded\n }));\n };\n}\n\nexport default BulkPurchase;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToCartBehavior,\n IAddToCartFailureResult,\n IAddToCartResources,\n ItemSuccessfullyAddedToCartNotification,\n PriceComponent\n} from '@msdyn365-commerce/components';\nimport { getUrlSync, ICoreContext, IImageSettings } from '@msdyn365-commerce/core';\nimport { ICartActionResult } from '@msdyn365-commerce/global-state';\nimport { DeliveryOption, FeatureState, OrgUnitLocation, ProductAvailableQuantity, ProductDimension } from '@msdyn365-commerce/retail-proxy';\nimport { NotificationsManager } from '@msdyn365-commerce-modules/notifications-core';\nimport {\n ArrayExtensions,\n DeliveryMode,\n IProductInventoryInformation,\n isAggregatedInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { getTelemetryObject, Heading, INodeProps, IPopupProps, Popup } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { BuyboxErrorBlock } from '../../../common/buybox-components';\nimport { IBuyboxCallbacks, IBuyboxState } from '../../../common/buyboxInterface';\nimport { getConfigureErrors, getGenericError } from '../../../common/utilities/error-utilities';\nimport { IBuyboxData } from '../buybox.data';\nimport { IBuyboxProps, IBuyboxResources } from '../buybox.props.autogenerated';\n\nconst modalCloseButtonReference: React.RefObject = React.createRef();\n\n/**\n * FindinStore failure Interface.\n */\nexport interface IFindInStoreFailureResult {\n missingDimensions?: ProductDimension[];\n}\n\n/**\n * BuyBoxFindinStore View Props Interface.\n */\nexport interface IBuyboxFindInStoreViewProps {\n storeSelector?: React.ReactNode;\n heading?: React.ReactNode;\n description?: React.ReactNode;\n errors?: React.ReactNode;\n button?: React.ReactNode;\n productPickupOptionList?: React.ReactNode;\n\n modal?: React.ReactNode;\n\n ContainerProps: INodeProps;\n\n openFindInStoreDialog(): Promise;\n}\n\n/**\n * On click find store handler.\n * @param props -Buybox data.\n * @param state -Buybox state.\n * @param callbacks -Buybox callbacks.\n * @returns Find in store.\n */\nconst onClickFindInStoreHandler = (props: IBuyboxProps, state: IBuyboxState, callbacks: IBuyboxCallbacks) => async () => {\n await findInStoreOnClick(props, state, callbacks);\n};\n\n/**\n * Inventory settings based on the inventory policy for aggregated availability.\n */\ninterface IInventorySettingsProps {\n isSectionDisabled: boolean;\n description: string;\n buttonText: string;\n}\n\n/**\n * The function defines the settings values for a given inventory configuration.\n * @param context - The context.\n * @param isStockCheck - Flag to enable inventory validation.\n * @param productAvailability - The product inventory information.\n * @param buyboxResources - The buybox string resources.\n * @param isLoading - Is loading.\n * @returns Boolean.\n */\nfunction getFindInStoreInventorySettings(\n context: ICoreContext,\n isStockCheck: boolean,\n productAvailability: IProductInventoryInformation[] | undefined,\n buyboxResources: IBuyboxResources,\n isLoading?: boolean\n): IInventorySettingsProps {\n // If shouldValidateAggregation is true then is required to check for the product inventory, based on this the messaging will change\n // and the find in store button will be ensbled or disabled\n\n let isSectionDisabled: boolean;\n let buttonText;\n let description: string;\n\n let pickupInventory: IProductInventoryInformation | undefined;\n\n if (!isStockCheck || isLoading) {\n return {\n isSectionDisabled: false,\n buttonText: buyboxResources.findInStoreLinkText,\n description: buyboxResources.findInStoreDescriptionText\n };\n }\n\n if (productAvailability) {\n pickupInventory = productAvailability.find(pickup => pickup.deliveryType === DeliveryMode.pickup);\n }\n\n // If aggregated is enabled, then we need to validate the inventor check for find in store.\n // If an individual is selected, then we will always show a find in store button.\n if (isAggregatedInventory(context.actionContext)) {\n if (productAvailability && pickupInventory?.IsProductAvailable) {\n isSectionDisabled = false;\n buttonText = buyboxResources.findInStoreLinkText;\n description = buyboxResources.findInStoreDescriptionText;\n } else {\n isSectionDisabled = true;\n buttonText = buyboxResources.findInStoreNotAvailableTextButton;\n description = buyboxResources.findInStoreNotAvailableDescription;\n }\n } else {\n isSectionDisabled = false;\n buttonText = buyboxResources.findInStoreLinkText;\n description = buyboxResources.findInStoreDescriptionText;\n }\n\n return {\n isSectionDisabled,\n description,\n buttonText\n };\n}\n\n/**\n * Method to check if we have atleast one common delivery code between product and channel.\n * @param productdeliveryOptions - Product DeliveryOption List.\n * @param storePickUpOptionList - Channel DeliveryOption List.\n * @returns Boolean flag.\n */\nconst matchDeliveryOptions = (\n productdeliveryOptions: DeliveryOption[] | undefined,\n storePickUpOptionList: string[] | undefined\n): boolean => {\n const deliveryOption: string[] = [];\n productdeliveryOptions?.map(delivery => {\n const pickup = storePickUpOptionList?.find(deliveryCode => deliveryCode === delivery.Code);\n if (pickup) {\n deliveryOption.push(pickup);\n }\n return deliveryOption;\n });\n\n return ArrayExtensions.hasElements(deliveryOption);\n};\n\nexport function getBuyboxFindInStore(\n props: IBuyboxProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): IBuyboxFindInStoreViewProps | undefined {\n const {\n data,\n slots: { storeSelector },\n resources: {\n priceFree,\n originalPriceText,\n currentPriceText,\n findInStoreHeaderText,\n buyBoxGoToCartText,\n buyBoxContinueShoppingText,\n closeNotificationLabel,\n buyBoxSingleItemText,\n buyBoxMultiLineItemFormatText,\n buyBoxHeaderMessageText,\n descriptionTextToShowAllPickupOptions\n },\n context: {\n request: { channel: { PickupDeliveryModeCode } = { PickupDeliveryModeCode: undefined } }\n }\n } = props;\n\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const product = data?.product?.result;\n const price = data?.productPrice?.result;\n const cart = data?.cart?.result;\n const deliveryOptions = data?.deliveryOptions?.result;\n const productAvailability = data.productAvailableQuantity?.result;\n const retailMulitplePickupMFeatureState = data?.featureState?.result?.find(\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n const channelDeliveryOptionConfig = data?.channelDeliveryOptionConfig?.result;\n\n const missingDimensions = product?.Dimensions?.filter(dimension => !dimension.DimensionValue?.Value);\n\n const {\n errorState: { configureErrors, quantityError, otherError, errorHost },\n modalOpen,\n quantity\n } = state;\n\n const { isSectionDisabled, buttonText, description } = getFindInStoreInventorySettings(\n props.context,\n props.context.app.config.enableStockCheck,\n productAvailability,\n props.resources,\n props.data.productAvailableQuantity.status === 'LOADING' || ArrayExtensions.hasElements(missingDimensions)\n );\n\n if (!product || !ArrayExtensions.hasElements(storeSelector)) {\n return undefined;\n }\n\n if (!deliveryOptions || !deliveryOptions.DeliveryOptions) {\n return undefined;\n }\n\n // If no delivery options present on the product, or none of the delivery options\n // match the PickupDeliveryModeCode, that means the item cannot be used for BOPIS\n if (retailMulitplePickupMFeatureState && channelDeliveryOptionConfig) {\n if (!matchDeliveryOptions(deliveryOptions.DeliveryOptions, channelDeliveryOptionConfig?.PickupDeliveryModeCodes)) {\n return undefined;\n }\n } else if (\n !PickupDeliveryModeCode ||\n !deliveryOptions.DeliveryOptions.find((option: DeliveryOption) => option.Code === PickupDeliveryModeCode)\n ) {\n return undefined;\n }\n\n const dialogStrings = {\n goToCartText: buyBoxGoToCartText,\n continueShoppingText: buyBoxContinueShoppingText,\n closeNotificationLabel,\n headerItemOneText: buyBoxSingleItemText,\n headerItemFormatText: buyBoxMultiLineItemFormatText,\n headerMessageText: buyBoxHeaderMessageText,\n freePriceText: priceFree,\n originalPriceText,\n currentPriceText\n };\n\n const priceComponent = price ? (\n \n ) : (\n ''\n );\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const popupProps: IPopupProps = {\n context: props.context,\n className: 'ms-buybox',\n id: props.id,\n typeName: props.typeName,\n data: { product: props.data.product?.result, price: props.data.productPrice?.result },\n dialogStrings,\n imageSettings: defaultImageSettings,\n gridSettings: props.context.request.gridSettings,\n productQuantity: quantity,\n priceComponent,\n navigationUrl: getUrlSync('cart', props.context.actionContext),\n modalOpen,\n setModalOpen: callbacks.changeModalOpen\n };\n const renderModalPopup = ;\n const { enableHidePdpRepeatingErrors } = props.context.request.features;\n return {\n ContainerProps: {\n className: 'ms-buybox__find-in-store'\n },\n\n storeSelector: storeSelector[0],\n\n openFindInStoreDialog: onClickFindInStoreHandler(props, state, callbacks),\n\n heading: ,\n\n description:

{description}

,\n productPickupOptionList:\n retailMulitplePickupMFeatureState && !isSectionDisabled ? (\n <>\n

{descriptionTextToShowAllPickupOptions}

\n
    \n {deliveryOptions.DeliveryOptions.map((item: DeliveryOption) => {\n return (\n
  • \n {item.Description}\n
  • \n );\n })}\n
\n \n ) : null,\n errors: (\n \n ),\n\n button: (\n \n {buttonText}\n \n ),\n\n modal: renderModalPopup\n };\n}\n\n/**\n * Handler for find in store button.\n * @param props - BuyBox data.\n * @param state - BuyBox state.\n * @param callbacks - BuyBox callbacks.\n * @returns - Promise.\n */\nasync function findInStoreOnClick(props: IBuyboxProps, state: IBuyboxState, callbacks: IBuyboxCallbacks): Promise {\n const {\n data: {\n storeSelectorStateManager: { result: storeSelectorStateManager },\n cart: { result: cart },\n productAvailableQuantity: { result: productAvailableQuantity }\n },\n resources,\n context,\n modules\n } = props;\n\n const { selectedProduct, quantity } = state;\n\n let dataProduct = props.data.product.result;\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n const retailMulitplePickupMFeatureState = props.data?.featureState?.result?.find(\n (featureState: FeatureState) => featureState.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (selectedProduct) {\n dataProduct = (await selectedProduct) || dataProduct;\n }\n\n if (!dataProduct || !storeSelectorStateManager) {\n return;\n }\n\n const product = dataProduct;\n\n const missingDimensions =\n product.Dimensions &&\n product.Dimensions.filter((dimension: ProductDimension) => !(dimension.DimensionValue && dimension.DimensionValue.Value));\n\n let storeSelectorId: string = '';\n if (modules && Object.keys(modules).length > 0 && modules.storeSelector && modules.storeSelector.length > 0) {\n storeSelectorId = modules.storeSelector[0].id;\n }\n\n if (missingDimensions && missingDimensions.length > 0) {\n if (callbacks.updateErrorState) {\n callbacks.updateErrorState({\n errorHost: 'FINDINSTORE',\n configureErrors: getConfigureErrors(missingDimensions, resources)\n });\n }\n } else {\n storeSelectorStateManager\n .openDialog({\n product,\n id: storeSelectorId,\n parentElementRef: modalCloseButtonReference,\n deliveryOptions: retailMulitplePickupMFeatureState ? props.data.deliveryOptions.result : undefined,\n onLocationSelected: async (orgUnitLocation: OrgUnitLocation, deliveryMode: string) => {\n if (!cart) {\n return Promise.resolve();\n }\n\n const behavior = props.context?.app?.config?.addToCartBehavior;\n\n return cart\n .addProductToCart({ product, count: quantity, location: orgUnitLocation, deliveryMode })\n .then((result: ICartActionResult) => {\n if (result.status === 'FAILED' && result.substatus === 'MAXQUANTITY') {\n callbacks.changeModalOpen(false);\n let productAvailability: ProductAvailableQuantity | undefined;\n if (state.productAvailableQuantity) {\n productAvailability = state.productAvailableQuantity.ProductAvailableQuantity;\n } else if (productAvailableQuantity && ArrayExtensions.hasElements(productAvailableQuantity)) {\n const shippingInventory = productAvailableQuantity.find(\n shipping => shipping.deliveryType === DeliveryMode.pickup\n );\n productAvailability = shippingInventory?.ProductAvailableQuantity;\n } else {\n productAvailability = undefined;\n }\n const failureResult: IAddToCartFailureResult = {\n failureReason: 'CARTACTIONFAILED',\n cartActionResult: { status: result.status, substatus: result.substatus }\n };\n callbacks.updateErrorState({\n errorHost: 'ADDTOCART',\n configureErrors: {},\n otherError: getGenericError(\n failureResult,\n cart,\n resources,\n context,\n product,\n productAvailability,\n orgUnitLocation\n )\n });\n } else {\n callbacks.updateErrorState({\n configureErrors: {}\n });\n const navigationUrl = getUrlSync('cart', context.actionContext);\n if (behavior === undefined || behavior === AddToCartBehavior.goToCart) {\n if (result.status === 'SUCCESS' && navigationUrl) {\n window.location.assign(navigationUrl);\n }\n } else if (behavior === AddToCartBehavior.showModal) {\n callbacks.changeModalOpen(true);\n } else if (behavior === AddToCartBehavior.showNotification) {\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n const telemetryContent = getTelemetryObject(\n props.context.request.telemetryPageName!,\n props.friendlyName,\n props.telemetry\n );\n const dialogStrings: IAddToCartResources = {\n goToCartText: resources.buyBoxGoToCartText,\n continueShoppingText: resources.buyBoxContinueShoppingText,\n closeNotificationLabel: resources.closeNotificationLabel,\n headerItemOneText: resources.buyBoxSingleItemText,\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\n headerMessageText: resources.buyBoxHeaderMessageText,\n freePriceText: resources.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n addedQuantityText: resources.addedQuantityText\n };\n const notification = new ItemSuccessfullyAddedToCartNotification(\n props.context,\n dialogStrings,\n defaultImageSettings,\n props.context.request.gridSettings,\n product,\n props.data.productPrice?.result,\n quantity,\n navigationUrl,\n telemetryContent,\n props.id,\n props.typeName\n );\n NotificationsManager.instance().addNotification(notification);\n }\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.exception(error);\n props.telemetry.debug('Unable to add product to cart');\n }\n });\n }\n })\n .catch((error: Error) => {\n if (props.telemetry) {\n props.telemetry.error(error.message);\n props.telemetry.debug('Unable to find in store');\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 { getCatalogId, ICoreContext, msdyn365Commerce } from '@msdyn365-commerce/core-internal';\nimport {\n CommerceProperty,\n ProductCatalog,\n ProductDeliveryOptions,\n ProductDimensionValue,\n ProductDimensionValueInventoryAvailability,\n ProductPrice,\n ReleasedProductType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport { BulkPurchase } from '@msdyn365-commerce-modules/bulk-purchase';\nimport {\n ArrayExtensions,\n DeliveryMode,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDeliveryOptionsForSelectedVariant,\n GetDeliveryOptionsForSelectedVariantInput,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getDimensionValuesFromQuery,\n getInventoryLevelCodeFromDimensionValue,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getSelectedVariant,\n IDimensionsApp,\n IDimensionValueForSelectedVariant,\n InventoryLevelValues,\n IProductInventoryInformation,\n IPromiseQueue,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput,\n setDimensionValuesToQuery,\n validateCatalogId\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n updateMaxQuantityForCartLineItem\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport {\n getBuyboxAddToCart,\n getBuyBoxInventoryLabel,\n getBuyboxKeyInPrice,\n getBuyboxProductAddToOrderTemplate,\n getBuyboxProductAddToWishlist,\n getBuyboxProductComparisonButton,\n getBuyboxProductDescription,\n getBuyboxProductPrice,\n getBuyboxProductQuantity,\n getBuyboxProductRating,\n getBuyboxProductTitle,\n getBuyboxProductUnitOfMeasure,\n getBuyboxShopSimilarButton,\n getQuantityLimitsMessages,\n RetailDefaultOrderQuantityLimitsFeatureName,\n EcommerceQuantityLimitConfigurationsFeatureName,\n RevertToSiteBuilderOrderQuantityLimitsSettingsCRTFeatureName\n} from '../../common/buybox-components';\nimport { getBuyboxProductConfigure } from '../../common/buybox-product-configure';\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonData,\n IBuyboxExtentedProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IErrorState,\n ShopSimiliarButtonType\n} from '../../common/buyboxInterface';\nimport { IBuyboxData } from './buybox.data';\nimport { IBuyboxProps, IBuyboxResources } from './buybox.props.autogenerated';\nimport { getBuyboxFindInStore, IBuyboxFindInStoreViewProps } from './components/buybox-find-in-store';\nimport { RecentlyViewedState } from '../recently-viewed';\n\nexport interface IBuyboxViewProps extends IBuyboxProps {\n state: IBuyboxState;\n ModuleProps: IModuleProps;\n ProductInfoContainerProps: INodeProps;\n MediaGalleryContainerProps: INodeProps;\n callbacks: IBuyboxCallbacks;\n mediaGallery?: React.ReactNode;\n title?: React.ReactNode;\n description?: React.ReactNode;\n rating?: React.ReactNode;\n price?: React.ReactNode;\n productComparisonButton?: React.ReactNode;\n bulkPurchaseLink?: React.ReactNode;\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps;\n addToWishlist?: IBuyboxAddToWishlistViewProps;\n min?: number | undefined;\n max: number | undefined;\n addToCart: IBuyboxAddToCartViewProps;\n findInStore?: IBuyboxFindInStoreViewProps;\n quantity?: IBuyboxProductQuantityViewProps;\n configure?: IBuyboxProductConfigureViewProps;\n inventoryLabel?: React.ReactNode;\n shopSimilarLook?: IBuyboxShopSimilarLookViewProps;\n shopSimilarDescription?: IBuyboxShopSimilarLookViewProps;\n quantityLimitsMessages: React.ReactNode;\n telemetryContent?: ITelemetryContent;\n keyInPrice?: IBuyboxKeyInPriceViewProps;\n unitOfMeasure?: React.ReactNode;\n catalogs?: ProductCatalog[] | undefined;\n isChannelMultipleCatalogsFeatureEnabled?: boolean;\n currentCatalogId?: number;\n applyDefaultOrderSettings?: boolean;\n}\n\n/**\n * Buybox Module.\n */\nclass Buybox extends React.PureComponent, IBuyboxState> {\n /**\n * A queue of tasks of processing the changes in the dimensions.\n * Limit to two processes:\n * 1 - for the current process, which is under execution at the moment.\n * 2 - next process, which will process the latest version of data.\n * @remark Enqueueing new promises will discard the previous ones (except the one which is under processing).\n */\n private readonly dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\n\n private dimensions: { [id: number]: string } = {};\n private initializedDimensions: Set = new Set();\n\n private readonly buyboxCallbacks: IBuyboxCallbacks = {\n updateQuantity: (newQuantity: number): boolean => {\n const errorState = { ...this.state.errorState };\n errorState.quantityError = undefined;\n errorState.otherError = undefined;\n\n this.setState({ quantity: newQuantity, errorState });\n return true;\n },\n updateErrorState: (newErrorState: IErrorState): void => {\n this.setState({ errorState: newErrorState });\n },\n updateSelectedProduct: (\n newSelectedProduct: Promise,\n newInventory: IProductInventoryInformation | undefined,\n newPrice: ProductPrice | undefined,\n newDeliveryOptions: ProductDeliveryOptions | undefined\n ): void => {\n this.setState({\n selectedProduct: newSelectedProduct,\n productAvailableQuantity: newInventory,\n productDeliveryOptions: newDeliveryOptions\n });\n this._updatePrice(newPrice);\n },\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this.initializedDimensions.add(initializedDimension);\n }\n },\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this.dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this.initializedDimensions.size === (this.props.data.product.result?.Dimensions?.length || 0)) {\n return this.dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: unknown) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw error;\n }\n });\n }\n },\n getDropdownName: (dimensionType: number, resources: IBuyboxResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n changeModalOpen: (isModalOpen: boolean): void => {\n this.setState({ modalOpen: isModalOpen });\n },\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n },\n\n /**\n * Update isUpdatingDeliveryOptions state.\n *\n * @param isUpdatingDeliveryOptions - The status of updating delivery options.\n */\n changeUpdatingDeliveryOptions: (isUpdatingDeliveryOptions: boolean): void => {\n this.setState({ isUpdatingDeliveryOptions });\n },\n\n updateKeyInPrice: (customPrice: number): void => {\n // Remove custom amount error when updating the custom price\n const errorState = { ...this.state.errorState };\n errorState.customAmountError = undefined;\n\n this.setState({ isPriceKeyedIn: true, keyInPriceAmount: customPrice, errorState });\n this._updatePrice(this.state.productPrice, customPrice);\n }\n };\n\n private readonly telemetryContent: ITelemetryContent;\n\n public constructor(props: IBuyboxProps, state: IBuyboxState) {\n super(props);\n this.state = {\n errorState: {\n configureErrors: {}\n },\n quantity: 1,\n min: undefined,\n max: undefined,\n selectedProduct: undefined,\n productPrice: undefined,\n productDeliveryOptions: undefined,\n\n modalOpen: false,\n isUpdatingDimension: false,\n isUpdatingDeliveryOptions: false,\n isPriceApiCalled: false\n };\n this.telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n }\n\n public async componentDidMount(): Promise {\n const {\n data: {\n product: { result: product },\n productPrice\n },\n context\n } = this.props;\n\n // There are multiple sources triggering the callback function dimensionSelectedAsync calling the GetActivePrice api before componentDidMount and after componentDidMount.\n // Set isPriceApiCalled to false here to prevent redundant API call after componentDidMount:\n // If the price has not been hydrated before, this means the component was just loaded for the first time with variant selected.\n // We will skip calling RS API in this case as the price data has already been fetched via module data action in node server.\n\n const matchedDimensions = getDimensionValuesFromQuery(this.props.context.request.url.requestUrl);\n\n // Set isPriceApiCalled to false only when variant is there\n if (matchedDimensions.length > 0) {\n this.setState({ isPriceApiCalled: false });\n } else {\n this.setState({ isPriceApiCalled: true });\n }\n\n productPrice.then(async result => {\n this._updatePrice(result);\n });\n\n if (product) {\n // Check if the product is service or not by product type\n if (product.ItemTypeValue === ReleasedProductType.Service) {\n this.setState({ isServiceItem: true });\n }\n await this._updateQuantitiesInState(product);\n }\n\n if (product && context.app.config.maxRecentlyViewedItemsCount > 0) {\n RecentlyViewedState.instance(this.props.context, context.app.config.maxRecentlyViewedItemsCount, product.RecordId);\n }\n }\n\n public render(): JSX.Element | null {\n const {\n slots: { mediaGallery, productComparisonButton },\n data: {\n product: { result: product }\n },\n config: { className = '' }\n } = this.props;\n\n const { min, max } = this.state;\n\n if (!product) {\n this.props.context.telemetry.error('Product content is empty, module wont render');\n return null;\n }\n\n const props = this.props as IBuyboxExtentedProps;\n const defaultMinimumKeyInPrice = 10;\n const defaultMaximumKeyInPrice = 100;\n\n const context = this.props.context as ICoreContext;\n const inventoryLevel = context.app.config.inventoryLevel;\n const dimensionValuesWithInventory = ArrayExtensions.flatten(\n ArrayExtensions.validValues(this.props.data.productDimensions.result?.map(value => value.dimensionValuesWithInventory))\n );\n const applyDefaultOrderSettings =\n (this.props.data.featureState?.result?.find(featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName)\n ?.IsEnabled ??\n false) &&\n (this.props.data.cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false);\n const hasAvailableProducts =\n !ArrayExtensions.hasElements(dimensionValuesWithInventory) ||\n dimensionValuesWithInventory.some((value: unknown) => {\n const inventoryLevelCode = getInventoryLevelCodeFromDimensionValue(\n value as ProductDimensionValueInventoryAvailability,\n inventoryLevel\n );\n return inventoryLevelCode !== InventoryLevelValues.outOfStock;\n });\n const catalogId = getCatalogId(this.props.context.request);\n validateCatalogId(catalogId);\n\n const viewProps: IBuyboxViewProps = {\n ...(this.props as IBuyboxProps),\n state: this.state,\n mediaGallery: mediaGallery && mediaGallery.length > 0 ? mediaGallery[0] : undefined,\n ModuleProps: {\n moduleProps: this.props,\n className: classnames('ms-buybox', className)\n },\n ProductInfoContainerProps: {\n className: 'ms-buybox__content'\n },\n MediaGalleryContainerProps: {\n className: 'ms-buybox__media-gallery'\n },\n telemetryContent: this.telemetryContent,\n callbacks: this.buyboxCallbacks,\n title: getBuyboxProductTitle(props),\n description: getBuyboxProductDescription(props),\n bulkPurchaseLink: this._renderBuyboxBulkPurchaseLink(),\n unitOfMeasure: getBuyboxProductUnitOfMeasure(props),\n configure: getBuyboxProductConfigure(props, this.state, this.buyboxCallbacks),\n findInStore: getBuyboxFindInStore(this.props, this.state, this.buyboxCallbacks),\n price: getBuyboxProductPrice(props, this.state),\n addToCart: getBuyboxAddToCart(\n props,\n this.state,\n this.buyboxCallbacks,\n defaultMinimumKeyInPrice,\n defaultMaximumKeyInPrice,\n undefined,\n hasAvailableProducts\n ),\n productComparisonButton: ArrayExtensions.hasElements(productComparisonButton)\n ? getBuyboxProductComparisonButton(\n productComparisonButton[0],\n product,\n getCatalogId(this.props.context.request),\n this.state\n )\n : undefined,\n addToOrderTemplate: getBuyboxProductAddToOrderTemplate(\n props,\n this.state,\n this.buyboxCallbacks,\n this._isChannelMultipleCatalogsFeatureEnabled(),\n catalogId\n ),\n addToWishlist: getBuyboxProductAddToWishlist(props, this.state, this.buyboxCallbacks),\n rating: !props.context.app.config.hideRating && getBuyboxProductRating(props),\n quantity: product.IsGiftCard ? undefined : getBuyboxProductQuantity(props, this.state, this.buyboxCallbacks),\n inventoryLabel: getBuyBoxInventoryLabel(props),\n shopSimilarLook:\n this.props.config.enableShopSimilarLooks && !product.IsGiftCard\n ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Looks)\n : undefined,\n shopSimilarDescription:\n this.props.config.enableShopSimilarDescription && !product.IsGiftCard\n ? getBuyboxShopSimilarButton(props, ShopSimiliarButtonType.Description)\n : undefined,\n keyInPrice:\n this.props.config.enableKeyInPrice && this.state.isCustomPriceSelected\n ? getBuyboxKeyInPrice(props, this.state, this.buyboxCallbacks)\n : undefined,\n quantityLimitsMessages: getQuantityLimitsMessages(props, this.state),\n min: applyDefaultOrderSettings ? min : 1,\n max,\n applyDefaultOrderSettings: applyDefaultOrderSettings,\n isChannelMultipleCatalogsFeatureEnabled: this._isChannelMultipleCatalogsFeatureEnabled(),\n currentCatalogId: catalogId,\n catalogs: this._validateCatalogDetails(catalogId)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n /**\n * Handles anchor click event and scrolls to the given bulk purchase module.\n * @param bulkPurchaseModule - Bulk purchase module.\n * @returns Handler.\n */\n private readonly _onBulkPurchaseLinkClick = (bulkPurchaseModule: Element) => () => {\n const boundingRect = bulkPurchaseModule.getBoundingClientRect();\n const scrollX = boundingRect.left + window.pageXOffset;\n const scrollY = boundingRect.top + window.pageYOffset;\n\n window.scrollTo(scrollX, scrollY);\n };\n private readonly _isChannelMultipleCatalogsFeatureEnabled = (): boolean => {\n let isMultipleCatalogFeatureEnabledInHq = false;\n if (this.props.data.featureState) {\n isMultipleCatalogFeatureEnabledInHq =\n this.props.data.featureState.result?.find(\n feature => feature.Name === 'Dynamics.AX.Application.ChannelMultipleCatalogsFeature'\n )?.IsEnabled || false;\n }\n return isMultipleCatalogFeatureEnabledInHq;\n };\n\n private _renderBuyboxBulkPurchaseLink(): React.ReactNode {\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Temporary switch for the feature which is under development.\n if (!this.props.context.app.config.isBulkPurchaseEnabled) {\n return null;\n }\n\n if (!msdyn365Commerce.isBrowser) {\n return null;\n }\n\n const bulkPurchaseModules = Array.from(document.getElementsByClassName(BulkPurchase.className));\n\n if (!ArrayExtensions.hasElements(bulkPurchaseModules)) {\n return null;\n }\n\n return (\n \n {this.props.resources.bulkPurchaseLinkText}\n \n );\n }\n\n private _updatePrice(newPrice: ProductPrice | undefined, customPrice: number | undefined = this.state.keyInPriceAmount): void {\n if (this.state.isCustomPriceSelected && newPrice) {\n newPrice.CustomerContextualPrice = customPrice;\n }\n this.setState({ productPrice: newPrice });\n }\n\n private _getProductVariant(dimensionsToUpdate: { [id: number]: string }) {\n const {\n data: {\n product: { result: product }\n },\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n\n const productDimensions = this.props.data.productDimensions.result!;\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n .map(dimension => {\n const dimensions = (dimension.dimensionValuesWithInventory ??\n dimension.DimensionValues ??\n []) as IDimensionValueForSelectedVariant[];\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n dimensions.find(\n value => value.DimensionValue?.RecordId.toString() === dimensionsToUpdate[dimension.DimensionTypeValue]\n )?.DimensionValue ?? dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => dimension.DimensionValue);\n setDimensionValuesToQuery(this.props.context.actionContext.requestContext.url.requestUrl, mappedDimensions);\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n const selectedProductPromise = getSelectedVariant(\n new SelectedVariantInput(\n product!.MasterProductId ? product!.MasterProductId : product!.RecordId,\n channelId,\n undefined,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n this.setState({ selectedProduct: selectedProductPromise });\n\n return { productVariantPromise: selectedProductPromise, mappedDimensions };\n }\n\n private readonly _updateDimensions = async (): Promise => {\n const product = this.props.data.product.result;\n\n const productDimensions = this.props.data.productDimensions.result;\n\n const hasProductDimensions = ArrayExtensions.hasElements(productDimensions);\n\n if (!product || !hasProductDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this.dimensions };\n\n this.setState({ isUpdatingDimension: true, isUpdatingDeliveryOptions: true });\n\n // Step 1: Clear error state to display relevant errors\n if (this.state.errorState.otherError || this.state.errorState.quantityError) {\n const clearErrorState = { ...this.state.errorState };\n clearErrorState.otherError = undefined;\n if (this.state.errorState.errorHost === 'ADDTOCART') {\n clearErrorState.quantityError = undefined;\n clearErrorState.errorHost = undefined;\n }\n this.setState({ errorState: clearErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const key of Object.keys(dimensionsToUpdate)) {\n if (this.state.errorState.configureErrors[key]) {\n this.setState(previousState => {\n const errorState = previousState.errorState;\n errorState.configureErrors[key] = undefined;\n return { errorState };\n });\n }\n }\n\n const data = this._getProductVariant(dimensionsToUpdate);\n const productVariant: SimpleProduct | null = await data.productVariantPromise;\n\n if (!productVariant) {\n return;\n }\n\n const promises: Promise[] = [\n this._getDimensionsForSelectedVariant(productVariant, data.mappedDimensions),\n this._hydrateInventoryInfo(productVariant),\n this._hydratePrice(productVariant),\n this._hydrateDeliveryOptions(productVariant),\n this._updateQuantitiesInState(productVariant)\n ];\n\n await Promise.all(promises);\n };\n\n private async _getDimensionsForSelectedVariant(\n productVariant: SimpleProduct,\n mappedDimensions: {\n /* eslint-disable @typescript-eslint/naming-convention -- Retail proxy values */\n DimensionTypeValue: number;\n DimensionValue: ProductDimensionValue | undefined;\n ExtensionProperties: CommerceProperty[] | undefined;\n /* eslint-enable @typescript-eslint/naming-convention -- Retail proxy values */\n }[]\n ): Promise {\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n productVariant.MasterProductId ? productVariant.MasterProductId : productVariant.RecordId,\n this.props.context.request.apiSettings.channelId,\n mappedDimensions,\n this.props.context.request\n ),\n this.props.context.actionContext\n );\n }\n\n private async _hydrateInventoryInfo(productVariant: SimpleProduct): Promise {\n // Step 5. Use these dimensions hydrate the inventory. Wrap this in a promise\n // so that places like add to cart can await it\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(\n new ProductAvailabilitiesForSelectedVariantInput(\n productVariant.RecordId,\n this.props.context.request.apiSettings.channelId,\n productVariant\n ),\n this.props.context.actionContext\n );\n\n const newShippingQuantity = newAvailableQuantity?.find(\n // @ts-expect-error\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n (shipping: { deliveryType: any }) => shipping.deliveryType === DeliveryMode.shipping\n );\n const isCustomPriceSelected = productVariant.Dimensions?.find(\n dimension =>\n dimension.DimensionTypeValue === 4 && dimension.DimensionValue && dimension.DimensionValue.Value?.toLowerCase() === 'custom'\n );\n if (isCustomPriceSelected) {\n this.setState({ isCustomPriceSelected: true });\n } else {\n this.setState(previousState => {\n const errorState = previousState.errorState;\n errorState.customAmountError = undefined;\n return { isCustomPriceSelected: false, isPriceKeyedIn: false, errorState };\n });\n }\n\n if (newShippingQuantity) {\n this.setState({ productAvailableQuantity: newShippingQuantity });\n } else {\n this.setState({ productAvailableQuantity: undefined });\n }\n }\n\n private async _hydratePrice(productVariant: SimpleProduct): Promise {\n // This function is invoked when dimensionSelectedAsync get called.\n // If the price has not been hydrated before, this means the component was just loaded for the first time with variant selected.\n // We will skip calling RS API in this case as the price data has already been fetched via module data action in node server.\n if (!this.state.isPriceApiCalled) {\n this.setState({ isPriceApiCalled: true });\n return;\n }\n\n // Step 6. Use these dimensions hydrate the product price.\n const newPrice = await getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(productVariant.RecordId, this.props.context.request.apiSettings.channelId, productVariant),\n this.props.context.actionContext\n );\n\n if (newPrice) {\n this._updatePrice(newPrice);\n }\n }\n\n private async _hydrateDeliveryOptions(productVariant: SimpleProduct): Promise {\n const retailMultiplePickupFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n\n // Step 7. Use these dimensions hydrate the product delivery options.\n const newDeliveryOptions = await getDeliveryOptionsForSelectedVariant(\n new GetDeliveryOptionsForSelectedVariantInput(\n productVariant.RecordId,\n this.props.context.request.apiSettings.channelId,\n productVariant,\n undefined,\n retailMultiplePickupFeatureState?.IsEnabled\n ),\n this.props.context.actionContext\n );\n\n if (newDeliveryOptions) {\n this.setState({ productDeliveryOptions: newDeliveryOptions });\n }\n }\n\n private async _updateQuantitiesInState(product: SimpleProduct): Promise {\n const isOrderQuantityLimitsFeatureEnabled = await this._isOrderQuantityLimitsFeatureEnabled();\n const isChannelLimitsFeatureEnabled = await this._isChannelLimitsFeatureEnabled();\n\n const min: number = this._getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n isChannelLimitsFeatureEnabled || isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(product, isOrderQuantityLimitsFeatureEnabled);\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isOrderQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MinimumQuantity &&\n product.Behavior.MinimumQuantity > 0\n ) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MaximumQuantity &&\n product.Behavior.MaximumQuantity > 0\n ) {\n return product.Behavior.MaximumQuantity;\n }\n\n return updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem);\n }\n\n /**\n * Retrieves the value of the IgnoreOrderSettings property from the cart configuration.\n * If the property is not present, it defaults to false.\n * @returns {boolean} The value of the IgnoreOrderSettings property.\n */\n private _getIgnoreOrderSettings(): boolean {\n const cartConfiguration = this.props.data.cartConfiguration;\n return !(cartConfiguration?.result?.IgnoreOrderSettings ?? false);\n }\n\n private _getQuantity(product: SimpleProduct, isOrderQuantityLimitsFeatureEnabled: boolean): number {\n const { quantity } = this.state;\n let defaultQuantity = 1;\n\n if (quantity !== defaultQuantity || !isOrderQuantityLimitsFeatureEnabled) {\n return quantity;\n }\n\n const cartConfiguration = this.props.data.cartConfiguration;\n const applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n if (!applyDefaultOrderSettingsForCartLine) {\n return quantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n private readonly _getDropdownName = (dimensionType: number, resources: IBuyboxResources): string => {\n const isGiftCard = this.props.data.product.result?.IsGiftCard;\n\n switch (dimensionType) {\n case 1: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case 2: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case 4: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private async _isOrderQuantityLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName\n )?.IsEnabled;\n if (!isFeatureEnabledInHq) {\n return false;\n }\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === RevertToSiteBuilderOrderQuantityLimitsSettingsCRTFeatureName\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n let customerInfo;\n try {\n customerInfo = await this.props.data.customerInformation;\n } catch (error) {\n this.props.telemetry.information(error);\n this.props.telemetry.debug('Unable to receive Customer Information. May be user is not authorized');\n return false;\n }\n\n return (\n customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private _validateCatalogDetails(catalogId: number): ProductCatalog[] | undefined {\n const catalogs = this.props.data.catalogs?.result?.filter(item => item.RecordId === catalogId);\n if (ArrayExtensions.hasElements(catalogs) && catalogs[0].RecordId === 0) {\n return;\n }\n\n return catalogs;\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n}\n\nexport default Buybox;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IRequestContext } from '@msdyn365-commerce/core';\n\n/**\n * Gets correct alt text for image based on configuration of site.\n * @param context Current request context.\n * @param shouldUseCmsAltText Should use CMS alt text.\n * @param productName Product name.\n * @param imageAltText Alt-text from CMS image.\n */\nexport function getAltText(\n context: IRequestContext,\n shouldUseCmsAltText: boolean,\n productName?: string,\n imageAltText?: string\n): string | undefined {\n if (!context?.app?.config?.OmniChannelMedia) {\n return productName;\n }\n if (shouldUseCmsAltText) {\n return imageAltText;\n }\n return productName;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { commerceApiRequest, getCatalogId, IActionContext, IImageData, IImageSettings } from '@msdyn365-commerce/core';\nimport { MediaLocation, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { getMediaLocationsForSelectedVariant, MediaLocationsForSelectedVariantInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { getAltText } from './helper';\n\nexport async function getValidProductImages(\n productId: number,\n channelId: number,\n actionContext: IActionContext,\n imageSettings: IImageSettings,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return Promise.all(mediaLocations.map(async mediaLocation => validateMediaLocaionAsync(mediaLocation, imageSettings))).then(\n pairs => {\n return pairs.filter(pair => pair[1]).map(pair => pair[0]);\n }\n );\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n\n// eslint-disable-next-line @typescript-eslint/no-unused-vars, @typescript-eslint/no-unused-vars-experimental -- .\nasync function validateMediaLocaionAsync(mediaLocation: MediaLocation, imageSettings?: IImageSettings): Promise<[IImageData, boolean]> {\n const imageData = {\n src: mediaLocation.Uri || '',\n altText: mediaLocation.AltText || ''\n };\n\n if (imageData.src === '') {\n return [imageData, false];\n }\n\n return new Promise<[IImageData, boolean]>(resolve => {\n try {\n const http = new XMLHttpRequest();\n http.open('HEAD', imageData.src, true);\n\n http.addEventListener('load', () => {\n resolve([imageData, http.status === 200 || http.status === 201]);\n });\n\n http.addEventListener('error', () => {\n resolve([imageData, false]);\n });\n\n http.send();\n } catch {\n resolve([imageData, false]);\n }\n });\n}\n\n/**\n * Gets product variant images on dimension change of buy-box module for Omni scenario.\n * @param productId Product record id.\n * @param shouldUseCmsAltText Alt-text source to use.\n * @param channelId Current channel id.\n * @param actionContext Current action context.\n * @param productName Product name.\n * @param selectedProduct Currently selected variant product.\n * @returns List of images.\n */\n\nexport async function getProductImages(\n productId: number,\n shouldUseCmsAltText: boolean,\n channelId: number,\n actionContext: IActionContext,\n productName?: string,\n selectedProduct?: SimpleProduct\n): Promise {\n const catalogId = getCatalogId(actionContext.requestContext);\n if (actionContext.requestContext?.params?.isPreview) {\n const response = await commerceApiRequest(actionContext.requestContext, 'msdyn365-ochannel-product-info', 'post', {\n productId: productId,\n channelId: channelId,\n catalogId: catalogId\n });\n if (response.status !== 200) {\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant for preview scenario');\n return [];\n }\n const previewImageData = response?.data as MediaLocation[];\n if (previewImageData) {\n return previewImageData.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n }\n const actionInput = new MediaLocationsForSelectedVariantInput(productId, channelId, selectedProduct, catalogId);\n return getMediaLocationsForSelectedVariant(actionInput, actionContext)\n .then(mediaLocations => {\n if (mediaLocations) {\n return mediaLocations.map(mediaLocation => {\n return {\n src: mediaLocation.Uri ?? '',\n altText: getAltText(actionContext.requestContext, shouldUseCmsAltText, productName, mediaLocation.AltText),\n additionalProperties: mediaLocation.IsApplicableForChildEntities\n ? {\n isApplicableForChildEntities: 'true'\n }\n : undefined\n };\n });\n }\n return [];\n })\n .catch(error => {\n actionContext.telemetry.exception(error);\n actionContext.telemetry.debug('Unable to get Media Locations for Selected Variant');\n return [];\n });\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { ProductDimensionFull } from '@msdyn365-commerce/commerce-entities';\nimport { Carousel, ICarouselProps } from '@msdyn365-commerce/components';\nimport msdyn365Commerce, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport {\n ProductDeliveryOptions,\n ProductDimension,\n ProductDimensionValue,\n ProductPrice,\n ReleasedProductType,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy';\nimport {\n ArrayExtensions,\n convertProductDimensionTypeToDimensionTypes,\n FinitePromiseQueue,\n FinitePromiseQueueError,\n getDeliveryOptionsForSelectedVariant,\n GetDeliveryOptionsForSelectedVariantInput,\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getProductPageUrlSync,\n getSelectedVariant,\n IProductInventoryInformation,\n IPromiseQueue,\n ISelectedProduct,\n ObjectExtensions,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n QueryResultSettingsProxy,\n SelectedVariantInput,\n StringExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IComponentNodeProps,\n IModuleProps,\n IncrementalQuantity,\n INodeProps,\n ISingleSlideCarouselProps,\n isMobile,\n ITelemetryContent,\n KeyCodes,\n Modal,\n ModalBody,\n ModalFooter,\n ModalHeader,\n NodeTag,\n onTelemetryClick,\n SingleSlideCarousel,\n TelemetryConstant,\n updateMaxQuantityForCartLineItem,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { Spinner, SpinnerSize } from 'office-ui-fabric-react';\nimport React, { ReactNode } from 'react';\n\nimport {\n getBuyboxAddToCart,\n getBuyBoxInventoryLabel,\n getBuyboxKeyInPrice,\n getBuyboxProductAddToWishlist,\n getBuyboxProductDescription,\n getBuyboxProductPrice,\n getBuyboxProductRating,\n getBuyboxProductTitle,\n getBuyboxProductUnitOfMeasure,\n getQuantityLimitsMessages,\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonData,\n IBuyboxExtentedProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxState,\n IErrorState,\n IProductDetails,\n RetailDefaultOrderQuantityLimitsFeatureName,\n EcommerceQuantityLimitConfigurationsFeatureName,\n RevertToSiteBuilderOrderQuantityLimitsSettingsCRTFeatureName\n} from '../../common';\nimport { getBuyboxProductConfigure } from '../../common/buybox-product-configure';\nimport { IQuickviewData } from './quickview.data';\nimport { IQuickviewProps, IQuickviewResources } from './quickview.props.autogenerated';\nimport { getProductDetails } from './utilities/get-product-details';\nimport { getProductImages, getValidProductImages } from './utilities/get-valid-product-images';\nimport { RecentlyViewedState } from '../recently-viewed';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\n\n/**\n * QuickView props Interface.\n */\nexport interface IQuickviewViewProps extends IQuickviewProps {\n quickView: IModuleProps;\n quickViewButton: React.ReactNode;\n ModalContainer: IModuleProps;\n ModalHeaderContainer: INodeProps;\n ModalHeaderContent: React.ReactNode;\n ModalFooterContainer: INodeProps;\n ModalBodyContainer: INodeProps;\n cartContainerProps: INodeProps;\n state: IBuyboxState;\n ModuleProps?: IModuleProps;\n ProductInfoContainerProps: INodeProps;\n MediaGalleryContainerProps: INodeProps;\n callbacks?: IBuyboxCallbacks;\n title?: React.ReactNode;\n description?: React.ReactNode;\n configure?: IBuyboxProductConfigureViewProps;\n inventoryLabel?: React.ReactNode;\n rating?: React.ReactNode;\n price?: React.ReactNode;\n addToCart?: IBuyboxAddToCartViewProps;\n addToOrderTemplate?: IBuyboxAddToOrderTemplateViewProps;\n addToWishlist?: IBuyboxAddToWishlistViewProps;\n max: number | undefined;\n keyInPrice?: IBuyboxKeyInPriceViewProps;\n quantity?: IBuyboxProductQuantityViewProps;\n quantityLimitsMessages?: React.ReactNode;\n CarouselProps: INodeProps;\n Thumbnails: IQuickViewThumbnailsViewProps;\n seeDetailsbutton: React.ReactNode;\n isModalOpen: boolean;\n loading?: React.ReactNode;\n unitOfMeasure?: React.ReactNode;\n productDetails?: IProductDetails | undefined;\n isMobileDevice?: boolean;\n}\n\n/**\n * QuickView extend props Interface.\n */\nexport interface IQuickviewExtentedProps extends IQuickviewProps {\n selectedProductId?: number;\n selectedDimensions?: ProductDimension[];\n}\n\n/**\n * QuickView thumbnails props Interface.\n */\nexport interface IQuickViewThumbnailsViewProps {\n ThumbnailsContainerProps: INodeProps;\n SingleSlideCarouselComponentProps: INodeProps;\n items?: IQuickViewThumbnailItemViewProps[];\n}\n\n/**\n * QuickView thumbnail item view props Interface.\n */\nexport interface IQuickViewThumbnailItemViewProps {\n ThumbnailItemContainerProps: INodeProps;\n Picture: React.ReactElement;\n}\n\n/**\n * QuickView state Interface.\n */\nexport interface IQuickViewState extends IBuyboxState {\n isDataLoaded: boolean;\n}\n\n/**\n *\n * Quickview component.\n * @extends {React.Component>}\n */\nclass Quickview extends React.Component, IQuickViewState> {\n /**\n * A queue of tasks of processing the changes in the dimensions.\n * Limit to two processes:\n * 1 - for the current process, which is under execution at the moment.\n * 2 - next process, which will process the latest version of data.\n * @remark Enqueueing new promises will discard the previous ones (except the one which is under processing).\n */\n private readonly dimensionUpdateQueue: IPromiseQueue = new FinitePromiseQueue(2);\n\n private dimensions: { [id: number]: string } = {};\n\n private initializedDimensions: Set = new Set();\n\n private readonly telemetryContent: ITelemetryContent;\n\n private productDetails: IProductDetails | undefined;\n\n private readonly quickViewCallbacks: IBuyboxCallbacks = {\n updateQuantity: (newQuantity: number): boolean => {\n const errorState = { ...this.state.errorState };\n errorState.quantityError = undefined;\n errorState.otherError = undefined;\n\n this.setState({ quantity: newQuantity, errorState });\n return true;\n },\n updateErrorState: (newErrorState: IErrorState): void => {\n this.setState({ errorState: newErrorState });\n },\n updateSelectedProduct: (\n newSelectedProduct: Promise,\n newInventory: IProductInventoryInformation | undefined,\n newPrice: ProductPrice | undefined,\n newDeliveryOptions: ProductDeliveryOptions | undefined\n ): void => {\n this.setState({\n selectedProduct: newSelectedProduct,\n productAvailableQuantity: newInventory,\n productDeliveryOptions: newDeliveryOptions\n });\n this._updatePrice(newPrice);\n },\n initializeDimension: (initializedDimension: string): void => {\n if (initializedDimension) {\n this.initializedDimensions.add(initializedDimension);\n }\n },\n dimensionSelectedAsync: async (selectedDimensionId: number, selectedDimensionValueId: string): Promise => {\n this.dimensions[selectedDimensionId] = selectedDimensionValueId;\n // Only trigger _updateDimensions when all dimensions are initialized\n if (this.initializedDimensions.size === this.productDetails?.product?.Dimensions?.length) {\n return this.dimensionUpdateQueue\n .enqueue(async () => {\n return this._updateDimensions();\n })\n .catch((error: unknown) => {\n // Ignore discarded processes.\n if (error !== FinitePromiseQueueError.ProcessWasDiscardedFromTheQueue) {\n throw error;\n }\n });\n }\n },\n getDropdownName: (dimensionType: number, resources: IQuickviewResources): string => {\n return this._getDropdownName(dimensionType, resources);\n },\n changeModalOpen: (isModalOpen: boolean): void => {\n this._hideQuickViewDialog();\n },\n changeUpdatingDimension: (isUpdatingDimension: boolean): void => {\n this.setState({ isUpdatingDimension });\n },\n updateKeyInPrice: (customPrice: number): void => {\n // Remove custom amount error when updating the custom price\n const errorState = { ...this.state.errorState };\n errorState.customAmountError = undefined;\n\n this.setState({ isPriceKeyedIn: true, keyInPriceAmount: customPrice, errorState });\n this._updatePrice(this.state.productPrice, customPrice);\n }\n };\n\n private readonly defaultGalleryImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=767&h=767&m=8', w: 0, h: 0 },\n sm: { q: 'w=600&h=600&m=8', w: 0, h: 0 },\n md: { q: 'w=600&h=772&m=8', w: 0, h: 0 },\n lg: { q: 'h=772&m=8', w: 0, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n private readonly defaultThumbnailImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=100&m=8', w: 100, h: 0 },\n lg: { q: 'w=100&m=8', w: 100, h: 0 }\n },\n lazyload: true,\n cropFocalRegion: true\n };\n\n public constructor(props: IQuickviewProps) {\n super(props);\n this.state = {\n modalOpen: false,\n quantity: 1,\n min: undefined,\n max: undefined,\n errorState: {\n configureErrors: {}\n },\n selectedProduct: undefined,\n productPrice: undefined,\n productDeliveryOptions: undefined,\n isUpdatingDimension: false,\n activeIndex: 0,\n animating: false,\n mediaGalleryItems: undefined,\n isDataLoaded: false\n };\n\n this._quickViewCloseButtonclick = this._quickViewCloseButtonclick.bind(this);\n this.telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.friendlyName, props.telemetry);\n }\n\n /**\n * React should component udpate function.\n * @param nextProps - Next Props.\n * @param nextState - Next State.\n * @returns Boolean - Whether the module will rerender or not.\n */\n public shouldComponentUpdate(nextProps: IQuickviewProps, nextState: IBuyboxState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className = '' },\n resources\n } = this.props;\n const { max } = this.state;\n const product = this.productDetails?.product ? this.productDetails.product : undefined;\n const props = this.props as IBuyboxExtentedProps;\n const defaultMinimumKeyInPrice = 10;\n const defaultMaximumKeyInPrice = 100;\n const isMobileDevice = isMobile({ variant: VariantType.Viewport, context: this.props.context.request }) === 'xs';\n const viewprops: IQuickviewViewProps = {\n ...(this.props as IQuickviewExtentedProps),\n state: this.state,\n productDetails: this.productDetails,\n isModalOpen: this.state.modalOpen!,\n quickView: {\n moduleProps: this.props,\n className: classnames('ms-quickView', className),\n tag: 'div'\n },\n isMobileDevice,\n quickViewButton: (\n \n ),\n ModalContainer: {\n moduleProps: this.props,\n tag: Modal,\n className: 'ms-quickView__dialog',\n isOpen: this.state.modalOpen,\n 'aria-label': format(resources.quickViewAriaLabel, this.productDetails?.product?.Name),\n toggle: this._quickViewCloseButtonclick,\n modalTransition: { timeout: 0 },\n shouldUpdateFocusToFirstElement: this.state.isDataLoaded\n },\n ModalHeaderContainer: {\n tag: ModalHeader,\n className: 'ms-quickView__header',\n toggle: this._quickViewCloseButtonclick\n },\n ModalFooterContainer: {\n tag: ModalFooter,\n className: 'ms-quickView__footer'\n },\n ModalHeaderContent: '',\n ModalBodyContainer: {\n tag: ModalBody,\n className: 'ms-quickView__body'\n },\n cartContainerProps: {\n className: 'ms-quickView__product-add-to-cart'\n },\n ProductInfoContainerProps: {\n className: 'ms-quickView__content'\n },\n MediaGalleryContainerProps: {\n className: 'ms-quickView__media-gallery'\n },\n seeDetailsbutton: this._renderSeeDetailButton(product),\n loading: !this.state.isDataLoaded && (\n \n ),\n callbacks: this.quickViewCallbacks,\n title: this.state.isDataLoaded && getBuyboxProductTitle(props, this.productDetails),\n description: this.state.isDataLoaded && getBuyboxProductDescription(props, this.productDetails),\n configure: this.state.isDataLoaded\n ? getBuyboxProductConfigure(props, this.state, this.quickViewCallbacks, this.productDetails, this.props.selectedDimensions)\n : undefined,\n price: this.state.isDataLoaded && getBuyboxProductPrice(props, this.state),\n unitOfMeasure: this.state.isDataLoaded && getBuyboxProductUnitOfMeasure(props, this.productDetails),\n rating:\n this.state.isDataLoaded && !this.props.context.app.config.hideRating && getBuyboxProductRating(props, this.productDetails),\n addToCart: this.state.isDataLoaded\n ? getBuyboxAddToCart(\n props,\n this.state,\n this.quickViewCallbacks,\n defaultMinimumKeyInPrice,\n defaultMaximumKeyInPrice,\n this.productDetails\n )\n : undefined,\n keyInPrice:\n this.state.isDataLoaded && this.props.config.enableKeyInPrice && this.state.isCustomPriceSelected\n ? getBuyboxKeyInPrice(props, this.state, this.quickViewCallbacks)\n : undefined,\n quantity: product?.IsGiftCard ? undefined : this._renderQuantity(this.props, this.state, this.quickViewCallbacks),\n inventoryLabel: this.state.isDataLoaded && getBuyBoxInventoryLabel(props, this.productDetails),\n addToWishlist: this.state.isDataLoaded\n ? getBuyboxProductAddToWishlist(props, this.state, this.quickViewCallbacks, this.productDetails)\n : undefined,\n quantityLimitsMessages: this.state.isDataLoaded && getQuantityLimitsMessages(props, this.state),\n max,\n CarouselProps: this._renderCarousel(),\n Thumbnails: this._renderThumbnails()\n };\n\n return this.props.renderView(viewprops) as React.ReactElement;\n }\n\n /**\n * Method to render detail button on quick view.\n * @param product - Simple product object.\n * @returns JSX element.\n */\n private readonly _renderSeeDetailButton = (product: SimpleProduct | undefined): JSX.Element => {\n const { config } = this.props;\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.seeDetails, '');\n const attributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n return (\n \n {config.seeDetailsLinkText}\n \n );\n };\n\n /**\n * Method to return carousel.\n * @returns Node props.\n */\n private readonly _renderCarousel = (): INodeProps => {\n const { config, resources } = this.props;\n let mediaGalleryItems: ReactNode[];\n let keys: (string | undefined)[];\n const galleryImageSettings = config.galleryImageSettings;\n if (galleryImageSettings) {\n galleryImageSettings.cropFocalRegion = true;\n }\n\n if (ArrayExtensions.hasElements(this.state.mediaGalleryItems)) {\n mediaGalleryItems = this.state.mediaGalleryItems.map((item: IImageData, index: number) => {\n return this._renderCarouselItemImageView(item, galleryImageSettings || this.defaultGalleryImageSettings, index);\n });\n keys = [...this.state.mediaGalleryItems.map(item => item.src)];\n } else {\n mediaGalleryItems = [this._renderEmptyImage(galleryImageSettings)];\n keys = ['empty'];\n }\n\n const props: IComponentNodeProps = {\n tag: Carousel,\n className: 'ms-media-gallery__carousel',\n items: mediaGalleryItems,\n activeIndex: this.state.activeIndex ?? 0,\n next: this.next,\n previous: this.previous,\n interval: false,\n directionTextPrev: resources.previousScreenshotFlipperText,\n directionTextNext: resources.nextScreenshotFlipperText,\n indicatorAriaText: resources.ariaLabelForSlide,\n onIndicatorsClickHandler: this.goToIndex,\n handleOnExited: this.onExited,\n handleOnExiting: this.onExiting,\n key: keys\n };\n\n return props;\n };\n\n /**\n * Method to render thumbnails.\n * @returns QuickView Thumbnails view props.\n */\n private readonly _renderThumbnails = (): IQuickViewThumbnailsViewProps => {\n const { config, id, resources } = this.props;\n\n const thumbnailImageSettings = config.thumbnailImageSettings;\n if (thumbnailImageSettings) {\n thumbnailImageSettings.cropFocalRegion = true;\n }\n\n let mediaGalleryItems: IQuickViewThumbnailItemViewProps[];\n let keys: (string | undefined)[];\n if (ArrayExtensions.hasElements(this.state.mediaGalleryItems)) {\n mediaGalleryItems = this.state.mediaGalleryItems.map((item: IImageData, index: number) => {\n return this._getThumbnailItem(\n item,\n thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n index,\n this.state.activeIndex!\n );\n });\n keys = [...this.state.mediaGalleryItems.map(item => item.src)];\n } else {\n mediaGalleryItems = [];\n keys = [];\n }\n\n return {\n ThumbnailsContainerProps: { className: 'ms-media-gallery__thumbnails-container' },\n SingleSlideCarouselComponentProps: {\n tag: SingleSlideCarousel,\n className: 'ms-media-gallery__thumbnails',\n flipperPrevLabel: resources.previousScreenshotFlipperText,\n flipperNextLabel: resources.nextScreenshotFlipperText,\n parentId: id,\n useTabList: true,\n key: JSON.stringify(keys)\n } as IComponentNodeProps,\n items: mediaGalleryItems\n };\n };\n\n private _updateMediaItems(lastUpdatedTime: number): void {\n const product = this.productDetails?.product;\n if (!this.state.mediaGalleryItems && product?.PrimaryImageUrl) {\n this.setState({\n mediaGalleryItems: [this._mapProductToImageData(product)],\n lastUpdate: lastUpdatedTime\n });\n }\n }\n\n private _updatePrice(newPrice: ProductPrice | undefined, customPrice: number | undefined = this.state.keyInPriceAmount): void {\n if (this.state.isCustomPriceSelected && newPrice) {\n newPrice.CustomerContextualPrice = customPrice;\n }\n this.setState({ productPrice: newPrice });\n }\n\n private readonly _updateDimensions = async (): Promise => {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n\n const { product, productDimensions } = this.productDetails!;\n\n if (!product || !productDimensions) {\n return;\n }\n\n const dimensionsToUpdate: { [id: number]: string } = { ...this.dimensions };\n this.setState({ isUpdatingDimension: true });\n\n // Step 1: Clear error state to display relevant errors\n if (this.state.errorState.otherError || this.state.errorState.quantityError) {\n const clearErrorState = { ...this.state.errorState };\n clearErrorState.otherError = undefined;\n if (this.state.errorState.errorHost === 'ADDTOCART') {\n clearErrorState.quantityError = undefined;\n clearErrorState.errorHost = undefined;\n }\n this.setState({ errorState: clearErrorState });\n }\n\n // Step 2: Clear any errors indicating the dimension wasn't selected\n for (const key of Object.keys(dimensionsToUpdate)) {\n if (this.state.errorState.configureErrors[key]) {\n const errorState = { ...this.state.errorState };\n errorState.configureErrors[key] = undefined;\n\n this.setState({ errorState });\n }\n }\n\n // Step 3, Build the actually selected dimensions, prioritizing the information in state\n // over the information in data\n const mappedDimensions = productDimensions\n .map(dimension => {\n return {\n DimensionTypeValue: dimension.DimensionTypeValue,\n DimensionValue:\n this._updateDimensionValue(dimension, dimensionsToUpdate[dimension.DimensionTypeValue]) || dimension.DimensionValue,\n ExtensionProperties: dimension.ExtensionProperties\n };\n })\n .filter(dimension => {\n return dimension && dimension.DimensionValue;\n });\n\n // Step 4. Use these dimensions hydrate the product. Wrap this in a promise\n // so that places like add to cart can await it\n const selectedProduct = new Promise(async resolve => {\n const newProduct = await getSelectedVariant(\n new SelectedVariantInput(\n product.MasterProductId ? product.MasterProductId : product.RecordId,\n channelId,\n mappedDimensions,\n undefined,\n this.props.context.request\n ),\n actionContext\n );\n if (newProduct) {\n // @ts-expect-error\n this.productDetails.productDimensions = await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(\n newProduct.MasterProductId ? newProduct.MasterProductId : newProduct.RecordId,\n channelId,\n mappedDimensions,\n this.props.context.request\n ),\n actionContext\n );\n }\n\n resolve(newProduct);\n });\n\n this.setState({ selectedProduct });\n const variantProduct = await selectedProduct;\n\n if (variantProduct && this.productDetails) {\n // Step 5. Use these dimensions hydrate the inventory. Wrap this in a promise\n // so that places like add to cart can await it\n this.productDetails.product = variantProduct;\n let images: IImageData[] = await this.getImagesForProduct(product, variantProduct);\n images = this._filterMasterImageFromVariant(images, variantProduct);\n this.setState({\n mediaGalleryItems: [...images],\n activeIndex: 0,\n lastUpdate: Date.now()\n });\n\n const newAvailableQuantity = await getProductAvailabilitiesForSelectedVariant(\n new ProductAvailabilitiesForSelectedVariantInput(variantProduct.RecordId, channelId),\n actionContext\n );\n\n this.productDetails.productAvailableQuantity = newAvailableQuantity!;\n\n const isCustompriceSelected = variantProduct.Dimensions?.find(\n dimension => dimension.DimensionTypeValue === 4 && dimension.DimensionValue?.Value?.toLowerCase() === 'custom'\n );\n\n if (isCustompriceSelected) {\n this.setState({ isCustomPriceSelected: true });\n } else {\n // Remove custom amount error when unselect the custom amount\n const errorState = { ...this.state.errorState };\n errorState.customAmountError = undefined;\n\n this.setState({ isCustomPriceSelected: false, isPriceKeyedIn: false, errorState });\n }\n\n if (newAvailableQuantity && newAvailableQuantity.length > 0) {\n this.setState({ productAvailableQuantity: newAvailableQuantity[0] });\n } else {\n this.setState({ productAvailableQuantity: undefined });\n }\n\n // Step 6. Use these dimensions hydrate the product price.\n const newPrice = await getPriceForSelectedVariant(\n new PriceForSelectedVariantInput(variantProduct.RecordId, channelId),\n actionContext\n );\n\n if (newPrice) {\n this._updatePrice(newPrice);\n }\n\n const RetailMulitplePickupMFeatureState = this.props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature'\n );\n\n // Step 7. Use these dimensions hydrate the product delivery options.\n const newDeliveryOptions = await getDeliveryOptionsForSelectedVariant(\n new GetDeliveryOptionsForSelectedVariantInput(\n variantProduct.RecordId,\n channelId,\n undefined,\n undefined,\n RetailMulitplePickupMFeatureState?.IsEnabled\n ),\n actionContext\n );\n\n if (newDeliveryOptions) {\n this.setState({ productDeliveryOptions: newDeliveryOptions });\n }\n\n this.setState({ isUpdatingDimension: false });\n await this._updateQuantitiesInState(variantProduct);\n }\n };\n\n private _getProductURL(product: SimpleProduct | undefined): string {\n if (!product || !msdyn365Commerce.isBrowser) {\n return '';\n }\n\n let productUrl = '';\n productUrl = getProductPageUrlSync(product.Name || '', product.RecordId, this.props.context.actionContext, undefined);\n\n const fullUrl = new URL(productUrl, window.location.href);\n product.Dimensions?.map(dimension => {\n const dimensionValue = dimension.DimensionValue?.Value;\n if (!StringExtensions.isNullOrWhitespace(dimensionValue)) {\n const dimensionName = convertProductDimensionTypeToDimensionTypes(dimension.DimensionTypeValue);\n fullUrl.searchParams.set(dimensionName, dimensionValue!);\n }\n });\n return fullUrl.href;\n }\n\n private shouldUseCmsAltText = (): boolean => {\n if (this.props.config.altTextSource === 'product') {\n return false;\n } else {\n return true;\n }\n };\n\n private async _updateQuantitiesInState(product: SimpleProduct): Promise {\n const isOrderQuantityLimitsFeatureEnabled = await this._isOrderQuantityLimitsFeatureEnabled();\n const isChannelLimitsFeatureEnabled = await this._isChannelLimitsFeatureEnabled();\n\n const min: number = this._getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled, product);\n const max: number = this._getMaxQuantityForCartLineItem(\n isChannelLimitsFeatureEnabled || isOrderQuantityLimitsFeatureEnabled,\n product\n );\n let quantity: number = this._getQuantity(product, isOrderQuantityLimitsFeatureEnabled);\n quantity = Math.max(quantity, min);\n\n this.setState({\n min,\n max,\n quantity\n });\n }\n\n private _getMinQuantityForCartLineItem(isOrderQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isOrderQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MinimumQuantity &&\n product.Behavior.MinimumQuantity > 0\n ) {\n return product.Behavior.MinimumQuantity;\n }\n\n return 1;\n }\n\n private _getMaxQuantityForCartLineItem(isQuantityLimitsFeatureEnabled: boolean, product: SimpleProduct): number {\n if (\n isQuantityLimitsFeatureEnabled &&\n this._getIgnoreOrderSettings() &&\n product?.Behavior?.MaximumQuantity &&\n product.Behavior.MaximumQuantity > 0\n ) {\n return product.Behavior.MaximumQuantity;\n }\n\n return updateMaxQuantityForCartLineItem(this.props.context.app.config.maxQuantityForCartLineItem);\n }\n\n /**\n * Retrieves the value of the IgnoreOrderSettings property from the cart configuration.\n * If the property is not present, it defaults to false.\n * @returns {boolean} The value of the IgnoreOrderSettings property.\n */\n private _getIgnoreOrderSettings(): boolean {\n const cartConfiguration = this.props.data.cartConfiguration;\n return !(cartConfiguration?.result?.IgnoreOrderSettings ?? false);\n }\n\n private _getQuantity(product: SimpleProduct, isOrderQuantityLimitsFeatureEnabled: boolean): number {\n const { quantity } = this.state;\n let defaultQuantity = 1;\n\n if (quantity !== defaultQuantity || !isOrderQuantityLimitsFeatureEnabled) {\n return quantity;\n }\n\n const cartConfiguration = this.props.data.cartConfiguration;\n const applyDefaultOrderSettingsForCartLine = cartConfiguration?.result?.ValidateDefaultOrderSettingsPerLine ?? false;\n if (!applyDefaultOrderSettingsForCartLine) {\n return quantity;\n }\n\n if (product?.Behavior?.DefaultQuantity && product.Behavior.DefaultQuantity > 0) {\n defaultQuantity = product.Behavior.DefaultQuantity;\n }\n\n return defaultQuantity;\n }\n\n private _filterMasterImageFromVariant(images?: IImageData[], product?: ISelectedProduct | null): IImageData[] {\n const shouldHidePrimaryImages = this.props.config.shouldHideMasterProductImagesForVariant ?? true;\n let variantImages = images ?? [];\n const isVariantProduct =\n !ObjectExtensions.isNullOrUndefined(product?.MasterProductId) || !ObjectExtensions.isNullOrUndefined(product?.productVariant);\n const itemId = product?.ItemId;\n if (shouldHidePrimaryImages && isVariantProduct && itemId) {\n variantImages = variantImages.filter(item => {\n const isApplicableForChildEntities = item.additionalProperties?.isApplicableForChildEntities;\n return !isApplicableForChildEntities;\n });\n if (!ArrayExtensions.hasElements(variantImages)) {\n variantImages = images ?? [];\n }\n }\n return variantImages;\n }\n\n private readonly _updateDimensionValue = (\n productDimensionFull: ProductDimensionFull,\n newValueId: string | undefined\n ): ProductDimensionValue | undefined => {\n if (newValueId && productDimensionFull.DimensionValues) {\n return productDimensionFull.DimensionValues.find(dimension => dimension.RecordId === +newValueId);\n }\n\n return undefined;\n };\n\n private readonly _getDropdownName = (dimensionType: number, resources: IQuickviewResources): string => {\n const isGiftCard = this.productDetails?.product?.IsGiftCard;\n\n switch (dimensionType) {\n case 1: // ProductDimensionType.Color\n return resources.productDimensionTypeColor;\n case 2: // ProductDimensionType.Configuration\n return resources.productDimensionTypeConfiguration;\n case 3: // ProductDimensionType.Size\n return resources.productDimensionTypeSize;\n case 4: // ProductDimensionType.Style\n return isGiftCard ? resources.productDimensionTypeAmount : resources.productDimensionTypeStyle;\n default:\n return '';\n }\n };\n\n private async _isOrderQuantityLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === RetailDefaultOrderQuantityLimitsFeatureName\n )?.IsEnabled;\n if (!isFeatureEnabledInHq) {\n return false;\n }\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === RevertToSiteBuilderOrderQuantityLimitsSettingsCRTFeatureName\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n if (defaultOrderQuantityLimitsFeatureConfig === 'none') {\n return false;\n }\n\n if (defaultOrderQuantityLimitsFeatureConfig === 'all') {\n return true;\n }\n let customerInfo;\n try {\n customerInfo = await this.props.data.customerInformation;\n } catch (error) {\n this.props.telemetry.information(error);\n this.props.telemetry.debug('Unable to receive Customer Information. May be user is not authorized');\n return false;\n }\n\n return (\n customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && customerInfo.IsB2b) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !customerInfo.IsB2b))\n );\n } else {\n const cartConfiguration = await this.props.data.cartConfiguration;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n }\n\n private async _isChannelLimitsFeatureEnabled(): Promise {\n const featureStatuses = await this.props.data.featureState;\n\n const isChannelLimitsFeatureEnabledInHq = featureStatuses?.find(\n featureState => featureState.Name === EcommerceQuantityLimitConfigurationsFeatureName\n )?.IsEnabled;\n\n return isChannelLimitsFeatureEnabledInHq ?? false;\n }\n\n private readonly onExiting = () => {\n this.setState({ animating: true });\n };\n\n private readonly onExited = () => {\n this.setState({ animating: false });\n };\n\n private readonly next = (): void => {\n if (this.isLastItem() === undefined) {\n return;\n }\n\n const nextIndex = this.isLastItem() ? 0 : this.state.activeIndex! + 1;\n this.goToIndex(nextIndex);\n };\n\n private readonly previous = (): void => {\n const nextIndex = this.isFirstItem()\n ? this.state.mediaGalleryItems\n ? this.state.mediaGalleryItems.length - 1\n : 0\n : this.state.activeIndex! - 1;\n this.goToIndex(nextIndex);\n };\n\n private readonly goToIndex = (index: number): void => {\n this.setState({ activeIndex: index });\n };\n\n private _renderCarouselItemImageView(image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode {\n return <>{this._getCarouselItem(image, imageSettings, index)};\n }\n\n private readonly _getCarouselItem = (image: IImageData, imageSettings: IImageSettings, index: number): React.ReactNode => (\n \n );\n\n private readonly _getThumbnailItem = (\n image: IImageData,\n imageSettings: IImageSettings,\n index: number,\n modifiedActiveIndex: number\n ): IQuickViewThumbnailItemViewProps => {\n const classes = classnames(\n 'ms-media-gallery__thumbnail-item',\n modifiedActiveIndex === index ? 'ms-media-gallery__thumbnail-item-active' : ''\n );\n\n return {\n ThumbnailItemContainerProps: {\n tag: 'li' as NodeTag,\n className: classes,\n role: 'tab',\n tabIndex: 0,\n key: index,\n 'aria-label': image.altText,\n 'aria-selected': modifiedActiveIndex === index,\n 'aria-controls': `${this.props.id}__carousel-item__${index}`,\n onClick: this._generateOnThumbnailClick(index),\n onKeyDown: this._generateOnThumbnailKeyDown(index)\n },\n Picture: (\n \n )\n };\n };\n\n private readonly _generateOnThumbnailKeyDown = (index: number) => {\n return (event: React.KeyboardEvent) => {\n if (event.which === KeyCodes.Enter || event.which === KeyCodes.Space) {\n event.preventDefault();\n this.goToIndex(index);\n }\n };\n };\n\n private readonly _generateOnThumbnailClick = (index: number) => {\n return (event: React.MouseEvent) => {\n event.preventDefault();\n this.goToIndex(index);\n };\n };\n\n private _mapProductToImageData(product: SimpleProduct): IImageData {\n return {\n src: product.PrimaryImageUrl || '',\n altText: product.Name\n };\n }\n\n private readonly isFirstItem = () => this.state.activeIndex === 0;\n\n private readonly isLastItem = () => this.state.mediaGalleryItems && this.state.activeIndex === this.state.mediaGalleryItems.length - 1;\n\n private readonly onClickHandler = async (event: React.MouseEvent) => {\n return this._onClick(event, this.props);\n };\n\n private readonly _onClick = async (_event: React.MouseEvent, props: IQuickviewExtentedProps) => {\n if (!ObjectExtensions.isNullOrUndefined(props.selectedProductId)) {\n const {\n context: {\n actionContext,\n request: {\n apiSettings: { channelId }\n }\n }\n } = this.props;\n\n if (this.props.selectedProductId) {\n this.setState({ modalOpen: true });\n const productId = this.props.selectedProductId;\n const selectedDimensions = this.props.selectedDimensions;\n this.productDetails = await getProductDetails(productId, channelId, actionContext, selectedDimensions);\n const { product, productPrice } = this.productDetails;\n const currentTime: number = Date.now();\n this._updateMediaItems(currentTime);\n if (productPrice) {\n this._updatePrice(productPrice);\n }\n\n if (product) {\n const { context } = this.props;\n if (context.app.config.maxRecentlyViewedItemsCount > 0) {\n RecentlyViewedState.instance(this.props.context, context.app.config.maxRecentlyViewedItemsCount, product.RecordId);\n }\n // Check if the product is service or not by product type\n if (product.ItemTypeValue === ReleasedProductType.Service) {\n this.setState({ isServiceItem: true });\n }\n await this._updateQuantitiesInState(product);\n let images = await this.getImagesForProduct(product, product);\n images = this._filterMasterImageFromVariant(images);\n this.setState({\n mediaGalleryItems: [...images],\n activeIndex: 0,\n lastUpdate: currentTime\n });\n // update product delivery options on product on quickview popUp load\n const newDeliveryOptions = await getDeliveryOptionsAsync(\n {\n callerContext: this.props.context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(\n this.props.context.actionContext\n )\n },\n [this.props.selectedProductId]\n );\n if (newDeliveryOptions && newDeliveryOptions.length > 0) {\n this.setState({ productDeliveryOptions: newDeliveryOptions[0] });\n }\n }\n this.setState({ isDataLoaded: true });\n }\n }\n };\n\n private getImagesForProduct = async (product: ISelectedProduct, variantProduct: ISelectedProduct): Promise => {\n let images: IImageData[];\n if (this.props.context.app?.config?.OmniChannelMedia) {\n images = await getProductImages(\n product.RecordId,\n this.shouldUseCmsAltText(),\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n product.Name,\n product.productVariant ?? variantProduct\n );\n } else {\n images = await getValidProductImages(\n product.RecordId || 0,\n +this.props.context.request.apiSettings.channelId,\n this.props.context.actionContext,\n this.props.config.thumbnailImageSettings ?? this.defaultThumbnailImageSettings,\n product.productVariant ?? variantProduct\n );\n }\n return images;\n };\n\n private readonly _quickViewCloseButtonclick = () => {\n this._hideQuickViewDialog();\n };\n\n private _hideQuickViewDialog(): void {\n this.dimensions = [];\n this.setState({\n modalOpen: false,\n quantity: 1,\n min: undefined,\n max: undefined,\n errorState: {\n configureErrors: {}\n },\n selectedProduct: undefined,\n productPrice: undefined,\n productDeliveryOptions: undefined,\n isUpdatingDimension: false,\n productAvailableQuantity: undefined,\n lastUpdate: undefined,\n activeIndex: undefined,\n animating: undefined,\n mediaGalleryItems: [],\n isDataLoaded: false\n });\n }\n\n /**\n * Quantity Change Handler.\n * @param callbacks -Buybox callbacks.\n * @returns Update quantity.\n */\n private readonly onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\n if (callbacks.updateQuantity) {\n return callbacks.updateQuantity(newValue);\n }\n return true;\n };\n\n private readonly _renderQuantity = (\n props: IQuickviewExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n ): IBuyboxProductQuantityViewProps => {\n const { resources } = props;\n\n const {\n quantity,\n min,\n max,\n errorState: { quantityError }\n } = state;\n\n return {\n ContainerProps: {\n className: 'ms-quickView__quantity'\n },\n LabelContainerProps: {\n tag: 'label',\n className: 'ms-quickView__product-quantity-label',\n htmlFor: 'ms-quickView__product-quantity-input'\n },\n heading:
{resources.productQuantityHeading}
,\n errors: quantityError && (\n \n \n ),\n input: (\n \n )\n };\n };\n\n private _renderEmptyImage(imageSettings: IImageSettings | undefined): React.ReactNode {\n return (\n
\n \n
\n );\n }\n}\nexport default Quickview;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IActionContext } from '@msdyn365-commerce/core';\nimport { getCartStateData, GetCartStateDataInput } from '@msdyn365-commerce/global-state';\nimport { ProductDimension } from '@msdyn365-commerce/retail-proxy';\nimport {\n getDimensionsForSelectedVariant,\n GetDimensionsForSelectedVariantInput,\n getPriceForSelectedVariant,\n getProductAvailabilitiesForSelectedVariant,\n getRatingsSummary,\n GetRatingsSummaryInput,\n getRnrEndpointId,\n getRnrPartnerId,\n getSelectedVariant,\n PriceForSelectedVariantInput,\n ProductAvailabilitiesForSelectedVariantInput,\n SelectedVariantInput\n} from '@msdyn365-commerce-modules/retail-actions';\n\nimport { IProductDetails } from '../../../common/buyboxInterface';\n\n/**\n * Calls the Retail API and returns the product details.\n * @param productId\n * @param channelId\n * @param ctx\n * @param selectedDimensions - Dimensions previously selected for the product variant.\n */\nexport async function getProductDetails(\n productId: number,\n channelId: number,\n ctx: IActionContext,\n selectedDimensions?: ProductDimension[]\n): Promise {\n const productDetails: IProductDetails = {};\n\n if (productId > 0 && channelId > 0) {\n const tenantId = getRnrPartnerId(ctx);\n const serviceEndPoint = getRnrEndpointId(ctx);\n\n // Get Product Details\n await getSelectedVariant(new SelectedVariantInput(productId, channelId, selectedDimensions, 'get', ctx.requestContext), ctx)\n .then(async productResult => {\n if (productResult) {\n productDetails.product = productResult;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n\n // Get Product Availability\n await getProductAvailabilitiesForSelectedVariant(new ProductAvailabilitiesForSelectedVariantInput(productId, channelId), ctx)\n .then(productAvailabilities => {\n if (productAvailabilities) {\n productDetails.productAvailableQuantity = productAvailabilities;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n\n // Get Product Price\n await getPriceForSelectedVariant(new PriceForSelectedVariantInput(productId, channelId, undefined), ctx)\n .then(productPrice => {\n if (productPrice) {\n productDetails.productPrice = productPrice;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n\n // Get product dimensions\n await getDimensionsForSelectedVariant(\n new GetDimensionsForSelectedVariantInput(productId, channelId, selectedDimensions, ctx.requestContext),\n ctx\n )\n .then(productDimensions => {\n if (productDimensions) {\n productDetails.productDimensions = productDimensions;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n\n // Get Cart State\n await getCartStateData(new GetCartStateDataInput(ctx.requestContext.apiSettings, ctx.requestContext), ctx)\n .then(cartState => {\n productDetails.cart = cartState;\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n\n // Get Product Ratings\n if (tenantId && serviceEndPoint) {\n await getRatingsSummary(new GetRatingsSummaryInput(productId.toString(), tenantId, serviceEndPoint), ctx)\n .then(ratingsSummaryData => {\n if (ratingsSummaryData) {\n productDetails.ratingsSummary = ratingsSummaryData;\n }\n })\n .catch(error => {\n ctx.telemetry.exception(error);\n });\n }\n }\n\n return productDetails;\n}\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxShopSimilarLookViewProps\n} from '../../common';\nimport { IBuyboxViewProps } from './buybox';\nimport { IBuyboxFindInStoreViewProps } from './components/buybox-find-in-store';\n\nconst BuyboxView: React.FC = props => {\n const {\n ModuleProps,\n MediaGalleryContainerProps,\n ProductInfoContainerProps,\n addToCart,\n addToOrderTemplate,\n addToWishlist,\n configure,\n description,\n findInStore,\n quantity,\n price,\n title,\n rating,\n inventoryLabel,\n shopSimilarLook,\n keyInPrice,\n shopSimilarDescription,\n unitOfMeasure,\n productComparisonButton\n } = props;\n\n return (\n \n {props.mediaGallery}\n \n {title}\n {price}\n {unitOfMeasure}\n {props.bulkPurchaseLink}\n {description}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity && _renderQuantity(quantity)}\n {inventoryLabel}\n {addToCart && _renderAddToCart(addToCart)}\n {findInStore && _renderFindInStore(findInStore)}\n {addToOrderTemplate && _renderAddToOrderTemplate(addToOrderTemplate)}\n {addToWishlist && _renderAddToWishlist(addToWishlist)}\n {_renderSocialShare(props.slots && props.slots.socialShare)}\n {productComparisonButton}\n {shopSimilarLook && _renderShopSimilarItem(shopSimilarLook)}\n {shopSimilarDescription && _renderShopSimilarItem(shopSimilarDescription)}\n \n \n );\n};\n\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderAddToOrderTemplate = (addToOrderTemplate: IBuyboxAddToOrderTemplateViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToOrderTemplate;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderAddToWishlist = (addToWishlist: IBuyboxAddToWishlistViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToWishlist;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(_renderConfigureDropdown)};\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 _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\nconst _renderQuantity = (quantity: IBuyboxProductQuantityViewProps): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\n\n return (\n \n \n {heading}\n {errors}\n \n {input}\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};\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 { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps\n} from '../../common';\nimport { IQuickviewViewProps } from './quickview';\n\nconst _renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\n \n );\n};\n\nconst _renderAddToWishlist = (addToWishlist: IBuyboxAddToWishlistViewProps): JSX.Element => {\n const { ContainerProps, errorBlock, button } = addToWishlist;\n\n return (\n \n {errorBlock}\n {button}\n \n );\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 _renderQuickViewPopup = (props: IQuickviewViewProps): JSX.Element => {\n const {\n ModalContainer,\n ModalHeaderContainer,\n ModalFooterContainer,\n ModalHeaderContent,\n ModalBodyContainer,\n addToWishlist,\n addToCart,\n cartContainerProps\n } = props;\n\n return (\n \n {ModalHeaderContent}\n {_renderBodyContent(props)}\n \n \n {addToCart && _renderAddToCart(addToCart)}\n {addToWishlist && _renderAddToWishlist(addToWishlist)}\n \n \n \n );\n};\n\nconst _renderQuantity = (quantity: IBuyboxProductQuantityViewProps, quantityLimitsMessages: React.ReactNode): JSX.Element => {\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\n\n return (\n \n \n {heading}\n {errors}\n \n {input}\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 _renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\n const { ContainerProps, dropdowns } = configure;\n\n return {dropdowns.map(_renderConfigureDropdown)};\n};\n\nconst _renderBodyContent = (props: IQuickviewViewProps): JSX.Element => {\n const {\n title,\n price,\n rating,\n keyInPrice,\n quantity,\n configure,\n inventoryLabel,\n quantityLimitsMessages,\n seeDetailsbutton,\n loading,\n ProductInfoContainerProps,\n MediaGalleryContainerProps,\n CarouselProps,\n unitOfMeasure\n } = props;\n if (loading) {\n return <>{loading};\n }\n return (\n <>\n \n \n \n \n {title}\n {price}\n {unitOfMeasure}\n {rating}\n {configure && _renderConfigure(configure)}\n {keyInPrice && _renderKeyInPrice(keyInPrice)}\n {quantity && _renderQuantity(quantity, quantityLimitsMessages)}\n {seeDetailsbutton}\n {inventoryLabel}\n \n \n );\n};\n\n/**\n * Functional component which renders quick view button and popup based by the given props file.\n * @param {IQuickviewViewProps} props - Configuration for the quick view component.\n * @returns {React.FC} - Functional component of the quick view.\n */\nexport const QuickViewFunctionalComponent: React.FC = (props: IQuickviewViewProps) => {\n const { quickView, quickViewButton, isModalOpen, isMobileDevice } = props;\n return (\n \n {!isMobileDevice && quickViewButton}\n {isModalOpen && _renderQuickViewPopup(props)}\n \n );\n};\n\nexport default QuickViewFunctionalComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B } from '@msdyn365-commerce/core';\nimport { AsyncResultStatus, Cart, CartLineValidationResults } from '@msdyn365-commerce/retail-proxy';\nimport {\n updateLineDeliverySpecificationsAsync,\n validateForCheckoutAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct,\n TokenizedPaymentCard\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateManager, IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n ArrayExtensions,\n getAvailabilitiesForCartLineItems,\n IProductInventoryInformation,\n ProductAvailabilitiesForCartLineItems,\n validateCartLinesInventory\n} from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Button,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n IModuleProps,\n INodeProps,\n ITelemetryContent,\n TelemetryConstant,\n Waiting\n} from '@msdyn365-commerce-modules/utilities';\nimport { ErrorCode, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport isEmpty from 'lodash/isEmpty';\nimport { action, computed, get, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutData } from './checkout.data';\nimport { ICheckoutHeadingData, ICheckoutProps } from './checkout.props.autogenerated';\nimport AlertComponent from './components/alert';\nimport { getInvoicePaymentSummary, IInvoicePaymentSummary } from './components/get-invoice-payment-summary';\nimport { getLineItems, ILineItems } from './components/get-line-items';\nimport { getOrderSummary, IOrderSummary } from './components/get-order-summary';\nimport GuidedFormComponent from './components/guided-form';\nimport PlaceOrderButtonComponent from './components/place-order-button';\nimport placeOrder from './methods/place-order';\nimport { focusOnCheckoutError, setCheckoutErrors } from '../../checkout-errors';\nimport { AsyncResultStatusCode, IExpressPaymentDetails } from '../../common';\n\nexport * from './components/get-line-items';\nexport * from './components/get-order-summary';\n\n/**\n * Device type.\n */\ntype DeviceType = 'Mobile';\n\n/**\n * The Checkout state.\n */\ninterface ICheckoutState {\n errorMessage: string;\n isValidationPassed: boolean;\n isPlaceOrderLoading?: boolean;\n isPlaceOrderClicked?: boolean;\n}\n\n/**\n * Known action error failure states\n */\nexport const enum ActionErrorStatus {\n Timeout = 'Timeout',\n HookTimeout = 'Hook Timeout',\n ServiceUnavailable = 'Service Unavailable'\n}\n\n/**\n * The Checkout view props.\n * @extends ICheckoutProps\n */\nexport interface ICheckoutViewProps extends ICheckoutProps {\n className: string;\n canShow?: boolean;\n isEmptyCart?: boolean;\n isConsentGiven?: boolean;\n hasError?: boolean;\n isPaymentVerificationRedirection?: boolean;\n shouldEnableSinglePaymentAuthorizationCheckout?: boolean;\n cartStatus?: string;\n isMobile?: boolean;\n isEditorialMode?: boolean;\n backToShoppingUrl?: string;\n editCartLink?: string;\n hasSalesOrder: boolean;\n hasInvoiceLine?: boolean;\n\n moduleState?: IModuleStateManager;\n telemetryContent?: ITelemetryContent;\n checkoutGuidedFormHasError?: boolean;\n\n checkoutProps: IModuleProps;\n headerProps: INodeProps;\n bodyProps: INodeProps;\n mainProps: INodeProps;\n mainControlProps: INodeProps;\n sideProps: INodeProps;\n sideControlFirstProps: INodeProps;\n sideControlSecondProps: INodeProps;\n termsAndConditionsProps: INodeProps;\n\n guidedForm?: React.ReactNode;\n title?: React.ReactNode;\n loading?: React.ReactNode;\n alert?: React.ReactNode;\n orderSummary?: IOrderSummary;\n invoicePaymentSummary?: IInvoicePaymentSummary;\n lineItems?: ILineItems;\n placeOrderButton?: React.ReactNode;\n termsAndConditions?: React.ReactNode;\n keepShoppingButton?: React.ReactNode;\n orderConfirmation?: React.ReactNode;\n\n checkoutExpressPaymentContainer?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n * The checkout module props interface.\n */\nexport interface ICheckoutModuleProps extends ICheckoutProps, IModuleStateProps {}\n\nconst expressPaymentSectionClassName = 'msc-express-payment-container';\n\n/**\n *\n * CheckoutContainer component.\n * @extends {React.Component}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass Checkout extends React.PureComponent {\n @computed get cartStatus(): Msdyn365.AsyncResultStatus {\n return this.props.data.checkout?.status;\n }\n\n @computed get isEmptyCart(): boolean {\n if (this.isEditorialMode) {\n // Editorial mode: Ignore empty cart\n return false;\n }\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'SUCCESS' && !!cart && !isEmpty(cart) && (!cart.CartLines || cart.CartLines.length === 0);\n }\n\n @computed get hasError(): boolean {\n const cart = this.props.data.checkout?.result?.checkoutCart?.cart;\n return this.cartStatus === 'FAILED' || (this.cartStatus === 'SUCCESS' && (!cart || isEmpty(cart)));\n }\n\n @computed get isEditorialMode(): boolean {\n return this.props.context.request.params.isEditor;\n }\n\n @computed get canPlaceOrder(): boolean {\n const isTermsAndConditionAccepted = this.props.data.checkout.result && this.props.data.checkout.result?.isTermsAndConditionAccepted;\n\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n const disableForOBO = Msdyn365.isOboRequest(this.props.context.request) && !this.isPaidOffByCustomerAccount;\n\n // If isTermsAndConditionAccepted is undefined means TermsAndCondition module is not added to page and we should able to place order.\n return (\n this.props.moduleState.isReady &&\n (isTermsAndConditionAccepted === undefined || isTermsAndConditionAccepted || shouldEnableSinglePaymentAuthorizationCheckout) &&\n (this.state.errorMessage === '' ||\n shouldEnableSinglePaymentAuthorizationCheckout ||\n (this.props.data.checkout.result?.isPaymentVerificationRedirection ?? false)) &&\n !(shouldEnableSinglePaymentAuthorizationCheckout && disableForOBO)\n );\n }\n\n @computed get isPaidOffByCustomerAccount(): boolean {\n const amountDue = this.props.data.checkout.result?.checkoutCart.cart.TotalAmount ?? 0;\n const customerAccountAmount = this.props.data.checkout.result?.customerAccountAmount ?? 0;\n\n return customerAccountAmount === amountDue;\n }\n\n @computed get isCartReady(): boolean {\n return (\n !!this.props.data.checkout.result?.checkoutCart?.cart &&\n this.props.data.customerInformation.status !== 'LOADING' &&\n this.props.data.featureState.status !== 'LOADING'\n );\n }\n\n public get expressPaymentDetailsFromCartPage(): IExpressPaymentDetails | null {\n const properties =\n this.props.data.checkout?.result?.checkoutCart?.cart?.ExtensionProperties?.find(\n property => property.Key === 'expressPaymentDetails'\n )?.Value?.StringValue ?? '';\n return properties ? (JSON.parse(properties) as IExpressPaymentDetails) : null;\n }\n\n public state: ICheckoutState = {\n errorMessage: '',\n isValidationPassed: false,\n isPlaceOrderLoading: false,\n isPlaceOrderClicked: false\n };\n\n private readonly telemetryContent: ITelemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n public componentDidMount(): void {\n const {\n resources: { genericErrorMessage }\n } = this.props;\n\n when(\n () => this.asyncResultStatus !== AsyncResultStatusCode.LOADING,\n async () => {\n if (this.expressPaymentDetailsFromCartPage) {\n const {\n email,\n tenderLine,\n tokenizedPaymentCard,\n paymentTenderType: paymentTenderTypeFromCartPage,\n isExpressCheckoutAppliedInCartPage,\n isExpressAddressAppliedInCartPage,\n cardPaymentAcceptResult,\n address\n } = this.expressPaymentDetailsFromCartPage;\n\n this.props.data.checkout.result?.updateExpressCheckoutDetails({\n newEmailAddressFromExpressCheckout: email ?? '',\n newTenderLine: tenderLine,\n newTokenizedPaymentCard: tokenizedPaymentCard,\n newPaymentTenderType: paymentTenderTypeFromCartPage,\n newIsExpressCheckoutApplied: isExpressCheckoutAppliedInCartPage,\n newIsExpressAddressApplied: isExpressAddressAppliedInCartPage,\n newCardPaymentAcceptResult: cardPaymentAcceptResult\n });\n\n if (isExpressAddressAppliedInCartPage && address) {\n this.props.data.checkout.result?.updateBillingAddressFromExpressCheckout({\n newBillingAddressFromExpressCheckout: address\n });\n this.props.data.checkout.result?.updateShippingAddressFromExpressCheckout({\n newShippingAddressFromExpressCheckout: address\n });\n } else {\n void this._saveShippingAndBillingAddress(tokenizedPaymentCard);\n }\n\n this.props.data.checkout.result?.checkoutCart.updateExtensionProperties({\n newExtensionProperties: [\n {\n Key: 'expressPaymentDetails',\n Value: { StringValue: '' }\n }\n ]\n });\n }\n }\n );\n\n when(\n () => this.hasError,\n () => {\n this.setState({\n errorMessage: genericErrorMessage\n });\n this.props.context.telemetry.error('Failed to get cart');\n }\n );\n\n when(\n () => {\n return this.isEmptyCart;\n },\n () => {\n this.redirectToCartPage('Cart is empty, but no editCartLink found');\n }\n );\n\n when(\n () => this.isCartReady,\n () => {\n this.validateForCheckout();\n }\n );\n\n reaction(\n () => this.props.moduleState.isReady,\n () => {\n this.onContainerReady();\n }\n );\n\n // Reaction to call place order when isPaymentSectionContainerReady is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerReady,\n async isReady => {\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n isReady &&\n !this.props.data.checkout.result?.redirectAdditionalContext &&\n (!this.props.data.checkout.result?.isExpressCheckoutApplied ||\n this.props.data.checkout.result?.isPaymentVerificationRedirection)\n ) {\n if (!this.state.isPlaceOrderLoading) {\n this.setState({ isPlaceOrderLoading: true });\n }\n\n this.props.telemetry.information(\n 'Call onPlaceOrder as reaction when isPaymentSectionContainerReady is updated for single auth payment.'\n );\n\n await this.onPlaceOrder();\n\n // If 3D authentication redirection, don't update isPlaceOrderLoading\n if (!this.props.data.checkout.result.isPaymentVerificationRequired) {\n this.setState({ isPlaceOrderLoading: false });\n }\n }\n }\n );\n\n // Reaction to enable place order button when isPaymentSectionContainerHasError is true for new checkout flow.\n reaction(\n () => this.props.data.checkout.result?.isPaymentSectionContainerHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isPaymentSectionContainerHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isPaymentSectionContainerHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isBillingAddressHasError,\n hasError => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && hasError) {\n this.setState({ isPlaceOrderLoading: false });\n\n this.props.data.checkout.result?.updateIsBillingAddressHasError({ newIsBillingAddressHasError: false });\n\n this.props.telemetry.information(\n 'Enable place order button as reaction when isBillingAddressHasError is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when isBillingAddressHasError is updated to false or not single auth payment.'\n );\n }\n }\n );\n\n // Reaction to enable place order button when redirection is true for new checkout flow.\n reaction(\n () => this.canPlaceOrder,\n async () => {\n if (this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout && this.canPlaceOrder) {\n if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateIsPlaceOrderEnabledInRedirection({\n newIsPlaceOrderEnabledInRedirection: true\n });\n\n this.props.telemetry.information(\n 'Set isPaymentVerificationRedirection to true as reaction when canPlaceOrder is updated to true for single auth payment.'\n );\n } else {\n this.props.telemetry.information(\n 'No reaction when canPlaceOrder is updated to true but isPaymentVerificationRedirection is false for single auth payment.'\n );\n this.props.telemetry.information(\n `isOBORequest is ${Msdyn365.isOboRequest(this.props.context.request)} and canPlaceOrder is ${\n this.canPlaceOrder\n }.`\n );\n }\n } else {\n this.props.telemetry.information('No reaction when canPlaceOrder is updated to false or not single auth payment.');\n }\n }\n );\n\n // Reaction to update the error message when there is a checkout error.\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n const checkoutErrorLocation: boolean = checkoutError?.errorLocation === ErrorLocation.Checkout;\n // If there is an Error in CheckoutPaymentInstrument module, checkout error location will be updated.\n const checkoutPaymentErrorLocation: boolean =\n checkoutError?.errorCode === ErrorCode.Microsoft_Dynamics_Commerce_Runtime_UnableToAuthorizePayment\n ? checkoutError.errorLocation === ErrorLocation.CheckoutPaymentInstrument\n : checkoutErrorLocation;\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n checkoutError &&\n checkoutError.errorMessage &&\n (checkoutErrorLocation ? checkoutErrorLocation : checkoutPaymentErrorLocation)\n ) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n }\n\n public componentDidUpdate(): void {\n if (\n this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging &&\n this.props.data.checkout.result?.shouldFocusOnCheckoutError &&\n this.state.errorMessage\n ) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n\n // eslint-disable-next-line complexity -- ignore the complexity.\n public render(): JSX.Element {\n const {\n moduleState,\n config: { className, checkoutHeading, disableGuidedCheckoutFlow },\n resources,\n context: {\n request: {\n user: { isAuthenticated }\n }\n }\n } = this.props;\n const { errorMessage } = this.state;\n const { backToShopping, placeOrderText, confirmPaymentText, cookieConsentRequiredMessage, genericErrorMessage } = resources;\n const checkoutClass = classnames('ms-checkout', className);\n const allCheckoutInformation = this.getSlotItems('checkoutInformation');\n\n // @ts-expect-error - check the key of slot\n const checkoutInformation = allCheckoutInformation?.filter(info => !info?.key.includes('express-payment'));\n\n // @ts-expect-error - check the key of slot\n const checkoutExpressPaymentContainer = allCheckoutInformation?.find(info => info?.key.includes('express-payment'));\n\n const isConsentGiven =\n this.props.context.request &&\n this.props.context.request.cookies &&\n this.props.context.request.cookies.isConsentGiven &&\n this.props.context.request.cookies.isConsentGiven();\n\n const isMobile =\n this.props.context.request &&\n this.props.context.request.device &&\n (this.props.context.request.device.Type as DeviceType) === 'Mobile';\n\n const backToShoppingUrl = Msdyn365.getUrlSync('home', this.props.context.actionContext) || '';\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n\n const termsAndConditions =\n this.props.slots.termsAndConditions && this.props.slots.termsAndConditions.length > 0 && this.props.slots.termsAndConditions[0];\n\n const payLoad = getPayloadObject('click', this.telemetryContent, TelemetryConstant.BackToShopping);\n const backToShoppingAttributes = getTelemetryAttributes(this.telemetryContent, payLoad);\n\n const hasInvoiceLine = this.props.data.checkout && this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n const checkoutBtnText = hasInvoiceLine ? confirmPaymentText : placeOrderText;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const shouldEnableSinglePaymentAuthorizationCheckout =\n this.props.data.checkout?.result?.shouldEnableSinglePaymentAuthorizationCheckout ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isExpressCheckoutApplied = this.props.data.checkout?.result?.isExpressCheckoutApplied ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasCartDeliveryMode = this.props.data.checkout?.result?.hasCartDeliveryMode;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const hasGuestCheckoutEmail = this.props.data.checkout?.result?.hasGuestCheckoutEmail;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isTermsAndConditionAccepted = this.props.data.checkout?.result?.isTermsAndConditionAccepted;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const isPaymentVerificationRedirection = this.props.data.checkout?.result?.isPaymentVerificationRedirection ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldEnableCheckoutErrorDisplayMessaging =\n this.props.data.checkout?.result?.shouldEnableCheckoutErrorDisplayMessaging ?? false;\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check null/undefined.\n const shouldFocusOnCheckoutError = this.props.data.checkout?.result?.shouldFocusOnCheckoutError;\n\n let hasExpressPaymentContainer = false;\n\n if (\n typeof window !== 'undefined' &&\n (document?.getElementsByClassName(expressPaymentSectionClassName) as HTMLCollectionOf)[0]?.style.display === ''\n ) {\n hasExpressPaymentContainer = true;\n }\n\n let viewProps: ICheckoutViewProps = {\n ...this.props,\n className: checkoutClass,\n checkoutErrorRef: this.checkoutErrorRef,\n isEmptyCart: this.isEmptyCart,\n isConsentGiven,\n hasError: this.hasError,\n isPaymentVerificationRedirection: this.props.data.checkout?.result?.isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n hasSalesOrder:\n this.props.data.checkout &&\n this.props.data.checkout.result !== undefined &&\n this.props.data.checkout.result.salesOrder !== undefined,\n hasInvoiceLine,\n cartStatus: this.cartStatus,\n isMobile,\n backToShoppingUrl,\n editCartLink,\n isEditorialMode: this.isEditorialMode,\n orderConfirmation:\n this.props.slots.orderConfirmation && this.props.slots.orderConfirmation.length > 0\n ? this.props.slots.orderConfirmation[0]\n : undefined,\n checkoutProps: { moduleProps: this.props, className: checkoutClass },\n headerProps: { className: 'ms-checkout__head' },\n bodyProps: { className: 'ms-checkout__body' },\n mainProps: { className: 'ms-checkout__main' },\n mainControlProps: { className: 'ms-checkout__main-control' },\n sideProps: { className: hasExpressPaymentContainer ? 'ms-checkout__has-express-side' : 'ms-checkout__side' },\n sideControlFirstProps: { className: 'ms-checkout__side-control-first' },\n sideControlSecondProps: { className: 'ms-checkout__side-control-second' },\n termsAndConditionsProps: { className: 'ms-checkout__terms-and-conditions' },\n title: checkoutHeading && this.renderMsdyn365Text(checkoutHeading),\n checkoutExpressPaymentContainer\n };\n\n if (!isConsentGiven && isAuthenticated) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else if (this.isLoading()) {\n viewProps = {\n ...viewProps,\n loading: \n };\n } else if (this.hasError) {\n viewProps = {\n ...viewProps,\n alert: \n };\n } else {\n viewProps = {\n ...viewProps,\n alert: errorMessage && ,\n canShow: true,\n guidedForm: checkoutInformation ? (\n \n ) : (\n undefined\n ),\n orderSummary: getOrderSummary(this.props),\n invoicePaymentSummary: getInvoicePaymentSummary(this.props),\n lineItems: hasInvoiceLine ? undefined : getLineItems(this.props, this.telemetryContent),\n placeOrderButton: (\n \n ),\n termsAndConditions,\n keepShoppingButton: backToShoppingUrl && (\n \n {backToShopping}\n \n ),\n moduleState,\n telemetryContent: this.telemetryContent,\n checkoutGuidedFormHasError: !!errorMessage\n };\n }\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @computed public get asyncResultStatus(): AsyncResultStatus | undefined {\n const isLoading = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.LOADING);\n if (isLoading) {\n return AsyncResultStatusCode.LOADING;\n }\n\n const isSuccess = Object.values(this.props.data).every(data => get(data, 'status') === AsyncResultStatusCode.SUCCESS);\n if (isSuccess) {\n return AsyncResultStatusCode.SUCCESS;\n }\n\n const isFailed = Object.values(this.props.data).some(data => get(data, 'status') === AsyncResultStatusCode.FAILED);\n if (isFailed) {\n return AsyncResultStatusCode.FAILED;\n }\n\n return undefined;\n }\n\n /**\n * Renders heading.\n * @param checkoutHeading - The checkout heading.\n * @returns React node.\n */\n public renderMsdyn365Text(checkoutHeading: ICheckoutHeadingData): React.ReactNode {\n return (\n \n );\n }\n\n /**\n * Event handler for heading change event.\n * @param event - The content change event in heading element.\n * @returns The new heading value.\n */\n public handleCheckoutHeadingChange = (event: Msdyn365.ContentEditableEvent) =>\n (this.props.config.checkoutHeading!.text = event.target.value);\n\n /**\n * Checks if cart is loading.\n * @returns True if is loading, false otherwise.\n */\n private readonly isLoading = (): boolean => {\n return !this.cartStatus || this.cartStatus === 'LOADING' || this.isEmptyCart || !this.state.isValidationPassed;\n };\n\n /**\n * Get slot items.\n * @param key - The slot key.\n * @returns React node or undefined.\n */\n private readonly getSlotItems = (key: string): React.ReactNode[] | undefined => {\n const { slots } = this.props;\n return slots && slots[key] && slots[key].length > 0 ? slots[key] : undefined;\n };\n\n /**\n * Trigger the payment section container submit when placing order.\n */\n private readonly triggerPaymentWithPlaceOrder = async (): Promise => {\n this.setState({ isPlaceOrderLoading: true });\n\n await this.props.data.checkout.result?.updateShouldTriggerPaymentWithPlaceOrder({\n newShouldTriggerPaymentWithPlaceOrder: !this.props.data.checkout.result.shouldTriggerPaymentWithPlaceOrder\n });\n };\n\n /**\n * On place order.\n * @returns Void promise.\n */\n private readonly onPlaceOrder = async (): Promise => {\n const {\n resources: { checkoutOutOfStockErrorMessage },\n context: {\n actionContext,\n app: {\n config: { enableStockCheck = false }\n }\n },\n slots: { orderConfirmation },\n data: { checkout, products }\n } = this.props;\n\n this.props.telemetry.information('Checkout onPlaceOrder is called.');\n this.setState({ isPlaceOrderClicked: true });\n\n // If hasInvoiceLine is true, no inventory check\n if (\n !this.props.data.checkout.result?.checkoutCart.hasInvoiceLine &&\n enableStockCheck &&\n (await this.isOverMaxQuantity((await checkout).checkoutCart.cart, await products))\n ) {\n this.setState({\n errorMessage: checkoutOutOfStockErrorMessage\n });\n this.props.context.telemetry.error(checkoutOutOfStockErrorMessage);\n } else {\n const hasOrderConfirmation = orderConfirmation && orderConfirmation.length > 0;\n\n const updatedCartVersion = await this.updateCartLineEmailAddress(this.props.data.checkout.result?.guestCheckoutEmail || '');\n\n await placeOrder(\n actionContext,\n this.props.data.checkout.result,\n this.props.data.products.result,\n !hasOrderConfirmation,\n updatedCartVersion,\n this.props.data.checkout.result?.isPaymentVerificationRedirection\n ).catch(error => {\n this.handleCheckoutError(error);\n });\n\n await checkout.result?.updateIsPaymentSectionContainerReady({ newIsPaymentSectionContainerReady: false });\n }\n };\n\n /**\n * Update receipt email address for electronic cart line.\n * @param newGuestCheckoutEmail - The guest checkout email.\n * @returns The updated cart version.\n */\n private readonly updateCartLineEmailAddress = async (newGuestCheckoutEmail: string): Promise => {\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n let electronicDeliveryInvoiceAddress: Address;\n\n const hasShippingAddress = this.props.data.checkout?.result?.hasShippingAddress;\n\n if (hasShippingAddress && this.props.config.useShippingAddressAsElectronicDeliveryInvoiceAddress) {\n electronicDeliveryInvoiceAddress = this.props.data.checkout?.result?.shippingAddress as Address;\n }\n\n const emailDeliveryCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.filter(\n cartLine => cartLine.DeliveryMode && cartLine.DeliveryMode !== '' && cartLine.DeliveryMode === emailDeliveryModeCode\n );\n\n let updatedCartVersion: number | undefined;\n if (emailDeliveryCartLines && emailDeliveryCartLines.length > 0) {\n const lineDeliverySpecifications: LineDeliverySpecification[] = emailDeliveryCartLines.map(line => {\n return {\n LineId: line.LineId,\n DeliverySpecification: {\n DeliveryModeId: emailDeliveryModeCode,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ElectronicDelivery,\n ElectronicDeliveryEmailAddress: newGuestCheckoutEmail,\n DeliveryAddress: hasShippingAddress ? electronicDeliveryInvoiceAddress : undefined\n }\n };\n });\n\n await updateLineDeliverySpecificationsAsync(\n { callerContext: this.props.context.actionContext },\n (await this.props.data.checkout).checkoutCart.cart.Id,\n lineDeliverySpecifications\n )\n .then(updatedCart => {\n updatedCartVersion = updatedCart.Version;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[updateLineDeliverySpecificationsAsync] Unable to update electronic delivery email address in cart');\n });\n }\n\n return updatedCartVersion;\n };\n\n /**\n * Return true if any product in the cart is over its max quantity.\n * @param cart -- The checkout cart.\n * @param products -- The checkout products.\n * @returns - Is any product in the cart is over max quantity.\n */\n private readonly isOverMaxQuantity = async (cart: Cart, products: SimpleProduct[]): Promise => {\n let isOverMaxQuantity = false;\n const emailDeliveryModeCode = this.props.context.request.channel?.EmailDeliveryModeCode;\n\n await getAvailabilitiesForCartLineItems(\n new ProductAvailabilitiesForCartLineItems(this.props.context.actionContext.requestContext.apiSettings),\n this.props.context.actionContext\n )\n .then(productInventoryInformation => {\n const productsThatShouldValidateInventory: IProductInventoryInformation[] = [];\n\n cart.CartLines?.map(cartline => {\n const cartlineProduct = products.find(product => product.RecordId === cartline.ProductId);\n\n // If product is non-stocked or cartline is electronic delivery, then no inventory check\n const isStockedItem = cartlineProduct?.Behavior?.IsStockedProduct;\n const isEmailDelivery =\n cartline.DeliveryMode && cartline.DeliveryMode !== '' ? cartline.DeliveryMode === emailDeliveryModeCode : false;\n const shouldSkipInventoryCheck = !isStockedItem || isEmailDelivery;\n if (!shouldSkipInventoryCheck && ArrayExtensions.hasElements(productInventoryInformation)) {\n const foundProductAvailability = productInventoryInformation.find(productInventory => {\n return productInventory.ProductAvailableQuantity?.ProductId! === cartline.ProductId;\n });\n if (foundProductAvailability) {\n productsThatShouldValidateInventory.push(foundProductAvailability);\n }\n }\n });\n\n const cartLinesInventoryValidation = validateCartLinesInventory(\n cart.CartLines ?? [],\n productsThatShouldValidateInventory,\n this.props.context.actionContext,\n products,\n emailDeliveryModeCode\n );\n\n // If is invalid then exceeds the available quantity\n isOverMaxQuantity = !cartLinesInventoryValidation.isValid;\n return isOverMaxQuantity;\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n throw new Error('[getAvailabilitiesForCartLineItems] Unable to get availabilities for products in checkout cart');\n });\n\n return isOverMaxQuantity;\n };\n\n /**\n * Gets active child in module state.\n * @returns - The module state manager collection.\n */\n private readonly getActiveChildModuleStates = (): IModuleStateManager[] => {\n const { childIds, getModule } = this.props.moduleState;\n return childIds\n .map(getModule)\n .filter((state): state is IModuleStateManager => !!state && !state.isDisabled && state.hasModuleState);\n };\n\n /**\n * On container ready.\n */\n private readonly onContainerReady = (): void => {\n this.props.telemetry.information('Checkout onContainerReady is called.');\n\n this.getActiveChildModuleStates().forEach(state => {\n state.isReady && state.onContainerReady && state.onContainerReady();\n });\n };\n\n /**\n * Redirects to cart page.\n * @param notFoundEditCartLinkMessage - Not found edit cart link message.\n */\n private readonly redirectToCartPage = (notFoundEditCartLinkMessage: string): void => {\n const editCartLink = Msdyn365.getUrlSync('cart', this.props.context.actionContext) || '';\n if (window && editCartLink) {\n window.location.assign(editCartLink);\n } else {\n this.setState({\n errorMessage: this.props.resources.genericErrorMessage\n });\n this.props.context.telemetry.error(notFoundEditCartLinkMessage);\n }\n };\n\n /**\n * Validates for checkout.\n * @param retry - Retry flag.\n */\n private readonly validateForCheckout = (retry: boolean = true): void => {\n const notFoundEditCartLinkMessage = \"Cart doesn't pass validation, but no editCartLink found\";\n const cart = this.props.data.checkout.result!.checkoutCart.cart;\n const { Id, Version } = cart;\n if (this._shouldValidateQuantityLimits()) {\n if (Version && Id) {\n validateForCheckoutAsync({ callerContext: this.props.context.actionContext, bypassCache: 'none' }, Id, Version)\n .then((result: CartLineValidationResults) => {\n if (result.ValidationFailuresByCartLines?.length !== 0) {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n } else {\n this.setState({ isValidationPassed: true });\n }\n })\n .catch(error => {\n this.props.telemetry.warning(error);\n this.props.telemetry.debug('Unable to validate Cart');\n if (retry && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n const cartState = this.props.data.checkout.result?.checkoutCart;\n cartState\n ?.refreshCart({})\n .then(() => {\n this.validateForCheckout(false);\n })\n .catch((refreshError: Error) => {\n this.props.telemetry.warning(refreshError.message);\n this.props.telemetry.debug('Unable to refresh Cart');\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n });\n } else {\n this.redirectToCartPage(notFoundEditCartLinkMessage);\n }\n } else {\n this.setState({ isValidationPassed: true });\n }\n };\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _shouldValidateQuantityLimits = (): boolean => {\n const featureStatuses = this.props.data.featureState.result;\n const isECommerceQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature'\n )?.IsEnabled || false;\n\n if (isECommerceQuantityLimitsFeatureEnabledInHq) {\n return true;\n }\n\n const isOrderQuantityLimitsFeatureEnabledInHq =\n featureStatuses?.find(featureState => featureState.Name === 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature')\n ?.IsEnabled || false;\n\n if (!isOrderQuantityLimitsFeatureEnabledInHq) {\n return false;\n }\n\n const useSiteBuilderSettings = featureStatuses?.find(\n featureState => featureState.Name === 'RevertToSiteBuilderOrderQuantityLimitsSettings'\n )?.IsEnabled;\n\n if (useSiteBuilderSettings) {\n const defaultOrderQuantityLimitsFeatureConfig = this.props.context?.request?.app?.platform?.enableDefaultOrderQuantityLimits;\n const customerInfo = this.props.data.customerInformation.result;\n const isB2BSite = isChannelTypeB2B(this.props.context.actionContext.requestContext);\n\n const isOrderQuantityLimitsFeatureEnabledInSiteSettings =\n defaultOrderQuantityLimitsFeatureConfig === 'all' ||\n (customerInfo &&\n ((defaultOrderQuantityLimitsFeatureConfig === 'b2b' && isB2BSite) ||\n (defaultOrderQuantityLimitsFeatureConfig === 'b2c' && !isB2BSite)));\n\n return isOrderQuantityLimitsFeatureEnabledInSiteSettings ?? false;\n } else {\n const cartConfiguration = this.props.data.cartConfiguration?.result;\n return !(cartConfiguration?.IgnoreOrderSettings ?? false);\n }\n };\n\n /**\n * Save the address as Shipping and Billing address.\n * @param tokenizedPaymentCard - Tokenized payment card.\n */\n private readonly _saveShippingAndBillingAddress = async (tokenizedPaymentCard?: TokenizedPaymentCard): Promise => {\n const checkoutState = this.props.data.checkout.result;\n\n // For Paypal, the address returned in TokenizedPaymentCard will be used as both shipping and billing address.\n if (checkoutState && tokenizedPaymentCard && tokenizedPaymentCard.Zip) {\n const address: Address = this._getAddressFromTokenizedPaymentCard(tokenizedPaymentCard);\n\n await checkoutState.updateBillingAddressFromExpressCheckout({ newBillingAddressFromExpressCheckout: address });\n await checkoutState.updateShippingAddressFromExpressCheckout({ newShippingAddressFromExpressCheckout: address });\n }\n };\n\n /**\n * Get address from tokenizedPaymentCard.\n * @param tokenizedPaymentCard -- The tokenizedPaymentCard from the payment.\n * @returns The address.\n */\n private readonly _getAddressFromTokenizedPaymentCard = (tokenizedPaymentCard: TokenizedPaymentCard): Address => {\n const address: Address = {\n TwoLetterISORegionName: tokenizedPaymentCard.Country,\n Name: tokenizedPaymentCard.NameOnCard,\n Street: tokenizedPaymentCard.Address1,\n StreetNumber: tokenizedPaymentCard.Address2,\n City: tokenizedPaymentCard.City,\n State: tokenizedPaymentCard.State,\n ZipCode: tokenizedPaymentCard.Zip,\n Phone: tokenizedPaymentCard.Phone\n };\n\n return address;\n };\n\n /**\n * Handle checkout errors.\n * @param error -- The error on checkout api failure.\n */\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n private readonly handleCheckoutError = (error: any) => {\n // Here checkout failure message will be shown if there is any error in checkout api except data validation.\n const {\n resources: {\n genericErrorMessage,\n invalidCartVersionErrorMessage,\n missingRequiredCartTenderLinesErrorMessage,\n checkoutApiFailureErrorMessage,\n invoiceCheckoutApiFailureErrorMessage\n },\n context: { actionContext }\n } = this.props;\n const checkoutResult = this.props.data.checkout.result;\n const apiError = error && error.message;\n if (error?.statusCode === 500) {\n const errorMessage = checkoutApiFailureErrorMessage;\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n this.setState({ isPlaceOrderLoading: false });\n return;\n }\n if (checkoutResult && checkoutResult.shouldEnableCheckoutErrorDisplayMessaging) {\n const errorCode = error && error.name ? error.name : '';\n // apiError message will be used if errorcode resource/enums is unavailable\n setCheckoutErrors(errorCode, this.props.resources, !!checkoutResult.isExpressCheckoutApplied, actionContext, apiError);\n } else {\n let errorMessage = genericErrorMessage;\n this.setState({ isPlaceOrderClicked: false });\n\n if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_InvalidCartVersion') {\n errorMessage = invalidCartVersionErrorMessage;\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_MissingRequiredCartTenderLines') {\n errorMessage = missingRequiredCartTenderLinesErrorMessage;\n } else if (error && error.name === 'Microsoft_Dynamics_Commerce_Runtime_ExclusiveCouponCannotBeAppliedWithOtherCoupons') {\n // If api error is not available show generic message\n errorMessage = apiError || genericErrorMessage;\n } else {\n if (error.status === ActionErrorStatus.Timeout || error.status === ActionErrorStatus.ServiceUnavailable) {\n errorMessage = checkoutResult?.checkoutCart.hasInvoiceLine\n ? invoiceCheckoutApiFailureErrorMessage\n : checkoutApiFailureErrorMessage;\n }\n }\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- unknown error type.\n if (\n this.props.data.checkout.result?.shouldEnableSinglePaymentAuthorizationCheckout &&\n error.data?.AdditionalContext &&\n !this.props.data.checkout.result?.isPaymentVerificationRedirection\n ) {\n return;\n }\n\n this.setState({\n errorMessage\n });\n this.props.telemetry.exception(error);\n }\n };\n}\n\nexport default Checkout;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsDescriptionProps {\n description?: string;\n className?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.description\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsDescription: React.FC = ({ description, className }) => {\n if (!description) {\n return null;\n }\n\n const descClassName = StringExtensions.isNullOrEmpty(className) ? 'ms-checkout-delivery-options__description' : className;\n return {description};\n};\n\nexport default CheckoutDeliveryOptionsDescription;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorMessageProps {\n message?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.message\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorMessage: React.FC = ({ message }) => {\n if (!message) {\n return null;\n }\n\n return

{message}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorMessage;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsErrorTitleProps {\n title?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.title\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsErrorTitle: React.FC = ({ title }) => {\n if (!title) {\n return null;\n }\n\n return

{title}

;\n};\n\nexport default CheckoutDeliveryOptionsErrorTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsRadioButtonProps {\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsRadioButton: React.FC = ({\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface IAddressDetailItem {\n isNewLine: boolean;\n isShowLabel: boolean;\n labelText: string;\n name: string;\n value: string;\n}\n\n/**\n * Address details item.\n * @param props - Configuration of the functional component.\n * @returns React functional component.\n */\nexport const AddressDetailItemFunctionComponent: React.FC = (props: IAddressDetailItem) => {\n const { labelText, value } = props;\n\n const className = `ms-checkout-delivery-options__cart-line-grp__item__header__address`;\n return (\n \n {labelText}\n {value}\n \n );\n};\n\nexport default AddressDetailItemFunctionComponent;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOptionsCartLineAddress } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport { CartLine } from '@msdyn365-commerce/retail-proxy';\nimport React, { useState } from 'react';\n\nexport interface ICheckoutCartLineDeliveryDateProps {\n className?: string;\n isDisabled?: boolean;\n minRangeValue?: string;\n maxRangeValue?: string;\n validationErrorForRange?: string;\n fallbackPattern?: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n disclaimerText?: string;\n heading?: string;\n checkBoxLabel?: string;\n onChangeMinValue?: void;\n id?: string;\n cartLines?: CartLine[];\n groupDeliveryOption?: DeliveryOptionsCartLineAddress;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n}\n\nconst CheckoutCartLineDeliveryDate: React.FC = ({\n className,\n isDisabled,\n fallbackPattern,\n ariaLabel,\n telemetryContent,\n onChangeMinValue,\n checkBoxLabel,\n disclaimerText,\n heading,\n cartLines,\n groupDeliveryOption,\n onChange\n}) => {\n const [selectedDate, setSelectedDate] = useState('');\n const [isDateEnabled, setIsDateEnabled] = useState(false);\n // State to store today's date\n const [minDate, setMinDate] = useState('');\n\n // Update minDate state with today's date on component mount\n useState(() => {\n const today = new Date().toISOString().split('T')[0];\n setMinDate(today);\n });\n\n const handleDateChange = (event: React.FocusEvent) => {\n const selectedValue = event.target.value;\n // Check if the selected date is allowed\n if (selectedValue >= minDate) {\n setSelectedDate(selectedValue);\n console.log('Selected date is allowed.', selectedValue);\n } else {\n console.log('Selected date is not allowed.');\n }\n\n if (groupDeliveryOption !== undefined && cartLines !== undefined) {\n const cartLinesDate: CartLine[] = [];\n groupDeliveryOption?.cartLineIds?.map(cartLineId => {\n const tempCartLine = cartLines?.find(cartLine => cartLineId === cartLine?.LineId?.toString());\n if (tempCartLine !== undefined) {\n cartLinesDate.push(tempCartLine);\n }\n });\n\n if (cartLinesDate !== undefined) {\n onChange(event, cartLinesDate);\n }\n }\n };\n\n const handleCheckboxChange = () => {\n setIsDateEnabled(!isDateEnabled);\n };\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n\n return (\n
\n
\n \n {checkBoxLabel}\n
\n {disclaimerText}\n
\n {heading}\n \n
\n
\n );\n};\n\nexport default CheckoutCartLineDeliveryDate;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface ICheckoutDeliveryOptionsGrpRadioButtonProps {\n className: string;\n isChecked: boolean;\n value?: string;\n ariaSetSize: number;\n ariaPosInSet: number;\n groupName: string;\n ariaLabel?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent): void;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.isChecked\n * @param root0.value\n * @param root0.ariaSetSize\n * @param root0.ariaPosInSet\n * @param root0.ariaLabel\n * @param root0.telemetryContent\n * @param root0.onChange\n * @extends {React.FC}\n */\nconst CheckoutDeliveryOptionsGrpRadioButton: React.FC = ({\n className,\n isChecked,\n value,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n groupName,\n telemetryContent,\n onChange\n}) => {\n if (!value) {\n return null;\n }\n\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n const deliveryOptionRef: React.RefObject = React.createRef();\n\n return (\n \n );\n};\n\nexport default CheckoutDeliveryOptionsGrpRadioButton;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { DeliveryOptionsCartLineAddress } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, ITelemetryContent, TelemetryConstant } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CartLine, DeliveryOption } from '@msdyn365-commerce/retail-proxy';\nimport get from 'lodash/get';\nimport { IAny, ICoreContext, IGeneric } from '@msdyn365-commerce/core';\nimport DescriptionComponent from './checkout-delivery-options.description';\nimport RadioButtonComponent from './checkout-cartLine-delivery-options-grp';\n\nexport interface ICheckoutCartLineDeliveryOptionsRadioButtonProps {\n className: string;\n moduleId: string;\n ariaSetSize: number;\n priceFree: string;\n ariaPosInSet: number;\n selectedItemId: string;\n cartLines: CartLine[];\n deliveryOptions: DeliveryOption[];\n typeName: string;\n context: ICoreContext>;\n groupName: string; // Add groupName prop\n groupDeliveryOption?: DeliveryOptionsCartLineAddress;\n ariaLabel?: string;\n value?: string;\n cartLineId?: string;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[], cartLineId?: string): void;\n}\n\n/**\n * Represents a radio button component for checkout cart line delivery options.\n * @param {Object} props - The component props.\n * @param {boolean} props.isChecked - Indicates whether the radio button is checked.\n * @param {string} props.value - The value of the radio button.\n * @param {number} props.ariaSetSize - The total number of radio buttons in the set.\n * @param {number} props.ariaPosInSet - The position of the radio button in the set.\n * @param {string} props.ariaLabel - The ARIA label for the radio button.\n * @param {string} props.telemetryContent - The telemetry content for the radio button.\n * @param {Function} props.onChange - The event handler for when the radio button is changed.\n * @returns {JSX.Element} The rendered radio button component.\n */\nconst CheckoutCartLineDeliveryOptionsRadio: React.FC = ({\n className,\n moduleId,\n ariaSetSize,\n ariaPosInSet,\n ariaLabel,\n telemetryContent,\n deliveryOptions,\n priceFree,\n selectedItemId,\n typeName,\n groupName, // Destructure groupName prop\n context,\n cartLines,\n cartLineId,\n groupDeliveryOption,\n onChange\n}) => {\n const payLoad = getPayloadObject('click', telemetryContent!, TelemetryConstant.DeliveryOptions);\n const attributes = getTelemetryAttributes(telemetryContent!, payLoad);\n console.log(attributes);\n const channelConfig = context.actionContext.requestContext.channel;\n const count = deliveryOptions.length;\n if (count === 0) {\n return null;\n }\n const cartLinesRadio: CartLine[] = [];\n if (groupDeliveryOption !== undefined && cartLines !== undefined) {\n groupDeliveryOption?.cartLineIds?.map(cartLineId => {\n const tempCartLine = cartLines?.find(cartLine => cartLineId === cartLine?.LineId?.toString());\n if (tempCartLine !== undefined) {\n cartLinesRadio.push(tempCartLine);\n }\n });\n }\n\n const changeCurrentDeliveryOption = React.useCallback(\n (event: React.ChangeEvent) => {\n if (cartLinesRadio !== undefined && cartLinesRadio.length > 0) {\n onChange(event, cartLinesRadio, undefined);\n } else {\n onChange(event, cartLines, cartLineId);\n }\n },\n [onChange, cartLinesRadio, cartLineId]\n );\n // const selectedDeliveryOptionItem = deliveryOptions.length > 0 ? deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n const deliveryClassName = `${className}__radio-btn-grp`;\n const optionClassName = `${deliveryClassName}-opt`;\n const response = deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => (\n
\n \n \n \n
\n ));\n\n return
{response}
;\n};\n\nexport default CheckoutCartLineDeliveryOptionsRadio;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CartLineItemComponent } from '@msdyn365-commerce/components';\nimport { Button, getPayloadObject, getTelemetryAttributes, ITelemetryContent } from '@msdyn365-commerce-modules/utilities';\nimport MsDyn365, * as Msdyn365 from '@msdyn365-commerce/core';\nimport { isChannelTypeB2B, TelemetryEvent } from '@msdyn365-commerce/core';\nimport { CartLine, DeliveryOption, ProductCatalog, SimpleProduct } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { getProductUrlSync } from '@msdyn365-commerce-modules/retail-actions';\nimport React, { useState } from 'react';\nimport CheckoutCartLineDeliveryOptionsRadio from './checkout-cartLine-delivery-options-radio';\n\nexport interface ICheckoutDeliveryOptionsLineItemsProps {\n className?: string;\n moduleId: string;\n selectedItemId: string;\n context: Msdyn365.ICoreContext;\n typeName: string;\n cartLines: CartLine[];\n imageSettings: Msdyn365.IImageSettings;\n showShippingChargesForLineItems: boolean;\n resources: ICheckoutDeliveryOptionsLineItemsResources;\n deliveryOptions: DeliveryOption[];\n ariaSetSize: number;\n ariaPosInSet: number;\n telemetryContent?: ITelemetryContent;\n onChange(event: React.ChangeEvent, cartLines: CartLine[]): void;\n currencyCode?: string;\n products?: SimpleProduct[];\n catalogs?: ProductCatalog[];\n gridSettings?: Msdyn365.IGridSettings;\n cartLineId?: string;\n key?: string;\n}\n\nexport interface ICheckoutDeliveryOptionsLineItemsResources {\n quantityDisplayStringLabel: string;\n productDimensionTypeColor: string;\n productDimensionTypeSize: string;\n productDimensionTypeStyle: string;\n productDimensionTypeAmount: string;\n configString: string;\n discountStringText: string;\n shippingChargesText: string;\n priceFree: string;\n ariaLabel: string;\n changeButtonText?: string;\n deliveryMethodLabel?: string;\n}\n\nconst _getLineItemComponent = (\n context: Msdyn365.ICoreContext,\n cartLine: CartLine,\n product: SimpleProduct,\n moduleId: string,\n typeName: string,\n showShippingChargesForLineItems: boolean,\n imageSettings: Msdyn365.IImageSettings,\n resources: ICheckoutDeliveryOptionsLineItemsResources,\n currencyCode: string,\n catalogs?: ProductCatalog[],\n gridSettings?: Msdyn365.IGridSettings,\n cartLineId?: string\n): JSX.Element | undefined => {\n let productUrl = getProductUrlSync(product, context.actionContext, undefined);\n if (MsDyn365.isBrowser && isChannelTypeB2B(context.actionContext.requestContext)) {\n const fullUrl = new URL(productUrl, window.location.href);\n fullUrl.searchParams.set('catalogid', `${cartLine.CatalogId ?? 0}`);\n productUrl = fullUrl.href;\n }\n\n return (\n \n );\n};\n\nconst _getProduct = (productId: number, products: SimpleProduct[]): SimpleProduct | undefined => {\n return products.find((_product: SimpleProduct) => {\n return productId === _product.RecordId;\n });\n};\n\nexport const GetLineItems: React.FC = (props: ICheckoutDeliveryOptionsLineItemsProps) => {\n const products = props.products;\n const lineClassName = props.className;\n const lineItemClassName = `${lineClassName}-item`;\n const currencyCode = props.currencyCode;\n const changeText = props.resources.changeButtonText;\n const [showDeliveryOption, setShowDeliveryOption] = useState(false);\n\n const handleClick = () => {\n setShowDeliveryOption(!showDeliveryOption);\n };\n if (!props.cartLines || props.cartLines.length === 0 || !products || products.length === 0 || currencyCode === undefined) {\n return null;\n }\n const deliveryCode = props.deliveryOptions.find(option => option.Code === props.selectedItemId);\n const payload = getPayloadObject(TelemetryEvent.UpdateInCart, props.telemetryContent!, changeText !== undefined ? changeText : '', '');\n const attributes = getTelemetryAttributes(props.telemetryContent!, payload);\n const response = props.cartLines.map(cartLine => {\n const product = cartLine.ProductId && _getProduct(cartLine.ProductId, products);\n if (!product) {\n return null;\n }\n return (\n
\n {_getLineItemComponent(\n props.context,\n cartLine,\n product,\n props.moduleId,\n props.typeName,\n props.showShippingChargesForLineItems,\n props.imageSettings,\n props.resources,\n currencyCode,\n props.catalogs,\n props.gridSettings\n )}\n
{props.resources.deliveryMethodLabel}
\n
\n {deliveryCode?.Description}\n \n
\n {showDeliveryOption ? (\n \n ) : null}\n
\n );\n });\n\n return
{response}
;\n};\nexport default GetLineItems;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IImageProps, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { CartLine, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\n/**\n * The cartLine product interface.\n */\nexport interface ICartLineWithProduct {\n cartLine: CartLine;\n product?: SimpleProduct;\n}\n\n/**\n * The checkout shipping cartLine interface.\n */\nexport interface ICheckoutShippingCartLineInfo {\n lineId?: string;\n imageProps: IImageProps;\n deliveryMethodDesc?: string;\n requestDeliveryDate?: string;\n}\n\n/**\n * The checkout shipping cartLine props.\n */\nexport interface ICheckoutShippingCartLinesProps {\n moduleClassName: string;\n cartLines: ICheckoutShippingCartLineInfo[];\n}\n\n// eslint-disable-next-line @typescript-eslint/naming-convention -- Following as per module\nexport const CheckoutShippingCartLines: React.FC = ({ moduleClassName, cartLines }) => {\n if (!ArrayExtensions.hasElements(cartLines)) {\n return null;\n }\n\n return (\n
\n
\n {cartLines.map((cartLine: ICheckoutShippingCartLineInfo) => {\n const className = `${moduleClassName}__group-images-lines-product`;\n return (\n
\n \n
{cartLine.deliveryMethodDesc}
\n
\n
{cartLine.requestDeliveryDate}
\n
\n );\n })}\n
\n
\n );\n};\n\n/**\n * The checkout shipping cartLine image settings.\n */\nexport const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n lg: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 },\n xl: { q: 'w=108&h=108&q=80&m=6&f=jpg', w: 108, h: 108 }\n },\n lazyload: true,\n quality: 80\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { CheckoutModule, ErrorLocation, ICheckoutState } from '@msdyn365-commerce/global-state';\nimport { Cart, ChannelDeliveryOptionConfiguration, FilterDeliveryModeOption } from '@msdyn365-commerce/retail-proxy';\nimport { getDeliveryOptionsAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport {\n Address,\n CartLine,\n DeliveryOption,\n DeliveryPreferenceType,\n LineDeliverySpecification,\n SimpleProduct\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState } from '@msdyn365-commerce-modules/checkout-utilities';\nimport {\n GetDeliveryOptionsForCartLineAddressInput,\n getDeliveryOptionsForCartLineAddress,\n getFallbackImageUrl,\n QueryResultSettingsProxy,\n StringExtensions,\n DeliveryOptionsCartLineAddress,\n ArrayExtensions,\n ObjectExtensions\n} from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, getTelemetryObject, IModuleProps, INodeProps, ITelemetryContent, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport get from 'lodash/get';\nimport { action, computed, observable, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\nimport groupBy from 'lodash/groupBy';\n\nimport { IImageProps, IImageSettings } from '@msdyn365-commerce/core';\nimport { ErrorComponent } from '../../common/error';\nimport { ICheckoutDeliveryOptionsData } from './checkout-delivery-options.data';\nimport {\n filterDeliveryModeOption,\n ICheckoutDeliveryOptionsProps,\n useDefaultDeliveryOption\n} from './checkout-delivery-options.props.autogenerated';\nimport DescriptionComponent from './components/checkout-delivery-options.description';\nimport ErrorMessageComponent from './components/checkout-delivery-options.error-message';\nimport ErrorTitleComponent from './components/checkout-delivery-options.error-title';\nimport RadioButtonComponent from './components/checkout-delivery-options.radio-button';\nimport { focusOnCheckoutError } from '../../checkout-errors';\nimport { AddressDetailItemFunctionComponent } from './components/address-detail-item';\nimport CheckoutCartLineDeliveryDate from './components/checkout-cartLine-delivery-date';\nimport CheckoutCartLineDeliveryOptionsRadio from './components/checkout-cartLine-delivery-options-radio';\nimport { GetLineItems } from './components/get-line-items';\nimport {\n CheckoutShippingCartLines,\n ICheckoutShippingCartLineInfo,\n ICheckoutShippingCartLinesProps,\n defaultImageSettings\n} from './components/checkout-shipping-cartlines-images';\n\nexport interface ICheckoutDeliveryOptionsModuleProps\n extends ICheckoutDeliveryOptionsProps,\n IModuleStateProps {}\n\nexport interface ICheckoutDeliveryOption {\n DeliveryOption: INodeProps;\n description?: React.ReactNode;\n price?: React.ReactNode;\n}\n\nexport interface ICartLineSelectedDeliveryOption {\n cartLineId: string;\n selectedDeliveryOption: string;\n requestDeliveryDate?: string;\n}\n\nexport interface ICheckoutDeliveryOptionEdit extends ICheckoutDeliveryOption {\n code: string;\n radioButton?: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsList {\n DeliveryOptionsList: INodeProps;\n list: ICheckoutDeliveryOptionEdit[];\n}\n\nexport interface ICheckoutDeliveryOptionsError {\n Error: INodeProps;\n title: React.ReactNode;\n message: React.ReactNode;\n}\n\nexport interface ICheckoutDeliveryOptionsViewState {\n isLoading: boolean;\n isError: boolean;\n isShowList: boolean;\n isShowSelected: boolean;\n isShowSaveButton: boolean;\n isShowEditButton: boolean;\n isShowCancelButton: boolean;\n}\n\nexport interface ICheckoutDeliveryOptionsViewProps extends ICheckoutDeliveryOptionsProps<{}> {\n CheckoutDeliveryOptions: IModuleProps;\n selectedItemId: string;\n deliveryOptionsData: DeliveryOption[];\n isLoading: boolean;\n errorMessageData: string;\n viewState: ICheckoutDeliveryOptionsViewState;\n deliveryOptions?: ICheckoutDeliveryOptionsList;\n deliveryOptionSelected?: ICheckoutDeliveryOption;\n errorMessage?: ICheckoutDeliveryOptionsError;\n waiting?: React.ReactNode;\n saveButton?: React.ReactNode;\n editButton?: React.ReactNode;\n cancelButton?: React.ReactNode;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n checkoutCartLineGroupDeliveryOptions?: React.ReactNode;\n enableCheckoutCartLineDeliveryOptions?: boolean;\n cartLineImages?: React.ReactNode;\n onDeliveryOptionChange(event: React.ChangeEvent): void;\n onSave(): void;\n onEdit(): void;\n onCancel(): void;\n}\n\n/**\n *\n * CheckoutDeliveryOptions component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n@withModuleState\n@observer\nclass CheckoutDeliveryOptions extends React.Component {\n @observable private selectedItemId: string = '';\n\n @observable private deliveryOptions: DeliveryOption[] = [];\n\n @observable private isLoading: boolean = false;\n\n @observable private errorMessage?: string;\n\n @observable private groupDeliveryOptions: DeliveryOptionsCartLineAddress[] = [];\n\n @observable private cartLineSelectedDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n @computed private get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get currencyCode(): string | undefined {\n return get(this.props, 'context.request.channel.Currency');\n }\n\n public get expressPaymentDetailsFromCartPage() {\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const properties =\n this.props.data.cart?.result?.cart?.ExtensionProperties?.find(property => property.Key === 'expressPaymentDetails')?.Value\n ?.StringValue ?? '';\n\n return properties ? JSON.parse(properties) : null;\n }\n\n public get isExpressPaymentAppliedInCartPage(): boolean {\n return this.expressPaymentDetailsFromCartPage?.isExpressCheckoutAppliedInCartPage ?? false;\n }\n\n private cartDeliveryMode?: string;\n\n private retailMultiplePickUpOptionEnabled?: boolean = false;\n\n private channelDeliveryOptionConfig?: ChannelDeliveryOptionConfiguration;\n\n private readonly telemetryContent?: ITelemetryContent;\n\n private readonly isSelectDefaultOptionEnabled?: boolean;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n private readonly isMultipleAddressShippingEnabled?: boolean;\n\n private readonly timeoutRetailCall: number;\n\n private cartLinesDeliveryOptions: ICartLineSelectedDeliveryOption[] = [];\n\n public constructor(props: ICheckoutDeliveryOptionsModuleProps) {\n super(props);\n this.telemetryContent = getTelemetryObject(\n this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry\n );\n this.isSelectDefaultOptionEnabled =\n this.props.config.useDefaultDeliveryOption && this.props.config.useDefaultDeliveryOption !== useDefaultDeliveryOption.none;\n this.isMultipleAddressShippingEnabled = this.props.config.multipleAddressShippingEnabled;\n this.timeoutRetailCall = this.props.config.timeoutToCallRetail !== undefined ? this.props.config.timeoutToCallRetail : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n if (\n (this.props.data.checkout.result?.isExpressCheckoutApplied && this.canShip()) ||\n this.isExpressPaymentAppliedInCartPage\n ) {\n await this.init();\n } else {\n // Wait for a specific time (e.g., 2000 milliseconds = 2 seconds)\n await new Promise(resolve => setTimeout(resolve, this.timeoutRetailCall));\n // Then call the init function\n await this.init();\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.shippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.cartLinesWithShippingAddress,\n async () => {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.isExpressCheckoutApplied,\n async isExpressCheckoutApplied => {\n if (isExpressCheckoutApplied && this.canShip() && !this.isExpressPaymentAppliedInCartPage) {\n await this.loadDeliveryOptions();\n this.props.moduleState.setIsCancellable(false);\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n }\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (\n checkoutError &&\n checkoutError.errorLocation === ErrorLocation.CheckoutDeliveryOptions &&\n checkoutError.errorMessage\n ) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutDeliveryOptions) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutDeliveryOptionsModuleProps, nextState: ICheckoutDeliveryOptionsViewState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const multiplePickupStoreSwitchName = 'Dynamics.AX.Application.RetailMultiplePickupDeliveryModeFeature';\n this.channelDeliveryOptionConfig = this.props.data.channelDeliveryOptionConfig?.result;\n this.retailMultiplePickUpOptionEnabled = this.props.data.featureState?.result?.find(\n feature => feature.Name === multiplePickupStoreSwitchName\n )?.IsEnabled;\n\n if (!this.canShip()) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const {\n moduleState: { isReady, isUpdating, hasError }\n } = this.props;\n const isError = !this.isLoading && hasError;\n const isShowList = !this.isLoading && !hasError && isUpdating && !this.isSelectDefaultOptionEnabled;\n const isShowSelected = !this.isLoading && !hasError && isReady;\n const { errorMessageTitle, deliveryOptionAriaLabel } = this.props.resources;\n const cartLinesDisplay = this.getMultipleDeliveryOptionSelected();\n const lineImageProps: ICheckoutShippingCartLinesProps = {\n moduleClassName: 'ms-checkout-shipping-address',\n cartLines: cartLinesDisplay.filter(x => !ObjectExtensions.isNullOrUndefined(x))\n };\n\n const cartLineImages: React.ReactNode = ;\n\n const viewProps = {\n ...this.props,\n onDeliveryOptionChange: this.onDeliveryOptionChange,\n selectedItemId: this.selectedItemId,\n deliveryOptionsData: this.deliveryOptions,\n isLoading: this.isLoading,\n alert: this.errorMessage && ,\n errorMessageData: this.errorMessage,\n viewState: {\n isLoading: this.isLoading,\n isError,\n isShowList,\n isShowSelected,\n isShowSaveButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup,\n isShowEditButton: isShowSelected && !this.props.moduleState.hasExternalSubmitGroup,\n isShowCancelButton: isShowList && !this.props.moduleState.hasExternalSubmitGroup && !!this.getSavedDeliveryOption()\n },\n CheckoutDeliveryOptions: {\n moduleProps: this.props,\n className: classname('ms-checkout-delivery-options', this.props.config.className)\n },\n deliveryOptions: {\n DeliveryOptionsList: {\n className: 'ms-checkout-delivery-options__list',\n role: 'list',\n 'aria-label': deliveryOptionAriaLabel\n },\n list: this.getDeliveryOptionList()\n },\n deliveryOptionSelected: this.getDeliveryOptionSelected(),\n errorMessage: this.getErrorMessage(),\n waiting: ,\n checkoutErrorRef: this.checkoutErrorRef,\n checkoutCartLineGroupDeliveryOptions: this.getCheckoutCartLineGroupDeliveryOptions(),\n enableCheckoutCartLineDeliveryOptions: this.isMultipleAddressShippingEnabled,\n cartLineImages,\n saveButton: this.getSaveButton(),\n editButton: this.getEditButton(),\n cancelButton: this.getCancelButton(),\n onSave: this.onSave,\n onEdit: this.onEdit,\n onCancel: this.onCancel\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n @action\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.isSelectDefaultOptionEnabled ? undefined : this.onEdit,\n onCancel: this.isSelectDefaultOptionEnabled ? undefined : this.onCancel,\n onSubmit: this.isSelectDefaultOptionEnabled ? undefined : this.onSubmit,\n status:\n !(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption) &&\n this.canShip()\n ? 'updating'\n : 'disabled'\n });\n\n this.cartDeliveryMode = this.getSavedDeliveryOption();\n if (this.isMultipleAddressShippingEnabled) {\n this.getCartLinesSavedDeliveryOption();\n }\n await this.loadDeliveryOptions();\n };\n\n private readonly canShip = (): boolean => {\n const hasInvoice = this.props.data.checkout.result?.checkoutCart.hasInvoiceLine;\n return !hasInvoice && this.getCartLinesForShipping().length > 0;\n };\n\n private readonly isDeliveryModeExists = (deliveryMode: string | undefined): boolean => {\n if (deliveryMode) {\n if (this.deliveryOptions.find(deliveryOption => deliveryOption.Code === deliveryMode)) {\n return true;\n }\n }\n return false;\n };\n\n private readonly getDeliveryOptionSelected = (): ICheckoutDeliveryOption | null => {\n const selectedItem = this.deliveryOptions.find(deliveryOption => deliveryOption.Code === this.selectedItemId);\n if (!selectedItem) {\n this.props.context.telemetry.error('Checkout delivery options content is empty, module wont render');\n return null;\n }\n\n const { id, typeName, context } = this.props;\n const { priceFree } = this.props.resources;\n const price = get(selectedItem, 'ShippingChargeAmount', 0);\n const channelConfig = this.props.context.request.channel;\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option-selected' },\n description: ,\n price: (\n \n )\n };\n };\n\n private readonly getErrorMessage = (): ICheckoutDeliveryOptionsError => {\n const { errorMessageTitle } = this.props.resources;\n return {\n // @ts-expect-error\n CheckoutDeliveryOptionsError: { tag: 'span', className: 'ms-address-form__error', role: 'alert', 'aria-live': 'assertive' },\n title: ,\n message: \n };\n };\n\n private readonly getDeliveryOptionList = (): ICheckoutDeliveryOptionEdit[] => {\n const count = this.deliveryOptions.length;\n const { priceFree } = this.props.resources;\n const { id, typeName, context } = this.props;\n const channelConfig = this.props.context.request.channel;\n\n return this.deliveryOptions.map((deliveryOption: DeliveryOption, index: number) => {\n const getAriaLabelWithPrice = get(deliveryOption, 'ShippingChargeAmount', 0);\n return {\n DeliveryOption: { className: 'ms-checkout-delivery-options__option', role: 'listitem' },\n code: deliveryOption.Code || '',\n radioButton: (\n \n ),\n description: (\n \n ),\n price: (\n \n )\n };\n });\n };\n\n private readonly getSaveButton = (): React.ReactNode => {\n const { saveBtnLabel = 'Save' } = this.props.resources;\n return (\n \n {saveBtnLabel}\n \n );\n };\n\n private readonly getEditButton = (): React.ReactNode => {\n const { editBtnLabel = 'Change' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly getCancelButton = (): React.ReactNode => {\n const { cancelBtnLabel = 'Cancel' } = this.props.resources;\n return (\n \n );\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.errorMessage = errorMessage;\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.errorMessage = undefined;\n };\n\n private readonly onSave = async (): Promise => {\n await this.onSubmit();\n };\n\n private readonly onEdit = async (): Promise => {\n this.props.telemetry.information('Delivery options onEdit is called.');\n\n this.clearError();\n this.onUpdating();\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: true });\n };\n\n private readonly onSubmit = async (): Promise => {\n this.props.telemetry.information('Delivery options onSubmit is called.');\n if (this.isMultipleAddressShippingEnabled) {\n this.updateCartLinesDeliverySpecification();\n } else {\n await this.updateCartDeliverySpecification(this.selectedItemId);\n }\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n };\n\n private readonly onCancel = async (): Promise => {\n this.props.telemetry.information('Delivery options onCancel is called.');\n\n // Reset to the saved value\n const savedDeliveryOption = this.getSavedDeliveryOption();\n if (savedDeliveryOption) {\n this.selectedItemId = savedDeliveryOption;\n this.onReady();\n\n await this.props.data.checkout.result?.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n } else {\n this.onUpdating();\n }\n };\n\n private readonly getSavedDeliveryOption = (): string | undefined => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n return cartLinesForShipping[0] && cartLinesForShipping[0].DeliveryMode;\n };\n\n private readonly getCartLinesSavedDeliveryOption = (): void => {\n const cartLinesForShipping = this.getCartLinesForShipping();\n cartLinesForShipping.forEach(cartLine => {\n const deliveryMode = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n if (!cartLine.LineId || StringExtensions.isNullOrEmpty(deliveryMode)) {\n return;\n }\n const cartLineId = cartLine?.LineId;\n const existingCartLineSelectedDeliveryOption = this.cartLinesDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryMode;\n } else {\n if (cartLineId !== undefined) {\n this.cartLinesDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryMode });\n }\n }\n });\n };\n\n private readonly updateCartDeliverySpecification = async (deliveryModeId: string): Promise => {\n if (deliveryModeId.trim() === '') {\n return;\n }\n\n const { resources } = this.props;\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const updateCartDeliverySpecificationInput = {\n deliveryModeId,\n shippingAddress: checkoutState.shippingAddress,\n channelDeliveryOptionConfig: this.retailMultiplePickUpOptionEnabled ? this.channelDeliveryOptionConfig : undefined\n };\n\n this.clearError();\n this.onPending();\n\n await checkoutState.checkoutCart\n .updateCartDeliverySpecification(updateCartDeliverySpecificationInput)\n .then(response => {\n if (response.status === 'FAILED') {\n const errorMessage = `${response.errorDetails?.LocalizedMessage}`;\n this.setError(StringExtensions.isNullOrEmpty(errorMessage) ? resources.genericErrorMessage : errorMessage);\n }\n\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n })\n .catch(() => {\n this.setError(resources.genericErrorMessage);\n });\n };\n\n @action\n private readonly updateCartLinesDeliverySpecification = async (): Promise => {\n if (!this.cartLineSelectedDeliveryOptions || !this.cartLineSelectedDeliveryOptions.length) {\n return;\n }\n const { resources } = this.props;\n let lineSpecs: LineDeliverySpecification[] = [];\n const checkoutCartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n\n this.cartLineSelectedDeliveryOptions.forEach(group => {\n const address = checkoutCartLines?.find(cartLine => cartLine.LineId === group.cartLineId)?.ShippingAddress;\n const lineSpec = {\n LineId: group.cartLineId,\n DeliverySpecification: {\n DeliveryModeId: group.selectedDeliveryOption,\n DeliveryPreferenceTypeValue: DeliveryPreferenceType.ShipToAddress,\n DeliveryAddress: address\n }\n };\n lineSpecs.push(lineSpec);\n });\n\n try {\n const checkoutState = this.props.data.checkout.result as ICheckoutState;\n const response = await checkoutState.checkoutCart.updateCartLinesDeliverySpecification({\n lineDeliverySpecifications: lineSpecs\n });\n\n if (response.status === 'FAILED') {\n this.setError(resources.genericErrorMessage);\n } else {\n const cartLines = this.props.data.checkout.result?.checkoutCart.cart.CartLines;\n if (cartLines !== undefined && cartLines.length > 0) {\n cartLines?.forEach(cartLine => {\n const cartLineId = cartLine.LineId?.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n cartLine.RequestedDeliveryDate = existingCartLineSelectedDeliveryOption.requestDeliveryDate\n ? new Date(existingCartLineSelectedDeliveryOption.requestDeliveryDate)\n : undefined;\n }\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: cartLines });\n }\n this.onReady();\n this.props.moduleState.setIsCancellable(true);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n };\n\n private readonly getCartLinesForShipping = (): CartLine[] => {\n const { request } = this.props.context;\n const pickupDeliveryModeCode = request && request.channel && request.channel.PickupDeliveryModeCode;\n const emailDeliveryModeCode = request && request.channel && request.channel.EmailDeliveryModeCode;\n\n return this.retailMultiplePickUpOptionEnabled\n ? ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !==\n this.channelDeliveryOptionConfig?.PickupDeliveryModeCodes?.find(\n deliveryMode => deliveryMode === cartLine.DeliveryMode\n ) && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n )\n : ((this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart.CartLines) || []).filter(cartLine =>\n cartLine.DeliveryMode && cartLine.DeliveryMode !== ''\n ? cartLine.DeliveryMode !== pickupDeliveryModeCode && cartLine.DeliveryMode !== emailDeliveryModeCode\n : cartLine\n );\n };\n\n private readonly getDeliveryOptions = async (shippingAddress: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n const cartId = (cartState.cart as Cart).Id;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n const response = await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cartId,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n );\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n\n if (response && response.length > 0) {\n this.deliveryOptions = response;\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n\n if (this.deliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartDeliveryMode && this.isDeliveryModeExists(this.cartDeliveryMode)) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n } else {\n this.onUpdating();\n this.selectedItemId = this.deliveryOptions.length > 0 ? this.deliveryOptions[0].Code || '' : ''; // By default, select first delivery\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: !!this.isSelectDefaultOptionEnabled });\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly getStoredDeliveryOptions = async (): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context } = this.props;\n const cartState = this.props.data.checkout.result.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n const cart = cartState.cart;\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n }\n\n if (this.cartDeliveryMode) {\n this.selectedItemId = this.cartDeliveryMode;\n this.cartDeliveryMode = undefined;\n this.onReady();\n\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n this.props.data.checkout.result?.updateHasCartDeliveryMode({ newHasCartDeliveryMode: true });\n\n if (!this.props.data.checkout.result.isPaymentVerificationRedirection) {\n await this.props.data.checkout.result.updateShouldCollapsePaymentSection({ newShouldCollapsePaymentSection: false });\n }\n }\n\n this.isLoading = false;\n }\n };\n\n private readonly loadDeliveryOptions = async (): Promise => {\n const { checkout } = this.props.data;\n const { result } = checkout || {};\n const { shippingAddress, cartLinesWithShippingAddress, isPaymentVerificationRedirection, isExpressCheckoutApplied } = result || {};\n const { features } = this.props.context.actionContext.requestContext || {};\n\n if (!this.canShip() || !(shippingAddress || cartLinesWithShippingAddress)) {\n return;\n }\n\n const shouldSubmit = this.isSelectDefaultOptionEnabled || isExpressCheckoutApplied || this.isExpressPaymentAppliedInCartPage;\n\n if (features?.enable_checkout_race_condition_hot_fix) {\n if (isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n } else {\n if (!isPaymentVerificationRedirection || shouldSubmit) {\n await this.loadDeliveryOptionsBasedOnAddress(shippingAddress);\n }\n }\n } else {\n if (!isPaymentVerificationRedirection || shouldSubmit) {\n await this.loadDeliveryOptionsBasedOnAddress(shippingAddress);\n }\n\n if (isPaymentVerificationRedirection) {\n await this.getStoredDeliveryOptions();\n }\n }\n\n if (shouldSubmit) {\n await this.onSubmit();\n }\n };\n\n private readonly loadDeliveryOptionsBasedOnAddress = async (shippingAddress?: Address): Promise => {\n if (this.isMultipleAddressShippingEnabled) {\n if (shippingAddress) {\n await this.getGroupDeliveryOptions(shippingAddress);\n } else {\n await this.getGroupDeliveryOptions();\n }\n } else if (shippingAddress) {\n await this.getDeliveryOptions(shippingAddress);\n }\n };\n\n private readonly onDeliveryOptionChange = (event: React.ChangeEvent) => {\n const deliveryModeId = event.currentTarget.value;\n this.selectedItemId = deliveryModeId;\n };\n\n private readonly onCartLineDeliveryOptionChange = (\n event: React.ChangeEvent,\n cartLines: CartLine[],\n cartLineId?: string\n ) => {\n const deliveryModeId = event.currentTarget.value;\n if (cartLineId !== undefined) {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n return;\n }\n\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = deliveryModeId;\n } else {\n this.cartLineSelectedDeliveryOptions.push({ cartLineId, selectedDeliveryOption: deliveryModeId });\n }\n });\n };\n\n private readonly onCartLineRequestDeliveryDateChange = (event: React.ChangeEvent, cartLines: CartLine[]) => {\n const deliveryDate = event.currentTarget.value;\n cartLines.forEach(cartLine => {\n if (!cartLine.LineId) {\n return;\n }\n const cartLineId = cartLine?.LineId.toString();\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.requestDeliveryDate = deliveryDate;\n } else {\n const deliveryModeId = cartLine.DeliveryMode !== undefined ? cartLine.DeliveryMode : '';\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption: deliveryModeId,\n requestDeliveryDate: deliveryDate\n });\n }\n });\n };\n\n private readonly onReady = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onReady();\n }\n };\n\n private readonly onUpdating = () => {\n if (!(this.props.config.useDefaultDeliveryOption === useDefaultDeliveryOption.notDisplaySelectedDeliveryOption)) {\n this.props.moduleState.onUpdating();\n }\n };\n\n private readonly onPending = () => {\n if (!this.isSelectDefaultOptionEnabled) {\n this.props.moduleState.onPending();\n }\n };\n\n private readonly getCheckoutCartLineGroupDeliveryOptions = (): React.ReactNode => {\n const { resources, config } = this.props;\n const shippingCartLines = this.getCartLinesForShipping();\n if (!ArrayExtensions.hasElements(shippingCartLines) || !ArrayExtensions.hasElements(this.groupDeliveryOptions)) {\n return null;\n }\n const imageSettings = this.getImageSettings(config.imageSettings);\n const requestDeliveryDateEnabled = config.enableRequestDeliveryDate === true && this.isMultipleAddressShippingEnabled === true;\n return (\n
\n {this.groupDeliveryOptions.map((groupDeliveryOption: DeliveryOptionsCartLineAddress, index) => {\n const cartLineId = groupDeliveryOption.cartLineIds !== undefined ? groupDeliveryOption.cartLineIds[0] : '';\n const cartLine1 = shippingCartLines.find(cartLine => cartLineId === cartLine?.LineId?.toString() ?? '');\n const cartLine = shippingCartLines.filter(\n cartLine => groupDeliveryOption && (cartLineId === cartLine?.LineId?.toString() ?? '')\n );\n if (groupDeliveryOption !== undefined) {\n const selectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption => cartLineSelectedDeliveryOption.cartLineId === cartLine[0].LineId\n )?.selectedDeliveryOption;\n return (\n
\n
\n \n
\n
\n
\n \n {resources.cartLineGroupDeliveryOptionsLabel}\n \n \n {resources.cartLineGroupDeliveryOptionsText}\n \n {requestDeliveryDateEnabled ? (\n \n ) : null}\n \n
\n {groupDeliveryOption.cartLineIds?.map(cartLineId => {\n const cartLine1 = shippingCartLines.find(\n cartLine => cartLineId === cartLine?.LineId?.toString() ?? ''\n );\n const selectedDeliveryOption1 = this.cartLineSelectedDeliveryOptions.find(\n cartLineSelectedDeliveryOption =>\n cartLineSelectedDeliveryOption.cartLineId === cartLine1?.LineId\n )?.selectedDeliveryOption;\n return (\n \n );\n })}\n
\n
\n );\n } else {\n return null;\n }\n })}\n
\n );\n };\n\n private readonly getGroupDeliveryOptions = async (shippingAddress?: Address): Promise => {\n if (!this.props.data.checkout.result) {\n return;\n }\n\n const { context, resources, config } = this.props;\n const cartState = this.props.data.checkout.result?.checkoutCart;\n\n if (context) {\n this.isLoading = true;\n this.deliveryOptions = [];\n this.selectedItemId = '';\n this.clearError();\n\n try {\n let originalDeliveryMode: string = '';\n const shippingCartLines = this.getCartLinesForShipping();\n const cartLinesForShipping: CartLine[] = [];\n if (ArrayExtensions.hasElements(shippingCartLines)) {\n const getGroupByDelivery = (items: CartLine[]) => groupBy(items, item => item.ShippingAddress?.RecordId);\n cartLinesForShipping.push(getGroupByDelivery(shippingCartLines));\n console.log('running delivery option for all lines');\n }\n const hasShippingDeliveryLines = shippingCartLines && shippingCartLines.length > 0 && shippingCartLines[0].DeliveryMode;\n const cart = cartState.cart;\n if (hasShippingDeliveryLines) {\n // First store the delivery mode, so that we can restore the shipping information.\n originalDeliveryMode = shippingCartLines[0].DeliveryMode || '';\n\n // Clear the delivery information on retail server, so GetDeliveryOptions charge calculation works correctly\n await cartState.clearCartLinesDeliveryInformation({\n cart,\n channelDeliveryOptionConfiguration: this.channelDeliveryOptionConfig\n });\n }\n\n // TODO: Check if we can move this getDeliveryOptions to checkout state\n let deliveryOptionFilter: FilterDeliveryModeOption;\n switch (config.filterDeliveryModeOption) {\n case filterDeliveryModeOption.none:\n deliveryOptionFilter = FilterDeliveryModeOption.None;\n break;\n case filterDeliveryModeOption.filterOutNonCarrierDeliveryMode:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n break;\n default:\n deliveryOptionFilter = FilterDeliveryModeOption.FilterOutNonCarrierDeliveryMode;\n }\n let response: DeliveryOptionsCartLineAddress[] = [];\n if (shippingAddress !== undefined && shippingAddress.RecordId !== undefined) {\n const checkoutState = this.props.data.checkout.result;\n const cartLineIds = shippingCartLines.map(cartLine => (cartLine.LineId !== undefined ? cartLine.LineId : ''));\n await getDeliveryOptionsAsync(\n {\n callerContext: context.actionContext,\n queryResultSettings: QueryResultSettingsProxy.getPagingFromInputDataOrDefaultValue(context.actionContext)\n },\n cart.Id,\n shippingAddress,\n [],\n deliveryOptionFilter,\n true\n ).then(async result => {\n if (result && result.length > 0) {\n response.push({ deliveryOptions: result, hasError: false, error: undefined, cartLineIds: cartLineIds });\n shippingCartLines?.forEach(cartLine => {\n cartLine.ShippingAddress = shippingAddress;\n });\n await checkoutState.checkoutCart.updateCartLines({ updatedCartLinesObject: shippingCartLines });\n // console.log(updateLineDeliverySpecifications());\n } else {\n response.push({\n deliveryOptions: [],\n hasError: true,\n error: 'No delivery options available',\n cartLineIds: cartLineIds\n });\n }\n });\n } else {\n const inputData = new GetDeliveryOptionsForCartLineAddressInput(deliveryOptionFilter, shippingCartLines);\n response = await getDeliveryOptionsForCartLineAddress(inputData, context.actionContext);\n }\n if (response && response.length > 0) {\n this.groupDeliveryOptions = response;\n console.log('groupDeliveryOptions');\n }\n if (this.groupDeliveryOptions.length === 0) {\n this.setError(resources.deliveryOptionsNotFound);\n } else if (this.cartLinesDeliveryOptions.length !== 0) {\n this.cartLineSelectedDeliveryOptions = this.cartLinesDeliveryOptions;\n this.cartLinesDeliveryOptions = [];\n this.onReady();\n } else {\n this.onUpdating();\n this.groupDeliveryOptions.forEach(group => {\n const selectedDeliveryOption =\n group.deliveryOptions.length > 0 && group.deliveryOptions[0].Code !== undefined\n ? group.deliveryOptions[0].Code\n : '';\n group.cartLineIds?.forEach(cartLineId => {\n const existingCartLineSelectedDeliveryOption = this.cartLineSelectedDeliveryOptions.find(\n cartLineDeliveryOption => cartLineDeliveryOption.cartLineId === cartLineId\n );\n if (existingCartLineSelectedDeliveryOption) {\n existingCartLineSelectedDeliveryOption.selectedDeliveryOption = selectedDeliveryOption;\n } else {\n this.cartLineSelectedDeliveryOptions.push({\n cartLineId,\n selectedDeliveryOption\n });\n }\n });\n });\n }\n\n if (hasShippingDeliveryLines) {\n await this.updateCartDeliverySpecification(originalDeliveryMode);\n }\n } catch {\n this.setError(resources.genericErrorMessage);\n }\n }\n this.isLoading = false;\n };\n\n /**\n * Gets the image settings.\n * @param imageSettings - Image settings.\n * @returns IImageSettings.\n */\n private readonly getImageSettings = (imageSettings: IImageSettings | undefined): IImageSettings => {\n return (\n imageSettings || {\n viewports: {\n xs: { q: 'w=80&h=94&m=6', w: 0, h: 0 },\n sm: { q: 'w=148&h=174&m=6', w: 0, h: 0 },\n lg: { q: 'w=148&h=174&m=6', w: 0, h: 0 }\n },\n lazyload: true\n }\n );\n };\n\n private readonly getMultipleDeliveryOptionSelected = (): ICheckoutShippingCartLineInfo[] => {\n const products = this.props.data.products?.result;\n const cartLineImages: ICheckoutShippingCartLineInfo[] = [];\n\n this.cartLineSelectedDeliveryOptions.map(cartLineDeliveryOption => {\n const cartLine = this.props.data.checkout.result?.checkoutCart.cart.CartLines?.find(\n (cartLine: CartLine) => cartLine.LineId === cartLineDeliveryOption.cartLineId\n );\n if (cartLine) {\n const product = products?.find((product: SimpleProduct) => product.RecordId === cartLine.ProductId);\n const imageProps: IImageProps = {\n requestContext: this.props.context.actionContext.requestContext,\n className: 'ms-checkout-shipping-address__group-images-lines-line-image',\n altText: product?.Name,\n src: product?.PrimaryImageUrl ?? '',\n fallBackSrc: getFallbackImageUrl(\n product?.ItemId,\n this.props.context.actionContext.requestContext.apiSettings,\n this.props.context.request.app?.config?.OmniChannelMedia\n ),\n gridSettings: this.props.context.request.gridSettings!,\n imageSettings: this.props.config.imageSettings ?? defaultImageSettings,\n loadFailureBehavior: 'empty'\n };\n let deliveryModeDesc = this.deliveryOptions.find(\n deliveryOption => deliveryOption.Code === cartLineDeliveryOption.selectedDeliveryOption\n )?.Description;\n if (StringExtensions.isNullOrEmpty(deliveryModeDesc)) {\n const group = this.groupDeliveryOptions.find(group => group.cartLineIds?.includes(cartLineDeliveryOption.cartLineId));\n const deliveryOption = group?.deliveryOptions.find(\n option => option.Code === cartLineDeliveryOption.selectedDeliveryOption\n );\n deliveryModeDesc = deliveryOption?.Description;\n }\n const cartLineDisplay = {\n lineId: cartLine.LineId,\n imageProps: imageProps,\n deliveryMethodDesc: deliveryModeDesc,\n requestDeliveryDate: cartLineDeliveryOption.requestDeliveryDate\n };\n cartLineImages.push(cartLineDisplay);\n }\n });\n\n return cartLineImages;\n };\n}\n\nexport default CheckoutDeliveryOptions;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../checkout-gift-card.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n disableAddGiftCard?: boolean;\n resources: {\n applyGiftCardButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On Apply Function.\n * @param onApplyGiftCard -On Apply Gift Card Function.\n * @returns Call of Apply Gift Card Function.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number Function.\n * @param onEnterGiftCardNumber -On enter gift card number Function.\n * @returns Call of on enter gift card number Function.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On Change pin event.\n * @param onEnterGiftCardPin -On enter gift card pin Function.\n * @returns Call of on enter gift card pin Function.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On Change Event.\n * @param onEnterGiftCardExp -On enter gift card function.\n * @returns Call of On enter gift card function.\n */\n// Need to filter out the month and year\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard,\n resources: {\n applyGiftCardButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-checkout-gift-card__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-checkout-gift-card__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-checkout-gift-card__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-checkout-gift-card__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-checkout-gift-card__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {applyGiftCardButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Button, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: IGiftCardExtend;\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * On remove function.\n * @param onRemoveGiftCard -Gift card number function.\n * @param giftCard -Gift card values.\n * @returns Call of onRemoveGiftCard function.\n */\nconst onRemoveHandler = (onRemoveGiftCard: (giftCardNumber: string) => void, giftCard: IGiftCardExtend) => (): void => {\n onRemoveGiftCard(giftCard.Id ?? '');\n};\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.canRemove\n * @param root0.onRemoveGiftCard\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @param root0.resources.removeGiftCardButton\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n canRemove,\n onRemoveGiftCard,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel, removeGiftCardButton }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-checkout-gift-card__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {' ('}\n {giftCardAvailableBalanceLabel}\n {` `}\n {balance}\n {')'}\n \n );\n\n const removeButton = canRemove && (\n \n );\n\n return {\n itemProps,\n id: giftCard.Id,\n selectedGiftCard,\n removeButton\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\n\nimport { getItem, IItem } from './get-item';\n\ninterface IGetListInput {\n giftCards?: IGiftCardExtend[];\n canRemove: boolean;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n removeGiftCardButton: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n onRemoveGiftCard(giftCardNumber: string): void;\n}\n\nexport interface IList {\n listProps: INodeProps;\n list: IItem[];\n}\n\nexport const getList = ({ giftCards, canRemove, resources, getFormattedPrice, onRemoveGiftCard }: IGetListInput): IList | undefined => {\n if (!giftCards || giftCards.length === 0) {\n return undefined;\n }\n\n const listProps = {\n className: 'ms-checkout-gift-card__list'\n };\n\n const list = giftCards.map(giftCard =>\n getItem({\n canRemove,\n getFormattedPrice,\n giftCard,\n onRemoveGiftCard,\n resources\n })\n );\n\n return {\n listProps,\n list\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\ninterface IGiftCardTitleProps {\n title: string;\n}\n\nconst GiftCardTitle: React.FC = ({ title }) => ;\n\nexport default GiftCardTitle;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { CheckoutModule, ErrorLocation, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport { computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { ICheckoutGiftCardData } from './checkout-gift-card.data';\nimport { ICheckoutGiftCardProps } from './checkout-gift-card.props.autogenerated';\nimport { getForm, IForm } from './components/get-form';\nimport { getList, IList } from './components/get-list';\nimport TitleCompoent from './components/title';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport * from './components/get-form';\nexport * from './components/get-item';\nexport * from './components/get-list';\n\ninterface ICheckoutGiftCardState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface ICheckoutGiftCardModuleProps extends ICheckoutGiftCardProps, IModuleStateProps {}\n\nexport interface IShowResource {\n title: React.ReactNode;\n list?: IList;\n}\n\nexport interface IAddResource {\n form: IForm;\n list?: IList;\n}\n\nexport interface ICheckoutGiftCardViewProps extends ICheckoutGiftCardProps<{}>, ICheckoutGiftCardState {\n className?: string;\n\n showGiftCard?: IShowResource;\n addGiftCard?: IAddResource;\n\n checkoutGiftCardProps: IModuleProps;\n couldPaidByGiftCard?: boolean;\n isEnabled?: boolean;\n checkoutErrorRef?: React.RefObject;\n onEdit?(): void;\n onCancel?(): void;\n onSubmit?(): void;\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardNumber: string): void;\n enterGiftCardExp?(giftCardNumber: string): void;\n removeGiftCard?(giftCardNumber: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * CheckoutGiftCard component.\n * @extends {React.Component, ICheckoutGiftCardState>}\n */\n@observer\nexport class CheckoutGiftCard extends React.Component {\n public state: ICheckoutGiftCardState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n @computed get isDataReady(): boolean {\n return (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS';\n }\n\n @computed get getLoyaltyAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.loyaltyAmount) {\n return 0;\n }\n return checkoutState.loyaltyAmount;\n }\n\n @computed get getCustomerAccountAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n return checkoutState && checkoutState.customerAccountAmount ? checkoutState.customerAccountAmount : 0;\n }\n\n @computed get getGiftCardTotalAmount(): number {\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState || !checkoutState.giftCardExtends) {\n return 0;\n }\n return checkoutState.giftCardExtends.reduce((count: number, giftCard: IGiftCardExtend) => {\n const balance: number = giftCard.Balance || 0;\n return count + balance;\n }, 0);\n }\n\n @computed get disableAddGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return true;\n }\n return (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getGiftCardTotalAmount <= 0;\n }\n\n @computed get shouldPayGiftCard(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card card when loyalty points do not cover the total amount\n const amountDue = (cart.TotalAmount || 0) - this.getLoyaltyAmount - this.getCustomerAccountAmount;\n return amountDue > 0;\n }\n\n @computed get hasSelectedItem(): boolean {\n const {\n data: { checkout }\n } = this.props;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n return !!giftCards && giftCards.length > 0;\n }\n\n public componentDidMount(): void {\n when(\n () => this.isDataReady,\n () => {\n this.init();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutGiftCard && checkoutError.errorMessage) {\n this.setError(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutGiftCard) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutGiftCardModuleProps, nextState: ICheckoutGiftCardState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n moduleState: { isReady },\n data: { checkout },\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n const giftCards = checkout.result && checkout.result.giftCardExtends;\n const additionalFields = showAdditionalFields;\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this.isEnabled() || (!this.shouldPayGiftCard && !isReady)) {\n this.props.context.telemetry.error('Checkout giftcard content is empty, module wont render');\n return null;\n }\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.GiftCard === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout gift card module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-checkout-gift-card', className, isReady ? 'show' : 'add');\n\n const viewProps: ICheckoutGiftCardViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n checkoutErrorRef: this.checkoutErrorRef,\n\n checkoutGiftCardProps: { moduleProps: this.props, className: moduleClassName },\n couldPaidByGiftCard: this.couldPaidByGiftCard(),\n isEnabled: this.isEnabled(),\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n enterGiftCardNumber: this.enterGiftCardNumber,\n enterGiftCardPin: this.enterGiftCardPin,\n enterGiftCardExp: this.enterGiftCardExp,\n removeGiftCard: this.removeGiftCard,\n applyGiftCard: this.applyGiftCard,\n showGiftCard: isReady\n ? {\n title: ,\n list: getList({\n canRemove: false,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined,\n addGiftCard: !isReady\n ? {\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n onEnterGiftCardNumber: this.enterGiftCardNumber,\n onEnterGiftCardPin: this.enterGiftCardPin,\n onEnterGiftCardExp: this.enterGiftCardExp,\n onApplyGiftCard: this.applyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n disableAddGiftCard: this.disableAddGiftCard\n }),\n list: getList({\n canRemove: true,\n getFormattedPrice: this.getFormattedPrice,\n giftCards: giftCards && [...giftCards], // Note: ReadOnly Checkout State GiftCard[] is not assignable to GiftCard[] type\n onRemoveGiftCard: this.removeGiftCard,\n resources\n })\n }\n : undefined\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly init = (): void => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const giftCards = this.props.data.checkout.result?.giftCardExtends;\n if (giftCards && giftCards.length > 0) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly couldPaidByGiftCard = (): boolean => {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart?.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use gift card when it is not free\n return (cart.TotalAmount || 0) > 0;\n };\n\n private readonly isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return this.couldPaidByGiftCard();\n };\n\n private readonly onEdit = (): void => {\n this.props.telemetry.information('Payment section gift card onEdit is called.');\n\n // Show add gift card form\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = (): void => {\n this.props.telemetry.information('Payment section gift card onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = (): void => {\n this.props.telemetry.information('Payment section gift card onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n if (this.hasSelectedItem) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this.clearError();\n };\n\n private readonly enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this.clearError();\n };\n\n private readonly enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this.clearError();\n };\n\n private readonly setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.props.moduleState.setHasError(true);\n this.setState({\n errorMessage\n });\n };\n\n private readonly clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly removeGiftCard = async (giftCardNumber: string): Promise => {\n this.props.telemetry.information('Payment section gift card remove is called.');\n\n const checkoutState = this.props.data.checkout.result;\n if (!checkoutState) {\n return;\n }\n\n await checkoutState.removeGiftCard({ giftCardNumber });\n };\n\n private readonly applyGiftCard = async (): Promise => {\n this.props.telemetry.information('Payment section gift card apply is called.');\n\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const checkoutState = this.props.data.checkout.result;\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this.getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this.getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (checkoutState && giftCard) {\n await checkoutState.addGiftCard({\n giftCard,\n additionalProperties: { Pin: giftCardPin, ExpirationDate: giftCardExp, TenderTypeId: tenderTypeId }\n });\n this.clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false\n });\n this.props.telemetry.information('Payment section fetching gift card is failed.');\n };\n\n private readonly findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { noBalanceError, invalidCardInfoError, invalidCardTypeError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n const internalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this.findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this.setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (isPinRequired && giftCardPin === '') {\n this.setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this.setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this.setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this.setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, duplicatedCodeError, invalidCodeError },\n data: { checkout }\n } = this.props;\n\n if (!giftCardNumber) {\n this.setError(emptyInputError);\n return undefined;\n }\n\n const isDuplicated = checkout.result && checkout.result.giftCardExtends.some((card: GiftCard) => card.Id === giftCardNumber);\n if (isDuplicated) {\n this.setError(duplicatedCodeError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this.setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this.setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default withModuleState(CheckoutGiftCard);\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node, Waiting } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutViewProps,\n ILineItem,\n ILineItemDeliveryGroup,\n ILineItems,\n IOrderSummary,\n IPickUpAtStore,\n IEmailDelivery,\n IInvoicePaymentSummary\n} from './index';\n\nexport const PickUpAtStoreComponent: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const EmailDeliveryComponent: React.FC = ({ EmailDelivery, label }) => {label};\n\nexport const LineItemComponent: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {pickUpAtStore && }\n {emailDelivery && }\n \n);\n\nexport const LineItemGroupComponent: React.FC = ({ LineItemDeliveryGroup, LineItemList, heading, lineItems }) => (\n \n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemGroupComponentWithMultiplePickUp: React.FC = ({\n LineItemDeliveryGroup,\n LineItemList,\n heading,\n lineItems,\n lineItemWraper,\n lineItemWraperIcon\n}) => (\n \n {lineItemWraperIcon}\n {lineItemWraper}\n {heading}\n \n {lineItems.map(lineItem => (\n \n ))}\n \n \n);\n\nexport const LineItemComponentWithMultiplePickUp: React.FC = ({ LineItem, item, pickUpAtStore, emailDelivery }) => (\n \n {item}\n {emailDelivery && }\n \n);\n\nexport const PickUpAtStoreComponentWithMultiplePickUp: React.FC = ({ PickUpAtStore, label, location }) => (\n \n {label}\n {location}\n \n);\n\nexport const LineItemsComponent: React.FC = ({\n LineItems,\n Header,\n heading,\n editLink,\n itemsForPickup,\n itemsForShip,\n itemsForEmail,\n itemsGroupWithMulitplePickupMode\n}) => (\n \n \n {heading}\n {editLink}\n \n {itemsGroupWithMulitplePickupMode === undefined && itemsForPickup && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForEmail && }\n {itemsGroupWithMulitplePickupMode === undefined && itemsForShip && }\n {itemsGroupWithMulitplePickupMode !== undefined\n ? itemsGroupWithMulitplePickupMode.map((item, index) => {\n return ;\n })\n : null}\n \n);\n\nconst OrderSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.subtotal}\n {lines.shipping}\n {lines.otherCharge}\n {lines.tax}\n {lines.totalDiscounts}\n {lines.loyalty}\n {lines.customerAccount}\n {lines.giftCard}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst PaymentSummaryComponent: React.FC = ({ heading, lines }) => (\n
\n {heading}\n
\n {lines && (\n <>\n {lines.invoices}\n {lines.giftCard}\n {lines.loyalty}\n {lines.orderTotal}\n \n )}\n
\n
\n);\n\nconst CheckoutView: React.FC = props => {\n const {\n isPaymentVerificationRedirection,\n shouldEnableSinglePaymentAuthorizationCheckout,\n canShow,\n checkoutProps,\n headerProps,\n hasSalesOrder,\n hasInvoiceLine,\n bodyProps,\n mainProps,\n mainControlProps,\n sideProps,\n sideControlFirstProps,\n sideControlSecondProps,\n termsAndConditionsProps,\n orderConfirmation,\n loading,\n alert,\n title,\n guidedForm,\n orderSummary,\n invoicePaymentSummary,\n lineItems,\n placeOrderButton,\n termsAndConditions,\n keepShoppingButton,\n checkoutExpressPaymentContainer,\n checkoutErrorRef\n } = props;\n\n return (\n \n {!hasSalesOrder && !checkoutExpressPaymentContainer && {title}}\n {!hasSalesOrder && isPaymentVerificationRedirection && shouldEnableSinglePaymentAuthorizationCheckout && !alert && !loading && (\n \n )}\n {!hasSalesOrder && (\n \n {loading}\n {alert}\n {canShow && (\n <>\n \n {checkoutExpressPaymentContainer}\n {checkoutExpressPaymentContainer && {title}}\n {guidedForm}\n {termsAndConditions}\n \n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n {!hasInvoiceLine\n ? orderSummary && \n : invoicePaymentSummary && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n {lineItems && }\n \n {termsAndConditions}\n {placeOrderButton}\n {keepShoppingButton}\n \n \n \n )}\n \n )}\n {hasSalesOrder && orderConfirmation}\n \n );\n};\n\nexport default CheckoutView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyInput {\n className: string;\n type: string;\n value: string | number;\n min: number;\n max: number;\n ariaValueMax: number;\n ariaValueMin: number;\n ariaValueNow: number;\n id: string;\n step: string;\n onChange(event: React.ChangeEvent): void;\n onBlur(event: React.FocusEvent): void;\n}\n\nconst AdressInput: React.FC = ({\n className,\n type,\n value,\n min,\n max,\n step,\n ariaValueMax,\n ariaValueMin,\n ariaValueNow,\n onChange,\n onBlur,\n id\n}) => (\n \n);\n\nexport default AdressInput;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyLabelProps {\n className: string;\n text: string;\n htmlFor: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @param root0.htmlFor\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyLabel: React.FC = ({ className, text, htmlFor }) => {\n return (\n \n );\n};\n\nexport default CheckoutLoyaltyLabel;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport * as React from 'react';\n\nexport interface ICheckoutLoyaltyTextProps {\n className: string;\n text?: string;\n}\n\n/**\n * AddPaymentForm SFC.\n * @param root0\n * @param root0.className\n * @param root0.text\n * @extends {React.FC}\n */\nconst CheckoutLoyaltyText: React.FC = ({ className, text }) => {\n if (!text) {\n return null;\n }\n\n return {text};\n};\n\nexport default CheckoutLoyaltyText;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { callActionOrExecute } from '@msdyn365-commerce/retail-proxy';\nimport { createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput } from '@msdyn365-commerce/retail-proxy/dist/DataActions/CartsDataActions.g';\nimport { LoyaltyPointRedemptionEstimate, LoyaltyRewardPoint } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleStateProps, withModuleState, EnabledPaymentsForOBO } from '@msdyn365-commerce-modules/checkout-utilities';\nimport { GetLoyaltyTransactionEstimationInput } from '@msdyn365-commerce-modules/retail-actions';\nimport { Button, Drawer, Heading, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport { CheckoutModule, ErrorLocation } from '@msdyn365-commerce/global-state';\nimport classnames from 'classnames';\nimport { action, computed, reaction, when } from 'mobx';\nimport { observer } from 'mobx-react';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyData } from './checkout-loyalty.data';\nimport { ICheckoutLoyaltyProps } from './checkout-loyalty.props.autogenerated';\nimport InputComponent from './components/checkout-loyalty-input';\nimport LabelComponent from './components/checkout-loyalty-label';\nimport TextComponent from './components/checkout-loyalty-text';\nimport { ErrorComponent } from '../../common/error';\nimport { focusOnCheckoutError } from '../../checkout-errors';\n\nexport interface ICheckoutLoyaltyState {\n dollarsApplied: number;\n isFetchingLoyaltyCard: boolean;\n errorMessage?: string;\n}\n\nexport interface ICheckoutLoyaltyModuleProps extends ICheckoutLoyaltyProps, IModuleStateProps {}\n\nexport interface ICheckoutLoyaltyViewState {\n isShowLoyalty: boolean;\n isShowAddLoyalty: boolean;\n}\n\nexport interface ICheckoutLoyaltyShow {\n heading: React.ReactNode;\n coveredAmountText: React.ReactNode;\n amount: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyRewardPoint {\n checkoutLoyaltyRewardPoint: INodeProps;\n key: string;\n title: React.ReactNode;\n availablePointsText: React.ReactNode;\n activePoints: React.ReactNode;\n expiringPointsText: React.ReactNode;\n expiringPoints: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyAdd {\n heading: React.ReactNode;\n cardNumber: React.ReactNode;\n drawer: INodeProps;\n rewardPoints: ICheckoutLoyaltyRewardPoint[];\n loyaltyAmountContainer: INodeProps;\n appliedLoyaltyAmountContainer: INodeProps;\n loyaltyAmountLabel: React.ReactNode;\n loyaltyAmountInput: React.ReactNode;\n loyaltyAmountApplyButton: React.ReactNode;\n showAppliedAmount: boolean;\n loyaltyAmountAppliedText: React.ReactNode;\n loyaltyAmountAppliedPrice: React.ReactNode;\n loyaltyAmountRemoveButton: React.ReactNode;\n}\n\nexport interface ICheckoutLoyaltyViewProps extends ICheckoutLoyaltyModuleProps {\n checkoutLoyalty: IModuleProps;\n viewState: ICheckoutLoyaltyViewState;\n showLoyalty: ICheckoutLoyaltyShow;\n addLoyalty: ICheckoutLoyaltyAdd;\n alert?: React.ReactNode;\n checkoutErrorRef?: React.RefObject;\n}\n\n/**\n *\n * CheckoutLoyalty component.\n * @extends {React.Component>}\n */\n// @ts-expect-error\n\n@withModuleState\n@observer\nclass CheckoutLoyalty extends React.Component {\n private readonly _dialogToggleRef: React.RefObject | undefined;\n\n private readonly moduleClassName: string = 'ms-checkout-loyalty';\n\n private readonly _defaultLoyaltyPoints: number = 0;\n\n private readonly checkoutErrorRef: React.RefObject = React.createRef();\n\n constructor(props: ICheckoutLoyaltyModuleProps) {\n super(props);\n this._dialogToggleRef = React.createRef();\n this._applyLoyaltyPoints = this._applyLoyaltyPoints.bind(this);\n this._removeLoyaltyPoints = this._removeLoyaltyPoints.bind(this);\n this._onInputChange = this._onInputChange.bind(this);\n this._onBlur = this._onBlur.bind(this);\n this.state = { dollarsApplied: this.maxDollars, isFetchingLoyaltyCard: false };\n }\n\n @computed get shouldPayLoyalty(): boolean {\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n if (!cart) {\n return false;\n }\n\n // Use loyalty when cart is not full of free items\n const amountDue = cart.TotalAmount || 0;\n return amountDue > 0;\n }\n\n @computed get isDataReady(): boolean {\n return (\n (this.props.data.checkout.result && this.props.data.checkout.status) === 'SUCCESS' &&\n (this.props.data.loyaltyCard && this.props.data.loyaltyCard.status) !== 'LOADING' &&\n (this.props.data.loyaltyTransactionEstimation && this.props.data.loyaltyTransactionEstimation.status) !== 'LOADING'\n );\n }\n\n @computed get maxDollars(): number {\n return this.props.data.loyaltyTransactionEstimation.result &&\n this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n ? this.props.data.loyaltyTransactionEstimation.result.MaxCurrencyValueOfLoyaltyPoints\n : 0;\n }\n\n public async componentDidMount(): Promise {\n when(\n () => this.isDataReady,\n async () => {\n await this.init();\n }\n );\n\n reaction(\n () => this.props.data.checkout.result && this.props.data.checkout.result.checkoutCart.cart,\n async () => {\n this._updateEstimate();\n }\n );\n\n reaction(\n () => this.props.data.loyaltyCard.result,\n async () => {\n this._updateLoyalty();\n }\n );\n\n if (this.props.data.checkout.result?.shouldEnableCheckoutErrorDisplayMessaging) {\n reaction(\n () => this.props.data.checkout.result?.checkoutError,\n checkoutError => {\n if (checkoutError && checkoutError.errorLocation === ErrorLocation.CheckoutLoyalty && checkoutError.errorMessage) {\n this._setErrorMessage(checkoutError.errorMessage);\n }\n }\n );\n\n reaction(\n () => this.props.data.checkout.result?.checkoutErrorFocus,\n checkoutErrorFocus => {\n if (checkoutErrorFocus === CheckoutModule.CheckoutLoyalty) {\n focusOnCheckoutError(this.checkoutErrorRef, this.props.context.actionContext);\n }\n }\n );\n }\n }\n\n public shouldComponentUpdate(nextProps: ICheckoutLoyaltyModuleProps, nextState: ICheckoutLoyaltyState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config,\n resources,\n renderView,\n moduleState: { hasError, isReady }\n } = this.props;\n\n if (this.props.context.request.user.isOBORequest && EnabledPaymentsForOBO.Loyalty === 0) {\n this.props.context.telemetry.information('isOBORequest is enabled, Checkout loyalty module wont render');\n return null;\n }\n\n if (\n this.props.data.loyaltyCard &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n ) {\n const loyaltyCard = this.props.data.loyaltyCard.result;\n const checkoutState = this.props.data.checkout.result;\n let isShowLoyalty = false;\n const errorMessage = this.state.errorMessage;\n\n if (isReady) {\n if (!checkoutState || checkoutState.loyaltyAmount === 0) {\n return null;\n }\n isShowLoyalty = true;\n }\n const channelConfig = this.props.context.request.channel;\n const viewProps = {\n ...this.props,\n checkoutErrorRef: this.checkoutErrorRef,\n viewState: {\n isShowLoyalty,\n isShowAddLoyalty: !isReady && !config.disableAddLoyaltyComponent\n },\n alert: hasError && errorMessage && ,\n checkoutLoyalty: {\n moduleProps: this.props,\n className: classnames(\n this.moduleClassName,\n { [`${this.moduleClassName}__applied`]: isShowLoyalty },\n this.props.config.className\n )\n },\n showLoyalty: {\n heading: ,\n coveredAmountText: (\n \n ),\n amount: (\n \n )\n },\n addLoyalty: {\n heading: ,\n drawer: {\n tag: Drawer,\n className: `${this.moduleClassName}__drawer`,\n toggleButtonText: this._drawerHeader(),\n openGlyph: `${this.moduleClassName}__drawer-open`,\n closeGlyph: `${this.moduleClassName}__drawer-close`,\n glyphPlacement: 'end'\n },\n cardNumber: ,\n rewardPoints:\n loyaltyCard.RewardPoints &&\n loyaltyCard.RewardPoints.map((points, index) => {\n return this._renderPointSection(points, resources.availablePointsLabel, resources.expiringLoyaltyPointsLabel);\n }),\n loyaltyAmountContainer: {\n className: `${this.moduleClassName}__amount`\n },\n appliedLoyaltyAmountContainer: {\n className: `${this.moduleClassName}__applied-amount`\n },\n loyaltyAmountLabel: (\n \n ),\n loyaltyAmountInput: (\n \n ),\n loyaltyAmountApplyButton: (\n this.maxDollars ||\n this.state.dollarsApplied <= 0 ||\n isNaN(this.state.dollarsApplied) ||\n this.state.isFetchingLoyaltyCard\n }\n >\n {this.props.resources.applyCheckoutLoyaltyPaymentText}\n \n ),\n showAppliedAmount: checkoutState && checkoutState.loyaltyAmount > 0,\n loyaltyAmountAppliedText: (\n \n ),\n loyaltyAmountAppliedPrice: (\n \n ),\n loyaltyAmountRemoveButton: (\n \n {this.props.resources.removeCheckoutLoyaltyPaymentText}\n \n )\n }\n };\n\n return renderView(viewProps) as React.ReactElement;\n }\n this.props.context.telemetry.error('Checkout loyalty content is empty, module wont render');\n return null;\n }\n\n private _drawerHeader(): JSX.Element {\n const channelConfig = this.props.context.request.channel;\n return (\n <>\n

{this.props.resources.loyaltyCoveredAmountText}

\n \n \n );\n }\n\n private _renderPointSection(\n point: LoyaltyRewardPoint,\n loyaltyCoveredAmountText: string,\n expiringLoyaltyPointsLabel: string\n ): ICheckoutLoyaltyRewardPoint {\n return {\n key: point.RewardPointId || '',\n checkoutLoyaltyRewardPoint: {\n className: `${this.moduleClassName}__program`\n },\n title: ,\n availablePointsText: ,\n activePoints: (\n \n ),\n expiringPointsText: ,\n expiringPoints: (\n \n )\n };\n }\n\n private readonly init = async (): Promise => {\n this.props.moduleState.init({\n onEdit: this.onEdit,\n onCancel: this.onCancel,\n onSubmit: this.onSubmit,\n isRequired: false,\n ...(!this.isEnabled() && { status: 'disabled' })\n });\n\n const savedLoyaltyAmount = this.props.data.checkout.result?.loyaltyAmount;\n if (savedLoyaltyAmount) {\n this.props.moduleState.onReady();\n } else if (this.props.data.checkout.result?.isPaymentVerificationRedirection) {\n this.props.moduleState.onSkip();\n } else if (\n this.props.data.loyaltyCard.result &&\n this.props.data.checkout.result &&\n this.props.data.loyaltyCard.result.CardNumber !== this.props.data.checkout.result.checkoutCart.cart.LoyaltyCardId\n ) {\n this.props.data.checkout.result.checkoutCart\n .updateLoyaltyCardId({ loyaltyCardNumber: this.props.data.loyaltyCard.result.CardNumber })\n .catch(error => {\n if (this.context.telemetry) {\n this.context.telemetry.warning(error);\n this.context.telemetry.debug('Unable to update the loyalty card');\n }\n });\n }\n };\n\n private readonly onEdit = () => {\n this.props.telemetry.information('Payment section loyalty onEdit is called.');\n\n this.props.moduleState.onUpdating();\n };\n\n private readonly onCancel = () => {\n this.props.telemetry.information('Payment section loyalty onCancel is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly onSubmit = () => {\n this.props.telemetry.information('Payment section loyalty onSubmit is called.');\n\n this.handleCancelOrSubmit();\n };\n\n private readonly handleCancelOrSubmit = () => {\n const checkoutState = this.props.data.checkout.result;\n if (checkoutState && checkoutState.loyaltyAmount > 0) {\n // Show summary screen\n this.props.moduleState.onReady();\n } else {\n // Skip the module\n this.props.moduleState.onSkip();\n }\n };\n\n private readonly isEnabled = () => {\n return (\n this.props.context.request.user.isAuthenticated &&\n this.props.data.loyaltyCard.result &&\n this.props.data.loyaltyCard.result.CardNumber &&\n this.shouldPayLoyalty\n );\n };\n\n private async _applyLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty apply button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: Number.parseFloat(this.state.dollarsApplied.toString()) });\n this.setState({\n isFetchingLoyaltyCard: true\n });\n }\n\n private async _removeLoyaltyPoints(): Promise {\n this.props.telemetry.information('Payment section loyalty remove button onClick is called.');\n\n const checkoutState = this.props.data.checkout.result;\n\n if (!checkoutState) {\n return;\n }\n\n this._clearError();\n await checkoutState.updateLoyaltyAmount({ newAmount: 0 });\n this.setState({\n dollarsApplied: 0\n });\n }\n\n private _onInputChange(event: React.ChangeEvent): void {\n const value = event.currentTarget.value;\n this.setState({ dollarsApplied: value.length > 0 ? Number(value) : Number.parseFloat(value), isFetchingLoyaltyCard: false });\n }\n\n private _onBlur(event: React.FocusEvent): void {\n const num = Number.parseFloat(event.currentTarget.value).toFixed(2);\n const element = document.getElementById(`${this.props.id}-label`) as HTMLInputElement;\n if (element && num) {\n element.value = num;\n this.setState({ dollarsApplied: Number.parseFloat(num) });\n }\n }\n\n private _updateLoyalty(): void {\n if (this.props.moduleState.isDisabled && this.isEnabled()) {\n this._updateEstimate();\n this.props.moduleState.onUpdating();\n }\n }\n\n private _updateEstimate(): void {\n const card = this.props.data.loyaltyCard.result;\n const checkout = this.props.data.checkout.result;\n const cart = this.props.data.checkout.result ? this.props.data.checkout.result.checkoutCart.cart : undefined;\n const channelConfig = this.props.context.request.channel;\n if (card && card.CardNumber && cart && channelConfig) {\n const currencyCode = channelConfig.Currency || '';\n const loyalPointsRequest = createGetMaxLoyaltyPointsToRedeemForTransactionBalanceInput(cart.Id, card.CardNumber, currencyCode);\n\n // @ts-expect-error\n // Due to bug 23214358, this is getting improperly cached. Need to turn on cache bypass for now to work around issue\n loyalPointsRequest._query.options.bypassCache = 'get';\n\n callActionOrExecute(loyalPointsRequest, this.props.context.actionContext)\n .then(async points => {\n this.props.context.actionContext.update(\n new GetLoyaltyTransactionEstimationInput(this.props.context.request.apiSettings),\n points\n );\n const newMaxPoints = points.MaxCurrencyValueOfLoyaltyPoints ?? this._defaultLoyaltyPoints;\n\n // If points are already applied, ensure you don't apply more points than max\n if (checkout && checkout.loyaltyAmount > newMaxPoints) {\n await checkout.updateLoyaltyAmount({ newAmount: newMaxPoints });\n }\n\n this.setState({ dollarsApplied: newMaxPoints, isFetchingLoyaltyCard: false });\n })\n .catch(error => {\n this.props.context.actionContext.telemetry.exception(error);\n this.props.context.actionContext.telemetry.debug('Error getting Loyalty Point Redemption Estimate');\n });\n }\n }\n\n @action\n private readonly _setErrorMessage = (errorMessage: string): void => {\n this.props.telemetry.error(errorMessage);\n this.props.moduleState.setHasError(true);\n this.props.moduleState.onUpdating();\n this.setState({\n errorMessage\n });\n };\n\n private readonly _clearError = (): void => {\n this.props.moduleState.setHasError(false);\n this.setState({\n errorMessage: ''\n });\n };\n}\n\nexport default CheckoutLoyalty;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Alert, Button, INodeProps, NodeTag } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { showAdditionalFields } from '../gift-card-balance-check.props.autogenerated';\n\nexport interface IGetFormInput {\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n inputRef?: React.RefObject;\n inputPinRef?: React.RefObject;\n inputExpRef?: React.RefObject;\n supportExternalGiftCard?: boolean;\n additionalFields?: showAdditionalFields;\n resources: {\n balanceCheckButton: string;\n giftCardFormLabel: string;\n giftCardNumberLabel: string;\n giftCardPinLabel: string;\n giftCardExpLabel: string;\n giftCardAlertLabel: string;\n giftCardPinPlaceholderText: string;\n giftCardExpPlaceholderText: string;\n };\n onEnterGiftCardNumber(giftCardNumber: string): void;\n onEnterGiftCardPin(giftCardPin: string): void;\n onEnterGiftCardExp(giftCardExp: string): void;\n onApplyGiftCard(): Promise;\n}\n\nexport interface IForm {\n formProps: INodeProps;\n label: React.ReactNode;\n inputPinLabel: React.ReactNode;\n inputExpLabel: React.ReactNode;\n alert: React.ReactNode;\n inputProps: INodeProps;\n inputNumProps: INodeProps;\n inputPinProps: INodeProps;\n inputExpProps: INodeProps;\n inputNumber: React.ReactNode;\n inputPin: React.ReactNode;\n inputExp: React.ReactNode;\n applyButton: React.ReactNode;\n supportExternalGiftCard: boolean | undefined;\n showGiftCardPinInput: boolean | undefined;\n showGiftCardExpInput: boolean | undefined;\n alertFieldLabel: React.ReactNode;\n}\n\n/**\n * On apply function.\n * @param onApplyGiftCard -On apply gift card.\n * @returns Apply gift card.\n */\nconst onApplyHandler = (onApplyGiftCard: () => Promise) => async (event: React.SyntheticEvent): Promise => {\n event.preventDefault();\n await onApplyGiftCard();\n};\n\n/**\n * On change number function.\n * @param onEnterGiftCardNumber -On enter gift card number.\n * @returns On gift card enter pin function result.\n */\nconst onChangeNumberHandler = (onEnterGiftCardNumber: (giftCardNumber: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardNumber(value);\n};\n\n/**\n * On change pin function.\n * @param onEnterGiftCardPin -On enter gift card pin.\n * @returns On enter gift card pin function result.\n */\nconst onChangePinHandler = (onEnterGiftCardPin: (giftCardPin: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardPin(value);\n};\n\n/**\n * On change exp function.\n * @param onEnterGiftCardExp -On enter gift card.\n * @returns On enter gift card function result.\n */\nconst onChangeExpHandler = (onEnterGiftCardExp: (giftCardExp: string) => void) => (event: React.ChangeEvent) => {\n const value = (event.target.value || '').replace(new RegExp('[<>]', 'gi'), '');\n onEnterGiftCardExp(value);\n};\n\nexport const getForm = (options: IGetFormInput): IForm => {\n const {\n errorMessage,\n inputRef,\n inputPinRef,\n inputExpRef,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n onEnterGiftCardNumber,\n onEnterGiftCardPin,\n onEnterGiftCardExp,\n onApplyGiftCard,\n supportExternalGiftCard,\n additionalFields,\n resources: {\n balanceCheckButton,\n giftCardFormLabel,\n giftCardNumberLabel,\n giftCardPinLabel,\n giftCardExpLabel,\n giftCardAlertLabel,\n giftCardPinPlaceholderText,\n giftCardExpPlaceholderText\n }\n } = options;\n\n const formProps = {\n className: classnames('ms-gift-card-balance-check__form', { 'is-invalid': !!errorMessage }),\n onSubmit: onApplyHandler(onApplyGiftCard),\n tag: 'form' as NodeTag\n };\n\n const label = (\n \n );\n\n const inputPinLabel = (\n \n );\n\n const inputExpLabel = (\n \n );\n\n const alertFieldLabel = (\n \n );\n\n const alert = (\n \n {errorMessage}\n \n );\n\n const inputProps = {\n className: 'ms-gift-card-balance-check__input-fields'\n };\n\n const inputNumProps = {\n className: 'ms-gift-card-balance-check__input-num-fields'\n };\n\n const inputPinProps = {\n className: 'ms-gift-card-balance-check__input-pin-fields'\n };\n\n const inputExpProps = {\n className: 'ms-gift-card-balance-check__input-exp-fields'\n };\n\n const inputNumber = (\n \n );\n\n const inputPin = (\n \n );\n\n const inputExp = (\n \n );\n\n const applyButton = (\n \n {balanceCheckButton}\n \n );\n\n let showGiftCardPinInput = false;\n let showGiftCardExpInput = false;\n\n switch (additionalFields) {\n case showAdditionalFields.pin:\n showGiftCardPinInput = true;\n break;\n case showAdditionalFields.expirationDate:\n showGiftCardExpInput = true;\n break;\n case showAdditionalFields.pinAndExpirationDate:\n showGiftCardPinInput = true;\n showGiftCardExpInput = true;\n break;\n default:\n }\n\n return {\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { GiftCard } from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IGetItemInput {\n giftCard: GiftCard;\n resources: {\n enteredGiftCardLabel: string;\n giftCardAvailableBalanceLabel: string;\n };\n getFormattedPrice(price?: number, currencyCode?: string): string;\n}\n\nexport interface IItem {\n itemProps: INodeProps;\n id?: string;\n selectedGiftCard: React.ReactNode;\n removeButton?: React.ReactNode;\n}\n\n/**\n * GiftCardItem component.\n * @param root0\n * @param root0.giftCard\n * @param root0.getFormattedPrice\n * @param root0.resources\n * @param root0.resources.enteredGiftCardLabel\n * @param root0.resources.giftCardAvailableBalanceLabel\n * @extends {React.PureComponent}\n */\nexport const getItem = ({\n giftCard,\n getFormattedPrice,\n resources: { enteredGiftCardLabel, giftCardAvailableBalanceLabel }\n}: IGetItemInput): IItem => {\n const balance = getFormattedPrice(giftCard.Balance, giftCard.CardCurrencyCode);\n const giftCardLast4Digit = (giftCard.Id || '').substr(-4);\n\n const itemProps = {\n className: 'ms-gift-card-balance-check__item'\n };\n\n const selectedGiftCard = (\n \n {enteredGiftCardLabel}\n {` `}\n {giftCardLast4Digit}\n {` `}({giftCardAvailableBalanceLabel}\n {` `}\n {balance})\n \n );\n\n return {\n itemProps,\n id: giftCard && giftCard.Id,\n selectedGiftCard\n };\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n getGiftCardAsync,\n getTenderTypesAsync,\n resolveCardTypesAsync\n} from '@msdyn365-commerce/retail-proxy/dist/DataActions/StoreOperationsDataActions.g';\nimport {\n CardType,\n CardTypeInfo,\n GiftCard,\n RetailOperation,\n TenderType\n} from '@msdyn365-commerce/retail-proxy/dist/Entities/CommerceTypes.g';\nimport { IModuleProps } from '@msdyn365-commerce-modules/utilities';\nimport classname from 'classnames';\nimport * as React from 'react';\n\nimport { OPERATIONS } from '../checkout';\nimport { getForm, IForm } from './components/get-form';\nimport { getItem, IItem } from './components/get-item';\nimport { IGiftCardBalanceCheckProps } from './gift-card-balance-check.props.autogenerated';\n\ninterface IGiftCardBalanceCheckState {\n isFetchingGiftCard: boolean;\n errorMessage: string;\n giftCardNumber: string;\n giftCardPin: string;\n giftCardExp: string;\n giftCard?: GiftCard;\n}\n\nenum SupportedGiftCardType {\n Internal = 'internal',\n External = 'external',\n Both = 'both'\n}\n\nexport interface IGiftCardBalanceCheckModuleProps extends IGiftCardBalanceCheckProps<{}> {}\n\nexport interface IGiftCardBalanceCheckViewProps extends IGiftCardBalanceCheckProps<{}>, IGiftCardBalanceCheckState {\n className?: string;\n\n form: IForm;\n item?: IItem;\n\n giftCardBalanceCheckProps: IModuleProps;\n\n enterGiftCardNumber?(giftCardNumber: string): void;\n enterGiftCardPin?(giftCardPin: string): void;\n enterGiftCardExp?(giftCardExp: string): void;\n applyGiftCard?(): void;\n}\n\n/**\n *\n * GiftCardBalanceCheck component.\n * @extends {React.Component}\n */\nexport class GiftCardBalanceCheck extends React.Component {\n public state: IGiftCardBalanceCheckState = {\n isFetchingGiftCard: false,\n errorMessage: '',\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: ''\n };\n\n private readonly inputRef: React.RefObject = React.createRef();\n\n private readonly inputPinRef: React.RefObject = React.createRef();\n\n private readonly inputExpRef: React.RefObject = React.createRef();\n\n public shouldComponentUpdate(nextProps: IGiftCardBalanceCheckModuleProps, nextState: IGiftCardBalanceCheckState): boolean {\n if (this.state === nextState && this.props.data === nextProps.data) {\n return false;\n }\n return true;\n }\n\n public render(): JSX.Element | null {\n const {\n config: { className, showAdditionalFields },\n resources\n } = this.props;\n const { errorMessage, giftCardNumber, giftCardPin, giftCardExp } = this.state;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!this._isEnabled()) {\n this.props.context.telemetry.error('Gift card balance check is not supported, module wont render');\n return null;\n }\n\n const supportExternalGiftCard = supportedGiftCardType !== SupportedGiftCardType.Internal;\n\n const moduleClassName = classname('ms-gift-card-balance-check', className);\n\n const viewProps: IGiftCardBalanceCheckViewProps = {\n ...this.props,\n ...this.state,\n className: moduleClassName,\n giftCardBalanceCheckProps: { moduleProps: this.props, className: moduleClassName },\n\n enterGiftCardNumber: this._enterGiftCardNumber,\n enterGiftCardPin: this._enterGiftCardPin,\n enterGiftCardExp: this._enterGiftCardExp,\n applyGiftCard: this._applyGiftCard,\n\n form: getForm({\n errorMessage,\n giftCardNumber,\n giftCardPin,\n giftCardExp,\n inputRef: this.inputRef,\n inputPinRef: this.inputPinRef,\n inputExpRef: this.inputExpRef,\n resources,\n supportExternalGiftCard,\n additionalFields: showAdditionalFields,\n onEnterGiftCardNumber: this._enterGiftCardNumber,\n onEnterGiftCardPin: this._enterGiftCardPin,\n onEnterGiftCardExp: this._enterGiftCardExp,\n onApplyGiftCard: this._applyGiftCard\n }),\n item:\n this.state.giftCard &&\n getItem({\n giftCard: this.state.giftCard,\n getFormattedPrice: this._getFormattedPrice,\n resources\n })\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private readonly _isEnabled = (): boolean => {\n if (\n !this.props.context.request.user.isAuthenticated &&\n this.props.context.app.config.giftCardSupported !== SupportedGiftCardType.External &&\n !this.props.config.shouldBeEnabledForGuest\n ) {\n return false;\n }\n return true;\n };\n\n private readonly _getFormattedPrice = (price: number = 0, currencyCode: string = 'USD'): string => {\n return this.props.context.cultureFormatter.formatCurrency(price, currencyCode);\n };\n\n private readonly _enterGiftCardNumber = (giftCardNumber: string): void => {\n this.setState({\n giftCardNumber\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardPin = (giftCardPin: string): void => {\n this.setState({\n giftCardPin\n });\n this._clearError();\n };\n\n private readonly _enterGiftCardExp = (giftCardExp: string): void => {\n this.setState({\n giftCardExp\n });\n this._clearError();\n };\n\n private readonly _clearError = (): void => {\n this.setState({\n errorMessage: ''\n });\n };\n\n private readonly _setError = (errorMessage: string): void => {\n this.props.telemetry.error('Error', errorMessage);\n this.props.telemetry.debug('Error', errorMessage);\n this.setState({\n errorMessage\n });\n };\n\n private readonly _applyGiftCard = async (): Promise => {\n if (this.state.isFetchingGiftCard) {\n return;\n }\n this.setState({\n isFetchingGiftCard: true\n });\n\n const giftCardNumber = this.state.giftCardNumber.trim();\n const giftCardPin = this.state.giftCardPin.trim();\n const giftCardExp = this.state.giftCardExp.trim();\n\n const giftCardTypes = await this._getGiftCardTypes(giftCardNumber);\n const giftCardType = giftCardTypes && giftCardTypes[0];\n const isPinRequired = giftCardType && giftCardType.IsPinRequired;\n const isExpRequired = giftCardType && giftCardType.IsExpirationDateRequired;\n const tenderTypeId = giftCardType && giftCardType.PaymentMethodId;\n const giftCard = await this._getGiftCard(giftCardNumber, giftCardPin, giftCardExp, isPinRequired, isExpRequired, tenderTypeId);\n\n if (giftCard) {\n this._clearError();\n this.setState({\n giftCardNumber: '',\n giftCardPin: '',\n giftCardExp: '',\n isFetchingGiftCard: false,\n giftCard\n });\n return Promise.resolve();\n }\n const input = this.inputRef && this.inputRef.current && this.inputRef.current.focus && (this.inputRef.current as HTMLElement);\n input && input.focus();\n this.setState({\n isFetchingGiftCard: false,\n giftCard: undefined\n });\n };\n\n private readonly _findGiftcardTenderTypes = (\n tenderTypes: TenderType[],\n operationId: RetailOperation,\n giftcardType: string\n ): string[] | undefined => {\n let matchedTenderTypes: TenderType[] | undefined;\n\n switch (giftcardType) {\n case SupportedGiftCardType.Internal:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId === ''\n );\n break;\n case SupportedGiftCardType.External:\n matchedTenderTypes = tenderTypes.filter(\n tenderType => tenderType.OperationId === operationId && tenderType.ConnectorId !== ''\n );\n break;\n default:\n throw new Error('Invalid gift card type');\n }\n\n if (matchedTenderTypes) {\n return matchedTenderTypes.map(tenderType => tenderType.TenderTypeId || '');\n }\n return;\n };\n\n private readonly _getGiftCard = async (\n giftCardNumber: string,\n giftCardPin: string,\n giftCardExp: string,\n isPinRequired: boolean | undefined,\n isExpRequired: boolean | undefined,\n tenderTypeId: string | undefined\n ): Promise => {\n const {\n resources: { invalidCardTypeError, noBalanceError, invalidCardInfoError, noCardPinError, noCardExpError }\n } = this.props;\n\n const supportedGiftCardType = this.props.context.app.config.giftCardSupported;\n\n if (!tenderTypeId) {\n return undefined;\n }\n\n const tenderTypes = await getTenderTypesAsync({ callerContext: this.props.context.actionContext, queryResultSettings: {} }).catch(\n error => {\n throw error;\n }\n );\n\n if (!tenderTypes) {\n throw new Error('Fail to get gift card tender line');\n }\n\n const internalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.Internal\n );\n const externalGiftcardTenderTypes = this._findGiftcardTenderTypes(\n tenderTypes,\n OPERATIONS.PayGiftCertificate,\n SupportedGiftCardType.External\n );\n\n switch (supportedGiftCardType) {\n case undefined:\n case SupportedGiftCardType.Internal:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.External:\n if (!externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n case SupportedGiftCardType.Both:\n if (!internalGiftcardTenderTypes?.includes(tenderTypeId) && !externalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n break;\n default:\n throw new Error('Unsupported gift card type');\n }\n\n if (!this.props.context.request.user.isAuthenticated && internalGiftcardTenderTypes?.includes(tenderTypeId)) {\n this._setError(invalidCardTypeError);\n return undefined;\n }\n\n if (isPinRequired && giftCardPin === '') {\n this._setError(noCardPinError);\n return undefined;\n }\n\n if (isExpRequired && giftCardExp === '') {\n this._setError(noCardExpError);\n return undefined;\n }\n\n const month = Number.parseInt(giftCardExp.split('/')[0], 10);\n const year = Number.parseInt(giftCardExp.split('/')[1], 10);\n\n return getGiftCardAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, tenderTypeId, giftCardPin, month, year)\n .then(activeGiftCard => {\n if (!activeGiftCard.Balance || activeGiftCard.Balance === 0) {\n this._setError(noBalanceError);\n return;\n }\n return activeGiftCard;\n })\n .catch(error => {\n this._setError(invalidCardInfoError);\n return undefined;\n });\n };\n\n private readonly _getGiftCardTypes = async (giftCardNumber: string): Promise => {\n const {\n resources: { emptyInputError, invalidCodeError }\n } = this.props;\n\n if (!giftCardNumber) {\n this._setError(emptyInputError);\n return undefined;\n }\n\n return resolveCardTypesAsync({ callerContext: this.props.context.actionContext }, giftCardNumber, CardType.GiftCard)\n .then(giftCardTypes => {\n if (!giftCardTypes || giftCardTypes.length === 0 || giftCardTypes[0] === undefined) {\n this._setError(invalidCodeError);\n return;\n }\n return giftCardTypes;\n })\n .catch(error => {\n this._setError(invalidCodeError);\n return undefined;\n });\n };\n}\n\nexport default GiftCardBalanceCheck;\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\nimport {\r\n AddToOrderTemplateComponent,\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateActionErrorResult,\r\n IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxData,\r\n IBuyboxState,\r\n IBuyboxViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\r\n\r\n/**\r\n * To generate AddToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\r\n */\r\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n}\r\n\r\n/**\r\n * To generate OrderTemplateNameDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\r\n */\r\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\n/**\r\n * To generate ItemAddedToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\r\n */\r\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n}\r\n\r\n/**\r\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\r\n */\r\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources: IBuyboxCommonResources):\r\nIDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n}\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks,\r\n resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (result: IOrderTemplateActionErrorResult) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'ORDER_TEMPLATE',\r\n configureErrors: result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToOrderTemplateButton.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns JSX element.\r\n */\r\nexport const renderAddToOrderTemplateButton = (props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks, product: SimpleProduct): React.ReactNode => {\r\n\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\r\n id,\r\n typeName,\r\n context,\r\n data: {\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n resources\r\n } = props;\r\n\r\n const\r\n {\r\n quantity\r\n } = state;\r\n\r\n const isShowButtonText = true;\r\n\r\n return orderTemplates && (\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\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\r\nimport { format, ItemAvailability, ProductWarehouseInventoryAvailability, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxData,\r\n IBuyboxFindInStoreViewProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxResources as IBuyboxExtentionResources,\r\n IBuyboxShopSimilarLookViewProps,\r\n IBuyboxState,\r\n IBuyboxViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport {\r\n ArrayExtensions,\r\n createInventoryAvailabilitySearchCriteria,\r\n getFullAvailableInventoryNearby,\r\n GetFullAvailableInventoryNearbyInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IncrementalQuantity, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\nimport { getInventoryLevelRangesAsync } from '../../../actions/DataActionExtension.g';\r\nimport { SupersessionKey } from '../../gardner-theme/models/SupersessionKey';\r\nimport getExtensionPropertyValueByKey, { CommercePropertyValueEnum } from '../../../utils/getExtensionPropertyValueByKey';\r\nimport { IItemInventoryLevelProfileEntity, IProfileDataMap } from '../../../actions/DataServiceEntities.g';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\nimport { IBuyBoxDataExtended } from '../definition-extensions/buybox.data';\r\nimport { getEstimatedAvailabilityAsync } from '@msdyn365-commerce/retail-proxy/dist/DataActions/ProductsDataActions.g';\r\n/**\r\n * BuyBoxConstants enum.\r\n */\r\nexport enum BuyBoxConstants {\r\n zero = 0\r\n}\r\n\r\n/**\r\n * On Change function.\r\n * @param callbacks -Callbacks.\r\n * @returns Update quantity.\r\n */\r\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\r\n if (callbacks.updateQuantity) {\r\n return callbacks.updateQuantity(newValue);\r\n }\r\n return true;\r\n};\r\n\r\nconst _renderLoginURL = (url?: string, text?: string): JSX.Element => {\r\n return (\r\n

\r\n {text}\r\n

\r\n );\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantityComponent - QuantityComponent.\r\n * @param callbacks - Callbacks.\r\n * @param props - Props.\r\n * @param state - State.\r\n * @param extentionResources - ExtentionResources.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param max - Max.\r\n * @param telemetryContent - TelemetryContent.\r\n * @param unitOfMeasure - Unit Of Measure.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (\r\n quantityComponent: IBuyboxProductQuantityViewProps,\r\n callbacks: IBuyboxCallbacks,\r\n props: IBuyboxProps,\r\n state: IBuyboxState,\r\n extentionResources: IBuyboxExtentionResources,\r\n quantityLimitsMessages: React.ReactNode,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n max: number | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n unitOfMeasure?: React.ReactNode\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\r\n\r\n const { resources } = props;\r\n\r\n const { quantity } = state;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n\r\n \r\n {unitOfMeasure}\r\n {quantityLimitsMessages}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render key in price function.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\r\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToCart = (\r\n addToCart: IBuyboxAddToCartViewProps,\r\n product: SimpleProduct | undefined,\r\n inventoryRangesList: IProfileDataMap[],\r\n unavailableText: string\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n if (product) {\r\n const invPropertyValue = getExtensionPropertyValueByKey(\r\n product.ExtensionProperties,\r\n SupersessionKey.Inventory,\r\n CommercePropertyValueEnum.string\r\n );\r\n const currentInvString = invPropertyValue ? invPropertyValue.toString() : '0';\r\n const currentInventory = parseInt(currentInvString, 10);\r\n let invProfOos: IItemInventoryLevelProfileEntity | undefined;\r\n inventoryRangesList.map(ir => {\r\n const tempInvRange = ir.Profile?.find(p => p.ItemId === product.ItemId && p.Code === 'OOS');\r\n if (tempInvRange) {\r\n invProfOos = tempInvRange;\r\n }\r\n });\r\n\r\n const OosUpperBound =\r\n invProfOos?.hasOwnProperty('UpperBoundInclusive') && invProfOos?.UpperBoundInclusive !== undefined\r\n ? invProfOos.UpperBoundInclusive\r\n : 0;\r\n const isOutOfStock = currentInventory <= OosUpperBound;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {!isOutOfStock ? button :
{unavailableText}
}\r\n
\r\n );\r\n }\r\n return <>;\r\n};\r\n\r\n/**\r\n * RenderFindInStore.\r\n * @param findInStore - FindInStore.\r\n * @returns -- Returns.\r\n */\r\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\r\n\r\n return (\r\n \r\n {storeSelector}\r\n {heading}\r\n {productPickupOptionList}\r\n {description}\r\n {errors}\r\n {button}\r\n {modal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToOrderTemplate.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToOrderTemplate = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): JSX.Element | null => {\r\n const product = props.data.product.result;\r\n if (!props.addToOrderTemplate || !product) {\r\n return null;\r\n }\r\n\r\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\r\n\r\n return (\r\n \r\n {props.addToOrderTemplate.errorBlock}\r\n {orderTemplateButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\r\n result: IWishlistActionErrorResult\r\n) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors:\r\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddtoWishlistButton = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n product: SimpleProduct\r\n): React.ReactNode => {\r\n const { context, resources } = props;\r\n const wishlists = props.data.wishlists.result;\r\n const isShowWishlitButtonText = true;\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToWishlist = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): JSX.Element | null => {\r\n const product = props.data.product.result;\r\n if (!props.addToWishlist || !product) {\r\n return null;\r\n }\r\n\r\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\r\n return (\r\n \r\n {props.addToWishlist.errorBlock}\r\n {wishlistButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RRenderShopSimilarItem.\r\n * @param shopSimilarItem - ShopSimilarItem.\r\n * @returns -- Returns.\r\n */\r\nconst renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\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\n\r\n/**\r\n * RenderSocialShare.\r\n * @param socialShare - Social share react node array.\r\n * @returns -- Returns.\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\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\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 {heading}\r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\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\n/**\r\n * BuyboxView.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst BuyboxView: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const {\r\n ModuleProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n MediaGalleryContainerProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n ProductInfoContainerProps,\r\n addToCart,\r\n addToOrderTemplate,\r\n addToWishlist,\r\n configure,\r\n findInStore,\r\n quantity,\r\n price,\r\n title,\r\n rating,\r\n inventoryLabel,\r\n shopSimilarLook,\r\n keyInPrice,\r\n shopSimilarDescription,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n max,\r\n unitOfMeasure,\r\n callbacks,\r\n state,\r\n resources,\r\n resources: { loginToViewPricing, productUnavailableText },\r\n data: { enhancedDescription },\r\n quantityLimitsMessages,\r\n telemetryContent,\r\n config: { onlyShowPriceWhenAuthenticated, enableShopSimilarDescription, enableShopSimilarLooks, displayWishlistButton },\r\n context: {\r\n request: {\r\n user: { signInUrl, isAuthenticated }\r\n }\r\n },\r\n app: { config: appConfig }\r\n } = props;\r\n\r\n let skuText: string = props.resources.skuText;\r\n skuText += props.data.product.result?.ItemId;\r\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\r\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\r\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\r\n const product = props.data.product.result;\r\n\r\n const [availability, setAvailability] = React.useState('');\r\n\r\n const [isStoreChange, setIsStoreChange] = React.useState(false);\r\n const [areInventoryRangesChecked, setAreInventoryRangesChecked] = React.useState(false);\r\n const [inventoryRangesList, setInventoryRangesList] = React.useState([]);\r\n const [estimatedAvailabilites, setEstimatedAvailabilites] = React.useState([]);\r\n\r\n const getInvProfs = async (): Promise => {\r\n if (areInventoryRangesChecked) {\r\n return;\r\n }\r\n const itemId = props.data.product.result?.ItemId || '';\r\n const resp = await getInventoryLevelRangesAsync({ callerContext: props.context.actionContext }, [itemId]);\r\n\r\n setAreInventoryRangesChecked(true);\r\n setInventoryRangesList(resp);\r\n };\r\n\r\n const getEsimatedAvailability = async (): Promise => {\r\n const itemIds = props.data.product.result?.RecordId!;\r\n const searchCriteria = createInventoryAvailabilitySearchCriteria(props.context.actionContext, [itemIds], true);\r\n const response = await getEstimatedAvailabilityAsync({ callerContext: props.context.actionContext }, searchCriteria);\r\n setEstimatedAvailabilites(response.ProductWarehouseInventoryAvailabilities ?? []);\r\n };\r\n\r\n React.useEffect(() => {\r\n void getInvProfs();\r\n void getEsimatedAvailability();\r\n }, [props.data.product]);\r\n\r\n const getInventoryLabel = (RecordId: number) => {\r\n const profile = estimatedAvailabilites.find(product => product.ProductId === RecordId);\r\n const label = profile?.TotalAvailableInventoryLevelLabel;\r\n const code = profile?.TotalAvailableInventoryLevelCode;\r\n\r\n // If profile.Code is 'BO', append the label\r\n if (code === 'BO') {\r\n return (\r\n label && (\r\n <>\r\n {label}
{props.config.backOrderShippingText}\r\n \r\n )\r\n );\r\n }\r\n\r\n if (code === 'OOS') {\r\n return null;\r\n }\r\n\r\n return label;\r\n };\r\n\r\n const shouldShowShopOptions = enableShopSimilarDescription || enableShopSimilarLooks;\r\n /**\r\n * GetStockInventoryLabel.\r\n * @param availabilityWithHours - Stock availability with hours.\r\n * @returns -- Returns.\r\n */\r\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\r\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\r\n if (\r\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n productInventoryInformation.InventLocationId\r\n ) {\r\n return productInventoryInformation.StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const getInventory = React.useCallback(async () => {\r\n const input = new GetFullAvailableInventoryNearbyInput(\r\n props.data.product.result?.RecordId,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n true\r\n );\r\n\r\n /**\r\n * IsProductInStock.\r\n * @param itemAvailabilities - Item availability array.\r\n * @returns -- Returns.\r\n */\r\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n if (!appConfig.enableStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n await getFullAvailableInventoryNearby(input, props.context.actionContext)\r\n .catch((error: Error) => {\r\n props.telemetry.error(error.message);\r\n })\r\n .then(response => {\r\n if (response && ArrayExtensions.hasElements(response)) {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\r\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\r\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\r\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\r\n : undefined;\r\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\r\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\r\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\r\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const preferredStoreAvailabilityText = `${format(\r\n props.resources.availabilityAtPreferredStoreText,\r\n preferredStoreName\r\n )} ${stockText}`;\r\n setAvailability(preferredStoreAvailabilityText);\r\n }\r\n });\r\n\r\n setIsStoreChange(false);\r\n }, [\r\n props.data.product.result?.RecordId,\r\n appConfig.enableStockCheck,\r\n preferredStoreId,\r\n preferredStoreName,\r\n props.context.actionContext,\r\n props.resources.availabilityAtPreferredStoreText,\r\n props.resources.inStockText,\r\n props.resources.outOfStockText,\r\n props.telemetry\r\n ]);\r\n\r\n React.useEffect(() => {\r\n if (props.config.displayStockAvailability) {\r\n getInventory().catch((error: Error) => {\r\n props.telemetry.error(error.message);\r\n });\r\n }\r\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability]);\r\n\r\n reaction(\r\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n () => {\r\n setIsStoreChange(true);\r\n }\r\n );\r\n\r\n /**\r\n * RenderAvailabiltyAtPreferredStore.\r\n * @returns -- Returns.\r\n */\r\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\r\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\r\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\r\n return undefined;\r\n }\r\n const containerProps: INodeProps = {\r\n className: 'ms-buybox__preferred-store-availability',\r\n tag: 'span'\r\n };\r\n\r\n return {availability};\r\n };\r\n\r\n const invenLabel = getInventoryLabel(props.data.product.result?.RecordId!);\r\n\r\n return (\r\n \r\n {props.mediaGallery}\r\n \r\n {title}\r\n \r\n
{skuText}
\r\n {rating}\r\n
\r\n {isAuthenticated || !onlyShowPriceWhenAuthenticated ? (\r\n \r\n
{props.resources.priceText}
\r\n {price}\r\n
\r\n ) : (\r\n _renderLoginURL(signInUrl, loginToViewPricing)\r\n )}\r\n\r\n {configure && renderConfigure(configure)}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n \r\n
\r\n {quantity &&\r\n renderQuantity(\r\n quantity,\r\n callbacks,\r\n props,\r\n state,\r\n resources,\r\n quantityLimitsMessages,\r\n max,\r\n telemetryContent,\r\n unitOfMeasure\r\n )}\r\n {props.bulkPurchaseLink}\r\n
\r\n
\r\n {inventoryRangesList &&
{invenLabel}
}\r\n\r\n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\r\n {inventoryLabel}\r\n {renderAddToCart(addToCart, product, inventoryRangesList, productUnavailableText)}\r\n {findInStore && renderFindInStore(findInStore)}\r\n {displayWishlistButton && addToWishlist && renderAddToWishlist(props, state, callbacks)}\r\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\r\n {findInStore?.productPickupOptionList ? (\r\n
{findInStore.productPickupOptionList}
\r\n ) : null}\r\n {_renderSocialShare(props.slots && props.slots.socialShare)}\r\n {shouldShowShopOptions ? (\r\n \r\n
{props.resources.shopText}
\r\n \r\n {shopSimilarLook && renderShopSimilarItem(shopSimilarLook)}\r\n {shopSimilarDescription && renderShopSimilarItem(shopSimilarDescription)}\r\n \r\n
\r\n ) : null}\r\n\r\n \r\n
{props.resources.descriptionText}
\r\n {/* 6704 - Remove the original desription and replace with the enhanced description */}\r\n {/* {description} */}\r\n \r\n
\r\n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\r\n {props.slots.productSpecification[0]}\r\n ) : null}\r\n
\r\n
\r\n );\r\n};\r\n\r\nexport default BuyboxView;\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\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getConfigureErrors, IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxState,\r\n IQuickviewViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IQuickviewProps as IQuickviewPropsExtend } from '../definition-extensions/quickview.ext.props.autogenerated';\r\n\r\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks | undefined,\r\n resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (result: IWishlistActionErrorResult) => {\r\n callbacks?.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors: result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddtoWishlistButton = (props: IQuickviewViewProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks | undefined, product: SimpleProduct): React.ReactNode => {\r\n const { context, resources } = props;\r\n const wishlists = props.data.wishlists.result;\r\n const isShowWishlitButtonText = true;\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToWishlist = (props: IQuickviewViewProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks | undefined): JSX.Element | null => {\r\n const product = props.productDetails?.product;\r\n if (!props.addToWishlist || !product) {\r\n return null;\r\n }\r\n\r\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\r\n return (\r\n \r\n {props.addToWishlist.errorBlock}\r\n {wishlistButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantity - Quantity.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (quantity: IBuyboxProductQuantityViewProps, quantityLimitsMessages: React.ReactNode, props: IQuickviewViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\r\n const { unitOfMeasure } = props;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n \r\n {input}\r\n {unitOfMeasure}\r\n {quantityLimitsMessages}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * KenderKeyInPrice.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\r\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n \r\n {input}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\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 \r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\r\n */\r\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return (\r\n \r\n {dropdowns.map(renderConfigureDropdown)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderBodyContent.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderBodyContent = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n const { price, keyInPrice, quantity, inventoryLabel, quantityLimitsMessages, loading,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n ProductInfoContainerProps, MediaGalleryContainerProps, CarouselProps, addToWishlist, configure, callbacks, state } = props;\r\n if (loading) {\r\n return (\r\n <>\r\n {loading}\r\n \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 {props.resources.priceText}\r\n {price}\r\n \r\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\r\n \r\n {configure && renderConfigure(configure)}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n {quantity && renderQuantity(quantity, quantityLimitsMessages, props)}\r\n {inventoryLabel}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * RenderQuickViewPopup.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuickViewPopup = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ModalContainer, ModalHeaderContainer, ModalFooterContainer, ModalHeaderContent, ModalBodyContainer, addToCart,\r\n cartContainerProps, seeDetailsbutton } = props;\r\n\r\n return (\r\n \r\n \r\n {ModalHeaderContent}\r\n \r\n {props.title}\r\n {!props.loading && !StringExtensions.isNullOrEmpty(props.state.productPrice?.ItemId) ? \r\n {props.resources.skuText}\r\n {props.state.productPrice?.ItemId}\r\n : ''}\r\n {props.rating}\r\n \r\n \r\n \r\n {renderBodyContent(props)}\r\n \r\n \r\n \r\n {addToCart && seeDetailsbutton}\r\n {addToCart && renderAddToCart(addToCart)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Functional component which renders quick view button and popup based by the given props file.\r\n * @param props - Configuration for the quick view component.\r\n * @returns - Functional component of the quick view.\r\n */\r\nexport const QuickViewFunctionalComponent:\r\nReact.FC> = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>) => {\r\n const { quickView, quickViewButton, isModalOpen } = props;\r\n const quickViewUpdatedProps: IModuleProps = { ...quickView, title: props.resources.quickViewbuttonText };\r\n return (\r\n \r\n {quickViewButton}\r\n {isModalOpen && renderQuickViewPopup(props)}\r\n \r\n );\r\n};\r\n\r\nexport default QuickViewFunctionalComponent;\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\nimport {\r\n AddToOrderTemplateComponent,\r\n IAddToOrderTemplateDialogResources,\r\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\r\n IItemAddedToOrderTemplateDialogResources,\r\n IOrderTemplateActionErrorResult,\r\n IOrderTemplateNameDialogResources } from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxData,\r\n IBuyboxState,\r\n IBuyboxViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps } from '../../definition-extensions/buybox.ext.props.autogenerated';\r\n\r\n/**\r\n * To generate AddToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of AddToOrderTemplateDialog resources..\r\n */\r\nfunction generateAddToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IAddToOrderTemplateDialogResources {\r\n return {\r\n addToOrderTemplateHeader: resources.addToOrderTemplateHeader,\r\n\r\n noOrderTemplatesMessage: resources.noOrderTemplatesMessage,\r\n noOrderTemplatesDescription: resources.noOrderTemplatesDescription,\r\n\r\n createAnOrderTemplateButtonText: resources.createAnOrderTemplateButtonText,\r\n createNewOrderTemplateButtonText: resources.createNewOrderTemplateButtonText,\r\n cancelOrderTemplateCreationButtonText: resources.cancelOrderTemplateCreationButtonText,\r\n\r\n selectTemplatesText: resources.selectTemplatesText,\r\n addToTemplateButtonText: resources.addToTemplateButtonText,\r\n lineItemsText: resources.lineItemsText\r\n };\r\n}\r\n\r\n/**\r\n * To generate OrderTemplateNameDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of OrderTemplateNameDialog resources..\r\n */\r\nfunction generateOrderTemplateNameDialogResources(resources: IBuyboxCommonResources): IOrderTemplateNameDialogResources {\r\n return {\r\n orderTemplateHeaderLabel: resources.createOrderTemplateHeader,\r\n orderTemplateTitleLabel: resources.orderTemplateTitle,\r\n orderTemplateNameAriaLabel: resources.orderTemplateNameAriaLabel,\r\n orderTemplateDescription: resources.createOrderTemplateDescription,\r\n\r\n defaultOrderTemplateName: resources.defaultOrderTemplateName,\r\n\r\n orderTemplateButtonLabel: resources.createOrderTemplateButtonText,\r\n orderTemplateCancelButtonLabel: resources.cancelNewOrderTemplateCreationButtonText\r\n };\r\n}\r\n\r\n/**\r\n * To generate ItemAddedToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of ItemAddedToOrderTemplateDialog resources..\r\n */\r\nfunction generateItemAddedToOrderTemplateDialogResources(resources: IBuyboxCommonResources): IItemAddedToOrderTemplateDialogResources {\r\n return {\r\n viewOrderTemplateButtonText: resources.viewOrderTemplateButtonText,\r\n continueShoppingButtonText: resources.continueShoppingButtonText,\r\n itemAddedToOrderTemplateHeaderItemOneText: resources.itemAddedToOrderTemplateHeaderItemOneText,\r\n itemAddedToOrderTemplateHeaderItemFormatText: resources.itemAddedToOrderTemplateHeaderItemFormatText,\r\n itemAddedToOrderTemplateHeaderMessageText: resources.itemAddedToOrderTemplateHeaderMessageText,\r\n freePriceText: resources.priceFree,\r\n originalPriceText: resources.originalPriceText,\r\n currentPriceText: resources.currentPriceText\r\n };\r\n}\r\n\r\n/**\r\n * To generate DuplicateItemsWhenAddingToOrderTemplateDialog resources.\r\n * @param resources - The resources.\r\n * @returns -- Returns the list of DuplicateItemsWhenAddingToOrderTemplateDialog resources..\r\n */\r\nfunction generateDuplicateItemsWhenAddingToOrderTemplateDialogResources(resources: IBuyboxCommonResources):\r\nIDuplicateItemsWhenAddingToOrderTemplateDialogResources {\r\n return {\r\n duplicatedProductsHeader: resources.duplicatedProductsHeader,\r\n duplicatedProductsDescription: resources.duplicatedProductsDescription,\r\n updateQuantityButtonText: resources.updateQuantityButtonText,\r\n cancelDuplicateItemsButtonText: resources.cancelDuplicateItemsButtonText\r\n };\r\n}\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToOrderTemplateFailed = (callbacks: IBuyboxCallbacks,\r\n resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (result: IOrderTemplateActionErrorResult) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'ORDER_TEMPLATE',\r\n configureErrors: result.status === 'MISSING_DIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToOrderTemplateButton.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns JSX element.\r\n */\r\nexport const renderAddToOrderTemplateButton = (props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks, product: SimpleProduct): React.ReactNode => {\r\n\r\n const {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from module file.\r\n id,\r\n typeName,\r\n context,\r\n data: {\r\n orderTemplates: { result: orderTemplates },\r\n customerInformation: { result: customerInformation }\r\n },\r\n resources\r\n } = props;\r\n\r\n const\r\n {\r\n quantity\r\n } = state;\r\n\r\n const isShowButtonText = true;\r\n\r\n return orderTemplates && (\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\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\r\nimport { CommerceProperty, format, ItemAvailability, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { IStoreInfo } from '@msdyn365-commerce-modules/bopis-utilities';\r\nimport {\r\n getConfigureErrors,\r\n IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxData,\r\n IBuyboxFindInStoreViewProps,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxResources as IBuyboxExtentionResources,\r\n IBuyboxShopSimilarLookViewProps,\r\n IBuyboxState,\r\n IBuyboxViewProps\r\n} from '@msdyn365-commerce-modules/buybox';\r\nimport {\r\n ArrayExtensions,\r\n getFullAvailableInventoryNearby,\r\n GetFullAvailableInventoryNearbyInput,\r\n IFullOrgUnitAvailability\r\n} from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IncrementalQuantity, INodeProps, ITelemetryContent, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport { reaction } from 'mobx';\r\nimport * as React from 'react';\r\n\r\nimport { IBuyboxProps as IBuyboxExtentionProps, IBuyboxProps } from '../definition-extensions/buybox.ext.props.autogenerated';\r\nimport { renderAddToOrderTemplateButton } from './components/buybox-add-to-order-template';\r\nimport { SupersessionKey } from '../models/SupersessionKey';\r\nimport { CommercePropertyValueEnum } from '../../../modules/allowable-freight/utils/CommercePropertyValueEnum';\r\nimport GetProductEligibilityAction, { GetProductEligibilityInput } from '../../../actions/get-product-eligibility.action';\r\nimport { IBuyBoxDataExtended } from '../definition-extensions/buybox.data';\r\nimport { RichTextComponent } from '@msdyn365-commerce/core';\r\n\r\n/**\r\n * BuyBoxConstants enum.\r\n */\r\nexport enum BuyBoxConstants {\r\n zero = 0\r\n}\r\n\r\ninterface EligibleItem {\r\n ItemId: string;\r\n IsEligible: boolean;\r\n}\r\n\r\n/**\r\n * On Change function.\r\n * @param callbacks -Callbacks.\r\n * @returns Update quantity.\r\n */\r\nconst onChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number): boolean => {\r\n if (callbacks.updateQuantity) {\r\n return callbacks.updateQuantity(newValue);\r\n }\r\n return true;\r\n};\r\n\r\nconst _renderLoginURL = (url?: string, text?: string): JSX.Element => {\r\n return (\r\n

\r\n {text}\r\n

\r\n );\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantityComponent - QuantityComponent.\r\n * @param callbacks - Callbacks.\r\n * @param props - Props.\r\n * @param state - State.\r\n * @param extentionResources - ExtentionResources.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param max - Max.\r\n * @param telemetryContent - TelemetryContent.\r\n * @param unitOfMeasure - Unit Of Measure.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (\r\n quantityComponent: IBuyboxProductQuantityViewProps,\r\n callbacks: IBuyboxCallbacks,\r\n props: IBuyboxProps,\r\n state: IBuyboxState,\r\n extentionResources: IBuyboxExtentionResources,\r\n quantityLimitsMessages: React.ReactNode,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n max: number | undefined,\r\n telemetryContent?: ITelemetryContent,\r\n unitOfMeasure?: React.ReactNode\r\n): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, errors } = quantityComponent;\r\n\r\n const { resources } = props;\r\n\r\n const { quantity } = state;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n {errors}\r\n \r\n\r\n \r\n {unitOfMeasure}\r\n {quantityLimitsMessages}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Render key in price function.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\r\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n {heading}\r\n {input}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\n// const renderAddToCart = (addToCart: IBuyboxAddToCartViewProps, eligbility: EligibleItem, eligibilityText: string): JSX.Element => {\r\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps, eligbility: EligibleItem, isProductAvailable: boolean): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n return (\r\n \r\n {errorBlock}\r\n {eligbility?.IsEligible && isProductAvailable ? button : ''}\r\n {/* {eligbility?.IsEligible ? button : eligbility?.ItemId ? eligibilityText : ''} */}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderFindInStore.\r\n * @param findInStore - FindInStore.\r\n * @returns -- Returns.\r\n */\r\nconst renderFindInStore = (findInStore: IBuyboxFindInStoreViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const { ContainerProps, storeSelector, heading, description, errors, button, modal, productPickupOptionList } = findInStore;\r\n\r\n return (\r\n \r\n {storeSelector}\r\n {heading}\r\n {productPickupOptionList}\r\n {description}\r\n {errors}\r\n {button}\r\n {modal}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToOrderTemplate.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToOrderTemplate = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): JSX.Element | null => {\r\n const product = props.data.product.result;\r\n if (!props.addToOrderTemplate || !product) {\r\n return null;\r\n }\r\n\r\n const orderTemplateButton = renderAddToOrderTemplateButton(props, state, callbacks, product);\r\n\r\n return (\r\n \r\n {props.addToOrderTemplate.errorBlock}\r\n {orderTemplateButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks, resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (\r\n result: IWishlistActionErrorResult\r\n) => {\r\n callbacks.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors:\r\n result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox view props.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddtoWishlistButton = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks,\r\n product: SimpleProduct\r\n): React.ReactNode => {\r\n const { context, resources } = props;\r\n const wishlists = props.data.wishlists.result;\r\n const isShowWishlitButtonText = true;\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToWishlist = (\r\n props: IBuyboxViewProps & IBuyboxExtentionProps,\r\n state: IBuyboxState,\r\n callbacks: IBuyboxCallbacks\r\n): JSX.Element | null => {\r\n const product = props.data.product.result;\r\n if (!props.addToWishlist || !product) {\r\n return null;\r\n }\r\n\r\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\r\n return (\r\n \r\n {props.addToWishlist.errorBlock}\r\n {wishlistButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RRenderShopSimilarItem.\r\n * @param shopSimilarItem - ShopSimilarItem.\r\n * @returns -- Returns.\r\n */\r\nconst renderShopSimilarItem = (shopSimilarItem: IBuyboxShopSimilarLookViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\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\n\r\n/**\r\n * RenderSocialShare.\r\n * @param socialShare - Social share react node array.\r\n * @returns -- Returns.\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\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\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 {heading}\r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\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\n/**\r\n * BuyboxView.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst BuyboxView: React.FC> = props => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n const {\r\n ModuleProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n MediaGalleryContainerProps,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n ProductInfoContainerProps,\r\n addToCart,\r\n addToOrderTemplate,\r\n addToWishlist,\r\n configure,\r\n // description,\r\n findInStore,\r\n quantity,\r\n price,\r\n title,\r\n rating,\r\n // inventoryLabel,\r\n shopSimilarLook,\r\n keyInPrice,\r\n shopSimilarDescription,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Buybox.tsx file\r\n max,\r\n unitOfMeasure,\r\n callbacks,\r\n state,\r\n resources,\r\n resources: { loginToViewPricing, supersessionLabel, productEligibilityText },\r\n data: { product, enhancedDescription },\r\n quantityLimitsMessages,\r\n telemetryContent,\r\n config: { onlyShowPriceWhenAuthenticated, enableShopSimilarDescription, enableShopSimilarLooks },\r\n context: {\r\n request: {\r\n user: { signInUrl, isAuthenticated }\r\n }\r\n },\r\n app: { config: appConfig }\r\n } = props;\r\n let skuText: string = props.resources.skuText;\r\n skuText += props.data.product.result?.ItemId;\r\n const preferredStoreInfo: IStoreInfo | undefined = props.data.storeSelectorStateManager.result?.preferredStore;\r\n const preferredStoreId = preferredStoreInfo?.StoreId ? preferredStoreInfo.StoreId : '';\r\n const preferredStoreName = preferredStoreInfo?.StoreName ? preferredStoreInfo.StoreName : '';\r\n\r\n const [availability, setAvailability] = React.useState('');\r\n const [isStoreChange, setIsStoreChange] = React.useState(false);\r\n\r\n const shouldShowShopOptions = enableShopSimilarDescription || enableShopSimilarLooks;\r\n\r\n const [eligbility, setEligbility] = React.useState();\r\n const [isProductAvailable, setIsProductAvailable] = React.useState(false);\r\n\r\n const getProductEligibility = async (): Promise => {\r\n const itemId = (await product).ItemId;\r\n\r\n if (!itemId) {\r\n return;\r\n }\r\n const cart = props.data.cart;\r\n const input = new GetProductEligibilityInput([itemId], false, cart?.result?.cart?.Id || '', null, null, null);\r\n const eligibilityData = await GetProductEligibilityAction(input, props.context.actionContext);\r\n\r\n eligibilityData.forEach((i: any) => {\r\n const id = getExtensionPropertyValueByKey(i.ExtensionProperties, 'ItemId', CommercePropertyValueEnum.string);\r\n if (String(id) === itemId) {\r\n const item: EligibleItem = {\r\n ItemId: String(id),\r\n IsEligible: i.IsEligible\r\n };\r\n setEligbility(item);\r\n getProductAvailability();\r\n }\r\n });\r\n };\r\n\r\n React.useEffect(() => {\r\n if (isAuthenticated) {\r\n void getProductEligibility();\r\n }\r\n }, [props.data]);\r\n\r\n const getProductAvailability = (): void => {\r\n const availableQuantities = props.data.productAvailableQuantity.result;\r\n let isStockAvailable = false;\r\n\r\n if (availableQuantities && availableQuantities.length > 0) {\r\n isStockAvailable = availableQuantities[0].IsProductAvailable;\r\n }\r\n setIsProductAvailable(isStockAvailable);\r\n };\r\n\r\n /**\r\n * GetStockInventoryLabel.\r\n * @param availabilityWithHours - Stock availability with hours.\r\n * @returns -- Returns.\r\n */\r\n const getStockInventoryLabel = (availabilityWithHours: IFullOrgUnitAvailability | undefined): string | undefined => {\r\n if (availabilityWithHours && ArrayExtensions.hasElements(availabilityWithHours.ProductInventoryInformation)) {\r\n for (const productInventoryInformation of availabilityWithHours.ProductInventoryInformation) {\r\n if (\r\n availabilityWithHours.OrgUnitAvailability?.OrgUnitLocation?.InventoryLocationId ===\r\n productInventoryInformation.InventLocationId\r\n ) {\r\n return productInventoryInformation.StockLevelLabel;\r\n }\r\n }\r\n }\r\n\r\n return undefined;\r\n };\r\n\r\n const getInventory = React.useCallback(async () => {\r\n const input = new GetFullAvailableInventoryNearbyInput(\r\n props.data.product.result?.RecordId,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n BuyBoxConstants.zero,\r\n true\r\n );\r\n\r\n /**\r\n * IsProductInStock.\r\n * @param itemAvailabilities - Item availability array.\r\n * @returns -- Returns.\r\n */\r\n const isProductInStock = (itemAvailabilities: ItemAvailability[] | undefined): boolean => {\r\n if (!appConfig.enableStockCheck) {\r\n return true;\r\n }\r\n\r\n if (ArrayExtensions.hasElements(itemAvailabilities)) {\r\n return itemAvailabilities[BuyBoxConstants.zero].AvailableQuantity! > BuyBoxConstants.zero;\r\n }\r\n\r\n return false;\r\n };\r\n\r\n await getFullAvailableInventoryNearby(input, props.context.actionContext)\r\n .catch((error: Error) => {\r\n props.telemetry.error(error.message);\r\n })\r\n .then(response => {\r\n if (response && ArrayExtensions.hasElements(response)) {\r\n const isPreferredStore = (value: IFullOrgUnitAvailability) =>\r\n value.OrgUnitAvailability?.OrgUnitLocation?.OrgUnitNumber === preferredStoreId;\r\n const filteredFullOrgUnitAvailability = response.filter(isPreferredStore);\r\n const preferredStoreAvailability = ArrayExtensions.hasElements(filteredFullOrgUnitAvailability)\r\n ? filteredFullOrgUnitAvailability[BuyBoxConstants.zero]\r\n : undefined;\r\n const stockStatusLabel: string | undefined = getStockInventoryLabel(preferredStoreAvailability);\r\n const isInStock = isProductInStock(preferredStoreAvailability?.OrgUnitAvailability?.ItemAvailabilities);\r\n const resourceLabel = isInStock ? props.resources.inStockText : props.resources.outOfStockText;\r\n const stockText: string | undefined = stockStatusLabel ? stockStatusLabel : resourceLabel;\r\n const preferredStoreAvailabilityText = `${format(\r\n props.resources.availabilityAtPreferredStoreText,\r\n preferredStoreName\r\n )} ${stockText}`;\r\n setAvailability(preferredStoreAvailabilityText);\r\n }\r\n });\r\n\r\n setIsStoreChange(false);\r\n }, [\r\n props.data.product.result?.RecordId,\r\n appConfig.enableStockCheck,\r\n preferredStoreId,\r\n preferredStoreName,\r\n props.context.actionContext,\r\n props.resources.availabilityAtPreferredStoreText,\r\n props.resources.inStockText,\r\n props.resources.outOfStockText,\r\n props.telemetry\r\n ]);\r\n\r\n React.useEffect(() => {\r\n if (props.config.displayStockAvailability) {\r\n getInventory().catch((error: Error) => {\r\n props.telemetry.error(error.message);\r\n });\r\n }\r\n }, [getInventory, isStoreChange, props.telemetry, props.config.displayStockAvailability]);\r\n\r\n reaction(\r\n () => props.data.storeSelectorStateManager.result?.selectedStoreLocationId,\r\n () => {\r\n setIsStoreChange(true);\r\n }\r\n );\r\n\r\n const [supersessionData, setSupersessionData] = React.useState<{ name?: string; id?: string } | null>(null);\r\n\r\n const _renderSupersessionData = () => {\r\n React.useEffect(() => {\r\n const productExtensionProperties = product.result?.ExtensionProperties;\r\n\r\n if (productExtensionProperties && productExtensionProperties.length > 0) {\r\n let supersededName: string | undefined;\r\n let supersededId: string | undefined;\r\n\r\n productExtensionProperties.forEach(ep => {\r\n const key = ep.Key || '';\r\n switch (key) {\r\n case SupersessionKey.SupersededName:\r\n supersededName = ep.Value?.StringValue;\r\n if (supersededName === product.result?.Name) {\r\n supersededName = undefined;\r\n }\r\n break;\r\n case SupersessionKey.SupersededId:\r\n supersededId = ep.Value?.StringValue;\r\n if (supersededId === product.result?.ItemId) {\r\n supersededId = undefined;\r\n }\r\n break;\r\n }\r\n });\r\n\r\n if (supersededName || supersededId) {\r\n setSupersessionData({ name: supersededName, id: supersededId });\r\n }\r\n }\r\n }, [product.result?.ExtensionProperties]);\r\n\r\n if (!supersessionData) {\r\n return null;\r\n }\r\n\r\n return (\r\n
\r\n

\r\n {supersessionLabel} {supersessionData.name} ({supersessionData.id})\r\n

\r\n
\r\n );\r\n };\r\n\r\n /**\r\n * RenderAvailabiltyAtPreferredStore.\r\n * @returns -- Returns.\r\n */\r\n const renderAvailabilityAtPreferredStore = (): JSX.Element | undefined => {\r\n const hasProductDimensions = ArrayExtensions.hasElements(props.data.product.result?.Dimensions);\r\n if (hasProductDimensions && props.data.product.result?.MasterProductId === undefined) {\r\n return undefined;\r\n }\r\n\r\n const containerProps: INodeProps = {\r\n className: 'ms-buybox__preferred-store-availability',\r\n tag: 'span'\r\n };\r\n\r\n return {availability};\r\n };\r\n\r\n const getBuyBoxInventoryLabel = (): React.ReactNode | React.ReactElement | undefined => {\r\n const product = props.data.product.result;\r\n const availableQuantities = props.data.productAvailableQuantity.result;\r\n if (!product && !availableQuantities) {\r\n return undefined;\r\n }\r\n const className = 'ms-buybox';\r\n let stockLevelLabel = '';\r\n let inventoryClassName: string = `${className}__inventory-label`;\r\n if (!eligbility?.IsEligible) {\r\n stockLevelLabel = productEligibilityText;\r\n }\r\n // } else if (isProductAvailable) {\r\n // stockLevelLabel = resources.availableLabelText;\r\n // } else {\r\n // stockLevelLabel = resources.outOfStockLabelText;\r\n // }\r\n return eligbility?.IsEligible ? (\r\n props.inventoryLabel\r\n ) : (\r\n
\r\n {stockLevelLabel}\r\n
\r\n );\r\n };\r\n\r\n // No quantity selector if cart has course\r\n let cart = props.data.cart.result;\r\n let cartLines = cart?.cart.CartLines;\r\n let hasCourse = false;\r\n let hasInvoice = cart?.hasInvoiceLine;\r\n cartLines?.forEach(c => {\r\n const courseId = getExtensionPropertyValueByKey(c.ExtensionProperties, 'CourseId', CommercePropertyValueEnum.string);\r\n if (courseId) {\r\n hasCourse = true;\r\n }\r\n });\r\n let hasCourseErr =
{props.resources.courseErr}
;\r\n let invoiceErr =
{props.resources.invoiceErr}
;\r\n return (\r\n \r\n {props.mediaGallery}\r\n \r\n {title}\r\n\r\n \r\n
{skuText}
\r\n {_renderSupersessionData()}\r\n {rating}\r\n
\r\n {isAuthenticated || !onlyShowPriceWhenAuthenticated ? (\r\n \r\n
{props.resources.priceText}
\r\n {price}\r\n
\r\n ) : (\r\n _renderLoginURL(signInUrl, loginToViewPricing)\r\n )}\r\n\r\n {configure && renderConfigure(configure)}\r\n {hasCourse && hasCourseErr}\r\n {hasInvoice && invoiceErr}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n\r\n \r\n
\r\n {quantity &&\r\n !hasCourse &&\r\n !hasInvoice &&\r\n renderQuantity(\r\n quantity,\r\n callbacks,\r\n props,\r\n state,\r\n resources,\r\n quantityLimitsMessages,\r\n max,\r\n telemetryContent,\r\n unitOfMeasure\r\n )}\r\n {props.bulkPurchaseLink}\r\n
\r\n
\r\n {props.config.displayStockAvailability && preferredStoreId && renderAvailabilityAtPreferredStore()}\r\n {/* {inventoryLabel} */}\r\n {getBuyBoxInventoryLabel()}\r\n {!hasCourse && !hasInvoice && eligbility && renderAddToCart(addToCart, eligbility, isProductAvailable)}\r\n {findInStore && renderFindInStore(findInStore)}\r\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\r\n {addToOrderTemplate && renderAddToOrderTemplate(props, state, callbacks)}\r\n {findInStore?.productPickupOptionList ? (\r\n
{findInStore.productPickupOptionList}
\r\n ) : null}\r\n {_renderSocialShare(props.slots && props.slots.socialShare)}\r\n {shouldShowShopOptions ? (\r\n \r\n
{props.resources.shopText}
\r\n \r\n {shopSimilarLook && renderShopSimilarItem(shopSimilarLook)}\r\n {shopSimilarDescription && renderShopSimilarItem(shopSimilarDescription)}\r\n \r\n
\r\n ) : null}\r\n\r\n \r\n
{props.resources.descriptionText}
\r\n {/* 6704 - Remove the original desription and replace with the enhanced description */}\r\n {/* {description} */}\r\n \r\n
\r\n {ArrayExtensions.hasElements(props.slots.productSpecification) ? (\r\n {props.slots.productSpecification[0]}\r\n ) : null}\r\n
\r\n
\r\n );\r\n};\r\n\r\nconst getExtensionPropertyValueByKey = (properties: CommerceProperty[] | undefined, key: string, valueType: CommercePropertyValueEnum) => {\r\n const property = properties?.find(p => p.Key === key)?.Value;\r\n\r\n // eslint-disable-next-line security/detect-object-injection\r\n const val = property ? property[valueType] : null;\r\n return val;\r\n};\r\n\r\nexport default BuyboxView;\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\nimport { AddToWishlistComponent, IWishlistActionErrorResult } from '@msdyn365-commerce/components';\r\nimport { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\r\nimport { getConfigureErrors, IBuyboxAddToCartViewProps,\r\n IBuyboxCallbacks,\r\n IBuyboxCommonResources,\r\n IBuyboxKeyInPriceViewProps,\r\n IBuyboxProductConfigureDropdownViewProps,\r\n IBuyboxProductConfigureViewProps,\r\n IBuyboxProductQuantityViewProps,\r\n IBuyboxState,\r\n IQuickviewViewProps } from '@msdyn365-commerce-modules/buybox';\r\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\r\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\r\nimport * as React from 'react';\r\n\r\nimport { IQuickviewProps as IQuickviewPropsExtend } from '../definition-extensions/quickview.ext.props.autogenerated';\r\n\r\n/**\r\n * RenderAddToCart.\r\n * @param addToCart - AddToCart.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToCart = (addToCart: IBuyboxAddToCartViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, errorBlock, button } = addToCart;\r\n\r\n return (\r\n \r\n {errorBlock}\r\n {button}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * Add to wishlist failed function.\r\n * @param callbacks -Buybox callbacks.\r\n * @param resources -Buybox resources.\r\n * @param product -Simple product.\r\n * @returns Update error state.\r\n */\r\nconst onAddToWishlistFailed = (callbacks: IBuyboxCallbacks | undefined,\r\n resources: IBuyboxCommonResources, product: SimpleProduct | undefined) => (result: IWishlistActionErrorResult) => {\r\n callbacks?.updateErrorState({\r\n errorHost: 'WISHLIST',\r\n configureErrors: result.status === 'MISSINGDIMENSION' ? getConfigureErrors(result.missingDimensions, resources, product?.IsGiftCard) : {}\r\n });\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @param product - Product data.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddtoWishlistButton = (props: IQuickviewViewProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks | undefined, product: SimpleProduct): React.ReactNode => {\r\n const { context, resources } = props;\r\n const wishlists = props.data.wishlists.result;\r\n const isShowWishlitButtonText = true;\r\n return (\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderAddToWishlist.\r\n * @param props - Buybox viewprops.\r\n * @param state - Buybox state.\r\n * @param callbacks - Buybox callbacks.\r\n * @returns -- Returns.\r\n */\r\nconst renderAddToWishlist = (props: IQuickviewViewProps,\r\n state: IBuyboxState, callbacks: IBuyboxCallbacks | undefined): JSX.Element | null => {\r\n const product = props.productDetails?.product;\r\n if (!props.addToWishlist || !product) {\r\n return null;\r\n }\r\n\r\n const wishlistButton = renderAddtoWishlistButton(props, state, callbacks, product);\r\n return (\r\n \r\n {props.addToWishlist.errorBlock}\r\n {wishlistButton}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderQuantity.\r\n * @param quantity - Quantity.\r\n * @param quantityLimitsMessages - QuantityLimitsMessages.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuantity = (quantity: IBuyboxProductQuantityViewProps, quantityLimitsMessages: React.ReactNode, props: IQuickviewViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\r\n const { unitOfMeasure } = props;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n \r\n {input}\r\n {unitOfMeasure}\r\n {quantityLimitsMessages}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * KenderKeyInPrice.\r\n * @param keyInPrice - KeyInPrice.\r\n * @returns -- Returns.\r\n */\r\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\r\n\r\n return (\r\n \r\n \r\n {heading}\r\n \r\n {input}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigureDropdown.\r\n * @param dropdown - Buybox product configure dropdown view props.\r\n * @returns -- Returns JSX.Element.\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 \r\n {select}\r\n {errors}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderConfigure.\r\n * @param configure - Buybox product configure view props.\r\n * @returns -- Returns JSX.Element.\r\n */\r\nconst renderConfigure = (configure: IBuyboxProductConfigureViewProps): JSX.Element => {\r\n const { ContainerProps, dropdowns } = configure;\r\n\r\n return (\r\n \r\n {dropdowns.map(renderConfigureDropdown)}\r\n \r\n );\r\n};\r\n\r\n/**\r\n * RenderBodyContent.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderBodyContent = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n const { price, keyInPrice, quantity, inventoryLabel, quantityLimitsMessages, loading,\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n ProductInfoContainerProps, MediaGalleryContainerProps, CarouselProps, addToWishlist, configure, callbacks, state } = props;\r\n if (loading) {\r\n return (\r\n <>\r\n {loading}\r\n \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 {props.resources.priceText}\r\n {price}\r\n \r\n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\r\n \r\n {configure && renderConfigure(configure)}\r\n {keyInPrice && renderKeyInPrice(keyInPrice)}\r\n {quantity && renderQuantity(quantity, quantityLimitsMessages, props)}\r\n {inventoryLabel}\r\n \r\n \r\n );\r\n\r\n};\r\n\r\n/**\r\n * RenderQuickViewPopup.\r\n * @param props - Props.\r\n * @returns -- Returns.\r\n */\r\nconst renderQuickViewPopup = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\r\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\r\n const { ModalContainer, ModalHeaderContainer, ModalFooterContainer, ModalHeaderContent, ModalBodyContainer, addToCart,\r\n cartContainerProps, seeDetailsbutton } = props;\r\n\r\n return (\r\n \r\n \r\n {ModalHeaderContent}\r\n \r\n {props.title}\r\n {!props.loading && !StringExtensions.isNullOrEmpty(props.state.productPrice?.ItemId) ? \r\n {props.resources.skuText}\r\n {props.state.productPrice?.ItemId}\r\n : ''}\r\n {props.rating}\r\n \r\n \r\n \r\n {renderBodyContent(props)}\r\n \r\n \r\n \r\n {addToCart && seeDetailsbutton}\r\n {addToCart && renderAddToCart(addToCart)}\r\n \r\n \r\n \r\n );\r\n};\r\n\r\n/**\r\n * Functional component which renders quick view button and popup based by the given props file.\r\n * @param props - Configuration for the quick view component.\r\n * @returns - Functional component of the quick view.\r\n */\r\nexport const QuickViewFunctionalComponent:\r\nReact.FC> = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>) => {\r\n const { quickView, quickViewButton, isModalOpen } = props;\r\n const quickViewUpdatedProps: IModuleProps = { ...quickView, title: props.resources.quickViewbuttonText };\r\n return (\r\n \r\n {quickViewButton}\r\n {isModalOpen && renderQuickViewPopup(props)}\r\n \r\n );\r\n};\r\n\r\nexport default QuickViewFunctionalComponent;\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n ICheckoutDeliveryOption,\n ICheckoutDeliveryOptionEdit,\n ICheckoutDeliveryOptionsList,\n ICheckoutDeliveryOptionsViewProps\n} from './checkout-delivery-options';\n\nconst DeliveryOptionList: React.FC = ({ DeliveryOptionsList, list }) => {\n if (!list || list.length === 0) {\n return null;\n }\n\n return (\n \n {list.map((deliveryOption: ICheckoutDeliveryOptionEdit) => {\n return (\n \n {deliveryOption.radioButton}\n {deliveryOption.description}\n {deliveryOption.price}\n \n );\n })}\n \n );\n};\n\nconst DeliveryOptionSelected: React.FC = ({ DeliveryOption, description, price }) => {\n return (\n \n {description}\n {price}\n \n );\n};\n\nconst CheckoutDeliveryOptionsView: React.FC = props => {\n const {\n CheckoutDeliveryOptions,\n enableCheckoutCartLineDeliveryOptions,\n checkoutErrorRef,\n viewState,\n deliveryOptions,\n deliveryOptionSelected,\n alert,\n waiting,\n saveButton,\n editButton,\n cancelButton,\n checkoutCartLineGroupDeliveryOptions,\n cartLineImages\n } = props;\n\n return (\n // TODO: All wrapper div should be provided by viewProps. Once SDK provide the sln, update markup.\n \n {viewState.isLoading && waiting}\n {viewState.isError && alert}\n {viewState.isShowList && deliveryOptions && !enableCheckoutCartLineDeliveryOptions && (\n \n )}\n {viewState.isShowList && enableCheckoutCartLineDeliveryOptions && checkoutCartLineGroupDeliveryOptions}\n {viewState.isShowSelected && enableCheckoutCartLineDeliveryOptions && cartLineImages}\n {viewState.isShowSelected && deliveryOptionSelected && }\n {viewState.isShowSaveButton && saveButton}\n {viewState.isShowEditButton && editButton}\n {viewState.isShowCancelButton && cancelButton}\n \n );\n};\n\nexport default CheckoutDeliveryOptionsView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IAddResource, ICheckoutGiftCardViewProps, IForm, IItem, IList, IShowResource } from './checkout-gift-card';\n\nexport const From: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const SelectedGiftCard: React.FC = ({ itemProps, selectedGiftCard, removeButton }) => (\n \n {selectedGiftCard}\n {removeButton}\n \n);\n\nexport const GiftCardList: React.FC = ({ listProps, list }) => (\n \n {list.map(({ id, ...item }) => (\n \n ))}\n \n);\n\nexport const AddResource: React.FC = ({ form, list }) => (\n <>\n {form && }\n {list && }\n \n);\n\nexport const ShowResource: React.FC = ({ title, list }) => (\n <>\n {title}\n {list && }\n \n);\n\nconst CheckoutGiftCardView: React.FC = props => {\n const { checkoutGiftCardProps, checkoutErrorRef, showGiftCard, addGiftCard } = props;\n return (\n \n {showGiftCard && }\n {addGiftCard && }\n \n );\n};\n\nexport default CheckoutGiftCardView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { ICheckoutLoyaltyAdd, ICheckoutLoyaltyRewardPoint, ICheckoutLoyaltyShow, ICheckoutLoyaltyViewProps } from './checkout-loyalty';\n\nconst AddCheckoutLoyalty: React.FC = ({\n heading,\n cardNumber,\n drawer,\n rewardPoints,\n loyaltyAmountContainer,\n appliedLoyaltyAmountContainer,\n loyaltyAmountLabel,\n loyaltyAmountInput,\n loyaltyAmountApplyButton,\n showAppliedAmount,\n loyaltyAmountAppliedText,\n loyaltyAmountAppliedPrice,\n loyaltyAmountRemoveButton\n}) => {\n return (\n <>\n {heading}\n {cardNumber}\n \n {rewardPoints.map((rewardPoint: ICheckoutLoyaltyRewardPoint) => {\n return (\n \n {rewardPoint.title}\n {rewardPoint.availablePointsText}\n {rewardPoint.activePoints}\n {rewardPoint.expiringPointsText}\n {rewardPoint.expiringPoints}\n \n );\n })}\n \n \n {loyaltyAmountLabel}\n {loyaltyAmountInput}\n {loyaltyAmountApplyButton}\n {showAppliedAmount && (\n \n {loyaltyAmountAppliedText}\n {loyaltyAmountAppliedPrice}\n {loyaltyAmountRemoveButton}\n \n )}\n \n \n );\n};\n\nconst ShowCheckoutLoyalty: React.FC = ({ heading, coveredAmountText, amount }) => {\n return (\n <>\n {heading}\n {coveredAmountText}\n {amount}\n \n );\n};\n\nconst CheckoutLoyaltyView: React.FC = props => {\n const { checkoutLoyalty, checkoutErrorRef, alert, viewState, showLoyalty, addLoyalty } = props;\n\n return (\n \n {alert}\n {viewState.isShowLoyalty && }\n {viewState.isShowAddLoyalty && }\n \n );\n};\n\nexport default CheckoutLoyaltyView;\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IForm, IItem, IGiftCardBalanceCheckViewProps } from './index';\n\nexport const Form: React.FC = ({\n formProps,\n label,\n inputPinLabel,\n inputExpLabel,\n alert,\n inputProps,\n inputNumProps,\n inputPinProps,\n inputExpProps,\n inputNumber,\n inputPin,\n inputExp,\n applyButton,\n supportExternalGiftCard,\n showGiftCardPinInput,\n showGiftCardExpInput,\n alertFieldLabel\n}) => (\n \n {alert}\n {supportExternalGiftCard ? (\n \n \n {label}\n {inputNumber}\n \n {showGiftCardPinInput && (\n \n {inputPinLabel}\n {inputPin}\n \n )}\n {showGiftCardExpInput && (\n \n {inputExpLabel}\n {inputExp}\n \n )}\n {(showGiftCardPinInput || showGiftCardExpInput) && alertFieldLabel}\n \n ) : (\n <>\n {label}\n {inputNumber}\n \n )}\n {applyButton}\n \n);\n\nexport const Item: React.FC = ({ itemProps, selectedGiftCard }) => {selectedGiftCard};\n\nconst GiftCardBalanceCheckView: React.FC = props => {\n const { giftCardBalanceCheckProps, form, item } = props;\n return (\n \n {form &&
}\n {item && }\n \n );\n};\n\nexport default GiftCardBalanceCheckView;\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","/*!\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 { SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport {\n getConfigureErrors,\n IBuyboxAddToCartViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonResources,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductConfigureDropdownViewProps,\n IBuyboxProductConfigureViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxState,\n IQuickviewViewProps\n} from '@msdyn365-commerce-modules/buybox';\nimport { StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport { IModuleProps, Module, Node } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport { IQuickviewProps as IQuickviewPropsExtend } from '../definition-extensions/quickview.ext.props.autogenerated';\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 Quickview.tsx file\n const { ContainerProps, errorBlock, button } = addToCart;\n\n return (\n \n {errorBlock}\n {button}\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 = (\n callbacks: IBuyboxCallbacks | undefined,\n resources: IBuyboxCommonResources,\n product: SimpleProduct | undefined\n) => (result: IWishlistActionErrorResult) => {\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 viewprops.\n * @param state - Buybox state.\n * @param callbacks - Buybox callbacks.\n * @param product - Product data.\n * @returns -- Returns.\n */\nconst renderAddtoWishlistButton = (\n props: IQuickviewViewProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks | undefined,\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: IQuickviewViewProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks | undefined\n): JSX.Element | null => {\n const product = props.productDetails?.product;\n if (!props.addToWishlist || !product) {\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 * RenderQuantity.\n * @param quantity - Quantity.\n * @param quantityLimitsMessages - QuantityLimitsMessages.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst renderQuantity = (\n quantity: IBuyboxProductQuantityViewProps,\n quantityLimitsMessages: React.ReactNode,\n props: IQuickviewViewProps\n): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\n const { ContainerProps, LabelContainerProps, heading, input, errors } = quantity;\n const { unitOfMeasure } = props;\n\n return (\n \n {heading}\n {input}\n {unitOfMeasure}\n {quantityLimitsMessages}\n {errors}\n \n );\n};\n\n/**\n * KenderKeyInPrice.\n * @param keyInPrice - KeyInPrice.\n * @returns -- Returns.\n */\nconst renderKeyInPrice = (keyInPrice: IBuyboxKeyInPriceViewProps): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\n const { ContainerProps, LabelContainerProps, heading, input } = keyInPrice;\n\n return (\n \n {heading}\n {input}\n \n );\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 * RenderBodyContent.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst renderBodyContent = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\n const {\n price,\n keyInPrice,\n quantity,\n inventoryLabel,\n quantityLimitsMessages,\n loading,\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\n ProductInfoContainerProps,\n MediaGalleryContainerProps,\n CarouselProps,\n addToWishlist,\n configure,\n callbacks,\n state\n } = props;\n if (loading) {\n return <>{loading};\n }\n\n return (\n <>\n \n \n \n \n \n \n {props.resources.priceText}\n {price}\n \n {addToWishlist && renderAddToWishlist(props, state, callbacks)}\n \n {configure && renderConfigure(configure)}\n {keyInPrice && renderKeyInPrice(keyInPrice)}\n {quantity && renderQuantity(quantity, quantityLimitsMessages, props)}\n {inventoryLabel}\n \n \n );\n};\n\n/**\n * RenderQuickViewPopup.\n * @param props - Props.\n * @returns -- Returns.\n */\nconst renderQuickViewPopup = (props: IQuickviewViewProps & IQuickviewPropsExtend<{}>): JSX.Element => {\n // eslint-disable-next-line @typescript-eslint/naming-convention -- Dependency from Quickview.tsx file\n const {\n ModalContainer,\n ModalHeaderContainer,\n ModalFooterContainer,\n ModalHeaderContent,\n ModalBodyContainer,\n addToCart,\n cartContainerProps,\n seeDetailsbutton\n } = props;\n\n return (\n \n \n {ModalHeaderContent}\n \n {props.title}\n {!props.loading && !StringExtensions.isNullOrEmpty(props.state.productPrice?.ItemId) ? (\n \n {props.resources.skuText}\n {props.state.productPrice?.ItemId}\n \n ) : (\n ''\n )}\n {props.rating}\n \n \n {renderBodyContent(props)}\n \n \n {addToCart && seeDetailsbutton}\n {addToCart && renderAddToCart(addToCart)}\n \n \n \n );\n};\n\n/**\n * Functional component which renders quick view button and popup based by the given props file.\n * @param props - Configuration for the quick view component.\n * @returns - Functional component of the quick view.\n */\nexport const QuickViewFunctionalComponent: React.FC> = (\n props: IQuickviewViewProps & IQuickviewPropsExtend<{}>\n) => {\n const { quickView, quickViewButton, isModalOpen } = props;\n const quickViewUpdatedProps: IModuleProps = { ...quickView, title: props.resources.quickViewbuttonText };\n return (\n \n {quickViewButton}\n {isModalOpen && renderQuickViewPopup(props)}\n \n );\n};\n\nexport default QuickViewFunctionalComponent;\n","export enum SupersessionKey {\r\n SupersededId = 'superseded-from-id',\r\n SupersededName = 'superseded-from-name',\r\n Inventory = 'inventory'\r\n}\r\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport { PriceComponent } from '@msdyn365-commerce/components';\nimport { ICoreContext, ITelemetry } from '@msdyn365-commerce/core';\nimport { ICheckoutState, IGiftCardExtend } from '@msdyn365-commerce/global-state';\nimport { Cart, CartLine } from '@msdyn365-commerce/retail-proxy';\nimport { format } from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nexport interface IInvoiceSummaryProps {\n orderTotalLabel: string;\n invoiceLabel: string;\n loyaltyLabel?: string;\n giftcardLabel?: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n cart: Cart;\n id: string;\n typeName: string;\n freeText?: string;\n toBeCalculatedText?: string;\n checkoutState?: ICheckoutState;\n}\n\nexport interface IInvoiceSummaryLines {\n orderTotal: React.ReactNode;\n invoices: React.ReactNode;\n giftCard?: React.ReactNode;\n loyalty?: React.ReactNode;\n}\n\ninterface IInvoiceSummaryLineProps {\n label: string;\n context: ICoreContext;\n telemetry: ITelemetry;\n price?: number;\n freeText?: string;\n toBeCalculatedText?: string;\n id: string;\n typeName: string;\n cssLabel: string;\n}\n\nconst InvoiceSummaryLine: React.FC = ({\n price,\n label,\n context,\n id,\n typeName,\n toBeCalculatedText,\n freeText,\n cssLabel\n}) => {\n return (\n

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

\n );\n};\n\nconst _buildPaymentSummarySection = (\n props: IInvoiceSummaryProps,\n price: number | undefined,\n label: string,\n cssLabel: string\n): React.ReactNode => {\n return (\n \n );\n};\n\nconst _computedLoyaltyAmount = (checkoutState: ICheckoutState): number => {\n return (checkoutState && checkoutState.loyaltyAmount) || 0;\n};\n\nconst _computeGiftCardAmount = (checkoutState: ICheckoutState, cart: Cart): number => {\n const giftCardCounter = (count: number, giftCard: IGiftCardExtend) => {\n return count + (giftCard.Balance || 0);\n };\n const giftCardTotalValue = (checkoutState.giftCardExtends || []).reduce(giftCardCounter, 0);\n const amount = (cart.TotalAmount || 0) - _computedLoyaltyAmount(checkoutState);\n return Math.min(giftCardTotalValue, amount);\n};\n\nexport const InvoiceSummary = (props: IInvoiceSummaryProps) => {\n const { TotalAmount, CartLines } = props.cart;\n const invoiceLines = CartLines?.filter(cartLine => cartLine.IsInvoiceLine);\n const reactNodes: IInvoiceSummaryLines = {\n invoices: invoiceLines?.map((invoiceLine: CartLine) => {\n return _buildPaymentSummarySection(\n props,\n invoiceLine.InvoiceAmount,\n format(props.invoiceLabel, invoiceLine.InvoiceId),\n 'invoice'\n );\n }),\n orderTotal: _buildPaymentSummarySection(props, TotalAmount, props.orderTotalLabel, 'total')\n };\n\n if (props.checkoutState) {\n const giftCardAmount = _computeGiftCardAmount(props.checkoutState, props.cart);\n const loyaltyAmount = _computedLoyaltyAmount(props.checkoutState);\n const totalAmountAfterGiftCard = (TotalAmount || 0) - giftCardAmount - loyaltyAmount;\n\n if (loyaltyAmount > 0) {\n reactNodes.loyalty = _buildPaymentSummarySection(props, -loyaltyAmount, props.loyaltyLabel || 'Loyalty amount', 'loyalty');\n }\n\n if (giftCardAmount > 0) {\n reactNodes.giftCard = _buildPaymentSummarySection(\n props,\n -giftCardAmount,\n props.giftcardLabel || 'Gift card amount',\n 'gift-card'\n );\n }\n\n reactNodes.orderTotal = _buildPaymentSummarySection(\n { ...props, freeText: undefined },\n totalAmountAfterGiftCard,\n props.orderTotalLabel,\n 'total'\n );\n }\n\n return reactNodes;\n};\n","/*!\n * Copyright (c) Microsoft Corporation.\n * All rights reserved. See LICENSE in the project root for license information.\n */\n\nimport {\n AddToCartComponent,\n AddToOrderTemplateComponent,\n AddToWishlistComponent,\n IAddToCartFailureResult,\n IAddToCartResources,\n IAddToOrderTemplateDialogResources,\n IDuplicateItemsWhenAddingToOrderTemplateDialogResources,\n IItemAddedToOrderTemplateDialogResources,\n IOrderTemplateActionErrorResult,\n IOrderTemplateNameDialogResources,\n IWishlistActionErrorResult,\n PriceComponent,\n RatingComponent\n} from '@msdyn365-commerce/components';\nimport { getUrlSync, IImageSettings } from '@msdyn365-commerce/core';\nimport { ICartActionResult, ICartState } from '@msdyn365-commerce/global-state';\nimport { ProductAvailableQuantity, SimpleProduct } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, DeliveryMode, validateCatalogId } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Alert,\n Button,\n format,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n Heading,\n ITelemetryContent,\n Node,\n Quantity,\n TelemetryConstant\n} from '@msdyn365-commerce-modules/utilities';\nimport * as React from 'react';\n\nimport {\n IBuyboxAddToCartViewProps,\n IBuyboxAddToOrderTemplateViewProps,\n IBuyboxAddToWishlistViewProps,\n IBuyboxCallbacks,\n IBuyboxCommonData,\n IBuyboxCommonResources,\n IBuyboxErrorBlockProps,\n IBuyboxExtentedProps,\n IBuyboxKeyInPriceViewProps,\n IBuyboxProductQuantityViewProps,\n IBuyboxShopSimilarLookViewProps,\n IBuyboxState,\n IProductDetails,\n ShopSimiliarButtonType\n} from './buyboxInterface';\nimport { getConfigureErrors, getGenericError, getQuantityError } from './utilities/error-utilities';\n\nconst _getClassNamePrefix = (typeName: string): string => {\n return typeName.toLocaleLowerCase() === 'quickview' ? 'ms-quickView' : 'ms-buybox';\n};\n\nexport function getBuyBoxInventoryLabel(\n props: IBuyboxExtentedProps,\n productDetails?: IProductDetails\n): React.ReactElement | undefined {\n const { typeName } = props;\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const productAvailableQuantity = props.data.productAvailableQuantity?.result ?? productDetails?.productAvailableQuantity;\n\n const className = _getClassNamePrefix(typeName);\n if (!productAvailableQuantity || !ArrayExtensions.hasElements(productAvailableQuantity)) {\n return undefined;\n }\n const shippingInventory = productAvailableQuantity.find(shipping => shipping.deliveryType === DeliveryMode.shipping);\n\n if (shippingInventory) {\n let inventoryClassName: string;\n if (shippingInventory.StockLevelCode) {\n inventoryClassName = `${className}__inventory-label ${className}__inventory-code-${shippingInventory.StockLevelCode.toLowerCase()}`;\n } else {\n inventoryClassName = `${className}__inventory-label`;\n }\n return (\n
\n {shippingInventory.StockLevelLabel}\n
\n );\n }\n\n return undefined;\n}\n\nexport function getBuyboxProductTitle(\n props: IBuyboxExtentedProps,\n productDetails?: IProductDetails\n): React.ReactElement | undefined {\n const {\n config: { titleHeadingTag = 'h1' },\n typeName\n } = props;\n const className = _getClassNamePrefix(typeName);\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const product = props.data.product?.result ?? productDetails?.product ?? undefined;\n\n return product && ;\n}\n\nexport function getBuyboxProductDescription(\n props: IBuyboxExtentedProps,\n productDetails?: IProductDetails\n): React.ReactElement | undefined {\n const { typeName } = props;\n const className = _getClassNamePrefix(typeName);\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const product = props.data.product?.result ?? productDetails?.product ?? undefined;\n\n return product &&

{product.Description}

;\n}\n\n/**\n * Gets the react node for product unit of measure display.\n * @param {IBuyboxExtentedProps} props The buybox module props.\n * @param {IProductDetails} productDetails The product details to be displyed in buybox.\n * @returns {React.ReactElement} The node representing markup for unit of measure component.\n */\nexport function getBuyboxProductUnitOfMeasure(\n props: IBuyboxExtentedProps,\n productDetails?: IProductDetails\n): React.ReactElement | undefined {\n const { typeName } = props;\n const className = _getClassNamePrefix(typeName);\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access -- Do not need type check for appsettings\n if (\n props.context.app.config &&\n (!props.context.app.config.unitOfMeasureDisplayType || props.context.app.config.unitOfMeasureDisplayType === 'none')\n ) {\n return undefined;\n }\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const product = props.data.product?.result ?? productDetails?.product;\n if (!product || !product.DefaultUnitOfMeasure) {\n props.telemetry.warning('Missing defult unit of measureor theproduct');\n return undefined;\n }\n\n return (\n
\n {product.DefaultUnitOfMeasure}\n
\n );\n}\n\nlet telemetryContent: ITelemetryContent;\n\n/**\n * On add to cart failed function.\n * @param props -The buybox module props.\n * @param state -The buybox module state.\n * @param callbacks -The buybox module callbacks.\n * @param defaultMinimumKeyInPrice -The default minimum key in price.\n * @param defaultMaximumKeyInPrice -The default maximum key in price.\n * @param cart -The cart state.\n * @param product -The simple product.\n * @param productAvailability -The product available quantity.\n * @returns Update error state.\n */\nconst onAddToCartFailed = (\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n defaultMinimumKeyInPrice: number,\n defaultMaximumKeyInPrice: number,\n cart: ICartState,\n product: SimpleProduct,\n productAvailability: ProductAvailableQuantity | undefined\n) => (result: IAddToCartFailureResult) => {\n let quantityErrorForState: string | undefined;\n let customAmountErrorForState: string | undefined;\n let otherErrorForState: string | undefined = getGenericError(\n result,\n cart,\n props.resources,\n props.context,\n product,\n productAvailability,\n undefined\n );\n\n if (result.failureReason === 'OUTOFSTOCK') {\n quantityErrorForState = result.failureReason === 'OUTOFSTOCK' ? getQuantityError(result.stockLeft, props.resources) : undefined;\n } else if (\n result.failureReason === 'CARTACTIONFAILED' &&\n result.cartActionResult &&\n (result.cartActionResult.substatus === 'MAXQUANTITY' || result.cartActionResult.substatus === 'QUANTITYLIMITS')\n ) {\n quantityErrorForState = getGenericError(result, cart, props.resources, props.context, product, productAvailability, undefined);\n otherErrorForState = undefined; // Prevent error duplication in otherError and quantityError\n }\n\n if (result.failureReason === 'INVALIDCUSTOMAMOUNT') {\n if (state.keyInPriceAmount === undefined || state.keyInPriceAmount < (props.config.minimumKeyInPrice || defaultMinimumKeyInPrice)) {\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(\n props.config.minimumKeyInPrice || defaultMinimumKeyInPrice\n );\n customAmountErrorForState = props.resources.invalidSmallCustomAmountText.replace('{minAmount}', formatedAmountLimit);\n } else if (state.keyInPriceAmount > (props.config.maximumKeyInPrice || defaultMaximumKeyInPrice)) {\n const formatedAmountLimit = props.context.cultureFormatter.formatCurrency(\n props.config.maximumKeyInPrice || defaultMaximumKeyInPrice\n );\n customAmountErrorForState = props.resources.invalidLargeCustomAmountText.replace('{maxAmount}', formatedAmountLimit);\n }\n }\n\n callbacks.updateErrorState({\n errorHost: 'ADDTOCART',\n quantityError: quantityErrorForState,\n configureErrors:\n result.failureReason === 'MISSINGDIMENSION'\n ? getConfigureErrors(result.missingDimensions, props.resources, product?.IsGiftCard)\n : {},\n customAmountError: customAmountErrorForState,\n otherError: otherErrorForState\n });\n};\n\n/**\n * On Item Add To Cart function.\n * @param typeName -Type name.\n * @param callbacks -Buybox Callbacks.\n * @returns Change modal open.\n */\nconst onItemAddedToCart = (typeName: string, callbacks: IBuyboxCallbacks) => (result: ICartActionResult) => {\n if (typeName === 'quickview') {\n callbacks.changeModalOpen(false);\n }\n};\n\nexport function getBuyboxAddToCart(\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n defaultMinimumKeyInPrice: number,\n defaultMaximumKeyInPrice: number,\n productDetails?: IProductDetails,\n hasAvailableProducts?: boolean\n): IBuyboxAddToCartViewProps {\n const { id, typeName, context, resources } = props;\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const product = props.data.product?.result ?? productDetails?.product;\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const cart = props.data.cart?.result ?? productDetails?.cart;\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const productAvailableQuantity = props.data.productAvailableQuantity?.result ?? productDetails?.productAvailableQuantity;\n\n const {\n quantity,\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\n selectedProduct,\n isUpdatingDimension,\n isUpdatingDeliveryOptions,\n isServiceItem\n } = state;\n\n const productAvailability = state.productAvailableQuantity\n ? state.productAvailableQuantity.ProductAvailableQuantity\n : productAvailableQuantity && productAvailableQuantity.length > 0\n ? productAvailableQuantity[0].ProductAvailableQuantity\n : undefined;\n\n const dialogStrings: IAddToCartResources = {\n goToCartText: resources.buyBoxGoToCartText,\n continueShoppingText: resources.buyBoxContinueShoppingText,\n closeNotificationLabel: resources.closeNotificationLabel,\n headerItemOneText: resources.buyBoxSingleItemText,\n headerItemFormatText: resources.buyBoxMultiLineItemFormatText,\n headerMessageText: resources.buyBoxHeaderMessageText,\n freePriceText: resources.priceFree,\n originalPriceText: resources.originalPriceText,\n currentPriceText: resources.currentPriceText,\n addedQuantityText: resources.addedQuantityText\n };\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n lg: { q: 'w=240&h=240&m=6', w: 0, h: 0 },\n xl: { q: 'w=240&h=240&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const isProductQuantityLoading = typeName !== 'quickview' && props.data.productAvailableQuantity.status === 'LOADING';\n if (isProductQuantityLoading) {\n callbacks.changeUpdatingDimension(false);\n }\n\n const isLoadingDeliveryOptions = typeName !== 'quickview' && props.data.deliveryOptions?.status === 'LOADING';\n if (isLoadingDeliveryOptions && callbacks.changeUpdatingDeliveryOptions) {\n callbacks.changeUpdatingDeliveryOptions(false);\n }\n\n telemetryContent = getTelemetryObject(props.context.request.telemetryPageName!, props.typeName, props.telemetry);\n\n // Check if the product delivery mode is electronic\n const emailDeliveryModeCode = props.context.actionContext.requestContext.channel?.EmailDeliveryModeCode;\n // from quickview we are not getting deliveryoptions in props.data hence getting it from quickview state\n const deliveryOptions = typeName === 'quickview' ? state.productDeliveryOptions : props.data.deliveryOptions?.result;\n const isEmailDelivery =\n ArrayExtensions.hasElements(deliveryOptions?.DeliveryOptions) && deliveryOptions!.DeliveryOptions[0].Code === emailDeliveryModeCode;\n const className = _getClassNamePrefix(typeName);\n const isDisabled = isUpdatingDimension && typeName === 'quickview';\n const { enableHidePdpRepeatingErrors } = props.context.request.features;\n return {\n ContainerProps: {\n className: `${className}__add-to-cart-container`\n },\n button: product && (\n \n ),\n errorBlock: (\n \n )\n };\n}\n\n/**\n * Get the React.ReactElement contains price.\n * @param props - The IBuyboxExtentedProps.\n * @param state - The buybox state.\n * @returns The React.ReactElement.\n */\nexport function getBuyboxProductPrice(props: IBuyboxExtentedProps, state: IBuyboxState): React.ReactElement | undefined {\n const { id, typeName, context, resources } = props;\n\n return (\n state.productPrice && (\n featureState.Name === 'Dynamics.AX.Application.RetailSearchPriceRangeFeature'\n )?.IsEnabled\n }\n isSalesAgreementPriceFeatureEnabled={\n props.data.featureState.result?.find(\n featureState => featureState.Name === 'Dynamics.AX.Application.RetailSalesAgreementPriceSupportFeature'\n )?.IsEnabled\n }\n priceResources={{\n priceRangeSeparator: resources.priceRangeSeparator,\n salesAgreementPricePrompt: resources.salesAgreementPricePrompt,\n salesAgreementExpirationDatePrompt: resources.salesAgreementExpirationDatePrompt,\n salesAgreementCommittedQuantityPrompt: resources.salesAgreementCommittedQuantityPrompt,\n salesAgreementRemainingQuantityPrompt: resources.salesAgreementRemainingQuantityPrompt\n }}\n freePriceText={resources.priceFree}\n originalPriceText={resources.originalPriceText}\n currentPriceText={resources.currentPriceText}\n />\n )\n );\n}\n\nexport function getBuyboxProductRating(\n props: IBuyboxExtentedProps,\n productDetails?: IProductDetails\n): React.ReactElement | undefined {\n const { id, typeName, context, resources } = props;\n\n // Since the data action can return no value, and the type is non-nullable due to backward compatibility reasons, the null check is required.\n // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition -- Explicitly check for null/undefined.\n const ratingsSummary = props.data.ratingsSummary?.result ?? productDetails?.ratingsSummary;\n if (!ratingsSummary || !ratingsSummary.averageRating) {\n return
;\n }\n const ratingComponent = (\n \n );\n\n return ratingComponent;\n}\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\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\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\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 order template failed function.\n * @param callbacks -Buybox callbacks.\n * @param resources -Buybox common 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\nexport function getBuyboxProductAddToOrderTemplate(\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n isMultipleCatalogsFeatureEnabled?: boolean,\n catalogId?: number\n): IBuyboxAddToOrderTemplateViewProps | undefined {\n const {\n id,\n typeName,\n context,\n data: {\n orderTemplates: { result: orderTemplates },\n customerInformation: { result: customerInformation }\n },\n resources\n } = props;\n\n const product = props.data.product?.result;\n\n const {\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\n quantity\n } = state;\n\n // If custom amount is selected, add-to-orderTemplate is disabled\n if (state.isCustomPriceSelected) {\n return undefined;\n }\n const className = _getClassNamePrefix(typeName);\n const { enableHidePdpRepeatingErrors } = props.context.request.features;\n\n return {\n ContainerProps: {\n className: `${className}__add-to-order-template-container`\n },\n button: product && orderTemplates && (\n \n ),\n errorBlock: (\n \n )\n };\n}\n\n/**\n * Renders add to comparison button for the given product.\n * @param productComparisonButton - React element of the button.\n * @param product - Product information.\n * @param catalogId - Current catalog.\n * @param state - Buybox state.\n * @returns React element of the button.\n */\nexport function getBuyboxProductComparisonButton(\n productComparisonButton: React.ReactNode,\n product: SimpleProduct,\n catalogId: number,\n state: IBuyboxState\n): JSX.Element | undefined {\n if (state.isCustomPriceSelected) {\n return undefined;\n }\n\n validateCatalogId(catalogId);\n return React.cloneElement(productComparisonButton as React.ReactElement, { product, catalogId });\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\nexport function getBuyboxProductAddToWishlist(\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks,\n productDetails?: IProductDetails\n): IBuyboxAddToWishlistViewProps | undefined {\n const {\n id,\n typeName,\n context,\n data: {\n wishlists: { result: wishlists }\n },\n resources\n } = props;\n\n const product = props.data.product?.result ? props.data.product.result : productDetails?.product;\n\n const {\n errorState: { configureErrors, quantityError, customAmountError, otherError, errorHost },\n selectedProduct\n } = state;\n\n // If custom amount is selected, add-to-wishlist is disabled\n if (state.isCustomPriceSelected) {\n return undefined;\n }\n\n const className = _getClassNamePrefix(typeName);\n const { enableHidePdpRepeatingErrors } = props.context.request.features;\n return {\n ContainerProps: {\n className: `${className}__add-to-wishlist-container`\n },\n button: product && (\n \n ),\n errorBlock: (\n \n )\n };\n}\n\n/**\n * On quantity change function.\n * @param callbacks -Buybox callbacks.\n * @returns Update quantity.\n */\nconst onQuantityChangeHandler = (callbacks: IBuyboxCallbacks) => (newValue: number) => {\n if (callbacks.updateQuantity) {\n callbacks.updateQuantity(newValue);\n }\n};\n\nexport function getBuyboxProductQuantity(\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): IBuyboxProductQuantityViewProps {\n const { resources, typeName } = props;\n\n const {\n quantity,\n min,\n max,\n errorState: { quantityError }\n } = state;\n\n const className = _getClassNamePrefix(typeName);\n\n return {\n ContainerProps: {\n className: `${className}__quantity`\n },\n LabelContainerProps: {\n tag: 'label',\n className: `${className}__product-quantity-label`,\n htmlFor: `${className}__product-quantity-input`\n },\n heading:
{resources.productQuantityHeading}
,\n errors: quantityError && (\n \n \n ),\n input: (\n \n )\n };\n}\n\nexport function getBuyboxShopSimilarButton(\n props: IBuyboxExtentedProps,\n buttonType: ShopSimiliarButtonType\n): IBuyboxShopSimilarLookViewProps {\n const { resources, context, typeName } = props;\n const product = props.data.product?.result;\n\n const className = _getClassNamePrefix(typeName);\n const navigationUrl = (shopSimiliarButtonType: ShopSimiliarButtonType) => () => {\n const searchURL = getUrlSync('search', context && context.actionContext);\n const separator = searchURL!.includes('?') ? '&' : '?';\n document.location.href = `${searchURL}${separator}productId=${product &&\n product.RecordId}&recommendation=${shopSimiliarButtonType}`;\n };\n const telemetryText =\n buttonType === ShopSimiliarButtonType.Looks ? TelemetryConstant.ShopSimliarLooks : TelemetryConstant.ShopSimliarDescription;\n const payLoad = getPayloadObject('click', telemetryContent, telemetryText);\n const attribute = getTelemetryAttributes(telemetryContent, payLoad);\n const text = buttonType === ShopSimiliarButtonType.Looks ? resources.shopSimilarLooksText : resources.shopSimilarDescriptionText;\n\n return {\n ContainerProps: {\n className: `${className}__shopsimilar${buttonType}`\n },\n input: (\n \n {text}\n \n )\n };\n}\n\n/**\n * On price change function.\n * @param callbacks -Buybox callbacks.\n * @returns Update key in price.\n */\nconst onPriceChangeHandler = (callbacks: IBuyboxCallbacks) => (event: React.ChangeEvent) => {\n const value = event.currentTarget.value;\n callbacks.updateKeyInPrice(value.length > 0 ? Number(value) : Number.parseFloat(value));\n};\n\nexport function getBuyboxKeyInPrice(\n props: IBuyboxExtentedProps,\n state: IBuyboxState,\n callbacks: IBuyboxCallbacks\n): IBuyboxKeyInPriceViewProps {\n const { config, resources } = props;\n\n const {\n errorState: {}\n } = state;\n\n const className = _getClassNamePrefix(props.typeName);\n\n return {\n ContainerProps: {\n className: `${className}__key_in_price`\n },\n LabelContainerProps: {\n tag: 'label',\n className: `${className}__key_in_price-label`,\n htmlFor: `${className}__key_in_price`\n },\n heading:
{resources.buyboxKeyInPriceLabelHeading}
,\n input: (\n \n )\n };\n}\n\nexport const BuyboxErrorBlock: React.FC = ({\n showError,\n configureErrors,\n quantityError,\n customAmountError,\n otherError,\n resources,\n enableHidePdpRepeatingErrors\n}) => {\n let errorMessages: (string | undefined)[] = [];\n\n // skip configuration repeating errors when flight is enabled\n if (!enableHidePdpRepeatingErrors) {\n errorMessages = Object.values(configureErrors).filter(message => message !== undefined);\n }\n\n // skip quantity repeating errors when flight is enabled\n if (quantityError && !enableHidePdpRepeatingErrors) {\n errorMessages.push(quantityError);\n }\n\n if (customAmountError) {\n errorMessages.push(customAmountError);\n }\n\n if (otherError) {\n errorMessages.push(otherError);\n }\n\n return (\n 0} color='danger' assertive aria-label={resources.buyboxErrorMessageHeader}>\n \n {errorMessages.map((message, index) => {\n return (\n
\n {message}\n
\n );\n })}\n
\n );\n};\n\nexport function getQuantityLimitsMessages(\n props: IBuyboxExtentedProps,\n state: IBuyboxState\n): React.ReactElement | undefined {\n const { resources } = props;\n\n const { min, max } = state;\n\n if (!_isOrderQuantityLimitsFeatureEnabled(props) && !_isChannelLimitsFeatureEnabled(props)) {\n return undefined;\n }\n\n return (\n \n {_renderMaxLabel(props, max, resources.maxQuantityText)}\n {_renderMinLabel(props, min, resources.minQuantityText)}\n \n );\n}\n\nexport const RetailDefaultOrderQuantityLimitsFeatureName: string = 'Dynamics.AX.Application.RetailDefaultOrderQuantityLimitsFeature';\nexport const EcommerceQuantityLimitConfigurationsFeatureName: string =\n 'Dynamics.AX.Application.EcommerceQuantityLimitConfigurationsFeature';\nexport const RevertToSiteBuilderOrderQuantityLimitsSettingsCRTFeatureName: string = 'RevertToSiteBuilderOrderQuantityLimitsSettings';\n\nconst _renderMaxLabel = (\n props: IBuyboxExtentedProps,\n max: number | undefined,\n maxQuantityText: string\n): React.ReactElement | undefined => {\n const { resources, typeName } = props;\n const className = _getClassNamePrefix(typeName);\n if (max && max !== 0 && max !== Number.MAX_VALUE) {\n return (\n

\n {resources.informationIconText}\n