{"version":3,"file":"static/js/c2320ca997d22f807ee9.bundle.js","mappings":"kvBAAA,MAAMA,EAAU,CAAEC,QAAS,CAAC,EAAGC,YAAa,CAAC,GAwCxCF,EAAQC,QAAQ,mBAAqB,CAClCE,EAAG,IAAMC,EAAQ,KACjBC,MAAO,gBACPC,GAAI,CAAC,CAACC,KAAK,aAAeC,KAAK,8EAA+EC,MAAO,IAErHC,KAAK,EACLC,GAAI,6BACJC,EAAG,kBACHC,EAAG,kBAEHC,IAAK,GAGLC,GAAI,4FAlC4B,EAACC,EAAqBC,KAUlD,GADAjB,EAAQE,YAAYc,GAAuBC,GACtCjB,EAAQE,YAAYc,GAAqBE,QAC1C,MAAM,IAAIC,MAAM,oBAAsBH,EAAsB,mCAEhEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUC,eAAiBL,EACxEhB,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUE,KAC3DtB,EAAQE,YAAYF,EAAQE,YAAYc,GAAqBE,QAAQE,UAAUE,IAAMN,EAE7F,EAwBIO,CAF4B,8EACXnB,EAAQ,MAMjCoB,OAAOC,aAAeD,OAAOC,cAAgB,CAAC,EAC9CD,OAAOC,aAAaxB,QAAO,OACpBuB,OAAOC,aAAaxB,SAAW,CAAC,GAChCD,EAAQC,SAGXuB,OAAOC,aAAavB,YAAW,OAC5BsB,OAAOC,aAAavB,aAAe,CAAC,GACpCF,EAAQE,aAEY,MAAMwB,EAAiB,CAAC,EAC/BA,EAAe,yFAA2F,CAClHvB,EAAG,IAAMC,EAAQ,MACjBuB,GAAI,kEAEpBD,EAAe,sFAAwF,CACvFvB,EAAG,IAAMC,EAAQ,KACjBuB,GAAI,8DAEpBD,EAAe,kGAAoG,CACnGvB,EAAG,IAAMC,EAAQ,MACjBuB,GAAI,qEAEpBH,OAAOC,aAAeD,OAAOC,cAAgB,CAAC,EAC9CD,OAAOC,aAAaC,eAAc,OACPF,OAAOC,aAAaC,gBAAkB,CAAC,GACvCA,E,6tBCvDpB,MAAME,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAbF,KAAAE,aAAuB,EAEd,KAAAC,qBAA+B,EAE/B,KAAAC,UAAoB,GAkbpB,KAAAC,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAAA,YAA4BL,EAAOM,qBACnCN,EAAOM,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMN,IACtBQ,EAA+BH,EAAKC,MAAMG,cAChDV,EAAiBW,KAAK,CAAEV,IAAKO,EAAUN,QAASI,EAAKM,KAAMF,cAAeD,EACtEI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAAoB,KAIlFC,KAAKC,SAAS,CACVC,cAAelB,EAAiBmB,OAAS,EAAInB,EAAmB,CAAC,CAAEC,IAAK,UACxEmB,qBAAsBrB,GACxB,EASW,KAAAsB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKzB,MAAMiC,aASZR,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjB4C,WAAYH,KAVhBP,KAAKC,SAAS,CACVQ,WAAaT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAeH,EAAKxC,QAAO8C,EAAYN,EAAKxC,GAC7F4C,WAAYH,IAEZP,KAAKzB,MAAMsC,mBACXb,KAAKpB,qBAAqB0B,EAAKQ,YAAcR,EAA7CN,IASRA,KAAKe,aAAa,EAML,KAAAA,YAAc,KACvBf,KAAKzB,MAAMiC,cACXQ,YAAW,KACPhB,KAAKiB,UAAYjB,KAAKiB,SAASC,SAAWlB,KAAKiB,SAASC,QAAQC,OAAO,GACxE,EAAG,EAQG,KAAAC,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,SAC/DvB,KAAKC,SACD,CACIQ,gBAAYG,EACZV,cAAe,MAErB,EAQO,KAAAsB,oBAAuBH,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAMI,gBAC/DzB,KAAK0B,eAAgB,EAiBZ,KAAAC,aAAgBN,IAE7B,GAAIA,EAAMO,UAAY5B,KAAKrB,UAAW,CAClC,IAAKqB,KAAKzB,MAAMiC,aAAc,CAC1B,MAAMqB,EAAgBC,MAAMC,KAAK/B,KAAKiB,SAASC,QAASc,YACxD,IAAK,MAAM1C,KAAQuC,EAAe,CAC9B,MAAMI,EAAkB3C,EAAK4C,WACyB,SAAlDD,EAAgBE,aAAa,kBAC7BF,EAAgBd,OAAO,EAInCnB,KAAK0B,eAAgB,GAIZ,KAAAU,kBAAqBlC,IAElC,IAAKA,IAAkBA,EAAcjB,IACjC,OAAO,KAGX,MAAMoD,GAAmBC,EAAAA,EAAAA,kBAAiBpC,EAAcjB,IAAKe,KAAKzB,MAAMgE,QAAQC,cAAcC,eAAeC,aACvGC,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCzF,GAAI,CAAEuF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEd,QAAyBvC,IAArByB,EAAgC,CAAC,IAAD,IAChC,MAAMe,EAAwB,CAAEnE,IAAKoD,GACrC,OACIhE,EAAAA,cAACgF,EAAAA,GAAK,eACFZ,eAAgBzC,KAAKzB,MAAMgE,QAAQC,cAAcC,eACjDa,UAAU,sBACNF,EAAS,CACbG,aAAcvD,KAAKzB,MAAMgE,QAAQiB,QAAQD,aACzC7D,cAA0C,QAA7B,EAAEQ,EAAcR,qBAAa,QAA4C,QAA5C,EAAKM,KAAKzB,MAAMkF,OAAOC,6BAAqB,QAAIf,EAC1FgB,oBAAoB,OACpBC,KAAK,WACL9F,GAAI,GAAGoC,EAAcjB,qBACrBC,QAASgB,EAAchB,UACzB,CAGV,OAAO,IAAI,EAOE,KAAA2E,gBAAmBC,IAChC,MAAM,eAAEC,GAAmB/D,KAAKW,MAE1BqD,EAAU,CAAE,MADoCpD,IAA3BkD,EAAYG,WAA2BH,EAAYG,WAAa,IAC3DH,EAAYI,QAC5ClE,KAAKC,SAAS,CAAE8D,eAAe,EAAD,KAAOA,GAAmBC,IAAY,EAlkBpEhE,KAAKiB,SAAW5C,EAAAA,YAChB2B,KAAKW,MAAQ,CAAEF,gBAAYG,EAAWF,gBAAYE,EAAWR,qBAAsB,GAAI2D,eAAgB,CAAC,GACxG/D,KAAK0B,cAAgB1B,KAAK0B,cAAcyC,KAAKnE,MAC7CA,KAAK2B,aAAe3B,KAAK2B,aAAawC,KAAKnE,MAC3CA,KAAKoE,kBAAmBC,EAAAA,EAAAA,oBAAmBrE,KAAKzB,MAAMgE,QAAQiB,QAAQc,kBAClEtE,KAAKzB,MAAMgG,aACXvE,KAAKzB,MAAMiG,WACfxE,KAAKyE,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS1E,KAAKoE,iBAAkB,GAAI,GACxE,CAEOO,oBACCC,EAAAA,GAAAA,YACAC,SAASC,KAAKC,iBAAiB,UAAY/E,KAAK2B,cAA2C,GAC3FkD,SAASC,KAAKC,iBAAiB,YAAa/E,KAAKoB,qBACjDyD,SAASC,KAAKC,iBAAiB,WAAY/E,KAAKwB,qBAGxD,CAEOwD,uBACCJ,EAAAA,GAAAA,YACAC,SAASI,oBAAoB,UAAYjF,KAAK2B,cAA2C,GACzFkD,SAASC,KAAKG,oBAAoB,YAAajF,KAAKoB,qBAAqB,GACzEyD,SAASC,KAAKG,oBAAoB,WAAYjF,KAAKwB,qBAAqB,GAEhF,CAEO0D,SACH,MAAM,aAAE1E,GAAiBR,KAAKzB,MAG9B,OADAyB,KAAKvB,aAAe,EAEhBJ,EAAAA,cAAAA,EAAAA,SAAAA,KACKmC,EAAeR,KAAKmF,oBAAsBnF,KAAKoF,qBAG5D,CAMQD,oBACJ,MAAM,aAAE3E,EAAY,aAAE6E,EAAY,WAAEC,GAAetF,KAAKzB,MACxD,OACIF,EAAAA,cAACkH,EAAAA,OAAM,iBAAKD,EAAU,CAAEhC,UAAWkC,IAAWF,EAAWhC,UAAW9C,EAAe,cAAgB,kBAC9F6E,EAAahG,KAAI,CAACoG,EAAyBC,IACjC1F,KAAK2F,kBAAkBF,EAAUJ,EAAalF,OAAQuF,EAAW1F,KAAKtB,wBAI7F,CAMQ0G,qBACJ,MAAM,SAAEQ,EAAQ,WAAEN,GAAetF,KAAKzB,MACtC,OACIF,EAAAA,cAACkH,EAAAA,OAAM,iBAAKD,EAAU,CAAEhC,UAAWkC,IAAWF,EAAWhC,aACrDjF,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEE,IAAK9F,KAAKiB,SAAU8E,SAAS,OAC5C/F,KAAKgG,kBAItB,CASQL,kBAAkBF,EAAyBQ,EAAiBP,GAChE,OAAID,GAAYA,EAASS,SAAW/G,EAAAA,gBAAAA,YAA4BsG,EAASS,SAC7DlG,KAAKmG,cAAcV,EAAUQ,EAASP,GAE1C1F,KAAKoG,oBAAoBX,OAAU7E,GAAW,GAAM,EAAOqF,EAASP,EAEhF,CASQS,cAAcV,EAAyBQ,EAAkBP,GAC7D,MAAMW,EAAmBZ,EAAS1G,SAC5BuH,EAAWtG,KAAKW,MAAMoD,eACtBE,OAAkCrD,IAArByF,EAAiCA,EAAmB,GACjEE,OAAoB3F,IAAb0F,EAAyBA,EAAW,CAAC,GAC5C,aAAE9F,GAAiBR,KAAKzB,MAE9B,IAAIiI,GAAe,EACfD,EAAKtC,KACLuC,GAAe,GAEnB,MAAMC,EAA2B,CAAEvC,OAAQsC,GAC3C,OACInI,EAAAA,cAACqI,EAAAA,OAAM,CACH9C,KAAK,UACL+C,kBAAmB,CACf,eAAgBV,EAChB,gBAAiBP,EACjB,KAAQ,UAEZkB,UAAWpG,EAAeiF,EAASmB,eAAYhG,EAC/CiG,IAAKpB,EAAS3H,GAAIwF,UAAU,iBAAiBwD,UAAU,sBACvDC,SAAU/G,KAAK6D,gBAAiBmD,cAAeP,EAC/CQ,WAAW,uBAAuBC,eAAe,MAAMb,iBAAkBrG,KAAKmH,gBAAgBd,EAAkBJ,EAASP,IACzHrH,EAAAA,cAAAA,MAAAA,CAAKuF,KAAK,WACL6B,EAASS,QAAS7G,KAAI,CAAC+H,EAA4BC,KAAsB,MAChB,EAAtD,OAAIlI,EAAAA,gBAAAA,YAA4BiI,EAAYlB,SAChClG,KAAKmG,cAAciB,EAA6B,QAAlB,EAAE3B,EAASS,eAAO,aAAhB,EAAkB/F,OAAQkH,EAAarH,KAAKtB,sBAEjFsB,KAAKsH,kBAAkBF,EAA6B,QAAlB,EAAE3B,EAASS,eAAO,aAAhB,EAAkB/F,OAAQkH,EAAarH,KAAKtB,qBAAqB,KAKhI,CASQyI,gBAAgBpI,EAA8BkH,EAA6BP,GAC/E,OACIrH,EAAAA,cAAAA,OAAAA,CAAAA,eAAoB4H,EAAO,gBAAiBP,GACvC3G,EAGb,CASQuI,kBAAkBhI,EAAqB2G,EAA6BP,GACxE,OAAIpG,GAAQA,EAAKP,UAAYO,EAAKiI,SAAWjI,EAAKiI,QAAQpH,OAAS,EAE3DH,KAAKoG,oBAAoB9G,OAAMsB,GAAW,GAAM,EAAOqF,EAASP,GAE7DpG,GAAQA,EAAKP,WAAaO,EAAKiI,QAElCvH,KAAKwH,oBAAoBlI,GAG1B,IACX,CAMQ0G,iBACJ,MAAM,SAAEyB,EAAQ,aAAEpC,EAAY,aAAE7E,GAAiBR,KAAKzB,OAChD,WAAEkC,GAAeT,KAAKW,MACtB+G,EAA8B,GAEpC,GAAIlH,QAA+BI,IAAfH,GAA4B4E,EAAalF,OAAS,EAAG,CACrE,IAAIsF,EAA0B,CAAC,EAC/B,IAAK,MAAMkC,KAAiBtC,EAAc,CACtC,GAAIsC,GAAiBA,EAAc7J,KAAO2C,EAAY,CAClDgF,EAAWkC,EACX3H,KAAKC,SAAS,CAAES,gBAAYE,IAC5B,KAAM,CAGV,GADA6E,EAAWzF,KAAK4H,gBAAgBD,GAC5BlC,GAAYA,EAAS3H,KAAO2C,EAC5B,MAIRgF,GAAYiC,EAAa/H,KACrBtB,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKpB,EAAS3H,IAAQ2J,GACvB,IACAzH,KAAK6H,oBAAoBpC,GACzB,KAEP,MAEFJ,EAAayC,SAAQ,CAACxI,EAAqByI,KACvCL,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKkB,GAAWN,GACjBzH,KAAK6H,oBAAoBvI,IAEjC,IAIT,OAAOoI,CACX,CAOQE,gBAAgBtI,GACpB,MAAM0I,EAAW1I,GAAQA,EAAK4G,QAC9B,GAAI8B,GAAYA,EAAS7H,OAAS,EAC9B,IAAK,IAAI8H,EAAI,EAAGA,GAAKD,EAAS7H,OAAS,EAAG8H,IAAK,CAC3C,GAAID,EAASC,GAAGnK,KAAOkC,KAAKW,MAAMF,WAE9B,OADAT,KAAKC,SAAS,CAAES,WAAYpB,aAAI,EAAJA,EAAMxB,KAC3BkK,EAASC,GAEpB,MAAMC,EAAQlI,KAAK4H,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,CAAK,CAIxB,OAAO,IACX,CAOQL,oBAAoBxC,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQ/F,OAAS,EAClEH,KAAKzB,MAAMiC,mBAA0CI,IAA1BZ,KAAKW,MAAMF,WAC9BT,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,IAG/DO,EAAAA,cAAAA,EAAAA,SAAAA,KACK2B,KAAKoI,sBAAsB/C,GAC3BrF,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,KAIzDuH,GAAgBA,EAAatG,UAAYsG,EAAakC,SAAWlC,EAAakC,QAAQpH,OAAS,EAC9FH,KAAKoG,oBAAoBf,EAAcA,EAAavH,IAAI,GAAO,GAChEuH,GAAgBA,EAAatG,WAAasG,EAAakC,QACtDvH,KAAKwH,oBAAoBnC,EAAcA,EAAavH,IAAI,GAG7D,IACX,CAEQqK,eAAeH,EAA4BvH,EAAqB4H,GACpE,MAAM,aAAE7H,EAAY,SAAEiH,GAAazH,KAAKzB,MAClC+J,EAAyBtI,KAAKzB,MAAMkF,OAAO8E,uBAAwB,EAEnEC,EAA0BxI,KAAKzB,MAAMkF,OAAOgF,kBAD7B,EAIrB,GAAIhI,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,gEAC5B,KAGX,IAAKV,GAAgC,IAApBA,EAAS7H,OAEtB,OADAH,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,GAAYA,EAAS3I,KAAI,CAACP,EAAuB+J,KACjE,MAAMC,EAAchK,EAAOoH,SAAWpH,EAAOoH,QAAQ/F,OAAS,EAC9D,IAAIsF,EAOAS,EALAT,EADAqD,GAActI,EACHR,KAAKoI,sBAAsBtJ,EAAQ2B,EAAYoI,GAE9C/J,EAAOyI,QAAUvH,KAAKoG,oBAAoBtH,EAAQ+J,GAAO7I,KAAKwH,oBAAoB1I,GAIlG,MAAMiK,EAAcD,GAAcR,GAA2BtI,KAAKvB,cAAgBuK,KAAKC,MAAMT,GAA2B,EAMxH,OALIO,IACA/I,KAAKvB,eACLkK,EAAiBL,EAAyB,SAAStI,KAAKvB,aAAayK,aAAe,GACpFhD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,QAAS1F,EAAe1B,EAAOhB,QAAK8C,GAAW,IAGpFvC,EAAAA,cAACwH,EAAAA,KAAI,iBAAK4B,EAAQ,CAAEZ,IAAK/H,EAAOhB,GAAIwF,UAAWkC,IAAWiC,EAASnE,UAAWyF,GAAe,iBACvFtD,EACAS,EACC,IAGf,OAAQlG,KAAKmJ,YAAYR,EAAgBC,EAAanI,EAAY4H,EACtE,CASQD,sBAAsBtJ,EAAuB2B,EAAqBsH,GACtE,MAAM,OAAEqB,GAAWpJ,KAAKzB,MACxB,OACIF,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKkB,GACDqB,EAAM,CACVC,QAASrJ,KAAKK,sBAAsBvB,EAAQ2B,GAC5C6I,QAAStJ,KAAK0B,cAAa,kBACV1B,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,mBAC5DkC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,cAClE2C,IAEX3B,EAAOC,SAGrB,CAYQqH,oBAAoBtH,EAAuBiJ,GACZ,IAD4BwB,IAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,KAAAA,UAAAA,GAA6BC,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAC5FvD,EAAgB,uCAAEP,EAAiB,uCACnC,MAAM,KAAE+D,EAAI,aAAEjJ,GAAiBR,KAAKzB,MAC9BQ,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/C2K,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9Dd,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,8BACarF,EAAeyF,OAAUrF,EAAS,gBACjCJ,EAAekF,OAAW9E,EAAS,aACtCJ,EAAe1B,EAAO8H,eAAYhG,GAC1C6I,EAAI,CAAE5C,IAAKkB,EACfuB,QAASE,GAAYxJ,KAAK0B,cAC1BH,OAAQzC,EAAOiL,iBAAmB,cAAWnJ,EAC7CoJ,YAAaT,GAAevJ,KAAKpB,qBAAqB8K,EAAa5K,GACnEmL,KAAMnL,EAAOyI,SAAasC,EAAU,CAAER,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KACnGD,EAAOC,SAGrB,CAQQoL,uBAAuBpL,EAAmBe,GAC9C,MAAM,KAAE2J,GAASzJ,KAAKzB,MACtByB,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OAAI1F,GAAYe,EAERzB,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAEQ,KAAMnK,GAAa+J,EAAU,CACvCR,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DA,GAIP,IAEX,CASQyI,oBAAoB1I,EAAuBiJ,GAAyC,IAAzByB,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAC/D,MAAM,KAAEY,GAASpK,KAAKzB,MACtB,OACIF,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKkB,GAAWqC,EAAI,CAAEd,QAASE,GAAYxJ,KAAK0B,gBAChD5C,EAAOC,SAGrB,CAUQoK,YAAYkB,EAAezB,EAA4B0B,EAAsBC,GAEjF,MAAM,aAAEC,EAAY,SAAE5E,EAAQ,kBAAE6E,EAAiB,kBAAE5J,EAAiB,aAAEL,EAAY,uBAAEkK,GAA2B1K,KAAKzB,MAC9GoM,GAAwBnK,GAAgBK,GAAkD,OAA7Bb,KAAKW,MAAMT,oBAAuDU,IAA7BZ,KAAKW,MAAMT,gBAAgCqK,EAC7IK,GAA6BpK,GAAgBkK,GAA0BvL,EAAAA,gBAAAA,YAA4Ba,KAAKW,MAAMT,iBAAmBqK,EACjIM,EAAoB7K,KAAKvB,aAAe,GAAKkM,EAAuBH,EAAclH,UAAY,kBAEpG,OADAtD,KAAKvB,aAAe,EAEhBJ,EAAAA,cAACwH,EAAAA,KAAI,iBAAK2E,EAAY,CAAElH,UAAWuH,IAC/BxM,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEtC,UAAWkC,IAAWI,EAAStC,UAAW+G,EAAOM,GAAwB,gBAAiBA,GAAwB3K,KAAKzB,MAAMkF,OAAOgF,kBAAoBzI,KAAKzB,MAAMkF,OAAOgF,iBAAmB,GAAK,yBAChNG,GAENvK,EAAAA,cAAAA,MAAAA,CAAKiF,UAAU,4BAEPqH,GAAwB3K,KAAKW,MAAMT,eAAiBF,KAAKW,MAAMT,cAAcb,KAAIC,IAAI,aACjFjB,EAAAA,cAACwH,EAAAA,KAAI,iBAAK4E,EAAiB,CAAEnH,UAAWmH,EAAmBnH,YACrDtD,KAAKW,MAAMT,eAAiBF,KAAKoC,kBAAkB9C,GACnDsL,GAA6B5K,KAAKmK,uBAAuB7K,EAAKJ,QAAkC,QAA3B,EAAEI,EAAKO,4BAAoB,aAAzB,EAA2BC,SACjG,KAK/B,CAuFQ4B,gBACC1B,KAAKzB,MAAMiC,cACZR,KAAKC,SAAS,CAAEQ,gBAAYG,GAEpC,EAqEJ,S,iBC1lBO,IAAKkK,EASAC,E,yBATZ,SAAYD,GACRA,EAAAA,EAAAA,IAAAA,KAAAA,MACAA,EAAAA,EAAAA,OAAAA,KAAAA,QACH,CAHD,CAAYA,IAAAA,EAAe,KAS3B,SAAYC,GACRA,EAAAA,IAAAA,MACAA,EAAAA,OAAAA,QACH,CAHD,CAAYA,IAAAA,EAAU,I,8sBCUtB,MAAMC,UAAuB3M,EAAAA,cAyBzBC,YAAYC,GACRC,MAAMD,GAjBF,KAAA0M,UAAoB,EAEpB,KAAAC,OAAiB,EAuOR,KAAAC,qBAAwBC,IACrC,OAAQA,GACJ,IAAI,mBACApL,KAAKiL,UAAW,EAChBjL,KAAKkL,OAAQ,EACb,MACJ,IAAI,UACAlL,KAAKiL,UAAW,EAChBjL,KAAKkL,OAAQ,EACb,MACJ,IAAI,MACAlL,KAAKiL,UAAW,EAChBjL,KAAKkL,OAAQ,EAET,EArOZlL,KAAKqL,gBAAkBrL,KAAKqL,gBAAgBlH,KAAKnE,MACjDA,KAAKsL,SAAW/M,EAAMgE,QAAQiB,SAAWjF,EAAMgE,QAAQiB,QAAQ+H,QAAgD,WAAtChN,EAAMgE,QAAQiB,QAAQ+H,OAAOC,KAAoB,KAAO,KACjIxL,KAAKmL,qBAAqBnL,KAAKzB,MAAMkF,QAAUzD,KAAKzB,MAAMkF,OAAOgI,sBACjEzL,KAAKW,MAAQ,CAAE+K,SAAU1L,KAAK0L,UAC9B1L,KAAK0H,aAAe,EACxB,CAhBOiE,uBAAuBC,EAAgBC,GAC1C,IAAIC,EAKJ,OAJIF,GAAUC,GAAoBA,EAAiB1L,OAAS,IACxD2L,EAAkBD,EAAiBE,MAAKzM,GAAQA,EAAK0M,SAAUC,gBAAkBL,EAAOK,iBAGrFH,GAAmBA,EAAgBI,IAC9C,CAWcR,eACV,MAA0B,OAAlB1L,KAAKsL,UAAuC,OAAlBtL,KAAKsL,QAC3C,CAEO3G,oBACCC,EAAAA,GAAAA,YACA5E,KAAKmM,6BAA8BC,EAAAA,EAAAA,mBAAkBpO,OAAQ,SAAUgC,KAAKqL,kBAEhFrL,KAAKqL,iBACT,CAEOrG,uBACCJ,EAAAA,GAAAA,WACA5G,OAAOiH,oBAAoB,SAAUjF,KAAKmM,6BAA8B,EAEhF,CAEOjH,SAAM,QAET,GADAlF,KAAK0H,aAAe1H,KAAKqM,YACrBC,EAAAA,EAAAA,IAAoBtM,KAAKzB,MAAM+B,MAE/B,OADAN,KAAKzB,MAAMiG,UAAUkE,MAAM,+BACpB,KAGX,MAQM6D,EAAS,SACRvM,KAAKzB,OACLyB,KAAKW,OAAK,IACbjB,cAXyC,CACzCkD,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCwJ,GAAI,CAAE1J,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAOVI,aAAcvD,KAAKzB,MAAMgE,QAAQiB,QAAQD,aACzC+B,WAAY,CACRmH,YAAazM,KAAKzB,MAClB+E,UAAWkC,IAAW,SAAUxF,KAAKzB,MAAMkF,OAAOH,UAAWtD,KAAKW,MAAM+K,SAAW,YAAc,cACjGgB,IAAK,MACL9I,KAAM5D,KAAK0L,SAAW,UAAY,cAEtC9F,SAAU,CACNtC,UAAW,eACXoJ,IAAK,KACL9I,KAAM,QAEV6D,SAAU,CACNnE,UAAW,qBACXM,KAAM,eACN8I,IAAK,MAET7L,kBAAyD,QAAxC,EAAEb,KAAKzB,MAAMkF,OAAOkJ,4BAAoB,SACzDjC,uBAAiE,QAA3C,EAAE1K,KAAKzB,MAAMkF,OAAOmJ,+BAAuB,SACjEnD,KAAM,CACFiD,IAAK,IACLpJ,UAAW,2BACXM,KAAM5D,KAAK0L,SAAW,SAAW,YAErClB,aACA,CACIkC,IAAK,MACLpJ,UAAW,mBAEfmH,kBACA,CACIiC,IAAK,MACLpJ,UAAW,iBACXM,KAAM,YAEVwF,OAAQ,CACJ9F,UAAW,6BACXoJ,IAAK,SACL9I,KAAM5D,KAAK0L,SAAW,SAAW,WACjCrC,QAASrJ,KAAKzB,OAElBsO,eAAgB,CACZvJ,UAAW,6BAEf8G,KAAM,CACF9G,UAAW,2BACXoJ,IAAK,QAETI,2BAA4B,CACxBxJ,UAAW,mCAEfyJ,iBAAkB,CACdzJ,UAAW,0CACXoJ,IAAK,SACL,aAAc1M,KAAKzB,MAAMyO,UAAUC,oBACnC5D,QAASrJ,KAAKzB,OAElB2O,uBAAwB,CACpB5J,UAAW,wCACXoJ,IAAK,QAETlM,aAAcR,KAAKW,MAAM+K,SACzBrG,aAAcrF,KAAK0H,aACnBpE,UAAWkC,IAAW,SAAUxF,KAAKzB,MAAMkF,OAAOH,aAGtD,OAAOtD,KAAKzB,MAAM4O,WAAWZ,EACjC,CAEQF,WACJ,MAAM,KAAE/L,EAAI,OAAEmD,GAAWzD,KAAKzB,MACxB6O,EAA8B,GAYpC,OAXIpN,KAAKiL,UAAY3K,GAAQA,EAAK+M,YAAc/M,EAAK+M,WAAWC,QAAUhN,EAAK+M,WAAWC,OAAOnN,OAAS,GACtGG,EAAK+M,WAAWC,OAAOjO,KAAI,CAACC,EAAyByI,IACjDqF,EAAWzN,KAAKK,KAAKuN,uBAAuBjO,OAAMsB,GAAW,EAAMmH,GAAO,MAI9E/H,KAAKkL,OAASzH,EAAO+J,aAAe/J,EAAO+J,YAAYrN,OAAS,GAChEsD,EAAO+J,YAAYnO,KAAI,CAACC,EAAwBuJ,IAC5CuE,EAAWzN,KAAKK,KAAKuN,4BAAuB3M,EAAWtB,GAAM,EAAOuJ,EAAM,MAG3E7I,KAAKyN,0BAA0BL,EAC1C,CAEQK,0BAA0BL,GAA2B,QAEzD,KAD0D,QAAlC,EAAGpN,KAAKzB,MAAMkF,OAAOiK,qBAAa,UAEtD,OAAON,EAEX,MAAMO,EAAsC,GACtCC,EAAU,CACZ9P,GAAI,EACJiB,SAA8C,QAAtC,EAAEiB,KAAKzB,MAAMkF,OAAOoK,0BAAkB,QAAI,MAClDtG,QAAS,IACTzG,iBAAaF,EACbsF,QAASkH,GAIb,OAFAO,EAAmBhO,KAAKiO,GAEjBD,CACX,CAEQJ,uBAAuBO,EAAgCC,EAA4B9C,EAAoBpC,EAAcmF,GACzH,MAAMpC,EAAS5L,KAAKzB,MAAMgE,SAAWvC,KAAKzB,MAAMgE,QAAQiB,SAAWxD,KAAKzB,MAAMgE,QAAQiB,QAAQoI,OAAS5L,KAAKzB,MAAMgE,QAAQiB,QAAQoI,OAAS,SACrI,2BAAEqC,GAA+BjO,KAAKzB,MAAMkF,OAC5CyK,EAAcH,GAAWA,EAAQhP,UAAY,IAC7C,cAAEoP,GAAkBnO,KAAKzB,MAAMyO,UAG/BoB,EAAkBN,IAAcG,aAA0B,EAA1BA,EAA4BI,QAC9DC,IAAS,eAA0B,QAAtB,EAAAA,EAAUC,oBAAY,aAAtB,EAAwBtC,kBAAkB6B,SAAgB,QAAN,EAAVA,EAAYU,YAAI,WAAN,EAAV,EAAkBvC,cAAc,KAG3F,IAAInL,EAAsB,QAIX,IAAD,IAAd,OAHI3B,EAAAA,gBAAAA,YAA4B2O,aAAU,EAAVA,EAAYW,SAAWX,EAAYW,OAAO,GAAGC,MACzE5N,EAAcgN,EAAYW,OAAO,GAAGC,KAEpCzD,EACO,CACHnN,GAAIkN,EAAe2D,eACnB5P,SAA8E,QAAtE,EAAEiM,EAAe4D,gBAAgBhD,EAAQkC,aAAU,EAAVA,EAAYe,yBAAiB,QAAI,GAClFtH,QAASuG,aAAU,EAAVA,EAAYgB,IACrBhO,cACAoF,QAASlG,KAAK+O,mBAAmBjB,EAAYhN,EAAakN,GAC1D5O,mBAAoBY,KAAKzB,MAAMkF,OAAOmJ,yBAA2BwB,EACjEY,WAAYjE,EAAAA,EAAAA,OACZnE,UAAW,GAAuE,QAAvE,EAAGoE,EAAe4D,gBAAgBhD,EAAQkC,aAAU,EAAVA,EAAYe,yBAAiB,QAAI,MAAMV,KAG7F,CACHrQ,GAAIkN,EAAeiE,gBACnBlQ,SAAUmP,EACV3G,QAASwG,GAAWA,EAAQjO,SAAWiO,EAAQjO,QAAQC,gBAAkB,GACzEmP,oBAAqBnB,GAAWA,EAAQoB,WAAapB,EAAQoB,UAAUpP,gBAAkB,GACzFe,YAAaiN,GAAWA,EAAQxO,OAASwO,EAAQxO,MAAMN,KAAO,GAC9DiH,QAASlG,KAAKoP,sBAAsBrB,GACpCiB,WAAYjE,EAAAA,EAAAA,IACZhB,iBAAkBgE,aAAO,EAAPA,EAASsB,aAC3BzI,UAAW,GAAGsH,KAAeC,IAGrC,CAEQY,mBAAmBO,EAA8BC,GAAsD,IAA7BvB,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAC9E,MAAMwB,EAAkC,GACxC,OAAKF,GAAaA,EAASG,UAAyC,IAA7BH,EAASG,SAAStP,SAGpDH,KAAKzB,MAAMkF,OAAOiK,eAAiBM,GACpCwB,EAAe7P,KAAK,CAAEZ,SAAUiB,KAAKzB,MAAMyO,UAAU0C,oBAAqB5O,YAAayO,EAAgBhI,SAASoI,EAAAA,EAAAA,gBAAeL,EAAUtP,KAAKzB,MAAMgE,QAAsC,CAAC,KAE/L+M,EAASG,SAASpQ,KAAI,CAACC,EAAyByI,KAC5CyH,EAAe7P,KAAKK,KAAKuN,uBAAuBjO,OAAMsB,GAAW,EAAMmH,GAAO,GAAO,IAElFyH,GARI,EASf,CAEQJ,sBAAsBE,GAC1B,MAAME,EAAkC,GAExC,OAAKF,GAAaA,EAAStH,UAAyC,IAA7BsH,EAAStH,SAAS7H,QAIzDmP,EAAStH,SAAS3I,KAAI,CAACC,EAAqBuJ,KACxC2G,EAAe7P,KAAKK,KAAKuN,4BAAuB3M,EAAWtB,GAAM,EAAOuJ,GAAK,IAE1E2G,GANI,EAOf,CAoBQnE,kBACJrL,KAAKsL,SAAWtL,KAAK4P,eACrB5P,KAAKC,SAAS,CAAEyL,SAAU1L,KAAK0L,UACnC,CAEQkE,eACJ,MAAM,QAAErN,GAAYvC,KAAKzB,MAGzB,GAAIgE,EAAQiB,SAAWjB,EAAQiB,QAAQ+H,QAA0C,WAAhChJ,EAAQiB,QAAQ+H,OAAOC,KACpE,MAAO,KAGX,GAAI5G,EAAAA,GAAAA,WAAsB5G,OAAO6R,WAAY,CACzC,MAAMtM,EAAehB,EAAQiB,QAAQD,aACrC,GAAIA,EACA,OAAIA,EAAaV,IAAM7E,OAAO6R,YAActM,EAAaV,GAAGE,EACjD,KACAQ,EAAaN,IAAMjF,OAAO6R,YAActM,EAAaN,GAAGF,EACxD,KACAQ,EAAahG,IAAMS,OAAO6R,YAActM,EAAahG,GAAGwF,EACxD,KACAQ,EAAaL,IAAMlF,OAAO6R,YAActM,EAAaL,GAAGH,EACxD,KAEJ,IAAI,CAKnB,MAAO,IACX,EAlSeiI,EAAAA,cAAwBF,EAAAA,EAAAA,IAExBE,EAAAA,aAAuBF,EAAAA,EAAAA,QAWtCgF,EAAAA,EAAAA,IAAAA,CADCC,EAAAA,IAAU,gCAqBDD,EAAAA,EAAAA,IAAAA,CAATE,EAAAA,IAAQ,6BAoQb,S,2IC7TO,MAAM5R,UAA2BC,EAAAA,cAapCC,YAAYC,GACRC,MAAMD,GAXF,KAAAE,aAAuB,EAyRd,KAAAG,qBAAuB,CAACC,EAA0BC,IAA0B,KACzF,MAAMC,EAAWD,GAAUA,EAAOC,SAAWD,EAAOC,SAAW,GACzDC,EAAiC,CAAC,CAAEC,IAAKJ,EAAkBK,QAASH,IAGtEI,EAAAA,gBAAAA,YAA4BL,EAAOM,qBACnCN,EAAOM,mBAAmBC,KAAIC,IAC1B,GAAIA,GAAQA,EAAKC,MAAO,CACpB,MAAMC,EAAWF,EAAKC,MAAMN,IACtBQ,EAA+BH,EAAKC,MAAMG,cAChDV,EAAiBW,KAAK,CAAEV,IAAKO,EAAUN,QAASI,EAAKM,KAAMF,cAAeD,EACtEI,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAAoB,KAIlFC,KAAKC,SAAS,CACVC,cAAelB,EAAiBmB,OAAS,EAAInB,EAAmB,CAAC,CAAEC,IAAK,UACxEmB,qBAAsBrB,GACxB,EAGW,KAAAsB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKzB,MAAMiC,cASZpC,EAAmB6R,aAAc,EACjCjQ,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjBoS,oBAAqB5P,EAAKvB,SAC1B2B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAaT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAeH,EAAKxC,QAAO8C,EAAYN,EAAKxC,GAC7F4C,WAAYH,IAEZP,KAAKzB,MAAMsC,mBACXb,KAAKpB,qBAAqB0B,EAAKQ,YAAcR,EAA7CN,GAQD,EAIM,KAAAmQ,cAAgB,IAAM,KACnC/R,EAAmB6R,aAAc,EACjCjQ,KAAKC,SAAS,CAAEQ,WAAYT,KAAKW,MAAMD,YAAa,EAOvC,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,SAC/DvB,KAAKC,SACD,CACIQ,gBAAYG,EACZsP,oBAAqB,GACrBhQ,cAAe,MAErB,EAQO,KAAAsB,oBAAuBH,IAChCrB,KAAKiB,SAASC,UAAYlB,KAAKiB,SAASC,QAAQI,SAASD,EAAMI,gBAC/DzB,KAAK0B,eAAgB,EAWZ,KAAA0O,uBAAyB,CAACrI,EAAemI,EAA8BG,KAC/EjS,EAAmB6R,aAAyB,IAAVlI,MAGlCsI,IAAmBH,IAGjBA,IAAwBG,EASlB,KAAAjO,kBAAqBlC,IAElC,IAAKA,IAAkBA,EAAcjB,IACjC,OAAO,KAGX,MACM0D,EAAuC,CACzCC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCzF,GAAI,CAAEuF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEuB,IAAD,IAApC,YAAyBvC,KAVA0B,EAAAA,EAAAA,kBAAiB,GAAGpC,EAAcjB,MAAOe,KAAKzB,MAAMgE,QAAQC,cAAcC,eAAeC,aAY1GrE,EAAAA,cAACgF,EAAAA,GAAK,eACFZ,eAAgBzC,KAAKzB,MAAMgE,QAAQC,cAAcC,eACjDa,UAAU,sBACNpD,EAAa,CACjBqD,aAAcvD,KAAKzB,MAAMgE,QAAQiB,QAAQD,aACzC7D,cAA0C,QAA7B,EAAEQ,EAAcR,qBAAa,QAA4C,QAA5C,EAAKM,KAAKzB,MAAMkF,OAAOC,6BAAqB,QAAIf,EAC1FgB,oBAAoB,OACpBC,KAAK,WACL9F,GAAG,kCACHoB,QAASgB,EAAchB,WAI5B,IAAI,EA1YXc,KAAKiB,SAAW5C,EAAAA,YAChB2B,KAAKsQ,YAAcjS,EAAAA,YACnB2B,KAAKW,MAAQ,CAAEF,gBAAYG,EAAWsP,oBAAqB,GAAIxP,gBAAYE,EAAWR,qBAAsB,IAC5GJ,KAAK0B,cAAgB1B,KAAK0B,cAAcyC,KAAKnE,MAC7CA,KAAKoE,kBAAmBC,EAAAA,EAAAA,oBAAmBrE,KAAKzB,MAAMgE,QAAQiB,QAAQc,kBAClEtE,KAAKzB,MAAMgG,aACXvE,KAAKzB,MAAMiG,WACfxE,KAAKyE,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS1E,KAAKoE,iBAAkB,GAAI,GACxE,CAEOO,oBACCC,EAAAA,GAAAA,YACAC,SAASC,KAAKC,iBAAiB,YAAa/E,KAAKoB,qBACjDyD,SAASC,KAAKC,iBAAiB,WAAY/E,KAAKwB,qBAExD,CAEO+O,qBAAkB,MACO,QAAxB,EAAAvQ,KAAKsQ,YAAYpP,eAAO,OAAxB,EAA0BsP,SAAS,IAAMxQ,KAAKzB,MAAMiC,cACnDR,KAAKsQ,YAAYpP,QAAQsP,SAAS,GAAmBrP,OAE9D,CAEO6D,uBACCJ,EAAAA,GAAAA,YACAC,SAASC,KAAKG,oBAAoB,YAAajF,KAAKoB,qBAAqB,GACzEyD,SAASC,KAAKG,oBAAoB,WAAYjF,KAAKwB,qBAAqB,GAGhF,CAEO0D,SACH,MAAM,aAAE1E,EAAY,SAAEoF,EAAQ,iBAAEmH,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAE5H,GAAetF,KAAKzB,MAG1H,OADAyB,KAAKvB,aAAe,EAEhBJ,EAAAA,cAACkH,EAAAA,OAAM,iBAAKD,EAAU,CAAEhC,UAAWkC,IAAWF,EAAWhC,UAAW9C,QAA0CI,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YAChIpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEE,IAAK9F,KAAKiB,SAAU8E,SAAS,OAC5CvF,QAA0CI,IAA1BZ,KAAKW,MAAMF,YAC5BpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAKiH,GACNzO,EAAAA,cAACwH,EAAAA,KAAI,iBAAKkH,EAAgB,CAAE1D,QAASrJ,KAAKmQ,mBAC1C9R,EAAAA,cAACwH,EAAAA,KAAI,iBAAKqH,GACLlN,KAAKW,MAAMuP,sBAGnBlQ,KAAKgG,kBAItB,CAEQA,iBACJ,MAAM,SAAEyB,EAAQ,aAAEpC,EAAY,aAAE7E,GAAiBR,KAAKzB,OAChD,WAAEkC,GAAeT,KAAKW,MACtB+G,EAA8B,GAEpC,GAAIlH,QAA+BI,IAAfH,GAA4B4E,EAAalF,OAAS,EAAG,CACrE,IAAIsF,EAA0B,CAAC,EAC/B,IAAK,MAAMkC,KAAiBtC,EAAc,CACtC,GAAIsC,GAAiBA,EAAc7J,KAAO2C,EAAY,CAClDgF,EAAWkC,EACVvJ,EAAmB6R,YAAyDjQ,KAAKC,SAAS,CAAES,gBAAYE,EAAWsP,oBAAqBvI,EAAc5I,WAArHiB,KAAKC,SAAS,CAAES,gBAAYE,IAC9D,KAAM,CAGV,GADA6E,EAAWzF,KAAK4H,gBAAgBD,GAC5BlC,GAAYA,EAAS3H,KAAO2C,EAC5B,MAIRgF,GAAYiC,EAAa/H,KACrBtB,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKpB,EAAS3H,IAAQ2J,GACvB,IACAzH,KAAK6H,oBAAoBpC,GACzB,KAEP,MAEFJ,EAAayC,SAAQ,CAACxI,EAAqByI,KACvCL,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKkB,GACDN,EAAQ,CACZ3B,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqB5Q,EAAKP,UAAYiB,KAAKsQ,YAAc,OAE3GtQ,KAAK6H,oBAAoBvI,IAEjC,IAIT,OAAOoI,CACX,CAEQE,gBAAgBtI,GACpB,MAAM0I,EAAW1I,GAAQA,EAAK4G,QAC9B,GAAI8B,GAAYA,EAAS7H,OAAS,EAC9B,IAAK,IAAI8H,EAAI,EAAGA,GAAKD,EAAS7H,OAAS,EAAG8H,IAAK,CAC3C,GAAID,EAASC,GAAGnK,KAAOkC,KAAKW,MAAMF,WAM9B,OALCrC,EAAmB6R,YAEhBjQ,KAAKC,SACL,CAAES,WAAYpB,GAAQA,EAAKxB,GAAIoS,oBAAqBlI,EAASC,GAAGlJ,WAHlCiB,KAAKC,SACnC,CAAES,WAAYpB,aAAI,EAAJA,EAAMxB,KAIjBkK,EAASC,GAEpB,MAAMC,EAAQlI,KAAK4H,gBAAgBI,EAASC,IAC5C,GAAIC,EACA,OAAOA,CAAK,CAKxB,OADAlI,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,iDAC5B,IACX,CAEQb,oBAAoBxC,GACxB,OAAIA,GAAgBA,EAAaa,SAAWb,EAAaa,QAAQ/F,OAAS,EAClEH,KAAKzB,MAAMiC,mBAA0CI,IAA1BZ,KAAKW,MAAMF,WAC9BT,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,IAAI,GAGnEO,EAAAA,cAAAA,EAAAA,SAAAA,KACK2B,KAAKoI,sBAAsB/C,GAC3BrF,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,IAAI,IAI7DuH,GAAgBA,EAAatG,UAAYsG,EAAakC,SAAWlC,EAAakC,QAAQpH,OAAS,EAC9FH,KAAKoG,oBAAoBf,EAAcA,EAAavH,IAAI,GAAO,GAChEuH,GAAgBA,EAAatG,WAAasG,EAAakC,QACtDvH,KAAKwH,oBAAoBnC,EAAcA,EAAavH,IAAI,IAEpEkC,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,yDAC5B,KACX,CAEQP,eAAeH,EAA4BvH,EAAqB4H,GACpE,MAAM,aAAE7H,EAAY,SAAEiH,GAAazH,KAAKzB,MAClC+J,EAAyBtI,KAAKzB,MAAMkF,OAAO8E,uBAAwB,EACnEC,EAA0BxI,KAAKzB,MAAMkF,OAAOgF,kBAAoB,EAGtE,GAAIhI,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,gEAC5B,KAGX,IAAKV,GAAgC,IAApBA,EAAS7H,OAEtB,OADAH,KAAKzB,MAAMgE,QAAQiC,UAAUkE,MAAM,4DAC5B,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,GAAYA,EAAS3I,KAAI,CAACP,EAAuB+J,KACjE,MAAMC,EAAchK,EAAOoH,SAAWpH,EAAOoH,QAAQ/F,OAAS,EAC9D,IAAIsF,EAOAS,EALAT,EADAqD,GAActI,EACHR,KAAKoI,sBAAsBtJ,EAAQ2B,EAAYoI,GAE/C/J,EAAOyI,QAAUvH,KAAKoG,oBAAoBtH,EAAQ+J,GAAO7I,KAAKwH,oBAAoB1I,GAIjG,MAAMiK,EAAcD,GAAcR,GAA2BtI,KAAKvB,cAAgBuK,KAAKC,MAAMT,GAA2B,EAMxH,OALIO,IACA/I,KAAKvB,eACLkK,EAAiBL,EAAyB,SAAStI,KAAKvB,aAAayK,aAAe,GACpFhD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,QAAS1F,EAAe1B,EAAOhB,QAAK8C,GAAW,IAGpFvC,EAAAA,cAACwH,EAAAA,KAAI,iBACG4B,EAAQ,CACZZ,IAAK/H,EAAOhB,GACZwF,UAAWkC,IAAWiC,EAASnE,UAAWyF,GAAe,eACzDjD,IAAK9F,KAAKoQ,uBAAuBvH,EAAK7I,KAAKW,MAAMuP,oBAAqBpR,EAAOC,UAAYiB,KAAKsQ,YAAc,OAE1G7K,EACAS,EACC,IAGf,OAAQlG,KAAKmJ,YAAYR,EAAgBC,EAAanI,EAAY4H,EACtE,CAEQD,sBAAsBtJ,EAAuB2B,EAAqBsH,GACtE,MAAM,OAAEqB,GAAWpJ,KAAKzB,MACxB,OACIF,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKkB,GACDqB,EAAM,CACVC,QAASrJ,KAAKK,sBAAsBvB,EAAQ2B,GAC5C6I,QAAStJ,KAAK0B,cAAa,kBACV1B,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,mBAC5DkC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,cAClE2C,IAEX3B,EAAOC,SAGrB,CAEQqH,oBAAoBtH,EAAuBiJ,GAAsE,IAAtDwB,IAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,KAAAA,UAAAA,GAA6BC,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAC5F,MAAM,KAAEC,GAASzJ,KAAKzB,MAChBQ,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/C2K,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9Dd,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAE5C,IAAKkB,EACfuB,QAASE,GAAYxJ,KAAK0B,cAC1BH,OAAQzC,EAAOiL,iBAAmB,cAAWnJ,EAC7CoJ,YAAaT,GAAevJ,KAAKpB,qBAAqB8K,EAAa5K,GACnEmL,KAAMnL,EAAOyI,SAAasC,EAAU,CAAER,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KACnGD,EAAOC,SAGrB,CAEQoL,uBAAuBpL,EAAmBe,GAC9C,MAAM,KAAE2J,GAASzJ,KAAKzB,MACtByB,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OAAI1F,GAAYe,EAERzB,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAEQ,KAAMnK,GAAa+J,EAAU,CACvCR,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DA,GAIP,IAEX,CAEQyI,oBAAoB1I,EAAuBiJ,GAAyC,IAAzByB,EAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,IAAAA,UAAAA,GAC/D,MAAM,KAAEY,GAASpK,KAAKzB,MACtB,OACIF,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKkB,GAAWqC,EAAI,CAAEd,QAASE,GAAYxJ,KAAK0B,gBAChD5C,EAAOC,SAGrB,CAEQoK,YAAYkB,EAAezB,EAA4B0B,EAAsBC,GAEjF,MAAM,aAAEC,EAAY,SAAE5E,EAAQ,kBAAE6E,EAAiB,kBAAE5J,EAAiB,uBAAE6J,EAAsB,aAAElK,GAAiBR,KAAKzB,MAC9GoM,GAAwBnK,IAAiBK,GAAqB6J,KAA4BvL,EAAAA,gBAAAA,YAA4Ba,KAAKW,MAAMT,iBAAmBqK,EACpJK,GAA6BpK,GAAgBkK,GAA0BvL,EAAAA,gBAAAA,YAA4Ba,KAAKW,MAAMT,iBAAmBqK,EACjIM,EAAoB7K,KAAKvB,aAAe,GAAKkM,EAAuBH,EAAclH,UAAY,kBAEpG,OADAtD,KAAKvB,aAAe,EAEhBJ,EAAAA,cAACwH,EAAAA,KAAI,iBAAK2E,EAAY,CAAElH,UAAWuH,IAC/BxM,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEtC,UAAWkC,IAAWI,EAAStC,UAAW+G,EAAOM,GAAwB,gBAAiBA,GAAwB3K,KAAKzB,MAAMkF,OAAOgF,kBAAoBzI,KAAKzB,MAAMkF,OAAOgF,iBAAmB,GAAK,yBAChNG,GAGF+B,GAAwB3K,KAAKW,MAAMT,eAAiBF,KAAKW,MAAMT,cAAcb,KAAIC,IAAI,aACjFjB,EAAAA,cAACwH,EAAAA,KAAI,iBAAK4E,EAAiB,CAAEnH,UAAWmH,EAAmBnH,YACrDtD,KAAKW,MAAMT,eAAiBF,KAAKoC,kBAAkB9C,GACnDsL,GAA6B5K,KAAKmK,uBAAuB7K,EAAKJ,QAAkC,QAA3B,EAAEI,EAAKO,4BAAoB,aAAzB,EAA2BC,SACjG,IAI3B,CA0FQ4B,gBACC1B,KAAKzB,MAAMiC,cACZR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWV,cAAe,KAAMgQ,oBAAqB,IAEzF,EAvXe9R,EAAAA,aAAuB,EA4Z1C,S,mDCrZYqS,E,2HAAZ,SAAYA,GACRA,EAAAA,EAAAA,KAAAA,GAAAA,OACAA,EAAAA,EAAAA,IAAAA,GAAAA,MACAA,EAAAA,EAAAA,IAAAA,GAAAA,MACAA,EAAAA,EAAAA,MAAAA,GAAAA,QACAA,EAAAA,EAAAA,KAAAA,GAAAA,OACAA,EAAAA,EAAAA,UAAAA,IAAAA,YACAA,EAAAA,EAAAA,SAAAA,GAAAA,UACH,CARD,CAAYA,IAAAA,EAAgB,KAsBrB,MAAMC,EAAmB,CAACnS,EAAqC2B,EAAuByQ,KAEzF,MAAMtO,GAAmBC,EAAAA,EAAAA,kBAAiB,GAAGpC,IAAiB3B,EAAMqS,SAASrO,QAAQC,cAAcC,eAAeC,aAC5GC,EAAgD,CAClDC,UAAW,CACPC,GAAI,CAAEC,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCC,GAAI,CAAEH,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCzF,GAAI,CAAEuF,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,GACrCE,GAAI,CAAEJ,EAAG,kBAAmBC,EAAG,EAAGC,EAAG,IAEzCG,UAAU,GAEd,QAAyBvC,IAArByB,EAAgC,CAAC,IAAD,EAChC,MAAMwO,EAAiC,CAAE5R,IAAKoD,GAC9C,OACIhE,EAAAA,cAACyS,EAAAA,GAAc,eACXrO,eAAgBlE,EAAMqS,SAASrO,QAAQC,cAAcC,eACrDa,UAAU,sBACNuN,EAAS,CACbtN,aAAchF,EAAMqS,SAASrO,QAAQiB,QAAQD,aAC7C7D,cAA0D,QAA7C,EAAEnB,EAAMqS,SAASnN,OAAOC,6BAAqB,QAAIf,EAC9DgB,oBAAoB,OACpBC,KAAK,WACL1E,QAASyR,IACX,CAGV,OAAO,IAAI,E,qkBCnDR,MAAMI,UAAmC1S,EAAAA,cAuB5CC,YAAmBC,GACfC,MAAMD,GArBO,KAAAyS,eAAyBP,EAAiBQ,KAEnD,KAAAxS,aAAuBgS,EAAiBS,KAM/B,KAAAvS,UAAoB8R,EAAiB9R,UAIrC,KAAAK,iBAA0C,GA2F1C,KAAAmS,cAAgB,KAC7BnR,KAAKC,UAASmR,IAAa,CACvB3Q,WAAY,EACZ4Q,WAAYD,EAAcC,aAC3B,EAgRU,KAAAC,0BAA4B,CAACC,EAA4B/K,IAA0B,KAChG,MAAM,eAAEzC,GAAmB/D,KAAKW,MAC1BqD,EAAU,CAAE,CAACuN,IAAW/K,GAC9BxG,KAAKC,SAAS,CAAE8D,eAAe,EAAD,KAAOA,GAAmBC,IAAY,EAkHvD,KAAApF,qBAAuB,CAAC4S,EAA6B1S,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAKuS,EAAqBtS,QAASH,IAGtF,GAAII,EAAAA,gBAAAA,YAA4BL,EAAOM,oBACnC,IAAK,MAAME,KAAQR,EAAOM,mBAAoB,CAC1C,MAAM0B,EAAcxB,EAAKC,MAAMN,IAC/BD,EAAiBW,KAAK,CAAEV,IAAK6B,EAAa5B,QAASI,EAAKM,KAAMC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAAoB,CAGxIC,KAAKC,SAAS,CACVC,cAAef,EAAAA,gBAAAA,YAA4BH,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,WAC5F,EASW,KAAAoB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKW,MAAM8Q,cASZV,EAA2Bd,aAAc,EACzCjQ,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjBoS,oBAAqB5P,EAAKvB,SAC1B2B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjB4C,WAAYH,IAEZP,KAAKzB,MAAMqS,SAAS/P,mBACpBb,KAAKpB,qBAAqB0B,EAAKQ,YAAcR,EAA7CN,GAQD,EASM,KAAAmQ,cAAgB,IAAM,KACnCY,EAA2Bd,aAAc,EACzCjQ,KAAKC,UAAUmR,IAAa,CAAQ3Q,WAAY2Q,EAAc1Q,cAAc,EAO/D,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UACblB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,UACjCvB,KAAKW,MAAM8Q,aAGZzR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWsP,oBAAqB,GAAImB,WAAW,IAF3ErR,KAAKC,SAAS,CAAEQ,WAAY,EAAGyP,oBAAqB,GAAImB,WAAW,IAEgB,EAY9E,KAAAjB,uBAAyB,CAACrI,EAAemI,EAA8BG,KAE/EU,EAA2Bd,aADL,IACoBlI,MAG1CsI,IAAmBH,IAGjBA,IAAwBG,EAMlB,KAAAqB,cAAgB,KACxB1R,KAAKW,MAAM8Q,aAGZzR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWsP,oBAAqB,GAAImB,WAAW,IAF3ErR,KAAKC,SAAS,CAAEQ,WAAY,EAAGyP,oBAAqB,GAAImB,WAAW,GAEiB,EAQ3E,KAAA1P,aAAgBN,IACzBA,EAAMO,UAAY5B,KAAKrB,YAAcqB,KAAKW,MAAM8Q,cAAgBzR,KAAKW,MAAM0Q,WAC3ErR,KAAKC,SAAS,CAAEQ,WAAY,EAAGyP,oBAAqB,GAAImB,WAAW,GAAS,EAOnE,KAAAM,sBAAwB,KACrC3R,KAAKC,SAAS,CAAEwR,aAAczR,KAAKyR,cAAe,EAvkBlDzR,KAAKiB,SAAW5C,EAAAA,YAChB2B,KAAKsQ,YAAcjS,EAAAA,YACnB,MAAM,aAAEgH,GAAiBrF,KAAKzB,MAAMqS,SACpC,GAAIzR,EAAAA,gBAAAA,YAA4BkG,IAAiBlG,EAAAA,gBAAAA,YAA4BkG,EAAa,GAAGa,SAAU,CACnG,MAAMwD,EAAcrE,EAAa,GAAGa,QAAQ,GAAGpF,YAAcuE,EAAa,GAAGa,QAAQ,GAAGpF,YAAc,GAChG/B,EAAWsG,EAAa,GAAGa,QAAQ,GAAGnH,SAAWsG,EAAa,GAAGa,QAAQ,GAAGnH,SAAW,GAC7FiB,KAAKhB,iBAAmB,CAAC,CAAEC,IAAKyK,EAAaxK,QAASH,IAGlDI,EAAAA,gBAAAA,YAA4BkG,EAAa,GAAGa,QAAQ,GAAG9G,qBACvDiG,EAAa,GAAGa,QAAQ,GAAG9G,mBAAmBC,KAAIC,IAC9C,MAAMwB,EAAcxB,EAAKC,MAAMN,IAE/B,OADAe,KAAKhB,iBAAiBW,KAAK,CAAEV,IAAK6B,EAAa5B,QAASI,EAAKM,KAAMC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAC1G,IAAI,GACb,CAIVC,KAAKW,MAAQ,CACTF,WAAY,EACZyP,oBAAqB,GACrBxP,gBAAYE,EACZmD,eAAgB,CAAC,EACjB0N,aAAczR,KAAKyR,aACnBvR,cAAeF,KAAKhB,iBACpBqS,WAAW,GAEfrR,KAAKoE,kBAAmBC,EAAAA,EAAAA,oBAAmBrE,KAAKzB,MAAMqS,SAASrO,QAAQiB,QAAQc,kBAC3EtE,KAAKzB,MAAMqS,SAASrM,aACpBvE,KAAKzB,MAAMqS,SAASpM,WACxBxE,KAAKyE,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS1E,KAAKoE,iBAAkB,GAAI,IACpEpE,KAAK6J,YAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,QACzE,CAEqBgN,mBACjB,MAAqG,QAA7F/F,EAAAA,EAAAA,UAAS,CAAEkG,QAASC,EAAAA,YAAAA,QAAqBtP,QAASvC,KAAKzB,MAAMqS,SAASrO,QAAQiB,SAC1F,CAEOmB,oBACH3E,KAAK8R,mCAAoC1F,EAAAA,EAAAA,mBAAkBpO,OAAQ,SAAUgC,KAAK2R,uBAClF9M,SAASE,iBAAiB,UAAY/E,KAAK2B,cAA2C,GACtF3B,KAAK2R,wBACL9M,SAASC,KAAKC,iBAAiB,YAAa/E,KAAKoB,oBACrD,CAEOmP,qBAAkB,MACO,QAAxB,EAAAvQ,KAAKsQ,YAAYpP,eAAO,OAAxB,EAA0BsP,SAAS,IAAMxQ,KAAKzB,MAAMqS,SAASpQ,cAC5DR,KAAKsQ,YAAYpP,QAAQsP,SAAS,GAAmBrP,OAE9D,CAEO6D,uBACHhH,OAAOiH,oBAAoB,SAAUjF,KAAK8R,mCAAoC,GAC9EjN,SAASC,KAAKG,oBAAoB,YAAajF,KAAKoB,qBAAqB,EAC7E,CAEO8D,SACHlF,KAAKvB,aAAe,EAEpB,OACIJ,EAAAA,cAACwH,EAAAA,KAAI,CAACvC,UAAU,qBAAqBwC,IAAK9F,KAAKiB,UAEvCjB,KAAKW,MAAM8Q,aAAezR,KAAKmF,oBAAuB9G,EAAAA,cAAAA,EAAAA,SAAAA,KAClDA,EAAAA,cAAC+K,EAAAA,OAAM,eACH9F,UAAU,sBACV+F,QAASrJ,KAAKmR,cAAa,gBAP7B,oBASEY,MAAO/R,KAAKzB,MAAMqS,SAAS5D,UAAUgF,mBAAkB,aAC3ChS,KAAKzB,MAAMqS,SAAS5D,UAAUgF,oBACtChS,KAAK6J,aAEZ7J,KAAKiS,uBAK1B,CAYQA,sBACJ,OACI5T,EAAAA,cAAC6T,EAAAA,SAAQ,CAAC5O,UAAU,mCAAmCY,OAAQlE,KAAKW,MAAM0Q,WACrErR,KAAKW,MAAM8Q,aAAezR,KAAKmF,oBAAsBnF,KAAKoF,qBAGvE,CAEQD,oBACJ,MAAM,SAAES,EAAQ,iBAAEmH,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAE5H,GAAetF,KAAKzB,MAAMqS,SAGlH,OADA5Q,KAAKvB,aAAe,EAEhBJ,EAAAA,cAACkH,EAAAA,OAAM,iBACCD,EAAU,CACdhC,UAAWkC,IAAWF,EAAWhC,UAAWtD,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YACvHpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEG,SAAS,OACxB/F,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,YACnCpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAKiH,GACNzO,EAAAA,cAACwH,EAAAA,KAAI,iBAAKkH,EAAgB,CAAE1D,QAASrJ,KAAKmQ,mBAC1C9R,EAAAA,cAACwH,EAAAA,KAAI,iBAAKqH,GACLlN,KAAKW,MAAMuP,sBAGvBlQ,KAAKgG,kBAItB,CAEQZ,qBACJ,MAAM,SAAEQ,EAAQ,WAAEN,GAAetF,KAAKzB,MAAMqS,SAE5C,OACIvS,EAAAA,cAACkH,EAAAA,OAAM,iBAAKD,EAAU,CAAEhC,UAAWkC,IAAWF,EAAWhC,UAAW,8BAChEjF,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEG,SAAS,OACxB/F,KAAKgG,iBACN3H,EAAAA,cAAAA,MAAAA,CAAKiF,UAAU,uBACXjF,EAAAA,cAAAA,SAAAA,CAAQiF,UAAU,qBAAoB,aAAY,QAAQ+F,QAASrJ,KAAK0R,kBAK5F,CAEQpK,kBAAkBhI,GACtB,OAAIA,EAAKiI,UAAY4K,EAAAA,iBAAAA,mBAAoC7S,EAAKiI,SAEtDvH,KAAKoG,oBAAoB9G,GAErBA,EAAKiI,QAKV,KAHCvH,KAAKwH,oBAAoBlI,EAIrC,CAEQ0G,iBACJ,MAAM,SAAEyB,GAAazH,KAAKzB,MAAMqS,SAC1BvL,EAAgCrF,KAAKzB,MAAMqS,SAASvL,cACpD,WAAE5E,GAAeT,KAAKW,MACtB+G,EAA8B,GAMpC,GAJIvI,EAAAA,gBAAAA,YAA4BkG,KAC5BA,EAAa,GAAGvH,GAAK,GAGrBkC,KAAKW,MAAM8Q,mBAA+B7Q,IAAfH,GAA4BtB,EAAAA,gBAAAA,YAA4BkG,GAAe,CAClG,MAAMI,EAAWzF,KAAK4H,qBAAgBhH,EAAWyE,GAE7CI,GACAiC,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKpB,EAAS3H,IAAQ2J,GACvB,IACAzH,KAAK6H,oBAAoBpC,GACzB,KAER,MAIL,IAAK,MAAOsC,EAAOzI,KAAS+F,EAAa+M,UACrC1K,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKvH,EAAKxB,IACN2J,EAAQ,CACZ3B,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqB5Q,EAAKP,UAAYiB,KAAKsQ,YAAc,OAE3GtQ,KAAK6H,oBAAoBvI,KAO1C,OAAOoI,CACX,CAEQE,gBAAgByK,EAAuBC,GAC3C,IAAKA,EACD,OAAO,KAGX,IAAK,IAAIvK,EAAQ,EAAGA,GAASuK,EAAKnS,OAASsQ,EAAiB8B,IAAKxK,IAAS,CACtE,MAAMzI,EAAsBgT,EAAKE,OAAOzK,IAExC,GAAIzI,EAAKxB,KAAOkC,KAAKW,MAAMF,WAMvB,OALKsQ,EAA2Bd,YAG5BjQ,KAAKC,SAAS,CAAES,WAAY2R,EAAcnC,oBAAqB5Q,EAAKP,WAFpEiB,KAAKC,SAAS,CAAES,WAAY2R,IAIzB/S,EAEX,MAAM4I,EAAQlI,KAAK4H,gBAAgBtI,EAAKxB,GAAIwB,EAAK4G,SACjD,GAAIgC,EACA,OAAOA,CAAK,CAGpB,OAAO,IACX,CAEQL,oBAAoBxC,GACxB,OAAIlG,EAAAA,gBAAAA,YAA4BkG,EAAaa,SACrClG,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,WAC9BT,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,IAAI,GAInEO,EAAAA,cAAAA,EAAAA,SAAAA,KACK2B,KAAKoI,sBAAsB/C,GAC3BrF,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,KAIzDuH,EAAakC,UAAY4K,EAAAA,iBAAAA,mBAAoC9M,EAAakC,SACzEvH,KAAKoG,oBAAoBf,EAAcA,EAAavH,IACpDuH,EAAakC,SAAavH,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,WAIrE,KAHKT,KAAKwH,oBAAoBnC,EAIzC,CAEQ8C,eAAesK,EAAgChS,EAAqBiS,GAAmB,QAE3F,IAAI1K,EAAwCyK,EACxChS,IAAegQ,EAAiBkC,WAChC3K,EAAWyK,EAAcpE,QAAOuE,GAAgBA,EAAY9U,IAAM8U,EAAY9U,IAAMgN,EAAAA,EAAAA,UAGxF,MAAM,SAAErD,GAAazH,KAAKzB,MAAMqS,SAC1BiC,EAA0E,QAAlD,EAAG7S,KAAKzB,MAAMqS,SAASnN,OAAO8E,4BAAoB,SAC1EC,EAAqE,QAA9C,EAAGxI,KAAKzB,MAAMqS,SAASnN,OAAOgF,wBAAgB,QAAIgI,EAAiBqC,MAEhG,GAAIrS,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAKzB,MAAMqS,SAASrO,QAAQiC,UAAUkE,MAAM,gEACrC,KAGX,IAAKV,IAAa7I,EAAAA,gBAAAA,YAA4B6I,GAE1C,OADAhI,KAAKzB,MAAMqS,SAASrO,QAAQiC,UAAUkE,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,EAAS3I,KAAI,CAACP,EAAuBiJ,KACrD,MAAMe,EAAchK,EAAOoH,SAAW/G,EAAAA,gBAAAA,YAA4BL,EAAOoH,SACzE,IAAIT,EAQAS,EANAT,EADAqD,GAAc9I,KAAKW,MAAM8Q,aACdzR,KAAKoI,sBAAsBtJ,EAAQ2B,EAAYsH,GACnD/H,KAAKvB,eAAiBgS,EAAiB8B,KAAQzJ,EAG3C,KAFA9I,KAAK+S,YAAYjU,EAAQiJ,GAKxC,MAAMiL,EAAkBlK,GAAc+J,GAA6B7S,KAAKvB,cAAgBuK,KAAKC,MAAMT,GAA2BiI,EAAiB8B,IAE3IzJ,IAAe9I,KAAKW,MAAM8Q,eAEtBzR,KAAKvB,cAAgBgS,EAAiBwC,IACtC/M,EAAUlG,KAAKkT,qBAAqBpU,GAC7BkB,KAAKvB,cAAgBuB,KAAKgR,iBACjChR,KAAKvB,eACLkK,EAAiB,SAAS3I,KAAKvB,aAAayK,aAC5ChD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,aAAStF,GAAW,KAI7DoS,GAAmBhT,KAAKW,MAAM8Q,eAC9BzR,KAAKvB,eACLkK,EAAiBkK,EAA2B,SAAS7S,KAAKvB,aAAayK,aAAe,GACtFhD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,QAASpH,EAAOhB,IAAI,IAE7D,MAAM4L,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9D,OACIzC,EAAAA,cAACwH,EAAAA,KAAI,iBACG4B,EAAQ,CACZZ,IAAK/H,EAAOhB,GACZkM,YAAahK,KAAKvB,eAAiBgS,EAAiB8B,KAAOvS,KAAKpB,qBAAqB8K,EAAa5K,GAClGwE,UAAWkC,IAAWiC,EAASnE,UAAW0P,GAAmB,eAC7DlN,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqBpR,EAAOC,UAAYiB,KAAKsQ,YAAc,OAE5G7K,EACAS,EACC,IAGf,OAAQlG,KAAKmJ,YAAYR,EAAgBC,EAAa8J,EAC1D,CAEQK,YAAYjU,EAAuBiJ,GACvC,IAAItC,EAMJ,OAJIA,EADAzF,KAAKvB,eAAiBgS,EAAiB8B,IAC3BzT,EAAOyI,QAAUvH,KAAKmT,4BAA4BrU,EAAQiJ,GAAS/H,KAAKwH,oBAAoB1I,GAE5FA,EAAOyI,QAAUvH,KAAKoG,oBAAoBtH,EAAQiJ,GAAS/H,KAAKwH,oBAAoB1I,GAE7F2G,CACX,CAEQyN,qBAAqBzN,GAAuB,MAChD,MAAMkD,EAAiB,SAAS3I,KAAKvB,aAAayK,aAC5C7C,EAAmBZ,EAAS1G,SAE5BkF,OAAkCrD,IAArByF,EAAiCA,EAAmB,GACjEE,EAFWvG,KAAKW,MAAMoD,eAGtByE,EAAqE,QAA9C,EAAGxI,KAAKzB,MAAMqS,SAASnN,OAAOgF,wBAAgB,QAAIgI,EAAiBqC,MAEhG,IAAItM,GAAe,EACfD,EAAKd,EAAS3H,MACd0I,GAAe,GAEnB,MAAMC,EAA2B,CAAE2M,QAAS,EAAGlP,OAAQsC,GAEvD,OACInI,EAAAA,cAACqI,EAAAA,OAAM,CACHM,cAAeP,EACfI,IAAKpB,EAAS3H,GACdwF,UAAWkC,IAAW,yBAA0BmD,GAChD7B,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfb,iBAAkBpC,EAClB8C,SAAU/G,KAAKsR,0BAA0B7L,EAAS3H,GAAI0I,IAEtDnI,EAAAA,cAAAA,MAAAA,KACKoH,EAASS,QAAS7G,KAAK+H,GAChBjI,EAAAA,gBAAAA,YAA4BiI,EAAYlB,WACxClG,KAAKvB,eACDuB,KAAKvB,aAAe+J,GACbxI,KAAKkT,qBAAqB9L,GAGlCpH,KAAKsH,kBAAkBF,MAKlD,CAcQgB,sBAAsBtJ,EAAuB2B,EAAqBsH,GACtE,OACI1J,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKkB,GACD/H,KAAKzB,MAAMqS,SAASxH,OAAM,CAC9BC,QAASrJ,KAAKK,sBAAsBvB,EAAQ2B,GAAW,kBACtCT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,mBAC5DkC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,cAClE2C,EAAU,aACXT,KAAKW,MAAM8Q,aAAe3S,EAAO8H,eAAYhG,IAEvD9B,EAAOC,SAGrB,CAEQqH,oBAAoBtH,EAAuBiJ,GAC/C,MAAM,KAAE0B,GAASzJ,KAAKzB,MAAMqS,SACtB7R,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDiB,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAE5C,IAAKkB,EACfkC,KAAMnL,EAAOyI,SACTsC,EAAU,CACdtI,OAAQzC,EAAOiL,iBAAmB,cAAWnJ,EAC7CyI,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DD,EAAOC,SAGrB,CAEQoU,4BAA4BrU,EAAuBiJ,GAA6C,IAA7BsL,IAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,KAAAA,UAAAA,GACvE,MAAM,KAAE5J,GAASzJ,KAAKzB,MAAMqS,SACtB7R,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/C2K,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9Dd,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAE5C,IAAKkB,EAAOiC,YAAaqJ,GAAiBrT,KAAKpB,qBAAqB8K,EAAa5K,GAC3FmL,KAAMnL,EAAOyI,SAAasC,EAAU,CAAER,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KACnGD,EAAOC,SAGrB,CAEQoL,uBAAuBpL,EAAmBe,GAC9C,MAAM,KAAE2J,GAASzJ,KAAKzB,MAAMqS,SAC5B5Q,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OAAI1F,GAAYe,EAERzB,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAEQ,KAAMnK,GAAa+J,EAAU,CACvCR,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DA,GAIP,IAEX,CAEQyI,oBAAoB1I,EAAuBiJ,GAC/C,MAAM,KAAEqC,GAASpK,KAAKzB,MAAMqS,SAC5B,OACIvS,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKkB,GAAWqC,GAChBtL,EAAOC,SAGrB,CAEQoK,YAAYkB,EAAezB,EAA4B0K,GAAmB,MAC9E,MAAM,aAAE9I,EAAY,SAAE5E,EAAQ,kBAAE6E,EAAiB,kBAAE5J,EAAiB,uBAAE6J,GAA2B1K,KAAKzB,MAAMqS,SACtG2C,GACDvT,KAAKW,MAAM8Q,cAAgB5Q,GAAkD,OAA7Bb,KAAKW,MAAMT,oBAAuDU,IAA7BZ,KAAKW,MAAMT,gBAAgCoT,EAC/HE,GACDxT,KAAKW,MAAM8Q,cAAgB/G,GAA0BvL,EAAAA,gBAAAA,YAA4Ba,KAAKW,MAAMT,iBAAmBoT,EAC9GG,EAAoBzT,KAAKvB,aAAegS,EAAiBwC,KAAOM,EAAyB/I,EAAclH,UAAY,kBACzHtD,KAAKvB,aAAegS,EAAiB8B,IACrC,MAAMmB,EAA4BH,GAA0BvT,KAAKzB,MAAMqS,SAASnN,OAAOgF,kBACnFzI,KAAKzB,MAAMqS,SAASnN,OAAOgF,iBAAmBgI,EAAiBwC,KAAO,sBAEpEU,EAAyC,QAA3B,EAAG3T,KAAKW,MAAMT,qBAAa,aAAxB,EAA0BmO,QAAO9O,IAAU4S,EAAAA,iBAAAA,mBAAoC5S,EAAMN,OACtG2U,EAAqBD,aAAc,EAAdA,EAAgBtU,KAAIC,GAAQA,EAAKL,MAAK4U,KAAK,KACtE,OACIxV,EAAAA,cAACwH,EAAAA,KAAI,iBAAK2E,EAAY,CAAElH,UAAWmQ,IAC/BpV,EAAAA,cAACwH,EAAAA,KAAI,iBAAKD,EAAQ,CAAEtC,UAAWkC,IAAWI,EAAStC,UAAW+G,EAAOkJ,GAA0B,gBAAiBG,KAC3G9K,GAELvK,EAAAA,cAAAA,MAAAA,CAAKiF,UAAU,2BAA2BuD,IAAK+M,GAEvCL,GAA0BpU,EAAAA,gBAAAA,YAA4BwU,IAAmBA,EAAetU,KAAIC,IAAI,eAC5FjB,EAAAA,cAACwH,EAAAA,KAAI,iBAAK4E,EAAiB,CAAEnH,UAAWmH,EAAmBnH,UAAWuD,IAAKvH,EAAKL,MAC1EyR,EAAiB1Q,KAAKzB,MAAe,QAAV,EAAEe,EAAKL,WAAG,QAAI,GAAIK,EAAKJ,QAASgK,YAC3DsK,GAA+BxT,KAAKmK,uBAAuB7K,EAAKJ,QAAkC,QAA3B,EAAEI,EAAKO,4BAAoB,aAAzB,EAA2BC,SACnG,KAK/B,EA1eeiR,EAAAA,aAAuB,GA0D5BjB,EAAAA,EAAAA,IAAAA,CAATE,EAAAA,IAAQ,iCAyiBb,U,qkBCpmBO,MAAM8D,UAAkCzV,EAAAA,cAyB3CC,YAAmBC,GACfC,MAAMD,GAvBO,KAAAyS,eAAyBP,EAAiBQ,KAEnD,KAAAxS,aAAuBgS,EAAiBS,KAM/B,KAAAvS,UAAoB8R,EAAiB9R,UAIrC,KAAAK,iBAA0C,GAEnD,KAAAqG,aAAgC,GA4FvB,KAAA8L,cAAgB,KAC7BnR,KAAKC,UAASmR,IAAa,CACvB3Q,WAAYgQ,EAAiBkC,SAC7BtB,WAAYD,EAAcC,aAC3B,EA2TU,KAAAC,0BAA4B,CAACC,EAA4B/K,IAA0B,KAChG,MAAM,eAAEzC,GAAmB/D,KAAKW,MAC1BqD,EAAU,CAAE,CAACuN,IAAW/K,GAC9BxG,KAAKC,SAAS,CAAE8D,eAAe,OAAMA,GAAmBC,IAAY,EAqHvD,KAAApF,qBAAuB,CAAC4S,EAA6B1S,IAA0B,KAC5F,MAAMC,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/CC,EAA0C,CAAC,CAAEC,IAAKuS,EAAqBtS,QAASH,IAGtF,GAAII,EAAAA,gBAAAA,YAA4BL,EAAOM,oBACnC,IAAK,MAAME,KAAQR,EAAOM,mBAAoB,CAC1C,MAAM0B,EAAcxB,EAAKC,MAAMN,IAC/BD,EAAiBW,KAAK,CAAEV,IAAK6B,EAAa5B,QAASI,EAAKM,KAAMC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,iBAAoB,CAGxIC,KAAKC,SAAS,CACVC,cAAef,EAAAA,gBAAAA,YAA4BH,GAAoBA,EAAmB,CAAC,CAAEC,IAAK,WAC5F,EASW,KAAAoB,sBAAwB,CAACC,EAAqBC,IAAsB,KAC5EP,KAAKW,MAAM8Q,cASZqC,EAA0B7D,aAAc,EACxCjQ,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjBoS,oBAAqB5P,EAAKvB,SAC1B2B,WAAYH,MAZhBP,KAAKC,SAAS,CACVQ,WAAYH,EAAKxC,GACjB4C,WAAYH,IAEZP,KAAKzB,MAAMqS,SAAS/P,mBACpBb,KAAKpB,qBAAqB0B,EAAKQ,YAAcR,EAA7CN,GAQD,EASM,KAAAmQ,cAAgB,IAAM,KACnC2D,EAA0B7D,aAAc,EACxCjQ,KAAKC,UAAUmR,IAAa,CAAQ3Q,WAAY2Q,EAAc1Q,cAAc,EAO/D,KAAAU,oBAAuBC,IAChCrB,KAAKiB,SAASC,UACblB,KAAKiB,SAASC,QAAQI,SAASD,EAAME,UACjCvB,KAAKW,MAAM8Q,aAGZzR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWsP,oBAAqB,GAAImB,WAAW,IAF3ErR,KAAKC,SAAS,CAAEQ,WAAYgQ,EAAiBkC,SAAUzC,oBAAqB,GAAImB,WAAW,IAER,EAQ9E,KAAA0C,gBAAkB,KAC/B,MAAM,aAAE1O,GAAiBrF,KAAKzB,MAAMqS,SAEoE,IAAD,GADvG5Q,KAAKqF,aAAeA,EAChBlG,EAAAA,gBAAAA,YAA4BkG,IAAiBlG,EAAAA,gBAAAA,YAA4BkG,EAAa,GAAGa,YAC7D,QAA5B,EAAAlG,KAAKqF,aAAa,GAAGa,eAAO,OAA5B,EAA8B7G,KAAIC,IAC9B,MAAM0U,EAAgB,CAAC,EAOvB,OANAC,OAAOC,OAAOF,EAAe,CAAElT,YAAaxB,EAAKwB,cACjDmT,OAAOC,OAAOF,EAAe,CAAEjV,SAAUiB,KAAKzB,MAAMqS,SAAS5D,UAAU0C,sBACvEuE,OAAOC,OAAOF,EAAe,CAAEzM,QAASjI,EAAKiI,UACzCpI,EAAAA,gBAAAA,YAA4BG,EAAK4G,UAAY5G,EAAK0P,aAAejE,EAAAA,EAAAA,QACjEzL,EAAK4G,QAAQiO,QAAQH,GAElB1U,CAAI,IACZ,EAWM,KAAA8Q,uBAAyB,CAACrI,EAAemI,EAA8BG,KAE/EyD,EAA0B7D,aADJ,IACmBlI,MAGzCsI,IAAmBH,IAGjBA,IAAwBG,EAMlB,KAAAqB,cAAgB,KACxB1R,KAAKW,MAAM8Q,aAGZzR,KAAKC,SAAS,CAAEQ,gBAAYG,EAAWsP,oBAAqB,GAAImB,WAAW,IAF3ErR,KAAKC,SAAS,CAAEQ,WAAYgQ,EAAiBkC,SAAUzC,oBAAqB,GAAImB,WAAW,GAEP,EAQ3E,KAAA1P,aAAgBN,IACzBA,EAAMO,UAAY5B,KAAKrB,YAAcqB,KAAKW,MAAM8Q,cAAgBzR,KAAKW,MAAM0Q,WAC3ErR,KAAKC,SAAS,CAAEQ,WAAYgQ,EAAiBkC,SAAUzC,oBAAqB,GAAImB,WAAW,GAAS,EAO3F,KAAAM,sBAAwB,KACrC3R,KAAKC,SAAS,CAAEwR,aAAczR,KAAKyR,cAAe,EA1oBlDzR,KAAKiB,SAAW5C,EAAAA,YAChB2B,KAAKsQ,YAAcjS,EAAAA,YACnB,MAAM,aAAEgH,GAAiBrF,KAAKzB,MAAMqS,SACpC,GAAIzR,EAAAA,gBAAAA,YAA4BkG,IAAiBlG,EAAAA,gBAAAA,YAA4BkG,EAAa,GAAGa,SAAU,CACnG,MAAMwD,EAAcrE,EAAa,GAAGa,QAAQ,GAAGpF,YAAcuE,EAAa,GAAGa,QAAQ,GAAGpF,YAAc,GAChG/B,EAAWsG,EAAa,GAAGa,QAAQ,GAAGnH,SAAWsG,EAAa,GAAGa,QAAQ,GAAGnH,SAAW,GAC7FiB,KAAKhB,iBAAmB,CAAC,CAAEC,IAAKyK,EAAaxK,QAASH,IAGlDI,EAAAA,gBAAAA,YAA4BkG,EAAa,GAAGa,QAAQ,GAAG9G,qBACvDiG,EAAa,GAAGa,QAAQ,GAAG9G,mBAAmBC,KAAIC,IAC9C,MAAMwB,EAAcxB,EAAKC,MAAMN,IAE/B,OADAe,KAAKhB,iBAAiBW,KAAK,CAAEV,IAAK6B,EAAa5B,QAASI,EAAKM,KAAMC,qBAAsB,CAAEC,QAASR,EAAKQ,QAAQC,kBAC1G,IAAI,GACb,CAGVC,KAAKW,MAAQ,CACTF,WAAYgQ,EAAiBkC,SAC7BzC,oBAAqB,GACrBxP,gBAAYE,EACZmD,eAAgB,CAAC,EACjB0N,aAAczR,KAAKyR,aACnBvR,cAAeF,KAAKhB,iBACpBqS,WAAW,GAGfrR,KAAKoE,kBAAmBC,EAAAA,EAAAA,oBAAmBrE,KAAKzB,MAAMqS,SAASrO,QAAQiB,QAAQc,kBAC3EtE,KAAKzB,MAAMqS,SAASrM,aACpBvE,KAAKzB,MAAMqS,SAASpM,WACxBxE,KAAKyE,SAAUC,EAAAA,EAAAA,kBAAiB,QAAS1E,KAAKoE,iBAAkB,GAAI,IACpEpE,KAAK6J,YAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,QACzE,CAEqBgN,mBACjB,MAAqG,QAA7F/F,EAAAA,EAAAA,UAAS,CAAEkG,QAASC,EAAAA,YAAAA,QAAqBtP,QAASvC,KAAKzB,MAAMqS,SAASrO,QAAQiB,SAC1F,CAEOmB,oBACH3E,KAAK8R,mCAAoC1F,EAAAA,EAAAA,mBAAkBpO,OAAQ,SAAUgC,KAAK2R,uBAClF9M,SAASE,iBAAiB,UAAY/E,KAAK2B,cAA2C,GACtF3B,KAAK2R,wBACL9M,SAASC,KAAKC,iBAAiB,YAAa/E,KAAKoB,qBACjDpB,KAAK+T,iBACT,CAEOxD,qBAAkB,MACO,QAAxB,EAAAvQ,KAAKsQ,YAAYpP,eAAO,OAAxB,EAA0BsP,SAAS,IAAMxQ,KAAKzB,MAAMqS,SAASpQ,cAC5DR,KAAKsQ,YAAYpP,QAAQsP,SAAS,GAAmBrP,OAE9D,CAEO6D,uBACHhH,OAAOiH,oBAAoB,SAAUjF,KAAK8R,mCAAoC,GAC9EjN,SAASC,KAAKG,oBAAoB,YAAajF,KAAKoB,qBAAqB,EAC7E,CAEO8D,SACHlF,KAAKvB,aAAegS,EAAiB8B,IAErC,OACIlU,EAAAA,cAACwH,EAAAA,KAAI,CAACvC,UAAU,qBAAqBwC,IAAK9F,KAAKiB,UAEvCjB,KAAKW,MAAM8Q,aAAezR,KAAKmF,oBAAuB9G,EAAAA,cAAAA,EAAAA,SAAAA,KAClDA,EAAAA,cAAC+K,EAAAA,OAAM,eACH9F,UAAU,sBACV+F,QAASrJ,KAAKmR,cAAa,gBAP7B,oBASEY,MAAO/R,KAAKzB,MAAMqS,SAAS5D,UAAUgF,mBAAkB,aAC3ChS,KAAKzB,MAAMqS,SAAS5D,UAAUgF,oBACtChS,KAAK6J,aAEZ7J,KAAKiS,uBAK1B,CAYQA,sBACJ,OACI5T,EAAAA,cAAC6T,EAAAA,SAAQ,CAAC5O,UAAU,mCAAmCY,OAAQlE,KAAKW,MAAM0Q,WACrErR,KAAKW,MAAM8Q,aAAezR,KAAKmF,oBAAsBnF,KAAKoF,qBAGvE,CAEQD,oBACJ,MAAM,iBAAE4H,EAAgB,2BAAED,EAA0B,uBAAEI,EAAsB,WAAE5H,GAAetF,KAAKzB,MAAMqS,SAGxG,OADA5Q,KAAKvB,aAAegS,EAAiB8B,IAEjClU,EAAAA,cAACkH,EAAAA,OAAM,iBACCD,EAAU,CACdhC,UAAWkC,IAAWF,EAAWhC,UAAWtD,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,WAA2B,QAAU,YACvHpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAK7F,KAAKzB,MAAMqS,SAAShL,SAAQ,CAAEG,SAAS,OAC5C/F,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,YACnCpC,EAAAA,cAACwH,EAAAA,KAAI,iBAAKiH,GACNzO,EAAAA,cAACwH,EAAAA,KAAI,iBAAKkH,EAAgB,CAAE1D,QAASrJ,KAAKmQ,mBAC1C9R,EAAAA,cAACwH,EAAAA,KAAI,iBAAKqH,GACLlN,KAAKW,MAAMuP,sBAGvBlQ,KAAKgG,kBAItB,CAEQZ,qBACJ,MAAM,WAAEE,GAAetF,KAAKzB,MAAMqS,SAClC,OACIvS,EAAAA,cAACkH,EAAAA,OAAM,iBAAKD,EAAU,CAAEhC,UAAWkC,IAAWF,EAAWhC,aACrDjF,EAAAA,cAACwH,EAAAA,KAAI,iBAAK7F,KAAKzB,MAAMqS,SAAShL,SAAQ,CAAEG,SAAS,OAC5C/F,KAAKgG,iBACN3H,EAAAA,cAAAA,MAAAA,CAAKiF,UAAU,uBACXjF,EAAAA,cAAAA,SAAAA,CAAQiF,UAAU,qBAAoB,aAAY,QAAQ+F,QAASrJ,KAAK0R,kBAK5F,CAEQpK,kBAAkBhI,GACtB,OAAIA,EAAKiI,UAAY4K,EAAAA,iBAAAA,mBAAoC7S,EAAKiI,SAEtDvH,KAAKoG,oBAAoB9G,GAErBA,EAAKiI,QAKV,KAHCvH,KAAKwH,oBAAoBlI,EAIrC,CAEQ0G,iBACJ,MAAM,SAAEyB,GAAazH,KAAKzB,MAAMqS,SAChC,IAAIvL,EAAgC,GAEhCA,EADArF,KAAKW,MAAM8Q,aACIzR,KAAKqF,aAELrF,KAAKzB,MAAMqS,SAASvL,aAEvC,MAAM,WAAE5E,GAAeT,KAAKW,MACtB+G,EAA8B,GACpC,IAAI0M,EAA2C,GAC3CC,EAAkD,GACtD,MAAMC,EAAiBC,KAAKC,MAAMD,KAAKE,UAAUpP,IAEjD,IAAK,MAAM/F,KAAQgV,EACfD,EAAqB/U,EAAK4G,QAASmI,QAAOuE,GAAgBA,EAAY9U,IAAM8U,EAAY9U,IAAMgN,EAAAA,EAAAA,SAC9FxL,EAAK4G,QAAUmO,EAGnB,IAAK,MAAM/U,KAAQ+F,EACf+O,EAAc9U,EAAK4G,QAASmI,QAAOuE,GAAgBA,EAAY9U,IAAM8U,EAAY9U,GAAKgN,EAAAA,EAAAA,SAG1F,GAAI9K,KAAKW,MAAM8Q,mBAA+B7Q,IAAfH,GAA4BtB,EAAAA,gBAAAA,YAA4BkG,GAAe,CAClG,IAAII,EAAiC,CAAC,EACtC,IAAK,MAAMkC,KAAiBtC,EAAc,CACtC,GAAIsC,EAAc7J,KAAO2C,EAAY,CACjCgF,EAAWkC,EACNmM,EAA0B7D,YAK3BjQ,KAAKC,SAAS,CACVS,gBAAYE,EACZsP,oBAAqBvI,EAAc5I,WANvCiB,KAAKC,SAAS,CACVS,gBAAYE,IAQpB,KAAM,CAGV,GADA6E,EAAWzF,KAAK4H,gBAAgBD,GAC5BlC,GAAYA,EAAS3H,KAAO2C,EAC5B,MAIJgF,GACAiC,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKpB,EAAS3H,IAAQ2J,GACvB,IACAzH,KAAK6H,oBAAoBpC,GACzB,KAER,KAGF,CACH,IAAK,MAAOsC,EAAOzI,KAASgV,EAAelC,UACvC1K,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKvH,EAAKxB,IACN2J,EAAQ,CACZ3B,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqB5Q,EAAKP,UAAYiB,KAAKsQ,YAAc,OAE3GtQ,KAAK6H,oBAAoBvI,KAKtC,IAAK,MAAOyI,EAAOzI,KAAS8U,EAAYhC,UACpC1K,EAAa/H,KACTtB,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKvH,EAAKxB,IACN2J,EAAQ,CACZ3B,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqB5Q,EAAKP,UAAYiB,KAAKsQ,YAAc,OAE3GtQ,KAAK6H,oBAAoBvI,IAEjC,CAIT,OAAOoI,CACX,CAEQE,gBAAgBtI,GACpB,MAAM0I,EAAW1I,aAAI,EAAJA,EAAM4G,QACvB,GAAI8B,GAAY7I,EAAAA,gBAAAA,YAA4B6I,GACxC,IAAK,IAAID,EAAQ,EAAGA,GAASC,EAAS7H,OAASsQ,EAAiB8B,IAAKxK,IAAS,CAC1E,MAAM7B,EAAyB8B,EAASwK,OAAOzK,IAC/C,IAAIsK,EAAe/S,aAAI,EAAJA,EAAMxB,GAEzB,GAAIoI,EAAQpI,KAAOkC,KAAKW,MAAMF,WAU1B,OATI4R,IAAiB5B,EAAiBkC,UAAYzM,EAAQpI,GAAMgN,EAAAA,EAAAA,SAC5DuH,OAAezR,GAGdkT,EAA0B7D,YAG3BjQ,KAAKC,SAAS,CAAES,WAAY2R,EAAcnC,oBAAqBhK,EAAQnH,WAFvEiB,KAAKC,SAAS,CAAES,WAAY2R,IAIzBnM,EAEX,MAAMgC,EAAQlI,KAAK4H,gBAAgB1B,GACnC,GAAIgC,EACA,OAAOA,CAAK,CAIxB,OAAO,IACX,CAEQL,oBAAoBxC,GACxB,OAAIlG,EAAAA,gBAAAA,YAA4BkG,EAAaa,SACrClG,KAAKW,MAAM8Q,mBAA0C7Q,IAA1BZ,KAAKW,MAAMF,WAC9BT,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,IAAI,GAGnEO,EAAAA,cAAAA,EAAAA,SAAAA,KACK2B,KAAKoI,sBAAsB/C,GAC3BrF,KAAKmI,eAAe9C,EAAaa,QAASb,EAAavH,KAIzDuH,EAAakC,UAAY4K,EAAAA,iBAAAA,mBAAoC9M,EAAakC,SACzEvH,KAAKoG,oBAAoBf,EAAcA,EAAavH,IACpDuH,EAAakC,QAIlB,KAHKvH,KAAKwH,oBAAoBnC,EAIzC,CAEQ8C,eAAesK,EAAgChS,EAAqBiS,GAAmB,QAE3F,IAAI1K,EAAwCyK,EACxChS,IAAegQ,EAAiBkC,WAChC3K,EAAWyK,EAAcpE,QAAOuE,GAAgBA,EAAY9U,IAAM8U,EAAY9U,IAAMgN,EAAAA,EAAAA,UAGxF,MAAM,SAAErD,GAAazH,KAAKzB,MAAMqS,SAC1BiC,EAA0E,QAAlD,EAAG7S,KAAKzB,MAAMqS,SAASnN,OAAO8E,4BAAoB,SAC1EC,EAAqE,QAA9C,EAAGxI,KAAKzB,MAAMqS,SAASnN,OAAOgF,wBAAgB,QAAIgI,EAAiBqC,MAEhG,GAAIrS,GAAcT,KAAKW,MAAMF,aAAeA,EAExC,OADAT,KAAKzB,MAAMqS,SAASrO,QAAQiC,UAAUkE,MAAM,gEACrC,KAGX,IAAKV,IAAa7I,EAAAA,gBAAAA,YAA4B6I,GAE1C,OADAhI,KAAKzB,MAAMqS,SAASrO,QAAQiC,UAAUkE,MAAM,4DACrC,KAGX,IAAIC,EAAyB,GAC7B,MAAMC,EAAcZ,EAAS3I,KAAI,CAACP,EAAuBiJ,KACrD,MAAMe,EAAchK,EAAOoH,SAAW/G,EAAAA,gBAAAA,YAA4BL,EAAOoH,SACzE,IAAIT,EAQAS,EANAT,EADAqD,GAAc9I,KAAKW,MAAM8Q,aACdzR,KAAKoI,sBAAsBtJ,EAAQ2B,EAAYsH,GACnD/H,KAAKvB,eAAiBgS,EAAiB8B,KAAQzJ,EAG3C,KAFA9I,KAAK+S,YAAYjU,EAAQiJ,GAKxC,MAAMiL,EAAkBlK,GAAc+J,GAA6B7S,KAAKvB,cAAgBuK,KAAKC,MAAMT,GAA2BiI,EAAiB8B,IAE3IzJ,IAAe9I,KAAKW,MAAM8Q,eACtBzR,KAAKvB,cAAgBgS,EAAiBwC,IACtC/M,EAAUlG,KAAKkT,qBAAqBpU,GAC7BkB,KAAKvB,cAAgBuB,KAAKgR,eAAiBP,EAAiB8B,MACnEvS,KAAKvB,eACLkK,EAAiB,SAAS3I,KAAKvB,aAAayK,aAC5ChD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,aAAStF,GAAW,KAG7DoS,GAAmBhT,KAAKW,MAAM8Q,eAC9BzR,KAAKvB,eACLkK,EAAiBkK,EAA2B,SAAS7S,KAAKvB,aAAayK,aAAe,GACtFhD,EAAUlG,KAAKmI,eAAerJ,EAAOoH,QAASpH,EAAOhB,IAAI,IAE7D,MAAM4L,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9D,OACIzC,EAAAA,cAACwH,EAAAA,KAAI,iBACG4B,EAAQ,CACZZ,IAAK/H,EAAOhB,GACZkM,YAAahK,KAAKvB,eAAiBgS,EAAiB8B,KAAOvS,KAAKpB,qBAAqB8K,EAAa5K,GAClGwE,UAAWkC,IAAWiC,EAASnE,UAAW0P,GAAmB,eAC7DlN,IAAK9F,KAAKoQ,uBAAuBrI,EAAO/H,KAAKW,MAAMuP,oBAAqBpR,EAAOC,UAAYiB,KAAKsQ,YAAc,OAE5G7K,EACAS,EACC,IAGf,OAAQlG,KAAKmJ,YAAYR,EAAgBC,EAAa8J,EAC1D,CAEQK,YAAYjU,EAAuBiJ,GACvC,IAAItC,EAMJ,OAJIA,EADAzF,KAAKvB,eAAiBgS,EAAiB8B,IAC3BzT,EAAOyI,QAAUvH,KAAKmT,4BAA4BrU,EAAQiJ,GAAS/H,KAAKwH,oBAAoB1I,GAE5FA,EAAOyI,QAAUvH,KAAKoG,oBAAoBtH,EAAQiJ,GAAS/H,KAAKwH,oBAAoB1I,GAE7F2G,CACX,CAEQyN,qBAAqBzN,GAAuB,MAChD,MAAMkD,EAAiB,SAAS3I,KAAKvB,aAAayK,aAC5C7C,EAAmBZ,EAAS1G,SAE5BkF,OAAkCrD,IAArByF,EAAiCA,EAAmB,GACjEE,EAFWvG,KAAKW,MAAMoD,eAGtByE,EAAqE,QAA9C,EAAGxI,KAAKzB,MAAMqS,SAASnN,OAAOgF,wBAAgB,QAAIgI,EAAiBqC,MAEhG,IAAItM,GAAe,EACfD,EAAKd,EAAS3H,MACd0I,GAAe,GAEnB,MAAMC,EAA2B,CAAE2M,QAAS,EAAGlP,OAAQsC,GACvD,OACInI,EAAAA,cAACqI,EAAAA,OAAM,CACHM,cAAeP,EACfI,IAAKpB,EAAS3H,GACdwF,UAAWkC,IAAW,yBAA0BmD,GAChD7B,UAAU,sBACVG,WAAW,uBACXC,eAAe,QACfb,iBAAkBpC,EAClB8C,SAAU/G,KAAKsR,0BAA0B7L,EAAS3H,GAAI0I,IAEtDnI,EAAAA,cAAAA,MAAAA,KACKoH,EAASS,QAAS7G,KAAK+H,GAChBjI,EAAAA,gBAAAA,YAA4BiI,EAAYlB,WACxClG,KAAKvB,eACDuB,KAAKvB,aAAe+J,GACbxI,KAAKkT,qBAAqB9L,GAGlCpH,KAAKsH,kBAAkBF,MAKlD,CAcQgB,sBAAsBtJ,EAAuB2B,EAAqBsH,GACtE,OACI1J,EAAAA,cAACwH,EAAAA,KAAI,eACDgB,IAAKkB,GACD/H,KAAKzB,MAAMqS,SAASxH,OAAM,CAC9BC,QAASrJ,KAAKK,sBAAsBvB,EAAQ2B,GAAW,kBACtCT,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,mBAC5DkC,KAAKW,MAAMF,YAAcT,KAAKW,MAAMF,aAAe3B,EAAOhB,IAAG,cAClE2C,EAAU,aACXT,KAAKW,MAAM8Q,aAAe3S,EAAO8H,eAAYhG,IAEvD9B,EAAOC,SAGrB,CAEQqH,oBAAoBtH,EAAuBiJ,GAC/C,MAAM,KAAE0B,GAASzJ,KAAKzB,MAAMqS,SACtB7R,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GACrDiB,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAE5C,IAAKkB,EACfkC,KAAMnL,EAAOyI,SACTsC,EAAU,CACdtI,OAAQzC,EAAOiL,iBAAmB,cAAWnJ,EAC7CyI,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DD,EAAOC,SAGrB,CAEQoU,4BAA4BrU,EAAuBiJ,GAA6C,IAA7BsL,IAAAA,UAAAA,OAAAA,QAAAA,IAAAA,UAAAA,KAAAA,UAAAA,GACvE,MAAM,KAAE5J,GAASzJ,KAAKzB,MAAMqS,SACtB7R,EAAWD,EAAOC,SAAWD,EAAOC,SAAW,GAC/C2K,EAAc5K,EAAOgC,YAAchC,EAAOgC,YAAc,GAC9Dd,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OACIpG,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAE5C,IAAKkB,EAAOiC,YAAaqJ,GAAiBrT,KAAKpB,qBAAqB8K,EAAa5K,GAC3FmL,KAAMnL,EAAOyI,SAAasC,EAAU,CAAER,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KACnGD,EAAOC,SAGrB,CAEQoL,uBAAuBpL,EAAmBe,GAC9C,MAAM,KAAE2J,GAASzJ,KAAKzB,MAAMqS,SAC5B5Q,KAAKyE,QAAQkF,cAAcC,MAAQ7K,EACnC,MAAM8K,GAAaC,EAAAA,EAAAA,wBAAuB9J,KAAKoE,iBAAkBpE,KAAKyE,SACtE,OAAI1F,GAAYe,EAERzB,EAAAA,cAACwH,EAAAA,KAAI,iBACG4D,EAAI,CAAEQ,KAAMnK,GAAa+J,EAAU,CACvCR,SAASa,EAAAA,EAAAA,kBAAiBlK,KAAKoE,iBAAkBpE,KAAKyE,QAAS1F,KAC7DA,GAIP,IAEX,CAEQyI,oBAAoB1I,EAAuBiJ,GAC/C,MAAM,KAAEqC,GAASpK,KAAKzB,MAAMqS,SAC5B,OACIvS,EAAAA,cAACwH,EAAAA,KAAI,eAACgB,IAAKkB,GAAWqC,GAChBtL,EAAOC,SAGrB,CAEQoK,YAAYkB,EAAezB,EAA4B0K,GAAmB,MAC9E,MAAM,aAAE9I,EAAY,kBAAEC,EAAiB,kBAAE5J,EAAiB,uBAAE6J,GAA2B1K,KAAKzB,MAAMqS,SAC5F2C,GACDvT,KAAKW,MAAM8Q,cAAgB5Q,GAAkD,OAA7Bb,KAAKW,MAAMT,oBAAuDU,IAA7BZ,KAAKW,MAAMT,gBAAgCoT,EAC/HE,GACDxT,KAAKW,MAAM8Q,cAAgB/G,GAA0BvL,EAAAA,gBAAAA,YAA4Ba,KAAKW,MAAMT,iBAAmBoT,EAC9GG,EAAoBzT,KAAKvB,aAAegS,EAAiBwC,KAAOM,EAAyB/I,EAAclH,UAAY,kBACzHtD,KAAKvB,aAAegS,EAAiB8B,IACrC,MAAMmB,EACFH,GAA0BvT,KAAKzB,MAAMqS,SAASnN,OAAOgF,kBACrDzI,KAAKzB,MAAMqS,SAASnN,OAAOgF,iBAAmBgI,EAAiBwC,KAAO,sBAEpEU,EAAyC,QAA3B,EAAG3T,KAAKW,MAAMT,qBAAa,aAAxB,EAA0BmO,QAAO9O,IAAU4S,EAAAA,iBAAAA,mBAAoC5S,EAAMN,OACtG2U,EAAqBD,aAAc,EAAdA,EAAgBtU,KAAIC,GAAQA,EAAKL,MAAK4U,KAAK,KACtE,OACIxV,EAAAA,cAACwH,EAAAA,KAAI,iBAAK2E,EAAY,CAAElH,UAAWmQ,IAC/BpV,EAAAA,cAACwH,EAAAA,KAAI,iBACG7F,KAAKzB,MAAMqS,SAAShL,SAAQ,CAChCtC,UAAWkC,IAAWxF,KAAKzB,MAAMqS,SAAShL,SAAStC,UAAW+G,EAAOkJ,GAA0B,gBAAiBG,KAC/G9K,GAELvK,EAAAA,cAAAA,MAAAA,CAAKiF,UAAU,2BAA2BuD,IAAK+M,GAEvCL,GAA0BpU,EAAAA,gBAAAA,YAA4BwU,IAAmBA,EAAetU,KAAIC,IAAI,eAC5FjB,EAAAA,cAACwH,EAAAA,KAAI,iBAAK4E,EAAiB,CAAEnH,UAAWmH,EAAmBnH,UAAWuD,IAAKvH,EAAKL,MAC1EyR,EAAiB1Q,KAAKzB,MAAe,QAAV,EAAEe,EAAKL,WAAG,QAAI,GAAIK,EAAKJ,QAASgK,YAC3DsK,GAA+BxT,KAAKmK,uBAAuB7K,EAAKJ,QAAkC,QAA3B,EAAEI,EAAKO,4BAAoB,aAAzB,EAA2BC,SACnG,KAK/B,EA3hBegU,EAAAA,aAAuB,GA4D5BhE,EAAAA,EAAAA,IAAAA,CAATE,EAAAA,IAAQ,iCA6mBb,UChrBA,EAV4BzR,GAEpBA,EAAMkF,OAAOiK,cACNrP,EAAAA,cAACyV,EAAyB,CAAClD,SAAUrS,IAGzCF,EAAAA,cAAC0S,EAA0B,CAACH,SAAUrS,G,QCvBjDmW,EAAOC,QAAUtW,K,SCAjBqW,EAAOC,QAAUC,Q","sources":["webpack://@msdyn365-commerce-partners/fabrikam/./lib/navigation-menu/module-registration.js?7039","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/fabrikam/views/navigation-menu.view.tsx?bc23","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.data.ts?9815","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.tsx?2bef","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/navigation-menu/navigation-menu.view.tsx?c594","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-utilities.tsx?d092","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-disabled.tsx?1d68","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/components/navigation-menu-root-enabled.tsx?d5b3","webpack://@msdyn365-commerce-partners/fabrikam/./src/modules/adventureworks/views/navigation-menu.view.tsx?5304","webpack://@msdyn365-commerce-partners/fabrikam/external var \"React\"?0d3b","webpack://@msdyn365-commerce-partners/fabrikam/external var \"ReactDOM\"?853b"],"sourcesContent":["const binding = { modules: {}, dataActions: {} };\n\n const registerActionId = (actionPath) => {\n if (binding.dataActions[actionPath] &&\n binding.dataActions[actionPath].default &&\n binding.dataActions[actionPath].default.prototype &&\n binding.dataActions[actionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[actionPath].default.prototype.id] = binding.dataActions[actionPath];\n } else {\n Object.keys(binding.dataActions[actionPath] || {}).forEach(exportName => {\n if (binding.dataActions[actionPath][exportName] &&\n binding.dataActions[actionPath][exportName].prototype &&\n binding.dataActions[actionPath][exportName].prototype.Action) {\n binding.dataActions[binding.dataActions[actionPath][exportName].prototype.id] = binding.dataActions[actionPath][exportName];\n }\n })\n }\n };\n\n const registerSanitizedActionPath = (sanitizedActionPath, dataAction) => {\n if (process.env.NODE_ENV === 'development') {\n if (!dataAction.default) {\n throw new Error('Data action path does not have a default export');\n }\n if (!(dataAction.default.prototype.id && binding.dataActions[dataAction.default.prototype.id]) || !binding.dataActions[sanitizedActionPath]) {\n binding.dataActions[sanitizedActionPath] = dataAction;\n }\n } else {\n binding.dataActions[sanitizedActionPath] = dataAction;\n if (!binding.dataActions[sanitizedActionPath].default) {\n throw new Error('Data action path ' + sanitizedActionPath + ' does not have a default export');\n }\n binding.dataActions[sanitizedActionPath].default.prototype.RegistrationId = sanitizedActionPath;\n if (binding.dataActions[sanitizedActionPath].default.prototype.id) {\n binding.dataActions[binding.dataActions[sanitizedActionPath].default.prototype.id] = sanitizedActionPath;\n }\n }\n };\n \n\n (binding.modules['navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu'),\n $type: 'contentModule',\n da: [{name:'categories', path:'@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy', runOn: 0}],\n \n iNM: true,\n ns: '@msdyn365-commerce-modules',\n n: 'navigation-menu',\n p: 'navigation-menu',\n \n pdp: '',\n \n \n md: 'node_modules/@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu'\n });\n \n\n {\n const sanitizedActionPath = '@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy';\n let dataAction = require('@msdyn365-commerce-modules/retail-actions/dist/lib/get-categories-hierarchy');\n registerSanitizedActionPath(sanitizedActionPath, dataAction);\n }\n \n\n \n window.__bindings__ = window.__bindings__ || {};\n window.__bindings__.modules = {\n ...window.__bindings__.modules || {},\n ...binding.modules\n };\n \n window.__bindings__.dataActions = {\n ...window.__bindings__.dataActions || {},\n ...binding.dataActions\n };\n export const viewDictionary = {};\n viewDictionary['@msdyn365-commerce-modules|fabrikam-design-kit|modules|fabrikam|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/fabrikam-design-kit/dist/lib/modules/fabrikam/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-fabrikam-design-kit-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-modules|navigation-menu|modules|navigation-menu|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-modules/navigation-menu/dist/lib/modules/navigation-menu/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-modules-navigation-menu-navigation-menu'\n };\nviewDictionary['@msdyn365-commerce-theme|adventureworks-theme-kit|modules|adventureworks|views|navigation-menu'] = {\n c: () => require('@msdyn365-commerce-theme/adventureworks-theme-kit/dist/lib/modules/adventureworks/views/navigation-menu.view.js'),\n cn: '@msdyn365-commerce-theme-adventureworks-theme-kit-navigation-menu'\n };\nwindow.__bindings__ = window.__bindings__ || {};\nwindow.__bindings__.viewDictionary = {\n ...window.__bindings__.viewDictionary || {},\n ...viewDictionary\n };","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IDictionary, IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { IMenuItemData, INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n Drawer,\n getPayloadObject,\n getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IDrawerState,\n IPayLoad,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n categoryImageAltText: string;\n drawerKeyValue: IDictionary;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private currentLevel: number = 0;\n\n private readonly _positionInSetOffset: number = 1;\n\n private readonly escapeKey: number = 27;\n\n private readonly menuNode: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.state = { activeMenu: undefined, parentMenu: undefined, categoryImageAltText: '', drawerKeyValue: {} };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this._escFunction = this._escFunction.bind(this);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.removeEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n }\n\n public render(): JSX.Element | null {\n const { isMobileView } = this.props;\n\n this.currentLevel = 1;\n return (\n <>\n {isMobileView ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n /**\n * Method to render mobile menu.\n * @returns Jsx element.\n */\n private _renderMobileMenu(): JSX.Element {\n const { isMobileView, menuItemData, Navigation } = this.props;\n return (\n \n {menuItemData.map((menuItem: IMenuItemData, posinset: number) => {\n return this._renderDrawerMenu(menuItem, menuItemData.length, posinset + this._positionInSetOffset);\n })}\n \n );\n }\n\n /**\n * Method to render desktop menu.\n * @returns Jsx element.\n */\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props;\n return (\n \n \n {this._renderDisplay()}\n \n \n );\n }\n\n /**\n * Method to render drawer menu.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerMenu(menuItem: IMenuItemData, setSize: number, posinset: number): JSX.Element | null {\n if (menuItem && menuItem.subMenu && ArrayExtensions.hasElements(menuItem.subMenu)) {\n return (this._renderDrawer(menuItem, setSize, posinset));\n }\n return (this._renderLinkMenuItem(menuItem, undefined, true, false, setSize, posinset));\n\n }\n\n /**\n * Method to render drawer component.\n * @param menuItem -Menuitem data.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawer(menuItem: IMenuItemData, setSize?: number, posinset?: number): JSX.Element | null {\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue !== undefined ? keyValue : {};\n const { isMobileView } = this.props;\n\n let isDrawerOpen = false;\n if (keys[buttonText]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData, currentPos: number) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n return (this._renderDrawer(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset));\n }\n return this._renderDrawerLink(menuSubItem, menuItem.subMenu?.length, currentPos + this._positionInSetOffset);\n })}\n
\n \n );\n }\n\n /**\n * Method to render link.\n * @param linkText -Text on Menu link.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkText(linkText: string | undefined, setSize: number | undefined, posinset: number | undefined): JSX.Element {\n return (\n \n {linkText}\n \n );\n }\n\n /**\n * Method to render drawer link.\n * @param item -Single Menuitem.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderDrawerLink(item: IMenuItemData, setSize: number | undefined, posinset: number): JSX.Element | null {\n if (item && item.linkText && item.linkURL && item.linkURL.length > 0) {\n return (\n this._renderLinkMenuItem(item, undefined, true, false, setSize, posinset)\n );\n } else if (item && item.linkText && !item.linkURL) {\n return (\n this._renderSpanMenuItem(item)\n );\n }\n return null;\n }\n\n /**\n * Method to generate menu.\n * @returns Jsx element.\n */\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n this.setState({ parentMenu: undefined });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem && menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n {' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n /**\n * Method to get data for submenu.\n * @param item -Single Menuitem.\n * @returns IMenuItemData.\n */\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n this.setState({ parentMenu: item?.id });\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n /**\n * Method to create item list.\n * @param menuItemData -Single Menuitem.\n * @returns Jsx element.\n */\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id));\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true));\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return (this._renderSpanMenuItem(menuItemData, menuItemData.id, true));\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const subMenuLevel = 3;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || subMenuLevel;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option)\n );\n }\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1);\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n { menuItem }\n { subMenu }\n \n );\n });\n return (this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu));\n }\n\n /**\n * Method to render button menu item.\n * @param option -Single Menuitem.\n * @param activeMenu -Active menu number.\n * @param index -Active menu index.\n * @returns Jsx element.\n */\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n /**\n * Method to render link menu item.\n * @param option -Single Menuitem.\n * @param index -Active menu index.\n * @param hoverEffect -Active menu effect.\n * @param isParent -Is parent menu.\n * @param setSize -Setsize data.\n * @param posinset -Current position.\n * @returns Jsx element.\n */\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false,\n setSize?: number, posinset?: number): JSX.Element | null {\n const { Link, isMobileView } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText }\n \n );\n }\n\n /**\n * Method to render promotional link.\n * @param linkText -Link text.\n * @param linkUrl -Link url.\n * @returns Jsx element.\n */\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n { linkText }\n \n );\n }\n return null;\n\n }\n\n /**\n * Method to render span menu item.\n * @param option -Single Menu Item.\n * @param index -Index.\n * @param isParent -Is parent menu.\n * @returns Jsx element.\n */\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n /**\n * Method to render menu.\n * @param level -Menu level.\n * @param menuOptions -Menu lists.\n * @param currentItem -Menu current.\n * @param submenu -Mneu has submenu or not.\n * @returns Jsx element.\n */\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, isMobileView, showPromotionalContent } = this.props;\n const categoryImageDisplay = !isMobileView && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !submenu;\n const promotionalContentDisplay = !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 && 'navmenu-multi-level')}>\n { menuOptions }\n \n
\n {\n categoryImageDisplay && this.state.categoryImage && this.state.categoryImage.map(item => (\n \n { this.state.categoryImage && this._getCategoryImage(item) }\n { promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n ))\n }\n
\n
\n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n /**\n * Method to handle dropdwon change.\n * @param data -Menuitem data.\n * @param parentId -Menu parent.\n * @returns Jsx element.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n }\n\n this._resetFocus();\n };\n\n /**\n * Method to call when focus lost from menu.\n */\n private readonly _resetFocus = () => {\n if (this.props.isMobileView) {\n setTimeout(() => {\n this.menuNode && this.menuNode.current && this.menuNode.current.focus();\n }, 0);\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState(\n {\n activeMenu: undefined,\n categoryImage: null\n }\n );\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Method to handle close submenu event.\n */\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined });\n }\n }\n\n /**\n * Method to handle escape key event.\n * @param event -HTML event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n\n if (event.keyCode === this.escapeKey) {\n if (!this.props.isMobileView) {\n const navDrawerList = Array.from(this.menuNode.current!.childNodes);\n for (const item of navDrawerList) {\n const navDrawerButton = item.firstChild as HTMLButtonElement;\n if (navDrawerButton.getAttribute('aria-expanded') === 'true') {\n navDrawerButton.focus();\n }\n }\n }\n this._closeSubmenu();\n }\n };\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(categoryImage.src, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const ImageData: IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n };\n\n /**\n * Method to handle escape key event.\n * @param drawerState -HTML event.\n */\n private readonly _onDrawerChange = (drawerState: IDrawerState) => {\n const { drawerKeyValue } = this.state;\n const drawerText: string = drawerState.buttonText !== undefined ? drawerState.buttonText : '';\n const newPair = { [drawerText]: drawerState.isOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport { AsyncResult } from '@msdyn365-commerce/retail-proxy';\n\nimport { ICategoryPromotionalContentData } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuData {\n categories: AsyncResult;\n}\n\nexport interface IMenuItemData {\n id?: number;\n linkText?: string;\n linkURL?: string;\n imageSource?: string;\n imageDestinationURL?: string;\n subMenu?: IMenuItemData[];\n promotionalContent?: ICategoryPromotionalContentData[];\n menuSource?: string;\n shouldOpenNewTab?: boolean;\n ariaLabel?: string;\n}\n\n/**\n *\n * Menu type index id.\n */\nexport enum MenuTypeIndexId {\n Cms = 1000,\n Retail = 5000\n}\n\n/**\n *\n * Menu type source.\n */\nexport enum MenuSource {\n Cms = 'Cms',\n Retail = 'Retail'\n}\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { CategoryHierarchy } from '@msdyn365-commerce/commerce-entities';\nimport MsDyn365, { IActionContext, IGridSettings, IImageSettings, isEmptyOrNullObject } from '@msdyn365-commerce/core';\nimport { TextValueTranslation } from '@msdyn365-commerce/retail-proxy';\nimport { ArrayExtensions, getCategoryUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { addThrottledEvent, IModuleProps, INodeProps } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed, observable } from 'mobx';\nimport * as React from 'react';\n\nimport { IMenuItemData, INavigationMenuData, MenuSource, MenuTypeIndexId } from './navigation-menu.data';\nimport { ICmsNavItemsData, INavigationMenuProps, ISubMenusData, navigationMenuSource } from './navigation-menu.props.autogenerated';\n\nexport interface INavigationMenuViewProps extends INavigationMenuProps {\n className: string;\n menuItemData: IMenuItemData[];\n Navigation: IModuleProps;\n MenuList: INodeProps;\n ListItem: INodeProps;\n Link: INodeProps;\n Button: INodeProps;\n Span: INodeProps;\n ImageContainer: INodeProps;\n MobileDescriptionContainer: INodeProps;\n MobileBackButton: INodeProps;\n MobileDescriptionLabel: INodeProps;\n imageSettings: IImageSettings;\n gridSettings: IGridSettings;\n isMobileView: boolean;\n DivContainer?: INodeProps;\n ImageDivContainer?: INodeProps;\n showCategoryImage?: boolean;\n showPromotionalContent?: boolean;\n}\n\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\nexport interface INavigationMenuState {\n isMobile: boolean;\n}\n\n/**\n *\n * NavigationMenu component.\n * @extends {React.PureComponent>}\n */\nclass NavigationMenu extends React.PureComponent, INavigationMenuState> {\n private static CMSItemIdInit: number = MenuTypeIndexId.Cms;\n\n private static RSItemIdInit: number = MenuTypeIndexId.Retail;\n\n private resizeThrottledEventHandler?: (event: Event) => void;\n\n private menuItemList: IMenuItemData[];\n\n private isRetail: boolean = true;\n\n private isCMS: boolean = true;\n\n @observable\n private viewport: GridSize;\n\n public static getFriendlyName(locale: string, nameTranslations?: TextValueTranslation[]): string | undefined {\n let nameTranslation: TextValueTranslation | undefined;\n if (locale && nameTranslations && nameTranslations.length > 0) {\n nameTranslation = nameTranslations.find(item => item.Language!.toLowerCase() === locale.toLowerCase());\n }\n\n return nameTranslation && nameTranslation.Text;\n }\n\n constructor(props: INavigationMenuProps) {\n super(props);\n this._updateViewport = this._updateViewport.bind(this);\n this.viewport = props.context.request && props.context.request.device && props.context.request.device.Type === 'Mobile' ? 'xs' : 'lg';\n this._setNavigationSource(this.props.config && this.props.config.navigationMenuSource);\n this.state = { isMobile: this.isMobile };\n this.menuItemList = [];\n }\n\n @computed get isMobile(): boolean {\n return (this.viewport === 'xs' || this.viewport === 'sm');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n this.resizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._updateViewport as EventListener);\n }\n this._updateViewport();\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n window.removeEventListener('resize', this.resizeThrottledEventHandler!, false);\n }\n }\n\n public render(): JSX.Element | null {\n this.menuItemList = this._mapData();\n if (isEmptyOrNullObject(this.props.data)) {\n this.props.telemetry.error('Navigatiomenu returned null');\n return null;\n }\n\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=224&h=300&m=6', w: 0, h: 0 },\n xl: { q: 'w=224&h=300&m=6', w: 0, h: 0 }\n },\n lazyload: true\n };\n\n const viewProps = {\n ...this.props,\n ...this.state,\n imageSettings: defaultImageSettings,\n gridSettings: this.props.context.request.gridSettings,\n Navigation: {\n moduleProps: this.props,\n className: classnames('ms-nav', this.props.config.className, this.state.isMobile ? 'mobile-vp' : 'desktop-vp'),\n tag: 'nav',\n role: this.isMobile ? 'listbox' : 'navigation'\n },\n MenuList: {\n className: 'ms-nav__list',\n tag: 'ul',\n role: 'menu'\n },\n ListItem: {\n className: 'ms-nav__list__item',\n role: 'presentation',\n tag: 'li'\n },\n showCategoryImage: this.props.config.displayCategoryImage ?? false,\n showPromotionalContent: this.props.config.displayPromotionalImage ?? false,\n Link: {\n tag: 'a',\n className: 'ms-nav__list__item__link',\n role: this.isMobile ? 'option' : 'menuitem'\n },\n DivContainer:\n {\n tag: 'div',\n className: 'ms-nav__feature'\n },\n ImageDivContainer:\n {\n tag: 'div',\n className: 'category-image',\n role: 'tabpanel'\n },\n Button: {\n className: 'ms-nav__list__item__button',\n tag: 'button',\n role: this.isMobile ? 'option' : 'menuitem',\n onClick: this.props\n },\n ImageContainer: {\n className: 'ms-nav__list__item__image'\n },\n Span: {\n className: 'ms-nav__list__item__span',\n tag: 'span'\n },\n MobileDescriptionContainer: {\n className: 'ms-nav__list__mobile__container'\n },\n MobileBackButton: {\n className: 'ms-nav__list__mobile__container__button',\n tag: 'button',\n 'aria-label': this.props.resources.backButtonAriaLabel,\n onClick: this.props\n },\n MobileDescriptionLabel: {\n className: 'ms-nav__list__mobile__container__span',\n tag: 'span'\n },\n isMobileView: this.state.isMobile,\n menuItemData: this.menuItemList,\n className: classnames('ms-nav', this.props.config.className)\n };\n\n return this.props.renderView(viewProps) as React.ReactElement;\n }\n\n private _mapData(): IMenuItemData[] {\n const { data, config } = this.props;\n const mergedData: IMenuItemData[] = [];\n if (this.isRetail && data && data.categories && data.categories.result && data.categories.result.length > 0) {\n data.categories.result.map((item: CategoryHierarchy, index) => (\n mergedData.push(this._constructMenuItemData(item, undefined, true, index, true))\n ));\n }\n\n if (this.isCMS && config.cmsNavItems && config.cmsNavItems.length > 0) {\n config.cmsNavItems.map((item: ICmsNavItemsData, idx: number) => (\n mergedData.push(this._constructMenuItemData(undefined, item, false, idx + 1))\n ));\n }\n return this._constructTopMenuItemData(mergedData);\n }\n\n private _constructTopMenuItemData(mergedData: IMenuItemData[]): IMenuItemData[] {\n const enableTopLevelMenu = this.props.config.enabletopMenu ?? false;\n if (!enableTopLevelMenu) {\n return mergedData;\n }\n const mergedRootMenuData: IMenuItemData[] = [];\n const topMenu = {\n id: 1,\n linkText: this.props.config.rootMenuNavigation ?? '...',\n linkURL: '#',\n imageSource: undefined,\n subMenu: mergedData\n } as IMenuItemData;\n mergedRootMenuData.push(topMenu);\n\n return mergedRootMenuData;\n }\n\n private _constructMenuItemData(retailItem?: CategoryHierarchy, cmsItem?: ICmsNavItemsData, isRetail?: boolean, idx?: number, addedAllMenu?: boolean): IMenuItemData {\n const locale = this.props.context && this.props.context.request && this.props.context.request.locale ? this.props.context.request.locale : 'en-us';\n const { categoryPromotionalContent } = this.props.config;\n const cmsItemText = cmsItem && cmsItem.linkText || '';\n const { menuAriaLabel } = this.props.resources;\n\n // Filter category promotional data based on category name\n const promotionalData = retailItem && categoryPromotionalContent?.filter(\n promoItem => promoItem.categoryName?.toLowerCase() === retailItem?.Name?.toLowerCase());\n\n // First check if image is available from promotional data else read from retail server\n let imageSource: string = 'empty';\n if (ArrayExtensions.hasElements(retailItem?.Images) && retailItem!.Images[0].Uri) {\n imageSource = retailItem!.Images[0].Uri;\n }\n if (isRetail) {\n return {\n id: NavigationMenu.RSItemIdInit++,\n linkText: NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? '',\n linkURL: retailItem?.Url,\n imageSource,\n subMenu: this._getNestedChildren(retailItem, imageSource, addedAllMenu),\n promotionalContent: this.props.config.displayPromotionalImage && promotionalData,\n menuSource: MenuSource.Retail,\n ariaLabel: `${NavigationMenu.getFriendlyName(locale, retailItem?.NameTranslations) ?? ''} ${menuAriaLabel}`\n } as IMenuItemData;\n }\n return {\n id: NavigationMenu.CMSItemIdInit++,\n linkText: cmsItemText,\n linkURL: cmsItem && cmsItem.linkUrl && cmsItem.linkUrl.destinationUrl || '',\n imageDestinationURL: cmsItem && cmsItem.imageLink && cmsItem.imageLink.destinationUrl || '',\n imageSource: cmsItem && cmsItem.image && cmsItem.image.src || '',\n subMenu: this._getCMSNestedChildren(cmsItem),\n menuSource: MenuSource.Cms,\n shouldOpenNewTab: cmsItem?.openInNewTab,\n ariaLabel: `${cmsItemText} ${menuAriaLabel}`\n } as IMenuItemData;\n\n }\n\n private _getNestedChildren(category?: CategoryHierarchy, imageSourceUrl?: string, addedAllMenu: boolean = false): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n if (!category || !category.Children || category.Children.length === 0) {\n return [];\n }\n if (!this.props.config.enabletopMenu && addedAllMenu) {\n nestedChildren.push({ linkText: this.props.resources.allCategoryMenuText, imageSource: imageSourceUrl, linkURL: getCategoryUrl(category, this.props.context as unknown as IActionContext, {}) });\n }\n category.Children.map((item: CategoryHierarchy, index) => {\n nestedChildren.push(this._constructMenuItemData(item, undefined, true, index, false));\n });\n return nestedChildren;\n }\n\n private _getCMSNestedChildren(category?: ICmsNavItemsData): IMenuItemData[] {\n const nestedChildren: IMenuItemData[] = [];\n\n if (!category || !category.subMenus || category.subMenus.length === 0) {\n return [];\n }\n\n category.subMenus.map((item: ISubMenusData, idx: number) => {\n nestedChildren.push(this._constructMenuItemData(undefined, item, false, idx));\n });\n return nestedChildren;\n }\n\n private readonly _setNavigationSource = (sourceType?: navigationMenuSource): void => {\n switch (sourceType) {\n case navigationMenuSource.retailServerOnly:\n this.isRetail = true;\n this.isCMS = false;\n break;\n case navigationMenuSource.cmsOnly:\n this.isRetail = false;\n this.isCMS = true;\n break;\n case navigationMenuSource.all:\n this.isRetail = true;\n this.isCMS = true;\n break;\n default:\n }\n };\n\n private _updateViewport(): void {\n this.viewport = this._getViewport();\n this.setState({ isMobile: this.isMobile });\n }\n\n private _getViewport(): GridSize {\n const { context } = this.props;\n\n // Always render in mobile viewport on a mobile device\n if (context.request && context.request.device && context.request.device.Type === 'Mobile') {\n return 'xs';\n }\n\n if (MsDyn365.isBrowser && window.innerWidth) {\n const gridSettings = context.request.gridSettings;\n if (gridSettings) {\n if (gridSettings.xs && window.innerWidth <= gridSettings.xs.w) {\n return 'xs';\n } else if (gridSettings.sm && window.innerWidth <= gridSettings.sm.w) {\n return 'sm';\n } else if (gridSettings.md && window.innerWidth <= gridSettings.md.w) {\n return 'md';\n } else if (gridSettings.lg && window.innerWidth <= gridSettings.lg.w) {\n return 'lg';\n }\n return 'xl';\n\n }\n }\n\n return 'xs';\n }\n}\n\nexport default NavigationMenu;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport MsDyn365, { IImageData, IImageSettings, Image } from '@msdyn365-commerce/core';\nimport { ArrayExtensions, generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport { getPayloadObject, getTelemetryAttributes, getTelemetryObject, IPayLoad, ITelemetryContent, Module, Node, onTelemetryClick } from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport * as React from 'react';\n\nimport { INavigationMenuViewProps } from './navigation-menu';\nimport { IMenuItemData } from './navigation-menu.data';\n\ninterface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: IImageData[] | null;\n mobileViewLabelText?: string;\n categoryImageAltText: string;\n}\n\n/**\n *\n * NavigationMenuView component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuView extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private currentLevel: number = 0;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly payLoad: IPayLoad;\n\n constructor(props: INavigationMenuViewProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n this.state = { activeMenu: undefined, mobileViewLabelText: '', parentMenu: undefined, categoryImageAltText: '' };\n this._closeSubmenu = this._closeSubmenu.bind(this);\n this.telemetryContent = getTelemetryObject(this.props.context.request.telemetryPageName!,\n this.props.friendlyName,\n this.props.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n }\n\n public componentDidMount(): void {\n if (MsDyn365.isBrowser) {\n document.body.addEventListener('mousedown', this._handleClickOutside);\n document.body.addEventListener('focusout', this._handleFocusOutside);\n }\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n if (MsDyn365.isBrowser) {\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n document.body.removeEventListener('focusout', this._handleFocusOutside, false);\n }\n\n }\n\n public render(): JSX.Element | null {\n const { isMobileView, MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props;\n\n this.currentLevel = 1;\n return (\n \n \n {isMobileView && this.state.activeMenu !== undefined &&\n \n \n \n {this.state.mobileViewLabelText}\n \n }\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem, menuItemData, isMobileView } = this.props;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (isMobileView && activeMenu !== undefined && menuItemData.length > 0) {\n let menuItem: IMenuItemData = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum && menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n !NavigationMenuView.isBackTrack ? this.setState({ parentMenu: undefined }) : this.setState({ parentMenu: undefined, mobileViewLabelText: menuItemDatum.linkText });\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum) as IMenuItemData;\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n menuItem && menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n {' '}\n \n );\n } else {\n menuItemData.forEach((item: IMenuItemData, index: number) => {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n });\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item && item.subMenu;\n if (subMenus && subMenus.length > 0) {\n for (let i = 0; i <= subMenus.length - 1; i++) {\n if (subMenus[i].id === this.state.activeMenu) {\n !NavigationMenuView.isBackTrack ? this.setState(\n { parentMenu: item?.id }\n ) : this.setState(\n { parentMenu: item && item.id, mobileViewLabelText: subMenus[i].linkText }\n );\n return subMenus[i];\n }\n const found = this._getFromSubMenu(subMenus[i]);\n if (found) {\n return found;\n }\n }\n }\n this.props.context.telemetry.error('Submenu content is empty, module wont render.');\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (menuItemData && menuItemData.subMenu && menuItemData.subMenu.length > 0) {\n if (this.props.isMobileView && this.state.activeMenu !== undefined) {\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false)}\n \n );\n\n } else if (menuItemData && menuItemData.linkText && menuItemData.linkURL && menuItemData.linkURL.length > 0) {\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id, false, true));\n } else if (menuItemData && menuItemData.linkText && !menuItemData.linkURL) {\n return (this._renderSpanMenuItem(menuItemData, menuItemData.id, true));\n }\n this.props.context.telemetry.error('Navigation menu content is empty, module wont render.');\n return null;\n }\n\n private _renderSubMenu(subMenus?: IMenuItemData[], activeMenu?: number, IsSubMenu?: boolean): JSX.Element | null {\n const { isMobileView, ListItem } = this.props;\n const enableMultiSupportMenu = this.props.config.enableMultilevelMenu || false;\n const multiLevelSupportedMenu = this.props.config.menuLevelSupport || 3;\n\n // Const isParentMenu:boolean= false;\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || subMenus.length === 0) {\n this.props.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus && subMenus.map((option: IMenuItemData, idx: number) => {\n const hasOptions = (option.subMenu && option.subMenu.length > 0);\n let menuItem: JSX.Element | null;\n if (hasOptions && isMobileView) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, idx);\n } else {\n menuItem = option.linkURL ? this._renderLinkMenuItem(option, idx) : this._renderSpanMenuItem(option);\n }\n\n let subMenu;\n const haveSubmenu = hasOptions && enableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - 1);\n if (haveSubmenu) {\n this.currentLevel++;\n levelClassName = enableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, isMobileView ? option.id : undefined, true);\n }\n return (\n \n { menuItem }\n { subMenu }\n \n );\n });\n return (this._renderMenu(levelClassName, menuOptions, activeMenu, IsSubMenu));\n }\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n const { Button } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number, hoverEffect: boolean = true, isParent: boolean = false): JSX.Element | null {\n const { Link } = this.props;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n { linkText }\n \n );\n }\n return null;\n\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number, isParent: boolean = false): JSX.Element | null {\n const { Span } = this.props;\n return (\n \n { option.linkText }\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], currentItem?: number, submenu?: boolean): JSX.Element | null {\n\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent, isMobileView } = this.props;\n const categoryImageDisplay = !isMobileView && (showCategoryImage || showPromotionalContent) && !ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const promotionalContentDisplay = !isMobileView && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !submenu;\n const DivContainerClass = this.currentLevel > 2 || categoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = 1;\n return (\n \n 2 && 'navmenu-multi-level')}>\n { menuOptions }\n \n {\n categoryImageDisplay && this.state.categoryImage && this.state.categoryImage.map(item => (\n \n { this.state.categoryImage && this._getCategoryImage(item) }\n { promotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n ))\n }\n \n );\n }\n\n private readonly _updateCategoryImage = (categoryImageSrc: string, option: IMenuItemData) => () => {\n const linkText = option && option.linkText ? option.linkText : '';\n const promotionalImage: IImageData[] = [{ src: categoryImageSrc, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n option.promotionalContent.map(item => {\n if (item && item.image) {\n const imageSrc = item.image.src;\n const promotionalItemImageSettings = item.image.imageSettings;\n promotionalImage.push({ src: imageSrc, altText: item.text, imageSettings: promotionalItemImageSettings,\n additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n }\n });\n }\n this.setState({\n categoryImage: promotionalImage.length > 0 ? promotionalImage : [{ src: 'empty' }],\n categoryImageAltText: linkText\n });\n };\n\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.props.isMobileView) {\n this.setState({\n activeMenu: (this.state.activeMenu && this.state.activeMenu === data.id!) ? undefined : data.id!,\n parentMenu: parentId\n });\n if (this.props.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuView.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n };\n\n private readonly _handleGoBack = () => () => {\n NavigationMenuView.isBackTrack = true;\n this.setState({ activeMenu: this.state.parentMenu });\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.target as Node)) {\n this.setState(\n {\n activeMenu: undefined,\n mobileViewLabelText: '',\n categoryImage: null\n }\n );\n }\n };\n\n /**\n * Method to handle click outside of menu.\n * @param event -HTML event.\n */\n private readonly _handleFocusOutside = (event: FocusEvent) => {\n if (this.menuNode.current && !this.menuNode.current.contains(event.relatedTarget as Node)) {\n this._closeSubmenu();\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Parent user clicked Sub menu list.\n * @param optionLinkText -Sub menu list.\n * @returns Ref.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n if (!NavigationMenuView.isBackTrack && index === 0) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n private _closeSubmenu(): void {\n if (!this.props.isMobileView) {\n this.setState({ activeMenu: undefined, categoryImage: null, mobileViewLabelText: '' });\n }\n }\n\n private readonly _getCategoryImage = (categoryImage?: IImageData): React.ReactNode | null => {\n\n if (!categoryImage || !categoryImage.src) {\n return null;\n }\n\n const categoryImageUrl = generateImageUrl(`${categoryImage.src}`, this.props.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: IImageSettings = {\n viewports: {\n xs: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n sm: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n md: { q: 'w=300&h=250&m=8', w: 0, h: 0 },\n lg: { q: 'w=300&h=250&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n return (\n \n );\n }\n return null;\n };\n}\n\nexport default NavigationMenuView;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport { generateImageUrl } from '@msdyn365-commerce-modules/retail-actions';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../../definition-extensions/navigation-menu.ext.props.autogenerated';\n\n/**\n * INavigationMenuViewRootProps.\n */\nexport interface INavigationMenuViewRootProps {\n navProps: INavigationMenuViewProps & INavigationMenuProps<{}>;\n}\n\n/**\n * Represent navigation menu state interface.\n */\nexport interface INavigationState {\n parentMenu?: number;\n activeMenu?: number;\n categoryImage?: Msdyn365.IImageData[] | null;\n mobileViewLabelText?: string;\n drawerKeyValue: Msdyn365.IDictionary;\n isOnlyMobile: boolean;\n isNavOpen: boolean;\n}\n\n/**\n * NavMenuConstants enum.\n */\nexport enum NavMenuConstants {\n zero = 0,\n one = 1,\n two = 2,\n three = 3,\n four = 4,\n escapeKey = 27,\n rootMenu = 1\n}\n\n/**\n * GridSizes.\n */\nexport type GridSize = 'xs' | 'sm' | 'md' | 'lg' | 'xl';\n\n/**\n * Get category image.\n * @param props - Navigation menu props.\n * @param categoryImage - Category Image.\n * @param alttext - AltText String.\n * @returns Returns Node.\n */\nexport const getCategoryImage = (props: INavigationMenuViewRootProps, categoryImage: string, alttext: string): React.ReactNode | null => {\n\n const categoryImageUrl = generateImageUrl(`${categoryImage}`, props.navProps.context.actionContext.requestContext.apiSettings);\n const defaultImageSettings: Msdyn365.IImageSettings = {\n viewports: {\n xs: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n sm: { q: 'w=162&h=162&m=8', w: 0, h: 0 },\n md: { q: 'w=203&h=203&m=8', w: 0, h: 0 },\n lg: { q: 'w=203&h=203&m=8', w: 0, h: 0 }\n },\n lazyload: true\n };\n if (categoryImageUrl !== undefined) {\n const imageData: Msdyn365.IImageData = { src: categoryImageUrl };\n return (\n \n );\n }\n return null;\n};\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse, Drawer, getPayloadObject, getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootDisabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootDisabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n return null;\n });\n }\n }\n\n this.state = {\n activeMenu: 1,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = 1;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\n \n {this._renderCollapseMenu()}\n )\n }\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: 1,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MenuList, MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = 1;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\n \n \n \n {this.state.mobileViewLabelText}\n \n }\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { MenuList, Navigation } = this.props.navProps;\n\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return (\n this._renderLinkMenuItem(item)\n );\n } else if (!item.linkURL) {\n return (\n this._renderSpanMenuItem(item)\n );\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n const menuItemData: IMenuItemData[] = this.props.navProps.menuItemData;\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n\n if (ArrayExtensions.hasElements(menuItemData)) {\n menuItemData[0].id = 1;\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n const menuItem = this._getFromSubMenu(undefined, menuItemData);\n\n if (menuItem) {\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n {' '}\n \n );\n }\n } else {\n\n for (const [index, item] of menuItemData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(parentMenuId?: number, menu?: IMenuItemData[]): IMenuItemData | null {\n if (!menu) {\n return null;\n }\n\n for (let index = 0; index <= menu.length - NavMenuConstants.one; index++) {\n const item: IMenuItemData = menu[Number(index)];\n\n if (item.id === this.state.activeMenu) {\n if (!NavigationMenuRootDisabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: item.linkText });\n }\n return item;\n }\n const found = this._getFromSubMenu(item.id, item.subMenu);\n if (found) {\n return found;\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\n }\n\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\n } else if (!menuItemData.linkURL && !(this.state.isOnlyMobile && this.state.activeMenu !== undefined)) {\n return (this._renderSpanMenuItem(menuItemData));\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\n\n if (hasOptions && !this.state.isOnlyMobile) {\n\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n { menuItem}\n { subMenu}\n \n );\n });\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\n } else {\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n { linkText}\n \n );\n }\n return null;\n\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, MenuList, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName = isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\n \n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n ))\n }\n
\n
\n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootDisabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootDisabled.isBackTrack = true;\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current &&\n !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootDisabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: 1, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n}\n\nexport default NavigationMenuRootDisabled;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport * as Msdyn365 from '@msdyn365-commerce/core';\nimport { IMenuItemData, MenuSource, MenuTypeIndexId } from '@msdyn365-commerce-modules/navigation-menu';\nimport { ArrayExtensions, StringExtensions } from '@msdyn365-commerce-modules/retail-actions';\nimport {\n addThrottledEvent,\n Button,\n Collapse, Drawer, getPayloadObject, getTelemetryAttributes,\n getTelemetryObject,\n ICollapseProps,\n IPayLoad,\n isMobile,\n ITelemetryContent,\n Module,\n Node,\n onTelemetryClick,\n VariantType\n} from '@msdyn365-commerce-modules/utilities';\nimport classnames from 'classnames';\nimport { computed } from 'mobx';\nimport * as React from 'react';\n\nimport { getCategoryImage, INavigationMenuViewRootProps, INavigationState, NavMenuConstants } from './navigation-menu-utilities';\n\n/**\n *\n * NavigationMenuRootEnabled component.\n * @extends {React.PureComponent}\n */\nexport class NavigationMenuRootEnabled extends React.PureComponent {\n private static isBackTrack: boolean = false;\n\n private readonly supportedLevel: number = NavMenuConstants.four;\n\n private currentLevel: number = NavMenuConstants.zero;\n\n private readonly menuNode: React.RefObject;\n\n private readonly menuItemRef: React.RefObject;\n\n private readonly escapeKey: number = NavMenuConstants.escapeKey;\n\n private readonly telemetryContent: ITelemetryContent;\n\n private readonly promotionalImage: Msdyn365.IImageData[] = [];\n\n private menuItemData: IMenuItemData[] = [];\n\n private readonly payLoad: IPayLoad;\n\n private readonly attributes?: Msdyn365.IDictionary;\n\n private customResizeThrottledEventHandler?: (event: Event) => void;\n\n public constructor(props: INavigationMenuViewRootProps) {\n super(props);\n this.menuNode = React.createRef();\n this.menuItemRef = React.createRef();\n const { menuItemData } = this.props.navProps;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n const imagesource = menuItemData[0].subMenu[0].imageSource ? menuItemData[0].subMenu[0].imageSource : '';\n const linkText = menuItemData[0].subMenu[0].linkText ? menuItemData[0].subMenu[0].linkText : '';\n this.promotionalImage = [{ src: imagesource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(menuItemData[0].subMenu[0].promotionalContent)) {\n menuItemData[0].subMenu[0].promotionalContent.map(item => {\n const imageSource = item.image.src;\n this.promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n return null;\n });\n }\n }\n this.state = {\n activeMenu: NavMenuConstants.rootMenu,\n mobileViewLabelText: '',\n parentMenu: undefined,\n drawerKeyValue: {},\n isOnlyMobile: this.isOnlyMobile,\n categoryImage: this.promotionalImage,\n isNavOpen: false\n };\n\n this.telemetryContent = getTelemetryObject(this.props.navProps.context.request.telemetryPageName!,\n this.props.navProps.friendlyName,\n this.props.navProps.telemetry);\n this.payLoad = getPayloadObject('click', this.telemetryContent, '', '');\n this.attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n }\n\n @computed public get isOnlyMobile(): boolean {\n return (isMobile({ variant: VariantType.Browser, context: this.props.navProps.context.request }) === 'xs');\n }\n\n public componentDidMount(): void {\n this.customResizeThrottledEventHandler = addThrottledEvent(window, 'resize', this._customUpdateViewport as EventListener);\n document.addEventListener('keydown', (this._escFunction as unknown) as EventListener, false);\n this._customUpdateViewport();\n document.body.addEventListener('mousedown', this._handleClickOutside);\n this._addShopAllLink();\n }\n\n public componentDidUpdate(): void {\n if (this.menuItemRef.current?.children[0] && this.props.navProps.isMobileView) {\n (this.menuItemRef.current.children[0] as HTMLElement).focus();\n }\n }\n\n public componentWillUnmount(): void {\n window.removeEventListener('resize', this.customResizeThrottledEventHandler!, false);\n document.body.removeEventListener('mousedown', this._handleClickOutside, false);\n }\n\n public render(): JSX.Element | null {\n this.currentLevel = NavMenuConstants.one;\n const navbarKey = 'header-nav-mobile';\n return (\n \n {\n this.state.isOnlyMobile ? this._renderMobileMenu() : (<>\n \n {this._renderCollapseMenu()}\n )\n }\n \n );\n }\n\n /**\n * Function to handle nav bar toggle.\n */\n private readonly _toggleNavBar = (): void => {\n this.setState(previousState => ({\n activeMenu: NavMenuConstants.rootMenu,\n isNavOpen: !previousState.isNavOpen\n }));\n };\n\n private _renderCollapseMenu(): JSX.Element | null {\n return (\n \n {this.state.isOnlyMobile ? this._renderMobileMenu() : this._renderDesktopMenu()}\n \n );\n }\n\n private _renderMobileMenu(): JSX.Element {\n const { MobileBackButton, MobileDescriptionContainer, MobileDescriptionLabel, Navigation } = this.props.navProps;\n\n this.currentLevel = NavMenuConstants.one;\n return (\n \n \n {this.state.isOnlyMobile && this.state.activeMenu !== undefined &&\n \n \n \n {this.state.mobileViewLabelText}\n \n }\n {this._renderDisplay()}\n \n \n );\n }\n\n private _renderDesktopMenu(): JSX.Element {\n const { Navigation } = this.props.navProps;\n return (\n \n \n {this._renderDisplay()}\n
\n
\n
\n
\n );\n }\n\n private _renderDrawerLink(item: IMenuItemData): JSX.Element | null {\n if (item.linkURL && !StringExtensions.isNullOrWhitespace(item.linkURL)) {\n return (\n this._renderLinkMenuItem(item)\n );\n } else if (!item.linkURL) {\n return (\n this._renderSpanMenuItem(item)\n );\n }\n return null;\n }\n\n private _renderDisplay(): JSX.Element[] {\n const { ListItem } = this.props.navProps;\n let menuItemData: IMenuItemData[] = [];\n if (this.state.isOnlyMobile) {\n menuItemData = this.menuItemData;\n } else {\n menuItemData = this.props.navProps.menuItemData;\n }\n const { activeMenu } = this.state;\n const menuItemList: JSX.Element[] = [];\n let cmsMenuData: IMenuItemData[] | undefined = [];\n let retailMenuItemData: IMenuItemData[] | undefined = [];\n const retailMenuData = JSON.parse(JSON.stringify(menuItemData)) as IMenuItemData[];\n\n for (const item of retailMenuData) {\n retailMenuItemData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\n item.subMenu = retailMenuItemData;\n }\n\n for (const item of menuItemData) {\n cmsMenuData = item.subMenu!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id < MenuTypeIndexId.Retail));\n }\n\n if (this.state.isOnlyMobile && activeMenu !== undefined && ArrayExtensions.hasElements(menuItemData)) {\n let menuItem: IMenuItemData | null = {};\n for (const menuItemDatum of menuItemData) {\n if (menuItemDatum.id === activeMenu) {\n menuItem = menuItemDatum;\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({\n parentMenu: undefined\n });\n } else {\n this.setState({\n parentMenu: undefined,\n mobileViewLabelText: menuItemDatum.linkText\n });\n }\n break;\n }\n menuItem = this._getFromSubMenu(menuItemDatum);\n if (menuItem && menuItem.id === activeMenu) {\n break;\n }\n }\n\n if (menuItem) {\n menuItemList.push(\n \n {' '}\n {this._createMenuItemList(menuItem)}\n {' '}\n \n );\n }\n\n } else {\n for (const [index, item] of retailMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n
\n );\n }\n\n for (const [index, item] of cmsMenuData.entries()) {\n menuItemList.push(\n \n {this._createMenuItemList(item)}\n \n );\n }\n }\n\n return menuItemList;\n }\n\n private _getFromSubMenu(item?: IMenuItemData): IMenuItemData | null {\n const subMenus = item?.subMenu;\n if (subMenus && ArrayExtensions.hasElements(subMenus)) {\n for (let index = 0; index <= subMenus.length - NavMenuConstants.one; index++) {\n const subMenu: IMenuItemData = subMenus[Number(index)];\n let parentMenuId = item?.id;\n\n if (subMenu.id === this.state.activeMenu) {\n if (parentMenuId === NavMenuConstants.rootMenu && subMenu.id! < MenuTypeIndexId.Retail) {\n parentMenuId = undefined;\n }\n\n if (!NavigationMenuRootEnabled.isBackTrack) {\n this.setState({ parentMenu: parentMenuId });\n } else {\n this.setState({ parentMenu: parentMenuId, mobileViewLabelText: subMenu.linkText });\n }\n return subMenu;\n }\n const found = this._getFromSubMenu(subMenu);\n if (found) {\n return found;\n }\n }\n }\n return null;\n }\n\n private _createMenuItemList(menuItemData: IMenuItemData): JSX.Element | null {\n if (ArrayExtensions.hasElements(menuItemData.subMenu)) {\n if (this.state.isOnlyMobile && this.state.activeMenu !== undefined) {\n return (this._renderSubMenu(menuItemData.subMenu, menuItemData.id, false));\n }\n return (\n <>\n {this._renderButtonMenuItem(menuItemData)}\n {this._renderSubMenu(menuItemData.subMenu, menuItemData.id)}\n \n );\n\n } else if (menuItemData.linkURL && !StringExtensions.isNullOrWhitespace(menuItemData.linkURL)) {\n return (this._renderLinkMenuItem(menuItemData, menuItemData.id));\n } else if (!menuItemData.linkURL) {\n return (this._renderSpanMenuItem(menuItemData));\n }\n\n return null;\n }\n\n private _renderSubMenu(subMenuArray?: IMenuItemData[], activeMenu?: number, isSubMenu?: boolean): JSX.Element | null {\n\n let subMenus: IMenuItemData[] | undefined = subMenuArray;\n if (activeMenu === NavMenuConstants.rootMenu) {\n subMenus = subMenuArray!.filter(subMenuItem => (subMenuItem.id && subMenuItem.id >= MenuTypeIndexId.Retail));\n }\n\n const { ListItem } = this.props.navProps;\n const isEnableMultiSupportMenu = this.props.navProps.config.enableMultilevelMenu ?? false;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n if (activeMenu && this.state.activeMenu !== activeMenu) {\n this.props.navProps.context.telemetry.error('Navigation Active menu content is empty, module wont render.');\n return null;\n }\n\n if (!subMenus || !ArrayExtensions.hasElements(subMenus)) {\n this.props.navProps.context.telemetry.error('Navigation Submenu content is empty, module wont render.');\n return null;\n }\n\n let levelClassName: string = '';\n const menuOptions = subMenus.map((option: IMenuItemData, index: number) => {\n const hasOptions = (option.subMenu && ArrayExtensions.hasElements(option.subMenu));\n let menuItem: JSX.Element | null;\n if (hasOptions && this.state.isOnlyMobile) {\n menuItem = this._renderButtonMenuItem(option, activeMenu, index);\n } else if (this.currentLevel === NavMenuConstants.one || !hasOptions) {\n menuItem = this.getMenuItem(option, index);\n } else {\n menuItem = null;\n }\n let subMenu;\n const isHavingSubmenu = hasOptions && isEnableMultiSupportMenu && (this.currentLevel <= Math.round(multiLevelSupportedMenu) - NavMenuConstants.one);\n\n if (hasOptions && !this.state.isOnlyMobile) {\n if (this.currentLevel >= NavMenuConstants.two) {\n subMenu = this._renderSubMenuDrawer(option);\n } else if (this.currentLevel <= this.supportedLevel - NavMenuConstants.one) {\n this.currentLevel++;\n levelClassName = `level-${this.currentLevel.toString()}`;\n subMenu = this._renderSubMenu(option.subMenu, undefined, true);\n }\n }\n if (isHavingSubmenu && this.state.isOnlyMobile) {\n this.currentLevel++;\n levelClassName = isEnableMultiSupportMenu ? `level-${this.currentLevel.toString()}` : '';\n subMenu = this._renderSubMenu(option.subMenu, option.id, true);\n }\n const imagesource = option.imageSource ? option.imageSource : '';\n return (\n \n { menuItem}\n { subMenu}\n \n );\n });\n return (this._renderMenu(levelClassName, menuOptions, isSubMenu));\n }\n\n private getMenuItem(option: IMenuItemData, index: number): JSX.Element | null {\n let menuItem: JSX.Element | null;\n if (this.currentLevel === NavMenuConstants.one) {\n menuItem = (option.linkURL ? this._renderLinkMenuItemLevelOne(option, index) : this._renderSpanMenuItem(option));\n } else {\n menuItem = (option.linkURL ? this._renderLinkMenuItem(option, index) : this._renderSpanMenuItem(option));\n }\n return menuItem;\n }\n\n private _renderSubMenuDrawer(menuItem: IMenuItemData): JSX.Element | null {\n const levelClassName = `level-${this.currentLevel.toString()}`;\n const toggleButtonText = menuItem.linkText;\n const keyValue = this.state.drawerKeyValue;\n const buttonText = toggleButtonText !== undefined ? toggleButtonText : '';\n const keys = keyValue;\n const multiLevelSupportedMenu = this.props.navProps.config.menuLevelSupport ?? NavMenuConstants.three;\n\n let isDrawerOpen = false;\n if (keys[menuItem.id!]) {\n isDrawerOpen = true;\n }\n const colProps: ICollapseProps = { timeout: 0, isOpen: isDrawerOpen };\n return (\n \n
\n {menuItem.subMenu!.map((menuSubItem: IMenuItemData) => {\n if (ArrayExtensions.hasElements(menuSubItem.subMenu)) {\n this.currentLevel++;\n if (this.currentLevel < multiLevelSupportedMenu) {\n return this._renderSubMenuDrawer(menuSubItem);\n }\n }\n return this._renderDrawerLink(menuSubItem);\n })}\n
\n \n );\n }\n\n /**\n * Method to handle escape key event.\n * @param menuId -Number.\n * @param isDrawerOpen -Boolean.\n * @returns Void.\n */\n private readonly _bindDesktopCategoryClick = (menuId: number | undefined, isDrawerOpen: boolean) => (): void => {\n const { drawerKeyValue } = this.state;\n const newPair = { [menuId!]: !isDrawerOpen };\n this.setState({ drawerKeyValue: { ...drawerKeyValue, ...newPair } });\n };\n\n private _renderButtonMenuItem(option: IMenuItemData, activeMenu?: number, index?: number): JSX.Element | null {\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderLinkMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderLinkMenuItemLevelOne(option: IMenuItemData, index?: number, isHoverEffect: boolean = true): JSX.Element | null {\n const { Link } = this.props.navProps;\n const linkText = option.linkText ? option.linkText : '';\n const imagesource = option.imageSource ? option.imageSource : '';\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderPromotionalLink(linkText?: string, linkUrl?: string): JSX.Element | null {\n const { Link } = this.props.navProps;\n this.payLoad.contentAction.etext = linkText;\n const attributes = getTelemetryAttributes(this.telemetryContent, this.payLoad);\n if (linkText && linkUrl) {\n return (\n \n { linkText}\n \n );\n }\n return null;\n\n }\n\n private _renderSpanMenuItem(option: IMenuItemData, index?: number): JSX.Element | null {\n const { Span } = this.props.navProps;\n return (\n \n { option.linkText}\n \n );\n }\n\n private _renderMenu(level: string, menuOptions: JSX.Element[], isSubmenu?: boolean): JSX.Element | null {\n const { DivContainer, ImageDivContainer, showCategoryImage, showPromotionalContent } = this.props.navProps;\n const isCategoryImageDisplay =\n !this.state.isOnlyMobile && showCategoryImage && this.state.categoryImage !== null && this.state.categoryImage !== undefined && !isSubmenu;\n const isPromotionalContentDisplay =\n !this.state.isOnlyMobile && showPromotionalContent && ArrayExtensions.hasElements(this.state.categoryImage) && !isSubmenu;\n const divContainerClass = this.currentLevel > NavMenuConstants.two || isCategoryImageDisplay ? DivContainer!.className : 'ms-nav__deafult';\n this.currentLevel = NavMenuConstants.one;\n const menuLevelSupportClassName =\n isCategoryImageDisplay && this.props.navProps.config.menuLevelSupport &&\n this.props.navProps.config.menuLevelSupport > NavMenuConstants.two && 'navmenu-multi-level';\n\n const categoryImages = this.state.categoryImage?.filter(image => !StringExtensions.isNullOrWhitespace(image.src));\n const imagesContainerKey = categoryImages?.map(item => item.src).join('-');\n return (\n \n \n {menuOptions}\n \n
\n {\n isCategoryImageDisplay && ArrayExtensions.hasElements(categoryImages) && categoryImages.map(item => (\n \n { getCategoryImage(this.props, item.src ?? '', item.altText!.toString())}\n { isPromotionalContentDisplay && this._renderPromotionalLink(item.altText, item.additionalProperties?.linkUrl)}\n ))\n }\n
\n \n );\n }\n\n /**\n * Handle Category image update.\n * @param categoryImageSource - Image source.\n * @param option - Menu Item data.\n * @returns Returns empty.\n */\n private readonly _updateCategoryImage = (categoryImageSource: string, option: IMenuItemData) => () => {\n const linkText = option.linkText ? option.linkText : '';\n const promotionalImage: Msdyn365.IImageData[] = [{ src: categoryImageSource, altText: linkText }];\n\n // Read category and promotional image in one array\n if (ArrayExtensions.hasElements(option.promotionalContent)) {\n for (const item of option.promotionalContent) {\n const imageSource = item.image.src;\n promotionalImage.push({ src: imageSource, altText: item.text, additionalProperties: { linkUrl: item.linkUrl.destinationUrl } });\n }\n }\n this.setState({\n categoryImage: ArrayExtensions.hasElements(promotionalImage) ? promotionalImage : [{ src: 'empty' }]\n });\n };\n\n /**\n * Handle dropdown toggle.\n * @param data - Menu Item data.\n * @param parentId - Number.\n * @returns Returns empty.\n */\n private readonly _handleDropdownToggle = (data: IMenuItemData, parentId?: number) => () => {\n if (!this.state.isOnlyMobile) {\n this.setState({\n activeMenu: data.id,\n parentMenu: parentId\n });\n if (this.props.navProps.showCategoryImage) {\n this._updateCategoryImage(data.imageSource!, data)();\n }\n } else {\n NavigationMenuRootEnabled.isBackTrack = false;\n this.setState({\n activeMenu: data.id,\n mobileViewLabelText: data.linkText!,\n parentMenu: parentId\n });\n }\n\n };\n\n /**\n * Handle back navigation for menu items for mobile view.\n * @returns Returns empty.\n */\n private readonly _handleGoBack = () => () => {\n NavigationMenuRootEnabled.isBackTrack = true;\n this.setState((previousState) => ({ activeMenu: previousState.parentMenu }));\n };\n\n /**\n * Function to close the nav menu on click on body.\n * @param event - MouseEvent.\n */\n private readonly _handleClickOutside = (event: MouseEvent) => {\n if (this.menuNode.current &&\n !this.menuNode.current.contains(event.target as Node)) {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n }\n };\n\n /**\n * Add shop all link for Mobile submenu.\n */\n private readonly _addShopAllLink = (): void => {\n const { menuItemData } = this.props.navProps;\n this.menuItemData = menuItemData;\n if (ArrayExtensions.hasElements(menuItemData) && ArrayExtensions.hasElements(menuItemData[0].subMenu)) {\n this.menuItemData[0].subMenu?.map(item => {\n const shopAllObject = {};\n Object.assign(shopAllObject, { imageSource: item.imageSource });\n Object.assign(shopAllObject, { linkText: this.props.navProps.resources.allCategoryMenuText });\n Object.assign(shopAllObject, { linkURL: item.linkURL });\n if (ArrayExtensions.hasElements(item.subMenu) && item.menuSource === MenuSource.Retail) {\n item.subMenu.unshift(shopAllObject);\n }\n return item;\n });\n }\n };\n\n /**\n * Checks to assign a ref for focus.\n * @param index -Sub menu list index.\n * @param mobileViewLabelText -Mobile view label text.\n * @param optionLinkText -Sub menu item link text.\n * @returns Boolean.\n */\n private readonly _shouldAddFocusMenuRef = (index: number, mobileViewLabelText?: string, optionLinkText?: string) => {\n const firstIndex: number = 0;\n if (!NavigationMenuRootEnabled.isBackTrack && index === firstIndex) {\n return true;\n }\n if (!optionLinkText || !mobileViewLabelText) {\n return false;\n }\n return mobileViewLabelText === optionLinkText;\n };\n\n /**\n * Function to handle nav menu close.\n */\n private readonly _closeNavMenu = (): void => {\n if (!this.state.isOnlyMobile) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n } else {\n this.setState({ activeMenu: undefined, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Function to close the nav menu on esc key.\n * @param event - Event.\n */\n private readonly _escFunction = (event: React.KeyboardEvent) => {\n if (event.keyCode === this.escapeKey && !this.state.isOnlyMobile && this.state.isNavOpen) {\n this.setState({ activeMenu: NavMenuConstants.rootMenu, mobileViewLabelText: '', isNavOpen: false });\n }\n };\n\n /**\n * Custom update viewport.\n */\n private readonly _customUpdateViewport = (): void => {\n this.setState({ isOnlyMobile: this.isOnlyMobile });\n };\n\n}\n\nexport default NavigationMenuRootEnabled;\n","/*--------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * See License.txt in the project root for license information.\n *--------------------------------------------------------------*/\n\nimport { INavigationMenuViewProps } from '@msdyn365-commerce-modules/navigation-menu';\nimport * as React from 'react';\n\nimport { INavigationMenuProps } from '../definition-extensions/navigation-menu.ext.props.autogenerated';\nimport NavigationMenuRootDisabled from './components/navigation-menu-root-disabled';\nimport NavigationMenuRootEnabled from './components/navigation-menu-root-enabled';\n\n/**\n * Render the Navigation menu.\n * @param props - The navigation menu view props.\n * @returns Return HTML having INavigationMenuViewProps props with navigation menu.\n */\nconst navigationMenuView = (props: INavigationMenuViewProps & INavigationMenuProps<{}>): JSX.Element => {\n\n if (props.config.enabletopMenu) {\n return ;\n }\n\n return ;\n\n};\n\nexport default navigationMenuView;\n","module.exports = React;","module.exports = ReactDOM;"],"names":["binding","modules","dataActions","c","require","$type","da","name","path","runOn","iNM","ns","n","p","pdp","md","sanitizedActionPath","dataAction","default","Error","prototype","RegistrationId","id","registerSanitizedActionPath","window","__bindings__","viewDictionary","cn","NavigationMenuView","React","constructor","props","super","currentLevel","_positionInSetOffset","escapeKey","_updateCategoryImage","categoryImageSrc","option","linkText","promotionalImage","src","altText","ArrayExtensions","promotionalContent","map","item","image","imageSrc","promotionalItemImageSettings","imageSettings","push","text","additionalProperties","linkUrl","destinationUrl","this","setState","categoryImage","length","categoryImageAltText","_handleDropdownToggle","data","parentId","isMobileView","activeMenu","parentMenu","state","undefined","showCategoryImage","imageSource","_resetFocus","setTimeout","menuNode","current","focus","_handleClickOutside","event","contains","target","_handleFocusOutside","relatedTarget","_closeSubmenu","_escFunction","keyCode","navDrawerList","Array","from","childNodes","navDrawerButton","firstChild","getAttribute","_getCategoryImage","categoryImageUrl","generateImageUrl","context","actionContext","requestContext","apiSettings","defaultImageSettings","viewports","xs","q","w","h","sm","lg","lazyload","ImageData","Image","className","gridSettings","request","config","categoryImageSettings","loadFailureBehavior","role","_onDrawerChange","drawerState","drawerKeyValue","newPair","buttonText","isOpen","bind","telemetryContent","getTelemetryObject","telemetryPageName","friendlyName","telemetry","payLoad","getPayloadObject","componentDidMount","MsDyn365","document","body","addEventListener","componentWillUnmount","removeEventListener","render","_renderMobileMenu","_renderDesktopMenu","menuItemData","Navigation","Module","classnames","menuItem","posinset","_renderDrawerMenu","MenuList","Node","ref","tabIndex","_renderDisplay","setSize","subMenu","_renderDrawer","_renderLinkMenuItem","toggleButtonText","keyValue","keys","isDrawerOpen","colProps","Drawer","toggleButtonProps","ariaLabel","key","openGlyph","onToggle","collapseProps","closeGlyph","glyphPlacement","_renderLinkText","menuSubItem","currentPos","_renderDrawerLink","linkURL","_renderSpanMenuItem","ListItem","menuItemList","menuItemDatum","_getFromSubMenu","_createMenuItemList","forEach","index","subMenus","i","found","_renderSubMenu","_renderButtonMenuItem","IsSubMenu","enableMultiSupportMenu","enableMultilevelMenu","multiLevelSupportedMenu","menuLevelSupport","error","levelClassName","menuOptions","idx","hasOptions","haveSubmenu","Math","round","toString","_renderMenu","Button","onClick","onFocus","hoverEffect","isParent","Link","imagesource","contentAction","etext","attributes","getTelemetryAttributes","shouldOpenNewTab","onMouseOver","href","onTelemetryClick","_renderPromotionalLink","Span","level","currentItem","submenu","DivContainer","ImageDivContainer","showPromotionalContent","categoryImageDisplay","promotionalContentDisplay","DivContainerClass","MenuTypeIndexId","MenuSource","NavigationMenu","isRetail","isCMS","_setNavigationSource","sourceType","_updateViewport","viewport","device","Type","navigationMenuSource","isMobile","static","locale","nameTranslations","nameTranslation","find","Language","toLowerCase","Text","resizeThrottledEventHandler","addThrottledEvent","_mapData","isEmptyOrNullObject","viewProps","xl","moduleProps","tag","displayCategoryImage","displayPromotionalImage","ImageContainer","MobileDescriptionContainer","MobileBackButton","resources","backButtonAriaLabel","MobileDescriptionLabel","renderView","mergedData","categories","result","_constructMenuItemData","cmsNavItems","_constructTopMenuItemData","enabletopMenu","mergedRootMenuData","topMenu","rootMenuNavigation","retailItem","cmsItem","addedAllMenu","categoryPromotionalContent","cmsItemText","menuAriaLabel","promotionalData","filter","promoItem","categoryName","Name","Images","Uri","RSItemIdInit","getFriendlyName","NameTranslations","Url","_getNestedChildren","menuSource","CMSItemIdInit","imageDestinationURL","imageLink","_getCMSNestedChildren","openInNewTab","category","imageSourceUrl","nestedChildren","Children","allCategoryMenuText","getCategoryUrl","_getViewport","innerWidth","__decorate","observable","computed","isBackTrack","mobileViewLabelText","_handleGoBack","_shouldAddFocusMenuRef","optionLinkText","menuItemRef","componentDidUpdate","children","NavMenuConstants","getCategoryImage","alttext","navProps","imageData","Msdyn365","NavigationMenuRootDisabled","supportedLevel","four","zero","_toggleNavBar","previousState","isNavOpen","_bindDesktopCategoryClick","menuId","categoryImageSource","isOnlyMobile","_closeNavMenu","_customUpdateViewport","variant","VariantType","customResizeThrottledEventHandler","title","hamburgerAriaLabel","_renderCollapseMenu","Collapse","StringExtensions","entries","parentMenuId","menu","one","Number","subMenuArray","isSubMenu","rootMenu","subMenuItem","isEnableMultiSupportMenu","three","getMenuItem","isHavingSubmenu","two","_renderSubMenuDrawer","_renderLinkMenuItemLevelOne","timeout","isHoverEffect","isSubmenu","isCategoryImageDisplay","isPromotionalContentDisplay","divContainerClass","menuLevelSupportClassName","categoryImages","imagesContainerKey","join","NavigationMenuRootEnabled","_addShopAllLink","shopAllObject","Object","assign","unshift","cmsMenuData","retailMenuItemData","retailMenuData","JSON","parse","stringify","module","exports","ReactDOM"],"sourceRoot":""}